[mapnik] 31/34: Imported Upstream version 3.0.0~rc1+dfsg

Jérémy Lal kapouer at moszumanska.debian.org
Fri Oct 24 22:45:36 UTC 2014


This is an automated email from the git hooks/post-receive script.

kapouer pushed a commit to branch master
in repository mapnik.

commit 0656227fa75ccc4c8a3d6bf70e813c2d54c02e1e
Author: Jérémy Lal <kapouer at melix.org>
Date:   Sat Oct 25 00:00:36 2014 +0200

    Imported Upstream version 3.0.0~rc1+dfsg
---
 .gitignore                                         |    10 +-
 .travis.yml                                        |    60 +-
 AUTHORS.md                                         |    19 +-
 CHANGELOG.md                                       |   139 +-
 INSTALL.md                                         |    53 +-
 Makefile                                           |    54 +-
 README.md                                          |    13 +-
 SConstruct                                         |   580 +-
 benchmark/.gitignore                               |     6 +
 benchmark/allocation.cpp                           |    49 -
 benchmark/bench_framework.hpp                      |   129 +
 benchmark/build.py                                 |    50 +-
 benchmark/compare_images.hpp                       |    51 +
 benchmark/data/polygon.wkt                         |     2 +-
 benchmark/data/polygon_clipping_agg.png            |   Bin 0 -> 4991 bytes
 benchmark/data/polygon_clipping_boost.png          |   Bin 0 -> 4991 bytes
 benchmark/data/polygon_clipping_clipper.png        |   Bin 0 -> 5029 bytes
 benchmark/data/polygon_rendering_clip.xml          |    14 +
 benchmark/data/polygon_rendering_no_clip.xml       |    14 +
 benchmark/data/roads.csv                           |   853 +
 benchmark/data/roads.xml                           |    87 +
 benchmark/run                                      |    32 +
 benchmark/run.cpp                                  |   916 -
 benchmark/template.cpp                             |    17 +
 benchmark/test_array_allocation.cpp                |   375 +
 benchmark/test_expression_parse.cpp                |    40 +
 benchmark/test_face_ptr_creation.cpp               |    68 +
 benchmark/test_font_registration.cpp               |    26 +
 benchmark/test_png_encoding1.cpp                   |    26 +
 benchmark/test_png_encoding2.cpp                   |    36 +
 benchmark/test_polygon_clipping.cpp                |   320 +
 benchmark/test_polygon_clipping_rendering.cpp      |    79 +
 benchmark/test_proj_transform1.cpp                 |    96 +
 benchmark/test_rendering.cpp                       |   108 +
 benchmark/test_rendering_shared_map.cpp            |   159 +
 benchmark/test_to_bool.cpp                         |    29 +
 benchmark/test_to_double.cpp                       |    31 +
 benchmark/test_to_int.cpp                          |    31 +
 benchmark/test_to_string1.cpp                      |    27 +
 benchmark/test_to_string2.cpp                      |    28 +
 benchmark/test_utf_encoding.cpp                    |   107 +
 bindings/python/boost_std_shared_shim.hpp          |    49 +
 bindings/python/build.py                           |    32 +-
 bindings/python/mapnik/__init__.py                 |   125 +-
 bindings/python/mapnik/printing.py                 |    17 +-
 bindings/python/mapnik_building_symbolizer.cpp     |    52 -
 bindings/python/mapnik_color.cpp                   |    10 +
 bindings/python/mapnik_coord.cpp                   |     9 +
 bindings/python/mapnik_datasource.cpp              |    36 +-
 bindings/python/mapnik_datasource_cache.cpp        |    14 +-
 bindings/python/mapnik_debug_symbolizer.cpp        |    42 -
 bindings/python/mapnik_enumeration.hpp             |    16 +-
 .../mapnik_enumeration_wrapper_converter.hpp       |    45 +
 bindings/python/mapnik_envelope.cpp                |    10 +-
 bindings/python/mapnik_expression.cpp              |    27 +-
 bindings/python/mapnik_feature.cpp                 |    62 +-
 bindings/python/mapnik_featureset.cpp              |    11 +-
 bindings/python/mapnik_font_engine.cpp             |    11 +
 bindings/python/mapnik_fontset.cpp                 |     8 +
 bindings/python/mapnik_gamma_method.cpp            |    11 +-
 bindings/python/mapnik_geometry.cpp                |   170 +-
 bindings/python/mapnik_grid.cpp                    |    15 +-
 bindings/python/mapnik_grid_view.cpp               |    15 +-
 bindings/python/mapnik_image.cpp                   |    43 +-
 bindings/python/mapnik_image_view.cpp              |    13 +
 .../python/mapnik_label_collision_detector.cpp     |    26 +-
 bindings/python/mapnik_layer.cpp                   |    13 +-
 bindings/python/mapnik_line_pattern_symbolizer.cpp |    78 -
 bindings/python/mapnik_line_symbolizer.cpp         |    80 -
 bindings/python/mapnik_logger.cpp                  |    10 +
 bindings/python/mapnik_map.cpp                     |    71 +-
 bindings/python/mapnik_markers_symbolizer.cpp      |   162 -
 bindings/python/mapnik_palette.cpp                 |    16 +-
 bindings/python/mapnik_parameters.cpp              |    23 +-
 bindings/python/mapnik_point_symbolizer.cpp        |    89 -
 .../python/mapnik_polygon_pattern_symbolizer.cpp   |    96 -
 bindings/python/mapnik_polygon_symbolizer.cpp      |    76 -
 bindings/python/mapnik_proj_transform.cpp          |    31 +-
 bindings/python/mapnik_projection.cpp              |     9 +
 bindings/python/mapnik_python.cpp                  |   313 +-
 bindings/python/mapnik_query.cpp                   |    30 +-
 bindings/python/mapnik_raster_colorizer.cpp        |    24 +-
 bindings/python/mapnik_raster_symbolizer.cpp       |   136 -
 bindings/python/mapnik_rule.cpp                    |    12 +-
 bindings/python/mapnik_scaling_method.cpp          |    12 +-
 bindings/python/mapnik_shield_symbolizer.cpp       |   218 -
 bindings/python/mapnik_stroke.cpp                  |   152 -
 bindings/python/mapnik_style.cpp                   |    23 +-
 bindings/python/mapnik_svg_generator_grammar.cpp   |    28 +
 bindings/python/mapnik_symbolizer.cpp              |   422 +-
 bindings/python/mapnik_text_placement.cpp          |   381 +-
 bindings/python/mapnik_threads.hpp                 |     6 +-
 bindings/python/mapnik_value_converter.hpp         |    21 +-
 bindings/python/mapnik_view_transform.cpp          |    28 +-
 bindings/python/python_cairo.cpp                   |    76 -
 bindings/python/python_grid_utils.cpp              |   135 +-
 bindings/python/python_grid_utils.hpp              |    24 +-
 bindings/python/python_optional.hpp                |    40 -
 bindings/python/python_to_value.hpp                |    96 +
 boost/geometry/extensions/index/rtree/rtree.hpp    |   774 -
 .../geometry/extensions/index/rtree/rtree_leaf.hpp |   253 -
 .../geometry/extensions/index/rtree/rtree_node.hpp |   493 -
 boost/gil/extension/toolbox/hsv.hpp                |   245 -
 configure                                          |     6 +-
 demo/c++/build.py                                  |     8 +-
 demo/c++/rundemo.cpp                               |   311 +-
 demo/python/rundemo.py                             |   210 +-
 demo/test/charplacement.py                         |    82 -
 demo/test/displacement.py                          |    83 -
 demo/test/overlap.py                               |    84 -
 demo/test/textspacing.py                           |    82 -
 demo/viewer/build.py                               |     2 +-
 demo/viewer/layer_info_dialog.cpp                  |     4 +-
 demo/viewer/layerlistmodel.cpp                     |     7 +-
 demo/viewer/layerlistmodel.hpp                     |     4 +-
 demo/viewer/main.cpp                               |     9 +-
 demo/viewer/mainwindow.cpp                         |    28 +-
 demo/viewer/mainwindow.hpp                         |     3 +-
 demo/viewer/mapwidget.cpp                          |    50 +-
 demo/viewer/mapwidget.hpp                          |    10 +-
 demo/viewer/styles_model.cpp                       |    35 +-
 demo/viewer/styles_model.hpp                       |     8 +-
 demo/viewer/viewer.pro                             |     6 +-
 deps/agg/build.py                                  |    41 +-
 deps/agg/include/agg_array.h                       |     3 +-
 deps/agg/include/agg_basics.h                      |   148 +-
 deps/agg/include/agg_conv_clipper.h                |   590 +-
 deps/agg/include/agg_conv_marker.h                 |     2 +-
 deps/agg/include/agg_conv_transform.h              |     2 +
 deps/agg/include/agg_curves.h                      |    16 +-
 deps/agg/include/agg_dda_line.h                    |     6 +-
 deps/agg/include/agg_ellipse.h                     |     8 +-
 deps/agg/include/agg_gradient_lut.h                |     6 +-
 deps/agg/include/agg_image_accessors.h             |    62 +-
 deps/agg/include/agg_image_filters.h               |    10 +-
 deps/agg/include/agg_line_aa_basics.h              |    12 +-
 deps/agg/include/agg_math.h                        |    18 +-
 deps/agg/include/agg_math_stroke.h                 |    26 +-
 deps/agg/include/agg_path_storage.h                |     4 +-
 deps/agg/include/agg_pixfmt_rgba.h                 |  5236 +-
 deps/agg/include/agg_rasterizer_cells_aa.h         |    21 +-
 deps/agg/include/agg_renderer_outline_aa.h         |    16 +-
 deps/agg/include/agg_renderer_outline_image.h      |    12 +-
 deps/agg/include/agg_rendering_buffer.h            |     3 +-
 deps/agg/include/agg_scanline_bin.h                |     2 +-
 deps/agg/include/agg_scanline_boolean_algebra.h    |    18 +-
 deps/agg/include/agg_scanline_storage_aa.h         |     2 +-
 deps/agg/include/agg_simul_eq.h                    |     2 +-
 deps/agg/include/agg_span_gouraud_gray.h           |     4 +-
 deps/agg/include/agg_span_gouraud_rgba.h           |     2 +-
 deps/agg/include/agg_span_gradient.h               |    12 +-
 deps/agg/include/agg_span_image_filter_rgba.h      |     6 +-
 deps/agg/include/agg_trans_affine.h                |   160 +-
 deps/agg/include/agg_trans_perspective.h           |     4 +-
 deps/agg/include/agg_trans_viewport.h              |     8 +-
 deps/agg/include/agg_vcgen_contour.h               |     3 +-
 deps/agg/include/agg_vcgen_stroke.h                |     4 +-
 deps/agg/src/agg_arc.cpp                           |    12 +-
 deps/agg/src/agg_bezier_arc.cpp                    |    28 +-
 deps/agg/src/agg_curves.cpp                        |    20 +-
 deps/agg/src/agg_pixfmt_rgba.cpp                   |    24 +-
 deps/agg/src/agg_rounded_rect.cpp                  |     4 +-
 deps/agg/src/agg_trans_affine.cpp                  |     4 +-
 deps/agg/src/agg_vcgen_dash.cpp                    |     4 +-
 .../geometry/extensions/index/rtree/helpers.hpp    |     0
 .../geometry/extensions/index/rtree/rtree.hpp      |   773 +
 .../geometry/extensions/index/rtree/rtree_leaf.hpp |   252 +
 .../geometry/extensions/index/rtree/rtree_node.hpp |   493 +
 .../boost}/gil/extension/toolbox/hsl.hpp           |     0
 deps/boost/gil/extension/toolbox/hsv.hpp           |   244 +
 deps/clipper/build.py                              |    13 +-
 deps/clipper/include/clipper.hpp                   |   313 +-
 deps/clipper/src/clipper.cpp                       |  4262 +-
 deps/mapnik/sparsehash/internal/hashtable-common.h |    11 -
 docs/contributing.markdown                         |    24 +-
 docs/design.markdown                               |     8 +-
 fonts/build.py                                     |    34 +-
 include/build.py                                   |    39 +-
 include/mapnik/agg_helpers.hpp                     |    99 +-
 include/mapnik/agg_pattern_source.hpp              |    14 +-
 include/mapnik/agg_rasterizer.hpp                  |     2 +-
 include/mapnik/agg_renderer.hpp                    |    70 +-
 include/mapnik/attribute.hpp                       |    26 +-
 include/mapnik/attribute_collector.hpp             |   304 +-
 include/mapnik/attribute_descriptor.hpp            |    12 -
 include/mapnik/boolean.hpp                         |    48 +-
 include/mapnik/box2d.hpp                           |    55 +-
 include/mapnik/building_symbolizer.hpp             |    54 -
 include/mapnik/cairo/cairo_context.hpp             |   473 +
 include/mapnik/cairo/cairo_render_vector.hpp       |    49 +
 include/mapnik/cairo/cairo_renderer.hpp            |   190 +
 include/mapnik/cairo_context.hpp                   |   417 -
 include/mapnik/cairo_renderer.hpp                  |   182 -
 include/mapnik/char_info.hpp                       |    69 -
 include/mapnik/color.hpp                           |    69 +-
 include/mapnik/color_factory.hpp                   |     3 +-
 include/mapnik/config.hpp                          |     3 +
 include/mapnik/coord.hpp                           |   111 +-
 include/mapnik/coord_array.hpp                     |    34 +-
 include/mapnik/css_color_grammar.hpp               |   555 +-
 include/mapnik/css_color_grammar_impl.hpp          |    24 +-
 include/mapnik/ctrans.hpp                          |   249 -
 include/mapnik/datasource.hpp                      |    32 +-
 include/mapnik/datasource_cache.hpp                |    22 +-
 include/mapnik/debug.hpp                           |    77 +-
 include/mapnik/debug_symbolizer.hpp                |    56 -
 include/mapnik/distance.hpp                        |    53 -
 include/mapnik/enumeration.hpp                     |    15 +-
 include/mapnik/evaluate_global_attributes.hpp      |   333 +
 include/mapnik/expression.hpp                      |    11 +-
 include/mapnik/expression_evaluator.hpp            |   111 +-
 include/mapnik/expression_grammar.hpp              |    93 +-
 include/mapnik/expression_grammar_impl.hpp         |   110 +-
 include/mapnik/expression_node.hpp                 |   119 +-
 include/mapnik/expression_node_types.hpp           |    77 +-
 include/mapnik/expression_string.hpp               |     5 +-
 include/mapnik/factory.hpp                         |    43 +-
 include/mapnik/fastmath.hpp                        |   112 -
 include/mapnik/feature.hpp                         |   131 +-
 include/mapnik/feature_factory.hpp                 |     5 +-
 include/mapnik/feature_kv_iterator.hpp             |    17 +-
 include/mapnik/feature_layer_desc.hpp              |    18 +-
 include/mapnik/feature_style_processor.hpp         |    32 +-
 include/mapnik/feature_style_processor_context.hpp |    44 +
 include/mapnik/feature_style_processor_impl.hpp    |   631 +-
 include/mapnik/feature_type_style.hpp              |    29 +-
 include/mapnik/featureset.hpp                      |    48 +
 include/mapnik/filter_featureset.hpp               |     8 +-
 include/mapnik/font_engine_freetype.hpp            |   252 +-
 include/mapnik/font_set.hpp                        |    14 +-
 include/mapnik/font_util.hpp                       |   145 -
 include/mapnik/formatting/base.hpp                 |    54 -
 include/mapnik/formatting/expression_format.hpp    |    67 -
 include/mapnik/formatting/format.hpp               |    63 -
 include/mapnik/formatting/list.hpp                 |    52 -
 include/mapnik/formatting/registry.hpp             |    55 -
 include/mapnik/formatting/text.hpp                 |    50 -
 include/mapnik/function_call.hpp                   |   127 +
 include/mapnik/gamma_method.hpp                    |    43 -
 include/mapnik/geom_util.hpp                       |   130 +-
 include/mapnik/geometry.hpp                        |    54 +-
 include/mapnik/geometry_container.hpp              |    39 +
 include/mapnik/global.hpp                          |   128 +-
 include/mapnik/gradient.hpp                        |     4 +-
 include/mapnik/graphics.hpp                        |   159 +-
 include/mapnik/grid/grid.hpp                       |    51 +-
 include/mapnik/grid/grid_marker_helpers.hpp        |   267 +-
 include/mapnik/grid/grid_pixel.hpp                 |    66 +-
 include/mapnik/grid/grid_pixfmt.hpp                |    55 +-
 include/mapnik/grid/grid_renderer.hpp              |    54 +-
 include/mapnik/grid/grid_renderer_base.hpp         |     4 +-
 include/mapnik/grid/grid_rendering_buffer.hpp      |     2 +-
 include/mapnik/grid/grid_util.hpp                  |     5 -
 include/mapnik/grid/grid_view.hpp                  |    23 +-
 include/mapnik/group/group_layout.hpp              |    94 +
 include/mapnik/group/group_layout_manager.hpp      |   104 +
 include/mapnik/group/group_rule.hpp                |   105 +
 include/mapnik/group/group_symbolizer_helper.hpp   |   105 +
 .../mapnik/group/group_symbolizer_properties.hpp   |    62 +
 include/mapnik/hash_variant.hpp                    |    48 -
 include/mapnik/hextree.hpp                         |    39 +-
 include/mapnik/hit_test_filter.hpp                 |     4 +-
 include/mapnik/image_compositing.hpp               |    21 +-
 include/mapnik/image_data.hpp                      |   114 +-
 include/mapnik/image_filter.hpp                    |   376 +-
 include/mapnik/image_filter_grammar.hpp            |    26 +-
 include/mapnik/image_filter_grammar_impl.hpp       |   129 +
 include/mapnik/image_filter_types.hpp              |   182 +-
 include/mapnik/image_reader.hpp                    |     8 +-
 include/mapnik/image_scaling.hpp                   |    43 +-
 include/mapnik/image_util.hpp                      |   129 +-
 include/mapnik/image_view.hpp                      |    10 +-
 include/mapnik/internal/dump_xml.hpp               |    18 +-
 include/mapnik/jpeg_io.hpp                         |    12 +-
 include/mapnik/json/error_handler.hpp              |    48 +
 include/mapnik/json/feature_collection_grammar.hpp |    77 +-
 .../json/feature_collection_grammar_impl.hpp       |   100 +
 include/mapnik/json/feature_collection_parser.hpp  |    57 -
 include/mapnik/json/feature_generator.hpp          |    45 +
 include/mapnik/json/feature_generator_grammar.hpp  |   135 +-
 .../mapnik/json/feature_generator_grammar_impl.hpp |   109 +
 include/mapnik/json/feature_grammar.hpp            |    60 +-
 include/mapnik/json/feature_grammar_impl.hpp       |   125 +
 include/mapnik/json/feature_parser.hpp             |    48 +
 include/mapnik/json/generic_json.hpp               |    66 +
 include/mapnik/json/geojson_generator.hpp          |    86 -
 include/mapnik/json/geometry_generator_grammar.hpp |   249 +-
 .../json/geometry_generator_grammar_impl.hpp       |   143 +
 include/mapnik/json/geometry_grammar.hpp           |   115 +-
 include/mapnik/json/geometry_grammar_impl.hpp      |    93 +
 include/mapnik/json/geometry_parser.hpp            |    34 +-
 include/mapnik/json/geometry_util.hpp              |   233 +
 include/mapnik/json/positions_grammar.hpp          |    90 +
 include/mapnik/json/positions_grammar_impl.hpp     |    72 +
 include/mapnik/json/symbolizer_grammar.hpp         |   216 +
 include/mapnik/json/topojson_grammar.hpp           |    89 +
 include/mapnik/json/topojson_grammar_impl.hpp      |   227 +
 include/mapnik/json/topojson_utils.hpp             |   222 +
 include/mapnik/json/topology.hpp                   |   200 +
 include/mapnik/json/value_converters.hpp           |    42 +
 include/mapnik/label_collision_detector.hpp        |    82 +-
 include/mapnik/layer.hpp                           |    19 +-
 include/mapnik/line_pattern_symbolizer.hpp         |    41 -
 include/mapnik/line_symbolizer.hpp                 |   105 -
 include/mapnik/load_map.hpp                        |     3 +-
 include/mapnik/make_unique.hpp                     |    42 +
 include/mapnik/map.hpp                             |   159 +-
 include/mapnik/mapped_memory_cache.hpp             |    13 +-
 include/mapnik/marker.hpp                          |    38 +-
 include/mapnik/marker_cache.hpp                    |     9 +-
 include/mapnik/marker_helpers.hpp                  |   526 +-
 include/mapnik/markers_placement.hpp               |   319 +-
 include/mapnik/markers_placements/interior.hpp     |    93 +
 include/mapnik/markers_placements/line.hpp         |   235 +
 include/mapnik/markers_placements/point.hpp        |   140 +
 .../mapnik/markers_placements/vertext_first.hpp    |    92 +
 include/mapnik/markers_placements/vertext_last.hpp |    96 +
 include/mapnik/markers_symbolizer.hpp              |   106 -
 include/mapnik/memory.hpp                          |     2 +-
 include/mapnik/memory_datasource.hpp               |    16 +-
 include/mapnik/memory_featureset.hpp               |     3 +-
 include/mapnik/miniz_png.hpp                       |    14 +-
 include/mapnik/noncopyable.hpp                     |    20 +-
 include/mapnik/octree.hpp                          |    18 +-
 include/mapnik/offset_converter.hpp                |    87 +-
 include/mapnik/palette.hpp                         |    20 +-
 include/mapnik/params.hpp                          |    52 +-
 include/mapnik/params_impl.hpp                     |    64 +-
 include/mapnik/parse_path.hpp                      |     5 +-
 include/mapnik/parse_transform.hpp                 |    15 +-
 include/mapnik/path_expression.hpp                 |    13 +-
 include/mapnik/path_expression_grammar.hpp         |     7 +-
 include/mapnik/path_expression_grammar_impl.hpp    |    59 +
 include/mapnik/pixel_position.hpp                  |    61 +-
 include/mapnik/placement_finder.hpp                |   172 -
 include/mapnik/plugin.hpp                          |     4 +-
 include/mapnik/png_io.hpp                          |   194 +-
 include/mapnik/point_symbolizer.hpp                |    62 -
 include/mapnik/polygon_clipper.hpp                 |   100 +-
 include/mapnik/polygon_pattern_symbolizer.hpp      |    62 -
 include/mapnik/polygon_symbolizer.hpp              |    56 -
 include/mapnik/pool.hpp                            |    34 +-
 include/mapnik/processed_text.hpp                  |    69 -
 include/mapnik/proj_transform.hpp                  |     6 +-
 include/mapnik/quad_tree.hpp                       |    30 +-
 include/mapnik/query.hpp                           |    31 +-
 include/mapnik/raster.hpp                          |    36 +-
 include/mapnik/raster_colorizer.hpp                |    15 +-
 include/mapnik/raster_symbolizer.hpp               |    73 -
 include/mapnik/renderer_common.hpp                 |    72 +
 include/mapnik/renderer_common/clipping_extent.hpp |    49 +
 .../process_building_symbolizer.hpp                |   116 +
 .../renderer_common/process_group_symbolizer.hpp   |   383 +
 .../renderer_common/process_markers_symbolizer.hpp |   211 +
 .../renderer_common/process_point_symbolizer.hpp   |   104 +
 .../renderer_common/process_polygon_symbolizer.hpp |    75 +
 .../renderer_common/process_raster_symbolizer.hpp  |   132 +
 include/mapnik/renderer_common/render_pattern.hpp  |    48 +
 include/mapnik/request.hpp                         |     3 -
 include/mapnik/rule.hpp                            |   121 +-
 include/mapnik/rule_cache.hpp                      |    34 +-
 include/mapnik/segment.hpp                         |    11 +-
 include/mapnik/shield_symbolizer.hpp               |    65 -
 include/mapnik/simplify_converter.hpp              |    38 +-
 include/mapnik/span_image_filter.hpp               |    24 +-
 include/mapnik/sql_utils.hpp                       |     6 +-
 include/mapnik/stroke.hpp                          |   119 -
 include/mapnik/svg/geometry_svg_generator.hpp      |   159 +
 include/mapnik/svg/geometry_svg_generator_impl.hpp |    71 +
 include/mapnik/svg/output/svg_generator.hpp        |    26 +-
 .../mapnik/svg/output/svg_output_attributes.hpp    |     3 +-
 include/mapnik/svg/output/svg_output_grammars.hpp  |   100 +-
 .../mapnik/svg/output/svg_output_grammars_impl.hpp |   109 +
 include/mapnik/svg/output/svg_path_iterator.hpp    |    33 +-
 include/mapnik/svg/output/svg_renderer.hpp         |   137 +-
 include/mapnik/svg/svg_converter.hpp               |    11 +-
 include/mapnik/svg/svg_path_adapter.hpp            |    16 +-
 include/mapnik/svg/svg_path_attributes.hpp         |     1 -
 include/mapnik/svg/svg_path_commands.hpp           |    44 +-
 include/mapnik/svg/svg_path_grammar.hpp            |    20 +-
 include/mapnik/svg/svg_path_parser.hpp             |     7 +-
 include/mapnik/svg/svg_points_grammar.hpp          |     6 +-
 include/mapnik/svg/svg_renderer_agg.hpp            |   220 +-
 include/mapnik/svg/svg_transform_grammar.hpp       |    50 +-
 include/mapnik/symbolizer.hpp                      |   521 +-
 include/mapnik/symbolizer_base.hpp                 |   169 +
 include/mapnik/symbolizer_default_values.hpp       |   362 +
 include/mapnik/symbolizer_dispatch.hpp             |   110 +
 include/mapnik/symbolizer_enumerations.hpp         |   204 +
 include/mapnik/symbolizer_hash.hpp                 |    79 +-
 include/mapnik/symbolizer_helpers.hpp              |   212 -
 include/mapnik/symbolizer_keys.hpp                 |   100 +
 include/mapnik/symbolizer_utils.hpp                |   498 +
 .../text/evaluated_format_properties_ptr.hpp       |    34 +
 include/mapnik/text/face.hpp                       |   115 +
 include/mapnik/text/font_feature_settings.hpp      |    93 +
 include/mapnik/text/font_library.hpp               |    51 +
 include/mapnik/text/formatting/base.hpp            |    61 +
 include/mapnik/text/formatting/format.hpp          |    70 +
 include/mapnik/text/formatting/layout.hpp          |    62 +
 include/mapnik/text/formatting/list.hpp            |    56 +
 include/mapnik/text/formatting/registry.hpp        |    56 +
 include/mapnik/text/formatting/text.hpp            |    53 +
 include/mapnik/text/glyph_info.hpp                 |    89 +
 include/mapnik/text/glyph_positions.hpp            |    95 +
 include/mapnik/text/harfbuzz_shaper.hpp            |   151 +
 include/mapnik/text/icu_shaper.hpp                 |   125 +
 include/mapnik/text/itemizer.hpp                   |   118 +
 include/mapnik/text/placement_finder.hpp           |   108 +
 include/mapnik/text/placement_finder_impl.hpp      |   107 +
 include/mapnik/text/placements/base.hpp            |   104 +
 include/mapnik/text/placements/dummy.hpp           |    56 +
 include/mapnik/text/placements/list.hpp            |    63 +
 include/mapnik/text/placements/registry.hpp        |    58 +
 include/mapnik/text/placements/simple.hpp          |    69 +
 include/mapnik/text/properties_util.hpp            |   139 +
 include/mapnik/text/renderer.hpp                   |   109 +
 include/mapnik/text/rotation.hpp                   |    23 +
 include/mapnik/text/scrptrun.hpp                   |   157 +
 include/mapnik/text/symbolizer_helpers.hpp         |   153 +
 include/mapnik/text/text_layout.hpp                |   227 +
 include/mapnik/text/text_line.hpp                  |   102 +
 include/mapnik/text/text_properties.hpp            |   211 +
 include/mapnik/text/tolerance_iterator.hpp         |   101 +
 include/mapnik/text/vertex_cache.hpp               |   228 +
 include/mapnik/text_path.hpp                       |   202 -
 include/mapnik/text_placements/base.hpp            |   115 -
 include/mapnik/text_placements/dummy.hpp           |    59 -
 include/mapnik/text_placements/list.hpp            |    63 -
 include/mapnik/text_placements/registry.hpp        |    58 -
 include/mapnik/text_placements/simple.hpp          |    84 -
 include/mapnik/text_properties.hpp                 |   182 -
 include/mapnik/text_symbolizer.hpp                 |   149 -
 include/mapnik/tiff_io.hpp                         |    42 +-
 include/mapnik/transform_expression.hpp            |    67 +-
 include/mapnik/transform_expression_grammar.hpp    |     8 +-
 .../mapnik/transform_expression_grammar_impl.hpp   |   130 +
 include/mapnik/transform_path_adapter.hpp          |   132 +
 include/mapnik/transform_processor.hpp             |   119 +-
 include/mapnik/unicode.hpp                         |    19 +-
 include/mapnik/unique_lock.hpp                     |    33 +
 include/mapnik/util/container_adapter.hpp          |    12 +-
 include/mapnik/util/conversions.hpp                |    29 +-
 include/mapnik/util/dasharray_parser.hpp           |    56 +-
 include/mapnik/util/deepcopy.hpp                   |    35 -
 include/mapnik/util/featureset_buffer.hpp          |    77 +
 include/mapnik/util/file_io.hpp                    |    93 +
 include/mapnik/util/fs.hpp                         |     3 +-
 include/mapnik/util/geometry_svg_generator.hpp     |   198 -
 include/mapnik/util/geometry_to_ds_type.hpp        |     6 +-
 include/mapnik/util/geometry_to_geojson.hpp        |    50 +
 include/mapnik/util/geometry_to_svg.hpp            |    11 +-
 include/mapnik/util/geometry_to_wkb.hpp            |   114 +-
 include/mapnik/util/geometry_to_wkt.hpp            |    22 +-
 include/mapnik/util/geometry_wkt_generator.hpp     |   229 -
 include/mapnik/util/hsl.hpp                        |    47 +-
 include/mapnik/util/path_iterator.hpp              |    14 +-
 include/mapnik/util/recursive_wrapper.hpp          |   150 +
 include/mapnik/util/timer.hpp                      |    54 +
 include/mapnik/util/variant.hpp                    |   764 +
 include/mapnik/utils.hpp                           |    84 +-
 include/mapnik/value.hpp                           |   406 +-
 include/mapnik/value_hash.hpp                      |    77 +
 include/mapnik/value_types.hpp                     |   149 +-
 include/mapnik/version.hpp                         |     8 +-
 include/mapnik/vertex.hpp                          |    80 +-
 include/mapnik/vertex_converters.hpp               |   419 +-
 include/mapnik/vertex_vector.hpp                   |    42 +-
 include/mapnik/view_transform.hpp                  |   183 +
 include/mapnik/warp.hpp                            |     4 +-
 include/mapnik/webp_io.hpp                         |   212 +
 include/mapnik/wkb.hpp                             |     3 +-
 include/mapnik/wkt/wkt_factory.hpp                 |    31 +-
 include/mapnik/wkt/wkt_generator_grammar.hpp       |   204 +
 include/mapnik/wkt/wkt_generator_grammar_impl.hpp  |   147 +
 include/mapnik/wkt/wkt_grammar.hpp                 |   259 +-
 include/mapnik/wkt/wkt_grammar_impl.hpp            |   150 +
 include/mapnik/xml_attribute_cast.hpp              |    63 +-
 include/mapnik/xml_node.hpp                        |    39 +-
 include/mapnik/xml_tree.hpp                        |    23 +-
 localize.sh                                        |    13 +
 plugins/input/csv/build.py                         |    73 +-
 plugins/input/csv/csv_datasource.cpp               |   165 +-
 plugins/input/csv/csv_datasource.hpp               |     1 +
 plugins/input/csv/csv_utils.hpp                    |    12 +-
 plugins/input/gdal/build.py                        |     7 +-
 plugins/input/gdal/gdal_datasource.cpp             |    48 +-
 plugins/input/gdal/gdal_datasource.hpp             |     2 +-
 plugins/input/gdal/gdal_featureset.cpp             |   280 +-
 plugins/input/gdal/gdal_featureset.hpp             |    29 +-
 plugins/input/geojson/build.py                     |    75 +-
 plugins/input/geojson/geojson_datasource.cpp       |   175 +-
 plugins/input/geojson/geojson_datasource.hpp       |    65 +-
 plugins/input/geojson/geojson_featureset.cpp       |    21 +-
 plugins/input/geojson/geojson_featureset.hpp       |    32 +-
 plugins/input/occi/build.py                        |     5 +-
 plugins/input/occi/occi_datasource.cpp             |    23 +-
 plugins/input/occi/occi_datasource.hpp             |     2 +-
 plugins/input/occi/occi_featureset.cpp             |    39 +-
 plugins/input/occi/occi_featureset.hpp             |     8 +-
 plugins/input/occi/occi_types.hpp                  |     5 -
 plugins/input/occi/spatial_classeso.cpp            |     4 +-
 plugins/input/ogr/build.py                         |    14 +-
 plugins/input/ogr/ogr_converter.cpp                |    14 +-
 plugins/input/ogr/ogr_datasource.cpp               |    76 +-
 plugins/input/ogr/ogr_datasource.hpp               |     6 +-
 plugins/input/ogr/ogr_featureset.cpp               |    15 +-
 plugins/input/ogr/ogr_featureset.hpp               |     4 +-
 plugins/input/ogr/ogr_index_featureset.cpp         |    19 +-
 plugins/input/ogr/ogr_index_featureset.hpp         |     4 +-
 plugins/input/ogr/ogr_layer_ptr.hpp                |    31 +-
 plugins/input/osm/basiccurl.cpp                    |     7 +-
 plugins/input/osm/build.py                         |    13 +-
 plugins/input/osm/dataset_deliverer.cpp            |    38 +-
 plugins/input/osm/dataset_deliverer.h              |     1 -
 plugins/input/osm/osm.cpp                          |    50 +-
 plugins/input/osm/osm.h                            |     4 +-
 plugins/input/osm/osm_datasource.cpp               |    42 +-
 plugins/input/osm/osm_datasource.hpp               |     2 +-
 plugins/input/osm/osm_featureset.cpp               |    20 +-
 plugins/input/osm/osm_featureset.hpp               |     4 +-
 plugins/input/osm/osmparser.cpp                    |    20 +-
 plugins/input/osm/osmparser.h                      |     2 +-
 plugins/input/osm/render.cpp                       |     4 +-
 plugins/input/osm/test.cpp                         |    25 -
 plugins/input/osm/test.osm                         |    35 -
 plugins/input/osm/test.xml                         |   503 -
 plugins/input/osm/test2.osm                        | 84526 -------------------
 plugins/input/osm/test2.xml                        |   537 -
 plugins/input/osm/test3.xml                        |   530 -
 plugins/input/pgraster/README                      |    24 +
 plugins/input/pgraster/TODO                        |    23 +
 plugins/input/pgraster/build.py                    |    81 +
 plugins/input/pgraster/pgraster_datasource.cpp     |  1197 +
 plugins/input/pgraster/pgraster_datasource.hpp     |   146 +
 plugins/input/pgraster/pgraster_featureset.cpp     |   355 +
 plugins/input/pgraster/pgraster_featureset.hpp     |    71 +
 plugins/input/pgraster/pgraster_wkb_reader.cpp     |   497 +
 plugins/input/pgraster/pgraster_wkb_reader.hpp     |    84 +
 plugins/input/postgis/asyncresultset.hpp           |   230 +
 plugins/input/postgis/build.py                     |    34 +-
 plugins/input/postgis/connection.hpp               |   159 +-
 plugins/input/postgis/connection_manager.hpp       |    20 +-
 plugins/input/postgis/cursorresultset.hpp          |    50 +-
 plugins/input/postgis/postgis_datasource.cpp       |   407 +-
 plugins/input/postgis/postgis_datasource.hpp       |    28 +-
 plugins/input/postgis/postgis_featureset.cpp       |    20 +-
 plugins/input/postgis/postgis_featureset.hpp       |    10 +-
 plugins/input/postgis/resultset.hpp                |    46 +-
 plugins/input/python/build.py                      |    15 +-
 plugins/input/python/python_datasource.cpp         |    26 +-
 plugins/input/python/python_datasource.hpp         |     5 +
 plugins/input/python/python_featureset.cpp         |     6 +-
 plugins/input/python/python_featureset.hpp         |     8 +-
 plugins/input/python/python_utils.hpp              |     5 +
 plugins/input/raster/build.py                      |     5 +-
 plugins/input/raster/raster_datasource.cpp         |    35 +-
 plugins/input/raster/raster_datasource.hpp         |     2 +-
 plugins/input/raster/raster_featureset.cpp         |    30 +-
 plugins/input/raster/raster_featureset.hpp         |     7 +-
 plugins/input/rasterlite/build.py                  |     5 +-
 plugins/input/rasterlite/rasterlite_datasource.cpp |     8 +-
 plugins/input/rasterlite/rasterlite_datasource.hpp |     2 +-
 plugins/input/rasterlite/rasterlite_featureset.cpp |    33 +-
 plugins/input/rasterlite/rasterlite_featureset.hpp |    24 +-
 plugins/input/shape/build.py                       |    15 +-
 plugins/input/shape/dbfile.cpp                     |    38 +-
 plugins/input/shape/dbfile.hpp                     |     3 +
 plugins/input/shape/shape_datasource.cpp           |    79 +-
 plugins/input/shape/shape_datasource.hpp           |     7 +-
 plugins/input/shape/shape_featureset.cpp           |    11 +-
 plugins/input/shape/shape_featureset.hpp           |     4 +-
 plugins/input/shape/shape_index_featureset.cpp     |    51 +-
 plugins/input/shape/shape_index_featureset.hpp     |     8 +-
 plugins/input/shape/shape_io.cpp                   |    26 +-
 plugins/input/shape/shape_io.hpp                   |    12 +-
 plugins/input/shape/shape_utils.cpp                |     4 +
 plugins/input/shape/shapefile.hpp                  |    36 +-
 plugins/input/sqlite/build.py                      |     7 +-
 plugins/input/sqlite/sqlite_connection.hpp         |    18 +-
 plugins/input/sqlite/sqlite_datasource.cpp         |    40 +-
 plugins/input/sqlite/sqlite_datasource.hpp         |     4 +-
 plugins/input/sqlite/sqlite_featureset.cpp         |     6 +-
 plugins/input/sqlite/sqlite_featureset.hpp         |    10 +-
 plugins/input/sqlite/sqlite_prepared.hpp           |     6 +-
 plugins/input/sqlite/sqlite_resultset.hpp          |     2 +-
 plugins/input/sqlite/sqlite_utils.hpp              |    53 +-
 plugins/input/templates/helloworld/Makefile        |     6 +-
 plugins/input/templates/helloworld/build.py        |    10 +-
 .../templates/helloworld/hello_datasource.cpp      |     7 +-
 .../templates/helloworld/hello_datasource.hpp      |     2 +-
 .../templates/helloworld/hello_featureset.cpp      |    11 +-
 .../templates/helloworld/hello_featureset.hpp      |     4 +-
 plugins/input/topojson/build.py                    |    65 +
 plugins/input/topojson/topojson_datasource.cpp     |   323 +
 plugins/input/topojson/topojson_datasource.hpp     |   101 +
 plugins/input/topojson/topojson_featureset.cpp     |   392 +
 plugins/input/topojson/topojson_featureset.hpp     |    54 +
 run_tests                                          |    16 +-
 src/agg/agg_renderer.cpp                           |   275 +-
 src/agg/process_building_symbolizer.cpp            |   161 +-
 src/agg/process_debug_symbolizer.cpp               |    20 +-
 src/agg/process_group_symbolizer.cpp               |   121 +
 src/agg/process_line_pattern_symbolizer.cpp        |   141 +-
 src/agg/process_line_symbolizer.cpp                |   176 +-
 src/agg/process_markers_symbolizer.cpp             |   207 +-
 src/agg/process_point_symbolizer.cpp               |    77 +-
 src/agg/process_polygon_pattern_symbolizer.cpp     |   131 +-
 src/agg/process_polygon_symbolizer.cpp             |    91 +-
 src/agg/process_raster_symbolizer.cpp              |    92 +-
 src/agg/process_shield_symbolizer.cpp              |    80 +-
 src/agg/process_text_symbolizer.cpp                |    65 +-
 src/box2d.cpp                                      |   241 +-
 src/build.py                                       |   290 +-
 src/building_symbolizer.cpp                        |    72 -
 src/cairo/cairo_context.cpp                        |   521 +
 src/cairo/cairo_render_vector.cpp                  |   131 +
 src/cairo/cairo_renderer.cpp                       |   232 +
 src/cairo/process_building_symbolizer.cpp          |    86 +
 src/cairo/process_debug_symbolizer.cpp             |   111 +
 src/cairo/process_group_symbolizer.cpp             |   126 +
 src/cairo/process_line_pattern_symbolizer.cpp      |   137 +
 src/cairo/process_line_symbolizer.cpp              |   116 +
 src/cairo/process_markers_symbolizer.cpp           |   214 +
 src/cairo/process_point_symbolizer.cpp             |    66 +
 src/cairo/process_polygon_pattern_symbolizer.cpp   |   132 +
 src/cairo/process_polygon_symbolizer.cpp           |    62 +
 src/cairo/process_raster_symbolizer.cpp            |    60 +
 src/cairo/process_text_symbolizer.cpp              |   107 +
 src/cairo_context.cpp                              |   503 -
 src/cairo_renderer.cpp                             |  1303 -
 src/color.cpp                                      |    82 +-
 src/color_factory.cpp                              |    42 +-
 src/config_error.cpp                               |     2 +-
 src/conversions.cpp                                |    94 +-
 src/css_color_grammar.cpp                          |   173 +-
 src/dasharray_parser.cpp                           |    69 +
 src/datasource_cache.cpp                           |   148 +-
 src/datasource_cache_static.cpp                    |    21 +-
 src/debug.cpp                                      |     9 +-
 src/debug_symbolizer.cpp                           |    57 -
 src/deepcopy.cpp                                   |   135 -
 src/distance.cpp                                   |    53 -
 src/expression.cpp                                 |    23 +-
 src/expression_grammar.cpp                         |    12 +-
 src/expression_node.cpp                            |   129 +-
 src/expression_string.cpp                          |    79 +-
 src/feature_kv_iterator.cpp                        |     4 +-
 src/feature_style_processor.cpp                    |    10 +-
 src/feature_type_style.cpp                         |    83 +-
 src/font_engine_freetype.cpp                       |   816 +-
 src/font_set.cpp                                   |    36 +-
 src/formatting/base.cpp                            |    71 -
 src/formatting/expression.cpp                      |   145 -
 src/formatting/format.cpp                          |   121 -
 src/formatting/list.cpp                            |    84 -
 src/formatting/registry.cpp                        |    59 -
 src/formatting/text.cpp                            |    93 -
 src/fs.cpp                                         |    57 +-
 src/function_call.cpp                              |    54 +
 src/gamma_method.cpp                               |    41 -
 src/graphics.cpp                                   |    46 +-
 src/grid/grid.cpp                                  |    26 +-
 src/grid/grid_renderer.cpp                         |    63 +-
 src/grid/process_building_symbolizer.cpp           |   116 +-
 src/grid/process_group_symbolizer.cpp              |   134 +
 src/grid/process_line_pattern_symbolizer.cpp       |    95 +-
 src/grid/process_line_symbolizer.cpp               |    70 +-
 src/grid/process_markers_symbolizer.cpp            |   208 +-
 src/grid/process_point_symbolizer.cpp              |    76 +-
 src/grid/process_polygon_pattern_symbolizer.cpp    |    56 +-
 src/grid/process_polygon_symbolizer.cpp            |    61 +-
 src/grid/process_raster_symbolizer.cpp             |    10 +-
 src/grid/process_shield_symbolizer.cpp             |    72 +-
 src/grid/process_text_symbolizer.cpp               |    60 +-
 src/group/group_layout_manager.cpp                 |   171 +
 src/group/group_rule.cpp                           |    59 +
 src/group/group_symbolizer_helper.cpp              |   181 +
 src/image_compositing.cpp                          |    27 +-
 src/image_filter_grammar.cpp                       |   132 -
 src/image_filter_types.cpp                         |    40 +-
 src/image_reader.cpp                               |    36 +-
 src/image_scaling.cpp                              |   205 +-
 src/image_util.cpp                                 |   542 +-
 src/jpeg_reader.cpp                                |    29 +-
 src/json/build.py                                  |    35 +
 src/json/feature_collection_parser.cpp             |    71 -
 src/json/feature_grammar.cpp                       |   160 -
 src/json/geojson_generator.cpp                     |    87 -
 src/json/geometry_grammar.cpp                      |   171 -
 src/json/geometry_parser.cpp                       |    81 -
 .../mapnik_json_feature_collection_grammar.cpp     |    28 +
 src/json/mapnik_json_feature_grammar.cpp           |    28 +
 src/json/mapnik_json_generator_grammar.cpp         |    32 +
 src/json/mapnik_json_geometry_grammar.cpp          |    27 +
 src/json/mapnik_topojson_grammar.cpp               |    28 +
 src/layer.cpp                                      |    82 +-
 src/libxml2_loader.cpp                             |    18 +-
 src/line_pattern_symbolizer.cpp                    |    35 -
 src/line_symbolizer.cpp                            |    38 -
 src/load_map.cpp                                   |  1396 +-
 src/map.cpp                                        |   246 +-
 src/mapped_memory_cache.cpp                        |    24 +-
 src/marker_cache.cpp                               |    57 +-
 src/marker_helpers.cpp                             |   150 +
 src/markers_symbolizer.cpp                         |   203 -
 src/memory.cpp                                     |     2 +
 src/memory_datasource.cpp                          |    30 +-
 src/miniz.c                                        |    12 +-
 src/miniz_png.cpp                                  |    36 +-
 src/palette.cpp                                    |     7 +-
 src/params.cpp                                     |    10 +-
 src/parse_path.cpp                                 |    56 +-
 src/parse_transform.cpp                            |    45 +-
 src/path_expression_grammar.cpp                    |    61 -
 src/placement_finder.cpp                           |  1059 -
 src/plugin.cpp                                     |     3 +-
 src/png_reader.cpp                                 |    52 +-
 src/point_symbolizer.cpp                           |    92 -
 src/polygon_pattern_symbolizer.cpp                 |    81 -
 src/polygon_symbolizer.cpp                         |    85 -
 src/processed_text.cpp                             |   103 -
 src/proj_transform.cpp                             |    13 +
 src/projection.cpp                                 |    41 +-
 src/rapidxml_loader.cpp                            |    76 +-
 src/raster_colorizer.cpp                           |    28 +-
 src/raster_symbolizer.cpp                          |   193 -
 src/renderer_common.cpp                            |    76 +
 src/renderer_common/process_group_symbolizer.cpp   |   147 +
 src/renderer_common/render_pattern.cpp             |    71 +
 src/rule.cpp                                       |   151 +-
 src/save_map.cpp                                   |   695 +-
 src/shield_symbolizer.cpp                          |    87 -
 src/simplify.cpp                                   |     6 +-
 src/stroke.cpp                                     |   212 -
 src/svg/output/process_building_symbolizer.cpp     |    39 -
 src/svg/output/process_line_pattern_symbolizer.cpp |    39 -
 src/svg/output/process_line_symbolizer.cpp         |    19 +-
 src/svg/output/process_markers_symbolizer.cpp      |    39 -
 src/svg/output/process_point_symbolizer.cpp        |    39 -
 .../output/process_polygon_pattern_symbolizer.cpp  |    39 -
 src/svg/output/process_polygon_symbolizer.cpp      |    12 +-
 src/svg/output/process_raster_symbolizer.cpp       |    39 -
 src/svg/output/process_shield_symbolizer.cpp       |    39 -
 src/svg/output/process_symbolizers.cpp             |    83 +-
 src/svg/output/process_text_symbolizer.cpp         |    39 -
 src/svg/output/svg_generator.cpp                   |    54 +-
 src/svg/output/svg_output_attributes.cpp           |     5 +
 src/svg/output/svg_output_grammars.cpp             |    31 +
 src/svg/output/svg_renderer.cpp                    |    40 +-
 src/svg/svg_parser.cpp                             |   137 +-
 src/svg/svg_path_parser.cpp                        |     4 +-
 src/svg/svg_points_parser.cpp                      |     4 +-
 src/svg/svg_transform_parser.cpp                   |    30 +-
 src/symbolizer.cpp                                 |   174 +-
 src/symbolizer_enumerations.cpp                    |   189 +
 src/symbolizer_helpers.cpp                         |   473 -
 src/symbolizer_keys.cpp                            |   186 +
 src/text/face.cpp                                  |   124 +
 src/text/font_feature_settings.cpp                 |   112 +
 src/text/font_library.cpp                          |    81 +
 src/text/formatting/base.cpp                       |    57 +
 src/text/formatting/format.cpp                     |   168 +
 src/text/formatting/layout.cpp                     |   152 +
 src/text/formatting/list.cpp                       |    82 +
 src/text/formatting/registry.cpp                   |    61 +
 src/text/formatting/text.cpp                       |    95 +
 src/text/glyph_positions.cpp                       |    87 +
 src/text/itemizer.cpp                              |   195 +
 src/text/placement_finder.cpp                      |   429 +
 src/text/placements/base.cpp                       |    42 +
 src/text/placements/dummy.cpp                      |    41 +
 src/text/placements/list.cpp                       |   107 +
 src/text/placements/registry.cpp                   |    57 +
 src/text/placements/simple.cpp                     |   157 +
 src/text/properties_util.cpp                       |    95 +
 src/text/renderer.cpp                              |   363 +
 src/text/scrptrun.cpp                              |   205 +
 src/text/symbolizer_helpers.cpp                    |   362 +
 src/text/text_layout.cpp                           |   551 +
 src/text/text_line.cpp                             |   118 +
 src/text/text_properties.cpp                       |   367 +
 src/text/vertex_cache.cpp                          |   405 +
 src/text_placements/base.cpp                       |    45 -
 src/text_placements/dummy.cpp                      |    41 -
 src/text_placements/list.cpp                       |   112 -
 src/text_placements/registry.cpp                   |    57 -
 src/text_placements/simple.cpp                     |   182 -
 src/text_properties.cpp                            |   365 -
 src/text_symbolizer.cpp                            |   499 -
 src/tiff_reader.cpp                                |    78 +-
 src/transform_expression.cpp                       |    21 +-
 src/transform_expression_grammar.cpp               |   115 +-
 src/unicode.cpp                                    |     8 +-
 src/utils.cpp                                      |     2 +-
 src/warp.cpp                                       |    71 +-
 src/webp_reader.cpp                                |   263 +
 src/wkb.cpp                                        |   286 +-
 src/wkt/build.py                                   |    35 +
 src/wkt/mapnik_wkt_generator_grammar.cpp           |    34 +
 src/wkt/mapnik_wkt_grammar.cpp                     |    29 +
 src/wkt/wkt_factory.cpp                            |    67 -
 src/wkt/wkt_generator.cpp                          |   175 -
 src/xml_tree.cpp                                   |   128 +-
 tests/cpp_tests/agg_blend_src_over_test.cpp        |   136 +-
 tests/cpp_tests/build.py                           |    11 +-
 tests/cpp_tests/clipping_test.cpp                  |    16 +-
 tests/cpp_tests/conversions_test.cpp               |    26 +-
 tests/cpp_tests/copy_move_test.cpp                 |    92 +
 tests/cpp_tests/data/blank.webp                    |     0
 tests/cpp_tests/exceptions_test.cpp                |    28 +-
 tests/cpp_tests/font_registration_test.cpp         |   129 +-
 tests/cpp_tests/fontset_runtime_test.cpp           |    53 +-
 tests/cpp_tests/geometry_converters_test.cpp       |   155 +-
 tests/cpp_tests/image_io_test.cpp                  |    54 +-
 tests/cpp_tests/image_painted_test.cpp             |    85 +
 tests/cpp_tests/label_algo_test.cpp                |    76 +-
 tests/cpp_tests/line_offset_test.cpp               |   236 +
 tests/cpp_tests/map_request_test.cpp               |    21 +-
 tests/cpp_tests/params_test.cpp                    |    99 +-
 tests/cpp_tests/run                                |    18 +
 .../svg_renderer_tests/background_color_test.cpp   |   165 -
 tests/cpp_tests/svg_renderer_tests/build.py        |    18 -
 .../cpp_tests/svg_renderer_tests/combined_test.cpp |    57 -
 .../svg_renderer_tests/compilation_test.cpp        |    36 -
 .../svg_renderer_tests/file_output_test.cpp        |    69 -
 .../svg_renderer_tests/path_element_test.cpp       |   229 -
 .../svg_renderer_tests/root_element_test.cpp       |   158 -
 tests/cpp_tests/symbolizer_test.cpp                |    40 +
 tests/cpp_tests/wkb_formats_test.cpp               |     5 +-
 tests/data/broken_maps/css_value_broken.xml        |     2 +-
 tests/data/broken_maps/empty_stylename.xml         |     7 +
 tests/data/broken_maps/expression_broken.xml       |     2 +-
 .../data/broken_maps/invalid-scale-hsla-filter.xml |     4 +
 tests/data/good_maps/colorize-alpha.xml            |    52 -
 tests/data/good_maps/empty_parameter1.xml          |    12 +
 tests/data/good_maps/empty_parameter2.xml          |    12 +
 tests/data/good_maps/empty_parameter3.xml          |    12 +
 tests/data/good_maps/empty_parameter4.xml          |    12 +
 tests/data/good_maps/empty_parameter5.xml          |    12 +
 tests/data/good_maps/empty_text_symbolizer.xml     |    15 +
 tests/data/good_maps/frame.xml                     |    23 +
 tests/data/good_maps/markers_symbolizer_points.xml |    16 -
 .../good_maps/markers_symbolizer_points_file.xml   |    16 -
 tests/data/good_maps/paths_relative_to_xml.xml     |    10 -
 tests/data/good_maps/point_json.xml                |     2 +-
 tests/data/good_maps/point_symbolizer.xml          |     2 +-
 tests/data/good_maps/raster_colorizer.xml          |    71 -
 tests/data/good_maps/raster_symbolizer.xml         |    35 -
 tests/data/good_maps/shield_symbolizer.xml         |     4 +-
 tests/data/good_maps/text-placement-type-dummy.xml |    11 +
 tests/data/good_maps/text_breaks.xml               |     4 +-
 tests/data/good_maps/tiff_colortable.xml           |    16 -
 tests/data/good_maps/vrt_colortable.xml            |    15 -
 tests/data/gpx/empty.gpx                           |     9 +
 tests/data/json/{escaped.json => escaped.geojson}  |     0
 tests/data/json/escaped.topojson                   |    39 +
 .../json/feature_collection_level_properties.json  |    18 +
 tests/data/json/lines.geojson                      |    19 +
 tests/data/json/lines.json                         |    21 -
 .../{null_feature.json => null_feature.geojson}    |     0
 tests/data/json/points.geojson                     |    34 +
 tests/data/json/points.json                        |    36 -
 tests/data/pngsuite/linepattern.png                |   Bin 0 -> 3354 bytes
 tests/data/pngsuite/linepattern1.png               |   Bin 0 -> 210 bytes
 tests/data/shp/points/poi.xml                      |     1 -
 tests/data/svg/box.svg                             |    25 +
 tests/data/svg/linepattern.svg                     |    97 +
 tests/data/svg/place-of-worship-24.svg             |    27 +
 tests/data/svg/transparent_circle.svg              |    70 +
 .../agg_rasterizer_integer_overflow_test.py        |    40 +
 tests/python_tests/box2d_test.py                   |     2 +-
 tests/python_tests/buffer_clear_test.py            |    26 +-
 tests/python_tests/cairo_test.py                   |   211 +-
 tests/python_tests/compositing_test.py             |    24 +-
 tests/python_tests/csv_test.py                     |    43 +-
 tests/python_tests/datasource_test.py              |     6 +-
 tests/python_tests/datasource_xml_template_test.py |     2 +-
 tests/python_tests/extra_map_props_test.py         |     2 +-
 tests/python_tests/feature_id_test.py              |     2 +-
 tests/python_tests/feature_test.py                 |    29 +-
 tests/python_tests/filter_test.py                  |    41 +-
 tests/python_tests/font_test.py                    |     2 +-
 tests/python_tests/fontset_test.py                 |    40 +-
 tests/python_tests/geojson_plugin_test.py          |    46 +-
 tests/python_tests/geometry_io_test.py             |   198 +-
 tests/python_tests/grayscale_test.py               |     2 +-
 tests/python_tests/image_encoding_speed_test.py    |     8 +-
 tests/python_tests/image_filters_test.py           |    10 +-
 tests/python_tests/image_test.py                   |    19 +-
 tests/python_tests/images/composited/color.png     |   Bin 13829 -> 13905 bytes
 tests/python_tests/images/composited/divide.png    |   Bin 0 -> 10492 bytes
 tests/python_tests/images/composited/dst_over.png  |   Bin 14422 -> 14402 bytes
 .../python_tests/images/composited/linear_burn.png |   Bin 0 -> 10261 bytes
 .../images/composited/linear_dodge.png             |   Bin 0 -> 14279 bytes
 .../pycairo/cairo-cairo-expected-reduced.png       |   Bin 0 -> 2195 bytes
 .../images/pycairo/cairo-cairo-expected.pdf        |   Bin 0 -> 5408 bytes
 .../images/pycairo/cairo-cairo-expected.png        |   Bin 0 -> 4199 bytes
 .../images/pycairo/cairo-cairo-expected.svg        |    50 +
 .../pycairo/cairo-surface-expected.building.pdf    |   Bin 0 -> 7451 bytes
 .../pycairo/cairo-surface-expected.building.svg    |   261 +
 .../pycairo/cairo-surface-expected.point.pdf       |   Bin 0 -> 27721 bytes
 .../pycairo/cairo-surface-expected.point.svg       |   488 +
 .../pycairo/cairo-surface-expected.polygon.pdf     |   Bin 0 -> 5620 bytes
 .../pycairo/cairo-surface-expected.polygon.svg     |    35 +
 tests/python_tests/images/style-comp-op/color.png  |   Bin 13964 -> 13951 bytes
 .../images/style-comp-op/color_burn.png            |   Bin 14932 -> 14928 bytes
 .../images/style-comp-op/color_dodge.png           |   Bin 14528 -> 14528 bytes
 .../python_tests/images/style-comp-op/contrast.png |   Bin 14545 -> 14545 bytes
 tests/python_tests/images/style-comp-op/darken.png |   Bin 14367 -> 14370 bytes
 .../images/style-comp-op/difference.png            |   Bin 14697 -> 14692 bytes
 tests/python_tests/images/style-comp-op/divide.png |   Bin 0 -> 3587 bytes
 .../python_tests/images/style-comp-op/dst_atop.png |   Bin 7607 -> 7619 bytes
 tests/python_tests/images/style-comp-op/dst_in.png |   Bin 7607 -> 7619 bytes
 .../python_tests/images/style-comp-op/dst_out.png  |   Bin 14887 -> 14894 bytes
 .../images/style-comp-op/exclusion.png             |   Bin 14330 -> 14320 bytes
 .../images/style-comp-op/grain_extract.png         |   Bin 7261 -> 7257 bytes
 .../images/style-comp-op/grain_merge.png           |   Bin 14250 -> 14249 bytes
 .../images/style-comp-op/hard_light.png            |   Bin 14883 -> 14879 bytes
 tests/python_tests/images/style-comp-op/hue.png    |   Bin 13000 -> 13000 bytes
 tests/python_tests/images/style-comp-op/invert.png |   Bin 13608 -> 13608 bytes
 .../python_tests/images/style-comp-op/lighten.png  |   Bin 12936 -> 12935 bytes
 .../images/style-comp-op/linear_burn.png           |   Bin 0 -> 2356 bytes
 .../images/style-comp-op/linear_dodge.png          |   Bin 0 -> 14410 bytes
 tests/python_tests/images/style-comp-op/minus.png  |   Bin 14385 -> 14384 bytes
 .../python_tests/images/style-comp-op/multiply.png |   Bin 14714 -> 14724 bytes
 .../python_tests/images/style-comp-op/overlay.png  |   Bin 14394 -> 14395 bytes
 tests/python_tests/images/style-comp-op/plus.png   |   Bin 14422 -> 14410 bytes
 .../images/style-comp-op/saturation.png            |   Bin 13787 -> 13789 bytes
 tests/python_tests/images/style-comp-op/screen.png |   Bin 14256 -> 14255 bytes
 .../images/style-comp-op/soft_light.png            |   Bin 14224 -> 14227 bytes
 tests/python_tests/images/style-comp-op/src.png    |   Bin 4972 -> 4979 bytes
 .../python_tests/images/style-comp-op/src_atop.png |   Bin 14799 -> 14801 bytes
 tests/python_tests/images/style-comp-op/src_in.png |   Bin 4972 -> 4979 bytes
 .../python_tests/images/style-comp-op/src_over.png |   Bin 14778 -> 14778 bytes
 tests/python_tests/images/style-comp-op/value.png  |   Bin 14465 -> 14463 bytes
 tests/python_tests/images/style-comp-op/xor.png    |   Bin 14929 -> 14936 bytes
 .../images/style-image-filter/agg-stack-blur22.png |   Bin 32731 -> 33631 bytes
 .../images/style-image-filter/blur.png             |   Bin 27043 -> 27360 bytes
 .../images/style-image-filter/edge-detect.png      |   Bin 21615 -> 22507 bytes
 .../images/style-image-filter/emboss.png           |   Bin 24138 -> 24609 bytes
 .../images/style-image-filter/gray.png             |   Bin 22609 -> 23621 bytes
 .../images/style-image-filter/invert.png           |   Bin 23124 -> 24135 bytes
 .../images/style-image-filter/none.png             |   Bin 23111 -> 24126 bytes
 .../images/style-image-filter/sharpen.png          |   Bin 22509 -> 22800 bytes
 .../images/style-image-filter/sobel.png            |   Bin 23966 -> 23980 bytes
 .../images/style-image-filter/x-gradient.png       |   Bin 25900 -> 27033 bytes
 .../images/style-image-filter/y-gradient.png       |   Bin 25931 -> 27265 bytes
 .../python_tests/images/support/char_placement.png |   Bin 71821 -> 0 bytes
 tests/python_tests/images/support/displacement.png |   Bin 42357 -> 0 bytes
 .../encoding-opts/aerial_rgba-png+e=miniz.png      |   Bin 0 -> 47214 bytes
 .../support/encoding-opts/aerial_rgba-png+t=0.png  |   Bin 0 -> 46310 bytes
 .../support/encoding-opts/aerial_rgba-png.png      |   Bin 0 -> 46310 bytes
 .../encoding-opts/aerial_rgba-png32+e=miniz.png    |   Bin 0 -> 160552 bytes
 .../encoding-opts/aerial_rgba-png32+t=0.png        |   Bin 0 -> 143537 bytes
 .../support/encoding-opts/aerial_rgba-png32.png    |   Bin 0 -> 160268 bytes
 .../encoding-opts/aerial_rgba-png8+e=miniz.png     |   Bin 0 -> 47214 bytes
 .../encoding-opts/aerial_rgba-png8+m=h+c=1+t=0.png |   Bin 0 -> 103 bytes
 .../encoding-opts/aerial_rgba-png8+m=h+c=1.png     |   Bin 0 -> 103 bytes
 .../encoding-opts/aerial_rgba-png8+m=h+t=0.png     |   Bin 0 -> 46310 bytes
 .../encoding-opts/aerial_rgba-png8+m=h+t=1.png     |   Bin 0 -> 46310 bytes
 .../encoding-opts/aerial_rgba-png8+m=h+t=2.png     |   Bin 0 -> 46310 bytes
 .../support/encoding-opts/aerial_rgba-png8+m=h.png |   Bin 0 -> 46310 bytes
 .../encoding-opts/aerial_rgba-png8+m=o+c=1+t=0.png |   Bin 0 -> 103 bytes
 .../encoding-opts/aerial_rgba-png8+m=o+c=1.png     |   Bin 0 -> 103 bytes
 .../encoding-opts/aerial_rgba-png8+m=o+t=0.png     |   Bin 0 -> 43267 bytes
 .../encoding-opts/aerial_rgba-png8+m=o+t=1.png     |   Bin 0 -> 43267 bytes
 .../encoding-opts/aerial_rgba-png8+m=o+t=2.png     |   Bin 0 -> 43267 bytes
 .../support/encoding-opts/aerial_rgba-png8+m=o.png |   Bin 0 -> 43267 bytes
 .../aerial_rgba-webp+alpha=false.webp              |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+alpha_compression=0.webp      |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+alpha_filtering=2.webp        |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+alpha_quality=50.webp         |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+autofilter=0.webp             |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+filter_sharpness=4.webp       |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+filter_strength=50.webp       |   Bin 0 -> 10544 bytes
 ...erial_rgba-webp+filter_type=1+autofilter=1.webp |   Bin 0 -> 10544 bytes
 .../encoding-opts/aerial_rgba-webp+method=0.webp   |   Bin 0 -> 11794 bytes
 .../encoding-opts/aerial_rgba-webp+method=6.webp   |   Bin 0 -> 10054 bytes
 .../aerial_rgba-webp+partition_limit=50.webp       |   Bin 0 -> 10572 bytes
 .../aerial_rgba-webp+partitions=3.webp             |   Bin 0 -> 10544 bytes
 .../encoding-opts/aerial_rgba-webp+pass=10.webp    |   Bin 0 -> 10526 bytes
 .../aerial_rgba-webp+preprocessing=1.webp          |   Bin 0 -> 10546 bytes
 .../encoding-opts/aerial_rgba-webp+quality=64.webp |   Bin 0 -> 9338 bytes
 .../encoding-opts/aerial_rgba-webp+segments=3.webp |   Bin 0 -> 10528 bytes
 .../aerial_rgba-webp+sns_strength=50.webp          |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+target_PSNR=.5.webp           |   Bin 0 -> 10544 bytes
 .../aerial_rgba-webp+target_size=100.webp          |   Bin 0 -> 10544 bytes
 .../support/encoding-opts/aerial_rgba-webp.webp    |   Bin 0 -> 10544 bytes
 .../support/encoding-opts/blank-png+e=miniz.png    |   Bin 0 -> 103 bytes
 .../images/support/encoding-opts/blank-png+t=0.png |   Bin 270 -> 103 bytes
 .../images/support/encoding-opts/blank-png.png     |   Bin 334 -> 103 bytes
 .../support/encoding-opts/blank-png32+e=miniz.png  |   Bin 0 -> 985 bytes
 .../support/encoding-opts/blank-png32+t=0.png      |   Bin 0 -> 851 bytes
 .../images/support/encoding-opts/blank-png32.png   |   Bin 0 -> 915 bytes
 .../support/encoding-opts/blank-png8+e=miniz.png   |   Bin 0 -> 103 bytes
 .../encoding-opts/blank-png8+m=h+c=1+t=0.png       |   Bin 103 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=h+c=1.png   |   Bin 116 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=h+t=0.png   |   Bin 103 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=h+t=1.png   |   Bin 116 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=h+t=2.png   |   Bin 116 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=h.png       |   Bin 116 -> 103 bytes
 .../encoding-opts/blank-png8+m=o+c=1+t=0.png       |   Bin 103 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=o+c=1.png   |   Bin 116 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=o+t=0.png   |   Bin 103 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=o+t=1.png   |   Bin 116 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=o+t=2.png   |   Bin 116 -> 103 bytes
 .../support/encoding-opts/blank-png8+m=o.png       |   Bin 116 -> 103 bytes
 .../encoding-opts/blank-webp+alpha=false.webp      |   Bin 0 -> 180 bytes
 .../blank-webp+alpha_compression=0.webp            |   Bin 0 -> 65744 bytes
 .../blank-webp+alpha_filtering=2.webp              |   Bin 0 -> 226 bytes
 .../encoding-opts/blank-webp+alpha_quality=50.webp |   Bin 0 -> 226 bytes
 .../encoding-opts/blank-webp+autofilter=0.webp     |   Bin 0 -> 226 bytes
 .../blank-webp+filter_sharpness=4.webp             |   Bin 0 -> 226 bytes
 .../blank-webp+filter_strength=50.webp             |   Bin 0 -> 226 bytes
 .../blank-webp+filter_type=1+autofilter=1.webp     |   Bin 0 -> 222 bytes
 .../support/encoding-opts/blank-webp+method=0.webp |   Bin 0 -> 304 bytes
 .../support/encoding-opts/blank-webp+method=6.webp |   Bin 0 -> 242 bytes
 .../blank-webp+partition_limit=50.webp             |   Bin 0 -> 226 bytes
 .../encoding-opts/blank-webp+partitions=3.webp     |   Bin 0 -> 226 bytes
 .../support/encoding-opts/blank-webp+pass=10.webp  |   Bin 0 -> 226 bytes
 .../encoding-opts/blank-webp+preprocessing=1.webp  |   Bin 0 -> 226 bytes
 .../encoding-opts/blank-webp+quality=64.webp       |   Bin 0 -> 224 bytes
 .../encoding-opts/blank-webp+segments=3.webp       |   Bin 0 -> 224 bytes
 .../encoding-opts/blank-webp+sns_strength=50.webp  |   Bin 0 -> 226 bytes
 .../encoding-opts/blank-webp+target_PSNR=.5.webp   |   Bin 0 -> 226 bytes
 .../encoding-opts/blank-webp+target_size=100.webp  |   Bin 0 -> 226 bytes
 .../images/support/encoding-opts/blank-webp.webp   |   Bin 0 -> 226 bytes
 .../support/encoding-opts/solid-png+e=miniz.png    |   Bin 0 -> 116 bytes
 .../images/support/encoding-opts/solid-png+t=0.png |   Bin 270 -> 103 bytes
 .../images/support/encoding-opts/solid-png.png     |   Bin 334 -> 116 bytes
 .../support/encoding-opts/solid-png32+e=miniz.png  |   Bin 0 -> 334 bytes
 .../{blank-png+t=0.png => solid-png32+t=0.png}     |   Bin
 .../{blank-png.png => solid-png32.png}             |   Bin
 .../support/encoding-opts/solid-png8+e=miniz.png   |   Bin 0 -> 116 bytes
 .../encoding-opts/solid-webp+alpha=false.webp      |   Bin 0 -> 200 bytes
 .../solid-webp+alpha_compression=0.webp            |   Bin 0 -> 200 bytes
 .../solid-webp+alpha_filtering=2.webp              |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+alpha_quality=50.webp |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+autofilter=0.webp     |   Bin 0 -> 200 bytes
 .../solid-webp+filter_sharpness=4.webp             |   Bin 0 -> 200 bytes
 .../solid-webp+filter_strength=50.webp             |   Bin 0 -> 200 bytes
 .../solid-webp+filter_type=1+autofilter=1.webp     |   Bin 0 -> 196 bytes
 .../support/encoding-opts/solid-webp+method=0.webp |   Bin 0 -> 474 bytes
 .../support/encoding-opts/solid-webp+method=6.webp |   Bin 0 -> 216 bytes
 .../solid-webp+partition_limit=50.webp             |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+partitions=3.webp     |   Bin 0 -> 200 bytes
 .../support/encoding-opts/solid-webp+pass=10.webp  |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+preprocessing=1.webp  |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+quality=64.webp       |   Bin 0 -> 196 bytes
 .../encoding-opts/solid-webp+segments=3.webp       |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+sns_strength=50.webp  |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+target_PSNR=.5.webp   |   Bin 0 -> 200 bytes
 .../encoding-opts/solid-webp+target_size=100.webp  |   Bin 0 -> 200 bytes
 .../images/support/encoding-opts/solid-webp.webp   |   Bin 0 -> 200 bytes
 .../images/support/mapnik-layer-buffer-size.png    |   Bin 2666 -> 2461 bytes
 .../support/mapnik-marker-ellipse-render1.png      |   Bin 16160 -> 16049 bytes
 .../support/mapnik-marker-ellipse-render2.png      |   Bin 14269 -> 14207 bytes
 .../mapnik-merc2wgs84-reprojection-render.png      |   Bin 40481 -> 40566 bytes
 .../mapnik-wgs842merc-reprojection-render.png      |   Bin 48109 -> 48145 bytes
 ...m=h+c=1.png => marker-in-center-not-placed.png} |   Bin
 .../images/support/marker-in-center.png            |   Bin 0 -> 250 bytes
 .../marker-text-line-scale-factor-0.005.png        |   Bin 1251 -> 1877 bytes
 .../support/marker-text-line-scale-factor-0.1.png  |   Bin 2316 -> 3897 bytes
 .../marker-text-line-scale-factor-0.899.png        |   Bin 7305 -> 17562 bytes
 .../support/marker-text-line-scale-factor-1.5.png  |   Bin 6222 -> 11472 bytes
 .../support/marker-text-line-scale-factor-1.png    |   Bin 8039 -> 18701 bytes
 .../support/marker-text-line-scale-factor-10.png   |   Bin 2228 -> 8340 bytes
 .../support/marker-text-line-scale-factor-100.png  |   Bin 103 -> 2698 bytes
 .../marker-text-line-scale-factor-1e-05.png        |   Bin 1176 -> 1637 bytes
 .../support/marker-text-line-scale-factor-2.png    |   Bin 6628 -> 11856 bytes
 .../support/marker-text-line-scale-factor-5.png    |   Bin 2770 -> 13987 bytes
 tests/python_tests/images/support/overlap.png      |   Bin 49517 -> 0 bytes
 .../python_tests/images/support/tif_colortable.png |   Bin 26701 -> 0 bytes
 .../images/support/transparency/white0.webp        |   Bin 0 -> 744 bytes
 .../python_tests/images/support/vrt_colortable.png |   Bin 7305 -> 0 bytes
 tests/python_tests/introspection_test.py           |    18 +-
 tests/python_tests/json_feature_properties_test.py |     2 +-
 tests/python_tests/layer_buffer_size_test.py       |     6 +-
 tests/python_tests/layer_modification_test.py      |     2 +-
 tests/python_tests/layer_test.py                   |     2 +-
 tests/python_tests/load_map_test.py                |    16 +-
 tests/python_tests/map_deepcopy_test.py            |    43 -
 tests/python_tests/map_query_test.py               |    14 +-
 tests/python_tests/mapnik_config_test.py           |     8 +-
 tests/python_tests/mapnik_logger_test.py           |     2 +-
 tests/python_tests/mapnik_test_data_test.py        |    61 +
 .../python_tests/markers_complex_rendering_test.py |    10 +-
 tests/python_tests/memory_datasource_test.py       |     2 +-
 tests/python_tests/multi_tile_raster_test.py       |     2 +-
 tests/python_tests/object_test.py                  |  1086 +-
 .../python_tests/ogr_and_shape_geometries_test.py  |     5 +-
 tests/python_tests/ogr_test.py                     |    40 +-
 tests/python_tests/osm_test.py                     |     2 +-
 tests/python_tests/palette_test.py                 |     2 +-
 tests/python_tests/parameters_test.py              |     2 +-
 tests/python_tests/pgraster_test.py                |   756 +
 tests/python_tests/pickling_test.py                |     2 +-
 tests/python_tests/png_encoding_test.py            |   269 +-
 tests/python_tests/pngsuite_test.py                |     2 +-
 tests/python_tests/postgis_test.py                 |   377 +-
 tests/python_tests/projection_test.py              |     2 +-
 tests/python_tests/python_plugin_test.py           |   320 +-
 tests/python_tests/query_test.py                   |     2 +-
 tests/python_tests/query_tolerance_test.py         |     2 +-
 tests/python_tests/raster_colorizer_test.py        |    18 +-
 tests/python_tests/raster_colormapped_test.py      |    40 -
 tests/python_tests/raster_symbolizer_test.py       |     9 +-
 tests/python_tests/render_grid_test.py             |   700 +-
 tests/python_tests/render_test.py                  |    68 +-
 tests/python_tests/reprojection_test.py            |    18 +-
 tests/python_tests/save_map_test.py                |    31 +-
 tests/python_tests/shapefile_test.py               |     2 +-
 tests/python_tests/sqlite_rtree_test.py            |    47 +-
 tests/python_tests/sqlite_test.py                  |     2 +-
 tests/python_tests/style_test.py                   |     3 +-
 tests/python_tests/topojson_plugin_test.py         |    91 +
 tests/python_tests/webp_encoding_test.py           |   162 +
 tests/run_tests.py                                 |    13 +-
 tests/visual_tests/compare.py                      |    43 +-
 tests/visual_tests/data/aerial_rgba.tiff           |   Bin 0 -> 718874 bytes
 tests/visual_tests/data/bug1532.csv                |     5 +
 tests/visual_tests/data/bug1533.csv                |     5 +
 tests/visual_tests/data/charplacement.dbf          |   Bin 0 -> 487 bytes
 tests/visual_tests/data/charplacement.shp          |   Bin 0 -> 2108 bytes
 tests/visual_tests/data/charplacement.shx          |   Bin 0 -> 204 bytes
 tests/visual_tests/data/crossing-lines.csv         |     7 +
 tests/visual_tests/data/displacement.dbf           |   Bin 0 -> 1605 bytes
 tests/visual_tests/data/displacement.shp           |   Bin 0 -> 2772 bytes
 tests/visual_tests/data/displacement.shx           |   Bin 0 -> 308 bytes
 tests/visual_tests/data/grouped-rendering.sqlite   |   Bin 0 -> 196608 bytes
 tests/visual_tests/data/heat.tif                   |   Bin 0 -> 250608 bytes
 tests/visual_tests/data/heat_nodata.tif            |   Bin 0 -> 250620 bytes
 tests/visual_tests/data/heat_rgb.tif               |   Bin 0 -> 187954 bytes
 tests/visual_tests/data/line.dbf                   |   Bin 0 -> 72 bytes
 tests/visual_tests/data/line.shp                   |   Bin 0 -> 316 bytes
 tests/visual_tests/data/line.shx                   |   Bin 0 -> 108 bytes
 tests/visual_tests/data/lines2.csv                 |    17 +
 tests/visual_tests/data/lower_columbia.tif         |   Bin 0 -> 100279 bytes
 tests/visual_tests/data/overlap.dbf                |   Bin 0 -> 617 bytes
 tests/visual_tests/data/overlap.shp                |   Bin 0 -> 1972 bytes
 tests/visual_tests/data/overlap.shx                |   Bin 0 -> 260 bytes
 tests/visual_tests/data/pattern.png                |   Bin 0 -> 21447 bytes
 tests/visual_tests/data/points.csv                 |    22 +-
 tests/visual_tests/data/repeat-labels.csv          |    10 +
 tests/visual_tests/data/satellite.png              |   Bin 0 -> 382439 bytes
 tests/visual_tests/data/text-data-binding.sqlite   |   Bin 0 -> 18432 bytes
 tests/visual_tests/data/textspacing.dbf            |   Bin 0 -> 403 bytes
 tests/visual_tests/data/textspacing.shp            |   Bin 0 -> 2332 bytes
 tests/visual_tests/data/textspacing.shx            |   Bin 0 -> 236 bytes
 ...bolizer-opacity-512-512-1.0-grid-reference.json |   138 +
 ...bolizer-opacity-512-512-2.0-grid-reference.json |   138 +
 .../charspacing-200-400-1.0-grid-reference.json    |   109 +
 .../charspacing-200-400-2.0-grid-reference.json    |   109 +
 ...arspacing-lines-300-300-1.0-grid-reference.json |    84 +
 ...arspacing-lines-300-300-2.0-grid-reference.json |    84 +
 .../collision-600-400-1.0-grid-reference.json      |    72 +-
 .../collision-600-400-2.0-grid-reference.json      |   109 +
 ...colorize-alpha1-512-512-1.0-grid-reference.json |   283 +
 ...colorize-alpha1-512-512-2.0-grid-reference.json |   283 +
 ...colorize-alpha2-512-512-1.0-grid-reference.json |   283 +
 ...colorize-alpha2-512-512-2.0-grid-reference.json |   283 +
 ...colorize-alpha3-500-100-1.0-grid-reference.json |   134 +
 ...colorize-alpha3-512-512-1.0-grid-reference.json |   283 +
 ...colorize-alpha3-512-512-2.0-grid-reference.json |   283 +
 ...ver-compositing-512-512-1.0-grid-reference.json |   140 +
 ...ver-compositing-512-512-2.0-grid-reference.json |   140 +
 ...xpressionformat-500-100-1.0-grid-reference.json |     4 +-
 ...xpressionformat-500-100-2.0-grid-reference.json |    43 +
 .../formatting-1-500-100-1.0-grid-reference.json   |    10 +-
 .../formatting-1-500-100-2.0-grid-reference.json   |    43 +
 .../formatting-2-500-100-1.0-grid-reference.json   |    10 +-
 .../formatting-2-500-100-2.0-grid-reference.json   |    43 +
 .../formatting-3-500-100-1.0-grid-reference.json   |     6 +-
 .../formatting-3-500-100-2.0-grid-reference.json   |    43 +
 .../formatting-4-500-100-2.0-grid-reference.json   |    43 +
 .../formatting-5-500-100-1.0-grid-reference.json   |    43 +
 .../formatting-5-500-100-2.0-grid-reference.json   |    43 +
 .../formatting-6-500-100-1.0-grid-reference.json   |    43 +
 .../formatting-6-500-100-2.0-grid-reference.json   |    43 +
 .../formatting-7-500-100-1.0-grid-reference.json   |    43 +
 .../formatting-7-500-100-2.0-grid-reference.json   |    43 +
 .../formatting-8-500-100-1.0-grid-reference.json   |    43 +
 .../formatting-8-500-100-2.0-grid-reference.json   |    43 +
 ...-expr-alignment-500-500-1.0-grid-reference.json |   145 +
 ...-expr-alignment-500-500-2.0-grid-reference.json |   145 +
 ...nal-expressions-256-256-1.0-grid-reference.json |    74 +
 ...nal-expressions-256-256-2.0-grid-reference.json |    74 +
 ...ressions-length-512-512-1.0-grid-reference.json |   142 +
 ...ressions-length-512-512-2.0-grid-reference.json |   138 +
 ...l-filter-factor-600-400-1.0-grid-reference.json |   108 +
 ...l-filter-factor-600-400-2.0-grid-reference.json |   108 +
 ...transform-scale-500-500-1.0-grid-reference.json |   134 +
 ...transform-scale-500-500-2.0-grid-reference.json |   134 +
 ...-scale-patterns-500-500-1.0-grid-reference.json |   134 +
 ...-scale-patterns-500-500-2.0-grid-reference.json |   134 +
 ...sform-translate-200-200-1.0-grid-reference.json |    59 +
 ...sform-translate-200-200-2.0-grid-reference.json |    59 +
 ...nslate-patterns-200-200-1.0-grid-reference.json |    59 +
 ...nslate-patterns-200-200-2.0-grid-reference.json |    59 +
 ...te-patterns-svg-200-200-1.0-grid-reference.json |    58 +
 ...te-patterns-svg-200-200-2.0-grid-reference.json |    58 +
 ...up-symbolizer-1-512-512-1.0-grid-reference.json |   137 +
 ...up-symbolizer-1-512-512-2.0-grid-reference.json |   137 +
 ...up-symbolizer-2-512-512-1.0-grid-reference.json |   138 +
 ...up-symbolizer-2-512-512-2.0-grid-reference.json |   138 +
 ...up-symbolizer-3-512-256-1.0-grid-reference.json |    74 +
 ...up-symbolizer-3-512-256-2.0-grid-reference.json |    74 +
 ...mbolizer-line-1-512-512-1.0-grid-reference.json |   137 +
 ...mbolizer-line-1-512-512-2.0-grid-reference.json |   137 +
 ...mbolizer-line-2-512-512-1.0-grid-reference.json |   138 +
 ...mbolizer-line-2-512-512-2.0-grid-reference.json |   138 +
 ...op-on-satellite-450-450-1.0-grid-reference.json |   121 +
 ...op-on-satellite-450-450-2.0-grid-reference.json |   121 +
 .../grids/harfbuzz-800-200-1.0-grid-reference.json |    68 +
 .../grids/harfbuzz-800-200-2.0-grid-reference.json |    68 +
 .../hb-fontsets-800-200-1.0-grid-reference.json    |    62 +
 .../hb-fontsets-800-200-2.0-grid-reference.json    |    60 +
 ...-filters-galore-512-512-1.0-grid-reference.json |   290 +
 ...-filters-galore-512-512-2.0-grid-reference.json |   290 +
 ...ters-multi-blur-512-512-1.0-grid-reference.json |   289 +
 ...ters-multi-blur-512-512-2.0-grid-reference.json |   288 +
 ...ti-blur-inflate-512-512-1.0-grid-reference.json |   289 +
 ...ti-blur-inflate-512-512-2.0-grid-reference.json |   288 +
 .../jalign-auto-200-200-1.0-grid-reference.json    |    24 +-
 .../jalign-auto-200-200-2.0-grid-reference.json    |    59 +
 .../grids/khmer-800-200-1.0-grid-reference.json    |    68 +
 .../grids/khmer-800-200-2.0-grid-reference.json    |    68 +
 .../line-offset-900-250-1.0-grid-reference.json    |    64 +-
 .../line-offset-900-250-2.0-grid-reference.json    |    79 +
 ...ty-multi-render-512-512-1.0-grid-reference.json |   137 +
 ...ty-multi-render-512-512-2.0-grid-reference.json |   137 +
 ...ooth-and-offset-500-100-1.0-grid-reference.json |    34 +
 ...ooth-and-offset-512-512-1.0-grid-reference.json |   137 +
 ...ooth-and-offset-512-512-2.0-grid-reference.json |   137 +
 ...tern-symbolizer-900-250-1.0-grid-reference.json |    78 +
 ...tern-symbolizer-900-250-2.0-grid-reference.json |    79 +
 ...bolizer-opacity-512-512-1.0-grid-reference.json |   144 +
 ...bolizer-opacity-512-512-2.0-grid-reference.json |   144 +
 ...ooth-and-offset-512-512-1.0-grid-reference.json |   137 +
 ...ooth-and-offset-512-512-2.0-grid-reference.json |   137 +
 ...zer-expressions-256-256-1.0-grid-reference.json |    73 +
 ...zer-expressions-256-256-2.0-grid-reference.json |    73 +
 ...expressions-all-256-256-1.0-grid-reference.json |    73 +
 ...expressions-all-256-256-2.0-grid-reference.json |    73 +
 .../line_break-800-800-1.0-grid-reference.json     |   218 +
 .../line_break-800-800-2.0-grid-reference.json     |   218 +
 .../grids/lines-1-200-200-1.0-grid-reference.json  |     2 +-
 .../grids/lines-1-200-200-2.0-grid-reference.json  |    66 +
 .../grids/lines-1-400-400-1.0-grid-reference.json  |     4 +-
 .../grids/lines-1-400-400-2.0-grid-reference.json  |   117 +
 .../grids/lines-1-600-600-1.0-grid-reference.json  |     8 +-
 .../grids/lines-1-600-600-2.0-grid-reference.json  |   167 +
 .../grids/lines-1-800-800-1.0-grid-reference.json  |     8 +-
 .../grids/lines-1-800-800-2.0-grid-reference.json  |   217 +
 .../grids/lines-2-200-200-1.0-grid-reference.json  |     2 +-
 .../grids/lines-2-200-200-2.0-grid-reference.json  |    66 +
 .../grids/lines-2-400-400-2.0-grid-reference.json  |   117 +
 .../grids/lines-2-600-600-1.0-grid-reference.json  |     4 +-
 .../grids/lines-2-600-600-2.0-grid-reference.json  |   167 +
 .../grids/lines-2-800-800-1.0-grid-reference.json  |     8 +-
 .../grids/lines-2-800-800-2.0-grid-reference.json  |   217 +
 .../grids/lines-3-200-200-1.0-grid-reference.json  |     2 +-
 .../grids/lines-3-200-200-2.0-grid-reference.json  |    66 +
 .../grids/lines-3-400-400-1.0-grid-reference.json  |     4 +-
 .../grids/lines-3-400-400-2.0-grid-reference.json  |   117 +
 .../grids/lines-3-600-600-1.0-grid-reference.json  |     8 +-
 .../grids/lines-3-600-600-2.0-grid-reference.json  |   167 +
 .../grids/lines-3-800-800-1.0-grid-reference.json  |    12 +-
 .../grids/lines-3-800-800-2.0-grid-reference.json  |   217 +
 .../grids/lines-4-200-200-1.0-grid-reference.json  |    74 +
 .../grids/lines-4-200-200-2.0-grid-reference.json  |    74 +
 .../grids/lines-4-400-400-1.0-grid-reference.json  |   124 +
 .../grids/lines-4-400-400-2.0-grid-reference.json  |   124 +
 .../grids/lines-4-600-600-1.0-grid-reference.json  |   174 +
 .../grids/lines-4-600-600-2.0-grid-reference.json  |   174 +
 .../grids/lines-4-800-800-1.0-grid-reference.json  |   224 +
 .../grids/lines-4-800-800-2.0-grid-reference.json  |   224 +
 .../grids/lines-5-200-200-1.0-grid-reference.json  |    74 +
 .../grids/lines-5-200-200-2.0-grid-reference.json  |    74 +
 .../grids/lines-5-400-400-1.0-grid-reference.json  |   124 +
 .../grids/lines-5-400-400-2.0-grid-reference.json  |   124 +
 .../grids/lines-5-600-600-1.0-grid-reference.json  |   174 +
 .../grids/lines-5-600-600-2.0-grid-reference.json  |   174 +
 .../grids/lines-5-800-800-1.0-grid-reference.json  |   224 +
 .../grids/lines-5-800-800-2.0-grid-reference.json  |   224 +
 .../grids/lines-6-200-200-1.0-grid-reference.json  |    74 +
 .../grids/lines-6-200-200-2.0-grid-reference.json  |    74 +
 .../grids/lines-6-400-400-1.0-grid-reference.json  |   124 +
 .../grids/lines-6-400-400-2.0-grid-reference.json  |   124 +
 .../grids/lines-6-600-600-1.0-grid-reference.json  |   174 +
 .../grids/lines-6-600-600-2.0-grid-reference.json  |   174 +
 .../grids/lines-6-800-800-1.0-grid-reference.json  |   224 +
 .../grids/lines-6-800-800-2.0-grid-reference.json  |   224 +
 .../grids/lines-7-200-200-1.0-grid-reference.json  |    59 +
 .../grids/lines-7-200-200-2.0-grid-reference.json  |    59 +
 .../grids/lines-7-400-400-1.0-grid-reference.json  |   109 +
 .../grids/lines-7-400-400-2.0-grid-reference.json  |   109 +
 .../grids/lines-7-600-600-1.0-grid-reference.json  |   159 +
 .../grids/lines-7-600-600-2.0-grid-reference.json  |   159 +
 .../grids/lines-7-800-800-1.0-grid-reference.json  |   209 +
 .../grids/lines-7-800-800-2.0-grid-reference.json  |   209 +
 ...-multi-layout-1-800-800-1.0-grid-reference.json |   224 +
 ...-multi-layout-1-800-800-2.0-grid-reference.json |   224 +
 ...-multi-layout-2-800-800-1.0-grid-reference.json |   209 +
 ...-multi-layout-2-800-800-2.0-grid-reference.json |   209 +
 ...i-layout-shield-800-800-1.0-grid-reference.json |   217 +
 ...i-layout-shield-800-800-2.0-grid-reference.json |   217 +
 .../lines-shield-200-200-1.0-grid-reference.json   |     8 +-
 .../lines-shield-200-200-2.0-grid-reference.json   |    66 +
 .../lines-shield-400-400-1.0-grid-reference.json   |    26 +-
 .../lines-shield-400-400-2.0-grid-reference.json   |   116 +
 .../lines-shield-600-600-1.0-grid-reference.json   |    36 +-
 .../lines-shield-600-600-2.0-grid-reference.json   |   166 +
 .../lines-shield-800-800-1.0-grid-reference.json   |    36 +-
 .../lines-shield-800-800-2.0-grid-reference.json   |   217 +
 .../grids/list-100-100-1.0-grid-reference.json     |    18 +-
 .../grids/list-100-100-2.0-grid-reference.json     |    43 +
 .../grids/list-150-100-1.0-grid-reference.json     |    18 +-
 .../grids/list-150-100-2.0-grid-reference.json     |    43 +
 .../grids/list-250-100-1.0-grid-reference.json     |    24 +-
 .../grids/list-250-100-2.0-grid-reference.json     |    43 +
 .../grids/list-300-100-1.0-grid-reference.json     |    24 +-
 .../grids/list-300-100-2.0-grid-reference.json     |    43 +
 .../grids/list-400-100-1.0-grid-reference.json     |    26 +-
 .../grids/list-400-100-2.0-grid-reference.json     |    43 +
 .../grids/list-600-100-1.0-grid-reference.json     |    10 +-
 .../grids/list-600-100-2.0-grid-reference.json     |    43 +
 .../grids/list-800-100-1.0-grid-reference.json     |    14 +-
 .../grids/list-800-100-2.0-grid-reference.json     |    43 +
 ...age-compositing-512-512-1.0-grid-reference.json |   137 +
 ...age-compositing-512-512-2.0-grid-reference.json |   137 +
 .../marker-collide-512-512-1.0-grid-reference.json |   137 +
 .../marker-collide-512-512-2.0-grid-reference.json |   137 +
 ...terior-position-600-400-1.0-grid-reference.json |   109 +
 ...terior-position-600-400-2.0-grid-reference.json |   109 +
 ...er-multi-policy-600-400-2.0-grid-reference.json |   110 +
 ...ker-on-hex-grid-257-256-1.0-grid-reference.json |     2 +-
 ...ker-on-hex-grid-257-256-2.0-grid-reference.json |    73 +
 ...ker-on-hex-grid-400-600-2.0-grid-reference.json |   159 +
 ...ker-on-hex-grid-600-400-1.0-grid-reference.json |     2 +-
 ...ker-on-hex-grid-600-400-2.0-grid-reference.json |   109 +
 .../marker-on-line-600-400-2.0-grid-reference.json |   109 +
 ...and-avoid-edges-512-512-1.0-grid-reference.json |   137 +
 ...and-avoid-edges-512-512-2.0-grid-reference.json |   137 +
 ...-line-placement-600-400-1.0-grid-reference.json |   109 +
 ...-line-placement-600-400-2.0-grid-reference.json |   109 +
 ...first-placement-600-400-1.0-grid-reference.json |   111 +
 ...first-placement-600-400-2.0-grid-reference.json |   111 +
 ...-last-placement-600-400-1.0-grid-reference.json |   111 +
 ...-last-placement-600-400-2.0-grid-reference.json |   111 +
 ...pacing-eq-width-600-400-2.0-grid-reference.json |   109 +
 ...q-width-overlap-600-400-2.0-grid-reference.json |   109 +
 ...path-expression-500-100-1.0-grid-reference.json |    34 +
 ...path-expression-500-100-2.0-grid-reference.json |    34 +
 ...ecenter-collide-256-128-1.0-grid-reference.json |    42 +
 ...ecenter-collide-256-128-2.0-grid-reference.json |    42 +
 ...empty-g-element-500-100-1.0-grid-reference.json |    34 +
 ...empty-g-element-500-100-2.0-grid-reference.json |    34 +
 ...ker-svg-opacity-500-100-2.0-grid-reference.json |    37 +
 ...er-svg-opacity2-500-100-1.0-grid-reference.json |    34 +
 ...er-svg-opacity2-500-100-2.0-grid-reference.json |    34 +
 ...expressions-all-256-256-1.0-grid-reference.json |    73 +
 ...expressions-all-256-256-2.0-grid-reference.json |    73 +
 ...marker-vs-point-512-512-1.0-grid-reference.json |   139 +
 ...marker-vs-point-512-512-2.0-grid-reference.json |   139 +
 ...e-multi-polygon-512-512-1.0-grid-reference.json |   332 +
 ...e-multi-polygon-512-512-2.0-grid-reference.json |   295 +
 ...ackground-image-257-256-2.0-grid-reference.json |    72 +
 ...ackground-image-400-600-2.0-grid-reference.json |   159 +
 ...ackground-image-600-400-2.0-grid-reference.json |   109 +
 ...-hsla-transform-257-256-2.0-grid-reference.json |    72 +
 ...-hsla-transform-400-600-2.0-grid-reference.json |   159 +
 ...-hsla-transform-600-400-2.0-grid-reference.json |   109 +
 ...-linear-comp-op-500-100-1.0-grid-reference.json |    34 +
 ...-linear-comp-op-500-100-2.0-grid-reference.json |    33 +
 ...ement_on_points-500-100-2.0-grid-reference.json |    38 +
 .../orientation-800-200-1.0-grid-reference.json    |    68 +
 .../orientation-800-200-2.0-grid-reference.json    |    68 +
 ...zer-expressions-256-256-1.0-grid-reference.json |    73 +
 ...zer-expressions-256-256-2.0-grid-reference.json |    73 +
 ...expressions-all-256-256-1.0-grid-reference.json |    73 +
 ...expressions-all-256-256-2.0-grid-reference.json |    73 +
 ...-placement-expr-500-500-1.0-grid-reference.json |   157 +
 ...-placement-expr-500-500-2.0-grid-reference.json |   157 +
 ...zer-expressions-256-256-1.0-grid-reference.json |    73 +
 ...zer-expressions-256-256-2.0-grid-reference.json |    73 +
 ...expressions-all-256-256-1.0-grid-reference.json |    73 +
 ...expressions-all-256-256-2.0-grid-reference.json |    73 +
 ...n-winding-order-300-300-1.0-grid-reference.json |    84 +
 ...n-winding-order-300-300-2.0-grid-reference.json |    84 +
 .../postgis-inline-512-512-1.0-grid-reference.json |   137 +
 .../postgis-inline-512-512-2.0-grid-reference.json |   137 +
 ...color-to-alpha1-512-512-1.0-grid-reference.json |   136 +
 ...color-to-alpha1-512-512-2.0-grid-reference.json |   136 +
 ...color-to-alpha2-512-512-1.0-grid-reference.json |   136 +
 ...color-to-alpha2-512-512-2.0-grid-reference.json |   136 +
 ...color-to-alpha3-512-512-1.0-grid-reference.json |   136 +
 ...color-to-alpha3-512-512-2.0-grid-reference.json |   136 +
 ...color-to-alpha4-512-512-1.0-grid-reference.json |   136 +
 ...color-to-alpha4-512-512-2.0-grid-reference.json |   136 +
 ...color-to-alpha5-512-512-1.0-grid-reference.json |   136 +
 ...color-to-alpha5-512-512-2.0-grid-reference.json |   136 +
 ...aster_colorizer-512-512-1.0-grid-reference.json |   136 +
 ...aster_colorizer-512-512-2.0-grid-reference.json |   136 +
 ...ster_symbolizer-512-512-1.0-grid-reference.json |   136 +
 ...ster_symbolizer-512-512-2.0-grid-reference.json |   136 +
 ...repeat-labels-1-750-250-1.0-grid-reference.json |    79 +
 ...repeat-labels-1-750-250-2.0-grid-reference.json |    79 +
 ...repeat-labels-2-750-250-1.0-grid-reference.json |    79 +
 ...repeat-labels-2-750-250-2.0-grid-reference.json |    79 +
 ...repeat-labels-3-750-250-1.0-grid-reference.json |    79 +
 ...repeat-labels-3-750-250-2.0-grid-reference.json |    79 +
 ...repeat-labels-4-750-250-1.0-grid-reference.json |    79 +
 ...repeat-labels-4-750-250-2.0-grid-reference.json |    79 +
 ...ouped-rendering-500-100-1.0-grid-reference.json |   344 +
 ...ouped-rendering-600-600-1.0-grid-reference.json |   888 +
 ...ouped-rendering-600-600-2.0-grid-reference.json |   847 +
 ...ouped-rendering-600-600-1.0-grid-reference.json |   892 +
 ...ouped-rendering-600-600-2.0-grid-reference.json |   856 +
 .../rtl-point-200-200-1.0-grid-reference.json      |    18 +-
 .../rtl-point-200-200-2.0-grid-reference.json      |    59 +
 ...and-avoid-edges-512-512-1.0-grid-reference.json |   137 +
 ...and-avoid-edges-512-512-2.0-grid-reference.json |   137 +
 ...pacing-eq-width-600-400-1.0-grid-reference.json |    66 +-
 ...pacing-eq-width-600-400-2.0-grid-reference.json |   109 +
 ...ield-on-polygon-600-400-2.0-grid-reference.json |   115 +
 ...eldsymbolizer-1-490-100-1.0-grid-reference.json |    14 +-
 ...eldsymbolizer-1-490-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-495-100-1.0-grid-reference.json |    16 +-
 ...eldsymbolizer-1-495-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-497-100-1.0-grid-reference.json |    16 +-
 ...eldsymbolizer-1-497-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-498-100-1.0-grid-reference.json |    20 +-
 ...eldsymbolizer-1-498-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-499-100-1.0-grid-reference.json |    16 +-
 ...eldsymbolizer-1-499-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-500-100-1.0-grid-reference.json |    18 +-
 ...eldsymbolizer-1-500-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-501-100-1.0-grid-reference.json |    16 +-
 ...eldsymbolizer-1-501-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-502-100-1.0-grid-reference.json |    14 +-
 ...eldsymbolizer-1-502-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-505-100-1.0-grid-reference.json |    14 +-
 ...eldsymbolizer-1-505-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-1-510-100-1.0-grid-reference.json |    14 +-
 ...eldsymbolizer-1-510-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-490-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-490-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-495-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-495-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-497-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-497-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-498-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-498-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-499-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-499-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-500-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-500-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-501-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-501-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-502-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-502-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-505-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-505-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-510-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-2-510-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-490-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-490-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-495-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-495-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-497-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-497-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-498-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-498-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-499-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-499-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-500-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-500-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-501-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-501-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-502-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-502-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-505-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-505-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-510-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-3-510-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-490-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-490-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-495-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-495-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-497-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-497-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-498-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-498-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-499-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-499-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-500-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-500-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-501-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-501-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-502-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-502-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-505-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-505-100-2.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-510-100-1.0-grid-reference.json |    43 +
 ...eldsymbolizer-4-510-100-2.0-grid-reference.json |    43 +
 .../grids/simple-100-100-1.0-grid-reference.json   |    27 +-
 .../grids/simple-100-100-2.0-grid-reference.json   |    37 +
 .../grids/simple-150-100-1.0-grid-reference.json   |    29 +-
 .../grids/simple-150-100-2.0-grid-reference.json   |    38 +
 .../grids/simple-250-100-1.0-grid-reference.json   |    34 +-
 .../grids/simple-250-100-2.0-grid-reference.json   |    42 +
 .../grids/simple-300-100-1.0-grid-reference.json   |    32 +-
 .../grids/simple-300-100-2.0-grid-reference.json   |    42 +
 .../grids/simple-400-100-1.0-grid-reference.json   |    34 +-
 .../grids/simple-400-100-2.0-grid-reference.json   |    42 +
 .../grids/simple-600-100-1.0-grid-reference.json   |    12 +-
 .../grids/simple-600-100-2.0-grid-reference.json   |    43 +
 .../grids/simple-800-100-1.0-grid-reference.json   |    20 +-
 .../grids/simple-800-100-2.0-grid-reference.json   |    43 +
 .../grids/simple-E-500-100-1.0-grid-reference.json |     6 +-
 .../grids/simple-E-500-100-2.0-grid-reference.json |    34 +
 .../grids/simple-N-500-100-1.0-grid-reference.json |     6 +-
 .../grids/simple-N-500-100-2.0-grid-reference.json |    34 +
 .../simple-NE-500-100-1.0-grid-reference.json      |     6 +-
 .../simple-NE-500-100-2.0-grid-reference.json      |    34 +
 .../simple-NW-500-100-1.0-grid-reference.json      |     8 +-
 .../simple-NW-500-100-2.0-grid-reference.json      |    34 +
 .../grids/simple-S-500-100-1.0-grid-reference.json |     6 +-
 .../grids/simple-S-500-100-2.0-grid-reference.json |    34 +
 .../simple-SE-500-100-1.0-grid-reference.json      |     6 +-
 .../simple-SE-500-100-2.0-grid-reference.json      |    34 +
 .../simple-SW-500-100-1.0-grid-reference.json      |     8 +-
 .../simple-SW-500-100-2.0-grid-reference.json      |    34 +
 .../grids/simple-W-500-100-1.0-grid-reference.json |     8 +-
 .../grids/simple-W-500-100-2.0-grid-reference.json |    34 +
 .../simple-shield-500-100-1.0-grid-reference.json  |    43 +
 .../simple-shield-500-100-2.0-grid-reference.json  |    43 +
 .../simple-shield-600-400-1.0-grid-reference.json  |   118 +
 .../simple-shield-600-400-2.0-grid-reference.json  |   118 +
 ...iting-tiled-0,0-512-512-1.0-grid-reference.json |   190 +
 ...iting-tiled-0,0-512-512-2.0-grid-reference.json |   190 +
 ...iting-tiled-0,1-512-512-1.0-grid-reference.json |   152 +
 ...iting-tiled-0,1-512-512-2.0-grid-reference.json |   152 +
 ...iting-tiled-1,0-512-512-1.0-grid-reference.json |   248 +
 ...iting-tiled-1,0-512-512-2.0-grid-reference.json |   248 +
 ...iting-tiled-1,1-512-512-1.0-grid-reference.json |   170 +
 ...iting-tiled-1,1-512-512-2.0-grid-reference.json |   170 +
 ...ow-overlap-expr-500-500-1.0-grid-reference.json |   145 +
 ...ow-overlap-expr-500-500-2.0-grid-reference.json |   145 +
 .../text-bengali-800-100-1.0-grid-reference.json   |    36 +
 .../text-bengali-800-100-2.0-grid-reference.json   |    36 +
 .../text-bug1532-600-165-1.0-grid-reference.json   |    54 +
 .../text-bug1532-600-165-2.0-grid-reference.json   |    54 +
 .../text-bug1533-600-600-1.0-grid-reference.json   |   162 +
 .../text-bug1533-600-600-2.0-grid-reference.json   |   162 +
 .../text-bug1820+0-600-300-1.0-grid-reference.json |    93 +
 .../text-bug1820+0-600-300-2.0-grid-reference.json |    93 +
 .../text-bug1820+1-600-300-1.0-grid-reference.json |    93 +
 .../text-bug1820+1-600-300-2.0-grid-reference.json |    93 +
 .../text-bug1820-1-600-300-1.0-grid-reference.json |    93 +
 .../text-bug1820-1-600-300-2.0-grid-reference.json |    93 +
 .../text-bug2037-800-300-1.0-grid-reference.json   |    87 +
 .../text-bug2037-800-300-2.0-grid-reference.json   |    86 +
 ...t-charplacement-512-512-1.0-grid-reference.json |   148 +
 ...t-charplacement-512-512-2.0-grid-reference.json |   148 +
 ...xt-data-binding-500-500-1.0-grid-reference.json |   134 +
 ...xt-data-binding-500-500-2.0-grid-reference.json |   133 +
 ...xt-displacement-512-512-1.0-grid-reference.json |   162 +
 ...xt-displacement-512-512-2.0-grid-reference.json |   160 +
 ...ionformat-color-800-100-1.0-grid-reference.json |    43 +
 ...ionformat-color-800-100-2.0-grid-reference.json |    43 +
 ...t-font-features-500-500-1.0-grid-reference.json |   140 +
 ...t-font-features-500-500-2.0-grid-reference.json |   140 +
 .../text-halign-800-800-1.0-grid-reference.json    |   224 +
 .../text-halign-800-800-2.0-grid-reference.json    |   224 +
 ...t-halign-adjust-800-800-1.0-grid-reference.json |   224 +
 ...t-halign-adjust-800-800-2.0-grid-reference.json |   224 +
 ...djust-multiline-800-800-1.0-grid-reference.json |   224 +
 ...djust-multiline-800-800-2.0-grid-reference.json |   224 +
 ...xt-halo-opacity-512-512-1.0-grid-reference.json |   140 +
 ...xt-halo-opacity-512-512-2.0-grid-reference.json |   140 +
 ...halo-rasterizer-600-400-1.0-grid-reference.json |    52 +-
 ...halo-rasterizer-600-400-2.0-grid-reference.json |   124 +
 ...-halo-transform-600-400-1.0-grid-reference.json |   124 +
 ...-halo-transform-600-400-2.0-grid-reference.json |   124 +
 .../text-line-wrap-512-512-1.0-grid-reference.json |   138 +
 .../text-line-wrap-512-512-2.0-grid-reference.json |   138 +
 .../text-malayalam-800-100-1.0-grid-reference.json |    34 +
 .../text-malayalam-800-100-2.0-grid-reference.json |    34 +
 ...-multi-layout-1-512-512-1.0-grid-reference.json |   142 +
 ...-multi-layout-1-512-512-2.0-grid-reference.json |   142 +
 ...-multi-layout-2-512-512-1.0-grid-reference.json |   137 +
 ...-multi-layout-2-512-512-2.0-grid-reference.json |   137 +
 .../text-overlap-512-512-1.0-grid-reference.json   |   156 +
 .../text-overlap-512-512-2.0-grid-reference.json   |   156 +
 .../text-spacing-512-512-1.0-grid-reference.json   |   153 +
 .../text-spacing-512-512-2.0-grid-reference.json   |   153 +
 .../text-ttc-font-600-400-1.0-grid-reference.json  |   124 +
 .../text-ttc-font-600-400-2.0-grid-reference.json  |   124 +
 ...ext-typographic-512-512-1.0-grid-reference.json |   138 +
 ...ext-typographic-512-512-2.0-grid-reference.json |   138 +
 ...tical-alignment-800-800-1.0-grid-reference.json |   224 +
 ...tical-alignment-800-800-2.0-grid-reference.json |   224 +
 ...ssoc-alpha-gdal-600-400-2.0-grid-reference.json |   108 +
 ...tiff-alpha-gdal-600-400-2.0-grid-reference.json |   108 +
 ...a-gradient-gdal-600-400-2.0-grid-reference.json |   108 +
 ...alignment-gdal1-255-257-2.0-grid-reference.json |    73 +
 ...alignment-gdal1-256-256-2.0-grid-reference.json |    72 +
 ...alignment-gdal2-255-257-2.0-grid-reference.json |    73 +
 ...alignment-gdal2-256-256-2.0-grid-reference.json |    72 +
 ...odata-edge-gdal-600-400-2.0-grid-reference.json |   108 +
 ...odata-edge-gdal-969-793-2.0-grid-reference.json |   207 +
 ...odata-edge-rgba-500-100-1.0-grid-reference.json |    33 +
 ...odata-edge-rgba-512-512-1.0-grid-reference.json |   136 +
 ...odata-edge-rgba-512-512-2.0-grid-reference.json |   136 +
 ...tiff-nodata-rgb-512-512-1.0-grid-reference.json |   136 +
 ...tiff-nodata-rgb-512-512-2.0-grid-reference.json |   136 +
 ...iff-nodata-rgba-512-512-1.0-grid-reference.json |   136 +
 ...iff-nodata-rgba-512-512-2.0-grid-reference.json |   136 +
 ...odata-tolerance-512-512-1.0-grid-reference.json |   136 +
 ...odata-tolerance-512-512-2.0-grid-reference.json |   136 +
 ...paque-edge-gdal-256-256-2.0-grid-reference.json |    72 +
 ...paque-edge-gdal-969-793-2.0-grid-reference.json |   207 +
 ...aque-edge-gdal2-600-400-2.0-grid-reference.json |   108 +
 ...aque-edge-gdal2-969-793-2.0-grid-reference.json |   207 +
 ...ue-edge-raster2-600-400-2.0-grid-reference.json |   108 +
 ...ue-edge-raster2-969-793-2.0-grid-reference.json |   207 +
 ...-reprojection-1-250-250-1.0-grid-reference.json |    71 +
 ...-reprojection-1-250-250-2.0-grid-reference.json |    71 +
 ...-reprojection-2-250-250-1.0-grid-reference.json |    71 +
 ...-reprojection-2-250-250-2.0-grid-reference.json |    71 +
 ...tiff-resampling-600-400-2.0-grid-reference.json |   108 +
 ...tiff_colortable-256-256-1.0-grid-reference.json |    72 +
 ...tiff_colortable-256-256-2.0-grid-reference.json |    72 +
 ...e_custom_nodata-256-256-1.0-grid-reference.json |    72 +
 ...e_custom_nodata-256-256-2.0-grid-reference.json |    72 +
 .../vrt_colortable-256-256-1.0-grid-reference.json |    72 +
 .../vrt_colortable-256-256-2.0-grid-reference.json |    72 +
 .../whole-centroid-600-400-1.0-grid-reference.json |     4 +-
 .../whole-centroid-600-400-2.0-grid-reference.json |   109 +
 ...ymbolizer-opacity-512-512-1.0-agg-reference.png |   Bin 0 -> 15029 bytes
 ...bolizer-opacity-512-512-1.0-cairo-reference.png |   Bin 0 -> 22372 bytes
 ...ymbolizer-opacity-512-512-2.0-agg-reference.png |   Bin 0 -> 15626 bytes
 ...bolizer-opacity-512-512-2.0-cairo-reference.png |   Bin 0 -> 23378 bytes
 .../charspacing-200-400-1.0-agg-reference.png      |   Bin 0 -> 7323 bytes
 .../charspacing-200-400-1.0-cairo-reference.png    |   Bin 0 -> 3719 bytes
 .../charspacing-200-400-2.0-agg-reference.png      |   Bin 0 -> 13340 bytes
 .../charspacing-200-400-2.0-cairo-reference.png    |   Bin 0 -> 6275 bytes
 ...charspacing-lines-300-300-1.0-agg-reference.png |   Bin 0 -> 7597 bytes
 ...arspacing-lines-300-300-1.0-cairo-reference.png |   Bin 0 -> 4037 bytes
 ...charspacing-lines-300-300-2.0-agg-reference.png |   Bin 0 -> 12746 bytes
 ...arspacing-lines-300-300-2.0-cairo-reference.png |   Bin 0 -> 6389 bytes
 .../images/collision-600-400-1.0-agg-reference.png |   Bin 33617 -> 30191 bytes
 .../images/collision-600-400-1.0-agg.png           |   Bin 0 -> 30565 bytes
 .../collision-600-400-1.0-cairo-reference.png      |   Bin 28021 -> 26875 bytes
 ...ference.png => collision-600-400-1.0-cairo.png} |   Bin
 .../collision-600-400-1.0-grid.json}               |     0
 .../images/collision-600-400-2.0-agg-reference.png |   Bin 30453 -> 31821 bytes
 .../images/collision-600-400-2.0-agg.png           |   Bin 0 -> 31145 bytes
 .../collision-600-400-2.0-cairo-reference.png      |   Bin 27260 -> 29563 bytes
 ...ference.png => collision-600-400-2.0-cairo.png} |   Bin
 .../colorize-alpha1-512-512-1.0-agg-reference.png  |   Bin 0 -> 21051 bytes
 ...colorize-alpha1-512-512-1.0-cairo-reference.png |   Bin 0 -> 21324 bytes
 .../colorize-alpha1-512-512-2.0-agg-reference.png  |   Bin 0 -> 26890 bytes
 ...colorize-alpha1-512-512-2.0-cairo-reference.png |   Bin 0 -> 25904 bytes
 .../colorize-alpha2-512-512-1.0-agg-reference.png  |   Bin 0 -> 21053 bytes
 ...colorize-alpha2-512-512-1.0-cairo-reference.png |   Bin 0 -> 21324 bytes
 .../colorize-alpha2-512-512-2.0-agg-reference.png  |   Bin 0 -> 25521 bytes
 ...colorize-alpha2-512-512-2.0-cairo-reference.png |   Bin 0 -> 25904 bytes
 .../colorize-alpha3-512-512-1.0-agg-reference.png  |   Bin 0 -> 21093 bytes
 ...colorize-alpha3-512-512-1.0-cairo-reference.png |   Bin 0 -> 21324 bytes
 .../colorize-alpha3-512-512-2.0-agg-reference.png  |   Bin 0 -> 25900 bytes
 ...colorize-alpha3-512-512-2.0-cairo-reference.png |   Bin 0 -> 25904 bytes
 ...-over-compositing-512-512-1.0-agg-reference.png |   Bin 0 -> 333 bytes
 ...ver-compositing-512-512-1.0-cairo-reference.png |   Bin 0 -> 126 bytes
 ...-over-compositing-512-512-2.0-agg-reference.png |   Bin 0 -> 436 bytes
 ...ver-compositing-512-512-2.0-cairo-reference.png |   Bin 0 -> 126 bytes
 .../expressionformat-500-100-1.0-agg-reference.png |   Bin 1326 -> 1480 bytes
 ...xpressionformat-500-100-1.0-cairo-reference.png |   Bin 1325 -> 1357 bytes
 .../expressionformat-500-100-2.0-agg-reference.png |   Bin 1651 -> 2175 bytes
 ...xpressionformat-500-100-2.0-cairo-reference.png |   Bin 1711 -> 2026 bytes
 .../formatting-1-500-100-1.0-agg-reference.png     |   Bin 2239 -> 3744 bytes
 .../formatting-1-500-100-1.0-cairo-reference.png   |   Bin 1881 -> 2062 bytes
 .../formatting-1-500-100-2.0-agg-reference.png     |   Bin 235 -> 3933 bytes
 .../formatting-1-500-100-2.0-cairo-reference.png   |   Bin 279 -> 2947 bytes
 .../formatting-2-500-100-1.0-agg-reference.png     |   Bin 2239 -> 3744 bytes
 .../formatting-2-500-100-1.0-cairo-reference.png   |   Bin 1881 -> 2062 bytes
 .../formatting-2-500-100-2.0-agg-reference.png     |   Bin 235 -> 3933 bytes
 .../formatting-2-500-100-2.0-cairo-reference.png   |   Bin 279 -> 2947 bytes
 .../formatting-3-500-100-1.0-agg-reference.png     |   Bin 1567 -> 2489 bytes
 .../formatting-3-500-100-1.0-cairo-reference.png   |   Bin 1336 -> 1425 bytes
 .../formatting-3-500-100-2.0-agg-reference.png     |   Bin 2556 -> 2906 bytes
 .../formatting-3-500-100-2.0-cairo-reference.png   |   Bin 2268 -> 2196 bytes
 .../formatting-5-500-100-1.0-agg-reference.png     |   Bin 0 -> 3744 bytes
 .../formatting-5-500-100-1.0-cairo-reference.png   |   Bin 0 -> 2062 bytes
 .../formatting-5-500-100-2.0-agg-reference.png     |   Bin 0 -> 3933 bytes
 .../formatting-5-500-100-2.0-cairo-reference.png   |   Bin 0 -> 2947 bytes
 .../formatting-6-500-100-1.0-agg-reference.png     |   Bin 0 -> 3744 bytes
 .../formatting-6-500-100-1.0-cairo-reference.png   |   Bin 0 -> 2062 bytes
 .../formatting-6-500-100-2.0-agg-reference.png     |   Bin 0 -> 3933 bytes
 .../formatting-6-500-100-2.0-cairo-reference.png   |   Bin 0 -> 2947 bytes
 .../formatting-7-500-100-1.0-agg-reference.png     |   Bin 0 -> 3744 bytes
 .../formatting-7-500-100-1.0-cairo-reference.png   |   Bin 0 -> 2062 bytes
 .../formatting-7-500-100-2.0-agg-reference.png     |   Bin 0 -> 3933 bytes
 .../formatting-7-500-100-2.0-cairo-reference.png   |   Bin 0 -> 2947 bytes
 .../formatting-8-500-100-1.0-agg-reference.png     |   Bin 0 -> 3744 bytes
 .../formatting-8-500-100-1.0-cairo-reference.png   |   Bin 0 -> 2062 bytes
 .../formatting-8-500-100-2.0-agg-reference.png     |   Bin 0 -> 3933 bytes
 .../formatting-8-500-100-2.0-cairo-reference.png   |   Bin 0 -> 2947 bytes
 ...ng-expr-alignment-500-500-1.0-agg-reference.png |   Bin 0 -> 3066 bytes
 ...-expr-alignment-500-500-1.0-cairo-reference.png |   Bin 0 -> 1936 bytes
 ...ng-expr-alignment-500-500-2.0-agg-reference.png |   Bin 0 -> 4630 bytes
 ...-expr-alignment-500-500-2.0-cairo-reference.png |   Bin 0 -> 2941 bytes
 ...ional-expressions-256-256-1.0-agg-reference.png |   Bin 0 -> 4615 bytes
 ...nal-expressions-256-256-1.0-cairo-reference.png |   Bin 0 -> 4826 bytes
 ...ional-expressions-256-256-2.0-agg-reference.png |   Bin 0 -> 6843 bytes
 ...nal-expressions-256-256-2.0-cairo-reference.png |   Bin 0 -> 6877 bytes
 ...xpressions-length-512-512-1.0-agg-reference.png |   Bin 0 -> 8357 bytes
 ...ressions-length-512-512-1.0-cairo-reference.png |   Bin 0 -> 8360 bytes
 ...xpressions-length-512-512-2.0-agg-reference.png |   Bin 0 -> 10628 bytes
 ...ressions-length-512-512-2.0-cairo-reference.png |   Bin 0 -> 10308 bytes
 ...dal-filter-factor-600-400-1.0-agg-reference.png |   Bin 0 -> 89364 bytes
 ...l-filter-factor-600-400-1.0-cairo-reference.png |   Bin 0 -> 89364 bytes
 ...dal-filter-factor-600-400-2.0-agg-reference.png |   Bin 0 -> 89364 bytes
 ...l-filter-factor-600-400-2.0-cairo-reference.png |   Bin 0 -> 89364 bytes
 ...y-transform-scale-500-500-1.0-agg-reference.png |   Bin 0 -> 10895 bytes
 ...transform-scale-500-500-1.0-cairo-reference.png |   Bin 0 -> 9505 bytes
 ...y-transform-scale-500-500-2.0-agg-reference.png |   Bin 0 -> 12220 bytes
 ...transform-scale-500-500-2.0-cairo-reference.png |   Bin 0 -> 11580 bytes
 ...rm-scale-patterns-500-500-1.0-agg-reference.png |   Bin 0 -> 41395 bytes
 ...-scale-patterns-500-500-1.0-cairo-reference.png |   Bin 0 -> 42524 bytes
 ...rm-scale-patterns-500-500-2.0-agg-reference.png |   Bin 0 -> 49411 bytes
 ...-scale-patterns-500-500-2.0-cairo-reference.png |   Bin 0 -> 50471 bytes
 ...ansform-translate-200-200-1.0-agg-reference.png |   Bin 0 -> 987 bytes
 ...sform-translate-200-200-1.0-cairo-reference.png |   Bin 0 -> 924 bytes
 ...ansform-translate-200-200-2.0-agg-reference.png |   Bin 0 -> 1108 bytes
 ...sform-translate-200-200-2.0-cairo-reference.png |   Bin 0 -> 1183 bytes
 ...ranslate-patterns-200-200-1.0-agg-reference.png |   Bin 0 -> 8582 bytes
 ...nslate-patterns-200-200-1.0-cairo-reference.png |   Bin 0 -> 8689 bytes
 ...ranslate-patterns-200-200-2.0-agg-reference.png |   Bin 0 -> 8779 bytes
 ...nslate-patterns-200-200-2.0-cairo-reference.png |   Bin 0 -> 8862 bytes
 ...late-patterns-svg-200-200-1.0-agg-reference.png |   Bin 0 -> 7986 bytes
 ...te-patterns-svg-200-200-1.0-cairo-reference.png |   Bin 0 -> 7938 bytes
 ...late-patterns-svg-200-200-2.0-agg-reference.png |   Bin 0 -> 10689 bytes
 ...te-patterns-svg-200-200-2.0-cairo-reference.png |   Bin 0 -> 10955 bytes
 ...roup-symbolizer-1-512-512-1.0-agg-reference.png |   Bin 0 -> 2091 bytes
 ...up-symbolizer-1-512-512-1.0-cairo-reference.png |   Bin 0 -> 2094 bytes
 ...roup-symbolizer-1-512-512-2.0-agg-reference.png |   Bin 0 -> 2908 bytes
 ...up-symbolizer-1-512-512-2.0-cairo-reference.png |   Bin 0 -> 3018 bytes
 ...roup-symbolizer-2-512-512-1.0-agg-reference.png |   Bin 0 -> 3824 bytes
 ...up-symbolizer-2-512-512-1.0-cairo-reference.png |   Bin 0 -> 3049 bytes
 ...roup-symbolizer-2-512-512-2.0-agg-reference.png |   Bin 0 -> 6110 bytes
 ...up-symbolizer-2-512-512-2.0-cairo-reference.png |   Bin 0 -> 4919 bytes
 ...roup-symbolizer-3-512-256-1.0-agg-reference.png |   Bin 0 -> 1519 bytes
 ...up-symbolizer-3-512-256-1.0-cairo-reference.png |   Bin 0 -> 1525 bytes
 ...roup-symbolizer-3-512-256-2.0-agg-reference.png |   Bin 0 -> 2241 bytes
 ...up-symbolizer-3-512-256-2.0-cairo-reference.png |   Bin 0 -> 2448 bytes
 ...symbolizer-line-1-512-512-1.0-agg-reference.png |   Bin 0 -> 13261 bytes
 ...mbolizer-line-1-512-512-1.0-cairo-reference.png |   Bin 0 -> 7842 bytes
 ...symbolizer-line-1-512-512-2.0-agg-reference.png |   Bin 0 -> 14390 bytes
 ...mbolizer-line-1-512-512-2.0-cairo-reference.png |   Bin 0 -> 8870 bytes
 ...symbolizer-line-2-512-512-1.0-agg-reference.png |   Bin 0 -> 3540 bytes
 ...mbolizer-line-2-512-512-1.0-cairo-reference.png |   Bin 0 -> 2861 bytes
 ...symbolizer-line-2-512-512-2.0-agg-reference.png |   Bin 0 -> 5071 bytes
 ...mbolizer-line-2-512-512-2.0-cairo-reference.png |   Bin 0 -> 4283 bytes
 ...p-op-on-satellite-450-450-1.0-agg-reference.png |   Bin 0 -> 103650 bytes
 ...op-on-satellite-450-450-1.0-cairo-reference.png |   Bin 0 -> 104050 bytes
 ...p-op-on-satellite-450-450-2.0-agg-reference.png |   Bin 0 -> 98030 bytes
 ...op-on-satellite-450-450-2.0-cairo-reference.png |   Bin 0 -> 103527 bytes
 .../images/harfbuzz-800-200-1.0-agg-reference.png  |   Bin 0 -> 4534 bytes
 .../harfbuzz-800-200-1.0-cairo-reference.png       |   Bin 0 -> 4260 bytes
 .../images/harfbuzz-800-200-2.0-agg-reference.png  |   Bin 0 -> 6437 bytes
 .../harfbuzz-800-200-2.0-cairo-reference.png       |   Bin 0 -> 6115 bytes
 .../hb-fontsets-800-200-1.0-agg-reference.png      |   Bin 0 -> 5372 bytes
 .../hb-fontsets-800-200-1.0-cairo-reference.png    |   Bin 0 -> 4162 bytes
 .../hb-fontsets-800-200-2.0-agg-reference.png      |   Bin 0 -> 6726 bytes
 .../hb-fontsets-800-200-2.0-cairo-reference.png    |   Bin 0 -> 5482 bytes
 ...ge-filters-galore-512-512-1.0-agg-reference.png |   Bin 0 -> 19030 bytes
 ...-filters-galore-512-512-1.0-cairo-reference.png |   Bin 0 -> 11212 bytes
 ...ge-filters-galore-512-512-2.0-agg-reference.png |   Bin 0 -> 19030 bytes
 ...-filters-galore-512-512-2.0-cairo-reference.png |   Bin 0 -> 11212 bytes
 ...ilters-multi-blur-512-512-1.0-agg-reference.png |   Bin 0 -> 47131 bytes
 ...ters-multi-blur-512-512-1.0-cairo-reference.png |   Bin 0 -> 21440 bytes
 ...ilters-multi-blur-512-512-2.0-agg-reference.png |   Bin 0 -> 48950 bytes
 ...ters-multi-blur-512-512-2.0-cairo-reference.png |   Bin 0 -> 20115 bytes
 ...ulti-blur-inflate-512-512-1.0-agg-reference.png |   Bin 0 -> 49664 bytes
 ...ti-blur-inflate-512-512-1.0-cairo-reference.png |   Bin 0 -> 21440 bytes
 ...ulti-blur-inflate-512-512-2.0-agg-reference.png |   Bin 0 -> 52677 bytes
 ...ti-blur-inflate-512-512-2.0-cairo-reference.png |   Bin 0 -> 20115 bytes
 .../jalign-auto-200-200-1.0-agg-reference.png      |   Bin 1047 -> 3001 bytes
 .../jalign-auto-200-200-1.0-cairo-reference.png    |   Bin 922 -> 991 bytes
 .../jalign-auto-200-200-2.0-agg-reference.png      |   Bin 1178 -> 4200 bytes
 .../jalign-auto-200-200-2.0-cairo-reference.png    |   Bin 1206 -> 1507 bytes
 .../images/khmer-800-200-1.0-agg-reference.png     |   Bin 0 -> 4945 bytes
 .../images/khmer-800-200-1.0-cairo-reference.png   |   Bin 0 -> 3564 bytes
 .../images/khmer-800-200-2.0-agg-reference.png     |   Bin 0 -> 8531 bytes
 .../images/khmer-800-200-2.0-cairo-reference.png   |   Bin 0 -> 6018 bytes
 .../line-offset-900-250-1.0-agg-reference.png      |   Bin 15560 -> 15386 bytes
 .../line-offset-900-250-1.0-cairo-reference.png    |   Bin 14490 -> 14303 bytes
 .../line-offset-900-250-2.0-agg-reference.png      |   Bin 15173 -> 14361 bytes
 .../line-offset-900-250-2.0-cairo-reference.png    |   Bin 14477 -> 12328 bytes
 ...city-multi-render-512-512-1.0-agg-reference.png |   Bin 0 -> 583 bytes
 ...ty-multi-render-512-512-1.0-cairo-reference.png |   Bin 0 -> 582 bytes
 ...city-multi-render-512-512-2.0-agg-reference.png |   Bin 0 -> 622 bytes
 ...ty-multi-render-512-512-2.0-cairo-reference.png |   Bin 0 -> 625 bytes
 ...smooth-and-offset-500-100-1.0-agg-reference.png |   Bin 0 -> 8515 bytes
 ...ooth-and-offset-500-100-1.0-cairo-reference.png |   Bin 0 -> 8594 bytes
 ...smooth-and-offset-500-100-2.0-agg-reference.png |   Bin 0 -> 8201 bytes
 ...ooth-and-offset-500-100-2.0-cairo-reference.png |   Bin 0 -> 9097 bytes
 ...smooth-and-offset-512-512-1.0-agg-reference.png |   Bin 0 -> 32496 bytes
 ...ooth-and-offset-512-512-1.0-cairo-reference.png |   Bin 0 -> 32255 bytes
 ...smooth-and-offset-512-512-2.0-agg-reference.png |   Bin 0 -> 38618 bytes
 ...ooth-and-offset-512-512-2.0-cairo-reference.png |   Bin 0 -> 38676 bytes
 ...attern-symbolizer-900-250-1.0-agg-reference.png |   Bin 0 -> 15750 bytes
 ...tern-symbolizer-900-250-1.0-cairo-reference.png |   Bin 0 -> 17508 bytes
 ...attern-symbolizer-900-250-2.0-agg-reference.png |   Bin 0 -> 17322 bytes
 ...tern-symbolizer-900-250-2.0-cairo-reference.png |   Bin 0 -> 19425 bytes
 ...ymbolizer-opacity-512-512-1.0-agg-reference.png |   Bin 0 -> 10664 bytes
 ...bolizer-opacity-512-512-1.0-cairo-reference.png |   Bin 0 -> 15983 bytes
 ...ymbolizer-opacity-512-512-2.0-agg-reference.png |   Bin 0 -> 10664 bytes
 ...bolizer-opacity-512-512-2.0-cairo-reference.png |   Bin 0 -> 15983 bytes
 ...smooth-and-offset-512-512-1.0-agg-reference.png |   Bin 0 -> 24514 bytes
 ...ooth-and-offset-512-512-1.0-cairo-reference.png |   Bin 0 -> 24694 bytes
 ...smooth-and-offset-512-512-2.0-agg-reference.png |   Bin 0 -> 24925 bytes
 ...ooth-and-offset-512-512-2.0-cairo-reference.png |   Bin 0 -> 25011 bytes
 ...lizer-expressions-256-256-1.0-agg-reference.png |   Bin 0 -> 1920 bytes
 ...zer-expressions-256-256-1.0-cairo-reference.png |   Bin 0 -> 1660 bytes
 ...lizer-expressions-256-256-2.0-agg-reference.png |   Bin 0 -> 3434 bytes
 ...zer-expressions-256-256-2.0-cairo-reference.png |   Bin 0 -> 2811 bytes
 ...r-expressions-all-256-256-1.0-agg-reference.png |   Bin 0 -> 3389 bytes
 ...expressions-all-256-256-1.0-cairo-reference.png |   Bin 0 -> 2430 bytes
 ...r-expressions-all-256-256-2.0-agg-reference.png |   Bin 0 -> 6271 bytes
 ...expressions-all-256-256-2.0-cairo-reference.png |   Bin 0 -> 3927 bytes
 .../line_break-800-800-1.0-agg-reference.png       |   Bin 0 -> 42059 bytes
 .../line_break-800-800-1.0-cairo-reference.png     |   Bin 0 -> 20355 bytes
 .../line_break-800-800-2.0-agg-reference.png       |   Bin 0 -> 65511 bytes
 .../line_break-800-800-2.0-cairo-reference.png     |   Bin 0 -> 38557 bytes
 .../images/lines-1-200-200-1.0-agg-reference.png   |   Bin 1990 -> 2063 bytes
 .../images/lines-1-200-200-1.0-cairo-reference.png |   Bin 1978 -> 1987 bytes
 .../images/lines-1-200-200-2.0-agg-reference.png   |   Bin 1154 -> 1154 bytes
 .../images/lines-1-400-400-1.0-agg-reference.png   |   Bin 6426 -> 6782 bytes
 .../images/lines-1-400-400-1.0-cairo-reference.png |   Bin 5154 -> 5520 bytes
 .../images/lines-1-400-400-2.0-agg-reference.png   |   Bin 4411 -> 4508 bytes
 .../images/lines-1-400-400-2.0-cairo-reference.png |   Bin 4306 -> 4311 bytes
 .../images/lines-1-600-600-1.0-agg-reference.png   |   Bin 13009 -> 15408 bytes
 .../images/lines-1-600-600-1.0-cairo-reference.png |   Bin 10233 -> 11015 bytes
 .../images/lines-1-600-600-2.0-agg-reference.png   |   Bin 7887 -> 8660 bytes
 .../images/lines-1-600-600-2.0-cairo-reference.png |   Bin 7691 -> 7800 bytes
 .../images/lines-1-800-800-1.0-agg-reference.png   |   Bin 14847 -> 17847 bytes
 .../images/lines-1-800-800-1.0-cairo-reference.png |   Bin 14402 -> 13367 bytes
 .../images/lines-1-800-800-2.0-agg-reference.png   |   Bin 14221 -> 14807 bytes
 .../images/lines-1-800-800-2.0-cairo-reference.png |   Bin 13187 -> 12340 bytes
 .../images/lines-2-200-200-1.0-agg-reference.png   |   Bin 2272 -> 2397 bytes
 .../images/lines-2-200-200-1.0-cairo-reference.png |   Bin 2301 -> 2303 bytes
 .../images/lines-2-200-200-2.0-agg-reference.png   |   Bin 1154 -> 1154 bytes
 .../images/lines-2-400-400-1.0-agg-reference.png   |   Bin 5318 -> 5709 bytes
 .../images/lines-2-400-400-1.0-cairo-reference.png |   Bin 4829 -> 5363 bytes
 .../images/lines-2-400-400-2.0-agg-reference.png   |   Bin 5205 -> 5319 bytes
 .../images/lines-2-400-400-2.0-cairo-reference.png |   Bin 5038 -> 5063 bytes
 .../images/lines-2-600-600-1.0-agg-reference.png   |   Bin 9466 -> 10096 bytes
 .../images/lines-2-600-600-1.0-cairo-reference.png |   Bin 8776 -> 8558 bytes
 .../images/lines-2-600-600-2.0-agg-reference.png   |   Bin 6694 -> 6954 bytes
 .../images/lines-2-600-600-2.0-cairo-reference.png |   Bin 6596 -> 6650 bytes
 .../images/lines-2-800-800-1.0-agg-reference.png   |   Bin 18177 -> 12185 bytes
 .../images/lines-2-800-800-1.0-cairo-reference.png |   Bin 18157 -> 10736 bytes
 .../images/lines-2-800-800-2.0-agg-reference.png   |   Bin 11109 -> 13369 bytes
 .../images/lines-2-800-800-2.0-cairo-reference.png |   Bin 10793 -> 10935 bytes
 .../images/lines-3-200-200-1.0-agg-reference.png   |   Bin 1990 -> 2063 bytes
 .../images/lines-3-200-200-1.0-cairo-reference.png |   Bin 1978 -> 1987 bytes
 .../images/lines-3-200-200-2.0-agg-reference.png   |   Bin 1154 -> 1154 bytes
 .../images/lines-3-400-400-1.0-agg-reference.png   |   Bin 6541 -> 6849 bytes
 .../images/lines-3-400-400-1.0-cairo-reference.png |   Bin 5233 -> 5192 bytes
 .../images/lines-3-400-400-2.0-agg-reference.png   |   Bin 4411 -> 4508 bytes
 .../images/lines-3-400-400-2.0-cairo-reference.png |   Bin 4306 -> 4311 bytes
 .../images/lines-3-600-600-1.0-agg-reference.png   |   Bin 13278 -> 15587 bytes
 .../images/lines-3-600-600-1.0-cairo-reference.png |   Bin 10379 -> 11213 bytes
 .../images/lines-3-600-600-2.0-agg-reference.png   |   Bin 8011 -> 9382 bytes
 .../images/lines-3-600-600-2.0-cairo-reference.png |   Bin 7806 -> 7915 bytes
 .../images/lines-3-800-800-1.0-agg-reference.png   |   Bin 15863 -> 18578 bytes
 .../images/lines-3-800-800-1.0-cairo-reference.png |   Bin 15426 -> 14339 bytes
 .../images/lines-3-800-800-2.0-agg-reference.png   |   Bin 14571 -> 15042 bytes
 .../images/lines-3-800-800-2.0-cairo-reference.png |   Bin 13350 -> 12488 bytes
 .../images/lines-4-200-200-1.0-agg-reference.png   |   Bin 0 -> 10290 bytes
 .../images/lines-4-200-200-1.0-cairo-reference.png |   Bin 0 -> 10057 bytes
 .../images/lines-4-200-200-2.0-agg-reference.png   |   Bin 0 -> 3835 bytes
 .../images/lines-4-200-200-2.0-cairo-reference.png |   Bin 0 -> 3758 bytes
 .../images/lines-4-400-400-1.0-agg-reference.png   |   Bin 0 -> 24897 bytes
 .../images/lines-4-400-400-1.0-cairo-reference.png |   Bin 0 -> 24410 bytes
 .../images/lines-4-400-400-2.0-agg-reference.png   |   Bin 0 -> 22505 bytes
 .../images/lines-4-400-400-2.0-cairo-reference.png |   Bin 0 -> 22551 bytes
 .../images/lines-4-600-600-1.0-agg-reference.png   |   Bin 0 -> 40820 bytes
 .../images/lines-4-600-600-1.0-cairo-reference.png |   Bin 0 -> 39231 bytes
 .../images/lines-4-600-600-2.0-agg-reference.png   |   Bin 0 -> 37584 bytes
 .../images/lines-4-600-600-2.0-cairo-reference.png |   Bin 0 -> 37159 bytes
 .../images/lines-4-800-800-1.0-agg-reference.png   |   Bin 0 -> 55048 bytes
 .../images/lines-4-800-800-1.0-cairo-reference.png |   Bin 0 -> 53417 bytes
 .../images/lines-4-800-800-2.0-agg-reference.png   |   Bin 0 -> 58655 bytes
 .../images/lines-4-800-800-2.0-cairo-reference.png |   Bin 0 -> 57792 bytes
 .../images/lines-5-200-200-1.0-agg-reference.png   |   Bin 0 -> 12135 bytes
 .../images/lines-5-200-200-1.0-cairo-reference.png |   Bin 0 -> 11983 bytes
 .../images/lines-5-200-200-2.0-agg-reference.png   |   Bin 0 -> 10025 bytes
 .../images/lines-5-200-200-2.0-cairo-reference.png |   Bin 0 -> 9815 bytes
 .../images/lines-5-400-400-1.0-agg-reference.png   |   Bin 0 -> 27390 bytes
 .../images/lines-5-400-400-1.0-cairo-reference.png |   Bin 0 -> 26508 bytes
 .../images/lines-5-400-400-2.0-agg-reference.png   |   Bin 0 -> 29365 bytes
 .../images/lines-5-400-400-2.0-cairo-reference.png |   Bin 0 -> 28941 bytes
 .../images/lines-5-600-600-1.0-agg-reference.png   |   Bin 0 -> 48867 bytes
 .../images/lines-5-600-600-1.0-cairo-reference.png |   Bin 0 -> 45429 bytes
 .../images/lines-5-600-600-2.0-agg-reference.png   |   Bin 0 -> 49078 bytes
 .../images/lines-5-600-600-2.0-cairo-reference.png |   Bin 0 -> 47666 bytes
 .../images/lines-5-800-800-1.0-agg-reference.png   |   Bin 0 -> 68708 bytes
 .../images/lines-5-800-800-1.0-cairo-reference.png |   Bin 0 -> 62464 bytes
 .../images/lines-5-800-800-2.0-agg-reference.png   |   Bin 0 -> 66016 bytes
 .../images/lines-5-800-800-2.0-cairo-reference.png |   Bin 0 -> 64942 bytes
 .../images/lines-6-200-200-1.0-agg-reference.png   |   Bin 0 -> 11190 bytes
 .../images/lines-6-200-200-1.0-cairo-reference.png |   Bin 0 -> 10607 bytes
 .../images/lines-6-200-200-2.0-agg-reference.png   |   Bin 0 -> 7893 bytes
 .../images/lines-6-200-200-2.0-cairo-reference.png |   Bin 0 -> 7644 bytes
 .../images/lines-6-400-400-1.0-agg-reference.png   |   Bin 0 -> 25823 bytes
 .../images/lines-6-400-400-1.0-cairo-reference.png |   Bin 0 -> 24879 bytes
 .../images/lines-6-400-400-2.0-agg-reference.png   |   Bin 0 -> 27193 bytes
 .../images/lines-6-400-400-2.0-cairo-reference.png |   Bin 0 -> 26284 bytes
 .../images/lines-6-600-600-1.0-agg-reference.png   |   Bin 0 -> 41760 bytes
 .../images/lines-6-600-600-1.0-cairo-reference.png |   Bin 0 -> 41070 bytes
 .../images/lines-6-600-600-2.0-agg-reference.png   |   Bin 0 -> 43330 bytes
 .../images/lines-6-600-600-2.0-cairo-reference.png |   Bin 0 -> 42581 bytes
 .../images/lines-6-800-800-1.0-agg-reference.png   |   Bin 0 -> 55161 bytes
 .../images/lines-6-800-800-1.0-cairo-reference.png |   Bin 0 -> 52936 bytes
 .../images/lines-6-800-800-2.0-agg-reference.png   |   Bin 0 -> 64210 bytes
 .../images/lines-6-800-800-2.0-cairo-reference.png |   Bin 0 -> 63621 bytes
 .../images/lines-7-200-200-1.0-agg-reference.png   |   Bin 0 -> 9568 bytes
 .../images/lines-7-200-200-1.0-cairo-reference.png |   Bin 0 -> 9191 bytes
 .../images/lines-7-200-200-2.0-agg-reference.png   |   Bin 0 -> 8216 bytes
 .../images/lines-7-200-200-2.0-cairo-reference.png |   Bin 0 -> 7875 bytes
 .../images/lines-7-400-400-1.0-agg-reference.png   |   Bin 0 -> 20621 bytes
 .../images/lines-7-400-400-1.0-cairo-reference.png |   Bin 0 -> 19754 bytes
 .../images/lines-7-400-400-2.0-agg-reference.png   |   Bin 0 -> 22163 bytes
 .../images/lines-7-400-400-2.0-cairo-reference.png |   Bin 0 -> 21204 bytes
 .../images/lines-7-600-600-1.0-agg-reference.png   |   Bin 0 -> 31466 bytes
 .../images/lines-7-600-600-1.0-cairo-reference.png |   Bin 0 -> 29609 bytes
 .../images/lines-7-600-600-2.0-agg-reference.png   |   Bin 0 -> 36361 bytes
 .../images/lines-7-600-600-2.0-cairo-reference.png |   Bin 0 -> 34560 bytes
 .../images/lines-7-800-800-1.0-agg-reference.png   |   Bin 0 -> 43230 bytes
 .../images/lines-7-800-800-1.0-cairo-reference.png |   Bin 0 -> 40803 bytes
 .../images/lines-7-800-800-2.0-agg-reference.png   |   Bin 0 -> 49379 bytes
 .../images/lines-7-800-800-2.0-cairo-reference.png |   Bin 0 -> 47160 bytes
 ...es-multi-layout-1-800-800-1.0-agg-reference.png |   Bin 0 -> 72792 bytes
 ...-multi-layout-1-800-800-1.0-cairo-reference.png |   Bin 0 -> 65751 bytes
 ...es-multi-layout-1-800-800-2.0-agg-reference.png |   Bin 0 -> 70919 bytes
 ...-multi-layout-1-800-800-2.0-cairo-reference.png |   Bin 0 -> 67367 bytes
 ...es-multi-layout-2-800-800-1.0-agg-reference.png |   Bin 0 -> 25524 bytes
 ...-multi-layout-2-800-800-1.0-cairo-reference.png |   Bin 0 -> 24435 bytes
 ...es-multi-layout-2-800-800-2.0-agg-reference.png |   Bin 0 -> 27449 bytes
 ...-multi-layout-2-800-800-2.0-cairo-reference.png |   Bin 0 -> 27424 bytes
 ...lti-layout-shield-800-800-1.0-agg-reference.png |   Bin 0 -> 12992 bytes
 ...i-layout-shield-800-800-1.0-cairo-reference.png |   Bin 0 -> 10814 bytes
 ...lti-layout-shield-800-800-2.0-agg-reference.png |   Bin 0 -> 13211 bytes
 ...i-layout-shield-800-800-2.0-cairo-reference.png |   Bin 0 -> 11696 bytes
 .../lines-shield-200-200-1.0-agg-reference.png     |   Bin 2155 -> 1973 bytes
 .../lines-shield-200-200-1.0-cairo-reference.png   |   Bin 1976 -> 1970 bytes
 .../lines-shield-200-200-2.0-agg-reference.png     |   Bin 2912 -> 2608 bytes
 .../lines-shield-200-200-2.0-cairo-reference.png   |   Bin 2619 -> 2661 bytes
 .../lines-shield-400-400-1.0-agg-reference.png     |   Bin 4741 -> 4606 bytes
 .../lines-shield-400-400-1.0-cairo-reference.png   |   Bin 4387 -> 4416 bytes
 .../lines-shield-400-400-2.0-agg-reference.png     |   Bin 5332 -> 4493 bytes
 .../lines-shield-400-400-2.0-cairo-reference.png   |   Bin 4915 -> 4299 bytes
 .../lines-shield-600-600-1.0-agg-reference.png     |   Bin 7008 -> 6509 bytes
 .../lines-shield-600-600-1.0-cairo-reference.png   |   Bin 6314 -> 6405 bytes
 .../lines-shield-600-600-2.0-agg-reference.png     |   Bin 7741 -> 7282 bytes
 .../lines-shield-600-600-2.0-cairo-reference.png   |   Bin 7026 -> 6818 bytes
 .../lines-shield-800-800-1.0-agg-reference.png     |   Bin 9088 -> 8764 bytes
 .../lines-shield-800-800-1.0-cairo-reference.png   |   Bin 8349 -> 8271 bytes
 .../lines-shield-800-800-2.0-agg-reference.png     |   Bin 10130 -> 10304 bytes
 .../lines-shield-800-800-2.0-cairo-reference.png   |   Bin 9346 -> 9338 bytes
 .../images/list-100-100-1.0-agg-reference.png      |   Bin 779 -> 1202 bytes
 .../images/list-100-100-1.0-cairo-reference.png    |   Bin 780 -> 1166 bytes
 .../images/list-100-100-2.0-agg-reference.png      |   Bin 1126 -> 1689 bytes
 .../images/list-100-100-2.0-cairo-reference.png    |   Bin 1192 -> 1667 bytes
 .../images/list-150-100-1.0-agg-reference.png      |   Bin 1462 -> 1680 bytes
 .../images/list-150-100-1.0-cairo-reference.png    |   Bin 1470 -> 1578 bytes
 .../images/list-150-100-2.0-agg-reference.png      |   Bin 1621 -> 2115 bytes
 .../images/list-150-100-2.0-cairo-reference.png    |   Bin 1631 -> 2107 bytes
 .../images/list-250-100-1.0-agg-reference.png      |   Bin 1985 -> 2601 bytes
 .../images/list-250-100-1.0-cairo-reference.png    |   Bin 1754 -> 1968 bytes
 .../images/list-250-100-2.0-agg-reference.png      |   Bin 2426 -> 2819 bytes
 .../images/list-250-100-2.0-cairo-reference.png    |   Bin 2448 -> 2770 bytes
 .../images/list-300-100-1.0-agg-reference.png      |   Bin 2133 -> 2851 bytes
 .../images/list-300-100-1.0-cairo-reference.png    |   Bin 1952 -> 2026 bytes
 .../images/list-300-100-2.0-agg-reference.png      |   Bin 3029 -> 3536 bytes
 .../images/list-300-100-2.0-cairo-reference.png    |   Bin 3113 -> 3387 bytes
 .../images/list-400-100-1.0-agg-reference.png      |   Bin 2458 -> 3617 bytes
 .../images/list-400-100-1.0-cairo-reference.png    |   Bin 2153 -> 2103 bytes
 .../images/list-400-100-2.0-agg-reference.png      |   Bin 3948 -> 4786 bytes
 .../images/list-400-100-2.0-cairo-reference.png    |   Bin 3712 -> 3654 bytes
 .../images/list-600-100-1.0-agg-reference.png      |   Bin 2405 -> 3853 bytes
 .../images/list-600-100-1.0-cairo-reference.png    |   Bin 2071 -> 2188 bytes
 .../images/list-600-100-2.0-agg-reference.png      |   Bin 4248 -> 5989 bytes
 .../images/list-600-100-2.0-cairo-reference.png    |   Bin 3676 -> 4401 bytes
 .../images/list-800-100-1.0-agg-reference.png      |   Bin 2281 -> 4418 bytes
 .../images/list-800-100-1.0-cairo-reference.png    |   Bin 2069 -> 2360 bytes
 .../images/list-800-100-2.0-agg-reference.png      |   Bin 5016 -> 7382 bytes
 .../images/list-800-100-2.0-cairo-reference.png    |   Bin 4478 -> 4320 bytes
 ...image-compositing-512-512-1.0-agg-reference.png |   Bin 0 -> 81860 bytes
 ...age-compositing-512-512-1.0-cairo-reference.png |   Bin 0 -> 87213 bytes
 ...image-compositing-512-512-2.0-agg-reference.png |   Bin 0 -> 104855 bytes
 ...age-compositing-512-512-2.0-cairo-reference.png |   Bin 0 -> 112624 bytes
 .../marker-collide-512-512-1.0-agg-reference.png   |   Bin 0 -> 30559 bytes
 .../marker-collide-512-512-1.0-cairo-reference.png |   Bin 0 -> 27120 bytes
 .../marker-collide-512-512-2.0-agg-reference.png   |   Bin 0 -> 27946 bytes
 .../marker-collide-512-512-2.0-cairo-reference.png |   Bin 0 -> 26323 bytes
 ...interior-position-600-400-1.0-agg-reference.png |   Bin 0 -> 1211 bytes
 ...terior-position-600-400-1.0-cairo-reference.png |   Bin 0 -> 1196 bytes
 ...interior-position-600-400-2.0-agg-reference.png |   Bin 0 -> 1330 bytes
 ...terior-position-600-400-2.0-cairo-reference.png |   Bin 0 -> 1978 bytes
 ...rker-multi-policy-600-400-1.0-agg-reference.png |   Bin 5047 -> 5015 bytes
 ...er-multi-policy-600-400-1.0-cairo-reference.png |   Bin 5151 -> 5135 bytes
 ...rker-multi-policy-600-400-2.0-agg-reference.png |   Bin 6775 -> 6728 bytes
 ...er-multi-policy-600-400-2.0-cairo-reference.png |   Bin 7187 -> 7158 bytes
 ...arker-on-hex-grid-257-256-1.0-agg-reference.png |   Bin 5144 -> 5138 bytes
 ...ker-on-hex-grid-257-256-1.0-cairo-reference.png |   Bin 3664 -> 5366 bytes
 ...arker-on-hex-grid-257-256-2.0-agg-reference.png |   Bin 6515 -> 6487 bytes
 ...ker-on-hex-grid-257-256-2.0-cairo-reference.png |   Bin 5454 -> 6741 bytes
 ...arker-on-hex-grid-400-600-1.0-agg-reference.png |   Bin 22398 -> 23045 bytes
 ...ker-on-hex-grid-400-600-1.0-cairo-reference.png |   Bin 23241 -> 23572 bytes
 ...arker-on-hex-grid-400-600-2.0-agg-reference.png |   Bin 13119 -> 13111 bytes
 ...ker-on-hex-grid-400-600-2.0-cairo-reference.png |   Bin 11453 -> 12801 bytes
 ...arker-on-hex-grid-600-400-1.0-agg-reference.png |   Bin 18751 -> 18937 bytes
 ...ker-on-hex-grid-600-400-1.0-cairo-reference.png |   Bin 18468 -> 18215 bytes
 ...arker-on-hex-grid-600-400-2.0-agg-reference.png |   Bin 11946 -> 11944 bytes
 ...ker-on-hex-grid-600-400-2.0-cairo-reference.png |   Bin 9111 -> 10162 bytes
 .../marker-on-line-600-400-1.0-agg-reference.png   |   Bin 2493 -> 2501 bytes
 .../marker-on-line-600-400-1.0-cairo-reference.png |   Bin 2442 -> 2435 bytes
 .../marker-on-line-600-400-2.0-agg-reference.png   |   Bin 2982 -> 2966 bytes
 .../marker-on-line-600-400-2.0-cairo-reference.png |   Bin 2862 -> 2825 bytes
 ...e-and-avoid-edges-512-512-1.0-agg-reference.png |   Bin 0 -> 17764 bytes
 ...and-avoid-edges-512-512-1.0-cairo-reference.png |   Bin 0 -> 18272 bytes
 ...e-and-avoid-edges-512-512-2.0-agg-reference.png |   Bin 0 -> 15331 bytes
 ...and-avoid-edges-512-512-2.0-cairo-reference.png |   Bin 0 -> 15168 bytes
 ...nd-line-placement-600-400-1.0-agg-reference.png |   Bin 0 -> 11602 bytes
 ...-line-placement-600-400-1.0-cairo-reference.png |   Bin 0 -> 11499 bytes
 ...nd-line-placement-600-400-2.0-agg-reference.png |   Bin 0 -> 12570 bytes
 ...-line-placement-600-400-2.0-cairo-reference.png |   Bin 0 -> 12389 bytes
 ...x-first-placement-600-400-1.0-agg-reference.png |   Bin 0 -> 878 bytes
 ...first-placement-600-400-1.0-cairo-reference.png |   Bin 0 -> 1103 bytes
 ...x-first-placement-600-400-2.0-agg-reference.png |   Bin 0 -> 1381 bytes
 ...first-placement-600-400-2.0-cairo-reference.png |   Bin 0 -> 1449 bytes
 ...ex-last-placement-600-400-1.0-agg-reference.png |   Bin 0 -> 876 bytes
 ...-last-placement-600-400-1.0-cairo-reference.png |   Bin 0 -> 1097 bytes
 ...ex-last-placement-600-400-2.0-agg-reference.png |   Bin 0 -> 1360 bytes
 ...-last-placement-600-400-2.0-cairo-reference.png |   Bin 0 -> 1450 bytes
 ...-eq-width-overlap-600-400-1.0-agg-reference.png |   Bin 15271 -> 16330 bytes
 ...q-width-overlap-600-400-1.0-cairo-reference.png |   Bin 15287 -> 16268 bytes
 ...-eq-width-overlap-600-400-2.0-agg-reference.png |   Bin 18112 -> 20682 bytes
 ...q-width-overlap-600-400-2.0-cairo-reference.png |   Bin 18483 -> 20922 bytes
 ...r-path-expression-500-100-1.0-agg-reference.png |   Bin 0 -> 207 bytes
 ...path-expression-500-100-1.0-cairo-reference.png |   Bin 0 -> 203 bytes
 ...r-path-expression-500-100-2.0-agg-reference.png |   Bin 0 -> 221 bytes
 ...path-expression-500-100-2.0-cairo-reference.png |   Bin 0 -> 261 bytes
 ...-recenter-collide-256-128-1.0-agg-reference.png |   Bin 0 -> 310 bytes
 ...ecenter-collide-256-128-1.0-cairo-reference.png |   Bin 0 -> 319 bytes
 ...-recenter-collide-256-128-2.0-agg-reference.png |   Bin 0 -> 593 bytes
 ...ecenter-collide-256-128-2.0-cairo-reference.png |   Bin 0 -> 653 bytes
 ...g-empty-g-element-500-100-1.0-agg-reference.png |   Bin 0 -> 328 bytes
 ...empty-g-element-500-100-1.0-cairo-reference.png |   Bin 0 -> 342 bytes
 ...g-empty-g-element-500-100-2.0-agg-reference.png |   Bin 0 -> 500 bytes
 ...empty-g-element-500-100-2.0-cairo-reference.png |   Bin 0 -> 620 bytes
 ...ker-svg-opacity-500-100-1.0-cairo-reference.png |   Bin 228 -> 229 bytes
 ...ker-svg-opacity-500-100-2.0-cairo-reference.png |   Bin 315 -> 317 bytes
 ...rker-svg-opacity2-500-100-1.0-agg-reference.png |   Bin 0 -> 145 bytes
 ...er-svg-opacity2-500-100-1.0-cairo-reference.png |   Bin 0 -> 145 bytes
 ...rker-svg-opacity2-500-100-2.0-agg-reference.png |   Bin 0 -> 151 bytes
 ...er-svg-opacity2-500-100-2.0-cairo-reference.png |   Bin 0 -> 151 bytes
 ...r-expressions-all-256-256-1.0-agg-reference.png |   Bin 0 -> 2852 bytes
 ...expressions-all-256-256-1.0-cairo-reference.png |   Bin 0 -> 2746 bytes
 ...r-expressions-all-256-256-2.0-agg-reference.png |   Bin 0 -> 4190 bytes
 ...expressions-all-256-256-2.0-cairo-reference.png |   Bin 0 -> 3933 bytes
 .../marker-vs-point-512-512-1.0-agg-reference.png  |   Bin 0 -> 76063 bytes
 ...marker-vs-point-512-512-1.0-cairo-reference.png |   Bin 0 -> 81216 bytes
 .../marker-vs-point-512-512-2.0-agg-reference.png  |   Bin 0 -> 116097 bytes
 ...marker-vs-point-512-512-2.0-cairo-reference.png |   Bin 0 -> 124796 bytes
 ...ole-multi-polygon-512-512-1.0-agg-reference.png |   Bin 0 -> 30129 bytes
 ...e-multi-polygon-512-512-1.0-cairo-reference.png |   Bin 0 -> 30099 bytes
 ...ole-multi-polygon-512-512-2.0-agg-reference.png |   Bin 0 -> 25418 bytes
 ...e-multi-polygon-512-512-2.0-cairo-reference.png |   Bin 0 -> 25311 bytes
 ...-background-image-257-256-1.0-agg-reference.png |   Bin 13365 -> 13812 bytes
 ...ackground-image-257-256-1.0-cairo-reference.png |   Bin 13373 -> 13375 bytes
 ...-background-image-257-256-2.0-agg-reference.png |   Bin 9388 -> 9424 bytes
 ...ackground-image-257-256-2.0-cairo-reference.png |   Bin 8637 -> 8515 bytes
 ...-background-image-400-600-1.0-agg-reference.png |   Bin 15523 -> 15675 bytes
 ...ackground-image-400-600-1.0-cairo-reference.png |   Bin 15627 -> 15753 bytes
 ...-background-image-400-600-2.0-agg-reference.png |   Bin 24099 -> 23715 bytes
 ...ackground-image-400-600-2.0-cairo-reference.png |   Bin 23048 -> 23051 bytes
 ...-background-image-600-400-1.0-agg-reference.png |   Bin 22349 -> 22483 bytes
 ...ackground-image-600-400-1.0-cairo-reference.png |   Bin 21884 -> 21935 bytes
 ...-background-image-600-400-2.0-agg-reference.png |   Bin 33048 -> 32711 bytes
 ...ackground-image-600-400-2.0-cairo-reference.png |   Bin 31932 -> 32048 bytes
 ...nd-hsla-transform-257-256-1.0-agg-reference.png |   Bin 14095 -> 12868 bytes
 ...-hsla-transform-257-256-1.0-cairo-reference.png |   Bin 13246 -> 13375 bytes
 ...nd-hsla-transform-257-256-2.0-agg-reference.png |   Bin 9596 -> 8777 bytes
 ...-hsla-transform-257-256-2.0-cairo-reference.png |   Bin 8637 -> 8515 bytes
 ...nd-hsla-transform-400-600-1.0-agg-reference.png |   Bin 16429 -> 15610 bytes
 ...-hsla-transform-400-600-1.0-cairo-reference.png |   Bin 15496 -> 15753 bytes
 ...nd-hsla-transform-400-600-2.0-agg-reference.png |   Bin 24719 -> 22050 bytes
 ...-hsla-transform-400-600-2.0-cairo-reference.png |   Bin 23396 -> 23051 bytes
 ...nd-hsla-transform-600-400-1.0-agg-reference.png |   Bin 22999 -> 21003 bytes
 ...-hsla-transform-600-400-1.0-cairo-reference.png |   Bin 21317 -> 21935 bytes
 ...nd-hsla-transform-600-400-2.0-agg-reference.png |   Bin 35507 -> 30260 bytes
 ...-hsla-transform-600-400-2.0-cairo-reference.png |   Bin 32087 -> 32048 bytes
 ...ge-linear-comp-op-500-100-1.0-agg-reference.png |   Bin 0 -> 6419 bytes
 ...-linear-comp-op-500-100-1.0-cairo-reference.png |   Bin 0 -> 7564 bytes
 ...ge-linear-comp-op-500-100-2.0-agg-reference.png |   Bin 0 -> 4137 bytes
 ...-linear-comp-op-500-100-2.0-cairo-reference.png |   Bin 0 -> 5219 bytes
 ...acement_on_points-500-100-1.0-agg-reference.png |   Bin 990 -> 966 bytes
 ...acement_on_points-500-100-2.0-agg-reference.png |   Bin 1163 -> 1160 bytes
 .../orientation-800-200-1.0-agg-reference.png      |   Bin 0 -> 3623 bytes
 .../orientation-800-200-1.0-cairo-reference.png    |   Bin 0 -> 2865 bytes
 .../orientation-800-200-2.0-agg-reference.png      |   Bin 0 -> 4964 bytes
 .../orientation-800-200-2.0-cairo-reference.png    |   Bin 0 -> 3853 bytes
 ...lizer-expressions-256-256-1.0-agg-reference.png |   Bin 0 -> 809 bytes
 ...zer-expressions-256-256-1.0-cairo-reference.png |   Bin 0 -> 872 bytes
 ...lizer-expressions-256-256-2.0-agg-reference.png |   Bin 0 -> 1248 bytes
 ...zer-expressions-256-256-2.0-cairo-reference.png |   Bin 0 -> 1186 bytes
 ...r-expressions-all-256-256-1.0-agg-reference.png |   Bin 0 -> 3091 bytes
 ...expressions-all-256-256-1.0-cairo-reference.png |   Bin 0 -> 3058 bytes
 ...r-expressions-all-256-256-2.0-agg-reference.png |   Bin 0 -> 4569 bytes
 ...expressions-all-256-256-2.0-cairo-reference.png |   Bin 0 -> 4291 bytes
 ...ap-placement-expr-500-500-1.0-agg-reference.png |   Bin 0 -> 1146 bytes
 ...-placement-expr-500-500-1.0-cairo-reference.png |   Bin 0 -> 2465 bytes
 ...ap-placement-expr-500-500-2.0-agg-reference.png |   Bin 0 -> 1605 bytes
 ...-placement-expr-500-500-2.0-cairo-reference.png |   Bin 0 -> 3864 bytes
 ...lizer-expressions-256-256-1.0-agg-reference.png |   Bin 0 -> 2456 bytes
 ...zer-expressions-256-256-1.0-cairo-reference.png |   Bin 0 -> 2469 bytes
 ...lizer-expressions-256-256-2.0-agg-reference.png |   Bin 0 -> 3808 bytes
 ...zer-expressions-256-256-2.0-cairo-reference.png |   Bin 0 -> 3747 bytes
 ...r-expressions-all-256-256-1.0-agg-reference.png |   Bin 0 -> 3085 bytes
 ...expressions-all-256-256-1.0-cairo-reference.png |   Bin 0 -> 3113 bytes
 ...r-expressions-all-256-256-2.0-agg-reference.png |   Bin 0 -> 4979 bytes
 ...expressions-all-256-256-2.0-cairo-reference.png |   Bin 0 -> 4690 bytes
 ...gon-winding-order-300-300-1.0-agg-reference.png |   Bin 0 -> 1220 bytes
 ...n-winding-order-300-300-1.0-cairo-reference.png |   Bin 0 -> 1178 bytes
 ...gon-winding-order-300-300-2.0-agg-reference.png |   Bin 0 -> 1738 bytes
 ...n-winding-order-300-300-2.0-cairo-reference.png |   Bin 0 -> 1754 bytes
 .../postgis-inline-512-512-1.0-agg-reference.png   |   Bin 0 -> 3080 bytes
 .../postgis-inline-512-512-1.0-cairo-reference.png |   Bin 0 -> 3059 bytes
 .../postgis-inline-512-512-2.0-agg-reference.png   |   Bin 0 -> 3990 bytes
 .../postgis-inline-512-512-2.0-cairo-reference.png |   Bin 0 -> 3945 bytes
 .../images/python-Format-reference.png             |   Bin 0 -> 1580 bytes
 .../images/python-IfElse-reference.png             |   Bin 0 -> 1739 bytes
 .../visual_tests/images/python-List-reference.png  |   Bin 0 -> 2862 bytes
 .../images/python-MyText-reference.png             |   Bin 0 -> 2416 bytes
 .../images/python-TextNode-reference.png           |   Bin 0 -> 1587 bytes
 ...r-color-to-alpha1-512-512-1.0-agg-reference.png |   Bin 0 -> 73162 bytes
 ...color-to-alpha1-512-512-1.0-cairo-reference.png |   Bin 0 -> 70685 bytes
 ...r-color-to-alpha1-512-512-2.0-agg-reference.png |   Bin 0 -> 73162 bytes
 ...color-to-alpha1-512-512-2.0-cairo-reference.png |   Bin 0 -> 70685 bytes
 ...r-color-to-alpha2-512-512-1.0-agg-reference.png |   Bin 0 -> 6925 bytes
 ...color-to-alpha2-512-512-1.0-cairo-reference.png |   Bin 0 -> 10477 bytes
 ...r-color-to-alpha2-512-512-2.0-agg-reference.png |   Bin 0 -> 6925 bytes
 ...color-to-alpha2-512-512-2.0-cairo-reference.png |   Bin 0 -> 10477 bytes
 ...r-color-to-alpha3-512-512-1.0-agg-reference.png |   Bin 0 -> 6748 bytes
 ...color-to-alpha3-512-512-1.0-cairo-reference.png |   Bin 0 -> 12863 bytes
 ...r-color-to-alpha3-512-512-2.0-agg-reference.png |   Bin 0 -> 6748 bytes
 ...color-to-alpha3-512-512-2.0-cairo-reference.png |   Bin 0 -> 12863 bytes
 ...r-color-to-alpha4-512-512-1.0-agg-reference.png |   Bin 0 -> 6426 bytes
 ...color-to-alpha4-512-512-1.0-cairo-reference.png |   Bin 0 -> 7787 bytes
 ...r-color-to-alpha4-512-512-2.0-agg-reference.png |   Bin 0 -> 6426 bytes
 ...color-to-alpha4-512-512-2.0-cairo-reference.png |   Bin 0 -> 7787 bytes
 ...r-color-to-alpha5-512-512-1.0-agg-reference.png |   Bin 0 -> 7777 bytes
 ...color-to-alpha5-512-512-1.0-cairo-reference.png |   Bin 0 -> 7787 bytes
 ...r-color-to-alpha5-512-512-2.0-agg-reference.png |   Bin 0 -> 7777 bytes
 ...color-to-alpha5-512-512-2.0-cairo-reference.png |   Bin 0 -> 7787 bytes
 .../raster_colorizer-512-512-1.0-agg-reference.png |   Bin 0 -> 7787 bytes
 ...aster_colorizer-512-512-1.0-cairo-reference.png |   Bin 0 -> 7787 bytes
 .../raster_colorizer-512-512-2.0-agg-reference.png |   Bin 0 -> 7787 bytes
 ...aster_colorizer-512-512-2.0-cairo-reference.png |   Bin 0 -> 7787 bytes
 ...raster_symbolizer-512-512-1.0-agg-reference.png |   Bin 0 -> 19638 bytes
 ...ster_symbolizer-512-512-1.0-cairo-reference.png |   Bin 0 -> 19638 bytes
 ...raster_symbolizer-512-512-2.0-agg-reference.png |   Bin 0 -> 19638 bytes
 ...ster_symbolizer-512-512-2.0-cairo-reference.png |   Bin 0 -> 19638 bytes
 .../repeat-labels-1-750-250-1.0-agg-reference.png  |   Bin 0 -> 7569 bytes
 ...repeat-labels-1-750-250-1.0-cairo-reference.png |   Bin 0 -> 4566 bytes
 .../repeat-labels-1-750-250-2.0-agg-reference.png  |   Bin 0 -> 7087 bytes
 ...repeat-labels-1-750-250-2.0-cairo-reference.png |   Bin 0 -> 5391 bytes
 .../repeat-labels-2-750-250-1.0-agg-reference.png  |   Bin 0 -> 5438 bytes
 ...repeat-labels-2-750-250-1.0-cairo-reference.png |   Bin 0 -> 3247 bytes
 .../repeat-labels-2-750-250-2.0-agg-reference.png  |   Bin 0 -> 3091 bytes
 ...repeat-labels-2-750-250-2.0-cairo-reference.png |   Bin 0 -> 3248 bytes
 .../repeat-labels-3-750-250-1.0-agg-reference.png  |   Bin 0 -> 9343 bytes
 ...repeat-labels-3-750-250-1.0-cairo-reference.png |   Bin 0 -> 5011 bytes
 .../repeat-labels-3-750-250-2.0-agg-reference.png  |   Bin 0 -> 9380 bytes
 ...repeat-labels-3-750-250-2.0-cairo-reference.png |   Bin 0 -> 6900 bytes
 .../repeat-labels-4-750-250-1.0-agg-reference.png  |   Bin 0 -> 9417 bytes
 ...repeat-labels-4-750-250-1.0-cairo-reference.png |   Bin 0 -> 5101 bytes
 .../repeat-labels-4-750-250-2.0-agg-reference.png  |   Bin 0 -> 9497 bytes
 ...repeat-labels-4-750-250-2.0-cairo-reference.png |   Bin 0 -> 7044 bytes
 ...grouped-rendering-600-600-1.0-agg-reference.png |   Bin 0 -> 97311 bytes
 ...ouped-rendering-600-600-1.0-cairo-reference.png |   Bin 0 -> 97392 bytes
 ...grouped-rendering-600-600-2.0-agg-reference.png |   Bin 0 -> 85899 bytes
 ...ouped-rendering-600-600-2.0-cairo-reference.png |   Bin 0 -> 86275 bytes
 ...grouped-rendering-600-600-1.0-agg-reference.png |   Bin 0 -> 97650 bytes
 ...ouped-rendering-600-600-1.0-cairo-reference.png |   Bin 0 -> 99163 bytes
 ...grouped-rendering-600-600-2.0-agg-reference.png |   Bin 0 -> 85131 bytes
 ...ouped-rendering-600-600-2.0-cairo-reference.png |   Bin 0 -> 86195 bytes
 .../images/rtl-point-200-200-1.0-agg-reference.png |   Bin 1026 -> 1047 bytes
 .../rtl-point-200-200-1.0-cairo-reference.png      |   Bin 998 -> 1007 bytes
 .../images/rtl-point-200-200-2.0-agg-reference.png |   Bin 1494 -> 1370 bytes
 .../rtl-point-200-200-2.0-cairo-reference.png      |   Bin 1500 -> 1397 bytes
 ...e-and-avoid-edges-512-512-1.0-agg-reference.png |   Bin 0 -> 10951 bytes
 ...and-avoid-edges-512-512-1.0-cairo-reference.png |   Bin 0 -> 21137 bytes
 ...e-and-avoid-edges-512-512-2.0-agg-reference.png |   Bin 0 -> 14757 bytes
 ...and-avoid-edges-512-512-2.0-cairo-reference.png |   Bin 0 -> 20410 bytes
 ...-spacing-eq-width-600-400-1.0-agg-reference.png |   Bin 3665 -> 10263 bytes
 ...pacing-eq-width-600-400-1.0-cairo-reference.png |   Bin 3280 -> 8521 bytes
 ...-spacing-eq-width-600-400-2.0-agg-reference.png |   Bin 4090 -> 16403 bytes
 ...pacing-eq-width-600-400-2.0-cairo-reference.png |   Bin 3872 -> 10440 bytes
 ...shield-on-polygon-600-400-1.0-agg-reference.png |   Bin 10334 -> 10797 bytes
 ...ield-on-polygon-600-400-1.0-cairo-reference.png |   Bin 10551 -> 10694 bytes
 ...shield-on-polygon-600-400-2.0-agg-reference.png |   Bin 15861 -> 16974 bytes
 ...ield-on-polygon-600-400-2.0-cairo-reference.png |   Bin 16077 -> 15763 bytes
 ...hieldsymbolizer-1-490-100-1.0-agg-reference.png |   Bin 1233 -> 1532 bytes
 ...eldsymbolizer-1-490-100-1.0-cairo-reference.png |   Bin 1279 -> 1384 bytes
 ...hieldsymbolizer-1-490-100-2.0-agg-reference.png |   Bin 2447 -> 2734 bytes
 ...eldsymbolizer-1-490-100-2.0-cairo-reference.png |   Bin 2554 -> 2566 bytes
 ...hieldsymbolizer-1-495-100-1.0-agg-reference.png |   Bin 1491 -> 1603 bytes
 ...eldsymbolizer-1-495-100-1.0-cairo-reference.png |   Bin 1443 -> 1535 bytes
 ...hieldsymbolizer-1-495-100-2.0-agg-reference.png |   Bin 2672 -> 3048 bytes
 ...eldsymbolizer-1-495-100-2.0-cairo-reference.png |   Bin 2842 -> 2941 bytes
 ...hieldsymbolizer-1-497-100-1.0-agg-reference.png |   Bin 1828 -> 1769 bytes
 ...eldsymbolizer-1-497-100-1.0-cairo-reference.png |   Bin 1659 -> 1672 bytes
 ...hieldsymbolizer-1-497-100-2.0-agg-reference.png |   Bin 3306 -> 3385 bytes
 ...eldsymbolizer-1-497-100-2.0-cairo-reference.png |   Bin 3190 -> 3313 bytes
 ...hieldsymbolizer-1-498-100-1.0-agg-reference.png |   Bin 1790 -> 1753 bytes
 ...eldsymbolizer-1-498-100-1.0-cairo-reference.png |   Bin 1553 -> 1639 bytes
 ...hieldsymbolizer-1-498-100-2.0-agg-reference.png |   Bin 3249 -> 3311 bytes
 ...eldsymbolizer-1-498-100-2.0-cairo-reference.png |   Bin 3197 -> 3302 bytes
 ...hieldsymbolizer-1-499-100-1.0-agg-reference.png |   Bin 1810 -> 1750 bytes
 ...eldsymbolizer-1-499-100-1.0-cairo-reference.png |   Bin 1627 -> 1680 bytes
 ...hieldsymbolizer-1-499-100-2.0-agg-reference.png |   Bin 3269 -> 3324 bytes
 ...eldsymbolizer-1-499-100-2.0-cairo-reference.png |   Bin 3184 -> 3368 bytes
 ...hieldsymbolizer-1-500-100-1.0-agg-reference.png |   Bin 1267 -> 1559 bytes
 ...eldsymbolizer-1-500-100-1.0-cairo-reference.png |   Bin 1263 -> 1359 bytes
 ...hieldsymbolizer-1-500-100-2.0-agg-reference.png |   Bin 2360 -> 2707 bytes
 ...eldsymbolizer-1-500-100-2.0-cairo-reference.png |   Bin 2548 -> 2600 bytes
 ...hieldsymbolizer-1-501-100-1.0-agg-reference.png |   Bin 1827 -> 1761 bytes
 ...eldsymbolizer-1-501-100-1.0-cairo-reference.png |   Bin 1607 -> 1663 bytes
 ...hieldsymbolizer-1-501-100-2.0-agg-reference.png |   Bin 3321 -> 3225 bytes
 ...eldsymbolizer-1-501-100-2.0-cairo-reference.png |   Bin 3187 -> 3322 bytes
 ...hieldsymbolizer-1-502-100-1.0-agg-reference.png |   Bin 1669 -> 1745 bytes
 ...eldsymbolizer-1-502-100-1.0-cairo-reference.png |   Bin 1547 -> 1623 bytes
 ...hieldsymbolizer-1-502-100-2.0-agg-reference.png |   Bin 3262 -> 3297 bytes
 ...eldsymbolizer-1-502-100-2.0-cairo-reference.png |   Bin 3219 -> 3238 bytes
 ...hieldsymbolizer-1-505-100-1.0-agg-reference.png |   Bin 1508 -> 1597 bytes
 ...eldsymbolizer-1-505-100-1.0-cairo-reference.png |   Bin 1430 -> 1521 bytes
 ...hieldsymbolizer-1-505-100-2.0-agg-reference.png |   Bin 2683 -> 3066 bytes
 ...eldsymbolizer-1-505-100-2.0-cairo-reference.png |   Bin 2836 -> 2955 bytes
 ...hieldsymbolizer-1-510-100-1.0-agg-reference.png |   Bin 1232 -> 1529 bytes
 ...eldsymbolizer-1-510-100-1.0-cairo-reference.png |   Bin 1277 -> 1379 bytes
 ...hieldsymbolizer-1-510-100-2.0-agg-reference.png |   Bin 2462 -> 2732 bytes
 ...eldsymbolizer-1-510-100-2.0-cairo-reference.png |   Bin 2569 -> 2580 bytes
 ...hieldsymbolizer-2-490-100-1.0-agg-reference.png |   Bin 0 -> 1577 bytes
 ...eldsymbolizer-2-490-100-1.0-cairo-reference.png |   Bin 0 -> 1272 bytes
 ...hieldsymbolizer-2-490-100-2.0-agg-reference.png |   Bin 0 -> 2721 bytes
 ...eldsymbolizer-2-490-100-2.0-cairo-reference.png |   Bin 0 -> 2385 bytes
 ...hieldsymbolizer-2-495-100-1.0-agg-reference.png |   Bin 0 -> 1643 bytes
 ...eldsymbolizer-2-495-100-1.0-cairo-reference.png |   Bin 0 -> 1421 bytes
 ...hieldsymbolizer-2-495-100-2.0-agg-reference.png |   Bin 0 -> 2993 bytes
 ...eldsymbolizer-2-495-100-2.0-cairo-reference.png |   Bin 0 -> 2696 bytes
 ...hieldsymbolizer-2-497-100-1.0-agg-reference.png |   Bin 0 -> 1761 bytes
 ...eldsymbolizer-2-497-100-1.0-cairo-reference.png |   Bin 0 -> 1618 bytes
 ...hieldsymbolizer-2-497-100-2.0-agg-reference.png |   Bin 0 -> 3353 bytes
 ...eldsymbolizer-2-497-100-2.0-cairo-reference.png |   Bin 0 -> 3087 bytes
 ...hieldsymbolizer-2-498-100-1.0-agg-reference.png |   Bin 0 -> 1756 bytes
 ...eldsymbolizer-2-498-100-1.0-cairo-reference.png |   Bin 0 -> 1527 bytes
 ...hieldsymbolizer-2-498-100-2.0-agg-reference.png |   Bin 0 -> 3229 bytes
 ...eldsymbolizer-2-498-100-2.0-cairo-reference.png |   Bin 0 -> 3042 bytes
 ...hieldsymbolizer-2-499-100-1.0-agg-reference.png |   Bin 0 -> 1713 bytes
 ...eldsymbolizer-2-499-100-1.0-cairo-reference.png |   Bin 0 -> 1642 bytes
 ...hieldsymbolizer-2-499-100-2.0-agg-reference.png |   Bin 0 -> 3285 bytes
 ...eldsymbolizer-2-499-100-2.0-cairo-reference.png |   Bin 0 -> 3120 bytes
 ...hieldsymbolizer-2-500-100-1.0-agg-reference.png |   Bin 0 -> 1556 bytes
 ...eldsymbolizer-2-500-100-1.0-cairo-reference.png |   Bin 0 -> 1266 bytes
 ...hieldsymbolizer-2-500-100-2.0-agg-reference.png |   Bin 0 -> 2642 bytes
 ...eldsymbolizer-2-500-100-2.0-cairo-reference.png |   Bin 0 -> 2401 bytes
 ...hieldsymbolizer-2-501-100-1.0-agg-reference.png |   Bin 0 -> 1738 bytes
 ...eldsymbolizer-2-501-100-1.0-cairo-reference.png |   Bin 0 -> 1607 bytes
 ...hieldsymbolizer-2-501-100-2.0-agg-reference.png |   Bin 0 -> 3235 bytes
 ...eldsymbolizer-2-501-100-2.0-cairo-reference.png |   Bin 0 -> 3107 bytes
 ...hieldsymbolizer-2-502-100-1.0-agg-reference.png |   Bin 0 -> 1727 bytes
 ...eldsymbolizer-2-502-100-1.0-cairo-reference.png |   Bin 0 -> 1512 bytes
 ...hieldsymbolizer-2-502-100-2.0-agg-reference.png |   Bin 0 -> 3225 bytes
 ...eldsymbolizer-2-502-100-2.0-cairo-reference.png |   Bin 0 -> 3028 bytes
 ...hieldsymbolizer-2-505-100-1.0-agg-reference.png |   Bin 0 -> 1659 bytes
 ...eldsymbolizer-2-505-100-1.0-cairo-reference.png |   Bin 0 -> 1428 bytes
 ...hieldsymbolizer-2-505-100-2.0-agg-reference.png |   Bin 0 -> 3002 bytes
 ...eldsymbolizer-2-505-100-2.0-cairo-reference.png |   Bin 0 -> 2699 bytes
 ...hieldsymbolizer-2-510-100-1.0-agg-reference.png |   Bin 0 -> 1576 bytes
 ...eldsymbolizer-2-510-100-1.0-cairo-reference.png |   Bin 0 -> 1288 bytes
 ...hieldsymbolizer-2-510-100-2.0-agg-reference.png |   Bin 0 -> 2717 bytes
 ...eldsymbolizer-2-510-100-2.0-cairo-reference.png |   Bin 0 -> 2391 bytes
 ...hieldsymbolizer-3-490-100-1.0-agg-reference.png |   Bin 0 -> 1484 bytes
 ...eldsymbolizer-3-490-100-1.0-cairo-reference.png |   Bin 0 -> 1294 bytes
 ...hieldsymbolizer-3-490-100-2.0-agg-reference.png |   Bin 0 -> 2090 bytes
 ...eldsymbolizer-3-490-100-2.0-cairo-reference.png |   Bin 0 -> 1766 bytes
 ...hieldsymbolizer-3-495-100-1.0-agg-reference.png |   Bin 0 -> 1539 bytes
 ...eldsymbolizer-3-495-100-1.0-cairo-reference.png |   Bin 0 -> 1390 bytes
 ...hieldsymbolizer-3-495-100-2.0-agg-reference.png |   Bin 0 -> 2322 bytes
 ...eldsymbolizer-3-495-100-2.0-cairo-reference.png |   Bin 0 -> 1913 bytes
 ...hieldsymbolizer-3-497-100-1.0-agg-reference.png |   Bin 0 -> 1707 bytes
 ...eldsymbolizer-3-497-100-1.0-cairo-reference.png |   Bin 0 -> 1564 bytes
 ...hieldsymbolizer-3-497-100-2.0-agg-reference.png |   Bin 0 -> 2370 bytes
 ...eldsymbolizer-3-497-100-2.0-cairo-reference.png |   Bin 0 -> 2170 bytes
 ...hieldsymbolizer-3-498-100-1.0-agg-reference.png |   Bin 0 -> 1680 bytes
 ...eldsymbolizer-3-498-100-1.0-cairo-reference.png |   Bin 0 -> 1539 bytes
 ...hieldsymbolizer-3-498-100-2.0-agg-reference.png |   Bin 0 -> 2312 bytes
 ...eldsymbolizer-3-498-100-2.0-cairo-reference.png |   Bin 0 -> 2063 bytes
 ...hieldsymbolizer-3-499-100-1.0-agg-reference.png |   Bin 0 -> 1678 bytes
 ...eldsymbolizer-3-499-100-1.0-cairo-reference.png |   Bin 0 -> 1552 bytes
 ...hieldsymbolizer-3-499-100-2.0-agg-reference.png |   Bin 0 -> 2413 bytes
 ...eldsymbolizer-3-499-100-2.0-cairo-reference.png |   Bin 0 -> 2119 bytes
 ...hieldsymbolizer-3-500-100-1.0-agg-reference.png |   Bin 0 -> 1494 bytes
 ...eldsymbolizer-3-500-100-1.0-cairo-reference.png |   Bin 0 -> 1301 bytes
 ...hieldsymbolizer-3-500-100-2.0-agg-reference.png |   Bin 0 -> 2098 bytes
 ...eldsymbolizer-3-500-100-2.0-cairo-reference.png |   Bin 0 -> 1777 bytes
 ...hieldsymbolizer-3-501-100-1.0-agg-reference.png |   Bin 0 -> 1730 bytes
 ...eldsymbolizer-3-501-100-1.0-cairo-reference.png |   Bin 0 -> 1567 bytes
 ...hieldsymbolizer-3-501-100-2.0-agg-reference.png |   Bin 0 -> 2561 bytes
 ...eldsymbolizer-3-501-100-2.0-cairo-reference.png |   Bin 0 -> 2143 bytes
 ...hieldsymbolizer-3-502-100-1.0-agg-reference.png |   Bin 0 -> 1682 bytes
 ...eldsymbolizer-3-502-100-1.0-cairo-reference.png |   Bin 0 -> 1524 bytes
 ...hieldsymbolizer-3-502-100-2.0-agg-reference.png |   Bin 0 -> 2310 bytes
 ...eldsymbolizer-3-502-100-2.0-cairo-reference.png |   Bin 0 -> 2054 bytes
 ...hieldsymbolizer-3-505-100-1.0-agg-reference.png |   Bin 0 -> 1548 bytes
 ...eldsymbolizer-3-505-100-1.0-cairo-reference.png |   Bin 0 -> 1412 bytes
 ...hieldsymbolizer-3-505-100-2.0-agg-reference.png |   Bin 0 -> 2421 bytes
 ...eldsymbolizer-3-505-100-2.0-cairo-reference.png |   Bin 0 -> 1928 bytes
 ...hieldsymbolizer-3-510-100-1.0-agg-reference.png |   Bin 0 -> 1496 bytes
 ...eldsymbolizer-3-510-100-1.0-cairo-reference.png |   Bin 0 -> 1304 bytes
 ...hieldsymbolizer-3-510-100-2.0-agg-reference.png |   Bin 0 -> 2086 bytes
 ...eldsymbolizer-3-510-100-2.0-cairo-reference.png |   Bin 0 -> 1768 bytes
 ...hieldsymbolizer-4-490-100-1.0-agg-reference.png |   Bin 0 -> 1600 bytes
 ...eldsymbolizer-4-490-100-1.0-cairo-reference.png |   Bin 0 -> 1357 bytes
 ...hieldsymbolizer-4-490-100-2.0-agg-reference.png |   Bin 0 -> 2318 bytes
 ...eldsymbolizer-4-490-100-2.0-cairo-reference.png |   Bin 0 -> 2086 bytes
 ...hieldsymbolizer-4-495-100-1.0-agg-reference.png |   Bin 0 -> 1674 bytes
 ...eldsymbolizer-4-495-100-1.0-cairo-reference.png |   Bin 0 -> 1441 bytes
 ...hieldsymbolizer-4-495-100-2.0-agg-reference.png |   Bin 0 -> 2391 bytes
 ...eldsymbolizer-4-495-100-2.0-cairo-reference.png |   Bin 0 -> 2172 bytes
 ...hieldsymbolizer-4-497-100-1.0-agg-reference.png |   Bin 0 -> 1735 bytes
 ...eldsymbolizer-4-497-100-1.0-cairo-reference.png |   Bin 0 -> 1528 bytes
 ...hieldsymbolizer-4-497-100-2.0-agg-reference.png |   Bin 0 -> 2436 bytes
 ...eldsymbolizer-4-497-100-2.0-cairo-reference.png |   Bin 0 -> 2217 bytes
 ...hieldsymbolizer-4-498-100-1.0-agg-reference.png |   Bin 0 -> 1705 bytes
 ...eldsymbolizer-4-498-100-1.0-cairo-reference.png |   Bin 0 -> 1450 bytes
 ...hieldsymbolizer-4-498-100-2.0-agg-reference.png |   Bin 0 -> 2389 bytes
 ...eldsymbolizer-4-498-100-2.0-cairo-reference.png |   Bin 0 -> 2232 bytes
 ...hieldsymbolizer-4-499-100-1.0-agg-reference.png |   Bin 0 -> 1702 bytes
 ...eldsymbolizer-4-499-100-1.0-cairo-reference.png |   Bin 0 -> 1498 bytes
 ...hieldsymbolizer-4-499-100-2.0-agg-reference.png |   Bin 0 -> 2453 bytes
 ...eldsymbolizer-4-499-100-2.0-cairo-reference.png |   Bin 0 -> 2229 bytes
 ...hieldsymbolizer-4-500-100-1.0-agg-reference.png |   Bin 0 -> 1576 bytes
 ...eldsymbolizer-4-500-100-1.0-cairo-reference.png |   Bin 0 -> 1315 bytes
 ...hieldsymbolizer-4-500-100-2.0-agg-reference.png |   Bin 0 -> 2328 bytes
 ...eldsymbolizer-4-500-100-2.0-cairo-reference.png |   Bin 0 -> 2096 bytes
 ...hieldsymbolizer-4-501-100-1.0-agg-reference.png |   Bin 0 -> 1725 bytes
 ...eldsymbolizer-4-501-100-1.0-cairo-reference.png |   Bin 0 -> 1529 bytes
 ...hieldsymbolizer-4-501-100-2.0-agg-reference.png |   Bin 0 -> 2468 bytes
 ...eldsymbolizer-4-501-100-2.0-cairo-reference.png |   Bin 0 -> 2244 bytes
 ...hieldsymbolizer-4-502-100-1.0-agg-reference.png |   Bin 0 -> 1719 bytes
 ...eldsymbolizer-4-502-100-1.0-cairo-reference.png |   Bin 0 -> 1445 bytes
 ...hieldsymbolizer-4-502-100-2.0-agg-reference.png |   Bin 0 -> 2392 bytes
 ...eldsymbolizer-4-502-100-2.0-cairo-reference.png |   Bin 0 -> 2190 bytes
 ...hieldsymbolizer-4-505-100-1.0-agg-reference.png |   Bin 0 -> 1665 bytes
 ...eldsymbolizer-4-505-100-1.0-cairo-reference.png |   Bin 0 -> 1389 bytes
 ...hieldsymbolizer-4-505-100-2.0-agg-reference.png |   Bin 0 -> 2433 bytes
 ...eldsymbolizer-4-505-100-2.0-cairo-reference.png |   Bin 0 -> 2090 bytes
 ...hieldsymbolizer-4-510-100-1.0-agg-reference.png |   Bin 0 -> 1597 bytes
 ...eldsymbolizer-4-510-100-1.0-cairo-reference.png |   Bin 0 -> 1361 bytes
 ...hieldsymbolizer-4-510-100-2.0-agg-reference.png |   Bin 0 -> 2314 bytes
 ...eldsymbolizer-4-510-100-2.0-cairo-reference.png |   Bin 0 -> 2057 bytes
 .../images/simple-100-100-1.0-agg-reference.png    |   Bin 1064 -> 1392 bytes
 .../images/simple-100-100-1.0-cairo-reference.png  |   Bin 1041 -> 1039 bytes
 .../images/simple-100-100-2.0-agg-reference.png    |   Bin 1293 -> 1590 bytes
 .../images/simple-100-100-2.0-cairo-reference.png  |   Bin 1242 -> 1455 bytes
 .../images/simple-150-100-1.0-agg-reference.png    |   Bin 1740 -> 2024 bytes
 .../images/simple-150-100-1.0-cairo-reference.png  |   Bin 1484 -> 1472 bytes
 .../images/simple-150-100-2.0-agg-reference.png    |   Bin 2078 -> 2204 bytes
 .../images/simple-150-100-2.0-cairo-reference.png  |   Bin 1976 -> 1830 bytes
 .../images/simple-250-100-1.0-agg-reference.png    |   Bin 2169 -> 3448 bytes
 .../images/simple-250-100-1.0-cairo-reference.png  |   Bin 1923 -> 1983 bytes
 .../images/simple-250-100-2.0-agg-reference.png    |   Bin 2535 -> 3460 bytes
 .../images/simple-250-100-2.0-cairo-reference.png  |   Bin 2444 -> 2416 bytes
 .../images/simple-300-100-1.0-agg-reference.png    |   Bin 2361 -> 3552 bytes
 .../images/simple-300-100-1.0-cairo-reference.png  |   Bin 2070 -> 2052 bytes
 .../images/simple-300-100-2.0-agg-reference.png    |   Bin 3279 -> 4070 bytes
 .../images/simple-300-100-2.0-cairo-reference.png  |   Bin 3017 -> 2905 bytes
 .../images/simple-400-100-1.0-agg-reference.png    |   Bin 2482 -> 4044 bytes
 .../images/simple-400-100-1.0-cairo-reference.png  |   Bin 2182 -> 2149 bytes
 .../images/simple-400-100-2.0-agg-reference.png    |   Bin 3769 -> 6023 bytes
 .../images/simple-400-100-2.0-cairo-reference.png  |   Bin 3372 -> 3755 bytes
 .../images/simple-600-100-1.0-agg-reference.png    |   Bin 2372 -> 4331 bytes
 .../images/simple-600-100-1.0-cairo-reference.png  |   Bin 2088 -> 2246 bytes
 .../images/simple-600-100-2.0-agg-reference.png    |   Bin 4852 -> 6628 bytes
 .../images/simple-600-100-2.0-cairo-reference.png  |   Bin 4099 -> 3880 bytes
 .../images/simple-800-100-1.0-agg-reference.png    |   Bin 2326 -> 4212 bytes
 .../images/simple-800-100-1.0-cairo-reference.png  |   Bin 2068 -> 2416 bytes
 .../images/simple-800-100-2.0-agg-reference.png    |   Bin 5224 -> 6685 bytes
 .../images/simple-800-100-2.0-cairo-reference.png  |   Bin 4935 -> 3895 bytes
 .../images/simple-E-500-100-1.0-agg-reference.png  |   Bin 782 -> 838 bytes
 .../simple-E-500-100-1.0-cairo-reference.png       |   Bin 782 -> 782 bytes
 .../images/simple-E-500-100-2.0-agg-reference.png  |   Bin 1203 -> 1359 bytes
 .../simple-E-500-100-2.0-cairo-reference.png       |   Bin 1236 -> 1233 bytes
 .../images/simple-N-500-100-1.0-agg-reference.png  |   Bin 791 -> 839 bytes
 .../simple-N-500-100-1.0-cairo-reference.png       |   Bin 791 -> 791 bytes
 .../images/simple-N-500-100-2.0-agg-reference.png  |   Bin 1209 -> 1354 bytes
 .../simple-N-500-100-2.0-cairo-reference.png       |   Bin 1228 -> 1237 bytes
 .../images/simple-NE-500-100-1.0-agg-reference.png |   Bin 788 -> 843 bytes
 .../simple-NE-500-100-1.0-cairo-reference.png      |   Bin 788 -> 789 bytes
 .../images/simple-NE-500-100-2.0-agg-reference.png |   Bin 1222 -> 1381 bytes
 .../simple-NE-500-100-2.0-cairo-reference.png      |   Bin 1243 -> 1241 bytes
 .../images/simple-NW-500-100-1.0-agg-reference.png |   Bin 797 -> 844 bytes
 .../simple-NW-500-100-1.0-cairo-reference.png      |   Bin 797 -> 798 bytes
 .../images/simple-NW-500-100-2.0-agg-reference.png |   Bin 1220 -> 1365 bytes
 .../simple-NW-500-100-2.0-cairo-reference.png      |   Bin 1235 -> 1242 bytes
 .../images/simple-S-500-100-1.0-agg-reference.png  |   Bin 791 -> 839 bytes
 .../simple-S-500-100-1.0-cairo-reference.png       |   Bin 791 -> 791 bytes
 .../images/simple-S-500-100-2.0-agg-reference.png  |   Bin 1210 -> 1355 bytes
 .../simple-S-500-100-2.0-cairo-reference.png       |   Bin 1232 -> 1237 bytes
 .../images/simple-SE-500-100-1.0-agg-reference.png |   Bin 788 -> 843 bytes
 .../simple-SE-500-100-1.0-cairo-reference.png      |   Bin 788 -> 789 bytes
 .../images/simple-SE-500-100-2.0-agg-reference.png |   Bin 1223 -> 1384 bytes
 .../simple-SE-500-100-2.0-cairo-reference.png      |   Bin 1244 -> 1241 bytes
 .../images/simple-SW-500-100-1.0-agg-reference.png |   Bin 797 -> 844 bytes
 .../simple-SW-500-100-1.0-cairo-reference.png      |   Bin 797 -> 798 bytes
 .../images/simple-SW-500-100-2.0-agg-reference.png |   Bin 1220 -> 1369 bytes
 .../simple-SW-500-100-2.0-cairo-reference.png      |   Bin 1240 -> 1245 bytes
 .../images/simple-W-500-100-1.0-agg-reference.png  |   Bin 803 -> 845 bytes
 .../simple-W-500-100-1.0-cairo-reference.png       |   Bin 803 -> 804 bytes
 .../images/simple-W-500-100-2.0-agg-reference.png  |   Bin 1207 -> 1346 bytes
 .../simple-W-500-100-2.0-cairo-reference.png       |   Bin 1245 -> 1248 bytes
 .../simple-shield-600-400-1.0-agg-reference.png    |   Bin 0 -> 4529 bytes
 .../simple-shield-600-400-1.0-cairo-reference.png  |   Bin 0 -> 124 bytes
 .../simple-shield-600-400-2.0-agg-reference.png    |   Bin 0 -> 6903 bytes
 .../simple-shield-600-400-2.0-cairo-reference.png  |   Bin 0 -> 124 bytes
 ...ositing-tiled-0,0-512-512-1.0-agg-reference.png |   Bin 0 -> 35229 bytes
 ...iting-tiled-0,0-512-512-1.0-cairo-reference.png |   Bin 0 -> 18826 bytes
 ...ositing-tiled-0,0-512-512-2.0-agg-reference.png |   Bin 0 -> 35229 bytes
 ...iting-tiled-0,0-512-512-2.0-cairo-reference.png |   Bin 0 -> 18826 bytes
 ...ositing-tiled-0,1-512-512-1.0-agg-reference.png |   Bin 0 -> 7897 bytes
 ...iting-tiled-0,1-512-512-1.0-cairo-reference.png |   Bin 0 -> 2583 bytes
 ...ositing-tiled-0,1-512-512-2.0-agg-reference.png |   Bin 0 -> 7897 bytes
 ...iting-tiled-0,1-512-512-2.0-cairo-reference.png |   Bin 0 -> 2583 bytes
 ...ositing-tiled-1,0-512-512-1.0-agg-reference.png |   Bin 0 -> 29887 bytes
 ...iting-tiled-1,0-512-512-1.0-cairo-reference.png |   Bin 0 -> 22728 bytes
 ...ositing-tiled-1,0-512-512-2.0-agg-reference.png |   Bin 0 -> 29887 bytes
 ...iting-tiled-1,0-512-512-2.0-cairo-reference.png |   Bin 0 -> 22728 bytes
 ...ositing-tiled-1,1-512-512-1.0-agg-reference.png |   Bin 0 -> 9013 bytes
 ...iting-tiled-1,1-512-512-1.0-cairo-reference.png |   Bin 0 -> 6432 bytes
 ...ositing-tiled-1,1-512-512-2.0-agg-reference.png |   Bin 0 -> 9013 bytes
 ...iting-tiled-1,1-512-512-2.0-cairo-reference.png |   Bin 0 -> 6432 bytes
 ...llow-overlap-expr-500-500-1.0-agg-reference.png |   Bin 0 -> 2582 bytes
 ...ow-overlap-expr-500-500-1.0-cairo-reference.png |   Bin 0 -> 2544 bytes
 ...llow-overlap-expr-500-500-2.0-agg-reference.png |   Bin 0 -> 4100 bytes
 ...ow-overlap-expr-500-500-2.0-cairo-reference.png |   Bin 0 -> 4099 bytes
 .../text-bengali-800-100-1.0-agg-reference.png     |   Bin 0 -> 947 bytes
 .../text-bengali-800-100-1.0-cairo-reference.png   |   Bin 0 -> 918 bytes
 .../text-bengali-800-100-2.0-agg-reference.png     |   Bin 0 -> 1915 bytes
 .../text-bengali-800-100-2.0-cairo-reference.png   |   Bin 0 -> 1828 bytes
 .../text-bug1532-600-165-1.0-agg-reference.png     |   Bin 0 -> 3489 bytes
 .../text-bug1532-600-165-1.0-cairo-reference.png   |   Bin 0 -> 2770 bytes
 .../text-bug1532-600-165-2.0-agg-reference.png     |   Bin 0 -> 4858 bytes
 .../text-bug1532-600-165-2.0-cairo-reference.png   |   Bin 0 -> 4487 bytes
 .../text-bug1533-600-600-1.0-agg-reference.png     |   Bin 0 -> 6948 bytes
 .../text-bug1533-600-600-1.0-cairo-reference.png   |   Bin 0 -> 6563 bytes
 .../text-bug1533-600-600-2.0-agg-reference.png     |   Bin 0 -> 10636 bytes
 .../text-bug1533-600-600-2.0-cairo-reference.png   |   Bin 0 -> 9661 bytes
 .../text-bug1820+0-600-300-1.0-agg-reference.png   |   Bin 0 -> 3870 bytes
 .../text-bug1820+0-600-300-1.0-cairo-reference.png |   Bin 0 -> 2915 bytes
 .../text-bug1820+0-600-300-2.0-agg-reference.png   |   Bin 0 -> 4399 bytes
 .../text-bug1820+0-600-300-2.0-cairo-reference.png |   Bin 0 -> 3360 bytes
 .../text-bug1820+1-600-300-1.0-agg-reference.png   |   Bin 0 -> 3576 bytes
 .../text-bug1820+1-600-300-1.0-cairo-reference.png |   Bin 0 -> 2793 bytes
 .../text-bug1820+1-600-300-2.0-agg-reference.png   |   Bin 0 -> 4270 bytes
 .../text-bug1820+1-600-300-2.0-cairo-reference.png |   Bin 0 -> 3247 bytes
 .../text-bug1820-1-600-300-1.0-agg-reference.png   |   Bin 0 -> 3839 bytes
 .../text-bug1820-1-600-300-1.0-cairo-reference.png |   Bin 0 -> 2934 bytes
 .../text-bug1820-1-600-300-2.0-agg-reference.png   |   Bin 0 -> 4411 bytes
 .../text-bug1820-1-600-300-2.0-cairo-reference.png |   Bin 0 -> 3333 bytes
 .../text-bug2037-800-300-1.0-agg-reference.png     |   Bin 0 -> 3637 bytes
 .../text-bug2037-800-300-1.0-cairo-reference.png   |   Bin 0 -> 2732 bytes
 .../text-bug2037-800-300-2.0-agg-reference.png     |   Bin 0 -> 5469 bytes
 .../text-bug2037-800-300-2.0-cairo-reference.png   |   Bin 0 -> 4802 bytes
 ...ext-charplacement-512-512-1.0-agg-reference.png |   Bin 0 -> 23940 bytes
 ...t-charplacement-512-512-1.0-cairo-reference.png |   Bin 0 -> 22084 bytes
 ...ext-charplacement-512-512-2.0-agg-reference.png |   Bin 0 -> 15457 bytes
 ...t-charplacement-512-512-2.0-cairo-reference.png |   Bin 0 -> 15507 bytes
 ...text-data-binding-500-500-1.0-agg-reference.png |   Bin 0 -> 29338 bytes
 ...xt-data-binding-500-500-1.0-cairo-reference.png |   Bin 0 -> 27736 bytes
 ...text-data-binding-500-500-2.0-agg-reference.png |   Bin 0 -> 24320 bytes
 ...xt-data-binding-500-500-2.0-cairo-reference.png |   Bin 0 -> 24473 bytes
 ...text-displacement-512-512-1.0-agg-reference.png |   Bin 0 -> 14707 bytes
 ...xt-displacement-512-512-1.0-cairo-reference.png |   Bin 0 -> 14707 bytes
 ...text-displacement-512-512-2.0-agg-reference.png |   Bin 0 -> 13790 bytes
 ...xt-displacement-512-512-2.0-cairo-reference.png |   Bin 0 -> 13315 bytes
 ...ssionformat-color-800-100-1.0-agg-reference.png |   Bin 0 -> 3002 bytes
 ...ionformat-color-800-100-1.0-cairo-reference.png |   Bin 0 -> 2672 bytes
 ...ssionformat-color-800-100-2.0-agg-reference.png |   Bin 0 -> 1539 bytes
 ...ionformat-color-800-100-2.0-cairo-reference.png |   Bin 0 -> 1549 bytes
 ...ext-font-features-500-500-1.0-agg-reference.png |   Bin 0 -> 4987 bytes
 ...t-font-features-500-500-1.0-cairo-reference.png |   Bin 0 -> 3983 bytes
 ...ext-font-features-500-500-2.0-agg-reference.png |   Bin 0 -> 8956 bytes
 ...t-font-features-500-500-2.0-cairo-reference.png |   Bin 0 -> 6718 bytes
 .../text-halign-800-800-1.0-agg-reference.png      |   Bin 0 -> 35936 bytes
 .../text-halign-800-800-1.0-cairo-reference.png    |   Bin 0 -> 34681 bytes
 .../text-halign-800-800-2.0-agg-reference.png      |   Bin 0 -> 48147 bytes
 .../text-halign-800-800-2.0-cairo-reference.png    |   Bin 0 -> 47404 bytes
 ...ext-halign-adjust-800-800-1.0-agg-reference.png |   Bin 0 -> 30677 bytes
 ...t-halign-adjust-800-800-1.0-cairo-reference.png |   Bin 0 -> 30233 bytes
 ...ext-halign-adjust-800-800-2.0-agg-reference.png |   Bin 0 -> 41042 bytes
 ...t-halign-adjust-800-800-2.0-cairo-reference.png |   Bin 0 -> 40049 bytes
 ...-adjust-multiline-800-800-1.0-agg-reference.png |   Bin 0 -> 36295 bytes
 ...djust-multiline-800-800-1.0-cairo-reference.png |   Bin 0 -> 35419 bytes
 ...-adjust-multiline-800-800-2.0-agg-reference.png |   Bin 0 -> 40801 bytes
 ...djust-multiline-800-800-2.0-cairo-reference.png |   Bin 0 -> 39525 bytes
 ...text-halo-opacity-512-512-1.0-agg-reference.png |   Bin 0 -> 9002 bytes
 ...xt-halo-opacity-512-512-1.0-cairo-reference.png |   Bin 0 -> 8653 bytes
 ...text-halo-opacity-512-512-2.0-agg-reference.png |   Bin 0 -> 17095 bytes
 ...xt-halo-opacity-512-512-2.0-cairo-reference.png |   Bin 0 -> 17005 bytes
 ...t-halo-rasterizer-600-400-1.0-agg-reference.png |   Bin 9154 -> 8934 bytes
 ...halo-rasterizer-600-400-1.0-cairo-reference.png |   Bin 7639 -> 7840 bytes
 ...t-halo-rasterizer-600-400-2.0-agg-reference.png |   Bin 16047 -> 16296 bytes
 ...halo-rasterizer-600-400-2.0-cairo-reference.png |   Bin 13794 -> 14181 bytes
 ...xt-halo-transform-600-400-1.0-agg-reference.png |   Bin 0 -> 11174 bytes
 ...-halo-transform-600-400-1.0-cairo-reference.png |   Bin 0 -> 7840 bytes
 ...xt-halo-transform-600-400-2.0-agg-reference.png |   Bin 0 -> 21247 bytes
 ...-halo-transform-600-400-2.0-cairo-reference.png |   Bin 0 -> 14181 bytes
 .../text-line-wrap-512-512-1.0-agg-reference.png   |   Bin 0 -> 2961 bytes
 .../text-line-wrap-512-512-1.0-cairo-reference.png |   Bin 0 -> 2923 bytes
 .../text-line-wrap-512-512-2.0-agg-reference.png   |   Bin 0 -> 4904 bytes
 .../text-line-wrap-512-512-2.0-cairo-reference.png |   Bin 0 -> 4573 bytes
 .../text-malayalam-800-100-1.0-agg-reference.png   |   Bin 0 -> 1176 bytes
 .../text-malayalam-800-100-1.0-cairo-reference.png |   Bin 0 -> 1174 bytes
 .../text-malayalam-800-100-2.0-agg-reference.png   |   Bin 0 -> 2102 bytes
 .../text-malayalam-800-100-2.0-cairo-reference.png |   Bin 0 -> 2092 bytes
 ...xt-multi-layout-1-512-512-1.0-agg-reference.png |   Bin 0 -> 4943 bytes
 ...-multi-layout-1-512-512-1.0-cairo-reference.png |   Bin 0 -> 4816 bytes
 ...xt-multi-layout-1-512-512-2.0-agg-reference.png |   Bin 0 -> 7344 bytes
 ...-multi-layout-1-512-512-2.0-cairo-reference.png |   Bin 0 -> 7209 bytes
 ...xt-multi-layout-2-512-512-1.0-agg-reference.png |   Bin 0 -> 13211 bytes
 ...-multi-layout-2-512-512-1.0-cairo-reference.png |   Bin 0 -> 11620 bytes
 ...xt-multi-layout-2-512-512-2.0-agg-reference.png |   Bin 0 -> 26253 bytes
 ...-multi-layout-2-512-512-2.0-cairo-reference.png |   Bin 0 -> 22769 bytes
 .../text-overlap-512-512-1.0-agg-reference.png     |   Bin 0 -> 14783 bytes
 .../text-overlap-512-512-1.0-cairo-reference.png   |   Bin 0 -> 13491 bytes
 .../text-overlap-512-512-2.0-agg-reference.png     |   Bin 0 -> 16178 bytes
 .../text-overlap-512-512-2.0-cairo-reference.png   |   Bin 0 -> 14062 bytes
 .../text-spacing-512-512-1.0-agg-reference.png     |   Bin 0 -> 17440 bytes
 .../text-spacing-512-512-1.0-cairo-reference.png   |   Bin 0 -> 17283 bytes
 .../text-spacing-512-512-2.0-agg-reference.png     |   Bin 0 -> 27687 bytes
 .../text-spacing-512-512-2.0-cairo-reference.png   |   Bin 0 -> 26512 bytes
 .../text-ttc-font-600-400-1.0-agg-reference.png    |   Bin 0 -> 25323 bytes
 .../text-ttc-font-600-400-1.0-cairo-reference.png  |   Bin 0 -> 24269 bytes
 .../text-ttc-font-600-400-2.0-agg-reference.png    |   Bin 0 -> 43765 bytes
 .../text-ttc-font-600-400-2.0-cairo-reference.png  |   Bin 0 -> 45820 bytes
 .../text-typographic-512-512-1.0-agg-reference.png |   Bin 0 -> 30377 bytes
 ...ext-typographic-512-512-1.0-cairo-reference.png |   Bin 0 -> 26247 bytes
 .../text-typographic-512-512-2.0-agg-reference.png |   Bin 0 -> 35527 bytes
 ...ext-typographic-512-512-2.0-cairo-reference.png |   Bin 0 -> 34586 bytes
 ...ertical-alignment-800-800-1.0-agg-reference.png |   Bin 0 -> 49442 bytes
 ...tical-alignment-800-800-1.0-cairo-reference.png |   Bin 0 -> 48050 bytes
 ...ertical-alignment-800-800-2.0-agg-reference.png |   Bin 0 -> 76902 bytes
 ...tical-alignment-800-800-2.0-cairo-reference.png |   Bin 0 -> 74537 bytes
 ...-nodata-edge-rgba-500-100-1.0-agg-reference.png |   Bin 0 -> 4079 bytes
 ...odata-edge-rgba-500-100-1.0-cairo-reference.png |   Bin 0 -> 4090 bytes
 ...-nodata-edge-rgba-500-100-2.0-agg-reference.png |   Bin 0 -> 4079 bytes
 ...odata-edge-rgba-500-100-2.0-cairo-reference.png |   Bin 0 -> 4090 bytes
 ...-nodata-edge-rgba-512-512-1.0-agg-reference.png |   Bin 0 -> 42545 bytes
 ...odata-edge-rgba-512-512-1.0-cairo-reference.png |   Bin 0 -> 42555 bytes
 ...-nodata-edge-rgba-512-512-2.0-agg-reference.png |   Bin 0 -> 42545 bytes
 ...odata-edge-rgba-512-512-2.0-cairo-reference.png |   Bin 0 -> 42555 bytes
 .../tiff-nodata-rgb-512-512-1.0-agg-reference.png  |   Bin 0 -> 52592 bytes
 ...tiff-nodata-rgb-512-512-1.0-cairo-reference.png |   Bin 0 -> 52217 bytes
 .../tiff-nodata-rgb-512-512-2.0-agg-reference.png  |   Bin 0 -> 52592 bytes
 ...tiff-nodata-rgb-512-512-2.0-cairo-reference.png |   Bin 0 -> 52217 bytes
 .../tiff-nodata-rgba-512-512-1.0-agg-reference.png |   Bin 0 -> 55015 bytes
 ...iff-nodata-rgba-512-512-1.0-cairo-reference.png |   Bin 0 -> 55557 bytes
 .../tiff-nodata-rgba-512-512-2.0-agg-reference.png |   Bin 0 -> 55015 bytes
 ...iff-nodata-rgba-512-512-2.0-cairo-reference.png |   Bin 0 -> 55557 bytes
 ...-nodata-tolerance-512-512-1.0-agg-reference.png |   Bin 0 -> 27842 bytes
 ...odata-tolerance-512-512-1.0-cairo-reference.png |   Bin 0 -> 27842 bytes
 ...-nodata-tolerance-512-512-2.0-agg-reference.png |   Bin 0 -> 27842 bytes
 ...odata-tolerance-512-512-2.0-cairo-reference.png |   Bin 0 -> 27842 bytes
 ...ff-reprojection-1-250-250-1.0-agg-reference.png |   Bin 0 -> 14764 bytes
 ...-reprojection-1-250-250-1.0-cairo-reference.png |   Bin 0 -> 14764 bytes
 ...ff-reprojection-1-250-250-2.0-agg-reference.png |   Bin 0 -> 14764 bytes
 ...-reprojection-1-250-250-2.0-cairo-reference.png |   Bin 0 -> 14764 bytes
 ...ff-reprojection-2-250-250-1.0-agg-reference.png |   Bin 0 -> 13392 bytes
 ...-reprojection-2-250-250-1.0-cairo-reference.png |   Bin 0 -> 13392 bytes
 ...ff-reprojection-2-250-250-2.0-agg-reference.png |   Bin 0 -> 13392 bytes
 ...-reprojection-2-250-250-2.0-cairo-reference.png |   Bin 0 -> 13392 bytes
 .../tiff_colortable-256-256-1.0-agg-reference.png  |   Bin 0 -> 3639 bytes
 ...tiff_colortable-256-256-1.0-cairo-reference.png |   Bin 0 -> 3639 bytes
 .../tiff_colortable-256-256-2.0-agg-reference.png  |   Bin 0 -> 3639 bytes
 ...tiff_colortable-256-256-2.0-cairo-reference.png |   Bin 0 -> 3639 bytes
 ...ble_custom_nodata-256-256-1.0-agg-reference.png |   Bin 0 -> 3717 bytes
 ...e_custom_nodata-256-256-1.0-cairo-reference.png |   Bin 0 -> 3717 bytes
 ...ble_custom_nodata-256-256-2.0-agg-reference.png |   Bin 0 -> 3717 bytes
 ...e_custom_nodata-256-256-2.0-cairo-reference.png |   Bin 0 -> 3717 bytes
 .../vrt_colortable-256-256-1.0-agg-reference.png   |   Bin 0 -> 1863 bytes
 .../vrt_colortable-256-256-1.0-cairo-reference.png |   Bin 0 -> 1863 bytes
 .../vrt_colortable-256-256-2.0-agg-reference.png   |   Bin 0 -> 1863 bytes
 .../vrt_colortable-256-256-2.0-cairo-reference.png |   Bin 0 -> 1863 bytes
 .../whole-centroid-600-400-1.0-agg-reference.png   |   Bin 6839 -> 6876 bytes
 .../whole-centroid-600-400-1.0-cairo-reference.png |   Bin 6886 -> 6919 bytes
 .../whole-centroid-600-400-2.0-agg-reference.png   |   Bin 8180 -> 8278 bytes
 .../whole-centroid-600-400-2.0-cairo-reference.png |   Bin 8247 -> 8215 bytes
 .../styles/building-symbolizer-opacity.xml         |    21 +
 tests/visual_tests/styles/charspacing-lines.xml    |    37 +
 tests/visual_tests/styles/charspacing.xml          |    33 +
 tests/visual_tests/styles/collision.xml            |     1 +
 tests/visual_tests/styles/colorize-alpha1.xml      |    49 +
 tests/visual_tests/styles/colorize-alpha2.xml      |    49 +
 tests/visual_tests/styles/colorize-alpha3.xml      |    49 +
 tests/visual_tests/styles/colorize-alpha4.xml      |    49 +
 tests/visual_tests/styles/dst-over-compositing.xml |    19 +
 tests/visual_tests/styles/expressionformat.xml     |     2 +-
 tests/visual_tests/styles/formatting-1.xml         |     2 +-
 tests/visual_tests/styles/formatting-5.xml         |    25 +
 tests/visual_tests/styles/formatting-6.xml         |    28 +
 tests/visual_tests/styles/formatting-7.xml         |    25 +
 tests/visual_tests/styles/formatting-8.xml         |    25 +
 .../styles/formatting-expr-alignment.xml           |    37 +
 tests/visual_tests/styles/formatting.xml           |    21 +
 .../styles/functional-expressions-length.xml       |   116 +
 .../visual_tests/styles/functional-expressions.xml |    64 +
 tests/visual_tests/styles/gdal-filter-factor.xml   |    17 +
 .../styles/geometry-transform-scale-patterns.xml   |    67 +
 .../styles/geometry-transform-scale.xml            |    60 +
 .../geometry-transform-translate-patterns-svg.xml  |   106 +
 .../geometry-transform-translate-patterns.xml      |    99 +
 .../styles/geometry-transform-translate.xml        |   100 +
 tests/visual_tests/styles/group-symbolizer-1.xml   |    68 +
 tests/visual_tests/styles/group-symbolizer-2.xml   |   114 +
 tests/visual_tests/styles/group-symbolizer-3.xml   |    87 +
 .../styles/group-symbolizer-line-1.xml             |    85 +
 .../styles/group-symbolizer-line-2.xml             |   106 +
 .../styles/halo-comp-op-on-satellite.xml           |   102 +
 tests/visual_tests/styles/harfbuzz.xml             |    44 +
 tests/visual_tests/styles/hb-fontsets.xml          |    48 +
 tests/visual_tests/styles/image-filters-galore.xml |    31 +
 .../styles/image-filters-multi-blur-inflate.xml    |    31 +
 .../styles/image-filters-multi-blur.xml            |    31 +
 tests/visual_tests/styles/khmer.xml                |    38 +
 tests/visual_tests/styles/line-offset.xml          |     4 +-
 .../styles/line-opacity-multi-render.xml           |    80 +
 .../styles/line-pattern-smooth-and-offset.xml      |    26 +
 .../styles/line-pattern-symbolizer-opacity.xml     |    21 +
 .../styles/line-pattern-symbolizer.xml             |    28 +
 .../visual_tests/styles/line-smooth-and-offset.xml |    22 +
 .../styles/line-symbolizer-expressions-all.xml     |    91 +
 .../styles/line-symbolizer-expressions.xml         |    71 +
 tests/visual_tests/styles/line_break.xml           |    36 +
 tests/visual_tests/styles/lines-4.xml              |    27 +
 tests/visual_tests/styles/lines-5.xml              |    31 +
 tests/visual_tests/styles/lines-6.xml              |    36 +
 tests/visual_tests/styles/lines-7.xml              |    35 +
 tests/visual_tests/styles/lines-multi-layout-1.xml |    34 +
 tests/visual_tests/styles/lines-multi-layout-2.xml |    33 +
 .../styles/lines-multi-layout-shield.xml           |    33 +
 tests/visual_tests/styles/list.xml                 |     4 +-
 .../styles/map-background-image-compositing.xml    |    54 +
 tests/visual_tests/styles/marker-collide.xml       |    52 +
 .../styles/marker-interior-position.xml            |    25 +
 tests/visual_tests/styles/marker-on-hex-grid.xml   |     1 +
 .../styles/marker-on-line-and-avoid-edges.xml      |    49 +
 .../styles/marker-on-line-and-line-placement.xml   |    28 +
 .../marker-on-line-and-vertex-first-placement.xml  |    28 +
 .../marker-on-line-and-vertex-last-placement.xml   |    28 +
 .../marker-on-line-spacing-eq-width-overlap.xml    |     1 +
 tests/visual_tests/styles/marker-on-line.xml       |     1 +
 .../visual_tests/styles/marker-path-expression.xml |    43 +
 .../styles/marker-recenter-collide.xml             |    25 +
 .../styles/marker-svg-empty-g-element.xml          |    43 +
 tests/visual_tests/styles/marker-svg-opacity2.xml  |    42 +
 .../styles/marker-symbolizer-expressions-all.xml   |    81 +
 tests/visual_tests/styles/marker-vs-point.xml      |    74 +
 .../styles/marker-whole-multi-polygon.xml          |    17 +
 ...er-with-background-image-and-hsla-transform.xml |     5 +-
 ...marker-with-background-image-linear-comp-op.xml |    67 +
 tests/visual_tests/styles/orientation.xml          |    66 +
 .../styles/point-symbolizer-expressions-all.xml    |    80 +
 .../styles/point-symbolizer-expressions.xml        |    56 +
 .../point-symbolizer-overlap-placement-expr.xml    |    75 +
 .../styles/polygon-symbolizer-expressions-all.xml  |    71 +
 .../styles/polygon-symbolizer-expressions.xml      |    66 +
 .../visual_tests/styles/polygon-winding-order.xml  |    61 +
 tests/visual_tests/styles/postgis-inline.xml       |    44 +
 .../visual_tests/styles/raster-color-to-alpha1.xml |    19 +
 .../visual_tests/styles/raster-color-to-alpha2.xml |    20 +
 .../visual_tests/styles/raster-color-to-alpha3.xml |    20 +
 .../visual_tests/styles/raster-color-to-alpha4.xml |    27 +
 .../visual_tests/styles/raster-color-to-alpha5.xml |    27 +
 tests/visual_tests/styles/raster_colorizer.xml     |    71 +
 tests/visual_tests/styles/raster_symbolizer.xml    |    35 +
 tests/visual_tests/styles/repeat-labels-1.xml      |    43 +
 tests/visual_tests/styles/repeat-labels-2.xml      |    43 +
 tests/visual_tests/styles/repeat-labels-3.xml      |    43 +
 tests/visual_tests/styles/repeat-labels-4.xml      |    43 +
 .../styles/road-casings-grouped-rendering.xml      |    69 +
 .../styles/road-casings-non-grouped-rendering.xml  |    67 +
 .../styles/shield-on-line-and-avoid-edges.xml      |    33 +
 .../styles/shield-on-line-spacing-eq-width.xml     |    39 +-
 tests/visual_tests/styles/shieldsymbolizer-1.xml   |     1 +
 tests/visual_tests/styles/shieldsymbolizer-2.xml   |    60 +
 tests/visual_tests/styles/shieldsymbolizer-3.xml   |    60 +
 tests/visual_tests/styles/shieldsymbolizer-4.xml   |    63 +
 tests/visual_tests/styles/simple-shield.xml        |    16 +-
 .../styles/style-level-compositing-tiled-0,0.xml   |    30 +
 .../styles/style-level-compositing-tiled-0,1.xml   |    30 +
 .../styles/style-level-compositing-tiled-1,0.xml   |    30 +
 .../styles/style-level-compositing-tiled-1,1.xml   |    30 +
 .../styles/text-allow-overlap-expr.xml             |    48 +
 tests/visual_tests/styles/text-bengali.xml         |    32 +
 tests/visual_tests/styles/text-bug1532.xml         |    41 +
 tests/visual_tests/styles/text-bug1533.xml         |    29 +
 tests/visual_tests/styles/text-bug1820+0.xml       |    20 +
 tests/visual_tests/styles/text-bug1820+1.xml       |    20 +
 tests/visual_tests/styles/text-bug1820-1.xml       |    20 +
 tests/visual_tests/styles/text-bug2037.xml         |    30 +
 tests/visual_tests/styles/text-charplacement.xml   |    18 +
 tests/visual_tests/styles/text-data-binding.xml    |    99 +
 tests/visual_tests/styles/text-displacement.xml    |    17 +
 .../styles/text-expressionformat-color.xml         |    23 +
 tests/visual_tests/styles/text-font-features.xml   |    33 +
 .../styles/text-halign-adjust-multiline.xml        |    30 +
 tests/visual_tests/styles/text-halign-adjust.xml   |    30 +
 tests/visual_tests/styles/text-halign.xml          |    21 +
 tests/visual_tests/styles/text-halo-opacity.xml    |    85 +
 tests/visual_tests/styles/text-halo-transform.xml  |   240 +
 tests/visual_tests/styles/text-line-wrap.xml       |    74 +
 tests/visual_tests/styles/text-malayalam.xml       |    20 +
 tests/visual_tests/styles/text-multi-layout-1.xml  |    65 +
 tests/visual_tests/styles/text-multi-layout-2.xml  |    48 +
 tests/visual_tests/styles/text-overlap.xml         |    18 +
 tests/visual_tests/styles/text-spacing.xml         |    18 +
 tests/visual_tests/styles/text-ttc-font.xml        |    80 +
 tests/visual_tests/styles/text-typographic.xml     |    79 +
 .../styles/text-vertical-alignment.xml             |    37 +
 .../visual_tests/styles/tiff-nodata-edge-rgba.xml  |    17 +
 tests/visual_tests/styles/tiff-nodata-rgb.xml      |    17 +
 tests/visual_tests/styles/tiff-nodata-rgba.xml     |    16 +
 .../visual_tests/styles/tiff-nodata-tolerance.xml  |    19 +
 tests/visual_tests/styles/tiff-reprojection-1.xml  |    15 +
 tests/visual_tests/styles/tiff-reprojection-2.xml  |    19 +
 tests/visual_tests/styles/tiff_colortable.xml      |    15 +
 .../styles/tiff_colortable_custom_nodata.xml       |    16 +
 tests/visual_tests/styles/vrt_colortable.xml       |    15 +
 tests/visual_tests/test.py                         |   240 +-
 tests/visual_tests/test_python.py                  |    16 +-
 utils/geometry_to_wkb/main.cpp                     |     8 +-
 utils/mapnik-config/build.py                       |    57 +-
 utils/nik2img/build.py                             |    34 +
 utils/nik2img/nik2img.cpp                          |   129 +
 utils/ogrindex/build.py                            |     6 +-
 utils/performance/build.py                         |     3 +-
 utils/pgsql2sqlite/build.py                        |    19 +-
 utils/pgsql2sqlite/main.cpp                        |     4 +-
 utils/pgsql2sqlite/pgsql2sqlite.hpp                |    30 +-
 utils/pgsql2sqlite/sqlite.hpp                      |    24 +-
 utils/shapeindex/build.py                          |    23 +-
 utils/shapeindex/quadtree.hpp                      |    14 +-
 utils/shapeindex/shapeindex.cpp                    |    22 +-
 utils/svg2png/build.py                             |    11 +-
 utils/svg2png/svg2png.cpp                          |    15 +-
 utils/upgrade_map_xml/build.py                     |     2 +-
 workspace/.gitignore                               |     1 -
 workspace/mapnik.pro                               |    23 -
 2778 files changed, 113287 insertions(+), 125912 deletions(-)

diff --git a/.gitignore b/.gitignore
index 7080486..bbf225e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,21 +20,13 @@ tests/cpp_tests/font_registration_test
 tests/python_tests/raster_colorizer_test.png
 tests/python_tests/raster_colorizer_test_save.xml
 utils/mapnik-config/mapnik-config
-utils/mapnik-config/mapnik2.pc
 utils/shapeindex/shapeindex
 utils/ogrindex/ogrindex
 utils/pgsql2sqlite/pgsql2sqlite
 utils/svg2png/svg2png
+utils/nik2img/nik2img
 demo/python/demo*
 demo/python/map.xml
-tests/cpp_tests/svg_renderer_tests/background_color_test
-tests/cpp_tests/svg_renderer_tests/combined_test
-tests/cpp_tests/svg_renderer_tests/compilation_test
-tests/cpp_tests/svg_renderer_tests/file_output_test
-tests/cpp_tests/svg_renderer_tests/file_output_test_case.svg
-tests/cpp_tests/svg_renderer_tests/path_element_test
-tests/cpp_tests/svg_renderer_tests/path_element_test_case_1.svg
-tests/cpp_tests/svg_renderer_tests/root_element_test
 tests/data/sqlite/*index
 demo/c++/cairo-demo.pdf
 demo/c++/cairo-demo.png
diff --git a/.travis.yml b/.travis.yml
index 31de8c7..fa546ed 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,21 +1,53 @@
 language: cpp
 
-compiler: clang
+compiler:
+ - clang
+ - gcc
 
+env:
+  matrix:
+   - DEBUG=False ENABLE_LOG=True  DEFAULT_LOG_SEVERITY=debug XMLPARSER="libxml2" DEMO=False BENCHMARK=False CUSTOM_CXXFLAGS="" CUSTOM_LDFLAGS=""
+   - DEBUG=False ENABLE_LOG=False DEFAULT_LOG_SEVERITY=none  XMLPARSER="ptree"   DEMO=False BENCHMARK=False CUSTOM_CXXFLAGS="" CUSTOM_LDFLAGS=""
+
+# travis + ubuntugis with gdal and postggis leads to many potential dead-end conflicts
+# the below is thanks to https://github.com/CartoDB/Windshaft/blob/d82fe08b32fc7907bbe907ab290f8a082215ae26/.travis.yml#L1
 before_install:
- - echo 'yes' | sudo add-apt-repository ppa:mapnik/boost
- - sudo apt-get update -qq
- - sudo apt-get install -qq libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-system-dev libboost-thread-dev python-nose libicu-dev libpng-dev libjpeg-dev libtiff-dev libz-dev libfreetype6-dev libxml2-dev libproj-dev
+  - export PGUSER=postgres
+  - sudo mv /etc/apt/sources.list.d/pgdg-source.list* /tmp
+  - sudo apt-get -qq purge postgis* postgresql*
+  - sudo apt-add-repository -y ppa:cartodb/postgresql-9.3
+  - sudo apt-add-repository -y ppa:cartodb/gis
+  # grab harfbuzz from ppa
+  - sudo apt-add-repository -y ppa:fontforge/fontforge
+  # we need at least g++-4.7 for c++11 features
+  - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
+  # enable to test against latest boost rather that v1.48
+  #- sudo add-apt-repository -y ppa:boost-latest/ppa
+  - sudo rm -Rf /var/lib/postgresql /etc/postgresql
+  - sudo apt-get update -qq
+  - sudo apt-get install -q libharfbuzz-dev postgresql-9.3-postgis-2.1 postgresql-contrib-9.3 gdal-bin libgdal-dev
+  - echo -e "local\tall\tall\ttrust\nhost\tall\tall\t127.0.0.1/32\ttrust\nhost\tall\tall\t::1/128\ttrust" |sudo tee /etc/postgresql/9.3/main/pg_hba.conf
+  - sudo service postgresql restart
 
-script:
- - ./configure DEMO=False BINDINGS='python' CPP_TESTS=False CAIRO=False INPUT_PLUGINS='' OPTIMIZATION=1 FAST=True && JOBS=2 make
+install:
+ # enable to test against boost ppa
+ #- sudo apt-get install -y boost1.55
+ - sudo apt-get install -y libboost-python1.48-dev libboost-thread1.48-dev libboost-filesystem1.48-dev libboost-regex1.48-dev libboost-program-options1.48-dev
+ - sudo apt-get install -y ttf-wqy-microhei make libstdc++6 libstdc++-4.8-dev valgrind python-nose libicu-dev libproj-dev libcairo-dev python-cairo-dev libcairo-dev python-cairo-dev libpng-dev libjpeg-dev libtiff-dev libwebp-dev libz-dev libfreetype6-dev libxml2-dev libsqlite3-dev
 
-branches:
-  only:
-    - master
+before_script:
+ - psql -U postgres -c 'create database template_postgis'
+ - psql -U postgres -c 'create extension postgis' -d template_postgis
+ - if [[ "${CXX}" == 'g++' ]]; then export JOBS=2; sudo apt-get install gcc-4.8 g++-4.8; export CXX="$(which g++-4.8)"; export CC="$(which gcc-4.8)"; fi;
+ - if [[ "${CXX}" == 'clang++' ]]; then export JOBS=4; export CXX="$(which clang++)"; export CC="$(which clang)"; fi;
 
-notifications:
-  irc:
-    channels:
-      - "irc.freenode.org#mapnik"
-    use_notice: true
+script:
+ - rm -rf ./git
+ - ./configure CXX="${CXX}" CC="${CC}" CUSTOM_CXXFLAGS="${CUSTOM_CXXFLAGS}" CUSTOM_LDFLAGS="${CUSTOM_LDFLAGS}" XML_PARSER="${XML_PARSER}" ENABLE_LOG="${ENABLE_LOG}" DEBUG="${DEBUG}" DEMO="${DEMO}" BENCHMARK="${BENCHMARK}" CPP_TESTS=True CAIRO=True FAST=True || cat config.log
+ - if [[ "${DEBUG}" == True ]]; then export JOBS=$((JOBS/2)); fi;
+ - make
+ - git clone --depth=1 https://github.com/mapbox/mapnik-test-data tests/data/mapnik-test-data
+ - make test
+ - source localize.sh && make grind
+ - if [[ ${BENCHMARK} != False ]]; then make bench; fi;
+ - if [[ ${BENCHMARK} != False ]]; then for i in $(ls tests/visual_tests/styles/*xml); do echo $i;./benchmark/out/test_rendering --name "text rendering" --map $i --width 1024 --height 1024 --iterations 2 --threads 10;done;fi
diff --git a/AUTHORS.md b/AUTHORS.md
index e980272..25aa969 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -6,26 +6,37 @@ Mapnik is written by Artem Pavlenko with contributions from:
 * AJ Ashton
 * Matt Amos
 * Lucio Asnaghi
+* Alexandre Bonnasseau
 * Justin Bronn
+* Joel Brown
 * Christopher Brown
 * Jon Burgess
+* Stephan Bösch-Plepelits
+* Manel Clos
 * Toby Collet
 * Robert Coup
 * Berteun Damman
-* Craig de Stigter 
+* Petr Dlouhy
+* Jiri Drbalek
 * Jean-Francois Doyon
 * David Eastcott
+* Seth Fitzsimmons
+* Sean Gillies
 * Krzysztof Godlewski
 * Beau Gunderson
 * John Hague
 * Dominic Hargreaves
+* Axel Haustant
 * Aubrey Holland
+* Jordan Hollinger
 * Tom Hughes
 * Konstantin Käfer
 * Mak Kolybabi
 * Peter Körner
 * Hermann Kraus
 * Stella Laurenzo
+* XinGang Li
+* lightmare
 * David Leaver
 * Carlos López
 * Dennis Luxen
@@ -33,12 +44,15 @@ Mapnik is written by Artem Pavlenko with contributions from:
 * Michal Migurski
 * Andrii Mishkovskyi
 * Ben Moores
+* Mike Morris
 * Dražen Odobašić
 * Cameron Patrick
+* Clint Pells
 * Igor Podolskiy
 * Reid Priedhorsky
 * Brian Quinion
 * Marcin Rudowski
+* Sandro Santilli
 * Christopher Schmidt
 * Andreas Schneider
 * Vincent Schut
@@ -49,9 +63,12 @@ Mapnik is written by Artem Pavlenko with contributions from:
 * Vince Spader
 * Philipp Spitzer
 * Dane Springmeyer
+* Craig de Stigter
 * Dave Stubbs
 * River Tarnell
+* Cezary Tarnowski
 * Oliver Tonnhofer
+* Jochen Topf
 * Alberto Valverde
 * Martijn van Oosterhout 
 * Andreas Volz
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9920601..ce99eba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,131 @@ Developers: Please commit along with changes.
 
 For a complete change history, see the git log.
 
+## 3.0.0
+
+- Improved support for International Text (now uses harfbuzz library for text shaping)
+- Uses latest c++11 features for better performance (especially map loading)
+- Expressions everywhere: all symbolizer properties can now be data driven expression (which the exception of `face-name` and `fontset-name`).
+- New functions supported in expressions: `exp`, `sin`, `cos`, `tan`, `atan`, `abs`.
+- Pattern symbolizers now support SVG input and applying transformations on them dynamically
+- Experimental / interface may change: `@variables` can be passed to renderer and evaluated in expressions
+- Supports being built with clang++ using `-fvisibility=hidden -flto` for smaller binaries
+- Supports being built with Visual Studio 2014 CTP #3
+- Shield icons are now pixel snapped for crisp rendering
+- `MarkersSymbolizer` now supports `avoid-edges`, `offset`, `geometry-transform`, `simplify` for `line` placement and two new `placement` options called `vertex-last` and `vertex-first` to place a single marker at the end or beginning of a path. Also `clip` is now respected when rendering markers on a LineString 
+geometry.
+- `TextSymbolizer` now supports `smooth`, `simplify`, `halo-opacity`, `halo-comp-op`, and `halo-transform`
+- `ShieldSymbolizer` now supports `smooth`, `simplify`, `halo-opacity`, `halo-comp-op`, and `halo-transform`
+
+
+Released ...
+
+(Packaged from ...)
+
+Summary: TODO
+
+- PostGIS: Added support for rendering 3D and 4D geometries (previously silently skipped) (#44)
+
+- AGG renderer: fixed geometry offsetting to work after smoothing to produce more consistent results (#2202)
+
+- AGG renderer: increased `vertex_dist_epsilon` to ensure nearly coincident points are discarded more readily (#2196)
+
+- GDAL plugin: Added back support for user driven `nodata` on rgb(a) images (#2023)
+
+- GDAL plugin: Allowed nodata to override alpha band if set on rgba images (#2023)
+
+- GDAL plugin: Added `nodata_tolerance` option to set nearby pixels transparent (has similar effect to the `nearblack` program) (#2023)
+
+- Added support for web fonts: .woff format (#2113)
+
+- Added missing support for `geometry-transform` in `line-pattern` and `polygon-pattern` symbolizers (#2065)
+
+- Dropped support for Sun compiler
+
+- Upgraded unifont to `unifont-6.3.20131020`
+
+- CSV Plugin: added the ability to pass an `extent` in options
+
+- Fixed crash when rendering to cairo context from python (#2031)
+
+- Moved `label-position-tolerance` from unsigned type to double
+
+- Added support for more seamless blurring by rendering to a larger internal image to avoid edge effects (#1478)
+
+- Fixed rendering of large shapes at high zoom levels, which might dissapear due to integer overflow. This
+  bug was previously fixable when geometries were clipped, but would, until now, re-appear if clipping was turned
+  off for a symbolizer (#2000)
+
+- Added single color argument support to `colorize-alpha` to allow colorizing alpha with one color.
+
+- Added `color-to-alpha` `image-filter` to allow for applying alpha in proportion to color similiarity (#2023)
+
+- Added Async support to PostGIS plugin - https://github.com/mapnik/mapnik/wiki/PostGIS-Async
+
+- Fixed alpha handling bug with `comp-op:dst-over` (#1995)
+
+- Fixed alpha handling bug with building-fill-opacity (#2011)
+
+- Optimized mapnik.Path.to_wkb
+
+- Python: added `__geo_interface__` to mapnik.Feature and mapnik.Path (#2009)
+
+- Python: Exposed optimized WKTReader for parsing WKT into geometry paths (6bfbb53)
+
+- Optimized expression evaluation of text by avoiding extra copy (1dd1275)
+
+- Added Map level `background-image-comp-op` to control the compositing operation used to blend the 
+`background-image` onto the `background-color`. Has no meaning if `background-color` or `background-image`
+are not set. (#1966)
+
+- Added Map level `background-image-opacity` to dynamically set the opacity of the `background-image` (#1966)
+
+- Removed `RENDERING_STATS` compile option since it should be replaced with a better solution (#1956)
+
+- Added support to experimental `svg_renderer` for grouping layers for inkscape and illustrator (#1917)
+
+- Fixed compile of python bindings against Python 3.x
+
+- Optimized SVG loading by improving color parsing speed (#1918)
+
+- Fixed startup problem when fonts cannot be read due to lacking permissions (#1919)
+
+- Fixed bad behavior when negative image dimensions are requested (#1927)
+
+- Fixed handling of `marker-ignore-placement:true` when `marker-placement:line` (#1931)
+
+- Fixed handling of svg `opacity` in Cairo renderer (#1943)
+
+- Fixed handling of SVG files which contain empty `<g>` (#1944)
+
+- Fixed various 32bit test failures
+
+- Fixed compile against icu when by using `U_NAMESPACE_QUALIFIER`
+
+- Fixed missing support for using PathExpression in `marker-file` (#1952)
+
+- Added support for `line-pattern-offset` (#1991)
+
+- Added support for building on Android (tested with `android-ndk-r9`)
+
+- Added support for compiling with both -ansi (aka -std=c++98) and -std=c++11
+
+- Added support for compiling and linking on OS X against libc++
+
+- Fixed regression in handling `F` type dbf fields, introduced in v2.2.0.
+
+- Added the ability to create a mapnik Feature from a geojson feature with `mapnik.Feature.from_geojson` in python.
+
+- Added to python bindings: `has_tiff`, `has_png`, `has_webp`, `has_proj4`, `has_svg_renderer`, and `has_grid_renderer`
+
+- Made it possible to disable compilation of `grid_renderer` with `./configure GRID_RENDERER=False` (#1962)
+
+- Added `premultiplied` property on mapnik::image_32 / mapnik.Image to enable knowledge of premultiplied status of image buffer.
+
+- Added `webp` image encoding and decoding support (#1955)
+
+- Added `scale-hsla` image-filter that allows scaling colors in HSL color space. RGB is converted to HSL (hue-saturation-lightness) and then each value (and the original alpha value) is stretched based on the specified scaling values. An example syntax is `scale-hsla(0,1,0,1,0,1,0,1)` which means no change because the full range will be kept (0 for lowest, 1 for highest). Other examples are: 1) `scale-hsla(0,0,0,1,0,1,0,1)` which would force all colors to be red in hue in the same way `s [...]
+
 ## 2.2.0
 
 Released June 3rd, 2013
@@ -22,6 +147,14 @@ Summary: The 2.2.0 release is primarily a performance and stability release. The
 
 - Added faster reprojection support between `epsg:3857` and `epsg:4326` (#1705,#1703,#1579)
 
+- Added `colorize-alpha` image filter that applies user provided color gradients based on level of alpha.
+  Accepts one or more colors separated by commas. Each color can be paired with an `offset` value separated
+  by a space that is either `0-100%` or `0.0-1.0`. An `offset` of `0` is implied and the default. For background
+  on where this design came from see http://www.w3.org/TR/SVG/pservers.html#GradientStops. A simple example
+  of colorizing alpha into a "rainbow" is `colorize-alpha(blue,cyan,lightgreen, yellow, orange, red)`. An example of
+  using offsets and the variety of supported color encodings is to produce a ramp which sharp contrast between `blue`
+  and `cyan` is `colorize-alpha(blue 30%, cyan, yellow 0.7 , rgb(0%,80%,0%) 90%)` (#1371).
+
 - Fixed concurrency problem when using cursors in postgis plugin (#1823,#1588)
 
 - Fixed postgres connection pool leaks when using `persist_connection=false` (#1764)
@@ -233,9 +366,9 @@ Released Aug 23, 2012
 
 - Improved logging/debugging system with release logs and file redirection (https://github.com/mapnik/mapnik/wiki/Runtime-Logging) (#937 and partially #986, #467)
 
-- GDAL: allow setting nodata value on the fly (will override value if nodata is set in data) (#1161)
+- GDAL: allow setting `nodata` value on the fly (will override value if `nodata` is set in data) (#1161)
 
-- GDAL: respect nodata for paletted/colormapped images (#1160)
+- GDAL: respect `nodata` for paletted/colormapped images (#1160)
 
 - PostGIS: Added a new option called `autodetect_key_field` (by default false) that if true will
   trigger autodetection of the table primary key allowing for feature.id() to represent
@@ -372,7 +505,7 @@ Released September 26, 2011
   cannot possibly be projected into the map srs or the user wishes to control map bounds without
   modifying the extents of each layer.
 
-- Support for NODATA values with grey and rgb images in GDAL plugin (#727)
+- Support for `nodata` values with grey and rgb images in GDAL plugin (#727)
 
 - Print warning if invalid XML property names are used (#110)
 
diff --git a/INSTALL.md b/INSTALL.md
index 156f9b3..f2787e6 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -4,8 +4,26 @@ Mapnik is cross platform and runs on Linux, Mac OSX, Solaris, *BSD, and Windows.
 
 To configure and build Mapnik do:
 
-    ./configure
-    make
+```bash
+    $ ./configure
+    $ make
+```
+
+To trigger parallel compilation you can pass a JOBS value to make:
+
+```bash
+    $ JOBS=4 make
+```
+
+(Note that compiling Mapnik needs several GBytes of RAM. If you use parallel compiliation it needs more.)
+
+To use a Python interpreter that is not named `python` for your build, do
+something like the following instead:
+
+```bash
+    $ PYTHON=python2 ./configure
+    $ make PYTHON=python2
+```
 
 NOTE: the above will not work on windows, rather see https://github.com/mapnik/mapnik/wiki/WindowsInstallation
 
@@ -32,47 +50,56 @@ For troubleshooting help see https://github.com/mapnik/mapnik/wiki/InstallationT
 
 Build system dependencies are:
 
- * C++ compiler (like g++ or clang++)
- * >= 2 GB RAM
+ * C++ compiler supporting `-std=c++11` (like >= g++ 4.8 or >= clang++ 3.4)
+ * >= 2 GB RAM (> 5 GB for g++)
  * Python 2.4-2.7 
  * Scons (a copy is bundled)
 
 Mapnik Core depends on:
 
  * Boost
-    - >= 1.47 is required.
+    - >= 1.47 is required and >= 1.56 recommended
     - These libraries are used:
       - filesystem
       - system
-      - thread (if mapnik threadsafe support is required, default on)
+      - thread (for python bindings only)
       - regex (optionally built with icu regex support)
       - program_options (optionally for mapnik command line programs)
  * libicuuc >= 4.0 (ideally >= 4.2) - International Components for Unicode
- * libpng >= 1.2.x - PNG graphics
- * libjpeg - JPEG graphics
- * libtiff - TIFF graphics 
  * libz - Zlib compression
  * libfreetype - Freetype2 for font support (Install requires freetype-config)
  * libxml2 - XML parsing (Install requires xml2-config)
- * libproj - PROJ.4 projection library
+ * libharfbuzz - an OpenType text shaping engine (>=0.9.34 needed for CSS font-feature-settings support)
+
+Mapnik Core optionally depends on:
+
+ * libpng >= 1.2.x - PNG graphics (Default enabled, if found)
+ * libjpeg - JPEG graphics (Default enabled, if found)
+ * libtiff - TIFF graphics (Default enabled, if found)
+ * libwebp - WEBP graphics  (Default enabled, if found)
+ * libproj - PROJ.4 projection library (Default enabled, if found)
 
 Mapnik Python bindings depend on:
 
  * Python 2.5-2.7 or >= 3.2 
  * Boost python
+ * simplejson module if using <= 2.5
 
-Note: Python3k is supported, see: https://github.com/mapnik/mapnik/wiki/Python3k
+Note: Python 3.x is supported, see: https://github.com/mapnik/mapnik/wiki/Python3k
 
-Optional dependencies:
+Additional optional dependencies:
 
  * Cairo >= 1.6.0 - Graphics library for output formats like PDF, PS, and SVG
     - pkg-config - Required for building with cairo support
     - pycairo - Python bindings for cairo
- * libpq - PostgreSQL libraries (For PostGIS plugin support)
+ * PostgreSQL (for PostGIS plugin support)
+    - libpq - PostreSQL libraries
+    - pg_config - PostgreSQL installation capabilities
  * libgdal - GDAL/OGR input (For gdal and ogr plugin support)
  * libsqlite3 - SQLite input (needs RTree support builtin) (sqlite plugin support)
  * libocci - Oracle input plugin support
  * libcurl - OSM input plugin support
+ * librasterlite - Rasterlite input plugin support
 
 Instructions for installing many of these dependencies on
 various platforms can be found at the Mapnik Wiki:
diff --git a/Makefile b/Makefile
index 8c05035..0ae5d41 100755
--- a/Makefile
+++ b/Makefile
@@ -1,43 +1,36 @@
-UNAME := $(shell uname)
-LINK_FIX=LD_LIBRARY_PATH
-ifeq ($(UNAME), Darwin)
-	LINK_FIX=DYLD_LIBRARY_PATH
-else
-endif
 
-OS:=$(shell uname -s)
+OS := $(shell uname -s)
+
+PYTHON = python
 
 ifeq ($(JOBS),)
 	JOBS:=1
-	ifeq ($(OS),Linux)
-		JOBS:=$(shell grep -c ^processor /proc/cpuinfo)
-	endif
-	ifeq ($(OS),Darwin)
-		JOBS:=$(shell sysctl -n hw.ncpu)
-	endif
 endif
 
 all: mapnik
 
 install:
-	@python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install
+	$(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install
 
 mapnik:
-	@python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1
+	$(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1
 
 clean:
-	@python scons/scons.py -j$(JOBS) -c --config=cache --implicit-cache --max-drift=1
+	@$(PYTHON) scons/scons.py -j$(JOBS) -c --config=cache --implicit-cache --max-drift=1
 	@if test -e ".sconsign.dblite"; then rm ".sconsign.dblite"; fi
-	@if test -e "config.log"; then rm  "config.log"; fi
+	@if test -e "config.log"; then rm "config.log"; fi
+	@if test -e "config.cache"; then rm "config.cache"; fi
 	@if test -e ".sconf_temp/"; then rm -r ".sconf_temp/"; fi
 	@find ./ -name "*.pyc" -exec rm {} \;
 	@find ./ -name "*.os" -exec rm {} \;
+	@find ./ -name "*.dylib" -exec rm {} \;
+	@find ./ -name "*.so" -exec rm {} \;
 	@find ./ -name "*.o" -exec rm {} \;
+	@find ./ -name "*.a" -exec rm {} \;
 	@find ./ -name "*.pyc" -exec rm {} \;
 	@if test -e "bindings/python/mapnik/paths.py"; then rm "bindings/python/mapnik/paths.py"; fi
 
 distclean:
-	@if test -e "config.cache"; then rm "config.cache"; fi
 	if test -e "config.py"; then mv "config.py" "config.py.backup"; fi
 
 reset: distclean
@@ -46,28 +39,29 @@ rebuild:
 	make uninstall && make clean && time make && make install
 
 uninstall:
-	@python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 uninstall
+	@$(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 uninstall
 
 test:
-	@ ./run_tests
+	./run_tests
 
 test-local:
-	@echo "*** Boostrapping local test environment..."
-	@export ${LINK_FIX}=`pwd`/src:${${LINK_FIX}} && \
-	export PATH=`pwd`/utils/mapnik-config/:${PATH} && \
-	export PYTHONPATH=`pwd`/bindings/python/:${PYTHONPATH} && \
-	export MAPNIK_FONT_DIRECTORY=`pwd`/fonts/dejavu-fonts-ttf-2.33/ttf/ && \
-	export MAPNIK_INPUT_PLUGINS_DIRECTORY=`pwd`/plugins/input/ && \
 	make test
 
-bench:
-	@export ${LINK_FIX}=`pwd`/src:${${LINK_FIX}} && \
-	./benchmark/run
+test-visual:
+	bash -c "source ./localize.sh && python tests/visual_tests/test.py -q"
+
+test-python:
+	bash -c "source ./localize.sh && python tests/run_tests.py -q"
+
+test-cpp:
+	./tests/cpp_tests/run
 
 check: test-local
 
+bench:
+	./benchmark/run
+
 demo:
-	@echo "*** Running rundemo.cpp…"
 	cd demo/c++; ./rundemo `mapnik-config --prefix`
 
 pep8:
diff --git a/README.md b/README.md
index 835152f..dcb049e 100644
--- a/README.md
+++ b/README.md
@@ -10,21 +10,16 @@ _/      _/    _/_/_/  _/_/_/    _/    _/  _/  _/    _/
 
 [![Build Status](https://secure.travis-ci.org/mapnik/mapnik.png)](http://travis-ci.org/mapnik/mapnik)
 
-# What is Mapnik?
-
-Mapnik is an open source toolkit and API for developing mapping applications. At the core is a C++ shared library providing algorithms and patterns for spatial data access and visualization. High-level bindings for Java, JavaScript, Python, and Ruby facilitate rapid application development in a variety of environments.
-
-# Overview
+Mapnik is an open source toolkit for developing mapping applications. At the core is a C++ shared library providing algorithms and patterns for spatial data access and visualization.
 
 Mapnik is basically a collection of geographic objects like maps, layers, datasources, features, and geometries. The library doesn't rely on any OS specific "windowing systems" and it can be deployed to any server environment. It is intended to play fair in a multi-threaded environment and is aimed primarily, but not exclusively, at web-based development.
 
-
-For further information see [http://mapnik.org](http://mapnik.org) and also our [wiki documentation](https://github.com/mapnik/mapnik/wiki) here on GitHub.
+For further information see [http://mapnik.org](http://mapnik.org) and also our [wiki documentation](https://github.com/mapnik/mapnik/wiki).
 
 # Installation
 
-See [INSTALL.md](https://github.com/mapnik/mapnik/blob/master/INSTALL.md) for installation instructions.
+See [INSTALL.md](https://github.com/mapnik/mapnik/blob/master/INSTALL.md) for installation instructions and the [Install](https://github.com/mapnik/mapnik/wiki/Mapnik-Installation) page on the wiki for guides.
 
 # License
 
-Mapnik software is free and is released under LGPL ([GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html_). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information.
+Mapnik software is free and is released under the LGPL ([GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html_)). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information.
diff --git a/SConstruct b/SConstruct
index d581389..80786fe 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1,6 +1,6 @@
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2009 Artem Pavlenko, Jean-Francois Doyon, Dane Springmeyer
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -36,11 +36,19 @@ except:
 LIBDIR_SCHEMA_DEFAULT='lib'
 severities = ['debug', 'warn', 'error', 'none']
 
+ICU_INCLUDES_DEFAULT='/usr/include'
+ICU_LIBS_DEFAULT='/usr/'
+
 DEFAULT_CC = "gcc"
 DEFAULT_CXX = "g++"
+DEFAULT_CXX11_CXXFLAGS = " -std=c++11"
+DEFAULT_CXX11_LINKFLAGS = ""
 if sys.platform == 'darwin':
     DEFAULT_CC = "clang"
     DEFAULT_CXX = "clang++"
+    # homebrew default
+    ICU_INCLUDES_DEFAULT='/usr/local/opt/icu4c/include/'
+    ICU_LIBS_DEFAULT='/usr/local/opt/icu4c/'
 
 py3 = None
 
@@ -73,7 +81,9 @@ pretty_dep_names = {
     'jpeg':'JPEG C library | configure with JPEG_LIBS & JPEG_INCLUDES',
     'tiff':'TIFF C library | configure with TIFF_LIBS & TIFF_INCLUDES',
     'png':'PNG C library | configure with PNG_LIBS & PNG_INCLUDES',
+    'webp':'WEBP C library | configure with WEBP_LIBS & WEBP_INCLUDES',
     'icuuc':'ICU C++ library | configure with ICU_LIBS & ICU_INCLUDES or use ICU_LIB_NAME to specify custom lib name  | more info: http://site.icu-project.org/',
+    'harfbuzz':'HarfBuzz text shaping library | configure with HB_LIBS & HB_INCLUDES',
     'z':'Z compression library | more info: http://www.zlib.net/',
     'm':'Basic math library, part of C++ stlib',
     'pkg-config':'pkg-config tool | more info: http://pkg-config.freedesktop.org',
@@ -83,7 +93,6 @@ pretty_dep_names = {
     'gdal-config':'gdal-config program | try setting GDAL_CONFIG SCons option',
     'freetype-config':'freetype-config program | try setting FREETYPE_CONFIG SCons option',
     'osm':'more info: https://github.com/mapnik/mapnik/wiki/OsmPlugin',
-    'curl':'libcurl is required for the "osm" plugin - more info: https://github.com/mapnik/mapnik/wiki/OsmPlugin',
     'boost_regex_icu':'libboost_regex built with optional ICU unicode support is needed for unicode regex support in mapnik.',
     'sqlite_rtree':'The SQLite plugin requires libsqlite3 built with RTREE support (-DSQLITE_ENABLE_RTREE=1)',
     'pgsql2sqlite_rtree':'The pgsql2sqlite program requires libsqlite3 built with RTREE support (-DSQLITE_ENABLE_RTREE=1)'
@@ -94,6 +103,7 @@ pretty_dep_names = {
 PLUGINS = { # plugins with external dependencies
             # configured by calling project, hence 'path':None
             'postgis': {'default':True,'path':None,'inc':'libpq-fe.h','lib':'pq','lang':'C'},
+            'pgraster': {'default':True,'path':None,'inc':'libpq-fe.h','lib':'pq','lang':'C'},
             'gdal':    {'default':True,'path':None,'inc':'gdal_priv.h','lib':'gdal','lang':'C++'},
             'ogr':     {'default':True,'path':None,'inc':'ogrsf_frmts.h','lib':'gdal','lang':'C++'},
             # configured with custom paths, hence 'path': PREFIX/INCLUDES/LIBS
@@ -102,21 +112,29 @@ PLUGINS = { # plugins with external dependencies
             'rasterlite':  {'default':False,'path':'RASTERLITE','inc':['sqlite3.h','rasterlite.h'],'lib':'rasterlite','lang':'C'},
 
             # todo: osm plugin does also depend on libxml2 (but there is a separate check for that)
-            'osm':     {'default':False,'path':None,'inc':'curl/curl.h','lib':'curl','lang':'C'},
+            'osm':     {'default':False,'path':None,'inc':None,'lib':None,'lang':'C'},
 
             # plugins without external dependencies requiring CheckLibWithHeader...
             'shape':   {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
             'csv':     {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
             'raster':  {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
             'geojson': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
+            'topojson':{'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
             'python':  {'default':False,'path':None,'inc':None,'lib':None,'lang':'C++'},
             }
 
 
+def init_environment(env):
+    env.Decider('MD5-timestamp')
+    env.SourceCode(".", None)
+    if os.environ.get('RANLIB'):
+        env['RANLIB'] = os.environ['RANLIB']
+    if os.environ.get('AR'):
+        env['AR'] = os.environ['AR']
+
 #### SCons build options and initial setup ####
 env = Environment(ENV=os.environ)
-env.Decider('MD5-timestamp')
-env.SourceCode(".", None)
+init_environment(env)
 
 def color_print(color,text,newline=True):
     # 1 - red
@@ -175,7 +193,7 @@ def shortest_name(libs):
 
 def rm_path(item,set,_env):
     for i in _env[set]:
-        if item in i:
+        if i.startswith(item):
             _env[set].remove(i)
 
 def sort_paths(items,priority):
@@ -296,8 +314,9 @@ opts.AddVariables(
     ('PYTHON_PREFIX','Custom install path "prefix" for python bindings (default of no prefix)',''),
     ('DESTDIR', 'The root directory to install into. Useful mainly for binary package building', '/'),
     ('PATH', 'A custom path (or multiple paths divided by ":") to append to the $PATH env to prioritize usage of command line programs (if multiple are present on the system)', ''),
-    ('PATH_REMOVE', 'A path prefix to exclude from all known command and compile paths', ''),
+    ('PATH_REMOVE', 'A path prefix to exclude from all known command and compile paths (create multiple excludes separated by :)', ''),
     ('PATH_REPLACE', 'Two path prefixes (divided with a :) to search/replace from all known command and compile paths', ''),
+    ('MAPNIK_NAME', 'Name of library', 'mapnik'),
 
     # Boost variables
     # default is '/usr/include', see FindBoost method below
@@ -312,10 +331,11 @@ opts.AddVariables(
     # Variables for required dependencies
     ('FREETYPE_CONFIG', 'The path to the freetype-config executable.', 'freetype-config'),
     ('XML2_CONFIG', 'The path to the xml2-config executable.', 'xml2-config'),
-    PathVariable('ICU_INCLUDES', 'Search path for ICU include files', '/usr/include', PathVariable.PathAccept),
-    PathVariable('ICU_LIBS','Search path for ICU include files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
+    PathVariable('ICU_INCLUDES', 'Search path for ICU include files', ICU_INCLUDES_DEFAULT, PathVariable.PathAccept),
+    PathVariable('ICU_LIBS','Search path for ICU include files',ICU_LIBS_DEFAULT + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
     ('ICU_LIB_NAME', 'The library name for icu (such as icuuc, sicuuc, or icucore)', 'icuuc', PathVariable.PathAccept),
-
+    PathVariable('HB_INCLUDES', 'Search path for HarfBuzz include files', '/usr/include', PathVariable.PathAccept),
+    PathVariable('HB_LIBS','Search path for HarfBuzz include files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
     BoolVariable('PNG', 'Build Mapnik with PNG read and write support', 'True'),
     PathVariable('PNG_INCLUDES', 'Search path for libpng include files', '/usr/include', PathVariable.PathAccept),
     PathVariable('PNG_LIBS','Search path for libpng library files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
@@ -325,6 +345,9 @@ opts.AddVariables(
     BoolVariable('TIFF', 'Build Mapnik with TIFF read and write support', 'True'),
     PathVariable('TIFF_INCLUDES', 'Search path for libtiff include files', '/usr/include', PathVariable.PathAccept),
     PathVariable('TIFF_LIBS', 'Search path for libtiff library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
+    BoolVariable('WEBP', 'Build Mapnik with WEBP read', 'True'),
+    PathVariable('WEBP_INCLUDES', 'Search path for libwebp include files', '/usr/include', PathVariable.PathAccept),
+    PathVariable('WEBP_LIBS','Search path for libwebp library files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
     BoolVariable('PROJ', 'Build Mapnik with proj4 support to enable transformations between many different projections', 'True'),
     PathVariable('PROJ_INCLUDES', 'Search path for PROJ.4 include files', '/usr/include', PathVariable.PathAccept),
     PathVariable('PROJ_LIBS', 'Search path for PROJ.4 library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
@@ -332,8 +355,7 @@ opts.AddVariables(
 
     # Variables affecting rendering back-ends
 
-    BoolVariable('RENDERING_STATS', 'Output rendering statistics during style processing', 'False'),
-
+    BoolVariable('GRID_RENDERER', 'build support for native grid renderer', 'True'),
     BoolVariable('SVG_RENDERER', 'build support for native svg renderer', 'False'),
     BoolVariable('CPP_TESTS', 'Compile the C++ tests', 'True'),
     BoolVariable('BENCHMARK', 'Compile the C++ benchmark scripts', 'False'),
@@ -369,15 +391,16 @@ opts.AddVariables(
     BoolVariable('FRAMEWORK_PYTHON', 'Link against Framework Python on Mac OS X', 'True'),
     BoolVariable('PYTHON_DYNAMIC_LOOKUP', 'On OSX, do not directly link python lib, but rather dynamically lookup symbols', 'True'),
     ('FRAMEWORK_SEARCH_PATH','Custom framework search path on Mac OS X', ''),
-    BoolVariable('FULL_LIB_PATH', 'Use the full path for the libmapnik.dylib "install_name" when linking on Mac OS X', 'True'),
+    BoolVariable('FULL_LIB_PATH', 'Embed the full and absolute path to libmapnik when linking ("install_name" on OS X/rpath on Linux)', 'True'),
+    BoolVariable('ENABLE_SONAME', 'Embed a soname in libmapnik on Linux', 'True'),
     ListVariable('BINDINGS','Language bindings to build','all',['python']),
     EnumVariable('THREADING','Set threading support','multi', ['multi','single']),
     EnumVariable('XMLPARSER','Set xml parser','libxml2', ['libxml2','ptree']),
-    ('JOBS', 'Set the number of parallel compilations', "1", lambda key, value, env: int(value), int),
     BoolVariable('DEMO', 'Compile demo c++ application', 'True'),
     BoolVariable('PGSQL2SQLITE', 'Compile and install a utility to convert postgres tables to sqlite', 'False'),
     BoolVariable('SHAPEINDEX', 'Compile and install a utility to generate shapefile indexes in the custom format (.index) Mapnik supports', 'True'),
     BoolVariable('SVG2PNG', 'Compile and install a utility to generate render an svg file to a png on the command line', 'False'),
+    BoolVariable('NIK2IMG', 'Compile and install a utility to generate render a map to an image', 'True'),
     BoolVariable('COLOR_PRINT', 'Print build status information in color', 'True'),
     BoolVariable('SAMPLE_INPUT_PLUGINS', 'Compile and install sample plugins', 'False'),
     BoolVariable('BIGINT', 'Compile support for 64-bit integers in mapnik::value', 'True'),
@@ -414,7 +437,6 @@ pickle_store = [# Scons internal variables
         'BOOST_APPEND',
         'LIBDIR_SCHEMA',
         'REQUESTED_PLUGINS',
-        'SUNCC',
         'PYTHON_VERSION',
         'PYTHON_INCLUDES',
         'PYTHON_INSTALL_LOCATION',
@@ -445,10 +467,12 @@ pickle_store = [# Scons internal variables
         'CAIRO_LIBPATHS',
         'CAIRO_ALL_LIBS',
         'CAIRO_CPPPATHS',
+        'GRID_RENDERER',
         'SVG_RENDERER',
         'SQLITE_LINKFLAGS',
         'BOOST_LIB_VERSION_FROM_HEADER',
-        'BIGINT'
+        'BIGINT',
+        'HOST'
         ]
 
 # Add all other user configurable options to pickle pickle_store
@@ -469,15 +493,19 @@ HELP_REQUESTED = False
 if ('-h' in command_line_args) or ('--help' in command_line_args):
     HELP_REQUESTED = True
 
-if ('install' not in command_line_args) and ('-c' in command_line_args) or ('--clean' in command_line_args):
-    HELP_REQUESTED = True
-
 if 'configure' in command_line_args and not HELP_REQUESTED:
     force_configure = True
 elif HELP_REQUESTED:
     # to ensure config gets skipped when help is requested
     preconfigured = True
 
+# need no-op for clean on fresh checkout
+# https://github.com/mapnik/mapnik/issues/2112
+if not os.path.exists(SCONS_LOCAL_LOG) and not os.path.exists(SCONS_CONFIGURE_CACHE) \
+  and ('-c' in command_line_args or '--clean' in command_line_args):
+    print 'all good: nothing to clean, but you might want to run "make distclean"'
+    Exit(0)
+
 # initially populate environment with defaults and any possible custom arguments
 opts.Update(env)
 
@@ -592,10 +620,12 @@ def parse_config(context, config, checks='--libs --cflags'):
     if not parsed:
         if config in ('GDAL_CONFIG'):
             # optional deps...
-            env['SKIPPED_DEPS'].append(tool)
+            if tool not in env['SKIPPED_DEPS']:
+                env['SKIPPED_DEPS'].append(tool)
             conf.rollback_option(config)
         else: # freetype and libxml2, not optional
-            env['MISSING_DEPS'].append(tool)
+            if tool not in env['MISSING_DEPS']:
+                env['MISSING_DEPS'].append(tool)
     context.Result( ret )
     return ret
 
@@ -610,6 +640,10 @@ def get_pkg_lib(context, config, lib):
     if ret:
         try:
             value = call(cmd,silent=True)
+            if ' ' in value:
+                parts = value.split(' ')
+                if len(parts) > 1:
+                    value = parts[1]
             libnames = re.findall(libpattern,value)
             if libnames:
                 libname = libnames[0]
@@ -647,7 +681,8 @@ def ogr_enabled(context):
     context.Message( 'Checking if gdal is ogr enabled... ')
     ret = context.TryAction('%s --ogr-enabled' % env['GDAL_CONFIG'])[0]
     if not ret:
-        env['SKIPPED_DEPS'].append('ogr')
+        if 'ogr' not in env['SKIPPED_DEPS']:
+            env['SKIPPED_DEPS'].append('ogr')
     context.Result( ret )
     return ret
 
@@ -658,48 +693,6 @@ def rollback_option(context,variable):
         if item.key == variable:
             env[variable] = item.default
 
-def update_linux_project_files():
-    headers_content = []
-    source_content = []
-
-    directories = [
-        'include',
-        'src',
-        'bindings',
-        'boost',
-        'plugins',
-        'deps',
-    ]
-
-    def iterate_dirs(headers_content, source_content, d):
-        if not "uninstall-" in d:
-            for root, subFolders, files in os.walk(d):
-                for f in files:
-                    if f.endswith(".h") or f.endswith(".hpp"):
-                        headers_content.append("  ../%s \\" % os.path.join(root, f))
-                    if f.endswith(".cpp") or f.endswith(".c"):
-                        source_content.append("  ../%s \\" % os.path.join(root, f))
-                for sd in subFolders:
-                    headers_content, source_content = \
-                        iterate_dirs(headers_content, source_content, os.path.join(root, sd))
-        return headers_content, source_content
-
-    for d in directories:
-        headers_content, source_content = \
-            iterate_dirs(headers_content, source_content, d)
-
-    headers_content.sort()
-    headers_content = ['HEADERS += \\'] + headers_content + ['','']
-
-    source_content.sort()
-    source_content = ['SOURCES += \\'] + source_content + ['','']
-
-    files_name = os.path.join('.', 'workspace', 'All.files')
-    f = open(files_name, "w")
-    f.writelines([l + '\n' for l in headers_content])
-    f.writelines([l + '\n' for l in source_content])
-    f.close()
-
 def FindBoost(context, prefixes, thread_flag):
     """Routine to auto-find boost header dir, lib dir, and library naming structure.
 
@@ -740,16 +733,20 @@ def FindBoost(context, prefixes, thread_flag):
     if BOOST_LIB_DIR:
         msg += '\nFound boost libs: %s' % BOOST_LIB_DIR
         env['BOOST_LIBS'] = BOOST_LIB_DIR
-    else:
+    elif not env['BOOST_LIBS']:
         env['BOOST_LIBS'] = '/usr/' + env['LIBDIR_SCHEMA']
         msg += '\nUsing default boost lib dir: %s' % env['BOOST_LIBS']
+    else:
+        msg += '\nUsing boost lib dir: %s' % env['BOOST_LIBS']
 
     if BOOST_INCLUDE_DIR:
         msg += '\nFound boost headers: %s' % BOOST_INCLUDE_DIR
         env['BOOST_INCLUDES'] = BOOST_INCLUDE_DIR
-    else:
+    elif not env['BOOST_INCLUDES']:
         env['BOOST_INCLUDES'] = '/usr/include'
         msg += '\nUsing default boost include dir: %s' % env['BOOST_INCLUDES']
+    else:
+        msg += '\nUsing boost include dir: %s' % env['BOOST_INCLUDES']
 
     if not env['BOOST_TOOLKIT'] and not env['BOOST_ABI'] and not env['BOOST_VERSION']:
         if BOOST_APPEND:
@@ -851,26 +848,6 @@ return 0;
     context.Result(ret[0])
     return ret[1].strip()
 
-def GetMapnikLibVersion(context):
-    ret = context.TryRun("""
-
-#include <mapnik/version.hpp>
-#include <iostream>
-
-int main()
-{
-    std::cout << MAPNIK_VERSION_STRING << std::endl;
-    return 0;
-}
-
-""", '.cpp')
-    # hack to avoid printed output
-    context.did_show_result=1
-    context.Result(ret[0])
-    if not ret[1]:
-        return []
-    return ret[1].strip()
-
 def icu_at_least_four_two(context):
     ret = context.TryRun("""
 
@@ -902,7 +879,11 @@ int main()
 
 def boost_regex_has_icu(context):
     if env['RUNTIME_LINK'] == 'static':
-        context.env.AppendUnique(LIBS='icudata')
+        # re-order icu libs to ensure linux linker is happy
+        for lib_name in ['icui18n',env['ICU_LIB_NAME'],'icudata']:
+            if lib_name in context.env['LIBS']:
+                context.env['LIBS'].remove(lib_name)
+            context.env.Append(LIBS=lib_name)
     ret = context.TryRun("""
 
 #include <boost/regex/icu.hpp>
@@ -910,7 +891,7 @@ def boost_regex_has_icu(context):
 
 int main()
 {
-    UnicodeString ustr;
+    U_NAMESPACE_QUALIFIER UnicodeString ustr;
     try {
         boost::u32regex pattern = boost::make_u32regex(ustr);
     }
@@ -955,10 +936,12 @@ int main()
     if (rc != SQLITE_OK)
     {
         printf("error 2: %s\\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
     }
     else
     {
         printf("yes, has rtree!\\n");
+        sqlite3_close(db);
         return 0;
     }
 
@@ -975,6 +958,30 @@ int main()
         return True
     return False
 
+def supports_cxx11(context,silent=False):
+    ret = context.TryRun("""
+
+int main()
+{
+#if __cplusplus >= 201103
+    return 0;
+#else
+    return -1;
+#endif
+}
+
+""", '.cpp')
+    if not silent:
+        context.Message('Checking if compiler (%s) supports -std=c++11 flag... ' % context.env.get('CXX','CXX'))
+    if silent:
+        context.did_show_result=1
+    context.Result(ret[0])
+    if ret[0]:
+        return True
+    return False
+
+
+
 conf_tests = { 'prioritize_paths'      : prioritize_paths,
                'CheckPKGConfig'        : CheckPKGConfig,
                'CheckPKG'              : CheckPKG,
@@ -983,7 +990,6 @@ conf_tests = { 'prioritize_paths'      : prioritize_paths,
                'CheckBoost'            : CheckBoost,
                'CheckCairoHasFreetype' : CheckCairoHasFreetype,
                'GetBoostLibVersion'    : GetBoostLibVersion,
-               'GetMapnikLibVersion'   : GetMapnikLibVersion,
                'parse_config'          : parse_config,
                'parse_pg_config'       : parse_pg_config,
                'ogr_enabled'           : ogr_enabled,
@@ -992,8 +998,26 @@ conf_tests = { 'prioritize_paths'      : prioritize_paths,
                'icu_at_least_four_two' : icu_at_least_four_two,
                'boost_regex_has_icu'   : boost_regex_has_icu,
                'sqlite_has_rtree'      : sqlite_has_rtree,
+               'supports_cxx11'        : supports_cxx11,
                }
 
+def GetMapnikLibVersion():
+    ver = []
+    is_pre = False
+    for line in open('include/mapnik/version.hpp').readlines():
+        if line.startswith('#define MAPNIK_MAJOR_VERSION'):
+            ver.append(line.split(' ')[2].strip())
+        if line.startswith('#define MAPNIK_MINOR_VERSION'):
+            ver.append(line.split(' ')[2].strip())
+        if line.startswith('#define MAPNIK_PATCH_VERSION'):
+            ver.append(line.split(' ')[2].strip())
+        if line.startswith('#define MAPNIK_VERSION_IS_RELEASE'):
+            if line.split(' ')[2].strip() == "0":
+                is_pre = True
+    version_string = ".".join(ver)
+    if is_pre:
+        version_string += '-pre'
+    return version_string
 
 if not preconfigured:
 
@@ -1023,8 +1047,7 @@ if not preconfigured:
                     color_print(1,"SCons CONFIG not found: '%s'" % conf)
             # Recreate the base environment using modified `opts`
             env = Environment(ENV=os.environ,options=opts)
-            env.Decider('MD5-timestamp')
-            env.SourceCode(".", None)
+            init_environment(env)
             env['USE_CONFIG'] = True
     else:
         color_print(4,'SCons USE_CONFIG specified as false, will not inherit variables python config file...')
@@ -1089,9 +1112,9 @@ if not preconfigured:
         env['MAPNIK_FONTS_DEST'] = os.path.join(env['MAPNIK_LIB_DIR_DEST'],'fonts')
 
     if env['LINKING'] == 'static':
-       env['MAPNIK_LIB_NAME'] = '${LIBPREFIX}mapnik${LIBSUFFIX}'
+       env['MAPNIK_LIB_NAME'] = '${LIBPREFIX}${MAPNIK_NAME}${LIBSUFFIX}'
     else:
-       env['MAPNIK_LIB_NAME'] = '${SHLIBPREFIX}mapnik${SHLIBSUFFIX}'
+       env['MAPNIK_LIB_NAME'] = '${SHLIBPREFIX}${MAPNIK_NAME}${SHLIBSUFFIX}'
 
     if env['PKG_CONFIG_PATH']:
         env['ENV']['PKG_CONFIG_PATH'] = os.path.realpath(env['PKG_CONFIG_PATH'])
@@ -1103,16 +1126,20 @@ if not preconfigured:
     if env['SYSTEM_FONTS']:
         if not os.path.isdir(env['SYSTEM_FONTS']):
             color_print(1,'Warning: Directory specified for SYSTEM_FONTS does not exist!')
-    #### Libraries and headers dependency checks ####
 
     # Set up for libraries and headers dependency checks
-    env['CPPPATH'] = ['#include', '#']
-    env['LIBPATH'] = ['#src']
+    env['CPPPATH'] = ['#include']
+    env['LIBPATH'] = ['#src','#src/json','#src/wkt']
 
     # set any custom cxxflags and ldflags to come first
+    if sys.platform == 'darwin' and not env['HOST']:
+        DEFAULT_CXX11_CXXFLAGS += ' -stdlib=libc++'
+        DEFAULT_CXX11_LINKFLAGS = ' -stdlib=libc++'
     env.Append(CPPDEFINES = env['CUSTOM_DEFINES'])
+    env.Append(CXXFLAGS = DEFAULT_CXX11_CXXFLAGS)
     env.Append(CXXFLAGS = env['CUSTOM_CXXFLAGS'])
     env.Append(CFLAGS = env['CUSTOM_CFLAGS'])
+    env.Append(LINKFLAGS = DEFAULT_CXX11_LINKFLAGS)
     env.Append(LINKFLAGS = env['CUSTOM_LDFLAGS'])
 
     ### platform specific bits
@@ -1122,20 +1149,8 @@ if not preconfigured:
         thread_suffix = ''
         env.Append(LIBS = 'pthread')
 
-    # Solaris & Sun Studio settings (the `SUNCC` flag will only be
-    # set if the `CXX` option begins with `CC`)
-    SOLARIS = env['PLATFORM'] == 'SunOS'
-    env['SUNCC'] = SOLARIS and env['CXX'].startswith('CC')
-
-    # If the Sun Studio C++ compiler (`CC`) is used instead of gcc.
-    if env['SUNCC']:
-        env['CC'] = 'cc'
-        # To be compatible w/Boost everything needs to be compiled
-        # with the `-library=stlport4` flag (which needs to come
-        # before the `-o` flag).
-        env['CXX'] = 'CC -library=stlport4'
-        if env['THREADING'] == 'multi':
-            env.Append(CXXFLAGS = '-mt')
+    if env['SHAPE_MEMORY_MAPPED_FILE']:
+        env.Append(CPPDEFINES = '-DSHAPE_MEMORY_MAPPED_FILE')
 
     # allow for mac osx /usr/lib/libicucore.dylib compatibility
     # requires custom supplied headers since Apple does not include them
@@ -1152,7 +1167,7 @@ if not preconfigured:
 
     # Adding the required prerequisite library directories to the include path for
     # compiling and the library path for linking, respectively.
-    for required in ('ICU', 'SQLITE'):
+    for required in ('ICU', 'SQLITE', 'HB'):
         inc_path = env['%s_INCLUDES' % required]
         lib_path = env['%s_LIBS' % required]
         env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
@@ -1164,6 +1179,7 @@ if not preconfigured:
             temp_env = env.Clone()
             temp_env['LIBS'] = []
             try:
+                # TODO - freetype-config accepts --static as of v2.5.3
                 temp_env.ParseConfig('%s --libs' % env['FREETYPE_CONFIG'])
                 if 'bz2' in temp_env['LIBS']:
                     env['EXTRA_FREETYPE_LIBS'].append('bz2')
@@ -1177,14 +1193,16 @@ if not preconfigured:
     else:
         env['MISSING_DEPS'].append('libxml2')
 
-    LIBSHEADERS = [
+    REQUIRED_LIBSHEADERS = [
         ['z', 'zlib.h', True,'C'],
         [env['ICU_LIB_NAME'],'unicode/unistr.h',True,'C++'],
+        ['harfbuzz', 'harfbuzz/hb.h',True,'C++']
     ]
 
+    OPTIONAL_LIBSHEADERS = []
+
     if env['JPEG']:
-        env.Append(CPPDEFINES = '-DHAVE_JPEG')
-        LIBSHEADERS.append(['jpeg', ['stdio.h', 'jpeglib.h'], True,'C'])
+        OPTIONAL_LIBSHEADERS.append(['jpeg', ['stdio.h', 'jpeglib.h'], False,'C','-DHAVE_JPEG'])
         inc_path = env['%s_INCLUDES' % 'JPEG']
         lib_path = env['%s_LIBS' % 'JPEG']
         env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
@@ -1193,8 +1211,7 @@ if not preconfigured:
         env['SKIPPED_DEPS'].extend(['jpeg'])
 
     if env['PROJ']:
-        env.Append(CPPDEFINES = '-DMAPNIK_USE_PROJ4')
-        LIBSHEADERS.append(['proj', 'proj_api.h', True,'C'])
+        OPTIONAL_LIBSHEADERS.append(['proj', 'proj_api.h', False,'C','-DMAPNIK_USE_PROJ4'])
         inc_path = env['%s_INCLUDES' % 'PROJ']
         lib_path = env['%s_LIBS' % 'PROJ']
         env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
@@ -1203,8 +1220,7 @@ if not preconfigured:
         env['SKIPPED_DEPS'].extend(['proj'])
 
     if env['PNG']:
-        env.Append(CPPDEFINES = '-DHAVE_PNG')
-        LIBSHEADERS.append(['png', 'png.h', True,'C'])
+        OPTIONAL_LIBSHEADERS.append(['png', 'png.h', False,'C','-DHAVE_PNG'])
         inc_path = env['%s_INCLUDES' % 'PNG']
         lib_path = env['%s_LIBS' % 'PNG']
         env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
@@ -1212,9 +1228,17 @@ if not preconfigured:
     else:
         env['SKIPPED_DEPS'].extend(['png'])
 
+    if env['WEBP']:
+        OPTIONAL_LIBSHEADERS.append(['webp', 'webp/decode.h', False,'C','-DHAVE_WEBP'])
+        inc_path = env['%s_INCLUDES' % 'WEBP']
+        lib_path = env['%s_LIBS' % 'WEBP']
+        env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
+        env.AppendUnique(LIBPATH = os.path.realpath(lib_path))
+    else:
+        env['SKIPPED_DEPS'].extend(['webp'])
+
     if env['TIFF']:
-        env.Append(CPPDEFINES = '-DHAVE_TIFF')
-        LIBSHEADERS.append(['tiff', 'tiff.h', True,'C'])
+        OPTIONAL_LIBSHEADERS.append(['tiff', 'tiff.h', False,'C','-DHAVE_TIFF'])
         inc_path = env['%s_INCLUDES' % 'TIFF']
         lib_path = env['%s_LIBS' % 'TIFF']
         env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
@@ -1226,8 +1250,13 @@ if not preconfigured:
     if env['PRIORITIZE_LINKING']:
         conf.prioritize_paths(silent=True)
 
+    # test for C++11 support, which is required
+    if not conf.supports_cxx11():
+        color_print(1,"C++ compiler does not support C++11 standard (-std=c++11), which is required. Please upgrade your compiler to at least g++ 4.7 (ideally 4.8)")
+        Exit(1)
+
     if not env['HOST']:
-        for libname, headers, required, lang in LIBSHEADERS:
+        for libname, headers, required, lang in REQUIRED_LIBSHEADERS:
             if not conf.CheckLibWithHeader(libname, headers, lang):
                 if required:
                     color_print(1, 'Could not find required header or shared library for %s' % libname)
@@ -1259,7 +1288,8 @@ if not preconfigured:
             has_boost_devel = False
 
     if has_boost_devel:
-        env['BOOST_LIB_VERSION_FROM_HEADER'] = conf.GetBoostLibVersion()
+        if not env['HOST']:
+            env['BOOST_LIB_VERSION_FROM_HEADER'] = conf.GetBoostLibVersion()
 
         # The other required boost headers.
         BOOST_LIBSHEADERS = [
@@ -1303,99 +1333,129 @@ if not preconfigured:
                         color_print(4,'Could not find optional header or shared library for boost %s' % libinfo[0])
                         env['SKIPPED_DEPS'].append('boost ' + libinfo[0])
 
-    if env['ICU_LIB_NAME'] not in env['MISSING_DEPS']:
+    if not env['HOST'] and env['ICU_LIB_NAME'] not in env['MISSING_DEPS']:
         # http://lists.boost.org/Archives/boost/2009/03/150076.php
         # we need libicui18n if using static boost libraries, so it is
         # important to try this check with the library linked
-        env.AppendUnique(LIBS='icui18n')
         if conf.boost_regex_has_icu():
             # TODO - should avoid having this be globally defined...
             env.Append(CPPDEFINES = '-DBOOST_REGEX_HAS_ICU')
         else:
             env['SKIPPED_DEPS'].append('boost_regex_icu')
 
+        for libname, headers, required, lang, define in OPTIONAL_LIBSHEADERS:
+            if not env['HOST']:
+                if not conf.CheckLibWithHeader(libname, headers, lang):
+                    if required:
+                        color_print(1, 'Could not find required header or shared library for %s' % libname)
+                        env['MISSING_DEPS'].append(libname)
+                    else:
+                        color_print(4, 'Could not find optional header or shared library for %s' % libname)
+                        env['SKIPPED_DEPS'].append(libname)
+                else:
+                    env.Append(CPPDEFINES = define)
+            else:
+                env.Append(CPPDEFINES = define)
+
     env['REQUESTED_PLUGINS'] = [ driver.strip() for driver in Split(env['INPUT_PLUGINS'])]
 
     SQLITE_HAS_RTREE = None
+    if env['HOST']:
+        SQLITE_HAS_RTREE = True
+
     CHECK_PKG_CONFIG = conf.CheckPKGConfig('0.15.0')
 
     if len(env['REQUESTED_PLUGINS']):
-        color_print(4,'Checking for requested plugins dependencies...')
-        for plugin in env['REQUESTED_PLUGINS']:
-            details = env['PLUGINS'][plugin]
-            if plugin == 'gdal':
-                if conf.parse_config('GDAL_CONFIG',checks='--libs'):
-                    conf.parse_config('GDAL_CONFIG',checks='--cflags')
-                    libname = conf.get_pkg_lib('GDAL_CONFIG','gdal')
-                    if libname:
-                        details['lib'] = libname
-            elif plugin == 'postgis':
-                conf.parse_pg_config('PG_CONFIG')
-            elif plugin == 'ogr':
-                if conf.ogr_enabled():
-                    if not 'gdal' in env['REQUESTED_PLUGINS']:
-                        conf.parse_config('GDAL_CONFIG',checks='--libs')
+        if env['HOST']:
+            for plugin in env['REQUESTED_PLUGINS']:
+                details = env['PLUGINS'][plugin]
+                if details['lib']:
+                    env.AppendUnique(LIBS=details['lib'])
+        else:
+            color_print(4,'Checking for requested plugins dependencies...')
+            for plugin in env['REQUESTED_PLUGINS']:
+                details = env['PLUGINS'][plugin]
+                if plugin == 'gdal':
+                    if conf.parse_config('GDAL_CONFIG',checks='--libs'):
                         conf.parse_config('GDAL_CONFIG',checks='--cflags')
-                    libname = conf.get_pkg_lib('GDAL_CONFIG','ogr')
-                    if libname:
-                        details['lib'] = libname
-            elif details['path'] and details['lib'] and details['inc']:
-                backup = env.Clone().Dictionary()
-                # Note, the 'delete_existing' keyword makes sure that these paths are prepended
-                # to the beginning of the path list even if they already exist
-                incpath = env['%s_INCLUDES' % details['path']]
-                libpath = env['%s_LIBS' % details['path']]
-                env.PrependUnique(CPPPATH = os.path.realpath(incpath),delete_existing=True)
-                env.PrependUnique(LIBPATH = os.path.realpath(libpath),delete_existing=True)
-                if not conf.CheckLibWithHeader(details['lib'], details['inc'], details['lang']):
-                    env.Replace(**backup)
-                    env['SKIPPED_DEPS'].append(details['lib'])
-                if plugin == 'sqlite':
-                    SQLITE_HAS_RTREE = conf.sqlite_has_rtree()
-                    sqlite_backup = env.Clone().Dictionary()
-
-                    # if statically linking, on linux we likely
-                    # need to link sqlite to pthreads and dl
-                    if env['RUNTIME_LINK'] == 'static':
-                        if CHECK_PKG_CONFIG and conf.CheckPKG('sqlite3'):
-                            sqlite_env = env.Clone()
-                            try:
-                                sqlite_env.ParseConfig('pkg-config --static --libs sqlite3')
-                                for lib in sqlite_env['LIBS']:
-                                    if not lib in env['LIBS']:
-                                        env["SQLITE_LINKFLAGS"].append(lib)
-                                        env.Append(LIBS=lib)
-                            except OSError,e:
-                                pass
-
-                    if SQLITE_HAS_RTREE is None:
+                        libname = conf.get_pkg_lib('GDAL_CONFIG','gdal')
+                        if libname:
+                            if not conf.CheckLibWithHeader(libname, details['inc'], details['lang']):
+                                env['SKIPPED_DEPS'].append('gdal')
+                                if libname in env['LIBS']:
+                                     env['LIBS'].remove(libname)
+                            else:
+                                details['lib'] = libname
+                elif plugin == 'postgis' or plugin == 'pgraster':
+                    conf.parse_pg_config('PG_CONFIG')
+                elif plugin == 'ogr':
+                    if conf.ogr_enabled():
+                        if conf.parse_config('GDAL_CONFIG',checks='--libs'):
+                            conf.parse_config('GDAL_CONFIG',checks='--cflags')
+                            libname = conf.get_pkg_lib('GDAL_CONFIG','ogr')
+                            if libname:
+                                if not conf.CheckLibWithHeader(libname, details['inc'], details['lang']):
+                                    if 'gdal' not in env['SKIPPED_DEPS']:
+                                        env['SKIPPED_DEPS'].append('gdal')
+                                    if libname in env['LIBS']:
+                                         env['LIBS'].remove(libname)
+                                else:
+                                    details['lib'] = libname
+                elif details['path'] and details['lib'] and details['inc']:
+                    backup = env.Clone().Dictionary()
+                    # Note, the 'delete_existing' keyword makes sure that these paths are prepended
+                    # to the beginning of the path list even if they already exist
+                    incpath = env['%s_INCLUDES' % details['path']]
+                    libpath = env['%s_LIBS' % details['path']]
+                    env.PrependUnique(CPPPATH = os.path.realpath(incpath),delete_existing=True)
+                    env.PrependUnique(LIBPATH = os.path.realpath(libpath),delete_existing=True)
+                    if not conf.CheckLibWithHeader(details['lib'], details['inc'], details['lang']):
+                        env.Replace(**backup)
+                        env['SKIPPED_DEPS'].append(details['lib'])
+                    if plugin == 'sqlite':
+                        sqlite_backup = env.Clone().Dictionary()
+                        # if statically linking, on linux we likely
+                        # need to link sqlite to pthreads and dl
+                        if env['RUNTIME_LINK'] == 'static':
+                            if CHECK_PKG_CONFIG and conf.CheckPKG('sqlite3'):
+                                sqlite_env = env.Clone()
+                                try:
+                                    sqlite_env.ParseConfig('pkg-config --static --libs sqlite3')
+                                    for lib in sqlite_env['LIBS']:
+                                        if not lib in env['LIBS']:
+                                            env["SQLITE_LINKFLAGS"].append(lib)
+                                            env.Append(LIBS=lib)
+                                except OSError,e:
+                                    pass
                         SQLITE_HAS_RTREE = conf.sqlite_has_rtree()
-                    if not SQLITE_HAS_RTREE:
-                        env.Replace(**sqlite_backup)
-                        if details['lib'] in env['LIBS']:
-                            env['LIBS'].remove(details['lib'])
-                        env['SKIPPED_DEPS'].append('sqlite_rtree')
-                    else:
-                        env.Replace(**sqlite_backup)
-
-            elif details['lib'] and details['inc']:
-                if not conf.CheckLibWithHeader(details['lib'], details['inc'], details['lang']):
-                    env['SKIPPED_DEPS'].append(details['lib'])
-
-        # re-append the local paths for mapnik sources to the beginning of the list
-        # to make sure they come before any plugins that were 'prepended'
-        env.PrependUnique(CPPPATH = '#include', delete_existing=True)
-        env.PrependUnique(CPPPATH = '#', delete_existing=True)
-        env.PrependUnique(LIBPATH = '#src', delete_existing=True)
-
-    if env['PGSQL2SQLITE']:
-        if 'sqlite3' not in env['LIBS']:
-            env.AppendUnique(LIBS='sqlite3')
-            env.AppendUnique(CPPPATH = os.path.realpath(env['SQLITE_INCLUDES']))
-            env.AppendUnique(LIBPATH = os.path.realpath(env['SQLITE_LIBS']))
-        if not SQLITE_HAS_RTREE:
-            env['SKIPPED_DEPS'].append('pgsql2sqlite_rtree')
-            env['PGSQL2SQLITE'] = False
+                        if not SQLITE_HAS_RTREE:
+                            env.Replace(**sqlite_backup)
+                            if details['lib'] in env['LIBS']:
+                                env['LIBS'].remove(details['lib'])
+                            env['SKIPPED_DEPS'].append('sqlite_rtree')
+                        else:
+                            env.Replace(**sqlite_backup)
+                elif details['lib'] and details['inc']:
+                    if not conf.CheckLibWithHeader(details['lib'], details['inc'], details['lang']):
+                        env['SKIPPED_DEPS'].append(details['lib'])
+
+            # re-append the local paths for mapnik sources to the beginning of the list
+            # to make sure they come before any plugins that were 'prepended'
+            env.PrependUnique(CPPPATH = '#include', delete_existing=True)
+            env.PrependUnique(LIBPATH = '#src', delete_existing=True)
+
+    if not env['HOST']:
+        if env['PGSQL2SQLITE']:
+            if 'sqlite3' not in env['LIBS']:
+                env.AppendUnique(LIBS='sqlite3')
+                env.AppendUnique(CPPPATH = os.path.realpath(env['SQLITE_INCLUDES']))
+                env.AppendUnique(LIBPATH = os.path.realpath(env['SQLITE_LIBS']))
+            if 'pq' not in env['LIBS']:
+                if not conf.parse_pg_config('PG_CONFIG'):
+                    env['PGSQL2SQLITE'] = False
+            if not SQLITE_HAS_RTREE:
+                env['SKIPPED_DEPS'].append('pgsql2sqlite_rtree')
+                env['PGSQL2SQLITE'] = False
 
     # we rely on an internal, patched copy of agg with critical fixes
     # prepend to make sure we link locally
@@ -1427,7 +1487,7 @@ if not preconfigured:
                 env["CAIRO_ALL_LIBS"] = ['cairo']
                 if env['RUNTIME_LINK'] == 'static':
                     env["CAIRO_ALL_LIBS"].extend(
-                        ['pixman-1','expat','fontconfig','iconv']
+                        ['pixman-1','expat']
                     )
                 # todo - run actual checkLib?
                 env['HAS_CAIRO'] = True
@@ -1591,12 +1651,7 @@ if not preconfigured:
 
         # fetch the mapnik version header in order to set the
         # ABI version used to build libmapnik.so on linux in src/build.py
-        abi = conf.GetMapnikLibVersion()
-        abi_fallback = "2.2.0"
-        if not abi:
-            color_print(1,'Problem encountered parsing mapnik version, falling back to %s' % abi_fallback)
-            abi = abi_fallback
-
+        abi = GetMapnikLibVersion()
         abi_no_pre = abi.replace('-pre','').split('.')
         env['ABI_VERSION'] = abi_no_pre
         env['MAPNIK_VERSION_STRING'] = abi
@@ -1619,6 +1674,19 @@ if not preconfigured:
         debug_defines = ['-DDEBUG', '-DMAPNIK_DEBUG']
         ndebug_defines = ['-DNDEBUG']
 
+        # faster compile
+        # http://www.boost.org/doc/libs/1_47_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_5.html#spirit.what_s_new.spirit_2_5.breaking_changes
+        env.Append(CPPDEFINES = '-DBOOST_SPIRIT_NO_PREDEFINED_TERMINALS=1')
+        env.Append(CPPDEFINES = '-DBOOST_PHOENIX_NO_PREDEFINED_TERMINALS=1')
+        # c++11 support / https://github.com/mapnik/mapnik/issues/1683
+        #  - upgrade to PHOENIX_V3 since that is needed for c++11 compile
+        env.Append(CPPDEFINES = '-DBOOST_SPIRIT_USE_PHOENIX_V3=1')
+        if 'clang++' in env['CXX']:
+            #  - workaround boost gil channel_algorithm.hpp narrowing error
+            # TODO - remove when building against >= 1.55
+            # https://github.com/mapnik/mapnik/issues/1970
+            env.Append(CXXFLAGS = '-Wno-c++11-narrowing')
+
         # Enable logging in debug mode (always) and release mode (when specified)
         if env['DEFAULT_LOG_SEVERITY']:
             if env['DEFAULT_LOG_SEVERITY'] not in severities:
@@ -1656,24 +1724,23 @@ if not preconfigured:
         else:
             env.Append(CPPDEFINES = ndebug_defines)
 
-        if not env['SUNCC']:
+        # Common flags for g++/clang++ CXX compiler.
+        # TODO: clean up code more to make -Wextra  -Wsign-conversion -Wconversion -Wshadow viable
+        common_cxx_flags = '-Wall -Wsign-compare %s %s -ftemplate-depth-300 ' % (env['WARNING_CXXFLAGS'], pthread)
 
-            # Common flags for CXX compiler.
-            common_cxx_flags = '-ansi -Wall %s %s -ftemplate-depth-300 ' % (env['WARNING_CXXFLAGS'], pthread)
+        if 'clang++' in env['CXX']:
+            common_cxx_flags += ' -Wno-unknown-pragmas -Wno-unsequenced '
+        elif 'g++' in env['CXX']:
+            common_cxx_flags += ' -Wno-pragmas '
 
-            # https://github.com/mapnik/mapnik/issues/1835
-            if sys.platform == 'darwin' and env['CXX'] == 'g++':
-                common_cxx_flags += '-fpermissive '
-
-            if env['DEBUG']:
-                env.Append(CXXFLAGS = common_cxx_flags + '-O0 -fno-inline')
-            else:
-                # TODO - add back -fvisibility-inlines-hidden
-                # https://github.com/mapnik/mapnik/issues/1863
-                env.Append(CXXFLAGS = common_cxx_flags + '-O%s -fno-strict-aliasing -finline-functions -Wno-inline -Wno-parentheses -Wno-char-subscripts' % (env['OPTIMIZATION']))
-
-            if env['DEBUG_UNDEFINED']:
-                env.Append(CXXFLAGS = '-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrapv -fwrapv')
+        if env['DEBUG']:
+            env.Append(CXXFLAGS = common_cxx_flags + '-O0')
+        else:
+            # TODO - add back -fvisibility-inlines-hidden
+            # https://github.com/mapnik/mapnik/issues/1863
+            env.Append(CXXFLAGS = common_cxx_flags + '-O%s' % (env['OPTIMIZATION']))
+        if env['DEBUG_UNDEFINED']:
+            env.Append(CXXFLAGS = '-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrapv -fwrapv')
 
         if 'python' in env['BINDINGS'] or 'python' in env['REQUESTED_PLUGINS']:
             majver, minver = env['PYTHON_VERSION'].split('.')
@@ -1755,14 +1822,14 @@ if not HELP_REQUESTED:
         env['ENV']['PATH'] = os.path.realpath(env['PATH']) + ':' + env['ENV']['PATH']
 
     if env['PATH_REMOVE']:
-        p = env['PATH_REMOVE']
-        if p in env['ENV']['PATH']:
-            env['ENV']['PATH'].replace(p,'')
-        rm_path(p,'LIBPATH',env)
-        rm_path(p,'CPPPATH',env)
-        rm_path(p,'CXXFLAGS',env)
-        rm_path(p,'CAIRO_LIBPATHS',env)
-        rm_path(p,'CAIRO_CPPPATHS',env)
+        for p in env['PATH_REMOVE'].split(':'):
+            if p in env['ENV']['PATH']:
+                env['ENV']['PATH'].replace(p,'')
+            rm_path(p,'LIBPATH',env)
+            rm_path(p,'CPPPATH',env)
+            rm_path(p,'CXXFLAGS',env)
+            rm_path(p,'CAIRO_LIBPATHS',env)
+            rm_path(p,'CAIRO_CPPPATHS',env)
 
     if env['PATH_REPLACE']:
         searches,replace = env['PATH_REPLACE'].split(':')
@@ -1795,13 +1862,14 @@ if not HELP_REQUESTED:
         SetOption('implicit_cache', 1)
         SetOption('max_drift', 1)
 
-    if env['JOBS'] > 1:
-        SetOption("num_jobs", env['JOBS'])
-
     # Build agg first, doesn't need anything special
     if env['RUNTIME_LINK'] == 'shared':
         SConscript('deps/agg/build.py')
 
+    # Build spirit grammars
+    SConscript('src/json/build.py')
+    SConscript('src/wkt/build.py')
+
     # Build the core library
     SConscript('src/build.py')
 
@@ -1818,7 +1886,7 @@ if not HELP_REQUESTED:
         if env['PLUGIN_LINKING'] == 'static' or plugin not in env['REQUESTED_PLUGINS']:
             if os.path.exists('plugins/input/%s.input' % plugin):
                 os.unlink('plugins/input/%s.input' % plugin)
-        if plugin in env['REQUESTED_PLUGINS']:
+        elif plugin in env['REQUESTED_PLUGINS']:
             details = env['PLUGINS'][plugin]
             if details['lib'] in env['LIBS']:
                 if env['PLUGIN_LINKING'] == 'shared':
@@ -1858,26 +1926,27 @@ if not HELP_REQUESTED:
                     os.unlink(plugin_path)
 
     # Build the c++ rundemo app if requested
-    if env['DEMO']:
-        SConscript('demo/c++/build.py')
+    if not env['HOST']:
+        if env['DEMO']:
+            SConscript('demo/c++/build.py')
 
     # Build shapeindex and remove its dependency from the LIBS
-    if 'boost_program_options%s' % env['BOOST_APPEND'] in env['LIBS']:
-        if env['SHAPEINDEX']:
-            SConscript('utils/shapeindex/build.py')
-
-        # Build the pgsql2psqlite app if requested
-        if env['PGSQL2SQLITE']:
-            SConscript('utils/pgsql2sqlite/build.py')
-
-        if env['SVG2PNG']:
-            SConscript('utils/svg2png/build.py')
-
-        # devtools not ready for public
-        #SConscript('utils/ogrindex/build.py')
-        env['LIBS'].remove('boost_program_options%s' % env['BOOST_APPEND'])
-    else :
-        color_print(1,"WARNING: Cannot find boost_program_options. 'shapeindex' and other command line programs will not be available")
+    if not env['HOST']:
+        if 'boost_program_options%s' % env['BOOST_APPEND'] in env['LIBS']:
+            if env['SHAPEINDEX']:
+                SConscript('utils/shapeindex/build.py')
+            # Build the pgsql2psqlite app if requested
+            if env['PGSQL2SQLITE']:
+                SConscript('utils/pgsql2sqlite/build.py')
+            if env['SVG2PNG']:
+                SConscript('utils/svg2png/build.py')
+            if env['NIK2IMG']:
+                SConscript('utils/nik2img/build.py')
+            # devtools not ready for public
+            #SConscript('utils/ogrindex/build.py')
+            env['LIBS'].remove('boost_program_options%s' % env['BOOST_APPEND'])
+        else :
+            color_print(1,"WARNING: Cannot find boost_program_options. 'shapeindex' and other command line programs will not be available")
 
     # Build the Python bindings
     if 'python' in env['BINDINGS']:
@@ -1895,13 +1964,10 @@ if not HELP_REQUESTED:
     # build C++ tests
     SConscript('tests/cpp_tests/build.py')
 
-    if env['CPP_TESTS'] and env['SVG_RENDERER']:
-        SConscript('tests/cpp_tests/svg_renderer_tests/build.py')
-
     if env['BENCHMARK']:
         SConscript('benchmark/build.py')
 
-    # install pkg-config script and mapnik-config script
+    # install mapnik-config script
     SConscript('utils/mapnik-config/build.py')
 
     # write the viewer.ini file
@@ -1918,7 +1984,3 @@ if not HELP_REQUESTED:
                 os.unlink(plugin_path)
         if os.path.exists('plugins/input/templates/hello.input'):
             os.unlink('plugins/input/templates/hello.input')
-
-    # update linux project files
-    if env['PLATFORM'] == 'Linux':
-        update_linux_project_files()
diff --git a/benchmark/.gitignore b/benchmark/.gitignore
new file mode 100644
index 0000000..fccedd9
--- /dev/null
+++ b/benchmark/.gitignore
@@ -0,0 +1,6 @@
+multicolor-hextree-actual.png
+multicolor-hextree-actual.png
+polygon_clipping_boost_actual.png
+polygon_clipping_clipper_actual.png
+polygon_clipping_agg_actual.png
+out
diff --git a/benchmark/allocation.cpp b/benchmark/allocation.cpp
deleted file mode 100644
index 75ca4e7..0000000
--- a/benchmark/allocation.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <mapnik/geometry.hpp>
-#include <mapnik/wkt/wkt_factory.hpp>
-
-
-#define BOOST_CHRONO_HEADER_ONLY
-#include <boost/chrono/process_cpu_clocks.hpp>
-#include <boost/chrono.hpp>
-#include <boost/thread/thread.hpp>
-
-using namespace boost::chrono;
-using namespace mapnik;
-
-void threaded_benchmark(void test(),std::string const& name, unsigned threads) {
-  using namespace boost::chrono;
-  typedef process_cpu_clock clock_type;
-  process_real_cpu_clock::time_point start = process_real_cpu_clock::now();
-  boost::thread_group threads;
-  for (unsigned i=0;i<threads;++i)
-  {
-      threads.create_thread(test);
-  }
-  threads.join_all();
-  clock_type::duration elapsed = process_real_cpu_clock::now() - start;
-  std::clog << boost::chrono::duration_cast<milliseconds>(elapsed)
-            << " (" << boost::chrono::duration_cast<seconds>(elapsed) << ")"
-            << " <-- " << name << "\n";
-}
-
-
-void test_wkt_creation()
-{
-    boost::ptr_vector<mapnik::geometry_type> paths;
-    mapnik::wkt_parser parse_wkt;
-    std::string value("GEOMETRYCOLLECTION(MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20))),POINT(2 3),LINESTRING(2 3,3 4),MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20))),MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20))),MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 3 [...]
-    if (!parse_wkt.parse(value, paths)) std::clog << "failed to parse\n";
-    int iterations = 10000;
-    typedef process_cpu_clock clock_type;
-    process_real_cpu_clock::time_point start = process_real_cpu_clock::now();
-    for (int i=0;i<iterations;++i) {
-        parse_wkt.parse(value, paths);
-    }
-    clock_type::duration elapsed = process_real_cpu_clock::now() - start;
-    std::clog << "elapsed: " << boost::chrono::duration_cast<milliseconds>(elapsed) << "\n";
-}
-
-int main( int, char*[] )
-{
-    return 0;
-}
\ No newline at end of file
diff --git a/benchmark/bench_framework.hpp b/benchmark/bench_framework.hpp
new file mode 100644
index 0000000..f2afc48
--- /dev/null
+++ b/benchmark/bench_framework.hpp
@@ -0,0 +1,129 @@
+#ifndef __MAPNIK_BENCH_FRAMEWORK_HPP__
+#define __MAPNIK_BENCH_FRAMEWORK_HPP__
+
+// mapnik
+#include <mapnik/params.hpp>
+#include <mapnik/value_types.hpp>
+
+// stl
+#include <chrono>
+#include <iomanip>
+#include <iostream>
+#include <set>
+#include <sstream>
+#include <thread>
+#include <vector>
+
+namespace benchmark {
+
+class test_case
+{
+protected:
+    mapnik::parameters params_;
+    std::size_t threads_;
+    std::size_t iterations_;
+public:
+    test_case(mapnik::parameters const& params)
+       : params_(params),
+         threads_(*params.get<mapnik::value_integer>("threads",0)),
+         iterations_(*params.get<mapnik::value_integer>("iterations",0))
+         {}
+    std::size_t threads() const
+    {
+        return threads_;
+    }
+    std::size_t iterations() const
+    {
+        return iterations_;
+    }
+    virtual bool validate() const = 0;
+    virtual void operator()() const = 0;
+    virtual ~test_case() {}
+};
+
+void handle_args(int argc, char** argv, mapnik::parameters & params)
+{
+    if (argc > 0) {
+        for (int i=1;i<argc;++i) {
+            std::string opt(argv[i]);
+            // parse --foo bar
+            if (!opt.empty() && (opt.find("--") != 0)) {
+                std::string key = std::string(argv[i-1]);
+                if (!key.empty() && (key.find("--") == 0)) {
+                    key = key.substr(key.find_first_not_of("-"));
+                    params[key] = opt;
+                }
+            }
+        }
+    }
+}
+
+#define BENCHMARK(test_class,name)                      \
+    int main(int argc, char** argv)                     \
+    {                                                   \
+        try                                             \
+        {                                               \
+            mapnik::parameters params;                  \
+            benchmark::handle_args(argc,argv,params);   \
+            test_class test_runner(params);             \
+            return run(test_runner,name);               \
+        }                                               \
+        catch (std::exception const& ex)                \
+        {                                               \
+            std::clog << ex.what() << "\n";             \
+            return -1;                                  \
+        }                                               \
+    }                                                   \
+
+template <typename T>
+int run(T const& test_runner, std::string const& name)
+{
+    try
+    {
+        if (!test_runner.validate())
+        {
+            std::clog << "test did not validate: " << name << "\n";
+            return -1;
+        }
+        std::chrono::high_resolution_clock::time_point start;
+        std::chrono::high_resolution_clock::duration elapsed;
+        std::stringstream s;
+        s << name << ":"
+            << std::setw(45 - (int)s.tellp()) << std::right
+            << " t:" << test_runner.threads()
+            << " i:" << test_runner.iterations();
+        if (test_runner.threads() > 0)
+        {
+            using thread_group = std::vector<std::unique_ptr<std::thread> >;
+            using value_type = thread_group::value_type;
+            thread_group tg;
+            for (std::size_t i=0;i<test_runner.threads();++i)
+            {
+                tg.emplace_back(new std::thread(test_runner));
+            }
+            start = std::chrono::high_resolution_clock::now();
+            std::for_each(tg.begin(), tg.end(), [](value_type & t) {if (t->joinable()) t->join();});
+            elapsed = std::chrono::high_resolution_clock::now() - start;
+        }
+        else
+        {
+            start = std::chrono::high_resolution_clock::now();
+            test_runner();
+            elapsed = std::chrono::high_resolution_clock::now() - start;
+        }
+        s << std::setw(65 - (int)s.tellp()) << std::right
+            << std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count() << " milliseconds\n";
+        std::clog << s.str();
+        return 0;
+    }
+    catch (std::exception const& ex)
+    {
+        std::clog << "test runner did not complete: " << ex.what() << "\n";
+        return -1;
+    }
+    return 0;
+}
+
+}
+
+#endif // __MAPNIK_BENCH_FRAMEWORK_HPP__
diff --git a/benchmark/build.py b/benchmark/build.py
index 5a7db1f..3b5ff20 100644
--- a/benchmark/build.py
+++ b/benchmark/build.py
@@ -6,21 +6,45 @@ Import ('env')
 
 test_env = env.Clone()
 
-test_env['LIBS'] = copy(env['LIBMAPNIK_LIBS'])
-test_env.AppendUnique(LIBS='mapnik')
-#test_env.AppendUnique(LIBS='sqlite3')
+test_env['LIBS'] = [env['MAPNIK_NAME']]
+test_env.AppendUnique(LIBS=copy(env['LIBMAPNIK_LIBS']))
+if env['PLATFORM'] == 'Linux':
+    test_env.AppendUnique(LIBS='dl')
+    test_env.AppendUnique(LIBS='rt')
 test_env.AppendUnique(CXXFLAGS='-g')
-linkflags = copy(env['CUSTOM_LDFLAGS'])
-linkflags
+test_env['CXXFLAGS'] = copy(test_env['LIBMAPNIK_CXXFLAGS'])
+test_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
+if test_env['HAS_CAIRO']:
+    test_env.PrependUnique(CPPPATH=test_env['CAIRO_CPPPATHS'])
+    test_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
+test_env['LINKFLAGS'] = copy(test_env['LIBMAPNIK_LINKFLAGS'])
 if env['PLATFORM'] == 'Darwin':
-    linkflags += ' -F/ -framework CoreFoundation'
+    test_env.Append(LINKFLAGS='-F/ -framework CoreFoundation')
 
-for cpp_test in glob.glob('run*.cpp'):
-    name = cpp_test.replace('.cpp','')
-    source_files = [cpp_test]
-    test_env_local = test_env.Clone()
-    test_program = test_env_local.Program(name, source=source_files, LINKFLAGS=linkflags)
-    Depends(test_program, env.subst('../src/%s' % env['MAPNIK_LIB_NAME']))
-    # build locally if installing
+test_env_local = test_env.Clone()
+
+#benchmarks = glob.glob('test*cpp')
+benchmarks = [
+    #"test_array_allocation.cpp",
+    #"test_png_encoding1.cpp",
+    #"test_png_encoding2.cpp",
+    #"test_to_string1.cpp",
+    #"test_to_string2.cpp",
+    #"test_to_bool.cpp",
+    #"test_to_double.cpp",
+    #"test_to_int.cpp",
+    #"test_utf_encoding.cpp"
+    #"test_polygon_clipping.cpp",
+    #"test_polygon_clipping_rendering.cpp",
+    "test_proj_transform1.cpp",
+    "test_expression_parse.cpp",
+    "test_face_ptr_creation.cpp",
+    "test_font_registration.cpp",
+    "test_rendering.cpp",
+    "test_rendering_shared_map.cpp",
+]
+for cpp_test in benchmarks:
+    test_program = test_env_local.Program('out/'+cpp_test.replace('.cpp',''), source=[cpp_test])
     if 'install' in COMMAND_LINE_TARGETS:
         env.Alias('install',test_program)
+    #Depends(test_program, env.subst('../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/benchmark/compare_images.hpp b/benchmark/compare_images.hpp
new file mode 100644
index 0000000..8e4f177
--- /dev/null
+++ b/benchmark/compare_images.hpp
@@ -0,0 +1,51 @@
+#ifndef __MAPNIK_COMPARE_IMAGES_HPP__
+#define __MAPNIK_COMPARE_IMAGES_HPP__ 
+
+#include <mapnik/graphics.hpp>
+#include <mapnik/image_data.hpp>
+#include <mapnik/image_util.hpp>
+#include <mapnik/image_reader.hpp>
+
+using namespace mapnik;
+
+namespace benchmark {
+
+    bool compare_images(std::string const& src_fn,std::string const& dest_fn)
+    {
+        std::unique_ptr<mapnik::image_reader> reader1(mapnik::get_image_reader(dest_fn,"png"));
+        if (!reader1.get())
+        {
+            throw mapnik::image_reader_exception("Failed to load: " + dest_fn);
+        }
+        std::shared_ptr<image_32> image_ptr1 = std::make_shared<image_32>(reader1->width(),reader1->height());
+        reader1->read(0,0,image_ptr1->data());
+
+        std::unique_ptr<mapnik::image_reader> reader2(mapnik::get_image_reader(src_fn,"png"));
+        if (!reader2.get())
+        {
+            throw mapnik::image_reader_exception("Failed to load: " + src_fn);
+        }
+        std::shared_ptr<image_32> image_ptr2 = std::make_shared<image_32>(reader2->width(),reader2->height());
+        reader2->read(0,0,image_ptr2->data());
+
+        image_data_32 const& dest = image_ptr1->data();
+        image_data_32 const& src = image_ptr2->data();
+
+        unsigned int width = src.width();
+        unsigned int height = src.height();
+        if ((width != dest.width()) || height != dest.height()) return false;
+        for (unsigned int y = 0; y < height; ++y)
+        {
+            const unsigned int* row_from = src.getRow(y);
+            const unsigned int* row_to = dest.getRow(y);
+            for (unsigned int x = 0; x < width; ++x)
+            {
+               if (row_from[x] != row_to[x]) return false;
+            }
+        }
+        return true;
+    }
+
+}
+
+#endif // __MAPNIK_COMPARE_IMAGES_HPP__
\ No newline at end of file
diff --git a/benchmark/data/polygon.wkt b/benchmark/data/polygon.wkt
index 2fe5b48..b31735f 100644
--- a/benchmark/data/polygon.wkt
+++ b/benchmark/data/polygon.wkt
@@ -1 +1 @@
-MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))
\ No newline at end of file
+POLYGON ((155 203, 233 454, 315 340, 421 446, 463 324, 559 466, 665 253, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 155 203),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249 334, 229 191, 313 190))
diff --git a/benchmark/data/polygon_clipping_agg.png b/benchmark/data/polygon_clipping_agg.png
new file mode 100644
index 0000000..34709ab
Binary files /dev/null and b/benchmark/data/polygon_clipping_agg.png differ
diff --git a/benchmark/data/polygon_clipping_boost.png b/benchmark/data/polygon_clipping_boost.png
new file mode 100644
index 0000000..34709ab
Binary files /dev/null and b/benchmark/data/polygon_clipping_boost.png differ
diff --git a/benchmark/data/polygon_clipping_clipper.png b/benchmark/data/polygon_clipping_clipper.png
new file mode 100644
index 0000000..a52fd50
Binary files /dev/null and b/benchmark/data/polygon_clipping_clipper.png differ
diff --git a/benchmark/data/polygon_rendering_clip.xml b/benchmark/data/polygon_rendering_clip.xml
new file mode 100644
index 0000000..98f0ec6
--- /dev/null
+++ b/benchmark/data/polygon_rendering_clip.xml
@@ -0,0 +1,14 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue">
+    <Style name="style">
+        <Rule>
+            <PolygonSymbolizer clip="true"/>
+        </Rule>
+    </Style>
+    <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../tests/data/shp/world_merc.shp</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/benchmark/data/polygon_rendering_no_clip.xml b/benchmark/data/polygon_rendering_no_clip.xml
new file mode 100644
index 0000000..8d478e0
--- /dev/null
+++ b/benchmark/data/polygon_rendering_no_clip.xml
@@ -0,0 +1,14 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue">
+    <Style name="style">
+        <Rule>
+            <PolygonSymbolizer clip="false"/>
+        </Rule>
+    </Style>
+    <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../tests/data/shp/world_merc.shp</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/benchmark/data/roads.csv b/benchmark/data/roads.csv
new file mode 100644
index 0000000..8c7e024
--- /dev/null
+++ b/benchmark/data/roads.csv
@@ -0,0 +1,853 @@
+WKT,fid,type,tunnel,bridge,oneway,class,z_order,z
+"LINESTRING (1478464.087426564656198 6892271.151913832873106,1478475.106973737478256 6892349.655597596429288)",312,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478267.685692099155858 6891978.835526627488434,1478231.305324257584289 6891833.51674110814929,1478229.896389777539298 6891821.759523851796985,1478231.40796187100932 6891811.979739548638463,1478234.552405048860237 6891804.43797043338418,1478240.58003204013221 6891797.938565328717232,1478264.75585483526811 6891788.741302938200533,1478317.1663514142856 6891772.262900795787573,1478340.17583771632053 6891781.920006790198386,1478348.685428757686168 6891803.794161200523376,1478402 [...]
+"LINESTRING (1478426.895288528874516 6891709.308051269501448,1478411.676929988665506 6891698.869274341501296,1478398.007466310635209 6891695.573628057725728,1478379.514034900348634 6891705.552542590536177,1478372.413378342054784 6891719.700855853967369,1478378.730256776325405 6891746.357388046570122,1478416.519559100735933 6891913.901618065312505,1478440.583413592772558 6892016.652565392665565,1478431.719256255310029 6892045.870066974312067,1478463.555577126098797 6892169.547425043769181 [...]
+"LINESTRING (1478079.075085395481437 6891736.240464904345572,1478104.715826825471595 6891790.366151860915124,1478111.42459432175383 6891812.884139166213572,1478111.919120994396508 6891834.559102791361511,1478109.614440086763352 6891846.147721174173057)",334,service,1,0,0,minorroads,-10,-1
+"LINESTRING (1478454.672758408589289 6892353.104810423217714,1478458.218421341385692 6892374.581942255608737,1478466.532067854423076 6892390.463712620548904,1478477.467638794099912 6892401.945822895504534,1478492.303438970819116 6892407.924498297274113)",352,service,1,0,0,minorroads,-10,-1
+"LINESTRING (1478295.649775819852948 6892148.408088837750256,1478302.451850236626342 6892175.740540593862534,1478344.449294621357694 6892185.352142740041018,1478371.359010152285919 6892210.707205789163709,1478358.342694909079 6892292.506188929080963)",371,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1478404.315014054765925 6892179.250996824353933,1478397.699553476180881 6892180.93724271748215,1478392.530350143555552 6892182.255580662749708,1478371.359010152285919 6892210.707205789163709,1478418.786917239660397 6892247.360282902605832)",372,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1478380.437773400917649 6892134.381656404584646,1478402.747457809513435 6892127.958631582558155)",386,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1478402.16895490931347 6892023.780644913204014,1478431.719256255310029 6892045.870066974312067)",387,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478302.451850236626342 6892175.740540593862534,1478279.339726323960349 6892178.407874005846679)",388,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1478440.583413592772558 6892016.652565392665565,1478459.888615197036415 6892053.703318660147488,1478482.851448043249547 6892145.54148262552917,1478463.555577126098797 6892169.547425043769181)",390,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478402.16895490931347 6892023.780644913204014,1478391.01877805008553 6892079.79377365577966,1478402.747457809513435 6892127.958631582558155,1478416.584873942658305 6892184.692973483353853,1478450.679222259437665 6892216.85436431504786)",391,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478392.530350143555552 6892182.255580662749708,1478380.437773400917649 6892134.381656404584646,1478354.479788446333259 6892046.069347251206636)",392,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1478352.147115462692454 6891731.442595199681818,1478363.101347791031003 6891774.746155516244471,1478421.539471358293667 6892018.967274392023683,1478431.719256255310029 6892045.870066974312067)",393,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478289.006323162466288 6891573.850262156687677,1478287.961285665631294 6891604.6449805945158,1478304.653893533628434 6891631.25514588970691)",397,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478316.746470273472369 6891546.32058884575963,1478314.525765596190467 6891576.70133616309613)",400,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478352.874909435166046 6891537.000988053157926,1478335.267893759533763 6891583.292532620951533,1478318.957844263641164 6891610.699705163016915,1478266.771284291520715 6891649.189465964213014)",402,path,1,0,1,minorroads,-10,-1
+"LINESTRING (1478304.653893533628434 6891544.619147759862244,1478289.006323162466288 6891573.850262156687677)",403,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478304.653893533628434 6891631.25514588970691,1478325.004132634960115 6891655.259552592411637,1478338.570958702359349 6891679.785201796330512,1478352.147115462692454 6891731.442595199681818)",404,service,1,0,1,minorroads,-10,-1
+"LINESTRING (1478189.345202641561627 6892164.39671871624887,1478191.565907321637496 6892107.493896978907287)",417,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1477341.726486198138446 6891879.672032723203301,1477366.966007873183116 6891868.589220155961812)",487,service,1,0,0,minorroads,-10,-1
+"LINESTRING (1477280.535808509448543 6891906.926925845444202,1477314.966061739251018 6891890.785518474876881,1477341.726486198138446 6891879.672032723203301)",488,service,1,0,0,minorroads,-10,-1
+"LINESTRING (1477246.96397894108668 6891938.244107788428664,1477280.535808509448543 6891906.926925845444202)",489,service,1,0,0,minorroads,-10,-1
+"LINESTRING (1477089.116663535358384 6890956.187384136021137,1477095.414880589582026 6891011.595310922712088)",498,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1477776.443423286313191 6890246.309983272105455,1477868.845265486976132 6890131.995495325885713)",499,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1477507.896778806811199 6891126.826628868468106,1477488.684884120011702 6891123.347287161275744,1477444.914608268765733 6891146.583800435997546,1477413.610136836534366 6891170.065622186288238,1477406.453496126458049 6891175.721502039581537)",571,service,1,0,0,minorroads,-10,-1
+"LINESTRING (1477741.089431561529636 6891515.342154928483069,1477664.167207277147099 6891575.812291472218931,1477687.456614337861538 6891609.488759884610772)",584,service,1,0,0,minorroads,-10,-1
+"LINESTRING (1477226.557755685178563 6892508.796153583563864,1477223.683902570279315 6892523.712388763204217)",605,footway,1,0,0,minorroads,-10,-1
+"LINESTRING (1478367.953307596268132 6891647.825229956768453,1478351.279361113905907 6891651.197499162517488,1478335.519822442205623 6891655.826707382686436,1478312.034470850601792 6891667.031854874454439,1478293.233126608654857 6891676.167663832195103,1478279.554332237923518 6891684.153840911574662)",40,motorway_link,1,0,1,motorways,-7,0
+"LINESTRING (1478264.074714324669912 6891662.709210627712309,1478309.907073091017082 6891635.777043334208429,1478332.132781271822751 6891620.126690473407507,1478345.130435132188722 6891607.143511951901019,1478354.162544921739027 6891591.585185151547194,1478362.989379487698898 6891563.457646118476987)",321,unclassified,1,0,1,minorroads,-7,0
+"LINESTRING (1477870.207546508172527 6890978.105273565277457,1477871.81242551933974 6890936.997784550301731)",115,secondary,1,0,0,mainroads,-5,0
+"LINESTRING (1477698.952026794664562 6891185.101994454860687,1477704.662410258548334 6891180.672316116280854,1477801.412354895845056 6891105.552087247371674)",143,secondary,1,0,0,mainroads,-5,0
+"LINESTRING (1479215.254780515097082 6891069.072816937230527,1479243.134888005442917 6891128.374706505797803,1479276.548095814418048 6891179.446108014322817)",694,light_rail,1,0,0,railways,-3,0
+"LINESTRING (1477683.612369260750711 6890631.518402252346277,1477781.108769256155938 6890678.065286220051348)",734,light_rail,1,0,0,railways,-3,0
+"LINESTRING (1477349.396314963698387 6890405.439559964463115,1477377.099139308556914 6890438.206881085410714,1477405.483104167273268 6890465.763412615284324)",756,light_rail,1,0,0,railways,-3,0
+"LINESTRING (1477401.172324493527412 6890470.315307054668665,1477373.534814990125597 6890442.390931232832372,1477344.973566989181563 6890408.949243260547519)",763,light_rail,1,0,0,railways,-3,0
+"LINESTRING (1477714.347668485715985 6890670.003475363366306,1477654.761869808426127 6890641.77187445666641)",765,light_rail,1,0,0,railways,-3,0
+"LINESTRING (1479016.87493935925886 6890040.272282585501671,1478980.289296296890825 6890061.804538452997804,1478944.888651107437909 6890084.838752162642777,1478893.905750391772017 6890130.064469543285668,1478869.048787088599056 6890161.77319775428623,1478842.530960619682446 6890196.347961265593767,1478810.134798231767491 6890258.739233900792897,1478777.253439866937697 6890329.912772791460156)",19,motorway,1,0,1,motorways,-1,0
+"LINESTRING (1478758.974614370847121 6890316.165379947982728,1478791.501406445167959 6890245.313804953359067,1478827.919097055448219 6890179.964776864275336,1478850.14480523345992 6890142.815378563478589,1478874.553895328659564 6890110.171865802258253,1478923.16680029197596 6890062.616788381710649,1478958.455477175069973 6890037.95814321283251,1478997.037888313643634 6890015.629031332209706)",21,motorway,1,0,1,motorways,-1,0
+"LINESTRING (1479020.635208208812401 6892437.128092028200626,1479011.145894512534142 6892381.664349486120045,1479006.648501003393903 6892345.654512577690184,1479018.862376742530614 6892314.12112672906369,1479040.462928561726585 6892294.161799130029976,1479017.65871748351492 6892284.044186560437083)",180,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479020.635208208812401 6892437.128092028200626,1479068.343036052072421 6892505.88342846557498,1479114.138072055066004 6892537.938793009147048,1479148.503010437591001 6892548.945877370424569,1479190.491124129621312 6892566.407007291913033,1479238.338912354782224 6892590.107600770890713,1479258.381238624453545 6892602.448493731208146,1479338.130662565119565 6892645.69542468432337,1479404.201292129000649 6892683.055686702951789,1479430.168607773724943 6892698.094889210537076,1 [...]
+"LINESTRING (1479045.072290376992896 6892170.589830297976732,1479020.971113116247579 6892174.437533211894333,1479002.925554922781885 6892173.946989312767982,1478997.952296121278778 6892171.632235683500767,1478992.381873039528728 6892169.087540414184332,1478988.360344814369455 6892166.251585789956152,1478981.390317942481488 6892158.372236031107605,1478979.636147862067446 6892149.9870221093297,1478980.55055566970259 6892139.19509603176266,1478990.749001952353865 6892115.465173177421093,147 [...]
+"LINESTRING (1478942.052120761480182 6892225.622887848876417,1478944.244833362754434 6892195.132381286472082,1478953.267612462397665 6892164.350730281323195,1478960.172324489569291 6892134.611597723327577,1478974.215015846770257 6892108.95018723513931,1478994.714546022936702 6892084.208618130534887,1479019.207612342899665 6892056.370611586607993,1479031.37483462318778 6892040.750098372809589,1479037.383800225798041 6892032.27303178049624)",183,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479511.261651349952444 6891082.208400661125779,1479481.459421321051195 6891103.084366684779525,1479360.328378667356446 6891034.478972747921944,1479352.322644991567358 6891022.952833535149693,1479317.873730378691107 6890999.440786958672106,1479303.915015249047428 6890990.106492877937853,1479242.089850508607924 6890937.610870090313256,1479204.841728321043774 6890955.758223262615502)",184,service,0,0,0,minorroads,0,0
+"LINESTRING (1479453.616636599646881 6890482.744903990067542,1479446.292043434455991 6890501.872114131227136)",186,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478987.24999247584492 6890117.681394563056529,1478974.429621760733426 6890121.788649991154671,1478968.140735402470455 6890127.643025163561106,1478961.749211427755654 6890132.608519486151636,1478951.065569168189541 6890141.650631228461862)",187,path,0,0,0,minorroads,0,0
+"LINESTRING (1478973.720489174127579 6890696.33466696832329,1478974.793518746970221 6890708.27415887080133,1478934.484929603524506 6890755.082042676396668,1478897.694011319894344 6890797.568019906058908)",189,service,0,0,0,minorroads,0,0
+"LINESTRING (1479085.427532981848344 6890674.279605968855321,1479067.307329247938469 6890686.387658378109336,1478977.630049095954746 6890791.621195725165308)",190,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478977.630049095954746 6890791.621195725165308,1478928.056082863127813 6890850.737115069292486,1478879.415185823803768 6890912.75028891582042,1478830.093148273881525 6890892.73313207551837,1478828.898819707566872 6890880.302901268936694)",191,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478934.484929603524506 6890755.082042676396668,1478977.630049095954746 6890791.621195725165308)",192,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478842.60560615430586 6890756.859950644895434,1478850.378072533290833 6890746.820906506851315,1478913.714809364406392 6890737.854747919365764,1478934.484929603524506 6890755.082042676396668)",193,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479375.994610418565571 6891635.010619860142469,1479355.719016854884103 6891632.650036015547812,1479354.972561499569565 6891634.887992111966014,1479352.901147891534492 6891636.420839112251997,1479350.960363967344165 6891637.417189817875624,1479346.481631841277704 6891681.977185339666903)",194,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479310.493153058923781 6891678.712203078903258,1479316.203536522807553 6891629.262446126900613,1479319.264003475895151 6891603.648633949458599)",195,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479383.543140193447471 6891577.667022745124996,1479380.146768330130726 6891605.043519286438823)",196,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479596.926733975531533 6891723.011840671300888,1479608.944665183546022 6891709.660609316080809)",198,pedestrian,0,0,0,minorroads,0,0
+"LINESTRING (1479434.777969588991255 6891585.561131720431149,1479482.392490514554083 6891545.140309852547944)",199,pedestrian,0,0,0,minorroads,0,0
+"LINESTRING (1478963.578027048613876 6890644.591964773833752,1478967.31030381959863 6890667.658501483500004)",205,service,0,0,0,minorroads,0,0
+"LINESTRING (1479401.150155866052955 6890069.130116234533489,1479393.65761024877429 6890062.678090267814696,1479327.960208358010277 6889996.932087614201009)",207,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478944.664714500773698 6890030.004252052865922,1478958.623429630184546 6890021.192146747373044,1478992.307227504905313 6890002.081405482254922,1479026.690827270271257 6889979.154706041328609,1479038.44749910547398 6889972.901981176808476,1479054.701564449816942 6889964.273841869086027,1479095.672632720787078 6889942.527293800376356,1479155.734296685084701 6889930.205808525905013,1479283.12623362406157 6889933.470080768689513)",209,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478877.884952347259969 6890822.336283389478922,1478872.855709397001192 6890815.577114805579185,1478875.6642476671841 6890806.963398001156747,1478885.032262367196381 6890797.506712420843542,1478891.367802187101915 6890795.698141722939909,1478897.694011319894344 6890797.568019906058908,1478901.986129605211318 6890803.192983939312398,1478902.536640429403633 6890810.013449692167342,1478892.618114905199036 6890821.953110418282449,1478886.105291939806193 6890826.198667988181114,1 [...]
+"LINESTRING (1478892.618114905199036 6890821.953110418282449,1478928.056082863127813 6890850.737115069292486)",211,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479085.175604299176484 6891455.347645132802427,1479072.933736484264955 6891457.646864391863346,1479028.836886418517679 6891467.809421390295029,1478969.717622337630019 6891487.352836342528462,1478948.182385357562453 6891496.258518047630787,1478911.130207701120526 6891514.514429982751608,1478900.287943673552945 6891515.526093818247318,1478903.68431553686969 6891509.823990211822093,1478916.467363483039662 6891497.224194971844554,1478942.947867186041549 6891484.103261307813227, [...]
+"LINESTRING (1478965.024284297600389 6891474.477169387042522,1479027.586573694832623 6891454.795832606963813,1479057.939314550952986 6891448.388678853400052,1479088.058788104215637 6891445.828884401358664)",213,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478945.691090611740947 6891413.149424462579191,1479018.255881766555831 6891391.138380916789174,1479047.694214809220284 6891380.316817537881434)",214,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478991.019592018099502 6890132.409286628477275,1479002.59898070525378 6890131.244540799409151,1479038.382184260990471 6890132.45526344049722,1479064.209539529168978 6890130.202399942092597)",217,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479317.873730378691107 6890999.440786958672106,1479295.08818068052642 6891012.499620502814651,1479265.976421855157241 6891029.635539894923568,1479237.909700526855886 6891045.959146456792951)",219,service,0,0,0,minorroads,0,0
+"LINESTRING (1479265.976421855157241 6891029.635539894923568,1479332.858821619069204 6891062.006893378682435,1479344.43821030925028 6891037.498456098139286,1479352.322644991567358 6891022.952833535149693)",220,service,0,0,0,minorroads,0,0
+"LINESTRING (1479295.08818068052642 6891012.499620502814651,1479344.43821030925028 6891037.498456098139286)",221,service,0,0,0,minorroads,0,0
+"LINESTRING (1479352.742526129353791 6891350.626569028012455,1479161.827238515252247 6891268.591924785636365)",222,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479401.896611221367493 6891423.296597149223089,1479090.344807628775015 6891287.537070981226861)",223,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479465.690551959211007 6891463.594181259162724,1479453.709943517111242 6891455.914785820990801,1479425.409954888978973 6891447.760226246900856,1479401.896611221367493 6891423.296597149223089,1479373.596622593235224 6891386.126125248149037,1479360.179087595082819 6891365.494671508669853,1479352.742526129353791 6891350.626569028012455,1479336.908341917209327 6891318.483971345238388,1479321.559353690594435 6891301.699976419098675,1479307.162096040323377 6891284.670771724544466 [...]
+"LINESTRING (1479037.383800225798041 6892032.27303178049624,1479057.752700712764636 6891999.744479458779097,1479091.725750033278018 6891954.630875697359443,1479132.724810380022973 6891911.878190251998603,1479161.743262287694961 6891876.376312308013439,1479180.040749166859314 6891847.818568326532841,1479192.609191199066117 6891807.42708539031446,1479193.822181151015684 6891798.107181905768812,1479196.416113504674286 6891778.103149225004017,1479199.467249767621979 6891738.493778496980667,1 [...]
+"LINESTRING (1479229.549400552175939 6891674.880065969191492,1479216.271825936157256 6891656.777074966579676,1479171.10194629477337 6891595.187356659211218)",226,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479051.342515352414921 6892039.569746791385114,1479074.529284805525094 6892052.660928558558226)",227,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479558.661566364113241 6892730.994200934655964,1479535.32550584175624 6892695.871967596933246,1479509.208899124991149 6892661.945660936646163,1479484.967761487932876 6892632.250678585842252,1479458.813832005020231 6892615.448610161431134,1479373.167410765308887 6892570.024945888668299,1479300.957185906590894 6892532.435256485827267,1479252.782823463901877 6892527.974175323732197,1479204.001966048264876 6892521.336213783361018,1479171.325882901670411 6892514.928209916688502, [...]
+"LINESTRING (1479414.754304702393711 6890467.663866545073688,1479442.774372574873269 6890432.367605943232775,1479416.368514406494796 6890410.742400817573071)",229,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479416.368514406494796 6890410.742400817573071,1479439.378000711556524 6890381.009754501283169)",230,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479051.137240131385624 6892183.788532035425305,1479170.150215718429536 6892218.908528059720993)",231,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479506.027133178431541 6892443.306083716452122,1479501.464424824807793 6892426.182480680756271,1479502.845367229077965 6892406.974041910842061,1479509.358190197264776 6892389.145340526476502,1479520.33108390844427 6892376.789445140399039,1479537.816800587577745 6892362.747284359298646,1479546.046470873057842 6892354.515155650675297,1479550.012014943640679 6892345.179288049228489,1479549.91870802314952 6892327.672649290412664,1479550.151975322980434 6892285.929740659892559,1 [...]
+"LINESTRING (1478902.919198798481375 6890060.471222716383636,1478914.64787855790928 6890058.708794203586876,1478926.861754297045991 6890049.774053867906332,1478938.058584614889696 6890042.172635945491493,1478948.424983350094408 6890035.276194448582828)",233,path,0,0,0,minorroads,0,0
+"LINESTRING (1479491.368616155348718 6890886.081193597055972,1479515.021920202299953 6890883.996716304682195,1479588.379820165457204 6890877.528709341771901,1479587.465412357822061 6890868.70034805405885,1479683.07701257779263 6890859.764707515016198)",234,service,0,0,0,minorroads,0,0
+"LINESTRING (1479098.593139297328889 6892472.555796183645725,1479020.635208208812401 6892437.128092028200626,1478995.227734078653157 6892424.526843289844692,1478961.786534196697176 6892387.259762216359377,1478945.541799542261288 6892336.609921579249203,1478949.302068391814828 6892240.109368146397173)",237,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479433.219744036672637 6891903.615865284577012,1479430.597819601651281 6891902.512178732082248,1479418.225322103127837 6891896.365260567516088,1479414.045172115787864 6891896.319273664616048,1479410.387540879659355 6891897.668222876265645,1479407.756285757524893 6891900.350793006829917,1479391.679503558436409 6891935.208957064896822,1479391.408913492690772 6891939.347799245268106,1479394.180128997191787 6891944.268425508402288,1479406.673925491981208 6891951.089859411120415 [...]
+"LINESTRING (1479406.673925491981208 6891951.089859411120415,1479430.597819601651281 6891902.512178732082248)",239,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479452.32900111284107 6891899.875594805926085,1479453.635297982487828 6891897.116379988379776)",240,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479410.060966662364081 6891952.4388178139925,1479414.446391870733351 6891954.676862930878997)",241,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479419.643587276339531 6891968.243108676746488,1479421.313781131990254 6891964.763402775861323)",242,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479437.483870248775929 6891905.623962035402656,1479433.219744036672637 6891903.615865284577012)",243,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479414.446391870733351 6891954.676862930878997,1479424.038343177642673 6891959.060980518348515)",244,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479447.374403697205707 6891910.237987771630287,1479437.483870248775929 6891905.623962035402656)",245,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479421.313781131990254 6891964.763402775861323,1479424.038343177642673 6891959.060980518348515,1479447.374403697205707 6891910.237987771630287,1479452.32900111284107 6891899.875594805926085)",246,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479450.229595429031178 6891990.2404032535851,1479444.976415869081393 6891987.649777974933386,1479416.667096548015252 6891974.466727374121547,1479419.643587276339531 6891968.243108676746488)",247,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479453.635297982487828 6891897.116379988379776,1479455.45478290761821 6891893.330125654116273,1479482.747056807857007 6891906.22179246135056,1479488.485432347515598 6891908.93502342607826)",248,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479571.146032168995589 6890409.056526175700128,1479584.125024646287784 6890393.883670332841575)",249,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479124.859037083573639 6890282.417699187062681,1479141.76625086273998 6890264.731641499325633,1479190.089904377469793 6890264.731641499325633,1479210.813371154945344 6890280.333378406241536,1479221.870241096476093 6890288.900553298182786)",250,service,0,0,0,minorroads,0,0
+"LINESTRING (1478931.471116109518334 6891338.793418453074992,1478931.601745795924217 6891332.723570773378015)",251,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479038.970017851097509 6891272.239934901706874,1479061.484977483516559 6891259.410595729015768)",253,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479300.518643385730684 6891457.738833180628717,1479254.406363858142868 6891450.381333781406283,1479213.62190942815505 6891446.33471198566258,1479156.919294558465481 6891446.212087113410234,1479127.704898122698069 6891446.917180147953331,1479088.058788104215637 6891445.828884401358664,1479094.702240758575499 6891400.411828546784818,1479047.694214809220284 6891380.316817537881434,1478962.775587541749701 6891344.388105345889926,1478953.202297617914155 6891347.637623907066882)" [...]
+"LINESTRING (1479263.55977264419198 6891258.99674641340971,1479214.013798487139866 6891247.240369359962642,1479177.754729644861072 6891220.830734963528812,1479149.939936996437609 6891199.249391805380583,1479148.055137223796919 6891171.123225434683263,1479200.400318960892037 6891168.364260731264949,1479207.734242819016799 6891139.14994818624109,1478898.141884530894458 6890996.773844690993428,1478872.053269889904186 6891032.103237913921475,1478847.513550108298659 6891072.260914628393948,14 [...]
+"LINESTRING (1479349.467453256715089 6892329.95678826700896,1479339.194361444795504 6892336.594591772183776,1479340.202076172921807 6892354.714443584904075,1479352.994454809231684 6892359.236747993156314)",256,service,0,0,0,minorroads,0,0
+"LINESTRING (1479593.00784336659126 6892275.26026960555464,1479592.009459325810894 6892313.845190985128284,1479549.91870802314952 6892327.672649290412664)",257,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479592.009459325810894 6892313.845190985128284,1479591.281665356131271 6892346.405673980712891,1479550.012014943640679 6892345.179288049228489)",258,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479007.749522649217397 6892003.975329895503819,1479015.932539475848898 6891989.627237430773675)",259,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478994.0800589711871 6892008.788691441528499,1478986.037002523662522 6892003.868025694973767,1479006.424564396496862 6891979.418033379130065,1479038.531475333031267 6891954.814824637956917,1479057.276835423195735 6891941.953738008625805,1479083.216158994706348 6891928.663459150120616,1479132.724810380022973 6891911.878190251998603,1479185.1912911105901 6891905.991857678629458,1479213.509941124590114 6891907.87732311245054)",261,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479344.391556847607717 6891681.793242639862001,1479346.481631841277704 6891681.977185339666903,1479371.403909988934174 6891684.245812286622822)",262,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478964.949638760183007 6892198.842130050994456,1478992.540494801709428 6892200.957607388496399,1479023.751659313682467 6892197.355164431966841)",263,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479332.560239477548748 6891680.720243656076491,1479337.094955755397677 6891635.807700280100107,1479335.769997502909973 6891634.887992111966014,1479334.062480878317729 6891633.339816934429109,1479333.260041374014691 6891630.994562047533691,1479316.203536522807553 6891629.262446126900613)",264,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478922.522982550086454 6892195.055733603425324,1478944.244833362754434 6892195.132381286472082,1478964.949638760183007 6892198.842130050994456)",265,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478944.244833362754434 6892195.132381286472082,1478948.518290270585567 6892151.075413181446493,1478957.111857536714524 6892107.018686534836888,1478968.99915905832313 6892072.619656547904015,1478994.415963881416246 6892026.73918299935758)",266,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479034.351325348485261 6892030.126940387301147,1479031.645424688700587 6892028.762639727443457,1479025.907049149041995 6892025.604821115732193,1478994.0800589711871 6892008.788691441528499)",267,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479023.751659313682467 6892197.355164431966841,1479051.137240131385624 6892183.788532035425305)",269,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479015.932539475848898 6891989.627237430773675,1479030.637709960807115 6891967.752577354200184,1479038.531475333031267 6891954.814824637956917)",270,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478986.037002523662522 6892003.868025694973767,1478968.961836289614439 6891994.609211077913642)",271,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479175.076821058290079 6892272.807519636116922,1479168.890572307631373 6892273.788619532249868)",272,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478966.694478150689974 6892266.047131421044469,1478949.302068391814828 6892240.109368146397173)",273,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479176.037882324540988 6892219.889621376991272,1479174.98351413779892 6892237.625969672575593)",274,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479175.095482441131026 6892253.338843335397542,1479175.076821058290079 6892272.807519636116922)",275,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479017.65871748351492 6892284.044186560437083,1478966.694478150689974 6892266.047131421044469)",276,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479168.890572307631373 6892273.788619532249868,1479040.462928561726585 6892294.161799130029976)",277,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479170.150215718429536 6892218.908528059720993,1479176.037882324540988 6892219.889621376991272)",278,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479176.065874400548637 6891773.136638476513326,1479193.822181151015684 6891798.107181905768812)",279,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479380.146768330130726 6891605.043519286438823,1479379.689564426196739 6891608.752995756454766)",280,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479319.525262851500884 6891600.613609550520778,1479323.005610939580947 6891573.329098201356828)",281,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479319.264003475895151 6891603.648633949458599,1479319.525262851500884 6891600.613609550520778)",282,steps,0,0,0,minorroads,0,0
+"LINESTRING (1479379.689564426196739 6891608.752995756454766,1479375.994610418565571 6891635.010619860142469,1479371.403909988934174 6891684.245812286622822)",283,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479112.365240588784218 6891776.922836208716035,1479157.544450920075178 6891796.972852283157408,1479167.155063610058278 6891794.903467575088143,1479173.182690595509484 6891787.484344554133713,1479176.065874400548637 6891773.136638476513326,1479180.367323384154588 6891714.09057914186269,1479184.668772364966571 6891697.750287312082946,1479189.819314308930188 6891682.835584651678801,1479216.271825936157256 6891656.777074966579676)",284,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479098.593139297328889 6892472.555796183645725,1479118.924717012792826 6892513.39519539475441,1479148.503010437591001 6892548.945877370424569,1479229.493416403187439 6892660.412618377245963,1479234.933209798531607 6892661.685043681412935)",286,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479070.41444966266863 6892513.732458561658859,1479068.343036052072421 6892505.88342846557498)",287,footway,0,0,0,minorroads,0,0
+"LINESTRING (1479074.566607571439818 6892534.336199035868049,1479070.41444966266863 6892513.732458561658859)",288,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477868.43471504189074 6891004.698037818074226,1477945.356939326506108 6891019.718773512169719,1478003.72041735611856 6891029.390302868559957,1478039.289015 6891037.053963554091752,1478070.117621140554547 6891046.449621527455747,1478085.634561822284013 6891052.51925307046622,1478099.238710658624768 6891059.35525771882385,1478109.306527255102992 6891066.405851566232741,1478116.089940288802609 6891073.793654355220497,1478123.5731552161742 6891084.292929342016578,1478128.854326 [...]
+"LINESTRING (1478121.949614822166041 6891169.866363619454205,1478201.437779386993498 6891217.397335584275424)",292,service,0,0,0,minorroads,0,0
+"LINESTRING (1477908.155470594996586 6891145.7101308433339,1478070.117621140554547 6891046.449621527455747)",293,service,0,0,0,minorroads,0,0
+"LINESTRING (1477942.063205073587596 6891174.296036006882787,1478116.089940288802609 6891073.793654355220497)",294,service,0,0,0,minorroads,0,0
+"LINESTRING (1477978.45290360529907 6891202.43754112534225,1478132.073415567399934 6891115.208392390981317)",295,service,0,0,0,minorroads,0,0
+"LINESTRING (1478502.968419844750315 6890668.378852861002088,1478491.659621223341674 6890662.079612115398049,1478357.717538550263271 6890547.713233261369169,1478130.104639569995925 6890358.679689854383469,1477868.845265486976132 6890131.995495325885713,1477851.947382397949696 6890112.623956055380404,1477704.587764723692089 6890002.725070449523628,1477682.39004861866124 6889990.909228938631713,1477667.638224675087258 6889991.169759628362954,1477650.339121833909303 6890011.138695799745619, [...]
+"LINESTRING (1478249.052300312556326 6891837.149678730405867,1478207.735996438423172 6891845.090029121376574)",298,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478305.754915182245895 6892111.878097912296653,1478297.767842886503786 6892113.47235338576138,1478285.376684002345428 6892102.711135057732463,1478249.565488368039951 6891961.345014753751457,1478246.71029663621448 6891935.132311857305467,1478251.254343609558418 6891925.459692790172994,1478266.19278139132075 6891904.336327421478927)",299,service,0,0,1,minorroads,0,0
+"LINESTRING (1478245.217385928379372 6892482.137093056924641,1478249.798755665076897 6892400.458819705992937,1478255.873036114964634 6892389.436608762480319,1478265.017114208079875 6892376.636146306991577,1478275.60744954738766 6892369.308465602807701,1478290.592540793586522 6892365.292040934786201,1478302.666456150589511 6892364.924124269746244,1478313.993916155071929 6892364.556207627058029,1478330.81715370924212 6892374.796560563147068,1478343.973429331788793 6892389.068690993823111,1 [...]
+"LINESTRING (1477998.047356663970277 6891324.661103413440287,1478020.413025221321732 6891332.049143535085022,1478049.879350342787802 6891330.792256562970579,1478086.632945860503241 6891324.339218001812696,1478122.32284249830991 6891312.122909786179662,1478158.218014360172674 6891292.917132769711316,1478184.875801208429039 6891269.342985554598272)",301,service,0,0,1,minorroads,0,0
+"LINESTRING (1477965.529895279556513 6891284.946672138758004,1477998.047356663970277 6891324.661103413440287,1478031.899106987984851 6891366.506316591985524,1478044.019675809424371 6891373.311932296492159,1478056.233551548561081 6891375.8870316343382,1478074.745644338661805 6891370.552898212336004,1478103.446852721972391 6891365.862542429938912,1478147.40374241117388 6891349.476974621415138,1478163.508516683243215 6891340.49481596890837,1478174.164166870061308 6891331.252093238756061,147 [...]
+"LINESTRING (1478298.215716100297868 6890783.32936832588166,1478344.18803524854593 6890790.609622975811362,1478360.563399586360902 6890795.406931225210428,1478380.503088242607191 6890801.30777757242322,1478412.759290251415223 6890816.649998326785862,1478421.474156513577327 6890821.386014446616173)",303,service,0,0,0,minorroads,0,0
+"LINESTRING (1477950.162245669867843 6891274.998935245908797,1477965.529895279556513 6891284.946672138758004,1478000.743926630821079 6891290.280748765915632,1478023.613452556543052 6891292.687215525656939,1478047.994550570147112 6891291.46099033113569,1478072.963482179446146 6891288.364772556349635,1478095.851669488241896 6891280.823494642972946,1478111.704515080433339 6891274.615740698762238,1478129.106255532009527 6891265.219816066324711,1478142.495798451593146 6891260.667471537366509, [...]
+"LINESTRING (1478600.64210298541002 6890542.839440878480673,1478535.252613929333165 6890495.358435696922243,1478534.422182349255309 6890488.415626615285873,1478532.957263714633882 6890483.311976070515811,1478532.593366731191054 6890467.096795568242669,1478530.577937269350514 6890451.785894272848964,1478523.999799459474161 6890439.785478501580656,1478517.244378498755395 6890430.773683805018663,1478478.139448614558205 6890386.052035748027265,1478464.246048329630867 6890364.151086367666721, [...]
+"LINESTRING (1478340.343790168641135 6890286.463735183700919,1478368.121260051382706 6890284.593975868076086,1478383.470248277997598 6890287.291333702392876,1478397.167704032035545 6890294.509835544042289,1478446.153836674522609 6890326.924207131378353,1478458.750270782737061 6890330.817005697637796,1478503.892158345319331 6890335.016325954347849,1478531.492345079779625 6890335.338171758688986,1478549.220659751677886 6890332.02775839343667,1478568.049996066605672 6890323.322603833861649, [...]
+"LINESTRING (1478306.762629910372198 6890306.402752917259932,1478312.267738147405908 6890297.314478134736419,1478325.470667231595144 6890295.873841928318143,1478340.343790168641135 6890286.463735183700919)",307,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478502.221964489435777 6891308.628160036168993,1478503.920150421094149 6891293.882785264402628,1478500.98098246450536 6891258.506258369423449,1478495.905086055397987 6891238.197014091536403,1478490.232025357428938 6891222.68538433779031,1478483.513927168212831 6891211.634132778272033,1478480.528105752775446 6891201.47189961373806,1478468.724780458724126 6891168.793432957492769,1478460.224520107498392 6891146.093319251202047,1478452.750635873060673 6891121.906502928584814,14 [...]
+"LINESTRING (1478340.343790168641135 6890286.463735183700919,1478296.209617334185168 6890250.693169337697327)",309,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478828.898819707566872 6890880.302901268936694,1478825.987643823958933 6890825.386340913362801,1478839.097265987657011 6890775.359412892721593,1478842.60560615430586 6890756.859950644895434)",310,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478828.898819707566872 6890880.302901268936694,1478877.884952347259969 6890822.336283389478922)",311,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478454.476813877699897 6891793.539206840097904,1478436.776491281576455 6891737.267485307529569,1478426.895288528874516 6891709.308051269501448)",314,service,0,0,1,minorroads,0,0
+"LINESTRING (1478656.850191182689741 6891252.574420961551368,1478692.222844290314242 6891238.886761170811951,1478723.359363270457834 6891253.156875086948276)",316,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478466.158840178279206 6891481.390173728577793,1478483.747194468043745 6891486.157237827777863,1478497.845869976794347 6891492.978283021599054,1478514.510485763195902 6891508.551747220568359,1478523.122714417753741 6891524.799684935249388,1478528.851759261917323 6891543.914046152494848,1478534.506158574018627 6891569.711608147248626,1478542.959765463601798 6891648.515012176707387)",319,service,0,0,0,minorroads,0,0
+"LINESTRING (1478186.172767387935892 6892076.850545356050134,1478159.738917143782601 6891950.645316352136433,1478153.524676317116246 6891922.393888857215643)",324,service,0,0,1,minorroads,0,0
+"LINESTRING (1477992.150359361898154 6891880.024598241783679,1478001.098492924124002 6891901.362505401484668,1478010.111941330833361 6891922.884417406283319,1478034.241110664559528 6892064.219202788546681)",325,service,0,0,0,minorroads,0,0
+"LINESTRING (1478153.524676317116246 6891922.393888857215643,1478129.796726738568395 6891820.855123235844076)",326,service,0,0,1,minorroads,0,0
+"LINESTRING (1478475.106973737478256 6892349.655597596429288,1478483.35530540603213 6892391.046249195933342)",327,service,0,0,1,minorroads,0,0
+"LINESTRING (1478523.77586285257712 6892467.619516485370696,1478535.821786136599258 6892493.496693428605795,1478543.360985215753317 6892518.883388736285269,1478545.749642353737727 6892539.471812217496336,1478544.443345481297001 6892557.070893596857786,1478539.078197620576248 6892576.92356213927269)",328,service,0,0,0,minorroads,0,0
+"LINESTRING (1478418.469673712505028 6892336.287995646707714,1478428.005640867631882 6892332.746811239980161,1478435.218265729257837 6892330.96855472587049,1478454.252877273596823 6892323.31899023335427,1478520.995316658169031 6892314.458381541073322,1478516.460600377526134 6892285.055947243236005,1478513.745369025040418 6892253.890710676088929,1478514.221234314609319 6892241.45837504696101)",331,service,0,0,0,minorroads,0,0
+"LINESTRING (1478129.796726738568395 6891820.855123235844076,1478087.482038826216012 6891839.403020612895489,1478076.089263980044052 6891843.971021738834679,1477992.150359361898154 6891880.024598241783679)",332,service,0,0,1,minorroads,0,0
+"LINESTRING (1478010.111941330833361 6891922.884417406283319,1478076.369184735696763 6891897.95947330724448,1478085.34531037369743 6891892.333743230439723,1478092.147384793264791 6891886.891964479349554,1478098.258988006506115 6891878.798283461481333,1478103.689450711710379 6891867.148302355781198,1478106.675272129941732 6891858.380169824697077,1478109.614440086763352 6891846.147721174173057)",333,service,0,0,0,minorroads,0,0
+"LINESTRING (1478054.423397313337773 6892200.32909594848752,1478083.927045200718567 6892187.697559367865324,1478108.522749131079763 6892177.21217271219939)",336,service,0,0,0,minorroads,0,0
+"LINESTRING (1478515.340917346067727 6892220.410827253945172,1478514.398517462657765 6892233.394996258430183,1478514.221234314609319 6892241.45837504696101)",337,service,0,0,0,minorroads,0,0
+"LINESTRING (1478550.844200145918876 6890545.552211744710803,1478554.819074909435585 6890541.383434292860329,1478590.24771217443049 6890558.411064649000764)",339,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478292.038798042573035 6890286.525038770399988,1478306.762629910372198 6890306.402752917259932,1478342.517841390101239 6890336.334361232817173,1478380.587064470164478 6890360.65674867015332,1478421.67010104469955 6890401.592703618109226,1478455.680473136715591 6890423.769625853747129,1478497.174060156103224 6890463.020016191527247,1478511.655294034164399 6890478.330938881263137,1478535.252613929333165 6890495.358435696922243)",340,path,0,0,0,minorroads,0,0
+"LINESTRING (1478535.252613929333165 6890495.358435696922243,1478532.378760814433917 6890516.49342564959079,1478534.599465494509786 6890529.290926621295512,1478543.332993139745668 6890539.498289315961301,1478550.844200145918876 6890545.552211744710803)",341,path,0,0,0,minorroads,0,0
+"LINESTRING (1478529.290301782777533 6892221.10065860580653,1478531.958879676647484 6892233.824225340969861,1478532.938602331560105 6892274.263839844614267,1478537.202728543663397 6892321.908650481142104,1478524.886215194128454 6892336.410634094849229,1478436.459247756982222 6892347.892667171545327,1478423.265649365726858 6892349.165043009445071)",342,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478454.252877273596823 6892323.31899023335427,1478448.91572148585692 6892291.325800381600857,1478445.295413015875965 6892261.908121032640338,1478513.745369025040418 6892253.890710676088929)",343,service,0,0,0,minorroads,0,0
+"LINESTRING (1478448.91572148585692 6892291.325800381600857,1478516.460600377526134 6892285.055947243236005)",344,service,0,0,0,minorroads,0,0
+"LINESTRING (1478344.18803524854593 6890790.609622975811362,1478348.937357440358028 6890749.870935382321477,1478348.666767374845222 6890739.923860553652048,1478342.881738376105204 6890733.302702005021274,1478318.04343645600602 6890728.520757546648383)",345,service,0,0,0,minorroads,0,0
+"LINESTRING (1478684.179787848610431 6890636.959331315010786,1478689.386313944123685 6890639.28896967228502,1478714.775126691674814 6890647.488689003512263,1478731.701001853682101 6890650.768579075112939,1478743.644287527073175 6890644.500005290843546)",347,path,0,0,0,minorroads,0,0
+"LINESTRING (1478431.579295878997073 6892449.652710394002497,1478423.079035527771339 6892454.803599508479238,1478359.453047247836366 6892490.139400960877538,1478345.708938032155856 6892489.756148488260806)",348,service,0,0,0,minorroads,0,0
+"LINESTRING (1478875.6642476671841 6890806.963398001156747,1478839.097265987657011 6890775.359412892721593)",349,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478600.660764371277764 6890704.365850842557847,1478605.186149956192821 6890712.81086390838027,1478611.820271917851642 6890722.313430053181946,1478614.516841887496412 6890727.034063856117427,1478654.694801344303414 6890781.137629794888198,1478763.126772282179445 6890832.75859528966248)",350,service,0,0,0,minorroads,0,0
+"LINESTRING (1478614.516841887496412 6890727.034063856117427,1478637.041132210055366 6890686.939418164081872,1478692.633394738193601 6890709.071147411130369)",351,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478492.303438970819116 6892407.924498297274113,1478509.257306208834052 6892408.369066645391285,1478526.360464518889785 6892406.008255694061518,1478540.33784103137441 6892401.240646092221141,1478552.645023687975481 6892388.946051742881536,1478560.342844535131007 6892378.199794524349272,1478570.681251191534102 6892353.135470101609826)",353,service,0,0,0,minorroads,0,0
+"LINESTRING (1478953.202297617914155 6891347.637623907066882,1478931.471116109518334 6891338.793418453074992,1478901.864830611506477 6891359.991937587969005,1478864.206157973501831 6891384.041518303565681,1478830.662320480914786 6891409.348070020787418,1478812.290188067127019 6891426.132289689965546,1478755.130369296530262 6891480.654421320185065,1478703.251722156070173 6891549.692815471440554,1478689.134385264245793 6891571.535681317560375,1478657.522001 6891627.055148504674435,1478637. [...]
+"LINESTRING (1478668.280288797570392 6891771.649751598015428,1478660.134594739647582 6891790.028919039294124,1478649.525598014704883 6891813.849854120984674,1478640.558803069638088 6891829.010061269626021,1478646.213202378945425 6891861.185358035378158,1478648.508552593644708 6891887.934333082288504,1478650.589296894380823 6891930.487613770179451,1478650.160085063660517 6891985.994230893440545,1478651.48504331917502 6892023.887949385680258)",355,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478782.749217414064333 6891635.179233017377555,1478773.446517555741593 6891671.001945073716342,1478739.286854397272691 6891804.361326470971107,1478712.246509179938585 6891906.574359148740768,1478678.739994450472295 6892037.714908943511546,1478666.423481103731319 6892094.096039024181664)",356,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478755.130369296530262 6891480.654421320185065,1478793.47951313527301 6891520.001941416412592)",357,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478773.446517555741593 6891671.001945073716342,1478818.709704117616639 6891683.065513053908944)",358,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478767.045662891119719 6891621.092382272705436,1478782.749217414064333 6891635.179233017377555)",359,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477846.171684092143551 6889939.00248887296766,1478169.946694119600579 6890214.401686768047512,1478195.494128623511642 6890209.911240221001208)",360,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478245.217385928379372 6892482.137093056924641,1478237.435588859487325 6892526.349177302792668,1478234.711026813834906 6892557.270186549983919,1478232.518314209766686 6892588.957829094491899,1478340.996938606491312 6892596.776279703713953)",361,service,0,0,0,minorroads,0,0
+"LINESTRING (1478345.708938032155856 6892489.756148488260806,1478245.217385928379372 6892482.137093056924641)",362,service,0,0,0,minorroads,0,0
+"LINESTRING (1478036.723074720241129 6891729.495856549590826,1478044.626170785399154 6891741.988715119659901)",363,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478321.449139009229839 6892126.425690860487521,1478312.127777771092951 6892118.009851474314928,1478305.754915182245895 6892111.878097912296653,1478300.501735622063279 6892101.944667064584792,1478292.346710877027363 6892075.516895382665098,1478267.685692099155858 6891978.835526627488434)",364,service,0,0,1,minorroads,0,0
+"LINESTRING (1478253.503040365641937 6891040.058120541274548,1478253.16713545517996 6891093.259474310092628,1478229.616469018859789 6891186.251565363258123,1478201.437779386993498 6891217.397335584275424)",365,track,0,0,0,minorroads,0,0
+"LINESTRING (1478663.092424082104117 6890614.521270107477903,1478670.46367070893757 6890619.165207961574197)",366,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478362.765442883595824 6892306.640205512754619,1478358.342694909079 6892292.506188929080963)",367,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478318.136743376497179 6892116.154995526187122,1478312.127777771092951 6892118.009851474314928,1478290.126006194157526 6892125.138020876795053)",368,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478439.062510809162632 6892244.340345094911754,1478418.786917239660397 6892247.360282902605832)",369,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478423.918797800550237 6892177.089536693878472,1478404.315014054765925 6892179.250996824353933)",370,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477934.290738694835454 6891718.244636114686728,1477948.034847910283133 6891709.921195707283914,1477965.940445724641904 6891696.585314678959548,1477976.76404836634174 6891682.437042098492384,1477981.336087410105392 6891672.028957143425941,1477988.007532143266872 6891667.445725190453231,1477996.741059794323519 6891667.445725190453231,1478005.073367684613913 6891672.85669831186533,1478008.824305844027549 6891681.593971388414502,1478008.824305844027549 6891692.845140528865159,1 [...]
+"LINESTRING (1478002.040892810327932 6891541.829398297704756,1478017.091298892628402 6891529.934653213247657,1478018.332280920585617 6891528.96897236444056,1478035.687367916340008 6891514.468445266596973,1478046.73490715934895 6891504.82698876876384,1478070.192266677971929 6891511.939286240376532,1478108.914638193091378 6891556.621212807483971)",374,service,0,0,0,minorroads,0,0
+"LINESTRING (1478035.687367916340008 6891514.468445266596973,1478084.262950108153746 6891571.137144286185503)",375,service,0,0,0,minorroads,0,0
+"LINESTRING (1478215.200549985514954 6891534.686417824588716,1478178.904158371733502 6891520.431132415309548)",377,service,0,0,1,minorroads,0,0
+"LINESTRING (1478284.536921729333699 6891783.682813100516796,1478291.20836645970121 6891823.66029835306108)",379,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478265.091759745730087 6891789.477083542384207,1478284.536921729333699 6891783.682813100516796)",380,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478207.735996438423172 6891845.090029121376574,1478215.228542061522603 6891874.245591463521123)",381,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478052.874502453953028 6891606.26979230903089,1478077.890087522100657 6891607.710663352161646,1478084.682831245940179 6891608.109202195890248,1478111.340618094196543 6891607.894604350440204,1478134.574041006155312 6891600.184414274990559,1478181.7500194106251 6891550.612513891421258)",382,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478201.437779386993498 6891217.397335584275424,1478240.664008267689496 6891229.552189072594047)",383,service,0,0,0,minorroads,0,0
+"LINESTRING (1478641.370573266642168 6892632.0667141424492,1478562.768824436236173 6892499.644068215973675,1478577.007460321532562 6892490.660624356009066,1478665.649033669615164 6892636.067941721528769,1478671.144811219535768 6892649.037451725453138,1478668.858791697770357 6892665.502320799045265)",384,service,0,0,0,minorroads,0,0
+"LINESTRING (1478577.50198699417524 6892657.315873299725354,1478578.043167128227651 6892638.551463293842971,1478576.540925727691501 6892624.723470226861537,1478569.626883004792035 6892561.378688556142151,1478562.768824436236173 6892499.644068215973675)",385,service,0,0,0,minorroads,0,0
+"LINESTRING (1478354.479788446333259 6892046.069347251206636,1478380.7830090012867 6892040.244233387522399)",389,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478279.339726323960349 6892178.407874005846679,1478258.466968471417204 6892184.15644040890038)",394,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478330.751838867552578 6891513.839987489394844,1478314.572419055039063 6891526.363167470321059,1478304.653893533628434 6891544.619147759862244)",395,service,0,0,1,minorroads,0,0
+"LINESTRING (1478266.771284291520715 6891649.189465964213014,1478247.857971743447706 6891659.628178384155035,1478237.248975021298975 6891675.033351420424879)",396,path,0,0,1,minorroads,0,0
+"LINESTRING (1478502.221964489435777 6891308.628160036168993,1478500.943659695796669 6891361.524732173420489,1478492.462060733232647 6891398.051313592121005,1478467.679742961889133 6891433.934281352907419,1478439.631683016428724 6891460.022724987007678,1478405.05213871714659 6891485.467469537630677,1478373.747667287709191 6891508.950281143188477,1478352.874909435166046 6891537.000988053157926)",398,path,0,0,1,minorroads,0,0
+"LINESTRING (1478314.572419055039063 6891526.363167470321059,1478287.214830313343555 6891523.757363410666585)",399,service,0,0,1,minorroads,0,0
+"LINESTRING (1478034.241110664559528 6892064.219202788546681,1478039.344999152235687 6892078.598087023943663,1478054.283436933998019 6892089.251967732794583,1478158.106046056607738 6892095.843584448099136,1478176.534162622177973 6892091.444062924012542,1478186.172767387935892 6892076.850545356050134)",401,service,0,0,1,minorroads,0,0
+"LINESTRING (1478483.047392571577802 6891339.299239296466112,1478488.347225587582216 6891367.196074674837291,1478478.951218814589083 6891390.17271673399955,1478463.807505809003487 6891415.739864616654813,1478443.457266707671806 6891438.701317322440445,1478427.287177590886131 6891453.830160783603787,1478398.585969207808375 6891473.143619342707098,1478366.227129588602111 6891491.920637429691851,1478330.751838867552578 6891513.839987489394844,1478321.794374612625688 6891529.076270229183137, [...]
+"LINESTRING (1478057.465202880557626 6892224.90239691734314,1478093.024469834985211 6892209.925397932529449,1478146.34004353149794 6892186.425209088250995)",406,service,0,0,0,minorroads,0,0
+"LINESTRING (1478066.245383990462869 6892248.387368608266115,1478102.47646076255478 6892233.011756023392081,1478190.418232214171439 6892193.645416352897882)",407,service,0,0,0,minorroads,0,0
+"LINESTRING (1478266.323411077726632 6892206.675530795939267,1478258.466968471417204 6892184.15644040890038)",408,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478294.147534419083968 6892193.936677500605583,1478302.395866084843874 6892198.198289232328534,1478342.172605789732188 6892190.916759766638279,1478366.684333492536098 6892186.885094705037773,1478394.974991430528462 6892184.217758473940194,1478408.691108567407355 6892187.253003220073879,1478423.946789876557887 6892198.397573292255402)",409,cycleway,0,0,1,minorroads,0,0
+"LINESTRING (1478426.568714311579242 6892198.351584662683308,1478423.918797800550237 6892177.089536693878472)",410,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478290.126006194157526 6892125.138020876795053,1478295.649775819852948 6892148.408088837750256)",411,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478379.915254652500153 6892302.271228101104498,1478362.765442883595824 6892306.640205512754619)",412,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478435.358226108597592 6892223.185482617467642,1478439.258455337258056 6892236.184985723346472,1478439.062510809162632 6892244.340345094911754)",413,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478083.927045200718567 6892187.697559367865324,1478093.024469834985211 6892209.925397932529449,1478102.47646076255478 6892233.011756023392081,1478106.442004830343649 6892242.715404408052564,1478115.819350223056972 6892267.411472347564995)",414,service,0,0,0,minorroads,0,0
+"LINESTRING (1478258.466968471417204 6892184.15644040890038,1478255.191895604366437 6892172.015472995117307,1478188.91599081363529 6892168.2597481533885,1478009.794697806239128 6892157.437138617038727,1477988.875286494847387 6892163.798869086429477,1478001.574358213692904 6892194.411893087439239,1477860.755555583396927 6892253.814062429592013,1477862.994921646546572 6892261.662846405990422,1477820.493619899032637 6892278.142251771874726,1477774.316025526728481 6892297.166425926610827,147 [...]
+"LINESTRING (1478148.495433366857469 6891955.366671485826373,1478146.871892969822511 6891953.542511217296124)",416,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478159.738917143782601 6891950.645316352136433,1478148.495433366857469 6891955.366671485826373)",418,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478188.91599081363529 6892168.2597481533885,1478189.345202641561627 6892164.39671871624887)",419,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478136.794745683437213 6891958.003273610956967,1478133.109122371301055 6891956.638985191471875)",420,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478191.565907321637496 6892107.493896978907287,1478186.172767387935892 6892076.850545356050134)",421,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478146.871892969822511 6891953.542511217296124,1478136.794745683437213 6891958.003273610956967)",422,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478174.164166870061308 6891331.252093238756061,1478183.056316283298656 6891328.90692647267133,1478203.341240539913997 6891334.992099165916443)",423,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478742.832517329836264 6890551.621465139091015,1478732.372811674140394 6890553.414654522202909)",424,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478670.46367070893757 6890619.165207961574197,1478689.983478227397427 6890631.901566152460873,1478689.386313944123685 6890639.28896967228502)",425,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478744.437396341003478 6890562.901705839671195,1478742.832517329836264 6890551.621465139091015)",426,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478711.369424138218164 6890558.916836394928396,1478701.861449058866128 6890559.085426985286176,1478696.636261577485129 6890557.292236343957484)",427,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478942.192081137793139 6890130.999331175349653,1478929.446355960331857 6890151.520337683148682,1478917.950943500734866 6890148.838351035490632,1478911.232845311518759 6890147.79620789270848,1478903.646992770954967 6890148.57781523745507,1478894.801496819360182 6890155.535656509920955,1478878.239518640562892 6890175.397721116431057,1478845.694065183168277 6890222.738904757425189,1478818.970963490428403 6890267.812139219604433,1478806.281222464516759 6890296.624811832793057,1 [...]
+"LINESTRING (1478732.372811674140394 6890553.414654522202909,1478711.369424138218164 6890558.916836394928396)",429,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478677.396374812116846 6890611.777822931297123,1478687.081633039517328 6890607.195195377804339,1478692.78268580744043 6890602.581917437724769,1478698.707675185520202 6890595.562383316457272,1478713.562136739492416 6890570.764165580272675,1478718.376773776020855 6890564.786856304854155,1478726.401168837677687 6890560.541436778381467,1478737.066149717196822 6890558.610308059491217,1478744.437396341003478 6890562.901705839671195)",430,cycleway,0,0,0,minorroads,0,0
+"LINESTRING (1478643.236711653415114 6892266.522351266816258,1478653.985668757697567 6892305.935037068091333)",431,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478772.90533742448315 6891164.83891832921654,1478775.947142997290939 6891159.152391017414629)",433,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478772.90533742448315 6891164.83891832921654,1478769.872862547170371 6891170.280208340846002)",434,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478723.359363270457834 6891253.156875086948276,1478731.085176187567413 6891239.193315446376801)",435,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478786.593462488148361 6891171.828294342383742,1478772.90533742448315 6891164.83891832921654)",436,steps,0,0,0,minorroads,0,0
+"LINESTRING (1478668.765484777279198 6892171.203009921126068,1478681.837784175062552 6892208.622385010123253)",437,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478710.221749030752108 6891380.163537707179785,1478748.841482935240492 6891408.183139178901911,1478750.819589622784406 6891407.692642033100128,1478767.596173715544865 6891418.790147279389203,1478786.602793178288266 6891409.302085905335844,1478804.489729615394026 6891405.224828724749386,1478817.935256686527282 6891406.941568339243531,1478830.662320480914786 6891409.348070020787418)",438,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478666.796708779875189 6891437.429085585288703,1478710.221749030752108 6891380.163537707179785,1478724.544361143605784 6891353.262972820550203,1478732.932653188472614 6891356.113968593068421,1478780.79910279950127 6891268.009469541721046)",439,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478650.160085063660517 6891985.994230893440545,1478681.333926809718832 6891992.585762946866453,1478677.928224253468215 6892027.842886608093977,1478677.741610415279865 6892034.388465284369886,1478678.739994450472295 6892037.714908943511546)",440,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478168.15520126442425 6892347.494091650471091,1478160.606671495363116 6892351.387868744321167)",441,service,0,0,0,minorroads,0,0
+"LINESTRING (1478168.15520126442425 6892347.494091650471091,1478229.02863542875275 6892316.635208372958004,1478258.448307088343427 6892304.662668073549867,1478284.107709898613393 6892296.859831305220723,1478311.735888709081337 6892290.911897944286466,1478306.995897207176313 6892268.867791567929089,1478278.453310589306056 6892275.014994577504694,1478250.899777316488326 6892283.385009210556746,1478219.585975191090256 6892296.139333989471197,1478179.24006327916868 6892316.972463291138411,14 [...]
+"LINESTRING (1478466.102856026496738 6890932.568242912180722,1478535.261944622267038 6890968.449133092537522,1478563.813861930277199 6890983.239892659708858)",443,service,0,0,0,minorroads,0,0
+"LINESTRING (1478535.261944622267038 6890968.449133092537522,1478551.870576259680092 6890937.856104321777821)",444,service,0,0,0,minorroads,0,0
+"LINESTRING (1478201.335141776595265 6891732.714873464778066,1478206.95221831719391 6891742.801134817302227,1478218.783535687020048 6891781.920006790198386,1478228.459463221486658 6891817.743372742086649,1478231.855835082009435 6891832.934244934469461,1478232.47166075091809 6891843.219907283782959,1478248.548442946979776 6891921.397502834908664,1478245.795888828579336 6891933.921317706815898,1478285.656604760792106 6892105.271138682030141,1478298.74756553885527 6892115.112597333267331)", [...]
+"LINESTRING (1478294.147534419083968 6892193.936677500605583,1478283.305270394310355 6892188.264751724898815,1478292.328049491159618 6892184.800280102528632,1478299.932563415030017 6892178.361885491758585,1478303.198305588914081 6892173.471774934791028,1478305.997513171983883 6892166.573504913598299,1478306.128142858389765 6892160.089136488735676,1478302.031969098607078 6892141.893076196312904,1478301.080238522263244 6892130.840560940094292,1478301.957323563983664 6892124.540174165740609 [...]
+"LINESTRING (1478201.335141776595265 6891732.714873464778066,1478215.956336030969396 6891726.108225850388408,1478246.253092732280493 6891712.113187463954091)",447,cycleway,0,0,0,minorroads,0,0
+"LINESTRING (1478001.098492924124002 6891901.362505401484668,1478060.320394612615928 6891876.636904109269381,1478078.972447784850374 6891865.860673903487623,1478082.060906813945621 6891858.579445453360677,1478079.243037850596011 6891849.841980019584298,1478076.089263980044052 6891843.971021738834679)",448,service,0,0,1,minorroads,0,0
+"LINESTRING (1477667.806177130201831 6890740.184415513649583,1477692.989714653696865 6890752.445835038088262,1477718.966360991122201 6890765.105770315043628,1477746.939775401959196 6890778.731316149234772,1477774.325356219662353 6890792.081001562997699,1477799.844798653386533 6890804.495769085362554,1477826.689199339831248 6890817.569612891413271,1477853.21635650168173 6890830.490208609960973,1477870.412821729434654 6890838.874046353623271,1477884.222245789365843 6890845.602580599486828, [...]
+"LINESTRING (1478824.485402423189953 6889940.611638756468892,1478826.332879424327984 6889961.990374932065606,1478873.471535062883049 6890004.119678050279617,1478895.202716574305668 6890003.031577592715621)",451,service,0,0,0,minorroads,0,0
+"LINESTRING (1478826.332879424327984 6889961.990374932065606,1478844.583712844643742 6889961.729845183901489,1478857.460067708510906 6889965.62246694136411,1478866.314894350245595 6889971.446077805943787,1478871.148192772408947 6889978.863525116816163,1478873.051653927890584 6889986.694763084873557,1478873.471535062883049 6890004.119678050279617)",452,service,0,0,0,minorroads,0,0
+"LINESTRING (1477976.540111759677529 6891214.653682666830719,1477971.902757871197537 6891228.034747345373034)",453,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477938.965415351791307 6891251.148941309191287,1477930.74507576203905 6891262.215574943460524)",454,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477687.951141010504216 6891192.24466432724148,1477663.122169780312106 6891154.109624875709414)",455,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477691.104914883850142 6891132.620425897650421,1477676.838286919984967 6891143.564276114106178,1477663.122169780312106 6891154.109624875709414)",456,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477462.521623944398016 6891132.436495768837631,1477442.441974906018004 6891104.218598398379982,1477409.887190758716315 6891028.072153965942562,1477358.950943501666188 6890905.500577809289098,1477348.043364635203034 6890881.83560439478606,1477342.883491998305544 6890867.014377377927303)",457,service,0,0,1,minorroads,0,0
+"LINESTRING (1477831.671788828447461 6891088.967793419025838,1477945.356939326506108 6891019.718773512169719)",458,service,0,0,0,minorroads,0,0
+"LINESTRING (1477869.451760460156947 6891113.706299720332026,1478003.72041735611856 6891029.390302868559957)",459,service,0,0,0,minorroads,0,0
+"LINESTRING (1477845.527866347460076 6891886.3401223346591,1477791.073948236415163 6891868.1293527437374)",460,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477453.480183461913839 6891871.563030050136149,1477488.80618311651051 6891880.361834840849042,1477497.931599820964038 6891882.584530951455235)",461,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477532.912363875191659 6891765.932137601077557,1477528.760205966420472 6891769.565044686198235,1477518.44979138020426 6891779.850625957362354,1477476.415024229325354 6891823.798257810994983,1477453.480183461913839 6891871.563030050136149,1477446.790077348472551 6891924.126067938283086,1477455.001086245523766 6891954.247648754157126,1477479.27954665129073 6891990.056453500874341,1477520.185300080571324 6892012.866254753433168,1477559.542158647440374 6892023.489389923401177,1 [...]
+"LINESTRING (1477698.606791194295511 6891999.713821127079427,1477684.106895933393389 6891965.959072479978204)",463,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477641.698901103343815 6892021.588568172417581,1477630.651361857540905 6891980.675021766684949)",464,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477758.453849244629964 6891976.490170946344733,1477733.382280024467036 6891937.293706933036447)",465,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477589.372380752116442 6891940.098922687582672,1477608.183055686764419 6891941.662485988810658,1477621.553937226068228 6891941.61649882979691,1477645.869720400776714 6891935.300931309349835,1477672.452861708588898 6891925.796931291930377,1477690.274483300978318 6891915.112609200179577,1477708.749253325397149 6891903.569878341630101,1477733.260981028201059 6891876.943482707254589,1477740.81884149601683 6891855.620969253592193,1477739.204631788888946 6891837.83947719540447,14 [...]
+"LINESTRING (1477630.651361857540905 6891980.675021766684949,1477621.553937226068228 6891941.61649882979691)",467,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477733.382280024467036 6891937.293706933036447,1477725.65646710456349 6891926.732001763768494)",468,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477692.793770122574642 6891811.21329927444458,1477692.383219677722082 6891764.399265908636153)",469,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477623.009525167988613 6891825.009235370904207,1477605.701091633876786 6891783.682813100516796)",470,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477568.835527812829241 6891862.702919281087816,1477532.959017333807424 6891828.534867286682129)",471,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477712.416215251665562 6892167.769204625859857,1477622.598974722903222 6892203.119073937647045,1477613.996076758485287 6892205.019938614219427,1477434.361595695605502 6891964.472149926237762,1477394.239620390348136 6891910.743844576179981,1477429.593612115131691 6891873.494474177248776,1477436.890213207341731 6891866.151923180557787,1477441.835479930043221 6891855.605640362016857,1477443.235083720181137 6891845.319962166249752,1477442.451305598951876 6891835.080283679999411 [...]
+"LINESTRING (1477815.604337325086817 6892123.712386487983167,1477827.603607150260359 6892118.301109884865582,1477942.464424828533083 6892069.323857038281858,1477932.499245842685923 6892029.866343609988689,1477907.651613229420036 6891922.531850008293986,1477868.882588252890855 6891831.89188345707953,1477820.43763574725017 6891737.451429275795817,1477790.495445336448029 6891720.130057509988546,1477761.831559722078964 6891708.204391392879188,1477715.271406986285001 6891689.074310968630016,1 [...]
+"LINESTRING (1477679.992060790536925 6892101.331492725759745,1477711.445823292247951 6892094.893164958804846,1477740.706873192451894 6892082.721673713997006,1477770.406465607928112 6892066.840511322021484)",474,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477679.992060790536925 6892101.331492725759745,1477656.320095360744745 6892053.243440655060112,1477653.212974948808551 6892047.832211491651833,1477641.698901103343815 6892021.588568172417581)",475,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477656.320095360744745 6892053.243440655060112,1477710.120865036733449 6892026.509244767017663,1477767.52328180288896 6891994.900465020909905)",476,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477710.120865036733449 6892026.509244767017663,1477698.606791194295511 6891999.713821127079427)",477,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477648.389007219579071 6891687.173568284139037,1477621.376654078019783 6891628.511351731605828)",478,service,0,0,0,minorroads,0,0
+"LINESTRING (1477932.499245842685923 6892029.866343609988689,1477886.685548456618562 6892048.276759926229715,1477859.551896321587265 6892044.52109289355576,1477838.193942492129281 6892048.522028035484254,1477825.345579701242968 6892061.076699531637132,1477818.552835974609479 6892075.225638516247272,1477816.938626270508394 6892089.72717712726444,1477827.603607150260359 6892118.301109884865582)",479,service,0,0,0,minorroads,0,0
+"LINESTRING (1477793.089377692667767 6892048.154125873930752,1477798.221258256351575 6892062.103761437349021,1477809.315450964029878 6892056.815160491503775,1477818.552835974609479 6892075.225638516247272)",480,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477653.212974948808551 6892047.832211491651833,1477598.712403376353905 6892069.354515632614493,1477624.567750717513263 6892151.274696073494852,1477622.598974722903222 6892203.119073937647045)",481,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477420.038983579957858 6891781.7513905512169,1477396.65626959851943 6891799.042237523943186,1477337.518344137584791 6891842.192873341962695,1477394.239620390348136 6891910.743844576179981)",482,service,0,0,0,minorroads,0,0
+"LINESTRING (1476971.260693745920435 6891517.24285698775202,1477003.171660154126585 6891536.188589158467948,1476982.261579535668716 6891598.958142179064453,1476967.575070433784276 6891697.474372724071145,1476966.875268540112302 6891701.980978826992214,1476966.007514191325754 6891708.173734177835286,1476958.244378502713516 6891776.202385487966239,1476938.295359153533354 6891904.612249108031392,1476921.612081981264055 6892006.780568920075893,1476991.209713097894564 6892086.753286531195045, [...]
+"LINESTRING (1477366.966007873183116 6891868.589220155961812,1477374.589183179894462 6891866.535145924426615,1477381.72716250969097 6891866.059949724003673,1477387.073648984543979 6891867.378236030228436,1477393.241236352361739 6891869.064416506327689,1477400.024649386061355 6891868.911127359606326,1477405.669718005461618 6891867.424222765490413,1477410.885574793908745 6891865.109557402320206,1477415.000409936532378 6891861.675882850773633,1477418.340797648299485 6891857.813000736758113, [...]
+"LINESTRING (1477698.644113963004202 6891577.758992903865874,1477820.43763574725017 6891737.451429275795817)",485,service,0,0,1,minorroads,0,0
+"LINESTRING (1477687.456614337861538 6891609.488759884610772,1477698.756082263542339 6891624.587267857044935,1477700.855487952940166 6891631.31645973585546,1477700.70619688089937 6891638.674124730750918,1477699.073325790930539 6891646.231066821143031,1477695.555654934141785 6891652.009909689426422,1477690.4051129873842 6891656.97634560521692,1477684.937327513471246 6891659.873434635810554,1477677.034231450874358 6891661.329643805511296,1477668.60861663450487 6891660.256647552363575,14776 [...]
+"LINESTRING (1477181.042640446452424 6891986.515421602874994,1477192.79931227886118 6892009.585808921605349,1477209.538573602680117 6892019.396492030471563,1477223.357328352984041 6892015.226950248703361,1477241.897413221886382 6892003.868025694973767,1477254.251249337336048 6892002.672350356355309,1477481.09903157921508 6892286.972161007113755,1477529.711936542764306 6892276.82389810308814,1477549.437019285047427 6892291.479097588919103,1477584.352468494558707 6892335.368207341991365,14 [...]
+"LINESTRING (1477583.904595280997455 6891294.219997277483344,1477610.217146528884768 6891274.416479538194835,1477654.062067914754152 6891332.033815642818809,1477629.401049136882648 6891352.74182316660881)",491,service,0,0,0,minorroads,0,0
+"LINESTRING (1477868.005503211170435 6891418.483586152084172,1477848.45770361693576 6891433.290501792915165,1477828.732620871858671 6891448.066788487136364,1477807.514627421740443 6891462.582523957826197)",492,service,0,0,0,minorroads,0,0
+"LINESTRING (1477807.514627421740443 6891462.582523957826197,1477751.623782749054953 6891507.58606893569231,1477629.401049136882648 6891352.74182316660881)",493,service,0,0,0,minorroads,0,0
+"LINESTRING (1477629.401049136882648 6891352.74182316660881,1477583.904595280997455 6891294.219997277483344)",494,service,0,0,0,minorroads,0,0
+"LINESTRING (1477583.904595280997455 6891294.219997277483344,1477558.161216243170202 6891260.008378100581467)",495,service,0,0,0,minorroads,0,0
+"LINESTRING (1477601.101060511544347 6890443.310502992011607,1477582.691605331841856 6890428.290844186209142,1477188.208611846435815 6890073.681786119006574)",496,service,0,0,0,minorroads,0,0
+"LINESTRING (1477130.610250554978848 6890845.357349183410406,1477112.210126065183431 6890858.29331654496491)",500,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477083.490256302058697 6890932.47628013510257,1477087.66107559367083 6890947.466226569376886,1477089.116663535358384 6890956.187384136021137)",502,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477087.66107559367083 6890947.466226569376886,1477145.95923878159374 6890906.512165016494691,1477156.708195885876194 6890900.657222660258412,1477187.527471335837618 6890885.774652787484229,1477210.406327954260632 6890875.919371928088367,1477223.142722439020872 6890877.1455337414518)",503,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477406.453496126458049 6891175.721502039581537,1477391.981592941563576 6891187.615723043680191,1477374.197294117882848 6891201.563865466974676,1477022.420877606840804 6891477.159598301164806,1476986.90826411684975 6891504.980270971544087,1476971.260693745920435 6891517.24285698775202,1476941.243857803056017 6891507.294832653366029)",505,service,0,0,0,minorroads,0,0
+"LINESTRING (1477358.950943501666188 6890905.500577809289098,1477336.324015568709001 6890915.141315577551723,1477320.424516517668962 6890921.931222087703645,1477285.014540638308972 6890925.701691834256053,1477178.570007083471864 6890971.238683593459427,1477158.975554024800658 6890984.971869397908449,1477098.400702007813379 6891032.118565235286951)",506,service,0,0,0,minorroads,0,0
+"LINESTRING (1477095.414880589582026 6891011.595310922712088,1477098.400702007813379 6891032.118565235286951,1477105.977223855676129 6891139.563791322521865)",507,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477677.911316492594779 6891115.560924383811653,1477665.996022895211354 6891125.600428977049887,1477664.307167656254023 6891126.872611372731626,1477657.943635757779703 6891131.777412844821811)",508,service,0,0,0,minorroads,0,0
+"LINESTRING (1477768.558988607022911 6891022.355068786069751,1477796.73767824168317 6891035.567212809808552,1477831.550489834975451 6891054.557791966944933,1477842.486060780240223 6891060.520138014107943)",509,service,0,0,0,minorroads,0,0
+"LINESTRING (1477556.62165207369253 6890751.633515411056578,1477574.769847880583256 6890734.436881551519036,1477588.150060110026971 6890725.838578412309289,1477599.608149800915271 6890720.106381432153285,1477612.997692723292857 6890719.156124571338296,1477625.40751299331896 6890720.106381432153285,1477644.516770066693425 6890726.804162795655429,1477667.806177130201831 6890740.184415513649583)",510,service,0,0,0,minorroads,0,0
+"LINESTRING (1477782.620341347064823 6891064.459273951128125,1477796.73767824168317 6891035.567212809808552,1477810.771038905717432 6891005.403092133812606)",511,service,0,0,0,minorroads,0,0
+"LINESTRING (1477872.456243261462077 6890928.291974918916821,1477851.564824028639123 6890914.007110533304513)",512,service,0,0,0,minorroads,0,0
+"LINESTRING (1477853.21635650168173 6890830.490208609960973,1477820.027085299603641 6890898.649376915767789)",513,service,0,0,0,minorroads,0,0
+"LINESTRING (1477799.844798653386533 6890804.495769085362554,1477766.64619676116854 6890872.63939,1477751.77307382132858 6890903.186189386062324)",514,service,0,0,0,minorroads,0,0
+"LINESTRING (1477724.163556393934414 6890895.04751749522984,1477741.136085020378232 6890860.209190255962312,1477774.325356219662353 6890792.081001562997699)",515,service,0,0,0,minorroads,0,0
+"LINESTRING (1477695.984866762068123 6890883.337653747759759,1477713.750504202675074 6890846.874718683771789,1477746.939775401959196 6890778.731316149234772)",516,service,0,0,0,minorroads,0,0
+"LINESTRING (1477668.114089961862192 6890869.497352491132915,1477685.777089789044112 6890833.233730419538915,1477718.966360991122201 6890765.105770315043628)",517,service,0,0,0,minorroads,0,0
+"LINESTRING (1477754.656257629161701 6891051.660921058617532,1477768.558988607022911 6891022.355068786069751,1477783.898646140703931 6890993.049323340877891)",518,service,0,0,0,minorroads,0,0
+"LINESTRING (1477642.893229672452435 6890855.289227482862771,1477659.791112761478871 6890820.589014776051044,1477692.989714653696865 6890752.445835038088262)",519,service,0,0,0,minorroads,0,0
+"LINESTRING (1477623.998578510247171 6890830.107035243883729,1477634.607575237983838 6890808.327491325326264,1477667.806177130201831 6890740.184415513649583)",520,service,0,0,0,minorroads,0,0
+"LINESTRING (1477781.379359321901575 6890910.619823455810547,1477793.499928140547127 6890885.713344623334706,1477826.689199339831248 6890817.569612891413271)",521,service,0,0,0,minorroads,0,0
+"LINESTRING (1477870.412821729434654 6890838.874046353623271,1477837.214219840010628 6890907.017958667129278)",522,service,0,0,0,minorroads,0,0
+"LINESTRING (1477091.775910733500496 6890789.490762358531356,1476942.736768513685092 6890783.32936832588166)",524,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477536.616648569935933 6891975.447790859267116,1477569.955210844287649 6891984.997836984694004,1477600.793147677090019 6891986.469434185884893,1477630.651361857540905 6891980.675021766684949,1477684.106895933393389 6891965.959072479978204,1477713.899795272154734 6891950.844594269990921,1477733.382280024467036 6891937.293706933036447,1477770.46244975971058 6891905.470672187395394,1477791.073948236415163 6891868.1293527437374,1477793.630557826953009 6891835.402189544402063,14 [...]
+"LINESTRING (1477161.457518077688292 6890758.668512595817447,1477029.446888633305207 6890709.37768148444593)",538,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477131.048793075839058 6890631.24252425506711,1477164.126095974352211 6890700.488198084756732,1477179.391107973642647 6890738.498471793718636)",539,service,0,0,0,minorroads,0,0
+"LINESTRING (1477519.588135797530413 6890535.436799609102309,1477529.833235539030284 6890516.294183277525008,1477567.697183395503089 6890475.526233145967126,1477601.101060511544347 6890443.310502992011607,1477654.556594587164 6890383.078775299713016,1477699.67982076969929 6890328.610064546577632,1477708.963859239360318 6890318.096450427547097,1477743.879308448871598 6890287.352637302130461,1477755.803932736394927 6890280.6858737943694,1477780.185030752792954 6890271.551650473847985,14777 [...]
+"LINESTRING (1477457.678994829300791 6890649.726370869204402,1477478.663720985176042 6890623.471964616328478,1477502.205056728795171 6890571.39254963491112)",542,service,0,0,0,minorroads,0,0
+"LINESTRING (1477394.202297621639445 6890700.610811580903828,1477457.678994829300791 6890649.726370869204402)",543,service,0,0,0,minorroads,0,0
+"LINESTRING (1477202.689845727290958 6890575.867871635593474,1477215.379586750175804 6890595.455097910948098,1477325.491082236869261 6890699.476636806502938,1477343.788569116033614 6890718.313154872506857,1477379.665079592028633 6890708.013604944571853,1477394.202297621639445 6890700.610811580903828)",544,service,0,0,0,minorroads,0,0
+"LINESTRING (1477179.129848600830883 6890751.863417183049023,1477161.457518077688292 6890758.668512595817447,1477091.775910733500496 6890789.490762358531356,1477003.218313615769148 6890845.05080992449075,1476929.076635525561869 6890897.699098956771195,1476846.1361149456352 6890928.598517356440425,1476697.29291725391522 6891011.472692683339119,1476669.580762218683958 6891010.522401385009289,1476642.055221018847078 6890998.321897276677191)",545,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477179.391107973642647 6890738.498471793718636,1477173.72737796837464 6890740.307029619812965,1477160.067244980484247 6890746.192508741281927,1477144.335698384558782 6890708.933207083493471,1477164.126095974352211 6890700.488198084756732)",546,service,0,0,0,minorroads,0,0
+"LINESTRING (1477825.784122222103179 6891305.424640764482319,1477810.183205312816426 6891318.392004153691232,1477807.579942266456783 6891320.553233419544995,1477805.405891042202711 6891322.361922188661993)",547,service,0,0,0,minorroads,0,0
+"LINESTRING (1477434.361595695605502 6891964.472149926237762,1477445.68905570008792 6891957.957286356948316,1477455.001086245523766 6891954.247648754157126,1477500.497540106996894 6891936.419951410032809)",548,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477654.071398604661226 6891729.08198303822428,1477655.685608308762312 6891734.416354355402291)",549,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477751.353192683542147 6891775.144702635705471,1477778.748104193946347 6891722.337380684912205)",550,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477530.710320580750704 6892072.497022124007344,1477532.408506509615108 6892059.927003527060151,1477512.972675218945369 6892026.631878494285047,1477520.185300080571324 6892012.866254753433168,1477536.616648569935933 6891975.447790859267116)",551,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477188.460540529107675 6890785.490453751757741,1477179.129848600830883 6890751.863417183049023,1477173.72737796837464 6890740.307029619812965)",555,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477233.434475639369339 6890900.503951973281801,1477229.739521637326106 6890892.028087645769119,1477223.142722439020872 6890877.1455337414518,1477221.817764186300337 6890863.182627168484032)",557,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477682.39004861866124 6889990.909228938631713,1477660.640205727424473 6889979.016778235323727,1477638.041269867448136 6889962.005700208246708,1477601.502280263695866 6889935.768864835612476,1477037.424630233086646 6889460.654818921349943,1476851.809175638016313 6889334.68986457772553,1476836.674793327925727 6889326.736669098958373,1476816.165932461619377 6889319.151258772239089,1476789.40550800296478 6889310.018127746880054,1476760.433709556935355 6889300.195426267571747,14 [...]
+"LINESTRING (1477637.518751118797809 6890024.67101151868701,1477572.987685721367598 6889974.54178845603019,1477564.646047132555395 6889952.427406344562769,1477559.635465567931533 6889940.856842578388751,1477558.403814232908189 6889935.079229551367462)",560,service,0,0,0,minorroads,0,0
+"LINESTRING (1477699.67982076969929 6890328.610064546577632,1477733.204996876418591 6890359.445991663262248,1477739.904433685587719 6890365.024671027436852)",561,service,0,0,0,minorroads,0,0
+"LINESTRING (1477962.600058013107628 6891779.436749854125082,1477953.866530364844948 6891751.538483916781843,1477943.453478170791641 6891735.30541658680886)",562,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477349.881510943174362 6890675.812269823625684,1477337.537005520658568 6890685.851225290447474)",563,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477178.570007083471864 6890971.238683593459427,1477201.355556778842583 6891033.344750871881843,1477171.068130770465359 6891047.170006854459643,1477173.083560226485133 6891051.921486127190292,1477200.823707337491214 6891117.231619697995484,1477217.040449918713421 6891155.381811781786382,1477226.044567629694939 6891176.595174888148904,1477236.019077305682003 6891188.397431484423578,1477262.11702263681218 6891201.349278477951884,1477343.11675929534249 6891166.862158128991723)" [...]
+"LINESTRING (1477555.511299735167995 6891809.818378160707653,1477539.014636401087046 6891785.00108590349555)",565,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477397.141465578228235 6890736.030863894149661,1477364.94124772422947 6890746.376430032774806)",566,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477192.883288506418467 6890795.897391020320356,1477199.097529330058023 6890810.090084169991314,1477209.725187440868467 6890834.291289354674518)",567,steps,0,0,0,minorroads,0,0
+"LINESTRING (1476986.90826411684975 6891504.980270971544087,1476978.417334458557889 6891488.410481329075992,1476982.625476519111544 6891477.634771515615284,1477001.21221484686248 6891429.979636301286519,1477055.871408184524626 6891387.674252809025347,1476926.19345171796158 6891217.903148794546723,1476932.389031158527359 6891202.544834636151791,1477041.110253545222804 6891117.369567033834755,1477044.021429431624711 6891042.633113135583699,1477037.135378784500062 6891030.999671006575227,14 [...]
+"LINESTRING (1477851.564824028639123 6890914.007110533304513,1477837.214219840010628 6890907.017958667129278,1477820.027085299603641 6890898.649376915767789,1477793.499928140547127 6890885.713344623334706,1477766.64619676116854 6890872.63939,1477741.136085020378232 6890860.209190255962312,1477713.750504202675074 6890846.874718683771789,1477685.777089789044112 6890833.233730419538915,1477659.791112761478871 6890820.589014776051044,1477634.607575237983838 6890808.327491325326264)",569,serv [...]
+"LINESTRING (1477657.943635757779703 6891131.777412844821811,1477634.971472224220634 6891151.028787543997169)",572,service,0,0,1,minorroads,0,0
+"LINESTRING (1477547.608203666983172 6890950.087170991115272,1477521.230337577406317 6890965.031168691813946,1477512.394172318745404 6890970.012507430277765,1477494.852471484802663 6890979.95986695215106,1477486.482840825803578 6890984.695979272015393,1477470.17279132688418 6890993.938303586095572,1477464.826304849237204 6890996.973098964430392,1477447.863106921315193 6891006.567964611575007,1477439.782727705081925 6891011.135492536239326,1477421.92378334957175 6891021.251503217034042,14 [...]
+"LINESTRING (1477634.971472224220634 6891151.028787543997169,1477612.559150202432647 6891120.695631274022162)",574,service,0,0,1,minorroads,0,0
+"LINESTRING (1477805.405891042202711 6891322.361922188661993,1477795.459373445017263 6891330.2404525866732,1477820.325667443918064 6891360.42112004570663,1477845.29459905042313 6891389.191724671050906,1477868.005503211170435 6891418.483586152084172,1477915.246796463150531 6891483.398165013641119,1477941.960567463189363 6891518.177879937924445,1478007.443363436963409 6891603.372722592204809,1478079.075085395481437 6891736.240464904345572)",575,service,0,0,0,minorroads,0,0
+"LINESTRING (1477604.488101679133251 6892361.919472146779299,1477636.333753245649859 6892365.016103434376419,1477641.120398203376681 6892375.777672911994159,1477651.720064238179475 6892399.615673690102994,1477661.713235300034285 6892422.135367657989264,1477671.743729121983051 6892444.701114750467241,1477677.360805668402463 6892457.31772515270859,1477696.218134059105068 6892478.028631558641791,1477711.763066816842183 6892498.678270866163075)",576,service,0,0,0,minorroads,0,0
+"LINESTRING (1477022.420877606840804 6891477.159598301164806,1477104.59628144861199 6891583.522458178922534,1477116.763503728900105 6891599.280038581229746,1477202.167326975846663 6891709.829224040731788,1477215.323602598393336 6891726.859329365193844,1477316.235035840189084 6891857.49109398201108,1477337.518344137584791 6891842.192873341962695)",577,service,0,0,0,minorroads,0,0
+"LINESTRING (1476941.243857803056017 6891507.294832653366029,1476903.80912177474238 6891496.304502658545971,1476881.984633348649368 6891489.881987628526986,1476860.79463197151199 6891483.674072253517807,1476837.299949686974287 6891476.761065948754549,1476802.673751928843558 6891462.735805360600352,1476793.585657987510785 6891460.084037529304624)",578,service,0,0,0,minorroads,0,0
+"LINESTRING (1477751.623782749054953 6891507.58606893569231,1477741.089431561529636 6891515.342154928483069)",579,service,0,0,0,minorroads,0,0
+"LINESTRING (1477612.559150202432647 6891120.695631274022162,1477582.075779662933201 6891143.656241306103766,1477566.754783512093127 6891124.2362818159163,1477529.049457415007055 6891078.468512326478958)",580,service,0,0,0,minorroads,0,0
+"LINESTRING (1477634.971472224220634 6891151.028787543997169,1477614.761193496640772 6891168.440898629836738,1477601.101060511544347 6891175.721502039581537,1477585.4534901403822 6891184.105699811130762,1477566.950728042982519 6891186.788031838834286,1477558.702396374428645 6891184.381596778519452,1477547.496235363651067 6891176.426571349613369,1477507.896778806811199 6891126.826628868468106)",581,service,0,0,0,minorroads,0,0
+"LINESTRING (1477793.089377692667767 6892048.154125873930752,1477767.52328180288896 6891994.900465020909905,1477758.453849244629964 6891976.490170946344733)",582,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477215.323602598393336 6891726.859329365193844,1477568.294347681337968 6891455.945442079566419,1477586.535850405925885 6891442.410717039369047)",585,service,0,0,0,minorroads,0,0
+"LINESTRING (1476860.79463197151199 6891483.674072253517807,1476960.819649475859478 6891630.565365144982934,1476941.281180571764708 6891746.219429916702211,1476922.526489791693166 6891772.308886986225843,1476902.138927918858826 6891980.215147942304611,1476921.612081981264055 6892006.780568920075893)",586,service,0,0,0,minorroads,0,0
+"LINESTRING (1477202.167326975846663 6891709.829224040731788,1477555.511299735167995 6891439.437065890990198,1477573.715479691047221 6891425.779744077473879)",587,service,0,0,0,minorroads,0,0
+"LINESTRING (1477696.218134059105068 6892478.028631558641791,1477691.039600039366633 6892481.830491381697357,1477655.918875608593225 6892510.237186400219798,1477625.398182300385088 6892475.315208514221013,1477531.120871023042127 6892361.674194470979273,1477492.827711335849017 6892391.613455899991095,1477584.249830884160474 6892505.760787431150675,1477625.398182300385088 6892475.315208514221013)",588,service,0,0,0,minorroads,0,0
+"LINESTRING (1477584.249830884160474 6892505.760787431150675,1477550.510048857657239 6892529.55318315140903,1477537.027199015021324 6892540.912850533612072)",589,service,0,0,0,minorroads,0,0
+"LINESTRING (1478066.245383990462869 6892248.387368608266115,1478062.709051750600338 6892246.839075284078717,1478053.341037050588056 6892250.855440765619278,1478053.117100443691015 6892255.760928054340184)",590,path,0,0,0,minorroads,0,0
+"LINESTRING (1478057.465202880557626 6892224.90239691734314,1478055.188514051726088 6892228.182930614799261,1478045.251327144447714 6892231.816046603955328,1478042.116214653942734 6892230.589678158052266)",591,path,0,0,0,minorroads,0,0
+"LINESTRING (1477784.906360871624202 6892316.451251152902842,1477641.120398203376681 6892375.777672911994159)",592,service,0,0,0,minorroads,0,0
+"LINESTRING (1477794.470320102758706 6892339.154669879004359,1477651.720064238179475 6892399.615673690102994)",593,service,0,0,0,minorroads,0,0
+"LINESTRING (1477818.590158740524203 6892272.577574365772307,1477820.493619899032637 6892278.142251771874726,1477867.380346852121875 6892398.006031540222466)",594,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477804.024948637932539 6892361.87348258215934,1477661.713235300034285 6892422.135367657989264)",595,service,0,0,0,minorroads,0,0
+"LINESTRING (1478053.117100443691015 6892255.760928054340184,1477964.606156779220328 6892292.444870038889349,1477895.484390949364752 6892321.126831811852753)",596,service,0,0,0,minorroads,0,0
+"LINESTRING (1478032.020405984483659 6892209.480840558186173,1477946.392646130407229 6892246.195230620913208,1477870.356837577652186 6892278.801428685896099)",597,service,0,0,0,minorroads,0,0
+"LINESTRING (1478042.116214653942734 6892230.589678158052266,1477955.219480698928237 6892268.637846413999796,1477881.059141225880012 6892301.121497599408031)",598,service,0,0,0,minorroads,0,0
+"LINESTRING (1477974.254092237679288 6892334.525068153627217,1477970.353863011812791 6892307.008119508624077,1477964.606156779220328 6892292.444870038889349,1477955.219480698928237 6892268.637846413999796,1477946.392646130407229 6892246.195230620913208,1477939.861161776585504 6892229.639242734760046)",599,service,0,0,0,minorroads,0,0
+"LINESTRING (1477813.588907869067043 6892385.481493636965752,1477671.743729121983051 6892444.701114750467241)",600,service,0,0,0,minorroads,0,0
+"LINESTRING (1477315.871138856979087 6890705.699273365549743,1477293.813383128261194 6890711.002312272787094)",601,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477327.739778992719948 6890696.79446735791862,1477325.491082236869261 6890699.476636806502938,1477315.871138856979087 6890705.699273365549743)",602,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477191.548999560764059 6890584.63460551109165,1477193.573759709950536 6890604.436424199491739,1477192.715336051303893 6890631.717647477984428,1477189.860144322039559 6890651.550235321745276,1477182.722164992243052 6890668.118300231173635,1477164.126095974352211 6890700.488198084756732)",603,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477337.537005520658568 6890685.851225290447474,1477327.739778992719948 6890696.79446735791862)",604,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477317.485348558053374 6890876.701050061732531,1477328.215644282288849 6890898.603395721875131,1477336.324015568709001 6890915.141315577551723,1477340.560149707831442 6890923.770475399680436,1477391.543050420703366 6891037.789675366133451,1477433.661793799139559 6891131.76208533346653,1477423.286064371000975 6891138.966017907485366,1477419.021938158897683 6891141.924230385571718,1477415.15903169894591 6891144.591220805421472,1477411.258802472846583 6891147.304194730706513,1 [...]
+"LINESTRING (1477001.21221484686248 6891429.979636301286519,1477012.810264917090535 6891381.604368223808706,1476990.127352835144848 6891349.568942168727517,1476972.175101556349546 6891324.201267114840448,1476953.905606755753979 6891298.404492945410311,1476935.21623081760481 6891272.010018249042332,1476926.622663548681885 6891259.870428316295147,1476909.556828004540876 6891253.110891866497695,1476842.273208488477394 6891436.264150676317513,1476866.915565874893218 6891446.33471198566258,14 [...]
+"LINESTRING (1477430.340067470446229 6891165.329400658607483,1477423.817913812352344 6891156.408757981844246)",608,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477438.401785300811753 6891159.091080768965185,1477431.627702959813178 6891150.078479750081897)",609,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477391.543050420703366 6891037.789675366133451,1477409.887190758716315 6891028.072153965942562)",610,footway,0,0,0,minorroads,0,0
+"LINESTRING (1476990.127352835144848 6891349.568942168727517,1476941.495786485727876 6891471.074317997321486)",611,service,0,0,0,minorroads,0,0
+"LINESTRING (1477422.772876315517351 6891171.353139204904437,1477416.036116740433499 6891162.723713628947735)",612,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477391.981592941563576 6891187.615723043680191,1477474.922113521490246 6891297.515479031950235,1477487.751814926741645 6891314.146186651661992,1477573.715479691047221 6891425.779744077473879,1477586.535850405925885 6891442.410717039369047,1477691.888693005079404 6891579.199858834967017)",614,service,0,0,0,minorroads,0,0
+"LINESTRING (1477374.197294117882848 6891201.563865466974676,1477456.410020725568756 6891311.233894356526434,1477469.668933961540461 6891328.61569665838033,1477555.511299735167995 6891439.437065890990198,1477568.294347681337968 6891455.945442079566419,1477673.292623987188563 6891591.493214836344123)",615,service,0,0,0,minorroads,0,0
+"LINESTRING (1477173.083560226485133 6891051.921486127190292,1477137.272364595206454 6891079.863306542858481,1477118.508343119407073 6891093.428076104260981)",616,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477088.584814094239846 6891117.76808157004416,1477048.864058541134 6891148.239174656569958,1477017.643563339253888 6891172.196156406775117,1476959.317408075323328 6891216.922177751548588)",617,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477024.818865434965119 6891578.770664696581662,1477055.012984525877982 6891556.5139145758003)",618,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477044.683908559381962 6891600.613609550520778,1477072.899920959956944 6891578.770664696581662)",619,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477081.764078291598707 6892021.849164674989879,1477121.027629941003397 6892015.901434796862304,1477150.913836200255901 6892003.71473397128284,1477181.042640446452424 6891986.515421602874994,1477246.96397894108668 6891938.244107788428664)",620,service,0,0,0,minorroads,0,0
+"LINESTRING (1477137.272364595206454 6891079.863306542858481,1477179.68035942222923 6891133.754661783576012,1477203.753544606966898 6891164.777608038857579,1477227.313541733426973 6891196.827625382691622,1477267.108942821156234 6891248.650520586408675,1477275.89845462096855 6891259.655839771032333)",621,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477038.329707350814715 6891342.288181316107512,1477049.825119810411707 6891333.827179099433124,1477076.091017599450424 6891312.613401100039482)",622,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477050.459606862161309 6891150.522978541441262,1477048.864058541134 6891148.239174656569958,1477039.906594285974279 6891136.728199865669012)",623,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477019.500371033092961 6891174.066122156567872,1477017.643563339253888 6891172.196156406775117,1477008.994011918548495 6891161.221612081862986)",624,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477236.019077305682003 6891188.397431484423578,1477227.313541733426973 6891196.827625382691622)",625,footway,0,0,0,minorroads,0,0
+"LINESTRING (1476959.317408075323328 6891216.922177751548588,1477000.549735719105229 6891270.170685262419283,1477025.378706949297339 6891302.251778436824679,1477049.825119810411707 6891333.827179099433124,1477089.85378819797188 6891385.528333493508399,1477098.167434711009264 6891396.257935808971524)",626,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477203.753544606966898 6891164.777608038857579,1477217.040449918713421 6891155.381811781786382)",627,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477227.313541733426973 6891196.827625382691622,1477200.506463813129812 6891216.600296653807163)",628,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477176.405286555178463 6891136.161081690341234,1477179.68035942222923 6891133.754661783576012,1477200.823707337491214 6891117.231619697995484)",629,footway,0,0,0,minorroads,0,0
+"LINESTRING (1476989.203614334575832 6891279.551287890411913,1477000.549735719105229 6891270.170685262419283,1477004.487287716707215 6891266.890542482957244)",630,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477014.592427076306194 6891310.758730973117054,1477025.378706949297339 6891302.251778436824679)",631,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477657.813006068347022 6891744.87050611898303,1477663.094177704304457 6891744.042757529765368,1477667.983460275456309 6891744.012100178748369,1477687.633897485909984 6891746.357388046570122,1477693.166997798951343 6891746.265415959060192,1477698.485492197796702 6891744.747876695357263,1477702.80560256447643 6891741.75878503266722,1477705.595479451818392 6891737.66603057552129,1477709.299764146795496 6891729.863744132220745,1477713.694520050892606 6891719.654869962483644,147 [...]
+"LINESTRING (1477488.80618311651051 6891880.361834840849042,1477485.269850873854011 6891887.59709616843611,1477482.47064329078421 6891890.678215784020722,1477476.881558825960383 6891894.065915833227336,1477471.292474361369386 6891894.939666754566133,1477465.274178063031286 6891895.246246046386659,1477471.124521903228015 6891926.686014686711133,1477472.029599023750052 6891931.560646092519164)",633,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477471.124521903228015 6891926.686014686711133,1477496.830578175140545 6891922.010663450695574)",634,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477105.706633787136525 6892515.296133446507156,1477093.642049120273441 6892467.834137276746333,1477084.078089892165735 6892430.22959574777633,1477075.652475078590214 6892397.070906250737607,1477065.827256471849978 6892358.362946599721909)",635,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477084.078089892165735 6892430.22959574777633,1477114.505476279882714 6892422.533946882933378,1477144.70892606372945 6892414.914955166168511)",636,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477136.208665715297684 6892506.573284320533276,1477124.26538004190661 6892460.322412922978401,1477114.505476279882714 6892422.533946882933378)",637,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477166.915972861694172 6892497.804454318247736,1477154.860718884970993 6892452.826025616377592,1477144.70892606372945 6892414.914955166168511,1477135.490202432963997 6892380.483947849832475,1477125.282425462966785 6892342.404590574093163)",638,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477093.642049120273441 6892467.834137276746333,1477124.26538004190661 6892460.322412922978401,1477154.860718884970993 6892452.826025616377592,1477172.812970160972327 6892448.211688437499106,1477176.834498385898769 6892435.687072315253317,1477157.23071463429369 6892374.474633106961846,1477135.490202432963997 6892380.483947849832475,1477075.652475078590214 6892397.070906250737607,1477052.30708386329934 6892403.555465837940574,1477067.898670082679018 6892466.684383096173406,14 [...]
+"LINESTRING (1477104.59628144861199 6891583.522458178922534,1477136.936459684744477 6891559.073744270019233,1477456.410020725568756 6891311.233894356526434,1477474.922113521490246 6891297.515479031950235)",640,service,0,0,0,minorroads,0,0
+"LINESTRING (1477116.763503728900105 6891599.280038581229746,1477149.467578951269388 6891573.988217326812446,1477469.668933961540461 6891328.61569665838033,1477487.751814926741645 6891314.146186651661992)",641,service,0,0,0,minorroads,0,0
+"LINESTRING (1477358.950943501666188 6890905.500577809289098,1477389.145062592579052 6890890.97052111569792,1477415.597574219573289 6890878.233752502128482,1477438.168518 6890867.382225495763123,1477521.230337577406317 6890965.031168691813946)",642,service,0,0,0,minorroads,0,0
+"LINESTRING (1477293.813383128261194 6890711.002312272787094,1477245.060517788399011 6890724.566459476016462,1477179.129848600830883 6890751.863417183049023)",643,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477623.578697375254706 6892624.202238139696419,1477621.787204523105174 6892605.299932564608753,1477625.295544689754024 6892598.999173911288381,1477697.6923833838664 6892539.977708619087934,1477702.124462053878233 6892533.431718253530562,1477700.025056370068341 6892524.555547795258462,1477695.331718327244744 6892512.33741554338485)",644,service,0,0,0,minorroads,0,0
+"LINESTRING (1476916.274926193524152 6891463.640165685676038,1476972.175101556349546 6891324.201267114840448)",645,service,0,0,0,minorroads,0,0
+"LINESTRING (1477411.258802472846583 6891147.304194730706513,1477420.178943959064782 6891159.366976878605783)",646,footway,0,0,0,minorroads,0,0
+"LINESTRING (1476866.915565874893218 6891446.33471198566258,1476935.21623081760481 6891272.010018249042332)",647,service,0,0,0,minorroads,0,0
+"LINESTRING (1477412.387816194444895 6891165.681934850290418,1477402.814526273403317 6891153.297264670953155)",648,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477427.587513351812959 6891153.35857486911118,1477419.021938158897683 6891141.924230385571718)",649,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477423.817913812352344 6891156.408757981844246,1477415.15903169894591 6891144.591220805421472)",650,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477431.627702959813178 6891150.078479750081897,1477423.286064371000975 6891138.966017907485366)",651,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477420.178943959064782 6891159.366976878605783,1477426.701097617158666 6891168.180329788476229)",652,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477434.221635316265747 6891162.217903890646994,1477427.587513351812959 6891153.35857486911118)",653,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477416.036116740433499 6891162.723713628947735,1477406.565464430022985 6891150.59961626958102)",654,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477790.178201811853796 6892050.76009990926832,1477793.089377692667767 6892048.154125873930752)",655,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477418.975284700049087 6891174.204070466570556,1477412.387816194444895 6891165.681934850290418)",656,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477426.897042148280889 6891184.442907216027379,1477421.92378334957175 6891178.005313728936017,1477418.975284700049087 6891174.204070466570556)",657,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477446.136928913649172 6891169.391208594664931,1477441.434260177891701 6891163.137557985261083,1477438.401785300811753 6891159.091080768965185)",658,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477430.68530307081528 6891181.484679089859128,1477425.721374965040013 6891175.108398336917162,1477422.772876315517351 6891171.353139204904437)",659,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477437.991234855726361 6891175.767484820447862,1477433.279235429828987 6891169.360553430393338,1477430.340067470446229 6891165.329400658607483)",660,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477426.701097617158666 6891168.180329788476229,1477429.630934883840382 6891172.134846064262092,1477434.426910537295043 6891178.633745247498155)",661,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477442.022093768231571 6891172.610001250170171,1477437.282102269353345 6891166.29503783211112,1477434.221635316265747 6891162.217903890646994)",662,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477655.685608308762312 6891734.416354355402291,1477657.066550716059282 6891741.436882919631898)",663,steps,0,0,0,minorroads,0,0
+"LINESTRING (1476887.153836678247899 6891470.844395658001304,1476887.788323727203533 6891469.020345328375697,1476891.623238111380488 6891456.405285906977952,1476953.905606755753979 6891298.404492945410311)",664,service,0,0,0,minorroads,0,0
+"LINESTRING (1477657.066550716059282 6891741.436882919631898,1477657.813006068347022 6891744.87050611898303,1477662.301068890141323 6891765.901480161584914)",665,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477421.92378334957175 6891178.005313728936017,1477425.721374965040013 6891175.108398336917162,1477429.630934883840382 6891172.134846064262092,1477433.279235429828987 6891169.360553430393338,1477437.282102269353345 6891166.29503783211112,1477441.434260177891701 6891163.137557985261083)",666,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477539.014636401087046 6891785.00108590349555,1477533.500197465298697 6891776.708233860321343)",667,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477533.500197465298697 6891776.708233860321343,1477528.760205966420472 6891769.565044686198235)",668,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477725.65646710456349 6891926.732001763768494,1477719.451556970831007 6891918.224397381767631)",669,steps,0,0,0,minorroads,0,0
+"LINESTRING (1477936.222191923297942 6891522.408476941287518,1477941.960567463189363 6891518.177879937924445,1477949.331814086996019 6891512.996934459544718)",670,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477719.451556970831007 6891918.224397381767631,1477708.749253325397149 6891903.569878341630101)",671,footway,0,0,0,minorroads,0,0
+"LINESTRING (1478201.335141776595265 6891732.714873464778066,1478199.170421248069033 6891718.367265134118497,1478194.67302773357369 6891689.365553838200867,1478190.492877749027684 6891669.729676574468613,1478176.459517084760591 6891671.952314448542893,1478125.448624295881018 6891656.102620540186763,1478117.200292630353943 6891651.01355717331171,1478098.249657313572243 6891632.772663729265332,1478077.890087522100657 6891607.710663352161646,1478071.806476379279047 6891600.000473447144032,1 [...]
+"LINESTRING (1477589.045806534821168 6891029.896104246377945,1477596.715635302942246 6891048.580122988671064,1477609.377384255873039 6891053.929370147176087,1477622.487006419571117 6891070.574901269748807,1477627.208336535375565 6891077.31895683798939,1477664.307167656254023 6891126.872611372731626,1477676.838286919984967 6891143.564276114106178,1477704.662410258548334 6891180.672316116280854,1477726.981425359845161 6891210.59185186214745,1477777.273854869185016 6891277.482036370784044,1 [...]
+"LINESTRING (1477469.444997354643419 6891153.312592218630016,1477547.748164046322927 6891253.907934416085482,1477616.375403200741857 6891265.342438179068267)",674,footway,0,0,0,minorroads,0,0
+"LINESTRING (1477486.482840825803578 6890984.695979272015393,1477514.00838202284649 6891053.086365345865488)",675,service,0,0,0,minorroads,0,0
+"LINESTRING (1477415.597574219573289 6890878.233752502128482,1477494.852471484802663 6890979.95986695215106)",676,service,0,0,0,minorroads,0,0
+"LINESTRING (1477512.394172318745404 6890970.012507430277765,1477536.094129821518436 6891031.597436398267746)",677,service,0,0,0,minorroads,0,0
+"LINESTRING (1477389.145062592579052 6890890.97052111569792,1477470.17279132688418 6890993.938303586095572)",678,service,0,0,0,minorroads,0,0
+"LINESTRING (1477521.230337577406317 6890965.031168691813946,1477558.301176619715989 6891013.066729949787259,1477560.223299158038571 6891021.864595185033977,1477555.007442369591445 6891030.080032028257847,1477480.333914841059595 6891086.638024752959609,1477468.241338095627725 6891086.377458564005792,1477453.414868617197499 6891080.61434968188405,1477444.084176685893908 6891074.008237943053246,1477421.92378334957175 6891021.251503217034042)",679,service,0,0,1,minorroads,0,0
+"LINESTRING (1477383.406687055714428 6890923.126736690290272,1477447.863106921315193 6891006.567964611575007)",680,service,0,0,0,minorroads,0,0
+"LINESTRING (1477439.782727705081925 6891011.135492536239326,1477466.832403615349904 6891077.579522733576596)",681,service,0,0,0,minorroads,0,0
+"LINESTRING (1477464.826304849237204 6890996.973098964430392,1477491.913303528213874 6891070.406299953348935)",682,service,0,0,0,minorroads,0,0
+"LINESTRING (1476973.733327108668163 6890098.677702718414366,1477072.200119063491002 6890203.842244775034487,1477138.13078825105913 6890280.302726635709405,1477353.800401557935402 6890557.690723114646971)",4,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1477470.023500254843384 6890738.375857715494931,1477739.381914934143424 6891078.698423445224762,1477864.478501664241776 6891247.500940763391554,1477920.91052646539174 6891323.312250348739326,1477948.986578486626968 6891354.964373402297497,1477973.404999271966517 6891376.300886962562799,1477996.311847963603213 6891392.272653280757368,1478013.694927032105625 6891401.822006645612419,1478036.583114340901375 6891411.340715271420777,1478065.797510776668787 6891417.502590633928776, [...]
+"LINESTRING (1479792.936579379020259 6889681.205510908737779,1479674.082225559744984 6889811.252340968698263,1479538.255343108437955 6889942.328065656125546,1479396.046267381170765 6890098.233262076042593,1479391.875448089325801 6890102.84625062905252,1479387.424708036473021 6890104.271526698023081,1479382.180859172018245 6890104.700642123818398,1479371.861113895662129 6890102.84625062905252)",7,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478196.94038587808609 6891352.28198526147753,1478211.0204 6891326.638399799354374,1478222.487820381997153 6891308.47488157171756,1478233.955240765586495 6891291.292384384199977,1478245.422661152202636 6891275.99524116050452,1478258.80287338164635 6891260.713454801589251,1478269.309232496190816 6891247.347663466818631,1478277.566894857445732 6891232.878299727104604,1478286.524359109578654 6891203.050646905787289,1478290.247305190423504 6891173.43769099842757,1478299.41937535 [...]
+"LINESTRING (1478588.708148004952818 6890605.53993255738169,1478609.123701951000839 6890560.234908378683031,1478633.962003871100023 6890512.462600218132138,1478661.664828216191381 6890461.824570003896952,1478680.783415985293686 6890415.018393527716398)",10,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478511.935214792611077 6890776.462944713421166,1478487.162227714201435 6890850.829076912254095,1478480.472121600992978 6890872.792660155333579,1478469.0513546760194 6890901.760771677829325,1478458.311728261876851 6890927.096459547057748,1478444.334351749392226 6890965.598274794407189)",11,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478747.693807828007266 6890450.713059439323843,1478695.917798298178241 6890536.494319370947778,1478652.86598572623916 6890592.926227985881269,1478605.848629083950073 6890639.948012223467231,1478534.739425873849541 6890732.521037810482085)",12,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478394.816369665553793 6891123.469907105900347,1478413.981610896298662 6891149.388740294612944,1478422.575178162194788 6891163.720005629584193,1478432.139137393329293 6891182.83350836019963,1478437.868182237260044 6891200.015773738734424,1478443.606557776918635 6891221.045322466641665,1478449.326271930942312 6891243.975563655607402,1478452.200125048635527 6891268.821841340512037,1478455.055316777899861 6891293.652867992408574,1478456.016378046944737 6891316.583316278643906, [...]
+"LINESTRING (1478505.114478987408802 6892450.388551495037973,1478533.022578559117392 6892428.221367940306664,1478547.111923375166953 6892412.922061143442988,1478557.151747890049592 6892398.465929266996682,1478563.580594633240253 6892385.098246153444052,1478568.479207897325978 6892368.143395646475255,1478570.681251191534102 6892353.135470101609826,1478571.632981767877936 6892338.326860104687512,1478570.699912574607879 6892311.990289855748415,1478550.256366555579007 6892207.533986137248576 [...]
+"LINESTRING (1478037.180278623942286 6891587.247253092937171,1478066.105423611123115 6891589.776435805484653,1478080.782602020073682 6891593.133352279663086,1478089.777389043709263 6891593.945756936445832,1478098.884144365321845 6891592.826784512028098,1478108.280151141108945 6891589.991033161990345,1478117.424229234224185 6891583.093263810500503,1478125.476616371888667 6891573.681650285609066,1478129.395506983622909 6891564.699241130612791,1478130.711134545970708 6891555.425603993237019 [...]
+"LINESTRING (1478508.650811232859269 6892023.658011235296726,1478483.16869156784378 6891955.519962281920016,1478463.396955363918096 6891854.103409341536462,1478457.220037306193262 6891812.31697329133749,1478454.476813877699897 6891793.539206840097904,1478438.726605898933485 6891697.918901789933443,1478429.171977360732853 6891676.535548973828554,1478420.335812099277973 6891665.75958699919283,1478408.149928435916081 6891657.88072778377682,1478399.071165190311149 6891653.864658541046083,147 [...]
+"LINESTRING (1477868.43471504189074 6891004.698037818074226,1477841.366377748781815 6890998.337224533781409,1477822.247789982473478 6890988.803677652962506,1477801.393693512771279 6890979.193505993112922,1477780.595581200672314 6890971.77513572294265,1477763.119195208651945 6890968.602405070327222,1477746.32394973305054 6890970.012507430277765,1477735.211095642531291 6890976.940405210480094,1477727.559928260045126 6890986.489265248179436,1477721.952182406792417 6890998.613115126267076,14 [...]
+"LINESTRING (1478394.816369665553793 6891123.469907105900347,1478404.940170413581654 6891151.136080365628004,1478410.678545950446278 6891170.249553177505732,1478414.494798951782286 6891184.58085570205003,1478417.368652066681534 6891201.778452461585402,1478418.320382643025368 6891218.041097856126726,1478418.320382643025368 6891238.089720109477639,1478416.407590797403827 6891256.253079305402935,1478411.630276529816911 6891276.317124638706446,1478407.814023525686935 6891294.449914567172527, [...]
+"LINESTRING (1478458.908892544917762 6890873.620319033972919,1478432.279097772669047 6890943.113314905203879,1478416.715503631858155 6890979.362105399370193)",28,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478178.904158371733502 6891520.431132415309548,1478160.308089353842661 6891514.3304911153391,1478117.685488610062748 6891501.086903820745647,1478038.747834869194776 6891476.270564619451761)",31,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1477490.821612572530285 6890732.214502855204046,1477527.397924944991246 6890777.857686535455287,1477549.996860799379647 6890805.108844520524144,1477565.439155949512497 6890821.738533561117947,1477585.817387126618996 6890841.295704958960414,1477601.213028812082484 6890855.31988144479692,1477614.901153875980526 6890865.680928098037839,1477632.489508171333 6890878.494311951100826,1477649.452706102281809 6890888.77875323779881,1477668.282042416976765 6890898.771993438713253,1477 [...]
+"LINESTRING (1477811.713438789127395 6891164.670315036550164,1477832.45556695247069 6891186.404841492883861,1477851.910059632034972 6891203.111957489512861,1477871.719118598848581 6891219.497226990759373,1477905.897443146212026 6891245.355058864690363,1477930.74507576203905 6891262.215574943460524,1477950.162245669867843 6891274.998935245908797)",36,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1477917.271556612337008 6890861.695908572524786,1477919.660213744733483 6890873.497702899388969,1477929.681376882363111 6890876.225912362337112,1477939.068052962422371 6890882.433358696289361,1477964.755447848467156 6890903.79927234724164,1477993.242050317581743 6890920.735707654617727,1478017.072637509787455 6890931.70992370788008,1478043.179913533618674 6890940.982841396704316,1478070.173605292104185 6890947.926041314378381,1478124.907444161828607 6890961.429279524832964,1 [...]
+"LINESTRING (1478269.187933499692008 6891469.572158829309046,1478243.696483144769445 6891462.383258138783276,1478210.012685272842646 6891459.041724401526153,1478135.451126047875732 6891458.290645903907716,1478102.224532076856121 6891458.014739540405571,1478074.335093893809244 6891455.730848299339414,1478037.478860765462741 6891447.7142419135198,1478001.229122610529885 6891433.137220955453813,1477972.136025168234482 6891416.506267188116908,1477933.730897177709267 6891384.440046058036387,1 [...]
+"LINESTRING (1478396.486563521204516 6891050.220149672590196,1478391.046770125860348 6891088.599935160949826,1478387.930319021223113 6891118.01332129817456,1478386.372093471698463 6891145.495545344427228,1478382.163951405556872 6891187.385808815248311,1478378.506320169428363 6891208.921137149445713,1478372.991881239460781 6891239.009382877498865,1478369.520863838493824 6891260.422227461822331,1478362.756112190661952 6891278.784898377023637,1478355.926045695319772 6891294.327292013913393, [...]
+"LINESTRING (1478279.554332237923518 6891684.153840911574662,1478256.003665801370516 6891694.469970066100359,1478242.875382254831493 6891699.988261526450515)",41,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1477739.381914934143424 6891078.698423445224762,1477811.713438789127395 6891164.670315036550164)",42,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478697.42003969871439 6892579.422395704314113,1478646.241194454720244 6892500.149962106719613,1478632.450431780423969 6892479.929561247117817,1478614.591487424913794 6892458.988699334673584,1478590.975506143877283 6892442.984153510071337,1478571.063809560844675 6892437.419361997395754,1478552.589039536425844 6892437.266062008216977,1478536.241667274385691 6892440.991252523846924,1478522.674841206986457 6892446.663356624543667,1478512.373757313471287 6892454.711619316600263) [...]
+"LINESTRING (1478524.373027135850862 6892700.593760442920029,1478524.317042984068394 6892666.928051271475852,1478522.40425114124082 6892647.811019618995488,1478513.801353176590055 6892615.325967458076775,1478499.973267736379057 6892576.157048926688731,1478487.572778159286827 6892544.546107861213386,1478482.29160652612336 6892521.520175693556666,1478482.29160652612336 6892500.594535555690527,1478486.285142672481015 6892481.140637652948499,1478493.348476464860141 6892465.0440674116835,1478 [...]
+"LINESTRING (1478512.373757313471287 6892454.711619316600263,1478501.456847751280293 6892464.492185577750206,1478494.216230813646689 6892477.461418758146465,1478490.399977812543511 6892496.578045293688774,1478490.399977812543511 6892516.629856382496655,1478495.335913845105097 6892541.725350976921618,1478506.187508562812582 6892572.999015279114246,1478520.015594006050378 6892612.183248752728105,1478528.618491964880377 6892644.66828821413219,1478531.91222621477209 6892665.68628600705415,14 [...]
+"LINESTRING (1477773.756184012396261 6891153.373902422375977,1477609.890572311356664 6890941.044149981811643,1477495.477627843851224 6890800.066300450824201)",47,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1477763.688367415918037 6891163.168213126249611,1477606.559515292756259 6890944.523412792012095,1477495.477627843851224 6890800.066300450824201)",48,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478038.747834869194776 6891476.270564619451761,1478016.783386061200872 6891466.046684342436492,1477987.559658932499588 6891449.476974944584072,1477960.565967173781246 6891425.565151103772223,1477940.439664676785469 6891408.397731687873602,1477893.683567407075316 6891346.396062412299216,1477835.012176543008536 6891269.78749094158411,1477773.252326647052541 6891185.147977290675044,1477763.688367415918037 6891163.168213126249611)",50,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1477353.800401557935402 6890557.690723114646971,1477430.918570373440161 6890653.711285330355167)",51,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478431.31803650339134 6891617.70479725766927,1478395.805423010606319 6891558.521924624219537)",59,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1478247.979270739946514 6891351.914114957675338,1478261.359482969157398 6891334.716197027824819,1478269.953050238080323 6891318.483971345238388,1478276.643156351288781 6891303.20210421551019,1478282.381531891180202 6891285.988962695933878,1478286.19778489228338 6891267.825536315329373,1478290.023368583526462 6891245.860873832367361,1478291.926829739008099 6891217.565939981490374,1478294.632730398792773 6891179.905936032533646,1478299.419375359313563 6891131.670120283961296,1 [...]
+"LINESTRING (1478222.38518277136609 6890997.340953027829528,1478265.38101119431667 6891016.607333100400865,1478304.32731931633316 6891039.64428252261132)",63,motorway_link,0,0,1,motorways,3,0
+"LINESTRING (1479505.653905502287671 6891073.088594046421349,1479511.261651349952444 6891082.208400661125779,1479521.71202631550841 6891092.493102550506592,1479746.936268157558516 6891225.214452367275953,1479755.165938443038613 6891230.977664898149669,1479832.228123104199767 6891286.387485591694713,1479913.489119135309011 6891344.817286965437233,1479959.526753128273413 6891366.429676809348166,1480017.134445112897083 6891393.45290981978178,1480128.822827531956136 6891445.108463356271386)" [...]
+"LINESTRING (1479467.789957643020898 6890509.550598309375346,1479441.747996460879222 6890586.856943410821259,1479449.529793532565236 6890590.320726469159126,1479457.666156894760206 6890598.397783920168877,1479463.22724928939715 6890607.670317178592086,1479467.556690343189985 6890622.843576487153769,1479469.021608978044242 6890645.833417885005474,1479472.46463430300355 6890697.59145475551486,1479478.305647450499237 6890719.830500395968556,1479480.489029361866415 6890744.552544073201716,14 [...]
+"LINESTRING (1478892.478154525859281 6890538.8086022362113,1478857.935932998079807 6890331.031569452024996,1479014.271676310105249 6890305.038744745776057,1479049.942911565070972 6890299.475432928651571,1479065.637135392287746 6890291.306720341555774,1479071.926021756138653 6890284.80853839032352,1479078.233569500269368 6890275.796917401254177)",167,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479046.145319949602708 6890513.27489566989243,1479014.271676310105249 6890305.038744745776057)",168,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479203.460785916773602 6890490.040212746709585,1479046.145319949602708 6890513.27489566989243,1478892.478154525859281 6890538.8086022362113,1478782.002762058749795 6890554.196301298215985,1478765.692712562624365 6890556.571894911117852,1478744.437396341003478 6890562.901705839671195,1478733.203243254218251 6890567.423002410680056,1478725.150856119580567 6890575.346772366203368,1478720.952044752193615 6890584.603952579200268,1478718.61004107282497 6890595.868913067504764,147 [...]
+"LINESTRING (1479490.071649975609034 6890894.005277621559799,1479245.458230298943818 6890915.64710977114737,1479232.777819963172078 6890911.35552369710058)",170,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479186.796170124784112 6890329.437667407095432,1479194.335369206732139 6890321.713377351872623,1479221.870241096476093 6890288.900553298182786,1479238.29225889313966 6890269.344725587405264,1479371.861113895662129 6890102.84625062905252,1479378.177992332726717 6890095.842478349804878,1479401.150155866052955 6890069.130116234533489,1479433.070452967192978 6890027.628814021125436,1479445.853500913595781 6890008.594684292562306)",171,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479356.241535600507632 6892244.984189610928297,1479596.926733975531533 6891723.011840671300888)",173,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479565.510294239735231 6892254.902467562817037,1479723.329617572249845 6891860.342268580570817)",174,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479608.944665183546022 6891709.660609316080809,1479997.390700987540185 6891805.618287485092878)",175,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479584.125024646287784 6890393.883670332841575,1479781.721087680663913 6890154.202325228601694)",176,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479482.392490514554083 6891545.140309852547944,1479497.461557985516265 6891543.408212435431778,1480046.890021679922938 6891672.780055603943765)",177,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479238.29225889313966 6890269.344725587405264,1479244.002642357023433 6890273.712598342448473,1479250.888693001354113 6890278.75481229275465,1479261.31107589113526 6890279.383173528127372,1479275.157822717214003 6890275.015297694131732,1479297.010303219081834 6890236.869282925501466,1479430.597819601651281 6890091.566655383445323,1479511.784170098369941 6889997.928235160186887,1479526.340049513848498 6889979.62979072984308,1479584.209000873845071 6889912.566501155495644,147 [...]
+"LINESTRING (1478735.713199388701469 6892210.431273595429957,1478737.803274379577488 6892156.517370771616697,1478747.012667317176238 6892105.30179741140455,1478856.713612355990335 6891712.665017653256655,1478875.897514964221045 6891664.70191867928952,1478898.291175603168085 6891642.306974301114678,1478920.675505543360487 6891632.711349874734879,1479150.145212217466906 6891598.774201380088925)",179,residential,0,0,1,minorroads,3,0
+"LINESTRING (1479232.777819963172078 6890911.35552369710058,1479225.509210946969688 6890904.029178469441831,1479219.015049364650622 6890835.992580109275877,1479415.566074902191758 6890596.129463358782232,1479426.510976537596434 6890588.466222968883812,1479433.854231088422239 6890586.182578745298088,1479441.747996460879222 6890586.856943410821259)",185,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479723.329617572249845 6891860.342268580570817,1479596.926733975531533 6891723.011840671300888)",188,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479094.002438864903525 6890258.861840659752488,1479102.166794305900112 6890249.972855378873646,1479110.592409119475633 6890237.283079625107348,1479113.904804755235091 6890222.585646998137236,1479107.16804518038407 6890125.037674428895116,1479369.173874618951231 6890088.94599081762135,1479378.177992332726717 6890095.842478349804878)",197,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479150.145212217466906 6891598.774201380088925,1479134.525633922312409 6891683.923912476748228,1479122.50770271429792 6891741.850757068023086,1479112.365240588784218 6891776.922836208716035,1479083.458756984677166 6891830.404985710047185,1479039.623166288714856 6891874.843419559299946,1478994.845175709342584 6891943.793224707245827,1478968.961836289614439 6891994.609211077913642,1478956.608000173931941 6892018.875299187377095,1478935.147408731281757 6892081.709938492625952, [...]
+"LINESTRING (1478948.648919956991449 6892418.042266790755093,1478932.982688202988356 6892462.407298980280757,1478924.323806092375889 6892507.707714077085257,1478923.16680029197596 6892543.764267535880208,1478928.690569914877415 6892595.135937471874058,1478954.200681655900553 6892647.565733219496906,1478981.091735800961033 6892698.110219702124596,1478998.14824065216817 6892739.042748300358653,1479008.262710707494989 6892770.393833446316421,1479017.257497728569433 6892806.252266069874167,1 [...]
+"LINESTRING (1478917.605707900365815 6892380.08537070825696,1478948.648919956991449 6892418.042266790755093,1478994.257342116441578 6892488.667711554095149,1479021.055089343804866 6892527.437619337812066,1479045.053628993919119 6892554.863341205753386,1479059.282934189308435 6892565.96243020426482,1479069.22945178928785 6892573.719537409953773,1479138.341886926209554 6892625.474657708778977,1479163.90798281878233 6892643.380535209551454,1479204.5151541037485 6892671.818462022580206,14792 [...]
+"LINESTRING (1478922.690935002407059 6892238.254484030418098,1478923.446721050655469 6892317.493675459176302,1478917.605707900365815 6892380.08537070825696)",203,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479434.777969588991255 6891585.561131720431149,1479383.543140193447471 6891577.667022745124996)",204,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479354.879254579078406 6892263.487076595425606,1479349.467453256715089 6892329.95678826700896,1479349.355484956176952 6892342.527229115366936,1479352.994454809231684 6892359.236747993156314,1479354.991222882410511 6892368.404003384523094,1479365.450928538106382 6892387.980267693288624,1479382.470110620604828 6892403.647445440292358,1479415.538082826416939 6892422.043387837707996,1479449.315187618602067 6892436.146972191520035,1479465.634567807661369 6892439.780182166956365, [...]
+"LINESTRING (1479064.209539529168978 6890130.202399942092597,1479107.16804518038407 6890125.037674428895116)",216,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479511.784170098369941 6889997.928235160186887,1479577.425587837351486 6890050.785533404909074)",218,unclassified,0,0,0,minorroads,3,0
+"LINESTRING (1478743.644287527073175 6890644.500005290843546,1478764.862280979752541 6890650.661292929202318,1478794.823132770834491 6890656.071581743657589,1478844.219815858406946 6890657.343689843080938,1478888.745877755107358 6890655.642436888068914,1478931.480446802219376 6890650.891191814094782,1478963.578027048613876 6890644.591964773833752,1479008.439993852749467 6890630.675441741943359,1479056.194475160446018 6890605.585912075825036,1479095.672632720787078 6890583.837629308924079 [...]
+"LINESTRING (1479383.543140193447471 6891577.667022745124996,1479323.005610939580947 6891573.329098201356828,1479299.119039598386735 6891575.842948182485998,1479238.852100410265848 6891583.553114917129278,1479171.10194629477337 6891595.187356659211218,1479150.145212217466906 6891598.774201380088925)",236,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479596.926733975531533 6891723.011840671300888,1479465.550591580104083 6891589.531181692145765,1479434.777969588991255 6891585.561131720431149)",285,residential,0,0,0,minorroads,3,0
+"LINESTRING (1478721.138658590381965 6890619.165207961574197,1478727.371560799656436 6890630.690768297761679,1478735.050720260944217 6890638.997764837928116,1478743.644287527073175 6890644.500005290843546)",289,residential,0,0,0,minorroads,3,0
+"LINESTRING (1478553.951320560649037 6891315.418398878537118,1478529.78482845518738 6891312.260860466398299,1478502.221964489435777 6891308.628160036168993,1478489.158995784586295 6891306.911441416479647)",296,unclassified,0,0,0,minorroads,3,0
+"LINESTRING (1478598.850610133260489 6891319.848151468671858,1478619.014235399430618 6891314.222825936973095,1478629.520594513742253 6891309.455863785929978,1478638.123492472805083 6891299.891292298212647,1478656.850191182689741 6891252.574420961551368)",318,unclassified,0,0,0,minorroads,3,0
+"LINESTRING (1478362.989379487698898 6891563.457646118476987,1478372.702629790874198 6891539.468841813504696,1478383.955444257706404 6891522.730370282195508,1478405.789263379527256 6891501.899299177341163,1478420.401126943761483 6891493.03959580976516,1478439.109164268011227 6891484.793029486201704,1478451.080442011589184 6891482.585771531797945,1478466.158840178279206 6891481.390173728577793,1478478.036811004159972 6891474.906357950530946,1478487.899352376582101 6891463.640165685676038, [...]
+"LINESTRING (1478237.248975021298975 6891675.033351420424879,1478264.074714324669912 6891662.709210627712309)",322,unclassified,0,0,1,minorroads,3,0
+"LINESTRING (1478917.605707900365815 6892380.08537070825696,1478763.248071275651455 6892276.22604011092335,1478747.908413741970435 6892253.584117701277137,1478739.464137542527169 6892228.489522617310286)",323,residential,0,0,1,minorroads,3,0
+"LINESTRING (1478079.187053699046373 6892810.37622603494674,1478145.453627796843648 6892613.685621440410614,1478151.313302329974249 6892587.37880960572511,1478163.71379190729931 6892357.366506541147828,1478160.606671495363116 6892351.387868744321167,1478139.976511632790789 6892311.59171611443162)",330,residential,0,0,0,minorroads,3,0
+"LINESTRING (1478763.248071275651455 6892276.22604011092335,1478726.867703434312716 6892307.789936803281307)",335,residential,0,0,1,minorroads,3,0
+"LINESTRING (1478755.606234583305195 6889945.040633909404278,1478753.161593299126253 6889966.633935891091824,1478748.785498783690855 6889984.227385916747153,1478740.005317673785612 6890001.008630651049316,1478657.895228676730767 6890098.125983302481472)",338,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477786.39927157945931 6890262.126246342435479,1478094.340097397565842 6890523.819417727179825,1478155.810695839114487 6890564.786856304854155)",346,unclassified,0,0,0,minorroads,3,0
+"LINESTRING (1477842.131494486937299 6889810.838566199876368,1477906.373308435780928 6889868.935817634686828,1478137.494547579903156 6890058.632166887633502,1478153.804597075795755 6890076.363747696392238,1478161.362457540817559 6890099.060841219499707,1478176.627469539875165 6890170.079709811136127,1478184.745171522023156 6890192.792393619194627,1478195.494128623511642 6890209.911240221001208,1478209.71410313132219 6890228.547376076690853,1478261.070231520570815 6890273.49803611356765,1 [...]
+"LINESTRING (1478726.867703434312716 6892307.789936803281307,1478725.262824423145503 6892320.069077261723578,1478849.314373653382063 6892600.225598565302789)",449,residential,0,0,1,minorroads,3,0
+"LINESTRING (1477170.004431890556589 6892330.416682093404233,1477226.473779457621276 6892480.77271568775177)",497,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477206.375469039194286 6890495.557677546516061,1477167.625105448300019 6890527.559048051945865,1477202.689845727290958 6890575.867871635593474)",504,residential,0,0,1,minorroads,3,0
+"LINESTRING (1477056.785815992159769 6892691.840049274265766,1477047.42713198508136 6892531.960020915605128,1477034.205541517818347 6892466.163161252625287,1477014.965654755244032 6892407.817188702523708,1477005.485671751899645 6892378.107815207913518,1476984.137048612581566 6892331.842353134416044,1476956.555523263756186 6892281.284839883446693,1476909.892732914770022 6892184.90758672170341)",523,residential,0,0,0,minorroads,3,0
+"LINESTRING (1476392.496534616453573 6892429.171826844103634,1476550.259873797185719 6892335.797441869974136,1476622.861987715121359 6892298.960004699416459,1476700.521336662117392 6892264.85141708701849,1476909.892732914770022 6892184.90758672170341,1477091.430675133131444 6892112.736543129198253,1477219.41977636096999 6892066.212010371498764,1477229.84215924795717 6892055.54283092636615)",525,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477005.485671751899645 6892378.107815207913518,1477065.827256471849978 6892358.362946599721909,1477125.282425462966785 6892342.404590574093163,1477170.004431890556589 6892330.416682093404233)",526,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477226.473779457621276 6892480.77271568775177,1477166.915972861694172 6892497.804454318247736,1477136.208665715297684 6892506.573284320533276,1477105.706633787136525 6892515.296133446507156,1477047.42713198508136 6892531.960020915605128)",527,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477091.430675133131444 6892112.736543129198253,1477170.004431890556589 6892330.416682093404233)",528,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477226.473779457621276 6892480.77271568775177,1477255.268294758396223 6892486.061595555394888,1477275.814478393411264 6892495.91885052062571)",529,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477275.814478393411264 6892495.91885052062571,1477328.626194727374241 6892664.521173093467951)",530,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477459.5917866777163 6892447.751787870191038,1477537.027199015021324 6892540.912850533612072,1477573.267606480047107 6892584.466056008823216,1477587.123683996265754 6892602.264529967680573)",531,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477275.814478393411264 6892495.91885052062571,1477459.5917866777163 6892447.751787870191038)",532,residential,0,0,0,minorroads,3,0
+"LINESTRING (1476599.497935119783506 6892427.807458454743028,1476729.035931204212829 6892369.20115651935339,1476956.555523263756186 6892281.284839883446693)",533,residential,0,0,0,minorroads,3,0
+"LINESTRING (1476699.578936775680631 6892648.255601234734058,1476829.256893242476508 6892551.184088567271829,1477014.965654755244032 6892407.817188702523708)",534,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477131.048793075839058 6890631.24252425506711,1476933.564698341768235 6890379.676385825499892)",536,residential,0,0,0,minorroads,3,0
+"LINESTRING (1477050.235670255264267 6890288.333494927734137,1476933.564698341768235 6890379.676385825499892,1476902.820068429457024 6890398.910633538849652,1476831.654881067806855 6890456.920177238993347)",537,residential,0,0,1,minorroads,3,0
+"LINESTRING (1476942.736768513685092 6890783.32936832588166,1476752.110732350964099 6890533.904162514954805,1476753.948878661962226 6890517.596921934746206,1476575.592702392954379 6890272.946304704993963,1476409.226465250365436 6890059.260510915890336,1476395.724954024655744 6890059.306487303227186,1476182.322698862291873 6889785.015997536480427)",552,residential,0,0,1,minorroads,3,0
+"LINESTRING (1475786.729353038361296 6891662.356654640287161,1475992.471110128099099 6891500.68837027810514,1476100.436546466313303 6891415.663224364630878,1476197.223813875345513 6891340.402848524972796,1476278.139574306318536 6891277.49736415874213,1476321.676582857733592 6891244.343429019674659,1476489.871635615592822 6891115.576251862570643,1476493.678557923762128 6891113.246475487947464,1476512.825137766078115 6891098.624078639782965,1476574.920892572263256 6891049.53041878528893,14 [...]
+"LINESTRING (1476209.33505200385116 6889063.703335772268474,1476378.08994627604261 6889279.645944504998624,1476389.286776594119146 6889290.434032781980932,1476403.721357013098896 6889290.434032781980932,1476463.493769522989169 6889363.667758987285197,1476927.490417897468433 6889968.91740414686501,1477296.220701646525413 6890447.448577187024057,1477305.336787663633004 6890453.180579769425094)",554,unclassified,0,0,0,minorroads,3,0
+"LINESTRING (1477029.446888633305207 6890709.37768148444593,1476831.654881067806855 6890456.920177238993347,1476647.672297562239692 6890213.635398782789707)",559,residential,0,0,0,minorroads,3,0
+"LINESTRING (1479591.626900956500322 6890520.325010627508163,1479593.922251174226403 6890511.037251781672239,1479600.099169231951237 6890495.251151624135673,1479608.85135826584883 6890481.411518443375826,1479619.36704807030037 6890469.027902306057513,1479629.257581518730149 6890462.728817746974528,1479643.738815393997356 6890454.146131407469511,1479658.985166010214016 6890448.720652269199491,1479858.307407052256167 6890380.24345064163208,1480100.522838903823867 6890293.513651255518198)", [...]
+"LINESTRING (1477367.992383987177163 6890698.603015801869333,1477349.881510943174362 6890675.812269823625684,1477245.125832630088553 6890544.065551890060306)",76,tertiary,0,0,0,mainroads,4,0
+"LINESTRING (1477245.125832630088553 6890544.065551890060306,1477206.375469039194286 6890495.557677546516061,1477050.235670255264267 6890288.333494927734137,1476863.48187124566175 6890045.559557152912021,1476700.614643579581752 6889836.354716989211738,1476482.229798923013732 6889550.532479927875102,1476148.77886136691086 6889111.926746366545558,1476140.558521774364635 6889102.134934161789715,1476127.560867911204696 6889083.470761761069298,1476121.029383563203737 6889075.579109120182693)" [...]
+"LINESTRING (1477440.221270225942135 6890807.515166061930358,1477433.064629515865818 6890796.72504198551178,1477425.628068044548854 6890779.620272696949542,1477416.483989951433614 6890762.960017169825733)",140,tertiary,0,0,0,mainroads,4,0
+"LINESTRING (1477601.352989191422239 6891019.243627357296646,1477589.045806534821168 6891029.896104246377945,1477529.049457415007055 6891078.468512326478958,1477462.521623944398016 6891132.436495768837631)",65,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478347.248502201633528 6892208.147168586961925,1478342.172605789732188 6892190.916759766638279,1478325.657281069783494 6892141.203251630999148)",66,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479405.974123598309234 6890464.384051165543497,1479414.754304702393711 6890467.663866545073688,1479438.323632521787658 6890477.058859107084572,1479453.616636599646881 6890482.744903990067542)",68,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478942.192081137793139 6890130.999331175349653,1478922.700265695340931 6890097.880774687975645,1478913.39756584004499 6890080.455656515434384)",69,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478371.433655687142164 6890928.767115697264671,1478421.474156513577327 6890821.386014446616173,1478431.82189386873506 6890796.433831455186009,1478464.609945313073695 6890729.379055060446262,1478502.968419844750315 6890668.378852861002088,1478530.932503562653437 6890635.120143613778055,1478590.24771217443049 6890558.411064649000764,1478600.64210298541002 6890542.839440878480673,1478604.346387683181092 6890537.306617256253958,1478629.184689603513107 6890499.098052786663175,14 [...]
+"LINESTRING (1479356.241535600507632 6892244.984189610928297,1479354.879254579078406 6892263.487076595425606)",71,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478687.930726005230099 6892209.189578847959638,1478735.713199388701469 6892210.431273595429957,1478922.243061791639775 6892224.595805050805211)",72,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478357.316318792523816 6892236.261633796617389,1478331.460971454158425 6892240.814530819654465,1478302.573149230098352 6892246.517152946442366,1478272.724265742348507 6892252.940272497013211,1478243.276602006983012 6892261.908121032640338,1478210.040677348850295 6892275.42889619525522,1478139.976511632790789 6892311.59171611443162,1478016.484803919447586 6892382.200895741581917,1477743.403443159302697 6892544.331485021859407,1477660.07103352015838 6892595.227919272147119,14 [...]
+"LINESTRING (1478512.980252289446071 6892501.529672888107598,1478525.371411173837259 6892530.396342795342207,1478531.641636149259284 6892551.858618092723191,1478539.078197620576248 6892576.92356213927269,1478543.603583205491304 6892616.000502363778651,1478545.647004743106663 6892654.541068081744015,1478545.684327509021387 6892718.913729729130864,1478543.836850505322218 6892759.263800947926939,1478540.533785562496632 6892805.838337119668722,1478537.08142954739742 6892857.456974725238979)" [...]
+"LINESTRING (1478185.743555557215586 6892242.623426643200219,1478266.323411077726632 6892206.675530795939267,1478294.147534419083968 6892193.936677500605583)",75,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1477462.521623944398016 6891132.436495768837631,1477504.994933616137132 6891184.151682637631893,1477516.453023307025433 6891195.61674244236201,1477529.674613774055615 6891209.641537031158805,1477544.967617851914838 6891218.546911101788282,1477559.924717016518116 6891225.87354295141995,1477576.020160598680377 6891231.130941885523498,1477592.899382304633036 6891232.878299727104604,1477611.047578108729795 6891232.878299727104604,1477626.340582186589018 6891228.111385807394981,1 [...]
+"LINESTRING (1478086.567631015786901 6891649.909905299544334,1478125.196695613209158 6891674.772766153328121,1478142.915679592173547 6891681.685942734591663,1478159.589626074302942 6891686.315168510191143,1478175.087905370397493 6891688.721753821708262,1478194.67302773357369 6891689.365553838200867,1478206.467022337485105 6891687.633425346575677)",78,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478237.248975021298975 6891675.033351420424879,1478242.875382254831493 6891699.988261526450515)",79,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478347.248502201633528 6892208.147168586961925,1478371.750899214530364 6892203.548301403410733)",80,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478371.750899214530364 6892203.548301403410733,1478382.453202857170254 6892232.153297962620854)",81,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478357.316318792523816 6892236.261633796617389,1478347.248502201633528 6892208.147168586961925)",82,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478382.453202857170254 6892232.153297962620854,1478357.316318792523816 6892236.261633796617389)",83,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479591.626900956500322 6890520.325010627508163,1479585.384668057085946 6890546.502448085695505)",84,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478242.875382254831493 6891699.988261526450515,1478212.02811472909525 6891713.140204788185656)",85,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478913.39756584004499 6890080.455656515434384,1478902.919198798481375 6890060.471222716383636,1478901.482272242428735 6890051.766362176276743,1478896.611651054350659 6890025.77444030251354,1478895.202716574305668 6890003.031577592715621,1478891.041227969806641 6889935.293782743625343)",86,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478206.467022337485105 6891687.633425346575677,1478237.248975021298975 6891675.033351420424879)",87,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478891.041227969806641 6889935.293782743625343,1478923.241445826832205 6889993.42258417326957,1478944.664714500773698 6890030.004252052865922,1478948.424983350094408 6890035.276194448582828,1478965.164244676940143 6890062.325604433193803)",88,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1480004.127460559597239 6892298.699399212375283,1479952.398104491410777 6892295.096912450157106,1479897.916194301797077 6892292.076956707052886,1479756.929439219413325 6892285.025287828408182,1479744.82753178384155 6892283.798911259509623,1479593.00784336659126 6892275.26026960555464,1479563.980060763191432 6892273.619992980733514,1479551.467602882767096 6892272.914827428758144,1479354.879254579078406 6892263.487076595425606,1479238.124306440819055 6892256.75735551957041)",8 [...]
+"LINESTRING (1477166.010895744198933 6890934.453480053693056,1477233.434475639369339 6890900.503951973281801,1477338.096847037784755 6890853.449989835731685,1477440.221270225942135 6890807.515166061930358)",90,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478922.690935002407059 6892238.254484030418098,1478922.243061791639775 6892224.595805050805211)",91,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1477743.403443159302697 6892544.331485021859407,1477711.763066816842183 6892498.678270866163075)",93,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478394.097906388808042 6892344.934010887518525,1478418.469673712505028 6892336.287995646707714)",94,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478206.467022337485105 6891687.633425346575677,1478203.621161298360676 6891671.952314448542893,1478190.950081655522808 6891606.959570964798331,1478184.297298308229074 6891568.669280803762376,1478181.7500194106251 6891550.612513891421258,1478178.904158371733502 6891520.431132415309548,1478177.205972440075129 6891489.069593496620655)",95,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478739.464137542527169 6892228.489522617310286,1478735.713199388701469 6892210.431273595429957)",96,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478544.135432646842673 6892221.683182909153402,1478529.290301782777533 6892221.10065860580653,1478515.340917346067727 6892220.410827253945172,1478479.884288007859141 6892219.751655120402575,1478450.119380745105445 6892221.514557450078428,1478435.358226108597592 6892223.185482617467642,1478397.102389190113172 6892229.700561141595244,1478382.453202857170254 6892232.153297962620854)",99,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478371.750899214530364 6892203.548301403410733,1478390.356298925122246 6892200.773652814328671,1478423.946789876557887 6892198.397573292255402,1478426.568714311579242 6892198.351584662683308,1478451.742921142140403 6892197.86103930324316,1478527.237549557816237 6892200.804311908781528)",100,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478472.802292829845101 6892429.708376270718873,1478484.279043906368315 6892448.686919055879116)",101,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478431.579295878997073 6892449.652710394002497,1478394.097906388808042 6892344.934010887518525,1478379.915254652500153 6892302.271228101104498,1478363.931779373902828 6892254.166644357144833,1478357.316318792523816 6892236.261633796617389)",103,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478382.453202857170254 6892232.153297962620854,1478389.077994128456339 6892251.89785656798631,1478418.469673712505028 6892336.287995646707714,1478423.265649365726858 6892349.165043009445071,1478442.53352820710279 6892385.251545143313706,1478472.802292829845101 6892429.708376270718873)",104,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1480128.794835455948487 6890683.199713693931699,1480037.745943589601666 6890661.297954847104847,1479908.067987125832587 6890628.069927993230522,1479700.842650018632412 6890575.729933591559529,1479627.876639111666009 6890557.491479728370905,1479585.384668057085946 6890546.502448085695505)",105,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479285.906779821496457 6890425.80800533015281,1479266.862837587017566 6890414.650566106662154)",106,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479220.367999695939943 6892255.622961183078587,1479175.095482441131026 6892253.338843335397542,1478949.302068391814828 6892240.109368146397173,1478922.690935002407059 6892238.254484030418098,1478739.464137542527169 6892228.489522617310286)",108,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478973.058010046370327 6890074.815872622653842,1478987.24999247584492 6890117.681394563056529,1478991.019592018099502 6890132.409286628477275,1478995.115765775088221 6890146.44755226187408,1479000.21032356726937 6890161.589289834722877,1479007.926805797265843 6890178.493510303087533,1479018.778400514973328 6890192.562507837079465,1479037.449115067487583 6890212.026194254867733,1479094.002438864903525 6890258.861840659752488,1479124.859037083573639 6890282.417699187062681,14 [...]
+"LINESTRING (1479233.776204001158476 6892239.772116457112134,1479356.241535600507632 6892244.984189610928297,1479565.510294239735231 6892254.902467562817037,1479746.880284008570015 6892264.08493363391608,1479758.142429168568924 6892264.774768739938736,1479997.623968284577131 6892279.721210523508489)",113,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479173.966468716738746 6890346.066372577100992,1479186.796170124784112 6890329.437667407095432)",114,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1479078.233569500269368 6890275.796917401254177,1479094.002438864903525 6890258.861840659752488)",116,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1477871.81242551933974 6890936.997784550301731,1477872.456243261462077 6890928.291974918916821,1477877.485486214514822 6890906.496837940067053,1477884.352875475771725 6890890.617998971603811,1477892.591876451391727 6890882.540647934190929,1477899.328636026475579 6890876.057315123267472,1477917.271556612337008 6890861.695908572524786)",117,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478191.472600403940305 6891373.802427344955504,1478196.94038587808609 6891352.28198526147753,1478203.341240539913997 6891334.992099165916443,1478208.361152797238901 6891321.442249881103635,1478221.190854205284268 6891283.076680599711835,1478240.664008267689496 6891229.552189072594047,1478281.392478548688814 6891130.99570990819484,1478329.772116212407127 6891020.117283202707767)",118,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478420.186521029798314 6891416.536923290230334,1478405.378712934441864 6891441.123156609944999,1478385.07512729219161 6891463.931400388479233)",119,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478385.07512729219161 6891463.931400388479233,1478355.739431857131422 6891480.838359414599836,1478325.330706852255389 6891498.09790275990963,1478305.652277571614832 6891510.099898357875645,1478287.214830313343555 6891523.757363410666585,1478269.365216647740453 6891538.748412380926311,1478261.592750268988311 6891547.424226494506001,1478253.922921500634402 6891557.556240336969495,1478246.822264939546585 6891571.428382882848382,1478241.718376454431564 6891583.645085142925382,1 [...]
+"LINESTRING (1478922.243061791639775 6892224.595805050805211,1478942.052120761480182 6892225.622887848876417,1479174.98351413779892 6892237.625969672575593,1479215.245449822163209 6892238.729702232405543)",122,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478436.51523190876469 6891092.385810512118042,1478442.458882669685408 6891118.810350452549756,1478447.432141468161717 6891137.770471206866205,1478455.363229612121359 6891162.769696334376931,1478465.543014509370551 6891191.432300264947116,1478473.483433340443298 6891211.542166809551418,1478480.826687894295901 6891235.974496131762862,1478485.594671468948945 6891257.954459356144071,1478487.899352376582101 6891275.734668834134936,1478489.158995784586295 6891289.759603191167116, [...]
+"LINESTRING (1478739.464137542527169 6892228.489522617310286,1478695.637877542292699 6892227.661724239587784)",124,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479563.980060763191432 6892273.619992980733514,1479565.510294239735231 6892254.902467562817037)",126,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478942.192081137793139 6890130.999331175349653,1478922.401683553820476 6890133.711963083595037,1478910.029186052503064 6890135.275175113230944,1478897.096847034059465 6890139.121904042549431,1478884.817656453233212 6890149.711912300437689,1478838.360141325276345 6890218.141173175536096,1478809.602948790416121 6890263.490247231908143,1478795.187029757071286 6890294.724398334510624,1478786.481494184816256 6890326.46442789491266,1478781.480243310332298 6890359.43066562525928,1 [...]
+"LINESTRING (1478680.783415985293686 6890415.018393527716398,1478708.486240330385044 6890367.231622180901468,1478737.150125944754109 6890321.376206131651998,1478779.343514857813716 6890266.785306516103446,1478790.773612475488335 6890251.980539125390351,1478894.400277064414695 6890106.524382934905589,1478899.942708073183894 6890099.612560700625181,1478913.39756584004499 6890080.455656515434384)",128,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478809.602948790416121 6890263.490247231908143,1478790.773612475488335 6890251.980539125390351)",129,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478747.693807828007266 6890450.713059439323843,1478714.336584170814604 6890522.455372669734061,1478696.636261577485129 6890557.292236343957484,1478687.492183484369889 6890575.28546657320112,1478674.457206855295226 6890599.087476109154522,1478663.092424082104117 6890614.521270107477903,1478635.884126409655437 6890651.596215098164976,1478600.660764371277764 6890704.365850842557847,1478580.217218346660957 6890739.310790088959038,1478575.94376144465059 6890746.238489062525332,1 [...]
+"LINESTRING (1478212.02811472909525 6891713.140204788185656,1478199.170421248069033 6891718.367265134118497,1478187.143159347353503 6891720.421301508322358,1478175.936998336343095 6891718.750480834394693,1478161.875645596301183 6891715.209568447433412,1478141.842650016769767 6891706.65620210301131,1478116.659112496068701 6891686.514439879916608,1478086.567631015786901 6891649.909905299544334)",131,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479186.796170124784112 6890329.437667407095432,1479194.130093982676044 6890335.261541805230081,1479279.664546919055283 6890398.466176299378276,1479297.47683781851083 6890409.209787493571639)",132,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478086.567631015786901 6891649.909905299544334,1478075.426784849492833 6891635.39383159019053,1478052.874502453953028 6891606.26979230903089,1478037.180278623942286 6891587.247253092937171,1478002.040892810327932 6891541.829398297704756,1477825.784122222103179 6891305.424640764482319,1477691.104914883850142 6891132.620425897650421,1477677.911316492594779 6891115.560924383811653,1477601.352989191422239 6891019.243627357296646,1477547.608203666983172 6890950.087170991115272,1 [...]
+"LINESTRING (1479627.876639111666009 6890557.491479728370905,1479634.464107617270201 6890532.50946301408112)",134,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478016.484803919447586 6892382.200895741581917,1477995.042873862665147 6892323.962841073982418)",136,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478472.802292829845101 6892429.708376270718873,1478431.579295878997073 6892449.652710394002497)",137,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1476901.859007160179317 6891178.373176074586809,1476933.797965641599149 6891127.102523874491453,1476969.217272213893011 6891077.533540516160429,1477002.779771094908938 6891043.859300371259451,1477030.258658833103254 6891020.699720491655171,1477070.79118458321318 6890988.573769110254943,1477117.099408636335284 6890959.789270952343941,1477166.010895744198933 6890934.453480053693056)",139,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1477342.883491998305544 6890867.014377377927303,1477338.096847037784755 6890853.449989835731685)",141,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1477452.211209358181804 6890823.685052404180169,1477342.883491998305544 6890867.014377377927303,1477317.485348558053374 6890876.701050061732531,1477166.010895744198933 6890934.453480053693056)",142,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1477801.412354895845056 6891105.552087247371674,1477825.746799453394488 6891083.940398719161749,1477842.486060780240223 6891060.520138014107943,1477854.112102926243097 6891041.897400882095098,1477860.41031997743994 6891025.880348713137209,1477868.43471504189074 6891004.698037818074226,1477870.207546508172527 6890978.105273565277457)",144,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478212.02811472909525 6891713.140204788185656,1478206.467022337485105 6891687.633425346575677)",145,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478325.657281069783494 6892141.203251630999148,1478321.449139009229839 6892126.425690860487521,1478318.136743376497179 6892116.154995526187122,1478308.647429679986089 6892080.483592945151031,1478266.19278139132075 6891904.336327421478927,1478249.052300312556326 6891837.149678730405867,1478217.355939821107313 6891730.72214855439961,1478215.956336030969396 6891726.108225850388408,1478212.02811472909525 6891713.140204788185656)",146,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478185.743555557215586 6892242.623426643200219,1478218.251686245668679 6892235.403175389394164,1478245.870534363202751 6892229.562594718299806,1478299.018155604368076 6892218.111389826983213,1478347.248502201633528 6892208.147168586961925)",147,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479585.384668057085946 6890546.502448085695505,1479467.789957643020898 6890509.550598309375346)",148,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479591.626900956500322 6890520.325010627508163,1479634.464107617270201 6890532.50946301408112)",149,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478973.058010046370327 6890074.815872622653842,1478972.078287394251674 6890093.298440041951835,1478970.389432155527174 6890104.179573393426836,1478967.524909733561799 6890114.463024233467877,1478959.080633534118533 6890122.340371028520167,1478942.192081137793139 6890130.999331175349653)",150,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478965.164244676940143 6890062.325604433193803,1478973.058010046370327 6890074.815872622653842)",151,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478913.39756584004499 6890080.455656515434384,1478927.160336438566446 6890063.367736498825252,1478940.176651681773365 6890058.325657619163394,1478952.801077865762636 6890058.877374304458499,1478965.164244676940143 6890062.325604433193803)",152,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478242.875382254831493 6891699.988261526450515,1478246.253092732280493 6891712.113187463954091,1478248.763048860942945 6891721.111089956946671,1478265.091759745730087 6891789.477083542384207,1478290.042029966600239 6891901.331847446970642,1478313.816633009817451 6892003.132225465960801,1478335.35186998709105 6892086.538675913587213,1478348.993341592140496 6892131.4230787018314,1478366.684333492536098 6892186.885094705037773,1478371.750899214530364 6892203.548301403410733)", [...]
+"LINESTRING (1477711.763066816842183 6892498.678270866163075,1477867.380346852121875 6892398.006031540222466,1477903.396817710250616 6892373.278902645222843,1477936.726049288874492 6892354.607134696096182,1477974.254092237679288 6892334.525068153627217,1477995.042873862665147 6892323.962841073982418,1478115.819350223056972 6892267.411472347564995,1478185.743555557215586 6892242.623426643200219)",154,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478512.00052963453345 6892854.268168974667788,1478514.146588779985905 6892802.557567667216063,1478515.00501243583858 6892781.048631047829986,1478514.333202617941424 6892738.414194788783789,1478511.673955417005345 6892685.2786047719419,1478511.56198711367324 6892666.652103416621685,1478509.882462567882612 6892647.565733219496906,1478505.338415597099811 6892630.104427010752261,1478498.247089728945866 6892607.768114305101335,1478458.563656944548711 6892511.739540040493011,1478 [...]
+"LINESTRING (1477587.123683996265754 6892602.264529967680573,1477695.331718327244744 6892512.33741554338485,1477711.763066816842183 6892498.678270866163075)",156,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478115.819350223056972 6892267.411472347564995,1478139.976511632790789 6892311.59171611443162)",157,secondary,0,0,0,mainroads,5,0
+"LINESTRING (1478489.158995784586295 6891306.911441416479647,1478483.047392571577802 6891339.299239296466112,1478476.786498283268884 6891360.712351007387042,1478468.631473538232967 6891378.140244230628014,1478458.498342099832371 6891397.361552857793868,1478446.163167367456481 6891415.663224364630878,1478431.457996882498264 6891431.757693529129028,1478410.566577647114173 6891449.216396995820105,1478385.07512729219161 6891463.931400388479233)",158,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478294.147534419083968 6892193.936677500605583,1478305.512317192507908 6892186.823776624165475,1478311.166716501815245 6892179.726211540400982,1478316.130644607590511 6892167.67722771782428,1478325.657281069783494 6892141.203251630999148)",159,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479634.464107617270201 6890532.50946301408112,1479915.066006073495373 6890602.474631934426725,1480044.492033854592592 6890635.825165513902903,1480127.133972293231636 6890656.025601936504245)",160,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479266.862837587017566 6890414.650566106662154,1479180.236693697748706 6890350.648851290345192,1479173.966468716738746 6890346.066372577100992,1479161.817907822318375 6890337.253920855000615,1479078.233569500269368 6890275.796917401254177)",161,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479467.789957643020898 6890509.550598309375346,1479446.292043434455991 6890501.872114131227136,1479396.176897070370615 6890481.549454870633781)",162,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479453.616636599646881 6890482.744903990067542,1479477.671160398516804 6890489.641729325987399,1479591.626900956500322 6890520.325010627508163)",163,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1479078.233569500269368 6890275.796917401254177,1479020.719184436369687 6890226.708281797356904,1478981.269018949009478 6890181.160181148909032,1478961.497282745083794 6890155.520330861210823,1478951.065569168189541 6890141.650631228461862,1478942.192081137793139 6890130.999331175349653)",164,secondary,0,0,1,mainroads,5,0
+"LINESTRING (1478662.672542944317684 6890646.814319248311222,1478692.838669959222898 6890659.106249583885074,1478720.354880469152704 6890669.221817328594625,1478746.378180262632668 6890677.222320823930204,1478774.342263983329758 6890683.613533364608884,1478827.965750514063984 6890691.230884444899857,1478891.339810111327097 6890693.790438639931381,1478955.012451852904633 6890686.755498230457306,1478996.935250700218603 6890678.03463292773813,1479037.234509153524414 6890665.926593106240034, [...]
+"LINESTRING (1476778.273992526577786 6891183.002112032845616,1476810.838107366813347 6891118.825677935034037,1476844.288637944497168 6891066.17594079952687,1476886.575333778047934 6891009.372855611145496,1476930.149665095610544 6890957.382903834804893,1476992.422703049844131 6890898.036294349469244,1477053.594719349872321 6890849.986093406565487,1477124.750576021615416 6890812.741637612693012,1477186.743693214608356 6890783.666558920405805,1477242.522569580934942 6890762.929363554343581, [...]
+"LINESTRING (1479267.721261245664209 6890576.89474381506443,1479349.710051246453077 6890499.956325806677341)",685,light_rail,0,0,0,railways,7,0
+"LINESTRING (1480035.058704312890768 6891629.36974533367902,1479728.956024808576331 6891543.530838788487017,1479512.717239294666797 6891494.143226150423288,1479401.821965686744079 6891469.265595769509673,1479333.754568046657369 6891453.922129524871707,1479271.490860788151622 6891437.490397951565683,1479207.566290363902226 6891415.111414563842118)",686,light_rail,0,0,0,railways,7,0
+"LINESTRING (1476557.509821424959227 6892224.91772651206702,1476579.56757715344429 6892197.033244075253606,1476602.661039686063305 6892155.474967340938747,1476614.604325356660411 6892127.820666904561222,1476626.193044736748561 6892100.902270716615021,1476640.860892452765256 6892073.416780357249081,1476659.326331784250215 6892043.785288944840431,1476691.171983344946057 6891992.432471443898976,1476760.032489801989868 6891879.840651011094451,1476778.273992526577786 6891853.275649514980614,1 [...]
+"LINESTRING (1479344.55950930272229 6890482.33109465893358,1479381.891607720637694 6890430.850314672105014,1479559.622627633390948 6890217.144998343661427,1479616.707800869364291 6890150.324937810190022,1479735.832744759973139 6890003.951099094934762,1479757.517272809520364 6889977.315668813884258,1479906.463108111871406 6889794.287592766806483,1479968.549532222328708 6889699.85574609786272,1480013.924687087535858 6889632.978685894981027,1480063.200071178842336 6889572.814326574094594,14 [...]
+"LINESTRING (1479315.839639539364725 6890486.729735681787133,1479082.600333325797692 6890751.342306513339281,1478999.1466246873606 6890835.195578991435468,1478910.113162280060351 6890921.118885340169072,1478875.048422001069412 6890958.17991707008332,1478845.218199896393344 6890996.482626908458769,1478808.305982613703236 6891048.641432393342257,1478761.083350750152022 6891124.619469199329615)",689,rail,0,0,0,railways,7,0
+"LINESTRING (1476557.509821424959227 6892224.91772651206702,1476576.040575603721663 6892207.426679218187928,1476622.861987715121359 6892172.689970703795552,1476647.1591095039621 6892154.43256404530257,1476668.713007867103443 6892134.718903675675392,1476686.254708698019385 6892114.39211630821228,1476697.955396381672472 6892099.200712250545621,1476709.628091989317909 6892081.188741613179445,1476879.773259358713403 6891804.805861446075141,1476894.207839777693152 6891782.165266772732139,1476 [...]
+"LINESTRING (1478578.537693798076361 6892046.973773205652833,1478584.938548462698236 6892094.35663787741214,1478595.808804563246667 6892162.1739446753636,1478606.221856760093942 6892214.478280032984912,1478616.578924805158749 6892272.623563419096172,1478646.530445903539658 6892364.080981981940567,1478711.369424138218164 6892514.636937133036554,1478787.84377520903945 6892676.55557119846344,1478826.81807540403679 6892755.92172808945179,1478854.548891827696934 6892815.098086142912507,147892 [...]
+"LINESTRING (1479276.548095814418048 6891179.446108014322817,1479307.358040571212769 6891231.606100558303297,1479339.17570005916059 6891279.306043236516416,1479366.542619493789971 6891318.974463047459722,1479402.260508207604289 6891358.597094771452248,1479431.306952188257128 6891389.360332677140832,1479472.697901599807665 6891421.380589242093265,1479515.283179575111717 6891449.063115849159658,1479565.827537767123431 6891472.499836646020412,1479622.035625964170322 6891492.334498732350767, [...]
+"LINESTRING (1478602.097690927330405 6891164.808263186365366,1478585.890279041836038 6891284.364215715788305,1478582.717843782622367 6891342.10424639005214,1478565.502717171795666 6891616.09531166497618,1478560.296191073488444 6891715.332197420299053,1478556.013403475517407 6891851.006974860094488,1478567.415509017417207 6891960.501914793625474,1478578.537693798076361 6892046.973773205652833)",693,rail,0,0,0,railways,7,0
+"LINESTRING (1475827.439161936519668 6888429.393967813812196,1475897.979192936560139 6888504.029522120021284,1476023.309046963695437 6888628.280639900825918,1476225.150574827333912 6888800.601991452276707,1476400.138371311826631 6888947.490241937339306,1476464.28687833994627 6889000.647103982046247,1476631.903428197605535 6889142.129735194146633,1476745.103382710367441 6889237.949506449513137,1476791.197000852320343 6889272.33640996273607,1476838.662230708403513 6889305.65077849291265,14 [...]
+"LINESTRING (1478598.449390378547832 6890845.709869343787432,1478556.414623227668926 6890825.447648616507649)",696,rail,0,0,0,railways,7,0
+"LINESTRING (1478927.88813040801324 6890978.978924939408898,1479441.859964764444157 6891217.979787161573768,1479558.960148505866528 6891274.753690734505653,1479694.432464661076665 6891336.67816798388958,1479814.882366804173216 6891392.165357237681746,1480077.364061532309279 6891515.142887800931931)",697,rail,0,0,0,railways,7,0
+"LINESTRING (1478569.785504766972736 6890803.361579650081694,1478595.75282041169703 6890816.082902735099196)",700,rail,0,0,0,railways,7,0
+"LINESTRING (1478850.574017061386257 6890963.099942809902132,1478627.402527447091416 6890858.032757756300271)",703,rail,0,0,0,railways,7,0
+"LINESTRING (1478183.560173645848408 6890279.046004079282284,1478405.86390891415067 6890456.521695459261537,1478453.245162542676553 6890498.408369177952409,1478496.56756518012844 6890547.360726167447865,1478533.153208245523274 6890597.539500389248133)",704,rail,0,0,0,railways,7,0
+"LINESTRING (1478343.516225425293669 6890759.5421401290223,1478223.607503416249529 6890749.472439081408083,1478071.965098144253716 6890723.922736717388034,1477935.876956322928891 6890680.27232330199331,1477861.231420873198658 6890651.795460822060704)",705,rail,0,0,0,railways,7,0
+"LINESTRING (1479207.566290363902226 6891415.111414563842118,1479145.39589002286084 6891388.195404731668532,1479060.327971686143428 6891345.599010691978037,1478962.775587541749701 6891295.568845461122692,1478908.82552679348737 6891268.132091694511473,1478785.175197315169498 6891204.261530964635313,1478658.75365233537741 6891138.674794974736869)",708,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478183.560173645848408 6890279.046004079282284,1478275.262213947018608 6890340.70227038115263,1478305.01779051986523 6890362.756416314281523,1478420.541087323101237 6890454.559939289465547,1478460.187197338789701 6890491.067073968239129,1478510.171714016469195 6890538.195547109469771,1478530.773881800472736 6890556.893749584443867,1478551.954552487237379 6890575.162854988127947)",709,rail,0,0,0,railways,7,0
+"LINESTRING (1478575.831793141085654 6891339.988995048217475,1478579.592061987845227 6891283.046025006100535,1478593.50412365840748 6891161.252267209812999)",710,rail,0,0,0,railways,7,0
+"LINESTRING (1477781.108769256155938 6890678.065286220051348,1477905.421577859437093 6890735.141912166029215,1478103.250908190850168 6890828.69695742521435,1478294.856667005689815 6890931.571979558095336,1478411.714252757374197 6890990.995472802780569,1478613.145230175927281 6891098.501459069550037,1478665.191829765914008 6891124.772744154557586)",713,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478604.868906431598589 6891027.229151873849332,1478611.251099710585549 6890982.580821967683733,1478613.247867786558345 6890914.635521415621042,1478611.652319462504238 6890865.451023075729609,1478607.640121933305636 6890811.484831825830042,1478591.227434826781973 6890756.093610955402255)",714,rail,0,0,0,railways,7,0
+"LINESTRING (1478625.956270195310935 6890829.907785100862384,1478861.276320709846914 6890948.416510410606861)",715,rail,0,0,0,railways,7,0
+"LINESTRING (1479616.707800869364291 6890150.324937810190022,1479664.443620794219896 6890101.926717818714678,1479699.98422635695897 6890058.524888642132282,1479734.657077576732263 6890015.874237441457808,1479788.523162097437307 6889964.457745274528861)",718,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478782.273352124495432 6891113.062545800581574,1478812.280857374193147 6891067.999899725429714,1478834.945108078885823 6891038.540714574977756,1478859.28888332657516 6891009.74071024172008,1478876.867906926199794 6890991.439962794072926,1478897.348775716731325 6890970.962793939746916,1478936.528351138578728 6890935.541706578806043,1478983.667006774339825 6890894.219856407493353,1479029.200783401727676 6890851.304213112220168,1479066.794141192454845 6890814.289654764346778,1 [...]
+"LINESTRING (1479735.832744759973139 6890003.951099094934762,1479699.98422635695897 6890058.524888642132282,1479669.062313296599314 6890105.972662986256182,1479632.952535520773381 6890164.209978073835373)",720,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478572.827310339780524 6890796.249909016303718,1478594.185264169238508 6890806.013130874373019)",723,rail,0,0,0,railways,7,0
+"LINESTRING (1478714.065994105068967 6891217.213403515517712,1478673.654767348431051 6891300.887601297348738,1478632.870312915416434 6891389.360332677140832,1478605.372763794381171 6891470.307910224422812,1478585.83429489005357 6891564.484644450247288,1478578.593677949858829 6891611.80335165001452,1478569.23499394278042 6891715.255554312840104,1478573.153884557308629 6891842.852014512754977,1478573.49912015767768 6891933.752698284573853,1478578.537693798076361 6892046.973773205652833)",7 [...]
+"LINESTRING (1478438.502669292036444 6890750.315412051975727,1478385.625638116383925 6890728.62804473284632,1478310.177663156529889 6890703.384942455217242,1478208.071901348652318 6890677.774079982191324,1478114.541045426623896 6890658.554491711780429,1477979.628570788539946 6890640.561075114645064,1477885.481889200396836 6890636.698779699392617,1477771.03162196977064 6890638.5839474638924,1477672.135618184227496 6890651.933400171808898,1477611.794033464044333 6890663.01453560963273,1477 [...]
+"LINESTRING (1477785.139628168661147 6890619.962187672965229,1477670.577392631676048 6890570.948082859627903,1477610.665019739652053 6890546.318531366065145,1477551.331149747828022 6890517.719532645307481)",728,rail,0,0,0,railways,7,0
+"LINESTRING (1478598.971909126965329 6890754.806160444393754,1478614.376881508156657 6890813.262752261944115,1478617.549316764576361 6890865.542985087260604,1478618.976912630489096 6890914.083746002987027,1478617.614631609292701 6890981.584552413783967,1478611.950901604257524 6891032.133892551995814)",730,rail,0,0,0,railways,7,0
+"LINESTRING (1478624.789933702209964 6890819.929957416839898,1478866.398870577802882 6890942.408266056329012)",731,rail,0,0,0,railways,7,0
+"LINESTRING (1478565.502717171795666 6891616.09531166497618,1478561.677133480552584 6891537.138942591845989)",735,rail,0,0,0,railways,7,0
+"LINESTRING (1478595.276955124922097 6890826.290629548951983,1478565.344095406820998 6890811.423524235375226)",736,rail,0,0,0,railways,7,0
+"LINESTRING (1476576.040575603721663 6892207.426679218187928,1476618.149988292017952 6892167.615909783169627,1476640.273058862425387 6892146.093342563137412,1476655.827322310302407 6892126.916231859475374,1476670.784421477932483 6892106.114253824576735,1476680.329719322966412 6892090.386338596232235,1476691.657179324654862 6892070.780140379443765,1476829.630120918620378 6891846.576929586008191,1476847.059853446204215 6891819.168952871114016,1476865.683914539869875 6891793.661837009713054 [...]
+"LINESTRING (1476937.716856256127357 6891718.275293369777501,1476957.72185975429602 6891707.821176195517182,1476966.875268540112302 6891701.980978826992214,1477005.746931127505377 6891679.095416892319918)",739,rail,0,0,0,railways,7,0
+"LINESTRING (1477252.002552584279329 6891480.071950710378587,1477286.414144428446889 6891458.857786803506315,1477326.153561364393681 6891432.983940120786428)",741,rail,0,0,0,railways,7,0
+"LINESTRING (1478855.416646176483482 6890957.168323368765414,1478625.368436602409929 6890839.900952127762139)",742,rail,0,0,0,railways,7,0
+"LINESTRING (1477256.22935602767393 6891486.632411575876176,1477286.414144428446889 6891458.857786803506315,1477319.762037389911711 6891425.979008984751999)",743,rail,0,0,0,railways,7,0
+"LINESTRING (1478430.310321775265038 6890777.137325343675911,1478363.717173459939659 6890762.914036750793457)",746,rail,0,0,0,railways,7,0
+"LINESTRING (1478932.544145682128146 6890972.940003331750631,1479191.92805068846792 6891093.642660211771727,1479300.29470678162761 6891144.070084678940475,1479955.859791199443862 6891450.764536706730723,1480073.361194689990953 6891504.167875309474766,1480081.059015537146479 6891508.153213307261467)",747,rail,0,0,0,railways,7,0
+"LINESTRING (1478614.35822012508288 6895547.603960990905762,1478615.365934853209183 6895453.089168295264244,1478618.7716374094598 6895322.46029799990356,1478627.934376885648817 6895235.953195017762482,1478677.928224253468215 6894754.545370802283287,1478689.899502002634108 6894669.838488157838583,1478708.728838320123032 6894564.201485143043101,1478728.612542824819684 6894486.274192513898015,1478750.604983708821237 6894401.156126040033996,1478775.648560852976516 6894316.60630351677537,1478 [...]
+"LINESTRING (1477556.565667921910062 6890511.175188716500998,1477614.798516265349463 6890538.701317588798702,1477682.334064466878772 6890563.668027113191783,1477739.55919808219187 6890579.638179088011384,1477786.753837872762233 6890589.339832002297044,1477886.918815756216645 6890608.05347993876785,1477979.441956950351596 6890621.326249268837273,1478115.203524554148316 6890637.250536070205271,1478210.255283262813464 6890657.389669657684863,1478313.182145957835019 6890686.479618338868022,1 [...]
+"LINESTRING (1478347.229840818792582 6891012.392329533584416,1478476.030712238047272 6891063.922815636731684)",751,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478094.470727083971724 6890836.620984894223511,1478107.888262082124129 6890843.119612865149975,1478290.601871486520395 6890940.323774167336524,1478460.821684390539303 6891029.313666300848126,1478546.72936500585638 6891074.130857136100531,1478570.382669050013646 6891085.365848724730313,1478660.983687705593184 6891132.375185729004443,1478788.133026657626033 6891198.023180870339274,1478968.12207401660271 6891290.617960623465478,1479014.626242603408173 6891313.885613084770739,1 [...]
+"LINESTRING (1477521.612895943690091 6890502.255271850153804,1477475.761875794501975 6890473.181315985508263,1477442.637919437140226 6890448.153582629747689,1477408.198335519991815 6890419.110474707558751,1477351.449067191453651 6890359.875120709650218,1477284.827926800120622 6890281.743360051885247,1477035.661129459738731 6889969.653018221259117,1477000.447098108474165 6889923.002958968281746,1476967.005898226518184 6889873.855176855809987,1476902.036290308227763 6889765.446070476435125 [...]
+"LINESTRING (1478087.146133915986866 6890851.273559163324535,1478099.686583872418851 6890857.588275128975511,1478284.284993046661839 6890953.198585663922131,1478356.989744574995711 6890988.497132927179337,1478420.373134867986664 6891017.419679494574666)",755,light_rail,0,0,0,railways,7,0
+"LINESTRING (1477405.483104167273268 6890465.763412615284324,1477442.693903588689864 6890498.193800956942141,1477484.448749980889261 6890527.267847270704806,1477538.921329480595887 6890561.752224069088697,1477579.621807685820386 6890584.404708518646657,1477683.612369260750711 6890631.518402252346277)",757,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478638.020854862174019 6891161.880697418935597,1478549.817824034951627 6891106.839593932963908,1478476.030712238047272 6891063.922815636731684)",758,light_rail,0,0,0,railways,7,0
+"LINESTRING (1477654.761869808426127 6890641.77187445666641,1477570.934933496639132 6890599.225414553657174,1477528.592253511305898 6890576.43495028745383,1477478.915649668080732 6890539.130456198938191,1477438.289816997246817 6890504.661502741277218,1477401.172324493527412 6890470.315307054668665)",759,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478908.82552679348737 6891268.132091694511473,1478968.12207401660271 6891290.617960623465478)",760,light_rail,0,0,0,railways,7,0
+"LINESTRING (1477344.973566989181563 6890408.949243260547519,1477311.504375034244731 6890367.109013764187694,1476949.016324184834957 6889894.743330676108599,1476911.338990163756534 6889833.412309887818992,1476874.352127346210182 6889766.059066688641906,1476800.67698385566473 6889633.913489734753966,1476653.438665177905932 6889368.648105666041374,1476600.757578530581668 6889286.419145964086056,1476556.250178016955033 6889229.536690140143037)",761,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478951.550765147898346 6891271.872068259865046,1479014.626242603408173 6891313.885613084770739)",762,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478665.191829765914008 6891124.772744154557586,1478570.382669050013646 6891085.365848724730313)",764,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478613.145230175927281 6891098.501459069550037,1478512.373757313471287 6891032.731658027507365,1478391.186730505200103 6890953.244567170739174)",766,light_rail,0,0,0,railways,7,0
+"LINESTRING (1475352.861508915899321 6893202.392042903229594,1475384.884443622082472 6893185.496794159524143,1475415.40513693029061 6893166.639162816107273,1475452.914518496021628 6893139.104034236632288,1475485.021429432556033 6893109.6065957788378,1475514.525077319936827 6893077.932231985032558,1475539.596646539866924 6893046.978557553142309,1475559.415036202641204 6893018.186688029207289,1475577.078036027029157 6892989.057638514786959,1475610.024709239369258 6892929.052129200659692,14 [...]
+"LINESTRING (1478411.714252757374197 6890990.995472802780569,1478512.373757313471287 6891032.731658027507365,1478671.266110216034576 6891093.428076104260981)",768,light_rail,0,0,0,railways,7,0
+"LINESTRING (1477489.468662241240963 6890705.561333095654845,1477590.081513338722289 6890676.256742395460606,1477641.279019968351349 6890665.849960001185536,1477684.806697827065364 6890661.926345975138247,1477737.515776550164446 6890662.217551639303565,1477788.27474065637216 6890666.984130036085844,1477827.081088401842862 6890675.505737031809986,1477872.446912571322173 6890688.977864359505475,1477922.702019314747304 6890709.776175797916949,1478339.364067516522482 6890923.509914490394294, [...]
+"LINESTRING (1478460.821684390539303 6891029.313666300848126,1478493.917648672126234 6891050.955862689763308,1478535.485881229164079 6891075.832198646850884)",770,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478546.72936500585638 6891074.130857136100531,1478493.917648672126234 6891050.955862689763308,1478458.08779165497981 6891036.594143707305193)",772,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478560.296191073488444 6891715.332197420299053,1478571.828926299000159 6891609.948612500913441,1478579.424109532730654 6891563.518959445878863,1478599.410451650619507 6891468.039343643933535,1478627.72910166461952 6891387.229740903712809,1478666.022261348785833 6891297.469495555385947,1478708.467578947311267 6891213.902627007104456)",773,rail,0,0,0,railways,7,0
+"LINESTRING (1478749.074750232277438 6891229.766776816919446,1478697.252087243599817 6891335.283329210244119,1478680.839400137076154 6891369.265349286608398,1478665.275805993471295 6891403.860634117387235,1478650.579966201679781 6891440.893235126510262,1478636.807864910224453 6891480.31720149051398,1478625.71367220277898 6891516.50710129737854,1478615.524556615622714 6891556.452601296827197,1478606.27784091187641 6891606.162493411451578,1478598.524035915965214 6891650.400417221710086,147 [...]
+"LINESTRING (1478162.239542582305148 6890271.275784828700125,1478102.308508307440206 6890215.076020252890885)",775,rail,0,0,0,railways,7,0
+"LINESTRING (1477639.31024397094734 6890001.207860252819955,1477597.219492668518797 6889960.565124080516398,1477572.390521438326687 6889934.420244771055877,1477555.05409582844004 6889916.489749496802688,1477065.258084264583886 6889497.847038632258773,1477030.715862737037241 6889473.036882025189698,1476963.954761966597289 6889426.634892208501697,1476919.242086228914559 6889398.606871547177434)",776,rail,0,0,0,railways,7,0
+"LINESTRING (1477532.455159971257672 6889929.485523279756308,1477564.646047132555395 6889952.427406344562769,1477596.025164099410176 6889970.817740640603006,1477639.31024397094734 6890001.207860252819955)",777,rail,0,0,0,railways,7,0
+"LINESTRING (1478526.565739739919081 6890602.627896940335631,1478491.594306378625333 6890551.6980971544981,1478448.131943361833692 6890503.527355609461665,1478399.733644315274432 6890460.41455677524209,1478162.239542582305148 6890271.275784828700125,1478101.907288549700752 6890224.102898960933089,1478071.293288323795423 6890200.317325276322663,1478038.579882414080203 6890177.742551427334547,1478001.96624727291055 6890154.355581684969366,1477949.630396228516474 6890124.501278791576624,147 [...]
+"LINESTRING (1477852.236633849330246 6890212.394012399949133,1478308.479477224871516 6890605.202749434858561,1478362.784104266436771 6890650.676619523204863,1478396.178650686750188 6890676.946441259235144,1478453.133194239344448 6890714.128961123526096)",779,rail,0,0,0,railways,7,0
+"LINESTRING (1482784.748301694169641 6886965.537159140221775,1482693.28885937994346 6886972.002020028419793,1482596.454938515089452 6886983.813426220789552,1482487.295173607533798 6887003.177429282106459,1482381.643748866859823 6887039.102067950181663,1482275.889686515787616 6887083.636586944572628,1482198.407620716840029 6887123.973706754855812,1482126.533300768584013 6887170.745409660041332,1482052.44760683295317 6887226.985180730931461,1481981.702300606062636 6887286.71834568399936,14 [...]
+"LINESTRING (1477856.34213829645887 6890206.462946793064475,1478312.584981674794108 6890600.190983732230961,1478372.161449659382924 6890649.036674340255558,1478398.940535501111299 6890670.218048175796866,1478437.774875319562852 6890694.98591932002455)",781,rail,0,0,0,railways,7,0
+"LINESTRING (1482783.740586966043338 6886947.980951749719679,1482690.806895327055827 6886951.780197567306459,1482595.2606099487748 6886967.00783793721348,1482485.121122389100492 6886988.62378338817507,1482377.426276116399094 6887024.134725640527904,1482269.460839775390923 6887069.113434969447553,1482189.804722755216062 6887109.159404909238219,1482114.440724022919312 6887154.138589794747531,1482034.290080333128572 6887211.098286444321275,1481972.978103650966659 6887259.325908213853836,148 [...]
+"LINESTRING (1477861.343389173736796 6890200.087439280003309,1478318.509971052641049 6890594.719426577910781,1478390.477597918594256 6890656.393440401181579,1478437.774875319562852 6890694.98591932002455,1478455.288584077497944 6890709.31637466698885)",783,rail,0,0,0,railways,7,0
+"LINESTRING (1480071.877614675322548 6891532.785711640492082,1479083.878638119669631 6891071.034723062068224,1478918.445470173377544 6890994.888592929579318)",784,rail,0,0,0,railways,7,0
+"LINESTRING (1477866.363301434088498 6890193.696611104533076,1478323.520552617264912 6890589.707667414098978,1478345.643623190466315 6890607.563031607307494,1478390.477597918594256 6890656.393440401181579)",785,rail,0,0,0,railways,7,0
+"LINESTRING (1479235.297106784768403 6891399.41550721321255,1479323.42549207736738 6891429.473809752613306,1479404.817117797909304 6891454.412629490718246,1479515.861682475078851 6891481.696737250313163,1479730.990115647669882 6891529.674072655849159,1480047.17927313153632 6891600.766893580555916)",786,light_rail,0,0,0,railways,7,0
+"LINESTRING (1477872.288290809141472 6890185.972451457753778,1478330.359949802746996 6890582.412268224172294,1478408.961698635946959 6890650.630639746785164,1478459.636686514364555 6890694.801999206654727,1478463.210341525729746 6890697.438187943771482)",787,rail,0,0,0,railways,7,0
+"LINESTRING (1478805.488113650586456 6894342.55076818075031,1478857.320107331965119 6894072.714029368944466,1478926.292582089779899 6893755.217427032999694,1478940.615194202633575 6893690.161840692162514,1478969.521677806740627 6893554.241368629038334,1478978.189890613080934 6893508.015132857486606,1478983.816297846613452 6893465.484164356254041,1478989.190776400035247 6893405.965717462822795,1478991.168883087579161 6893344.040629624389112,1478990.7023484937381 6893285.075020092539489,14 [...]
+"LINESTRING (1477882.775988540612161 6890173.665918780490756,1478339.476035819854587 6890570.105128699913621,1478400.685374894412234 6890626.399334325455129,1478459.636686514364555 6890694.801999206654727)",789,rail,0,0,0,railways,7,0
+"LINESTRING (1477908.538028964074329 6890093.375067686662078,1477813.999458313919604 6890050.080562806688249)",790,rail,0,0,0,railways,7,0
+"LINESTRING (1477877.298872376326472 6890180.041405342519283,1478334.922658159164712 6890576.036462583579123,1478373.15050300443545 6890608.819805517792702,1478408.961698635946959 6890650.630639746785164)",791,rail,0,0,0,railways,7,0
+"LINESTRING (1478441.880379769485444 6890723.922736717388034,1478448.113281978992745 6890727.11069754883647)",792,rail,0,0,0,railways,7,0
+"LINESTRING (1477872.288290809141472 6890238.830985979177058,1478303.935430257115513 6890611.578578202985227,1478358.687930509448051 6890655.504497475922108,1478392.194445233326405 6890681.43714867066592,1478448.794422489590943 6890719.355371965095401)",793,rail,0,0,0,railways,7,0
+"LINESTRING (1478374.52211471600458 6890689.882137652486563,1478441.880379769485444 6890723.922736717388034)",794,rail,0,0,0,railways,7,0
+"LINESTRING (1477881.404376826249063 6890257.972941686399281,1478297.543906279606745 6890617.050146820954978,1478351.223376962356269 6890659.979866296984255,1478385.718945034081116 6890686.908764844760299,1478441.880379769485444 6890723.922736717388034)",795,rail,0,0,0,railways,7,0
+"LINESTRING (1477639.31024397094734 6890001.207860252819955,1477650.339121833909303 6890011.138695799745619,1477667.871491971891373 6890027.245678919367492,1477711.333854988683015 6890056.072814892046154,1477872.288290809141472 6890185.972451457753778)",796,rail,0,0,0,railways,7,0
+"LINESTRING (1477711.333854988683015 6890056.072814892046154,1477765.601159261539578 6890092.271629626862705,1477877.298872376326472 6890180.041405342519283)",797,rail,0,0,0,railways,7,0
+"LINESTRING (1477765.601159261539578 6890092.271629626862705,1477828.779274330707267 6890136.347967855632305,1477882.775988540612161 6890173.665918780490756)",798,rail,0,0,0,railways,7,0
+"LINESTRING (1477667.871491971891373 6890027.245678919367492,1477709.663661133032292 6890068.854257536120713,1477866.363301434088498 6890193.696611104533076)",799,rail,0,0,0,railways,7,0
+"LINESTRING (1477709.663661133032292 6890068.854257536120713,1477738.43018435779959 6890100.348186734132469,1477861.343389173736796 6890200.087439280003309)",800,rail,0,0,0,railways,7,0
+"LINESTRING (1477738.43018435779959 6890100.348186734132469,1477767.485959034180269 6890134.800081231631339,1477856.34213829645887 6890206.462946793064475)",801,rail,0,0,0,railways,7,0
+"LINESTRING (1477767.485959034180269 6890134.800081231631339,1477796.280474334955215 6890170.96859906706959,1477852.236633849330246 6890212.394012399949133)",802,rail,0,0,0,railways,7,0
+"LINESTRING (1477796.280474334955215 6890170.96859906706959,1477825.522862849291414 6890206.815438941121101,1477872.288290809141472 6890238.830985979177058)",803,rail,0,0,0,railways,7,0
+"LINESTRING (1477825.522862849291414 6890206.815438941121101,1477854.522653371095657 6890233.896077645942569,1477881.404376826249063 6890257.972941686399281)",804,rail,0,0,0,railways,7,0
+"LINESTRING (1477335.922795813763514 6889793.260820533148944,1477382.669562393333763 6889831.527330902405083,1477414.291277347132564 6889860.415065491572022,1477448.665546425385401 6889897.256655850447714,1477629.102466995362192 6890037.329800856299698,1477696.330102362437174 6890102.263879836536944,1477741.44399785483256 6890151.443709483370185,1477774.763898740522563 6890185.328771825879812,1477834.890877549303696 6890236.608744276687503,1478292.505332639208063 6890623.870454665273428, [...]
+"LINESTRING (1477335.922795813763514 6889793.260820533148944,1477374.542529721045867 6889835.496514805592597,1477399.390162334311754 6889867.6638342756778,1477427.400899513624609 6889893.532643830403686,1477590.072182645788416 6890022.694035316817462,1477621.115394705208018 6890055.337192909792066,1477774.763898740522563 6890185.328771825879812)",806,rail,0,0,0,railways,7,0
+"LINESTRING (1478113.020142643013969 6890567.867468994110823,1478206.914895548252389 6890612.88133230060339,1478324.761534644989297 6890666.15649242606014)",807,rail,0,0,0,railways,7,0
+"LINESTRING (1478632.758344612084329 6890816.420094702392817,1478872.753071786370128 6890934.054974609985948)",808,rail,0,0,0,railways,7,0
+"LINESTRING (1477627.702863208018243 6890097.421008551493287,1477642.613308914005756 6890109.068425429053605,1477684.3868166890461 6890145.849852683022618,1477714.636919934535399 6890174.52415706217289,1477745.222928084433079 6890205.788614028133452,1477770.891661590430886 6890232.807946092449129,1478127.641336897388101 6890537.229985372163355,1478178.017742637079209 6890574.044024353846908,1478255.014612456317991 6890619.533044742420316)",809,rail,0,0,0,railways,7,0
+"LINESTRING (1477633.282616982702166 6890089.78889452945441,1477648.622274519409984 6890102.432460854761302,1477690.694364438997582 6890138.202367076650262,1477719.246281747007743 6890165.696567691862583,1477750.653390789870173 6890198.846054994501173,1477777.712397390045226 6890226.217856734059751,1478134.965930065372959 6890527.988186067901552,1478179.100102899828926 6890562.058752524666488,1478255.014612456317991 6890619.533044742420316)",810,rail,0,0,0,railways,7,0
+"LINESTRING (1478119.13174585881643 6890559.131406237371266,1478211.729532587574795 6890605.67787111364305,1478274.851663501933217 6890634.675673317164183)",811,rail,0,0,0,railways,7,0
+"LINESTRING (1478578.658992794342339 6890784.938687206245959,1478592.291133706457913 6890793.812937114387751)",814,rail,0,0,0,railways,7,0
+"LINESTRING (1478576.662224721163511 6890790.042529220692813,1478592.869636606657878 6890797.951191720552742)",816,rail,0,0,0,railways,7,0
+"LINESTRING (1478255.014612456317991 6890619.533044742420316,1478274.851663501933217 6890634.675673317164183,1478324.761534644989297 6890666.15649242606014,1478374.52211471600458 6890689.882137652486563)",819,rail,0,0,0,railways,7,0
+"LINESTRING (1478624.575327788246796 6890811.791369803249836,1478632.758344612084329 6890816.420094702392817)",821,rail,0,0,0,railways,7,0
+"LINESTRING (1478624.575327788246796 6890812.481080299243331,1478632.758344612084329 6890816.420094702392817)",823,rail,0,0,0,railways,7,0
+"LINESTRING (1479311.071655961917713 6890483.128060797229409,1479409.174550930503756 6890368.840857767499983,1479522.103915374726057 6890231.44395041000098,1479567.199149484280497 6890173.895804021507502,1479618.872521397890523 6890109.175704349763691,1479907.088264473713934 6889740.297941270284355,1480050.090449015144259 6889560.462758839130402,1480664.171277103479952 6888813.320146127603948,1481185.187783869216219 6888181.696536475792527,1481455.404622207395732 6887849.387007832527161, [...]
+"LINESTRING (1479076.507391492836177 6891028.424682137556374,1479191.92805068846792 6891093.642660211771727)",825,rail,0,0,0,railways,7,0
+"LINESTRING (1478938.59976474638097 6890964.157518833875656,1479076.507391492836177 6891028.424682137556374,1479885.31042950367555 6891405.531389341689646,1479995.26330322236754 6891461.448241677135229,1480073.361194689990953 6891504.167875309474766)",827,rail,0,0,0,railways,7,0
+"LINESTRING (1475815.159971352899447 6888439.460763610899448,1475864.211418837308884 6888499.693255602382123,1475920.802065403433517 6888566.576213048771024,1475997.071141253225505 6888649.85508313588798,1476055.490603434853256 6888704.557588589377701,1476132.328851491678506 6888770.982559802941978,1476354.128729394637048 6888961.802259580232203,1476403.460097637493163 6889007.343453120440245,1476449.217810868984088 6889054.064817779697478,1476500.732561023207381 6889108.907986088655889, [...]
+"LINESTRING (1475804.159085565945134 6888448.485649089328945,1475830.975494176382199 6888481.704669660888612,1475911.042161641409621 6888576.367373092100024,1475986.294192070141435 6888660.810877257026732,1476043.97652958938852 6888715.605394661426544,1476111.773337163729593 6888773.20439646858722,1476344.24752664193511 6888971.976985700428486,1476393.14968305407092 6889017.380325557664037,1476438.403538923012093 6889064.254984210245311,1476487.604277476668358 6889117.994917658157647,147 [...]
+"LINESTRING (1478755.951470183674246 6891121.998467871919274,1478802.306347704026848 6891043.660044934600592,1478839.731753036612645 6890992.834741913713515,1478870.849610630888492 6890954.65466683357954,1478904.841321337036788 6890917.057202836498618,1478994.527932184981182 6890830.566843283362687,1479078.056286355247721 6890746.790252956561744,1479311.071655961917713 6890483.128060797229409)",831,rail,0,0,0,railways,7,0
+"LINESTRING (1478476.030712238047272 6891063.922815636731684,1478281.896335911471397 6890962.59414563048631,1477896.856002663495019 6890755.863709062337875,1477714.347668485715985 6890670.003475363366306)",832,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478476.030712238047272 6891063.922815636731684,1478633.626098963664845 6891126.550733875483274)",833,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478633.626098963664845 6891126.550733875483274,1478535.485881229164079 6891075.832198646850884,1478458.08779165497981 6891036.594143707305193,1478420.373134867986664 6891017.419679494574666,1478287.233491696184501 6890945.580986365675926,1478057.745123639237136 6890824.282802382484078,1478049.450138514628634 6890819.79201518651098)",834,light_rail,0,0,0,railways,7,0
+"LINESTRING (1479207.566290363902226 6891415.111414563842118,1479099.610184715595096 6891375.703095939941704,1478899.448181400541216 6891294.403931108303368,1478781.23764532036148 6891236.143100920133293,1478638.020854862174019 6891161.880697418935597)",835,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478638.020854862174019 6891161.880697418935597,1478347.229840818792582 6891012.392329533584416,1478274.310483370674774 6890973.691036481410265,1477887.81456218380481 6890777.459188850596547,1477799.630192739423364 6890730.620521273463964,1477771.712762480368838 6890717.776719653978944,1477743.422104542376474 6890708.212852067314088,1477709.010512698208913 6890701.438452739268541,1477673.143332915147766 6890694.740692501887679,1477614.537256892537698 6890691.997217950411141, [...]
+"LINESTRING (1478658.75365233537741 6891138.674794974736869,1478633.626098963664845 6891126.550733875483274)",837,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478665.191829765914008 6891124.772744154557586,1478792.53711324906908 6891190.098797177895904,1478951.550765147898346 6891271.872068259865046,1479057.696716560982168 6891325.611431846395135,1479110.443118050228804 6891347.499672620557249,1479235.297106784768403 6891399.41550721321255)",838,light_rail,0,0,0,railways,7,0
+"LINESTRING (1478557.963518089847639 6892049.073881317861378,1478556.050726244226098 6892008.252170108258724,1478555.892104479251429 6891960.287307545542717,1478556.013403475517407 6891851.006974860094488)",839,rail,0,0,0,railways,7,0
+"LINESTRING (1478566.193188372533768 6891473.710761290974915,1478566.314487369032577 6891421.901743350550532,1478564.35504206456244 6891386.677933054976165,1478562.041030463995412 6891340.556127598509192,1478559.988278241828084 6891280.026449425145984,1478552.421087084105238 6891228.617199691012502,1478536.680209795245901 6891184.841425079852343,1478515.882097477559 6891146.093319251202047,1478490.17604120564647 6891115.22371987067163,1478460.448456714395434 6891086.806626409292221,14784 [...]
+"LINESTRING (1478564.35504206456244 6891386.677933054976165,1478557.991510165855289 6891469.69478405546397,1478557.17973996582441 6891485.973299608565867)",841,rail,0,0,0,railways,7,0
+"LINESTRING (1479372.187688112957403 6890474.959161611273885,1479284.45119188237004 6890585.155705378390849,1479257.214902134146541 6890621.678759607486427,1479238.068322289036587 6890653.343446989543736,1479217.820720798335969 6890695.077879380434752,1479200.521617954364046 6890742.973886811174452,1479189.595377702033147 6890782.241162405349314,1479182.326768688624725 6890823.608417795971036,1479178.603822610806674 6890869.190812314860523,1479179.844804635737091 6890923.985054980032146, [...]
+"LINESTRING (1479618.872521397890523 6890109.175704349763691,1479692.510342122521251 6890026.310829350724816)",843,rail,0,0,0,railways,7,0
+"LINESTRING (1479213.220689673209563 6891123.270649696700275,1479083.878638119669631 6891071.034723062068224)",844,rail,0,0,0,railways,7,0
+"LINESTRING (1479300.29470678162761 6891144.070084678940475,1479441.859964764444157 6891217.979787161573768)",845,rail,0,0,0,railways,7,0
+"LINESTRING (1479384.009674790082499 6891203.495148631744087,1479558.960148505866528 6891274.753690734505653)",846,rail,0,0,0,railways,7,0
+"LINESTRING (1480034.237603422952816 6891507.38680200651288,1479869.214985921513289 6891429.1672482220456,1479384.009674790082499 6891203.495148631744087,1479213.220689673209563 6891123.270649696700275,1478922.187077639857307 6890988.451151218265295)",847,rail,0,0,0,railways,7,0
+"LINESTRING (1476931.73588272370398 6891636.221568983048201,1476803.457530052866787 6891734.431683016009629,1476778.572574671125039 6891759.448092334903777,1476760.209772950038314 6891782.226581771858037,1476741.193822791567072 6891808.684046884998679,1476723.484169505303726 6891841.487745635211468,1476712.809857935877517 6891868.19066839851439,1476703.031292790779844 6891897.499604214914143,1476694.307095838477835 6891943.869869998656213)",848,rail,0,0,0,railways,7,0
+"LINESTRING (1476934.208516089478508 6891653.941301063634455,1476814.523730684537441 6891746.801919807679951,1476788.603068495867774 6891772.722762719728053,1476773.235418886179104 6891792.128960026428103,1476754.74198747612536 6891818.172579637728631,1476737.676151934778318 6891848.401065579615533,1476720.880906458944082 6891883.688214769586921,1476708.900298016844317 6891916.369587530381978,1476699.78421199973673 6891943.992502459324896)",849,rail,0,0,0,railways,7,0
+"LINESTRING (1476935.00162490340881 6891674.266924197785556,1476822.473480205750093 6891761.793384700082242,1476799.939859193284065 6891783.790114367380738,1476785.346657011890784 6891800.345184058882296,1476766.722595915198326 6891824.54937045276165,1476723.736098188208416 6891895.798088805750012,1476711.624860059702769 6891917.672553083859384,1476699.78421199973673 6891943.992502459324896)",850,rail,0,0,0,railways,7,0
+"LINESTRING (1476691.171983344946057 6891992.432471443898976,1476706.772900257259607 6891960.961787490174174,1476716.439497095998377 6891939.271154,1476729.035931204212829 6891916.139652455225587,1476782.090245527913794 6891832.382406485266984,1476799.4173404420726 6891808.806677283719182,1476812.181727005401626 6891794.474261927418411,1476832.625273029785603 6891774.68484057392925,1476935.253553586313501 6891694.699898800812662)",851,rail,0,0,0,railways,7,0
+"LINESTRING (1478630.015121186384931 6891858.76339219789952,1478635.520229423418641 6891908.122586939483881,1478636.070740247843787 6891978.06907045096159,1478638.916601286735386 6892047.004431717097759,1478643.134074043016881 6892094.463943293318152,1478650.887879036134109 6892145.250223226845264,1478658.464400883996859 6892179.312314847484231,1478671.471385437063873 6892218.341333535499871,1478691.635010700207204 6892270.921968608163297,1478834.935777385951951 6892617.579527481459081)" [...]
+"LINESTRING (1478313.583365709986538 6891281.068739344365895,1478311.064078888390213 6891244.052202273160219,1478311.791872860630974 6891206.913214413449168,1478314.357813141075894 6891179.61471161711961,1478320.152172832516953 6891150.063152204267681,1478327.019562090979889 6891118.93297032918781,1478335.622460052836686 6891089.810801983810961,1478345.895551870344207 6891061.240524603053927,1478354.07856869418174 6891040.180739216506481)",2,motorway,0,0,1,motorways,9,0
+"LINESTRING (1478376.7148273200728 6891043.997246447019279,1478366.012523674638942 6891069.379364733584225,1478349.170624737394974 6891124.496849230490625,1478341.099576216889545 6891155.581069990992546,1478337.404622212052345 6891183.400629828684032,1478334.409470103681087 6891212.032651987858117,1478334.120218652067706 6891244.757277576252818,1478336.770135160302743 6891278.29440912604332)",3,motorway,0,0,1,motorways,9,0
+"LINESTRING (1478997.037888313643634 6890015.629031332209706,1479043.672686586854979 6889994.847840843722224,1479081.350020605139434 6889979.614465416409075,1479123.524748138152063 6889968.564922427758574,1479170.215530562913045 6889961.760495744645596,1479209.572389130014926 6889960.028739424422383,1479277.229236325016245 6889958.00580330286175,1479339.371644590049982 6889955.538434940390289,1479394.28276660759002 6889949.515607272274792,1479445.900154372444376 6889934.450895222835243,1 [...]
+"LINESTRING (1479942.302295821951702 6889547.176416218280792,1479792.936579379020259 6889681.205510908737779,1479634.277493779081851 6889834.561687532812357,1479584.358291943091899 6889878.774539081379771,1479537.527549138991162 6889912.305973013862967,1479500.783284314209595 6889934.512196131981909,1479450.145619201473892 6889955.569085474126041,1479395.169182339450344 6889971.124246567487717,1479341.666994804749265 6889978.327139240689576,1479278.190297594293952 6889979.032103547826409 [...]
+"LINESTRING (1478777.253439866937697 6890329.912772791460156,1478754.393244634149596 6890382.84888407215476,1478729.78821000806056 6890439.463628521189094,1478709.120727382134646 6890476.890270238742232,1478688.985094192204997 6890512.937716416083276,1478670.454340018797666 6890542.195732670836151,1478633.747397957136855 6890586.473781661130488,1478588.71747869788669 6890651.550235321745276,1478534.739425873849541 6890732.521037810482085,1478511.935214792611077 6890776.462944713421166,14 [...]
+"LINESTRING (1478394.163221230730414 6890950.225115459412336,1478448.831745258299634 6890845.265387403778732,1478487.684746459824964 6890764.078874094411731,1478528.161288061179221 6890690.694451033137739,1478570.830542263807729 6890627.870682856999338,1478588.708148004952818 6890605.53993255738169,1478636.835856985999271 6890548.770754639059305,1478661.664828216191381 6890514.378391520120203,1478677.918893560534343 6890487.618659947998822,1478693.202566948253661 6890460.874343669973314, [...]
+"LINESTRING (1477398.289140685694292 6890680.900715908035636,1477271.680981867713854 6890519.972504733130336,1476953.084505865816027 6890110.692934914492071,1476865.413324474124238 6889991.261711636558175)",32,motorway,0,0,1,motorways,9,0
+"LINESTRING (1476973.733327108668163 6890098.677702718414366,1477006.950590386521071 6890149.282794474624097,1477137.477639816235751 6890317.958516811951995,1477307.492177499225363 6890529.505495676770806,1477414.468560495181009 6890666.92282354272902)",44,motorway,0,0,1,motorways,9,0
+"LINESTRING (1476882.217900645453483 6889977.560873750597239,1476973.733327108668163 6890098.677702718414366)",49,motorway,0,0,1,motorways,9,0
+"LINESTRING (1478361.561783624347299 6891449.124428308568895,1478345.746260801097378 6891406.083198485895991,1478336.760804470162839 6891379.550418416969478)",53,motorway,0,0,1,motorways,9,0
+"LINESTRING (1478843.389384278329089 6893924.490144995972514,1478859.260891250800341 6893860.031164361163974,1478879.54581551020965 6893775.931677811779082,1478890.938590359175578 6893720.826675555668771,1478904.066873905947432 6893655.58737968839705,1478915.562286365544423 6893583.970421583391726,1478926.843092911178246 6893487.393564508296549,1478932.180248695891351 6893415.977419194765389,1478936.435044218087569 6893333.093783299438655,1478934.214339534984902 6893251.146226578392088,1 [...]
+"LINESTRING (1478357.829506850801408 6891368.391655500978231,1478371.993497204268351 6891403.906618202105165,1478390.850825597764924 6891440.249455007724464)",61,motorway,0,0,1,motorways,9,0
+"LINESTRING (1477495.477627843851224 6890800.066300450824201,1477451.250148088904098 6890745.763359077274799)",64,motorway,0,0,1,motorways,9,0
+"LINESTRING (1478967.31030381959863 6890667.658501483500004,1478973.720489174127579 6890696.33466696832329)",206,service,0,1,0,minorroads,10,1
+"LINESTRING (1479327.960208358010277 6889996.932087614201009,1479283.12623362406157 6889933.470080768689513)",208,footway,0,1,0,minorroads,10,1
+"LINESTRING (1478931.601745795924217 6891332.723570773378015,1479038.970017851097509 6891272.239934901706874)",252,footway,0,1,0,minorroads,10,1
+"LINESTRING (1479334.09980364702642 6891680.858200660906732,1479344.391556847607717 6891681.793242639862001)",260,footway,0,1,0,minorroads,10,1
+"LINESTRING (1478994.415963881416246 6892026.73918299935758,1479007.749522649217397 6892003.975329895503819)",268,footway,0,1,0,minorroads,10,1
+"LINESTRING (1478550.844200145918876 6890545.552211744710803,1478684.179787848610431 6890636.959331315010786)",290,path,0,1,0,minorroads,10,1
+"LINESTRING (1478483.35530540603213 6892391.046249195933342,1478493.69371206802316 6892418.992724485695362,1478523.77586285257712 6892467.619516485370696)",329,service,0,1,1,minorroads,10,1
+"LINESTRING (1478314.525765596190467 6891576.70133616309613,1478278.31335021276027 6891560.652561791241169,1478215.200549985514954 6891534.686417824588716)",376,service,0,1,1,minorroads,10,1
+"LINESTRING (1478215.228542061522603 6891874.245591463521123,1478297.571898355614394 6891853.750844960100949,1478291.20836645970121 6891823.66029835306108)",378,footway,0,1,0,minorroads,10,1
+"LINESTRING (1477112.210126065183431 6890858.29331654496491,1477075.419207778759301 6890879.996360674500465,1477069.279612489743158 6890889.912954720668495,1477083.490256302058697 6890932.47628013510257)",501,footway,0,1,0,minorroads,10,1
+"LINESTRING (1477502.205056728795171 6890571.39254963491112,1477519.588135797530413 6890535.436799609102309)",541,service,0,1,0,minorroads,10,1
+"LINESTRING (1477221.817764186300337 6890863.182627168484032,1477209.725187440868467 6890834.291289354674518,1477200.338511357782409 6890838.981335008516908,1477183.972477710107341 6890800.265549850650132,1477192.883288506418467 6890795.897391020320356,1477188.460540529107675 6890785.490453751757741)",556,footway,0,1,0,minorroads,10,1
+"LINESTRING (1477943.453478170791641 6891735.30541658680886,1477934.290738694835454 6891718.244636114686728)",570,footway,0,1,0,minorroads,10,1
+"LINESTRING (1477770.406465607928112 6892066.840511322021484,1477790.178201811853796 6892050.76009990926832)",583,footway,0,1,0,minorroads,10,1
+"LINESTRING (1477118.508343119407073 6891093.428076104260981,1477088.584814094239846 6891117.76808157004416)",613,footway,0,1,0,minorroads,10,1
+"LINESTRING (1478304.32731931633316 6891039.64428252261132,1478336.73281239438802 6891063.202428812161088,1478362.868080493994057 6891085.381176148541272,1478384.421978857368231 6891108.402995181269944,1478394.816369665553793 6891123.469907105900347)",23,motorway_link,0,1,1,motorways,13,1
+"LINESTRING (1478416.715503631858155 6890979.362105399370193,1478402.775449885288253 6891019.994664833880961,1478396.486563521204516 6891050.220149672590196)",29,motorway_link,0,1,1,motorways,13,1
+"LINESTRING (1478444.334351749392226 6890965.598274794407189,1478436.291295301867649 6890993.279232017695904,1478432.251105696661398 6891019.442882195115089,1478432.932246207259595 6891054.266572091728449)",30,motorway_link,0,1,1,motorways,13,1
+"LINESTRING (1477430.918570373440161 6890653.711285330355167,1477490.821612572530285 6890732.214502855204046)",34,motorway_link,0,1,1,motorways,13,1
+"LINESTRING (1478402.159624219173566 6891432.263520221225917,1478419.636010205605999 6891465.801433998160064,1478516.63788352557458 6891599.647920207120478,1478542.959765463601798 6891648.515012176707387)",55,motorway_link,0,1,1,motorways,13,1
+"LINESTRING (1478395.805423010606319 6891558.521924624219537,1478375.240577995311469 6891530.716394937597215,1478359.005174034042284 6891515.434124372899532,1478339.886586264939979 6891502.06790954247117,1478316.951745497528464 6891488.686388740316033,1478294.97796599916182 6891479.136932187713683,1478269.187933499692008 6891469.572158829309046)",58,motorway_link,0,1,1,motorways,13,1
+"LINESTRING (1478350.271646386012435 6891029.512921379879117,1478380.699032773729414 6890977.676111518405378)",60,motorway_link,0,1,1,motorways,13,1
+"LINESTRING (1479445.853500913595781 6890008.594684292562306,1479466.810234990902245 6889974.786993312649429,1479481.711350003723055 6889943.24758021812886,1479491.517907224595547 6889916.918854899704456,1479498.478603403549641 6889887.111409046687186)",172,residential,0,1,0,minorroads,13,1
+"LINESTRING (1478553.951320560649037 6891315.418398878537118,1478598.850610133260489 6891319.848151468671858)",317,unclassified,0,1,0,minorroads,13,1
+"LINESTRING (1477416.483989951433614 6890762.960017169825733,1477397.141465578228235 6890736.030863894149661,1477367.992383987177163 6890698.603015801869333)",135,tertiary,0,1,0,mainroads,14,1
+"LINESTRING (1478177.205972440075129 6891489.069593496620655,1478177.317940743407235 6891468.652469684369862,1478178.577584154205397 6891445.077807144261897,1478182.907025211025029 6891420.261640835553408,1478186.732608902268112 6891397.361552857793868,1478191.472600403940305 6891373.802427344955504)",92,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1478695.637877542292699 6892227.661724239587784,1478544.135432646842673 6892221.683182909153402)",97,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1478527.237549557816237 6892200.804311908781528,1478681.837784175062552 6892208.622385010123253,1478687.930726005230099 6892209.189578847959638)",102,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1479238.124306440819055 6892256.75735551957041,1479220.367999695939943 6892255.622961183078587)",107,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1479396.176897070370615 6890481.549454870633781,1479348.459738528588787 6890459.663571572862566,1479285.906779821496457 6890425.80800533015281)",109,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1479215.245449822163209 6892238.729702232405543,1479233.776204001158476 6892239.772116457112134)",110,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1479297.47683781851083 6890409.209787493571639,1479361.448061698814854 6890444.184096252545714,1479405.974123598309234 6890464.384051165543497)",112,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1478329.772116212407127 6891020.117283202707767,1478371.433655687142164 6890928.767115697264671)",120,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1478451.155087549006566 6890967.130994181148708,1478439.454399868380278 6891002.920075045898557,1478435.899406239856035 6891020.515792922116816,1478432.932246207259595 6891054.266572091728449,1478436.51523190876469 6891092.385810512118042)",125,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1478484.279043906368315 6892448.686919055879116,1478512.980252289446071 6892501.529672888107598)",138,secondary,0,1,1,mainroads,15,1
+"LINESTRING (1478441.24589272052981 6890743.985453568398952,1478569.785504766972736 6890803.361579650081694)",698,rail,0,1,0,railways,17,1
+"LINESTRING (1478556.414623227668926 6890825.447648616507649,1478501.363540833583102 6890799.943685433827341,1478430.310321775265038 6890777.137325343675911)",699,rail,0,1,0,railways,17,1
+"LINESTRING (1478627.402527447091416 6890858.032757756300271,1478598.449390378547832 6890845.709869343787432)",701,rail,0,1,0,railways,17,1
+"LINESTRING (1478595.75282041169703 6890816.082902735099196,1478625.956270195310935 6890829.907785100862384)",702,rail,0,1,0,railways,17,1
+"LINESTRING (1477861.231420873198658 6890651.795460822060704,1477785.139628168661147 6890619.962187672965229)",706,rail,0,1,0,railways,17,1
+"LINESTRING (1478533.153208245523274 6890597.539500389248133,1478563.608586709247902 6890651.657521475106478,1478583.986817886354402 6890702.90981500223279,1478598.971909126965329 6890754.806160444393754)",707,rail,0,1,0,railways,17,1
+"LINESTRING (1478551.954552487237379 6890575.162854988127947,1478588.605510394554585 6890603.547487018629909,1478617.885221674805507 6890622.138555723242462,1478642.714192904997617 6890636.468881220556796,1478662.672542944317684 6890646.814319248311222)",711,rail,0,1,0,railways,17,1
+"LINESTRING (1478591.227434826781973 6890756.093610955402255,1478577.12875931779854 6890705.745253457687795,1478556.750528137898073 6890657.573588914237916,1478526.565739739919081 6890602.627896940335631)",712,rail,0,1,0,railways,17,1
+"LINESTRING (1478593.50412365840748 6891161.252267209812999,1478604.868906431598589 6891027.229151873849332)",716,rail,0,1,0,railways,17,1
+"LINESTRING (1478861.276320709846914 6890948.416510410606861,1478927.88813040801324 6890978.978924939408898)",717,rail,0,1,0,railways,17,1
+"LINESTRING (1478445.080807101679966 6890735.663021787069738,1478572.827310339780524 6890796.249909016303718)",721,rail,0,1,0,railways,17,1
+"LINESTRING (1478725.31880857469514 6891220.416887637227774,1478753.684112047543749 6891165.635952131822705,1478782.273352124495432 6891113.062545800581574)",722,light_rail,0,1,0,railways,17,1
+"LINESTRING (1478565.344095406820998 6890811.423524235375226,1478438.502669292036444 6890750.315412051975727)",725,rail,0,1,0,railways,17,1
+"LINESTRING (1478761.083350750152022 6891124.619469199329615,1478714.065994105068967 6891217.213403515517712)",726,rail,0,1,0,railways,17,1
+"LINESTRING (1478594.185264169238508 6890806.013130874373019,1478624.789933702209964 6890819.929957416839898)",729,rail,0,1,0,railways,17,1
+"LINESTRING (1478611.950901604257524 6891032.133892551995814,1478602.097690927330405 6891164.808263186365366)",732,rail,0,1,0,railways,17,1
+"LINESTRING (1478625.368436602409929 6890839.900952127762139,1478595.276955124922097 6890826.290629548951983)",733,rail,0,1,0,railways,17,1
+"LINESTRING (1478918.445470173377544 6890994.888592929579318,1478850.574017061386257 6890963.099942809902132)",738,rail,0,1,0,railways,17,1
+"LINESTRING (1478922.187077639857307 6890988.451151218265295,1478855.416646176483482 6890957.168323368765414)",740,rail,0,1,0,railways,17,1
+"LINESTRING (1478363.717173459939659 6890762.914036750793457,1478343.516225425293669 6890759.5421401290223)",744,rail,0,1,0,railways,17,1
+"LINESTRING (1478866.398870577802882 6890942.408266056329012,1478932.544145682128146 6890972.940003331750631)",745,rail,0,1,0,railways,17,1
+"LINESTRING (1477526.68879235861823 6890495.281804216094315,1477556.565667921910062 6890511.175188716500998)",748,rail,0,1,0,railways,17,1
+"LINESTRING (1477551.331149747828022 6890517.719532645307481,1477521.612895943690091 6890502.255271850153804)",752,rail,0,1,0,railways,17,1
+"LINESTRING (1478803.090125825256109 6891124.665451684966683,1478749.074750232277438 6891229.766776816919446)",771,light_rail,0,1,0,railways,17,1
+"LINESTRING (1478455.288584077497944 6890709.31637466698885,1478485.305420020362362 6890732.873553024604917,1478551.777269339188933 6890776.279022733680904)",812,rail,0,1,0,railways,17,1
+"LINESTRING (1478463.210341525729746 6890697.438187943771482,1478515.826113325776532 6890741.441210155375302,1478545.09649391612038 6890764.354756650514901,1478578.658992794342339 6890784.938687206245959)",813,rail,0,1,0,railways,17,1
+"LINESTRING (1478448.113281978992745 6890727.11069754883647,1478488.795098801376298 6890745.211595254950225,1478551.777269339188933 6890776.279022733680904,1478576.662224721163511 6890790.042529220692813)",815,rail,0,1,0,railways,17,1
+"LINESTRING (1478448.794422489590943 6890719.355371965095401,1478488.795098801376298 6890745.211595254950225)",817,rail,0,1,0,railways,17,1
+"LINESTRING (1478453.133194239344448 6890714.128961123526096,1478485.305420020362362 6890732.873553024604917)",818,rail,0,1,0,railways,17,1
+"LINESTRING (1478592.291133706457913 6890793.812937114387751,1478624.575327788246796 6890811.791369803249836)",820,rail,0,1,0,railways,17,1
+"LINESTRING (1478592.869636606657878 6890797.951191720552742,1478624.575327788246796 6890812.481080299243331)",822,rail,0,1,0,railways,17,1
+"LINESTRING (1478872.753071786370128 6890934.054974609985948,1478938.59976474638097 6890964.157518833875656)",826,rail,0,1,0,railways,17,1
+"LINESTRING (1478708.467578947311267 6891213.902627007104456,1478755.951470183674246 6891121.998467871919274)",830,rail,0,1,0,railways,17,1
+"LINESTRING (1478556.050726244226098 6890567.974754032678902,1478593.896012717625126 6890597.156338127329946,1478621.766789517831057 6890615.134331055916846,1478643.236711653415114 6890627.472192604094744,1478666.591433558845893 6890639.610827658325434)",852,rail,0,1,0,railways,17,1
+"LINESTRING (1477451.250148088904098 6890745.763359077274799,1477398.289140685694292 6890680.900715908035636)",24,motorway,0,1,1,motorways,19,1
+"LINESTRING (1478390.850825597764924 6891440.249455007724464,1478416.4169214903377 6891479.535464659333229,1478439.883611699100584 6891511.923958003520966,1478473.362134346971288 6891559.089072591625154,1478503.668221738422289 6891600.536967532709241,1478542.959765463601798 6891648.515012176707387,1478591.927236720221117 6891731.335294630378485,1478610.709919579094276 6891779.927269681356847,1478623.922179353423417 6891826.787379971705377,1478630.015121186384931 6891858.76339219789952)", [...]
+"LINESTRING (1478354.07856869418174 6891040.180739216506481,1478380.699032773729414 6890977.676111518405378,1478394.163221230730414 6890950.225115459412336)",26,motorway,0,1,1,motorways,19,1
+"LINESTRING (1478415.84774928027764 6890956.907761368900537,1478376.7148273200728 6891043.997246447019279)",27,motorway,0,1,1,motorways,19,1
+"LINESTRING (1477414.468560495181009 6890666.92282354272902,1477470.023500254843384 6890738.375857715494931)",33,motorway,0,1,1,motorways,19,1
+"LINESTRING (1478336.770135160302743 6891278.29440912604332,1478342.517841390101239 6891313.25717099942267,1478349.375899961218238 6891340.387520620599389,1478357.829506850801408 6891368.391655500978231)",52,motorway,0,1,1,motorways,19,1
+"LINESTRING (1478336.760804470162839 6891379.550418416969478,1478326.310429504606873 6891342.334165048785508,1478318.892529421718791 6891313.10389244556427,1478313.583365709986538 6891281.068739344365895)",54,motorway,0,1,1,motorways,19,1
+"LINESTRING (1478396.617193207610399 6891531.804702173918486,1478382.845091919181868 6891499.554082627408206,1478361.561783624347299 6891449.124428308568895)",56,motorway,0,1,1,motorways,19,1
diff --git a/benchmark/data/roads.xml b/benchmark/data/roads.xml
new file mode 100644
index 0000000..bc0ad52
--- /dev/null
+++ b/benchmark/data/roads.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map
+  srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"
+  font-directory="../../fonts/dejavu-fonts-ttf-2.34/ttf/DejaVuSans.ttf"
+  background-color="#dfd8c9">
+
+<Style name="marking" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways')</Filter>
+    <LineSymbolizer stroke="#ffffff" stroke-width="1.8" stroke-dasharray="5, 5" clip="false" />
+  </Rule>
+</Style>
+<Style name="fill" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'minorroads')</Filter>
+    <LineSymbolizer stroke-width="2.5" stroke="#ffffff" stroke-linecap="round" clip="false" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'mainroads')</Filter>
+    <LineSymbolizer stroke-width="4" stroke="#ff9999" stroke-linecap="round" clip="false" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'motorways')</Filter>
+    <LineSymbolizer stroke-width="6" stroke="#ff6666" stroke-linecap="round" clip="false" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'railways')</Filter>
+    <LineSymbolizer stroke-width="3" stroke="#333333" stroke-linecap="round" clip="false" />
+  </Rule>
+</Style>
+<Style name="bridge" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
+    <LineSymbolizer stroke-width="6" stroke="#ffffff" clip="false" />
+  </Rule>
+</Style>
+<Style name="casing" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
+    <LineSymbolizer stroke-width="8" stroke="#333333" clip="false" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'minorroads')</Filter>
+    <LineSymbolizer stroke-width="3" stroke="#a69269" clip="false" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'mainroads')</Filter>
+    <LineSymbolizer stroke-width="5" stroke="#ff0000" clip="false" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'motorways')</Filter>
+    <LineSymbolizer stroke-width="8" stroke="#990000" clip="false" />
+  </Rule>
+</Style>
+<Style name="labels">
+  <Rule>
+    <TextSymbolizer
+       halo-rasterizer="fast"
+       placement="line"
+       face-name="DejaVu Sans Book"
+       halo-radius="2"
+       allow-overlap="false"
+       clip="false"
+       >[type]</TextSymbolizer>
+  </Rule>
+</Style>
+<Layer name="layer"
+  srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+<!--
+    <StyleName>casing</StyleName>
+    <StyleName>bridge</StyleName>
+    <StyleName>fill</StyleName>
+    <StyleName>marking</StyleName>
+-->
+    <StyleName>labels</StyleName>
+    <Datasource>
+       <!--
+	 ogr2ogr -f CSV tests/visual_tests/data/roads.csv -lco GEOMETRY=AS_WKT tests/visual_tests/data/grouped-rendering.sqlite roads -sql "SELECT fid,geometry, type, tunnel, bridge, oneway, class, z_order, CAST((z_order / 10.0) AS INTEGER) AS z FROM roads ORDER BY z_order"
+	-->
+       <Parameter name="file">./roads.csv</Parameter>
+       <Parameter name="extent">1477001.12245,6890242.37746,1480004.49012,6892244.62256</Parameter>
+       <Parameter name="type">csv</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
diff --git a/benchmark/run b/benchmark/run
new file mode 100755
index 0000000..901c276
--- /dev/null
+++ b/benchmark/run
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+cd "$( dirname "${BASH_SOURCE[0]}" )"
+cd ../
+source ./localize.sh
+
+BASE=./benchmark/out
+function run {
+    ${BASE}/$1 --threads 0 --iterations $3;
+    ${BASE}/$1 --threads $2 --iterations $(expr $3 / $2);
+}
+
+#run test_array_allocation 20 100000
+#run test_png_encoding1 10 1000
+#run test_png_encoding2 10 50
+#run test_to_string1 10 100000
+#run test_to_string2 10 100000
+#run test_polygon_clipping 10 1000
+#run test_polygon_clipping_rendering 10 100
+run test_proj_transform1 10 100
+run test_expression_parse 10 10000
+run test_face_ptr_creation 10 10000
+run test_font_registration 10 1000
+
+./benchmark/out/test_rendering \
+  --name "text rendering" \
+  --map benchmark/data/roads.xml \
+  --extent 1477001.12245,6890242.37746,1480004.49012,6892244.62256 \
+  --width 600 \
+  --height 600 \
+  --iterations 20 \
+  --threads 10
\ No newline at end of file
diff --git a/benchmark/run.cpp b/benchmark/run.cpp
deleted file mode 100644
index 251bf71..0000000
--- a/benchmark/run.cpp
+++ /dev/null
@@ -1,916 +0,0 @@
-#include <mapnik/graphics.hpp>
-#include <mapnik/image_data.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/image_reader.hpp>
-#include <mapnik/util/conversions.hpp>
-
-
-// stl
-#include <string>
-#include <iostream>
-#include <fstream>
-#include <sstream>
-#include <cstdio>
-#include <set>
-#include <stdexcept>
-
-
-// boost
-#include <boost/version.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/bind.hpp>
-
-#define BOOST_CHRONO_HEADER_ONLY
-#include <boost/chrono/process_cpu_clocks.hpp>
-#include <boost/chrono.hpp>
-#include <boost/thread/thread.hpp>
-
-using namespace boost::chrono;
-using namespace mapnik;
-
-static unsigned test_num = 1;
-static bool dry_run = false;
-static std::set<int> test_set;
-
-typedef process_cpu_clock clock_type;
-typedef clock_type::duration dur;
-
-template <typename T>
-void benchmark(T & test_runner, std::string const& name)
-{
-    try {
-        bool should_run_test = true;
-        if (!test_set.empty())
-        {
-            should_run_test = test_set.find(test_num) != test_set.end();
-        }
-        if (should_run_test || dry_run)
-        {
-            if (!test_runner.validate())
-            {
-                std::clog << "test did not validate: " << name << "\n";
-                //throw std::runtime_error(std::string("test did not validate: ") + name);
-            }
-            if (dry_run)
-            {
-                std::clog << test_num << ") " << (test_runner.threads_ ? "threaded -> ": "")
-                    << name << "\n";
-            }
-            else
-            {
-                process_cpu_clock::time_point start;
-                dur elapsed;
-                if (test_runner.threads_ > 0)
-                {
-                    boost::thread_group tg;
-                    for (unsigned i=0;i<test_runner.threads_;++i)
-                    {
-                        tg.create_thread(test_runner);
-                        //tg.create_thread(boost::bind(&T::operator(),&test_runner));
-                    }
-                    start = process_cpu_clock::now();
-                    tg.join_all();
-                    elapsed = process_cpu_clock::now() - start;
-                }
-                else
-                {
-                    start = process_cpu_clock::now();
-                    test_runner();
-                    elapsed = process_cpu_clock::now() - start;
-                }
-                std::clog << test_num << ") " << (test_runner.threads_ ? "threaded -> ": "")
-                    << name << ": "
-                    << boost::chrono::duration_cast<milliseconds>(elapsed) << "\n";
-            }
-        }
-    }
-    catch (std::exception const& ex)
-    {
-        std::clog << "test runner did not complete: " << ex.what() << "\n";
-    }
-    test_num++;
-}
-
-bool compare_images(std::string const& src_fn,std::string const& dest_fn)
-{
-    std::auto_ptr<mapnik::image_reader> reader1(mapnik::get_image_reader(dest_fn,"png"));
-    if (!reader1.get())
-    {
-        throw mapnik::image_reader_exception("Failed to load: " + dest_fn);
-    }
-    boost::shared_ptr<image_32> image_ptr1 = boost::make_shared<image_32>(reader1->width(),reader1->height());
-    reader1->read(0,0,image_ptr1->data());
-
-    std::auto_ptr<mapnik::image_reader> reader2(mapnik::get_image_reader(src_fn,"png"));
-    if (!reader2.get())
-    {
-        throw mapnik::image_reader_exception("Failed to load: " + src_fn);
-    }
-    boost::shared_ptr<image_32> image_ptr2 = boost::make_shared<image_32>(reader2->width(),reader2->height());
-    reader2->read(0,0,image_ptr2->data());
-
-    image_data_32 const& dest = image_ptr1->data();
-    image_data_32 const& src = image_ptr2->data();
-
-    unsigned int width = src.width();
-    unsigned int height = src.height();
-    if ((width != dest.width()) || height != dest.height()) return false;
-    for (unsigned int y = 0; y < height; ++y)
-    {
-        const unsigned int* row_from = src.getRow(y);
-        const unsigned int* row_to = dest.getRow(y);
-        for (unsigned int x = 0; x < width; ++x)
-        {
-           if (row_from[x] != row_to[x]) return false;
-        }
-    }
-    return true;
-}
-
-struct test1
-{
-    unsigned iter_;
-    unsigned threads_;
-    explicit test1(unsigned iterations, unsigned threads=0) :
-      iter_(iterations),
-      threads_(threads)
-      {}
-
-    bool validate()
-    {
-        return true;
-    }
-
-    void operator()()
-    {
-        mapnik::image_data_32 im(256,256);
-        std::string out;
-        for (unsigned i=0;i<iter_;++i) {
-            out.clear();
-            out = mapnik::save_to_string(im,"png");
-        }
-    }
-};
-
-struct test2
-{
-    unsigned iter_;
-    unsigned threads_;
-    boost::shared_ptr<image_32> im_;
-    explicit test2(unsigned iterations, unsigned threads=0) :
-      iter_(iterations),
-      threads_(threads),
-      im_()
-    {
-        std::string filename("./benchmark/data/multicolor.png");
-        std::auto_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(filename,"png"));
-        if (!reader.get())
-        {
-            throw mapnik::image_reader_exception("Failed to load: " + filename);
-        }
-        im_ = boost::make_shared<image_32>(reader->width(),reader->height());
-        reader->read(0,0,im_->data());
-    }
-
-    bool validate()
-    {
-        std::string expected("./benchmark/data/multicolor-hextree-expected.png");
-        std::string actual("./benchmark/data/multicolor-hextree-actual.png");
-        mapnik::save_to_file(im_->data(),actual, "png8:m=h");
-        return compare_images(actual,expected);
-    }
-
-    void operator()()
-    {
-        std::string out;
-        for (unsigned i=0;i<iter_;++i) {
-            out.clear();
-            out = mapnik::save_to_string(im_->data(),"png8:m=h");
-        }
-    }
-};
-
-
-struct test3
-{
-    unsigned iter_;
-    unsigned threads_;
-    double val_;
-    explicit test3(unsigned iterations, unsigned threads=0) :
-      iter_(iterations),
-      threads_(threads),
-      val_(-0.123) {}
-    bool validate()
-    {
-        std::ostringstream s;
-        s << val_;
-        return (s.str() == "-0.123");
-    }
-    void operator()()
-    {
-        std::string out;
-        for (unsigned i=0;i<iter_;++i) {
-            std::ostringstream s;
-            s << val_;
-            out = s.str();
-        }
-    }
-};
-
-struct test4
-{
-    unsigned iter_;
-    unsigned threads_;
-    double val_;
-    explicit test4(unsigned iterations, unsigned threads=0) :
-      iter_(iterations),
-      threads_(threads),
-      val_(-0.123) {}
-
-    bool validate()
-    {
-        std::string s;
-        mapnik::util::to_string(s,val_);
-        return (s == "-0.123");
-    }
-    void operator()()
-    {
-        std::string out;
-        for (unsigned i=0;i<iter_;++i) {
-            out.clear();
-            mapnik::util::to_string(out,val_);
-        }
-    }
-};
-
-
-struct test5
-{
-    unsigned iter_;
-    unsigned threads_;
-    double val_;
-    explicit test5(unsigned iterations, unsigned threads=0) :
-      iter_(iterations),
-      threads_(threads),
-      val_(-0.123) {}
-
-    bool validate()
-    {
-        std::string s;
-        to_string_impl(s,val_);
-        return (s == "-0.123");
-    }
-    bool to_string_impl(std::string &s , double val)
-    {
-        s.resize(s.capacity());
-        while (true)
-        {
-            size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%g", val_));
-            if (n2 <= s.size())
-            {
-                s.resize(n2);
-                break;
-            }
-            s.resize(n2);
-        }
-        return true;
-    }
-    void operator()()
-    {
-        std::string out;
-        for (unsigned i=0;i<iter_;++i)
-        {
-            out.clear();
-            to_string_impl(out , val_);
-        }
-    }
-};
-
-
-#include <mapnik/box2d.hpp>
-#include <mapnik/projection.hpp>
-#include <mapnik/proj_transform.hpp>
-
-struct test6
-{
-    unsigned iter_;
-    unsigned threads_;
-    std::string src_;
-    std::string dest_;
-    mapnik::box2d<double> from_;
-    mapnik::box2d<double> to_;
-    bool defer_proj4_init_;
-    explicit test6(unsigned iterations,
-                   unsigned threads,
-                   std::string const& src,
-                   std::string const& dest,
-                   mapnik::box2d<double> from,
-                   mapnik::box2d<double> to,
-                   bool defer_proj) :
-      iter_(iterations),
-      threads_(threads),
-      src_(src),
-      dest_(dest),
-      from_(from),
-      to_(to),
-      defer_proj4_init_(defer_proj) {}
-
-    bool validate()
-    {
-        mapnik::projection src(src_,defer_proj4_init_);
-        mapnik::projection dest(dest_,defer_proj4_init_);
-        mapnik::proj_transform tr(src,dest);
-        mapnik::box2d<double> bbox = from_;
-        if (!tr.forward(bbox)) return false;
-        return ((std::fabs(bbox.minx() - to_.minx()) < .5) &&
-                (std::fabs(bbox.maxx() - to_.maxx()) < .5) &&
-                (std::fabs(bbox.miny() - to_.miny()) < .5) &&
-                (std::fabs(bbox.maxy() - to_.maxy()) < .5)
-               );
-    }
-    void operator()()
-    {
-        unsigned count=0;
-        for (int i=-180;i<180;++i)
-        {
-            for (int j=-85;j<85;++j)
-            {
-                mapnik::projection src(src_,defer_proj4_init_);
-                mapnik::projection dest(dest_,defer_proj4_init_);
-                mapnik::proj_transform tr(src,dest);
-                mapnik::box2d<double> box(i,j,i,j);
-                if (!tr.forward(box)) throw std::runtime_error("could not transform coords");
-                ++count;
-            }
-        }
-    }
-};
-
-#include <mapnik/unicode.hpp>
-#include <mapnik/expression.hpp>
-#include <mapnik/expression_string.hpp>
-
-struct test7
-{
-    unsigned iter_;
-    unsigned threads_;
-    std::string expr_;
-    explicit test7(unsigned iterations,
-                   unsigned threads,
-                   std::string const& expr) :
-      iter_(iterations),
-      threads_(threads),
-      expr_(expr)
-      {}
-
-    bool validate()
-    {
-        mapnik::expression_ptr expr = mapnik::parse_expression(expr_,"utf-8");
-        return mapnik::to_expression_string(*expr) == expr_;
-    }
-    void operator()()
-    {
-         for (unsigned i=0;i<iter_;++i) {
-             mapnik::expression_ptr expr = mapnik::parse_expression(expr_,"utf-8");
-         }
-    }
-};
-
-#include <mapnik/expression_grammar.hpp>
-
-struct test8
-{
-    unsigned iter_;
-    unsigned threads_;
-    std::string expr_;
-    explicit test8(unsigned iterations,
-                   unsigned threads,
-                   std::string const& expr) :
-      iter_(iterations),
-      threads_(threads),
-      expr_(expr)
-      {}
-
-    bool validate()
-    {
-         transcoder tr("utf-8");
-         mapnik::expression_grammar<std::string::const_iterator> expr_grammar(tr);
-         mapnik::expression_ptr expr = mapnik::parse_expression(expr_,expr_grammar);
-         return mapnik::to_expression_string(*expr) == expr_;
-    }
-    void operator()()
-    {
-         transcoder tr("utf-8");
-         mapnik::expression_grammar<std::string::const_iterator> expr_grammar(tr);
-         for (unsigned i=0;i<iter_;++i) {
-             mapnik::expression_ptr expr = mapnik::parse_expression(expr_,expr_grammar);
-         }
-    }
-};
-
-#include <mapnik/rule_cache.hpp>
-
-#if BOOST_VERSION >= 105300
-#include <boost/container/vector.hpp>
-#include <boost/move/utility.hpp>
-
-class rule_cache_move
-{
-private:
-    BOOST_MOVABLE_BUT_NOT_COPYABLE(rule_cache_move)
-public:
-    typedef std::vector<rule const*> rule_ptrs;
-    rule_cache_move()
-     : if_rules_(),
-       else_rules_(),
-       also_rules_() {}
-
-    rule_cache_move(BOOST_RV_REF(rule_cache_move) rhs) // move ctor
-        :  if_rules_(boost::move(rhs.if_rules_)),
-           else_rules_(boost::move(rhs.else_rules_)),
-           also_rules_(boost::move(rhs.also_rules_))
-    {}
-
-    rule_cache_move& operator=(BOOST_RV_REF(rule_cache_move) rhs) // move assign
-    {
-        std::swap(if_rules_, rhs.if_rules_);
-        std::swap(else_rules_,rhs.else_rules_);
-        std::swap(also_rules_, rhs.also_rules_);
-        return *this;
-   }
-
-    void add_rule(rule const& r)
-    {
-        if (r.has_else_filter())
-        {
-            else_rules_.push_back(&r);
-        }
-        else if (r.has_also_filter())
-        {
-            also_rules_.push_back(&r);
-        }
-        else
-        {
-            if_rules_.push_back(&r);
-        }
-    }
-
-    rule_ptrs const& get_if_rules() const
-    {
-        return if_rules_;
-    }
-
-    rule_ptrs const& get_else_rules() const
-    {
-        return else_rules_;
-    }
-
-    rule_ptrs const& get_also_rules() const
-    {
-        return also_rules_;
-    }
-
-private:
-    rule_ptrs if_rules_;
-    rule_ptrs else_rules_;
-    rule_ptrs also_rules_;
-};
-
-struct test9
-{
-    unsigned iter_;
-    unsigned threads_;
-    unsigned num_rules_;
-    unsigned num_styles_;
-    std::vector<rule> rules_;
-    explicit test9(unsigned iterations,
-                   unsigned threads,
-                   unsigned num_rules,
-                   unsigned num_styles) :
-      iter_(iterations),
-      threads_(threads),
-      num_rules_(num_rules),
-      num_styles_(num_styles),
-      rules_() {
-          mapnik::rule r("test");
-          for (unsigned i=0;i<num_rules_;++i) {
-              rules_.push_back(r);
-          }
-      }
-
-    bool validate()
-    {
-        return true;
-    }
-    void operator()()
-    {
-         for (unsigned i=0;i<iter_;++i) {
-             boost::container::vector<rule_cache_move> rule_caches;
-             for (unsigned i=0;i<num_styles_;++i) {
-                 rule_cache_move rc;
-                 for (unsigned i=0;i<num_rules_;++i) {
-                     rc.add_rule(rules_[i]);
-                 }
-                 rule_caches.push_back(boost::move(rc));
-             }
-         }
-    }
-};
-
-#endif
-
-class rule_cache_heap
-{
-public:
-    typedef std::vector<rule const*> rule_ptrs;
-    rule_cache_heap()
-     : if_rules_(),
-       else_rules_(),
-       also_rules_() {}
-
-    void add_rule(rule const& r)
-    {
-        if (r.has_else_filter())
-        {
-            else_rules_.push_back(&r);
-        }
-        else if (r.has_also_filter())
-        {
-            also_rules_.push_back(&r);
-        }
-        else
-        {
-            if_rules_.push_back(&r);
-        }
-    }
-
-    rule_ptrs const& get_if_rules() const
-    {
-        return if_rules_;
-    }
-
-    rule_ptrs const& get_else_rules() const
-    {
-        return else_rules_;
-    }
-
-    rule_ptrs const& get_also_rules() const
-    {
-        return also_rules_;
-    }
-
-private:
-    rule_ptrs if_rules_;
-    rule_ptrs else_rules_;
-    rule_ptrs also_rules_;
-};
-
-struct test10
-{
-    unsigned iter_;
-    unsigned threads_;
-    unsigned num_rules_;
-    unsigned num_styles_;
-    std::vector<rule> rules_;
-    explicit test10(unsigned iterations,
-                   unsigned threads,
-                   unsigned num_rules,
-                   unsigned num_styles) :
-      iter_(iterations),
-      threads_(threads),
-      num_rules_(num_rules),
-      num_styles_(num_styles),
-      rules_() {
-          mapnik::rule r("test");
-          for (unsigned i=0;i<num_rules_;++i) {
-              rules_.push_back(r);
-          }
-      }
-
-    bool validate()
-    {
-        return true;
-    }
-    void operator()()
-    {
-         for (unsigned i=0;i<iter_;++i) {
-             boost::ptr_vector<rule_cache_heap> rule_caches;
-             for (unsigned i=0;i<num_styles_;++i) {
-                 std::auto_ptr<rule_cache_heap> rc(new rule_cache_heap);
-                 for (unsigned i=0;i<num_rules_;++i) {
-                     rc->add_rule(rules_[i]);
-                 }
-                 rule_caches.push_back(rc);
-             }
-         }
-    }
-};
-
-
-#include <mapnik/wkt/wkt_factory.hpp>
-#include "agg_conv_clipper.h"
-#include "agg_path_storage.h"
-#include <mapnik/geometry.hpp>
-
-struct test11
-{
-    unsigned iter_;
-    unsigned threads_;
-    std::string wkt_in_;
-    mapnik::box2d<double> extent_;
-    typedef agg::conv_clipper<mapnik::geometry_type, agg::path_storage> poly_clipper;
-    test11(unsigned iterations,
-           unsigned threads,
-           std::string wkt_in,
-           mapnik::box2d<double> const& extent)
-        : iter_(iterations),
-          threads_(threads),
-          wkt_in_(wkt_in),
-          extent_(extent) {
-
-    }
-
-    bool validate()
-    {
-        return true;
-    }
-    void operator()()
-    {
-        boost::ptr_vector<geometry_type> paths;
-        if (!mapnik::from_wkt(wkt_in_, paths))
-        {
-            throw std::runtime_error("Failed to parse WKT");
-        }
-        agg::path_storage ps;
-        ps.move_to(extent_.minx(), extent_.miny());
-        ps.line_to(extent_.minx(), extent_.maxy());
-        ps.line_to(extent_.maxx(), extent_.maxy());
-        ps.line_to(extent_.maxx(), extent_.miny());
-        ps.close_polygon();
-        for (unsigned i=0;i<iter_;++i) {
-            BOOST_FOREACH( geometry_type & geom, paths)
-            {
-                poly_clipper clipped(geom,ps,
-                    agg::clipper_and,
-                    agg::clipper_non_zero,
-                    agg::clipper_non_zero,
-                    1);
-                clipped.rewind(0);
-                unsigned cmd;
-                double x,y;
-                while ((cmd = geom.vertex(&x, &y)) != SEG_END) {}
-            }
-        }
-    }
-};
-
-#include <mapnik/polygon_clipper.hpp>
-
-struct test12
-{
-    unsigned iter_;
-    unsigned threads_;
-    std::string wkt_in_;
-
-    mapnik::box2d<double> extent_;
-    typedef mapnik::polygon_clipper<mapnik::geometry_type> poly_clipper;
-    test12(unsigned iterations,
-           unsigned threads,
-           std::string wkt_in,
-           mapnik::box2d<double> const& extent)
-        : iter_(iterations),
-          threads_(threads),
-          wkt_in_(wkt_in),
-          extent_(extent)
-    {
-    }
-
-    bool validate()
-    {
-        return true;
-    }
-    void operator()()
-    {
-        boost::ptr_vector<geometry_type> paths;
-        if (!mapnik::from_wkt(wkt_in_, paths))
-        {
-            throw std::runtime_error("Failed to parse WKT");
-        }
-        for (unsigned i=0;i<iter_;++i)
-        {
-            BOOST_FOREACH( geometry_type & geom, paths)
-            {
-                poly_clipper clipped(extent_, geom);
-                unsigned cmd;
-                double x,y;
-                while ((cmd = geom.vertex(&x, &y)) != SEG_END) {}
-            }
-        }
-    }
-};
-
-#include <mapnik/font_engine_freetype.hpp>
-#include <boost/format.hpp>
-struct test13
-{
-    unsigned iter_;
-    unsigned threads_;
-
-    test13(unsigned iterations,
-           unsigned threads)
-        : iter_(iterations),
-          threads_(threads)
-    {}
-
-    bool validate()
-    {
-        return true;
-    }
-
-    void operator()()
-    {
-        mapnik::freetype_engine engine;
-        unsigned long count = 0;
-        for (unsigned i=0;i<iter_;++i)
-        {
-            BOOST_FOREACH( std::string const& name, mapnik::freetype_engine::face_names())
-            {
-                mapnik::face_ptr f = engine.create_face(name);
-                if (f) ++count;
-            }
-        }
-    }
-};
-
-int main( int argc, char** argv)
-{
-    if (argc > 0) {
-        for (int i=0;i<argc;++i) {
-            std::string opt(argv[i]);
-            if (opt == "-d" || opt == "--dry-run") {
-                dry_run = true;
-            } else if (opt[0] != '-') {
-                int arg;
-                if (mapnik::util::string2int(opt,arg)) {
-                    test_set.insert(arg);
-                }
-            }
-        }
-    }
-    try
-    {
-        std::cout << "starting benchmark…\n";
-
-        {
-            test1 runner(100);
-            benchmark(runner,"encoding blank image as png");
-        }
-
-        {
-            test2 runner(100);
-            benchmark(runner,"encoding multicolor image as png8:m=h");
-        }
-
-        {
-            test1 runner(10,10);
-            benchmark(runner,"encoding blank image as png");
-        }
-
-        {
-            test2 runner(10,10);
-            benchmark(runner,"encoding multicolor image as png8:m=h");
-        }
-
-        {
-            test3 runner(1000000);
-            benchmark(runner,"double to string conversion with std::ostringstream");
-        }
-
-        {
-            test4 runner(1000000);
-            benchmark(runner,"double to string conversion with mapnik::util_to_string");
-        }
-
-        {
-            test5 runner(1000000);
-            benchmark(runner,"double to string conversion with snprintf");
-        }
-
-        {
-            test3 runner(1000000,10);
-            benchmark(runner,"double to string conversion with std::ostringstream");
-        }
-
-        {
-            test4 runner(1000000,10);
-            benchmark(runner,"double to string conversion with mapnik::util_to_string");
-        }
-
-        {
-            test5 runner(1000000,10);
-            benchmark(runner,"double to string conversion with snprintf");
-        }
-
-        mapnik::box2d<double> from(-180,-80,180,80);
-        mapnik::box2d<double> to(-20037508.3427892476,-15538711.0963092316,20037508.3427892476,15538711.0963092316);
-
-        {
-            // echo -180 -60 | cs2cs -f "%.10f" +init=epsg:4326 +to +init=epsg:3857
-            test6 runner(100000000,100,
-                         "+init=epsg:4326",
-                         "+init=epsg:3857",
-                         from,to,true);
-            benchmark(runner,"lonlat -> merc coord transformation (epsg)");
-        }
-
-        {
-            test6 runner(100000000,100,
-                         "+init=epsg:3857",
-                         "+init=epsg:4326",
-                         to,from,true);
-            benchmark(runner,"merc -> lonlat coord transformation (epsg)");
-        }
-
-        {
-            test6 runner(100000000,100,
-                         "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs",
-                         "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
-                         from,to,true);
-            benchmark(runner,"lonlat -> merc coord transformation (literal)");
-        }
-
-        {
-            test6 runner(100000000,100,
-                         "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
-                         "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs",
-                         to,from,true);
-            benchmark(runner,"merc -> lonlat coord transformation (literal)");
-        }
-
-        {
-            test7 runner(10000,100,"([foo]=1)");
-            benchmark(runner,"expression parsing with grammer per parse");
-        }
-
-        {
-            test8 runner(10000,100,"([foo]=1)");
-            benchmark(runner,"expression parsing by re-using grammar");
-        }
-
-        {
-#if BOOST_VERSION >= 105300
-            test9 runner(1000,10,200,50);
-            benchmark(runner,"rule caching using boost::move");
-#else
-            std::clog << "not running: 'rule caching using boost::move'\n";
-#endif
-        }
-
-        {
-            test10 runner(1000,10,200,50);
-            benchmark(runner,"rule caching using heap allocation");
-        }
-
-        {
-            std::string filename_("benchmark/data/polygon.wkt");
-            std::ifstream in(filename_.c_str(),std::ios_base::in | std::ios_base::binary);
-            if (!in.is_open())
-                throw std::runtime_error("could not open: '" + filename_ + "'");
-            std::string wkt_in( (std::istreambuf_iterator<char>(in) ),
-                       (std::istreambuf_iterator<char>()) );
-            mapnik::box2d<double> clipping_box(0,0,40,40);
-
-            test11 runner(100000,10,wkt_in,clipping_box);
-            benchmark(runner,"clipping polygon with agg_conv_clipper");
-        }
-
-        {
-
-            std::string filename_("benchmark/data/polygon.wkt");
-            std::ifstream in(filename_.c_str(),std::ios_base::in | std::ios_base::binary);
-            if (!in.is_open())
-                throw std::runtime_error("could not open: '" + filename_ + "'");
-            std::string wkt_in( (std::istreambuf_iterator<char>(in) ),
-                       (std::istreambuf_iterator<char>()) );
-            mapnik::box2d<double> clipping_box(0,0,40,40);
-
-            test12 runner(100000,10,wkt_in,clipping_box);
-            benchmark(runner,"clipping polygon with mapnik::polygon_clipper");
-        }
-
-        {
-            mapnik::freetype_engine::register_fonts("./fonts", true);
-            unsigned face_count = mapnik::freetype_engine::face_names().size();
-            test13 runner(1000,10);
-            benchmark(runner, (boost::format("font_engihe: created %ld faces in ") % (face_count * 1000 * 10)).str());
-        }
-        std::cout << "...benchmark done\n";
-        return 0;
-    }
-    catch (std::exception const& ex)
-    {
-        std::clog << "test error: " << ex.what() << "\n";
-        return -1;
-    }
-}
diff --git a/benchmark/template.cpp b/benchmark/template.cpp
new file mode 100644
index 0000000..a91ecb3
--- /dev/null
+++ b/benchmark/template.cpp
@@ -0,0 +1,17 @@
+#include "bench_framework.hpp"
+
+class test : public benchmark::test_case
+{
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params) {}
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+    }
+};
+
+BENCHMARK(test,"test name")
diff --git a/benchmark/test_array_allocation.cpp b/benchmark/test_array_allocation.cpp
new file mode 100644
index 0000000..e0e4fad
--- /dev/null
+++ b/benchmark/test_array_allocation.cpp
@@ -0,0 +1,375 @@
+#include "bench_framework.hpp"
+#include <cstring>
+#include <cstdlib>
+#include <stdexcept>
+#include <array>
+#include <valarray>
+#include <boost/version.hpp>
+#if BOOST_VERSION >= 105400
+#include <boost/container/static_vector.hpp>
+#endif
+
+// http://stackoverflow.com/questions/17347254/why-is-allocation-and-deallocation-of-stdvector-slower-than-dynamic-array-on-m
+
+#define FULL_ZERO_CHECK
+
+inline void ensure_zero(uint8_t * data, uint32_t size) {
+#ifdef FULL_ZERO_CHECK
+    for (std::size_t i=0;i<size;++i) {
+        if (data[i] != 0) {
+            throw std::runtime_error("found non zero value");
+        }
+    }
+#else
+    if (data[0] != 0) {
+        throw std::runtime_error("found non zero value");
+    }
+#endif
+}
+
+class test1 : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test1(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             // NOTE: sizeof(uint8_t) == 1
+             uint8_t *data = (uint8_t *)malloc(sizeof(uint8_t)*size_);
+             memcpy(data, &array_[0], size_);
+             ensure_zero(data,size_);
+             free(data);
+         }
+    }
+};
+
+class test1b : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test1b(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             // NOTE: sizeof(uint8_t) == 1
+             uint8_t *data = (uint8_t *)malloc(sizeof(uint8_t)*size_);
+             memset(data, 0, sizeof(uint8_t)*size_);
+             ensure_zero(data,size_);
+             free(data);
+         }
+    }
+};
+
+class test1c : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test1c(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             uint8_t *data = static_cast<uint8_t *>(::operator new(sizeof(uint8_t) * size_));
+             std::fill(data,data + size_,0);
+             ensure_zero(data,size_);
+             ::operator delete(data);
+         }
+    }
+};
+
+
+class test2 : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test2(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             uint8_t * data = static_cast<uint8_t*>(::operator new(sizeof(uint8_t)*size_));
+             memcpy(data, &array_[0], size_);
+             ensure_zero(data,size_);
+             ::operator delete(data),data=0;
+         }
+    }
+};
+
+class test3 : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test3(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             std::vector<uint8_t> data(size_);
+             ensure_zero(&data[0],data.size());
+         }
+    }
+};
+
+
+class test3b : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test3b(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             std::vector<uint8_t> data(0);
+             data.resize(size_,0);
+             ensure_zero(&data[0],data.size());
+         }
+    }
+};
+
+
+class test3c : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test3c(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             std::vector<uint8_t> data(0);
+             data.assign(size_,0);
+             ensure_zero(&data[0],data.size());
+         }
+    }
+};
+
+class test4 : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test4(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             uint8_t *data = (uint8_t *)calloc(size_,sizeof(uint8_t));
+             ensure_zero(data,size_);
+             free(data);
+         }
+    }
+};
+
+class test5 : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test5(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             std::string data(array_.begin(),array_.end());
+             ensure_zero((uint8_t *)&data[0],size_);
+         }
+    }
+};
+
+class test5b : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<char> array_;
+    test5b(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             std::string data(&array_[0],array_.size());
+             ensure_zero((uint8_t *)&data[0],size_);
+         }
+    }
+};
+
+// C++14 dynarray<T>
+// http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting
+// http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130909/088700.html
+// http://stackoverflow.com/questions/17303902/any-alternative-to-stddynarray-presently-available
+
+class test6 : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test6(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             std::valarray<uint8_t> data(static_cast<uint8_t>(0),static_cast<size_t>(size_));
+             ensure_zero(&data[0],size_);
+         }
+    }
+};
+
+#if BOOST_VERSION >= 105400
+// http://i42.co.uk/stuff/vecarray.htm
+// http://www.boost.org/doc/libs/1_54_0/doc/html/boost/container/static_vector.html
+
+class test7 : public benchmark::test_case
+{
+public:
+    uint32_t size_;
+    std::vector<uint8_t> array_;
+    test7(mapnik::parameters const& params)
+     : test_case(params),
+       size_(*params.get<mapnik::value_integer>("size",256*256)),
+       array_(size_,0) { }
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             boost::container::static_vector<uint8_t,256*256> data(size_,0);
+             ensure_zero(&data[0],size_);
+         }
+    }
+};
+#endif
+
+int main(int argc, char** argv)
+{
+    mapnik::parameters params;
+    benchmark::handle_args(argc,argv,params);
+    {
+        test4 test_runner4(params);
+        run(test_runner4,"calloc");
+    }
+    {
+        test1 test_runner(params);
+        run(test_runner,"malloc/memcpy");
+    }
+    {
+        test1b test_runner(params);
+        run(test_runner,"malloc/memset");
+    }
+    {
+        test1c test_runner(params);
+        run(test_runner,"operator new/std::fill");
+    }
+    {
+        test2 test_runner(params);
+        run(test_runner,"operator new/memcpy");
+    }
+    {
+        test3 test_runner(params);
+        run(test_runner,"vector(N)");
+    }
+    {
+        test3b test_runner(params);
+        run(test_runner,"vector/resize");
+    }
+    {
+        test3c test_runner(params);
+        run(test_runner,"vector/assign");
+    }
+    {
+        test5 test_runner(params);
+        run(test_runner,"std::string range");
+    }
+    {
+        test5b test_runner(params);
+        run(test_runner,"std::string &[0]");
+    }
+    {
+        test6 test_runner(params);
+        run(test_runner,"valarray");
+    }
+#if BOOST_VERSION >= 105400
+    {
+        test7 test_runner(params);
+        run(test_runner,"static_vector");
+    }
+#endif
+    return 0;
+}
diff --git a/benchmark/test_expression_parse.cpp b/benchmark/test_expression_parse.cpp
new file mode 100644
index 0000000..857dde6
--- /dev/null
+++ b/benchmark/test_expression_parse.cpp
@@ -0,0 +1,40 @@
+#include "bench_framework.hpp"
+#include <mapnik/unicode.hpp>
+#include <mapnik/expression.hpp>
+#include <mapnik/expression_string.hpp>
+#include <mapnik/expression_grammar.hpp>
+
+class test : public benchmark::test_case
+{
+    std::string expr_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       expr_("((([mapnik::geometry_type]=2) and ([oneway]=1)) and ([class]='path'))") {}
+    bool validate() const
+    {
+        mapnik::expression_ptr expr = mapnik::parse_expression(expr_);
+        std::string result = mapnik::to_expression_string(*expr);
+        bool ret = (result == expr_);
+        if (!ret)
+        {
+            std::clog << result  << " != " << expr_ << "\n";
+        }
+        return ret;
+    }
+    void operator()() const
+    {
+         for (std::size_t i=0;i<iterations_;++i) {
+             mapnik::expression_ptr expr = mapnik::parse_expression(expr_);
+         }
+    }
+};
+
+
+int main(int argc, char** argv)
+{
+    mapnik::parameters params;
+    benchmark::handle_args(argc,argv,params);
+    test test_runner(params);
+    run(test_runner,"expr parsing");
+}
diff --git a/benchmark/test_face_ptr_creation.cpp b/benchmark/test_face_ptr_creation.cpp
new file mode 100644
index 0000000..9e3aa95
--- /dev/null
+++ b/benchmark/test_face_ptr_creation.cpp
@@ -0,0 +1,68 @@
+#include "bench_framework.hpp"
+#include <mapnik/font_engine_freetype.hpp>
+#include <boost/format.hpp>
+
+class test : public benchmark::test_case
+{
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params) {}
+    bool validate() const
+    {
+        std::size_t count = 0;
+        std::size_t expected_count = mapnik::freetype_engine::face_names().size();
+        mapnik::freetype_engine::font_file_mapping_type font_file_mapping;
+        mapnik::freetype_engine::font_memory_cache_type font_cache;
+        mapnik::font_library library;
+        for (std::string const& name : mapnik::freetype_engine::face_names())
+        {
+            mapnik::face_ptr f = mapnik::freetype_engine::create_face(name,
+                                                                      library,
+                                                                      font_file_mapping,
+                                                                      font_cache,
+                                                                      mapnik::freetype_engine::get_mapping(),
+                                                                      mapnik::freetype_engine::get_cache());
+            if (f) ++count;
+        }
+        return count == expected_count;
+    }
+    void operator()() const
+    {
+        std::size_t expected_count = mapnik::freetype_engine::face_names().size();
+        for (unsigned i=0;i<iterations_;++i)
+        {
+            std::size_t count = 0;
+            mapnik::freetype_engine::font_file_mapping_type font_file_mapping;
+            mapnik::freetype_engine::font_memory_cache_type font_cache;
+            mapnik::font_library library;
+            for (std::string const& name : mapnik::freetype_engine::face_names())
+            {
+                mapnik::face_ptr f = mapnik::freetype_engine::create_face(name,
+                                                                          library,
+                                                                          font_file_mapping,
+                                                                          font_cache,
+                                                                          mapnik::freetype_engine::get_mapping(),
+                                                                          mapnik::freetype_engine::get_cache());
+                if (f) ++count;
+            }
+            if (count != expected_count) {
+                std::clog << "warning: face creation not working as expected\n";
+            }
+        }
+    }
+};
+
+int main(int argc, char** argv)
+{
+    mapnik::parameters params;
+    benchmark::handle_args(argc,argv,params);
+    bool success = mapnik::freetype_engine::register_fonts("./fonts", true);
+    if (!success) {
+       std::clog << "warning, did not register any new fonts!\n";
+       return -1;
+    } 
+    std::size_t face_count = mapnik::freetype_engine::face_names().size();
+    test test_runner(params);
+    return run(test_runner,(boost::format("font_engine: creating %ld faces") % (face_count)).str());
+}
+
diff --git a/benchmark/test_font_registration.cpp b/benchmark/test_font_registration.cpp
new file mode 100644
index 0000000..2c57ac3
--- /dev/null
+++ b/benchmark/test_font_registration.cpp
@@ -0,0 +1,26 @@
+#include "bench_framework.hpp"
+#include <mapnik/font_engine_freetype.hpp>
+#include <boost/format.hpp>
+#include <boost/foreach.hpp>
+
+class test : public benchmark::test_case
+{
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params) {}
+    bool validate() const
+    {
+        return mapnik::freetype_engine::register_fonts("./fonts", true);
+    }
+    void operator()() const
+    {
+        unsigned long count = 0;
+        for (unsigned i=0;i<iterations_;++i)
+        {
+            mapnik::freetype_engine::register_fonts("./fonts", true);
+            count++;
+        }
+    }
+};
+
+BENCHMARK(test,"font registration")
\ No newline at end of file
diff --git a/benchmark/test_png_encoding1.cpp b/benchmark/test_png_encoding1.cpp
new file mode 100644
index 0000000..f06a0ef
--- /dev/null
+++ b/benchmark/test_png_encoding1.cpp
@@ -0,0 +1,26 @@
+#include "bench_framework.hpp"
+#include <mapnik/image_util.hpp>
+#include <mapnik/graphics.hpp>
+
+class test : public benchmark::test_case
+{
+    mapnik::image_data_32 im_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       im_(256,256) {}
+    bool validate() const
+    {
+        return true;
+    }
+    void operator()() const
+    {
+        std::string out;
+        for (std::size_t i=0;i<iterations_;++i) {
+            out.clear();
+            out = mapnik::save_to_string(im_,"png8:m=h:z=1");
+        }
+    }
+};
+
+BENCHMARK(test,"encoding blank png")
diff --git a/benchmark/test_png_encoding2.cpp b/benchmark/test_png_encoding2.cpp
new file mode 100644
index 0000000..12b2f25
--- /dev/null
+++ b/benchmark/test_png_encoding2.cpp
@@ -0,0 +1,36 @@
+#include "bench_framework.hpp"
+#include "compare_images.hpp"
+
+class test : public benchmark::test_case
+{
+    std::shared_ptr<image_32> im_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params) {
+        std::string filename("./benchmark/data/multicolor.png");
+        std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(filename,"png"));
+        if (!reader.get())
+        {
+            throw mapnik::image_reader_exception("Failed to load: " + filename);
+        }
+        im_ = std::make_shared<image_32>(reader->width(),reader->height());
+        reader->read(0,0,im_->data());
+    }
+    bool validate() const
+    {
+        std::string expected("./benchmark/data/multicolor-hextree-expected.png");
+        std::string actual("./benchmark/data/multicolor-hextree-actual.png");
+        mapnik::save_to_file(im_->data(),actual, "png8:m=h:z=1");
+        return benchmark::compare_images(actual,expected);
+    }
+    void operator()() const
+    {
+        std::string out;
+        for (std::size_t i=0;i<iterations_;++i) {
+            out.clear();
+            out = mapnik::save_to_string(im_->data(),"png8:m=h:z=1");
+        }
+    }
+};
+
+BENCHMARK(test,"encoding multicolor png")
diff --git a/benchmark/test_polygon_clipping.cpp b/benchmark/test_polygon_clipping.cpp
new file mode 100644
index 0000000..e72a0aa
--- /dev/null
+++ b/benchmark/test_polygon_clipping.cpp
@@ -0,0 +1,320 @@
+#include "bench_framework.hpp"
+#include "compare_images.hpp"
+#include "agg_conv_clip_polygon.h"
+#include <mapnik/geometry.hpp>
+#include <mapnik/vertex.hpp>
+#include <mapnik/transform_path_adapter.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/graphics.hpp>
+#include <mapnik/wkt/wkt_factory.hpp>
+#include <mapnik/wkt/wkt_grammar_impl.hpp>
+#include <mapnik/geometry.hpp>
+#include <mapnik/projection.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/util/fs.hpp>
+#include <mapnik/polygon_clipper.hpp>
+#include <mapnik/image_util.hpp>
+// agg
+#include "agg_conv_clip_polygon.h"
+// clipper
+#include "agg_conv_clipper.h"
+#include "agg_path_storage.h"
+// rendering
+#include "agg_basics.h"
+#include "agg_rendering_buffer.h"
+#include "agg_pixfmt_rgba.h"
+#include "agg_rasterizer_scanline_aa.h"
+#include "agg_scanline_u.h"
+#include "agg_renderer_scanline.h"
+
+// stl
+#include <fstream>
+
+void render(mapnik::geometry_type & geom,
+            mapnik::box2d<double> const& extent,
+            std::string const& name)
+{
+    using path_type = mapnik::transform_path_adapter<mapnik::view_transform,mapnik::geometry_type>;
+    using ren_base = agg::renderer_base<agg::pixfmt_rgba32_plain>;
+    using renderer = agg::renderer_scanline_aa_solid<ren_base>;
+    mapnik::image_32 im(256,256);
+    im.set_background(mapnik::color("white"));
+    mapnik::box2d<double> padded_extent = extent;
+    padded_extent.pad(10);
+    mapnik::view_transform tr(im.width(),im.height(),padded_extent,0,0);
+    agg::rendering_buffer buf(im.raw_data(),im.width(),im.height(), im.width() * 4);
+    agg::pixfmt_rgba32_plain pixf(buf);
+    ren_base renb(pixf);
+    renderer ren(renb);
+    ren.color(agg::rgba8(127,127,127,255));
+    agg::rasterizer_scanline_aa<> ras;
+    mapnik::proj_transform prj_trans(mapnik::projection("+init=epsg:4326"),mapnik::projection("+init=epsg:4326"));
+    geom.rewind(0);
+    path_type path(tr,geom,prj_trans);
+    ras.add_path(path);
+    agg::scanline_u8 sl;
+    agg::render_scanlines(ras, sl, ren);
+    mapnik::save_to_file(im,name);
+    geom.rewind(0);
+}
+
+class test1 : public benchmark::test_case
+{
+    std::string wkt_in_;
+    mapnik::box2d<double> extent_;
+    std::string expected_;
+public:
+    using conv_clip = agg::conv_clip_polygon<mapnik::geometry_type>;
+    test1(mapnik::parameters const& params,
+          std::string const& wkt_in,
+          mapnik::box2d<double> const& extent)
+     : test_case(params),
+       wkt_in_(wkt_in),
+       extent_(extent),
+       expected_("./benchmark/data/polygon_clipping_agg") {}
+    bool validate() const
+    {
+        std::string expected_wkt("Polygon((181 286.666667,233 454,315 340,421 446,463 324,559 466,631 321.320755,631 234.386861,528 178,394 229,329 138,212 134,183 228,200 264,181 238.244444),(313 190,440 256,470 248,510 305,533 237,613 263,553 397,455 262,405 378,343 287,249 334,229 191,313 190,313 190))");
+        boost::ptr_vector<mapnik::geometry_type> paths;
+        if (!mapnik::from_wkt(wkt_in_, paths))
+        {
+            throw std::runtime_error("Failed to parse WKT");
+        }
+        if (paths.size() != 1)
+        {
+            std::clog << "paths.size() != 1\n";
+            return false;
+        }
+        mapnik::geometry_type & geom = paths[0];
+        conv_clip clipped(geom);
+        clipped.clip_box(
+                    extent_.minx(),
+                    extent_.miny(),
+                    extent_.maxx(),
+                    extent_.maxy());
+        unsigned cmd;
+        double x,y;
+        mapnik::geometry_type geom2(mapnik::geometry_type::types::Polygon);
+        while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {
+            geom2.push_vertex(x,y,(mapnik::CommandType)cmd);
+        }
+        std::string expect = expected_+".png";
+        std::string actual = expected_+"_actual.png";
+        if (!mapnik::util::exists(expect))
+        {
+            std::clog << "generating expected image: " << expect << "\n";
+            render(geom2,geom.envelope(),expect);
+        }
+        render(geom2,geom.envelope(),actual);
+        return benchmark::compare_images(actual,expect);
+    }
+    void operator()() const
+    {
+        boost::ptr_vector<mapnik::geometry_type> paths;
+        if (!mapnik::from_wkt(wkt_in_, paths))
+        {
+            throw std::runtime_error("Failed to parse WKT");
+        }
+        for (unsigned i=0;i<iterations_;++i)
+        {
+            for (mapnik::geometry_type & geom : paths)
+            {
+                conv_clip clipped(geom);
+                clipped.clip_box(
+                            extent_.minx(),
+                            extent_.miny(),
+                            extent_.maxx(),
+                            extent_.maxy());
+                unsigned cmd;
+                double x,y;
+                while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {}
+            }
+        }
+    }
+};
+
+class test2 : public benchmark::test_case
+{
+    std::string wkt_in_;
+    mapnik::box2d<double> extent_;
+    std::string expected_;
+public:
+    using poly_clipper = agg::conv_clipper<mapnik::geometry_type, agg::path_storage>;
+    test2(mapnik::parameters const& params,
+          std::string const& wkt_in,
+          mapnik::box2d<double> const& extent)
+     : test_case(params),
+       wkt_in_(wkt_in),
+       extent_(extent),
+       expected_("./benchmark/data/polygon_clipping_clipper") {}
+    bool validate() const
+    {
+        std::string expected_wkt("Polygon((212 134,329 138,394 229,528 178,631 234.4,631 321.3,559 466,463 324,421 446,315 340,233 454,181 286.7,181 238.2,200 264,183 228),(313 190,229 191,249 334,343 287,405 378,455 262,553 397,613 263,533 237,510 305,470 248,440 256))");
+        boost::ptr_vector<mapnik::geometry_type> paths;
+        if (!mapnik::from_wkt(wkt_in_, paths))
+        {
+            throw std::runtime_error("Failed to parse WKT");
+        }
+        agg::path_storage ps;
+        ps.move_to(extent_.minx(), extent_.miny());
+        ps.line_to(extent_.minx(), extent_.maxy());
+        ps.line_to(extent_.maxx(), extent_.maxy());
+        ps.line_to(extent_.maxx(), extent_.miny());
+        ps.close_polygon();
+        if (paths.size() != 1)
+        {
+            std::clog << "paths.size() != 1\n";
+            return false;
+        }
+        mapnik::geometry_type & geom = paths[0];
+        poly_clipper clipped(geom,ps,
+                             agg::clipper_and,
+                             agg::clipper_non_zero,
+                             agg::clipper_non_zero,
+                             1);
+        clipped.rewind(0);
+        unsigned cmd;
+        double x,y;
+        mapnik::geometry_type geom2(mapnik::geometry_type::types::Polygon);
+        while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {
+            geom2.push_vertex(x,y,(mapnik::CommandType)cmd);
+        }
+        std::string expect = expected_+".png";
+        std::string actual = expected_+"_actual.png";
+        if (!mapnik::util::exists(expect))
+        {
+            std::clog << "generating expected image: " << expect << "\n";
+            render(geom2,geom.envelope(),expect);
+        }
+        render(geom2,geom.envelope(),actual);
+        return benchmark::compare_images(actual,expect);
+    }
+    void operator()() const
+    {
+        boost::ptr_vector<mapnik::geometry_type> paths;
+        if (!mapnik::from_wkt(wkt_in_, paths))
+        {
+            throw std::runtime_error("Failed to parse WKT");
+        }
+        agg::path_storage ps;
+        ps.move_to(extent_.minx(), extent_.miny());
+        ps.line_to(extent_.minx(), extent_.maxy());
+        ps.line_to(extent_.maxx(), extent_.maxy());
+        ps.line_to(extent_.maxx(), extent_.miny());
+        ps.close_polygon();
+        for (unsigned i=0;i<iterations_;++i)
+        {
+            for (mapnik::geometry_type & geom : paths)
+            {
+                poly_clipper clipped(geom,ps,
+                                     agg::clipper_and,
+                                     agg::clipper_non_zero,
+                                     agg::clipper_non_zero,
+                                     1);
+                clipped.rewind(0);
+                unsigned cmd;
+                double x,y;
+                while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {}
+            }
+        }
+    }
+};
+
+class test3 : public benchmark::test_case
+{
+    std::string wkt_in_;
+    mapnik::box2d<double> extent_;
+    std::string expected_;
+public:
+    using poly_clipper = mapnik::polygon_clipper<mapnik::geometry_type>;
+    test3(mapnik::parameters const& params,
+          std::string const& wkt_in,
+          mapnik::box2d<double> const& extent)
+     : test_case(params),
+       wkt_in_(wkt_in),
+       extent_(extent),
+       expected_("./benchmark/data/polygon_clipping_boost") {}
+    bool validate() const
+    {
+        std::string expected_wkt("Polygon((181 286.666667,233 454,315 340,421 446,463 324,559 466,631 321.320755,631 234.386861,528 178,394 229,329 138,212 134,183 228,200 264,181 238.244444,181 286.666667),(313 190,440 256,470 248,510 305,533 237,613 263,553 397,455 262,405 378,343 287,249 334,229 191,313 190))");
+        boost::ptr_vector<mapnik::geometry_type> paths;
+        if (!mapnik::from_wkt(wkt_in_, paths))
+        {
+            throw std::runtime_error("Failed to parse WKT");
+        }
+        if (paths.size() != 1)
+        {
+            std::clog << "paths.size() != 1\n";
+            return false;
+        }
+        mapnik::geometry_type & geom = paths[0];
+        poly_clipper clipped(extent_, geom);
+        unsigned cmd;
+        double x,y;
+        mapnik::geometry_type geom2(mapnik::geometry_type::types::Polygon);
+        while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {
+            geom2.push_vertex(x,y,(mapnik::CommandType)cmd);
+        }
+        std::string expect = expected_+".png";
+        std::string actual = expected_+"_actual.png";
+        if (!mapnik::util::exists(expect))
+        {
+            std::clog << "generating expected image: " << expect << "\n";
+            render(geom2,geom.envelope(),expect);
+        }
+        render(geom2,geom.envelope(),actual);
+        return benchmark::compare_images(actual,expect);
+    }
+    void operator()() const
+    {
+        boost::ptr_vector<mapnik::geometry_type> paths;
+        if (!mapnik::from_wkt(wkt_in_, paths))
+        {
+            throw std::runtime_error("Failed to parse WKT");
+        }
+        for (unsigned i=0;i<iterations_;++i)
+        {
+            for ( mapnik::geometry_type & geom : paths)
+            {
+                poly_clipper clipped(extent_, geom);
+                unsigned cmd;
+                double x,y;
+                while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) {}
+            }
+        }
+    }
+};
+
+int main(int argc, char** argv)
+{
+    mapnik::parameters params;
+    benchmark::handle_args(argc,argv,params);
+
+    // polygon/rect clipping
+    // IN : POLYGON ((155 203, 233 454, 315 340, 421 446, 463 324, 559 466, 665 253, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 155 203),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249 334, 229 191, 313 190))
+    // RECT : POLYGON ((181 106, 181 470, 631 470, 631 106, 181 106))
+    // OUT (expected)
+    // POLYGON ((181 286.6666666666667, 233 454, 315 340, 421 446, 463 324, 559 466, 631 321.3207547169811, 631 234.38686131386862, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 181 238.24444444444444, 181 286.6666666666667),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249 334, 229 191, 313 190))
+
+    mapnik::box2d<double> clipping_box(181,106,631,470);
+    std::string filename_("./benchmark/data/polygon.wkt");
+    std::ifstream in(filename_.c_str(),std::ios_base::in | std::ios_base::binary);
+    if (!in.is_open())
+        throw std::runtime_error("could not open: '" + filename_ + "'");
+    std::string wkt_in( (std::istreambuf_iterator<char>(in) ),
+               (std::istreambuf_iterator<char>()) );
+    {
+        test1 test_runner(params,wkt_in,clipping_box);
+        run(test_runner,"clipping polygon with agg");
+    }
+    {
+        test2 test_runner(params,wkt_in,clipping_box);
+        run(test_runner,"clipping polygon with clipper");
+    }
+    {
+        test3 test_runner(params,wkt_in,clipping_box);
+        run(test_runner,"clipping polygon with boost");
+    }
+
+    return 0;
+}
diff --git a/benchmark/test_polygon_clipping_rendering.cpp b/benchmark/test_polygon_clipping_rendering.cpp
new file mode 100644
index 0000000..61bfea2
--- /dev/null
+++ b/benchmark/test_polygon_clipping_rendering.cpp
@@ -0,0 +1,79 @@
+#include "bench_framework.hpp"
+#include <mapnik/map.hpp>
+#include <mapnik/load_map.hpp>
+#include <mapnik/graphics.hpp>
+#include <mapnik/agg_renderer.hpp>
+#include <mapnik/datasource_cache.hpp>
+
+class test : public benchmark::test_case
+{
+    std::string xml_;
+    mapnik::box2d<double> extent_;
+public:
+    test(mapnik::parameters const& params,
+         std::string const& xml,
+         mapnik::box2d<double> const& extent)
+     : test_case(params),
+       xml_(xml),
+       extent_(extent)
+      {}
+    bool validate() const
+    {
+        mapnik::Map m(256,256);
+        mapnik::load_map(m,xml_);
+        m.zoom_to_box(extent_);
+        mapnik::image_32 im(m.width(),m.height());
+        mapnik::agg_renderer<mapnik::image_32> ren(m,im);
+        ren.apply();
+        //mapnik::save_to_file(im,"test.png");
+        return true;
+    }
+    void operator()() const
+    {
+        mapnik::Map m(256,256);
+        mapnik::load_map(m,xml_);
+        m.zoom_to_box(extent_);
+        for (unsigned i=0;i<iterations_;++i)
+        {
+            mapnik::image_32 im(m.width(),m.height());
+            mapnik::agg_renderer<mapnik::image_32> ren(m,im);
+            ren.apply();
+        }
+    }
+};
+
+
+int main(int argc, char** argv)
+{
+    mapnik::parameters params;
+    benchmark::handle_args(argc,argv,params);
+    mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
+    mapnik::box2d<double> z1(-20037508.3428,-8317435.0606,20037508.3428,18399242.7298);
+    // bbox for 16/10491/22911.png
+    mapnik::box2d<double> z16(-13622912.929097254,6026906.8062295765,-13621689.93664469,6028129.79868214);
+    {
+        test test_runner(params,
+                          "benchmark/data/polygon_rendering_clip.xml",
+                          z1);
+        run(test_runner,"polygon clip render z1");        
+    }
+    {
+        test test_runner(params,
+                          "benchmark/data/polygon_rendering_no_clip.xml",
+                          z1);
+        run(test_runner,"polygon noclip render z1");        
+    }
+    {
+        test test_runner(params,
+                          "benchmark/data/polygon_rendering_clip.xml",
+                          z16);
+        run(test_runner,"polygon clip render z16");        
+    }
+    {
+        test test_runner(params,
+                          "benchmark/data/polygon_rendering_no_clip.xml",
+                          z16);
+        run(test_runner,"polygon noclip render z16");        
+    }
+    return 0;
+}
diff --git a/benchmark/test_proj_transform1.cpp b/benchmark/test_proj_transform1.cpp
new file mode 100644
index 0000000..180fcca
--- /dev/null
+++ b/benchmark/test_proj_transform1.cpp
@@ -0,0 +1,96 @@
+#include "bench_framework.hpp"
+#include <mapnik/box2d.hpp>
+#include <mapnik/projection.hpp>
+#include <mapnik/proj_transform.hpp>
+
+class test : public benchmark::test_case
+{
+    std::string src_;
+    std::string dest_;
+    mapnik::box2d<double> from_;
+    mapnik::box2d<double> to_;
+    bool defer_proj4_init_;
+public:
+    test(mapnik::parameters const& params,
+         std::string const& src,
+         std::string const& dest,
+         mapnik::box2d<double> const& from,
+         mapnik::box2d<double> const& to,
+         bool defer_proj)
+     : test_case(params),
+       src_(src),
+       dest_(dest),
+       from_(from),
+       to_(to),
+       defer_proj4_init_(defer_proj) {}
+    bool validate() const
+    {
+        mapnik::projection src(src_,defer_proj4_init_);
+        mapnik::projection dest(dest_,defer_proj4_init_);
+        mapnik::proj_transform tr(src,dest);
+        mapnik::box2d<double> bbox = from_;
+        if (!tr.forward(bbox)) return false;
+        return ((std::fabs(bbox.minx() - to_.minx()) < .5) &&
+                (std::fabs(bbox.maxx() - to_.maxx()) < .5) &&
+                (std::fabs(bbox.miny() - to_.miny()) < .5) &&
+                (std::fabs(bbox.maxy() - to_.maxy()) < .5)
+               );
+    }
+    void operator()() const
+    {
+        for (std::size_t i=0;i<iterations_;++i) {
+            for (int i=-180;i<180;i=i+5)
+            {
+                for (int j=-85;j<85;j=j+5)
+                {
+                    mapnik::projection src(src_,defer_proj4_init_);
+                    mapnik::projection dest(dest_,defer_proj4_init_);
+                    mapnik::proj_transform tr(src,dest);
+                    mapnik::box2d<double> box(i,j,i,j);
+                    if (!tr.forward(box)) throw std::runtime_error("could not transform coords");
+                }
+            }
+        }
+    }
+};
+
+// echo -180 -60 | cs2cs -f "%.10f" +init=epsg:4326 +to +init=epsg:3857
+int main(int argc, char** argv)
+{
+    mapnik::parameters params;
+    benchmark::handle_args(argc,argv,params);
+    mapnik::box2d<double> from(-180,-80,180,80);
+    mapnik::box2d<double> to(-20037508.3427892476,-15538711.0963092316,20037508.3427892476,15538711.0963092316);
+    std::string from_str("+init=epsg:4326");
+    std::string to_str("+init=epsg:3857");
+    std::string from_str2("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
+    std::string to_str2("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over");
+    test test_runner(params,
+                     from_str,
+                     to_str,
+                     from,
+                     to,
+                     true);
+    run(test_runner,"lonlat->merc epsg");
+    test test_runner2(params,
+                     from_str2,
+                     to_str2,
+                     from,
+                     to,
+                     true);
+    run(test_runner2,"lonlat->merc literal");
+    test test_runner3(params,
+                     to_str,
+                     from_str,
+                     to,
+                     from,
+                     true);
+    run(test_runner3,"merc->lonlat epsg");
+    test test_runner4(params,
+                     to_str2,
+                     from_str2,
+                     to,
+                     from,
+                     true);
+    return run(test_runner4,"merc->lonlat literal");
+}
diff --git a/benchmark/test_rendering.cpp b/benchmark/test_rendering.cpp
new file mode 100644
index 0000000..1096aaa
--- /dev/null
+++ b/benchmark/test_rendering.cpp
@@ -0,0 +1,108 @@
+#include "bench_framework.hpp"
+#include <mapnik/map.hpp>
+#include <mapnik/image_util.hpp>
+#include <mapnik/load_map.hpp>
+#include <mapnik/graphics.hpp>
+#include <mapnik/agg_renderer.hpp>
+#include <mapnik/datasource_cache.hpp>
+#include <mapnik/font_engine_freetype.hpp>
+#include <stdexcept>
+
+class test : public benchmark::test_case
+{
+    std::string xml_;
+    mapnik::box2d<double> extent_;
+    mapnik::value_integer width_;
+    mapnik::value_integer height_;
+    double scale_factor_;
+    std::string preview_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       xml_(),
+       extent_(),
+       width_(*params.get<mapnik::value_integer>("width",256)),
+       height_(*params.get<mapnik::value_integer>("height",256)),
+       scale_factor_(*params.get<mapnik::value_double>("scale_factor",1.0)),
+       preview_(*params.get<std::string>("preview",""))
+      {
+        boost::optional<std::string> map = params.get<std::string>("map");
+        if (!map)
+        {
+            throw std::runtime_error("please provide a --map=<path to xml> arg");
+        }
+        xml_ = *map;
+
+        boost::optional<std::string> ext = params.get<std::string>("extent");
+        if (ext && !ext->empty())
+        {
+            if (!extent_.from_string(*ext))
+                throw std::runtime_error("could not parse `extent` string" + *ext);
+        }
+        /*
+        else
+        {
+            throw std::runtime_error("please provide a --extent=<minx,miny,maxx,maxy> arg");
+        }*/
+
+      }
+    bool validate() const
+    {
+        mapnik::Map m(width_,height_);
+        mapnik::load_map(m,xml_,true);
+        if (extent_.valid()) {
+            m.zoom_to_box(extent_);
+        } else {
+            m.zoom_all();
+        }
+        mapnik::image_32 im(m.width(),m.height());
+        mapnik::agg_renderer<mapnik::image_32> ren(m,im,scale_factor_);
+        ren.apply();
+        if (!preview_.empty()) mapnik::save_to_file(im,preview_);
+        return true;
+    }
+    void operator()() const
+    {
+        mapnik::Map m(width_,height_);
+        mapnik::load_map(m,xml_);
+        if (extent_.valid()) {
+            m.zoom_to_box(extent_);
+        } else {
+            m.zoom_all();
+        }
+        for (unsigned i=0;i<iterations_;++i)
+        {
+            mapnik::image_32 im(m.width(),m.height());
+            mapnik::agg_renderer<mapnik::image_32> ren(m,im,scale_factor_);
+            ren.apply();
+        }
+    }
+};
+
+
+int main(int argc, char** argv)
+{
+    try
+    {
+        mapnik::parameters params;
+        benchmark::handle_args(argc,argv,params);
+        boost::optional<std::string> name = params.get<std::string>("name");
+        if (!name)
+        {
+            std::clog << "please provide a name for this test\n";
+            return -1;
+        }
+        mapnik::freetype_engine::register_fonts("./fonts/",true);
+        mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
+        {
+            test test_runner(params);
+            run(test_runner,*name);        
+        }
+    }
+    catch (std::exception const& ex)
+    {
+        std::clog << ex.what() << "\n";
+        return -1;
+    }
+    return 0;
+}
diff --git a/benchmark/test_rendering_shared_map.cpp b/benchmark/test_rendering_shared_map.cpp
new file mode 100644
index 0000000..3f98f7f
--- /dev/null
+++ b/benchmark/test_rendering_shared_map.cpp
@@ -0,0 +1,159 @@
+#include "bench_framework.hpp"
+#include <mapnik/map.hpp>
+#include <mapnik/image_util.hpp>
+#include <mapnik/load_map.hpp>
+#include <mapnik/graphics.hpp>
+#include <mapnik/agg_renderer.hpp>
+#include <mapnik/datasource_cache.hpp>
+#include <mapnik/font_engine_freetype.hpp>
+#include <mapnik/scale_denominator.hpp>
+#include <mapnik/projection.hpp>
+#include <mapnik/layer.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/datasource_cache.hpp>
+#include <stdexcept>
+
+template <typename Renderer> void process_layers(Renderer & ren,
+                                            mapnik::request const& m_req,
+                                            mapnik::projection const& map_proj,
+                                            std::vector<mapnik::layer> const& layers,
+                                            double scale_denom)
+{
+    unsigned layers_size = layers.size();
+    for (unsigned i=0; i < layers_size; ++i)
+    {
+        mapnik::layer const& lyr = layers[i];
+        if (lyr.visible(scale_denom))
+        {
+            std::set<std::string> names;
+            mapnik::parameters p;
+            p["type"]="csv";
+            p["file"]="benchmark/data/roads.csv";
+            mapnik::datasource_ptr ds = mapnik::datasource_cache::instance().create(p);
+            mapnik::layer l(lyr);
+            l.set_datasource(ds);
+            l.add_style("labels");
+            ren.apply_to_layer(l,
+                               ren,
+                               map_proj,
+                               m_req.scale(),
+                               scale_denom,
+                               m_req.width(),
+                               m_req.height(),
+                               m_req.extent(),
+                               m_req.buffer_size(),
+                               names);
+        }
+    }
+}
+
+class test : public benchmark::test_case
+{
+    std::string xml_;
+    mapnik::box2d<double> extent_;
+    mapnik::value_integer width_;
+    mapnik::value_integer height_;
+    std::shared_ptr<mapnik::Map> m_;
+    double scale_factor_;
+    std::string preview_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       xml_(),
+       extent_(),
+       width_(*params.get<mapnik::value_integer>("width",256)),
+       height_(*params.get<mapnik::value_integer>("height",256)),
+       m_(new mapnik::Map(width_,height_)),
+       scale_factor_(*params.get<mapnik::value_double>("scale_factor",2.0)),
+       preview_(*params.get<std::string>("preview",""))
+    {
+        boost::optional<std::string> map = params.get<std::string>("map");
+        if (!map)
+        {
+            throw std::runtime_error("please provide a --map=<path to xml> arg");
+        }
+        xml_ = *map;
+
+        boost::optional<std::string> ext = params.get<std::string>("extent");
+        if (ext && !ext->empty())
+        {
+            if (!extent_.from_string(*ext))
+                throw std::runtime_error("could not parse `extent` string" + *ext);
+        }
+        else
+        {
+            throw std::runtime_error("please provide a --extent=<minx,miny,maxx,maxy> arg");
+        }
+        mapnik::load_map(*m_,xml_,true);
+    }
+
+    bool validate() const
+    {
+        mapnik::request m_req(width_,height_,extent_);
+        mapnik::image_32 im(m_->width(),m_->height());
+        mapnik::attributes variables;
+        m_req.set_buffer_size(m_->buffer_size());
+        mapnik::projection map_proj(m_->srs(),true);
+        double scale_denom = mapnik::scale_denominator(m_req.scale(),map_proj.is_geographic());
+        scale_denom *= scale_factor_;
+        mapnik::agg_renderer<mapnik::image_32> ren(*m_,m_req,variables,im,scale_factor_);
+        ren.start_map_processing(*m_);
+        std::vector<mapnik::layer> const& layers = m_->layers();
+        process_layers(ren,m_req,map_proj,layers,scale_denom);
+        ren.end_map_processing(*m_);
+        if (!preview_.empty()) {
+            std::clog << "preview available at " << preview_ << "\n";
+            mapnik::save_to_file(im,preview_);
+        }
+        return true;
+    }
+
+    void operator()() const
+    {
+        if (preview_.empty()) {
+            for (unsigned i=0;i<iterations_;++i)
+            {
+                mapnik::request m_req(width_,height_,extent_);
+                mapnik::image_32 im(m_->width(),m_->height());
+                mapnik::attributes variables;
+                m_req.set_buffer_size(m_->buffer_size());
+                mapnik::projection map_proj(m_->srs(),true);
+                double scale_denom = mapnik::scale_denominator(m_req.scale(),map_proj.is_geographic());
+                scale_denom *= scale_factor_;
+                mapnik::agg_renderer<mapnik::image_32> ren(*m_,m_req,variables,im,scale_factor_);
+                ren.start_map_processing(*m_);
+                std::vector<mapnik::layer> const& layers = m_->layers();
+                process_layers(ren,m_req,map_proj,layers,scale_denom);
+                ren.end_map_processing(*m_);
+            }            
+        }
+    }
+};
+
+
+int main(int argc, char** argv)
+{
+    try
+    {
+        mapnik::parameters params;
+        benchmark::handle_args(argc,argv,params);
+        boost::optional<std::string> name = params.get<std::string>("name");
+        if (!name)
+        {
+            std::clog << "please provide a name for this test\n";
+            return -1;
+        }
+        mapnik::freetype_engine::register_fonts("./fonts/",true);
+        mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
+        {
+            test test_runner(params);
+            run(test_runner,*name);        
+        }
+    }
+    catch (std::exception const& ex)
+    {
+        std::clog << ex.what() << "\n";
+        return -1;
+    }
+    return 0;
+}
diff --git a/benchmark/test_to_bool.cpp b/benchmark/test_to_bool.cpp
new file mode 100644
index 0000000..92f0731
--- /dev/null
+++ b/benchmark/test_to_bool.cpp
@@ -0,0 +1,29 @@
+#include "bench_framework.hpp"
+#include <mapnik/util/conversions.hpp>
+
+class test : public benchmark::test_case
+{
+    std::string value_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       value_("true") {}
+    bool validate() const
+    {
+        bool result = false;
+        mapnik::util::string2bool(value_.data(),value_.data()+value_.size(),result);
+        if (!result) return result;
+        mapnik::util::string2bool(value_,result);
+        return (result == true);
+    }
+    void operator()() const
+    {
+        for (std::size_t i=0;i<iterations_;++i) {
+            bool result = false;
+            mapnik::util::string2bool(value_,result);
+            mapnik::util::string2bool(value_.data(),value_.data()+value_.size(),result);
+        }
+    }
+};
+
+BENCHMARK(test,"string->bool")
diff --git a/benchmark/test_to_double.cpp b/benchmark/test_to_double.cpp
new file mode 100644
index 0000000..1605dcd
--- /dev/null
+++ b/benchmark/test_to_double.cpp
@@ -0,0 +1,31 @@
+#include "bench_framework.hpp"
+#include <mapnik/util/conversions.hpp>
+
+class test : public benchmark::test_case
+{
+    std::string value_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       value_("1.23456789") {}
+    bool validate() const
+    {
+        double result = 0;
+        if (!mapnik::util::string2double(value_.data(),value_.data()+value_.size(),result)) return false;
+        if (result != 1.23456789) return false;
+        result = 0;
+        if (!mapnik::util::string2double(value_,result)) return false;
+        if (result != 1.23456789) return false;
+        return true;
+    }
+    void operator()() const
+    {
+        for (std::size_t i=0;i<iterations_;++i) {
+            double result = 0;
+            mapnik::util::string2double(value_,result);
+            mapnik::util::string2double(value_.data(),value_.data()+value_.size(),result);
+        }
+    }
+};
+
+BENCHMARK(test,"string->double")
diff --git a/benchmark/test_to_int.cpp b/benchmark/test_to_int.cpp
new file mode 100644
index 0000000..195d033
--- /dev/null
+++ b/benchmark/test_to_int.cpp
@@ -0,0 +1,31 @@
+#include "bench_framework.hpp"
+#include <mapnik/util/conversions.hpp>
+
+class test : public benchmark::test_case
+{
+    std::string value_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       value_("123456789") {}
+    bool validate() const
+    {
+        mapnik::value_integer result = 0;
+        if (!mapnik::util::string2int(value_.data(),value_.data()+value_.size(),result)) return false;
+        if (result != 123456789) return false;
+        result = 0;
+        if (!mapnik::util::string2int(value_,result)) return false;
+        if (result != 123456789) return false;
+        return true;
+    }
+    void operator()() const
+    {
+        for (std::size_t i=0;i<iterations_;++i) {
+            mapnik::value_integer result = 0;
+            mapnik::util::string2int(value_,result);
+            mapnik::util::string2int(value_.data(),value_.data()+value_.size(),result);
+        }
+    }
+};
+
+BENCHMARK(test,"string->int")
diff --git a/benchmark/test_to_string1.cpp b/benchmark/test_to_string1.cpp
new file mode 100644
index 0000000..0479246
--- /dev/null
+++ b/benchmark/test_to_string1.cpp
@@ -0,0 +1,27 @@
+#include "bench_framework.hpp"
+#include <mapnik/util/conversions.hpp>
+
+class test : public benchmark::test_case
+{
+    double value_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       value_(-0.1234) {}
+    bool validate() const
+    {
+        std::string s;
+        mapnik::util::to_string(s,value_);
+        return (s == "-0.1234");
+    }
+    void operator()() const
+    {
+        std::string out;
+        for (std::size_t i=0;i<iterations_;++i) {
+            out.clear();
+            mapnik::util::to_string(out,value_);
+        }
+    }
+};
+
+BENCHMARK(test,"to_string double->string")
diff --git a/benchmark/test_to_string2.cpp b/benchmark/test_to_string2.cpp
new file mode 100644
index 0000000..85243bf
--- /dev/null
+++ b/benchmark/test_to_string2.cpp
@@ -0,0 +1,28 @@
+#include "bench_framework.hpp"
+#include <sstream>
+
+class test : public benchmark::test_case
+{
+    double value_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       value_(-0.1234) {}
+    bool validate() const
+    {
+        std::ostringstream s;
+        s << value_;
+        return (s.str() == "-0.1234");
+    }
+    void operator()() const
+    {
+        std::string out;
+        for (std::size_t i=0;i<iterations_;++i) {
+            std::ostringstream s;
+            s << value_;
+            out = s.str();
+        }
+    }
+};
+
+BENCHMARK(test,"ostringstream double->string")
diff --git a/benchmark/test_utf_encoding.cpp b/benchmark/test_utf_encoding.cpp
new file mode 100644
index 0000000..ea11eda
--- /dev/null
+++ b/benchmark/test_utf_encoding.cpp
@@ -0,0 +1,107 @@
+#include "bench_framework.hpp"
+#include <mapnik/unicode.hpp>
+#include <mapnik/value.hpp>
+#include <boost/locale.hpp>
+#ifndef __linux__
+#include <codecvt>
+
+class test : public benchmark::test_case
+{
+    std::string utf8_;
+public:
+    test(mapnik::parameters const& params)
+     : test_case(params),
+       utf8_(u8"שלום") {}
+    bool validate() const
+    {
+        std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> utf32conv;
+        std::u32string utf32 = utf32conv.from_bytes(utf8_);
+        if (utf32.size() != 4) return false;
+        if (utf32[0] != 0x5e9 &&
+            utf32[1] != 0x5dc &&
+            utf32[2] != 0x5d5 &&
+            utf32[3] != 0x5dd) return false;
+        return true;
+    }
+    void operator()() const
+    {
+        std::u32string utf32;
+        std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> utf32conv;
+        for (std::size_t i=0;i<iterations_;++i) {
+             utf32 = utf32conv.from_bytes(utf8_);
+        }
+    }
+};
+
+#endif
+
+class test2 : public benchmark::test_case
+{
+    std::string utf8_;
+public:
+    test2(mapnik::parameters const& params)
+     : test_case(params),
+       utf8_(u8"שלום") {}
+    bool validate() const
+    {
+        std::u32string utf32 = boost::locale::conv::utf_to_utf<char32_t>(utf8_);
+        if (utf32.size() != 4) return false;
+        if (utf32[0] != 0x5e9 &&
+            utf32[1] != 0x5dc &&
+            utf32[2] != 0x5d5 &&
+            utf32[3] != 0x5dd) return false;
+        return true;
+    }
+    void operator()() const
+    {
+         std::u32string utf32;
+         for (std::size_t i=0;i<iterations_;++i) {
+             utf32 = boost::locale::conv::utf_to_utf<char32_t>(utf8_);
+         }
+    }
+};
+
+class test3 : public benchmark::test_case
+{
+    std::string utf8_;
+public:
+    test3(mapnik::parameters const& params)
+     : test_case(params),
+       utf8_(u8"שלום") {}
+    bool validate() const
+    {
+        mapnik::transcoder tr_("utf-8");
+        mapnik::value_unicode_string utf32 = tr_.transcode(utf8_.data(),utf8_.size());
+        //std::u32string utf32 = boost::locale::conv::utf_to_utf<char32_t>(utf8_);
+        if (utf32.length() != 4) return false;
+        if (utf32[0] != 0x5e9 &&
+            utf32[1] != 0x5dc &&
+            utf32[2] != 0x5d5 &&
+            utf32[3] != 0x5dd) return false;
+        return true;
+    }
+    void operator()() const
+    {
+        mapnik::transcoder tr_("utf-8");
+        mapnik::value_unicode_string utf32;
+        for (std::size_t i=0;i<iterations_;++i) {
+            utf32 = tr_.transcode(utf8_.data(),utf8_.size());
+        }
+    }
+};
+
+int main(int argc, char** argv)
+{
+    mapnik::parameters params;
+    benchmark::handle_args(argc,argv,params);
+#ifndef __linux__
+    test test_runner(params);
+    run(test_runner,"utf encode std::codecvt");
+#else
+    std::clog << "skipping 'utf encode std::codecvt' test since <codecvt> is not supported on __linux__\n";
+#endif
+    test2 test_runner2(params);
+    run(test_runner2,"utf encode boost::locale");
+    test3 test_runner3(params);
+    return run(test_runner3,"utf encode ICU");
+}
diff --git a/bindings/python/boost_std_shared_shim.hpp b/bindings/python/boost_std_shared_shim.hpp
new file mode 100644
index 0000000..e25560a
--- /dev/null
+++ b/bindings/python/boost_std_shared_shim.hpp
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_PYTHON_BOOST_STD_SHARED_SHIM
+#define MAPNIK_PYTHON_BOOST_STD_SHARED_SHIM
+
+// boost
+#include <boost/version.hpp>
+#include <boost/config.hpp>
+
+#if BOOST_VERSION < 105300 || defined BOOST_NO_CXX11_SMART_PTR
+
+// https://github.com/mapnik/mapnik/issues/2022
+#include <memory>
+
+namespace boost {
+template<class T> const T* get_pointer(std::shared_ptr<T> const& p)
+{
+    return p.get();
+}
+
+template<class T> T* get_pointer(std::shared_ptr<T>& p)
+{
+    return p.get();
+}
+} // namespace boost
+
+#endif
+
+#endif // MAPNIK_PYTHON_BOOST_STD_SHARED_SHIM
diff --git a/bindings/python/build.py b/bindings/python/build.py
index c450264..9599a78 100644
--- a/bindings/python/build.py
+++ b/bindings/python/build.py
@@ -40,19 +40,29 @@ def is_py3():
 
 
 prefix = env['PREFIX']
-target_path = os.path.normpath(env['PYTHON_INSTALL_LOCATION'] + os.path.sep + 'mapnik')
+target_path = os.path.normpath(env['PYTHON_INSTALL_LOCATION'] + os.path.sep + env['MAPNIK_NAME'])
 target_path_deprecated = os.path.normpath(env['PYTHON_INSTALL_LOCATION'] + os.path.sep + 'mapnik2')
 
 py_env = env.Clone()
 py_env.Append(CPPPATH = env['PYTHON_INCLUDES'])
 
-py_env['LIBS'] = ['mapnik',env['BOOST_PYTHON_LIB']]
+py_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
+
+py_env['LIBS'] = [env['MAPNIK_NAME'],env['BOOST_PYTHON_LIB']]
 
 link_all_libs = env['LINKING'] == 'static' or env['RUNTIME_LINK'] == 'static' or (env['PLATFORM'] == 'Darwin' and not env['PYTHON_DYNAMIC_LOOKUP'])
 
+# even though boost_thread is no longer used in mapnik core
+# we need to link in for boost_python to avoid missing symbol: _ZN5boost6detail12get_tss_dataEPKv / boost::detail::get_tss_data
+py_env.AppendUnique(LIBS = 'boost_thread%s' % env['BOOST_APPEND'])
+
 if link_all_libs:
     py_env.AppendUnique(LIBS=env['LIBMAPNIK_LIBS'])
 
+# note: on linux -lrt must be linked after thread to avoid: undefined symbol: clock_gettime
+if env['RUNTIME_LINK'] == 'static' and env['PLATFORM'] == 'Linux':
+    py_env.AppendUnique(LIBS='rt')
+
 # TODO - do solaris/fedora need direct linking too?
 if env['PLATFORM'] == 'Darwin':
     ##### Python linking on OS X is tricky ### 
@@ -107,11 +117,6 @@ else:
     # all other platforms we don't directly link python
     python_link_flag = ''
 
-if env['CUSTOM_LDFLAGS']:
-    linkflags = '%s %s' % (env['CUSTOM_LDFLAGS'], python_link_flag)
-else:
-    linkflags = python_link_flag
-
 paths = '''
 """Configuration paths of Mapnik fonts and input plugins (auto-generated by SCons)."""
 
@@ -130,8 +135,8 @@ else:
 
 paths += "__all__ = [mapniklibpath,inputpluginspath,fontscollectionpath]\n"
 
-if not os.path.exists('mapnik'):
-    os.mkdir('mapnik')
+if not os.path.exists(env['MAPNIK_NAME']):
+    os.mkdir(env['MAPNIK_NAME'])
 
 file('mapnik/paths.py','w').write(paths % (env['MAPNIK_LIB_DIR']))
 
@@ -177,10 +182,15 @@ if 'uninstall' not in COMMAND_LINE_TARGETS:
         py_env.ParseConfig('pkg-config --cflags pycairo')
         py_env.Append(CPPDEFINES = '-DHAVE_PYCAIRO')
 
-py_env.AppendUnique(LIBS = 'boost_thread%s' % env['BOOST_APPEND'])
-_mapnik = py_env.LoadableModule('mapnik/_mapnik', sources, LDMODULEPREFIX='', LDMODULESUFFIX='.so',LINKFLAGS=linkflags)
+py_env.Append(LINKFLAGS=python_link_flag)
+py_env.AppendUnique(LIBS='mapnik-json')
+py_env.AppendUnique(LIBS='mapnik-wkt')
+
+_mapnik = py_env.LoadableModule('mapnik/_mapnik', sources, LDMODULEPREFIX='', LDMODULESUFFIX='.so')
 
 Depends(_mapnik, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
+Depends(_mapnik, env.subst('../../src/json/libmapnik-json${LIBSUFFIX}'))
+Depends(_mapnik, env.subst('../../src/wkt/libmapnik-wkt${LIBSUFFIX}'))
 
 if env['PLATFORM'] == 'SunOS' and env['PYTHON_IS_64BIT']:
     # http://mail.python.org/pipermail/python-dev/2006-August/068528.html
diff --git a/bindings/python/mapnik/__init__.py b/bindings/python/mapnik/__init__.py
index 9fc06d9..b3e2eda 100644
--- a/bindings/python/mapnik/__init__.py
+++ b/bindings/python/mapnik/__init__.py
@@ -43,6 +43,10 @@ import itertools
 import os
 import sys
 import warnings
+try:
+    import json
+except ImportError:
+    import simplejson as json
 
 def bootstrap_env():
     """
@@ -67,8 +71,6 @@ def bootstrap_env():
 bootstrap_env()
 
 from _mapnik import *
-from paths import inputpluginspath
-from paths import fontscollectionpath
 
 import printing
 printing.renderer = render
@@ -255,17 +257,25 @@ class _Projection(Projection,_injector):
         """
         return inverse_(obj,self)
 
+class _Feature(Feature,_injector):
+    __geo_interface__ = property(lambda self: json.loads(self.to_geojson()))
+
+class _Path(Path,_injector):
+    __geo_interface__ = property(lambda self: json.loads(self.to_geojson()))
+
 class _Datasource(Datasource,_injector):
 
-    def all_features(self,fields=None):
+    def all_features(self,fields=None,variables={}):
         query = Query(self.envelope())
+        query.set_variables(variables);
         attributes = fields or self.fields()
         for fld in attributes:
             query.add_property_name(fld)
         return self.features(query).features
 
-    def featureset(self,fields=None):
+    def featureset(self,fields=None,variables={}):
         query = Query(self.envelope())
+        query.set_variables(variables);
         attributes = fields or self.fields()
         for fld in attributes:
             query.add_property_name(fld)
@@ -275,16 +285,15 @@ class _Color(Color,_injector):
     def __repr__(self):
         return "Color(R=%d,G=%d,B=%d,A=%d)" % (self.r,self.g,self.b,self.a)
 
-class _ProcessedText(ProcessedText, _injector):
-    def append(self, properties, text):
-        #More pythonic name
-        self.push_back(properties, text)
+class _SymbolizerBase(SymbolizerBase,_injector):
+     # back compatibility
+     @property
+     def filename(self):
+         return self['file']
 
-class _Symbolizers(Symbolizers,_injector):
-
-    def __getitem__(self, idx):
-        sym = Symbolizers._c___getitem__(self, idx)
-        return sym.symbol()
+     @filename.setter
+     def filename(self, val):
+         self['file'] = val
 
 def _add_symbol_method_to_symbolizers(vars=globals()):
 
@@ -418,7 +427,7 @@ def PostGIS(**keywords):
       cursor_size -- integer size of binary cursor to use (default: 0, no binary cursor is used)
 
     >>> from mapnik import PostGIS, Layer
-    >>> params = dict(dbname='mapnik',table='osm',user='postgres',password='gis')
+    >>> params = dict(dbname=env['MAPNIK_NAME'],table='osm',user='postgres',password='gis')
     >>> params['estimate_extent'] = False
     >>> params['extent'] = '-20037508,-19929239,20037508,19929239'
     >>> postgis = PostGIS(**params)
@@ -429,6 +438,51 @@ def PostGIS(**keywords):
     keywords['type'] = 'postgis'
     return CreateDatasource(keywords)
 
+def PgRaster(**keywords):
+    """Create a PgRaster Datasource.
+
+    Required keyword arguments:
+      dbname -- database name to connect to
+      table -- table name or subselect query
+
+      *Note: if using subselects for the 'table' value consider also
+       passing the 'raster_field' and 'srid' and 'extent_from_subquery'
+       options and/or specifying the 'raster_table' option.
+
+    Optional db connection keyword arguments:
+      user -- database user to connect as (default: see postgres docs)
+      password -- password for database user (default: see postgres docs)
+      host -- portgres hostname (default: see postgres docs)
+      port -- postgres port (default: see postgres docs)
+      initial_size -- integer size of connection pool (default: 1)
+      max_size -- integer max of connection pool (default: 10)
+      persist_connection -- keep connection open (default: True)
+
+    Optional table-level keyword arguments:
+      extent -- manually specified data extent (comma delimited string, default: None)
+      estimate_extent -- boolean, direct PostGIS to use the faster, less accurate `estimate_extent` over `extent` (default: False)
+      extent_from_subquery -- boolean, direct Mapnik to query Postgis for the extent of the raw 'table' value (default: uses 'geometry_table')
+      raster_table -- specify geometry table to use to look up metadata (default: automatically parsed from 'table' value)
+      raster_field -- specify geometry field to use (default: first entry in raster_columns)
+      srid -- specify srid to use (default: auto-detected from geometry_field)
+      row_limit -- integer limit of rows to return (default: 0)
+      cursor_size -- integer size of binary cursor to use (default: 0, no binary cursor is used)
+      use_overviews -- boolean, use overviews when available (default: false)
+      prescale_rasters -- boolean, scale rasters on the db side (default: false)
+      clip_rasters -- boolean, clip rasters on the db side (default: false)
+      band -- integer, if non-zero interprets the given band (1-based offset) as a data raster (default: 0)
+
+    >>> from mapnik import PgRaster, Layer
+    >>> params = dict(dbname='mapnik',table='osm',user='postgres',password='gis')
+    >>> params['estimate_extent'] = False
+    >>> params['extent'] = '-20037508,-19929239,20037508,19929239'
+    >>> pgraster = PgRaster(**params)
+    >>> lyr = Layer('PgRaster Layer')
+    >>> lyr.datasource = pgraster
+
+    """
+    keywords['type'] = 'pgraster'
+    return CreateDatasource(keywords)
 
 def Raster(**keywords):
     """Create a Raster (Tiff) Datasource.
@@ -616,6 +670,16 @@ def Python(**keywords):
     keywords['type'] = 'python'
     return CreateDatasource(keywords)
 
+def MemoryDatasource(**keywords):
+    """Create a Memory Datasource.
+
+    Optional keyword arguments:
+        (TODO)
+    """
+    params = Parameters()
+    params.append(Parameter('type','memory'))
+    return MemoryDatasourceBase(params)
+
 class PythonDatasource(object):
     """A base class for a Python data source.
 
@@ -774,24 +838,6 @@ class _TextSymbolizer(TextSymbolizer,_injector):
 
 
     @property
-    def wrap_char(self):
-        return self.format.wrap_char
-
-    @wrap_char.setter
-    def wrap_char(self, wrap_char):
-        self.format.wrap_char = wrap_char
-
-
-    @property
-    def wrap_character(self):
-        return self.format.wrap_character
-
-    @wrap_char.setter
-    def wrap_character(self, wrap_character):
-        self.format.wrap_character = wrap_character
-
-
-    @property
     def wrap_before(self):
         return self.format.wrap_before
 
@@ -966,17 +1012,6 @@ class _TextSymbolizer(TextSymbolizer,_injector):
         self.properties.maximum_angle_char_delta = maximum_angle_char_delta
 
 
-
-    @property
-    def force_odd_labels(self):
-        return self.properties.force_odd_labels
-
-    @force_odd_labels.setter
-    def force_odd_labels(self, force_odd_labels):
-        self.properties.force_odd_labels = force_odd_labels
-
-
-
     @property
     def allow_overlap(self):
         return self.properties.allow_overlap
@@ -1017,15 +1052,17 @@ def register_plugins(path=None):
         if os.environ.has_key('MAPNIK_INPUT_PLUGINS_DIRECTORY'):
             path = os.environ.get('MAPNIK_INPUT_PLUGINS_DIRECTORY')
         else:
+            from paths import inputpluginspath
             path = inputpluginspath
     DatasourceCache.register_datasources(path)
 
-def register_fonts(path=None,valid_extensions=['.ttf','.otf','.ttc','.pfa','.pfb','.ttc','.dfont']):
+def register_fonts(path=None,valid_extensions=['.ttf','.otf','.ttc','.pfa','.pfb','.ttc','.dfont','.woff']):
     """Recursively register fonts using path argument as base directory"""
     if not path:
        if os.environ.has_key('MAPNIK_FONT_DIRECTORY'):
            path = os.environ.get('MAPNIK_FONT_DIRECTORY')
        else:
+           from paths import fontscollectionpath
            path = fontscollectionpath
     for dirpath, _, filenames in os.walk(path):
         for filename in filenames:
diff --git a/bindings/python/mapnik/printing.py b/bindings/python/mapnik/printing.py
index 8c15d8a..a354c49 100644
--- a/bindings/python/mapnik/printing.py
+++ b/bindings/python/mapnik/printing.py
@@ -17,7 +17,7 @@ see the documentation of mapnik.printing.PDFPrinter() for options
 """
 from __future__ import absolute_import
 
-from . import render, Map, Box2d, MemoryDatasource, Layer, Feature, Projection, ProjTransform, Coord, Style, Rule, Geometry2d
+from . import render, Map, Box2d, Layer, Feature, Projection, ProjTransform, Coord, Style, Rule, Geometry2d
 import math
 import os
 import tempfile
@@ -306,12 +306,12 @@ class PDFPrinter:
     """Main class for creating PDF print outs, basically contruct an instance
     with appropriate options and then call render_map with your mapnik map
     """
-    def __init__(self, 
-                 pagesize=pagesizes["a4"], 
-                 margin=0.005, 
+    def __init__(self,
+                 pagesize=pagesizes["a4"],
+                 margin=0.005,
                  box=None,
                  percent_box=None,
-                 scale=default_scale, 
+                 scale=default_scale,
                  resolution=resolutions.dpi72,
                  preserve_aspect=True,
                  centering=centering.constrained,
@@ -321,7 +321,7 @@ class PDFPrinter:
 
         pagesize: tuple of page size in meters, see predefined sizes in pagessizes dict (default a4)
         margin: page margin in meters (default 0.01)
-        box: box within the page to render the map into (will not render over margin). This should be 
+        box: box within the page to render the map into (will not render over margin). This should be
              a Mapnik Box2d object. Default is the full page within the margin
         percent_box: as per box, but specified as a percent (0->1) of the full page size. If both box
                      and percent_box are specified percent_box will be used.
@@ -485,7 +485,7 @@ class PDFPrinter:
 
     def _get_context(self):
         if HAS_PANGOCAIRO_MODULE:
-            return 
+            return
         elif HAS_PYCAIRO_MODULE:
             return cairo.Context(self._s)
         return None
@@ -779,7 +779,7 @@ class PDFPrinter:
             prev = value
             value+=page_div_size
             fill = [1-z for z in fill]
-            label_value += div_size 
+            label_value += div_size
             if self._is_latlon and label_value > 180:
                 label_value -= 360
             text = "%d" % label_value
@@ -1025,4 +1025,3 @@ class PDFPrinter:
                         if y > h:
                             h = y
         return (w,h)
-
diff --git a/bindings/python/mapnik_building_symbolizer.cpp b/bindings/python/mapnik_building_symbolizer.cpp
deleted file mode 100644
index 3660dcd..0000000
--- a/bindings/python/mapnik_building_symbolizer.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-#include <mapnik/value.hpp>
-#include <mapnik/attribute.hpp>
-#include <mapnik/building_symbolizer.hpp>
-
-using namespace mapnik;
-using mapnik::building_symbolizer;
-using mapnik::color;
-
-void export_building_symbolizer()
-{
-    using namespace boost::python;
-
-    class_<building_symbolizer>("BuildingSymbolizer",
-                               init<>("Default BuildingSymbolizer"))
-        .add_property("fill",make_function
-                      (&building_symbolizer::get_fill,
-                       return_value_policy<copy_const_reference>()),
-                      &building_symbolizer::set_fill)
-        .add_property("fill_opacity",
-                      &building_symbolizer::get_opacity,
-                      &building_symbolizer::set_opacity)
-        .add_property("height",
-                      make_function(&building_symbolizer::height,
-                                    return_value_policy<copy_const_reference>()),
-                      &building_symbolizer::set_height,
-                      "Set/get the building height")
-        ;
-
-}
diff --git a/bindings/python/mapnik_color.cpp b/bindings/python/mapnik_color.cpp
index 82611ff..067a73d 100644
--- a/bindings/python/mapnik_color.cpp
+++ b/bindings/python/mapnik_color.cpp
@@ -20,8 +20,17 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+#include "boost_std_shared_shim.hpp"
+
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 //mapnik
 #include <mapnik/color.hpp>
@@ -83,6 +92,7 @@ void export_color ()
         .def(self != self)
         .def_pickle(color_pickle_suite())
         .def("__str__",&color::to_string)
+        .def("packed",&color::rgba)
         .def("to_hex_string",&color::to_hex_string,
              "Returns the hexadecimal representation of this color.\n"
              "\n"
diff --git a/bindings/python/mapnik_coord.cpp b/bindings/python/mapnik_coord.cpp
index b9b4e62..222f5b4 100644
--- a/bindings/python/mapnik_coord.cpp
+++ b/bindings/python/mapnik_coord.cpp
@@ -19,9 +19,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  *
  *****************************************************************************/
+#include <mapnik/config.hpp>
+#include "boost_std_shared_shim.hpp"
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
+
 
 // mapnik
 #include <mapnik/coord.hpp>
diff --git a/bindings/python/mapnik_datasource.cpp b/bindings/python/mapnik_datasource.cpp
index 07383b3..df63fe0 100644
--- a/bindings/python/mapnik_datasource.cpp
+++ b/bindings/python/mapnik_datasource.cpp
@@ -20,19 +20,25 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/python/detail/api_placeholder.hpp>
 #include <boost/noncopyable.hpp>
+#include <boost/version.hpp>
+#pragma GCC diagnostic pop
 
 // stl
-#include <sstream>
 #include <vector>
 
 // mapnik
 #include <mapnik/box2d.hpp>
-#include <mapnik/coord.hpp>
-#include <mapnik/query.hpp>
 #include <mapnik/datasource.hpp>
 #include <mapnik/datasource_cache.hpp>
 #include <mapnik/feature_layer_desc.hpp>
@@ -43,12 +49,13 @@ using mapnik::datasource;
 using mapnik::memory_datasource;
 using mapnik::layer_descriptor;
 using mapnik::attribute_descriptor;
+using mapnik::parameters;
 
 namespace
 {
 //user-friendly wrapper that uses Python dictionary
 using namespace boost::python;
-boost::shared_ptr<mapnik::datasource> create_datasource(dict const& d)
+std::shared_ptr<mapnik::datasource> create_datasource(dict const& d)
 {
     mapnik::parameters params;
     boost::python::list keys=d.keys();
@@ -61,7 +68,11 @@ boost::shared_ptr<mapnik::datasource> create_datasource(dict const& d)
             PyObject* temp = PyUnicode_AsUTF8String(obj.ptr());
             if (temp)
             {
+#if PY_VERSION_HEX >= 0x03000000
+                char* c_str = PyBytes_AsString(temp);
+#else
                 char* c_str = PyString_AsString(temp);
+#endif
                 params[key] = std::string(c_str);
                 Py_DecRef(temp);
             }
@@ -88,7 +99,7 @@ boost::shared_ptr<mapnik::datasource> create_datasource(dict const& d)
     return mapnik::datasource_cache::instance().create(params);
 }
 
-boost::python::dict describe(boost::shared_ptr<mapnik::datasource> const& ds)
+boost::python::dict describe(std::shared_ptr<mapnik::datasource> const& ds)
 {
     boost::python::dict description;
     mapnik::layer_descriptor ld = ds->get_descriptor();
@@ -99,7 +110,7 @@ boost::python::dict describe(boost::shared_ptr<mapnik::datasource> const& ds)
     return description;
 }
 
-boost::python::list fields(boost::shared_ptr<mapnik::datasource> const& ds)
+boost::python::list fields(std::shared_ptr<mapnik::datasource> const& ds)
 {
     boost::python::list flds;
     if (ds)
@@ -115,7 +126,7 @@ boost::python::list fields(boost::shared_ptr<mapnik::datasource> const& ds)
     }
     return flds;
 }
-boost::python::list field_types(boost::shared_ptr<mapnik::datasource> const& ds)
+boost::python::list field_types(std::shared_ptr<mapnik::datasource> const& ds)
 {
     boost::python::list fld_types;
     if (ds)
@@ -169,7 +180,7 @@ void export_datasource()
         .value("Collection",mapnik::datasource::Collection)
         ;
 
-    class_<datasource,boost::shared_ptr<datasource>,
+    class_<datasource,std::shared_ptr<datasource>,
         boost::noncopyable>("Datasource",no_init)
         .def("type",&datasource::type)
         .def("geometry_type",&datasource::get_geometry_type)
@@ -182,11 +193,14 @@ void export_datasource()
         .def("params",make_function(params_const,return_value_policy<copy_const_reference>()),
              "The configuration parameters of the data source. "
              "These vary depending on the type of data source.")
+        .def(self == self)
         ;
 
     def("CreateDatasource",&create_datasource);
 
-    class_<memory_datasource, bases<datasource>, boost::noncopyable>("MemoryDatasource", init<>())
+    class_<memory_datasource,
+           bases<datasource>, std::shared_ptr<memory_datasource>,
+           boost::noncopyable>("MemoryDatasourceBase", init<parameters>())
         .def("add_feature",&memory_datasource::push,
              "Adds a Feature:\n"
              ">>> ms = MemoryDatasource()\n"
@@ -194,4 +208,6 @@ void export_datasource()
              ">>> ms.add_feature(Feature(1))\n")
         .def("num_features",&memory_datasource::size)
         ;
+
+    implicitly_convertible<std::shared_ptr<memory_datasource>,std::shared_ptr<datasource> >();
 }
diff --git a/bindings/python/mapnik_datasource_cache.cpp b/bindings/python/mapnik_datasource_cache.cpp
index f0230f8..d33ece8 100644
--- a/bindings/python/mapnik_datasource_cache.cpp
+++ b/bindings/python/mapnik_datasource_cache.cpp
@@ -20,16 +20,28 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
+// boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #include <boost/python.hpp>
 #include <boost/noncopyable.hpp>
+#pragma GCC diagnostic pop
 
+#include <mapnik/value_types.hpp>
+#include <mapnik/params.hpp>
+#include <mapnik/datasource.hpp>
 #include <mapnik/datasource_cache.hpp>
 
 namespace  {
 
 using namespace boost::python;
 
-boost::shared_ptr<mapnik::datasource> create_datasource(const dict& d)
+std::shared_ptr<mapnik::datasource> create_datasource(const dict& d)
 {
     mapnik::parameters params;
     boost::python::list keys=d.keys();
diff --git a/bindings/python/mapnik_debug_symbolizer.cpp b/bindings/python/mapnik_debug_symbolizer.cpp
deleted file mode 100644
index 6b25596..0000000
--- a/bindings/python/mapnik_debug_symbolizer.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2013 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-#include "mapnik_enumeration.hpp"
-#include <mapnik/debug_symbolizer.hpp>
-
-void export_debug_symbolizer()
-{
-    using namespace boost::python;
-
-    mapnik::enumeration_<mapnik::debug_symbolizer_mode_e>("debug_symbolizer_mode")
-        .value("COLLISION",mapnik::DEBUG_SYM_MODE_COLLISION)
-        .value("VERTEX",mapnik::DEBUG_SYM_MODE_VERTEX)
-        ;
-
-    class_<mapnik::debug_symbolizer>("DebugSymbolizer",
-                             init<>("Default debug Symbolizer"))
-        .add_property("mode",
-                      &mapnik::debug_symbolizer::get_mode,
-                      &mapnik::debug_symbolizer::set_mode)
-        ;
-}
diff --git a/bindings/python/mapnik_enumeration.hpp b/bindings/python/mapnik_enumeration.hpp
index 04387eb..33da826 100644
--- a/bindings/python/mapnik_enumeration.hpp
+++ b/bindings/python/mapnik_enumeration.hpp
@@ -22,6 +22,11 @@
 #ifndef MAPNIK_PYTHON_BINDING_ENUMERATION_INCLUDED
 #define MAPNIK_PYTHON_BINDING_ENUMERATION_INCLUDED
 
+#include <boost/python/converter/registered.hpp>  // for registered
+#include <boost/python/enum.hpp>        // for enum_
+#include <boost/python/implicit.hpp>    // for implicitly_convertible
+#include <boost/python/to_python_converter.hpp>
+
 namespace mapnik {
 
 template <typename EnumWrapper>
@@ -29,8 +34,8 @@ class enumeration_ :
         public boost::python::enum_<typename EnumWrapper::native_type>
 {
     // some short cuts
-    typedef boost::python::enum_<typename EnumWrapper::native_type> base_type;
-    typedef typename EnumWrapper::native_type native_type;
+    using base_type = boost::python::enum_<typename EnumWrapper::native_type>;
+    using native_type = typename EnumWrapper::native_type;
 public:
     enumeration_() :
         base_type( EnumWrapper::get_name().c_str() )
@@ -42,15 +47,8 @@ public:
     {
         init();
     }
-#if BOOST_VERSION >= 103500
     enumeration_(const char * python_alias, const char * doc) :
         base_type( python_alias, doc )
-#else
-        enumeration_(const char * python_alias, const char * /*doc*/) :
-        // Boost.Python < 1.35.0 doesn't support
-        // docstrings for enums so we ignore it.
-        base_type( python_alias )
-#endif
     {
         init();
     }
diff --git a/bindings/python/mapnik_enumeration_wrapper_converter.hpp b/bindings/python/mapnik_enumeration_wrapper_converter.hpp
new file mode 100644
index 0000000..4918d3c
--- /dev/null
+++ b/bindings/python/mapnik_enumeration_wrapper_converter.hpp
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_BINDINGS_PYTHON_ENUMERATION_WRAPPPER
+#define MAPNIK_BINDINGS_PYTHON_ENUMERATION_WRAPPPER
+
+// mapnik
+#include <mapnik/symbolizer.hpp>
+
+// boost
+#include <boost/python.hpp>
+
+
+namespace boost { namespace python {
+
+    struct mapnik_enumeration_wrapper_to_python
+    {
+        static PyObject* convert(mapnik::enumeration_wrapper const& v)
+        {
+            return ::PyLong_FromLongLong(v.value); // FIXME: this is a temp hack!!
+        }
+    };
+
+}}
+
+#endif // MAPNIK_BINDINGS_PYTHON_ENUMERATION_WRAPPPER
diff --git a/bindings/python/mapnik_envelope.cpp b/bindings/python/mapnik_envelope.cpp
index e0bd0c7..04f1851 100644
--- a/bindings/python/mapnik_envelope.cpp
+++ b/bindings/python/mapnik_envelope.cpp
@@ -20,8 +20,16 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/box2d.hpp>
@@ -90,7 +98,7 @@ void (box2d<double>::*clip)(box2d<double> const&) = &box2d<double>::clip;
 void (box2d<double>::*pad)(double) = &box2d<double>::pad;
 
 // deepcopy
-box2d<double> box2d_deepcopy(box2d<double> & obj, boost::python::dict memo)
+box2d<double> box2d_deepcopy(box2d<double> & obj, boost::python::dict const&)
 {
     // FIXME::ignore memo for now
     box2d<double> result(obj);
diff --git a/bindings/python/mapnik_expression.cpp b/bindings/python/mapnik_expression.cpp
index caf4d25..75f3527 100644
--- a/bindings/python/mapnik_expression.cpp
+++ b/bindings/python/mapnik_expression.cpp
@@ -20,13 +20,22 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+#include "python_to_value.hpp"
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/variant.hpp>
 #include <boost/noncopyable.hpp>
-
+#pragma GCC diagnostic pop
 
 // mapnik
+#include <mapnik/util/variant.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/expression.hpp>
 #include <mapnik/expression_string.hpp>
@@ -43,7 +52,7 @@ using mapnik::path_expression_ptr;
 // expression
 expression_ptr parse_expression_(std::string const& wkt)
 {
-    return parse_expression(wkt,"utf8");
+    return parse_expression(wkt);
 }
 
 std::string expression_to_string_(mapnik::expr_node const& expr)
@@ -51,15 +60,15 @@ std::string expression_to_string_(mapnik::expr_node const& expr)
     return mapnik::to_expression_string(expr);
 }
 
-mapnik::value expression_evaluate_(mapnik::expr_node const& expr, mapnik::feature_impl const& f)
+mapnik::value expression_evaluate_(mapnik::expr_node const& expr, mapnik::feature_impl const& f, boost::python::dict const& d)
 {
     // will be auto-converted to proper python type by `mapnik_value_to_python`
-    return boost::apply_visitor(mapnik::evaluate<mapnik::feature_impl,mapnik::value>(f),expr);
+    return mapnik::util::apply_visitor(mapnik::evaluate<mapnik::feature_impl,mapnik::value,mapnik::attributes>(f,mapnik::dict2attr(d)),expr);
 }
 
-bool expression_evaluate_to_bool_(mapnik::expr_node const& expr, mapnik::feature_impl const& f)
+bool expression_evaluate_to_bool_(mapnik::expr_node const& expr, mapnik::feature_impl const& f, boost::python::dict const& d)
 {
-    return boost::apply_visitor(mapnik::evaluate<mapnik::feature_impl,mapnik::value>(f),expr).to_bool();
+    return mapnik::util::apply_visitor(mapnik::evaluate<mapnik::feature_impl,mapnik::value,mapnik::attributes>(f,mapnik::dict2attr(d)),expr).to_bool();
 }
 
 // path expression
@@ -84,8 +93,8 @@ void export_expression()
     class_<mapnik::expr_node ,boost::noncopyable>("Expression",
                                                   "TODO"
                                                   "",no_init)
-        .def("evaluate", &expression_evaluate_)
-        .def("to_bool", &expression_evaluate_to_bool_)
+        .def("evaluate", &expression_evaluate_,(arg("feature"),arg("variables")=boost::python::dict()))
+        .def("to_bool", &expression_evaluate_to_bool_,(arg("feature"),arg("variables")=boost::python::dict()))
         .def("__str__",&expression_to_string_);
     ;
 
diff --git a/bindings/python/mapnik_feature.cpp b/bindings/python/mapnik_feature.cpp
index f597c9b..bb6f3f3 100644
--- a/bindings/python/mapnik_feature.cpp
+++ b/bindings/python/mapnik_feature.cpp
@@ -20,23 +20,33 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
-#include <boost/python/suite/indexing/indexing_suite.hpp>
-//#include <boost/python/suite/indexing/map_indexing_suite.hpp>
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
+#include <boost/python.hpp>
 #include <boost/python/iterator.hpp>
 #include <boost/python/call_method.hpp>
 #include <boost/python/tuple.hpp>
 #include <boost/python/to_python_converter.hpp>
-#include <boost/python.hpp>
 #include <boost/noncopyable.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
+#include <mapnik/value_types.hpp>
 #include <mapnik/feature.hpp>
+#include <mapnik/feature_factory.hpp>
 #include <mapnik/feature_kv_iterator.hpp>
 #include <mapnik/datasource.hpp>
 #include <mapnik/wkb.hpp>
 #include <mapnik/wkt/wkt_factory.hpp>
-#include <mapnik/json/geojson_generator.hpp>
+#include <mapnik/json/feature_parser.hpp>
+#include <mapnik/json/feature_generator.hpp>
 
 // stl
 #include <stdexcept>
@@ -44,30 +54,39 @@
 namespace {
 
 using mapnik::geometry_utils;
-using mapnik::from_wkt;
 using mapnik::context_type;
 using mapnik::context_ptr;
 using mapnik::feature_kv_iterator;
 
-mapnik::geometry_type const& (mapnik::feature_impl::*get_geometry_by_const_ref)(unsigned) const = &mapnik::feature_impl::get_geometry;
-boost::ptr_vector<mapnik::geometry_type> const& (mapnik::feature_impl::*get_paths_by_const_ref)() const = &mapnik::feature_impl::paths;
+mapnik::geometry_type const& (mapnik::feature_impl::*get_geometry_by_const_ref)(std::size_t) const = &mapnik::feature_impl::get_geometry;
+mapnik::geometry_container const& (mapnik::feature_impl::*get_paths_by_const_ref)() const = &mapnik::feature_impl::paths;
 
-void feature_add_geometries_from_wkb(mapnik::feature_impl &feature, std::string wkb)
+void feature_add_geometries_from_wkb(mapnik::feature_impl & feature, std::string wkb)
 {
-    geometry_utils::from_wkb(feature.paths(), wkb.c_str(), wkb.size());
+    bool result = geometry_utils::from_wkb(feature.paths(), wkb.c_str(), wkb.size());
+    if (!result) throw std::runtime_error("Failed to parse WKB");
 }
 
-void feature_add_geometries_from_wkt(mapnik::feature_impl &feature, std::string wkt)
+void feature_add_geometries_from_wkt(mapnik::feature_impl & feature, std::string const& wkt)
 {
     bool result = mapnik::from_wkt(wkt, feature.paths());
     if (!result) throw std::runtime_error("Failed to parse WKT");
 }
 
+mapnik::feature_ptr from_geojson_impl(std::string const& json, mapnik::context_ptr const& ctx)
+{
+    mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx,1));
+    if (!mapnik::json::from_geojson(json,*feature))
+    {
+        throw std::runtime_error("Failed to parse geojson feature");
+    }
+    return feature;
+}
+
 std::string feature_to_geojson(mapnik::feature_impl const& feature)
 {
     std::string json;
-    mapnik::json::feature_generator g;
-    if (!g.generate(json,feature))
+    if (!mapnik::json::to_geojson(json,feature))
     {
         throw std::runtime_error("Failed to generate GeoJSON");
     }
@@ -97,7 +116,7 @@ boost::python::dict attributes(mapnik::feature_impl const& f)
 
     for ( ;itr!=end; ++itr)
     {
-        attributes[boost::get<0>(*itr)] = boost::get<1>(*itr);
+        attributes[std::get<0>(*itr)] = std::get<1>(*itr);
     }
 
     return attributes;
@@ -105,14 +124,14 @@ boost::python::dict attributes(mapnik::feature_impl const& f)
 
 } // end anonymous namespace
 
-struct UnicodeString_from_python_str
+struct unicode_string_from_python_str
 {
-    UnicodeString_from_python_str()
+    unicode_string_from_python_str()
     {
         boost::python::converter::registry::push_back(
             &convertible,
             &construct,
-            boost::python::type_id<UnicodeString>());
+            boost::python::type_id<mapnik::value_unicode_string>());
     }
 
     static void* convertible(PyObject* obj_ptr)
@@ -152,9 +171,9 @@ struct UnicodeString_from_python_str
         }
         if (value == 0) boost::python::throw_error_already_set();
         void* storage = (
-            (boost::python::converter::rvalue_from_python_storage<UnicodeString>*)
+            (boost::python::converter::rvalue_from_python_storage<mapnik::value_unicode_string>*)
             data)->storage.bytes;
-        new (storage) UnicodeString(value);
+        new (storage) mapnik::value_unicode_string(value);
         data->convertible = storage;
     }
 };
@@ -203,7 +222,7 @@ void export_feature()
     implicitly_convertible<mapnik::value_bool,mapnik::value>();
 
     // http://misspent.wordpress.com/2009/09/27/how-to-write-boost-python-converters/
-    UnicodeString_from_python_str();
+    unicode_string_from_python_str();
     value_null_from_python();
 
     class_<context_type,context_ptr,boost::noncopyable>
@@ -211,10 +230,9 @@ void export_feature()
         .def("push", &context_type::push)
         ;
 
-    class_<mapnik::feature_impl,boost::shared_ptr<mapnik::feature_impl>,
+    class_<mapnik::feature_impl,std::shared_ptr<mapnik::feature_impl>,
         boost::noncopyable>("Feature",init<context_ptr,mapnik::value_integer>("Default ctor."))
         .def("id",&mapnik::feature_impl::id)
-        .def("__str__",&mapnik::feature_impl::to_string)
         .def("add_geometries_from_wkb", &feature_add_geometries_from_wkb)
         .def("add_geometries_from_wkt", &feature_add_geometries_from_wkt)
         .def("add_geometry", &mapnik::feature_impl::add_geometry)
@@ -231,5 +249,7 @@ void export_feature()
         .def("__len__", &mapnik::feature_impl::size)
         .def("context",&mapnik::feature_impl::context)
         .def("to_geojson",&feature_to_geojson)
+        .def("from_geojson",from_geojson_impl)
+        .staticmethod("from_geojson")
         ;
 }
diff --git a/bindings/python/mapnik_featureset.cpp b/bindings/python/mapnik_featureset.cpp
index c1f7eec..b6d0fe3 100644
--- a/bindings/python/mapnik_featureset.cpp
+++ b/bindings/python/mapnik_featureset.cpp
@@ -20,9 +20,18 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/noncopyable.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/feature.hpp>
@@ -65,7 +74,7 @@ inline mapnik::feature_ptr next(mapnik::featureset_ptr const& itr)
 void export_featureset()
 {
     using namespace boost::python;
-    class_<mapnik::Featureset,boost::shared_ptr<mapnik::Featureset>,
+    class_<mapnik::Featureset,std::shared_ptr<mapnik::Featureset>,
         boost::noncopyable>("Featureset",no_init)
         .def("__iter__",pass_through)
         .def("next",next)
diff --git a/bindings/python/mapnik_font_engine.cpp b/bindings/python/mapnik_font_engine.cpp
index 1742de2..0da036f 100644
--- a/bindings/python/mapnik_font_engine.cpp
+++ b/bindings/python/mapnik_font_engine.cpp
@@ -20,10 +20,21 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
+// boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/noncopyable.hpp>
+#pragma GCC diagnostic pop
 
 #include <mapnik/font_engine_freetype.hpp>
+#include <mapnik/utils.hpp>
 
 void export_font_engine()
 {
diff --git a/bindings/python/mapnik_fontset.cpp b/bindings/python/mapnik_fontset.cpp
index fbc94a2..89668a0 100644
--- a/bindings/python/mapnik_fontset.cpp
+++ b/bindings/python/mapnik_fontset.cpp
@@ -20,9 +20,17 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
 
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 //mapnik
 #include <mapnik/font_set.hpp>
diff --git a/bindings/python/mapnik_gamma_method.cpp b/bindings/python/mapnik_gamma_method.cpp
index 23b832d..7d82d41 100644
--- a/bindings/python/mapnik_gamma_method.cpp
+++ b/bindings/python/mapnik_gamma_method.cpp
@@ -20,9 +20,18 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 
 #include <boost/python.hpp>
-#include <mapnik/gamma_method.hpp>
+#pragma GCC diagnostic pop
+
+#include <mapnik/symbolizer_enumerations.hpp>
 #include "mapnik_enumeration.hpp"
 
 void export_gamma_method()
diff --git a/bindings/python/mapnik_geometry.cpp b/bindings/python/mapnik_geometry.cpp
index 8eeafc4..fb0e6da 100644
--- a/bindings/python/mapnik_geometry.cpp
+++ b/bindings/python/mapnik_geometry.cpp
@@ -18,42 +18,41 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/def.hpp>
 #include <boost/python/exception_translator.hpp>
 #include <boost/python/manage_new_object.hpp>
 #include <boost/python/iterator.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
-#include <boost/make_shared.hpp>
 #include <boost/noncopyable.hpp>
-
+#include <boost/version.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/geometry.hpp>
-#include <mapnik/wkt/wkt_factory.hpp>
-#include <mapnik/wkb.hpp>
-#include <mapnik/json/geometry_parser.hpp>
-#include <mapnik/json/geojson_generator.hpp>
-
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104700
-#include <mapnik/util/geometry_to_wkb.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/wkt/wkt_factory.hpp> // from_wkt
 #include <mapnik/util/geometry_to_wkt.hpp>
+#include <mapnik/json/geometry_parser.hpp> // from_geojson
+#include <mapnik/util/geometry_to_geojson.hpp>
 #include <mapnik/util/geometry_to_svg.hpp>
-#endif
+#include <mapnik/wkb.hpp>
+#include <mapnik/util/geometry_to_wkb.hpp>
 
 // stl
 #include <stdexcept>
 
 namespace {
 
-using mapnik::from_wkt;
-using mapnik::geometry_type;
-
-typedef boost::ptr_vector<geometry_type> path_type;
-
-geometry_type const& getitem_impl(path_type & p, int key)
+mapnik::geometry_type const& getitem_impl(mapnik::geometry_container & p, int key)
 {
     if (key >=0 && key < static_cast<int>(p.size()))
         return p[key];
@@ -61,53 +60,53 @@ geometry_type const& getitem_impl(path_type & p, int key)
     throw boost::python::error_already_set();
 }
 
-void add_wkt_impl(path_type& p, std::string const& wkt)
+void add_wkt_impl(mapnik::geometry_container& p, std::string const& wkt)
 {
     if (!mapnik::from_wkt(wkt , p))
         throw std::runtime_error("Failed to parse WKT");
 }
 
-void add_wkb_impl(path_type& p, std::string const& wkb)
+void add_wkb_impl(mapnik::geometry_container& p, std::string const& wkb)
 {
     if (!mapnik::geometry_utils::from_wkb(p, wkb.c_str(), wkb.size()))
         throw std::runtime_error("Failed to parse WKB");
 }
 
-void add_geojson_impl(path_type& p, std::string const& json)
+void add_geojson_impl(mapnik::geometry_container& paths, std::string const& json)
 {
-    if (!mapnik::json::from_geojson(json, p))
+    if (!mapnik::json::from_geojson(json, paths))
         throw std::runtime_error("Failed to parse geojson geometry");
 }
 
-boost::shared_ptr<path_type> from_wkt_impl(std::string const& wkt)
+std::shared_ptr<mapnik::geometry_container> from_wkt_impl(std::string const& wkt)
 {
-    boost::shared_ptr<path_type> paths = boost::make_shared<path_type>();
+    std::shared_ptr<mapnik::geometry_container> paths = std::make_shared<mapnik::geometry_container>();
     if (!mapnik::from_wkt(wkt, *paths))
         throw std::runtime_error("Failed to parse WKT");
     return paths;
 }
 
-boost::shared_ptr<path_type> from_wkb_impl(std::string const& wkb)
+std::shared_ptr<mapnik::geometry_container> from_wkb_impl(std::string const& wkb)
 {
-    boost::shared_ptr<path_type> paths = boost::make_shared<path_type>();
+    std::shared_ptr<mapnik::geometry_container> paths = std::make_shared<mapnik::geometry_container>();
     if (!mapnik::geometry_utils::from_wkb(*paths, wkb.c_str(), wkb.size()))
         throw std::runtime_error("Failed to parse WKB");
     return paths;
 }
 
-boost::shared_ptr<path_type> from_geojson_impl(std::string const& json)
+std::shared_ptr<mapnik::geometry_container> from_geojson_impl(std::string const& json)
 {
-    boost::shared_ptr<path_type> paths = boost::make_shared<path_type>();
-    if (! mapnik::json::from_geojson(json, *paths))
+    std::shared_ptr<mapnik::geometry_container> paths = std::make_shared<mapnik::geometry_container>();
+    if (!mapnik::json::from_geojson(json, *paths))
         throw std::runtime_error("Failed to parse geojson geometry");
     return paths;
 }
 
-mapnik::box2d<double> envelope_impl(path_type & p)
+mapnik::box2d<double> envelope_impl(mapnik::geometry_container & p)
 {
     mapnik::box2d<double> b;
     bool first = true;
-    BOOST_FOREACH(mapnik::geometry_type const& geom, p)
+    for (mapnik::geometry_type const& geom : p)
     {
         if (first)
         {
@@ -131,8 +130,7 @@ inline std::string boost_version()
     return s.str();
 }
 
-#if BOOST_VERSION >= 104700
-PyObject* to_wkb( geometry_type const& geom, mapnik::util::wkbByteOrder byte_order)
+PyObject* to_wkb(mapnik::geometry_type const& geom, mapnik::util::wkbByteOrder byte_order)
 {
     mapnik::util::wkb_buffer_ptr wkb = mapnik::util::to_wkb(geom,byte_order);
     if (wkb)
@@ -150,17 +148,8 @@ PyObject* to_wkb( geometry_type const& geom, mapnik::util::wkbByteOrder byte_ord
         Py_RETURN_NONE;
     }
 }
-#else
-PyObject* to_wkb( geometry_type const& geom)
-{
-    throw std::runtime_error("mapnik::to_wkb() requires at least boost 1.47 while your build was compiled against boost "
-                             + boost_version());
-}
-#endif
-
 
-#if BOOST_VERSION >= 104700
-PyObject* to_wkb2( path_type const& p, mapnik::util::wkbByteOrder byte_order)
+PyObject* to_wkb2( mapnik::geometry_container const& p, mapnik::util::wkbByteOrder byte_order)
 {
     mapnik::util::wkb_buffer_ptr wkb = mapnik::util::to_wkb(p,byte_order);
     if (wkb)
@@ -178,79 +167,61 @@ PyObject* to_wkb2( path_type const& p, mapnik::util::wkbByteOrder byte_order)
         Py_RETURN_NONE;
     }
 }
-#else
-PyObject* to_wkb2( path_type const& p)
+
+std::string to_wkt(mapnik::geometry_type const& geom)
 {
-    throw std::runtime_error("mapnik::to_wkb() requires at least boost 1.47 while your build was compiled against boost "
-                             + boost_version());
+    std::string wkt;
+    if (!mapnik::util::to_wkt(wkt,geom))
+    {
+        throw std::runtime_error("Generate WKT failed");
+    }
+    return wkt;
 }
-#endif
-
 
-std::string to_wkt( geometry_type const& geom)
+std::string to_wkt2(mapnik::geometry_container const& geom)
 {
-#if BOOST_VERSION >= 104700
-    std::string wkt; // Use Python String directly ?
-    bool result = mapnik::util::to_wkt(wkt,geom);
-    if (!result)
+    std::string wkt;
+    if (!mapnik::util::to_wkt(wkt,geom))
     {
         throw std::runtime_error("Generate WKT failed");
     }
     return wkt;
-#else
-    throw std::runtime_error("mapnik::to_wkt() requires at least boost 1.47 while your build was compiled against boost "
-                             + boost_version());
-#endif
 }
 
-std::string to_wkt2( path_type const& geom)
+std::string to_geojson(mapnik::geometry_type const& geom)
 {
-#if BOOST_VERSION >= 104700
-    std::string wkt; // Use Python String directly ?
-    bool result = mapnik::util::to_wkt(wkt,geom);
-    if (!result)
+    std::string wkt;
+    if (!mapnik::util::to_geojson(wkt,geom))
     {
-        throw std::runtime_error("Generate WKT failed");
+        throw std::runtime_error("Generate JSON failed");
     }
     return wkt;
-#else
-    throw std::runtime_error("mapnik::to_wkt() requires at least boost 1.47 while your build was compiled against boost "
-                             + boost_version());
-#endif
 }
 
-std::string to_geojson( path_type const& geom)
+std::string to_geojson2(mapnik::geometry_container const& geom)
 {
-    std::string json;
-    mapnik::json::geometry_generator g;
-    if (!g.generate(json,geom))
+    std::string wkt;
+    if (!mapnik::util::to_geojson(wkt,geom))
     {
-        throw std::runtime_error("Failed to generate GeoJSON");
+        throw std::runtime_error("Generate JSON failed");
     }
-    return json;
+    return wkt;
 }
 
-std::string to_svg( geometry_type const& geom)
+std::string to_svg(mapnik::geometry_type const& geom)
 {
-#if BOOST_VERSION >= 104700
-    std::string svg; // Use Python String directly ?
-    bool result = mapnik::util::to_svg(svg,geom);
-    if (!result)
+    std::string svg;
+    if (!mapnik::util::to_svg(svg,geom))
     {
         throw std::runtime_error("Generate SVG failed");
     }
     return svg;
-#else
-    throw std::runtime_error("mapnik::to_svg() requires at least boost 1.47 while your build was compiled against boost "
-                             + boost_version());
-#endif
 }
 
 /*
 // https://github.com/mapnik/mapnik/issues/1437
-std::string to_svg2( path_type const& geom)
+std::string to_svg2( mapnik::geometry_container const& geom)
 {
-#if BOOST_VERSION >= 104700
     std::string svg; // Use Python String directly ?
     bool result = mapnik::util::to_svg(svg,geom);
     if (!result)
@@ -258,10 +229,6 @@ std::string to_svg2( path_type const& geom)
         throw std::runtime_error("Generate WKT failed");
     }
     return svg;
-#else
-    throw std::runtime_error("mapnik::to_svg() requires at least boost 1.47 while your build was compiled against boost "
-                             + boost_version());
-#endif
 }*/
 
 
@@ -269,33 +236,32 @@ void export_geometry()
 {
     using namespace boost::python;
 
-    enum_<mapnik::eGeomType>("GeometryType")
-        .value("Point",mapnik::Point)
-        .value("LineString",mapnik::LineString)
-        .value("Polygon",mapnik::Polygon)
+    enum_<mapnik::geometry_type::types>("GeometryType")
+        .value("Point",mapnik::geometry_type::types::Point)
+        .value("LineString",mapnik::geometry_type::types::LineString)
+        .value("Polygon",mapnik::geometry_type::types::Polygon)
         ;
 
-#if BOOST_VERSION >= 104700
     enum_<mapnik::util::wkbByteOrder>("wkbByteOrder")
         .value("XDR",mapnik::util::wkbXDR)
         .value("NDR",mapnik::util::wkbNDR)
         ;
-#endif
 
     using mapnik::geometry_type;
-    class_<geometry_type, std::auto_ptr<geometry_type>, boost::noncopyable>("Geometry2d",no_init)
-        .def("envelope",&geometry_type::envelope)
-        // .def("__str__",&geometry_type::to_string)
-        .def("type",&geometry_type::type)
+    class_<mapnik::geometry_type, std::shared_ptr<mapnik::geometry_type>, boost::noncopyable>("Geometry2d",no_init)
+        .def("envelope",&mapnik::geometry_type::envelope)
+        // .def("__str__",&mapnik::geometry_type::to_string)
+        .def("type",&mapnik::geometry_type::type)
         .def("to_wkb",&to_wkb)
         .def("to_wkt",&to_wkt)
+        .def("to_geojson",&to_geojson)
         .def("to_svg",&to_svg)
         // TODO add other geometry_type methods
         ;
 
-    class_<path_type, boost::shared_ptr<path_type>, boost::noncopyable>("Path")
+    class_<mapnik::geometry_container, std::shared_ptr<mapnik::geometry_container>, boost::noncopyable>("Path")
         .def("__getitem__", getitem_impl,return_value_policy<reference_existing_object>())
-        .def("__len__", &path_type::size)
+        .def("__len__", &mapnik::geometry_container::size)
         .def("envelope",envelope_impl)
         .def("add_wkt",add_wkt_impl)
         .def("add_wkb",add_wkb_impl)
@@ -306,7 +272,7 @@ void export_geometry()
         .def("from_wkt",from_wkt_impl)
         .def("from_wkb",from_wkb_impl)
         .def("from_geojson",from_geojson_impl)
-        .def("to_geojson",to_geojson)
+        .def("to_geojson",&to_geojson2)
         .staticmethod("from_wkt")
         .staticmethod("from_wkb")
         .staticmethod("from_geojson")
diff --git a/bindings/python/mapnik_grid.cpp b/bindings/python/mapnik_grid.cpp
index 1118d3b..2bb5f2b 100644
--- a/bindings/python/mapnik_grid.cpp
+++ b/bindings/python/mapnik_grid.cpp
@@ -20,10 +20,21 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/module.hpp>
 #include <boost/python/def.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/grid/grid.hpp>
@@ -53,7 +64,7 @@ mapnik::grid::value_type get_pixel(mapnik::grid const& grid, int x, int y)
 
 void export_grid()
 {
-    class_<mapnik::grid,boost::shared_ptr<mapnik::grid> >(
+    class_<mapnik::grid,std::shared_ptr<mapnik::grid> >(
         "Grid",
         "This class represents a feature hitgrid.",
         init<int,int,std::string,unsigned>(
@@ -80,3 +91,5 @@ void export_grid()
         ;
 
 }
+
+#endif
diff --git a/bindings/python/mapnik_grid_view.cpp b/bindings/python/mapnik_grid_view.cpp
index aa29dda..0666283 100644
--- a/bindings/python/mapnik_grid_view.cpp
+++ b/bindings/python/mapnik_grid_view.cpp
@@ -20,10 +20,21 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/module.hpp>
 #include <boost/python/def.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <string>
@@ -39,7 +50,7 @@ static dict (*encode)( mapnik::grid_view const&, std::string const& , bool, unsi
 void export_grid_view()
 {
     class_<mapnik::grid_view,
-        boost::shared_ptr<mapnik::grid_view> >("GridView",
+        std::shared_ptr<mapnik::grid_view> >("GridView",
                                                "This class represents a feature hitgrid subset.",no_init)
         .def("width",&mapnik::grid_view::width)
         .def("height",&mapnik::grid_view::height)
@@ -49,3 +60,5 @@ void export_grid_view()
             )
         ;
 }
+
+#endif
diff --git a/bindings/python/mapnik_image.cpp b/bindings/python/mapnik_image.cpp
index 5dde3c8..0e16c7d 100644
--- a/bindings/python/mapnik_image.cpp
+++ b/bindings/python/mapnik_image.cpp
@@ -20,11 +20,19 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/module.hpp>
 #include <boost/python/def.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/graphics.hpp>
@@ -35,8 +43,9 @@
 
 // cairo
 #if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
-#include <mapnik/cairo_context.hpp>
+#include <mapnik/cairo/cairo_context.hpp>
 #include <pycairo.h>
+#include <cairo.h>
 #endif
 
 using mapnik::image_32;
@@ -146,16 +155,16 @@ void set_pixel(mapnik::image_32 & im, unsigned x, unsigned y, mapnik::color cons
     im.setPixel(x, y, c.rgba());
 }
 
-boost::shared_ptr<image_32> open_from_file(std::string const& filename)
+std::shared_ptr<image_32> open_from_file(std::string const& filename)
 {
     boost::optional<std::string> type = type_from_filename(filename);
     if (type)
     {
-        std::auto_ptr<image_reader> reader(get_image_reader(filename,*type));
+        std::unique_ptr<image_reader> reader(get_image_reader(filename,*type));
         if (reader.get())
         {
 
-            boost::shared_ptr<image_32> image_ptr = boost::make_shared<image_32>(reader->width(),reader->height());
+            std::shared_ptr<image_32> image_ptr = std::make_shared<image_32>(reader->width(),reader->height());
             reader->read(0,0,image_ptr->data());
             return image_ptr;
         }
@@ -164,28 +173,28 @@ boost::shared_ptr<image_32> open_from_file(std::string const& filename)
     throw mapnik::image_reader_exception("Unsupported image format:" + filename);
 }
 
-boost::shared_ptr<image_32> fromstring(std::string const& str)
+std::shared_ptr<image_32> fromstring(std::string const& str)
 {
-    std::auto_ptr<image_reader> reader(get_image_reader(str.c_str(),str.size()));
+    std::unique_ptr<image_reader> reader(get_image_reader(str.c_str(),str.size()));
     if (reader.get())
     {
-        boost::shared_ptr<image_32> image_ptr = boost::make_shared<image_32>(reader->width(),reader->height());
+        std::shared_ptr<image_32> image_ptr = std::make_shared<image_32>(reader->width(),reader->height());
         reader->read(0,0,image_ptr->data());
         return image_ptr;
     }
     throw mapnik::image_reader_exception("Failed to load image from buffer" );
 }
 
-boost::shared_ptr<image_32> frombuffer(PyObject * obj)
+std::shared_ptr<image_32> frombuffer(PyObject * obj)
 {
     void const* buffer=0;
     Py_ssize_t buffer_len;
     if (PyObject_AsReadBuffer(obj, &buffer, &buffer_len) == 0)
     {
-        std::auto_ptr<image_reader> reader(get_image_reader(reinterpret_cast<char const*>(buffer),buffer_len));
+        std::unique_ptr<image_reader> reader(get_image_reader(reinterpret_cast<char const*>(buffer),buffer_len));
         if (reader.get())
         {
-            boost::shared_ptr<image_32> image_ptr = boost::make_shared<image_32>(reader->width(),reader->height());
+            std::shared_ptr<image_32> image_ptr = std::make_shared<image_32>(reader->width(),reader->height());
             reader->read(0,0,image_ptr->data());
             return image_ptr;
         }
@@ -205,10 +214,10 @@ void composite(image_32 & dst, image_32 & src, mapnik::composite_mode_e mode, fl
 }
 
 #if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
-boost::shared_ptr<image_32> from_cairo(PycairoSurface* py_surface)
+std::shared_ptr<image_32> from_cairo(PycairoSurface* py_surface)
 {
-    mapnik::cairo_surface_ptr surface(py_surface->surface, mapnik::cairo_surface_closer());
-    boost::shared_ptr<image_32> image_ptr = boost::make_shared<image_32>(surface);
+    mapnik::cairo_surface_ptr surface(cairo_surface_reference(py_surface->surface), mapnik::cairo_surface_closer());
+    std::shared_ptr<image_32> image_ptr = std::make_shared<image_32>(surface);
     return image_ptr;
 }
 #endif
@@ -251,9 +260,12 @@ void export_image()
         .value("saturation", mapnik::saturation)
         .value("color", mapnik::_color)
         .value("value", mapnik::_value)
+        .value("linear_dodge", mapnik::linear_dodge)
+        .value("linear_burn", mapnik::linear_burn)
+        .value("divide", mapnik::divide)
         ;
 
-    class_<image_32,boost::shared_ptr<image_32> >("Image","This class represents a 32 bit RGBA image.",init<int,int>())
+    class_<image_32,std::shared_ptr<image_32> >("Image","This class represents a 32 bit RGBA image.",init<int,int>())
         .def("width",&image_32::width)
         .def("height",&image_32::height)
         .def("view",&image_32::get_view)
@@ -272,6 +284,7 @@ void export_image()
            arg("mode")=mapnik::src_over,
            arg("opacity")=1.0f
          ))
+        .def("premultiplied",&image_32::premultiplied)
         .def("premultiply",&image_32::premultiply)
         .def("demultiply",&image_32::demultiply)
         .def("set_pixel",&set_pixel)
diff --git a/bindings/python/mapnik_image_view.cpp b/bindings/python/mapnik_image_view.cpp
index 63bb615..d68afa2 100644
--- a/bindings/python/mapnik_image_view.cpp
+++ b/bindings/python/mapnik_image_view.cpp
@@ -20,8 +20,21 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
+// boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 
 #include <boost/python.hpp>
+#include <boost/python/module.hpp>
+#include <boost/python/def.hpp>
+#pragma GCC diagnostic pop
+
+// mapnik
 #include <mapnik/image_data.hpp>
 #include <mapnik/image_view.hpp>
 #include <mapnik/image_util.hpp>
diff --git a/bindings/python/mapnik_label_collision_detector.cpp b/bindings/python/mapnik_label_collision_detector.cpp
index 55747e4..762f925 100644
--- a/bindings/python/mapnik_label_collision_detector.cpp
+++ b/bindings/python/mapnik_label_collision_detector.cpp
@@ -20,12 +20,19 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
+// boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/module.hpp>
 #include <boost/python/def.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/noncopyable.hpp>
-
+#pragma GCC diagnostic pop
 
 #include <mapnik/label_collision_detector.hpp>
 #include <mapnik/map.hpp>
@@ -35,27 +42,26 @@
 using mapnik::label_collision_detector4;
 using mapnik::box2d;
 using mapnik::Map;
-using boost::make_shared;
 
 namespace
 {
 
-boost::shared_ptr<label_collision_detector4>
+std::shared_ptr<label_collision_detector4>
 create_label_collision_detector_from_extent(box2d<double> const &extent)
 {
-    return make_shared<label_collision_detector4>(extent);
+    return std::make_shared<label_collision_detector4>(extent);
 }
 
-boost::shared_ptr<label_collision_detector4>
+std::shared_ptr<label_collision_detector4>
 create_label_collision_detector_from_map(Map const &m)
 {
     double buffer = m.buffer_size();
     box2d<double> extent(-buffer, -buffer, m.width() + buffer, m.height() + buffer);
-    return make_shared<label_collision_detector4>(extent);
+    return std::make_shared<label_collision_detector4>(extent);
 }
 
 boost::python::list
-make_label_boxes(boost::shared_ptr<label_collision_detector4> det)
+make_label_boxes(std::shared_ptr<label_collision_detector4> det)
 {
     boost::python::list boxes;
 
@@ -77,7 +83,7 @@ void export_label_collision_detector()
     // for overload resolution
     void (label_collision_detector4::*insert_box)(box2d<double> const &) = &label_collision_detector4::insert;
 
-    class_<label_collision_detector4, boost::shared_ptr<label_collision_detector4>, boost::noncopyable>
+    class_<label_collision_detector4, std::shared_ptr<label_collision_detector4>, boost::noncopyable>
         ("LabelCollisionDetector",
          "Object to detect collisions between labels, used in the rendering process.",
          no_init)
diff --git a/bindings/python/mapnik_layer.cpp b/bindings/python/mapnik_layer.cpp
index 4656a52..e463afe 100644
--- a/bindings/python/mapnik_layer.cpp
+++ b/bindings/python/mapnik_layer.cpp
@@ -20,10 +20,18 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/python/detail/api_placeholder.hpp>
 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/layer.hpp>
@@ -374,6 +382,7 @@ void export_layer()
                       ">>> lyr.styles[0]\n"
                       "'My Style'\n"
             )
-
+        // comparison
+        .def(self == self)
         ;
 }
diff --git a/bindings/python/mapnik_line_pattern_symbolizer.cpp b/bindings/python/mapnik_line_pattern_symbolizer.cpp
deleted file mode 100644
index 527bd35..0000000
--- a/bindings/python/mapnik_line_pattern_symbolizer.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-
-#include <mapnik/line_pattern_symbolizer.hpp>
-#include <mapnik/parse_path.hpp>
-#include <mapnik/image_util.hpp>
-#include "mapnik_svg.hpp"
-
-using mapnik::line_pattern_symbolizer;
-using mapnik::path_processor_type;
-using mapnik::path_expression_ptr;
-using mapnik::guess_type;
-using mapnik::parse_path;
-
-
-namespace {
-using namespace boost::python;
-
-std::string get_filename(line_pattern_symbolizer const& t)
-{
-    return path_processor_type::to_string(*t.get_filename());
-}
-
-void set_filename(line_pattern_symbolizer & t, std::string const& file_expr)
-{
-    t.set_filename(parse_path(file_expr));
-}
-
-}
-
-void export_line_pattern_symbolizer()
-{
-    using namespace boost::python;
-
-    class_<line_pattern_symbolizer>("LinePatternSymbolizer",
-                                    init<path_expression_ptr>
-                                    ("<image file expression>"))
-        .add_property("transform",
-                      mapnik::get_svg_transform<line_pattern_symbolizer>,
-                      mapnik::set_svg_transform<line_pattern_symbolizer>)
-        .add_property("filename",
-                      &get_filename,
-                      &set_filename)
-        .add_property("comp_op",
-                      &line_pattern_symbolizer::comp_op,
-                      &line_pattern_symbolizer::set_comp_op,
-                      "Set/get the comp-op")
-        .add_property("clip",
-                      &line_pattern_symbolizer::clip,
-                      &line_pattern_symbolizer::set_clip,
-                      "Set/get the line pattern geometry's clipping status")
-        .add_property("smooth",
-                      &line_pattern_symbolizer::smooth,
-                      &line_pattern_symbolizer::set_smooth,
-                      "smooth value (0..1.0)")
-        ;
-}
diff --git a/bindings/python/mapnik_line_symbolizer.cpp b/bindings/python/mapnik_line_symbolizer.cpp
deleted file mode 100644
index eeca7ec..0000000
--- a/bindings/python/mapnik_line_symbolizer.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-#include "mapnik_enumeration.hpp"
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/symbolizer_hash.hpp>
-
-using namespace mapnik;
-using mapnik::line_symbolizer;
-using mapnik::stroke;
-using mapnik::color;
-
-std::size_t line_symbolizer_hash(line_symbolizer const& sym)
-{
-    return symbolizer_hash::value(sym);
-}
-
-
-void export_line_symbolizer()
-{
-    using namespace boost::python;
-    enumeration_<line_rasterizer_e>("line_rasterizer")
-        .value("FULL",RASTERIZER_FULL)
-        .value("FAST",RASTERIZER_FAST)
-        ;
-    class_<line_symbolizer>("LineSymbolizer",
-                            init<>("Default LineSymbolizer - 1px solid black"))
-        .def(init<stroke const&>("TODO"))
-        .def(init<color const& ,float>())
-        .add_property("rasterizer",
-                      &line_symbolizer::get_rasterizer,
-                      &line_symbolizer::set_rasterizer,
-                      "Set/get the rasterization method of the line of the point")
-        .add_property("stroke",make_function
-                      (&line_symbolizer::get_stroke,
-                       return_value_policy<reference_existing_object>()),
-                      &line_symbolizer::set_stroke)
-        .add_property("simplify_tolerance",
-                      &line_symbolizer::simplify_tolerance,
-                      &line_symbolizer::set_simplify_tolerance,
-                      "simplification tolerance measure")
-        .add_property("offset",
-                      &line_symbolizer::offset,
-                      &line_symbolizer::set_offset,
-                      "offset value")
-        .add_property("comp_op",
-                      &line_symbolizer::comp_op,
-                      &line_symbolizer::set_comp_op,
-                      "Set/get the comp-op")
-        .add_property("clip",
-                      &line_symbolizer::clip,
-                      &line_symbolizer::set_clip,
-                      "Set/get the line geometry's clipping status")
-        .add_property("smooth",
-                      &line_symbolizer::smooth,
-                      &line_symbolizer::set_smooth,
-                      "smooth value (0..1.0)")
-        .def("__hash__", line_symbolizer_hash)
-        ;
-}
diff --git a/bindings/python/mapnik_logger.cpp b/bindings/python/mapnik_logger.cpp
index fee924e..d26c2ff 100644
--- a/bindings/python/mapnik_logger.cpp
+++ b/bindings/python/mapnik_logger.cpp
@@ -20,8 +20,18 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
+// boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/noncopyable.hpp>
+#pragma GCC diagnostic pop
 
 #include <mapnik/debug.hpp>
 #include <mapnik/utils.hpp>
diff --git a/bindings/python/mapnik_map.cpp b/bindings/python/mapnik_map.cpp
index 6a46bc8..3363e53 100644
--- a/bindings/python/mapnik_map.cpp
+++ b/bindings/python/mapnik_map.cpp
@@ -20,21 +20,29 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/python/detail/api_placeholder.hpp>
+#include <boost/noncopyable.hpp>
 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
 #include <boost/python/iterator.hpp>
 #include <boost/iterator/transform_iterator.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/rule.hpp>
 #include <mapnik/layer.hpp>
 #include <mapnik/map.hpp>
 #include <mapnik/projection.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 #include <mapnik/feature_type_style.hpp>
-//#include <mapnik/util/deepcopy.hpp>
 #include "mapnik_enumeration.hpp"
 
 using mapnik::color;
@@ -47,6 +55,16 @@ std::vector<layer>& (Map::*layers_nonconst)() =  &Map::layers;
 std::vector<layer> const& (Map::*layers_const)() const =  &Map::layers;
 mapnik::parameters& (Map::*params_nonconst)() =  &Map::get_extra_parameters;
 
+void insert_style(mapnik::Map & m, std::string const& name, mapnik::feature_type_style const& style)
+{
+    m.insert_style(name,style);
+}
+
+void insert_fontset(mapnik::Map & m, std::string const& name, mapnik::font_set const& fontset)
+{
+    m.insert_fontset(name,fontset);
+}
+
 mapnik::feature_type_style find_style(mapnik::Map const& m, std::string const& name)
 {
     boost::optional<mapnik::feature_type_style const&> style = m.find_style(name);
@@ -91,17 +109,6 @@ mapnik::featureset_ptr query_map_point(mapnik::Map const& m, int index, double x
     return m.query_map_point(idx, x, y);
 }
 
-// deepcopy
-/*
-mapnik::Map map_deepcopy(mapnik::Map & m, boost::python::dict memo)
-{
-    // FIXME: ignore memo for now
-    mapnik::Map result;
-    mapnik::util::deepcopy(m, result);
-    return result;
-}
-*/
-
 void set_maximum_extent(mapnik::Map & m, boost::optional<mapnik::box2d<double> > const& box)
 {
     if (box)
@@ -116,15 +123,15 @@ void set_maximum_extent(mapnik::Map & m, boost::optional<mapnik::box2d<double> >
 
 struct extract_style
 {
-    typedef boost::python::tuple result_type;
+    using result_type = boost::python::tuple;
     result_type operator() (std::map<std::string, mapnik::feature_type_style>::value_type const& val) const
     {
         return boost::python::make_tuple(val.first,val.second);
     }
 };
 
-typedef boost::transform_iterator<extract_style, Map::const_style_iterator> style_extract_iterator;
-typedef std::pair<style_extract_iterator,style_extract_iterator> style_range;
+using style_extract_iterator = boost::transform_iterator<extract_style, Map::const_style_iterator>;
+using style_range = std::pair<style_extract_iterator,style_extract_iterator>;
 
 style_range _styles_ (mapnik::Map const& m)
 {
@@ -147,6 +154,7 @@ void export_map()
         .value("ADJUST_BBOX_HEIGHT",mapnik::Map::ADJUST_BBOX_HEIGHT)
         .value("ADJUST_CANVAS_WIDTH",mapnik::Map::ADJUST_CANVAS_WIDTH)
         .value("ADJUST_CANVAS_HEIGHT", mapnik::Map::ADJUST_CANVAS_HEIGHT)
+        .value("RESPECT", mapnik::Map::RESPECT)
         ;
 
     class_<std::vector<layer> >("Layers")
@@ -174,7 +182,7 @@ void export_map()
                     "'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
                     ))
 
-        .def("append_style",&Map::insert_style,
+        .def("append_style",insert_style,
              (arg("style_name"),arg("style_object")),
              "Insert a Mapnik Style onto the map by appending it.\n"
              "\n"
@@ -187,7 +195,7 @@ void export_map()
              "False # you can only append styles with unique names\n"
             )
 
-        .def("append_fontset",&Map::insert_fontset,
+        .def("append_fontset",insert_fontset,
              (arg("fontset")),
              "Add a FontSet to the map."
             )
@@ -344,7 +352,7 @@ void export_map()
              ">>> m.scale_denominator()\n"
             )
 
-        .def("view_transform",&Map::view_transform,
+        .def("view_transform",&Map::transform,
              "Return the map ViewTransform object\n"
              "which is used internally to convert between\n"
              "geographic coordinates and screen coordinates.\n"
@@ -356,8 +364,8 @@ void export_map()
         .def("zoom",&Map::zoom,
              (arg("factor")),
              "Zoom in or out by a given factor.\n"
-             "Positive number zooms in, negative number\n"
-             "zooms out.\n"
+             "positive number larger than 1, zooms out\n"
+             "positive number smaller than 1, zooms in\n"
              "\n"
              "Usage:\n"
              "\n"
@@ -382,7 +390,6 @@ void export_map()
              ">>> m.zoom_to_box(extent)\n"
             )
 
-        //.def("__deepcopy__",&map_deepcopy)
         .add_property("parameters",make_function(params_nonconst,return_value_policy<reference_existing_object>()),"TODO")
 
         .add_property("aspect_fix_mode",
@@ -423,6 +430,22 @@ void export_map()
                       ">>> m.background_image = '/path/to/image.png'\n"
             )
 
+        .add_property("background_image_comp_op",&Map::background_image_comp_op,
+                      &Map::set_background_image_comp_op,
+                      "The background image compositing operation.\n"
+                      "\n"
+                      "Usage:\n"
+                      ">>> m.background_image_comp_op = mapnik.CompositeOp.src_over\n"
+            )
+
+        .add_property("background_image_opacity",&Map::background_image_opacity,
+                      &Map::set_background_image_opacity,
+                      "The background image opacity.\n"
+                      "\n"
+                      "Usage:\n"
+                      ">>> m.background_image_opacity = 1.0\n"
+            )
+
         .add_property("base",
                       make_function(&Map::base_path,return_value_policy<copy_const_reference>()),
                       &Map::set_base_path,
@@ -514,5 +537,7 @@ void export_map()
                       ">>> m.width\n"
                       "800\n"
             )
+        // comparison
+        .def(self == self)
         ;
 }
diff --git a/bindings/python/mapnik_markers_symbolizer.cpp b/bindings/python/mapnik_markers_symbolizer.cpp
deleted file mode 100644
index 200c449..0000000
--- a/bindings/python/mapnik_markers_symbolizer.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2010 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-
-#include <mapnik/graphics.hpp>
-#include <mapnik/expression_node.hpp>
-#include <mapnik/value_error.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/markers_symbolizer.hpp>
-#include <mapnik/parse_path.hpp>
-#include "mapnik_svg.hpp"
-#include "mapnik_enumeration.hpp"
-#include "python_optional.hpp"
-
-#include <mapnik/marker_cache.hpp> // for known_svg_prefix_
-
-using mapnik::markers_symbolizer;
-using mapnik::symbolizer_with_image;
-using mapnik::path_processor_type;
-using mapnik::parse_path;
-
-namespace  {
-using namespace boost::python;
-
-std::string get_filename(mapnik::markers_symbolizer const& symbolizer)
-{
-    return path_processor_type::to_string(*symbolizer.get_filename());
-}
-
-void set_filename(mapnik::markers_symbolizer & symbolizer, std::string const& file_expr)
-{
-    symbolizer.set_filename(parse_path(file_expr));
-}
-
-void set_marker_type(mapnik::markers_symbolizer & symbolizer, std::string const& marker_type)
-{
-    std::string filename;
-    if (marker_type == "ellipse")
-    {
-        filename = mapnik::marker_cache::instance().known_svg_prefix_ + "ellipse";
-    }
-    else if (marker_type == "arrow")
-    {
-        filename = mapnik::marker_cache::instance().known_svg_prefix_ + "arrow";
-    }
-    else
-    {
-        throw mapnik::value_error("Unknown marker-type: '" + marker_type + "'");
-    }
-    symbolizer.set_filename(parse_path(filename));
-}
-
-}
-
-void export_markers_symbolizer()
-{
-    using namespace boost::python;
-
-    mapnik::enumeration_<mapnik::marker_placement_e>("marker_placement")
-        .value("POINT_PLACEMENT",mapnik::MARKER_POINT_PLACEMENT)
-        .value("INTERIOR_PLACEMENT",mapnik::MARKER_INTERIOR_PLACEMENT)
-        .value("LINE_PLACEMENT",mapnik::MARKER_LINE_PLACEMENT)
-        ;
-
-    mapnik::enumeration_<mapnik::marker_multi_policy_e>("marker_multi_policy")
-        .value("EACH",mapnik::MARKER_EACH_MULTI)
-        .value("WHOLE",mapnik::MARKER_WHOLE_MULTI)
-        .value("LARGEST",mapnik::MARKER_LARGEST_MULTI)
-        ;
-
-    class_<markers_symbolizer>("MarkersSymbolizer",
-                               init<>("Default Markers Symbolizer - circle"))
-        .def (init<mapnik::path_expression_ptr>("<path expression ptr>"))
-        .add_property("filename",
-                      &get_filename,
-                      &set_filename)
-        .add_property("marker_type",
-                      &get_filename,
-                      &set_marker_type)
-        .add_property("allow_overlap",
-                      &markers_symbolizer::get_allow_overlap,
-                      &markers_symbolizer::set_allow_overlap)
-        .add_property("spacing",
-                      &markers_symbolizer::get_spacing,
-                      &markers_symbolizer::set_spacing)
-        .add_property("max_error",
-                      &markers_symbolizer::get_max_error,
-                      &markers_symbolizer::set_max_error)
-        .add_property("opacity",
-                      &markers_symbolizer::get_opacity,
-                      &markers_symbolizer::set_opacity,
-                      "Set/get the overall opacity")
-        .add_property("fill_opacity",
-                      &markers_symbolizer::get_fill_opacity,
-                      &markers_symbolizer::set_fill_opacity,
-                      "Set/get the fill opacity")
-        .add_property("ignore_placement",
-                      &markers_symbolizer::get_ignore_placement,
-                      &markers_symbolizer::set_ignore_placement)
-        .add_property("transform",
-                      &mapnik::get_svg_transform<markers_symbolizer>,
-                      &mapnik::set_svg_transform<markers_symbolizer>)
-        .add_property("width",
-                      make_function(&markers_symbolizer::get_width,
-                                    return_value_policy<copy_const_reference>()),
-                      &markers_symbolizer::set_width,
-                      "Set/get the marker width")
-        .add_property("height",
-                      make_function(&markers_symbolizer::get_height,
-                                    return_value_policy<copy_const_reference>()),
-                      &markers_symbolizer::set_height,
-                      "Set/get the marker height")
-        .add_property("fill",
-                      &markers_symbolizer::get_fill,
-                      &markers_symbolizer::set_fill,
-                      "Set/get the marker fill color")
-        .add_property("stroke",
-                      &markers_symbolizer::get_stroke,
-                      &markers_symbolizer::set_stroke,
-                      "Set/get the marker stroke (outline)")
-        .add_property("placement",
-                      &markers_symbolizer::get_marker_placement,
-                      &markers_symbolizer::set_marker_placement,
-                      "Set/get the marker placement")
-        .add_property("multi_policy",
-                      &markers_symbolizer::get_marker_multi_policy,
-                      &markers_symbolizer::set_marker_multi_policy,
-                      "Set/get the marker multi geometry rendering policy")
-        .add_property("comp_op",
-                      &markers_symbolizer::comp_op,
-                      &markers_symbolizer::set_comp_op,
-                      "Set/get the marker comp-op")
-        .add_property("clip",
-                      &markers_symbolizer::clip,
-                      &markers_symbolizer::set_clip,
-                      "Set/get the marker geometry's clipping status")
-        .add_property("smooth",
-                      &markers_symbolizer::smooth,
-                      &markers_symbolizer::set_smooth,
-                      "Set/get the marker geometry's smooth value")
-        ;
-}
diff --git a/bindings/python/mapnik_palette.cpp b/bindings/python/mapnik_palette.cpp
index d28f081..878ecb6 100644
--- a/bindings/python/mapnik_palette.cpp
+++ b/bindings/python/mapnik_palette.cpp
@@ -20,10 +20,18 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/make_shared.hpp>
 #include <boost/noncopyable.hpp>
+#pragma GCC diagnostic pop
 
 //mapnik
 #include <mapnik/palette.hpp>
@@ -31,7 +39,7 @@
 // stl
 #include <stdexcept>
 
-static boost::shared_ptr<mapnik::rgba_palette> make_palette( std::string const& palette, std::string const& format )
+static std::shared_ptr<mapnik::rgba_palette> make_palette( std::string const& palette, std::string const& format )
 {
     mapnik::rgba_palette::palette_type type = mapnik::rgba_palette::PALETTE_RGBA;
     if (format == "rgb")
@@ -40,7 +48,7 @@ static boost::shared_ptr<mapnik::rgba_palette> make_palette( std::string const&
         type = mapnik::rgba_palette::PALETTE_ACT;
     else
         throw std::runtime_error("invalid type passed for mapnik.Palette: must be either rgba, rgb, or act");
-    return boost::make_shared<mapnik::rgba_palette>(palette, type);
+    return std::make_shared<mapnik::rgba_palette>(palette, type);
 }
 
 void export_palette ()
@@ -48,7 +56,7 @@ void export_palette ()
     using namespace boost::python;
 
     class_<mapnik::rgba_palette,
-        boost::shared_ptr<mapnik::rgba_palette>,
+        std::shared_ptr<mapnik::rgba_palette>,
         boost::noncopyable >("Palette",no_init)
         //, init<std::string,std::string>(
         // ( arg("palette"), arg("type")),
diff --git a/bindings/python/mapnik_parameters.cpp b/bindings/python/mapnik_parameters.cpp
index b56a0fd..7074e72 100644
--- a/bindings/python/mapnik_parameters.cpp
+++ b/bindings/python/mapnik_parameters.cpp
@@ -20,14 +20,23 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/debug.hpp>
 #include <mapnik/params.hpp>
 #include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/value.hpp>
 // stl
 #include <iterator>
@@ -82,7 +91,7 @@ struct parameters_pickle_suite : boost::python::pickle_suite
             extract<std::string> ex0(obj);
             extract<mapnik::value_integer> ex1(obj);
             extract<double> ex2(obj);
-            extract<UnicodeString> ex3(obj);
+            extract<mapnik::value_unicode_string> ex3(obj);
 
             // TODO - this is never hit - we need proper python string -> std::string to get invoked here
             if (ex0.check())
@@ -175,22 +184,22 @@ mapnik::value_holder get_param(mapnik::parameter const& p, int index)
     }
 }
 
-boost::shared_ptr<mapnik::parameter> create_parameter(UnicodeString const& key, mapnik::value_holder const& value)
+std::shared_ptr<mapnik::parameter> create_parameter(mapnik::value_unicode_string const& key, mapnik::value_holder const& value)
 {
     std::string key_utf8;
     mapnik::to_utf8(key, key_utf8);
-    return boost::make_shared<mapnik::parameter>(key_utf8,value);
+    return std::make_shared<mapnik::parameter>(key_utf8,value);
 }
 
 // needed for Python_Unicode to std::string (utf8) conversion
 
-boost::shared_ptr<mapnik::parameter> create_parameter_from_string(UnicodeString const& key, UnicodeString const& ustr)
+std::shared_ptr<mapnik::parameter> create_parameter_from_string(mapnik::value_unicode_string const& key, mapnik::value_unicode_string const& ustr)
 {
     std::string key_utf8;
     std::string ustr_utf8;
     mapnik::to_utf8(key, key_utf8);
     mapnik::to_utf8(ustr,ustr_utf8);
-    return boost::make_shared<mapnik::parameter>(key_utf8, ustr_utf8);
+    return std::make_shared<mapnik::parameter>(key_utf8, ustr_utf8);
 }
 
 void export_parameters()
@@ -201,7 +210,7 @@ void export_parameters()
     implicitly_convertible<mapnik::value_integer,mapnik::value_holder>();
     implicitly_convertible<mapnik::value_double,mapnik::value_holder>();
 
-    class_<parameter,boost::shared_ptr<parameter> >("Parameter",no_init)
+    class_<parameter,std::shared_ptr<parameter> >("Parameter",no_init)
         .def("__init__", make_constructor(create_parameter),
              "Create a mapnik.Parameter from a pair of values, the first being a string\n"
              "and the second being either a string, and integer, or a float")
diff --git a/bindings/python/mapnik_point_symbolizer.cpp b/bindings/python/mapnik_point_symbolizer.cpp
deleted file mode 100644
index f979b9e..0000000
--- a/bindings/python/mapnik_point_symbolizer.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-#include "mapnik_enumeration.hpp"
-#include <mapnik/graphics.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/point_symbolizer.hpp>
-#include <mapnik/parse_path.hpp>
-#include "mapnik_svg.hpp"
-
-using namespace mapnik;
-using mapnik::point_symbolizer;
-using mapnik::symbolizer_with_image;
-using mapnik::path_processor_type;
-using mapnik::parse_path;
-
-
-namespace {
-using namespace boost::python;
-
-std::string get_filename(point_symbolizer const& t)
-{
-    return path_processor_type::to_string(*t.get_filename());
-}
-
-void set_filename(point_symbolizer & t, std::string const& file_expr)
-{
-    t.set_filename(parse_path(file_expr));
-}
-
-}
-
-void export_point_symbolizer()
-{
-    using namespace boost::python;
-
-    enumeration_<point_placement_e>("point_placement")
-        .value("CENTROID",CENTROID_POINT_PLACEMENT)
-        .value("INTERIOR",INTERIOR_POINT_PLACEMENT)
-        ;
-
-    class_<point_symbolizer>("PointSymbolizer",
-                             init<>("Default Point Symbolizer - 4x4 black square"))
-        .def (init<mapnik::path_expression_ptr>("<path expression ptr>"))
-        .add_property("filename",
-                      &get_filename,
-                      &set_filename)
-        .add_property("allow_overlap",
-                      &point_symbolizer::get_allow_overlap,
-                      &point_symbolizer::set_allow_overlap)
-        .add_property("opacity",
-                      &point_symbolizer::get_opacity,
-                      &point_symbolizer::set_opacity)
-        .add_property("ignore_placement",
-                      &point_symbolizer::get_ignore_placement,
-                      &point_symbolizer::set_ignore_placement)
-        .add_property("placement",
-                      &point_symbolizer::get_point_placement,
-                      &point_symbolizer::set_point_placement,
-                      "Set/get the placement of the point")
-        .add_property("transform",
-                      mapnik::get_svg_transform<point_symbolizer>,
-                      mapnik::set_svg_transform<point_symbolizer>)
-        .add_property("comp_op",
-                      &point_symbolizer::comp_op,
-                      &point_symbolizer::set_comp_op,
-                      "Set/get the comp-op")
-        ;
-}
diff --git a/bindings/python/mapnik_polygon_pattern_symbolizer.cpp b/bindings/python/mapnik_polygon_pattern_symbolizer.cpp
deleted file mode 100644
index 4be2f7c..0000000
--- a/bindings/python/mapnik_polygon_pattern_symbolizer.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
-#include "mapnik_enumeration.hpp"
-#include <mapnik/parse_path.hpp>
-#include "mapnik_svg.hpp"
-
-using namespace mapnik;
-using mapnik::polygon_pattern_symbolizer;
-using mapnik::path_expression_ptr;
-using mapnik::path_processor_type;
-using mapnik::parse_path;
-using mapnik::guess_type;
-
-namespace {
-using namespace boost::python;
-
-std::string get_filename(polygon_pattern_symbolizer const& t)
-{
-    return path_processor_type::to_string(*t.get_filename());
-}
-
-void set_filename(polygon_pattern_symbolizer & t, std::string const& file_expr)
-{
-    t.set_filename(parse_path(file_expr));
-}
-
-}
-
-void export_polygon_pattern_symbolizer()
-{
-    using namespace boost::python;
-
-    enumeration_<pattern_alignment_e>("pattern_alignment")
-        .value("LOCAL",LOCAL_ALIGNMENT)
-        .value("GLOBAL",GLOBAL_ALIGNMENT)
-        ;
-
-    class_<polygon_pattern_symbolizer>("PolygonPatternSymbolizer",
-                                       init<path_expression_ptr>("<path_expression_ptr>"))
-        .add_property("alignment",
-                      &polygon_pattern_symbolizer::get_alignment,
-                      &polygon_pattern_symbolizer::set_alignment,
-                      "Set/get the alignment of the pattern")
-        .add_property("transform",
-                      mapnik::get_svg_transform<polygon_pattern_symbolizer>,
-                      mapnik::set_svg_transform<polygon_pattern_symbolizer>)
-        .add_property("filename",
-                      &get_filename,
-                      &set_filename)
-        .add_property("opacity",
-                      &polygon_pattern_symbolizer::get_opacity,
-                      &polygon_pattern_symbolizer::set_opacity)
-        .add_property("gamma",
-                      &polygon_pattern_symbolizer::get_gamma,
-                      &polygon_pattern_symbolizer::set_gamma)
-        .add_property("gamma_method",
-                      &polygon_pattern_symbolizer::get_gamma_method,
-                      &polygon_pattern_symbolizer::set_gamma_method,
-                      "Set/get the gamma correction method of the polygon")
-        .add_property("comp_op",
-                      &polygon_pattern_symbolizer::comp_op,
-                      &polygon_pattern_symbolizer::set_comp_op,
-                      "Set/get the pattern comp-op")
-        .add_property("clip",
-                      &polygon_pattern_symbolizer::clip,
-                      &polygon_pattern_symbolizer::set_clip,
-                      "Set/get the pattern geometry's clipping status")
-        .add_property("smooth",
-                      &polygon_pattern_symbolizer::smooth,
-                      &polygon_pattern_symbolizer::set_smooth,
-                      "Set/get the pattern geometry's smooth value")
-        ;
-}
diff --git a/bindings/python/mapnik_polygon_symbolizer.cpp b/bindings/python/mapnik_polygon_symbolizer.cpp
deleted file mode 100644
index 8a418f3..0000000
--- a/bindings/python/mapnik_polygon_symbolizer.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/python.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
-#include <mapnik/symbolizer_hash.hpp>
-
-using namespace mapnik;
-using mapnik::polygon_symbolizer;
-using mapnik::color;
-
-std::size_t polygon_symbolizer_hash(polygon_symbolizer const& sym)
-{
-    return symbolizer_hash::value(sym);
-}
-
-void export_polygon_symbolizer()
-{
-    using namespace boost::python;
-
-    class_<polygon_symbolizer>("PolygonSymbolizer",
-                               init<>("Default PolygonSymbolizer - solid fill grey"))
-        .def(init<color const&>("TODO"))
-        .add_property("fill",make_function
-                      (&polygon_symbolizer::get_fill,
-                       return_value_policy<copy_const_reference>()),
-                      &polygon_symbolizer::set_fill)
-        .add_property("fill_opacity",
-                      &polygon_symbolizer::get_opacity,
-                      &polygon_symbolizer::set_opacity)
-        .add_property("gamma",
-                      &polygon_symbolizer::get_gamma,
-                      &polygon_symbolizer::set_gamma)
-        .add_property("gamma_method",
-                      &polygon_symbolizer::get_gamma_method,
-                      &polygon_symbolizer::set_gamma_method,
-                      "gamma correction method")
-        .add_property("comp_op",
-                      &polygon_symbolizer::comp_op,
-                      &polygon_symbolizer::set_comp_op,
-                      "Set/get the polygon comp-op")
-        .add_property("clip",
-                      &polygon_symbolizer::clip,
-                      &polygon_symbolizer::set_clip,
-                      "Set/get the polygon geometry's clipping status")
-        .add_property("smooth",
-                      &polygon_symbolizer::smooth,
-                      &polygon_symbolizer::set_smooth,
-                      "Set/get the polygon geometry's smooth value")
-        .add_property("simplify_tolerance",
-                      &polygon_symbolizer::simplify_tolerance,
-                      &polygon_symbolizer::set_simplify_tolerance,
-                      "simplfication tolerance measure")
-        .def("__hash__", polygon_symbolizer_hash)
-        ;
-
-}
diff --git a/bindings/python/mapnik_proj_transform.cpp b/bindings/python/mapnik_proj_transform.cpp
index 95b4408..fa6f396 100644
--- a/bindings/python/mapnik_proj_transform.cpp
+++ b/bindings/python/mapnik_proj_transform.cpp
@@ -20,12 +20,25 @@
  *
  *****************************************************************************/
 
-// mapnik
-#include <mapnik/proj_transform.hpp>
-#include <boost/noncopyable.hpp>
+#include <mapnik/config.hpp>
+
 
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
+#include <boost/noncopyable.hpp>
+#pragma GCC diagnostic pop
+
+// mapnik
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/projection.hpp>
+#include <mapnik/coord.hpp>
+#include <mapnik/box2d.hpp>
 
 // stl
 #include <stdexcept>
@@ -54,7 +67,7 @@ mapnik::coord2d forward_transform_c(mapnik::proj_transform& t, mapnik::coord2d c
     if (!t.forward(x,y,z)) {
         std::ostringstream s;
         s << "Failed to forward project "
-          << c << " from " << t.source().params() << " to: " << t.dest().params();
+          << "from " << t.source().params() << " to: " << t.dest().params();
         throw std::runtime_error(s.str());
     }
     return mapnik::coord2d(x,y);
@@ -68,7 +81,7 @@ mapnik::coord2d backward_transform_c(mapnik::proj_transform& t, mapnik::coord2d
     if (!t.backward(x,y,z)) {
         std::ostringstream s;
         s << "Failed to back project "
-          << c << " from " <<  t.dest().params() << " to: " << t.source().params();
+          << "from " <<  t.dest().params() << " to: " << t.source().params();
         throw std::runtime_error(s.str());
     }
     return mapnik::coord2d(x,y);
@@ -80,7 +93,7 @@ mapnik::box2d<double> forward_transform_env(mapnik::proj_transform& t, mapnik::b
     if (!t.forward(new_box)) {
         std::ostringstream s;
         s << "Failed to forward project "
-          << box << " from " << t.source().params() << " to: " << t.dest().params();
+          << "from " << t.source().params() << " to: " << t.dest().params();
         throw std::runtime_error(s.str());
     }
     return new_box;
@@ -92,7 +105,7 @@ mapnik::box2d<double> backward_transform_env(mapnik::proj_transform& t, mapnik::
     if (!t.backward(new_box)){
         std::ostringstream s;
         s << "Failed to back project "
-          << box << " from " <<  t.dest().params() << " to: " << t.source().params();
+          << "from " <<  t.dest().params() << " to: " << t.source().params();
         throw std::runtime_error(s.str());
     }
     return new_box;
@@ -104,7 +117,7 @@ mapnik::box2d<double> forward_transform_env_p(mapnik::proj_transform& t, mapnik:
     if (!t.forward(new_box,points)) {
         std::ostringstream s;
         s << "Failed to forward project "
-          << box << " from " << t.source().params() << " to: " << t.dest().params();
+          << "from " << t.source().params() << " to: " << t.dest().params();
         throw std::runtime_error(s.str());
     }
     return new_box;
@@ -116,7 +129,7 @@ mapnik::box2d<double> backward_transform_env_p(mapnik::proj_transform& t, mapnik
     if (!t.backward(new_box,points)){
         std::ostringstream s;
         s << "Failed to back project "
-          << box << " from " <<  t.dest().params() << " to: " << t.source().params();
+          << "from " <<  t.dest().params() << " to: " << t.source().params();
         throw std::runtime_error(s.str());
     }
     return new_box;
diff --git a/bindings/python/mapnik_projection.cpp b/bindings/python/mapnik_projection.cpp
index 22e8bfa..38cd53b 100644
--- a/bindings/python/mapnik_projection.cpp
+++ b/bindings/python/mapnik_projection.cpp
@@ -20,8 +20,17 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/coord.hpp>
diff --git a/bindings/python/mapnik_python.cpp b/bindings/python/mapnik_python.cpp
index 81ee066..6907511 100644
--- a/bindings/python/mapnik_python.cpp
+++ b/bindings/python/mapnik_python.cpp
@@ -20,15 +20,34 @@
  *
  *****************************************************************************/
 
-#include <boost/python.hpp>
-#include <boost/get_pointer.hpp>
-#include <boost/python/detail/api_placeholder.hpp>
+#include <mapnik/config.hpp>
+
+// boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
+#include "python_to_value.hpp"
+#include <boost/python/args.hpp>        // for keywords, arg, etc
+#include <boost/python/converter/from_python.hpp>
+#include <boost/python/def.hpp>         // for def
+#include <boost/python/detail/defaults_gen.hpp>
+#include <boost/python/detail/none.hpp>  // for none
+#include <boost/python/dict.hpp>        // for dict
 #include <boost/python/exception_translator.hpp>
+#include <boost/python/list.hpp>        // for list
+#include <boost/python/module.hpp>      // for BOOST_PYTHON_MODULE
+#include <boost/python/object_core.hpp>  // for get_managed_object
+#include <boost/python/register_ptr_to_python.hpp>
+#include <boost/python/to_python_converter.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <stdexcept>
+#include <fstream>
 
-void register_cairo();
 void export_color();
 void export_coord();
 void export_layer();
@@ -41,14 +60,15 @@ void export_image();
 void export_image_view();
 void export_gamma_method();
 void export_scaling_method();
+#if defined(GRID_RENDERER)
 void export_grid();
 void export_grid_view();
+#endif
 void export_map();
 void export_python();
 void export_expression();
 void export_rule();
 void export_style();
-void export_stroke();
 void export_feature();
 void export_featureset();
 void export_fontset();
@@ -66,6 +86,7 @@ void export_raster_symbolizer();
 void export_text_placement();
 void export_shield_symbolizer();
 void export_debug_symbolizer();
+void export_group_symbolizer();
 void export_font_engine();
 void export_projection();
 void export_proj_transform();
@@ -75,40 +96,90 @@ void export_label_collision_detector();
 void export_logger();
 
 #include <mapnik/version.hpp>
-#include <mapnik/value_error.hpp>
-#include <mapnik/layer.hpp>
 #include <mapnik/map.hpp>
+#include <mapnik/datasource.hpp>
+#include <mapnik/layer.hpp>
 #include <mapnik/agg_renderer.hpp>
-#ifdef HAVE_CAIRO
-#include <mapnik/cairo_renderer.hpp>
-#endif
 #include <mapnik/graphics.hpp>
-#include <mapnik/stroke.hpp>
-#include <mapnik/font_set.hpp>
 #include <mapnik/rule.hpp>
 #include <mapnik/image_util.hpp>
 #include <mapnik/load_map.hpp>
-#include <mapnik/scale_denominator.hpp>
 #include <mapnik/value_error.hpp>
 #include <mapnik/save_map.hpp>
 #include <mapnik/scale_denominator.hpp>
+#if defined(GRID_RENDERER)
 #include "python_grid_utils.hpp"
+#endif
 #include "mapnik_value_converter.hpp"
+#include "mapnik_enumeration_wrapper_converter.hpp"
 #include "mapnik_threads.hpp"
 #include "python_optional.hpp"
 #include <mapnik/marker_cache.hpp>
+#if defined(SHAPE_MEMORY_MAPPED_FILE)
 #include <mapnik/mapped_memory_cache.hpp>
+#endif
 
+#if defined(SVG_RENDERER)
+#include <mapnik/svg/output/svg_renderer.hpp>
+#endif
 
+namespace mapnik {
+    class font_set;
+    class layer;
+    class color;
+    class label_collision_detector4;
+}
 void clear_cache()
 {
     mapnik::marker_cache::instance().clear();
+#if defined(SHAPE_MEMORY_MAPPED_FILE)
     mapnik::mapped_memory_cache::instance().clear();
+#endif
 }
 
 #if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <boost/python/type_id.hpp>
+#include <boost/python/converter/registry.hpp>
 #include <pycairo.h>
+#include <cairo.h>
 static Pycairo_CAPI_t *Pycairo_CAPI;
+static void *extract_surface(PyObject* op)
+{
+    if (PyObject_TypeCheck(op, const_cast<PyTypeObject*>(Pycairo_CAPI->Surface_Type)))
+    {
+        return op;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+static void *extract_context(PyObject* op)
+{
+    if (PyObject_TypeCheck(op, const_cast<PyTypeObject*>(Pycairo_CAPI->Context_Type)))
+    {
+        return op;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+void register_cairo()
+{
+#if PY_MAJOR_VERSION >= 3
+    Pycairo_CAPI = (Pycairo_CAPI_t*) PyCapsule_Import(const_cast<char *>("cairo.CAPI"), 0);
+#else
+    Pycairo_CAPI = (Pycairo_CAPI_t*) PyCObject_Import(const_cast<char *>("cairo"), const_cast<char *>("CAPI"));
+#endif
+    if (Pycairo_CAPI == nullptr) return;
+
+    boost::python::converter::registry::insert(&extract_surface, boost::python::type_id<PycairoSurface>());
+    boost::python::converter::registry::insert(&extract_context, boost::python::type_id<PycairoContext>());
+}
 #endif
 
 using mapnik::python_thread;
@@ -118,7 +189,7 @@ bool python_thread::thread_support = true;
 #endif
 boost::thread_specific_ptr<PyThreadState> python_thread::state;
 
-void render(const mapnik::Map& map,
+void render(mapnik::Map const& map,
             mapnik::image_32& image,
             double scale_factor = 1.0,
             unsigned offset_x = 0u,
@@ -127,25 +198,39 @@ void render(const mapnik::Map& map,
     python_unblock_auto_block b;
     mapnik::agg_renderer<mapnik::image_32> ren(map,image,scale_factor,offset_x, offset_y);
     ren.apply();
+}
 
+void render_with_vars(mapnik::Map const& map,
+            mapnik::image_32& image,
+            boost::python::dict const& d)
+{
+    mapnik::attributes vars = mapnik::dict2attr(d);
+    mapnik::request req(map.width(),map.height(),map.get_current_extent());
+    req.set_buffer_size(map.buffer_size());
+    python_unblock_auto_block b;
+    mapnik::agg_renderer<mapnik::image_32> ren(map,req,vars,image,1,0,0);
+    ren.apply();
 }
 
 void render_with_detector(
-    const mapnik::Map &map,
+    mapnik::Map const& map,
     mapnik::image_32 &image,
-    boost::shared_ptr<mapnik::label_collision_detector4> detector,
+    std::shared_ptr<mapnik::label_collision_detector4> detector,
     double scale_factor = 1.0,
     unsigned offset_x = 0u,
     unsigned offset_y = 0u)
 {
     python_unblock_auto_block b;
-    mapnik::agg_renderer<mapnik::image_32> ren(map,image,detector);
+    mapnik::agg_renderer<mapnik::image_32> ren(map,image,detector,scale_factor,offset_x,offset_y);
     ren.apply();
 }
 
-void render_layer2(const mapnik::Map& map,
+void render_layer2(mapnik::Map const& map,
                    mapnik::image_32& image,
-                   unsigned layer_idx)
+                   unsigned layer_idx,
+                   double scale_factor,
+                   unsigned offset_x,
+                   unsigned offset_y)
 {
     std::vector<mapnik::layer> const& layers = map.layers();
     std::size_t layer_num = layers.size();
@@ -158,14 +243,14 @@ void render_layer2(const mapnik::Map& map,
 
     python_unblock_auto_block b;
     mapnik::layer const& layer = layers[layer_idx];
-    mapnik::agg_renderer<mapnik::image_32> ren(map,image,1.0,0,0);
+    mapnik::agg_renderer<mapnik::image_32> ren(map,image,scale_factor,offset_x,offset_y);
     std::set<std::string> names;
     ren.apply(layer,names);
 }
 
 #if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
 
-void render3(const mapnik::Map& map,
+void render3(mapnik::Map const& map,
              PycairoSurface* py_surface,
              double scale_factor = 1.0,
              unsigned offset_x = 0,
@@ -173,92 +258,91 @@ void render3(const mapnik::Map& map,
 {
     python_unblock_auto_block b;
     mapnik::cairo_surface_ptr surface(cairo_surface_reference(py_surface->surface), mapnik::cairo_surface_closer());
-    mapnik::cairo_renderer<mapnik::cairo_surface_ptr> ren(map,surface,scale_factor,offset_x,offset_y);
+    mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map,mapnik::create_context(surface),scale_factor,offset_x,offset_y);
     ren.apply();
 }
 
-void render4(const mapnik::Map& map, PycairoSurface* py_surface)
+void render4(mapnik::Map const& map, PycairoSurface* py_surface)
 {
     python_unblock_auto_block b;
     mapnik::cairo_surface_ptr surface(cairo_surface_reference(py_surface->surface), mapnik::cairo_surface_closer());
-    mapnik::cairo_renderer<mapnik::cairo_surface_ptr> ren(map,surface);
+    mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map,mapnik::create_context(surface));
     ren.apply();
 }
 
-void render5(const mapnik::Map& map,
+void render5(mapnik::Map const& map,
              PycairoContext* py_context,
              double scale_factor = 1.0,
              unsigned offset_x = 0,
              unsigned offset_y = 0)
 {
     python_unblock_auto_block b;
-    mapnik::cairo_ptr context(py_context->ctx, mapnik::cairo_closer());
+    mapnik::cairo_ptr context(cairo_reference(py_context->ctx), mapnik::cairo_closer());
     mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map,context,scale_factor,offset_x, offset_y);
     ren.apply();
 }
 
-void render6(const mapnik::Map& map, PycairoContext* py_context)
+void render6(mapnik::Map const& map, PycairoContext* py_context)
 {
     python_unblock_auto_block b;
-    mapnik::cairo_ptr context(py_context->ctx, mapnik::cairo_closer());
+    mapnik::cairo_ptr context(cairo_reference(py_context->ctx), mapnik::cairo_closer());
     mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map,context);
     ren.apply();
 }
-
 void render_with_detector2(
-    const mapnik::Map& map,
+    mapnik::Map const& map,
     PycairoContext* py_context,
-    boost::shared_ptr<mapnik::label_collision_detector4> detector)
+    std::shared_ptr<mapnik::label_collision_detector4> detector)
 {
     python_unblock_auto_block b;
-    mapnik::cairo_ptr context(py_context->ctx, mapnik::cairo_closer());
+    mapnik::cairo_ptr context(cairo_reference(py_context->ctx), mapnik::cairo_closer());
     mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map,context,detector);
     ren.apply();
 }
 
 void render_with_detector3(
-    const mapnik::Map& map,
+    mapnik::Map const& map,
     PycairoContext* py_context,
-    boost::shared_ptr<mapnik::label_collision_detector4> detector,
+    std::shared_ptr<mapnik::label_collision_detector4> detector,
     double scale_factor = 1.0,
     unsigned offset_x = 0u,
     unsigned offset_y = 0u)
 {
     python_unblock_auto_block b;
-    mapnik::cairo_ptr context(py_context->ctx, mapnik::cairo_closer());
+    mapnik::cairo_ptr context(cairo_reference(py_context->ctx), mapnik::cairo_closer());
     mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map,context,detector,scale_factor,offset_x,offset_y);
     ren.apply();
 }
 
 void render_with_detector4(
-    const mapnik::Map& map,
+    mapnik::Map const& map,
     PycairoSurface* py_surface,
-    boost::shared_ptr<mapnik::label_collision_detector4> detector)
+    std::shared_ptr<mapnik::label_collision_detector4> detector)
 {
     python_unblock_auto_block b;
     mapnik::cairo_surface_ptr surface(cairo_surface_reference(py_surface->surface), mapnik::cairo_surface_closer());
-    mapnik::cairo_renderer<mapnik::cairo_surface_ptr> ren(map, surface, detector);
+    mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map, mapnik::create_context(surface), detector);
     ren.apply();
 }
 
 void render_with_detector5(
-    const mapnik::Map& map,
+    mapnik::Map const& map,
     PycairoSurface* py_surface,
-    boost::shared_ptr<mapnik::label_collision_detector4> detector,
+    std::shared_ptr<mapnik::label_collision_detector4> detector,
     double scale_factor = 1.0,
     unsigned offset_x = 0u,
     unsigned offset_y = 0u)
 {
     python_unblock_auto_block b;
     mapnik::cairo_surface_ptr surface(cairo_surface_reference(py_surface->surface), mapnik::cairo_surface_closer());
-    mapnik::cairo_renderer<mapnik::cairo_surface_ptr> ren(map, surface, detector, scale_factor, offset_x, offset_y);
+    mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map, mapnik::create_context(surface), detector, scale_factor, offset_x, offset_y);
     ren.apply();
 }
 
 #endif
 
 
-void render_tile_to_file(const mapnik::Map& map,
+void render_tile_to_file(mapnik::Map const& map,
                          unsigned offset_x, unsigned offset_y,
                          unsigned width, unsigned height,
                          std::string const& file,
@@ -269,11 +353,27 @@ void render_tile_to_file(const mapnik::Map& map,
     mapnik::save_to_file(image.data(),file,format);
 }
 
-void render_to_file1(const mapnik::Map& map,
+void render_to_file1(mapnik::Map const& map,
                      std::string const& filename,
                      std::string const& format)
 {
-    if (format == "pdf" || format == "svg" || format =="ps" || format == "ARGB32" || format == "RGB24")
+    if (format == "svg-ng")
+    {
+#if defined(SVG_RENDERER)
+        std::ofstream file (filename.c_str(), std::ios::out|std::ios::trunc|std::ios::binary);
+        if (!file)
+        {
+            throw mapnik::ImageWriterException("could not open file for writing: " + filename);
+        }
+        using iter_type = std::ostream_iterator<char>;
+        iter_type output_stream_iterator(file);
+        mapnik::svg_renderer<iter_type> ren(map,output_stream_iterator);
+        ren.apply();
+#else
+        throw mapnik::ImageWriterException("SVG backend not available, cannot write to format: " + format);
+#endif
+    }
+    else if (format == "pdf" || format == "svg" || format =="ps" || format == "ARGB32" || format == "RGB24")
     {
 #if defined(HAVE_CAIRO)
         mapnik::save_to_cairo_file(map,filename,format,1.0);
@@ -289,7 +389,7 @@ void render_to_file1(const mapnik::Map& map,
     }
 }
 
-void render_to_file2(const mapnik::Map& map,std::string const& filename)
+void render_to_file2(mapnik::Map const& map,std::string const& filename)
 {
     std::string format = mapnik::guess_type(filename);
     if (format == "pdf" || format == "svg" || format =="ps")
@@ -308,13 +408,29 @@ void render_to_file2(const mapnik::Map& map,std::string const& filename)
     }
 }
 
-void render_to_file3(const mapnik::Map& map,
+void render_to_file3(mapnik::Map const& map,
                      std::string const& filename,
                      std::string const& format,
                      double scale_factor = 1.0
     )
 {
-    if (format == "pdf" || format == "svg" || format =="ps" || format == "ARGB32" || format == "RGB24")
+    if (format == "svg-ng")
+    {
+#if defined(SVG_RENDERER)
+        std::ofstream file (filename.c_str(), std::ios::out|std::ios::trunc|std::ios::binary);
+        if (!file)
+        {
+            throw mapnik::ImageWriterException("could not open file for writing: " + filename);
+        }
+        using iter_type = std::ostream_iterator<char>;
+        iter_type output_stream_iterator(file);
+        mapnik::svg_renderer<iter_type> ren(map,output_stream_iterator,scale_factor);
+        ren.apply();
+#else
+        throw mapnik::ImageWriterException("SVG backend not available, cannot write to format: " + format);
+#endif
+    }
+    else if (format == "pdf" || format == "svg" || format =="ps" || format == "ARGB32" || format == "RGB24")
     {
 #if defined(HAVE_CAIRO)
         mapnik::save_to_cairo_file(map,filename,format,scale_factor);
@@ -330,7 +446,7 @@ void render_to_file3(const mapnik::Map& map,
     }
 }
 
-double scale_denominator(mapnik::Map const &map, bool geographic)
+double scale_denominator(mapnik::Map const& map, bool geographic)
 {
     return mapnik::scale_denominator(map.scale(), geographic);
 }
@@ -366,7 +482,33 @@ std::string mapnik_version_string()
     return MAPNIK_VERSION_STRING;
 }
 
-// indicator for jpeg read/write support within libmapnik
+bool has_proj4()
+{
+#if defined(MAPNIK_USE_PROJ4)
+    return true;
+#else
+    return false;
+#endif
+}
+
+bool has_svg_renderer()
+{
+#if defined(SVG_RENDERER)
+    return true;
+#else
+    return false;
+#endif
+}
+
+bool has_grid_renderer()
+{
+#if defined(GRID_RENDERER)
+    return true;
+#else
+    return false;
+#endif
+}
+
 bool has_jpeg()
 {
 #if defined(HAVE_JPEG)
@@ -376,6 +518,33 @@ bool has_jpeg()
 #endif
 }
 
+bool has_png()
+{
+#if defined(HAVE_PNG)
+    return true;
+#else
+    return false;
+#endif
+}
+
+bool has_tiff()
+{
+#if defined(HAVE_TIFF)
+    return true;
+#else
+    return false;
+#endif
+}
+
+bool has_webp()
+{
+#if defined(HAVE_WEBP)
+    return true;
+#else
+    return false;
+#endif
+}
+
 // indicator for cairo rendering support inside libmapnik
 bool has_cairo()
 {
@@ -395,7 +564,7 @@ bool has_pycairo()
 #else
     Pycairo_CAPI = (Pycairo_CAPI_t*) PyCObject_Import(const_cast<char *>("cairo"), const_cast<char *>("CAPI"));
 #endif
-    if (Pycairo_CAPI == NULL){
+    if (Pycairo_CAPI == nullptr){
         /*
           Case where pycairo support has been compiled into
           mapnik but at runtime the cairo python module
@@ -427,13 +596,14 @@ BOOST_PYTHON_MODULE(_mapnik)
     using mapnik::load_map_string;
     using mapnik::save_map;
     using mapnik::save_map_to_string;
-    using mapnik::render_grid;
 
     register_exception_translator<std::exception>(&standard_error_translator);
     register_exception_translator<std::out_of_range>(&out_of_range_error_translator);
     register_exception_translator<mapnik::value_error>(&value_error_translator);
     register_exception_translator<std::runtime_error>(&runtime_error_translator);
+#if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
     register_cairo();
+#endif
     export_query();
     export_geometry();
     export_feature();
@@ -448,13 +618,14 @@ BOOST_PYTHON_MODULE(_mapnik)
     export_image_view();
     export_gamma_method();
     export_scaling_method();
+#if defined(GRID_RENDERER)
     export_grid();
     export_grid_view();
+#endif
     export_expression();
     export_rule();
     export_style();
     export_layer();
-    export_stroke();
     export_datasource_cache();
     export_symbolizer();
     export_markers_symbolizer();
@@ -468,6 +639,7 @@ BOOST_PYTHON_MODULE(_mapnik)
     export_text_placement();
     export_shield_symbolizer();
     export_debug_symbolizer();
+    export_group_symbolizer();
     export_font_engine();
     export_projection();
     export_proj_transform();
@@ -487,15 +659,6 @@ BOOST_PYTHON_MODULE(_mapnik)
         ">>> clear_cache()\n"
         );
 
-    def("render_grid",&render_grid,
-        ( arg("map"),
-          arg("layer"),
-          args("key")="__id__",
-          arg("resolution")=4,
-          arg("fields")=boost::python::list()
-            )
-        );
-
     def("render_to_file",&render_to_file1,
         "\n"
         "Render Map to file using explicit image type.\n"
@@ -544,6 +707,7 @@ BOOST_PYTHON_MODULE(_mapnik)
         "\n"
         );
 
+    def("render_with_vars",&render_with_vars);
 
     def("render", &render, render_overloads(
             "\n"
@@ -576,12 +740,27 @@ BOOST_PYTHON_MODULE(_mapnik)
             ));
 
     def("render_layer", &render_layer2,
-        (arg("map"),arg("image"),args("layer"))
+        (arg("map"),
+         arg("image"),
+         arg("layer"),
+         arg("scale_factor")=1.0,
+         arg("offset_x")=0,
+         arg("offset_y")=0
+        )
         );
 
+#if defined(GRID_RENDERER)
     def("render_layer", &mapnik::render_layer_for_grid,
-        (arg("map"),arg("grid"),args("layer"),arg("fields")=boost::python::list())
+        (arg("map"),
+         arg("grid"),
+         arg("layer"),
+         arg("fields")=boost::python::list(),
+         arg("scale_factor")=1.0,
+         arg("offset_x")=0,
+         arg("offset_y")=0
+        )
         );
+#endif
 
 #if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
     def("render",&render3,
@@ -739,11 +918,16 @@ BOOST_PYTHON_MODULE(_mapnik)
     def("save_map_to_string", &save_map_to_string, save_map_to_string_overloads());
     def("mapnik_version", &mapnik_version,"Get the Mapnik version number");
     def("mapnik_version_string", &mapnik_version_string,"Get the Mapnik version string");
+    def("has_proj4", &has_proj4, "Get proj4 status");
     def("has_jpeg", &has_jpeg, "Get jpeg read/write support status");
+    def("has_png", &has_png, "Get png read/write support status");
+    def("has_tiff", &has_tiff, "Get tiff read/write support status");
+    def("has_webp", &has_webp, "Get webp read/write support status");
+    def("has_svg_renderer", &has_svg_renderer, "Get svg_renderer status");
+    def("has_grid_renderer", &has_grid_renderer, "Get grid_renderer status");
     def("has_cairo", &has_cairo, "Get cairo library status");
     def("has_pycairo", &has_pycairo, "Get pycairo module status");
 
-    python_optional<mapnik::stroke>();
     python_optional<mapnik::font_set>();
     python_optional<mapnik::color>();
     python_optional<mapnik::box2d<double> >();
@@ -760,4 +944,5 @@ BOOST_PYTHON_MODULE(_mapnik)
     register_ptr_to_python<mapnik::path_expression_ptr>();
     to_python_converter<mapnik::value_holder,mapnik_param_to_python>();
     to_python_converter<mapnik::value,mapnik_value_to_python>();
+    to_python_converter<mapnik::enumeration_wrapper,mapnik_enumeration_wrapper_to_python>();
 }
diff --git a/bindings/python/mapnik_query.cpp b/bindings/python/mapnik_query.cpp
index 3c6138a..893d836 100644
--- a/bindings/python/mapnik_query.cpp
+++ b/bindings/python/mapnik_query.cpp
@@ -20,9 +20,18 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
+#include "python_to_value.hpp"
 #include <boost/python.hpp>
-#include <boost/foreach.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/query.hpp>
@@ -40,7 +49,7 @@ struct resolution_to_tuple
 {
     static PyObject* convert(query::resolution_type const& x)
     {
-        python::object tuple(python::make_tuple(x.get<0>(), x.get<1>()));
+        python::object tuple(python::make_tuple(std::get<0>(x), std::get<1>(x)));
         return python::incref(tuple.ptr());
     }
 
@@ -55,7 +64,7 @@ struct names_to_list
     static PyObject* convert(std::set<std::string> const& names)
     {
         boost::python::list l;
-        BOOST_FOREACH( std::string const& name, names )
+        for ( std::string const& name : names )
         {
             l.append(name);
         }
@@ -68,6 +77,15 @@ struct names_to_list
     }
 };
 
+namespace {
+
+    void set_variables(mapnik::query & q, boost::python::dict const& d)
+    {
+        mapnik::attributes vars = mapnik::dict2attr(d);
+        q.set_variables(vars);
+    }
+}
+
 void export_query()
 {
     using namespace boost::python;
@@ -84,8 +102,6 @@ void export_query()
                                             return_value_policy<copy_const_reference>()) )
         .add_property("property_names", make_function(&query::property_names,
                                                       return_value_policy<copy_const_reference>()) )
-        .def("add_property_name", &query::add_property_name);
+        .def("add_property_name", &query::add_property_name)
+        .def("set_variables",&set_variables);
 }
-
-
-
diff --git a/bindings/python/mapnik_raster_colorizer.cpp b/bindings/python/mapnik_raster_colorizer.cpp
index 7d9d6b7..725ea16 100644
--- a/bindings/python/mapnik_raster_colorizer.cpp
+++ b/bindings/python/mapnik_raster_colorizer.cpp
@@ -20,15 +20,26 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/raster_colorizer.hpp>
+#include <mapnik/symbolizer.hpp>
 
 using mapnik::raster_colorizer;
 using mapnik::raster_colorizer_ptr;
+using mapnik::symbolizer_base;
 using mapnik::colorizer_stop;
 using mapnik::colorizer_stops;
 using mapnik::colorizer_mode_enum;
@@ -60,6 +71,15 @@ void add_stop5(raster_colorizer_ptr &rc, float v, colorizer_mode_enum m, color c
     colorizer_stop stop(v, m, c);
     rc->add_stop(stop);
 }
+mapnik::color get_color(raster_colorizer_ptr &rc, float value) {
+    unsigned rgba = rc->get_color(value);
+    unsigned r = (rgba & 0xff);
+    unsigned g = (rgba >> 8 ) & 0xff;
+    unsigned b = (rgba >> 16) & 0xff;
+    unsigned a = (rgba >> 24) & 0xff;
+    return mapnik::color(r,g,b,a);
+}
+
 colorizer_stops const& get_stops(raster_colorizer_ptr & rc)
 {
     return rc->get_stops();
@@ -70,6 +90,8 @@ void export_raster_colorizer()
 {
     using namespace boost::python;
 
+    implicitly_convertible<raster_colorizer_ptr, mapnik::symbolizer_base::value_type>();
+
     class_<raster_colorizer,raster_colorizer_ptr>("RasterColorizer",
                                                   "A Raster Colorizer object.",
                                                   init<colorizer_mode_enum, color>(args("default_mode","default_color"))
@@ -142,7 +164,7 @@ void export_raster_colorizer()
              ">>> colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_LINEAR, default_color)\n"
              ">>> colorizer.add_stop(100, mapnik.COLORIZER_DISCRETE, mapnik.Color(\"#112233\"))\n"
             )
-        .def("get_color", &raster_colorizer::get_color,
+        .def("get_color", get_color,
              "Get the color assigned to a certain value in raster data.\n"
              "\n"
              "Usage:\n"
diff --git a/bindings/python/mapnik_raster_symbolizer.cpp b/bindings/python/mapnik_raster_symbolizer.cpp
deleted file mode 100644
index 20a04a3..0000000
--- a/bindings/python/mapnik_raster_symbolizer.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// boost
-#include <boost/python.hpp>
-
-// mapnik
-#include <mapnik/raster_symbolizer.hpp>
-#include <mapnik/raster_colorizer.hpp>
-#include <mapnik/image_scaling.hpp>
-
-
-using mapnik::raster_symbolizer;
-
-void export_raster_symbolizer()
-{
-    using namespace boost::python;
-
-    class_<raster_symbolizer>("RasterSymbolizer",
-                              init<>("Default ctor"))
-
-        .add_property("mode",
-                      make_function(&raster_symbolizer::get_mode,return_value_policy<copy_const_reference>()),
-                      &raster_symbolizer::set_mode,
-                      "Get/Set merging mode. (deprecated, use comp_op instead)\n"
-            )
-        .add_property("comp_op",
-                      &raster_symbolizer::comp_op,
-                      &raster_symbolizer::set_comp_op,
-                      "Set/get the raster comp-op"
-            )
-        .add_property("scaling",
-                      &raster_symbolizer::get_scaling_method,
-                      &raster_symbolizer::set_scaling_method,
-                      "Get/Set scaling algorithm.\n"
-                      "\n"
-                      "Usage:\n"
-                      "\n"
-                      ">>> from mapnik import RasterSymbolizer\n"
-                      ">>> r = RasterSymbolizer()\n"
-                      ">>> r.scaling = 'mapnik.scaling_method.GAUSSIAN'\n"
-            )
-
-        .add_property("opacity",
-                      &raster_symbolizer::get_opacity,
-                      &raster_symbolizer::set_opacity,
-                      "Get/Set opacity.\n"
-                      "\n"
-                      "Usage:\n"
-                      "\n"
-                      ">>> from mapnik import RasterSymbolizer\n"
-                      ">>> r = RasterSymbolizer()\n"
-                      ">>> r.opacity = .5\n"
-            )
-        .add_property("colorizer",
-                      &raster_symbolizer::get_colorizer,
-                      &raster_symbolizer::set_colorizer,
-                      "Get/Set the RasterColorizer used to color data rasters.\n"
-                      "\n"
-                      "Usage:\n"
-                      "\n"
-                      ">>> from mapnik import RasterSymbolizer, RasterColorizer\n"
-                      ">>> r = RasterSymbolizer()\n"
-                      ">>> r.colorizer = RasterColorizer()\n"
-                      ">>> for value, color in [\n"
-                      "...     (0, \"#000000\"),\n"
-                      "...     (10, \"#ff0000\"),\n"
-                      "...     (40, \"#00ff00\"),\n"
-                      "... ]:\n"
-                      "...      r.colorizer.append_band(value, color)\n"
-            )
-        .add_property("filter_factor",
-                      &raster_symbolizer::get_filter_factor,
-                      &raster_symbolizer::set_filter_factor,
-                      "Get/Set the filter factor used by the datasource.\n"
-                      "\n"
-                      "This is used by the Raster or Gdal datasources to pre-downscale\n"
-                      "images using overviews.\n"
-                      "Higher numbers can sometimes cause much better scaled image\n"
-                      "output, at the cost of speed.\n"
-                      "\n"
-                      "Examples:\n"
-                      " -1.0 : (Default) A suitable value will be determined from the\n"
-                      "        chosen scaling method during rendering.\n"
-                      "  1.0 : The datasource will take care of all the scaling\n"
-                      "        (using nearest neighbor interpolation)\n"
-                      "  2.0 : The datasource will scale the datasource to\n"
-                      "        2.0x the desired size, and mapnik will scale the rest\n"
-                      "        of the way using the interpolation defined in self.scaling.\n"
-            )
-        .add_property("mesh_size",
-                      &raster_symbolizer::get_mesh_size,
-                      &raster_symbolizer::set_mesh_size,
-                      "Get/Set warping mesh size.\n"
-                      "Larger values result in faster warping times but might "
-                      "result in distorted maps.\n"
-                      "\n"
-                      "Usage:\n"
-                      "\n"
-                      ">>> from mapnik import RasterSymbolizer\n"
-                      ">>> r = RasterSymbolizer()\n"
-                      ">>> r.mesh_size = 32\n"
-            )
-        .add_property("premultiplied",
-                      &raster_symbolizer::premultiplied,
-                      &raster_symbolizer::set_premultiplied,
-                      "Get/Set premultiplied status of the source image.\n"
-                      "Can be used to override what the source data reports (when in error)\n"
-                      "\n"
-                      "Usage:\n"
-                      "\n"
-                      ">>> from mapnik import RasterSymbolizer\n"
-                      ">>> r = RasterSymbolizer()\n"
-                      ">>> r.premultiplied = False\n"
-            )
-        ;
-}
diff --git a/bindings/python/mapnik_rule.cpp b/bindings/python/mapnik_rule.cpp
index 80341ca..53fa4ad 100644
--- a/bindings/python/mapnik_rule.cpp
+++ b/bindings/python/mapnik_rule.cpp
@@ -20,11 +20,19 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/implicit.hpp>
-#include <boost/python/detail/api_placeholder.hpp>
 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/rule.hpp>
@@ -44,6 +52,7 @@ using mapnik::shield_symbolizer;
 using mapnik::text_symbolizer;
 using mapnik::building_symbolizer;
 using mapnik::markers_symbolizer;
+using mapnik::group_symbolizer;
 using mapnik::symbolizer;
 using mapnik::to_expression_string;
 
@@ -60,6 +69,7 @@ void export_rule()
     implicitly_convertible<shield_symbolizer,symbolizer>();
     implicitly_convertible<text_symbolizer,symbolizer>();
     implicitly_convertible<markers_symbolizer,symbolizer>();
+    implicitly_convertible<group_symbolizer,symbolizer>();
 
     class_<rule::symbolizers>("Symbolizers",init<>("TODO"))
         .def(vector_indexing_suite<rule::symbolizers>())
diff --git a/bindings/python/mapnik_scaling_method.cpp b/bindings/python/mapnik_scaling_method.cpp
index c237a70..495d380 100644
--- a/bindings/python/mapnik_scaling_method.cpp
+++ b/bindings/python/mapnik_scaling_method.cpp
@@ -21,9 +21,16 @@
  *****************************************************************************/
 
 
-#include <boost/python.hpp>
 #include <mapnik/image_scaling.hpp>
-#include "mapnik_enumeration.hpp"
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
+#include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 void export_scaling_method()
 {
@@ -47,6 +54,5 @@ void export_scaling_method()
         .value("SINC", mapnik::SCALING_SINC)
         .value("LANCZOS", mapnik::SCALING_LANCZOS)
         .value("BLACKMAN", mapnik::SCALING_BLACKMAN)
-        .value("BILINEAR8", mapnik::SCALING_BILINEAR8)
         ;
 }
diff --git a/bindings/python/mapnik_shield_symbolizer.cpp b/bindings/python/mapnik_shield_symbolizer.cpp
deleted file mode 100644
index f8ed78d..0000000
--- a/bindings/python/mapnik_shield_symbolizer.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- * Copyright (C) 2006 10East Corp.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-/* The functions in this file produce deprecation warnings.
- * But as shield symbolizer doesn't fully support more than one
- * placement from python yet these functions are actually the
- * correct ones.
- */
-#define NO_DEPRECATION_WARNINGS
-
-// boost
-#include <boost/python.hpp>
-
-// mapnik
-#include <mapnik/shield_symbolizer.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/parse_path.hpp>
-#include <mapnik/path_expression.hpp>
-#include "mapnik_svg.hpp"
-
-using mapnik::color;
-using mapnik::shield_symbolizer;
-using mapnik::text_symbolizer;
-using mapnik::symbolizer_with_image;
-using mapnik::path_processor_type;
-using mapnik::path_expression_ptr;
-using mapnik::guess_type;
-using mapnik::expression_ptr;
-using mapnik::parse_path;
-using mapnik::position;
-
-
-namespace {
-using namespace boost::python;
-
-tuple get_shield_displacement(const shield_symbolizer& s)
-{
-    position const& pos = s.get_shield_displacement();
-    return boost::python::make_tuple(pos.first, pos.second);
-}
-
-void set_shield_displacement(shield_symbolizer & s, boost::python::tuple arg)
-{
-    s.get_placement_options()->defaults.displacement.first = extract<double>(arg[0]);
-    s.get_placement_options()->defaults.displacement.second = extract<double>(arg[1]);
-}
-
-tuple get_text_displacement(const shield_symbolizer& t)
-{
-    position const& pos = t.get_placement_options()->defaults.displacement;
-    return boost::python::make_tuple(pos.first, pos.second);
-}
-
-void set_text_displacement(shield_symbolizer & t, boost::python::tuple arg)
-{
-    t.set_displacement(extract<double>(arg[0]),extract<double>(arg[1]));
-}
-
-std::string get_filename(shield_symbolizer const& t)
-{
-    return path_processor_type::to_string(*t.get_filename());
-}
-
-void set_filename(shield_symbolizer & t, std::string const& file_expr)
-{
-    t.set_filename(parse_path(file_expr));
-}
-
-}
-
-void export_shield_symbolizer()
-{
-    using namespace boost::python;
-    class_< shield_symbolizer, bases<text_symbolizer> >("ShieldSymbolizer",
-                                                        init<expression_ptr,
-                                                        std::string const&,
-                                                        unsigned, mapnik::color const&,
-                                                        path_expression_ptr>()
-        )
-        .add_property("allow_overlap",
-                      &shield_symbolizer::get_allow_overlap,
-                      &shield_symbolizer::set_allow_overlap,
-                      "Set/get the allow_overlap property of the label")
-        .add_property("avoid_edges",
-                      &shield_symbolizer::get_avoid_edges,
-                      &shield_symbolizer::set_avoid_edges,
-                      "Set/get the avoid_edge property of the label")
-        .add_property("character_spacing",
-                      &shield_symbolizer::get_character_spacing,
-                      &shield_symbolizer::set_character_spacing,
-                      "Set/get the character_spacing property of the label")
-        .add_property("displacement",
-                      &get_text_displacement,
-                      &set_text_displacement)
-        .add_property("face_name",
-                      make_function(&shield_symbolizer::get_face_name,return_value_policy<copy_const_reference>()),
-                      &shield_symbolizer::set_face_name,
-                      "Set/get the face_name property of the label")
-        .add_property("fill",
-                      make_function(&shield_symbolizer::get_fill,return_value_policy<copy_const_reference>()),
-                      &shield_symbolizer::set_fill)
-        .add_property("fontset",
-                      make_function(&shield_symbolizer::get_fontset,return_value_policy<copy_const_reference>()),
-                      &shield_symbolizer::set_fontset)
-        .add_property("force_odd_labels",
-                      &shield_symbolizer::get_force_odd_labels,
-                      &shield_symbolizer::set_force_odd_labels)
-        .add_property("halo_fill",
-                      make_function(&shield_symbolizer::get_halo_fill,return_value_policy<copy_const_reference>()),
-                      &shield_symbolizer::set_halo_fill)
-        .add_property("halo_radius",
-                      &shield_symbolizer::get_halo_radius,
-                      &shield_symbolizer::set_halo_radius)
-        .add_property("horizontal_alignment",
-                      &shield_symbolizer::get_horizontal_alignment,
-                      &shield_symbolizer::set_horizontal_alignment,
-                      "Set/get the horizontal alignment of the label")
-        .add_property("justify_alignment",
-                      &shield_symbolizer::get_justify_alignment,
-                      &shield_symbolizer::set_justify_alignment,
-                      "Set/get the text justification")
-        .add_property("label_placement",
-                      &shield_symbolizer::get_label_placement,
-                      &shield_symbolizer::set_label_placement,
-                      "Set/get the placement of the label")
-        .add_property("label_position_tolerance",
-                      &shield_symbolizer::get_label_position_tolerance,
-                      &shield_symbolizer::set_label_position_tolerance)
-        .add_property("label_spacing",
-                      &shield_symbolizer::get_label_spacing,
-                      &shield_symbolizer::set_label_spacing)
-        .add_property("line_spacing",
-                      &shield_symbolizer::get_line_spacing,
-                      &shield_symbolizer::set_line_spacing)
-        .add_property("max_char_angle_delta",
-                      &shield_symbolizer::get_max_char_angle_delta,
-                      &shield_symbolizer::set_max_char_angle_delta)
-        .add_property("minimum_distance",
-                      &shield_symbolizer::get_minimum_distance,
-                      &shield_symbolizer::set_minimum_distance)
-        .add_property("minimum_padding",
-                      &shield_symbolizer::get_minimum_padding,
-                      &shield_symbolizer::set_minimum_padding)
-        .add_property("name",&shield_symbolizer::get_name,
-                      &shield_symbolizer::set_name)
-        .add_property("opacity",
-                      &shield_symbolizer::get_opacity,
-                      &shield_symbolizer::set_opacity,
-                      "Set/get the shield opacity")
-        .add_property("shield_displacement",
-                      get_shield_displacement,
-                      set_shield_displacement)
-        .add_property("text_opacity",
-                      &shield_symbolizer::get_text_opacity,
-                      &shield_symbolizer::set_text_opacity,
-                      "Set/get the text opacity")
-        .add_property("text_transform",
-                      &shield_symbolizer::get_text_transform,
-                      &shield_symbolizer::set_text_transform,
-                      "Set/get the text conversion method")
-        .add_property("text_ratio",
-                      &shield_symbolizer::get_text_ratio,
-                      &shield_symbolizer::set_text_ratio)
-        .add_property("text_size",
-                      &shield_symbolizer::get_text_size,
-                      &shield_symbolizer::set_text_size)
-        .add_property("vertical_alignment",
-                      &shield_symbolizer::get_vertical_alignment,
-                      &shield_symbolizer::set_vertical_alignment,
-                      "Set/get the vertical alignment of the label")
-        .add_property("wrap_width",
-                      &shield_symbolizer::get_wrap_width,
-                      &shield_symbolizer::set_wrap_width)
-        .add_property("wrap_character",
-                      &shield_symbolizer::get_wrap_char_string,
-                      &shield_symbolizer::set_wrap_char_from_string)
-        .add_property("wrap_before",
-                      &shield_symbolizer::get_wrap_before,
-                      &shield_symbolizer::set_wrap_before)
-        .add_property("unlock_image",
-                      &shield_symbolizer::get_unlock_image,
-                      &shield_symbolizer::set_unlock_image)
-        .add_property("filename",
-                      &get_filename,
-                      &set_filename)
-        .add_property("transform",
-                      mapnik::get_svg_transform<shield_symbolizer>,
-                      mapnik::set_svg_transform<shield_symbolizer>)
-        .add_property("comp_op",
-                      &shield_symbolizer::comp_op,
-                      &shield_symbolizer::set_comp_op,
-                      "Set/get the comp-op")
-        .add_property("clip",
-                      &shield_symbolizer::clip,
-                      &shield_symbolizer::set_clip,
-                      "Set/get the shield geometry's clipping status")
-        ;
-}
diff --git a/bindings/python/mapnik_stroke.cpp b/bindings/python/mapnik_stroke.cpp
deleted file mode 100644
index 104bb7b..0000000
--- a/bindings/python/mapnik_stroke.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c+mapping toolkit)
- *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// boost
-#include <boost/python.hpp>
-
-// mapnik
-#include <mapnik/stroke.hpp>
-#include "mapnik_enumeration.hpp"
-
-using namespace mapnik;
-
-namespace {
-using namespace boost::python;
-
-list get_dashes_list(stroke const& stroke)
-{
-    list l;
-    if (stroke.has_dash()) {
-        mapnik::dash_array const& dash = stroke.get_dash_array();
-        mapnik::dash_array::const_iterator iter = dash.begin();
-        mapnik::dash_array::const_iterator end = dash.end();
-        for (; iter != end; ++iter) {
-            l.append(make_tuple(iter->first, iter->second));
-        }
-    }
-    return l;
-}
-
-void set_dasharray(stroke & stroke, list const& l)
-{
-    for (int i=0; i<len(l); ++i)
-    {
-        boost::python::tuple dash = extract<boost::python::tuple>(l[i]);
-        if (len(dash) == 2)
-        {
-            double d1 = extract<double>(dash[0]);
-            double d2 = extract<double>(dash[1]);
-            stroke.add_dash(d1,d2);
-        }
-    }
-}
-
-}
-
-void export_stroke ()
-{
-    using namespace boost::python;
-
-    enumeration_<line_cap_e>("line_cap",
-                             "The possible values for a line cap used when drawing\n"
-                             "with a stroke.\n")
-        .value("BUTT_CAP",BUTT_CAP)
-        .value("SQUARE_CAP",SQUARE_CAP)
-        .value("ROUND_CAP",ROUND_CAP)
-        ;
-    enumeration_<line_join_e>("line_join",
-                              "The possible values for the line joining mode\n"
-                              "when drawing with a stroke.\n")
-        .value("MITER_JOIN",MITER_JOIN)
-        .value("MITER_REVERT_JOIN",MITER_REVERT_JOIN)
-        .value("ROUND_JOIN",ROUND_JOIN)
-        .value("BEVEL_JOIN",BEVEL_JOIN)
-        ;
-
-    class_<stroke>("Stroke",init<>(
-                       "Creates a new default black stroke with the width of 1.\n"))
-        .def(init<color,float>(
-                 (arg("color"),arg("width")),
-                 "Creates a new stroke object with a specified color and width.\n")
-            )
-        .add_property("color",make_function
-                      (&stroke::get_color,return_value_policy<copy_const_reference>()),
-                      &stroke::set_color,
-                      "Gets or sets the stroke color.\n"
-                      "Returns a new Color object on retrieval.\n")
-        .add_property("width",
-                      &stroke::get_width,
-                      &stroke::set_width,
-                      "Gets or sets the stroke width in pixels.\n")
-        .add_property("opacity",
-                      &stroke::get_opacity,
-                      &stroke::set_opacity,
-                      "Gets or sets the opacity of this stroke.\n"
-                      "The value is a float between 0 and 1.\n")
-        .add_property("gamma",
-                      &stroke::get_gamma,
-                      &stroke::set_gamma,
-                      "Gets or sets the gamma of this stroke.\n"
-                      "The value is a float between 0 and 1.\n")
-        .add_property("gamma_method",
-                      &stroke::get_gamma_method,
-                      &stroke::set_gamma_method,
-                      "Set/get the gamma correction method of this stroke")
-        .add_property("line_cap",
-                      &stroke::get_line_cap,
-                      &stroke::set_line_cap,
-                      "Gets or sets the line cap of this stroke. (alias of linecap)\n")
-        .add_property("linecap",
-                      &stroke::get_line_cap,
-                      &stroke::set_line_cap,
-                      "Gets or sets the linecap of this stroke.\n")
-        .add_property("line_join",
-                      &stroke::get_line_join,
-                      &stroke::set_line_join,
-                      "Returns the line join mode of this stroke. (alias of linejoin)\n")
-        .add_property("linejoin",
-                      &stroke::get_line_join,
-                      &stroke::set_line_join,
-                      "Returns the linejoin mode of this stroke.\n")
-        .add_property("miterlimit",
-                      &stroke::get_miterlimit,
-                      &stroke::set_miterlimit,
-                      "Returns the miterlimit mode of this stroke.\n")
-        .def("add_dash",&stroke::add_dash,
-             (arg("length"),arg("gap")),
-             "Adds a dash segment to the dash patterns of this stroke.\n")
-        .def("get_dashes", get_dashes_list,
-             "Returns the list of dash segments for this stroke.\n")
-        .add_property("dasharray",
-                      get_dashes_list,
-                      set_dasharray,
-                      "Gets or sets dasharray string of this stroke. (alternate property to add_dash/get_dashes)\n")
-        .add_property("dash_offset",
-                      &stroke::dash_offset,
-                      &stroke::set_dash_offset,
-                      "Gets or sets dash offset of this stroke. (alias of dashoffet)\n")
-        .add_property("dashoffset",
-                      &stroke::dash_offset,
-                      &stroke::set_dash_offset,
-                      "Gets or sets dash offset of this stroke.\n")
-        ;
-}
diff --git a/bindings/python/mapnik_style.cpp b/bindings/python/mapnik_style.cpp
index 7eb9e44..0658f9b 100644
--- a/bindings/python/mapnik_style.cpp
+++ b/bindings/python/mapnik_style.cpp
@@ -20,12 +20,22 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/value_error.hpp>
+#include <mapnik/rule.hpp>
 #include "mapnik_enumeration.hpp"
 #include <mapnik/feature_type_style.hpp>
 #include <mapnik/image_filter_types.hpp> // generate_image_filters
@@ -45,13 +55,17 @@ std::string get_image_filters(feature_type_style & style)
 void set_image_filters(feature_type_style & style, std::string const& filters)
 {
     std::vector<mapnik::filter::filter_type> new_filters;
-
     bool result = parse_image_filters(filters, new_filters);
     if (!result)
     {
         throw mapnik::value_error("failed to parse image-filters: '" + filters + "'");
     }
-    style.image_filters().swap(new_filters);
+#ifdef _WINDOWS
+    style.image_filters() = new_filters;
+    // FIXME : https://svn.boost.org/trac/boost/ticket/2839
+#else
+    style.image_filters() = std::move(new_filters);
+#endif
 }
 
 void export_style()
@@ -91,6 +105,10 @@ void export_style()
                       &feature_type_style::comp_op,
                       &feature_type_style::set_comp_op,
                       "Set/get the comp-op (composite operation) of the style")
+        .add_property("image_filters_inflate",
+                      &feature_type_style::image_filters_inflate,
+                      &feature_type_style::image_filters_inflate,
+                      "Set/get the image_filters_inflate property of the style")
         .add_property("image_filters",
                       get_image_filters,
                       set_image_filters,
@@ -98,4 +116,3 @@ void export_style()
         ;
 
 }
-
diff --git a/bindings/python/mapnik_svg_generator_grammar.cpp b/bindings/python/mapnik_svg_generator_grammar.cpp
new file mode 100644
index 0000000..051eb0a
--- /dev/null
+++ b/bindings/python/mapnik_svg_generator_grammar.cpp
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/geometry.hpp>
+#include <mapnik/svg/geometry_svg_generator_impl.hpp>
+#include <string>
+
+using sink_type = std::back_insert_iterator<std::string>;
+template struct mapnik::svg::svg_path_generator<sink_type, mapnik::geometry_type>;
diff --git a/bindings/python/mapnik_symbolizer.cpp b/bindings/python/mapnik_symbolizer.cpp
index d4a5357..2175b59 100644
--- a/bindings/python/mapnik_symbolizer.cpp
+++ b/bindings/python/mapnik_symbolizer.cpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
+ * Copyright (C) 2013 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +20,42 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/variant.hpp>
+#include <boost/python/suite/indexing/map_indexing_suite.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
-//symbolizer typdef here rather than mapnik/symbolizer.hpp
-#include <mapnik/rule.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/symbolizer_hash.hpp>
+#include <mapnik/symbolizer_utils.hpp>
+#include <mapnik/symbolizer_keys.hpp>
+#include <mapnik/image_util.hpp>
+#include <mapnik/parse_path.hpp>
+#include <mapnik/path_expression.hpp>
+#include "mapnik_enumeration.hpp"
+#include "mapnik_svg.hpp"
+#include <mapnik/graphics.hpp>
+#include <mapnik/expression_node.hpp>
+#include <mapnik/value_error.hpp>
+#include <mapnik/marker_cache.hpp> // for known_svg_prefix_
+#include <mapnik/group/group_layout.hpp>
+#include <mapnik/group/group_rule.hpp>
+#include <mapnik/group/group_symbolizer_properties.hpp>
+#include <mapnik/util/variant.hpp>
+
+// stl
+#include <sstream>
 
 using mapnik::symbolizer;
-
-using mapnik::rule;
 using mapnik::point_symbolizer;
 using mapnik::line_symbolizer;
 using mapnik::line_pattern_symbolizer;
@@ -42,186 +66,358 @@ using mapnik::shield_symbolizer;
 using mapnik::text_symbolizer;
 using mapnik::building_symbolizer;
 using mapnik::markers_symbolizer;
+using mapnik::debug_symbolizer;
+using mapnik::group_symbolizer;
+using mapnik::symbolizer_base;
+using mapnik::color;
+using mapnik::path_processor_type;
+using mapnik::path_expression_ptr;
+using mapnik::guess_type;
+using mapnik::expression_ptr;
+using mapnik::parse_path;
+
+
+namespace {
+using namespace boost::python;
+void __setitem__(mapnik::symbolizer_base & sym, std::string const& name, mapnik::symbolizer_base::value_type const& val)
+{
+    put(sym, mapnik::get_key(name), val);
+}
 
-struct get_symbolizer_type : public boost::static_visitor<std::string>
+std::shared_ptr<mapnik::symbolizer_base::value_type> numeric_wrapper(const object& arg)
 {
-public:
-    std::string operator () (point_symbolizer const& sym) const
+    std::shared_ptr<mapnik::symbolizer_base::value_type> result;
+    if (PyBool_Check(arg.ptr()))
     {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("point");
+        mapnik::value_bool val = extract<mapnik::value_bool>(arg);
+        result.reset(new mapnik::symbolizer_base::value_type(val));
     }
-
-    std::string operator () ( line_symbolizer const& sym) const
+    else if (PyFloat_Check(arg.ptr()))
     {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("line");
+        mapnik::value_double val = extract<mapnik::value_double>(arg);
+        result.reset(new mapnik::symbolizer_base::value_type(val));
     }
-
-    std::string operator () (line_pattern_symbolizer const& sym) const
+    else
     {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("line_pattern");
+        mapnik::value_integer val = extract<mapnik::value_integer>(arg);
+        result.reset(new mapnik::symbolizer_base::value_type(val));
     }
+    return result;
+}
 
-    std::string operator () (polygon_symbolizer const& sym ) const
-    {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("polygon");
-    }
+struct extract_python_object : public mapnik::util::static_visitor<boost::python::object>
+{
+    using result_type = boost::python::object;
 
-    std::string operator () (polygon_pattern_symbolizer const& sym) const
+    template <typename T>
+    auto operator() (T const& val) const -> result_type
     {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("polygon_pattern");
+        return result_type(val); // wrap into python object
     }
+};
 
-    std::string operator () (raster_symbolizer const& sym) const
+boost::python::object __getitem__(mapnik::symbolizer_base const& sym, std::string const& name)
+{
+    using const_iterator = symbolizer_base::cont_type::const_iterator;
+    mapnik::keys key = mapnik::get_key(name);
+    const_iterator itr = sym.properties.find(key);
+    if (itr != sym.properties.end())
     {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("raster");
+        return mapnik::util::apply_visitor(extract_python_object(), itr->second);
     }
+    //mapnik::property_meta_type const& meta = mapnik::get_meta(key);
+    //return mapnik::util::apply_visitor(extract_python_object(), std::get<1>(meta));
+    return boost::python::object();
+}
 
-    std::string operator () (shield_symbolizer const& sym) const
-    {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("shield");
-    }
+/*
+std::string __str__(mapnik::symbolizer const& sym)
+{
+    return mapnik::util::apply_visitor(mapnik::symbolizer_to_json(), sym);
+}
+*/
 
-    std::string operator () (text_symbolizer const& sym) const
-    {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("text");
-    }
+std::string get_symbolizer_type(symbolizer const& sym)
+{
+    return mapnik::symbolizer_name(sym); // FIXME - do we need this ?
+}
 
-    std::string operator () (building_symbolizer const& sym) const
-    {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("building");
-    }
+std::size_t hash_impl(symbolizer const& sym)
+{
+    return mapnik::util::apply_visitor(mapnik::symbolizer_hash_visitor(), sym);
+}
 
-    std::string operator () (markers_symbolizer const& sym) const
-    {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("markers");
-    }
+template <typename T>
+std::size_t hash_impl_2(T const& sym)
+{
+    return mapnik::symbolizer_hash::value<T>(sym);
+}
 
-    template <typename Symbolizer>
-    std::string operator() ( Symbolizer const& sym) const
+struct extract_underlying_type_visitor : mapnik::util::static_visitor<boost::python::object>
+{
+    template <typename T>
+    boost::python::object operator() (T const& sym) const
     {
-        boost::ignore_unused_variable_warning(sym);
-        return std::string("unknown");
+        return boost::python::object(sym);
     }
 };
 
-std::string get_symbol_type(symbolizer const& symbol)
+boost::python::object extract_underlying_type(symbolizer const& sym)
 {
-    std::string type = boost::apply_visitor( get_symbolizer_type(), symbol);
-    return type;
+    return mapnik::util::apply_visitor(extract_underlying_type_visitor(), sym);
 }
 
-const point_symbolizer& point_(symbolizer const& symbol )
-{
-    return boost::get<point_symbolizer>(symbol);
 }
 
-const line_symbolizer& line_( const symbolizer& symbol )
+void export_symbolizer()
 {
-    return boost::get<line_symbolizer>(symbol);
+    using namespace boost::python;
+
+    //implicitly_convertible<mapnik::value_bool, mapnik::symbolizer_base::value_type>();
+    implicitly_convertible<mapnik::value_integer, mapnik::symbolizer_base::value_type>();
+    implicitly_convertible<mapnik::value_double, mapnik::symbolizer_base::value_type>();
+    implicitly_convertible<std::string, mapnik::symbolizer_base::value_type>();
+    implicitly_convertible<mapnik::color, mapnik::symbolizer_base::value_type>();
+    implicitly_convertible<mapnik::expression_ptr, mapnik::symbolizer_base::value_type>();
+    implicitly_convertible<mapnik::enumeration_wrapper, mapnik::symbolizer_base::value_type>();
+    implicitly_convertible<std::shared_ptr<mapnik::group_symbolizer_properties>, mapnik::symbolizer_base::value_type>();
+
+    enum_<mapnik::keys>("keys")
+        .value("gamma", mapnik::keys::gamma)
+        .value("gamma_method",mapnik::keys::gamma_method)
+        ;
+
+    class_<symbolizer>("Symbolizer",no_init)
+        .def("type",get_symbolizer_type)
+        .def("__hash__",hash_impl)
+        .def("extract", extract_underlying_type)
+        ;
+
+    class_<symbolizer_base::value_type>("NumericWrapper")
+        .def("__init__", make_constructor(numeric_wrapper))
+        ;
+
+    class_<symbolizer_base>("SymbolizerBase",no_init)
+        .def("__setitem__",&__setitem__)
+        .def("__setattr__",&__setitem__)
+        .def("__getitem__",&__getitem__)
+        .def("__getattr__",&__getitem__)
+        //.def("__str__", &__str__)
+        .def(self == self) // __eq__
+        ;
 }
 
-const polygon_symbolizer& polygon_( const symbolizer& symbol )
+
+void export_shield_symbolizer()
 {
-    return boost::get<polygon_symbolizer>(symbol);
+    using namespace boost::python;
+    class_< shield_symbolizer, bases<text_symbolizer> >("ShieldSymbolizer",
+                                                        init<>("Default ctor"))
+        .def("__hash__",hash_impl_2<shield_symbolizer>)
+        ;
+
 }
 
-const raster_symbolizer& raster_( const symbolizer& symbol )
+void export_polygon_symbolizer()
 {
-    return boost::get<raster_symbolizer>(symbol);
+    using namespace boost::python;
+
+    class_<polygon_symbolizer, bases<symbolizer_base> >("PolygonSymbolizer",
+                                                        init<>("Default ctor"))
+        .def("__hash__",hash_impl_2<polygon_symbolizer>)
+        ;
+
 }
 
-const text_symbolizer& text_( const symbolizer& symbol )
+void export_polygon_pattern_symbolizer()
 {
-    return boost::get<text_symbolizer>(symbol);
+    using namespace boost::python;
+
+    mapnik::enumeration_<mapnik::pattern_alignment_e>("pattern_alignment")
+        .value("LOCAL",mapnik::LOCAL_ALIGNMENT)
+        .value("GLOBAL",mapnik::GLOBAL_ALIGNMENT)
+        ;
+
+    class_<polygon_pattern_symbolizer>("PolygonPatternSymbolizer",
+                                       init<>("Default ctor"))
+        .def("__hash__",hash_impl_2<polygon_pattern_symbolizer>)
+        ;
 }
 
-const shield_symbolizer& shield_( const symbolizer& symbol )
+void export_raster_symbolizer()
 {
-    return boost::get<shield_symbolizer>(symbol);
+    using namespace boost::python;
+
+    class_<raster_symbolizer, bases<symbolizer_base> >("RasterSymbolizer",
+                              init<>("Default ctor"))
+        ;
 }
 
-const line_pattern_symbolizer& line_pattern_( const symbolizer& symbol )
+void export_point_symbolizer()
 {
-    return boost::get<line_pattern_symbolizer>(symbol);
+    using namespace boost::python;
+
+    mapnik::enumeration_<mapnik::point_placement_e>("point_placement")
+        .value("CENTROID",mapnik::CENTROID_POINT_PLACEMENT)
+        .value("INTERIOR",mapnik::INTERIOR_POINT_PLACEMENT)
+        ;
+
+    class_<point_symbolizer, bases<symbolizer_base> >("PointSymbolizer",
+                             init<>("Default Point Symbolizer - 4x4 black square"))
+        .def("__hash__",hash_impl_2<point_symbolizer>)
+        ;
 }
 
-const polygon_pattern_symbolizer& polygon_pattern_( const symbolizer& symbol )
+void export_markers_symbolizer()
 {
-    return boost::get<polygon_pattern_symbolizer>(symbol);
+    using namespace boost::python;
+
+    mapnik::enumeration_<mapnik::marker_placement_e>("marker_placement")
+        .value("POINT_PLACEMENT",mapnik::MARKER_POINT_PLACEMENT)
+        .value("INTERIOR_PLACEMENT",mapnik::MARKER_INTERIOR_PLACEMENT)
+        .value("LINE_PLACEMENT",mapnik::MARKER_LINE_PLACEMENT)
+        ;
+
+    mapnik::enumeration_<mapnik::marker_multi_policy_e>("marker_multi_policy")
+        .value("EACH",mapnik::MARKER_EACH_MULTI)
+        .value("WHOLE",mapnik::MARKER_WHOLE_MULTI)
+        .value("LARGEST",mapnik::MARKER_LARGEST_MULTI)
+        ;
+
+    class_<markers_symbolizer, bases<symbolizer_base> >("MarkersSymbolizer",
+                               init<>("Default Markers Symbolizer - circle"))
+        .def("__hash__",hash_impl_2<markers_symbolizer>)
+        ;
 }
 
-const building_symbolizer& building_( const symbolizer& symbol )
+
+void export_line_symbolizer()
 {
-    return boost::get<building_symbolizer>(symbol);
+    using namespace boost::python;
+
+    mapnik::enumeration_<mapnik::line_rasterizer_e>("line_rasterizer")
+        .value("FULL",mapnik::RASTERIZER_FULL)
+        .value("FAST",mapnik::RASTERIZER_FAST)
+        ;
+
+    mapnik::enumeration_<mapnik::line_cap_e>("stroke_linecap",
+                             "The possible values for a line cap used when drawing\n"
+                             "with a stroke.\n")
+        .value("BUTT_CAP",mapnik::BUTT_CAP)
+        .value("SQUARE_CAP",mapnik::SQUARE_CAP)
+        .value("ROUND_CAP",mapnik::ROUND_CAP)
+        ;
+
+    mapnik::enumeration_<mapnik::line_join_e>("stroke_linejoin",
+                                      "The possible values for the line joining mode\n"
+                                      "when drawing with a stroke.\n")
+        .value("MITER_JOIN",mapnik::MITER_JOIN)
+        .value("MITER_REVERT_JOIN",mapnik::MITER_REVERT_JOIN)
+        .value("ROUND_JOIN",mapnik::ROUND_JOIN)
+        .value("BEVEL_JOIN",mapnik::BEVEL_JOIN)
+        ;
+
+
+    class_<line_symbolizer, bases<symbolizer_base> >("LineSymbolizer",
+                            init<>("Default LineSymbolizer - 1px solid black"))
+        .def("__hash__",hash_impl_2<line_symbolizer>)
+        ;
 }
 
-const markers_symbolizer& markers_( const symbolizer& symbol )
+void export_line_pattern_symbolizer()
 {
-    return boost::get<markers_symbolizer>(symbol);
+    using namespace boost::python;
+
+    class_<line_pattern_symbolizer, bases<symbolizer_base> >("LinePatternSymbolizer",
+                                    init<> ("Default LinePatternSymbolizer"))
+        .def("__hash__",hash_impl_2<line_pattern_symbolizer>)
+        ;
 }
 
-struct symbolizer_hash_visitor : public boost::static_visitor<std::size_t>
+void export_debug_symbolizer()
 {
-    template <typename T>
-    std::size_t operator() (T const& sym) const
-    {
-        return mapnik::symbolizer_hash::value(sym);
-    }
-};
+    using namespace boost::python;
 
-std::size_t hash_impl(symbolizer const& sym)
-{
-    return boost::apply_visitor(symbolizer_hash_visitor(), sym);
+    mapnik::enumeration_<mapnik::debug_symbolizer_mode_e>("debug_symbolizer_mode")
+        .value("COLLISION",mapnik::DEBUG_SYM_MODE_COLLISION)
+        .value("VERTEX",mapnik::DEBUG_SYM_MODE_VERTEX)
+        ;
+
+    class_<debug_symbolizer, bases<symbolizer_base> >("DebugSymbolizer",
+                             init<>("Default debug Symbolizer"))
+        .def("__hash__",hash_impl_2<debug_symbolizer>)
+        ;
 }
 
-void export_symbolizer()
+void export_building_symbolizer()
 {
     using namespace boost::python;
 
-    class_<symbolizer>("Symbolizer",no_init)
-
-        .def("type",get_symbol_type)
+    class_<building_symbolizer, bases<symbolizer_base> >("BuildingSymbolizer",
+                               init<>("Default BuildingSymbolizer"))
+        .def("__hash__",hash_impl_2<building_symbolizer>)
+        ;
 
-        .def("__hash__",hash_impl)
+}
 
-        .def("point",point_,
-             return_value_policy<copy_const_reference>())
+namespace {
 
-        .def("line",line_,
-             return_value_policy<copy_const_reference>())
+void group_symbolizer_properties_set_layout_simple(mapnik::group_symbolizer_properties &p,
+                                                   mapnik::simple_row_layout &s)
+{
+    p.set_layout(s);
+}
 
-        .def("line_pattern",line_pattern_,
-             return_value_policy<copy_const_reference>())
+void group_symbolizer_properties_set_layout_pair(mapnik::group_symbolizer_properties &p,
+                                                 mapnik::pair_layout &s)
+{
+    p.set_layout(s);
+}
 
-        .def("polygon",polygon_,
-             return_value_policy<copy_const_reference>())
+std::shared_ptr<mapnik::group_rule> group_rule_construct1(mapnik::expression_ptr p)
+{
+    return std::make_shared<mapnik::group_rule>(p, mapnik::expression_ptr());
+}
 
-        .def("polygon_pattern",polygon_pattern_,
-             return_value_policy<copy_const_reference>())
+} // anonymous namespace
 
-        .def("raster",raster_,
-             return_value_policy<copy_const_reference>())
+void export_group_symbolizer()
+{
+    using namespace boost::python;
+    using mapnik::group_rule;
+    using mapnik::simple_row_layout;
+    using mapnik::pair_layout;
+    using mapnik::group_symbolizer_properties;
+
+    class_<group_rule, std::shared_ptr<group_rule> >("GroupRule",
+                                                     init<expression_ptr, expression_ptr>())
+        .def("__init__", boost::python::make_constructor(group_rule_construct1))
+        .def("append", &group_rule::append)
+        .def("set_filter", &group_rule::set_filter)
+        .def("set_repeat_key", &group_rule::set_repeat_key)
+        ;
 
-        .def("shield",shield_,
-             return_value_policy<copy_const_reference>())
+    class_<simple_row_layout>("SimpleRowLayout")
+        .def("item_margin", &simple_row_layout::get_item_margin)
+        .def("set_item_margin", &simple_row_layout::set_item_margin)
+        ;
 
-        .def("text",text_,
-             return_value_policy<copy_const_reference>())
+    class_<pair_layout>("PairLayout")
+        .def("item_margin", &simple_row_layout::get_item_margin)
+        .def("set_item_margin", &simple_row_layout::set_item_margin)
+        .def("max_difference", &pair_layout::get_max_difference)
+        .def("set_max_difference", &pair_layout::set_max_difference)
+        ;
 
-        .def("building",building_,
-             return_value_policy<copy_const_reference>())
+    class_<group_symbolizer_properties, std::shared_ptr<group_symbolizer_properties> >("GroupSymbolizerProperties")
+        .def("add_rule", &group_symbolizer_properties::add_rule)
+        .def("set_layout", &group_symbolizer_properties_set_layout_simple)
+        .def("set_layout", &group_symbolizer_properties_set_layout_pair)
+        ;
 
-        .def("markers",markers_,
-             return_value_policy<copy_const_reference>())
+    class_<group_symbolizer, bases<symbolizer_base> >("GroupSymbolizer",
+                                                      init<>("Default GroupSymbolizer"))
+        .def("__hash__",hash_impl_2<group_symbolizer>)
         ;
+
 }
diff --git a/bindings/python/mapnik_text_placement.cpp b/bindings/python/mapnik_text_placement.cpp
index 0520132..8ab723e 100644
--- a/bindings/python/mapnik_text_placement.cpp
+++ b/bindings/python/mapnik_text_placement.cpp
@@ -19,24 +19,33 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  *
  *****************************************************************************/
+
+#include <mapnik/config.hpp>
+
+// boost
+#include "boost_std_shared_shim.hpp"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
 #include <boost/python/stl_iterator.hpp>
 #include <boost/noncopyable.hpp>
-
-#include <mapnik/text_properties.hpp>
-#include <mapnik/text_placements/simple.hpp>
-#include <mapnik/text_placements/list.hpp>
-#include <mapnik/formatting/text.hpp>
-#include <mapnik/formatting/list.hpp>
-#include <mapnik/formatting/format.hpp>
-#include <mapnik/formatting/expression_format.hpp>
-#include <mapnik/processed_text.hpp>
-#include <mapnik/expression_string.hpp>
-#include <mapnik/text_symbolizer.hpp>
+#pragma GCC diagnostic pop
+
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/placements/simple.hpp>
+#include <mapnik/text/placements/list.hpp>
+#include <mapnik/text/formatting/text.hpp>
+#include <mapnik/text/formatting/list.hpp>
+#include <mapnik/text/formatting/format.hpp>
+#include <mapnik/text/formatting/layout.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/symbolizer.hpp>
 
 #include "mapnik_enumeration.hpp"
 #include "mapnik_threads.hpp"
-#include "python_optional.hpp"
 
 using namespace mapnik;
 
@@ -53,14 +62,55 @@ using namespace mapnik;
 */
 
 namespace {
+
 using namespace boost::python;
 
-boost::python::tuple get_displacement(text_symbolizer_properties const& t)
+// This class works around a feature in boost python.
+// See http://osdir.com/ml/python.c++/2003-11/msg00158.html
+
+template <typename T,
+          typename X1 = boost::python::detail::not_specified,
+          typename X2 = boost::python::detail::not_specified,
+          typename X3 = boost::python::detail::not_specified>
+class class_with_converter : public boost::python::class_<T, X1, X2, X3>
+{
+public:
+    using self = class_with_converter<T,X1,X2,X3>;
+    // Construct with the class name, with or without docstring, and default __init__() function
+    class_with_converter(char const* name, char const* doc = 0) : boost::python::class_<T, X1, X2, X3>(name, doc)  { }
+
+    // Construct with class name, no docstring, and an uncallable __init__ function
+    class_with_converter(char const* name, boost::python::no_init_t y) : boost::python::class_<T, X1, X2, X3>(name, y) { }
+
+    // Construct with class name, docstring, and an uncallable __init__ function
+    class_with_converter(char const* name, char const* doc, boost::python::no_init_t y) : boost::python::class_<T, X1, X2, X3>(name, doc, y) { }
+
+    // Construct with class name and init<> function
+    template <class DerivedT> class_with_converter(char const* name, boost::python::init_base<DerivedT> const& i)
+        : boost::python::class_<T, X1, X2, X3>(name, i) { }
+
+    // Construct with class name, docstring and init<> function
+    template <class DerivedT>
+    inline class_with_converter(char const* name, char const* doc, boost::python::init_base<DerivedT> const& i)
+        : boost::python::class_<T, X1, X2, X3>(name, doc, i) { }
+
+    template <class D>
+    self& def_readwrite_convert(char const* name, D const& d, char const* /*doc*/=0)
+    {
+        this->add_property(name,
+                           boost::python::make_getter(d, boost::python::return_value_policy<boost::python::return_by_value>()),
+                           boost::python::make_setter(d, boost::python::default_call_policies()));
+        return *this;
+    }
+};
+
+/*
+boost::python::tuple get_displacement(text_layout_properties const& t)
 {
-    return boost::python::make_tuple(t.displacement.first, t.displacement.second);
+    return boost::python::make_tuple(0.0,0.0);// FIXME t.displacement.x, t.displacement.y);
 }
 
-void set_displacement(text_symbolizer_properties &t, boost::python::tuple arg)
+void set_displacement(text_layout_properties &t, boost::python::tuple arg)
 {
     if (len(arg) != 2)
     {
@@ -71,23 +121,22 @@ void set_displacement(text_symbolizer_properties &t, boost::python::tuple arg)
         throw_error_already_set();
     }
 
-    double x = extract<double>(arg[0]);
-    double y = extract<double>(arg[1]);
-    t.displacement = std::make_pair(x, y);
+    //double x = extract<double>(arg[0]);
+    //double y = extract<double>(arg[1]);
+    //t.displacement.set(x, y); FIXME
 }
 
 
-struct NodeWrap: formatting::node, wrapper<formatting::node>
+struct NodeWrap
+    : formatting::node, wrapper<formatting::node>
 {
-    NodeWrap() : formatting::node(), wrapper<formatting::node>()
-    {
-
-    }
+    NodeWrap()
+        : formatting::node(), wrapper<formatting::node>() {}
 
-    void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    void apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
         python_block_auto_unblock b;
-        this->get_override("apply")(ptr(&p), ptr(&feature), ptr(&output));
+        this->get_override("apply")(ptr(&p), ptr(&feature), ptr(&vars), ptr(&output));
     }
 
     virtual void add_expressions(expression_set &output) const
@@ -108,78 +157,98 @@ struct NodeWrap: formatting::node, wrapper<formatting::node>
         formatting::node::add_expressions(output);
     }
 };
+*/
+/*
+struct TextNodeWrap
+    : formatting::text_node, wrapper<formatting::text_node>
+{
+    TextNodeWrap(expression_ptr expr)
+        : formatting::text_node(expr), wrapper<formatting::text_node>() {}
 
+    TextNodeWrap(std::string expr_text)
+        : formatting::text_node(expr_text), wrapper<formatting::text_node>() {}
 
-struct TextNodeWrap: formatting::text_node, wrapper<formatting::text_node>
-{
-    TextNodeWrap(expression_ptr expr) : formatting::text_node(expr), wrapper<formatting::text_node>()
+    virtual void apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
-
+        if(override o = this->get_override("apply"))
+        {
+            python_block_auto_unblock b;
+            o(ptr(&p), ptr(&feature), ptr(&vars), ptr(&output));
+        }
+        else
+        {
+            formatting::text_node::apply(p, feature, vars, output);
+        }
     }
 
-    TextNodeWrap(std::string expr_text) : formatting::text_node(expr_text), wrapper<formatting::text_node>()
+    void default_apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
-
+        formatting::text_node::apply(p, feature, vars, output);
     }
-
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+};
+*/
+/*
+struct FormatNodeWrap
+    : formatting::format_node, wrapper<formatting::format_node>
+{
+    virtual void apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
         if(override o = this->get_override("apply"))
         {
             python_block_auto_unblock b;
-            o(ptr(&p), ptr(&feature), ptr(&output));
+            o(ptr(&p), ptr(&feature), ptr(&vars), ptr(&output));
         }
         else
         {
-            formatting::text_node::apply(p, feature, output);
+            formatting::format_node::apply(p, feature, vars ,output);
         }
     }
 
-    void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    void default_apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
-        formatting::text_node::apply(p, feature, output);
+        formatting::format_node::apply(p, feature, vars, output);
     }
 };
 
-struct FormatNodeWrap: formatting::format_node, wrapper<formatting::format_node>
+struct ExprFormatWrap: formatting::expression_format, wrapper<formatting::expression_format>
 {
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    virtual void apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
         if(override o = this->get_override("apply"))
         {
             python_block_auto_unblock b;
-            o(ptr(&p), ptr(&feature), ptr(&output));
+            o(ptr(&p), ptr(&feature), ptr(&vars), ptr(&output));
         }
         else
         {
-            formatting::format_node::apply(p, feature, output);
+            formatting::expression_format::apply(p, feature, vars, output);
         }
     }
 
-    void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    void default_apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
-        formatting::format_node::apply(p, feature, output);
+        formatting::expression_format::apply(p, feature, vars, output);
     }
 };
 
-struct ExprFormatWrap: formatting::expression_format, wrapper<formatting::expression_format>
+struct LayoutNodeWrap: formatting::layout_node, wrapper<formatting::layout_node>
 {
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    virtual void apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
         if(override o = this->get_override("apply"))
         {
             python_block_auto_unblock b;
-            o(ptr(&p), ptr(&feature), ptr(&output));
+            o(ptr(&p), ptr(&feature), ptr(&vars), ptr(&output));
         }
         else
         {
-            formatting::expression_format::apply(p, feature, output);
+            formatting::layout_node::apply(p, feature, vars, output);
         }
     }
 
-    void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    void default_apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
-        formatting::expression_format::apply(p, feature, output);
+        formatting::layout_node::apply(p, feature, vars, output);
     }
 };
 
@@ -194,29 +263,32 @@ struct ListNodeWrap: formatting::list_node, wrapper<formatting::list_node>
     ListNodeWrap(object l) : formatting::list_node(), wrapper<formatting::list_node>()
     {
         stl_input_iterator<formatting::node_ptr> begin(l), end;
-        children_.insert(children_.end(), begin, end);
+        while (begin != end)
+        {
+           children_.push_back(*begin);
+           ++begin;
+        }
     }
 
-    /* TODO: Add constructor taking variable number of arguments.
-       http://wiki.python.org/moin/boost.python/HowTo#A.22Raw.22_function */
-
+    // TODO: Add constructor taking variable number of arguments.
+       http://wiki.python.org/moin/boost.python/HowTo#A.22Raw.22_function
 
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    virtual void apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
         if(override o = this->get_override("apply"))
         {
             python_block_auto_unblock b;
-            o(ptr(&p), ptr(&feature), ptr(&output));
+            o(ptr(&p), ptr(&feature), ptr(&vars), ptr(&output));
         }
         else
         {
-            formatting::list_node::apply(p, feature, output);
+            formatting::list_node::apply(p, feature, vars, output);
         }
     }
 
-    void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
+    void default_apply(evaluated_format_properties_ptr p, feature_impl const& feature, attributes const& vars, text_layout &output) const
     {
-        formatting::list_node::apply(p, feature, output);
+        formatting::list_node::apply(p, feature, vars, output);
     }
 
     inline void IndexError(){
@@ -249,13 +321,15 @@ struct ListNodeWrap: formatting::list_node, wrapper<formatting::list_node>
         children_.push_back(ptr);
     }
 };
-
+*/
+/*
 struct TextPlacementsWrap: text_placements, wrapper<text_placements>
 {
     text_placement_info_ptr get_placement_info(double scale_factor_) const
     {
         python_block_auto_unblock b;
-        return this->get_override("get_placement_info")();
+        //return this->get_override("get_placement_info")();
+        return text_placement_info_ptr();
     }
 };
 
@@ -280,12 +354,13 @@ void insert_expression(expression_set *set, expression_ptr p)
     set->insert(p);
 }
 
-char_properties & get_format(text_symbolizer const& sym)
+
+evaluated_format_properties_ptr get_format(text_symbolizer const& sym)
 {
     return sym.get_placement_options()->defaults.format;
 }
 
-void set_format(text_symbolizer const& sym, char_properties & format)
+void set_format(text_symbolizer const& sym, evaluated_format_properties_ptr format)
 {
     sym.get_placement_options()->defaults.format = format;
 }
@@ -299,11 +374,12 @@ void set_properties(text_symbolizer const& sym, text_symbolizer_properties & def
 {
     sym.get_placement_options()->defaults = defaults;
 }
-
+*/
 }
 
 void export_text_placement()
 {
+    /*
     using namespace boost::python;
 
     enumeration_<label_placement_e>("label_placement")
@@ -344,161 +420,114 @@ void export_text_placement()
         .value("FULL",HALO_RASTERIZER_FULL)
         .value("FAST",HALO_RASTERIZER_FAST)
         ;
-
+    */
     class_<text_symbolizer>("TextSymbolizer",
                             init<>())
-        .def(init<expression_ptr, std::string const&, unsigned, color const&>())
-        .add_property("placements",
-                      &text_symbolizer::get_placement_options,
-                      &text_symbolizer::set_placement_options)
-        //TODO: Check return policy, is there a better way to do this?
-        .add_property("format",
-                      make_function(&get_format, return_value_policy<reference_existing_object>()),
-                      &set_format,
-                      "Shortcut for placements.defaults.default_format")
-        .add_property("properties",
-                      make_function(&get_properties, return_value_policy<reference_existing_object>()),
-                      &set_properties,
-                      "Shortcut for placements.defaults")
-        .add_property("comp_op",
-                      &text_symbolizer::comp_op,
-                      &text_symbolizer::set_comp_op,
-                      "Set/get the comp-op")
-        .add_property("clip",
-                      &text_symbolizer::clip,
-                      &text_symbolizer::set_clip,
-                      "Set/get the text geometry's clipping status")
-        .add_property("halo_rasterizer",
-                      &text_symbolizer::get_halo_rasterizer,
-                      &text_symbolizer::set_halo_rasterizer,
-                      "Set/get the halo rasterizer method")
         ;
-
+    /*
 
     class_with_converter<text_symbolizer_properties>
         ("TextSymbolizerProperties")
         .def_readwrite_convert("label_placement", &text_symbolizer_properties::label_placement)
-        .def_readwrite_convert("horizontal_alignment", &text_symbolizer_properties::halign)
-        .def_readwrite_convert("justify_alignment", &text_symbolizer_properties::jalign)
-        .def_readwrite_convert("vertical_alignment", &text_symbolizer_properties::valign)
-        .def_readwrite("orientation", &text_symbolizer_properties::orientation)
-        .add_property("displacement",
-                      &get_displacement,
-                      &set_displacement)
+        .def_readwrite_convert("upright", &text_symbolizer_properties::upright)
         .def_readwrite("label_spacing", &text_symbolizer_properties::label_spacing)
         .def_readwrite("label_position_tolerance", &text_symbolizer_properties::label_position_tolerance)
         .def_readwrite("avoid_edges", &text_symbolizer_properties::avoid_edges)
+        .def_readwrite("margin", &text_symbolizer_properties::margin)
+        .def_readwrite("repeat_distance", &text_symbolizer_properties::repeat_distance)
         .def_readwrite("minimum_distance", &text_symbolizer_properties::minimum_distance)
         .def_readwrite("minimum_padding", &text_symbolizer_properties::minimum_padding)
         .def_readwrite("minimum_path_length", &text_symbolizer_properties::minimum_path_length)
         .def_readwrite("maximum_angle_char_delta", &text_symbolizer_properties::max_char_angle_delta)
-        .def_readwrite("force_odd_labels", &text_symbolizer_properties::force_odd_labels)
         .def_readwrite("allow_overlap", &text_symbolizer_properties::allow_overlap)
         .def_readwrite("largest_bbox_only", &text_symbolizer_properties::largest_bbox_only)
-        .def_readwrite("text_ratio", &text_symbolizer_properties::text_ratio)
-        .def_readwrite("wrap_width", &text_symbolizer_properties::wrap_width)
-        .def_readwrite("format", &text_symbolizer_properties::format)
+        .def_readwrite("layout_defaults", &text_symbolizer_properties::layout_defaults)
+        //.def_readwrite("format", &text_symbolizer_properties::format)
         .add_property ("format_tree",
                        &text_symbolizer_properties::format_tree,
                        &text_symbolizer_properties::set_format_tree);
-    /* from_xml, to_xml operate on mapnik's internal XML tree and don't make sense in python.
-       add_expressions isn't useful in python either. The result is only needed by
-       attribute_collector (which isn't exposed in python) and
-       it just calls add_expressions of the associated formatting tree.
-       set_old_style expression is just a compatibility wrapper and doesn't need to be exposed in python. */
+    //from_xml, to_xml operate on mapnik's internal XML tree and don't make sense in python.
+     //  add_expressions isn't useful in python either. The result is only needed by
+     //  attribute_collector (which isn't exposed in python) and
+     //  it just calls add_expressions of the associated formatting tree.
+     //  set_old_style expression is just a compatibility wrapper and doesn't need to be exposed in python.
     ;
 
-
-    class_with_converter<char_properties>
+    class_with_converter<text_layout_properties>
+        ("TextLayoutProperties")
+        .def_readwrite_convert("horizontal_alignment", &text_layout_properties::halign)
+        .def_readwrite_convert("justify_alignment", &text_layout_properties::jalign)
+        .def_readwrite_convert("vertical_alignment", &text_layout_properties::valign)
+        .def_readwrite("text_ratio", &text_layout_properties::text_ratio)
+        .def_readwrite("wrap_width", &text_layout_properties::wrap_width)
+        .def_readwrite("wrap_before", &text_layout_properties::wrap_before)
+        .def_readwrite("orientation", &text_layout_properties::orientation)
+        .def_readwrite("rotate_displacement", &text_layout_properties::rotate_displacement)
+        .add_property("displacement", &get_displacement, &set_displacement);
+
+    class_with_converter<detail::evaluated_format_properties>
         ("CharProperties")
-        .def_readwrite_convert("text_transform", &char_properties::text_transform)
-        .def_readwrite_convert("fontset", &char_properties::fontset)
-        .def(init<char_properties const&>()) //Copy constructor
-        .def_readwrite("face_name", &char_properties::face_name)
-        .def_readwrite("text_size", &char_properties::text_size)
-        .def_readwrite("character_spacing", &char_properties::character_spacing)
-        .def_readwrite("line_spacing", &char_properties::line_spacing)
-        .def_readwrite("text_opacity", &char_properties::text_opacity)
-        .def_readwrite("wrap_char", &char_properties::wrap_char)
-        .def_readwrite("wrap_character", &char_properties::wrap_char)
-        .def_readwrite("wrap_before", &char_properties::wrap_before)
-        .def_readwrite("fill", &char_properties::fill)
-        .def_readwrite("halo_fill", &char_properties::halo_fill)
-        .def_readwrite("halo_radius", &char_properties::halo_radius)
-        /* from_xml, to_xml operate on mapnik's internal XML tree and don't make sense in python.*/
+        .def_readwrite_convert("text_transform", &detail::evaluated_format_properties::text_transform)
+        .def_readwrite_convert("fontset", &detail::evaluated_format_properties::fontset)
+        .def(init<detail::evaluated_format_properties const&>()) //Copy constructor
+        .def_readwrite("face_name", &detail::evaluated_format_properties::face_name)
+        .def_readwrite("text_size", &detail::evaluated_format_properties::text_size)
+        .def_readwrite("character_spacing", &detail::evaluated_format_properties::character_spacing)
+        .def_readwrite("line_spacing", &detail::evaluated_format_properties::line_spacing)
+        .def_readwrite("text_opacity", &detail::evaluated_format_properties::text_opacity)
+        .def_readwrite("fill", &detail::evaluated_format_properties::fill)
+        .def_readwrite("halo_fill", &detail::evaluated_format_properties::halo_fill)
+        .def_readwrite("halo_radius", &evaluated_format_properties::halo_radius)
+        //from_xml, to_xml operate on mapnik's internal XML tree and don't make sense in python.
         ;
-
     class_<TextPlacementsWrap,
-        boost::shared_ptr<TextPlacementsWrap>,
+        std::shared_ptr<TextPlacementsWrap>,
         boost::noncopyable>
         ("TextPlacements")
         .def_readwrite("defaults", &text_placements::defaults)
-        .def("get_placement_info", pure_virtual(&text_placements::get_placement_info))
-        /* TODO: add_expressions() */
+        //.def("get_placement_info", pure_virtual(&text_placements::get_placement_info))
+        // TODO: add_expressions()
         ;
-    register_ptr_to_python<boost::shared_ptr<text_placements> >();
+    register_ptr_to_python<std::shared_ptr<text_placements> >();
 
     class_<TextPlacementInfoWrap,
-        boost::shared_ptr<TextPlacementInfoWrap>,
+        std::shared_ptr<TextPlacementInfoWrap>,
         boost::noncopyable>
         ("TextPlacementInfo",
          init<text_placements const*, double>())
         .def("next", pure_virtual(&text_placement_info::next))
-        .def("get_actual_label_spacing", &text_placement_info::get_actual_label_spacing)
-        .def("get_actual_minimum_distance", &text_placement_info::get_actual_minimum_distance)
-        .def("get_actual_minimum_padding", &text_placement_info::get_actual_minimum_padding)
         .def_readwrite("properties", &text_placement_info::properties)
         .def_readwrite("scale_factor", &text_placement_info::scale_factor)
         ;
-    register_ptr_to_python<boost::shared_ptr<text_placement_info> >();
-
-
-    class_<processed_text,
-        boost::shared_ptr<processed_text>,
-        boost::noncopyable>
-        ("ProcessedText", no_init)
-        .def("push_back", &processed_text::push_back)
-        .def("clear", &processed_text::clear)
-        ;
+    register_ptr_to_python<std::shared_ptr<text_placement_info> >();
 
 
-    class_<expression_set,
-        boost::shared_ptr<expression_set>,
-        boost::noncopyable>
-        ("ExpressionSet")
+    class_<expression_set,std::shared_ptr<expression_set>,
+           boost::noncopyable>("ExpressionSet")
         .def("insert", &insert_expression);
     ;
 
-
-    //TODO: Python namespace
-    class_<NodeWrap,
-        boost::shared_ptr<NodeWrap>,
-        boost::noncopyable>
-        ("FormattingNode")
+    class_<formatting::node,std::shared_ptr<formatting::node>,
+           boost::noncopyable>("FormattingNode")
         .def("apply", pure_virtual(&formatting::node::apply))
-        .def("add_expressions",
-             &formatting::node::add_expressions,
-             &NodeWrap::default_add_expressions)
+        .def("add_expressions", pure_virtual(&formatting::node::add_expressions))
+        .def("to_xml", pure_virtual(&formatting::node::to_xml))
         ;
-    register_ptr_to_python<boost::shared_ptr<formatting::node> >();
 
+    register_ptr_to_python<std::shared_ptr<formatting::node> >();
 
-    class_<TextNodeWrap,
-        boost::shared_ptr<TextNodeWrap>,
-        bases<formatting::node>,
-        boost::noncopyable>
-        ("FormattingText", init<expression_ptr>())
+    class_<formatting::text_node,
+           std::shared_ptr<formatting::text_node>,
+           bases<formatting::node>,boost::noncopyable>("FormattingText", init<expression_ptr>())
         .def(init<std::string>())
-        .def("apply", &formatting::text_node::apply, &TextNodeWrap::default_apply)
-        .add_property("text",
-                      &formatting::text_node::get_text,
-                      &formatting::text_node::set_text)
+        .def("apply", &formatting::text_node::apply)//, &TextNodeWrap::default_apply)
+        .add_property("text",&formatting::text_node::get_text, &formatting::text_node::set_text)
         ;
-    register_ptr_to_python<boost::shared_ptr<formatting::text_node> >();
 
+    register_ptr_to_python<std::shared_ptr<formatting::text_node> >();
 
     class_with_converter<FormatNodeWrap,
-        boost::shared_ptr<FormatNodeWrap>,
+        std::shared_ptr<FormatNodeWrap>,
         bases<formatting::node>,
         boost::noncopyable>
         ("FormattingFormat")
@@ -507,9 +536,6 @@ void export_text_placement()
         .def_readwrite_convert("character_spacing", &formatting::format_node::character_spacing)
         .def_readwrite_convert("line_spacing", &formatting::format_node::line_spacing)
         .def_readwrite_convert("text_opacity", &formatting::format_node::text_opacity)
-        .def_readwrite_convert("wrap_char", &formatting::format_node::wrap_char)
-        .def_readwrite_convert("wrap_character", &formatting::format_node::wrap_char)
-        .def_readwrite_convert("wrap_before", &formatting::format_node::wrap_before)
         .def_readwrite_convert("text_transform", &formatting::format_node::text_transform)
         .def_readwrite_convert("fill", &formatting::format_node::fill)
         .def_readwrite_convert("halo_fill", &formatting::format_node::halo_fill)
@@ -519,10 +545,10 @@ void export_text_placement()
                       &formatting::format_node::get_child,
                       &formatting::format_node::set_child)
         ;
-    register_ptr_to_python<boost::shared_ptr<formatting::format_node> >();
+    register_ptr_to_python<std::shared_ptr<formatting::format_node> >();
 
     class_<ListNodeWrap,
-        boost::shared_ptr<ListNodeWrap>,
+        std::shared_ptr<ListNodeWrap>,
         bases<formatting::node>,
         boost::noncopyable>
         ("FormattingList", init<>())
@@ -535,10 +561,10 @@ void export_text_placement()
         .def("append", &ListNodeWrap::append)
         ;
 
-    register_ptr_to_python<boost::shared_ptr<formatting::list_node> >();
+    register_ptr_to_python<std::shared_ptr<formatting::list_node> >();
 
     class_<ExprFormatWrap,
-        boost::shared_ptr<ExprFormatWrap>,
+        std::shared_ptr<ExprFormatWrap>,
         bases<formatting::node>,
         boost::noncopyable>
         ("FormattingExpressionFormat")
@@ -547,9 +573,6 @@ void export_text_placement()
         .def_readwrite("character_spacing", &formatting::expression_format::character_spacing)
         .def_readwrite("line_spacing", &formatting::expression_format::line_spacing)
         .def_readwrite("text_opacity", &formatting::expression_format::text_opacity)
-        .def_readwrite("wrap_char", &formatting::expression_format::wrap_char)
-        .def_readwrite("wrap_character", &formatting::expression_format::wrap_char)
-        .def_readwrite("wrap_before", &formatting::expression_format::wrap_before)
         .def_readwrite("fill", &formatting::expression_format::fill)
         .def_readwrite("halo_fill", &formatting::expression_format::halo_fill)
         .def_readwrite("halo_radius", &formatting::expression_format::halo_radius)
@@ -558,7 +581,7 @@ void export_text_placement()
                       &formatting::expression_format::get_child,
                       &formatting::expression_format::set_child)
         ;
-    register_ptr_to_python<boost::shared_ptr<formatting::expression_format> >();
-
+    register_ptr_to_python<std::shared_ptr<formatting::expression_format> >();
+*/
     //TODO: registry
 }
diff --git a/bindings/python/mapnik_threads.hpp b/bindings/python/mapnik_threads.hpp
index 85789ff..930ff37 100644
--- a/bindings/python/mapnik_threads.hpp
+++ b/bindings/python/mapnik_threads.hpp
@@ -22,9 +22,9 @@
 #ifndef MAPNIK_THREADS_HPP
 #define MAPNIK_THREADS_HPP
 
-#include <boost/thread.hpp>
-#include <boost/python.hpp>
-
+#include <boost/thread/tss.hpp>         // for thread_specific_ptr
+#include <Python.h>
+ 
 namespace mapnik {
 class python_thread
 {
diff --git a/bindings/python/mapnik_value_converter.hpp b/bindings/python/mapnik_value_converter.hpp
index 47707d9..42b9ba4 100644
--- a/bindings/python/mapnik_value_converter.hpp
+++ b/bindings/python/mapnik_value_converter.hpp
@@ -24,30 +24,26 @@
 
 // mapnik
 #include <mapnik/value.hpp>
-
+#include <mapnik/util/variant.hpp>
 // boost
 #include <boost/python.hpp>
 #include <boost/implicit_cast.hpp>
 
 namespace boost { namespace python {
 
-    struct value_converter : public boost::static_visitor<PyObject*>
+    struct value_converter : public mapnik::util::static_visitor<PyObject*>
     {
         PyObject * operator() (mapnik::value_integer val) const
         {
-#if PY_VERSION_HEX >= 0x03000000
-            return ::PyLong_FromLong(val);
-#else
-            return ::PyInt_FromLong(val);
-#endif
+            return ::PyLong_FromLongLong(val);
         }
 
-        PyObject * operator() (double val) const
+        PyObject * operator() (mapnik::value_double val) const
         {
             return ::PyFloat_FromDouble(val);
         }
 
-        PyObject * operator() (bool val) const
+        PyObject * operator() (mapnik::value_bool val) const
         {
             return ::PyBool_FromLong(val);
         }
@@ -75,7 +71,7 @@ namespace boost { namespace python {
     {
         static PyObject* convert(mapnik::value const& v)
         {
-            return boost::apply_visitor(value_converter(),v.base());
+            return mapnik::util::apply_visitor(value_converter(),v);
         }
 
     };
@@ -84,12 +80,11 @@ namespace boost { namespace python {
     {
         static PyObject* convert(mapnik::value_holder const& v)
         {
-            return boost::apply_visitor(value_converter(),v);
+            return mapnik::util::apply_visitor(value_converter(),v);
         }
     };
 
 
-    }
-}
+}}
 
 #endif // MAPNIK_PYTHON_BINDING_VALUE_CONVERTER_INCLUDED
diff --git a/bindings/python/mapnik_view_transform.cpp b/bindings/python/mapnik_view_transform.cpp
index 090e65f..d2194b1 100644
--- a/bindings/python/mapnik_view_transform.cpp
+++ b/bindings/python/mapnik_view_transform.cpp
@@ -20,18 +20,26 @@
  *
  *****************************************************************************/
 
+#include <mapnik/config.hpp>
+
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 
-using mapnik::CoordTransform;
+using mapnik::view_transform;
 
 struct view_transform_pickle_suite : boost::python::pickle_suite
 {
     static boost::python::tuple
-    getinitargs(const CoordTransform& c)
+    getinitargs(const view_transform& c)
     {
         using namespace boost::python;
         return boost::python::make_tuple(c.width(),c.height(),c.extent());
@@ -40,26 +48,26 @@ struct view_transform_pickle_suite : boost::python::pickle_suite
 
 namespace {
 
-mapnik::coord2d forward_point(mapnik::CoordTransform const& t, mapnik::coord2d const& in)
+mapnik::coord2d forward_point(mapnik::view_transform const& t, mapnik::coord2d const& in)
 {
     mapnik::coord2d out(in);
     t.forward(out);
     return out;
 }
 
-mapnik::coord2d backward_point(mapnik::CoordTransform const& t, mapnik::coord2d const& in)
+mapnik::coord2d backward_point(mapnik::view_transform const& t, mapnik::coord2d const& in)
 {
     mapnik::coord2d out(in);
     t.backward(out);
     return out;
 }
 
-mapnik::box2d<double> forward_envelope(mapnik::CoordTransform const& t, mapnik::box2d<double> const& in)
+mapnik::box2d<double> forward_envelope(mapnik::view_transform const& t, mapnik::box2d<double> const& in)
 {
     return t.forward(in);
 }
 
-mapnik::box2d<double> backward_envelope(mapnik::CoordTransform const& t, mapnik::box2d<double> const& in)
+mapnik::box2d<double> backward_envelope(mapnik::view_transform const& t, mapnik::box2d<double> const& in)
 {
     return t.backward(in);
 }
@@ -71,14 +79,14 @@ void export_view_transform()
     using mapnik::box2d;
     using mapnik::coord2d;
 
-    class_<CoordTransform>("ViewTransform",init<int,int,box2d<double> const& > (
+    class_<view_transform>("ViewTransform",init<int,int,box2d<double> const& > (
                                "Create a ViewTransform with a width and height as integers and extent"))
         .def_pickle(view_transform_pickle_suite())
         .def("forward", forward_point)
         .def("backward",backward_point)
         .def("forward", forward_envelope)
         .def("backward",backward_envelope)
-        .def("scale_x",&CoordTransform::scale_x)
-        .def("scale_y",&CoordTransform::scale_y)
+        .def("scale_x",&view_transform::scale_x)
+        .def("scale_y",&view_transform::scale_y)
         ;
 }
diff --git a/bindings/python/python_cairo.cpp b/bindings/python/python_cairo.cpp
deleted file mode 100644
index 76de106..0000000
--- a/bindings/python/python_cairo.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2008 Tom Hughes
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
-
-#include <boost/python/type_id.hpp>
-#include <boost/python/converter/registry.hpp>
-
-#include <pycairo.h>
-
-static Pycairo_CAPI_t *Pycairo_CAPI;
-
-static void *extract_surface(PyObject* op)
-{
-
-    if (PyObject_TypeCheck(op, const_cast<PyTypeObject*>(Pycairo_CAPI->Surface_Type)))
-    {
-        return op;
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-static void *extract_context(PyObject* op)
-{
-    if (PyObject_TypeCheck(op, const_cast<PyTypeObject*>(Pycairo_CAPI->Context_Type)))
-    {
-        return op;
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-void register_cairo()
-{
-#if PY_MAJOR_VERSION >= 3
-    Pycairo_CAPI = (Pycairo_CAPI_t*) PyCapsule_Import(const_cast<char *>("cairo.CAPI"), 0);
-#else
-    Pycairo_CAPI = (Pycairo_CAPI_t*) PyCObject_Import(const_cast<char *>("cairo"), const_cast<char *>("CAPI"));
-#endif
-    if (Pycairo_CAPI == NULL) return;
-
-    boost::python::converter::registry::insert(&extract_surface, boost::python::type_id<PycairoSurface>());
-    boost::python::converter::registry::insert(&extract_context, boost::python::type_id<PycairoContext>());
-}
-
-#else
-
-void register_cairo()
-{
-}
-
-#endif
diff --git a/bindings/python/python_grid_utils.cpp b/bindings/python/python_grid_utils.cpp
index e5bd510..cbb9ad1 100644
--- a/bindings/python/python_grid_utils.cpp
+++ b/bindings/python/python_grid_utils.cpp
@@ -20,10 +20,18 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
+#include <mapnik/config.hpp>
+
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
 #include <boost/python.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/foreach.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/map.hpp>
@@ -36,7 +44,6 @@
 #include <mapnik/value_error.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/feature_kv_iterator.hpp>
-#include "mapnik_value_converter.hpp"
 #include "python_grid_utils.hpp"
 
 // stl
@@ -50,8 +57,8 @@ void grid2utf(T const& grid_type,
                      boost::python::list& l,
                      std::vector<typename T::lookup_type>& key_order)
 {
-    typedef std::map< typename T::lookup_type, typename T::value_type> keys_type;
-    typedef typename keys_type::const_iterator keys_iterator;
+    using keys_type = std::map< typename T::lookup_type, typename T::value_type>;
+    using keys_iterator = typename keys_type::iterator;
 
     typename T::data_type const& data = grid_type.data();
     typename T::feature_key_type const& feature_keys = grid_type.get_feature_keys();
@@ -59,13 +66,13 @@ void grid2utf(T const& grid_type,
 
     keys_type keys;
     // start counting at utf8 codepoint 32, aka space character
-    boost::uint16_t codepoint = 32;
+    std::uint16_t codepoint = 32;
 
     unsigned array_size = data.width();
     for (unsigned y = 0; y < data.height(); ++y)
     {
-        boost::uint16_t idx = 0;
-        boost::scoped_array<Py_UNICODE> line(new Py_UNICODE[array_size]);
+        std::uint16_t idx = 0;
+        const std::unique_ptr<Py_UNICODE[]> line(new Py_UNICODE[array_size]);
         typename T::value_type const* row = data.getRow(y);
         for (unsigned x = 0; x < data.width(); ++x)
         {
@@ -114,21 +121,21 @@ void grid2utf(T const& grid_type,
                      std::vector<typename T::lookup_type>& key_order,
                      unsigned int resolution)
 {
-    typedef std::map< typename T::lookup_type, typename T::value_type> keys_type;
-    typedef typename keys_type::const_iterator keys_iterator;
+    using keys_type = std::map< typename T::lookup_type, typename T::value_type>;
+    using keys_iterator = typename keys_type::iterator;
 
     typename T::feature_key_type const& feature_keys = grid_type.get_feature_keys();
     typename T::feature_key_type::const_iterator feature_pos;
 
     keys_type keys;
     // start counting at utf8 codepoint 32, aka space character
-    boost::uint16_t codepoint = 32;
+    std::uint16_t codepoint = 32;
 
     unsigned array_size = std::ceil(grid_type.width()/static_cast<float>(resolution));
     for (unsigned y = 0; y < grid_type.height(); y=y+resolution)
     {
-        boost::uint16_t idx = 0;
-        boost::scoped_array<Py_UNICODE> line(new Py_UNICODE[array_size]);
+        std::uint16_t idx = 0;
+        const std::unique_ptr<Py_UNICODE[]> line(new Py_UNICODE[array_size]);
         mapnik::grid::value_type const* row = grid_type.getRow(y);
         for (unsigned x = 0; x < grid_type.width(); x=x+resolution)
         {
@@ -177,8 +184,8 @@ void grid2utf2(T const& grid_type,
                       std::vector<typename T::lookup_type>& key_order,
                       unsigned int resolution)
 {
-    typedef std::map< typename T::lookup_type, typename T::value_type> keys_type;
-    typedef typename keys_type::const_iterator keys_iterator;
+    using keys_type = std::map< typename T::lookup_type, typename T::value_type>;
+    using keys_iterator = typename keys_type::iterator;
 
     typename T::data_type const& data = grid_type.data();
     typename T::feature_key_type const& feature_keys = grid_type.get_feature_keys();
@@ -195,7 +202,7 @@ void grid2utf2(T const& grid_type,
     for (unsigned y = 0; y < target.height(); ++y)
     {
         uint16_t idx = 0;
-        boost::scoped_array<Py_UNICODE> line(new Py_UNICODE[array_size]);
+        const std::unique_ptr<Py_UNICODE[]> line(new Py_UNICODE[array_size]);
         mapnik::grid::value_type * row = target.getRow(y);
         unsigned x;
         for (x = 0; x < target.width(); ++x)
@@ -243,7 +250,7 @@ void write_features(T const& grid_type,
 
     std::set<std::string> const& attributes = grid_type.property_names();
     typename T::feature_type::const_iterator feat_end = g_features.end();
-    BOOST_FOREACH ( std::string const& key_item, key_order )
+    for ( std::string const& key_item :key_order )
     {
         if (key_item.empty())
         {
@@ -259,7 +266,7 @@ void write_features(T const& grid_type,
         bool found = false;
         boost::python::dict feat;
         mapnik::feature_ptr feature = feat_itr->second;
-        BOOST_FOREACH ( std::string const& attr, attributes )
+        for ( std::string const& attr : attributes )
         {
             if (attr == "__id__")
             {
@@ -303,7 +310,7 @@ void grid_encode_utf(T const& grid_type,
 
     // convert key order to proper python list
     boost::python::list keys_a;
-    BOOST_FOREACH ( typename T::lookup_type const& key_id, key_order )
+    for ( typename T::lookup_type const& key_id : key_order )
     {
         keys_a.append(key_id);
     }
@@ -339,15 +346,13 @@ boost::python::dict grid_encode( T const& grid, std::string const& format, bool
 template boost::python::dict grid_encode( mapnik::grid const& grid, std::string const& format, bool add_features, unsigned int resolution);
 template boost::python::dict grid_encode( mapnik::grid_view const& grid, std::string const& format, bool add_features, unsigned int resolution);
 
-/* new approach: key comes from grid object
- * grid size should be same as the map
- * encoding, resizing handled as method on grid object
- * whether features are dumped is determined by argument not 'fields'
- */
 void render_layer_for_grid(mapnik::Map const& map,
                                   mapnik::grid & grid,
-                                  unsigned layer_idx, // TODO - layer by name or index
-                                  boost::python::list const& fields)
+                                  unsigned layer_idx,
+                                  boost::python::list const& fields,
+                                  double scale_factor,
+                                  unsigned offset_x,
+                                  unsigned offset_y)
 {
     std::vector<mapnik::layer> const& layers = map.layers();
     std::size_t layer_num = layers.size();
@@ -390,85 +395,11 @@ void render_layer_for_grid(mapnik::Map const& map,
         attributes.insert(join_field);
     }
 
-    mapnik::grid_renderer<mapnik::grid> ren(map,grid,1.0,0,0);
+    mapnik::grid_renderer<mapnik::grid> ren(map,grid,scale_factor,offset_x,offset_y);
     mapnik::layer const& layer = layers[layer_idx];
     ren.apply(layer,attributes);
 }
 
-/* old, original impl - to be removed after further testing
- * grid object is created on the fly at potentially reduced size
- */
-boost::python::dict render_grid(mapnik::Map const& map,
-                                       unsigned layer_idx, // layer
-                                       std::string const& key, // key_name
-                                       unsigned int step, // resolution
-                                       boost::python::list const& fields)
-{
-
-    std::vector<mapnik::layer> const& layers = map.layers();
-    std::size_t layer_num = layers.size();
-    if (layer_idx >= layer_num) {
-        std::ostringstream s;
-        s << "Zero-based layer index '" << layer_idx << "' not valid, only '"
-          << layer_num << "' layers are in map\n";
-        throw std::runtime_error(s.str());
-    }
-
-    unsigned int grid_width = map.width()/step;
-    unsigned int grid_height = map.height()/step;
-
-    // TODO - no need to pass step here
-    mapnik::grid grid(grid_width,grid_height,key,step);
-
-    // convert python list to std::set
-    boost::python::ssize_t num_fields = boost::python::len(fields);
-    for(boost::python::ssize_t i=0; i<num_fields; i++) {
-        boost::python::extract<std::string> name(fields[i]);
-        if (name.check()) {
-            grid.add_property_name(name());
-        }
-        else
-        {
-            std::stringstream s;
-            s << "list of field names must be strings";
-            throw mapnik::value_error(s.str());
-        }
-    }
-
-    // copy property names
-    std::set<std::string> attributes = grid.property_names();
-    // todo - make this a static constant
-    std::string known_id_key = "__id__";
-    if (attributes.find(known_id_key) != attributes.end())
-    {
-        attributes.erase(known_id_key);
-    }
-
-    std::string join_field = grid.get_key();
-    if (known_id_key != join_field &&
-        attributes.find(join_field) == attributes.end())
-    {
-        attributes.insert(join_field);
-    }
-
-    try
-    {
-        mapnik::grid_renderer<mapnik::grid> ren(map,grid,1.0,0,0);
-        mapnik::layer const& layer = layers[layer_idx];
-        ren.apply(layer,attributes);
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    bool add_features = false;
-    if (num_fields > 0)
-        add_features = true;
-    // build dictionary and return to python
-    boost::python::dict json;
-    grid_encode_utf(grid,json,add_features,1);
-    return json;
 }
 
-}
+#endif
diff --git a/bindings/python/python_grid_utils.hpp b/bindings/python/python_grid_utils.hpp
index 2c4083d..f608944 100644
--- a/bindings/python/python_grid_utils.hpp
+++ b/bindings/python/python_grid_utils.hpp
@@ -66,24 +66,14 @@ void grid_encode_utf(T const& grid_type,
 template <typename T>
 boost::python::dict grid_encode( T const& grid, std::string const& format, bool add_features, unsigned int resolution);
 
-/* new approach: key comes from grid object
- * grid size should be same as the map
- * encoding, resizing handled as method on grid object
- * whether features are dumped is determined by argument not 'fields'
- */
 void render_layer_for_grid(const mapnik::Map& map,
-                                  mapnik::grid& grid,
-                                  unsigned layer_idx, // TODO - layer by name or index
-                                  boost::python::list const& fields);
-
-/* old, original impl - to be removed after further testing
- * grid object is created on the fly at potentially reduced size
- */
-boost::python::dict render_grid(const mapnik::Map& map,
-                                       unsigned layer_idx, // layer
-                                       std::string const& key, // key_name
-                                       unsigned int step, // resolution
-                                       boost::python::list const& fields);
+                           mapnik::grid& grid,
+                           unsigned layer_idx, // TODO - layer by name or index
+                           boost::python::list const& fields,
+                           double scale_factor,
+                           unsigned offset_x,
+                           unsigned offset_y);
+
 }
 
 #endif // MAPNIK_PYTHON_BINDING_GRID_UTILS_INCLUDED
diff --git a/bindings/python/python_optional.hpp b/bindings/python/python_optional.hpp
index 9bc38d1..3270679 100644
--- a/bindings/python/python_optional.hpp
+++ b/bindings/python/python_optional.hpp
@@ -196,43 +196,3 @@ struct python_optional<bool> : public mapnik::noncopyable
             optional_to_python, optional_from_python>();
     }
 };
-
-
-// This class works around a feature in boost python.
-// See http://osdir.com/ml/python.c++/2003-11/msg00158.html
-
-template <typename T,
-          typename X1 = boost::python::detail::not_specified,
-          typename X2 = boost::python::detail::not_specified,
-          typename X3 = boost::python::detail::not_specified>
-class class_with_converter : public boost::python::class_<T, X1, X2, X3>
-{
-public:
-    typedef class_with_converter<T,X1,X2,X3> self;
-    // Construct with the class name, with or without docstring, and default __init__() function
-    class_with_converter(char const* name, char const* doc = 0) : boost::python::class_<T, X1, X2, X3>(name, doc)  { }
-
-    // Construct with class name, no docstring, and an uncallable __init__ function
-    class_with_converter(char const* name, boost::python::no_init_t y) : boost::python::class_<T, X1, X2, X3>(name, y) { }
-
-    // Construct with class name, docstring, and an uncallable __init__ function
-    class_with_converter(char const* name, char const* doc, boost::python::no_init_t y) : boost::python::class_<T, X1, X2, X3>(name, doc, y) { }
-
-    // Construct with class name and init<> function
-    template <class DerivedT> class_with_converter(char const* name, boost::python::init_base<DerivedT> const& i)
-        : boost::python::class_<T, X1, X2, X3>(name, i) { }
-
-    // Construct with class name, docstring and init<> function
-    template <class DerivedT>
-    inline class_with_converter(char const* name, char const* doc, boost::python::init_base<DerivedT> const& i)
-        : boost::python::class_<T, X1, X2, X3>(name, doc, i) { }
-
-    template <class D>
-    self& def_readwrite_convert(char const* name, D const& d, char const* doc=0)
-    {
-        this->add_property(name,
-                           boost::python::make_getter(d, boost::python::return_value_policy<boost::python::return_by_value>()),
-                           boost::python::make_setter(d, boost::python::default_call_policies()));
-        return *this;
-    }
-};
diff --git a/bindings/python/python_to_value.hpp b/bindings/python/python_to_value.hpp
new file mode 100644
index 0000000..da4830e
--- /dev/null
+++ b/bindings/python/python_to_value.hpp
@@ -0,0 +1,96 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_PYTHON_BINDING_PYTHON_TO_VALUE
+#define MAPNIK_PYTHON_BINDING_PYTHON_TO_VALUE
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#include <boost/python.hpp>
+#pragma GCC diagnostic pop
+
+// mapnik
+#include <mapnik/value.hpp>
+#include <mapnik/unicode.hpp>
+#include <mapnik/attribute.hpp>
+
+
+namespace mapnik {
+
+    static mapnik::attributes dict2attr(boost::python::dict const& d)
+    {
+        using namespace boost::python;
+        mapnik::attributes vars;
+        mapnik::transcoder tr_("utf8");
+        boost::python::list keys=d.keys();
+        for (int i=0; i < len(keys); ++i)
+        {
+            std::string key = extract<std::string>(keys[i]);
+            object obj = d[key];
+            if (PyUnicode_Check(obj.ptr()))
+            {
+                PyObject* temp = PyUnicode_AsUTF8String(obj.ptr());
+                if (temp)
+                {
+    #if PY_VERSION_HEX >= 0x03000000
+                    char* c_str = PyBytes_AsString(temp);
+    #else
+                    char* c_str = PyString_AsString(temp);
+    #endif
+                    vars[key] = tr_.transcode(c_str);
+                    Py_DecRef(temp);
+                }
+                continue;
+            }
+
+            extract<std::string> ex0(obj);
+            if (ex0.check())
+            {
+                vars[key] = tr_.transcode(ex0().c_str());
+                continue;
+            }
+            extract<mapnik::value_integer> ex2(obj);
+            if (ex2.check())
+            {
+                vars[key] = ex2();
+                continue;
+            }
+            extract<double> ex3(obj);
+            if (ex3.check())
+            {
+                vars[key] = ex3();
+                continue;
+            }
+            extract<mapnik::value_bool> ex1(obj);
+            if (ex1.check())
+            {
+                vars[key] = ex1();
+                continue;
+            }
+        }
+        return vars;
+    }
+}
+
+#endif // MAPNIK_PYTHON_BINDING_PYTHON_TO_VALUE
diff --git a/boost/geometry/extensions/index/rtree/rtree.hpp b/boost/geometry/extensions/index/rtree/rtree.hpp
deleted file mode 100644
index 372a27d..0000000
--- a/boost/geometry/extensions/index/rtree/rtree.hpp
+++ /dev/null
@@ -1,774 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Boost.SpatialIndex - rtree implementation
-//
-// Copyright 2008 Federico J. Fernandez.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_HPP
-#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_HPP
-
-#include <cstddef>
-#include <iostream> // TODO: Remove if print() is removed
-#include <stdexcept>
-#include <utility>
-#include <vector>
-
-#include <boost/concept_check.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-
-#include <boost/geometry/extensions/index/rtree/rtree_node.hpp>
-#include <boost/geometry/extensions/index/rtree/rtree_leaf.hpp>
-
-namespace boost { namespace geometry { namespace index
-{
-
-template <typename Box, typename Value >
-class rtree
-{
-public:
-
-    typedef boost::shared_ptr<rtree_node<Box, Value> > node_pointer;
-    typedef boost::shared_ptr<rtree_leaf<Box, Value> > leaf_pointer;
-
-    /**
-     * \brief Creates a rtree with 'maximum' elements per node and 'minimum'.
-     */
-    rtree(unsigned int const& maximum, unsigned int const& minimum)
-        : m_count(0)
-        , m_min_elems_per_node(minimum)
-        , m_max_elems_per_node(maximum)
-        , m_root(new rtree_node<Box, Value>(node_pointer(), 1))
-    {
-    }
-
-    /**
-     * \brief Creates a rtree with maximum elements per node
-     *        and minimum (box is ignored).
-     */
-    rtree(Box const& box, unsigned int const& maximum, unsigned int const& minimum)
-        : m_count(0)
-        , m_min_elems_per_node(minimum)
-        , m_max_elems_per_node(maximum)
-        , m_root(new rtree_node<Box, Value>(node_pointer(), 1))
-    {
-        boost::ignore_unused_variable_warning(box);
-    }
-
-    /**
-     * \brief destructor (virtual because we have virtual functions)
-     */
-    virtual ~rtree() {}
-
-
-    /**
-     * \brief Remove elements inside the 'box'
-     */
-    inline void remove(Box const& box)
-    {
-        try
-        {
-            node_pointer leaf(choose_exact_leaf(box));
-            typename rtree_leaf<Box, Value>::leaf_map q_leaves;
-
-            leaf->remove(box);
-
-            if (leaf->elements() < m_min_elems_per_node && elements() > m_min_elems_per_node)
-            {
-                q_leaves = leaf->get_leaves();
-
-                // we remove the leaf_node in the parent node because now it's empty
-                leaf->get_parent()->remove(leaf->get_parent()->get_box(leaf));
-            }
-
-            typename rtree_node<Box, Value>::node_map q_nodes;
-            condense_tree(leaf, q_nodes);
-
-            std::vector<std::pair<Box, Value> > s;
-            for (typename rtree_node<Box, Value>::node_map::const_iterator it = q_nodes.begin();
-                 it != q_nodes.end(); ++it)
-            {
-                typename rtree_leaf<Box, Value>::leaf_map leaves = it->second->get_leaves();
-
-                // reinserting leaves from nodes
-                for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator itl = leaves.begin();
-                     itl != leaves.end(); ++itl)
-                {
-                    s.push_back(*itl);
-                }
-            }
-
-            for (typename std::vector<std::pair<Box, Value> >::const_iterator it = s.begin(); it != s.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            // if the root has only one child and the child is not a leaf,
-            // make it the root
-            if (m_root->elements() == 1)
-            {
-                if (!m_root->first_element()->is_leaf())
-                {
-                    m_root = m_root->first_element();
-                }
-            }
-            // reinserting leaves
-            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = q_leaves.begin();
-                 it != q_leaves.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            m_count--;
-        }
-        catch(std::logic_error & e)
-        {
-            // TODO: mloskot - replace with Boost.Geometry exception
-
-            // not found
-            std::cerr << e.what() << std::endl;
-            return;
-        }
-    }
-
-    /**
-     * \brief Remove element inside the box with value
-     */
-    void remove(Box const& box, Value const& value)
-    {
-        try
-        {
-            node_pointer leaf;
-
-            // find possible leaves
-            typedef typename std::vector<node_pointer > node_type;
-            node_type nodes;
-            m_root->find_leaves(box, nodes);
-
-            // refine the result
-            for (typename node_type::const_iterator it = nodes.begin(); it != nodes.end(); ++it)
-            {
-                leaf = *it;
-                try
-                {
-                    leaf->remove(value);
-                    break;
-                } catch (...)
-                {
-                    leaf = node_pointer();
-                }
-            }
-
-            if (!leaf)
-                return;
-
-            typename rtree_leaf < Box, Value >::leaf_map q_leaves;
-
-            if (leaf->elements() < m_min_elems_per_node && elements() > m_min_elems_per_node)
-            {
-                q_leaves = leaf->get_leaves();
-
-                // we remove the leaf_node in the parent node because now it's empty
-                leaf->get_parent()->remove(leaf->get_parent()->get_box(leaf));
-            }
-
-            typename rtree_node<Box, Value>::node_map q_nodes;
-            condense_tree(leaf, q_nodes);
-
-            std::vector<std::pair<Box, Value> > s;
-            for (typename rtree_node<Box, Value>::node_map::const_iterator it = q_nodes.begin();
-                 it != q_nodes.end(); ++it)
-            {
-                typename rtree_leaf<Box, Value>::leaf_map leaves = it->second->get_leaves();
-
-                // reinserting leaves from nodes
-                for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator itl = leaves.begin();
-                     itl != leaves.end(); ++itl)
-                {
-                    s.push_back(*itl);
-                }
-            }
-
-            for (typename std::vector<std::pair<Box, Value> >::const_iterator it = s.begin(); it != s.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            // if the root has only one child and the child is not a leaf,
-            // make it the root
-            if (m_root->elements() == 1)
-            {
-                if (!m_root->first_element()->is_leaf())
-                {
-                    m_root = m_root->first_element();
-                }
-            }
-
-            // reinserting leaves
-            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = q_leaves.begin();
-                 it != q_leaves.end(); ++it)
-            {
-                m_count--;
-                insert(it->first, it->second);
-            }
-
-            m_count--;
-
-        }
-        catch(std::logic_error & e)
-        {
-            // TODO: mloskot - ggl exception
-
-            // not found
-            std::cerr << e.what() << std::endl;
-            return;
-        }
-    }
-
-    /**
-     * \brief Returns the number of elements.
-     */
-    inline unsigned int elements() const
-    {
-        return m_count;
-    }
-
-
-    /**
-     * \brief Inserts an element with 'box' as key with value.
-     */
-    inline void insert(Box const& box, Value const& value)
-    {
-        m_count++;
-
-        node_pointer leaf(choose_corresponding_leaf(box));
-
-        // check if the selected leaf is full to do the split if necessary
-        if (leaf->elements() >= m_max_elems_per_node)
-        {
-            leaf->insert(box, value);
-
-            // split!
-            node_pointer n1(new rtree_leaf<Box, Value>(leaf->get_parent()));
-            node_pointer n2(new rtree_leaf<Box, Value>(leaf->get_parent()));
-
-            split_node(leaf, n1, n2);
-            adjust_tree(leaf, n1, n2);
-        }
-        else
-        {
-            leaf->insert(box, value);
-            adjust_tree(leaf);
-        }
-    }
-
-
-    /**
-     * \brief Returns all the values inside 'box'
-     */
-    inline std::deque<Value> find(Box const& box) const
-    {
-        std::deque<Value> result;
-        m_root->find(box, result, false);
-        return result;
-    }
-
-    /**
-     * \brief Print Rtree (mainly for debug)
-     */
-    inline void print()
-    {
-        std::cerr << "===================================" << std::endl;
-        std::cerr << " Min/Max: " << m_min_elems_per_node << " / " << m_max_elems_per_node << std::endl;
-        std::cerr << "Leaves: " << m_root->get_leaves().size() << std::endl;
-        m_root->print();
-        std::cerr << "===================================" << std::endl;
-    }
-
-private:
-
-    /// number of elements
-    unsigned int m_count;
-
-    /// minimum number of elements per node
-    unsigned int m_min_elems_per_node;
-
-    /// maximum number of elements per node
-    unsigned int m_max_elems_per_node;
-
-    /// tree root
-    node_pointer m_root;
-
-    /**
-     * \brief Reorganize the tree after a removal. It tries to
-     *        join nodes with less elements than m.
-     */
-    void condense_tree(node_pointer const& leaf,
-        typename rtree_node<Box, Value>::node_map& q_nodes)
-    {
-        if (leaf.get() == m_root.get())
-        {
-            // if it's the root we are done
-            return;
-        }
-
-        node_pointer parent = leaf->get_parent();
-        parent->adjust_box(leaf);
-
-        if (parent->elements() < m_min_elems_per_node)
-        {
-            if (parent.get() == m_root.get())
-            {
-                // if the parent is underfull and it's the root we just exit
-                return;
-            }
-
-            // get the nodes that we should reinsert
-            typename rtree_node<Box, Value>::node_map this_nodes = parent->get_nodes();
-            for(typename rtree_node<Box, Value>::node_map::const_iterator it = this_nodes.begin();
-                it != this_nodes.end(); ++it)
-            {
-                q_nodes.push_back(*it);
-            }
-
-            // we remove the node in the parent node because now it should be
-            // re inserted
-            parent->get_parent()->remove(parent->get_parent()->get_box(parent));
-        }
-
-        condense_tree(parent, q_nodes);
-    }
-
-    /**
-     * \brief After an insertion splits nodes with more than 'maximum' elements.
-     */
-    inline void adjust_tree(node_pointer& node)
-    {
-        if (node.get() == m_root.get())
-        {
-            // we finished the adjust
-            return;
-        }
-
-        // as there are no splits just adjust the box of the parent and go on
-        node_pointer parent = node->get_parent();
-        parent->adjust_box(node);
-        adjust_tree(parent);
-    }
-
-    /**
-     * \brief After an insertion splits nodes with more than maximum elements
-     *        (recursive step with subtrees 'n1' and 'n2' to be joined).
-     */
-    void adjust_tree(node_pointer& leaf, node_pointer& n1, node_pointer& n2)
-    {
-        // check if we are in the root and do the split
-        if (leaf.get() == m_root.get())
-        {
-            node_pointer new_root(new rtree_node<Box,Value>(node_pointer (), leaf->get_level() + 1));
-            new_root->add_node(n1->compute_box(), n1);
-            new_root->add_node(n2->compute_box(), n2);
-
-            n1->set_parent(new_root);
-            n2->set_parent(new_root);
-
-            n1->update_parent(n1);
-            n2->update_parent(n2);
-
-            m_root = new_root;
-            return;
-        }
-
-        node_pointer parent = leaf->get_parent();
-
-        parent->replace_node(leaf, n1);
-        parent->add_node(n2->compute_box(), n2);
-
-        // if parent is full, split and readjust
-        if (parent->elements() > m_max_elems_per_node)
-        {
-            node_pointer p1(new rtree_node<Box, Value>(parent->get_parent(), parent->get_level()));
-            node_pointer p2(new rtree_node<Box, Value>(parent->get_parent(), parent->get_level()));
-
-            split_node(parent, p1, p2);
-            adjust_tree(parent, p1, p2);
-        }
-        else
-        {
-            adjust_tree(parent);
-        }
-    }
-
-    /**
-     * \brief Splits 'n' in 'n1' and 'n2'
-     */
-    void split_node(node_pointer const& n, node_pointer& n1, node_pointer& n2) const
-    {
-        unsigned int seed1 = 0;
-        unsigned int seed2 = 0;
-        std::vector<Box> boxes = n->get_boxes();
-
-        n1->set_parent(n->get_parent());
-        n2->set_parent(n->get_parent());
-
-        linear_pick_seeds(n, seed1, seed2);
-
-        if (n->is_leaf())
-        {
-            n1->add_value(boxes[seed1], n->get_value(seed1));
-            n2->add_value(boxes[seed2], n->get_value(seed2));
-        }
-        else
-        {
-            n1->add_node(boxes[seed1], n->get_node(seed1));
-            n2->add_node(boxes[seed2], n->get_node(seed2));
-        }
-
-        unsigned int index = 0;
-
-        if (n->is_leaf())
-        {
-            // TODO: mloskot - add assert(node.size() >= 2); or similar
-
-            typename rtree_leaf<Box, Value>::leaf_map nodes = n->get_leaves();
-            unsigned int remaining = nodes.size() - 2;
-
-            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = nodes.begin();
-                 it != nodes.end(); ++it, index++)
-            {
-                if (index != seed1 && index != seed2)
-                {
-                    if (n1->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n1->add_value(it->first, it->second);
-                        continue;
-                    }
-                    if (n2->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n2->add_value(it->first, it->second);
-                        continue;
-                    }
-
-                    remaining--;
-
-                    /// current boxes of each group
-                    Box b1, b2;
-
-                    /// enlarged boxes of each group
-                    Box eb1, eb2;
-                    b1 = n1->compute_box();
-                    b2 = n2->compute_box();
-
-                    /// areas
-                    typedef typename coordinate_type<Box>::type coordinate_type;
-                    coordinate_type b1_area, b2_area;
-                    coordinate_type eb1_area, eb2_area;
-                    b1_area = geometry::area(b1);
-                    b2_area = geometry::area(b2);
-                    eb1_area = compute_union_area(b1, it->first);
-                    eb2_area = compute_union_area(b2, it->first);
-
-                    if (eb1_area - b1_area > eb2_area - b2_area)
-                    {
-                        n2->add_value(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area < eb2_area - b2_area)
-                    {
-                        n1->add_value(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area == eb2_area - b2_area)
-                    {
-                        if (b1_area < b2_area)
-                        {
-                            n1->add_value(it->first, it->second);
-                        }
-                        if (b1_area > b2_area)
-                        {
-                            n2->add_value(it->first, it->second);
-                        }
-                        if (b1_area == b2_area)
-                        {
-                            if (n1->elements() > n2->elements())
-                            {
-                                n2->add_value(it->first, it->second);
-                            }
-                            else
-                            {
-                                n1->add_value(it->first, it->second);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        else
-        {
-            // TODO: mloskot - add assert(node.size() >= 2); or similar
-
-            typename rtree_node<Box, Value>::node_map nodes = n->get_nodes();
-            unsigned int remaining = nodes.size() - 2;
-            for(typename rtree_node<Box, Value>::node_map::const_iterator it = nodes.begin();
-                it != nodes.end(); ++it, index++)
-            {
-
-                if (index != seed1 && index != seed2)
-                {
-
-                    if (n1->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n1->add_node(it->first, it->second);
-                        continue;
-                    }
-                    if (n2->elements() + remaining == m_min_elems_per_node)
-                    {
-                        n2->add_node(it->first, it->second);
-                        continue;
-                    }
-
-                    remaining--;
-
-                    /// current boxes of each group
-                    Box b1, b2;
-
-                    /// enlarged boxes of each group
-                    Box eb1, eb2;
-                    b1 = n1->compute_box();
-                    b2 = n2->compute_box();
-
-                    /// areas
-                    typedef typename coordinate_type<Box>::type coordinate_type;
-                    coordinate_type b1_area, b2_area;
-                    coordinate_type eb1_area, eb2_area;
-                    b1_area = geometry::area(b1);
-                    b2_area = geometry::area(b2);
-
-                    eb1_area = compute_union_area(b1, it->first);
-                    eb2_area = compute_union_area(b2, it->first);
-
-                    if (eb1_area - b1_area > eb2_area - b2_area)
-                    {
-                        n2->add_node(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area < eb2_area - b2_area)
-                    {
-                        n1->add_node(it->first, it->second);
-                    }
-                    if (eb1_area - b1_area == eb2_area - b2_area)
-                    {
-                        if (b1_area < b2_area)
-                        {
-                            n1->add_node(it->first, it->second);
-                        }
-                        if (b1_area > b2_area)
-                        {
-                            n2->add_node(it->first, it->second);
-                        }
-                        if (b1_area == b2_area)
-                        {
-                            if (n1->elements() > n2->elements())
-                            {
-                                n2->add_node(it->first, it->second);
-                            }
-                            else
-                            {
-                                n1->add_node(it->first, it->second);
-                            }
-                        }
-                    }
-
-                }
-            }
-        }
-    }
-
-    /**
-     * \brief Choose initial values for the split algorithm (linear version)
-     */
-    void linear_pick_seeds(node_pointer const& n, unsigned int &seed1, unsigned int &seed2) const
-    {
-        // get boxes from the node
-        std::vector<Box>boxes = n->get_boxes();
-        if (boxes.size() == 0)
-        {
-            // TODO: mloskot - throw ggl exception
-            throw std::logic_error("Empty Node trying to Pick Seeds");
-        }
-
-        // only two dim for now
-        // unsigned int dimensions =
-        //   geometry::point_traits<Point>::coordinate_count;
-
-        // find the first two elements
-        typedef typename coordinate_type<Box>::type coordinate_type;
-        coordinate_type separation_x, separation_y;
-        unsigned int first_x, second_x;
-        unsigned int first_y, second_y;
-        find_normalized_separations<0u>(boxes, separation_x, first_x, second_x);
-        find_normalized_separations<1u>(boxes, separation_y, first_y, second_y);
-
-        if (separation_x > separation_y)
-        {
-            seed1 = first_x;
-            seed2 = second_x;
-        }
-        else
-        {
-            seed1 = first_y;
-            seed2 = second_y;
-        }
-    }
-
-    /**
-     * \brief Find distances between possible initial values for the
-     *        pick_seeds algorithm.
-     */
-    template <std::size_t D, typename T>
-    void find_normalized_separations(std::vector<Box> const& boxes, T& separation,
-        unsigned int& first, unsigned int& second) const
-    {
-        if (boxes.size() < 2)
-        {
-            throw std::logic_error("At least two boxes needed to split");
-        }
-
-        // find the lowest high
-        typename std::vector<Box>::const_iterator it = boxes.begin();
-        typedef typename coordinate_type<Box>::type coordinate_type;
-        coordinate_type lowest_high = geometry::get<max_corner, D>(*it);
-        unsigned int lowest_high_index = 0;
-        unsigned int index = 1;
-        ++it;
-        for(; it != boxes.end(); ++it)
-        {
-            if (geometry::get<max_corner, D>(*it) < lowest_high)
-            {
-                lowest_high = geometry::get<max_corner, D>(*it);
-                lowest_high_index = index;
-            }
-            index++;
-        }
-
-        // find the highest low
-        coordinate_type highest_low = 0;
-        unsigned int highest_low_index = 0;
-        if (lowest_high_index == 0)
-        {
-            highest_low = geometry::get<min_corner, D>(boxes[1]);
-            highest_low_index = 1;
-        }
-        else
-        {
-            highest_low = geometry::get<min_corner, D>(boxes[0]);
-            highest_low_index = 0;
-        }
-
-        index = 0;
-        for (it = boxes.begin();
-             it != boxes.end(); ++it, index++)
-        {
-            if (geometry::get<min_corner, D>(*it) >= highest_low && index != lowest_high_index)
-            {
-                highest_low = geometry::get<min_corner, D>(*it);
-                highest_low_index = index;
-            }
-        }
-
-        // find the lowest low
-        it = boxes.begin();
-        coordinate_type lowest_low = geometry::get<min_corner, D>(*it);
-        ++it;
-        for(; it != boxes.end(); ++it)
-        {
-            if (geometry::get<min_corner, D>(*it) < lowest_low)
-            {
-                lowest_low = geometry::get<min_corner, D>(*it);
-            }
-        }
-
-        // find the highest high
-        it = boxes.begin();
-        coordinate_type highest_high = geometry::get<max_corner, D>(*it);
-        ++it;
-        for(; it != boxes.end(); ++it)
-        {
-            if (geometry::get<max_corner, D>(*it) > highest_high)
-            {
-                highest_high = geometry::get<max_corner, D>(*it);
-            }
-        }
-
-        coordinate_type const width = highest_high - lowest_low;
-
-        separation = (highest_low - lowest_high) / width;
-        first = highest_low_index;
-        second = lowest_high_index;
-    }
-
-    /**
-     * \brief Choose one of the possible leaves to make an insertion
-     */
-    inline node_pointer choose_corresponding_leaf(Box const& e)
-    {
-        node_pointer node = m_root;
-
-        // if the tree is empty add an initial leaf
-        if (m_root->elements() == 0)
-        {
-            leaf_pointer new_leaf(new rtree_leaf<Box, Value>(m_root));
-            m_root->add_leaf_node(Box (), new_leaf);
-
-            return new_leaf;
-        }
-
-        while (!node->is_leaf())
-        {
-            /// traverse node's map to see which node we should select
-            node = node->choose_node(e);
-        }
-        return node;
-    }
-
-    /**
-     * \brief Choose the exact leaf where an insertion should be done
-     */
-    node_pointer choose_exact_leaf(Box const&e) const
-    {
-        // find possible leaves
-        typedef typename std::vector<node_pointer> node_type;
-        node_type nodes;
-        m_root->find_leaves(e, nodes);
-
-        // refine the result
-        for (typename node_type::const_iterator it = nodes.begin(); it != nodes.end(); ++it)
-        {
-            typedef std::vector<std::pair<Box, Value> > leaves_type;
-            leaves_type leaves = (*it)->get_leaves();
-
-            for (typename leaves_type::const_iterator itl = leaves.begin();
-                 itl != leaves.end(); ++itl)
-            {
-
-                if (itl->first.max_corner() == e.max_corner()
-                    && itl->first.min_corner() == e.min_corner())
-                {
-                    return *it;
-                }
-            }
-        }
-
-        // TODO: mloskot - ggl exception
-        throw std::logic_error("Leaf not found");
-    }
-};
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_HPP
-
diff --git a/boost/geometry/extensions/index/rtree/rtree_leaf.hpp b/boost/geometry/extensions/index/rtree/rtree_leaf.hpp
deleted file mode 100644
index 95d1a86..0000000
--- a/boost/geometry/extensions/index/rtree/rtree_leaf.hpp
+++ /dev/null
@@ -1,253 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Boost.SpatialIndex - rtree leaf implementation
-//
-// Copyright 2008 Federico J. Fernandez.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
-#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
-
-#include <deque>
-#include <iostream> // TODO: Remove if print() is removed
-#include <stdexcept>
-#include <utility>
-#include <vector>
-
-#include <boost/shared_ptr.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-
-#include <boost/geometry/extensions/index/rtree/rtree_node.hpp>
-
-namespace boost { namespace geometry { namespace index
-{
-
-template <typename Box, typename Value >
-class rtree_leaf : public rtree_node<Box, Value>
-{
-public:
-
-    /// container type for the leaves
-    typedef boost::shared_ptr<rtree_node<Box, Value> > node_pointer;
-    typedef std::vector<std::pair<Box, Value> > leaf_map;
-
-    /**
-     * \brief Creates an empty leaf
-     */
-    inline rtree_leaf()
-    {
-    }
-
-    /**
-     * \brief Creates a new leaf, with 'parent' as parent
-     */
-    inline rtree_leaf(node_pointer const& parent)
-        : rtree_node<Box, Value> (parent, 0)
-    {
-    }
-
-    /**
-     * \brief Search for elements in 'box' in the Rtree. Add them to 'result'.
-     *        If exact_match is true only return the elements having as
-     *        key the 'box'. Otherwise return everything inside 'box'.
-     */
-    virtual void find(Box const& box, std::deque<Value>& result, bool const exact_match)
-    {
-        for (typename leaf_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (exact_match)
-            {
-                if (geometry::equals(it->first, box))
-                {
-                    result.push_back(it->second);
-                }
-            }
-            else
-            {
-                if (is_overlapping(it->first, box))
-                {
-                    result.push_back(it->second);
-                }
-            }
-        }
-    }
-
-    /**
-     * \brief Compute bounding box for this leaf
-     */
-    virtual Box compute_box() const
-    {
-        if (m_nodes.empty())
-        {
-            return Box ();
-        }
-
-        Box r;
-        geometry::assign_inverse(r);
-        for(typename leaf_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            geometry::expand(r, it->first);
-        }
-        return r;
-    }
-
-    /**
-     * \brief True if we are a leaf
-     */
-    virtual bool is_leaf() const
-    {
-        return true;
-    }
-
-    /**
-     * \brief Number of elements in the tree
-     */
-    virtual unsigned int elements() const
-    {
-        return m_nodes.size();
-    }
-
-    /**
-     * \brief Insert a new element, with key 'box' and value 'v'
-     */
-    virtual void insert(Box const& box, Value const& v)
-    {
-        m_nodes.push_back(std::make_pair(box, v));
-    }
-
-    /**
-     * \brief Proyect leaves of this node.
-     */
-    virtual std::vector< std::pair<Box, Value> > get_leaves() const
-    {
-        return m_nodes;
-    }
-
-    /**
-     * \brief Add a new child (node) to this node
-     */
-    virtual void add_node(Box const&, node_pointer const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Can't add node to leaf node.");
-    }
-
-    /**
-     * \brief Add a new leaf to this node
-     */
-    virtual void add_value(Box const& box, Value const& v)
-    {
-        m_nodes.push_back(std::make_pair(box, v));
-    }
-
-
-    /**
-     * \brief Proyect value in position 'index' in the nodes container
-     */
-    virtual Value get_value(unsigned int index) const
-    {
-        return m_nodes[index].second;
-    }
-
-    /**
-     * \brief Box projector for leaf
-     */
-    virtual Box get_box(unsigned int index) const
-    {
-        return m_nodes[index].first;
-    }
-
-    /**
-     * \brief Remove value with key 'box' in this leaf
-     */
-    virtual void remove(Box const& box)
-    {
-
-        for (typename leaf_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (geometry::equals(it->first, box))
-            {
-                m_nodes.erase(it);
-                return;
-            }
-        }
-
-        // TODO: mloskot - use GGL exception
-        throw std::logic_error("Node not found.");
-    }
-
-    /**
-     * \brief Remove value in this leaf
-     */
-    virtual void remove(Value const& v)
-    {
-        for (typename leaf_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (it->second == v)
-            {
-                m_nodes.erase(it);
-                return;
-            }
-        }
-
-        // TODO: mloskot - use GGL exception
-        throw std::logic_error("Node not found.");
-    }
-
-    /**
-    * \brief Proyect boxes from this node
-    */
-    virtual std::vector<Box> get_boxes() const
-    {
-        std::vector<Box> result;
-        for (typename leaf_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            result.push_back(it->first);
-        }
-
-        return result;
-    }
-
-    /**
-    * \brief Print leaf (mainly for debug)
-    */
-    virtual void print() const
-    {
-        std::cerr << "\t" << " --> Leaf --------" << std::endl;
-        std::cerr << "\t" << "  Size: " << m_nodes.size() << std::endl;
-        for (typename leaf_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            std::cerr << "\t" << "  | ";
-            std::cerr << "( " << geometry::get<min_corner, 0>
-                (it->first) << " , " << geometry::get<min_corner, 1>
-                (it->first) << " ) x ";
-            std::cerr << "( " << geometry::get<max_corner, 0>
-                (it->first) << " , " << geometry::get<max_corner, 1>
-                (it->first) << " )";
-            std::cerr << " -> ";
-            std::cerr << it->second;
-            std::cerr << " | " << std::endl;;
-        }
-        std::cerr << "\t" << " --< Leaf --------" << std::endl;
-    }
-
-private:
-
-    /// leaves of this node
-    leaf_map m_nodes;
-};
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
-
diff --git a/boost/geometry/extensions/index/rtree/rtree_node.hpp b/boost/geometry/extensions/index/rtree/rtree_node.hpp
deleted file mode 100644
index de35ef2..0000000
--- a/boost/geometry/extensions/index/rtree/rtree_node.hpp
+++ /dev/null
@@ -1,493 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Boost.SpatialIndex - rtree node implementation
-//
-// Copyright 2008 Federico J. Fernandez.
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
-#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
-
-#include <deque>
-#include <iostream> // TODO: Remove if print() is removed
-#include <stdexcept>
-#include <utility>
-#include <vector>
-
-#include <boost/shared_ptr.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-
-#include <boost/geometry/extensions/index/rtree/helpers.hpp>
-
-namespace boost { namespace geometry { namespace index
-{
-
-/// forward declaration
-template <typename Box, typename Value>
-class rtree_leaf;
-
-template <typename Box, typename Value>
-class rtree_node
-{
-public:
-
-    typedef boost::shared_ptr<rtree_node<Box, Value> > node_pointer;
-    typedef boost::shared_ptr<rtree_leaf<Box, Value> > leaf_pointer;
-
-    /// type for the node map
-    typedef std::vector<std::pair<Box, node_pointer > > node_map;
-
-    /**
-     * \brief Creates a default node (needed for the containers)
-     */
-    rtree_node()
-    {
-    }
-
-    /**
-     * \brief Creates a node with 'parent' as parent and 'level' as its level
-     */
-    rtree_node(node_pointer const& parent, unsigned int const& level)
-        : m_parent(parent), m_level(level)
-    {
-    }
-
-    /**
-     * \brief destructor (virtual because we have virtual functions)
-     */
-    virtual ~rtree_node()
-    {
-    }
-
-    /**
-     * \brief Level projector
-     */
-    virtual unsigned int get_level() const
-    {
-        return m_level;
-    }
-
-    /**
-     * \brief Number of elements in the subtree
-     */
-    virtual unsigned int elements() const
-    {
-        return m_nodes.size();
-    }
-
-    /**
-     * \brief Project first element, to replace root in case of condensing
-     */
-    inline node_pointer first_element() const
-    {
-        if (0 == m_nodes.size())
-        {
-            // TODO: mloskot - define & use GGL exception
-            throw std::logic_error("first_element in empty node");
-        }
-        return m_nodes.begin()->second;
-    }
-
-    /**
-     * \brief True if it is a leaf node
-     */
-    virtual bool is_leaf() const
-    {
-        return false;
-    }
-
-    /**
-     * \brief Proyector for the 'i' node
-     */
-    node_pointer get_node(unsigned int index)
-    {
-        return m_nodes[index].second;
-    }
-
-    /**
-     * \brief Search for elements in 'box' in the Rtree. Add them to 'result'.
-     *        If exact_match is true only return the elements having as
-     *        key the box 'box'. Otherwise return everything inside 'box'.
-     */
-    virtual void find(Box const& box, std::deque<Value>& result, bool const exact_match)
-    {
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (is_overlapping(it->first, box))
-            {
-                it->second->find(box, result, exact_match);
-            }
-        }
-    }
-
-    /**
-     * \brief Return in 'result' all the leaves inside 'box'
-     */
-    void find_leaves(Box const& box, typename std::vector<node_pointer>& result) const
-    {
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (is_overlapping(it->first, box))
-            {
-                if (it->second->is_leaf())
-                {
-                    result.push_back(it->second);
-                }
-                else
-                {
-                    it->second->find_leaves(box, result);
-                }
-            }
-        }
-    }
-
-    /**
-    * \brief Compute bounding box for this node
-    */
-    virtual Box compute_box() const
-    {
-        if (m_nodes.empty())
-        {
-            return Box();
-        }
-
-        Box result;
-        geometry::assign_inverse(result);
-        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            geometry::expand(result, it->first);
-        }
-
-        return result;
-    }
-
-    /**
-     * \brief Insert a value (not allowed for a node, only on leaves)
-     */
-    virtual void insert(Box const&, Value const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Insert in node!");
-    }
-
-    /**
-     * \brief Get the envelopes of a node
-     */
-    virtual std::vector<Box> get_boxes() const
-    {
-        std::vector<Box> result;
-        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            result.push_back(it->first);
-        }
-        return result;
-    }
-
-    /**
-     * \brief Recompute the bounding box
-     */
-    void adjust_box(node_pointer const& node)
-    {
-        unsigned int index = 0;
-        for (typename node_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it, index++)
-        {
-            if (it->second.get() == node.get())
-            {
-                m_nodes[index] = std::make_pair(node->compute_box(), node);
-                return;
-            }
-        }
-    }
-
-    /**
-     * \brief Remove elements inside the 'box'
-     */
-    virtual void remove(Box const& box)
-    {
-        for (typename node_map::iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (geometry::equals(it->first, box))
-            {
-                m_nodes.erase(it);
-                return;
-            }
-        }
-    }
-
-    /**
-     * \brief Remove value in this leaf
-     */
-    virtual void remove(Value const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Can't remove a non-leaf node by value.");
-    }
-
-    /**
-     * \brief Replace the node in the m_nodes vector and recompute the box
-     */
-    void replace_node(node_pointer const& leaf, node_pointer& new_leaf)
-    {
-        unsigned int index = 0;
-        for(typename node_map::iterator it = m_nodes.begin(); it != m_nodes.end(); ++it, index++)
-        {
-            if (it->second.get() == leaf.get())
-            {
-                m_nodes[index] = std::make_pair(new_leaf->compute_box(), new_leaf);
-                new_leaf->update_parent(new_leaf);
-                return;
-            }
-        }
-
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Node not found.");
-    }
-
-    /**
-     * \brief Add a child to this node
-     */
-    virtual void add_node(Box const& box, node_pointer const& node)
-    {
-        m_nodes.push_back(std::make_pair(box, node));
-        node->update_parent(node);
-    }
-
-    /**
-     * \brief add a value (not allowed in nodes, only on leaves)
-     */
-    virtual void add_value(Box const&, Value const&)
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Can't add value to non-leaf node.");
-    }
-
-    /**
-     * \brief Add a child leaf to this node
-     */
-    inline void add_leaf_node(Box const& box, leaf_pointer const& leaf)
-    {
-        m_nodes.push_back(std::make_pair(box, leaf));
-    }
-
-    /**
-     * \brief Choose a node suitable for adding 'box'
-     */
-    node_pointer choose_node(Box const& box)
-    {
-        if (m_nodes.size() == 0)
-        {
-            // TODO: mloskot - define & use GGL exception
-            throw std::logic_error("Empty node trying to choose the least enlargement node.");
-        }
-
-        typedef typename coordinate_type<Box>::type coordinate_type;
-
-        bool first = true;
-        coordinate_type min_area = 0;
-        coordinate_type min_diff_area = 0;
-        node_pointer chosen_node;
-
-        // check for the least enlargement
-        for (typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            coordinate_type const
-                diff_area = coordinate_type(compute_union_area(box, it->first))
-                    - geometry::area(it->first);
-
-            if (first)
-            {
-                // it's the first time, we keep the first
-                min_diff_area = diff_area;
-                min_area = geometry::area(it->first);
-                chosen_node = it->second;
-
-                first = false;
-            }
-            else
-            {
-                if (diff_area < min_diff_area)
-                {
-                    min_diff_area = diff_area;
-                    min_area = geometry::area(it->first);
-                    chosen_node = it->second;
-                }
-                else
-                {
-                    if (diff_area == min_diff_area)
-                    {
-                        if (geometry::area(it->first) < min_area)
-                        {
-                            min_diff_area = diff_area;
-                            min_area = geometry::area(it->first);
-                            chosen_node = it->second;
-                        }
-                    }
-                }
-            }
-        }
-
-        return chosen_node;
-    }
-
-    /**
-     * \brief Empty the node
-     */
-    virtual void empty_nodes()
-    {
-        m_nodes.clear();
-    }
-
-    /**
-     * \brief Projector for parent
-     */
-    inline node_pointer get_parent() const
-    {
-        return m_parent;
-    }
-
-    /**
-     * \brief Update the parent of all the childs
-     */
-    void update_parent(node_pointer const& node)
-    {
-        for (typename node_map::iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            it->second->set_parent(node);
-        }
-    }
-
-    /**
-     * \brief Set parent
-     */
-    void set_parent(node_pointer const& node)
-    {
-        m_parent = node;
-    }
-
-    /**
-     * \brief Value projector for leaf_node (not allowed for non-leaf nodes)
-     */
-    virtual Value get_value(unsigned int) const
-    {
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("No values in a non-leaf node.");
-    }
-
-    /**
-     * \brief Box projector for node 'index'
-     */
-    virtual Box get_box(unsigned int index) const
-    {
-        return m_nodes[index].first;
-    }
-
-    /**
-     * \brief Box projector for node pointed by 'leaf'
-     */
-    virtual Box get_box(node_pointer const& leaf) const
-    {
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            if (it->second.get() == leaf.get())
-            {
-                return it->first;
-            }
-        }
-
-        // TODO: mloskot - define & use GGL exception
-        throw std::logic_error("Node not found");
-    }
-
-    /**
-     * \brief Children projector
-     */
-    node_map get_nodes() const
-    {
-        return m_nodes;
-    }
-
-    /**
-    * \brief Get leaves for a node
-    */
-    virtual std::vector<std::pair<Box, Value> > get_leaves() const
-    {
-        typedef std::vector<std::pair<Box, Value> > leaf_type;
-        leaf_type leaf;
-
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            leaf_type this_leaves = it->second->get_leaves();
-
-            for (typename leaf_type::iterator it_leaf = this_leaves.begin();
-                it_leaf != this_leaves.end(); ++it_leaf)
-            {
-                leaf.push_back(*it_leaf);
-            }
-        }
-
-        return leaf;
-    }
-
-    /**
-     * \brief Print Rtree subtree (mainly for debug)
-     */
-    virtual void print() const
-    {
-        std::cerr << " --> Node --------" << std::endl;
-        std::cerr << "  Address: " << this << std::endl;
-        std::cerr << "  Level: " << m_level << std::endl;
-        std::cerr << "  Size: " << m_nodes.size() << std::endl;
-        std::cerr << "  | ";
-        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
-        {
-            if (this != it->second->get_parent().get())
-            {
-                std::cerr << "ERROR - " << this << " is not  " << it->second->get_parent().get() << " ";
-            }
-
-            std::cerr << "( " << geometry::get<min_corner, 0>(it->first) << " , "
-                << geometry::get<min_corner, 1>(it->first) << " ) x ";
-            std::cerr << "( " << geometry::get<max_corner, 0>(it->first) << " , "
-                << geometry::get<max_corner, 1>(it->first) << " )";
-            std::cerr << " | ";
-        }
-        std::cerr << std::endl;
-        std::cerr << " --< Node --------" << std::endl;
-
-        // print child nodes
-        std::cerr << " Children: " << std::endl;
-        for (typename node_map::const_iterator it = m_nodes.begin();
-             it != m_nodes.end(); ++it)
-        {
-            it->second->print();
-        }
-    }
-
-private:
-
-    /// parent node
-    node_pointer m_parent;
-
-    /// level of this node
-    // TODO: mloskot - Why not std::size_t or node_map::size_type, same with member functions?
-    unsigned int m_level;
-
-    /// child nodes
-    node_map m_nodes;
-};
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
diff --git a/boost/gil/extension/toolbox/hsv.hpp b/boost/gil/extension/toolbox/hsv.hpp
deleted file mode 100644
index ad7a8a3..0000000
--- a/boost/gil/extension/toolbox/hsv.hpp
+++ /dev/null
@@ -1,245 +0,0 @@
-// Copyright 2004 Christian Henning.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-/*************************************************************************************************/
-
-#ifndef GIL_HSV_H
-#define GIL_HSV_H
-
-////////////////////////////////////////////////////////////////////////////////////////
-/// \file
-/// \brief Support for HSV color space
-/// \author Christian Henning \n
-////////////////////////////////////////////////////////////////////////////////////////
-
-#include <boost/cast.hpp>
-#include <boost/gil/gil_all.hpp>
-
-namespace boost { namespace gil {
-
-/// \addtogroup ColorNameModel
-/// \{
-namespace hsv_color_space
-{
-/// \brief Hue
-struct hue_t {};    
-/// \brief Saturation
-struct saturation_t{};
-/// \brief Value
-struct value_t {}; 
-}
-/// \}
-
-/// \ingroup ColorSpaceModel
-typedef mpl::vector3< hsv_color_space::hue_t
-                    , hsv_color_space::saturation_t
-                    , hsv_color_space::value_t
-                    > hsv_t;
-
-/// \ingroup LayoutModel
-typedef layout<hsv_t> hsv_layout_t;
-
-
-GIL_DEFINE_ALL_TYPEDEFS( 32f, hsv )
-
-/// \ingroup ColorConvert
-/// \brief RGB to HSV
-template <>
-struct default_color_converter_impl< rgb_t, hsv_t >
-{
-   template <typename P1, typename P2>
-   void operator()( const P1& src, P2& dst ) const
-   {
-      using namespace hsv_color_space;
-
-      // only bits32f for hsv is supported
-      bits32f temp_red   = channel_convert<bits32f>( get_color( src, red_t()   ));
-      bits32f temp_green = channel_convert<bits32f>( get_color( src, green_t() ));
-      bits32f temp_blue  = channel_convert<bits32f>( get_color( src, blue_t()  ));
-
-      bits32f hue, saturation, value;
-      bits32f min_color, max_color;
-
-      if( temp_red < temp_green )
-      {
-          min_color = std::min( temp_blue, temp_red );
-          max_color = std::max( temp_blue, temp_green );
-      }
-      else
-      {
-          min_color = std::min( temp_blue, temp_green );
-          max_color = std::max( temp_blue, temp_red );
-      }
-
-      value = max_color;
-
-      bits32f diff = max_color - min_color;
-
-      if( max_color < 0.0001f )
-      {  
-         saturation = 0.f;
-      }
-      else  
-      {      
-         saturation = diff / max_color;
-      }
-
-
-      if( saturation < 0.0001f )
-      {
-         //it doesn't matter what value it has
-         hue = 0.f; 
-      }   
-      else
-      { 
-         if( temp_red == max_color )
-         {
-            hue = ( temp_green - temp_blue )
-                / diff;
-         }
-         else if( temp_green == max_color )
-         {
-            hue = 2.f + ( temp_blue - temp_red ) 
-                / diff;
-         }
-         else
-         {
-            hue = 4.f + ( temp_red - temp_green ) 
-                / diff;
-         }
-
-         //to bring it to a number between 0 and 1
-         hue /= 6.f; 
-
-         if( hue < 0.f )
-         {
-            hue++;
-         }
-      }
-
-      get_color( dst, hue_t() )        = hue;
-      get_color( dst, saturation_t() ) = saturation;
-      get_color( dst, value_t() )      = value;
-   }
-};
-
-/// \ingroup ColorConvert
-/// \brief HSV to RGB
-template <>
-struct default_color_converter_impl<hsv_t,rgb_t>
-{
-   template <typename P1, typename P2>
-   void operator()( const P1& src, P2& dst) const
-   {
-      using namespace hsv_color_space;
-
-      bits32f red, green, blue;
-
-      //If saturation is 0, the color is a shade of gray
-      if( std::abs( get_color( src, saturation_t() )) < 0.0001f  )
-      {
-         // If saturation is 0, the color is a shade of gray
-         red   = get_color( src, value_t() );
-         green = get_color( src, value_t() );
-         blue  = get_color( src, value_t() );
-      }
-      else
-      {
-         bits32f frac, p, q, t, h;
-         bits32 i;
-
-         //to bring hue to a number between 0 and 6, better for the calculations
-         h = get_color( src, hue_t() );
-         h *= 6.f;
-
-         i = static_cast<bits32>( floor( h ));
-
-         frac = h - i;
-
-         // p = value * (1 - saturation)
-         p = get_color( src, value_t() ) 
-           * ( 1.f - get_color( src, saturation_t() ));
-
-         // q = value * (1 - saturation * hue_frac)
-         // it drops with increasing distance from floor(hue)
-         q = get_color( src, value_t() )
-           * ( 1.f - ( get_color( src, saturation_t() ) * frac ));
-
-         // t = value * (1 - (saturation * (1 - hue_frac))
-         // it grows with increasing distance from floor(hue)
-         t = get_color( src, value_t() ) 
-           * ( 1.f - ( get_color( src, saturation_t() ) * ( 1.f - frac )));
-
-         switch( i % 6 )
-         {         
-            case 0: // red to yellow
-            {
-               red   = get_color( src, value_t() );
-               green = t;
-               blue  = p;
-
-               break;
-            }
-
-            case 1: // yellow to green
-            {
-               red   = q;
-               green = get_color( src, value_t() );
-               blue  = p;
-
-               break;
-            }
-
-            case 2: // green to cyan
-            {
-               red   = p;
-               green = get_color( src, value_t() );
-               blue  = t;
-
-               break;
-            }
-
-            case 3: // cyan to blue
-            {
-               red   = p;
-               green = q;
-               blue  = get_color( src, value_t() );
-
-               break;
-            }
-
-            case 4: // blue to magenta
-            {
-               red   = t;
-               green = p;
-               blue  = get_color( src, value_t() );
-
-               break;
-            }
-
-            case 5: // magenta to red
-            {
-               red   = get_color( src, value_t() );
-               green = p; 
-               blue  = q;
-
-               break;
-            }
-
-         }
-      }
-
-      get_color(dst,red_t())  =
-         channel_convert<typename color_element_type< P2, red_t >::type>( red );
-      get_color(dst,green_t())=
-         channel_convert<typename color_element_type< P2, green_t >::type>( green );
-      get_color(dst,blue_t()) =
-         channel_convert<typename color_element_type< P2, blue_t >::type>( blue );
-   }
-};
-
-} }  // namespace boost::gil
-
-#endif // GIL_HSV_H
diff --git a/configure b/configure
index d609ba4..8abbff1 100755
--- a/configure
+++ b/configure
@@ -1,3 +1,5 @@
-#!/bin/sh
+#!/bin/bash
 
-python scons/scons.py --implicit-deps-changed configure "$@"
+PYTHON=${PYTHON:-python}
+
+$PYTHON scons/scons.py --implicit-deps-changed configure "$@"
diff --git a/demo/c++/build.py b/demo/c++/build.py
index adcad40..7eb878f 100644
--- a/demo/c++/build.py
+++ b/demo/c++/build.py
@@ -34,15 +34,15 @@ demo_env = env.Clone()
 
 
 demo_env['CXXFLAGS'] = copy(env['LIBMAPNIK_CXXFLAGS'])
+demo_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
 
 if env['HAS_CAIRO']:
     demo_env.PrependUnique(CPPPATH=env['CAIRO_CPPPATHS'])
     demo_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
 
-libraries =  copy(env['LIBMAPNIK_LIBS'])
-libraries.append('mapnik')
-
-rundemo = demo_env.Program('rundemo', source, LIBS=libraries, LINKFLAGS=env["CUSTOM_LDFLAGS"])
+libraries = [env['MAPNIK_NAME']]
+libraries.extend(copy(env['LIBMAPNIK_LIBS']))
+rundemo = demo_env.Program('rundemo', source, LIBS=libraries)
 
 Depends(rundemo, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
 
diff --git a/demo/c++/rundemo.cpp b/demo/c++/rundemo.cpp
index 839ab15..9492d36 100644
--- a/demo/c++/rundemo.cpp
+++ b/demo/c++/rundemo.cpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2011 Artem Pavlenko
+ * Copyright (C) 2013 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -23,48 +23,38 @@
 #include <mapnik/map.hpp>
 #include <mapnik/layer.hpp>
 #include <mapnik/rule.hpp>
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
-#include <mapnik/text_symbolizer.hpp>
 #include <mapnik/feature_type_style.hpp>
 #include <mapnik/graphics.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/text/placements/dummy.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/formatting/text.hpp>
 #include <mapnik/datasource_cache.hpp>
 #include <mapnik/font_engine_freetype.hpp>
 #include <mapnik/agg_renderer.hpp>
 #include <mapnik/expression.hpp>
 #include <mapnik/color_factory.hpp>
 #include <mapnik/image_util.hpp>
+#include <mapnik/unicode.hpp>
+#include <mapnik/save_map.hpp>
 
 #if defined(HAVE_CAIRO)
-#include <mapnik/cairo_renderer.hpp>
-#include <mapnik/cairo_context.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
 #endif
 
 #include <iostream>
 
 
-int main ( int argc , char** argv)
+int main ( int, char** )
 {
-    if (argc != 2)
-    {
-        std::cout << "usage: ./rundemo <mapnik_install_dir>\nUsually /usr/local\n";
-        std::cout << "Warning: ./rundemo looks for data in ../data/,\nTherefore must be run from within the demo/c++ folder.\n";
-        return EXIT_SUCCESS;
-    }
-
     using namespace mapnik;
-    const std::string srs_lcc="+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 \
-                           +datum=NAD83 +units=m +no_defs";
-    const std::string srs_merc="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 \
-                           +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over";
+    const std::string srs_lcc="+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs";
+    const std::string srs_merc="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over";
 
     try {
         std::cout << " running demo ... \n";
-        std::string mapnik_dir(argv[1]);
-        std::cout << " looking for 'shape.input' plugin in... " << mapnik_dir << "/lib/mapnik/input/" << "\n";
-        datasource_cache::instance().register_datasources(mapnik_dir + "/lib/mapnik/input/");
-        std::cout << " looking for DejaVuSans font in... " << mapnik_dir << "/lib/mapnik/fonts/DejaVuSans.ttf" << "\n";
-        freetype_engine::register_font(mapnik_dir + "/lib/mapnik/fonts/DejaVuSans.ttf");
+        datasource_cache::instance().register_datasources("plugins/input/");
+        freetype_engine::register_font("fonts/dejavu-fonts-ttf-2.33/ttf/DejaVuSans.ttf");
 
         Map m(800,600);
         m.set_background(parse_color("white"));
@@ -73,167 +63,221 @@ int main ( int argc , char** argv)
 
         // Provinces (polygon)
         feature_type_style provpoly_style;
-
-        rule provpoly_rule_on;
-        provpoly_rule_on.set_filter(parse_expression("[NAME_EN] = 'Ontario'"));
-        provpoly_rule_on.append(polygon_symbolizer(color(250, 190, 183)));
-        provpoly_style.add_rule(provpoly_rule_on);
-
-        rule provpoly_rule_qc;
-        provpoly_rule_qc.set_filter(parse_expression("[NOM_FR] = 'Québec'"));
-        provpoly_rule_qc.append(polygon_symbolizer(color(217, 235, 203)));
-        provpoly_style.add_rule(provpoly_rule_qc);
-
-        m.insert_style("provinces",provpoly_style);
+        provpoly_style.reserve(2); // prevent reallocation and copying in add_rule
+        {
+            rule r;
+            r.set_filter(parse_expression("[NAME_EN] = 'Ontario'"));
+            {
+                polygon_symbolizer poly_sym;
+                put(poly_sym, keys::fill, color(250, 190, 183));
+                r.append(std::move(poly_sym));
+            }
+            provpoly_style.add_rule(std::move(r));
+        }
+        {
+            rule r;
+            r.set_filter(parse_expression("[NOM_FR] = 'Québec'"));
+            {
+                polygon_symbolizer poly_sym;
+                put(poly_sym, keys::fill, color(217, 235, 203));
+                r.append(std::move(poly_sym));
+            }
+            provpoly_style.add_rule(std::move(r));
+        }
+        m.insert_style("provinces", std::move(provpoly_style));
 
         // Provinces (polyline)
         feature_type_style provlines_style;
-
-        stroke provlines_stk (color(0,0,0),1.0);
-        provlines_stk.add_dash(8, 4);
-        provlines_stk.add_dash(2, 2);
-        provlines_stk.add_dash(2, 2);
-
-        rule provlines_rule;
-        provlines_rule.append(line_symbolizer(provlines_stk));
-        provlines_style.add_rule(provlines_rule);
-
-        m.insert_style("provlines",provlines_style);
+        {
+            rule r;
+            {
+                line_symbolizer line_sym;
+                put(line_sym,keys::stroke,color(0,0,0));
+                put(line_sym,keys::stroke_width,1.0);
+                dash_array dash;
+                dash.emplace_back(8,4);
+                dash.emplace_back(2,2);
+                dash.emplace_back(2,2);
+                put(line_sym,keys::stroke_dasharray,dash);
+                r.append(std::move(line_sym));
+            }
+            provlines_style.add_rule(std::move(r));
+        }
+        m.insert_style("provlines", std::move(provlines_style));
 
         // Drainage
         feature_type_style qcdrain_style;
-
-        rule qcdrain_rule;
-        qcdrain_rule.set_filter(parse_expression("[HYC] = 8"));
-        qcdrain_rule.append(polygon_symbolizer(color(153, 204, 255)));
-        qcdrain_style.add_rule(qcdrain_rule);
-
-        m.insert_style("drainage",qcdrain_style);
+        {
+            rule r;
+            r.set_filter(parse_expression("[HYC] = 8"));
+            {
+                polygon_symbolizer poly_sym;
+                put(poly_sym, keys::fill, color(153, 204, 255));
+                r.append(std::move(poly_sym));
+            }
+            qcdrain_style.add_rule(std::move(r));
+        }
+        m.insert_style("drainage", std::move(qcdrain_style));
 
         // Roads 3 and 4 (The "grey" roads)
         feature_type_style roads34_style;
-        rule roads34_rule;
-        roads34_rule.set_filter(parse_expression("[CLASS] = 3 or [CLASS] = 4"));
-        stroke roads34_rule_stk(color(171,158,137),2.0);
-        roads34_rule_stk.set_line_cap(ROUND_CAP);
-        roads34_rule_stk.set_line_join(ROUND_JOIN);
-        roads34_rule.append(line_symbolizer(roads34_rule_stk));
-        roads34_style.add_rule(roads34_rule);
-
-        m.insert_style("smallroads",roads34_style);
-
+        {
+            rule r;
+            r.set_filter(parse_expression("[CLASS] = 3 or [CLASS] = 4"));
+            {
+                line_symbolizer line_sym;
+                put(line_sym,keys::stroke,color(171,158,137));
+                put(line_sym,keys::stroke_width,2.0);
+                put(line_sym,keys::stroke_linecap,ROUND_CAP);
+                put(line_sym,keys::stroke_linejoin,ROUND_JOIN);
+                r.append(std::move(line_sym));
+            }
+            roads34_style.add_rule(std::move(r));
+        }
+        m.insert_style("smallroads", std::move(roads34_style));
 
         // Roads 2 (The thin yellow ones)
         feature_type_style roads2_style_1;
-        rule roads2_rule_1;
-        roads2_rule_1.set_filter(parse_expression("[CLASS] = 2"));
-        stroke roads2_rule_stk_1(color(171,158,137),4.0);
-        roads2_rule_stk_1.set_line_cap(ROUND_CAP);
-        roads2_rule_stk_1.set_line_join(ROUND_JOIN);
-        roads2_rule_1.append(line_symbolizer(roads2_rule_stk_1));
-        roads2_style_1.add_rule(roads2_rule_1);
-
-        m.insert_style("road-border", roads2_style_1);
+        {
+            rule r;
+            r.set_filter(parse_expression("[CLASS] = 2"));
+            {
+                line_symbolizer line_sym;
+                put(line_sym,keys::stroke,color(171,158,137));
+                put(line_sym,keys::stroke_width,4.0);
+                put(line_sym,keys::stroke_linecap,ROUND_CAP);
+                put(line_sym,keys::stroke_linejoin,ROUND_JOIN);
+                r.append(std::move(line_sym));
+            }
+            roads2_style_1.add_rule(std::move(r));
+        }
+        m.insert_style("road-border", std::move(roads2_style_1));
 
         feature_type_style roads2_style_2;
-        rule roads2_rule_2;
-        roads2_rule_2.set_filter(parse_expression("[CLASS] = 2"));
-        stroke roads2_rule_stk_2(color(255,250,115),2.0);
-        roads2_rule_stk_2.set_line_cap(ROUND_CAP);
-        roads2_rule_stk_2.set_line_join(ROUND_JOIN);
-        roads2_rule_2.append(line_symbolizer(roads2_rule_stk_2));
-        roads2_style_2.add_rule(roads2_rule_2);
-
-        m.insert_style("road-fill", roads2_style_2);
+        {
+            rule r;
+            r.set_filter(parse_expression("[CLASS] = 2"));
+            {
+                line_symbolizer line_sym;
+                put(line_sym,keys::stroke,color(255,250,115));
+                put(line_sym,keys::stroke_width,2.0);
+                put(line_sym,keys::stroke_linecap,ROUND_CAP);
+                put(line_sym,keys::stroke_linejoin,ROUND_JOIN);
+                r.append(std::move(line_sym));
+            }
+            roads2_style_2.add_rule(std::move(r));
+        }
+        m.insert_style("road-fill", std::move(roads2_style_2));
 
         // Roads 1 (The big orange ones, the highways)
         feature_type_style roads1_style_1;
-        rule roads1_rule_1;
-        roads1_rule_1.set_filter(parse_expression("[CLASS] = 1"));
-        stroke roads1_rule_stk_1(color(188,149,28),7.0);
-        roads1_rule_stk_1.set_line_cap(ROUND_CAP);
-        roads1_rule_stk_1.set_line_join(ROUND_JOIN);
-        roads1_rule_1.append(line_symbolizer(roads1_rule_stk_1));
-        roads1_style_1.add_rule(roads1_rule_1);
-        m.insert_style("highway-border", roads1_style_1);
+        {
+            rule r;
+            r.set_filter(parse_expression("[CLASS] = 1"));
+            {
+                line_symbolizer line_sym;
+                put(line_sym,keys::stroke,color(188,149,28));
+                put(line_sym,keys::stroke_width,7.0);
+                put(line_sym,keys::stroke_linecap,ROUND_CAP);
+                put(line_sym,keys::stroke_linejoin,ROUND_JOIN);
+                r.append(std::move(line_sym));
+            }
+            roads1_style_1.add_rule(std::move(r));
+        }
+        m.insert_style("highway-border", std::move(roads1_style_1));
 
         feature_type_style roads1_style_2;
-        rule roads1_rule_2;
-        roads1_rule_2.set_filter(parse_expression("[CLASS] = 1"));
-        stroke roads1_rule_stk_2(color(242,191,36),5.0);
-        roads1_rule_stk_2.set_line_cap(ROUND_CAP);
-        roads1_rule_stk_2.set_line_join(ROUND_JOIN);
-        roads1_rule_2.append(line_symbolizer(roads1_rule_stk_2));
-        roads1_style_2.add_rule(roads1_rule_2);
-        m.insert_style("highway-fill", roads1_style_2);
+        {
+            rule r;
+            r.set_filter(parse_expression("[CLASS] = 1"));
+            {
+                line_symbolizer line_sym;
+                put(line_sym,keys::stroke,color(242,191,36));
+                put(line_sym,keys::stroke_width,5.0);
+                put(line_sym,keys::stroke_linecap,ROUND_CAP);
+                put(line_sym,keys::stroke_linejoin,ROUND_JOIN);
+                r.append(std::move(line_sym));
+            }
+            roads1_style_2.add_rule(std::move(r));
+        }
+        m.insert_style("highway-fill", std::move(roads1_style_2));
 
         // Populated Places
-
         feature_type_style popplaces_style;
-        rule popplaces_rule;
-        text_symbolizer popplaces_text_symbolizer(parse_expression("[GEONAME]"),"DejaVu Sans Book",10,color(0,0,0));
-        popplaces_text_symbolizer.set_halo_fill(color(255,255,200));
-        popplaces_text_symbolizer.set_halo_radius(1);
-        popplaces_rule.append(popplaces_text_symbolizer);
-        popplaces_style.add_rule(popplaces_rule);
+        {
+            rule r;
+            {
+                text_symbolizer text_sym;
+                text_placements_ptr placement_finder = std::make_shared<text_placements_dummy>();
+                placement_finder->defaults.format_defaults.face_name = "DejaVu Sans Book";
+                placement_finder->defaults.format_defaults.text_size = 10.0;
+                placement_finder->defaults.format_defaults.fill = color(0,0,0);
+                placement_finder->defaults.format_defaults.halo_fill = color(255,255,200);
+                placement_finder->defaults.format_defaults.halo_radius = 1.0;
+                placement_finder->defaults.set_format_tree(std::make_shared<mapnik::formatting::text_node>(parse_expression("[GEONAME]")));
+                put<text_placements_ptr>(text_sym, keys::text_placements_, placement_finder);
+                r.append(std::move(text_sym));
+            }
+            popplaces_style.add_rule(std::move(r));
+        }
 
-        m.insert_style("popplaces",popplaces_style );
+        m.insert_style("popplaces", std::move(popplaces_style));
 
         // layers
         // Provincial  polygons
         {
             parameters p;
             p["type"]="shape";
-            p["file"]="../data/boundaries";
+            p["file"]="demo/data/boundaries";
             p["encoding"]="latin1";
 
             layer lyr("Provinces");
             lyr.set_datasource(datasource_cache::instance().create(p));
             lyr.add_style("provinces");
             lyr.set_srs(srs_lcc);
-            m.addLayer(lyr);
+            m.add_layer(lyr);
         }
 
         // Drainage
         {
             parameters p;
             p["type"]="shape";
-            p["file"]="../data/qcdrainage";
+            p["file"]="demo/data/qcdrainage";
             layer lyr("Quebec Hydrography");
             lyr.set_datasource(datasource_cache::instance().create(p));
             lyr.set_srs(srs_lcc);
             lyr.add_style("drainage");
-            m.addLayer(lyr);
+            m.add_layer(lyr);
         }
 
         {
             parameters p;
             p["type"]="shape";
-            p["file"]="../data/ontdrainage";
+            p["file"]="demo/data/ontdrainage";
             layer lyr("Ontario Hydrography");
             lyr.set_datasource(datasource_cache::instance().create(p));
             lyr.set_srs(srs_lcc);
             lyr.add_style("drainage");
-            m.addLayer(lyr);
+            m.add_layer(lyr);
         }
 
         // Provincial boundaries
         {
             parameters p;
             p["type"]="shape";
-            p["file"]="../data/boundaries_l";
+            p["file"]="demo/data/boundaries_l";
             layer lyr("Provincial borders");
             lyr.set_srs(srs_lcc);
             lyr.set_datasource(datasource_cache::instance().create(p));
             lyr.add_style("provlines");
-            m.addLayer(lyr);
+            m.add_layer(lyr);
         }
 
         // Roads
         {
             parameters p;
             p["type"]="shape";
-            p["file"]="../data/roads";
+            p["file"]="demo/data/roads";
             layer lyr("Roads");
             lyr.set_srs(srs_lcc);
             lyr.set_datasource(datasource_cache::instance().create(p));
@@ -243,19 +287,19 @@ int main ( int argc , char** argv)
             lyr.add_style("highway-border");
             lyr.add_style("highway-fill");
 
-            m.addLayer(lyr);
+            m.add_layer(lyr);
         }
         // popplaces
         {
             parameters p;
             p["type"]="shape";
-            p["file"]="../data/popplaces";
+            p["file"]="demo/data/popplaces";
             p["encoding"] = "latin1";
             layer lyr("Populated Places");
             lyr.set_srs(srs_lcc);
             lyr.set_datasource(datasource_cache::instance().create(p));
             lyr.add_style("popplaces");
-            m.addLayer(lyr);
+            m.add_layer(lyr);
         }
 
         m.zoom_to_box(box2d<double>(-8024477.28459,5445190.38849,-7381388.20071,5662941.44855));
@@ -263,18 +307,27 @@ int main ( int argc , char** argv)
         image_32 buf(m.width(),m.height());
         agg_renderer<image_32> ren(m,buf);
         ren.apply();
-
+        std::string msg("These maps have been rendered using AGG in the current directory:\n");
+#ifdef HAVE_JPEG
         save_to_file(buf,"demo.jpg","jpeg");
+        msg += "- demo.jpg\n";
+#endif
+#ifdef HAVE_PNG
         save_to_file(buf,"demo.png","png");
         save_to_file(buf,"demo256.png","png8");
+        msg += "- demo.png\n";
+        msg += "- demo256.png\n";
+#endif
+#ifdef HAVE_TIFF
         save_to_file(buf,"demo.tif","tiff");
-
-        std::cout << "Three maps have been rendered using AGG in the current directory:\n"
-            "- demo.jpg\n"
-            "- demo.png\n"
-            "- demo256.png\n"
-            "- demo.tif\n"
-            "Have a look!\n";
+        msg += "- demo.tif\n";
+#endif
+#ifdef HAVE_WEBP
+        save_to_file(buf,"demo.webp","webp");
+        msg += "- demo.webp\n";
+#endif
+        msg += "Have a look!\n";
+        std::cout << msg;
 
 #if defined(HAVE_CAIRO)
         // save to pdf/svg files
@@ -292,7 +345,7 @@ int main ( int argc , char** argv)
             cairo_image_surface_create(CAIRO_FORMAT_ARGB32,m.width(),m.height()),
             cairo_surface_closer());
         double scale_factor = 1.0;
-        cairo_ptr image_context = (create_context(image_surface));
+        cairo_ptr image_context(create_context(image_surface));
         mapnik::cairo_renderer<cairo_ptr> png_render(m,image_context,scale_factor);
         png_render.apply();
         // we can now write to png with cairo functionality
@@ -310,9 +363,10 @@ int main ( int argc , char** argv)
             "- cairo-demo.svg\n"
             "Have a look!\n";
 #endif
-
+        // save map definition (data + style)
+        save_map(m, "map.xml");
     }
-    catch ( const std::exception & ex )
+    catch ( std::exception const& ex )
     {
         std::cerr << "### std::exception: " << ex.what() << std::endl;
         return EXIT_FAILURE;
@@ -322,5 +376,6 @@ int main ( int argc , char** argv)
         std::cerr << "### Unknown exception." << std::endl;
         return EXIT_FAILURE;
     }
+
     return EXIT_SUCCESS;
 }
diff --git a/demo/python/rundemo.py b/demo/python/rundemo.py
old mode 100644
new mode 100755
index 78ec494..9bd258d
--- a/demo/python/rundemo.py
+++ b/demo/python/rundemo.py
@@ -20,10 +20,8 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-# Import everything.  In this case this is safe, in more complex systems, you
-# will want to be more selective.
-
 import sys
+from os import path
 
 try:
     import mapnik
@@ -32,15 +30,11 @@ except:
 installed successfully before running this script.\n\n'
     sys.exit(1)
 
-try:
-    import cairo
-    HAS_PYCAIRO_MODULE = True
-except ImportError:
-    HAS_PYCAIRO_MODULE = False
 
 # Instanciate a map, giving it a width and height. Remember: the word "map" is
 # reserved in Python! :)
 
+root = path.dirname(__file__)
 m = mapnik.Map(800,600,"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs")
 
 # Set its background colour. More on colours later ...
@@ -68,7 +62,7 @@ m.background = mapnik.Color('white')
 
 provpoly_lyr = mapnik.Layer('Provinces')
 provpoly_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs"
-provpoly_lyr.datasource = mapnik.Shapefile(file='../data/boundaries', encoding='latin1')
+provpoly_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/boundaries'), encoding='latin1')
 
 # We then define a style for the layer.  A layer can have one or many styles.
 # Styles are named, so they can be shared across different layers.
@@ -103,12 +97,16 @@ provpoly_rule_on.filter = mapnik.Expression("[NAME_EN] = 'Ontario'")
 #     - Color(<string>) where <string> will be something like '#00FF00'
 #       or '#0f0' or 'green'
 
-provpoly_rule_on.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color(250, 190, 183)))
+sym = mapnik.PolygonSymbolizer()
+sym.fill = mapnik.Color(250, 190, 183);
+provpoly_rule_on.symbols.append(sym)
 provpoly_style.rules.append(provpoly_rule_on)
 
 provpoly_rule_qc = mapnik.Rule()
 provpoly_rule_qc.filter = mapnik.Expression("[NOM_FR] = 'Québec'")
-provpoly_rule_qc.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color(217, 235, 203)))
+sym = mapnik.PolygonSymbolizer()
+sym.fill = mapnik.Color(217, 235, 203)
+provpoly_rule_qc.symbols.append(sym)
 provpoly_style.rules.append(provpoly_rule_qc)
 
 # Add the style to the map, giving it a name.  This is the name that will be
@@ -133,12 +131,13 @@ m.layers.append(provpoly_lyr)
 
 qcdrain_lyr = mapnik.Layer('Quebec Hydrography')
 qcdrain_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs"
-qcdrain_lyr.datasource = mapnik.Shapefile(file='../data/qcdrainage')
+qcdrain_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/qcdrainage'))
 
 qcdrain_style = mapnik.Style()
 qcdrain_rule = mapnik.Rule()
 qcdrain_rule.filter = mapnik.Expression('[HYC] = 8')
-sym = mapnik.PolygonSymbolizer(mapnik.Color(153, 204, 255))
+sym = mapnik.PolygonSymbolizer()
+sym.fill = mapnik.Color(153, 204, 255)
 sym.smooth = 1.0 # very smooth
 qcdrain_rule.symbols.append(sym)
 qcdrain_style.rules.append(qcdrain_rule)
@@ -153,7 +152,7 @@ m.layers.append(qcdrain_lyr)
 
 ondrain_lyr = mapnik.Layer('Ontario Hydrography')
 ondrain_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs"
-ondrain_lyr.datasource = mapnik.Shapefile(file='../data/ontdrainage')
+ondrain_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/ontdrainage'))
 
 ondrain_lyr.styles.append('drainage')
 m.layers.append(ondrain_lyr)
@@ -162,20 +161,18 @@ m.layers.append(ondrain_lyr)
 
 provlines_lyr = mapnik.Layer('Provincial borders')
 provlines_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs"
-provlines_lyr.datasource = mapnik.Shapefile(file='../data/boundaries_l')
+provlines_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/boundaries_l'))
 
 # Here we define a "dash dot dot dash" pattern for the provincial boundaries.
 
-provlines_stk = mapnik.Stroke()
-provlines_stk.add_dash(8, 4)
-provlines_stk.add_dash(2, 2)
-provlines_stk.add_dash(2, 2)
-provlines_stk.color = mapnik.Color('black')
-provlines_stk.width = 1.0
-
 provlines_style = mapnik.Style()
 provlines_rule = mapnik.Rule()
-provlines_rule.symbols.append(mapnik.LineSymbolizer(provlines_stk))
+sym = mapnik.LineSymbolizer()
+# FIXME - currently adding dash arrays is broken
+# https://github.com/mapnik/mapnik/issues/2324
+sym.stroke = mapnik.Color('black')
+sym.stroke_width = 1.0
+provlines_rule.symbols.append(sym)
 provlines_style.rules.append(provlines_rule)
 
 m.append_style('provlines', provlines_style)
@@ -188,7 +185,7 @@ roads34_lyr = mapnik.Layer('Roads')
 roads34_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs"
 # create roads datasource (we're going to re-use it later)
 
-roads34_lyr.datasource = mapnik.Shapefile(file='../data/roads')
+roads34_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/roads'))
 
 roads34_style = mapnik.Style()
 roads34_rule = mapnik.Rule()
@@ -197,10 +194,6 @@ roads34_rule.filter = mapnik.Expression('([CLASS] = 3) or ([CLASS] = 4)')
 # With lines of a certain width, you can control how the ends
 # are closed off using line_cap as below.
 
-roads34_rule_stk = mapnik.Stroke()
-roads34_rule_stk.color = mapnik.Color(171,158,137)
-roads34_rule_stk.line_cap = mapnik.line_cap.ROUND_CAP
-
 # Available options are:
 # line_cap: BUTT_CAP, SQUARE_CAP, ROUND_CAP
 # line_join: MITER_JOIN, MITER_REVERT_JOIN, ROUND_JOIN, BEVEL_JOIN
@@ -208,8 +201,12 @@ roads34_rule_stk.line_cap = mapnik.line_cap.ROUND_CAP
 # And one last Stroke() attribute not used here is "opacity", which
 # can be set to a numerical value.
 
-roads34_rule_stk.width = 2.0
-roads34_rule.symbols.append(mapnik.LineSymbolizer(roads34_rule_stk))
+sym = mapnik.LineSymbolizer()
+sym.stroke = mapnik.Color(171,158,137)
+sym.stroke_width = 2.0
+sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP
+
+roads34_rule.symbols.append(sym)
 roads34_style.rules.append(roads34_rule)
 
 m.append_style('smallroads', roads34_style)
@@ -226,11 +223,12 @@ roads2_lyr.datasource = roads34_lyr.datasource
 roads2_style_1 = mapnik.Style()
 roads2_rule_1 = mapnik.Rule()
 roads2_rule_1.filter = mapnik.Expression('[CLASS] = 2')
-roads2_rule_stk_1 = mapnik.Stroke()
-roads2_rule_stk_1.color = mapnik.Color(171,158,137)
-roads2_rule_stk_1.line_cap = mapnik.line_cap.ROUND_CAP
-roads2_rule_stk_1.width = 4.0
-roads2_rule_1.symbols.append(mapnik.LineSymbolizer(roads2_rule_stk_1))
+
+sym = mapnik.LineSymbolizer()
+sym.stroke = mapnik.Color(171,158,137)
+sym.stroke_width = 4.0
+sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP
+roads2_rule_1.symbols.append(sym)
 roads2_style_1.rules.append(roads2_rule_1)
 
 m.append_style('road-border', roads2_style_1)
@@ -238,11 +236,11 @@ m.append_style('road-border', roads2_style_1)
 roads2_style_2 = mapnik.Style()
 roads2_rule_2 = mapnik.Rule()
 roads2_rule_2.filter = mapnik.Expression('[CLASS] = 2')
-roads2_rule_stk_2 = mapnik.Stroke()
-roads2_rule_stk_2.color = mapnik.Color(255,250,115)
-roads2_rule_stk_2.line_cap = mapnik.line_cap.ROUND_CAP
-roads2_rule_stk_2.width = 2.0
-roads2_rule_2.symbols.append(mapnik.LineSymbolizer(roads2_rule_stk_2))
+sym = mapnik.LineSymbolizer()
+sym.stroke = mapnik.Color(255,250,115)
+sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP
+sym.stroke_width = 2.0
+roads2_rule_2.symbols.append(sym)
 roads2_style_2.rules.append(roads2_rule_2)
 
 m.append_style('road-fill', roads2_style_2)
@@ -261,22 +259,21 @@ roads1_lyr.datasource = roads34_lyr.datasource
 roads1_style_1 = mapnik.Style()
 roads1_rule_1 = mapnik.Rule()
 roads1_rule_1.filter = mapnik.Expression('[CLASS] = 1')
-roads1_rule_stk_1 = mapnik.Stroke()
-roads1_rule_stk_1.color = mapnik.Color(188,149,28)
-roads1_rule_stk_1.line_cap = mapnik.line_cap.ROUND_CAP
-roads1_rule_stk_1.width = 7.0
-roads1_rule_1.symbols.append(mapnik.LineSymbolizer(roads1_rule_stk_1))
+sym = mapnik.LineSymbolizer()
+sym.stroke = mapnik.Color(188,149,28)
+sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP
+sym.stroke_width = 7.0
+roads1_rule_1.symbols.append(sym)
 roads1_style_1.rules.append(roads1_rule_1)
 m.append_style('highway-border', roads1_style_1)
 
 roads1_style_2 = mapnik.Style()
 roads1_rule_2 = mapnik.Rule()
 roads1_rule_2.filter = mapnik.Expression('[CLASS] = 1')
-roads1_rule_stk_2 = mapnik.Stroke()
-roads1_rule_stk_2.color = mapnik.Color(242,191,36)
-roads1_rule_stk_2.line_cap = mapnik.line_cap.ROUND_CAP
-roads1_rule_stk_2.width = 5.0
-roads1_rule_2.symbols.append(mapnik.LineSymbolizer(roads1_rule_stk_2))
+sym.stroke = mapnik.Color(242,191,36)
+sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP
+sym.stroke_width = 5.0
+roads1_rule_2.symbols.append(sym)
 roads1_style_2.rules.append(roads1_rule_2)
 
 m.append_style('highway-fill', roads1_style_2)
@@ -290,7 +287,7 @@ m.layers.append(roads1_lyr)
 
 popplaces_lyr = mapnik.Layer('Populated Places')
 popplaces_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs"
-popplaces_lyr.datasource = mapnik.Shapefile(file='../data/popplaces',encoding='latin1')
+popplaces_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/popplaces'),encoding='latin1')
 
 popplaces_style = mapnik.Style()
 popplaces_rule = mapnik.Rule()
@@ -299,19 +296,19 @@ popplaces_rule = mapnik.Rule()
 # The first parameter is the name of the attribute to use as the source of the
 # text to label with.  Then there is font size in points (I think?), and colour.
 
-popplaces_text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression("[GEONAME]"),
-                                           'DejaVu Sans Book',
-                                           10, mapnik.Color('black'))
+# TODO - currently broken: https://github.com/mapnik/mapnik/issues/2324
+#popplaces_text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression("[GEONAME]"),
+#                                           'DejaVu Sans Book',
+#                                           10, mapnik.Color('black'))
 
 # We set a "halo" around the text, which looks like an outline if thin enough,
 # or an outright background if large enough.
-popplaces_text_symbolizer.label_placement= mapnik.label_placement.POINT_PLACEMENT
-popplaces_text_symbolizer.halo_fill = mapnik.Color(255,255,200)
-popplaces_text_symbolizer.halo_radius = 1
-popplaces_text_symbolizer.avoid_edges = True
+#popplaces_text_symbolizer.label_placement= mapnik.label_placement.POINT_PLACEMENT
+#popplaces_text_symbolizer.halo_fill = mapnik.Color(255,255,200)
+#popplaces_text_symbolizer.halo_radius = 1
+#popplaces_text_symbolizer.avoid_edges = True
 #popplaces_text_symbolizer.minimum_padding = 30
-
-popplaces_rule.symbols.append(popplaces_text_symbolizer)
+#popplaces_rule.symbols.append(popplaces_text_symbolizer)
 
 popplaces_style.rules.append(popplaces_rule)
 
@@ -330,73 +327,54 @@ mapnik.render(m, im)
 
 # Save image to files
 images_ = []
-im.save('demo.png', 'png') # true-colour RGBA
-images_.append('demo.png')
+if mapnik.has_png():
+    im.save('demo.png', 'png') # true-colour RGBA
+    images_.append('demo.png')
 
-# old behavior, now can do 'png8:c=256'
-im.save('demo256.png', 'png256') # save to palette based (max 256 colours) png
-images_.append('demo256.png')
+    # old behavior, now can do 'png8:c=256'
+    im.save('demo256.png', 'png256') # save to palette based (max 256 colours) png
+    images_.append('demo256.png')
 
-im.save('demo64_binary_transparency.png', 'png8:c=64:t=1')
-images_.append('demo64_binary_transparency.png')
+    im.save('demo64_binary_transparency.png', 'png8:c=64:t=1')
+    images_.append('demo64_binary_transparency.png')
 
-im.save('demo128_colors_hextree_no_alpha.png', 'png8:c=100:m=h:t=0')
-images_.append('demo128_colors_hextree_no_alpha.png')
+    im.save('demo128_colors_hextree_no_alpha.png', 'png8:c=100:m=h:t=0')
+    images_.append('demo128_colors_hextree_no_alpha.png')
 
-im.save('demo_high.jpg', 'jpeg100')
-images_.append('demo_high.jpg')
+if mapnik.has_jpeg():
+    im.save('demo_high.jpg', 'jpeg100')
+    images_.append('demo_high.jpg')
 
-im.save('demo_low.jpg', 'jpeg50')
-images_.append('demo_low.jpg')
+    im.save('demo_low.jpg', 'jpeg50')
+    images_.append('demo_low.jpg')
 
-im.save('demo.tif', 'tiff')
-images_.append('demo.tif')
+if mapnik.has_tiff():
+    im.save('demo.tif', 'tiff')
+    images_.append('demo.tif')
 
-# Render cairo examples
-if HAS_PYCAIRO_MODULE and mapnik.has_pycairo():
+if mapnik.has_webp():
+    im.save('demo.webp', 'webp') # default quality is 90
+    images_.append('demo.webp')
 
-    svg_surface = cairo.SVGSurface('demo.svg', m.width,m.height)
-    mapnik.render(m, svg_surface)
-    svg_surface.finish()
-    images_.append('demo.svg')
+    im.save('demo_highest.webp', 'webp:quality=100')
+    images_.append('demo_med.webp')
+
+    im.save('demo_low.webp', 'webp:quality=50')
+    images_.append('demo_low.webp')
 
-    pdf_surface = cairo.PDFSurface('demo.pdf', m.width,m.height)
-    mapnik.render(m, pdf_surface)
-    images_.append('demo.pdf')
-    pdf_surface.finish()
 
-    postscript_surface = cairo.PSSurface('demo.ps', m.width,m.height)
-    mapnik.render(m, postscript_surface)
+# Render cairo examples
+if  mapnik.has_cairo():
+    mapnik.render_to_file(m,'demo.pdf')
+    images_.append('demo.pdf')
+    mapnik.render_to_file(m,'demo.ps')
     images_.append('demo.ps')
-    postscript_surface.finish()
-
-    image_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, m.width, m.height)
-    mapnik.render(m, image_surface)
-    image_surface.write_to_png('demo_cairo_rgb24.png')
-    images_.append('demo_cairo_argb24.png')
-    image_surface.finish()
-
-    image_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, m.width, m.height)
-    mapnik.render(m, image_surface)
-    image_surface.write_to_png('demo_cairo_argb32.png')
-    images_.append('demo_cairo_argb32.png')
-    image_surface.finish()
-
-else:
-    print '\n\nPycairo not available...',
-    if  mapnik.has_cairo():
-        print ' will render Cairo formats using alternative method'
-
-        mapnik.render_to_file(m,'demo.pdf')
-        images_.append('demo.pdf')
-        mapnik.render_to_file(m,'demo.ps')
-        images_.append('demo.ps')
-        mapnik.render_to_file(m,'demo.svg')
-        images_.append('demo.svg')
-        mapnik.render_to_file(m,'demo_cairo_rgb24.png','RGB24')
-        images_.append('demo_cairo_rgb.png')
-        mapnik.render_to_file(m,'demo_cairo_argb32.png','ARGB32')
-        images_.append('demo_cairo_argb.png')
+    mapnik.render_to_file(m,'demo.svg')
+    images_.append('demo.svg')
+    mapnik.render_to_file(m,'demo_cairo_rgb24.png','RGB24')
+    images_.append('demo_cairo_rgb.png')
+    mapnik.render_to_file(m,'demo_cairo_argb32.png','ARGB32')
+    images_.append('demo_cairo_argb.png')
 
 print "\n\n", len(images_), "maps have been rendered in the current directory:"
 
diff --git a/demo/test/charplacement.py b/demo/test/charplacement.py
deleted file mode 100644
index b3a9f45..0000000
--- a/demo/test/charplacement.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# $Id: rundemo.py 577 2008-01-03 11:39:10Z artem $
-#
-# This file is part of Mapnik (c++ mapping toolkit)
-# Copyright (C) 2005 Jean-Francois Doyon
-#
-# Mapnik is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
-# Import everything.  In this case this is safe, in more complex systems, you
-# will want to be more selective.
-
-try:
-    from mapnik import *
-except:
-    print '\n\nThe mapnik library and python bindings must have been compiled and \
-installed successfully before running this script.\n\n'
-    raise
-
-m = Map(690,690,"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-
-m.background = Color(255,100,100,255)
-
-road_style = Style()
-
-#Road
-road_rule = Rule()
-road_stroke = Stroke(Color('white'), 1)
-road_stroke.opacity = 0.7
-#road_rule.filter = Filter("[CLASS] = 'BENDUNDER' or [CLASS] = 'BENDOVER'")
-road_rule.symbols.append(LineSymbolizer(road_stroke))
-road_style.rules.append(road_rule);
-
-#Road text
-text_symbolizer = TextSymbolizer(Expression('[NAME]'), 'DejaVu Sans Book', 20, Color('black'))
-text_symbolizer.label_placement=label_placement.LINE_PLACEMENT
-text_symbolizer.minimum_distance = 0
-#text_symbolizer.max_char_angle_delta = 40
-#text_symbolizer.force_odd_labels = 1
-text_symbolizer.label_spacing = 20
-text_symbolizer.label_position_tolerance = 50
-text_symbolizer.minimum_distance = 5
-text_symbolizer.avoid_edges = 0
-text_symbolizer.halo_fill = Color('yellow')
-text_symbolizer.halo_radius = 1
-road_rule = Rule()
-#road_rule.filter = Filter("[CLASS] = 'BENDUNDER' or [CLASS] = 'BENDOVER'")
-road_rule.symbols.append(text_symbolizer)
-road_style.rules.append(road_rule)
-
-
-road_layer = Layer('road')
-road_layer.datasource = Shapefile(file='../data/test/charplacement')
-
-m.append_style('road', road_style)
-road_layer.styles.append('road')
-m.layers.append(road_layer)
-
-# Draw map
-
-# Set the initial extent of the map.
-m.zoom_to_box(Box2d(0,0,14,-14))
-
-
-# Render
-im = Image(m.width,m.height)
-render(m, im)
-
-# Save image to file
-im.save('output.png') # true-colour RGBA
-
-print "Done\n"
diff --git a/demo/test/displacement.py b/demo/test/displacement.py
deleted file mode 100644
index 185a5f8..0000000
--- a/demo/test/displacement.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# $Id: rundemo.py 577 2008-01-03 11:39:10Z artem $
-#
-# This file is part of Mapnik (c++ mapping toolkit)
-# Copyright (C) 2005 Jean-Francois Doyon
-#
-# Mapnik is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
-# Import everything.  In this case this is safe, in more complex systems, you
-# will want to be more selective.
-
-try:
-    from mapnik import *
-except:
-    print '\n\nThe mapnik library and python bindings must have been compiled and \
-installed successfully before running this script.\n\n'
-    raise
-
-m = Map(690,690,"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-
-m.background = Color(255,100,100,255)
-
-road_style = Style()
-
-#Road
-road_rule = Rule()
-road_stroke = Stroke(Color('white'), 1)
-road_stroke.line_cap = line_cap.ROUND_CAP
-road_stroke.line_join = line_join.ROUND_JOIN
-#road_rule.filter = Filter("[CLASS] = 'CROSS'")
-road_rule.symbols.append(LineSymbolizer(road_stroke))
-road_style.rules.append(road_rule);
-
-#Road text
-text_symbolizer = TextSymbolizer(Expression('[NAME]'), 'DejaVu Sans Book', 10, Color('black'))
-text_symbolizer.label_placement=label_placement.LINE_PLACEMENT
-text_symbolizer.minimum_distance = 0
-#text_symbolizer.max_char_angle_delta = 40
-#text_symbolizer.force_odd_labels = 1
-#FIXME: Displacement cannot be set from python so we can't set it here, lol!
-text_symbolizer.label_spacing = 60
-text_symbolizer.label_position_tolerance = 5
-text_symbolizer.avoid_edges = 0
-text_symbolizer.halo_fill = Color('yellow')
-text_symbolizer.halo_radius = 1
-road_rule = Rule()
-#road_rule.filter = Filter("[CLASS] = 'CROSS'")
-road_rule.symbols.append(text_symbolizer)
-road_style.rules.append(road_rule)
-
-
-road_layer = Layer('road')
-road_layer.datasource = Shapefile(file='../data/test/displacement')
-
-m.append_style('road', road_style)
-road_layer.styles.append('road')
-m.layers.append(road_layer)
-
-# Draw map
-
-# Set the initial extent of the map.
-m.zoom_to_box(Box2d(0,0,14,-14))
-
-
-# Render
-im = Image(m.width,m.height)
-render(m, im)
-
-# Save image to file
-im.save('output.png') # true-colour RGBA
-
-print "Done\n"
diff --git a/demo/test/overlap.py b/demo/test/overlap.py
deleted file mode 100644
index 291159e..0000000
--- a/demo/test/overlap.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# $Id: rundemo.py 577 2008-01-03 11:39:10Z artem $
-#
-# This file is part of Mapnik (c++ mapping toolkit)
-# Copyright (C) 2005 Jean-Francois Doyon
-#
-# Mapnik is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
-# Import everything.  In this case this is safe, in more complex systems, you
-# will want to be more selective.
-
-try:
-    from mapnik import *
-except:
-    print '\n\nThe mapnik library and python bindings must have been compiled and \
-installed successfully before running this script.\n\n'
-    raise
-
-m = Map(690,690,"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-
-m.background = Color(255,100,100,255)
-
-road_style = Style()
-
-#Road
-road_rule = Rule()
-road_stroke = Stroke(Color('white'), 12)
-road_stroke.opacity = 0.7
-#road_stroke.line_cap = line_cap.ROUND_CAP
-#road_stroke.line_join = line_join.ROUND_JOIN
-#road_rule.filter = Filter("[CLASS] = 'CROSS'")
-road_rule.symbols.append(LineSymbolizer(road_stroke))
-road_style.rules.append(road_rule);
-
-#Road text
-text_symbolizer = TextSymbolizer(Expression('[NAME]'), 'DejaVu Sans Book', 10, Color('black'))
-text_symbolizer.label_placement=label_placement.LINE_PLACEMENT
-text_symbolizer.minimum_distance = 0
-#text_symbolizer.max_char_angle_delta = 40
-#text_symbolizer.force_odd_labels = 1
-text_symbolizer.label_spacing = 60
-text_symbolizer.label_position_tolerance = 50
-text_symbolizer.minimum_distance = 5
-text_symbolizer.avoid_edges = 0
-text_symbolizer.halo_fill = Color('yellow')
-text_symbolizer.halo_radius = 1
-road_rule = Rule()
-#road_rule.filter = Filter("[CLASS] = 'CROSS'")
-road_rule.symbols.append(text_symbolizer)
-road_style.rules.append(road_rule)
-
-
-road_layer = Layer('road')
-road_layer.datasource = Shapefile(file='../data/test/overlap')
-
-m.append_style('road', road_style)
-road_layer.styles.append('road')
-m.layers.append(road_layer)
-
-# Draw map
-
-# Set the initial extent of the map.
-m.zoom_to_box(Box2d(0,0,14,-14))
-
-
-# Render
-im = Image(m.width,m.height)
-render(m, im)
-
-# Save image to file
-im.save('output.png') # true-colour RGBA
-
-print "Done\n"
diff --git a/demo/test/textspacing.py b/demo/test/textspacing.py
deleted file mode 100644
index 0d01e14..0000000
--- a/demo/test/textspacing.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# $Id: rundemo.py 577 2008-01-03 11:39:10Z artem $
-#
-# This file is part of Mapnik (c++ mapping toolkit)
-# Copyright (C) 2005 Jean-Francois Doyon
-#
-# Mapnik is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
-# Import everything.  In this case this is safe, in more complex systems, you
-# will want to be more selective.
-
-try:
-    from mapnik import *
-except:
-    print '\n\nThe mapnik library and python bindings must have been compiled and \
-installed successfully before running this script.\n\n'
-    raise
-
-m = Map(690,690,"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-
-m.background = Color(255,100,100,255)
-
-road_style = Style()
-
-#Road
-road_rule = Rule()
-road_stroke = Stroke(Color('white'), 12)
-road_stroke.line_cap = line_cap.ROUND_CAP
-road_stroke.line_join = line_join.ROUND_JOIN
-#road_rule.filter = Filter("[CLASS] = 'STRAIGHT'")
-road_rule.symbols.append(LineSymbolizer(road_stroke))
-road_style.rules.append(road_rule);
-
-#Road text
-text_symbolizer = TextSymbolizer(Expression('[NAME]'), 'DejaVu Sans Book', 10, Color('black'))
-text_symbolizer.label_placement=label_placement.LINE_PLACEMENT
-text_symbolizer.minimum_distance = 0
-#text_symbolizer.max_char_angle_delta = 40
-#text_symbolizer.force_odd_labels = 1
-text_symbolizer.label_spacing = 80
-text_symbolizer.label_position_tolerance = 5
-text_symbolizer.avoid_edges = 0
-text_symbolizer.halo_fill = Color('yellow')
-text_symbolizer.halo_radius = 1
-road_rule = Rule()
-#road_rule.filter = Filter("[CLASS] = 'STRAIGHT'")
-road_rule.symbols.append(text_symbolizer)
-road_style.rules.append(road_rule)
-
-
-road_layer = Layer('road')
-road_layer.datasource = Shapefile(file='../data/test/textspacing')
-
-m.append_style('road', road_style)
-road_layer.styles.append('road')
-m.layers.append(road_layer)
-
-# Draw map
-
-# Set the initial extent of the map.
-m.zoom_to_box(Box2d(0,0,14,-14))
-
-
-# Render
-im = Image(m.width,m.height)
-render(m, im)
-
-# Save image to file
-im.save('output.png') # true-colour RGBA
-
-print "Done\n"
diff --git a/demo/viewer/build.py b/demo/viewer/build.py
index ec1dacc..b60a80b 100644
--- a/demo/viewer/build.py
+++ b/demo/viewer/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2010 Artem Pavlenko, Jean-Francois Doyon
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/demo/viewer/layer_info_dialog.cpp b/demo/viewer/layer_info_dialog.cpp
index 4654e19..c9dfeb8 100644
--- a/demo/viewer/layer_info_dialog.cpp
+++ b/demo/viewer/layer_info_dialog.cpp
@@ -21,6 +21,7 @@
 #include "layer_info_dialog.hpp"
 
 // mapnik
+#include <mapnik/datasource.hpp>
 #include <mapnik/params.hpp>
 #include <mapnik/params_impl.hpp>
 #include <mapnik/layer.hpp>
@@ -53,7 +54,7 @@ layer_info_dialog::layer_info_dialog(mapnik::layer& lay, QWidget *parent)
         for (pos = ps.begin();pos != ps.end();++pos)
         {
             boost::optional<std::string> result;
-            boost::apply_visitor(mapnik::value_extractor_visitor<std::string>(result),pos->second);
+            mapnik::util::apply_visitor(mapnik::value_extractor_visitor<std::string>(result),pos->second);
             if (result)
             {
                 QTableWidgetItem *keyItem = new QTableWidgetItem(QString(pos->first.c_str()));
@@ -70,4 +71,3 @@ Ui::LayerInfoDialog& layer_info_dialog::getUI()
 {
    return ui;
 }
-
diff --git a/demo/viewer/layerlistmodel.cpp b/demo/viewer/layerlistmodel.cpp
index a856451..4b1a89a 100644
--- a/demo/viewer/layerlistmodel.cpp
+++ b/demo/viewer/layerlistmodel.cpp
@@ -27,7 +27,7 @@
 
 using mapnik::Map;
 
-LayerListModel::LayerListModel(boost::shared_ptr<Map> map,QObject *parent)
+LayerListModel::LayerListModel(std::shared_ptr<Map> map,QObject *parent)
     : QAbstractListModel(parent),
       map_(map) {}
 
@@ -117,8 +117,3 @@ boost::optional<mapnik::layer&> LayerListModel::map_layer(int i)
    }
    return boost::optional<mapnik::layer&>();
 }
-
-
-
-
-
diff --git a/demo/viewer/layerlistmodel.hpp b/demo/viewer/layerlistmodel.hpp
index 7c155d9..f25a81f 100644
--- a/demo/viewer/layerlistmodel.hpp
+++ b/demo/viewer/layerlistmodel.hpp
@@ -34,7 +34,7 @@ class LayerListModel : public QAbstractListModel
 {
    Q_OBJECT
    public:
-      LayerListModel(boost::shared_ptr<mapnik::Map> map, QObject * parent = 0);
+      LayerListModel(std::shared_ptr<mapnik::Map> map, QObject * parent = 0);
       int rowCount(const QModelIndex &parent = QModelIndex()) const;
       QVariant data(const QModelIndex &index, int role) const;
       QVariant headerData(int section, Qt::Orientation orientation,
@@ -45,7 +45,7 @@ class LayerListModel : public QAbstractListModel
       boost::optional<mapnik::layer&> map_layer(int i);
 
    private:
-      boost::shared_ptr<mapnik::Map> map_;
+      std::shared_ptr<mapnik::Map> map_;
 };
 
 #endif //LAYER_LIST_MODEL_HPP
diff --git a/demo/viewer/main.cpp b/demo/viewer/main.cpp
index 7bd6b3d..3274c50 100644
--- a/demo/viewer/main.cpp
+++ b/demo/viewer/main.cpp
@@ -19,17 +19,13 @@
 
 
 // qt
-#include <QtWidgets/QApplication>
+#include <QApplication>
 #include <QStringList>
 #include <QSettings>
 #include <mapnik/datasource_cache.hpp>
 #include <mapnik/font_engine_freetype.hpp>
 #include "mainwindow.hpp"
 
-// boost
-#include <boost/algorithm/string.hpp>
-
-
 int main( int argc, char **argv )
 {
     using mapnik::datasource_cache;
@@ -75,7 +71,8 @@ int main( int argc, char **argv )
         }
         else
         {
-            window.zoom_all();
+            std::shared_ptr<mapnik::Map> map = window.get_map();
+            if (map) map->zoom_all();
         }
         if (argc == 4)
         {
diff --git a/demo/viewer/mainwindow.cpp b/demo/viewer/mainwindow.cpp
index e87e7a0..6df6fd8 100644
--- a/demo/viewer/mainwindow.cpp
+++ b/demo/viewer/mainwindow.cpp
@@ -39,10 +39,11 @@
 // mapnik
 
 #ifndef Q_MOC_RUN // QT moc chokes on BOOST_JOIN
-#include <mapnik/config_error.hpp>
+//#include <mapnik/config_error.hpp>
 #include <mapnik/load_map.hpp>
 #include <mapnik/save_map.hpp>
 #include <mapnik/projection.hpp>
+#include <mapnik/util/timer.hpp>
 #endif
 
 // qt
@@ -53,6 +54,9 @@
 #include "layerdelegate.hpp"
 #include "about_dialog.hpp"
 
+// boost
+#include <boost/algorithm/string.hpp>
+
 MainWindow::MainWindow()
     : filename_(),
       default_extent_(-20037508.3428,-20037508.3428,20037508.3428,20037508.3428)
@@ -182,19 +186,20 @@ void MainWindow::save()
 
 void MainWindow::load_map_file(QString const& filename)
 {
-    std::cout<<"loading "<< filename.toStdString() << std::endl;
+    std::cout << "loading "<< filename.toStdString() << std::endl;
     unsigned width = mapWidget_->width();
     unsigned height = mapWidget_->height();
-    boost::shared_ptr<mapnik::Map> map(new mapnik::Map(width,height));
+    std::shared_ptr<mapnik::Map> map(new mapnik::Map(width,height));
     mapWidget_->setMap(map);
     try
     {
+        mapnik::auto_cpu_timer t(std::clog, "loading map took: ");
         mapnik::load_map(*map,filename.toStdString());
     }
-    catch (mapnik::config_error & ex)
-    {
-        std::cout << ex.what() << "\n";
-    }
+    //catch (mapnik::config_error & ex)
+    //{
+    //    std::cout << ex.what() << "\n";
+    //}
     catch (...)
     {
         std::cerr << "Exception caught in load_map\n";
@@ -412,7 +417,7 @@ void MainWindow::set_default_extent(double x0,double y0, double x1, double y1)
 {
     try
     {
-        boost::shared_ptr<mapnik::Map> map_ptr = mapWidget_->getMap();
+        std::shared_ptr<mapnik::Map> map_ptr = mapWidget_->getMap();
         if (map_ptr)
         {
             mapnik::projection prj(map_ptr->srs());
@@ -433,7 +438,7 @@ void MainWindow::set_scaling_factor(double scaling_factor)
 
 void MainWindow::zoom_all()
 {
-    boost::shared_ptr<mapnik::Map> map_ptr = mapWidget_->getMap();
+    std::shared_ptr<mapnik::Map> map_ptr = mapWidget_->getMap();
     if (map_ptr)
     {
         map_ptr->zoom_all();
@@ -441,3 +446,8 @@ void MainWindow::zoom_all()
         mapWidget_->zoomToBox(ext);
     }
 }
+
+std::shared_ptr<mapnik::Map> MainWindow::get_map()
+{
+    return mapWidget_->getMap();
+}
diff --git a/demo/viewer/mainwindow.hpp b/demo/viewer/mainwindow.hpp
index f5f0186..b9859ed 100644
--- a/demo/viewer/mainwindow.hpp
+++ b/demo/viewer/mainwindow.hpp
@@ -46,6 +46,8 @@ class MainWindow : public QMainWindow
     virtual ~MainWindow();
     void set_default_extent(double x0,double y0,double x1, double y1);
     void set_scaling_factor(double scaling_factor);
+public :
+    std::shared_ptr<mapnik::Map> get_map();
 protected:
     void closeEvent(QCloseEvent* event);
 public slots:
@@ -70,7 +72,6 @@ private:
     void createContextMenu();
     void load_map_file(QString const& filename);
 
-
     QString currentPath;
     QString filename_;
     QAbstractItemModel *model;
diff --git a/demo/viewer/mapwidget.cpp b/demo/viewer/mapwidget.cpp
index 93be083..bfcf594 100644
--- a/demo/viewer/mapwidget.cpp
+++ b/demo/viewer/mapwidget.cpp
@@ -20,24 +20,22 @@
 
 #include <QtGui>
 
-#define BOOST_CHRONO_HEADER_ONLY
-#include <boost/timer/timer.hpp>
 #include <boost/bind.hpp>
-
 #include <mapnik/agg_renderer.hpp>
 #include <mapnik/graphics.hpp>
 #include <mapnik/layer.hpp>
 #include <mapnik/projection.hpp>
 #include <mapnik/scale_denominator.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/transform_path_adapter.hpp>
 #include <mapnik/memory_datasource.hpp>
 #include <mapnik/feature_kv_iterator.hpp>
-#include <mapnik/config_error.hpp>
 #include <mapnik/image_util.hpp>
+#include <mapnik/util/timer.hpp>
 
 #ifdef HAVE_CAIRO
 // cairo
-#include <mapnik/cairo_renderer.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
 #endif
 
 #include "mapwidget.hpp"
@@ -49,8 +47,7 @@ using mapnik::layer;
 using mapnik::box2d;
 using mapnik::coord2d;
 using mapnik::feature_ptr;
-using mapnik::geometry_ptr;
-using mapnik::CoordTransform;
+using mapnik::view_transform;
 using mapnik::projection;
 using mapnik::scale_denominator;
 using mapnik::feature_kv_iterator;
@@ -161,7 +158,7 @@ void MapWidget::mousePressEvent(QMouseEvent* e)
 
             projection map_proj(map_->srs()); // map projection
             double scale_denom = scale_denominator(map_->scale(),map_proj.is_geographic());
-            CoordTransform t(map_->width(),map_->height(),map_->get_current_extent());
+            view_transform t(map_->width(),map_->height(),map_->get_current_extent());
 
             for (unsigned index = 0; index <  map_->layer_count();++index)
             {
@@ -189,11 +186,11 @@ void MapWidget::mousePressEvent(QMouseEvent* e)
 
                       for ( ;itr!=end; ++itr)
                       {
-                          info.push_back(QPair<QString,QString>(QString(boost::get<0>(*itr).c_str()),
-                                                                boost::get<1>(*itr).to_string().c_str()));
+                          info.push_back(QPair<QString,QString>(QString(std::get<0>(*itr).c_str()),
+                                                                std::get<1>(*itr).to_string().c_str()));
                       }
 
-                      typedef mapnik::coord_transform<mapnik::CoordTransform,mapnik::geometry_type> path_type;
+                      using path_type = mapnik::transform_path_adapter<mapnik::view_transform,mapnik::geometry_type>;
 
                      for  (unsigned i=0; i<feat->num_geometries();++i)
                      {
@@ -266,7 +263,7 @@ void MapWidget::mouseReleaseEvent(QMouseEvent* e)
          drag_=false;
          if (map_)
          {
-            CoordTransform t(map_->width(),map_->height(),map_->get_current_extent());
+            view_transform t(map_->width(),map_->height(),map_->get_current_extent());
             box2d<double> box = t.backward(box2d<double>(start_x_,start_y_,end_x_,end_y_));
             map_->zoom_to_box(box);
             updateMap();
@@ -503,17 +500,15 @@ void render_agg(mapnik::Map const& map, double scaling_factor, QPixmap & pix)
 
     try
     {
-        {
-            boost::timer::auto_cpu_timer t;
-            ren.apply();
-        }
+        mapnik::auto_cpu_timer t(std::clog, "rendering took: ");
+        ren.apply();
         QImage image((uchar*)buf.raw_data(),width,height,QImage::Format_ARGB32);
         pix = QPixmap::fromImage(image.rgbSwapped());
     }
-    catch (mapnik::config_error & ex)
-    {
-        std::cerr << ex.what() << std::endl;
-    }
+    //catch (mapnik::config_error & ex)
+    //{
+    //    std::cerr << ex.what() << std::endl;
+    //}
     catch (const std::exception & ex)
     {
         std::cerr << "exception: " << ex.what() << std::endl;
@@ -537,8 +532,13 @@ void render_cairo(mapnik::Map const& map, double scaling_factor, QPixmap & pix)
 #ifdef HAVE_CAIRO
     mapnik::cairo_surface_ptr image_surface(cairo_image_surface_create(CAIRO_FORMAT_ARGB32,map.width(),map.height()),
                                             mapnik::cairo_surface_closer());
-    mapnik::cairo_renderer<mapnik::cairo_surface_ptr> renderer(map, image_surface, scaling_factor);
-    renderer.apply();
+    mapnik::cairo_ptr cairo = mapnik::create_context(image_surface);
+    if (cairo)
+    {
+        mapnik::auto_cpu_timer t(std::clog, "rendering took: ");
+        mapnik::cairo_renderer<mapnik::cairo_ptr> renderer(map, cairo, scaling_factor);
+        renderer.apply();
+    }
     image_32 buf(image_surface);
     QImage image((uchar*)buf.raw_data(),buf.width(),buf.height(),QImage::Format_ARGB32);
     pix = QPixmap::fromImage(image.rgbSwapped());
@@ -603,12 +603,12 @@ void MapWidget::updateMap()
    }
 }
 
-boost::shared_ptr<Map> MapWidget::getMap()
+std::shared_ptr<Map> MapWidget::getMap()
 {
    return map_;
 }
 
-void MapWidget::setMap(boost::shared_ptr<Map> map)
+void MapWidget::setMap(std::shared_ptr<Map> map)
 {
    map_ = map;
 }
diff --git a/demo/viewer/mapwidget.hpp b/demo/viewer/mapwidget.hpp
index 11026a5..e3cff1a 100644
--- a/demo/viewer/mapwidget.hpp
+++ b/demo/viewer/mapwidget.hpp
@@ -28,8 +28,8 @@
 #include <QItemSelection>
 #include <iostream>
 #include <string>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
+
 
 #ifndef Q_MOC_RUN
 #include <mapnik/map.hpp>
@@ -55,7 +55,7 @@ public:
     };
 
 private:
-    boost::shared_ptr<mapnik::Map> map_;
+    std::shared_ptr<mapnik::Map> map_;
     int selected_;
     QPixmap pix_;
     mapnik::box2d<double> extent_;
@@ -73,9 +73,9 @@ private:
 public:
     MapWidget(QWidget *parent=0);
     void setTool(eTool tool);
-    boost::shared_ptr<mapnik::Map> getMap();
+    std::shared_ptr<mapnik::Map> getMap();
     inline QPixmap const& pixmap() const { return pix_;}
-    void setMap(boost::shared_ptr<mapnik::Map> map);
+    void setMap(std::shared_ptr<mapnik::Map> map);
     void defaultView();
     void zoomToBox(mapnik::box2d<double> const& box);
     void zoomIn();
diff --git a/demo/viewer/styles_model.cpp b/demo/viewer/styles_model.cpp
index 236e080..56ef842 100644
--- a/demo/viewer/styles_model.cpp
+++ b/demo/viewer/styles_model.cpp
@@ -19,14 +19,16 @@
 
 
 #include "styles_model.hpp"
+#include <mapnik/config.hpp>
+#include <mapnik/util/variant.hpp>
 #include <mapnik/expression_string.hpp>
 #include <mapnik/noncopyable.hpp>
 #include <mapnik/rule.hpp>
 #include <mapnik/feature_type_style.hpp>
-
+#include <mapnik/symbolizer.hpp>
 // boost
 #include <boost/concept_check.hpp>
-#include <boost/scoped_ptr.hpp>
+
 // qt
 #include <QList>
 #include <QIcon>
@@ -114,13 +116,13 @@ public:
     }
 
 private:
-    boost::scoped_ptr<node_base> impl_;
+    const std::unique_ptr<node_base> impl_;
     QList<node*> children_;
     node * parent_;
 };
 
 
-struct symbolizer_info : public boost::static_visitor<QString>
+struct symbolizer_info : public mapnik::util::static_visitor<QString>
 {
     QString operator() (mapnik::point_symbolizer const& sym) const
     {
@@ -183,13 +185,13 @@ struct symbolizer_info : public boost::static_visitor<QString>
     }
 };
 
-struct symbolizer_icon : public boost::static_visitor<QIcon>
+struct symbolizer_icon : public mapnik::util::static_visitor<QIcon>
 {
     QIcon operator() (mapnik::polygon_symbolizer const& sym) const
     {
         QPixmap pix(16,16);
         QPainter painter(&pix);
-        mapnik::color const& fill = sym.get_fill();
+        mapnik::color const& fill = mapnik::get<mapnik::color>(sym, mapnik::keys::fill);
         QBrush brush(QColor(fill.red(),fill.green(),fill.blue(),fill.alpha()));
         painter.fillRect(0, 0, 16, 16, brush);
         return QIcon(pix);
@@ -199,7 +201,7 @@ struct symbolizer_icon : public boost::static_visitor<QIcon>
     {
         // FIXME!
         /*
-          boost::shared_ptr<mapnik::image_data_32> symbol = sym.get_image();
+          std::shared_ptr<mapnik::image_data_32> symbol = sym.get_image();
           if (symbol)
           {
           QImage image(symbol->getBytes(),
@@ -215,10 +217,10 @@ struct symbolizer_icon : public boost::static_visitor<QIcon>
         QPixmap pix(48,16);
         pix.fill();
         QPainter painter(&pix);
-        mapnik::stroke const&  strk = sym.get_stroke();
-        mapnik::color const& col = strk.get_color();
+        //mapnik::stroke const&  strk = sym.get_stroke();
+        mapnik::color const& col = mapnik::get<mapnik::color>(sym, mapnik::keys::stroke);
         QPen pen(QColor(col.red(),col.green(),col.blue(),col.alpha()));
-        pen.setWidth(strk.get_width());
+        pen.setWidth(mapnik::get<double>(sym, mapnik::keys::width));
         painter.setPen(pen);
         painter.drawLine(0,7,47,7);
         //painter.drawLine(7,15,12,0);
@@ -243,12 +245,12 @@ public:
     QString name() const
     {
         //return QString("Symbolizer:fixme");
-        return boost::apply_visitor(symbolizer_info(),sym_);
+        return mapnik::util::apply_visitor(symbolizer_info(),sym_);
     }
 
     QIcon icon() const
     {
-        return boost::apply_visitor(symbolizer_icon(),sym_);//QIcon(":/images/filter.png");
+        return mapnik::util::apply_visitor(symbolizer_icon(),sym_);//QIcon(":/images/filter.png");
     }
     mapnik::symbolizer const& sym_;
 };
@@ -263,7 +265,6 @@ public:
     QString name() const
     {
         mapnik::expression_ptr filter = rule_.get_filter();
-
         return QString(mapnik::to_expression_string(*filter).c_str());
     }
 
@@ -304,7 +305,7 @@ private:
 class map_node
 {
 public:
-    explicit map_node(boost::shared_ptr<mapnik::Map> map)
+    explicit map_node(std::shared_ptr<mapnik::Map> map)
     : map_(map)  {}
     ~map_node() {}
 
@@ -319,14 +320,14 @@ public:
     }
 
 private:
-    boost::shared_ptr<mapnik::Map> map_;
+    std::shared_ptr<mapnik::Map> map_;
 };
 
-StyleModel::StyleModel(boost::shared_ptr<mapnik::Map> map, QObject * parent)
+StyleModel::StyleModel(std::shared_ptr<mapnik::Map> map, QObject * parent)
     : QAbstractItemModel(parent),
       root_(new node(map_node(map)))
 {
-    typedef std::map<std::string,mapnik::feature_type_style> style_type;
+    using style_type = std::map<std::string,mapnik::feature_type_style>;
     style_type const & styles = map->styles();
     style_type::const_iterator itr = styles.begin();
     style_type::const_iterator end = styles.end();
diff --git a/demo/viewer/styles_model.hpp b/demo/viewer/styles_model.hpp
index 5dfb919..17af661 100644
--- a/demo/viewer/styles_model.hpp
+++ b/demo/viewer/styles_model.hpp
@@ -27,14 +27,14 @@
 #include <mapnik/map.hpp>
 #endif
 
-#include <boost/scoped_ptr.hpp>
+
 
 class node;
 class StyleModel : public QAbstractItemModel
 {
       Q_OBJECT
   public:
-      StyleModel(boost::shared_ptr<mapnik::Map> map, QObject * parent=0);
+      StyleModel(std::shared_ptr<mapnik::Map> map, QObject * parent=0);
       ~StyleModel();
       // interface
       QModelIndex index  (int row, int col, QModelIndex const& parent = QModelIndex()) const;
@@ -43,8 +43,8 @@ class StyleModel : public QAbstractItemModel
       int columnCount( QModelIndex const& parent = QModelIndex()) const;
       QVariant  data(const QModelIndex & index, int role = Qt::DisplayRole) const;
    private:
-      //boost::shared_ptr<mapnik::Map> map_;
-      boost::scoped_ptr<node> root_;
+      //std::shared_ptr<mapnik::Map> map_;
+      const std::unique_ptr<node> root_;
 };
 
 #endif // STYLE_MODEL_HPP
diff --git a/demo/viewer/viewer.pro b/demo/viewer/viewer.pro
index a19bc9c..aad00b4 100644
--- a/demo/viewer/viewer.pro
+++ b/demo/viewer/viewer.pro
@@ -3,12 +3,12 @@
 ######################################################################
 TEMPLATE = app
 QT += core gui widgets
-QMAKE_CXX = clang++
+QMAKE_CXX = $$system(mapnik-config --cxx)
+QMAKE_LINK = $$system(mapnik-config --cxx)
 QMAKE_CXXFLAGS += $$system(mapnik-config --cxxflags)
-QMAKE_CXXFLAGS += $$system(mapnik-config --includes --dep-includes)
+QMAKE_CXXFLAGS += $$system(mapnik-config --includes --dep-includes --defines)
 QMAKE_LFLAGS += $$system(mapnik-config --libs)
 QMAKE_LFLAGS += $$system(mapnik-config --ldflags --dep-libs)
-QMAKE_LFLAGS += -lboost_timer
 # Input
 
 CONFIG += qt debug_and_release
diff --git a/deps/agg/build.py b/deps/agg/build.py
index f0e8c90..0f87da1 100644
--- a/deps/agg/build.py
+++ b/deps/agg/build.py
@@ -1,19 +1,21 @@
-#  This file is part of Mapnik (c++ mapping toolkit)
-#  Copyright (C) 2005 Artem Pavlenko, Jean-Francois Doyon
 #
-#  Mapnik is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or any later version.
+# This file is part of Mapnik (c++ mapping toolkit)
 #
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
+# Copyright (C) 2013 Artem Pavlenko
 #
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 # 
 
@@ -21,12 +23,7 @@ import os
 from glob import glob
 
 Import('env')
-
-agg_env = env.Clone()
-
-if env['SUNCC']:
-    cxxflags = env['CUSTOM_CXXFLAGS'] + ' -O -KPIC -DNDEBUG'
-else:
-    cxxflags = env['CUSTOM_CXXFLAGS'] + ' -O%s -fPIC -DNDEBUG' % env['OPTIMIZATION']
-
-agg_env.StaticLibrary('agg', glob('./src/' + '*.cpp'), LIBS=[], CXXFLAGS=cxxflags, LINKFLAGS=env['CUSTOM_LDFLAGS'])
\ No newline at end of file
+lib_env = env.Clone()
+if 'g++' in env['CXX']:
+    lib_env.Append(CXXFLAGS='-fPIC')
+lib_env.StaticLibrary('agg', glob('./src/' + '*.cpp'), LIBS=[])
diff --git a/deps/agg/include/agg_array.h b/deps/agg/include/agg_array.h
index 7c20271..80e02c2 100644
--- a/deps/agg/include/agg_array.h
+++ b/deps/agg/include/agg_array.h
@@ -516,10 +516,11 @@ namespace agg
         if(m_num_blocks)
         {
             T** blk = m_blocks + m_num_blocks - 1;
-            while(m_num_blocks--)
+            while(m_num_blocks > 0)
             {
                 pod_allocator<T>::deallocate(*blk, block_size);
                 --blk;
+                --m_num_blocks;
             }
         }
         pod_allocator<T*>::deallocate(m_blocks, m_max_blocks);
diff --git a/deps/agg/include/agg_basics.h b/deps/agg/include/agg_basics.h
index 65b4789..a617cf2 100644
--- a/deps/agg/include/agg_basics.h
+++ b/deps/agg/include/agg_basics.h
@@ -2,8 +2,8 @@
 // Anti-Grain Geometry - Version 2.4
 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
 //
-// Permission to copy, use, modify, sell and distribute this software 
-// is granted provided this copyright notice appears in all copies. 
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
 // This software is provided "as is" without express or implied
 // warranty, and with no claim as to its suitability for any purpose.
 //
@@ -25,25 +25,25 @@
 #else
 namespace agg
 {
-    // The policy of all AGG containers and memory allocation strategy 
+    // The policy of all AGG containers and memory allocation strategy
     // in general is that no allocated data requires explicit construction.
     // It means that the allocator can be really simple; you can even
-    // replace new/delete to malloc/free. The constructors and destructors 
-    // won't be called in this case, however everything will remain working. 
-    // The second argument of deallocate() is the size of the allocated 
+    // replace new/delete to malloc/free. The constructors and destructors
+    // won't be called in this case, however everything will remain working.
+    // The second argument of deallocate() is the size of the allocated
     // block. You can use this information if you wish.
     //------------------------------------------------------------pod_allocator
     template<class T> struct pod_allocator
     {
         //static T*   allocate(unsigned num)       { return static_cast<T*>(::operator new(sizeof(T)*num));}
-        //static void deallocate(T* ptr, unsigned) { ::operator delete(ptr) ;}  
+        //static void deallocate(T* ptr, unsigned) { ::operator delete(ptr) ;}
         static T*   allocate(unsigned num)       { return new T [num]; }
-        static void deallocate(T* ptr, unsigned) { delete [] ptr;      }      
+        static void deallocate(T* ptr, unsigned) { delete [] ptr;      }
     };
-    
+
     // Single object allocator. It's also can be replaced with your custom
-    // allocator. The difference is that it can only allocate a single 
-    // object and the constructor and destructor must be called. 
+    // allocator. The difference is that it can only allocate a single
+    // object and the constructor and destructor must be called.
     // In AGG there is no need to allocate an array of objects with
     // calling their constructors (only single ones). So that, if you
     // replace these new/delete to malloc/free make sure that the in-place
@@ -89,20 +89,12 @@ namespace agg
 #endif
 
 #ifndef AGG_INT64
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define AGG_INT64 signed __int64
-#else
 #define AGG_INT64 signed long long
 #endif
-#endif
 
 #ifndef AGG_INT64U
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define AGG_INT64U unsigned __int64
-#else
 #define AGG_INT64U unsigned long long
 #endif
-#endif
 
 //------------------------------------------------ Some fixes for MS Visual C++
 #if defined(_MSC_VER)
@@ -127,50 +119,6 @@ namespace agg
     typedef AGG_INT64  int64;        //----int64
     typedef AGG_INT64U int64u;       //----int64u
 
-#if defined(AGG_FISTP)
-#pragma warning(push)
-#pragma warning(disable : 4035) //Disable warning "no return value"
-    AGG_INLINE int iround(double v)              //-------iround
-    {
-        int t;
-        __asm fld   qword ptr [v]
-        __asm fistp dword ptr [t]
-        __asm mov eax, dword ptr [t]
-    }
-    AGG_INLINE unsigned uround(double v)         //-------uround
-    {
-        unsigned t;
-        __asm fld   qword ptr [v]
-        __asm fistp dword ptr [t]
-        __asm mov eax, dword ptr [t]
-    }
-#pragma warning(pop)
-    AGG_INLINE unsigned ufloor(double v)         //-------ufloor
-    {
-        return unsigned(floor(v));
-    }
-    AGG_INLINE unsigned uceil(double v)          //--------uceil
-    {
-        return unsigned(ceil(v));
-    }
-#elif defined(AGG_QIFIST)
-    AGG_INLINE int iround(double v)
-    {
-        return int(v);
-    }
-    AGG_INLINE int uround(double v)
-    {
-        return unsigned(v);
-    }
-    AGG_INLINE unsigned ufloor(double v)
-    {
-        return unsigned(floor(v));
-    }
-    AGG_INLINE unsigned uceil(double v)
-    {
-        return unsigned(ceil(v));
-    }
-#else
     AGG_INLINE int iround(double v)
     {
         return int((v < 0.0) ? v - 0.5 : v + 0.5);
@@ -185,9 +133,8 @@ namespace agg
     }
     AGG_INLINE unsigned uceil(double v)
     {
-        return unsigned(ceil(v));
+        return unsigned(std::ceil(v));
     }
-#endif
 
     //---------------------------------------------------------------saturation
     template<int Limit> struct saturation
@@ -205,7 +152,7 @@ namespace agg
     {
         AGG_INLINE static unsigned mul(unsigned a, unsigned b)
         {
-            register unsigned q = a * b + (1 << (Shift-1));
+            unsigned q = a * b + (1 << (Shift-1));
             return (q + (q >> Shift)) >> Shift;
         }
     };
@@ -215,23 +162,23 @@ namespace agg
     enum cover_scale_e
     {
         cover_shift = 8,                 //----cover_shift
-        cover_size  = 1 << cover_shift,  //----cover_size 
-        cover_mask  = cover_size - 1,    //----cover_mask 
-        cover_none  = 0,                 //----cover_none 
-        cover_full  = cover_mask         //----cover_full 
+        cover_size  = 1 << cover_shift,  //----cover_size
+        cover_mask  = cover_size - 1,    //----cover_mask
+        cover_none  = 0,                 //----cover_none
+        cover_full  = cover_mask         //----cover_full
     };
 
     //----------------------------------------------------poly_subpixel_scale_e
-    // These constants determine the subpixel accuracy, to be more precise, 
-    // the number of bits of the fractional part of the coordinates. 
+    // These constants determine the subpixel accuracy, to be more precise,
+    // the number of bits of the fractional part of the coordinates.
     // The possible coordinate capacity in bits can be calculated by formula:
     // sizeof(int) * 8 - poly_subpixel_shift, i.e, for 32-bit integers and
     // 8-bits fractional part the capacity is 24 bits.
     enum poly_subpixel_scale_e
     {
         poly_subpixel_shift = 8,                      //----poly_subpixel_shift
-        poly_subpixel_scale = 1<<poly_subpixel_shift, //----poly_subpixel_scale 
-        poly_subpixel_mask  = poly_subpixel_scale-1  //----poly_subpixel_mask 
+        poly_subpixel_scale = 1<<poly_subpixel_shift, //----poly_subpixel_scale
+        poly_subpixel_mask  = poly_subpixel_scale-1  //----poly_subpixel_mask
     };
 
     //----------------------------------------------------------filling_rule_e
@@ -255,7 +202,7 @@ namespace agg
     {
         return rad * 180.0 / pi;
     }
- 
+
     //----------------------------------------------------------------rect_base
     template<class T> struct rect_base
     {
@@ -267,9 +214,9 @@ namespace agg
         rect_base(T x1_, T y1_, T x2_, T y2_) :
             x1(x1_), y1(y1_), x2(x2_), y2(y2_) {}
 
-        void init(T x1_, T y1_, T x2_, T y2_) 
+        void init(T x1_, T y1_, T x2_, T y2_)
         {
-            x1 = x1_; y1 = y1_; x2 = x2_; y2 = y2_; 
+            x1 = x1_; y1 = y1_; x2 = x2_; y2 = y2_;
         }
 
         const self_type& normalize()
@@ -301,17 +248,17 @@ namespace agg
     };
 
     //-----------------------------------------------------intersect_rectangles
-    template<class Rect> 
+    template<class Rect>
     inline Rect intersect_rectangles(const Rect& r1, const Rect& r2)
     {
         Rect r = r1;
 
-        // First process x2,y2 because the other order 
-        // results in Internal Compiler Error under 
-        // Microsoft Visual C++ .NET 2003 69462-335-0000007-18038 in 
+        // First process x2,y2 because the other order
+        // results in Internal Compiler Error under
+        // Microsoft Visual C++ .NET 2003 69462-335-0000007-18038 in
         // case of "Maximize Speed" optimization option.
         //-----------------
-        if(r.x2 > r2.x2) r.x2 = r2.x2; 
+        if(r.x2 > r2.x2) r.x2 = r2.x2;
         if(r.y2 > r2.y2) r.y2 = r2.y2;
         if(r.x1 < r2.x1) r.x1 = r2.x1;
         if(r.y1 < r2.y1) r.y1 = r2.y1;
@@ -320,7 +267,7 @@ namespace agg
 
 
     //---------------------------------------------------------unite_rectangles
-    template<class Rect> 
+    template<class Rect>
     inline Rect unite_rectangles(const Rect& r1, const Rect& r2)
     {
         Rect r = r1;
@@ -338,26 +285,26 @@ namespace agg
     //---------------------------------------------------------path_commands_e
     enum path_commands_e
     {
-        path_cmd_stop     = 0,        //----path_cmd_stop    
-        path_cmd_move_to  = 1,        //----path_cmd_move_to 
-        path_cmd_line_to  = 2,        //----path_cmd_line_to 
-        path_cmd_curve3   = 3,        //----path_cmd_curve3  
-        path_cmd_curve4   = 4,        //----path_cmd_curve4  
+        path_cmd_stop     = 0,        //----path_cmd_stop
+        path_cmd_move_to  = 1,        //----path_cmd_move_to
+        path_cmd_line_to  = 2,        //----path_cmd_line_to
+        path_cmd_curve3   = 3,        //----path_cmd_curve3
+        path_cmd_curve4   = 4,        //----path_cmd_curve4
         path_cmd_curveN   = 5,        //----path_cmd_curveN
         path_cmd_catrom   = 6,        //----path_cmd_catrom
         path_cmd_ubspline = 7,        //----path_cmd_ubspline
         path_cmd_end_poly = 0x0F,     //----path_cmd_end_poly
-        path_cmd_mask     = 0x0F      //----path_cmd_mask    
+        path_cmd_mask     = 0x0F      //----path_cmd_mask
     };
 
     //------------------------------------------------------------path_flags_e
     enum path_flags_e
     {
-        path_flags_none  = 0,         //----path_flags_none 
-        path_flags_ccw   = 0x10,      //----path_flags_ccw  
-        path_flags_cw    = 0x20,      //----path_flags_cw   
+        path_flags_none  = 0,         //----path_flags_none
+        path_flags_ccw   = 0x10,      //----path_flags_ccw
+        path_flags_cw    = 0x20,      //----path_flags_cw
         path_flags_close = 0x40,      //----path_flags_close
-        path_flags_mask  = 0xF0       //----path_flags_mask 
+        path_flags_mask  = 0xF0       //----path_flags_mask
     };
 
     //---------------------------------------------------------------is_vertex
@@ -374,7 +321,7 @@ namespace agg
 
     //-----------------------------------------------------------------is_stop
     inline bool is_stop(unsigned c)
-    { 
+    {
         return c == path_cmd_stop;
     }
 
@@ -418,7 +365,7 @@ namespace agg
     inline bool is_close(unsigned c)
     {
         return (c & ~(path_flags_cw | path_flags_ccw)) ==
-               (path_cmd_end_poly | path_flags_close); 
+               (path_cmd_end_poly | path_flags_close);
     }
 
     //------------------------------------------------------------is_next_poly
@@ -442,19 +389,19 @@ namespace agg
     //-------------------------------------------------------------is_oriented
     inline bool is_oriented(unsigned c)
     {
-        return (c & (path_flags_cw | path_flags_ccw)) != 0; 
+        return (c & (path_flags_cw | path_flags_ccw)) != 0;
     }
 
     //---------------------------------------------------------------is_closed
     inline bool is_closed(unsigned c)
     {
-        return (c & path_flags_close) != 0; 
+        return (c & path_flags_close) != 0;
     }
 
     //----------------------------------------------------------get_close_flag
     inline unsigned get_close_flag(unsigned c)
     {
-        return c & path_flags_close; 
+        return c & path_flags_close;
     }
 
     //-------------------------------------------------------clear_orientation
@@ -515,18 +462,17 @@ namespace agg
         int x1, x2;
         const T* ptr;
         const_row_info() {}
-        const_row_info(int x1_, int x2_, const T* ptr_) : 
+        const_row_info(int x1_, int x2_, const T* ptr_) :
             x1(x1_), x2(x2_), ptr(ptr_) {}
     };
 
     //------------------------------------------------------------is_equal_eps
     template<class T> inline bool is_equal_eps(T v1, T v2, T epsilon)
     {
-        return fabs(v1 - v2) <= double(epsilon);
+        return std::fabs(v1 - v2) <= double(epsilon);
     }
 
 }
 
 
 #endif
-
diff --git a/deps/agg/include/agg_conv_clipper.h b/deps/agg/include/agg_conv_clipper.h
index 2627cec..2bd4c3d 100755
--- a/deps/agg/include/agg_conv_clipper.h
+++ b/deps/agg/include/agg_conv_clipper.h
@@ -1,295 +1,295 @@
-/*******************************************************************************
-*                                                                              *
-* Author    :  Angus Johnson                                                   *
-* Version   :  1.1                                                             *
-* Date      :  4 April 2011                                                    *
-* Website   :  http://www.angusj.com                                           *
-* Copyright :  Angus Johnson 2010-2011                                         *
-*                                                                              *
-* License:                                                                     *
-* Use, modification & distribution is subject to Boost Software License Ver 1. *
-* http://www.boost.org/LICENSE_1_0.txt                                         *
-*                                                                              *
-*******************************************************************************/
-
-#ifndef AGG_CONV_CLIPPER_INCLUDED
-#define AGG_CONV_CLIPPER_INCLUDED
-
-#include <cmath>
-#include "agg_basics.h"
-#include "agg_array.h"
-#include "clipper.hpp"
-
-namespace agg
-{
-  enum clipper_op_e { clipper_or,
-    clipper_and, clipper_xor, clipper_a_minus_b, clipper_b_minus_a };
-  enum clipper_PolyFillType {clipper_even_odd, clipper_non_zero, clipper_positive, clipper_negative};
-
-  template<class VSA, class VSB> class conv_clipper
-  {
-    enum status { status_move_to, status_line_to, status_stop };
-    typedef VSA source_a_type;
-    typedef VSB source_b_type;
-    typedef conv_clipper<source_a_type, source_b_type> self_type;
-
-  private:
-    source_a_type*							m_src_a;
-    source_b_type*							m_src_b;
-    status									m_status;
-    int										m_vertex;
-    int										m_contour;
-	int										m_scaling_factor;
-    clipper_op_e							m_operation;
-    pod_bvector<ClipperLib::IntPoint, 8>		m_vertex_accumulator;
-    ClipperLib::Polygons						m_poly_a;
-    ClipperLib::Polygons						m_poly_b;
-    ClipperLib::Polygons						m_result;
-    ClipperLib::Clipper						m_clipper;
-    clipper_PolyFillType					m_subjFillType;
-    clipper_PolyFillType					m_clipFillType;
-
-    int Round(double val)
-    {
-    if ((val < 0)) return (int)(val - 0.5); else return (int)(val + 0.5);
-    }
-
-  public:
-    conv_clipper(source_a_type &a, source_b_type &b,
-      clipper_op_e op = clipper_or,
-      clipper_PolyFillType subjFillType = clipper_even_odd,
-      clipper_PolyFillType clipFillType = clipper_even_odd,
-	  int scaling_factor = 2) :
-        m_src_a(&a),
-        m_src_b(&b),
-        m_status(status_move_to),
-        m_vertex(-1),
-        m_contour(-1),
-        m_operation(op),
-        m_subjFillType(subjFillType),
-        m_clipFillType(clipFillType)
-    {
-		m_scaling_factor = std::max(std::min(scaling_factor, 6),0);
-		m_scaling_factor = Round(std::pow((double)10, m_scaling_factor));
-	}
-
-    ~conv_clipper()
-    {
-    }
-
-    void attach1(VSA &source, clipper_PolyFillType subjFillType = clipper_even_odd)
-      { m_src_a = &source; m_subjFillType = subjFillType; }
-    void attach2(VSB &source, clipper_PolyFillType clipFillType = clipper_even_odd)
-      { m_src_b = &source; m_clipFillType = clipFillType; }
-
-    void operation(clipper_op_e v) { m_operation = v; }
-
-    void rewind(unsigned path_id);
-    unsigned vertex(double* x, double* y);
-  
-    bool next_contour();
-    bool next_vertex(double* x, double* y);
-    void start_extracting();
-    void add_vertex_(double &x, double &y);
-    void end_contour(ClipperLib::Polygons &p);
-
-	template<class VS> void add(VS &src, ClipperLib::Polygons &p){
-		unsigned cmd;
-		double x; double y; double start_x; double start_y;
-		bool starting_first_line;
-
-		start_x = 0.0;
-		start_y = 0.0;
-		starting_first_line = true;
-		p.resize(0);
-
-		cmd = src->vertex( &x , &y );
-		while(!is_stop(cmd))
-		{
-		  if(is_vertex(cmd))
-		  {
-			if(is_move_to(cmd))
-			{
-			  if(!starting_first_line ) end_contour(p);
-			  start_x = x;
-			  start_y = y;
-			}
-			add_vertex_( x, y );
-			starting_first_line = false;
-		  }
-		  else if(is_end_poly(cmd))
-		  {
-			if(!starting_first_line && is_closed(cmd))
-			  add_vertex_( start_x, start_y );
-		  }
-		  cmd = src->vertex( &x, &y );
-		}
-		end_contour(p);
-	}
-  };
-
-  //------------------------------------------------------------------------
-
-  template<class VSA, class VSB> 
-  void conv_clipper<VSA, VSB>::start_extracting()
-  {
-    m_status = status_move_to;
-    m_contour = -1;
-    m_vertex = -1;
-  }
-  //------------------------------------------------------------------------------
-
-  template<class VSA, class VSB>
-  void conv_clipper<VSA, VSB>::rewind(unsigned path_id)
-  {
-    m_src_a->rewind( path_id );
-    m_src_b->rewind( path_id );
-
-    add( m_src_a , m_poly_a );
-    add( m_src_b , m_poly_b );
-    m_result.resize(0);
-
-    ClipperLib::PolyFillType pftSubj, pftClip;
-    switch (m_subjFillType)
-    {
-      case clipper_even_odd: pftSubj = ClipperLib::pftEvenOdd; break;
-      case clipper_non_zero: pftSubj = ClipperLib::pftNonZero; break;
-      case clipper_positive: pftSubj = ClipperLib::pftPositive; break;
-      default: pftSubj = ClipperLib::pftNegative;
-    }
-    switch (m_clipFillType)
-    {
-      case clipper_even_odd: pftClip = ClipperLib::pftEvenOdd; break;
-      case clipper_non_zero: pftClip = ClipperLib::pftNonZero; break;
-      case clipper_positive: pftClip = ClipperLib::pftPositive; break;
-      default: pftClip = ClipperLib::pftNegative;
-    }
-
-    m_clipper.Clear();
-    switch( m_operation ) {
-      case clipper_or:
-        {
-        m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject );
-        m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip );
-        m_clipper.Execute( ClipperLib::ctUnion , m_result , pftSubj, pftClip);
-		break;
-        }
-      case clipper_and:
-        {
-        m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject );
-        m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip );
-        m_clipper.Execute( ClipperLib::ctIntersection , m_result, pftSubj, pftClip );
-		break;
-        }
-      case clipper_xor:
-        {
-        m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject );
-        m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip );
-        m_clipper.Execute( ClipperLib::ctXor , m_result, pftSubj, pftClip );
-		break;
-        }
-      case clipper_a_minus_b:
-        {
-        m_clipper.AddPolygons( m_poly_a , ClipperLib::ptSubject );
-        m_clipper.AddPolygons( m_poly_b , ClipperLib::ptClip );
-        m_clipper.Execute( ClipperLib::ctDifference , m_result, pftSubj, pftClip );
-		break;
-        }
-      case clipper_b_minus_a:
-        {
-        m_clipper.AddPolygons( m_poly_b , ClipperLib::ptSubject );
-        m_clipper.AddPolygons( m_poly_a , ClipperLib::ptClip );
-        m_clipper.Execute( ClipperLib::ctDifference , m_result, pftSubj, pftClip );
-		break;
-        }
-    }
-    start_extracting();
-  }
-  //------------------------------------------------------------------------------
-
-  template<class VSA, class VSB>
-  void conv_clipper<VSA, VSB>::end_contour( ClipperLib::Polygons &p)
-  {
-  unsigned i, len;
-
-  if( m_vertex_accumulator.size() < 3 ) return;
-  len = p.size();
-  p.resize(len+1);
-  p[len].resize(m_vertex_accumulator.size());
-  for( i = 0 ; i < m_vertex_accumulator.size() ; i++ )
-    p[len][i] = m_vertex_accumulator[i];
-  m_vertex_accumulator.remove_all();
-  }
-  //------------------------------------------------------------------------------
-
-  template<class VSA, class VSB> 
-  void conv_clipper<VSA, VSB>::add_vertex_(double &x, double &y)
-  {
-	  ClipperLib::IntPoint v;
-
-	  v.X = Round(x * m_scaling_factor);
-	  v.Y = Round(y * m_scaling_factor);
-	  m_vertex_accumulator.add( v );
-  }
-  //------------------------------------------------------------------------------
-
-  template<class VSA, class VSB> 
-  bool conv_clipper<VSA, VSB>::next_contour()
-  {   
-	m_contour++;
-	if(m_contour >= (int)m_result.size()) return false;
-	m_vertex =-1;
-	return true;
-}
-//------------------------------------------------------------------------------
-
-  template<class VSA, class VSB> 
-  bool conv_clipper<VSA, VSB>::next_vertex(double *x, double *y)
-  {
-    m_vertex++;
-    if(m_vertex >= (int)m_result[m_contour].size()) return false;
-    *x = (double)m_result[ m_contour ][ m_vertex ].X / m_scaling_factor;
-    *y = (double)m_result[ m_contour ][ m_vertex ].Y / m_scaling_factor;
-    return true;
-  }
-  //------------------------------------------------------------------------------
-
-  template<class VSA, class VSB>
-  unsigned conv_clipper<VSA, VSB>::vertex(double *x, double *y)
-{
-  if(  m_status == status_move_to )
-  {
-    if( next_contour() )
-    {
-      if(  next_vertex( x, y ) )
-      {
-        m_status =status_line_to;
-        return path_cmd_move_to;
-      }
-	  else
-	  {
-        m_status = status_stop;
-        return path_cmd_end_poly | path_flags_close;
-      }
-    }
-	else
-      return path_cmd_stop;
-  }
-  else
-  {
-    if(  next_vertex( x, y ) )
-    {
-      return path_cmd_line_to;
-    }
-	else
-    {
-      m_status = status_move_to;
-      return path_cmd_end_poly | path_flags_close;
-    }
-  }
-}
-//------------------------------------------------------------------------------
-
-
-} //namespace agg
-#endif //AGG_CONV_CLIPPER_INCLUDED
+/*******************************************************************************
+*                                                                              *
+* Author    :  Angus Johnson                                                   *
+* Version   :  1.1                                                             *
+* Date      :  4 April 2011                                                    *
+* Website   :  http://www.angusj.com                                           *
+* Copyright :  Angus Johnson 2010-2011                                         *
+*                                                                              *
+* License:                                                                     *
+* Use, modification & distribution is subject to Boost Software License Ver 1. *
+* http://www.boost.org/LICENSE_1_0.txt                                         *
+*                                                                              *
+*******************************************************************************/
+
+#ifndef AGG_CONV_CLIPPER_INCLUDED
+#define AGG_CONV_CLIPPER_INCLUDED
+
+#include <cmath>
+#include "agg_basics.h"
+#include "agg_array.h"
+#include "clipper.hpp"
+
+namespace agg
+{
+  enum clipper_op_e { clipper_or,
+    clipper_and, clipper_xor, clipper_a_minus_b, clipper_b_minus_a };
+  enum clipper_PolyFillType {clipper_even_odd, clipper_non_zero, clipper_positive, clipper_negative};
+
+  template<class VSA, class VSB> class conv_clipper
+  {
+    enum status { status_move_to, status_line_to, status_stop };
+    typedef VSA source_a_type;
+    typedef VSB source_b_type;
+    typedef conv_clipper<source_a_type, source_b_type> self_type;
+
+  private:
+    source_a_type*                            m_src_a;
+    source_b_type*                            m_src_b;
+    status                                    m_status;
+    int                                        m_vertex;
+    int                                        m_contour;
+    int                                        m_scaling_factor;
+    clipper_op_e              m_operation;
+    pod_bvector<ClipperLib::IntPoint, 8>        m_vertex_accumulator;
+    ClipperLib::Paths         m_poly_a;
+    ClipperLib::Paths         m_poly_b;
+    ClipperLib::Paths         m_result;
+    ClipperLib::Clipper       m_clipper;
+    clipper_PolyFillType      m_subjFillType;
+    clipper_PolyFillType      m_clipFillType;
+
+    int Round(double val)
+    {
+    if ((val < 0)) return (int)(val - 0.5); else return (int)(val + 0.5);
+    }
+
+  public:
+    conv_clipper(source_a_type &a, source_b_type &b,
+      clipper_op_e op = clipper_or,
+      clipper_PolyFillType subjFillType = clipper_even_odd,
+      clipper_PolyFillType clipFillType = clipper_even_odd,
+      int scaling_factor = 2) :
+        m_src_a(&a),
+        m_src_b(&b),
+        m_status(status_move_to),
+        m_vertex(-1),
+        m_contour(-1),
+        m_operation(op),
+        m_subjFillType(subjFillType),
+        m_clipFillType(clipFillType)
+    {
+        m_scaling_factor = std::max(std::min(scaling_factor, 6),0);
+        m_scaling_factor = Round(std::pow((double)10, m_scaling_factor));
+    }
+
+    ~conv_clipper()
+    {
+    }
+
+    void attach1(VSA &source, clipper_PolyFillType subjFillType = clipper_even_odd)
+      { m_src_a = &source; m_subjFillType = subjFillType; }
+    void attach2(VSB &source, clipper_PolyFillType clipFillType = clipper_even_odd)
+      { m_src_b = &source; m_clipFillType = clipFillType; }
+
+    void operation(clipper_op_e v) { m_operation = v; }
+
+    void rewind(unsigned path_id);
+    unsigned vertex(double* x, double* y);
+  
+    bool next_contour();
+    bool next_vertex(double* x, double* y);
+    void start_extracting();
+    void add_vertex_(double &x, double &y);
+    void end_contour(ClipperLib::Paths &p);
+
+    template<class VS> void add(VS &src, ClipperLib::Paths &p){
+        unsigned cmd;
+        double x; double y; double start_x; double start_y;
+        bool starting_first_line;
+
+        start_x = 0.0;
+        start_y = 0.0;
+        starting_first_line = true;
+        p.resize(0);
+
+        cmd = src->vertex( &x , &y );
+        while(!is_stop(cmd))
+        {
+          if(is_vertex(cmd))
+          {
+            if(is_move_to(cmd))
+            {
+              if(!starting_first_line ) end_contour(p);
+              start_x = x;
+              start_y = y;
+            }
+            add_vertex_( x, y );
+            starting_first_line = false;
+          }
+          else if(is_end_poly(cmd))
+          {
+            if(!starting_first_line && is_closed(cmd))
+              add_vertex_( start_x, start_y );
+          }
+          cmd = src->vertex( &x, &y );
+        }
+        end_contour(p);
+    }
+  };
+
+  //------------------------------------------------------------------------
+
+  template<class VSA, class VSB> 
+  void conv_clipper<VSA, VSB>::start_extracting()
+  {
+    m_status = status_move_to;
+    m_contour = -1;
+    m_vertex = -1;
+  }
+  //------------------------------------------------------------------------------
+
+  template<class VSA, class VSB>
+  void conv_clipper<VSA, VSB>::rewind(unsigned path_id)
+  {
+    m_src_a->rewind( path_id );
+    m_src_b->rewind( path_id );
+
+    add( m_src_a , m_poly_a );
+    add( m_src_b , m_poly_b );
+    m_result.resize(0);
+
+    ClipperLib::PolyFillType pftSubj, pftClip;
+    switch (m_subjFillType)
+    {
+      case clipper_even_odd: pftSubj = ClipperLib::pftEvenOdd; break;
+      case clipper_non_zero: pftSubj = ClipperLib::pftNonZero; break;
+      case clipper_positive: pftSubj = ClipperLib::pftPositive; break;
+      default: pftSubj = ClipperLib::pftNegative;
+    }
+    switch (m_clipFillType)
+    {
+      case clipper_even_odd: pftClip = ClipperLib::pftEvenOdd; break;
+      case clipper_non_zero: pftClip = ClipperLib::pftNonZero; break;
+      case clipper_positive: pftClip = ClipperLib::pftPositive; break;
+      default: pftClip = ClipperLib::pftNegative;
+    }
+
+    m_clipper.Clear();
+    switch( m_operation ) {
+      case clipper_or:
+        {
+        m_clipper.AddPaths( m_poly_a , ClipperLib::ptSubject, true );
+        m_clipper.AddPaths( m_poly_b , ClipperLib::ptClip, true );
+        m_clipper.Execute( ClipperLib::ctUnion , m_result , pftSubj, pftClip);
+        break;
+        }
+      case clipper_and:
+        {
+        m_clipper.AddPaths( m_poly_a , ClipperLib::ptSubject, true );
+        m_clipper.AddPaths( m_poly_b , ClipperLib::ptClip, true );
+        m_clipper.Execute( ClipperLib::ctIntersection , m_result, pftSubj, pftClip );
+        break;
+        }
+      case clipper_xor:
+        {
+        m_clipper.AddPaths( m_poly_a , ClipperLib::ptSubject, true );
+        m_clipper.AddPaths( m_poly_b , ClipperLib::ptClip, true );
+        m_clipper.Execute( ClipperLib::ctXor , m_result, pftSubj, pftClip );
+        break;
+        }
+      case clipper_a_minus_b:
+        {
+        m_clipper.AddPaths( m_poly_a , ClipperLib::ptSubject, true );
+        m_clipper.AddPaths( m_poly_b , ClipperLib::ptClip, true );
+        m_clipper.Execute( ClipperLib::ctDifference , m_result, pftSubj, pftClip );
+        break;
+        }
+      case clipper_b_minus_a:
+        {
+        m_clipper.AddPaths( m_poly_b , ClipperLib::ptSubject, true );
+        m_clipper.AddPaths( m_poly_a , ClipperLib::ptClip, true );
+        m_clipper.Execute( ClipperLib::ctDifference , m_result, pftSubj, pftClip );
+        break;
+        }
+    }
+    start_extracting();
+  }
+  //------------------------------------------------------------------------------
+
+  template<class VSA, class VSB>
+  void conv_clipper<VSA, VSB>::end_contour( ClipperLib::Paths &p)
+  {
+  unsigned i, len;
+
+  if( m_vertex_accumulator.size() < 3 ) return;
+  len = p.size();
+  p.resize(len+1);
+  p[len].resize(m_vertex_accumulator.size());
+  for( i = 0 ; i < m_vertex_accumulator.size() ; i++ )
+    p[len][i] = m_vertex_accumulator[i];
+  m_vertex_accumulator.remove_all();
+  }
+  //------------------------------------------------------------------------------
+
+  template<class VSA, class VSB> 
+  void conv_clipper<VSA, VSB>::add_vertex_(double &x, double &y)
+  {
+      ClipperLib::IntPoint v;
+
+      v.X = Round(x * m_scaling_factor);
+      v.Y = Round(y * m_scaling_factor);
+      m_vertex_accumulator.add( v );
+  }
+  //------------------------------------------------------------------------------
+
+  template<class VSA, class VSB> 
+  bool conv_clipper<VSA, VSB>::next_contour()
+  {   
+    m_contour++;
+    if(m_contour >= (int)m_result.size()) return false;
+    m_vertex =-1;
+    return true;
+}
+//------------------------------------------------------------------------------
+
+  template<class VSA, class VSB> 
+  bool conv_clipper<VSA, VSB>::next_vertex(double *x, double *y)
+  {
+    m_vertex++;
+    if(m_vertex >= (int)m_result[m_contour].size()) return false;
+    *x = (double)m_result[ m_contour ][ m_vertex ].X / m_scaling_factor;
+    *y = (double)m_result[ m_contour ][ m_vertex ].Y / m_scaling_factor;
+    return true;
+  }
+  //------------------------------------------------------------------------------
+
+  template<class VSA, class VSB>
+  unsigned conv_clipper<VSA, VSB>::vertex(double *x, double *y)
+{
+  if(  m_status == status_move_to )
+  {
+    if( next_contour() )
+    {
+      if(  next_vertex( x, y ) )
+      {
+        m_status =status_line_to;
+        return path_cmd_move_to;
+      }
+      else
+      {
+        m_status = status_stop;
+        return path_cmd_end_poly | path_flags_close;
+      }
+    }
+    else
+      return path_cmd_stop;
+  }
+  else
+  {
+    if(  next_vertex( x, y ) )
+    {
+      return path_cmd_line_to;
+    }
+    else
+    {
+      m_status = status_move_to;
+      return path_cmd_end_poly | path_flags_close;
+    }
+  }
+}
+//------------------------------------------------------------------------------
+
+
+} //namespace agg
+#endif //AGG_CONV_CLIPPER_INCLUDED
diff --git a/deps/agg/include/agg_conv_marker.h b/deps/agg/include/agg_conv_marker.h
index 2cd3cb4..e601015 100644
--- a/deps/agg/include/agg_conv_marker.h
+++ b/deps/agg/include/agg_conv_marker.h
@@ -117,7 +117,7 @@ namespace agg
                 }
                 ++m_num_markers;
                 m_mtx = m_transform;
-                m_mtx *= trans_affine_rotation(atan2(y2 - y1, x2 - x1));
+                m_mtx *= trans_affine_rotation(std::atan2(y2 - y1, x2 - x1));
                 m_mtx *= trans_affine_translation(x1, y1);
                 m_marker_shapes->rewind(m_marker - 1);
                 m_status = polygon;
diff --git a/deps/agg/include/agg_conv_transform.h b/deps/agg/include/agg_conv_transform.h
index b57fb07..886acb3 100644
--- a/deps/agg/include/agg_conv_transform.h
+++ b/deps/agg/include/agg_conv_transform.h
@@ -54,6 +54,8 @@ namespace agg
             m_trans = &tr;
         }
 
+        unsigned type() const { return m_source->type(); }
+
     private:
         conv_transform(const conv_transform<VertexSource>&);
         const conv_transform<VertexSource>& 
diff --git a/deps/agg/include/agg_curves.h b/deps/agg/include/agg_curves.h
index 1ef02e8..ad893ad 100644
--- a/deps/agg/include/agg_curves.h
+++ b/deps/agg/include/agg_curves.h
@@ -19,6 +19,8 @@
 
 #include "agg_array.h"
 
+#include <mapnik/config.hpp>
+
 namespace agg
 {
 
@@ -32,7 +34,7 @@ namespace agg
     };
     
     //--------------------------------------------------------------curve3_inc
-    class curve3_inc
+    class MAPNIK_DECL curve3_inc
     {
     public:
         curve3_inc() :
@@ -91,7 +93,7 @@ namespace agg
 
 
     //-------------------------------------------------------------curve3_div
-    class curve3_div
+    class MAPNIK_DECL curve3_div
     {
     public:
         curve3_div() : 
@@ -164,7 +166,7 @@ namespace agg
 
 
     //-------------------------------------------------------------curve4_points
-    struct curve4_points
+    struct MAPNIK_DECL curve4_points
     {
         double cp[8];
         curve4_points() {}
@@ -191,7 +193,7 @@ namespace agg
 
 
     //-------------------------------------------------------------curve4_inc
-    class curve4_inc
+    class MAPNIK_DECL curve4_inc
     {
     public:
         curve4_inc() :
@@ -371,7 +373,7 @@ namespace agg
 
 
     //-------------------------------------------------------------curve4_div
-    class curve4_div
+    class MAPNIK_DECL curve4_div
     {
     public:
         curve4_div() : 
@@ -471,7 +473,7 @@ namespace agg
 
 
     //-----------------------------------------------------------------curve3
-    class curve3
+    class MAPNIK_DECL curve3
     {
     public:
         curve3() : m_approximation_method(curve_div) {}
@@ -576,7 +578,7 @@ namespace agg
 
 
     //-----------------------------------------------------------------curve4
-    class curve4
+    class MAPNIK_DECL curve4
     {
     public:
         curve4() : m_approximation_method(curve_div) {}
diff --git a/deps/agg/include/agg_dda_line.h b/deps/agg/include/agg_dda_line.h
index 0bcde58..c535816 100644
--- a/deps/agg/include/agg_dda_line.h
+++ b/deps/agg/include/agg_dda_line.h
@@ -233,9 +233,9 @@ namespace agg
             m_y1_lr(line_lr(y1)),
             m_x2_lr(line_lr(x2)),
             m_y2_lr(line_lr(y2)),
-            m_ver(abs(m_x2_lr - m_x1_lr) < abs(m_y2_lr - m_y1_lr)),
-            m_len(m_ver ? abs(m_y2_lr - m_y1_lr) : 
-                          abs(m_x2_lr - m_x1_lr)),
+            m_ver(std::abs(m_x2_lr - m_x1_lr) < std::abs(m_y2_lr - m_y1_lr)),
+            m_len(m_ver ? std::abs(m_y2_lr - m_y1_lr) : 
+                          std::abs(m_x2_lr - m_x1_lr)),
             m_inc(m_ver ? ((y2 > y1) ? 1 : -1) : ((x2 > x1) ? 1 : -1)),
             m_interpolator(m_ver ? x1 : y1, 
                            m_ver ? x2 : y2, 
diff --git a/deps/agg/include/agg_ellipse.h b/deps/agg/include/agg_ellipse.h
index 82b9e74..b046b1c 100644
--- a/deps/agg/include/agg_ellipse.h
+++ b/deps/agg/include/agg_ellipse.h
@@ -86,8 +86,8 @@ namespace agg
     //------------------------------------------------------------------------
     inline void ellipse::calc_num_steps()
     {
-        double ra = (fabs(m_rx) + fabs(m_ry)) / 2;
-        double da = acos(ra / (ra + 0.125 / m_scale)) * 2;
+        double ra = (std::fabs(m_rx) + std::fabs(m_ry)) / 2;
+        double da = std::acos(ra / (ra + 0.125 / m_scale)) * 2;
         m_num = uround(2*pi / da);
     }
 
@@ -108,8 +108,8 @@ namespace agg
         if(m_step > m_num) return path_cmd_stop;
         double angle = double(m_step) / double(m_num) * 2.0 * pi;
         if(m_cw) angle = 2.0 * pi - angle;
-        *x = m_x + cos(angle) * m_rx;
-        *y = m_y + sin(angle) * m_ry;
+        *x = m_x + std::cos(angle) * m_rx;
+        *y = m_y + std::sin(angle) * m_ry;
         m_step++;
         return ((m_step == 1) ? path_cmd_move_to : path_cmd_line_to);
     }
diff --git a/deps/agg/include/agg_gradient_lut.h b/deps/agg/include/agg_gradient_lut.h
index ad269d4..079bed9 100644
--- a/deps/agg/include/agg_gradient_lut.h
+++ b/deps/agg/include/agg_gradient_lut.h
@@ -137,7 +137,7 @@ namespace agg
         //--------------------------------------------------------------------
         void remove_all();
         void add_color(double offset, const color_type& color);
-        void build_lut();
+        bool build_lut();
 
         // Size-index Interface. This class can be used directly as the 
         // ColorF in span_gradient. All it needs is two access methods 
@@ -202,7 +202,7 @@ namespace agg
 
     //------------------------------------------------------------------------
     template<class T, unsigned S>
-    void gradient_lut<T,S>::build_lut()
+    bool gradient_lut<T,S>::build_lut()
     {
         quick_sort(m_color_profile, offset_less);
         m_color_profile.cut_at(remove_duplicates(m_color_profile, offset_equal));
@@ -234,7 +234,9 @@ namespace agg
             {
                 m_color_lut[end] = c;
             }
+            return true;
         }
+        return false;
     }
 }
 
diff --git a/deps/agg/include/agg_image_accessors.h b/deps/agg/include/agg_image_accessors.h
index e43e052..7166df2 100644
--- a/deps/agg/include/agg_image_accessors.h
+++ b/deps/agg/include/agg_image_accessors.h
@@ -2,8 +2,8 @@
 // Anti-Grain Geometry - Version 2.4
 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
 //
-// Permission to copy, use, modify, sell and distribute this software 
-// is granted provided this copyright notice appears in all copies. 
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
 // This software is provided "as is" without express or implied
 // warranty, and with no claim as to its suitability for any purpose.
 //
@@ -32,8 +32,8 @@ namespace agg
         enum pix_width_e { pix_width = pixfmt_type::pix_width };
 
         image_accessor_clip() {}
-        explicit image_accessor_clip(const pixfmt_type& pixf, 
-                                     const color_type& bk) : 
+        explicit image_accessor_clip(const pixfmt_type& pixf,
+                                     const color_type& bk) :
             m_pixf(&pixf)
         {
             pixfmt_type::make_pix(m_bk_buf, bk);
@@ -85,7 +85,7 @@ namespace agg
         {
             ++m_y;
             m_x = m_x0;
-            if(m_pix_ptr && 
+            if(m_pix_ptr &&
                m_y >= 0 && m_y < (int)m_pixf->height())
             {
                 return m_pix_ptr = m_pixf->pix_ptr(m_x, m_y);
@@ -115,8 +115,8 @@ namespace agg
         enum pix_width_e { pix_width = pixfmt_type::pix_width };
 
         image_accessor_no_clip() {}
-        explicit image_accessor_no_clip(const pixfmt_type& pixf) : 
-            m_pixf(&pixf) 
+        explicit image_accessor_no_clip(const pixfmt_type& pixf) :
+            m_pixf(&pixf)
         {}
 
         void attach(const pixfmt_type& pixf)
@@ -162,8 +162,8 @@ namespace agg
         enum pix_width_e { pix_width = pixfmt_type::pix_width };
 
         image_accessor_clone() {}
-        explicit image_accessor_clone(const pixfmt_type& pixf) : 
-            m_pixf(&pixf) 
+        explicit image_accessor_clone(const pixfmt_type& pixf) :
+            m_pixf(&pixf)
         {}
 
         void attach(const pixfmt_type& pixf)
@@ -174,8 +174,8 @@ namespace agg
     private:
         AGG_INLINE const int8u* pixel() const
         {
-            register int x = m_x;
-            register int y = m_y;
+            int x = m_x;
+            int y = m_y;
             if(x < 0) x = 0;
             if(y < 0) y = 0;
             if(x >= (int)m_pixf->width())  x = m_pixf->width() - 1;
@@ -208,7 +208,7 @@ namespace agg
         {
             ++m_y;
             m_x = m_x0;
-            if(m_pix_ptr && 
+            if(m_pix_ptr &&
                m_y >= 0 && m_y < (int)m_pixf->height())
             {
                 return m_pix_ptr = m_pixf->pix_ptr(m_x, m_y);
@@ -238,9 +238,9 @@ namespace agg
         enum pix_width_e { pix_width = pixfmt_type::pix_width };
 
         image_accessor_wrap() {}
-        explicit image_accessor_wrap(const pixfmt_type& pixf) : 
-            m_pixf(&pixf), 
-            m_wrap_x(pixf.width()), 
+        explicit image_accessor_wrap(const pixfmt_type& pixf) :
+            m_pixf(&pixf),
+            m_wrap_x(pixf.width()),
             m_wrap_y(pixf.height())
         {}
 
@@ -284,15 +284,15 @@ namespace agg
     {
     public:
         wrap_mode_repeat() {}
-        wrap_mode_repeat(unsigned size) : 
-            m_size(size), 
+        wrap_mode_repeat(unsigned size) :
+            m_size(size),
             m_add(size * (0x3FFFFFFF / size)),
             m_value(0)
         {}
 
         AGG_INLINE unsigned operator() (int v)
-        { 
-            return m_value = (unsigned(v) + m_add) % m_size; 
+        {
+            return m_value = (unsigned(v) + m_add) % m_size;
         }
 
         AGG_INLINE unsigned operator++ ()
@@ -320,7 +320,7 @@ namespace agg
             m_mask >>= 1;
         }
         AGG_INLINE unsigned operator() (int v)
-        { 
+        {
             return m_value = unsigned(v) & m_mask;
         }
         AGG_INLINE unsigned operator++ ()
@@ -347,8 +347,8 @@ namespace agg
             m_value(0)
         {}
 
-        AGG_INLINE unsigned operator() (int v) 
-        { 
+        AGG_INLINE unsigned operator() (int v)
+        {
             if(m_mask) return m_value = unsigned(v) & m_mask;
             return m_value = (unsigned(v) + m_add) % m_size;
         }
@@ -372,15 +372,15 @@ namespace agg
     {
     public:
         wrap_mode_reflect() {}
-        wrap_mode_reflect(unsigned size) : 
-            m_size(size), 
+        wrap_mode_reflect(unsigned size) :
+            m_size(size),
             m_size2(size * 2),
             m_add(m_size2 * (0x3FFFFFFF / m_size2)),
             m_value(0)
         {}
 
         AGG_INLINE unsigned operator() (int v)
-        { 
+        {
             m_value = (unsigned(v) + m_add) % m_size2;
             if(m_value >= m_size) return m_size2 - m_value - 1;
             return m_value;
@@ -411,14 +411,14 @@ namespace agg
         {
             m_mask = 1;
             m_size = 1;
-            while(m_mask < size) 
+            while(m_mask < size)
             {
                 m_mask = (m_mask << 1) | 1;
                 m_size <<= 1;
             }
         }
         AGG_INLINE unsigned operator() (int v)
-        { 
+        {
             m_value = unsigned(v) & m_mask;
             if(m_value >= m_size) return m_mask - m_value;
             return m_value;
@@ -451,12 +451,12 @@ namespace agg
             m_value(0)
         {}
 
-        AGG_INLINE unsigned operator() (int v) 
-        { 
-            m_value = m_mask ? unsigned(v) & m_mask : 
+        AGG_INLINE unsigned operator() (int v)
+        {
+            m_value = m_mask ? unsigned(v) & m_mask :
                               (unsigned(v) + m_add) % m_size2;
             if(m_value >= m_size) return m_size2 - m_value - 1;
-            return m_value;            
+            return m_value;
         }
         AGG_INLINE unsigned operator++ ()
         {
diff --git a/deps/agg/include/agg_image_filters.h b/deps/agg/include/agg_image_filters.h
index 8e1bc8f..2b84dde 100644
--- a/deps/agg/include/agg_image_filters.h
+++ b/deps/agg/include/agg_image_filters.h
@@ -126,7 +126,7 @@ namespace agg
         static double radius() { return 1.0; }
         static double calc_weight(double x)
         {
-            return 0.5 + 0.5 * cos(pi * x);
+            return 0.5 + 0.5 * std::cos(pi * x);
         }
     };
 
@@ -137,7 +137,7 @@ namespace agg
         static double radius() { return 1.0; }
         static double calc_weight(double x)
         {
-            return 0.54 + 0.46 * cos(pi * x);
+            return 0.54 + 0.46 * std::cos(pi * x);
         }
     };
 
@@ -326,7 +326,7 @@ namespace agg
         {
             if(x == 0.0) return 1.0;
             x *= pi;
-            return sin(x) / x;
+            return std::sin(x) / x;
         }
     private:
         double m_radius;
@@ -345,7 +345,7 @@ namespace agg
            if(x > m_radius) return 0.0;
            x *= pi;
            double xr = x / m_radius;
-           return (sin(x) / x) * (sin(xr) / xr);
+           return (std::sin(x) / x) * (std::sin(xr) / xr);
         }
     private:
         double m_radius;
@@ -364,7 +364,7 @@ namespace agg
            if(x > m_radius) return 0.0;
            x *= pi;
            double xr = x / m_radius;
-           return (sin(x) / x) * (0.42 + 0.5*cos(xr) + 0.08*cos(2*xr));
+           return (std::sin(x) / x) * (0.42 + 0.5 * std::cos(xr) + 0.08 * std::cos(2*xr));
         }
     private:
         double m_radius;
diff --git a/deps/agg/include/agg_line_aa_basics.h b/deps/agg/include/agg_line_aa_basics.h
index b8164ce..6726b9d 100644
--- a/deps/agg/include/agg_line_aa_basics.h
+++ b/deps/agg/include/agg_line_aa_basics.h
@@ -84,8 +84,8 @@ namespace agg
         line_parameters() {}
         line_parameters(int x1_, int y1_, int x2_, int y2_, int len_) :
             x1(x1_), y1(y1_), x2(x2_), y2(y2_), 
-            dx(abs(x2_ - x1_)),
-            dy(abs(y2_ - y1_)),
+            dx(std::abs(x2_ - x1_)),
+            dy(std::abs(y2_ - y1_)),
             sx((x2_ > x1_) ? 1 : -1),
             sy((y2_ > y1_) ? 1 : -1),
             vertical(dy >= dx),
@@ -124,14 +124,14 @@ namespace agg
             lp1.x2  = xmid;
             lp1.y2  = ymid;
             lp1.len = len2;
-            lp1.dx  = abs(lp1.x2 - lp1.x1);
-            lp1.dy  = abs(lp1.y2 - lp1.y1);
+            lp1.dx  = std::abs(lp1.x2 - lp1.x1);
+            lp1.dy  = std::abs(lp1.y2 - lp1.y1);
 
             lp2.x1  = xmid;
             lp2.y1  = ymid;
             lp2.len = len2;
-            lp2.dx  = abs(lp2.x2 - lp2.x1);
-            lp2.dy  = abs(lp2.y2 - lp2.y1);
+            lp2.dx  = std::abs(lp2.x2 - lp2.x1);
+            lp2.dy  = std::abs(lp2.y2 - lp2.y1);
         }
         
         //---------------------------------------------------------------------
diff --git a/deps/agg/include/agg_math.h b/deps/agg/include/agg_math.h
index 2de178b..cc34d23 100644
--- a/deps/agg/include/agg_math.h
+++ b/deps/agg/include/agg_math.h
@@ -27,7 +27,7 @@ namespace agg
 
     //------------------------------------------------------vertex_dist_epsilon
     // Coinciding points maximal distance (Epsilon)
-    const double vertex_dist_epsilon = 1e-14;
+    const double vertex_dist_epsilon = 1e-5;
 
     //-----------------------------------------------------intersection_epsilon
     // See calc_intersection
@@ -139,7 +139,7 @@ namespace agg
     {
         double num = (ay-cy) * (dx-cx) - (ax-cx) * (dy-cy);
         double den = (bx-ax) * (dy-cy) - (by-ay) * (dx-cx);
-        if(fabs(den) < intersection_epsilon) return false;
+        if(std::fabs(den) < intersection_epsilon) return false;
         double r = num / den;
         *x = ax + r * (bx-ax);
         *y = ay + r * (by-ay);
@@ -165,7 +165,7 @@ namespace agg
         // in terms of boundary conditions.
         //--------------------
         //double den  = (x2-x1) * (y4-y3) - (y2-y1) * (x4-x3);
-        //if(fabs(den) < intersection_epsilon) return false;
+        //if(std::fabs(den) < intersection_epsilon) return false;
         //double nom1 = (x4-x3) * (y1-y3) - (y4-y3) * (x1-x3);
         //double nom2 = (x2-x1) * (y1-y3) - (y2-y1) * (x1-x3);
         //double ua = nom1 / den;
@@ -200,7 +200,7 @@ namespace agg
         double dx3=0.0;
         double dy3=0.0; 
         double loc = cross_product(x1, y1, x2, y2, x3, y3);
-        if(fabs(loc) > intersection_epsilon)
+        if(std::fabs(loc) > intersection_epsilon)
         {
             if(cross_product(x1, y1, x2, y2, x3, y3) > 0.0) 
             {
@@ -370,7 +370,7 @@ namespace agg
         }
         double d = 1E-6;
         double b = 0;
-        if(fabs(x) <= d) 
+        if(std::fabs(x) <= d) 
         {
             if(n != 0) return 0;
             return 1;
@@ -378,11 +378,11 @@ namespace agg
         double b1 = 0; // b1 is the value from the previous iteration
         // Set up a starting order for recurrence
         int m1 = (int)fabs(x) + 6;
-        if(fabs(x) > 5) 
+        if(std::fabs(x) > 5) 
         {
-            m1 = (int)(fabs(1.4 * x + 60 / x));
+            m1 = (int)(std::fabs(1.4 * x + 60 / x));
         }
-        int m2 = (int)(n + 2 + fabs(x) / 4);
+        int m2 = (int)(n + 2 + std::fabs(x) / 4);
         if (m1 > m2) 
         {
             m2 = m1;
@@ -422,7 +422,7 @@ namespace agg
             }
             c4 += c6;
             b /= c4;
-            if(fabs(b - b1) < d)
+            if(std::fabs(b - b1) < d)
             {
                 return b;
             }
diff --git a/deps/agg/include/agg_math_stroke.h b/deps/agg/include/agg_math_stroke.h
index 4806dcd..2974960 100644
--- a/deps/agg/include/agg_math_stroke.h
+++ b/deps/agg/include/agg_math_stroke.h
@@ -160,7 +160,7 @@ namespace agg
     //-----------------------------------------------------------------------
     template<class VC> void math_stroke<VC>::miter_limit_theta(double t)
     { 
-        m_miter_limit = 1.0 / sin(t * 0.5) ;
+        m_miter_limit = 1.0 / std::sin(t * 0.5) ;
     }
 
     //-----------------------------------------------------------------------
@@ -170,12 +170,12 @@ namespace agg
                                    double dx1, double dy1, 
                                    double dx2, double dy2)
     {
-        double a1 = atan2(dy1 * m_width_sign, dx1 * m_width_sign);
-        double a2 = atan2(dy2 * m_width_sign, dx2 * m_width_sign);
+        double a1 = std::atan2(dy1 * m_width_sign, dx1 * m_width_sign);
+        double a2 = std::atan2(dy2 * m_width_sign, dx2 * m_width_sign);
         double da = a1 - a2;
         int i, n;
 
-        da = acos(m_width_abs / (m_width_abs + 0.125 / m_approx_scale)) * 2;
+        da = std::acos(m_width_abs / (m_width_abs + 0.125 / m_approx_scale)) * 2;
 
         add_vertex(vc, x + dx1, y + dy1);
         if(m_width_sign > 0)
@@ -186,7 +186,7 @@ namespace agg
             a1 += da;
             for(i = 0; i < n; i++)
             {
-                add_vertex(vc, x + cos(a1) * m_width, y + sin(a1) * m_width);
+                add_vertex(vc, x + std::cos(a1) * m_width, y + std::sin(a1) * m_width);
                 a1 += da;
             }
         }
@@ -198,7 +198,7 @@ namespace agg
             a1 -= da;
             for(i = 0; i < n; i++)
             {
-                add_vertex(vc, x + cos(a1) * m_width, y + sin(a1) * m_width);
+                add_vertex(vc, x + std::cos(a1) * m_width, y + std::sin(a1) * m_width);
                 a1 -= da;
             }
         }
@@ -341,7 +341,7 @@ namespace agg
         }
         else
         {
-            double da = acos(m_width_abs / (m_width_abs + 0.125 / m_approx_scale)) * 2;
+            double da = std::acos(m_width_abs / (m_width_abs + 0.125 / m_approx_scale)) * 2;
             double a1;
             int i;
             int n = int(pi / da);
@@ -350,23 +350,23 @@ namespace agg
             add_vertex(vc, v0.x - dx1, v0.y + dy1);
             if(m_width_sign > 0)
             {
-                a1 = atan2(dy1, -dx1);
+                a1 = std::atan2(dy1, -dx1);
                 a1 += da;
                 for(i = 0; i < n; i++)
                 {
-                    add_vertex(vc, v0.x + cos(a1) * m_width, 
-                                   v0.y + sin(a1) * m_width);
+                    add_vertex(vc, v0.x + std::cos(a1) * m_width, 
+                                   v0.y + std::sin(a1) * m_width);
                     a1 += da;
                 }
             }
             else
             {
-                a1 = atan2(-dy1, dx1);
+                a1 = std::atan2(-dy1, dx1);
                 a1 -= da;
                 for(i = 0; i < n; i++)
                 {
-                    add_vertex(vc, v0.x + cos(a1) * m_width, 
-                                   v0.y + sin(a1) * m_width);
+                    add_vertex(vc, v0.x + std::cos(a1) * m_width, 
+                                   v0.y + std::sin(a1) * m_width);
                     a1 -= da;
                 }
             }
diff --git a/deps/agg/include/agg_path_storage.h b/deps/agg/include/agg_path_storage.h
index 74a3a0a..3be5aa8 100644
--- a/deps/agg/include/agg_path_storage.h
+++ b/deps/agg/include/agg_path_storage.h
@@ -956,8 +956,8 @@ namespace agg
             double y0 = 0.0;
             m_vertices.last_vertex(&x0, &y0);
 
-            rx = fabs(rx);
-            ry = fabs(ry);
+            rx = std::fabs(rx);
+            ry = std::fabs(ry);
 
             // Ensure radii are valid
             //-------------------------
diff --git a/deps/agg/include/agg_pixfmt_rgba.h b/deps/agg/include/agg_pixfmt_rgba.h
index a859982..40ddf6a 100644
--- a/deps/agg/include/agg_pixfmt_rgba.h
+++ b/deps/agg/include/agg_pixfmt_rgba.h
@@ -1,4 +1,3 @@
-
 //----------------------------------------------------------------------------
 // Anti-Grain Geometry - Version 2.4
 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
@@ -34,186 +33,189 @@
 namespace agg
 {
 
-    //=========================================================multiplier_rgba
-    template<class ColorT, class Order> struct multiplier_rgba
-    {
-        typedef typename ColorT::value_type value_type;
-        typedef typename ColorT::calc_type calc_type;
+//=========================================================multiplier_rgba
+template<class ColorT, class Order> struct multiplier_rgba
+{
+    typedef typename ColorT::value_type value_type;
+    typedef typename ColorT::calc_type calc_type;
 
-        //--------------------------------------------------------------------
-        static AGG_INLINE void premultiply(value_type* p)
+    //--------------------------------------------------------------------
+    static AGG_INLINE void premultiply(value_type* p)
+    {
+        calc_type a = p[Order::A];
+        if(a < ColorT::base_mask)
         {
-            calc_type a = p[Order::A];
-            if(a < ColorT::base_mask)
+            if(a == 0)
             {
-                if(a == 0)
-                {
-                    p[Order::R] = p[Order::G] = p[Order::B] = 0;
-                    return;
-                }
-                p[Order::R] = value_type((p[Order::R] * a + ColorT::base_mask) >> ColorT::base_shift);
-                p[Order::G] = value_type((p[Order::G] * a + ColorT::base_mask) >> ColorT::base_shift);
-                p[Order::B] = value_type((p[Order::B] * a + ColorT::base_mask) >> ColorT::base_shift);
+                p[Order::R] = p[Order::G] = p[Order::B] = 0;
+                return;
             }
+            p[Order::R] = value_type((p[Order::R] * a + ColorT::base_mask) >> ColorT::base_shift);
+            p[Order::G] = value_type((p[Order::G] * a + ColorT::base_mask) >> ColorT::base_shift);
+            p[Order::B] = value_type((p[Order::B] * a + ColorT::base_mask) >> ColorT::base_shift);
         }
+    }
 
 
-        //--------------------------------------------------------------------
-        static AGG_INLINE void demultiply(value_type* p)
+    //--------------------------------------------------------------------
+    static AGG_INLINE void demultiply(value_type* p)
+    {
+        calc_type a = p[Order::A];
+        if(a < ColorT::base_mask)
         {
-            calc_type a = p[Order::A];
-            if(a < ColorT::base_mask)
+            if(a == 0)
             {
-                if(a == 0)
-                {
-                    p[Order::R] = p[Order::G] = p[Order::B] = 0;
-                    return;
-                }
-                calc_type r = (calc_type(p[Order::R]) * ColorT::base_mask) / a;
-                calc_type g = (calc_type(p[Order::G]) * ColorT::base_mask) / a;
-                calc_type b = (calc_type(p[Order::B]) * ColorT::base_mask) / a;
-                p[Order::R] = value_type((r > ColorT::base_mask) ? ColorT::base_mask : r);
-                p[Order::G] = value_type((g > ColorT::base_mask) ? ColorT::base_mask : g);
-                p[Order::B] = value_type((b > ColorT::base_mask) ? ColorT::base_mask : b);
+                p[Order::R] = p[Order::G] = p[Order::B] = 0;
+                return;
             }
+            calc_type r = (calc_type(p[Order::R]) * ColorT::base_mask) / a;
+            calc_type g = (calc_type(p[Order::G]) * ColorT::base_mask) / a;
+            calc_type b = (calc_type(p[Order::B]) * ColorT::base_mask) / a;
+            p[Order::R] = value_type((r > ColorT::base_mask) ? ColorT::base_mask : r);
+            p[Order::G] = value_type((g > ColorT::base_mask) ? ColorT::base_mask : g);
+            p[Order::B] = value_type((b > ColorT::base_mask) ? ColorT::base_mask : b);
         }
-    };
+    }
+};
+
+//=====================================================apply_gamma_dir_rgba
+template<class ColorT, class Order, class GammaLut> class apply_gamma_dir_rgba
+{
+public:
+    typedef typename ColorT::value_type value_type;
 
-    //=====================================================apply_gamma_dir_rgba
-    template<class ColorT, class Order, class GammaLut> class apply_gamma_dir_rgba
+    apply_gamma_dir_rgba(const GammaLut& gamma) : m_gamma(gamma) {}
+
+    AGG_INLINE void operator () (value_type* p)
     {
-    public:
-        typedef typename ColorT::value_type value_type;
+        p[Order::R] = m_gamma.dir(p[Order::R]);
+        p[Order::G] = m_gamma.dir(p[Order::G]);
+        p[Order::B] = m_gamma.dir(p[Order::B]);
+    }
 
-        apply_gamma_dir_rgba(const GammaLut& gamma) : m_gamma(gamma) {}
+private:
+    const GammaLut& m_gamma;
+};
 
-        AGG_INLINE void operator () (value_type* p)
-        {
-            p[Order::R] = m_gamma.dir(p[Order::R]);
-            p[Order::G] = m_gamma.dir(p[Order::G]);
-            p[Order::B] = m_gamma.dir(p[Order::B]);
-        }
+//=====================================================apply_gamma_inv_rgba
+template<class ColorT, class Order, class GammaLut> class apply_gamma_inv_rgba
+{
+public:
+    typedef typename ColorT::value_type value_type;
 
-    private:
-        const GammaLut& m_gamma;
-    };
+    apply_gamma_inv_rgba(const GammaLut& gamma) : m_gamma(gamma) {}
 
-    //=====================================================apply_gamma_inv_rgba
-    template<class ColorT, class Order, class GammaLut> class apply_gamma_inv_rgba
+    AGG_INLINE void operator () (value_type* p)
     {
-    public:
-        typedef typename ColorT::value_type value_type;
-
-        apply_gamma_inv_rgba(const GammaLut& gamma) : m_gamma(gamma) {}
+        p[Order::R] = m_gamma.inv(p[Order::R]);
+        p[Order::G] = m_gamma.inv(p[Order::G]);
+        p[Order::B] = m_gamma.inv(p[Order::B]);
+    }
 
-        AGG_INLINE void operator () (value_type* p)
-        {
-            p[Order::R] = m_gamma.inv(p[Order::R]);
-            p[Order::G] = m_gamma.inv(p[Order::G]);
-            p[Order::B] = m_gamma.inv(p[Order::B]);
-        }
+private:
+    const GammaLut& m_gamma;
+};
 
-    private:
-        const GammaLut& m_gamma;
+//=============================================================blender_rgba
+template<class ColorT, class Order> struct blender_rgba
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=============================================================blender_rgba
-    template<class ColorT, class Order> struct blender_rgba
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        //--------------------------------------------------------------------
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned alpha,
-                                         unsigned cover=0)
-        {
-            calc_type r = p[Order::R];
-            calc_type g = p[Order::G];
-            calc_type b = p[Order::B];
-            calc_type a = p[Order::A];
-            p[Order::R] = (value_type)(((cr - r) * alpha + (r << base_shift)) >> base_shift);
-            p[Order::G] = (value_type)(((cg - g) * alpha + (g << base_shift)) >> base_shift);
-            p[Order::B] = (value_type)(((cb - b) * alpha + (b << base_shift)) >> base_shift);
-            p[Order::A] = (value_type)((alpha + a) - ((alpha * a + base_mask) >> base_shift));
-        }
+    //--------------------------------------------------------------------
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned alpha,
+                                     unsigned /*cover*/=0)
+    {
+        calc_type r = p[Order::R];
+        calc_type g = p[Order::G];
+        calc_type b = p[Order::B];
+        calc_type a = p[Order::A];
+        p[Order::R] = (value_type)(((cr - r) * alpha + (r << base_shift)) >> base_shift);
+        p[Order::G] = (value_type)(((cg - g) * alpha + (g << base_shift)) >> base_shift);
+        p[Order::B] = (value_type)(((cb - b) * alpha + (b << base_shift)) >> base_shift);
+        p[Order::A] = (value_type)((alpha + a) - ((alpha * a + base_mask) >> base_shift));
+    }
+};
+
+//=========================================================blender_rgba_pre
+template<class ColorT, class Order> struct blender_rgba_pre
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=========================================================blender_rgba_pre
-    template<class ColorT, class Order> struct blender_rgba_pre
+    //--------------------------------------------------------------------
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned alpha,
+                                     unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        alpha = color_type::base_mask - alpha;
+        cover = (cover + 1) << (base_shift - 8);
+        p[Order::R] = (value_type)((p[Order::R] * alpha + cr * cover) >> base_shift);
+        p[Order::G] = (value_type)((p[Order::G] * alpha + cg * cover) >> base_shift);
+        p[Order::B] = (value_type)((p[Order::B] * alpha + cb * cover) >> base_shift);
+        p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift));
+    }
+
+    //--------------------------------------------------------------------
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned alpha)
+    {
+        alpha = color_type::base_mask - alpha;
+        p[Order::R] = (value_type)(((p[Order::R] * alpha) >> base_shift) + cr);
+        p[Order::G] = (value_type)(((p[Order::G] * alpha) >> base_shift) + cg);
+        p[Order::B] = (value_type)(((p[Order::B] * alpha) >> base_shift) + cb);
+        p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift));
+    }
+};
+
+//======================================================blender_rgba_plain
+template<class ColorT, class Order> struct blender_rgba_plain
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e { base_shift = color_type::base_shift };
+
+    //--------------------------------------------------------------------
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned alpha,
+                                     unsigned /*cover*/=0)
+    {
+        if(alpha == 0) return;
+        calc_type a = p[Order::A];
+        calc_type r = p[Order::R] * a;
+        calc_type g = p[Order::G] * a;
+        calc_type b = p[Order::B] * a;
+        a = ((alpha + a) << base_shift) - alpha * a;
+        p[Order::A] = (value_type)(a >> base_shift);
+        p[Order::R] = (value_type)((((cr << base_shift) - r) * alpha + (r << base_shift)) / a);
+        p[Order::G] = (value_type)((((cg << base_shift) - g) * alpha + (g << base_shift)) / a);
+        p[Order::B] = (value_type)((((cb << base_shift) - b) * alpha + (b << base_shift)) / a);
+    }
+};
 
-        //--------------------------------------------------------------------
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned alpha,
-                                         unsigned cover)
-        {
-            alpha = color_type::base_mask - alpha;
-            cover = (cover + 1) << (base_shift - 8);
-            p[Order::R] = (value_type)((p[Order::R] * alpha + cr * cover) >> base_shift);
-            p[Order::G] = (value_type)((p[Order::G] * alpha + cg * cover) >> base_shift);
-            p[Order::B] = (value_type)((p[Order::B] * alpha + cb * cover) >> base_shift);
-            p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift));
-        }
 
-        //--------------------------------------------------------------------
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned alpha)
-        {
-            alpha = color_type::base_mask - alpha;
-            p[Order::R] = (value_type)(((p[Order::R] * alpha) >> base_shift) + cr);
-            p[Order::G] = (value_type)(((p[Order::G] * alpha) >> base_shift) + cg);
-            p[Order::B] = (value_type)(((p[Order::B] * alpha) >> base_shift) + cb);
-            p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift));
-        }
-    };
 
-    //======================================================blender_rgba_plain
-    template<class ColorT, class Order> struct blender_rgba_plain
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e { base_shift = color_type::base_shift };
-
-        //--------------------------------------------------------------------
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned alpha,
-                                         unsigned /*cover*/=0)
-        {
-            if(alpha == 0) return;
-            calc_type a = p[Order::A];
-            calc_type r = p[Order::R] * a;
-            calc_type g = p[Order::G] * a;
-            calc_type b = p[Order::B] * a;
-            a = ((alpha + a) << base_shift) - alpha * a;
-            p[Order::A] = (value_type)(a >> base_shift);
-            p[Order::R] = (value_type)((((cr << base_shift) - r) * alpha + (r << base_shift)) / a);
-            p[Order::G] = (value_type)((((cg << base_shift) - g) * alpha + (g << base_shift)) / a);
-            p[Order::B] = (value_type)((((cb << base_shift) - b) * alpha + (b << base_shift)) / a);
-        }
-    };
 
 
 
@@ -222,1721 +224,1810 @@ namespace agg
 
 
 
+//=========================================================comp_op_rgba_clear
+template<class ColorT, class Order> struct comp_op_rgba_clear
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned, unsigned, unsigned, unsigned,
+                                     unsigned cover)
+    {
+        if(cover < 255)
+        {
+            cover = 255 - cover;
+            p[Order::R] = (value_type)((p[Order::R] * cover + 255) >> 8);
+            p[Order::G] = (value_type)((p[Order::G] * cover + 255) >> 8);
+            p[Order::B] = (value_type)((p[Order::B] * cover + 255) >> 8);
+            p[Order::A] = (value_type)((p[Order::A] * cover + 255) >> 8);
+        }
+        else
+        {
+            p[0] = p[1] = p[2] = p[3] = 0;
+        }
+    }
+};
 
+//===========================================================comp_op_rgba_src
+template<class ColorT, class Order> struct comp_op_rgba_src
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
 
-    //=========================================================comp_op_rgba_clear
-    template<class ColorT, class Order> struct comp_op_rgba_clear
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned, unsigned, unsigned, unsigned,
-                                         unsigned cover)
+            unsigned alpha = 255 - cover;
+            p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((sr * cover + 255) >> 8));
+            p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((sg * cover + 255) >> 8));
+            p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((sb * cover + 255) >> 8));
+            p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((sa * cover + 255) >> 8));
+        }
+        else
         {
-            if(cover < 255)
-            {
-                cover = 255 - cover;
-                p[Order::R] = (value_type)((p[Order::R] * cover + 255) >> 8);
-                p[Order::G] = (value_type)((p[Order::G] * cover + 255) >> 8);
-                p[Order::B] = (value_type)((p[Order::B] * cover + 255) >> 8);
-                p[Order::A] = (value_type)((p[Order::A] * cover + 255) >> 8);
-            }
-            else
-            {
-                p[0] = p[1] = p[2] = p[3] = 0;
-            }
+            p[Order::R] = sr;
+            p[Order::G] = sg;
+            p[Order::B] = sb;
+            p[Order::A] = sa;
         }
-    };
+    }
+};
+
+//===========================================================comp_op_rgba_dst
+template<class ColorT, class Order> struct comp_op_rgba_dst
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
 
-    //===========================================================comp_op_rgba_src
-    template<class ColorT, class Order> struct comp_op_rgba_src
+    static AGG_INLINE void blend_pix(value_type*,
+                                     unsigned, unsigned, unsigned,
+                                     unsigned, unsigned)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
+    }
+};
 
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
-        {
-            if(cover < 255)
-            {
-                unsigned alpha = 255 - cover;
-                p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((sr * cover + 255) >> 8));
-                p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((sg * cover + 255) >> 8));
-                p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((sb * cover + 255) >> 8));
-                p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((sa * cover + 255) >> 8));
-            }
-            else
-            {
-                p[Order::R] = sr;
-                p[Order::G] = sg;
-                p[Order::B] = sb;
-                p[Order::A] = sa;
-            }
-        }
+//======================================================comp_op_rgba_src_over
+template<class ColorT, class Order> struct comp_op_rgba_src_over
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //===========================================================comp_op_rgba_dst
-    template<class ColorT, class Order> struct comp_op_rgba_dst
+    //   Dca' = Sca + Dca.(1 - Sa)
+    //   Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-
-        static AGG_INLINE void blend_pix(value_type*,
-                                         unsigned, unsigned, unsigned,
-                                         unsigned, unsigned)
+        if(cover < 255)
         {
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
-    };
+        calc_type s1a = base_mask - sa;
+        p[Order::R] = (value_type)(sr + ((p[Order::R] * s1a + base_mask) >> base_shift));
+        p[Order::G] = (value_type)(sg + ((p[Order::G] * s1a + base_mask) >> base_shift));
+        p[Order::B] = (value_type)(sb + ((p[Order::B] * s1a + base_mask) >> base_shift));
+        p[Order::A] = (value_type)(sa + ((p[Order::A] * s1a + base_mask) >> base_shift));
+    }
+};
 
-    //======================================================comp_op_rgba_src_over
-    template<class ColorT, class Order> struct comp_op_rgba_src_over
+//======================================================comp_op_rgba_dst_over
+template<class ColorT, class Order> struct comp_op_rgba_dst_over
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        //   Dca' = Sca + Dca.(1 - Sa)
-        //   Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+    // Dca' = Dca + Sca.(1 - Da)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            calc_type s1a = base_mask - sa;
-            p[Order::R] = (value_type)(sr + ((p[Order::R] * s1a + base_mask) >> base_shift));
-            p[Order::G] = (value_type)(sg + ((p[Order::G] * s1a + base_mask) >> base_shift));
-            p[Order::B] = (value_type)(sb + ((p[Order::B] * s1a + base_mask) >> base_shift));
-            p[Order::A] = (value_type)(sa + ((p[Order::A] * s1a + base_mask) >> base_shift));
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
+        calc_type d1a = base_mask - p[Order::A];
+        p[Order::R] = (value_type)(p[Order::R] + ((sr * d1a + base_mask) >> base_shift));
+        p[Order::G] = (value_type)(p[Order::G] + ((sg * d1a + base_mask) >> base_shift));
+        p[Order::B] = (value_type)(p[Order::B] + ((sb * d1a + base_mask) >> base_shift));
+        p[Order::A] = (value_type)(p[Order::A] + ((sa * d1a + base_mask) >> base_shift));
+    }
+};
+
+//======================================================comp_op_rgba_src_in
+template<class ColorT, class Order> struct comp_op_rgba_src_in
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //======================================================comp_op_rgba_dst_over
-    template<class ColorT, class Order> struct comp_op_rgba_dst_over
+    // Dca' = Sca.Da
+    // Da'  = Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        calc_type da = p[Order::A];
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Dca + Sca.(1 - Da)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            unsigned alpha = 255 - cover;
+            p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((((sr * da + base_mask) >> base_shift) * cover + 255) >> 8));
+            p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((((sg * da + base_mask) >> base_shift) * cover + 255) >> 8));
+            p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((((sb * da + base_mask) >> base_shift) * cover + 255) >> 8));
+            p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((((sa * da + base_mask) >> base_shift) * cover + 255) >> 8));
+        }
+        else
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            calc_type d1a = base_mask - p[Order::A];
-            p[Order::R] = (value_type)(p[Order::R] + ((sr * d1a + base_mask) >> base_shift));
-            p[Order::G] = (value_type)(p[Order::G] + ((sg * d1a + base_mask) >> base_shift));
-            p[Order::B] = (value_type)(p[Order::B] + ((sb * d1a + base_mask) >> base_shift));
-            p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
+            p[Order::R] = (value_type)((sr * da + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((sg * da + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((sb * da + base_mask) >> base_shift);
+            p[Order::A] = (value_type)((sa * da + base_mask) >> base_shift);
         }
-    };
+    }
+};
 
-    //======================================================comp_op_rgba_src_in
-    template<class ColorT, class Order> struct comp_op_rgba_src_in
+//======================================================comp_op_rgba_dst_in
+template<class ColorT, class Order> struct comp_op_rgba_dst_in
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        // Dca' = Sca.Da
-        // Da'  = Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+    // Dca' = Dca.Sa
+    // Da'  = Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned, unsigned, unsigned,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
         {
-            calc_type da = p[Order::A];
-            if(cover < 255)
-            {
-                unsigned alpha = 255 - cover;
-                p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((((sr * da + base_mask) >> base_shift) * cover + 255) >> 8));
-                p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((((sg * da + base_mask) >> base_shift) * cover + 255) >> 8));
-                p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((((sb * da + base_mask) >> base_shift) * cover + 255) >> 8));
-                p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((((sa * da + base_mask) >> base_shift) * cover + 255) >> 8));
-            }
-            else
-            {
-                p[Order::R] = (value_type)((sr * da + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((sg * da + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((sb * da + base_mask) >> base_shift);
-                p[Order::A] = (value_type)((sa * da + base_mask) >> base_shift);
-            }
+            sa = base_mask - ((cover * (base_mask - sa) + 255) >> 8);
         }
+        p[Order::R] = (value_type)((p[Order::R] * sa + base_mask) >> base_shift);
+        p[Order::G] = (value_type)((p[Order::G] * sa + base_mask) >> base_shift);
+        p[Order::B] = (value_type)((p[Order::B] * sa + base_mask) >> base_shift);
+        p[Order::A] = (value_type)((p[Order::A] * sa + base_mask) >> base_shift);
+    }
+};
+
+//======================================================comp_op_rgba_src_out
+template<class ColorT, class Order> struct comp_op_rgba_src_out
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //======================================================comp_op_rgba_dst_in
-    template<class ColorT, class Order> struct comp_op_rgba_dst_in
+    // Dca' = Sca.(1 - Da)
+    // Da'  = Sa.(1 - Da)
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        calc_type da = base_mask - p[Order::A];
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Dca.Sa
-        // Da'  = Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned, unsigned, unsigned,
-                                         unsigned sa, unsigned cover)
+            unsigned alpha = 255 - cover;
+            p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((((sr * da + base_mask) >> base_shift) * cover + 255) >> 8));
+            p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((((sg * da + base_mask) >> base_shift) * cover + 255) >> 8));
+            p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((((sb * da + base_mask) >> base_shift) * cover + 255) >> 8));
+            p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((((sa * da + base_mask) >> base_shift) * cover + 255) >> 8));
+        }
+        else
         {
-            if(cover < 255)
-            {
-                sa = base_mask - ((cover * (base_mask - sa) + 255) >> 8);
-            }
-            p[Order::R] = (value_type)((p[Order::R] * sa + base_mask) >> base_shift);
-            p[Order::G] = (value_type)((p[Order::G] * sa + base_mask) >> base_shift);
-            p[Order::B] = (value_type)((p[Order::B] * sa + base_mask) >> base_shift);
-            p[Order::A] = (value_type)((p[Order::A] * sa + base_mask) >> base_shift);
+            p[Order::R] = (value_type)((sr * da + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((sg * da + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((sb * da + base_mask) >> base_shift);
+            p[Order::A] = (value_type)((sa * da + base_mask) >> base_shift);
         }
+    }
+};
+
+//======================================================comp_op_rgba_dst_out
+template<class ColorT, class Order> struct comp_op_rgba_dst_out
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //======================================================comp_op_rgba_src_out
-    template<class ColorT, class Order> struct comp_op_rgba_src_out
+    // Dca' = Dca.(1 - Sa)
+    // Da'  = Da.(1 - Sa)
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned, unsigned, unsigned,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+            sa = (sa * cover + 255) >> 8;
+        }
+        sa = base_mask - sa;
+        p[Order::R] = (value_type)((p[Order::R] * sa + base_shift) >> base_shift);
+        p[Order::G] = (value_type)((p[Order::G] * sa + base_shift) >> base_shift);
+        p[Order::B] = (value_type)((p[Order::B] * sa + base_shift) >> base_shift);
+        p[Order::A] = (value_type)((p[Order::A] * sa + base_shift) >> base_shift);
+    }
+};
+
+//=====================================================comp_op_rgba_src_atop
+template<class ColorT, class Order> struct comp_op_rgba_src_atop
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        // Dca' = Sca.(1 - Da)
-        // Da'  = Sa.(1 - Da)
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+    // Dca' = Sca.Da + Dca.(1 - Sa)
+    // Da'  = Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
         {
-            calc_type da = base_mask - p[Order::A];
-            if(cover < 255)
-            {
-                unsigned alpha = 255 - cover;
-                p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((((sr * da + base_mask) >> base_shift) * cover + 255) >> 8));
-                p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((((sg * da + base_mask) >> base_shift) * cover + 255) >> 8));
-                p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((((sb * da + base_mask) >> base_shift) * cover + 255) >> 8));
-                p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((((sa * da + base_mask) >> base_shift) * cover + 255) >> 8));
-            }
-            else
-            {
-                p[Order::R] = (value_type)((sr * da + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((sg * da + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((sb * da + base_mask) >> base_shift);
-                p[Order::A] = (value_type)((sa * da + base_mask) >> base_shift);
-            }
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
+        calc_type da = p[Order::A];
+        sa = base_mask - sa;
+        p[Order::R] = (value_type)((sr * da + p[Order::R] * sa + base_mask) >> base_shift);
+        p[Order::G] = (value_type)((sg * da + p[Order::G] * sa + base_mask) >> base_shift);
+        p[Order::B] = (value_type)((sb * da + p[Order::B] * sa + base_mask) >> base_shift);
+    }
+};
+
+//=====================================================comp_op_rgba_dst_atop
+template<class ColorT, class Order> struct comp_op_rgba_dst_atop
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //======================================================comp_op_rgba_dst_out
-    template<class ColorT, class Order> struct comp_op_rgba_dst_out
+    // Dca' = Dca.Sa + Sca.(1 - Da)
+    // Da'  = Sa
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        calc_type da = base_mask - p[Order::A];
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+            unsigned alpha = 255 - cover;
+            sr = (p[Order::R] * sa + sr * da + base_mask) >> base_shift;
+            sg = (p[Order::G] * sa + sg * da + base_mask) >> base_shift;
+            sb = (p[Order::B] * sa + sb * da + base_mask) >> base_shift;
+            p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((sr * cover + 255) >> 8));
+            p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((sg * cover + 255) >> 8));
+            p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((sb * cover + 255) >> 8));
+            p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((sa * cover + 255) >> 8));
 
-        // Dca' = Dca.(1 - Sa)
-        // Da'  = Da.(1 - Sa)
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned, unsigned, unsigned,
-                                         unsigned sa, unsigned cover)
+        }
+        else
         {
-            if(cover < 255)
-            {
-                sa = (sa * cover + 255) >> 8;
-            }
-            sa = base_mask - sa;
-            p[Order::R] = (value_type)((p[Order::R] * sa + base_shift) >> base_shift);
-            p[Order::G] = (value_type)((p[Order::G] * sa + base_shift) >> base_shift);
-            p[Order::B] = (value_type)((p[Order::B] * sa + base_shift) >> base_shift);
-            p[Order::A] = (value_type)((p[Order::A] * sa + base_shift) >> base_shift);
+            p[Order::R] = (value_type)((p[Order::R] * sa + sr * da + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((p[Order::G] * sa + sg * da + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((p[Order::B] * sa + sb * da + base_mask) >> base_shift);
+            p[Order::A] = (value_type)sa;
         }
+    }
+};
+
+//=========================================================comp_op_rgba_xor
+template<class ColorT, class Order> struct comp_op_rgba_xor
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_src_atop
-    template<class ColorT, class Order> struct comp_op_rgba_src_atop
+    // Dca' = Sca.(1 - Da) + Dca.(1 - Sa)
+    // Da'  = Sa + Da - 2.Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Sca.Da + Dca.(1 - Sa)
-        // Da'  = Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            calc_type da = p[Order::A];
-            sa = base_mask - sa;
-            p[Order::R] = (value_type)((sr * da + p[Order::R] * sa + base_mask) >> base_shift);
-            p[Order::G] = (value_type)((sg * da + p[Order::G] * sa + base_mask) >> base_shift);
-            p[Order::B] = (value_type)((sb * da + p[Order::B] * sa + base_mask) >> base_shift);
+            calc_type s1a = base_mask - sa;
+            calc_type d1a = base_mask - p[Order::A];
+            p[Order::R] = (value_type)((p[Order::R] * s1a + sr * d1a + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((p[Order::G] * s1a + sg * d1a + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((p[Order::B] * s1a + sb * d1a + base_mask) >> base_shift);
+            p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask/2) >> (base_shift - 1)));
         }
+    }
+};
+
+//=========================================================comp_op_rgba_plus
+template<class ColorT, class Order> struct comp_op_rgba_plus
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_dst_atop
-    template<class ColorT, class Order> struct comp_op_rgba_dst_atop
+    // Dca' = Sca + Dca
+    // Da'  = Sa + Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Dca.Sa + Sca.(1 - Da)
-        // Da'  = Sa
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            calc_type da = base_mask - p[Order::A];
-            if(cover < 255)
-            {
-                unsigned alpha = 255 - cover;
-                sr = (p[Order::R] * sa + sr * da + base_mask) >> base_shift;
-                sg = (p[Order::G] * sa + sg * da + base_mask) >> base_shift;
-                sb = (p[Order::B] * sa + sb * da + base_mask) >> base_shift;
-                p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((sr * cover + 255) >> 8));
-                p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((sg * cover + 255) >> 8));
-                p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((sb * cover + 255) >> 8));
-                p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((sa * cover + 255) >> 8));
-
-            }
-            else
-            {
-                p[Order::R] = (value_type)((p[Order::R] * sa + sr * da + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((p[Order::G] * sa + sg * da + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((p[Order::B] * sa + sb * da + base_mask) >> base_shift);
-                p[Order::A] = (value_type)sa;
-            }
+            calc_type dr = p[Order::R] + sr;
+            calc_type dg = p[Order::G] + sg;
+            calc_type db = p[Order::B] + sb;
+            calc_type da = p[Order::A] + sa;
+            p[Order::R] = (dr > base_mask) ? (value_type)base_mask : dr;
+            p[Order::G] = (dg > base_mask) ? (value_type)base_mask : dg;
+            p[Order::B] = (db > base_mask) ? (value_type)base_mask : db;
+            p[Order::A] = (da > base_mask) ? (value_type)base_mask : da;
         }
+    }
+};
+
+//========================================================comp_op_rgba_minus
+template<class ColorT, class Order> struct comp_op_rgba_minus
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=========================================================comp_op_rgba_xor
-    template<class ColorT, class Order> struct comp_op_rgba_xor
+    // Dca' = Dca - Sca
+    // Da' = 1 - (1 - Sa).(1 - Da)
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Sca.(1 - Da) + Dca.(1 - Sa)
-        // Da'  = Sa + Da - 2.Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type s1a = base_mask - sa;
-                calc_type d1a = base_mask - p[Order::A];
-                p[Order::R] = (value_type)((p[Order::R] * s1a + sr * d1a + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((p[Order::G] * s1a + sg * d1a + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((p[Order::B] * s1a + sb * d1a + base_mask) >> base_shift);
-                p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask/2) >> (base_shift - 1)));
-            }
+            calc_type dr = (sr > p[Order::R]) ? 0 : p[Order::R] - sr;
+            calc_type dg = (sg > p[Order::G]) ? 0 : p[Order::G] - sg;
+            calc_type db = (sb > p[Order::B]) ? 0 : p[Order::B] - sb;
+            p[Order::R] = (dr > base_mask) ? 0 : dr;
+            p[Order::G] = (dg > base_mask) ? 0 : dg;
+            p[Order::B] = (db > base_mask) ? 0 : db;
+            p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
+            //p[Order::A] = (value_type)(base_mask - (((base_mask - sa) * (base_mask - p[Order::A]) + base_mask) >> base_shift));
         }
+    }
+};
+
+//=====================================================comp_op_rgba_multiply
+template<class ColorT, class Order> struct comp_op_rgba_multiply
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=========================================================comp_op_rgba_plus
-    template<class ColorT, class Order> struct comp_op_rgba_plus
+    // Dca' = Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Sca + Dca
-        // Da'  = Sa + Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type dr = p[Order::R] + sr;
-                calc_type dg = p[Order::G] + sg;
-                calc_type db = p[Order::B] + sb;
-                calc_type da = p[Order::A] + sa;
-                p[Order::R] = (dr > base_mask) ? (value_type)base_mask : dr;
-                p[Order::G] = (dg > base_mask) ? (value_type)base_mask : dg;
-                p[Order::B] = (db > base_mask) ? (value_type)base_mask : db;
-                p[Order::A] = (da > base_mask) ? (value_type)base_mask : da;
-            }
+            calc_type s1a = base_mask - sa;
+            calc_type d1a = base_mask - p[Order::A];
+            calc_type dr = p[Order::R];
+            calc_type dg = p[Order::G];
+            calc_type db = p[Order::B];
+            p[Order::R] = (value_type)((sr * dr + sr * d1a + dr * s1a + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((sg * dg + sg * d1a + dg * s1a + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((sb * db + sb * d1a + db * s1a + base_mask) >> base_shift);
+            p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
         }
+    }
+};
+
+//=====================================================comp_op_rgba_screen
+template<class ColorT, class Order> struct comp_op_rgba_screen
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //========================================================comp_op_rgba_minus
-    template<class ColorT, class Order> struct comp_op_rgba_minus
+    // Dca' = Sca + Dca - Sca.Dca
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Dca - Sca
-        // Da' = 1 - (1 - Sa).(1 - Da)
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type dr = p[Order::R] - sr;
-                calc_type dg = p[Order::G] - sg;
-                calc_type db = p[Order::B] - sb;
-                p[Order::R] = (dr > base_mask) ? 0 : dr;
-                p[Order::G] = (dg > base_mask) ? 0 : dg;
-                p[Order::B] = (db > base_mask) ? 0 : db;
-                p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
-                //p[Order::A] = (value_type)(base_mask - (((base_mask - sa) * (base_mask - p[Order::A]) + base_mask) >> base_shift));
-            }
+            calc_type dr = p[Order::R];
+            calc_type dg = p[Order::G];
+            calc_type db = p[Order::B];
+            calc_type da = p[Order::A];
+            p[Order::R] = (value_type)(sr + dr - ((sr * dr + base_mask) >> base_shift));
+            p[Order::G] = (value_type)(sg + dg - ((sg * dg + base_mask) >> base_shift));
+            p[Order::B] = (value_type)(sb + db - ((sb * db + base_mask) >> base_shift));
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
         }
+    }
+};
+
+//=====================================================comp_op_rgba_overlay
+template<class ColorT, class Order> struct comp_op_rgba_overlay
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_multiply
-    template<class ColorT, class Order> struct comp_op_rgba_multiply
+    // if 2.Dca < Da
+    //   Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)
+    // otherwise
+    //   Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa)
+    //
+    // Da' = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type s1a = base_mask - sa;
-                calc_type d1a = base_mask - p[Order::A];
-                calc_type dr = p[Order::R];
-                calc_type dg = p[Order::G];
-                calc_type db = p[Order::B];
-                p[Order::R] = (value_type)((sr * dr + sr * d1a + dr * s1a + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((sg * dg + sg * d1a + dg * s1a + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((sb * db + sb * d1a + db * s1a + base_mask) >> base_shift);
-                p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
-            }
+            calc_type d1a  = base_mask - p[Order::A];
+            calc_type s1a  = base_mask - sa;
+            calc_type dr   = p[Order::R];
+            calc_type dg   = p[Order::G];
+            calc_type db   = p[Order::B];
+            calc_type da   = p[Order::A];
+            calc_type sada = sa * p[Order::A];
+
+            p[Order::R] = (value_type)(((2*dr < da) ?
+                                        2*sr*dr + sr*d1a + dr*s1a :
+                                        sada - 2*(da - dr)*(sa - sr) + sr*d1a + dr*s1a + base_mask) >> base_shift);
+
+            p[Order::G] = (value_type)(((2*dg < da) ?
+                                        2*sg*dg + sg*d1a + dg*s1a :
+                                        sada - 2*(da - dg)*(sa - sg) + sg*d1a + dg*s1a + base_mask) >> base_shift);
+
+            p[Order::B] = (value_type)(((2*db < da) ?
+                                        2*sb*db + sb*d1a + db*s1a :
+                                        sada - 2*(da - db)*(sa - sb) + sb*d1a + db*s1a + base_mask) >> base_shift);
+
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
         }
+    }
+};
+
+
+template<class T> inline T sd_min(T a, T b) { return (a < b) ? a : b; }
+template<class T> inline T sd_max(T a, T b) { return (a > b) ? a : b; }
+
+//=====================================================comp_op_rgba_darken
+template<class ColorT, class Order> struct comp_op_rgba_darken
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_screen
-    template<class ColorT, class Order> struct comp_op_rgba_screen
+    // Dca' = min(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = Sca + Dca - Sca.Dca
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type dr = p[Order::R];
-                calc_type dg = p[Order::G];
-                calc_type db = p[Order::B];
-                calc_type da = p[Order::A];
-                p[Order::R] = (value_type)(sr + dr - ((sr * dr + base_mask) >> base_shift));
-                p[Order::G] = (value_type)(sg + dg - ((sg * dg + base_mask) >> base_shift));
-                p[Order::B] = (value_type)(sb + db - ((sb * db + base_mask) >> base_shift));
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            calc_type d1a = base_mask - p[Order::A];
+            calc_type s1a = base_mask - sa;
+            calc_type dr  = p[Order::R];
+            calc_type dg  = p[Order::G];
+            calc_type db  = p[Order::B];
+            calc_type da  = p[Order::A];
+
+            p[Order::R] = (value_type)((sd_min(sr * da, dr * sa) + sr * d1a + dr * s1a + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((sd_min(sg * da, dg * sa) + sg * d1a + dg * s1a + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((sd_min(sb * da, db * sa) + sb * d1a + db * s1a + base_mask) >> base_shift);
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
         }
+    }
+};
+
+//=====================================================comp_op_rgba_lighten
+template<class ColorT, class Order> struct comp_op_rgba_lighten
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_overlay
-    template<class ColorT, class Order> struct comp_op_rgba_overlay
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // if 2.Dca < Da
-        //   Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)
-        // otherwise
-        //   Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa)
-        //
-        // Da' = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+    // Dca' = max(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type d1a  = base_mask - p[Order::A];
-                calc_type s1a  = base_mask - sa;
-                calc_type dr   = p[Order::R];
-                calc_type dg   = p[Order::G];
-                calc_type db   = p[Order::B];
-                calc_type da   = p[Order::A];
-                calc_type sada = sa * p[Order::A];
-
-                p[Order::R] = (value_type)(((2*dr < da) ?
-                    2*sr*dr + sr*d1a + dr*s1a :
-                    sada - 2*(da - dr)*(sa - sr) + sr*d1a + dr*s1a + base_mask) >> base_shift);
-
-                p[Order::G] = (value_type)(((2*dg < da) ?
-                    2*sg*dg + sg*d1a + dg*s1a :
-                    sada - 2*(da - dg)*(sa - sg) + sg*d1a + dg*s1a + base_mask) >> base_shift);
-
-                p[Order::B] = (value_type)(((2*db < da) ?
-                    2*sb*db + sb*d1a + db*s1a :
-                    sada - 2*(da - db)*(sa - sb) + sb*d1a + db*s1a + base_mask) >> base_shift);
-
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
-    };
-
+        if(sa)
+        {
+            calc_type d1a = base_mask - p[Order::A];
+            calc_type s1a = base_mask - sa;
+            calc_type dr  = p[Order::R];
+            calc_type dg  = p[Order::G];
+            calc_type db  = p[Order::B];
+            calc_type da  = p[Order::A];
 
-    template<class T> inline T sd_min(T a, T b) { return (a < b) ? a : b; }
-    template<class T> inline T sd_max(T a, T b) { return (a > b) ? a : b; }
+            p[Order::R] = (value_type)((sd_max(sr * da, dr * sa) + sr * d1a + dr * s1a + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((sd_max(sg * da, dg * sa) + sg * d1a + dg * s1a + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((sd_max(sb * da, db * sa) + sb * d1a + db * s1a + base_mask) >> base_shift);
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
+        }
+    }
+};
 
-    //=====================================================comp_op_rgba_darken
-    template<class ColorT, class Order> struct comp_op_rgba_darken
+//=====================================================comp_op_rgba_color_dodge
+template<class ColorT, class Order> struct comp_op_rgba_color_dodge
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        // Dca' = min(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+    // if Sca.Da + Dca.Sa >= Sa.Da
+    //   Dca' = Sa.Da + Sca.(1 - Da) + Dca.(1 - Sa)
+    // otherwise
+    //   Dca' = Dca.Sa/(1-Sca/Sa) + Sca.(1 - Da) + Dca.(1 - Sa)
+    //
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type d1a = base_mask - p[Order::A];
-                calc_type s1a = base_mask - sa;
-                calc_type dr  = p[Order::R];
-                calc_type dg  = p[Order::G];
-                calc_type db  = p[Order::B];
-                calc_type da  = p[Order::A];
-
-                p[Order::R] = (value_type)((sd_min(sr * da, dr * sa) + sr * d1a + dr * s1a + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((sd_min(sg * da, dg * sa) + sg * d1a + dg * s1a + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((sd_min(sb * da, db * sa) + sb * d1a + db * s1a + base_mask) >> base_shift);
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
+        if(sa)
+        {
+            calc_type d1a  = base_mask - p[Order::A];
+            calc_type s1a  = base_mask - sa;
+            calc_type dr   = p[Order::R];
+            calc_type dg   = p[Order::G];
+            calc_type db   = p[Order::B];
+            calc_type da   = p[Order::A];
+            long_type drsa = dr * sa;
+            long_type dgsa = dg * sa;
+            long_type dbsa = db * sa;
+            long_type srda = sr * da;
+            long_type sgda = sg * da;
+            long_type sbda = sb * da;
+            long_type sada = sa * da;
+
+            p[Order::R] = (value_type)((srda + drsa >= sada) ?
+                                       (sada + sr * d1a + dr * s1a + base_mask) >> base_shift :
+                                       drsa / (base_mask - (sr << base_shift) / sa) + ((sr * d1a + dr * s1a + base_mask) >> base_shift));
+
+            p[Order::G] = (value_type)((sgda + dgsa >= sada) ?
+                                       (sada + sg * d1a + dg * s1a + base_mask) >> base_shift :
+                                       dgsa / (base_mask - (sg << base_shift) / sa) + ((sg * d1a + dg * s1a + base_mask) >> base_shift));
+
+            p[Order::B] = (value_type)((sbda + dbsa >= sada) ?
+                                       (sada + sb * d1a + db * s1a + base_mask) >> base_shift :
+                                       dbsa / (base_mask - (sb << base_shift) / sa) + ((sb * d1a + db * s1a + base_mask) >> base_shift));
+
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
+        }
+    }
+};
+
+//=====================================================comp_op_rgba_color_burn
+template<class ColorT, class Order> struct comp_op_rgba_color_burn
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_lighten
-    template<class ColorT, class Order> struct comp_op_rgba_lighten
+    // if Sca.Da + Dca.Sa <= Sa.Da
+    //   Dca' = Sca.(1 - Da) + Dca.(1 - Sa)
+    // otherwise
+    //   Dca' = Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa)
+    //
+    // Da'  = Sa + Da - Sa.Da
+
+
+    // http://www.w3.org/TR/SVGCompositing/
+    // if Sca == 0 and Dca == Da
+    //   Dca' = Sa × Da + Sca × (1 - Da) + Dca × (1 - Sa)
+    //        = Sa × Da + Dca × (1 - Sa)
+    //        = Da = Dca
+    // otherwise if Sca == 0
+    //   Dca' = Sca × (1 - Da) + Dca × (1 - Sa)
+    //        = Dca × (1 - Sa)
+    // otherwise if Sca > 0
+    //   Dca' = Sa × Da - Sa × Da × min(1, (1 - Dca/Da) × Sa/Sca) + Sca × (1 - Da) + Dca × (1 - Sa)
+    //        = Sa × Da × (1 - min(1, (1 - Dca/Da) × Sa/Sca)) + Sca × (1 - Da) + Dca × (1 - Sa)
+
+    //   sa * da * (255 - std::min(255, (255 - p[0]/da)*(sa/(sc*sa)) +
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if (cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = max(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
-        {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type d1a = base_mask - p[Order::A];
-                calc_type s1a = base_mask - sa;
-                calc_type dr  = p[Order::R];
-                calc_type dg  = p[Order::G];
-                calc_type db  = p[Order::B];
-                calc_type da  = p[Order::A];
-
-                p[Order::R] = (value_type)((sd_max(sr * da, dr * sa) + sr * d1a + dr * s1a + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((sd_max(sg * da, dg * sa) + sg * d1a + dg * s1a + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((sd_max(sb * da, db * sa) + sb * d1a + db * s1a + base_mask) >> base_shift);
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
-    };
 
-    //=====================================================comp_op_rgba_color_dodge
-    template<class ColorT, class Order> struct comp_op_rgba_color_dodge
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // if Sca.Da + Dca.Sa >= Sa.Da
-        //   Dca' = Sa.Da + Sca.(1 - Da) + Dca.(1 - Sa)
-        // otherwise
-        //   Dca' = Dca.Sa/(1-Sca/Sa) + Sca.(1 - Da) + Dca.(1 - Sa)
-        //
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+        if (sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type d1a  = base_mask - p[Order::A];
-                calc_type s1a  = base_mask - sa;
-                calc_type dr   = p[Order::R];
-                calc_type dg   = p[Order::G];
-                calc_type db   = p[Order::B];
-                calc_type da   = p[Order::A];
-                long_type drsa = dr * sa;
-                long_type dgsa = dg * sa;
-                long_type dbsa = db * sa;
-                long_type srda = sr * da;
-                long_type sgda = sg * da;
-                long_type sbda = sb * da;
-                long_type sada = sa * da;
-
-                p[Order::R] = (value_type)((srda + drsa >= sada) ?
-                    (sada + sr * d1a + dr * s1a + base_mask) >> base_shift :
-                    drsa / (base_mask - (sr << base_shift) / sa) + ((sr * d1a + dr * s1a + base_mask) >> base_shift));
-
-                p[Order::G] = (value_type)((sgda + dgsa >= sada) ?
-                    (sada + sg * d1a + dg * s1a + base_mask) >> base_shift :
-                    dgsa / (base_mask - (sg << base_shift) / sa) + ((sg * d1a + dg * s1a + base_mask) >> base_shift));
-
-                p[Order::B] = (value_type)((sbda + dbsa >= sada) ?
-                    (sada + sb * d1a + db * s1a + base_mask) >> base_shift :
-                    dbsa / (base_mask - (sb << base_shift) / sa) + ((sb * d1a + db * s1a + base_mask) >> base_shift));
-
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
-        }
-    };
+            calc_type d1a  = base_mask - p[Order::A];
+            calc_type s1a  = base_mask - sa;
+            calc_type dr   = p[Order::R];
+            calc_type dg   = p[Order::G];
+            calc_type db   = p[Order::B];
+            calc_type da   = p[Order::A];
+            long_type drsa = dr * sa;
+            long_type dgsa = dg * sa;
+            long_type dbsa = db * sa;
+            long_type srda = sr * da;
+            long_type sgda = sg * da;
+            long_type sbda = sb * da;
+            long_type sada = sa * da;
 
-    //=====================================================comp_op_rgba_color_burn
-    template<class ColorT, class Order> struct comp_op_rgba_color_burn
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // if Sca.Da + Dca.Sa <= Sa.Da
-        //   Dca' = Sca.(1 - Da) + Dca.(1 - Sa)
-        // otherwise
-        //   Dca' = Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa)
-        //
-        // Da'  = Sa + Da - Sa.Da
-
-
-        // http://www.w3.org/TR/SVGCompositing/
-        // if Sca == 0 and Dca == Da
-        //   Dca' = Sa × Da + Sca × (1 - Da) + Dca × (1 - Sa)
-        //        = Sa × Da + Dca × (1 - Sa)
-        //        = Da = Dca
-        // otherwise if Sca == 0
-        //   Dca' = Sca × (1 - Da) + Dca × (1 - Sa)
-        //        = Dca × (1 - Sa)
-        // otherwise if Sca > 0
-        //   Dca' = Sa × Da - Sa × Da × min(1, (1 - Dca/Da) × Sa/Sca) + Sca × (1 - Da) + Dca × (1 - Sa)
-        //        = Sa × Da × (1 - min(1, (1 - Dca/Da) × Sa/Sca)) + Sca × (1 - Da) + Dca × (1 - Sa)
-
-        //   sa * da * (255 - std::min(255, (255 - p[0]/da)*(sa/(sc*sa)) +
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
-        {
-            if (cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
+            p[Order::R] = (value_type)(((srda + drsa <= sada) ?
+                                        sr * d1a + dr * s1a :
+                                        (sr > 0 ? sa * (srda + drsa - sada) / sr + sr * d1a + dr * s1a + base_mask : 0)) >> base_shift);
 
-            if (sa)
-            {
-                calc_type d1a  = base_mask - p[Order::A];
-                calc_type s1a  = base_mask - sa;
-                calc_type dr   = p[Order::R];
-                calc_type dg   = p[Order::G];
-                calc_type db   = p[Order::B];
-                calc_type da   = p[Order::A];
-                long_type drsa = dr * sa;
-                long_type dgsa = dg * sa;
-                long_type dbsa = db * sa;
-                long_type srda = sr * da;
-                long_type sgda = sg * da;
-                long_type sbda = sb * da;
-                long_type sada = sa * da;
-
-                p[Order::R] = (value_type)(((srda + drsa <= sada) ?
-                   sr * d1a + dr * s1a :
-                   (sr > 0 ? sa * (srda + drsa - sada) / sr + sr * d1a + dr * s1a + base_mask : 0)) >> base_shift);
-
-                p[Order::G] = (value_type)(((sgda + dgsa <= sada) ?
-                    sg * d1a + dg * s1a :
-                   (sg > 0 ? sa * (sgda + dgsa - sada) / sg + sg * d1a + dg * s1a + base_mask : 0)) >> base_shift);
-
-                p[Order::B] = (value_type)(((sbda + dbsa <= sada) ?
-                    sb * d1a + db * s1a :
-                   (sb > 0 ? sa * (sbda + dbsa - sada) / sb + sb * d1a + db * s1a + base_mask : 0)) >> base_shift);
-
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            p[Order::G] = (value_type)(((sgda + dgsa <= sada) ?
+                                        sg * d1a + dg * s1a :
+                                        (sg > 0 ? sa * (sgda + dgsa - sada) / sg + sg * d1a + dg * s1a + base_mask : 0)) >> base_shift);
+
+            p[Order::B] = (value_type)(((sbda + dbsa <= sada) ?
+                                        sb * d1a + db * s1a :
+                                        (sb > 0 ? sa * (sbda + dbsa - sada) / sb + sb * d1a + db * s1a + base_mask : 0)) >> base_shift);
+
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
         }
+    }
+};
+
+//=====================================================comp_op_rgba_hard_light
+template<class ColorT, class Order> struct comp_op_rgba_hard_light
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_hard_light
-    template<class ColorT, class Order> struct comp_op_rgba_hard_light
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // if 2.Sca < Sa
-        //    Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)
-        // otherwise
-        //    Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa)
-        //
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+    // if 2.Sca < Sa
+    //    Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)
+    // otherwise
+    //    Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa)
+    //
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type d1a  = base_mask - p[Order::A];
-                calc_type s1a  = base_mask - sa;
-                calc_type dr   = p[Order::R];
-                calc_type dg   = p[Order::G];
-                calc_type db   = p[Order::B];
-                calc_type da   = p[Order::A];
-                calc_type sada = sa * da;
-
-                p[Order::R] = (value_type)(((2*sr < sa) ?
-                    2*sr*dr + sr*d1a + dr*s1a :
-                    sada - 2*(da - dr)*(sa - sr) + sr*d1a + dr*s1a + base_mask) >> base_shift);
-
-                p[Order::G] = (value_type)(((2*sg < sa) ?
-                    2*sg*dg + sg*d1a + dg*s1a :
-                    sada - 2*(da - dg)*(sa - sg) + sg*d1a + dg*s1a + base_mask) >> base_shift);
-
-                p[Order::B] = (value_type)(((2*sb < sa) ?
-                    2*sb*db + sb*d1a + db*s1a :
-                    sada - 2*(da - db)*(sa - sb) + sb*d1a + db*s1a + base_mask) >> base_shift);
-
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
-    };
-
-    //=====================================================comp_op_rgba_soft_light
-    template<class ColorT, class Order> struct comp_op_rgba_soft_light
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // if 2.Sca < Sa
-        //   Dca' = Dca.(Sa + (1 - Dca/Da).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa)
-        // otherwise if 8.Dca <= Da
-        //   Dca' = Dca.(Sa + (1 - Dca/Da).(2.Sca - Sa).(3 - 8.Dca/Da)) + Sca.(1 - Da) + Dca.(1 - Sa)
-        // otherwise
-        //   Dca' = (Dca.Sa + ((Dca/Da)^(0.5).Da - Dca).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa)
-        //
-        // Da'  = Sa + Da - Sa.Da
-
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned r, unsigned g, unsigned b,
-                                         unsigned a, unsigned cover)
-        {
-            double sr = double(r * cover) / (base_mask * 255);
-            double sg = double(g * cover) / (base_mask * 255);
-            double sb = double(b * cover) / (base_mask * 255);
-            double sa = double(a * cover) / (base_mask * 255);
-            if(sa > 0)
-            {
-                double dr = double(p[Order::R]) / base_mask;
-                double dg = double(p[Order::G]) / base_mask;
-                double db = double(p[Order::B]) / base_mask;
-                double da = double(p[Order::A] ? p[Order::A] : 1) / base_mask;
-                if(cover < 255)
-                {
-                    a = (a * cover + 255) >> 8;
-                }
+        if(sa)
+        {
+            calc_type d1a  = base_mask - p[Order::A];
+            calc_type s1a  = base_mask - sa;
+            calc_type dr   = p[Order::R];
+            calc_type dg   = p[Order::G];
+            calc_type db   = p[Order::B];
+            calc_type da   = p[Order::A];
+            calc_type sada = sa * da;
 
-                if(2*sr < sa)       dr = dr*(sa + (1 - dr/da)*(2*sr - sa)) + sr*(1 - da) + dr*(1 - sa);
-                else if(8*dr <= da) dr = dr*(sa + (1 - dr/da)*(2*sr - sa)*(3 - 8*dr/da)) + sr*(1 - da) + dr*(1 - sa);
-                else                dr = (dr*sa + (sqrt(dr/da)*da - dr)*(2*sr - sa)) + sr*(1 - da) + dr*(1 - sa);
+            p[Order::R] = (value_type)(((2*sr < sa) ?
+                                        2*sr*dr + sr*d1a + dr*s1a :
+                                        sada - 2*(da - dr)*(sa - sr) + sr*d1a + dr*s1a + base_mask) >> base_shift);
 
-                if(2*sg < sa)       dg = dg*(sa + (1 - dg/da)*(2*sg - sa)) + sg*(1 - da) + dg*(1 - sa);
-                else if(8*dg <= da) dg = dg*(sa + (1 - dg/da)*(2*sg - sa)*(3 - 8*dg/da)) + sg*(1 - da) + dg*(1 - sa);
-                else                dg = (dg*sa + (sqrt(dg/da)*da - dg)*(2*sg - sa)) + sg*(1 - da) + dg*(1 - sa);
+            p[Order::G] = (value_type)(((2*sg < sa) ?
+                                        2*sg*dg + sg*d1a + dg*s1a :
+                                        sada - 2*(da - dg)*(sa - sg) + sg*d1a + dg*s1a + base_mask) >> base_shift);
 
-                if(2*sb < sa)       db = db*(sa + (1 - db/da)*(2*sb - sa)) + sb*(1 - da) + db*(1 - sa);
-                else if(8*db <= da) db = db*(sa + (1 - db/da)*(2*sb - sa)*(3 - 8*db/da)) + sb*(1 - da) + db*(1 - sa);
-                else                db = (db*sa + (sqrt(db/da)*da - db)*(2*sb - sa)) + sb*(1 - da) + db*(1 - sa);
+            p[Order::B] = (value_type)(((2*sb < sa) ?
+                                        2*sb*db + sb*d1a + db*s1a :
+                                        sada - 2*(da - db)*(sa - sb) + sb*d1a + db*s1a + base_mask) >> base_shift);
 
-                p[Order::R] = (value_type)uround(dr * base_mask);
-                p[Order::G] = (value_type)uround(dg * base_mask);
-                p[Order::B] = (value_type)uround(db * base_mask);
-                p[Order::A] = (value_type)(a + p[Order::A] - ((a * p[Order::A] + base_mask) >> base_shift));
-            }
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
         }
-    };
+    }
+};
 
-    //=====================================================comp_op_rgba_difference
-    template<class ColorT, class Order> struct comp_op_rgba_difference
+//=====================================================comp_op_rgba_soft_light
+template<class ColorT, class Order> struct comp_op_rgba_soft_light
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_scale = color_type::base_scale,
-            base_mask  = color_type::base_mask
-        };
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        // Dca' = Sca + Dca - 2.min(Sca.Da, Dca.Sa)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
-        {
+    // if 2.Sca < Sa
+    //   Dca' = Dca.(Sa + (1 - Dca/Da).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa)
+    // otherwise if 8.Dca <= Da
+    //   Dca' = Dca.(Sa + (1 - Dca/Da).(2.Sca - Sa).(3 - 8.Dca/Da)) + Sca.(1 - Da) + Dca.(1 - Sa)
+    // otherwise
+    //   Dca' = (Dca.Sa + ((Dca/Da)^(0.5).Da - Dca).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa)
+    //
+    // Da'  = Sa + Da - Sa.Da
+
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned r, unsigned g, unsigned b,
+                                     unsigned a, unsigned cover)
+    {
+        double sr = double(r * cover) / (base_mask * 255);
+        double sg = double(g * cover) / (base_mask * 255);
+        double sb = double(b * cover) / (base_mask * 255);
+        double sa = double(a * cover) / (base_mask * 255);
+        if(sa > 0)
+        {
+            double dr = double(p[Order::R]) / base_mask;
+            double dg = double(p[Order::G]) / base_mask;
+            double db = double(p[Order::B]) / base_mask;
+            double da = double(p[Order::A] ? p[Order::A] : 1) / base_mask;
             if(cover < 255)
             {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type dr = p[Order::R];
-                calc_type dg = p[Order::G];
-                calc_type db = p[Order::B];
-                calc_type da = p[Order::A];
-                p[Order::R] = (value_type)(sr + dr - ((2 * sd_min(sr*da, dr*sa) + base_mask) >> base_shift));
-                p[Order::G] = (value_type)(sg + dg - ((2 * sd_min(sg*da, dg*sa) + base_mask) >> base_shift));
-                p[Order::B] = (value_type)(sb + db - ((2 * sd_min(sb*da, db*sa) + base_mask) >> base_shift));
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
+                a = (a * cover + 255) >> 8;
             }
+
+            if(2*sr < sa)       dr = dr*(sa + (1 - dr/da)*(2*sr - sa)) + sr*(1 - da) + dr*(1 - sa);
+            else if(8*dr <= da) dr = dr*(sa + (1 - dr/da)*(2*sr - sa)*(3 - 8*dr/da)) + sr*(1 - da) + dr*(1 - sa);
+            else                dr = (dr*sa + (sqrt(dr/da)*da - dr)*(2*sr - sa)) + sr*(1 - da) + dr*(1 - sa);
+
+            if(2*sg < sa)       dg = dg*(sa + (1 - dg/da)*(2*sg - sa)) + sg*(1 - da) + dg*(1 - sa);
+            else if(8*dg <= da) dg = dg*(sa + (1 - dg/da)*(2*sg - sa)*(3 - 8*dg/da)) + sg*(1 - da) + dg*(1 - sa);
+            else                dg = (dg*sa + (sqrt(dg/da)*da - dg)*(2*sg - sa)) + sg*(1 - da) + dg*(1 - sa);
+
+            if(2*sb < sa)       db = db*(sa + (1 - db/da)*(2*sb - sa)) + sb*(1 - da) + db*(1 - sa);
+            else if(8*db <= da) db = db*(sa + (1 - db/da)*(2*sb - sa)*(3 - 8*db/da)) + sb*(1 - da) + db*(1 - sa);
+            else                db = (db*sa + (sqrt(db/da)*da - db)*(2*sb - sa)) + sb*(1 - da) + db*(1 - sa);
+
+            p[Order::R] = (value_type)uround(dr * base_mask);
+            p[Order::G] = (value_type)uround(dg * base_mask);
+            p[Order::B] = (value_type)uround(db * base_mask);
+            p[Order::A] = (value_type)(a + p[Order::A] - ((a * p[Order::A] + base_mask) >> base_shift));
         }
+    }
+};
+
+//=====================================================comp_op_rgba_difference
+template<class ColorT, class Order> struct comp_op_rgba_difference
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_scale = color_type::base_scale,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_exclusion
-    template<class ColorT, class Order> struct comp_op_rgba_exclusion
+    // Dca' = Sca + Dca - 2.min(Sca.Da, Dca.Sa)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        // Dca' = (Sca.Da + Dca.Sa - 2.Sca.Dca) + Sca.(1 - Da) + Dca.(1 - Sa)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type d1a = base_mask - p[Order::A];
-                calc_type s1a = base_mask - sa;
-                calc_type dr = p[Order::R];
-                calc_type dg = p[Order::G];
-                calc_type db = p[Order::B];
-                calc_type da = p[Order::A];
-                p[Order::R] = (value_type)((sr*da + dr*sa - 2*sr*dr + sr*d1a + dr*s1a + base_mask) >> base_shift);
-                p[Order::G] = (value_type)((sg*da + dg*sa - 2*sg*dg + sg*d1a + dg*s1a + base_mask) >> base_shift);
-                p[Order::B] = (value_type)((sb*da + db*sa - 2*sb*db + sb*d1a + db*s1a + base_mask) >> base_shift);
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            calc_type dr = p[Order::R];
+            calc_type dg = p[Order::G];
+            calc_type db = p[Order::B];
+            calc_type da = p[Order::A];
+            p[Order::R] = (value_type)(sr + dr - ((2 * sd_min(sr*da, dr*sa) + base_mask) >> base_shift));
+            p[Order::G] = (value_type)(sg + dg - ((2 * sd_min(sg*da, dg*sa) + base_mask) >> base_shift));
+            p[Order::B] = (value_type)(sb + db - ((2 * sd_min(sb*da, db*sa) + base_mask) >> base_shift));
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
         }
+    }
+};
+
+//=====================================================comp_op_rgba_exclusion
+template<class ColorT, class Order> struct comp_op_rgba_exclusion
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_contrast
-    template<class ColorT, class Order> struct comp_op_rgba_contrast
+    // Dca' = (Sca.Da + Dca.Sa - 2.Sca.Dca) + Sca.(1 - Da) + Dca.(1 - Sa)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
+        if(cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+        if(sa)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            long_type dr = p[Order::R];
-            long_type dg = p[Order::G];
-            long_type db = p[Order::B];
-            int       da = p[Order::A];
-            long_type d2a = da >> 1;
-            unsigned s2a = sa >> 1;
+            calc_type d1a = base_mask - p[Order::A];
+            calc_type s1a = base_mask - sa;
+            calc_type dr = p[Order::R];
+            calc_type dg = p[Order::G];
+            calc_type db = p[Order::B];
+            calc_type da = p[Order::A];
+            p[Order::R] = (value_type)((sr*da + dr*sa - 2*sr*dr + sr*d1a + dr*s1a + base_mask) >> base_shift);
+            p[Order::G] = (value_type)((sg*da + dg*sa - 2*sg*dg + sg*d1a + dg*s1a + base_mask) >> base_shift);
+            p[Order::B] = (value_type)((sb*da + db*sa - 2*sb*db + sb*d1a + db*s1a + base_mask) >> base_shift);
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
+        }
+    }
+};
 
-            int r = (int)((((dr - d2a) * int((sr - s2a)*2 + base_mask)) >> base_shift) + d2a);
-            int g = (int)((((dg - d2a) * int((sg - s2a)*2 + base_mask)) >> base_shift) + d2a);
-            int b = (int)((((db - d2a) * int((sb - s2a)*2 + base_mask)) >> base_shift) + d2a);
+//=====================================================comp_op_rgba_contrast
+template<class ColorT, class Order> struct comp_op_rgba_contrast
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-            r = (r < 0) ? 0 : r;
-            g = (g < 0) ? 0 : g;
-            b = (b < 0) ? 0 : b;
 
-            p[Order::R] = (value_type)((r > da) ? da : r);
-            p[Order::G] = (value_type)((g > da) ? da : g);
-            p[Order::B] = (value_type)((b > da) ? da : b);
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
+        {
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
+        long_type dr = p[Order::R];
+        long_type dg = p[Order::G];
+        long_type db = p[Order::B];
+        int       da = p[Order::A];
+        long_type d2a = da >> 1;
+        unsigned s2a = sa >> 1;
+
+        int r = (int)((((dr - d2a) * int((sr - s2a)*2 + base_mask)) >> base_shift) + d2a);
+        int g = (int)((((dg - d2a) * int((sg - s2a)*2 + base_mask)) >> base_shift) + d2a);
+        int b = (int)((((db - d2a) * int((sb - s2a)*2 + base_mask)) >> base_shift) + d2a);
+
+        r = (r < 0) ? 0 : r;
+        g = (g < 0) ? 0 : g;
+        b = (b < 0) ? 0 : b;
+
+        p[Order::R] = (value_type)((r > da) ? da : r);
+        p[Order::G] = (value_type)((g > da) ? da : g);
+        p[Order::B] = (value_type)((b > da) ? da : b);
+    }
+};
+
+//=====================================================comp_op_rgba_invert
+template<class ColorT, class Order> struct comp_op_rgba_invert
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================================comp_op_rgba_invert
-    template<class ColorT, class Order> struct comp_op_rgba_invert
+    // Dca' = (Da - Dca) * Sa + Dca.(1 - Sa)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned /*sr*/, unsigned /*sg*/, unsigned /*sb*/,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
+        sa = (sa * cover + 255) >> 8;
+        if(sa)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+            calc_type da = p[Order::A];
+            calc_type dr = ((da - p[Order::R]) * sa + base_mask) >> base_shift;
+            calc_type dg = ((da - p[Order::G]) * sa + base_mask) >> base_shift;
+            calc_type db = ((da - p[Order::B]) * sa + base_mask) >> base_shift;
+            calc_type s1a = base_mask - sa;
+            p[Order::R] = (value_type)(dr + ((p[Order::R] * s1a + base_mask) >> base_shift));
+            p[Order::G] = (value_type)(dg + ((p[Order::G] * s1a + base_mask) >> base_shift));
+            p[Order::B] = (value_type)(db + ((p[Order::B] * s1a + base_mask) >> base_shift));
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
+        }
+    }
+};
+
+//=================================================comp_op_rgba_invert_rgb
+template<class ColorT, class Order> struct comp_op_rgba_invert_rgb
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        // Dca' = (Da - Dca) * Sa + Dca.(1 - Sa)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned /*sr*/, unsigned /*sg*/, unsigned /*sb*/,
-                                         unsigned sa, unsigned cover)
+    // Dca' = (Da - Dca) * Sca + Dca.(1 - Sa)
+    // Da'  = Sa + Da - Sa.Da
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
+    {
+        if(cover < 255)
         {
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
             sa = (sa * cover + 255) >> 8;
-            if(sa)
-            {
-                calc_type da = p[Order::A];
-                calc_type dr = ((da - p[Order::R]) * sa + base_mask) >> base_shift;
-                calc_type dg = ((da - p[Order::G]) * sa + base_mask) >> base_shift;
-                calc_type db = ((da - p[Order::B]) * sa + base_mask) >> base_shift;
-                calc_type s1a = base_mask - sa;
-                p[Order::R] = (value_type)(dr + ((p[Order::R] * s1a + base_mask) >> base_shift));
-                p[Order::G] = (value_type)(dg + ((p[Order::G] * s1a + base_mask) >> base_shift));
-                p[Order::B] = (value_type)(db + ((p[Order::B] * s1a + base_mask) >> base_shift));
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
         }
+        if(sa)
+        {
+            calc_type da = p[Order::A];
+            calc_type dr = ((da - p[Order::R]) * sr + base_mask) >> base_shift;
+            calc_type dg = ((da - p[Order::G]) * sg + base_mask) >> base_shift;
+            calc_type db = ((da - p[Order::B]) * sb + base_mask) >> base_shift;
+            calc_type s1a = base_mask - sa;
+            p[Order::R] = (value_type)(dr + ((p[Order::R] * s1a + base_mask) >> base_shift));
+            p[Order::G] = (value_type)(dg + ((p[Order::G] * s1a + base_mask) >> base_shift));
+            p[Order::B] = (value_type)(db + ((p[Order::B] * s1a + base_mask) >> base_shift));
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
+        }
+    }
+};
+
+
+// merge grain (GIMP)
+// E = I + M - 128
+
+template <typename ColorT, typename Order>
+struct comp_op_rgba_grain_merge
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=================================================comp_op_rgba_invert_rgb
-    template<class ColorT, class Order> struct comp_op_rgba_invert_rgb
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
 
-        // Dca' = (Da - Dca) * Sca + Dca.(1 - Sa)
-        // Da'  = Sa + Da - Sa.Da
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
+        if (cover < 255)
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if(sa)
-            {
-                calc_type da = p[Order::A];
-                calc_type dr = ((da - p[Order::R]) * sr + base_mask) >> base_shift;
-                calc_type dg = ((da - p[Order::G]) * sg + base_mask) >> base_shift;
-                calc_type db = ((da - p[Order::B]) * sb + base_mask) >> base_shift;
-                calc_type s1a = base_mask - sa;
-                p[Order::R] = (value_type)(dr + ((p[Order::R] * s1a + base_mask) >> base_shift));
-                p[Order::G] = (value_type)(dg + ((p[Order::G] * s1a + base_mask) >> base_shift));
-                p[Order::B] = (value_type)(db + ((p[Order::B] * s1a + base_mask) >> base_shift));
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
         }
+        if (sa > 0)
+        {
+            calc_type da = p[Order::A];
+            int dr = sr + p[Order::R] - 128;
+            int dg = sg + p[Order::G] - 128;
+            int db = sb + p[Order::B] - 128;
+            p[Order::R] = dr < 0 ? 0 : (dr > 255 ? 255 : dr);
+            p[Order::G] = dg < 0 ? 0 : (dg > 255 ? 255 : dg);
+            p[Order::B] = db < 0 ? 0 : (db > 255 ? 255 : db);
+            p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
+        }
+    }
+};
+
+// grain extract (GIMP)
+// E = I - M + 128
+// FIXME: https://github.com/mapnik/mapnik/issues/2067
+template <typename ColorT, typename Order>
+struct comp_op_rgba_grain_extract
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned /*cover*/)
+    {
+        calc_type da = (p[Order::A] * sa + 255) >> 8;
 
-    // merge grain (GIMP)
-    // E = I + M - 128
+        int dr = p[Order::R] - sr + 128;
+        int dg = p[Order::G] - sg + 128;
+        int db = p[Order::B] - sb + 128;
 
-    template <typename ColorT, typename Order>
-    struct comp_op_rgba_grain_merge
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        dr = dr < 0 ? 0 : (dr > 255 ? 255 : dr);
+        dg = dg < 0 ? 0 : (dg > 255 ? 255 : dg);
+        db = db < 0 ? 0 : (db > 255 ? 255 : db);
 
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
-        {
+        p[Order::A] = da;
 
-            if (cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if (sa > 0)
-            {
-                calc_type da = p[Order::A];
-                int dr = sr + p[Order::R] - 128;
-                int dg = sg + p[Order::G] - 128;
-                int db = sb + p[Order::B] - 128;
-                p[Order::R] = dr < 0 ? 0 : (dr > 255 ? 255 : dr);
-                p[Order::G] = dg < 0 ? 0 : (dg > 255 ? 255 : dg);
-                p[Order::B] = db < 0 ? 0 : (db > 255 ? 255 : db);
-                p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift));
-            }
+        if (da < 255)
+        {
+            p[Order::R] = (dr * da + 255) >> 8;
+            p[Order::G] = (dg * da + 255) >> 8;
+            p[Order::B] = (db * da + 255) >> 8;
         }
-    };
-
-    // colorize alpha values
-    // TODO - consider moving to image-filters:
-    // https://github.com/mapnik/mapnik/issues/1371
-    /*
-    template <typename ColorT, typename Order>
-    struct comp_op_rgba_colorize_alpha
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         // source rgb
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         // source alpha and opacity
-                                         unsigned sa, unsigned cover)
+        else
         {
-            if(cover < 255)
-            {
-                sr = (sr * cover + 255) >> 8;
-                sg = (sg * cover + 255) >> 8;
-                sb = (sb * cover + 255) >> 8;
-                sa = (sa * cover + 255) >> 8;
-            }
-            if (sa > 0)
-            {
-                p[Order::R] = (value_type)(((0 + base_mask) >> base_shift));
-                p[Order::G] = (value_type)(((0 + base_mask) >> base_shift));
-                p[Order::B] = (value_type)(((0 + base_mask) >> base_shift));
-                p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
-                // http://en.wikipedia.org/wiki/File:HSV-RGB-comparison.svg
-                if (p[Order::A] < 64) {
-                    p[Order::G] = ((p[Order::A] - 64) * 4);
-                    p[Order::B] = 255;
-                }
-                if (p[Order::A] >= 64 && p[Order::A] < 128) {
-                    p[Order::G] = 255;
-                    p[Order::B] = 255 - ((p[Order::A] - 64) * 4);
-                }
-                if (p[Order::A] >= 128 && p[Order::A] < 192) {
-                    p[Order::R] = ((p[Order::A] - 128) * 4);
-                    p[Order::G] = 255;
-                }
-                if (p[Order::A] >= 192) {
-                    p[Order::R] = 255;
-                    p[Order::G] = 255 - ((p[Order::A] - 192) * 4);
-                }
-            }
+            p[Order::R] = dr;
+            p[Order::G] = dg;
+            p[Order::B] = db;
         }
+    }
+};
+
+template <typename ColorT, typename Order>
+struct comp_op_rgba_hue
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
-    */
 
-    // grain extract (GIMP)
-    // E = I - M + 128
+    static void blend_pix(value_type* p,
+                          unsigned sr, unsigned sg, unsigned sb,
+                          unsigned sa, unsigned cover);
+};
 
-    template <typename ColorT, typename Order>
-    struct comp_op_rgba_grain_extract
+template <typename ColorT, typename Order>
+struct comp_op_rgba_saturation
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        static AGG_INLINE void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover)
-        {
-            calc_type da = (p[Order::A] * sa + 255) >> 8;
+    static void blend_pix(value_type* p,
+                          unsigned sr, unsigned sg, unsigned sb,
+                          unsigned sa, unsigned cover);
+};
 
-            int dr = p[Order::R] - sr + 128;
-            int dg = p[Order::G] - sg + 128;
-            int db = p[Order::B] - sb + 128;
+template <typename ColorT, typename Order>
+struct comp_op_rgba_color
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-            dr = dr < 0 ? 0 : (dr > 255 ? 255 : dr);
-            dg = dg < 0 ? 0 : (dg > 255 ? 255 : dg);
-            db = db < 0 ? 0 : (db > 255 ? 255 : db);
+    static void blend_pix(value_type* p,
+                          unsigned sr, unsigned sg, unsigned sb,
+                          unsigned sa, unsigned cover);
+};
 
-            p[Order::A] = da;
 
-            if (da < 255)
-            {
-                p[Order::R] = (dr * da + 255) >> 8;
-                p[Order::G] = (dg * da + 255) >> 8;
-                p[Order::B] = (db * da + 255) >> 8;
-            }
-            else
-            {
-                p[Order::R] = dr;
-                p[Order::G] = dg;
-                p[Order::B] = db;
-            }
-        }
+template <typename ColorT, typename Order>
+struct comp_op_rgba_value
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    template <typename ColorT, typename Order>
-    struct comp_op_rgba_hue
-    {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+    static void blend_pix(value_type* p,
+                          unsigned sr, unsigned sg, unsigned sb,
+                          unsigned sa, unsigned cover);
+};
+
+// Linear dodge: Target + Blend
+template <typename ColorT, typename Order>
+struct comp_op_rgba_linear_dodge
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
 
-        static void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover);
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    template <typename ColorT, typename Order>
-    struct comp_op_rgba_saturation
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
+        if (cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
+
+        calc_type dr = p[Order::R] + sr;
+        calc_type dg = p[Order::G] + sg;
+        calc_type db = p[Order::B] + sb;
+        p[Order::R] = (dr > base_mask) ? (value_type)base_mask : dr;
+        p[Order::G] = (dg > base_mask) ? (value_type)base_mask : dg;
+        p[Order::B] = (db > base_mask) ? (value_type)base_mask : db;
+        p[Order::A] = (value_type)(sa + ((p[Order::A] * (base_mask - sa) + base_mask) >> base_shift));
+    }
+};
 
-        static void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover);
+// Linear burn: Target + Blend - 1
+template <typename ColorT, typename Order>
+struct comp_op_rgba_linear_burn
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    template <typename ColorT, typename Order>
-    struct comp_op_rgba_color
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
+        if (cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
 
-        static void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover);
-    };
+        long_type dr = p[Order::R] + sr - base_mask;
+        long_type dg = p[Order::G] + sg - base_mask;
+        long_type db = p[Order::B] + sb - base_mask;
+        p[Order::R] = (dr < 0) ? 0 : dr;
+        p[Order::G] = (dg < 0) ? 0 : dg;
+        p[Order::B] = (db < 0) ? 0 : db;
+        p[Order::A] = (value_type)(sa + ((p[Order::A] * (base_mask - sa) + base_mask) >> base_shift));
+    }
+};
 
+// Divide
+template <typename ColorT, typename Order>
+struct comp_op_rgba_divide
+{
+    typedef ColorT color_type;
+    typedef Order order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::long_type long_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-    template <typename ColorT, typename Order>
-    struct comp_op_rgba_value
+    static AGG_INLINE void blend_pix(value_type* p,
+                                     unsigned sr, unsigned sg, unsigned sb,
+                                     unsigned sa, unsigned cover)
     {
-        typedef ColorT color_type;
-        typedef Order order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef typename color_type::long_type long_type;
-        enum base_scale_e
+        if (cover < 255)
         {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+            sr = (sr * cover + 255) >> 8;
+            sg = (sg * cover + 255) >> 8;
+            sb = (sb * cover + 255) >> 8;
+            sa = (sa * cover + 255) >> 8;
+        }
 
-        static void blend_pix(value_type* p,
-                                         unsigned sr, unsigned sg, unsigned sb,
-                                         unsigned sa, unsigned cover);
-    };
+        float fr = (sr > 0) ? sr : 0.001;
+        float fg = (sg > 0) ? sg : 0.001;
+        float fb = (sb > 0) ? sb : 0.001;
 
-    //======================================================comp_op_table_rgba
-    template<class ColorT, class Order> struct comp_op_table_rgba
-    {
-        typedef typename ColorT::value_type value_type;
-        typedef void (*comp_op_func_type)(value_type* p,
-                                          unsigned cr,
-                                          unsigned cg,
-                                          unsigned cb,
-                                          unsigned ca,
-                                          unsigned cover);
-        static comp_op_func_type g_comp_op_func[];
-    };
+        long_type dr = long_type(p[Order::R]/((fr + 1) / 256));
+        long_type dg = long_type(p[Order::G]/((fg + 1) / 256));
+        long_type db = long_type(p[Order::B]/((fb + 1) / 256));
 
-    //==========================================================g_comp_op_func
-    template<class ColorT, class Order>
-    typename comp_op_table_rgba<ColorT, Order>::comp_op_func_type
-    comp_op_table_rgba<ColorT, Order>::g_comp_op_func[] =
-    {
-        comp_op_rgba_clear      <ColorT,Order>::blend_pix,
-        comp_op_rgba_src        <ColorT,Order>::blend_pix,
-        comp_op_rgba_dst        <ColorT,Order>::blend_pix,
-        comp_op_rgba_src_over   <ColorT,Order>::blend_pix,
-        comp_op_rgba_dst_over   <ColorT,Order>::blend_pix,
-        comp_op_rgba_src_in     <ColorT,Order>::blend_pix,
-        comp_op_rgba_dst_in     <ColorT,Order>::blend_pix,
-        comp_op_rgba_src_out    <ColorT,Order>::blend_pix,
-        comp_op_rgba_dst_out    <ColorT,Order>::blend_pix,
-        comp_op_rgba_src_atop   <ColorT,Order>::blend_pix,
-        comp_op_rgba_dst_atop   <ColorT,Order>::blend_pix,
-        comp_op_rgba_xor        <ColorT,Order>::blend_pix,
-        comp_op_rgba_plus       <ColorT,Order>::blend_pix,
-        comp_op_rgba_minus      <ColorT,Order>::blend_pix,
-        comp_op_rgba_multiply   <ColorT,Order>::blend_pix,
-        comp_op_rgba_screen     <ColorT,Order>::blend_pix,
-        comp_op_rgba_overlay    <ColorT,Order>::blend_pix,
-        comp_op_rgba_darken     <ColorT,Order>::blend_pix,
-        comp_op_rgba_lighten    <ColorT,Order>::blend_pix,
-        comp_op_rgba_color_dodge<ColorT,Order>::blend_pix,
-        comp_op_rgba_color_burn <ColorT,Order>::blend_pix,
-        comp_op_rgba_hard_light <ColorT,Order>::blend_pix,
-        comp_op_rgba_soft_light <ColorT,Order>::blend_pix,
-        comp_op_rgba_difference <ColorT,Order>::blend_pix,
-        comp_op_rgba_exclusion  <ColorT,Order>::blend_pix,
-        comp_op_rgba_contrast   <ColorT,Order>::blend_pix,
-        comp_op_rgba_invert     <ColorT,Order>::blend_pix,
-        comp_op_rgba_invert_rgb <ColorT,Order>::blend_pix,
-        comp_op_rgba_grain_merge<ColorT,Order>::blend_pix,
-        comp_op_rgba_grain_extract<ColorT,Order>::blend_pix,
-        comp_op_rgba_hue<ColorT,Order>::blend_pix,
-        comp_op_rgba_saturation<ColorT,Order>::blend_pix,
-        comp_op_rgba_color<ColorT,Order>::blend_pix,
-        comp_op_rgba_value<ColorT,Order>::blend_pix,
-        //comp_op_rgba_colorize_alpha<ColorT,Order>::blend_pix,
-        0
-    };
+        p[Order::R] = (dr > 255) ? 255 : dr;
+        p[Order::G] = (dg > 255) ? 255 : dg;
+        p[Order::B] = (db > 255) ? 255 : db;
 
+        p[Order::A] = (value_type)(sa + ((p[Order::A] * (base_mask - sa) + base_mask) >> base_shift));
+    }
+};
 
-    //==============================================================comp_op_e
-    enum comp_op_e
-    {
-        comp_op_clear,         //----comp_op_clear
-        comp_op_src,           //----comp_op_src
-        comp_op_dst,           //----comp_op_dst
-        comp_op_src_over,      //----comp_op_src_over
-        comp_op_dst_over,      //----comp_op_dst_over
-        comp_op_src_in,        //----comp_op_src_in
-        comp_op_dst_in,        //----comp_op_dst_in
-        comp_op_src_out,       //----comp_op_src_out
-        comp_op_dst_out,       //----comp_op_dst_out
-        comp_op_src_atop,      //----comp_op_src_atop
-        comp_op_dst_atop,      //----comp_op_dst_atop
-        comp_op_xor,           //----comp_op_xor
-        comp_op_plus,          //----comp_op_plus
-        comp_op_minus,         //----comp_op_minus
-        comp_op_multiply,      //----comp_op_multiply
-        comp_op_screen,        //----comp_op_screen
-        comp_op_overlay,       //----comp_op_overlay
-        comp_op_darken,        //----comp_op_darken
-        comp_op_lighten,       //----comp_op_lighten
-        comp_op_color_dodge,   //----comp_op_color_dodge
-        comp_op_color_burn,    //----comp_op_color_burn
-        comp_op_hard_light,    //----comp_op_hard_light
-        comp_op_soft_light,    //----comp_op_soft_light
-        comp_op_difference,    //----comp_op_difference
-        comp_op_exclusion,     //----comp_op_exclusion
-        comp_op_contrast,      //----comp_op_contrast
-        comp_op_invert,        //----comp_op_invert
-        comp_op_invert_rgb,    //----comp_op_invert_rgb
-        comp_op_grain_merge,   //----comp_op_grain_merge_rgb
-        comp_op_grain_extract, //----comp_op_grain_extract_rgb
-        comp_op_hue,           //----comp_op_hue
-        comp_op_saturation,    //----comp_op_saturation
-        comp_op_color,         //----comp_op_color
-        comp_op_value,         //----comp_op_value
-        //comp_op_colorize_alpha,//----comp_op_colorize_alpha
-        end_of_comp_op_e
-    };
 
-    //====================================================comp_op_adaptor_rgba
-    template<class ColorT, class Order> struct comp_op_adaptor_rgba
+//======================================================comp_op_table_rgba
+template<class ColorT, class Order> struct comp_op_table_rgba
+{
+    typedef typename ColorT::value_type value_type;
+    typedef void (*comp_op_func_type)(value_type* p,
+                                      unsigned cr,
+                                      unsigned cg,
+                                      unsigned cb,
+                                      unsigned ca,
+                                      unsigned cover);
+    static comp_op_func_type g_comp_op_func[];
+};
+
+//==========================================================g_comp_op_func
+template<class ColorT, class Order>
+typename comp_op_table_rgba<ColorT, Order>::comp_op_func_type
+comp_op_table_rgba<ColorT, Order>::g_comp_op_func[] =
+{
+    comp_op_rgba_clear      <ColorT,Order>::blend_pix,
+    comp_op_rgba_src        <ColorT,Order>::blend_pix,
+    comp_op_rgba_dst        <ColorT,Order>::blend_pix,
+    comp_op_rgba_src_over   <ColorT,Order>::blend_pix,
+    comp_op_rgba_dst_over   <ColorT,Order>::blend_pix,
+    comp_op_rgba_src_in     <ColorT,Order>::blend_pix,
+    comp_op_rgba_dst_in     <ColorT,Order>::blend_pix,
+    comp_op_rgba_src_out    <ColorT,Order>::blend_pix,
+    comp_op_rgba_dst_out    <ColorT,Order>::blend_pix,
+    comp_op_rgba_src_atop   <ColorT,Order>::blend_pix,
+    comp_op_rgba_dst_atop   <ColorT,Order>::blend_pix,
+    comp_op_rgba_xor        <ColorT,Order>::blend_pix,
+    comp_op_rgba_plus       <ColorT,Order>::blend_pix,
+    comp_op_rgba_minus      <ColorT,Order>::blend_pix,
+    comp_op_rgba_multiply   <ColorT,Order>::blend_pix,
+    comp_op_rgba_screen     <ColorT,Order>::blend_pix,
+    comp_op_rgba_overlay    <ColorT,Order>::blend_pix,
+    comp_op_rgba_darken     <ColorT,Order>::blend_pix,
+    comp_op_rgba_lighten    <ColorT,Order>::blend_pix,
+    comp_op_rgba_color_dodge<ColorT,Order>::blend_pix,
+    comp_op_rgba_color_burn <ColorT,Order>::blend_pix,
+    comp_op_rgba_hard_light <ColorT,Order>::blend_pix,
+    comp_op_rgba_soft_light <ColorT,Order>::blend_pix,
+    comp_op_rgba_difference <ColorT,Order>::blend_pix,
+    comp_op_rgba_exclusion  <ColorT,Order>::blend_pix,
+    comp_op_rgba_contrast   <ColorT,Order>::blend_pix,
+    comp_op_rgba_invert     <ColorT,Order>::blend_pix,
+    comp_op_rgba_invert_rgb <ColorT,Order>::blend_pix,
+    comp_op_rgba_grain_merge<ColorT,Order>::blend_pix,
+    comp_op_rgba_grain_extract<ColorT,Order>::blend_pix,
+    comp_op_rgba_hue<ColorT,Order>::blend_pix,
+    comp_op_rgba_saturation<ColorT,Order>::blend_pix,
+    comp_op_rgba_color<ColorT,Order>::blend_pix,
+    comp_op_rgba_value<ColorT,Order>::blend_pix,
+    comp_op_rgba_linear_dodge<ColorT,Order>::blend_pix,
+    comp_op_rgba_linear_burn<ColorT,Order>::blend_pix,
+    comp_op_rgba_divide<ColorT,Order>::blend_pix,
+    //comp_op_rgba_colorize_alpha<ColorT,Order>::blend_pix,
+    0
+};
+
+
+//==============================================================comp_op_e
+enum comp_op_e
+{
+    comp_op_clear,         //----comp_op_clear
+    comp_op_src,           //----comp_op_src
+    comp_op_dst,           //----comp_op_dst
+    comp_op_src_over,      //----comp_op_src_over
+    comp_op_dst_over,      //----comp_op_dst_over
+    comp_op_src_in,        //----comp_op_src_in
+    comp_op_dst_in,        //----comp_op_dst_in
+    comp_op_src_out,       //----comp_op_src_out
+    comp_op_dst_out,       //----comp_op_dst_out
+    comp_op_src_atop,      //----comp_op_src_atop
+    comp_op_dst_atop,      //----comp_op_dst_atop
+    comp_op_xor,           //----comp_op_xor
+    comp_op_plus,          //----comp_op_plus
+    comp_op_minus,         //----comp_op_minus
+    comp_op_multiply,      //----comp_op_multiply
+    comp_op_screen,        //----comp_op_screen
+    comp_op_overlay,       //----comp_op_overlay
+    comp_op_darken,        //----comp_op_darken
+    comp_op_lighten,       //----comp_op_lighten
+    comp_op_color_dodge,   //----comp_op_color_dodge
+    comp_op_color_burn,    //----comp_op_color_burn
+    comp_op_hard_light,    //----comp_op_hard_light
+    comp_op_soft_light,    //----comp_op_soft_light
+    comp_op_difference,    //----comp_op_difference
+    comp_op_exclusion,     //----comp_op_exclusion
+    comp_op_contrast,      //----comp_op_contrast
+    comp_op_invert,        //----comp_op_invert
+    comp_op_invert_rgb,    //----comp_op_invert_rgb
+    comp_op_grain_merge,   //----comp_op_grain_merge_rgb
+    comp_op_grain_extract, //----comp_op_grain_extract_rgb
+    comp_op_hue,           //----comp_op_hue
+    comp_op_saturation,    //----comp_op_saturation
+    comp_op_color,         //----comp_op_color
+    comp_op_value,         //----comp_op_value
+    //comp_op_colorize_alpha,//----comp_op_colorize_alpha
+    comp_op_linear_dodge, // comp_op_linear_dodge
+    comp_op_linear_burn, // comp_op_linear_burn
+    comp_op_divide, // comp_op_divide
+    end_of_comp_op_e
+};
+
+//====================================================comp_op_adaptor_rgba
+template<class ColorT, class Order> struct comp_op_adaptor_rgba
+{
+    typedef Order  order_type;
+    typedef ColorT color_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
     {
-        typedef Order  order_type;
-        typedef ColorT color_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        static AGG_INLINE void blend_pix(unsigned op, value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned ca,
-                                         unsigned cover)
-        {
-            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]
-                (p, (cr * ca + base_mask) >> base_shift,
-                    (cg * ca + base_mask) >> base_shift,
-                    (cb * ca + base_mask) >> base_shift,
-                     ca, cover);
-        }
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=========================================comp_op_adaptor_clip_to_dst_rgba
-    template<class ColorT, class Order> struct comp_op_adaptor_clip_to_dst_rgba
-    {
-        typedef Order  order_type;
-        typedef ColorT color_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        static AGG_INLINE void blend_pix(unsigned op, value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned ca,
-                                         unsigned cover)
-        {
-            cr = (cr * ca + base_mask) >> base_shift;
-            cg = (cg * ca + base_mask) >> base_shift;
-            cb = (cb * ca + base_mask) >> base_shift;
-            unsigned da = p[Order::A];
-            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]
-                (p, (cr * da + base_mask) >> base_shift,
-                    (cg * da + base_mask) >> base_shift,
-                    (cb * da + base_mask) >> base_shift,
-                    (ca * da + base_mask) >> base_shift,
-                    cover);
-        }
+    static AGG_INLINE void blend_pix(unsigned op, value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned ca,
+                                     unsigned cover)
+    {
+        comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]
+            (p, (cr * ca + base_mask) >> base_shift,
+             (cg * ca + base_mask) >> base_shift,
+             (cb * ca + base_mask) >> base_shift,
+             ca, cover);
+    }
+};
+
+//=========================================comp_op_adaptor_clip_to_dst_rgba
+template<class ColorT, class Order> struct comp_op_adaptor_clip_to_dst_rgba
+{
+    typedef Order  order_type;
+    typedef ColorT color_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //================================================comp_op_adaptor_rgba_pre
-    template<class ColorT, class Order> struct comp_op_adaptor_rgba_pre
+    static AGG_INLINE void blend_pix(unsigned op, value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned ca,
+                                     unsigned cover)
     {
-        typedef Order  order_type;
-        typedef ColorT color_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        static AGG_INLINE void blend_pix(unsigned op, value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned ca,
-                                         unsigned cover)
-        {
-            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op](p, cr, cg, cb, ca, cover);
-        }
+        cr = (cr * ca + base_mask) >> base_shift;
+        cg = (cg * ca + base_mask) >> base_shift;
+        cb = (cb * ca + base_mask) >> base_shift;
+        unsigned da = p[Order::A];
+        comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]
+            (p, (cr * da + base_mask) >> base_shift,
+             (cg * da + base_mask) >> base_shift,
+             (cb * da + base_mask) >> base_shift,
+             (ca * da + base_mask) >> base_shift,
+             cover);
+    }
+};
+
+//================================================comp_op_adaptor_rgba_pre
+template<class ColorT, class Order> struct comp_op_adaptor_rgba_pre
+{
+    typedef Order  order_type;
+    typedef ColorT color_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=====================================comp_op_adaptor_clip_to_dst_rgba_pre
-    template<class ColorT, class Order> struct comp_op_adaptor_clip_to_dst_rgba_pre
+    static AGG_INLINE void blend_pix(unsigned op, value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned ca,
+                                     unsigned cover)
     {
-        typedef Order  order_type;
-        typedef ColorT color_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op](p, cr, cg, cb, ca, cover);
+    }
+};
 
-        static AGG_INLINE void blend_pix(unsigned op, value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned ca,
-                                         unsigned cover)
-        {
-            unsigned da = p[Order::A];
-            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]
-                (p, (cr * da + base_mask) >> base_shift,
-                    (cg * da + base_mask) >> base_shift,
-                    (cb * da + base_mask) >> base_shift,
-                    (ca * da + base_mask) >> base_shift,
-                    cover);
-        }
+//=====================================comp_op_adaptor_clip_to_dst_rgba_pre
+template<class ColorT, class Order> struct comp_op_adaptor_clip_to_dst_rgba_pre
+{
+    typedef Order  order_type;
+    typedef ColorT color_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //=======================================================comp_adaptor_rgba
-    template<class BlenderPre> struct comp_adaptor_rgba
+    static AGG_INLINE void blend_pix(unsigned op, value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned ca,
+                                     unsigned cover)
     {
-        typedef typename BlenderPre::order_type order_type;
-        typedef typename BlenderPre::color_type color_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        unsigned da = p[Order::A];
+        comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]
+            (p, (cr * da + base_mask) >> base_shift,
+             (cg * da + base_mask) >> base_shift,
+             (cb * da + base_mask) >> base_shift,
+             (ca * da + base_mask) >> base_shift,
+             cover);
+    }
+};
+
+//=======================================================comp_adaptor_rgba
+template<class BlenderPre> struct comp_adaptor_rgba
+{
+    typedef typename BlenderPre::order_type order_type;
+    typedef typename BlenderPre::color_type color_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
+    };
 
-        static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned ca,
-                                         unsigned cover)
-        {
-            BlenderPre::blend_pix(p,
-                                  (cr * ca + base_mask) >> base_shift,
-                                  (cg * ca + base_mask) >> base_shift,
-                                  (cb * ca + base_mask) >> base_shift,
-                                  ca, cover);
-        }
+    static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned ca,
+                                     unsigned cover)
+    {
+        BlenderPre::blend_pix(p,
+                              (cr * ca + base_mask) >> base_shift,
+                              (cg * ca + base_mask) >> base_shift,
+                              (cb * ca + base_mask) >> base_shift,
+                              ca, cover);
+    }
+};
+
+//==========================================comp_adaptor_clip_to_dst_rgba
+template<class BlenderPre> struct comp_adaptor_clip_to_dst_rgba
+{
+    typedef typename BlenderPre::order_type order_type;
+    typedef typename BlenderPre::color_type color_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //==========================================comp_adaptor_clip_to_dst_rgba
-    template<class BlenderPre> struct comp_adaptor_clip_to_dst_rgba
-    {
-        typedef typename BlenderPre::order_type order_type;
-        typedef typename BlenderPre::color_type color_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
-
-        static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned ca,
-                                         unsigned cover)
-        {
-            cr = (cr * ca + base_mask) >> base_shift;
-            cg = (cg * ca + base_mask) >> base_shift;
-            cb = (cb * ca + base_mask) >> base_shift;
-            unsigned da = p[order_type::A];
-            BlenderPre::blend_pix(p,
-                                  (cr * da + base_mask) >> base_shift,
-                                  (cg * da + base_mask) >> base_shift,
-                                  (cb * da + base_mask) >> base_shift,
-                                  (ca * da + base_mask) >> base_shift,
-                                  cover);
-        }
+    static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned ca,
+                                     unsigned cover)
+    {
+        cr = (cr * ca + base_mask) >> base_shift;
+        cg = (cg * ca + base_mask) >> base_shift;
+        cb = (cb * ca + base_mask) >> base_shift;
+        unsigned da = p[order_type::A];
+        BlenderPre::blend_pix(p,
+                              (cr * da + base_mask) >> base_shift,
+                              (cg * da + base_mask) >> base_shift,
+                              (cb * da + base_mask) >> base_shift,
+                              (ca * da + base_mask) >> base_shift,
+                              cover);
+    }
+};
+
+//======================================comp_adaptor_clip_to_dst_rgba_pre
+template<class BlenderPre> struct comp_adaptor_clip_to_dst_rgba_pre
+{
+    typedef typename BlenderPre::order_type order_type;
+    typedef typename BlenderPre::color_type color_type;
+    typedef typename color_type::value_type value_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_mask  = color_type::base_mask
     };
 
-    //======================================comp_adaptor_clip_to_dst_rgba_pre
-    template<class BlenderPre> struct comp_adaptor_clip_to_dst_rgba_pre
+    static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p,
+                                     unsigned cr, unsigned cg, unsigned cb,
+                                     unsigned ca,
+                                     unsigned cover)
     {
-        typedef typename BlenderPre::order_type order_type;
-        typedef typename BlenderPre::color_type color_type;
-        typedef typename color_type::value_type value_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_mask  = color_type::base_mask
-        };
+        unsigned da = p[order_type::A];
+        BlenderPre::blend_pix(p,
+                              (cr * da + base_mask) >> base_shift,
+                              (cg * da + base_mask) >> base_shift,
+                              (cb * da + base_mask) >> base_shift,
+                              (ca * da + base_mask) >> base_shift,
+                              cover);
+    }
+};
 
-        static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p,
-                                         unsigned cr, unsigned cg, unsigned cb,
-                                         unsigned ca,
-                                         unsigned cover)
-        {
-            unsigned da = p[order_type::A];
-            BlenderPre::blend_pix(p,
-                                  (cr * da + base_mask) >> base_shift,
-                                  (cg * da + base_mask) >> base_shift,
-                                  (cb * da + base_mask) >> base_shift,
-                                  (ca * da + base_mask) >> base_shift,
-                                  cover);
-        }
-    };
 
 
 
 
 
+//===============================================copy_or_blend_rgba_wrapper
+template<class Blender> struct copy_or_blend_rgba_wrapper
+{
+    typedef typename Blender::color_type color_type;
+    typedef typename Blender::order_type order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
+    {
+        base_shift = color_type::base_shift,
+        base_scale = color_type::base_scale,
+        base_mask  = color_type::base_mask
+    };
 
-    //===============================================copy_or_blend_rgba_wrapper
-    template<class Blender> struct copy_or_blend_rgba_wrapper
+    //--------------------------------------------------------------------
+    static AGG_INLINE void copy_or_blend_pix(value_type* p,
+                                             unsigned cr, unsigned cg, unsigned cb,
+                                             unsigned alpha)
     {
-        typedef typename Blender::color_type color_type;
-        typedef typename Blender::order_type order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
+        if(alpha)
         {
-            base_shift = color_type::base_shift,
-            base_scale = color_type::base_scale,
-            base_mask  = color_type::base_mask
-        };
+            if(alpha == base_mask)
+            {
+                p[order_type::R] = cr;
+                p[order_type::G] = cg;
+                p[order_type::B] = cb;
+                p[order_type::A] = base_mask;
+            }
+            else
+            {
+                Blender::blend_pix(p, cr, cg, cb, alpha);
+            }
+        }
+    }
 
-        //--------------------------------------------------------------------
-        static AGG_INLINE void copy_or_blend_pix(value_type* p,
-                                                 unsigned cr, unsigned cg, unsigned cb,
-                                                 unsigned alpha)
+    //--------------------------------------------------------------------
+    static AGG_INLINE void copy_or_blend_pix(value_type* p,
+                                             unsigned cr, unsigned cg, unsigned cb,
+                                             unsigned alpha,
+                                             unsigned cover)
+    {
+        if(cover == 255)
+        {
+            copy_or_blend_pix(p, cr, cg, cb, alpha);
+        }
+        else
         {
             if(alpha)
             {
+                alpha = (alpha * (cover + 1)) >> 8;
                 if(alpha == base_mask)
                 {
                     p[order_type::R] = cr;
@@ -1946,401 +2037,389 @@ namespace agg
                 }
                 else
                 {
-                    Blender::blend_pix(p, cr, cg, cb, alpha);
-                }
-            }
-        }
-
-        //--------------------------------------------------------------------
-        static AGG_INLINE void copy_or_blend_pix(value_type* p,
-                                                 unsigned cr, unsigned cg, unsigned cb,
-                                                 unsigned alpha,
-                                                 unsigned cover)
-        {
-            if(cover == 255)
-            {
-                copy_or_blend_pix(p, cr, cg, cb, alpha);
-            }
-            else
-            {
-                if(alpha)
-                {
-                    alpha = (alpha * (cover + 1)) >> 8;
-                    if(alpha == base_mask)
-                    {
-                        p[order_type::R] = cr;
-                        p[order_type::G] = cg;
-                        p[order_type::B] = cb;
-                        p[order_type::A] = base_mask;
-                    }
-                    else
-                    {
-                        Blender::blend_pix(p, cr, cg, cb, alpha, cover);
-                    }
+                    Blender::blend_pix(p, cr, cg, cb, alpha, cover);
                 }
             }
         }
-    };
+    }
+};
 
 
 
 
 
 
-    //=================================================pixfmt_alpha_blend_rgba
-    template<class Blender, class RenBuf, class PixelT = int32u>
-    class pixfmt_alpha_blend_rgba
+//=================================================pixfmt_alpha_blend_rgba
+template<class Blender, class RenBuf, class PixelT = int32u>
+class pixfmt_alpha_blend_rgba
+{
+public:
+    typedef RenBuf   rbuf_type;
+    typedef typename rbuf_type::row_data row_data;
+    typedef PixelT   pixel_type;
+    typedef Blender  blender_type;
+    typedef typename blender_type::color_type color_type;
+    typedef typename blender_type::order_type order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    typedef copy_or_blend_rgba_wrapper<blender_type> cob_type;
+    enum base_scale_e
     {
-    public:
-        typedef RenBuf   rbuf_type;
-        typedef typename rbuf_type::row_data row_data;
-        typedef PixelT   pixel_type;
-        typedef Blender  blender_type;
-        typedef typename blender_type::color_type color_type;
-        typedef typename blender_type::order_type order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        typedef copy_or_blend_rgba_wrapper<blender_type> cob_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_scale = color_type::base_scale,
-            base_mask  = color_type::base_mask,
-            pix_width  = sizeof(pixel_type)
-        };
+        base_shift = color_type::base_shift,
+        base_scale = color_type::base_scale,
+        base_mask  = color_type::base_mask,
+        pix_width  = sizeof(pixel_type)
+    };
 
-        //--------------------------------------------------------------------
-        pixfmt_alpha_blend_rgba() : m_rbuf(0) {}
-        explicit pixfmt_alpha_blend_rgba(rbuf_type& rb) : m_rbuf(&rb) {}
-        void attach(rbuf_type& rb) { m_rbuf = &rb; }
+    //--------------------------------------------------------------------
+    pixfmt_alpha_blend_rgba() : m_rbuf(0) {}
+    explicit pixfmt_alpha_blend_rgba(rbuf_type& rb) : m_rbuf(&rb) {}
+    void attach(rbuf_type& rb) { m_rbuf = &rb; }
 
-        //--------------------------------------------------------------------
-        template<class PixFmt>
-        bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2)
-        {
-            rect_i r(x1, y1, x2, y2);
-            if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1)))
-            {
-                int stride = pixf.stride();
-                m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1),
-                               (r.x2 - r.x1) + 1,
-                               (r.y2 - r.y1) + 1,
-                               stride);
-                return true;
-            }
-            return false;
-        }
+    //--------------------------------------------------------------------
+    template<class PixFmt>
+    bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2)
+    {
+        rect_i r(x1, y1, x2, y2);
+        if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1)))
+        {
+            int stride = pixf.stride();
+            m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1),
+                           (r.x2 - r.x1) + 1,
+                           (r.y2 - r.y1) + 1,
+                           stride);
+            return true;
+        }
+        return false;
+    }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE unsigned width()  const { return m_rbuf->width();  }
+    AGG_INLINE unsigned height() const { return m_rbuf->height(); }
+    AGG_INLINE int      stride() const { return m_rbuf->stride(); }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE       int8u* row_ptr(int y)       { return m_rbuf->row_ptr(y); }
+    AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); }
+    AGG_INLINE row_data     row(int y)     const { return m_rbuf->row(y); }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE int8u* pix_ptr(int x, int y)
+    {
+        return m_rbuf->row_ptr(y) + x * pix_width;
+    }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE unsigned width()  const { return m_rbuf->width();  }
-        AGG_INLINE unsigned height() const { return m_rbuf->height(); }
-        AGG_INLINE int      stride() const { return m_rbuf->stride(); }
+    AGG_INLINE const int8u* pix_ptr(int x, int y) const
+    {
+        return m_rbuf->row_ptr(y) + x * pix_width;
+    }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE       int8u* row_ptr(int y)       { return m_rbuf->row_ptr(y); }
-        AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); }
-        AGG_INLINE row_data     row(int y)     const { return m_rbuf->row(y); }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE int8u* pix_ptr(int x, int y)
+    //--------------------------------------------------------------------
+    AGG_INLINE static void make_pix(int8u* p, const color_type& c)
+    {
+        ((value_type*)p)[order_type::R] = c.r;
+        ((value_type*)p)[order_type::G] = c.g;
+        ((value_type*)p)[order_type::B] = c.b;
+        ((value_type*)p)[order_type::A] = c.a;
+    }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE color_type pixel(int x, int y) const
+    {
+        const value_type* p = (const value_type*)m_rbuf->row_ptr(y);
+        if(p)
         {
-            return m_rbuf->row_ptr(y) + x * pix_width;
-        }
-
-        AGG_INLINE const int8u* pix_ptr(int x, int y) const
-        {
-            return m_rbuf->row_ptr(y) + x * pix_width;
+            p += x << 2;
+            return color_type(p[order_type::R],
+                              p[order_type::G],
+                              p[order_type::B],
+                              p[order_type::A]);
         }
+        return color_type::no_color();
+    }
 
+    //--------------------------------------------------------------------
+    AGG_INLINE void copy_pixel(int x, int y, const color_type& c)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2);
+        p[order_type::R] = c.r;
+        p[order_type::G] = c.g;
+        p[order_type::B] = c.b;
+        p[order_type::A] = c.a;
+    }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover)
+    {
+        cob_type::copy_or_blend_pix(
+            (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2),
+            c.r, c.g, c.b, c.a,
+            cover);
+    }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE static void make_pix(int8u* p, const color_type& c)
-        {
-            ((value_type*)p)[order_type::R] = c.r;
-            ((value_type*)p)[order_type::G] = c.g;
-            ((value_type*)p)[order_type::B] = c.b;
-            ((value_type*)p)[order_type::A] = c.a;
-        }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE color_type pixel(int x, int y) const
+    //--------------------------------------------------------------------
+    AGG_INLINE void copy_hline(int x, int y,
+                               unsigned len,
+                               const color_type& c)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        pixel_type v;
+        ((value_type*)&v)[order_type::R] = c.r;
+        ((value_type*)&v)[order_type::G] = c.g;
+        ((value_type*)&v)[order_type::B] = c.b;
+        ((value_type*)&v)[order_type::A] = c.a;
+        do
         {
-            const value_type* p = (const value_type*)m_rbuf->row_ptr(y);
-            if(p)
-            {
-                p += x << 2;
-                return color_type(p[order_type::R],
-                                  p[order_type::G],
-                                  p[order_type::B],
-                                  p[order_type::A]);
-            }
-            return color_type::no_color();
+            *(pixel_type*)p = v;
+            p += 4;
         }
+        while(--len);
+    }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE void copy_pixel(int x, int y, const color_type& c)
-        {
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2);
-            p[order_type::R] = c.r;
-            p[order_type::G] = c.g;
-            p[order_type::B] = c.b;
-            p[order_type::A] = c.a;
-        }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover)
+    //--------------------------------------------------------------------
+    AGG_INLINE void copy_vline(int x, int y,
+                               unsigned len,
+                               const color_type& c)
+    {
+        pixel_type v;
+        ((value_type*)&v)[order_type::R] = c.r;
+        ((value_type*)&v)[order_type::G] = c.g;
+        ((value_type*)&v)[order_type::B] = c.b;
+        ((value_type*)&v)[order_type::A] = c.a;
+        do
         {
-            cob_type::copy_or_blend_pix(
-                (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2),
-                c.r, c.g, c.b, c.a,
-                cover);
+            value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+            *(pixel_type*)p = v;
         }
+        while(--len);
+    }
 
 
-        //--------------------------------------------------------------------
-        AGG_INLINE void copy_hline(int x, int y,
-                                   unsigned len,
-                                   const color_type& c)
+    //--------------------------------------------------------------------
+    void blend_hline(int x, int y,
+                     unsigned len,
+                     const color_type& c,
+                     int8u cover)
+    {
+        if (c.a)
         {
             value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-            pixel_type v;
-            ((value_type*)&v)[order_type::R] = c.r;
-            ((value_type*)&v)[order_type::G] = c.g;
-            ((value_type*)&v)[order_type::B] = c.b;
-            ((value_type*)&v)[order_type::A] = c.a;
-            do
-            {
-                *(pixel_type*)p = v;
-                p += 4;
-            }
-            while(--len);
-        }
-
-
-        //--------------------------------------------------------------------
-        AGG_INLINE void copy_vline(int x, int y,
-                                   unsigned len,
-                                   const color_type& c)
-        {
-            pixel_type v;
-            ((value_type*)&v)[order_type::R] = c.r;
-            ((value_type*)&v)[order_type::G] = c.g;
-            ((value_type*)&v)[order_type::B] = c.b;
-            ((value_type*)&v)[order_type::A] = c.a;
-            do
-            {
-                value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                *(pixel_type*)p = v;
+            calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+            if(alpha == base_mask)
+            {
+                pixel_type v;
+                ((value_type*)&v)[order_type::R] = c.r;
+                ((value_type*)&v)[order_type::G] = c.g;
+                ((value_type*)&v)[order_type::B] = c.b;
+                ((value_type*)&v)[order_type::A] = c.a;
+                do
+                {
+                    *(pixel_type*)p = v;
+                    p += 4;
+                }
+                while(--len);
             }
-            while(--len);
-        }
-
-
-        //--------------------------------------------------------------------
-        void blend_hline(int x, int y,
-                         unsigned len,
-                         const color_type& c,
-                         int8u cover)
-        {
-            if (c.a)
+            else
             {
-                value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-                calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
-                if(alpha == base_mask)
+                if(cover == 255)
                 {
-                    pixel_type v;
-                    ((value_type*)&v)[order_type::R] = c.r;
-                    ((value_type*)&v)[order_type::G] = c.g;
-                    ((value_type*)&v)[order_type::B] = c.b;
-                    ((value_type*)&v)[order_type::A] = c.a;
                     do
                     {
-                        *(pixel_type*)p = v;
+                        blender_type::blend_pix(p, c.r, c.g, c.b, alpha);
                         p += 4;
                     }
                     while(--len);
                 }
                 else
                 {
-                    if(cover == 255)
-                    {
-                        do
-                        {
-                            blender_type::blend_pix(p, c.r, c.g, c.b, alpha);
-                            p += 4;
-                        }
-                        while(--len);
-                    }
-                    else
+                    do
                     {
-                        do
-                        {
-                            blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover);
-                            p += 4;
-                        }
-                        while(--len);
+                        blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover);
+                        p += 4;
                     }
+                    while(--len);
                 }
             }
         }
+    }
 
 
-        //--------------------------------------------------------------------
-        void blend_vline(int x, int y,
-                         unsigned len,
-                         const color_type& c,
-                         int8u cover)
+    //--------------------------------------------------------------------
+    void blend_vline(int x, int y,
+                     unsigned len,
+                     const color_type& c,
+                     int8u cover)
+    {
+        if (c.a)
         {
-            if (c.a)
+            value_type* p;
+            calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+            if(alpha == base_mask)
+            {
+                pixel_type v;
+                ((value_type*)&v)[order_type::R] = c.r;
+                ((value_type*)&v)[order_type::G] = c.g;
+                ((value_type*)&v)[order_type::B] = c.b;
+                ((value_type*)&v)[order_type::A] = c.a;
+                do
+                {
+                    p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+                    *(pixel_type*)p = v;
+                }
+                while(--len);
+            }
+            else
             {
-                value_type* p;
-                calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
-                if(alpha == base_mask)
+                if(cover == 255)
                 {
-                    pixel_type v;
-                    ((value_type*)&v)[order_type::R] = c.r;
-                    ((value_type*)&v)[order_type::G] = c.g;
-                    ((value_type*)&v)[order_type::B] = c.b;
-                    ((value_type*)&v)[order_type::A] = c.a;
                     do
                     {
                         p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                        *(pixel_type*)p = v;
+                        blender_type::blend_pix(p, c.r, c.g, c.b, alpha);
                     }
                     while(--len);
                 }
                 else
                 {
-                    if(cover == 255)
-                    {
-                        do
-                        {
-                            p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                            blender_type::blend_pix(p, c.r, c.g, c.b, alpha);
-                        }
-                        while(--len);
-                    }
-                    else
+                    do
                     {
-                        do
-                        {
-                            p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                            blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover);
-                        }
-                        while(--len);
+                        p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+                        blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover);
                     }
+                    while(--len);
                 }
             }
         }
+    }
 
 
-        //--------------------------------------------------------------------
-        void blend_solid_hspan(int x, int y,
-                               unsigned len,
-                               const color_type& c,
-                               const int8u* covers)
+    //--------------------------------------------------------------------
+    void blend_solid_hspan(int x, int y,
+                           unsigned len,
+                           const color_type& c,
+                           const int8u* covers)
+    {
+        if (c.a)
         {
-            if (c.a)
+            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+            do
             {
-                value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-                do
+                calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+                if(alpha == base_mask)
                 {
-                    calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
-                    if(alpha == base_mask)
-                    {
-                        p[order_type::R] = c.r;
-                        p[order_type::G] = c.g;
-                        p[order_type::B] = c.b;
-                        p[order_type::A] = base_mask;
-                    }
-                    else
-                    {
-                        blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers);
-                    }
-                    p += 4;
-                    ++covers;
+                    p[order_type::R] = c.r;
+                    p[order_type::G] = c.g;
+                    p[order_type::B] = c.b;
+                    p[order_type::A] = base_mask;
                 }
-                while(--len);
+                else
+                {
+                    blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers);
+                }
+                p += 4;
+                ++covers;
             }
+            while(--len);
         }
+    }
 
 
-        //--------------------------------------------------------------------
-        void blend_solid_vspan(int x, int y,
-                               unsigned len,
-                               const color_type& c,
-                               const int8u* covers)
+    //--------------------------------------------------------------------
+    void blend_solid_vspan(int x, int y,
+                           unsigned len,
+                           const color_type& c,
+                           const int8u* covers)
+    {
+        if (c.a)
         {
-            if (c.a)
+            do
             {
-                do
+                value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+                calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+                if(alpha == base_mask)
                 {
-                    value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                    calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
-                    if(alpha == base_mask)
-                    {
-                        p[order_type::R] = c.r;
-                        p[order_type::G] = c.g;
-                        p[order_type::B] = c.b;
-                        p[order_type::A] = base_mask;
-                    }
-                    else
-                    {
-                        blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers);
-                    }
-                    ++covers;
+                    p[order_type::R] = c.r;
+                    p[order_type::G] = c.g;
+                    p[order_type::B] = c.b;
+                    p[order_type::A] = base_mask;
                 }
-                while(--len);
+                else
+                {
+                    blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers);
+                }
+                ++covers;
             }
+            while(--len);
         }
+    }
 
 
-        //--------------------------------------------------------------------
-        void copy_color_hspan(int x, int y,
-                              unsigned len,
-                              const color_type* colors)
+    //--------------------------------------------------------------------
+    void copy_color_hspan(int x, int y,
+                          unsigned len,
+                          const color_type* colors)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        do
         {
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-            do
-            {
-                p[order_type::R] = colors->r;
-                p[order_type::G] = colors->g;
-                p[order_type::B] = colors->b;
-                p[order_type::A] = colors->a;
-                ++colors;
-                p += 4;
-            }
-            while(--len);
+            p[order_type::R] = colors->r;
+            p[order_type::G] = colors->g;
+            p[order_type::B] = colors->b;
+            p[order_type::A] = colors->a;
+            ++colors;
+            p += 4;
+        }
+        while(--len);
+    }
+
+
+    //--------------------------------------------------------------------
+    void copy_color_vspan(int x, int y,
+                          unsigned len,
+                          const color_type* colors)
+    {
+        do
+        {
+            value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+            p[order_type::R] = colors->r;
+            p[order_type::G] = colors->g;
+            p[order_type::B] = colors->b;
+            p[order_type::A] = colors->a;
+            ++colors;
         }
+        while(--len);
+    }
 
 
-        //--------------------------------------------------------------------
-        void copy_color_vspan(int x, int y,
-                              unsigned len,
-                              const color_type* colors)
+    //--------------------------------------------------------------------
+    void blend_color_hspan(int x, int y,
+                           unsigned len,
+                           const color_type* colors,
+                           const int8u* covers,
+                           int8u cover)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        if(covers)
         {
             do
             {
-                value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                p[order_type::R] = colors->r;
-                p[order_type::G] = colors->g;
-                p[order_type::B] = colors->b;
-                p[order_type::A] = colors->a;
+                cob_type::copy_or_blend_pix(p,
+                                            colors->r,
+                                            colors->g,
+                                            colors->b,
+                                            colors->a,
+                                            *covers++);
+                p += 4;
                 ++colors;
             }
             while(--len);
         }
-
-
-        //--------------------------------------------------------------------
-        void blend_color_hspan(int x, int y,
-                               unsigned len,
-                               const color_type* colors,
-                               const int8u* covers,
-                               int8u cover)
+        else
         {
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-            if(covers)
+            if(cover == 255)
             {
                 do
                 {
@@ -2348,8 +2427,7 @@ namespace agg
                                                 colors->r,
                                                 colors->g,
                                                 colors->b,
-                                                colors->a,
-                                                *covers++);
+                                                colors->a);
                     p += 4;
                     ++colors;
                 }
@@ -2357,49 +2435,50 @@ namespace agg
             }
             else
             {
-                if(cover == 255)
-                {
-                    do
-                    {
-                        cob_type::copy_or_blend_pix(p,
-                                                    colors->r,
-                                                    colors->g,
-                                                    colors->b,
-                                                    colors->a);
-                        p += 4;
-                        ++colors;
-                    }
-                    while(--len);
-                }
-                else
+                do
                 {
-                    do
-                    {
-                        cob_type::copy_or_blend_pix(p,
-                                                    colors->r,
-                                                    colors->g,
-                                                    colors->b,
-                                                    colors->a,
-                                                    cover);
-                        p += 4;
-                        ++colors;
-                    }
-                    while(--len);
+                    cob_type::copy_or_blend_pix(p,
+                                                colors->r,
+                                                colors->g,
+                                                colors->b,
+                                                colors->a,
+                                                cover);
+                    p += 4;
+                    ++colors;
                 }
+                while(--len);
             }
         }
+    }
 
 
 
-        //--------------------------------------------------------------------
-        void blend_color_vspan(int x, int y,
-                               unsigned len,
-                               const color_type* colors,
-                               const int8u* covers,
-                               int8u cover)
+    //--------------------------------------------------------------------
+    void blend_color_vspan(int x, int y,
+                           unsigned len,
+                           const color_type* colors,
+                           const int8u* covers,
+                           int8u cover)
+    {
+        value_type* p;
+        if(covers)
         {
-            value_type* p;
-            if(covers)
+            do
+            {
+                p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+                cob_type::copy_or_blend_pix(p,
+                                            colors->r,
+                                            colors->g,
+                                            colors->b,
+                                            colors->a,
+                                            *covers++);
+                ++colors;
+            }
+            while(--len);
+        }
+        else
+        {
+            if(cover == 255)
             {
                 do
                 {
@@ -2408,757 +2487,740 @@ namespace agg
                                                 colors->r,
                                                 colors->g,
                                                 colors->b,
-                                                colors->a,
-                                                *covers++);
+                                                colors->a);
                     ++colors;
                 }
                 while(--len);
             }
             else
             {
-                if(cover == 255)
-                {
-                    do
-                    {
-                        p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                        cob_type::copy_or_blend_pix(p,
-                                                    colors->r,
-                                                    colors->g,
-                                                    colors->b,
-                                                    colors->a);
-                        ++colors;
-                    }
-                    while(--len);
-                }
-                else
+                do
                 {
-                    do
-                    {
-                        p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                        cob_type::copy_or_blend_pix(p,
-                                                    colors->r,
-                                                    colors->g,
-                                                    colors->b,
-                                                    colors->a,
-                                                    cover);
-                        ++colors;
-                    }
-                    while(--len);
+                    p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+                    cob_type::copy_or_blend_pix(p,
+                                                colors->r,
+                                                colors->g,
+                                                colors->b,
+                                                colors->a,
+                                                cover);
+                    ++colors;
                 }
+                while(--len);
             }
         }
+    }
 
-        //--------------------------------------------------------------------
-        template<class Function> void for_each_pixel(Function f)
+    //--------------------------------------------------------------------
+    template<class Function> void for_each_pixel(Function f)
+    {
+        unsigned y;
+        for(y = 0; y < height(); ++y)
         {
-            unsigned y;
-            for(y = 0; y < height(); ++y)
+            row_data r = m_rbuf->row(y);
+            if(r.ptr)
             {
-                row_data r = m_rbuf->row(y);
-                if(r.ptr)
+                unsigned len = r.x2 - r.x1 + 1;
+                value_type* p =
+                    (value_type*)m_rbuf->row_ptr(r.x1, y, len) + (r.x1 << 2);
+                do
                 {
-                    unsigned len = r.x2 - r.x1 + 1;
-                    value_type* p =
-                        (value_type*)m_rbuf->row_ptr(r.x1, y, len) + (r.x1 << 2);
-                    do
-                    {
-                        f(p);
-                        p += 4;
-                    }
-                    while(--len);
+                    f(p);
+                    p += 4;
                 }
+                while(--len);
             }
         }
+    }
 
-        //--------------------------------------------------------------------
-        void premultiply()
-        {
-            for_each_pixel(multiplier_rgba<color_type, order_type>::premultiply);
-        }
-
-        //--------------------------------------------------------------------
-        void demultiply()
-        {
-            for_each_pixel(multiplier_rgba<color_type, order_type>::demultiply);
-        }
+    //--------------------------------------------------------------------
+    void premultiply()
+    {
+        for_each_pixel(multiplier_rgba<color_type, order_type>::premultiply);
+    }
 
-        //--------------------------------------------------------------------
-        template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
-        {
-            for_each_pixel(apply_gamma_dir_rgba<color_type, order_type, GammaLut>(g));
-        }
+    //--------------------------------------------------------------------
+    void demultiply()
+    {
+        for_each_pixel(multiplier_rgba<color_type, order_type>::demultiply);
+    }
 
-        //--------------------------------------------------------------------
-        template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
-        {
-            for_each_pixel(apply_gamma_inv_rgba<color_type, order_type, GammaLut>(g));
-        }
+    //--------------------------------------------------------------------
+    template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
+    {
+        for_each_pixel(apply_gamma_dir_rgba<color_type, order_type, GammaLut>(g));
+    }
 
-        //--------------------------------------------------------------------
-        template<class RenBuf2> void copy_from(const RenBuf2& from,
-                                               int xdst, int ydst,
-                                               int xsrc, int ysrc,
-                                               unsigned len)
+    //--------------------------------------------------------------------
+    template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
+    {
+        for_each_pixel(apply_gamma_inv_rgba<color_type, order_type, GammaLut>(g));
+    }
+
+    //--------------------------------------------------------------------
+    template<class RenBuf2> void copy_from(const RenBuf2& from,
+                                           int xdst, int ydst,
+                                           int xsrc, int ysrc,
+                                           unsigned len)
+    {
+        const int8u* p = from.row_ptr(ysrc);
+        if(p)
+        {
+            memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width,
+                    p + xsrc * pix_width,
+                    len * pix_width);
+        }
+    }
+
+    //--------------------------------------------------------------------
+    template<class SrcPixelFormatRenderer>
+    void blend_from(const SrcPixelFormatRenderer& from,
+                    int xdst, int ydst,
+                    int xsrc, int ysrc,
+                    unsigned len,
+                    int8u cover)
+    {
+        typedef typename SrcPixelFormatRenderer::order_type src_order;
+        const value_type* psrc = (value_type*)from.row_ptr(ysrc);
+        if(psrc)
         {
-            const int8u* p = from.row_ptr(ysrc);
-            if(p)
+            psrc += xsrc << 2;
+            value_type* pdst =
+                (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
+            int incp = 4;
+            if(xdst > xsrc)
             {
-                memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width,
-                        p + xsrc * pix_width,
-                        len * pix_width);
+                psrc += (len-1) << 2;
+                pdst += (len-1) << 2;
+                incp = -4;
             }
-        }
 
-        //--------------------------------------------------------------------
-        template<class SrcPixelFormatRenderer>
-        void blend_from(const SrcPixelFormatRenderer& from,
-                        int xdst, int ydst,
-                        int xsrc, int ysrc,
-                        unsigned len,
-                        int8u cover)
-        {
-            typedef typename SrcPixelFormatRenderer::order_type src_order;
-            const value_type* psrc = (value_type*)from.row_ptr(ysrc);
-            if(psrc)
+            if(cover == 255)
             {
-                psrc += xsrc << 2;
-                value_type* pdst =
-                    (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
-                int incp = 4;
-                if(xdst > xsrc)
-                {
-                    psrc += (len-1) << 2;
-                    pdst += (len-1) << 2;
-                    incp = -4;
-                }
-
-                if(cover == 255)
+                do
                 {
-                    do
-                    {
-                        cob_type::copy_or_blend_pix(pdst,
-                                                    psrc[src_order::R],
-                                                    psrc[src_order::G],
-                                                    psrc[src_order::B],
-                                                    psrc[src_order::A]);
-                        psrc += incp;
-                        pdst += incp;
-                    }
-                    while(--len);
+                    cob_type::copy_or_blend_pix(pdst,
+                                                psrc[src_order::R],
+                                                psrc[src_order::G],
+                                                psrc[src_order::B],
+                                                psrc[src_order::A]);
+                    psrc += incp;
+                    pdst += incp;
                 }
-                else
+                while(--len);
+            }
+            else
+            {
+                do
                 {
-                    do
-                    {
-                        cob_type::copy_or_blend_pix(pdst,
-                                                    psrc[src_order::R],
-                                                    psrc[src_order::G],
-                                                    psrc[src_order::B],
-                                                    psrc[src_order::A],
-                                                    cover);
-                        psrc += incp;
-                        pdst += incp;
-                    }
-                    while(--len);
+                    cob_type::copy_or_blend_pix(pdst,
+                                                psrc[src_order::R],
+                                                psrc[src_order::G],
+                                                psrc[src_order::B],
+                                                psrc[src_order::A],
+                                                cover);
+                    psrc += incp;
+                    pdst += incp;
                 }
+                while(--len);
             }
         }
+    }
 
-        //--------------------------------------------------------------------
-        template<class SrcPixelFormatRenderer>
-        void blend_from_color(const SrcPixelFormatRenderer& from,
-                              const color_type& color,
-                              int xdst, int ydst,
-                              int /*xsrc*/, int ysrc,
-                              unsigned len,
-                              int8u cover)
+    //--------------------------------------------------------------------
+    template<class SrcPixelFormatRenderer>
+    void blend_from_color(const SrcPixelFormatRenderer& from,
+                          const color_type& color,
+                          int xdst, int ydst,
+                          int /*xsrc*/, int ysrc,
+                          unsigned len,
+                          int8u cover)
+    {
+        typedef typename SrcPixelFormatRenderer::value_type src_value_type;
+        const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
+        if(psrc)
         {
-            typedef typename SrcPixelFormatRenderer::value_type src_value_type;
-            const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
-            if(psrc)
+            value_type* pdst =
+                (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
+            do
+            {
+                cob_type::copy_or_blend_pix(pdst,
+                                            color.r, color.g, color.b, color.a,
+                                            (*psrc * cover + base_mask) >> base_shift);
+                ++psrc;
+                pdst += 4;
+            }
+            while(--len);
+        }
+    }
+
+    //--------------------------------------------------------------------
+    template<class SrcPixelFormatRenderer>
+    void blend_from_lut(const SrcPixelFormatRenderer& from,
+                        const color_type* color_lut,
+                        int xdst, int ydst,
+                        int /*xsrc*/, int ysrc,
+                        unsigned len,
+                        int8u cover)
+    {
+        typedef typename SrcPixelFormatRenderer::value_type src_value_type;
+        const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
+        if(psrc)
+        {
+            value_type* pdst =
+                (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
+
+            if(cover == 255)
             {
-                value_type* pdst =
-                    (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
                 do
                 {
+                    const color_type& color = color_lut[*psrc];
                     cob_type::copy_or_blend_pix(pdst,
-                                                color.r, color.g, color.b, color.a,
-                                                (*psrc * cover + base_mask) >> base_shift);
+                                                color.r, color.g, color.b, color.a);
                     ++psrc;
                     pdst += 4;
                 }
                 while(--len);
             }
-        }
-
-        //--------------------------------------------------------------------
-        template<class SrcPixelFormatRenderer>
-        void blend_from_lut(const SrcPixelFormatRenderer& from,
-                            const color_type* color_lut,
-                            int xdst, int ydst,
-                            int /*xsrc*/, int ysrc,
-                            unsigned len,
-                            int8u cover)
-        {
-            typedef typename SrcPixelFormatRenderer::value_type src_value_type;
-            const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
-            if(psrc)
+            else
             {
-                value_type* pdst =
-                    (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
-
-                if(cover == 255)
-                {
-                    do
-                    {
-                        const color_type& color = color_lut[*psrc];
-                        cob_type::copy_or_blend_pix(pdst,
-                                                    color.r, color.g, color.b, color.a);
-                        ++psrc;
-                        pdst += 4;
-                    }
-                    while(--len);
-                }
-                else
+                do
                 {
-                    do
-                    {
-                        const color_type& color = color_lut[*psrc];
-                        cob_type::copy_or_blend_pix(pdst,
-                                                    color.r, color.g, color.b, color.a,
-                                                    cover);
-                        ++psrc;
-                        pdst += 4;
-                    }
-                    while(--len);
+                    const color_type& color = color_lut[*psrc];
+                    cob_type::copy_or_blend_pix(pdst,
+                                                color.r, color.g, color.b, color.a,
+                                                cover);
+                    ++psrc;
+                    pdst += 4;
                 }
+                while(--len);
             }
         }
+    }
 
-    private:
-        rbuf_type* m_rbuf;
-    };
+private:
+    rbuf_type* m_rbuf;
+};
 
 
 
 
-    //================================================pixfmt_custom_blend_rgba
-    template<class Blender, class RenBuf> class pixfmt_custom_blend_rgba
+//================================================pixfmt_custom_blend_rgba
+template<class Blender, class RenBuf> class pixfmt_custom_blend_rgba
+{
+public:
+    typedef RenBuf   rbuf_type;
+    typedef typename rbuf_type::row_data row_data;
+    typedef Blender  blender_type;
+    typedef typename blender_type::color_type color_type;
+    typedef typename blender_type::order_type order_type;
+    typedef typename color_type::value_type value_type;
+    typedef typename color_type::calc_type calc_type;
+    enum base_scale_e
     {
-    public:
-        typedef RenBuf   rbuf_type;
-        typedef typename rbuf_type::row_data row_data;
-        typedef Blender  blender_type;
-        typedef typename blender_type::color_type color_type;
-        typedef typename blender_type::order_type order_type;
-        typedef typename color_type::value_type value_type;
-        typedef typename color_type::calc_type calc_type;
-        enum base_scale_e
-        {
-            base_shift = color_type::base_shift,
-            base_scale = color_type::base_scale,
-            base_mask  = color_type::base_mask,
-            pix_width  = sizeof(value_type) * 4
-        };
+        base_shift = color_type::base_shift,
+        base_scale = color_type::base_scale,
+        base_mask  = color_type::base_mask,
+        pix_width  = sizeof(value_type) * 4
+    };
 
 
-        //--------------------------------------------------------------------
-        pixfmt_custom_blend_rgba() : m_rbuf(0), m_comp_op(3) {}
-        explicit pixfmt_custom_blend_rgba(rbuf_type& rb, unsigned comp_op=3) :
-            m_rbuf(&rb),
-            m_comp_op(comp_op)
-        {}
-        void attach(rbuf_type& rb) { m_rbuf = &rb; }
+    //--------------------------------------------------------------------
+    pixfmt_custom_blend_rgba() : m_rbuf(0), m_comp_op(3) {}
+    explicit pixfmt_custom_blend_rgba(rbuf_type& rb, unsigned comp_op=3) :
+        m_rbuf(&rb),
+        m_comp_op(comp_op)
+    {}
+    void attach(rbuf_type& rb) { m_rbuf = &rb; }
 
-        //--------------------------------------------------------------------
-        template<class PixFmt>
-        bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2)
-        {
-            rect_i r(x1, y1, x2, y2);
-            if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1)))
-            {
-                int stride = pixf.stride();
-                m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1),
-                               (r.x2 - r.x1) + 1,
-                               (r.y2 - r.y1) + 1,
-                               stride);
-                return true;
-            }
-            return false;
-        }
+    //--------------------------------------------------------------------
+    template<class PixFmt>
+    bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2)
+    {
+        rect_i r(x1, y1, x2, y2);
+        if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1)))
+        {
+            int stride = pixf.stride();
+            m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1),
+                           (r.x2 - r.x1) + 1,
+                           (r.y2 - r.y1) + 1,
+                           stride);
+            return true;
+        }
+        return false;
+    }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE unsigned width()  const { return m_rbuf->width();  }
+    AGG_INLINE unsigned height() const { return m_rbuf->height(); }
+    AGG_INLINE int      stride() const { return m_rbuf->stride(); }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE       int8u* row_ptr(int y)       { return m_rbuf->row_ptr(y); }
+    AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); }
+    AGG_INLINE row_data     row(int y)     const { return m_rbuf->row(y); }
+
+    //--------------------------------------------------------------------
+    AGG_INLINE int8u* pix_ptr(int x, int y)
+    {
+        return m_rbuf->row_ptr(y) + x * pix_width;
+    }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE unsigned width()  const { return m_rbuf->width();  }
-        AGG_INLINE unsigned height() const { return m_rbuf->height(); }
-        AGG_INLINE int      stride() const { return m_rbuf->stride(); }
+    AGG_INLINE const int8u* pix_ptr(int x, int y) const
+    {
+        return m_rbuf->row_ptr(y) + x * pix_width;
+    }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE       int8u* row_ptr(int y)       { return m_rbuf->row_ptr(y); }
-        AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); }
-        AGG_INLINE row_data     row(int y)     const { return m_rbuf->row(y); }
+    //--------------------------------------------------------------------
+    void comp_op(unsigned op) { m_comp_op = op; }
+    unsigned comp_op() const  { return m_comp_op; }
 
-        //--------------------------------------------------------------------
-        AGG_INLINE int8u* pix_ptr(int x, int y)
+    //--------------------------------------------------------------------
+    AGG_INLINE static void make_pix(int8u* p, const color_type& c)
+    {
+        ((value_type*)p)[order_type::R] = c.r;
+        ((value_type*)p)[order_type::G] = c.g;
+        ((value_type*)p)[order_type::B] = c.b;
+        ((value_type*)p)[order_type::A] = c.a;
+    }
+
+    //--------------------------------------------------------------------
+    color_type pixel(int x, int y) const
+    {
+        const value_type* p = (value_type*)m_rbuf->row_ptr(y) + (x << 2);
+        return color_type(p[order_type::R],
+                          p[order_type::G],
+                          p[order_type::B],
+                          p[order_type::A]);
+    }
+
+    //--------------------------------------------------------------------
+    void copy_pixel(int x, int y, const color_type& c)
+    {
+        blender_type::blend_pix(
+            m_comp_op,
+            (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2),
+            c.r, c.g, c.b, c.a, 255);
+    }
+
+    //--------------------------------------------------------------------
+    void blend_pixel(int x, int y, const color_type& c, int8u cover)
+    {
+        blender_type::blend_pix(
+            m_comp_op,
+            (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2),
+            c.r, c.g, c.b, c.a,
+            cover);
+    }
+
+    //--------------------------------------------------------------------
+    void copy_hline(int x, int y, unsigned len, const color_type& c)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);;
+        do
         {
-            return m_rbuf->row_ptr(y) + x * pix_width;
+            blender_type::blend_pix(m_comp_op, p, c.r, c.g, c.b, c.a, 255);
+            p += 4;
         }
+        while(--len);
+    }
 
-        AGG_INLINE const int8u* pix_ptr(int x, int y) const
+    //--------------------------------------------------------------------
+    void copy_vline(int x, int y, unsigned len, const color_type& c)
+    {
+        do
         {
-            return m_rbuf->row_ptr(y) + x * pix_width;
+            blender_type::blend_pix(
+                m_comp_op,
+                (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
+                c.r, c.g, c.b, c.a, 255);
         }
+        while(--len);
+    }
 
-        //--------------------------------------------------------------------
-        void comp_op(unsigned op) { m_comp_op = op; }
-        unsigned comp_op() const  { return m_comp_op; }
+    //--------------------------------------------------------------------
+    void blend_hline(int x, int y, unsigned len,
+                     const color_type& c, int8u cover)
+    {
 
-        //--------------------------------------------------------------------
-        AGG_INLINE static void make_pix(int8u* p, const color_type& c)
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        do
         {
-            ((value_type*)p)[order_type::R] = c.r;
-            ((value_type*)p)[order_type::G] = c.g;
-            ((value_type*)p)[order_type::B] = c.b;
-            ((value_type*)p)[order_type::A] = c.a;
+            blender_type::blend_pix(m_comp_op, p, c.r, c.g, c.b, c.a, cover);
+            p += 4;
         }
+        while(--len);
+    }
 
-        //--------------------------------------------------------------------
-        color_type pixel(int x, int y) const
-        {
-            const value_type* p = (value_type*)m_rbuf->row_ptr(y) + (x << 2);
-            return color_type(p[order_type::R],
-                              p[order_type::G],
-                              p[order_type::B],
-                              p[order_type::A]);
-        }
-
-        //--------------------------------------------------------------------
-        void copy_pixel(int x, int y, const color_type& c)
-        {
-            blender_type::blend_pix(
-                m_comp_op,
-                (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2),
-                c.r, c.g, c.b, c.a, 255);
-        }
+    //--------------------------------------------------------------------
+    void blend_vline(int x, int y, unsigned len,
+                     const color_type& c, int8u cover)
+    {
 
-        //--------------------------------------------------------------------
-        void blend_pixel(int x, int y, const color_type& c, int8u cover)
+        do
         {
             blender_type::blend_pix(
                 m_comp_op,
-                (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2),
+                (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
                 c.r, c.g, c.b, c.a,
                 cover);
         }
+        while(--len);
+    }
 
-        //--------------------------------------------------------------------
-        void copy_hline(int x, int y, unsigned len, const color_type& c)
+    //--------------------------------------------------------------------
+    void blend_solid_hspan(int x, int y, unsigned len,
+                           const color_type& c, const int8u* covers)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        do
         {
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);;
-            do
-            {
-                blender_type::blend_pix(m_comp_op, p, c.r, c.g, c.b, c.a, 255);
-                p += 4;
-            }
-            while(--len);
+            blender_type::blend_pix(m_comp_op,
+                                    p, c.r, c.g, c.b, c.a,
+                                    *covers++);
+            p += 4;
         }
+        while(--len);
+    }
 
-        //--------------------------------------------------------------------
-        void copy_vline(int x, int y, unsigned len, const color_type& c)
+    //--------------------------------------------------------------------
+    void blend_solid_vspan(int x, int y, unsigned len,
+                           const color_type& c, const int8u* covers)
+    {
+        do
         {
-            do
-            {
-                blender_type::blend_pix(
-                    m_comp_op,
-                    (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
-                    c.r, c.g, c.b, c.a, 255);
-            }
-            while(--len);
+            blender_type::blend_pix(
+                m_comp_op,
+                (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
+                c.r, c.g, c.b, c.a,
+                *covers++);
         }
+        while(--len);
+    }
 
-        //--------------------------------------------------------------------
-        void blend_hline(int x, int y, unsigned len,
-                         const color_type& c, int8u cover)
-        {
-
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-            do
-            {
-                blender_type::blend_pix(m_comp_op, p, c.r, c.g, c.b, c.a, cover);
-                p += 4;
-            }
-            while(--len);
-        }
+    //--------------------------------------------------------------------
+    void copy_color_hspan(int x, int y,
+                          unsigned len,
+                          const color_type* colors)
+    {
 
-        //--------------------------------------------------------------------
-        void blend_vline(int x, int y, unsigned len,
-                         const color_type& c, int8u cover)
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        do
         {
-
-            do
-            {
-                blender_type::blend_pix(
-                    m_comp_op,
-                    (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
-                    c.r, c.g, c.b, c.a,
-                    cover);
-            }
-            while(--len);
+            p[order_type::R] = colors->r;
+            p[order_type::G] = colors->g;
+            p[order_type::B] = colors->b;
+            p[order_type::A] = colors->a;
+            ++colors;
+            p += 4;
         }
+        while(--len);
+    }
 
-        //--------------------------------------------------------------------
-        void blend_solid_hspan(int x, int y, unsigned len,
-                               const color_type& c, const int8u* covers)
+    //--------------------------------------------------------------------
+    void copy_color_vspan(int x, int y,
+                          unsigned len,
+                          const color_type* colors)
+    {
+        do
+        {
+            value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
+            p[order_type::R] = colors->r;
+            p[order_type::G] = colors->g;
+            p[order_type::B] = colors->b;
+            p[order_type::A] = colors->a;
+            ++colors;
+        }
+        while(--len);
+    }
+
+    //--------------------------------------------------------------------
+    void blend_color_hspan(int x, int y, unsigned len,
+                           const color_type* colors,
+                           const int8u* covers,
+                           int8u cover)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        do
+        {
+            blender_type::blend_pix(m_comp_op,
+                                    p,
+                                    colors->r,
+                                    colors->g,
+                                    colors->b,
+                                    colors->a,
+                                    covers ? *covers++ : cover);
+            p += 4;
+            ++colors;
+        }
+        while(--len);
+    }
+
+    //--------------------------------------------------------------------
+    void blend_color_hspan_alpha(int x, int y, unsigned len,
+                                 const color_type* colors,
+                                 value_type alpha,
+                                 const int8u* covers,
+                                 int8u cover)
+    {
+        value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
+        do
+        {
+            blender_type::blend_pix(m_comp_op,
+                                    p,
+                                    (colors->r * alpha + 255) >> 8,
+                                    (colors->g * alpha + 255) >> 8,
+                                    (colors->b * alpha + 255) >> 8,
+                                    (colors->a * alpha + 255) >> 8,
+                                    covers ? *covers++ : cover);
+            p += 4;
+            ++colors;
+        }
+        while(--len);
+    }
+
+
+    //--------------------------------------------------------------------
+    void blend_color_vspan(int x, int y, unsigned len,
+                           const color_type* colors,
+                           const int8u* covers,
+                           int8u cover)
+    {
+        do
         {
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-            do
-            {
-                blender_type::blend_pix(m_comp_op,
-                                        p, c.r, c.g, c.b, c.a,
-                                        *covers++);
-                p += 4;
-            }
-            while(--len);
+            blender_type::blend_pix(
+                m_comp_op,
+                (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
+                colors->r,
+                colors->g,
+                colors->b,
+                colors->a,
+                covers ? *covers++ : cover);
+            ++colors;
         }
+        while(--len);
+
+    }
 
-        //--------------------------------------------------------------------
-        void blend_solid_vspan(int x, int y, unsigned len,
-                               const color_type& c, const int8u* covers)
+    //--------------------------------------------------------------------
+    template<class Function> void for_each_pixel(Function f)
+    {
+        unsigned y;
+        for(y = 0; y < height(); ++y)
         {
-            do
+            row_data r = m_rbuf->row(y);
+            if(r.ptr)
             {
-                blender_type::blend_pix(
-                    m_comp_op,
-                    (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
-                    c.r, c.g, c.b, c.a,
-                    *covers++);
+                unsigned len = r.x2 - r.x1 + 1;
+                value_type* p =
+                    (value_type*)m_rbuf->row_ptr(r.x1, y, len) + (r.x1 << 2);
+                do
+                {
+                    f(p);
+                    p += 4;
+                }
+                while(--len);
             }
-            while(--len);
         }
+    }
 
-        //--------------------------------------------------------------------
-        void copy_color_hspan(int x, int y,
-                              unsigned len,
-                              const color_type* colors)
-        {
+    //--------------------------------------------------------------------
+    void premultiply()
+    {
+        for_each_pixel(multiplier_rgba<color_type, order_type>::premultiply);
+    }
 
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-            do
-            {
-                p[order_type::R] = colors->r;
-                p[order_type::G] = colors->g;
-                p[order_type::B] = colors->b;
-                p[order_type::A] = colors->a;
-                ++colors;
-                p += 4;
-            }
-            while(--len);
-        }
+    //--------------------------------------------------------------------
+    void demultiply()
+    {
+        for_each_pixel(multiplier_rgba<color_type, order_type>::demultiply);
+    }
 
-        //--------------------------------------------------------------------
-        void copy_color_vspan(int x, int y,
-                              unsigned len,
-                              const color_type* colors)
-        {
-            do
-            {
-                value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2);
-                p[order_type::R] = colors->r;
-                p[order_type::G] = colors->g;
-                p[order_type::B] = colors->b;
-                p[order_type::A] = colors->a;
-                ++colors;
-            }
-            while(--len);
-        }
+    //--------------------------------------------------------------------
+    template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
+    {
+        for_each_pixel(apply_gamma_dir_rgba<color_type, order_type, GammaLut>(g));
+    }
 
-        //--------------------------------------------------------------------
-        void blend_color_hspan(int x, int y, unsigned len,
-                               const color_type* colors,
-                               const int8u* covers,
-                               int8u cover)
+    //--------------------------------------------------------------------
+    template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
+    {
+        for_each_pixel(apply_gamma_inv_rgba<color_type, order_type, GammaLut>(g));
+    }
+
+    //--------------------------------------------------------------------
+    template<class RenBuf2> void copy_from(const RenBuf2& from,
+                                           int xdst, int ydst,
+                                           int xsrc, int ysrc,
+                                           unsigned len)
+    {
+        const int8u* p = from.row_ptr(ysrc);
+        if(p)
+        {
+            memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width,
+                    p + xsrc * pix_width,
+                    len * pix_width);
+        }
+    }
+
+    //--------------------------------------------------------------------
+    template<class SrcPixelFormatRenderer>
+    void blend_from(const SrcPixelFormatRenderer& from,
+                    int xdst, int ydst,
+                    int xsrc, int ysrc,
+                    unsigned len,
+                    int8u cover)
+    {
+        typedef typename SrcPixelFormatRenderer::order_type src_order;
+        const value_type* psrc = (const value_type*)from.row_ptr(ysrc);
+        if(psrc)
         {
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
-            do
+            psrc += xsrc << 2;
+            value_type* pdst =
+                (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
+
+            int incp = 4;
+            if(xdst > xsrc)
             {
-                blender_type::blend_pix(m_comp_op,
-                                        p,
-                                        colors->r,
-                                        colors->g,
-                                        colors->b,
-                                        colors->a,
-                                        covers ? *covers++ : cover);
-                p += 4;
-                ++colors;
+                psrc += (len-1) << 2;
+                pdst += (len-1) << 2;
+                incp = -4;
             }
-            while(--len);
-        }
 
-        //--------------------------------------------------------------------
-        void blend_color_hspan_alpha(int x, int y, unsigned len,
-                                     const color_type* colors,
-                                     value_type alpha,
-                                     const int8u* covers,
-                                     int8u cover)
-        {
-            value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);
             do
             {
                 blender_type::blend_pix(m_comp_op,
-                                        p,
-                                        (colors->r * alpha + 255) >> 8,
-                                        (colors->g * alpha + 255) >> 8,
-                                        (colors->b * alpha + 255) >> 8,
-                                        (colors->a * alpha + 255) >> 8,
-                                        covers ? *covers++ : cover);
-                p += 4;
-                ++colors;
+                                        pdst,
+                                        psrc[src_order::R],
+                                        psrc[src_order::G],
+                                        psrc[src_order::B],
+                                        psrc[src_order::A],
+                                        cover);
+                psrc += incp;
+                pdst += incp;
             }
             while(--len);
         }
+    }
 
-
-        //--------------------------------------------------------------------
-        void blend_color_vspan(int x, int y, unsigned len,
-                               const color_type* colors,
-                               const int8u* covers,
-                               int8u cover)
+    //--------------------------------------------------------------------
+    template<class SrcPixelFormatRenderer>
+    void blend_from_color(const SrcPixelFormatRenderer& from,
+                          const color_type& color,
+                          int xdst, int ydst,
+                          int /*xsrc*/, int ysrc,
+                          unsigned len,
+                          int8u cover)
+    {
+        typedef typename SrcPixelFormatRenderer::value_type src_value_type;
+        const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
+        if(psrc)
         {
+            value_type* pdst =
+                (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
             do
             {
-                blender_type::blend_pix(
-                    m_comp_op,
-                    (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2),
-                    colors->r,
-                    colors->g,
-                    colors->b,
-                    colors->a,
-                    covers ? *covers++ : cover);
-                ++colors;
+                blender_type::blend_pix(m_comp_op,
+                                        pdst,
+                                        color.r, color.g, color.b, color.a,
+                                        (*psrc * cover + base_mask) >> base_shift);
+                ++psrc;
+                pdst += 4;
             }
             while(--len);
-
-        }
-
-        //--------------------------------------------------------------------
-        template<class Function> void for_each_pixel(Function f)
-        {
-            unsigned y;
-            for(y = 0; y < height(); ++y)
-            {
-                row_data r = m_rbuf->row(y);
-                if(r.ptr)
-                {
-                    unsigned len = r.x2 - r.x1 + 1;
-                    value_type* p =
-                        (value_type*)m_rbuf->row_ptr(r.x1, y, len) + (r.x1 << 2);
-                    do
-                    {
-                        f(p);
-                        p += 4;
-                    }
-                    while(--len);
-                }
-            }
-        }
-
-        //--------------------------------------------------------------------
-        void premultiply()
-        {
-            for_each_pixel(multiplier_rgba<color_type, order_type>::premultiply);
-        }
-
-        //--------------------------------------------------------------------
-        void demultiply()
-        {
-            for_each_pixel(multiplier_rgba<color_type, order_type>::demultiply);
-        }
-
-        //--------------------------------------------------------------------
-        template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
-        {
-            for_each_pixel(apply_gamma_dir_rgba<color_type, order_type, GammaLut>(g));
-        }
-
-        //--------------------------------------------------------------------
-        template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
-        {
-            for_each_pixel(apply_gamma_inv_rgba<color_type, order_type, GammaLut>(g));
-        }
-
-        //--------------------------------------------------------------------
-        template<class RenBuf2> void copy_from(const RenBuf2& from,
-                                               int xdst, int ydst,
-                                               int xsrc, int ysrc,
-                                               unsigned len)
-        {
-            const int8u* p = from.row_ptr(ysrc);
-            if(p)
-            {
-                memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width,
-                        p + xsrc * pix_width,
-                        len * pix_width);
-            }
         }
+    }
 
-        //--------------------------------------------------------------------
-        template<class SrcPixelFormatRenderer>
-        void blend_from(const SrcPixelFormatRenderer& from,
+    //--------------------------------------------------------------------
+    template<class SrcPixelFormatRenderer>
+    void blend_from_lut(const SrcPixelFormatRenderer& from,
+                        const color_type* color_lut,
                         int xdst, int ydst,
-                        int xsrc, int ysrc,
+                        int /*xsrc*/, int ysrc,
                         unsigned len,
                         int8u cover)
+    {
+        typedef typename SrcPixelFormatRenderer::value_type src_value_type;
+        const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
+        if(psrc)
         {
-            typedef typename SrcPixelFormatRenderer::order_type src_order;
-            const value_type* psrc = (const value_type*)from.row_ptr(ysrc);
-            if(psrc)
-            {
-                psrc += xsrc << 2;
-                value_type* pdst =
-                    (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
-
-                int incp = 4;
-                if(xdst > xsrc)
-                {
-                    psrc += (len-1) << 2;
-                    pdst += (len-1) << 2;
-                    incp = -4;
-                }
-
-                do
-                {
-                    blender_type::blend_pix(m_comp_op,
-                                            pdst,
-                                            psrc[src_order::R],
-                                            psrc[src_order::G],
-                                            psrc[src_order::B],
-                                            psrc[src_order::A],
-                                            cover);
-                    psrc += incp;
-                    pdst += incp;
-                }
-                while(--len);
-            }
-        }
-
-        //--------------------------------------------------------------------
-        template<class SrcPixelFormatRenderer>
-        void blend_from_color(const SrcPixelFormatRenderer& from,
-                              const color_type& color,
-                              int xdst, int ydst,
-                              int /*xsrc*/, int ysrc,
-                              unsigned len,
-                              int8u cover)
-        {
-            typedef typename SrcPixelFormatRenderer::value_type src_value_type;
-            const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
-            if(psrc)
-            {
-                value_type* pdst =
-                    (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
-                do
-                {
-                    blender_type::blend_pix(m_comp_op,
-                                            pdst,
-                                            color.r, color.g, color.b, color.a,
-                                            (*psrc * cover + base_mask) >> base_shift);
-                    ++psrc;
-                    pdst += 4;
-                }
-                while(--len);
-            }
-        }
-
-        //--------------------------------------------------------------------
-        template<class SrcPixelFormatRenderer>
-        void blend_from_lut(const SrcPixelFormatRenderer& from,
-                            const color_type* color_lut,
-                            int xdst, int ydst,
-                            int /*xsrc*/, int ysrc,
-                            unsigned len,
-                            int8u cover)
-        {
-            typedef typename SrcPixelFormatRenderer::value_type src_value_type;
-            const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
-            if(psrc)
+            value_type* pdst =
+                (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
+            do
             {
-                value_type* pdst =
-                    (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2);
-                do
-                {
-                    const color_type& color = color_lut[*psrc];
-                    blender_type::blend_pix(m_comp_op,
-                                            pdst,
-                                            color.r, color.g, color.b, color.a,
-                                            cover);
-                    ++psrc;
-                    pdst += 4;
-                }
-                while(--len);
+                const color_type& color = color_lut[*psrc];
+                blender_type::blend_pix(m_comp_op,
+                                        pdst,
+                                        color.r, color.g, color.b, color.a,
+                                        cover);
+                ++psrc;
+                pdst += 4;
             }
+            while(--len);
         }
+    }
 
-    private:
-        rbuf_type* m_rbuf;
-        unsigned m_comp_op;
-    };
+private:
+    rbuf_type* m_rbuf;
+    unsigned m_comp_op;
+};
 
 
 
 
-    //-----------------------------------------------------------------------
-    typedef blender_rgba<rgba8, order_rgba> blender_rgba32; //----blender_rgba32
-    typedef blender_rgba<rgba8, order_argb> blender_argb32; //----blender_argb32
-    typedef blender_rgba<rgba8, order_abgr> blender_abgr32; //----blender_abgr32
-    typedef blender_rgba<rgba8, order_bgra> blender_bgra32; //----blender_bgra32
+//-----------------------------------------------------------------------
+typedef blender_rgba<rgba8, order_rgba> blender_rgba32; //----blender_rgba32
+typedef blender_rgba<rgba8, order_argb> blender_argb32; //----blender_argb32
+typedef blender_rgba<rgba8, order_abgr> blender_abgr32; //----blender_abgr32
+typedef blender_rgba<rgba8, order_bgra> blender_bgra32; //----blender_bgra32
 
-    typedef blender_rgba_pre<rgba8, order_rgba> blender_rgba32_pre; //----blender_rgba32_pre
-    typedef blender_rgba_pre<rgba8, order_argb> blender_argb32_pre; //----blender_argb32_pre
-    typedef blender_rgba_pre<rgba8, order_abgr> blender_abgr32_pre; //----blender_abgr32_pre
-    typedef blender_rgba_pre<rgba8, order_bgra> blender_bgra32_pre; //----blender_bgra32_pre
+typedef blender_rgba_pre<rgba8, order_rgba> blender_rgba32_pre; //----blender_rgba32_pre
+typedef blender_rgba_pre<rgba8, order_argb> blender_argb32_pre; //----blender_argb32_pre
+typedef blender_rgba_pre<rgba8, order_abgr> blender_abgr32_pre; //----blender_abgr32_pre
+typedef blender_rgba_pre<rgba8, order_bgra> blender_bgra32_pre; //----blender_bgra32_pre
 
-    typedef blender_rgba_plain<rgba8, order_rgba> blender_rgba32_plain; //----blender_rgba32_plain
-    typedef blender_rgba_plain<rgba8, order_argb> blender_argb32_plain; //----blender_argb32_plain
-    typedef blender_rgba_plain<rgba8, order_abgr> blender_abgr32_plain; //----blender_abgr32_plain
-    typedef blender_rgba_plain<rgba8, order_bgra> blender_bgra32_plain; //----blender_bgra32_plain
+typedef blender_rgba_plain<rgba8, order_rgba> blender_rgba32_plain; //----blender_rgba32_plain
+typedef blender_rgba_plain<rgba8, order_argb> blender_argb32_plain; //----blender_argb32_plain
+typedef blender_rgba_plain<rgba8, order_abgr> blender_abgr32_plain; //----blender_abgr32_plain
+typedef blender_rgba_plain<rgba8, order_bgra> blender_bgra32_plain; //----blender_bgra32_plain
 
-    typedef blender_rgba<rgba16, order_rgba> blender_rgba64; //----blender_rgba64
-    typedef blender_rgba<rgba16, order_argb> blender_argb64; //----blender_argb64
-    typedef blender_rgba<rgba16, order_abgr> blender_abgr64; //----blender_abgr64
-    typedef blender_rgba<rgba16, order_bgra> blender_bgra64; //----blender_bgra64
+typedef blender_rgba<rgba16, order_rgba> blender_rgba64; //----blender_rgba64
+typedef blender_rgba<rgba16, order_argb> blender_argb64; //----blender_argb64
+typedef blender_rgba<rgba16, order_abgr> blender_abgr64; //----blender_abgr64
+typedef blender_rgba<rgba16, order_bgra> blender_bgra64; //----blender_bgra64
 
-    typedef blender_rgba_pre<rgba16, order_rgba> blender_rgba64_pre; //----blender_rgba64_pre
-    typedef blender_rgba_pre<rgba16, order_argb> blender_argb64_pre; //----blender_argb64_pre
-    typedef blender_rgba_pre<rgba16, order_abgr> blender_abgr64_pre; //----blender_abgr64_pre
-    typedef blender_rgba_pre<rgba16, order_bgra> blender_bgra64_pre; //----blender_bgra64_pre
+typedef blender_rgba_pre<rgba16, order_rgba> blender_rgba64_pre; //----blender_rgba64_pre
+typedef blender_rgba_pre<rgba16, order_argb> blender_argb64_pre; //----blender_argb64_pre
+typedef blender_rgba_pre<rgba16, order_abgr> blender_abgr64_pre; //----blender_abgr64_pre
+typedef blender_rgba_pre<rgba16, order_bgra> blender_bgra64_pre; //----blender_bgra64_pre
 
 
-    //-----------------------------------------------------------------------
-    typedef int32u pixel32_type;
-    typedef pixfmt_alpha_blend_rgba<blender_rgba32, rendering_buffer, pixel32_type> pixfmt_rgba32; //----pixfmt_rgba32
-    typedef pixfmt_alpha_blend_rgba<blender_argb32, rendering_buffer, pixel32_type> pixfmt_argb32; //----pixfmt_argb32
-    typedef pixfmt_alpha_blend_rgba<blender_abgr32, rendering_buffer, pixel32_type> pixfmt_abgr32; //----pixfmt_abgr32
-    typedef pixfmt_alpha_blend_rgba<blender_bgra32, rendering_buffer, pixel32_type> pixfmt_bgra32; //----pixfmt_bgra32
+//-----------------------------------------------------------------------
+typedef int32u pixel32_type;
+typedef pixfmt_alpha_blend_rgba<blender_rgba32, rendering_buffer, pixel32_type> pixfmt_rgba32; //----pixfmt_rgba32
+typedef pixfmt_alpha_blend_rgba<blender_argb32, rendering_buffer, pixel32_type> pixfmt_argb32; //----pixfmt_argb32
+typedef pixfmt_alpha_blend_rgba<blender_abgr32, rendering_buffer, pixel32_type> pixfmt_abgr32; //----pixfmt_abgr32
+typedef pixfmt_alpha_blend_rgba<blender_bgra32, rendering_buffer, pixel32_type> pixfmt_bgra32; //----pixfmt_bgra32
 
-    typedef pixfmt_alpha_blend_rgba<blender_rgba32_pre, rendering_buffer, pixel32_type> pixfmt_rgba32_pre; //----pixfmt_rgba32_pre
-    typedef pixfmt_alpha_blend_rgba<blender_argb32_pre, rendering_buffer, pixel32_type> pixfmt_argb32_pre; //----pixfmt_argb32_pre
-    typedef pixfmt_alpha_blend_rgba<blender_abgr32_pre, rendering_buffer, pixel32_type> pixfmt_abgr32_pre; //----pixfmt_abgr32_pre
-    typedef pixfmt_alpha_blend_rgba<blender_bgra32_pre, rendering_buffer, pixel32_type> pixfmt_bgra32_pre; //----pixfmt_bgra32_pre
+typedef pixfmt_alpha_blend_rgba<blender_rgba32_pre, rendering_buffer, pixel32_type> pixfmt_rgba32_pre; //----pixfmt_rgba32_pre
+typedef pixfmt_alpha_blend_rgba<blender_argb32_pre, rendering_buffer, pixel32_type> pixfmt_argb32_pre; //----pixfmt_argb32_pre
+typedef pixfmt_alpha_blend_rgba<blender_abgr32_pre, rendering_buffer, pixel32_type> pixfmt_abgr32_pre; //----pixfmt_abgr32_pre
+typedef pixfmt_alpha_blend_rgba<blender_bgra32_pre, rendering_buffer, pixel32_type> pixfmt_bgra32_pre; //----pixfmt_bgra32_pre
 
-    typedef pixfmt_alpha_blend_rgba<blender_rgba32_plain, rendering_buffer, pixel32_type> pixfmt_rgba32_plain; //----pixfmt_rgba32_plain
-    typedef pixfmt_alpha_blend_rgba<blender_argb32_plain, rendering_buffer, pixel32_type> pixfmt_argb32_plain; //----pixfmt_argb32_plain
-    typedef pixfmt_alpha_blend_rgba<blender_abgr32_plain, rendering_buffer, pixel32_type> pixfmt_abgr32_plain; //----pixfmt_abgr32_plain
-    typedef pixfmt_alpha_blend_rgba<blender_bgra32_plain, rendering_buffer, pixel32_type> pixfmt_bgra32_plain; //----pixfmt_bgra32_plain
+typedef pixfmt_alpha_blend_rgba<blender_rgba32_plain, rendering_buffer, pixel32_type> pixfmt_rgba32_plain; //----pixfmt_rgba32_plain
+typedef pixfmt_alpha_blend_rgba<blender_argb32_plain, rendering_buffer, pixel32_type> pixfmt_argb32_plain; //----pixfmt_argb32_plain
+typedef pixfmt_alpha_blend_rgba<blender_abgr32_plain, rendering_buffer, pixel32_type> pixfmt_abgr32_plain; //----pixfmt_abgr32_plain
+typedef pixfmt_alpha_blend_rgba<blender_bgra32_plain, rendering_buffer, pixel32_type> pixfmt_bgra32_plain; //----pixfmt_bgra32_plain
 
-    struct  pixel64_type { int16u c[4]; };
-    typedef pixfmt_alpha_blend_rgba<blender_rgba64, rendering_buffer, pixel64_type> pixfmt_rgba64; //----pixfmt_rgba64
-    typedef pixfmt_alpha_blend_rgba<blender_argb64, rendering_buffer, pixel64_type> pixfmt_argb64; //----pixfmt_argb64
-    typedef pixfmt_alpha_blend_rgba<blender_abgr64, rendering_buffer, pixel64_type> pixfmt_abgr64; //----pixfmt_abgr64
-    typedef pixfmt_alpha_blend_rgba<blender_bgra64, rendering_buffer, pixel64_type> pixfmt_bgra64; //----pixfmt_bgra64
+struct  pixel64_type { int16u c[4]; };
+typedef pixfmt_alpha_blend_rgba<blender_rgba64, rendering_buffer, pixel64_type> pixfmt_rgba64; //----pixfmt_rgba64
+typedef pixfmt_alpha_blend_rgba<blender_argb64, rendering_buffer, pixel64_type> pixfmt_argb64; //----pixfmt_argb64
+typedef pixfmt_alpha_blend_rgba<blender_abgr64, rendering_buffer, pixel64_type> pixfmt_abgr64; //----pixfmt_abgr64
+typedef pixfmt_alpha_blend_rgba<blender_bgra64, rendering_buffer, pixel64_type> pixfmt_bgra64; //----pixfmt_bgra64
 
-    typedef pixfmt_alpha_blend_rgba<blender_rgba64_pre, rendering_buffer, pixel64_type> pixfmt_rgba64_pre; //----pixfmt_rgba64_pre
-    typedef pixfmt_alpha_blend_rgba<blender_argb64_pre, rendering_buffer, pixel64_type> pixfmt_argb64_pre; //----pixfmt_argb64_pre
-    typedef pixfmt_alpha_blend_rgba<blender_abgr64_pre, rendering_buffer, pixel64_type> pixfmt_abgr64_pre; //----pixfmt_abgr64_pre
-    typedef pixfmt_alpha_blend_rgba<blender_bgra64_pre, rendering_buffer, pixel64_type> pixfmt_bgra64_pre; //----pixfmt_bgra64_pre
+typedef pixfmt_alpha_blend_rgba<blender_rgba64_pre, rendering_buffer, pixel64_type> pixfmt_rgba64_pre; //----pixfmt_rgba64_pre
+typedef pixfmt_alpha_blend_rgba<blender_argb64_pre, rendering_buffer, pixel64_type> pixfmt_argb64_pre; //----pixfmt_argb64_pre
+typedef pixfmt_alpha_blend_rgba<blender_abgr64_pre, rendering_buffer, pixel64_type> pixfmt_abgr64_pre; //----pixfmt_abgr64_pre
+typedef pixfmt_alpha_blend_rgba<blender_bgra64_pre, rendering_buffer, pixel64_type> pixfmt_bgra64_pre; //----pixfmt_bgra64_pre
 }
 
 #endif
diff --git a/deps/agg/include/agg_rasterizer_cells_aa.h b/deps/agg/include/agg_rasterizer_cells_aa.h
index 0997fee..43be00c 100755
--- a/deps/agg/include/agg_rasterizer_cells_aa.h
+++ b/deps/agg/include/agg_rasterizer_cells_aa.h
@@ -131,10 +131,11 @@ namespace agg
         if(m_num_blocks)
         {
             cell_type** ptr = m_cells + m_num_blocks - 1;
-            while(m_num_blocks--)
+            while(m_num_blocks > 0)
             {
                 pod_allocator<cell_type>::deallocate(*ptr, cell_block_size);
                 ptr--;
+                --m_num_blocks;
             }
             pod_allocator<cell_type*>::deallocate(m_cells, m_max_blocks);
         }
@@ -663,23 +664,26 @@ namespace agg
         cell_type*  cell_ptr;
         unsigned nb = m_num_cells >> cell_block_shift;
         unsigned i;
-        while(nb--)
+        while(nb > 0)
         {
             cell_ptr = *block_ptr++;
             i = cell_block_size;
-            while(i--) 
+            while(i > 0)
             {
                 m_sorted_y[cell_ptr->y - m_min_y].start++;
                 ++cell_ptr;
+                --i;
             }
+            --nb;
         }
 
         cell_ptr = *block_ptr++;
         i = m_num_cells & cell_block_mask;
-        while(i--) 
+        while(i > 0)
         {
             m_sorted_y[cell_ptr->y - m_min_y].start++;
             ++cell_ptr;
+            --i;
         }
 
         // Convert the Y-histogram into the array of starting indexes
@@ -694,27 +698,30 @@ namespace agg
         // Fill the cell pointer array sorted by Y
         block_ptr = m_cells;
         nb = m_num_cells >> cell_block_shift;
-        while(nb--)
+        while(nb > 0)
         {
             cell_ptr = *block_ptr++;
             i = cell_block_size;
-            while(i--) 
+            while(i > 0)
             {
                 sorted_y& curr_y = m_sorted_y[cell_ptr->y - m_min_y];
                 m_sorted_cells[curr_y.start + curr_y.num] = cell_ptr;
                 ++curr_y.num;
                 ++cell_ptr;
+                --i;
             }
+            --nb;
         }
         
         cell_ptr = *block_ptr++;
         i = m_num_cells & cell_block_mask;
-        while(i--) 
+        while(i > 0)
         {
             sorted_y& curr_y = m_sorted_y[cell_ptr->y - m_min_y];
             m_sorted_cells[curr_y.start + curr_y.num] = cell_ptr;
             ++curr_y.num;
             ++cell_ptr;
+            --i;
         }
 
         // Finally arrange the X-arrays
diff --git a/deps/agg/include/agg_renderer_outline_aa.h b/deps/agg/include/agg_renderer_outline_aa.h
index 57d5a70..a0c910b 100644
--- a/deps/agg/include/agg_renderer_outline_aa.h
+++ b/deps/agg/include/agg_renderer_outline_aa.h
@@ -478,16 +478,16 @@ namespace agg
             m_lp(&lp),
             m_li(lp.vertical ? line_dbl_hr(lp.x2 - lp.x1) :
                                line_dbl_hr(lp.y2 - lp.y1),
-                 lp.vertical ? abs(lp.y2 - lp.y1) : 
-                               abs(lp.x2 - lp.x1) + 1),
+                 lp.vertical ? std::abs(lp.y2 - lp.y1) : 
+                               std::abs(lp.x2 - lp.x1) + 1),
             m_ren(ren),
             m_len((lp.vertical == (lp.inc > 0)) ? -lp.len : lp.len),
             m_x(lp.x1 >> line_subpixel_shift),
             m_y(lp.y1 >> line_subpixel_shift),
             m_old_x(m_x),
             m_old_y(m_y),
-            m_count((lp.vertical ? abs((lp.y2 >> line_subpixel_shift) - m_y) :
-                                   abs((lp.x2 >> line_subpixel_shift) - m_x))),
+            m_count((lp.vertical ? std::abs((lp.y2 >> line_subpixel_shift) - m_y) :
+                                   std::abs((lp.x2 >> line_subpixel_shift) - m_x))),
             m_width(ren.subpixel_width()),
             //m_max_extent(m_width >> (line_subpixel_shift - 2)),
             m_max_extent((m_width + line_subpixel_mask) >> line_subpixel_shift),
@@ -1652,7 +1652,7 @@ namespace agg
                         }
                         else
                         {
-                            while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len)
+                            while(std::abs(sx - lp.x1) + std::abs(sy - lp.y1) > 1 + lp2.len)
                             {
                                 sx = (lp.x1 + sx) >> 1;
                                 sy = (lp.y1 + sy) >> 1;
@@ -1719,7 +1719,7 @@ namespace agg
                         }
                         else
                         {
-                            while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len)
+                            while(std::abs(ex - lp.x2) + std::abs(ey - lp.y2) > 1 + lp2.len)
                             {
                                 ex = (lp.x2 + ex) >> 1;
                                 ey = (lp.y2 + ey) >> 1;
@@ -1791,7 +1791,7 @@ namespace agg
                         }
                         else
                         {
-                            while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len)
+                            while(std::abs(sx - lp.x1) + std::abs(sy - lp.y1) > 1 + lp2.len)
                             {
                                 sx = (lp.x1 + sx) >> 1;
                                 sy = (lp.y1 + sy) >> 1;
@@ -1804,7 +1804,7 @@ namespace agg
                         }
                         else
                         {
-                            while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len)
+                            while(std::abs(ex - lp.x2) + std::abs(ey - lp.y2) > 1 + lp2.len)
                             {
                                 ex = (lp.x2 + ex) >> 1;
                                 ey = (lp.y2 + ey) >> 1;
diff --git a/deps/agg/include/agg_renderer_outline_image.h b/deps/agg/include/agg_renderer_outline_image.h
index f258376..6a1b50c 100644
--- a/deps/agg/include/agg_renderer_outline_image.h
+++ b/deps/agg/include/agg_renderer_outline_image.h
@@ -488,8 +488,8 @@ namespace agg
             m_lp(lp),
             m_li(lp.vertical ? line_dbl_hr(lp.x2 - lp.x1) :
                                line_dbl_hr(lp.y2 - lp.y1),
-                 lp.vertical ? abs(lp.y2 - lp.y1) : 
-                               abs(lp.x2 - lp.x1) + 1),
+                 lp.vertical ? std::abs(lp.y2 - lp.y1) : 
+                               std::abs(lp.x2 - lp.x1) + 1),
             m_di(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey, lp.len, scale_x,
                  lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask),
             m_ren(ren),
@@ -497,8 +497,8 @@ namespace agg
             m_y(lp.y1 >> line_subpixel_shift),
             m_old_x(m_x),
             m_old_y(m_y),
-            m_count((lp.vertical ? abs((lp.y2 >> line_subpixel_shift) - m_y) :
-                                   abs((lp.x2 >> line_subpixel_shift) - m_x))),
+            m_count((lp.vertical ? std::abs((lp.y2 >> line_subpixel_shift) - m_y) :
+                                   std::abs((lp.x2 >> line_subpixel_shift) - m_x))),
             m_width(ren.subpixel_width()),
             //m_max_extent(m_width >> (line_subpixel_shift - 2)),
             m_max_extent((m_width + line_subpixel_scale) >> line_subpixel_shift),
@@ -959,7 +959,7 @@ namespace agg
                         }
                         else
                         {
-                            while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len)
+                            while(std::abs(sx - lp.x1) + std::abs(sy - lp.y1) > 1 + lp2.len)
                             {
                                 sx = (lp.x1 + sx) >> 1;
                                 sy = (lp.y1 + sy) >> 1;
@@ -972,7 +972,7 @@ namespace agg
                         }
                         else
                         {
-                            while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len)
+                            while(std::abs(ex - lp.x2) + std::abs(ey - lp.y2) > 1 + lp2.len)
                             {
                                 ex = (lp.x2 + ex) >> 1;
                                 ey = (lp.y2 + ey) >> 1;
diff --git a/deps/agg/include/agg_rendering_buffer.h b/deps/agg/include/agg_rendering_buffer.h
index e43899e..e9e278b 100644
--- a/deps/agg/include/agg_rendering_buffer.h
+++ b/deps/agg/include/agg_rendering_buffer.h
@@ -186,10 +186,11 @@ namespace agg
 
             T** rows = &m_rows[0];
 
-            while(height--)
+            while(height > 0)
             {
                 *rows++ = row_ptr;
                 row_ptr += stride;
+                --height;
             }
         }
 
diff --git a/deps/agg/include/agg_scanline_bin.h b/deps/agg/include/agg_scanline_bin.h
index 660292b..6f9f41e 100644
--- a/deps/agg/include/agg_scanline_bin.h
+++ b/deps/agg/include/agg_scanline_bin.h
@@ -186,7 +186,7 @@ namespace agg
         scanline32_bin() : m_max_len(0), m_last_x(0x7FFFFFF0) {}
 
         //--------------------------------------------------------------------
-        void reset(int min_x, int max_x)
+        void reset(int, int)
         {
             m_last_x = 0x7FFFFFF0;
             m_spans.remove_all();
diff --git a/deps/agg/include/agg_scanline_boolean_algebra.h b/deps/agg/include/agg_scanline_boolean_algebra.h
index 34eaee9..aa3d4a1 100644
--- a/deps/agg/include/agg_scanline_boolean_algebra.h
+++ b/deps/agg/include/agg_scanline_boolean_algebra.h
@@ -406,7 +406,7 @@ namespace agg
     {
         static AGG_INLINE unsigned calculate(unsigned a, unsigned b)
         {
-            return unsigned(abs(int(a) - int(b)));
+            return unsigned(std::abs(int(a) - int(b)));
         }
     };
 
@@ -633,7 +633,7 @@ namespace agg
         unsigned num_spans = sl1.num_spans();
         for(;;)
         {
-            add_span(span, span->x, abs((int)span->len), sl);
+            add_span(span, span->x, std::abs((int)span->len), sl);
             if(--num_spans == 0) break;
             ++span;
         }
@@ -678,8 +678,8 @@ namespace agg
         {
             int xb1 = span1->x;
             int xb2 = span2->x;
-            int xe1 = xb1 + abs((int)span1->len) - 1;
-            int xe2 = xb2 + abs((int)span2->len) - 1;
+            int xe1 = xb1 + std::abs((int)span1->len) - 1;
+            int xe2 = xb2 + std::abs((int)span2->len) - 1;
 
             // Determine what spans we should advance in the next step
             // The span with the least ending X should be advanced
@@ -872,7 +872,7 @@ namespace agg
         {
             span1 = sl1.begin();
             xb1 = span1->x;
-            xe1 = xb1 + abs((int)span1->len) - 1;
+            xe1 = xb1 + std::abs((int)span1->len) - 1;
             --num1;
         }
 
@@ -882,7 +882,7 @@ namespace agg
         {
             span2 = sl2.begin();
             xb2 = span2->x;
-            xe2 = xb2 + abs((int)span2->len) - 1;
+            xe2 = xb2 + std::abs((int)span2->len) - 1;
             --num2;
         }
 
@@ -896,7 +896,7 @@ namespace agg
                 --num1;
                 ++span1;
                 xb1 = span1->x;
-                xe1 = xb1 + abs((int)span1->len) - 1;
+                xe1 = xb1 + std::abs((int)span1->len) - 1;
             }
 
             // Retrieve a new span2 if it's invalid
@@ -906,7 +906,7 @@ namespace agg
                 --num2;
                 ++span2;
                 xb2 = span2->x;
-                xe2 = xb2 + abs((int)span2->len) - 1;
+                xe2 = xb2 + std::abs((int)span2->len) - 1;
             }
 
             if(xb1 > xe1 && xb2 > xe2) break;
@@ -1392,7 +1392,7 @@ namespace agg
     // Apply eXclusive OR to two anti-aliased scanline shapes. 
     // There's the absolute difference used to calculate 
     // Anti-Aliasing values, that is:
-    // a XOR b : abs(a-b)
+    // a XOR b : std::abs(a-b)
     // See intersect_shapes_aa for more comments
     //----------
     template<class ScanlineGen1, 
diff --git a/deps/agg/include/agg_scanline_storage_aa.h b/deps/agg/include/agg_scanline_storage_aa.h
index 88e7912..68c1f97 100644
--- a/deps/agg/include/agg_scanline_storage_aa.h
+++ b/deps/agg/include/agg_scanline_storage_aa.h
@@ -312,7 +312,7 @@ namespace agg
 
                 sp.x         = span_iterator->x;
                 sp.len       = span_iterator->len;
-                int len      = abs(int(sp.len));
+                int len      = std::abs(int(sp.len));
                 sp.covers_id = 
                     m_covers.add_cells(span_iterator->covers, 
                                        unsigned(len));
diff --git a/deps/agg/include/agg_simul_eq.h b/deps/agg/include/agg_simul_eq.h
index 8fc5d2e..f7bfafd 100644
--- a/deps/agg/include/agg_simul_eq.h
+++ b/deps/agg/include/agg_simul_eq.h
@@ -51,7 +51,7 @@ namespace agg
             unsigned i;
             for(i = row; i < Rows; i++)
             {
-                if((tmp = fabs(m[i][row])) > max_val && tmp != 0.0)
+                if((tmp = std::fabs(m[i][row])) > max_val && tmp != 0.0)
                 {
                     max_val = tmp;
                     k = i;
diff --git a/deps/agg/include/agg_span_gouraud_gray.h b/deps/agg/include/agg_span_gouraud_gray.h
index d5fc39d..ee1e813 100644
--- a/deps/agg/include/agg_span_gouraud_gray.h
+++ b/deps/agg/include/agg_span_gouraud_gray.h
@@ -56,7 +56,7 @@ namespace agg
                 m_y1  = c1.y - 0.5;
                 m_dx  = c2.x - c1.x;
                 double dy = c2.y - c1.y;
-                m_1dy = (fabs(dy) < 1e-10) ? 1e10 : 1.0 / dy;
+                m_1dy = (std::fabs(dy) < 1e-10) ? 1e10 : 1.0 / dy;
                 m_v1 = c1.color.v;
                 m_a1 = c1.color.a;
                 m_dv = c2.color.v - m_v1;
@@ -151,7 +151,7 @@ namespace agg
             // Get the horizontal length with subpixel accuracy
             // and protect it from division by zero
             //-------------------------
-            int nlen = abs(pc2->m_x - pc1->m_x);
+            int nlen = std::abs(pc2->m_x - pc1->m_x);
             if(nlen <= 0) nlen = 1;
 
             dda_line_interpolator<14> v(pc1->m_v, pc2->m_v, nlen);
diff --git a/deps/agg/include/agg_span_gouraud_rgba.h b/deps/agg/include/agg_span_gouraud_rgba.h
index 89192d2..4c48383 100644
--- a/deps/agg/include/agg_span_gouraud_rgba.h
+++ b/deps/agg/include/agg_span_gouraud_rgba.h
@@ -163,7 +163,7 @@ namespace agg
             // Get the horizontal length with subpixel accuracy
             // and protect it from division by zero
             //-------------------------
-            int nlen = abs(pc2->m_x - pc1->m_x);
+            int nlen = std::abs(pc2->m_x - pc1->m_x);
             if(nlen <= 0) nlen = 1;
 
             dda_line_interpolator<14> r(pc1->m_r, pc2->m_r, nlen);
diff --git a/deps/agg/include/agg_span_gradient.h b/deps/agg/include/agg_span_gradient.h
index ca8a99f..b39bcdb 100644
--- a/deps/agg/include/agg_span_gradient.h
+++ b/deps/agg/include/agg_span_gradient.h
@@ -225,7 +225,7 @@ namespace agg
             double dy = y - m_fy;
             double d2 = dx * m_fy - dy * m_fx;
             double d3 = m_r2 * (dx * dx + dy * dy) - d2 * d2;
-            return iround((dx * m_fx + dy * m_fy + sqrt(fabs(d3))) * m_mul);
+            return iround((dx * m_fx + dy * m_fy + sqrt(std::fabs(d3))) * m_mul);
         }
 
     private:
@@ -284,8 +284,8 @@ namespace agg
     public:
         static AGG_INLINE int calculate(int x, int y, int) 
         { 
-            int ax = abs(x);
-            int ay = abs(y);
+            int ax = std::abs(x);
+            int ay = std::abs(y);
             return ax > ay ? ax : ay; 
         }
     };
@@ -296,7 +296,7 @@ namespace agg
     public:
         static AGG_INLINE int calculate(int x, int y, int d) 
         { 
-            return abs(x) * abs(y) / d; 
+            return std::abs(x) * std::abs(y) / d; 
         }
     };
 
@@ -306,7 +306,7 @@ namespace agg
     public:
         static AGG_INLINE int calculate(int x, int y, int) 
         { 
-            return fast_sqrt(abs(x) * abs(y)); 
+            return fast_sqrt(std::abs(x) * std::abs(y)); 
         }
     };
 
@@ -316,7 +316,7 @@ namespace agg
     public:
         static AGG_INLINE int calculate(int x, int y, int d) 
         { 
-            return uround(fabs(atan2(double(y), double(x))) * double(d) / pi);
+            return uround(std::fabs(std::atan2(double(y), double(x))) * double(d) / pi);
         }
     };
 
diff --git a/deps/agg/include/agg_span_image_filter_rgba.h b/deps/agg/include/agg_span_image_filter_rgba.h
index 134a802..4c19b23 100644
--- a/deps/agg/include/agg_span_image_filter_rgba.h
+++ b/deps/agg/include/agg_span_image_filter_rgba.h
@@ -895,9 +895,9 @@ namespace agg
                 if(fg[3] < 0) fg[3] = 0;
 
                 if(fg[order_type::A] > base_mask)         fg[order_type::A] = base_mask;
-                if(fg[order_type::R] > fg[order_type::R]) fg[order_type::R] = fg[order_type::R];
-                if(fg[order_type::G] > fg[order_type::G]) fg[order_type::G] = fg[order_type::G];
-                if(fg[order_type::B] > fg[order_type::B]) fg[order_type::B] = fg[order_type::B];
+                if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+                if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+                if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
 
                 span->r = (value_type)fg[order_type::R];
                 span->g = (value_type)fg[order_type::G];
diff --git a/deps/agg/include/agg_trans_affine.h b/deps/agg/include/agg_trans_affine.h
index a58f022..cbb82a5 100644
--- a/deps/agg/include/agg_trans_affine.h
+++ b/deps/agg/include/agg_trans_affine.h
@@ -2,8 +2,8 @@
 // Anti-Grain Geometry - Version 2.4
 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
 //
-// Permission to copy, use, modify, sell and distribute this software 
-// is granted provided this copyright notice appears in all copies. 
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
 // This software is provided "as is" without express or implied
 // warranty, and with no claim as to its suitability for any purpose.
 //
@@ -21,42 +21,43 @@
 
 #include <cmath>
 #include "agg_basics.h"
+#include <mapnik/config.hpp>
 
 namespace agg
 {
-    const double affine_epsilon = 1e-14; 
+    const double affine_epsilon = 1e-14;
 
     //============================================================trans_affine
     //
     // See Implementation agg_trans_affine.cpp
     //
     // Affine transformation are linear transformations in Cartesian coordinates
-    // (strictly speaking not only in Cartesian, but for the beginning we will 
-    // think so). They are rotation, scaling, translation and skewing.  
-    // After any affine transformation a line segment remains a line segment 
-    // and it will never become a curve. 
+    // (strictly speaking not only in Cartesian, but for the beginning we will
+    // think so). They are rotation, scaling, translation and skewing.
+    // After any affine transformation a line segment remains a line segment
+    // and it will never become a curve.
     //
-    // There will be no math about matrix calculations, since it has been 
+    // There will be no math about matrix calculations, since it has been
     // described many times. Ask yourself a very simple question:
-    // "why do we need to understand and use some matrix stuff instead of just 
+    // "why do we need to understand and use some matrix stuff instead of just
     // rotating, scaling and so on". The answers are:
     //
     // 1. Any combination of transformations can be done by only 4 multiplications
     //    and 4 additions in floating point.
     // 2. One matrix transformation is equivalent to the number of consecutive
-    //    discrete transformations, i.e. the matrix "accumulates" all transformations 
-    //    in the order of their settings. Suppose we have 4 transformations: 
+    //    discrete transformations, i.e. the matrix "accumulates" all transformations
+    //    in the order of their settings. Suppose we have 4 transformations:
     //       * rotate by 30 degrees,
-    //       * scale X to 2.0, 
-    //       * scale Y to 1.5, 
-    //       * move to (100, 100). 
-    //    The result will depend on the order of these transformations, 
+    //       * scale X to 2.0,
+    //       * scale Y to 1.5,
+    //       * move to (100, 100).
+    //    The result will depend on the order of these transformations,
     //    and the advantage of matrix is that the sequence of discret calls:
-    //    rotate(30), scaleX(2.0), scaleY(1.5), move(100,100) 
+    //    rotate(30), scaleX(2.0), scaleY(1.5), move(100,100)
     //    will have exactly the same result as the following matrix transformations:
-    //   
+    //
     //    affine_matrix m;
-    //    m *= rotate_matrix(30); 
+    //    m *= rotate_matrix(30);
     //    m *= scaleX_matrix(2.0);
     //    m *= scaleY_matrix(1.5);
     //    m *= move_matrix(100,100);
@@ -64,7 +65,7 @@ namespace agg
     //    m.transform_my_point_at_last(x, y);
     //
     // What is the good of it? In real life we will set-up the matrix only once
-    // and then transform many points, let alone the convenience to set any 
+    // and then transform many points, let alone the convenience to set any
     // combination of transformations.
     //
     // So, how to use it? Very easy - literally as it's shown above. Not quite,
@@ -77,14 +78,14 @@ namespace agg
     // m.transform(&x, &y);
     //
     // The affine matrix is all you need to perform any linear transformation,
-    // but all transformations have origin point (0,0). It means that we need to 
+    // but all transformations have origin point (0,0). It means that we need to
     // use 2 translations if we want to rotate someting around (100,100):
-    // 
+    //
     // m *= agg::trans_affine_translation(-100.0, -100.0);         // move to (0,0)
     // m *= agg::trans_affine_rotation(30.0 * 3.1415926 / 180.0);  // rotate
     // m *= agg::trans_affine_translation(100.0, 100.0);           // move back to (100,100)
     //----------------------------------------------------------------------
-    struct trans_affine
+    struct MAPNIK_DECL trans_affine
     {
         static const trans_affine identity;
         double sx, shy, shx, sy, tx, ty;
@@ -96,7 +97,7 @@ namespace agg
         {}
 
         // Custom matrix. Usually used in derived classes
-        trans_affine(double v0, double v1, double v2, 
+        trans_affine(double v0, double v1, double v2,
                      double v3, double v4, double v5) :
             sx(v0), shy(v1), shx(v2), sy(v3), tx(v4), ty(v5)
         {}
@@ -107,14 +108,14 @@ namespace agg
         {}
 
         // Rectangle to a parallelogram.
-        trans_affine(double x1, double y1, double x2, double y2, 
+        trans_affine(double x1, double y1, double x2, double y2,
                      const double* parl)
         {
             rect_to_parl(x1, y1, x2, y2, parl);
         }
 
         // Parallelogram to a rectangle.
-        trans_affine(const double* parl, 
+        trans_affine(const double* parl,
                      double x1, double y1, double x2, double y2)
         {
             parl_to_rect(parl, x1, y1, x2, y2);
@@ -127,25 +128,25 @@ namespace agg
         }
 
         //---------------------------------- Parellelogram transformations
-        // transform a parallelogram to another one. Src and dst are 
-        // pointers to arrays of three points (double[6], x1,y1,...) that 
-        // identify three corners of the parallelograms assuming implicit 
-        // fourth point. The arguments are arrays of double[6] mapped 
+        // transform a parallelogram to another one. Src and dst are
+        // pointers to arrays of three points (double[6], x1,y1,...) that
+        // identify three corners of the parallelograms assuming implicit
+        // fourth point. The arguments are arrays of double[6] mapped
         // to x1,y1, x2,y2, x3,y3  where the coordinates are:
         //        *-----------------*
         //       /          (x3,y3)/
         //      /                 /
         //     /(x1,y1)   (x2,y2)/
         //    *-----------------*
-        const trans_affine& parl_to_parl(const double* src, 
+        const trans_affine& parl_to_parl(const double* src,
                                          const double* dst);
 
-        const trans_affine& rect_to_parl(double x1, double y1, 
-                                         double x2, double y2, 
+        const trans_affine& rect_to_parl(double x1, double y1,
+                                         double x2, double y2,
                                          const double* parl);
 
-        const trans_affine& parl_to_rect(const double* parl, 
-                                         double x1, double y1, 
+        const trans_affine& parl_to_rect(const double* parl,
+                                         double x1, double y1,
                                          double x2, double y2);
 
 
@@ -171,8 +172,8 @@ namespace agg
         // Multiply inverse of "m" to "this" and assign the result to "this"
         const trans_affine& premultiply_inv(const trans_affine& m);
 
-        // Invert matrix. Do not try to invert degenerate matrices, 
-        // there's no check for validity. If you set scale to 0 and 
+        // Invert matrix. Do not try to invert degenerate matrices,
+        // there's no check for validity. If you set scale to 0 and
         // then try to invert matrix, expect unpredictable result.
         const trans_affine& invert();
 
@@ -197,7 +198,7 @@ namespace agg
         }
 
         //------------------------------------------- Operators
-        
+
         // Multiply the matrix by another one
         const trans_affine& operator *= (const trans_affine& m)
         {
@@ -217,7 +218,7 @@ namespace agg
             return trans_affine(*this).multiply(m);
         }
 
-        // Multiply the matrix by inverse of another one 
+        // Multiply the matrix by inverse of another one
         // and return the result in a separate matrix.
         trans_affine operator / (const trans_affine& m) const
         {
@@ -250,9 +251,9 @@ namespace agg
         // Direct transformation of x and y, 2x2 matrix only, no translation
         void transform_2x2(double* x, double* y) const;
 
-        // Inverse transformation of x and y. It works slower than the 
-        // direct transformation. For massive operations it's better to 
-        // invert() the matrix and then use direct transformations. 
+        // Inverse transformation of x and y. It works slower than the
+        // direct transformation. For massive operations it's better to
+        // invert() the matrix and then use direct transformations.
         void inverse_transform(double* x, double* y) const;
 
         //-------------------------------------------- Auxiliary
@@ -268,7 +269,7 @@ namespace agg
             return 1.0 / (sx * sy - shy * shx);
         }
 
-        // Get the average scale (by X and Y). 
+        // Get the average scale (by X and Y).
         // Basically used to calculate the approximation_scale when
         // decomposinting curves into line segments.
         double scale() const;
@@ -282,7 +283,7 @@ namespace agg
         // Check to see if two matrices are equal
         bool is_equal(const trans_affine& m, double epsilon = affine_epsilon) const;
 
-        // Determine the major parameters. Use with caution considering 
+        // Determine the major parameters. Use with caution considering
         // possible degenerate cases.
         double rotation() const;
         void   translation(double* dx, double* dy) const;
@@ -293,7 +294,7 @@ namespace agg
     //------------------------------------------------------------------------
     inline void trans_affine::transform(double* x, double* y) const
     {
-        register double tmp = *x;
+        double tmp = *x;
         *x = tmp * sx  + *y * shx + tx;
         *y = tmp * shy + *y * sy  + ty;
     }
@@ -301,7 +302,7 @@ namespace agg
     //------------------------------------------------------------------------
     inline void trans_affine::transform_2x2(double* x, double* y) const
     {
-        register double tmp = *x;
+        double tmp = *x;
         *x = tmp * sx  + *y * shx;
         *y = tmp * shy + *y * sy;
     }
@@ -309,9 +310,9 @@ namespace agg
     //------------------------------------------------------------------------
     inline void trans_affine::inverse_transform(double* x, double* y) const
     {
-        register double d = determinant_reciprocal();
-        register double a = (*x - tx) * d;
-        register double b = (*y - ty) * d;
+        double d = determinant_reciprocal();
+        double a = (*x - tx) * d;
+        double b = (*y - ty) * d;
         *x = a * sy - b * shx;
         *y = b * sx - a * shy;
     }
@@ -325,23 +326,23 @@ namespace agg
     }
 
     //------------------------------------------------------------------------
-    inline const trans_affine& trans_affine::translate(double x, double y) 
-    { 
+    inline const trans_affine& trans_affine::translate(double x, double y)
+    {
         tx += x;
-        ty += y; 
+        ty += y;
         return *this;
     }
 
     //------------------------------------------------------------------------
-    inline const trans_affine& trans_affine::rotate(double a) 
+    inline const trans_affine& trans_affine::rotate(double a)
     {
-        double ca = cos(a); 
-        double sa = sin(a);
+        double ca = std::cos(a);
+        double sa = std::sin(a);
         double t0 = sx  * ca - shy * sa;
         double t2 = shx * ca - sy * sa;
         double t4 = tx  * ca - ty * sa;
         shy = sx  * sa + shy * ca;
-        sy  = shx * sa + sy * ca; 
+        sy  = shx * sa + sy * ca;
         ty  = tx  * sa + ty * ca;
         sx  = t0;
         shx = t2;
@@ -350,10 +351,10 @@ namespace agg
     }
 
     //------------------------------------------------------------------------
-    inline const trans_affine& trans_affine::scale(double x, double y) 
+    inline const trans_affine& trans_affine::scale(double x, double y)
     {
         double mm0 = x; // Possible hint for the optimizer
-        double mm3 = y; 
+        double mm3 = y;
         sx  *= mm0;
         shx *= mm0;
         tx  *= mm0;
@@ -364,7 +365,7 @@ namespace agg
     }
 
     //------------------------------------------------------------------------
-    inline const trans_affine& trans_affine::scale(double s) 
+    inline const trans_affine& trans_affine::scale(double s)
     {
         double m = s; // Possible hint for the optimizer
         sx  *= m;
@@ -402,7 +403,7 @@ namespace agg
     //------------------------------------------------------------------------
     inline void trans_affine::scaling_abs(double* x, double* y) const
     {
-        // Used to calculate scaling coefficients in image resampling. 
+        // Used to calculate scaling coefficients in image resampling.
         // When there is considerable shear this method gives us much
         // better estimation than just sx, sy.
         *x = sqrt(sx  * sx  + shx * shx);
@@ -410,15 +411,15 @@ namespace agg
     }
 
     //====================================================trans_affine_rotation
-    // Rotation matrix. sin() and cos() are calculated twice for the same angle.
-    // There's no harm because the performance of sin()/cos() is very good on all
-    // modern processors. Besides, this operation is not going to be invoked too 
+    // Rotation matrix. std::sin() and std::cos() are calculated twice for the same angle.
+    // There's no harm because the performance of std::sin()/cos() is very good on all
+    // modern processors. Besides, this operation is not going to be invoked too
     // often.
     class trans_affine_rotation : public trans_affine
     {
     public:
-        trans_affine_rotation(double a) : 
-          trans_affine(cos(a), sin(a), -sin(a), cos(a), 0.0, 0.0)
+        trans_affine_rotation(double a) :
+          trans_affine(std::cos(a), std::sin(a), -std::sin(a), std::cos(a), 0.0, 0.0)
         {}
     };
 
@@ -427,11 +428,11 @@ namespace agg
     class trans_affine_scaling : public trans_affine
     {
     public:
-        trans_affine_scaling(double x, double y) : 
+        trans_affine_scaling(double x, double y) :
           trans_affine(x, 0.0, 0.0, y, 0.0, 0.0)
         {}
 
-        trans_affine_scaling(double s) : 
+        trans_affine_scaling(double s) :
           trans_affine(s, 0.0, 0.0, s, 0.0, 0.0)
         {}
     };
@@ -441,7 +442,7 @@ namespace agg
     class trans_affine_translation : public trans_affine
     {
     public:
-        trans_affine_translation(double x, double y) : 
+        trans_affine_translation(double x, double y) :
           trans_affine(1.0, 0.0, 0.0, 1.0, x, y)
         {}
     };
@@ -451,19 +452,19 @@ namespace agg
     class trans_affine_skewing : public trans_affine
     {
     public:
-        trans_affine_skewing(double x, double y) : 
-          trans_affine(1.0, tan(y), tan(x), 1.0, 0.0, 0.0)
+        trans_affine_skewing(double x, double y) :
+          trans_affine(1.0, std::tan(y), std::tan(x), 1.0, 0.0, 0.0)
         {}
     };
 
 
     //===============================================trans_affine_line_segment
-    // Rotate, Scale and Translate, associating 0...dist with line segment 
+    // Rotate, Scale and Translate, associating 0...dist with line segment
     // x1,y1,x2,y2
     class trans_affine_line_segment : public trans_affine
     {
     public:
-        trans_affine_line_segment(double x1, double y1, double x2, double y2, 
+        trans_affine_line_segment(double x1, double y1, double x2, double y2,
                                   double dist)
         {
             double dx = x2 - x1;
@@ -472,38 +473,38 @@ namespace agg
             {
                 multiply(trans_affine_scaling(sqrt(dx * dx + dy * dy) / dist));
             }
-            multiply(trans_affine_rotation(atan2(dy, dx)));
+            multiply(trans_affine_rotation(std::atan2(dy, dx)));
             multiply(trans_affine_translation(x1, y1));
         }
     };
 
 
     //============================================trans_affine_reflection_unit
-    // Reflection matrix. Reflect coordinates across the line through 
+    // Reflection matrix. Reflect coordinates across the line through
     // the origin containing the unit vector (ux, uy).
     // Contributed by John Horigan
     class trans_affine_reflection_unit : public trans_affine
     {
     public:
         trans_affine_reflection_unit(double ux, double uy) :
-          trans_affine(2.0 * ux * ux - 1.0, 
-                       2.0 * ux * uy, 
-                       2.0 * ux * uy, 
-                       2.0 * uy * uy - 1.0, 
+          trans_affine(2.0 * ux * ux - 1.0,
+                       2.0 * ux * uy,
+                       2.0 * ux * uy,
+                       2.0 * uy * uy - 1.0,
                        0.0, 0.0)
         {}
     };
 
 
     //=================================================trans_affine_reflection
-    // Reflection matrix. Reflect coordinates across the line through 
+    // Reflection matrix. Reflect coordinates across the line through
     // the origin at the angle a or containing the non-unit vector (x, y).
     // Contributed by John Horigan
     class trans_affine_reflection : public trans_affine_reflection_unit
     {
     public:
         trans_affine_reflection(double a) :
-          trans_affine_reflection_unit(cos(a), sin(a))
+          trans_affine_reflection_unit(std::cos(a), std::sin(a))
         {}
 
 
@@ -516,4 +517,3 @@ namespace agg
 
 
 #endif
-
diff --git a/deps/agg/include/agg_trans_perspective.h b/deps/agg/include/agg_trans_perspective.h
index 20a9aa6..06a150c 100644
--- a/deps/agg/include/agg_trans_perspective.h
+++ b/deps/agg/include/agg_trans_perspective.h
@@ -643,7 +643,7 @@ namespace agg
     //------------------------------------------------------------------------
     inline bool trans_perspective::is_valid(double epsilon) const
     {
-        return fabs(sx) > epsilon && fabs(sy) > epsilon && fabs(w2) > epsilon;
+        return std::fabs(sx) > epsilon && std::fabs(sy) > epsilon && std::fabs(w2) > epsilon;
     }
 
     //------------------------------------------------------------------------
@@ -692,7 +692,7 @@ namespace agg
         double y2 = 0.0;
         transform(&x1, &y1);
         transform(&x2, &y2);
-        return atan2(y2-y1, x2-x1);
+        return std::atan2(y2-y1, x2-x1);
     }
 
     //------------------------------------------------------------------------
diff --git a/deps/agg/include/agg_trans_viewport.h b/deps/agg/include/agg_trans_viewport.h
index d0e0eb2..c68f480 100644
--- a/deps/agg/include/agg_trans_viewport.h
+++ b/deps/agg/include/agg_trans_viewport.h
@@ -241,10 +241,10 @@ namespace agg
     inline void trans_viewport::update()
     {
         const double epsilon = 1e-30;
-        if(fabs(m_world_x1  - m_world_x2)  < epsilon ||
-           fabs(m_world_y1  - m_world_y2)  < epsilon ||
-           fabs(m_device_x1 - m_device_x2) < epsilon ||
-           fabs(m_device_y1 - m_device_y2) < epsilon)
+        if(std::fabs(m_world_x1  - m_world_x2)  < epsilon ||
+           std::fabs(m_world_y1  - m_world_y2)  < epsilon ||
+           std::fabs(m_device_x1 - m_device_x2) < epsilon ||
+           std::fabs(m_device_y1 - m_device_y2) < epsilon)
         {
             m_wx1 = m_world_x1;
             m_wy1 = m_world_y1;
diff --git a/deps/agg/include/agg_vcgen_contour.h b/deps/agg/include/agg_vcgen_contour.h
index 8c25da1..13318fd 100644
--- a/deps/agg/include/agg_vcgen_contour.h
+++ b/deps/agg/include/agg_vcgen_contour.h
@@ -17,6 +17,7 @@
 #define AGG_VCGEN_CONTOUR_INCLUDED
 
 #include "agg_math_stroke.h"
+#include <mapnik/config.hpp>
 
 namespace agg
 {
@@ -25,7 +26,7 @@ namespace agg
     //
     // See Implementation agg_vcgen_contour.cpp
     //
-    class vcgen_contour
+    class MAPNIK_DECL vcgen_contour
     {
         enum status_e
         {
diff --git a/deps/agg/include/agg_vcgen_stroke.h b/deps/agg/include/agg_vcgen_stroke.h
index 778223f..0cd806b 100644
--- a/deps/agg/include/agg_vcgen_stroke.h
+++ b/deps/agg/include/agg_vcgen_stroke.h
@@ -17,7 +17,7 @@
 #define AGG_VCGEN_STROKE_INCLUDED
 
 #include "agg_math_stroke.h"
-
+#include <mapnik/config.hpp>
 
 namespace agg
 {
@@ -28,7 +28,7 @@ namespace agg
     // Stroke generator
     //
     //------------------------------------------------------------------------
-    class vcgen_stroke
+    class MAPNIK_DECL vcgen_stroke
     {
         enum status_e
         {
diff --git a/deps/agg/src/agg_arc.cpp b/deps/agg/src/agg_arc.cpp
index 5d9ab6f..778fdbe 100644
--- a/deps/agg/src/agg_arc.cpp
+++ b/deps/agg/src/agg_arc.cpp
@@ -67,14 +67,14 @@ unsigned arc::vertex(double* x, double* y)
     if(is_stop(m_path_cmd)) return path_cmd_stop;
     if((m_angle < m_end - m_da/4) != m_ccw)
     {
-        *x = m_x + cos(m_end) * m_rx;
-        *y = m_y + sin(m_end) * m_ry;
+        *x = m_x + std::cos(m_end) * m_rx;
+        *y = m_y + std::sin(m_end) * m_ry;
         m_path_cmd = path_cmd_stop;
         return path_cmd_line_to;
     }
 
-    *x = m_x + cos(m_angle) * m_rx;
-    *y = m_y + sin(m_angle) * m_ry;
+    *x = m_x + std::cos(m_angle) * m_rx;
+    *y = m_y + std::sin(m_angle) * m_ry;
 
     m_angle += m_da;
 
@@ -86,8 +86,8 @@ unsigned arc::vertex(double* x, double* y)
 //------------------------------------------------------------------------
 void arc::normalize(double a1, double a2, bool ccw)
 {
-    double ra = (fabs(m_rx) + fabs(m_ry)) / 2;
-    m_da = acos(ra / (ra + 0.125 / m_scale)) * 2;
+    double ra = (std::fabs(m_rx) + std::fabs(m_ry)) / 2;
+    m_da = std::acos(ra / (ra + 0.125 / m_scale)) * 2;
     if(ccw)
     {
         while(a2 < a1) a2 += pi * 2.0;
diff --git a/deps/agg/src/agg_bezier_arc.cpp b/deps/agg/src/agg_bezier_arc.cpp
index 15136aa..bb5ffc4 100644
--- a/deps/agg/src/agg_bezier_arc.cpp
+++ b/deps/agg/src/agg_bezier_arc.cpp
@@ -29,7 +29,7 @@ namespace agg
 // This epsilon is used to prevent us from adding degenerate curves
 // (converging to a single point).
 // The value isn't very critical. Function arc_to_bezier() has a limit
-// of the sweep_angle. If fabs(sweep_angle) exceeds pi/2 the curve
+// of the sweep_angle. If std::fabs(sweep_angle) exceeds pi/2 the curve
 // becomes inaccurate. But slight exceeding is quite appropriate.
 //-------------------------------------------------bezier_arc_angle_epsilon
 const double bezier_arc_angle_epsilon = 0.01;
@@ -39,8 +39,8 @@ void arc_to_bezier(double cx, double cy, double rx, double ry,
                    double start_angle, double sweep_angle,
                    double* curve)
 {
-    double x0 = cos(sweep_angle / 2.0);
-    double y0 = sin(sweep_angle / 2.0);
+    double x0 = std::cos(sweep_angle / 2.0);
+    double y0 = std::sin(sweep_angle / 2.0);
     double tx = (1.0 - x0) * 4.0 / 3.0;
     double ty = y0 - tx * x0 / y0;
     double px[4];
@@ -54,8 +54,8 @@ void arc_to_bezier(double cx, double cy, double rx, double ry,
     px[3] =  x0;
     py[3] =  y0;
 
-    double sn = sin(start_angle + sweep_angle / 2.0);
-    double cs = cos(start_angle + sweep_angle / 2.0);
+    double sn = std::sin(start_angle + sweep_angle / 2.0);
+    double cs = std::cos(start_angle + sweep_angle / 2.0);
 
     unsigned i;
     for(i = 0; i < 4; i++)
@@ -77,14 +77,14 @@ void bezier_arc::init(double x,  double y,
     if(sweep_angle >=  2.0 * pi) sweep_angle =  2.0 * pi;
     if(sweep_angle <= -2.0 * pi) sweep_angle = -2.0 * pi;
 
-    if(fabs(sweep_angle) < 1e-10)
+    if(std::fabs(sweep_angle) < 1e-10)
     {
         m_num_vertices = 4;
         m_cmd = path_cmd_line_to;
-        m_vertices[0] = x + rx * cos(start_angle);
-        m_vertices[1] = y + ry * sin(start_angle);
-        m_vertices[2] = x + rx * cos(start_angle + sweep_angle);
-        m_vertices[3] = y + ry * sin(start_angle + sweep_angle);
+        m_vertices[0] = x + rx * std::cos(start_angle);
+        m_vertices[1] = y + ry * std::sin(start_angle);
+        m_vertices[2] = x + rx * std::cos(start_angle + sweep_angle);
+        m_vertices[3] = y + ry * std::sin(start_angle + sweep_angle);
         return;
     }
 
@@ -152,8 +152,8 @@ void bezier_arc_svg::init(double x0, double y0,
     double dx2 = (x0 - x2) / 2.0;
     double dy2 = (y0 - y2) / 2.0;
 
-    double cos_a = cos(angle);
-    double sin_a = sin(angle);
+    double cos_a = std::cos(angle);
+    double sin_a = std::sin(angle);
 
     // Calculate (x1, y1)
     //------------------------
@@ -211,7 +211,7 @@ void bezier_arc_svg::init(double x0, double y0,
     double v = p / n;
     if(v < -1.0) v = -1.0;
     if(v >  1.0) v =  1.0;
-    double start_angle = sign * acos(v);
+    double start_angle = sign * std::acos(v);
 
     // Calculate the sweep angle
     //------------------------
@@ -221,7 +221,7 @@ void bezier_arc_svg::init(double x0, double y0,
     v = p / n;
     if(v < -1.0) v = -1.0;
     if(v >  1.0) v =  1.0;
-    double sweep_angle = sign * acos(v);
+    double sweep_angle = sign * std::acos(v);
     if(!sweep_flag && sweep_angle > 0)
     {
         sweep_angle -= pi * 2.0;
diff --git a/deps/agg/src/agg_curves.cpp b/deps/agg/src/agg_curves.cpp
index 24aba82..0077248 100644
--- a/deps/agg/src/agg_curves.cpp
+++ b/deps/agg/src/agg_curves.cpp
@@ -21,7 +21,7 @@ namespace agg
 {
 
 //------------------------------------------------------------------------
-const double curve_distance_epsilon                  = 1e-30;
+//const double curve_distance_epsilon                  = 1e-30;
 const double curve_collinearity_epsilon              = 1e-30;
 const double curve_angle_tolerance_epsilon           = 0.01;
 enum curve_recursion_limit_e { curve_recursion_limit = 32 };
@@ -159,7 +159,7 @@ void curve3_div::recursive_bezier(double x1, double y1,
 
     double dx = x3-x1;
     double dy = y3-y1;
-    double d = fabs(((x2 - x3) * dy - (y2 - y3) * dx));
+    double d = std::fabs(((x2 - x3) * dy - (y2 - y3) * dx));
     double da;
 
     if(d > curve_collinearity_epsilon)
@@ -179,7 +179,7 @@ void curve3_div::recursive_bezier(double x1, double y1,
 
             // Angle & Cusp Condition
             //----------------------
-            da = fabs(atan2(y3 - y2, x3 - x2) - atan2(y2 - y1, x2 - x1));
+            da = std::fabs(std::atan2(y3 - y2, x3 - x2) - std::atan2(y2 - y1, x2 - x1));
             if(da >= pi) da = 2*pi - da;
 
             if(da < m_angle_tolerance)
@@ -419,8 +419,8 @@ void curve4_div::recursive_bezier(double x1, double y1,
     double dx = x4-x1;
     double dy = y4-y1;
 
-    double d2 = fabs(((x2 - x4) * dy - (y2 - y4) * dx));
-    double d3 = fabs(((x3 - x4) * dy - (y3 - y4) * dx));
+    double d2 = std::fabs(((x2 - x4) * dy - (y2 - y4) * dx));
+    double d3 = std::fabs(((x3 - x4) * dy - (y3 - y4) * dx));
     double da1, da2, k;
 
     switch((int(d2 > curve_collinearity_epsilon) << 1) +
@@ -489,7 +489,7 @@ void curve4_div::recursive_bezier(double x1, double y1,
 
             // Angle Condition
             //----------------------
-            da1 = fabs(atan2(y4 - y3, x4 - x3) - atan2(y3 - y2, x3 - x2));
+            da1 = std::fabs(std::atan2(y4 - y3, x4 - x3) - std::atan2(y3 - y2, x3 - x2));
             if(da1 >= pi) da1 = 2*pi - da1;
 
             if(da1 < m_angle_tolerance)
@@ -523,7 +523,7 @@ void curve4_div::recursive_bezier(double x1, double y1,
 
             // Angle Condition
             //----------------------
-            da1 = fabs(atan2(y3 - y2, x3 - x2) - atan2(y2 - y1, x2 - x1));
+            da1 = std::fabs(std::atan2(y3 - y2, x3 - x2) - std::atan2(y2 - y1, x2 - x1));
             if(da1 >= pi) da1 = 2*pi - da1;
 
             if(da1 < m_angle_tolerance)
@@ -560,9 +560,9 @@ void curve4_div::recursive_bezier(double x1, double y1,
 
             // Angle & Cusp Condition
             //----------------------
-            k   = atan2(y3 - y2, x3 - x2);
-            da1 = fabs(k - atan2(y2 - y1, x2 - x1));
-            da2 = fabs(atan2(y4 - y3, x4 - x3) - k);
+            k   = std::atan2(y3 - y2, x3 - x2);
+            da1 = std::fabs(k - std::atan2(y2 - y1, x2 - x1));
+            da2 = std::fabs(std::atan2(y4 - y3, x4 - x3) - k);
             if(da1 >= pi) da1 = 2*pi - da1;
             if(da2 >= pi) da2 = 2*pi - da2;
 
diff --git a/deps/agg/src/agg_pixfmt_rgba.cpp b/deps/agg/src/agg_pixfmt_rgba.cpp
index 4541e44..f07c540 100644
--- a/deps/agg/src/agg_pixfmt_rgba.cpp
+++ b/deps/agg/src/agg_pixfmt_rgba.cpp
@@ -1,7 +1,14 @@
+
 #include "agg_pixfmt_rgba.h"
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/gil/gil_all.hpp>
 #include <boost/gil/extension/toolbox/hsv.hpp>
-//#include <iostream>
+#include <boost/gil/extension/toolbox/hsl.hpp>
+#pragma GCC diagnostic pop
 
 namespace agg
 {
@@ -88,15 +95,16 @@ void comp_op_rgba_color<ColorT,Order>::blend_pix(value_type* p,
     {
         using namespace boost;
         using namespace gil;
-        using namespace hsv_color_space;
+        using namespace hsl_color_space;
         rgb8_pixel_t rgb_src(sr,sg,sb);
         rgb8_pixel_t rgb_dst(p[Order::R],p[Order::G],p[Order::B]);
-        hsv32f_pixel_t hsv_src,hsv_dst;
-        color_convert( rgb_src, hsv_src);
-        color_convert( rgb_dst, hsv_dst);
-        get_color(hsv_dst,hue_t()) = get_color(hsv_src,hue_t());
-        get_color(hsv_dst,saturation_t()) = get_color(hsv_src,saturation_t());
-        color_convert(hsv_dst, rgb_dst);
+        hsl32f_pixel_t hsl_src,hsl_dst;
+        color_convert( rgb_src, hsl_src);
+        color_convert( rgb_dst, hsl_dst);
+        get_color(hsl_dst,hue_t()) = get_color(hsl_src,hue_t());
+        get_color(hsl_dst,saturation_t()) = get_color(hsl_src,saturation_t());
+        get_color(hsl_dst,lightness_t()) = get_color(hsl_dst,lightness_t());
+        color_convert(hsl_dst, rgb_dst);
         p[Order::R] = get_color(rgb_dst,red_t());
         p[Order::G] = get_color(rgb_dst,green_t());
         p[Order::B] = get_color(rgb_dst,blue_t());
diff --git a/deps/agg/src/agg_rounded_rect.cpp b/deps/agg/src/agg_rounded_rect.cpp
index 5414528..6307d60 100644
--- a/deps/agg/src/agg_rounded_rect.cpp
+++ b/deps/agg/src/agg_rounded_rect.cpp
@@ -78,8 +78,8 @@ void rounded_rect::radius(double rx1, double ry1, double rx2, double ry2,
 //--------------------------------------------------------------------
 void rounded_rect::normalize_radius()
 {
-    double dx = fabs(m_x2 - m_x1);
-    double dy = fabs(m_y2 - m_y1);
+    double dx = std::fabs(m_x2 - m_x1);
+    double dy = std::fabs(m_y2 - m_y1);
 
     double k = 1.0;
     double t;
diff --git a/deps/agg/src/agg_trans_affine.cpp b/deps/agg/src/agg_trans_affine.cpp
index cf22032..b5853b9 100644
--- a/deps/agg/src/agg_trans_affine.cpp
+++ b/deps/agg/src/agg_trans_affine.cpp
@@ -142,7 +142,7 @@ bool trans_affine::is_identity(double epsilon) const
 //------------------------------------------------------------------------
 bool trans_affine::is_valid(double epsilon) const
 {
-    return fabs(sx) > epsilon && fabs(sy) > epsilon;
+    return std::fabs(sx) > epsilon && std::fabs(sy) > epsilon;
 }
 
 //------------------------------------------------------------------------
@@ -165,7 +165,7 @@ double trans_affine::rotation() const
     double y2 = 0.0;
     transform(&x1, &y1);
     transform(&x2, &y2);
-    return atan2(y2-y1, x2-x1);
+    return std::atan2(y2-y1, x2-x1);
 }
 
 //------------------------------------------------------------------------
diff --git a/deps/agg/src/agg_vcgen_dash.cpp b/deps/agg/src/agg_vcgen_dash.cpp
index 2799dc1..3112390 100644
--- a/deps/agg/src/agg_vcgen_dash.cpp
+++ b/deps/agg/src/agg_vcgen_dash.cpp
@@ -54,7 +54,7 @@ void vcgen_dash::remove_all_dashes()
 //------------------------------------------------------------------------
 void vcgen_dash::add_dash(double dash_len, double gap_len)
 {
-    if(m_num_dashes < max_dashes)
+    if(m_num_dashes < max_dashes-1)
     {
         m_total_dash_len += dash_len + gap_len;
         m_dashes[m_num_dashes++] = dash_len;
@@ -67,7 +67,7 @@ void vcgen_dash::add_dash(double dash_len, double gap_len)
 void vcgen_dash::dash_start(double ds)
 {
     m_dash_start = ds;
-    calc_dash_start(fabs(ds));
+    calc_dash_start(std::fabs(ds));
 }
 
 
diff --git a/boost/geometry/extensions/index/rtree/helpers.hpp b/deps/boost/geometry/extensions/index/rtree/helpers.hpp
similarity index 100%
rename from boost/geometry/extensions/index/rtree/helpers.hpp
rename to deps/boost/geometry/extensions/index/rtree/helpers.hpp
diff --git a/deps/boost/geometry/extensions/index/rtree/rtree.hpp b/deps/boost/geometry/extensions/index/rtree/rtree.hpp
new file mode 100644
index 0000000..2cf5796
--- /dev/null
+++ b/deps/boost/geometry/extensions/index/rtree/rtree.hpp
@@ -0,0 +1,773 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Boost.SpatialIndex - rtree implementation
+//
+// Copyright 2008 Federico J. Fernandez.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_HPP
+#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_HPP
+
+#include <cstddef>
+#include <iostream> // TODO: Remove if print() is removed
+#include <stdexcept>
+#include <utility>
+#include <vector>
+
+#include <boost/concept_check.hpp>
+#include <memory>
+
+#include <boost/geometry/algorithms/area.hpp>
+
+#include <boost/geometry/extensions/index/rtree/rtree_node.hpp>
+#include <boost/geometry/extensions/index/rtree/rtree_leaf.hpp>
+
+namespace boost { namespace geometry { namespace index
+{
+
+template <typename Box, typename Value >
+class rtree
+{
+public:
+
+    typedef std::shared_ptr<rtree_node<Box, Value> > node_pointer;
+    typedef std::shared_ptr<rtree_leaf<Box, Value> > leaf_pointer;
+
+    /**
+     * \brief Creates a rtree with 'maximum' elements per node and 'minimum'.
+     */
+    rtree(unsigned int const& maximum, unsigned int const& minimum)
+        : m_count(0)
+        , m_min_elems_per_node(minimum)
+        , m_max_elems_per_node(maximum)
+        , m_root(new rtree_node<Box, Value>(node_pointer(), 1))
+    {
+    }
+
+    /**
+     * \brief Creates a rtree with maximum elements per node
+     *        and minimum (box is ignored).
+     */
+    rtree(Box const& box, unsigned int const& maximum, unsigned int const& minimum)
+        : m_count(0)
+        , m_min_elems_per_node(minimum)
+        , m_max_elems_per_node(maximum)
+        , m_root(new rtree_node<Box, Value>(node_pointer(), 1))
+    {
+        boost::ignore_unused_variable_warning(box);
+    }
+
+    /**
+     * \brief destructor (virtual because we have virtual functions)
+     */
+    virtual ~rtree() {}
+
+
+    /**
+     * \brief Remove elements inside the 'box'
+     */
+    inline void remove(Box const& box)
+    {
+        try
+        {
+            node_pointer leaf(choose_exact_leaf(box));
+            typename rtree_leaf<Box, Value>::leaf_map q_leaves;
+
+            leaf->remove(box);
+
+            if (leaf->elements() < m_min_elems_per_node && elements() > m_min_elems_per_node)
+            {
+                q_leaves = leaf->get_leaves();
+
+                // we remove the leaf_node in the parent node because now it's empty
+                leaf->get_parent()->remove(leaf->get_parent()->get_box(leaf));
+            }
+
+            typename rtree_node<Box, Value>::node_map q_nodes;
+            condense_tree(leaf, q_nodes);
+
+            std::vector<std::pair<Box, Value> > s;
+            for (typename rtree_node<Box, Value>::node_map::const_iterator it = q_nodes.begin();
+                 it != q_nodes.end(); ++it)
+            {
+                typename rtree_leaf<Box, Value>::leaf_map leaves = it->second->get_leaves();
+
+                // reinserting leaves from nodes
+                for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator itl = leaves.begin();
+                     itl != leaves.end(); ++itl)
+                {
+                    s.push_back(*itl);
+                }
+            }
+
+            for (typename std::vector<std::pair<Box, Value> >::const_iterator it = s.begin(); it != s.end(); ++it)
+            {
+                m_count--;
+                insert(it->first, it->second);
+            }
+
+            // if the root has only one child and the child is not a leaf,
+            // make it the root
+            if (m_root->elements() == 1)
+            {
+                if (!m_root->first_element()->is_leaf())
+                {
+                    m_root = m_root->first_element();
+                }
+            }
+            // reinserting leaves
+            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = q_leaves.begin();
+                 it != q_leaves.end(); ++it)
+            {
+                m_count--;
+                insert(it->first, it->second);
+            }
+
+            m_count--;
+        }
+        catch(std::logic_error & e)
+        {
+            // TODO: mloskot - replace with Boost.Geometry exception
+
+            // not found
+            std::cerr << e.what() << std::endl;
+            return;
+        }
+    }
+
+    /**
+     * \brief Remove element inside the box with value
+     */
+    void remove(Box const& box, Value const& value)
+    {
+        try
+        {
+            node_pointer leaf;
+
+            // find possible leaves
+            typedef typename std::vector<node_pointer > node_type;
+            node_type nodes;
+            m_root->find_leaves(box, nodes);
+
+            // refine the result
+            for (typename node_type::const_iterator it = nodes.begin(); it != nodes.end(); ++it)
+            {
+                leaf = *it;
+                try
+                {
+                    leaf->remove(value);
+                    break;
+                } catch (...)
+                {
+                    leaf = node_pointer();
+                }
+            }
+
+            if (!leaf)
+                return;
+
+            typename rtree_leaf < Box, Value >::leaf_map q_leaves;
+
+            if (leaf->elements() < m_min_elems_per_node && elements() > m_min_elems_per_node)
+            {
+                q_leaves = leaf->get_leaves();
+
+                // we remove the leaf_node in the parent node because now it's empty
+                leaf->get_parent()->remove(leaf->get_parent()->get_box(leaf));
+            }
+
+            typename rtree_node<Box, Value>::node_map q_nodes;
+            condense_tree(leaf, q_nodes);
+
+            std::vector<std::pair<Box, Value> > s;
+            for (typename rtree_node<Box, Value>::node_map::const_iterator it = q_nodes.begin();
+                 it != q_nodes.end(); ++it)
+            {
+                typename rtree_leaf<Box, Value>::leaf_map leaves = it->second->get_leaves();
+
+                // reinserting leaves from nodes
+                for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator itl = leaves.begin();
+                     itl != leaves.end(); ++itl)
+                {
+                    s.push_back(*itl);
+                }
+            }
+
+            for (typename std::vector<std::pair<Box, Value> >::const_iterator it = s.begin(); it != s.end(); ++it)
+            {
+                m_count--;
+                insert(it->first, it->second);
+            }
+
+            // if the root has only one child and the child is not a leaf,
+            // make it the root
+            if (m_root->elements() == 1)
+            {
+                if (!m_root->first_element()->is_leaf())
+                {
+                    m_root = m_root->first_element();
+                }
+            }
+
+            // reinserting leaves
+            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = q_leaves.begin();
+                 it != q_leaves.end(); ++it)
+            {
+                m_count--;
+                insert(it->first, it->second);
+            }
+
+            m_count--;
+
+        }
+        catch(std::logic_error & e)
+        {
+            // TODO: mloskot - ggl exception
+
+            // not found
+            std::cerr << e.what() << std::endl;
+            return;
+        }
+    }
+
+    /**
+     * \brief Returns the number of elements.
+     */
+    inline unsigned int elements() const
+    {
+        return m_count;
+    }
+
+
+    /**
+     * \brief Inserts an element with 'box' as key with value.
+     */
+    inline void insert(Box const& box, Value const& value)
+    {
+        m_count++;
+
+        node_pointer leaf(choose_corresponding_leaf(box));
+
+        // check if the selected leaf is full to do the split if necessary
+        if (leaf->elements() >= m_max_elems_per_node)
+        {
+            leaf->insert(box, value);
+
+            // split!
+            node_pointer n1(new rtree_leaf<Box, Value>(leaf->get_parent()));
+            node_pointer n2(new rtree_leaf<Box, Value>(leaf->get_parent()));
+
+            split_node(leaf, n1, n2);
+            adjust_tree(leaf, n1, n2);
+        }
+        else
+        {
+            leaf->insert(box, value);
+            adjust_tree(leaf);
+        }
+    }
+
+
+    /**
+     * \brief Returns all the values inside 'box'
+     */
+    inline std::deque<Value> find(Box const& box) const
+    {
+        std::deque<Value> result;
+        m_root->find(box, result, false);
+        return result;
+    }
+
+    /**
+     * \brief Print Rtree (mainly for debug)
+     */
+    inline void print()
+    {
+        std::cerr << "===================================" << std::endl;
+        std::cerr << " Min/Max: " << m_min_elems_per_node << " / " << m_max_elems_per_node << std::endl;
+        std::cerr << "Leaves: " << m_root->get_leaves().size() << std::endl;
+        m_root->print();
+        std::cerr << "===================================" << std::endl;
+    }
+
+private:
+
+    /// number of elements
+    unsigned int m_count;
+
+    /// minimum number of elements per node
+    unsigned int m_min_elems_per_node;
+
+    /// maximum number of elements per node
+    unsigned int m_max_elems_per_node;
+
+    /// tree root
+    node_pointer m_root;
+
+    /**
+     * \brief Reorganize the tree after a removal. It tries to
+     *        join nodes with less elements than m.
+     */
+    void condense_tree(node_pointer const& leaf,
+        typename rtree_node<Box, Value>::node_map& q_nodes)
+    {
+        if (leaf.get() == m_root.get())
+        {
+            // if it's the root we are done
+            return;
+        }
+
+        node_pointer parent = leaf->get_parent();
+        parent->adjust_box(leaf);
+
+        if (parent->elements() < m_min_elems_per_node)
+        {
+            if (parent.get() == m_root.get())
+            {
+                // if the parent is underfull and it's the root we just exit
+                return;
+            }
+
+            // get the nodes that we should reinsert
+            typename rtree_node<Box, Value>::node_map this_nodes = parent->get_nodes();
+            for(typename rtree_node<Box, Value>::node_map::const_iterator it = this_nodes.begin();
+                it != this_nodes.end(); ++it)
+            {
+                q_nodes.push_back(*it);
+            }
+
+            // we remove the node in the parent node because now it should be
+            // re inserted
+            parent->get_parent()->remove(parent->get_parent()->get_box(parent));
+        }
+
+        condense_tree(parent, q_nodes);
+    }
+
+    /**
+     * \brief After an insertion splits nodes with more than 'maximum' elements.
+     */
+    inline void adjust_tree(node_pointer& node)
+    {
+        if (node.get() == m_root.get())
+        {
+            // we finished the adjust
+            return;
+        }
+
+        // as there are no splits just adjust the box of the parent and go on
+        node_pointer parent = node->get_parent();
+        parent->adjust_box(node);
+        adjust_tree(parent);
+    }
+
+    /**
+     * \brief After an insertion splits nodes with more than maximum elements
+     *        (recursive step with subtrees 'n1' and 'n2' to be joined).
+     */
+    void adjust_tree(node_pointer& leaf, node_pointer& n1, node_pointer& n2)
+    {
+        // check if we are in the root and do the split
+        if (leaf.get() == m_root.get())
+        {
+            node_pointer new_root(new rtree_node<Box,Value>(node_pointer (), leaf->get_level() + 1));
+            new_root->add_node(n1->compute_box(), n1);
+            new_root->add_node(n2->compute_box(), n2);
+
+            n1->set_parent(new_root);
+            n2->set_parent(new_root);
+
+            n1->update_parent(n1);
+            n2->update_parent(n2);
+
+            m_root = new_root;
+            return;
+        }
+
+        node_pointer parent = leaf->get_parent();
+
+        parent->replace_node(leaf, n1);
+        parent->add_node(n2->compute_box(), n2);
+
+        // if parent is full, split and readjust
+        if (parent->elements() > m_max_elems_per_node)
+        {
+            node_pointer p1(new rtree_node<Box, Value>(parent->get_parent(), parent->get_level()));
+            node_pointer p2(new rtree_node<Box, Value>(parent->get_parent(), parent->get_level()));
+
+            split_node(parent, p1, p2);
+            adjust_tree(parent, p1, p2);
+        }
+        else
+        {
+            adjust_tree(parent);
+        }
+    }
+
+    /**
+     * \brief Splits 'n' in 'n1' and 'n2'
+     */
+    void split_node(node_pointer const& n, node_pointer& n1, node_pointer& n2) const
+    {
+        unsigned int seed1 = 0;
+        unsigned int seed2 = 0;
+        std::vector<Box> boxes = n->get_boxes();
+
+        n1->set_parent(n->get_parent());
+        n2->set_parent(n->get_parent());
+
+        linear_pick_seeds(n, seed1, seed2);
+
+        if (n->is_leaf())
+        {
+            n1->add_value(boxes[seed1], n->get_value(seed1));
+            n2->add_value(boxes[seed2], n->get_value(seed2));
+        }
+        else
+        {
+            n1->add_node(boxes[seed1], n->get_node(seed1));
+            n2->add_node(boxes[seed2], n->get_node(seed2));
+        }
+
+        unsigned int index = 0;
+
+        if (n->is_leaf())
+        {
+            // TODO: mloskot - add assert(node.size() >= 2); or similar
+
+            typename rtree_leaf<Box, Value>::leaf_map nodes = n->get_leaves();
+            unsigned int remaining = nodes.size() - 2;
+
+            for (typename rtree_leaf<Box, Value>::leaf_map::const_iterator it = nodes.begin();
+                 it != nodes.end(); ++it, index++)
+            {
+                if (index != seed1 && index != seed2)
+                {
+                    if (n1->elements() + remaining == m_min_elems_per_node)
+                    {
+                        n1->add_value(it->first, it->second);
+                        continue;
+                    }
+                    if (n2->elements() + remaining == m_min_elems_per_node)
+                    {
+                        n2->add_value(it->first, it->second);
+                        continue;
+                    }
+
+                    remaining--;
+
+                    /// current boxes of each group
+                    Box b1, b2;
+
+                    /// enlarged boxes of each group
+                    Box eb1, eb2;
+                    b1 = n1->compute_box();
+                    b2 = n2->compute_box();
+
+                    /// areas
+                    typedef typename coordinate_type<Box>::type coordinate_type;
+                    coordinate_type b1_area, b2_area;
+                    coordinate_type eb1_area, eb2_area;
+                    b1_area = geometry::area(b1);
+                    b2_area = geometry::area(b2);
+                    eb1_area = compute_union_area(b1, it->first);
+                    eb2_area = compute_union_area(b2, it->first);
+
+                    if (eb1_area - b1_area > eb2_area - b2_area)
+                    {
+                        n2->add_value(it->first, it->second);
+                    }
+                    if (eb1_area - b1_area < eb2_area - b2_area)
+                    {
+                        n1->add_value(it->first, it->second);
+                    }
+                    if (eb1_area - b1_area == eb2_area - b2_area)
+                    {
+                        if (b1_area < b2_area)
+                        {
+                            n1->add_value(it->first, it->second);
+                        }
+                        if (b1_area > b2_area)
+                        {
+                            n2->add_value(it->first, it->second);
+                        }
+                        if (b1_area == b2_area)
+                        {
+                            if (n1->elements() > n2->elements())
+                            {
+                                n2->add_value(it->first, it->second);
+                            }
+                            else
+                            {
+                                n1->add_value(it->first, it->second);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        else
+        {
+            // TODO: mloskot - add assert(node.size() >= 2); or similar
+
+            typename rtree_node<Box, Value>::node_map nodes = n->get_nodes();
+            unsigned int remaining = nodes.size() - 2;
+            for(typename rtree_node<Box, Value>::node_map::const_iterator it = nodes.begin();
+                it != nodes.end(); ++it, index++)
+            {
+
+                if (index != seed1 && index != seed2)
+                {
+
+                    if (n1->elements() + remaining == m_min_elems_per_node)
+                    {
+                        n1->add_node(it->first, it->second);
+                        continue;
+                    }
+                    if (n2->elements() + remaining == m_min_elems_per_node)
+                    {
+                        n2->add_node(it->first, it->second);
+                        continue;
+                    }
+
+                    remaining--;
+
+                    /// current boxes of each group
+                    Box b1, b2;
+
+                    /// enlarged boxes of each group
+                    Box eb1, eb2;
+                    b1 = n1->compute_box();
+                    b2 = n2->compute_box();
+
+                    /// areas
+                    typedef typename coordinate_type<Box>::type coordinate_type;
+                    coordinate_type b1_area, b2_area;
+                    coordinate_type eb1_area, eb2_area;
+                    b1_area = geometry::area(b1);
+                    b2_area = geometry::area(b2);
+
+                    eb1_area = compute_union_area(b1, it->first);
+                    eb2_area = compute_union_area(b2, it->first);
+
+                    if (eb1_area - b1_area > eb2_area - b2_area)
+                    {
+                        n2->add_node(it->first, it->second);
+                    }
+                    if (eb1_area - b1_area < eb2_area - b2_area)
+                    {
+                        n1->add_node(it->first, it->second);
+                    }
+                    if (eb1_area - b1_area == eb2_area - b2_area)
+                    {
+                        if (b1_area < b2_area)
+                        {
+                            n1->add_node(it->first, it->second);
+                        }
+                        if (b1_area > b2_area)
+                        {
+                            n2->add_node(it->first, it->second);
+                        }
+                        if (b1_area == b2_area)
+                        {
+                            if (n1->elements() > n2->elements())
+                            {
+                                n2->add_node(it->first, it->second);
+                            }
+                            else
+                            {
+                                n1->add_node(it->first, it->second);
+                            }
+                        }
+                    }
+
+                }
+            }
+        }
+    }
+
+    /**
+     * \brief Choose initial values for the split algorithm (linear version)
+     */
+    void linear_pick_seeds(node_pointer const& n, unsigned int &seed1, unsigned int &seed2) const
+    {
+        // get boxes from the node
+        std::vector<Box>boxes = n->get_boxes();
+        if (boxes.size() == 0)
+        {
+            // TODO: mloskot - throw ggl exception
+            throw std::logic_error("Empty Node trying to Pick Seeds");
+        }
+
+        // only two dim for now
+        // unsigned int dimensions =
+        //   geometry::point_traits<Point>::coordinate_count;
+
+        // find the first two elements
+        typedef typename coordinate_type<Box>::type coordinate_type;
+        coordinate_type separation_x, separation_y;
+        unsigned int first_x, second_x;
+        unsigned int first_y, second_y;
+        find_normalized_separations<0u>(boxes, separation_x, first_x, second_x);
+        find_normalized_separations<1u>(boxes, separation_y, first_y, second_y);
+
+        if (separation_x > separation_y)
+        {
+            seed1 = first_x;
+            seed2 = second_x;
+        }
+        else
+        {
+            seed1 = first_y;
+            seed2 = second_y;
+        }
+    }
+
+    /**
+     * \brief Find distances between possible initial values for the
+     *        pick_seeds algorithm.
+     */
+    template <std::size_t D, typename T>
+    void find_normalized_separations(std::vector<Box> const& boxes, T& separation,
+        unsigned int& first, unsigned int& second) const
+    {
+        if (boxes.size() < 2)
+        {
+            throw std::logic_error("At least two boxes needed to split");
+        }
+
+        // find the lowest high
+        typename std::vector<Box>::const_iterator it = boxes.begin();
+        typedef typename coordinate_type<Box>::type coordinate_type;
+        coordinate_type lowest_high = geometry::get<max_corner, D>(*it);
+        unsigned int lowest_high_index = 0;
+        unsigned int index = 1;
+        ++it;
+        for(; it != boxes.end(); ++it)
+        {
+            if (geometry::get<max_corner, D>(*it) < lowest_high)
+            {
+                lowest_high = geometry::get<max_corner, D>(*it);
+                lowest_high_index = index;
+            }
+            index++;
+        }
+
+        // find the highest low
+        coordinate_type highest_low = 0;
+        unsigned int highest_low_index = 0;
+        if (lowest_high_index == 0)
+        {
+            highest_low = geometry::get<min_corner, D>(boxes[1]);
+            highest_low_index = 1;
+        }
+        else
+        {
+            highest_low = geometry::get<min_corner, D>(boxes[0]);
+            highest_low_index = 0;
+        }
+
+        index = 0;
+        for (it = boxes.begin();
+             it != boxes.end(); ++it, index++)
+        {
+            if (geometry::get<min_corner, D>(*it) >= highest_low && index != lowest_high_index)
+            {
+                highest_low = geometry::get<min_corner, D>(*it);
+                highest_low_index = index;
+            }
+        }
+
+        // find the lowest low
+        it = boxes.begin();
+        coordinate_type lowest_low = geometry::get<min_corner, D>(*it);
+        ++it;
+        for(; it != boxes.end(); ++it)
+        {
+            if (geometry::get<min_corner, D>(*it) < lowest_low)
+            {
+                lowest_low = geometry::get<min_corner, D>(*it);
+            }
+        }
+
+        // find the highest high
+        it = boxes.begin();
+        coordinate_type highest_high = geometry::get<max_corner, D>(*it);
+        ++it;
+        for(; it != boxes.end(); ++it)
+        {
+            if (geometry::get<max_corner, D>(*it) > highest_high)
+            {
+                highest_high = geometry::get<max_corner, D>(*it);
+            }
+        }
+
+        coordinate_type const width = highest_high - lowest_low;
+
+        separation = (highest_low - lowest_high) / width;
+        first = highest_low_index;
+        second = lowest_high_index;
+    }
+
+    /**
+     * \brief Choose one of the possible leaves to make an insertion
+     */
+    inline node_pointer choose_corresponding_leaf(Box const& e)
+    {
+        node_pointer node = m_root;
+
+        // if the tree is empty add an initial leaf
+        if (m_root->elements() == 0)
+        {
+            leaf_pointer new_leaf(new rtree_leaf<Box, Value>(m_root));
+            m_root->add_leaf_node(Box (), new_leaf);
+
+            return new_leaf;
+        }
+
+        while (!node->is_leaf())
+        {
+            /// traverse node's map to see which node we should select
+            node = node->choose_node(e);
+        }
+        return node;
+    }
+
+    /**
+     * \brief Choose the exact leaf where an insertion should be done
+     */
+    node_pointer choose_exact_leaf(Box const&e) const
+    {
+        // find possible leaves
+        typedef typename std::vector<node_pointer> node_type;
+        node_type nodes;
+        m_root->find_leaves(e, nodes);
+
+        // refine the result
+        for (typename node_type::const_iterator it = nodes.begin(); it != nodes.end(); ++it)
+        {
+            typedef std::vector<std::pair<Box, Value> > leaves_type;
+            leaves_type leaves = (*it)->get_leaves();
+
+            for (typename leaves_type::const_iterator itl = leaves.begin();
+                 itl != leaves.end(); ++itl)
+            {
+
+                if (itl->first.max_corner() == e.max_corner()
+                    && itl->first.min_corner() == e.min_corner())
+                {
+                    return *it;
+                }
+            }
+        }
+
+        // TODO: mloskot - ggl exception
+        throw std::logic_error("Leaf not found");
+    }
+};
+
+}}} // namespace boost::geometry::index
+
+#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_HPP
diff --git a/deps/boost/geometry/extensions/index/rtree/rtree_leaf.hpp b/deps/boost/geometry/extensions/index/rtree/rtree_leaf.hpp
new file mode 100644
index 0000000..733e181
--- /dev/null
+++ b/deps/boost/geometry/extensions/index/rtree/rtree_leaf.hpp
@@ -0,0 +1,252 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Boost.SpatialIndex - rtree leaf implementation
+//
+// Copyright 2008 Federico J. Fernandez.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
+#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
+
+#include <deque>
+#include <iostream> // TODO: Remove if print() is removed
+#include <stdexcept>
+#include <utility>
+#include <vector>
+
+#include <memory>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/expand.hpp>
+
+#include <boost/geometry/extensions/index/rtree/rtree_node.hpp>
+
+namespace boost { namespace geometry { namespace index
+{
+
+template <typename Box, typename Value >
+class rtree_leaf : public rtree_node<Box, Value>
+{
+public:
+
+    /// container type for the leaves
+    typedef std::shared_ptr<rtree_node<Box, Value> > node_pointer;
+    typedef std::vector<std::pair<Box, Value> > leaf_map;
+
+    /**
+     * \brief Creates an empty leaf
+     */
+    inline rtree_leaf()
+    {
+    }
+
+    /**
+     * \brief Creates a new leaf, with 'parent' as parent
+     */
+    inline rtree_leaf(node_pointer const& parent)
+        : rtree_node<Box, Value> (parent, 0)
+    {
+    }
+
+    /**
+     * \brief Search for elements in 'box' in the Rtree. Add them to 'result'.
+     *        If exact_match is true only return the elements having as
+     *        key the 'box'. Otherwise return everything inside 'box'.
+     */
+    virtual void find(Box const& box, std::deque<Value>& result, bool const exact_match)
+    {
+        for (typename leaf_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            if (exact_match)
+            {
+                if (geometry::equals(it->first, box))
+                {
+                    result.push_back(it->second);
+                }
+            }
+            else
+            {
+                if (is_overlapping(it->first, box))
+                {
+                    result.push_back(it->second);
+                }
+            }
+        }
+    }
+
+    /**
+     * \brief Compute bounding box for this leaf
+     */
+    virtual Box compute_box() const
+    {
+        if (m_nodes.empty())
+        {
+            return Box ();
+        }
+
+        Box r;
+        geometry::assign_inverse(r);
+        for(typename leaf_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
+        {
+            geometry::expand(r, it->first);
+        }
+        return r;
+    }
+
+    /**
+     * \brief True if we are a leaf
+     */
+    virtual bool is_leaf() const
+    {
+        return true;
+    }
+
+    /**
+     * \brief Number of elements in the tree
+     */
+    virtual unsigned int elements() const
+    {
+        return m_nodes.size();
+    }
+
+    /**
+     * \brief Insert a new element, with key 'box' and value 'v'
+     */
+    virtual void insert(Box const& box, Value const& v)
+    {
+        m_nodes.push_back(std::make_pair(box, v));
+    }
+
+    /**
+     * \brief Proyect leaves of this node.
+     */
+    virtual std::vector< std::pair<Box, Value> > get_leaves() const
+    {
+        return m_nodes;
+    }
+
+    /**
+     * \brief Add a new child (node) to this node
+     */
+    virtual void add_node(Box const&, node_pointer const&)
+    {
+        // TODO: mloskot - define & use GGL exception
+        throw std::logic_error("Can't add node to leaf node.");
+    }
+
+    /**
+     * \brief Add a new leaf to this node
+     */
+    virtual void add_value(Box const& box, Value const& v)
+    {
+        m_nodes.push_back(std::make_pair(box, v));
+    }
+
+
+    /**
+     * \brief Proyect value in position 'index' in the nodes container
+     */
+    virtual Value get_value(unsigned int index) const
+    {
+        return m_nodes[index].second;
+    }
+
+    /**
+     * \brief Box projector for leaf
+     */
+    virtual Box get_box(unsigned int index) const
+    {
+        return m_nodes[index].first;
+    }
+
+    /**
+     * \brief Remove value with key 'box' in this leaf
+     */
+    virtual void remove(Box const& box)
+    {
+
+        for (typename leaf_map::iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            if (geometry::equals(it->first, box))
+            {
+                m_nodes.erase(it);
+                return;
+            }
+        }
+
+        // TODO: mloskot - use GGL exception
+        throw std::logic_error("Node not found.");
+    }
+
+    /**
+     * \brief Remove value in this leaf
+     */
+    virtual void remove(Value const& v)
+    {
+        for (typename leaf_map::iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            if (it->second == v)
+            {
+                m_nodes.erase(it);
+                return;
+            }
+        }
+
+        // TODO: mloskot - use GGL exception
+        throw std::logic_error("Node not found.");
+    }
+
+    /**
+    * \brief Proyect boxes from this node
+    */
+    virtual std::vector<Box> get_boxes() const
+    {
+        std::vector<Box> result;
+        for (typename leaf_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            result.push_back(it->first);
+        }
+
+        return result;
+    }
+
+    /**
+    * \brief Print leaf (mainly for debug)
+    */
+    virtual void print() const
+    {
+        std::cerr << "\t" << " --> Leaf --------" << std::endl;
+        std::cerr << "\t" << "  Size: " << m_nodes.size() << std::endl;
+        for (typename leaf_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            std::cerr << "\t" << "  | ";
+            std::cerr << "( " << geometry::get<min_corner, 0>
+                (it->first) << " , " << geometry::get<min_corner, 1>
+                (it->first) << " ) x ";
+            std::cerr << "( " << geometry::get<max_corner, 0>
+                (it->first) << " , " << geometry::get<max_corner, 1>
+                (it->first) << " )";
+            std::cerr << " -> ";
+            std::cerr << it->second;
+            std::cerr << " | " << std::endl;;
+        }
+        std::cerr << "\t" << " --< Leaf --------" << std::endl;
+    }
+
+private:
+
+    /// leaves of this node
+    leaf_map m_nodes;
+};
+
+}}} // namespace boost::geometry::index
+
+#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_LEAF_HPP
diff --git a/deps/boost/geometry/extensions/index/rtree/rtree_node.hpp b/deps/boost/geometry/extensions/index/rtree/rtree_node.hpp
new file mode 100644
index 0000000..ec9efad
--- /dev/null
+++ b/deps/boost/geometry/extensions/index/rtree/rtree_node.hpp
@@ -0,0 +1,493 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Boost.SpatialIndex - rtree node implementation
+//
+// Copyright 2008 Federico J. Fernandez.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
+#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
+
+#include <deque>
+#include <iostream> // TODO: Remove if print() is removed
+#include <stdexcept>
+#include <utility>
+#include <vector>
+
+#include <memory>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/expand.hpp>
+
+#include <boost/geometry/extensions/index/rtree/helpers.hpp>
+
+namespace boost { namespace geometry { namespace index
+{
+
+/// forward declaration
+template <typename Box, typename Value>
+class rtree_leaf;
+
+template <typename Box, typename Value>
+class rtree_node
+{
+public:
+
+    typedef std::shared_ptr<rtree_node<Box, Value> > node_pointer;
+    typedef std::shared_ptr<rtree_leaf<Box, Value> > leaf_pointer;
+
+    /// type for the node map
+    typedef std::vector<std::pair<Box, node_pointer > > node_map;
+
+    /**
+     * \brief Creates a default node (needed for the containers)
+     */
+    rtree_node()
+    {
+    }
+
+    /**
+     * \brief Creates a node with 'parent' as parent and 'level' as its level
+     */
+    rtree_node(node_pointer const& parent, unsigned int const& level)
+        : m_parent(parent), m_level(level)
+    {
+    }
+
+    /**
+     * \brief destructor (virtual because we have virtual functions)
+     */
+    virtual ~rtree_node()
+    {
+    }
+
+    /**
+     * \brief Level projector
+     */
+    virtual unsigned int get_level() const
+    {
+        return m_level;
+    }
+
+    /**
+     * \brief Number of elements in the subtree
+     */
+    virtual unsigned int elements() const
+    {
+        return m_nodes.size();
+    }
+
+    /**
+     * \brief Project first element, to replace root in case of condensing
+     */
+    inline node_pointer first_element() const
+    {
+        if (0 == m_nodes.size())
+        {
+            // TODO: mloskot - define & use GGL exception
+            throw std::logic_error("first_element in empty node");
+        }
+        return m_nodes.begin()->second;
+    }
+
+    /**
+     * \brief True if it is a leaf node
+     */
+    virtual bool is_leaf() const
+    {
+        return false;
+    }
+
+    /**
+     * \brief Proyector for the 'i' node
+     */
+    node_pointer get_node(unsigned int index)
+    {
+        return m_nodes[index].second;
+    }
+
+    /**
+     * \brief Search for elements in 'box' in the Rtree. Add them to 'result'.
+     *        If exact_match is true only return the elements having as
+     *        key the box 'box'. Otherwise return everything inside 'box'.
+     */
+    virtual void find(Box const& box, std::deque<Value>& result, bool const exact_match)
+    {
+        for (typename node_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            if (is_overlapping(it->first, box))
+            {
+                it->second->find(box, result, exact_match);
+            }
+        }
+    }
+
+    /**
+     * \brief Return in 'result' all the leaves inside 'box'
+     */
+    void find_leaves(Box const& box, typename std::vector<node_pointer>& result) const
+    {
+        for (typename node_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            if (is_overlapping(it->first, box))
+            {
+                if (it->second->is_leaf())
+                {
+                    result.push_back(it->second);
+                }
+                else
+                {
+                    it->second->find_leaves(box, result);
+                }
+            }
+        }
+    }
+
+    /**
+    * \brief Compute bounding box for this node
+    */
+    virtual Box compute_box() const
+    {
+        if (m_nodes.empty())
+        {
+            return Box();
+        }
+
+        Box result;
+        geometry::assign_inverse(result);
+        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
+        {
+            geometry::expand(result, it->first);
+        }
+
+        return result;
+    }
+
+    /**
+     * \brief Insert a value (not allowed for a node, only on leaves)
+     */
+    virtual void insert(Box const&, Value const&)
+    {
+        // TODO: mloskot - define & use GGL exception
+        throw std::logic_error("Insert in node!");
+    }
+
+    /**
+     * \brief Get the envelopes of a node
+     */
+    virtual std::vector<Box> get_boxes() const
+    {
+        std::vector<Box> result;
+        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
+        {
+            result.push_back(it->first);
+        }
+        return result;
+    }
+
+    /**
+     * \brief Recompute the bounding box
+     */
+    void adjust_box(node_pointer const& node)
+    {
+        unsigned int index = 0;
+        for (typename node_map::iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it, index++)
+        {
+            if (it->second.get() == node.get())
+            {
+                m_nodes[index] = std::make_pair(node->compute_box(), node);
+                return;
+            }
+        }
+    }
+
+    /**
+     * \brief Remove elements inside the 'box'
+     */
+    virtual void remove(Box const& box)
+    {
+        for (typename node_map::iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            if (geometry::equals(it->first, box))
+            {
+                m_nodes.erase(it);
+                return;
+            }
+        }
+    }
+
+    /**
+     * \brief Remove value in this leaf
+     */
+    virtual void remove(Value const&)
+    {
+        // TODO: mloskot - define & use GGL exception
+        throw std::logic_error("Can't remove a non-leaf node by value.");
+    }
+
+    /**
+     * \brief Replace the node in the m_nodes vector and recompute the box
+     */
+    void replace_node(node_pointer const& leaf, node_pointer& new_leaf)
+    {
+        unsigned int index = 0;
+        for(typename node_map::iterator it = m_nodes.begin(); it != m_nodes.end(); ++it, index++)
+        {
+            if (it->second.get() == leaf.get())
+            {
+                m_nodes[index] = std::make_pair(new_leaf->compute_box(), new_leaf);
+                new_leaf->update_parent(new_leaf);
+                return;
+            }
+        }
+
+        // TODO: mloskot - define & use GGL exception
+        throw std::logic_error("Node not found.");
+    }
+
+    /**
+     * \brief Add a child to this node
+     */
+    virtual void add_node(Box const& box, node_pointer const& node)
+    {
+        m_nodes.push_back(std::make_pair(box, node));
+        node->update_parent(node);
+    }
+
+    /**
+     * \brief add a value (not allowed in nodes, only on leaves)
+     */
+    virtual void add_value(Box const&, Value const&)
+    {
+        // TODO: mloskot - define & use GGL exception
+        throw std::logic_error("Can't add value to non-leaf node.");
+    }
+
+    /**
+     * \brief Add a child leaf to this node
+     */
+    inline void add_leaf_node(Box const& box, leaf_pointer const& leaf)
+    {
+        m_nodes.push_back(std::make_pair(box, leaf));
+    }
+
+    /**
+     * \brief Choose a node suitable for adding 'box'
+     */
+    node_pointer choose_node(Box const& box)
+    {
+        if (m_nodes.size() == 0)
+        {
+            // TODO: mloskot - define & use GGL exception
+            throw std::logic_error("Empty node trying to choose the least enlargement node.");
+        }
+
+        typedef typename coordinate_type<Box>::type coordinate_type;
+
+        bool first = true;
+        coordinate_type min_area = 0;
+        coordinate_type min_diff_area = 0;
+        node_pointer chosen_node;
+
+        // check for the least enlargement
+        for (typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
+        {
+            coordinate_type const
+                diff_area = coordinate_type(compute_union_area(box, it->first))
+                    - geometry::area(it->first);
+
+            if (first)
+            {
+                // it's the first time, we keep the first
+                min_diff_area = diff_area;
+                min_area = geometry::area(it->first);
+                chosen_node = it->second;
+
+                first = false;
+            }
+            else
+            {
+                if (diff_area < min_diff_area)
+                {
+                    min_diff_area = diff_area;
+                    min_area = geometry::area(it->first);
+                    chosen_node = it->second;
+                }
+                else
+                {
+                    if (diff_area == min_diff_area)
+                    {
+                        if (geometry::area(it->first) < min_area)
+                        {
+                            min_diff_area = diff_area;
+                            min_area = geometry::area(it->first);
+                            chosen_node = it->second;
+                        }
+                    }
+                }
+            }
+        }
+
+        return chosen_node;
+    }
+
+    /**
+     * \brief Empty the node
+     */
+    virtual void empty_nodes()
+    {
+        m_nodes.clear();
+    }
+
+    /**
+     * \brief Projector for parent
+     */
+    inline node_pointer get_parent() const
+    {
+        return m_parent;
+    }
+
+    /**
+     * \brief Update the parent of all the childs
+     */
+    void update_parent(node_pointer const& node)
+    {
+        for (typename node_map::iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
+        {
+            it->second->set_parent(node);
+        }
+    }
+
+    /**
+     * \brief Set parent
+     */
+    void set_parent(node_pointer const& node)
+    {
+        m_parent = node;
+    }
+
+    /**
+     * \brief Value projector for leaf_node (not allowed for non-leaf nodes)
+     */
+    virtual Value get_value(unsigned int) const
+    {
+        // TODO: mloskot - define & use GGL exception
+        throw std::logic_error("No values in a non-leaf node.");
+    }
+
+    /**
+     * \brief Box projector for node 'index'
+     */
+    virtual Box get_box(unsigned int index) const
+    {
+        return m_nodes[index].first;
+    }
+
+    /**
+     * \brief Box projector for node pointed by 'leaf'
+     */
+    virtual Box get_box(node_pointer const& leaf) const
+    {
+        for (typename node_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            if (it->second.get() == leaf.get())
+            {
+                return it->first;
+            }
+        }
+
+        // TODO: mloskot - define & use GGL exception
+        throw std::logic_error("Node not found");
+    }
+
+    /**
+     * \brief Children projector
+     */
+    node_map get_nodes() const
+    {
+        return m_nodes;
+    }
+
+    /**
+    * \brief Get leaves for a node
+    */
+    virtual std::vector<std::pair<Box, Value> > get_leaves() const
+    {
+        typedef std::vector<std::pair<Box, Value> > leaf_type;
+        leaf_type leaf;
+
+        for (typename node_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            leaf_type this_leaves = it->second->get_leaves();
+
+            for (typename leaf_type::iterator it_leaf = this_leaves.begin();
+                it_leaf != this_leaves.end(); ++it_leaf)
+            {
+                leaf.push_back(*it_leaf);
+            }
+        }
+
+        return leaf;
+    }
+
+    /**
+     * \brief Print Rtree subtree (mainly for debug)
+     */
+    virtual void print() const
+    {
+        std::cerr << " --> Node --------" << std::endl;
+        std::cerr << "  Address: " << this << std::endl;
+        std::cerr << "  Level: " << m_level << std::endl;
+        std::cerr << "  Size: " << m_nodes.size() << std::endl;
+        std::cerr << "  | ";
+        for(typename node_map::const_iterator it = m_nodes.begin(); it != m_nodes.end(); ++it)
+        {
+            if (this != it->second->get_parent().get())
+            {
+                std::cerr << "ERROR - " << this << " is not  " << it->second->get_parent().get() << " ";
+            }
+
+            std::cerr << "( " << geometry::get<min_corner, 0>(it->first) << " , "
+                << geometry::get<min_corner, 1>(it->first) << " ) x ";
+            std::cerr << "( " << geometry::get<max_corner, 0>(it->first) << " , "
+                << geometry::get<max_corner, 1>(it->first) << " )";
+            std::cerr << " | ";
+        }
+        std::cerr << std::endl;
+        std::cerr << " --< Node --------" << std::endl;
+
+        // print child nodes
+        std::cerr << " Children: " << std::endl;
+        for (typename node_map::const_iterator it = m_nodes.begin();
+             it != m_nodes.end(); ++it)
+        {
+            it->second->print();
+        }
+    }
+
+private:
+
+    /// parent node
+    node_pointer m_parent;
+
+    /// level of this node
+    // TODO: mloskot - Why not std::size_t or node_map::size_type, same with member functions?
+    unsigned int m_level;
+
+    /// child nodes
+    node_map m_nodes;
+};
+
+}}} // namespace boost::geometry::index
+
+#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_RTREE_NODE_HPP
diff --git a/boost/gil/extension/toolbox/hsl.hpp b/deps/boost/gil/extension/toolbox/hsl.hpp
similarity index 100%
rename from boost/gil/extension/toolbox/hsl.hpp
rename to deps/boost/gil/extension/toolbox/hsl.hpp
diff --git a/deps/boost/gil/extension/toolbox/hsv.hpp b/deps/boost/gil/extension/toolbox/hsv.hpp
new file mode 100644
index 0000000..ba12cbd
--- /dev/null
+++ b/deps/boost/gil/extension/toolbox/hsv.hpp
@@ -0,0 +1,244 @@
+// Copyright 2004 Christian Henning.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+/*************************************************************************************************/
+
+#ifndef GIL_HSV_H
+#define GIL_HSV_H
+
+////////////////////////////////////////////////////////////////////////////////////////
+/// \file
+/// \brief Support for HSV color space
+/// \author Christian Henning \n
+////////////////////////////////////////////////////////////////////////////////////////
+
+#include <boost/gil/gil_all.hpp>
+
+namespace boost { namespace gil {
+
+/// \addtogroup ColorNameModel
+/// \{
+namespace hsv_color_space
+{
+/// \brief Hue
+struct hue_t {};    
+/// \brief Saturation
+struct saturation_t{};
+/// \brief Value
+struct value_t {}; 
+}
+/// \}
+
+/// \ingroup ColorSpaceModel
+typedef mpl::vector3< hsv_color_space::hue_t
+                    , hsv_color_space::saturation_t
+                    , hsv_color_space::value_t
+                    > hsv_t;
+
+/// \ingroup LayoutModel
+typedef layout<hsv_t> hsv_layout_t;
+
+
+GIL_DEFINE_ALL_TYPEDEFS( 32f, hsv )
+
+/// \ingroup ColorConvert
+/// \brief RGB to HSV
+template <>
+struct default_color_converter_impl< rgb_t, hsv_t >
+{
+   template <typename P1, typename P2>
+   void operator()( const P1& src, P2& dst ) const
+   {
+      using namespace hsv_color_space;
+
+      // only bits32f for hsv is supported
+      bits32f temp_red   = channel_convert<bits32f>( get_color( src, red_t()   ));
+      bits32f temp_green = channel_convert<bits32f>( get_color( src, green_t() ));
+      bits32f temp_blue  = channel_convert<bits32f>( get_color( src, blue_t()  ));
+
+      bits32f hue, saturation, value;
+      bits32f min_color, max_color;
+
+      if( temp_red < temp_green )
+      {
+          min_color = std::min( temp_blue, temp_red );
+          max_color = std::max( temp_blue, temp_green );
+      }
+      else
+      {
+          min_color = std::min( temp_blue, temp_green );
+          max_color = std::max( temp_blue, temp_red );
+      }
+
+      value = max_color;
+
+      bits32f diff = max_color - min_color;
+
+      if( max_color < 0.0001f )
+      {  
+         saturation = 0.f;
+      }
+      else  
+      {      
+         saturation = diff / max_color;
+      }
+
+
+      if( saturation < 0.0001f )
+      {
+         //it doesn't matter what value it has
+         hue = 0.f; 
+      }   
+      else
+      { 
+         if( temp_red == max_color )
+         {
+            hue = ( temp_green - temp_blue )
+                / diff;
+         }
+         else if( temp_green == max_color )
+         {
+            hue = 2.f + ( temp_blue - temp_red ) 
+                / diff;
+         }
+         else
+         {
+            hue = 4.f + ( temp_red - temp_green ) 
+                / diff;
+         }
+
+         //to bring it to a number between 0 and 1
+         hue /= 6.f; 
+
+         if( hue < 0.f )
+         {
+            hue++;
+         }
+      }
+
+      get_color( dst, hue_t() )        = hue;
+      get_color( dst, saturation_t() ) = saturation;
+      get_color( dst, value_t() )      = value;
+   }
+};
+
+/// \ingroup ColorConvert
+/// \brief HSV to RGB
+template <>
+struct default_color_converter_impl<hsv_t,rgb_t>
+{
+   template <typename P1, typename P2>
+   void operator()( const P1& src, P2& dst) const
+   {
+      using namespace hsv_color_space;
+
+      bits32f red, green, blue;
+
+      //If saturation is 0, the color is a shade of gray
+      if( std::abs( get_color( src, saturation_t() )) < 0.0001f  )
+      {
+         // If saturation is 0, the color is a shade of gray
+         red   = get_color( src, value_t() );
+         green = get_color( src, value_t() );
+         blue  = get_color( src, value_t() );
+      }
+      else
+      {
+         bits32f frac, p, q, t, h;
+         bits32 i;
+
+         //to bring hue to a number between 0 and 6, better for the calculations
+         h = get_color( src, hue_t() );
+         h *= 6.f;
+
+         i = static_cast<bits32>( floor( h ));
+
+         frac = h - i;
+
+         // p = value * (1 - saturation)
+         p = get_color( src, value_t() ) 
+           * ( 1.f - get_color( src, saturation_t() ));
+
+         // q = value * (1 - saturation * hue_frac)
+         // it drops with increasing distance from floor(hue)
+         q = get_color( src, value_t() )
+           * ( 1.f - ( get_color( src, saturation_t() ) * frac ));
+
+         // t = value * (1 - (saturation * (1 - hue_frac))
+         // it grows with increasing distance from floor(hue)
+         t = get_color( src, value_t() ) 
+           * ( 1.f - ( get_color( src, saturation_t() ) * ( 1.f - frac )));
+
+         switch( i % 6 )
+         {         
+            case 0: // red to yellow
+            {
+               red   = get_color( src, value_t() );
+               green = t;
+               blue  = p;
+
+               break;
+            }
+
+            case 1: // yellow to green
+            {
+               red   = q;
+               green = get_color( src, value_t() );
+               blue  = p;
+
+               break;
+            }
+
+            case 2: // green to cyan
+            {
+               red   = p;
+               green = get_color( src, value_t() );
+               blue  = t;
+
+               break;
+            }
+
+            case 3: // cyan to blue
+            {
+               red   = p;
+               green = q;
+               blue  = get_color( src, value_t() );
+
+               break;
+            }
+
+            case 4: // blue to magenta
+            {
+               red   = t;
+               green = p;
+               blue  = get_color( src, value_t() );
+
+               break;
+            }
+
+            case 5: // magenta to red
+            {
+               red   = get_color( src, value_t() );
+               green = p; 
+               blue  = q;
+
+               break;
+            }
+
+         }
+      }
+
+      get_color(dst,red_t())  =
+         channel_convert<typename color_element_type< P2, red_t >::type>( red );
+      get_color(dst,green_t())=
+         channel_convert<typename color_element_type< P2, green_t >::type>( green );
+      get_color(dst,blue_t()) =
+         channel_convert<typename color_element_type< P2, blue_t >::type>( blue );
+   }
+};
+
+} }  // namespace boost::gil
+
+#endif // GIL_HSV_H
diff --git a/deps/clipper/build.py b/deps/clipper/build.py
index 1930ea5..db9938c 100644
--- a/deps/clipper/build.py
+++ b/deps/clipper/build.py
@@ -21,12 +21,7 @@ import os
 from glob import glob
 
 Import('env')
-
-clipper_env = env.Clone()
-
-if env['SUNCC']:
-    cxxflags = env['CUSTOM_CXXFLAGS'] + ' -O -KPIC -DNDEBUG'
-else:
-    cxxflags = env['CUSTOM_CXXFLAGS'] + ' -O%s -fPIC -DNDEBUG' % env['OPTIMIZATION']
-
-clipper_env.StaticLibrary('clipper', ['./src/clipper.cpp',], LIBS=[], CXXFLAGS=cxxflags, LINKFLAGS=env['CUSTOM_LDFLAGS'])
+lib_env = env.Clone()
+if 'g++' in env['CXX']:
+    lib_env.Append(CXXFLAGS='-fPIC')
+lib_env.StaticLibrary('clipper', ['./src/clipper.cpp',], LIBS=[])
diff --git a/deps/clipper/include/clipper.hpp b/deps/clipper/include/clipper.hpp
index 4683ef3..5495b66 100755
--- a/deps/clipper/include/clipper.hpp
+++ b/deps/clipper/include/clipper.hpp
@@ -1,8 +1,8 @@
 /*******************************************************************************
 *                                                                              *
 * Author    :  Angus Johnson                                                   *
-* Version   :  5.1.5                                                           *
-* Date      :  4 May 2013                                                      *
+* Version   :  6.0.0                                                           *
+* Date      :  30 October 2013                                                 *
 * Website   :  http://www.angusj.com                                           *
 * Copyright :  Angus Johnson 2010-2013                                         *
 *                                                                              *
@@ -35,12 +35,30 @@
 #define clipper_hpp
 
 #include <mapnik/config.hpp>
+#define CLIPPER_VERSION "6.0.0"
+
+//use_int32: When enabled 32bit ints are used instead of 64bit ints. This
+//improve performance but coordinate values are limited to the range +/- 46340
+//#define use_int32
+
+//use_xyz: adds a Z member to IntPoint. Adds a minor cost to perfomance.
+//#define use_xyz
+
+//use_lines: Enables line clipping. Adds a very minor cost to performance.
+//#define use_lines
+  
+//When enabled, code developed with earlier versions of Clipper 
+//(ie prior to ver 6) should compile without changes. 
+//In a future update, this compatability code will be removed.
+#define use_deprecated  
 
 #include <vector>
+#include <set>
 #include <stdexcept>
 #include <cstring>
 #include <cstdlib>
 #include <ostream>
+#include <functional>
 
 namespace ClipperLib {
 
@@ -52,23 +70,63 @@ enum PolyType { ptSubject, ptClip };
 //see http://glprogramming.com/red/chapter11.html
 enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative };
 
-typedef signed long long long64;
-typedef unsigned long long ulong64;
+#ifdef use_int32
+typedef int cInt;
+typedef unsigned int cUInt;
+#else
+typedef signed long long cInt;
+typedef unsigned long long cUInt;
+#endif
 
 struct IntPoint {
-public:
-  long64 X;
-  long64 Y;
-  IntPoint(long64 x = 0, long64 y = 0): X(x), Y(y) {};
-  friend std::ostream& operator <<(std::ostream &s, IntPoint &p);
+  cInt X;
+  cInt Y;
+#ifdef use_xyz
+  cInt Z;
+  IntPoint(cInt x = 0, cInt y = 0, cInt z = 0): X(x), Y(y), Z(z) {};
+#else
+  IntPoint(cInt x = 0, cInt y = 0): X(x), Y(y) {};
+#endif
+
+  friend inline bool operator== (const IntPoint& a, const IntPoint& b)
+  {
+    return a.X == b.X && a.Y == b.Y;
+  }
+  friend inline bool operator!= (const IntPoint& a, const IntPoint& b)
+  {
+    return a.X != b.X  || a.Y != b.Y; 
+  }
 };
+//------------------------------------------------------------------------------
+
+typedef std::vector< IntPoint > Path;
+typedef std::vector< Path > Paths;
+
+inline Path& operator <<(Path& poly, const IntPoint& p) {poly.push_back(p); return poly;}
+inline Paths& operator <<(Paths& polys, const Path& p) {polys.push_back(p); return polys;}
+
+std::ostream& operator <<(std::ostream &s, const IntPoint &p);
+std::ostream& operator <<(std::ostream &s, const Path &p);
+std::ostream& operator <<(std::ostream &s, const Paths &p);
 
-typedef std::vector< IntPoint > Polygon;
-typedef std::vector< Polygon > Polygons;
+#ifdef use_deprecated
+typedef signed long long long64; //backward compatibility only
+typedef Path Polygon;
+typedef Paths Polygons;
+#endif
 
+struct DoublePoint
+{
+  double X;
+  double Y;
+  DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}
+  DoublePoint(IntPoint ip) : X((double)ip.X), Y((double)ip.Y) {}
+};
+//------------------------------------------------------------------------------
 
-std::ostream& operator <<(std::ostream &s, Polygon &p);
-std::ostream& operator <<(std::ostream &s, Polygons &p);
+#ifdef use_xyz
+typedef void (*TZFillCallback)(IntPoint& z1, IntPoint& z2, IntPoint& pt);
+#endif
 
 class PolyNode;
 typedef std::vector< PolyNode* > PolyNodes;
@@ -77,13 +135,15 @@ class PolyNode
 { 
 public:
     PolyNode();
-    Polygon Contour;
+    Path Contour;
     PolyNodes Childs;
     PolyNode* Parent;
     PolyNode* GetNext() const;
     bool IsHole() const;
+    bool IsOpen() const;
     int ChildCount() const;
 private:
+    bool m_IsOpen;
     PolyNode* GetNextSiblingUp() const;
     unsigned Index; //node index in Parent.Childs
     void AddChild(PolyNode& child);
@@ -101,113 +161,63 @@ private:
     PolyNodes AllNodes;
     friend class Clipper; //to access AllNodes
 };
-        
-enum JoinType { jtSquare, jtRound, jtMiter };
-
-bool Orientation(const Polygon &poly);
-MAPNIK_DECL double Area(const Polygon &poly);
 
-void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys,
-  double delta, JoinType jointype = jtSquare, double limit = 0, bool autoFix = true);
+enum InitOptions {ioReverseSolution = 1, ioStrictlySimple = 2, ioPreserveCollinear = 4};
+enum JoinType {jtSquare, jtRound, jtMiter};
+enum EndType {etClosed, etButt, etSquare, etRound};
 
-void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType = pftEvenOdd);
-void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType = pftEvenOdd);
-void SimplifyPolygons(Polygons &polys, PolyFillType fillType = pftEvenOdd);
+bool Orientation(const Path &poly);
+double Area(const Path &poly);
 
-void CleanPolygon(Polygon& in_poly, Polygon& out_poly, double distance = 1.415);
-void CleanPolygons(Polygons& in_polys, Polygons& out_polys, double distance = 1.415);
-
-void PolyTreeToPolygons(PolyTree& polytree, Polygons& polygons);
-
-void ReversePolygon(Polygon& p);
-void ReversePolygons(Polygons& p);
-
-//used internally ...
-enum EdgeSide { esLeft = 1, esRight = 2};
-enum IntersectProtects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 };
-
-struct TEdge {
-  long64 xbot;
-  long64 ybot;
-  long64 xcurr;
-  long64 ycurr;
-  long64 xtop;
-  long64 ytop;
-  double dx;
-  long64 deltaX;
-  long64 deltaY;
-  PolyType polyType;
-  EdgeSide side;
-  int windDelta; //1 or -1 depending on winding direction
-  int windCnt;
-  int windCnt2; //winding count of the opposite polytype
-  int outIdx;
-  TEdge *next;
-  TEdge *prev;
-  TEdge *nextInLML;
-  TEdge *nextInAEL;
-  TEdge *prevInAEL;
-  TEdge *nextInSEL;
-  TEdge *prevInSEL;
-};
+#ifdef use_deprecated
+  void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys,
+    double delta, JoinType jointype = jtSquare, double limit = 0, bool autoFix = true);
+  void PolyTreeToPolygons(const PolyTree& polytree, Paths& paths);
+  void ReversePolygon(Path& p);
+  void ReversePolygons(Paths& p);
+#endif
 
-struct IntersectNode {
-  TEdge          *edge1;
-  TEdge          *edge2;
-  IntPoint        pt;
-  IntersectNode  *next;
-};
+void OffsetPaths(const Paths &in_polys, Paths &out_polys,
+  double delta, JoinType jointype, EndType endtype, double limit = 0);
 
-struct LocalMinima {
-  long64        Y;
-  TEdge        *leftBound;
-  TEdge        *rightBound;
-  LocalMinima  *next;
-};
+void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
+void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
+void SimplifyPolygons(Paths &polys, PolyFillType fillType = pftEvenOdd);
 
-struct Scanbeam {
-  long64    Y;
-  Scanbeam *next;
-};
+void CleanPolygon(const Path& in_poly, Path& out_poly, double distance = 1.415);
+void CleanPolygon(Path& poly, double distance = 1.415);
+void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance = 1.415);
+void CleanPolygons(Paths& polys, double distance = 1.415);
 
-struct OutPt; //forward declaration
+void MinkowkiSum(const Path& poly, const Path& path, Paths& solution, bool isClosed);
+void MinkowkiDiff(const Path& poly, const Path& path, Paths& solution, bool isClosed);
 
-struct OutRec {
-  int     idx;
-  bool    isHole;
-  OutRec *FirstLeft;  //see comments in clipper.pas
-  PolyNode *polyNode;
-  OutPt  *pts;
-  OutPt  *bottomPt;
-};
+void PolyTreeToPaths(const PolyTree& polytree, Paths& paths);
+void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths);
+void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths);
 
-struct OutPt {
-  int     idx;
-  IntPoint pt;
-  OutPt   *next;
-  OutPt   *prev;
-};
+void ReversePath(Path& p);
+void ReversePaths(Paths& p);
 
-struct JoinRec {
-  IntPoint  pt1a;
-  IntPoint  pt1b;
-  int       poly1Idx;
-  IntPoint  pt2a;
-  IntPoint  pt2b;
-  int       poly2Idx;
-};
+struct IntRect { cInt left; cInt top; cInt right; cInt bottom; };
 
-struct HorzJoinRec {
-  TEdge    *edge;
-  int       savedIdx;
-};
+//enums that are used internally ...
+enum EdgeSide { esLeft = 1, esRight = 2};
 
-struct IntRect { long64 left; long64 top; long64 right; long64 bottom; };
+//forward declarations (for stuff used internally) ...
+struct TEdge;
+struct IntersectNode;
+struct LocalMinima;
+struct Scanbeam;
+struct OutPt;
+struct OutRec;
+struct Join;
 
 typedef std::vector < OutRec* > PolyOutList;
 typedef std::vector < TEdge* > EdgeList;
-typedef std::vector < JoinRec* > JoinList;
-typedef std::vector < HorzJoinRec* > HorzJoinList;
+typedef std::vector < Join* > JoinList;
+
+//------------------------------------------------------------------------------
 
 //ClipperBase is the ancestor to the Clipper class. It should not be
 //instantiated directly. This class simply abstracts the conversion of sets of
@@ -217,29 +227,43 @@ class MAPNIK_DECL ClipperBase
 public:
   ClipperBase();
   virtual ~ClipperBase();
-  bool AddPolygon(const Polygon &pg, PolyType polyType);
-  bool AddPolygons( const Polygons &ppg, PolyType polyType);
+  bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed);
+  bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed);
+
+#ifdef use_deprecated
+  bool AddPolygon(const Path &pg, PolyType PolyTyp);
+  bool AddPolygons(const Paths &ppg, PolyType PolyTyp);
+#endif
+
   virtual void Clear();
   IntRect GetBounds();
+  bool PreserveCollinear() {return m_PreserveCollinear;};
+  void PreserveCollinear(bool value) {m_PreserveCollinear = value;};
 protected:
   void DisposeLocalMinimaList();
-  TEdge* AddBoundsToLML(TEdge *e);
+  TEdge* AddBoundsToLML(TEdge *e, bool IsClosed);
   void PopLocalMinima();
   virtual void Reset();
   void InsertLocalMinima(LocalMinima *newLm);
+  void DoMinimaLML(TEdge* E1, TEdge* E2, bool IsClosed);
+  TEdge* DescendToMin(TEdge *&E);
+  void AscendToMax(TEdge *&E, bool Appending, bool IsClosed);
   LocalMinima      *m_CurrentLM;
   LocalMinima      *m_MinimaList;
   bool              m_UseFullRange;
   EdgeList          m_edges;
+  bool             m_PreserveCollinear;
+  bool             m_HasOpenPaths;
 };
+//------------------------------------------------------------------------------
 
 class MAPNIK_DECL Clipper : public virtual ClipperBase
 {
 public:
-  Clipper();
+  Clipper(int initOptions = 0);
   ~Clipper();
   bool Execute(ClipType clipType,
-    Polygons &solution,
+    Paths &solution,
     PolyFillType subjFillType = pftEvenOdd,
     PolyFillType clipFillType = pftEvenOdd);
   bool Execute(ClipType clipType,
@@ -249,17 +273,21 @@ public:
   void Clear();
   bool ReverseSolution() {return m_ReverseOutput;};
   void ReverseSolution(bool value) {m_ReverseOutput = value;};
-  bool ForceSimple() {return m_ForceSimple;};
-  void ForceSimple(bool value) {m_ForceSimple = value;};
+  bool StrictlySimple() {return m_StrictSimple;};
+  void StrictlySimple(bool value) {m_StrictSimple = value;};
+  //set the callback function for z value filling on intersections (otherwise Z is 0)
+#ifdef use_xyz
+  void ZFillFunction(TZFillCallback zFillFunc);
+#endif
 protected:
   void Reset();
   virtual bool ExecuteInternal();
 private:
   PolyOutList       m_PolyOuts;
   JoinList          m_Joins;
-  HorzJoinList      m_HorizJoins;
+  JoinList          m_GhostJoins;
   ClipType          m_ClipType;
-  Scanbeam         *m_Scanbeam;
+  std::set< cInt, std::greater<cInt> > m_Scanbeam;
   TEdge           *m_ActiveEdges;
   TEdge           *m_SortedEdges;
   IntersectNode   *m_IntersectNodes;
@@ -268,15 +296,17 @@ private:
   PolyFillType     m_SubjFillType;
   bool             m_ReverseOutput;
   bool             m_UsingPolyTree; 
-  bool             m_ForceSimple;
-  void DisposeScanbeamList();
+  bool             m_StrictSimple;
+#ifdef use_xyz
+  TZFillCallback   m_ZFill; //custom callback 
+#endif
   void SetWindingCount(TEdge& edge);
   bool IsEvenOddFillType(const TEdge& edge) const;
   bool IsEvenOddAltFillType(const TEdge& edge) const;
-  void InsertScanbeam(const long64 Y);
-  long64 PopScanbeam();
-  void InsertLocalMinimaIntoAEL(const long64 botY);
-  void InsertEdgeIntoAEL(TEdge *edge);
+  void InsertScanbeam(const cInt Y);
+  cInt PopScanbeam();
+  void InsertLocalMinimaIntoAEL(const cInt botY);
+  void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);
   void AddEdgeToSEL(TEdge *edge);
   void CopyAELToSEL();
   void DeleteFromSEL(TEdge *e);
@@ -284,27 +314,28 @@ private:
   void UpdateEdgeIntoAEL(TEdge *&e);
   void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2);
   bool IsContributing(const TEdge& edge) const;
-  bool IsTopHorz(const long64 XPos);
+  bool IsTopHorz(const cInt XPos);
   void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2);
-  void DoMaxima(TEdge *e, long64 topY);
-  void ProcessHorizontals();
-  void ProcessHorizontal(TEdge *horzEdge);
+  void DoMaxima(TEdge *e);
+  void PrepareHorzJoins(TEdge* horzEdge, bool isTopOfScanbeam);
+  void ProcessHorizontals(bool IsTopOfScanbeam);
+  void ProcessHorizontal(TEdge *horzEdge, bool isTopOfScanbeam);
   void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
-  void AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
+  OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
   OutRec* GetOutRec(int idx);
   void AppendPolygon(TEdge *e1, TEdge *e2);
   void IntersectEdges(TEdge *e1, TEdge *e2,
-    const IntPoint &pt, const IntersectProtects protects);
+    const IntPoint &pt, bool protect = false);
   OutRec* CreateOutRec();
-  void AddOutPt(TEdge *e, const IntPoint &pt);
-  void DisposeAllPolyPts();
+  OutPt* AddOutPt(TEdge *e, const IntPoint &pt);
+  void DisposeAllOutRecs();
   void DisposeOutRec(PolyOutList::size_type index);
-  bool ProcessIntersections(const long64 botY, const long64 topY);
-  void AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt);
-  void BuildIntersectList(const long64 botY, const long64 topY);
+  bool ProcessIntersections(const cInt botY, const cInt topY);
+  void InsertIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt);
+  void BuildIntersectList(const cInt botY, const cInt topY);
   void ProcessIntersectList();
-  void ProcessEdgesAtTopOfScanbeam(const long64 topY);
-  void BuildResult(Polygons& polys);
+  void ProcessEdgesAtTopOfScanbeam(const cInt topY);
+  void BuildResult(Paths& polys);
   void BuildResult2(PolyTree& polytree);
   void SetHoleState(TEdge *e, OutRec *outrec);
   void DisposeIntersectNodes();
@@ -312,19 +343,19 @@ private:
   void FixupOutPolygon(OutRec &outrec);
   bool IsHole(TEdge *e);
   void FixHoleLinkage(OutRec &outrec);
-  void AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx = -1, int e2OutIdx = -1);
+  void AddJoin(OutPt *op1, OutPt *op2, const IntPoint offPt);
   void ClearJoins();
-  void AddHorzJoin(TEdge *e, int idx);
-  void ClearHorzJoins();
-  bool JoinPoints(const JoinRec *j, OutPt *&p1, OutPt *&p2);
-  void FixupJoinRecs(JoinRec *j, OutPt *pt, unsigned startIdx);
+  void ClearGhostJoins();
+  void AddGhostJoin(OutPt *op, const IntPoint offPt);
+  bool JoinPoints(const Join *j, OutPt *&p1, OutPt *&p2);
   void JoinCommonEdges();
   void DoSimplePolygons();
   void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec);
   void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec);
+#ifdef use_xyz
+  void SetZ(IntPoint& pt, TEdge& e);
+#endif
 };
-
-//------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 
 class clipperException : public std::exception
diff --git a/deps/clipper/src/clipper.cpp b/deps/clipper/src/clipper.cpp
index 7f4cece..f1d0fcd 100755
--- a/deps/clipper/src/clipper.cpp
+++ b/deps/clipper/src/clipper.cpp
@@ -1,8 +1,8 @@
 /*******************************************************************************
 *                                                                              *
 * Author    :  Angus Johnson                                                   *
-* Version   :  5.1.5                                                           *
-* Date      :  4 May 2013                                                      *
+* Version   :  6.0.0                                                           *
+* Date      :  30 October 2013                                                 *
 * Website   :  http://www.angusj.com                                           *
 * Copyright :  Angus Johnson 2010-2013                                         *
 *                                                                              *
@@ -46,20 +46,100 @@
 #include <cstring>
 #include <cstdlib>
 #include <ostream>
+#include <functional>
 
 namespace ClipperLib {
 
-static long64 const loRange = 0x3FFFFFFF;
-static long64 const hiRange = 0x3FFFFFFFFFFFFFFFLL;
+#ifdef use_int32
+  static cInt const loRange = 46340;
+  static cInt const hiRange = 46340;
+#else
+  static cInt const loRange = 0x3FFFFFFF;
+  static cInt const hiRange = 0x3FFFFFFFFFFFFFFFLL;
+  typedef unsigned long long ulong64;
+#endif
+
 static double const pi = 3.141592653589793238;
 enum Direction { dRightToLeft, dLeftToRight };
 
+static int const Unassigned = -1;  //edge not currently 'owning' a solution
+static int const Skip = -2;        //edge that would otherwise close a path
+
 #define HORIZONTAL (-1.0E+40)
 #define TOLERANCE (1.0e-20)
 #define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE))
-#define NEAR_EQUAL(a, b) NEAR_ZERO((a) - (b))
 
-inline long64 Abs(long64 val)
+struct TEdge {
+  IntPoint Bot;
+  IntPoint Curr;
+  IntPoint Top;
+  IntPoint Delta;
+  double Dx;
+  PolyType PolyTyp;
+  EdgeSide Side;
+  int WindDelta; //1 or -1 depending on winding direction
+  int WindCnt;
+  int WindCnt2; //winding count of the opposite polytype
+  int OutIdx;
+  TEdge *Next;
+  TEdge *Prev;
+  TEdge *NextInLML;
+  TEdge *NextInAEL;
+  TEdge *PrevInAEL;
+  TEdge *NextInSEL;
+  TEdge *PrevInSEL;
+};
+
+struct IntersectNode {
+  TEdge          *Edge1;
+  TEdge          *Edge2;
+  IntPoint        Pt;
+  IntersectNode  *Next;
+};
+
+struct LocalMinima {
+  cInt          Y;
+  TEdge        *LeftBound;
+  TEdge        *RightBound;
+  LocalMinima  *Next;
+};
+
+struct OutPt;
+
+struct OutRec {
+  int       Idx;
+  bool      IsHole;
+  bool      IsOpen;
+  OutRec   *FirstLeft;  //see comments in clipper.pas
+  PolyNode *PolyNd;
+  OutPt    *Pts;
+  OutPt    *BottomPt;
+};
+
+struct OutPt {
+  int       Idx;
+  IntPoint  Pt;
+  OutPt    *Next;
+  OutPt    *Prev;
+};
+
+struct Join {
+  OutPt    *OutPt1;
+  OutPt    *OutPt2;
+  IntPoint  OffPt;
+};
+
+//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+
+inline cInt Round(double val)
+{
+  if ((val < 0)) return static_cast<cInt>(val - 0.5); 
+  else return static_cast<cInt>(val + 0.5);
+}
+//------------------------------------------------------------------------------
+
+inline cInt Abs(cInt val)
 {
   return val < 0 ? -val : val;
 }
@@ -95,7 +175,7 @@ int PolyTree::Total() const
 // PolyNode methods ...
 //------------------------------------------------------------------------------
 
-PolyNode::PolyNode(): Childs(), Parent(0), Index(0)
+PolyNode::PolyNode(): Childs(), Parent(0), m_IsOpen(false), Index(0)
 {
 }
 //------------------------------------------------------------------------------
@@ -146,11 +226,20 @@ bool PolyNode::IsHole() const
   }
   return result;
 }  
+//------------------------------------------------------------------------------
+
+bool PolyNode::IsOpen() const
+{ 
+  return m_IsOpen;
+}  
+//------------------------------------------------------------------------------
+
+#ifndef use_int32
 
 //------------------------------------------------------------------------------
 // Int128 class (enables safe math on signed 64bit integers)
-// eg Int128 val1((long64)9223372036854775807); //ie 2^63 -1
-//    Int128 val2((long64)9223372036854775807);
+// eg Int128 val1((cInt)9223372036854775807); //ie 2^63 -1
+//    Int128 val2((cInt)9223372036854775807);
 //    Int128 val3 = val1 * val2;
 //    val3.AsString => "85070591730234615847396907784232501249" (8.5e+37)
 //------------------------------------------------------------------------------
@@ -159,25 +248,25 @@ class Int128
 {
   public:
 
-    ulong64 lo;
-    long64 hi;
+    cUInt lo;
+    cInt hi;
 
-    Int128(long64 _lo = 0)
+    Int128(cInt _lo = 0)
     {
-      lo = (ulong64)_lo;   
+      lo = (cUInt)_lo;   
       if (_lo < 0)  hi = -1; else hi = 0; 
     }
 
 
     Int128(const Int128 &val): lo(val.lo), hi(val.hi){}
 
-    Int128(const long64& _hi, const ulong64& _lo): lo(_lo), hi(_hi){}
+    Int128(const cInt& _hi, const ulong64& _lo): lo(_lo), hi(_hi){}
     
-    long64 operator = (const long64 &val)
+    Int128& operator = (const cInt &val)
     {
       lo = (ulong64)val;
       if (val < 0) hi = -1; else hi = 0;
-      return val;
+      return *this;
     }
 
     bool operator == (const Int128 &val) const
@@ -262,11 +351,11 @@ class Int128
           while (divisor.hi >= 0 && !(divisor > dividend))
           {
               divisor.hi <<= 1;
-              if ((long64)divisor.lo < 0) divisor.hi++;
+              if ((cInt)divisor.lo < 0) divisor.hi++;
               divisor.lo <<= 1;
 
               cntr.hi <<= 1;
-              if ((long64)cntr.lo < 0) cntr.hi++;
+              if ((cInt)cntr.lo < 0) cntr.hi++;
               cntr.lo <<= 1;
           }
           divisor.lo >>= 1;
@@ -317,9 +406,11 @@ class Int128
       else
         return (double)(lo + hi * shift64);
     }
+
 };
+//------------------------------------------------------------------------------
 
-Int128 Int128Mul (long64 lhs, long64 rhs)
+Int128 Int128Mul (cInt lhs, cInt rhs)
 {
   bool negate = (lhs < 0) != (rhs < 0);
 
@@ -337,299 +428,274 @@ Int128 Int128Mul (long64 lhs, long64 rhs)
   ulong64 c = int1Hi * int2Lo + int1Lo * int2Hi;
 
   Int128 tmp;
-  tmp.hi = long64(a + (c >> 32));
-  tmp.lo = long64(c << 32);
-  tmp.lo += long64(b);
+  tmp.hi = cInt(a + (c >> 32));
+  tmp.lo = cInt(c << 32);
+  tmp.lo += cInt(b);
   if (tmp.lo < b) tmp.hi++;
   if (negate) tmp = -tmp;
   return tmp;
-}
+};
+#endif
 
 //------------------------------------------------------------------------------
+// Miscellaneous global functions
 //------------------------------------------------------------------------------
 
-bool FullRangeNeeded(const Polygon &pts)
-{
-  bool result = false;
-  for (Polygon::size_type i = 0; i <  pts.size(); ++i)
-  {
-    if (Abs(pts[i].X) > hiRange || Abs(pts[i].Y) > hiRange)
-        throw "Coordinate exceeds range bounds.";
-      else if (Abs(pts[i].X) > loRange || Abs(pts[i].Y) > loRange)
-        result = true;
-  }
-  return result;
-}
-//------------------------------------------------------------------------------
-  
-bool Orientation(const Polygon &poly)
+bool Orientation(const Path &poly)
 {
     return Area(poly) >= 0;
 }
 //------------------------------------------------------------------------------
 
-inline bool PointsEqual( const IntPoint &pt1, const IntPoint &pt2)
-{
-  return ( pt1.X == pt2.X && pt1.Y == pt2.Y );
-}
-//------------------------------------------------------------------------------
-
-double Area(const Polygon &poly)
+double Area(const Path &poly)
 {
   int highI = (int)poly.size() -1;
   if (highI < 2) return 0;
 
-  if (FullRangeNeeded(poly)) {
-    Int128 a;
-    a = Int128Mul(poly[highI].X + poly[0].X, poly[0].Y - poly[highI].Y);
-    for (int i = 1; i <= highI; ++i)
-      a += Int128Mul(poly[i - 1].X + poly[i].X, poly[i].Y - poly[i -1].Y);
-    return a.AsDouble() / 2;
-  }
-  else
-  {
-    double a;
-    a = ((double)poly[highI].X + poly[0].X) * ((double)poly[0].Y - poly[highI].Y);
-    for (int i = 1; i <= highI; ++i)
-      a += ((double)poly[i - 1].X + poly[i].X) * ((double)poly[i].Y - poly[i - 1].Y);
-    return a / 2;
-  }
+  double a;
+  a = ((double)poly[highI].X + poly[0].X) * ((double)poly[0].Y - poly[highI].Y);
+  for (int i = 1; i <= highI; ++i)
+    a += ((double)poly[i - 1].X + poly[i].X) * ((double)poly[i].Y - poly[i - 1].Y);
+  return a / 2;
 }
 //------------------------------------------------------------------------------
 
-double Area(const OutRec &outRec, bool UseFullInt64Range)
+double Area(const OutRec &outRec)
 {
-  OutPt *op = outRec.pts;
+  OutPt *op = outRec.Pts;
   if (!op) return 0;
-  if (UseFullInt64Range) {
-    Int128 a(0);
-    do {
-      a += Int128Mul(op->pt.X + op->prev->pt.X, op->prev->pt.Y - op->pt.Y);
-      op = op->next;
-    } while (op != outRec.pts);
-    return a.AsDouble() / 2;
-  }
-  else
-  {
-    double a = 0;
-    do {
-      a = a + (op->pt.X + op->prev->pt.X) * (op->prev->pt.Y - op->pt.Y);
-      op = op->next;
-    } while (op != outRec.pts);
-    return a / 2;
-  }
+  double a = 0;
+  do {
+    a = a + (double)(op->Pt.X + op->Prev->Pt.X) * (double)(op->Prev->Pt.Y - op->Pt.Y);
+    op = op->Next;
+  } while (op != outRec.Pts);
+  return a / 2;
 }
 //------------------------------------------------------------------------------
 
-bool PointIsVertex(const IntPoint &pt, OutPt *pp)
+bool PointIsVertex(const IntPoint &Pt, OutPt *pp)
 {
   OutPt *pp2 = pp;
   do
   {
-    if (PointsEqual(pp2->pt, pt)) return true;
-    pp2 = pp2->next;
+    if (pp2->Pt == Pt) return true;
+    pp2 = pp2->Next;
   }
   while (pp2 != pp);
   return false;
 }
 //------------------------------------------------------------------------------
 
-bool PointOnLineSegment(const IntPoint pt, 
+bool PointOnLineSegment(const IntPoint Pt, 
   const IntPoint linePt1, const IntPoint linePt2, bool UseFullInt64Range)
 {
+#ifndef use_int32
   if (UseFullInt64Range)
-    return ((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) ||
-      ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) ||
-      (((pt.X > linePt1.X) == (pt.X < linePt2.X)) &&
-      ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) &&
-      ((Int128Mul((pt.X - linePt1.X), (linePt2.Y - linePt1.Y)) ==
-      Int128Mul((linePt2.X - linePt1.X), (pt.Y - linePt1.Y)))));
+    return ((Pt.X == linePt1.X) && (Pt.Y == linePt1.Y)) ||
+      ((Pt.X == linePt2.X) && (Pt.Y == linePt2.Y)) ||
+      (((Pt.X > linePt1.X) == (Pt.X < linePt2.X)) &&
+      ((Pt.Y > linePt1.Y) == (Pt.Y < linePt2.Y)) &&
+      ((Int128Mul((Pt.X - linePt1.X), (linePt2.Y - linePt1.Y)) ==
+      Int128Mul((linePt2.X - linePt1.X), (Pt.Y - linePt1.Y)))));
   else
-    return ((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) ||
-      ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) ||
-      (((pt.X > linePt1.X) == (pt.X < linePt2.X)) &&
-      ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) &&
-      ((pt.X - linePt1.X) * (linePt2.Y - linePt1.Y) ==
-        (linePt2.X - linePt1.X) * (pt.Y - linePt1.Y)));
+#endif
+    return ((Pt.X == linePt1.X) && (Pt.Y == linePt1.Y)) ||
+      ((Pt.X == linePt2.X) && (Pt.Y == linePt2.Y)) ||
+      (((Pt.X > linePt1.X) == (Pt.X < linePt2.X)) &&
+      ((Pt.Y > linePt1.Y) == (Pt.Y < linePt2.Y)) &&
+      ((Pt.X - linePt1.X) * (linePt2.Y - linePt1.Y) ==
+        (linePt2.X - linePt1.X) * (Pt.Y - linePt1.Y)));
 }
 //------------------------------------------------------------------------------
 
-bool PointOnPolygon(const IntPoint pt,
- OutPt *pp, bool UseFullInt64Range)
+bool PointOnPolygon(const IntPoint Pt, OutPt *pp, bool UseFullInt64Range)
 {
   OutPt *pp2 = pp;
-  for (;;)
+  while (true)
   {
-    if (PointOnLineSegment(pt, pp2->pt, pp2->next->pt, UseFullInt64Range))
+    if (PointOnLineSegment(Pt, pp2->Pt, pp2->Next->Pt, UseFullInt64Range))
       return true;
-    pp2 = pp2->next;
-    if (pp2 == pp) return false;
+    pp2 = pp2->Next;
+    if (pp2 == pp) break;
   } 
+  return false;
 }
 //------------------------------------------------------------------------------
 
-bool PointInPolygon(const IntPoint &pt, OutPt *pp, bool UseFullInt64Range)
+bool PointInPolygon(const IntPoint &Pt, OutPt *pp, bool UseFullInt64Range)
 {
   OutPt *pp2 = pp;
   bool result = false;
+#ifndef use_int32
   if (UseFullInt64Range) {
     do
     {
-      if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) ||
-          ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) &&
-          Int128(pt.X - pp2->pt.X) < 
-          Int128Mul(pp2->prev->pt.X - pp2->pt.X, pt.Y - pp2->pt.Y) / 
-          Int128(pp2->prev->pt.Y - pp2->pt.Y))
-            result = !result;
-      pp2 = pp2->next;
+      if (((pp2->Pt.Y > Pt.Y) != (pp2->Prev->Pt.Y > Pt.Y)) &&                     
+        (Int128(Pt.X - pp2->Pt.X) < 
+        Int128Mul(pp2->Prev->Pt.X - pp2->Pt.X, Pt.Y - pp2->Pt.Y) / 
+        Int128(pp2->Prev->Pt.Y - pp2->Pt.Y))) result = !result;
+      pp2 = pp2->Next;
     }
     while (pp2 != pp);
+    return result;
   }
-  else
+#endif
+  do
   {
-    do
-    {
-      if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) ||
-        ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) &&
-        (pt.X < (pp2->prev->pt.X - pp2->pt.X) * (pt.Y - pp2->pt.Y) /
-        (pp2->prev->pt.Y - pp2->pt.Y) + pp2->pt.X )) result = !result;
-      pp2 = pp2->next;
-    }
-    while (pp2 != pp);
+    //http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
+    if (((pp2->Pt.Y > Pt.Y) != (pp2->Prev->Pt.Y > Pt.Y)) &&                     
+      ((Pt.X - pp2->Pt.X) < (pp2->Prev->Pt.X - pp2->Pt.X) * (Pt.Y - pp2->Pt.Y) / 
+      (pp2->Prev->Pt.Y - pp2->Pt.Y))) result = !result;
+    pp2 = pp2->Next;
   }
+  while (pp2 != pp);
   return result;
 }
 //------------------------------------------------------------------------------
 
-bool SlopesEqual(TEdge &e1, TEdge &e2, bool UseFullInt64Range)
+bool SlopesEqual(const TEdge &e1, const TEdge &e2, bool UseFullInt64Range)
 {
+#ifndef use_int32
   if (UseFullInt64Range)
-    return Int128Mul(e1.deltaY, e2.deltaX) == Int128Mul(e1.deltaX, e2.deltaY);
-  else return e1.deltaY * e2.deltaX == e1.deltaX * e2.deltaY;
+    return Int128Mul(e1.Delta.Y, e2.Delta.X) == Int128Mul(e1.Delta.X, e2.Delta.Y);
+  else 
+#endif
+    return e1.Delta.Y * e2.Delta.X == e1.Delta.X * e2.Delta.Y;
 }
 //------------------------------------------------------------------------------
 
 bool SlopesEqual(const IntPoint pt1, const IntPoint pt2,
   const IntPoint pt3, bool UseFullInt64Range)
 {
+#ifndef use_int32
   if (UseFullInt64Range)
     return Int128Mul(pt1.Y-pt2.Y, pt2.X-pt3.X) == Int128Mul(pt1.X-pt2.X, pt2.Y-pt3.Y);
-  else return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y);
+  else 
+#endif
+    return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y);
 }
 //------------------------------------------------------------------------------
 
 bool SlopesEqual(const IntPoint pt1, const IntPoint pt2,
   const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range)
 {
+#ifndef use_int32
   if (UseFullInt64Range)
     return Int128Mul(pt1.Y-pt2.Y, pt3.X-pt4.X) == Int128Mul(pt1.X-pt2.X, pt3.Y-pt4.Y);
-  else return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y);
+  else 
+#endif
+    return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y);
+}
+//------------------------------------------------------------------------------
+
+inline bool IsHorizontal(TEdge &e)
+{
+  return e.Delta.Y == 0;
 }
 //------------------------------------------------------------------------------
 
-double GetDx(const IntPoint pt1, const IntPoint pt2)
+inline double GetDx(const IntPoint pt1, const IntPoint pt2)
 {
   return (pt1.Y == pt2.Y) ?
     HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y);
 }
 //---------------------------------------------------------------------------
 
-void SetDx(TEdge &e)
+inline void SetDx(TEdge &e)
 {
-  e.deltaX = (e.xtop - e.xbot);
-  e.deltaY = (e.ytop - e.ybot);
+  e.Delta.X = (e.Top.X - e.Bot.X);
+  e.Delta.Y = (e.Top.Y - e.Bot.Y);
 
-  if (e.deltaY == 0) e.dx = HORIZONTAL;
-  else e.dx = (double)(e.deltaX) / e.deltaY;
+  if (e.Delta.Y == 0) e.Dx = HORIZONTAL;
+  else e.Dx = (double)(e.Delta.X) / e.Delta.Y;
 }
 //---------------------------------------------------------------------------
 
-void SwapSides(TEdge &edge1, TEdge &edge2)
-{
-  EdgeSide side =  edge1.side;
-  edge1.side = edge2.side;
-  edge2.side = side;
-}
-//------------------------------------------------------------------------------
-
-void SwapPolyIndexes(TEdge &edge1, TEdge &edge2)
+inline void SwapSides(TEdge &Edge1, TEdge &Edge2)
 {
-  int outIdx =  edge1.outIdx;
-  edge1.outIdx = edge2.outIdx;
-  edge2.outIdx = outIdx;
+  EdgeSide Side =  Edge1.Side;
+  Edge1.Side = Edge2.Side;
+  Edge2.Side = Side;
 }
 //------------------------------------------------------------------------------
 
-inline long64 Round(double val)
+inline void SwapPolyIndexes(TEdge &Edge1, TEdge &Edge2)
 {
-  return (val < 0) ? static_cast<long64>(val - 0.5) : static_cast<long64>(val + 0.5);
+  int OutIdx =  Edge1.OutIdx;
+  Edge1.OutIdx = Edge2.OutIdx;
+  Edge2.OutIdx = OutIdx;
 }
 //------------------------------------------------------------------------------
 
-long64 TopX(TEdge &edge, const long64 currentY)
+inline cInt TopX(TEdge &edge, const cInt currentY)
 {
-  return ( currentY == edge.ytop ) ?
-    edge.xtop : edge.xbot + Round(edge.dx *(currentY - edge.ybot));
+  return ( currentY == edge.Top.Y ) ?
+    edge.Top.X : edge.Bot.X + Round(edge.Dx *(currentY - edge.Bot.Y));
 }
 //------------------------------------------------------------------------------
 
-bool IntersectPoint(TEdge &edge1, TEdge &edge2,
+bool IntersectPoint(TEdge &Edge1, TEdge &Edge2,
   IntPoint &ip, bool UseFullInt64Range)
 {
+#ifdef use_xyz  
+  ip.Z = 0;
+#endif
   double b1, b2;
-  if (SlopesEqual(edge1, edge2, UseFullInt64Range))
+  //nb: with very large coordinate values, it's possible for SlopesEqual() to 
+  //return false but for the edge.Dx value be equal due to double precision rounding.
+  if (SlopesEqual(Edge1, Edge2, UseFullInt64Range) || Edge1.Dx == Edge2.Dx)
   {
-    if (edge2.ybot > edge1.ybot) ip.Y = edge2.ybot;
-    else ip.Y = edge1.ybot;
+    if (Edge2.Bot.Y > Edge1.Bot.Y) ip.Y = Edge2.Bot.Y;
+    else ip.Y = Edge1.Bot.Y;
     return false;
   }
-  else if (NEAR_ZERO(edge1.dx))
+  else if (Edge1.Delta.X == 0)
   {
-    ip.X = edge1.xbot;
-    if (NEAR_EQUAL(edge2.dx, HORIZONTAL))
-      ip.Y = edge2.ybot;
+    ip.X = Edge1.Bot.X;
+    if (IsHorizontal(Edge2))
+      ip.Y = Edge2.Bot.Y;
     else
     {
-      b2 = edge2.ybot - (edge2.xbot / edge2.dx);
-      ip.Y = Round(ip.X / edge2.dx + b2);
+      b2 = Edge2.Bot.Y - (Edge2.Bot.X / Edge2.Dx);
+      ip.Y = Round(ip.X / Edge2.Dx + b2);
     }
   }
-  else if (NEAR_ZERO(edge2.dx))
+  else if (Edge2.Delta.X == 0)
   {
-    ip.X = edge2.xbot;
-    if (NEAR_EQUAL(edge1.dx, HORIZONTAL))
-      ip.Y = edge1.ybot;
+    ip.X = Edge2.Bot.X;
+    if (IsHorizontal(Edge1))
+      ip.Y = Edge1.Bot.Y;
     else
     {
-      b1 = edge1.ybot - (edge1.xbot / edge1.dx);
-      ip.Y = Round(ip.X / edge1.dx + b1);
+      b1 = Edge1.Bot.Y - (Edge1.Bot.X / Edge1.Dx);
+      ip.Y = Round(ip.X / Edge1.Dx + b1);
     }
   } 
   else 
   {
-    b1 = edge1.xbot - edge1.ybot * edge1.dx;
-    b2 = edge2.xbot - edge2.ybot * edge2.dx;
-    double q = (b2-b1) / (edge1.dx - edge2.dx);
+    b1 = Edge1.Bot.X - Edge1.Bot.Y * Edge1.Dx;
+    b2 = Edge2.Bot.X - Edge2.Bot.Y * Edge2.Dx;
+    double q = (b2-b1) / (Edge1.Dx - Edge2.Dx);
     ip.Y = Round(q);
-    if (std::fabs(edge1.dx) < std::fabs(edge2.dx))
-      ip.X = Round(edge1.dx * q + b1);
+    if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
+      ip.X = Round(Edge1.Dx * q + b1);
     else 
-      ip.X = Round(edge2.dx * q + b2);
+      ip.X = Round(Edge2.Dx * q + b2);
   }
 
-  if (ip.Y < edge1.ytop || ip.Y < edge2.ytop) 
+  if (ip.Y < Edge1.Top.Y || ip.Y < Edge2.Top.Y) 
   {
-    if (edge1.ytop > edge2.ytop)
+    if (Edge1.Top.Y > Edge2.Top.Y)
     {
-      ip.X = edge1.xtop;
-      ip.Y = edge1.ytop;
-      return TopX(edge2, edge1.ytop) < edge1.xtop;
+      ip.Y = Edge1.Top.Y;
+      ip.X = TopX(Edge2, Edge1.Top.Y);
+      return ip.X < Edge1.Top.X;
     } 
     else
     {
-      ip.X = edge2.xtop;
-      ip.Y = edge2.ytop;
-      return TopX(edge1, edge2.ytop) > edge2.xtop;
+      ip.Y = Edge2.Top.Y;
+      ip.X = TopX(Edge1, Edge2.Top.Y);
+      return ip.X > Edge2.Top.X;
     }
   } 
   else 
@@ -643,9 +709,9 @@ void ReversePolyPtLinks(OutPt *pp)
   OutPt *pp1, *pp2;
   pp1 = pp;
   do {
-  pp2 = pp1->next;
-  pp1->next = pp1->prev;
-  pp1->prev = pp2;
+  pp2 = pp1->Next;
+  pp1->Next = pp1->Prev;
+  pp1->Prev = pp2;
   pp1 = pp2;
   } while( pp1 != pp );
 }
@@ -654,54 +720,189 @@ void ReversePolyPtLinks(OutPt *pp)
 void DisposeOutPts(OutPt*& pp)
 {
   if (pp == 0) return;
-  pp->prev->next = 0;
+    pp->Prev->Next = 0;
   while( pp )
   {
     OutPt *tmpPp = pp;
-    pp = pp->next;
+    pp = pp->Next;
     delete tmpPp;
   }
 }
 //------------------------------------------------------------------------------
 
-void InitEdge(TEdge *e, TEdge *eNext,
-  TEdge *ePrev, const IntPoint &pt, PolyType polyType)
+inline void InitEdge(TEdge* e, TEdge* eNext, TEdge* ePrev, const IntPoint& Pt)
 {
-  std::memset( e, 0, sizeof( TEdge ));
+  std::memset(e, 0, sizeof(TEdge));
+  e->Next = eNext;
+  e->Prev = ePrev;
+  e->Curr = Pt;
+  e->OutIdx = Unassigned;
+}
+//------------------------------------------------------------------------------
 
-  e->next = eNext;
-  e->prev = ePrev;
-  e->xcurr = pt.X;
-  e->ycurr = pt.Y;
-  if (e->ycurr >= e->next->ycurr)
+void InitEdge2(TEdge& e, PolyType Pt)
+{
+  if (e.Curr.Y >= e.Next->Curr.Y)
   {
-    e->xbot = e->xcurr;
-    e->ybot = e->ycurr;
-    e->xtop = e->next->xcurr;
-    e->ytop = e->next->ycurr;
-    e->windDelta = 1;
+    e.Bot = e.Curr;
+    e.Top = e.Next->Curr;
   } else
   {
-    e->xtop = e->xcurr;
-    e->ytop = e->ycurr;
-    e->xbot = e->next->xcurr;
-    e->ybot = e->next->ycurr;
-    e->windDelta = -1;
+    e.Top = e.Curr;
+    e.Bot = e.Next->Curr;
+  }
+  SetDx(e);
+  e.PolyTyp = Pt;
+}
+//------------------------------------------------------------------------------
+
+TEdge* RemoveEdge(TEdge* e)
+{
+  //removes e from double_linked_list (but without removing from memory)
+  e->Prev->Next = e->Next;
+  e->Next->Prev = e->Prev;
+  TEdge* result = e->Next;
+  e->Prev = 0; //flag as removed (see ClipperBase.Clear)
+  return result;
+}
+//------------------------------------------------------------------------------
+
+TEdge* GetLastHorz(TEdge* Edge)
+{
+  TEdge* result = Edge;
+  while (result->OutIdx != Skip && result->Next != Edge && IsHorizontal(*result->Next))
+    result = result->Next;
+  return result;
+}
+//------------------------------------------------------------------------------
+
+bool SharedVertWithPrevAtTop(TEdge* Edge)
+{
+  TEdge* E = Edge;
+  bool result = true;
+  while (E->Prev != Edge)
+  {
+    if (E->Top == E->Prev->Top)
+    {
+      if (E->Bot == E->Prev->Bot)
+      {E = E->Prev; continue;}
+      else result = true;
+    } 
+    else result = false;
+    break;
+  }
+  while (E != Edge) 
+  {
+    result = !result;
+    E = E->Next;
+  }
+  return result;
+}
+//------------------------------------------------------------------------------
+
+bool SharedVertWithNextIsBot(TEdge* Edge)
+{
+  bool result = true;
+  TEdge* E = Edge;
+  while (E->Prev != Edge)
+  {
+    bool A = (E->Next->Bot == E->Bot);
+    bool B = (E->Prev->Bot == E->Bot);
+    if (A != B) 
+    {
+      result = A;
+      break;
+    }
+    A = (E->Next->Top == E->Top);
+    B = (E->Prev->Top == E->Top);
+    if (A != B) 
+    {
+      result = B;
+      break;
+    }
+    E = E->Prev;
+  }
+  while (E != Edge)
+  {
+    result = !result;
+    E = E->Next;
+  }
+  return result;
+}
+//------------------------------------------------------------------------------
+
+bool MoreBelow(TEdge* Edge) 
+{
+  //Edge is Skip heading down.
+  TEdge* E = Edge;
+  if (IsHorizontal(*E)) 
+  {
+    while (IsHorizontal(*E->Next)) E = E->Next;
+    return E->Next->Bot.Y > E->Bot.Y;
+  } else if (IsHorizontal(*E->Next))
+  {
+    while (IsHorizontal(*E->Next)) E = E->Next;
+    return E->Next->Bot.Y > E->Bot.Y;
+  } 
+  else return (E->Bot == E->Next->Top);
+}
+//------------------------------------------------------------------------------
+
+bool JustBeforeLocMin(TEdge* Edge)
+{
+  //Edge is Skip and was heading down.
+  TEdge*E = Edge;
+  if (IsHorizontal(*E))
+  {
+    while (IsHorizontal(*E->Next)) E = E->Next;
+    return E->Next->Top.Y < E->Bot.Y;
+  }
+  else return SharedVertWithNextIsBot(E);
+}
+//------------------------------------------------------------------------------
+
+bool MoreAbove(TEdge* Edge)
+{
+  if (IsHorizontal(*Edge)) 
+  {
+    Edge = GetLastHorz(Edge);
+    return (Edge->Next->Top.Y < Edge->Top.Y);
+  } else if (IsHorizontal(*Edge->Next)) 
+  {
+    Edge = GetLastHorz(Edge->Next);
+    return (Edge->Next->Top.Y < Edge->Top.Y);
+  } 
+  else
+    return (Edge->Next->Top.Y < Edge->Top.Y);
+}
+//------------------------------------------------------------------------------
+
+bool AllHorizontal(TEdge* Edge)
+{  
+  if (!IsHorizontal(*Edge)) return false;
+  TEdge* E = Edge->Next;
+  while (E != Edge)
+  {
+    if (!IsHorizontal(*E)) return false;
+    else E = E->Next;
   }
-  SetDx(*e);
-  e->polyType = polyType;
-  e->outIdx = -1;
+  return true;
 }
 //------------------------------------------------------------------------------
 
-inline void SwapX(TEdge &e)
+inline void ReverseHorizontal(TEdge &e)
 {
-  //swap horizontal edges' top and bottom x's so they follow the natural
+  //swap horizontal edges' Top and Bottom x's so they follow the natural
   //progression of the bounds - ie so their xbots will align with the
   //adjoining lower edge. [Helpful in the ProcessHorizontal() method.]
-  e.xcurr = e.xtop;
-  e.xtop = e.xbot;
-  e.xbot = e.xcurr;
+  cInt tmp = e.Top.X;
+  e.Top.X = e.Bot.X;
+  e.Bot.X = tmp;
+#ifdef use_xyz  
+  tmp = e.Top.Z;
+  e.Top.Z = e.Bot.Z;
+  e.Bot.Z = tmp;
+#endif
 }
 //------------------------------------------------------------------------------
 
@@ -716,7 +917,7 @@ void SwapPoints(IntPoint &pt1, IntPoint &pt2)
 bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a,
   IntPoint pt2b, IntPoint &pt1, IntPoint &pt2)
 {
-  //precondition: segments are colinear.
+  //precondition: segments are Collinear.
   if (Abs(pt1a.X - pt1b.X) > Abs(pt1a.Y - pt1b.Y))
   {
     if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b);
@@ -737,19 +938,19 @@ bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a,
 
 bool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2)
 {
-  OutPt *p = btmPt1->prev;
-  while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->prev;
-  double dx1p = std::fabs(GetDx(btmPt1->pt, p->pt));
-  p = btmPt1->next;
-  while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->next;
-  double dx1n = std::fabs(GetDx(btmPt1->pt, p->pt));
-
-  p = btmPt2->prev;
-  while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->prev;
-  double dx2p = std::fabs(GetDx(btmPt2->pt, p->pt));
-  p = btmPt2->next;
-  while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->next;
-  double dx2n = std::fabs(GetDx(btmPt2->pt, p->pt));
+  OutPt *p = btmPt1->Prev;
+  while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Prev;
+  double dx1p = std::fabs(GetDx(btmPt1->Pt, p->Pt));
+  p = btmPt1->Next;
+  while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Next;
+  double dx1n = std::fabs(GetDx(btmPt1->Pt, p->Pt));
+
+  p = btmPt2->Prev;
+  while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Prev;
+  double dx2p = std::fabs(GetDx(btmPt2->Pt, p->Pt));
+  p = btmPt2->Next;
+  while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Next;
+  double dx2n = std::fabs(GetDx(btmPt2->Pt, p->Pt));
   return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n);
 }
 //------------------------------------------------------------------------------
@@ -757,35 +958,35 @@ bool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2)
 OutPt* GetBottomPt(OutPt *pp)
 {
   OutPt* dups = 0;
-  OutPt* p = pp->next;
+  OutPt* p = pp->Next;
   while (p != pp)
   {
-    if (p->pt.Y > pp->pt.Y)
+    if (p->Pt.Y > pp->Pt.Y)
     {
       pp = p;
       dups = 0;
     }
-    else if (p->pt.Y == pp->pt.Y && p->pt.X <= pp->pt.X)
+    else if (p->Pt.Y == pp->Pt.Y && p->Pt.X <= pp->Pt.X)
     {
-      if (p->pt.X < pp->pt.X)
+      if (p->Pt.X < pp->Pt.X)
       {
         dups = 0;
         pp = p;
       } else
       {
-        if (p->next != pp && p->prev != pp) dups = p;
+        if (p->Next != pp && p->Prev != pp) dups = p;
       }
     }
-    p = p->next;
+    p = p->Next;
   }
   if (dups)
   {
-    //there appears to be at least 2 vertices at bottomPt so ...
+    //there appears to be at least 2 vertices at BottomPt so ...
     while (dups != p)
     {
       if (!FirstIsBottomPt(p, dups)) pp = dups;
-      dups = dups->next;
-      while (!PointsEqual(dups->pt, pp->pt)) dups = dups->next;
+      dups = dups->Next;
+      while (dups->Pt != pp->Pt) dups = dups->Next;
     }
   }
   return pp;
@@ -795,52 +996,70 @@ OutPt* GetBottomPt(OutPt *pp)
 bool FindSegment(OutPt* &pp, bool UseFullInt64Range, 
   IntPoint &pt1, IntPoint &pt2)
 {
-  //outPt1 & outPt2 => the overlap segment (if the function returns true)
+  //OutPt1 & OutPt2 => the overlap segment (if the function returns true)
   if (!pp) return false;
   OutPt* pp2 = pp;
   IntPoint pt1a = pt1, pt2a = pt2;
   do
   {
-    if (SlopesEqual(pt1a, pt2a, pp->pt, pp->prev->pt, UseFullInt64Range) &&
-      SlopesEqual(pt1a, pt2a, pp->pt, UseFullInt64Range) &&
-      GetOverlapSegment(pt1a, pt2a, pp->pt, pp->prev->pt, pt1, pt2))
+    if (SlopesEqual(pt1a, pt2a, pp->Pt, pp->Prev->Pt, UseFullInt64Range) &&
+      SlopesEqual(pt1a, pt2a, pp->Pt, UseFullInt64Range) &&
+      GetOverlapSegment(pt1a, pt2a, pp->Pt, pp->Prev->Pt, pt1, pt2))
         return true;
-    pp = pp->next;
+    pp = pp->Next;
   }
   while (pp != pp2);
   return false;
 }
 //------------------------------------------------------------------------------
 
-bool Pt3IsBetweenPt1AndPt2(const IntPoint pt1,
+bool Pt2IsBetweenPt1AndPt3(const IntPoint pt1,
   const IntPoint pt2, const IntPoint pt3)
 {
-  if (PointsEqual(pt1, pt3) || PointsEqual(pt2, pt3)) return true;
-  else if (pt1.X != pt2.X) return (pt1.X < pt3.X) == (pt3.X < pt2.X);
-  else return (pt1.Y < pt3.Y) == (pt3.Y < pt2.Y);
+  if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2))
+    return false;
+  else if (pt1.X != pt3.X)
+    return (pt2.X > pt1.X) == (pt2.X < pt3.X);
+  else
+    return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y);
 }
 //------------------------------------------------------------------------------
 
-OutPt* InsertPolyPtBetween(OutPt* p1, OutPt* p2, const IntPoint pt)
+OutPt* InsertPolyPtBetween(OutPt* p1, OutPt* p2, const IntPoint Pt)
 {
   if (p1 == p2) throw "JoinError";
   OutPt* result = new OutPt;
-  result->pt = pt;
-  if (p2 == p1->next)
+  result->Pt = Pt;
+  if (p2 == p1->Next)
   {
-    p1->next = result;
-    p2->prev = result;
-    result->next = p2;
-    result->prev = p1;
+    p1->Next = result;
+    p2->Prev = result;
+    result->Next = p2;
+    result->Prev = p1;
   } else
   {
-    p2->next = result;
-    p1->prev = result;
-    result->next = p1;
-    result->prev = p2;
+    p2->Next = result;
+    p1->Prev = result;
+    result->Next = p1;
+    result->Prev = p2;
   }
   return result;
 }
+//------------------------------------------------------------------------------
+
+bool HorzSegmentsOverlap(const IntPoint& pt1a, const IntPoint& pt1b, 
+    const IntPoint& pt2a, const IntPoint& pt2b)
+{
+  //precondition: both segments are horizontal
+  if ((pt1a.X > pt2a.X) == (pt1a.X < pt2b.X)) return true;
+  else if ((pt1b.X > pt2a.X) == (pt1b.X < pt2b.X)) return true;
+  else if ((pt2a.X > pt1a.X) == (pt2a.X < pt1b.X)) return true;
+  else if ((pt2b.X > pt1a.X) == (pt2b.X < pt1b.X)) return true;
+  else if ((pt1a.X == pt2a.X) && (pt1b.X == pt2b.X)) return true;
+  else if ((pt1a.X == pt2b.X) && (pt1b.X == pt2a.X)) return true;
+  else return false;
+}
+
 
 //------------------------------------------------------------------------------
 // ClipperBase class methods ...
@@ -850,7 +1069,7 @@ ClipperBase::ClipperBase() //constructor
 {
   m_MinimaList = 0;
   m_CurrentLM = 0;
-  m_UseFullRange = true;
+  m_UseFullRange = false;
 }
 //------------------------------------------------------------------------------
 
@@ -860,95 +1079,178 @@ ClipperBase::~ClipperBase() //destructor
 }
 //------------------------------------------------------------------------------
 
-bool ClipperBase::AddPolygon( const Polygon &pg, PolyType polyType)
+void RangeTest(const IntPoint& Pt, bool& useFullRange)
+{
+  if (useFullRange)
+  {
+    if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange) 
+      throw "Coordinate outside allowed range";
+  }
+  else if (Pt.X > loRange|| Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange) 
+  {
+    useFullRange = true;
+    RangeTest(Pt, useFullRange);
+  }
+}
+//------------------------------------------------------------------------------
+
+bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
 {
-  int len = (int)pg.size();
-  if (len < 3) return false;
+#ifdef use_lines
+  if (!Closed && PolyTyp == ptClip)
+    throw clipperException("AddPath: Open paths must be subject.");
+#else
+  if (!Closed)
+    throw clipperException("AddPath: Open paths have been disabled.");
+#endif
 
-  Polygon p(len);
-  p[0] = pg[0];
-  int j = 0;
+  int highI = (int)pg.size() -1;
+  bool ClosedOrSemiClosed = (highI > 0) && (Closed || (pg[0] == pg[highI]));
+  while (highI > 0 && (pg[highI] == pg[0])) --highI;
+  while (highI > 0 && (pg[highI] == pg[highI -1])) --highI;
+  if ((Closed && highI < 2) || (!Closed && highI < 1)) return false;
 
-  long64 maxVal;
-  if (m_UseFullRange) maxVal = hiRange; else maxVal = loRange;
+  //create a new edge array ...
+  TEdge *edges = new TEdge [highI +1];
 
-  for (int i = 0; i < len; ++i)
+  //1. Basic initialization of Edges ...
+  try
   {
-    if (Abs(pg[i].X) > maxVal || Abs(pg[i].Y) > maxVal)
+    edges[1].Curr = pg[1];
+    RangeTest(pg[0], m_UseFullRange);
+    RangeTest(pg[highI], m_UseFullRange);
+    InitEdge(&edges[0], &edges[1], &edges[highI], pg[0]);
+    InitEdge(&edges[highI], &edges[0], &edges[highI-1], pg[highI]);
+    for (int i = highI - 1; i >= 1; --i)
     {
-      if (Abs(pg[i].X) > hiRange || Abs(pg[i].Y) > hiRange)
-        throw "Coordinate exceeds range bounds";
-      maxVal = hiRange;
-      m_UseFullRange = true;
+      RangeTest(pg[i], m_UseFullRange);
+      InitEdge(&edges[i], &edges[i+1], &edges[i-1], pg[i]);
     }
-
-    if (i == 0 || PointsEqual(p[j], pg[i])) continue;
-    else if (j > 0 && SlopesEqual(p[j-1], p[j], pg[i], m_UseFullRange))
-    {
-      if (PointsEqual(p[j-1], pg[i])) j--;
-    } else j++;
-    p[j] = pg[i];
   }
-  if (j < 2) return false;
+  catch(...)
+  {
+    delete [] edges;
+    return false; //almost certainly a vertex has exceeded range
+  }
+
+  TEdge *eStart = &edges[0];
+  if (!ClosedOrSemiClosed) eStart->Prev->OutIdx = Skip;
 
-  len = j+1;
-  while (len > 2)
+  //2. Remove duplicate vertices, and collinear edges (when closed) ...
+  TEdge *E = eStart, *eLoopStop = eStart;
+  for (;;)
   {
-    //nb: test for point equality before testing slopes ...
-    if (PointsEqual(p[j], p[0])) j--;
-    else if (PointsEqual(p[0], p[1]) ||
-      SlopesEqual(p[j], p[0], p[1], m_UseFullRange))
-      p[0] = p[j--];
-    else if (SlopesEqual(p[j-1], p[j], p[0], m_UseFullRange)) j--;
-    else if (SlopesEqual(p[0], p[1], p[2], m_UseFullRange))
+    if ((E->Curr == E->Next->Curr))
     {
-      for (int i = 2; i <= j; ++i) p[i-1] = p[i];
-      j--;
+      if (E == eStart) eStart = E->Next;
+      E = RemoveEdge(E);
+      eLoopStop = E;
+      continue;
     }
-    else break;
-    len--;
+    if (E->Prev == E->Next) 
+      break; //only two vertices
+    else if ((ClosedOrSemiClosed ||
+      (E->Prev->OutIdx != Skip && E->OutIdx != Skip &&
+      E->Next->OutIdx != Skip)) &&
+      SlopesEqual(E->Prev->Curr, E->Curr, E->Next->Curr, m_UseFullRange)) 
+    {
+      //All collinear edges are allowed for open paths but in closed paths
+      //inner vertices of adjacent collinear edges are removed. However if the
+      //PreserveCollinear property has been enabled, only overlapping collinear
+      //edges (ie spikes) are removed from closed paths.
+      if (Closed && (!m_PreserveCollinear ||
+        !Pt2IsBetweenPt1AndPt3(E->Prev->Curr, E->Curr, E->Next->Curr))) 
+      {
+        if (E == eStart) eStart = E->Next;
+        E = RemoveEdge(E);
+        E = E->Prev;
+        eLoopStop = E;
+        continue;
+      }
+    }
+    E = E->Next;
+    if (E == eLoopStop) break;
   }
-  if (len < 3) return false;
 
-  //create a new edge array ...
-  TEdge *edges = new TEdge [len];
+  if ((!Closed && (E == E->Next)) || (Closed && (E->Prev == E->Next)))
+  {
+    delete [] edges;
+    return false;
+  }
   m_edges.push_back(edges);
 
-  //convert vertices to a double-linked-list of edges and initialize ...
-  edges[0].xcurr = p[0].X;
-  edges[0].ycurr = p[0].Y;
-  InitEdge(&edges[len-1], &edges[0], &edges[len-2], p[len-1], polyType);
-  for (int i = len-2; i > 0; --i)
-    InitEdge(&edges[i], &edges[i+1], &edges[i-1], p[i], polyType);
-  InitEdge(&edges[0], &edges[1], &edges[len-1], p[0], polyType);
-
-  //reset xcurr & ycurr and find 'eHighest' (given the Y axis coordinates
-  //increase downward so the 'highest' edge will have the smallest ytop) ...
-  TEdge *e = &edges[0];
-  TEdge *eHighest = e;
+  if (!Closed)
+    m_HasOpenPaths = true;
+
+  //3. Do final Init and also find the 'highest' Edge. (nb: since I'm much
+  //more familiar with positive downwards Y axes, 'highest' here will be
+  //the Edge with the *smallest* Top.Y.)
+  TEdge *eHighest = eStart;
+  E = eStart;
   do
   {
-    e->xcurr = e->xbot;
-    e->ycurr = e->ybot;
-    if (e->ytop < eHighest->ytop) eHighest = e;
-    e = e->next;
+    InitEdge2(*E, PolyTyp);
+    if (E->Top.Y < eHighest->Top.Y) eHighest = E;
+    E = E->Next;
   }
-  while ( e != &edges[0]);
+  while (E != eStart);
 
-  //make sure eHighest is positioned so the following loop works safely ...
-  if (eHighest->windDelta > 0) eHighest = eHighest->next;
-  if (NEAR_EQUAL(eHighest->dx, HORIZONTAL)) eHighest = eHighest->next;
+  //4. build the local minima list ...
+  if (AllHorizontal(E))
+  {
+    if (ClosedOrSemiClosed)
+      E->Prev->OutIdx = Skip;
+    AscendToMax(E, false, false);
+    return true;
+  }
 
-  //finally insert each local minima ...
-  e = eHighest;
-  do {
-    e = AddBoundsToLML(e);
+  //if eHighest is also the Skip then it's a natural break, otherwise
+  //make sure eHighest is positioned so we're either at a top horizontal or
+  //just starting to head down one edge of the polygon
+  E = eStart->Prev; //EStart.Prev == Skip edge
+  if (E->Prev == E->Next)
+    eHighest = E->Next;
+  else if (!ClosedOrSemiClosed && E->Top.Y == eHighest->Top.Y)
+  {
+    if ((IsHorizontal(*E) || IsHorizontal(*E->Next)) && 
+      E->Next->Bot.Y == eHighest->Top.Y)
+        eHighest = E->Next;
+    else if (SharedVertWithPrevAtTop(E)) eHighest = E;
+    else if (E->Top == E->Prev->Top) eHighest = E->Prev;
+    else eHighest = E->Next;
+  } else
+  {
+    E = eHighest;
+    while (IsHorizontal(*eHighest) ||
+      (eHighest->Top == eHighest->Next->Top) ||
+      (eHighest->Top == eHighest->Next->Bot)) //next is high horizontal
+    {
+      eHighest = eHighest->Next;
+      if (eHighest == E) 
+      {
+        while (IsHorizontal(*eHighest) || !SharedVertWithPrevAtTop(eHighest))
+            eHighest = eHighest->Next;
+        break; //avoids potential endless loop
+      }
+    }
   }
-  while( e != eHighest );
+  E = eHighest;
+  do
+    E = AddBoundsToLML(E, Closed);
+  while (E != eHighest);
   return true;
 }
 //------------------------------------------------------------------------------
 
+bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
+{
+  bool result = false;
+  for (Paths::size_type i = 0; i < ppg.size(); ++i)
+    if (AddPath(ppg[i], PolyTyp, Closed)) result = true;
+  return result;
+}
+//------------------------------------------------------------------------------
+
 void ClipperBase::InsertLocalMinima(LocalMinima *newLm)
 {
   if( ! m_MinimaList )
@@ -957,91 +1259,217 @@ void ClipperBase::InsertLocalMinima(LocalMinima *newLm)
   }
   else if( newLm->Y >= m_MinimaList->Y )
   {
-    newLm->next = m_MinimaList;
+    newLm->Next = m_MinimaList;
     m_MinimaList = newLm;
   } else
   {
     LocalMinima* tmpLm = m_MinimaList;
-    while( tmpLm->next  && ( newLm->Y < tmpLm->next->Y ) )
-      tmpLm = tmpLm->next;
-    newLm->next = tmpLm->next;
-    tmpLm->next = newLm;
+    while( tmpLm->Next  && ( newLm->Y < tmpLm->Next->Y ) )
+      tmpLm = tmpLm->Next;
+    newLm->Next = tmpLm->Next;
+    tmpLm->Next = newLm;
   }
 }
 //------------------------------------------------------------------------------
 
-TEdge* ClipperBase::AddBoundsToLML(TEdge *e)
+void ClipperBase::DoMinimaLML(TEdge* E1, TEdge* E2, bool IsClosed)
+{
+  if (!E1)
+  {
+    if (!E2) return;
+    LocalMinima* NewLm = new LocalMinima;
+    NewLm->Next = 0;
+    NewLm->Y = E2->Bot.Y;
+    NewLm->LeftBound = 0;
+    E2->WindDelta = 0;
+    NewLm->RightBound = E2;
+    InsertLocalMinima(NewLm);
+  } else
+  {
+    //E and E.Prev are now at a local minima ...
+    LocalMinima* NewLm = new LocalMinima;
+    NewLm->Y = E1->Bot.Y;
+    NewLm->Next = 0;
+    if (IsHorizontal(*E2)) //Horz. edges never start a Left bound
+    {
+      if (E2->Bot.X != E1->Bot.X) ReverseHorizontal(*E2);
+      NewLm->LeftBound = E1;
+      NewLm->RightBound = E2;
+    } else if (E2->Dx < E1->Dx)
+    {
+      NewLm->LeftBound = E1;
+      NewLm->RightBound = E2;
+    } else
+    {
+      NewLm->LeftBound = E2;
+      NewLm->RightBound = E1;
+    }
+    NewLm->LeftBound->Side = esLeft;
+    NewLm->RightBound->Side = esRight;
+    //set the winding state of the first edge in each bound
+    //(it'll be copied to subsequent edges in the bound) ...
+    if (!IsClosed) NewLm->LeftBound->WindDelta = 0;
+    else if (NewLm->LeftBound->Next == NewLm->RightBound) NewLm->LeftBound->WindDelta = -1;
+    else NewLm->LeftBound->WindDelta = 1;
+    NewLm->RightBound->WindDelta = -NewLm->LeftBound->WindDelta;
+    InsertLocalMinima(NewLm);
+  }
+}
+//----------------------------------------------------------------------
+
+TEdge* ClipperBase::DescendToMin(TEdge *&E)
 {
+  //PRECONDITION: STARTING EDGE IS A VALID DESCENDING EDGE.
   //Starting at the top of one bound we progress to the bottom where there's
-  //a local minima. We then go to the top of the next bound. These two bounds
+  //A local minima. We  go to the top of the Next bound. These two bounds
   //form the left and right (or right and left) bounds of the local minima.
-  e->nextInLML = 0;
-  e = e->next;
+  TEdge* EHorz;
+  E->NextInLML = 0;
+  if (IsHorizontal(*E)) 
+  {
+    EHorz = E;
+    while (IsHorizontal(*EHorz->Next)) EHorz = EHorz->Next;
+    if (EHorz->Bot != EHorz->Next->Top)
+      ReverseHorizontal(*E);
+  }
   for (;;)
   {
-    if (NEAR_EQUAL(e->dx, HORIZONTAL))
+    E = E->Next;
+    if (E->OutIdx == Skip) break;
+    else if (IsHorizontal(*E))
     {
       //nb: proceed through horizontals when approaching from their right,
       //    but break on horizontal minima if approaching from their left.
       //    This ensures 'local minima' are always on the left of horizontals.
-      if (e->next->ytop < e->ytop && e->next->xbot > e->prev->xbot) break;
-      if (e->xtop != e->prev->xbot) SwapX(*e);
-      e->nextInLML = e->prev;
+
+      //look ahead is required in case of multiple consec. horizontals
+      EHorz = GetLastHorz(E);
+      if(EHorz == E->Prev ||                    //horizontal line
+        (EHorz->Next->Top.Y < E->Top.Y &&      //bottom horizontal
+        EHorz->Next->Bot.X > E->Prev->Bot.X))  //approaching from the left
+          break;
+      if (E->Top.X != E->Prev->Bot.X)  ReverseHorizontal(*E);
+      if (EHorz->OutIdx == Skip) EHorz = EHorz->Prev;
+      while (E != EHorz)
+      {
+        E->NextInLML = E->Prev;
+        E = E->Next;
+        if (E->Top.X != E->Prev->Bot.X) ReverseHorizontal(*E);
+      }
     }
-    else if (e->ycurr == e->prev->ycurr) break;
-    else e->nextInLML = e->prev;
-    e = e->next;
+    else if (E->Bot.Y == E->Prev->Bot.Y)  break;
+    E->NextInLML = E->Prev;
   }
+  return E->Prev;
+}
+//----------------------------------------------------------------------
 
-  //e and e.prev are now at a local minima ...
-  LocalMinima* newLm = new LocalMinima;
-  newLm->next = 0;
-  newLm->Y = e->prev->ybot;
-
-  if ( NEAR_EQUAL(e->dx, HORIZONTAL) ) //horizontal edges never start a left bound
-  {
-    if (e->xbot != e->prev->xbot) SwapX(*e);
-    newLm->leftBound = e->prev;
-    newLm->rightBound = e;
-  } else if (e->dx < e->prev->dx)
-  {
-    newLm->leftBound = e->prev;
-    newLm->rightBound = e;
-  } else
+void ClipperBase::AscendToMax(TEdge *&E, bool Appending, bool IsClosed)
+{
+  if (E->OutIdx == Skip)
   {
-    newLm->leftBound = e;
-    newLm->rightBound = e->prev;
+    E = E->Next;
+    if (!MoreAbove(E->Prev)) return;
   }
-  newLm->leftBound->side = esLeft;
-  newLm->rightBound->side = esRight;
-  InsertLocalMinima( newLm );
 
+  if (IsHorizontal(*E) && Appending && (E->Bot != E->Prev->Bot))
+      ReverseHorizontal(*E);
+  //now process the ascending bound ....
+  TEdge *EStart = E;
   for (;;)
   {
-    if ( e->next->ytop == e->ytop && !NEAR_EQUAL(e->next->dx, HORIZONTAL) ) break;
-    e->nextInLML = e->next;
-    e = e->next;
-    if ( NEAR_EQUAL(e->dx, HORIZONTAL) && e->xbot != e->prev->xtop) SwapX(*e);
+    if (E->Next->OutIdx == Skip ||
+      ((E->Next->Top.Y == E->Top.Y) && !IsHorizontal(*E->Next))) break;
+    E->NextInLML = E->Next;
+    E = E->Next;
+    if (IsHorizontal(*E) && (E->Bot.X != E->Prev->Top.X))
+      ReverseHorizontal(*E);
+  }
+
+  if (!Appending)
+  {
+    if (EStart->OutIdx == Skip) EStart = EStart->Next;
+    if (EStart != E->Next)
+      DoMinimaLML(0, EStart, IsClosed);
   }
-  return e->next;
+  E = E->Next;
 }
-//------------------------------------------------------------------------------
+//----------------------------------------------------------------------
 
-bool ClipperBase::AddPolygons(const Polygons &ppg, PolyType polyType)
+TEdge* ClipperBase::AddBoundsToLML(TEdge* E, bool IsClosed)
 {
-  bool result = false;
-  for (Polygons::size_type i = 0; i < ppg.size(); ++i)
-    if (AddPolygon(ppg[i], polyType)) result = true;
-  return result;
+  //Starting at the top of one bound we progress to the bottom where there's
+  //A local minima. We then go to the top of the Next bound. These two bounds
+  //form the left and right (or right and left) bounds of the local minima.
+
+  TEdge* B;
+  bool AppendMaxima;
+  //do minima ...
+  if (E->OutIdx == Skip)
+  {
+    if (MoreBelow(E))
+    {
+      E = E->Next;
+      B = DescendToMin(E);
+    } else
+      B = 0;
+  } else
+    B = DescendToMin(E);
+
+  if (E->OutIdx == Skip)    //nb: may be BEFORE, AT or just THRU LM
+  {
+    //do minima before Skip...
+    DoMinimaLML(0, B, IsClosed);      //store what we've got so far (if anything)
+    AppendMaxima = false;
+    //finish off any minima ...
+    if ((E->Bot != E->Prev->Bot) && MoreBelow(E)) 
+    {
+      E = E->Next;
+      B = DescendToMin(E);
+      DoMinimaLML(B, E, IsClosed);
+      AppendMaxima = true;
+    }
+    else if (JustBeforeLocMin(E))
+      E = E->Next;
+  } else
+  {
+    DoMinimaLML(B, E, IsClosed);
+    AppendMaxima = true;
+  }
+
+  //now do maxima ...
+  AscendToMax(E, AppendMaxima, IsClosed);
+
+  if (E->OutIdx == Skip && (E->Top != E->Prev->Top))     
+  {
+    //may be BEFORE, AT or just AFTER maxima
+    //finish off any maxima ...
+    if (MoreAbove(E)) 
+    {
+      E = E->Next;
+      AscendToMax(E, false, IsClosed);
+    }
+    else if ((E->Top == E->Next->Top) ||
+      (IsHorizontal(*E->Next) && (E->Top == E->Next->Bot))) 
+      E = E->Next; //ie just before Maxima
+  }
+  return E;
 }
-//------------------------------------------------------------------------------
+//----------------------------------------------------------------------
 
 void ClipperBase::Clear()
 {
   DisposeLocalMinimaList();
-  for (EdgeList::size_type i = 0; i < m_edges.size(); ++i) delete [] m_edges[i];
+  for (EdgeList::size_type i = 0; i < m_edges.size(); ++i)
+  {
+    //for each edge array in turn, find the first used edge and 
+    //check for and remove any hiddenPts in each edge in the array.
+    TEdge* edges = m_edges[i];
+    delete [] edges;
+  }
   m_edges.clear();
   m_UseFullRange = false;
+  m_HasOpenPaths = false;
 }
 //------------------------------------------------------------------------------
 
@@ -1054,25 +1482,21 @@ void ClipperBase::Reset()
   LocalMinima* lm = m_MinimaList;
   while( lm )
   {
-    TEdge* e = lm->leftBound;
-    while( e )
+    TEdge* e = lm->LeftBound;
+    if (e)
     {
-      e->xcurr = e->xbot;
-      e->ycurr = e->ybot;
-      e->side = esLeft;
-      e->outIdx = -1;
-      e = e->nextInLML;
+      e->Curr = e->Bot;
+      e->Side = esLeft;
+      if (e->OutIdx != Skip)
+        e->OutIdx = Unassigned;
     }
-    e = lm->rightBound;
-    while( e )
-    {
-      e->xcurr = e->xbot;
-      e->ycurr = e->ybot;
-      e->side = esRight;
-      e->outIdx = -1;
-      e = e->nextInLML;
-    }
-    lm = lm->next;
+    e = lm->RightBound;
+    e->Curr = e->Bot;
+    e->Side = esRight;
+    if (e->OutIdx != Skip)
+      e->OutIdx = Unassigned;
+
+    lm = lm->Next;
   }
 }
 //------------------------------------------------------------------------------
@@ -1081,7 +1505,7 @@ void ClipperBase::DisposeLocalMinimaList()
 {
   while( m_MinimaList )
   {
-    LocalMinima* tmpLm = m_MinimaList->next;
+    LocalMinima* tmpLm = m_MinimaList->Next;
     delete m_MinimaList;
     m_MinimaList = tmpLm;
   }
@@ -1092,7 +1516,7 @@ void ClipperBase::DisposeLocalMinimaList()
 void ClipperBase::PopLocalMinima()
 {
   if( ! m_CurrentLM ) return;
-  m_CurrentLM = m_CurrentLM->next;
+  m_CurrentLM = m_CurrentLM->Next;
 }
 //------------------------------------------------------------------------------
 
@@ -1105,101 +1529,103 @@ IntRect ClipperBase::GetBounds()
     result.left = result.top = result.right = result.bottom = 0;
     return result;
   }
-  result.left = lm->leftBound->xbot;
-  result.top = lm->leftBound->ybot;
-  result.right = lm->leftBound->xbot;
-  result.bottom = lm->leftBound->ybot;
+  result.left = lm->LeftBound->Bot.X;
+  result.top = lm->LeftBound->Bot.Y;
+  result.right = lm->LeftBound->Bot.X;
+  result.bottom = lm->LeftBound->Bot.Y;
   while (lm)
   {
-    if (lm->leftBound->ybot > result.bottom)
-      result.bottom = lm->leftBound->ybot;
-    TEdge* e = lm->leftBound;
+    if (lm->LeftBound->Bot.Y > result.bottom)
+      result.bottom = lm->LeftBound->Bot.Y;
+    TEdge* e = lm->LeftBound;
     for (;;) {
       TEdge* bottomE = e;
-      while (e->nextInLML)
+      while (e->NextInLML)
       {
-        if (e->xbot < result.left) result.left = e->xbot;
-        if (e->xbot > result.right) result.right = e->xbot;
-        e = e->nextInLML;
+        if (e->Bot.X < result.left) result.left = e->Bot.X;
+        if (e->Bot.X > result.right) result.right = e->Bot.X;
+        e = e->NextInLML;
       }
-      if (e->xbot < result.left) result.left = e->xbot;
-      if (e->xbot > result.right) result.right = e->xbot;
-      if (e->xtop < result.left) result.left = e->xtop;
-      if (e->xtop > result.right) result.right = e->xtop;
-      if (e->ytop < result.top) result.top = e->ytop;
+      if (e->Bot.X < result.left) result.left = e->Bot.X;
+      if (e->Bot.X > result.right) result.right = e->Bot.X;
+      if (e->Top.X < result.left) result.left = e->Top.X;
+      if (e->Top.X > result.right) result.right = e->Top.X;
+      if (e->Top.Y < result.top) result.top = e->Top.Y;
 
-      if (bottomE == lm->leftBound) e = lm->rightBound;
+      if (bottomE == lm->LeftBound) e = lm->RightBound;
       else break;
     }
-    lm = lm->next;
+    lm = lm->Next;
   }
   return result;
 }
 
-
 //------------------------------------------------------------------------------
 // TClipper methods ...
 //------------------------------------------------------------------------------
 
-Clipper::Clipper() : ClipperBase() //constructor
+Clipper::Clipper(int initOptions) : ClipperBase() //constructor
 {
-  m_Scanbeam = 0;
   m_ActiveEdges = 0;
   m_SortedEdges = 0;
   m_IntersectNodes = 0;
   m_ExecuteLocked = false;
   m_UseFullRange = false;
-  m_ReverseOutput = false;
-  m_ForceSimple = false;
+  m_ReverseOutput = ((initOptions & ioReverseSolution) != 0);
+  m_StrictSimple = ((initOptions & ioStrictlySimple) != 0);
+  m_PreserveCollinear = ((initOptions & ioPreserveCollinear) != 0);
+  m_HasOpenPaths = false;
+#ifdef use_xyz  
+  m_ZFill = 0;
+#endif
 }
 //------------------------------------------------------------------------------
 
 Clipper::~Clipper() //destructor
 {
   Clear();
-  DisposeScanbeamList();
+  m_Scanbeam.clear();
 }
 //------------------------------------------------------------------------------
 
-void Clipper::Clear()
-{
-  if (m_edges.empty()) return; //avoids problems with ClipperBase destructor
-  DisposeAllPolyPts();
-  ClipperBase::Clear();
+#ifdef use_xyz  
+void Clipper::ZFillFunction(TZFillCallback zFillFunc)
+{  
+  m_ZFill = zFillFunc;
 }
 //------------------------------------------------------------------------------
+#endif
 
-void Clipper::DisposeScanbeamList()
+void Clipper::Clear()
 {
-  while ( m_Scanbeam ) {
-  Scanbeam* sb2 = m_Scanbeam->next;
-  delete m_Scanbeam;
-  m_Scanbeam = sb2;
-  }
+  if (m_edges.empty()) return; //avoids problems with ClipperBase destructor
+  DisposeAllOutRecs();
+  ClipperBase::Clear();
 }
 //------------------------------------------------------------------------------
 
 void Clipper::Reset()
 {
   ClipperBase::Reset();
-  m_Scanbeam = 0;
+  m_Scanbeam.clear();
   m_ActiveEdges = 0;
   m_SortedEdges = 0;
-  DisposeAllPolyPts();
+  DisposeAllOutRecs();
   LocalMinima* lm = m_MinimaList;
   while (lm)
   {
     InsertScanbeam(lm->Y);
-    InsertScanbeam(lm->leftBound->ytop);
-    lm = lm->next;
+    lm = lm->Next;
   }
 }
 //------------------------------------------------------------------------------
 
-bool Clipper::Execute(ClipType clipType, Polygons &solution,
+bool Clipper::Execute(ClipType clipType, Paths &solution,
     PolyFillType subjFillType, PolyFillType clipFillType)
 {
   if( m_ExecuteLocked ) return false;
+  if (m_HasOpenPaths)
+    throw clipperException("Error: PolyTree struct is need for open path clipping.");
   m_ExecuteLocked = true;
   solution.resize(0);
   m_SubjFillType = subjFillType;
@@ -1234,11 +1660,11 @@ void Clipper::FixHoleLinkage(OutRec &outrec)
   //skip OutRecs that (a) contain outermost polygons or
   //(b) already have the correct owner/child linkage ...
   if (!outrec.FirstLeft ||                
-      (outrec.isHole != outrec.FirstLeft->isHole &&
-      outrec.FirstLeft->pts)) return;
+      (outrec.IsHole != outrec.FirstLeft->IsHole &&
+      outrec.FirstLeft->Pts)) return;
 
   OutRec* orfl = outrec.FirstLeft;
-  while (orfl && ((orfl->isHole == outrec.isHole) || !orfl->pts))
+  while (orfl && ((orfl->IsHole == outrec.IsHole) || !orfl->Pts))
       orfl = orfl->FirstLeft;
   outrec.FirstLeft = orfl;
 }
@@ -1246,88 +1672,73 @@ void Clipper::FixHoleLinkage(OutRec &outrec)
 
 bool Clipper::ExecuteInternal()
 {
-  bool succeeded;
+  bool succeeded = true;
   try {
     Reset();
-    if (!m_CurrentLM ) return true;
-    long64 botY = PopScanbeam();
+    if (!m_CurrentLM) return false;
+    cInt botY = PopScanbeam();
     do {
       InsertLocalMinimaIntoAEL(botY);
-      ClearHorzJoins();
-      ProcessHorizontals();
-      long64 topY = PopScanbeam();
+      ClearGhostJoins();
+      ProcessHorizontals(false);
+      if (m_Scanbeam.empty()) break;
+      cInt topY = PopScanbeam();
       succeeded = ProcessIntersections(botY, topY);
       if (!succeeded) break;
       ProcessEdgesAtTopOfScanbeam(topY);
       botY = topY;
-    } while( m_Scanbeam );
+    } while (!m_Scanbeam.empty() || m_CurrentLM);
   }
-  catch(...) {
+  catch(...) 
+  {
     succeeded = false;
   }
 
   if (succeeded)
   {
-    //tidy up output polygons and fix orientations where necessary ...
+    //fix orientations ...
     for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
     {
       OutRec *outRec = m_PolyOuts[i];
-      if (!outRec->pts) continue;
-      FixupOutPolygon(*outRec);
-      if (!outRec->pts) continue;
-
-      if ((outRec->isHole ^ m_ReverseOutput) == (Area(*outRec, m_UseFullRange) > 0))
-        ReversePolyPtLinks(outRec->pts);
+      if (!outRec->Pts || outRec->IsOpen) continue;
+      if ((outRec->IsHole ^ m_ReverseOutput) == (Area(*outRec) > 0))
+        ReversePolyPtLinks(outRec->Pts);
     }
 
     if (!m_Joins.empty()) JoinCommonEdges();
-    if (m_ForceSimple) DoSimplePolygons();
+
+    //unfortunately FixupOutPolygon() must be done after JoinCommonEdges()
+    for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+    {
+      OutRec *outRec = m_PolyOuts[i];
+      if (outRec->Pts && !outRec->IsOpen)
+        FixupOutPolygon(*outRec);
+    }
+
+    if (m_StrictSimple) DoSimplePolygons();
   }
 
   ClearJoins();
-  ClearHorzJoins();
+  ClearGhostJoins();
   return succeeded;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::InsertScanbeam(const long64 Y)
+void Clipper::InsertScanbeam(const cInt Y)
 {
-  if( !m_Scanbeam )
-  {
-    m_Scanbeam = new Scanbeam;
-    m_Scanbeam->next = 0;
-    m_Scanbeam->Y = Y;
-  }
-  else if(  Y > m_Scanbeam->Y )
-  {
-    Scanbeam* newSb = new Scanbeam;
-    newSb->Y = Y;
-    newSb->next = m_Scanbeam;
-    m_Scanbeam = newSb;
-  } else
-  {
-    Scanbeam* sb2 = m_Scanbeam;
-    while( sb2->next  && ( Y <= sb2->next->Y ) ) sb2 = sb2->next;
-    if(  Y == sb2->Y ) return; //ie ignores duplicates
-    Scanbeam* newSb = new Scanbeam;
-    newSb->Y = Y;
-    newSb->next = sb2->next;
-    sb2->next = newSb;
-  }
+  m_Scanbeam.insert(Y);
 }
 //------------------------------------------------------------------------------
 
-long64 Clipper::PopScanbeam()
+cInt Clipper::PopScanbeam()
 {
-  long64 Y = m_Scanbeam->Y;
-  Scanbeam* sb2 = m_Scanbeam;
-  m_Scanbeam = m_Scanbeam->next;
-  delete sb2;
+  cInt Y = *m_Scanbeam.begin();
+  m_Scanbeam.erase(m_Scanbeam.begin());
   return Y;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::DisposeAllPolyPts(){
+void Clipper::DisposeAllOutRecs(){
   for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
     DisposeOutRec(i);
   m_PolyOuts.clear();
@@ -1337,7 +1748,7 @@ void Clipper::DisposeAllPolyPts(){
 void Clipper::DisposeOutRec(PolyOutList::size_type index)
 {
   OutRec *outRec = m_PolyOuts[index];
-  if (outRec->pts) DisposeOutPts(outRec->pts);
+  if (outRec->Pts) DisposeOutPts(outRec->Pts);
   delete outRec;
   m_PolyOuts[index] = 0;
 }
@@ -1345,59 +1756,94 @@ void Clipper::DisposeOutRec(PolyOutList::size_type index)
 
 void Clipper::SetWindingCount(TEdge &edge)
 {
-  TEdge *e = edge.prevInAEL;
+  TEdge *e = edge.PrevInAEL;
   //find the edge of the same polytype that immediately preceeds 'edge' in AEL
-  while ( e  && e->polyType != edge.polyType ) e = e->prevInAEL;
-  if ( !e )
+  while (e  && ((e->PolyTyp != edge.PolyTyp) || (e->WindDelta == 0))) e = e->PrevInAEL;
+  if (!e)
+  {
+    edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
+    edge.WindCnt2 = 0;
+    e = m_ActiveEdges; //ie get ready to calc WindCnt2
+  }   
+  else if (edge.WindDelta == 0 && m_ClipType != ctUnion)
   {
-    edge.windCnt = edge.windDelta;
-    edge.windCnt2 = 0;
-    e = m_ActiveEdges; //ie get ready to calc windCnt2
-  } else if ( IsEvenOddFillType(edge) )
+    edge.WindCnt = 1;
+    edge.WindCnt2 = e->WindCnt2;
+    e = e->NextInAEL; //ie get ready to calc WindCnt2
+  }
+  else if (IsEvenOddFillType(edge))
   {
     //EvenOdd filling ...
-    edge.windCnt = 1;
-    edge.windCnt2 = e->windCnt2;
-    e = e->nextInAEL; //ie get ready to calc windCnt2
-  } else
+    if (edge.WindDelta == 0)
+    {
+      //are we inside a subj polygon ...
+      bool Inside = true;
+      TEdge *e2 = e->PrevInAEL;
+      while (e2)
+      {
+        if (e2->PolyTyp == e->PolyTyp && e2->WindDelta != 0) 
+          Inside = !Inside;
+        e2 = e2->PrevInAEL;
+      }
+      edge.WindCnt = (Inside ? 0 : 1);
+    }
+    else
+    {
+      edge.WindCnt = edge.WindDelta;
+    }
+    edge.WindCnt2 = e->WindCnt2;
+    e = e->NextInAEL; //ie get ready to calc WindCnt2
+  } 
+  else
   {
     //nonZero, Positive or Negative filling ...
-    if ( e->windCnt * e->windDelta < 0 )
+    if (e->WindCnt * e->WindDelta < 0)
     {
-      if (Abs(e->windCnt) > 1)
+      //prev edge is 'decreasing' WindCount (WC) toward zero
+      //so we're outside the previous polygon ...
+      if (Abs(e->WindCnt) > 1)
       {
-        if (e->windDelta * edge.windDelta < 0) edge.windCnt = e->windCnt;
-        else edge.windCnt = e->windCnt + edge.windDelta;
-      } else
-        edge.windCnt = e->windCnt + e->windDelta + edge.windDelta;
+        //outside prev poly but still inside another.
+        //when reversing direction of prev poly use the same WC 
+        if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
+        //otherwise continue to 'decrease' WC ...
+        else edge.WindCnt = e->WindCnt + edge.WindDelta;
+      } 
+      else
+        //now outside all polys of same polytype so set own WC ...
+        edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
     } else
     {
-      if ( Abs(e->windCnt) > 1 && e->windDelta * edge.windDelta < 0)
-        edge.windCnt = e->windCnt;
-      else if ( e->windCnt + edge.windDelta == 0 )
-        edge.windCnt = e->windCnt;
-      else edge.windCnt = e->windCnt + edge.windDelta;
+      //prev edge is 'increasing' WindCount (WC) away from zero
+      //so we're inside the previous polygon ...
+      if (edge.WindDelta == 0) 
+        edge.WindCnt = (e->WindCnt < 0 ? e->WindCnt - 1 : e->WindCnt + 1);
+      //if wind direction is reversing prev then use same WC
+      else if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
+      //otherwise add to WC ...
+      else edge.WindCnt = e->WindCnt + edge.WindDelta;
     }
-    edge.windCnt2 = e->windCnt2;
-    e = e->nextInAEL; //ie get ready to calc windCnt2
+    edge.WindCnt2 = e->WindCnt2;
+    e = e->NextInAEL; //ie get ready to calc WindCnt2
   }
 
-  //update windCnt2 ...
-  if ( IsEvenOddAltFillType(edge) )
+  //update WindCnt2 ...
+  if (IsEvenOddAltFillType(edge))
   {
     //EvenOdd filling ...
-    while ( e != &edge )
+    while (e != &edge)
     {
-      edge.windCnt2 = (edge.windCnt2 == 0) ? 1 : 0;
-      e = e->nextInAEL;
+      if (e->WindDelta != 0)
+        edge.WindCnt2 = (edge.WindCnt2 == 0 ? 1 : 0);
+      e = e->NextInAEL;
     }
   } else
   {
     //nonZero, Positive or Negative filling ...
     while ( e != &edge )
     {
-      edge.windCnt2 += e->windDelta;
-      e = e->nextInAEL;
+      edge.WindCnt2 += e->WindDelta;
+      e = e->NextInAEL;
     }
   }
 }
@@ -1405,7 +1851,7 @@ void Clipper::SetWindingCount(TEdge &edge)
 
 bool Clipper::IsEvenOddFillType(const TEdge& edge) const
 {
-  if (edge.polyType == ptSubject)
+  if (edge.PolyTyp == ptSubject)
     return m_SubjFillType == pftEvenOdd; else
     return m_ClipFillType == pftEvenOdd;
 }
@@ -1413,7 +1859,7 @@ bool Clipper::IsEvenOddFillType(const TEdge& edge) const
 
 bool Clipper::IsEvenOddAltFillType(const TEdge& edge) const
 {
-  if (edge.polyType == ptSubject)
+  if (edge.PolyTyp == ptSubject)
     return m_ClipFillType == pftEvenOdd; else
     return m_SubjFillType == pftEvenOdd;
 }
@@ -1422,7 +1868,7 @@ bool Clipper::IsEvenOddAltFillType(const TEdge& edge) const
 bool Clipper::IsContributing(const TEdge& edge) const
 {
   PolyFillType pft, pft2;
-  if (edge.polyType == ptSubject)
+  if (edge.PolyTyp == ptSubject)
   {
     pft = m_SubjFillType;
     pft2 = m_ClipFillType;
@@ -1435,14 +1881,17 @@ bool Clipper::IsContributing(const TEdge& edge) const
   switch(pft)
   {
     case pftEvenOdd: 
+      //return false if a subj line has been flagged as inside a subj polygon
+      if (edge.WindDelta == 0 && edge.WindCnt != 1) return false;
+      break;
     case pftNonZero:
-      if (Abs(edge.windCnt) != 1) return false;
+      if (Abs(edge.WindCnt) != 1) return false;
       break;
     case pftPositive: 
-      if (edge.windCnt != 1) return false;
+      if (edge.WindCnt != 1) return false;
       break;
     default: //pftNegative
-      if (edge.windCnt != -1) return false;
+      if (edge.WindCnt != -1) return false;
   }
 
   switch(m_ClipType)
@@ -1452,94 +1901,119 @@ bool Clipper::IsContributing(const TEdge& edge) const
       {
         case pftEvenOdd: 
         case pftNonZero: 
-          return (edge.windCnt2 != 0);
+          return (edge.WindCnt2 != 0);
         case pftPositive: 
-          return (edge.windCnt2 > 0);
+          return (edge.WindCnt2 > 0);
         default: 
-          return (edge.windCnt2 < 0);
+          return (edge.WindCnt2 < 0);
       }
+      break;
     case ctUnion:
       switch(pft2)
       {
         case pftEvenOdd: 
         case pftNonZero: 
-          return (edge.windCnt2 == 0);
+          return (edge.WindCnt2 == 0);
         case pftPositive: 
-          return (edge.windCnt2 <= 0);
+          return (edge.WindCnt2 <= 0);
         default: 
-          return (edge.windCnt2 >= 0);
+          return (edge.WindCnt2 >= 0);
       }
+      break;
     case ctDifference:
-      if (edge.polyType == ptSubject)
+      if (edge.PolyTyp == ptSubject)
         switch(pft2)
         {
           case pftEvenOdd: 
           case pftNonZero: 
-            return (edge.windCnt2 == 0);
+            return (edge.WindCnt2 == 0);
           case pftPositive: 
-            return (edge.windCnt2 <= 0);
+            return (edge.WindCnt2 <= 0);
           default: 
-            return (edge.windCnt2 >= 0);
+            return (edge.WindCnt2 >= 0);
         }
       else
         switch(pft2)
         {
           case pftEvenOdd: 
           case pftNonZero: 
-            return (edge.windCnt2 != 0);
+            return (edge.WindCnt2 != 0);
+          case pftPositive: 
+            return (edge.WindCnt2 > 0);
+          default: 
+            return (edge.WindCnt2 < 0);
+        }
+      break;
+    case ctXor:
+      if (edge.WindDelta == 0) //XOr always contributing unless open
+        switch(pft2)
+        {
+          case pftEvenOdd: 
+          case pftNonZero: 
+            return (edge.WindCnt2 == 0);
           case pftPositive: 
-            return (edge.windCnt2 > 0);
+            return (edge.WindCnt2 <= 0);
           default: 
-            return (edge.windCnt2 < 0);
+            return (edge.WindCnt2 >= 0);
         }
+      else 
+        return true;
+      break;
     default:
       return true;
   }
 }
 //------------------------------------------------------------------------------
 
-void Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt)
+OutPt* Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
 {
+  OutPt* result;
   TEdge *e, *prevE;
-  if( NEAR_EQUAL(e2->dx, HORIZONTAL) || ( e1->dx > e2->dx ) )
+  if (IsHorizontal(*e2) || ( e1->Dx > e2->Dx ))
   {
-    AddOutPt( e1, pt );
-    e2->outIdx = e1->outIdx;
-    e1->side = esLeft;
-    e2->side = esRight;
+    result = AddOutPt(e1, Pt);
+    e2->OutIdx = e1->OutIdx;
+    e1->Side = esLeft;
+    e2->Side = esRight;
     e = e1;
-    if (e->prevInAEL == e2)
-      prevE = e2->prevInAEL; 
+    if (e->PrevInAEL == e2)
+      prevE = e2->PrevInAEL; 
     else
-      prevE = e->prevInAEL;
+      prevE = e->PrevInAEL;
   } else
   {
-    AddOutPt( e2, pt );
-    e1->outIdx = e2->outIdx;
-    e1->side = esRight;
-    e2->side = esLeft;
+    result = AddOutPt(e2, Pt);
+    e1->OutIdx = e2->OutIdx;
+    e1->Side = esRight;
+    e2->Side = esLeft;
     e = e2;
-    if (e->prevInAEL == e1)
-        prevE = e1->prevInAEL;
+    if (e->PrevInAEL == e1)
+        prevE = e1->PrevInAEL;
     else
-        prevE = e->prevInAEL;
+        prevE = e->PrevInAEL;
+  }
+
+  if (prevE && prevE->OutIdx >= 0 &&
+      (TopX(*prevE, Pt.Y) == TopX(*e, Pt.Y)) &&
+      SlopesEqual(*e, *prevE, m_UseFullRange) &&
+      (e->WindDelta != 0) && (prevE->WindDelta != 0))
+  {
+    OutPt* outPt = AddOutPt(prevE, Pt);
+    AddJoin(result, outPt, e->Top);
   }
-  if (prevE && prevE->outIdx >= 0 &&
-      (TopX(*prevE, pt.Y) == TopX(*e, pt.Y)) &&
-        SlopesEqual(*e, *prevE, m_UseFullRange))
-          AddJoin(e, prevE, -1, -1);
+  return result;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt)
+void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
 {
-  AddOutPt( e1, pt );
-  if( e1->outIdx == e2->outIdx )
+  AddOutPt( e1, Pt );
+  if( e1->OutIdx == e2->OutIdx )
   {
-    e1->outIdx = -1;
-    e2->outIdx = -1;
+    e1->OutIdx = Unassigned;
+    e2->OutIdx = Unassigned;
   }
-  else if (e1->outIdx < e2->outIdx) 
+  else if (e1->OutIdx < e2->OutIdx) 
     AppendPolygon(e1, e2); 
   else 
     AppendPolygon(e2, e1);
@@ -1553,14 +2027,14 @@ void Clipper::AddEdgeToSEL(TEdge *edge)
   if( !m_SortedEdges )
   {
     m_SortedEdges = edge;
-    edge->prevInSEL = 0;
-    edge->nextInSEL = 0;
+    edge->PrevInSEL = 0;
+    edge->NextInSEL = 0;
   }
   else
   {
-    edge->nextInSEL = m_SortedEdges;
-    edge->prevInSEL = 0;
-    m_SortedEdges->prevInSEL = edge;
+    edge->NextInSEL = m_SortedEdges;
+    edge->PrevInSEL = 0;
+    m_SortedEdges->PrevInSEL = edge;
     m_SortedEdges = edge;
   }
 }
@@ -1572,27 +2046,20 @@ void Clipper::CopyAELToSEL()
   m_SortedEdges = e;
   while ( e )
   {
-    e->prevInSEL = e->prevInAEL;
-    e->nextInSEL = e->nextInAEL;
-    e = e->nextInAEL;
+    e->PrevInSEL = e->PrevInAEL;
+    e->NextInSEL = e->NextInAEL;
+    e = e->NextInAEL;
   }
 }
 //------------------------------------------------------------------------------
 
-void Clipper::AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx, int e2OutIdx)
+void Clipper::AddJoin(OutPt *op1, OutPt *op2, const IntPoint OffPt)
 {
-  JoinRec* jr = new JoinRec;
-  if (e1OutIdx >= 0)
-    jr->poly1Idx = e1OutIdx; else
-    jr->poly1Idx = e1->outIdx;
-  jr->pt1a = IntPoint(e1->xcurr, e1->ycurr);
-  jr->pt1b = IntPoint(e1->xtop, e1->ytop);
-  if (e2OutIdx >= 0)
-    jr->poly2Idx = e2OutIdx; else
-    jr->poly2Idx = e2->outIdx;
-  jr->pt2a = IntPoint(e2->xcurr, e2->ycurr);
-  jr->pt2b = IntPoint(e2->xtop, e2->ytop);
-  m_Joins.push_back(jr);
+  Join* j = new Join;
+  j->OutPt1 = op1;
+  j->OutPt2 = op2;
+  j->OffPt = OffPt;
+  m_Joins.push_back(j);
 }
 //------------------------------------------------------------------------------
 
@@ -1604,161 +2071,252 @@ void Clipper::ClearJoins()
 }
 //------------------------------------------------------------------------------
 
-void Clipper::AddHorzJoin(TEdge *e, int idx)
+void Clipper::ClearGhostJoins()
 {
-  HorzJoinRec* hj = new HorzJoinRec;
-  hj->edge = e;
-  hj->savedIdx = idx;
-  m_HorizJoins.push_back(hj);
+  for (JoinList::size_type i = 0; i < m_GhostJoins.size(); i++)
+    delete m_GhostJoins[i];
+  m_GhostJoins.resize(0);
 }
 //------------------------------------------------------------------------------
 
-void Clipper::ClearHorzJoins()
+void Clipper::AddGhostJoin(OutPt *op, const IntPoint OffPt)
 {
-  for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); i++)
-    delete m_HorizJoins[i];
-  m_HorizJoins.resize(0);
+  Join* j = new Join;
+  j->OutPt1 = op;
+  j->OutPt2 = 0;
+  j->OffPt = OffPt;
+  m_GhostJoins.push_back(j);
 }
 //------------------------------------------------------------------------------
 
-void Clipper::InsertLocalMinimaIntoAEL(const long64 botY)
+void Clipper::InsertLocalMinimaIntoAEL(const cInt botY)
 {
   while(  m_CurrentLM  && ( m_CurrentLM->Y == botY ) )
   {
-    TEdge* lb = m_CurrentLM->leftBound;
-    TEdge* rb = m_CurrentLM->rightBound;
-
-    InsertEdgeIntoAEL( lb );
-    InsertScanbeam( lb->ytop );
-    InsertEdgeIntoAEL( rb );
-
-    if (IsEvenOddFillType(*lb))
+    TEdge* lb = m_CurrentLM->LeftBound;
+    TEdge* rb = m_CurrentLM->RightBound;
+    PopLocalMinima();
+    OutPt *Op1 = 0;
+    if (!lb)
     {
-      lb->windDelta = 1;
-      rb->windDelta = 1;
-    }
+      //nb: don't insert LB into either AEL or SEL
+      InsertEdgeIntoAEL(rb, 0);
+      SetWindingCount(*rb);
+      if (IsContributing(*rb))
+        Op1 = AddOutPt(rb, rb->Bot); 
+    } 
     else
     {
-      rb->windDelta = -lb->windDelta;
+      InsertEdgeIntoAEL(lb, 0);
+      InsertEdgeIntoAEL(rb, lb);
+      SetWindingCount( *lb );
+      rb->WindCnt = lb->WindCnt;
+      rb->WindCnt2 = lb->WindCnt2;
+      if (IsContributing(*lb))
+        Op1 = AddLocalMinPoly(lb, rb, lb->Bot);      
+      InsertScanbeam(lb->Top.Y);
     }
-    SetWindingCount( *lb );
-    rb->windCnt = lb->windCnt;
-    rb->windCnt2 = lb->windCnt2;
 
-    if( NEAR_EQUAL(rb->dx, HORIZONTAL) )
-    {
-      //nb: only rightbounds can have a horizontal bottom edge
-      AddEdgeToSEL( rb );
-      InsertScanbeam( rb->nextInLML->ytop );
-    }
+    if(IsHorizontal(*rb))
+      AddEdgeToSEL(rb);
     else
-      InsertScanbeam( rb->ytop );
+      InsertScanbeam( rb->Top.Y );
 
-    if( IsContributing(*lb) )
-      AddLocalMinPoly( lb, rb, IntPoint(lb->xcurr, m_CurrentLM->Y) );
+    if (!lb) continue;
 
     //if any output polygons share an edge, they'll need joining later ...
-    if (rb->outIdx >= 0 && NEAR_EQUAL(rb->dx, HORIZONTAL))
+    if (Op1 && IsHorizontal(*rb) && 
+      m_GhostJoins.size() > 0 && (rb->WindDelta != 0))
     {
-      for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i)
+      for (JoinList::size_type i = 0; i < m_GhostJoins.size(); ++i)
       {
-        IntPoint pt, pt2; //returned by GetOverlapSegment() but unused here.
-        HorzJoinRec* hj = m_HorizJoins[i];
-        //if horizontals rb and hj.edge overlap, flag for joining later ...
-        if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot),
-          IntPoint(hj->edge->xtop, hj->edge->ytop),
-          IntPoint(rb->xbot, rb->ybot),
-          IntPoint(rb->xtop, rb->ytop), pt, pt2))
-            AddJoin(hj->edge, rb, hj->savedIdx);
+        Join* jr = m_GhostJoins[i];
+        //if the horizontal Rb and a 'ghost' horizontal overlap, then convert
+        //the 'ghost' join to a real join ready for later ...
+        if (HorzSegmentsOverlap(jr->OutPt1->Pt, jr->OffPt, rb->Bot, rb->Top))
+          AddJoin(jr->OutPt1, Op1, jr->OffPt);
       }
     }
 
-    if( lb->nextInAEL != rb )
+    if (lb->OutIdx >= 0 && lb->PrevInAEL && 
+      lb->PrevInAEL->Curr.X == lb->Bot.X &&
+      lb->PrevInAEL->OutIdx >= 0 &&
+      SlopesEqual(*lb->PrevInAEL, *lb, m_UseFullRange) &&
+      (lb->WindDelta != 0) && (lb->PrevInAEL->WindDelta != 0))
     {
-      if (rb->outIdx >= 0 && rb->prevInAEL->outIdx >= 0 &&
-        SlopesEqual(*rb->prevInAEL, *rb, m_UseFullRange))
-          AddJoin(rb, rb->prevInAEL);
+        OutPt *Op2 = AddOutPt(lb->PrevInAEL, lb->Bot);
+        AddJoin(Op1, Op2, lb->Top);
+    }
+
+    if(lb->NextInAEL != rb)
+    {
+
+      if (rb->OutIdx >= 0 && rb->PrevInAEL->OutIdx >= 0 &&
+        SlopesEqual(*rb->PrevInAEL, *rb, m_UseFullRange) &&
+        (rb->WindDelta != 0) && (rb->PrevInAEL->WindDelta != 0))
+      {
+          OutPt *Op2 = AddOutPt(rb->PrevInAEL, rb->Bot);
+          AddJoin(Op1, Op2, rb->Top);
+      }
 
-      TEdge* e = lb->nextInAEL;
-      IntPoint pt = IntPoint(lb->xcurr, lb->ycurr);
-      while( e != rb )
+      TEdge* e = lb->NextInAEL;
+      if (e)
       {
-        if(!e) throw clipperException("InsertLocalMinimaIntoAEL: missing rightbound!");
-        //nb: For calculating winding counts etc, IntersectEdges() assumes
-        //that param1 will be to the right of param2 ABOVE the intersection ...
-        IntersectEdges( rb , e , pt , ipNone); //order important here
-        e = e->nextInAEL;
+        while( e != rb )
+        {
+          //nb: For calculating winding counts etc, IntersectEdges() assumes
+          //that param1 will be to the Right of param2 ABOVE the intersection ...
+          IntersectEdges(rb , e , lb->Curr); //order important here
+          e = e->NextInAEL;
+        }
       }
     }
-    PopLocalMinima();
+    
   }
 }
 //------------------------------------------------------------------------------
 
 void Clipper::DeleteFromAEL(TEdge *e)
 {
-  TEdge* AelPrev = e->prevInAEL;
-  TEdge* AelNext = e->nextInAEL;
+  TEdge* AelPrev = e->PrevInAEL;
+  TEdge* AelNext = e->NextInAEL;
   if(  !AelPrev &&  !AelNext && (e != m_ActiveEdges) ) return; //already deleted
-  if( AelPrev ) AelPrev->nextInAEL = AelNext;
+  if( AelPrev ) AelPrev->NextInAEL = AelNext;
   else m_ActiveEdges = AelNext;
-  if( AelNext ) AelNext->prevInAEL = AelPrev;
-  e->nextInAEL = 0;
-  e->prevInAEL = 0;
+  if( AelNext ) AelNext->PrevInAEL = AelPrev;
+  e->NextInAEL = 0;
+  e->PrevInAEL = 0;
 }
 //------------------------------------------------------------------------------
 
 void Clipper::DeleteFromSEL(TEdge *e)
 {
-  TEdge* SelPrev = e->prevInSEL;
-  TEdge* SelNext = e->nextInSEL;
+  TEdge* SelPrev = e->PrevInSEL;
+  TEdge* SelNext = e->NextInSEL;
   if( !SelPrev &&  !SelNext && (e != m_SortedEdges) ) return; //already deleted
-  if( SelPrev ) SelPrev->nextInSEL = SelNext;
+  if( SelPrev ) SelPrev->NextInSEL = SelNext;
   else m_SortedEdges = SelNext;
-  if( SelNext ) SelNext->prevInSEL = SelPrev;
-  e->nextInSEL = 0;
-  e->prevInSEL = 0;
+  if( SelNext ) SelNext->PrevInSEL = SelPrev;
+  e->NextInSEL = 0;
+  e->PrevInSEL = 0;
+}
+//------------------------------------------------------------------------------
+
+#ifdef use_xyz
+
+void Clipper::SetZ(IntPoint& pt, TEdge& e)
+{
+  pt.Z = 0;
+  if (m_ZFill)
+  {
+    //put the 'preferred' point as first parameter ...
+    if (e.OutIdx < 0)
+      (*m_ZFill)(e.Bot, e.Top, pt); //outside a path so presume entering
+    else
+      (*m_ZFill)(e.Top, e.Bot, pt); //inside a path so presume exiting
+  }
 }
 //------------------------------------------------------------------------------
+#endif
 
 void Clipper::IntersectEdges(TEdge *e1, TEdge *e2,
-     const IntPoint &pt, const IntersectProtects protects)
+     const IntPoint &Pt, bool protect)
 {
-  //e1 will be to the left of e2 BELOW the intersection. Therefore e1 is before
+  //e1 will be to the Left of e2 BELOW the intersection. Therefore e1 is before
   //e2 in AEL except when e1 is being inserted at the intersection point ...
-  bool e1stops = !(ipLeft & protects) &&  !e1->nextInLML &&
-    e1->xtop == pt.X && e1->ytop == pt.Y;
-  bool e2stops = !(ipRight & protects) &&  !e2->nextInLML &&
-    e2->xtop == pt.X && e2->ytop == pt.Y;
-  bool e1Contributing = ( e1->outIdx >= 0 );
-  bool e2contributing = ( e2->outIdx >= 0 );
+  bool e1stops = !protect &&  !e1->NextInLML &&
+    e1->Top.X == Pt.X && e1->Top.Y == Pt.Y;
+  bool e2stops = !protect &&  !e2->NextInLML &&
+    e2->Top.X == Pt.X && e2->Top.Y == Pt.Y;
+  bool e1Contributing = ( e1->OutIdx >= 0 );
+  bool e2Contributing = ( e2->OutIdx >= 0 );
+
+#ifdef use_lines
+  //if either edge is on an OPEN path ...
+  if (e1->WindDelta == 0 || e2->WindDelta == 0)
+  {
+    //ignore subject-subject open path intersections UNLESS they
+    //are both open paths, AND they are both 'contributing maximas' ...
+    if (e1->WindDelta == 0 && e2->WindDelta == 0)
+    {
+      if ((e1stops || e2stops) && e1Contributing && e2Contributing)
+        AddLocalMaxPoly(e1, e2, Pt);
+    }
+
+    //if intersecting a subj line with a subj poly ...
+    else if (e1->PolyTyp == e2->PolyTyp && 
+      e1->WindDelta != e2->WindDelta && m_ClipType == ctUnion)
+    {
+      if (e1->WindDelta == 0)
+      {
+        if (e2Contributing)
+        {
+          AddOutPt(e1, Pt);
+          if (e1Contributing) e1->OutIdx = Unassigned;
+        }
+      }
+      else
+      {
+        if (e1Contributing)
+        {
+          AddOutPt(e2, Pt);
+          if (e2Contributing) e2->OutIdx = Unassigned;
+        }
+      }
+    }
+    else if (e1->PolyTyp != e2->PolyTyp)
+    {
+      //toggle subj open path OutIdx on/off when Abs(clip.WndCnt) == 1 ...
+      if ((e1->WindDelta == 0) && std::abs(e2->WindCnt) == 1 && 
+        (m_ClipType != ctUnion || e2->WindCnt2 == 0))
+      {
+        AddOutPt(e1, Pt);
+        if (e1Contributing) e1->OutIdx = Unassigned;
+      }
+      else if ((e2->WindDelta == 0) && (std::abs(e1->WindCnt) == 1) && 
+        (m_ClipType != ctUnion || e1->WindCnt2 == 0))
+      {
+        AddOutPt(e2, Pt);
+        if (e2Contributing) e2->OutIdx = Unassigned;
+      }
+    }
+
+    if (e1stops)
+      if (e1->OutIdx < 0) DeleteFromAEL(e1);
+      else throw clipperException("Error intersecting polylines");
+    if (e2stops) 
+      if (e2->OutIdx < 0) DeleteFromAEL(e2);
+      else throw clipperException("Error intersecting polylines");
+    return;
+  }
+#endif
 
   //update winding counts...
-  //assumes that e1 will be to the right of e2 ABOVE the intersection
-  if ( e1->polyType == e2->polyType )
+  //assumes that e1 will be to the Right of e2 ABOVE the intersection
+  if ( e1->PolyTyp == e2->PolyTyp )
   {
     if ( IsEvenOddFillType( *e1) )
     {
-      int oldE1WindCnt = e1->windCnt;
-      e1->windCnt = e2->windCnt;
-      e2->windCnt = oldE1WindCnt;
+      int oldE1WindCnt = e1->WindCnt;
+      e1->WindCnt = e2->WindCnt;
+      e2->WindCnt = oldE1WindCnt;
     } else
     {
-      if (e1->windCnt + e2->windDelta == 0 ) e1->windCnt = -e1->windCnt;
-      else e1->windCnt += e2->windDelta;
-      if ( e2->windCnt - e1->windDelta == 0 ) e2->windCnt = -e2->windCnt;
-      else e2->windCnt -= e1->windDelta;
+      if (e1->WindCnt + e2->WindDelta == 0 ) e1->WindCnt = -e1->WindCnt;
+      else e1->WindCnt += e2->WindDelta;
+      if ( e2->WindCnt - e1->WindDelta == 0 ) e2->WindCnt = -e2->WindCnt;
+      else e2->WindCnt -= e1->WindDelta;
     }
   } else
   {
-    if (!IsEvenOddFillType(*e2)) e1->windCnt2 += e2->windDelta;
-    else e1->windCnt2 = ( e1->windCnt2 == 0 ) ? 1 : 0;
-    if (!IsEvenOddFillType(*e1)) e2->windCnt2 -= e1->windDelta;
-    else e2->windCnt2 = ( e2->windCnt2 == 0 ) ? 1 : 0;
+    if (!IsEvenOddFillType(*e2)) e1->WindCnt2 += e2->WindDelta;
+    else e1->WindCnt2 = ( e1->WindCnt2 == 0 ) ? 1 : 0;
+    if (!IsEvenOddFillType(*e1)) e2->WindCnt2 -= e1->WindDelta;
+    else e2->WindCnt2 = ( e2->WindCnt2 == 0 ) ? 1 : 0;
   }
 
   PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2;
-  if (e1->polyType == ptSubject)
+  if (e1->PolyTyp == ptSubject)
   {
     e1FillType = m_SubjFillType;
     e1FillType2 = m_ClipFillType;
@@ -1767,7 +2325,7 @@ void Clipper::IntersectEdges(TEdge *e1, TEdge *e2,
     e1FillType = m_ClipFillType;
     e1FillType2 = m_SubjFillType;
   }
-  if (e2->polyType == ptSubject)
+  if (e2->PolyTyp == ptSubject)
   {
     e2FillType = m_SubjFillType;
     e2FillType2 = m_ClipFillType;
@@ -1777,30 +2335,30 @@ void Clipper::IntersectEdges(TEdge *e1, TEdge *e2,
     e2FillType2 = m_SubjFillType;
   }
 
-  long64 e1Wc, e2Wc;
+  cInt e1Wc, e2Wc;
   switch (e1FillType)
   {
-    case pftPositive: e1Wc = e1->windCnt; break;
-    case pftNegative: e1Wc = -e1->windCnt; break;
-    default: e1Wc = Abs(e1->windCnt);
+    case pftPositive: e1Wc = e1->WindCnt; break;
+    case pftNegative: e1Wc = -e1->WindCnt; break;
+    default: e1Wc = Abs(e1->WindCnt);
   }
   switch(e2FillType)
   {
-    case pftPositive: e2Wc = e2->windCnt; break;
-    case pftNegative: e2Wc = -e2->windCnt; break;
-    default: e2Wc = Abs(e2->windCnt);
+    case pftPositive: e2Wc = e2->WindCnt; break;
+    case pftNegative: e2Wc = -e2->WindCnt; break;
+    default: e2Wc = Abs(e2->WindCnt);
   }
 
-  if ( e1Contributing && e2contributing )
+  if ( e1Contributing && e2Contributing )
   {
     if ( e1stops || e2stops || 
       (e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) ||
-      (e1->polyType != e2->polyType && m_ClipType != ctXor) )
-        AddLocalMaxPoly(e1, e2, pt); 
+      (e1->PolyTyp != e2->PolyTyp && m_ClipType != ctXor) )
+        AddLocalMaxPoly(e1, e2, Pt); 
     else
     {
-      AddOutPt(e1, pt);
-      AddOutPt(e2, pt);
+      AddOutPt(e1, Pt);
+      AddOutPt(e2, Pt);
       SwapSides( *e1 , *e2 );
       SwapPolyIndexes( *e1 , *e2 );
     }
@@ -1809,16 +2367,16 @@ void Clipper::IntersectEdges(TEdge *e1, TEdge *e2,
   {
     if (e2Wc == 0 || e2Wc == 1) 
     {
-      AddOutPt(e1, pt);
+      AddOutPt(e1, Pt);
       SwapSides(*e1, *e2);
       SwapPolyIndexes(*e1, *e2);
     }
   }
-  else if ( e2contributing )
+  else if ( e2Contributing )
   {
     if (e1Wc == 0 || e1Wc == 1) 
     {
-      AddOutPt(e2, pt);
+      AddOutPt(e2, Pt);
       SwapSides(*e1, *e2);
       SwapPolyIndexes(*e1, *e2);
     }
@@ -1828,46 +2386,46 @@ void Clipper::IntersectEdges(TEdge *e1, TEdge *e2,
   {
     //neither edge is currently contributing ...
 
-    long64 e1Wc2, e2Wc2;
+    cInt e1Wc2, e2Wc2;
     switch (e1FillType2)
     {
-      case pftPositive: e1Wc2 = e1->windCnt2; break;
-      case pftNegative : e1Wc2 = -e1->windCnt2; break;
-      default: e1Wc2 = Abs(e1->windCnt2);
+      case pftPositive: e1Wc2 = e1->WindCnt2; break;
+      case pftNegative : e1Wc2 = -e1->WindCnt2; break;
+      default: e1Wc2 = Abs(e1->WindCnt2);
     }
     switch (e2FillType2)
     {
-      case pftPositive: e2Wc2 = e2->windCnt2; break;
-      case pftNegative: e2Wc2 = -e2->windCnt2; break;
-      default: e2Wc2 = Abs(e2->windCnt2);
+      case pftPositive: e2Wc2 = e2->WindCnt2; break;
+      case pftNegative: e2Wc2 = -e2->WindCnt2; break;
+      default: e2Wc2 = Abs(e2->WindCnt2);
     }
 
-    if (e1->polyType != e2->polyType)
-        AddLocalMinPoly(e1, e2, pt);
+    if (e1->PolyTyp != e2->PolyTyp)
+        AddLocalMinPoly(e1, e2, Pt);
     else if (e1Wc == 1 && e2Wc == 1)
       switch( m_ClipType ) {
         case ctIntersection:
           if (e1Wc2 > 0 && e2Wc2 > 0)
-            AddLocalMinPoly(e1, e2, pt);
+            AddLocalMinPoly(e1, e2, Pt);
           break;
         case ctUnion:
           if ( e1Wc2 <= 0 && e2Wc2 <= 0 )
-            AddLocalMinPoly(e1, e2, pt);
+            AddLocalMinPoly(e1, e2, Pt);
           break;
         case ctDifference:
-          if (((e1->polyType == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) ||
-              ((e1->polyType == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0)))
-                AddLocalMinPoly(e1, e2, pt);
+          if (((e1->PolyTyp == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) ||
+              ((e1->PolyTyp == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0)))
+                AddLocalMinPoly(e1, e2, Pt);
           break;
         case ctXor:
-          AddLocalMinPoly(e1, e2, pt);
+          AddLocalMinPoly(e1, e2, Pt);
       }
     else
       SwapSides( *e1, *e2 );
   }
 
   if(  (e1stops != e2stops) &&
-    ( (e1stops && (e1->outIdx >= 0)) || (e2stops && (e2->outIdx >= 0)) ) )
+    ( (e1stops && (e1->OutIdx >= 0)) || (e2stops && (e2->OutIdx >= 0)) ) )
   {
     SwapSides( *e1, *e2 );
     SwapPolyIndexes( *e1, *e2 );
@@ -1881,38 +2439,38 @@ void Clipper::IntersectEdges(TEdge *e1, TEdge *e2,
 
 void Clipper::SetHoleState(TEdge *e, OutRec *outrec)
 {
-  bool isHole = false;
-  TEdge *e2 = e->prevInAEL;
+  bool IsHole = false;
+  TEdge *e2 = e->PrevInAEL;
   while (e2)
   {
-    if (e2->outIdx >= 0)
+    if (e2->OutIdx >= 0 && e2->WindDelta != 0)
     {
-      isHole = !isHole;
+      IsHole = !IsHole;
       if (! outrec->FirstLeft)
-        outrec->FirstLeft = m_PolyOuts[e2->outIdx];
+        outrec->FirstLeft = m_PolyOuts[e2->OutIdx];
     }
-    e2 = e2->prevInAEL;
+    e2 = e2->PrevInAEL;
   }
-  if (isHole) outrec->isHole = true;
+  if (IsHole) outrec->IsHole = true;
 }
 //------------------------------------------------------------------------------
 
 OutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2)
 {
   //work out which polygon fragment has the correct hole state ...
-  if (!outRec1->bottomPt) 
-    outRec1->bottomPt = GetBottomPt(outRec1->pts);
-  if (!outRec2->bottomPt) 
-    outRec2->bottomPt = GetBottomPt(outRec2->pts);
-  OutPt *outPt1 = outRec1->bottomPt;
-  OutPt *outPt2 = outRec2->bottomPt;
-  if (outPt1->pt.Y > outPt2->pt.Y) return outRec1;
-  else if (outPt1->pt.Y < outPt2->pt.Y) return outRec2;
-  else if (outPt1->pt.X < outPt2->pt.X) return outRec1;
-  else if (outPt1->pt.X > outPt2->pt.X) return outRec2;
-  else if (outPt1->next == outPt1) return outRec2;
-  else if (outPt2->next == outPt2) return outRec1;
-  else if (FirstIsBottomPt(outPt1, outPt2)) return outRec1;
+  if (!outRec1->BottomPt) 
+    outRec1->BottomPt = GetBottomPt(outRec1->Pts);
+  if (!outRec2->BottomPt) 
+    outRec2->BottomPt = GetBottomPt(outRec2->Pts);
+  OutPt *OutPt1 = outRec1->BottomPt;
+  OutPt *OutPt2 = outRec2->BottomPt;
+  if (OutPt1->Pt.Y > OutPt2->Pt.Y) return outRec1;
+  else if (OutPt1->Pt.Y < OutPt2->Pt.Y) return outRec2;
+  else if (OutPt1->Pt.X < OutPt2->Pt.X) return outRec1;
+  else if (OutPt1->Pt.X > OutPt2->Pt.X) return outRec2;
+  else if (OutPt1->Next == OutPt1) return outRec2;
+  else if (OutPt2->Next == OutPt2) return outRec1;
+  else if (FirstIsBottomPt(OutPt1, OutPt2)) return outRec1;
   else return outRec2;
 }
 //------------------------------------------------------------------------------
@@ -1928,11 +2486,11 @@ bool Param1RightOfParam2(OutRec* outRec1, OutRec* outRec2)
 }
 //------------------------------------------------------------------------------
 
-OutRec* Clipper::GetOutRec(int idx)
+OutRec* Clipper::GetOutRec(int Idx)
 {
-  OutRec* outrec = m_PolyOuts[idx];
-  while (outrec != m_PolyOuts[outrec->idx])
-    outrec = m_PolyOuts[outrec->idx];
+  OutRec* outrec = m_PolyOuts[Idx];
+  while (outrec != m_PolyOuts[outrec->Idx])
+    outrec = m_PolyOuts[outrec->Idx];
   return outrec;
 }
 //------------------------------------------------------------------------------
@@ -1940,8 +2498,8 @@ OutRec* Clipper::GetOutRec(int idx)
 void Clipper::AppendPolygon(TEdge *e1, TEdge *e2)
 {
   //get the start and ends of both output polygons ...
-  OutRec *outRec1 = m_PolyOuts[e1->outIdx];
-  OutRec *outRec2 = m_PolyOuts[e2->outIdx];
+  OutRec *outRec1 = m_PolyOuts[e1->OutIdx];
+  OutRec *outRec2 = m_PolyOuts[e2->OutIdx];
 
   OutRec *holeStateRec;
   if (Param1RightOfParam2(outRec1, outRec2)) 
@@ -1951,381 +2509,479 @@ void Clipper::AppendPolygon(TEdge *e1, TEdge *e2)
   else 
     holeStateRec = GetLowermostRec(outRec1, outRec2);
 
-  OutPt* p1_lft = outRec1->pts;
-  OutPt* p1_rt = p1_lft->prev;
-  OutPt* p2_lft = outRec2->pts;
-  OutPt* p2_rt = p2_lft->prev;
+  //get the start and ends of both output polygons and
+  //join e2 poly onto e1 poly and delete pointers to e2 ...
+
+  OutPt* p1_lft = outRec1->Pts;
+  OutPt* p1_rt = p1_lft->Prev;
+  OutPt* p2_lft = outRec2->Pts;
+  OutPt* p2_rt = p2_lft->Prev;
 
-  EdgeSide side;
+  EdgeSide Side;
   //join e2 poly onto e1 poly and delete pointers to e2 ...
-  if(  e1->side == esLeft )
+  if(  e1->Side == esLeft )
   {
-    if(  e2->side == esLeft )
+    if(  e2->Side == esLeft )
     {
       //z y x a b c
       ReversePolyPtLinks(p2_lft);
-      p2_lft->next = p1_lft;
-      p1_lft->prev = p2_lft;
-      p1_rt->next = p2_rt;
-      p2_rt->prev = p1_rt;
-      outRec1->pts = p2_rt;
+      p2_lft->Next = p1_lft;
+      p1_lft->Prev = p2_lft;
+      p1_rt->Next = p2_rt;
+      p2_rt->Prev = p1_rt;
+      outRec1->Pts = p2_rt;
     } else
     {
       //x y z a b c
-      p2_rt->next = p1_lft;
-      p1_lft->prev = p2_rt;
-      p2_lft->prev = p1_rt;
-      p1_rt->next = p2_lft;
-      outRec1->pts = p2_lft;
+      p2_rt->Next = p1_lft;
+      p1_lft->Prev = p2_rt;
+      p2_lft->Prev = p1_rt;
+      p1_rt->Next = p2_lft;
+      outRec1->Pts = p2_lft;
     }
-    side = esLeft;
+    Side = esLeft;
   } else
   {
-    if(  e2->side == esRight )
+    if(  e2->Side == esRight )
     {
       //a b c z y x
       ReversePolyPtLinks(p2_lft);
-      p1_rt->next = p2_rt;
-      p2_rt->prev = p1_rt;
-      p2_lft->next = p1_lft;
-      p1_lft->prev = p2_lft;
+      p1_rt->Next = p2_rt;
+      p2_rt->Prev = p1_rt;
+      p2_lft->Next = p1_lft;
+      p1_lft->Prev = p2_lft;
     } else
     {
       //a b c x y z
-      p1_rt->next = p2_lft;
-      p2_lft->prev = p1_rt;
-      p1_lft->prev = p2_rt;
-      p2_rt->next = p1_lft;
+      p1_rt->Next = p2_lft;
+      p2_lft->Prev = p1_rt;
+      p1_lft->Prev = p2_rt;
+      p2_rt->Next = p1_lft;
     }
-    side = esRight;
+    Side = esRight;
   }
 
-  outRec1->bottomPt = 0;
+  outRec1->BottomPt = 0;
   if (holeStateRec == outRec2)
   {
     if (outRec2->FirstLeft != outRec1)
       outRec1->FirstLeft = outRec2->FirstLeft;
-    outRec1->isHole = outRec2->isHole;
+    outRec1->IsHole = outRec2->IsHole;
   }
-  outRec2->pts = 0;
-  outRec2->bottomPt = 0;
-
+  outRec2->Pts = 0;
+  outRec2->BottomPt = 0;
   outRec2->FirstLeft = outRec1;
 
-  int OKIdx = e1->outIdx;
-  int ObsoleteIdx = e2->outIdx;
+  int OKIdx = e1->OutIdx;
+  int ObsoleteIdx = e2->OutIdx;
 
-  e1->outIdx = -1; //nb: safe because we only get here via AddLocalMaxPoly
-  e2->outIdx = -1;
+  e1->OutIdx = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly
+  e2->OutIdx = Unassigned;
 
   TEdge* e = m_ActiveEdges;
   while( e )
   {
-    if( e->outIdx == ObsoleteIdx )
+    if( e->OutIdx == ObsoleteIdx )
     {
-      e->outIdx = OKIdx;
-      e->side = side;
+      e->OutIdx = OKIdx;
+      e->Side = Side;
       break;
     }
-    e = e->nextInAEL;
+    e = e->NextInAEL;
   }
 
-  outRec2->idx = outRec1->idx;
+  outRec2->Idx = outRec1->Idx;
 }
 //------------------------------------------------------------------------------
 
 OutRec* Clipper::CreateOutRec()
 {
   OutRec* result = new OutRec;
-  result->isHole = false;
+  result->IsHole = false;
+  result->IsOpen = false;
   result->FirstLeft = 0;
-  result->pts = 0;
-  result->bottomPt = 0;
-  result->polyNode = 0;
+  result->Pts = 0;
+  result->BottomPt = 0;
+  result->PolyNd = 0;
   m_PolyOuts.push_back(result);
-  result->idx = (int)m_PolyOuts.size()-1;
+  result->Idx = (int)m_PolyOuts.size()-1;
   return result;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::AddOutPt(TEdge *e, const IntPoint &pt)
+OutPt* Clipper::AddOutPt(TEdge *e, const IntPoint &pt)
 {
-  bool ToFront = (e->side == esLeft);
-  if(  e->outIdx < 0 )
+  bool ToFront = (e->Side == esLeft);
+  if(  e->OutIdx < 0 )
   {
     OutRec *outRec = CreateOutRec();
-    e->outIdx = outRec->idx;
-    OutPt* op = new OutPt;
-    outRec->pts = op;
-    op->pt = pt;
-    op->idx = outRec->idx;
-    op->next = op;
-    op->prev = op;
-    SetHoleState(e, outRec);
+    outRec->IsOpen = (e->WindDelta == 0);
+    OutPt* newOp = new OutPt;
+    outRec->Pts = newOp;
+    newOp->Idx = outRec->Idx;
+    newOp->Pt = pt;
+    newOp->Next = newOp;
+    newOp->Prev = newOp;
+    if (!outRec->IsOpen)
+      SetHoleState(e, outRec);
+#ifdef use_xyz
+    if (pt == e->Bot) newOp->Pt = e->Bot;
+    else if (pt == e->Top) newOp->Pt = e->Top;
+    else SetZ(newOp->Pt, *e);
+#endif
+    e->OutIdx = outRec->Idx; //nb: do this after SetZ !
+    return newOp;
   } else
   {
-    OutRec *outRec = m_PolyOuts[e->outIdx];
-    OutPt* op = outRec->pts;
-    if ((ToFront && PointsEqual(pt, op->pt)) ||
-      (!ToFront && PointsEqual(pt, op->prev->pt))) return;
-
-    OutPt* op2 = new OutPt;
-    op2->pt = pt;
-    op2->idx = outRec->idx;
-    op2->next = op;
-    op2->prev = op->prev;
-    op2->prev->next = op2;
-    op->prev = op2;
-    if (ToFront) outRec->pts = op2;
+    OutRec *outRec = m_PolyOuts[e->OutIdx];
+    //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most'
+    OutPt* op = outRec->Pts;
+
+    if (ToFront && (pt == op->Pt)) return op;
+    else if (!ToFront && (pt == op->Prev->Pt)) return op->Prev;
+
+    OutPt* newOp = new OutPt;
+    newOp->Idx = outRec->Idx;
+    newOp->Pt = pt;
+    newOp->Next = op;
+    newOp->Prev = op->Prev;
+    newOp->Prev->Next = newOp;
+    op->Prev = newOp;
+    if (ToFront) outRec->Pts = newOp;
+#ifdef use_xyz
+    if (pt == e->Bot) newOp->Pt = e->Bot;
+    else if (pt == e->Top) newOp->Pt = e->Top;
+    else SetZ(newOp->Pt, *e);
+#endif
+    return newOp;
   }
 }
 //------------------------------------------------------------------------------
 
-void Clipper::ProcessHorizontals()
+void Clipper::ProcessHorizontals(bool IsTopOfScanbeam)
 {
   TEdge* horzEdge = m_SortedEdges;
-  while( horzEdge )
+  while(horzEdge)
   {
-    DeleteFromSEL( horzEdge );
-    ProcessHorizontal( horzEdge );
+    DeleteFromSEL(horzEdge);
+    ProcessHorizontal(horzEdge, IsTopOfScanbeam);
     horzEdge = m_SortedEdges;
   }
 }
 //------------------------------------------------------------------------------
 
-bool Clipper::IsTopHorz(const long64 XPos)
-{
-  TEdge* e = m_SortedEdges;
-  while( e )
-  {
-    if(  ( XPos >= std::min(e->xcurr, e->xtop) ) &&
-      ( XPos <= std::max(e->xcurr, e->xtop) ) ) return false;
-    e = e->nextInSEL;
-  }
-  return true;
-}
-//------------------------------------------------------------------------------
-
 inline bool IsMinima(TEdge *e)
 {
-  return e  && (e->prev->nextInLML != e) && (e->next->nextInLML != e);
+  return e  && (e->Prev->NextInLML != e) && (e->Next->NextInLML != e);
 }
 //------------------------------------------------------------------------------
 
-inline bool IsMaxima(TEdge *e, const long64 Y)
+inline bool IsMaxima(TEdge *e, const cInt Y)
 {
-  return e && e->ytop == Y && !e->nextInLML;
+  return e && e->Top.Y == Y && !e->NextInLML;
 }
 //------------------------------------------------------------------------------
 
-inline bool IsIntermediate(TEdge *e, const long64 Y)
+inline bool IsIntermediate(TEdge *e, const cInt Y)
 {
-  return e->ytop == Y && e->nextInLML;
+  return e->Top.Y == Y && e->NextInLML;
 }
 //------------------------------------------------------------------------------
 
 TEdge *GetMaximaPair(TEdge *e)
 {
-  if( !IsMaxima(e->next, e->ytop) || e->next->xtop != e->xtop )
-    return e->prev; else
-    return e->next;
+  TEdge* result = 0;
+  if ((e->Next->Top == e->Top) && !e->Next->NextInLML)
+    result = e->Next;
+  else if ((e->Prev->Top == e->Top) && !e->Prev->NextInLML)
+    result = e->Prev;
+
+  if (result && (result->OutIdx == Skip ||
+    //result is false if both NextInAEL & PrevInAEL are nil & not horizontal ...
+    (result->NextInAEL == result->PrevInAEL && !IsHorizontal(*result))))
+      return 0;
+  return result;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::SwapPositionsInAEL(TEdge *edge1, TEdge *edge2)
+void Clipper::SwapPositionsInAEL(TEdge *Edge1, TEdge *Edge2)
 {
-  if(  edge1->nextInAEL == edge2 )
+  //check that one or other edge hasn't already been removed from AEL ...
+  if (Edge1->NextInAEL == Edge1->PrevInAEL || 
+    Edge2->NextInAEL == Edge2->PrevInAEL) return;
+
+  if(  Edge1->NextInAEL == Edge2 )
   {
-    TEdge* next = edge2->nextInAEL;
-    if( next ) next->prevInAEL = edge1;
-    TEdge* prev = edge1->prevInAEL;
-    if( prev ) prev->nextInAEL = edge2;
-    edge2->prevInAEL = prev;
-    edge2->nextInAEL = edge1;
-    edge1->prevInAEL = edge2;
-    edge1->nextInAEL = next;
+    TEdge* Next = Edge2->NextInAEL;
+    if( Next ) Next->PrevInAEL = Edge1;
+    TEdge* Prev = Edge1->PrevInAEL;
+    if( Prev ) Prev->NextInAEL = Edge2;
+    Edge2->PrevInAEL = Prev;
+    Edge2->NextInAEL = Edge1;
+    Edge1->PrevInAEL = Edge2;
+    Edge1->NextInAEL = Next;
   }
-  else if(  edge2->nextInAEL == edge1 )
+  else if(  Edge2->NextInAEL == Edge1 )
   {
-    TEdge* next = edge1->nextInAEL;
-    if( next ) next->prevInAEL = edge2;
-    TEdge* prev = edge2->prevInAEL;
-    if( prev ) prev->nextInAEL = edge1;
-    edge1->prevInAEL = prev;
-    edge1->nextInAEL = edge2;
-    edge2->prevInAEL = edge1;
-    edge2->nextInAEL = next;
+    TEdge* Next = Edge1->NextInAEL;
+    if( Next ) Next->PrevInAEL = Edge2;
+    TEdge* Prev = Edge2->PrevInAEL;
+    if( Prev ) Prev->NextInAEL = Edge1;
+    Edge1->PrevInAEL = Prev;
+    Edge1->NextInAEL = Edge2;
+    Edge2->PrevInAEL = Edge1;
+    Edge2->NextInAEL = Next;
   }
   else
   {
-    TEdge* next = edge1->nextInAEL;
-    TEdge* prev = edge1->prevInAEL;
-    edge1->nextInAEL = edge2->nextInAEL;
-    if( edge1->nextInAEL ) edge1->nextInAEL->prevInAEL = edge1;
-    edge1->prevInAEL = edge2->prevInAEL;
-    if( edge1->prevInAEL ) edge1->prevInAEL->nextInAEL = edge1;
-    edge2->nextInAEL = next;
-    if( edge2->nextInAEL ) edge2->nextInAEL->prevInAEL = edge2;
-    edge2->prevInAEL = prev;
-    if( edge2->prevInAEL ) edge2->prevInAEL->nextInAEL = edge2;
+    TEdge* Next = Edge1->NextInAEL;
+    TEdge* Prev = Edge1->PrevInAEL;
+    Edge1->NextInAEL = Edge2->NextInAEL;
+    if( Edge1->NextInAEL ) Edge1->NextInAEL->PrevInAEL = Edge1;
+    Edge1->PrevInAEL = Edge2->PrevInAEL;
+    if( Edge1->PrevInAEL ) Edge1->PrevInAEL->NextInAEL = Edge1;
+    Edge2->NextInAEL = Next;
+    if( Edge2->NextInAEL ) Edge2->NextInAEL->PrevInAEL = Edge2;
+    Edge2->PrevInAEL = Prev;
+    if( Edge2->PrevInAEL ) Edge2->PrevInAEL->NextInAEL = Edge2;
   }
 
-  if( !edge1->prevInAEL ) m_ActiveEdges = edge1;
-  else if( !edge2->prevInAEL ) m_ActiveEdges = edge2;
+  if( !Edge1->PrevInAEL ) m_ActiveEdges = Edge1;
+  else if( !Edge2->PrevInAEL ) m_ActiveEdges = Edge2;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::SwapPositionsInSEL(TEdge *edge1, TEdge *edge2)
+void Clipper::SwapPositionsInSEL(TEdge *Edge1, TEdge *Edge2)
 {
-  if(  !( edge1->nextInSEL ) &&  !( edge1->prevInSEL ) ) return;
-  if(  !( edge2->nextInSEL ) &&  !( edge2->prevInSEL ) ) return;
+  if(  !( Edge1->NextInSEL ) &&  !( Edge1->PrevInSEL ) ) return;
+  if(  !( Edge2->NextInSEL ) &&  !( Edge2->PrevInSEL ) ) return;
 
-  if(  edge1->nextInSEL == edge2 )
+  if(  Edge1->NextInSEL == Edge2 )
   {
-    TEdge* next = edge2->nextInSEL;
-    if( next ) next->prevInSEL = edge1;
-    TEdge* prev = edge1->prevInSEL;
-    if( prev ) prev->nextInSEL = edge2;
-    edge2->prevInSEL = prev;
-    edge2->nextInSEL = edge1;
-    edge1->prevInSEL = edge2;
-    edge1->nextInSEL = next;
+    TEdge* Next = Edge2->NextInSEL;
+    if( Next ) Next->PrevInSEL = Edge1;
+    TEdge* Prev = Edge1->PrevInSEL;
+    if( Prev ) Prev->NextInSEL = Edge2;
+    Edge2->PrevInSEL = Prev;
+    Edge2->NextInSEL = Edge1;
+    Edge1->PrevInSEL = Edge2;
+    Edge1->NextInSEL = Next;
   }
-  else if(  edge2->nextInSEL == edge1 )
+  else if(  Edge2->NextInSEL == Edge1 )
   {
-    TEdge* next = edge1->nextInSEL;
-    if( next ) next->prevInSEL = edge2;
-    TEdge* prev = edge2->prevInSEL;
-    if( prev ) prev->nextInSEL = edge1;
-    edge1->prevInSEL = prev;
-    edge1->nextInSEL = edge2;
-    edge2->prevInSEL = edge1;
-    edge2->nextInSEL = next;
+    TEdge* Next = Edge1->NextInSEL;
+    if( Next ) Next->PrevInSEL = Edge2;
+    TEdge* Prev = Edge2->PrevInSEL;
+    if( Prev ) Prev->NextInSEL = Edge1;
+    Edge1->PrevInSEL = Prev;
+    Edge1->NextInSEL = Edge2;
+    Edge2->PrevInSEL = Edge1;
+    Edge2->NextInSEL = Next;
   }
   else
   {
-    TEdge* next = edge1->nextInSEL;
-    TEdge* prev = edge1->prevInSEL;
-    edge1->nextInSEL = edge2->nextInSEL;
-    if( edge1->nextInSEL ) edge1->nextInSEL->prevInSEL = edge1;
-    edge1->prevInSEL = edge2->prevInSEL;
-    if( edge1->prevInSEL ) edge1->prevInSEL->nextInSEL = edge1;
-    edge2->nextInSEL = next;
-    if( edge2->nextInSEL ) edge2->nextInSEL->prevInSEL = edge2;
-    edge2->prevInSEL = prev;
-    if( edge2->prevInSEL ) edge2->prevInSEL->nextInSEL = edge2;
+    TEdge* Next = Edge1->NextInSEL;
+    TEdge* Prev = Edge1->PrevInSEL;
+    Edge1->NextInSEL = Edge2->NextInSEL;
+    if( Edge1->NextInSEL ) Edge1->NextInSEL->PrevInSEL = Edge1;
+    Edge1->PrevInSEL = Edge2->PrevInSEL;
+    if( Edge1->PrevInSEL ) Edge1->PrevInSEL->NextInSEL = Edge1;
+    Edge2->NextInSEL = Next;
+    if( Edge2->NextInSEL ) Edge2->NextInSEL->PrevInSEL = Edge2;
+    Edge2->PrevInSEL = Prev;
+    if( Edge2->PrevInSEL ) Edge2->PrevInSEL->NextInSEL = Edge2;
   }
 
-  if( !edge1->prevInSEL ) m_SortedEdges = edge1;
-  else if( !edge2->prevInSEL ) m_SortedEdges = edge2;
+  if( !Edge1->PrevInSEL ) m_SortedEdges = Edge1;
+  else if( !Edge2->PrevInSEL ) m_SortedEdges = Edge2;
 }
 //------------------------------------------------------------------------------
 
 TEdge* GetNextInAEL(TEdge *e, Direction dir)
 {
-  return dir == dLeftToRight ? e->nextInAEL : e->prevInAEL;
+  return dir == dLeftToRight ? e->NextInAEL : e->PrevInAEL;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::ProcessHorizontal(TEdge *horzEdge)
+void GetHorzDirection(TEdge& HorzEdge, Direction& Dir, cInt& Left, cInt& Right)
 {
-  Direction dir;
-  long64 horzLeft, horzRight;
-
-  if( horzEdge->xcurr < horzEdge->xtop )
+  if (HorzEdge.Bot.X < HorzEdge.Top.X)
   {
-    horzLeft = horzEdge->xcurr;
-    horzRight = horzEdge->xtop;
-    dir = dLeftToRight;
+    Left = HorzEdge.Bot.X;
+    Right = HorzEdge.Top.X;
+    Dir = dLeftToRight;
   } else
   {
-    horzLeft = horzEdge->xtop;
-    horzRight = horzEdge->xcurr;
-    dir = dRightToLeft;
+    Left = HorzEdge.Top.X;
+    Right = HorzEdge.Bot.X;
+    Dir = dRightToLeft;
   }
+}
+//------------------------------------------------------------------------
 
-  TEdge* eMaxPair;
-  if( horzEdge->nextInLML ) eMaxPair = 0;
-  else eMaxPair = GetMaximaPair(horzEdge);
+void Clipper::PrepareHorzJoins(TEdge* horzEdge, bool isTopOfScanbeam)
+{
+  //get the last Op for this horizontal edge
+  //the point may be anywhere along the horizontal ...
+  OutPt* outPt = m_PolyOuts[horzEdge->OutIdx]->Pts;
+  if (horzEdge->Side != esLeft) outPt = outPt->Prev;
 
-  TEdge* e = GetNextInAEL( horzEdge , dir );
-  while( e )
+  //First, match up overlapping horizontal edges (eg when one polygon's
+  //intermediate horz edge overlaps an intermediate horz edge of another, or
+  //when one polygon sits on top of another) ...
+  for (JoinList::size_type i = 0; i < m_GhostJoins.size(); ++i)
+  {
+    Join* j = m_GhostJoins[i];
+    if (HorzSegmentsOverlap(j->OutPt1->Pt, j->OffPt, horzEdge->Bot, horzEdge->Top))
+        AddJoin(j->OutPt1, outPt, j->OffPt);
+  }
+  //Also, since horizontal edges at the top of one SB are often removed from
+  //the AEL before we process the horizontal edges at the bottom of the next,
+  //we need to create 'ghost' Join records of 'contrubuting' horizontals that
+  //we can compare with horizontals at the bottom of the next SB.
+  if (isTopOfScanbeam)
   {
-    if ( e->xcurr == horzEdge->xtop && !eMaxPair )
+    if (outPt->Pt == horzEdge->Top)
     {
-      if (SlopesEqual(*e, *horzEdge->nextInLML, m_UseFullRange))
-      {
-        //if output polygons share an edge, they'll need joining later ...
-        if (horzEdge->outIdx >= 0 && e->outIdx >= 0)
-          AddJoin(horzEdge->nextInLML, e, horzEdge->outIdx);
-        break; //we've reached the end of the horizontal line
-      }
-      else if (e->dx < horzEdge->nextInLML->dx)
-      //we really have got to the end of the intermediate horz edge so quit.
-      //nb: More -ve slopes follow more +ve slopes ABOVE the horizontal.
-        break;
+      AddGhostJoin(outPt, horzEdge->Bot); 
+    }
+    else
+    {
+      AddGhostJoin(outPt, horzEdge->Top);
     }
+  }
+}
+//------------------------------------------------------------------------------
+
+/*******************************************************************************
+* Notes: Horizontal edges (HEs) at scanline intersections (ie at the Top or    *
+* Bottom of a scanbeam) are processed as if layered. The order in which HEs    *
+* are processed doesn't matter. HEs intersect with other HE Bot.Xs only [#]    *
+* (or they could intersect with Top.Xs only, ie EITHER Bot.Xs OR Top.Xs),      *
+* and with other non-horizontal edges [*]. Once these intersections are        *
+* processed, intermediate HEs then 'promote' the Edge above (NextInLML) into   *
+* the AEL. These 'promoted' edges may in turn intersect [%] with other HEs.    *
+*******************************************************************************/
+
+void Clipper::ProcessHorizontal(TEdge *horzEdge, bool isTopOfScanbeam)
+{
+  Direction dir;
+  cInt horzLeft, horzRight;
 
-    TEdge* eNext = GetNextInAEL( e, dir );
+  GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
 
-    if (eMaxPair ||
-      ((dir == dLeftToRight) && (e->xcurr < horzRight)) ||
-      ((dir == dRightToLeft) && (e->xcurr > horzLeft)))
+  TEdge* eLastHorz = horzEdge, *eMaxPair = 0;
+  while (eLastHorz->NextInLML && IsHorizontal(*eLastHorz->NextInLML)) 
+    eLastHorz = eLastHorz->NextInLML;
+  if (!eLastHorz->NextInLML)
+    eMaxPair = GetMaximaPair(eLastHorz);
+
+  for (;;)
+  {
+    bool IsLastHorz = (horzEdge == eLastHorz);
+    TEdge* e = GetNextInAEL(horzEdge, dir);
+    while(e)
     {
-      //so far we're still in range of the horizontal edge
-      if( e == eMaxPair )
-      {
-        //horzEdge is evidently a maxima horizontal and we've arrived at its end.
-        if (dir == dLeftToRight)
-          IntersectEdges(horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr), ipNone);
-        else
-          IntersectEdges(e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), ipNone);
-        if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error");
-        return;
-      }
-      else if( NEAR_EQUAL(e->dx, HORIZONTAL) &&  !IsMinima(e) && !(e->xcurr > e->xtop) )
+      //Break if we've got to the end of an intermediate horizontal edge ...
+      //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal.
+      if (e->Curr.X == horzEdge->Top.X && horzEdge->NextInLML && 
+        e->Dx < horzEdge->NextInLML->Dx) break;
+
+      TEdge* eNext = GetNextInAEL(e, dir); //saves eNext for later
+
+      if ((dir == dLeftToRight && e->Curr.X <= horzRight) ||
+        (dir == dRightToLeft && e->Curr.X >= horzLeft))
       {
-        //An overlapping horizontal edge. Overlapping horizontal edges are
-        //processed as if layered with the current horizontal edge (horizEdge)
-        //being infinitesimally lower that the next (e). Therfore, we
-        //intersect with e only if e.xcurr is within the bounds of horzEdge ...
-        if( dir == dLeftToRight )
-          IntersectEdges( horzEdge , e, IntPoint(e->xcurr, horzEdge->ycurr),
-            (IsTopHorz( e->xcurr ))? ipLeft : ipBoth );
+        //so far we're still in range of the horizontal Edge  but make sure
+        //we're at the last of consec. horizontals when matching with eMaxPair
+        if(e == eMaxPair && IsLastHorz)
+        {
+          if (horzEdge->OutIdx >= 0 && horzEdge->WindDelta != 0) 
+            PrepareHorzJoins(horzEdge, isTopOfScanbeam);
+          if (dir == dLeftToRight)
+            IntersectEdges(horzEdge, e, e->Top);
+          else
+            IntersectEdges(e, horzEdge, e->Top);
+          if (eMaxPair->OutIdx >= 0) throw clipperException("ProcessHorizontal error");
+          return;
+        }
+        else if(dir == dLeftToRight)
+        {
+          IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
+          IntersectEdges(horzEdge, e, Pt, true);
+        }
         else
-          IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr),
-            (IsTopHorz( e->xcurr ))? ipRight : ipBoth );
+        {
+          IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
+          IntersectEdges( e, horzEdge, Pt, true);
+        }
+        SwapPositionsInAEL( horzEdge, e );
       }
-      else if( dir == dLeftToRight )
+      else if( (dir == dLeftToRight && e->Curr.X >= horzRight) ||
+       (dir == dRightToLeft && e->Curr.X <= horzLeft) ) break;
+      e = eNext;
+    } //end while
+
+    if (horzEdge->OutIdx >= 0 && horzEdge->WindDelta != 0)
+      PrepareHorzJoins(horzEdge, isTopOfScanbeam);
+
+    if (horzEdge->NextInLML && IsHorizontal(*horzEdge->NextInLML))
+    {
+      UpdateEdgeIntoAEL(horzEdge);
+      if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Bot);
+      GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
+    } else
+      break;
+  } //end for (;;)
+
+  if(horzEdge->NextInLML)
+  {
+    if(horzEdge->OutIdx >= 0)
+    {
+      OutPt* op1 = AddOutPt( horzEdge, horzEdge->Top);
+      UpdateEdgeIntoAEL(horzEdge);
+      if (horzEdge->WindDelta == 0) return;
+      //nb: HorzEdge is no longer horizontal here
+      TEdge* ePrev = horzEdge->PrevInAEL;
+      TEdge* eNext = horzEdge->NextInAEL;
+      if (ePrev && ePrev->Curr.X == horzEdge->Bot.X &&
+        ePrev->Curr.Y == horzEdge->Bot.Y && ePrev->WindDelta != 0 &&
+        (ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
+        SlopesEqual(*horzEdge, *ePrev, m_UseFullRange)))
       {
-        IntersectEdges( horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr),
-          (IsTopHorz( e->xcurr ))? ipLeft : ipBoth );
+        OutPt* op2 = AddOutPt(ePrev, horzEdge->Bot);
+        AddJoin(op1, op2, horzEdge->Top);
       }
-      else
+      else if (eNext && eNext->Curr.X == horzEdge->Bot.X &&
+        eNext->Curr.Y == horzEdge->Bot.Y && eNext->WindDelta != 0 &&
+        eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
+        SlopesEqual(*horzEdge, *eNext, m_UseFullRange))
       {
-        IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr),
-          (IsTopHorz( e->xcurr ))? ipRight : ipBoth );
+        OutPt* op2 = AddOutPt(eNext, horzEdge->Bot);
+        AddJoin(op1, op2, horzEdge->Top);
       }
-      SwapPositionsInAEL( horzEdge, e );
     }
-    else if( (dir == dLeftToRight && e->xcurr >= horzRight) ||
-     (dir == dRightToLeft && e->xcurr <= horzLeft) ) break;
-    e = eNext;
-  } //end while
-
-  if( horzEdge->nextInLML )
-  {
-    if( horzEdge->outIdx >= 0 )
-      AddOutPt( horzEdge, IntPoint(horzEdge->xtop, horzEdge->ytop));
-    UpdateEdgeIntoAEL( horzEdge );
+    else
+      UpdateEdgeIntoAEL(horzEdge); 
   }
-  else
+  else if (eMaxPair)
   {
-    if ( horzEdge->outIdx >= 0 )
-      IntersectEdges( horzEdge, eMaxPair,
-      IntPoint(horzEdge->xtop, horzEdge->ycurr), ipBoth);
-    if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error");
-    DeleteFromAEL(eMaxPair);
+    if (eMaxPair->OutIdx >= 0)
+    {
+      if (dir == dLeftToRight)
+        IntersectEdges(horzEdge, eMaxPair, horzEdge->Top); 
+      else
+        IntersectEdges(eMaxPair, horzEdge, horzEdge->Top);
+      if (eMaxPair->OutIdx >= 0)
+        throw clipperException("ProcessHorizontal error");
+    } else
+    {
+      DeleteFromAEL(horzEdge);
+      DeleteFromAEL(eMaxPair);
+    }
+  } else
+  {
+    if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Top);
     DeleteFromAEL(horzEdge);
   }
 }
@@ -2333,35 +2989,38 @@ void Clipper::ProcessHorizontal(TEdge *horzEdge)
 
 void Clipper::UpdateEdgeIntoAEL(TEdge *&e)
 {
-  if( !e->nextInLML ) throw
+  if( !e->NextInLML ) throw
     clipperException("UpdateEdgeIntoAEL: invalid call");
-  TEdge* AelPrev = e->prevInAEL;
-  TEdge* AelNext = e->nextInAEL;
-  e->nextInLML->outIdx = e->outIdx;
-  if( AelPrev ) AelPrev->nextInAEL = e->nextInLML;
-  else m_ActiveEdges = e->nextInLML;
-  if( AelNext ) AelNext->prevInAEL = e->nextInLML;
-  e->nextInLML->side = e->side;
-  e->nextInLML->windDelta = e->windDelta;
-  e->nextInLML->windCnt = e->windCnt;
-  e->nextInLML->windCnt2 = e->windCnt2;
-  e = e->nextInLML;
-  e->prevInAEL = AelPrev;
-  e->nextInAEL = AelNext;
-  if( !NEAR_EQUAL(e->dx, HORIZONTAL) ) InsertScanbeam( e->ytop );
+
+  e->NextInLML->OutIdx = e->OutIdx;
+  TEdge* AelPrev = e->PrevInAEL;
+  TEdge* AelNext = e->NextInAEL;
+  if (AelPrev) AelPrev->NextInAEL = e->NextInLML;
+  else m_ActiveEdges = e->NextInLML;
+  if (AelNext) AelNext->PrevInAEL = e->NextInLML;
+  e->NextInLML->Side = e->Side;
+  e->NextInLML->WindDelta = e->WindDelta;
+  e->NextInLML->WindCnt = e->WindCnt;
+  e->NextInLML->WindCnt2 = e->WindCnt2;
+  e = e->NextInLML;
+  e->Curr = e->Bot;
+  e->PrevInAEL = AelPrev;
+  e->NextInAEL = AelNext;
+  if (!IsHorizontal(*e)) InsertScanbeam(e->Top.Y);
 }
 //------------------------------------------------------------------------------
 
-bool Clipper::ProcessIntersections(const long64 botY, const long64 topY)
+bool Clipper::ProcessIntersections(const cInt botY, const cInt topY)
 {
   if( !m_ActiveEdges ) return true;
   try {
     BuildIntersectList(botY, topY);
     if (!m_IntersectNodes) return true;
-    if (!m_IntersectNodes->next || FixupIntersectionOrder()) ProcessIntersectList();
+    if (!m_IntersectNodes->Next || FixupIntersectionOrder()) ProcessIntersectList();
     else return false;
   }
-  catch(...) {
+  catch(...) 
+  {
     m_SortedEdges = 0;
     DisposeIntersectNodes();
     throw clipperException("ProcessIntersections error");
@@ -2375,14 +3034,14 @@ void Clipper::DisposeIntersectNodes()
 {
   while ( m_IntersectNodes )
   {
-    IntersectNode* iNode = m_IntersectNodes->next;
+    IntersectNode* iNode = m_IntersectNodes->Next;
     delete m_IntersectNodes;
     m_IntersectNodes = iNode;
   }
 }
 //------------------------------------------------------------------------------
 
-void Clipper::BuildIntersectList(const long64 botY, const long64 topY)
+void Clipper::BuildIntersectList(const cInt botY, const cInt topY)
 {
   if ( !m_ActiveEdges ) return;
 
@@ -2391,65 +3050,68 @@ void Clipper::BuildIntersectList(const long64 botY, const long64 topY)
   m_SortedEdges = e;
   while( e )
   {
-    e->prevInSEL = e->prevInAEL;
-    e->nextInSEL = e->nextInAEL;
-    e->xcurr = TopX( *e, topY );
-    e = e->nextInAEL;
+    e->PrevInSEL = e->PrevInAEL;
+    e->NextInSEL = e->NextInAEL;
+    e->Curr.X = TopX( *e, topY );
+    e = e->NextInAEL;
   }
 
   //bubblesort ...
-  bool isModified = true;
-  while( isModified && m_SortedEdges )
+  bool isModified;
+  do
   {
     isModified = false;
     e = m_SortedEdges;
-    while( e->nextInSEL )
+    while( e->NextInSEL )
     {
-      TEdge *eNext = e->nextInSEL;
-      IntPoint pt;
-      if(e->xcurr > eNext->xcurr)
+      TEdge *eNext = e->NextInSEL;
+      IntPoint Pt;
+      if(e->Curr.X > eNext->Curr.X)
       {
-        if (!IntersectPoint(*e, *eNext, pt, m_UseFullRange) && e->xcurr > eNext->xcurr +1)
+        if (!IntersectPoint(*e, *eNext, Pt, m_UseFullRange) && e->Curr.X > eNext->Curr.X +1)
           throw clipperException("Intersection error");
-        if (pt.Y > botY)
+        if (Pt.Y > botY)
         {
-            pt.Y = botY;
-            pt.X = TopX(*e, pt.Y);
+            Pt.Y = botY;
+            if (std::fabs(e->Dx) > std::fabs(eNext->Dx))
+              Pt.X = TopX(*eNext, botY); else
+              Pt.X = TopX(*e, botY);
         }
-        AddIntersectNode( e, eNext, pt );
+        InsertIntersectNode( e, eNext, Pt );
         SwapPositionsInSEL(e, eNext);
         isModified = true;
       }
       else
         e = eNext;
     }
-    if( e->prevInSEL ) e->prevInSEL->nextInSEL = 0;
+    if( e->PrevInSEL ) e->PrevInSEL->NextInSEL = 0;
     else break;
   }
-  m_SortedEdges = 0;
+  while ( isModified );
+  m_SortedEdges = 0; //important
 }
 //------------------------------------------------------------------------------
 
-void Clipper::AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt)
+void Clipper::InsertIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &Pt)
 {
   IntersectNode* newNode = new IntersectNode;
-  newNode->edge1 = e1;
-  newNode->edge2 = e2;
-  newNode->pt = pt;
-  newNode->next = 0;
+  newNode->Edge1 = e1;
+  newNode->Edge2 = e2;
+  newNode->Pt = Pt;
+  newNode->Next = 0;
   if( !m_IntersectNodes ) m_IntersectNodes = newNode;
-  else if(newNode->pt.Y > m_IntersectNodes->pt.Y )
+  else if(newNode->Pt.Y > m_IntersectNodes->Pt.Y )
   {
-    newNode->next = m_IntersectNodes;
+    newNode->Next = m_IntersectNodes;
     m_IntersectNodes = newNode;
   }
   else
   {
     IntersectNode* iNode = m_IntersectNodes;
-    while(iNode->next  && newNode->pt.Y <= iNode->next->pt.Y)
-        iNode = iNode->next;
-    newNode->next = iNode->next;
-    iNode->next = newNode;
+    while(iNode->Next  && newNode->Pt.Y <= iNode->Next->Pt.Y)
+      iNode = iNode->Next;
+    newNode->Next = iNode->Next;
+    iNode->Next = newNode;
   }
 }
 //------------------------------------------------------------------------------
@@ -2458,11 +3120,11 @@ void Clipper::ProcessIntersectList()
 {
   while( m_IntersectNodes )
   {
-    IntersectNode* iNode = m_IntersectNodes->next;
+    IntersectNode* iNode = m_IntersectNodes->Next;
     {
-      IntersectEdges( m_IntersectNodes->edge1 ,
-        m_IntersectNodes->edge2 , m_IntersectNodes->pt, ipBoth );
-      SwapPositionsInAEL( m_IntersectNodes->edge1 , m_IntersectNodes->edge2 );
+      IntersectEdges( m_IntersectNodes->Edge1 ,
+        m_IntersectNodes->Edge2 , m_IntersectNodes->Pt, true);
+      SwapPositionsInAEL( m_IntersectNodes->Edge1 , m_IntersectNodes->Edge2 );
     }
     delete m_IntersectNodes;
     m_IntersectNodes = iNode;
@@ -2470,123 +3132,147 @@ void Clipper::ProcessIntersectList()
 }
 //------------------------------------------------------------------------------
 
-void Clipper::DoMaxima(TEdge *e, long64 topY)
+void Clipper::DoMaxima(TEdge *e)
 {
   TEdge* eMaxPair = GetMaximaPair(e);
-  long64 X = e->xtop;
-  TEdge* eNext = e->nextInAEL;
-  while( eNext != eMaxPair )
+  if (!eMaxPair)
+  {
+    if (e->OutIdx >= 0)
+      AddOutPt(e, e->Top);
+    DeleteFromAEL(e);
+    return;
+  }
+
+  TEdge* eNext = e->NextInAEL;
+  while(eNext && eNext != eMaxPair)
   {
-    if (!eNext) throw clipperException("DoMaxima error");
-    IntersectEdges( e, eNext, IntPoint(X, topY), ipBoth );
+    IntersectEdges(e, eNext, e->Top, true);
     SwapPositionsInAEL(e, eNext);
-    eNext = e->nextInAEL;
+    eNext = e->NextInAEL;
   }
-  if( e->outIdx < 0 && eMaxPair->outIdx < 0 )
+
+  if(e->OutIdx == Unassigned && eMaxPair->OutIdx == Unassigned)
   {
-    DeleteFromAEL( e );
-    DeleteFromAEL( eMaxPair );
+    DeleteFromAEL(e);
+    DeleteFromAEL(eMaxPair);
   }
-  else if( e->outIdx >= 0 && eMaxPair->outIdx >= 0 )
+  else if( e->OutIdx >= 0 && eMaxPair->OutIdx >= 0 )
   {
-    IntersectEdges( e, eMaxPair, IntPoint(X, topY), ipNone );
+    IntersectEdges( e, eMaxPair, e->Top);
   }
+#ifdef use_lines
+  else if (e->WindDelta == 0)
+  {
+    if (e->OutIdx >= 0) 
+    {
+      AddOutPt(e, e->Top);
+      e->OutIdx = Unassigned;
+    }
+    DeleteFromAEL(e);
+
+    if (eMaxPair->OutIdx >= 0)
+    {
+      AddOutPt(eMaxPair, e->Top);
+      eMaxPair->OutIdx = Unassigned;
+    }
+    DeleteFromAEL(eMaxPair);
+  } 
+#endif
   else throw clipperException("DoMaxima error");
 }
 //------------------------------------------------------------------------------
 
-void Clipper::ProcessEdgesAtTopOfScanbeam(const long64 topY)
+void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY)
 {
   TEdge* e = m_ActiveEdges;
   while( e )
   {
     //1. process maxima, treating them as if they're 'bent' horizontal edges,
     //   but exclude maxima with horizontal edges. nb: e can't be a horizontal.
-    if( IsMaxima(e, topY) && !NEAR_EQUAL(GetMaximaPair(e)->dx, HORIZONTAL) )
+    bool IsMaximaEdge = IsMaxima(e, topY);
+
+    if(IsMaximaEdge)
     {
-      //'e' might be removed from AEL, as may any following edges so ...
-      TEdge* ePrev = e->prevInAEL;
-      DoMaxima(e, topY);
+      TEdge* eMaxPair = GetMaximaPair(e);
+      IsMaximaEdge = (!eMaxPair || !IsHorizontal(*eMaxPair));
+    }
+
+    if(IsMaximaEdge)
+    {
+      TEdge* ePrev = e->PrevInAEL;
+      DoMaxima(e);
       if( !ePrev ) e = m_ActiveEdges;
-      else e = ePrev->nextInAEL;
+      else e = ePrev->NextInAEL;
     }
     else
     {
-      bool intermediateVert = IsIntermediate(e, topY);
-      //2. promote horizontal edges, otherwise update xcurr and ycurr ...
-      if (intermediateVert && NEAR_EQUAL(e->nextInLML->dx, HORIZONTAL) )
+      //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ...
+      if (IsIntermediate(e, topY) && IsHorizontal(*e->NextInLML))
       {
-        if (e->outIdx >= 0)
-        {
-          AddOutPt(e, IntPoint(e->xtop, e->ytop));
-
-          for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i)
-          {
-            IntPoint pt, pt2;
-            HorzJoinRec* hj = m_HorizJoins[i];
-            if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot),
-              IntPoint(hj->edge->xtop, hj->edge->ytop),
-              IntPoint(e->nextInLML->xbot, e->nextInLML->ybot),
-              IntPoint(e->nextInLML->xtop, e->nextInLML->ytop), pt, pt2))
-                AddJoin(hj->edge, e->nextInLML, hj->savedIdx, e->outIdx);
-          }
-
-          AddHorzJoin(e->nextInLML, e->outIdx);
-        }
         UpdateEdgeIntoAEL(e);
+        if (e->OutIdx >= 0)
+          AddOutPt(e, e->Bot);
         AddEdgeToSEL(e);
-      } else
+      } 
+      else
       {
-        e->xcurr = TopX( *e, topY );
-        e->ycurr = topY;
+        e->Curr.X = TopX( *e, topY );
+        e->Curr.Y = topY;
+      }
 
-        if (m_ForceSimple && e->prevInAEL &&
-          e->prevInAEL->xcurr == e->xcurr && 
-          e->outIdx >= 0 && e->prevInAEL->outIdx >= 0)
+      if (m_StrictSimple)
+      {  
+        TEdge* ePrev = e->PrevInAEL;
+        if ((e->OutIdx >= 0) && (e->WindDelta != 0) && ePrev && (ePrev->OutIdx >= 0) &&
+          (ePrev->Curr.X == e->Curr.X) && (ePrev->WindDelta != 0))
         {
-          if (intermediateVert)             
-            AddOutPt(e->prevInAEL, IntPoint(e->xcurr, topY));
-          else
-            AddOutPt(e, IntPoint(e->xcurr, topY));
+          OutPt* op = AddOutPt(ePrev, e->Curr);
+          OutPt* op2 = AddOutPt(e, e->Curr);
+          AddJoin(op, op2, e->Curr); //StrictlySimple (type-3) join
         }
       }
-      e = e->nextInAEL;
+
+      e = e->NextInAEL;
     }
   }
 
-  //3. Process horizontals at the top of the scanbeam ...
-  ProcessHorizontals();
+  //3. Process horizontals at the Top of the scanbeam ...
+  ProcessHorizontals(true);
 
   //4. Promote intermediate vertices ...
   e = m_ActiveEdges;
-  while( e )
+  while(e)
   {
-    if( IsIntermediate( e, topY ) )
+    if(IsIntermediate(e, topY))
     {
-      if( e->outIdx >= 0 ) AddOutPt(e, IntPoint(e->xtop,e->ytop));
+      OutPt* op = 0;
+      if( e->OutIdx >= 0 ) 
+        op = AddOutPt(e, e->Top);
       UpdateEdgeIntoAEL(e);
 
       //if output polygons share an edge, they'll need joining later ...
-      TEdge* ePrev = e->prevInAEL;
-      TEdge* eNext = e->nextInAEL;
-      if (ePrev && ePrev->xcurr == e->xbot &&
-        ePrev->ycurr == e->ybot && e->outIdx >= 0 &&
-        ePrev->outIdx >= 0 && ePrev->ycurr > ePrev->ytop &&
-        SlopesEqual(*e, *ePrev, m_UseFullRange))
+      TEdge* ePrev = e->PrevInAEL;
+      TEdge* eNext = e->NextInAEL;
+      if (ePrev && ePrev->Curr.X == e->Bot.X &&
+        ePrev->Curr.Y == e->Bot.Y && op &&
+        ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
+        SlopesEqual(*e, *ePrev, m_UseFullRange) &&
+        (e->WindDelta != 0) && (ePrev->WindDelta != 0))
       {
-        AddOutPt(ePrev, IntPoint(e->xbot, e->ybot));
-        AddJoin(e, ePrev);
+        OutPt* op2 = AddOutPt(ePrev, e->Bot);
+        AddJoin(op, op2, e->Top);
       }
-      else if (eNext && eNext->xcurr == e->xbot &&
-        eNext->ycurr == e->ybot && e->outIdx >= 0 &&
-        eNext->outIdx >= 0 && eNext->ycurr > eNext->ytop &&
-        SlopesEqual(*e, *eNext, m_UseFullRange))
+      else if (eNext && eNext->Curr.X == e->Bot.X &&
+        eNext->Curr.Y == e->Bot.Y && op &&
+        eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
+        SlopesEqual(*e, *eNext, m_UseFullRange) &&
+        (e->WindDelta != 0) && (eNext->WindDelta != 0))
       {
-        AddOutPt(eNext, IntPoint(e->xbot, e->ybot));
-        AddJoin(e, eNext);
+        OutPt* op2 = AddOutPt(eNext, e->Bot);
+        AddJoin(op, op2, e->Top);
       }
     }
-    e = e->nextInAEL;
+    e = e->NextInAEL;
   }
 }
 //------------------------------------------------------------------------------
@@ -2596,72 +3282,75 @@ void Clipper::FixupOutPolygon(OutRec &outrec)
   //FixupOutPolygon() - removes duplicate points and simplifies consecutive
   //parallel edges by removing the middle vertex.
   OutPt *lastOK = 0;
-  outrec.bottomPt = 0;
-  OutPt *pp = outrec.pts;
+  outrec.BottomPt = 0;
+  OutPt *pp = outrec.Pts;
 
   for (;;)
   {
-    if (pp->prev == pp || pp->prev == pp->next )
+    if (pp->Prev == pp || pp->Prev == pp->Next )
     {
       DisposeOutPts(pp);
-      outrec.pts = 0;
+      outrec.Pts = 0;
       return;
     }
-    //test for duplicate points and for same slope (cross-product) ...
-    if ( PointsEqual(pp->pt, pp->next->pt) ||
-      SlopesEqual(pp->prev->pt, pp->pt, pp->next->pt, m_UseFullRange) )
+
+    //test for duplicate points and collinear edges ...
+    if ((pp->Pt == pp->Next->Pt) || (pp->Pt == pp->Prev->Pt) || 
+      (SlopesEqual(pp->Prev->Pt, pp->Pt, pp->Next->Pt, m_UseFullRange) &&
+      (!m_PreserveCollinear || 
+      !Pt2IsBetweenPt1AndPt3(pp->Prev->Pt, pp->Pt, pp->Next->Pt))))
     {
       lastOK = 0;
       OutPt *tmp = pp;
-      pp->prev->next = pp->next;
-      pp->next->prev = pp->prev;
-      pp = pp->prev;
+      pp->Prev->Next = pp->Next;
+      pp->Next->Prev = pp->Prev;
+      pp = pp->Prev;
       delete tmp;
     }
     else if (pp == lastOK) break;
     else
     {
       if (!lastOK) lastOK = pp;
-      pp = pp->next;
+      pp = pp->Next;
     }
   }
-  outrec.pts = pp;
+  outrec.Pts = pp;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::BuildResult(Polygons &polys)
+int PointCount(OutPt *Pts)
 {
-  polys.reserve(m_PolyOuts.size());
-  for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
-  {
-    if (m_PolyOuts[i]->pts)
+    if (!Pts) return 0;
+    int result = 0;
+    OutPt* p = Pts;
+    do
     {
-      Polygon pg;
-      OutPt* p = m_PolyOuts[i]->pts;
-      do
-      {
-        pg.push_back(p->pt);
-        p = p->prev;
-      } while (p != m_PolyOuts[i]->pts);
-      if (pg.size() > 2) 
-        polys.push_back(pg);
+        result++;
+        p = p->Next;
     }
-  }
+    while (p != Pts);
+    return result;
 }
 //------------------------------------------------------------------------------
 
-int PointCount(OutPt *pts)
+void Clipper::BuildResult(Paths &polys)
 {
-    if (!pts) return 0;
-    int result = 0;
-    OutPt* p = pts;
-    do
+  polys.reserve(m_PolyOuts.size());
+  for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+  {
+    if (!m_PolyOuts[i]->Pts) continue;
+    Path pg;
+    OutPt* p = m_PolyOuts[i]->Pts->Prev;
+    int cnt = PointCount(p);
+    if (cnt < 2) continue;
+    pg.reserve(cnt);
+    for (int i = 0; i < cnt; ++i)
     {
-        result++;
-        p = p->next;
+      pg.push_back(p->Pt);
+      p = p->Prev;
     }
-    while (p != pts);
-    return result;
+    polys.push_back(pg);
+  }
 }
 //------------------------------------------------------------------------------
 
@@ -2673,21 +3362,21 @@ void Clipper::BuildResult2(PolyTree& polytree)
     for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++)
     {
         OutRec* outRec = m_PolyOuts[i];
-        int cnt = PointCount(outRec->pts);
-        if (cnt < 3) continue;
+        int cnt = PointCount(outRec->Pts);
+        if ((outRec->IsOpen && cnt < 2) || (!outRec->IsOpen && cnt < 3)) continue;
         FixHoleLinkage(*outRec);
         PolyNode* pn = new PolyNode();
         //nb: polytree takes ownership of all the PolyNodes
         polytree.AllNodes.push_back(pn);
-        outRec->polyNode = pn;
+        outRec->PolyNd = pn;
         pn->Parent = 0;
         pn->Index = 0;
         pn->Contour.reserve(cnt);
-        OutPt *op = outRec->pts;
+        OutPt *op = outRec->Pts->Prev;
         for (int j = 0; j < cnt; j++)
         {
-            pn->Contour.push_back(op->pt);
-            op = op->prev;
+            pn->Contour.push_back(op->Pt);
+            op = op->Prev;
         }
     }
 
@@ -2696,11 +3385,16 @@ void Clipper::BuildResult2(PolyTree& polytree)
     for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++)
     {
         OutRec* outRec = m_PolyOuts[i];
-        if (!outRec->polyNode) continue;
-        if (outRec->FirstLeft) 
-          outRec->FirstLeft->polyNode->AddChild(*outRec->polyNode);
+        if (!outRec->PolyNd) continue;
+        if (outRec->IsOpen) 
+        {
+          outRec->PolyNd->m_IsOpen = true;
+          polytree.AddChild(*outRec->PolyNd);
+        }
+        else if (outRec->FirstLeft) 
+          outRec->FirstLeft->PolyNd->AddChild(*outRec->PolyNd);
         else
-          polytree.AddChild(*outRec->polyNode);
+          polytree.AddChild(*outRec->PolyNd);
     }
 }
 //------------------------------------------------------------------------------
@@ -2709,25 +3403,25 @@ void SwapIntersectNodes(IntersectNode &int1, IntersectNode &int2)
 {
   //just swap the contents (because fIntersectNodes is a single-linked-list)
   IntersectNode inode = int1; //gets a copy of Int1
-  int1.edge1 = int2.edge1;
-  int1.edge2 = int2.edge2;
-  int1.pt = int2.pt;
-  int2.edge1 = inode.edge1;
-  int2.edge2 = inode.edge2;
-  int2.pt = inode.pt;
+  int1.Edge1 = int2.Edge1;
+  int1.Edge2 = int2.Edge2;
+  int1.Pt = int2.Pt;
+  int2.Edge1 = inode.Edge1;
+  int2.Edge2 = inode.Edge2;
+  int2.Pt = inode.Pt;
 }
 //------------------------------------------------------------------------------
 
 inline bool EdgesAdjacent(const IntersectNode &inode)
 {
-  return (inode.edge1->nextInSEL == inode.edge2) ||
-    (inode.edge1->prevInSEL == inode.edge2);
+  return (inode.Edge1->NextInSEL == inode.Edge2) ||
+    (inode.Edge1->PrevInSEL == inode.Edge2);
 }
 //------------------------------------------------------------------------------
 
 bool Clipper::FixupIntersectionOrder()
 {
-  //pre-condition: intersections are sorted bottom-most (then left-most) first.
+  //pre-condition: intersections are sorted Bottom-most (then Left-most) first.
   //Now it's crucial that intersections are made only between adjacent edges,
   //so to ensure this the order of intersections may need adjusting ...
   IntersectNode *inode = m_IntersectNodes;  
@@ -2736,156 +3430,373 @@ bool Clipper::FixupIntersectionOrder()
   {
     if (!EdgesAdjacent(*inode))
     {
-      IntersectNode *nextNode = inode->next;
+      IntersectNode *nextNode = inode->Next;
       while (nextNode && !EdgesAdjacent(*nextNode))
-        nextNode = nextNode->next;
+        nextNode = nextNode->Next;
       if (!nextNode) 
         return false;
       SwapIntersectNodes(*inode, *nextNode);
     }
-    SwapPositionsInSEL(inode->edge1, inode->edge2);
-    inode = inode->next;
+    SwapPositionsInSEL(inode->Edge1, inode->Edge2);
+    inode = inode->Next;
   }
   return true;
 }
 //------------------------------------------------------------------------------
 
-bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2)
+inline bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2)
 {
-  if (e2.xcurr == e1.xcurr) 
+  if (e2.Curr.X == e1.Curr.X) 
   {
-    if (e2.ytop > e1.ytop)
-      return e2.xtop < TopX(e1, e2.ytop); 
-      else return e1.xtop > TopX(e2, e1.ytop);
+    if (e2.Top.Y > e1.Top.Y)
+      return e2.Top.X < TopX(e1, e2.Top.Y); 
+      else return e1.Top.X > TopX(e2, e1.Top.Y);
   } 
-  else return e2.xcurr < e1.xcurr;
+  else return e2.Curr.X < e1.Curr.X;
 }
 //------------------------------------------------------------------------------
 
-void Clipper::InsertEdgeIntoAEL(TEdge *edge)
+bool GetOverlap(const cInt a1, const cInt a2, const cInt b1, const cInt b2, 
+    cInt& Left, cInt& Right)
 {
-  edge->prevInAEL = 0;
-  edge->nextInAEL = 0;
-  if( !m_ActiveEdges )
+  if (a1 < a2)
   {
-    m_ActiveEdges = edge;
-  }
-  else if( E2InsertsBeforeE1(*m_ActiveEdges, *edge) )
-  {
-    edge->nextInAEL = m_ActiveEdges;
-    m_ActiveEdges->prevInAEL = edge;
-    m_ActiveEdges = edge;
-  } else
+    if (b1 < b2) {Left = std::max(a1,b1); Right = std::min(a2,b2);}
+    else {Left = std::max(a1,b2); Right = std::min(a2,b1);}
+  } 
+  else
   {
-    TEdge* e = m_ActiveEdges;
-    while( e->nextInAEL  && !E2InsertsBeforeE1(*e->nextInAEL , *edge) )
-      e = e->nextInAEL;
-    edge->nextInAEL = e->nextInAEL;
-    if( e->nextInAEL ) e->nextInAEL->prevInAEL = edge;
-    edge->prevInAEL = e;
-    e->nextInAEL = edge;
+    if (b1 < b2) {Left = std::max(a2,b1); Right = std::min(a1,b2);}
+    else {Left = std::max(a2,b2); Right = std::min(a1,b1);}
   }
+  return Left < Right;
 }
-//----------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-bool Clipper::JoinPoints(const JoinRec *j, OutPt *&p1, OutPt *&p2)
-{
-  OutRec *outRec1 = m_PolyOuts[j->poly1Idx];
-  OutRec *outRec2 = m_PolyOuts[j->poly2Idx];
-  if (!outRec1 || !outRec2)  return false;  
-  OutPt *pp1a = outRec1->pts;
-  OutPt *pp2a = outRec2->pts;
-  IntPoint pt1 = j->pt2a, pt2 = j->pt2b;
-  IntPoint pt3 = j->pt1a, pt4 = j->pt1b;
-  if (!FindSegment(pp1a, m_UseFullRange, pt1, pt2)) return false;
-  if (outRec1 == outRec2)
-  {
-    //we're searching the same polygon for overlapping segments so
-    //segment 2 mustn't be the same as segment 1 ...
-    pp2a = pp1a->next;
-    if (!FindSegment(pp2a, m_UseFullRange, pt3, pt4) || (pp2a == pp1a)) 
-      return false;
-  }
-  else if (!FindSegment(pp2a, m_UseFullRange, pt3, pt4)) return false;
-
-  if (!GetOverlapSegment(pt1, pt2, pt3, pt4, pt1, pt2)) return false;
-
-  OutPt *p3, *p4, *prev = pp1a->prev;
-  //get p1 & p2 polypts - the overlap start & endpoints on poly1
-  if (PointsEqual(pp1a->pt, pt1)) p1 = pp1a;
-  else if (PointsEqual(prev->pt, pt1)) p1 = prev;
-  else p1 = InsertPolyPtBetween(pp1a, prev, pt1);
-
-  if (PointsEqual(pp1a->pt, pt2)) p2 = pp1a;
-  else if (PointsEqual(prev->pt, pt2)) p2 = prev;
-  else if ((p1 == pp1a) || (p1 == prev))
-    p2 = InsertPolyPtBetween(pp1a, prev, pt2);
-  else if (Pt3IsBetweenPt1AndPt2(pp1a->pt, p1->pt, pt2))
-    p2 = InsertPolyPtBetween(pp1a, p1, pt2); else
-    p2 = InsertPolyPtBetween(p1, prev, pt2);
-
-  //get p3 & p4 polypts - the overlap start & endpoints on poly2
-  prev = pp2a->prev;
-  if (PointsEqual(pp2a->pt, pt1)) p3 = pp2a;
-  else if (PointsEqual(prev->pt, pt1)) p3 = prev;
-  else p3 = InsertPolyPtBetween(pp2a, prev, pt1);
-
-  if (PointsEqual(pp2a->pt, pt2)) p4 = pp2a;
-  else if (PointsEqual(prev->pt, pt2)) p4 = prev;
-  else if ((p3 == pp2a) || (p3 == prev))
-    p4 = InsertPolyPtBetween(pp2a, prev, pt2);
-  else if (Pt3IsBetweenPt1AndPt2(pp2a->pt, p3->pt, pt2))
-    p4 = InsertPolyPtBetween(pp2a, p3, pt2); else
-    p4 = InsertPolyPtBetween(p3, prev, pt2);
-
-  //p1.pt == p3.pt and p2.pt == p4.pt so join p1 to p3 and p2 to p4 ...
-  if (p1->next == p2 && p3->prev == p4)
-  {
-    p1->next = p3;
-    p3->prev = p1;
-    p2->prev = p4;
-    p4->next = p2;
-    return true;
-  }
-  else if (p1->prev == p2 && p3->next == p4)
+inline void UpdateOutPtIdxs(OutRec& outrec)
+{  
+  OutPt* op = outrec.Pts;
+  do
   {
-    p1->prev = p3;
-    p3->next = p1;
-    p2->next = p4;
-    p4->prev = p2;
-    return true;
+    op->Idx = outrec.Idx;
+    op = op->Prev;
   }
-  else
-    return false; //an orientation is probably wrong
+  while(op != outrec.Pts);
 }
-//----------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-void Clipper::FixupJoinRecs(JoinRec *j, OutPt *pt, unsigned startIdx)
+void Clipper::InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge)
 {
-  for (JoinList::size_type k = startIdx; k < m_Joins.size(); k++)
+  if(!m_ActiveEdges)
+  {
+    edge->PrevInAEL = 0;
+    edge->NextInAEL = 0;
+    m_ActiveEdges = edge;
+  }
+  else if(!startEdge && E2InsertsBeforeE1(*m_ActiveEdges, *edge))
+  {
+      edge->PrevInAEL = 0;
+      edge->NextInAEL = m_ActiveEdges;
+      m_ActiveEdges->PrevInAEL = edge;
+      m_ActiveEdges = edge;
+  } 
+  else
+  {
+    if(!startEdge) startEdge = m_ActiveEdges;
+    while(startEdge->NextInAEL  && 
+      !E2InsertsBeforeE1(*startEdge->NextInAEL , *edge))
+        startEdge = startEdge->NextInAEL;
+    edge->NextInAEL = startEdge->NextInAEL;
+    if(startEdge->NextInAEL) startEdge->NextInAEL->PrevInAEL = edge;
+    edge->PrevInAEL = startEdge;
+    startEdge->NextInAEL = edge;
+  }
+}
+//----------------------------------------------------------------------
+
+OutPt* DupOutPt(OutPt* outPt, bool InsertAfter)
+{
+  OutPt* result = new OutPt;
+  result->Pt = outPt->Pt;
+  result->Idx = outPt->Idx;
+  if (InsertAfter)
+  {
+    result->Next = outPt->Next;
+    result->Prev = outPt;
+    outPt->Next->Prev = result;
+    outPt->Next = result;
+  } 
+  else
+  {
+    result->Prev = outPt->Prev;
+    result->Next = outPt;
+    outPt->Prev->Next = result;
+    outPt->Prev = result;
+  }
+  return result;
+}
+//------------------------------------------------------------------------------
+
+bool JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b,
+  const IntPoint Pt, bool DiscardLeft)
+{
+  Direction Dir1 = (op1->Pt.X > op1b->Pt.X ? dRightToLeft : dLeftToRight);
+  Direction Dir2 = (op2->Pt.X > op2b->Pt.X ? dRightToLeft : dLeftToRight);
+  if (Dir1 == Dir2) return false;
+
+  //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we
+  //want Op1b to be on the Right. (And likewise with Op2 and Op2b.)
+  //So, to facilitate this while inserting Op1b and Op2b ...
+  //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b,
+  //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.)
+  if (Dir1 == dLeftToRight) 
+  {
+    while (op1->Next->Pt.X <= Pt.X && 
+      op1->Next->Pt.X >= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)  
+        op1 = op1->Next;
+    if (DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
+    op1b = DupOutPt(op1, !DiscardLeft);
+    if (op1b->Pt != Pt) 
+    {
+      op1 = op1b;
+      op1->Pt = Pt;
+      op1b = DupOutPt(op1, !DiscardLeft);
+    }
+  } 
+  else
+  {
+    while (op1->Next->Pt.X >= Pt.X && 
+      op1->Next->Pt.X <= op1->Pt.X && op1->Next->Pt.Y == Pt.Y) 
+        op1 = op1->Next;
+    if (!DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
+    op1b = DupOutPt(op1, DiscardLeft);
+    if (op1b->Pt != Pt)
+    {
+      op1 = op1b;
+      op1->Pt = Pt;
+      op1b = DupOutPt(op1, DiscardLeft);
+    }
+  }
+
+  if (Dir2 == dLeftToRight)
+  {
+    while (op2->Next->Pt.X <= Pt.X && 
+      op2->Next->Pt.X >= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)
+        op2 = op2->Next;
+    if (DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
+    op2b = DupOutPt(op2, !DiscardLeft);
+    if (op2b->Pt != Pt)
+    {
+      op2 = op2b;
+      op2->Pt = Pt;
+      op2b = DupOutPt(op2, !DiscardLeft);
+    };
+  } else
+  {
+    while (op2->Next->Pt.X >= Pt.X && 
+      op2->Next->Pt.X <= op2->Pt.X && op2->Next->Pt.Y == Pt.Y) 
+        op2 = op2->Next;
+    if (!DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
+    op2b = DupOutPt(op2, DiscardLeft);
+    if (op2b->Pt != Pt)
+    {
+      op2 = op2b;
+      op2->Pt = Pt;
+      op2b = DupOutPt(op2, DiscardLeft);
+    };
+  };
+
+  if ((Dir1 == dLeftToRight) == DiscardLeft)
+  {
+    op1->Prev = op2;
+    op2->Next = op1;
+    op1b->Next = op2b;
+    op2b->Prev = op1b;
+  }
+  else
+  {
+    op1->Next = op2;
+    op2->Prev = op1;
+    op1b->Prev = op2b;
+    op2b->Next = op1b;
+  }
+  return true;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::JoinPoints(const Join *j, OutPt *&p1, OutPt *&p2)
+{
+  OutRec* outRec1 = GetOutRec(j->OutPt1->Idx);
+  OutRec* outRec2 = GetOutRec(j->OutPt2->Idx);
+  OutPt *op1 = j->OutPt1, *op1b;
+  OutPt *op2 = j->OutPt2, *op2b;
+
+  //There are 3 kinds of joins for output polygons ...
+  //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are a vertices anywhere
+  //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal).
+  //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same
+  //location at the Bottom of the overlapping segment (& Join.OffPt is above).
+  //3. StrictSimple joins where edges touch but are not collinear and where
+  //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point.
+  bool isHorizontal = (j->OutPt1->Pt.Y == j->OffPt.Y);
+
+  if (isHorizontal  && (j->OffPt == j->OutPt1->Pt) &&
+  (j->OffPt == j->OutPt2->Pt))
+  {
+    //Strictly Simple join ...
+    op1b = j->OutPt1->Next;
+    while (op1b != op1 && (op1b->Pt == j->OffPt)) 
+      op1b = op1b->Next;
+    bool reverse1 = (op1b->Pt.Y > j->OffPt.Y);
+    op2b = j->OutPt2->Next;
+    while (op2b != op2 && (op2b->Pt == j->OffPt)) 
+      op2b = op2b->Next;
+    bool reverse2 = (op2b->Pt.Y > j->OffPt.Y);
+    if (reverse1 == reverse2) return false;
+    if (reverse1)
+    {
+      op1b = DupOutPt(op1, false);
+      op2b = DupOutPt(op2, true);
+      op1->Prev = op2;
+      op2->Next = op1;
+      op1b->Next = op2b;
+      op2b->Prev = op1b;
+      p1 = op1;
+      p2 = op1b;
+      return true;
+    } else
+    {
+      op1b = DupOutPt(op1, true);
+      op2b = DupOutPt(op2, false);
+      op1->Next = op2;
+      op2->Prev = op1;
+      op1b->Prev = op2b;
+      op2b->Next = op1b;
+      p1 = op1;
+      p2 = op1b;
+      return true;
+    }
+  } 
+  else if (isHorizontal)
+  {
+    //treat horizontal joins differently to non-horizontal joins since with
+    //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt
+    //may be anywhere along the horizontal edge.
+    op1b = op1;
+    while (op1->Prev->Pt.Y == op1->Pt.Y && op1->Prev != op1b && op1->Prev != op2)
+      op1 = op1->Prev;
+    while (op1b->Next->Pt.Y == op1b->Pt.Y && op1b->Next != op1 && op1b->Next != op2)
+      op1b = op1b->Next;
+    if (op1b->Next == op1 || op1b->Next == op2) return false; //a flat 'polygon'
+
+    op2b = op2;
+    while (op2->Prev->Pt.Y == op2->Pt.Y && op2->Prev != op2b && op2->Prev != op1b)
+      op2 = op2->Prev;
+    while (op2b->Next->Pt.Y == op2b->Pt.Y && op2b->Next != op2 && op2b->Next != op1)
+      op2b = op2b->Next;
+    if (op2b->Next == op2 || op2b->Next == op1) return false; //a flat 'polygon'
+
+    cInt Left, Right;
+    //Op1 --> Op1b & Op2 --> Op2b are the extremites of the horizontal edges
+    if (!GetOverlap(op1->Pt.X, op1b->Pt.X, op2->Pt.X, op2b->Pt.X, Left, Right))
+      return false;
+
+    //DiscardLeftSide: when overlapping edges are joined, a spike will created
+    //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up
+    //on the discard Side as either may still be needed for other joins ...
+    IntPoint Pt;
+    bool DiscardLeftSide;
+    if (op1->Pt.X >= Left && op1->Pt.X <= Right) 
+    {
+      Pt = op1->Pt; DiscardLeftSide = (op1->Pt.X > op1b->Pt.X);
+    } 
+    else if (op2->Pt.X >= Left&& op2->Pt.X <= Right) 
+    {
+      Pt = op2->Pt; DiscardLeftSide = (op2->Pt.X > op2b->Pt.X);
+    } 
+    else if (op1b->Pt.X >= Left && op1b->Pt.X <= Right)
+    {
+      Pt = op1b->Pt; DiscardLeftSide = op1b->Pt.X > op1->Pt.X;
+    } 
+    else
+    {
+      Pt = op2b->Pt; DiscardLeftSide = (op2b->Pt.X > op2->Pt.X);
+    }
+    p1 = op1; p2 = op2;
+    return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide);
+  } else
+  {
+    //nb: For non-horizontal joins ...
+    //    1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y
+    //    2. Jr.OutPt1.Pt > Jr.OffPt.Y
+
+    //make sure the polygons are correctly oriented ...
+    op1b = op1->Next;
+    while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Next;
+    bool Reverse1 = ((op1b->Pt.Y > op1->Pt.Y) ||
+      !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange));
+    if (Reverse1)
+    {
+      op1b = op1->Prev;
+      while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Prev;
+      if ((op1b->Pt.Y > op1->Pt.Y) ||
+        !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange)) return false;
+    };
+    op2b = op2->Next;
+    while ((op2b->Pt == op2->Pt) && (op2b != op2))op2b = op2b->Next;
+    bool Reverse2 = ((op2b->Pt.Y > op2->Pt.Y) ||
+      !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange));
+    if (Reverse2)
+    {
+      op2b = op2->Prev;
+      while ((op2b->Pt == op2->Pt) && (op2b != op2)) op2b = op2b->Prev;
+      if ((op2b->Pt.Y > op2->Pt.Y) ||
+        !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange)) return false;
+    }
+
+    if ((op1b == op1) || (op2b == op2) || (op1b == op2b) ||
+      ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false;
+
+    if (Reverse1)
     {
-      JoinRec* j2 = m_Joins[k];
-      if (j2->poly1Idx == j->poly1Idx && PointIsVertex(j2->pt1a, pt))
-        j2->poly1Idx = j->poly2Idx;
-      if (j2->poly2Idx == j->poly1Idx && PointIsVertex(j2->pt2a, pt))
-        j2->poly2Idx = j->poly2Idx;
+      op1b = DupOutPt(op1, false);
+      op2b = DupOutPt(op2, true);
+      op1->Prev = op2;
+      op2->Next = op1;
+      op1b->Next = op2b;
+      op2b->Prev = op1b;
+      p1 = op1;
+      p2 = op1b;
+      return true;
+    } else
+    {
+      op1b = DupOutPt(op1, true);
+      op2b = DupOutPt(op2, false);
+      op1->Next = op2;
+      op2->Prev = op1;
+      op1b->Prev = op2b;
+      op2b->Next = op1b;
+      p1 = op1;
+      p2 = op1b;
+      return true;
     }
+  }
 }
 //----------------------------------------------------------------------
 
-bool Poly2ContainsPoly1(OutPt* outPt1, OutPt* outPt2, bool UseFullInt64Range)
+bool Poly2ContainsPoly1(OutPt* OutPt1, OutPt* OutPt2, bool UseFullInt64Range)
 {
-  OutPt* pt = outPt1;
+  OutPt* Pt = OutPt1;
   //Because the polygons may be touching, we need to find a vertex that
   //isn't touching the other polygon ...
-  if (PointOnPolygon(pt->pt, outPt2, UseFullInt64Range))
+  if (PointOnPolygon(Pt->Pt, OutPt2, UseFullInt64Range))
   {
-    pt = pt->next;
-    while (pt != outPt1 && PointOnPolygon(pt->pt, outPt2, UseFullInt64Range))
-        pt = pt->next;
-    if (pt == outPt1) return true;
+    Pt = Pt->Next;
+    while (Pt != OutPt1 && PointOnPolygon(Pt->Pt, OutPt2, UseFullInt64Range))
+        Pt = Pt->Next;
+    if (Pt == OutPt1) return true;
   }
-  return PointInPolygon(pt->pt, outPt2, UseFullInt64Range);
+  return PointInPolygon(Pt->Pt, OutPt2, UseFullInt64Range);
 }
 //----------------------------------------------------------------------
 
@@ -2895,9 +3806,9 @@ void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec)
   for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
   {
     OutRec* outRec = m_PolyOuts[i];
-    if (outRec->pts && outRec->FirstLeft == OldOutRec) 
+    if (outRec->Pts && outRec->FirstLeft == OldOutRec) 
     {
-      if (Poly2ContainsPoly1(outRec->pts, NewOutRec->pts, m_UseFullRange))
+      if (Poly2ContainsPoly1(outRec->Pts, NewOutRec->Pts, m_UseFullRange))
         outRec->FirstLeft = NewOutRec;
     }
   }
@@ -2918,12 +3829,12 @@ void Clipper::JoinCommonEdges()
 {
   for (JoinList::size_type i = 0; i < m_Joins.size(); i++)
   {
-    JoinRec* j = m_Joins[i];
+    Join* j = m_Joins[i];
 
-    OutRec *outRec1 = GetOutRec(j->poly1Idx);
-    OutRec *outRec2 = GetOutRec(j->poly2Idx);
+    OutRec *outRec1 = GetOutRec(j->OutPt1->Idx);
+    OutRec *outRec2 = GetOutRec(j->OutPt2->Idx);
 
-    if (!outRec1->pts || !outRec2->pts) continue;
+    if (!outRec1->Pts || !outRec2->Pts) continue;
 
     //get the polygon fragment with the correct hole state (FirstLeft)
     //before calling JoinPoints() ...
@@ -2940,75 +3851,59 @@ void Clipper::JoinCommonEdges()
     {
       //instead of joining two polygons, we've just created a new one by
       //splitting one polygon into two.
-      outRec1->pts = p1;
-      outRec1->bottomPt = 0;
+      outRec1->Pts = p1;
+      outRec1->BottomPt = 0;
       outRec2 = CreateOutRec();
-      outRec2->pts = p2;
+      outRec2->Pts = p2;
+
+      //update all OutRec2.Pts Idx's ...
+      UpdateOutPtIdxs(*outRec2);
 
-      if (Poly2ContainsPoly1(outRec2->pts, outRec1->pts, m_UseFullRange))
+      if (Poly2ContainsPoly1(outRec2->Pts, outRec1->Pts, m_UseFullRange))
       {
         //outRec2 is contained by outRec1 ...
-        outRec2->isHole = !outRec1->isHole;
+        outRec2->IsHole = !outRec1->IsHole;
         outRec2->FirstLeft = outRec1;
 
-        FixupJoinRecs(j, p2, i+1);
-
         //fixup FirstLeft pointers that may need reassigning to OutRec1
         if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);
 
-        FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation
-        FixupOutPolygon(*outRec2); //    but AFTER calling FixupJoinRecs()
-
-
-        if ((outRec2->isHole ^ m_ReverseOutput) == (Area(*outRec2, m_UseFullRange) > 0))
-          ReversePolyPtLinks(outRec2->pts);
+        if ((outRec2->IsHole ^ m_ReverseOutput) == (Area(*outRec2) > 0))
+          ReversePolyPtLinks(outRec2->Pts);
             
-      } else if (Poly2ContainsPoly1(outRec1->pts, outRec2->pts, m_UseFullRange))
+      } else if (Poly2ContainsPoly1(outRec1->Pts, outRec2->Pts, m_UseFullRange))
       {
         //outRec1 is contained by outRec2 ...
-        outRec2->isHole = outRec1->isHole;
-        outRec1->isHole = !outRec2->isHole;
+        outRec2->IsHole = outRec1->IsHole;
+        outRec1->IsHole = !outRec2->IsHole;
         outRec2->FirstLeft = outRec1->FirstLeft;
         outRec1->FirstLeft = outRec2;
 
-        FixupJoinRecs(j, p2, i+1);
-
         //fixup FirstLeft pointers that may need reassigning to OutRec1
         if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2);
 
-        FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation
-        FixupOutPolygon(*outRec2); //    but AFTER calling FixupJoinRecs()
-
-        if ((outRec1->isHole ^ m_ReverseOutput) == (Area(*outRec1, m_UseFullRange) > 0))
-          ReversePolyPtLinks(outRec1->pts);
+        if ((outRec1->IsHole ^ m_ReverseOutput) == (Area(*outRec1) > 0))
+          ReversePolyPtLinks(outRec1->Pts);
       } 
       else
       {
         //the 2 polygons are completely separate ...
-        outRec2->isHole = outRec1->isHole;
+        outRec2->IsHole = outRec1->IsHole;
         outRec2->FirstLeft = outRec1->FirstLeft;
 
-        FixupJoinRecs(j, p2, i+1);
-
         //fixup FirstLeft pointers that may need reassigning to OutRec2
         if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2);
-
-        FixupOutPolygon(*outRec1); //nb: do this BEFORE testing orientation
-        FixupOutPolygon(*outRec2); //    but AFTER calling FixupJoinRecs()
       }
      
     } else
     {
       //joined 2 polygons together ...
 
-      //cleanup redundant edges ...
-      FixupOutPolygon(*outRec1);
+      outRec2->Pts = 0;
+      outRec2->BottomPt = 0;
+      outRec2->Idx = outRec1->Idx;
 
-      outRec2->pts = 0;
-      outRec2->bottomPt = 0;
-      outRec2->idx = outRec1->idx;
-
-      outRec1->isHole = holeStateRec->isHole;
+      outRec1->IsHole = holeStateRec->IsHole;
       if (holeStateRec == outRec2) 
         outRec1->FirstLeft = outRec2->FirstLeft;
       outRec2->FirstLeft = outRec1;
@@ -3020,273 +3915,266 @@ void Clipper::JoinCommonEdges()
 }
 //------------------------------------------------------------------------------
 
-inline void UpdateOutPtIdxs(OutRec& outrec)
-{  
-  OutPt* op = outrec.pts;
-  do
-  {
-    op->idx = outrec.idx;
-    op = op->prev;
-  }
-  while(op != outrec.pts);
-}
-//------------------------------------------------------------------------------
-
 void Clipper::DoSimplePolygons()
 {
   PolyOutList::size_type i = 0;
   while (i < m_PolyOuts.size()) 
   {
     OutRec* outrec = m_PolyOuts[i++];
-    OutPt* op = outrec->pts;
+    OutPt* op = outrec->Pts;
     if (!op) continue;
     do //for each Pt in Polygon until duplicate found do ...
     {
-      OutPt* op2 = op->next;
-      while (op2 != outrec->pts) 
+      OutPt* op2 = op->Next;
+      while (op2 != outrec->Pts) 
       {
-        if (PointsEqual(op->pt, op2->pt) && op2->next != op && op2->prev != op) 
+        if ((op->Pt == op2->Pt) && op2->Next != op && op2->Prev != op) 
         {
           //split the polygon into two ...
-          OutPt* op3 = op->prev;
-          OutPt* op4 = op2->prev;
-          op->prev = op4;
-          op4->next = op;
-          op2->prev = op3;
-          op3->next = op2;
-
-          outrec->pts = op;
+          OutPt* op3 = op->Prev;
+          OutPt* op4 = op2->Prev;
+          op->Prev = op4;
+          op4->Next = op;
+          op2->Prev = op3;
+          op3->Next = op2;
+
+          outrec->Pts = op;
           OutRec* outrec2 = CreateOutRec();
-          outrec2->pts = op2;
+          outrec2->Pts = op2;
           UpdateOutPtIdxs(*outrec2);
-          if (Poly2ContainsPoly1(outrec2->pts, outrec->pts, m_UseFullRange))
+          if (Poly2ContainsPoly1(outrec2->Pts, outrec->Pts, m_UseFullRange))
           {
             //OutRec2 is contained by OutRec1 ...
-            outrec2->isHole = !outrec->isHole;
+            outrec2->IsHole = !outrec->IsHole;
             outrec2->FirstLeft = outrec;
           }
           else
-            if (Poly2ContainsPoly1(outrec->pts, outrec2->pts, m_UseFullRange))
+            if (Poly2ContainsPoly1(outrec->Pts, outrec2->Pts, m_UseFullRange))
           {
             //OutRec1 is contained by OutRec2 ...
-            outrec2->isHole = outrec->isHole;
-            outrec->isHole = !outrec2->isHole;
+            outrec2->IsHole = outrec->IsHole;
+            outrec->IsHole = !outrec2->IsHole;
             outrec2->FirstLeft = outrec->FirstLeft;
             outrec->FirstLeft = outrec2;
           } else
           {
             //the 2 polygons are separate ...
-            outrec2->isHole = outrec->isHole;
+            outrec2->IsHole = outrec->IsHole;
             outrec2->FirstLeft = outrec->FirstLeft;
           }
-          op2 = op; //ie get ready for the next iteration
+          op2 = op; //ie get ready for the Next iteration
         }
-        op2 = op2->next;
+        op2 = op2->Next;
       }
-      op = op->next;
+      op = op->Next;
     }
-    while (op != outrec->pts);
+    while (op != outrec->Pts);
   }
 }
 //------------------------------------------------------------------------------
 
-void ReversePolygon(Polygon& p)
+void ReversePath(Path& p)
 {
   std::reverse(p.begin(), p.end());
 }
 //------------------------------------------------------------------------------
 
-void ReversePolygons(Polygons& p)
+void ReversePaths(Paths& p)
 {
-  for (Polygons::size_type i = 0; i < p.size(); ++i)
-    ReversePolygon(p[i]);
+  for (Paths::size_type i = 0; i < p.size(); ++i)
+    ReversePath(p[i]);
 }
 
 //------------------------------------------------------------------------------
 // OffsetPolygon functions ...
 //------------------------------------------------------------------------------
 
-struct DoublePoint
-{
-  double X;
-  double Y;
-  DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}
-};
-//------------------------------------------------------------------------------
-
-Polygon BuildArc(const IntPoint &pt,
-  const double a1, const double a2, const double r, double limit)
-{
-  //see notes in clipper.pas regarding steps
-  double arcFrac = std::fabs(a2 - a1) / (2 * pi);
-  int steps = (int)(arcFrac * pi / std::acos(1 - limit / std::fabs(r)));
-  if (steps < 2) steps = 2;
-  else if (steps > (int)(222.0 * arcFrac)) steps = (int)(222.0 * arcFrac);
-
-  double x = std::cos(a1); 
-  double y = std::sin(a1);
-  double c = std::cos((a2 - a1) / steps);
-  double s = std::sin((a2 - a1) / steps);
-  Polygon result(steps +1);
-  for (int i = 0; i <= steps; ++i)
-  {
-      result[i].X = pt.X + Round(x * r);
-      result[i].Y = pt.Y + Round(y * r);
-      double x2 = x;
-      x = x * c - s * y;  //cross product
-      y = x2 * s + y * c; //dot product
-  }
-  return result;
-}
-//------------------------------------------------------------------------------
-
 DoublePoint GetUnitNormal(const IntPoint &pt1, const IntPoint &pt2)
 {
   if(pt2.X == pt1.X && pt2.Y == pt1.Y) 
     return DoublePoint(0, 0);
 
-  double dx = (double)(pt2.X - pt1.X);
+  double Dx = (double)(pt2.X - pt1.X);
   double dy = (double)(pt2.Y - pt1.Y);
-  double f = 1 *1.0/ std::sqrt( dx*dx + dy*dy );
-  dx *= f;
+  double f = 1 *1.0/ std::sqrt( Dx*Dx + dy*dy );
+  Dx *= f;
   dy *= f;
-  return DoublePoint(dy, -dx);
+  return DoublePoint(dy, -Dx);
 }
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 
-class PolyOffsetBuilder
+class OffsetBuilder
 {
 private:
-  Polygons m_p;
-  Polygon* m_curr_poly;
+  const Paths& m_p;
+  Path* m_curr_poly;
   std::vector<DoublePoint> normals;
-  double m_delta, m_RMin, m_R;
+  double m_delta, m_sinA, m_sin, m_cos;
+  double m_miterLim, m_Steps360;
   size_t m_i, m_j, m_k;
   static const int buffLength = 128;
-  JoinType m_jointype;
  
 public:
 
-PolyOffsetBuilder(const Polygons& in_polys, Polygons& out_polys,
-  double delta, JoinType jointype, double limit, bool autoFix)
+OffsetBuilder(const Paths& in_polys, Paths& out_polys,
+  double Delta, JoinType jointype, EndType endtype, double limit): m_p(in_polys)
 {
-    //nb precondition - out_polys != ptsin_polys
-    if (NEAR_ZERO(delta))
-    {
-        out_polys = in_polys;
-        return;
-    }
+    //precondition: &out_polys != &in_polys
 
-    this->m_p = in_polys;
-    this->m_delta = delta;
-    this->m_jointype = jointype;
+    if (NEAR_ZERO(Delta)) {out_polys = in_polys; return;}
+    //we can't shrink a polyline so ...
+    if (endtype != etClosed && Delta < 0) Delta = -Delta;
+    m_delta = Delta;
 
-    //ChecksInput - fixes polygon orientation if necessary and removes 
-    //duplicate vertices. Can be set false when you're sure that polygon
-    //orientation is correct and that there are no duplicate vertices.
-    if (autoFix) 
-    {
-      size_t Len = m_p.size(), botI = 0;
-      while (botI < Len && m_p[botI].empty()) botI++;
-      if (botI == Len) return;
+  if (jointype == jtMiter) 
+  {
+    //m_miterLim: see offset_triginometry.svg in the documentation folder ...
+    if (limit > 2) m_miterLim = 2/(limit*limit);
+    else m_miterLim = 0.5;
+    if (endtype == etRound) limit = 0.25;
+  }
+
+  if (jointype == jtRound || endtype == etRound)
+  {
+    if (limit <= 0) limit = 0.25;
+    else if (limit > std::fabs(Delta)*0.25) limit = std::fabs(Delta)*0.25;
+    //m_Steps360: see offset_triginometry2.svg in the documentation folder ...
+    m_Steps360 = pi / std::acos(1 - limit / std::fabs(Delta));
+    m_sin = std::sin(2 * pi / m_Steps360);
+    m_cos = std::cos(2 * pi / m_Steps360);
+    m_Steps360 /= pi * 2;
+    if (Delta < 0) m_sin = -m_sin;
+  }
+
+  out_polys.clear();
+  out_polys.resize(m_p.size());
+  for (m_i = 0; m_i < m_p.size(); m_i++)
+  {
+      size_t len = m_p[m_i].size();
+
+      if (len == 0 || (len < 3 && Delta <= 0)) continue;
       
-      //botPt: used to find the lowermost (in inverted Y-axis) & leftmost point
-      //This point (on m_p[botI]) must be on an outer polygon ring and if 
-      //its orientation is false (counterclockwise) then assume all polygons 
-      //need reversing ...
-      IntPoint botPt = m_p[botI][0];      
-      for (size_t i = botI; i < Len; ++i)
+      if (len == 1)
       {
-        if (m_p[i].size() < 3) continue;
-        if (UpdateBotPt(m_p[i][0], botPt)) botI = i;
-        Polygon::iterator it = m_p[i].begin() +1;
-        while (it != m_p[i].end())
+        if (jointype == jtRound)
         {
-          if (PointsEqual(*it, *(it -1)))
-            it = m_p[i].erase(it);
-          else 
+          double X = 1.0, Y = 0.0;
+          for (cInt j = 1; j <= Round(m_Steps360 * 2 * pi); j++)
           {
-            if (UpdateBotPt(*it, botPt)) botI = i;
-            ++it;
+            AddPoint(IntPoint(
+              Round(m_p[m_i][0].X + X * Delta),
+              Round(m_p[m_i][0].Y + Y * Delta)));
+            double X2 = X;
+            X = X * m_cos - m_sin * Y;
+            Y = X2 * m_sin + Y * m_cos;
           }
-        }
-      }
-      if (!Orientation(m_p[botI]))
-        ReversePolygons(m_p);
-    }
-
-    switch (jointype)
-    {
-        case jtRound:  
-            if (limit <= 0) limit = 0.25;
-            else if (limit > std::fabs(delta)) limit = std::fabs(delta);
-            break;  
-        case jtMiter: 
-            if (limit < 2) limit = 2; 
-            break;       
-        default:       //unused
-            limit = 1;   
-    }
-    m_RMin = 2.0/(limit*limit);
- 
-    double deltaSq = delta*delta;
-    out_polys.clear();
-    out_polys.resize(m_p.size());
-    for (m_i = 0; m_i < m_p.size(); m_i++)
-    {
-        m_curr_poly = &out_polys[m_i];
-        size_t len = m_p[m_i].size();
-        if (len > 1 && m_p[m_i][0].X == m_p[m_i][len - 1].X &&
-            m_p[m_i][0].Y == m_p[m_i][len-1].Y) len--;
-
-        //when 'shrinking' polygons - to minimize artefacts
-        //strip those polygons that have an area < pi * delta^2 ...
-        double a1 = Area(m_p[m_i]);
-        if (delta < 0) { if (a1 > 0 && a1 < deltaSq *pi) len = 0; }
-        else if (a1 < 0 && -a1 < deltaSq *pi) len = 0; //holes have neg. area
-
-        if (len == 0 || (len < 3 && delta <= 0))
-          continue;
-        else if (len == 1)
+        } else
         {
-            Polygon arc;
-            arc = BuildArc(m_p[m_i][len-1], 0, 2 * pi, delta, limit);
-            out_polys[m_i] = arc;
-            continue;
+          double X = -1.0, Y = -1.0;
+          for (int j = 0; j < 4; ++j)
+          {
+            AddPoint(IntPoint( Round(m_p[m_i][0].X + X * Delta),
+              Round(m_p[m_i][0].Y + Y * Delta)));
+            if (X < 0) X = 1;
+            else if (Y < 0) Y = 1;
+            else X = -1;
+          }
         }
+        continue;
+      }
 
-        //build normals ...
-        normals.clear();
-        normals.resize(len);
+      //build normals ...
+      normals.clear();
+      normals.resize(len);
+      for (m_j = 0; m_j < len -1; ++m_j)
+          normals[m_j] = GetUnitNormal(m_p[m_i][m_j], m_p[m_i][m_j +1]);
+      if (endtype == etClosed) 
         normals[len-1] = GetUnitNormal(m_p[m_i][len-1], m_p[m_i][0]);
-        for (m_j = 0; m_j < len -1; ++m_j)
-            normals[m_j] = GetUnitNormal(m_p[m_i][m_j], m_p[m_i][m_j+1]);
+      else //is open polyline
+        normals[len-1] = normals[len-2];
         
+      m_curr_poly = &out_polys[m_i];
+      m_curr_poly->reserve(len);
+
+      if (endtype == etClosed)
+      {
         m_k = len -1;
         for (m_j = 0; m_j < len; ++m_j)
+          OffsetPoint(jointype);
+      }
+      else //is open polyline
+      {
+        //offset the polyline going forward ...
+        m_k = 0;
+        for (m_j = 1; m_j < len -1; ++m_j)
+          OffsetPoint(jointype);
+
+        //handle the end (butt, round or square) ...
+        IntPoint pt1;
+        if (endtype == etButt)
         {
-          switch (jointype)
-          {
-            case jtMiter:
-            {
-              m_R = 1 + (normals[m_j].X*normals[m_k].X + 
-                normals[m_j].Y*normals[m_k].Y);
-              if (m_R >= m_RMin) DoMiter(); else DoSquare(limit);
-              break;
-            }
-            case jtSquare: DoSquare(1.0); break;
-            case jtRound: DoRound(limit); break;
-          }
-        m_k = m_j;
+          m_j = len - 1;
+          pt1 = IntPoint(Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), 
+            Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta));
+          AddPoint(pt1);
+          pt1 = IntPoint(Round(m_p[m_i][m_j].X - normals[m_j].X * m_delta), 
+            Round(m_p[m_i][m_j].Y - normals[m_j].Y * m_delta));
+          AddPoint(pt1);
+        } 
+        else
+        {
+          m_j = len - 1;
+          m_k = len - 2;
+          m_sinA = 0;
+          normals[m_j].X = -normals[m_j].X;
+          normals[m_j].Y = -normals[m_j].Y;
+          if (endtype == etSquare) 
+            DoSquare();
+          else 
+            DoRound();
         }
+
+        //re-build Normals ...
+        for (int j = len - 1; j > 0; --j)
+        {
+            normals[j].X = -normals[j - 1].X;
+            normals[j].Y = -normals[j - 1].Y;
+        }
+        normals[0].X = -normals[1].X;
+        normals[0].Y = -normals[1].Y;
+
+        //offset the polyline going backward ...
+        m_k = len -1;
+        for (m_j = m_k - 1; m_j > 0; --m_j)
+          OffsetPoint(jointype);
+
+        //finally handle the start (butt, round or square) ...
+        if (endtype == etButt) 
+        {
+          pt1 = IntPoint(Round(m_p[m_i][0].X - normals[0].X * m_delta), 
+            Round(m_p[m_i][0].Y - normals[0].Y * m_delta));
+          AddPoint(pt1);
+          pt1 = IntPoint(Round(m_p[m_i][0].X + normals[0].X * m_delta), 
+            Round(m_p[m_i][0].Y + normals[0].Y * m_delta));
+          AddPoint(pt1);
+        } else
+        {
+          m_sinA = 0;
+          m_k = 1;
+          if (endtype == etSquare) 
+            DoSquare(); 
+          else 
+            DoRound();
+        }
+      }
     }
 
-    //finally, clean up untidy corners using Clipper ...
+    //and clean up untidy corners using Clipper ...
     Clipper clpr;
-    clpr.AddPolygons(out_polys, ptSubject);
-    if (delta > 0)
+    clpr.AddPaths(out_polys, ptSubject, true);
+    if (Delta > 0)
     {
         if (!clpr.Execute(ctUnion, out_polys, pftPositive, pftPositive))
             out_polys.clear();
@@ -3294,19 +4182,17 @@ PolyOffsetBuilder(const Polygons& in_polys, Polygons& out_polys,
     else
     {
         IntRect r = clpr.GetBounds();
-        Polygon outer(4);
+        Path outer(4);
         outer[0] = IntPoint(r.left - 10, r.bottom + 10);
         outer[1] = IntPoint(r.right + 10, r.bottom + 10);
         outer[2] = IntPoint(r.right + 10, r.top - 10);
         outer[3] = IntPoint(r.left - 10, r.top - 10);
 
-        clpr.AddPolygon(outer, ptSubject);
+        clpr.AddPath(outer, ptSubject, true);
+        clpr.ReverseSolution(true);
         if (clpr.Execute(ctUnion, out_polys, pftNegative, pftNegative))
-        {
             out_polys.erase(out_polys.begin());
-            ReversePolygons(out_polys);
-
-        } else
+        else
             out_polys.clear();
     }
 }
@@ -3314,100 +4200,86 @@ PolyOffsetBuilder(const Polygons& in_polys, Polygons& out_polys,
 
 private:
 
-void AddPoint(const IntPoint& pt)
+void OffsetPoint(JoinType jointype)
 {
-    if (m_curr_poly->size() == m_curr_poly->capacity())
-        m_curr_poly->reserve(m_curr_poly->capacity() + buffLength);
-    m_curr_poly->push_back(pt);
+  m_sinA = (normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y);
+  if (std::fabs(m_sinA) < 0.00005) return; //ie collinear
+  else if (m_sinA > 1.0) m_sinA = 1.0; 
+  else if (m_sinA < -1.0) m_sinA = -1.0;
+
+  if (m_sinA * m_delta < 0)
+  {
+    AddPoint(IntPoint(Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta),
+      Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)));
+    AddPoint(m_p[m_i][m_j]);
+    AddPoint(IntPoint(Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta),
+      Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)));
+  }
+  else
+    switch (jointype)
+      {
+        case jtMiter:
+        {
+          double r = 1 + (normals[m_j].X*normals[m_k].X + 
+            normals[m_j].Y*normals[m_k].Y);
+          if (r >= m_miterLim) DoMiter(r); else DoSquare();
+          break;
+        }
+        case jtSquare: DoSquare(); break;
+        case jtRound: DoRound(); break;
+      }
+      m_k = m_j;
 }
 //------------------------------------------------------------------------------
 
-void DoSquare(double mul)
+void AddPoint(const IntPoint& Pt)
 {
-    IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta),
-        (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta));
-    IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta),
-        (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta));
-    if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0)
-    {
-      double a1 = std::atan2(normals[m_k].Y, normals[m_k].X);
-      double a2 = std::atan2(-normals[m_j].Y, -normals[m_j].X);
-      a1 = std::fabs(a2 - a1);
-      if (a1 > pi) a1 = pi * 2 - a1;
-      double dx = std::tan((pi - a1) / 4) * std::fabs(m_delta * mul);
-      pt1 = IntPoint((long64)(pt1.X -normals[m_k].Y * dx),
-        (long64)(pt1.Y + normals[m_k].X * dx));
-      AddPoint(pt1);
-      pt2 = IntPoint((long64)(pt2.X + normals[m_j].Y * dx),
-        (long64)(pt2.Y -normals[m_j].X * dx));
-      AddPoint(pt2);
-    }
-    else
-    {
-      AddPoint(pt1);
-      AddPoint(m_p[m_i][m_j]);
-      AddPoint(pt2);
-    }
+    if (m_curr_poly->size() == m_curr_poly->capacity())
+        m_curr_poly->reserve(m_curr_poly->capacity() + buffLength);
+    m_curr_poly->push_back(Pt);
 }
 //------------------------------------------------------------------------------
 
-void DoMiter()
+void DoSquare()
 {
-    if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0)
-    {
-        double q = m_delta / m_R;
-        AddPoint(IntPoint((long64)Round(m_p[m_i][m_j].X + 
-            (normals[m_k].X + normals[m_j].X) * q),
-            (long64)Round(m_p[m_i][m_j].Y + (normals[m_k].Y + normals[m_j].Y) * q)));
-    }
-    else
-    {
-        IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X *
-          m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta));
-        IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X *
-          m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta));
-        AddPoint(pt1);
-        AddPoint(m_p[m_i][m_j]);
-        AddPoint(pt2);
-    }
+  double Dx = std::tan(std::atan2(m_sinA, 
+    normals[m_k].X * normals[m_j].X + normals[m_k].Y * normals[m_j].Y)/4);
+  AddPoint(IntPoint(
+    Round(m_p[m_i][m_j].X + m_delta * (normals[m_k].X - normals[m_k].Y *Dx)),
+    Round(m_p[m_i][m_j].Y + m_delta * (normals[m_k].Y + normals[m_k].X *Dx))));
+  AddPoint(IntPoint(
+    Round(m_p[m_i][m_j].X + m_delta * (normals[m_j].X + normals[m_j].Y *Dx)),
+    Round(m_p[m_i][m_j].Y + m_delta * (normals[m_j].Y - normals[m_j].X *Dx))));
 }
 //------------------------------------------------------------------------------
 
-void DoRound(double limit)
+void DoMiter(double r)
 {
-    IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta),
-        (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta));
-    IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta),
-        (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta));
-    AddPoint(pt1);
-    //round off reflex angles (ie > 180 deg) unless almost flat (ie < ~10deg).
-    if ((normals[m_k].X*normals[m_j].Y - normals[m_j].X*normals[m_k].Y) * m_delta >= 0)
-    {
-      if (normals[m_j].X * normals[m_k].X + normals[m_j].Y * normals[m_k].Y < 0.985)
-      {
-        double a1 = std::atan2(normals[m_k].Y, normals[m_k].X);
-        double a2 = std::atan2(normals[m_j].Y, normals[m_j].X);
-        if (m_delta > 0 && a2 < a1) a2 += pi *2;
-        else if (m_delta < 0 && a2 > a1) a2 -= pi *2;
-        Polygon arc = BuildArc(m_p[m_i][m_j], a1, a2, m_delta, limit);
-        for (Polygon::size_type m = 0; m < arc.size(); m++)
-          AddPoint(arc[m]);
-      }
-    }
-    else
-      AddPoint(m_p[m_i][m_j]);
-    AddPoint(pt2);
+    double q = m_delta / r;
+    AddPoint(IntPoint(Round(m_p[m_i][m_j].X + (normals[m_k].X + normals[m_j].X) * q),
+        Round(m_p[m_i][m_j].Y + (normals[m_k].Y + normals[m_j].Y) * q)));
 }
-//--------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-bool UpdateBotPt(const IntPoint &pt, IntPoint &botPt)
+void DoRound()
 {
-    if (pt.Y > botPt.Y || (pt.Y == botPt.Y && pt.X < botPt.X))
-    {
-        botPt = pt;
-        return true;
-    }
-    else return false;
+  double a = std::atan2(m_sinA, 
+    normals[m_k].X * normals[m_j].X + normals[m_k].Y * normals[m_j].Y);
+  int steps = (int)Round(m_Steps360 * std::fabs(a));
+
+  double X = normals[m_k].X, Y = normals[m_k].Y, X2;
+  for (int i = 0; i < steps; ++i)
+  {
+    AddPoint(IntPoint(
+      Round(m_p[m_i][m_j].X + X * m_delta),
+      Round(m_p[m_i][m_j].Y + Y * m_delta)));
+    X2 = X;
+    X = X * m_cos - m_sin * Y;
+    Y = X2 * m_sin + Y * m_cos;
+  }
+  AddPoint(IntPoint(
+    Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta),
+    Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)));
 }
 //--------------------------------------------------------------------------
 
@@ -3416,37 +4288,71 @@ bool UpdateBotPt(const IntPoint &pt, IntPoint &botPt)
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 
-void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys,
-  double delta, JoinType jointype, double limit, bool autoFix)
+void StripDupsAndGetBotPt(Path& in_path, Path& out_path, bool closed, IntPoint* botPt)
 {
-  if (&out_polys == &in_polys)
-  {
-    Polygons poly2(in_polys);
-    PolyOffsetBuilder(poly2, out_polys, delta, jointype, limit, autoFix);
-  }
-  else PolyOffsetBuilder(in_polys, out_polys, delta, jointype, limit, autoFix);
+  botPt = 0;
+  size_t len = in_path.size();
+  if (closed)    
+    while (len > 0 && (in_path[0] == in_path[len -1])) len--;
+  if (len == 0) return;
+  out_path.resize(len);
+  int j = 0;
+  out_path[0] = in_path[0];
+  botPt = &out_path[0];
+  for (size_t i = 1; i < len; ++i)
+    if (in_path[i] != out_path[j])
+    {
+      j++;
+      out_path[j] = in_path[i];
+      if (out_path[j].Y > botPt->Y)
+        botPt = &out_path[j];
+      else if ((out_path[j].Y == botPt->Y) && out_path[j].X < botPt->X) 
+        botPt = &out_path[j];
+    }
+  j++;
+  if (j < 2 || (closed && (j == 2))) j = 0;
+  out_path.resize(j);
 }
 //------------------------------------------------------------------------------
 
-void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType)
+void OffsetPaths(const Paths &in_polys, Paths &out_polys,
+  double delta, JoinType jointype, EndType endtype, double limit)
 {
-  Clipper c;
-  c.ForceSimple(true);
-  c.AddPolygon(in_poly, ptSubject);
-  c.Execute(ctUnion, out_polys, fillType, fillType);
+  //just in case in_polys == &out_polys ...
+  Paths inPolys = Paths(in_polys);
+  out_polys.clear();
+  out_polys.resize(inPolys.size());
+
+  IntPoint *botPt = 0, *pt = 0;
+  int botIdx = -1;
+  for (size_t i = 0; i < in_polys.size(); ++i)
+  {
+    StripDupsAndGetBotPt(inPolys[i], out_polys[i], endtype == etClosed, pt);
+    if (botPt) 
+      if (!botPt || pt->Y > botPt->Y || (pt->Y == botPt->Y && pt->X < botPt->X))
+      {
+        botPt = pt;
+        botIdx = i;
+      }
+
+  }
+  if (endtype == etClosed && botIdx >= 0 && !Orientation(inPolys[botIdx]))
+      ReversePaths(inPolys);
+
+  OffsetBuilder(inPolys, out_polys, delta, jointype, endtype, limit);
 }
 //------------------------------------------------------------------------------
 
-void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType)
+void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType)
 {
   Clipper c;
-  c.ForceSimple(true);
-  c.AddPolygons(in_polys, ptSubject);
+  c.StrictlySimple(true);
+  c.AddPaths(in_polys, ptSubject, true);
   c.Execute(ctUnion, out_polys, fillType, fillType);
 }
 //------------------------------------------------------------------------------
 
-void SimplifyPolygons(Polygons &polys, PolyFillType fillType)
+void SimplifyPolygons(Paths &polys, PolyFillType fillType)
 {
   SimplifyPolygons(polys, polys, fillType);
 }
@@ -3454,45 +4360,45 @@ void SimplifyPolygons(Polygons &polys, PolyFillType fillType)
 
 inline double DistanceSqrd(const IntPoint& pt1, const IntPoint& pt2)
 {
-  double dx = ((double)pt1.X - pt2.X);
+  double Dx = ((double)pt1.X - pt2.X);
   double dy = ((double)pt1.Y - pt2.Y);
-  return (dx*dx + dy*dy);
+  return (Dx*Dx + dy*dy);
 }
 //------------------------------------------------------------------------------
 
-DoublePoint ClosestPointOnLine(const IntPoint& pt, const IntPoint& linePt1, const IntPoint& linePt2)
+DoublePoint ClosestPointOnLine(const IntPoint& Pt, const IntPoint& linePt1, const IntPoint& linePt2)
 {
-  double dx = ((double)linePt2.X - linePt1.X);
+  double Dx = ((double)linePt2.X - linePt1.X);
   double dy = ((double)linePt2.Y - linePt1.Y);
-  if (dx == 0 && dy == 0) 
+  if (Dx == 0 && dy == 0) 
     return DoublePoint((double)linePt1.X, (double)linePt1.Y);
-  double q = ((pt.X-linePt1.X)*dx + (pt.Y-linePt1.Y)*dy) / (dx*dx + dy*dy);
+  double q = ((Pt.X-linePt1.X)*Dx + (Pt.Y-linePt1.Y)*dy) / (Dx*Dx + dy*dy);
   return DoublePoint(
     (1-q)*linePt1.X + q*linePt2.X,
     (1-q)*linePt1.Y + q*linePt2.Y);
 }
 //------------------------------------------------------------------------------
 
-bool SlopesNearColinear(const IntPoint& pt1, 
+bool SlopesNearCollinear(const IntPoint& pt1, 
     const IntPoint& pt2, const IntPoint& pt3, double distSqrd)
 {
   if (DistanceSqrd(pt1, pt2) > DistanceSqrd(pt1, pt3)) return false;
   DoublePoint cpol = ClosestPointOnLine(pt2, pt1, pt3);
-  double dx = pt2.X - cpol.X;
+  double Dx = pt2.X - cpol.X;
   double dy = pt2.Y - cpol.Y;
-  return (dx*dx + dy*dy) < distSqrd;
+  return (Dx*Dx + dy*dy) < distSqrd;
 }
 //------------------------------------------------------------------------------
 
 bool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd)
 {
-    double dx = (double)pt1.X - pt2.X;
+    double Dx = (double)pt1.X - pt2.X;
     double dy = (double)pt1.Y - pt2.Y;
-    return ((dx * dx) + (dy * dy) <= distSqrd);
+    return ((Dx * Dx) + (dy * dy) <= distSqrd);
 }
 //------------------------------------------------------------------------------
 
-void CleanPolygon(Polygon& in_poly, Polygon& out_poly, double distance)
+void CleanPolygon(const Path& in_poly, Path& out_poly, double distance)
 {
   //distance = proximity in units/pixels below which vertices
   //will be stripped. Default ~= sqrt(2).
@@ -3501,74 +4407,218 @@ void CleanPolygon(Polygon& in_poly, Polygon& out_poly, double distance)
   while (highI > 0 && PointsAreClose(in_poly[highI], in_poly[0], distSqrd)) highI--;
   if (highI < 2) { out_poly.clear(); return; }
   
-  out_poly.resize(highI + 1);
-  IntPoint pt = in_poly[highI];
+  if (&in_poly != &out_poly) 
+    out_poly.resize(highI + 1);
+
+  IntPoint Pt = in_poly[highI];
   int i = 0, k = 0;
   for (;;)
   {
-    while (i <= highI && PointsAreClose(pt, in_poly[i+1], distSqrd)) i+=2;
+    while (i < highI && PointsAreClose(Pt, in_poly[i+1], distSqrd)) i+=2;
     int i2 = i;
-    while (i <= highI && PointsAreClose(in_poly[i], in_poly[i+1], distSqrd) ||
-      SlopesNearColinear(pt, in_poly[i], in_poly[+1], distSqrd)) i++;
+    while (i < highI && (PointsAreClose(in_poly[i], in_poly[i+1], distSqrd) ||
+      SlopesNearCollinear(Pt, in_poly[i], in_poly[i+1], distSqrd))) i++;
     if (i >= highI) break;
     else if (i != i2) continue;
-    pt = in_poly[i++];
-    out_poly[k++] = pt;
+    Pt = in_poly[i++];
+    out_poly[k++] = Pt;
   }
   if (i <= highI) out_poly[k++] = in_poly[i];
-  if (k > 2 && SlopesNearColinear(out_poly[k -2], out_poly[k -1], out_poly[0], distSqrd)) k--;    
+  if (k > 2 && SlopesNearCollinear(out_poly[k -2], out_poly[k -1], out_poly[0], distSqrd)) k--;    
   if (k < 3) out_poly.clear();
   else if (k <= highI) out_poly.resize(k);
 }
 //------------------------------------------------------------------------------
 
-void CleanPolygons(Polygons& in_polys, Polygons& out_polys, double distance)
+void CleanPolygon(Path& poly, double distance)
+{
+  CleanPolygon(poly, poly, distance);
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance)
 {
-  for (Polygons::size_type i = 0; i < in_polys.size(); ++i)
+  for (Paths::size_type i = 0; i < in_polys.size(); ++i)
     CleanPolygon(in_polys[i], out_polys[i], distance);
 }
 //------------------------------------------------------------------------------
 
-void AddPolyNodeToPolygons(PolyNode& polynode, Polygons& polygons)
+void CleanPolygons(Paths& polys, double distance)
 {
-  if (!polynode.Contour.empty())
-    polygons.push_back(polynode.Contour);
+  CleanPolygons(polys, polys, distance);
+}
+//------------------------------------------------------------------------------
+
+void Minkowki(const Path& poly, const Path& path, 
+  Paths& solution, bool isSum, bool isClosed)
+{
+  int delta = (isClosed ? 1 : 0);
+  size_t polyCnt = poly.size();
+  size_t pathCnt = path.size();
+  Paths pp;
+  pp.reserve(pathCnt);
+  if (isSum)
+    for (size_t i = 0; i < pathCnt; ++i)
+    {
+      Path p;
+      p.reserve(polyCnt);
+      for (size_t j = 0; j < poly.size(); ++j)
+        p.push_back(IntPoint(path[i].X + poly[j].X, path[i].Y + poly[j].Y));
+      pp.push_back(p);
+    }
+  else
+    for (size_t i = 0; i < pathCnt; ++i)
+    {
+      Path p;
+      p.reserve(polyCnt);
+      for (size_t j = 0; j < poly.size(); ++j)
+        p.push_back(IntPoint(path[i].X - poly[j].X, path[i].Y - poly[j].Y));
+      pp.push_back(p);
+    }
+
+  Paths quads; 
+  quads.reserve((pathCnt + delta) * (polyCnt + 1));
+  for (size_t i = 0; i <= pathCnt - 2 + delta; ++i)
+    for (size_t j = 0; j <= polyCnt - 1; ++j)
+    {
+      Path quad;
+      quad.reserve(4);
+      quad.push_back(pp[i % pathCnt][j % polyCnt]);
+      quad.push_back(pp[(i + 1) % pathCnt][j % polyCnt]);
+      quad.push_back(pp[(i + 1) % pathCnt][(j + 1) % polyCnt]);
+      quad.push_back(pp[i % pathCnt][(j + 1) % polyCnt]);
+      if (!Orientation(quad)) ReversePath(quad);
+      quads.push_back(quad);
+    }
+
+  Clipper c;
+  c.AddPaths(quads, ptSubject, true);
+  c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
+}
+//------------------------------------------------------------------------------
+
+void MinkowkiSum(const Path& poly, const Path& path, Paths& solution, bool isClosed)
+{
+  Minkowki(poly, path, solution, true, isClosed);
+}
+//------------------------------------------------------------------------------
+
+void MinkowkiDiff(const Path& poly, const Path& path, Paths& solution, bool isClosed)
+{
+  Minkowki(poly, path, solution, false, isClosed);
+}
+//------------------------------------------------------------------------------
+
+enum NodeType {ntAny, ntOpen, ntClosed};
+
+void AddPolyNodeToPolygons(const PolyNode& polynode, NodeType nodetype, Paths& paths)
+{
+  bool match = true;
+  if (nodetype == ntClosed) match = !polynode.IsOpen();
+  else if (nodetype == ntOpen) return;
+
+  if (!polynode.Contour.empty() && match)
+    paths.push_back(polynode.Contour);
   for (int i = 0; i < polynode.ChildCount(); ++i)
-    AddPolyNodeToPolygons(*polynode.Childs[i], polygons);
+    AddPolyNodeToPolygons(*polynode.Childs[i], nodetype, paths);
+}
+//------------------------------------------------------------------------------
+
+void PolyTreeToPaths(const PolyTree& polytree, Paths& paths)
+{
+  paths.resize(0); 
+  paths.reserve(polytree.Total());
+  AddPolyNodeToPolygons(polytree, ntAny, paths);
 }
 //------------------------------------------------------------------------------
 
-void PolyTreeToPolygons(PolyTree& polytree, Polygons& polygons)
+void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths)
 {
-  polygons.resize(0); 
-  polygons.reserve(polytree.Total());
-  AddPolyNodeToPolygons(polytree, polygons);
+  paths.resize(0); 
+  paths.reserve(polytree.Total());
+  AddPolyNodeToPolygons(polytree, ntClosed, paths);
 }
 //------------------------------------------------------------------------------
 
-std::ostream& operator <<(std::ostream &s, IntPoint& p)
+void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths)
 {
-  s << p.X << ' ' << p.Y << "\n";
+  paths.resize(0); 
+  paths.reserve(polytree.Total());
+  //Open paths are top level only, so ...
+  for (int i = 0; i < polytree.ChildCount(); ++i)
+    if (polytree.Childs[i]->IsOpen())
+      paths.push_back(polytree.Childs[i]->Contour);
+}
+//------------------------------------------------------------------------------
+
+std::ostream& operator <<(std::ostream &s, const IntPoint &p)
+{
+  s << "(" << p.X << "," << p.Y << ")";
   return s;
 }
 //------------------------------------------------------------------------------
 
-std::ostream& operator <<(std::ostream &s, Polygon &p)
+std::ostream& operator <<(std::ostream &s, const Path &p)
 {
-  for (Polygon::size_type i = 0; i < p.size(); i++)
-    s << p[i];
-  s << "\n";
+  if (p.empty()) return s;
+  Path::size_type last = p.size() -1;
+  for (Path::size_type i = 0; i < last; i++)
+    s << "(" << p[i].X << "," << p[i].Y << "), ";
+  s << "(" << p[last].X << "," << p[last].Y << ")\n";
   return s;
 }
 //------------------------------------------------------------------------------
 
-std::ostream& operator <<(std::ostream &s, Polygons &p)
+std::ostream& operator <<(std::ostream &s, const Paths &p)
 {
-  for (Polygons::size_type i = 0; i < p.size(); i++)
+  for (Paths::size_type i = 0; i < p.size(); i++)
     s << p[i];
   s << "\n";
   return s;
 }
 //------------------------------------------------------------------------------
 
+#ifdef use_deprecated
+bool ClipperBase::AddPolygon(const Path &pg, PolyType PolyTyp)
+{
+  return AddPath(pg, PolyTyp, true);
+}
+//------------------------------------------------------------------------------
+
+bool ClipperBase::AddPolygons(const Paths &ppg, PolyType PolyTyp)
+{
+  bool result = false;
+  for (Paths::size_type i = 0; i < ppg.size(); ++i)
+    if (AddPath(ppg[i], PolyTyp, true)) result = true;
+  return result;
+}
+//------------------------------------------------------------------------------
+
+void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys,
+  double delta, JoinType jointype, double limit, bool autoFix)
+{
+  OffsetPaths(in_polys, out_polys, delta, jointype, etClosed, limit);
+}
+//------------------------------------------------------------------------------
+
+void PolyTreeToPolygons(const PolyTree& polytree, Paths& paths)
+{
+  PolyTreeToPaths(polytree, paths);
+}
+//------------------------------------------------------------------------------
+
+void ReversePolygon(Path& p)
+{
+  std::reverse(p.begin(), p.end());
+}
+//------------------------------------------------------------------------------
+
+void ReversePolygons(Paths& p)
+{
+  for (Paths::size_type i = 0; i < p.size(); ++i)
+    ReversePolygon(p[i]);
+}
+#endif
+
+
 } //ClipperLib namespace
diff --git a/deps/mapnik/sparsehash/internal/hashtable-common.h b/deps/mapnik/sparsehash/internal/hashtable-common.h
index 4d73a40..fa403e6 100644
--- a/deps/mapnik/sparsehash/internal/hashtable-common.h
+++ b/deps/mapnik/sparsehash/internal/hashtable-common.h
@@ -49,10 +49,6 @@
 
 _START_GOOGLE_NAMESPACE_
 
-template <bool> struct SparsehashCompileAssert { };
-#define SPARSEHASH_COMPILE_ASSERT(expr, msg) \
-  typedef SparsehashCompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
-
 namespace sparsehash_internal {
 
 // Adaptor methods for reading/writing data from an INPUT or OUPTUT
@@ -162,9 +158,6 @@ template <typename INPUT, typename IntType>
 bool read_bigendian_number(INPUT* fp, IntType* value, size_t length) {
   *value = 0;
   unsigned char byte;
-  // We require IntType to be unsigned or else the shifting gets all screwy.
-  SPARSEHASH_COMPILE_ASSERT(static_cast<IntType>(-1) > static_cast<IntType>(0),
-                            serializing_int_requires_an_unsigned_type);
   for (size_t i = 0; i < length; ++i) {
     if (!read_data(fp, &byte, sizeof(byte))) return false;
     *value |= static_cast<IntType>(byte) << ((length - 1 - i) * 8);
@@ -175,9 +168,6 @@ bool read_bigendian_number(INPUT* fp, IntType* value, size_t length) {
 template <typename OUTPUT, typename IntType>
 bool write_bigendian_number(OUTPUT* fp, IntType value, size_t length) {
   unsigned char byte;
-  // We require IntType to be unsigned or else the shifting gets all screwy.
-  SPARSEHASH_COMPILE_ASSERT(static_cast<IntType>(-1) > static_cast<IntType>(0),
-                            serializing_int_requires_an_unsigned_type);
   for (size_t i = 0; i < length; ++i) {
     byte = (sizeof(value) <= length-1 - i)
         ? 0 : static_cast<unsigned char>((value >> ((length-1 - i) * 8)) & 255);
@@ -375,7 +365,6 @@ class sh_hashtable_settings : public HashFunc {
 
 }  // namespace sparsehash_internal
 
-#undef SPARSEHASH_COMPILE_ASSERT
 _END_GOOGLE_NAMESPACE_
 
 #endif  // UTIL_GTL_HASHTABLE_COMMON_H_
diff --git a/docs/contributing.markdown b/docs/contributing.markdown
index 631bf4e..7130880 100644
--- a/docs/contributing.markdown
+++ b/docs/contributing.markdown
@@ -17,6 +17,8 @@ Also read the design philosophy page for the motivations that lead to code decis
 
 Templates are good, within reason. We seek to use templates where possible for flexible code, but not in cases where functional patterns would be just as concise and clear.
 
+Since version 3.0 we use C++11 which brings many advantages and makes the code easier to write and to read.
+
 In general we use Boost, it makes more possible in C++. It is a big build time dependency (as in time to compile against and # of headers) but ultimately compiles to small object code and is very fast (particularly spirit). It also has no dependencies itself (it's really an extension to the C++ language) so requiring it is much easier than requiring a hard dependency that itself has other dependencies. This is a big reason that we prefer AGG to Cairo as our primary renderer. Also AGG pro [...]
 
 You will also notice that we don't use many of the standard geo libraries when we could. For instance we don't use GDAL, OGR, or GEOS anywhere in core, and only leverage them in optional plugins. We feel we can often write code that is faster and more thread safe than these libraries but that still does the job. If this ever changes we can adapt and start using these libraries or others as dependencies - nothing is nicer than standing on the shoulders of giants when it makes sense.
@@ -48,12 +50,11 @@ Mapnik is licensed LGPL, which means that you are a free to use the code in any
 
 ## Copyright
 
-Mapnik is an open source project and will always be, proudly, an open source project. Your contributions to Mapnik should be motivated by (amount other things) your desire to contribute to a community effort and by the knowledge that your open code will stay that way.
+Mapnik is an open source project and will always be. Your contributions to Mapnik should be motivated by your desire to contribute to a community effort and by the knowledge that your open code will stay that way.
 
 Artem, as the founder and leader of the Mapnik project, is the primary copyright holder and therefore also the primary contact for any current or future license questions around Mapnik. It is important that the copyright holder is respected, trusted, and known to the community so maintaining copyright with Artem is key to maintaining the project as open source.
 
-Therefore, convention is that all new files created by any core developers or patch
-authors should have a copyright declaration like:
+Therefore all files created by any core developers or patch authors should have a copyright declaration like:
 
     /*****************************************************************************
      *
@@ -103,20 +104,30 @@ which triggers locks
 
     (int)value; // no
 
+
 #### Use const keyword after the type
 
     std::string const& variable_name // preferred, for consistency
 
     const std::string & variable_name // no
 
+
 #### Pass built-in types by value, all others by const&
 
     void my_function(int double val); // if int, char, double, etc pass by value
 
     void my_function(std::string const& val); // if std::string or user type, pass by const&
 
+
+#### When to use shared_ptr and unique_ptr
+
+Sparingly, always prefer passing objects as const& except where using share_ptr or unique_ptr express more clearly your intent. See http://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/ for more details.
+
 #### Shared pointers should be created with [boost::make_shared](http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/make_shared.html) where possible
 
+Since Mapnik 3.0 use std::make_shared.
+
+
 #### Use assignment operator for zero initialized numbers
 
     double num = 0; // please
@@ -130,18 +141,21 @@ which triggers locks
 
     void foo (int a) // no
 
+
 #### Separate arguments by a single space:
 
     void foo(int a, float b) // please
 
     void foo(int a,float b) // no
 
+
 #### Space between operators:
 
     if (a == b) // please
 
     if(a==b) // no
 
+
 #### Braces should always be used:
 
     if (!file)
@@ -161,6 +175,7 @@ which triggers locks
         // more...
     }
 
+
 #### Prefer `empty()` over `size() == 0` if container supports it
 
 This avoids implicit conversions to bool and reduces compiler warnings.
@@ -172,8 +187,7 @@ This avoids implicit conversions to bool and reduces compiler warnings.
 
 ### Other C++ style resources
 
-Many also follow the useful [google](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) which mostly fits our style. However, Google obviously has to maintain a lot of aging codebases. Mapnik can move faster, so we don't follow all
-of those style recommendations.
+Many also follow the useful [Google style guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) which mostly fits our style. However, Google obviously has to maintain a lot of aging codebases. Mapnik can move faster, so we don't follow all of those style recommendations.
 
 
 ### Emacs helper
diff --git a/docs/design.markdown b/docs/design.markdown
index 4081ff8..42dddd2 100644
--- a/docs/design.markdown
+++ b/docs/design.markdown
@@ -1,19 +1,19 @@
 # Design philosophy
 
-Above all Mapnik is about making beautiful maps. This aim drives us to be constantly forward looking. Progress in technology and design are reshaping the art of the possible for maps. Mapnik joins the best ideas in high quality graphics with robust patterns and algorithms for spatial data access. The goal should be no less than enabling a new generation of map makers and gorgous maps.
+Above all Mapnik is about making beautiful maps. This aim drives us to be constantly forward looking. Progress in technology and design are reshaping the art of the possible for maps. Mapnik joins the best ideas in high quality graphics with robust patterns and algorithms for spatial data access. The goal should be no less than enabling a new generation of map makers and gorgeous maps.
 
 Mapnik is a library. It is not a server - rather it's for writing servers. Or for writing desktop graphics engines to display maps. Or for visualizing new galaxies - its up to you. If you have an inclination for scripting and something to render in real world or celestial coordinates, Mapnik is for you. Mapnik is not a full solution, or even half a solution. At its best, Mapnik is a drawing api that provides the right tools for the developer to make sense of, and art from, geodata. 
 
 But Mapnik is not just about drawing on a canvas. Beautiful maps can also be interactive maps and Mapnik aims to provide very flexible, custom access to geo features both in its C++ api and in binding languages. MetaWriters and the Grid renderer are two recent advances that enable highly interactive feature display in mapping applications using JSON serialized features, but more will come.
 
-Mapnik core is simple set of objects providing structures for features and the ability to query, filter, cache, and render them. This design can be lightweight, flexible, and high performance because the core library does have to worry about where data comes from or where it goes after rendering. Datasources are separate plugin libraries loaded at runtime that, when called, provide feature arrays. The core classes make no assumptions about map size, format, or projection. The core is des [...]
+Mapnik core is a simple set of objects providing structures for features and the ability to query, filter, cache, and render them. This design can be lightweight, flexible, and high performance because the core library does not have to worry about where data comes from or where it goes after rendering. Datasources are separate plugin libraries loaded at runtime that, when called, provide feature arrays. The core classes make no assumptions about map size, format, or projection. The core  [...]
 
 Chasing beauty and speed, as technology advances, requires experimentation and a 
 frequent stream of new ideas. To write fast and creative code we strive to avoid hard dependencies on older libraries or libraries that attempt to do too much at the cost of performance. At the same time, to be able to maintain ambitious goals we cannot write boilerplate code or attempt to write robust code for domains outside of mapping and graphics. As such we rely as much as possible on the Boost libraries.
 
-Mapnik is cross platform because the C++ language and the Boost makes this feasible
+Mapnik is cross platform because the C++ language and Boost makes this feasible
 enough it would be a shame not to be. But our development target is the latest
-release of linux, particularly server based distributions, and many Mapnik developers
+release of Linux, particularly server based distributions, and many Mapnik developers
 use OSX as a development environment.
 
 If you are having fun using Mapnik, stick with it. But, Mapnik is not always the right tool, of course. If you have small sets of data (MB's), try just rendering it in a web browser client using a javascript mapping api. Or if you need to set up an array of OGC Web services, use GeoServer. Lastly, if you are looking for a full solution for web cartography, use TileMill.
diff --git a/fonts/build.py b/fonts/build.py
index bf47d6b..1dbcacf 100644
--- a/fonts/build.py
+++ b/fonts/build.py
@@ -1,20 +1,22 @@
-#  This file is part of Mapnik (c++ mapping toolkit)
-#  Copyright (C) 2005 Artem Pavlenko, Jean-Francois Doyon
 #
-#  Mapnik is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or any later version.
-# 
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-# 
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-# 
+# This file is part of Mapnik (c++ mapping toolkit)
+#
+# Copyright (C) 2013 Artem Pavlenko
+#
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
 # 
 
 import os
diff --git a/include/build.py b/include/build.py
index 02d3d00..5629841 100644
--- a/include/build.py
+++ b/include/build.py
@@ -1,14 +1,51 @@
+#
+# This file is part of Mapnik (c++ mapping toolkit)
+#
+# Copyright (C) 2013 Artem Pavlenko
+#
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+#
+
 import os
 from glob import glob
 
 Import('env')
 
 base = './mapnik/'
-subdirs = ['','svg','wkt','grid','json','util','text_placements','formatting']
+subdirs = [
+    '',
+    'svg',
+    'wkt',
+    'cairo',
+    'grid',
+    'json',
+    'util',
+    'group',
+    'text',
+    'text/placements',
+    'text/formatting',
+    'markers_placements'
+    ]
 
 if env['SVG_RENDERER']:
     subdirs.append('svg/output')
 
+if env['GRID_RENDERER']:
+    subdirs.append('grid')
+
 if 'install' in COMMAND_LINE_TARGETS:
     for subdir in subdirs:
         pathdir = os.path.join(base,subdir,'*.hpp')
diff --git a/include/mapnik/agg_helpers.hpp b/include/mapnik/agg_helpers.hpp
index c96c75a..c3bc759 100644
--- a/include/mapnik/agg_helpers.hpp
+++ b/include/mapnik/agg_helpers.hpp
@@ -24,115 +24,38 @@
 #define MAPNIK_AGG_HELPERS_HPP
 
 // mapnik
-#include <mapnik/gamma_method.hpp>
-#include <mapnik/stroke.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
 
-// agg 
-#include "agg_basics.h"
+// agg
 #include "agg_gamma_functions.h"
-#include "agg_math_stroke.h"
-#include "agg_pixfmt_rgba.h"
-#include "agg_scanline_u.h"
-#include "agg_scanline_p.h"
-#include "agg_renderer_outline_aa.h"
-#include "agg_renderer_scanline.h"
-#include "agg_rasterizer_outline_aa.h"
 
 namespace mapnik {
 
-template <typename T0, typename T1>
-void set_gamma_method(T0 const& obj, T1 & ras_ptr)
+template <typename T>
+void set_gamma_method(T & ras_ptr, double gamma, gamma_method_enum method)
 {
-    switch (obj.get_gamma_method())
+    switch (method)
     {
     case GAMMA_POWER:
-        ras_ptr->gamma(agg::gamma_power(obj.get_gamma()));
+        ras_ptr->gamma(agg::gamma_power(gamma));
         break;
     case GAMMA_LINEAR:
-        ras_ptr->gamma(agg::gamma_linear(0.0, obj.get_gamma()));
+        ras_ptr->gamma(agg::gamma_linear(0.0, gamma));
         break;
     case GAMMA_NONE:
         ras_ptr->gamma(agg::gamma_none());
         break;
     case GAMMA_THRESHOLD:
-        ras_ptr->gamma(agg::gamma_threshold(obj.get_gamma()));
+        ras_ptr->gamma(agg::gamma_threshold(gamma));
         break;
     case GAMMA_MULTIPLY:
-        ras_ptr->gamma(agg::gamma_multiply(obj.get_gamma()));
+        ras_ptr->gamma(agg::gamma_multiply(gamma));
         break;
     default:
-        ras_ptr->gamma(agg::gamma_power(obj.get_gamma()));
-    }
-}
-
-template <typename Stroke,typename PathType>
-void set_join_caps(Stroke const& stroke_, PathType & stroke)
-{
-    line_join_e join=stroke_.get_line_join();
-    switch (join)
-    {
-    case MITER_JOIN:
-        stroke.generator().line_join(agg::miter_join);
-        break;
-    case MITER_REVERT_JOIN:
-        stroke.generator().line_join(agg::miter_join);
-        break;
-    case ROUND_JOIN:
-        stroke.generator().line_join(agg::round_join);
-        break;
-    default:
-        stroke.generator().line_join(agg::bevel_join);
-    }
-
-    line_cap_e cap=stroke_.get_line_cap();
-    switch (cap)
-    {
-    case BUTT_CAP:
-        stroke.generator().line_cap(agg::butt_cap);
-        break;
-    case SQUARE_CAP:
-        stroke.generator().line_cap(agg::square_cap);
-        break;
-    default:
-        stroke.generator().line_cap(agg::round_cap);
-    }
-}
-
-
-template <typename Stroke,typename Rasterizer>
-void set_join_caps_aa(Stroke const& stroke_, Rasterizer & ras)
-{
-
-    line_join_e join=stroke_.get_line_join();
-    switch (join)
-    {
-    case MITER_JOIN:
-        ras.line_join(agg::outline_miter_accurate_join);
-        break;
-    case MITER_REVERT_JOIN:
-        ras.line_join(agg::outline_no_join);
-        break;
-    case ROUND_JOIN:
-        ras.line_join(agg::outline_round_join);
-        break;
-    default:
-        ras.line_join(agg::outline_no_join);
-    }
-
-    line_cap_e cap=stroke_.get_line_cap();
-    switch (cap)
-    {
-    case BUTT_CAP:
-        ras.round_cap(false);
-        break;
-    case SQUARE_CAP:
-        ras.round_cap(false);
-        break;
-    default:
-        ras.round_cap(true);
+        ras_ptr->gamma(agg::gamma_power(gamma));
     }
 }
 
 }
 
-#endif //MAPNIK_AGG_HELPERS_HPP
+#endif // MAPNIK_AGG_HELPERS_HPP
diff --git a/include/mapnik/agg_pattern_source.hpp b/include/mapnik/agg_pattern_source.hpp
index 39688e0..14a1c33 100644
--- a/include/mapnik/agg_pattern_source.hpp
+++ b/include/mapnik/agg_pattern_source.hpp
@@ -36,8 +36,9 @@ namespace mapnik
 class pattern_source : private mapnik::noncopyable
 {
 public:
-    pattern_source(image_data_32 const& pattern)
-        : pattern_(pattern) {}
+    pattern_source(image_data_32 const& pattern, double opacity = 1.0)
+        : pattern_(pattern),
+          opacity_(opacity) {}
 
     unsigned int width() const
     {
@@ -50,13 +51,14 @@ public:
     agg::rgba8 pixel(int x, int y) const
     {
         unsigned c = pattern_(x,y);
-        return agg::rgba8(c & 0xff,
-                          (c >> 8) & 0xff,
-                          (c >> 16) & 0xff,
-                          (c >> 24) & 0xff);
+        return agg::rgba8(static_cast<unsigned>((c & 0xff) * opacity_),
+                          static_cast<unsigned>(((c >> 8) & 0xff) * opacity_),
+                          static_cast<unsigned>(((c >> 16) & 0xff) * opacity_),
+                          static_cast<unsigned>(((c >> 24) & 0xff) * opacity_));
     }
 private:
     image_data_32 const& pattern_;
+    double opacity_;
 };
 }
 
diff --git a/include/mapnik/agg_rasterizer.hpp b/include/mapnik/agg_rasterizer.hpp
index 1f93c55..5e82f03 100644
--- a/include/mapnik/agg_rasterizer.hpp
+++ b/include/mapnik/agg_rasterizer.hpp
@@ -31,7 +31,7 @@
 
 namespace mapnik {
 
-struct rasterizer :  agg::rasterizer_scanline_aa<>, mapnik::noncopyable {};
+struct rasterizer :  agg::rasterizer_scanline_aa<agg::rasterizer_sl_clip_int_sat>, mapnik::noncopyable {};
 
 }
 
diff --git a/include/mapnik/agg_renderer.hpp b/include/mapnik/agg_renderer.hpp
index 29db7e4..627ee61 100644
--- a/include/mapnik/agg_renderer.hpp
+++ b/include/mapnik/agg_renderer.hpp
@@ -26,21 +26,21 @@
 // mapnik
 #include <mapnik/config.hpp>            // for MAPNIK_DECL
 #include <mapnik/feature_style_processor.hpp>
-#include <mapnik/font_engine_freetype.hpp>  // for face_manager, etc
 #include <mapnik/noncopyable.hpp>       // for noncopyable
 #include <mapnik/rule.hpp>              // for rule, symbolizers
 #include <mapnik/box2d.hpp>     // for box2d
 #include <mapnik/color.hpp>     // for color
-#include <mapnik/ctrans.hpp>    // for CoordTransform
+#include <mapnik/view_transform.hpp>    // for view_transform
 #include <mapnik/image_compositing.hpp>  // for composite_mode_e
 #include <mapnik/pixel_position.hpp>
 #include <mapnik/request.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/renderer_common.hpp>
+#include <mapnik/image_data.hpp>
+// stl
+#include <memory>
 
-// boost
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
-
-// fwd declaration to avoid depedence on agg headers
+// fwd declaration to avoid dependence on agg headers
 namespace agg { struct trans_affine; }
 
 // fwd declarations to speed up compile
@@ -53,25 +53,27 @@ namespace mapnik {
   class marker;
   class proj_transform;
   struct rasterizer;
+  class image_32;
 }
 
 namespace mapnik {
 
-template <typename T>
-class MAPNIK_DECL agg_renderer : public feature_style_processor<agg_renderer<T> >,
+template <typename T0, typename T1=label_collision_detector4>
+class MAPNIK_DECL agg_renderer : public feature_style_processor<agg_renderer<T0> >,
                                  private mapnik::noncopyable
 {
 
 public:
-    typedef T buffer_type;
-    typedef agg_renderer<T> processor_impl_type;
+    using buffer_type = T0;
+    using processor_impl_type = agg_renderer<T0>;
+    using detector_type = T1;
     // create with default, empty placement detector
-    agg_renderer(Map const& m, T & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
+    agg_renderer(Map const& m, buffer_type & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
     // create with external placement detector, possibly non-empty
-    agg_renderer(Map const &m, T & pixmap, boost::shared_ptr<label_collision_detector4> detector,
+    agg_renderer(Map const &m, buffer_type & pixmap, std::shared_ptr<detector_type> detector,
                  double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
     // pass in mapnik::request object to provide the mutable things per render
-    agg_renderer(Map const& m, request const& req, T & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
+    agg_renderer(Map const& m, request const& req, attributes const& vars, buffer_type & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
     ~agg_renderer();
     void start_map_processing(Map const& map);
     void end_map_processing(Map const& map);
@@ -114,24 +116,38 @@ public:
     void process(markers_symbolizer const& sym,
                  mapnik::feature_impl & feature,
                  proj_transform const& prj_trans);
+    void process(group_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
     void process(debug_symbolizer const& sym,
                  feature_impl & feature,
                  proj_transform const& prj_trans);
 
-    inline bool process(rule::symbolizers const& /*syms*/,
-                        mapnik::feature_impl & /*feature*/,
-                        proj_transform const& /*prj_trans*/)
+    inline bool process(rule::symbolizers const&,
+                        mapnik::feature_impl&,
+                        proj_transform const& )
     {
         // agg renderer doesn't support processing of multiple symbolizers.
         return false;
     }
 
     void painted(bool painted);
+    bool painted();
+
     inline eAttributeCollectionPolicy attribute_collection_policy() const
     {
         return DEFAULT;
     }
 
+    inline double scale_factor() const
+    {
+        return common_.scale_factor_;
+    }
+
+    inline attributes const& variables() const
+    {
+        return common_.vars_;
+    }
 protected:
     template <typename R>
     void debug_draw_box(R& buf, box2d<double> const& extent,
@@ -142,22 +158,18 @@ protected:
 
 private:
     buffer_type & pixmap_;
-    boost::shared_ptr<buffer_type> internal_buffer_;
+    std::shared_ptr<buffer_type> internal_buffer_;
     mutable buffer_type * current_buffer_;
     mutable bool style_level_compositing_;
-    unsigned width_;
-    unsigned height_;
-    double scale_factor_;
-    CoordTransform t_;
-    freetype_engine font_engine_;
-    face_manager<freetype_engine> font_manager_;
-    boost::shared_ptr<label_collision_detector4> detector_;
-    boost::scoped_ptr<rasterizer> ras_ptr;
-    box2d<double> query_extent_;
-    gamma_method_e gamma_method_;
+    const std::unique_ptr<rasterizer> ras_ptr;
+    gamma_method_enum gamma_method_;
     double gamma_;
+    renderer_common common_;
     void setup(Map const& m);
 };
-}
+
+extern template class MAPNIK_DECL agg_renderer<image_32>;
+
+} // namespace mapnik
 
 #endif // MAPNIK_AGG_RENDERER_HPP
diff --git a/include/mapnik/attribute.hpp b/include/mapnik/attribute.hpp
index 4247e6b..9716b38 100644
--- a/include/mapnik/attribute.hpp
+++ b/include/mapnik/attribute.hpp
@@ -25,10 +25,11 @@
 
 // mapnik
 #include <mapnik/value_types.hpp>
-#include <mapnik/geometry.hpp>
+#include <mapnik/value.hpp>
 
 // stl
 #include <string>
+#include <unordered_map>
 
 namespace mapnik {
 
@@ -53,20 +54,33 @@ struct geometry_type_attribute
     V value(F const& f) const
     {
         mapnik::value_integer type = 0;
-        geometry_container::const_iterator itr = f.paths().begin();
-        geometry_container::const_iterator end = f.paths().end();
-        for ( ; itr != end; ++itr)
+        for (auto const& geom : f.paths())
         {
-            if (type != 0 && itr->type() != type)
+            if (type != 0 && geom.type() != type)
             {
                 return value_integer(4); // Collection
             }
-            type = itr->type();
+            type = geom.type();
         }
         return type;
     }
 };
 
+struct global_attribute
+{
+    std::string name;
+    explicit global_attribute(std::string const& name_)
+        : name(name_) {}
+
+    template <typename V, typename C>
+    V const& operator() (C const& ctx)
+    {
+        return ctx.get(name);
+    }
+};
+
+using attributes = std::unordered_map<std::string, value>;
+
 }
 
 #endif // MAPNIK_ATTRIBUTE_HPP
diff --git a/include/mapnik/attribute_collector.hpp b/include/mapnik/attribute_collector.hpp
index f97e5d2..7ed8024 100644
--- a/include/mapnik/attribute_collector.hpp
+++ b/include/mapnik/attribute_collector.hpp
@@ -27,247 +27,285 @@
 #include <mapnik/transform_processor.hpp>
 #include <mapnik/noncopyable.hpp>
 #include <mapnik/attribute.hpp>
-#include <mapnik/symbolizer.hpp>  // for transform_list_ptr
-#include <mapnik/building_symbolizer.hpp>
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/line_pattern_symbolizer.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
-#include <mapnik/point_symbolizer.hpp>
-#include <mapnik/raster_symbolizer.hpp>
-#include <mapnik/shield_symbolizer.hpp>
-#include <mapnik/text_symbolizer.hpp>
-#include <mapnik/markers_symbolizer.hpp>
-#include <mapnik/rule.hpp> // for rule::symbolizers
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/expression.hpp>  // for expression_ptr, etc
-#include <mapnik/expression_node_types.hpp>
 #include <mapnik/expression_node.hpp>
 #include <mapnik/parse_path.hpp>  // for path_processor_type
 #include <mapnik/path_expression.hpp>  // for path_expression_ptr
-#include <mapnik/text_placements/base.hpp>  // for text_placements
+#include <mapnik/text/placements/base.hpp>  // for text_placements
+#include <mapnik/image_scaling.hpp>
+#include <mapnik/group/group_symbolizer_properties.hpp>
+#include <mapnik/group/group_rule.hpp>
+#include <mapnik/util/conversions.hpp>
+#include <mapnik/util/variant.hpp>
 
 // boost
-#include <boost/concept_check.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/algorithm/string/replace.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <set>
+#include <functional> // std::ref
 
 namespace mapnik {
 
 template <typename Container>
-struct expression_attributes : boost::static_visitor<void>
+struct expression_attributes : util::static_visitor<void>
 {
     explicit expression_attributes(Container& names)
         : names_(names) {}
 
-    void operator() (value_type const& x) const
-    {
-        boost::ignore_unused_variable_warning(x);
-    }
-
-    void operator() (geometry_type_attribute const& type) const
-    {
-        // do nothing
-    }
-
     void operator() (attribute const& attr) const
     {
-        names_.insert(attr.name());
+        names_.emplace(attr.name());
     }
 
     template <typename Tag>
     void operator() (binary_node<Tag> const& x) const
     {
-        boost::apply_visitor(*this, x.left);
-        boost::apply_visitor(*this, x.right);
-
+        util::apply_visitor(*this, x.left);
+        util::apply_visitor(*this, x.right);
     }
 
     template <typename Tag>
     void operator() (unary_node<Tag> const& x) const
     {
-        boost::apply_visitor(*this, x.expr);
+        util::apply_visitor(*this, x.expr);
     }
 
     void operator() (regex_match_node const& x) const
     {
-        boost::apply_visitor(*this, x.expr);
+        util::apply_visitor(*this, x.expr);
     }
 
     void operator() (regex_replace_node const& x) const
     {
-        boost::apply_visitor(*this, x.expr);
+        util::apply_visitor(*this, x.expr);
     }
 
+    template <typename T>
+    void operator() (T const&) const {}
+
 private:
     Container& names_;
 };
 
-struct symbolizer_attributes : public boost::static_visitor<>
+class group_attribute_collector : public mapnik::noncopyable
 {
-    symbolizer_attributes(std::set<std::string>& names)
-        : names_(names), f_attr(names) {}
+private:
+    std::set<std::string>& names_;
+    bool expand_index_columns_;
+public:
+    group_attribute_collector(std::set<std::string>& names,
+                              bool expand_index_columns)
+        : names_(names),
+          expand_index_columns_(expand_index_columns) {}
 
-    template <typename T>
-    void operator () (T const&) const {}
+    void operator() (group_symbolizer const& sym);
+};
+
+template <typename Container>
+struct extract_attribute_names : util::static_visitor<void>
+{
+    explicit extract_attribute_names(Container& names)
+        : names_(names),
+          f_attr_(names) {}
 
-    void operator () (text_symbolizer const& sym)
+    void operator() (mapnik::expression_ptr const& expr) const
     {
-        expression_set::const_iterator it;
-        expression_set expressions;
-        sym.get_placement_options()->add_expressions(expressions);
-        for (it=expressions.begin(); it != expressions.end(); it++)
+        if (expr)
         {
-            if (*it) boost::apply_visitor(f_attr, **it);
+            util::apply_visitor(f_attr_, *expr);
         }
-        collect_transform(sym.get_transform());
     }
-
-    void operator () (point_symbolizer const& sym)
+    void operator() (mapnik::transform_type const& expr) const
     {
-        path_expression_ptr const& filename_expr = sym.get_filename();
-        if (filename_expr)
+        if (expr)
         {
-            path_processor_type::collect_attributes(*filename_expr,names_);
+            transform_processor_type::collect_attributes(names_, *expr);
         }
-        collect_transform(sym.get_image_transform());
-        collect_transform(sym.get_transform());
     }
 
-    void operator () (line_symbolizer const& sym)
+    void operator() (mapnik::text_placements_ptr const& expr) const
     {
-        collect_transform(sym.get_transform());
+        if (expr)
+        {
+            expression_set::const_iterator it;
+            expression_set expressions;
+            // TODO - optimize (dane)
+            expr->add_expressions(expressions);
+            for (it=expressions.begin(); it != expressions.end(); ++it)
+            {
+                if (*it) util::apply_visitor(f_attr_, **it);
+            }
+        }
     }
 
-    void operator () (line_pattern_symbolizer const& sym)
+    void operator() (mapnik::path_expression_ptr const& expr) const
     {
-        path_expression_ptr const& filename_expr = sym.get_filename();
-        if (filename_expr)
+        if (expr)
         {
-            path_processor_type::collect_attributes(*filename_expr,names_);
+            path_processor_type::collect_attributes(*expr,names_);
         }
-        collect_transform(sym.get_image_transform());
-        collect_transform(sym.get_transform());
     }
 
-    void operator () (polygon_symbolizer const& sym)
-    {
-        collect_transform(sym.get_transform());
-    }
+    template <typename T>
+    void operator() (T const&) const {}
 
-    void operator () (polygon_pattern_symbolizer const& sym)
+private:
+    Container& names_;
+    expression_attributes<std::set<std::string> > f_attr_;
+};
+
+struct symbolizer_attributes : public util::static_visitor<>
+{
+    symbolizer_attributes(std::set<std::string>& names,
+                          double & filter_factor)
+        : filter_factor_(filter_factor),
+          f_attrs_(names),
+          g_attrs_(names, true) {}
+
+    template <typename T>
+    void operator () (T const& sym)
     {
-        path_expression_ptr const& filename_expr = sym.get_filename();
-        if (filename_expr)
+        for (auto const& prop : sym.properties)
         {
-            path_processor_type::collect_attributes(*filename_expr,names_);
+            util::apply_visitor(f_attrs_, prop.second);
         }
-        collect_transform(sym.get_image_transform());
-        collect_transform(sym.get_transform());
     }
 
-    void operator () (shield_symbolizer const& sym)
+    void operator () (raster_symbolizer const& sym)
     {
-        expression_set::const_iterator it;
-        expression_set expressions;
-        sym.get_placement_options()->add_expressions(expressions);
-        for (it=expressions.begin(); it != expressions.end(); it++)
+        boost::optional<double> filter_factor = get_optional<double>(sym, keys::filter_factor);
+        if (filter_factor)
         {
-            if (*it) boost::apply_visitor(f_attr, **it);
+            filter_factor_ = *filter_factor;
         }
-
-        path_expression_ptr const& filename_expr = sym.get_filename();
-        if (filename_expr)
+        else
         {
-            path_processor_type::collect_attributes(*filename_expr,names_);
+            boost::optional<scaling_method_e> scaling_method = get_optional<scaling_method_e>(sym, keys::scaling);
+            if (scaling_method && *scaling_method != SCALING_NEAR)
+            {
+                filter_factor_ = 2;
+            }
         }
-        collect_transform(sym.get_image_transform());
-        collect_transform(sym.get_transform());
-    }
-
-    void operator () (markers_symbolizer const& sym)
-    {
-        expression_ptr const& height_expr = sym.get_height();
-        if (height_expr)
-        {
-            boost::apply_visitor(f_attr,*height_expr);
-        }
-        expression_ptr const& width_expr = sym.get_width();
-        if (width_expr)
+        for (auto const& prop : sym.properties)
         {
-            boost::apply_visitor(f_attr,*width_expr);
+            util::apply_visitor(f_attrs_, prop.second);
         }
-        collect_transform(sym.get_image_transform());
-        collect_transform(sym.get_transform());
     }
 
-    void operator () (building_symbolizer const& sym)
+    void operator () (group_symbolizer const& sym)
     {
-        expression_ptr const& height_expr = sym.height();
-        if (height_expr)
-        {
-            boost::apply_visitor(f_attr,*height_expr);
-        }
-        collect_transform(sym.get_transform());
+        g_attrs_(sym);
     }
-    // TODO - support remaining syms
 
 private:
-    std::set<std::string>& names_;
-    expression_attributes<std::set<std::string> > f_attr;
-    void collect_transform(transform_list_ptr const& trans_expr)
-    {
-        if (trans_expr)
-        {
-            transform_processor_type::collect_attributes(names_, *trans_expr);
-        }
-    }
+    double & filter_factor_;
+    extract_attribute_names<std::set<std::string> > f_attrs_;
+    group_attribute_collector g_attrs_;
 };
 
 
 class attribute_collector : public mapnik::noncopyable
 {
 private:
-    std::set<std::string>& names_;
+    std::set<std::string> & names_;
+    double filter_factor_;
     expression_attributes<std::set<std::string> > f_attr;
 public:
 
     attribute_collector(std::set<std::string>& names)
-        : names_(names), f_attr(names) {}
-
+        : names_(names),
+          filter_factor_(1.0),
+          f_attr(names) {}
     template <typename RuleType>
     void operator() (RuleType const& r)
     {
         typename RuleType::symbolizers const& symbols = r.get_symbolizers();
-        typename RuleType::symbolizers::const_iterator symIter=symbols.begin();
-        symbolizer_attributes s_attr(names_);
-        while (symIter != symbols.end())
+        symbolizer_attributes s_attr(names_,filter_factor_);
+        for (auto const& sym : symbols)
         {
-            boost::apply_visitor(s_attr,*symIter++);
+            util::apply_visitor(std::ref(s_attr), sym);
         }
 
         expression_ptr const& expr = r.get_filter();
-        boost::apply_visitor(f_attr,*expr);
+        util::apply_visitor(f_attr,*expr);
+    }
+
+    double get_filter_factor() const
+    {
+        return filter_factor_;
     }
 };
 
-struct directive_collector : public boost::static_visitor<>
+
+inline void group_attribute_collector::operator() (group_symbolizer const& sym)
 {
-    directive_collector(double & filter_factor)
-        : filter_factor_(filter_factor) {}
+    // find all column names referenced in the group symbolizer
+    std::set<std::string> group_columns;
+    attribute_collector column_collector(group_columns);
+    expression_attributes<std::set<std::string> > rk_attr(group_columns);
+
+    // get columns from symbolizer repeat key
+    expression_ptr repeat_key = get<mapnik::expression_ptr>(sym, keys::repeat_key);
+    if (repeat_key)
+    {
+        util::apply_visitor(rk_attr, *repeat_key);
+    }
 
-    template <typename T>
-    void operator () (T const&) const {}
+    // get columns from child rules and symbolizers
+    group_symbolizer_properties_ptr props = get<group_symbolizer_properties_ptr>(sym, keys::group_properties);
+    if (props)
+    {
+        for (auto const& rule : props->get_rules())
+        {
+            // note that this recurses down on to the symbolizer
+            // internals too, so we get all free variables.
+            column_collector(*rule);
+            // still need to collect repeat key columns
+            if (rule->get_repeat_key())
+            {
+                util::apply_visitor(rk_attr, *(rule->get_repeat_key()));
+            }
+        }
+    }
 
-    void operator () (raster_symbolizer const& sym)
+    // get indexed column names
+    int start = get<value_integer>(sym, keys::start_column);
+    int end = start + get<value_integer>(sym, keys::num_columns);
+    for (auto const& col_name : group_columns)
     {
-        filter_factor_ = sym.calculate_filter_factor();
+        if (expand_index_columns_ && col_name.find('%') != std::string::npos)
+        {
+            // Note: ignore column name if it is '%' by itself.
+            // '%' is a special case to access the index value itself,
+            // rather than acessing indexed columns from data source.
+            if (col_name.size() > 1)
+            {
+                // Indexed column name. add column name for each index value.
+                for (int col_idx = start; col_idx < end; ++col_idx)
+                {
+                    std::string col_idx_str;
+                    if (mapnik::util::to_string(col_idx_str,col_idx))
+                    {
+                        std::string col_idx_name = col_name;
+                        boost::replace_all(col_idx_name, "%", col_idx_str);
+                        names_.emplace(col_idx_name);
+                    }
+                }
+            }
+        }
+        else
+        {
+            // This is not an indexed column, or we are ignoring indexes.
+            // Insert the name as is.
+            names_.emplace(col_name);
+        }
     }
-private:
-    double & filter_factor_;
-};
+}
 
 } // namespace mapnik
 
diff --git a/include/mapnik/attribute_descriptor.hpp b/include/mapnik/attribute_descriptor.hpp
index beb8ede..70368ea 100644
--- a/include/mapnik/attribute_descriptor.hpp
+++ b/include/mapnik/attribute_descriptor.hpp
@@ -107,18 +107,6 @@ private:
     int precision_;
 };
 
-template <typename charT,typename traits>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             attribute_descriptor const& ad)
-{
-    out << "name=" << ad.get_name() << "\n";
-    out << "type=" << ad.get_type() << "\n";
-    out << "size=" << ad.get_size() << "\n";
-    return out;
-}
-
-
 }
 
 #endif // MAPNIK_ATTRIBUTE_DESCRIPTOR_HPP
diff --git a/include/mapnik/boolean.hpp b/include/mapnik/boolean.hpp
index 99255be..bbee2b5 100644
--- a/include/mapnik/boolean.hpp
+++ b/include/mapnik/boolean.hpp
@@ -22,23 +22,28 @@
 #ifndef MAPNIK_BOOLEAN_HPP
 #define MAPNIK_BOOLEAN_HPP
 
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/util/conversions.hpp>
+
 // std
-#include <istream>
+#include <iosfwd>
 #include <algorithm>
 #include <string>
-#include <iostream>
+//#include <istream>
+//#include <ostream>
 
 namespace mapnik
 {
 
-// Helper for class bool
-class boolean {
+class MAPNIK_DECL boolean_type
+{
 public:
-    boolean()
+    boolean_type()
         : b_(false)  {}
-    boolean(bool b)
+    boolean_type(bool b)
         : b_(b) {}
-    boolean(boolean const& b)
+    boolean_type(boolean_type const& b)
         : b_(b.b_) {}
 
     operator bool() const
@@ -46,7 +51,7 @@ public:
         return b_;
     }
 
-    boolean & operator =(boolean const& other)
+    boolean_type & operator =(boolean_type const& other)
     {
         if (this == &other)
             return *this;
@@ -58,37 +63,24 @@ private:
     bool b_;
 };
 
-// Special stream input operator for boolean values
+// Special stream input operator for boolean_type values
 template <typename charT, typename traits>
 std::basic_istream<charT, traits> &
-operator >> ( std::basic_istream<charT, traits> & s, boolean & b )
+operator >> ( std::basic_istream<charT, traits> & s, boolean_type & b )
 {
-    std::string word;
-    s >> word;
-    std::transform(word.begin(), word.end(), word.begin(), ::tolower);
     if ( s )
     {
-        if ( word == "true" || word == "yes" || word == "on" ||
-             word == "1")
-        {
-            b = true;
-        }
-        else if ( word == "false" || word == "no" || word == "off" ||
-                  word == "0")
-        {
-            b = false;
-        }
-        else
-        {
-            s.setstate( std::ios::failbit );
-        }
+        std::string word;
+        s >> word;
+        bool result;
+        if (util::string2bool(word,result)) b = result;
     }
     return s;
 }
 
 template <typename charT, typename traits>
 std::basic_ostream<charT, traits> &
-operator << ( std::basic_ostream<charT, traits> & s, boolean const& b )
+operator << ( std::basic_ostream<charT, traits> & s, boolean_type const& b )
 {
     s << ( b ? "true" : "false" );
     return s;
diff --git a/include/mapnik/box2d.hpp b/include/mapnik/box2d.hpp
index 41909e6..b3bb22f 100644
--- a/include/mapnik/box2d.hpp
+++ b/include/mapnik/box2d.hpp
@@ -30,9 +30,6 @@
 // boost
 #include <boost/operators.hpp>
 
-// stl
-#include <iomanip>
-
 // agg
 // forward declare so that apps using mapnik do not need agg headers
 namespace agg {
@@ -51,18 +48,28 @@ template <typename T> class MAPNIK_DECL box2d
                                                               boost::multipliable2<box2d<T>, T > > > >
 {
 public:
-    typedef box2d<T> box2d_type;
+    using box2d_type = box2d<T>;
 private:
     T minx_;
     T miny_;
     T maxx_;
     T maxy_;
+    friend inline void swap(box2d_type & lhs, box2d_type & rhs)
+    {
+        using std::swap;
+        swap(lhs.minx_, rhs.minx_);
+        swap(lhs.miny_, rhs.miny_);
+        swap(lhs.maxx_, rhs.maxx_);
+        swap(lhs.maxy_, rhs.maxy_);
+    }
 public:
     box2d();
     box2d(T minx,T miny,T maxx,T maxy);
-    box2d(const coord<T,2>& c0,const coord<T,2>& c1);
-    box2d(const box2d_type& rhs);
-    box2d(const box2d_type& rhs, const agg::trans_affine& tr);
+    box2d(coord<T,2> const& c0, coord<T,2> const& c1);
+    box2d(box2d_type const& rhs);
+    box2d(box2d_type const& rhs, agg::trans_affine const& tr);
+    box2d(box2d_type&& rhs);
+    box2d_type& operator=(box2d_type other);
     T minx() const;
     T miny() const;
     T maxx() const;
@@ -77,29 +84,33 @@ public:
     void height(T h);
     coord<T,2> center() const;
     void expand_to_include(T x,T y);
-    void expand_to_include(const coord<T,2>& c);
-    void expand_to_include(const box2d_type& other);
-    bool contains(const coord<T,2> &c) const;
+    void expand_to_include(coord<T,2> const& c);
+    void expand_to_include(box2d_type const& other);
+    bool contains(coord<T,2> const& c) const;
     bool contains(T x,T y) const;
-    bool contains(const box2d_type &other) const;
-    bool intersects(const coord<T,2> &c) const;
+    bool contains(box2d_type const& other) const;
+    bool intersects(coord<T,2> const& c) const;
     bool intersects(T x,T y) const;
-    bool intersects(const box2d_type &other) const;
-    box2d_type intersect(const box2d_type& other) const;
-    bool operator==(const box2d_type &other) const;
+    bool intersects(box2d_type const& other) const;
+    box2d_type intersect(box2d_type const& other) const;
+    bool operator==(box2d_type const& other) const;
     void re_center(T cx,T cy);
-    void re_center(const coord<T,2>& c);
+    void re_center(coord<T,2> const& c);
     void init(T x0,T y0,T x1,T y1);
-    void clip(const box2d_type &other);
+    void clip(box2d_type const& other);
     void pad(T padding);
-    bool from_string(std::string const& s);
+    bool from_string(std::string const& str);
     bool valid() const;
+    void move(T x, T y);
+    std::string to_string() const;
 
     // define some operators
     box2d_type& operator+=(box2d_type const& other);
     box2d_type& operator*=(T);
     box2d_type& operator/=(T);
     T operator[](int index) const;
+    box2d_type operator +(T other) const; //enlarge box by given amount
+    box2d_type& operator +=(T other); //enlarge box by given amount
 
     // compute the bounding box of this one transformed
     box2d_type  operator* (agg::trans_affine const& tr) const;
@@ -111,13 +122,7 @@ inline std::basic_ostream<charT,traits>&
 operator << (std::basic_ostream<charT,traits>& out,
              const box2d<T>& e)
 {
-    std::basic_ostringstream<charT,traits> s;
-    s.copyfmt(out);
-    s.width(0);
-    s << "box2d(" << std::fixed << std::setprecision(16)
-      << e.minx() << ',' << e.miny() << ','
-      << e.maxx() << ',' << e.maxy() << ')';
-    out << s.str();
+    out << e.to_string();
     return out;
 }
 }
diff --git a/include/mapnik/building_symbolizer.hpp b/include/mapnik/building_symbolizer.hpp
deleted file mode 100644
index ac0d4bb..0000000
--- a/include/mapnik/building_symbolizer.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_BUILDING_SYMBOLIZER_HPP
-#define MAPNIK_BUILDING_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/color.hpp>
-#include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/expression.hpp>
-
-namespace mapnik
-{
-
-struct MAPNIK_DECL building_symbolizer : public symbolizer_base
-{
-    building_symbolizer();
-    building_symbolizer(color const& fill, expression_ptr const& height);
-    color const& get_fill() const;
-    void set_fill(color const& fill);
-    expression_ptr const& height() const;
-    void set_height(expression_ptr const& height);
-    void set_opacity(double opacity);
-    double get_opacity() const;
-
-private:
-    color fill_;
-    expression_ptr height_;
-    double opacity_;
-};
-
-}
-
-#endif // MAPNIK_BUILDING_SYMBOLIZER_HPP
diff --git a/include/mapnik/cairo/cairo_context.hpp b/include/mapnik/cairo/cairo_context.hpp
new file mode 100644
index 0000000..93b8128
--- /dev/null
+++ b/include/mapnik/cairo/cairo_context.hpp
@@ -0,0 +1,473 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+
+#ifndef MAPNIK_CAIRO_CONTEXT_HPP
+#define MAPNIK_CAIRO_CONTEXT_HPP
+
+// mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/color.hpp>
+#include <mapnik/image_data.hpp>
+#include <mapnik/image_compositing.hpp>
+#include <mapnik/font_engine_freetype.hpp>
+#include <mapnik/gradient.hpp>
+#include <mapnik/text/glyph_positions.hpp>
+#include <mapnik/vertex.hpp>
+#include <mapnik/noncopyable.hpp>
+#include <mapnik/symbolizer_base.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+
+// stl
+#include <memory>
+
+// cairo
+#include <cairo.h>
+
+// stl
+#include <map>
+#include <stdexcept>
+
+// agg
+#include "agg_basics.h"
+
+namespace mapnik {
+
+template <typename T> class box2d;
+
+using ErrorStatus = cairo_status_t;
+
+/// Throws the appropriate exception, if exceptions are enabled.
+inline void throw_exception(ErrorStatus status)
+{
+    throw std::runtime_error(std::string("cairo: ") + cairo_status_to_string(status));
+}
+
+//We inline this because it is called so often.
+inline void check_status_and_throw_exception(ErrorStatus status)
+{
+    if(status != CAIRO_STATUS_SUCCESS)
+        throw_exception(status);
+}
+
+template<class T>
+void check_object_status_and_throw_exception(T const& object)
+{
+    check_status_and_throw_exception(object.get_status());
+}
+
+class cairo_face : private mapnik::noncopyable
+{
+public:
+    cairo_face(std::shared_ptr<font_library> const& library, face_ptr const& face);
+    ~cairo_face();
+    cairo_font_face_t * face() const;
+private:
+    class handle
+    {
+    public:
+        handle(std::shared_ptr<font_library> const& library, face_ptr const& face)
+            : library_(library), face_(face) {}
+
+    private:
+        std::shared_ptr<font_library> library_;
+        face_ptr face_;
+    };
+
+    static void destroy(void *data)
+    {
+        handle *h = static_cast<handle *>(data);
+        delete h;
+    }
+
+private:
+    face_ptr face_;
+    cairo_font_face_t *c_face_;
+};
+
+using cairo_face_ptr = std::shared_ptr<cairo_face>;
+
+class cairo_face_manager : private mapnik::noncopyable
+{
+public:
+    cairo_face_manager(std::shared_ptr<font_library> library);
+    cairo_face_ptr get_face(face_ptr face);
+
+private:
+    using cairo_face_cache = std::map<face_ptr,cairo_face_ptr>;
+    std::shared_ptr<font_library> font_library_;
+    cairo_face_cache cache_;
+};
+
+class cairo_pattern : private mapnik::noncopyable
+{
+public:
+    explicit cairo_pattern(image_data_32 const& data, double opacity = 1.0)
+    {
+        int pixels = data.width() * data.height();
+        const unsigned int *in_ptr = data.getData();
+        const unsigned int *in_end = in_ptr + pixels;
+        unsigned int *out_ptr;
+
+        surface_ = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, data.width(), data.height());
+
+        out_ptr = reinterpret_cast<unsigned int *>(cairo_image_surface_get_data(surface_));
+
+        while (in_ptr < in_end)
+        {
+            unsigned int in = *in_ptr++;
+            unsigned int r = static_cast<unsigned>(((in >> 0) & 0xff) * opacity);
+            unsigned int g = static_cast<unsigned>(((in >> 8) & 0xff) * opacity);
+            unsigned int b = static_cast<unsigned>(((in >> 16) & 0xff) * opacity);
+            unsigned int a = static_cast<unsigned>(((in >> 24) & 0xff) * opacity);
+
+            //r = r * a / 255;
+            //g = g * a / 255;
+            //b = b * a / 255;
+
+            *out_ptr++ = (a << 24) | (r << 16) | (g << 8) | b;
+        }
+        // mark the surface as dirty as we've modified it behind cairo's back
+        cairo_surface_mark_dirty(surface_);
+        pattern_ = cairo_pattern_create_for_surface(surface_);
+    }
+
+    ~cairo_pattern()
+    {
+        if (surface_) cairo_surface_destroy(surface_);
+        if (pattern_) cairo_pattern_destroy(pattern_);
+    }
+
+    void set_matrix(cairo_matrix_t const& matrix)
+    {
+        cairo_pattern_set_matrix(pattern_, &matrix);
+    }
+
+    void set_origin(double x, double y)
+    {
+        cairo_matrix_t matrix;
+        cairo_pattern_get_matrix(pattern_,&matrix);
+        matrix.x0 = -x;
+        matrix.y0 = -y;
+        cairo_pattern_set_matrix(pattern_,&matrix);
+    }
+
+    void set_extend(cairo_extend_t extend)
+    {
+        cairo_pattern_set_extend(pattern_, extend);
+    }
+
+    void set_filter(cairo_filter_t filter)
+    {
+        cairo_pattern_set_filter(pattern_, filter);
+    }
+
+    cairo_pattern_t * pattern() const
+    {
+        return pattern_;
+    }
+
+private:
+    cairo_surface_t * surface_;
+    cairo_pattern_t *  pattern_;
+};
+
+
+class cairo_gradient : private mapnik::noncopyable
+{
+public:
+    cairo_gradient(mapnik::gradient const& grad, double opacity=1.0)
+    {
+        double x1,x2,y1,y2,rad;
+        grad.get_control_points(x1,y1,x2,y2,rad);
+        if (grad.get_gradient_type() == LINEAR)
+        {
+            pattern_ = cairo_pattern_create_linear(x1, y1, x2, y2);
+        }
+        else
+        {
+            pattern_ = cairo_pattern_create_radial(x1, y1, 0,  x2, y2, rad);
+        }
+
+        units_ = grad.get_units();
+
+        for ( mapnik::stop_pair const& st : grad.get_stop_array() )
+        {
+            mapnik::color const& stop_color = st.second;
+            double r= static_cast<double> (stop_color.red())/255.0;
+            double g= static_cast<double> (stop_color.green())/255.0;
+            double b= static_cast<double> (stop_color.blue())/255.0;
+            double a= static_cast<double> (stop_color.alpha())/255.0;
+            cairo_pattern_add_color_stop_rgba(pattern_,st.first, r, g, b, a*opacity);
+        }
+
+        double m[6];
+        agg::trans_affine tr = grad.get_transform();
+        tr.invert();
+        tr.store_to(m);
+        cairo_matrix_t matrix;
+        cairo_matrix_init(&matrix,m[0],m[1],m[2],m[3],m[4],m[5]);
+        cairo_pattern_set_matrix(pattern_, &matrix);
+    }
+
+    ~cairo_gradient()
+    {
+        if (pattern_)
+            cairo_pattern_destroy(pattern_);
+    }
+
+
+    cairo_pattern_t * gradient() const
+    {
+        return pattern_;
+    }
+
+    gradient_unit_e units() const
+    {
+        return units_;
+    }
+
+private:
+    cairo_pattern_t * pattern_;
+    gradient_unit_e units_;
+
+};
+
+struct cairo_closer
+{
+    void operator() (cairo_t * obj)
+    {
+        if (obj) cairo_destroy(obj);
+    }
+};
+
+struct cairo_surface_closer
+{
+    void operator() (cairo_surface_t * surface)
+    {
+        if (surface) cairo_surface_destroy(surface);
+    }
+};
+
+using cairo_ptr = std::shared_ptr<cairo_t>;
+using cairo_surface_ptr = std::shared_ptr<cairo_surface_t>;
+
+inline cairo_ptr create_context(cairo_surface_ptr const& surface)
+{
+    return cairo_ptr(cairo_create(&*surface),cairo_closer());
+}
+
+class cairo_context : private mapnik::noncopyable
+{
+public:
+
+    cairo_context(cairo_ptr const& cairo);
+
+    inline ErrorStatus get_status() const
+    {
+        return cairo_status(cairo_.get());
+    }
+
+    void clip();
+    void show_page();
+    void set_color(color const &color, double opacity = 1.0);
+    void set_color(double r, double g, double b, double opacity = 1.0);
+    void set_operator(composite_mode_e comp_op);
+    void set_line_join(line_join_e join);
+    void set_line_cap(line_cap_e cap);
+    void set_miter_limit(double limit);
+    void set_line_width(double width);
+    void set_dash(dash_array const &dashes, double scale_factor);
+    void set_fill_rule(cairo_fill_rule_t fill_rule);
+    void move_to(double x, double y);
+    void curve_to(double ct1_x, double ct1_y, double ct2_x, double ct2_y, double end_x, double end_y);
+    void close_path();
+    void line_to(double x, double y);
+    void rectangle(double x, double y, double w, double h);
+    void stroke();
+    void fill();
+    void paint();
+    void set_pattern(cairo_pattern const& pattern);
+    void set_gradient(cairo_gradient const& pattern, box2d<double> const& bbox);
+    void add_image(double x, double y, image_data_32 & data, double opacity = 1.0);
+    void add_image(agg::trans_affine const& tr, image_data_32 & data, double opacity = 1.0);
+    void set_font_face(cairo_face_manager & manager, face_ptr face);
+    void set_font_matrix(cairo_matrix_t const& matrix);
+    void set_matrix(cairo_matrix_t const& matrix);
+    void transform(cairo_matrix_t const& matrix);
+    void translate(double x, double y);
+    void save();
+    void restore();
+    void show_glyph(unsigned long index, pixel_position const& pos);
+    void glyph_path(unsigned long index, pixel_position const& pos);
+    void add_text(glyph_positions const& pos,
+                  cairo_face_manager & manager,
+                  face_manager_freetype & font_manager,
+                  composite_mode_e comp_op = src_over,
+                  composite_mode_e halo_comp_op = src_over,
+                  double scale_factor = 1.0);
+
+    template <typename T>
+    void add_path(T& path, unsigned start_index = 0)
+    {
+        double x, y;
+        path.rewind(start_index);
+        for (unsigned cm = path.vertex(&x, &y); cm != SEG_END; cm = path.vertex(&x, &y))
+        {
+            if (cm == SEG_MOVETO)
+            {
+                move_to(x, y);
+            }
+            else if (cm == SEG_LINETO)
+            {
+                line_to(x, y);
+            }
+            else if (cm == SEG_CLOSE)
+            {
+                close_path();
+            }
+        }
+    }
+
+    template <typename T>
+    void add_agg_path(T& path, unsigned start_index = 0)
+    {
+        double x=0;
+        double y=0;
+
+        path.rewind(start_index);
+
+        for (unsigned cm = path.vertex(&x, &y); !agg::is_stop(cm); cm = path.vertex(&x, &y))
+        {
+            if (agg::is_move_to(cm))
+            {
+                move_to(x, y);
+            }
+            else if (agg::is_drawing(cm))
+            {
+                if (agg::is_curve3(cm))
+                {
+                    double end_x=0;
+                    double end_y=0;
+
+                    MAPNIK_LOG_WARN(cairo_renderer) << "Curve 3 not implemented";
+
+                    path.vertex(&end_x, &end_y);
+
+                    curve_to(x,y,x,y,end_x,end_y);
+                }
+                else if (agg::is_curve4(cm))
+                {
+                    double ct2_x=0;
+                    double ct2_y=0;
+                    double end_x=0;
+                    double end_y=0;
+
+                    path.vertex(&ct2_x, &ct2_y);
+                    path.vertex(&end_x, &end_y);
+
+                    curve_to(x,y,ct2_x,ct2_y,end_x,end_y);
+                }
+                else if (agg::is_line_to(cm))
+                {
+                    line_to(x, y);
+                }
+                else
+                {
+                    MAPNIK_LOG_WARN(cairo_renderer) << "Unimplemented drawing command: " << cm;
+                    move_to(x, y);
+                }
+            }
+            else if (agg::is_close(cm))
+            {
+                close_path();
+            }
+            else
+            {
+                MAPNIK_LOG_WARN(cairo_renderer) << "Unimplemented path command: " << cm;
+            }
+        }
+    }
+
+private:
+    cairo_ptr cairo_;
+};
+
+template <typename Context>
+struct line_pattern_rasterizer
+{
+    line_pattern_rasterizer(Context & context, cairo_pattern & pattern, unsigned width, unsigned height)
+        : context_(context),
+          pattern_(pattern),
+          width_(width),
+          height_(height) {}
+
+    template <typename T>
+    void add_path(T & path, unsigned start_index = 0)
+    {
+        double length = 0.0;
+        double x0 = 0.0;
+        double y0 = 0.0;
+        double x, y;
+        path.rewind(start_index);
+        for (unsigned cm = path.vertex(&x, &y); cm != SEG_END; cm = path.vertex(&x, &y))
+        {
+            if (cm == SEG_MOVETO)
+            {
+                length = 0.0;
+            }
+            else if (cm == SEG_LINETO)
+            {
+                double dx = x - x0;
+                double dy = y - y0;
+                double angle = std::atan2(dy, dx);
+                double offset = std::fmod(length, static_cast<double>(width_));
+
+                cairo_matrix_t matrix;
+                cairo_matrix_init_identity(&matrix);
+                cairo_matrix_translate(&matrix, x0, y0);
+                cairo_matrix_rotate(&matrix, angle);
+                cairo_matrix_translate(&matrix, -offset, 0.5 * height_);
+                cairo_matrix_invert(&matrix);
+                pattern_.set_matrix(matrix);
+                context_.set_pattern(pattern_);
+                context_.move_to(x0, y0);
+                context_.line_to(x, y);
+                context_.stroke();
+                length = length + std::hypot(x - x0, y - y0);
+            }
+
+            x0 = x;
+            y0 = y;
+        }
+    }
+
+    Context & context_;
+    cairo_pattern & pattern_;
+    unsigned width_;
+    unsigned height_;
+};
+
+}
+
+
+#endif // MAPNIK_CAIRO_CONTEXT_HPP
diff --git a/include/mapnik/cairo/cairo_render_vector.hpp b/include/mapnik/cairo/cairo_render_vector.hpp
new file mode 100644
index 0000000..3016fad
--- /dev/null
+++ b/include/mapnik/cairo/cairo_render_vector.hpp
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+#ifndef MAPNIK_CAIRO_RENDER_VECTOR_HPP
+#define MAPNIK_CAIRO_RENDER_VECTOR_HPP
+
+// mapnik
+#include <mapnik/svg/svg_path_adapter.hpp>
+
+namespace agg { struct trans_affine; }
+
+namespace mapnik {
+
+class cairo_context;
+struct pixel_position;
+template <typename T> class box2d;
+namespace svg { struct path_attributes; }
+
+void render_vector_marker(cairo_context & context, pixel_position const& pos,
+                          svg::svg_path_adapter & svg_path, box2d<double> const& bbox,
+                          agg::pod_bvector<svg::path_attributes> const & attributes,
+                          agg::trans_affine const& tr, double opacity, bool recenter);
+
+}
+
+#endif // MAPNIK_CAIRO_RENDER_VECTOR_HPP
+
+#endif
\ No newline at end of file
diff --git a/include/mapnik/cairo/cairo_renderer.hpp b/include/mapnik/cairo/cairo_renderer.hpp
new file mode 100644
index 0000000..fe9f819
--- /dev/null
+++ b/include/mapnik/cairo/cairo_renderer.hpp
@@ -0,0 +1,190 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+#ifndef MAPNIK_CAIRO_RENDERER_HPP
+#define MAPNIK_CAIRO_RENDERER_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/feature_style_processor.hpp>
+#include <mapnik/noncopyable.hpp>
+#include <mapnik/rule.hpp> // for all symbolizers
+#include <mapnik/cairo/cairo_context.hpp>
+#include <mapnik/renderer_common.hpp>
+
+// stl
+#include <memory>
+
+namespace agg {
+struct trans_affine;
+}
+
+namespace mapnik {
+
+class Map;
+class feature_impl;
+class feature_type_style;
+class label_collision_detector4;
+class layer;
+class marker;
+class proj_transform;
+class request;
+struct pixel_position;
+struct cairo_save_restore
+{
+    cairo_save_restore(cairo_context & context)
+        : context_(context)
+    {
+        context_.save();
+    }
+    ~cairo_save_restore()
+    {
+        context_.restore();
+    }
+    cairo_context & context_;
+};
+
+template <typename T>
+class MAPNIK_DECL cairo_renderer : public feature_style_processor<cairo_renderer<T> >,
+                                   private mapnik::noncopyable
+{
+public:
+    using processor_impl_type = cairo_renderer<T>;
+    cairo_renderer(Map const& m,
+                   T const& obj,
+                   double scale_factor=1.0,
+                   unsigned offset_x=0,
+                   unsigned offset_y=0);
+    cairo_renderer(Map const& m,
+                   request const& req,
+                   attributes const& vars,
+                   T const& obj,
+                   double scale_factor=1.0,
+                   unsigned offset_x=0,
+                   unsigned offset_y=0);
+    cairo_renderer(Map const& m,
+                   T const& obj,
+                   std::shared_ptr<label_collision_detector4> detector,
+                   double scale_factor=1.0,
+                   unsigned offset_x=0,
+                   unsigned offset_y=0);
+
+    ~cairo_renderer();
+    void start_map_processing(Map const& map);
+    void end_map_processing(Map const& map);
+    void start_layer_processing(layer const& lay, box2d<double> const& query_extent);
+    void end_layer_processing(layer const& lay);
+    void start_style_processing(feature_type_style const& st);
+    void end_style_processing(feature_type_style const& st);
+    void process(point_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(line_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(line_pattern_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(polygon_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(polygon_pattern_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(raster_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(shield_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(text_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(building_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(markers_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(group_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    void process(debug_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
+    inline bool process(rule::symbolizers const& /*syms*/,
+                        mapnik::feature_impl & /*feature*/,
+                        proj_transform const& /*prj_trans*/)
+    {
+        // cairo renderer doesn't support processing of multiple symbolizers.
+        return false;
+    }
+
+    bool painted()
+    {
+        return true;
+    }
+
+    void painted(bool /*painted*/)
+    {
+        // nothing to do
+    }
+
+    inline eAttributeCollectionPolicy attribute_collection_policy() const
+    {
+        return DEFAULT;
+    }
+
+    inline double scale_factor() const
+    {
+        return common_.scale_factor_;
+    }
+
+    inline attributes const& variables() const
+    {
+        return common_.vars_;
+    }
+
+    void render_marker(pixel_position const& pos,
+                       marker const& marker,
+                       agg::trans_affine const& mtx,
+                       double opacity=1.0,
+                       bool recenter=true);
+    void render_box(box2d<double> const& b);
+protected:
+    Map const& m_;
+    cairo_context context_;
+    renderer_common common_;
+    cairo_face_manager face_manager_;
+    void setup(Map const& m);
+
+};
+
+extern template class MAPNIK_DECL cairo_renderer<cairo_ptr>;
+
+}
+
+#endif // MAPNIK_CAIRO_RENDERER_HPP
+
+#endif
diff --git a/include/mapnik/cairo_context.hpp b/include/mapnik/cairo_context.hpp
deleted file mode 100644
index 16a55e6..0000000
--- a/include/mapnik/cairo_context.hpp
+++ /dev/null
@@ -1,417 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2013 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-
-#ifndef MAPNIK_CAIRO_CONTEXT_HPP
-#define MAPNIK_CAIRO_CONTEXT_HPP
-
-// mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/box2d.hpp>
-#include <mapnik/color.hpp>
-#include <mapnik/stroke.hpp>
-#include <mapnik/image_data.hpp>
-#include <mapnik/image_compositing.hpp>
-#include <mapnik/font_engine_freetype.hpp>
-#include <mapnik/gradient.hpp>
-#include <mapnik/vertex.hpp>
-#include <mapnik/noncopyable.hpp>
-
-// boost
-#include <boost/shared_ptr.hpp>
-
-// cairo
-#include <cairo.h>
-
-// stl
-#include <map>
-#include <vector>
-#include <stdexcept>
-
-// agg
-#include "agg_basics.h"
-
-namespace mapnik {
-
-class text_path;
-
-typedef cairo_status_t ErrorStatus;
-
-/// Throws the appropriate exception, if exceptions are enabled.
-inline void throw_exception(ErrorStatus status)
-{
-    throw std::runtime_error("cairo: fixme");
-}
-
-//We inline this because it is called so often.
-inline void check_status_and_throw_exception(ErrorStatus status)
-{
-    if(status != CAIRO_STATUS_SUCCESS)
-        throw_exception(status);
-}
-
-template<class T>
-void check_object_status_and_throw_exception(const T& object)
-{
-    check_status_and_throw_exception(object.get_status());
-}
-
-class cairo_face : private mapnik::noncopyable
-{
-public:
-    cairo_face(boost::shared_ptr<freetype_engine> const& engine, face_ptr const& face);
-    ~cairo_face();
-    cairo_font_face_t * face() const;
-private:
-    class handle
-    {
-    public:
-        handle(boost::shared_ptr<freetype_engine> const& engine, face_ptr const& face)
-            : engine_(engine), face_(face) {}
-
-    private:
-        boost::shared_ptr<freetype_engine> engine_;
-        face_ptr face_;
-    };
-
-    static void destroy(void *data)
-    {
-        handle *h = static_cast<handle *>(data);
-        delete h;
-    }
-
-private:
-    face_ptr face_;
-    cairo_font_face_t *c_face_;
-};
-
-typedef boost::shared_ptr<cairo_face> cairo_face_ptr;
-
-class cairo_face_manager : private mapnik::noncopyable
-{
-public:
-    cairo_face_manager(boost::shared_ptr<freetype_engine> engine);
-    cairo_face_ptr get_face(face_ptr face);
-
-private:
-    typedef std::map<face_ptr,cairo_face_ptr> cairo_face_cache;
-    boost::shared_ptr<freetype_engine> font_engine_;
-    cairo_face_cache cache_;
-};
-
-class cairo_pattern : private mapnik::noncopyable
-{
-public:
-    cairo_pattern(image_data_32 const& data)
-    {
-        int pixels = data.width() * data.height();
-        const unsigned int *in_ptr = data.getData();
-        const unsigned int *in_end = in_ptr + pixels;
-        unsigned int *out_ptr;
-
-        surface_ = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, data.width(), data.height());
-
-        out_ptr = reinterpret_cast<unsigned int *>(cairo_image_surface_get_data(surface_));
-
-        while (in_ptr < in_end)
-        {
-            unsigned int in = *in_ptr++;
-            unsigned int r = (in >> 0) & 0xff;
-            unsigned int g = (in >> 8) & 0xff;
-            unsigned int b = (in >> 16) & 0xff;
-            unsigned int a = (in >> 24) & 0xff;
-
-            //r = r * a / 255;
-            //g = g * a / 255;
-            //b = b * a / 255;
-
-            *out_ptr++ = (a << 24) | (r << 16) | (g << 8) | b;
-        }
-        // mark the surface as dirty as we've modified it behind cairo's back
-        cairo_surface_mark_dirty(surface_);
-        pattern_ = cairo_pattern_create_for_surface(surface_);
-    }
-
-    ~cairo_pattern()
-    {
-        if (surface_) cairo_surface_destroy(surface_);
-        if (pattern_) cairo_pattern_destroy(pattern_);
-    }
-
-    void set_matrix(cairo_matrix_t const& matrix)
-    {
-        cairo_pattern_set_matrix(pattern_, &matrix);
-    }
-
-    void set_origin(double x, double y)
-    {
-        cairo_matrix_t matrix;
-        cairo_pattern_get_matrix(pattern_,&matrix);
-        matrix.x0 = -x;
-        matrix.y0 = -y;
-        cairo_pattern_set_matrix(pattern_,&matrix);
-    }
-
-    void set_extend(cairo_extend_t extend)
-    {
-        cairo_pattern_set_extend(pattern_, extend);
-    }
-
-    void set_filter(cairo_filter_t filter)
-    {
-        cairo_pattern_set_filter(pattern_, filter);
-    }
-
-    cairo_pattern_t * pattern() const
-    {
-        return pattern_;
-    }
-
-private:
-    cairo_surface_t * surface_;
-    cairo_pattern_t *  pattern_;
-};
-
-
-class cairo_gradient : private mapnik::noncopyable
-{
-public:
-    cairo_gradient(const mapnik::gradient &grad, double opacity=1.0)
-    {
-        double x1,x2,y1,y2,rad;
-        grad.get_control_points(x1,y1,x2,y2,rad);
-        if (grad.get_gradient_type() == LINEAR)
-        {
-            pattern_ = cairo_pattern_create_linear(x1, y1, x2, y2);
-        }
-        else if (grad.get_gradient_type() == RADIAL)
-        {
-            pattern_ = cairo_pattern_create_radial(x1, y1, 0,  x2, y2, rad);
-        }
-
-        units_ = grad.get_units();
-
-        BOOST_FOREACH ( mapnik::stop_pair const& st, grad.get_stop_array() )
-        {
-            mapnik::color const& stop_color = st.second;
-            double r= static_cast<double> (stop_color.red())/255.0;
-            double g= static_cast<double> (stop_color.green())/255.0;
-            double b= static_cast<double> (stop_color.blue())/255.0;
-            double a= static_cast<double> (stop_color.alpha())/255.0;
-            cairo_pattern_add_color_stop_rgba(pattern_,st.first, r, g, b, a*opacity);
-        }
-
-        double m[6];
-        agg::trans_affine tr = grad.get_transform();
-        tr.invert();
-        tr.store_to(m);
-        cairo_matrix_t matrix;
-        cairo_matrix_init(&matrix,m[0],m[1],m[2],m[3],m[4],m[5]);
-        cairo_pattern_set_matrix(pattern_, &matrix);
-    }
-
-    ~cairo_gradient()
-    {
-        if (pattern_)
-            cairo_pattern_destroy(pattern_);
-    }
-
-
-    cairo_pattern_t * gradient() const
-    {
-        return pattern_;
-    }
-
-    gradient_unit_e units() const
-    {
-        return units_;
-    }
-
-private:
-    cairo_pattern_t * pattern_;
-    gradient_unit_e units_;
-
-};
-
-struct cairo_closer
-{
-    void operator() (cairo_t * obj)
-    {
-        if (obj) cairo_destroy(obj);
-    }
-};
-
-struct cairo_surface_closer
-{
-    void operator() (cairo_surface_t * surface)
-    {
-        if (surface) cairo_surface_destroy(surface);
-    }
-};
-
-typedef boost::shared_ptr<cairo_t> cairo_ptr;
-typedef boost::shared_ptr<cairo_surface_t> cairo_surface_ptr;
-
-inline cairo_ptr create_context(cairo_surface_ptr const& surface)
-{
-    return cairo_ptr(cairo_create(&*surface),cairo_closer());
-}
-
-class cairo_context : private mapnik::noncopyable
-{
-public:
-
-    cairo_context(cairo_ptr const& cairo);
-
-    inline ErrorStatus get_status() const
-    {
-        return cairo_status(cairo_.get());
-    }
-
-    void clip();
-    void show_page();
-    void set_color(color const &color, double opacity = 1.0);
-    void set_color(double r, double g, double b, double opacity = 1.0);
-    void set_operator(composite_mode_e comp_op);
-    void set_line_join(line_join_e join);
-    void set_line_cap(line_cap_e cap);
-    void set_miter_limit(double limit);
-    void set_line_width(double width);
-    void set_dash(dash_array const &dashes, double scale_factor);
-    void set_fill_rule(cairo_fill_rule_t fill_rule);
-    void move_to(double x, double y);
-    void curve_to(double ct1_x, double ct1_y, double ct2_x, double ct2_y, double end_x, double end_y);
-    void close_path();
-    void line_to(double x, double y);
-    void rectangle(double x, double y, double w, double h);
-    void stroke();
-    void fill();
-    void paint();
-    void set_pattern(cairo_pattern const& pattern);
-    void set_gradient(cairo_gradient const& pattern, box2d<double> const& bbox);
-    void add_image(double x, double y, image_data_32 & data, double opacity = 1.0);
-    void add_image(agg::trans_affine const& tr, image_data_32 & data, double opacity = 1.0);
-    void set_font_face(cairo_face_manager & manager, face_ptr face);
-    void set_font_matrix(cairo_matrix_t const& matrix);
-    void set_matrix(cairo_matrix_t const& matrix);
-    void transform(cairo_matrix_t const& matrix);
-    void translate(double x, double y);
-    void save();
-    void restore();
-    void show_glyph(unsigned long index, double x, double y);
-    void glyph_path(unsigned long index, double x, double y);
-    void add_text(text_path const& path,
-                  cairo_face_manager & manager,
-                  face_manager<freetype_engine> & font_manager,
-                  double scale_factor = 1.0);
-
-    template <typename T>
-    void add_path(T& path, unsigned start_index = 0)
-    {
-        double x, y;
-        path.rewind(start_index);
-        for (unsigned cm = path.vertex(&x, &y); cm != SEG_END; cm = path.vertex(&x, &y))
-        {
-            if (cm == SEG_MOVETO)
-            {
-                move_to(x, y);
-            }
-            else if (cm == SEG_LINETO)
-            {
-                line_to(x, y);
-            }
-            else if (cm == SEG_CLOSE)
-            {
-                close_path();
-            }
-        }
-    }
-
-    template <typename T>
-    void add_agg_path(T& path, unsigned start_index = 0)
-    {
-        double x=0;
-        double y=0;
-
-        path.rewind(start_index);
-
-        for (unsigned cm = path.vertex(&x, &y); !agg::is_stop(cm); cm = path.vertex(&x, &y))
-        {
-            if (agg::is_move_to(cm))
-            {
-                move_to(x, y);
-            }
-            else if (agg::is_drawing(cm))
-            {
-                if (agg::is_curve3(cm))
-                {
-                    double end_x=0;
-                    double end_y=0;
-
-                    MAPNIK_LOG_WARN(cairo_renderer) << "Curve 3 not implemented";
-
-                    path.vertex(&end_x, &end_y);
-
-                    curve_to(x,y,x,y,end_x,end_y);
-                }
-                else if (agg::is_curve4(cm))
-                {
-                    double ct2_x=0;
-                    double ct2_y=0;
-                    double end_x=0;
-                    double end_y=0;
-
-                    path.vertex(&ct2_x, &ct2_y);
-                    path.vertex(&end_x, &end_y);
-
-                    curve_to(x,y,ct2_x,ct2_y,end_x,end_y);
-                }
-                else if (agg::is_line_to(cm))
-                {
-                    line_to(x, y);
-                }
-                else
-                {
-                    MAPNIK_LOG_WARN(cairo_renderer) << "Unimplemented drawing command: " << cm;
-                    move_to(x, y);
-                }
-            }
-            else if (agg::is_close(cm))
-            {
-                close_path();
-            }
-            else
-            {
-                MAPNIK_LOG_WARN(cairo_renderer) << "Unimplemented path command: " << cm;
-            }
-        }
-    }
-
-private:
-    cairo_ptr cairo_;
-};
-
-
-}
-
-
-#endif // MAPNIK_CAIRO_CONTEXT_HPP
diff --git a/include/mapnik/cairo_renderer.hpp b/include/mapnik/cairo_renderer.hpp
deleted file mode 100644
index 4f5dd91..0000000
--- a/include/mapnik/cairo_renderer.hpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#if defined(HAVE_CAIRO)
-
-#ifndef MAPNIK_CAIRO_RENDERER_HPP
-#define MAPNIK_CAIRO_RENDERER_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/feature_style_processor.hpp>
-#include <mapnik/font_engine_freetype.hpp>
-#include <mapnik/label_collision_detector.hpp>
-#include <mapnik/map.hpp>
-#include <mapnik/request.hpp>
-#include <mapnik/rule.hpp> // for all symbolizers
-#include <mapnik/noncopyable.hpp>
-#include <mapnik/cairo_context.hpp>
-#include <mapnik/pixel_position.hpp>
-
-// cairo
-#include <cairo.h>
-
-// boost
-#include <boost/scoped_ptr.hpp>
-
-// FIXME
-// forward declare so that
-// apps using mapnik do not
-// need agg headers
-namespace agg {
-struct trans_affine;
-}
-
-namespace mapnik {
-
-class marker;
-
-class MAPNIK_DECL cairo_renderer_base : private mapnik::noncopyable
-{
-protected:
-    cairo_renderer_base(Map const& m,
-                        cairo_ptr const& cairo,
-                        double scale_factor=1.0,
-                        unsigned offset_x=0,
-                        unsigned offset_y=0);
-    cairo_renderer_base(Map const& m,
-                        request const& req,
-                        cairo_ptr const& cairo,
-                        double scale_factor=1.0,
-                        unsigned offset_x=0,
-                        unsigned offset_y=0);
-    cairo_renderer_base(Map const& m,
-                        cairo_ptr const& cairo,
-                        boost::shared_ptr<label_collision_detector4> detector,
-                        double scale_factor=1.0,
-                        unsigned offset_x=0,
-                        unsigned offset_y=0);
-public:
-    ~cairo_renderer_base();
-    void start_map_processing(Map const& map);
-    void start_layer_processing(layer const& lay, box2d<double> const& query_extent);
-    void end_layer_processing(layer const& lay);
-    void start_style_processing(feature_type_style const& st);
-    void end_style_processing(feature_type_style const& st);
-    void process(point_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(line_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(line_pattern_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(polygon_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(polygon_pattern_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(raster_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(shield_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(text_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(building_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(markers_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    inline bool process(rule::symbolizers const& /*syms*/,
-                        mapnik::feature_impl & /*feature*/,
-                        proj_transform const& /*prj_trans*/)
-    {
-        // cairo renderer doesn't support processing of multiple symbolizers.
-        return false;
-    }
-    void painted(bool /*painted*/)
-    {
-        // nothing to do
-    }
-
-    inline eAttributeCollectionPolicy attribute_collection_policy() const
-    {
-        return DEFAULT;
-    }
-
-    void render_marker(pixel_position const& pos,
-                       marker const& marker,
-                       agg::trans_affine const& mtx,
-                       double opacity=1.0,
-                       bool recenter=true);
-    void render_box(box2d<double> const& b);
-protected:
-    Map const& m_;
-    cairo_context context_;
-    unsigned width_;
-    unsigned height_;
-    double scale_factor_;
-    CoordTransform t_;
-    boost::shared_ptr<freetype_engine> font_engine_;
-    face_manager<freetype_engine> font_manager_;
-    cairo_face_manager face_manager_;
-    boost::shared_ptr<label_collision_detector4> detector_;
-    box2d<double> query_extent_;
-    void setup(Map const& m);
-};
-
-template <typename T>
-class MAPNIK_DECL cairo_renderer : public feature_style_processor<cairo_renderer<T> >,
-                                   public cairo_renderer_base
-{
-public:
-    typedef cairo_renderer_base processor_impl_type;
-    cairo_renderer(Map const& m,
-                   T const& obj,
-                   double scale_factor=1.0,
-                   unsigned offset_x=0,
-                   unsigned offset_y=0);
-    cairo_renderer(Map const& m,
-                   request const& req,
-                   T const& obj,
-                   double scale_factor=1.0,
-                   unsigned offset_x=0,
-                   unsigned offset_y=0);
-    cairo_renderer(Map const& m,
-                   T const& obj,
-                   boost::shared_ptr<label_collision_detector4> detector,
-                   double scale_factor=1.0,
-                   unsigned offset_x=0,
-                   unsigned offset_y=0);
-    void end_map_processing(Map const& map);
-};
-}
-
-#endif // MAPNIK_CAIRO_RENDERER_HPP
-
-#endif
diff --git a/include/mapnik/char_info.hpp b/include/mapnik/char_info.hpp
deleted file mode 100644
index e5a6a5b..0000000
--- a/include/mapnik/char_info.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_CHAR_INFO_HPP
-#define MAPNIK_CHAR_INFO_HPP
-
-#include <boost/shared_ptr.hpp>
-
-namespace mapnik {
-struct char_properties;
-
-class char_info
-{
-public:
-    char_info(unsigned c_, double width_, double ymax_, double ymin_, double line_height_)
-        :  c(c_),
-           width(width_),
-           line_height(line_height_),
-           ymin(ymin_),
-           ymax(ymax_),
-           avg_height(ymax - ymin),
-           format()
-    {
-    }
-
-    char_info()
-        :  c(0),
-           width(0),
-           line_height(0),
-           ymin(0),
-           ymax(0),
-           avg_height(0),
-           format()
-    {
-    }
-
-    double height() const { return ymax-ymin; }
-
-    unsigned c;
-    double width;
-    double line_height;
-    double ymin;
-    double ymax;
-    double avg_height;
-    char_properties *format;
-
-};
-}
-
-#endif //MAPNIK_CHAR_INFO_HPP
diff --git a/include/mapnik/color.hpp b/include/mapnik/color.hpp
index de35941..458add4 100644
--- a/include/mapnik/color.hpp
+++ b/include/mapnik/color.hpp
@@ -28,11 +28,11 @@
 #include <mapnik/global.hpp>
 
 //boost
-#include <boost/cstdint.hpp>
 #include <boost/operators.hpp>
 
 // stl
 #include <sstream>
+#include <cstdint>
 
 namespace mapnik {
 
@@ -40,12 +40,13 @@ class MAPNIK_DECL color
     : boost::equality_comparable<color>
 {
 private:
-    boost::uint8_t red_;
-    boost::uint8_t green_;
-    boost::uint8_t blue_;
-    boost::uint8_t alpha_;
+    std::uint8_t red_;
+    std::uint8_t green_;
+    std::uint8_t blue_;
+    std::uint8_t alpha_;
 
 public:
+    // default ctor
     color()
       : red_(0xff),
         green_(0xff),
@@ -53,13 +54,14 @@ public:
         alpha_(0xff)
         {}
 
-    color(boost::uint8_t red, boost::uint8_t green, boost::uint8_t blue, boost::uint8_t alpha = 0xff)
+    color(std::uint8_t red, std::uint8_t green, std::uint8_t blue, std::uint8_t alpha = 0xff)
       : red_(red),
         green_(green),
         blue_(blue),
         alpha_(alpha)
         {}
 
+    // copy ctor
     color(const color& rhs)
       : red_(rhs.red_),
         green_(rhs.green_),
@@ -67,6 +69,13 @@ public:
         alpha_(rhs.alpha_)
         {}
 
+    // move ctor
+    color(color && rhs)
+        : red_(std::move(rhs.red_)),
+        green_(std::move(rhs.green_)),
+        blue_(std::move(rhs.blue_)),
+        alpha_(std::move(rhs.alpha_)) {}
+
     color( std::string const& str);
 
     std::string to_string() const;
@@ -74,16 +83,9 @@ public:
     void premultiply();
     void demultiply();
 
-    color& operator=(color const& rhs)
+    color& operator=(color rhs)
     {
-        if (this==&rhs)
-            return *this;
-
-        red_   = rhs.red_;
-        green_ = rhs.green_;
-        blue_  = rhs.blue_;
-        alpha_ = rhs.alpha_;
-
+        swap(rhs);
         return *this;
     }
 
@@ -95,38 +97,41 @@ public:
                (alpha_ == rhs.alpha());
     }
 
-    inline boost::uint8_t red() const
+    inline std::uint8_t red() const
     {
         return red_;
     }
 
-    inline boost::uint8_t green() const
+    inline std::uint8_t green() const
     {
         return green_;
     }
-    inline boost::uint8_t blue() const
+
+    inline std::uint8_t blue() const
     {
         return blue_;
     }
-    inline boost::uint8_t alpha() const
+
+    inline std::uint8_t alpha() const
     {
         return alpha_;
     }
 
-    inline void set_red(boost::uint8_t red)
+    inline void set_red(std::uint8_t red)
     {
         red_ = red;
     }
-    inline void set_green(boost::uint8_t green)
+
+    inline void set_green(std::uint8_t green)
     {
         green_ = green;
     }
 
-    inline void set_blue(boost::uint8_t blue)
+    inline void set_blue(std::uint8_t blue)
     {
         blue_ = blue;
     }
-    inline void set_alpha(boost::uint8_t alpha)
+    inline void set_alpha(std::uint8_t alpha)
     {
         alpha_ = alpha;
     }
@@ -134,11 +139,19 @@ public:
     inline unsigned rgba() const
     {
 #ifdef MAPNIK_BIG_ENDIAN
-        return (alpha_) | (blue_ << 8) | (green_ << 16) | (red_ << 24) ;
+        return static_cast<unsigned>((alpha_) | (blue_ << 8) | (green_ << 16) | (red_ << 24)) ;
 #else
-        return (alpha_ << 24) | (blue_ << 16) | (green_ << 8) | (red_) ;
+        return static_cast<unsigned>((alpha_ << 24) | (blue_ << 16) | (green_ << 8) | (red_)) ;
 #endif
     }
+private:
+    void swap(color & rhs)
+    {
+        std::swap(red_, rhs.red_);
+        std::swap(green_,rhs.green_);
+        std::swap(blue_,rhs.blue_);
+        std::swap(alpha_,rhs.alpha_);
+    }
 };
 
 template <typename charT, typename traits>
@@ -150,6 +163,12 @@ operator << ( std::basic_ostream<charT, traits> & s, mapnik::color const& c )
     return s;
 }
 
+// hash
+inline std::size_t hash_value(color const& c)
+{
+    return c.rgba();
+}
+
 }
 
 #endif // MAPNIK_COLOR_HPP
diff --git a/include/mapnik/color_factory.hpp b/include/mapnik/color_factory.hpp
index 312a4b3..0333634 100644
--- a/include/mapnik/color_factory.hpp
+++ b/include/mapnik/color_factory.hpp
@@ -25,14 +25,13 @@
 
 // mapnik
 #include <mapnik/color.hpp>
-#include <mapnik/css_color_grammar.hpp>
 
+//stl
 #include <string>
 
 namespace mapnik {
 
 MAPNIK_DECL mapnik::color parse_color(std::string const& str);
-MAPNIK_DECL mapnik::color parse_color(std::string const& str, mapnik::css_color_grammar<std::string::const_iterator> const& g);
 
 }
 
diff --git a/include/mapnik/config.hpp b/include/mapnik/config.hpp
index 6e4fe68..0e9d902 100644
--- a/include/mapnik/config.hpp
+++ b/include/mapnik/config.hpp
@@ -52,4 +52,7 @@
 
 #define PROJ_ENVELOPE_POINTS 20
 
+#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#define BOOST_MPL_LIMIT_VECTOR_SIZE 30
+
 #endif // MAPNIK_CONFIG_HPP
diff --git a/include/mapnik/coord.hpp b/include/mapnik/coord.hpp
index 1d634e9..79f2318 100644
--- a/include/mapnik/coord.hpp
+++ b/include/mapnik/coord.hpp
@@ -26,14 +26,10 @@
 // boost
 #include <boost/operators.hpp>
 
-// stl
-#include <iomanip>
-#include <sstream>
-
 namespace mapnik {
 template <typename T,int dim>
 struct coord {
-    typedef T type;
+    using type = T;
 };
 
 template <typename T>
@@ -46,7 +42,7 @@ struct coord<T,2>
                                                                                                 boost::multipliable2<coord<T,2>, T > > > > > >
 
 {
-    typedef T type;
+    using type = T;
     T x;
     T y;
 public:
@@ -54,22 +50,34 @@ public:
         : x(),y() {}
     coord(T x_,T y_)
         : x(x_),y(y_) {}
+
+    coord(coord<T,2> const& rhs)
+        : x(rhs.x),
+          y(rhs.y) {}
+
     template <typename T2>
-    coord (const coord<T2,2>& rhs)
+    coord (coord<T2,2> const& rhs)
         : x(type(rhs.x)),
           y(type(rhs.y)) {}
 
+    coord(coord<T,2> && rhs) noexcept
+        : x(std::move(rhs.x)),
+          y(std::move(rhs.y)) {}
+
+    coord<T,2>& operator=(coord<T,2> rhs)
+    {
+        swap(rhs);
+        return *this;
+    }
+
     template <typename T2>
     coord<T,2>& operator=(const coord<T2,2>& rhs)
     {
-        if ((void*)this==(void*)&rhs)
-        {
-            return *this;
-        }
-        x=type(rhs.x);
-        y=type(rhs.y);
+        coord<T,2> tmp(rhs);
+        swap(rhs);
         return *this;
     }
+
     template <typename T2>
     bool operator==(coord<T2,2> const& rhs)
     {
@@ -116,12 +124,18 @@ public:
         y/=t;
         return *this;
     }
+private:
+    void swap(coord<T,2> & rhs)
+    {
+        std::swap(this->x, rhs.x);
+        std::swap(this->y, rhs.y);
+    }
 };
 
 template <typename T>
 struct coord<T,3>
 {
-    typedef T type;
+    using type = T;
     T x;
     T y;
     T z;
@@ -130,62 +144,43 @@ public:
         : x(),y(),z() {}
     coord(T x_,T y_,T z_)
         : x(x_),y(y_),z(z_) {}
+
     template <typename T2>
-    coord (const coord<T2,3>& rhs)
+    coord (coord<T2,3> const& rhs)
         : x(type(rhs.x)),
           y(type(rhs.y)),
           z(type(rhs.z)) {}
 
+    coord(coord<T,3> && rhs) noexcept
+        : x(std::move(rhs.x)),
+          y(std::move(rhs.y)),
+          z(std::move(rhs.z)) {}
+
+    coord<T,3> operator=(coord<T,3> rhs)
+    {
+        swap(rhs);
+        return *this;
+    }
+
     template <typename T2>
-    coord<T,3>& operator=(const coord<T2,3>& rhs)
+    coord<T,3>& operator=(coord<T2,3> const& rhs)
     {
-        if ((void*)this==(void*)&rhs)
-        {
-            return *this;
-        }
-        x=type(rhs.x);
-        y=type(rhs.y);
-        z=type(rhs.z);
+        coord<T,3> tmp(rhs);
+        swap(tmp);
         return *this;
     }
+private:
+    void swap(coord<T,3> & rhs)
+    {
+        std::swap(this->x, rhs.x);
+        std::swap(this->y, rhs.y);
+        std::swap(this->z, rhs.z);
+    }
 };
 
-typedef coord<double,2> coord2d;
-typedef coord<int,2> coord2i;
-
+using coord2d = coord<double,2>;
+using coord2i = coord<int,2>;
 
-template <typename charT,typename traits,typename T ,int dim>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             const coord<T,dim>& c);
-
-template <typename charT,typename traits,typename T>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             const coord<T,2>& c)
-{
-    std::basic_ostringstream<charT,traits> s;
-    s.copyfmt(out);
-    s.width(0);
-    s << "coord2(" << std::setprecision(16)
-      << c.x << "," << c.y<< ")";
-    out << s.str();
-    return out;
-}
-
-template <typename charT,typename traits,typename T>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             const coord<T,3>& c)
-{
-    std::basic_ostringstream<charT,traits> s;
-    s.copyfmt(out);
-    s.width(0);
-    s << "coord3(" << std::setprecision(16)
-      << c.x << "," << c.y<< "," << c.z<<")";
-    out << s.str();
-    return out;
-}
 }
 
 #endif // MAPNIK_COORD_HPP
diff --git a/include/mapnik/coord_array.hpp b/include/mapnik/coord_array.hpp
index 08c5461..dc3c2ed 100644
--- a/include/mapnik/coord_array.hpp
+++ b/include/mapnik/coord_array.hpp
@@ -27,24 +27,26 @@
 #include <mapnik/coord.hpp>
 
 // stl
+#include <algorithm>
 #include <cassert>
 
 namespace mapnik {
+
 template <typename T>
 class coord_array
 {
-    typedef T coord_type;
-    coord_type* pt_;
-    const unsigned size_;
 public:
+    using coord_type = T;
+
     coord_array(unsigned size=0)
         : pt_(static_cast<coord_type*>(size==0?0: ::operator new (sizeof(coord_type)*size))),
           size_(size) {}
 
-    coord_array(const coord_array& rhs)
+    coord_array(coord_array const& rhs)
         : pt_(static_cast<coord_type*>(rhs.size_==0?0: ::operator new (sizeof(coord_type)*rhs.size_))),
-          size_(rhs.size_) {
-        memcpy(pt_,rhs.pt_,sizeof(coord_type)*rhs.size_);
+          size_(rhs.size_)
+    {
+        std::copy(rhs.pt_, rhs.pt_ + rhs.size_ , pt_);
     }
 
     ~coord_array()
@@ -82,8 +84,28 @@ public:
         return pt_[index];
     }
 
+    coord_type const* begin() const
+    {
+        return pt_;
+    }
+
+    coord_type const* end() const
+    {
+        return pt_ + size_;
+    }
+
+    coord_type * begin()
+    {
+        return pt_;
+    }
+    coord_type * end()
+    {
+        return pt_ + size_;
+    }
 private:
     coord_array& operator=(const coord_array&);
+    coord_type* pt_;
+    const unsigned size_;
 };
 }
 
diff --git a/include/mapnik/css_color_grammar.hpp b/include/mapnik/css_color_grammar.hpp
index a15f0fa..8a68de1 100644
--- a/include/mapnik/css_color_grammar.hpp
+++ b/include/mapnik/css_color_grammar.hpp
@@ -25,45 +25,24 @@
 
 // mapnik
 #include <mapnik/color.hpp>
+#include <mapnik/util/hsl.hpp>
 
-// spirit2
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/qi_action.hpp>
-
-// phoenix
 #include <boost/spirit/include/phoenix_core.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
 #include <boost/spirit/include/phoenix_fusion.hpp>
 #include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/fusion/include/adapt_adt.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <string>
 
-namespace mapnik {
-
-// http://www.w3.org/TR/css3-color/#hsl-color
-inline double hue_to_rgb( double m1, double m2, double h)
-{
-    if (h < 0.0) h = h + 1.0;
-    else if (h > 1) h = h - 1.0;
-
-    if (h * 6 < 1.0)
-        return m1 + (m2 - m1) * h * 6.0;
-    if (h * 2 < 1.0)
-        return m2;
-    if (h * 3 < 2.0)
-        return m1 + (m2 - m1)* (2.0/3.0 - h) * 6.0;
-    return m1;
-}
-
-} // namespace mapnik
-
-// boost
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104500
-// fusion
-#include <boost/fusion/include/adapt_adt.hpp>
-
 BOOST_FUSION_ADAPT_ADT(
     mapnik::color,
     (unsigned, unsigned, obj.red(), obj.set_red(val))
@@ -79,11 +58,162 @@ namespace qi = boost::spirit::qi;
 namespace ascii = boost::spirit::ascii;
 namespace phoenix = boost::phoenix;
 
-typedef boost::spirit::ascii::space_type ascii_space_type;
+using ascii_space_type = boost::spirit::ascii::space_type;
 
 struct named_colors_ : qi::symbols<char,color>
 {
-    named_colors_();
+    named_colors_()
+    {
+        add
+            ("aliceblue", color(240, 248, 255))
+            ("antiquewhite", color(250, 235, 215))
+            ("aqua", color(0, 255, 255))
+            ("aquamarine", color(127, 255, 212))
+            ("azure", color(240, 255, 255))
+            ("beige", color(245, 245, 220))
+            ("bisque", color(255, 228, 196))
+            ("black", color(0, 0, 0))
+            ("blanchedalmond", color(255,235,205))
+            ("blue", color(0, 0, 255))
+            ("blueviolet", color(138, 43, 226))
+            ("brown", color(165, 42, 42))
+            ("burlywood", color(222, 184, 135))
+            ("cadetblue", color(95, 158, 160))
+            ("chartreuse", color(127, 255, 0))
+            ("chocolate", color(210, 105, 30))
+            ("coral", color(255, 127, 80))
+            ("cornflowerblue", color(100, 149, 237))
+            ("cornsilk", color(255, 248, 220))
+            ("crimson", color(220, 20, 60))
+            ("cyan", color(0, 255, 255))
+            ("darkblue", color(0, 0, 139))
+            ("darkcyan", color(0, 139, 139))
+            ("darkgoldenrod", color(184, 134, 11))
+            ("darkgray", color(169, 169, 169))
+            ("darkgreen", color(0, 100, 0))
+            ("darkgrey", color(169, 169, 169))
+            ("darkkhaki", color(189, 183, 107))
+            ("darkmagenta", color(139, 0, 139))
+            ("darkolivegreen", color(85, 107, 47))
+            ("darkorange", color(255, 140, 0))
+            ("darkorchid", color(153, 50, 204))
+            ("darkred", color(139, 0, 0))
+            ("darksalmon", color(233, 150, 122))
+            ("darkseagreen", color(143, 188, 143))
+            ("darkslateblue", color(72, 61, 139))
+            ("darkslategrey", color(47, 79, 79))
+            ("darkturquoise", color(0, 206, 209))
+            ("darkviolet", color(148, 0, 211))
+            ("deeppink", color(255, 20, 147))
+            ("deepskyblue", color(0, 191, 255))
+            ("dimgray", color(105, 105, 105))
+            ("dimgrey", color(105, 105, 105))
+            ("dodgerblue", color(30, 144, 255))
+            ("firebrick", color(178, 34, 34))
+            ("floralwhite", color(255, 250, 240))
+            ("forestgreen", color(34, 139, 34))
+            ("fuchsia", color(255, 0, 255))
+            ("gainsboro", color(220, 220, 220))
+            ("ghostwhite", color(248, 248, 255))
+            ("gold", color(255, 215, 0))
+            ("goldenrod", color(218, 165, 32))
+            ("gray", color(128, 128, 128))
+            ("grey", color(128, 128, 128))
+            ("green", color(0, 128, 0))
+            ("greenyellow", color(173, 255, 47))
+            ("honeydew", color(240, 255, 240))
+            ("hotpink", color(255, 105, 180))
+            ("indianred", color(205, 92, 92))
+            ("indigo", color(75, 0, 130))
+            ("ivory", color(255, 255, 240))
+            ("khaki", color(240, 230, 140))
+            ("lavender", color(230, 230, 250))
+            ("lavenderblush", color(255, 240, 245))
+            ("lawngreen", color(124, 252, 0))
+            ("lemonchiffon", color(255, 250, 205))
+            ("lightblue", color(173, 216, 230))
+            ("lightcoral", color(240, 128, 128))
+            ("lightcyan", color(224, 255, 255))
+            ("lightgoldenrodyellow", color(250, 250, 210))
+            ("lightgray", color(211, 211, 211))
+            ("lightgreen", color(144, 238, 144))
+            ("lightgrey", color(211, 211, 211))
+            ("lightpink", color(255, 182, 193))
+            ("lightsalmon", color(255, 160, 122))
+            ("lightseagreen", color(32, 178, 170))
+            ("lightskyblue", color(135, 206, 250))
+            ("lightslategray", color(119, 136, 153))
+            ("lightslategrey", color(119, 136, 153))
+            ("lightsteelblue", color(176, 196, 222))
+            ("lightyellow", color(255, 255, 224))
+            ("lime", color(0, 255, 0))
+            ("limegreen", color(50, 205, 50))
+            ("linen", color(250, 240, 230))
+            ("magenta", color(255, 0, 255))
+            ("maroon", color(128, 0, 0))
+            ("mediumaquamarine", color(102, 205, 170))
+            ("mediumblue", color(0, 0, 205))
+            ("mediumorchid", color(186, 85, 211))
+            ("mediumpurple", color(147, 112, 219))
+            ("mediumseagreen", color(60, 179, 113))
+            ("mediumslateblue", color(123, 104, 238))
+            ("mediumspringgreen", color(0, 250, 154))
+            ("mediumturquoise", color(72, 209, 204))
+            ("mediumvioletred", color(199, 21, 133))
+            ("midnightblue", color(25, 25, 112))
+            ("mintcream", color(245, 255, 250))
+            ("mistyrose", color(255, 228, 225))
+            ("moccasin", color(255, 228, 181))
+            ("navajowhite", color(255, 222, 173))
+            ("navy", color(0, 0, 128))
+            ("oldlace", color(253, 245, 230))
+            ("olive", color(128, 128, 0))
+            ("olivedrab", color(107, 142, 35))
+            ("orange", color(255, 165, 0))
+            ("orangered", color(255, 69, 0))
+            ("orchid", color(218, 112, 214))
+            ("palegoldenrod", color(238, 232, 170))
+            ("palegreen", color(152, 251, 152))
+            ("paleturquoise", color(175, 238, 238))
+            ("palevioletred", color(219, 112, 147))
+            ("papayawhip", color(255, 239, 213))
+            ("peachpuff", color(255, 218, 185))
+            ("peru", color(205, 133, 63))
+            ("pink", color(255, 192, 203))
+            ("plum", color(221, 160, 221))
+            ("powderblue", color(176, 224, 230))
+            ("purple", color(128, 0, 128))
+            ("red", color(255, 0, 0))
+            ("rosybrown", color(188, 143, 143))
+            ("royalblue", color(65, 105, 225))
+            ("saddlebrown", color(139, 69, 19))
+            ("salmon", color(250, 128, 114))
+            ("sandybrown", color(244, 164, 96))
+            ("seagreen", color(46, 139, 87))
+            ("seashell", color(255, 245, 238))
+            ("sienna", color(160, 82, 45))
+            ("silver", color(192, 192, 192))
+            ("skyblue", color(135, 206, 235))
+            ("slateblue", color(106, 90, 205))
+            ("slategray", color(112, 128, 144))
+            ("slategrey", color(112, 128, 144))
+            ("snow", color(255, 250, 250))
+            ("springgreen", color(0, 255, 127))
+            ("steelblue", color(70, 130, 180))
+            ("tan", color(210, 180, 140))
+            ("teal", color(0, 128, 128))
+            ("thistle", color(216, 191, 216))
+            ("tomato", color(255, 99, 71))
+            ("turquoise", color(64, 224, 208))
+            ("violet", color(238, 130, 238))
+            ("wheat", color(245, 222, 179))
+            ("white", color(255, 255, 255))
+            ("whitesmoke", color(245, 245, 245))
+            ("yellow", color(255, 255, 0))
+            ("yellowgreen", color(154, 205, 50))
+            ("transparent", color(0, 0, 0, 0))
+            ;
+    }
 } ;
 
 // clipper helper
@@ -100,7 +230,7 @@ struct percent_conv_impl
     template <typename T>
     struct result
     {
-        typedef unsigned type;
+        using type = unsigned;
     };
 
     unsigned operator() (double val) const
@@ -114,7 +244,7 @@ struct alpha_conv_impl
     template <typename T>
     struct result
     {
-        typedef unsigned type;
+        using type = unsigned;
     };
 
     unsigned operator() (double val) const
@@ -125,10 +255,10 @@ struct alpha_conv_impl
 
 struct hsl_conv_impl
 {
-    template<typename T0,typename T1, typename T2, typename T3>
+    template<typename T>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     template <typename T0,typename T1, typename T2, typename T3>
@@ -141,9 +271,13 @@ struct hsl_conv_impl
         l /= 100.0;
 
         if (l <= 0.5)
+        {
             m2 = l * (s + 1.0);
+        }
         else
+        {
             m2 = l + s - l*s;
+        }
         m1 = l * 2 - m2;
 
         double r = hue_to_rgb(m1, m2, h + 1.0/3.0);
@@ -178,357 +312,4 @@ struct css_color_grammar : qi::grammar<Iterator, color(), ascii_space_type>
 
 }
 
-#else // boost 1.42 compatibility
-
-#include <boost/fusion/include/adapt_struct.hpp>
-
-namespace mapnik
-{
-// temp workaround . TODO: adapt mapnik::color
-struct css
-{
-    css ()
-        : r(255),g(255),b(255),a(255) {}
-    css(unsigned r_,unsigned g_, unsigned b_,unsigned a_ = 0xff)
-        : r(r_),g(g_),b(b_),a(a_) {}
-
-    unsigned r;
-    unsigned g;
-    unsigned b;
-    unsigned a;
-};
-
-}
-
-BOOST_FUSION_ADAPT_STRUCT(
-    mapnik::css,
-    (unsigned, r)
-    (unsigned, g)
-    (unsigned, b)
-    (unsigned, a)
-    )
-
-namespace mapnik
-{
-
-namespace qi = boost::spirit::qi;
-namespace ascii = boost::spirit::ascii;
-namespace phoenix = boost::phoenix;
-
-typedef boost::spirit::ascii::space_type ascii_space_type;
-
-struct named_colors_ : qi::symbols<char,css>
-{
-    named_colors_()
-    {
-        add
-            ("aliceblue", css(240, 248, 255))
-            ("antiquewhite", css(250, 235, 215))
-            ("aqua", css(0, 255, 255))
-            ("aquamarine", css(127, 255, 212))
-            ("azure", css(240, 255, 255))
-            ("beige", css(245, 245, 220))
-            ("bisque", css(255, 228, 196))
-            ("black", css(0, 0, 0))
-            ("blanchedalmond", css(255,235,205))
-            ("blue", css(0, 0, 255))
-            ("blueviolet", css(138, 43, 226))
-            ("brown", css(165, 42, 42))
-            ("burlywood", css(222, 184, 135))
-            ("cadetblue", css(95, 158, 160))
-            ("chartreuse", css(127, 255, 0))
-            ("chocolate", css(210, 105, 30))
-            ("coral", css(255, 127, 80))
-            ("cornflowerblue", css(100, 149, 237))
-            ("cornsilk", css(255, 248, 220))
-            ("crimson", css(220, 20, 60))
-            ("cyan", css(0, 255, 255))
-            ("darkblue", css(0, 0, 139))
-            ("darkcyan", css(0, 139, 139))
-            ("darkgoldenrod", css(184, 134, 11))
-            ("darkgray", css(169, 169, 169))
-            ("darkgreen", css(0, 100, 0))
-            ("darkgrey", css(169, 169, 169))
-            ("darkkhaki", css(189, 183, 107))
-            ("darkmagenta", css(139, 0, 139))
-            ("darkolivegreen", css(85, 107, 47))
-            ("darkorange", css(255, 140, 0))
-            ("darkorchid", css(153, 50, 204))
-            ("darkred", css(139, 0, 0))
-            ("darksalmon", css(233, 150, 122))
-            ("darkseagreen", css(143, 188, 143))
-            ("darkslateblue", css(72, 61, 139))
-            ("darkslategrey", css(47, 79, 79))
-            ("darkturquoise", css(0, 206, 209))
-            ("darkviolet", css(148, 0, 211))
-            ("deeppink", css(255, 20, 147))
-            ("deepskyblue", css(0, 191, 255))
-            ("dimgray", css(105, 105, 105))
-            ("dimgrey", css(105, 105, 105))
-            ("dodgerblue", css(30, 144, 255))
-            ("firebrick", css(178, 34, 34))
-            ("floralwhite", css(255, 250, 240))
-            ("forestgreen", css(34, 139, 34))
-            ("fuchsia", css(255, 0, 255))
-            ("gainsboro", css(220, 220, 220))
-            ("ghostwhite", css(248, 248, 255))
-            ("gold", css(255, 215, 0))
-            ("goldenrod", css(218, 165, 32))
-            ("gray", css(128, 128, 128))
-            ("grey", css(128, 128, 128))
-            ("green", css(0, 128, 0))
-            ("greenyellow", css(173, 255, 47))
-            ("honeydew", css(240, 255, 240))
-            ("hotpink", css(255, 105, 180))
-            ("indianred", css(205, 92, 92))
-            ("indigo", css(75, 0, 130))
-            ("ivory", css(255, 255, 240))
-            ("khaki", css(240, 230, 140))
-            ("lavender", css(230, 230, 250))
-            ("lavenderblush", css(255, 240, 245))
-            ("lawngreen", css(124, 252, 0))
-            ("lemonchiffon", css(255, 250, 205))
-            ("lightblue", css(173, 216, 230))
-            ("lightcoral", css(240, 128, 128))
-            ("lightcyan", css(224, 255, 255))
-            ("lightgoldenrodyellow", css(250, 250, 210))
-            ("lightgray", css(211, 211, 211))
-            ("lightgreen", css(144, 238, 144))
-            ("lightgrey", css(211, 211, 211))
-            ("lightpink", css(255, 182, 193))
-            ("lightsalmon", css(255, 160, 122))
-            ("lightseagreen", css(32, 178, 170))
-            ("lightskyblue", css(135, 206, 250))
-            ("lightslategray", css(119, 136, 153))
-            ("lightslategrey", css(119, 136, 153))
-            ("lightsteelblue", css(176, 196, 222))
-            ("lightyellow", css(255, 255, 224))
-            ("lime", css(0, 255, 0))
-            ("limegreen", css(50, 205, 50))
-            ("linen", css(250, 240, 230))
-            ("magenta", css(255, 0, 255))
-            ("maroon", css(128, 0, 0))
-            ("mediumaquamarine", css(102, 205, 170))
-            ("mediumblue", css(0, 0, 205))
-            ("mediumorchid", css(186, 85, 211))
-            ("mediumpurple", css(147, 112, 219))
-            ("mediumseagreen", css(60, 179, 113))
-            ("mediumslateblue", css(123, 104, 238))
-            ("mediumspringgreen", css(0, 250, 154))
-            ("mediumturquoise", css(72, 209, 204))
-            ("mediumvioletred", css(199, 21, 133))
-            ("midnightblue", css(25, 25, 112))
-            ("mintcream", css(245, 255, 250))
-            ("mistyrose", css(255, 228, 225))
-            ("moccasin", css(255, 228, 181))
-            ("navajowhite", css(255, 222, 173))
-            ("navy", css(0, 0, 128))
-            ("oldlace", css(253, 245, 230))
-            ("olive", css(128, 128, 0))
-            ("olivedrab", css(107, 142, 35))
-            ("orange", css(255, 165, 0))
-            ("orangered", css(255, 69, 0))
-            ("orchid", css(218, 112, 214))
-            ("palegoldenrod", css(238, 232, 170))
-            ("palegreen", css(152, 251, 152))
-            ("paleturquoise", css(175, 238, 238))
-            ("palevioletred", css(219, 112, 147))
-            ("papayawhip", css(255, 239, 213))
-            ("peachpuff", css(255, 218, 185))
-            ("peru", css(205, 133, 63))
-            ("pink", css(255, 192, 203))
-            ("plum", css(221, 160, 221))
-            ("powderblue", css(176, 224, 230))
-            ("purple", css(128, 0, 128))
-            ("red", css(255, 0, 0))
-            ("rosybrown", css(188, 143, 143))
-            ("royalblue", css(65, 105, 225))
-            ("saddlebrown", css(139, 69, 19))
-            ("salmon", css(250, 128, 114))
-            ("sandybrown", css(244, 164, 96))
-            ("seagreen", css(46, 139, 87))
-            ("seashell", css(255, 245, 238))
-            ("sienna", css(160, 82, 45))
-            ("silver", css(192, 192, 192))
-            ("skyblue", css(135, 206, 235))
-            ("slateblue", css(106, 90, 205))
-            ("slategray", css(112, 128, 144))
-            ("slategrey", css(112, 128, 144))
-            ("snow", css(255, 250, 250))
-            ("springgreen", css(0, 255, 127))
-            ("steelblue", css(70, 130, 180))
-            ("tan", css(210, 180, 140))
-            ("teal", css(0, 128, 128))
-            ("thistle", css(216, 191, 216))
-            ("tomato", css(255, 99, 71))
-            ("turquoise", css(64, 224, 208))
-            ("violet", css(238, 130, 238))
-            ("wheat", css(245, 222, 179))
-            ("white", css(255, 255, 255))
-            ("whitesmoke", css(245, 245, 245))
-            ("yellow", css(255, 255, 0))
-            ("yellowgreen", css(154, 205, 50))
-            ("transparent", css(0, 0, 0, 0))
-            ;
-    }
-} ;
-
-// clipper helper
-
-template <int MIN,int MAX>
-inline int clip_int(int val)
-{
-    if (val < MIN ) return MIN;
-    if (val > MAX ) return MAX;
-    return val;
-}
-
-struct percent_conv_impl
-{
-    template <typename T>
-    struct result
-    {
-        typedef unsigned type;
-    };
-
-    unsigned operator() (double val) const
-    {
-        return clip_int<0,255>(int((255.0 * val)/100.0 + 0.5));
-    }
-};
-
-struct alpha_conv_impl
-{
-    template <typename T>
-    struct result
-    {
-        typedef unsigned type;
-    };
-
-    unsigned operator() (double val) const
-    {
-        return clip_int<0,255>(int((255.0 * val) + 0.5));
-    }
-};
-
-struct hsl_conv_impl
-{
-    template<typename T0,typename T1, typename T2, typename T3>
-    struct result
-    {
-        typedef void type;
-    };
-
-    template <typename T0,typename T1, typename T2, typename T3>
-    void operator() (T0 & c, T1 h, T2 s, T3 l) const
-    {
-        double m1,m2;
-        // normalize values
-        h /= 360.0;
-        s /= 100.0;
-        l /= 100.0;
-
-        if (l <= 0.5)
-            m2 = l * (s + 1.0);
-        else
-            m2 = l + s - l*s;
-        m1 = l * 2 - m2;
-
-        double r = hue_to_rgb(m1, m2, h + 1.0/3.0);
-        double g = hue_to_rgb(m1, m2, h);
-        double b = hue_to_rgb(m1, m2, h - 1.0/3.0);
-
-        c.r = clip_int<0,255>(int((255.0 * r) + 0.5));
-        c.g = clip_int<0,255>(int((255.0 * g) + 0.5));
-        c.b = clip_int<0,255>(int((255.0 * b) + 0.5));
-    }
-};
-
-
-template <typename Iterator>
-struct css_color_grammar : qi::grammar<Iterator, css(), ascii_space_type>
-{
-
-    css_color_grammar()
-        : css_color_grammar::base_type(css_color)
-
-    {
-        using qi::lit;
-        using qi::_val;
-        using qi::double_;
-        using qi::_1;
-        using qi::_a;
-        using qi::_b;
-        using qi::_c;
-        using ascii::no_case;
-        using phoenix::at_c;
-
-        css_color %= rgba_color
-            | rgba_percent_color
-            | hsl_percent_color
-            | hex_color
-            | hex_color_small
-            | no_case[named];
-
-        hex_color %= lit('#')
-            >> hex2
-            >> hex2
-            >> hex2
-            >> -hex2
-            ;
-
-        hex_color_small = lit('#')
-            >> hex1 [ at_c<0>(_val) = _1 | _1 << 4 ]
-            >> hex1 [ at_c<1>(_val) = _1 | _1 << 4 ]
-            >> hex1 [ at_c<2>(_val) = _1 | _1 << 4 ]
-            >> -hex1[ at_c<3>(_val) = _1 | _1 << 4 ]
-            ;
-
-        rgba_color = lit("rgb") >> -lit('a')
-                                >> lit('(')
-                                >> dec3 [at_c<0>(_val) = _1] >> ','
-                                >> dec3 [at_c<1>(_val) = _1] >> ','
-                                >> dec3 [at_c<2>(_val) = _1]
-                                >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)])
-                                >> lit(')')
-            ;
-
-        rgba_percent_color = lit("rgb") >> -lit('a')
-                                        >> lit('(')
-                                        >> double_ [at_c<0>(_val) = percent_converter(_1)] >> '%' >> ','
-                                        >> double_ [at_c<1>(_val) = percent_converter(_1)] >> '%' >> ','
-                                        >> double_ [at_c<2>(_val) = percent_converter(_1)] >> '%'
-                                        >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)])
-                                        >> lit(')')
-            ;
-
-        hsl_percent_color = lit("hsl") >> -lit('a')
-                                       >> lit('(')
-                                       >> double_ [ _a = _1] >> ','        // hue 0..360
-                                       >> double_ [ _b = _1] >> '%' >> ',' // saturation 0..100%
-                                       >> double_ [ _c = _1] >> '%'        // lightness  0..100%
-                                       >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)]) // opacity 0...1
-                                       >> lit (')') [ hsl_converter(_val,_a,_b,_c)]
-            ;
-    }
-
-    qi::uint_parser< unsigned, 16, 2, 2 > hex2 ;
-    qi::uint_parser< unsigned, 16, 1, 1 > hex1 ;
-    qi::uint_parser< unsigned, 10, 1, 3 > dec3 ;
-    qi::rule<Iterator, css(), ascii_space_type> rgba_color;
-    qi::rule<Iterator, css(), ascii_space_type> rgba_percent_color;
-    qi::rule<Iterator, qi::locals<double,double,double>,css(), ascii_space_type> hsl_percent_color;
-    qi::rule<Iterator, css(), ascii_space_type> hex_color;
-    qi::rule<Iterator, css(), ascii_space_type> hex_color_small;
-    qi::rule<Iterator, css(), ascii_space_type> css_color;
-    named_colors_ named;
-    phoenix::function<percent_conv_impl> percent_converter;
-    phoenix::function<alpha_conv_impl>   alpha_converter;
-    phoenix::function<hsl_conv_impl>  hsl_converter;
-};
-
-}
-
-#endif
-
 #endif // MAPNIK_CSS_COLOR_GRAMMAR_HPP
diff --git a/include/mapnik/css_color_grammar_impl.hpp b/include/mapnik/css_color_grammar_impl.hpp
index 5b37f87..a1cad2a 100644
--- a/include/mapnik/css_color_grammar_impl.hpp
+++ b/include/mapnik/css_color_grammar_impl.hpp
@@ -22,12 +22,6 @@
 
 // NOTE: This is an implementation header file and is only meant to be included
 //    from implementation files. It therefore doesn't have an include guard.
-
-// boost
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 104500
-
 #include <mapnik/css_color_grammar.hpp>
 
 namespace mapnik
@@ -38,14 +32,14 @@ css_color_grammar<Iterator>::css_color_grammar()
     : css_color_grammar::base_type(css_color)
 
 {
-    using qi::lit;
-    using qi::_val;
-    using qi::double_;
-    using qi::_1;
-    using qi::_a;
-    using qi::_b;
-    using qi::_c;
-    using ascii::no_case;
+    qi::lit_type lit;
+    qi::_val_type _val;
+    qi::double_type double_;
+    qi::_1_type _1;
+    qi::_a_type _a;
+    qi::_b_type _b;
+    qi::_c_type _c;
+    ascii::no_case_type no_case;
     using phoenix::at_c;
 
     css_color %= rgba_color
@@ -98,5 +92,3 @@ css_color_grammar<Iterator>::css_color_grammar()
 }
 
 }
-
-#endif
diff --git a/include/mapnik/ctrans.hpp b/include/mapnik/ctrans.hpp
deleted file mode 100644
index 9091408..0000000
--- a/include/mapnik/ctrans.hpp
+++ /dev/null
@@ -1,249 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_CTRANS_HPP
-#define MAPNIK_CTRANS_HPP
-
-// mapnik
-#include <mapnik/box2d.hpp>
-#include <mapnik/vertex.hpp>
-#include <mapnik/proj_transform.hpp>
-
-// stl
-#include <algorithm>
-
-namespace mapnik
-{
-
-template <typename Transform, typename Geometry>
-struct MAPNIK_DECL coord_transform
-{
-    // SFINAE value_type detector
-    template <typename T>
-    struct void_type
-    {
-        typedef void type;
-    };
-
-    template <typename T, typename D, typename _ = void>
-    struct select_value_type
-    {
-        typedef D type;
-    };
-
-    template <typename T, typename D>
-    struct select_value_type<T, D, typename void_type<typename T::value_type>::type>
-    {
-        typedef typename T::value_type type;
-    };
-
-    typedef std::size_t size_type;
-    typedef typename select_value_type<Geometry, void>::type value_type;
-
-    coord_transform(Transform const& t,
-                     Geometry & geom,
-                     proj_transform const& prj_trans)
-        : t_(&t),
-        geom_(geom),
-        prj_trans_(&prj_trans)  {}
-
-    explicit coord_transform(Geometry & geom)
-        : t_(0),
-        geom_(geom),
-        prj_trans_(0)  {}
-
-    void set_proj_trans(proj_transform const& prj_trans)
-    {
-        prj_trans_ = &prj_trans;
-    }
-
-    void set_trans(Transform  const& t)
-    {
-        t_ = &t;
-    }
-
-    unsigned vertex(double *x, double *y) const
-    {
-        unsigned command = geom_.vertex(x, y);
-        if ( command != SEG_END)
-        {
-            double z = 0;
-            if (!prj_trans_->backward(*x, *y, z))
-                return SEG_END;
-        }
-        t_->forward(x, y);
-        return command;
-    }
-
-    void rewind(unsigned pos) const
-    {
-        geom_.rewind(pos);
-    }
-
-    unsigned type() const
-    {
-        return static_cast<unsigned>(geom_.type());
-    }
-
-    Geometry const& geom() const
-    {
-        return geom_;
-    }
-
-private:
-    Transform const* t_;
-    Geometry & geom_;
-    proj_transform const* prj_trans_;
-};
-
-class CoordTransform
-{
-private:
-    int width_;
-    int height_;
-    box2d<double> extent_;
-    double offset_x_;
-    double offset_y_;
-    double sx_;
-    double sy_;
-
-public:
-    CoordTransform(int width, int height, const box2d<double>& extent,
-                   double offset_x = 0, double offset_y = 0)
-        : width_(width),
-          height_(height),
-          extent_(extent),
-          offset_x_(offset_x),
-          offset_y_(offset_y),
-          sx_(1.0),
-          sy_(1.0)
-    {
-        if (extent_.width() > 0)
-            sx_ = static_cast<double>(width_) / extent_.width();
-        if (extent_.height() > 0)
-            sy_ = static_cast<double>(height_) / extent_.height();
-    }
-
-    inline int width() const
-    {
-        return width_;
-    }
-
-    inline int height() const
-    {
-        return height_;
-    }
-
-    inline double scale_x() const
-    {
-        return sx_;
-    }
-
-    inline double scale_y() const
-    {
-        return sy_;
-    }
-
-    inline void forward(double *x, double *y) const
-    {
-        *x = (*x - extent_.minx()) * sx_ - offset_x_;
-        *y = (extent_.maxy() - *y) * sy_ - offset_y_;
-    }
-
-    inline void backward(double *x, double *y) const
-    {
-        *x = extent_.minx() + (*x + offset_x_) / sx_;
-        *y = extent_.maxy() - (*y + offset_y_) / sy_;
-    }
-
-    inline coord2d& forward(coord2d& c) const
-    {
-        forward(&c.x, &c.y);
-        return c;
-    }
-
-    inline coord2d& backward(coord2d& c) const
-    {
-        backward(&c.x, &c.y);
-        return c;
-    }
-
-    inline box2d<double> forward(const box2d<double>& e,
-                                 proj_transform const& prj_trans) const
-    {
-        double x0 = e.minx();
-        double y0 = e.miny();
-        double x1 = e.maxx();
-        double y1 = e.maxy();
-        double z = 0.0;
-        prj_trans.backward(x0, y0, z);
-        forward(&x0, &y0);
-        prj_trans.backward(x1, y1, z);
-        forward(&x1, &y1);
-        return box2d<double>(x0, y0, x1, y1);
-    }
-
-    inline box2d<double> forward(const box2d<double>& e) const
-    {
-        double x0 = e.minx();
-        double y0 = e.miny();
-        double x1 = e.maxx();
-        double y1 = e.maxy();
-        forward(&x0, &y0);
-        forward(&x1, &y1);
-        return box2d<double>(x0, y0, x1, y1);
-    }
-
-    inline box2d<double> backward(const box2d<double>& e,
-                                  proj_transform const& prj_trans) const
-    {
-        double x0 = e.minx();
-        double y0 = e.miny();
-        double x1 = e.maxx();
-        double y1 = e.maxy();
-        double z = 0.0;
-        backward(&x0, &y0);
-        prj_trans.forward(x0, y0, z);
-        backward(&x1, &y1);
-        prj_trans.forward(x1, y1, z);
-        return box2d<double>(x0, y0, x1, y1);
-    }
-
-    inline box2d<double> backward(const box2d<double>& e) const
-    {
-        double x0 = e.minx();
-        double y0 = e.miny();
-        double x1 = e.maxx();
-        double y1 = e.maxy();
-        backward(&x0, &y0);
-        backward(&x1, &y1);
-        return box2d<double>(x0, y0, x1, y1);
-    }
-
-    inline box2d<double> const& extent() const
-    {
-        return extent_;
-    }
-};
-}
-
-#endif // MAPNIK_CTRANS_HPP
diff --git a/include/mapnik/datasource.hpp b/include/mapnik/datasource.hpp
index b2edb91..1c13c7f 100644
--- a/include/mapnik/datasource.hpp
+++ b/include/mapnik/datasource.hpp
@@ -28,11 +28,13 @@
 #include <mapnik/params.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/query.hpp>
+#include <mapnik/featureset.hpp>
 #include <mapnik/feature_layer_desc.hpp>
 #include <mapnik/noncopyable.hpp>
+#include <mapnik/feature_style_processor_context.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
+#include <memory>
 #include <boost/optional.hpp>
 
 // stl
@@ -41,14 +43,6 @@
 
 namespace mapnik {
 
-struct MAPNIK_DECL Featureset : private mapnik::noncopyable
-{
-    virtual feature_ptr next() = 0;
-    virtual ~Featureset() {}
-};
-
-typedef boost::shared_ptr<Featureset> featureset_ptr;
-
 class MAPNIK_DECL datasource_exception : public std::exception
 {
 public:
@@ -104,11 +98,23 @@ public:
         return params_;
     }
 
+    bool operator==(datasource const& rhs) const
+    {
+        return params_ == rhs.params();
+    }
+
     /*!
      * @brief Get the type of the datasource
      * @return The type of the datasource (Vector or Raster)
      */
     virtual datasource_t type() const = 0;
+
+    virtual processor_context_ptr get_context(feature_style_context_map&) const { return processor_context_ptr(); }
+    virtual featureset_ptr features_with_context(query const& q,processor_context_ptr /*ctx*/) const
+    {
+        // default implementation without context use features method
+        return features(q);
+    }
     virtual featureset_ptr features(query const& q) const = 0;
     virtual featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const = 0;
     virtual box2d<double> envelope() const = 0;
@@ -119,9 +125,9 @@ protected:
     parameters params_;
 };
 
-typedef const char * datasource_name();
-typedef datasource* create_ds(parameters const& params);
-typedef void destroy_ds(datasource *ds);
+using datasource_name = const char* (*)();
+using create_ds = datasource* (*) (parameters const&);
+using destroy_ds = void (*) (datasource *);
 
 class datasource_deleter
 {
@@ -132,7 +138,7 @@ public:
     }
 };
 
-typedef boost::shared_ptr<datasource> datasource_ptr;
+using datasource_ptr = std::shared_ptr<datasource>;
 
 #ifdef MAPNIK_STATIC_PLUGINS
     #define DATASOURCE_PLUGIN(classname)
diff --git a/include/mapnik/datasource_cache.hpp b/include/mapnik/datasource_cache.hpp
index 74a70c9..2a8b752 100644
--- a/include/mapnik/datasource_cache.hpp
+++ b/include/mapnik/datasource_cache.hpp
@@ -24,19 +24,20 @@
 #define MAPNIK_DATASOURCE_CACHE_HPP
 
 // mapnik
+#include <mapnik/config.hpp>
 #include <mapnik/utils.hpp>
-#include <mapnik/params.hpp>
-#include <mapnik/datasource.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/shared_ptr.hpp>
-
 // stl
 #include <map>
+#include <set>
+#include <vector>
+#include <memory>
 
 namespace mapnik {
 
+class datasource;
+class parameters;
 class PluginInfo;
 
 class MAPNIK_DECL datasource_cache
@@ -47,16 +48,19 @@ class MAPNIK_DECL datasource_cache
 public:
     std::vector<std::string> plugin_names();
     std::string plugin_directories();
-    void register_datasources(std::string const& path);
+    bool register_datasources(std::string const& path, bool recurse = false);
     bool register_datasource(std::string const& path);
-    boost::shared_ptr<datasource> create(parameters const& params);
+    std::shared_ptr<datasource> create(parameters const& params);
 private:
     datasource_cache();
     ~datasource_cache();
-    std::map<std::string,boost::shared_ptr<PluginInfo> > plugins_;
+    std::map<std::string,std::shared_ptr<PluginInfo> > plugins_;
     bool registered_;
-    std::vector<std::string> plugin_directories_;
+    std::set<std::string> plugin_directories_;
 };
+
+extern template class MAPNIK_DECL singleton<datasource_cache, CreateStatic>;
+
 }
 
 #endif // MAPNIK_DATASOURCE_CACHE_HPP
diff --git a/include/mapnik/debug.hpp b/include/mapnik/debug.hpp
index caf5777..3aa8510 100644
--- a/include/mapnik/debug.hpp
+++ b/include/mapnik/debug.hpp
@@ -25,22 +25,20 @@
 
 // mapnik (should not depend on anything that need to use this)
 #include <mapnik/config.hpp>
+#include <mapnik/unique_lock.hpp>
 #include <mapnik/utils.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/unordered_map.hpp>
-#ifdef MAPNIK_THREADSAFE
-#include <boost/thread/mutex.hpp>
-#endif
-
 // std
 #include <iostream>
 #include <sstream>
 #include <ostream>
-#include <fstream>
+#include <iosfwd>
 #include <string>
-
+#include <unordered_map>
+#ifdef MAPNIK_THREADSAFE
+#include <mutex>
+#endif
 
 namespace mapnik {
 
@@ -61,7 +59,7 @@ namespace mapnik {
             none = 3
         };
 
-        typedef boost::unordered_map<std::string, severity_type> severity_map;
+        using severity_map = std::unordered_map<std::string, severity_type>;
 
         // global security level
         static severity_type get_severity()
@@ -69,10 +67,10 @@ namespace mapnik {
             return severity_level_;
         }
 
-        static void set_severity(const severity_type& severity_level)
+        static void set_severity(severity_type const& severity_level)
         {
 #ifdef MAPNIK_THREADSAFE
-            boost::mutex::scoped_lock lock(severity_mutex_);
+            mapnik::scoped_lock lock(severity_mutex_);
 #endif
 
             severity_level_ = severity_level;
@@ -93,10 +91,10 @@ namespace mapnik {
         }
 
         static void set_object_severity(std::string const& object_name,
-                                        const severity_type& security_level)
+                                        severity_type const& security_level)
         {
 #ifdef MAPNIK_THREADSAFE
-            boost::mutex::scoped_lock lock(severity_mutex_);
+            mapnik::scoped_lock lock(severity_mutex_);
 #endif
             if (! object_name.empty())
             {
@@ -107,7 +105,7 @@ namespace mapnik {
         static void clear_object_severity()
         {
 #ifdef MAPNIK_THREADSAFE
-            boost::mutex::scoped_lock lock(severity_mutex_);
+            mapnik::scoped_lock lock(severity_mutex_);
 #endif
 
             object_severity_level_.clear();
@@ -122,7 +120,7 @@ namespace mapnik {
         static void set_format(std::string const& format)
         {
 #ifdef MAPNIK_THREADSAFE
-            boost::mutex::scoped_lock lock(format_mutex_);
+            mapnik::scoped_lock lock(format_mutex_);
 #endif
             format_ = format;
         }
@@ -147,8 +145,8 @@ namespace mapnik {
         static std::streambuf* saved_buf_;
 
 #ifdef MAPNIK_THREADSAFE
-        static boost::mutex severity_mutex_;
-        static boost::mutex format_mutex_;
+        static std::mutex severity_mutex_;
+        static std::mutex format_mutex_;
 #endif
     };
 
@@ -162,13 +160,13 @@ namespace mapnik {
         class clog_sink
         {
         public:
-            typedef std::basic_ostringstream<Ch, Tr, A> stream_buffer;
+            using stream_buffer = std::basic_ostringstream<Ch, Tr, A>;
 
-            void operator()(const logger::severity_type& severity, const stream_buffer &s)
+            void operator()(logger::severity_type const& /*severity*/, stream_buffer const& s)
             {
 #ifdef MAPNIK_THREADSAFE
-                static boost::mutex mutex;
-                boost::mutex::scoped_lock lock(mutex);
+                static std::mutex mutex;
+                mapnik::scoped_lock lock(mutex);
 #endif
                 std::clog << logger::str() << " " << s.str() << std::endl;
             }
@@ -189,19 +187,23 @@ namespace mapnik {
         class base_log : public mapnik::noncopyable
         {
         public:
-            typedef OutputPolicy<Ch, Tr, A> output_policy;
+            using output_policy = OutputPolicy<Ch, Tr, A>;
 
             base_log() {}
 
+#ifdef MAPNIK_LOG
             base_log(const char* object_name)
             {
-#ifdef MAPNIK_LOG
-                if (object_name != NULL)
+                if (object_name != nullptr)
                 {
                     object_name_ = object_name;
                 }
-#endif
             }
+#else
+            base_log(const char* /*object_name*/)
+            {
+            }
+#endif
 
             ~base_log()
             {
@@ -214,13 +216,20 @@ namespace mapnik {
             }
 
             template<class T>
-            base_log &operator<<(const T &x)
-            {
 #ifdef MAPNIK_LOG
+            base_log &operator<<(T const& x)
+            {
+
                 streambuf_ << x;
-#endif
                 return *this;
             }
+#else
+            base_log &operator<<(T const& /*x*/)
+            {
+
+                return *this;
+            }
+#endif
 
         private:
 #ifdef MAPNIK_LOG
@@ -248,13 +257,13 @@ namespace mapnik {
         class base_log_always : public mapnik::noncopyable
         {
         public:
-            typedef OutputPolicy<Ch, Tr, A> output_policy;
+            using output_policy = OutputPolicy<Ch, Tr, A>;
 
             base_log_always() {}
 
             base_log_always(const char* object_name)
             {
-                if (object_name != NULL)
+                if (object_name != nullptr)
                 {
                     object_name_ = object_name;
                 }
@@ -269,7 +278,7 @@ namespace mapnik {
             }
 
             template<class T>
-            base_log_always &operator<<(const T &x)
+            base_log_always &operator<<(T const& x)
             {
                 streambuf_ << x;
                 return *this;
@@ -286,9 +295,9 @@ namespace mapnik {
         };
 
 
-        typedef base_log<clog_sink, logger::debug> base_log_debug;
-        typedef base_log<clog_sink, logger::warn> base_log_warn;
-        typedef base_log_always<clog_sink, logger::error> base_log_error;
+        using base_log_debug = base_log<clog_sink, logger::debug>;
+        using base_log_warn = base_log<clog_sink, logger::warn>;
+        using base_log_error = base_log_always<clog_sink, logger::error>;
 
     } // namespace detail
 
diff --git a/include/mapnik/debug_symbolizer.hpp b/include/mapnik/debug_symbolizer.hpp
deleted file mode 100644
index 225b97c..0000000
--- a/include/mapnik/debug_symbolizer.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_DEBUG_SYMBOLIZER_HPP
-#define MAPNIK_DEBUG_SYMBOLIZER_HPP
-
-#include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-enum debug_symbolizer_mode_enum {
-    DEBUG_SYM_MODE_COLLISION,
-    DEBUG_SYM_MODE_VERTEX,
-    debug_symbolizer_mode_enum_MAX
-};
-
-DEFINE_ENUM( debug_symbolizer_mode_e, debug_symbolizer_mode_enum );
-
-struct MAPNIK_DECL debug_symbolizer :
-        public symbolizer_base
-{
-    debug_symbolizer();
-    debug_symbolizer(debug_symbolizer const& rhs);
-    debug_symbolizer_mode_e get_mode() const;
-    void set_mode(debug_symbolizer_mode_e mode);
-
-private:
-    debug_symbolizer_mode_e mode_;
-
-};
-
-}
-
-#endif // DEBUG_SYMBOLIZER_HPP
diff --git a/include/mapnik/distance.hpp b/include/mapnik/distance.hpp
deleted file mode 100644
index 83511c1..0000000
--- a/include/mapnik/distance.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_DISTANCE_HPP
-#define MAPNIK_DISTANCE_HPP
-
-#include <mapnik/coord.hpp>
-
-namespace mapnik
-{
-struct ellipsoid;
-
-// great-circle distance
-
-class great_circle_distance
-{
-public:
-    double operator() (coord2d const& pt0, coord2d const& pt1) const;
-};
-
-// vincenty distance
-/*
-  class vincenty_distance : boost::noncopyble
-  {
-  public:
-  vincenty_distance(ellipsoid const& e);
-  double operator() (coord2d const& pt0, coord2d const& pt1) const;
-  private:
-  ellipsoid & e_;
-  };
-*/
-}
-
-#endif // MAPNIK_DISTANCE_HPP
diff --git a/include/mapnik/enumeration.hpp b/include/mapnik/enumeration.hpp
index 9b61c7e..c0ca1c7 100644
--- a/include/mapnik/enumeration.hpp
+++ b/include/mapnik/enumeration.hpp
@@ -27,7 +27,6 @@
 #include <mapnik/config.hpp>
 
 // stl
-#include <vector>
 #include <bitset>
 #include <iostream>
 #include <cstdlib>
@@ -138,7 +137,7 @@ protected:
 template <typename ENUM, int THE_MAX>
 class MAPNIK_DECL enumeration {
 public:
-    typedef ENUM native_type;
+    using native_type = ENUM;
 
     enumeration()
         :  value_() {}
@@ -317,16 +316,16 @@ operator>>(std::istream & is, mapnik::enumeration<ENUM, THE_MAX> & e)
 
 } // end of namespace
 
-/** Helper macro. Creates a typedef.
+/** Helper macro.
  * @relates mapnik::enumeration
  */
 #ifdef _MSC_VER
 #define DEFINE_ENUM( name, e)                   \
     template enumeration<e, e ## _MAX>;         \
-    typedef enumeration<e, e ## _MAX> name
+    using name = enumeration<e, e ## _MAX>;
 #else
 #define DEFINE_ENUM( name, e)                   \
-    typedef enumeration<e, e ## _MAX> name
+    using name = enumeration<e, e ## _MAX>;
 #endif
 
 /** Helper macro. Runs the verify_mapnik_enum() method during static initialization.
@@ -334,8 +333,8 @@ operator>>(std::istream & is, mapnik::enumeration<ENUM, THE_MAX> & e)
  */
 
 #define IMPLEMENT_ENUM( name, strings )                                 \
-    template <> const char ** name ::our_strings_ = strings;            \
-    template <> std::string name ::our_name_ = #name;                   \
-    template <> bool name ::our_verified_flag_( name ::verify_mapnik_enum(__FILE__, __LINE__));
+    template <> MAPNIK_DECL const char ** name ::our_strings_ = strings;            \
+    template <> MAPNIK_DECL std::string name ::our_name_ = #name;                   \
+    template <> MAPNIK_DECL bool name ::our_verified_flag_( name ::verify_mapnik_enum(__FILE__, __LINE__));
 
 #endif // MAPNIK_ENUMERATION_HPP
diff --git a/include/mapnik/evaluate_global_attributes.hpp b/include/mapnik/evaluate_global_attributes.hpp
new file mode 100644
index 0000000..309c5c8
--- /dev/null
+++ b/include/mapnik/evaluate_global_attributes.hpp
@@ -0,0 +1,333 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_EVALUATE_GLOBAL_ATTRIBUTES_HPP
+#define MAPNIK_EVALUATE_GLOBAL_ATTRIBUTES_HPP
+
+#include <mapnik/map.hpp>
+#include <mapnik/rule.hpp>
+#include <mapnik/feature_type_style.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/expression_node.hpp>
+#include <mapnik/color_factory.hpp>
+#include <mapnik/noncopyable.hpp>
+#include <mapnik/function_call.hpp>
+#include <mapnik/util/variant.hpp>
+
+namespace mapnik {
+
+namespace {
+
+template <typename T, typename Attributes>
+struct evaluate_expression : util::static_visitor<T>
+{
+    using value_type = T;
+
+    explicit evaluate_expression(Attributes const& attributes)
+        : attributes_(attributes) {}
+
+    value_type operator() (attribute const&) const
+    {
+        throw std::runtime_error("can't evaluate feature attributes in this context");
+    }
+
+    value_type operator() (global_attribute const& attr) const
+    {
+        auto itr = attributes_.find(attr.name);
+        if (itr != attributes_.end())
+        {
+            return itr->second;
+        }
+        return value_type();// throw?
+    }
+
+    value_type operator() (geometry_type_attribute const&) const
+    {
+        throw std::runtime_error("can't evaluate geometry_type attributes in this context");
+    }
+
+    value_type operator() (binary_node<tags::logical_and> const & x) const
+    {
+        return (util::apply_visitor(*this, x.left).to_bool())
+            && (util::apply_visitor(*this, x.right).to_bool());
+    }
+
+    value_type operator() (binary_node<tags::logical_or> const & x) const
+    {
+        return (util::apply_visitor(*this,x.left).to_bool())
+            || (util::apply_visitor(*this,x.right).to_bool());
+    }
+
+    template <typename Tag>
+    value_type operator() (binary_node<Tag> const& x) const
+    {
+        typename make_op<Tag>::type operation;
+        return operation(util::apply_visitor(*this, x.left),
+                         util::apply_visitor(*this, x.right));
+    }
+
+    template <typename Tag>
+    value_type operator() (unary_node<Tag> const& x) const
+    {
+        typename make_op<Tag>::type func;
+        return func(util::apply_visitor(*this, x.expr));
+    }
+
+    value_type operator() (unary_node<tags::logical_not> const& x) const
+    {
+        return ! (util::apply_visitor(*this,x.expr).to_bool());
+    }
+
+    value_type operator() (regex_match_node const& x) const
+    {
+        value_type v = util::apply_visitor(*this, x.expr);
+        return x.apply(v);
+    }
+
+    value_type operator() (regex_replace_node const& x) const
+    {
+        value_type v = util::apply_visitor(*this, x.expr);
+        return x.apply(v);
+    }
+
+    value_type operator() (unary_function_call const& call) const
+    {
+        value_type arg = util::apply_visitor(*this, call.arg);
+        return call.fun(arg);
+    }
+
+    value_type operator() (binary_function_call const& call) const
+    {
+        value_type arg1 = util::apply_visitor(*this, call.arg1);
+        value_type arg2 = util::apply_visitor(*this, call.arg2);
+        return call.fun(arg1, arg2);
+    }
+
+    template <typename ValueType>
+    value_type operator() (ValueType const& val) const
+    {
+        return value_type(val);
+    }
+
+    Attributes const& attributes_;
+};
+
+template <typename T>
+struct evaluate_expression<T, boost::none_t> : util::static_visitor<T>
+{
+    using value_type = T;
+
+    evaluate_expression(boost::none_t) {}
+
+    value_type operator() (attribute const&) const
+    {
+        throw std::runtime_error("can't evaluate feature attributes in this context");
+    }
+
+    value_type operator() (global_attribute const&) const
+    {
+        throw std::runtime_error("can't evaluate feature attributes in this context");
+    }
+
+    value_type operator() (geometry_type_attribute const&) const
+    {
+        throw std::runtime_error("can't evaluate geometry_type attributes in this context");
+    }
+
+    value_type operator() (binary_node<tags::logical_and> const & x) const
+    {
+        return (util::apply_visitor(*this, x.left).to_bool())
+            && (util::apply_visitor(*this, x.right).to_bool());
+    }
+
+    value_type operator() (binary_node<tags::logical_or> const & x) const
+    {
+        return (util::apply_visitor(*this,x.left).to_bool())
+            || (util::apply_visitor(*this,x.right).to_bool());
+    }
+
+    template <typename Tag>
+    value_type operator() (binary_node<Tag> const& x) const
+    {
+        typename make_op<Tag>::type operation;
+        return operation(util::apply_visitor(*this, x.left),
+                         util::apply_visitor(*this, x.right));
+    }
+
+    template <typename Tag>
+    value_type operator() (unary_node<Tag> const& x) const
+    {
+        typename make_op<Tag>::type func;
+        return func(util::apply_visitor(*this, x.expr));
+    }
+
+    value_type operator() (unary_node<tags::logical_not> const& x) const
+    {
+        return ! (util::apply_visitor(*this,x.expr).to_bool());
+    }
+
+    value_type operator() (regex_match_node const& x) const
+    {
+        value_type v = util::apply_visitor(*this, x.expr);
+        return x.apply(v);
+    }
+
+    value_type operator() (regex_replace_node const& x) const
+    {
+        value_type v = util::apply_visitor(*this, x.expr);
+        return x.apply(v);
+    }
+
+    value_type operator() (unary_function_call const& call) const
+    {
+        value_type arg = util::apply_visitor(*this, call.arg);
+        return call.fun(arg);
+    }
+
+    value_type operator() (binary_function_call const& call) const
+    {
+        value_type arg1 = util::apply_visitor(*this, call.arg1);
+        value_type arg2 = util::apply_visitor(*this, call.arg2);
+        return call.fun(arg1, arg2);
+    }
+
+    template <typename ValueType>
+    value_type operator() (ValueType const& val) const
+    {
+        return value_type(val);
+    }
+};
+
+struct assign_value
+{
+    template<typename Attributes>
+    static void apply(symbolizer_base::value_type & val, expression_ptr const& expr, Attributes const& attributes, property_types target )
+    {
+
+        switch (target)
+        {
+        case property_types::target_color:
+        {
+            // evaluate expression as a string then parse as css color
+            std::string str = util::apply_visitor(mapnik::evaluate_expression<mapnik::value,
+                                               Attributes>(attributes),*expr).to_string();
+            try { val = parse_color(str); }
+            catch (...) { val = color(0,0,0);}
+            break;
+        }
+        case property_types::target_double:
+        {
+            val = util::apply_visitor(mapnik::evaluate_expression<mapnik::value, Attributes>(attributes),*expr).to_double();
+            break;
+        }
+        case property_types::target_integer:
+        {
+            val = util::apply_visitor(mapnik::evaluate_expression<mapnik::value, Attributes>(attributes),*expr).to_int();
+            break;
+        }
+        case property_types::target_bool:
+        {
+            val = util::apply_visitor(mapnik::evaluate_expression<mapnik::value, Attributes>(attributes),*expr).to_bool();
+            break;
+        }
+        default: // no-op
+            break;
+        }
+    }
+};
+
+}
+
+template <typename T>
+std::tuple<T,bool> pre_evaluate_expression (expression_ptr const& expr)
+{
+    try
+    {
+        return std::make_tuple(util::apply_visitor(mapnik::evaluate_expression<T, boost::none_t>(boost::none),*expr), true);
+    }
+    catch (...)
+    {
+        return std::make_tuple(T(),false);
+    }
+}
+
+struct evaluate_global_attributes : mapnik::noncopyable
+{
+    template <typename Attributes>
+    struct evaluator : util::static_visitor<>
+    {
+        evaluator(symbolizer_base::cont_type::value_type & prop, Attributes const& attributes)
+            : prop_(prop),
+              attributes_(attributes) {}
+
+        void operator() (expression_ptr const& expr) const
+        {
+            auto const& meta = get_meta(prop_.first);
+            assign_value::apply(prop_.second, expr, attributes_, std::get<2>(meta));
+        }
+
+        template <typename T>
+        void operator() (T const&) const
+        {
+            // no-op
+        }
+        symbolizer_base::cont_type::value_type & prop_;
+        Attributes const& attributes_;
+    };
+
+    template <typename Attributes>
+    struct extract_symbolizer : util::static_visitor<>
+    {
+        extract_symbolizer(Attributes const& attributes)
+            : attributes_(attributes) {}
+
+        template <typename Symbolizer>
+        void operator() (Symbolizer & sym) const
+        {
+            for (auto & prop : sym.properties)
+            {
+                util::apply_visitor(evaluator<Attributes>(prop, attributes_), prop.second);
+            }
+        }
+        Attributes const& attributes_;
+    };
+
+    template <typename Attributes>
+    static void apply(Map & m, Attributes const& attributes)
+    {
+        for ( auto & val :  m.styles() )
+        {
+            for (auto & rule : val.second.get_rules_nonconst())
+            {
+                for (auto & sym : rule)
+                {
+                    util::apply_visitor(extract_symbolizer<Attributes>(attributes), sym);
+                }
+            }
+        }
+    }
+};
+
+}
+
+#endif // MAPNIK_EVALUATE_GLOBAL_ATTRIBUTES_HPP
diff --git a/include/mapnik/expression.hpp b/include/mapnik/expression.hpp
index 8672074..3ec4531 100644
--- a/include/mapnik/expression.hpp
+++ b/include/mapnik/expression.hpp
@@ -28,7 +28,7 @@
 #include <mapnik/expression_node_types.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <string>
@@ -38,13 +38,10 @@ namespace mapnik
 {
 
 // fwd declare to reduce compile time
-template <typename Iterator> struct expression_grammar;
-typedef boost::shared_ptr<expr_node> expression_ptr;
-typedef std::set<expression_ptr> expression_set;
+using expression_ptr = std::shared_ptr<expr_node>;
+using expression_set = std::set<expression_ptr>;
 
-
-MAPNIK_DECL expression_ptr parse_expression (std::string const& wkt, std::string const& encoding = "UTF8");
-MAPNIK_DECL expression_ptr parse_expression (std::string const& wkt, mapnik::expression_grammar<std::string::const_iterator> const& g);
+MAPNIK_DECL expression_ptr parse_expression (std::string const& wkt);
 }
 
 #endif // MAPNIK_EXPRESSION_HPP
diff --git a/include/mapnik/expression_evaluator.hpp b/include/mapnik/expression_evaluator.hpp
index 1008be4..e766a4e 100644
--- a/include/mapnik/expression_evaluator.hpp
+++ b/include/mapnik/expression_evaluator.hpp
@@ -25,31 +25,49 @@
 
 // mapnik
 #include <mapnik/attribute.hpp>
-#include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/expression_node.hpp>
-
-// boost
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/regex.hpp>
-#if defined(BOOST_REGEX_HAS_ICU)
-#include <boost/regex/icu.hpp>
-#endif
+#include <mapnik/function_call.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/feature.hpp>
 
 namespace mapnik
 {
-template <typename T0, typename T1>
-struct evaluate : boost::static_visitor<T1>
+
+template <typename T0, typename T1, typename T2>
+struct evaluate : util::static_visitor<T1>
 {
-    typedef T0 feature_type;
-    typedef T1 value_type;
+    using feature_type = T0;
+    using value_type = T1;
+    using variable_type = T2;
+
+    explicit evaluate(feature_type const& f, variable_type const& v)
+        : feature_(f),
+          vars_(v) {}
+
+    value_integer operator() (value_integer val) const
+    {
+        return val;
+    }
+
+    value_double operator() (value_double val) const
+    {
+        return val;
+    }
+
+    value_bool operator() (value_bool val) const
+    {
+        return val;
+    }
 
-    explicit evaluate(feature_type const& f)
-        : feature_(f) {}
+    value_null operator() (value_null val) const
+    {
+        return val;
+    }
 
-    value_type operator() (value_type x) const
+    value_unicode_string const& operator() (value_unicode_string const& str) const
     {
-        return x;
+        return str;
     }
 
     value_type operator() (attribute const& attr) const
@@ -57,6 +75,16 @@ struct evaluate : boost::static_visitor<T1>
         return attr.value<value_type,feature_type>(feature_);
     }
 
+    value_type operator() (global_attribute const& attr) const
+    {
+        auto itr = vars_.find(attr.name);
+        if (itr != vars_.end())
+        {
+            return itr->second;
+        }
+        return value_type();// throw?
+    }
+
     value_type operator() (geometry_type_attribute const& geom) const
     {
         return geom.value<value_type,feature_type>(feature_);
@@ -64,60 +92,63 @@ struct evaluate : boost::static_visitor<T1>
 
     value_type operator() (binary_node<tags::logical_and> const & x) const
     {
-        return (boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.left).to_bool())
-            && (boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.right).to_bool());
+        return (util::apply_visitor(*this, x.left).to_bool())
+            && (util::apply_visitor(*this, x.right).to_bool());
     }
 
     value_type operator() (binary_node<tags::logical_or> const & x) const
     {
-        return (boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.left).to_bool())
-            || (boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.right).to_bool());
+        return (util::apply_visitor(*this,x.left).to_bool())
+            || (util::apply_visitor(*this,x.right).to_bool());
     }
 
     template <typename Tag>
     value_type operator() (binary_node<Tag> const& x) const
     {
         typename make_op<Tag>::type operation;
-        return operation(boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.left),
-                         boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.right));
+        return operation(util::apply_visitor(*this, x.left),
+                         util::apply_visitor(*this, x.right));
     }
 
     template <typename Tag>
     value_type operator() (unary_node<Tag> const& x) const
     {
         typename make_op<Tag>::type func;
-        return func(boost::apply_visitor(*this, x.expr));
+        return func(util::apply_visitor(*this, x.expr));
     }
 
     value_type operator() (unary_node<tags::logical_not> const& x) const
     {
-        return ! (boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.expr).to_bool());
+        return ! (util::apply_visitor(*this,x.expr).to_bool());
     }
 
     value_type operator() (regex_match_node const& x) const
     {
-        value_type v = boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.expr);
-#if defined(BOOST_REGEX_HAS_ICU)
-        return boost::u32regex_match(v.to_unicode(),x.pattern);
-#else
-        return boost::regex_match(v.to_string(),x.pattern);
-#endif
-
+        value_type v = util::apply_visitor(*this, x.expr);
+        return x.apply(v);
     }
 
     value_type operator() (regex_replace_node const& x) const
     {
-        value_type v = boost::apply_visitor(evaluate<feature_type,value_type>(feature_),x.expr);
-#if defined(BOOST_REGEX_HAS_ICU)
-        return boost::u32regex_replace(v.to_unicode(),x.pattern,x.format);
-#else
-        std::string repl = boost::regex_replace(v.to_string(),x.pattern,x.format);
-        mapnik::transcoder tr_("utf8");
-        return tr_.transcode(repl.c_str());
-#endif
+        value_type v = util::apply_visitor(*this, x.expr);
+        return x.apply(v);
+    }
+
+    value_type operator() (unary_function_call const& call) const
+    {
+        value_type arg = util::apply_visitor(*this, call.arg);
+        return call.fun(arg);
+    }
+
+    value_type operator() (binary_function_call const& call) const
+    {
+        value_type arg1 = util::apply_visitor(*this, call.arg1);
+        value_type arg2 = util::apply_visitor(*this, call.arg2);
+        return call.fun(arg1, arg2);
     }
 
     feature_type const& feature_;
+    variable_type const& vars_;
 };
 
 }
diff --git a/include/mapnik/expression_grammar.hpp b/include/mapnik/expression_grammar.hpp
index ed4a430..11a75bb 100644
--- a/include/mapnik/expression_grammar.hpp
+++ b/include/mapnik/expression_grammar.hpp
@@ -28,18 +28,29 @@
 #include <mapnik/value_types.hpp>
 #include <mapnik/unicode.hpp>
 #include <mapnik/expression_node.hpp>
+#include <mapnik/function_call.hpp>
 
-// spirit2
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/support_locals.hpp>
-
-// phoenix
 #include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/fusion/adapted/struct.hpp>
+#pragma GCC diagnostic pop
+
+BOOST_FUSION_ADAPT_STRUCT(mapnik::unary_function_call,
+                          (mapnik::unary_function_impl, fun)
+                          (mapnik::unary_function_call::argument_type, arg))
+
+BOOST_FUSION_ADAPT_STRUCT(mapnik::binary_function_call,
+                          (mapnik::binary_function_impl, fun)
+                          (mapnik::binary_function_call::argument_type, arg1)
+                          (mapnik::binary_function_call::argument_type, arg2))
 
 namespace mapnik
 {
-
-using namespace boost;
 namespace qi = boost::spirit::qi;
 namespace standard_wide =  boost::spirit::standard_wide;
 using standard_wide::space_type;
@@ -49,13 +60,13 @@ struct unicode_impl
     template <typename T>
     struct result
     {
-        typedef UnicodeString type;
+        using type = mapnik::value_unicode_string;
     };
 
     explicit unicode_impl(mapnik::transcoder const& tr)
         : tr_(tr) {}
 
-    UnicodeString operator()(std::string const& str) const
+    mapnik::value_unicode_string operator()(std::string const& str) const
     {
         return tr_.transcode(str.c_str());
     }
@@ -65,10 +76,10 @@ struct unicode_impl
 
 struct regex_match_impl
 {
-    template <typename T0, typename T1>
+    template <typename T>
     struct result
     {
-        typedef expr_node type;
+        using type = expr_node;
     };
 
     explicit regex_match_impl(mapnik::transcoder const& tr)
@@ -82,10 +93,11 @@ struct regex_match_impl
 
 struct regex_replace_impl
 {
-    template <typename T0, typename T1, typename T2>
+
+    template <typename T>
     struct result
     {
-        typedef expr_node type;
+        using type = expr_node;
     };
 
     explicit regex_replace_impl(mapnik::transcoder const& tr)
@@ -110,21 +122,62 @@ struct geometry_types : qi::symbols<char,mapnik::value_integer>
     }
 };
 
+struct boolean_constants :  qi::symbols<char,mapnik::value_bool>
+{
+    boolean_constants()
+    {
+        add
+            ("true", true)
+            ("false", false)
+            ;
+    }
+};
+
+struct floating_point_constants :  qi::symbols<char,mapnik::value_double>
+{
+    floating_point_constants()
+    {
+        add
+            ("pi", 3.1415926535897932384626433832795)
+            ("deg_to_rad",0.017453292519943295769236907684886)
+            ("rad_to_deg",57.295779513082320876798154814105)
+            ;
+    }
+};
+
+
 template <typename T>
 struct integer_parser
 {
-    typedef qi::int_parser<T,10,1,-1> type;
+    using type = qi::int_parser<T,10,1,-1>;
+};
+
+struct unary_function_types : qi::symbols<char, unary_function_impl>
+{
+    unary_function_types();
+};
+
+struct binary_function_types : qi::symbols<char, binary_function_impl>
+{
+    binary_function_types();
 };
 
+
+#ifdef __GNUC__
+template <typename Iterator>
+struct MAPNIK_DECL expression_grammar : qi::grammar<Iterator, expr_node(), space_type>
+#else
 template <typename Iterator>
 struct expression_grammar : qi::grammar<Iterator, expr_node(), space_type>
+#endif
 {
-    typedef qi::rule<Iterator, expr_node(), space_type> rule_type;
+    using rule_type = qi::rule<Iterator, expr_node(), space_type>;
 
-    explicit expression_grammar(mapnik::transcoder const& tr);
+    explicit expression_grammar(std::string const& encoding = "utf-8");
 
     qi::real_parser<double, qi::strict_real_policies<double> > strict_double;
     typename integer_parser<mapnik::value_integer>::type int__;
+    mapnik::transcoder tr_;
     boost::phoenix::function<unicode_impl> unicode_;
     boost::phoenix::function<regex_match_impl> regex_match_;
     boost::phoenix::function<regex_replace_impl> regex_replace_;
@@ -138,13 +191,23 @@ struct expression_grammar : qi::grammar<Iterator, expr_node(), space_type>
     rule_type unary_expr;
     rule_type not_expr;
     rule_type primary_expr;
+    qi::rule<Iterator, unary_function_call() , space_type> unary_function_expr;
+    qi::rule<Iterator, binary_function_call() , space_type> binary_function_expr;
     qi::rule<Iterator, std::string() > regex_match_expr;
     qi::rule<Iterator, expr_node(expr_node), qi::locals<std::string,std::string>, space_type> regex_replace_expr;
     qi::rule<Iterator, std::string() , space_type> attr;
-    qi::rule<Iterator, std::string(), qi::locals<char> > ustring;
+    qi::rule<Iterator, std::string() , space_type> global_attr;
+    qi::rule<Iterator, std::string(), qi::locals<char> > quoted_ustring;
+    qi::rule<Iterator, std::string(), space_type> ustring;
+
     qi::symbols<char const, char const> unesc_char;
     qi::rule<Iterator, char() > quote_char;
     geometry_types geom_type;
+    boolean_constants bool_const;
+    floating_point_constants float_const;
+    unary_function_types unary_func_type;
+    binary_function_types binary_func_type;
+
 };
 
 } // namespace
diff --git a/include/mapnik/expression_grammar_impl.hpp b/include/mapnik/expression_grammar_impl.hpp
index 5ca2c5e..18347cd 100644
--- a/include/mapnik/expression_grammar_impl.hpp
+++ b/include/mapnik/expression_grammar_impl.hpp
@@ -28,9 +28,9 @@
 #include <mapnik/expression_grammar.hpp>
 #include <mapnik/unicode.hpp>
 #include <mapnik/value_types.hpp>
+#include <mapnik/function_call.hpp>
 
 // boost
-#include <boost/version.hpp>
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
 #include <boost/spirit/include/phoenix_object.hpp>
@@ -44,49 +44,63 @@ namespace mapnik {
 namespace mapnik
 {
 
+unary_function_types::unary_function_types()
+{
+    add
+        ("sin",  sin_impl())
+        ("cos",  cos_impl())
+        ("tan",  tan_impl())
+        ("atan", atan_impl())
+        ("exp",  exp_impl())
+        ("abs",  abs_impl())
+        ("length",length_impl())
+        ;
+}
+
+binary_function_types::binary_function_types()
+{
+    add
+        ("min", binary_function_impl(min_impl))
+        ("max", binary_function_impl(max_impl))
+        ("pow", binary_function_impl(pow_impl))
+        ;
+}
+
 template <typename T0,typename T1>
 expr_node regex_match_impl::operator() (T0 & node, T1 const& pattern) const
 {
-#if defined(BOOST_REGEX_HAS_ICU)
-    return regex_match_node(node,tr_.transcode(pattern.c_str()));
-#else
-    return regex_match_node(node,pattern);
-#endif
+    return regex_match_node(tr_,node,pattern);
 }
 
 template <typename T0,typename T1,typename T2>
 expr_node regex_replace_impl::operator() (T0 & node, T1 const& pattern, T2 const& format) const
 {
-#if defined(BOOST_REGEX_HAS_ICU)
-    return regex_replace_node(node,tr_.transcode(pattern.c_str()),tr_.transcode(format.c_str()));
-#else
-    return regex_replace_node(node,pattern,format);
-#endif
+    return regex_replace_node(tr_,node,pattern,format);
 }
 
 template <typename Iterator>
-expression_grammar<Iterator>::expression_grammar(mapnik::transcoder const& tr)
+expression_grammar<Iterator>::expression_grammar(std::string const& encoding)
     : expression_grammar::base_type(expr),
-      unicode_(unicode_impl(tr)),
-      regex_match_(regex_match_impl(tr)),
-      regex_replace_(regex_replace_impl(tr))
+      tr_(encoding),
+      unicode_(unicode_impl(tr_)),
+      regex_match_(regex_match_impl(tr_)),
+      regex_replace_(regex_replace_impl(tr_))
 {
+    qi::_1_type _1;
+    qi::_a_type _a;
+    qi::_b_type _b;
+    qi::_r1_type _r1;
+    qi::no_skip_type no_skip;
+    qi::_val_type _val;
+    qi::lit_type lit;
+    qi::double_type double_;
+    qi::hex_type hex;
+    qi::omit_type omit;
+    qi::alpha_type alpha;
+    qi::alnum_type alnum;
+    standard_wide::char_type char_;
+    standard_wide::no_case_type no_case;
     using boost::phoenix::construct;
-    using qi::_1;
-    using qi::_a;
-    using qi::_b;
-    using qi::_r1;
-#if BOOST_VERSION > 104200
-    using qi::no_skip;
-#endif
-    using qi::lexeme;
-    using qi::_val;
-    using qi::lit;
-    using qi::double_;
-    using qi::hex;
-    using qi::omit;
-    using standard_wide::char_;
-    using standard_wide::no_case;
 
     expr = logical_expr.alias();
 
@@ -114,16 +128,16 @@ expression_grammar<Iterator>::expression_grammar(mapnik::transcoder const& tr)
 
     regex_match_expr = lit(".match")
         >> lit('(')
-        >> ustring [_val = _1]
+        >> quoted_ustring [_val = _1]
         >> lit(')')
         ;
 
     regex_replace_expr =
         lit(".replace")
         >> lit('(')
-        >> ustring           [_a = _1]
+        >> quoted_ustring           [_a = _1]
         >> lit(',')
-        >> ustring           [_b = _1]
+        >> quoted_ustring           [_b = _1]
         >> lit(')')          [_val = regex_replace_(_r1,_a,_b)]
         ;
 
@@ -145,12 +159,18 @@ expression_grammar<Iterator>::expression_grammar(mapnik::transcoder const& tr)
     multiplicative_expr = unary_expr [_val = _1]
         >> *(     '*' >> unary_expr [_val *= _1]
                   | '/' >> unary_expr [_val /= _1]
-                  | '%' >> unary_expr [_val %= _1]
+                  | '%' >> unary_expr [_val %= construct<mapnik::expr_node>(_1)] //needed by clang++ with -std=c++11
                   |  regex_match_expr[_val = regex_match_(_val, _1)]
                   |  regex_replace_expr(_val) [_val = _1]
             )
         ;
 
+    unary_function_expr = unary_func_type > lit('(') > expr > lit(')')
+        ;
+
+    binary_function_expr = binary_func_type > lit('(') > expr > lit(',') > expr > lit(')')
+        ;
+
     unary_expr = primary_expr [_val = _1]
         | '+' >> primary_expr [_val = _1]
         | '-' >> primary_expr [_val = -_1]
@@ -158,14 +178,19 @@ expression_grammar<Iterator>::expression_grammar(mapnik::transcoder const& tr)
 
     primary_expr = strict_double [_val = _1]
         | int__[_val = _1]
-        | no_case[lit("true")] [_val = true]
-        | no_case[lit("false")] [_val = false]
+        | no_case[bool_const][_val = _1]
         | no_case[lit("null")] [_val = value_null() ]
         | no_case[geom_type][_val = _1 ]
-        | ustring [_val = unicode_(_1) ]
+        | no_case[float_const] [_val = _1 ]
+        | quoted_ustring [_val = unicode_(_1)]
         | lit("[mapnik::geometry_type]")[_val = construct<mapnik::geometry_type_attribute>()]
         | attr [_val = construct<mapnik::attribute>( _1 ) ]
+        | global_attr [_val = construct<mapnik::global_attribute>( _1 )]
+        | lit("not") >> expr [_val =  !_1]
+        | unary_function_expr [_val = _1]
+        | binary_function_expr [_val = _1]
         | '(' >> expr [_val = _1 ] >> ')'
+        | ustring[_val = unicode_(_1)] // if we get here then try parsing as unquoted string
         ;
 
     unesc_char.add("\\a", '\a')("\\b", '\b')("\\f", '\f')("\\n", '\n')
@@ -173,18 +198,13 @@ expression_grammar<Iterator>::expression_grammar(mapnik::transcoder const& tr)
         ("\\\'", '\'')("\\\"", '\"')
         ;
 
-#if BOOST_VERSION > 104500
+    ustring %= no_skip[alpha >> *alnum];
     quote_char %= char_('\'') | char_('"');
-    ustring %= omit[quote_char[_a = _1]]
+    quoted_ustring %= omit[quote_char[_a = _1]]
         >> *(unesc_char | "\\x" >> hex | (char_ - lit(_a)))
         >> lit(_a);
     attr %= '[' >> no_skip[+~char_(']')] >> ']';
-#else
-    ustring %= lit('\'')
-        >> *(unesc_char | "\\x" >> hex | (char_ - lit('\'')))
-        >> lit('\'');
-    attr %= '[' >> lexeme[+(char_ - ']')] >> ']';
-#endif
+    global_attr %= '@' >> no_skip[alpha >> * (alnum | char_('-'))];
 
 }
 
diff --git a/include/mapnik/expression_node.hpp b/include/mapnik/expression_node.hpp
index e344f62..c46e852 100644
--- a/include/mapnik/expression_node.hpp
+++ b/include/mapnik/expression_node.hpp
@@ -24,36 +24,35 @@
 #define MAPNIK_EXPRESSION_NODE_HPP
 
 // mapnik
+#include <mapnik/value_types.hpp>
 #include <mapnik/value.hpp>
+#include <mapnik/config.hpp>
+#include <mapnik/unicode.hpp>
 #include <mapnik/attribute.hpp>
+#include <mapnik/function_call.hpp>
 #include <mapnik/expression_node_types.hpp>
 
-// boost
-#include <boost/regex.hpp>
-#if defined(BOOST_REGEX_HAS_ICU)
-#include <boost/regex/icu.hpp>
-#endif
-#include <boost/function.hpp>
-
 namespace mapnik
 {
 
+using value_type = mapnik::value;
+
 template <typename Tag> struct make_op;
-template <> struct make_op<tags::negate> { typedef std::negate<value_type> type;};
-template <> struct make_op<tags::plus> { typedef std::plus<value_type> type;};
-template <> struct make_op<tags::minus> { typedef std::minus<value_type> type;};
-template <> struct make_op<tags::mult> { typedef std::multiplies<value_type> type;};
-template <> struct make_op<tags::div> { typedef std::divides<value_type> type;};
-template <> struct make_op<tags::mod> { typedef std::modulus<value_type> type;};
-template <> struct make_op<tags::less> { typedef std::less<value_type> type;};
-template <> struct make_op<tags::less_equal> { typedef std::less_equal<value_type> type;};
-template <> struct make_op<tags::greater> { typedef std::greater<value_type> type;};
-template <> struct make_op<tags::greater_equal> { typedef std::greater_equal<value_type> type;};
-template <> struct make_op<tags::equal_to> { typedef std::equal_to<value_type> type;};
-template <> struct make_op<tags::not_equal_to> { typedef std::not_equal_to<value_type> type;};
-template <> struct make_op<tags::logical_not> { typedef std::logical_not<value_type> type;};
-template <> struct make_op<tags::logical_and> { typedef std::logical_and<value_type> type;};
-template <> struct make_op<tags::logical_or> { typedef std::logical_or<value_type> type;};
+template <> struct make_op<tags::negate> { using type = std::negate<value_type>;};
+template <> struct make_op<tags::plus> { using type = std::plus<value_type>;};
+template <> struct make_op<tags::minus> { using type = std::minus<value_type>;};
+template <> struct make_op<tags::mult> { using type = std::multiplies<value_type>;};
+template <> struct make_op<tags::div> { using type = std::divides<value_type>;};
+template <> struct make_op<tags::mod> { using type =  std::modulus<value_type>;};
+template <> struct make_op<tags::less> { using type = std::less<value_type>;};
+template <> struct make_op<tags::less_equal> { using type = std::less_equal<value_type>;};
+template <> struct make_op<tags::greater> { using type = std::greater<value_type>;};
+template <> struct make_op<tags::greater_equal> { using type = std::greater_equal<value_type>;};
+template <> struct make_op<tags::equal_to> { using type = std::equal_to<value_type>;};
+template <> struct make_op<tags::not_equal_to> { using type = std::not_equal_to<value_type>;};
+template <> struct make_op<tags::logical_not> { using type = std::logical_not<value_type>;};
+template <> struct make_op<tags::logical_and> { using type = std::logical_and<value_type>;};
+template <> struct make_op<tags::logical_or> { using type =  std::logical_or<value_type>;};
 
 template <typename Tag>
 struct unary_node
@@ -83,82 +82,78 @@ struct binary_node
     expr_node left,right;
 };
 
-#if defined(BOOST_REGEX_HAS_ICU)
-
-struct regex_match_node
+struct unary_function_call
 {
-    regex_match_node (expr_node const& a, UnicodeString const& ustr);
-    expr_node expr;
-    boost::u32regex pattern;
-};
-
+    using argument_type = expr_node;
+    unary_function_call() = default;
+    unary_function_call(unary_function_impl fun, argument_type const& arg)
+        : fun(fun), arg(arg) {}
 
-struct regex_replace_node
-{
-    regex_replace_node (expr_node const& a, UnicodeString const& ustr, UnicodeString const& f);
-    expr_node expr;
-    boost::u32regex pattern;
-    UnicodeString format;
+    unary_function_impl fun;
+    argument_type arg;
 };
 
-#else
-
-struct regex_match_node
+struct binary_function_call
 {
-    regex_match_node (expr_node const& a, std::string const& str);
-    expr_node expr;
-    boost::regex pattern;
+    using argument_type = expr_node;
+    binary_function_call() = default;
+    binary_function_call(binary_function_impl fun, argument_type const& arg1, argument_type const& arg2)
+        : fun(fun), arg1(arg1), arg2(arg2) {}
+    binary_function_impl fun;
+    argument_type arg1;
+    argument_type arg2;
 };
 
+// pimpl
+struct _regex_match_impl;
+struct _regex_replace_impl;
 
-struct regex_replace_node
+struct MAPNIK_DECL regex_match_node
 {
-    regex_replace_node (expr_node const& a, std::string const& str, std::string const& f);
+    regex_match_node(transcoder const& tr, expr_node const& a, std::string const& ustr);
+    mapnik::value apply(mapnik::value const& v) const;
+    std::string to_string() const;
     expr_node expr;
-    boost::regex pattern;
-    std::string format;
+    // TODO - use unique_ptr once https://github.com/mapnik/mapnik/issues/2457 is fixed
+    std::shared_ptr<_regex_match_impl> impl_;
 };
-#endif
 
-struct function_call
+struct MAPNIK_DECL regex_replace_node
 {
-    template<typename Fun>
-    explicit function_call (expr_node const a, Fun f)
-        : expr(a),
-          call_(f) {}
-
+    regex_replace_node(transcoder const& tr, expr_node const& a, std::string const& ustr, std::string const& f);
+    mapnik::value apply(mapnik::value const& v) const;
+    std::string to_string() const;
     expr_node expr;
-    boost::function<value_type(value_type)> call_;
+    // TODO - use unique_ptr once https://github.com/mapnik/mapnik/issues/2457 is fixed
+    std::shared_ptr<_regex_replace_impl> impl_;
 };
 
-// ops
-
-inline expr_node& operator- (expr_node& expr)
+inline expr_node & operator- (expr_node& expr)
 {
     return expr = unary_node<tags::negate>(expr);
 }
 
-inline expr_node & operator += ( expr_node &left ,const expr_node &right)
+inline expr_node & operator += ( expr_node &left, expr_node const& right)
 {
     return left =  binary_node<tags::plus>(left,right);
 }
 
-inline expr_node & operator -= ( expr_node &left ,const expr_node &right)
+inline expr_node & operator -= ( expr_node &left, expr_node const& right)
 {
     return left =  binary_node<tags::minus>(left,right);
 }
 
-inline expr_node & operator *= ( expr_node &left ,const expr_node &right)
+inline expr_node & operator *= ( expr_node &left , expr_node const& right)
 {
     return left =  binary_node<tags::mult>(left,right);
 }
 
-inline expr_node & operator /= ( expr_node &left ,const expr_node &right)
+inline expr_node & operator /= ( expr_node &left , expr_node const& right)
 {
     return left =  binary_node<tags::div>(left,right);
 }
 
-inline expr_node & operator %= ( expr_node &left ,const expr_node &right)
+inline expr_node & operator %= ( expr_node &left , expr_node const& right)
 {
     return left = binary_node<tags::mod>(left,right);
 }
diff --git a/include/mapnik/expression_node_types.hpp b/include/mapnik/expression_node_types.hpp
index 6c1af39..665b808 100644
--- a/include/mapnik/expression_node_types.hpp
+++ b/include/mapnik/expression_node_types.hpp
@@ -24,24 +24,13 @@
 #define MAPNIK_EXPRESSION_NODE_TYPES_HPP
 
 // mapnik
-//#include <mapnik/value.hpp>
-//#include <mapnik/attribute.hpp>
-
-// boost
-#include <boost/variant/variant_fwd.hpp>
-
-namespace boost { template <typename T> class recursive_wrapper; }
+#include <mapnik/config.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/util/variant.hpp>
 
 namespace mapnik
 {
 
-struct attribute;
-struct geometry_type_attribute;
-namespace value_adl_barrier {
-  class value;
-}
-using value_adl_barrier::value;
-
 namespace tags  {
 struct negate
 {
@@ -100,7 +89,7 @@ struct less
     }
 };
 
-struct  less_equal
+struct less_equal
 {
     static const char* str()
     {
@@ -171,33 +160,43 @@ template <typename Tag> struct binary_node;
 template <typename Tag> struct unary_node;
 struct regex_match_node;
 struct regex_replace_node;
-
-typedef mapnik::value value_type;
-
-typedef boost::variant <
-value_type,
+struct attribute;
+struct global_attribute;
+struct geometry_type_attribute;
+struct unary_function_call;
+struct binary_function_call;
+
+using expr_node  = util::variant<
+value_null,
+value_bool,
+value_integer,
+value_double,
+value_unicode_string,
 attribute,
+global_attribute,
 geometry_type_attribute,
-boost::recursive_wrapper<unary_node<tags::negate> >,
-boost::recursive_wrapper<binary_node<tags::plus> >,
-boost::recursive_wrapper<binary_node<tags::minus> >,
-boost::recursive_wrapper<binary_node<tags::mult> >,
-boost::recursive_wrapper<binary_node<tags::div> >,
-boost::recursive_wrapper<binary_node<tags::mod> >,
-boost::recursive_wrapper<binary_node<tags::less> >,
-boost::recursive_wrapper<binary_node<tags::less_equal> >,
-boost::recursive_wrapper<binary_node<tags::greater> >,
-boost::recursive_wrapper<binary_node<tags::greater_equal> >,
-boost::recursive_wrapper<binary_node<tags::equal_to> >,
-boost::recursive_wrapper<binary_node<tags::not_equal_to> >,
-boost::recursive_wrapper<unary_node<tags::logical_not> >,
-boost::recursive_wrapper<binary_node<tags::logical_and> >,
-boost::recursive_wrapper<binary_node<tags::logical_or> >,
-boost::recursive_wrapper<regex_match_node>,
-boost::recursive_wrapper<regex_replace_node>
-> expr_node;
+util::recursive_wrapper<unary_node<tags::negate> >,
+util::recursive_wrapper<binary_node<tags::plus> >,
+util::recursive_wrapper<binary_node<tags::minus> >,
+util::recursive_wrapper<binary_node<tags::mult> >,
+util::recursive_wrapper<binary_node<tags::div> >,
+util::recursive_wrapper<binary_node<tags::mod> >,
+util::recursive_wrapper<binary_node<tags::less> >,
+util::recursive_wrapper<binary_node<tags::less_equal> >,
+util::recursive_wrapper<binary_node<tags::greater> >,
+util::recursive_wrapper<binary_node<tags::greater_equal> >,
+util::recursive_wrapper<binary_node<tags::equal_to> >,
+util::recursive_wrapper<binary_node<tags::not_equal_to> >,
+util::recursive_wrapper<unary_node<tags::logical_not> >,
+util::recursive_wrapper<binary_node<tags::logical_and> >,
+util::recursive_wrapper<binary_node<tags::logical_or> >,
+util::recursive_wrapper<regex_match_node>,
+util::recursive_wrapper<regex_replace_node>,
+util::recursive_wrapper<unary_function_call>,
+util::recursive_wrapper<binary_function_call>
+>;
 
 }
 
 
-#endif //MAPNIK_EXPRESSION_NODE_HPP
+#endif // MAPNIK_EXPRESSION_NODE_HPP
diff --git a/include/mapnik/expression_string.hpp b/include/mapnik/expression_string.hpp
index 565bc13..42c61a7 100644
--- a/include/mapnik/expression_string.hpp
+++ b/include/mapnik/expression_string.hpp
@@ -25,10 +25,11 @@
 
 // mapnik
 #include <mapnik/config.hpp>
+#include <mapnik/function_call.hpp>
 #include <mapnik/expression_node_types.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <string>
@@ -56,7 +57,7 @@ std::string to_expression_string(T const* expr_node_ptr)
 }
 
 template <typename T>
-std::string to_expression_string(boost::shared_ptr<T> const& expr_node_ptr)
+std::string to_expression_string(std::shared_ptr<T> const& expr_node_ptr)
 {
     throw std::logic_error("to_expression_string() called with pointer argument");
     // compile error intended here; comment on the next line shows in clang output
diff --git a/include/mapnik/factory.hpp b/include/mapnik/factory.hpp
index 775329c..cc5487e 100644
--- a/include/mapnik/factory.hpp
+++ b/include/mapnik/factory.hpp
@@ -31,42 +31,23 @@
 #include <map>
 
 namespace mapnik {
-template <typename key_type,
-          typename product_type>
-class default_factory_error
-{
-public:
-    struct factory_exception : public std::exception
-    {
-        const char* what() const throw()
-        {
-            return "unknown object type";
-        }
-    };
-    static product_type* on_unknown_type(const key_type&)
-    {
-        return 0;
-    }
-};
 
 template
 <
 typename product_type,
 typename key_type,
-typename product_creator=product_type* (*)(),
-template <typename,typename> class factory_error_policy=default_factory_error
->
+typename ...Args >
 class factory : public singleton<factory <product_type,
                                           key_type,
-                                          product_creator,factory_error_policy> >,
-                factory_error_policy <key_type,product_type>
+                                          Args...> >
 {
 private:
-    typedef std::map<key_type,product_creator> product_map;
+    using product_creator = product_type* (*) (Args...);
+    using product_map = std::map<key_type,product_creator>;
     product_map map_;
 public:
 
-    bool register_product(const key_type& key,product_creator creator)
+    bool register_product(key_type const& key, product_creator creator)
     {
         return map_.insert(typename product_map::value_type(key,creator)).second;
     }
@@ -76,22 +57,12 @@ public:
         return map_.erase(key)==1;
     }
 
-    product_type* create_object(const key_type& key,std::string const& file)
-    {
-        typename product_map::const_iterator pos=map_.find(key);
-        if (pos!=map_.end())
-        {
-            return (pos->second)(file);
-        }
-        return 0;
-    }
-
-    product_type* create_object(const key_type& key, char const* data, std::size_t size)
+    product_type* create_object(key_type const& key, Args...args)
     {
         typename product_map::const_iterator pos=map_.find(key);
         if (pos!=map_.end())
         {
-            return (pos->second)(data, size);
+            return (pos->second)(args...);
         }
         return 0;
     }
diff --git a/include/mapnik/fastmath.hpp b/include/mapnik/fastmath.hpp
deleted file mode 100644
index c5b0867..0000000
--- a/include/mapnik/fastmath.hpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_FASTMATH_HPP
-#define MAPNIK_FASTMATH_HPP
-
-/* Timings:
- * fast_sin(not inlined) 8.95s
- * fast_sin(inlined) 6.64s
- * sin 28.7s
- * => 4.3x speedup
- * worst case accuracy abs(fast_sin(x)/sin(x) - 1) = 0.000018 (at 0.664, M_PI-0.664, M_PI+0.664; 2*M_PI-0.664)
- */
-static inline double fast_sin(double x)
-{
-    bool negative = false;
-    double result;
-    while (x > 2*M_PI) x -= 2*M_PI;
-    while (x < 0) x += 2*M_PI;
-    if (x > M_PI) {
-        x -= M_PI;
-        negative = true;
-    }
-
-    if (x < 0.664 || x > M_PI-0.664) {
-        //series expansion at x=0:  x-x^3/6+x^5/120-x^7/5040+...
-        if (x > M_PI-0.664) x = M_PI - x;
-        result = x*(1. + x*x*(-1/6. + x*x/120.));
-    } else {
-        //series expansion at x=pi/2
-        //1-x^2/2+x^4/24-x^6/720+x^8/40320+...
-        x -= M_PI/2;
-        result =  1. + x*x*(-1/2.+x*x*(1/24. + x*x*(-1/720.)));
-    }
-    return negative?-result:result;
-}
-
-static inline double fast_cos(double x)
-{
-    return fast_sin(x + M_PI/2);
-}
-
-static inline  double atan_helper(double x)
-{
-    //Series expansion at x=0:
-    // x-x^3/3+x^5/5-x^7/7+...
-    if (x < 0.30) {
-        return x * (1 + x*x*(-1/3. + x*x*(1/5.) + x*x*(-1/7. + x*x*(1/9.))));
-    }
-    else if (x < 0.71) {
-        //Series expansion at x=0.5
-        //atan(1/2)+(4 x)/5-(8 x^2)/25-(16 x^3)/375+(96 x^4)/625 +...
-        x -= 0.5;
-        return 0.463647609000806116 /*atan(0.5) */ + x *(4./5. + x *(-8./25. + (-16./375.*x)));
-    } else {
-        //series expansion at x=1:
-        //pi/4+x/2-x^2/4+x^3/12-x^5/40+...
-        x -= 1;
-        return (M_PI/4.) + x * (1/2. + x*(-1/4. +x*(1/12. + x * (-1/40.))));
-    }
-}
-
-/*
- * fast_atan(not inlined) 6.74s
- * fast_atan(everything inlined) 6.78s
- * fast_atan(only helper inlined) 6.75
- * atan 27.5s
- * => 4x speedup
- * worst case accuracy abs(fast_atan(x)/atan(x) - 1) = 0.000271 (at 1.411)
- */
-double inline fast_atan(double x)
-{
-    double negative = false;
-    double result;
-    if (x < 0) {
-        x = -x;
-        negative = true;
-    }
-    if (x <= 1) result = atan_helper(x); else result = M_PI/2 - atan_helper(1/x);
-    return negative?-result:result;
-}
-
-static inline double fast_atan2(double y, double x)
-{
-    double result = M_PI/2;
-    if (x == 0 && y == 0) return 0;
-    if (x != 0) result = fast_atan(y/x);
-    if (x < 0 && y >= 0) return result + M_PI;
-    if (x <= 0 && y < 0) return -M_PI + result;
-    return result;
-}
-
-#endif // MAPNIK_FASTMATH_HPP
diff --git a/include/mapnik/feature.hpp b/include/mapnik/feature.hpp
index ce9a3dc..9a600b0 100644
--- a/include/mapnik/feature.hpp
+++ b/include/mapnik/feature.hpp
@@ -29,14 +29,12 @@
 #include <mapnik/value.hpp>
 #include <mapnik/box2d.hpp>
 #include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
 #include <mapnik/feature_kv_iterator.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/shared_ptr.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
-
 // stl
+#include <memory>
 #include <vector>
 #include <map>
 #include <ostream>                      // for basic_ostream, operator<<, etc
@@ -48,7 +46,7 @@ namespace mapnik {
 class raster;
 class feature_impl;
 
-typedef boost::shared_ptr<raster> raster_ptr;
+using raster_ptr = std::shared_ptr<raster>;
 
 template <typename T>
 class context : private mapnik::noncopyable
@@ -56,50 +54,50 @@ class context : private mapnik::noncopyable
 {
     friend class feature_impl;
 public:
-    typedef T map_type;
-    typedef typename map_type::value_type value_type;
-    typedef typename map_type::key_type key_type;
-    typedef typename map_type::size_type size_type;
-    typedef typename map_type::difference_type difference_type;
-    typedef typename map_type::iterator iterator;
-    typedef typename map_type::const_iterator const_iterator;
+    using map_type = T;
+    using value_type = typename map_type::value_type;
+    using key_type = typename map_type::key_type;
+    using size_type = typename map_type::size_type;
+    using difference_type = typename map_type::difference_type;
+    using iterator = typename map_type::iterator;
+    using const_iterator = typename map_type::const_iterator;
 
     context()
         : mapping_() {}
 
-    size_type push(key_type const& name)
+    inline size_type push(key_type const& name)
     {
         size_type index = mapping_.size();
-        mapping_.insert(std::make_pair(name, index));
+        mapping_.emplace(name, index);
         return index;
     }
 
-    void add(key_type const& name, size_type index)
+    inline void add(key_type const& name, size_type index)
     {
-        mapping_.insert(std::make_pair(name, index));
+        mapping_.emplace(name, index);
     }
 
-    size_type size() const { return mapping_.size(); }
-    const_iterator begin() const { return mapping_.begin();}
-    const_iterator end() const { return mapping_.end();}
+    inline size_type size() const { return mapping_.size(); }
+    inline const_iterator begin() const { return mapping_.begin();}
+    inline const_iterator end() const { return mapping_.end();}
 
 private:
     map_type mapping_;
 };
 
-typedef context<std::map<std::string,std::size_t> > context_type;
-typedef boost::shared_ptr<context_type> context_ptr;
+using context_type = context<std::map<std::string,std::size_t> >;
+using context_ptr = std::shared_ptr<context_type>;
 
-static const value default_value;
+static const value default_feature_value;
 
 class MAPNIK_DECL feature_impl : private mapnik::noncopyable
 {
     friend class feature_kv_iterator;
 public:
 
-    typedef mapnik::value value_type;
-    typedef std::vector<value_type> cont_type;
-    typedef feature_kv_iterator iterator;
+    using value_type = mapnik::value;
+    using cont_type = std::vector<value_type>;
+    using iterator = feature_kv_iterator;
 
     feature_impl(context_ptr const& ctx, mapnik::value_integer id)
         : id_(id),
@@ -114,24 +112,24 @@ public:
     inline void set_id(mapnik::value_integer id) { id_ = id;}
 
     template <typename T>
-    void put(context_type::key_type const& key, T const& val)
+    inline void put(context_type::key_type const& key, T const& val)
     {
-        put(key,value(val));
+        put(key, std::move(value(val)));
     }
 
     template <typename T>
-    void put_new(context_type::key_type const& key, T const& val)
+    inline void put_new(context_type::key_type const& key, T const& val)
     {
-        put_new(key,value(val));
+        put_new(key,std::move(value(val)));
     }
 
-    void put(context_type::key_type const& key, value const& val)
+    inline void put(context_type::key_type const& key, value && val)
     {
         context_type::map_type::const_iterator itr = ctx_->mapping_.find(key);
         if (itr != ctx_->mapping_.end()
             && itr->second < data_.size())
         {
-            data_[itr->second] = val;
+            data_[itr->second] = std::move(val);
         }
         else
         {
@@ -139,104 +137,105 @@ public:
         }
     }
 
-    void put_new(context_type::key_type const& key, value const& val)
+    inline void put_new(context_type::key_type const& key, value && val)
     {
         context_type::map_type::const_iterator itr = ctx_->mapping_.find(key);
         if (itr != ctx_->mapping_.end()
             && itr->second < data_.size())
         {
-            data_[itr->second] = val;
+            data_[itr->second] = std::move(val);
         }
         else
         {
             cont_type::size_type index = ctx_->push(key);
             if (index == data_.size())
-                data_.push_back(val);
+                data_.push_back(std::move(val));
         }
     }
 
-    bool has_key(context_type::key_type const& key) const
+    inline bool has_key(context_type::key_type const& key) const
     {
         return (ctx_->mapping_.find(key) != ctx_->mapping_.end());
     }
 
-    value_type const& get(context_type::key_type const& key) const
+    inline value_type const& get(context_type::key_type const& key) const
     {
         context_type::map_type::const_iterator itr = ctx_->mapping_.find(key);
         if (itr != ctx_->mapping_.end())
             return get(itr->second);
         else
-            return default_value;
+            return default_feature_value;
     }
 
-    value_type const& get(std::size_t index) const
+    inline value_type const& get(std::size_t index) const
     {
         if (index < data_.size())
             return data_[index];
-        return default_value;
+        return default_feature_value;
     }
 
-    std::size_t size() const
+    inline std::size_t size() const
     {
         return data_.size();
     }
 
-    cont_type const& get_data() const
+    inline cont_type const& get_data() const
     {
         return data_;
     }
 
-    void set_data(cont_type const& data)
+    inline void set_data(cont_type const& data)
     {
         data_ = data;
     }
 
-    context_ptr context()
+    inline context_ptr context() const
     {
         return ctx_;
     }
 
-    boost::ptr_vector<geometry_type> const& paths() const
+    inline geometry_container const& paths() const
     {
         return geom_cont_;
     }
 
-    boost::ptr_vector<geometry_type> & paths()
+    inline geometry_container & paths()
     {
         return geom_cont_;
     }
 
-    void add_geometry(geometry_type * geom)
+    inline void add_geometry(geometry_type * geom)
     {
         geom_cont_.push_back(geom);
     }
 
-    unsigned num_geometries() const
+    inline std::size_t num_geometries() const
     {
         return geom_cont_.size();
     }
 
-    geometry_type const& get_geometry(unsigned index) const
+    inline geometry_type const& get_geometry(std::size_t index) const
     {
         return geom_cont_[index];
     }
 
-    geometry_type& get_geometry(unsigned index)
+    inline geometry_type& get_geometry(std::size_t index)
     {
         return geom_cont_[index];
     }
 
-    box2d<double> envelope() const
+    inline box2d<double> envelope() const
     {
         // TODO - cache this
         box2d<double> result;
-        for (unsigned i=0;i<num_geometries();++i)
+        bool first = true;
+        for (auto const& geom : geom_cont_)
         {
-            geometry_type const& geom = get_geometry(i);
-            if (i==0)
+            if (first)
             {
                 box2d<double> box = geom.envelope();
                 result.init(box.minx(),box.miny(),box.maxx(),box.maxy());
+                first = false;
             }
             else
             {
@@ -246,22 +245,22 @@ public:
         return result;
     }
 
-    raster_ptr const& get_raster() const
+    inline raster_ptr const& get_raster() const
     {
         return raster_;
     }
 
-    void set_raster(raster_ptr const& raster)
+    inline void set_raster(raster_ptr const& raster)
     {
         raster_ = raster;
     }
 
-    feature_kv_iterator begin() const
+    inline feature_kv_iterator begin() const
     {
         return feature_kv_iterator(*this,true);
     }
 
-    feature_kv_iterator end() const
+    inline feature_kv_iterator end() const
     {
         return feature_kv_iterator(*this);
     }
@@ -270,20 +269,18 @@ public:
     {
         std::stringstream ss;
         ss << "Feature ( id=" << id_ << std::endl;
-        context_type::map_type::const_iterator itr = ctx_->mapping_.begin();
-        context_type::map_type::const_iterator end = ctx_->mapping_.end();
-        for ( ;itr!=end; ++itr)
+        for (auto const& kv : ctx_->mapping_)
         {
-            std::size_t index = itr->second;
+            std::size_t index = kv.second;
             if (index < data_.size())
             {
-                if (data_[itr->second] == mapnik::value_null())
+                if (data_[kv.second] == mapnik::value_null())
                 {
-                    ss << "  " << itr->first  << ":null" << std::endl;
+                    ss << "  " << kv.first  << ":null" << std::endl;
                 }
                 else
                 {
-                    ss << "  " << itr->first  << ":" <<  data_[itr->second] << std::endl;
+                    ss << "  " << kv.first  << ":" <<  data_[kv.second] << std::endl;
                 }
             }
         }
@@ -295,7 +292,7 @@ private:
     mapnik::value_integer id_;
     context_ptr ctx_;
     cont_type data_;
-    boost::ptr_vector<geometry_type> geom_cont_;
+    geometry_container geom_cont_;
     raster_ptr raster_;
 };
 
@@ -307,9 +304,9 @@ inline std::ostream& operator<< (std::ostream & out,feature_impl const& f)
 }
 
 // TODO - remove at Mapnik 3.x
-typedef feature_impl Feature;
+using Feature = feature_impl;
 
-typedef boost::shared_ptr<feature_impl> feature_ptr;
+using feature_ptr = std::shared_ptr<feature_impl>;
 
 }
 
diff --git a/include/mapnik/feature_factory.hpp b/include/mapnik/feature_factory.hpp
index 7896ef0..c2bf8d3 100644
--- a/include/mapnik/feature_factory.hpp
+++ b/include/mapnik/feature_factory.hpp
@@ -28,18 +28,17 @@
 #include <mapnik/value_types.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 //#include <boost/pool/pool_alloc.hpp>
 
 namespace mapnik
 {
 struct feature_factory
 {
-    static boost::shared_ptr<feature_impl> create (context_ptr const& ctx, mapnik::value_integer fid)
+    static std::shared_ptr<feature_impl> create (context_ptr const& ctx, mapnik::value_integer fid)
     {
         //return boost::allocate_shared<feature_impl>(boost::pool_allocator<feature_impl>(),fid);
         //return boost::allocate_shared<feature_impl>(boost::fast_pool_allocator<feature_impl>(),fid);
-        return boost::make_shared<feature_impl>(ctx,fid);
+        return std::make_shared<feature_impl>(ctx,fid);
     }
 };
 }
diff --git a/include/mapnik/feature_kv_iterator.hpp b/include/mapnik/feature_kv_iterator.hpp
index baafb5f..060b6fc 100644
--- a/include/mapnik/feature_kv_iterator.hpp
+++ b/include/mapnik/feature_kv_iterator.hpp
@@ -26,17 +26,17 @@
 // mapnik
 #include <mapnik/config.hpp>
 #include <mapnik/value.hpp>
-
+#include <mapnik/util/variant.hpp>
 // boost
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/tuple/tuple.hpp>
+
 #include <boost/iterator/iterator_traits.hpp>
 #include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
 #include <boost/iterator/filter_iterator.hpp>
 
 // stl
 #include <map>
-
+#include <tuple>
 
 namespace mapnik {
 
@@ -44,11 +44,11 @@ class feature_impl;
 
 class MAPNIK_DECL feature_kv_iterator :
         public boost::iterator_facade<feature_kv_iterator,
-                                      boost::tuple<std::string , value> const,
+                                      std::tuple<std::string , value> const,
                                       boost::forward_traversal_tag>
 {
 public:
-    typedef boost::tuple<std::string,value> value_type;
+    using value_type = std::tuple<std::string,value>;
 
     feature_kv_iterator (feature_impl const& f, bool begin = false);
 private:
@@ -70,13 +70,12 @@ struct value_not_null
 {
     bool operator() (feature_kv_iterator::value_type const& kv) const
     {
-        return !boost::apply_visitor(is_null, boost::get<1>(kv).base());
+        return !util::apply_visitor(mapnik::detail::is_null_visitor(), std::get<1>(kv));
     }
 };
 
-typedef boost::filter_iterator<value_not_null, feature_kv_iterator> feature_kv_iterator2;
+using feature_kv_iterator2 = boost::filter_iterator<value_not_null, feature_kv_iterator>;
 
 }
 
 #endif // MAPNIK_FEATURE_KV_ITERATOR_HPP
-
diff --git a/include/mapnik/feature_layer_desc.hpp b/include/mapnik/feature_layer_desc.hpp
index 7044dfe..c9d613c 100644
--- a/include/mapnik/feature_layer_desc.hpp
+++ b/include/mapnik/feature_layer_desc.hpp
@@ -27,9 +27,8 @@
 #include <mapnik/attribute_descriptor.hpp>
 
 // stl
-#include <string>
+#include <iosfwd>
 #include <vector>
-#include <iostream>
 
 namespace mapnik
 {
@@ -88,21 +87,6 @@ private:
     std::vector<attribute_descriptor> desc_ar_;
 };
 
-template <typename charT,typename traits>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             layer_descriptor const& ld)
-{
-    out << "name: " << ld.get_name() << "\n";
-    out << "encoding: " << ld.get_encoding() << "\n";
-    std::vector<attribute_descriptor> const& desc_ar = ld.get_descriptors();
-    std::vector<attribute_descriptor>::const_iterator pos = desc_ar.begin();
-    while (pos != desc_ar.end())
-    {
-        out << *pos++ << "\n";
-    }
-    return out;
-}
 }
 
 #endif // MAPNIK_FEATURE_LAYER_DESC_HPP
diff --git a/include/mapnik/feature_style_processor.hpp b/include/mapnik/feature_style_processor.hpp
index e880c34..29b4bed 100644
--- a/include/mapnik/feature_style_processor.hpp
+++ b/include/mapnik/feature_style_processor.hpp
@@ -24,13 +24,14 @@
 #define MAPNIK_FEATURE_STYLE_PROCESSOR_HPP
 
 // mapnik
-#include <mapnik/datasource.hpp> // for featureset_ptr
+#include <mapnik/box2d.hpp>
+#include <mapnik/featureset.hpp>
 #include <mapnik/config.hpp>
+#include <mapnik/feature_style_processor_context.hpp>
 
 // stl
 #include <set>
 #include <string>
-#include <vector>
 
 namespace mapnik
 {
@@ -41,6 +42,7 @@ class projection;
 class proj_transform;
 class feature_type_style;
 class rule_cache;
+struct layer_rendering_material;
 
 enum eAttributeCollectionPolicy
 {
@@ -51,7 +53,6 @@ enum eAttributeCollectionPolicy
 template <typename Processor>
 class MAPNIK_DECL feature_style_processor
 {
-    struct symbol_dispatch;
 public:
     explicit feature_style_processor(Map const& m,
                                      double scale_factor = 1.0);
@@ -67,6 +68,7 @@ public:
     void apply(mapnik::layer const& lyr,
                std::set<std::string>& names,
                double scale_denom_override=0.0);
+
     /*!
      * \brief render a layer given a projection and scale.
      */
@@ -85,16 +87,32 @@ private:
     /*!
      * \brief renders a featureset with the given styles.
      */
-    void render_style(layer const& lay,
-                      Processor & p,
+    void render_style(Processor & p,
                       feature_type_style const* style,
                       rule_cache const& rules,
-                      std::string const& style_name,
                       featureset_ptr features,
                       proj_transform const& prj_trans);
 
+    /*!
+     * \brief prepare features for rendering asynchronously.
+     */
+    void prepare_layer(layer_rendering_material & mat,
+                       feature_style_context_map & ctx_map,
+                       Processor & p,
+                       double scale,
+                       double scale_denom,
+                       unsigned width,
+                       unsigned height,
+                       box2d<double> const& extent,
+                       int buffer_size,
+                       std::set<std::string>& names);
+
+    /*!
+     * \brief render features list queued when they are available.
+     */
+    void render_material(layer_rendering_material & mat, Processor & p );
+
     Map const& m_;
-    double scale_factor_;
 };
 }
 
diff --git a/include/mapnik/feature_style_processor_context.hpp b/include/mapnik/feature_style_processor_context.hpp
new file mode 100644
index 0000000..ff2970b
--- /dev/null
+++ b/include/mapnik/feature_style_processor_context.hpp
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef FEATURE_STYLE_PROCESSOR_CONTEXT_HPP
+#define FEATURE_STYLE_PROCESSOR_CONTEXT_HPP
+
+// stl
+#include <map>
+#include <string>
+#include <memory>
+
+namespace mapnik {
+
+
+class IProcessorContext {
+public:
+    virtual ~IProcessorContext() {}
+};
+
+using processor_context_ptr = std::shared_ptr<IProcessorContext>;
+using feature_style_context_map = std::map<std::string, processor_context_ptr >;
+
+}
+
+#endif // FEATURE_STYLE_PROCESSOR_CONTEXT_HPP
diff --git a/include/mapnik/feature_style_processor_impl.hpp b/include/mapnik/feature_style_processor_impl.hpp
index b03b873..ee37572 100644
--- a/include/mapnik/feature_style_processor_impl.hpp
+++ b/include/mapnik/feature_style_processor_impl.hpp
@@ -31,9 +31,7 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/feature_style_processor.hpp>
 #include <mapnik/query.hpp>
-#include <mapnik/feature.hpp>
 #include <mapnik/datasource.hpp>
-#include <mapnik/memory_datasource.hpp>
 #include <mapnik/feature_type_style.hpp>
 #include <mapnik/box2d.hpp>
 #include <mapnik/layer.hpp>
@@ -41,109 +39,47 @@
 #include <mapnik/rule_cache.hpp>
 #include <mapnik/attribute_collector.hpp>
 #include <mapnik/expression_evaluator.hpp>
-#include <mapnik/utils.hpp>
 #include <mapnik/scale_denominator.hpp>
 #include <mapnik/projection.hpp>
 #include <mapnik/proj_transform.hpp>
-
-// boost
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/foreach.hpp>
-#include <boost/concept_check.hpp>
+#include <mapnik/util/featureset_buffer.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/symbolizer_dispatch.hpp>
 
 // stl
 #include <vector>
 #include <stdexcept>
 
-#if defined(RENDERING_STATS)
-#include <mapnik/timer.hpp>
-#include <iomanip>
-#include <sstream>
-#endif
-
 namespace mapnik
 {
 
-template <typename T0,typename T1> struct has_process;
-
-template <bool>
-struct process_impl
-{
-    template <typename T0, typename T1, typename T2, typename T3>
-    static void process(T0 & ren, T1 const& sym, T2 & f, T3 const& tr)
-    {
-        ren.process(sym,f,tr);
-    }
-};
-
-template <> // No-op specialization
-struct process_impl<false>
-{
-    template <typename T0, typename T1, typename T2, typename T3>
-    static void process(T0 & ren, T1 const& sym, T2 & f, T3 const& tr)
-    {
-        boost::ignore_unused_variable_warning(ren);
-        boost::ignore_unused_variable_warning(f);
-        boost::ignore_unused_variable_warning(tr);
-#ifdef MAPNIK_DEBUG
-        std::clog << "NO-OP ...\n";
-#endif
-    }
-};
-
-/** Calls the renderer's process function,
- * \param output     Renderer
- * \param f          Feature to process
- * \param prj_trans  Projection
- * \param sym        Symbolizer object
- */
-template <typename Processor>
-struct feature_style_processor<Processor>::symbol_dispatch : public boost::static_visitor<>
+// Store material for layer rendering in a two step process
+struct layer_rendering_material
 {
-    symbol_dispatch (Processor & output,
-                     mapnik::feature_impl & f,
-                     proj_transform const& prj_trans)
-        : output_(output),
-          f_(f),
-          prj_trans_(prj_trans)  {}
-
-    template <typename T>
-    void operator () (T const& sym) const
-    {
-        process_impl<has_process<Processor,T>::value>::process(output_,sym,f_,prj_trans_);
-    }
-
-    Processor & output_;
-    mapnik::feature_impl & f_;
-    proj_transform const& prj_trans_;
+    layer const& lay_;
+    projection const& proj0_;
+    projection proj1_;
+    box2d<double> layer_ext2_;
+    std::vector<feature_type_style const*> active_styles_;
+    std::vector<featureset_ptr> featureset_ptr_list_;
+    std::vector<rule_cache> rule_caches_;
+
+    layer_rendering_material(layer const& lay, projection const& dest)
+        :
+        lay_(lay),
+        proj0_(dest),
+        proj1_(lay.srs(),true) {}
 };
 
-typedef char (&no_tag)[1];
-typedef char (&yes_tag)[2];
-
-template <typename T0, typename T1, void (T0::*)(T1 const&, mapnik::feature_impl &, proj_transform const&) >
-struct process_memfun_helper {};
+using layer_rendering_material_ptr = std::shared_ptr<layer_rendering_material>;
 
-template <typename T0, typename T1> no_tag  has_process_helper(...);
-template <typename T0, typename T1> yes_tag has_process_helper(process_memfun_helper<T0, T1, &T0::process>* p);
-
-template<typename T0,typename T1>
-struct has_process
-{
-    typedef typename T0::processor_impl_type processor_impl_type;
-    BOOST_STATIC_CONSTANT(bool
-                          , value = sizeof(has_process_helper<processor_impl_type,T1>(0)) == sizeof(yes_tag)
-        );
-};
 
 template <typename Processor>
 feature_style_processor<Processor>::feature_style_processor(Map const& m, double scale_factor)
-    : m_(m),
-      scale_factor_(scale_factor)
+    : m_(m)
 {
     // https://github.com/mapnik/mapnik/issues/1100
-    if (scale_factor_ <= 0)
+    if (scale_factor <= 0)
     {
         throw std::runtime_error("scale_factor must be greater than 0.0");
     }
@@ -152,45 +88,61 @@ feature_style_processor<Processor>::feature_style_processor(Map const& m, double
 template <typename Processor>
 void feature_style_processor<Processor>::apply(double scale_denom)
 {
-#if defined(RENDERING_STATS)
-    std::clog << "\n//-- starting rendering timer...\n";
-    mapnik::progress_timer t(std::clog, "total map rendering");
-#endif
-
     Processor & p = static_cast<Processor&>(*this);
     p.start_map_processing(m_);
 
     projection proj(m_.srs(),true);
     if (scale_denom <= 0.0)
         scale_denom = mapnik::scale_denominator(m_.scale(),proj.is_geographic());
-    scale_denom *= scale_factor_;
+    scale_denom *= p.scale_factor(); // FIXME - we might want to comment this out
+
+    // Asynchronous query supports:
+    // This is a two steps process,
+    // first we setup all queries at layer level
+    // in a second time, we fetch the results and
+    // do the actual rendering
 
-    BOOST_FOREACH ( layer const& lyr, m_.layers() )
+    std::vector<layer_rendering_material_ptr> mat_list;
+
+    // Define processing context map used by datasources
+    // implementing asynchronous queries
+    feature_style_context_map ctx_map;
+
+    for ( layer const& lyr : m_.layers() )
     {
         if (lyr.visible(scale_denom))
         {
             std::set<std::string> names;
-            apply_to_layer(lyr,
-                           p,
-                           proj,
-                           m_.scale(),
-                           scale_denom,
-                           m_.width(),
-                           m_.height(),
-                           m_.get_current_extent(),
-                           m_.buffer_size(),
-                           names);
+            layer_rendering_material_ptr mat = std::make_shared<layer_rendering_material>(lyr, proj);
+
+            prepare_layer(*mat,
+                          ctx_map,
+                          p,
+                          m_.scale(),
+                          scale_denom,
+                          m_.width(),
+                          m_.height(),
+                          m_.get_current_extent(),
+                          m_.buffer_size(),
+                          names);
+
+            // Store active material
+            if (!mat->active_styles_.empty())
+            {
+                mat_list.push_back(mat);
+            }
+        }
+    }
 
+    for ( layer_rendering_material_ptr mat : mat_list )
+    {
+        if (!mat->active_styles_.empty())
+        {
+            render_material(*mat,p);
         }
     }
 
     p.end_map_processing(m_);
-
-#if defined(RENDERING_STATS)
-    t.stop();
-    std::clog << "//-- rendering timer stopped...\n\n";
-#endif
-
 }
 
 template <typename Processor>
@@ -203,7 +155,7 @@ void feature_style_processor<Processor>::apply(mapnik::layer const& lyr,
     projection proj(m_.srs(),true);
     if (scale_denom <= 0.0)
         scale_denom = mapnik::scale_denominator(m_.scale(),proj.is_geographic());
-    scale_denom *= scale_factor_;
+    scale_denom *= p.scale_factor();
 
     if (lyr.visible(scale_denom))
     {
@@ -221,8 +173,12 @@ void feature_style_processor<Processor>::apply(mapnik::layer const& lyr,
     p.end_map_processing(m_);
 }
 
+/*!
+ * \brief render a layer given a projection and scale.
+ */
 template <typename Processor>
-void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Processor & p,
+void feature_style_processor<Processor>::apply_to_layer(layer const& lay,
+                                                        Processor & p,
                                                         projection const& proj0,
                                                         double scale,
                                                         double scale_denom,
@@ -232,40 +188,60 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
                                                         int buffer_size,
                                                         std::set<std::string>& names)
 {
+    feature_style_context_map ctx_map;
+    layer_rendering_material  mat(lay, proj0);
+
+    prepare_layer(mat,
+                  ctx_map,
+                  p,
+                  scale,
+                  scale_denom,
+                  width,
+                  height,
+                  extent,
+                  buffer_size,
+                  names);
+
+    if (!mat.active_styles_.empty())
+    {
+        render_material(mat,p);
+    }
+}
+
+template <typename Processor>
+void feature_style_processor<Processor>::prepare_layer(layer_rendering_material & mat,
+                                                       feature_style_context_map & ctx_map,
+                                                       Processor & p,
+                                                       double scale,
+                                                       double scale_denom,
+                                                       unsigned width,
+                                                       unsigned height,
+                                                       box2d<double> const& extent,
+                                                       int buffer_size,
+                                                       std::set<std::string>& names)
+{
+    layer const& lay = mat.lay_;
+
     std::vector<std::string> const& style_names = lay.styles();
 
     unsigned int num_styles = style_names.size();
-    if (! num_styles)
+    if (num_styles == 0)
     {
-        MAPNIK_LOG_DEBUG(feature_style_processor) << "feature_style_processor: No style for layer=" << lay.name();
-
+        MAPNIK_LOG_DEBUG(feature_style_processor)
+            << "feature_style_processor: No style for layer=" << lay.name();
         return;
     }
 
     mapnik::datasource_ptr ds = lay.datasource();
-    if (! ds)
+    if (!ds)
     {
-        MAPNIK_LOG_DEBUG(feature_style_processor) << "feature_style_processor: No datasource for layer=" << lay.name();
-
+        MAPNIK_LOG_DEBUG(feature_style_processor)
+            << "feature_style_processor: No datasource for layer=" << lay.name();
         return;
     }
 
-#if defined(RENDERING_STATS)
-    progress_timer layer_timer(std::clog, "rendering total for layer: '" + lay.name() + "'");
-#endif
-
-    projection proj1(lay.srs(),true);
-    proj_transform prj_trans(proj0,proj1);
-
-#if defined(RENDERING_STATS)
-    if (! prj_trans.equal())
-    {
-        std::clog << "notice: reprojecting layer: '" << lay.name() << "' from/to:\n\t'"
-                  << lay.srs() << "'\n\t'"
-                  << m_.srs() << "'\n";
-    }
-#endif
-
+    processor_context_ptr current_ctx = ds->get_context(ctx_map);
+    proj_transform prj_trans(mat.proj0_,mat.proj1_);
 
     box2d<double> query_ext = extent; // unbuffered
     box2d<double> buffered_query_ext(query_ext);  // buffered
@@ -285,7 +261,8 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
 
     // clip buffered extent by maximum extent, if supplied
     boost::optional<box2d<double> > const& maximum_extent = m_.maximum_extent();
-    if (maximum_extent) {
+    if (maximum_extent)
+    {
         buffered_query_ext.clip(*maximum_extent);
     }
 
@@ -312,9 +289,9 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
         if (! prj_trans.forward(layer_ext, PROJ_ENVELOPE_POINTS))
         {
             MAPNIK_LOG_ERROR(feature_style_processor)
-                    << "feature_style_processor: Layer=" << lay.name()
-                    << " extent=" << layer_ext << " in map projection "
-                    << " did not reproject properly back to layer projection";
+                << "feature_style_processor: Layer=" << lay.name()
+                << " extent=" << layer_ext << " in map projection "
+                << " did not reproject properly back to layer projection";
         }
     }
     else
@@ -323,30 +300,29 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
         early_return = true;
     }
 
+    std::vector<feature_type_style const*> & active_styles = mat.active_styles_;
+
     if (early_return)
     {
         // check for styles needing compositing operations applied
         // https://github.com/mapnik/mapnik/issues/1477
-        BOOST_FOREACH(std::string const& style_name, style_names)
+        for (std::string const& style_name : style_names)
         {
             boost::optional<feature_type_style const&> style=m_.find_style(style_name);
             if (!style)
             {
                 continue;
             }
+
             if (style->comp_op() || style->image_filters().size() > 0)
             {
                 if (style->active(scale_denom))
                 {
-                    // trigger any needed compositing ops
-                    p.start_style_processing(*style);
-                    p.end_style_processing(*style);
+                    // we'll have to handle compositing ops
+                    active_styles.push_back(&(*style));
                 }
             }
         }
-#if defined(RENDERING_STATS)
-        layer_timer.discard();
-#endif
         return;
     }
 
@@ -357,7 +333,9 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
         query_ext.clip(*maximum_extent);
     }
 
-    box2d<double> layer_ext2 = lay.envelope();
+    box2d<double> & layer_ext2 = mat.layer_ext2_;
+
+    layer_ext2 = lay.envelope();
     if (fw_success)
     {
         if (prj_trans.forward(query_ext, PROJ_ENVELOPE_POINTS))
@@ -374,190 +352,217 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
         }
     }
 
-    p.start_layer_processing(lay, layer_ext2);
-
-    double qw = query_ext.width()>0 ? query_ext.width() : 1;
-    double qh = query_ext.height()>0 ? query_ext.height() : 1;
-    query::resolution_type res(width/qw,
-                               height/qh);
-
-    query q(layer_ext,res,scale_denom,extent);
-    std::vector<feature_type_style const*> active_styles;
+    std::vector<rule_cache> & rule_caches = mat.rule_caches_;
     attribute_collector collector(names);
-    double filt_factor = 1.0;
-    directive_collector d_collector(filt_factor);
-    boost::ptr_vector<rule_cache> rule_caches;
 
     // iterate through all named styles collecting active styles and attribute names
-    BOOST_FOREACH(std::string const& style_name, style_names)
+    for (std::string const& style_name : style_names)
     {
         boost::optional<feature_type_style const&> style=m_.find_style(style_name);
         if (!style)
         {
             MAPNIK_LOG_DEBUG(feature_style_processor)
-                    << "feature_style_processor: Style=" << style_name
-                    << " required for layer=" << lay.name() << " does not exist.";
+                << "feature_style_processor: Style=" << style_name
+                << " required for layer=" << lay.name() << " does not exist.";
 
             continue;
         }
 
         std::vector<rule> const& rules = style->get_rules();
         bool active_rules = false;
-        std::auto_ptr<rule_cache> rc(new rule_cache);
-        BOOST_FOREACH(rule const& r, rules)
+        rule_cache rc;
+        for(rule const& r : rules)
         {
             if (r.active(scale_denom))
             {
-                rc->add_rule(r);
+                rc.add_rule(r);
                 active_rules = true;
-                if (ds->type() == datasource::Vector)
-                {
-                    collector(r);
-                }
-                // TODO - in the future rasters should be able to be filtered.
+                collector(r);
             }
         }
         if (active_rules)
         {
-            rule_caches.push_back(rc);
+            rule_caches.push_back(std::move(rc));
             active_styles.push_back(&(*style));
         }
     }
 
     // Don't even try to do more work if there are no active styles.
-    if (active_styles.size() > 0)
+    if (active_styles.empty())
     {
-        if (p.attribute_collection_policy() == COLLECT_ALL)
+        return;
+    }
+
+    double qw = query_ext.width()>0 ? query_ext.width() : 1;
+    double qh = query_ext.height()>0 ? query_ext.height() : 1;
+    query::resolution_type res(width/qw,
+                               height/qh);
+
+    query q(layer_ext,res,scale_denom,extent);
+    q.set_variables(p.variables());
+
+    if (p.attribute_collection_policy() == COLLECT_ALL)
+    {
+        layer_descriptor lay_desc = ds->get_descriptor();
+        for (attribute_descriptor const& desc : lay_desc.get_descriptors())
         {
-            layer_descriptor lay_desc = ds->get_descriptor();
-            BOOST_FOREACH(attribute_descriptor const& desc, lay_desc.get_descriptors())
-            {
-                q.add_property_name(desc.get_name());
-            }
+            q.add_property_name(desc.get_name());
         }
-        else
+    }
+    else
+    {
+        for (std::string const& name : names)
         {
-            BOOST_FOREACH(std::string const& name, names)
-            {
-                q.add_property_name(name);
-            }
+            q.add_property_name(name);
         }
+    }
+    q.set_filter_factor(collector.get_filter_factor());
+
+    // Also query the group by attribute
+    std::string const& group_by = lay.group_by();
+    if (!group_by.empty())
+    {
+        q.add_property_name(group_by);
+    }
+
+    bool cache_features = lay.cache_features() && active_styles.size() > 1;
 
-        // Update filter_factor for all enabled raster layers.
-        BOOST_FOREACH (feature_type_style const* style, active_styles)
+    std::vector<featureset_ptr> & featureset_ptr_list = mat.featureset_ptr_list_;
+    if (!group_by.empty() || cache_features)
+    {
+        featureset_ptr_list.push_back(ds->features_with_context(q,current_ctx));
+    }
+    else
+    {
+        for(std::size_t i = 0; i < active_styles.size(); ++i)
         {
-            BOOST_FOREACH(rule const& r, style->get_rules())
-            {
-                if (r.active(scale_denom) &&
-                    ds->type() == datasource::Raster &&
-                    ds->params().get<double>("filter_factor",0.0) == 0.0)
-                {
-                    BOOST_FOREACH (rule::symbolizers::value_type sym,  r.get_symbolizers())
-                    {
-                        // if multiple raster symbolizers, last will be respected
-                        // should we warn or throw?
-                        boost::apply_visitor(d_collector,sym);
-                    }
-                    q.set_filter_factor(filt_factor);
-                }
-            }
+            featureset_ptr_list.push_back(ds->features_with_context(q,current_ctx));
         }
+    }
+}
+
 
-        // Also query the group by attribute
-        std::string group_by = lay.group_by();
-        if (group_by != "")
+template <typename Processor>
+void feature_style_processor<Processor>::render_material(layer_rendering_material & mat,
+                                                         Processor & p )
+{
+    std::vector<feature_type_style const*> & active_styles = mat.active_styles_;
+    std::vector<featureset_ptr> & featureset_ptr_list = mat.featureset_ptr_list_;
+    if (featureset_ptr_list.empty())
+    {
+        // The datasource wasn't queried because of early return
+        // but we have to apply compositing operations on styles
+        for (feature_type_style const* style : active_styles)
         {
-            q.add_property_name(group_by);
+            p.start_style_processing(*style);
+            p.end_style_processing(*style);
         }
+        return;
+    }
+
+    p.start_layer_processing(mat.lay_, mat.layer_ext2_);
+
+    layer const& lay = mat.lay_;
 
-        bool cache_features = lay.cache_features() && active_styles.size() > 1;
+    std::vector<rule_cache> & rule_caches = mat.rule_caches_;
 
-        // Render incrementally when the column that we group by
-        // changes value.
-        if (group_by != "")
+    proj_transform prj_trans(mat.proj0_,mat.proj1_);
+
+    bool cache_features = lay.cache_features() && active_styles.size() > 1;
+
+    datasource_ptr ds = lay.datasource();
+    std::string group_by = lay.group_by();
+
+    // Render incrementally when the column that we group by changes value.
+    if (!group_by.empty())
+    {
+        featureset_ptr features = *featureset_ptr_list.begin();
+        if (features)
         {
-            featureset_ptr features = ds->features(q);
-            if (features) {
-                // Cache all features into the memory_datasource before rendering.
-                memory_datasource cache(ds->type(),false);
-                feature_ptr feature, prev;
+            // Cache all features into the memory_datasource before rendering.
+            std::shared_ptr<featureset_buffer> cache = std::make_shared<featureset_buffer>();
+            feature_ptr feature, prev;
 
-                while ((feature = features->next()))
+            while ((feature = features->next()))
+            {
+                if (prev && prev->get(group_by) != feature->get(group_by))
                 {
-                    if (prev && prev->get(group_by) != feature->get(group_by))
+                    // We're at a value boundary, so render what we have
+                    // up to this point.
+                    std::size_t i = 0;
+                    for (feature_type_style const* style : active_styles)
                     {
-                        // We're at a value boundary, so render what we have
-                        // up to this point.
-                        int i = 0;
-                        BOOST_FOREACH (feature_type_style const* style, active_styles)
-                        {
-                            render_style(lay, p, style, rule_caches[i], style_names[i],
-                                         cache.features(q), prj_trans);
-                            i++;
-                        }
-                        cache.clear();
+
+                        cache->prepare();
+                        render_style(p, style,
+                                     rule_caches[i],
+                                     cache,
+                                     prj_trans);
+                        ++i;
                     }
-                    cache.push(feature);
-                    prev = feature;
+                    cache->clear();
                 }
+                cache->push(feature);
+                prev = feature;
+            }
 
-                int i = 0;
-                BOOST_FOREACH (feature_type_style const* style, active_styles)
-                {
-                    render_style(lay, p, style, rule_caches[i], style_names[i],
-                                 cache.features(q), prj_trans);
-                    i++;
-                }
+            std::size_t i = 0;
+            for (feature_type_style const* style : active_styles)
+            {
+                cache->prepare();
+                render_style(p, style, rule_caches[i], cache, prj_trans);
+                ++i;
             }
+            cache->clear();
         }
-        else if (cache_features)
+    }
+    else if (cache_features)
+    {
+        std::shared_ptr<featureset_buffer> cache = std::make_shared<featureset_buffer>();
+        featureset_ptr features = *featureset_ptr_list.begin();
+        if (features)
         {
-            memory_datasource cache(ds->type(),false);
-            featureset_ptr features = ds->features(q);
-            if (features) {
-                // Cache all features into the memory_datasource before rendering.
-                feature_ptr feature;
-                while ((feature = features->next()))
-                {
-                    cache.push(feature);
-                }
-            }
-            int i = 0;
-            BOOST_FOREACH (feature_type_style const* style, active_styles)
+            // Cache all features into the memory_datasource before rendering.
+            feature_ptr feature;
+            while ((feature = features->next()))
             {
-                render_style(lay, p, style, rule_caches[i], style_names[i],
-                             cache.features(q), prj_trans);
-                i++;
+
+                cache->push(feature);
             }
         }
-        // We only have a single style and no grouping.
-        else
+        std::size_t i = 0;
+        for (feature_type_style const* style : active_styles)
         {
-            int i = 0;
-            BOOST_FOREACH (feature_type_style const* style, active_styles)
-            {
-                render_style(lay, p, style, rule_caches[i], style_names[i],
-                             ds->features(q), prj_trans);
-                i++;
-            }
+            cache->prepare();
+            render_style(p, style,
+                         rule_caches[i],
+                         cache, prj_trans);
+            ++i;
         }
     }
-
-#if defined(RENDERING_STATS)
-    layer_timer.stop();
-#endif
-
-    p.end_layer_processing(lay);
+    // We only have a single style and no grouping.
+    else
+    {
+        std::size_t i = 0;
+        std::vector<featureset_ptr>::iterator featuresets = featureset_ptr_list.begin();
+        for (feature_type_style const* style : active_styles)
+        {
+            featureset_ptr features = *featuresets++;
+            render_style(p, style,
+                         rule_caches[i],
+                         features,
+                         prj_trans);
+            ++i;
+        }
+    }
+    p.end_layer_processing(mat.lay_);
 }
 
-
 template <typename Processor>
 void feature_style_processor<Processor>::render_style(
-    layer const& lay,
     Processor & p,
     feature_type_style const* style,
     rule_cache const& rc,
-    std::string const& style_name,
     featureset_ptr features,
     proj_transform const& prj_trans)
 {
@@ -567,52 +572,28 @@ void feature_style_processor<Processor>::render_style(
         p.end_style_processing(*style);
         return;
     }
-
-#if defined(RENDERING_STATS)
-    std::ostringstream s1;
-    s1 << "rendering style for layer: '" << lay.name()
-       << "' and style '" << style_name << "'";
-    mapnik::progress_timer style_timer(std::clog, s1.str());
-
-    int feature_processed_count = 0;
-    int feature_count = 0;
-#endif
-
+    mapnik::attributes vars = p.variables();
     feature_ptr feature;
+    bool was_painted = false;
     while ((feature = features->next()))
     {
-#if defined(RENDERING_STATS)
-        feature_count++;
-        bool feat_processed = false;
-#endif
-
         bool do_else = true;
         bool do_also = false;
-
-        BOOST_FOREACH(rule const* r, rc.get_if_rules() )
+        for (rule const* r : rc.get_if_rules() )
         {
-            expression_ptr const& expr=r->get_filter();
-            value_type result = boost::apply_visitor(evaluate<feature_impl,value_type>(*feature),*expr);
+            expression_ptr const& expr = r->get_filter();
+            value_type result = util::apply_visitor(evaluate<feature_impl,value_type,attributes>(*feature,vars),*expr);
             if (result.to_bool())
             {
-#if defined(RENDERING_STATS)
-                feat_processed = true;
-#endif
-
-                p.painted(true);
-
+                was_painted = true;
                 do_else=false;
                 do_also=true;
                 rule::symbolizers const& symbols = r->get_symbolizers();
-
-                // if the underlying renderer is not able to process the complete set of symbolizers,
-                // process one by one.
                 if(!p.process(symbols,*feature,prj_trans))
                 {
-
-                    BOOST_FOREACH (symbolizer const& sym, symbols)
+                    for (symbolizer const& sym : symbols)
                     {
-                        boost::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
+                        util::apply_visitor(symbolizer_dispatch<Processor>(p,*feature,prj_trans),sym);
                     }
                 }
                 if (style->get_filter_mode() == FILTER_FIRST)
@@ -625,74 +606,36 @@ void feature_style_processor<Processor>::render_style(
         }
         if (do_else)
         {
-            BOOST_FOREACH( rule const* r, rc.get_else_rules() )
+            for( rule const* r : rc.get_else_rules() )
             {
-#if defined(RENDERING_STATS)
-                feat_processed = true;
-#endif
-
-                p.painted(true);
-
+                was_painted = true;
                 rule::symbolizers const& symbols = r->get_symbolizers();
-                // if the underlying renderer is not able to process the complete set of symbolizers,
-                // process one by one.
                 if(!p.process(symbols,*feature,prj_trans))
                 {
-                    BOOST_FOREACH (symbolizer const& sym, symbols)
+                    for (symbolizer const& sym : symbols)
                     {
-                        boost::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
+                        util::apply_visitor(symbolizer_dispatch<Processor>(p,*feature,prj_trans),sym);
                     }
                 }
             }
         }
         if (do_also)
         {
-            BOOST_FOREACH( rule const* r, rc.get_also_rules() )
+            for( rule const* r : rc.get_also_rules() )
             {
-#if defined(RENDERING_STATS)
-                feat_processed = true;
-#endif
-
-                p.painted(true);
-
+                was_painted = true;
                 rule::symbolizers const& symbols = r->get_symbolizers();
-                // if the underlying renderer is not able to process the complete set of symbolizers,
-                // process one by one.
                 if(!p.process(symbols,*feature,prj_trans))
                 {
-                    BOOST_FOREACH (symbolizer const& sym, symbols)
+                    for (symbolizer const& sym : symbols)
                     {
-                        boost::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
+                        util::apply_visitor(symbolizer_dispatch<Processor>(p,*feature,prj_trans),sym);
                     }
                 }
             }
         }
-#if defined(RENDERING_STATS)
-        if (feat_processed)
-            feature_processed_count++;
-#endif
-    }
-
-#if defined(RENDERING_STATS)
-    style_timer.stop();
-
-    // done with style
-    std::ostringstream s;
-    if (feature_count > 0)
-    {
-        double perc_processed = ((double)feature_processed_count/(double)feature_count)*100.0;
-
-        s << "percent rendered: " << perc_processed << "% - " << feature_processed_count
-          << " rendered for " << feature_count << " queried for ";
-        s << std::setw(15 - (int)s.tellp()) << " layer '" << lay.name() << "' and style '" << style_name << "'\n";
-    }
-    else
-    {
-        s << "" << std::setw(15) << "- no features returned from query for layer '" << lay.name() << "' and style '" << style_name << "'\n";
     }
-    std::clog << s.str();
-    style_timer.discard();
-#endif
+    p.painted(p.painted() | was_painted);
     p.end_style_processing(*style);
 }
 
diff --git a/include/mapnik/feature_type_style.hpp b/include/mapnik/feature_type_style.hpp
index 80a5a9d..7835954 100644
--- a/include/mapnik/feature_type_style.hpp
+++ b/include/mapnik/feature_type_style.hpp
@@ -25,7 +25,6 @@
 
 // mapnik
 #include <mapnik/config.hpp>
-#include <mapnik/rule.hpp>
 #include <mapnik/enumeration.hpp>
 #include <mapnik/image_filter_types.hpp>
 #include <mapnik/image_compositing.hpp>
@@ -35,6 +34,7 @@
 
 // stl
 #include <vector>
+#include <cstddef>
 
 namespace mapnik
 {
@@ -49,7 +49,7 @@ enum filter_mode_enum {
 
 DEFINE_ENUM( filter_mode_e, filter_mode_enum );
 
-typedef std::vector<rule> rules;
+using rules = std::vector<rule>;
 
 class MAPNIK_DECL feature_type_style
 {
@@ -62,17 +62,22 @@ private:
     // comp-op
     boost::optional<composite_mode_e> comp_op_;
     float opacity_;
+    bool image_filters_inflate_;
+    friend void swap(feature_type_style& lhs, feature_type_style & rhs);
 public:
+    // ctor
     feature_type_style();
+    feature_type_style(feature_type_style const& rhs);
+    feature_type_style(feature_type_style && rhs);
+    feature_type_style& operator=(feature_type_style rhs);
 
-    feature_type_style(feature_type_style const& rhs, bool deep_copy = false);
+    // comparison
+    bool operator==(feature_type_style const& rhs) const;
 
-    feature_type_style& operator=(feature_type_style const& rhs);
-
-    void add_rule(rule const& rule);
+    void add_rule(rule && rule);
     rules const& get_rules() const;
     rules& get_rules_nonconst();
-    
+
     bool active(double scale_denom) const;
 
     void set_filter_mode(filter_mode_e mode);
@@ -80,14 +85,20 @@ public:
 
     // filters
     std::vector<filter::filter_type> const& image_filters() const;
-    std::vector<filter::filter_type> & image_filters();    
+    std::vector<filter::filter_type> & image_filters();
     std::vector<filter::filter_type> const& direct_image_filters() const;
     std::vector<filter::filter_type> & direct_image_filters();
     // compositing
     void set_comp_op(composite_mode_e comp_op);
-    boost::optional<composite_mode_e> comp_op() const;     
+    boost::optional<composite_mode_e> comp_op() const;
     void set_opacity(float opacity);
     float get_opacity() const;
+    void set_image_filters_inflate(bool inflate);
+    bool image_filters_inflate() const;
+    inline void reserve(std::size_t size)
+    {
+        rules_.reserve(size);
+    }
 
     ~feature_type_style() {}
 
diff --git a/include/mapnik/featureset.hpp b/include/mapnik/featureset.hpp
new file mode 100644
index 0000000..8697984
--- /dev/null
+++ b/include/mapnik/featureset.hpp
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_FEATURESET_HPP
+#define MAPNIK_FEATURESET_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// boost
+#include <memory>
+
+namespace mapnik {
+
+class feature_impl;
+using feature_ptr = std::shared_ptr<feature_impl>;
+
+struct MAPNIK_DECL Featureset : private mapnik::noncopyable
+{
+    virtual feature_ptr next() = 0;
+    virtual ~Featureset() {}
+};
+
+using featureset_ptr = std::shared_ptr<Featureset>;
+
+}
+
+#endif // MAPNIK_FEATURESET_HPP
diff --git a/include/mapnik/filter_featureset.hpp b/include/mapnik/filter_featureset.hpp
index b02cf35..77ce4fe 100644
--- a/include/mapnik/filter_featureset.hpp
+++ b/include/mapnik/filter_featureset.hpp
@@ -24,7 +24,7 @@
 #define MAPNIK_FILTER_FEATURESET_HPP
 
 // mapnik
-#include <mapnik/datasource.hpp>  // for featureset_ptr
+#include <mapnik/featureset.hpp>
 #include <mapnik/feature.hpp>
 
 namespace mapnik {
@@ -32,11 +32,11 @@ namespace mapnik {
 template <typename T>
 class filter_featureset : public Featureset
 {
-    typedef T filter_type;
+    using filter_type = T;
 
 public:
-    filter_featureset(featureset_ptr fs, filter_type const& filter)
-        : fs_(fs), filter_(filter) {}
+    filter_featureset(featureset_ptr const& fs, filter_type && filter)
+        : fs_(fs), filter_(std::move(filter)) {}
 
     feature_ptr next()
     {
diff --git a/include/mapnik/font_engine_freetype.hpp b/include/mapnik/font_engine_freetype.hpp
index 5d47361..e141131 100644
--- a/include/mapnik/font_engine_freetype.hpp
+++ b/include/mapnik/font_engine_freetype.hpp
@@ -24,244 +24,104 @@
 #define MAPNIK_FONT_ENGINE_FREETYPE_HPP
 
 // mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/color.hpp>
-#include <mapnik/utils.hpp>
-#include <mapnik/box2d.hpp>
-#include <mapnik/ctrans.hpp>
-#include <mapnik/geometry.hpp>
+#include <mapnik/config.hpp>
 #include <mapnik/font_set.hpp>
-#include <mapnik/char_info.hpp>
-#include <mapnik/image_compositing.hpp>
-#include <mapnik/text_symbolizer.hpp>
+#include <mapnik/text/font_library.hpp>
 #include <mapnik/noncopyable.hpp>
-#include <mapnik/value_types.hpp>
-#include <mapnik/pixel_position.hpp>
-
-// boost
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
-#include <boost/foreach.hpp>
-#ifdef MAPNIK_THREADSAFE
-#include <boost/thread/mutex.hpp>
-#endif
 
 // stl
-#include <string>
-#include <vector>
+#include <memory>
 #include <map>
+#include <utility> // pair
+#include <vector>
 
-// uci
-#include <unicode/unistr.h>
+#ifdef MAPNIK_THREADSAFE
+#include <mutex>
+#endif
 
-struct FT_LibraryRec_;
+namespace boost { template <class T> class optional; }
 
 namespace mapnik
 {
-class font_face;
-class text_path;
-class string_info;
-struct char_properties;
-class stroker;
-struct glyph_t;
-
-typedef boost::shared_ptr<font_face> face_ptr;
-
-class MAPNIK_DECL font_glyph : private mapnik::noncopyable
-{
-public:
-    font_glyph(face_ptr face, unsigned index)
-        : face_(face), index_(index) {}
-
-    face_ptr get_face() const
-    {
-        return face_;
-    }
-
-    unsigned get_index() const
-    {
-        return index_;
-    }
-private:
-    face_ptr face_;
-    unsigned index_;
-};
-
-typedef boost::shared_ptr<font_glyph> glyph_ptr;
-
-
-
-class MAPNIK_DECL font_face_set : private mapnik::noncopyable
-{
-public:
-    typedef std::vector<face_ptr> container_type;
-    typedef container_type::size_type size_type;
-
-    font_face_set(void)
-        : faces_(),
-        dimension_cache_() {}
 
-    void add(face_ptr face);
-    size_type size() const;
-    glyph_ptr get_glyph(unsigned c) const;
-    char_info character_dimensions(unsigned c);
-    void get_string_info(string_info & info, UnicodeString const& ustr, char_properties *format);
-    void set_pixel_sizes(unsigned size);
-    void set_character_sizes(double size);
-private:
-    container_type faces_;
-    std::map<unsigned, char_info> dimension_cache_;
-};
-
-typedef boost::shared_ptr<font_face_set> face_set_ptr;
-typedef boost::shared_ptr<stroker> stroker_ptr;
+class stroker;
+using stroker_ptr = std::shared_ptr<stroker>;
+class font_face_set;
+using face_set_ptr = std::unique_ptr<font_face_set>;
+class font_face;
+using face_ptr = std::shared_ptr<font_face>;
 
 class MAPNIK_DECL freetype_engine
 {
 public:
+    using font_file_mapping_type = std::map<std::string,std::pair<int,std::string>>;
+    using font_memory_cache_type = std::map<std::string, std::pair<std::unique_ptr<char[]>, std::size_t>>;
     static bool is_font_file(std::string const& file_name);
-
     /*! \brief register a font file
      *  @param file_name path to a font file.
      *  @return bool - true if at least one face was successfully registered in the file.
      */
     static bool register_font(std::string const& file_name);
-
-    /*! \brief register a font file
+    /*! \brief register a font files
      *  @param dir - path to a directory containing fonts or subdirectories.
      *  @param recurse - default false, whether to search for fonts in sub directories.
      *  @return bool - true if at least one face was successfully registered.
      */
     static bool register_fonts(std::string const& dir, bool recurse = false);
     static std::vector<std::string> face_names();
-    static std::map<std::string,std::pair<int,std::string> > const& get_mapping();
-    face_ptr create_face(std::string const& family_name);
-    stroker_ptr create_stroker();
+    static font_file_mapping_type const& get_mapping();
+    static font_memory_cache_type & get_cache();
+    static bool can_open(std::string const& face_name,
+                         font_library & library,
+                         font_file_mapping_type const& font_file_mapping,
+                         font_file_mapping_type const& global_font_file_mapping);
+    static face_ptr create_face(std::string const& face_name,
+                         font_library & library,
+                         font_file_mapping_type const& font_file_mapping,
+                         freetype_engine::font_memory_cache_type const& font_cache,
+                         font_file_mapping_type const& global_font_file_mapping,
+                         freetype_engine::font_memory_cache_type & global_memory_fonts);
+    static bool register_font_impl(std::string const& file_name,
+                                   font_library & libary,
+                                   font_file_mapping_type & font_file_mapping);
+    static bool register_fonts_impl(std::string const& dir,
+                                    font_library & libary,
+                                    font_file_mapping_type & font_file_mapping,
+                                    bool recurse = false);
     virtual ~freetype_engine();
     freetype_engine();
 private:
-    FT_LibraryRec_ * library_;
+    static bool register_font_impl(std::string const& file_name, FT_LibraryRec_ * library);
+    static bool register_fonts_impl(std::string const& dir, FT_LibraryRec_ * library, bool recurse = false);
 #ifdef MAPNIK_THREADSAFE
-    static boost::mutex mutex_;
+    static std::mutex mutex_;
 #endif
-    static std::map<std::string,std::pair<int,std::string> > name2file_;
-    static std::map<std::string, std::string> memory_fonts_;
+    static font_file_mapping_type global_font_file_mapping_;
+    static font_memory_cache_type global_memory_fonts_;
 };
 
-template <typename T>
 class MAPNIK_DECL face_manager : private mapnik::noncopyable
 {
-    typedef T font_engine_type;
-    typedef std::map<std::string,face_ptr> face_ptr_cache_type;
+    using face_ptr_cache_type = std::map<std::string, face_ptr>;
 
 public:
-    face_manager(T & engine)
-        : engine_(engine),
-        stroker_(engine_.create_stroker()),
-        face_ptr_cache_()  {}
-
-    face_ptr get_face(std::string const& name)
-    {
-        face_ptr_cache_type::iterator itr;
-        itr = face_ptr_cache_.find(name);
-        if (itr != face_ptr_cache_.end())
-        {
-            return itr->second;
-        }
-        else
-        {
-            face_ptr face = engine_.create_face(name);
-            if (face)
-            {
-                face_ptr_cache_.insert(make_pair(name,face));
-            }
-            return face;
-        }
-    }
-
-    face_set_ptr get_face_set(std::string const& name)
-    {
-        face_set_ptr face_set = boost::make_shared<font_face_set>();
-        if (face_ptr face = get_face(name))
-        {
-            face_set->add(face);
-        }
-        return face_set;
-    }
-
-    face_set_ptr get_face_set(font_set const& fset)
-    {
-        std::vector<std::string> const& names = fset.get_face_names();
-        face_set_ptr face_set = boost::make_shared<font_face_set>();
-        BOOST_FOREACH( std::string const& name, names)
-        {
-            face_ptr face = get_face(name);
-            if (face)
-            {
-                face_set->add(face);
-            }
-#ifdef MAPNIK_LOG
-            else
-            {
-                MAPNIK_LOG_DEBUG(font_engine_freetype)
-                        << "Failed to find face '" << name
-                        << "' in font set '" << fset.get_name() << "'\n";
-            }
-#endif
-        }
-        return face_set;
-    }
-
-    face_set_ptr get_face_set(std::string const& name, boost::optional<font_set> fset)
-    {
-        if (fset && fset->size() > 0)
-        {
-            return get_face_set(*fset);
-        }
-        else
-        {
-            return get_face_set(name);
-        }
-    }
-
-    inline stroker_ptr get_stroker()
-    {
-        return stroker_;
-    }
-
+    face_manager(font_library & library,
+                 freetype_engine::font_file_mapping_type const& font_file_mapping,
+                 freetype_engine::font_memory_cache_type const& font_cache);
+    face_ptr get_face(std::string const& name);
+    face_set_ptr get_face_set(std::string const& name);
+    face_set_ptr get_face_set(font_set const& fset);
+    face_set_ptr get_face_set(std::string const& name, boost::optional<font_set> fset);
+    inline stroker_ptr get_stroker() { return stroker_; }
 private:
-    font_engine_type & engine_;
-    stroker_ptr stroker_;
     face_ptr_cache_type face_ptr_cache_;
+    font_library & library_;
+    freetype_engine::font_file_mapping_type const& font_file_mapping_;
+    freetype_engine::font_memory_cache_type const& font_memory_cache_;
+    stroker_ptr stroker_;
 };
 
-template <typename T>
-struct text_renderer : private mapnik::noncopyable
-{
-
-    typedef boost::ptr_vector<glyph_t> glyphs_t;
-    typedef T pixmap_type;
-
-    text_renderer (pixmap_type & pixmap,
-                   face_manager<freetype_engine> & font_manager,
-                   halo_rasterizer_e rasterizer,
-                   composite_mode_e comp_op = src_over,
-                   double scale_factor=1.0);
-    box2d<double> prepare_glyphs(text_path const& path);
-    void render(pixel_position const& pos);
-    void render_id(mapnik::value_integer feature_id,
-                   pixel_position const& pos);
-private:
-    pixmap_type & pixmap_;
-    face_manager<freetype_engine> & font_manager_;
-    halo_rasterizer_e rasterizer_;
-    glyphs_t glyphs_;
-    composite_mode_e comp_op_;
-    double scale_factor_;
-};
-
-typedef face_manager<freetype_engine> face_manager_freetype;
+using face_manager_freetype = face_manager;
 
 }
 
diff --git a/include/mapnik/font_set.hpp b/include/mapnik/font_set.hpp
index 426d60b..ff0ea84 100644
--- a/include/mapnik/font_set.hpp
+++ b/include/mapnik/font_set.hpp
@@ -35,16 +35,22 @@ namespace mapnik
 class MAPNIK_DECL font_set
 {
 public:
+    // ctor/copy/move/dtor
     font_set(std::string const& name);
     font_set(font_set const& rhs);
-    font_set& operator=(font_set const& rhs);
-    unsigned size() const;
+    font_set(font_set &&);
+    font_set& operator=(font_set rhs);
+    ~font_set();
+    // comparison
+    bool operator==(font_set const& rhs) const;
+    std::size_t size() const;
     void set_name(std::string const& name);
     std::string const& get_name() const;
-    void add_face_name(std::string);
+    void add_face_name(std::string const& face_name);
     std::vector<std::string> const& get_face_names() const;
-    ~font_set();
+
 private:
+    friend void swap(font_set & lhs, font_set & rhs);
     std::string name_;
     std::vector<std::string> face_names_;
 };
diff --git a/include/mapnik/font_util.hpp b/include/mapnik/font_util.hpp
deleted file mode 100644
index 6e04988..0000000
--- a/include/mapnik/font_util.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2013 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-
-#ifndef MAPNIK_FONT_UTIL_HPP
-#define MAPNIK_FONT_UTIL_HPP
-
-// mapnik
-#include <mapnik/noncopyable.hpp>
-
-#include <string>
-
-// freetype2
-extern "C"
-{
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-#include FT_STROKER_H
-}
-
-namespace mapnik
-{
-struct char_properties;
-
-struct glyph_t : mapnik::noncopyable
-{
-    FT_Glyph image;
-    char_properties *properties;
-    glyph_t(FT_Glyph image_, char_properties *properties_)
-        : image(image_),
-        properties(properties_) {}
-    ~glyph_t()
-    {
-        FT_Done_Glyph(image);
-    }
-};
-
-
-// FT_Stroker wrapper
-class stroker : mapnik::noncopyable
-{
-public:
-    explicit stroker(FT_Stroker s)
-        : s_(s) {}
-
-    void init(double radius)
-    {
-        FT_Stroker_Set(s_, (FT_Fixed) (radius * (1<<6)),
-                       FT_STROKER_LINECAP_ROUND,
-                       FT_STROKER_LINEJOIN_ROUND,
-                       0);
-    }
-
-    FT_Stroker const& get() const
-    {
-        return s_;
-    }
-
-    ~stroker()
-    {
-        FT_Stroker_Done(s_);
-    }
-private:
-    FT_Stroker s_;
-};
-
-
-class font_face : mapnik::noncopyable
-{
-public:
-    font_face(FT_Face face)
-        : face_(face) {}
-
-    std::string family_name() const
-    {
-        return std::string(face_->family_name);
-    }
-
-    std::string style_name() const
-    {
-        return std::string(face_->style_name);
-    }
-
-    FT_GlyphSlot glyph() const
-    {
-        return face_->glyph;
-    }
-
-    FT_Face get_face() const
-    {
-        return face_;
-    }
-
-    unsigned get_char(unsigned c) const
-    {
-        return FT_Get_Char_Index(face_, c);
-    }
-
-    bool set_pixel_sizes(unsigned size)
-    {
-        if (! FT_Set_Pixel_Sizes( face_, 0, size ))
-            return true;
-        return false;
-    }
-
-    bool set_character_sizes(double size)
-    {
-        if ( !FT_Set_Char_Size(face_,0,(FT_F26Dot6)(size * (1<<6)),0,0))
-            return true;
-        return false;
-    }
-
-    ~font_face()
-    {
-        FT_Done_Face(face_);
-    }
-
-private:
-    FT_Face face_;
-};
-
-}
-
-
-#endif // MAPNIK_FONT_UTIL_HPP
diff --git a/include/mapnik/formatting/base.hpp b/include/mapnik/formatting/base.hpp
deleted file mode 100644
index 0239173..0000000
--- a/include/mapnik/formatting/base.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef FORMATTING_BASE_HPP
-#define FORMATTING_BASE_HPP
-
-// mapnik
-#include <mapnik/expression.hpp>
-
-// boost
-#include <boost/property_tree/ptree_fwd.hpp>
-
-namespace mapnik {
-
-class feature_impl;
-class processed_text;
-class xml_node;
-struct char_properties;
-
-namespace formatting {
-
-class node;
-typedef boost::shared_ptr<node> node_ptr;
-
-class MAPNIK_DECL node
-{
-public:
-    virtual ~node() {}
-    virtual void to_xml(boost::property_tree::ptree &xml) const;
-    static node_ptr from_xml(xml_node const& xml);
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const = 0;
-    virtual void add_expressions(expression_set &output) const;
-};
-} //ns formatting
-} //ns mapnik
-#endif // FORMATTING_BASE_HPP
diff --git a/include/mapnik/formatting/expression_format.hpp b/include/mapnik/formatting/expression_format.hpp
deleted file mode 100644
index da5f718..0000000
--- a/include/mapnik/formatting/expression_format.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef FORMATTING_EXPRESSION_HPP
-#define FORMATTING_EXPRESSION_HPP
-
-#include <mapnik/formatting/base.hpp>
-#include <mapnik/expression.hpp>
-
-// boost
-#include <boost/property_tree/ptree_fwd.hpp>
-
-namespace mapnik {
-
-class feature_impl;
-class processed_text;
-class xml_node;
-struct char_properties;
-
-namespace formatting {
-class MAPNIK_DECL expression_format: public node {
-public:
-    void to_xml(boost::property_tree::ptree &xml) const;
-    static node_ptr from_xml(xml_node const& xml);
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const;
-    virtual void add_expressions(expression_set &output) const;
-
-    void set_child(node_ptr child);
-    node_ptr get_child() const;
-
-    expression_ptr face_name;
-    expression_ptr text_size;
-    expression_ptr character_spacing;
-    expression_ptr line_spacing;
-    expression_ptr text_opacity;
-    expression_ptr wrap_before;
-    expression_ptr wrap_char;
-    expression_ptr fill;
-    expression_ptr halo_fill;
-    expression_ptr halo_radius;
-
-private:
-    node_ptr child_;
-    static expression_ptr get_expression(xml_node const& xml, std::string name);
-};
-} //ns formatting
-} //ns mapnik
-#endif // FORMATTING_EXPRESSION_HPP
diff --git a/include/mapnik/formatting/format.hpp b/include/mapnik/formatting/format.hpp
deleted file mode 100644
index b22ea63..0000000
--- a/include/mapnik/formatting/format.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef FORMATTING_FORMAT_HPP
-#define FORMATTING_FORMAT_HPP
-
-#include <mapnik/formatting/base.hpp>
-#include <mapnik/text_properties.hpp>
-#include <mapnik/feature.hpp>
-
-// boost
-#include <boost/property_tree/ptree_fwd.hpp>
-
-namespace mapnik {
-namespace formatting {
-class MAPNIK_DECL format_node: public node {
-public:
-    void to_xml(boost::property_tree::ptree &xml) const;
-    static node_ptr from_xml(xml_node const& xml);
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const;
-    virtual void add_expressions(expression_set &output) const;
-
-    void set_child(node_ptr child);
-    node_ptr get_child() const;
-
-    boost::optional<std::string> face_name;
-    boost::optional<unsigned> text_size;
-    boost::optional<unsigned> character_spacing;
-    boost::optional<unsigned> line_spacing;
-    boost::optional<double> text_opacity;
-    boost::optional<bool> wrap_before;
-    boost::optional<unsigned> wrap_char;
-    boost::optional<text_transform_e> text_transform;
-    boost::optional<color> fill;
-    boost::optional<color> halo_fill;
-    boost::optional<double> halo_radius;
-
-private:
-    node_ptr child_;
-};
-} //ns formatting
-} //ns mapnik
-
-#endif // FORMATTING_FORMAT_HPP
diff --git a/include/mapnik/formatting/list.hpp b/include/mapnik/formatting/list.hpp
deleted file mode 100644
index 56ab455..0000000
--- a/include/mapnik/formatting/list.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef FORMATTING_LIST_HPP
-#define FORMATTING_LIST_HPP
-
-// mapnik
-#include <mapnik/formatting/base.hpp>
-#include <mapnik/feature.hpp>
-
-// boost
-#include <boost/property_tree/ptree_fwd.hpp>
-
-namespace mapnik {
-namespace formatting {
-class MAPNIK_DECL list_node: public node {
-public:
-    list_node() : node(), children_() {}
-    virtual void to_xml(boost::property_tree::ptree &xml) const;
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const;
-    virtual void add_expressions(expression_set &output) const;
-
-    void push_back(node_ptr n);
-    void set_children(std::vector<node_ptr> const& children);
-    std::vector<node_ptr> const& get_children() const;
-    void clear();
-protected:
-    std::vector<node_ptr> children_;
-};
-} //ns formatting
-} //ns mapnik
-
-#endif // FORMATTING_LIST_HPP
-
diff --git a/include/mapnik/formatting/registry.hpp b/include/mapnik/formatting/registry.hpp
deleted file mode 100644
index 5e77ca0..0000000
--- a/include/mapnik/formatting/registry.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef FORMATTING_REGISTRY_HPP
-#define FORMATTING_REGISTRY_HPP
-
-// mapnik
-#include <mapnik/utils.hpp>
-#include <mapnik/formatting/base.hpp>
-#include <mapnik/noncopyable.hpp>
-
-// stl
-#include <string>
-#include <map>
-
-namespace mapnik
-{
-namespace formatting
-{
-
-typedef node_ptr (*from_xml_function_ptr)(xml_node const& xml);
-
-class registry : public singleton<registry, CreateStatic>,
-                 private mapnik::noncopyable
-{
-public:
-    registry();
-    ~registry() {}
-    void register_name(std::string const& name, from_xml_function_ptr ptr, bool overwrite=false);
-    node_ptr from_xml(xml_node const& xml);
-private:
-    std::map<std::string, from_xml_function_ptr> map_;
-};
-
-} //ns formatting
-} //ns mapnik
-#endif // FORMATTING_REGISTRY_HPP
diff --git a/include/mapnik/formatting/text.hpp b/include/mapnik/formatting/text.hpp
deleted file mode 100644
index bc63fe1..0000000
--- a/include/mapnik/formatting/text.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef FORMATTING_TEXT_HPP
-#define FORMATTING_TEXT_HPP
-
-#include <mapnik/formatting/base.hpp>
-#include <mapnik/feature.hpp>
-
-// boost
-#include <boost/property_tree/ptree_fwd.hpp>
-
-namespace mapnik {
-namespace formatting {
-class MAPNIK_DECL text_node: public node {
-public:
-    text_node(expression_ptr text): node(), text_(text) {}
-    text_node(std::string text): node(), text_(parse_expression(text)) {}
-    void to_xml(boost::property_tree::ptree &xml) const;
-    static node_ptr from_xml(xml_node const& xml);
-    virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const;
-    virtual void add_expressions(expression_set &output) const;
-
-    void set_text(expression_ptr text);
-    expression_ptr get_text() const;
-private:
-    expression_ptr text_;
-};
-} //ns formatting
-} //ns mapnik
-
-#endif // FORMATTING_TEXT_HPP
diff --git a/include/mapnik/function_call.hpp b/include/mapnik/function_call.hpp
new file mode 100644
index 0000000..5453d92
--- /dev/null
+++ b/include/mapnik/function_call.hpp
@@ -0,0 +1,127 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_FUNCTION_CALL_HPP
+#define MAPNIK_FUNCTION_CALL_HPP
+
+#include <mapnik/value.hpp>
+#include <functional>
+#include <algorithm>
+#include <cmath>
+
+namespace mapnik {
+
+using value_type = mapnik::value;
+
+using unary_function_impl = std::function<value_type(value_type const&)>;
+using binary_function_impl = std::function<value_type(value_type const&, value_type const&)>;
+
+char const* unary_function_name(unary_function_impl const& fun);
+char const* binary_function_name(binary_function_impl const& fun);
+
+// functions
+// exp
+struct exp_impl
+{
+    //using type = T;
+    value_type operator() (value_type const& val) const
+    {
+        return std::exp(val.to_double());
+    }
+
+};
+
+// sin
+struct sin_impl
+{
+    value_type operator() (value_type const& val) const
+    {
+        return std::sin(val.to_double());
+    }
+};
+
+// cos
+struct cos_impl
+{
+    value_type operator() (value_type const& val) const
+    {
+        return std::cos(val.to_double());
+    }
+};
+
+// tan
+struct tan_impl
+{
+    value_type operator() (value_type const& val) const
+    {
+        return std::tan(val.to_double());
+    }
+};
+
+// atan
+struct atan_impl
+{
+    value_type operator()(value_type const& val) const
+    {
+        return std::atan(val.to_double());
+    }
+};
+
+// abs
+struct abs_impl
+{
+    value_type operator() (value_type const& val) const
+    {
+        return std::fabs(val.to_double());
+    }
+};
+
+// length
+struct length_impl
+{
+    value_type operator() (value_type const& val) const
+    {
+        return val.to_unicode().length();
+    }
+};
+
+// min
+inline value_type min_impl(value_type const& arg1, value_type const& arg2)
+{
+    return std::min(arg1.to_double(), arg2.to_double());
+}
+
+// max
+inline value_type max_impl(value_type const& arg1, value_type const& arg2)
+{
+    return std::max(arg1.to_double(), arg2.to_double());
+}
+
+// pow
+inline value_type pow_impl(value_type const& arg1, value_type const& arg2)
+{
+    return std::pow(arg1.to_double(), arg2.to_double());
+}
+
+} // namespace mapnik
+
+#endif // MAPNIK_FUNCTION_CALL_HPP
diff --git a/include/mapnik/gamma_method.hpp b/include/mapnik/gamma_method.hpp
deleted file mode 100644
index b8a7bd1..0000000
--- a/include/mapnik/gamma_method.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_GAMMA_METHOD_HPP
-#define MAPNIK_GAMMA_METHOD_HPP
-
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik {
-
-enum gamma_method_enum {
-    GAMMA_POWER, //agg::gamma_power
-    GAMMA_LINEAR, //agg::gamma_linear
-    GAMMA_NONE, //agg::gamma_none
-    GAMMA_THRESHOLD, //agg::gamma_threshold
-    GAMMA_MULTIPLY, //agg::gamma_multiply
-    gamma_method_enum_MAX
-};
-
-DEFINE_ENUM (gamma_method_e, gamma_method_enum );
-
-}
-
-#endif // MAPNIK_GAMMA_METHOD_HPP
diff --git a/include/mapnik/geom_util.hpp b/include/mapnik/geom_util.hpp
index 350c797..104bef2 100644
--- a/include/mapnik/geom_util.hpp
+++ b/include/mapnik/geom_util.hpp
@@ -25,14 +25,14 @@
 
 // mapnik
 #include <mapnik/box2d.hpp>
+#include <mapnik/coord.hpp>
 #include <mapnik/vertex.hpp>
-
-// boost
-#include <boost/tuple/tuple.hpp>
+#include <mapnik/geometry.hpp> // for geometry_type::types (TODO: avoid this interdependence)
 
 // stl
 #include <cmath>
 #include <vector>
+#include <algorithm>
 
 namespace mapnik
 {
@@ -93,21 +93,21 @@ template <typename Iter>
 inline bool point_inside_path(double x,double y,Iter start,Iter end)
 {
     bool inside=false;
-    double x0=boost::get<0>(*start);
-    double y0=boost::get<1>(*start);
+    double x0=std::get<0>(*start);
+    double y0=std::get<1>(*start);
 
     double x1 = 0;
     double y1 = 0;
     while (++start!=end)
     {
-        if ( boost::get<2>(*start) == SEG_MOVETO)
+        if ( std::get<2>(*start) == SEG_MOVETO)
         {
-            x0 = boost::get<0>(*start);
-            y0 = boost::get<1>(*start);
+            x0 = std::get<0>(*start);
+            y0 = std::get<1>(*start);
             continue;
         }
-        x1=boost::get<0>(*start);
-        y1=boost::get<1>(*start);
+        x1=std::get<0>(*start);
+        y1=std::get<1>(*start);
 
         if ((((y1 <= y) && (y < y0)) ||
              ((y0 <= y) && (y < y1))) &&
@@ -172,20 +172,20 @@ inline double point_to_segment_distance(double x, double y,
 template <typename Iter>
 inline bool point_on_path(double x,double y,Iter start,Iter end, double tol)
 {
-    double x0=boost::get<0>(*start);
-    double y0=boost::get<1>(*start);
+    double x0=std::get<0>(*start);
+    double y0=std::get<1>(*start);
     double x1 = 0;
     double y1 = 0;
     while (++start != end)
     {
-        if ( boost::get<2>(*start) == SEG_MOVETO)
+        if ( std::get<2>(*start) == SEG_MOVETO)
         {
-            x0 = boost::get<0>(*start);
-            y0 = boost::get<1>(*start);
+            x0 = std::get<0>(*start);
+            y0 = std::get<1>(*start);
             continue;
         }
-        x1=boost::get<0>(*start);
-        y1=boost::get<1>(*start);
+        x1=std::get<0>(*start);
+        y1=std::get<1>(*start);
 
         double distance = point_to_segment_distance(x,y,x0,y0,x1,y1);
         if (distance < tol)
@@ -246,6 +246,46 @@ double path_length(PathType & path)
     return length;
 }
 
+template <typename PathType>
+bool hit_test_first(PathType & path, double x, double y)
+{
+    bool inside=false;
+    double x0 = 0;
+    double y0 = 0;
+    double x1 = 0;
+    double y1 = 0;
+    path.rewind(0);
+    unsigned command = path.vertex(&x0, &y0);
+    if (command == SEG_END)
+    {
+        return false;
+    }
+    unsigned count = 0;
+    while (SEG_END != (command = path.vertex(&x1, &y1)))
+    {
+        if (command == SEG_CLOSE)
+        {
+            break;
+        }
+        ++count;
+        if (command == SEG_MOVETO)
+        {
+            x0 = x1;
+            y0 = y1;
+            continue;
+        }
+
+        if ((((y1 <= y) && (y < y0)) ||
+             ((y0 <= y) && (y < y1))) &&
+            (x < (x0 - x1) * (y - y1)/ (y0 - y1) + x1))
+            inside=!inside;
+
+        x0 = x1;
+        y0 = y1;
+    }
+    return inside;
+}
+
 namespace label {
 
 template <typename PathType>
@@ -354,7 +394,7 @@ bool centroid_geoms(Iter start, Iter end, double & x, double & y)
 
   while (start!=end)
   {
-    typename Iter::value_type & path = *start++;
+    typename Iter::value_type const& path = *start++;
     path.rewind(0);
     unsigned command = path.vertex(&x0, &y0);
     if (command == SEG_END) continue;
@@ -414,11 +454,18 @@ bool hit_test(PathType & path, double x, double y, double tol)
     double y1 = 0;
     path.rewind(0);
     unsigned command = path.vertex(&x0, &y0);
-    if (command == SEG_END) return false;
+    if (command == SEG_END)
+    {
+        return false;
+    }
     unsigned count = 0;
+    mapnik::geometry_type::types geom_type = static_cast<mapnik::geometry_type::types>(path.type());
     while (SEG_END != (command = path.vertex(&x1, &y1)))
     {
-        if (command == SEG_CLOSE) continue;
+        if (command == SEG_CLOSE)
+        {
+            continue;
+        }
         ++count;
         if (command == SEG_MOVETO)
         {
@@ -426,18 +473,34 @@ bool hit_test(PathType & path, double x, double y, double tol)
             y0 = y1;
             continue;
         }
-        if ((((y1 <= y) && (y < y0)) ||
-             ((y0 <= y) && (y < y1))) &&
-            (x < (x0 - x1) * (y - y1)/ (y0 - y1) + x1))
-            inside=!inside;
-
+        switch(geom_type)
+        {
+        case mapnik::geometry_type::types::Polygon:
+        {
+            if ((((y1 <= y) && (y < y0)) ||
+                 ((y0 <= y) && (y < y1))) &&
+                (x < (x0 - x1) * (y - y1)/ (y0 - y1) + x1))
+                inside=!inside;
+            break;
+        }
+        case mapnik::geometry_type::types::LineString:
+        {
+            double distance = point_to_segment_distance(x,y,x0,y0,x1,y1);
+            if (distance < tol)
+                return true;
+            break;
+        }
+        default:
+            break;
+        }
         x0 = x1;
         y0 = y1;
     }
 
+    // TODO - handle multi-point?
     if (count == 0) // one vertex
     {
-        return distance(x, y, x0, y0) <= std::fabs(tol);
+        return distance(x, y, x0, y0) <= tol;
     }
     return inside;
 }
@@ -501,18 +564,17 @@ bool interior_position(PathType & path, double & x, double & y)
     // no intersections we just return the default
     if (intersections.empty())
         return true;
-    x0=intersections[0];
+    std::sort(intersections.begin(), intersections.end());
     double max_width = 0;
-    for (unsigned ii = 1; ii < intersections.size(); ++ii)
+    for (unsigned ii = 1; ii < intersections.size(); ii += 2)
     {
-        double xi=intersections[ii];
-        double xc=(x0+xi)/2.0;
-        double width = std::fabs(xi-x0);
-        if (width > max_width && hit_test(path,xc,y,0))
+        double xlow = intersections[ii-1];
+        double xhigh = intersections[ii];
+        double width = xhigh - xlow;
+        if (width > max_width)
         {
-            x=xc;
+            x = (xlow + xhigh) / 2.0;
             max_width = width;
-            break;
         }
     }
     return true;
diff --git a/include/mapnik/geometry.hpp b/include/mapnik/geometry.hpp
index c3f616f..471e043 100644
--- a/include/mapnik/geometry.hpp
+++ b/include/mapnik/geometry.hpp
@@ -28,31 +28,31 @@
 #include <mapnik/box2d.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/shared_ptr.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
-
 namespace mapnik {
 
-enum eGeomType {
-    Unknown = 0,
-    Point = 1,
-    LineString = 2,
-    Polygon = 3
-};
-
 template <typename T, template <typename> class Container=vertex_vector>
 class geometry : private mapnik::noncopyable
 {
+
 public:
-    typedef T coord_type;
-    typedef Container<coord_type> container_type;
-    typedef typename container_type::value_type value_type;
-    typedef typename container_type::size_type size_type;
+    static const std::uint8_t geometry_bits = 7;
+    enum types : std::uint8_t
+    {
+        Unknown = 0x00,
+        Point =   0x01,
+        LineString = 0x02,
+        Polygon = 0x03,
+        PolygonExterior = Polygon,
+        PolygonInterior = Polygon | ( 1 << geometry_bits)
+    };
+    using coord_type = T;
+    using container_type = Container<coord_type>;
+    using value_type = typename container_type::value_type;
+    using size_type = typename container_type::size_type;
 private:
     container_type cont_;
-    eGeomType type_;
-    mutable unsigned itr_;
+    types type_;
+    mutable size_type itr_;
 public:
 
     geometry()
@@ -60,17 +60,22 @@ public:
           itr_(0)
     {}
 
-    explicit geometry(eGeomType type)
+    explicit geometry(types type)
         : type_(type),
           itr_(0)
     {}
 
-    eGeomType type() const
+    types type() const
+    {
+        return static_cast<types>(type_ & types::Polygon);
+    }
+
+    bool interior() const
     {
-        return type_;
+        return static_cast<bool>(type_ >> geometry_bits);
     }
 
-    void set_type(eGeomType type)
+    void set_type(types type)
     {
         type_ = type;
     }
@@ -91,7 +96,8 @@ public:
         double x = 0;
         double y = 0;
         rewind(0);
-        for (unsigned i=0; i < size(); ++i)
+        size_type geom_size = size();
+        for (size_type i = 0; i < geom_size; ++i)
         {
             unsigned cmd = vertex(&x,&y);
             if (cmd == SEG_CLOSE) continue;
@@ -143,9 +149,7 @@ public:
     }
 };
 
-typedef geometry<double,vertex_vector> geometry_type;
-typedef boost::shared_ptr<geometry_type> geometry_ptr;
-typedef boost::ptr_vector<geometry_type> geometry_container;
+using geometry_type = geometry<double,vertex_vector>;
 
 }
 
diff --git a/include/mapnik/geometry_container.hpp b/include/mapnik/geometry_container.hpp
new file mode 100644
index 0000000..ae654d2
--- /dev/null
+++ b/include/mapnik/geometry_container.hpp
@@ -0,0 +1,39 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GEOMETRY_CONTAINER_HPP
+#define MAPNIK_GEOMETRY_CONTAINER_HPP
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/ptr_container/ptr_vector.hpp>
+#pragma GCC diagnostic pop
+
+namespace mapnik {
+
+using geometry_container = boost::ptr_vector<geometry_type>;
+
+}
+
+#endif // MAPNIK_GEOMETRY_CONTAINER_HPP
diff --git a/include/mapnik/global.hpp b/include/mapnik/global.hpp
index f4e200d..d1dcf07 100644
--- a/include/mapnik/global.hpp
+++ b/include/mapnik/global.hpp
@@ -23,138 +23,96 @@
 #ifndef MAPNIK_GLOBAL_HPP
 #define MAPNIK_GLOBAL_HPP
 
-// boost
-#include <boost/cstdint.hpp>
-#include <boost/detail/endian.hpp>
-
 // stl
+#include <cstdint>
 #include <cstring>
 #include <cmath>
 
 namespace mapnik
 {
 
-#ifdef BOOST_BIG_ENDIAN
-#define MAPNIK_BIG_ENDIAN
-#endif
+#define int2net(A)  (int16_t) (((std::uint16_t) ((std::uint8_t) (A)[1]))      | \
+                               (((std::uint16_t) ((std::uint8_t) (A)[0])) << 8))
 
-#define int2net(A)  (int16_t) (((boost::uint16_t) ((boost::uint8_t) (A)[1]))      | \
-                               (((boost::uint16_t) ((boost::uint8_t) (A)[0])) << 8))
+#define int4net(A)  (int32_t)  (((std::uint32_t) ((std::uint8_t) (A)[3]))        | \
+                                (((std::uint32_t) ((std::uint8_t) (A)[2])) << 8)  | \
+                                (((std::uint32_t) ((std::uint8_t) (A)[1])) << 16) | \
+                                (((std::uint32_t) ((std::uint8_t) (A)[0])) << 24))
 
-#define int4net(A)  (int32_t)  (((boost::uint32_t) ((boost::uint8_t) (A)[3]))        | \
-                                (((boost::uint32_t) ((boost::uint8_t) (A)[2])) << 8)  | \
-                                (((boost::uint32_t) ((boost::uint8_t) (A)[1])) << 16) | \
-                                (((boost::uint32_t) ((boost::uint8_t) (A)[0])) << 24))
+#define int8net(A)  (int64_t)  (((std::uint64_t) ((std::uint8_t) (A)[7]))        | \
+                                (((std::uint64_t) ((std::uint8_t) (A)[6])) << 8)  | \
+                                (((std::uint64_t) ((std::uint8_t) (A)[5])) << 16) | \
+                                (((std::uint64_t) ((std::uint8_t) (A)[4])) << 24) | \
+                                (((std::uint64_t) ((std::uint8_t) (A)[3])) << 32) | \
+                                (((std::uint64_t) ((std::uint8_t) (A)[2])) << 40) | \
+                                (((std::uint64_t) ((std::uint8_t) (A)[1])) << 48) | \
+                                (((std::uint64_t) ((std::uint8_t) (A)[0])) << 56))
 
-#define int8net(A)  (int64_t)  (((boost::uint64_t) ((boost::uint8_t) (A)[7]))        | \
-                                (((boost::uint64_t) ((boost::uint8_t) (A)[6])) << 8)  | \
-                                (((boost::uint64_t) ((boost::uint8_t) (A)[5])) << 16) | \
-                                (((boost::uint64_t) ((boost::uint8_t) (A)[4])) << 24) | \
-                                (((boost::uint64_t) ((boost::uint8_t) (A)[3])) << 32) | \
-                                (((boost::uint64_t) ((boost::uint8_t) (A)[2])) << 40) | \
-                                (((boost::uint64_t) ((boost::uint8_t) (A)[1])) << 48) | \
-                                (((boost::uint64_t) ((boost::uint8_t) (A)[0])) << 56))
+using byte = std::uint8_t;
 
-typedef boost::uint8_t byte;
 #define float8net(V,M)   do { double def_temp;  \
-        ((byte*) &def_temp)[0]=(M)[7];          \
-        ((byte*) &def_temp)[1]=(M)[6];          \
-        ((byte*) &def_temp)[2]=(M)[5];          \
-        ((byte*) &def_temp)[3]=(M)[4];          \
-        ((byte*) &def_temp)[4]=(M)[3];          \
-        ((byte*) &def_temp)[5]=(M)[2];          \
-        ((byte*) &def_temp)[6]=(M)[1];          \
-        ((byte*) &def_temp)[7]=(M)[0];          \
+        ((std::uint8_t*) &def_temp)[0]=(M)[7];          \
+        ((std::uint8_t*) &def_temp)[1]=(M)[6];          \
+        ((std::uint8_t*) &def_temp)[2]=(M)[5];          \
+        ((std::uint8_t*) &def_temp)[3]=(M)[4];          \
+        ((std::uint8_t*) &def_temp)[4]=(M)[3];          \
+        ((std::uint8_t*) &def_temp)[5]=(M)[2];          \
+        ((std::uint8_t*) &def_temp)[6]=(M)[1];          \
+        ((std::uint8_t*) &def_temp)[7]=(M)[0];          \
         (V) = def_temp; } while(0)
 #define float4net(V,M)   do { float def_temp;   \
-        ((byte*) &def_temp)[0]=(M)[3];          \
-        ((byte*) &def_temp)[1]=(M)[2];          \
-        ((byte*) &def_temp)[2]=(M)[1];          \
-        ((byte*) &def_temp)[3]=(M)[0];          \
+        ((std::uint8_t*) &def_temp)[0]=(M)[3];          \
+        ((std::uint8_t*) &def_temp)[1]=(M)[2];          \
+        ((std::uint8_t*) &def_temp)[2]=(M)[1];          \
+        ((std::uint8_t*) &def_temp)[3]=(M)[0];          \
         (V)=def_temp; } while(0)
 
 
 // read int16_t NDR (little endian)
-inline void read_int16_ndr(const char* data, boost::int16_t & val)
+inline void read_int16_ndr(const char* data, std::int16_t & val)
 {
-#ifndef MAPNIK_BIG_ENDIAN
     std::memcpy(&val,data,2);
-#else
-    val = (data[0]&0xff) |
-        ((data[1]&0xff)<<8);
-#endif
 }
 
 // read int32_t NDR (little endian)
-inline void read_int32_ndr(const char* data, boost::int32_t & val)
+inline void read_int32_ndr(const char* data, std::int32_t & val)
 {
-#ifndef MAPNIK_BIG_ENDIAN
     std::memcpy(&val,data,4);
-#else
-    val = (data[0]&0xff)     |
-        ((data[1]&0xff)<<8)  |
-        ((data[2]&0xff)<<16) |
-        ((data[3]&0xff)<<24);
-#endif
 }
 
 // read double NDR (little endian)
 inline void read_double_ndr(const char* data, double & val)
 {
-#ifndef MAPNIK_BIG_ENDIAN
     std::memcpy(&val,&data[0],8);
-#else
-    boost::int64_t bits = ((boost::int64_t)data[0] & 0xff) |
-        ((boost::int64_t)data[1] & 0xff) << 8   |
-        ((boost::int64_t)data[2] & 0xff) << 16  |
-        ((boost::int64_t)data[3] & 0xff) << 24  |
-        ((boost::int64_t)data[4] & 0xff) << 32  |
-        ((boost::int64_t)data[5] & 0xff) << 40  |
-        ((boost::int64_t)data[6] & 0xff) << 48  |
-        ((boost::int64_t)data[7] & 0xff) << 56  ;
-    std::memcpy(&val,&bits,8);
-#endif
 }
 
 // read int16_t XDR (big endian)
-inline void read_int16_xdr(const char* data, boost::int16_t & val)
+inline void read_int16_xdr(const char* data, std::int16_t & val)
 {
-#ifndef MAPNIK_BIG_ENDIAN
-    val = (data[3]&0xff) | ((data[2]&0xff)<<8);
-#else
-    std::memcpy(&val,data,2);
-#endif
+    val = static_cast<std::int16_t>((data[3]&0xff) | ((data[2]&0xff)<<8));
 }
 
 // read int32_t XDR (big endian)
-inline void read_int32_xdr(const char* data, boost::int32_t & val)
+inline void read_int32_xdr(const char* data, std::int32_t & val)
 {
-#ifndef MAPNIK_BIG_ENDIAN
     val = (data[3]&0xff) | ((data[2]&0xff)<<8) | ((data[1]&0xff)<<16) | ((data[0]&0xff)<<24);
-#else
-    std::memcpy(&val,data,4);
-#endif
 }
 
 // read double XDR (big endian)
 inline void read_double_xdr(const char* data, double & val)
 {
-#ifndef MAPNIK_BIG_ENDIAN
-    boost::int64_t bits = ((boost::int64_t)data[7] & 0xff) |
-        ((boost::int64_t)data[6] & 0xff) << 8   |
-        ((boost::int64_t)data[5] & 0xff) << 16  |
-        ((boost::int64_t)data[4] & 0xff) << 24  |
-        ((boost::int64_t)data[3] & 0xff) << 32  |
-        ((boost::int64_t)data[2] & 0xff) << 40  |
-        ((boost::int64_t)data[1] & 0xff) << 48  |
-        ((boost::int64_t)data[0] & 0xff) << 56  ;
+    std::int64_t bits = ((std::int64_t)data[7] & 0xff) |
+        ((std::int64_t)data[6] & 0xff) << 8   |
+        ((std::int64_t)data[5] & 0xff) << 16  |
+        ((std::int64_t)data[4] & 0xff) << 24  |
+        ((std::int64_t)data[3] & 0xff) << 32  |
+        ((std::int64_t)data[2] & 0xff) << 40  |
+        ((std::int64_t)data[1] & 0xff) << 48  |
+        ((std::int64_t)data[0] & 0xff) << 56  ;
     std::memcpy(&val,&bits,8);
-#else
-    std::memcpy(&val,&data[0],8);
-#endif
 }
 
-#ifdef _WINDOWS
+#if defined(_MSC_VER) && _MSC_VER < 1800
 // msvc doesn't have rint in <cmath>
 inline int rint(double val)
 {
@@ -165,7 +123,9 @@ inline double round(double val)
 {
     return std::floor(val);
 }
+#endif
 
+#if defined(_MSC_VER)
 #define  _USE_MATH_DEFINES
 #ifndef M_PI
 #define M_PI 3.14159265358979323846
diff --git a/include/mapnik/gradient.hpp b/include/mapnik/gradient.hpp
index 37d44a2..41493ca 100644
--- a/include/mapnik/gradient.hpp
+++ b/include/mapnik/gradient.hpp
@@ -36,8 +36,8 @@
 namespace mapnik
 {
 
-typedef std::pair<double, mapnik::color> stop_pair;
-typedef std::vector<stop_pair > stop_array;
+using stop_pair = std::pair<double, mapnik::color>;
+using stop_array = std::vector<stop_pair >;
 
 enum gradient_enum
 {
diff --git a/include/mapnik/graphics.hpp b/include/mapnik/graphics.hpp
index dff2cbe..b15d9f4 100644
--- a/include/mapnik/graphics.hpp
+++ b/include/mapnik/graphics.hpp
@@ -24,6 +24,7 @@
 #define MAPNIK_GRAPHICS_HPP
 
 // mapnik
+#include <mapnik/config.hpp>
 #include <mapnik/color.hpp>
 #include <mapnik/image_data.hpp>
 #include <mapnik/box2d.hpp>
@@ -31,21 +32,21 @@
 #include <mapnik/global.hpp>
 
 // stl
-#include <cmath>
+#include <algorithm>
 #include <string>
-#include <cassert>
-
-// cairo
-#ifdef HAVE_CAIRO
-#include <mapnik/cairo_context.hpp>
-#endif
+#include <memory>
 
 // boost
 #include <boost/optional/optional.hpp>
 
+struct _cairo_surface;
+typedef struct _cairo_surface cairo_surface_t;
+
 namespace mapnik
 {
 
+using cairo_surface_ptr = std::shared_ptr<cairo_surface_t>;
+
 class MAPNIK_DECL image_32
 {
 private:
@@ -54,6 +55,7 @@ private:
     boost::optional<color> background_;
     image_data_32 data_;
     bool painted_;
+    bool premultiplied_;
 public:
     image_32(int width,int height);
     image_32(image_32 const& rhs);
@@ -72,9 +74,14 @@ public:
         return painted_;
     }
 
+    bool premultiplied() const
+    {
+        return premultiplied_;
+    }
+
     inline void clear()
     {
-        std::memset(data_.getData(),0,sizeof(mapnik::image_data_32::pixel_type)*data_.width()*data_.height());
+        std::fill(data_.getData(), data_.getData() + data_.width() * data_.height(), 0);
     }
 
     boost::optional<color> const& get_background() const;
@@ -131,59 +138,6 @@ public:
             data_(x,y)=rgba;
         }
     }
-    inline void blendPixel(int x,int y,unsigned int rgba1,int t)
-    {
-        blendPixel2(x,y,rgba1,t,1.0);  // do not change opacity
-    }
-
-    inline void blendPixel2(int x,int y,unsigned int rgba1,int t,double opacity)
-    {
-        if (checkBounds(x,y))
-        {
-            unsigned rgba0 = data_(x,y);
-#ifdef MAPNIK_BIG_ENDIAN
-            unsigned a1 = (unsigned)((rgba1 & 0xff) * opacity) & 0xff; // adjust for desired opacity
-            a1 = (t*a1) / 255;
-            if (a1 == 0) return;
-            unsigned r1 = (rgba1 >> 24) & 0xff;
-            unsigned g1 = (rgba1 >> 16 ) & 0xff;
-            unsigned b1 = (rgba1 >> 8) & 0xff;
-
-            unsigned a0 = (rgba0 & 0xff);
-            unsigned r0 = ((rgba0 >> 24 ) & 0xff) * a0;
-            unsigned g0 = ((rgba0 >> 16 ) & 0xff) * a0;
-            unsigned b0 = ((rgba0 >> 8) & 0xff) * a0;
-
-            a0 = ((a1 + a0) << 8) - a0*a1;
-
-            r0 = ((((r1 << 8) - r0) * a1 + (r0 << 8)) / a0);
-            g0 = ((((g1 << 8) - g0) * a1 + (g0 << 8)) / a0);
-            b0 = ((((b1 << 8) - b0) * a1 + (b0 << 8)) / a0);
-            a0 = a0 >> 8;
-            data_(x,y)= (a0)| (b0 << 8) |  (g0 << 16) | (r0 << 24) ;
-#else
-            unsigned a1 = (unsigned)(((rgba1 >> 24) & 0xff) * opacity) & 0xff; // adjust for desired opacity
-            a1 = (t*a1) / 255;
-            if (a1 == 0) return;
-            unsigned r1 = rgba1 & 0xff;
-            unsigned g1 = (rgba1 >> 8 ) & 0xff;
-            unsigned b1 = (rgba1 >> 16) & 0xff;
-
-            unsigned a0 = (rgba0 >> 24) & 0xff;
-            unsigned r0 = (rgba0 & 0xff) * a0;
-            unsigned g0 = ((rgba0 >> 8 ) & 0xff) * a0;
-            unsigned b0 = ((rgba0 >> 16) & 0xff) * a0;
-
-            a0 = ((a1 + a0) << 8) - a0*a1;
-
-            r0 = ((((r1 << 8) - r0) * a1 + (r0 << 8)) / a0);
-            g0 = ((((g1 << 8) - g0) * a1 + (g0 << 8)) / a0);
-            b0 = ((((b1 << 8) - b0) * a1 + (b0 << 8)) / a0);
-            a0 = a0 >> 8;
-            data_(x,y)= (a0 << 24)| (b0 << 16) |  (g0 << 8) | (r0) ;
-#endif
-        }
-    }
 
     void composite_pixel(unsigned op, int x,int y,unsigned c, unsigned cover, double opacity);
 
@@ -212,14 +166,10 @@ public:
 
                 for (int x = box.minx(); x < box.maxx(); ++x)
                 {
-#ifdef MAPNIK_BIG_ENDIAN
-                    row_to[x] = row_from[x-x0];
-#else
                     if (row_from[x-x0] & 0xff000000)
                     {
                         row_to[x] = row_from[x-x0];
                     }
-#endif
                 }
             }
         }
@@ -241,32 +191,6 @@ public:
                 {
                     unsigned rgba0 = row_to[x];
                     unsigned rgba1 = row_from[x-x0];
-
-#ifdef MAPNIK_BIG_ENDIAN
-                    unsigned a1 = rgba1 & 0xff;
-                    if (a1 == 0) continue;
-                    if (a1 == 0xff)
-                    {
-                        row_to[x] = rgba1;
-                        continue;
-                    }
-                    unsigned r1 = (rgba1 >> 24) & 0xff;
-                    unsigned g1 = (rgba1 >> 16 ) & 0xff;
-                    unsigned b1 = (rgba1 >> 8) & 0xff;
-
-                    unsigned a0 = rgba0 & 0xff;
-                    unsigned r0 = ((rgba0 >> 24) & 0xff) * a0;
-                    unsigned g0 = ((rgba0 >> 16 ) & 0xff) * a0;
-                    unsigned b0 = ((rgba0 >> 8) & 0xff) * a0;
-
-                    a0 = ((a1 + a0) << 8) - a0*a1;
-
-                    r0 = ((((r1 << 8) - r0) * a1 + (r0 << 8)) / a0);
-                    g0 = ((((g1 << 8) - g0) * a1 + (g0 << 8)) / a0);
-                    b0 = ((((b1 << 8) - b0) * a1 + (b0 << 8)) / a0);
-                    a0 = a0 >> 8;
-                    row_to[x] = (a0) | (b0 << 8) |  (g0 << 16) | (r0 << 24) ;
-#else
                     unsigned a1 = (rgba1 >> 24) & 0xff;
                     if (a1 == 0) continue;
                     if (a1 == 0xff)
@@ -290,7 +214,6 @@ public:
                     b0 = ((((b1 << 8) - b0) * a1 + (b0 << 8)) / a0);
                     a0 = a0 >> 8;
                     row_to[x] = (a0 << 24)| (b0 << 16) |  (g0 << 8) | (r0) ;
-#endif
                 }
             }
         }
@@ -312,34 +235,6 @@ public:
                 {
                     unsigned rgba0 = row_to[x];
                     unsigned rgba1 = row_from[x-x0];
-#ifdef MAPNIK_BIG_ENDIAN
-                    unsigned a1 = int( (rgba1 & 0xff) * opacity );
-                    if (a1 == 0) continue;
-                    if (a1 == 0xff)
-                    {
-                        row_to[x] = rgba1;
-                        continue;
-                    }
-                    unsigned r1 = (rgba1 >> 24) & 0xff;
-                    unsigned g1 = (rgba1 >> 16 ) & 0xff;
-                    unsigned b1 = (rgba1 >> 8) & 0xff;
-
-                    unsigned a0 = rgba0 & 0xff;
-                    unsigned r0 = (rgba0 >> 24) & 0xff ;
-                    unsigned g0 = (rgba0 >> 16 ) & 0xff;
-                    unsigned b0 = (rgba0 >> 8) & 0xff;
-
-                    unsigned atmp = a1 + a0 - ((a1 * a0 + 255) >> 8);
-                    if (atmp)
-                    {
-                        r0 = byte((r1 * a1 + (r0 * a0) - ((r0 * a0 * a1 + 255) >> 8)) / atmp);
-                        g0 = byte((g1 * a1 + (g0 * a0) - ((g0 * a0 * a1 + 255) >> 8)) / atmp);
-                        b0 = byte((b1 * a1 + (b0 * a0) - ((b0 * a0 * a1 + 255) >> 8)) / atmp);
-                    }
-                    a0 = byte(atmp);
-
-                    row_to[x] = (a0)| (b0 << 8) |  (g0 << 16) | (r0 << 24) ;
-#else
                     unsigned a1 = int( ((rgba1 >> 24) & 0xff) * opacity );
                     if (a1 == 0) continue;
                     if (a1 == 0xff)
@@ -366,7 +261,6 @@ public:
                     a0 = byte(atmp);
 
                     row_to[x] = (a0 << 24)| (b0 << 16) |  (g0 << 8) | (r0) ;
-#endif
                 }
             }
         }
@@ -389,28 +283,6 @@ public:
                 {
                     unsigned rgba0 = row_to[x];
                     unsigned rgba1 = row_from[x-x0];
-#ifdef MAPNIK_BIG_ENDIAN
-                    unsigned a1 = int( (rgba1 & 0xff) * opacity );
-                    if (a1 == 0) continue;
-                    unsigned r1 = (rgba1 >> 24)& 0xff;
-                    unsigned g1 = (rgba1 >> 16 ) & 0xff;
-                    unsigned b1 = (rgba1 >> 8) & 0xff;
-
-                    unsigned a0 = rgba0 & 0xff;
-                    unsigned r0 = (rgba0 >> 24) & 0xff ;
-                    unsigned g0 = (rgba0 >> 16 ) & 0xff;
-                    unsigned b0 = (rgba0 >> 8) & 0xff;
-
-                    unsigned a = (a1 * 255 + (255 - a1) * a0 + 127)/255;
-
-                    MergeMethod::mergeRGB(r0,g0,b0,r1,g1,b1);
-
-                    r0 = (r1*a1 + (((255 - a1) * a0 + 127)/255) * r0 + 127)/a;
-                    g0 = (g1*a1 + (((255 - a1) * a0 + 127)/255) * g0 + 127)/a;
-                    b0 = (b1*a1 + (((255 - a1) * a0 + 127)/255) * b0 + 127)/a;
-
-                    row_to[x] = (a)| (b0 << 8) |  (g0 << 16) | (r0 << 24) ;
-#else
                     unsigned a1 = int( ((rgba1 >> 24) & 0xff) * opacity );
                     if (a1 == 0) continue;
                     unsigned r1 = rgba1 & 0xff;
@@ -431,7 +303,6 @@ public:
                     b0 = (b1*a1 + (((255 - a1) * a0 + 127)/255) * b0 + 127)/a;
 
                     row_to[x] = (a << 24)| (b0 << 16) |  (g0 << 8) | (r0) ;
-#endif
                 }
             }
         }
diff --git a/include/mapnik/grid/grid.hpp b/include/mapnik/grid/grid.hpp
index bdbceae..9267303 100644
--- a/include/mapnik/grid/grid.hpp
+++ b/include/mapnik/grid/grid.hpp
@@ -34,15 +34,12 @@
 #include <mapnik/feature_factory.hpp>
 #include <mapnik/util/conversions.hpp>
 
-// boost
-#include <boost/cstdint.hpp>
-
 // stl
+#include <cstdint>
 #include <map>
 #include <set>
 #include <cmath>
 #include <string>
-#include <cassert>
 #include <vector>
 
 namespace mapnik
@@ -52,12 +49,12 @@ template <typename T>
 class MAPNIK_DECL hit_grid
 {
 public:
-    typedef T value_type;
-    typedef mapnik::ImageData<value_type> data_type;
-    typedef std::string lookup_type;
+    using value_type = T;
+    using data_type = mapnik::image_data<value_type>;
+    using lookup_type = std::string;
     // mapping between pixel id and key
-    typedef std::map<value_type, lookup_type> feature_key_type;
-    typedef std::map<lookup_type, mapnik::feature_ptr> feature_type;
+    using feature_key_type = std::map<value_type, lookup_type>;
+    using feature_type = std::map<lookup_type, mapnik::feature_ptr>;
     static const value_type base_mask;
 
 private:
@@ -83,9 +80,9 @@ public:
 
     void clear();
 
-    inline void painted(bool painted)
+    inline void painted(bool is_painted)
     {
-        painted_ = painted;
+        painted_ = is_painted;
     }
 
     inline bool painted() const
@@ -98,7 +95,7 @@ public:
         return id_name_;
     }
 
-    void add_feature(mapnik::feature_impl & feature);
+    void add_feature(mapnik::feature_impl const& feature);
 
     inline void add_property_name(std::string const& name)
     {
@@ -198,30 +195,6 @@ public:
         return height_;
     }
 
-    inline void blendPixel(value_type feature_id,int x,int y,unsigned int rgba1,int t)
-    {
-        blendPixel2(feature_id ,x,y,rgba1,t,1.0);  // do not change opacity
-    }
-
-    inline void blendPixel2(value_type feature_id,int x,int y,unsigned int rgba1,int t,double opacity)
-    {
-        if (checkBounds(x,y))
-        {
-
-#ifdef MAPNIK_BIG_ENDIAN
-            unsigned a = (int)((rgba1 & 0xff) * opacity) & 0xff; // adjust for desired opacity
-#else
-            unsigned a = (int)(((rgba1 >> 24) & 0xff) * opacity) & 0xff; // adjust for desired opacity
-#endif
-            // if the pixel is more than a tenth
-            // opaque then burn in the feature id
-            if (a >= 25)
-            {
-                data_(x,y) = feature_id;
-            }
-        }
-    }
-
     inline void set_rectangle(value_type id,image_data_32 const& data,int x0,int y0)
     {
         box2d<int> ext0(0,0,width_,height_);
@@ -238,11 +211,7 @@ public:
                 for (int x = box.minx(); x < box.maxx(); ++x)
                 {
                     unsigned rgba = row_from[x-x0];
-#ifdef MAPNIK_BIG_ENDIAN
-                    unsigned a = rgba & 0xff;
-#else
                     unsigned a = (rgba >> 24) & 0xff;
-#endif
                     // if the pixel is more than a tenth
                     // opaque then burn in the feature id
                     if (a >= 25)
@@ -256,7 +225,7 @@ public:
 
 };
 
-typedef hit_grid<mapnik::value_integer> grid;
+using grid = hit_grid<mapnik::value_integer>;
 
 }
 #endif //MAPNIK_GRID_HPP
diff --git a/include/mapnik/grid/grid_marker_helpers.hpp b/include/mapnik/grid/grid_marker_helpers.hpp
index f20c1d9..595b704 100644
--- a/include/mapnik/grid/grid_marker_helpers.hpp
+++ b/include/mapnik/grid/grid_marker_helpers.hpp
@@ -24,7 +24,7 @@
 #define MAPNIK_GRID_MARKER_HELPERS_HPP
 
 // mapnik
-#include <mapnik/markers_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/markers_placement.hpp>
 #include <mapnik/geometry.hpp>
 #include <mapnik/geom_util.hpp>
@@ -41,105 +41,70 @@
 
 namespace mapnik {
 
-template <typename BufferType, typename Rasterizer, typename PixFmt, typename RendererBase, typename RendererType, typename Detector, typename PixMapType>
-struct raster_markers_rasterizer_dispatch_grid
+template <typename RendererBase, typename RendererType, typename Detector, typename RendererContext>
+struct raster_markers_rasterizer_dispatch_grid : mapnik::noncopyable
 {
-    typedef typename RendererBase::pixfmt_type pixfmt_type;
-    typedef typename RendererBase::pixfmt_type::color_type color_type;
-
-    raster_markers_rasterizer_dispatch_grid(BufferType & render_buffer,
-                                       Rasterizer & ras,
-                                       image_data_32 const& src,
-                                       agg::trans_affine const& marker_trans,
-                                       markers_symbolizer const& sym,
-                                       Detector & detector,
-                                       double scale_factor,
-                                       mapnik::feature_impl & feature,
-                                       PixMapType & pixmap)
-        : buf_(render_buffer),
+    using pixfmt_type = typename RendererBase::pixfmt_type;
+    using color_type = typename RendererBase::pixfmt_type::color_type;
+
+    using BufferType = typename std::tuple_element<0,RendererContext>::type;
+    using RasterizerType = typename std::tuple_element<1,RendererContext>::type;
+    using PixMapType = typename std::tuple_element<2,RendererContext>::type;
+
+    raster_markers_rasterizer_dispatch_grid(image_data_32 const& src,
+                                            agg::trans_affine const& marker_trans,
+                                            markers_symbolizer const& sym,
+                                            Detector & detector,
+                                            double scale_factor,
+                                            mapnik::feature_impl const& feature,
+                                            attributes const& vars,
+                                            RendererContext const& renderer_context)
+    : buf_(std::get<0>(renderer_context)),
         pixf_(buf_),
         renb_(pixf_),
-        ras_(ras),
+        ras_(std::get<1>(renderer_context)),
         src_(src),
         marker_trans_(marker_trans),
         sym_(sym),
         detector_(detector),
         scale_factor_(scale_factor),
         feature_(feature),
-        pixmap_(pixmap),
-        placed_(false)
-    {
-        // TODO - support basic binary operators
-        //pixf_.comp_op(static_cast<agg::comp_op_e>(sym_.comp_op()));
-    }
+        vars_(vars),
+        pixmap_(std::get<2>(renderer_context)),
+        placed_(false) {}
 
     template <typename T>
     void add_path(T & path)
     {
-        marker_placement_e placement_method = sym_.get_marker_placement();
-        box2d<double> bbox_(0,0, src_.width(),src_.height());
-        if (placement_method != MARKER_LINE_PLACEMENT ||
-            path.type() == Point)
+        agg::scanline_bin sl_;
+        marker_placement_enum placement_method = get<marker_placement_enum>(sym_, keys::markers_placement_type, feature_, vars_, MARKER_POINT_PLACEMENT);
+        bool ignore_placement = get<bool>(sym_, keys::ignore_placement, feature_, vars_, false);
+        bool allow_overlap = get<bool>(sym_, keys::allow_overlap, feature_, vars_, false);
+        bool avoid_edges = get<bool>(sym_, keys::avoid_edges, feature_, vars_, false);
+        box2d<double> bbox(0,0, src_.width(), src_.height());
+        double spacing = get<double>(sym_, keys::spacing, feature_, vars_, 100.0);
+        double max_error = get<double>(sym_, keys::max_error, feature_, vars_, 0.2);
+        markers_placement_params params { bbox, marker_trans_, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
+        markers_placement_finder<T, label_collision_detector4> placement_finder(
+            placement_method, path, detector_, params);
+        double x, y, angle = .0;
+        while (placement_finder.get_point(x, y, angle, ignore_placement))
         {
-            double x = 0;
-            double y = 0;
-            if (path.type() == LineString)
-            {
-                if (!label::middle_point(path, x, y))
-                    return;
-            }
-            else if (placement_method == MARKER_INTERIOR_PLACEMENT)
-            {
-                if (!label::interior_position(path, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::centroid(path, x, y))
-                    return;
-            }
             agg::trans_affine matrix = marker_trans_;
-            matrix.translate(x,y);
-            box2d<double> transformed_bbox = bbox_ * matrix;
-            if (sym_.get_allow_overlap() ||
-                detector_.has_placement(transformed_bbox))
+            matrix.rotate(angle);
+            matrix.translate(x, y);
+            render_raster_marker(matrix);
+            if (!placed_)
             {
-                render_raster_marker(matrix);
-                if (!sym_.get_ignore_placement())
-                {
-                    detector_.insert(transformed_bbox);
-                }
-                if (!placed_)
-                {
-                    pixmap_.add_feature(feature_);
-                    placed_ = true;
-                }
-            }
-        }
-        else
-        {
-            markers_placement<T, label_collision_detector4> placement(path, bbox_, marker_trans_, detector_,
-                                                                      sym_.get_spacing() * scale_factor_,
-                                                                      sym_.get_max_error(),
-                                                                      sym_.get_allow_overlap());
-            double x, y, angle;
-            while (placement.get_point(x, y, angle))
-            {
-                agg::trans_affine matrix = marker_trans_;
-                matrix.rotate(angle);
-                matrix.translate(x, y);
-                render_raster_marker(matrix);
-                if (!placed_)
-                {
-                    pixmap_.add_feature(feature_);
-                    placed_ = true;
-                }
+                pixmap_.add_feature(feature_);
+                placed_ = true;
             }
         }
     }
 
     void render_raster_marker(agg::trans_affine const& marker_tr)
     {
+        agg::scanline_bin sl_;
         double width  = src_.width();
         double height = src_.height();
         double p[8];
@@ -161,137 +126,111 @@ struct raster_markers_rasterizer_dispatch_grid
     }
 
 private:
-    agg::scanline_bin sl_;
     BufferType & buf_;
-    PixFmt pixf_;
+    pixfmt_type pixf_;
     RendererBase renb_;
-    Rasterizer & ras_;
+    RasterizerType & ras_;
     image_data_32 const& src_;
     agg::trans_affine const& marker_trans_;
     markers_symbolizer const& sym_;
     Detector & detector_;
     double scale_factor_;
-    mapnik::feature_impl & feature_;
+    mapnik::feature_impl const& feature_;
+    attributes const& vars_;
     PixMapType & pixmap_;
     bool placed_;
 };
 
 
-template <typename BufferType, typename SvgRenderer, typename Rasterizer, typename Detector, typename PixMapType>
-struct vector_markers_rasterizer_dispatch_grid
+template <typename SvgRenderer, typename Detector, typename RendererContext>
+struct vector_markers_rasterizer_dispatch_grid : mapnik::noncopyable
 {
-    typedef typename SvgRenderer::renderer_base renderer_base;
-    typedef typename renderer_base::pixfmt_type pixfmt_type;
-
-    vector_markers_rasterizer_dispatch_grid(BufferType & render_buffer,
-                                SvgRenderer & svg_renderer,
-                                Rasterizer & ras,
-                                box2d<double> const& bbox,
-                                agg::trans_affine const& marker_trans,
-                                markers_symbolizer const& sym,
-                                Detector & detector,
-                                double scale_factor,
-                                mapnik::feature_impl & feature,
-                                PixMapType & pixmap)
-        : buf_(render_buffer),
+    using renderer_base = typename SvgRenderer::renderer_base        ;
+    using vertex_source_type = typename SvgRenderer::vertex_source_type   ;
+    using attribute_source_type = typename SvgRenderer::attribute_source_type;
+    using pixfmt_type = typename renderer_base::pixfmt_type        ;
+
+    using BufferType = typename std::tuple_element<0,RendererContext>::type;
+    using RasterizerType = typename std::tuple_element<1,RendererContext>::type;
+    using PixMapType = typename std::tuple_element<2,RendererContext>::type;
+
+    vector_markers_rasterizer_dispatch_grid(vertex_source_type & path,
+                                            attribute_source_type const& attrs,
+                                            box2d<double> const& bbox,
+                                            agg::trans_affine const& marker_trans,
+                                            markers_symbolizer const& sym,
+                                            Detector & detector,
+                                            double scale_factor,
+                                            mapnik::feature_impl const& feature,
+                                            attributes const& vars,
+                                            bool /*snap_to_pixels*/,
+                                            RendererContext const& renderer_context)
+    : buf_(std::get<0>(renderer_context)),
         pixf_(buf_),
         renb_(pixf_),
-        svg_renderer_(svg_renderer),
-        ras_(ras),
+        svg_renderer_(path, attrs),
+        ras_(std::get<1>(renderer_context)),
         bbox_(bbox),
         marker_trans_(marker_trans),
         sym_(sym),
         detector_(detector),
         scale_factor_(scale_factor),
         feature_(feature),
-        pixmap_(pixmap),
+        vars_(vars),
+        pixmap_(std::get<2>(renderer_context)),
         placed_(false)
     {
-        // TODO
-        //pixf_.comp_op(static_cast<agg::comp_op_e>(sym_.comp_op()));
     }
 
     template <typename T>
     void add_path(T & path)
     {
-        marker_placement_e placement_method = sym_.get_marker_placement();
-        if (placement_method != MARKER_LINE_PLACEMENT ||
-            path.type() == Point)
+        agg::scanline_bin sl_;
+        marker_placement_enum placement_method =
+            get<marker_placement_enum>(sym_, keys::markers_placement_type, feature_, vars_, MARKER_POINT_PLACEMENT);
+        bool ignore_placement = get<bool>(sym_, keys::ignore_placement, feature_, vars_, false);
+        double opacity = get<double>(sym_,keys::opacity, feature_, vars_, 1.0);
+        bool allow_overlap = get<bool>(sym_, keys::allow_overlap, feature_, vars_, false);
+        bool avoid_edges = get<bool>(sym_, keys::avoid_edges, feature_, vars_, false);
+        double spacing = get<double>(sym_, keys::spacing, feature_, vars_, 100.0);
+        double max_error = get<double>(sym_, keys::max_error, feature_, vars_, 0.2);
+        coord2d center = bbox_.center();
+        agg::trans_affine_translation recenter(-center.x, -center.y);
+        agg::trans_affine tr = recenter * marker_trans_;
+        markers_placement_params params { bbox_, tr, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
+        markers_placement_finder<T, Detector> placement_finder(
+            placement_method, path, detector_, params);
+        double x, y, angle = .0;
+        while (placement_finder.get_point(x, y, angle, ignore_placement))
         {
-            double x = 0;
-            double y = 0;
-            if (path.type() == LineString)
-            {
-                if (!label::middle_point(path, x, y))
-                    return;
-            }
-            else if (placement_method == MARKER_INTERIOR_PLACEMENT)
-            {
-                if (!label::interior_position(path, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::centroid(path, x, y))
-                    return;
-            }
-            agg::trans_affine matrix = marker_trans_;
-            matrix.translate(x,y);
-            box2d<double> transformed_bbox = bbox_ * matrix;
-            if (sym_.get_allow_overlap() ||
-                detector_.has_placement(transformed_bbox))
+            agg::trans_affine matrix = tr;
+            matrix.rotate(angle);
+            matrix.translate(x, y);
+            svg_renderer_.render_id(ras_, sl_, renb_, feature_.id(), matrix, opacity, bbox_);
+            if (!placed_)
             {
-                svg_renderer_.render_id(ras_, sl_, renb_, feature_.id(), matrix, sym_.get_opacity(), bbox_);
-                if (!sym_.get_ignore_placement())
-                {
-                    detector_.insert(transformed_bbox);
-                }
-                if (!placed_)
-                {
-                    pixmap_.add_feature(feature_);
-                    placed_ = true;
-                }
-            }
-        }
-        else
-        {
-            markers_placement<T, Detector> placement(path, bbox_, marker_trans_, detector_,
-                                                     sym_.get_spacing() * scale_factor_,
-                                                     sym_.get_max_error(),
-                                                     sym_.get_allow_overlap());
-            double x, y, angle;
-            while (placement.get_point(x, y, angle))
-            {
-                agg::trans_affine matrix = marker_trans_;
-                matrix.rotate(angle);
-                matrix.translate(x, y);
-                svg_renderer_.render_id(ras_, sl_, renb_, feature_.id(), matrix, sym_.get_opacity(), bbox_);
-                if (!placed_)
-                {
-                    pixmap_.add_feature(feature_);
-                    placed_ = true;
-                }
+                pixmap_.add_feature(feature_);
+                placed_ = true;
             }
         }
     }
+
 private:
-    agg::scanline_bin sl_;
     BufferType & buf_;
     pixfmt_type pixf_;
     renderer_base renb_;
-    SvgRenderer & svg_renderer_;
-    Rasterizer & ras_;
+    SvgRenderer svg_renderer_;
+    RasterizerType & ras_;
     box2d<double> const& bbox_;
     agg::trans_affine const& marker_trans_;
     markers_symbolizer const& sym_;
     Detector & detector_;
     double scale_factor_;
-    mapnik::feature_impl & feature_;
+    mapnik::feature_impl const& feature_;
+    attributes const& vars_;
     PixMapType & pixmap_;
     bool placed_;
 };
 
-
 }
 #endif
-
diff --git a/include/mapnik/grid/grid_pixel.hpp b/include/mapnik/grid/grid_pixel.hpp
index e8d5483..88bf28b 100644
--- a/include/mapnik/grid/grid_pixel.hpp
+++ b/include/mapnik/grid/grid_pixel.hpp
@@ -31,16 +31,16 @@ namespace mapnik
 //==================================================================gray16
 struct gray16
 {
-    typedef agg::int16u value_type;
-    typedef agg::int32u calc_type;
-    typedef agg::int64  long_type;
+    using value_type = agg::int16u;
+    using calc_type = agg::int32u;
+    using long_type = agg::int64 ;
     enum base_scale_e
     {
         base_shift = 16,
         base_scale = 1 << base_shift,
         base_mask  = base_scale - 1
     };
-    typedef gray16 self_type;
+    using self_type = gray16;
 
     value_type v;
     value_type a;
@@ -69,20 +69,6 @@ struct gray16
         return *this;
     }
 
-    //--------------------------------------------------------------------
-    void opacity(double a_)
-    {
-        if(a_ < 0.0) a_ = 0.0;
-        if(a_ > 1.0) a_ = 1.0;
-        a = (value_type)agg::uround(a_ * double(base_mask));
-    }
-
-    //--------------------------------------------------------------------
-    double opacity() const
-    {
-        return double(a) / double(base_mask);
-    }
-
 
     //--------------------------------------------------------------------
     const self_type& premultiply()
@@ -168,9 +154,9 @@ struct gray16
 //==================================================================gray32
 struct gray32
 {
-    typedef agg::int32 value_type;
-    typedef agg::int64u calc_type;
-    typedef agg::int64  long_type;
+    using value_type = agg::int32;
+    using calc_type = agg::int64u;
+    using long_type = agg::int64 ;
     // NOTE: don't touch this enum since enums cannot be
     // 64 bit and we need to ensure that alpha = base_mask
     // in grid_pixfmt.hpp#blend_hiline#l256
@@ -182,7 +168,7 @@ struct gray32
         base_scale = 1 << base_shift,
         base_mask  = base_scale - 1
     };
-    typedef gray32 self_type;
+    using self_type = gray32;
 
     value_type v;
     value_type a;
@@ -211,20 +197,6 @@ struct gray32
         return *this;
     }
 
-    //--------------------------------------------------------------------
-    void opacity(double a_)
-    {
-        if(a_ < 0.0) a_ = 0.0;
-        if(a_ > 1.0) a_ = 1.0;
-        a = (value_type)agg::uround(a_ * double(base_mask));
-    }
-
-    //--------------------------------------------------------------------
-    double opacity() const
-    {
-        return double(a) / double(base_mask);
-    }
-
 
     //--------------------------------------------------------------------
     const self_type& premultiply()
@@ -310,9 +282,9 @@ struct gray32
 //==================================================================gray64
 struct gray64
 {
-    typedef agg::int64 value_type;
-    typedef agg::int64u calc_type;
-    typedef agg::int64  long_type;
+    using value_type = agg::int64;
+    using calc_type = agg::int64u;
+    using long_type = agg::int64 ;
     // NOTE: don't touch this enum since enums cannot be
     // 64 bit and we need to ensure that alpha = base_mask
     // in grid_pixfmt.hpp#blend_hiline#l256
@@ -324,7 +296,7 @@ struct gray64
         base_scale = 1 << base_shift,
         base_mask  = base_scale - 1
     };
-    typedef gray64 self_type;
+    using self_type = gray64;
 
     value_type v;
     value_type a;
@@ -353,20 +325,6 @@ struct gray64
         return *this;
     }
 
-    //--------------------------------------------------------------------
-    void opacity(double a_)
-    {
-        if(a_ < 0.0) a_ = 0.0;
-        if(a_ > 1.0) a_ = 1.0;
-        a = (value_type)agg::uround(a_ * double(base_mask));
-    }
-
-    //--------------------------------------------------------------------
-    double opacity() const
-    {
-        return double(a) / double(base_mask);
-    }
-
 
     //--------------------------------------------------------------------
     const self_type& premultiply()
diff --git a/include/mapnik/grid/grid_pixfmt.hpp b/include/mapnik/grid/grid_pixfmt.hpp
index 30c43fc..e3cfb3b 100644
--- a/include/mapnik/grid/grid_pixfmt.hpp
+++ b/include/mapnik/grid/grid_pixfmt.hpp
@@ -34,13 +34,13 @@ namespace mapnik
 //============================================================blender_gray
 template<class ColorT> struct blender_gray
 {
-    typedef ColorT color_type;
-    typedef typename color_type::value_type value_type;
-    typedef typename color_type::calc_type calc_type;
+    using color_type = ColorT;
+    using value_type = typename color_type::value_type;
+    using calc_type = typename color_type::calc_type;
     enum base_scale_e { base_shift = color_type::base_shift };
 
     static AGG_INLINE void blend_pix(value_type* p, unsigned cv,
-                                     unsigned alpha, unsigned cover=0)
+                                     unsigned alpha, unsigned /*cover*/=0)
     {
         *p = (value_type)((((cv - calc_type(*p)) * alpha) + (calc_type(*p) << base_shift)) >> base_shift);
     }
@@ -52,7 +52,7 @@ template<class ColorT> struct blender_gray
 template<class ColorT, class GammaLut> class apply_gamma_dir_gray
 {
 public:
-    typedef typename ColorT::value_type value_type;
+    using value_type = typename ColorT::value_type;
 
     apply_gamma_dir_gray(const GammaLut& gamma) : m_gamma(gamma) {}
 
@@ -71,7 +71,7 @@ private:
 template<class ColorT, class GammaLut> class apply_gamma_inv_gray
 {
 public:
-    typedef typename ColorT::value_type value_type;
+    using value_type = typename ColorT::value_type;
 
     apply_gamma_inv_gray(const GammaLut& gamma) : m_gamma(gamma) {}
 
@@ -91,13 +91,13 @@ template<class Blender, class RenBuf, unsigned Step=1, unsigned Offset=0>
 class pixfmt_alpha_blend_gray
 {
 public:
-    typedef RenBuf   rbuf_type;
-    typedef typename rbuf_type::row_data row_data;
-    typedef Blender  blender_type;
-    typedef typename blender_type::color_type color_type;
-    typedef int                               order_type; // A fake one
-    typedef typename color_type::value_type   value_type;
-    typedef typename color_type::calc_type    calc_type;
+    using rbuf_type = RenBuf  ;
+    using row_data = typename rbuf_type::row_data;
+    using blender_type = Blender ;
+    using color_type = typename blender_type::color_type;
+    using order_type = int                              ; // A fake one
+    using value_type = typename color_type::value_type  ;
+    using calc_type = typename color_type::calc_type   ;
     enum base_scale_e
     {
         base_shift = color_type::base_shift,
@@ -256,7 +256,7 @@ public:
     void blend_hline(int x, int y,
                      unsigned len,
                      const color_type& c,
-                     agg::int8u cover)
+                     agg::int8u /*cover*/)
     {
         value_type* p = (value_type*)
             m_rbuf->row_ptr(x, y, len) + x * Step + Offset;
@@ -588,11 +588,11 @@ public:
     void blend_from_color(const SrcPixelFormatRenderer& from,
                           const color_type& color,
                           int xdst, int ydst,
-                          int xsrc, int ysrc,
+                          int /*xsrc*/, int ysrc,
                           unsigned len,
                           agg::int8u cover)
     {
-        typedef typename SrcPixelFormatRenderer::value_type src_value_type;
+        using src_value_type = typename SrcPixelFormatRenderer::value_type;
         const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
         if(psrc)
         {
@@ -615,11 +615,11 @@ public:
     void blend_from_lut(const SrcPixelFormatRenderer& from,
                         const color_type* color_lut,
                         int xdst, int ydst,
-                        int xsrc, int ysrc,
+                        int /*xsrc*/, int ysrc,
                         unsigned len,
                         agg::int8u cover)
     {
-        typedef typename SrcPixelFormatRenderer::value_type src_value_type;
+        using src_value_type = typename SrcPixelFormatRenderer::value_type;
         const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
         if(psrc)
         {
@@ -639,22 +639,21 @@ private:
     rbuf_type* m_rbuf;
 };
 
-typedef blender_gray<gray16> blender_gray16;
+using blender_gray16 = blender_gray<gray16>;
 
-typedef pixfmt_alpha_blend_gray<blender_gray16,
-                                mapnik::grid_rendering_buffer> pixfmt_gray16;     //----pixfmt_gray16
+using pixfmt_gray16 =  pixfmt_alpha_blend_gray<blender_gray16,
+                                               mapnik::grid_rendering_buffer>;     //----pixfmt_gray16
 
-typedef blender_gray<gray32> blender_gray32;
+using blender_gray32 = blender_gray<gray32>;
 
-typedef pixfmt_alpha_blend_gray<blender_gray32,
-                                mapnik::grid_rendering_buffer> pixfmt_gray32;     //----pixfmt_gray32
+using  pixfmt_gray32 = pixfmt_alpha_blend_gray<blender_gray32,
+                                               mapnik::grid_rendering_buffer>;     //----pixfmt_gray32
 
-typedef blender_gray<gray64> blender_gray64;
+using blender_gray64 = blender_gray<gray64>;
 
-typedef pixfmt_alpha_blend_gray<blender_gray64,
-                                mapnik::grid_rendering_buffer> pixfmt_gray64;     //----pixfmt_gray64
+using pixfmt_gray64 = pixfmt_alpha_blend_gray<blender_gray64,
+                                              mapnik::grid_rendering_buffer>;     //----pixfmt_gray64
 
 }
 
 #endif
-
diff --git a/include/mapnik/grid/grid_renderer.hpp b/include/mapnik/grid/grid_renderer.hpp
index e37d12b..a07ff76 100644
--- a/include/mapnik/grid/grid_renderer.hpp
+++ b/include/mapnik/grid/grid_renderer.hpp
@@ -26,19 +26,18 @@
 // mapnik
 #include <mapnik/config.hpp>
 #include <mapnik/feature_style_processor.hpp>
-#include <mapnik/font_engine_freetype.hpp>
 #include <mapnik/grid/grid.hpp>
 #include <mapnik/noncopyable.hpp>
 #include <mapnik/rule.hpp>              // for rule, symbolizers
 #include <mapnik/box2d.hpp>     // for box2d
 #include <mapnik/color.hpp>     // for color
-#include <mapnik/ctrans.hpp>    // for CoordTransform
+#include <mapnik/view_transform.hpp>    // for view_transform
 #include <mapnik/image_compositing.hpp>  // for composite_mode_e
 #include <mapnik/pixel_position.hpp>
+#include <mapnik/renderer_common.hpp>
 
-// boost
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
+// stl
+#include <memory>
 
 // fwd declaration to avoid depedence on agg headers
 namespace agg { struct trans_affine; }
@@ -64,18 +63,20 @@ class MAPNIK_DECL grid_renderer : public feature_style_processor<grid_renderer<T
 {
 
 public:
-    typedef T buffer_type;
-    typedef grid_renderer<T> processor_impl_type;
+    using buffer_type = T;
+    using processor_impl_type = grid_renderer<T>;
     grid_renderer(Map const& m, T & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
-    grid_renderer(Map const& m, request const& req, T & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
+    grid_renderer(Map const& m, request const& req, attributes const& vars, T & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
     ~grid_renderer();
     void start_map_processing(Map const& map);
     void end_map_processing(Map const& map);
     void start_layer_processing(layer const& lay, box2d<double> const& query_extent);
     void end_layer_processing(layer const& lay);
-    void start_style_processing(feature_type_style const& st) {}
-    void end_style_processing(feature_type_style const& st) {}
-    void render_marker(mapnik::feature_impl & feature, unsigned int step, pixel_position const& pos, marker const& marker, const agg::trans_affine & tr, double opacity, composite_mode_e comp_op);
+    void start_style_processing(feature_type_style const& /*st*/) {}
+    void end_style_processing(feature_type_style const& /*st*/) {}
+    void render_marker(mapnik::feature_impl const& feature,
+                       pixel_position const& pos, marker const& marker,
+                       agg::trans_affine const& tr, double opacity, composite_mode_e comp_op);
 
     void process(point_symbolizer const& sym,
                  mapnik::feature_impl & feature,
@@ -107,6 +108,9 @@ public:
     void process(markers_symbolizer const& sym,
                  mapnik::feature_impl & feature,
                  proj_transform const& prj_trans);
+    void process(group_symbolizer const& sym,
+                 mapnik::feature_impl & feature,
+                 proj_transform const& prj_trans);
     inline bool process(rule::symbolizers const& /*syms*/,
                         mapnik::feature_impl & /*feature*/,
                         proj_transform const& /*prj_trans*/)
@@ -114,26 +118,36 @@ public:
         // grid renderer doesn't support processing of multiple symbolizers.
         return false;
     }
+
+    bool painted()
+    {
+        return pixmap_.painted();
+    }
+
     void painted(bool painted)
     {
         pixmap_.painted(painted);
     }
+
     inline eAttributeCollectionPolicy attribute_collection_policy() const
     {
         return DEFAULT;
     }
 
+    inline double scale_factor() const
+    {
+        return common_.scale_factor_;
+    }
+
+    inline attributes const& variables() const
+    {
+        return common_.vars_;
+    }
+
 private:
     buffer_type & pixmap_;
-    unsigned width_;
-    unsigned height_;
-    double scale_factor_;
-    CoordTransform t_;
-    freetype_engine font_engine_;
-    face_manager<freetype_engine> font_manager_;
-    boost::shared_ptr<label_collision_detector4> detector_;
-    boost::scoped_ptr<grid_rasterizer> ras_ptr;
-    box2d<double> query_extent_;
+    const std::unique_ptr<grid_rasterizer> ras_ptr;
+    renderer_common common_;
     void setup(Map const& m);
 };
 }
diff --git a/include/mapnik/grid/grid_renderer_base.hpp b/include/mapnik/grid/grid_renderer_base.hpp
index b93d9c4..a165f58 100644
--- a/include/mapnik/grid/grid_renderer_base.hpp
+++ b/include/mapnik/grid/grid_renderer_base.hpp
@@ -30,9 +30,9 @@
 namespace mapnik {
 
 #ifdef BIGINT
-typedef agg::renderer_base<mapnik::pixfmt_gray64> grid_renderer_base_type;
+using grid_renderer_base_type = agg::renderer_base<mapnik::pixfmt_gray64>;
 #else
-typedef agg::renderer_base<mapnik::pixfmt_gray32> grid_renderer_base_type;
+using grid_renderer_base_type = agg::renderer_base<mapnik::pixfmt_gray32>;
 #endif
 
 }
diff --git a/include/mapnik/grid/grid_rendering_buffer.hpp b/include/mapnik/grid/grid_rendering_buffer.hpp
index 0b454ee..e418d4c 100644
--- a/include/mapnik/grid/grid_rendering_buffer.hpp
+++ b/include/mapnik/grid/grid_rendering_buffer.hpp
@@ -28,7 +28,7 @@
 
 namespace mapnik {
 
-typedef agg::row_ptr_cache<mapnik::grid::value_type> grid_rendering_buffer;
+using grid_rendering_buffer = agg::row_ptr_cache<mapnik::grid::value_type>;
 
 }
 
diff --git a/include/mapnik/grid/grid_util.hpp b/include/mapnik/grid/grid_util.hpp
index b1b61c6..f681deb 100644
--- a/include/mapnik/grid/grid_util.hpp
+++ b/include/mapnik/grid/grid_util.hpp
@@ -26,9 +26,6 @@
 // mapnik
 #include <mapnik/grid/grid.hpp>
 
-// boost
-#include <boost/concept_check.hpp>
-
 namespace mapnik {
 
 /*
@@ -60,8 +57,6 @@ static inline void scale_grid(mapnik::grid::data_type & target,
     unsigned yprt1 = 0;
     unsigned xprt = 0;
     unsigned xprt1 = 0;
-    boost::ignore_unused_variable_warning(yprt1);
-    boost::ignore_unused_variable_warning(xprt1);
 
     //no scaling or subpixel offset
     if (target_height == source_height && target_width == source_width && offs_x == 0 && offs_y == 0){
diff --git a/include/mapnik/grid/grid_view.hpp b/include/mapnik/grid/grid_view.hpp
index 1f190c8..dff5e1e 100644
--- a/include/mapnik/grid/grid_view.hpp
+++ b/include/mapnik/grid/grid_view.hpp
@@ -28,32 +28,27 @@
 #include <mapnik/global.hpp>
 #include <mapnik/value.hpp>
 #include <mapnik/feature.hpp>
-#include <mapnik/datasource.hpp> // for feature_ptr
-
-// boost
-#include <boost/cstdint.hpp>
 
 // stl
+#include <cstdint>
 #include <map>
 #include <set>
 #include <cmath>
 #include <string>
-#include <cassert>
 #include <vector>
 
-
 namespace mapnik {
 
 template <typename T>
 class hit_grid_view
 {
 public:
-    typedef T data_type;
-    typedef typename T::pixel_type value_type;
-    typedef typename T::pixel_type pixel_type;
-    typedef std::string lookup_type;
-    typedef std::map<value_type, lookup_type> feature_key_type;
-    typedef std::map<std::string, mapnik::feature_ptr> feature_type;
+    using data_type = T;
+    using value_type = typename T::pixel_type;
+    using pixel_type = typename T::pixel_type;
+    using lookup_type = std::string;
+    using feature_key_type = std::map<value_type, lookup_type>;
+    using feature_type = std::map<std::string, mapnik::feature_ptr>;
 
     hit_grid_view(unsigned x, unsigned y,
                   unsigned width, unsigned height,
@@ -79,7 +74,7 @@ public:
 
     {
         if (x_ >= data_.width()) x_=data_.width()-1;
-        if (y_ >= data_.height()) x_=data_.height()-1;
+        if (y_ >= data_.height()) y_=data_.height()-1;
         if (x_ + width_ > data_.width()) width_= data_.width() - x_;
         if (y_ + height_ > data_.height()) height_= data_.height() - y_;
     }
@@ -201,7 +196,7 @@ private:
     feature_type const& features_;
 };
 
-typedef hit_grid_view<mapnik::ImageData<mapnik::value_integer> > grid_view;
+using grid_view = hit_grid_view<mapnik::image_data<mapnik::value_integer> >;
 
 }
 
diff --git a/include/mapnik/group/group_layout.hpp b/include/mapnik/group/group_layout.hpp
new file mode 100644
index 0000000..81ff4ab
--- /dev/null
+++ b/include/mapnik/group/group_layout.hpp
@@ -0,0 +1,94 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GROUP_LAYOUT_HPP
+#define MAPNIK_GROUP_LAYOUT_HPP
+
+// mapnik
+#include <mapnik/util/variant.hpp>
+// std
+#include <memory>
+
+namespace mapnik
+{
+
+struct simple_row_layout
+{
+public:
+   simple_row_layout(double item_margin = 0.0)
+      : item_margin_(item_margin)
+   {
+   }
+
+   double get_item_margin() const
+   {
+      return item_margin_;
+   }
+
+   void set_item_margin(double item_margin)
+   {
+      item_margin_ = item_margin;
+   }
+
+private:
+   double item_margin_;
+};
+
+struct pair_layout
+{
+public:
+   pair_layout(double item_margin = 1.0, double max_difference = - 1.0)
+      : item_margin_(item_margin),
+        max_difference_(max_difference)
+   {
+   }
+
+   double get_item_margin() const
+   {
+      return item_margin_;
+   }
+
+   void set_item_margin(double item_margin)
+   {
+      item_margin_ = item_margin;
+   }
+
+   double get_max_difference() const
+   {
+      return max_difference_;
+   }
+
+   void set_max_difference(double max_difference)
+   {
+      max_difference_ = max_difference;
+   }
+
+private:
+   double item_margin_;
+   double max_difference_;
+};
+
+using group_layout = util::variant<simple_row_layout,pair_layout>;
+using group_layout_ptr = std::shared_ptr<group_layout>;
+}
+
+#endif // MAPNIK_GROUP_LAYOUT_HPP
diff --git a/include/mapnik/group/group_layout_manager.hpp b/include/mapnik/group/group_layout_manager.hpp
new file mode 100644
index 0000000..b44921b
--- /dev/null
+++ b/include/mapnik/group/group_layout_manager.hpp
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GROUP_LAYOUT_MANAGER_HPP
+#define MAPNIK_GROUP_LAYOUT_MANAGER_HPP
+
+// mapnik
+#include <mapnik/box2d.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/group/group_layout.hpp>
+
+// stl
+#include <vector>
+
+using std::vector;
+
+namespace mapnik
+{
+
+using bound_box = box2d<double>;
+
+struct group_layout_manager
+{
+    group_layout_manager(group_layout const& layout)
+        : layout_(layout),
+          input_origin_(0, 0),
+          member_boxes_(vector<bound_box>()),
+          member_offsets_(vector<pixel_position>()),
+          update_layout_(true)
+    {
+    }
+
+    group_layout_manager(group_layout const& layout, pixel_position const& input_origin)
+        : layout_(layout),
+          input_origin_(input_origin),
+          member_boxes_(vector<bound_box>()),
+          member_offsets_(vector<pixel_position>()),
+          update_layout_(true)
+    {
+    }
+
+    group_layout_manager(group_layout const& layout, pixel_position const& input_origin,
+                         vector<bound_box> const& item_boxes)
+        : layout_(layout),
+          input_origin_(input_origin),
+          member_boxes_(item_boxes),
+          member_offsets_(vector<pixel_position>()),
+          update_layout_(true)
+    {
+    }
+
+    inline void set_layout(group_layout const& layout)
+    {
+        layout_ = layout;
+        update_layout_ = true;
+    }
+
+    inline void add_member_bound_box(bound_box const& member_box)
+    {
+        member_boxes_.push_back(member_box);
+        update_layout_ = true;
+    }
+
+    inline pixel_position const& offset_at(size_t i)
+    {
+        handle_update();
+        return member_offsets_.at(i);
+    }
+
+    bound_box offset_box_at(size_t i);
+
+private:
+
+    void handle_update();
+
+    group_layout layout_;
+    pixel_position input_origin_;
+    vector<bound_box> member_boxes_;
+    vector<pixel_position> member_offsets_;
+    bool update_layout_;
+};
+
+}   // namespace mapnik
+
+#endif // MAPNIK_GROUP_LAYOUT_MANAGER_HPP
diff --git a/include/mapnik/group/group_rule.hpp b/include/mapnik/group/group_rule.hpp
new file mode 100644
index 0000000..71dd7df
--- /dev/null
+++ b/include/mapnik/group/group_rule.hpp
@@ -0,0 +1,105 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GROUP_RULE_HPP
+#define MAPNIK_GROUP_RULE_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/expression_node_types.hpp>
+#include <mapnik/symbolizer_base.hpp>
+#include <mapnik/expression.hpp>
+
+#include <memory>
+#include <vector>
+
+namespace mapnik
+{
+
+/**
+ * group rule contains a set of symbolizers which should
+ * be rendered atomically when the filter attached to
+ * this rule is matched.
+ */
+struct MAPNIK_DECL group_rule
+{
+   using symbolizers = std::vector<symbolizer>;
+
+   group_rule(const expression_ptr& filter = std::make_shared<mapnik::expr_node>(true),
+              const expression_ptr& repeat_key = expression_ptr());
+
+   group_rule &operator=(const group_rule &rhs);
+   bool operator==(const group_rule &rhs) const;
+
+   void append(const symbolizer &);
+
+   const symbolizers &get_symbolizers() const
+   {
+      return symbolizers_;
+   }
+
+   inline symbolizers::const_iterator begin() const
+   {
+      return symbolizers_.begin();
+   }
+
+   inline symbolizers::const_iterator end() const
+   {
+      return symbolizers_.end();
+   }
+
+   inline void set_filter(const expression_ptr& filter)
+   {
+      filter_ = filter;
+   }
+
+   inline expression_ptr const& get_filter() const
+   {
+      return filter_;
+   }
+
+   inline void set_repeat_key(const expression_ptr& repeat_key)
+   {
+      repeat_key_ = repeat_key;
+   }
+
+   inline expression_ptr const& get_repeat_key() const
+   {
+      return repeat_key_;
+   }
+
+private:
+
+   // expression filter - when data matches this then
+   // the symbolizers should be drawn.
+   expression_ptr filter_;
+
+   // expression repeat key - repeat key to be used with minimum distance
+   expression_ptr repeat_key_;
+
+   // the atomic set of symbolizers
+   symbolizers symbolizers_;
+};
+
+}
+
+#endif // MAPNIK_GROUP_RULE_HPP
diff --git a/include/mapnik/group/group_symbolizer_helper.hpp b/include/mapnik/group/group_symbolizer_helper.hpp
new file mode 100644
index 0000000..20b97c7
--- /dev/null
+++ b/include/mapnik/group/group_symbolizer_helper.hpp
@@ -0,0 +1,105 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef GROUP_SYMBOLIZER_HELPER_HPP
+#define GROUP_SYMBOLIZER_HELPER_HPP
+
+//mapnik
+#include <mapnik/text/symbolizer_helpers.hpp>
+#include <mapnik/text/placements/base.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/pixel_position.hpp>
+
+namespace mapnik {
+
+class label_collision_detector4;
+class feature_impl;
+class proj_transform;
+class view_transform;
+using DetectorType = label_collision_detector4;
+
+using pixel_position_list = std::list<pixel_position>;
+
+// Helper object that does some of the GroupSymbolizer placement finding work.
+class group_symbolizer_helper : public base_symbolizer_helper
+{
+public:
+    struct box_element
+    {
+        box_element(box2d<double> const& box, value_unicode_string const& repeat_key = "")
+           : box_(box),
+             repeat_key_(repeat_key)
+        {}
+        box2d<double> box_;
+        value_unicode_string repeat_key_;
+    };
+
+    group_symbolizer_helper(group_symbolizer const& sym,
+                            feature_impl const& feature,
+                            attributes const& vars,
+                            proj_transform const& prj_trans,
+                            unsigned width,
+                            unsigned height,
+                            double scale_factor,
+                            view_transform const& t,
+                            DetectorType &detector,
+                            box2d<double> const& query_extent);
+
+    inline void add_box_element(box2d<double> const& box, value_unicode_string const& repeat_key = "")
+    {
+        box_elements_.push_back(box_element(box, repeat_key));
+    }
+
+    inline void clear_box_elements()
+    {
+        box_elements_.clear();
+    }
+
+    inline text_symbolizer_properties const& get_properties() const
+    {
+        return info_ptr_->properties;
+    }
+
+    pixel_position_list const& get();
+
+private:
+
+    /** Iterate over the given path, placing line-following labels or point labels with respect to label_spacing. */
+    template <typename T>
+    bool find_line_placements(T & path);
+    /** Check if a point placement fits at given position */
+    bool check_point_placement(pixel_position const& pos);
+    /** Checks for collision. */
+    bool collision(box2d<double> const& box, value_unicode_string const& repeat_key = "") const;
+    double get_spacing(double path_length) const;
+
+    DetectorType & detector_;
+
+    /** Boxes and repeat keys to take into account when finding placement.
+     *  Boxes are relative to starting point of current placement.
+     */
+    std::list<box_element> box_elements_;
+
+    pixel_position_list results_;
+};
+
+} //namespace
+#endif // GROUP_SYMBOLIZER_HELPER_HPP
diff --git a/include/mapnik/group/group_symbolizer_properties.hpp b/include/mapnik/group/group_symbolizer_properties.hpp
new file mode 100644
index 0000000..bd6ef2f
--- /dev/null
+++ b/include/mapnik/group/group_symbolizer_properties.hpp
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef GROUP_PROPERTIES_HPP
+#define GROUP_PROPERTIES_HPP
+
+// mapnik
+#include <mapnik/group/group_layout.hpp>
+
+// stl
+#include <vector>
+#include <memory>
+
+namespace mapnik
+{
+struct group_rule;
+using group_rule_ptr = std::shared_ptr<group_rule>;
+using group_rules = std::vector<group_rule_ptr>;
+
+/** Contains all group symbolizer properties related to building a group layout. */
+struct group_symbolizer_properties
+{
+    inline group_symbolizer_properties() : rules_() { }
+    /** Load all values from XML ptree. */
+    //void from_xml(xml_node const &sym, fontset_map const & fontsets);
+    /** Get the layout. */
+    inline group_layout const& get_layout() const { return layout_; }
+    /** Get the group rules. */
+    inline group_rules const& get_rules() const { return rules_; }
+    /** Set the layout. */
+    inline void set_layout (group_layout && layout) { layout_ = std::move(layout); }
+    /** Add add group rule. */
+    inline void add_rule (group_rule_ptr rule) { rules_.push_back(rule); }
+
+private:
+    group_layout layout_;
+    group_rules  rules_;
+};
+
+using group_symbolizer_properties_ptr = std::shared_ptr<group_symbolizer_properties>;
+
+} //ns mapnik
+
+#endif // GROUP_PROPERTIES_HPP
diff --git a/include/mapnik/hash_variant.hpp b/include/mapnik/hash_variant.hpp
deleted file mode 100644
index 2e6a866..0000000
--- a/include/mapnik/hash_variant.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-//-----------------------------------------------------------------------------
-// boost variant/detail/hash_variant.hpp header file
-// See http://www.boost.org for updates, documentation, and revision history.
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 2011
-// Antony Polukhin
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// TODO: Remove this file once the minimum Boost version is bumped to 1.50
-
-#ifndef BOOST_HASH_VARIANT_FUNCTION_HPP
-#define BOOST_HASH_VARIANT_FUNCTION_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/variant/variant_fwd.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/functional/hash_fwd.hpp>
-
-namespace boost {
-
-    namespace detail { namespace variant {
-        struct variant_hasher: public boost::static_visitor<std::size_t> {
-            template <class T>
-            std::size_t operator()(T const& val) const {
-                using namespace boost;
-                hash<T> hasher;
-                return hasher(val);
-            }
-        };
-    }}
-
-    template < BOOST_VARIANT_ENUM_PARAMS(typename T) >
-    std::size_t hash_value(variant< BOOST_VARIANT_ENUM_PARAMS(T) > const& val) {
-        std::size_t seed = boost::apply_visitor(detail::variant::variant_hasher(), val);
-        hash_combine(seed, val.which());
-        return seed;
-    }
-}
-
-#endif
diff --git a/include/mapnik/hextree.hpp b/include/mapnik/hextree.hpp
index b64aef1..166398a 100644
--- a/include/mapnik/hextree.hpp
+++ b/include/mapnik/hextree.hpp
@@ -28,17 +28,10 @@
 #include <mapnik/palette.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104600
-#include <boost/range/algorithm.hpp>
-#endif
-#include <boost/scoped_ptr.hpp>
-
 // stl
+#include <algorithm>
 #include <vector>
 #include <set>
-#include <algorithm>
 #include <cmath>
 
 namespace mapnik {
@@ -64,15 +57,16 @@ class hextree : private mapnik::noncopyable
     struct node
     {
         node ()
-            : reds(0),
-              greens(0),
-              blues(0),
-              alphas(0),
+            : reds(0.0),
+              greens(0.0),
+              blues(0.0),
+              alphas(0.0),
               count(0),
               pixel_count(0),
+              reduce_cost(0.0),
               children_count(0)
         {
-            memset(&children_[0],0,sizeof(children_));
+            std::fill(children_, children_ + 16, nullptr);
         }
 
         ~node ()
@@ -124,7 +118,7 @@ class hextree : private mapnik::noncopyable
     unsigned colors_;
     // flag indicating existance of invisible pixels (a < InsertPolicy::MIN_ALPHA)
     bool has_holes_;
-    boost::scoped_ptr<node> root_;
+    const std::unique_ptr<node> root_;
     // working palette for quantization, sorted on mean(r,g,b,a) for easier searching NN
     std::vector<rgba> sorted_pal_;
     // index remaping of sorted_pal_ indexes to indexes of returned image palette
@@ -263,13 +257,8 @@ public:
             int dist, newdist;
 
             // find closest match based on mean of r,g,b,a
-#if BOOST_VERSION >= 104600
-            std::vector<rgba>::const_iterator pit =
-                boost::lower_bound(sorted_pal_, c, rgba::mean_sort_cmp());
-#else
             std::vector<rgba>::const_iterator pit =
                 std::lower_bound(sorted_pal_.begin(),sorted_pal_.end(), c, rgba::mean_sort_cmp());
-#endif
             ind = pit-sorted_pal_.begin();
             if (ind == sorted_pal_.size())
                 ind--;
@@ -342,28 +331,24 @@ public:
         create_palette_rek(sorted_pal_, root_.get());
 
         // sort palette for binary searching in quantization
-#if BOOST_VERSION >= 104600
-        boost::sort(sorted_pal_, rgba::mean_sort_cmp());
-#else
         std::sort(sorted_pal_.begin(), sorted_pal_.end(), rgba::mean_sort_cmp());
-#endif
         // returned palette is rearanged, so that colors with a<255 are at the begining
         pal_remap_.resize(sorted_pal_.size());
         palette.clear();
         palette.reserve(sorted_pal_.size());
-        for (unsigned i=0; i<sorted_pal_.size(); i++)
+        for (unsigned i=0; i<sorted_pal_.size(); ++i)
         {
             if (sorted_pal_[i].a<255)
             {
-                pal_remap_[i] = palette.size();
+                pal_remap_[i] = static_cast<unsigned>(palette.size());
                 palette.push_back(sorted_pal_[i]);
             }
         }
-        for (unsigned i=0; i<sorted_pal_.size(); i++)
+        for (unsigned i=0; i<sorted_pal_.size(); ++i)
         {
             if (sorted_pal_[i].a==255)
             {
-                pal_remap_[i] = palette.size();
+                pal_remap_[i] = static_cast<unsigned>(palette.size());
                 palette.push_back(sorted_pal_[i]);
             }
         }
diff --git a/include/mapnik/hit_test_filter.hpp b/include/mapnik/hit_test_filter.hpp
index b9c1f6a..cb9c6f1 100644
--- a/include/mapnik/hit_test_filter.hpp
+++ b/include/mapnik/hit_test_filter.hpp
@@ -27,7 +27,7 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/geom_util.hpp>
 // boost
-#include <boost/foreach.hpp>
+
 
 namespace mapnik {
 class hit_test_filter
@@ -40,7 +40,7 @@ public:
 
     bool pass(feature_impl & feature)
     {
-        BOOST_FOREACH(geometry_type & geom, feature.paths())
+        for (geometry_type & geom : feature.paths())
         {
             if (label::hit_test(geom, x_,y_,tol_))
                 return true;
diff --git a/include/mapnik/image_compositing.hpp b/include/mapnik/image_compositing.hpp
index 6d5d05f..892dbad 100644
--- a/include/mapnik/image_compositing.hpp
+++ b/include/mapnik/image_compositing.hpp
@@ -23,15 +23,14 @@
 #ifndef MAPNIK_IMAGE_COMPOSITING_HPP
 #define MAPNIK_IMAGE_COMPOSITING_HPP
 
-// stl
-#include <string>
+#include <mapnik/config.hpp>
+#include <mapnik/image_data.hpp>
 
+// boost
 #include <boost/optional.hpp>
-#include <mapnik/config.hpp>
 
-#ifdef _MSC_VER
-#include <mapnik/image_data.hpp>
-#endif
+// stl
+#include <string>
 
 namespace mapnik
 {
@@ -74,8 +73,10 @@ enum composite_mode_e
     hue,
     saturation,
     _color,
-    _value
-    //colorize_alpha
+    _value,
+    linear_dodge,
+    linear_burn,
+    divide
 };
 
 MAPNIK_DECL boost::optional<composite_mode_e> comp_op_from_string(std::string const& name);
@@ -89,15 +90,13 @@ MAPNIK_DECL void composite(T1 & dst, T2 & src,
                            int dy=0,
                            bool premultiply_src=false);
 
-#ifdef _MSC_VER
-template MAPNIK_DECL void composite<mapnik::image_data_32,mapnik::image_data_32>(mapnik::image_data_32 & dst,
+extern template MAPNIK_DECL void composite<mapnik::image_data_32,mapnik::image_data_32>(mapnik::image_data_32 & dst,
                            mapnik::image_data_32 & src,
                            composite_mode_e mode,
                            float opacity,
                            int dx,
                            int dy,
                            bool premultiply_src);
-#endif
 
 }
 #endif // MAPNIK_IMAGE_COMPOSITING_HPP
diff --git a/include/mapnik/image_data.hpp b/include/mapnik/image_data.hpp
index fde6f95..ee194c9 100644
--- a/include/mapnik/image_data.hpp
+++ b/include/mapnik/image_data.hpp
@@ -27,32 +27,84 @@
 #include <mapnik/global.hpp>
 
 // stl
+#include <algorithm>
 #include <cassert>
-#include <cstring>
+#include <stdexcept>
 
 namespace mapnik
 {
-template <class T> class ImageData
+template <typename T>
+class image_data
 {
 public:
-    typedef T pixel_type;
+    using pixel_type = T;
 
-    ImageData(unsigned width,unsigned height)
-        : width_(width),
-          height_(height),
-          pData_((width!=0 && height!=0)? static_cast<T*>(::operator new(sizeof(T)*width*height)):0)
+    image_data(int width, int height)
+        : width_(static_cast<unsigned>(width)),
+          height_(static_cast<unsigned>(height)),
+          owns_data_(true)
     {
-        if (pData_) std::memset(pData_,0,sizeof(T)*width_*height_);
+        if (width < 0)
+        {
+            throw std::runtime_error("negative width not allowed for image_data");
+        }
+        if (height < 0)
+        {
+            throw std::runtime_error("negative height not allowed for image_data");
+        }
+        pData_ = (width!=0 && height!=0) ? static_cast<T*>(::operator new(sizeof(T) * width * height)):0;
+        if (pData_) std::fill(pData_, pData_ + width_ * height_, 0);
     }
 
-    ImageData(const ImageData<T>& rhs)
+    image_data(int width, int height, T * data)
+        : width_(static_cast<unsigned>(width)),
+          height_(static_cast<unsigned>(height)),
+          owns_data_(false),
+          pData_(data)
+    {
+        if (width < 0)
+        {
+            throw std::runtime_error("negative width not allowed for image_data");
+        }
+        if (height < 0)
+        {
+            throw std::runtime_error("negative height not allowed for image_data");
+        }
+    }
+
+    image_data(image_data<T> const& rhs)
         :width_(rhs.width_),
          height_(rhs.height_),
+         owns_data_(true),
          pData_((rhs.width_!=0 && rhs.height_!=0)?
-                static_cast<T*>(::operator new(sizeof(T)*rhs.width_*rhs.height_)) :0)
+                static_cast<T*>(::operator new(sizeof(T) * rhs.width_ * rhs.height_)) : 0)
     {
-        if (pData_) std::memcpy(pData_,rhs.pData_,sizeof(T)*rhs.width_* rhs.height_);
+        if (pData_) std::copy(rhs.pData_, rhs.pData_ + rhs.width_* rhs.height_, pData_);
     }
+
+    image_data(image_data<T> && rhs) noexcept
+        : width_(rhs.width_),
+          height_(rhs.height_),
+          pData_(rhs.pData_)
+    {
+        rhs.width_ = 0;
+        rhs.height_ = 0;
+        rhs.pData_ = nullptr;
+    }
+
+    image_data<T>& operator=(image_data<T> rhs)
+    {
+        swap(rhs);
+        return *this;
+    }
+
+    void swap(image_data<T> & rhs)
+    {
+        std::swap(width_, rhs.width_);
+        std::swap(height_, rhs.height_);
+        std::swap(pData_, rhs.pData_);
+    }
+
     inline T& operator() (unsigned i,unsigned j)
     {
         assert(i<width_ && j<height_);
@@ -71,16 +123,9 @@ public:
     {
         return height_;
     }
-    inline void set(const T& t)
+    inline void set(T const& t)
     {
-        for (unsigned y = 0; y < height_; ++y)
-        {
-            T * row = getRow(y);
-            for (unsigned x = 0; x < width_; ++x)
-            {
-                row[x] = t;
-            }
-        }
+        std::fill(pData_, pData_ + width_ * height_, t);
     }
 
     inline const T* getData() const
@@ -95,12 +140,12 @@ public:
 
     inline const unsigned char* getBytes() const
     {
-        return (unsigned char*)pData_;
+        return reinterpret_cast<unsigned char*>(pData_);
     }
 
     inline unsigned char* getBytes()
     {
-        return (unsigned char*)pData_;
+        return reinterpret_cast<unsigned char*>(pData_);
     }
 
     inline const T* getRow(unsigned row) const
@@ -113,31 +158,34 @@ public:
         return pData_+row*width_;
     }
 
-    inline void setRow(unsigned row,const T* buf,unsigned size)
+    inline void setRow(unsigned row, T const* buf, unsigned size)
     {
         assert(row<height_);
         assert(size<=width_);
-        std::memcpy(pData_+row*width_,buf,size*sizeof(T));
+        std::copy(buf, buf + size, pData_ + row * width_);
     }
-    inline void setRow(unsigned row,unsigned x0,unsigned x1,const T* buf)
+    inline void setRow(unsigned row, unsigned x0, unsigned x1, T const* buf)
     {
-        std::memcpy(pData_+row*width_+x0,buf,(x1-x0)*sizeof(T));
+        std::copy(buf, buf + (x1 - x0), pData_ + row * width_);
     }
 
-    inline ~ImageData()
+    inline ~image_data()
     {
-        ::operator delete(pData_),pData_=0;
+        if (owns_data_)
+        {
+            ::operator delete(pData_),pData_=0;
+        }
     }
 
 private:
-    const unsigned width_;
-    const unsigned height_;
+    unsigned width_;
+    unsigned height_;
+    bool owns_data_;
     T *pData_;
-    ImageData& operator=(const ImageData&);
 };
 
-typedef ImageData<unsigned> image_data_32;
-typedef ImageData<byte>  image_data_8;
+using image_data_32 = image_data<unsigned>;
+using image_data_8 = image_data<byte> ;
 }
 
 #endif // MAPNIK_IMAGE_DATA_HPP
diff --git a/include/mapnik/image_filter.hpp b/include/mapnik/image_filter.hpp
index c11bd2e..b4fe9ae 100644
--- a/include/mapnik/image_filter.hpp
+++ b/include/mapnik/image_filter.hpp
@@ -28,15 +28,17 @@
 #include <mapnik/image_filter_types.hpp>
 #include <mapnik/util/hsl.hpp>
 
-// boost
-#include <boost/variant/static_visitor.hpp>
+// boost GIL
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/gil/gil_all.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/foreach.hpp>
+#pragma GCC diagnostic pop
 
 // agg
 #include "agg_basics.h"
 #include "agg_rendering_buffer.h"
+#include "agg_color_rgba.h"
 #include "agg_pixfmt_rgba.h"
 #include "agg_scanline_u.h"
 #include "agg_blur.h"
@@ -111,7 +113,7 @@
 //  kernel_1d_fixed<float,9> kernel(conv,4);
 
 // color_converted_view<rgb8_pixel_t>(src_view);
-//typedef kth_channel_view_type< 0, const rgba8_view_t>::type view_t;
+//using view_t = kth_channel_view_type< 0, const rgba8_view_t>::type;
 
 //view_t red = kth_channel_view<0>(const_view(src_view));
 
@@ -175,11 +177,8 @@ void process_channel_impl (Src const& src, Dst & dst, Conv const& k)
 }
 
 template <typename Src, typename Dst, typename Conv>
-void process_channel (Src const& src, Dst & dst, Conv const& k)
+void process_channel (Src const&, Dst &, Conv const&)
 {
-    boost::ignore_unused_variable_warning(src);
-    boost::ignore_unused_variable_warning(dst);
-    boost::ignore_unused_variable_warning(k);
 }
 
 template <typename Src, typename Dst>
@@ -253,7 +252,7 @@ void apply_convolution_3x3(Src const& src_view, Dst & dst_view, Filter const& fi
     // top row
     for (int x = 0 ; x < src_view.width(); ++x)
     {
-        *dst_it = src_loc[loc11];
+        (*dst_it)[3] = src_loc[loc11][3]; // Dst.a = Src.a
         for (int i = 0; i < 3; ++i)
         {
             bits32f p[9];
@@ -283,7 +282,6 @@ void apply_convolution_3x3(Src const& src_view, Dst & dst_view, Filter const& fi
                 p[8] = src_loc[loc22][i];
             }
 
-
             p[0] = p[6];
             p[1] = p[7];
             p[2] = p[8];
@@ -301,7 +299,7 @@ void apply_convolution_3x3(Src const& src_view, Dst & dst_view, Filter const& fi
     {
         for (int x = 0; x < src_view.width(); ++x)
         {
-            *dst_it = src_loc[loc11];
+            (*dst_it)[3] = src_loc[loc11][3]; // Dst.a = Src.a
             for (int i = 0; i < 3; ++i)
             {
                 bits32f p[9];
@@ -348,7 +346,7 @@ void apply_convolution_3x3(Src const& src_view, Dst & dst_view, Filter const& fi
     //src_loc = src_view.xy_at(0,src_view.height()-1);
     for (int x = 0 ; x < src_view.width(); ++x)
     {
-        *dst_it = src_loc[loc11];
+        (*dst_it)[3] = src_loc[loc11][3]; // Dst.a = Src.a
         for (int i = 0; i < 3; ++i)
         {
             bits32f p[9];
@@ -382,7 +380,6 @@ void apply_convolution_3x3(Src const& src_view, Dst & dst_view, Filter const& fi
             p[6] = p[0];
             p[7] = p[1];
             p[8] = p[2];
-
             process_channel(p, (*dst_it)[i], filter);
         }
         ++src_loc.x();
@@ -393,47 +390,43 @@ void apply_convolution_3x3(Src const& src_view, Dst & dst_view, Filter const& fi
 template <typename Src, typename Filter>
 void apply_filter(Src & src, Filter const& filter)
 {
-    double_buffer<Src> tb(src);
-    apply_convolution_3x3(tb.src_view, tb.dst_view, filter);
+    {
+        src.demultiply();
+        double_buffer<Src> tb(src);
+        apply_convolution_3x3(tb.src_view, tb.dst_view, filter);
+    } // ensure ~double_buffer() is called before premultiplying
+    src.premultiply();
 }
 
 template <typename Src>
 void apply_filter(Src & src, agg_stack_blur const& op)
 {
     agg::rendering_buffer buf(src.raw_data(),src.width(),src.height(), src.width() * 4);
-    agg::pixfmt_rgba32 pixf(buf);
+    agg::pixfmt_rgba32_pre pixf(buf);
     agg::stack_blur_rgba32(pixf,op.rx,op.ry);
 }
 
-template <typename Src>
-void apply_filter(Src & src, colorize_alpha const& op)
+inline double channel_delta(double source, double match)
 {
-    using namespace boost::gil;
-
-    agg::gradient_lut<agg::color_interpolator<agg::rgba8> > grad_lut;
-    grad_lut.remove_all();
-    std::size_t size = op.size();
-    if (size < 2) return;
+    if (source > match) return (source - match) / (1.0 - match);
+    if (source < match) return (match - source) / match;
+    return (source - match);
+}
 
-    double step = 1.0/(size-1);
-    double offset = 0.0;
-    BOOST_FOREACH( mapnik::filter::color_stop const& stop, op)
-    {
-        mapnik::color const& c = stop.color;
-        double stop_offset = stop.offset;
-        if (stop_offset == 0)
-        {
-            stop_offset = offset;
-        }
-        grad_lut.add_color(stop_offset, agg::rgba(c.red()/256.0,
-                                                  c.green()/256.0,
-                                                  c.blue()/256.0,
-                                                  c.alpha()/256.0));
-        offset += step;
-    }
-    grad_lut.build_lut();
+inline uint8_t apply_alpha_shift(double source, double match, double alpha)
+{
+    source = (((source - match) / alpha) + match) * alpha;
+    return static_cast<uint8_t>(std::floor((source*255.0)+.5));
+}
 
+template <typename Src>
+void apply_filter(Src & src, color_to_alpha const& op)
+{
+    using namespace boost::gil;
     rgba8_view_t src_view = rgba8_view(src);
+    double cr = static_cast<double>(op.color.red())/255.0;
+    double cg = static_cast<double>(op.color.green())/255.0;
+    double cb = static_cast<double>(op.color.blue())/255.0;
     for (int y=0; y<src_view.height(); ++y)
     {
         rgba8_view_t::x_iterator src_it = src_view.row_begin(y);
@@ -443,49 +436,155 @@ void apply_filter(Src & src, colorize_alpha const& op)
             uint8_t & g = get_color(src_it[x], green_t());
             uint8_t & b = get_color(src_it[x], blue_t());
             uint8_t & a = get_color(src_it[x], alpha_t());
-            if ( a > 0)
+            double sr = static_cast<double>(r)/255.0;
+            double sg = static_cast<double>(g)/255.0;
+            double sb = static_cast<double>(b)/255.0;
+            double sa = static_cast<double>(a)/255.0;
+            // demultiply
+            if (sa <= 0.0)
             {
-                agg::rgba8 c = grad_lut[a];
-                r = (c.r * a + 255) >> 8;
-                g = (c.g * a + 255) >> 8;
-                b = (c.b * a + 255) >> 8;
-#if 0
-                // rainbow
-                r = 0;
-                g = 0;
-                b = 0;
-                if (a < 64)
-                {
-                    g = a * 4;
-                    b = 255;
-                }
-                else if (a >= 64 && a < 128)
-                {
-                    g = 255;
-                    b = 255 - ((a - 64) * 4);
-                }
-                else if (a >= 128 && a < 192)
+                r = g = b = 0;
+                continue;
+            }
+            else
+            {
+                sr /= sa;
+                sg /= sa;
+                sb /= sa;
+            }
+            // get that maximum color difference
+            double xa = std::max(channel_delta(sr,cr),std::max(channel_delta(sg,cg),channel_delta(sb,cb)));
+            if (xa > 0)
+            {
+                // apply difference to each channel, returning premultiplied
+                // TODO - experiment with difference in hsl color space
+                r = apply_alpha_shift(sr,cr,xa);
+                g = apply_alpha_shift(sg,cg,xa);
+                b = apply_alpha_shift(sb,cb,xa);
+                // combine new alpha with original
+                xa *= sa;
+                a = static_cast<uint8_t>(std::floor((xa*255.0)+.5));
+                // all color values must be <= alpha
+                if (r>a) r=a;
+                if (g>a) g=a;
+                if (b>a) b=a;
+            }
+            else
+            {
+                r = g = b = a = 0;
+            }
+        }
+    }
+}
+
+template <typename Src>
+void apply_filter(Src & src, colorize_alpha const& op)
+{
+    using namespace boost::gil;
+    std::size_t size = op.size();
+    if (op.size() == 1)
+    {
+        // no interpolation if only one stop
+        mapnik::filter::color_stop const& stop = op[0];
+        mapnik::color const& c = stop.color;
+        rgba8_view_t src_view = rgba8_view(src);
+        for (int y=0; y<src_view.height(); ++y)
+        {
+            rgba8_view_t::x_iterator src_it = src_view.row_begin(y);
+            for (int x=0; x<src_view.width(); ++x)
+            {
+                uint8_t & r = get_color(src_it[x], red_t());
+                uint8_t & g = get_color(src_it[x], green_t());
+                uint8_t & b = get_color(src_it[x], blue_t());
+                uint8_t & a = get_color(src_it[x], alpha_t());
+                if ( a > 0)
                 {
-                    r = (a - 128) * 4;
-                    g = 255;
+                    r = (c.red() * a + 255) >> 8;
+                    g = (c.green() * a + 255) >> 8;
+                    b = (c.blue() * a + 255) >> 8;
                 }
-                else // >= 192
+            }
+        }
+    }
+    else if (size > 1)
+    {
+        // interpolate multiple stops
+        agg::gradient_lut<agg::color_interpolator<agg::rgba8> > grad_lut;
+        double step = 1.0/(size-1);
+        double offset = 0.0;
+        for ( mapnik::filter::color_stop const& stop : op)
+        {
+            mapnik::color const& c = stop.color;
+            double stop_offset = stop.offset;
+            if (stop_offset == 0)
+            {
+                stop_offset = offset;
+            }
+            grad_lut.add_color(stop_offset, agg::rgba(c.red()/256.0,
+                                                      c.green()/256.0,
+                                                      c.blue()/256.0,
+                                                      c.alpha()/256.0));
+            offset += step;
+        }
+        if (grad_lut.build_lut())
+        {
+            rgba8_view_t src_view = rgba8_view(src);
+            for (int y=0; y<src_view.height(); ++y)
+            {
+                rgba8_view_t::x_iterator src_it = src_view.row_begin(y);
+                for (int x=0; x<src_view.width(); ++x)
                 {
-                    r = 255;
-                    g = 255 - ((a - 192) * 4);
+                    uint8_t & r = get_color(src_it[x], red_t());
+                    uint8_t & g = get_color(src_it[x], green_t());
+                    uint8_t & b = get_color(src_it[x], blue_t());
+                    uint8_t & a = get_color(src_it[x], alpha_t());
+                    if ( a > 0)
+                    {
+                        agg::rgba8 c = grad_lut[a];
+                        r = (c.r * a + 255) >> 8;
+                        g = (c.g * a + 255) >> 8;
+                        b = (c.b * a + 255) >> 8;
+                        if (r>a) r=a;
+                        if (g>a) g=a;
+                        if (b>a) b=a;
+        #if 0
+                        // rainbow
+                        r = 0;
+                        g = 0;
+                        b = 0;
+                        if (a < 64)
+                        {
+                            g = a * 4;
+                            b = 255;
+                        }
+                        else if (a >= 64 && a < 128)
+                        {
+                            g = 255;
+                            b = 255 - ((a - 64) * 4);
+                        }
+                        else if (a >= 128 && a < 192)
+                        {
+                            r = (a - 128) * 4;
+                            g = 255;
+                        }
+                        else // >= 192
+                        {
+                            r = 255;
+                            g = 255 - ((a - 192) * 4);
+                        }
+                        r = (r * a + 255) >> 8;
+                        g = (g * a + 255) >> 8;
+                        b = (b * a + 255) >> 8;
+        #endif
+                    }
                 }
-                r = (r * a + 255) >> 8;
-                g = (g * a + 255) >> 8;
-                b = (b * a + 255) >> 8;
-#endif
             }
         }
     }
 }
 
-/*
 template <typename Src>
-void apply_filter(Src & src, hsla const& transform)
+void apply_filter(Src & src, scale_hsla const& transform)
 {
     using namespace boost::gil;
     bool tinting = !transform.is_identity();
@@ -504,79 +603,75 @@ void apply_filter(Src & src, hsla const& transform)
                 uint8_t & g = get_color(src_it[x], green_t());
                 uint8_t & b = get_color(src_it[x], blue_t());
                 uint8_t & a = get_color(src_it[x], alpha_t());
-                double a2 = a/255.0;
-                double a1 = a2;
-                if (set_alpha && a2 > 0.01)
+                double r2 = static_cast<double>(r)/255.0;
+                double g2 = static_cast<double>(g)/255.0;
+                double b2 = static_cast<double>(b)/255.0;
+                double a2 = static_cast<double>(a)/255.0;
+                // demultiply
+                if (a2 <= 0.0)
                 {
-                    a2 = transform.a0 + (a2 * (transform.a1 - transform.a0));
-                    a = static_cast<unsigned>(std::floor((a2 * 255.0) +.5));
-                    if (a > 255) a = 255;
-                    if (a < 0) a = 0;
+                    r = g = b = 0;
+                    continue;
                 }
-                if (tinting && a2 > 0.01)
+                else
                 {
-                    double h;
-                    double s;
-                    double l;
-                    // demultiply
-                    if (a1 <= 0.0)
+                    r2 /= a2;
+                    g2 /= a2;
+                    b2 /= a2;
+                }
+                if (set_alpha)
+                {
+                    a2 = transform.a0 + (a2 * (transform.a1 - transform.a0));
+                    if (a2 <= 0)
                     {
-                        r = g = b = 0;
+                        r = g = b = a = 0;
                         continue;
                     }
-                    else if (a1 < 1)
+                    else if (a2 > 1)
+                    {
+                        a2 = 1;
+                        a = 255;
+                    }
+                    else
                     {
-                        r /= a1;
-                        g /= a1;
-                        b /= a1;
+                        a = static_cast<uint8_t>(std::floor((a2 * 255.0) +.5));
                     }
-                    rgb2hsl(r,g,b,h,s,l);
+                }
+                if (tinting)
+                {
+                    double h;
+                    double s;
+                    double l;
+                    rgb2hsl(r2,g2,b2,h,s,l);
                     double h2 = transform.h0 + (h * (transform.h1 - transform.h0));
                     double s2 = transform.s0 + (s * (transform.s1 - transform.s0));
                     double l2 = transform.l0 + (l * (transform.l1 - transform.l0));
-                    if (h2 > 1) { std::clog << "h2: " << h2 << "\n"; h2 = 1; }
-                    else if (h2 < 0) { std::clog << "h2: " << h2 << "\n"; h2 = 0; }
-                    if (s2 > 1) { std::clog << "h2: " << h2 << "\n"; s2 = 1; }
-                    else if (s2 < 0) { std::clog << "s2: " << s2 << "\n"; s2 = 0; }
-                    if (l2 > 1) { std::clog << "h2: " << h2 << "\n"; l2 = 1; }
-                    else if (l2 < 0) { std::clog << "l2: " << l2 << "\n"; l2 = 0; }
-                    hsl2rgb(h2,s2,l2,r,g,b);
-                    // premultiply
-                    // we only work with premultiplied source,
-                    // thus all color values must be <= alpha
-                    r *= a2;
-                    g *= a2;
-                    b *= a2;
-                }
-                else
-                {
-                    // demultiply
-                    if (a1 <= 0.0)
-                    {
-                        r = g = b = 0;
-                        continue;
-                    }
-                    else if (a1 < 1)
-                    {
-                        r /= a1;
-                        g /= a1;
-                        b /= a1;
-                    }
-                    // premultiply
-                    // we only work with premultiplied source,
-                    // thus all color values must be <= alpha
-                    r *= a2;
-                    g *= a2;
-                    b *= a2;
+                    if (h2 > 1) { h2 = 1; }
+                    else if (h2 < 0) { h2 = 0; }
+                    if (s2 > 1) { s2 = 1; }
+                    else if (s2 < 0) { s2 = 0; }
+                    if (l2 > 1) { l2 = 1; }
+                    else if (l2 < 0) { l2 = 0; }
+                    hsl2rgb(h2,s2,l2,r2,g2,b2);
                 }
+                // premultiply
+                r2 *= a2;
+                g2 *= a2;
+                b2 *= a2;
+                r = static_cast<uint8_t>(std::floor((r2*255.0)+.5));
+                g = static_cast<uint8_t>(std::floor((g2*255.0)+.5));
+                b = static_cast<uint8_t>(std::floor((b2*255.0)+.5));
+                // all color values must be <= alpha
+                if (r>a) r=a;
+                if (g>a) g=a;
+                if (b>a) b=a;
             }
         }
     }
 }
-*/
 
 template <typename Src>
-void apply_filter(Src & src, gray const& op)
+void apply_filter(Src & src, gray const& /*op*/)
 {
     using namespace boost::gil;
 
@@ -626,14 +721,14 @@ void x_gradient_impl(Src const& src_view, Dst const& dst_view)
 }
 
 template <typename Src>
-void apply_filter(Src & src, x_gradient const& op)
+void apply_filter(Src & src, x_gradient const& /*op*/)
 {
     double_buffer<Src> tb(src);
     x_gradient_impl(tb.src_view, tb.dst_view);
 }
 
 template <typename Src>
-void apply_filter(Src & src, y_gradient const& op)
+void apply_filter(Src & src, y_gradient const& /*op*/)
 {
     double_buffer<Src> tb(src);
     x_gradient_impl(rotated90ccw_view(tb.src_view),
@@ -641,7 +736,7 @@ void apply_filter(Src & src, y_gradient const& op)
 }
 
 template <typename Src>
-void apply_filter(Src & src, invert const& op)
+void apply_filter(Src & src, invert const& /*op*/)
 {
     using namespace boost::gil;
 
@@ -666,7 +761,7 @@ void apply_filter(Src & src, invert const& op)
 }
 
 template <typename Src>
-struct filter_visitor : boost::static_visitor<void>
+struct filter_visitor : util::static_visitor<void>
 {
     filter_visitor(Src & src)
     : src_(src) {}
@@ -680,6 +775,21 @@ struct filter_visitor : boost::static_visitor<void>
     Src & src_;
 };
 
+struct filter_radius_visitor : util::static_visitor<void>
+{
+    int & radius_;
+    filter_radius_visitor(int & radius)
+        : radius_(radius) {}
+    template <typename T>
+    void operator () (T const& /*filter*/) {}
+
+    void operator () (agg_stack_blur const& op)
+    {
+        if (static_cast<int>(op.rx) > radius_) radius_ = static_cast<int>(op.rx);
+        if (static_cast<int>(op.ry) > radius_) radius_ = static_cast<int>(op.ry);
+    }
+};
+
 }}
 
 #endif // MAPNIK_IMAGE_FILTER_HPP
diff --git a/include/mapnik/image_filter_grammar.hpp b/include/mapnik/image_filter_grammar.hpp
index 4f45232..9f94a3b 100644
--- a/include/mapnik/image_filter_grammar.hpp
+++ b/include/mapnik/image_filter_grammar.hpp
@@ -24,13 +24,28 @@
 #define MAPNIK_IMAGE_FILITER_GRAMMAR_HPP
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
 #include <boost/fusion/include/adapt_struct.hpp>
+#pragma GCC diagnostic pop
+
 // mapnik
 #include <mapnik/css_color_grammar.hpp>
-#include <mapnik/image_filter.hpp>
+#include <mapnik/color.hpp>
+
 // stl
-#include <vector>
+#include <cmath>
+
+namespace mapnik {
+
+namespace filter {
+struct color_stop;
+struct colorize_alpha;
+}
+
+}
 
 BOOST_FUSION_ADAPT_STRUCT(
     mapnik::filter::color_stop,
@@ -47,7 +62,7 @@ struct percent_offset_impl
     template <typename T>
     struct result
     {
-        typedef double type;
+        using type = double;
     };
 
     double operator() (double val) const
@@ -67,14 +82,15 @@ struct image_filter_grammar :
     qi::rule<Iterator, ContType(), qi::ascii::space_type> start;
     qi::rule<Iterator, ContType(), qi::ascii::space_type> filter;
     qi::rule<Iterator, qi::locals<int,int>, void(ContType&), qi::ascii::space_type> agg_blur_filter;
-    //qi::rule<Iterator, qi::locals<double,double,double,double,double,double,double,double>,
-    //         void(ContType&), qi::ascii::space_type> hsla_filter;
+    qi::rule<Iterator, qi::locals<double,double,double,double,double,double,double,double>,
+             void(ContType&), qi::ascii::space_type> scale_hsla_filter;
     qi::rule<Iterator, qi::locals<mapnik::filter::colorize_alpha, mapnik::filter::color_stop>, void(ContType&), qi::ascii::space_type> colorize_alpha_filter;
     qi::rule<Iterator, qi::ascii::space_type> no_args;
     qi::uint_parser< unsigned, 10, 1, 3 > radius_;
     css_color_grammar<Iterator> css_color_;
     qi::rule<Iterator,void(mapnik::filter::color_stop &),qi::ascii::space_type> color_stop_offset;
     phoenix::function<percent_offset_impl> percent_offset;
+    qi::rule<Iterator, qi::locals<color>, void(ContType&), qi::ascii::space_type> color_to_alpha_filter;
 };
 
 }
diff --git a/include/mapnik/image_filter_grammar_impl.hpp b/include/mapnik/image_filter_grammar_impl.hpp
new file mode 100644
index 0000000..38fbcc1
--- /dev/null
+++ b/include/mapnik/image_filter_grammar_impl.hpp
@@ -0,0 +1,129 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/image_filter_types.hpp>
+#include <mapnik/image_filter_grammar.hpp>
+
+// spirit
+#include <boost/spirit/include/phoenix.hpp>
+
+namespace mapnik {
+
+namespace qi = boost::spirit::qi;
+namespace phoenix = boost::phoenix;
+
+template <typename Iterator, typename ContType>
+image_filter_grammar<Iterator,ContType>::image_filter_grammar()
+    : image_filter_grammar::base_type(start)
+{
+    qi::lit_type lit;
+    qi::_val_type _val;
+    qi::_1_type _1;
+    qi::_a_type _a;
+    qi::_b_type _b;
+    qi::_c_type _c;
+    qi::_d_type _d;
+    qi::_e_type _e;
+    qi::_f_type _f;
+    qi::_g_type _g;
+    qi::_h_type _h;
+    qi::_r1_type _r1;
+    qi::eps_type eps;
+    qi::char_type char_;
+    qi::double_type double_;
+    qi::no_skip_type no_skip;
+    using phoenix::push_back;
+    using phoenix::construct;
+    using phoenix::at_c;
+    start = -(filter % no_skip[*char_(", ")])
+        ;
+
+    filter =
+        lit("emboss") >> no_args [push_back(_val,construct<mapnik::filter::emboss>())]
+        |
+        lit("blur") >> no_args [push_back(_val,construct<mapnik::filter::blur>())]
+        |
+        lit("gray") >> no_args [push_back(_val,construct<mapnik::filter::gray>())]
+        |
+        lit("edge-detect") >> no_args [push_back(_val,construct<mapnik::filter::edge_detect>())]
+        |
+        lit("sobel") >> no_args [push_back(_val,construct<mapnik::filter::sobel>())]
+        |
+        lit("sharpen") >> no_args [push_back(_val,construct<mapnik::filter::sharpen>())]
+        |
+        lit("x-gradient") >> no_args [push_back(_val,construct<mapnik::filter::x_gradient>())]
+        |
+        lit("y-gradient") >> no_args [push_back(_val,construct<mapnik::filter::y_gradient>())]
+        |
+        lit("invert") >> no_args [push_back(_val,construct<mapnik::filter::invert>())]
+        |
+        agg_blur_filter(_val)
+        |
+        scale_hsla_filter(_val)
+        |
+        colorize_alpha_filter(_val)
+        |
+        color_to_alpha_filter(_val)
+        ;
+
+    agg_blur_filter = lit("agg-stack-blur")[_a = 1, _b = 1]
+        >> -( lit('(') >> -( radius_[_a = _1][_b = _1]
+                             >> -(lit(',') >> radius_[_b = _1]))
+              >> lit(')'))
+        [push_back(_r1,construct<mapnik::filter::agg_stack_blur>(_a,_b))]
+        ;
+
+    scale_hsla_filter = lit("scale-hsla")
+        >> lit('(')
+        >> double_[_a = _1] >> lit(',') >> double_[_b = _1] >> lit(',')
+        >> double_[_c = _1] >> lit(',') >> double_[_d = _1] >> lit(',')
+        >> double_[_e = _1] >> lit(',') >> double_[_f = _1] >> lit(',')
+        >> double_[_g = _1] >> lit(',') >> double_[_h = _1] >> lit(')')
+        [push_back(_r1, construct<mapnik::filter::scale_hsla>(_a,_b,_c,_d,_e,_f,_g,_h))]
+        ;
+
+    colorize_alpha_filter = lit("colorize-alpha")[_a = construct<mapnik::filter::colorize_alpha>()]
+        >> lit('(')
+        >> (css_color_[at_c<0>(_b) = _1, at_c<1>(_b) = 0]
+            >> -color_stop_offset(_b)) [push_back(_a,_b)]
+        >> -(+(lit(',') >> css_color_[at_c<0>(_b) =_1,at_c<1>(_b) = 0]
+             >> -color_stop_offset(_b))[push_back(_a,_b)])
+        >> lit(')') [push_back(_r1,_a)]
+        ;
+
+    color_stop_offset = (double_ >> lit('%'))[at_c<1>(_r1) = percent_offset(_1)]
+        |
+        double_[at_c<1>(_r1) = _1]
+        ;
+
+    color_to_alpha_filter = lit("color-to-alpha")
+        >> lit('(')
+        >> css_color_[_a = _1]
+        >> lit(')')
+        [push_back(_r1,construct<mapnik::filter::color_to_alpha>(_a))]
+        ;
+
+    no_args = -(lit('(') >> lit(')'));
+}
+
+}
diff --git a/include/mapnik/image_filter_types.hpp b/include/mapnik/image_filter_types.hpp
index d464a30..0a8abb1 100644
--- a/include/mapnik/image_filter_types.hpp
+++ b/include/mapnik/image_filter_types.hpp
@@ -26,38 +26,61 @@
 // mapnik
 #include <mapnik/config.hpp>
 #include <mapnik/color.hpp>
-// boost
-#include <boost/variant.hpp>
-#include <boost/variant/variant_fwd.hpp>
+#include <mapnik/config_error.hpp>
+#include <mapnik/util/variant.hpp>
+
 // stl
 #include <vector>
 #include <ostream>
 #include <iterator>  // for std::back_insert_iterator
+#include <functional> // std::ref
 
 namespace mapnik { namespace filter {
 
-struct blur {};
-struct emboss {};
-struct sharpen {};
-struct edge_detect {};
-struct sobel {};
-struct gray {};
-struct x_gradient {};
-struct y_gradient {};
-struct invert {};
+struct image_filter_base
+{
+    inline bool operator==(image_filter_base const& ) const
+    {
+        return true;
+    }
+};
+
+struct blur : image_filter_base {};
+struct emboss : image_filter_base {};
+struct sharpen : image_filter_base {};
+struct edge_detect : image_filter_base {};
+struct sobel : image_filter_base {};
+struct gray : image_filter_base {};
+struct x_gradient : image_filter_base {};
+struct y_gradient : image_filter_base {};
+struct invert : image_filter_base {};
 
-struct agg_stack_blur
+struct agg_stack_blur : image_filter_base
 {
     agg_stack_blur(unsigned rx_, unsigned ry_)
         : rx(rx_),ry(ry_) {}
+    inline bool operator==(agg_stack_blur const& rhs) const
+    {
+        return rx == rhs.rx && ry == rhs.ry;
+    }
     unsigned rx;
     unsigned ry;
 };
 
-/*
-struct hsla
+struct color_to_alpha : image_filter_base
+{
+    color_to_alpha(mapnik::color const& c)
+        : color(c) {}
+    inline bool operator==(color_to_alpha const& rhs) const
+    {
+        return color == rhs.color;
+    }
+    mapnik::color color;
+};
+
+struct scale_hsla : image_filter_base
 {
-    hsla(double _h0, double _h1,
+    scale_hsla(double _h0, double _h1,
          double _s0, double _s1,
          double _l0, double _l1,
          double _a0, double _a1) :
@@ -68,7 +91,19 @@ struct hsla
       l0(_l0),
       l1(_l1),
       a0(_a0),
-      a1(_a1) {}
+      a1(_a1) {
+          if (h0 < 0 || h0 > 1 ||
+              h1 < 0 || h1 > 1 ||
+              s0 < 0 || s0 > 1 ||
+              s1 < 0 || s1 > 1 ||
+              l0 < 0 || l0 > 1 ||
+              l1 < 0 || l1 > 1 ||
+              a0 < 0 || a0 > 1 ||
+              a1 < 0 || a1 > 1)
+          {
+              throw config_error("scale-hsla values must be between 0 and 1");
+          }
+      }
     inline bool is_identity() const {
         return (h0 == 0 &&
                 h1 == 1 &&
@@ -81,14 +116,19 @@ struct hsla
         return (a0 == 0 &&
                 a1 == 1);
     }
-    std::string to_string() const {
-        std::ostringstream s;
-        s << h0 << "x" << h1 << ";"
-          << s0 << "x" << s1 << ";"
-          << l0 << "x" << l1 << ";"
-          << a0 << "x" << a1;
-        return s.str();
+
+    inline bool operator==(scale_hsla const& rhs) const
+    {
+        return h0 == rhs.h0 &&
+            h1 == rhs.h1 &&
+            s0 == rhs.s0 &&
+            s1 == rhs.s1 &&
+            l0 == rhs.l0 &&
+            l1 == rhs.l1 &&
+            a0 == rhs.a0 &&
+            a1 == rhs.a1;
     }
+
     double h0;
     double h1;
     double s0;
@@ -98,13 +138,16 @@ struct hsla
     double a0;
     double a1;
 };
-*/
 
 struct color_stop
 {
-    color_stop() {}
+    color_stop()
+        : color(),
+          offset(0.0) {}
     color_stop(mapnik::color const& c, double val = 0.0)
-        : color(c),offset(val) {}
+        : color(c),
+          offset(val) {}
+    bool operator==(color_stop const& rhs) const { return color == rhs.color && offset == rhs.offset;}
     mapnik::color color;
     double offset;
 };
@@ -114,18 +157,19 @@ struct colorize_alpha : std::vector<color_stop>
     colorize_alpha() {}
 };
 
-typedef boost::variant<filter::blur,
-                       filter::gray,
-                       filter::agg_stack_blur,
-                       filter::emboss,
-                       filter::sharpen,
-                       filter::edge_detect,
-                       filter::sobel,
-                       filter::x_gradient,
-                       filter::y_gradient,
-                       filter::invert,
-                       //filter::hsla,
-                       filter::colorize_alpha> filter_type;
+using filter_type =  util::variant<filter::blur,
+                                   filter::gray,
+                                   filter::agg_stack_blur,
+                                   filter::emboss,
+                                   filter::sharpen,
+                                   filter::edge_detect,
+                                   filter::sobel,
+                                   filter::x_gradient,
+                                   filter::y_gradient,
+                                   filter::invert,
+                                   filter::scale_hsla,
+                                   filter::colorize_alpha,
+                                   filter::color_to_alpha>;
 
 inline std::ostream& operator<< (std::ostream& os, blur)
 {
@@ -145,16 +189,21 @@ inline std::ostream& operator<< (std::ostream& os, agg_stack_blur const& filter)
     return os;
 }
 
-/*
-inline std::ostream& operator<< (std::ostream& os, hsla const& filter)
+inline std::ostream& operator<< (std::ostream& os, color_to_alpha const& filter)
+{
+    os << "color-to-alpha(" << filter.color << ')';
+    return os;
+}
+
+inline std::ostream& operator<< (std::ostream& os, scale_hsla const& filter)
 {
-    os << "hsla(" << filter.h0 << 'x' << filter.h1 << ':'
-                  << filter.s0 << 'x' << filter.s1 << ':'
-                  << filter.l0 << 'x' << filter.l1 << ':'
-                  << filter.a0 << 'x' << filter.a1 << ')';
+    os << "scale-hsla("
+                  << filter.h0 << ',' << filter.h1 << ','
+                  << filter.s0 << ',' << filter.s1 << ','
+                  << filter.l0 << ',' << filter.l1 << ','
+                  << filter.a0 << ',' << filter.a1 << ')';
     return os;
 }
-*/
 
 inline std::ostream& operator<< (std::ostream& os, emboss)
 {
@@ -198,7 +247,46 @@ inline std::ostream& operator<< (std::ostream& os, invert)
     return os;
 }
 
-inline std::ostream& operator<< (std::ostream& os, filter_type const& filter);
+inline std::ostream& operator<< (std::ostream& os, colorize_alpha const& filter)
+{
+    os << "colorize-alpha(";
+    bool first = true;
+    for ( mapnik::filter::color_stop const& stop : filter)
+    {
+        if (!first) os << ",";
+        else first = false;
+        os << stop.color;
+        if (stop.offset > 0)
+        {
+            os << " " << stop.offset;
+        }
+    }
+    os << ')';
+    return os;
+}
+
+
+template <typename Out>
+struct to_string_visitor : util::static_visitor<void>
+{
+    to_string_visitor(Out & out)
+    : out_(out) {}
+
+    template <typename T>
+    void operator () (T const& filter_tag)
+    {
+        out_ << filter_tag;
+    }
+
+    Out & out_;
+};
+
+inline std::ostream& operator<< (std::ostream& os, filter_type const& filter)
+{
+    to_string_visitor<std::ostream> visitor(os);
+    util::apply_visitor(std::ref(visitor), filter);
+    return os;
+}
 
 MAPNIK_DECL bool generate_image_filters(std::back_insert_iterator<std::string> & sink, std::vector<filter_type> const& v);
 
diff --git a/include/mapnik/image_reader.hpp b/include/mapnik/image_reader.hpp
index c30d1da..e571ba0 100644
--- a/include/mapnik/image_reader.hpp
+++ b/include/mapnik/image_reader.hpp
@@ -57,13 +57,17 @@ struct MAPNIK_DECL image_reader : private mapnik::noncopyable
 {
     virtual unsigned width() const=0;
     virtual unsigned height() const=0;
+    virtual bool has_alpha() const=0;
     virtual bool premultiplied_alpha() const=0;
     virtual void read(unsigned x,unsigned y,image_data_32& image)=0;
     virtual ~image_reader() {}
 };
 
-bool register_image_reader(std::string const& type,image_reader* (*)(std::string const&));
-bool register_image_reader(std::string const& type,image_reader* (*)(char const*, std::size_t));
+template <typename...Args>
+bool register_image_reader(std::string const& type, image_reader* (* fun)(Args...))
+{
+    return factory<image_reader,std::string, Args...>::instance().register_product(type, fun);
+}
 
 MAPNIK_DECL image_reader* get_image_reader(std::string const& file,std::string const& type);
 MAPNIK_DECL image_reader* get_image_reader(std::string const& file);
diff --git a/include/mapnik/image_scaling.hpp b/include/mapnik/image_scaling.hpp
index d412eda..a7d8434 100644
--- a/include/mapnik/image_scaling.hpp
+++ b/include/mapnik/image_scaling.hpp
@@ -23,11 +23,15 @@
 #ifndef MAPNIK_IMAGE_SCALING_HPP
 #define MAPNIK_IMAGE_SCALING_HPP
 
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/image_data.hpp>
+
 // stl
-#include <string>
+#include <iosfwd>
 
+// boost
 #include <boost/optional.hpp>
-#include <mapnik/config.hpp>
 
 namespace mapnik
 {
@@ -50,34 +54,31 @@ enum scaling_method_e
     SCALING_MITCHELL,
     SCALING_SINC,
     SCALING_LANCZOS,
-    SCALING_BLACKMAN,
-    SCALING_BILINEAR8
+    SCALING_BLACKMAN
 };
 
-boost::optional<scaling_method_e> scaling_method_from_string(std::string const& name);
-boost::optional<std::string> scaling_method_to_string(scaling_method_e scaling_method);
+MAPNIK_DECL boost::optional<scaling_method_e> scaling_method_from_string(std::string const& name);
+MAPNIK_DECL boost::optional<std::string> scaling_method_to_string(scaling_method_e scaling_method);
 
 template <typename Image>
-void scale_image_agg(Image & target,
+MAPNIK_DECL void scale_image_agg(Image & target,
                       Image const& source,
                       scaling_method_e scaling_method,
                       double image_ratio_x,
                       double image_ratio_y,
-                      double x_off_f=0,
-                      double y_off_f=0,
-                      double filter_radius=2);
-
-template <typename Image>
-void scale_image_bilinear_old(Image & target,
-                              Image const& source,
-                              double x_off_f=0,
-                              double y_off_f=0);
+                      double x_off_f,
+                      double y_off_f,
+                      double filter_factor);
 
-template <typename Image>
-void scale_image_bilinear8(Image & target,
-                           Image const& source,
-                           double x_off_f=0,
-                           double y_off_f=0);
+extern template MAPNIK_DECL void scale_image_agg<mapnik::image_data_32>(
+                      mapnik::image_data_32 & target,
+                      mapnik::image_data_32 const& source,
+                      scaling_method_e scaling_method,
+                      double image_ratio_x,
+                      double image_ratio_y,
+                      double x_off_f,
+                      double y_off_f,
+                      double filter_radius);
 
 }
 #endif // MAPNIK_IMAGE_SCALING_HPP
diff --git a/include/mapnik/image_util.hpp b/include/mapnik/image_util.hpp
index 513a064..ec946b3 100644
--- a/include/mapnik/image_util.hpp
+++ b/include/mapnik/image_util.hpp
@@ -25,18 +25,20 @@
 
 // mapnik
 #include <mapnik/config.hpp>
-
-#ifdef _MSC_VER
-#include <mapnik/graphics.hpp>
-#endif
+#include <mapnik/image_data.hpp>
+#include <mapnik/image_view.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/optional.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <string>
 #include <cmath>
+#include <exception>
 
 namespace mapnik {
 
@@ -64,11 +66,13 @@ public:
 #if defined(HAVE_CAIRO)
 MAPNIK_DECL void save_to_cairo_file(mapnik::Map const& map,
                                     std::string const& filename,
-                                    double scale_factor=1.0);
+                                    double scale_factor=1.0,
+                                    double scale_denominator=0.0);
 MAPNIK_DECL void save_to_cairo_file(mapnik::Map const& map,
                                     std::string const& filename,
                                     std::string const& type,
-                                    double scale_factor=1.0);
+                                    double scale_factor=1.0,
+                                    double scale_denominator=0.0);
 #endif
 
 template <typename T>
@@ -102,6 +106,23 @@ MAPNIK_DECL std::string save_to_string(T const& image,
                                        rgba_palette const& palette);
 
 template <typename T>
+MAPNIK_DECL void save_to_stream
+(
+    T const& image,
+    std::ostream & stream,
+    std::string const& type,
+    rgba_palette const& palette
+);
+
+template <typename T>
+MAPNIK_DECL void save_to_stream
+(
+    T const& image,
+    std::ostream & stream,
+    std::string const& type
+);
+
+template <typename T>
 void save_as_png(T const& image,
                  std::string const& filename,
                  rgba_palette const& palette);
@@ -113,48 +134,54 @@ void save_as_jpeg(std::string const& filename,
                   T const& image);
 #endif
 
-inline bool is_png (std::string const& filename)
+inline bool is_png(std::string const& filename)
 {
     return boost::algorithm::iends_with(filename,std::string(".png"));
 }
 
-inline bool is_jpeg (std::string const& filename)
+inline bool is_jpeg(std::string const& filename)
 {
     return boost::algorithm::iends_with(filename,std::string(".jpg")) ||
         boost::algorithm::iends_with(filename,std::string(".jpeg"));
 }
 
-inline bool is_tiff (std::string const& filename)
+inline bool is_tiff(std::string const& filename)
 {
     return boost::algorithm::iends_with(filename,std::string(".tif")) ||
         boost::algorithm::iends_with(filename,std::string(".tiff"));
 }
 
-inline bool is_pdf (std::string const& filename)
+inline bool is_pdf(std::string const& filename)
 {
     return boost::algorithm::iends_with(filename,std::string(".pdf"));
 }
 
-inline bool is_svg (std::string const& filename)
+inline bool is_svg(std::string const& filename)
 {
     return boost::algorithm::iends_with(filename,std::string(".svg"));
 }
 
-inline bool is_ps (std::string const& filename)
+inline bool is_ps(std::string const& filename)
 {
     return boost::algorithm::iends_with(filename,std::string(".ps"));
 }
 
+inline bool is_webp(std::string const& filename)
+{
+    return boost::algorithm::iends_with(filename,std::string(".webp"));
+}
+
 inline boost::optional<std::string> type_from_filename(std::string const& filename)
 
 {
-    typedef boost::optional<std::string> result_type;
+    using result_type = boost::optional<std::string>;
     if (is_png(filename)) return result_type("png");
     if (is_jpeg(filename)) return result_type("jpeg");
     if (is_tiff(filename)) return result_type("tiff");
     if (is_pdf(filename)) return result_type("pdf");
     if (is_svg(filename)) return result_type("svg");
     if (is_ps(filename)) return result_type("ps");
+    if (is_webp(filename)) return result_type("webp");
     return result_type();
 }
 
@@ -167,15 +194,6 @@ inline std::string guess_type( std::string const& filename )
     return "<unknown>";
 }
 
-template <typename T>
-double distance(T x0,T y0,T x1,T y1)
-{
-    double dx = x1-x0;
-    double dy = y1-y0;
-    return std::sqrt(dx * dx + dy * dy);
-}
-
-
 // add 1-px border around image - useful for debugging alignment issues
 template <typename T>
 void add_border(T & image)
@@ -194,7 +212,7 @@ void add_border(T & image)
 
 
 
-/////////// save_to_file ////////////////////////////////////////////////
+/////////// save_to_file //////////////////////////////////////////////////
 
 MAPNIK_DECL void save_to_file(image_32 const& image,
                               std::string const& file);
@@ -208,7 +226,7 @@ MAPNIK_DECL void save_to_file (image_32 const& image,
                                std::string const& type,
                                rgba_palette const& palette);
 
-//////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
 
 MAPNIK_DECL std::string save_to_string(image_32 const& image,
@@ -220,51 +238,90 @@ MAPNIK_DECL std::string save_to_string(image_32 const& image,
 
 ///////////////////////////////////////////////////////////////////////////
 
-#ifdef _MSC_VER
-template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
+MAPNIK_DECL void save_to_stream(image_32 const& image,
+                                std::ostream & stream,
+                                std::string const& type,
+                                rgba_palette const& palette);
+
+MAPNIK_DECL void save_to_stream(image_32 const& image,
+                                std::ostream & stream,
+                                std::string const& type);
+
+///////////////////////////////////////////////////////////////////////////
+
+extern template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
                                                       std::string const&,
                                                       std::string const&,
                                                       rgba_palette const&);
 
-template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
+extern template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
                                                       std::string const&,
                                                       std::string const&);
 
-template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
+extern template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
                                                       std::string const&,
                                                       rgba_palette const&);
 
-template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
+extern template MAPNIK_DECL void save_to_file<image_data_32>(image_data_32 const&,
                                                       std::string const&);
 
 
-template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
+extern template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
                                                                     std::string const&,
                                                                     std::string const&,
                                                                     rgba_palette const&);
 
-template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
+extern template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
                                                                     std::string const&,
                                                                     std::string const&);
 
-template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
+extern template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
                                                                     std::string const&,
                                                                     rgba_palette const&);
 
-template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
+extern template MAPNIK_DECL void save_to_file<image_view<image_data_32> > (image_view<image_data_32> const&,
                                                                     std::string const&);
 
+extern template MAPNIK_DECL std::string save_to_string<image_data_32>(image_data_32 const&,
+                                                               std::string const&);
 
-template MAPNIK_DECL std::string save_to_string<image_data_32>(image_data_32 const&,
+extern template MAPNIK_DECL std::string save_to_string<image_data_32>(image_data_32 const&,
                                                                std::string const&,
                                                                rgba_palette const&);
 
-template MAPNIK_DECL std::string save_to_string<image_view<image_data_32> > (image_view<image_data_32> const&,
+extern template MAPNIK_DECL std::string save_to_string<image_view<image_data_32> > (image_view<image_data_32> const&,
                                                                              std::string const&);
 
-template MAPNIK_DECL std::string save_to_string<image_view<image_data_32> > (image_view<image_data_32> const&,
+extern template MAPNIK_DECL std::string save_to_string<image_view<image_data_32> > (image_view<image_data_32> const&,
                                                                              std::string const&,
                                                                              rgba_palette const&);
+#ifdef _MSC_VER
+
+template MAPNIK_DECL void save_to_stream<image_data_32>(
+    image_data_32 const& image,
+    std::ostream & stream,
+    std::string const& type,
+    rgba_palette const& palette
+);
+
+template MAPNIK_DECL void save_to_stream<image_data_32>(
+    image_data_32 const& image,
+    std::ostream & stream,
+    std::string const& type
+);
+
+template MAPNIK_DECL void save_to_stream<image_view<image_data_32> > (
+    image_view<image_data_32> const& image,
+    std::ostream & stream,
+    std::string const& type,
+    rgba_palette const& palette
+);
+
+template MAPNIK_DECL void save_to_stream<image_view<image_data_32> > (
+    image_view<image_data_32> const& image,
+    std::ostream & stream,
+    std::string const& type
+);
 #endif
 
 }
diff --git a/include/mapnik/image_view.hpp b/include/mapnik/image_view.hpp
index 135125f..71921f0 100644
--- a/include/mapnik/image_view.hpp
+++ b/include/mapnik/image_view.hpp
@@ -29,7 +29,7 @@ template <typename T>
 class image_view
 {
 public:
-    typedef typename T::pixel_type pixel_type;
+    using pixel_type = typename T::pixel_type;
 
     image_view(unsigned x, unsigned y, unsigned width, unsigned height, T const& data)
         : x_(x),
@@ -39,7 +39,7 @@ public:
           data_(data)
     {
         if (x_ >= data_.width()) x_=data_.width()-1;
-        if (y_ >= data_.height()) x_=data_.height()-1;
+        if (y_ >= data_.height()) y_=data_.height()-1;
         if (x_ + width_ > data_.width()) width_= data_.width() - x_;
         if (y_ + height_ > data_.height()) height_= data_.height() - y_;
     }
@@ -88,6 +88,11 @@ public:
     {
         return data_.getRow(row + y_) + x_;
     }
+
+    inline const unsigned char* getBytes() const
+    {
+        return data_.getBytes();
+    }
     inline T& data()
     {
         return data_;
@@ -107,4 +112,3 @@ private:
 }
 
 #endif // MAPNIK_IMAGE_VIEW_HPP
-
diff --git a/include/mapnik/internal/dump_xml.hpp b/include/mapnik/internal/dump_xml.hpp
index 946607c..f807590 100644
--- a/include/mapnik/internal/dump_xml.hpp
+++ b/include/mapnik/internal/dump_xml.hpp
@@ -5,8 +5,8 @@
 namespace mapnik
 {
 
-/* Debug dump ptree XML representation.
- */
+// Debug dump ptree XML representation.
+
 void dump_xml(xml_node const& xml, unsigned level=0)
 {
     std::string indent;
@@ -15,21 +15,17 @@ void dump_xml(xml_node const& xml, unsigned level=0)
     {
         indent += "    ";
     }
-    xml_node::attribute_map const& attr = xml.get_attributes();
+    xml_node::attribute_map const& attr_map = xml.get_attributes();
     std::cerr << indent <<"[" << xml.name();
-    xml_node::attribute_map::const_iterator aitr = attr.begin();
-    xml_node::attribute_map::const_iterator aend = attr.end();
-    for (;aitr!=aend; aitr++)
+    for (auto const& attr : attr_map)
     {
-        std::cerr << " (" << aitr->first << ", " << aitr->second.value << ", " << aitr->second.processed << ")";
+        std::cerr << " (" << attr.first << ", " << attr.second.value << ", " << attr.second.processed << ")";
     }
     std::cerr << "]" << "\n";
     if (xml.is_text()) std::cerr << indent << "text: '" << xml.text() << "'\n";
-    xml_node::const_iterator itr = xml.begin();
-    xml_node::const_iterator end = xml.end();
-    for (; itr!=end; itr++)
+    for (auto const& child : xml)
     {
-        dump_xml(*itr, level+1);
+        dump_xml(child, level+1);
     }
     std::cerr << indent << "[/" << xml.name() << "]" << "\n";
 }
diff --git a/include/mapnik/jpeg_io.hpp b/include/mapnik/jpeg_io.hpp
index 90be38d..3e61811 100644
--- a/include/mapnik/jpeg_io.hpp
+++ b/include/mapnik/jpeg_io.hpp
@@ -25,8 +25,7 @@
 
 #if defined(HAVE_JPEG)
 
-#include <mapnik/global.hpp>
-
+#include <new>
 #include <ostream>
 
 extern "C"
@@ -94,7 +93,7 @@ void save_as_jpeg(T1 & file,int quality, T2 const& image)
 
     cinfo.dest = (struct jpeg_destination_mgr *)(*cinfo.mem->alloc_small)
         ((j_common_ptr) &cinfo, JPOOL_PERMANENT, sizeof(jpeg_detail::dest_mgr));
-    jpeg_detail::dest_mgr * dest = (jpeg_detail::dest_mgr*) cinfo.dest;
+    jpeg_detail::dest_mgr * dest = reinterpret_cast<jpeg_detail::dest_mgr*>(cinfo.dest);
     dest->pub.init_destination = jpeg_detail::init_destination;
     dest->pub.empty_output_buffer = jpeg_detail::empty_output_buffer;
     dest->pub.term_destination = jpeg_detail::term_destination;
@@ -116,15 +115,9 @@ void save_as_jpeg(T1 & file,int quality, T2 const& image)
         int index=0;
         for (int i=0;i<width;++i)
         {
-#ifdef MAPNIK_BIG_ENDIAN
-            row[index++]=(imageRow[i]>>24)&0xff;
-            row[index++]=(imageRow[i]>>16)&0xff;
-            row[index++]=(imageRow[i]>>8)&0xff;
-#else
             row[index++]=(imageRow[i])&0xff;
             row[index++]=(imageRow[i]>>8)&0xff;
             row[index++]=(imageRow[i]>>16)&0xff;
-#endif
         }
         row_pointer[0] = &row[0];
         (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
@@ -139,4 +132,3 @@ void save_as_jpeg(T1 & file,int quality, T2 const& image)
 #endif
 
 #endif // MAPNIK_JPEG_IO_HPP
-
diff --git a/include/mapnik/json/error_handler.hpp b/include/mapnik/json/error_handler.hpp
new file mode 100644
index 0000000..f1a4f8b
--- /dev/null
+++ b/include/mapnik/json/error_handler.hpp
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_JSON_ERROR_HANDLER_HPP
+#define MAPNIK_JSON_ERROR_HANDLER_HPP
+
+#include <string>
+#include <sstream>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace mapnik { namespace json {
+
+template <typename Iterator>
+struct error_handler
+{
+    using result_type = void;
+    void operator() (
+        Iterator, Iterator last,
+        Iterator err_pos, boost::spirit::info const& what) const
+    {
+        std::stringstream s;
+        s << what << " expected but got: " << std::string(err_pos, std::min(err_pos + 16,last));
+        throw std::runtime_error(s.str());
+    }
+};
+
+}}
+
+#endif // MAPNIK_JSON_ERROR_HANDLER_HPP
diff --git a/include/mapnik/json/feature_collection_grammar.hpp b/include/mapnik/json/feature_collection_grammar.hpp
index 43b8db6..9f5e24b 100644
--- a/include/mapnik/json/feature_collection_grammar.hpp
+++ b/include/mapnik/json/feature_collection_grammar.hpp
@@ -25,6 +25,7 @@
 
 // mapnik
 #include <mapnik/unicode.hpp>
+#include <mapnik/json/geometry_grammar.hpp>
 #include <mapnik/json/feature_grammar.hpp>
 #include <mapnik/feature.hpp>
 
@@ -41,80 +42,32 @@ using standard_wide::space_type;
 
 struct generate_id
 {
-    typedef int result_type;
-    
+    using result_type = int;
+
     generate_id(int start)
         : id_(start) {}
-    
+
     int operator() () const
     {
         return id_++;
-    }    
+    }
     mutable int id_;
 };
 
 template <typename Iterator, typename FeatureType>
 struct feature_collection_grammar :
-    qi::grammar<Iterator, std::vector<feature_ptr>(), space_type>
+    qi::grammar<Iterator, std::vector<feature_ptr>(context_ptr const&), space_type>
 {
-    feature_collection_grammar(context_ptr const& ctx, mapnik::transcoder const& tr)
-        : feature_collection_grammar::base_type(feature_collection,"feature-collection"),
-          ctx_(ctx),
-          feature_g(tr),
-          generate_id_(1)
-    {
-        using qi::lit;
-        using qi::eps;
-        using qi::_a;
-        using qi::_b;
-        using qi::_val;
-        using qi::_r1;
-        using phoenix::push_back;
-        using phoenix::construct;
-        using phoenix::new_;
-        using phoenix::val;
-
-        feature_collection = lit('{') >> (type | features) % lit(",") >> lit('}')
-            ;
-        
-        type = lit("\"type\"") > lit(":") > lit("\"FeatureCollection\"")
-            ;
-
-        features = lit("\"features\"")
-            > lit(":")
-            > lit('[')
-            > -(feature(_val) % lit(','))
-            > lit(']')
-            ;
-        
-        feature = eps[_a = phoenix::construct<mapnik::feature_ptr>(new_<mapnik::feature_impl>(ctx_,generate_id_()))]
-            >> feature_g(*_a)[push_back(_r1,_a)]
-            ;
-        
-        type.name("type");
-        features.name("features");
-        feature.name("feature");
-        feature_g.name("feature-grammar");
-        
-        qi::on_error<qi::fail>
-            (
-                feature_collection
-                , std::clog
-                << phoenix::val("Error parsing GeoJSON ")
-                << qi::_4                       
-                << phoenix::val(" here: \"")
-                << construct<std::string>(qi::_3, qi::_2) 
-                << phoenix::val("\"")
-                << std::endl
-                );
-    }
-    
-    context_ptr ctx_;
-    qi::rule<Iterator, std::vector<feature_ptr>(), space_type> feature_collection; // START
-    qi::rule<Iterator, space_type> type;
-    qi::rule<Iterator, std::vector<feature_ptr>(), space_type> features;
-    qi::rule<Iterator, qi::locals<feature_ptr,int>, void(std::vector<feature_ptr>&), space_type> feature;
+    feature_collection_grammar(mapnik::transcoder const& tr);
     feature_grammar<Iterator,FeatureType> feature_g;
+    geometry_grammar<Iterator> geometry_g;
+    phoenix::function<extract_geometry> extract_geometry_;
+    qi::rule<Iterator, std::vector<feature_ptr>(context_ptr const&), space_type> start; // START
+    qi::rule<Iterator, std::vector<feature_ptr>(context_ptr const&), space_type> feature_collection;
+    qi::rule<Iterator, space_type> type;
+    qi::rule<Iterator, std::vector<feature_ptr>(context_ptr const&), space_type> features;
+    qi::rule<Iterator, qi::locals<feature_ptr,int>, void(context_ptr const& ctx, std::vector<feature_ptr>&), space_type> feature;
+    qi::rule<Iterator, qi::locals<feature_ptr,int>, void(context_ptr const& ctx, std::vector<feature_ptr>&), space_type> feature_from_geometry;
     boost::phoenix::function<generate_id> generate_id_;
 };
 
diff --git a/include/mapnik/json/feature_collection_grammar_impl.hpp b/include/mapnik/json/feature_collection_grammar_impl.hpp
new file mode 100644
index 0000000..93c49b7
--- /dev/null
+++ b/include/mapnik/json/feature_collection_grammar_impl.hpp
@@ -0,0 +1,100 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+
+// mapnik
+#include <mapnik/json/error_handler.hpp>
+#include <mapnik/json/feature_collection_grammar.hpp>
+
+// spirit::qi
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix.hpp>
+
+namespace mapnik { namespace json {
+
+template <typename Iterator, typename FeatureType>
+feature_collection_grammar<Iterator,FeatureType>::feature_collection_grammar(mapnik::transcoder const& tr)
+        : feature_collection_grammar::base_type(start,"start"),
+          feature_g(tr),
+          generate_id_(1)
+{
+        qi::lit_type lit;
+        qi::eps_type eps;
+        qi::_4_type _4;
+        qi::_3_type _2;
+        qi::_2_type _3;
+        qi::_a_type _a;
+        qi::_val_type _val;
+        qi::_r1_type _r1;
+        qi::_r2_type _r2;
+        using phoenix::push_back;
+        using phoenix::construct;
+        using phoenix::new_;
+        using phoenix::val;
+
+        start = feature_collection(_r1) | feature_from_geometry(_r1, _val) | feature(_r1, _val)
+            ;
+
+        feature_collection = lit('{') >> (type | features(_r1) | feature_g.json_.key_value) % lit(',') >> lit('}')
+            ;
+
+        type = lit("\"type\"") >> lit(':') >> lit("\"FeatureCollection\"")
+            ;
+
+        features = lit("\"features\"")
+            >> lit(':')
+            >> lit('[')
+            >> -(feature(_r1, _val) % lit(','))
+            >> lit(']')
+            ;
+
+        feature = eps[_a = phoenix::construct<mapnik::feature_ptr>(new_<mapnik::feature_impl>(_r1, generate_id_()))]
+            >> feature_g(*_a)[push_back(_r2,_a)]
+            ;
+
+        feature_from_geometry =
+            eps[_a = phoenix::construct<mapnik::feature_ptr>(new_<mapnik::feature_impl>(_r1, generate_id_()))]
+            >> geometry_g(extract_geometry_(*_a)) [push_back(_r2, _a)]
+            ;
+
+        start.name("start");
+        type.name("type");
+        features.name("features");
+        feature.name("feature");
+        feature_from_geometry.name("feature-from-geometry");
+        feature_g.name("feature-grammar");
+        geometry_g.name("geometry-grammar");
+
+        qi::on_error<qi::fail>
+            (
+                feature_collection
+                , std::clog
+                << phoenix::val("Error parsing GeoJSON ")
+                << _4
+                << phoenix::val(" here: \"")
+                << construct<std::string>(_3, _2)
+                << phoenix::val('\"')
+                << std::endl
+                );
+}
+
+}}
diff --git a/include/mapnik/json/feature_collection_parser.hpp b/include/mapnik/json/feature_collection_parser.hpp
deleted file mode 100644
index 6347371..0000000
--- a/include/mapnik/json/feature_collection_parser.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_FEATURE_COLLECTION_PARSER_HPP
-#define MAPNIK_FEATURE_COLLECTION_PARSER_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/noncopyable.hpp>
-#include <mapnik/unicode.hpp>
-
-// boost
-#include <boost/scoped_ptr.hpp>
-
-// stl
-#include <vector>
-
-namespace mapnik { namespace json {
-
-template <typename Iterator, typename FeatureType> struct feature_collection_grammar;
-
-template <typename Iterator>
-class MAPNIK_DECL feature_collection_parser : private mapnik::noncopyable
-{
-    typedef Iterator iterator_type;
-    typedef mapnik::feature_impl feature_type;
-public:
-    feature_collection_parser(mapnik::context_ptr const& ctx, mapnik::transcoder const& tr);
-    ~feature_collection_parser();
-    bool parse(iterator_type first, iterator_type last, std::vector<mapnik::feature_ptr> & features);
-private:
-    boost::scoped_ptr<feature_collection_grammar<iterator_type,feature_type> > grammar_;
-};
-
-}}
-
-#endif //MAPNIK_FEATURE_COLLECTION_PARSER_HPP
diff --git a/include/mapnik/json/feature_generator.hpp b/include/mapnik/json/feature_generator.hpp
new file mode 100644
index 0000000..bf5a2e5
--- /dev/null
+++ b/include/mapnik/json/feature_generator.hpp
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_JSON_FEATURE_GENERATOR_HPP
+#define MAPNIK_JSON_FEATURE_GENERATOR_HPP
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/json/feature_generator_grammar.hpp>
+
+// boost
+#include <boost/spirit/include/karma.hpp>
+
+namespace mapnik { namespace json {
+
+inline bool to_geojson(std::string & json, mapnik::feature_impl const& feature)
+{
+    using sink_type = std::back_insert_iterator<std::string>;
+    static const mapnik::json::feature_generator_grammar<sink_type> grammar;
+    sink_type sink(json);
+    return boost::spirit::karma::generate(sink, grammar, feature);
+}
+
+}}
+
+#endif // MAPNIK_JSON_FEATURE_GENERATOR_HPP
diff --git a/include/mapnik/json/feature_generator_grammar.hpp b/include/mapnik/json/feature_generator_grammar.hpp
index d5d16c4..a023975 100644
--- a/include/mapnik/json/feature_generator_grammar.hpp
+++ b/include/mapnik/json/feature_generator_grammar.hpp
@@ -24,20 +24,21 @@
 #define MAPNIK_JSON_FEATURE_GENERATOR_GRAMMAR_HPP
 
 // mapnik
-#include <mapnik/global.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/value.hpp>
 #include <mapnik/feature.hpp>
+#include <mapnik/geometry_container.hpp>
 #include <mapnik/json/geometry_generator_grammar.hpp>
 #include <mapnik/feature_kv_iterator.hpp>
 
 // boost
 #include <boost/spirit/include/karma.hpp>
 #include <boost/spirit/include/phoenix.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/spirit/include/phoenix_fusion.hpp>
 #include <boost/spirit/include/phoenix_core.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_fusion.hpp>
-#include <boost/spirit/include/phoenix_function.hpp>
-#include <boost/fusion/include/boost_tuple.hpp>
+#include <boost/fusion/adapted/std_tuple.hpp>
 #include <boost/fusion/include/at.hpp>
 #include <boost/fusion/include/cons.hpp>
 
@@ -49,7 +50,7 @@ struct is_container<mapnik::feature_impl const> : mpl::false_ {} ;
 template <>
 struct container_iterator<mapnik::feature_impl const>
 {
-    typedef mapnik::feature_kv_iterator2 type;
+    using type = mapnik::feature_kv_iterator2;
 };
 
 template <>
@@ -76,7 +77,7 @@ template <>
 struct transform_attribute<const boost::fusion::cons<mapnik::feature_impl const&, boost::fusion::nil>,
                            mapnik::geometry_container const& ,karma::domain>
 {
-    typedef mapnik::geometry_container const& type;
+    using type = mapnik::geometry_container const&;
     static type pre(const boost::fusion::cons<mapnik::feature_impl const&, boost::fusion::nil>& f)
     {
         return boost::fusion::at<mpl::int_<0> >(f).paths();
@@ -88,12 +89,11 @@ struct transform_attribute<const boost::fusion::cons<mapnik::feature_impl const&
 namespace mapnik { namespace json {
 
 namespace karma = boost::spirit::karma;
-namespace phoenix = boost::phoenix;
 
 struct get_id
 {
     template <typename T>
-    struct result { typedef int type; };
+    struct result { using type =  int; };
 
     int operator() (mapnik::feature_impl const& f) const
     {
@@ -103,10 +103,10 @@ struct get_id
 
 struct make_properties_range
 {
-    typedef boost::iterator_range<mapnik::feature_kv_iterator> properties_range_type;
+    using properties_range_type = boost::iterator_range<mapnik::feature_kv_iterator>;
 
     template <typename T>
-    struct result { typedef properties_range_type type; };
+    struct result { using type = properties_range_type; };
 
     properties_range_type operator() (mapnik::feature_impl const& f) const
     {
@@ -114,13 +114,12 @@ struct make_properties_range
     }
 };
 
-
 struct utf8
 {
     template <typename T>
-    struct result { typedef std::string type; };
+    struct result { using type = std::string; };
 
-    std::string operator() (UnicodeString const& ustr) const
+    std::string operator() (mapnik::value_unicode_string const& ustr) const
     {
         std::string result;
         to_utf8(ustr,result);
@@ -128,116 +127,46 @@ struct utf8
     }
 };
 
-struct value_base
-{
-    template <typename T>
-    struct result { typedef mapnik::value_base const& type; };
-
-    mapnik::value_base const& operator() (mapnik::value const& val) const
-    {
-        return val.base();
-    }
-};
-
 template <typename OutputIterator>
 struct escaped_string
     : karma::grammar<OutputIterator, std::string(char const*)>
 {
-    escaped_string()
-        : escaped_string::base_type(esc_str)
-    {
-        using boost::spirit::karma::maxwidth;
-        using boost::spirit::karma::right_align;
-
-        esc_char.add
-            ('"', "\\\"")
-            ('\\', "\\\\")
-            ('\b', "\\b")
-            ('\f', "\\f")
-            ('\n', "\\n")
-            ('\r', "\\r")
-            ('\t', "\\t")
-            ;
-
-        esc_str =   karma::lit(karma::_r1)
-            << *(esc_char
-                 | karma::print
-                 | "\\u" << right_align(4,karma::lit('0'))[karma::hex])
-            <<  karma::lit(karma::_r1)
-            ;
-    }
-
+    escaped_string();
     karma::rule<OutputIterator, std::string(char const*)> esc_str;
     karma::symbols<char, char const*> esc_char;
+};
+
+struct extract_string
+{
+    using result_type = std::tuple<std::string,bool>;
 
+    result_type operator() (mapnik::value const& val) const
+    {
+        bool need_quotes = val.is<value_unicode_string>();
+        return std::make_tuple(val.to_string(), need_quotes);
+    }
 };
 
 template <typename OutputIterator>
 struct feature_generator_grammar:
         karma::grammar<OutputIterator, mapnik::feature_impl const&()>
 {
-    typedef boost::tuple<std::string, mapnik::value> pair_type;
-    typedef make_properties_range::properties_range_type range_type;
-
-    feature_generator_grammar()
-        : feature_generator_grammar::base_type(feature)
-        , quote_("\"")
-
-    {
-        using boost::spirit::karma::lit;
-        using boost::spirit::karma::uint_;
-        using boost::spirit::karma::bool_;
-        //using boost::spirit::karma::int_;
-        //using boost::spirit::karma::long_long;
-        using boost::spirit::karma::double_;
-        using boost::spirit::karma::_val;
-        using boost::spirit::karma::_1;
-        using boost::spirit::karma::_r1;
-        using boost::spirit::karma::string;
-        using boost::spirit::karma::eps;
-
-        feature = lit("{\"type\":\"Feature\",\"id\":")
-            << uint_[_1 = id_(_val)]
-            << lit(",\"geometry\":") << geometry
-            << lit(",\"properties\":") << properties
-            << lit('}')
-            ;
-
-        properties = lit('{')
-            << -(pair % lit(','))
-            << lit('}')
-            ;
-
-        pair = lit('"')
-            << string[_1 = phoenix::at_c<0>(_val)] << lit('"')
-            << lit(':')
-            << value(phoenix::at_c<1>(_val))
-            ;
-
-        value = (value_null_| bool_ | int__ | double_ | ustring)[_1 = value_base_(_r1)]
-            ;
-
-        value_null_ = string[_1 = "null"]
-            ;
-
-        ustring = escaped_string_(quote_.c_str())[_1 = utf8_(_val)]
-            ;
-    }
+    using pair_type = std::tuple<std::string, mapnik::value>;
+    using range_type = make_properties_range::properties_range_type;
 
-    // rules
+    feature_generator_grammar();
     karma::rule<OutputIterator, mapnik::feature_impl const&()> feature;
-    multi_geometry_generator_grammar<OutputIterator> geometry;
+    multi_geometry_generator_grammar<OutputIterator, mapnik::geometry_container> geometry;
     escaped_string<OutputIterator> escaped_string_;
     karma::rule<OutputIterator, mapnik::feature_impl const&()> properties;
     karma::rule<OutputIterator, pair_type()> pair;
-    karma::rule<OutputIterator, void(mapnik::value const&)> value;
+    karma::rule<OutputIterator, std::tuple<std::string,bool>()> value;
     karma::rule<OutputIterator, mapnik::value_null()> value_null_;
-    karma::rule<OutputIterator, UnicodeString()> ustring;
+    karma::rule<OutputIterator, mapnik::value_unicode_string()> ustring;
     typename karma::int_generator<mapnik::value_integer,10, false> int__;
-    // phoenix functions
-    phoenix::function<get_id> id_;
-    phoenix::function<value_base> value_base_;
-    phoenix::function<utf8> utf8_;
+    boost::phoenix::function<get_id> id_;
+    boost::phoenix::function<extract_string> extract_string_;
+    boost::phoenix::function<utf8> utf8_;
     std::string quote_;
 };
 
diff --git a/include/mapnik/json/feature_generator_grammar_impl.hpp b/include/mapnik/json/feature_generator_grammar_impl.hpp
new file mode 100644
index 0000000..1d1d3c9
--- /dev/null
+++ b/include/mapnik/json/feature_generator_grammar_impl.hpp
@@ -0,0 +1,109 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/json/feature_generator_grammar.hpp>
+
+#include <boost/spirit/include/karma.hpp>
+#include <boost/spirit/include/phoenix.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace mapnik { namespace json {
+
+namespace karma = boost::spirit::karma;
+
+template <typename OutputIterator>
+escaped_string<OutputIterator>::escaped_string()
+  : escaped_string::base_type(esc_str)
+{
+    karma::lit_type lit;
+    karma::_r1_type _r1;
+    karma::hex_type hex;
+    karma::right_align_type right_align;
+    karma::print_type kprint;
+    esc_char.add
+        ('"', "\\\"")
+        ('\\', "\\\\")
+        ('\b', "\\b")
+        ('\f', "\\f")
+        ('\n', "\\n")
+        ('\r', "\\r")
+        ('\t', "\\t")
+        ;
+
+    esc_str =   lit(_r1)
+        << *(esc_char
+             | kprint
+             | "\\u" << right_align(4,lit('0'))[hex])
+        <<  lit(_r1)
+        ;
+}
+
+template <typename OutputIterator>
+feature_generator_grammar<OutputIterator>::feature_generator_grammar()
+  : feature_generator_grammar::base_type(feature),
+    quote_("\"")
+{
+    boost::spirit::karma::lit_type lit;
+    boost::spirit::karma::uint_type uint_;
+    boost::spirit::karma::bool_type bool_;
+    boost::spirit::karma::double_type double_;
+    boost::spirit::karma::_val_type _val;
+    boost::spirit::karma::_1_type _1;
+    boost::spirit::karma::string_type kstring;
+    boost::spirit::karma::eps_type eps;
+
+    using boost::phoenix::at_c;
+
+    feature = lit("{\"type\":\"Feature\",\"id\":")
+        << uint_[_1 = id_(_val)]
+        << lit(",\"geometry\":") << geometry
+        << lit(",\"properties\":") << properties
+        << lit('}')
+        ;
+
+    properties = lit('{')
+        << -(pair % lit(','))
+        << lit('}')
+        ;
+
+    pair = lit('"')
+        << kstring[_1 = boost::phoenix::at_c<0>(_val)] << lit('"')
+        << lit(':')
+        << value[_1 = extract_string_(at_c<1>(_val))]
+        ;
+
+    value = eps(at_c<1>(_val)) << escaped_string_(quote_.c_str())[_1 = at_c<0>(_val)]
+        |
+        kstring[_1 = at_c<0>(_val)]
+        ;
+
+    // FIXME http://boost-spirit.com/home/articles/karma-examples/creating-your-own-generator-component-for-spirit-karma/
+    //value = (value_null_| bool_ | int__ | double_ | ustring)//[_1 = value_base_(_r1)]
+    //   ;
+    //value_null_ = kstring[_1 = "null"]
+    //    ;
+    //ustring = escaped_string_(quote_.c_str())[_1 = utf8_(_val)]
+    //    ;
+}
+
+}}
diff --git a/include/mapnik/json/feature_grammar.hpp b/include/mapnik/json/feature_grammar.hpp
index a117b53..90f65b0 100644
--- a/include/mapnik/json/feature_grammar.hpp
+++ b/include/mapnik/json/feature_grammar.hpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2012 Artem Pavlenko
+ * Copyright (C) 2013 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -27,15 +27,15 @@
 #include <mapnik/json/geometry_grammar.hpp>
 #include <mapnik/value.hpp>
 #include <mapnik/feature.hpp>
+#include <mapnik/geometry_container.hpp>
 #include <mapnik/unicode.hpp>
 #include <mapnik/value.hpp>
-
+#include <mapnik/json/generic_json.hpp>
+#include <mapnik/json/value_converters.hpp>
 // spirit::qi
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp>
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/phoenix.hpp>
-#include <boost/variant/variant_fwd.hpp>
+#include <boost/spirit/include/support_line_pos_iterator.hpp>
 
 namespace mapnik { namespace json {
 
@@ -46,7 +46,7 @@ namespace standard_wide =  boost::spirit::standard_wide;
 using standard_wide::space_type;
 
 class attribute_value_visitor
-    : public boost::static_visitor<mapnik::value>
+    : public mapnik::util::static_visitor<mapnik::value>
 {
 public:
     attribute_value_visitor(mapnik::transcoder const& tr)
@@ -68,60 +68,37 @@ public:
 
 struct put_property
 {
-    template <typename T0,typename T1, typename T2>
-    struct result
-    {
-        typedef void type;
-    };
+    using result_type = void;
     explicit put_property(mapnik::transcoder const& tr)
         : tr_(tr) {}
-
     template <typename T0,typename T1, typename T2>
-    void operator() (T0 & feature, T1 const& key, T2 const& val) const
+    result_type operator() (T0 & feature, T1 const& key, T2 && val) const
     {
-        mapnik::value v = boost::apply_visitor(attribute_value_visitor(tr_),val); // TODO: optimize
-        feature.put_new(key, v);
+        feature.put_new(key, mapnik::util::apply_visitor(attribute_value_visitor(tr_),val));
     }
-
     mapnik::transcoder const& tr_;
 };
 
 struct extract_geometry
 {
+    using result_type =  mapnik::geometry_container&;
     template <typename T>
-    struct result
-    {
-        typedef boost::ptr_vector<mapnik::geometry_type>& type;
-    };
-
-    template <typename T>
-    boost::ptr_vector<mapnik::geometry_type>& operator() (T & feature) const
+    result_type operator() (T & feature) const
     {
         return feature.paths();
     }
 };
 
-template <typename Iterator, typename FeatureType>
+template <typename Iterator, typename FeatureType, typename ErrorHandler = error_handler<Iterator> >
 struct feature_grammar :
-    qi::grammar<Iterator, void(FeatureType&),
-                space_type>
+        qi::grammar<Iterator, void(FeatureType&),
+                    space_type>
 {
     feature_grammar(mapnik::transcoder const& tr);
 
     // start
     // generic JSON
-    qi::rule<Iterator,space_type> value;
-    qi::symbols<char const, char const> unesc_char;
-    qi::uint_parser< unsigned, 16, 4, 4 > hex4 ;
-    qi::int_parser<mapnik::value_integer,10,1,-1> int__;
-    qi::rule<Iterator,std::string(), space_type> string_;
-    qi::rule<Iterator,space_type> key_value;
-    qi::rule<Iterator,boost::variant<value_null,bool,
-                                     value_integer,value_double>(),space_type> number;
-    qi::rule<Iterator,space_type> object;
-    qi::rule<Iterator,space_type> array;
-    qi::rule<Iterator,space_type> pairs;
-    qi::real_parser<double, qi::strict_real_policies<double> > strict_double;
+    generic_json<Iterator> json_;
 
     // geoJSON
     qi::rule<Iterator,void(FeatureType&),space_type> feature; // START
@@ -129,12 +106,13 @@ struct feature_grammar :
 
     qi::rule<Iterator,void(FeatureType &),space_type> properties;
     qi::rule<Iterator,qi::locals<std::string>, void(FeatureType &),space_type> attributes;
-    qi::rule<Iterator,boost::variant<value_null,bool,value_integer,value_double,std::string>(), space_type> attribute_value;
+    qi::rule<Iterator, json_value(), space_type> attribute_value;
 
     phoenix::function<put_property> put_property_;
     phoenix::function<extract_geometry> extract_geometry_;
-    boost::phoenix::function<where_message> where_message_;
-
+    // error handler
+    boost::phoenix::function<ErrorHandler> const error_handler;
+    // geometry
     geometry_grammar<Iterator> geometry_grammar_;
 };
 
diff --git a/include/mapnik/json/feature_grammar_impl.hpp b/include/mapnik/json/feature_grammar_impl.hpp
new file mode 100644
index 0000000..b83b79f
--- /dev/null
+++ b/include/mapnik/json/feature_grammar_impl.hpp
@@ -0,0 +1,125 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/json/feature_grammar.hpp>
+
+namespace mapnik { namespace json {
+
+template <typename Iterator, typename FeatureType, typename ErrorHandler>
+feature_grammar<Iterator,FeatureType,ErrorHandler>::feature_grammar(mapnik::transcoder const& tr)
+    : feature_grammar::base_type(feature,"feature"),
+      json_(),
+      put_property_(put_property(tr))
+{
+    qi::lit_type lit;
+    qi::long_long_type long_long;
+    qi::double_type double_;
+    qi::no_skip_type no_skip;
+    standard_wide::char_type char_;
+    qi::_val_type _val;
+    qi::_1_type _1;
+    qi::_2_type _2;
+    qi::_3_type _3;
+    qi::_4_type _4;
+    qi::_a_type _a;
+    qi::_r1_type _r1;
+    qi::eps_type eps;
+
+    using qi::fail;
+    using qi::on_error;
+    using phoenix::new_;
+    using phoenix::construct;
+
+    // generic json types
+    json_.value =  json_.object | json_.array | json_.string_
+        | json_.number
+        ;
+
+    json_.pairs = json_.key_value % lit(',')
+        ;
+
+    json_.key_value = (json_.string_ >> lit(':') >> json_.value)
+        ;
+
+    json_.object = lit('{')
+        >> *json_.pairs
+        >> lit('}')
+        ;
+    json_.array = lit('[')
+        >> json_.value >> *(lit(',') >> json_.value)
+        >> lit(']')
+        ;
+    json_.number = json_.strict_double[_val = json_.double_converter(_1)]
+        | json_.int__[_val = json_.integer_converter(_1)]
+        | lit("true") [_val = true]
+        | lit ("false") [_val = false]
+        | lit("null")[_val = construct<value_null>()]
+        ;
+
+    json_.unesc_char.add
+        ("\\\"", '\"') // quotation mark
+        ("\\\\", '\\') // reverse solidus
+        ("\\/", '/')   // solidus
+        ("\\b", '\b')  // backspace
+        ("\\f", '\f')  // formfeed
+        ("\\n", '\n')  // newline
+        ("\\r", '\r')  // carrige return
+        ("\\t", '\t')  // tab
+        ;
+
+    json_.string_ %= lit('"') >> no_skip[*(json_.unesc_char | "\\u" >> json_.hex4 | (char_ - lit('"')))] >> lit('"')
+        ;
+
+    // geojson types
+    feature_type = lit("\"type\"")
+        >> lit(':')
+        >> lit("\"Feature\"")
+        ;
+
+    feature = lit('{')
+        >> (feature_type | (lit("\"geometry\"") >> lit(':')
+                            >> geometry_grammar_(extract_geometry_(_r1))) | properties(_r1) | json_.key_value) % lit(',')
+        >> lit('}')
+        ;
+
+    properties = lit("\"properties\"")
+        > lit(':') > (lit('{') > -attributes(_r1) > lit('}')) | lit("null")
+        ;
+
+    attributes = (json_.string_ [_a = _1] > lit(':') > attribute_value [put_property_(_r1,_a,_1)]) % lit(',')
+        ;
+
+    attribute_value %= json_.number | json_.string_  ;
+
+    feature.name("Feature");
+    feature_type.name("type");
+    properties.name("properties");
+    attributes.name("Attributes");
+    attribute_value.name("Attribute Value");
+
+    on_error<fail>(feature, error_handler(_1, _2, _3, _4));
+
+}
+
+}}
diff --git a/include/mapnik/json/feature_parser.hpp b/include/mapnik/json/feature_parser.hpp
new file mode 100644
index 0000000..9154aca
--- /dev/null
+++ b/include/mapnik/json/feature_parser.hpp
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_JSON_FEATURE_PARSER_HPP
+#define MAPNIK_JSON_FEATURE_PARSER_HPP
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/json/feature_grammar.hpp>
+
+// boost
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+
+namespace mapnik { namespace json {
+
+inline bool from_geojson(std::string const& json, mapnik::feature_impl & feature)
+{
+    static const mapnik::transcoder tr("utf8");
+    using iterator_type = std::string::const_iterator;
+    static const mapnik::json::feature_grammar<iterator_type,mapnik::feature_impl> g(tr);
+    using namespace boost::spirit;
+    standard_wide::space_type space;
+    return qi::phrase_parse(json.begin(), json.end(), (g)(boost::phoenix::ref(feature)), space);
+}
+
+}}
+
+#endif // MAPNIK_JSON_FEATURE_PARSER_HPP
diff --git a/include/mapnik/json/generic_json.hpp b/include/mapnik/json/generic_json.hpp
new file mode 100644
index 0000000..e8baaf1
--- /dev/null
+++ b/include/mapnik/json/generic_json.hpp
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GENERIC_JSON_HPP
+#define MAPNIK_GENERIC_JSON_HPP
+
+#include <mapnik/value_types.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/json/value_converters.hpp>
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix.hpp>
+#pragma GCC diagnostic pop
+
+namespace mapnik { namespace json {
+
+namespace qi = boost::spirit::qi;
+namespace standard_wide =  boost::spirit::standard_wide;
+using standard_wide::space_type;
+
+using json_value = mapnik::util::variant<value_null,value_bool, value_integer, value_double, std::string>;
+
+template <typename Iterator>
+struct generic_json
+{
+    qi::rule<Iterator,space_type> value;
+    qi::symbols<char const, char const> unesc_char;
+    qi::uint_parser< unsigned, 16, 4, 4 > hex4 ;
+    qi::int_parser<mapnik::value_integer,10,1,-1> int__;
+    qi::rule<Iterator,std::string(), space_type> string_;
+    qi::rule<Iterator,space_type> key_value;
+    qi::rule<Iterator,json_value(),space_type> number;
+    qi::rule<Iterator,space_type> object;
+    qi::rule<Iterator,space_type> array;
+    qi::rule<Iterator,space_type> pairs;
+    qi::real_parser<double, qi::strict_real_policies<double> > strict_double;
+    // conversions
+    boost::phoenix::function<detail::value_converter<mapnik::value_integer> > integer_converter;
+    boost::phoenix::function<detail::value_converter<mapnik::value_double> > double_converter;
+};
+
+}}
+
+#endif // MAPNIK_GENERIC_JSON_HPP
diff --git a/include/mapnik/json/geojson_generator.hpp b/include/mapnik/json/geojson_generator.hpp
deleted file mode 100644
index ac342b6..0000000
--- a/include/mapnik/json/geojson_generator.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_GEOJSON_GENERATOR_HPP
-#define MAPNIK_GEOJSON_GENERATOR_HPP
-
-#include <mapnik/config.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/noncopyable.hpp>
-
-#include <boost/scoped_ptr.hpp>
-#include <string>
-#include <iterator>
-
-namespace mapnik { namespace json {
-
-#if BOOST_VERSION >= 104700
-
-template <typename OutputIterator> struct feature_generator_grammar;
-template <typename OutputIterator> struct multi_geometry_generator_grammar;
-
-class MAPNIK_DECL feature_generator : private mapnik::noncopyable
-{
-    typedef std::back_insert_iterator<std::string> sink_type;
-public:
-    feature_generator();
-    ~feature_generator();
-    bool generate(std::string & geojson, mapnik::feature_impl const& f);
-private:
-    boost::scoped_ptr<feature_generator_grammar<sink_type> > grammar_;
-};
-
-class MAPNIK_DECL geometry_generator : private mapnik::noncopyable
-{
-    typedef std::back_insert_iterator<std::string> sink_type;
-public:
-    geometry_generator();
-    ~geometry_generator();
-    bool generate(std::string & geojson, mapnik::geometry_container const& g);
-private:
-    boost::scoped_ptr<multi_geometry_generator_grammar<sink_type> > grammar_;
-};
-
-#else
-
-class MAPNIK_DECL feature_generator : private mapnik::noncopyable
-{
-public:
-    feature_generator() {}
-    ~feature_generator() {}
-    bool generate(std::string & geojson, mapnik::feature_impl const& f);
-};
-
-class MAPNIK_DECL geometry_generator : private mapnik::noncopyable
-{
-public:
-    geometry_generator() {}
-    ~geometry_generator() {}
-    bool generate(std::string & geojson, mapnik::geometry_container const& g);
-};
-
-#endif
-
-}}
-
-
-#endif //MAPNIK_GEOJSON_GENERATOR_HPP
diff --git a/include/mapnik/json/geometry_generator_grammar.hpp b/include/mapnik/json/geometry_generator_grammar.hpp
index 47974c2..befb803 100644
--- a/include/mapnik/json/geometry_generator_grammar.hpp
+++ b/include/mapnik/json/geometry_generator_grammar.hpp
@@ -31,99 +31,94 @@
 #include <mapnik/vertex.hpp>    // for CommandType::SEG_MOVETO
 
 // boost
-#include <boost/tuple/tuple.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/karma.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_fusion.hpp>
 #include <boost/spirit/include/phoenix_function.hpp>
-#include <boost/spirit/include/phoenix_statement.hpp>
-#include <boost/fusion/include/boost_tuple.hpp>
-#include <boost/math/special_functions/trunc.hpp> // trunc to avoid needing C++11
+#include <boost/fusion/adapted/std_tuple.hpp>
+#include <boost/math/special_functions/trunc.hpp> // for vc++ and android whose c++11 libs lack std::trunc
+#pragma GCC diagnostic pop
 
-
-//#define BOOST_SPIRIT_USE_PHOENIX_V3 1
-
-namespace boost { namespace spirit { namespace traits {
-
-// make gcc and darwin toolsets happy.
-template <>
-struct is_container<mapnik::geometry_container>
-    : mpl::false_
-{};
-
-}}}
+//stl
+#include <tuple>
 
 namespace mapnik { namespace json {
 
 namespace karma = boost::spirit::karma;
-namespace phoenix = boost::phoenix;
 
-namespace {
+namespace detail {
 
+template <typename Geometry>
 struct get_type
 {
-    template <typename T>
-    struct result { typedef int type; };
-
-    int operator() (geometry_type const& geom) const
+    using result_type = int;
+    result_type operator() (Geometry const& geom) const
     {
         return static_cast<int>(geom.type());
     }
 };
 
+template <typename Geometry>
 struct get_first
 {
-    template <typename T>
-    struct result { typedef geometry_type::value_type const type; };
-
-    geometry_type::value_type const operator() (geometry_type const& geom) const
+    using result_type = typename Geometry::value_type const;
+    result_type operator() (Geometry const& geom) const
     {
-        geometry_type::value_type coord;
-        boost::get<0>(coord) = geom.vertex(0,&boost::get<1>(coord),&boost::get<2>(coord));
+        typename Geometry::value_type coord;
+        geom.rewind(0);
+        std::get<0>(coord) = geom.vertex(&std::get<1>(coord),&std::get<2>(coord));
         return coord;
     }
 };
 
+template <typename GeometryContainer>
 struct multi_geometry_type
 {
-    template <typename T>
-    struct result { typedef boost::tuple<unsigned,bool> type; };
-
-    boost::tuple<unsigned,bool> operator() (geometry_container const& geom) const
+    using result_type = std::tuple<unsigned,bool> ;
+    result_type operator() (GeometryContainer const& cont) const
     {
         unsigned type = 0u;
         bool collection = false;
-
-        geometry_container::const_iterator itr = geom.begin();
-        geometry_container::const_iterator end = geom.end();
-
-        for ( ; itr != end; ++itr)
+        for (auto const& geom : cont)
         {
-            if (type != 0u && itr->type() != type)
+            if (type != 0u && geom.type() != type)
             {
                 collection = true;
                 break;
             }
-            type = itr->type();
+            type = geom.type();
         }
-        if (geom.size() > 1) type +=3;
-        return boost::tuple<unsigned,bool>(type, collection);
+        if (cont.size() > 1) type +=3;
+        return std::tuple<unsigned,bool>(type, collection);
     }
 };
 
+template <typename GeometryContainer>
+struct not_empty
+{
+    using result_type = bool;
+    result_type operator() (GeometryContainer const& cont) const
+    {
+        for (auto const& geom : cont)
+        {
+            if (geom.size() > 0) return true;
+        }
+        return false;
+    }
+};
 
 template <typename T>
 struct json_coordinate_policy : karma::real_policies<T>
 {
-    typedef boost::spirit::karma::real_policies<T> base_type;
-    static int floatfield(T n) { return base_type::fmtflags::fixed; }
+    using base_type = boost::spirit::karma::real_policies<T>;
+    static int floatfield(T) { return base_type::fmtflags::fixed; }
 
     static unsigned precision(T n)
     {
         if (n == 0.0) return 0;
         using namespace boost::spirit;
-        return static_cast<unsigned>(15 - boost::math::trunc(log10(traits::get_absolute_value(n))));
+        return static_cast<unsigned>(14 - boost::math::trunc(log10(traits::get_absolute_value(n))));
     }
 
     template <typename OutputIterator>
@@ -135,7 +130,7 @@ struct json_coordinate_policy : karma::real_policies<T>
 
     template <typename OutputIterator>
     static bool fraction_part(OutputIterator& sink, T n
-                       , unsigned adjprec, unsigned precision)
+                              , unsigned adjprec, unsigned precision)
     {
         if (n == 0) return true;
         return base_type::fraction_part(sink, n, adjprec, precision);
@@ -144,152 +139,48 @@ struct json_coordinate_policy : karma::real_policies<T>
 
 }
 
-template <typename OutputIterator>
+template <typename OutputIterator, typename Geometry>
 struct geometry_generator_grammar :
-        karma::grammar<OutputIterator, geometry_type const& ()>
+        karma::grammar<OutputIterator, Geometry const& ()>
 {
-
-    geometry_generator_grammar()
-        : geometry_generator_grammar::base_type(coordinates)
-    {
-        using boost::spirit::karma::uint_;
-        using boost::spirit::karma::_val;
-        using boost::spirit::karma::_1;
-        using boost::spirit::karma::lit;
-        using boost::spirit::karma::_a;
-        using boost::spirit::karma::_r1;
-        using boost::spirit::karma::eps;
-
-        coordinates =  point | linestring | polygon
-            ;
-
-        point = &uint_(mapnik::Point)[_1 = _type(_val)]
-            << point_coord [_1 = _first(_val)]
-            ;
-
-        linestring = &uint_(mapnik::LineString)[_1 = _type(_val)]
-            << lit('[')
-            << coords
-            << lit(']')
-            ;
-
-        polygon = &uint_(mapnik::Polygon)[_1 = _type(_val)]
-            << lit('[')
-            << coords2
-            << lit("]]")
-            ;
-
-        point_coord = &uint_
-            << lit('[')
-            << coord_type << lit(',') << coord_type
-            << lit("]")
-            ;
-
-        polygon_coord %= ( &uint_(mapnik::SEG_MOVETO) << eps[_r1 += 1]
-                           << karma::string[ if_ (_r1 > 1) [_1 = "],["]
-                                      .else_[_1 = '[' ]] | &uint_ << lit(','))
-            << lit('[') << coord_type
-            << lit(',')
-            << coord_type << lit(']')
-            ;
-
-        coords2 %= *polygon_coord(_a)
-            ;
-
-        coords = point_coord % lit(',')
-            ;
-
-    }
-    // rules
+    using geometry_type = Geometry;
+    using coord_type = typename std::remove_pointer<typename geometry_type::value_type>::type;
+    geometry_generator_grammar();
     karma::rule<OutputIterator, geometry_type const& ()> coordinates;
     karma::rule<OutputIterator, geometry_type const& ()> point;
     karma::rule<OutputIterator, geometry_type const& ()> linestring;
     karma::rule<OutputIterator, geometry_type const& ()> polygon;
-
     karma::rule<OutputIterator, geometry_type const& ()> coords;
     karma::rule<OutputIterator, karma::locals<unsigned>, geometry_type const& ()> coords2;
-    karma::rule<OutputIterator, geometry_type::value_type ()> point_coord;
-    karma::rule<OutputIterator, geometry_type::value_type (unsigned& )> polygon_coord;
-
-    // phoenix functions
-    phoenix::function<get_type > _type;
-    phoenix::function<get_first> _first;
-    //
-    karma::real_generator<double, json_coordinate_policy<double> > coord_type;
-
+    karma::rule<OutputIterator, coord_type()> point_coord;
+    karma::rule<OutputIterator, coord_type(unsigned& )> polygon_coord;
+    boost::phoenix::function<detail::get_type<geometry_type> > _type;
+    boost::phoenix::function<detail::get_first<geometry_type> > _first;
+    karma::real_generator<double, detail::json_coordinate_policy<double> > coordinate;
 };
 
 
-template <typename OutputIterator>
+template <typename OutputIterator, typename GeometryContainer>
 struct multi_geometry_generator_grammar :
-        karma::grammar<OutputIterator, karma::locals<boost::tuple<unsigned,bool> >,
-                       geometry_container const& ()>
+        karma::grammar<OutputIterator, karma::locals<std::tuple<unsigned,bool> >,
+                       GeometryContainer const& ()>
 {
-
-    multi_geometry_generator_grammar()
-        : multi_geometry_generator_grammar::base_type(start)
-    {
-        using boost::spirit::karma::lit;
-        using boost::spirit::karma::eps;
-        using boost::spirit::karma::_val;
-        using boost::spirit::karma::_1;
-        using boost::spirit::karma::_a;
-        using boost::spirit::karma::_r1;
-
-        geometry_types.add
-            (mapnik::Point,"\"Point\"")
-            (mapnik::LineString,"\"LineString\"")
-            (mapnik::Polygon,"\"Polygon\"")
-            (mapnik::Point + 3,"\"MultiPoint\"")
-            (mapnik::LineString + 3,"\"MultiLineString\"")
-            (mapnik::Polygon + 3,"\"MultiPolygon\"")
-            ;
-
-        start %= ( eps(phoenix::at_c<1>(_a))[_a = _multi_type(_val)]
-                   << lit("{\"type\":\"GeometryCollection\",\"geometries\":[")
-                   << geometry_collection << lit("]}")
-                   |
-                   geometry)
-            ;
-
-        geometry_collection = -(geometry2 % lit(','))
-            ;
-
-        geometry = (lit("{\"type\":")
-                    << geometry_types[_1 = phoenix::at_c<0>(_a)][_a = _multi_type(_val)]
-                    << lit(",\"coordinates\":")
-                    << karma::string[ if_ (phoenix::at_c<0>(_a) > 3) [_1 = '[']]
-                    << coordinates
-                    << karma::string[ if_ (phoenix::at_c<0>(_a) > 3) [_1 = ']']]
-                    << lit('}')) | lit("null")
-            ;
-
-        geometry2 = lit("{\"type\":")
-            << geometry_types[_1 = _a][_a = type_(_val)]
-            << lit(",\"coordinates\":")
-            << path
-            << lit('}')
-            ;
-
-        coordinates %= path % lit(',')
-            ;
-
-    }
-    // rules
-    karma::rule<OutputIterator, karma::locals<boost::tuple<unsigned,bool> >,
-                geometry_container const&()> start;
-    karma::rule<OutputIterator, karma::locals<boost::tuple<unsigned,bool> >,
-                geometry_container const&()> geometry_collection;
-    karma::rule<OutputIterator, karma::locals<boost::tuple<unsigned,bool> >,
-                geometry_container const&()> geometry;
+    using geometry_type = typename std::remove_pointer<typename GeometryContainer::value_type>::type;
+    multi_geometry_generator_grammar();
+    karma::rule<OutputIterator, karma::locals<std::tuple<unsigned,bool> >,
+                GeometryContainer const&()> start;
+    karma::rule<OutputIterator, karma::locals<std::tuple<unsigned,bool> >,
+                GeometryContainer const&()> geometry_collection;
+    karma::rule<OutputIterator, karma::locals<std::tuple<unsigned,bool> >,
+                GeometryContainer const&()> geometry;
     karma::rule<OutputIterator, karma::locals<unsigned>,
                 geometry_type const&()> geometry2;
-    karma::rule<OutputIterator, geometry_container const&()> coordinates;
-    geometry_generator_grammar<OutputIterator>  path;
-    // phoenix
-    phoenix::function<multi_geometry_type> _multi_type;
-    phoenix::function<get_type > type_;
-    // symbols table
+    karma::rule<OutputIterator, GeometryContainer const&()> coordinates;
+    geometry_generator_grammar<OutputIterator, geometry_type>  path;
+    // phoenix functions
+    boost::phoenix::function<detail::multi_geometry_type<GeometryContainer> > multi_type_;
+    boost::phoenix::function<detail::get_type<geometry_type> > type_;
+    boost::phoenix::function<detail::not_empty<GeometryContainer> > not_empty_;
     karma::symbols<unsigned, char const*> geometry_types;
 };
 
diff --git a/include/mapnik/json/geometry_generator_grammar_impl.hpp b/include/mapnik/json/geometry_generator_grammar_impl.hpp
new file mode 100644
index 0000000..e1b16bc
--- /dev/null
+++ b/include/mapnik/json/geometry_generator_grammar_impl.hpp
@@ -0,0 +1,143 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/json/geometry_generator_grammar.hpp>
+
+// boost
+#include <boost/spirit/include/karma.hpp>
+#include <boost/spirit/include/phoenix.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_fusion.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace mapnik { namespace json {
+
+namespace karma = boost::spirit::karma;
+
+template <typename OutputIterator, typename Geometry>
+geometry_generator_grammar<OutputIterator, Geometry>::geometry_generator_grammar()
+  : geometry_generator_grammar::base_type(coordinates)
+{
+    boost::spirit::karma::uint_type uint_;
+    boost::spirit::bool_type bool_;
+    boost::spirit::karma::_val_type _val;
+    boost::spirit::karma::_1_type _1;
+    boost::spirit::karma::lit_type lit;
+    boost::spirit::karma::_a_type _a;
+    boost::spirit::karma::_r1_type _r1;
+    boost::spirit::karma::eps_type eps;
+    boost::spirit::karma::string_type kstring;
+
+    coordinates =  point | linestring | polygon
+        ;
+
+    point = &uint_(mapnik::geometry_type::types::Point)[_1 = _type(_val)]
+        << point_coord [_1 = _first(_val)]
+        ;
+
+    linestring = &uint_(mapnik::geometry_type::types::LineString)[_1 = _type(_val)]
+        << lit('[')
+        << coords
+        << lit(']')
+        ;
+
+    polygon = &uint_(mapnik::geometry_type::types::Polygon)[_1 = _type(_val)]
+        << lit('[')
+        << coords2
+        << lit("]]")
+        ;
+
+    point_coord = &uint_
+        << lit('[')
+        << coordinate << lit(',') << coordinate
+        << lit(']')
+        ;
+
+    polygon_coord %= ( &uint_(mapnik::SEG_MOVETO) << eps[_r1 += 1]
+                       << kstring[ if_ (_r1 > 1u) [_1 = "],["]
+                                         .else_[_1 = '[' ]]
+                       |
+                       &uint_(mapnik::SEG_LINETO)
+                       << lit(',')) << lit('[') << coordinate << lit(',') << coordinate << lit(']')
+        ;
+
+    coords2 %= *polygon_coord(_a)
+        ;
+
+    coords = point_coord % lit(',')
+        ;
+}
+
+template <typename OutputIterator, typename GeometryContainer>
+multi_geometry_generator_grammar<OutputIterator, GeometryContainer>::multi_geometry_generator_grammar()
+  : multi_geometry_generator_grammar::base_type(start)
+{
+    boost::spirit::karma::uint_type uint_;
+    boost::spirit::bool_type bool_;
+    boost::spirit::karma::_val_type _val;
+    boost::spirit::karma::_1_type _1;
+    boost::spirit::karma::lit_type lit;
+    boost::spirit::karma::_a_type _a;
+    boost::spirit::karma::eps_type eps;
+    boost::spirit::karma::string_type kstring;
+
+    geometry_types.add
+        (mapnik::geometry_type::types::Point,"\"Point\"")
+        (mapnik::geometry_type::types::LineString,"\"LineString\"")
+        (mapnik::geometry_type::types::Polygon,"\"Polygon\"")
+        (mapnik::geometry_type::types::Point + 3,"\"MultiPoint\"")
+        (mapnik::geometry_type::types::LineString + 3,"\"MultiLineString\"")
+        (mapnik::geometry_type::types::Polygon + 3,"\"MultiPolygon\"")
+        ;
+
+    start %= ( eps(boost::phoenix::at_c<1>(_a))[_a = multi_type_(_val)]
+               << lit("{\"type\":\"GeometryCollection\",\"geometries\":[")
+               << geometry_collection << lit("]}")
+               |
+               geometry)
+        ;
+
+    geometry_collection = -(geometry2 % lit(','))
+        ;
+
+    geometry = ( &bool_(true)[_1 = not_empty_(_val)] << lit("{\"type\":")
+                 << geometry_types[_1 = boost::phoenix::at_c<0>(_a)][_a = multi_type_(_val)]
+                 << lit(",\"coordinates\":")
+                 << kstring[ boost::phoenix::if_ (boost::phoenix::at_c<0>(_a) > 3u) [_1 = '['].else_[_1 = ""]]
+                 << coordinates
+                 << kstring[ boost::phoenix::if_ (boost::phoenix::at_c<0>(_a) > 3u) [_1 = ']'].else_[_1 = ""]]
+                 << lit('}')) | lit("null")
+        ;
+
+    geometry2 = lit("{\"type\":")
+        << geometry_types[_1 = _a][_a = type_(_val)]
+        << lit(",\"coordinates\":")
+        << path
+        << lit('}')
+        ;
+
+    coordinates %= path % lit(',')
+        ;
+}
+
+}}
diff --git a/include/mapnik/json/geometry_grammar.hpp b/include/mapnik/json/geometry_grammar.hpp
index 9600b41..6d132cf 100644
--- a/include/mapnik/json/geometry_grammar.hpp
+++ b/include/mapnik/json/geometry_grammar.hpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2012 Artem Pavlenko
+ * Copyright (C) 2014 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -26,6 +26,10 @@
 // mapnik
 #include <mapnik/geometry.hpp>  // for geometry_type
 #include <mapnik/vertex.hpp>  // for CommandType
+#include <mapnik/make_unique.hpp>
+#include <mapnik/json/positions_grammar.hpp>
+#include <mapnik/json/geometry_util.hpp>
+#include <mapnik/geometry_container.hpp>
 
 // spirit::qi
 #include <boost/spirit/include/qi.hpp>
@@ -37,107 +41,20 @@ namespace qi = boost::spirit::qi;
 namespace standard_wide =  boost::spirit::standard_wide;
 using standard_wide::space_type;
 
-struct push_vertex
-{
-    template <typename T0,typename T1, typename T2, typename T3>
-    struct result
-    {
-        typedef void type;
-    };
-
-    template <typename T0,typename T1, typename T2, typename T3>
-    void operator() (T0 c, T1 path, T2 x, T3 y) const
-    {
-        BOOST_ASSERT( path!=0 );
-        path->push_vertex(x,y,c);
-    }
-};
-
-struct close_path
-{
-    template <typename T>
-    struct result
-    {
-        typedef void type;
-    };
-
-    template <typename T>
-    void operator() (T path) const
-    {
-        BOOST_ASSERT( path!=0 );
-        path->close_path();
-    }
-};
-
-struct cleanup
-{
-    template <typename T0>
-    struct result
-    {
-        typedef void type;
-    };
-
-    template <typename T0>
-    void operator() (T0 & path) const
-    {
-        if (path) delete path, path=0;
-    }
-};
-
-struct where_message
-{
-    template <typename T0,typename T1,typename T2>
-    struct result
-    {
-        typedef std::string type;
-    };
-
-    template <typename Iterator>
-    std::string operator() (Iterator first, Iterator last, std::size_t size) const
-    {
-        std::string str(first, last);
-        if (str.length() > size)
-            return str.substr(0, size) + "..." ;
-        return str;
-    }
-};
-
-
-template <typename Iterator>
+template <typename Iterator, typename ErrorHandler = error_handler<Iterator> >
 struct geometry_grammar :
-        qi::grammar<Iterator,qi::locals<int>, void(boost::ptr_vector<mapnik::geometry_type>& )
-                   , space_type>
+        qi::grammar<Iterator,void(mapnik::geometry_container& )
+        , space_type>
 {
     geometry_grammar();
-    qi::rule<Iterator, qi::locals<int>, void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> geometry;
-    qi::symbols<char, int> geometry_dispatch;
-
-    qi::rule<Iterator,void(CommandType,geometry_type*),space_type> point;
-    qi::rule<Iterator,qi::locals<CommandType>,void(geometry_type*),space_type> points;
-    qi::rule<Iterator,void(boost::ptr_vector<mapnik::geometry_type>&,int),space_type> coordinates;
-    //
-    qi::rule<Iterator,qi::locals<geometry_type*>,
-             void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> point_coordinates;
-    qi::rule<Iterator,qi::locals<geometry_type*>,
-             void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> linestring_coordinates;
-    qi::rule<Iterator,qi::locals<geometry_type*>,
-             void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> polygon_coordinates;
-
-    qi::rule<Iterator,void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> multipoint_coordinates;
-    qi::rule<Iterator,void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> multilinestring_coordinates;
-    qi::rule<Iterator,void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> multipolygon_coordinates;
-    qi::rule<Iterator,void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> geometry_collection;
-
-    // Nabialek trick //////////////////////////////////////
-    //typedef typename qi::rule<Iterator,void(FeatureType &), space_type> dispatch_rule;
-    //qi::rule<Iterator,qi::locals<dispatch_rule*>, void(FeatureType&),space_type> geometry;
-    //qi::symbols<char, dispatch_rule*> geometry_dispatch;
-    ////////////////////////////////////////////////////////
-
-    boost::phoenix::function<push_vertex> push_vertex_;
-    boost::phoenix::function<close_path> close_path_;
-    boost::phoenix::function<cleanup> cleanup_;
-    boost::phoenix::function<where_message> where_message_;
+    qi::rule<Iterator,void(mapnik::geometry_container& ), space_type> start;
+    qi::rule<Iterator, qi::locals<int, mapnik::json::coordinates>, void(mapnik::geometry_container& ), space_type> geometry;
+    qi::symbols<char, int> geometry_type_dispatch;
+    qi::rule<Iterator,void(mapnik::geometry_container& ),space_type> geometry_collection;
+    positions_grammar<Iterator> coordinates;
+    boost::phoenix::function<create_geometry_impl> create_geometry;
+    // error handler
+    boost::phoenix::function<ErrorHandler> const error_handler;
 };
 
 }}
diff --git a/include/mapnik/json/geometry_grammar_impl.hpp b/include/mapnik/json/geometry_grammar_impl.hpp
new file mode 100644
index 0000000..afc22f8
--- /dev/null
+++ b/include/mapnik/json/geometry_grammar_impl.hpp
@@ -0,0 +1,93 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/json/error_handler.hpp>
+#include <mapnik/json/geometry_grammar.hpp>
+#include <mapnik/json/positions_grammar_impl.hpp>
+
+// boost
+#include <boost/spirit/include/phoenix_object.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <iostream>                     // for clog, endl, etc
+#include <string>                       // for string
+
+namespace mapnik { namespace json {
+
+template <typename Iterator, typename ErrorHandler >
+geometry_grammar<Iterator, ErrorHandler>::geometry_grammar()
+    : geometry_grammar::base_type(start,"geometry")
+{
+
+    qi::lit_type lit;
+    qi::int_type int_;
+    qi::double_type double_;
+    qi::_1_type _1;
+    qi::_2_type _2;
+    qi::_3_type _3;
+    qi::_4_type _4;
+    qi::_a_type _a;
+    qi::_b_type _b;
+    qi::_r1_type _r1;
+    qi::eps_type eps;
+    using qi::fail;
+    using qi::on_error;
+
+    start = geometry(_r1) | geometry_collection(_r1);
+
+    geometry = (lit('{')[_a = 0 ]
+                >> (-lit(',') >> lit("\"type\"") >> lit(':') >> geometry_type_dispatch[_a = _1]
+                    ^
+                    (-lit(',') >> lit("\"coordinates\"") >> lit(':') >> coordinates[_b = _1]))[create_geometry(_r1,_a,_b)]
+                >> lit('}'))
+        | lit("null")
+        ;
+
+    geometry_collection = (lit('{')
+                           >> (-lit(',') >> lit("\"type\"") >> lit(':') >> lit("\"GeometryCollection\"")
+                               ^
+                               -lit(',') >> lit("\"geometries\"") >> lit(':')
+                               >> lit('[') >> geometry(_r1) % lit(',') >> lit(']'))
+                           >> lit('}'))
+        | lit("null")
+        ;
+
+    geometry_type_dispatch.add
+        ("\"Point\"",1)
+        ("\"LineString\"",2)
+        ("\"Polygon\"",3)
+        ("\"MultiPoint\"",4)
+        ("\"MultiLineString\"",5)
+        ("\"MultiPolygon\"",6)
+        ;
+
+    // give some rules names
+    geometry.name("Geometry");
+    geometry_collection.name("GeometryCollection");
+    geometry_type_dispatch.name("type");
+    coordinates.name("coordinates");
+    // error handler
+    on_error<fail>(start, error_handler(_1, _2, _3, _4));
+}
+
+}}
diff --git a/include/mapnik/json/geometry_parser.hpp b/include/mapnik/json/geometry_parser.hpp
index 76985f9..57f5ac6 100644
--- a/include/mapnik/json/geometry_parser.hpp
+++ b/include/mapnik/json/geometry_parser.hpp
@@ -24,34 +24,26 @@
 #define MAPNIK_JSON_GEOMETRY_PARSER_HPP
 
 // mapnik
-#include <mapnik/config.hpp>
 #include <mapnik/geometry.hpp>
-#include <mapnik/noncopyable.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/json/geometry_grammar.hpp>
 
 // boost
-#include <boost/scoped_ptr.hpp>
-
-// stl
-//#include <vector>
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
 
 namespace mapnik { namespace json {
 
-template <typename Iterator> struct geometry_grammar;
-
-MAPNIK_DECL bool from_geojson(std::string const& json, boost::ptr_vector<geometry_type> & paths);
-
-template <typename Iterator>
-class MAPNIK_DECL geometry_parser : private mapnik::noncopyable
+inline bool from_geojson(std::string const& json, geometry_container & paths)
 {
-    typedef Iterator iterator_type;
-public:
-    geometry_parser();
-    ~geometry_parser();
-    bool parse(iterator_type first, iterator_type last, boost::ptr_vector<mapnik::geometry_type>&);
-private:
-    boost::scoped_ptr<geometry_grammar<iterator_type> > grammar_;
-};
+    using namespace boost::spirit;
+    static const geometry_grammar<std::string::const_iterator> g;
+    standard_wide::space_type space;
+    std::string::const_iterator start = json.begin();
+    std::string::const_iterator end = json.end();
+    return qi::phrase_parse(start, end, (g)(boost::phoenix::ref(paths)), space);
+}
 
 }}
 
-#endif //MAPNIK_FEATURE_COLLECTION_PARSER_HPP
+#endif // MAPNIK_JSON_GEOMETRY_PARSER_HPP
diff --git a/include/mapnik/json/geometry_util.hpp b/include/mapnik/json/geometry_util.hpp
new file mode 100644
index 0000000..dd0c566
--- /dev/null
+++ b/include/mapnik/json/geometry_util.hpp
@@ -0,0 +1,233 @@
+ /*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_JSON_GEOMETRY_UTIL_HPP
+#define MAPNIK_JSON_GEOMETRY_UTIL_HPP
+
+#include <mapnik/geometry.hpp>  // for geometry_type
+#include <mapnik/vertex.hpp>  // for CommandType
+#include <mapnik/make_unique.hpp>
+
+namespace mapnik { namespace json {
+
+// geometries
+template <typename Path>
+struct create_point : util::static_visitor<>
+{
+    explicit create_point(Path & path)
+        : path_(path) {}
+
+    void operator()(position const& pos) const
+    {
+        auto pt = std::make_unique<geometry_type>(geometry_type::types::Point);
+        pt->move_to(std::get<0>(pos), std::get<1>(pos));
+        path_.push_back(pt.release());
+    }
+
+    template <typename T>
+    void operator()(T const&) const {} // no-op - shouldn't get here
+    Path & path_;
+};
+
+template <typename Path>
+struct create_linestring : util::static_visitor<>
+{
+    explicit create_linestring(Path & path)
+        : path_(path) {}
+
+    void operator()(positions const& ring) const
+    {
+        std::size_t size = ring.size();
+        if (size > 1)
+        {
+            auto line = std::make_unique<geometry_type>(geometry_type::types::LineString);
+            line->move_to(std::get<0>(ring.front()), std::get<1>(ring.front()));
+
+            for (std::size_t index = 1; index < size; ++index)
+            {
+                line->line_to(std::get<0>(ring[index]), std::get<1>(ring[index]));
+            }
+            path_.push_back(line.release());
+        }
+    }
+
+    template <typename T>
+    void operator()(T const&) const {}  // no-op - shouldn't get here
+
+    Path & path_;
+};
+
+template <typename Path>
+struct create_polygon : util::static_visitor<>
+{
+    explicit create_polygon(Path & path)
+        : path_(path) {}
+
+    void operator()(std::vector<positions> const& rings) const
+    {
+        auto poly = std::make_unique<geometry_type>(geometry_type::types::Polygon);
+
+        for (auto const& ring : rings)
+        {
+            std::size_t size = ring.size();
+            if (size > 2) // at least 3 vertices to form a ring
+            {
+                poly->move_to(std::get<0>(ring.front()), std::get<1>(ring.front()));
+                for (std::size_t index = 1; index < size; ++index)
+                {
+                    poly->line_to(std::get<0>(ring[index]), std::get<1>(ring[index]));
+                }
+                poly->close_path();
+            }
+        }
+        path_.push_back(poly.release());
+    }
+
+    template <typename T>
+    void operator()(T const&) const {}  // no-op - shouldn't get here
+
+    Path & path_;
+};
+
+// multi-geometries
+
+template <typename Path>
+struct create_multipoint : util::static_visitor<>
+{
+    explicit create_multipoint(Path & path)
+        : path_(path) {}
+
+    void operator()(positions const& points) const
+    {
+        for (auto const& pos : points)
+        {
+            auto point = std::make_unique<geometry_type>(geometry_type::types::Point);
+            point->move_to(std::get<0>(pos), std::get<1>(pos));
+            path_.push_back(point.release());
+        }
+    }
+
+    template <typename T>
+    void operator()(T const&) const {}  // no-op - shouldn't get here
+
+    Path & path_;
+};
+
+template <typename Path>
+struct create_multilinestring : util::static_visitor<>
+{
+    explicit create_multilinestring(Path & path)
+        : path_(path) {}
+
+    void operator()(std::vector<positions> const& rings) const
+    {
+        for (auto const& ring : rings)
+        {
+            auto line = std::make_unique<geometry_type>(geometry_type::types::LineString);
+            std::size_t size = ring.size();
+            if (size > 1) // at least 2 vertices to form a linestring
+            {
+                line->move_to(std::get<0>(ring.front()), std::get<1>(ring.front()));
+                for (std::size_t index = 1; index < size; ++index)
+                {
+                    line->line_to(std::get<0>(ring[index]), std::get<1>(ring[index]));
+                }
+            }
+            path_.push_back(line.release());
+        }
+    }
+
+    template <typename T>
+    void operator()(T const&) const {}  // no-op - shouldn't get here
+
+    Path & path_;
+};
+
+template <typename Path>
+struct create_multipolygon : util::static_visitor<>
+{
+    explicit create_multipolygon(Path & path)
+        : path_(path) {}
+
+    void operator()(std::vector<std::vector<positions> > const& rings_array) const
+    {
+        for (auto const& rings : rings_array)
+        {
+            auto poly = std::make_unique<geometry_type>(geometry_type::types::Polygon);
+            for (auto const& ring : rings)
+            {
+                std::size_t size = ring.size();
+                if (size > 2) // at least 3 vertices to form a ring
+                {
+                    poly->move_to(std::get<0>(ring.front()), std::get<1>(ring.front()));
+                    for (std::size_t index = 1; index < size; ++index)
+                    {
+                        poly->line_to(std::get<0>(ring[index]), std::get<1>(ring[index]));
+                    }
+                    poly->close_path();
+                }
+            }
+            path_.push_back(poly.release());
+        }
+    }
+
+    template <typename T>
+    void operator()(T const&) const {}  // no-op - shouldn't get here
+
+    Path & path_;
+};
+
+struct create_geometry_impl
+{
+    using result_type = void;
+    template <typename T0>
+    void operator() (T0 & path, int type, mapnik::json::coordinates const& coords) const
+    {
+        switch (type)
+        {
+        case 1 ://Point
+            util::apply_visitor(create_point<T0>(path), coords);
+            break;
+        case 2 ://LineString
+            util::apply_visitor(create_linestring<T0>(path), coords);
+            break;
+        case 3 ://Polygon
+            util::apply_visitor(create_polygon<T0>(path), coords);
+            break;
+        case 4 ://MultiPoint
+            util::apply_visitor(create_multipoint<T0>(path), coords);
+            break;
+        case 5 ://MultiLineString
+            util::apply_visitor(create_multilinestring<T0>(path), coords);
+            break;
+        case 6 ://MultiPolygon
+            util::apply_visitor(create_multipolygon<T0>(path), coords);
+            break;
+        default:
+            break;
+        }
+    }
+};
+
+}}
+
+#endif // MAPNIK_JSON_GEOMETRY_UTIL_HPP
diff --git a/include/mapnik/json/positions_grammar.hpp b/include/mapnik/json/positions_grammar.hpp
new file mode 100644
index 0000000..32b1e2a
--- /dev/null
+++ b/include/mapnik/json/positions_grammar.hpp
@@ -0,0 +1,90 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_JSON_POSITIONS_GRAMMAR_HPP
+#define MAPNIK_JSON_POSITIONS_GRAMMAR_HPP
+
+// mapnik
+#include <mapnik/util/variant.hpp>
+#include <mapnik/json/error_handler.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/fusion/adapted/std_tuple.hpp>
+#pragma GCC diagnostic pop
+
+// stl
+#include <tuple>
+
+namespace mapnik { namespace json {
+struct empty {};
+using position = std::tuple<double,double>;
+using positions = std::vector<position>;
+using coordinates = util::variant<empty, position, positions, std::vector<positions>, std::vector<std::vector<positions> > > ;
+
+namespace qi = boost::spirit::qi;
+namespace standard_wide =  boost::spirit::standard_wide;
+using standard_wide::space_type;
+
+struct set_position_impl
+{
+    using result_type = void;
+    template <typename T0,typename T1>
+    result_type operator() (T0 & coords, T1 const& pos) const
+    {
+        if (pos) coords = *pos;
+    }
+};
+
+struct push_position_impl
+{
+    using result_type = void;
+    template <typename T0,typename T1>
+    result_type operator() (T0 & coords, T1 const& pos) const
+    {
+        if (pos) coords.push_back(*pos);
+    }
+};
+
+template <typename Iterator, typename ErrorHandler = error_handler<Iterator> >
+struct positions_grammar :
+        qi::grammar<Iterator,coordinates(),space_type>
+{
+    positions_grammar();
+    qi::rule<Iterator, coordinates(),space_type> coords;
+    qi::rule<Iterator, boost::optional<position>(), space_type> pos;
+    qi::rule<Iterator, positions(), space_type> ring;
+    qi::rule<Iterator, std::vector<positions>(), space_type> rings;
+    qi::rule<Iterator, std::vector<std::vector<positions> >(), space_type> rings_array;
+    boost::phoenix::function<set_position_impl> set_position;
+    boost::phoenix::function<push_position_impl> push_position;
+    // error handler
+    boost::phoenix::function<ErrorHandler> const error_handler;
+};
+
+}}
+
+#endif // MAPNIK_JSON_POSITIONS_GRAMMAR_HPP
diff --git a/include/mapnik/json/positions_grammar_impl.hpp b/include/mapnik/json/positions_grammar_impl.hpp
new file mode 100644
index 0000000..d90843c
--- /dev/null
+++ b/include/mapnik/json/positions_grammar_impl.hpp
@@ -0,0 +1,72 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/json/positions_grammar.hpp>
+
+// boost
+#include <boost/spirit/include/qi_omit.hpp>
+#include <boost/spirit/include/phoenix_object.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+// stl
+#include <iostream>
+#include <string>
+
+namespace mapnik { namespace json {
+
+template <typename Iterator, typename ErrorHandler>
+positions_grammar<Iterator, ErrorHandler>::positions_grammar()
+    : positions_grammar::base_type(coords,"coordinates")
+{
+    qi::lit_type lit;
+    qi::double_type double_;
+    qi::_val_type _val;
+    qi::_1_type _1;
+    qi::_2_type _2;
+    qi::_3_type _3;
+    qi::_4_type _4;
+    qi::omit_type omit;
+    using qi::fail;
+    using qi::on_error;
+
+    coords = rings_array[_val = _1] | rings [_val = _1] | ring[_val = _1] |  pos[set_position(_val,_1)]
+        ;
+    pos = lit('[') > -(double_ > lit(',') > double_) > omit[*(lit(',') > double_)] > lit(']')
+        ;
+    ring = lit('[') >> pos[push_position(_val,_1)] % lit(',') > lit(']')
+        ;
+    rings = lit('[') >> ring % lit(',') > lit(']')
+        ;
+    rings_array = lit('[') >> rings % lit(',') > lit(']')
+        ;
+    coords.name("Coordinates");
+    pos.name("Position");
+    ring.name("Ring");
+    rings.name("Rings");
+    rings_array.name("Rings array");
+
+    // error handler
+    on_error<fail>(coords, error_handler(_1, _2, _3, _4));
+}
+
+}}
diff --git a/include/mapnik/json/symbolizer_grammar.hpp b/include/mapnik/json/symbolizer_grammar.hpp
new file mode 100644
index 0000000..5f1a7c3
--- /dev/null
+++ b/include/mapnik/json/symbolizer_grammar.hpp
@@ -0,0 +1,216 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_SYMBOLIZER_GRAMMAR_HPP
+#define MAPNIK_SYMBOLIZER_GRAMMAR_HPP
+
+#include <mapnik/config.hpp>
+
+// boost
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix.hpp>
+
+// mapnik
+#include <mapnik/util/variant.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/symbolizer_utils.hpp>
+#include <mapnik/json/error_handler.hpp>
+#include <mapnik/json/generic_json.hpp>
+
+namespace mapnik { namespace json {
+
+namespace qi = boost::spirit::qi;
+namespace phoenix = boost::phoenix;
+namespace fusion = boost::fusion;
+namespace standard_wide =  boost::spirit::standard_wide;
+using standard_wide::space_type;
+
+template <typename Symbolizer>
+struct json_value_visitor : mapnik::util::static_visitor<>
+{
+    json_value_visitor(Symbolizer & sym, mapnik::keys key)
+        : sym_(sym), key_(key) {}
+
+    void operator() (value_bool val) const
+    {
+        put<value_bool>(sym_, key_, val);
+    }
+
+    void operator() (value_integer val) const
+    {
+        put<value_integer>(sym_, key_, val);
+    }
+
+    void operator() (value_double val) const
+    {
+        put<value_double>(sym_, key_, val);
+    }
+
+    void operator() (std::string const& val) const
+    {
+        set_property(sym_, key_, val);
+    }
+
+    template <typename T>
+    void operator() (T const& val) const
+    {
+        std::cerr << std::get<0>(get_meta(key_)) << ":" << val <<  std::endl;
+        //put<T>(sym_, key_, val);
+    }
+
+    Symbolizer & sym_;
+    keys key_;
+};
+
+template <typename T>
+struct put_property_visitor : mapnik::util::static_visitor<>
+{
+    using value_type = T;
+
+    put_property_visitor(mapnik::keys key, value_type const& val)
+        : key_(key), val_(val) {}
+
+    template <typename Symbolizer>
+    void operator() (Symbolizer & sym) const
+    {
+        mapnik::util::apply_visitor(json_value_visitor<Symbolizer>(sym, key_), val_);
+    }
+
+    keys key_;
+    value_type const& val_;
+};
+
+struct put_property
+{
+    using result_type = void;
+    template <typename T0,typename T1, typename T2>
+    result_type operator() (T0 & sym, T1 const& name, T2 const& val) const
+    {
+        try
+        {
+            mapnik::util::apply_visitor(put_property_visitor<T2>(get_key(name),val), sym);
+        }
+        catch (std::runtime_error const& err)
+        {
+            std::cerr <<  err.what() << std::endl;
+        }
+    }
+};
+
+template <typename Iterator, typename ErrorHandler = error_handler<Iterator>>
+struct symbolizer_grammar : qi::grammar<Iterator, space_type, symbolizer()>
+{
+    using json_value_type = util::variant<value_null,value_bool,value_integer,value_double, std::string>;
+    symbolizer_grammar()
+        : symbolizer_grammar::base_type(sym, "symbolizer"),
+          json_()
+    {
+        qi::lit_type lit;
+        qi::double_type double_;
+        qi::int_type int_;
+        qi::no_skip_type no_skip;
+        qi::_val_type _val;
+        qi::_a_type _a;
+        qi::_r1_type _r1;
+        qi::_1_type _1;
+        standard_wide::char_type char_;
+        using phoenix::construct;
+
+        // generic json types
+        json_.value =  json_.object | json_.array | json_.string_
+            | json_.number
+            ;
+
+        json_.pairs = json_.key_value % lit(',')
+            ;
+
+        json_.key_value = (json_.string_ >> lit(':') >> json_.value)
+            ;
+
+        json_.object = lit('{')
+            >> *json_.pairs
+            >> lit('}')
+            ;
+
+        json_.array = lit('[')
+            >> json_.value >> *(lit(',') >> json_.value)
+            >> lit(']')
+        ;
+
+        json_.number %= json_.strict_double
+            | json_.int__
+            | lit("true") [_val = true]
+            | lit ("false") [_val = false]
+            | lit("null")[_val = construct<value_null>()]
+            ;
+        json_.unesc_char.add
+            ("\\\"", '\"') // quotation mark
+            ("\\\\", '\\') // reverse solidus
+            ("\\/", '/')   // solidus
+            ("\\b", '\b')  // backspace
+            ("\\f", '\f')  // formfeed
+            ("\\n", '\n')  // newline
+            ("\\r", '\r')  // carrige return
+            ("\\t", '\t')  // tab
+        ;
+
+        json_.string_ %= lit('"') >> no_skip[*(json_.unesc_char | "\\u" >> json_.hex4 | (char_ - lit('"')))] >> lit('"')
+            ;
+
+        sym = lit('{')
+            >> lit("\"type\"") >> lit(':')
+            >> (lit("\"PointSymbolizer\"")[_val = construct<point_symbolizer>()]
+                |
+                lit("\"LineSymbolizer\"")[_val = construct<line_symbolizer>()]
+                |
+                lit("\"PolygonSymbolizer\"")[_val = construct<polygon_symbolizer>()]
+                )
+            >> lit(',')
+            >> lit("\"properties\"") >> lit(':')
+            >> ((lit('{') >> *property(_val) >> lit('}')) | lit("null"))
+            >> lit('}')
+            ;
+
+        property = (json_.string_ [_a = _1] >> lit(':') >> property_value [put_property_(_r1,_a,_1)]) % lit(',')
+            ;
+
+        property_value %= json_.number | json_.string_  ;
+
+
+    }
+
+    // generic JSON
+    generic_json<Iterator> json_;
+    // symbolizer
+    qi::rule<Iterator, space_type, mapnik::symbolizer()> sym;
+    qi::rule<Iterator,qi::locals<std::string>, void(mapnik::symbolizer&),space_type> property;
+    qi::rule<Iterator, space_type, json_value_type()> property_value;
+
+    phoenix::function<put_property> put_property_;
+    // error
+    //qi::on_error<qi::fail>(sym, error_handler(_1, _2, _3, _4));
+};
+
+
+}}
+
+#endif // MAPNIK_SYMBOLIZER_GRAMMAR_HPP
diff --git a/include/mapnik/json/topojson_grammar.hpp b/include/mapnik/json/topojson_grammar.hpp
new file mode 100644
index 0000000..b36f8ab
--- /dev/null
+++ b/include/mapnik/json/topojson_grammar.hpp
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_TOPOJSON_GRAMMAR_HPP
+#define MAPNIK_TOPOJSON_GRAMMAR_HPP
+
+// mapnik
+#include <mapnik/json/error_handler.hpp>
+#include <mapnik/json/generic_json.hpp>
+#include <mapnik/json/topology.hpp>
+#include <mapnik/json/value_converters.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#pragma GCC diagnostic pop
+
+// stl
+#include <vector>
+
+namespace mapnik { namespace topojson {
+
+namespace qi = boost::spirit::qi;
+namespace fusion = boost::fusion;
+namespace standard_wide = boost::spirit::standard_wide;
+using standard_wide::space_type;
+
+template <typename Iterator, typename ErrorHandler = json::error_handler<Iterator> >
+struct topojson_grammar : qi::grammar<Iterator, space_type, topology()>
+
+{
+    topojson_grammar();
+private:
+    // generic JSON support
+    json::generic_json<Iterator> json_;
+    // topoJSON
+    qi::rule<Iterator, space_type, mapnik::topojson::topology()> topology;
+    qi::rule<Iterator, space_type, std::vector<mapnik::topojson::geometry>()> objects;
+    qi::rule<Iterator, space_type, std::vector<mapnik::topojson::arc>()> arcs;
+    qi::rule<Iterator, space_type, mapnik::topojson::arc()> arc;
+    qi::rule<Iterator, space_type, mapnik::topojson::coordinate()> coordinate;
+    qi::rule<Iterator, space_type, mapnik::topojson::transform()> transform;
+    qi::rule<Iterator, space_type, mapnik::topojson::bounding_box()> bbox;
+    qi::rule<Iterator, space_type, mapnik::topojson::geometry() > geometry;
+    qi::rule<Iterator, space_type, mapnik::topojson::point()> point;
+    qi::rule<Iterator, space_type, mapnik::topojson::multi_point()> multi_point;
+    qi::rule<Iterator, space_type, mapnik::topojson::linestring()> linestring;
+    qi::rule<Iterator, space_type, mapnik::topojson::multi_linestring()> multi_linestring;
+    qi::rule<Iterator, space_type, mapnik::topojson::polygon()> polygon;
+    qi::rule<Iterator, space_type, mapnik::topojson::multi_polygon()> multi_polygon;
+    qi::rule<Iterator, space_type, void(std::vector<mapnik::topojson::geometry>&)> geometry_collection;
+
+    qi::rule<Iterator, space_type, std::vector<index_type>()> ring;
+
+    // properties
+    qi::rule<Iterator, space_type, mapnik::topojson::properties()> properties;
+    qi::rule<Iterator, space_type, mapnik::topojson::properties()> attributes;
+    qi::rule<Iterator, space_type, mapnik::json::json_value()> attribute_value;
+    // id
+    qi::rule<Iterator,space_type> id;
+    // error handler
+    boost::phoenix::function<ErrorHandler> const error_handler;
+};
+
+}}
+
+#endif //MAPNIK_TOPOJSON_GRAMMAR_HPP
diff --git a/include/mapnik/json/topojson_grammar_impl.hpp b/include/mapnik/json/topojson_grammar_impl.hpp
new file mode 100644
index 0000000..3231c9f
--- /dev/null
+++ b/include/mapnik/json/topojson_grammar_impl.hpp
@@ -0,0 +1,227 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/json/topojson_grammar.hpp>
+
+namespace mapnik { namespace topojson {
+
+namespace qi = boost::spirit::qi;
+namespace phoenix = boost::phoenix;
+namespace fusion = boost::fusion;
+namespace standard_wide = boost::spirit::standard_wide;
+using standard_wide::space_type;
+
+template <typename Iterator, typename ErrorHandler>
+topojson_grammar<Iterator, ErrorHandler>::topojson_grammar()
+    : topojson_grammar::base_type(topology, "topojson")
+{
+    qi::lit_type lit;
+    qi::double_type double_;
+    qi::int_type int_;
+    qi::no_skip_type no_skip;
+    qi::omit_type omit;
+    qi::_val_type _val;
+    qi::_1_type _1;
+    qi::_2_type _2;
+    qi::_3_type _3;
+    qi::_4_type _4;
+    qi::_r1_type _r1;
+    standard_wide::char_type char_;
+    using qi::fail;
+    using qi::on_error;
+    using phoenix::push_back;
+    using phoenix::construct;
+    // generic json types
+    json_.value = json_.object | json_.array | json_.string_ | json_.number
+        ;
+
+    json_.pairs = json_.key_value % lit(',')
+        ;
+
+    json_.key_value = (json_.string_ >> lit(':') >> json_.value)
+        ;
+
+    json_.object = lit('{') >> *json_.pairs >> lit('}')
+        ;
+
+    json_.array = lit('[')
+        >> json_.value >> *(lit(',') >> json_.value)
+        >> lit(']')
+        ;
+
+    json_.number = json_.strict_double[_val = json_.double_converter(_1)]
+        | json_.int__[_val = json_.integer_converter(_1)]
+        | lit("true")[_val = true]
+        | lit("false")[_val = false]
+        | lit("null")[_val = construct<value_null>()]
+        ;
+
+    json_.unesc_char.add
+        ("\\\"", '\"') // quotation mark
+        ("\\\\", '\\') // reverse solidus
+        ("\\/", '/')   // solidus
+        ("\\b", '\b')  // backspace
+        ("\\f", '\f')  // formfeed
+        ("\\n", '\n')  // newline
+        ("\\r", '\r')  // carrige return
+        ("\\t", '\t')  // tab
+        ;
+
+    json_.string_ %= lit('"') >> no_skip[*(json_.unesc_char | "\\u" >> json_.hex4 | (char_ - lit('"')))] >> lit('"')
+        ;
+
+    // topo json
+    topology = lit('{') >> lit("\"type\"") >> lit(':') >> lit("\"Topology\"")
+                        >> ( (lit(',') >> objects) ^ ( lit(',') >> arcs) ^ (lit(',') >> transform) ^ (lit(',') >> bbox))
+                        >> lit('}')
+        ;
+
+    transform = lit("\"transform\"") >> lit(':') >> lit('{')
+                                     >> lit("\"scale\"") >> lit(':')
+                                     >> lit('[')
+                                     >> double_ >> lit(',')
+                                     >> double_ >> lit(']') >> lit(',')
+                                     >> lit("\"translate\"") >> lit(':')
+                                     >> lit('[') >> double_ >> lit(',') >> double_ >> lit(']')
+                                     >> lit('}')
+        ;
+
+    bbox = lit("\"bbox\"") >> lit(':')
+                           >> lit('[') >> double_ >> lit(',') >> double_
+                           >> lit(',') >> double_ >> lit(',') >> double_
+                           >> lit(']')
+        ;
+
+    objects = lit("\"objects\"")
+        >> lit(':')
+        >> lit('{')
+        >> -((omit[json_.string_]
+              >> lit(':')
+              >>  (geometry_collection(_val) | geometry)) % lit(','))
+        >> lit('}')
+        ;
+
+    geometry =
+        point |
+        linestring |
+        polygon |
+        multi_point |
+        multi_linestring |
+        multi_polygon |
+        omit[json_.object]
+        ;
+
+    geometry_collection =  lit('{')
+               >> lit("\"type\"") >> lit(':') >> lit("\"GeometryCollection\"") >> lit(',')
+               >> lit("\"geometries\"") >> lit(':') >> lit('[') >> -(geometry[push_back(_r1, _1)] % lit(','))
+               >> lit(']')
+               >> lit('}')
+        ;
+    point = lit('{')
+        >> lit("\"type\"") >> lit(':') >> lit("\"Point\"")
+        >> ((lit(',') >> lit("\"coordinates\"") >> lit(':') >> coordinate)
+            ^ (lit(',') >> properties) /*^ (lit(',') >> omit[id])*/)
+        >> lit('}')
+        ;
+
+    multi_point = lit('{')
+        >> lit("\"type\"") >> lit(':') >> lit("\"MultiPoint\"")
+        >> ((lit(',') >> lit("\"coordinates\"") >> lit(':')
+             >> lit('[') >> -(coordinate % lit(',')) >> lit(']'))
+            ^ (lit(',') >> properties) ^ (lit(',') >> omit[id]))
+        >> lit('}')
+        ;
+
+    linestring = lit('{')
+        >> lit("\"type\"") >> lit(':') >> lit("\"LineString\"")
+        >> ((lit(',') >> lit("\"arcs\"") >> lit(':') >> lit('[') >> int_ >> lit(']'))
+            ^ (lit(',') >> properties) ^ (lit(',') >> omit[id]))
+        >> lit('}')
+        ;
+
+    multi_linestring = lit('{')
+        >> lit("\"type\"") >> lit(':') >> lit("\"MultiLineString\"")
+        >> ((lit(',') >> lit("\"arcs\"") >> lit(':') >> lit('[')
+             >> -((lit('[') >> int_ >> lit(']')) % lit(',')) >> lit(']'))
+            ^ (lit(',') >> properties) ^ (lit(',') >> omit[id]))
+        >> lit('}')
+        ;
+
+    polygon = lit('{')
+        >> lit("\"type\"") >> lit(':') >> lit("\"Polygon\"")
+        >> ((lit(',') >> lit("\"arcs\"") >> lit(':')
+             >> lit('[') >> -(ring % lit(',')) >> lit(']'))
+            ^ (lit(',') >> properties) ^ (lit(',') >> omit[id]))
+        >> lit('}')
+        ;
+
+    multi_polygon = lit('{')
+        >> lit("\"type\"") >> lit(':') >> lit("\"MultiPolygon\"")
+        >> ((lit(',') >> lit("\"arcs\"") >> lit(':')
+             >> lit('[')
+             >> -((lit('[') >> -(ring % lit(',')) >> lit(']')) % lit(','))
+             >> lit(']')) ^ (lit(',') >> properties) ^ (lit(',') >> omit[id]))
+        >> lit('}')
+        ;
+
+    id = lit("\"id\"") >> lit(':') >> omit[json_.value]
+        ;
+
+    ring = lit('[') >> -(int_ % lit(',')) >> lit(']')
+        ;
+
+    properties = lit("\"properties\"")
+        >> lit(':')
+        >> (( lit('{') >> attributes >> lit('}')) | json_.object)
+        ;
+
+    attributes = (json_.string_ >> lit(':') >> attribute_value) % lit(',')
+        ;
+
+    attribute_value %= json_.number | json_.string_  ;
+
+    arcs = lit("\"arcs\"") >> lit(':')
+                           >> lit('[') >> -( arc % lit(',')) >> lit(']') ;
+
+    arc = lit('[') >> -(coordinate % lit(',')) >> lit(']') ;
+
+    coordinate = lit('[') >> double_ >> lit(',') >> double_ >> lit(']');
+
+    topology.name("topology");
+    transform.name("transform");
+    objects.name("objects");
+    arc.name("arc");
+    arcs.name("arcs");
+    json_.value.name("value");
+    coordinate.name("coordinate");
+
+    point.name("point");
+    multi_point.name("multi_point");
+    linestring.name("linestring");
+    polygon.name("polygon");
+    multi_polygon.name("multi_polygon");
+    geometry_collection.name("geometry_collection");
+    // error handler
+    on_error<fail>(topology, error_handler(_1, _2, _3, _4));
+}
+
+}}
diff --git a/include/mapnik/json/topojson_utils.hpp b/include/mapnik/json/topojson_utils.hpp
new file mode 100644
index 0000000..e3d4a08
--- /dev/null
+++ b/include/mapnik/json/topojson_utils.hpp
@@ -0,0 +1,222 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_TOPOJSON_UTILS_HPP
+#define MAPNIK_TOPOJSON_UTILS_HPP
+
+// mapnik
+#include <mapnik/box2d.hpp>
+#include <mapnik/json/topology.hpp>
+#include <mapnik/util/variant.hpp>
+
+namespace mapnik { namespace topojson {
+
+struct bounding_box_visitor : public mapnik::util::static_visitor<box2d<double> >
+{
+    bounding_box_visitor(topology const& topo)
+        : topo_(topo) {}
+
+    box2d<double> operator() (mapnik::topojson::point const& pt) const
+    {
+        double x = pt.coord.x;
+        double y = pt.coord.y;
+        if (topo_.tr)
+        {
+            x =  x * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+            y =  y * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+        }
+        return box2d<double>(x, y, x, y);
+    }
+
+    box2d<double> operator() (mapnik::topojson::multi_point const& multi_pt) const
+    {
+        box2d<double> bbox;
+        bool first = true;
+        for (auto const& pt : multi_pt.points)
+        {
+            double x = pt.x;
+            double y = pt.y;
+            if (topo_.tr)
+            {
+                x =  x * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                y =  y * (*topo_.tr).scale_y + (*topo_.tr).translate_y; // TODO : delta encoded ?
+            }
+            if (first)
+            {
+                first = false;
+                bbox.init(x,y,x,y);
+            }
+            else
+            {
+                bbox.expand_to_include(x,y);
+            }
+        }
+        return bbox;
+    }
+
+    box2d<double> operator() (mapnik::topojson::linestring const& line) const
+    {
+        box2d<double> bbox;
+        bool first = true;
+        double px = 0, py = 0;
+        index_type arc_index = line.ring;
+        for (auto pt : topo_.arcs[arc_index].coordinates)
+        {
+            double x = pt.x;
+            double y = pt.y;
+            if (topo_.tr)
+            {
+                x =  (px += x) * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                y =  (py += y) * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+            }
+            if (first)
+            {
+                first = false;
+                bbox.init(x, y, x, y);
+            }
+            else
+            {
+                bbox.expand_to_include(x, y);
+            }
+        }
+        return bbox;
+    }
+
+    box2d<double> operator() (mapnik::topojson::multi_linestring const& multi_line) const
+    {
+        box2d<double> bbox;
+        bool first = true;
+        for (auto index : multi_line.rings)
+        {
+            double px = 0, py = 0;
+            index_type arc_index = index < 0 ? std::abs(index) - 1 : index;
+            for (auto pt : topo_.arcs[arc_index].coordinates)
+            {
+                double x = pt.x;
+                double y = pt.y;
+                if (topo_.tr)
+                {
+                    x =  (px += x) * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                    y =  (py += y) * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+                }
+                if (first)
+                {
+                    first = false;
+                    bbox.init(x, y, x, y);
+                }
+                else
+                {
+                    bbox.expand_to_include(x, y);
+                }
+            }
+        }
+        return bbox;
+    }
+
+    box2d<double> operator() (mapnik::topojson::polygon const& poly) const
+    {
+        box2d<double> bbox;
+        bool first = true;
+        for (auto const& ring : poly.rings)
+        {
+            for (auto index : ring)
+            {
+                double px = 0, py = 0;
+                index_type arc_index = index < 0 ? std::abs(index) - 1 : index;
+                for (auto const& pt : topo_.arcs[arc_index].coordinates)
+                {
+                    double x = pt.x;
+                    double y = pt.y;
+
+                    if (topo_.tr)
+                    {
+                        x =  (px += x) * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                        y =  (py += y) * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+                    }
+
+                    if (first)
+                    {
+                        first = false;
+                        bbox.init( x, y, x, y);
+                    }
+                    else
+                    {
+                        bbox.expand_to_include(x, y);
+                    }
+                }
+            }
+        }
+        return bbox;
+    }
+
+    box2d<double> operator() (mapnik::topojson::multi_polygon const& multi_poly) const
+    {
+        box2d<double> bbox;
+        bool first = true;
+        for (auto const& poly : multi_poly.polygons)
+        {
+            for (auto const& ring : poly)
+            {
+                for (auto index : ring)
+                {
+                    double px = 0, py = 0;
+                    index_type arc_index = index < 0 ? std::abs(index) - 1 : index;
+                    for (auto const& pt : topo_.arcs[arc_index].coordinates)
+                    {
+                        double x = pt.x;
+                        double y = pt.y;
+
+                        if (topo_.tr)
+                        {
+                            x =  (px += x) * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                            y =  (py += y) * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+                        }
+
+                        if (first)
+                        {
+                            first = false;
+                            bbox.init( x, y, x, y);
+                        }
+                        else
+                        {
+                            bbox.expand_to_include(x, y);
+                        }
+                    }
+                }
+            }
+        }
+        return bbox;
+    }
+
+    template<typename T>
+    box2d<double> operator() (T const& ) const
+    {
+        return box2d<double>();
+    }
+
+private:
+    topology const& topo_;
+};
+
+}}
+
+#endif //MAPNIK_TOPOJSON_UTILS_HPP
diff --git a/include/mapnik/json/topology.hpp b/include/mapnik/json/topology.hpp
new file mode 100644
index 0000000..ad31697
--- /dev/null
+++ b/include/mapnik/json/topology.hpp
@@ -0,0 +1,200 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_TOPOLOGY_HPP
+#define MAPNIK_TOPOLOGY_HPP
+
+#include <vector>
+#include <list>
+
+#include <mapnik/json/generic_json.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/util/variant.hpp>
+
+#include <boost/fusion/include/adapt_struct.hpp>
+#include <boost/fusion/adapted/std_tuple.hpp>
+#include <boost/optional.hpp>
+
+namespace mapnik { namespace topojson {
+
+using index_type = int;
+
+struct coordinate
+{
+    double x;
+    double y;
+};
+
+using property = std::tuple<std::string, json::json_value >;
+using properties = std::vector<property>;
+
+struct point
+{
+    coordinate coord;
+    boost::optional<properties> props;
+};
+
+struct multi_point
+{
+    std::vector<coordinate> points;
+    boost::optional<properties> props;
+};
+
+struct linestring
+{
+    index_type ring ;
+    boost::optional<properties> props;
+};
+
+struct multi_linestring
+{
+    std::vector<index_type> rings;
+    boost::optional<properties> props;
+};
+
+struct polygon
+{
+    std::vector<std::vector<index_type> > rings;
+    boost::optional<properties> props;
+};
+
+struct multi_polygon
+{
+    std::vector<std::vector<std::vector<index_type> > > polygons;
+    boost::optional<properties> props;
+};
+
+struct invalid {};
+
+using geometry =  util::variant<invalid,
+                                point,
+                                linestring,
+                                polygon,
+                                multi_point,
+                                multi_linestring,
+                                multi_polygon>;
+
+using pair_type = std::tuple<double,double>;
+
+struct arc
+{
+    std::list<coordinate> coordinates;
+};
+
+struct transform
+{
+    double scale_x;
+    double scale_y;
+    double translate_x;
+    double translate_y;
+};
+
+struct bounding_box
+{
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+};
+
+struct topology
+{
+    std::vector<geometry> geometries;
+    std::vector<arc> arcs;
+    boost::optional<transform> tr;
+    boost::optional<bounding_box> bbox;
+};
+
+}}
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::coordinate,
+    (double, x)
+    (double, y)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::arc,
+    (std::list<mapnik::topojson::coordinate>, coordinates)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::transform,
+    (double, scale_x)
+    (double, scale_y)
+    (double, translate_x)
+    (double, translate_y)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::bounding_box,
+    (double, minx)
+    (double, miny)
+    (double, maxx)
+    (double, maxy)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::point,
+    (mapnik::topojson::coordinate, coord)
+    (boost::optional<mapnik::topojson::properties>, props)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::multi_point,
+    (std::vector<mapnik::topojson::coordinate>, points)
+    (boost::optional<mapnik::topojson::properties>, props)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::linestring,
+    (mapnik::topojson::index_type, ring)
+    (boost::optional<mapnik::topojson::properties>, props)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::multi_linestring,
+    (std::vector<mapnik::topojson::index_type>, rings)
+    (boost::optional<mapnik::topojson::properties>, props)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::polygon,
+    (std::vector<std::vector<mapnik::topojson::index_type> >, rings)
+    (boost::optional<mapnik::topojson::properties>, props)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::multi_polygon,
+    (std::vector<std::vector<std::vector<mapnik::topojson::index_type> > >, polygons)
+    (boost::optional<mapnik::topojson::properties>, props)
+    )
+
+BOOST_FUSION_ADAPT_STRUCT(
+    mapnik::topojson::topology,
+    (std::vector<mapnik::topojson::geometry>, geometries)
+    (std::vector<mapnik::topojson::arc>, arcs)
+    (boost::optional<mapnik::topojson::transform>, tr)
+    (boost::optional<mapnik::topojson::bounding_box>, bbox)
+   )
+
+#endif // MAPNIK_TOPOLOGY_HPP
diff --git a/include/mapnik/json/value_converters.hpp b/include/mapnik/json/value_converters.hpp
new file mode 100644
index 0000000..9bbc24e
--- /dev/null
+++ b/include/mapnik/json/value_converters.hpp
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_JSON_VALUE_CONVERTERS_HPP
+#define MAPNIK_JSON_VALUE_CONVERTERS_HPP
+
+namespace mapnik { namespace detail {
+
+template <typename T>
+struct value_converter
+{
+    using result_type = T;
+    template <typename T1>
+    result_type operator() (T1 const& val) const
+    {
+        return static_cast<result_type>(val);
+    }
+};
+
+}}
+
+
+#endif // MAPNIK_JSON_VALUE_CONVERTERS_HPP
diff --git a/include/mapnik/label_collision_detector.hpp b/include/mapnik/label_collision_detector.hpp
index 2db67d4..585be4f 100644
--- a/include/mapnik/label_collision_detector.hpp
+++ b/include/mapnik/label_collision_detector.hpp
@@ -26,10 +26,13 @@
 // mapnik
 #include <mapnik/quad_tree.hpp>
 #include <mapnik/noncopyable.hpp>
+#include <mapnik/value_types.hpp>
+
+// icu
+#include <unicode/unistr.h>
 
 // stl
 #include <vector>
-#include <unicode/unistr.h>
 
 namespace mapnik
 {
@@ -38,17 +41,13 @@ namespace mapnik
 
 struct label_collision_detector
 {
-    typedef std::vector<box2d<double> > label_placements;
+    using label_placements = std::vector<box2d<double> >;
 
     bool has_placement(box2d<double> const& box)
     {
-        label_placements::const_iterator itr=labels_.begin();
-        for( ; itr !=labels_.end();++itr)
+        for (auto const& label : labels_)
         {
-            if (itr->intersects(box))
-            {
-                return false;
-            }
+            if (label.intersects(box)) return false;
         }
         labels_.push_back(box);
         return true;
@@ -66,7 +65,7 @@ private:
 // quad_tree based label collision detector
 class label_collision_detector2 : mapnik::noncopyable
 {
-    typedef quad_tree<box2d<double> > tree_t;
+    using tree_t = quad_tree<box2d<double> >;
     tree_t tree_;
 public:
 
@@ -77,15 +76,10 @@ public:
     {
         tree_t::query_iterator itr = tree_.query_in_box(box);
         tree_t::query_iterator end = tree_.query_end();
-
         for ( ;itr != end; ++itr)
         {
-            if (itr->intersects(box))
-            {
-                return false;
-            }
+            if (itr->intersects(box)) return false;
         }
-
         tree_.insert(box,box);
         return true;
     }
@@ -100,7 +94,7 @@ public:
 // quad_tree based label collision detector with seperate check/insert
 class label_collision_detector3 : mapnik::noncopyable
 {
-    typedef quad_tree< box2d<double> > tree_t;
+    using tree_t = quad_tree< box2d<double> >;
     tree_t tree_;
 public:
 
@@ -114,12 +108,8 @@ public:
 
         for ( ;itr != end; ++itr)
         {
-            if (itr->intersects(box))
-            {
-                return false;
-            }
+            if (itr->intersects(box)) return false;
         }
-
         return true;
     }
 
@@ -142,18 +132,18 @@ public:
     struct label
     {
         label(box2d<double> const& b) : box(b), text() {}
-        label(box2d<double> const& b, UnicodeString const& t) : box(b), text(t) {}
+        label(box2d<double> const& b, mapnik::value_unicode_string const& t) : box(b), text(t) {}
 
         box2d<double> box;
-        UnicodeString text;
+        mapnik::value_unicode_string text;
     };
 
 private:
-    typedef quad_tree< label > tree_t;
+    using tree_t = quad_tree< label >;
     tree_t tree_;
 
 public:
-    typedef tree_t::query_iterator query_iterator;
+    using query_iterator = tree_t::query_iterator;
 
     explicit label_collision_detector4(box2d<double> const& extent)
         : tree_(extent) {}
@@ -165,41 +155,53 @@ public:
 
         for ( ;itr != end; ++itr)
         {
-            if (itr->box.intersects(box))
-            {
-                return false;
-            }
+            if (itr->box.intersects(box)) return false;
         }
 
         return true;
     }
 
-    bool has_placement(box2d<double> const& box, UnicodeString const& text, double distance)
+    bool has_placement(box2d<double> const& box, double margin)
     {
-        box2d<double> bigger_box(box.minx() - distance, box.miny() - distance, box.maxx() + distance, box.maxy() + distance);
-        tree_t::query_iterator itr = tree_.query_in_box(bigger_box);
+        box2d<double> const& margin_box = (margin > 0
+                                               ? box2d<double>(box.minx() - margin, box.miny() - margin,
+                                                               box.maxx() + margin, box.maxy() + margin)
+                                               : box);
+
+        tree_t::query_iterator itr = tree_.query_in_box(margin_box);
         tree_t::query_iterator end = tree_.query_end();
 
-        for ( ;itr != end; ++itr)
+        for (;itr != end; ++itr)
         {
-            if (itr->box.intersects(box) || (text == itr->text && itr->box.intersects(bigger_box)))
+            if (itr->box.intersects(margin_box))
             {
                 return false;
             }
         }
-
         return true;
     }
 
-    bool has_point_placement(box2d<double> const& box, double distance)
+    bool has_placement(box2d<double> const& box, double margin, mapnik::value_unicode_string const& text, double repeat_distance)
     {
-        box2d<double> bigger_box(box.minx() - distance, box.miny() - distance, box.maxx() + distance, box.maxy() + distance);
-        tree_t::query_iterator itr = tree_.query_in_box(bigger_box);
+        // Don't bother with any of the repeat checking unless the repeat distance is greater than the margin
+        if (repeat_distance <= margin) {
+            return has_placement(box, margin);
+        }
+
+        box2d<double> repeat_box(box.minx() - repeat_distance, box.miny() - repeat_distance,
+                                 box.maxx() + repeat_distance, box.maxy() + repeat_distance);
+
+        box2d<double> const& margin_box = (margin > 0
+                                               ? box2d<double>(box.minx() - margin, box.miny() - margin,
+                                                               box.maxx() + margin, box.maxy() + margin)
+                                               : box);
+
+        tree_t::query_iterator itr = tree_.query_in_box(repeat_box);
         tree_t::query_iterator end = tree_.query_end();
 
         for ( ;itr != end; ++itr)
         {
-            if (itr->box.intersects(bigger_box))
+            if (itr->box.intersects(margin_box) || (text == itr->text && itr->box.intersects(repeat_box)))
             {
                 return false;
             }
@@ -213,7 +215,7 @@ public:
         tree_.insert(label(box), box);
     }
 
-    void insert(box2d<double> const& box, UnicodeString const& text)
+    void insert(box2d<double> const& box, mapnik::value_unicode_string const& text)
     {
         tree_.insert(label(box, text), box);
     }
diff --git a/include/mapnik/layer.hpp b/include/mapnik/layer.hpp
index a259b97..9ce8ff7 100644
--- a/include/mapnik/layer.hpp
+++ b/include/mapnik/layer.hpp
@@ -24,15 +24,19 @@
 #define MAPNIK_LAYER_HPP
 
 // mapnik
-#include <mapnik/feature.hpp>
-#include <mapnik/datasource.hpp>
 #include <mapnik/well_known_srs.hpp>
+#include <mapnik/box2d.hpp>
 
 // stl
 #include <vector>
+#include <memory>
 
 namespace mapnik
 {
+
+class datasource;
+using datasource_ptr = std::shared_ptr<datasource>;
+
 /*!
  * @brief A Mapnik map layer.
  *
@@ -46,9 +50,11 @@ class MAPNIK_DECL layer
 public:
     layer(std::string const& name,
           std::string const& srs=MAPNIK_LONGLAT_PROJ);
-
+    // copy
     layer(layer const& l);
-    layer& operator=(layer const& rhs);
+    // move
+    layer(layer && l);
+    layer& operator=(layer rhs);
     bool operator==(layer const& other) const;
 
     /*!
@@ -167,7 +173,7 @@ public:
     /*!
      * @param column Set the field rendering of this layer is grouped by.
      */
-    void set_group_by(std::string column);
+    void set_group_by(std::string const& column);
 
     /*!
      * @return The field rendering of this layer is grouped by.
@@ -199,11 +205,8 @@ public:
     void reset_buffer_size();
     ~layer();
 private:
-    void swap(layer& other);
-
     std::string name_;
     std::string srs_;
-
     double min_zoom_;
     double max_zoom_;
     bool active_;
diff --git a/include/mapnik/line_pattern_symbolizer.hpp b/include/mapnik/line_pattern_symbolizer.hpp
deleted file mode 100644
index f173a57..0000000
--- a/include/mapnik/line_pattern_symbolizer.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_LINE_PATTERN_SYMBOLIZER_HPP
-#define MAPNIK_LINE_PATTERN_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/path_expression.hpp>
-
-namespace mapnik
-{
-struct MAPNIK_DECL line_pattern_symbolizer :
-        public symbolizer_with_image, public symbolizer_base
-{
-    line_pattern_symbolizer(path_expression_ptr file);
-    line_pattern_symbolizer(line_pattern_symbolizer const& rhs);
-};
-}
-
-#endif // MAPNIK_LINE_PATTERN_SYMBOLIZER_HPP
diff --git a/include/mapnik/line_symbolizer.hpp b/include/mapnik/line_symbolizer.hpp
deleted file mode 100644
index 753b54e..0000000
--- a/include/mapnik/line_symbolizer.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_LINE_SYMBOLIZER_HPP
-#define MAPNIK_LINE_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/color.hpp>
-#include <mapnik/config.hpp>
-#include <mapnik/stroke.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-enum line_rasterizer_enum {
-    RASTERIZER_FULL,           // agg::renderer_scanline_aa_solid
-    RASTERIZER_FAST,           // agg::rasterizer_outline_aa, twice as fast but only good for thin lines
-    line_rasterizer_enum_MAX
-};
-
-DEFINE_ENUM( line_rasterizer_e, line_rasterizer_enum );
-
-
-struct MAPNIK_DECL line_symbolizer : public symbolizer_base
-{
-    explicit line_symbolizer()
-        : symbolizer_base(),
-        stroke_(),
-        offset_(0.0),
-        rasterizer_p_(RASTERIZER_FULL)
-        {}
-    
-    line_symbolizer(stroke const& stroke)
-        : symbolizer_base(),
-        stroke_(stroke),
-        offset_(0.0),
-        rasterizer_p_(RASTERIZER_FULL)
-        {}
-
-    line_symbolizer(color const& pen,float width=1.0)
-        : symbolizer_base(),
-        stroke_(pen,width),
-        offset_(0.0),
-        rasterizer_p_(RASTERIZER_FULL)
-        {}
-
-    stroke const& get_stroke() const
-    {
-        return stroke_;
-    }
-
-    void set_stroke(stroke const& stk)
-    {
-        stroke_ = stk;
-    }
-    
-    void set_offset(double val)
-    {
-        offset_ = val;
-    }
-    
-    double offset() const
-    {
-        return offset_;
-    }
-
-    void set_rasterizer(line_rasterizer_e rasterizer_p)
-    {
-        rasterizer_p_ = rasterizer_p;
-    }
-
-    line_rasterizer_e get_rasterizer() const
-    {
-        return rasterizer_p_;
-    }
-
-private:
-    stroke stroke_;
-    double offset_;
-    line_rasterizer_e rasterizer_p_;
-};
-}
-
-#endif // MAPNIK_LINE_SYMBOLIZER_HPP
diff --git a/include/mapnik/load_map.hpp b/include/mapnik/load_map.hpp
index b269b83..1ef69fb 100644
--- a/include/mapnik/load_map.hpp
+++ b/include/mapnik/load_map.hpp
@@ -24,7 +24,6 @@
 #define MAPNIK_LOAD_MAP_HPP
 
 // mapnik
-#include <mapnik/map.hpp>
 #include <mapnik/config.hpp> // for MAPNIK_DECL
 
 // stl
@@ -32,6 +31,8 @@
 
 namespace mapnik
 {
+class Map;
+
 MAPNIK_DECL void load_map(Map & map, std::string const& filename, bool strict = false, std::string base_path="");
 MAPNIK_DECL void load_map_string(Map & map, std::string const& str, bool strict = false, std::string base_path="");
 }
diff --git a/include/mapnik/make_unique.hpp b/include/mapnik/make_unique.hpp
new file mode 100644
index 0000000..ea2974c
--- /dev/null
+++ b/include/mapnik/make_unique.hpp
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_MAKE_UNIQUE_HPP
+#define MAPNIK_MAKE_UNIQUE_HPP
+
+#include <memory>
+
+// http://stackoverflow.com/questions/14131454/visual-studio-2012-cplusplus-and-c-11
+#if defined(_MSC_VER) && _MSC_VER < 1800 || !defined(_MSC_VER) && __cplusplus <= 201103L
+
+namespace std {
+
+// C++14 backfill from http://herbsutter.com/gotw/_102/
+template<typename T, typename ...Args>
+inline std::unique_ptr<T> make_unique(Args&& ...args) {
+    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
+}
+
+}
+#endif
+
+#endif // MAPNIK_MAKE_UNIQUE_HPP
diff --git a/include/mapnik/map.hpp b/include/mapnik/map.hpp
index fcf1218..815d6a8 100644
--- a/include/mapnik/map.hpp
+++ b/include/mapnik/map.hpp
@@ -24,24 +24,35 @@
 #define MAPNIK_MAP_HPP
 
 // mapnik
+#include <mapnik/config.hpp>
 #include <mapnik/color.hpp>
 #include <mapnik/font_set.hpp>
 #include <mapnik/enumeration.hpp>
-#include <mapnik/datasource.hpp>  // for featureset_ptr
-#include <mapnik/layer.hpp>
+#include <mapnik/box2d.hpp>
 #include <mapnik/params.hpp>
 #include <mapnik/well_known_srs.hpp>
+#include <mapnik/image_compositing.hpp>
+#include <mapnik/font_engine_freetype.hpp>
 
 // boost
-#include <boost/optional/optional.hpp>
+#include <boost/optional.hpp>
+
+// stl
+#include <map>
+#include <memory>
+#include <vector>
+#include <string>
 
 namespace mapnik
 {
 
+struct Featureset;
+using featureset_ptr = std::shared_ptr<Featureset>;
 class feature_type_style;
-class CoordTransform;
+class view_transform;
+class layer;
 
-class MAPNIK_DECL Map
+class MAPNIK_DECL Map : boost::equality_comparable<Map>
 {
 public:
 
@@ -61,9 +72,10 @@ public:
         ADJUST_BBOX_HEIGHT,
         // adjust the width of the map, leave height and geo bbox unchanged
         ADJUST_CANVAS_WIDTH,
-        //adjust the height of the map, leave width and geo bbox unchanged
+        // adjust the height of the map, leave width and geo bbox unchanged
         ADJUST_CANVAS_HEIGHT,
-        //
+        // do nothing
+        RESPECT,
         aspect_fix_mode_MAX
     };
 
@@ -76,6 +88,8 @@ private:
     int buffer_size_;
     boost::optional<color> background_;
     boost::optional<std::string> background_image_;
+    composite_mode_e background_image_comp_op_;
+    float background_image_opacity_;
     std::map<std::string,feature_type_style> styles_;
     std::map<std::string,font_set> fontsets_;
     std::vector<layer> layers_;
@@ -84,13 +98,16 @@ private:
     boost::optional<box2d<double> > maximum_extent_;
     std::string base_path_;
     parameters extra_params_;
+    boost::optional<std::string> font_directory_;
+    freetype_engine::font_file_mapping_type font_file_mapping_;
+    freetype_engine::font_memory_cache_type font_memory_cache_;
 
 public:
 
-    typedef std::map<std::string,feature_type_style>::const_iterator const_style_iterator;
-    typedef std::map<std::string,feature_type_style>::iterator style_iterator;
-    typedef std::map<std::string,font_set>::const_iterator const_fontset_iterator;
-    typedef std::map<std::string,font_set>::iterator fontset_iterator;
+    using const_style_iterator = std::map<std::string,feature_type_style>::const_iterator;
+    using style_iterator = std::map<std::string,feature_type_style>::iterator;
+    using const_fontset_iterator = std::map<std::string,font_set>::const_iterator;
+    using fontset_iterator = std::map<std::string,font_set>::iterator;
 
     /*! \brief Default constructor.
      *
@@ -106,20 +123,22 @@ public:
      *  @param height Initial map height.
      *  @param srs Initial map projection.
      */
-    Map(int width, int height, std::string const& srs=MAPNIK_LONGLAT_PROJ);
+    Map(int width, int height, std::string const& srs = MAPNIK_LONGLAT_PROJ);
 
-    /*! \brief Copy Constructur.
+    /*! \brief Copy Constructor.
      *
      *  @param rhs Map to copy from.
      */
     Map(Map const& rhs);
 
-    /*! \brief Assignment operator
-     *
-     *  TODO: to be documented
-     *
-     */
-    Map& operator=(Map const& rhs);
+    // move ctor
+    Map(Map && other);
+
+    // assignment operator
+    Map& operator=(Map rhs);
+
+    // comparison op
+    bool operator==(Map const& other) const;
 
     /*! \brief Get all styles
      * @return Const reference to styles
@@ -151,7 +170,7 @@ public:
      */
     style_iterator end_styles();
 
-    /*! \brief Insert a style in the map.
+    /*! \brief Insert a style in the map by copying.
      *  @param name The name of the style.
      *  @param style The style to insert.
      *  @return true If success.
@@ -159,6 +178,14 @@ public:
      */
     bool insert_style(std::string const& name,feature_type_style const& style);
 
+    /*! \brief Insert a style in the map by moving..
+     *  @param name The name of the style.
+     *  @param style The style to insert.
+     *  @return true If success.
+     *          false If no success.
+     */
+    bool insert_style(std::string const& name,feature_type_style && style);
+
     /*! \brief Remove a style from the map.
      *  @param name The name of the style.
      */
@@ -170,7 +197,7 @@ public:
      */
     boost::optional<feature_type_style const&> find_style(std::string const& name) const;
 
-    /*! \brief Insert a fontset into the map.
+    /*! \brief Insert a fontset into the map by copying.
      *  @param name The name of the fontset.
      *  @param fontset The fontset to insert.
      *  @return true If success.
@@ -178,6 +205,14 @@ public:
      */
     bool insert_fontset(std::string const& name, font_set const& fontset);
 
+    /*! \brief Insert a fontset into the map by moving.
+     *  @param name The name of the fontset.
+     *  @param fontset The fontset to insert.
+     *  @return true If success.
+     *          false If failure.
+     */
+    bool insert_fontset(std::string const& name, font_set && fontset);
+
     /*! \brief Find a fontset.
      *  @param name The name of the fontset.
      *  @return The fontset if found. If not found return the default map fontset.
@@ -194,31 +229,44 @@ public:
      */
     std::map<std::string,font_set> & fontsets();
 
+    /*! \brief register fonts.
+     */
+    bool register_fonts(std::string const& dir, bool recurse);
+
+    /*! \brief cache registered fonts.
+     */
+    bool load_fonts();
+
     /*! \brief Get number of all layers.
      */
     size_t layer_count() const;
 
-    /*! \brief Add a layer to the map.
+    /*! \brief Add a layer to the map by copying it.
      *  @param l The layer to add.
      */
-    void addLayer(layer const& l);
+    void add_layer(layer const& l);
+
+    /*! \brief Add a layer to the map by moving it.
+     *  @param l The layer to add.
+     */
+    void add_layer(layer && l);
 
     /*! \brief Get a layer.
      *  @param index layer number.
      *  @return Constant layer.
      */
-    layer const& getLayer(size_t index) const;
+    layer const& get_layer(size_t index) const;
 
     /*! \brief Get a layer.
      *  @param index layer number.
      *  @return Non-constant layer.
      */
-    layer& getLayer(size_t index);
+    layer& get_layer(size_t index);
 
     /*! \brief Remove a layer.
      *  @param index layer number.
      */
-    void removeLayer(size_t index);
+    void remove_layer(size_t index);
 
     /*! \brief Get all layers.
      *  @return Constant layers.
@@ -286,10 +334,30 @@ public:
      */
     boost::optional<std::string> const& background_image() const;
 
+    /*! \brief Set the compositing operation uses to blend the background image into the background color.
+     *  @param comp_op compositing operation.
+     */
+    void set_background_image_comp_op(composite_mode_e comp_op);
+
+    /*! \brief Get the map background image compositing operation
+     *  @return Background image compositing operation as composite_mode_e
+     *  object
+     */
+    composite_mode_e background_image_comp_op() const;
+
+    /*! \brief Set the map background image opacity.
+     *  @param opacity Background image opacity.
+     */
+    void set_background_image_opacity(float opacity);
+
+    /*! \brief Get the map background image opacity
+     *  @return opacity value as float
+     */
+    float background_image_opacity() const;
+
     /*! \brief Set buffer size
      *  @param buffer_size Buffer size in pixels.
      */
-
     void set_buffer_size(int buffer_size);
 
     /*! \brief Get the map buffer size
@@ -354,7 +422,7 @@ public:
 
     double scale_denominator() const;
 
-    CoordTransform view_transform() const;
+    view_transform transform() const;
 
     /*!
      * @brief Query a Map layer (by layer index) for features
@@ -365,7 +433,7 @@ public:
      * @param index The index of the layer to query from.
      * @param x The x coordinate where to query.
      * @param y The y coordinate where to query.
-     * @return A Mapnik Featureset if successful otherwise will return NULL.
+     * @return A Mapnik Featureset if successful otherwise will return nullptr.
      */
     featureset_ptr query_point(unsigned index, double x, double y) const;
 
@@ -378,7 +446,7 @@ public:
      * @param index The index of the layer to query from.
      * @param x The x coordinate where to query.
      * @param y The y coordinate where to query.
-     * @return A Mapnik Featureset if successful otherwise will return NULL.
+     * @return A Mapnik Featureset if successful otherwise will return nullptr.
      */
     featureset_ptr query_map_point(unsigned index, double x, double y) const;
 
@@ -402,7 +470,38 @@ public:
      */
     void set_extra_parameters(parameters& params);
 
+    boost::optional<std::string> const& font_directory() const
+    {
+        return font_directory_;
+    }
+
+    void set_font_directory(std::string const& dir)
+    {
+        font_directory_ = dir;
+    }
+
+    freetype_engine::font_file_mapping_type const& get_font_file_mapping() const
+    {
+        return font_file_mapping_;
+    }
+
+    freetype_engine::font_file_mapping_type & get_font_file_mapping()
+    {
+        return font_file_mapping_;
+    }
+
+    freetype_engine::font_memory_cache_type const& get_font_memory_cache() const
+    {
+        return font_memory_cache_;
+    }
+
+    freetype_engine::font_memory_cache_type & get_font_memory_cache()
+    {
+        return font_memory_cache_;
+    }
+
 private:
+    friend void swap(Map & rhs, Map & lhs);
     void fixAspectRatio();
 };
 
diff --git a/include/mapnik/mapped_memory_cache.hpp b/include/mapnik/mapped_memory_cache.hpp
index 34151b2..c1f9c50 100644
--- a/include/mapnik/mapped_memory_cache.hpp
+++ b/include/mapnik/mapped_memory_cache.hpp
@@ -29,24 +29,23 @@
 #include <mapnik/noncopyable.hpp>
 
 // boost
-#include <boost/unordered_map.hpp>
-#include <boost/interprocess/mapped_region.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
+#include <unordered_map>
 #include <boost/optional.hpp>
 
+namespace boost { namespace interprocess { class mapped_region; } }
+
 namespace mapnik
 {
 
-using namespace boost::interprocess;
-
-typedef boost::shared_ptr<mapped_region> mapped_region_ptr;
+using mapped_region_ptr = std::shared_ptr<boost::interprocess::mapped_region>;
 
 class MAPNIK_DECL mapped_memory_cache :
         public singleton<mapped_memory_cache, CreateStatic>,
         private mapnik::noncopyable
 {
     friend class CreateStatic<mapped_memory_cache>;
-    boost::unordered_map<std::string,mapped_region_ptr> cache_;
+    std::unordered_map<std::string,mapped_region_ptr> cache_;
 public:
     bool insert(std::string const& key, mapped_region_ptr);
     boost::optional<mapped_region_ptr> find(std::string const& key, bool update_cache = false);
diff --git a/include/mapnik/marker.hpp b/include/mapnik/marker.hpp
index 568f565..9f008ff 100644
--- a/include/mapnik/marker.hpp
+++ b/include/mapnik/marker.hpp
@@ -24,33 +24,28 @@
 #define MAPNIK_MARKER_HPP
 
 // mapnik
-#include <mapnik/global.hpp>
 #include <mapnik/image_data.hpp>
-#include <mapnik/svg/svg_path_attributes.hpp>
 #include <mapnik/svg/svg_storage.hpp>
+#include <mapnik/svg/svg_path_attributes.hpp>
 #include <mapnik/svg/svg_path_adapter.hpp>
 #include <mapnik/noncopyable.hpp>
 
 // agg
-#include "agg_path_storage.h"
+#include "agg_array.h"
 
 // boost
-#include <boost/unordered_map.hpp>
-#include <boost/shared_ptr.hpp>
 #include <boost/optional.hpp>
-#include <boost/make_shared.hpp>
 
 // stl
-#include <cassert>
-#include <cstring>
+#include <memory>
 
 namespace mapnik
 {
 
-typedef agg::pod_bvector<mapnik::svg::path_attributes> attr_storage;
-typedef mapnik::svg::svg_storage<mapnik::svg::svg_path_storage,attr_storage> svg_storage_type;
-typedef boost::shared_ptr<svg_storage_type> svg_path_ptr;
-typedef boost::shared_ptr<image_data_32> image_ptr;
+using attr_storage = agg::pod_bvector<mapnik::svg::path_attributes>;
+using svg_storage_type = mapnik::svg::svg_storage<mapnik::svg::svg_path_storage,attr_storage>;
+using svg_path_ptr = std::shared_ptr<svg_storage_type>;
+using image_ptr = std::shared_ptr<image_data_32>;
 /**
  * A class to hold either vector or bitmap marker data. This allows these to be treated equally
  * in the image caches and most of the render paths.
@@ -61,26 +56,19 @@ public:
     marker()
     {
         // create default OGC 4x4 black pixel
-        bitmap_data_ = boost::optional<mapnik::image_ptr>(boost::make_shared<image_data_32>(4,4));
+        bitmap_data_ = boost::optional<mapnik::image_ptr>(std::make_shared<image_data_32>(4,4));
         (*bitmap_data_)->set(0xff000000);
     }
 
     marker(boost::optional<mapnik::image_ptr> const& data)
-        : bitmap_data_(data)
-    {
-
-    }
+        : bitmap_data_(data) {}
 
     marker(boost::optional<mapnik::svg_path_ptr> const& data)
-        : vector_data_(data)
-    {
-
-    }
+        : vector_data_(data) {}
 
     marker(marker const& rhs)
         : bitmap_data_(rhs.bitmap_data_),
-          vector_data_(rhs.vector_data_)
-    {}
+          vector_data_(rhs.vector_data_) {}
 
     box2d<double> bounding_box() const
     {
@@ -124,12 +112,12 @@ public:
 
     inline bool is_bitmap() const
     {
-        return bitmap_data_;
+        return !!bitmap_data_;
     }
 
     inline bool is_vector() const
     {
-        return vector_data_;
+        return !!vector_data_;
     }
 
     boost::optional<mapnik::image_ptr> get_bitmap_data() const
diff --git a/include/mapnik/marker_cache.hpp b/include/mapnik/marker_cache.hpp
index eca2dec..6210deb 100644
--- a/include/mapnik/marker_cache.hpp
+++ b/include/mapnik/marker_cache.hpp
@@ -30,7 +30,7 @@
 
 // boost
 #include <boost/unordered_map.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 #include <boost/optional.hpp>
 
 namespace mapnik
@@ -38,7 +38,7 @@ namespace mapnik
 
 class marker;
 
-typedef boost::shared_ptr<marker> marker_ptr;
+using marker_ptr = std::shared_ptr<marker>;
 
 
 class MAPNIK_DECL marker_cache :
@@ -55,7 +55,10 @@ private:
     boost::unordered_map<std::string,std::string> svg_cache_;
 public:
     std::string known_svg_prefix_;
-    bool is_uri(std::string const& path);
+    std::string known_image_prefix_;
+    inline bool is_uri(std::string const& path) { return is_svg_uri(path) || is_image_uri(path); }
+    bool is_svg_uri(std::string const& path);
+    bool is_image_uri(std::string const& path);
     boost::optional<marker_ptr> find(std::string const& key, bool update_cache = false);
     void clear();
 };
diff --git a/include/mapnik/marker_helpers.hpp b/include/mapnik/marker_helpers.hpp
index 41431a1..ed6eca1 100644
--- a/include/mapnik/marker_helpers.hpp
+++ b/include/mapnik/marker_helpers.hpp
@@ -27,23 +27,27 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/geometry.hpp>
 #include <mapnik/geom_util.hpp>
-#include <mapnik/markers_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/expression_node.hpp>
 #include <mapnik/expression_evaluator.hpp>
 #include <mapnik/svg/svg_path_attributes.hpp>
 #include <mapnik/svg/svg_converter.hpp>
 #include <mapnik/marker.hpp> // for svg_storage_type
-#include <mapnik/svg/svg_storage.hpp>
 #include <mapnik/markers_placement.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/vertex_converters.hpp>
+#include <mapnik/label_collision_detector.hpp>
 
 // agg
 #include "agg_ellipse.h"
-#include "agg_basics.h"
+#include "agg_color_rgba.h"
 #include "agg_renderer_base.h"
 #include "agg_renderer_scanline.h"
 #include "agg_rendering_buffer.h"
 #include "agg_scanline_u.h"
 #include "agg_image_filters.h"
-#include "agg_trans_bilinear.h"
+#include "agg_trans_affine.h"
 #include "agg_span_allocator.h"
 #include "agg_image_accessors.h"
 #include "agg_pixfmt_rgba.h"
@@ -52,213 +56,173 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/variant/apply_visitor.hpp>
+
+// stl
+#include <memory>
+#include <type_traits> // remove_reference
+#include <cmath>
 
 namespace mapnik {
 
+struct clip_poly_tag;
+
+using svg_attribute_type = agg::pod_bvector<svg::path_attributes>;
 
-template <typename BufferType, typename SvgRenderer, typename Rasterizer, typename Detector>
-struct vector_markers_rasterizer_dispatch
+template <typename SvgRenderer, typename Detector, typename RendererContext>
+struct vector_markers_rasterizer_dispatch : mapnik::noncopyable
 {
-    typedef typename SvgRenderer::renderer_base renderer_base;
-    typedef typename renderer_base::pixfmt_type pixfmt_type;
+    using renderer_base = typename SvgRenderer::renderer_base        ;
+    using vertex_source_type = typename SvgRenderer::vertex_source_type   ;
+    using attribute_source_type = typename SvgRenderer::attribute_source_type;
+    using pixfmt_type = typename renderer_base::pixfmt_type        ;
 
-    vector_markers_rasterizer_dispatch(BufferType & render_buffer,
-                                SvgRenderer & svg_renderer,
-                                Rasterizer & ras,
-                                box2d<double> const& bbox,
-                                agg::trans_affine const& marker_trans,
-                                markers_symbolizer const& sym,
-                                Detector & detector,
-                                double scale_factor,
-                                bool snap_to_pixels)
-        : buf_(render_buffer),
+    using BufferType = typename std::tuple_element<0,RendererContext>::type;
+    using RasterizerType = typename std::tuple_element<1,RendererContext>::type;
+
+    vector_markers_rasterizer_dispatch(vertex_source_type & path,
+                                       attribute_source_type const& attrs,
+                                       box2d<double> const& bbox,
+                                       agg::trans_affine const& marker_trans,
+                                       symbolizer_base const& sym,
+                                       Detector & detector,
+                                       double scale_factor,
+                                       feature_impl & feature,
+                                       attributes const& vars,
+                                       bool snap_to_pixels,
+                                       RendererContext const& renderer_context)
+    : buf_(std::get<0>(renderer_context)),
         pixf_(buf_),
         renb_(pixf_),
-        svg_renderer_(svg_renderer),
-        ras_(ras),
+        svg_renderer_(path, attrs),
+        ras_(std::get<1>(renderer_context)),
         bbox_(bbox),
         marker_trans_(marker_trans),
         sym_(sym),
         detector_(detector),
+        feature_(feature),
+        vars_(vars),
         scale_factor_(scale_factor),
         snap_to_pixels_(snap_to_pixels)
     {
-        pixf_.comp_op(static_cast<agg::comp_op_e>(sym_.comp_op()));
+        pixf_.comp_op(static_cast<agg::comp_op_e>(get<composite_mode_e, keys::comp_op>(sym,feature_, vars_)));
     }
 
     template <typename T>
     void add_path(T & path)
     {
-        marker_placement_e placement_method = sym_.get_marker_placement();
-
-        if (placement_method != MARKER_LINE_PLACEMENT ||
-            path.type() == Point)
+        agg::scanline_u8 sl_;
+        marker_placement_enum placement_method = get<marker_placement_enum, keys::markers_placement_type>(sym_, feature_, vars_);
+        value_bool ignore_placement = get<value_bool, keys::ignore_placement>(sym_, feature_, vars_);
+        value_bool allow_overlap = get<value_bool, keys::allow_overlap>(sym_, feature_, vars_);
+        value_bool avoid_edges = get<value_bool, keys::avoid_edges>(sym_, feature_, vars_);
+        value_double opacity = get<value_double,keys::opacity>(sym_, feature_, vars_);
+        value_double spacing = get<value_double, keys::spacing>(sym_, feature_, vars_);
+        value_double max_error = get<value_double, keys::max_error>(sym_, feature_, vars_);
+        coord2d center = bbox_.center();
+        agg::trans_affine_translation recenter(-center.x, -center.y);
+        agg::trans_affine tr = recenter * marker_trans_;
+        markers_placement_params params { bbox_, tr, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
+        markers_placement_finder<T, Detector> placement_finder(
+            placement_method, path, detector_, params);
+        double x, y, angle = .0;
+        while (placement_finder.get_point(x, y, angle, ignore_placement))
         {
-            double x = 0;
-            double y = 0;
-            if (path.type() == LineString)
-            {
-                if (!label::middle_point(path, x, y))
-                    return;
-            }
-            else if (placement_method == MARKER_INTERIOR_PLACEMENT)
-            {
-                if (!label::interior_position(path, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::centroid(path, x, y))
-                    return;
-            }
-            agg::trans_affine matrix = marker_trans_;
-            matrix.translate(x,y);
+            agg::trans_affine matrix = tr;
+            matrix.rotate(angle);
+            matrix.translate(x, y);
             if (snap_to_pixels_)
             {
                 // https://github.com/mapnik/mapnik/issues/1316
-                matrix.tx = std::floor(matrix.tx+.5);
-                matrix.ty = std::floor(matrix.ty+.5);
-            }
-            // TODO https://github.com/mapnik/mapnik/issues/1754
-            box2d<double> transformed_bbox = bbox_ * matrix;
-
-            if (sym_.get_allow_overlap() ||
-                detector_.has_placement(transformed_bbox))
-            {
-                svg_renderer_.render(ras_, sl_, renb_, matrix, sym_.get_opacity(), bbox_);
-                if (!sym_.get_ignore_placement())
-                {
-                    detector_.insert(transformed_bbox);
-                }
-            }
-        }
-        else
-        {
-            markers_placement<T, Detector> placement(path, bbox_, marker_trans_, detector_,
-                                                     sym_.get_spacing() * scale_factor_,
-                                                     sym_.get_max_error(),
-                                                     sym_.get_allow_overlap());
-            double x = 0;
-            double y = 0;
-            double angle = 0;
-            while (placement.get_point(x, y, angle))
-            {
-                agg::trans_affine matrix = marker_trans_;
-                matrix.rotate(angle);
-                matrix.translate(x, y);
-                svg_renderer_.render(ras_, sl_, renb_, matrix, sym_.get_opacity(), bbox_);
+                matrix.tx = std::floor(matrix.tx + .5);
+                matrix.ty = std::floor(matrix.ty + .5);
             }
+            svg_renderer_.render(ras_, sl_, renb_, matrix, opacity, bbox_);
         }
     }
+
 private:
-    agg::scanline_u8 sl_;
     BufferType & buf_;
     pixfmt_type pixf_;
     renderer_base renb_;
-    SvgRenderer & svg_renderer_;
-    Rasterizer & ras_;
+    SvgRenderer svg_renderer_;
+    RasterizerType & ras_;
     box2d<double> const& bbox_;
     agg::trans_affine const& marker_trans_;
-    markers_symbolizer const& sym_;
+    symbolizer_base const& sym_;
     Detector & detector_;
+    feature_impl & feature_;
+    attributes const& vars_;
     double scale_factor_;
     bool snap_to_pixels_;
 };
 
-template <typename BufferType, typename Rasterizer, typename Detector>
-struct raster_markers_rasterizer_dispatch
+template <typename Detector,typename RendererContext>
+struct raster_markers_rasterizer_dispatch : mapnik::noncopyable
 {
-    typedef agg::rgba8 color_type;
-    typedef agg::order_rgba order_type;
-    typedef agg::pixel32_type pixel_type;
-    typedef agg::comp_op_adaptor_rgba_pre<color_type, order_type> blender_type; // comp blender
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, BufferType> pixfmt_comp_type;
-    typedef agg::renderer_base<pixfmt_comp_type> renderer_base;
+    using BufferType = typename std::remove_reference<typename std::tuple_element<0,RendererContext>::type>::type;
+    using RasterizerType = typename std::tuple_element<1,RendererContext>::type;
+
+    using color_type = agg::rgba8;
+    using order_type = agg::order_rgba;
+    using pixel_type = agg::pixel32_type;
+    using blender_type = agg::comp_op_adaptor_rgba_pre<color_type, order_type>; // comp blender
+    using pixfmt_comp_type = agg::pixfmt_custom_blend_rgba<blender_type, BufferType>;
+    using renderer_base = agg::renderer_base<pixfmt_comp_type>;
 
-    raster_markers_rasterizer_dispatch(BufferType & render_buffer,
-                                       Rasterizer & ras,
-                                       image_data_32 const& src,
+    raster_markers_rasterizer_dispatch(image_data_32 const& src,
                                        agg::trans_affine const& marker_trans,
-                                       markers_symbolizer const& sym,
+                                       symbolizer_base const& sym,
                                        Detector & detector,
                                        double scale_factor,
-                                       bool snap_to_pixels)
-        : buf_(render_buffer),
+                                       feature_impl & feature,
+                                       attributes const& vars,
+                                       RendererContext const& renderer_context,
+                                       bool snap_to_pixels = false)
+    : buf_(std::get<0>(renderer_context)),
         pixf_(buf_),
         renb_(pixf_),
-        ras_(ras),
+        ras_(std::get<1>(renderer_context)),
         src_(src),
         marker_trans_(marker_trans),
         sym_(sym),
         detector_(detector),
+        feature_(feature),
+        vars_(vars),
         scale_factor_(scale_factor),
         snap_to_pixels_(snap_to_pixels)
     {
-        pixf_.comp_op(static_cast<agg::comp_op_e>(sym_.comp_op()));
+        pixf_.comp_op(static_cast<agg::comp_op_e>(get<composite_mode_e, keys::comp_op>(sym, feature_, vars_)));
     }
 
     template <typename T>
     void add_path(T & path)
     {
-        marker_placement_e placement_method = sym_.get_marker_placement();
+        marker_placement_enum placement_method = get<marker_placement_enum, keys::markers_placement_type>(sym_, feature_, vars_);
+        value_bool allow_overlap = get<value_bool, keys::allow_overlap>(sym_, feature_, vars_);
+        value_bool avoid_edges = get<value_bool, keys::avoid_edges>(sym_, feature_, vars_);
         box2d<double> bbox_(0,0, src_.width(),src_.height());
-
-        if (placement_method != MARKER_LINE_PLACEMENT ||
-            path.type() == Point)
+        value_double opacity = get<value_double, keys::opacity>(sym_, feature_, vars_);
+        value_bool ignore_placement = get<value_bool, keys::ignore_placement>(sym_, feature_, vars_);
+        value_double spacing = get<value_double, keys::spacing>(sym_, feature_, vars_);
+        value_double max_error = get<value_double, keys::max_error>(sym_, feature_, vars_);
+        markers_placement_params params { bbox_, marker_trans_, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
+        markers_placement_finder<T, label_collision_detector4> placement_finder(
+            placement_method, path, detector_, params);
+        double x, y, angle = .0;
+        while (placement_finder.get_point(x, y, angle, ignore_placement))
         {
-            double x = 0;
-            double y = 0;
-            if (path.type() == LineString)
-            {
-                if (!label::middle_point(path, x, y))
-                    return;
-            }
-            else if (placement_method == MARKER_INTERIOR_PLACEMENT)
-            {
-                if (!label::interior_position(path, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::centroid(path, x, y))
-                    return;
-            }
             agg::trans_affine matrix = marker_trans_;
-            matrix.translate(x,y);
-            box2d<double> transformed_bbox = bbox_ * matrix;
-
-            if (sym_.get_allow_overlap() ||
-                detector_.has_placement(transformed_bbox))
-            {
-                render_raster_marker(matrix, sym_.get_opacity());
-                if (!sym_.get_ignore_placement())
-                {
-                    detector_.insert(transformed_bbox);
-                }
-            }
-        }
-        else
-        {
-            markers_placement<T, label_collision_detector4> placement(path, bbox_, marker_trans_, detector_,
-                                                                      sym_.get_spacing() * scale_factor_,
-                                                                      sym_.get_max_error(),
-                                                                      sym_.get_allow_overlap());
-            double x, y, angle;
-            while (placement.get_point(x, y, angle))
-            {
-                agg::trans_affine matrix = marker_trans_;
-                matrix.rotate(angle);
-                matrix.translate(x, y);
-                render_raster_marker(matrix, sym_.get_opacity());
-            }
+            matrix.rotate(angle);
+            matrix.translate(x, y);
+            render_raster_marker(matrix, opacity);
         }
     }
 
     void render_raster_marker(agg::trans_affine const& marker_tr,
                               double opacity)
     {
-        typedef agg::pixfmt_rgba32_pre pixfmt_pre;
+        using pixfmt_pre = agg::pixfmt_rgba32_pre;
+        agg::scanline_u8 sl_;
         double width  = src_.width();
         double height = src_.height();
         if (std::fabs(1.0 - scale_factor_) < 0.001
@@ -269,21 +233,32 @@ struct raster_markers_rasterizer_dispatch
         {
             agg::rendering_buffer src_buffer((unsigned char *)src_.getBytes(),src_.width(),src_.height(),src_.width() * 4);
             pixfmt_pre pixf_mask(src_buffer);
-            renb_.blend_from(pixf_mask,
-                             0,
-                             std::floor(marker_tr.tx + .5),
-                             std::floor(marker_tr.ty + .5),
-                             unsigned(255*sym_.get_opacity()));
+            if (snap_to_pixels_)
+            {
+                renb_.blend_from(pixf_mask,
+                                 0,
+                                 std::floor(marker_tr.tx + .5),
+                                 std::floor(marker_tr.ty + .5),
+                                 unsigned(255*opacity));
+            }
+            else
+            {
+                renb_.blend_from(pixf_mask,
+                                 0,
+                                 marker_tr.tx,
+                                 marker_tr.ty,
+                                 unsigned(255*opacity));
+            }
         }
         else
         {
-            typedef agg::image_accessor_clone<pixfmt_pre> img_accessor_type;
-            typedef agg::span_interpolator_linear<> interpolator_type;
-            //typedef agg::span_image_filter_rgba_2x2<img_accessor_type,interpolator_type> span_gen_type;
-            typedef agg::span_image_resample_rgba_affine<img_accessor_type> span_gen_type;
-            typedef agg::renderer_scanline_aa_alpha<renderer_base,
-                    agg::span_allocator<color_type>,
-                    span_gen_type> renderer_type;
+            using img_accessor_type = agg::image_accessor_clone<pixfmt_pre>;
+            using interpolator_type = agg::span_interpolator_linear<>;
+            //using span_gen_type = agg::span_image_filter_rgba_2x2<img_accessor_type,interpolator_type>;
+            using span_gen_type = agg::span_image_resample_rgba_affine<img_accessor_type>;
+            using renderer_type = agg::renderer_scanline_aa_alpha<renderer_base,
+                                                                  agg::span_allocator<color_type>,
+                                                                  span_gen_type>;
 
             double p[8];
             p[0] = 0;     p[1] = 0;
@@ -321,204 +296,99 @@ struct raster_markers_rasterizer_dispatch
     }
 
 private:
-    agg::scanline_u8 sl_;
     BufferType & buf_;
     pixfmt_comp_type pixf_;
     renderer_base renb_;
-    Rasterizer & ras_;
+    RasterizerType & ras_;
     image_data_32 const& src_;
     agg::trans_affine const& marker_trans_;
-    markers_symbolizer const& sym_;
+    symbolizer_base const& sym_;
     Detector & detector_;
+    feature_impl & feature_;
+    attributes const& vars_;
     double scale_factor_;
     bool snap_to_pixels_;
 };
 
 
-template <typename T>
-void build_ellipse(T const& sym, mapnik::feature_impl const& feature, svg_storage_type & marker_ellipse, svg::svg_path_adapter & svg_path)
+void build_ellipse(symbolizer_base const& sym, mapnik::feature_impl & feature, attributes const& vars, svg_storage_type & marker_ellipse, svg::svg_path_adapter & svg_path);
+
+bool push_explicit_style(svg_attribute_type const& src,
+                         svg_attribute_type & dst,
+                         symbolizer_base const& sym,
+                         feature_impl & feature,
+                         attributes const& vars);
+
+void setup_transform_scaling(agg::trans_affine & tr,
+                             double svg_width,
+                             double svg_height,
+                             mapnik::feature_impl & feature,
+                             attributes const& vars,
+                             symbolizer_base const& sym);
+
+// Apply markers to a feature with multiple geometries
+template <typename Converter>
+void apply_markers_multi(feature_impl const& feature, attributes const& vars, Converter & converter, symbolizer_base const& sym)
 {
-    expression_ptr const& width_expr = sym.get_width();
-    expression_ptr const& height_expr = sym.get_height();
-    double width = 0;
-    double height = 0;
-    if (width_expr && height_expr)
-    {
-        width = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *width_expr).to_double();
-        height = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *height_expr).to_double();
-    }
-    else if (width_expr)
+    std::size_t geom_count = feature.paths().size();
+    if (geom_count == 1)
     {
-        width = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *width_expr).to_double();
-        height = width;
+        converter.apply(const_cast<geometry_type&>(feature.paths()[0]));
     }
-    else if (height_expr)
+    else if (geom_count > 1)
     {
-        height = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *height_expr).to_double();
-        width = height;
-    }
-    svg::svg_converter_type styled_svg(svg_path, marker_ellipse.attributes());
-    styled_svg.push_attr();
-    styled_svg.begin_path();
-    agg::ellipse c(0, 0, width/2.0, height/2.0);
-    styled_svg.storage().concat_path(c);
-    styled_svg.end_path();
-    styled_svg.pop_attr();
-    double lox,loy,hix,hiy;
-    styled_svg.bounding_rect(&lox, &loy, &hix, &hiy);
-    styled_svg.set_dimensions(width,height);
-    marker_ellipse.set_dimensions(width,height);
-    marker_ellipse.set_bounding_box(lox,loy,hix,hiy);
-}
+        marker_multi_policy_enum multi_policy = get<marker_multi_policy_enum, keys::markers_multipolicy>(sym, feature, vars);
+        marker_placement_enum placement = get<marker_placement_enum, keys::markers_placement_type>(sym, feature, vars);
 
-template <typename Attr>
-bool push_explicit_style(Attr const& src, Attr & dst, markers_symbolizer const& sym)
-{
-    boost::optional<stroke> const& strk = sym.get_stroke();
-    boost::optional<color> const& fill = sym.get_fill();
-    boost::optional<float> const& fill_opacity = sym.get_fill_opacity();
-    if (strk || fill || fill_opacity)
-    {
-        bool success = false;
-        for(unsigned i = 0; i < src.size(); ++i)
+        if (placement == MARKER_POINT_PLACEMENT &&
+            multi_policy == MARKER_WHOLE_MULTI)
         {
-            success = true;
-            dst.push_back(src[i]);
-            mapnik::svg::path_attributes & attr = dst.last();
-            if (attr.stroke_flag)
+            double x, y;
+            if (label::centroid_geoms(feature.paths().begin(), feature.paths().end(), x, y))
             {
-                // TODO - stroke attributes need to be boost::optional
-                // for this to work properly
-                if (strk)
-                {
-                    attr.stroke_width = strk->get_width();
-                    color const& s_color = strk->get_color();
-                    attr.stroke_color = agg::rgba(s_color.red()/255.0,
-                                                  s_color.green()/255.0,
-                                                  s_color.blue()/255.0,
-                                                  s_color.alpha()/255.0);
-                    attr.stroke_opacity = strk->get_opacity();
-                }
+                geometry_type pt(geometry_type::types::Point);
+                pt.move_to(x, y);
+                // unset any clipping since we're now dealing with a point
+                converter.template unset<clip_poly_tag>();
+                converter.apply(pt);
             }
-            if (attr.fill_flag)
+        }
+        else if ((placement == MARKER_POINT_PLACEMENT || placement == MARKER_INTERIOR_PLACEMENT) &&
+                 multi_policy == MARKER_LARGEST_MULTI)
+        {
+            // Only apply to path with largest envelope area
+            // TODO: consider using true area for polygon types
+            double maxarea = 0;
+            geometry_type const* largest = 0;
+            for (geometry_type const& geom : feature.paths())
             {
-                if (fill)
+                const box2d<double>& env = geom.envelope();
+                double area = env.width() * env.height();
+                if (area > maxarea)
                 {
-                    color const& f_color = *fill;
-                    attr.fill_color = agg::rgba(f_color.red()/255.0,
-                                                f_color.green()/255.0,
-                                                f_color.blue()/255.0,
-                                                f_color.alpha()/255.0);
-                }
-                if (fill_opacity)
-                {
-                    attr.fill_opacity = *fill_opacity;
+                    maxarea = area;
+                    largest = &geom;
                 }
             }
+            if (largest)
+            {
+                converter.apply(const_cast<geometry_type&>(*largest));
+            }
+        }
+        else
+        {
+            if (multi_policy != MARKER_EACH_MULTI && placement != MARKER_POINT_PLACEMENT)
+            {
+                MAPNIK_LOG_WARN(marker_symbolizer) << "marker_multi_policy != 'each' has no effect with marker_placement != 'point'";
+            }
+            for (geometry_type const& path : feature.paths())
+            {
+                converter.apply(const_cast<geometry_type&>(path));
+            }
         }
-        return success;
-    }
-    return false;
-}
-
-template <typename T>
-void setup_transform_scaling(agg::trans_affine & tr,
-                             double svg_width,
-                             double svg_height,
-                             mapnik::feature_impl const& feature,
-                             T const& sym)
-{
-    double width = 0;
-    double height = 0;
-
-    expression_ptr const& width_expr = sym.get_width();
-    if (width_expr)
-        width = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *width_expr).to_double();
-
-    expression_ptr const& height_expr = sym.get_height();
-    if (height_expr)
-        height = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *height_expr).to_double();
-
-    if (width > 0 && height > 0)
-    {
-        double sx = width/svg_width;
-        double sy = height/svg_height;
-        tr *= agg::trans_affine_scaling(sx,sy);
-    }
-    else if (width > 0)
-    {
-        double sx = width/svg_width;
-        tr *= agg::trans_affine_scaling(sx);
-    }
-    else if (height > 0)
-    {
-        double sy = height/svg_height;
-        tr *= agg::trans_affine_scaling(sy);
     }
 }
 
-// Apply markers to a feature with multiple geometries
-template <typename Converter>
-void apply_markers_multi(feature_impl & feature, Converter& converter, markers_symbolizer const& sym)
-{
-  std::size_t geom_count = feature.paths().size();
-  if (geom_count == 1)
-  {
-      converter.apply(feature.paths()[0]);
-  }
-  else if (geom_count > 1)
-  {
-      marker_multi_policy_e multi_policy = sym.get_marker_multi_policy();
-      marker_placement_e placement = sym.get_marker_placement();
-      if (placement == MARKER_POINT_PLACEMENT &&
-           multi_policy == MARKER_WHOLE_MULTI)
-      {
-          double x, y;
-          if (label::centroid_geoms(feature.paths().begin(), feature.paths().end(), x, y))
-          {
-              geometry_type pt(Point);
-              pt.move_to(x, y);
-              // unset any clipping since we're now dealing with a point
-              converter.template unset<clip_poly_tag>();
-              converter.apply(pt);
-          }
-      }
-      else if ((placement == MARKER_POINT_PLACEMENT || placement == MARKER_INTERIOR_PLACEMENT) &&
-                multi_policy == MARKER_LARGEST_MULTI)
-      {
-          // Only apply to path with largest envelope area
-          // TODO: consider using true area for polygon types
-          double maxarea = 0;
-          geometry_type* largest = 0;
-          BOOST_FOREACH(geometry_type & geom, feature.paths())
-          {
-              const box2d<double>& env = geom.envelope();
-              double area = env.width() * env.height();
-              if (area > maxarea)
-              {
-                  maxarea = area;
-                  largest = &geom;
-              }
-          }
-          if (largest)
-          {
-              converter.apply(*largest);
-          }
-      }
-      else
-      {
-          if (multi_policy != MARKER_EACH_MULTI && placement != MARKER_POINT_PLACEMENT)
-          {
-              MAPNIK_LOG_WARN(marker_symbolizer) << "marker_multi_policy != 'each' has no effect with marker_placement != 'point'";
-          }
-          BOOST_FOREACH(geometry_type & path, feature.paths())
-          {
-            converter.apply(path);
-          }
-      }
-  }
-}
-
 }
 
 #endif //MAPNIK_MARKER_HELPERS_HPP
diff --git a/include/mapnik/markers_placement.hpp b/include/mapnik/markers_placement.hpp
index 39000a0..88e20b5 100644
--- a/include/mapnik/markers_placement.hpp
+++ b/include/mapnik/markers_placement.hpp
@@ -23,294 +23,85 @@
 #ifndef MAPNIK_MARKERS_PLACEMENT_HPP
 #define MAPNIK_MARKERS_PLACEMENT_HPP
 
-// mapnik
-#include <mapnik/ctrans.hpp>
-#include <mapnik/debug.hpp>
-#include <mapnik/label_collision_detector.hpp>
-#include <mapnik/global.hpp> //round
-#include <mapnik/box2d.hpp>
-#include <mapnik/noncopyable.hpp>
-
-// agg
-#include "agg_basics.h"
-#include "agg_trans_affine.h"
-
-// stl
-#include <cmath>
-
-namespace mapnik {
+#include <mapnik/markers_placements/line.hpp>
+#include <mapnik/markers_placements/point.hpp>
+#include <mapnik/markers_placements/interior.hpp>
+#include <mapnik/markers_placements/vertext_first.hpp>
+#include <mapnik/markers_placements/vertext_last.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/util/variant.hpp>
+
+namespace mapnik
+{
 
 template <typename Locator, typename Detector>
-class markers_placement : mapnik::noncopyable
+class markers_placement_finder : mapnik::noncopyable
 {
 public:
-    /** Constructor for markers_placement object.
-     * \param locator  Path along which markers are placed (type: vertex source)
-     * \param size     Size of the marker
-     * \param tr       Affine transform
-     * \param detector Collision detection
-     * \param spacing  Distance between markers. If the value is negative it is
-     *                 converted to a positive value with similar magnitude, but
-     *                 choosen to optimize marker placement. 0 = no markers
-     */
-    markers_placement(Locator &locator,
-                      box2d<double> const& size,
-                      agg::trans_affine const& tr,
-                      Detector &detector,
-                      double spacing,
-                      double max_error,
-                      bool allow_overlap)
-      : locator_(locator),
-        size_(size),
-        tr_(tr),
-        detector_(detector),
-        max_error_(max_error),
-        allow_overlap_(allow_overlap),
-        marker_width_((size_ * tr_).width()),
-        done_(false),
-        last_x(0.0),
-        last_y(0.0),
-        next_x(0.0),
-        next_y(0.0),
-        error_(0.0),
-        spacing_left_(0.0),
-        marker_nr_(0)
-    {
-      if (spacing >= 0)
-      {
-          spacing_ = spacing;
-      }
-      else if (spacing < 0)
-      {
-          spacing_ = find_optimal_spacing(-spacing);
-      }
-      rewind();
-    }
+    using markers_placement = util::variant<markers_point_placement<Locator, Detector>,
+                                            markers_line_placement<Locator, Detector>,
+                                            markers_interior_placement<Locator, Detector>,
+                                            markers_vertex_first_placement<Locator, Detector>,
+                                            markers_vertex_last_placement<Locator, Detector>>;
 
-    /** Start again at first marker.
-     * \note Returns the same list of markers only works when they were NOT added
-     *       to the detector.
-     */
-    void rewind()
+    class get_point_visitor : public util::static_visitor<bool>
     {
-        locator_.rewind(0);
-        //Get first point
-        done_ = agg::is_stop(locator_.vertex(&next_x, &next_y));
-        last_x = next_x;
-        last_y = next_y; // Force request of new segment
-        error_ = 0.0;
-        marker_nr_ = 0;
-    }
-
-    /** Get a point where the marker should be placed.
-     * Each time this function is called a new point is returned.
-     * \param x     Return value for x position
-     * \param y     Return value for x position
-     * \param angle Return value for rotation angle
-     * \param add_to_detector Add selected position to detector
-     * \return True if a place is found, false if none is found.
-     */
-    bool get_point(double & x, double  & y, double & angle,  bool add_to_detector = true)
-    {
-        if (done_)
+    public:
+        get_point_visitor(double &x, double &y, double &angle, bool ignore_placement)
+            : x_(x), y_(y), angle_(angle), ignore_placement_(ignore_placement)
         {
-            return false;
         }
-        unsigned cmd;
-        /* This functions starts at the position of the previous marker,
-           walks along the path, counting how far it has to go in spacing_left.
-           If one marker can't be placed at the position it should go to it is
-           moved a bit. The error is compensated for in the next call to this
-           function.
 
-           error > 0: Marker too near to the end of the path.
-           error = 0: Perfect position.
-           error < 0: Marker too near to the beginning of the path.
-        */
-        if (marker_nr_ == 0)
-        {
-            //First marker
-            marker_nr_++;
-            spacing_left_ = spacing_ / 2;
-        }
-        else
+        template <typename T>
+        bool operator()(T &placement) const
         {
-            spacing_left_ = spacing_;
+            return placement.get_point(x_, y_, angle_, ignore_placement_);
         }
-        spacing_left_ -= error_;
-        error_ = 0.0;
-        double max_err_allowed = max_error_ * spacing_;
-        //Loop exits when a position is found or when no more segments are available
-        while (true)
-        {
-            //Do not place markers too close to the beginning of a segment
-            if (spacing_left_ < marker_width_/2)
-            {
-                set_spacing_left(marker_width_/2); //Only moves forward
-            }
-            //Error for this marker is too large. Skip to the next position.
-            if (std::fabs(error_) > max_err_allowed)
-            {
-                while (error_ > spacing_)
-                {
-                    error_ -= spacing_; //Avoid moving backwards
-                }
-                spacing_left_ += spacing_ - error_;
-                error_ = 0.0;
-            }
-            double dx = next_x - last_x;
-            double dy = next_y - last_y;
-            double segment_length = std::sqrt(dx * dx + dy * dy);
-            if (segment_length <= spacing_left_)
-            {
-                //Segment is too short to place marker. Find next segment
-                spacing_left_ -= segment_length;
-                last_x = next_x;
-                last_y = next_y;
-                while (agg::is_move_to(cmd = locator_.vertex(&next_x, &next_y)))
-                {
-                    //Skip over "move" commands
-                    last_x = next_x;
-                    last_y = next_y;
-                }
-                if (agg::is_stop(cmd) || cmd == SEG_CLOSE)
-                {
-                    done_ = true;
-                    return false;
-                }
-                continue; //Try again
-            }
-            /* At this point we know the following things:
-               - segment_length > spacing_left
-               - error is small enough
-               - at least half a marker fits into this segment
-            */
-            //Check if marker really fits in this segment
-            if (segment_length < marker_width_)
-            {
-                //Segment to short => Skip this segment
-                set_spacing_left(segment_length + marker_width_/2); //Only moves forward
-                continue;
-            }
-            else if (segment_length - spacing_left_ < marker_width_/2)
-            {
-                //Segment is long enough, but we are to close to the end
-                //Note: This function moves backwards. This could lead to an infinite
-                // loop when another function adds a positive offset. Therefore we
-                // only move backwards when there is no offset
-                if (error_ == 0)
-                {
-                    set_spacing_left(segment_length - marker_width_/2, true);
-                }
-                else
-                {
-                    //Skip this segment
-                    set_spacing_left(segment_length + marker_width_/2); //Only moves forward
-                }
-                continue; //Force checking of max_error constraint
-            }
-            angle = std::atan2(dy, dx);
-            x = last_x + dx * (spacing_left_ / segment_length);
-            y = last_y + dy * (spacing_left_ / segment_length);
-            box2d<double> box = perform_transform(angle, x, y);
-            if (!allow_overlap_ && !detector_.has_placement(box))
-            {
-                //10.0 is the approxmiate number of positions tried and choosen arbitrarily
-                set_spacing_left(spacing_left_ + spacing_ * max_error_ / 10.0); //Only moves forward
-                continue;
-            }
-            if (add_to_detector) detector_.insert(box);
-            last_x = x;
-            last_y = y;
-            return true;
-        }
-    }
-
-private:
-    Locator &locator_;
-    box2d<double> size_;
-    agg::trans_affine tr_;
-    Detector &detector_;
-    double spacing_;
-    double max_error_;
-    bool allow_overlap_;
-    double marker_width_;
 
-    bool done_;
-    double last_x;
-    double last_y;
-    double next_x;
-    double next_y;
-    /** If a marker could not be placed at the exact point where it should
-     * go the next marker's distance will be a bit lower. */
-    double error_;
-    double spacing_left_;
-    unsigned marker_nr_;
+    private:
+        double &x_, &y_, &angle_;
+        bool ignore_placement_;
+    };
 
-    /** Rotates the size_ box and translates the position. */
-    box2d<double> perform_transform(double angle, double dx, double dy)
+    markers_placement_finder(marker_placement_e placement_type,
+                             Locator &locator,
+                             Detector &detector,
+                             markers_placement_params const& params)
+        : placement_(create(placement_type, locator, detector, params))
     {
-        double x1 = size_.minx();
-        double x2 = size_.maxx();
-        double y1 = size_.miny();
-        double y2 = size_.maxy();
-        agg::trans_affine tr = tr_ * agg::trans_affine_rotation(angle).translate(dx, dy);
-        double xA = x1, yA = y1, xB = x2, yB = y1, xC = x2, yC = y2, xD = x1, yD = y2;
-        tr.transform(&xA, &yA);
-        tr.transform(&xB, &yB);
-        tr.transform(&xC, &yC);
-        tr.transform(&xD, &yD);
-        box2d<double> result(xA, yA, xC, yC);
-        result.expand_to_include(xB, yB);
-        result.expand_to_include(xD, yD);
-        return result;
     }
 
-    /** Automatically chooses spacing. */
-    double find_optimal_spacing(double s)
+    // Get next point where the marker should be placed. Returns true if a place is found, false if none is found.
+    bool get_point(double &x, double &y, double &angle, bool ignore_placement)
     {
-        rewind();
-        //Calculate total path length
-        unsigned cmd = agg::path_cmd_move_to;
-        double length = 0;
-        while (!agg::is_stop(cmd))
-        {
-            double dx = next_x - last_x;
-            double dy = next_y - last_y;
-            length += std::sqrt(dx * dx + dy * dy);
-            last_x = next_x;
-            last_y = next_y;
-            while (agg::is_move_to(cmd = locator_.vertex(&next_x, &next_y)))
-            {
-                //Skip over "move" commands
-                last_x = next_x;
-                last_y = next_y;
-            }
-        }
-        unsigned points = static_cast<unsigned>(round(length / s));
-        if (points == 0) return 0.0; //Path to short
-        return length / points;
+        return util::apply_visitor(get_point_visitor(x, y, angle, ignore_placement), placement_);
     }
 
-    /** Set spacing_left_, adjusts error_ and performs sanity checks. */
-    void set_spacing_left(double sl, bool allow_negative=false)
+private:
+    // Factory function for particular placement implementations.
+    static markers_placement create(marker_placement_e placement_type,
+                                    Locator &locator,
+                                    Detector &detector,
+                                    markers_placement_params const& params)
     {
-        double delta_error = sl - spacing_left_;
-        if (!allow_negative && delta_error < 0)
-        {
-            MAPNIK_LOG_WARN(markers_placement) << "Unexpected negative error in markers_placement. Please file a bug report.";
-            return;
-        }
-    #ifdef MAPNIK_DEBUG
-        if (delta_error == 0.0)
+        switch (placement_type)
         {
-            MAPNIK_LOG_WARN(markers_placement) << "Not moving at all in set_spacing_left()! Please file a bug report.";
+        case MARKER_POINT_PLACEMENT:
+            return markers_point_placement<Locator, Detector>(locator,detector,params);
+        case MARKER_INTERIOR_PLACEMENT:
+            return markers_interior_placement<Locator, Detector>(locator,detector,params);
+        case MARKER_LINE_PLACEMENT:
+            return markers_line_placement<Locator, Detector>(locator,detector,params);
+        case MARKER_VERTEX_FIRST_PLACEMENT:
+            return markers_vertex_first_placement<Locator, Detector>(locator,detector,params);
+        case MARKER_VERTEX_LAST_PLACEMENT:
+            return markers_vertex_last_placement<Locator, Detector>(locator,detector,params);
+        default: // point
+            return markers_point_placement<Locator, Detector>(locator,detector,params);
         }
-    #endif
-        error_ += delta_error;
-        spacing_left_ = sl;
     }
 
+    markers_placement placement_;
 };
 
 }
diff --git a/include/mapnik/markers_placements/interior.hpp b/include/mapnik/markers_placements/interior.hpp
new file mode 100644
index 0000000..6d36c44
--- /dev/null
+++ b/include/mapnik/markers_placements/interior.hpp
@@ -0,0 +1,93 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_MARKERS_PLACEMENTS_INTERIOR_HPP
+#define MAPNIK_MARKERS_PLACEMENTS_INTERIOR_HPP
+
+#include <mapnik/markers_placements/point.hpp>
+#include <mapnik/geom_util.hpp>
+
+namespace mapnik {
+
+template <typename Locator, typename Detector>
+class markers_interior_placement : public markers_point_placement<Locator, Detector>
+{
+public:
+    markers_interior_placement(Locator &locator, Detector &detector, markers_placement_params const& params)
+        : markers_point_placement<Locator, Detector>(locator, detector, params)
+    {
+    }
+
+    bool get_point(double &x, double &y, double &angle, bool ignore_placement)
+    {
+        if (this->done_)
+        {
+            return false;
+        }
+
+        if (this->locator_.type() == mapnik::geometry_type::types::Point)
+        {
+            return markers_point_placement<Locator, Detector>::get_point(x, y, angle, ignore_placement);
+        }
+
+        if (this->locator_.type() == mapnik::geometry_type::types::LineString)
+        {
+            if (!label::middle_point(this->locator_, x, y))
+            {
+                this->done_ = true;
+                return false;
+            }
+        }
+        else
+        {
+            if (!label::interior_position(this->locator_, x, y))
+            {
+                this->done_ = true;
+                return false;
+            }
+        }
+
+        angle = 0;
+
+        box2d<double> box = this->perform_transform(angle, x, y);
+        if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
+        {
+            return false;
+        }
+        if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
+        {
+            return false;
+        }
+
+        if (!ignore_placement)
+        {
+            this->detector_.insert(box);
+        }
+
+        this->done_ = true;
+        return true;
+    }
+};
+
+}
+
+#endif // MAPNIK_MARKERS_PLACEMENTS_INTERIOR_HPP
diff --git a/include/mapnik/markers_placements/line.hpp b/include/mapnik/markers_placements/line.hpp
new file mode 100644
index 0000000..3c829e7
--- /dev/null
+++ b/include/mapnik/markers_placements/line.hpp
@@ -0,0 +1,235 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_MARKERS_PLACEMENTS_LINE_HPP
+#define MAPNIK_MARKERS_PLACEMENTS_LINE_HPP
+
+#include <mapnik/markers_placements/point.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/global.hpp> //round
+
+#include <cmath>
+
+namespace mapnik {
+
+template <typename Locator, typename Detector>
+class markers_line_placement : public markers_point_placement<Locator, Detector>
+{
+public:
+    markers_line_placement(Locator &locator, Detector &detector, markers_placement_params const& params)
+        : markers_point_placement<Locator, Detector>(locator, detector, params),
+            last_x(0.0),
+            last_y(0.0),
+            next_x(0.0),
+            next_y(0.0),
+            spacing_(0.0),
+            marker_width_((params.size * params.tr).width()),
+            error_(0.0),
+            spacing_left_(0.0),
+            marker_nr_(0)
+    {
+        spacing_ = params.spacing < 1 ? 100 : params.spacing;
+        rewind();
+    }
+
+    void rewind()
+    {
+        this->locator_.rewind(0);
+        //Get first point
+        this->done_ = agg::is_stop(this->locator_.vertex(&next_x, &next_y));
+        last_x = next_x;
+        last_y = next_y; // Force request of new segment
+        error_ = 0.0;
+        marker_nr_ = 0;
+    }
+
+    bool get_point(double &x, double &y, double &angle, bool ignore_placement)
+    {
+        if (this->done_)
+        {
+            return false;
+        }
+
+        if (this->locator_.type() == mapnik::geometry_type::types::Point)
+        {
+            return markers_point_placement<Locator, Detector>::get_point(x, y, angle, ignore_placement);
+        }
+
+        unsigned cmd;
+        /* This functions starts at the position of the previous marker,
+           walks along the path, counting how far it has to go in spacing_left.
+           If one marker can't be placed at the position it should go to it is
+           moved a bit. The error is compensated for in the next call to this
+           function.
+
+           error > 0: Marker too near to the end of the path.
+           error = 0: Perfect position.
+           error < 0: Marker too near to the beginning of the path.
+        */
+        if (marker_nr_ == 0)
+        {
+            //First marker
+            marker_nr_++;
+            spacing_left_ = spacing_ / 2;
+        }
+        else
+        {
+            spacing_left_ = spacing_;
+        }
+        spacing_left_ -= error_;
+        error_ = 0.0;
+        double max_err_allowed = this->params_.max_error * spacing_;
+        //Loop exits when a position is found or when no more segments are available
+        while (true)
+        {
+            //Do not place markers too close to the beginning of a segment
+            if (spacing_left_ < this->marker_width_ / 2)
+            {
+                set_spacing_left(this->marker_width_ / 2); //Only moves forward
+            }
+            //Error for this marker is too large. Skip to the next position.
+            if (std::fabs(error_) > max_err_allowed)
+            {
+                while (this->error_ > spacing_)
+                {
+                    error_ -= spacing_; //Avoid moving backwards
+                }
+                spacing_left_ += spacing_ - this->error_;
+                error_ = 0.0;
+            }
+            double dx = next_x - last_x;
+            double dy = next_y - last_y;
+            double segment_length = std::sqrt(dx * dx + dy * dy);
+            if (segment_length <= spacing_left_)
+            {
+                //Segment is too short to place marker. Find next segment
+                spacing_left_ -= segment_length;
+                last_x = next_x;
+                last_y = next_y;
+                while (agg::is_move_to(cmd = this->locator_.vertex(&next_x, &next_y)))
+                {
+                    //Skip over "move" commands
+                    last_x = next_x;
+                    last_y = next_y;
+                }
+                if (agg::is_stop(cmd) || cmd == SEG_CLOSE)
+                {
+                    this->done_ = true;
+                    return false;
+                }
+                continue; //Try again
+            }
+            /* At this point we know the following things:
+               - segment_length > spacing_left
+               - error is small enough
+               - at least half a marker fits into this segment
+            */
+            //Check if marker really fits in this segment
+            if (segment_length < this->marker_width_)
+            {
+                //Segment to short => Skip this segment
+                set_spacing_left(segment_length + this->marker_width_/2); //Only moves forward
+                continue;
+            }
+            else if (segment_length - spacing_left_ < this->marker_width_/2)
+            {
+                //Segment is long enough, but we are to close to the end
+                //Note: This function moves backwards. This could lead to an infinite
+                // loop when another function adds a positive offset. Therefore we
+                // only move backwards when there is no offset
+                if (error_ == 0)
+                {
+                    set_spacing_left(segment_length - this->marker_width_/2, true);
+                }
+                else
+                {
+                    //Skip this segment
+                    set_spacing_left(segment_length + this->marker_width_/2); //Only moves forward
+                }
+                continue; //Force checking of max_error constraint
+            }
+            angle = std::atan2(dy, dx);
+            x = last_x + dx * (spacing_left_ / segment_length);
+            y = last_y + dy * (spacing_left_ / segment_length);
+            box2d<double> box = this->perform_transform(angle, x, y);
+            if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
+            {
+                set_spacing_left(spacing_left_ + spacing_ * this->params_.max_error / 10.0);
+                continue;
+            }
+            if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
+            {
+                //10.0 is the approxmiate number of positions tried and choosen arbitrarily
+                set_spacing_left(spacing_left_ + spacing_ * this->params_.max_error / 10.0); //Only moves forward
+                continue;
+            }
+            if (!ignore_placement)
+            {
+                this->detector_.insert(box);
+            }
+            last_x = x;
+            last_y = y;
+            return true;
+        }
+    }
+
+private:
+    double last_x;
+    double last_y;
+    double next_x;
+    double next_y;
+    double spacing_;
+    double marker_width_;
+    // If a marker could not be placed at the exact point where it should
+    // go the next marker's distance will be a bit lower.
+    double error_;
+    double spacing_left_;
+    unsigned marker_nr_;
+
+    // Set spacing_left_, adjusts error_ and performs sanity checks.
+    void set_spacing_left(double sl, bool allow_negative=false)
+    {
+        double delta_error = sl - spacing_left_;
+        if (!allow_negative && delta_error < 0)
+        {
+            MAPNIK_LOG_WARN(markers_line_placement)
+                << "Unexpected negative error in markers_line_placement. "
+                   "Please file a bug report.";
+            return;
+        }
+#ifdef MAPNIK_DEBUG
+        if (delta_error == 0.0)
+        {
+            MAPNIK_LOG_WARN(markers_line_placement)
+                << "Not moving at all in set_spacing_left()! "
+                   "Please file a bug report.";
+        }
+#endif
+        error_ += delta_error;
+        spacing_left_ = sl;
+    }
+};
+
+}
+
+#endif // MAPNIK_MARKERS_PLACEMENTS_LINE_HPP
diff --git a/include/mapnik/markers_placements/point.hpp b/include/mapnik/markers_placements/point.hpp
new file mode 100644
index 0000000..e9af96f
--- /dev/null
+++ b/include/mapnik/markers_placements/point.hpp
@@ -0,0 +1,140 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_MARKERS_PLACEMENTS_POINT_HPP
+#define MAPNIK_MARKERS_PLACEMENTS_POINT_HPP
+
+#include <mapnik/geom_util.hpp>
+
+#include "agg_basics.h"
+#include "agg_trans_affine.h"
+
+namespace mapnik {
+
+struct markers_placement_params
+{
+    box2d<double> const& size;
+    agg::trans_affine const& tr;
+    double spacing;
+    double max_error;
+    bool allow_overlap;
+    bool avoid_edges;
+};
+
+template <typename Locator, typename Detector>
+class markers_point_placement
+{
+public:
+    markers_point_placement(Locator &locator, Detector &detector, markers_placement_params const& params)
+        : locator_(locator),
+          detector_(detector),
+          params_(params),
+          done_(false)
+    {
+        rewind();
+    }
+
+    // Start again at first marker. Returns the same list of markers only works when they were NOT added to the detector.
+    void rewind()
+    {
+        locator_.rewind(0);
+        done_ = false;
+    }
+
+    // Get next point where the marker should be placed. Returns true if a place is found, false if none is found.
+    bool get_point(double &x, double &y, double &angle, bool ignore_placement)
+    {
+        if (done_)
+        {
+            return false;
+        }
+
+        if (locator_.type() == mapnik::geometry_type::types::LineString)
+        {
+            if (!label::middle_point(locator_, x, y))
+            {
+                done_ = true;
+                return false;
+            }
+        }
+        else
+        {
+            if (!label::centroid(locator_, x, y))
+            {
+                done_ = true;
+                return false;
+            }
+        }
+
+        angle = 0;
+        box2d<double> box = perform_transform(angle, x, y);
+
+        if (params_.avoid_edges && !detector_.extent().contains(box))
+        {
+            return false;
+        }
+        if (!params_.allow_overlap && !detector_.has_placement(box))
+        {
+            return false;
+        }
+
+        if (!ignore_placement)
+        {
+            detector_.insert(box);
+        }
+
+        done_ = true;
+        return true;
+    }
+
+protected:
+    Locator &locator_;
+    Detector &detector_;
+    markers_placement_params const& params_;
+    bool done_;
+
+    // Rotates the size_ box and translates the position.
+    box2d<double> perform_transform(double angle, double dx, double dy)
+    {
+        double x1 = params_.size.minx();
+        double x2 = params_.size.maxx();
+        double y1 = params_.size.miny();
+        double y2 = params_.size.maxy();
+        agg::trans_affine tr = params_.tr * agg::trans_affine_rotation(angle).translate(dx, dy);
+        double xA = x1, yA = y1,
+               xB = x2, yB = y1,
+               xC = x2, yC = y2,
+               xD = x1, yD = y2;
+        tr.transform(&xA, &yA);
+        tr.transform(&xB, &yB);
+        tr.transform(&xC, &yC);
+        tr.transform(&xD, &yD);
+        box2d<double> result(xA, yA, xC, yC);
+        result.expand_to_include(xB, yB);
+        result.expand_to_include(xD, yD);
+        return result;
+    }
+};
+
+}
+
+#endif // MAPNIK_MARKERS_PLACEMENTS_POINT_HPP
diff --git a/include/mapnik/markers_placements/vertext_first.hpp b/include/mapnik/markers_placements/vertext_first.hpp
new file mode 100644
index 0000000..8ac11e2
--- /dev/null
+++ b/include/mapnik/markers_placements/vertext_first.hpp
@@ -0,0 +1,92 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_MARKERS_PLACEMENTS_VERTEXT_FIRST_HPP
+#define MAPNIK_MARKERS_PLACEMENTS_VERTEXT_FIRST_HPP
+
+#include <mapnik/markers_placements/point.hpp>
+
+namespace mapnik {
+
+template <typename Locator, typename Detector>
+class markers_vertex_first_placement : public markers_point_placement<Locator, Detector>
+{
+public:
+    markers_vertex_first_placement(Locator &locator, Detector &detector, markers_placement_params const& params)
+        : markers_point_placement<Locator, Detector>(locator, detector, params)
+    {
+    }
+
+    bool get_point(double &x, double &y, double &angle, bool ignore_placement)
+    {
+        if (this->done_)
+        {
+            return false;
+        }
+
+        if (this->locator_.type() == mapnik::geometry_type::types::Point)
+        {
+            return markers_point_placement<Locator, Detector>::get_point(x, y, angle, ignore_placement);
+        }
+
+        double x0, y0;
+
+        if (agg::is_stop(this->locator_.vertex(&x0, &y0)))
+        {
+            this->done_ = true;
+            return false;
+        }
+
+        x = x0;
+        y = y0;
+        angle = 0;
+
+        double x1, y1;
+
+        if (agg::is_line_to(this->locator_.vertex(&x1, &y1)))
+        {
+            angle = std::atan2(y1 - y0, x1 - x0);
+        }
+
+        box2d<double> box = this->perform_transform(angle, x, y);
+        if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
+        {
+            return false;
+        }
+        if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
+        {
+            return false;
+        }
+
+        if (!ignore_placement)
+        {
+            this->detector_.insert(box);
+        }
+
+        this->done_ = true;
+        return true;
+    }
+};
+
+}
+
+#endif // MAPNIK_MARKERS_PLACEMENTS_VERTEXT_FIRST_HPP
diff --git a/include/mapnik/markers_placements/vertext_last.hpp b/include/mapnik/markers_placements/vertext_last.hpp
new file mode 100644
index 0000000..3268c7c
--- /dev/null
+++ b/include/mapnik/markers_placements/vertext_last.hpp
@@ -0,0 +1,96 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_MARKERS_PLACEMENTS_VERTEXT_LAST_HPP
+#define MAPNIK_MARKERS_PLACEMENTS_VERTEXT_LAST_HPP
+
+#include <mapnik/markers_placements/point.hpp>
+
+namespace mapnik {
+
+template <typename Locator, typename Detector>
+class markers_vertex_last_placement : public markers_point_placement<Locator, Detector>
+{
+public:
+    markers_vertex_last_placement(Locator &locator, Detector &detector, markers_placement_params const& params)
+        : markers_point_placement<Locator, Detector>(locator, detector, params) {}
+
+    bool get_point(double &x, double &y, double &angle, bool ignore_placement)
+    {
+        if (this->done_)
+        {
+            return false;
+        }
+
+        double x0, y0;
+        unsigned command0 = this->locator_.vertex(&x0, &y0);
+
+        if (agg::is_stop(command0))
+        {
+            this->done_ = true;
+            return false;
+        }
+
+        double next_x, next_y;
+        double x1 = x0, y1 = y0;
+        unsigned command1 = command0;
+
+        while (!agg::is_stop(command0 = this->locator_.vertex(&next_x, &next_y)))
+        {
+            command1 = command0;
+            x1 = x0;
+            y1 = y0;
+            x0 = next_x;
+            y0 = next_y;
+        }
+
+        x = x0;
+        y = y0;
+
+        if (agg::is_line_to(command1))
+        {
+            angle = std::atan2(y0 - y1, x0 - x1);
+        }
+
+        box2d<double> box = this->perform_transform(angle, x, y);
+        if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
+        {
+            return false;
+        }
+        if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
+        {
+            return false;
+        }
+
+        if (!ignore_placement)
+        {
+            this->detector_.insert(box);
+        }
+
+        this->done_ = true;
+        return true;
+    }
+};
+
+}
+
+#endif // MAPNIK_MARKERS_PLACEMENTS_VERTEXT_LAST_HPP
diff --git a/include/mapnik/markers_symbolizer.hpp b/include/mapnik/markers_symbolizer.hpp
deleted file mode 100644
index 7d51b30..0000000
--- a/include/mapnik/markers_symbolizer.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_MARKERS_SYMBOLIZER_HPP
-#define MAPNIK_MARKERS_SYMBOLIZER_HPP
-
-//mapnik
-#include <mapnik/color.hpp>
-#include <mapnik/config.hpp>
-#include <mapnik/stroke.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-#include <mapnik/expression.hpp>
-#include <mapnik/path_expression.hpp>
-
-// boost
-#include <boost/optional.hpp>
-
-namespace mapnik {
-
-// TODO - consider merging with text_symbolizer label_placement_e
-enum marker_placement_enum {
-    MARKER_POINT_PLACEMENT,
-    MARKER_INTERIOR_PLACEMENT,
-    MARKER_LINE_PLACEMENT,
-    marker_placement_enum_MAX
-};
-
-DEFINE_ENUM( marker_placement_e, marker_placement_enum );
-
-enum marker_multi_policy_enum {
-    MARKER_EACH_MULTI, // each component in a multi gets its marker
-    MARKER_WHOLE_MULTI, // consider all components of a multi as a whole
-    MARKER_LARGEST_MULTI, // only the largest component of a multi gets a marker
-    marker_multi_policy_enum_MAX
-};
-
-DEFINE_ENUM( marker_multi_policy_e, marker_multi_policy_enum );
-
-struct MAPNIK_DECL markers_symbolizer :
-        public symbolizer_with_image, public symbolizer_base
-{
-public:
-    markers_symbolizer();
-    markers_symbolizer(path_expression_ptr const& filename);
-    markers_symbolizer(markers_symbolizer const& rhs);
-
-    void set_width(expression_ptr const& width);
-    expression_ptr const& get_width() const;
-    void set_height(expression_ptr const& height);
-    expression_ptr const& get_height() const;
-    void set_ignore_placement(bool ignore_placement);
-    bool get_ignore_placement() const;
-    void set_allow_overlap(bool overlap);
-    bool get_allow_overlap() const;
-    void set_spacing(double spacing);
-    double get_spacing() const;
-    void set_max_error(double max_error);
-    double get_max_error() const;
-    void set_fill(color const& fill);
-    boost::optional<color> get_fill() const;
-    void set_fill_opacity(float opacity);
-    boost::optional<float> get_fill_opacity() const;
-    void set_stroke(stroke const& stroke);
-    boost::optional<stroke> get_stroke() const;
-    void set_marker_placement(marker_placement_e marker_p);
-    marker_placement_e get_marker_placement() const;
-    void set_marker_multi_policy(marker_multi_policy_e marker_p);
-    marker_multi_policy_e get_marker_multi_policy() const;
-private:
-    expression_ptr width_;
-    expression_ptr height_;
-    bool ignore_placement_;
-    bool allow_overlap_;
-    double spacing_;
-    double max_error_;
-    boost::optional<color> fill_;
-    boost::optional<float> fill_opacity_;
-    boost::optional<float> opacity_;
-    boost::optional<stroke> stroke_;
-    marker_placement_e marker_p_;
-    marker_multi_policy_e marker_mp_;
-};
-
-}
-
-#endif // MAPNIK_MARKERS_SYMBOLIZER_HPP
diff --git a/include/mapnik/memory.hpp b/include/mapnik/memory.hpp
index 9cdda03..98a225a 100644
--- a/include/mapnik/memory.hpp
+++ b/include/mapnik/memory.hpp
@@ -23,7 +23,7 @@
 #ifndef MAPNIK_MEMORY_HPP
 #define MAPNIK_MEMORY_HPP
 
-#include <cassert>
+#include <new>
 
 namespace mapnik
 {
diff --git a/include/mapnik/memory_datasource.hpp b/include/mapnik/memory_datasource.hpp
index 9088b5c..a442d61 100644
--- a/include/mapnik/memory_datasource.hpp
+++ b/include/mapnik/memory_datasource.hpp
@@ -36,16 +36,18 @@ class MAPNIK_DECL memory_datasource : public datasource
 {
     friend class memory_featureset;
 public:
-    memory_datasource(datasource::datasource_t type=datasource::Vector, bool bbox_check=true);
+    memory_datasource(parameters const& params);
+    static const char * name();
     virtual ~memory_datasource();
+    virtual datasource::datasource_t type() const;
+    virtual featureset_ptr features(query const& q) const;
+    virtual featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const;
+    virtual box2d<double> envelope() const;
+    virtual boost::optional<geometry_t> get_geometry_type() const;
+    virtual layer_descriptor get_descriptor() const;
+    //
     void push(feature_ptr feature);
-    datasource::datasource_t type() const;
-    featureset_ptr features(query const& q) const;
-    featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const;
     void set_envelope(box2d<double> const& box);
-    box2d<double> envelope() const;
-    boost::optional<geometry_t> get_geometry_type() const;
-    layer_descriptor get_descriptor() const;
     size_t size() const;
     void clear();
 private:
diff --git a/include/mapnik/memory_featureset.hpp b/include/mapnik/memory_featureset.hpp
index f334b1d..9deb6fe 100644
--- a/include/mapnik/memory_featureset.hpp
+++ b/include/mapnik/memory_featureset.hpp
@@ -26,6 +26,7 @@
 // mapnik
 #include <mapnik/box2d.hpp>
 #include <mapnik/geometry.hpp>
+#include <mapnik/featureset.hpp>
 #include <mapnik/datasource.hpp>
 #include <mapnik/memory_datasource.hpp>
 #include <mapnik/feature.hpp>
@@ -76,7 +77,7 @@ public:
                 }
                 else
                 {
-                    for (unsigned i=0; i<(*pos_)->num_geometries();++i)
+                    for (std::size_t i=0; i<(*pos_)->num_geometries();++i)
                     {
                         geometry_type & geom = (*pos_)->get_geometry(i);
                         if (bbox_.intersects(geom.envelope()))
diff --git a/include/mapnik/miniz_png.hpp b/include/mapnik/miniz_png.hpp
index a371daa..cc59931 100644
--- a/include/mapnik/miniz_png.hpp
+++ b/include/mapnik/miniz_png.hpp
@@ -25,18 +25,23 @@
 
 // mapnik
 #include <mapnik/palette.hpp>
+#include <mapnik/config.hpp>
 
 // stl
 #include <vector>
 #include <iostream>
 #include <stdexcept>
 
+#include <mapnik/image_data.hpp>
+#include <mapnik/image_view.hpp>
+
 /* miniz.c porting issues:
   - duplicate symbols in python bindings require moving miniz.c include to just cpp file
   - due to http://code.google.com/p/miniz/issues/detail?id=7
   - avoiding including miniz.c here requires fwd declaring the two structs below
   - being able to fwd declare requires removing typedef from struct declarations in miniz.c
   - being able to fwd declare also requires using pointers to structs
+  - if updated, need to apply c++11 fix: https://github.com/mapnik/mapnik/issues/1967
 */
 
 // TODO: try using #define MINIZ_HEADER_FILE_ONLY
@@ -47,7 +52,7 @@ namespace mapnik { namespace MiniZ {
 
 using mapnik::rgb;
 
-class PNGWriter {
+class MAPNIK_DECL PNGWriter {
 
 public:
     PNGWriter(int level, int strategy);
@@ -78,6 +83,13 @@ private:
     static const unsigned char IEND_tpl[];
 };
 
+extern template MAPNIK_DECL void PNGWriter::writeIDAT<image_data_8>(image_data_8 const& image);
+extern template MAPNIK_DECL void PNGWriter::writeIDAT<image_view<image_data_8> >(image_view<image_data_8> const& image);
+extern template MAPNIK_DECL void PNGWriter::writeIDAT<image_data_32>(image_data_32 const& image);
+extern template MAPNIK_DECL void PNGWriter::writeIDAT<image_view<image_data_32> >(image_view<image_data_32> const& image);
+extern template MAPNIK_DECL void PNGWriter::writeIDATStripAlpha<image_data_32>(image_data_32 const& image);
+extern template MAPNIK_DECL void PNGWriter::writeIDATStripAlpha<image_view<image_data_32> >(image_view<image_data_32> const& image);
+
 }}
 
 #endif // MAPNIK_MINIZ_PNG_HPP
diff --git a/include/mapnik/noncopyable.hpp b/include/mapnik/noncopyable.hpp
index f5467ad..f5dfbdc 100644
--- a/include/mapnik/noncopyable.hpp
+++ b/include/mapnik/noncopyable.hpp
@@ -27,18 +27,18 @@ namespace mapnik {
 
 namespace non_copyable_
 {
-  class noncopyable
-  {
-   protected:
-      noncopyable() {}
-      ~noncopyable() {}
-   private:
-      noncopyable( const noncopyable& );
-      const noncopyable& operator=( const noncopyable& );
-  };
+
+class noncopyable
+{
+protected:
+    constexpr noncopyable() = default;
+    ~noncopyable() = default;
+    noncopyable( noncopyable const& ) = delete;
+    noncopyable& operator=(noncopyable const& ) = delete;
+};
 }
 
-typedef non_copyable_::noncopyable noncopyable;
+using noncopyable = non_copyable_::noncopyable;
 
 } // namespace mapnik
 
diff --git a/include/mapnik/octree.hpp b/include/mapnik/octree.hpp
index be09d98..f98eb53 100644
--- a/include/mapnik/octree.hpp
+++ b/include/mapnik/octree.hpp
@@ -29,9 +29,9 @@
 #include <mapnik/noncopyable.hpp>
 
 // stl
+#include <algorithm>
 #include <vector>
 #include <deque>
-#include <algorithm>
 
 namespace mapnik {
 
@@ -62,7 +62,7 @@ class octree : private mapnik::noncopyable
                children_count(0),
                index(0)
         {
-            memset(&children_[0],0,sizeof(children_));
+            std::fill(children_,children_ + 8, nullptr);
         }
 
         ~node()
@@ -82,9 +82,9 @@ class octree : private mapnik::noncopyable
             return count == 0;
         }
         node * children_[8];
-        boost::uint64_t reds;
-        boost::uint64_t greens;
-        boost::uint64_t blues;
+        std::uint64_t reds;
+        std::uint64_t greens;
+        std::uint64_t blues;
         unsigned count;
         double reduce_cost;
         unsigned count_cum;
@@ -207,9 +207,9 @@ public:
             return;
         }
 
-        double mean_r = static_cast<double>(r->reds / r->count_cum);
-        double mean_g = static_cast<double>(r->greens / r->count_cum);
-        double mean_b = static_cast<double>(r->blues / r->count_cum);
+        double mean_r = static_cast<double>(r->reds) / r->count_cum;
+        double mean_g = static_cast<double>(r->greens) / r->count_cum;
+        double mean_b = static_cast<double>(r->blues) / r->count_cum;
         for (unsigned idx=0; idx < 8; ++idx)
         {
             if (r->children_[idx] != 0)
@@ -300,7 +300,7 @@ public:
             palette.push_back(rgb(byte(itr->reds/float(count)),
                                   byte(itr->greens/float(count)),
                                   byte(itr->blues/float(count))));
-            itr->index = palette.size() - 1;
+            itr->index = static_cast<unsigned>(palette.size()) - 1;
         }
         for (unsigned i=0; i < 8 ;++i)
         {
diff --git a/include/mapnik/offset_converter.hpp b/include/mapnik/offset_converter.hpp
index 3c26592..e01c1d7 100644
--- a/include/mapnik/offset_converter.hpp
+++ b/include/mapnik/offset_converter.hpp
@@ -26,27 +26,22 @@
 #ifdef MAPNIK_LOG
 #include <mapnik/debug.hpp>
 #endif
+#include <mapnik/global.hpp>
 #include <mapnik/config.hpp>
-#include <mapnik/box2d.hpp>
 #include <mapnik/vertex.hpp>
-#include <mapnik/proj_transform.hpp>
-
-// boost
-#include <boost/math/constants/constants.hpp>
 
 // stl
 #include <cmath>
+#include <vector>
+#include <cstddef>
 
 namespace mapnik
 {
 
-const double pi = boost::math::constants::pi<double>();
-
 template <typename Geometry>
 struct MAPNIK_DECL offset_converter
 {
-    typedef std::size_t size_type;
-    //typedef typename Geometry::value_type value_type;
+    using size_type = std::size_t;
 
     offset_converter(Geometry & geom)
         : geom_(geom)
@@ -62,12 +57,14 @@ struct MAPNIK_DECL offset_converter
     enum status
     {
         initial,
-        process,
-        last_vertex,
-        angle_joint,
-        end
+        process
     };
 
+    unsigned type() const
+    {
+        return static_cast<unsigned>(geom_.type());
+    }
+
     double get_offset() const
     {
         return offset_;
@@ -98,19 +95,27 @@ struct MAPNIK_DECL offset_converter
     unsigned vertex(double * x, double * y)
     {
         if (offset_ == 0.0)
+        {
             return geom_.vertex(x, y);
+        }
 
         if (status_ == initial)
+        {
             init_vertices();
+        }
 
         if (pos_ >= vertices_.size())
+        {
             return SEG_END;
+        }
 
         pre_ = (pos_ ? cur_ : pre_first_);
-        cur_ = vertices_[pos_++];
+        cur_ = vertices_.at(pos_++);
 
         if (pos_ == vertices_.size())
+        {
             return output_vertex(x, y);
+        }
 
         double const check_dist = offset_ * threshold_;
         double const check_dist2 = check_dist * check_dist;
@@ -127,13 +132,19 @@ struct MAPNIK_DECL offset_converter
             double const dy = u0.y - cur_.y;
 
             if (dx*dx + dy*dy > check_dist2)
+            {
                 break;
+            }
 
             if (!intersection(pre_, cur_, &vt, u0, u1, &ut))
+            {
                 continue;
+            }
 
             if (vt < 0.0 || vt > t || ut < 0.0 || ut > 1.0)
+            {
                 continue;
+            }
 
             t = vt;
             pos_ = i+1;
@@ -161,12 +172,18 @@ private:
 
     static double explement_reflex_angle(double angle)
     {
-        if (angle > pi)
-            return angle - 2 * pi;
-        else if (angle < -pi)
-            return angle + 2 * pi;
+        if (angle > M_PI)
+        {
+            return angle - 2 * M_PI;
+        }
+        else if (angle < -M_PI)
+        {
+            return angle + 2 * M_PI;
+        }
         else
+        {
             return angle;
+        }
     }
 
     static bool intersection(vertex2d const& u1, vertex2d const& u2, double* ut,
@@ -186,7 +203,9 @@ private:
             double const dn = vx * uy - ux * vy;
 
             if (dn > -1e-6 && dn < 1e-6)
+            {
                 return false; // they are parallel
+            }
 
             *vt = up / dn;
             *ut = (*vt * vx + dx) / ux;
@@ -200,7 +219,9 @@ private:
             double const dn = vy * ux - uy * vx;
 
             if (dn > -1e-6 && dn < 1e-6)
+            {
                 return false; // they are parallel
+            }
 
             *vt = up / dn;
             *ut = (*vt * vy + dy) / uy;
@@ -251,7 +272,9 @@ private:
     status init_vertices()
     {
         if (status_ != initial) // already initialized
+        {
             return status_;
+        }
 
         vertex2d v1(vertex2d::no_init);
         vertex2d v2(vertex2d::no_init);
@@ -261,7 +284,9 @@ private:
         v2.cmd = geom_.vertex(&v2.x, &v2.y);
 
         if (v2.cmd == SEG_END) // not enough vertices in source
+        {
             return status_ = process;
+        }
 
         double angle_a = 0;
         double angle_b = std::atan2((v2.y - v1.y), (v2.x - v1.x));
@@ -290,16 +315,24 @@ private:
             if (offset_ < 0.0)
             {
                 if (joint_angle > 0.0)
-                    joint_angle = joint_angle - 2 * pi;
+                {
+                    joint_angle = joint_angle - 2 * M_PI;
+                }
                 else
-                    bulge_steps = 1 + int(std::floor(half_turns / pi));
+                {
+                    bulge_steps = 1 + static_cast<int>(std::floor(half_turns / M_PI));
+                }
             }
             else
             {
                 if (joint_angle < 0.0)
-                    joint_angle = joint_angle + 2 * pi;
+                {
+                    joint_angle = joint_angle + 2 * M_PI;
+                }
                 else
-                    bulge_steps = 1 + int(floor(half_turns / pi));
+                {
+                    bulge_steps = 1 + static_cast<int>(std::floor(half_turns / M_PI));
+                }
             }
 
             #ifdef MAPNIK_LOG
@@ -307,14 +340,14 @@ private:
             {
                 // inside turn (sharp/obtuse angle)
                 MAPNIK_LOG_DEBUG(ctrans) << "offset_converter:"
-                    << " Sharp joint [<< inside turn " << int(joint_angle*180/pi)
+                    << " Sharp joint [<< inside turn " << int(joint_angle*180/M_PI)
                     << " degrees >>]";
             }
             else
             {
                 // outside turn (reflex angle)
                 MAPNIK_LOG_DEBUG(ctrans) << "offset_converter:"
-                    << " Bulge joint >)) outside turn " << int(joint_angle*180/pi)
+                    << " Bulge joint >)) outside turn " << int(joint_angle*180/M_PI)
                     << " degrees ((< with " << bulge_steps << " segments";
             }
             #endif
@@ -322,7 +355,7 @@ private:
             displace(w, v1, angle_a);
             push_vertex(w);
 
-            for (int s = 0; ++s < bulge_steps; )
+            for (int s = 0; ++s < bulge_steps;)
             {
                 displace(w, v1, angle_a + (joint_angle * s) / bulge_steps);
                 push_vertex(w);
@@ -355,10 +388,6 @@ private:
 
     void push_vertex(vertex2d const& v)
     {
-        #ifdef MAPNIK_LOG
-        MAPNIK_LOG_DEBUG(ctrans) << "offset_converter: " << v;
-        #endif
-
         vertices_.push_back(v);
     }
 
diff --git a/include/mapnik/palette.hpp b/include/mapnik/palette.hpp
index 972cf56..0d1d9e6 100644
--- a/include/mapnik/palette.hpp
+++ b/include/mapnik/palette.hpp
@@ -32,34 +32,25 @@
 
 #ifdef USE_DENSE_HASH_MAP
     #include <mapnik/sparsehash/dense_hash_map>
-    typedef google::dense_hash_map<unsigned int, unsigned char> rgba_hash_table;
+    using rgba_hash_table = google::dense_hash_map<unsigned int, unsigned char>;
 #else
     #include <boost/unordered_map.hpp>
-    typedef boost::unordered_map<unsigned int, unsigned char> rgba_hash_table;
+    using rgba_hash_table = boost::unordered_map<unsigned int, unsigned char>;
 #endif
 
 // stl
 #include <vector>
 
-#ifdef MAPNIK_BIG_ENDIAN
-#define U2RED(x) (((x)>>24)&0xff)
-#define U2GREEN(x) (((x)>>16)&0xff)
-#define U2BLUE(x) (((x)>>8)&0xff)
-#define U2ALPHA(x) ((x)&0xff)
-#else
 #define U2RED(x) ((x)&0xff)
 #define U2GREEN(x) (((x)>>8)&0xff)
 #define U2BLUE(x) (((x)>>16)&0xff)
 #define U2ALPHA(x) (((x)>>24)&0xff)
-#endif
-
 
 namespace mapnik {
 
-typedef boost::uint8_t byte;
 struct rgba;
 
-struct rgb {
+struct MAPNIK_DECL rgb {
     byte r;
     byte g;
     byte b;
@@ -73,7 +64,7 @@ struct rgb {
     }
 };
 
-struct rgba
+struct MAPNIK_DECL rgba
 {
     byte r;
     byte g;
@@ -104,7 +95,7 @@ struct rgba
     }
 
     // ordering by mean(a,r,g,b), a, r, g, b
-    struct mean_sort_cmp
+    struct MAPNIK_DECL mean_sort_cmp
     {
         bool operator() (const rgba& x, const rgba& y) const;
     };
@@ -142,4 +133,3 @@ private:
 } // namespace mapnik
 
 #endif // MAPNIK_PALETTE_HPP
-
diff --git a/include/mapnik/params.hpp b/include/mapnik/params.hpp
index 13d030a..6699e63 100644
--- a/include/mapnik/params.hpp
+++ b/include/mapnik/params.hpp
@@ -26,9 +26,8 @@
 // mapnik
 #include <mapnik/config.hpp>
 #include <mapnik/value_types.hpp>
-
+#include <mapnik/util/variant.hpp>
 // boost
-#include <boost/variant/variant.hpp>
 #include <boost/optional.hpp>
 
 // stl
@@ -39,11 +38,33 @@ namespace mapnik
 {
 
 // fwd declare
-class boolean;
+class boolean_type;
+
+using value_holder_base = util::variant<value_null,value_integer,value_double,std::string>;
+
+struct value_holder : value_holder_base
+{
+    // default
+    value_holder()
+        : value_holder_base() {}
+
+    // copy
+    value_holder(const char* val)
+        : value_holder_base(val) {}
+
+    template <typename T>
+    value_holder(T const& obj)
+        : value_holder_base(typename detail::mapnik_value_type<T>::type(obj))
+    {}
+
+    // move
+    template <typename T>
+    value_holder(T && obj) noexcept
+        : value_holder_base(std::move(obj)) {}
+};
 
-typedef boost::variant<value_null,value_integer,value_double,std::string> value_holder;
-typedef std::pair<std::string, value_holder> parameter;
-typedef std::map<std::string, value_holder> param_map;
+using parameter = std::pair<std::string, value_holder>;
+using param_map = std::map<std::string, value_holder>;
 
 class MAPNIK_DECL parameters : public param_map
 {
@@ -69,23 +90,22 @@ boost::optional<value_double> parameters::get(std::string const& key,
                                   value_double const& default_opt_value) const;
 
 template MAPNIK_DECL
-boost::optional<int> parameters::get(std::string const& key) const;
-template MAPNIK_DECL
-boost::optional<int> parameters::get(std::string const& key,
-                         int const& default_opt_value) const;
-#ifdef BIGINT
-template MAPNIK_DECL
 boost::optional<value_integer> parameters::get(std::string const& key) const;
 template MAPNIK_DECL
 boost::optional<value_integer> parameters::get(std::string const& key,
                                    value_integer const& default_opt_value) const;
-#endif
 
 template MAPNIK_DECL
-boost::optional<mapnik::boolean> parameters::get(std::string const& key) const;
+boost::optional<mapnik::boolean_type> parameters::get(std::string const& key) const;
+template MAPNIK_DECL
+boost::optional<mapnik::boolean_type> parameters::get(std::string const& key,
+                                         mapnik::boolean_type const& default_opt_value) const;
+
+template MAPNIK_DECL
+boost::optional<mapnik::value_null> parameters::get(std::string const& key) const;
 template MAPNIK_DECL
-boost::optional<mapnik::boolean> parameters::get(std::string const& key,
-                                     mapnik::boolean const& default_opt_value) const;
+boost::optional<mapnik::value_null> parameters::get(std::string const& key,
+                                         mapnik::value_null const& default_opt_value) const;
 
 #endif
 
diff --git a/include/mapnik/params_impl.hpp b/include/mapnik/params_impl.hpp
index 258275f..1362f22 100644
--- a/include/mapnik/params_impl.hpp
+++ b/include/mapnik/params_impl.hpp
@@ -28,58 +28,45 @@
 #include <mapnik/value_types.hpp>
 #include <mapnik/boolean.hpp>
 #include <mapnik/util/conversions.hpp>
+
 // boost
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp> // keep gcc happy
-#include <boost/variant/variant.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/optional.hpp>
 #include <boost/lexical_cast.hpp>
-#include <boost/format.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <string>
+#include <sstream>
 #include <stdexcept>
 
-
 namespace mapnik { namespace detail {
 
-
 template <typename T>
 struct extract_value
 {
-    static inline boost::optional<T> do_extract_from_string(std::string const& source)
+    static inline boost::optional<T> do_extract_from_string(std::string const& /*source*/)
     {
-        std::string err_msg = (boost::format("No conversion from std::string to %s") % typeid(T).name()).str();
-        throw std::runtime_error(err_msg);
+        std::ostringstream s;
+        s << "No conversion from std::string to " << typeid(T).name();
+        throw std::runtime_error(s.str());
     }
 };
 
 template <>
-struct extract_value<mapnik::boolean>
+struct extract_value<mapnik::boolean_type>
 {
-    static inline boost::optional<mapnik::boolean> do_extract_from_string(std::string const& source)
+    static inline boost::optional<mapnik::boolean_type> do_extract_from_string(std::string const& source)
     {
         bool result;
         if (mapnik::util::string2bool(source, result))
-            return boost::optional<mapnik::boolean>(result);
-        return boost::optional<mapnik::boolean>();
-    }
-};
-
-template <>
-struct extract_value<int>
-{
-    static inline boost::optional<int> do_extract_from_string(std::string const& source)
-    {
-        mapnik::value_integer result;
-        if (mapnik::util::string2int(source, result))
-            return boost::optional<int>(result);
-        return boost::optional<int>();
+            return boost::optional<mapnik::boolean_type>(result);
+        return boost::optional<mapnik::boolean_type>();
     }
 };
 
-#ifdef BIGINT
-
 template <>
 struct extract_value<mapnik::value_integer>
 {
@@ -92,8 +79,6 @@ struct extract_value<mapnik::value_integer>
     }
 };
 
-#endif
-
 template <>
 struct extract_value<mapnik::value_double>
 {
@@ -109,7 +94,7 @@ struct extract_value<mapnik::value_double>
 template <>
 struct extract_value<mapnik::value_null>
 {
-    static inline boost::optional<mapnik::value_null> do_extract_from_string(std::string const& source)
+    static inline boost::optional<mapnik::value_null> do_extract_from_string(std::string const&)
     {
         return boost::optional<mapnik::value_null>(); // FIXME
     }
@@ -136,7 +121,7 @@ boost::optional<T> param_cast(std::string const& source)
 } // end namespace detail
 
 template <typename T>
-struct value_extractor_visitor : public boost::static_visitor<>
+struct value_extractor_visitor : public util::static_visitor<>
 {
 
     value_extractor_visitor(boost::optional<T> & var)
@@ -149,7 +134,7 @@ struct value_extractor_visitor : public boost::static_visitor<>
     }
 
     template <typename T1>
-    void operator () (T1 val) const
+    void operator () (T1 const& val) const
     {
         try
         {
@@ -157,14 +142,13 @@ struct value_extractor_visitor : public boost::static_visitor<>
         }
         catch (boost::bad_lexical_cast const& )
         {
-            std::string err_msg = (boost::format("Failed converting from %s to %s")
-                                   % typeid(T1).name()
-                                   % typeid(T).name()).str();
-            throw std::runtime_error(err_msg);
+            std::ostringstream s;
+            s << "Failed converting from " << typeid(T1).name()
+              << " to " << typeid(T).name();
+            throw std::runtime_error(s.str());
         }
     }
 
-
     boost::optional<T> & var_;
 };
 
@@ -173,8 +157,8 @@ namespace params_detail {
 template <typename T>
 struct converter
 {
-    typedef T value_type;
-    typedef boost::optional<value_type> return_type;
+    using value_type = T;
+    using return_type = boost::optional<value_type>;
     static return_type extract(parameters const& params,
                                std::string const& name,
                                boost::optional<T> const& default_opt_value)
@@ -183,7 +167,7 @@ struct converter
         parameters::const_iterator itr = params.find(name);
         if (itr != params.end())
         {
-            boost::apply_visitor(value_extractor_visitor<T>(result),itr->second);
+            util::apply_visitor(value_extractor_visitor<T>(result),itr->second);
         }
         return result;
     }
diff --git a/include/mapnik/parse_path.hpp b/include/mapnik/parse_path.hpp
index f3d65c5..3d61bb5 100644
--- a/include/mapnik/parse_path.hpp
+++ b/include/mapnik/parse_path.hpp
@@ -34,12 +34,9 @@
 namespace mapnik {
 
 // fwd declare to reduce compile time
-template <typename Iterator> struct path_expression_grammar;
 class feature_impl;
 
 MAPNIK_DECL path_expression_ptr parse_path(std::string const & str);
-MAPNIK_DECL path_expression_ptr parse_path(std::string const & str,
-                                           path_expression_grammar<std::string::const_iterator> const& g);
 
 struct MAPNIK_DECL path_processor
 {
@@ -48,7 +45,7 @@ struct MAPNIK_DECL path_processor
     static void collect_attributes(path_expression const& path, std::set<std::string>& names);
 };
 
-typedef mapnik::path_processor path_processor_type;
+using path_processor_type = mapnik::path_processor;
 
 }
 
diff --git a/include/mapnik/parse_transform.hpp b/include/mapnik/parse_transform.hpp
index 2a98b21..b19c448 100644
--- a/include/mapnik/parse_transform.hpp
+++ b/include/mapnik/parse_transform.hpp
@@ -25,23 +25,12 @@
 
 // mapnik
 #include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>  // for transform_list_ptr
+#include <mapnik/symbolizer_base.hpp>  // for transform_list_ptr
 
 namespace mapnik {
 
-template <typename Iterator> struct transform_expression_grammar;
-
-typedef transform_expression_grammar<std::string::const_iterator>
-    transform_expression_grammar_string;
-
-MAPNIK_DECL transform_list_ptr parse_transform(std::string const& str);
-
 MAPNIK_DECL transform_list_ptr parse_transform(std::string const& str,
-                                               std::string const& encoding);
-
-MAPNIK_DECL bool parse_transform(transform_list& list,
-                                 std::string const& str,
-                                 transform_expression_grammar_string const& g);
+                                               std::string const& encoding="utf-8");
 
 } // namespace mapnik
 
diff --git a/include/mapnik/path_expression.hpp b/include/mapnik/path_expression.hpp
index b031f45..ab568dd 100644
--- a/include/mapnik/path_expression.hpp
+++ b/include/mapnik/path_expression.hpp
@@ -23,11 +23,10 @@
 #ifndef MAPNIK_PATH_EXPRESSION_HPP
 #define MAPNIK_PATH_EXPRESSION_HPP
 
-// boost
-#include <boost/variant/variant_fwd.hpp>
-#include <boost/shared_ptr.hpp>
-
+#include <mapnik/config.hpp>
+#include <mapnik/util/variant.hpp>
 // stl
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -36,9 +35,9 @@ namespace mapnik
 
 struct attribute;
 
-typedef boost::variant<std::string, attribute> path_component;
-typedef std::vector<path_component> path_expression;
-typedef boost::shared_ptr<path_expression> path_expression_ptr;
+using path_component = util::variant<std::string, attribute>;
+using path_expression = std::vector<path_component>;
+using path_expression_ptr = std::shared_ptr<path_expression>;
 
 }
 
diff --git a/include/mapnik/path_expression_grammar.hpp b/include/mapnik/path_expression_grammar.hpp
index a035112..1a0a3ac 100644
--- a/include/mapnik/path_expression_grammar.hpp
+++ b/include/mapnik/path_expression_grammar.hpp
@@ -26,9 +26,12 @@
 // mapnik
 #include <mapnik/path_expression.hpp>
 
-// spirit2
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/qi_action.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <string>
diff --git a/include/mapnik/path_expression_grammar_impl.hpp b/include/mapnik/path_expression_grammar_impl.hpp
new file mode 100644
index 0000000..6b764ed
--- /dev/null
+++ b/include/mapnik/path_expression_grammar_impl.hpp
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/path_expression_grammar.hpp>
+#include <mapnik/attribute.hpp>
+
+// boost
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_object.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+
+namespace mapnik
+{
+
+template <typename Iterator>
+path_expression_grammar<Iterator>::path_expression_grammar()
+    : path_expression_grammar::base_type(expr)
+{
+    standard_wide::char_type char_;
+    qi::_1_type _1;
+    qi::_val_type _val;
+    qi::lit_type lit;
+    qi::lexeme_type lexeme;
+    using phoenix::push_back;
+    using boost::phoenix::construct;
+    
+    expr =
+        * (
+            str [ push_back(_val, _1)]
+            |
+            ( '[' >> attr [ push_back(_val, construct<mapnik::attribute>( _1 )) ] >> ']')
+            )
+        ;
+    
+    attr %= +(char_ - ']');
+    str  %= lexeme[+(char_ -'[')];
+}
+
+}
diff --git a/include/mapnik/pixel_position.hpp b/include/mapnik/pixel_position.hpp
index 1ac537e..11501bc 100644
--- a/include/mapnik/pixel_position.hpp
+++ b/include/mapnik/pixel_position.hpp
@@ -22,13 +22,68 @@
 #ifndef MAPNIK_PIXEL_POSITION_HPP
 #define MAPNIK_PIXEL_POSITION_HPP
 
-// Store a pixel position.
+// stl
+#include <cmath>
+
+namespace mapnik
+{
+
+struct rotation;
 struct pixel_position
 {
     double x;
     double y;
-    pixel_position(double x_, double y_) : x(x_), y(y_) { }
-    pixel_position() : x(0), y(0) { }
+    pixel_position(double x_, double y_)
+     : x(x_),
+       y(y_) {}
+    pixel_position()
+     : x(0),
+       y(0) {}
+    pixel_position operator+ (pixel_position const& other) const
+    {
+        return pixel_position(x + other.x, y + other.y);
+    }
+
+    pixel_position operator- (pixel_position const& other) const
+    {
+        return pixel_position(x - other.x, y - other.y);
+    }
+
+    pixel_position operator* (double other) const
+    {
+        return pixel_position(x * other, y * other);
+    }
+
+    void set(double x_, double y_)
+    {
+        x = x_;
+        y = y_;
+    }
+
+    void clear()
+    {
+        x = 0;
+        y = 0;
+    }
+
+    pixel_position rotate(rotation const& rot) const;
+    pixel_position operator~() const
+    {
+        return pixel_position(x, -y);
+    }
+
+    double length()
+    {
+        return std::sqrt(x * x + y * y);
+    }
 };
 
+inline pixel_position operator* (double factor, pixel_position const& pos)
+{
+    return pixel_position(factor * pos.x, factor * pos.y);
+}
+
+}
+
+
 #endif // MAPNIK_PIXEL_POSITION_HPP
diff --git a/include/mapnik/placement_finder.hpp b/include/mapnik/placement_finder.hpp
deleted file mode 100644
index 1c5f67c..0000000
--- a/include/mapnik/placement_finder.hpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_PLACEMENT_FINDER_HPP
-#define MAPNIK_PLACEMENT_FINDER_HPP
-
-// mapnik
-#include <mapnik/geometry.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/text_properties.hpp>
-//#include <mapnik/text_placements/base.hpp>
-#include <mapnik/symbolizer_helpers.hpp>
-#include <mapnik/label_collision_detector.hpp>
-#include <mapnik/ctrans.hpp>
-#include <mapnik/noncopyable.hpp>
-
-
-// agg
-#include "agg_conv_clip_polyline.h"
-
-
-// stl
-#include <queue>
-
-namespace mapnik
-{
-
-class text_placement_info;
-class string_info;
-class text_path;
-
-typedef agg::conv_clip_polyline<geometry_type> clipped_geometry_type;
-typedef coord_transform<CoordTransform,clipped_geometry_type> ClippedPathType;
-typedef coord_transform<CoordTransform,geometry_type> PathType;
-
-typedef label_collision_detector4 DetectorType;
-
-
-template <typename DetectorT>
-class placement_finder : mapnik::noncopyable
-{
-public:
-    placement_finder(feature_impl const& feature,
-                     text_placement_info const& placement_info,
-                     string_info const& info,
-                     DetectorT & detector,
-                     box2d<double> const& extent);
-
-    /** Try place a single label at the given point. */
-    void find_point_placement(double pos_x, double pos_y, double angle=0.0);
-
-    /** Iterate over the given path, placing point labels with respect to label_spacing. */
-    template <typename T>
-    void find_point_placements(T & path);
-
-    /** Iterate over the given path, placing line-following labels with respect to label_spacing. */
-    template <typename T>
-    void find_line_placements(T & path);
-
-    /** Add placements to detector. */
-    void update_detector();
-
-    /** Remove old placements. */
-    void clear_placements();
-
-    inline placements_type const& get_results() { return placements_; }
-
-    std::vector<box2d<double> > & additional_boxes() { return additional_boxes_;}
-    std::vector<box2d<double> > const& additional_boxes() const { return additional_boxes_;}
-
-    void set_collect_extents(bool collect) { collect_extents_ = collect; }
-    bool get_collect_extents() const { return collect_extents_; }
-
-    box2d<double> const& get_extents() const { return extents_; }
-
-private:
-    ///Helpers for find_line_placement
-
-    ///Returns a possible placement on the given line, does not test for collisions
-    //index: index of the node the current line ends on
-    //distance: distance along the given index that the placement should start at, this includes the offset,
-    //          as such it may be > or < the length of the current line, so this must be checked for
-    //orientation: if set to != 0 the placement will be attempted with the given orientation
-    //             otherwise it will autodetect the orientation.
-    //             If >= 50% of the characters end up upside down, it will be retried the other way.
-    //             RETURN: 1/-1 depending which way up the string ends up being.
-    std::auto_ptr<text_path> get_placement_offset(std::vector<vertex2d> const& path_positions,
-                                                  std::vector<double> const& path_distances,
-                                                  int & orientation, unsigned index, double distance);
-
-    ///Tests whether the given text_path be placed without a collision
-    // Returns true if it can
-    // NOTE: This edits p.envelopes so it can be used afterwards (you must clear it otherwise)
-    bool test_placement(std::auto_ptr<text_path> const& current_placement, int orientation);
-
-    ///Does a line-circle intersect calculation
-    // NOTE: Follow the strict pre conditions
-    // Pre Conditions: x1,y1 is within radius distance of cx,cy. x2,y2 is outside radius distance of cx,cy
-    //                 This means there is exactly one intersect point
-    // Result is returned in ix, iy
-    void find_line_circle_intersection(
-        double cx, double cy, double radius,
-        double x1, double y1, double x2, double y2,
-        double & ix, double & iy);
-
-    void find_line_breaks();
-    void init_string_size();
-    void init_alignment();
-    void adjust_position(text_path *current_placement);
-    void add_line(double width, double height, bool first_line);
-
-    ///General Internals
-    DetectorT & detector_;
-    box2d<double> const& dimensions_;
-    string_info const& info_;
-    text_symbolizer_properties const& p;
-    text_placement_info const& pi;
-    /** Length of the longest line after linebreaks.
-     * Before find_line_breaks() this is the total length of the string.
-     */
-    double string_width_;
-    /** Height of the string after linebreaks.
-     * Before find_line_breaks() this is the total length of the string.
-     */
-    double string_height_;
-    /** Height of the tallest font in the first line not including line spacing.
-     * Used to determine the correct offset for the first line.
-     */
-    double first_line_space_;
-    vertical_alignment_e valign_;
-    horizontal_alignment_e halign_;
-    justify_alignment_e jalign_;
-    std::vector<unsigned> line_breaks_;
-    std::vector<std::pair<double, double> > line_sizes_;
-    std::queue< box2d<double> > envelopes_;
-    /** Used to return all placements found. */
-    placements_type placements_;
-    /** Bounding box of all texts placed. */
-    box2d<double> extents_;
-    /** Collect a bounding box of all texts placed. */
-    bool collect_extents_;
-
-    /** Additional boxes to take into account when finding placement.
-     * Used for finding line placements where multiple placements are returned.
-     * Boxes are relative to starting point of current placement.
-     * Only used for point placements!
-     */
-    std::vector<box2d<double> > additional_boxes_;
-};
-}
-
-
-#endif // MAPNIK_PLACEMENT_FINDER_HPP
diff --git a/include/mapnik/plugin.hpp b/include/mapnik/plugin.hpp
index caf55d0..bc25ff1 100644
--- a/include/mapnik/plugin.hpp
+++ b/include/mapnik/plugin.hpp
@@ -33,12 +33,12 @@ namespace mapnik
 {
 
 //  Opaque structure for handle
-typedef struct _mapnik_lib_t mapnik_lib_t;
+using mapnik_lib_t = struct _mapnik_lib_t;
 
 class PluginInfo : mapnik::noncopyable
 {
 public:
-    typedef const char * name_func();
+    using name_func = const char* (*) ();
     PluginInfo (std::string const& filename,
                 std::string const& library_name);
     ~PluginInfo();
diff --git a/include/mapnik/png_io.hpp b/include/mapnik/png_io.hpp
index a1719e2..3df3197 100644
--- a/include/mapnik/png_io.hpp
+++ b/include/mapnik/png_io.hpp
@@ -34,10 +34,7 @@
 #include <zlib.h>  // for Z_DEFAULT_COMPRESSION
 
 // boost
-#include <boost/scoped_array.hpp>
 
-// stl
-#include <cassert>
 
 extern "C"
 {
@@ -48,6 +45,26 @@ extern "C"
 
 namespace mapnik {
 
+struct png_options {
+    int colors;
+    int compression;
+    int strategy;
+    int trans_mode;
+    double gamma;
+    bool paletted;
+    bool use_hextree;
+    bool use_miniz;
+    png_options() :
+        colors(256),
+        compression(Z_DEFAULT_COMPRESSION),
+        strategy(Z_DEFAULT_STRATEGY),
+        trans_mode(-1),
+        gamma(-1),
+        paletted(true),
+        use_hextree(true),
+        use_miniz(false) {}
+};
+
 template <typename T>
 void write_data (png_structp png_ptr, png_bytep data, png_size_t length)
 {
@@ -65,16 +82,13 @@ void flush_data (png_structp png_ptr)
 template <typename T1, typename T2>
 void save_as_png(T1 & file,
                 T2 const& image,
-                int compression = Z_DEFAULT_COMPRESSION,
-                int strategy = Z_DEFAULT_STRATEGY,
-                int trans_mode = -1,
-                bool use_miniz = false)
+                png_options const& opts)
 
 {
-    if (use_miniz)
+    if (opts.use_miniz)
     {
-        MiniZ::PNGWriter writer(compression,strategy);
-        if (trans_mode == 0)
+        MiniZ::PNGWriter writer(opts.compression,opts.strategy);
+        if (opts.trans_mode == 0)
         {
             writer.writeIHDR(image.width(), image.height(), 24);
             writer.writeIDATStripAlpha(image);
@@ -88,7 +102,6 @@ void save_as_png(T1 & file,
         writer.toStream(file);
         return;
     }
-
     png_voidp error_ptr=0;
     png_structp png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING,
                                                 error_ptr,0, 0);
@@ -117,20 +130,20 @@ void save_as_png(T1 & file,
     }
     png_set_write_fn (png_ptr, &file, &write_data<T1>, &flush_data<T1>);
 
-    png_set_compression_level(png_ptr, compression);
-    png_set_compression_strategy(png_ptr, strategy);
+    png_set_compression_level(png_ptr, opts.compression);
+    png_set_compression_strategy(png_ptr, opts.strategy);
     png_set_compression_buffer_size(png_ptr, 32768);
 
     png_set_IHDR(png_ptr, info_ptr,image.width(),image.height(),8,
-                 (trans_mode == 0) ? PNG_COLOR_TYPE_RGB : PNG_COLOR_TYPE_RGB_ALPHA,PNG_INTERLACE_NONE,
+                 (opts.trans_mode == 0) ? PNG_COLOR_TYPE_RGB : PNG_COLOR_TYPE_RGB_ALPHA,PNG_INTERLACE_NONE,
                  PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
-    boost::scoped_array<png_byte*> row_pointers(new png_bytep[image.height()]);
+    const std::unique_ptr<png_bytep[]> row_pointers(new png_bytep[image.height()]);
     for (unsigned int i = 0; i < image.height(); i++)
     {
         row_pointers[i] = (png_bytep)image.getRow(i);
     }
     png_set_rows(png_ptr, info_ptr, row_pointers.get());
-    png_write_png(png_ptr, info_ptr, (trans_mode == 0) ? PNG_TRANSFORM_STRIP_FILLER_AFTER : PNG_TRANSFORM_IDENTITY, NULL);
+    png_write_png(png_ptr, info_ptr, (opts.trans_mode == 0) ? PNG_TRANSFORM_STRIP_FILLER_AFTER : PNG_TRANSFORM_IDENTITY, nullptr);
     png_destroy_write_struct(&png_ptr, &info_ptr);
 }
 
@@ -257,14 +270,12 @@ void save_as_png(T & file, std::vector<mapnik::rgb> const& palette,
                  unsigned width,
                  unsigned height,
                  unsigned color_depth,
-                 int compression,
-                 int strategy,
                  std::vector<unsigned> const&alpha,
-                 bool use_miniz)
+                 png_options const& opts)
 {
-    if (use_miniz)
+    if (opts.use_miniz)
     {
-        MiniZ::PNGWriter writer(compression,strategy);
+        MiniZ::PNGWriter writer(opts.compression,opts.strategy);
         // image.width()/height() does not reflect the actual image dimensions; it
         // refers to the quantized scanlines.
         writer.writeIHDR(width, height, color_depth);
@@ -275,7 +286,6 @@ void save_as_png(T & file, std::vector<mapnik::rgb> const& palette,
         writer.toStream(file);
         return;
     }
-
     png_voidp error_ptr=0;
     png_structp png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING,
                                                 error_ptr,0, 0);
@@ -307,8 +317,8 @@ void save_as_png(T & file, std::vector<mapnik::rgb> const& palette,
     }
     png_set_write_fn (png_ptr, &file, &write_data<T>, &flush_data<T>);
 
-    png_set_compression_level(png_ptr, compression);
-    png_set_compression_strategy(png_ptr, strategy);
+    png_set_compression_level(png_ptr, opts.compression);
+    png_set_compression_strategy(png_ptr, opts.strategy);
     png_set_compression_buffer_size(png_ptr, 32768);
 
     png_set_IHDR(png_ptr, info_ptr,width,height,color_depth,
@@ -316,7 +326,7 @@ void save_as_png(T & file, std::vector<mapnik::rgb> const& palette,
                  PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
 
     png_color* pal = const_cast<png_color*>(reinterpret_cast<const png_color*>(&palette[0]));
-    png_set_PLTE(png_ptr, info_ptr, pal, palette.size());
+    png_set_PLTE(png_ptr, info_ptr, pal, static_cast<unsigned>(palette.size()));
 
     // make transparent lowest indexes, so tRNS is small
     if (alpha.size()>0)
@@ -350,22 +360,18 @@ void save_as_png(T & file, std::vector<mapnik::rgb> const& palette,
 template <typename T1,typename T2>
 void save_as_png8_oct(T1 & file,
                       T2 const& image,
-                      const unsigned max_colors = 256,
-                      int compression = Z_DEFAULT_COMPRESSION,
-                      int strategy = Z_DEFAULT_STRATEGY,
-                      int trans_mode = -1,
-                      bool use_miniz = false)
+                      png_options const& opts)
 {
     // number of alpha ranges in png8 format; 2 results in smallest image with binary transparency
     // 3 is minimum for semitransparency, 4 is recommended, anything else is worse
-    const unsigned TRANSPARENCY_LEVELS = (trans_mode==2||trans_mode<0)?MAX_OCTREE_LEVELS:2;
+    const unsigned TRANSPARENCY_LEVELS = (opts.trans_mode==2||opts.trans_mode<0)?MAX_OCTREE_LEVELS:2;
     unsigned width = image.width();
     unsigned height = image.height();
     unsigned alphaHist[256];//transparency histogram
     unsigned semiCount = 0;//sum of semitransparent pixels
     unsigned meanAlpha = 0;
 
-    if (trans_mode == 0)
+    if (opts.trans_mode == 0)
     {
         meanAlpha = 255;
     }
@@ -394,13 +400,13 @@ void save_as_png8_oct(T1 & file,
     // transparency ranges division points
     unsigned limits[MAX_OCTREE_LEVELS+1];
     limits[0] = 0;
-    limits[1] = (trans_mode!=0 && alphaHist[0]>0)?1:0;
+    limits[1] = (opts.trans_mode!=0 && alphaHist[0]>0)?1:0;
     limits[TRANSPARENCY_LEVELS] = 256;
     for(unsigned j=2; j<TRANSPARENCY_LEVELS; j++)
     {
         limits[j] = limits[1];
     }
-    if (trans_mode != 0)
+    if (opts.trans_mode != 0)
     {
         unsigned alphaHistSum = 0;
         for(unsigned i=1; i<256; i++)
@@ -432,7 +438,7 @@ void save_as_png8_oct(T1 & file,
     // estimated number of colors from palette assigned to chosen ranges
     unsigned cols[MAX_OCTREE_LEVELS];
     // count colors
-    if (trans_mode == 0)
+    if (opts.trans_mode == 0)
     {
         for (unsigned j=0; j<TRANSPARENCY_LEVELS; j++)
         {
@@ -459,10 +465,10 @@ void save_as_png8_oct(T1 & file,
     }
     cols[0] = cols[0]>0?1:0; // fully transparent color (one or not at all)
 
-    if (max_colors>=64)
+    if (opts.colors>=64)
     {
         // give chance less populated but not empty cols to have at least few colors(12)
-        unsigned minCols = (12+1)*divCoef/(max_colors-cols[0]);
+        unsigned minCols = (12+1)*divCoef/(opts.colors-cols[0]);
         for(unsigned j=1; j<TRANSPARENCY_LEVELS; j++)
         {
             if (cols[j]>12 && cols[j]<minCols)
@@ -475,18 +481,18 @@ void save_as_png8_oct(T1 & file,
     unsigned usedColors = cols[0];
     for(unsigned j=1; j<TRANSPARENCY_LEVELS-1; j++)
     {
-        cols[j] = cols[j]*(max_colors-cols[0])/divCoef;
+        cols[j] = cols[j]*(opts.colors-cols[0])/divCoef;
         usedColors += cols[j];
     }
     // use rest for most opaque group of pixels
-    cols[TRANSPARENCY_LEVELS-1] = max_colors-usedColors;
+    cols[TRANSPARENCY_LEVELS-1] = opts.colors-usedColors;
 
     //no transparency
-    if (trans_mode == 0)
+    if (opts.trans_mode == 0)
     {
         limits[1] = 0;
         cols[0] = 0;
-        cols[1] = max_colors;
+        cols[1] = opts.colors;
     }
 
     // octree table for separate alpha range with 1-based index (0 is fully transparent: no color)
@@ -514,7 +520,7 @@ void save_as_png8_oct(T1 & file,
     }
     unsigned leftovers = 0;
     std::vector<rgb> palette;
-    palette.reserve(max_colors);
+    palette.reserve(opts.colors);
     if (cols[0])
     {
         palette.push_back(rgb(0,0,0));
@@ -531,23 +537,18 @@ void save_as_png8_oct(T1 & file,
                 leftovers = 0;
             }
             std::vector<rgb> pal;
-            trees[j].setOffset(palette.size());
+            trees[j].setOffset( static_cast<unsigned>(palette.size()));
             trees[j].create_palette(pal);
-            assert(pal.size() <= max_colors);
-            leftovers = cols[j]-pal.size();
-            cols[j] = pal.size();
-            for(unsigned i=0; i<pal.size(); i++)
-            {
-                palette.push_back(pal[i]);
-            }
-            assert(palette.size() <= 256);
+            leftovers = cols[j] - static_cast<unsigned>(pal.size());
+            cols[j] = static_cast<unsigned>(pal.size());
+            palette.insert(palette.begin(), pal.begin(), pal.end());
         }
     }
 
     //transparency values per palette index
     std::vector<unsigned> alphaTable;
     //alphaTable.resize(palette.size());//allow semitransparency also in almost opaque range
-    if (trans_mode != 0)
+    if (opts.trans_mode != 0)
     {
         alphaTable.resize(palette.size() - cols[TRANSPARENCY_LEVELS-1]);
     }
@@ -557,7 +558,7 @@ void save_as_png8_oct(T1 & file,
         // >16 && <=256 colors -> write 8-bit color depth
         image_data_8 reduced_image(width,height);
         reduce_8(image, reduced_image, trees, limits, TRANSPARENCY_LEVELS, alphaTable);
-        save_as_png(file,palette,reduced_image,width,height,8,compression,strategy,alphaTable,use_miniz);
+        save_as_png(file,palette,reduced_image,width,height,8,alphaTable,opts);
     }
     else if (palette.size() == 1)
     {
@@ -571,7 +572,7 @@ void save_as_png8_oct(T1 & file,
             alphaTable.resize(1);
             alphaTable[0] = meanAlpha;
         }
-        save_as_png(file,palette,reduced_image,width,height,1,compression,strategy,alphaTable,use_miniz);
+        save_as_png(file,palette,reduced_image,width,height,1,alphaTable,opts);
     }
     else
     {
@@ -580,7 +581,7 @@ void save_as_png8_oct(T1 & file,
         unsigned image_height = height;
         image_data_8 reduced_image(image_width,image_height);
         reduce_4(image, reduced_image, trees, limits, TRANSPARENCY_LEVELS, alphaTable);
-        save_as_png(file,palette,reduced_image,width,height,4,compression,strategy,alphaTable,use_miniz);
+        save_as_png(file,palette,reduced_image,width,height,4,alphaTable,opts);
     }
 }
 
@@ -591,9 +592,7 @@ void save_as_png8(T1 & file,
                   T3 const & tree,
                   std::vector<mapnik::rgb> const& palette,
                   std::vector<unsigned> const& alphaTable,
-                  int compression = Z_DEFAULT_COMPRESSION,
-                  int strategy = Z_DEFAULT_STRATEGY,
-                  bool use_miniz = false)
+                  png_options const& opts)
 {
     unsigned width = image.width();
     unsigned height = image.height();
@@ -611,7 +610,7 @@ void save_as_png8(T1 & file,
                 row_out[x] = tree.quantize(row[x]);
             }
         }
-        save_as_png(file, palette, reduced_image, width, height, 8, compression, strategy, alphaTable, use_miniz);
+        save_as_png(file, palette, reduced_image, width, height, 8, alphaTable, opts);
     }
     else if (palette.size() == 1)
     {
@@ -620,7 +619,7 @@ void save_as_png8(T1 & file,
         unsigned image_height = height;
         image_data_8 reduced_image(image_width, image_height);
         reduced_image.set(0);
-        save_as_png(file, palette, reduced_image, width, height, 1, compression, strategy, alphaTable, use_miniz);
+        save_as_png(file, palette, reduced_image, width, height, 1, alphaTable, opts);
     }
     else
     {
@@ -644,68 +643,65 @@ void save_as_png8(T1 & file,
                 row_out[x>>1] |= index;
             }
         }
-        save_as_png(file, palette, reduced_image, width, height, 4, compression, strategy, alphaTable, use_miniz);
+        save_as_png(file, palette, reduced_image, width, height, 4, alphaTable, opts);
     }
 }
 
 template <typename T1,typename T2>
 void save_as_png8_hex(T1 & file,
                       T2 const& image,
-                      int colors = 256,
-                      int compression = Z_DEFAULT_COMPRESSION,
-                      int strategy = Z_DEFAULT_STRATEGY,
-                      int trans_mode = -1,
-                      double gamma = 2.0,
-                      bool use_miniz = false)
+                      png_options const& opts)
 {
     unsigned width = image.width();
     unsigned height = image.height();
-
-    // structure for color quantization
-    hextree<mapnik::rgba> tree(colors);
-    if (trans_mode >= 0)
-    {
-        tree.setTransMode(trans_mode);
-    }
-    if (gamma > 0)
+    if (width + height > 3) // at least 3 pixels (hextree implementation requirement)
     {
-        tree.setGamma(gamma);
-    }
+        // structure for color quantization
+        hextree<mapnik::rgba> tree(opts.colors);
+        if (opts.trans_mode >= 0)
+        {
+            tree.setTransMode(opts.trans_mode);
+        }
+        if (opts.gamma > 0)
+        {
+            tree.setGamma(opts.gamma);
+        }
 
-    for (unsigned y = 0; y < height; ++y)
-    {
-        typename T2::pixel_type const * row = image.getRow(y);
-        for (unsigned x = 0; x < width; ++x)
+        for (unsigned y = 0; y < height; ++y)
         {
-            unsigned val = row[x];
-            tree.insert(mapnik::rgba(U2RED(val), U2GREEN(val), U2BLUE(val), U2ALPHA(val)));
+            typename T2::pixel_type const * row = image.getRow(y);
+            for (unsigned x = 0; x < width; ++x)
+            {
+                unsigned val = row[x];
+                tree.insert(mapnik::rgba(U2RED(val), U2GREEN(val), U2BLUE(val), U2ALPHA(val)));
+            }
         }
-    }
 
-    //transparency values per palette index
-    std::vector<mapnik::rgba> pal;
-    tree.create_palette(pal);
-    assert(int(pal.size()) <= colors);
-    std::vector<mapnik::rgb> palette;
-    std::vector<unsigned> alphaTable;
-    for(unsigned i=0; i<pal.size(); i++)
+        //transparency values per palette index
+        std::vector<mapnik::rgba> pal;
+        tree.create_palette(pal);
+        std::vector<mapnik::rgb> palette;
+        std::vector<unsigned> alphaTable;
+        for (unsigned i=0; i<pal.size(); ++i)
+        {
+            palette.push_back(rgb(pal[i].r, pal[i].g, pal[i].b));
+            alphaTable.push_back(pal[i].a);
+        }
+        save_as_png8<T1, T2, hextree<mapnik::rgba> >(file, image, tree, palette, alphaTable, opts);
+    }
+    else
     {
-        palette.push_back(rgb(pal[i].r, pal[i].g, pal[i].b));
-        alphaTable.push_back(pal[i].a);
+        throw std::runtime_error("Can't quantize images with less than 3 pixels");
     }
-
-    save_as_png8<T1, T2, hextree<mapnik::rgba> >(file, image, tree, palette, alphaTable, compression, strategy, use_miniz);
 }
 
 template <typename T1, typename T2>
 void save_as_png8_pal(T1 & file,
                       T2 const& image,
                       rgba_palette const& pal,
-                      int compression = Z_DEFAULT_COMPRESSION,
-                      int strategy = Z_DEFAULT_STRATEGY,
-                      bool use_miniz = false)
+                      png_options const& opts)
 {
-    save_as_png8<T1, T2, rgba_palette>(file, image, pal, pal.palette(), pal.alphaTable(), compression, strategy, use_miniz);
+    save_as_png8<T1, T2, rgba_palette>(file, image, pal, pal.palette(), pal.alphaTable(), opts);
 }
 
 }
diff --git a/include/mapnik/point_symbolizer.hpp b/include/mapnik/point_symbolizer.hpp
deleted file mode 100644
index 2a8c4a0..0000000
--- a/include/mapnik/point_symbolizer.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_POINT_SYMBOLIZER_HPP
-#define MAPNIK_POINT_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-enum point_placement_enum {
-    CENTROID_POINT_PLACEMENT,
-    INTERIOR_POINT_PLACEMENT,
-    point_placement_enum_MAX
-};
-
-DEFINE_ENUM( point_placement_e, point_placement_enum );
-
-struct MAPNIK_DECL point_symbolizer :
-        public symbolizer_with_image, public symbolizer_base
-{
-    point_symbolizer();
-    point_symbolizer(path_expression_ptr file);
-    point_symbolizer(point_symbolizer const& rhs);
-    void set_allow_overlap(bool overlap);
-    bool get_allow_overlap() const;
-    void set_point_placement(point_placement_e point_p);
-    point_placement_e get_point_placement() const;
-    void set_ignore_placement(bool ignore_placement);
-    bool get_ignore_placement() const;
-
-private:
-    bool overlap_;
-    point_placement_e point_p_;
-    bool ignore_placement_;
-};
-}
-
-#endif // MAPNIK_POINT_SYMBOLIZER_HPP
diff --git a/include/mapnik/polygon_clipper.hpp b/include/mapnik/polygon_clipper.hpp
index 7bcb65b..a9384fc 100644
--- a/include/mapnik/polygon_clipper.hpp
+++ b/include/mapnik/polygon_clipper.hpp
@@ -28,11 +28,10 @@
 
 // mapnik
 #include <mapnik/box2d.hpp>
+#include <mapnik/debug.hpp>
 #include <mapnik/geometry.hpp>
 
 // boost
-#include <boost/foreach.hpp>
-#include <boost/tuple/tuple.hpp>
 #include <boost/geometry.hpp>
 #include <boost/geometry/geometries/point_xy.hpp>
 #include <boost/geometry/geometries/box.hpp>
@@ -45,14 +44,14 @@ BOOST_GEOMETRY_REGISTER_POINT_2D(mapnik::coord2d, double, cs::cartesian, x, y)
 namespace boost { namespace geometry { namespace traits
 {
 
-template<> struct tag<mapnik::box2d<double> > { typedef box_tag type; };
+template<> struct tag<mapnik::box2d<double> > { using type = box_tag; };
 
-template<> struct point_type<mapnik::box2d<double> > { typedef mapnik::coord2d type; };
+template<> struct point_type<mapnik::box2d<double> > { using type = mapnik::coord2d; };
 
 template <>
 struct indexed_access<mapnik::box2d<double>, min_corner, 0>
 {
-    typedef coordinate_type<mapnik::coord2d>::type ct;
+    using ct = coordinate_type<mapnik::coord2d>::type;
     static inline ct get(mapnik::box2d<double> const& b) { return b.minx();}
     static inline void set(mapnik::box2d<double> &b, ct const& value) { b.set_minx(value); }
 };
@@ -60,7 +59,7 @@ struct indexed_access<mapnik::box2d<double>, min_corner, 0>
 template <>
 struct indexed_access<mapnik::box2d<double>, min_corner, 1>
 {
-    typedef coordinate_type<mapnik::coord2d>::type ct;
+    using ct = coordinate_type<mapnik::coord2d>::type;
     static inline ct get(mapnik::box2d<double> const& b) { return b.miny();}
     static inline void set(mapnik::box2d<double> &b, ct const& value) { b.set_miny(value); }
 };
@@ -68,7 +67,7 @@ struct indexed_access<mapnik::box2d<double>, min_corner, 1>
 template <>
 struct indexed_access<mapnik::box2d<double>, max_corner, 0>
 {
-    typedef coordinate_type<mapnik::coord2d>::type ct;
+    using ct = coordinate_type<mapnik::coord2d>::type;
     static inline ct get(mapnik::box2d<double> const& b) { return b.maxx();}
     static inline void set(mapnik::box2d<double> &b, ct const& value) { b.set_maxx(value); }
 };
@@ -76,7 +75,7 @@ struct indexed_access<mapnik::box2d<double>, max_corner, 0>
 template <>
 struct indexed_access<mapnik::box2d<double>, max_corner, 1>
 {
-    typedef coordinate_type<mapnik::coord2d>::type ct;
+    using ct = coordinate_type<mapnik::coord2d>::type;
     static inline ct get(mapnik::box2d<double> const& b) { return b.maxy();}
     static inline void set(mapnik::box2d<double> &b , ct const& value) { b.set_maxy(value); }
 };
@@ -90,26 +89,37 @@ using namespace boost::geometry;
 template <typename Geometry>
 struct polygon_clipper
 {
-    typedef mapnik::coord2d point_2d;
-    typedef model::polygon<mapnik::coord2d> polygon_2d;
-    typedef std::deque<polygon_2d> polygon_list;
+    using point_2d = mapnik::coord2d;
+    using polygon_2d = model::polygon<mapnik::coord2d>;
+    using polygon_list = std::deque<polygon_2d>;
+
+    enum
+    {
+        clip = 1,
+        no_clip = 2,
+        ignore = 3
+
+    } state_;
 
     polygon_clipper(Geometry & geom)
-        : clip_box_(),
+        : state_(clip),
+          clip_box_(),
           geom_(geom)
     {
 
     }
 
-    polygon_clipper( box2d<double> const& clip_box,Geometry & geom)
-        : clip_box_(clip_box),
-          geom_(geom)
+    polygon_clipper(box2d<double> const& clip_box, Geometry & geom)
+        :state_(clip),
+         clip_box_(clip_box),
+         geom_(geom)
     {
         init();
     }
 
     void set_clip_box(box2d<double> const& clip_box)
     {
+        state_ = clip;
         clip_box_ = clip_box;
         init();
     }
@@ -121,21 +131,48 @@ struct polygon_clipper
 
     void rewind(unsigned path_id)
     {
-        output_.rewind(path_id);
+        if (state_ == clip) output_.rewind(path_id);
+        else geom_.rewind(path_id);
     }
 
     unsigned vertex (double * x, double * y)
     {
-        return output_.vertex(x,y);
+        switch (state_)
+        {
+        case clip:
+            return output_.vertex(x,y);
+        case no_clip:
+            return geom_.vertex(x,y);
+        case ignore:
+            return SEG_END;
+        }
+        return SEG_END;
     }
 
 private:
 
     void init()
     {
+        geom_.rewind(0);
+        box2d<double> bbox = geom_.envelope();
+        if (clip_box_.contains(bbox))
+        {
+            // shortcut to original geometry (no-clipping)
+            state_ = no_clip;
+            return;
+        }
+        else if (!clip_box_.intersects(bbox))
+        {
+            // polygon is outside of clipping box
+            state_ = ignore;
+            return;
+        }
+
         polygon_2d subject_poly;
-        double x,y;
-        double prev_x, prev_y;
+        double x = 0;
+        double y = 0;
+        double prev_x = 0;
+        double prev_y = 0;
         geom_.rewind(0);
         unsigned ring_count = 0;
         while (true)
@@ -161,12 +198,15 @@ private:
             {
                 if (std::abs(x - prev_x) < 1e-12 && std::abs(y - prev_y) < 1e-12)
                 {
-                    std::cerr << std::setprecision(12) << "coincident vertices:(" << prev_x << ","
-                              <<  prev_y << ") , (" << x << "," << y <<  ")" << std::endl;
+#ifdef MAPNIK_LOG
+                    MAPNIK_LOG_WARN(polygon_clipper)
+                        << std::setprecision(12) << "coincident vertices:(" << prev_x << ","
+                        <<  prev_y << ") , (" << x << "," << y <<  ")";
+#endif
                     continue;
                 }
                 prev_x = x;
-                prev_x = y;
+                prev_y = y;
                 if (ring_count == 1)
                 {
                     append(subject_poly, make<point_2d>(x,y));
@@ -179,7 +219,13 @@ private:
         }
 
         polygon_list clipped_polygons;
-
+#ifdef MAPNIK_LOG
+        double area = boost::geometry::area(subject_poly);
+        if (area < 0)
+        {
+            MAPNIK_LOG_ERROR(polygon_clipper) << "negative area detected for polygon indicating incorrect winding order";
+        }
+#endif
         try
         {
             boost::geometry::intersection(clip_box_, subject_poly, clipped_polygons);
@@ -189,10 +235,10 @@ private:
             std::cerr << ex.what() << std::endl;
         }
 
-        BOOST_FOREACH(polygon_2d const& poly, clipped_polygons)
+        for (polygon_2d const& poly : clipped_polygons)
         {
             bool move_to = true;
-            BOOST_FOREACH(point_2d const& c, boost::geometry::exterior_ring(poly))
+            for (point_2d const& c : boost::geometry::exterior_ring(poly))
             {
                 if (move_to)
                 {
@@ -206,10 +252,10 @@ private:
             }
             output_.close_path();
             // interior rings
-            BOOST_FOREACH(polygon_2d::inner_container_type::value_type const& ring, boost::geometry::interior_rings(poly))
+            for (polygon_2d::inner_container_type::value_type const& ring : boost::geometry::interior_rings(poly))
             {
                 move_to = true;
-                BOOST_FOREACH(point_2d const& c, ring)
+                for (point_2d const& c : ring)
                 {
                     if (move_to)
                     {
diff --git a/include/mapnik/polygon_pattern_symbolizer.hpp b/include/mapnik/polygon_pattern_symbolizer.hpp
deleted file mode 100644
index 109b5cc..0000000
--- a/include/mapnik/polygon_pattern_symbolizer.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_POLYGON_PATTERN_SYMBOLIZER_HPP
-#define MAPNIK_POLYGON_PATTERN_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/color.hpp>
-#include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-#include <mapnik/gamma_method.hpp>
-
-namespace mapnik
-{
-
-enum pattern_alignment_enum {
-    LOCAL_ALIGNMENT,
-    GLOBAL_ALIGNMENT,
-    pattern_alignment_enum_MAX
-};
-
-DEFINE_ENUM( pattern_alignment_e, pattern_alignment_enum );
-
-struct MAPNIK_DECL polygon_pattern_symbolizer :
-        public symbolizer_with_image, public symbolizer_base
-{
-    polygon_pattern_symbolizer(path_expression_ptr file);
-    polygon_pattern_symbolizer(polygon_pattern_symbolizer const& rhs);
-    pattern_alignment_e get_alignment() const;
-    void set_alignment(pattern_alignment_e align);
-    void set_gamma(double gamma);
-    double get_gamma() const;
-    void set_gamma_method(gamma_method_e gamma_method);
-    gamma_method_e get_gamma_method() const;
-private:
-    pattern_alignment_e alignment_;
-    double gamma_;
-    gamma_method_e gamma_method_;
-};
-}
-
-#endif // MAPNIK_POLYGON_PATTERN_SYMBOLIZER_HPP
diff --git a/include/mapnik/polygon_symbolizer.hpp b/include/mapnik/polygon_symbolizer.hpp
deleted file mode 100644
index 421af4b..0000000
--- a/include/mapnik/polygon_symbolizer.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_POLYGON_SYMBOLIZER_HPP
-#define MAPNIK_POLYGON_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/color.hpp>
-#include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/gamma_method.hpp>
-
-namespace mapnik
-{
-
-struct MAPNIK_DECL polygon_symbolizer : public symbolizer_base
-{
-    polygon_symbolizer();
-    explicit polygon_symbolizer(color const& fill);
-    color const& get_fill() const;
-    void set_fill(color const& fill);
-    void set_opacity(double opacity);
-    double get_opacity() const;
-    void set_gamma(double gamma);
-    double get_gamma() const;
-    void set_gamma_method(gamma_method_e gamma_method);
-    gamma_method_e get_gamma_method() const;
-private:
-    color fill_;
-    double opacity_;
-    double gamma_;
-    gamma_method_e gamma_method_;
-};
-
-}
-
-#endif // MAPNIK_POLYGON_SYMBOLIZER_HPP
diff --git a/include/mapnik/pool.hpp b/include/mapnik/pool.hpp
index ba22cd7..52147a5 100644
--- a/include/mapnik/pool.hpp
+++ b/include/mapnik/pool.hpp
@@ -24,36 +24,34 @@
 #define MAPNIK_POOL_HPP
 
 // mapnik
-#include <mapnik/debug.hpp>
+#include <mapnik/unique_lock.hpp>
 #include <mapnik/utils.hpp>
 #include <mapnik/noncopyable.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
+#include <memory>
 #ifdef MAPNIK_THREADSAFE
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #endif
 
 // stl
-#include <map>
+#include <algorithm> // std::max
 #include <deque>
-#include <ctime>
-#include <cassert>
 
 namespace mapnik
 {
 template <typename T,template <typename> class Creator>
 class Pool : private mapnik::noncopyable
 {
-    typedef boost::shared_ptr<T> HolderType;
-    typedef std::deque<HolderType> ContType;
+    using HolderType = std::shared_ptr<T>;
+    using ContType = std::deque<HolderType>;
 
     Creator<T> creator_;
     unsigned initialSize_;
     unsigned maxSize_;
     ContType pool_;
 #ifdef MAPNIK_THREADSAFE
-    mutable boost::mutex mutex_;
+    mutable std::mutex mutex_;
 #endif
 public:
 
@@ -73,7 +71,7 @@ public:
     HolderType borrowObject()
     {
 #ifdef MAPNIK_THREADSAFE
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
 #endif
 
         typename ContType::iterator itr=pool_.begin();
@@ -85,13 +83,10 @@ public:
             }
             else if ((*itr)->isOK())
             {
-                MAPNIK_LOG_DEBUG(pool) << "pool: Borrow instance=" << (*itr).get();
                 return *itr;
             }
             else
             {
-                MAPNIK_LOG_DEBUG(pool) << "pool: Bad connection (erase) instance=" << (*itr).get();
-
                 itr=pool_.erase(itr);
             }
         }
@@ -102,9 +97,6 @@ public:
             if (conn->isOK())
             {
                 pool_.push_back(conn);
-
-                MAPNIK_LOG_DEBUG(pool) << "pool: Create connection=" << conn.get();
-
                 return conn;
             }
         }
@@ -114,7 +106,7 @@ public:
     unsigned size() const
     {
 #ifdef MAPNIK_THREADSAFE
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
 #endif
         return pool_.size();
     }
@@ -122,7 +114,7 @@ public:
     unsigned max_size() const
     {
 #ifdef MAPNIK_THREADSAFE
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
 #endif
         return maxSize_;
     }
@@ -130,7 +122,7 @@ public:
     void set_max_size(unsigned size)
     {
 #ifdef MAPNIK_THREADSAFE
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
 #endif
         maxSize_ = std::max(maxSize_,size);
     }
@@ -138,7 +130,7 @@ public:
     unsigned initial_size() const
     {
 #ifdef MAPNIK_THREADSAFE
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
 #endif
         return initialSize_;
     }
@@ -146,7 +138,7 @@ public:
     void set_initial_size(unsigned size)
     {
 #ifdef MAPNIK_THREADSAFE
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
 #endif
         if (size > initialSize_)
         {
diff --git a/include/mapnik/processed_text.hpp b/include/mapnik/processed_text.hpp
deleted file mode 100644
index 5817425..0000000
--- a/include/mapnik/processed_text.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef PROCESSED_TEXT_HPP
-#define PROCESSED_TEXT_HPP
-
-// mapnik
-#include <mapnik/text_properties.hpp>
-#include <mapnik/text_path.hpp>
-#include <mapnik/noncopyable.hpp>
-
-// stl
-#include <list>
-
-namespace mapnik
-{
-
-// fwd declares
-class freetype_engine;
-template <typename T> class face_manager;
-
-class MAPNIK_DECL processed_text : mapnik::noncopyable
-{
-public:
-    class processed_expression
-    {
-    public:
-        processed_expression(char_properties const& properties, UnicodeString const& text) :
-            p(properties), str(text) {}
-        char_properties p;
-        UnicodeString str;
-    };
-public:
-    processed_text(face_manager<freetype_engine> & font_manager, double scale_factor);
-    void push_back(char_properties const& properties, UnicodeString const& text);
-    unsigned size() const { return expr_list_.size(); }
-    unsigned empty() const { return expr_list_.empty(); }
-    void clear();
-    typedef std::list<processed_expression> expression_list;
-    expression_list::const_iterator begin() const;
-    expression_list::const_iterator end() const;
-    string_info &get_string_info();
-private:
-    expression_list expr_list_;
-    face_manager<freetype_engine> &font_manager_;
-    double scale_factor_;
-    string_info info_;
-};
-
-} // ns mapnik
-#endif // PROCESSED_TEXT_HPP
diff --git a/include/mapnik/proj_transform.hpp b/include/mapnik/proj_transform.hpp
index 9a66952..b15eaa0 100644
--- a/include/mapnik/proj_transform.hpp
+++ b/include/mapnik/proj_transform.hpp
@@ -24,12 +24,14 @@
 #define MAPNIK_PROJ_TRANSFORM_HPP
 
 // mapnik
-#include <mapnik/projection.hpp>
-#include <mapnik/box2d.hpp>
+#include <mapnik/config.hpp>
 #include <mapnik/noncopyable.hpp>
 
 namespace mapnik {
 
+class projection;
+template <typename T> class box2d;
+
 class MAPNIK_DECL proj_transform : private mapnik::noncopyable
 {
 public:
diff --git a/include/mapnik/quad_tree.hpp b/include/mapnik/quad_tree.hpp
index 3bbcbc4..5af4c61 100644
--- a/include/mapnik/quad_tree.hpp
+++ b/include/mapnik/quad_tree.hpp
@@ -28,11 +28,15 @@
 #include <mapnik/noncopyable.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/ptr_container/ptr_vector.hpp>
+#pragma GCC diagnostic pop
 
 // stl
+#include <algorithm>
 #include <vector>
-#include <cstring>
 
 namespace mapnik
 {
@@ -41,10 +45,10 @@ class quad_tree : mapnik::noncopyable
 {
     struct node
     {
-        typedef T value_t;
-        typedef std::vector<T> cont_t;
-        typedef typename cont_t::iterator iterator;
-        typedef typename cont_t::const_iterator const_iterator;
+        using value_t = T;
+        using cont_t = std::vector<T>;
+        using iterator = typename cont_t::iterator;
+        using const_iterator = typename cont_t::const_iterator;
         box2d<double> extent_;
         cont_t cont_;
         node * children_[4];
@@ -52,7 +56,7 @@ class quad_tree : mapnik::noncopyable
         explicit node(box2d<double> const& ext)
             : extent_(ext)
         {
-            std::memset(children_,0,4*sizeof(node*));
+            std::fill(children_, children_ + 4, nullptr);
         }
 
         box2d<double> const& extent() const
@@ -82,15 +86,15 @@ class quad_tree : mapnik::noncopyable
         ~node () {}
     };
 
-    typedef boost::ptr_vector<node> nodes_t;
-    typedef typename node::cont_t cont_t;
-    typedef typename cont_t::iterator node_data_iterator;
+    using nodes_t = boost::ptr_vector<node>;
+    using cont_t = typename node::cont_t;
+    using node_data_iterator = typename cont_t::iterator;
 
 public:
-    typedef typename nodes_t::iterator iterator;
-    typedef typename nodes_t::const_iterator const_iterator;
-    typedef typename boost::ptr_vector<T,boost::view_clone_allocator> result_t;
-    typedef typename result_t::iterator query_iterator;
+    using iterator = typename nodes_t::iterator;
+    using const_iterator = typename nodes_t::const_iterator;
+    using result_t = typename boost::ptr_vector<T,boost::view_clone_allocator>;
+    using query_iterator = typename result_t::iterator;
 
 
     explicit quad_tree(box2d<double> const& ext,
diff --git a/include/mapnik/query.hpp b/include/mapnik/query.hpp
index caea88d..d746089 100644
--- a/include/mapnik/query.hpp
+++ b/include/mapnik/query.hpp
@@ -25,20 +25,19 @@
 
 //mapnik
 #include <mapnik/box2d.hpp>
-
-// boost
-#include <boost/tuple/tuple.hpp>
+#include <mapnik/attribute.hpp>
 
 // stl
 #include <set>
 #include <string>
+#include <tuple>
 
 namespace mapnik {
 
 class query
 {
 public:
-    typedef boost::tuple<double,double> resolution_type;
+    using resolution_type = std::tuple<double,double>;
 
     query(box2d<double> const& bbox,
           resolution_type const& resolution,
@@ -49,7 +48,8 @@ public:
           scale_denominator_(scale_denominator),
           filter_factor_(1.0),
           unbuffered_bbox_(unbuffered_bbox),
-          names_()
+          names_(),
+          vars_()
     {}
 
     query(box2d<double> const& bbox,
@@ -60,7 +60,8 @@ public:
           scale_denominator_(scale_denominator),
           filter_factor_(1.0),
           unbuffered_bbox_(bbox),
-          names_()
+          names_(),
+          vars_()
     {}
 
     query(box2d<double> const& bbox)
@@ -69,7 +70,8 @@ public:
           scale_denominator_(1.0),
           filter_factor_(1.0),
           unbuffered_bbox_(bbox),
-          names_()
+          names_(),
+          vars_()
     {}
 
     query(query const& other)
@@ -78,7 +80,8 @@ public:
           scale_denominator_(other.scale_denominator_),
           filter_factor_(other.filter_factor_),
           unbuffered_bbox_(other.unbuffered_bbox_),
-          names_(other.names_)
+          names_(other.names_),
+          vars_(other.vars_)
     {}
 
     query& operator=(query const& other)
@@ -90,6 +93,7 @@ public:
         filter_factor_=other.filter_factor_;
         unbuffered_bbox_=other.unbuffered_bbox_;
         names_=other.names_;
+        vars_=other.vars_;
         return *this;
     }
 
@@ -143,6 +147,16 @@ public:
         return names_;
     }
 
+    void set_variables(attributes const& vars)
+    {
+        vars_ = vars;
+    }
+
+    attributes const& variables() const
+    {
+        return vars_;
+    }
+
 private:
     box2d<double> bbox_;
     resolution_type resolution_;
@@ -150,6 +164,7 @@ private:
     double filter_factor_;
     box2d<double> unbuffered_bbox_;
     std::set<std::string> names_;
+    attributes vars_;
 };
 
 }
diff --git a/include/mapnik/raster.hpp b/include/mapnik/raster.hpp
index 4b1ce1c..5cde2f6 100644
--- a/include/mapnik/raster.hpp
+++ b/include/mapnik/raster.hpp
@@ -28,18 +28,48 @@
 #include <mapnik/image_data.hpp>
 #include <mapnik/noncopyable.hpp>
 
+ // boost
+#include <boost/optional.hpp>
+
 namespace mapnik {
 class raster : private mapnik::noncopyable
 {
 public:
     box2d<double> ext_;
     image_data_32 data_;
+    double filter_factor_;
     bool premultiplied_alpha_;
-    raster(box2d<double> const& ext, unsigned width, unsigned height, bool premultiplied_alpha = false)
+    boost::optional<double> nodata_;
+    raster(box2d<double> const& ext,
+           unsigned width,
+           unsigned height,
+           double filter_factor,
+           bool premultiplied_alpha = false)
         : ext_(ext),
           data_(width,height),
-          premultiplied_alpha_(premultiplied_alpha)
-    {}
+          filter_factor_(filter_factor),
+          premultiplied_alpha_(premultiplied_alpha) {}
+
+    void set_nodata(double nodata)
+    {
+        nodata_ = nodata;
+    }
+
+    boost::optional<double> const& nodata() const
+    {
+        return nodata_;
+    }
+
+    double get_filter_factor() const
+    {
+        return filter_factor_;
+    }
+
+    void set_filter_factor(double factor)
+    {
+        filter_factor_ = factor;
+    }
+
 };
 }
 
diff --git a/include/mapnik/raster_colorizer.hpp b/include/mapnik/raster_colorizer.hpp
index 76c09fd..63397b1 100644
--- a/include/mapnik/raster_colorizer.hpp
+++ b/include/mapnik/raster_colorizer.hpp
@@ -1,4 +1,3 @@
-
 /*****************************************************************************
  *
  * This file is part of Mapnik (c++ mapping toolkit)
@@ -43,7 +42,7 @@
 #include <mapnik/enumeration.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
@@ -68,7 +67,8 @@ enum colorizer_mode_enum
 DEFINE_ENUM( colorizer_mode, colorizer_mode_enum );
 
 //! \brief Structure to represent a stop position.
-class MAPNIK_DECL colorizer_stop {
+class MAPNIK_DECL colorizer_stop
+{
 public:
 
     //! \brief Constructor
@@ -141,7 +141,7 @@ private:
 };
 
 
-typedef std::vector<colorizer_stop> colorizer_stops;
+using colorizer_stops = std::vector<colorizer_stop>;
 
 
 //! \brief Class representing the raster colorizer
@@ -199,15 +199,14 @@ public:
     //! \brief Colorize a raster
     //!
     //! \param[in, out] raster A raster stored in float32 single channel format, which gets colorized in place.
-    //! \param[in] f The feature used to find 'NODATA' information if available
-    void colorize(boost::shared_ptr<raster> const& raster, feature_impl const& f) const;
+    void colorize(std::shared_ptr<raster> const& raster, feature_impl const& f) const;
 
 
     //! \brief Perform the translation of input to output
     //!
     //! \param[in] value Input value
     //! \return color associated with the value
-    color get_color(float value) const;
+    unsigned get_color(float value) const;
 
 
     //! \brief Set the epsilon value for exact mode
@@ -227,7 +226,7 @@ private:
 };
 
 
-typedef boost::shared_ptr<raster_colorizer> raster_colorizer_ptr;
+using raster_colorizer_ptr = std::shared_ptr<raster_colorizer>;
 
 
 } // mapnik namespace
diff --git a/include/mapnik/raster_symbolizer.hpp b/include/mapnik/raster_symbolizer.hpp
deleted file mode 100644
index 1228b41..0000000
--- a/include/mapnik/raster_symbolizer.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_RASTER_SYMBOLIZER_HPP
-#define MAPNIK_RASTER_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/raster_colorizer.hpp>
-#include <mapnik/image_scaling.hpp>
-
-// boost
-#include <boost/optional.hpp>
-
-//stl
-#include <string>
-
-namespace mapnik
-{
-
-struct MAPNIK_DECL raster_symbolizer : public symbolizer_base
-{
-    raster_symbolizer();
-    raster_symbolizer(raster_symbolizer const& rhs);
-
-    std::string const& get_mode() const;
-    void set_mode(std::string const& mode);
-    scaling_method_e get_scaling_method() const;
-    void set_scaling_method(scaling_method_e scaling);
-    void set_opacity(float opacity);
-    float get_opacity() const;
-    raster_colorizer_ptr get_colorizer() const;
-    void set_colorizer(raster_colorizer_ptr const& colorizer);
-    double get_filter_factor() const;
-    void set_filter_factor(double filter_factor);
-    double calculate_filter_factor() const;
-    unsigned get_mesh_size() const;
-    void set_mesh_size(unsigned mesh_size);
-    boost::optional<bool> premultiplied() const;
-    void set_premultiplied(bool premultiplied);
-
-private:
-    std::string mode_;
-    scaling_method_e scaling_;
-    float opacity_;
-    raster_colorizer_ptr colorizer_;
-    double filter_factor_;
-    unsigned mesh_size_;
-    boost::optional<bool> premultiplied_;
-};
-}
-
-#endif // MAPNIK_RASTER_SYMBOLIZER_HPP
diff --git a/include/mapnik/renderer_common.hpp b/include/mapnik/renderer_common.hpp
new file mode 100644
index 0000000..45b70f8
--- /dev/null
+++ b/include/mapnik/renderer_common.hpp
@@ -0,0 +1,72 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDERER_COMMON_HPP
+#define MAPNIK_RENDERER_COMMON_HPP
+
+#include <mapnik/config.hpp>            // for MAPNIK_DECL
+#include <mapnik/font_engine_freetype.hpp>  // for face_manager, etc
+#include <mapnik/box2d.hpp>     // for box2d
+#include <mapnik/view_transform.hpp>    // for view_transform
+#include <mapnik/attribute.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// fwd declarations to speed up compile
+namespace mapnik {
+  class label_collision_detector4;
+  class Map;
+  class request;
+//  class attributes;
+}
+
+namespace mapnik {
+
+struct renderer_common : private mapnik::noncopyable
+{
+    renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y,
+                       unsigned width, unsigned height, double scale_factor);
+    renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y,
+                       unsigned width, unsigned height, double scale_factor,
+                       std::shared_ptr<label_collision_detector4> detector);
+    renderer_common(Map const &m, request const &req, attributes const& vars, unsigned offset_x, unsigned offset_y,
+                       unsigned width, unsigned height, double scale_factor);
+
+    unsigned width_;
+    unsigned height_;
+    double scale_factor_;
+    attributes vars_;
+    // TODO: dirty hack for cairo renderer, figure out how to remove this
+    std::shared_ptr<font_library> shared_font_library_;
+    font_library & font_library_;
+    face_manager_freetype font_manager_;
+    box2d<double> query_extent_;
+    view_transform t_;
+    std::shared_ptr<label_collision_detector4> detector_;
+
+private:
+    renderer_common(Map const &m, unsigned width, unsigned height, double scale_factor,
+                    attributes const& vars, view_transform &&t, std::shared_ptr<label_collision_detector4> detector);
+};
+
+}
+
+#endif /* MAPNIK_RENDERER_COMMON_HPP */
diff --git a/include/mapnik/renderer_common/clipping_extent.hpp b/include/mapnik/renderer_common/clipping_extent.hpp
new file mode 100644
index 0000000..b8dd70b
--- /dev/null
+++ b/include/mapnik/renderer_common/clipping_extent.hpp
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_CLIPPING_EXTENT_HPP
+#define MAPNIK_CLIPPING_EXTENT_HPP
+
+
+#include <mapnik/box2d.hpp>
+
+namespace mapnik {
+
+template <typename T>
+box2d<double> clipping_extent(T const& common)
+{
+    if (common.t_.offset() > 0)
+    {
+        box2d<double> box = common.query_extent_;
+        double scale = static_cast<double>(common.query_extent_.width())/static_cast<double>(common.width_);
+        // 3 is used here because at least 3 was needed for the 'style-level-compositing-tiled-0,1' visual test to pass
+        // TODO - add more tests to hone in on a more robust #
+        scale *= common.t_.offset() * 3;
+        box.pad(scale);
+        return box;
+    }
+    return common.query_extent_;
+}
+
+} // namespace mapnik
+
+#endif // MAPNIK_CLIPPING_EXTENT_HPP
diff --git a/include/mapnik/renderer_common/process_building_symbolizer.hpp b/include/mapnik/renderer_common/process_building_symbolizer.hpp
new file mode 100644
index 0000000..e4e8ab7
--- /dev/null
+++ b/include/mapnik/renderer_common/process_building_symbolizer.hpp
@@ -0,0 +1,116 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDERER_COMMON_PROCESS_BUILDING_SYMBOLIZER_HPP
+#define MAPNIK_RENDERER_COMMON_PROCESS_BUILDING_SYMBOLIZER_HPP
+
+#include <mapnik/segment.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/geometry.hpp>
+
+#include <algorithm>
+#include <deque>
+
+namespace mapnik {
+
+template <typename F1, typename F2, typename F3>
+void render_building_symbolizer(mapnik::feature_impl &feature,
+                                double height,
+                                F1 face_func, F2 frame_func, F3 roof_func)
+{
+    for (auto const& geom : feature.paths())
+    {
+        if (geom.size() > 2)
+        {
+            const std::unique_ptr<geometry_type> frame(new geometry_type(geometry_type::types::LineString));
+            const std::unique_ptr<geometry_type> roof(new geometry_type(geometry_type::types::Polygon));
+            std::deque<segment_t> face_segments;
+            double x0 = 0;
+            double y0 = 0;
+            double x,y;
+            geom.rewind(0);
+            for (unsigned cm = geom.vertex(&x, &y); cm != SEG_END;
+                 cm = geom.vertex(&x, &y))
+            {
+                if (cm == SEG_MOVETO)
+                {
+                    frame->move_to(x,y);
+                }
+                else if (cm == SEG_LINETO)
+                {
+                    frame->line_to(x,y);
+                    face_segments.push_back(segment_t(x0,y0,x,y));
+                }
+                else if (cm == SEG_CLOSE)
+                {
+                    frame->close_path();
+                }
+                x0 = x;
+                y0 = y;
+            }
+
+            std::sort(face_segments.begin(),face_segments.end(), y_order);
+            for (auto const& seg : face_segments)
+            {
+                const std::unique_ptr<geometry_type> faces(new geometry_type(geometry_type::types::Polygon));
+                faces->move_to(std::get<0>(seg),std::get<1>(seg));
+                faces->line_to(std::get<2>(seg),std::get<3>(seg));
+                faces->line_to(std::get<2>(seg),std::get<3>(seg) + height);
+                faces->line_to(std::get<0>(seg),std::get<1>(seg) + height);
+
+                face_func(*faces);
+                //
+                frame->move_to(std::get<0>(seg),std::get<1>(seg));
+                frame->line_to(std::get<0>(seg),std::get<1>(seg)+height);
+
+            }
+
+            geom.rewind(0);
+            for (unsigned cm = geom.vertex(&x, &y); cm != SEG_END;
+                 cm = geom.vertex(&x, &y))
+            {
+                if (cm == SEG_MOVETO)
+                {
+                    frame->move_to(x,y+height);
+                    roof->move_to(x,y+height);
+                }
+                else if (cm == SEG_LINETO)
+                {
+                    frame->line_to(x,y+height);
+                    roof->line_to(x,y+height);
+                }
+                else if (cm == SEG_CLOSE)
+                {
+                    frame->close_path();
+                    roof->close_path();
+                }
+            }
+
+            frame_func(*frame);
+            roof_func(*roof);
+        }
+    }
+}
+
+} // namespace mapnik
+
+#endif // MAPNIK_RENDERER_COMMON_PROCESS_BUILDING_SYMBOLIZER_HPP
diff --git a/include/mapnik/renderer_common/process_group_symbolizer.hpp b/include/mapnik/renderer_common/process_group_symbolizer.hpp
new file mode 100644
index 0000000..59f9116
--- /dev/null
+++ b/include/mapnik/renderer_common/process_group_symbolizer.hpp
@@ -0,0 +1,383 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDERER_COMMON_PROCESS_GROUP_SYMBOLIZER_HPP
+#define MAPNIK_RENDERER_COMMON_PROCESS_GROUP_SYMBOLIZER_HPP
+
+// mapnik
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/feature_factory.hpp>
+#include <mapnik/renderer_common.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/attribute_collector.hpp>
+#include <mapnik/group/group_layout_manager.hpp>
+#include <mapnik/group/group_symbolizer_helper.hpp>
+#include <mapnik/group/group_symbolizer_properties.hpp>
+#include <mapnik/text/glyph_positions.hpp>
+#include <mapnik/util/conversions.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// agg
+#include <agg_trans_affine.h>
+
+namespace mapnik {
+
+class proj_transform;
+struct glyph_info;
+class text_symbolizer_helper;
+
+struct virtual_renderer_common : private mapnik::noncopyable
+{
+
+    virtual_renderer_common(renderer_common & common) :
+        width_(common.width_),
+        height_(common.height_),
+        scale_factor_(common.scale_factor_),
+        vars_(common.vars_),
+        shared_font_library_(common.shared_font_library_),
+        font_library_(*shared_font_library_),
+        font_manager_(common.font_manager_),
+        query_extent_(common.query_extent_),
+        t_(common.t_),
+        detector_(std::make_shared<label_collision_detector4>(common.detector_->extent())) {}
+
+    unsigned & width_;
+    unsigned & height_;
+    double & scale_factor_;
+    attributes & vars_;
+    // TODO: dirty hack for cairo renderer, figure out how to remove this
+    std::shared_ptr<font_library> & shared_font_library_;
+    font_library & font_library_;
+    face_manager_freetype & font_manager_;
+    box2d<double> & query_extent_;
+    view_transform & t_;
+    std::shared_ptr<label_collision_detector4> detector_;
+};
+
+
+// General:
+
+// The approach here is to run the normal symbolizers, but in
+// a 'virtual' blank environment where the changes that they
+// make are recorded (the detector, the render_* calls).
+//
+// The recorded boxes are then used to lay out the items and
+// the offsets from old to new positions can be used to perform
+// the actual rendering calls.
+
+// This should allow us to re-use as much as possible of the
+// existing symbolizer layout and rendering code while still
+// being able to interpose our own decisions about whether
+// a collision has occured or not.
+
+// Thunk for rendering a particular instance of a point - this
+// stores all the arguments necessary to re-render this point
+// symbolizer at a later time.
+
+struct point_render_thunk : noncopyable
+{
+    pixel_position pos_;
+    marker_ptr marker_;
+    agg::trans_affine tr_;
+    double opacity_;
+    composite_mode_e comp_op_;
+
+    point_render_thunk(pixel_position const& pos, marker const& m,
+                       agg::trans_affine const& tr, double opacity,
+                       composite_mode_e comp_op);
+    point_render_thunk(point_render_thunk && rhs)
+      : pos_(std::move(rhs.pos_)),
+        marker_(std::move(rhs.marker_)),
+        tr_(std::move(rhs.tr_)),
+        opacity_(std::move(rhs.opacity_)),
+        comp_op_(std::move(rhs.comp_op_)) {}
+};
+
+using helper_ptr = std::unique_ptr<text_symbolizer_helper>;
+
+struct text_render_thunk : noncopyable
+{
+    // helper is stored here in order
+    // to keep in scope the text rendering structures
+    helper_ptr helper_;
+    placements_list const& placements_;
+    double opacity_;
+    composite_mode_e comp_op_;
+    halo_rasterizer_enum halo_rasterizer_;
+
+    text_render_thunk(helper_ptr && helper,
+                      double opacity, composite_mode_e comp_op,
+                      halo_rasterizer_enum halo_rasterizer);
+    text_render_thunk(text_render_thunk && rhs)
+      : helper_(std::move(rhs.helper_)),
+        placements_(std::move(rhs.placements_)),
+        opacity_(std::move(rhs.opacity_)),
+        comp_op_(std::move(rhs.comp_op_)),
+        halo_rasterizer_(std::move(rhs.halo_rasterizer_)) {}
+
+};
+
+// Variant type for render thunks to allow us to re-render them
+// via a static visitor later.
+
+using render_thunk = util::variant<point_render_thunk,
+                                   text_render_thunk>;
+using render_thunk_ptr = std::unique_ptr<render_thunk>;
+using render_thunk_list = std::list<render_thunk_ptr>;
+
+// Base class for extracting the bounding boxes associated with placing
+// a symbolizer at a fake, virtual point - not real geometry.
+//
+// The bounding boxes can be used for layout, and the thunks are
+// used to re-render at locations according to the group layout.
+
+struct render_thunk_extractor : public util::static_visitor<>
+{
+    render_thunk_extractor(box2d<double> & box,
+                           render_thunk_list & thunks,
+                           feature_impl & feature,
+                           attributes const& vars,
+                           proj_transform const& prj_trans,
+                           virtual_renderer_common & common,
+                           box2d<double> const& clipping_extent);
+
+    void operator()(point_symbolizer const& sym) const;
+
+    void operator()(text_symbolizer const& sym) const;
+
+    void operator()(shield_symbolizer const& sym) const;
+
+    template <typename T>
+    void operator()(T const& ) const
+    {
+        // TODO: warning if unimplemented?
+    }
+
+private:
+    void extract_text_thunk(helper_ptr && helper, text_symbolizer const& sym) const;
+
+    box2d<double> & box_;
+    render_thunk_list & thunks_;
+    feature_impl & feature_;
+    attributes const& vars_;
+    proj_transform const& prj_trans_;
+    virtual_renderer_common & common_;
+    box2d<double> clipping_extent_;
+
+    void update_box() const;
+};
+
+geometry_type *origin_point(proj_transform const& prj_trans,
+                            renderer_common const& common);
+
+template <typename F>
+void render_offset_placements(placements_list const& placements,
+                              pixel_position const& offset,
+                              F render_text) {
+
+    for (glyph_positions_ptr glyphs : placements)
+    {
+        // move the glyphs to the correct offset
+        pixel_position base_point = glyphs->get_base_point();
+        glyphs->set_base_point(base_point + offset);
+
+        // update the position of any marker
+        marker_info_ptr marker_info = glyphs->marker();
+        pixel_position marker_pos = glyphs->marker_pos();
+        if (marker_info)
+        {
+            glyphs->set_marker(marker_info, marker_pos + offset);
+        }
+
+        render_text(glyphs);
+
+        // Need to put the base_point back how it was in case something else calls this again
+        // (don't want to add offset twice) or calls with a different offset.
+        glyphs->set_base_point(base_point);
+        if (marker_info)
+        {
+            glyphs->set_marker(marker_info, marker_pos);
+        }
+    }
+}
+
+template <typename F>
+void render_group_symbolizer(group_symbolizer const& sym,
+                             feature_impl & feature,
+                             attributes const& vars,
+                             proj_transform const& prj_trans,
+                             box2d<double> const& clipping_extent,
+                             renderer_common & common,
+                             F render_thunks)
+{
+    // find all column names referenced in the group rules and symbolizers
+    std::set<std::string> columns;
+    group_attribute_collector column_collector(columns, false);
+    column_collector(sym);
+
+    group_symbolizer_properties_ptr props = get<group_symbolizer_properties_ptr>(sym, keys::group_properties);
+
+    // create a new context for the sub features of this group
+    context_ptr sub_feature_ctx = std::make_shared<mapnik::context_type>();
+
+    // populate new context with column names referenced in the group rules and symbolizers
+    for (auto const& col_name : columns)
+    {
+        sub_feature_ctx->push(col_name);
+    }
+
+    // keep track of the sub features that we'll want to symbolize
+    // along with the group rules that they matched
+    std::vector< std::pair<group_rule_ptr, feature_ptr> > matches;
+
+    // create a copied 'virtual' common renderer for processing sub feature symbolizers
+    // create an empty detector for it, so we are sure we won't hit anything
+    virtual_renderer_common virtual_renderer(common);
+
+    // keep track of which lists of render thunks correspond to
+    // entries in the group_layout_manager.
+    std::vector<render_thunk_list> layout_thunks;
+    size_t num_layout_thunks = 0;
+
+    // layout manager to store and arrange bboxes of matched features
+    group_layout_manager layout_manager(props->get_layout(), pixel_position(common.width_ / 2.0, common.height_ / 2.0));
+
+    // run feature or sub feature through the group rules & symbolizers
+    // for each index value in the range
+    int start = get<value_integer>(sym, keys::start_column);
+    int end = start + get<value_integer>(sym, keys::num_columns);
+    for (int col_idx = start; col_idx < end; ++col_idx)
+    {
+        // create sub feature with indexed column values
+        feature_ptr sub_feature = feature_factory::create(sub_feature_ctx, col_idx);
+
+        // copy the necessary columns to sub feature
+        for(auto const& col_name : columns)
+        {
+            if (col_name.find('%') != std::string::npos)
+            {
+                if (col_name.size() == 1)
+                {
+                    // column name is '%' by itself, so give the index as the value
+                    sub_feature->put(col_name, (value_integer)col_idx);
+                }
+                else
+                {
+                    // indexed column
+                    std::string col_idx_str;
+                    if (mapnik::util::to_string(col_idx_str,col_idx))
+                    {
+                        std::string col_idx_name = col_name;
+                        boost::replace_all(col_idx_name, "%", col_idx_str);
+                        sub_feature->put(col_name, feature.get(col_idx_name));
+                    }
+                }
+            }
+            else
+            {
+                // non-indexed column
+                sub_feature->put(col_name, feature.get(col_name));
+            }
+        }
+
+        // add a single point geometry at pixel origin
+        sub_feature->add_geometry(origin_point(prj_trans, common));
+
+        // get the layout for this set of properties
+        for (auto const& rule : props->get_rules())
+        {
+             if (util::apply_visitor(evaluate<Feature,value_type,attributes>(*sub_feature,common.vars_),
+                                               *(rule->get_filter())).to_bool())
+             {
+                // add matched rule and feature to the list of things to draw
+                matches.emplace_back(rule, sub_feature);
+
+                // construct a bounding box around all symbolizers for the matched rule
+                bound_box bounds;
+                render_thunk_list thunks;
+                render_thunk_extractor extractor(bounds, thunks, *sub_feature, common.vars_, prj_trans,
+                                                 virtual_renderer, clipping_extent);
+
+                for (auto const& sym : *rule)
+                {
+                    // TODO: construct layout and obtain bounding box
+                    util::apply_visitor(extractor, sym);
+                }
+
+                // add the bounding box to the layout manager
+                layout_manager.add_member_bound_box(bounds);
+                layout_thunks.emplace_back(std::move(thunks));
+                ++num_layout_thunks;
+                break;
+            }
+        }
+    }
+
+    // create a symbolizer helper
+    group_symbolizer_helper helper(sym, feature, vars, prj_trans,
+                                   common.width_, common.height_,
+                                   common.scale_factor_, common.t_,
+                                   *common.detector_, clipping_extent);
+
+    for (size_t i = 0; i < matches.size(); ++i)
+    {
+        group_rule_ptr match_rule = matches[i].first;
+        feature_ptr match_feature = matches[i].second;
+        value_unicode_string rpt_key_value = "";
+
+        // get repeat key from matched group rule
+        expression_ptr rpt_key_expr = match_rule->get_repeat_key();
+
+        // if no repeat key was defined, use default from group symbolizer
+        if (!rpt_key_expr)
+        {
+            rpt_key_expr = get<expression_ptr>(sym, keys::repeat_key);
+        }
+
+        // evalute the repeat key with the matched sub feature if we have one
+        if (rpt_key_expr)
+        {
+            rpt_key_value = util::apply_visitor(evaluate<Feature,value_type,attributes>(*match_feature,common.vars_),
+                                                *rpt_key_expr).to_unicode();
+        }
+        helper.add_box_element(layout_manager.offset_box_at(i), rpt_key_value);
+    }
+
+    pixel_position_list positions = helper.get();
+    for (pixel_position const& pos : positions)
+    {
+        for (size_t layout_i = 0; layout_i < num_layout_thunks; ++layout_i)
+        {
+            pixel_position const& offset = layout_manager.offset_at(layout_i);
+            pixel_position render_offset = pos + offset;
+            render_thunks(layout_thunks[layout_i], render_offset);
+        }
+    }
+}
+
+} // namespace mapnik
+
+#endif // MAPNIK_RENDERER_COMMON_PROCESS_GROUP_SYMBOLIZER_HPP
diff --git a/include/mapnik/renderer_common/process_markers_symbolizer.hpp b/include/mapnik/renderer_common/process_markers_symbolizer.hpp
new file mode 100644
index 0000000..6251ee2
--- /dev/null
+++ b/include/mapnik/renderer_common/process_markers_symbolizer.hpp
@@ -0,0 +1,211 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDERER_COMMON_PROCESS_MARKERS_SYMBOLIZER_HPP
+#define MAPNIK_RENDERER_COMMON_PROCESS_MARKERS_SYMBOLIZER_HPP
+
+#include <mapnik/renderer_common.hpp>
+#include <mapnik/svg/svg_storage.hpp>
+#include <mapnik/svg/svg_path_adapter.hpp>
+#include <mapnik/vertex_converters.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/marker_helpers.hpp>
+
+namespace mapnik {
+
+template <typename T0, typename T1, typename T2>
+void render_markers_symbolizer(markers_symbolizer const& sym,
+                               mapnik::feature_impl & feature,
+                               proj_transform const& prj_trans,
+                               renderer_common const& common,
+                               box2d<double> const& clip_box,
+                               T2 const& renderer_context)
+{
+    using namespace mapnik::svg;
+    using vector_dispatch_type = T0;
+    using raster_dispatch_type = T1;
+
+    std::string filename = get<std::string>(sym, keys::file, feature, common.vars_, "shape://ellipse");
+    bool clip = get<value_bool, keys::clip>(sym, feature, common.vars_);
+    double offset = get<value_double, keys::offset>(sym, feature, common.vars_);
+    double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common.vars_);
+    double smooth = get<value_double, keys::smooth>(sym, feature, common.vars_);
+
+    // https://github.com/mapnik/mapnik/issues/1316
+    bool snap_to_pixels = !mapnik::marker_cache::instance().is_uri(filename);
+    if (!filename.empty())
+    {
+        boost::optional<marker_ptr> mark = mapnik::marker_cache::instance().find(filename, true);
+        if (mark && *mark)
+        {
+            agg::trans_affine geom_tr;
+            auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+            if (transform) evaluate_transform(geom_tr, feature, common.vars_, *transform, common.scale_factor_);
+            agg::trans_affine image_tr = agg::trans_affine_scaling(common.scale_factor_);
+
+            if ((*mark)->is_vector())
+            {
+                boost::optional<svg_path_ptr> const& stock_vector_marker = (*mark)->get_vector_data();
+
+                // special case for simple ellipse markers
+                // to allow for full control over rx/ry dimensions
+                if (filename == "shape://ellipse"
+                   && (has_key(sym,keys::width) || has_key(sym,keys::height)))
+                {
+                    svg_storage_type marker_ellipse;
+                    vertex_stl_adapter<svg_path_storage> stl_storage(marker_ellipse.source());
+                    svg_path_adapter svg_path(stl_storage);
+                    build_ellipse(sym, feature, common.vars_, marker_ellipse, svg_path);
+                    svg_attribute_type attributes;
+                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym, feature, common.vars_);
+                    auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+                    if (image_transform) evaluate_transform(image_tr, feature, common.vars_, *image_transform);
+                    box2d<double> bbox = marker_ellipse.bounding_box();
+                    vector_dispatch_type rasterizer_dispatch(svg_path,
+                                                             result ? attributes : (*stock_vector_marker)->attributes(),
+                                                             bbox,
+                                                             image_tr,
+                                                             sym,
+                                                             *common.detector_,
+                                                             common.scale_factor_,
+                                                             feature,
+                                                             common.vars_,
+                                                             snap_to_pixels,
+                                                             renderer_context);
+
+                    using vertex_converter_type = vertex_converter<vector_dispatch_type,clip_line_tag,
+                                                  clip_poly_tag,
+                                                  transform_tag,
+                                                  affine_transform_tag,
+                                                  simplify_tag, smooth_tag,
+                                                  offset_transform_tag>;
+                    vertex_converter_type converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,geom_tr,feature,common.vars_,common.scale_factor_);
+                    if (clip && feature.paths().size() > 0) // optional clip (default: true)
+                    {
+                        geometry_type::types type = feature.paths()[0].type();
+                        if (type == geometry_type::types::Polygon)
+                            converter.template set<clip_poly_tag>();
+                        else if (type == geometry_type::types::LineString)
+                            converter.template set<clip_line_tag>();
+                    }
+                    converter.template set<transform_tag>(); //always transform
+                    if (std::fabs(offset) > 0.0) converter.template set<offset_transform_tag>(); // parallel offset
+                    converter.template set<affine_transform_tag>(); // optional affine transform
+                    if (simplify_tolerance > 0.0) converter.template set<simplify_tag>(); // optional simplify converter
+                    if (smooth > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
+                    apply_markers_multi(feature, common.vars_, converter, sym);
+                }
+                else
+                {
+                    box2d<double> const& bbox = (*mark)->bounding_box();
+                    setup_transform_scaling(image_tr, bbox.width(), bbox.height(), feature, common.vars_, sym);
+                    auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+                    if (image_transform) evaluate_transform(image_tr, feature, common.vars_, *image_transform);
+                    vertex_stl_adapter<svg_path_storage> stl_storage((*stock_vector_marker)->source());
+                    svg_path_adapter svg_path(stl_storage);
+                    svg_attribute_type attributes;
+                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym, feature, common.vars_);
+                    vector_dispatch_type rasterizer_dispatch(svg_path,
+                                                             result ? attributes : (*stock_vector_marker)->attributes(),
+                                                             bbox,
+                                                             image_tr,
+                                                             sym,
+                                                             *common.detector_,
+                                                             common.scale_factor_,
+                                                             feature,
+                                                             common.vars_,
+                                                             snap_to_pixels,
+                                                             renderer_context);
+
+                    using vertex_converter_type = vertex_converter<vector_dispatch_type,clip_line_tag,
+                                                  clip_poly_tag,
+                                                  transform_tag,
+                                                  affine_transform_tag,
+                                                  simplify_tag, smooth_tag,
+                                                  offset_transform_tag>;
+                    vertex_converter_type converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,geom_tr,feature,common.vars_,common.scale_factor_);
+                    if (clip && feature.paths().size() > 0) // optional clip (default: true)
+                    {
+                        geometry_type::types type = feature.paths()[0].type();
+                        if (type == geometry_type::types::Polygon)
+                            converter.template set<clip_poly_tag>();
+                        else if (type == geometry_type::types::LineString)
+                            converter.template set<clip_line_tag>();
+                    }
+                    converter.template set<transform_tag>(); //always transform
+                    if (std::fabs(offset) > 0.0) converter.template set<offset_transform_tag>(); // parallel offset
+                    converter.template set<affine_transform_tag>(); // optional affine transform
+                    if (simplify_tolerance > 0.0) converter.template set<simplify_tag>(); // optional simplify converter
+                    if (smooth > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
+                    apply_markers_multi(feature, common.vars_, converter, sym);
+                }
+            }
+            else // raster markers
+            {
+                setup_transform_scaling(image_tr, (*mark)->width(), (*mark)->height(), feature, common.vars_, sym);
+                auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+                if (image_transform) evaluate_transform(image_tr, feature, common.vars_, *image_transform);
+                box2d<double> const& bbox = (*mark)->bounding_box();
+                boost::optional<mapnik::image_ptr> marker = (*mark)->get_bitmap_data();
+                // - clamp sizes to > 4 pixels of interactivity
+                coord2d center = bbox.center();
+                agg::trans_affine_translation recenter(-center.x, -center.y);
+                agg::trans_affine marker_trans = recenter * image_tr;
+                raster_dispatch_type rasterizer_dispatch(**marker,
+                                                         marker_trans,
+                                                         sym,
+                                                         *common.detector_,
+                                                         common.scale_factor_,
+                                                         feature,
+                                                         common.vars_,
+                                                         renderer_context);
+
+                using vertex_converter_type = vertex_converter<raster_dispatch_type,clip_line_tag,
+                                              clip_poly_tag,
+                                              transform_tag,
+                                              affine_transform_tag,
+                                              simplify_tag, smooth_tag,
+                                              offset_transform_tag>;
+                vertex_converter_type converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,geom_tr,feature,common.vars_,common.scale_factor_);
+
+                if (clip && feature.paths().size() > 0) // optional clip (default: true)
+                {
+                    geometry_type::types type = feature.paths()[0].type();
+                    if (type == geometry_type::types::Polygon)
+                        converter.template set<clip_poly_tag>();
+                    else if (type == geometry_type::types::LineString)
+                        converter.template set<clip_line_tag>();
+                }
+                converter.template set<transform_tag>(); //always transform
+                if (std::fabs(offset) > 0.0) converter.template set<offset_transform_tag>(); // parallel offset
+                converter.template set<affine_transform_tag>(); // optional affine transform
+                if (simplify_tolerance > 0.0) converter.template set<simplify_tag>(); // optional simplify converter
+                if (smooth > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
+                apply_markers_multi(feature, common.vars_, converter, sym);
+            }
+        }
+    }
+}
+
+} // namespace mapnik
+
+#endif // MAPNIK_RENDERER_COMMON_PROCESS_MARKERS_SYMBOLIZER_HPP
diff --git a/include/mapnik/renderer_common/process_point_symbolizer.hpp b/include/mapnik/renderer_common/process_point_symbolizer.hpp
new file mode 100644
index 0000000..9841f5d
--- /dev/null
+++ b/include/mapnik/renderer_common/process_point_symbolizer.hpp
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDERER_COMMON_PROCESS_POINT_SYMBOLIZER_HPP
+#define MAPNIK_RENDERER_COMMON_PROCESS_POINT_SYMBOLIZER_HPP
+
+#include <mapnik/geom_util.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/label_collision_detector.hpp>
+
+namespace mapnik {
+
+template <typename F,typename RendererType>
+void render_point_symbolizer(point_symbolizer const &sym,
+                             mapnik::feature_impl &feature,
+                             proj_transform const &prj_trans,
+                             RendererType &common,
+                             F render_marker)
+{
+    std::string filename = get<std::string,keys::file>(sym,feature, common.vars_);
+    boost::optional<mapnik::marker_ptr> marker = filename.empty()
+       ? std::make_shared<mapnik::marker>()
+       : marker_cache::instance().find(filename, true);
+
+    if (marker)
+    {
+        value_double opacity = get<value_double,keys::opacity>(sym, feature, common.vars_);
+        value_bool allow_overlap = get<value_bool, keys::allow_overlap>(sym, feature, common.vars_);
+        value_bool ignore_placement = get<value_bool, keys::ignore_placement>(sym, feature, common.vars_);
+        point_placement_enum placement= get<point_placement_enum, keys::point_placement_type>(sym, feature, common.vars_);
+
+        box2d<double> const& bbox = (*marker)->bounding_box();
+        coord2d center = bbox.center();
+
+        agg::trans_affine tr;
+        auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+        if (image_transform) evaluate_transform(tr, feature, common.vars_, *image_transform);
+
+        agg::trans_affine_translation recenter(-center.x, -center.y);
+        agg::trans_affine recenter_tr = recenter * tr;
+        box2d<double> label_ext = bbox * recenter_tr * agg::trans_affine_scaling(common.scale_factor_);
+
+        for (std::size_t i=0; i<feature.num_geometries(); ++i)
+        {
+            geometry_type const& geom = feature.get_geometry(i);
+            double x;
+            double y;
+            double z=0;
+            if (placement == CENTROID_POINT_PLACEMENT)
+            {
+                if (!label::centroid(geom, x, y))
+                    return;
+            }
+            else
+            {
+                if (!label::interior_position(geom ,x, y))
+                    return;
+            }
+
+            prj_trans.backward(x,y,z);
+            common.t_.forward(&x,&y);
+            label_ext.re_center(x,y);
+            if (allow_overlap ||
+                common.detector_->has_placement(label_ext))
+            {
+
+                render_marker(pixel_position(x, y),
+                              **marker,
+                              tr,
+                              opacity);
+
+                if (!ignore_placement)
+                    common.detector_->insert(label_ext);
+            }
+        }
+    }
+}
+
+} // namespace mapnik
+
+#endif /* MAPNIK_RENDERER_COMMON_PROCESS_POINT_SYMBOLIZER_HPP */
diff --git a/include/mapnik/renderer_common/process_polygon_symbolizer.hpp b/include/mapnik/renderer_common/process_polygon_symbolizer.hpp
new file mode 100644
index 0000000..262b313
--- /dev/null
+++ b/include/mapnik/renderer_common/process_polygon_symbolizer.hpp
@@ -0,0 +1,75 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDERER_COMMON_PROCESS_POLYGON_SYMBOLIZER_HPP
+#define MAPNIK_RENDERER_COMMON_PROCESS_POLYGON_SYMBOLIZER_HPP
+
+#include <mapnik/renderer_common.hpp>
+#include <mapnik/vertex_converters.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/geometry.hpp>
+#include <mapnik/feature.hpp>
+
+namespace mapnik {
+
+template <typename vertex_converter_type, typename rasterizer_type, typename F>
+void render_polygon_symbolizer(polygon_symbolizer const &sym,
+                               mapnik::feature_impl & feature,
+                               proj_transform const& prj_trans,
+                               renderer_common & common,
+                               box2d<double> const& clip_box,
+                               rasterizer_type & ras,
+                               F fill_func)
+{
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common.vars_, *transform, common.scale_factor_);
+
+    value_bool clip = get<value_bool,keys::clip>(sym, feature, common.vars_);
+    value_double simplify_tolerance = get<value_double,keys::simplify_tolerance>(sym, feature, common.vars_);
+    value_double smooth = get<value_double,keys::smooth>(sym, feature, common.vars_);
+    value_double opacity = get<value_double,keys::fill_opacity>(sym, feature, common.vars_);
+
+    vertex_converter_type converter(clip_box, ras, sym, common.t_, prj_trans, tr,
+                                    feature,common.vars_,common.scale_factor_);
+
+    if (prj_trans.equal() && clip) converter.template set<clip_poly_tag>(); //optional clip (default: true)
+    converter.template set<transform_tag>(); //always transform
+    converter.template set<affine_transform_tag>();
+    if (simplify_tolerance > 0.0) converter.template set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
+
+    for (geometry_type & geom : feature.paths())
+    {
+        if (geom.size() > 2)
+        {
+            converter.apply(geom);
+        }
+    }
+
+    color const& fill = get<mapnik::color, keys::fill>(sym, feature, common.vars_);
+    fill_func(fill, opacity);
+}
+
+} // namespace mapnik
+
+#endif /* MAPNIK_RENDERER_COMMON_PROCESS_POLYGON_SYMBOLIZER_HPP */
diff --git a/include/mapnik/renderer_common/process_raster_symbolizer.hpp b/include/mapnik/renderer_common/process_raster_symbolizer.hpp
new file mode 100644
index 0000000..2fdeca6
--- /dev/null
+++ b/include/mapnik/renderer_common/process_raster_symbolizer.hpp
@@ -0,0 +1,132 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDERER_COMMON_PROCESS_RASTER_SYMBOLIZER_HPP
+#define MAPNIK_RENDERER_COMMON_PROCESS_RASTER_SYMBOLIZER_HPP
+
+// mapnik
+#include <mapnik/warp.hpp>
+#include <mapnik/raster.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/raster_colorizer.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/feature.hpp>
+
+// agg
+#include "agg_rendering_buffer.h"
+#include "agg_pixfmt_rgba.h"
+
+namespace mapnik {
+
+template <typename F>
+void render_raster_symbolizer(raster_symbolizer const &sym,
+                              mapnik::feature_impl &feature,
+                              proj_transform const &prj_trans,
+                              renderer_common &common,
+                              F composite)
+{
+    raster_ptr const& source = feature.get_raster();
+    if (source)
+    {
+        // If there's a colorizer defined, use it to color the raster in-place
+        raster_colorizer_ptr colorizer = get<raster_colorizer_ptr>(sym, keys::colorizer);
+        if (colorizer)
+            colorizer->colorize(source,feature);
+
+        box2d<double> target_ext = box2d<double>(source->ext_);
+        prj_trans.backward(target_ext, PROJ_ENVELOPE_POINTS);
+        box2d<double> ext = common.t_.forward(target_ext);
+        int start_x = static_cast<int>(std::floor(ext.minx()+.5));
+        int start_y = static_cast<int>(std::floor(ext.miny()+.5));
+        int end_x = static_cast<int>(std::floor(ext.maxx()+.5));
+        int end_y = static_cast<int>(std::floor(ext.maxy()+.5));
+        int raster_width = end_x - start_x;
+        int raster_height = end_y - start_y;
+        if (raster_width > 0 && raster_height > 0)
+        {
+            scaling_method_e scaling_method = get<scaling_method_e>(sym, keys::scaling, feature, common.vars_, SCALING_NEAR);
+            composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common.vars_, src_over);
+            double opacity = get<double>(sym,keys::opacity,feature, common.vars_, 1.0);
+            bool premultiply_source = !source->premultiplied_alpha_;
+            auto is_premultiplied = get_optional<bool>(sym, keys::premultiplied, feature, common.vars_);
+            if (is_premultiplied)
+            {
+                if (*is_premultiplied) premultiply_source = false;
+                else premultiply_source = true;
+            }
+            if (premultiply_source)
+            {
+                agg::rendering_buffer buffer(source->data_.getBytes(),
+                                             source->data_.width(),
+                                             source->data_.height(),
+                                             source->data_.width() * 4);
+                agg::pixfmt_rgba32 pixf(buffer);
+                pixf.premultiply();
+            }
+            if (!prj_trans.equal())
+            {
+                double offset_x = ext.minx() - start_x;
+                double offset_y = ext.miny() - start_y;
+                raster target(target_ext, raster_width, raster_height, source->get_filter_factor());
+                unsigned mesh_size = static_cast<unsigned>(get<value_integer>(sym,keys::mesh_size,feature, common.vars_, 16));
+                reproject_and_scale_raster(target,
+                                           *source,
+                                           prj_trans,
+                                           offset_x,
+                                           offset_y,
+                                           mesh_size,
+                                           scaling_method);
+                composite(target.data_, comp_op, opacity, start_x, start_y);
+            }
+            else
+            {
+                double image_ratio_x = ext.width() / source->data_.width();
+                double image_ratio_y = ext.height() / source->data_.height();
+                double eps = 1e-5;
+                if ( (std::fabs(image_ratio_x - 1.0) <= eps) &&
+                     (std::fabs(image_ratio_y - 1.0) <= eps) &&
+                     (std::abs(start_x) <= eps) &&
+                     (std::abs(start_y) <= eps) )
+                {
+                    composite(source->data_, comp_op, opacity, start_x, start_y);
+                }
+                else
+                {
+                    raster target(target_ext, raster_width, raster_height, source->get_filter_factor());
+                    scale_image_agg<image_data_32>(target.data_,
+                                                   source->data_,
+                                                   scaling_method,
+                                                   image_ratio_x,
+                                                   image_ratio_y,
+                                                   0.0,
+                                                   0.0,
+                                                   source->get_filter_factor());
+                    composite(target.data_, comp_op, opacity, start_x, start_y);
+                }
+            }
+        }
+    }
+}
+
+} // namespace mapnik
+
+#endif // MAPNIK_RENDERER_COMMON_PROCESS_RASTER_SYMBOLIZER_HPP
diff --git a/include/mapnik/renderer_common/render_pattern.hpp b/include/mapnik/renderer_common/render_pattern.hpp
new file mode 100644
index 0000000..885d89c
--- /dev/null
+++ b/include/mapnik/renderer_common/render_pattern.hpp
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_RENDER_PATTERN_HPP
+#define MAPNIK_RENDER_PATTERN_HPP
+
+#include <mapnik/image_data.hpp>
+#include <memory>
+
+// fwd decl
+namespace agg {
+struct trans_affine;
+}
+
+namespace mapnik {
+
+// fwd decl
+struct rasterizer;
+class marker;
+
+std::shared_ptr<image_data_32> render_pattern(rasterizer & ras,
+                                              marker const& marker,
+                                              agg::trans_affine const& tr,
+                                              double opacity);
+
+} // namespace mapnik
+
+
+#endif // MAPNIK_RENDER_PATTERN_HPP
diff --git a/include/mapnik/request.hpp b/include/mapnik/request.hpp
index 9a4b99c..8f5272b 100644
--- a/include/mapnik/request.hpp
+++ b/include/mapnik/request.hpp
@@ -27,9 +27,6 @@
 #include <mapnik/config.hpp>
 #include <mapnik/box2d.hpp>
 
-// boost
-#include <boost/optional/optional.hpp>
-
 namespace mapnik
 {
 
diff --git a/include/mapnik/rule.hpp b/include/mapnik/rule.hpp
index 3cebca3..bc31685 100644
--- a/include/mapnik/rule.hpp
+++ b/include/mapnik/rule.hpp
@@ -24,24 +24,9 @@
 #define MAPNIK_RULE_HPP
 
 // mapnik
-#include <mapnik/building_symbolizer.hpp>
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/line_pattern_symbolizer.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
-#include <mapnik/point_symbolizer.hpp>
-#include <mapnik/raster_symbolizer.hpp>
-#include <mapnik/shield_symbolizer.hpp>
-#include <mapnik/text_symbolizer.hpp>
-#include <mapnik/markers_symbolizer.hpp>
-#include <mapnik/debug_symbolizer.hpp>
-#include <mapnik/feature.hpp>
+#include <mapnik/config.hpp>
+#include <mapnik/symbolizer_base.hpp>
 #include <mapnik/expression.hpp>
-#include <mapnik/expression_string.hpp>
-#include <mapnik/config.hpp> // MAPNIK_DECL
-
-// boost
-#include <boost/variant/variant_fwd.hpp>
 
 // stl
 #include <string>
@@ -50,86 +35,10 @@
 
 namespace mapnik
 {
-inline bool operator==(point_symbolizer const& lhs,
-                       point_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-inline bool operator==(line_symbolizer const& lhs,
-                       line_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-inline bool operator==(line_pattern_symbolizer const& lhs,
-                       line_pattern_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(polygon_symbolizer const& lhs,
-                       polygon_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(polygon_pattern_symbolizer const& lhs,
-                       polygon_pattern_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(raster_symbolizer const& lhs,
-                       raster_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(text_symbolizer const& lhs,
-                       text_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(shield_symbolizer const& lhs,
-                       shield_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(building_symbolizer const& lhs,
-                       building_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(markers_symbolizer const& lhs,
-                       markers_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-inline bool operator==(debug_symbolizer const& lhs,
-                       debug_symbolizer const& rhs)
-{
-    return (&lhs == &rhs);
-}
-
-typedef boost::variant<point_symbolizer,
-                       line_symbolizer,
-                       line_pattern_symbolizer,
-                       polygon_symbolizer,
-                       polygon_pattern_symbolizer,
-                       raster_symbolizer,
-                       shield_symbolizer,
-                       text_symbolizer,
-                       building_symbolizer,
-                       markers_symbolizer,
-                       debug_symbolizer> symbolizer;
-
 class MAPNIK_DECL rule
 {
 public:
-    typedef std::vector<symbolizer> symbolizers;
+    using symbolizers = std::vector<symbolizer>;
 private:
 
     std::string name_;
@@ -145,19 +54,19 @@ public:
     rule(std::string const& name,
          double min_scale_denominator = 0,
          double max_scale_denominator = std::numeric_limits<double>::infinity());
-    rule(const rule& rhs, bool deep_copy = false);
-
-    rule& operator=(rule const& rhs);
-    bool operator==(rule const& other);
+    rule(const rule& rhs);
+    rule(rule && rhs);
+    rule& operator=(rule rhs);
+    bool operator==(rule const& rhs) const;
     void set_max_scale(double scale);
     double get_max_scale() const;
     void set_min_scale(double scale);
     double get_min_scale() const;
     void set_name(std::string const& name);
     std::string const& get_name() const;
-    void append(symbolizer const& sym);
+    void append(symbolizer && sym);
     void remove_at(size_t index);
-    const symbolizers& get_symbolizers() const;
+    symbolizers const& get_symbolizers() const;
     symbolizers::const_iterator begin() const;
     symbolizers::const_iterator end() const;
     symbolizers::iterator begin();
@@ -168,11 +77,15 @@ public:
     bool has_else_filter() const;
     void set_also(bool also_filter);
     bool has_also_filter() const;
-    bool active(double scale) const;
-
-private:
+    inline bool active(double scale) const
+    {
+        return ( scale >= min_scale_ - 1e-6 && scale < max_scale_ + 1e-6 && !syms_.empty());
+    }
+    inline void reserve(std::size_t size)
+    {
+        syms_.reserve(size);
+    }
 
-    void swap(rule& rhs) throw();
 };
 
 }
diff --git a/include/mapnik/rule_cache.hpp b/include/mapnik/rule_cache.hpp
index 4a805b9..244b89d 100644
--- a/include/mapnik/rule_cache.hpp
+++ b/include/mapnik/rule_cache.hpp
@@ -25,25 +25,37 @@
 
 // mapnik
 #include <mapnik/rule.hpp>
-#include <mapnik/feature_type_style.hpp>
-
-// boost
-#include <boost/foreach.hpp>
+#include <mapnik/noncopyable.hpp>
 
 // stl
 #include <vector>
+#include <type_traits>
 
 namespace mapnik
 {
 
-class rule_cache
+class rule_cache : private noncopyable
 {
 public:
-    typedef std::vector<rule const*> rule_ptrs;
+    using rule_ptrs = std::vector<rule const*>;
     rule_cache()
-     : if_rules_(),
-       else_rules_(),
-       also_rules_() {}
+        : if_rules_(),
+          else_rules_(),
+          also_rules_() {}
+
+    rule_cache(rule_cache && rhs) // move ctor
+        :  if_rules_(std::move(rhs.if_rules_)),
+           else_rules_(std::move(rhs.else_rules_)),
+           also_rules_(std::move(rhs.also_rules_))
+    {}
+
+    rule_cache& operator=(rule_cache && rhs) // move assign
+    {
+        std::swap(if_rules_, rhs.if_rules_);
+        std::swap(else_rules_,rhs.else_rules_);
+        std::swap(also_rules_, rhs.also_rules_);
+        return *this;
+    }
 
     void add_rule(rule const& r)
     {
@@ -65,12 +77,12 @@ public:
     {
         return if_rules_;
     }
-    
+
     rule_ptrs const& get_else_rules() const
     {
         return else_rules_;
     }
-    
+
     rule_ptrs const& get_also_rules() const
     {
         return also_rules_;
diff --git a/include/mapnik/segment.hpp b/include/mapnik/segment.hpp
index 754c61d..ef05821 100644
--- a/include/mapnik/segment.hpp
+++ b/include/mapnik/segment.hpp
@@ -23,17 +23,18 @@
 #ifndef MAPNIK_SEGMENT_HPP
 #define MAPNIK_SEGMENT_HPP
 
-#include <boost/tuple/tuple.hpp>
+#include <tuple>
+#include <algorithm>
 
 namespace mapnik
 {
 
-typedef boost::tuple<double,double,double,double> segment_t;
+using segment_t = std::tuple<double,double,double,double>;
 
-static bool y_order(segment_t const& first,segment_t const& second)
+static inline bool y_order(segment_t const& first,segment_t const& second)
 {
-    double miny0 = std::min(first.get<1>(),first.get<3>());
-    double miny1 = std::min(second.get<1>(),second.get<3>());
+    double miny0 = std::min(std::get<1>(first), std::get<3>(first));
+    double miny1 = std::min(std::get<1>(second), std::get<3>(second));
     return miny0 > miny1;
 }
 
diff --git a/include/mapnik/shield_symbolizer.hpp b/include/mapnik/shield_symbolizer.hpp
deleted file mode 100644
index be2af29..0000000
--- a/include/mapnik/shield_symbolizer.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_SHIELD_SYMBOLIZER_HPP
-#define MAPNIK_SHIELD_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/color.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/expression.hpp>
-#include <mapnik/text_symbolizer.hpp>
-
-// boost
-#include <boost/tuple/tuple.hpp>
-
-namespace mapnik
-{
-struct MAPNIK_DECL shield_symbolizer : public text_symbolizer,
-                                       public symbolizer_with_image
-{
-    // Note - we do not use boost::make_shared below as VC2008 and VC2010 are
-    // not able to compile make_shared used within a constructor
-    shield_symbolizer(text_placements_ptr placements = text_placements_ptr(new text_placements_dummy));
-    shield_symbolizer(expression_ptr name,
-                      std::string const& face_name,
-                      float size,
-                      color const& fill,
-                      path_expression_ptr file);
-    shield_symbolizer(expression_ptr name,
-                      float size,
-                      color const& fill,
-                      path_expression_ptr file);
-
-    bool get_unlock_image() const;              // image is not locked to the text placement
-    void set_unlock_image(bool unlock_image);
-    void set_shield_displacement(double shield_dx, double shield_dy);
-    position const& get_shield_displacement() const;
-
-private:
-    bool unlock_image_;
-    position shield_displacement_;
-};
-}
-
-#endif // MAPNIK_SHIELD_SYMBOLIZER_HPP
diff --git a/include/mapnik/simplify_converter.hpp b/include/mapnik/simplify_converter.hpp
index 2346a71..c6c2d73 100644
--- a/include/mapnik/simplify_converter.hpp
+++ b/include/mapnik/simplify_converter.hpp
@@ -3,7 +3,6 @@
 
 // mapnik
 #include <mapnik/config.hpp>
-#include <mapnik/box2d.hpp>
 #include <mapnik/vertex.hpp>
 #include <mapnik/simplify.hpp>
 #include <mapnik/noncopyable.hpp>
@@ -15,9 +14,7 @@
 #include <deque>
 #include <cmath>
 #include <stdexcept>
-
-// boost
-#include <boost/optional.hpp>
+#include <algorithm>
 
 namespace mapnik
 {
@@ -32,12 +29,12 @@ struct weighted_vertex : private mapnik::noncopyable
     weighted_vertex(vertex2d coord_) :
         coord(coord_),
         weight(std::numeric_limits<double>::infinity()),
-        prev(NULL),
-        next(NULL) {}
+        prev(nullptr),
+        next(nullptr) {}
 
     double nominalWeight()
     {
-        if (prev == NULL || next == NULL || coord.cmd != SEG_LINETO) {
+        if (prev == nullptr || next == nullptr || coord.cmd != SEG_LINETO) {
             return std::numeric_limits<double>::infinity();
         }
         vertex2d const& A = prev->coord;
@@ -89,16 +86,6 @@ struct sleeve
         }
         return inside;
     }
-    void print()
-    {
-        std::cerr << "LINESTRING("
-                  << v[0].x << " " << -v[0].y << ","
-                  << v[1].x << " " << -v[1].y << ","
-                  << v[2].x << " " << -v[2].y << ","
-                  << v[3].x << " " << -v[3].y << ","
-                  << v[0].x << " " << -v[0].y << ")" << std::endl;
-
-    }
 };
 
 template <typename Geometry>
@@ -122,6 +109,11 @@ public:
         cache
     };
 
+    unsigned type() const
+    {
+        return static_cast<unsigned>(geom_.type());
+    }
+
     simplify_algorithm_e get_simplify_algorithm()
     {
         return algorithm_;
@@ -202,6 +194,9 @@ private:
         return previous_vertex_.cmd;
     }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunknown-pragmas"
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
     unsigned output_vertex_distance(double* x, double* y) {
         if (status_ == closing) {
             status_ = end;
@@ -245,6 +240,7 @@ private:
         *y = vtx.y;
         return vtx.cmd;
     }
+#pragma GCC diagnostic pop
 
     template <typename Iterator>
     bool fit_sleeve(Iterator itr,Iterator end, vertex2d const& v)
@@ -374,8 +370,8 @@ private:
 
     status init_vertices_visvalingam_whyatt()
     {
-        typedef std::set<weighted_vertex *, weighted_vertex::ascending_sort> VertexSet;
-        typedef std::vector<weighted_vertex *> VertexList;
+        using VertexSet = std::set<weighted_vertex *, weighted_vertex::ascending_sort>;
+        using VertexList = std::vector<weighted_vertex *>;
 
         std::vector<weighted_vertex *> v_list;
         vertex2d vtx(vertex2d::no_init);
@@ -392,8 +388,8 @@ private:
         VertexSet v;
         for (VertexList::iterator i = v_list.begin(); i != v_list.end(); ++i)
         {
-            (*i)->prev = i == v_list.begin() ? NULL : *(i - 1);
-            (*i)->next = i + 1 == v_list.end() ? NULL : *(i + 1);
+            (*i)->prev = i == v_list.begin() ? nullptr : *(i - 1);
+            (*i)->next = i + 1 == v_list.end() ? nullptr : *(i + 1);
             (*i)->weight = (*i)->nominalWeight();
             v.insert(*i);
         }
diff --git a/include/mapnik/span_image_filter.hpp b/include/mapnik/span_image_filter.hpp
index e32b5a2..8d5008e 100644
--- a/include/mapnik/span_image_filter.hpp
+++ b/include/mapnik/span_image_filter.hpp
@@ -20,10 +20,10 @@
  *
  *****************************************************************************/
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include "agg_span_image_filter_rgba.h"
 
-namespace mapnik { 
+namespace mapnik {
 
 using namespace agg;
 
@@ -32,13 +32,13 @@ class span_image_resample_rgba_affine :
         public span_image_resample_affine<Source>
 {
 public:
-    typedef Source source_type;
-    typedef typename source_type::color_type color_type;
-    typedef typename source_type::order_type order_type;
-    typedef span_image_resample_affine<source_type> base_type;
-    typedef typename base_type::interpolator_type interpolator_type;
-    typedef typename color_type::value_type value_type;
-    typedef typename color_type::long_type long_type;
+    using source_type = Source;
+    using color_type = typename source_type::color_type;
+    using order_type = typename source_type::order_type;
+    using base_type = span_image_resample_affine<source_type>;
+    using interpolator_type = typename base_type::interpolator_type;
+    using value_type = typename color_type::value_type;
+    using long_type = typename color_type::long_type;
     enum base_scale_e
     {
         base_shift      = color_type::base_shift,
@@ -71,7 +71,7 @@ public:
             (diameter * base_type::m_rx + image_subpixel_mask) >>
             image_subpixel_shift;
 
-        const boost::int16_t* weight_array = base_type::filter().weight_array();
+        const std::int16_t* weight_array = base_type::filter().weight_array();
 
         do
         {
@@ -104,7 +104,7 @@ public:
                     int weight = (weight_y * weight_array[x_hr] +
                                   image_filter_scale / 2) >>
                         downscale_shift;
-                    
+
                     fg[0] += *fg_ptr++ * weight;
                     fg[1] += *fg_ptr++ * weight;
                     fg[2] += *fg_ptr++ * weight;
@@ -144,7 +144,7 @@ public:
             if(fg[order_type::G] > base_mask)         fg[order_type::G] = base_mask;
             if(fg[order_type::B] > base_mask)         fg[order_type::B] = base_mask;
             if(fg[order_type::A] > base_mask)         fg[order_type::A] = base_mask;
-            
+
             span->r = (value_type)fg[order_type::R];
             span->g = (value_type)fg[order_type::G];
             span->b = (value_type)fg[order_type::B];
diff --git a/include/mapnik/sql_utils.hpp b/include/mapnik/sql_utils.hpp
index 419c351..f8ade31 100644
--- a/include/mapnik/sql_utils.hpp
+++ b/include/mapnik/sql_utils.hpp
@@ -27,7 +27,11 @@
 #include <mapnik/util/trim.hpp> // for trim
 
 // boost
-#include "boost/algorithm/string/replace.hpp"  // for ireplace_all, etc
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/algorithm/string/replace.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <sstream>
diff --git a/include/mapnik/stroke.hpp b/include/mapnik/stroke.hpp
deleted file mode 100644
index 31c4ab2..0000000
--- a/include/mapnik/stroke.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_STROKE_HPP
-#define MAPNIK_STROKE_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/color.hpp>
-#include <mapnik/gamma_method.hpp>
-#include <mapnik/enumeration.hpp>
-
-// stl
-#include <vector>
-
-namespace mapnik
-{
-typedef std::vector<std::pair<double,double> > dash_array;
-
-// if you add new tokens, don't forget to add them to the corresponding
-// string array in the cpp file.
-enum line_cap_enum
-{
-    BUTT_CAP,
-    SQUARE_CAP,
-    ROUND_CAP,
-    line_cap_enum_MAX
-};
-
-DEFINE_ENUM( line_cap_e, line_cap_enum );
-
-// if you add new tokens, don't forget to add them to the corresponding
-// string array in the cpp file.
-enum line_join_enum
-{
-    MITER_JOIN,
-    MITER_REVERT_JOIN,
-    ROUND_JOIN,
-    BEVEL_JOIN,
-    line_join_enum_MAX
-};
-
-DEFINE_ENUM( line_join_e, line_join_enum );
-
-class MAPNIK_DECL stroke
-{
-    color c_;
-    double width_;
-    double opacity_; // 0.0 - 1.0
-    line_cap_e  line_cap_;
-    line_join_e line_join_;
-    double gamma_;
-    gamma_method_e gamma_method_;
-    dash_array dash_;
-    double dash_offset_;
-    double miterlimit_;
-public:
-    stroke();
-    explicit stroke(color const& c, double width=1.0);
-    stroke(stroke const& other);
-    stroke& operator=(const stroke& rhs);
-
-    void set_color(const color& c);
-    color const& get_color() const;
-
-    double get_width() const;
-    void set_width(double w);
-
-    void set_opacity(double opacity);
-    double get_opacity() const;
-
-    void set_line_cap(line_cap_e line_cap);
-    line_cap_e get_line_cap() const;
-
-    void set_line_join(line_join_e line_join);
-    line_join_e get_line_join() const;
-
-    void set_gamma(double gamma);
-    double get_gamma() const;
-
-    void set_gamma_method(gamma_method_e gamma_method);
-    gamma_method_e get_gamma_method() const;
-
-    void add_dash(double dash,double gap);
-    bool has_dash() const;
-
-    void set_dash_offset(double offset);
-    double dash_offset() const;
-
-    dash_array const& get_dash_array() const;
-    
-    void set_miterlimit(double val);
-    double get_miterlimit() const;
-    
-private:
-    void swap(const stroke& other) throw();
-};
-}
-
-#endif // MAPNIK_STROKE_HPP
diff --git a/include/mapnik/svg/geometry_svg_generator.hpp b/include/mapnik/svg/geometry_svg_generator.hpp
new file mode 100644
index 0000000..e3061d2
--- /dev/null
+++ b/include/mapnik/svg/geometry_svg_generator.hpp
@@ -0,0 +1,159 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GEOMETRY_SVG_PATH_GENERATOR_HPP
+#define MAPNIK_GEOMETRY_SVG_PATH_GENERATOR_HPP
+
+
+// mapnik
+#include <mapnik/global.hpp>
+#include <mapnik/geometry.hpp> // for container stuff
+#include <mapnik/view_transform.hpp> // for container stuff
+#include <mapnik/transform_path_adapter.hpp>
+#include <mapnik/util/path_iterator.hpp>
+#include <mapnik/util/container_adapter.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/karma.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_fusion.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/fusion/adapted/std_tuple.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#pragma GCC diagnostic pop
+
+
+// adapted to conform to the concepts
+// required by Karma to be recognized as a container of
+// attributes for output generation.
+
+namespace boost { namespace spirit { namespace traits {
+
+// TODO - this needs to be made generic to any path type
+using path_type = mapnik::transform_path_adapter<mapnik::view_transform, mapnik::geometry_type>;
+
+template <>
+struct is_container<path_type const> : mpl::true_ {} ;
+
+template <>
+struct container_iterator<path_type const>
+{
+    using type = mapnik::util::path_iterator<path_type>;
+};
+
+template <>
+struct begin_container<path_type const>
+{
+    static mapnik::util::path_iterator<path_type>
+    call (path_type const& g)
+    {
+        return mapnik::util::path_iterator<path_type>(g);
+    }
+};
+
+template <>
+struct end_container<path_type const>
+{
+    static mapnik::util::path_iterator<path_type>
+    call (path_type const& /*g*/)
+    {
+        return mapnik::util::path_iterator<path_type>();
+    }
+};
+
+}}}
+
+
+namespace mapnik { namespace svg {
+
+    namespace karma = boost::spirit::karma;
+    namespace phoenix = boost::phoenix;
+
+    namespace svg_detail {
+
+    template <typename Geometry>
+    struct get_type
+    {
+        using result_type = int;
+        result_type operator() (Geometry const& geom) const
+        {
+            return static_cast<int>(geom.type());
+        }
+    };
+
+    template <typename T>
+    struct get_first
+    {
+        using geometry_type = T;
+        using result_type = typename geometry_type::value_type const;
+        result_type operator() (geometry_type const& geom) const
+        {
+            typename geometry_type::value_type coord;
+            geom.rewind(0);
+            std::get<0>(coord) = geom.vertex(&std::get<1>(coord),&std::get<2>(coord));
+            return coord;
+        }
+    };
+
+    template <typename T>
+    struct coordinate_policy : karma::real_policies<T>
+    {
+        using base_type = boost::spirit::karma::real_policies<T>;
+        static int floatfield(T) { return base_type::fmtflags::fixed; }
+        static unsigned precision(T) { return 4u ;}
+    };
+    }
+
+    template <typename OutputIterator, typename Geometry>
+    struct svg_path_generator :
+        karma::grammar<OutputIterator, Geometry const& ()>
+    {
+
+        using geometry_type = Geometry;
+        using coord_type = typename boost::remove_pointer<typename geometry_type::value_type>::type;
+
+        svg_path_generator();
+        // rules
+        karma::rule<OutputIterator, geometry_type const& ()> svg;
+        karma::rule<OutputIterator, geometry_type const& ()> point;
+        karma::rule<OutputIterator, geometry_type const& ()> linestring;
+        karma::rule<OutputIterator, geometry_type const& ()> polygon;
+
+        karma::rule<OutputIterator, coord_type ()> svg_point;
+        karma::rule<OutputIterator, karma::locals<unsigned>, geometry_type const& ()> svg_path;
+
+        // phoenix functions
+        phoenix::function<svg_detail::get_type<geometry_type> > _type;
+        phoenix::function<svg_detail::get_first<geometry_type> > _first;
+        //
+        karma::real_generator<double, svg_detail::coordinate_policy<double> > coordinate;
+
+    };
+
+}}
+
+#endif // MAPNIK_GEOMETRY_SVG_PATH_GENERATOR_HPP
diff --git a/include/mapnik/svg/geometry_svg_generator_impl.hpp b/include/mapnik/svg/geometry_svg_generator_impl.hpp
new file mode 100644
index 0000000..3f284ae
--- /dev/null
+++ b/include/mapnik/svg/geometry_svg_generator_impl.hpp
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+
+#include <mapnik/svg/geometry_svg_generator.hpp>
+
+namespace mapnik { namespace svg {
+
+    namespace karma = boost::spirit::karma;
+    namespace phoenix = boost::phoenix;
+
+    template <typename OutputIterator, typename Geometry>
+    svg_path_generator<OutputIterator,Geometry>::svg_path_generator()
+        : svg_path_generator::base_type(svg)
+    {
+        boost::spirit::karma::uint_type uint_;
+        boost::spirit::karma::_val_type _val;
+        boost::spirit::karma::_1_type _1;
+        boost::spirit::karma::lit_type lit;
+        boost::spirit::karma::_a_type _a;
+        boost::spirit::karma::string_type kstring;
+
+        svg = point | linestring | polygon
+            ;
+
+        point = &uint_(mapnik::geometry_type::types::Point)[_1 = _type(_val)]
+            << svg_point [_1 = _first(_val)]
+            ;
+
+        svg_point = &uint_
+            << lit("cx=\"") << coordinate
+            << lit("\" cy=\"") << coordinate
+            << lit('\"')
+            ;
+
+        linestring = &uint_(mapnik::geometry_type::types::LineString)[_1 = _type(_val)]
+            << lit("d=\"") << svg_path << lit("\"")
+            ;
+
+        polygon = &uint_(mapnik::geometry_type::types::Polygon)[_1 = _type(_val)]
+            << lit("d=\"") << svg_path << lit("\"")
+            ;
+
+        svg_path %= ((&uint_(mapnik::SEG_MOVETO) << lit('M')
+                      | &uint_(mapnik::SEG_LINETO) [_a +=1] << kstring [if_(_a == 1u) [_1 = "L" ].else_[_1 =""]])
+                     << lit(' ') << coordinate << lit(' ') << coordinate) % lit(' ')
+            ;
+
+    }
+
+}}
diff --git a/include/mapnik/svg/output/svg_generator.hpp b/include/mapnik/svg/output/svg_generator.hpp
index bd5b3ff..e9ff4bd 100644
--- a/include/mapnik/svg/output/svg_generator.hpp
+++ b/include/mapnik/svg/output/svg_generator.hpp
@@ -24,13 +24,13 @@
 #define MAPNIK_SVG_GENERATOR_HPP
 
 // mapnik
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 #include <mapnik/color.hpp>
 #include <mapnik/geometry.hpp>
-#include <mapnik/util/geometry_svg_generator.hpp>
-#include <mapnik/svg/output/svg_output_grammars.hpp>
+#include <mapnik/svg/geometry_svg_generator.hpp>
 #include <mapnik/svg/output/svg_output_attributes.hpp>
 #include <mapnik/noncopyable.hpp>
+#include <mapnik/value_types.hpp>
 
 
 namespace mapnik { namespace svg {
@@ -44,11 +44,6 @@ namespace mapnik { namespace svg {
     template <typename OutputIterator>
     class svg_generator : private mapnik::noncopyable
     {
-        typedef svg::svg_root_attributes_grammar<OutputIterator> root_attributes_grammar;
-        typedef svg::svg_rect_attributes_grammar<OutputIterator> rect_attributes_grammar;
-        typedef svg::svg_path_attributes_grammar<OutputIterator> path_attributes_grammar;
-        typedef svg::svg_path_dash_array_grammar<OutputIterator> path_dash_array_grammar;
-
     public:
         explicit svg_generator(OutputIterator& output_iterator);
         ~svg_generator();
@@ -57,18 +52,9 @@ namespace mapnik { namespace svg {
         void generate_opening_root(root_output_attributes const& root_attributes);
         void generate_closing_root();
         void generate_rect(rect_output_attributes const& rect_attributes);
-        template <typename PathType>
-        void generate_path(PathType const& path, path_output_attributes const& path_attributes)
-        {
-            util::svg_generator<OutputIterator,PathType> svg_path_grammer;
-            karma::generate(output_iterator_, lit("<path ") << svg_path_grammer, path);
-            path_attributes_grammar attributes_grammar;
-            path_dash_array_grammar dash_array_grammar;
-            karma::generate(output_iterator_, lit(" ") << dash_array_grammar, path_attributes.stroke_dasharray());
-            karma::generate(output_iterator_, lit(" ") << attributes_grammar << lit("/>\n"), path_attributes);
-        }
-
-    private:
+        void generate_opening_group(mapnik::value_integer val);
+        void generate_opening_group(std::string const& val);
+        void generate_closing_group();
         OutputIterator& output_iterator_;
     };
     }}
diff --git a/include/mapnik/svg/output/svg_output_attributes.hpp b/include/mapnik/svg/output/svg_output_attributes.hpp
index d56507d..8bdf6a3 100644
--- a/include/mapnik/svg/output/svg_output_attributes.hpp
+++ b/include/mapnik/svg/output/svg_output_attributes.hpp
@@ -25,7 +25,8 @@
 
 // mapnik
 #include <mapnik/color.hpp>
-#include <mapnik/stroke.hpp>
+#include <mapnik/symbolizer_base.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
 
 // stl
 #include <string>
diff --git a/include/mapnik/svg/output/svg_output_grammars.hpp b/include/mapnik/svg/output/svg_output_grammars.hpp
index 0bafa65..428a9f7 100644
--- a/include/mapnik/svg/output/svg_output_grammars.hpp
+++ b/include/mapnik/svg/output/svg_output_grammars.hpp
@@ -24,25 +24,26 @@
 #define SVG_OUTPUT_GRAMMARS_HPP
 
 // mapnik
-#include <mapnik/stroke.hpp>
+#include <mapnik/config.hpp>
+#include <mapnik/symbolizer_base.hpp>
+
+#include <vector>
 
 // fwd declare
 namespace mapnik { namespace svg {
-  struct path_output_attributes;
-  struct rect_output_attributes;
-  struct root_output_attributes;
-} }
+    struct path_output_attributes;
+    struct rect_output_attributes;
+    struct root_output_attributes;
+}}
 
 // boost
-#include <boost/spirit/include/karma.hpp>
-#include <boost/spirit/include/karma_omit.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/repository/include/karma_confix.hpp>
-#include <boost/spirit/include/phoenix_function.hpp>
-#include <boost/spirit/include/phoenix_bind.hpp>
-#include <boost/fusion/include/std_pair.hpp>
-#include <boost/fusion/include/struct.hpp>
-#include <boost/fusion/include/boost_tuple.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/karma_nonterminal.hpp>
+#include <boost/spirit/include/karma_rule.hpp>
+#include <boost/fusion/adapted/struct.hpp>
+#pragma GCC diagnostic pop
 
 /*!
  * mapnik::svg::path_output_attributes is adapted as a fusion sequence
@@ -61,7 +62,7 @@ BOOST_FUSION_ADAPT_STRUCT(
     (std::string, stroke_linecap_)
     (std::string, stroke_linejoin_)
     (double, stroke_dashoffset_)
-    )
+    );
 
 /*!
  * mapnik::svg::rect_output_attributes is adapted as a fusion sequence
@@ -74,7 +75,7 @@ BOOST_FUSION_ADAPT_STRUCT(
     (unsigned, width_)
     (unsigned, height_)
     (std::string, fill_color_)
-    )
+    );
 
 /*!
  * mapnik::svg::root_output_attributes is adapted as a fusion sequence
@@ -86,95 +87,38 @@ BOOST_FUSION_ADAPT_STRUCT(
     (unsigned, height_)
     (double, svg_version_)
     (std::string, svg_namespace_url_)
-    )
+    );
 
 namespace mapnik { namespace svg {
 
     using namespace boost::spirit;
-    using namespace boost::phoenix;
 
 
 template <typename OutputIterator>
 struct svg_path_attributes_grammar : karma::grammar<OutputIterator, mapnik::svg::path_output_attributes()>
 {
-    explicit svg_path_attributes_grammar()
-        : svg_path_attributes_grammar::base_type(svg_path_attributes)
-    {
-        using karma::double_;
-        using karma::string;
-        using repository::confix;
-
-        svg_path_attributes =
-            lit("fill=") << confix('"', '"')[string]
-                         << lit(" fill-opacity=") << confix('"', '"')[double_]
-                         << lit(" stroke=") << confix('"', '"')[string]
-                         << lit(" stroke-opacity=") << confix('"', '"')[double_]
-                         << lit(" stroke-width=") << confix('"', '"')[double_ << lit("px")]
-                         << lit(" stroke-linecap=") << confix('"', '"')[string]
-                         << lit(" stroke-linejoin=") << confix('"', '"')[string]
-                         << lit(" stroke-dashoffset=") << confix('"', '"')[double_ << lit("px")];
-    }
-
+    explicit svg_path_attributes_grammar();
     karma::rule<OutputIterator, mapnik::svg::path_output_attributes()> svg_path_attributes;
 };
 
 template <typename OutputIterator>
 struct svg_path_dash_array_grammar : karma::grammar<OutputIterator, mapnik::dash_array()>
 {
-    explicit svg_path_dash_array_grammar()
-        : svg_path_dash_array_grammar::base_type(svg_path_dash_array)
-    {
-        using karma::double_;
-        using repository::confix;
-
-        svg_path_dash_array =
-            lit("stroke-dasharray=")
-            << confix('"', '"')[
-                -((double_ << lit(',') << double_) % lit(','))];
-    }
-
+    explicit svg_path_dash_array_grammar();
     karma::rule<OutputIterator, mapnik::dash_array()> svg_path_dash_array;
 };
 
 template <typename OutputIterator>
 struct svg_rect_attributes_grammar : karma::grammar<OutputIterator, mapnik::svg::rect_output_attributes()>
 {
-    explicit svg_rect_attributes_grammar()
-        : svg_rect_attributes_grammar::base_type(svg_rect_attributes)
-    {
-        using karma::int_;
-        using karma::string;
-        using repository::confix;
-
-        svg_rect_attributes =
-            lit("x=") << confix('"', '"')[int_]
-                      << lit(" y=") << confix('"', '"')[int_]
-                      << lit(" width=") << confix('"', '"')[int_ << lit("px")]
-                      << lit(" height=") << confix('"', '"')[int_ << lit("px")]
-                      << lit(" fill=") << confix('"', '"')[string];
-    }
-
+    explicit svg_rect_attributes_grammar();
     karma::rule<OutputIterator, mapnik::svg::rect_output_attributes()> svg_rect_attributes;
 };
 
 template <typename OutputIterator>
 struct svg_root_attributes_grammar : karma::grammar<OutputIterator, mapnik::svg::root_output_attributes()>
 {
-    explicit svg_root_attributes_grammar()
-        : svg_root_attributes_grammar::base_type(svg_root_attributes)
-    {
-        using karma::int_;
-        using karma::string;
-        using karma::double_;
-        using repository::confix;
-
-        svg_root_attributes =
-            lit("width=") << confix('"', '"')[int_ << lit("px")]
-                          << lit(" height=") << confix('"', '"')[int_ << lit("px")]
-                          << " version=" << confix('"', '"')[double_]
-                          << " xmlns=" << confix('"', '"')[string];
-    }
-
+    explicit svg_root_attributes_grammar();
     karma::rule<OutputIterator, mapnik::svg::root_output_attributes()> svg_root_attributes;
 };
 }
diff --git a/include/mapnik/svg/output/svg_output_grammars_impl.hpp b/include/mapnik/svg/output/svg_output_grammars_impl.hpp
new file mode 100644
index 0000000..892fdf9
--- /dev/null
+++ b/include/mapnik/svg/output/svg_output_grammars_impl.hpp
@@ -0,0 +1,109 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// NOTE: This is an implementation header file and is only meant to be included
+//    from implementation files. It therefore doesn't have an include guard.
+
+// mapnik
+#include <mapnik/svg/output/svg_output_grammars.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/karma.hpp>
+#include <boost/fusion/include/std_pair.hpp>
+#pragma GCC diagnostic pop
+
+namespace mapnik { namespace svg {
+
+using namespace boost::spirit;
+
+template <typename OutputIterator>
+svg_path_attributes_grammar<OutputIterator>::svg_path_attributes_grammar()
+        : svg_path_attributes_grammar::base_type(svg_path_attributes)
+{
+    karma::lit_type lit;
+    karma::double_type double_;
+    karma::string_type kstring;
+
+    svg_path_attributes =
+        lit("fill=\"")
+        << kstring
+        << lit("\" fill-opacity=\"") << double_
+        << lit("\" stroke=\"") << kstring
+        << lit("\" stroke-opacity=\"") << double_
+        << lit("\" stroke-width=\"") << double_ << lit("px")
+        << lit("\" stroke-linecap=\"") << kstring
+        << lit("\" stroke-linejoin=\"") << kstring
+        << lit("\" stroke-dashoffset=\"") << double_ << lit("px") << lit('"');
+}
+
+template <typename OutputIterator>
+svg_path_dash_array_grammar<OutputIterator>::svg_path_dash_array_grammar()
+        : svg_path_dash_array_grammar::base_type(svg_path_dash_array)
+{
+    karma::double_type double_;
+    karma::lit_type lit;
+
+    svg_path_dash_array = lit("stroke-dasharray=\"") <<
+            -((double_ << lit(',') << double_) % lit(',')) << lit('"');
+}
+
+template <typename OutputIterator>
+svg_rect_attributes_grammar<OutputIterator>::svg_rect_attributes_grammar()
+    : svg_rect_attributes_grammar::base_type(svg_rect_attributes)
+{
+    karma::lit_type lit;
+    karma::int_type int_;
+    karma::string_type kstring;
+
+    svg_rect_attributes =
+        lit("x=\"")
+        << int_
+        << lit("\" y=\"") << int_
+        << lit("\" width=\"") << int_ << lit("px")
+        << lit("\" height=\"") << int_ << lit("px")
+        << lit("\" fill=\"") << kstring << lit('"');
+}
+
+template <typename OutputIterator>
+svg_root_attributes_grammar<OutputIterator>::svg_root_attributes_grammar()
+        : svg_root_attributes_grammar::base_type(svg_root_attributes)
+{
+    karma::lit_type lit;
+    karma::int_type int_;
+    karma::string_type kstring;
+    karma::double_type double_;
+
+    svg_root_attributes =
+        lit("width=\"")
+        << int_
+        << lit("px")
+        << lit("\" height=\"") << int_ << lit("px")
+        << lit("\" version=\"") << double_
+        << lit("\" xmlns=\"") << kstring
+        << lit("\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"");
+}
+
+}
+}
diff --git a/include/mapnik/svg/output/svg_path_iterator.hpp b/include/mapnik/svg/output/svg_path_iterator.hpp
index c58c2ef..73886ac 100644
--- a/include/mapnik/svg/output/svg_path_iterator.hpp
+++ b/include/mapnik/svg/output/svg_path_iterator.hpp
@@ -25,13 +25,11 @@
 
 // mapnik
 #include <mapnik/geometry.hpp>
-#include <mapnik/ctrans.hpp>
-
+#include <mapnik/view_transform.hpp>
+#include <mapnik/transform_path_adapter.hpp>
 // boost
 #include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include <memory>
 
 namespace mapnik {
 namespace svg {
@@ -60,9 +58,9 @@ class path_iterator
                                      boost::forward_traversal_tag>
 {
 public:
-    typedef Value value_type;
-    typedef Container container_type;
-    //typedef typename Container::value_type value_component_type;
+    using value_type = Value;
+    using container_type = Container;
+    //using value_component_type = typename Container::value_type;
 
     /*!
      * @brief Constructor that initializes the reference to the current element to null.
@@ -74,7 +72,7 @@ public:
     path_iterator(Container const& path)
         : path_iterator::iterator_adaptor_(0),
           path_(path),
-          first_value_(boost::make_shared<Value>(0,0,0))
+          first_value_(std::make_shared<Value>(0,0,0))
     {}
 
     /*!
@@ -91,7 +89,7 @@ public:
     explicit path_iterator(Value* first_element, Container const& path)
         : path_iterator::iterator_adaptor_(first_element),
           path_(path),
-          first_value_(boost::make_shared<Value>(0,0,0))
+          first_value_(std::make_shared<Value>(0,0,0))
     {
         this->increment();
     }
@@ -165,16 +163,15 @@ private:
     }
 
     Container const& path_;
-    boost::shared_ptr<Value> first_value_;
+    std::shared_ptr<Value> first_value_;
 };
 
-/*!
- * @brief Specialization of geometry_iterator, as needed by mapnik::svg::svg_path_data_grammar.
- * The Value type is a boost::tuple that holds 5 elements, the command and the x and y coordinate.
- * Each coordinate is stored twice to match the needs of the grammar.
- */
-//typedef path_iterator<boost::tuple<unsigned, geometry_type::coord_type, geometry_type::value_type>,
-//                      coord_transform<CoordTransform, geometry_type> > path_iterator_type;
+
+// Specialization of geometry_iterator, as needed by mapnik::svg::svg_path_data_grammar.
+// The Value type is a std::tuple that holds 5 elements, the command and the x and y coordinate.
+// Each coordinate is stored twice to match the needs of the grammar.
+//using path_iterator_type = path_iterator<std::tuple<unsigned, geometry_type::coord_type, geometry_type::value_type>,
+//                      transform_path_adapter<view_transform, geometry_type> >;
 
 }}
 
diff --git a/include/mapnik/svg/output/svg_renderer.hpp b/include/mapnik/svg/output/svg_renderer.hpp
index 0dbbfd3..1784d42 100644
--- a/include/mapnik/svg/output/svg_renderer.hpp
+++ b/include/mapnik/svg/output/svg_renderer.hpp
@@ -26,21 +26,19 @@
 // mapnik
 #include <mapnik/config.hpp>
 #include <mapnik/feature_style_processor.hpp>
-#include <mapnik/font_engine_freetype.hpp>
 #include <mapnik/svg/output/svg_generator.hpp>
 #include <mapnik/svg/output/svg_output_attributes.hpp>
 #include <mapnik/noncopyable.hpp>
 #include <mapnik/rule.hpp>              // for rule, symbolizers
 #include <mapnik/box2d.hpp>     // for box2d
 #include <mapnik/color.hpp>     // for color
-#include <mapnik/ctrans.hpp>    // for CoordTransform
+#include <mapnik/view_transform.hpp>    // for view_transform
 #include <mapnik/image_compositing.hpp>  // for composite_mode_e
 #include <mapnik/pixel_position.hpp>
-
-// boost
-#include <boost/variant/static_visitor.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
+#include <mapnik/request.hpp>
+#include <mapnik/renderer_common.hpp>
+#include <mapnik/util/variant.hpp>
+#include <memory>
 
 // stl
 #include <string>
@@ -69,65 +67,73 @@ class MAPNIK_DECL svg_renderer : public feature_style_processor<svg_renderer<Out
                                  private mapnik::noncopyable
 {
 public:
-    typedef svg_renderer<OutputIterator> processor_impl_type;
-    svg_renderer(Map const& m, OutputIterator& output_iterator, unsigned offset_x=0, unsigned offset_y=0);
+    using processor_impl_type = svg_renderer<OutputIterator>;
+    svg_renderer(Map const& m, OutputIterator& output_iterator, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
+    svg_renderer(Map const& m, request const& req, attributes const& vars, OutputIterator& output_iterator, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0);
     ~svg_renderer();
 
     void start_map_processing(Map const& map);
     void end_map_processing(Map const& map);
     void start_layer_processing(layer const& lay, box2d<double> const& query_extent);
     void end_layer_processing(layer const& lay);
-    void start_style_processing(feature_type_style const& st) {}
-    void end_style_processing(feature_type_style const& st) {}
+    void start_style_processing(feature_type_style const& /*st*/) {}
+    void end_style_processing(feature_type_style const& /*st*/) {}
 
     /*!
      * @brief Overloads that process each kind of symbolizer individually.
      */
-    void process(point_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
     void process(line_symbolizer const& sym,
                  mapnik::feature_impl & feature,
                  proj_transform const& prj_trans);
-    void process(line_pattern_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
     void process(polygon_symbolizer const& sym,
                  mapnik::feature_impl & feature,
                  proj_transform const& prj_trans);
-    void process(polygon_pattern_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(raster_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(shield_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(text_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(building_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(markers_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans);
-    void process(debug_symbolizer const& sym,
-                 mapnik::feature_impl & feature,
-                 proj_transform const& prj_trans) {}
-
-    /*!
-     * @brief Overload that process the whole set of symbolizers of a rule.
-     * @return true, meaning that this renderer can process multiple symbolizers.
-     */
+    // unimplemented
+    void process(point_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(line_pattern_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(polygon_pattern_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(raster_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(shield_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(text_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(building_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(markers_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(debug_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+    void process(group_symbolizer const&,
+                 mapnik::feature_impl &,
+                 proj_transform const&) {}
+
+    // Overload that process the whole set of symbolizers of a rule.
+    // return true, meaning that this renderer can process multiple symbolizers.
     bool process(rule::symbolizers const& syms,
                  mapnik::feature_impl & feature,
                  proj_transform const& prj_trans);
 
+    bool painted() const
+    {
+        return painted_;
+    }
+
     void painted(bool painted)
     {
-        // nothing to do
+        painted_ = painted;
     }
 
     inline eAttributeCollectionPolicy attribute_collection_policy() const
@@ -135,6 +141,16 @@ public:
         return DEFAULT;
     }
 
+    inline double scale_factor() const
+    {
+        return common_.scale_factor_;
+    }
+
+    inline attributes const& variables() const
+    {
+        return common_.vars_;
+    }
+
     inline OutputIterator& get_output_iterator()
     {
         return output_iterator_;
@@ -147,39 +163,10 @@ public:
 
 private:
     OutputIterator& output_iterator_;
-    const int width_;
-    const int height_;
-    CoordTransform t_;
-    svg::svg_generator<OutputIterator> generator_;
     svg::path_output_attributes path_attributes_;
-    box2d<double> query_extent_;
+    svg::svg_generator<OutputIterator> generator_;
     bool painted_;
-
-    /*!
-     * @brief Visitor that makes the calls to process each symbolizer when stored in a boost::variant.
-     * This object follows the model of that found in feature_style_processor. It appears here, because
-     * the logic that iterates over the set of symbolizer has been moved to an SVG renderer's internal
-     * method.
-     */
-    struct symbol_dispatch : public boost::static_visitor<>
-    {
-        symbol_dispatch(svg_renderer<OutputIterator>& processor,
-                        mapnik::feature_impl & feature,
-                        proj_transform const& prj_trans)
-            : processor_(processor),
-              feature_(feature),
-              prj_trans_(prj_trans) {}
-
-        template <typename Symbolizer>
-        void operator()(Symbolizer const& sym) const
-        {
-            processor_.process(sym, feature_, prj_trans_);
-        }
-
-        svg_renderer<OutputIterator>& processor_;
-        mapnik::feature_impl & feature_;
-        proj_transform const& prj_trans_;
-    };
+    renderer_common common_;
 };
 }
 
diff --git a/include/mapnik/svg/svg_converter.hpp b/include/mapnik/svg/svg_converter.hpp
index 2ccf9da..6c4fe71 100644
--- a/include/mapnik/svg/svg_converter.hpp
+++ b/include/mapnik/svg/svg_converter.hpp
@@ -50,14 +50,17 @@ public:
 
     svg_converter(VertexSource & source, AttributeSource & attributes)
         : source_(source),
-          attributes_(attributes) {}
+          attributes_(attributes),
+          attr_stack_(),
+          svg_width_(0.0),
+          svg_height_(0.0) {}
 
     void begin_path()
     {
         unsigned idx = source_.start_new_path();
         attributes_.add(path_attributes(cur_attr(), idx));
     }
-    
+
     void end_path()
     {
         if(attributes_.size() == 0)
@@ -245,7 +248,7 @@ public:
     {
         return cur_attr().display_flag;
     }
-    
+
     void stroke_width(double w)
     {
         cur_attr().stroke_width = w;
@@ -354,7 +357,7 @@ private:
 };
 
 
-typedef svg_converter<svg_path_adapter,agg::pod_bvector<mapnik::svg::path_attributes> > svg_converter_type;
+using svg_converter_type = svg_converter<svg_path_adapter,agg::pod_bvector<mapnik::svg::path_attributes> >;
 
 }}
 
diff --git a/include/mapnik/svg/svg_path_adapter.hpp b/include/mapnik/svg/svg_path_adapter.hpp
index 04f24c1..417fe86 100644
--- a/include/mapnik/svg/svg_path_adapter.hpp
+++ b/include/mapnik/svg/svg_path_adapter.hpp
@@ -25,7 +25,7 @@
 
 // mapnik
 #include <mapnik/noncopyable.hpp>
-
+#include <mapnik/box2d.hpp>
 // agg
 #include "agg_math.h"
 #include "agg_array.h"
@@ -43,8 +43,8 @@ using namespace agg;
 template<class VertexContainer> class path_adapter : mapnik::noncopyable
 {
 public:
-    typedef VertexContainer            container_type;
-    typedef path_adapter<VertexContainer> self_type;
+    using container_type = VertexContainer           ;
+    using self_type = path_adapter<VertexContainer>;
 
     //--------------------------------------------------------------------
     path_adapter(VertexContainer & vertices) : vertices_(vertices), iterator_(0) {}
@@ -842,8 +842,8 @@ template<class Container> class vertex_stl_adapter : mapnik::noncopyable
 {
 public:
 
-    typedef typename Container::value_type vertex_type;
-    typedef typename vertex_type::value_type value_type;
+    using vertex_type = typename Container::value_type;
+    using value_type = typename vertex_type::value_type;
 
     explicit vertex_stl_adapter(Container & vertices)
         : vertices_(vertices) {}
@@ -919,7 +919,7 @@ public:
         return vertices_.size() ? vertices_[vertices_.size() - 1].y : 0.0;
     }
 
-    unsigned total_vertices() const
+    std::size_t total_vertices() const
     {
         return vertices_.size();
     }
@@ -942,9 +942,9 @@ private:
 };
 
 
-typedef std::vector<vertex_d> svg_path_storage;
+using svg_path_storage = std::vector<vertex_d>;
 
-typedef path_adapter<vertex_stl_adapter<svg_path_storage> > svg_path_adapter;
+using svg_path_adapter = path_adapter<vertex_stl_adapter<svg_path_storage> >;
 
 }}
 
diff --git a/include/mapnik/svg/svg_path_attributes.hpp b/include/mapnik/svg/svg_path_attributes.hpp
index 3a09e8e..831fd1f 100644
--- a/include/mapnik/svg/svg_path_attributes.hpp
+++ b/include/mapnik/svg/svg_path_attributes.hpp
@@ -26,7 +26,6 @@
 // agg
 #include "agg_math_stroke.h"
 #include "agg_color_rgba.h"
-#include "agg_pixfmt_rgba.h"
 #include "agg_trans_affine.h"
 
 // mapnik
diff --git a/include/mapnik/svg/svg_path_commands.hpp b/include/mapnik/svg/svg_path_commands.hpp
index e45b5b1..23df6ee 100644
--- a/include/mapnik/svg/svg_path_commands.hpp
+++ b/include/mapnik/svg/svg_path_commands.hpp
@@ -27,11 +27,14 @@
 #include <mapnik/global.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/phoenix_function.hpp>
 #include <boost/spirit/include/phoenix_core.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
-
+#pragma GCC diagnostic pop
 
 namespace mapnik { namespace svg {
 
@@ -45,10 +48,11 @@ inline double deg2rad(double deg)
 template <typename PathType>
 struct move_to
 {
-    template <typename T0, typename T1>
+
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit move_to(PathType & path)
@@ -66,10 +70,10 @@ struct move_to
 template <typename PathType>
 struct hline_to
 {
-    template <typename T0, typename T1>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit hline_to(PathType & path)
@@ -88,10 +92,10 @@ struct hline_to
 template <typename PathType>
 struct vline_to
 {
-    template <typename T0, typename T1>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit vline_to(PathType & path)
@@ -109,10 +113,10 @@ struct vline_to
 template <typename PathType>
 struct line_to
 {
-    template <typename T0, typename T1>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit line_to(PathType & path)
@@ -131,10 +135,10 @@ struct line_to
 template <typename PathType>
 struct curve4
 {
-    template <typename T0, typename T1, typename T2, typename T3>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit curve4(PathType & path)
@@ -156,10 +160,10 @@ struct curve4
 template <typename PathType>
 struct curve4_smooth
 {
-    template <typename T0, typename T1, typename T2>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit curve4_smooth(PathType & path)
@@ -178,10 +182,10 @@ struct curve4_smooth
 template <typename PathType>
 struct curve3
 {
-    template <typename T0, typename T1, typename T2>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit curve3(PathType & path)
@@ -201,10 +205,10 @@ struct curve3
 template <typename PathType>
 struct curve3_smooth
 {
-    template <typename T0, typename T1>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit curve3_smooth(PathType & path)
@@ -223,10 +227,10 @@ struct curve3_smooth
 template <typename PathType>
 struct arc_to
 {
-    template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
+    template <typename T0>
     struct result
     {
-        typedef void type;
+        using type = void;
     };
 
     explicit arc_to(PathType & path)
@@ -247,7 +251,7 @@ struct arc_to
 template <typename PathType>
 struct close
 {
-    typedef void result_type;
+    using result_type = void;
 
     explicit close(PathType & path)
         : path_(path) {}
diff --git a/include/mapnik/svg/svg_path_grammar.hpp b/include/mapnik/svg/svg_path_grammar.hpp
index 851a501..74c9358 100644
--- a/include/mapnik/svg/svg_path_grammar.hpp
+++ b/include/mapnik/svg/svg_path_grammar.hpp
@@ -53,16 +53,16 @@ namespace mapnik { namespace svg {
               arc_to_(arc_to<PathType>(path)),
               close_(close<PathType>(path))
         {
-            using qi::_1;
-            using qi::_2;
-            using qi::_3;
-            using qi::_4;
-            using qi::_5;
-            using qi::_a;
-            using qi::lit;
-            using qi::double_;
-            using qi::int_;
-            using qi::no_case;
+            qi::_1_type _1;
+            qi::_2_type _2;
+            qi::_3_type _3;
+            qi::_4_type _4;
+            qi::_5_type _5;
+            qi::_a_type _a;
+            qi::lit_type lit;
+            qi::double_type double_;
+            qi::int_type int_;
+            qi::no_case_type no_case;
 
             start = +cmd;
             cmd = M  >> *drawto_cmd;
diff --git a/include/mapnik/svg/svg_path_parser.hpp b/include/mapnik/svg/svg_path_parser.hpp
index a738ce9..46539ee 100644
--- a/include/mapnik/svg/svg_path_parser.hpp
+++ b/include/mapnik/svg/svg_path_parser.hpp
@@ -35,11 +35,8 @@ namespace mapnik { namespace svg {
     bool parse_points(const char * wkt, PathType & p);
 
     template <typename TransformType>
-    bool MAPNIK_DECL parse_transform(const char * wkt, TransformType & tr);
+    bool MAPNIK_DECL parse_svg_transform(const char * wkt, TransformType & tr);
 
-//template <typename TransformType>
-//bool MAPNIK_DECL parse_transform(std::string const&  wkt, TransformType & tr);
-
-    }}
+}}
 
 #endif // MAPNIK_SVG_PATH_PARSER_HPP
diff --git a/include/mapnik/svg/svg_points_grammar.hpp b/include/mapnik/svg/svg_points_grammar.hpp
index 9fe061e..ffc4129 100644
--- a/include/mapnik/svg/svg_points_grammar.hpp
+++ b/include/mapnik/svg/svg_points_grammar.hpp
@@ -45,9 +45,9 @@ namespace mapnik { namespace svg {
               line_to_(line_to<PathType>(path)),
               close_(close<PathType>(path))
         {
-            using qi::_1;
-            using qi::_2;
-            using qi::double_;
+            qi::_1_type _1;
+            qi::lit_type lit;
+            qi::double_type double_;
 
             start = coord[move_to_(_1,false)] // move_to
                 >> *(-lit(',') >> coord [ line_to_(_1,false) ] ); // *line_to
diff --git a/include/mapnik/svg/svg_renderer_agg.hpp b/include/mapnik/svg/svg_renderer_agg.hpp
index 778e726..90ff20a 100644
--- a/include/mapnik/svg/svg_renderer_agg.hpp
+++ b/include/mapnik/svg/svg_renderer_agg.hpp
@@ -27,11 +27,11 @@
 #include <mapnik/svg/svg_path_attributes.hpp>
 #include <mapnik/gradient.hpp>
 #include <mapnik/box2d.hpp>
-#include <mapnik/grid/grid_pixel.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/foreach.hpp>
+#if defined(GRID_RENDERER)
+#include <mapnik/grid/grid_pixel.hpp>
+#endif
 
 // agg
 #include "agg_path_storage.h"
@@ -52,7 +52,6 @@
 #include "agg_gradient_lut.h"
 #include "agg_gamma_lut.h"
 #include "agg_span_interpolator_linear.h"
-#include "agg_pixfmt_rgba.h"
 
 namespace mapnik  {
 namespace svg {
@@ -102,12 +101,14 @@ template <typename VertexSource, typename AttributeSource, typename ScanlineRend
 class svg_renderer_agg : mapnik::noncopyable
 {
 public:
-    typedef agg::conv_curve<VertexSource>            curved_type;
-    typedef agg::conv_stroke<curved_type>            curved_stroked_type;
-    typedef agg::conv_transform<curved_stroked_type> curved_stroked_trans_type;
-    typedef agg::conv_transform<curved_type>         curved_trans_type;
-    typedef agg::conv_contour<curved_trans_type>     curved_trans_contour_type;
-    typedef agg::renderer_base<PixelFormat>          renderer_base;
+    using curved_type = agg::conv_curve<VertexSource>           ;
+    using curved_stroked_type = agg::conv_stroke<curved_type>           ;
+    using curved_stroked_trans_type = agg::conv_transform<curved_stroked_type>;
+    using curved_trans_type = agg::conv_transform<curved_type>        ;
+    using curved_trans_contour_type = agg::conv_contour<curved_trans_type>    ;
+    using renderer_base = agg::renderer_base<PixelFormat>         ;
+    using vertex_source_type = VertexSource                            ;
+    using attribute_source_type = AttributeSource                         ;
 
     svg_renderer_agg(VertexSource & source, AttributeSource const& attributes)
         : source_(source),
@@ -119,16 +120,17 @@ public:
     void render_gradient(Rasterizer& ras,
                          Scanline& sl,
                          Renderer& ren,
-                         const gradient &grad,
+                         gradient const& grad,
                          agg::trans_affine const& mtx,
                          double opacity,
-                         const box2d<double> &symbol_bbox,
-                         const box2d<double> &path_bbox)
+                         box2d<double> const& symbol_bbox,
+                         curved_trans_type & curved_trans,
+                         unsigned path_id)
     {
-        typedef agg::gamma_lut<agg::int8u, agg::int8u> gamma_lut_type;
-        typedef agg::gradient_lut<agg::color_interpolator<agg::rgba8>, 1024> color_func_type;
-        typedef agg::span_interpolator_linear<> interpolator_type;
-        typedef agg::span_allocator<agg::rgba8> span_allocator_type;
+        using gamma_lut_type = agg::gamma_lut<agg::int8u, agg::int8u>;
+        using color_func_type = agg::gradient_lut<agg::color_interpolator<agg::rgba8>, 1024>;
+        using interpolator_type = agg::span_interpolator_linear<>;
+        using span_allocator_type = agg::span_allocator<agg::rgba8>;
 
         span_allocator_type             m_alloc;
         color_func_type                 m_gradient_lut;
@@ -138,7 +140,7 @@ public:
         grad.get_control_points(x1,y1,x2,y2,radius);
 
         m_gradient_lut.remove_all();
-        BOOST_FOREACH ( mapnik::stop_pair const& st, grad.get_stop_array() )
+        for ( mapnik::stop_pair const& st : grad.get_stop_array() )
         {
             mapnik::color const& stop_color = st.second;
             unsigned r = stop_color.red();
@@ -147,91 +149,87 @@ public:
             unsigned a = stop_color.alpha();
             m_gradient_lut.add_color(st.first, agg::rgba8_pre(r, g, b, int(a * opacity)));
         }
-        m_gradient_lut.build_lut();
-
-        agg::trans_affine transform = mtx;
-        transform.invert();
-        agg::trans_affine tr;
-        tr = grad.get_transform();
-        tr.invert();
-        transform *= tr;
-
-        if (grad.get_units() != USER_SPACE_ON_USE)
+        if (m_gradient_lut.build_lut())
         {
-            double bx1=symbol_bbox.minx();
-            double by1=symbol_bbox.miny();
-            double bx2=symbol_bbox.maxx();
-            double by2=symbol_bbox.maxy();
-
-            if (grad.get_units() == OBJECT_BOUNDING_BOX)
+            agg::trans_affine transform = mtx;
+            transform.invert();
+            agg::trans_affine tr;
+            tr = grad.get_transform();
+            tr.invert();
+            transform *= tr;
+
+            if (grad.get_units() != USER_SPACE_ON_USE)
             {
-                bx1=path_bbox.minx();
-                by1=path_bbox.miny();
-                bx2=path_bbox.maxx();
-                by2=path_bbox.maxy();
-            }
+                double bx1=symbol_bbox.minx();
+                double by1=symbol_bbox.miny();
+                double bx2=symbol_bbox.maxx();
+                double by2=symbol_bbox.maxy();
 
-            transform.translate(-bx1,-by1);
-            transform.scale(1.0/(bx2-bx1),1.0/(by2-by1));
-        }
+                if (grad.get_units() == OBJECT_BOUNDING_BOX)
+                {
+                    bounding_rect_single(curved_trans, path_id, &bx1, &by1, &bx2, &by2);
+                }
 
+                transform.translate(-bx1,-by1);
+                transform.scale(1.0/(bx2-bx1),1.0/(by2-by1));
+            }
 
-        if (grad.get_gradient_type() == RADIAL)
-        {
-            typedef agg::gradient_radial_focus gradient_adaptor_type;
-            typedef agg::span_gradient<agg::rgba8,
-                interpolator_type,
-                gradient_adaptor_type,
-                color_func_type> span_gradient_type;
-
-            // the agg radial gradient assumes it is centred on 0
-            transform.translate(-x2,-y2);
-
-            // scale everything up since agg turns things into integers a bit too soon
-            int scaleup=255;
-            radius*=scaleup;
-            x1*=scaleup;
-            y1*=scaleup;
-            x2*=scaleup;
-            y2*=scaleup;
-
-            transform.scale(scaleup,scaleup);
-            interpolator_type     span_interpolator(transform);
-            gradient_adaptor_type gradient_adaptor(radius,(x1-x2),(y1-y2));
-
-            span_gradient_type    span_gradient(span_interpolator,
-                                                gradient_adaptor,
-                                                m_gradient_lut,
-                                                0, radius);
-
-            render_scanlines_aa(ras, sl, ren, m_alloc, span_gradient);
-        }
-        else
-        {
-            typedef linear_gradient_from_segment gradient_adaptor_type;
-            typedef agg::span_gradient<agg::rgba8,
-                interpolator_type,
-                gradient_adaptor_type,
-                color_func_type> span_gradient_type;
-
-            // scale everything up since agg turns things into integers a bit too soon
-            int scaleup=255;
-            x1*=scaleup;
-            y1*=scaleup;
-            x2*=scaleup;
-            y2*=scaleup;
-
-            transform.scale(scaleup,scaleup);
-
-            interpolator_type     span_interpolator(transform);
-            gradient_adaptor_type gradient_adaptor(x1,y1,x2,y2);
-
-            span_gradient_type    span_gradient(span_interpolator,
-                                                gradient_adaptor,
-                                                m_gradient_lut,
-                                                0, scaleup);
-
-            render_scanlines_aa(ras, sl, ren, m_alloc, span_gradient);
+            if (grad.get_gradient_type() == RADIAL)
+            {
+                using gradient_adaptor_type = agg::gradient_radial_focus;
+                using span_gradient_type = agg::span_gradient<agg::rgba8,
+                                                              interpolator_type,
+                                                              gradient_adaptor_type,
+                                                              color_func_type>;
+
+                // the agg radial gradient assumes it is centred on 0
+                transform.translate(-x2,-y2);
+
+                // scale everything up since agg turns things into integers a bit too soon
+                int scaleup=255;
+                radius*=scaleup;
+                x1*=scaleup;
+                y1*=scaleup;
+                x2*=scaleup;
+                y2*=scaleup;
+
+                transform.scale(scaleup,scaleup);
+                interpolator_type     span_interpolator(transform);
+                gradient_adaptor_type gradient_adaptor(radius,(x1-x2),(y1-y2));
+
+                span_gradient_type    span_gradient(span_interpolator,
+                                                    gradient_adaptor,
+                                                    m_gradient_lut,
+                                                    0, radius);
+
+                render_scanlines_aa(ras, sl, ren, m_alloc, span_gradient);
+            }
+            else
+            {
+                using gradient_adaptor_type = linear_gradient_from_segment;
+                using span_gradient_type = agg::span_gradient<agg::rgba8,
+                                                              interpolator_type,
+                                                              gradient_adaptor_type,
+                                                              color_func_type>;
+                // scale everything up since agg turns things into integers a bit too soon
+                int scaleup=255;
+                x1*=scaleup;
+                y1*=scaleup;
+                x2*=scaleup;
+                y2*=scaleup;
+
+                transform.scale(scaleup,scaleup);
+
+                interpolator_type     span_interpolator(transform);
+                gradient_adaptor_type gradient_adaptor(x1,y1,x2,y2);
+
+                span_gradient_type    span_gradient(span_interpolator,
+                                                    gradient_adaptor,
+                                                    m_gradient_lut,
+                                                    0, scaleup);
+
+                render_scanlines_aa(ras, sl, ren, m_alloc, span_gradient);
+            }
         }
     }
 
@@ -261,10 +259,6 @@ public:
 
             transform = attr.transform;
 
-            double bx1,by1,bx2,by2;
-            bounding_rect_single(curved_trans, attr.index, &bx1, &by1, &bx2, &by2);
-            box2d<double> path_bbox(bx1,by1,bx2,by2);
-
             transform *= mtx;
             double scl = transform.scale();
             //curved_.approximation_method(curve_inc);
@@ -290,7 +284,7 @@ public:
 
                 if(attr.fill_gradient.get_gradient_type() != NO_GRADIENT)
                 {
-                    render_gradient(ras, sl, ren, attr.fill_gradient, transform, attr.fill_opacity * attr.opacity * opacity, symbol_bbox, path_bbox);
+                    render_gradient(ras, sl, ren, attr.fill_gradient, transform, attr.fill_opacity * attr.opacity * opacity, symbol_bbox, curved_trans, attr.index);
                 }
                 else
                 {
@@ -326,7 +320,7 @@ public:
 
                 if(attr.stroke_gradient.get_gradient_type() != NO_GRADIENT)
                 {
-                    render_gradient(ras, sl, ren, attr.stroke_gradient, transform, attr.stroke_opacity * attr.opacity * opacity, symbol_bbox, path_bbox);
+                    render_gradient(ras, sl, ren, attr.stroke_gradient, transform, attr.stroke_opacity * attr.opacity * opacity, symbol_bbox, curved_trans, attr.index);
                 }
                 else
                 {
@@ -342,14 +336,15 @@ public:
         }
     }
 
+#if defined(GRID_RENDERER)
     template <typename Rasterizer, typename Scanline, typename Renderer>
     void render_id(Rasterizer& ras,
                    Scanline& sl,
                    Renderer& ren,
                    int feature_id,
                    agg::trans_affine const& mtx,
-                   double opacity,
-                   const box2d<double> &symbol_bbox)
+                   double /*opacity*/,
+                   box2d<double> const& /*symbol_bbox*/)
 
     {
         using namespace agg;
@@ -369,10 +364,6 @@ public:
 
             transform = attr.transform;
 
-            double bx1,by1,bx2,by2;
-            bounding_rect_single(curved_trans, attr.index, &bx1, &by1, &bx2, &by2);
-            box2d<double> path_bbox(bx1,by1,bx2,by2);
-
             transform *= mtx;
             double scl = transform.scale();
             //curved_.approximation_method(curve_inc);
@@ -428,12 +419,15 @@ public:
             }
         }
     }
+#endif
 
+    inline VertexSource & source() const { return source_;}
+    inline AttributeSource const& attributes() const { return attributes_;}
 private:
 
-    VertexSource &  source_;
-    curved_type          curved_;
-    curved_stroked_type  curved_stroked_;
+    VertexSource &         source_;
+    curved_type            curved_;
+    curved_stroked_type    curved_stroked_;
     AttributeSource const& attributes_;
 };
 
diff --git a/include/mapnik/svg/svg_transform_grammar.hpp b/include/mapnik/svg/svg_transform_grammar.hpp
index 087bab3..5b0f495 100644
--- a/include/mapnik/svg/svg_transform_grammar.hpp
+++ b/include/mapnik/svg/svg_transform_grammar.hpp
@@ -29,12 +29,16 @@
 // agg
 #include <agg_trans_affine.h>
 
-// spirit
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/phoenix_function.hpp>
 #include <boost/spirit/include/phoenix_core.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
 #include <boost/spirit/include/phoenix_object.hpp>
+#pragma GCC diagnostic pop
 
 namespace mapnik { namespace svg {
 
@@ -50,10 +54,10 @@ namespace mapnik { namespace svg {
     template <typename TransformType>
     struct process_matrix
     {
-        template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
+        template <typename T0>
         struct result
         {
-            typedef void type;
+            using type = void;
         };
 
         explicit process_matrix( TransformType & tr)
@@ -70,10 +74,10 @@ namespace mapnik { namespace svg {
     template <typename TransformType>
     struct process_rotate
     {
-        template <typename T0, typename T1, typename T2>
+        template <typename T0>
         struct result
         {
-            typedef void type;
+            using type = void;
         };
 
         explicit process_rotate( TransformType & tr)
@@ -101,10 +105,10 @@ namespace mapnik { namespace svg {
     template <typename TransformType>
     struct process_translate
     {
-        template <typename T0, typename T1>
+        template <typename T0>
         struct result
         {
-            typedef void type;
+            using type = void;
         };
 
         explicit process_translate( TransformType & tr)
@@ -123,10 +127,10 @@ namespace mapnik { namespace svg {
     template <typename TransformType>
     struct process_scale
     {
-        template <typename T0, typename T1>
+        template <typename T0>
         struct result
         {
-            typedef void type;
+            using type = void;
         };
 
         explicit process_scale( TransformType & tr)
@@ -146,10 +150,10 @@ namespace mapnik { namespace svg {
     template <typename TransformType>
     struct process_skew
     {
-        template <typename T0, typename T1>
+        template <typename T0>
         struct result
         {
-            typedef void type;
+            using type = void;
         };
 
         explicit process_skew( TransformType & tr)
@@ -187,18 +191,18 @@ namespace mapnik { namespace svg {
               scale_action(process_scale<TransformType>(tr)),
               skew_action(process_skew<TransformType>(tr))
         {
-            using qi::_1;
-            using qi::_2;
-            using qi::_3;
-            using qi::_4;
-            using qi::_5;
-            using qi::_6;
-            using qi::_a;
-            using qi::_b;
-            using qi::_c;
-            using qi::_val;
-            using qi::double_;
-            using qi::no_case;
+            qi::_1_type _1;
+            qi::_2_type _2;
+            qi::_3_type _3;
+            qi::_4_type _4;
+            qi::_5_type _5;
+            qi::_6_type _6;
+            qi::_a_type _a;
+            qi::_b_type _b;
+            qi::_c_type _c;
+            qi::lit_type lit;
+            qi::double_type double_;
+            qi::no_case_type no_case;
 
             start =  +transform_ ;
 
diff --git a/include/mapnik/symbolizer.hpp b/include/mapnik/symbolizer.hpp
index ce9f9db..a0b4d95 100644
--- a/include/mapnik/symbolizer.hpp
+++ b/include/mapnik/symbolizer.hpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2011 Artem Pavlenko
+ * Copyright (C) 2013 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -25,78 +25,475 @@
 
 // mapnik
 #include <mapnik/config.hpp>
-#include <mapnik/path_expression.hpp>
+#include <mapnik/image_scaling.hpp>
 #include <mapnik/image_compositing.hpp>
 #include <mapnik/simplify.hpp>
-
-// boost
-#include <boost/optional.hpp>
-
+#include <mapnik/enumeration.hpp>
+#include <mapnik/expression.hpp>
+#include <mapnik/expression_evaluator.hpp>
+#include <mapnik/path_expression.hpp>
+#include <mapnik/parse_path.hpp>
+#include <mapnik/color.hpp>
+#include <mapnik/symbolizer_keys.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/symbolizer_base.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/text/font_feature_settings.hpp>
+#include <mapnik/util/dasharray_parser.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/symbolizer_default_values.hpp>
 // stl
+#include <type_traits>
+#include <memory>
 #include <vector>
 #include <string>
+#include <functional>
+#include <map>
+#include <tuple>
 
-namespace agg { struct trans_affine; }
+// boost
+#include <boost/optional.hpp>
 
 namespace mapnik
 {
 
-// fwd declares
-// TODO - move these transform declares to own header
-namespace detail { struct transform_node; }
-typedef std::vector<detail::transform_node>         transform_list;
-typedef boost::shared_ptr<transform_list>   transform_list_ptr;
-typedef transform_list_ptr transform_type;
-class feature_impl;
-
-MAPNIK_DECL void evaluate_transform(agg::trans_affine& tr, feature_impl const& feature,
-                                    transform_type const& trans_expr);
-
-class MAPNIK_DECL symbolizer_base
-{
-public:
-    symbolizer_base();
-    symbolizer_base(symbolizer_base const& other);
-    void set_comp_op(composite_mode_e comp_op);
-    composite_mode_e comp_op() const;
-    void set_transform(transform_type const& );
-    transform_type const& get_transform() const;
-    std::string get_transform_string() const;
-    void set_clip(bool clip);
-    bool clip() const;
-    void set_simplify_algorithm(simplify_algorithm_e algorithm);
-    simplify_algorithm_e simplify_algorithm() const;
-    void set_simplify_tolerance(double simplify_tolerance);
-    double simplify_tolerance() const;
-    void set_smooth(double smooth);
-    double smooth() const;
-private:
-    composite_mode_e comp_op_;
-    transform_type affine_transform_;
-    bool clip_;
-    simplify_algorithm_e simplify_algorithm_value_;
-    double simplify_tolerance_value_;
-    double smooth_value_;
-};
-
-
-class MAPNIK_DECL symbolizer_with_image
-{
-public:
-    path_expression_ptr const& get_filename() const;
-    void set_filename(path_expression_ptr const& filename);
-    void set_opacity(float opacity);
-    float get_opacity() const;
-    void set_image_transform(transform_type const& tr);
-    transform_type const& get_image_transform() const;
-    std::string get_image_transform_string() const;
-protected:
-    symbolizer_with_image(path_expression_ptr filename = path_expression_ptr());
-    symbolizer_with_image(symbolizer_with_image const& rhs);
-    path_expression_ptr image_filename_;
-    float image_opacity_;
-    transform_type image_transform_;
+// symbolizer properties target types
+enum class property_types : std::uint8_t
+{
+    target_bool = 1,
+    target_double,
+    target_integer,
+    target_color,
+    target_comp_op,
+    target_line_cap,
+    target_line_join,
+    target_line_rasterizer,
+    target_halo_rasterizer,
+    target_point_placement,
+    target_pattern_alignment,
+    target_debug_symbolizer_mode,
+    target_marker_placement,
+    target_marker_multi_policy,
+    target_string,
+    target_transform,
+    target_placement,
+    target_dash_array,
+    target_colorizer,
+    target_repeat_key,
+    target_group_symbolizer_properties,
+    target_halo_comp_op,
+    target_simplify_algorithm,
+    target_markers_placement,
+    target_markers_multipolicy,
+    target_gamma_method,
+    target_text_transform,
+    target_horizontal_alignment,
+    target_justify_alignment,
+    target_vertical_alignment,
+    target_upright,
+    target_font_feature_settings
+};
+
+template <typename T>
+struct evaluate_path_wrapper
+{
+    using result_type = T;
+    template <typename T1, typename T2>
+    result_type operator() (T1 const&, T2 const&) const
+    {
+        return result_type();
+    }
+
+};
+
+template <>
+struct evaluate_path_wrapper<std::string>
+{
+    template <typename T1, typename T2>
+    std::string operator() (T1 const& expr, T2 const& feature) const
+    {
+        return mapnik::path_processor_type::evaluate(expr, feature);
+    }
+};
+
+namespace detail {
+
+template <typename T>
+struct enum_traits {};
+
+template <>
+struct enum_traits<composite_mode_e>
+{
+    using result_type = boost::optional<composite_mode_e>;
+    static result_type from_string(std::string const& str)
+    {
+        return comp_op_from_string(str);
+    }
+};
+
+template <>
+struct enum_traits<scaling_method_e>
+{
+    using result_type = boost::optional<scaling_method_e>;
+    static result_type from_string(std::string const& str)
+    {
+        return scaling_method_from_string(str);
+    }
+};
+
+template <>
+struct enum_traits<simplify_algorithm_e>
+{
+    using result_type = boost::optional<simplify_algorithm_e>;
+    static result_type from_string(std::string const& str)
+    {
+        return simplify_algorithm_from_string(str);
+    }
+};
+
+#define ENUM_FROM_STRING( e ) \
+template <> struct enum_traits<e> { \
+    using result_type = boost::optional<e>; \
+    static result_type from_string(std::string const& str) \
+    { \
+        enumeration<e, e ## _MAX> enum_; \
+        try \
+        { \
+            enum_.from_string(str); \
+            return result_type(e(enum_)); \
+        } \
+        catch (...) \
+        { \
+            return result_type(); \
+        } \
+    } \
+};\
+
+ENUM_FROM_STRING( line_cap_enum )
+ENUM_FROM_STRING( line_join_enum )
+ENUM_FROM_STRING( point_placement_enum )
+ENUM_FROM_STRING( line_rasterizer_enum )
+ENUM_FROM_STRING( marker_placement_enum )
+ENUM_FROM_STRING( marker_multi_policy_enum )
+ENUM_FROM_STRING( debug_symbolizer_mode_enum )
+ENUM_FROM_STRING( pattern_alignment_enum )
+ENUM_FROM_STRING( halo_rasterizer_enum )
+ENUM_FROM_STRING( label_placement_enum )
+ENUM_FROM_STRING( vertical_alignment_enum )
+ENUM_FROM_STRING( horizontal_alignment_enum )
+ENUM_FROM_STRING( justify_alignment_enum )
+ENUM_FROM_STRING( text_transform_enum )
+ENUM_FROM_STRING( text_upright_enum )
+ENUM_FROM_STRING( gamma_method_enum )
+
+// enum
+template <typename T, bool is_enum = true>
+struct expression_result
+{
+    using result_type = T;
+    static result_type convert(value_type const& val)
+    {
+        auto result = enum_traits<T>::from_string(val.to_string());
+        if (result) return static_cast<result_type>(*result);
+        return result_type(0);
+    }
+};
+
+template <typename T>
+struct expression_result<T,false>
+{
+    using result_type = T;
+    static result_type convert(value_type const& val)
+    {
+        return val.convert<T>();
+    }
+};
+
+
+// enum
+template <typename T, bool is_enum = true>
+struct enumeration_result
+{
+    using result_type = T;
+    static result_type convert(enumeration_wrapper const& e)
+    {
+        return static_cast<result_type>(e.value);
+    }
+};
+
+template <typename T>
+struct enumeration_result<T,false>
+{
+    using result_type = T;
+    static result_type convert(enumeration_wrapper const&)
+    {
+        return result_type();// FAIL
+    }
+};
+
+// enum
+template <typename T, bool is_enum = true >
+struct put_impl
+{
+    static void apply(symbolizer_base & sym, keys key, T const& val)
+    {
+        auto itr = sym.properties.find(key);
+        if (itr != sym.properties.end())
+        {
+            sym.properties[key] = enumeration_wrapper(val);
+        }
+        else
+        {
+            sym.properties.emplace(key, enumeration_wrapper(val));
+        }
+    }
+};
+
+template <typename T>
+struct put_impl<T, false>
+{
+    static void apply(symbolizer_base & sym, keys key, T const& val)
+    {
+        auto itr = sym.properties.find(key);
+        if (itr != sym.properties.end())
+        {
+            sym.properties[key] = val;
+        }
+        else
+        {
+            sym.properties.emplace(key, val);
+        }
+    }
+};
+
+}
+
+template <typename T>
+struct evaluate_expression_wrapper
+{
+    using result_type = T;
+
+    template <typename T1, typename T2, typename T3>
+    result_type operator() (T1 const& expr, T2 const& feature, T3 const& vars) const
+    {
+        mapnik::value_type result = util::apply_visitor(mapnik::evaluate<T2,mapnik::value_type,T3>(feature,vars), expr);
+        return detail::expression_result<result_type, std::is_enum<result_type>::value>::convert(result);
+    }
+};
+
+// mapnik::color
+template <>
+struct evaluate_expression_wrapper<mapnik::color>
+{
+    template <typename T1, typename T2, typename T3>
+    mapnik::color operator() (T1 const& expr, T2 const& feature, T3 const& vars) const
+    {
+        mapnik::value_type val = util::apply_visitor(mapnik::evaluate<T2,mapnik::value_type,T3>(feature,vars), expr);
+        if (val.is_null()) return mapnik::color(255,192,203); // pink
+        return mapnik::color(val.to_string());
+    }
+};
+
+// enumeration wrapper
+template <>
+struct evaluate_expression_wrapper<mapnik::enumeration_wrapper>
+{
+    template <typename T1, typename T2, typename T3>
+    mapnik::enumeration_wrapper operator() (T1 const& expr, T2 const& feature, T3 const& vars) const
+    {
+        mapnik::value_type val = util::apply_visitor(mapnik::evaluate<T2,mapnik::value_type,T3>(feature,vars), expr);
+        return mapnik::enumeration_wrapper(val.to_int());
+    }
+};
+
+template <>
+struct evaluate_expression_wrapper<mapnik::dash_array>
+{
+    template <typename T1, typename T2, typename T3>
+    mapnik::dash_array operator() (T1 const& expr, T2 const& feature, T3 const& vars) const
+    {
+        mapnik::value_type val = util::apply_visitor(mapnik::evaluate<T2,mapnik::value_type,T3>(feature,vars), expr);
+        if (val.is_null()) return dash_array();
+        dash_array dash;
+        std::vector<double> buf;
+        std::string str = val.to_string();
+        if (util::parse_dasharray(str,buf))
+        {
+            util::add_dashes(buf,dash);
+        }
+        return dash;
+    }
+};
+
+// mapnik::font_feature_settings
+template <>
+struct evaluate_expression_wrapper<mapnik::font_feature_settings>
+{
+    template <typename T1, typename T2, typename T3>
+    mapnik::font_feature_settings operator() (T1 const& expr, T2 const& feature, T3 const& vars) const
+    {
+        mapnik::value_type val = util::apply_visitor(mapnik::evaluate<T2, mapnik::value_type, T3>(feature, vars), expr);
+        if (val.is_null()) return mapnik::font_feature_settings();
+        return mapnik::font_feature_settings(val.to_string());
+    }
+};
+
+template <typename T>
+struct extract_value : public util::static_visitor<T>
+{
+    using result_type = T;
+
+    extract_value(mapnik::feature_impl const& feature,
+                  mapnik::attributes const& v)
+        : feature_(feature),
+          vars_(v) {}
+
+    auto operator() (mapnik::expression_ptr const& expr) const -> result_type
+    {
+        return evaluate_expression_wrapper<result_type>()(*expr,feature_,vars_);
+    }
+
+    auto operator() (mapnik::path_expression_ptr const& expr) const -> result_type
+    {
+        return evaluate_path_wrapper<result_type>()(*expr, feature_);
+    }
+
+    auto operator() (result_type const& val) const -> result_type
+    {
+        return val;
+    }
+
+    auto operator() (mapnik::enumeration_wrapper const& e) const -> result_type
+    {
+        return detail::enumeration_result<result_type, std::is_enum<result_type>::value>::convert(e);
+    }
+
+    template <typename T1>
+    auto operator() (T1 const&) const -> result_type
+    {
+        return result_type();
+    }
+
+    mapnik::feature_impl const& feature_;
+    mapnik::attributes const& vars_;
+};
+
+template <typename T1>
+struct extract_raw_value : public util::static_visitor<T1>
+{
+    using result_type = T1;
+
+    auto operator() (result_type const& val) const -> result_type const&
+    {
+        return val;
+    }
+
+    auto operator() (mapnik::enumeration_wrapper const& e) const -> result_type
+    {
+        return detail::enumeration_result<result_type, std::is_enum<result_type>::value>::convert(e);
+    }
+
+    template <typename T2>
+    auto operator() (T2 const&) const -> result_type
+    {
+        return result_type();
+    }
 };
+
+
+//
+
+using property_meta_type = std::tuple<const char*, std::function<std::string(enumeration_wrapper)>, property_types>;
+MAPNIK_DECL property_meta_type const& get_meta(mapnik::keys key);
+MAPNIK_DECL mapnik::keys get_key(std::string const& name);
+
+//
+template <typename T>
+void put(symbolizer_base & sym, keys key, T const& val)
+{
+    constexpr bool enum_ = std::is_enum<T>::value;
+    detail::put_impl<T, enum_ >::apply(sym, key, val);
+}
+
+inline bool has_key(symbolizer_base const& sym, keys key)
+{
+    return (sym.properties.count(key) == 1);
+}
+
+template <typename T, keys key>
+T get(symbolizer_base const& sym, mapnik::feature_impl const& feature, attributes const& vars)
+{
+    using const_iterator = symbolizer_base::cont_type::const_iterator;
+    const_iterator itr = sym.properties.find(key);
+    if (itr != sym.properties.end())
+    {
+        return util::apply_visitor(extract_value<T>(feature,vars), itr->second);
+    }
+    return mapnik::symbolizer_default<T,key>::value();
+}
+
+template <typename T>
+T get(symbolizer_base const& sym, keys key, mapnik::feature_impl const& feature, attributes const& vars, T const& default_value)
+{
+    using const_iterator = symbolizer_base::cont_type::const_iterator;
+    const_iterator itr = sym.properties.find(key);
+    if (itr != sym.properties.end())
+    {
+        return util::apply_visitor(extract_value<T>(feature,vars), itr->second);
+    }
+    return default_value;
+}
+
+
+template <typename T>
+boost::optional<T> get_optional(symbolizer_base const& sym, keys key, mapnik::feature_impl const& feature, attributes const& vars)
+{
+    using const_iterator = symbolizer_base::cont_type::const_iterator;
+    const_iterator itr = sym.properties.find(key);
+    if (itr != sym.properties.end())
+    {
+        return util::apply_visitor(extract_value<T>(feature,vars), itr->second);
+    }
+    return boost::optional<T>();
+}
+
+template <typename T>
+T get(symbolizer_base const& sym, keys key)
+{
+    using const_iterator = symbolizer_base::cont_type::const_iterator;
+    const_iterator itr = sym.properties.find(key);
+    if (itr != sym.properties.end())
+    {
+        return util::apply_visitor(extract_raw_value<T>(), itr->second);
+    }
+    return T();
+}
+
+
+template <typename T>
+T get(symbolizer_base const& sym, keys key, T const& default_value)
+{
+    using const_iterator = symbolizer_base::cont_type::const_iterator;
+    const_iterator itr = sym.properties.find(key);
+    if (itr != sym.properties.end())
+    {
+        return util::apply_visitor(extract_raw_value<T>(), itr->second);
+    }
+    return default_value;
+}
+
+template <typename T>
+boost::optional<T> get_optional(symbolizer_base const& sym, keys key)
+{
+    using const_iterator = symbolizer_base::cont_type::const_iterator;
+    const_iterator itr = sym.properties.find(key);
+    if (itr != sym.properties.end())
+    {
+        return util::apply_visitor(extract_raw_value<T>(), itr->second);
+    }
+    return boost::optional<T>();
+}
+
 }
 
 #endif // MAPNIK_SYMBOLIZER_HPP
diff --git a/include/mapnik/symbolizer_base.hpp b/include/mapnik/symbolizer_base.hpp
new file mode 100644
index 0000000..55472fa
--- /dev/null
+++ b/include/mapnik/symbolizer_base.hpp
@@ -0,0 +1,169 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_SYMBOLIZER_BASE_HPP
+#define MAPNIK_SYMBOLIZER_BASE_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/expression.hpp>
+#include <mapnik/path_expression.hpp>
+#include <mapnik/symbolizer_keys.hpp>
+#include <mapnik/raster_colorizer.hpp>
+#include <mapnik/group/group_symbolizer_properties.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/text/font_feature_settings.hpp>
+#include <mapnik/util/variant.hpp>
+
+// stl
+#include <memory>
+#include <vector>
+#include <iosfwd>
+#include <map>
+
+namespace agg { struct trans_affine; }
+
+namespace mapnik
+{
+
+// fwd declares
+// TODO - move these transform declares to own header
+namespace detail { struct transform_node; }
+using transform_list =  std::vector<detail::transform_node>;
+using transform_list_ptr = std::shared_ptr<transform_list>;
+using transform_type = transform_list_ptr;
+class feature_impl;
+
+MAPNIK_DECL void evaluate_transform(agg::trans_affine& tr,
+                                    feature_impl const& feature,
+                                    attributes const& vars,
+                                    transform_type const& trans_expr,
+                                    double scale_factor=1.0);
+
+struct enumeration_wrapper
+{
+    int value;
+    enumeration_wrapper() = delete;
+    template <typename T>
+    explicit enumeration_wrapper(T value_)
+        : value(value_) {}
+
+    inline operator int() const
+    {
+        return value;
+    }
+};
+
+using dash_array = std::vector<std::pair<double,double> >;
+
+class text_placements;
+using text_placements_ptr = std::shared_ptr<text_placements>;
+
+namespace detail {
+
+using value_base_type = util::variant<value_bool,
+                                      value_integer,
+                                      enumeration_wrapper,
+                                      value_double,
+                                      std::string,
+                                      color,
+                                      expression_ptr,
+                                      path_expression_ptr,
+                                      transform_type,
+                                      text_placements_ptr,
+                                      dash_array,
+                                      raster_colorizer_ptr,
+                                      group_symbolizer_properties_ptr,
+                                      font_feature_settings>;
+
+struct strict_value : value_base_type
+{
+    // default ctor
+    strict_value()
+        : value_base_type() {}
+    // copy ctor
+    strict_value(const char* val)
+        : value_base_type(val) {}
+
+    template <typename T>
+    strict_value(T const& obj)
+        : value_base_type(typename detail::mapnik_value_type<T>::type(obj))
+    {}
+    // move ctor
+    template <typename T>
+    strict_value(T && obj) noexcept
+        : value_base_type(std::move(obj)) {}
+
+};
+}
+
+struct MAPNIK_DECL symbolizer_base
+{
+    using value_type = detail::strict_value;
+    using key_type =  mapnik::keys;
+    using cont_type = std::map<key_type, value_type>;
+    cont_type properties;
+};
+
+inline bool is_expression(symbolizer_base::value_type const& val)
+{
+    return val.is<expression_ptr>();
+}
+
+inline bool operator==(symbolizer_base const& lhs, symbolizer_base const& rhs)
+{
+    return lhs.properties.size() == rhs.properties.size() &&
+        std::equal(lhs.properties.begin(), lhs.properties.end(), rhs.properties.begin());
+}
+
+// concrete symbolizer types
+struct MAPNIK_DECL point_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL line_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL polygon_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL text_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL shield_symbolizer : public text_symbolizer {};
+struct MAPNIK_DECL line_pattern_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL polygon_pattern_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL markers_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL raster_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL building_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL group_symbolizer : public symbolizer_base {};
+struct MAPNIK_DECL debug_symbolizer : public symbolizer_base {};
+
+// symbolizer
+using symbolizer = util::variant<point_symbolizer,
+                                 line_symbolizer,
+                                 line_pattern_symbolizer,
+                                 polygon_symbolizer,
+                                 polygon_pattern_symbolizer,
+                                 raster_symbolizer,
+                                 shield_symbolizer,
+                                 text_symbolizer,
+                                 building_symbolizer,
+                                 markers_symbolizer,
+                                 group_symbolizer,
+                                 debug_symbolizer>;
+
+}
+
+#endif // MAPNIK_SYMBOLIZER_BASE_HPP
diff --git a/include/mapnik/symbolizer_default_values.hpp b/include/mapnik/symbolizer_default_values.hpp
new file mode 100644
index 0000000..8816d7c
--- /dev/null
+++ b/include/mapnik/symbolizer_default_values.hpp
@@ -0,0 +1,362 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_SYMBOLIZER_DEFAULT_VALUES_HPP
+#define MAPNIK_SYMBOLIZER_DEFAULT_VALUES_HPP
+
+#include <mapnik/symbolizer_keys.hpp>
+#include <mapnik/color.hpp>
+#include <type_traits>
+
+
+namespace mapnik {
+
+template <typename T, keys key>
+struct symbolizer_default {};
+
+// specializations for properties
+// gamma
+template <>
+struct symbolizer_default<value_double, keys::gamma>
+{
+    static value_double value() { return 1.0; }
+};
+
+// gamma-method
+template <>
+struct symbolizer_default<gamma_method_enum, keys::gamma_method>
+{
+    static gamma_method_enum value() { return GAMMA_POWER; }
+};
+
+// opacity
+template <>
+struct symbolizer_default<value_double, keys::opacity>
+{
+    static value_double value() { return 1.0; }
+};
+
+// alignment
+template <>
+struct symbolizer_default<pattern_alignment_enum, keys::alignment>
+{
+    static pattern_alignment_enum value() { return GLOBAL_ALIGNMENT; }
+};
+
+// offset
+template <>
+struct symbolizer_default<value_double, keys::offset>
+{
+    static value_double value() { return 0.0; }
+};
+
+// comp-op
+template <>
+struct symbolizer_default<composite_mode_e, keys::comp_op>
+{
+    static composite_mode_e value() { return src_over; }
+};
+
+// clip
+template <>
+struct symbolizer_default<value_bool, keys::clip>
+{
+    static value_bool value() { return false; }
+};
+
+// fill
+template <>
+struct symbolizer_default<color, keys::fill>
+{
+    static color value() { return color(128,128,128); }
+};
+
+// fill-opacity
+template <>
+struct symbolizer_default<value_double, keys::fill_opacity>
+{
+    static value_double value() { return 1.0; }
+};
+
+// stroke
+template <>
+struct symbolizer_default<color, keys::stroke>
+{
+    static color value() { return color(0,0,0); }
+};
+
+// stroke-width
+template <>
+struct symbolizer_default<value_double, keys::stroke_width>
+{
+    static value_double value() { return 1.0; }
+};
+
+// stroke-opacity
+template <>
+struct symbolizer_default<value_double, keys::stroke_opacity>
+{
+    static value_double value() { return 1.0; }
+};
+
+// stroke-linejoin
+template <>
+struct symbolizer_default<line_join_enum, keys::stroke_linejoin>
+{
+    static line_join_enum value() { return MITER_JOIN; }
+};
+
+// stroke-linecap
+template <>
+struct symbolizer_default<line_cap_enum, keys::stroke_linecap>
+{
+    static line_cap_enum value() { return BUTT_CAP; }
+};
+
+// stroke-gamma
+template <>
+struct symbolizer_default<value_double, keys::stroke_gamma>
+{
+    static value_double value() { return 1.0; }
+};
+
+// stroke-gamma-method
+template <>
+struct symbolizer_default<gamma_method_enum, keys::stroke_gamma_method>
+{
+    static gamma_method_enum value() { return GAMMA_POWER; }
+};
+
+// stroke-dashoffset
+template <>
+struct symbolizer_default<value_integer, keys::stroke_dashoffset>
+{
+    static value_integer value() { return 0; }
+};
+
+// stroke-dasharray
+
+// stroke-miterlimit
+template <>
+struct symbolizer_default<value_double, keys::stroke_miterlimit>
+{
+    static value_double value() { return 4.0; }
+};
+
+// geometry-transform
+
+// rasterizer
+template <>
+struct symbolizer_default<line_rasterizer_enum, keys::line_rasterizer>
+{
+    static line_rasterizer_enum value() { return RASTERIZER_FULL; }
+};
+
+// transform
+
+// spacing
+template <>
+struct symbolizer_default<value_double, keys::spacing>
+{
+    static value_double value() { return 100.0; }
+};
+
+// max-error
+template <>
+struct symbolizer_default<value_double, keys::max_error>
+{
+    static value_double value() { return 0.2; }
+};
+
+// allow-overlap
+template <>
+struct symbolizer_default<value_bool, keys::allow_overlap>
+{
+    static value_bool value() { return false; }
+};
+
+// ignore-placement
+template <>
+struct symbolizer_default<value_bool, keys::ignore_placement>
+{
+    static value_bool value() { return false; }
+};
+
+// width
+template <>
+struct symbolizer_default<value_double, keys::width>
+{
+    static value_double value() { return 0.0; }
+};
+
+// height
+template <>
+struct symbolizer_default<value_double, keys::height>
+{
+    static value_double value() { return 0.0; }
+};
+
+// file ??
+template <>
+struct symbolizer_default<std::string, keys::file>
+{
+    static std::string value() { return ""; }
+};
+
+// shield-dx
+template <>
+struct symbolizer_default<value_double, keys::shield_dx>
+{
+    static value_double value() { return 0.0; }
+};
+
+// shield-dy
+template <>
+struct symbolizer_default<value_double, keys::shield_dy>
+{
+    static value_double value() { return 0.0; }
+};
+
+// unlock-image
+template <>
+struct symbolizer_default<value_bool, keys::unlock_image>
+{
+    static value_bool value() { return false; }
+};
+
+// mode
+template <>
+struct symbolizer_default<value_bool, keys::mode>
+{
+    static value_bool value() { return false; }
+};
+
+// scaling
+template <>
+struct symbolizer_default<value_double, keys::scaling>
+{
+    static value_double value() { return 1.0; }
+};
+
+// filter-factor
+template <>
+struct symbolizer_default<value_double, keys::filter_factor>
+{
+    static value_double value() { return 1.0; }
+};
+
+// mesh-size
+template <>
+struct symbolizer_default<value_integer, keys::mesh_size>
+{
+    static value_integer value() { return 0; }
+};
+
+// premultiplied
+template <>
+struct symbolizer_default<value_bool, keys::premultiplied>
+{
+    static value_bool value() { return false; }
+};
+
+// smooth
+template <>
+struct symbolizer_default<value_double, keys::smooth>
+{
+    static value_double value() { return 0.0; }
+};
+
+// simplify-algorithm
+template <>
+struct symbolizer_default<simplify_algorithm_e, keys::simplify_algorithm>
+{
+    static simplify_algorithm_e value() { return radial_distance; }
+};
+
+// simplify
+template <>
+struct symbolizer_default<value_double, keys::simplify_tolerance>
+{
+    static value_double value() { return 0.0; }
+};
+
+// halo-rasterizer
+template <>
+struct symbolizer_default<halo_rasterizer_enum, keys::halo_rasterizer>
+{
+    static halo_rasterizer_enum value() { return HALO_RASTERIZER_FULL; }
+};
+
+// text-placements
+
+// placement (point-placement-type FIXME)
+template <>
+struct symbolizer_default<point_placement_enum, keys::point_placement_type>
+{
+    static point_placement_enum value() { return CENTROID_POINT_PLACEMENT; }
+};
+
+// marker placement
+template <>
+struct symbolizer_default<marker_placement_enum, keys::markers_placement_type>
+{
+    static marker_placement_enum value() { return MARKER_POINT_PLACEMENT; }
+};
+
+// multi-policy
+template <>
+struct symbolizer_default<marker_multi_policy_enum, keys::markers_multipolicy>
+{
+    static marker_multi_policy_enum value() { return  MARKER_EACH_MULTI; }
+};
+
+// placement
+
+// colorizer
+
+// halo-transform
+
+// num-columns
+// start-column
+// repeat-key
+// symbolizer-properties ??
+// largest-box-only
+// minimum-path-length
+// halo-comp-op
+// text-transform
+// horizontal-alignment
+// justify-alignment
+// vertical-alignment
+// upright
+
+// avoid-edges
+template <>
+struct symbolizer_default<value_bool, keys::avoid_edges>
+{
+    static value_bool value() { return false; }
+};
+
+// font-feature-settings
+
+} // namespace mapnik
+
+#endif // MAPNIK_SYMBOLIZER_DEFAULT_VALUES_HPP
diff --git a/include/mapnik/symbolizer_dispatch.hpp b/include/mapnik/symbolizer_dispatch.hpp
new file mode 100644
index 0000000..a0320cc
--- /dev/null
+++ b/include/mapnik/symbolizer_dispatch.hpp
@@ -0,0 +1,110 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_SYMBOLIZER_DISPATCH_HPP
+#define MAPNIK_SYMBOLIZER_DISPATCH_HPP
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/feature_style_processor.hpp>
+#include <mapnik/util/variant.hpp>
+
+namespace mapnik
+{
+
+template <typename T0,typename T1> struct has_process;
+
+template <bool>
+struct process_impl
+{
+    template <typename T0, typename T1, typename T2, typename T3>
+    static void process(T0 & ren, T1 const& sym, T2 & f, T3 const& tr)
+    {
+        ren.process(sym,f,tr);
+    }
+};
+
+template <> // No-op specialization
+struct process_impl<false>
+{
+    template <typename T0, typename T1, typename T2, typename T3>
+    static void process(T0 &, T1 const&, T2 &, T3 const&)
+    {
+#ifdef MAPNIK_DEBUG
+    #ifdef _MSC_VER
+    #pragma NOTE(process function not implemented)
+    #else
+    #warning process function not implemented
+    #endif
+#endif
+    }
+};
+
+/** Calls the renderer's process function,
+ * \param output     Renderer
+ * \param f          Feature to process
+ * \param prj_trans  Projection
+ * \param sym        Symbolizer object
+ */
+template <typename Processor>
+struct symbolizer_dispatch : public util::static_visitor<>
+{
+    symbolizer_dispatch(Processor & output,
+                        mapnik::feature_impl & f,
+                        proj_transform const& prj_trans)
+        : output_(output),
+          f_(f),
+          prj_trans_(prj_trans)  {}
+
+    template <typename T>
+    void operator () (T const& sym) const
+    {
+        process_impl<has_process<Processor,T>::value>::process(output_,sym,f_,prj_trans_);
+    }
+
+    Processor & output_;
+    mapnik::feature_impl & f_;
+    proj_transform const& prj_trans_;
+};
+
+using no_tag = char (&)[1];
+using yes_tag = char (&)[2];
+
+template <typename T0, typename T1, void (T0::*)(T1 const&, mapnik::feature_impl &, proj_transform const&) >
+struct process_memfun_helper {};
+
+template <typename T0, typename T1> no_tag  has_process_helper(...);
+template <typename T0, typename T1> yes_tag has_process_helper(process_memfun_helper<T0, T1, &T0::process>* p);
+
+template<typename T0,typename T1>
+struct has_process
+{
+    using processor_impl_type = typename T0::processor_impl_type;
+    BOOST_STATIC_CONSTANT(bool
+                          , value = sizeof(has_process_helper<processor_impl_type,T1>(0)) == sizeof(yes_tag)
+        );
+};
+
+}
+
+#endif // MAPNIK_SYMBOLIZER_DISPATCH_HPP
diff --git a/include/mapnik/symbolizer_enumerations.hpp b/include/mapnik/symbolizer_enumerations.hpp
new file mode 100644
index 0000000..fef3638
--- /dev/null
+++ b/include/mapnik/symbolizer_enumerations.hpp
@@ -0,0 +1,204 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_SYMBOLIZER_ENUMERATIONS_HPP
+#define MAPNIK_SYMBOLIZER_ENUMERATIONS_HPP
+
+#include <mapnik/enumeration.hpp>
+
+namespace mapnik {
+
+enum line_cap_enum
+{
+    BUTT_CAP,
+    SQUARE_CAP,
+    ROUND_CAP,
+    line_cap_enum_MAX
+};
+
+DEFINE_ENUM( line_cap_e, line_cap_enum );
+
+enum line_join_enum
+{
+    MITER_JOIN,
+    MITER_REVERT_JOIN,
+    ROUND_JOIN,
+    BEVEL_JOIN,
+    line_join_enum_MAX
+};
+
+DEFINE_ENUM( line_join_e, line_join_enum );
+
+enum line_rasterizer_enum
+{
+    RASTERIZER_FULL,           // agg::renderer_scanline_aa_solid
+    RASTERIZER_FAST,           // agg::rasterizer_outline_aa, twice as fast but only good for thin lines
+    line_rasterizer_enum_MAX
+};
+
+DEFINE_ENUM( line_rasterizer_e, line_rasterizer_enum );
+
+
+enum halo_rasterizer_enum
+{
+    HALO_RASTERIZER_FULL,
+    HALO_RASTERIZER_FAST,
+    halo_rasterizer_enum_MAX
+};
+
+DEFINE_ENUM(halo_rasterizer_e, halo_rasterizer_enum);
+
+enum point_placement_enum
+{
+    CENTROID_POINT_PLACEMENT,
+    INTERIOR_POINT_PLACEMENT,
+    point_placement_enum_MAX
+};
+
+DEFINE_ENUM( point_placement_e, point_placement_enum );
+
+enum pattern_alignment_enum
+{
+    LOCAL_ALIGNMENT,
+    GLOBAL_ALIGNMENT,
+    pattern_alignment_enum_MAX
+};
+
+DEFINE_ENUM( pattern_alignment_e, pattern_alignment_enum );
+
+enum debug_symbolizer_mode_enum
+{
+    DEBUG_SYM_MODE_COLLISION,
+    DEBUG_SYM_MODE_VERTEX,
+    debug_symbolizer_mode_enum_MAX
+};
+
+DEFINE_ENUM( debug_symbolizer_mode_e, debug_symbolizer_mode_enum );
+
+
+// markers
+// TODO - consider merging with text_symbolizer label_placement_e
+enum marker_placement_enum
+{
+    MARKER_POINT_PLACEMENT,
+    MARKER_INTERIOR_PLACEMENT,
+    MARKER_LINE_PLACEMENT,
+    MARKER_VERTEX_FIRST_PLACEMENT,
+    MARKER_VERTEX_LAST_PLACEMENT,
+    marker_placement_enum_MAX
+};
+
+DEFINE_ENUM( marker_placement_e, marker_placement_enum );
+
+enum marker_multi_policy_enum
+{
+    MARKER_EACH_MULTI, // each component in a multi gets its marker
+    MARKER_WHOLE_MULTI, // consider all components of a multi as a whole
+    MARKER_LARGEST_MULTI, // only the largest component of a multi gets a marker
+    marker_multi_policy_enum_MAX
+};
+
+DEFINE_ENUM( marker_multi_policy_e, marker_multi_policy_enum );
+
+enum text_transform_enum
+{
+    NONE = 0,
+    UPPERCASE,
+    LOWERCASE,
+    CAPITALIZE,
+    text_transform_enum_MAX
+};
+
+DEFINE_ENUM(text_transform_e, text_transform_enum);
+
+enum label_placement_enum
+{
+    POINT_PLACEMENT,
+    LINE_PLACEMENT,
+    VERTEX_PLACEMENT,
+    INTERIOR_PLACEMENT,
+    label_placement_enum_MAX
+};
+
+DEFINE_ENUM(label_placement_e, label_placement_enum);
+
+enum vertical_alignment_enum
+{
+    V_TOP = 0,
+    V_MIDDLE,
+    V_BOTTOM,
+    V_AUTO,
+    vertical_alignment_enum_MAX
+};
+
+DEFINE_ENUM(vertical_alignment_e, vertical_alignment_enum);
+
+enum horizontal_alignment_enum
+{
+    H_LEFT = 0,
+    H_MIDDLE,
+    H_RIGHT,
+    H_AUTO,
+    H_ADJUST,
+    horizontal_alignment_enum_MAX
+};
+
+DEFINE_ENUM(horizontal_alignment_e, horizontal_alignment_enum);
+
+enum justify_alignment_enum
+{
+    J_LEFT = 0,
+    J_MIDDLE,
+    J_RIGHT,
+    J_AUTO,
+    justify_alignment_enum_MAX
+};
+
+DEFINE_ENUM(justify_alignment_e, justify_alignment_enum);
+
+enum text_upright_enum
+{
+    UPRIGHT_AUTO,
+    UPRIGHT_LEFT,
+    UPRIGHT_RIGHT,
+    UPRIGHT_LEFT_ONLY,
+    UPRIGHT_RIGHT_ONLY,
+    text_upright_enum_MAX
+};
+
+DEFINE_ENUM(text_upright_e, text_upright_enum);
+
+enum gamma_method_enum {
+    GAMMA_POWER, //agg::gamma_power
+    GAMMA_LINEAR, //agg::gamma_linear
+    GAMMA_NONE, //agg::gamma_none
+    GAMMA_THRESHOLD, //agg::gamma_threshold
+    GAMMA_MULTIPLY, //agg::gamma_multiply
+    gamma_method_enum_MAX
+};
+
+DEFINE_ENUM (gamma_method_e, gamma_method_enum );
+
+
+}
+
+#endif //MAPNIK_SYMBOLIZER_ENUMERATIONS_HPP
diff --git a/include/mapnik/symbolizer_hash.hpp b/include/mapnik/symbolizer_hash.hpp
index 7957434..18f0a68 100644
--- a/include/mapnik/symbolizer_hash.hpp
+++ b/include/mapnik/symbolizer_hash.hpp
@@ -23,44 +23,75 @@
 #ifndef MAPNIK_SYMBOLIZER_HASH_HPP
 #define MAPNIK_SYMBOLIZER_HASH_HPP
 
-#include <mapnik/map.hpp>
-#include <mapnik/feature_type_style.hpp>
-
-#include <boost/functional/hash.hpp>
-#include <boost/variant/static_visitor.hpp>
+// mapnik
+#include <mapnik/symbolizer_base.hpp>
+#include <mapnik/util/variant.hpp>
+// stl
+#include <typeinfo>
+#include <typeindex>
+#include <functional>
 
 namespace mapnik {
 
-struct symbolizer_hash
+struct property_value_hash_visitor : util::static_visitor<std::size_t>
 {
+    std::size_t operator() (color const& val) const
+    {
+        return val.rgba();
+    }
+
+    std::size_t operator() (font_feature_settings const&) const
+    {
+        return 0; //FIXME
+    }
+
+    std::size_t operator() (transform_type const&) const
+    {
+        return 0; //FIXME
+    }
+
+    std::size_t operator() (enumeration_wrapper const&) const
+    {
+        return 0; //FIXME
+    }
+
+    std::size_t operator() (dash_array const&) const
+    {
+        return 0; //FIXME
+    }
+
     template <typename T>
-    static std::size_t value(T const& sym)
+    std::size_t operator() (T const& val) const
     {
-        std::size_t seed = 0;
-        return seed;
+        return std::hash<T>()(val);
     }
-    // specialisation for polygon_symbolizer
-    static std::size_t value(polygon_symbolizer const& sym)
+};
+
+struct symbolizer_hash
+{
+    template <typename T>
+    static std::size_t value(T const& sym)
     {
-        std::size_t seed = Polygon;
-        boost::hash_combine(seed, sym.get_fill().rgba());
-        boost::hash_combine(seed, sym.get_opacity());
+        std::size_t seed = std::hash<std::type_index>()(typeid(sym));
+        for (auto const& prop : sym.properties)
+        {
+            seed ^= std::hash<std::size_t>()(static_cast<std::size_t>(prop.first));
+            seed ^= util::apply_visitor(property_value_hash_visitor(), prop.second);
+        }
         return seed;
     }
+};
 
-    // specialisation for line_symbolizer
-    static std::size_t value(line_symbolizer const& sym)
+struct symbolizer_hash_visitor : util::static_visitor<std::size_t>
+{
+    template <typename Symbolizer>
+    std::size_t operator() (Symbolizer const& sym) const
     {
-        std::size_t seed = LineString;
-        boost::hash_combine(seed, sym.get_stroke().get_color().rgba());
-        boost::hash_combine(seed, sym.get_stroke().get_width());
-        boost::hash_combine(seed, sym.get_stroke().get_opacity());
-        boost::hash_combine(seed, static_cast<int>(sym.get_stroke().get_line_cap()));
-        boost::hash_combine(seed, static_cast<int>(sym.get_stroke().get_line_join()));
-        return seed;
+        return symbolizer_hash::value(sym);
     }
 };
 
-}
+} // namespace mapnik
+
 
 #endif // MAPNIK_SYMBOLIZER_HASH_HPP
diff --git a/include/mapnik/symbolizer_helpers.hpp b/include/mapnik/symbolizer_helpers.hpp
deleted file mode 100644
index 4da83c3..0000000
--- a/include/mapnik/symbolizer_helpers.hpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef SYMBOLIZER_HELPERS_HPP
-#define SYMBOLIZER_HELPERS_HPP
-
-//mapnik
-#include <mapnik/text_symbolizer.hpp>
-#include <mapnik/shield_symbolizer.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/marker_cache.hpp>
-#include <mapnik/processed_text.hpp>
-
-//boost
-#include <boost/shared_ptr.hpp>
-
-// agg
-#include "agg_trans_affine.h"
-
-// fwd declares
-namespace mapnik {
-  class CoordTransform;
-  class marker;
-  class proj_transform;
-  class string_info;
-  class text_path;
-  template <typename DetectorT> class placement_finder;
-}
-
-namespace mapnik {
-
-typedef boost::ptr_vector<text_path> placements_type;
-template <typename DetectorT> class placement_finder;
-
-/** Helper object that does all the TextSymbolizer placment finding
- * work except actually rendering the object. */
-template <typename FaceManagerT, typename DetectorT>
-class text_symbolizer_helper
-{
-public:
-    text_symbolizer_helper(text_symbolizer const& sym,
-                           feature_impl const& feature,
-                           proj_transform const& prj_trans,
-                           unsigned width,
-                           unsigned height,
-                           double scale_factor,
-                           CoordTransform const& t,
-                           FaceManagerT &font_manager,
-                           DetectorT &detector,
-                           box2d<double> const& query_extent)
-        : sym_(sym),
-          feature_(feature),
-          prj_trans_(prj_trans),
-          t_(t),
-          font_manager_(font_manager),
-          detector_(detector),
-          dims_(0, 0, width, height),
-          query_extent_(query_extent),
-          text_(font_manager, scale_factor),
-          angle_(0.0),
-          placement_valid_(false),
-          points_on_line_(false),
-          finder_()
-    {
-        initialize_geometries();
-        if (!geometries_to_process_.size()) return;
-        placement_ = sym_.get_placement_options()->get_placement_info(scale_factor);
-        next_placement();
-        initialize_points();
-    }
-
-    /** Return next placement.
-     * If no more placements are found returns null pointer.
-     */
-    bool next();
-
-    /** Get current placement. next() has to be called before! */
-    placements_type const& placements() const;
-protected:
-    bool next_point_placement();
-    bool next_line_placement();
-    bool next_line_placement_clipped();
-    bool next_placement();
-    void initialize_geometries();
-    void initialize_points();
-
-    //Input
-    text_symbolizer const& sym_;
-    feature_impl const& feature_;
-    proj_transform const& prj_trans_;
-    CoordTransform const& t_;
-    FaceManagerT & font_manager_;
-    DetectorT & detector_;
-    box2d<double> dims_;
-    box2d<double> const& query_extent_;
-    //Processing
-    processed_text text_;
-    /* Using list instead of vector, because we delete random elements and need iterators to stay valid. */
-    /** Remaining geometries to be processed. */
-    std::list<geometry_type*> geometries_to_process_;
-    /** Geometry currently being processed. */
-    std::list<geometry_type*>::iterator geo_itr_;
-    /** Remaining points to be processed. */
-    std::list<position> points_;
-    /** Point currently being processed. */
-    std::list<position>::iterator point_itr_;
-    /** Text rotation. */
-    double angle_;
-    /** Text + formatting. */
-    string_info *info_;
-    /** Did last call to next_placement return true? */
-    bool placement_valid_;
-    /** Use point placement. Otherwise line placement is used. */
-    bool point_placement_;
-    /** Place text at points on a line instead of following the line (used for ShieldSymbolizer) .*/
-    bool points_on_line_;
-
-    text_placement_info_ptr placement_;
-    boost::shared_ptr<placement_finder<DetectorT> > finder_;
-};
-
-template <typename FaceManagerT, typename DetectorT>
-class shield_symbolizer_helper: public text_symbolizer_helper<FaceManagerT, DetectorT>
-{
-public:
-    shield_symbolizer_helper(shield_symbolizer const& sym,
-                             feature_impl const& feature,
-                             proj_transform const& prj_trans,
-                             unsigned width,
-                             unsigned height,
-                             double scale_factor,
-                             CoordTransform const &t,
-                             FaceManagerT &font_manager,
-                             DetectorT &detector,
-                             box2d<double> const& query_extent) :
-        text_symbolizer_helper<FaceManagerT, DetectorT>(sym, feature, prj_trans, width, height, scale_factor, t, font_manager, detector, query_extent),
-        sym_(sym)
-    {
-        this->points_on_line_ = true;
-        init_marker();
-    }
-
-    box2d<double> const& get_marker_extent() const
-    {
-        return marker_ext_;
-    }
-
-    double get_marker_height() const
-    {
-        return marker_h_;
-    }
-
-    double get_marker_width() const
-    {
-        return marker_w_;
-    }
-
-    bool next();
-    pixel_position get_marker_position(text_path const& p);
-    marker & get_marker() const;
-    agg::trans_affine const& get_image_transform() const;
-protected:
-    bool next_point_placement();
-    bool next_line_placement();
-    void init_marker();
-    shield_symbolizer const& sym_;
-    box2d<double> marker_ext_;
-    boost::optional<marker_ptr> marker_;
-    agg::trans_affine image_transform_;
-    double marker_w_;
-    double marker_h_;
-    double marker_x_;
-    double marker_y_;
-
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::geometries_to_process_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::placement_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::next_placement;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::info_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::geo_itr_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::point_itr_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::points_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::font_manager_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::feature_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::t_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::detector_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::dims_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::prj_trans_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::placement_valid_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::point_placement_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::angle_;
-    using text_symbolizer_helper<FaceManagerT, DetectorT>::finder_;
-};
-} //namespace
-#endif // SYMBOLIZER_HELPERS_HPP
diff --git a/include/mapnik/symbolizer_keys.hpp b/include/mapnik/symbolizer_keys.hpp
new file mode 100644
index 0000000..817ce2f
--- /dev/null
+++ b/include/mapnik/symbolizer_keys.hpp
@@ -0,0 +1,100 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_SYMBOLIZER_KEYS_HPP
+#define MAPNIK_SYMBOLIZER_KEYS_HPP
+
+#include <cstdint>
+
+namespace mapnik {
+
+enum class keys : std::uint8_t
+{
+    gamma = 0,
+    gamma_method,
+    opacity,
+    alignment,
+    offset,
+    comp_op,
+    clip,
+    fill,
+    fill_opacity,
+    stroke,
+    stroke_width,
+    stroke_opacity,
+    stroke_linejoin,
+    stroke_linecap,
+    stroke_gamma,
+    stroke_gamma_method,
+    stroke_dashoffset,
+    stroke_dasharray,
+    stroke_miterlimit,
+    geometry_transform,
+    line_rasterizer,
+    image_transform,
+    spacing,
+    max_error,
+    allow_overlap,
+    ignore_placement,
+    width,
+    height,
+    file,
+    shield_dx,
+    shield_dy,
+    unlock_image,
+    mode,
+    scaling,
+    filter_factor,
+    mesh_size,
+    premultiplied,
+    smooth,
+    simplify_algorithm,
+    simplify_tolerance,
+    halo_rasterizer,
+    text_placements_,
+    label_placement,
+    markers_placement_type,
+    markers_multipolicy,
+    point_placement_type,
+    colorizer,
+    halo_transform,
+    num_columns,
+    start_column,
+    repeat_key,
+    group_properties,
+    largest_box_only,
+    minimum_path_length,
+    halo_comp_op,
+    text_transform,
+    horizontal_alignment,
+    justify_alignment,
+    vertical_alignment,
+    upright,
+    avoid_edges,
+    ff_settings,
+    MAX_SYMBOLIZER_KEY
+};
+
+}
+
+
+#endif // MAPNIK_SYMBOLIZER_KEYS_HPP
diff --git a/include/mapnik/symbolizer_utils.hpp b/include/mapnik/symbolizer_utils.hpp
new file mode 100644
index 0000000..17fb3a3
--- /dev/null
+++ b/include/mapnik/symbolizer_utils.hpp
@@ -0,0 +1,498 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_SYMBOLIZER_UTILS_HPP
+#define MAPNIK_SYMBOLIZER_UTILS_HPP
+
+// mapnik
+#include <mapnik/symbolizer_keys.hpp>
+#include <mapnik/raster_colorizer.hpp>
+#include <mapnik/path_expression.hpp>
+#include <mapnik/parse_path.hpp>
+#include <mapnik/color.hpp>
+#include <mapnik/expression.hpp>
+#include <mapnik/transform_processor.hpp>
+#include <mapnik/color_factory.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/xml_tree.hpp>
+#include <mapnik/config_error.hpp>
+#include <mapnik/evaluate_global_attributes.hpp>
+#include <mapnik/parse_transform.hpp>
+#include <mapnik/util/dasharray_parser.hpp>
+#include <mapnik/util/variant.hpp>
+
+namespace mapnik {
+
+template <typename Symbolizer>
+struct symbolizer_traits
+{
+    static char const* name() { return "Unknown";}
+};
+
+template<>
+struct symbolizer_traits<point_symbolizer>
+{
+    static char const* name() { return "PointSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<line_symbolizer>
+{
+    static char const* name() { return "LineSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<polygon_symbolizer>
+{
+    static char const* name() { return "PolygonSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<text_symbolizer>
+{
+    static char const* name() { return "TextSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<line_pattern_symbolizer>
+{
+    static char const* name() { return "LinePatternSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<polygon_pattern_symbolizer>
+{
+    static char const* name() { return "PolygonPatternSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<markers_symbolizer>
+{
+    static char const* name() { return "MarkersSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<shield_symbolizer>
+{
+    static char const* name() { return "ShieldSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<raster_symbolizer>
+{
+    static char const* name() { return "RasterSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<building_symbolizer>
+{
+    static char const* name() { return "BuildingSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<group_symbolizer>
+{
+    static char const* name() { return "GroupSymbolizer";}
+};
+
+template<>
+struct symbolizer_traits<debug_symbolizer>
+{
+    static char const* name() { return "DebugSymbolizer";}
+};
+
+// symbolizer name impl
+namespace detail {
+
+struct symbolizer_name_impl : public util::static_visitor<std::string>
+{
+public:
+    template <typename Symbolizer>
+    std::string operator () (Symbolizer const&) const
+    {
+        return symbolizer_traits<Symbolizer>::name();
+    }
+};
+}
+
+inline std::string symbolizer_name(symbolizer const& sym)
+{
+    std::string type = util::apply_visitor( detail::symbolizer_name_impl(), sym);
+    return type;
+}
+
+// https://github.com/mapnik/mapnik/issues/2324
+/*
+
+template <typename Meta>
+class symbolizer_property_value_string : public util::static_visitor<std::string>
+{
+public:
+    symbolizer_property_value_string (Meta const& meta)
+        : meta_(meta) {}
+
+    std::string operator() ( mapnik::enumeration_wrapper const& e) const
+    {
+        std::stringstream ss;
+        auto const& convert_fun_ptr(std::get<1>(meta_));
+        if ( convert_fun_ptr )
+        {
+            ss << convert_fun_ptr(e);
+        }
+        return ss.str();
+    }
+
+    std::string operator () ( path_expression_ptr const& expr) const
+    {
+        std::ostringstream ss;
+        if (expr)
+        {
+            ss << '\"' << path_processor::to_string(*expr) << '\"';
+        }
+        return ss.str();
+    }
+
+    std::string operator () (text_placements_ptr const& expr) const
+    {
+        return std::string("\"<fixme-text-placement-ptr>\"");
+    }
+
+    std::string operator () (raster_colorizer_ptr const& expr) const
+    {
+        return std::string("\"<fixme-raster-colorizer-ptr>\"");
+    }
+
+    std::string operator () (transform_type const& expr) const
+    {
+        std::ostringstream ss;
+        if (expr)
+        {
+            ss << '\"' << transform_processor_type::to_string(*expr) << '\"';
+        }
+        return ss.str();
+    }
+
+    std::string operator () (expression_ptr const& expr) const
+    {
+        std::ostringstream ss;
+        if (expr)
+        {
+            ss << '\"' << "FIXME" <<  '\"';
+        }
+        return ss.str();
+    }
+
+    std::string operator () (color const& c) const
+    {
+        std::ostringstream ss;
+        ss << '\"' << c << '\"';
+        return ss.str();
+    }
+
+    std::string operator () (dash_array const& dash) const
+    {
+        std::ostringstream ss;
+        for (std::size_t i = 0; i < dash.size(); ++i)
+        {
+            ss << dash[i].first << ", " << dash[i].second;
+            if ( i + 1 < dash.size() ) ss << ',';
+        }
+        return ss.str();
+    }
+
+    template <typename T>
+    std::string operator () ( T const& val ) const
+    {
+        std::ostringstream ss;
+        ss << val;
+        return ss.str();
+    }
+
+private:
+    Meta const& meta_;
+};
+
+struct symbolizer_to_json : public util::static_visitor<std::string>
+{
+    using result_type = std::string;
+
+    template <typename T>
+    auto operator() (T const& sym) const -> result_type
+    {
+        std::stringstream ss;
+        ss << "{\"type\":\"" << mapnik::symbolizer_traits<T>::name() << "\",";
+        ss << "\"properties\":{";
+        bool first = true;
+        for (auto const& prop : sym.properties)
+        {
+            auto const& meta = mapnik::get_meta(prop.first);
+            if (first) first = false;
+            else ss << ",";
+            ss << "\"" <<  std::get<0>(meta) << "\":";
+            ss << util::apply_visitor(symbolizer_property_value_string<property_meta_type>(meta),prop.second);
+        }
+        ss << "}}";
+        return ss.str();
+    }
+};
+
+*/
+
+namespace {
+
+template <typename Symbolizer, typename T>
+struct set_property_impl
+{
+    static void apply(Symbolizer &, mapnik::keys, std::string const&)
+    {
+        std::cerr << "do nothing" << std::endl;
+    }
+};
+
+template <typename Symbolizer>
+struct set_property_impl<Symbolizer, std::integral_constant<property_types, property_types::target_color> >
+{
+    static void apply(Symbolizer & sym, mapnik::keys key, std::string const& val)
+    {
+        put(sym, key, mapnik::parse_color(val));
+    }
+};
+
+template <typename Symbolizer>
+struct set_property_impl<Symbolizer, std::integral_constant<property_types, property_types::target_double> >
+{
+    static void apply(Symbolizer &, mapnik::keys, std::string const&)
+    {
+        std::cerr << " expects double" << std::endl;
+    }
+};
+
+template <typename Symbolizer>
+struct set_property_impl<Symbolizer, std::integral_constant<property_types, property_types::target_bool> >
+{
+    static void apply(Symbolizer &, mapnik::keys, std::string const&)
+    {
+        std::cerr << " expects bool" << std::endl;
+    }
+};
+
+}
+
+template <typename Symbolizer, typename T>
+inline void set_property(Symbolizer & sym, mapnik::keys key, T const& val)
+{
+    switch (std::get<2>(get_meta(key)))
+    {
+    case property_types::target_bool:
+        set_property_impl<Symbolizer, std::integral_constant<property_types, property_types::target_bool> >::apply(sym,key,val);
+        break;
+    case property_types::target_integer:
+        set_property_impl<Symbolizer, std::integral_constant<property_types, property_types::target_integer> >::apply(sym,key,val);
+        break;
+    case property_types::target_double:
+        set_property_impl<Symbolizer, std::integral_constant<property_types, property_types::target_double> >::apply(sym,key,val);
+        break;
+    case property_types::target_color:
+        set_property_impl<Symbolizer, std::integral_constant<property_types, property_types::target_color> >::apply(sym,key,val);
+        break;
+    default:
+        break;
+    }
+}
+
+template <typename Symbolizer, typename T>
+inline void set_property_from_value(Symbolizer & sym, mapnik::keys key, T const& val)
+{
+    switch (std::get<2>(get_meta(key)))
+    {
+    case property_types::target_bool:
+        put(sym, key, val.to_bool());
+        break;
+    case property_types::target_integer:
+        put(sym, key, val.to_int());
+        break;
+    case property_types::target_double:
+        put(sym, key, val.to_double());
+        break;
+    case property_types::target_color:
+        put(sym, key, mapnik::parse_color(val.to_string()));
+        break;
+    default:
+        break;
+    }
+}
+
+namespace detail {
+// helpers
+template <typename Symbolizer, typename T, bool is_enum = false>
+struct set_symbolizer_property_impl
+{
+    static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const& node)
+    {
+        using value_type = T;
+        try
+        {
+            boost::optional<value_type> val = node.get_opt_attr<value_type>(name);
+            if (val) put(sym, key, *val);
+        }
+        catch (config_error const& ex)
+        {
+            // try parsing as an expression
+            boost::optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name);
+            if (val)
+            {
+                // first try pre-evaluate expressions which don't have dynamic properties
+                auto result = pre_evaluate_expression<mapnik::value>(*val);
+                if (std::get<1>(result))
+                {
+                    set_property_from_value(sym, key,std::get<0>(result));
+                }
+                else
+                {
+                    // expression_ptr
+                    put(sym, key, *val);
+                }
+            }
+            else
+            {
+                throw;
+            }
+        }
+    }
+};
+
+template <typename Symbolizer>
+struct set_symbolizer_property_impl<Symbolizer,transform_type,false>
+{
+    static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const & node)
+    {
+        boost::optional<std::string> transform = node.get_opt_attr<std::string>(name);
+        if (transform) put(sym, key, mapnik::parse_transform(*transform));
+    }
+};
+
+template <typename Symbolizer>
+struct set_symbolizer_property_impl<Symbolizer,dash_array,false>
+{
+    static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const & node)
+    {
+        boost::optional<std::string> str = node.get_opt_attr<std::string>(name);
+        if (str)
+        {
+            std::vector<double> buf;
+            dash_array dash;
+            if (util::parse_dasharray(*str,buf) && util::add_dashes(buf,dash))
+            {
+                put(sym,key,dash);
+            }
+            else
+            {
+                boost::optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name);
+                if (val)
+                {
+                    // first try pre-evaluate expressions which don't have dynamic properties
+                    auto result = pre_evaluate_expression<mapnik::value>(*val);
+                    if (std::get<1>(result))
+                    {
+                        set_property_from_value(sym, key,std::get<0>(result));
+                    }
+                    else
+                    {
+                        // expression_ptr
+                        put(sym, key, *val);
+                    }
+                }
+                else
+                {
+                    throw config_error(std::string("Failed to parse dasharray ") +
+                                       "'. Expected a " +
+                                       "list of floats or 'none' but got '" + (*str) + "'");
+                }
+            }
+        }
+    }
+};
+
+template <typename Symbolizer, typename T>
+struct set_symbolizer_property_impl<Symbolizer, T, true>
+{
+    static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const & node)
+    {
+        using value_type = T;
+        boost::optional<std::string> enum_str = node.get_opt_attr<std::string>(name);
+        if (enum_str)
+        {
+            boost::optional<value_type> enum_val = detail::enum_traits<value_type>::from_string(*enum_str);
+            if (enum_val)
+            {
+                put(sym, key, *enum_val);
+            }
+            else
+            {
+                boost::optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name);
+                if (val)
+                {
+                    // first try pre-evaluating expression
+                    auto result = pre_evaluate_expression<value>(*val);
+                    if (std::get<1>(result))
+                    {
+                        boost::optional<value_type> enum_val = detail::enum_traits<value_type>::from_string(std::get<0>(result).to_string());
+                        if (enum_val)
+                        {
+                            put(sym, key, *enum_val);
+                        }
+                        else
+                        {
+                            // can't evaluate
+                            throw config_error("failed to parse '" + name + "'");
+                        }
+                    }
+                    else
+                    {
+                        // put expression_ptr
+                        put(sym, key, *val);
+                    }
+                }
+                else
+                {
+                    throw config_error("failed to parse '" + name + "'");
+                }
+            }
+        }
+    }
+};
+
+} // namespace detail
+
+template <typename Symbolizer, typename T>
+void set_symbolizer_property(Symbolizer & sym, keys key, xml_node const& node)
+{
+    std::string const& name = std::get<0>(get_meta(key));
+    if (node.has_attribute(name)) {
+        detail::set_symbolizer_property_impl<Symbolizer,T, std::is_enum<T>::value>::apply(sym,key,name,node);
+    }
+}
+
+
+}
+
+#endif // MAPNIK_SYMBOLIZER_UTILS_HPP
diff --git a/include/mapnik/text/evaluated_format_properties_ptr.hpp b/include/mapnik/text/evaluated_format_properties_ptr.hpp
new file mode 100644
index 0000000..be6d6d2
--- /dev/null
+++ b/include/mapnik/text/evaluated_format_properties_ptr.hpp
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef EVALUATED_FORMAT_PROPERTIES_PTR_HPP
+#define EVALUATED_FORMAT_PROPERTIES_PTR_HPP
+
+#include <memory>
+
+namespace mapnik { namespace detail {
+struct evaluated_format_properties;
+}
+using evaluated_format_properties_ptr = std::unique_ptr<detail::evaluated_format_properties>;
+}
+
+#endif // EVALUATED_FORMAT_PROPERTIES_PTR_HPP
diff --git a/include/mapnik/text/face.hpp b/include/mapnik/text/face.hpp
new file mode 100644
index 0000000..43363bc
--- /dev/null
+++ b/include/mapnik/text/face.hpp
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_FACE_HPP
+#define MAPNIK_FACE_HPP
+
+//mapnik
+#include <mapnik/text/glyph_info.hpp>
+#include <mapnik/config.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// freetype2
+extern "C"
+{
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_STROKER_H
+}
+
+//stl
+#include <unordered_map>
+#include <memory>
+#include <string>
+#include <vector>
+
+namespace mapnik
+{
+
+class font_face : mapnik::noncopyable
+{
+public:
+    font_face(FT_Face face);
+
+    std::string family_name() const
+    {
+        return std::string(face_->family_name);
+    }
+
+    std::string style_name() const
+    {
+        return std::string(face_->style_name);
+    }
+
+    FT_Face get_face() const
+    {
+        return face_;
+    }
+
+    bool set_character_sizes(double size);
+    bool set_unscaled_character_sizes();
+
+    bool glyph_dimensions(glyph_info &glyph) const;
+
+    ~font_face();
+
+private:
+    FT_Face face_;
+};
+using face_ptr = std::shared_ptr<font_face>;
+
+
+class MAPNIK_DECL font_face_set : private mapnik::noncopyable
+{
+public:
+    using iterator = std::vector<face_ptr>::iterator;
+    font_face_set(void) : faces_(){}
+
+    void add(face_ptr face);
+    void set_character_sizes(double size);
+    void set_unscaled_character_sizes();
+
+    unsigned size() const { return faces_.size(); }
+    iterator begin() { return faces_.begin(); }
+    iterator end() { return faces_.end(); }
+private:
+    std::vector<face_ptr> faces_;
+};
+using face_set_ptr = std::unique_ptr<font_face_set>;
+
+
+// FT_Stroker wrapper
+class stroker : mapnik::noncopyable
+{
+public:
+    explicit stroker(FT_Stroker s)
+        : s_(s) {}
+    ~stroker();
+
+    void init(double radius);
+    FT_Stroker const& get() const { return s_; }
+private:
+    FT_Stroker s_;
+};
+
+} //ns mapnik
+
+#endif // FACE_HPP
diff --git a/include/mapnik/text/font_feature_settings.hpp b/include/mapnik/text/font_feature_settings.hpp
new file mode 100644
index 0000000..9fd6259
--- /dev/null
+++ b/include/mapnik/text/font_feature_settings.hpp
@@ -0,0 +1,93 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_FONT_FEATURE_SETTINGS_HPP
+#define MAPNIK_FONT_FEATURE_SETTINGS_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+
+// stl
+#include <vector>
+#include <memory>
+#include <limits>
+#include <ostream>
+// harfbuzz
+#include <harfbuzz/hb.h>
+
+// EqualityComparable
+inline bool operator==(hb_feature_t const& lhs, hb_feature_t const& rhs)
+{
+    return (lhs.tag == rhs.tag
+            && lhs.value == rhs.value
+            && lhs.start == rhs.start
+            && lhs.end == rhs.end);
+}
+
+namespace mapnik
+{
+
+class MAPNIK_DECL font_feature_settings
+{
+public:
+    using font_feature = hb_feature_t;
+    using feature_vector = std::vector<font_feature>;
+    using feature_iterator = feature_vector::iterator;
+
+    font_feature_settings(std::string const& features);
+    font_feature_settings();
+
+    void from_string(std::string const& features);
+    std::string to_string() const;
+
+    void append(std::string const& feature);
+    void append(font_feature const& feature) { features_.push_back(feature); }
+
+    const font_feature* get_features() const { return features_.data(); }
+    feature_vector::size_type count() const { return features_.size(); }
+    feature_vector const& features() const { return features_; }
+
+private:
+    feature_vector features_;
+};
+
+template <typename charT, typename traits>
+std::basic_ostream<charT, traits> &
+operator<< ( std::basic_ostream<charT, traits> & s, mapnik::font_feature_settings const& f )
+{
+    s << f.to_string();
+    return s;
+}
+
+inline bool operator==(font_feature_settings const& lhs, font_feature_settings const& rhs)
+{
+    return (lhs.features() == rhs.features());
+}
+
+constexpr unsigned int font_feature_range_global_start = 0u;
+static const unsigned int font_feature_range_global_end = std::numeric_limits<unsigned int>::max();
+
+constexpr hb_feature_t font_feature_liga_off = { HB_TAG('l', 'i', 'g', 'a'), 0, font_feature_range_global_start, font_feature_range_global_end };
+
+} // mapnik namespace
+
+#endif // MAPNIK_FONT_FEATURE_SETTINGS_HPP
diff --git a/include/mapnik/text/font_library.hpp b/include/mapnik/text/font_library.hpp
new file mode 100644
index 0000000..b31efe6
--- /dev/null
+++ b/include/mapnik/text/font_library.hpp
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_FONT_LIBRARY_HPP
+#define MAPNIK_FONT_LIBRARY_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// stl
+#include <memory>
+
+struct FT_LibraryRec_;
+struct FT_MemoryRec_;
+
+namespace mapnik {
+
+class MAPNIK_DECL font_library : public noncopyable
+{
+public:
+    explicit font_library();
+    ~font_library();
+    FT_LibraryRec_ * get();
+private:
+    FT_LibraryRec_ * library_;
+    std::unique_ptr<FT_MemoryRec_> memory_;
+};
+
+}
+
+#endif // MAPNIK_FONT_LIBRARY_HPP
diff --git a/include/mapnik/text/formatting/base.hpp b/include/mapnik/text/formatting/base.hpp
new file mode 100644
index 0000000..7859e6b
--- /dev/null
+++ b/include/mapnik/text/formatting/base.hpp
@@ -0,0 +1,61 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef FORMATTING_BASE_HPP
+#define FORMATTING_BASE_HPP
+
+// mapnik
+#include <mapnik/expression.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/text/evaluated_format_properties_ptr.hpp>
+
+// boost
+#include <boost/property_tree/ptree_fwd.hpp>
+
+// stl
+#include <memory>
+#include <map>
+
+namespace mapnik {
+
+class text_layout;
+class feature_impl;
+class xml_node;
+class font_set;
+
+namespace formatting {
+
+class node;
+using node_ptr = std::shared_ptr<node>;
+using fontset_map = std::map<std::string, font_set>;
+
+class MAPNIK_DECL node
+{
+public:
+    virtual ~node() {}
+    virtual void to_xml(boost::property_tree::ptree & xml) const = 0;
+    static node_ptr from_xml(xml_node const& xml, fontset_map const& fontsets);
+    virtual void apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout & output) const = 0;
+    virtual void add_expressions(expression_set & output) const = 0;
+};
+} //ns formatting
+} //ns mapnik
+#endif // FORMATTING_BASE_HPP
diff --git a/include/mapnik/text/formatting/format.hpp b/include/mapnik/text/formatting/format.hpp
new file mode 100644
index 0000000..7f53768
--- /dev/null
+++ b/include/mapnik/text/formatting/format.hpp
@@ -0,0 +1,70 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef FORMATTING_FORMAT_HPP
+#define FORMATTING_FORMAT_HPP
+
+// mapnik
+#include <mapnik/text/formatting/base.hpp>
+#include <mapnik/text/text_properties.hpp>
+
+// boost
+#include <boost/property_tree/ptree_fwd.hpp>
+
+namespace mapnik {
+
+class feature_impl;
+
+namespace formatting {
+
+class MAPNIK_DECL format_node: public node
+{
+public:
+    void to_xml(boost::property_tree::ptree & xml) const;
+    static node_ptr from_xml(xml_node const& xml, fontset_map const& fontsets);
+    virtual void apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout & output) const;
+    virtual void add_expressions(expression_set & output) const;
+
+    void set_child(node_ptr child);
+    node_ptr get_child() const;
+
+    boost::optional<std::string> face_name;
+    boost::optional<font_set> fontset;
+    boost::optional<symbolizer_base::value_type> text_size;
+    boost::optional<symbolizer_base::value_type> character_spacing;
+    boost::optional<symbolizer_base::value_type> line_spacing;
+    boost::optional<symbolizer_base::value_type> text_opacity;
+    boost::optional<symbolizer_base::value_type> wrap_before;
+    boost::optional<symbolizer_base::value_type> repeat_wrap_char;
+    boost::optional<symbolizer_base::value_type> text_transform;
+    boost::optional<symbolizer_base::value_type> fill;
+    boost::optional<symbolizer_base::value_type> halo_fill;
+    boost::optional<symbolizer_base::value_type> halo_radius;
+    boost::optional<symbolizer_base::value_type> ff_settings;
+
+private:
+    node_ptr child_;
+};
+} //ns formatting
+} //ns mapnik
+
+#endif // FORMATTING_FORMAT_HPP
diff --git a/include/mapnik/text/formatting/layout.hpp b/include/mapnik/text/formatting/layout.hpp
new file mode 100644
index 0000000..14cadca
--- /dev/null
+++ b/include/mapnik/text/formatting/layout.hpp
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef FORMATTING_OFFSET_HPP
+#define FORMATTING_OFFSET_HPP
+
+#include <mapnik/text/formatting/base.hpp>
+#include <mapnik/text/text_properties.hpp>
+
+#include <boost/optional.hpp>
+
+namespace mapnik { namespace formatting {
+
+class MAPNIK_DECL layout_node: public node
+{
+public:
+    void to_xml(boost::property_tree::ptree &xml) const;
+    static node_ptr from_xml(xml_node const& xml, fontset_map const& fontsets);
+    virtual void apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout &output) const;
+    virtual void add_expressions(expression_set &output) const;
+    void set_child(node_ptr child);
+    node_ptr get_child() const;
+    //
+    boost::optional<symbolizer_base::value_type> dx;
+    boost::optional<symbolizer_base::value_type> dy;
+    boost::optional<symbolizer_base::value_type> halign;
+    boost::optional<symbolizer_base::value_type> valign;
+    boost::optional<symbolizer_base::value_type> jalign;
+    boost::optional<symbolizer_base::value_type> text_ratio;
+    boost::optional<symbolizer_base::value_type> wrap_width;
+    boost::optional<symbolizer_base::value_type> wrap_char;
+    boost::optional<symbolizer_base::value_type> wrap_before;
+    boost::optional<symbolizer_base::value_type> repeat_wrap_char;
+    boost::optional<symbolizer_base::value_type> rotate_displacement;
+    boost::optional<symbolizer_base::value_type> orientation;
+
+private:
+    node_ptr child_;
+};
+} //ns formatting
+} //ns mapnik
+
+#endif // FORMATTING_OFFSET_HPP
diff --git a/include/mapnik/text/formatting/list.hpp b/include/mapnik/text/formatting/list.hpp
new file mode 100644
index 0000000..c23a717
--- /dev/null
+++ b/include/mapnik/text/formatting/list.hpp
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef FORMATTING_LIST_HPP
+#define FORMATTING_LIST_HPP
+
+// mapnik
+#include <mapnik/text/formatting/base.hpp>
+
+// boost
+#include <boost/property_tree/ptree_fwd.hpp>
+
+// stl
+#include <vector>
+
+namespace mapnik {
+
+class feature_impl;
+
+namespace formatting {
+class MAPNIK_DECL list_node: public node {
+public:
+    list_node() : node(), children_() {}
+    virtual void to_xml(boost::property_tree::ptree &xml) const;
+    virtual void apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout &output) const;
+    virtual void add_expressions(expression_set &output) const;
+
+    void push_back(node_ptr n);
+    void set_children(std::vector<node_ptr> const& children);
+    std::vector<node_ptr> const& get_children() const;
+    void clear();
+protected:
+    std::vector<node_ptr> children_;
+};
+} //ns formatting
+} //ns mapnik
+
+#endif // FORMATTING_LIST_HPP
diff --git a/include/mapnik/text/formatting/registry.hpp b/include/mapnik/text/formatting/registry.hpp
new file mode 100644
index 0000000..c6a71c7
--- /dev/null
+++ b/include/mapnik/text/formatting/registry.hpp
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef FORMATTING_REGISTRY_HPP
+#define FORMATTING_REGISTRY_HPP
+
+// mapnik
+#include <mapnik/utils.hpp>
+#include <mapnik/text/formatting/base.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// stl
+#include <string>
+#include <map>
+
+namespace mapnik
+{
+namespace formatting
+{
+
+using from_xml_function_ptr = node_ptr (*) (xml_node const&, fontset_map const&) ;
+
+class registry : public singleton<registry, CreateStatic>,
+                 private mapnik::noncopyable
+{
+public:
+    registry();
+    ~registry() {}
+    void register_name(std::string const& name, from_xml_function_ptr ptr, bool overwrite=false);
+    node_ptr from_xml(xml_node const& xml, fontset_map const & fontsets);
+private:
+    std::map<std::string, from_xml_function_ptr> map_;
+};
+
+} //ns formatting
+} //ns mapnik
+#endif // FORMATTING_REGISTRY_HPP
diff --git a/include/mapnik/text/formatting/text.hpp b/include/mapnik/text/formatting/text.hpp
new file mode 100644
index 0000000..a7c6b1c
--- /dev/null
+++ b/include/mapnik/text/formatting/text.hpp
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef FORMATTING_TEXT_HPP
+#define FORMATTING_TEXT_HPP
+
+// mapnik
+#include <mapnik/text/formatting/base.hpp>
+
+// boost
+#include <boost/property_tree/ptree_fwd.hpp>
+
+namespace mapnik {
+
+class feature_impl;
+
+namespace formatting {
+class MAPNIK_DECL text_node: public node {
+public:
+    text_node(expression_ptr text): node(), text_(text) {}
+    text_node(std::string text): node(), text_(parse_expression(text)) {}
+    void to_xml(boost::property_tree::ptree &xml) const;
+    static node_ptr from_xml(xml_node const& xml, fontset_map const& fontsets);
+    virtual void apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout &output) const;
+    virtual void add_expressions(expression_set &output) const;
+
+    void set_text(expression_ptr text);
+    expression_ptr get_text() const;
+private:
+    expression_ptr text_;
+};
+} //ns formatting
+} //ns mapnik
+
+#endif // FORMATTING_TEXT_HPP
diff --git a/include/mapnik/text/glyph_info.hpp b/include/mapnik/text/glyph_info.hpp
new file mode 100644
index 0000000..0daf7bb
--- /dev/null
+++ b/include/mapnik/text/glyph_info.hpp
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_GLYPH_INFO_HPP
+#define MAPNIK_GLYPH_INFO_HPP
+
+//mapnik
+#include <mapnik/text/evaluated_format_properties_ptr.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/noncopyable.hpp>
+
+#include <memory>
+#include <cmath>
+
+namespace mapnik
+{
+
+class font_face;
+using face_ptr = std::shared_ptr<font_face>;
+
+struct glyph_info : noncopyable
+{
+    glyph_info(unsigned g_index,
+               unsigned c_index,
+               evaluated_format_properties_ptr const& f)
+        : glyph_index(g_index),
+          char_index(c_index),
+          format(f),
+          face(nullptr),
+          unscaled_ymin(0.0),
+          unscaled_ymax(0.0),
+          unscaled_advance(0.0),
+          unscaled_line_height(0.0),
+          scale_multiplier(1.0),
+          offset() {}
+    glyph_info(glyph_info && rhs)
+        : glyph_index(std::move(rhs.glyph_index)),
+          char_index(std::move(rhs.char_index)),
+          format(rhs.format), // take ref
+          face(std::move(rhs.face)), // shared_ptr move just ref counts, right?
+          unscaled_ymin(std::move(rhs.unscaled_ymin)),
+          unscaled_ymax(std::move(rhs.unscaled_ymax)),
+          unscaled_advance(std::move(rhs.unscaled_advance)),
+          unscaled_line_height(std::move(rhs.unscaled_line_height)),
+          scale_multiplier(std::move(rhs.scale_multiplier)),
+          offset(std::move(rhs.offset)) {}
+
+    unsigned glyph_index;
+    // Position in the string of all characters i.e. before itemizing
+    unsigned char_index;
+    evaluated_format_properties_ptr const& format;
+    face_ptr face;
+    double unscaled_ymin;
+    double unscaled_ymax;
+    double unscaled_advance;
+    // Line height returned by freetype, includes normal font
+    // line spacing, but not additional user defined spacing
+    double unscaled_line_height;
+    double scale_multiplier;
+    pixel_position offset;
+
+    double ymin() const { return unscaled_ymin * 64.0 * scale_multiplier; }
+    double ymax() const { return unscaled_ymax * 64.0 * scale_multiplier; }
+    double height() const { return ymax() - ymin(); };
+    double advance() const { return unscaled_advance * scale_multiplier; };
+    double line_height() const { return unscaled_line_height * scale_multiplier; };
+};
+
+} //ns mapnik
+
+#endif // GLYPH_INFO_HPP
diff --git a/include/mapnik/text/glyph_positions.hpp b/include/mapnik/text/glyph_positions.hpp
new file mode 100644
index 0000000..2db077b
--- /dev/null
+++ b/include/mapnik/text/glyph_positions.hpp
@@ -0,0 +1,95 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_PLACEMENTS_LIST_HPP
+#define MAPNIK_PLACEMENTS_LIST_HPP
+//mapnik
+#include <mapnik/box2d.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/text/rotation.hpp>
+#include <mapnik/marker_cache.hpp>
+
+// agg
+#include "agg_trans_affine.h"
+
+//stl
+#include <vector>
+#include <list>
+
+namespace mapnik
+{
+
+struct glyph_info;
+
+struct glyph_position
+{
+    glyph_position(glyph_info const& _glyph, pixel_position const& _pos, rotation const& _rot)
+        : glyph(_glyph), pos(_pos), rot(_rot) { }
+    glyph_info const& glyph;
+    pixel_position pos;
+    rotation rot;
+};
+
+struct marker_info
+{
+    marker_info() : marker(), transform() {}
+    marker_info(marker_ptr _marker, agg::trans_affine const& _transform) :
+        marker(_marker), transform(_transform) {}
+    marker_ptr marker;
+    agg::trans_affine transform;
+};
+using marker_info_ptr = std::shared_ptr<marker_info>;
+
+/** Stores positions of glphys.
+ *
+ * The actual glyphs and their format are stored in text_layout.
+ */
+class glyph_positions
+{
+public:
+    using const_iterator = std::vector<glyph_position>::const_iterator;
+    glyph_positions();
+
+    std::size_t size() const { return data_.size(); };
+    const_iterator begin() const;
+    const_iterator end() const;
+
+    void emplace_back(glyph_info const& glyph, pixel_position offset, rotation const& rot);
+    void reserve(unsigned count);
+
+    pixel_position const& get_base_point() const;
+    void set_base_point(pixel_position const& base_point);
+    void set_marker(marker_info_ptr marker, pixel_position const& marker_pos);
+    marker_info_ptr marker() const;
+    pixel_position const& marker_pos() const;
+    box2d<double> const & bbox() const;
+private:
+    std::vector<glyph_position> data_;
+    pixel_position base_point_;
+    marker_info_ptr marker_;
+    pixel_position marker_pos_;
+    box2d<double> bbox_;
+};
+using glyph_positions_ptr = std::shared_ptr<glyph_positions>;
+
+using placements_list = std::list<glyph_positions_ptr>;
+}
+#endif // PLACEMENTS_LIST_HPP
diff --git a/include/mapnik/text/harfbuzz_shaper.hpp b/include/mapnik/text/harfbuzz_shaper.hpp
new file mode 100644
index 0000000..443f59b
--- /dev/null
+++ b/include/mapnik/text/harfbuzz_shaper.hpp
@@ -0,0 +1,151 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_HARFBUZZ_SHAPER_HPP
+#define MAPNIK_HARFBUZZ_SHAPER_HPP
+
+// mapnik
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/text_line.hpp>
+#include <mapnik/text/face.hpp>
+#include <mapnik/text/font_feature_settings.hpp>
+
+// stl
+#include <list>
+#include <type_traits>
+
+// harfbuzz
+#include <harfbuzz/hb.h>
+#include <harfbuzz/hb-ft.h>
+
+namespace mapnik
+{
+
+static inline hb_script_t _icu_script_to_script(UScriptCode script)
+{
+    if (script == USCRIPT_INVALID_CODE) return HB_SCRIPT_INVALID;
+	return hb_script_from_string(uscript_getShortName(script), -1);
+}
+
+static inline const uint16_t * uchar_to_utf16(const UChar* src)
+{
+   static_assert(sizeof(UChar) == sizeof(uint16_t),"UChar is eq size to uint16_t");
+#if defined(_MSC_VER)
+   return reinterpret_cast<const uint16_t *>(src);
+#else
+   return src;
+#endif
+}
+
+struct harfbuzz_shaper
+{
+static void shape_text(text_line & line,
+                       text_itemizer & itemizer,
+                       std::map<unsigned,double> & width_map,
+                       face_manager_freetype & font_manager,
+                       double scale_factor)
+{
+    unsigned start = line.first_char();
+    unsigned end = line.last_char();
+    size_t length = end - start;
+    if (!length) return;
+
+    std::list<text_item> const& list = itemizer.itemize(start, end);
+    if (list.empty()) return;
+
+    line.reserve(length);
+
+    auto hb_buffer_deleter = [](hb_buffer_t * buffer) { hb_buffer_destroy(buffer);};
+    const std::unique_ptr<hb_buffer_t, decltype(hb_buffer_deleter)> buffer(hb_buffer_create(),hb_buffer_deleter);
+    hb_buffer_pre_allocate(buffer.get(), length);
+    mapnik::value_unicode_string const& text = itemizer.text();
+
+    font_feature_settings const& ff_settings = list.front().format_->ff_settings;
+
+    for (auto const& text_item : list)
+    {
+        face_set_ptr face_set = font_manager.get_face_set(text_item.format_->face_name, text_item.format_->fontset);
+        double size = text_item.format_->text_size * scale_factor;
+        face_set->set_unscaled_character_sizes();
+        std::size_t num_faces = face_set->size();
+        std::size_t pos = 0;
+        for (auto const& face : *face_set)
+        {
+            ++pos;
+            hb_buffer_clear_contents(buffer.get());
+            hb_buffer_add_utf16(buffer.get(), uchar_to_utf16(text.getBuffer()), text.length(), text_item.start, text_item.end - text_item.start);
+            hb_buffer_set_direction(buffer.get(), (text_item.dir == UBIDI_RTL)?HB_DIRECTION_RTL:HB_DIRECTION_LTR);
+            hb_buffer_set_script(buffer.get(), _icu_script_to_script(text_item.script));
+            hb_font_t *font(hb_ft_font_create(face->get_face(), nullptr));
+            hb_shape(font, buffer.get(), ff_settings.get_features(), ff_settings.count());
+            hb_font_destroy(font);
+
+            unsigned num_glyphs = hb_buffer_get_length(buffer.get());
+
+            hb_glyph_info_t *glyphs = hb_buffer_get_glyph_infos(buffer.get(), nullptr);
+            hb_glyph_position_t *positions = hb_buffer_get_glyph_positions(buffer.get(), nullptr);
+
+            bool font_has_all_glyphs = true;
+            // Check if all glyphs are valid.
+            for (unsigned i=0; i<num_glyphs; ++i)
+            {
+                if (!glyphs[i].codepoint)
+                {
+                    font_has_all_glyphs = false;
+                    break;
+                }
+            }
+            if (!font_has_all_glyphs && (pos < num_faces))
+            {
+                //Try next font in fontset
+                continue;
+            }
+
+            double max_glyph_height = 0;
+            for (unsigned i=0; i<num_glyphs; ++i)
+            {
+                auto const& pos = positions[i];
+                auto const& glyph = glyphs[i];
+                unsigned char_index = glyph.cluster;
+                glyph_info g(glyph.codepoint,char_index,text_item.format_);
+                if (face->glyph_dimensions(g))
+                {
+                    g.face = face;
+                    g.scale_multiplier = size / face->get_face()->units_per_EM;
+                    //Overwrite default advance with better value provided by HarfBuzz
+                    g.unscaled_advance = pos.x_advance;
+                    g.offset.set(pos.x_offset * g.scale_multiplier, pos.y_offset * g.scale_multiplier);
+                    double tmp_height = g.height();
+                    if (tmp_height > max_glyph_height) max_glyph_height = tmp_height;
+                    width_map[char_index] += g.advance();
+                    line.add_glyph(std::move(g), scale_factor);
+                }
+            }
+            line.update_max_char_height(max_glyph_height);
+            break; //When we reach this point the current font had all glyphs.
+        }
+    }
+}
+};
+} // namespace mapnik
+
+#endif // MAPNIK_HARFBUZZ_SHAPER_HPP
diff --git a/include/mapnik/text/icu_shaper.hpp b/include/mapnik/text/icu_shaper.hpp
new file mode 100644
index 0000000..e672eaa
--- /dev/null
+++ b/include/mapnik/text/icu_shaper.hpp
@@ -0,0 +1,125 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_ICU_SHAPER_HPP
+#define MAPNIK_ICU_SHAPER_HPP
+
+// mapnik
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/text_line.hpp>
+#include <mapnik/text/face.hpp>
+#include <mapnik/debug.hpp>
+
+// stl
+#include <list>
+
+// icu
+#include <unicode/unistr.h>
+#include <unicode/ushape.h>
+#include <unicode/schriter.h>
+
+
+namespace mapnik
+{
+
+struct icu_shaper
+{
+static void shape_text(text_line & line,
+                       text_itemizer & itemizer,
+                       std::map<unsigned,double> & width_map,
+                       face_manager_freetype & font_manager,
+                       double scale_factor )
+{
+    unsigned start = line.first_char();
+    unsigned end = line.last_char();
+    size_t length = end - start;
+    if (!length) return;
+    line.reserve(length);
+    std::list<text_item> const& list = itemizer.itemize(start, end);
+    mapnik::value_unicode_string const& text = itemizer.text();
+    UErrorCode err = U_ZERO_ERROR;
+    mapnik::value_unicode_string shaped;
+    mapnik::value_unicode_string reordered;
+    unsigned char_index = 0;
+
+    for (auto const& text_item : list)
+    {
+        face_set_ptr face_set = font_manager.get_face_set(text_item.format->face_name, text_item.format->fontset);
+        double size = text_item.format->text_size * scale_factor;
+        face_set->set_unscaled_character_sizes();
+        for (auto const& face : *face_set)
+        {
+
+            UBiDi *bidi = ubidi_openSized(length, 0, &err);
+            ubidi_setPara(bidi, text.getBuffer() + start, length, UBIDI_DEFAULT_LTR, 0, &err);
+            ubidi_writeReordered(bidi, reordered.getBuffer(length),
+                                 length, UBIDI_DO_MIRRORING, &err);
+            ubidi_close(bidi);
+            reordered.releaseBuffer(length);
+
+            int32_t num_char = u_shapeArabic(reordered.getBuffer(), length,
+                                             shaped.getBuffer(length), length,
+                                             U_SHAPE_LETTERS_SHAPE | U_SHAPE_LENGTH_FIXED_SPACES_NEAR |
+                                             U_SHAPE_TEXT_DIRECTION_VISUAL_LTR, &err);
+            if (num_char < 0)
+            {
+                MAPNIK_LOG_ERROR(icu_shaper) << " u_shapeArabic returned negative num_char " << num_char;
+            }
+            std::size_t num_chars = static_cast<std::size_t>(num_char);
+            shaped.releaseBuffer(length);
+            bool shaped_status = true;
+            if (U_SUCCESS(err) && (num_chars == length))
+            {
+                U_NAMESPACE_QUALIFIER StringCharacterIterator iter(shaped);
+                for (iter.setToStart(); iter.hasNext();)
+                {
+                    UChar ch = iter.nextPostInc();
+                    glyph_info tmp;
+                    tmp.glyph_index = FT_Get_Char_Index(face->get_face(), ch);
+                    tmp.offset.clear();
+                    if (tmp.glyph_index == 0)
+                    {
+                        shaped_status = false;
+                        break;
+                    }
+                    if (face->glyph_dimensions(tmp))
+                    {
+                        tmp.char_index = char_index;
+                        tmp.face = face;
+                        tmp.format = text_item.format;
+                        tmp.scale_multiplier = size / face->get_face()->units_per_EM;
+                        width_map[char_index++] += tmp.advance();
+                        line.add_glyph(tmp, scale_factor);
+                    }
+                }
+            }
+            if (!shaped_status) continue;
+            line.update_max_char_height(face->get_char_height(size));
+            return;
+        }
+    }
+}
+
+};
+} //namespace mapnik
+
+#endif // MAPNIK_ICU_SHAPER_HPP
diff --git a/include/mapnik/text/itemizer.hpp b/include/mapnik/text/itemizer.hpp
new file mode 100644
index 0000000..e73ef92
--- /dev/null
+++ b/include/mapnik/text/itemizer.hpp
@@ -0,0 +1,118 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_TEXT_ITEMIZER_HPP
+#define MAPNIK_TEXT_ITEMIZER_HPP
+
+//mapnik
+#include <mapnik/text/evaluated_format_properties_ptr.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// stl
+#include <string>
+#include <list>
+#include <vector>
+
+// ICU
+#include <unicode/unistr.h>
+#include <unicode/uscript.h>
+#include <unicode/ubidi.h>
+
+namespace mapnik
+{
+
+struct text_item : noncopyable
+{
+    text_item(unsigned s,
+              unsigned e,
+              UScriptCode sc,
+              UBiDiDirection d,
+              evaluated_format_properties_ptr const& f)
+      : start(s),
+        end(e),
+        script(sc),
+        dir(d),
+        format_(f) {}
+    text_item( text_item && rhs)
+      : start(std::move(rhs.start)),
+        end(std::move(rhs.end)),
+        script(std::move(rhs.script)),
+        dir(std::move(rhs.dir)),
+        format_(rhs.format_) {}
+    unsigned start; // First char (UTF16 offset)
+    unsigned end; // Char _after_ the last char (UTF16 offset)
+    UScriptCode script;
+    UBiDiDirection dir;
+    evaluated_format_properties_ptr const& format_;
+};
+
+// This class splits text into parts which all have the same
+// - direction (LTR, RTL)
+// - format
+// - script (http://en.wikipedia.org/wiki/Scripts_in_Unicode)
+
+class text_itemizer
+{
+public:
+    text_itemizer();
+    void add_text(value_unicode_string const& str, evaluated_format_properties_ptr const& format);
+    std::list<text_item> const& itemize(unsigned start=0, unsigned end=0);
+    void clear();
+    value_unicode_string const& text() const { return text_; }
+    // Returns the start and end position of a certain line.
+    // Only forced line breaks with \n characters are handled here.
+    std::pair<unsigned, unsigned> line(unsigned i) const;
+    unsigned num_lines() const;
+private:
+    template<typename T> struct run : noncopyable
+    {
+        run(T const& data, unsigned start, unsigned end)
+            :  start(start), end(end), data(data) {}
+        unsigned start;
+        unsigned end;
+        T data;
+    };
+    using format_run_t = run<evaluated_format_properties_ptr const&>;
+    using direction_run_t = run<UBiDiDirection>;
+    using script_run_t = run<UScriptCode>;
+    using format_run_list = std::list<format_run_t>;
+    using script_run_list = std::list<script_run_t>;
+    using direction_run_list = std::list<direction_run_t>;
+    value_unicode_string text_;
+    /// Format runs are always sorted by char index
+    format_run_list format_runs_;
+    /// Directions runs are always in visual order! This is different from
+    /// format and script runs!
+    direction_run_list direction_runs_;
+    /// Script runs are always sorted by char index
+    script_run_list script_runs_;
+    void itemize_direction(unsigned start, unsigned end);
+    void itemize_script();
+    void create_item_list();
+    std::list<text_item> output_;
+    template <typename T> typename T::const_iterator find_run(T const& list, unsigned position);
+    std::vector<unsigned> forced_line_breaks_; //Positions of \n characters
+};
+} //ns mapnik
+
+#endif // TEXT_ITEMIZER_HPP
diff --git a/include/mapnik/text/placement_finder.hpp b/include/mapnik/text/placement_finder.hpp
new file mode 100644
index 0000000..f5c8635
--- /dev/null
+++ b/include/mapnik/text/placement_finder.hpp
@@ -0,0 +1,108 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_PLACEMENT_FINDER_HPP
+#define MAPNIK_PLACEMENT_FINDER_HPP
+
+//mapnik
+#include <mapnik/box2d.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/text/placements/base.hpp>
+#include <mapnik/text/glyph_positions.hpp>
+#include <mapnik/text/rotation.hpp>
+#include <mapnik/noncopyable.hpp>
+
+namespace mapnik
+{
+
+class label_collision_detector4;
+using DetectorType = label_collision_detector4;
+
+class feature_impl;
+class vertex_cache;
+class text_placement_info;
+struct glyph_info;
+
+class placement_finder : mapnik::noncopyable
+{
+public:
+    placement_finder(feature_impl const& feature,
+                     attributes const& attr,
+                     DetectorType & detector,
+                     box2d<double> const& extent,
+                     text_placement_info const& placement_info,
+                     face_manager_freetype & font_manager,
+                     double scale_factor);
+
+    // Try to place a single label at the given point.
+    bool find_point_placement(pixel_position const& pos);
+    // Iterate over the given path, placing line-following labels or point labels with respect to label_spacing.
+    template <typename T>
+    bool find_line_placements(T & path, bool points);
+    // Try next position alternative from placement_info.
+    bool next_position();
+
+    placements_list const& placements() const { return placements_; }
+
+    void set_marker(marker_info_ptr m, box2d<double> box, bool marker_unlocked, pixel_position const& marker_displacement);
+private:
+    bool single_line_placement(vertex_cache &pp, text_upright_e orientation);
+    // Moves dx pixels but makes sure not to fall of the end.
+    void path_move_dx(vertex_cache & pp, double dx);
+    // Normalize angle in range [-pi, +pi].
+    static double normalize_angle(double angle);
+    // Adjusts user defined spacing to place an integer number of labels.
+    double get_spacing(double path_length, double layout_width) const;
+    // Checks for collision.
+    bool collision(box2d<double> const& box, const value_unicode_string &repeat_key, bool line_placement) const;
+    // Adds marker to glyph_positions and to collision detector. Returns false if there is a collision.
+    bool add_marker(glyph_positions_ptr glyphs, pixel_position const& pos) const;
+    // Maps upright==auto, left_only and right_only to left,right to simplify processing.
+    // angle = angle of at start of line (to estimate best option for upright==auto)
+    text_upright_e simplify_upright(text_upright_e upright, double angle) const;
+    box2d<double> get_bbox(text_layout const& layout, glyph_info const& glyph, pixel_position const& pos, rotation const& rot);
+    feature_impl const& feature_;
+    attributes const& attr_;
+    DetectorType & detector_;
+    box2d<double> const& extent_;
+    text_placement_info const& info_;
+    evaluated_text_properties_ptr text_props_;
+    layout_container layouts_;
+
+    double scale_factor_;
+    face_manager_freetype &font_manager_;
+
+    placements_list placements_;
+
+    //ShieldSymbolizer
+    bool has_marker_;
+    marker_info_ptr marker_;
+    box2d<double> marker_box_;
+    bool marker_unlocked_;
+    pixel_position marker_displacement_;
+    double move_dx_ = 0.0;
+    horizontal_alignment_e horizontal_alignment_ = H_LEFT;
+};
+
+}//ns mapnik
+
+#endif // PLACEMENT_FINDER_HPP
diff --git a/include/mapnik/text/placement_finder_impl.hpp b/include/mapnik/text/placement_finder_impl.hpp
new file mode 100644
index 0000000..866a095
--- /dev/null
+++ b/include/mapnik/text/placement_finder_impl.hpp
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+//mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/expression_evaluator.hpp>
+#include <mapnik/text/placement_finder.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/glyph_positions.hpp>
+#include <mapnik/text/vertex_cache.hpp>
+#include <mapnik/text/tolerance_iterator.hpp>
+
+// agg
+#include "agg_conv_clip_polyline.h"
+
+// stl
+#include <vector>
+
+namespace mapnik
+{
+
+template <typename T>
+bool placement_finder::find_line_placements(T & path, bool points)
+{
+    if (!layouts_.line_count()) return true; //TODO
+    vertex_cache pp(path);
+
+    bool success = false;
+    while (pp.next_subpath())
+    {
+        if (points)
+        {
+            if (pp.length() <= 0.001)
+            {
+                success = find_point_placement(pp.current_position()) || success;
+                continue;
+            }
+        }
+        else
+        {
+            if ((pp.length() < text_props_->minimum_path_length * scale_factor_)
+                ||
+                (pp.length() <= 0.001) // Clipping removed whole geometry
+                ||
+                (pp.length() < layouts_.width()))
+                {
+                    continue;
+                }
+        }
+
+        double spacing = get_spacing(pp.length(), points ? 0. : layouts_.width());
+
+        //horizontal_alignment_e halign = layouts_.back()->horizontal_alignment();
+
+        // halign == H_LEFT -> don't move
+        if (horizontal_alignment_ == H_MIDDLE || horizontal_alignment_ == H_AUTO || horizontal_alignment_ == H_ADJUST)
+        {
+            if (!pp.forward(spacing / 2.0)) continue;
+        }
+        else if (horizontal_alignment_ == H_RIGHT)
+        {
+            if (!pp.forward(pp.length())) continue;
+        }
+
+        if (move_dx_ != 0.0) path_move_dx(pp, move_dx_);
+
+        do
+        {
+            tolerance_iterator tolerance_offset(text_props_->label_position_tolerance * scale_factor_, spacing); //TODO: Handle halign
+            while (tolerance_offset.next())
+            {
+                vertex_cache::scoped_state state(pp);
+                if (pp.move(tolerance_offset.get())
+                    && ((points && find_point_placement(pp.current_position()))
+                        || (!points && single_line_placement(pp, text_props_->upright))))
+                {
+                    success = true;
+                    break;
+                }
+            }
+        } while (pp.forward(spacing));
+    }
+    return success;
+}
+
+}// ns mapnik
diff --git a/include/mapnik/text/placements/base.hpp b/include/mapnik/text/placements/base.hpp
new file mode 100644
index 0000000..e46907e
--- /dev/null
+++ b/include/mapnik/text/placements/base.hpp
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef PLACEMENTS_BASE_HPP
+#define PLACEMENTS_BASE_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/formatting/base.hpp>
+
+namespace mapnik
+{
+using dimension_type = std::pair<double,double>;
+
+class MAPNIK_DECL text_placements;
+// Generate a possible placement.
+// This placement has first to be tested by placement_finder to verify it
+// can actually be used.
+
+class MAPNIK_DECL text_placement_info : mapnik::noncopyable
+{
+public:
+    // Constructor. Takes the parent text_placements object as a parameter
+    // to read defaults from it.
+    text_placement_info(text_placements const* parent, double scale_factor_);
+    // Get next placement.
+    // This function is also called before the first placement is tried.
+    // Each class has to return at least one position!
+    // If this functions returns false the placement data should be
+    // considered invalid!
+
+    virtual bool next() const = 0;
+    virtual ~text_placement_info() {}
+
+    // Properties actually used by placement finder and renderer. Values in
+    // here are modified each time next() is called.
+    mutable text_symbolizer_properties properties;
+
+    // Scale factor used by the renderer.
+    double scale_factor;
+
+};
+
+using text_placement_info_ptr = std::shared_ptr<text_placement_info>;
+
+// This object handles the management of all TextSymbolizer properties. It can
+// be used as a base class for own objects which implement new processing
+// semantics. Basically this class just makes sure a pointer of the right
+// class is returned by the get_placement_info call.
+
+class MAPNIK_DECL text_placements
+{
+public:
+    text_placements();
+    // Get a text_placement_info object to use in rendering.
+    // The returned object creates a list of settings which is
+    // used to try to find a placement and stores all
+    // information that is generated by
+    // the placement finder.
+
+    // This function usually is implemented as
+    // text_placement_info_ptr text_placements_XXX::get_placement_info() const
+    // {
+    //     return text_placement_info_ptr(new text_placement_info_XXX(this));
+    // }
+
+    virtual text_placement_info_ptr get_placement_info(double scale_factor) const = 0;
+    // Get a list of all expressions used in any placement.
+    // This function is used to collect attributes.
+
+    virtual void add_expressions(expression_set & output) const;
+
+    virtual ~text_placements() {}
+
+    // List of all properties used as the default for the subclasses.
+    text_symbolizer_properties defaults;
+};
+
+// Pointer to object of class text_placements
+using text_placements_ptr = std::shared_ptr<text_placements>;
+
+} //ns mapnik
+
+#endif // PLACEMENTS_BASE_HPP
diff --git a/include/mapnik/text/placements/dummy.hpp b/include/mapnik/text/placements/dummy.hpp
new file mode 100644
index 0000000..b56634b
--- /dev/null
+++ b/include/mapnik/text/placements/dummy.hpp
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef PLACEMENTS_DUMMY_HPP
+#define PLACEMENTS_DUMMY_HPP
+
+// mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/text/placements/base.hpp>
+
+namespace mapnik
+{
+
+class text_placement_info_dummy;
+
+// Dummy placement algorithm. Always takes the default value.
+class MAPNIK_DECL text_placements_dummy: public text_placements
+{
+public:
+    text_placement_info_ptr get_placement_info(double scale_factor) const;
+    friend class text_placement_info_dummy;
+};
+
+// Placement info object for dummy placement algorithm. Always takes the default value.
+class MAPNIK_DECL text_placement_info_dummy : public text_placement_info
+{
+public:
+    text_placement_info_dummy(text_placements_dummy const* parent, double scale_factor)
+        : text_placement_info(parent, scale_factor),
+        state(0) {}
+    bool next() const;
+private:
+    mutable unsigned state;
+};
+
+} //ns mapnik
+
+#endif // PLACEMENTS_DUMMY_HPP
diff --git a/include/mapnik/text/placements/list.hpp b/include/mapnik/text/placements/list.hpp
new file mode 100644
index 0000000..2ef2ede
--- /dev/null
+++ b/include/mapnik/text/placements/list.hpp
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef TEXT_PLACEMENTS_LIST_HPP
+#define TEXT_PLACEMENTS_LIST_HPP
+#include <mapnik/text/placements/base.hpp>
+
+namespace mapnik {
+
+class text_placement_info_list;
+
+
+// Tries a list of placements.
+class text_placements_list: public text_placements
+{
+public:
+    text_placements_list();
+    text_placement_info_ptr get_placement_info(double scale_factor) const;
+    virtual void add_expressions(expression_set & output) const;
+    text_symbolizer_properties & add();
+    text_symbolizer_properties & get(unsigned i);
+    unsigned size() const;
+    static text_placements_ptr from_xml(xml_node const& xml, fontset_map const& fontsets, bool is_shield);
+private:
+    std::vector<text_symbolizer_properties> list_;
+    friend class text_placement_info_list;
+};
+
+// List placement strategy.
+// See parent class for documentation of each function.
+class text_placement_info_list : public text_placement_info
+{
+public:
+    text_placement_info_list(text_placements_list const* parent, double scale_factor) :
+        text_placement_info(parent, scale_factor),
+        state(0), parent_(parent) {}
+    bool next() const;
+private:
+    mutable unsigned state;
+    text_placements_list const* parent_;
+};
+
+
+} //namespace
+#endif
diff --git a/include/mapnik/text/placements/registry.hpp b/include/mapnik/text/placements/registry.hpp
new file mode 100644
index 0000000..eb0c257
--- /dev/null
+++ b/include/mapnik/text/placements/registry.hpp
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef PLACEMENTS_REGISTRY_HPP
+#define PLACEMENTS_REGISTRY_HPP
+
+// mapnik
+#include <mapnik/utils.hpp>
+#include <mapnik/text/placements/base.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// stl
+#include <string>
+#include <map>
+
+namespace mapnik
+{
+namespace placements
+{
+
+using from_xml_function_ptr = text_placements_ptr (*) (xml_node const&, fontset_map const&, bool) ;
+
+class registry : public singleton<registry, CreateStatic>,
+                 private mapnik::noncopyable
+{
+public:
+    registry();
+    ~registry() {}
+    void register_name(std::string name, from_xml_function_ptr ptr, bool overwrite=false);
+    text_placements_ptr from_xml(std::string name,
+                                 xml_node const& xml,
+                                 fontset_map const & fontsets,
+                                 bool is_shield);
+private:
+    std::map<std::string, from_xml_function_ptr> map_;
+};
+
+} //ns placements
+} //ns mapnik
+#endif // PLACEMENTS_REGISTRY_HPP
diff --git a/include/mapnik/text/placements/simple.hpp b/include/mapnik/text/placements/simple.hpp
new file mode 100644
index 0000000..ff3cdf6
--- /dev/null
+++ b/include/mapnik/text/placements/simple.hpp
@@ -0,0 +1,69 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_TEXT_PLACEMENTS_SIMPLE_HPP
+#define MAPNIK_TEXT_PLACEMENTS_SIMPLE_HPP
+
+// mapnik
+#include <mapnik/text/placements/base.hpp>
+
+namespace mapnik {
+
+class text_placement_info_simple;
+
+// Automatically generates placement options from a user selected list of directions and text sizes.
+class text_placements_simple: public text_placements
+{
+public:
+    text_placements_simple();
+    text_placements_simple(std::string const& positions);
+    text_placement_info_ptr get_placement_info(double scale_factor) const;
+    void set_positions(std::string const& positions);
+    std::string get_positions();
+    static text_placements_ptr from_xml(xml_node const &xml, fontset_map const & fontsets, bool is_shield);
+private:
+    std::string positions_;
+    std::vector<directions_e> direction_;
+    std::vector<int> text_sizes_;
+    friend class text_placement_info_simple;
+};
+
+// Simple placement strategy.
+// See parent class for documentation of each function.
+class text_placement_info_simple : public text_placement_info
+{
+public:
+    text_placement_info_simple(text_placements_simple const* parent,
+                               double scale_factor)
+        : text_placement_info(parent, scale_factor),
+          state(0), position_state(0), parent_(parent) {}
+    bool next() const;
+protected:
+    bool next_position_only() const;
+    mutable unsigned state;
+    mutable unsigned position_state;
+    text_placements_simple const* parent_;
+};
+
+} //namespace
+
+#endif // MAPNIK_TEXT_PLACEMENTS_SIMPLE_HPP
diff --git a/include/mapnik/text/properties_util.hpp b/include/mapnik/text/properties_util.hpp
new file mode 100644
index 0000000..a28a23f
--- /dev/null
+++ b/include/mapnik/text/properties_util.hpp
@@ -0,0 +1,139 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_PROPERTIES_UTIL_HPP
+#define MAPNIK_PROPERTIES_UTIL_HPP
+
+#include <mapnik/symbolizer_base.hpp>
+#include <mapnik/xml_node.hpp>
+#include <mapnik/config_error.hpp>
+#include <boost/optional.hpp>
+#include <string>
+
+// boost
+#include <boost/property_tree/ptree_fwd.hpp>
+
+namespace mapnik { namespace detail {
+
+template <typename T, class Enable = void>
+struct is_mapnik_enumeration
+{
+    static constexpr bool value = false;
+};
+
+template <typename T>
+struct is_mapnik_enumeration<T, typename std::enable_if<std::is_enum<typename T::native_type>::value>::type>
+{
+    static constexpr bool value = true;
+};
+
+template <typename T0, bool is_mapnik_enumeration = false>
+struct set_property_from_xml_impl
+{
+    using target_type = T0;
+    template <typename T1>
+    static void apply(T1 & val, char const* name, xml_node const& node)
+    {
+        try
+        {
+            boost::optional<target_type> val_ = node.get_opt_attr<target_type>(name);
+            if (val_) val = *val_;
+        }
+        catch (config_error const& ex)
+        {
+            boost::optional<expression_ptr> val_ = node.get_opt_attr<expression_ptr>(name);
+            if (val_) val = *val_;
+            else
+            {
+                ex.append_context(std::string("set_property_from_xml'"+ std::string(name) + "'"), node);
+            }
+        }
+    }
+};
+
+
+template <>
+struct set_property_from_xml_impl<std::string,false>
+{
+    using target_type = std::string;
+    template <typename T1>
+    static void apply(T1 & val, char const* name, xml_node const& node)
+    {
+        try
+        {
+            boost::optional<expression_ptr> val_ = node.get_opt_attr<expression_ptr>(name);
+            if (val_) val = *val_;
+        }
+        catch (config_error const& ex)
+        {
+            boost::optional<target_type> val_ = node.get_opt_attr<target_type>(name);
+            if (val_) val = *val_;
+            else
+            {
+                ex.append_context(std::string("set_property_from_xml'"+ std::string(name) + "'"), node);
+            }
+        }
+    }
+};
+
+template <typename T0>
+struct set_property_from_xml_impl<T0, true>
+{
+    using target_enum_type = T0;
+    template <typename T1>
+    static void apply(T1 & val, char const* name, xml_node const& node)
+    {
+        try
+        {
+            boost::optional<std::string> enum_str = node.get_opt_attr<std::string>(name);
+            if (enum_str)
+            {
+                target_enum_type e;
+                e.from_string(*enum_str);
+                val = enumeration_wrapper(e);
+            }
+        }
+        catch (...)
+        {
+            boost::optional<expression_ptr> expr = node.get_opt_attr<expression_ptr>(name);
+            if (expr) val = *expr;
+            else
+            {
+                throw config_error(std::string("set_property_from_xml'"+ std::string(name)));
+            }
+        }
+    }
+};
+
+} // namespace detail
+
+template <typename T0, typename T1>
+void set_property_from_xml(T1 & val, char const* name, xml_node const& node)
+{
+    detail::set_property_from_xml_impl<T0, detail::is_mapnik_enumeration<T0>::value>::apply(val, name, node);
+}
+
+void serialize_property(std::string const& name, symbolizer_base::value_type const& val, boost::property_tree::ptree & node);
+
+} // namespace mapnik
+
+#endif // MAPNIK_PROPERTIES_UTIL_HPP
diff --git a/include/mapnik/text/renderer.hpp b/include/mapnik/text/renderer.hpp
new file mode 100644
index 0000000..bc6ee37
--- /dev/null
+++ b/include/mapnik/text/renderer.hpp
@@ -0,0 +1,109 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_TEXT_RENDERER_HPP
+#define MAPNIK_TEXT_RENDERER_HPP
+
+// mapnik
+#include <mapnik/text/placement_finder.hpp>
+#include <mapnik/image_compositing.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/noncopyable.hpp>
+// agg
+#include <agg_trans_affine.h>
+
+// freetype2
+extern "C"
+{
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_STROKER_H
+}
+
+namespace mapnik
+{
+
+struct glyph_t
+{
+    FT_Glyph image;
+    detail::evaluated_format_properties const& properties;
+    glyph_t(FT_Glyph image_, detail::evaluated_format_properties const& properties_)
+        : image(image_), properties(properties_) {}
+};
+
+class text_renderer : private mapnik::noncopyable
+{
+public:
+    text_renderer (halo_rasterizer_e rasterizer,
+                   composite_mode_e comp_op = src_over,
+                   composite_mode_e halo_comp_op = src_over,
+                   double scale_factor=1.0,
+                   stroker_ptr stroker=stroker_ptr());
+    void set_transform(agg::trans_affine const& transform);
+    void set_halo_transform(agg::trans_affine const& halo_transform);
+protected:
+    using glyph_vector = std::vector<glyph_t>;
+    void prepare_glyphs(glyph_positions const& positions);
+    halo_rasterizer_e rasterizer_;
+    composite_mode_e comp_op_;
+    composite_mode_e halo_comp_op_;
+    double scale_factor_;
+    glyph_vector glyphs_;
+    stroker_ptr stroker_;
+    agg::trans_affine transform_;
+    agg::trans_affine halo_transform_;
+};
+
+template <typename T>
+class agg_text_renderer : public text_renderer
+{
+public:
+    using pixmap_type = T;
+    agg_text_renderer (pixmap_type & pixmap, halo_rasterizer_e rasterizer,
+                       composite_mode_e comp_op = src_over,
+                       composite_mode_e halo_comp_op = src_over,
+                       double scale_factor = 1.0,
+                       stroker_ptr stroker = stroker_ptr());
+    void render(glyph_positions const& positions);
+private:
+    pixmap_type & pixmap_;
+    void render_halo(FT_Bitmap_ *bitmap, unsigned rgba, int x, int y,
+                     double halo_radius, double opacity,
+                     composite_mode_e comp_op);
+};
+
+template <typename T>
+class grid_text_renderer : public text_renderer
+{
+public:
+    using pixmap_type = T;
+    grid_text_renderer (pixmap_type & pixmap,
+                        composite_mode_e comp_op = src_over,
+                        double scale_factor = 1.0);
+    void render(glyph_positions const& positions, value_integer feature_id);
+private:
+    pixmap_type & pixmap_;
+    void render_halo_id(FT_Bitmap_ *bitmap, mapnik::value_integer feature_id, int x, int y, int halo_radius);
+};
+
+}
+#endif // RENDERER_HPP
diff --git a/include/mapnik/text/rotation.hpp b/include/mapnik/text/rotation.hpp
new file mode 100644
index 0000000..294eed0
--- /dev/null
+++ b/include/mapnik/text/rotation.hpp
@@ -0,0 +1,23 @@
+#ifndef MAPNIK_ROTATION_HPP
+#define MAPNIK_ROTATION_HPP
+
+#include <cmath>
+
+namespace mapnik
+{
+
+struct rotation
+{
+    rotation() : sin(0), cos(1.) { }
+    rotation(double sin_, double cos_) : sin(sin_), cos(cos_) { }
+    rotation(double angle) : sin(std::sin(angle)), cos(std::cos(angle)) {}
+    void reset() { sin = 0.; cos = 1.;}
+    void init(double angle) { sin = std::sin(angle); cos = std::cos(angle); }
+    double sin;
+    double cos;
+    rotation operator~() const { return rotation(sin, -cos); }
+    rotation operator!() const { return rotation(-sin, cos); }
+};
+}
+
+#endif // ROTATION_HPP
diff --git a/include/mapnik/text/scrptrun.hpp b/include/mapnik/text/scrptrun.hpp
new file mode 100644
index 0000000..c8acec6
--- /dev/null
+++ b/include/mapnik/text/scrptrun.hpp
@@ -0,0 +1,157 @@
+/*
+ *******************************************************************************
+ *
+ *   Copyright (C) 1999-2003, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *
+ *******************************************************************************
+ *   file name:  scrptrun.h
+ *
+ *   created on: 10/17/2001
+ *   created by: Eric R. Mader
+ *
+ * NOTE: This file is copied from ICU.
+ * http://source.icu-project.org/repos/icu/icu/trunk/license.html
+ */
+
+#ifndef __SCRPTRUN_H
+#define __SCRPTRUN_H
+
+#include "unicode/utypes.h"
+#include "unicode/uobject.h"
+#include "unicode/uscript.h"
+
+struct ScriptRecord
+{
+    UChar32 startChar;
+    UChar32 endChar;
+    UScriptCode scriptCode;
+};
+
+struct ParenStackEntry
+{
+    int32_t pairIndex;
+    UScriptCode scriptCode;
+};
+
+class ScriptRun : public UObject {
+public:
+    ScriptRun();
+
+    ScriptRun(const UChar chars[], int32_t length);
+
+    ScriptRun(const UChar chars[], int32_t start, int32_t length);
+
+    void reset();
+
+    void reset(int32_t start, int32_t count);
+
+    void reset(const UChar chars[], int32_t start, int32_t length);
+
+    int32_t getScriptStart();
+
+    int32_t getScriptEnd();
+
+    UScriptCode getScriptCode();
+
+    UBool next();
+
+    /**
+     * ICU "poor man's RTTI", returns a UClassID for the actual class.
+     *
+     * @stable ICU 2.2
+     */
+    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+
+    /**
+     * ICU "poor man's RTTI", returns a UClassID for this class.
+     *
+     * @stable ICU 2.2
+     */
+    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+
+private:
+
+    static UBool sameScript(int32_t scriptOne, int32_t scriptTwo);
+
+    int32_t charStart;
+    int32_t charLimit;
+    const UChar *charArray;
+
+    int32_t scriptStart;
+    int32_t scriptEnd;
+    UScriptCode scriptCode;
+
+    ParenStackEntry parenStack[128];
+    int32_t parenSP;
+
+    static int8_t highBit(int32_t value);
+    static int32_t getPairIndex(UChar32 ch);
+
+    static UChar32 pairedChars[];
+    static const int32_t pairedCharCount;
+    static const int32_t pairedCharPower;
+    static const int32_t pairedCharExtra;
+
+    /**
+     * The address of this static class variable serves as this class's ID
+     * for ICU "poor man's RTTI".
+     */
+    static const char fgClassID;
+};
+
+inline ScriptRun::ScriptRun()
+{
+    reset(NULL, 0, 0);
+}
+
+inline ScriptRun::ScriptRun(const UChar chars[], int32_t length)
+{
+    reset(chars, 0, length);
+}
+
+inline ScriptRun::ScriptRun(const UChar chars[], int32_t start, int32_t length)
+{
+    reset(chars, start, length);
+}
+
+inline int32_t ScriptRun::getScriptStart()
+{
+    return scriptStart;
+}
+
+inline int32_t ScriptRun::getScriptEnd()
+{
+    return scriptEnd;
+}
+
+inline UScriptCode ScriptRun::getScriptCode()
+{
+    return scriptCode;
+}
+
+inline void ScriptRun::reset()
+{
+    scriptStart = charStart;
+    scriptEnd   = charStart;
+    scriptCode  = USCRIPT_INVALID_CODE;
+    parenSP     = -1;
+}
+
+inline void ScriptRun::reset(int32_t start, int32_t length)
+{
+    charStart = start;
+    charLimit = start + length;
+
+    reset();
+}
+
+inline void ScriptRun::reset(const UChar chars[], int32_t start, int32_t length)
+{
+    charArray = chars;
+
+    reset(start, length);
+}
+
+
+#endif
diff --git a/include/mapnik/text/symbolizer_helpers.hpp b/include/mapnik/text/symbolizer_helpers.hpp
new file mode 100644
index 0000000..8e13e77
--- /dev/null
+++ b/include/mapnik/text/symbolizer_helpers.hpp
@@ -0,0 +1,153 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef SYMBOLIZER_HELPERS_HPP
+#define SYMBOLIZER_HELPERS_HPP
+
+//mapnik
+#include <mapnik/text/placement_finder.hpp>
+#include <mapnik/vertex_converters.hpp>
+
+namespace mapnik {
+
+class feature_impl;
+class proj_transform;
+class view_transform;
+struct symbolizer_base;
+
+template <typename T>
+struct placement_finder_adapter
+{
+    using placement_finder_type = T;
+    placement_finder_adapter(T & finder, bool points_on_line)
+        : finder_(finder),
+          points_on_line_(points_on_line) {}
+
+    template <typename PathT>
+    void add_path(PathT & path)
+    {
+        status_ = finder_.find_line_placements(path, points_on_line_);
+    }
+
+    bool status() const { return status_;}
+    // Place text at points on a line instead of following the line (used for ShieldSymbolizer)
+    placement_finder_type & finder_;
+    bool points_on_line_;
+    mutable bool status_ = false;
+
+};
+
+using vertex_converter_type = vertex_converter<placement_finder_adapter<placement_finder>,clip_line_tag , transform_tag, affine_transform_tag, simplify_tag, smooth_tag>;
+
+class base_symbolizer_helper
+{
+public:
+    base_symbolizer_helper(symbolizer_base const& sym,
+                           feature_impl const& feature,
+                           attributes const& vars,
+                           proj_transform const& prj_trans,
+                           unsigned width,
+                           unsigned height,
+                           double scale_factor,
+                           view_transform const& t,
+                           box2d<double> const& query_extent);
+
+protected:
+    void initialize_geometries() const;
+    void initialize_points() const;
+
+    //Input
+    symbolizer_base const& sym_;
+    feature_impl const& feature_;
+    attributes const& vars_;
+    proj_transform const& prj_trans_;
+    view_transform const& t_;
+    box2d<double> dims_;
+    box2d<double> const& query_extent_;
+    float scale_factor_;
+
+    //Processing
+    // Using list instead of vector, because we delete random elements and need iterators to stay valid.
+    // Remaining geometries to be processed.
+    mutable std::list<geometry_type*> geometries_to_process_;
+    // Remaining points to be processed.
+    mutable std::list<pixel_position> points_;
+    // Geometry currently being processed.
+    mutable std::list<geometry_type*>::iterator geo_itr_;
+    // Point currently being processed.
+    mutable std::list<pixel_position>::iterator point_itr_;
+    // Use point placement. Otherwise line placement is used.
+    mutable bool point_placement_;
+    text_placement_info_ptr info_ptr_;
+    evaluated_text_properties_ptr text_props_;
+};
+
+// Helper object that does all the TextSymbolizer placement finding
+// work except actually rendering the object.
+
+class text_symbolizer_helper : public base_symbolizer_helper
+{
+public:
+    template <typename FaceManagerT, typename DetectorT>
+    text_symbolizer_helper(text_symbolizer const& sym,
+                           feature_impl const& feature,
+                           attributes const& vars,
+                           proj_transform const& prj_trans,
+                           unsigned width,
+                           unsigned height,
+                           double scale_factor,
+                           view_transform const& t,
+                           FaceManagerT & font_manager,
+                           DetectorT & detector,
+                           box2d<double> const& query_extent,
+                           agg::trans_affine const&);
+
+    template <typename FaceManagerT, typename DetectorT>
+    text_symbolizer_helper(shield_symbolizer const& sym,
+                           feature_impl const& feature,
+                           attributes const& vars,
+                           proj_transform const& prj_trans,
+                           unsigned width,
+                           unsigned height,
+                           double scale_factor,
+                           view_transform const& t,
+                           FaceManagerT & font_manager,
+                           DetectorT & detector,
+                           box2d<double> const& query_extent,
+                           agg::trans_affine const&);
+
+    // Return all placements.
+    placements_list const& get() const;
+protected:
+    bool next_point_placement() const;
+    bool next_line_placement() const;
+
+    mutable placement_finder finder_;
+
+    placement_finder_adapter<placement_finder> adapter_;
+    mutable vertex_converter_type converter_;
+    //ShieldSymbolizer only
+    void init_marker() const;
+};
+
+} //namespace
+
+#endif // SYMBOLIZER_HELPERS_HPP
diff --git a/include/mapnik/text/text_layout.hpp b/include/mapnik/text/text_layout.hpp
new file mode 100644
index 0000000..89ed96d
--- /dev/null
+++ b/include/mapnik/text/text_layout.hpp
@@ -0,0 +1,227 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_TEXT_LAYOUT_HPP
+#define MAPNIK_TEXT_LAYOUT_HPP
+
+//mapnik
+#include <mapnik/value_types.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/text_line.hpp>
+#include <mapnik/text/itemizer.hpp>
+#include <mapnik/font_engine_freetype.hpp>
+#include <mapnik/text/evaluated_format_properties_ptr.hpp>
+#include <mapnik/text/rotation.hpp>
+
+//stl
+#include <vector>
+#include <deque>
+#include <memory>
+#include <map>
+#include <utility>
+
+namespace mapnik
+{
+
+class feature_impl;
+class text_layout;
+
+using text_layout_ptr = std::shared_ptr<text_layout>;
+using text_layout_vector = std::vector<text_layout_ptr>;
+// this is a std::deque to ensure pointers stay valid as a deque
+// "never invalidates pointers or references to the rest of the elements"
+// http://en.cppreference.com/w/cpp/container/deque
+// If this were a vector this test would crash:
+// python tests/visual_tests/test.py text-expressionformat-color
+using child_format_ptrs = std::deque<evaluated_format_properties_ptr>;
+
+class text_layout
+{
+public:
+    using line_vector = std::vector<text_line>;
+    using const_iterator = line_vector::const_iterator;
+    using child_iterator = text_layout_vector::const_iterator;
+
+    text_layout(face_manager_freetype & font_manager,
+                feature_impl const& feature,
+                attributes const& attrs,
+                double scale_factor,
+                text_symbolizer_properties const& properties,
+                text_layout_properties const& layout_defaults,
+                formatting::node_ptr tree);
+
+    // Adds a new text part. Call this function repeatedly to build the complete text.
+    void add_text(mapnik::value_unicode_string const& str, evaluated_format_properties_ptr const& format);
+
+    // Returns the complete text stored in this layout.
+    mapnik::value_unicode_string const& text() const;
+
+    // Processes the text into a list of glyphs, performing RTL/LTR handling, shaping and line breaking.
+    void layout();
+
+    // Clear all data stored in this object. The object's state is the same as directly after construction.
+    void clear();
+
+    // Height of all lines together (in pixels).
+    inline double height() const { return height_; }
+    // Width of the longest line (in pixels).
+    inline double width() const { return width_ ; }
+
+    // Line iterator.
+    inline const_iterator begin() const { return lines_.begin(); }
+    inline const_iterator end() const { return lines_.end(); }
+
+    // Number of lines.
+    inline std::size_t num_lines() const { return lines_.size(); }
+
+    // Width of a certain glyph cluster (in pixels).
+    inline double cluster_width(unsigned cluster) const
+    {
+        std::map<unsigned, double>::const_iterator width_itr = width_map_.find(cluster);
+        if (width_itr != width_map_.end()) return width_itr->second;
+        return 0;
+    }
+
+    // Returns the number of glyphs so memory can be preallocated.
+    inline unsigned glyphs_count() const { return glyphs_count_;}
+
+    void add_child(text_layout_ptr const& child_layout);
+
+    inline text_layout_vector const& get_child_layouts() const { return child_layout_list_; }
+    inline face_manager_freetype & get_font_manager() const { return font_manager_; }
+    inline double get_scale_factor() const { return scale_factor_; }
+    inline text_symbolizer_properties const& get_default_text_properties() const { return properties_; }
+    inline text_layout_properties const& get_layout_properties() const { return layout_properties_; }
+
+    inline rotation const& orientation() const { return orientation_; }
+    inline pixel_position const& displacement() const { return displacement_; }
+    inline box2d<double> const& bounds() const { return bounds_; }
+    inline horizontal_alignment_e horizontal_alignment() const { return halign_; }
+    pixel_position alignment_offset() const;
+    double jalign_offset(double line_width) const;
+    evaluated_format_properties_ptr & new_child_format_ptr(evaluated_format_properties_ptr const& p);
+
+    const_iterator longest_line() const;
+
+private:
+    void break_line(std::pair<unsigned, unsigned> && line_limits);
+    void break_line_icu(std::pair<unsigned, unsigned> && line_limits);
+    void shape_text(text_line & line);
+    void add_line(text_line && line);
+    void clear_cluster_widths(unsigned first, unsigned last);
+    void init_auto_alignment();
+
+    // input
+    face_manager_freetype & font_manager_;
+    double scale_factor_;
+
+    // processing
+    text_itemizer itemizer_;
+    // Maps char index (UTF-16) to width. If multiple glyphs map to the same char the sum of all widths is used
+    // note: this probably isn't the best solution. it would be better to have an object for each cluster, but
+    // it needs to be implemented with no overhead.
+    std::map<unsigned, double> width_map_;
+    double width_;
+    double height_;
+    unsigned glyphs_count_;
+
+    // output
+    line_vector lines_;
+
+    // layout properties (owned by text_layout)
+    text_layout_properties layout_properties_;
+
+    // text symbolizer properties (owned by placement_finder's 'text_placement_info' (info_) which is owned by symbolizer_helper
+    text_symbolizer_properties const& properties_;
+
+    // format properties (owned by text_layout)
+    evaluated_format_properties_ptr format_;
+
+    // alignments
+    vertical_alignment_e valign_;
+    horizontal_alignment_e halign_;
+    justify_alignment_e jalign_;
+
+    // Precalculated values for maximum performance
+    rotation orientation_ = {0,1.0};
+    char wrap_char_ = ' ';
+    double wrap_width_ = 0.0;
+    bool wrap_before_ = false;
+    bool repeat_wrap_char_ = false;
+    bool rotate_displacement_ = false;
+    double text_ratio_ = 0.0;
+    pixel_position displacement_ = {0,0};
+    box2d<double> bounds_;
+
+    // children
+    text_layout_vector child_layout_list_;
+
+    // take ownership of evaluated_format_properties_ptr of any format children
+    // in order to keep them in scope
+    // NOTE: this must not be a std::vector - see note above about child_format_ptrs
+    child_format_ptrs format_ptrs_;
+};
+
+class layout_container
+{
+public:
+    layout_container()
+        : glyphs_count_(0), line_count_(0) {}
+
+    void add(text_layout_ptr layout);
+    void clear();
+
+    void layout();
+
+    inline size_t size() const { return layouts_.size(); }
+    inline bool empty() const { return layouts_.empty(); }
+
+    inline text_layout_vector::const_iterator begin() const { return layouts_.begin(); }
+    inline text_layout_vector::const_iterator end() const { return layouts_.end(); }
+    inline text_layout_ptr const& back() const { return layouts_.back(); }
+    inline mapnik::value_unicode_string const& text() const { return text_; }
+
+    inline unsigned glyphs_count() const { return glyphs_count_; }
+    inline unsigned line_count() const { return line_count_; }
+
+    inline box2d<double> const& bounds() const { return bounds_; }
+
+    inline double width() const { return bounds_.width(); }
+    inline double height() const { return bounds_.height(); }
+
+private:
+    text_layout_vector layouts_;
+
+    mapnik::value_unicode_string text_;
+
+    unsigned glyphs_count_;
+    unsigned line_count_;
+
+    box2d<double> bounds_;
+};
+
+}
+
+#endif // TEXT_LAYOUT_HPP
diff --git a/include/mapnik/text/text_line.hpp b/include/mapnik/text/text_line.hpp
new file mode 100644
index 0000000..70dcd1a
--- /dev/null
+++ b/include/mapnik/text/text_line.hpp
@@ -0,0 +1,102 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_TEXT_LINE_HPP
+#define MAPNIK_TEXT_LINE_HPP
+
+//stl
+#include <vector>
+#include <mapnik/noncopyable.hpp>
+
+namespace mapnik
+{
+
+struct glyph_info;
+
+// This class stores all glyphs of a line in left to right order.
+// It can be used for rendering but no text processing (like line breaking)
+// should be done!
+
+class text_line : noncopyable
+{
+public:
+    using glyph_vector = std::vector<glyph_info>;
+    using const_iterator = glyph_vector::const_iterator;
+
+    text_line(unsigned first_char, unsigned last_char);
+
+    text_line( text_line && rhs);
+
+    // Append glyph.
+    void add_glyph(glyph_info && glyph, double scale_factor_);
+
+    // Preallocate memory.
+    void reserve(glyph_vector::size_type length);
+    // Iterator to first glyph.
+    const_iterator begin() const;
+    // Iterator beyond last glyph.
+    const_iterator end() const;
+
+    // Width of all glyphs including character spacing.
+    double width() const { return width_; }
+    // Width of all glyphs without character spacing.
+    double glyphs_width() const { return glyphs_width_; }
+    // Real line height. For first line: max_char_height(), for all others: line_height().
+    double height() const;
+
+    // Height of the tallest glyph in this line.
+    double max_char_height() const { return max_char_height_; }
+
+    // Called for each font/style to update the maximum height of this line.
+    void update_max_char_height(double max_char_height);
+
+    // Line height including line spacing.
+    double line_height() const { return line_height_; }
+
+    // Is this object is the first line of a multi-line text?
+    // Used to exclude linespacing from first line's height.
+    void set_first_line(bool first_line);
+
+    // Index of first UTF-16 char.
+    unsigned first_char() const;
+    // Index of last UTF-16 char.
+    unsigned last_char() const;
+
+    // Number of glyphs.
+    unsigned size() const;
+
+    unsigned space_count() const { return space_count_; }
+
+private:
+    glyph_vector glyphs_;
+    double line_height_; // Includes line spacing (returned by freetype)
+    double max_char_height_; // Max height of any glyphs in line - calculated by shaper
+    double width_;
+    double glyphs_width_;
+    unsigned first_char_;
+    unsigned last_char_;
+    bool first_line_;
+    unsigned space_count_;
+};
+
+} //namespace mapnik
+
+#endif // MAPNIK_TEXT_LINE_HPP
diff --git a/include/mapnik/text/text_properties.hpp b/include/mapnik/text/text_properties.hpp
new file mode 100644
index 0000000..1f28867
--- /dev/null
+++ b/include/mapnik/text/text_properties.hpp
@@ -0,0 +1,211 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_TEXT_PROPERTIES_HPP
+#define MAPNIK_TEXT_PROPERTIES_HPP
+
+// mapnik
+#include <mapnik/color.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/font_set.hpp>
+#include <mapnik/expression.hpp>
+#include <mapnik/text/formatting/base.hpp>
+#include <mapnik/symbolizer_base.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/noncopyable.hpp>
+#include <mapnik/text/font_feature_settings.hpp>
+
+// stl
+#include <map>
+
+// boost
+#include <boost/optional.hpp>
+#include <boost/property_tree/ptree_fwd.hpp>
+
+namespace mapnik {
+
+class feature_impl;
+class text_layout;
+
+namespace detail {
+
+struct evaluated_format_properties
+{
+    std::string face_name;
+    boost::optional<font_set> fontset;
+    double text_size;
+    double character_spacing;
+    double line_spacing;
+    double text_opacity;
+    double halo_opacity;
+    text_transform_e text_transform;
+    color fill;
+    color halo_fill;
+    double halo_radius;
+    font_feature_settings ff_settings;
+};
+
+struct evaluated_text_properties : noncopyable
+{
+    label_placement_e label_placement;
+    double label_spacing;
+    double label_position_tolerance;
+    bool avoid_edges;
+    double margin;
+    double repeat_distance;
+    double minimum_distance;
+    double minimum_padding;
+    double minimum_path_length;
+    double max_char_angle_delta;
+    bool allow_overlap;
+    bool largest_bbox_only;
+    text_upright_e upright;
+};
+
+}
+
+using evaluated_text_properties_ptr = std::unique_ptr<detail::evaluated_text_properties>;
+
+enum directions_e
+{
+    NORTH,
+    EAST,
+    SOUTH,
+    WEST,
+    NORTHEAST,
+    SOUTHEAST,
+    NORTHWEST,
+    SOUTHWEST,
+    EXACT_POSITION
+};
+
+using fontset_map = std::map<std::string, font_set>;
+
+struct MAPNIK_DECL format_properties
+{
+    format_properties();
+    void from_xml(xml_node const& sym, fontset_map const& fontsets, bool is_shield);
+    void to_xml(boost::property_tree::ptree & node, bool explicit_defaults,
+                format_properties const& dfl) const;
+    // collect expressions
+    void add_expressions(expression_set & output) const;
+
+    std::string face_name;
+    boost::optional<font_set> fontset;
+    // expressions
+    symbolizer_base::value_type text_size;
+    symbolizer_base::value_type character_spacing;
+    symbolizer_base::value_type line_spacing; //Largest total height (fontsize+line_spacing) per line is chosen
+    symbolizer_base::value_type text_opacity;
+    symbolizer_base::value_type halo_opacity;
+    symbolizer_base::value_type fill;
+    symbolizer_base::value_type halo_fill;
+    symbolizer_base::value_type halo_radius;
+    symbolizer_base::value_type text_transform;
+    symbolizer_base::value_type ff_settings;
+};
+
+
+// Properties for building the layout of a single text placement
+struct MAPNIK_DECL text_layout_properties
+{
+    text_layout_properties();
+
+    // Load all values from XML ptree.
+    void from_xml(xml_node const &sym, fontset_map const& fontsets);
+    // Save all values to XML ptree (but does not create a new parent node!).
+    void to_xml(boost::property_tree::ptree & node, bool explicit_defaults,
+                text_layout_properties const& dfl) const;
+
+    // Get a list of all expressions used in any placement.
+    // This function is used to collect attributes.
+    void add_expressions(expression_set & output) const;
+
+    // per layout expressions
+    symbolizer_base::value_type dx;
+    symbolizer_base::value_type dy;
+    symbolizer_base::value_type orientation;
+    symbolizer_base::value_type text_ratio;
+    symbolizer_base::value_type wrap_width;
+    symbolizer_base::value_type wrap_char;
+    symbolizer_base::value_type wrap_before;
+    symbolizer_base::value_type repeat_wrap_char;
+    symbolizer_base::value_type rotate_displacement;
+    symbolizer_base::value_type halign;
+    symbolizer_base::value_type jalign;
+    symbolizer_base::value_type valign;
+    directions_e dir = EXACT_POSITION;
+};
+
+struct text_properties_expressions
+{
+    symbolizer_base::value_type label_placement = enumeration_wrapper(POINT_PLACEMENT);
+    symbolizer_base::value_type label_spacing = 0.0;
+    symbolizer_base::value_type label_position_tolerance = 0.0;
+    symbolizer_base::value_type avoid_edges = false;
+    symbolizer_base::value_type margin = 0.0;
+    symbolizer_base::value_type repeat_distance = 0.0;
+    symbolizer_base::value_type minimum_distance = 0.0;
+    symbolizer_base::value_type minimum_padding = 0.0;
+    symbolizer_base::value_type minimum_path_length = 0.0;
+    symbolizer_base::value_type max_char_angle_delta = 22.5;
+    symbolizer_base::value_type allow_overlap = false;
+    symbolizer_base::value_type largest_bbox_only = true;
+    symbolizer_base::value_type upright = enumeration_wrapper(UPRIGHT_AUTO);
+};
+
+// Contains all text symbolizer properties which are not directly related to text formatting and layout.
+struct MAPNIK_DECL text_symbolizer_properties
+{
+    text_symbolizer_properties();
+    // Load only placement related values from XML ptree.
+    void text_properties_from_xml(xml_node const& node);
+    // Load all values from XML ptree.
+    void from_xml(xml_node const& node, fontset_map const& fontsets, bool is_shield);
+    // Save all values to XML ptree (but does not create a new parent node!).
+    void to_xml(boost::property_tree::ptree & node, bool explicit_defaults,
+                text_symbolizer_properties const& dfl) const;
+    // Sets new format tree.
+    void set_format_tree(formatting::node_ptr tree);
+    // Get format tree.
+    formatting::node_ptr format_tree() const;
+    // Get a list of all expressions used in any placement.
+    // This function is used to collect attributes.
+    void add_expressions(expression_set & output) const;
+
+    // Per symbolizer options
+    // Expressions
+    text_properties_expressions expressions;
+    // Default values for text layouts
+    text_layout_properties layout_defaults;
+    // Default values for format_properties.
+    format_properties format_defaults;
+
+private:
+    // A tree of formatting::nodes which contain text and formatting information.
+    formatting::node_ptr tree_;
+};
+
+evaluated_text_properties_ptr evaluate_text_properties(text_symbolizer_properties const& text_prop, feature_impl const& feature, attributes const& attrs);
+
+} //ns mapnik
+
+#endif // MAPNIK_TEXT_PROPERTIES_HPP
diff --git a/include/mapnik/text/tolerance_iterator.hpp b/include/mapnik/text/tolerance_iterator.hpp
new file mode 100644
index 0000000..ac83ddd
--- /dev/null
+++ b/include/mapnik/text/tolerance_iterator.hpp
@@ -0,0 +1,101 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_TOLERANCE_ITERATOR_HPP
+#define MAPNIK_TOLERANCE_ITERATOR_HPP
+
+//mapnik
+#include <mapnik/debug.hpp>
+
+namespace mapnik
+{
+
+class tolerance_iterator
+{
+public:
+    tolerance_iterator(double label_position_tolerance, double spacing)
+        : tolerance_(label_position_tolerance > 0 ?
+                        label_position_tolerance : spacing/2.0),
+          linear_position_(1.0),
+          value_(0),
+          initialized_(false),
+          values_tried_(0)
+    {
+    }
+
+    ~tolerance_iterator()
+    {
+        //std::cout << "values tried:" << values_tried_ << "\n";
+    }
+
+    double get() const
+    {
+        return -value_;
+    }
+
+    bool next()
+    {
+        ++values_tried_;
+        if (values_tried_ > 255)
+        {
+            /* This point should not be reached during normal operation. But I can think of
+             * cases where very bad spacing and or tolerance values are choosen and the
+             * placement finder tries an excessive number of placements.
+             * 255 is an arbitrarily chosen limit.
+             */
+            MAPNIK_LOG_WARN(placement_finder) << "Tried a huge number of placements. Please check "
+                                                 "'label-position-tolerance' and 'spacing' parameters "
+                                                 "of your TextSymbolizers.\n";
+            return false;
+        }
+        if (!initialized_)
+        {
+            initialized_ = true;
+            return true; //Always return value 0 as the first value.
+        }
+        if (value_ == 0)
+        {
+            value_ = linear_position_;
+            return true;
+        }
+        value_ = -value_;
+        if (value_ > 0)
+        {
+            value_ = std::pow(1.3, linear_position_) * linear_position_ / (4.0 * tolerance_) + linear_position_;
+            linear_position_ += 1.0;
+        }
+        if (value_ > tolerance_)
+        {
+            return false;
+        }
+        return true;
+    }
+private:
+    double tolerance_;
+    double linear_position_;
+    double value_;
+    bool initialized_;
+    unsigned values_tried_;
+};
+
+}//ns mapnik
+
+#endif // MAPNIK_TOLERANCE_ITERATOR_HPP
diff --git a/include/mapnik/text/vertex_cache.hpp b/include/mapnik/text/vertex_cache.hpp
new file mode 100644
index 0000000..2779360
--- /dev/null
+++ b/include/mapnik/text/vertex_cache.hpp
@@ -0,0 +1,228 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+#ifndef MAPNIK_VERTEX_CACHE_HPP
+#define MAPNIK_VERTEX_CACHE_HPP
+
+// mapnik
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/config.hpp>
+#include <mapnik/noncopyable.hpp>
+
+// agg
+#include "agg_basics.h"
+
+// stl
+#include <vector>
+#include <memory>
+#include <map>
+
+namespace mapnik
+{
+
+class vertex_cache;
+using vertex_cache_ptr = std::unique_ptr<vertex_cache>;
+
+// Caches all path points and their lengths. Allows easy moving in both directions.
+class MAPNIK_DECL vertex_cache : noncopyable
+{
+    struct segment
+    {
+        segment(double x, double y, double length) : pos(x, y), length(length) {}
+        pixel_position pos; //Last point of this segment, first point is implicitly defined by the previous segement in this vector
+        double length;
+    };
+
+    // The first segment always has the length 0 and just defines the starting point.
+    struct segment_vector
+    {
+        segment_vector() : vector(), length(0.) {}
+        void add_segment(double x, double y, double len) {
+            if (len == 0. && !vector.empty()) return; //Don't add zero length segments
+            vector.emplace_back(x, y, len);
+            length += len;
+        }
+        using iterator = std::vector<segment>::iterator;
+        std::vector<segment> vector;
+        double length;
+    };
+
+public:
+    // This class has no public members to avoid acciedential modification.
+    // It should only be used with save_state/restore_state.
+    class state
+    {
+        segment_vector::iterator current_segment;
+        double position_in_segment;
+        pixel_position current_position;
+        pixel_position segment_starting_point;
+        double position_;
+        friend class vertex_cache;
+    public:
+        pixel_position const& position() const { return current_position; }
+    };
+
+    class scoped_state : noncopyable
+    {
+    public:
+        scoped_state(vertex_cache &pp) : pp_(pp), state_(pp.save_state()), restored_(false) {}
+        void restore() { pp_.restore_state(state_); restored_ = true; }
+        ~scoped_state() { if (!restored_) pp_.restore_state(state_); }
+        state const& get_state() const { return state_; }
+    private:
+        vertex_cache &pp_;
+        state state_;
+        bool restored_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////
+
+    template <typename T> vertex_cache(T &path);
+
+    double length() const { return current_subpath_->length; }
+
+
+    pixel_position const& current_position() const { return current_position_; }
+    double angle(double width=0.);
+    double linear_position() const { return position_; }
+
+
+    // Returns a parallel line in the specified distance.
+    vertex_cache & get_offseted(double offset, double region_width);
+
+
+    // Skip a certain amount of space.
+    // This functions automatically calculate new points if the position is not exactly
+    // on a point on the path.
+
+    bool forward(double length);
+    // Go backwards.
+    bool backward(double length);
+    // Move in any direction (based on sign of length). Returns false if it reaches either end of the path.
+    bool move(double length);
+    // Move to given distance.
+    bool move_to_distance(double distance);
+    // Work on next subpath. Returns false if the is no next subpath.
+    bool next_subpath();
+
+    // Compatibility with standard path interface
+    void rewind(unsigned);
+    unsigned vertex(double *x, double *y);
+
+    // State
+    state save_state() const;
+    void restore_state(state const& s);
+    // Go back to initial state.
+    void reset();
+
+    // position on this line closest to the target position
+    double position_closest_to(pixel_position const &target_pos);
+
+private:
+    void rewind_subpath();
+    bool next_segment();
+    bool previous_segment();
+    double current_segment_angle();
+    void find_line_circle_intersection(
+        double cx, double cy, double radius,
+        double x1, double y1, double x2, double y2,
+        double & ix, double & iy) const;
+    // Position as calculated by last move/forward/next call.
+    pixel_position current_position_;
+    // First pixel of current segment.
+    pixel_position segment_starting_point_;
+    // List of all subpaths.
+    std::vector<segment_vector> subpaths_;
+    // Currently active subpath.
+    std::vector<segment_vector>::iterator current_subpath_;
+    // Current segment for normal operation (move()).
+    segment_vector::iterator current_segment_;
+    // Current segment in compatibility mode (vertex(), rewind()).
+    segment_vector::iterator vertex_segment_;
+    // Currently active subpath in compatibility mode.
+    std::vector<segment_vector>::iterator vertex_subpath_;
+    // State is initialized (after first call to next_subpath()).
+    bool initialized_;
+    // Position from start of segment.
+    double position_in_segment_;
+    // Angle for current segment.
+    mutable double angle_;
+    // Is the value in angle_ valid?
+    // Used to avoid unnecessary calculations.
+    mutable bool angle_valid_;
+    using offseted_lines_map = std::map<double, vertex_cache_ptr>;
+    // Cache of all offseted lines already computed.
+    offseted_lines_map offseted_lines_;
+    // Linear position, i.e distance from start of line.
+    double position_;
+};
+
+
+template <typename T>
+vertex_cache::vertex_cache(T & path)
+        : current_position_(),
+          segment_starting_point_(),
+          subpaths_(),
+          current_subpath_(),
+          current_segment_(),
+          vertex_segment_(),
+          vertex_subpath_(),
+          initialized_(false),
+          position_in_segment_(0.),
+          angle_(0.),
+          angle_valid_(false),
+          offseted_lines_(),
+          position_(0.)
+{
+    path.rewind(0);
+    unsigned cmd;
+    double new_x = 0., new_y = 0., old_x = 0., old_y = 0.;
+    bool first = true; //current_subpath_ uninitalized
+    while (!agg::is_stop(cmd = path.vertex(&new_x, &new_y)))
+    {
+        if (agg::is_move_to(cmd))
+        {
+            //Create new sub path
+            subpaths_.emplace_back();
+            current_subpath_ = subpaths_.end()-1;
+            current_subpath_->add_segment(new_x, new_y, 0);
+            first = false;
+        }
+        if (agg::is_line_to(cmd))
+        {
+            if (first)
+            {
+                MAPNIK_LOG_ERROR(vertex_cache) << "No starting point in path!\n";
+                continue;
+            }
+            double dx = old_x - new_x;
+            double dy = old_y - new_y;
+            double segment_length = std::sqrt(dx*dx + dy*dy);
+            current_subpath_->add_segment(new_x, new_y, segment_length);
+        }
+        old_x = new_x;
+        old_y = new_y;
+    }
+}
+
+}
+#endif
diff --git a/include/mapnik/text_path.hpp b/include/mapnik/text_path.hpp
deleted file mode 100644
index b08c1e5..0000000
--- a/include/mapnik/text_path.hpp
+++ /dev/null
@@ -1,202 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_TEXT_PATH_HPP
-#define MAPNIK_TEXT_PATH_HPP
-
-// mapnik
-#include <mapnik/char_info.hpp>
-#include <mapnik/pixel_position.hpp>
-#include <mapnik/noncopyable.hpp>
-
-//stl
-#include <vector>
-
-// boost
-#include <boost/shared_ptr.hpp>
-
-// uci
-#include <unicode/unistr.h>
-
-namespace mapnik
-{
-
-class string_info : private mapnik::noncopyable
-{
-protected:
-    typedef std::vector<char_info> characters_t;
-    characters_t characters_;
-    UnicodeString text_;
-    bool is_rtl;
-public:
-    string_info(UnicodeString const& text)
-        : characters_(),
-          text_(text),
-          is_rtl(false)
-    {
-
-    }
-
-    string_info()
-        : characters_(),
-          text_(),
-          is_rtl(false)
-    {
-
-    }
-
-    void add_info(char_info const& info)
-    {
-        characters_.push_back(info);
-    }
-
-    void add_text(UnicodeString text)
-    {
-        text_ += text;
-    }
-
-    unsigned num_characters() const
-    {
-        return characters_.size();
-    }
-
-    void set_rtl(bool value)
-    {
-        is_rtl = value;
-    }
-
-    bool get_rtl() const
-    {
-        return is_rtl;
-    }
-
-    char_info const& at(unsigned i) const
-    {
-        return characters_[i];
-    }
-
-    char_info const& operator[](unsigned i) const
-    {
-        return at(i);
-    }
-
-    UnicodeString const& get_string() const
-    {
-        return text_;
-    }
-
-    bool has_line_breaks() const
-    {
-        UChar break_char = '\n';
-        return (text_.indexOf(break_char) >= 0);
-    }
-
-    // Resets object to initial state.
-    void clear()
-    {
-        text_.remove();
-        characters_.clear();
-    }
-};
-
-typedef char_info const * char_info_ptr;
-
-
-// List of all characters and their positions and formats for a placement.
-class text_path : mapnik::noncopyable
-{
-    struct character_node
-    {
-        char_info_ptr c;
-        pixel_position pos;
-        double angle;
-
-        character_node(char_info_ptr c_, double x_, double y_, double angle_)
-            : c(c_),
-              pos(x_, y_),
-              angle(angle_)
-        {
-
-        }
-
-        ~character_node() {}
-
-        void vertex(char_info_ptr & c_, double & x_, double  & y_, double & angle_) const
-        {
-            c_ = c;
-            x_ = pos.x;
-            y_ = pos.y;
-            angle_ = angle;
-        }
-    };
-
-    mutable int itr_;
-public:
-    typedef std::vector<character_node> character_nodes_t;
-    pixel_position center;
-    character_nodes_t nodes_;
-
-    text_path(double x, double y)
-        : itr_(0),
-          center(x,y),
-          nodes_()
-    {
-
-    }
-
-    ~text_path() {}
-
-    /** Adds a new char to the list. */
-    void add_node(char_info_ptr c, double x, double y, double angle)
-    {
-        nodes_.push_back(character_node(c, x, y, angle));
-    }
-
-    /** Return node. Always returns a new node. Has no way to report that there are no more nodes. */
-    void vertex(char_info_ptr & c, double & x, double & y, double & angle) const
-    {
-        nodes_[itr_++].vertex(c, x, y, angle);
-    }
-
-    /** Start again at first node. */
-    void rewind() const
-    {
-        itr_ = 0;
-    }
-
-    /** Number of nodes. */
-    int num_nodes() const
-    {
-        return nodes_.size();
-    }
-
-    /** Delete all nodes. */
-    void clear()
-    {
-        nodes_.clear();
-    }
-};
-
-typedef boost::shared_ptr<text_path> text_path_ptr;
-}
-
-#endif // MAPNIK_TEXT_PATH_HPP
diff --git a/include/mapnik/text_placements/base.hpp b/include/mapnik/text_placements/base.hpp
deleted file mode 100644
index 99a7f1c..0000000
--- a/include/mapnik/text_placements/base.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef PLACEMENTS_BASE_HPP
-#define PLACEMENTS_BASE_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/text_properties.hpp>
-#include <mapnik/formatting/base.hpp>
-
-namespace mapnik
-{
-typedef std::pair<double,double> dimension_type;
-
-class MAPNIK_DECL text_placements;
-/** Generate a possible placement and store results of placement_finder.
- * This placement has first to be tested by placement_finder to verify it
- * can actually be used.
- */
-class MAPNIK_DECL text_placement_info : mapnik::noncopyable
-{
-public:
-    /** Constructor. Takes the parent text_placements object as a parameter
-     * to read defaults from it. */
-    text_placement_info(text_placements const* parent, double scale_factor_);
-    /** Get next placement.
-     * This function is also called before the first placement is tried.
-     * Each class has to return at least one position!
-     * If this functions returns false the placement data should be
-     * considered invalid!
-     */
-    virtual bool next()=0;
-    virtual ~text_placement_info() {}
-
-    /** Properties actually used by placement finder and renderer. Values in
-     * here are modified each time next() is called. */
-    text_symbolizer_properties properties;
-
-    /** Scale factor used by the renderer. */
-    double scale_factor;
-    /** Set scale factor. */
-    void set_scale_factor(double factor) { scale_factor = factor; }
-    /** Get scale factor. */
-    double get_scale_factor() const { return scale_factor; }
-    /** Get label spacing taking the scale factor into account. */
-    double get_actual_label_spacing() const { return scale_factor * properties.label_spacing; }
-    /** Get minimum distance taking the scale factor into account. */
-    double get_actual_minimum_distance() const { return scale_factor * properties.minimum_distance; }
-    /** Get minimum padding taking the scale factor into account. */
-    double get_actual_minimum_padding() const { return scale_factor * properties.minimum_padding; }
-};
-
-typedef boost::shared_ptr<text_placement_info> text_placement_info_ptr;
-
-/** This object handles the management of all TextSymbolizer properties. It can
- * be used as a base class for own objects which implement new processing
- * semantics. Basically this class just makes sure a pointer of the right
- * class is returned by the get_placement_info call.
- */
-class MAPNIK_DECL text_placements
-{
-public:
-    text_placements();
-    /** Get a text_placement_info object to use in rendering.
-     * The returned object creates a list of settings which is
-     * used to try to find a placement and stores all
-     * information that is generated by
-     * the placement finder.
-     *
-     * This function usually is implemented as
-     * text_placement_info_ptr text_placements_XXX::get_placement_info() const
-     * {
-     *     return text_placement_info_ptr(new text_placement_info_XXX(this));
-     * }
-     */
-    virtual text_placement_info_ptr get_placement_info(
-        double scale_factor_) const =0;
-    /** Get a list of all expressions used in any placement.
-     * This function is used to collect attributes.
-     */
-    virtual void add_expressions(expression_set &output);
-
-    /** Destructor. */
-    virtual ~text_placements() {}
-
-    /** List of all properties used as the default for the subclasses. */
-    text_symbolizer_properties defaults;
-};
-
-/** Pointer to object of class text_placements */
-typedef boost::shared_ptr<text_placements> text_placements_ptr;
-
-} //ns mapnik
-
-#endif // PLACEMENTS_BASE_HPP
diff --git a/include/mapnik/text_placements/dummy.hpp b/include/mapnik/text_placements/dummy.hpp
deleted file mode 100644
index fd58c8b..0000000
--- a/include/mapnik/text_placements/dummy.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef PLACEMENTS_DUMMY_HPP
-#define PLACEMENTS_DUMMY_HPP
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/text_placements/base.hpp>
-// boost
-#include <boost/concept_check.hpp>
-
-namespace mapnik
-{
-
-class text_placements_info_dummy;
-
-// Dummy placement algorithm. Always takes the default value.
-class MAPNIK_DECL text_placements_dummy: public text_placements
-{
-public:
-text_placement_info_ptr get_placement_info(double scale_factor) const;
-friend class text_placement_info_dummy;
-};
-
-// Placement info object for dummy placement algorithm. Always takes the default value.
-class MAPNIK_DECL text_placement_info_dummy : public text_placement_info
-{
-public:
-text_placement_info_dummy(text_placements_dummy const* parent, double scale_factor)
-    : text_placement_info(parent, scale_factor),
-      state(0) {}
-
-    bool next();
-private:
-unsigned state;
-};
-
-} //ns mapnik
-
-#endif // PLACEMENTS_DUMMY_HPP
diff --git a/include/mapnik/text_placements/list.hpp b/include/mapnik/text_placements/list.hpp
deleted file mode 100644
index 923df0c..0000000
--- a/include/mapnik/text_placements/list.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Hermann Kraus
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef TEXT_PLACEMENTS_LIST_HPP
-#define TEXT_PLACEMENTS_LIST_HPP
-#include <mapnik/text_placements/base.hpp>
-
-namespace mapnik {
-
-class text_placement_info_list;
-
-
-/** Tries a list of placements. */
-class text_placements_list: public text_placements
-{
-public:
-    text_placements_list();
-    text_placement_info_ptr get_placement_info(double scale_factor) const;
-    virtual void add_expressions(expression_set &output);
-    text_symbolizer_properties & add();
-    text_symbolizer_properties & get(unsigned i);
-    unsigned size() const;
-    static text_placements_ptr from_xml(xml_node const &xml, fontset_map const & fontsets);
-private:
-    std::vector<text_symbolizer_properties> list_;
-    friend class text_placement_info_list;
-};
-
-/** List placement strategy.
- * See parent class for documentation of each function. */
-class text_placement_info_list : public text_placement_info
-{
-public:
-    text_placement_info_list(text_placements_list const* parent, double scale_factor) :
-        text_placement_info(parent, scale_factor),
-        state(0), parent_(parent) {}
-    bool next();
-private:
-    unsigned state;
-    text_placements_list const* parent_;
-};
-
-
-} //namespace
-#endif
diff --git a/include/mapnik/text_placements/registry.hpp b/include/mapnik/text_placements/registry.hpp
deleted file mode 100644
index 4fc7107..0000000
--- a/include/mapnik/text_placements/registry.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef PLACEMENTS_REGISTRY_HPP
-#define PLACEMENTS_REGISTRY_HPP
-
-// mapnik
-#include <mapnik/utils.hpp>
-#include <mapnik/text_placements/base.hpp>
-#include <mapnik/noncopyable.hpp>
-
-// stl
-#include <string>
-#include <map>
-
-namespace mapnik
-{
-namespace placements
-{
-
-typedef text_placements_ptr (*from_xml_function_ptr)(
-    xml_node const& xml, fontset_map const & fontsets);
-
-class registry : public singleton<registry, CreateStatic>,
-                 private mapnik::noncopyable
-{
-public:
-    registry();
-    ~registry() {}
-    void register_name(std::string name, from_xml_function_ptr ptr, bool overwrite=false);
-    text_placements_ptr from_xml(std::string name,
-                                 xml_node const& xml,
-                                 fontset_map const & fontsets);
-private:
-    std::map<std::string, from_xml_function_ptr> map_;
-};
-
-} //ns placements
-} //ns mapnik
-#endif // PLACEMENTS_REGISTRY_HPP
diff --git a/include/mapnik/text_placements/simple.hpp b/include/mapnik/text_placements/simple.hpp
deleted file mode 100644
index 59c57d8..0000000
--- a/include/mapnik/text_placements/simple.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_TEXT_PLACEMENTS_SIMPLE_HPP
-#define MAPNIK_TEXT_PLACEMENTS_SIMPLE_HPP
-
-// mapnik
-#include <mapnik/text_placements/base.hpp>
-
-namespace mapnik {
-
-class text_placement_info_simple;
-
-typedef enum {
-    NORTH,
-    EAST,
-    SOUTH,
-    WEST,
-    NORTHEAST,
-    SOUTHEAST,
-    NORTHWEST,
-    SOUTHWEST,
-    EXACT_POSITION
-} directions_t;
-
-
-/** Automatically generates placement options from a user selected list of directions and text sizes. */
-class text_placements_simple: public text_placements
-{
-public:
-    text_placements_simple();
-    text_placements_simple(std::string positions);
-    text_placement_info_ptr get_placement_info(double scale_factor) const;
-    void set_positions(std::string positions);
-    std::string get_positions();
-    static text_placements_ptr from_xml(xml_node const &xml, fontset_map const & fontsets);
-private:
-    std::string positions_;
-    std::vector<directions_t> direction_;
-    std::vector<int> text_sizes_;
-    friend class text_placement_info_simple;
-};
-
-/** Simple placement strategy.
- * See parent class for documentation of each function. */
-class text_placement_info_simple : public text_placement_info
-{
-public:
-    text_placement_info_simple(text_placements_simple const* parent,
-                               double scale_factor)
-        : text_placement_info(parent, scale_factor),
-          state(0), position_state(0), parent_(parent)
-    {
-    }
-    bool next();
-protected:
-    bool next_position_only();
-    unsigned state;
-    unsigned position_state;
-    text_placements_simple const* parent_;
-};
-
-} //namespace
-
-#endif // MAPNIK_TEXT_PLACEMENTS_SIMPLE_HPP
diff --git a/include/mapnik/text_properties.hpp b/include/mapnik/text_properties.hpp
deleted file mode 100644
index bbd7a6e..0000000
--- a/include/mapnik/text_properties.hpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#ifndef TEXT_PROPERTIES_HPP
-#define TEXT_PROPERTIES_HPP
-
-// mapnik
-#include <mapnik/color.hpp>
-#include <mapnik/attribute.hpp>
-#include <mapnik/value.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/font_set.hpp>
-#include <mapnik/enumeration.hpp>
-#include <mapnik/expression.hpp>
-#include <mapnik/formatting/base.hpp>
-
-// stl
-#include <map>
-
-// boost
-#include <boost/optional.hpp>
-#include <boost/property_tree/ptree_fwd.hpp>
-
-namespace mapnik
-{
-
-enum text_transform
-{
-    NONE = 0,
-    UPPERCASE,
-    LOWERCASE,
-    CAPITALIZE,
-    text_transform_MAX
-};
-DEFINE_ENUM(text_transform_e, text_transform);
-
-typedef std::map<std::string, font_set> fontset_map;
-
-struct MAPNIK_DECL char_properties
-{
-    char_properties();
-    /** Construct object from XML. */
-    void from_xml(xml_node const &sym, fontset_map const & fontsets);
-    /** Write object to XML ptree. */
-    void to_xml(boost::property_tree::ptree &node, bool explicit_defaults, char_properties const& dfl=char_properties()) const;
-    std::string face_name;
-    boost::optional<font_set> fontset;
-    double text_size;
-    double character_spacing;
-    double line_spacing; //Largest total height (fontsize+line_spacing) per line is chosen
-    double text_opacity;
-    bool wrap_before;
-    unsigned wrap_char;
-    text_transform_e text_transform; //Per expression
-    color fill;
-    color halo_fill;
-    double halo_radius;
-};
-
-
-enum label_placement_enum
-{
-    POINT_PLACEMENT,
-    LINE_PLACEMENT,
-    VERTEX_PLACEMENT,
-    INTERIOR_PLACEMENT,
-    label_placement_enum_MAX
-};
-
-DEFINE_ENUM(label_placement_e, label_placement_enum);
-
-enum vertical_alignment
-{
-    V_TOP = 0,
-    V_MIDDLE,
-    V_BOTTOM,
-    V_AUTO,
-    vertical_alignment_MAX
-};
-
-DEFINE_ENUM(vertical_alignment_e, vertical_alignment);
-
-enum horizontal_alignment
-{
-    H_LEFT = 0,
-    H_MIDDLE,
-    H_RIGHT,
-    H_AUTO,
-    horizontal_alignment_MAX
-};
-
-DEFINE_ENUM(horizontal_alignment_e, horizontal_alignment);
-
-enum justify_alignment
-{
-    J_LEFT = 0,
-    J_MIDDLE,
-    J_RIGHT,
-    J_AUTO,
-    justify_alignment_MAX
-};
-
-DEFINE_ENUM(justify_alignment_e, justify_alignment);
-
-typedef std::pair<double, double> position;
-class processed_text;
-
-
-/** Contains all text symbolizer properties which are not directly related to text formatting. */
-struct MAPNIK_DECL text_symbolizer_properties
-{
-    text_symbolizer_properties();
-    /** Load all values from XML ptree. */
-    void from_xml(xml_node const &sym, fontset_map const & fontsets);
-    /** Save all values to XML ptree (but does not create a new parent node!). */
-    void to_xml(boost::property_tree::ptree &node, bool explicit_defaults, text_symbolizer_properties const &dfl=text_symbolizer_properties()) const;
-
-    /** Takes a feature and produces formated text as output.
-     * The output object has to be created by the caller and passed in for thread safety.
-     */
-    void process(processed_text &output, feature_impl const& feature) const;
-    /** Automatically create processing instructions for a single expression. */
-    void set_old_style_expression(expression_ptr expr);
-    /** Sets new format tree. */
-    void set_format_tree(formatting::node_ptr tree);
-    /** Get format tree. */
-    formatting::node_ptr format_tree() const;
-    /** Get a list of all expressions used in any placement.
-     * This function is used to collect attributes. */
-    void add_expressions(expression_set &output) const;
-
-    //Per symbolizer options
-    expression_ptr orientation;
-    position displacement;
-    label_placement_e label_placement;
-    horizontal_alignment_e halign;
-    justify_alignment_e jalign;
-    vertical_alignment_e valign;
-    /** distance between repeated labels on a single geometry */
-    double label_spacing;
-    /** distance the label can be moved on the line to fit, if 0 the default is used */
-    unsigned label_position_tolerance;
-    bool avoid_edges;
-    double minimum_distance;
-    double minimum_padding;
-    double minimum_path_length;
-    double max_char_angle_delta;
-    /** Always try render an odd amount of labels */
-    bool force_odd_labels;
-    bool allow_overlap;
-    /** Only consider geometry with largest bbox (polygons) */
-    bool largest_bbox_only;
-    double text_ratio;
-    double wrap_width;
-    /** Default values for char_properties. */
-    char_properties format;
-private:
-    /** A tree of formatting::nodes which contain text and formatting information. */
-    formatting::node_ptr tree_;
-};
-
-} //ns mapnik
-
-#endif // TEXT_PROPERTIES_HPP
diff --git a/include/mapnik/text_symbolizer.hpp b/include/mapnik/text_symbolizer.hpp
deleted file mode 100644
index 3a8945d..0000000
--- a/include/mapnik/text_symbolizer.hpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_TEXT_SYMBOLIZER_HPP
-#define MAPNIK_TEXT_SYMBOLIZER_HPP
-
-// mapnik
-#include <mapnik/color.hpp>
-#include <mapnik/font_set.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/text_placements/base.hpp>
-#include <mapnik/text_placements/dummy.hpp>
-
-// boost
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
-
-// stl
-#include <string>
-
-#if (!defined(NO_DEPRECATION_WARNINGS) && __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-#define func_deprecated __attribute__ ((deprecated))
-#else
-#define func_deprecated
-#endif
-
-namespace mapnik
-{
-
-enum halo_rasterizer_enum
-{
-    HALO_RASTERIZER_FULL,
-    HALO_RASTERIZER_FAST,
-    halo_rasterizer_enum_MAX
-};
-
-DEFINE_ENUM(halo_rasterizer_e, halo_rasterizer_enum);
-
-struct MAPNIK_DECL text_symbolizer : public symbolizer_base
-{
-    // Note - we do not use boost::make_shared below as VC2008 and VC2010 are
-    // not able to compile make_shared used within a constructor
-    text_symbolizer(text_placements_ptr placements = text_placements_ptr(new text_placements_dummy));
-    text_symbolizer(expression_ptr name, std::string const& face_name,
-                    float size, color const& fill,
-                    text_placements_ptr placements = text_placements_ptr(new text_placements_dummy)
-        );
-    text_symbolizer(expression_ptr name, float size, color const& fill,
-                    text_placements_ptr placements = text_placements_ptr(new text_placements_dummy)
-        );
-    text_symbolizer(text_symbolizer const& rhs);
-    text_symbolizer& operator=(text_symbolizer const& rhs);
-    expression_ptr get_name() const func_deprecated;
-    void set_name(expression_ptr expr);
-
-    expression_ptr get_orientation() const func_deprecated; // orienation (rotation angle atm)
-    void set_orientation(expression_ptr expr);
-
-    double get_text_ratio() const func_deprecated; // target ratio for text bounding box in pixels
-    void set_text_ratio(double ratio);
-    double get_wrap_width() const func_deprecated; // width to wrap text at, or trigger ratio
-    void set_wrap_width(double width);
-    unsigned char get_wrap_char() const func_deprecated; // character used to wrap lines
-    std::string get_wrap_char_string() const func_deprecated; // character used to wrap lines as std::string
-    void set_wrap_char(unsigned char character);
-    void set_wrap_char_from_string(std::string const& character);
-    text_transform_e get_text_transform() const func_deprecated; // text conversion on strings before display
-    void set_text_transform(text_transform_e convert);
-    double get_line_spacing() const func_deprecated; // spacing between lines of text
-    void set_line_spacing(double spacing);
-    double get_character_spacing() const func_deprecated; // spacing between characters in text
-    void set_character_spacing(double spacing);
-    double get_label_spacing() const func_deprecated; // spacing between repeated labels on lines
-    void set_label_spacing(double spacing);
-    unsigned get_label_position_tolerance() const func_deprecated; //distance the label can be moved on the line to fit, if 0 the default is used
-    void set_label_position_tolerance(unsigned tolerance);
-    bool get_force_odd_labels() const func_deprecated; // try render an odd amount of labels
-    void set_force_odd_labels(bool force);
-    double get_max_char_angle_delta() const func_deprecated; // maximum change in angle between adjacent characters
-    void set_max_char_angle_delta(double angle);
-    double get_text_size() const func_deprecated;
-    void set_text_size(double size);
-    std::string const& get_face_name() const func_deprecated;
-    void set_face_name(std::string face_name);
-    boost::optional<font_set> const& get_fontset() const func_deprecated;
-    void set_fontset(font_set const& fset);
-    color const& get_fill() const func_deprecated;
-    void set_fill(color const& fill);
-    void set_halo_fill(color const& fill);
-    color const& get_halo_fill() const func_deprecated;
-    void set_halo_radius(double radius);
-    double get_halo_radius() const func_deprecated;
-    void set_halo_rasterizer(halo_rasterizer_e rasterizer_p);
-    halo_rasterizer_e get_halo_rasterizer() const;
-    void set_label_placement(label_placement_e label_p);
-    label_placement_e get_label_placement() const func_deprecated;
-    void set_vertical_alignment(vertical_alignment_e valign);
-    vertical_alignment_e get_vertical_alignment() const func_deprecated;
-    void set_displacement(double x, double y);
-    void set_displacement(position const& p);
-    position const& get_displacement() const func_deprecated;
-    void set_avoid_edges(bool avoid);
-    bool get_avoid_edges() const func_deprecated;
-    void set_minimum_distance(double distance);
-    double get_minimum_distance() const func_deprecated;
-    void set_minimum_padding(double distance);
-    double get_minimum_padding() const func_deprecated;
-    void set_minimum_path_length(double size);
-    double get_minimum_path_length() const;
-    void set_allow_overlap(bool overlap);
-    bool get_allow_overlap() const func_deprecated;
-    void set_text_opacity(double opacity);
-    double get_text_opacity() const func_deprecated;
-    void set_wrap_before(bool wrap_before);
-    bool get_wrap_before() const func_deprecated; // wrap text at wrap_char immediately before current work
-    void set_horizontal_alignment(horizontal_alignment_e valign);
-    horizontal_alignment_e get_horizontal_alignment() const func_deprecated;
-    void set_justify_alignment(justify_alignment_e valign);
-    justify_alignment_e get_justify_alignment() const func_deprecated;
-    text_placements_ptr get_placement_options() const;
-    void set_placement_options(text_placements_ptr placement_options);
-    void set_largest_bbox_only(bool val);
-    bool largest_bbox_only() const;
-private:
-    text_placements_ptr placement_options_;
-    halo_rasterizer_e halo_rasterizer_;
-};
-}
-
-#endif // MAPNIK_TEXT_SYMBOLIZER_HPP
diff --git a/include/mapnik/tiff_io.hpp b/include/mapnik/tiff_io.hpp
index 18b6661..395b9c4 100644
--- a/include/mapnik/tiff_io.hpp
+++ b/include/mapnik/tiff_io.hpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2011 Artem Pavlenko
+ * Copyright (C) 2013 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -86,7 +86,8 @@ static toff_t tiff_seek_proc(thandle_t fd, toff_t off, int whence)
     // grow std::stringstream buffer (re: libtiff/tif_stream.cxx)
     std::ios::pos_type pos = out->tellp();
     // second check needed for clang (libcxx doesn't set failbit when seeking beyond the current buffer size
-    if( out->fail() || off != pos)
+
+    if( out->fail() || static_cast<std::streamoff>(off) != pos)
     {
         std::ios::iostate old_state;
         std::ios::pos_type  origin;
@@ -143,19 +144,19 @@ static toff_t tiff_size_proc(thandle_t fd)
     out->seekp(0, std::ios::end);
     std::ios::pos_type len = out->tellp();
     out->seekp(pos);
-    return (toff_t)len;
+    return static_cast<toff_t>(len);
 }
 
-static tsize_t tiff_dummy_read_proc(thandle_t fd, tdata_t buf, tsize_t size)
+static tsize_t tiff_dummy_read_proc(thandle_t , tdata_t , tsize_t)
 {
     return 0;
 }
 
-static void tiff_dummy_unmap_proc(thandle_t fd, tdata_t base, toff_t size)
+static void tiff_dummy_unmap_proc(thandle_t , tdata_t , toff_t)
 {
 }
 
-static int tiff_dummy_map_proc(thandle_t fd, tdata_t* pbase, toff_t* psize)
+static int tiff_dummy_map_proc(thandle_t , tdata_t*, toff_t* )
 {
     return 0;
 }
@@ -167,6 +168,7 @@ void save_as_tiff(T1 & file, T2 const& image)
     const int height = image.height();
     const int scanline_size = sizeof(unsigned char) * width * 3;
 
+
     TIFF* output = RealTIFFOpen("mapnik_tiff_stream",
                                 "wm",
                                 (thandle_t)&file,
@@ -193,17 +195,16 @@ void save_as_tiff(T1 & file, T2 const& image)
 
     // TODO - handle palette images
     // std::vector<mapnik::rgb> const& palette
-    /*
-      unsigned short r[256], g[256], b[256];
-      for (int i = 0; i < (1 << 24); ++i)
-      {
-      r[i] = (unsigned short)palette[i * 3 + 0] << 8;
-      g[i] = (unsigned short)palette[i * 3 + 1] << 8;
-      b[i] = (unsigned short)palette[i * 3 + 2] << 8;
-      }
-      TIFFSetField(output, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE);
-      TIFFSetField(output, TIFFTAG_COLORMAP, r, g, b);
-    */
+
+    //  unsigned short r[256], g[256], b[256];
+    //  for (int i = 0; i < (1 << 24); ++i)
+    //  {
+    //  r[i] = (unsigned short)palette[i * 3 + 0] << 8;
+    //  g[i] = (unsigned short)palette[i * 3 + 1] << 8;
+    //  b[i] = (unsigned short)palette[i * 3 + 2] << 8;
+    //  }
+    //  TIFFSetField(output, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE);
+    //  TIFFSetField(output, TIFFTAG_COLORMAP, r, g, b);
 
 #ifdef HAVE_GEOTIFF
     GTIF* geotiff = GTIFNew(output);
@@ -238,15 +239,9 @@ void save_as_tiff(T1 & file, T2 const& image)
 
         for (int i = 0, index = 0; i < width; ++i)
         {
-#ifdef MAPNIK_BIG_ENDIAN
-            row[index++] = (imageRow[i] >> 24) & 0xff;
-            row[index++] = (imageRow[i] >> 16) & 0xff;
-            row[index++] = (imageRow[i] >> 8) & 0xff;
-#else
             row[index++] = (imageRow[i]) & 0xff;
             row[index++] = (imageRow[i] >> 8) & 0xff;
             row[index++] = (imageRow[i] >> 16) & 0xff;
-#endif
         }
 
         TIFFWriteScanline(output, row, next_scanline, 0);
@@ -265,5 +260,4 @@ void save_as_tiff(T1 & file, T2 const& image)
 
 }
 
-
 #endif // MAPNIK_TIFF_IO_HPP
diff --git a/include/mapnik/transform_expression.hpp b/include/mapnik/transform_expression.hpp
index 7b5b55c..c1715aa 100644
--- a/include/mapnik/transform_expression.hpp
+++ b/include/mapnik/transform_expression.hpp
@@ -24,19 +24,21 @@
 #define MAPNIK_TRANSFORM_EXPRESSION_HPP
 
 // mapnik
+#include <mapnik/config.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/expression_node_types.hpp>
 #include <mapnik/expression_node.hpp>
-
+#include <mapnik/util/variant.hpp>
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/variant/variant.hpp>
-
 // fusion
 #include <boost/fusion/include/at.hpp>
 #include <boost/fusion/include/vector.hpp>
 
 // stl
 #include <vector>
+#include <memory>
 
 namespace mapnik {
 
@@ -87,7 +89,7 @@ struct scale_node
 
 struct rotate_node
 {
-    typedef boost::fusion::vector2<expr_node, expr_node> coords_type;
+    using coords_type = boost::fusion::vector2<expr_node, expr_node>;
 
     expr_node angle_;
     expr_node cx_;
@@ -143,14 +145,13 @@ namespace detail {
 // default-constructible, but also makes little sense with our variant of
 // transform nodes...
 
-typedef boost::variant< identity_node
-                        , matrix_node
-                        , translate_node
-                        , scale_node
-                        , rotate_node
-                        , skewX_node
-                        , skewY_node
-                        > transform_variant;
+using transform_variant =  mapnik::util::variant< identity_node,
+                                                  matrix_node,
+                                                  translate_node,
+                                                  scale_node,
+                                                  rotate_node,
+                                                  skewX_node,
+                                                  skewY_node >;
 
 // ... thus we wrap the variant-type in a distinct type and provide
 // a custom clear overload, which resets the value to identity_node
@@ -189,11 +190,45 @@ inline void clear(transform_node& val)
     val.base_ = identity_node();
 }
 
+namespace  {
+
+struct is_null_transform_node : public mapnik::util::static_visitor<bool>
+{
+    bool operator() (value const& val) const
+    {
+        return val.is_null();
+    }
+
+    bool operator() (value_null const&) const
+    {
+        return true;
+    }
+
+    template <typename T>
+    bool operator() (T const&) const
+    {
+        return false;
+    }
+
+    bool operator() (detail::transform_variant const& var) const
+    {
+        return util::apply_visitor(*this, var);
+    }
+};
+
+}
+
+template <typename T>
+bool is_null_node (T const& node)
+{
+    return util::apply_visitor(is_null_transform_node(), node);
+}
+
 } // namespace detail
 
-typedef detail::transform_node              transform_node;
-typedef std::vector<transform_node>         transform_list;
-typedef boost::shared_ptr<transform_list>   transform_list_ptr;
+using transform_node = detail::transform_node             ;
+using transform_list = std::vector<transform_node>        ;
+using transform_list_ptr = std::shared_ptr<transform_list>  ;
 
 MAPNIK_DECL std::string to_expression_string(transform_node const& node);
 MAPNIK_DECL std::string to_expression_string(transform_list const& list);
diff --git a/include/mapnik/transform_expression_grammar.hpp b/include/mapnik/transform_expression_grammar.hpp
index 886ffaa..220d512 100644
--- a/include/mapnik/transform_expression_grammar.hpp
+++ b/include/mapnik/transform_expression_grammar.hpp
@@ -25,6 +25,7 @@
 
 // mapnik
 #include <mapnik/expression_grammar.hpp>
+#include <mapnik/expression_node_types.hpp>
 #include <mapnik/transform_expression.hpp>
 
 // spirit
@@ -38,10 +39,10 @@ namespace mapnik {
     struct transform_expression_grammar
         : qi::grammar<Iterator, transform_list(), space_type>
     {
-        explicit transform_expression_grammar(expression_grammar<Iterator> const& g);
+        explicit transform_expression_grammar();
 
-        typedef qi::rule<Iterator, transform_node(), space_type> node_rule;
-        typedef qi::rule<Iterator, transform_list(), space_type> list_rule;
+        using node_rule = qi::rule<Iterator, transform_node(), space_type>;
+        using list_rule = qi::rule<Iterator, transform_list(), space_type>;
 
         // rules
         qi::rule<Iterator, std::string(), space_type>    attr;
@@ -57,6 +58,7 @@ namespace mapnik {
         qi::rule<Iterator, transform_node(), space_type> rotate;
         qi::rule<Iterator, transform_node(), space_type> skewX;
         qi::rule<Iterator, transform_node(), space_type> skewY;
+        mapnik::expression_grammar<Iterator> g_;
     };
 
 } // namespace mapnik
diff --git a/include/mapnik/transform_expression_grammar_impl.hpp b/include/mapnik/transform_expression_grammar_impl.hpp
new file mode 100644
index 0000000..b080e20
--- /dev/null
+++ b/include/mapnik/transform_expression_grammar_impl.hpp
@@ -0,0 +1,130 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/transform_expression_grammar.hpp>
+
+// boost
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_object.hpp>
+
+
+namespace mapnik {
+
+namespace qi = boost::spirit::qi;
+
+template <typename Iterator>
+transform_expression_grammar<Iterator>::transform_expression_grammar()
+        : transform_expression_grammar::base_type(start)
+{
+    using boost::phoenix::construct;
+    qi::_1_type _1;
+    qi::_4_type _4;
+    qi::_2_type _2;
+    qi::_5_type _5;
+    qi::_3_type _3;
+    qi::_6_type _6;
+    qi::_val_type _val;
+    qi::char_type char_;
+    qi::double_type double_;
+    qi::lit_type lit;
+    qi::no_case_type no_case;
+
+    // [http://www.w3.org/TR/SVG/coords.html#TransformAttribute]
+
+    // The value of the ‘transform’ attribute is a <transform-list>, which
+    // is defined as a list of transform definitions, which are applied in
+    // the order provided.  The individual transform definitions are
+    // separated by whitespace and/or a comma.
+
+    qi::no_skip_type no_skip;
+    start = transform_ % no_skip[char_(", ")] ;
+
+    transform_ = matrix | translate | scale | rotate | skewX | skewY ;
+
+    // matrix(<a> <b> <c> <d> <e> <f>)
+    matrix = no_case[lit("matrix")]
+        >> (lit('(')
+            >> ( atom >> sep_atom >> sep_atom >> sep_atom >> sep_atom
+                      >> sep_atom >> lit(')')
+               | expr >> sep_expr >> sep_expr >> sep_expr >> sep_expr
+                      >> sep_expr >> lit(')')
+               ))
+        [ _val = construct<matrix_node>(_1,_2,_3,_4,_5,_6) ];
+
+    // translate(<tx> [<ty>])
+    translate = no_case[lit("translate")]
+        >> lit('(')
+        >> ( ( atom >> -sep_atom >> lit(')') )
+             [ _val = construct<translate_node>(_1,_2) ]
+           | ( expr >> -sep_expr >> lit(')') )
+             [ _val = construct<translate_node>(_1,_2) ]
+           );
+
+    // scale(<sx> [<sy>])
+    scale = no_case[lit("scale")]
+        >> lit('(')
+        >> ( ( atom >> -sep_atom >> lit(')') )
+             [ _val = construct<scale_node>(_1,_2) ]
+           | ( expr >> -sep_expr >> lit(')') )
+             [ _val = construct<scale_node>(_1,_2) ]
+           );
+
+    // rotate(<rotate-angle> [<cx> <cy>])
+    rotate = no_case[lit("rotate")]
+        >> lit('(')
+        >> ( ( atom >> -( sep_atom >> sep_atom ) >> lit(')') )
+             [ _val = construct<rotate_node>(_1,_2) ]
+           | ( expr >> -( sep_expr >> sep_expr ) >> lit(')') )
+             [ _val = construct<rotate_node>(_1,_2) ]
+           );
+
+    // skewX(<skew-angle>)
+    skewX = no_case[lit("skewX")]
+        >> lit('(')
+        >> expr [ _val = construct<skewX_node>(_1) ]
+        >> lit(')');
+
+    // skewY(<skew-angle>)
+    skewY = no_case[lit("skewY")]
+        >> lit('(')
+        >> expr [ _val = construct<skewY_node>(_1) ]
+        >> lit(')');
+
+    // number or attribute
+    atom = double_ [ _val = _1 ]
+        | attr [ _val = construct<mapnik::attribute>(_1) ];
+
+    // Individual arguments in lists consiting solely of numbers and/or
+    // attributes are separated by whitespace and/or a comma.
+    sep_atom = -lit(',') >> atom [ _val = _1 ];
+
+    // Individual arguments in lists containing one or more compound
+    // expressions are separated by a comma.
+    sep_expr = lit(',') >> expr [ _val = _1 ];
+
+    attr = g_.attr.alias();
+    expr = g_.expr.alias();
+}
+
+}
diff --git a/include/mapnik/transform_path_adapter.hpp b/include/mapnik/transform_path_adapter.hpp
new file mode 100644
index 0000000..bb85aa1
--- /dev/null
+++ b/include/mapnik/transform_path_adapter.hpp
@@ -0,0 +1,132 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_TRANSFORM_PATH_ADAPTER_HPP
+#define MAPNIK_TRANSFORM_PATH_ADAPTER_HPP
+
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/vertex.hpp>
+#include <mapnik/config.hpp>
+
+#include <cstddef>
+
+namespace mapnik  {
+
+template <typename Transform, typename Geometry>
+struct transform_path_adapter
+{
+    // SFINAE value_type detector
+    template <typename T>
+    struct void_type
+    {
+        using type = void;
+    };
+
+    template <typename T, typename D, typename _ = void>
+    struct select_value_type
+    {
+        using type = D;
+    };
+
+    template <typename T, typename D>
+    struct select_value_type<T, D, typename void_type<typename T::value_type>::type>
+    {
+        using type = typename T::value_type;
+    };
+
+    using size_type = std::size_t;
+    using value_type = typename select_value_type<Geometry, void>::type;
+
+    transform_path_adapter(Transform const& t,
+                     Geometry & geom,
+                     proj_transform const& prj_trans)
+        : t_(&t),
+        geom_(geom),
+        prj_trans_(&prj_trans)  {}
+
+    explicit transform_path_adapter(Geometry & geom)
+        : t_(0),
+        geom_(geom),
+        prj_trans_(0)  {}
+
+    void set_proj_trans(proj_transform const& prj_trans)
+    {
+        prj_trans_ = &prj_trans;
+    }
+
+    void set_trans(Transform  const& t)
+    {
+        t_ = &t;
+    }
+
+    unsigned vertex(double *x, double *y) const
+    {
+        unsigned command;
+        bool ok = false;
+        bool skipped_points = false;
+        while (!ok)
+        {
+            command = geom_.vertex(x,y);
+            if (command == SEG_END)
+            {
+                return command;
+            }
+            double z=0;
+            ok = prj_trans_->backward(*x, *y, z);
+            if (!ok) {
+                skipped_points = true;
+            }
+        }
+        if (skipped_points && (command == SEG_LINETO))
+        {
+            command = SEG_MOVETO;
+        }
+        t_->forward(x,y);
+        return command;
+    }
+
+    void rewind(unsigned pos) const
+    {
+        geom_.rewind(pos);
+    }
+
+    unsigned type() const
+    {
+        return static_cast<unsigned>(geom_.type());
+    }
+
+    Geometry const& geom() const
+    {
+        return geom_;
+    }
+
+private:
+    Transform const* t_;
+    Geometry & geom_;
+    proj_transform const* prj_trans_;
+};
+
+
+}
+
+
+#endif // MAPNIK_TRANSFORM_PATH_ADAPTER_HPP
diff --git a/include/mapnik/transform_processor.hpp b/include/mapnik/transform_processor.hpp
index d720c43..82d210c 100644
--- a/include/mapnik/transform_processor.hpp
+++ b/include/mapnik/transform_processor.hpp
@@ -25,18 +25,10 @@
 
 // mapnik
 #include <mapnik/config.hpp>
-#ifdef MAPNIK_LOG
-#include <mapnik/debug.hpp>
-#endif
 #include <mapnik/value.hpp>
 #include <mapnik/transform_expression.hpp>
 #include <mapnik/expression_evaluator.hpp>
-
-// boost
-#include <boost/foreach.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp>
-
+#include <mapnik/util/variant.hpp>
 // agg
 #include <agg_trans_affine.h>
 
@@ -46,90 +38,95 @@ class feature_impl;
 
 template <typename Container> struct expression_attributes;
 
-template <typename T>
+template <typename T, typename T1>
 struct transform_processor
 {
-    typedef T feature_type;
-    typedef agg::trans_affine transform_type;
+    using feature_type = T;
+    using variable_type = T1;
+    using transform_type = agg::trans_affine;
 
     template <typename Container>
-    struct attribute_collector : boost::static_visitor<void>
+    struct attribute_collector : util::static_visitor<void>
     {
         expression_attributes<Container> collect_;
 
         attribute_collector(Container& names)
             : collect_(names) {}
 
-        void operator() (identity_node const& node) const
+        void operator() (identity_node const&) const
         {
-            boost::ignore_unused_variable_warning(node);
         }
 
         void operator() (matrix_node const& node) const
         {
-            boost::apply_visitor(collect_, node.a_);
-            boost::apply_visitor(collect_, node.b_);
-            boost::apply_visitor(collect_, node.c_);
-            boost::apply_visitor(collect_, node.d_);
-            boost::apply_visitor(collect_, node.e_);
-            boost::apply_visitor(collect_, node.f_);
+            util::apply_visitor(collect_, node.a_);
+            util::apply_visitor(collect_, node.b_);
+            util::apply_visitor(collect_, node.c_);
+            util::apply_visitor(collect_, node.d_);
+            util::apply_visitor(collect_, node.e_);
+            util::apply_visitor(collect_, node.f_);
         }
 
         void operator() (translate_node const& node) const
         {
-            boost::apply_visitor(collect_, node.tx_);
-            boost::apply_visitor(collect_, node.ty_);
+            util::apply_visitor(collect_, node.tx_);
+            util::apply_visitor(collect_, node.ty_);
         }
 
         void operator() (scale_node const& node) const
         {
-            boost::apply_visitor(collect_, node.sx_);
-            boost::apply_visitor(collect_, node.sy_);
+            util::apply_visitor(collect_, node.sx_);
+            util::apply_visitor(collect_, node.sy_);
         }
 
         void operator() (rotate_node const& node) const
         {
-            boost::apply_visitor(collect_, node.angle_);
-            boost::apply_visitor(collect_, node.cx_);
-            boost::apply_visitor(collect_, node.cy_);
+            util::apply_visitor(collect_, node.angle_);
+            util::apply_visitor(collect_, node.cx_);
+            util::apply_visitor(collect_, node.cy_);
         }
 
         void operator() (skewX_node const& node) const
         {
-            boost::apply_visitor(collect_, node.angle_);
+            util::apply_visitor(collect_, node.angle_);
         }
 
         void operator() (skewY_node const& node) const
         {
-            boost::apply_visitor(collect_, node.angle_);
+            util::apply_visitor(collect_, node.angle_);
         }
     };
 
-    struct node_evaluator : boost::static_visitor<void>
+    struct node_evaluator : util::static_visitor<void>
     {
-        node_evaluator(transform_type& tr, feature_type const& feat)
-            : transform_(tr), feature_(feat) {}
+        node_evaluator(transform_type& tr,
+                       feature_type const& feat,
+                       variable_type const& v,
+                       double scale_factor)
+            : transform_(tr),
+              feature_(feat),
+              vars_(v),
+              scale_factor_(scale_factor) {}
 
-        void operator() (identity_node const& node)
+        void operator() (identity_node const&)
         {
-            boost::ignore_unused_variable_warning(node);
         }
 
         void operator() (matrix_node const& node)
         {
-            double a = eval(node.a_);
+            double a = eval(node.a_); // scale x;
             double b = eval(node.b_);
             double c = eval(node.c_);
-            double d = eval(node.d_);
-            double e = eval(node.e_);
-            double f = eval(node.f_);
+            double d = eval(node.d_); // scale y;
+            double e = eval(node.e_) * scale_factor_; // translate x
+            double f = eval(node.f_) * scale_factor_; // translate y
             transform_.multiply(agg::trans_affine(a, b, c, d, e, f));
         }
 
         void operator() (translate_node const& node)
         {
-            double tx = eval(node.tx_);
-            double ty = eval(node.ty_, 0.0);
+            double tx = eval(node.tx_) * scale_factor_;
+            double ty = eval(node.ty_, 0.0) * scale_factor_;
             transform_.translate(tx, ty);
         }
 
@@ -171,17 +168,19 @@ struct transform_processor
 
         double eval(expr_node const& x) const
         {
-            mapnik::evaluate<feature_type, value_type> e(feature_);
-            return boost::apply_visitor(e, x).to_double();
+            mapnik::evaluate<feature_type, value_type, variable_type> e(feature_,vars_);
+            return util::apply_visitor(e, x).to_double();
         }
 
         double eval(expr_node const& x, double def) const
         {
-            return is_null(x) ? def : eval(x);
+            return detail::is_null_node(x) ? def : eval(x);
         }
 
         transform_type& transform_;
         feature_type const& feature_;
+        variable_type const& vars_;
+        double scale_factor_;
     };
 
     template <typename Container>
@@ -190,33 +189,25 @@ struct transform_processor
     {
         attribute_collector<Container> collect(names);
 
-        BOOST_FOREACH (transform_node const& node, list)
+        for (transform_node const& node : list)
         {
-            boost::apply_visitor(collect, *node);
+            util::apply_visitor(collect, *node);
         }
     }
 
-    static void evaluate(transform_type& tr, feature_type const& feat,
-                         transform_list const& list)
+    static void evaluate(transform_type& tr,
+                         feature_type const& feat,
+                         variable_type const& vars,
+                         transform_list const& list,
+                         double scale_factor)
     {
-        node_evaluator eval(tr, feat);
+        node_evaluator eval(tr, feat, vars, scale_factor);
 
-        #ifdef MAPNIK_LOG
-        MAPNIK_LOG_DEBUG(transform) << "transform: begin with " << to_string(matrix_node(tr));
-        #endif
-
-        BOOST_REVERSE_FOREACH (transform_node const& node, list)
+        transform_list::const_reverse_iterator rit;
+        for (rit = list.rbegin(); rit!= list.rend(); ++rit)
         {
-            boost::apply_visitor(eval, *node);
-            #ifdef MAPNIK_LOG
-            MAPNIK_LOG_DEBUG(transform) << "transform: apply " << to_string(*node);
-            MAPNIK_LOG_DEBUG(transform) << "transform: result " << to_string(matrix_node(tr));
-            #endif
+            util::apply_visitor(eval, *(*rit));
         }
-
-        #ifdef MAPNIK_LOG
-        MAPNIK_LOG_DEBUG(transform) << "transform: end";
-        #endif
     }
 
     static std::string to_string(transform_node const& node)
@@ -230,7 +221,7 @@ struct transform_processor
     }
 };
 
-typedef mapnik::transform_processor<feature_impl> transform_processor_type;
+using transform_processor_type = mapnik::transform_processor<feature_impl,attributes>;
 
 } // namespace mapnik
 
diff --git a/include/mapnik/unicode.hpp b/include/mapnik/unicode.hpp
index fd4e8e4..4f84c74 100644
--- a/include/mapnik/unicode.hpp
+++ b/include/mapnik/unicode.hpp
@@ -26,24 +26,21 @@
 //mapnik
 #include <mapnik/config.hpp>
 #include <mapnik/noncopyable.hpp>
-
-// icu
-#include <unicode/unistr.h>
-#include <unicode/ucnv.h>
-
-// boost
-#include <boost/cstdint.hpp>
+#include <mapnik/value_types.hpp>
 
 // stl
+#include <cstdint>
 #include <string>
 
+struct UConverter;
+
 namespace mapnik {
 
 class MAPNIK_DECL transcoder : private mapnik::noncopyable
 {
 public:
     explicit transcoder (std::string const& encoding);
-    UnicodeString transcode(const char* data, boost::int32_t length = -1) const;
+    mapnik::value_unicode_string transcode(const char* data, std::int32_t length = -1) const;
     ~transcoder();
 private:
     bool ok_;
@@ -51,10 +48,4 @@ private:
 };
 }
 
-namespace U_ICU_NAMESPACE {
-inline std::size_t hash_value(const UnicodeString& val) {
-    return val.hashCode();
-}
-}
-
 #endif // MAPNIK_UNICODE_HPP
diff --git a/include/mapnik/unique_lock.hpp b/include/mapnik/unique_lock.hpp
new file mode 100644
index 0000000..58d113c
--- /dev/null
+++ b/include/mapnik/unique_lock.hpp
@@ -0,0 +1,33 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_UNIQUE_LOCK_HPP
+#define MAPNIK_UNIQUE_LOCK_HPP
+
+#include <mutex>
+
+namespace mapnik
+{
+    using scoped_lock = std::unique_lock<std::mutex>;
+}
+
+#endif // MAPNIK_UNIQUE_LOCK_HPP
diff --git a/include/mapnik/util/container_adapter.hpp b/include/mapnik/util/container_adapter.hpp
index 5f98e99..e67514d 100644
--- a/include/mapnik/util/container_adapter.hpp
+++ b/include/mapnik/util/container_adapter.hpp
@@ -25,20 +25,28 @@
 
 // mapnik
 #include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
 #include <mapnik/util/path_iterator.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/support_container.hpp>
+#pragma GCC diagnostic pop
 
 namespace boost { namespace spirit { namespace traits {
 
 template <>
 struct is_container<mapnik::geometry_type const> : mpl::true_ {} ;
 
+// make gcc and darwin toolsets happy.
+template <>
+struct is_container<mapnik::geometry_container const> : mpl::false_ {} ;
+
 template <>
 struct container_iterator<mapnik::geometry_type const>
 {
-    typedef mapnik::util::path_iterator<mapnik::geometry_type> type;
+    using type = mapnik::util::path_iterator<mapnik::geometry_type>;
 };
 
 template <>
@@ -55,7 +63,7 @@ template <>
 struct end_container<mapnik::geometry_type const>
 {
     static mapnik::util::path_iterator<mapnik::geometry_type>
-    call (mapnik::geometry_type const& g)
+    call (mapnik::geometry_type const&)
     {
         return mapnik::util::path_iterator<mapnik::geometry_type>();
     }
diff --git a/include/mapnik/util/conversions.hpp b/include/mapnik/util/conversions.hpp
index 9c7c0a5..0908814 100644
--- a/include/mapnik/util/conversions.hpp
+++ b/include/mapnik/util/conversions.hpp
@@ -29,6 +29,7 @@
 
 // stl
 #include <string>
+#include <algorithm>
 
 namespace mapnik { namespace util {
 
@@ -38,8 +39,32 @@ to avoid the compile time overhead given it is included
 by many other headers inside mapnik.
 */
 
-MAPNIK_DECL bool string2bool(std::string const& value, bool & result);
-MAPNIK_DECL bool string2bool(const char * iter, const char * end, bool & result);
+MAPNIK_DECL inline bool string2bool(std::string const& value, bool & result)
+{
+    if (value.empty() || value.size() > 5) {
+        return false;
+    } else if (value == "true") {
+        return result = true;
+    } else if (value == "false") {
+        result = false;
+        return true;
+    }
+    std::string val(value);
+    std::transform(val.begin(), val.end(), val.begin(), ::tolower);
+    if (val == "true" || val == "yes" || val == "1" || val == "on") {
+        return result = true;
+    } else if (val == "false" || val == "no" || val == "0" || val == "off") {
+        result = false;
+        return true;
+    }
+    return false;
+}
+
+MAPNIK_DECL inline bool string2bool(const char * iter, const char * end, bool & result)
+{
+    std::string val(iter,end);
+    return string2bool(val,result);
+}
 
 MAPNIK_DECL bool string2int(std::string const& value, int & result);
 MAPNIK_DECL bool string2int(const char * iter, const char * end, int & result);
diff --git a/include/mapnik/util/dasharray_parser.hpp b/include/mapnik/util/dasharray_parser.hpp
index e1e4c12..f22b927 100644
--- a/include/mapnik/util/dasharray_parser.hpp
+++ b/include/mapnik/util/dasharray_parser.hpp
@@ -23,45 +23,31 @@
 #ifndef MAPNIK_UTIL_DASHARRAY_PARSER_HPP
 #define MAPNIK_UTIL_DASHARRAY_PARSER_HPP
 
-#include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_stl.hpp>
+#include <vector>
+#include <string>
 
 namespace mapnik { namespace util {
 
-template <typename Iterator>
-bool parse_dasharray(Iterator first, Iterator last, std::vector<double>& dasharray)
+bool parse_dasharray(std::string const& value, std::vector<double>& dasharray);
+
+inline bool add_dashes(std::vector<double> & buf, std::vector<std::pair<double,double> > & dash)
 {
-    using qi::double_;
-    using qi::phrase_parse;
-    using qi::_1;
-    using qi::lit;
-    using qi::char_;
-#if BOOST_VERSION > 104200
-    using qi::no_skip;
-#else
-    using qi::lexeme;
-#endif
-    using phoenix::push_back;
-    // SVG 
-    // dasharray ::= (length | percentage) (comma-wsp dasharray)?
-    // no support for 'percentage' as viewport is unknown at load_map
-    // 
-    bool r = phrase_parse(first, last,
-                          (double_[push_back(phoenix::ref(dasharray), _1)] %
-#if BOOST_VERSION > 104200
-                          no_skip[char_(", ")]
-#else
-                          lexeme[char_(", ")]
-#endif
-                          | lit("none")),
-                          qi::ascii::space);
-    
-    if (first != last) 
-        return false;
-    
-    return r;
+    if (buf.empty()) return false;
+    size_t size = buf.size();
+    if (size % 2 == 1)
+    {
+        buf.insert(buf.end(),buf.begin(),buf.end());
+    }
+    std::vector<double>::const_iterator pos = buf.begin();
+    while (pos != buf.end())
+    {
+        if (*pos > 0.0 || *(pos+1) > 0.0) // avoid both dash and gap eq 0.0
+        {
+            dash.emplace_back(*pos,*(pos + 1));
+        }
+        pos +=2;
+    }
+    return !buf.empty();
 }
 
 }}
diff --git a/include/mapnik/util/deepcopy.hpp b/include/mapnik/util/deepcopy.hpp
deleted file mode 100644
index c326e87..0000000
--- a/include/mapnik/util/deepcopy.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_DEEPCOPY_HPP
-#define MAPNIK_DEEPCOPY_HPP
-
-#include <mapnik/map.hpp>
-
-namespace mapnik { namespace util {
-
-// poor man deepcopy implementation
-    void deepcopy(Map const& map_in, Map & map_out);
-
-    }}
-
-#endif  // MAPNIK_DEEPSOPY_HPP
diff --git a/include/mapnik/util/featureset_buffer.hpp b/include/mapnik/util/featureset_buffer.hpp
new file mode 100644
index 0000000..6fc05a4
--- /dev/null
+++ b/include/mapnik/util/featureset_buffer.hpp
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_FEATURESET_BUFFER_HPP
+#define MAPNIK_FEATURESET_BUFFER_HPP
+
+// mapnik
+#include <mapnik/featureset.hpp>
+
+#include <vector>
+
+namespace mapnik {
+
+class featureset_buffer : public Featureset
+{
+public:
+    featureset_buffer()
+      : features_(),
+        pos_(),
+        end_()
+    {}
+
+    virtual ~featureset_buffer() {}
+
+    feature_ptr next()
+    {
+        if (pos_ != end_)
+        {
+            return *pos_++;
+        }
+        return feature_ptr();
+    }
+
+    void push(feature_ptr const& feature)
+    {
+        features_.push_back(feature);
+    }
+
+    void prepare()
+    {
+        pos_ = features_.begin();
+        end_ = features_.end();
+    }
+
+    void clear()
+    {
+        features_.clear();
+    }
+
+private:
+    std::vector<feature_ptr> features_;
+    std::vector<feature_ptr>::iterator pos_;
+    std::vector<feature_ptr>::iterator end_;
+};
+
+}
+
+#endif // MAPNIK_FEATURESET_BUFFER_HPP
diff --git a/include/mapnik/util/file_io.hpp b/include/mapnik/util/file_io.hpp
new file mode 100644
index 0000000..803c535
--- /dev/null
+++ b/include/mapnik/util/file_io.hpp
@@ -0,0 +1,93 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_FILE_IO_HPP
+#define MAPNIK_FILE_IO_HPP
+
+// mapnik
+#include <mapnik/utils.hpp>
+#include <mapnik/make_unique.hpp>
+#include <mapnik/noncopyable.hpp>
+//#include <mapnik/config.hpp>
+
+// stl
+#include <cstdio>
+#include <memory>
+#include <string>
+
+namespace mapnik { namespace util {
+
+class file : public noncopyable
+{
+public:
+    using file_ptr = std::unique_ptr<std::FILE, int (*)(std::FILE *)>;
+    using data_type = std::unique_ptr<char[]>;
+    
+    explicit file(std::string const& filename)
+#ifdef _WINDOWS
+     : file_(_wfopen(mapnik::utf8_to_utf16(filename).c_str(), L"rb"), std::fclose),
+#else
+     : file_(std::fopen(filename.c_str(),"rb"), std::fclose),
+#endif
+       size_(0)
+
+     {
+        if (file_)
+        {
+            std::fseek(file_.get(), 0, SEEK_END);
+            size_ = std::ftell(file_.get());
+            std::fseek(file_.get(), 0, SEEK_SET);
+        }
+     }
+
+    inline bool open() const
+    {
+        return file_ ? true : false;
+    }
+
+    inline std::FILE * get() const
+    {
+        return file_.get();;
+    }
+
+    inline std::size_t size() const
+    {
+        return size_;
+    }
+
+    inline data_type data() const
+    {
+        if (!size_) return nullptr;
+        std::fseek(file_.get(), 0, SEEK_SET);
+        data_type buffer(new char[size_]);
+        std::fread(buffer.get(), size_, 1, file_.get());
+        return buffer;
+    }
+private:
+    file_ptr file_;
+    std::size_t size_;
+};
+
+}}
+
+
+#endif // FILE_IO
diff --git a/include/mapnik/util/fs.hpp b/include/mapnik/util/fs.hpp
index 6917059..04775cd 100644
--- a/include/mapnik/util/fs.hpp
+++ b/include/mapnik/util/fs.hpp
@@ -33,6 +33,7 @@ namespace mapnik { namespace util {
 
 MAPNIK_DECL bool exists(std::string const& value);
 MAPNIK_DECL bool is_directory(std::string const& value);
+MAPNIK_DECL bool is_regular_file(std::string const& value);
 MAPNIK_DECL bool remove(std::string const& value);
 MAPNIK_DECL bool is_relative(std::string const& value);
 MAPNIK_DECL std::string make_relative(std::string const& filepath, std::string const& base);
@@ -43,4 +44,4 @@ MAPNIK_DECL std::string dirname(std::string const& value);
 
 
 
-#endif
\ No newline at end of file
+#endif
diff --git a/include/mapnik/util/geometry_svg_generator.hpp b/include/mapnik/util/geometry_svg_generator.hpp
deleted file mode 100644
index 0705210..0000000
--- a/include/mapnik/util/geometry_svg_generator.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_GEOMETRY_SVG_GENERATOR_HPP
-#define MAPNIK_GEOMETRY_SVG_GENERATOR_HPP
-
-// mapnik
-#include <mapnik/global.hpp>
-#include <mapnik/geometry.hpp> // for container stuff
-#include <mapnik/ctrans.hpp> // for container stuff
-#include <mapnik/util/path_iterator.hpp>
-#include <mapnik/util/container_adapter.hpp>
-
-// boost
-#include <boost/tuple/tuple.hpp>
-#include <boost/spirit/include/karma.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_fusion.hpp>
-#include <boost/spirit/include/phoenix_function.hpp>
-#include <boost/spirit/include/phoenix_statement.hpp>
-#include <boost/fusion/include/boost_tuple.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-
-//#define BOOST_SPIRIT_USE_PHOENIX_V3 1
-
-/*!
- * adapted to conform to the concepts
- * required by Karma to be recognized as a container of
- * attributes for output generation.
- */
-namespace boost { namespace spirit { namespace traits {
-
-// TODO - this needs to be made generic to any path type
-typedef mapnik::coord_transform<mapnik::CoordTransform, mapnik::geometry_type> path_type;
-
-template <>
-struct is_container<path_type const> : mpl::true_ {} ;
-
-template <>
-struct container_iterator<path_type const>
-{
-    typedef mapnik::util::path_iterator<path_type> type;
-};
-
-template <>
-struct begin_container<path_type const>
-{
-    static mapnik::util::path_iterator<path_type>
-    call (path_type const& g)
-    {
-        return mapnik::util::path_iterator<path_type>(g);
-    }
-};
-
-template <>
-struct end_container<path_type const>
-{
-    static mapnik::util::path_iterator<path_type>
-    call (path_type const& g)
-    {
-        return mapnik::util::path_iterator<path_type>();
-    }
-};
-
-}}}
-
-
-namespace mapnik { namespace util {
-
-    namespace karma = boost::spirit::karma;
-    namespace phoenix = boost::phoenix;
-
-    namespace svg_detail {
-
-    template <typename Geometry>
-    struct get_type
-    {
-        template <typename T>
-        struct result { typedef int type; };
-
-        int operator() (Geometry const& geom) const
-        {
-            return static_cast<int>(geom.type());
-        }
-    };
-
-    template <typename T>
-    struct get_first
-    {
-        typedef T geometry_type;
-
-        template <typename U>
-        struct result { typedef typename geometry_type::value_type const type; };
-
-        typename geometry_type::value_type const operator() (geometry_type const& geom) const
-        {
-            typename geometry_type::value_type coord;
-            geom.rewind(0);
-            boost::get<0>(coord) = geom.vertex(&boost::get<1>(coord),&boost::get<2>(coord));
-            return coord;
-        }
-    };
-
-    template <typename T>
-    struct coordinate_policy : karma::real_policies<T>
-    {
-        typedef boost::spirit::karma::real_policies<T> base_type;
-        static int floatfield(T n) { return base_type::fmtflags::fixed; }
-        static unsigned precision(T n) { return 6u ;}
-    };
-    }
-
-    template <typename OutputIterator, typename Geometry>
-    struct svg_generator :
-        karma::grammar<OutputIterator, Geometry const& ()>
-    {
-
-        typedef Geometry geometry_type;
-        typedef typename boost::remove_pointer<typename geometry_type::value_type>::type coord_type;
-
-        svg_generator()
-            : svg_generator::base_type(svg)
-        {
-            using boost::spirit::karma::uint_;
-            using boost::spirit::karma::_val;
-            using boost::spirit::karma::_1;
-            using boost::spirit::karma::lit;
-            using boost::spirit::karma::_a;
-
-            svg = point | linestring | polygon
-                ;
-
-            point = &uint_(mapnik::Point)[_1 = _type(_val)]
-                << svg_point [_1 = _first(_val)]
-                ;
-
-            svg_point = &uint_
-                << lit("cx=\"") << coordinate
-                << lit("\" cy=\"") << coordinate
-                << lit('\"')
-                ;
-
-            linestring = &uint_(mapnik::LineString)[_1 = _type(_val)]
-                << svg_path << lit('\"')
-                ;
-
-            polygon = &uint_(mapnik::Polygon)[_1 = _type(_val)]
-                << svg_path << lit('\"')
-                ;
-
-            svg_path %= ((&uint_(mapnik::SEG_MOVETO) << lit("d=\"") << lit('M')
-                          | &uint_(mapnik::SEG_LINETO) [_a +=1] << karma::string [if_(_a == 1) [_1 = "L" ] ])
-                         << lit(' ') << coordinate << lit(' ') << coordinate) % lit(' ')
-                ;
-
-
-
-        }
-        // rules
-        karma::rule<OutputIterator, geometry_type const& ()> svg;
-        karma::rule<OutputIterator, geometry_type const& ()> point;
-        karma::rule<OutputIterator, geometry_type const& ()> linestring;
-        karma::rule<OutputIterator, geometry_type const& ()> polygon;
-
-        karma::rule<OutputIterator, coord_type ()> svg_point;
-        karma::rule<OutputIterator, karma::locals<unsigned>, geometry_type const& ()> svg_path;
-
-        // phoenix functions
-        phoenix::function<svg_detail::get_type<geometry_type> > _type;
-        phoenix::function<svg_detail::get_first<geometry_type> > _first;
-        //
-        karma::real_generator<double, svg_detail::coordinate_policy<double> > coordinate;
-
-    };
-
-}}
-
-#endif // MAPNIK_GEOMETRY_SVG_GENERATOR_HPP
diff --git a/include/mapnik/util/geometry_to_ds_type.hpp b/include/mapnik/util/geometry_to_ds_type.hpp
index cff44bc..234d25e 100644
--- a/include/mapnik/util/geometry_to_ds_type.hpp
+++ b/include/mapnik/util/geometry_to_ds_type.hpp
@@ -43,11 +43,9 @@ namespace mapnik { namespace util {
         else if (paths.size() > 1)
         {
             int multi_type = 0;
-            geometry_container::const_iterator itr = paths.begin();
-            geometry_container::const_iterator end = paths.end();
-            for ( ; itr!=end; ++itr)
+            for (auto const& geom : paths)
             {
-                int type = static_cast<int>(itr->type());
+                int type = static_cast<int>(geom.type());
                 if (multi_type > 0 && multi_type != type)
                 {
                     result.reset(datasource::Collection);
diff --git a/include/mapnik/util/geometry_to_geojson.hpp b/include/mapnik/util/geometry_to_geojson.hpp
new file mode 100644
index 0000000..3500544
--- /dev/null
+++ b/include/mapnik/util/geometry_to_geojson.hpp
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GEOMETRY_TO_GEOJSON_HPP
+#define MAPNIK_GEOMETRY_TO_GEOJSON_HPP
+
+// mapnik
+#include <mapnik/geometry.hpp>
+#include <mapnik/json/geometry_generator_grammar.hpp>
+
+namespace mapnik { namespace util {
+
+inline bool to_geojson(std::string & json, mapnik::geometry_type const& geom)
+{
+    using sink_type = std::back_insert_iterator<std::string>;
+    static const mapnik::json::geometry_generator_grammar<sink_type, mapnik::geometry_type> grammar;
+    sink_type sink(json);
+    return boost::spirit::karma::generate(sink, grammar, geom);
+}
+
+inline bool to_geojson(std::string & json, mapnik::geometry_container const& geom)
+{
+    using sink_type = std::back_insert_iterator<std::string>;
+    static const mapnik::json::multi_geometry_generator_grammar<sink_type, mapnik::geometry_container> grammar;
+    sink_type sink(json);
+    return boost::spirit::karma::generate(sink, grammar, geom);
+}
+
+}}
+
+#endif // MAPNIK_GEOMETRY_TO_GEOJSON_HPP
diff --git a/include/mapnik/util/geometry_to_svg.hpp b/include/mapnik/util/geometry_to_svg.hpp
index d7294d8..6e207db 100644
--- a/include/mapnik/util/geometry_to_svg.hpp
+++ b/include/mapnik/util/geometry_to_svg.hpp
@@ -26,7 +26,8 @@
 // mapnik
 #include <mapnik/global.hpp>
 #include <mapnik/geometry.hpp>
-#include <mapnik/util/geometry_svg_generator.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/svg/geometry_svg_generator.hpp>
 
 // boost
 #include <boost/spirit/include/karma.hpp>
@@ -35,11 +36,11 @@ namespace mapnik { namespace util {
 
 namespace karma = boost::spirit::karma;
 
-bool to_svg(std::string & svg, mapnik::geometry_type const& geom)
+inline bool to_svg(std::string & svg, mapnik::geometry_type const& geom)
 {
-    typedef std::back_insert_iterator<std::string> sink_type;
+    using sink_type = std::back_insert_iterator<std::string>;
     sink_type sink(svg);
-    svg_generator<sink_type, mapnik::geometry_type> generator;
+    static const svg::svg_path_generator<sink_type, mapnik::geometry_type> generator;
     bool result = karma::generate(sink, generator, geom);
     return result;
 }
@@ -49,7 +50,7 @@ bool to_svg(std::string & svg, mapnik::geometry_type const& geom)
 /*
 bool to_svg(std::string & svg, mapnik::geometry_container const& geom)
 {
-    typedef std::back_insert_iterator<std::string> sink_type;
+    using sink_type = std::back_insert_iterator<std::string>;
     sink_type sink(svg);
     svg_multi_generator<sink_type> generator;
     bool result = karma::generate(sink, generator, geom);
diff --git a/include/mapnik/util/geometry_to_wkb.hpp b/include/mapnik/util/geometry_to_wkb.hpp
index ef7f078..3ec50fc 100644
--- a/include/mapnik/util/geometry_to_wkb.hpp
+++ b/include/mapnik/util/geometry_to_wkb.hpp
@@ -24,18 +24,19 @@
 #define MAPNIK_GEOMETRY_TO_WKB_HPP
 
 // mapnik
-#include <mapnik/global.hpp>
+#include <mapnik/config.hpp>
+#include <mapnik/make_unique.hpp>
 #include <mapnik/geometry.hpp>
-
-// boost
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/interprocess/streams/bufferstream.hpp>
-#include <boost/foreach.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/vertex.hpp>
 
 // stl
+#include <sstream>
 #include <vector>
 #include <cstdio>
+#include <cstring>
+#include <memory>
+#include <cassert>
 
 namespace mapnik { namespace util {
 
@@ -73,14 +74,33 @@ inline void reverse_bytes(char size, char *address)
     }
 }
 
+struct wkb_stream
+{
+    wkb_stream(char * buffer, std::size_t size)
+        : buffer_(buffer),
+          size_(size),
+          pos_(0) {}
+
+    void write(char const* data, std::size_t size)
+    {
+        std::copy(data, data + size, buffer_ + pos_);
+        pos_ += size;
+    }
+
+    bool good()
+    {
+        return (pos_ <= size_) ? true : false;
+    }
+
+    char * buffer_;
+    std::streamsize size_;
+    std::streamsize pos_;
+};
+
 template <typename S, typename T>
 inline void write (S & stream, T val, std::size_t size, wkbByteOrder byte_order)
 {
-#ifdef MAPNIK_BIG_ENDIAN
-    bool need_swap =  byte_order ? wkbNDR : wkbXDR;
-#else
     bool need_swap =  byte_order ? wkbXDR : wkbNDR;
-#endif
     char* buf = reinterpret_cast<char*>(&val);
     if (need_swap)
     {
@@ -115,17 +135,17 @@ struct wkb_buffer
     char * data_;
 };
 
-typedef boost::shared_ptr<wkb_buffer> wkb_buffer_ptr;
+using wkb_buffer_ptr = std::unique_ptr<wkb_buffer>;
 
 template<typename GeometryType>
 wkb_buffer_ptr to_point_wkb( GeometryType const& g, wkbByteOrder byte_order)
 {
     assert(g.size() == 1);
     std::size_t size = 1 + 4 + 8*2 ; // byteOrder + wkbType + Point
-    wkb_buffer_ptr wkb = boost::make_shared<wkb_buffer>(size);
-    boost::interprocess::bufferstream ss(wkb->buffer(), wkb->size(), std::ios::out | std::ios::binary);
+    wkb_buffer_ptr wkb = std::make_unique<wkb_buffer>(size);
+    wkb_stream ss(wkb->buffer(), wkb->size());
     ss.write(reinterpret_cast<char*>(&byte_order),1);
-    int type = static_cast<int>(mapnik::Point);
+    int type = static_cast<int>(mapnik::geometry_type::types::Point);
     write(ss,type,4,byte_order);
     double x = 0;
     double y = 0;
@@ -133,7 +153,7 @@ wkb_buffer_ptr to_point_wkb( GeometryType const& g, wkbByteOrder byte_order)
     write(ss,x,8,byte_order);
     write(ss,y,8,byte_order);
     assert(ss.good());
-    return wkb;
+    return std::move(wkb);
 }
 
 template<typename GeometryType>
@@ -142,10 +162,10 @@ wkb_buffer_ptr to_line_string_wkb( GeometryType const& g, wkbByteOrder byte_orde
     unsigned num_points = g.size();
     assert(num_points > 1);
     std::size_t size = 1 + 4 + 4 + 8*2*num_points ; // byteOrder + wkbType + numPoints + Point*numPoints
-    wkb_buffer_ptr wkb = boost::make_shared<wkb_buffer>(size);
-    boost::interprocess::bufferstream ss(wkb->buffer(), wkb->size(), std::ios::out | std::ios::binary);
+    wkb_buffer_ptr wkb = std::make_unique<wkb_buffer>(size);
+    wkb_stream ss(wkb->buffer(), wkb->size());
     ss.write(reinterpret_cast<char*>(&byte_order),1);
-    int type = static_cast<int>(mapnik::LineString);
+    int type = static_cast<int>(mapnik::geometry_type::types::LineString);
     write(ss,type,4,byte_order);
     write(ss,num_points,4,byte_order);
     double x = 0;
@@ -157,7 +177,7 @@ wkb_buffer_ptr to_line_string_wkb( GeometryType const& g, wkbByteOrder byte_orde
         write(ss,y,8,byte_order);
     }
     assert(ss.good());
-    return wkb;
+    return std::move(wkb);
 }
 
 template<typename GeometryType>
@@ -166,9 +186,9 @@ wkb_buffer_ptr to_polygon_wkb( GeometryType const& g, wkbByteOrder byte_order)
     unsigned num_points = g.size();
     assert(num_points > 1);
 
-    typedef std::pair<double,double> point_type;
-    typedef std::vector<point_type> linear_ring;
-    boost::ptr_vector<linear_ring> rings;
+    using point_type = std::pair<double,double>;
+    using linear_ring = std::vector<point_type>;
+    std::vector<linear_ring> rings;
 
     double x = 0;
     double y = 0;
@@ -178,31 +198,32 @@ wkb_buffer_ptr to_polygon_wkb( GeometryType const& g, wkbByteOrder byte_order)
         unsigned command = g.vertex(i,&x,&y);
         if (command == SEG_MOVETO)
         {
-            rings.push_back(new linear_ring); // start new loop
-            rings.back().push_back(std::make_pair(x,y));
+            linear_ring ring;
+            ring.reserve(1);
+            ring.emplace_back(x,y);
+            rings.push_back(std::move(ring)); // start new loop
             size += 4; // num_points
             size += 2 * 8; // point
         }
         else if (command == SEG_LINETO)
         {
-            rings.back().push_back(std::make_pair(x,y));
+            rings.back().emplace_back(x,y);
             size += 2 * 8; // point
         }
     }
     unsigned num_rings = rings.size();
-    wkb_buffer_ptr wkb = boost::make_shared<wkb_buffer>(size);
-    boost::interprocess::bufferstream ss(wkb->buffer(), wkb->size(), std::ios::out | std::ios::binary);
-
+    wkb_buffer_ptr wkb = std::make_unique<wkb_buffer>(size);
+    wkb_stream ss(wkb->buffer(), wkb->size());
     ss.write(reinterpret_cast<char*>(&byte_order),1);
-    int type = static_cast<int>(mapnik::Polygon);
+    int type = static_cast<int>(mapnik::geometry_type::types::Polygon);
     write(ss,type,4,byte_order);
     write(ss,num_rings,4,byte_order);
 
-    BOOST_FOREACH ( linear_ring const& ring, rings)
+    for ( linear_ring const& ring : rings)
     {
         unsigned num_ring_points = ring.size();
         write(ss,num_ring_points,4,byte_order);
-        BOOST_FOREACH ( point_type const& pt, ring)
+        for ( point_type const& pt : ring)
         {
             write(ss,pt.first,8,byte_order);
             write(ss,pt.second,8,byte_order);
@@ -210,7 +231,7 @@ wkb_buffer_ptr to_polygon_wkb( GeometryType const& g, wkbByteOrder byte_order)
     }
 
     assert(ss.good());
-    return wkb;
+    return std::move(wkb);
 }
 
 template<typename GeometryType>
@@ -220,13 +241,13 @@ wkb_buffer_ptr to_wkb(GeometryType const& g, wkbByteOrder byte_order )
 
     switch (g.type())
     {
-    case mapnik::Point:
+    case mapnik::geometry_type::types::Point:
         wkb = to_point_wkb(g, byte_order);
         break;
-    case mapnik::LineString:
+    case mapnik::geometry_type::types::LineString:
         wkb = to_line_string_wkb(g, byte_order);
         break;
-    case mapnik::Polygon:
+    case mapnik::geometry_type::types::Polygon:
         wkb = to_polygon_wkb(g, byte_order);
         break;
     default:
@@ -250,31 +271,30 @@ wkb_buffer_ptr to_wkb(geometry_container const& paths, wkbByteOrder byte_order )
         bool collection = false;
         int multi_type = 0;
         size_t multi_size = 1 + 4 + 4;
-        geometry_container::const_iterator itr = paths.begin();
-        geometry_container::const_iterator end = paths.end();
-        for ( ; itr!=end; ++itr)
+
+        for (auto const& geom : paths)
         {
-            wkb_buffer_ptr wkb = to_wkb(*itr,byte_order);
+            wkb_buffer_ptr wkb = to_wkb(geom,byte_order);
             multi_size += wkb->size();
-            int type = static_cast<int>(itr->type());
-            if (multi_type > 0 && multi_type != itr->type())
+            int type = static_cast<int>(geom.type());
+            if (multi_type > 0 && multi_type != geom.type())
                 collection = true;
             multi_type = type;
-            wkb_cont.push_back(wkb);
+            wkb_cont.push_back(std::move(wkb));
         }
 
-        wkb_buffer_ptr multi_wkb = boost::make_shared<wkb_buffer>(multi_size);
-        boost::interprocess::bufferstream ss(multi_wkb->buffer(), multi_wkb->size(), std::ios::out | std::ios::binary);
+        wkb_buffer_ptr multi_wkb = std::make_unique<wkb_buffer>(multi_size);
+        wkb_stream ss(multi_wkb->buffer(), multi_wkb->size());
         ss.write(reinterpret_cast<char*>(&byte_order),1);
         multi_type = collection ? 7 : multi_type + 3;
         write(ss,multi_type, 4, byte_order);
         write(ss,paths.size(),4,byte_order);
 
-        BOOST_FOREACH ( wkb_buffer_ptr const& wkb, wkb_cont)
+        for ( wkb_buffer_ptr const& wkb : wkb_cont)
         {
             ss.write(wkb->buffer(),wkb->size());
         }
-        return multi_wkb;
+        return std::move(multi_wkb);
     }
 
     return wkb_buffer_ptr();
diff --git a/include/mapnik/util/geometry_to_wkt.hpp b/include/mapnik/util/geometry_to_wkt.hpp
index 5f6ca4b..5d4967f 100644
--- a/include/mapnik/util/geometry_to_wkt.hpp
+++ b/include/mapnik/util/geometry_to_wkt.hpp
@@ -24,16 +24,28 @@
 #define MAPNIK_GEOMETRY_TO_WKT_HPP
 
 // mapnik
-#include <mapnik/config.hpp>
 #include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/wkt/wkt_generator_grammar.hpp>
 
 namespace mapnik { namespace util {
 
-MAPNIK_DECL bool to_wkt(std::string & wkt, mapnik::geometry_type const& geom);
-
-MAPNIK_DECL bool to_wkt(std::string & wkt, mapnik::geometry_container const& geom);
+inline bool to_wkt(std::string & wkt, mapnik::geometry_type const& geom)
+{
+    using sink_type = std::back_insert_iterator<std::string>;
+    sink_type sink(wkt);
+    static const mapnik::wkt::wkt_generator<sink_type, mapnik::geometry_type> generator(true);
+    return boost::spirit::karma::generate(sink, generator, geom);
+}
+
+inline bool to_wkt(std::string & wkt, mapnik::geometry_container const& geom)
+{
+    using sink_type = std::back_insert_iterator<std::string>;
+    sink_type sink(wkt);
+    static const mapnik::wkt::wkt_multi_generator<sink_type, mapnik::geometry_container> generator;
+    return boost::spirit::karma::generate(sink, generator, geom);
+}
 
 }}
 
-
 #endif // MAPNIK_GEOMETRY_TO_WKT_HPP
diff --git a/include/mapnik/util/geometry_wkt_generator.hpp b/include/mapnik/util/geometry_wkt_generator.hpp
deleted file mode 100644
index 79f9fe1..0000000
--- a/include/mapnik/util/geometry_wkt_generator.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#ifndef MAPNIK_GEOMETRY_WKT_GENERATOR_HPP
-#define MAPNIK_GEOMETRY_WKT_GENERATOR_HPP
-
-// mapnik
-#include <mapnik/global.hpp>
-#include <mapnik/geometry.hpp>
-#include <mapnik/vertex.hpp>    // for CommandType::SEG_MOVETO
-
-// boost
-#include <boost/tuple/tuple.hpp>
-#include <boost/spirit/include/karma.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_fusion.hpp>
-#include <boost/spirit/include/phoenix_function.hpp>
-#include <boost/spirit/include/phoenix_statement.hpp>
-#include <boost/fusion/include/boost_tuple.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-
-#include <boost/math/special_functions/trunc.hpp> // trunc to avoid needing C++11
-//#define BOOST_SPIRIT_USE_PHOENIX_V3 1
-
-namespace boost { namespace spirit { namespace traits {
-
-// make gcc and darwin toolsets happy.
-template <>
-struct is_container<mapnik::geometry_container>
-    : mpl::false_
-{};
-
-}}}
-
-namespace mapnik { namespace util {
-
-namespace karma = boost::spirit::karma;
-namespace phoenix = boost::phoenix;
-
-namespace detail {
-
-template <typename Geometry>
-struct get_type
-{
-    template <typename T>
-    struct result { typedef int type; };
-
-    int operator() (Geometry const& geom) const
-    {
-        return static_cast<int>(geom.type());
-    }
-};
-
-template <typename T>
-struct get_first
-{
-    typedef T geometry_type;
-
-    template <typename U>
-    struct result { typedef typename geometry_type::value_type const type; };
-
-    typename geometry_type::value_type const operator() (geometry_type const& geom) const
-    {
-        typename geometry_type::value_type coord;
-        geom.rewind(0);
-        boost::get<0>(coord) = geom.vertex(&boost::get<1>(coord),&boost::get<2>(coord));
-        return coord;
-    }
-};
-
-template <typename T>
-struct multi_geometry_
-{
-    typedef T geometry_container;
-
-    template <typename U>
-    struct result { typedef bool type; };
-    bool operator() (geometry_container const& geom) const
-    {
-        return geom.size() > 1 ? true : false;
-    }
-};
-
-template <typename T>
-struct get_x
-{
-    typedef T value_type;
-
-    template <typename U>
-    struct result { typedef double type; };
-
-    double operator() (value_type const& val) const
-    {
-        return boost::get<1>(val);
-    }
-};
-
-template <typename T>
-struct get_y
-{
-    typedef T value_type;
-
-    template <typename U>
-    struct result { typedef double type; };
-
-    double operator() (value_type const& val) const
-    {
-        return boost::get<2>(val);
-    }
-};
-
-template <typename T>
-struct multi_geometry_type
-{
-    typedef T geometry_container;
-
-    template <typename U>
-    struct result { typedef boost::tuple<unsigned,bool> type; };
-
-    boost::tuple<unsigned,bool> operator() (geometry_container const& geom) const;
-};
-
-
-template <typename T>
-struct wkt_coordinate_policy : karma::real_policies<T>
-{
-    typedef boost::spirit::karma::real_policies<T> base_type;
-    static int floatfield(T n) { return base_type::fmtflags::fixed; }
-    static unsigned precision(T n)
-    {
-        if (n == 0.0) return 0;
-        return 6;
-        //using namespace boost::spirit; // for traits
-        //return std::max(6u, static_cast<unsigned>(15 - boost::math::trunc(log10(traits::get_absolute_value(n)))));
-    }
-
-    template <typename OutputIterator>
-    static bool dot(OutputIterator& sink, T n, unsigned precision)
-    {
-        if (n == 0) return true;
-        return base_type::dot(sink, n, precision);
-    }
-
-    template <typename OutputIterator>
-    static bool fraction_part(OutputIterator& sink, T n
-                       , unsigned adjprec, unsigned precision)
-    {
-        if (n == 0) return true;
-        return base_type::fraction_part(sink, n, adjprec, precision);
-    }
-};
-
-}
-
-template <typename OutputIterator, typename Geometry>
-struct wkt_generator :
-    karma::grammar<OutputIterator, Geometry const& ()>
-{
-    typedef Geometry geometry_type;
-    typedef typename boost::remove_pointer<typename geometry_type::value_type>::type coord_type;
-
-    wkt_generator(bool single = false);
-    // rules
-    karma::rule<OutputIterator, geometry_type const& ()> wkt;
-    karma::rule<OutputIterator, geometry_type const& ()> point;
-    karma::rule<OutputIterator, geometry_type const& ()> linestring;
-    karma::rule<OutputIterator, geometry_type const& ()> polygon;
-
-    karma::rule<OutputIterator, geometry_type const& ()> coords;
-    karma::rule<OutputIterator, karma::locals<unsigned,double,double>, geometry_type const& ()> coords2;
-    karma::rule<OutputIterator, coord_type ()> point_coord;
-    karma::rule<OutputIterator, karma::locals<double,double>, coord_type (unsigned&, double&, double& )> polygon_coord;
-
-    // phoenix functions
-    phoenix::function<detail::get_type<geometry_type> > _type;
-    phoenix::function<detail::get_first<geometry_type> > _first;
-    phoenix::function<detail::get_x<typename geometry_type::value_type> > _x;
-    phoenix::function<detail::get_y<typename geometry_type::value_type> > _y;
-    //
-    karma::real_generator<double, detail::wkt_coordinate_policy<double> > coordinate;
-};
-
-
-template <typename OutputIterator, typename GeometryContainer>
-struct wkt_multi_generator :
-        karma::grammar<OutputIterator, karma::locals< boost::tuple<unsigned,bool> >, GeometryContainer const& ()>
-{
-    typedef GeometryContainer geometry_contaner;
-    typedef boost::remove_pointer<typename geometry_container::value_type>::type geometry_type;
-
-    wkt_multi_generator();
-    // rules
-    karma::rule<OutputIterator, karma::locals<boost::tuple<unsigned,bool> >, GeometryContainer const& ()> wkt;
-    karma::rule<OutputIterator, GeometryContainer const& ()> geometry;
-    karma::rule<OutputIterator, geometry_type const& ()> single_geometry;
-    karma::rule<OutputIterator, GeometryContainer const& ()> multi_geometry;
-    wkt_generator<OutputIterator, geometry_type >  path;
-    // phoenix
-    phoenix::function<detail::multi_geometry_<GeometryContainer> > is_multi;
-    phoenix::function<detail::multi_geometry_type<GeometryContainer> > _multi_type;
-    phoenix::function<detail::get_type<geometry_type> > _type;
-    //
-    karma::symbols<unsigned, char const*> geometry_types;
-};
-
-}}
-
-
-#endif // MAPNIK_GEOMETRY_WKT_GENERATOR_HPP
diff --git a/include/mapnik/util/hsl.hpp b/include/mapnik/util/hsl.hpp
index 7c14584..f669c88 100644
--- a/include/mapnik/util/hsl.hpp
+++ b/include/mapnik/util/hsl.hpp
@@ -23,20 +23,17 @@
 #ifndef MAPNIK_HSL_HPP
 #define MAPNIK_HSL_HPP
 
-#include <cmath>
+#include <algorithm>
 
 namespace mapnik {
 
-static inline void rgb2hsl(unsigned char red, unsigned char green, unsigned char blue,
-             double & h, double & s, double & l) {
-    double r = red/255.0;
-    double g = green/255.0;
-    double b = blue/255.0;
+inline void rgb2hsl(double r, double g, double b,
+                    double & h, double & s, double & l) {
     double max = std::max(r,std::max(g,b));
     double min = std::min(r,std::min(g,b));
     double delta = max - min;
     double gamma = max + min;
-    h = s = l = gamma / 2.0;
+    h = 0.0, s = 0.0, l = gamma / 2.0;
     if (delta > 0.0) {
         s = l > 0.5 ? delta / (2.0 - gamma) : delta / gamma;
         if (max == r && max != g) h = (g - b) / delta + (g < b ? 6.0 : 0.0);
@@ -46,28 +43,32 @@ static inline void rgb2hsl(unsigned char red, unsigned char green, unsigned char
     }
 }
 
-static inline double hueToRGB(double m1, double m2, double h) {
-    // poor mans fmod
-    if(h < 0) h += 1;
-    if(h > 1) h -= 1;
-    if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
-    if (h * 2 < 1) return m2;
-    if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
+// http://www.w3.org/TR/css3-color/#hsl-color
+inline double hue_to_rgb(double m1, double m2, double h)
+{
+    if (h < 0.0) h = h + 1.0;
+    else if (h > 1.0) h = h - 1.0;
+    if (h * 6 < 1.0)
+        return m1 + (m2 - m1) * h * 6.0;
+    if (h * 2 < 1.0)
+        return m2;
+    if (h * 3 < 2.0)
+        return m1 + (m2 - m1)* (2.0/3.0 - h) * 6.0;
     return m1;
 }
 
-static inline void hsl2rgb(double h, double s, double l,
-             unsigned char & r, unsigned char & g, unsigned char & b) {
+inline void hsl2rgb(double h, double s, double l,
+                    double & r, double & g, double & b) {
     if (!s) {
-        r = g = b = static_cast<unsigned char>(l * 255);
+        r = g = b = l;
     }
-    double m2 = (l <= 0.5) ? l * (s + 1) : l + s - l * s;
-    double m1 = l * 2 - m2;
-    r = static_cast<unsigned char>(hueToRGB(m1, m2, h + 0.33333) * 255);
-    g = static_cast<unsigned char>(hueToRGB(m1, m2, h) * 255);
-    b = static_cast<unsigned char>(hueToRGB(m1, m2, h - 0.33333) * 255);
+    double m2 = (l <= 0.5) ? l * (s + 1.0) : l + s - l * s;
+    double m1 = l * 2.0 - m2;
+    r = hue_to_rgb(m1, m2, h + 1.0/3.0);
+    g = hue_to_rgb(m1, m2, h);
+    b = hue_to_rgb(m1, m2, h - 1.0/3.0);
 }
 
 }
 
-#endif // end MAPNIK_HSL_HPP
\ No newline at end of file
+#endif // end MAPNIK_HSL_HPP
diff --git a/include/mapnik/util/path_iterator.hpp b/include/mapnik/util/path_iterator.hpp
index f62624a..f9e60e0 100644
--- a/include/mapnik/util/path_iterator.hpp
+++ b/include/mapnik/util/path_iterator.hpp
@@ -27,22 +27,24 @@
 #include <mapnik/global.hpp>
 
 // boost
-#include <boost/tuple/tuple.hpp>
 #include <boost/iterator/iterator_facade.hpp>
 
+// stl
+#include <tuple>
+
 namespace mapnik { namespace util {
 
 template <typename T>
 class path_iterator
     : public boost::iterator_facade< path_iterator<T>,
-                                     boost::tuple<unsigned,double,double> const,
+                                     std::tuple<unsigned,double,double> const,
                                      boost::forward_traversal_tag
                                      >
 {
 
 public:
-    typedef T path_type;
-    typedef typename boost::tuple<unsigned, double, double> value_type;
+    using path_type = T;
+    using value_type = typename std::tuple<unsigned, double, double>;
 
     path_iterator()
         : v_(mapnik::SEG_END,0,0),
@@ -61,12 +63,12 @@ private:
 
     void increment()
     {
-        boost::get<0>(v_) = vertices_->vertex( &boost::get<1>(v_), &boost::get<2>(v_));
+        std::get<0>(v_) = vertices_->vertex( &std::get<1>(v_), &std::get<2>(v_));
     }
 
     bool equal( path_iterator const& other) const
     {
-        return boost::get<0>(v_) == boost::get<0>(other.v_);
+        return std::get<0>(v_) == std::get<0>(other.v_);
     }
 
     value_type const& dereference() const
diff --git a/include/mapnik/util/recursive_wrapper.hpp b/include/mapnik/util/recursive_wrapper.hpp
new file mode 100644
index 0000000..7a212e8
--- /dev/null
+++ b/include/mapnik/util/recursive_wrapper.hpp
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+
+#ifndef MAPNIK_UTIL_VARIANT_RECURSIVE_WRAPPER_HPP
+#define MAPNIK_UTIL_VARIANT_RECURSIVE_WRAPPER_HPP
+
+#include <utility>
+
+namespace mapnik { namespace util {
+
+template <typename T>
+class recursive_wrapper
+{
+public:
+    using type = T;
+private:
+
+    T* p_;
+
+public:
+
+    ~recursive_wrapper();
+    recursive_wrapper();
+
+    recursive_wrapper(recursive_wrapper const& operand);
+    recursive_wrapper(T const& operand);
+    recursive_wrapper(recursive_wrapper&& operand);
+    recursive_wrapper(T&& operand);
+
+private:
+
+    void assign(const T& rhs);
+
+public:
+
+    inline recursive_wrapper& operator=(recursive_wrapper const& rhs)
+    {
+        assign( rhs.get() );
+        return *this;
+    }
+
+    inline recursive_wrapper& operator=(T const& rhs)
+    {
+        assign( rhs );
+        return *this;
+    }
+
+    inline void swap(recursive_wrapper& operand) noexcept
+    {
+        T* temp = operand.p_;
+        operand.p_ = p_;
+        p_ = temp;
+    }
+
+
+    recursive_wrapper& operator=(recursive_wrapper&& rhs) noexcept
+    {
+        swap(rhs);
+        return *this;
+    }
+
+    recursive_wrapper& operator=(T&& rhs)
+    {
+        get() = std::move(rhs);
+        return *this;
+    }
+
+
+public:
+
+    T& get() { return *get_pointer(); }
+    const T& get() const { return *get_pointer(); }
+    T* get_pointer() { return p_; }
+    const T* get_pointer() const { return p_; }
+    operator T const&() const { return this->get(); }
+    operator T&() { return this->get(); }
+};
+
+template <typename T>
+recursive_wrapper<T>::~recursive_wrapper()
+{
+    delete p_;
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper()
+    : p_(new T)
+{
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(recursive_wrapper const& operand)
+    : p_(new T( operand.get() ))
+{
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(T const& operand)
+    : p_(new T(operand))
+{
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(recursive_wrapper&& operand)
+    : p_(operand.p_)
+{
+    operand.p_ = nullptr;
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(T&& operand)
+    : p_(new T( std::move(operand) ))
+{
+}
+
+template <typename T>
+void recursive_wrapper<T>::assign(const T& rhs)
+{
+    this->get() = rhs;
+}
+
+template <typename T>
+inline void swap(recursive_wrapper<T>& lhs, recursive_wrapper<T>& rhs) noexcept
+{
+    lhs.swap(rhs);
+}
+
+}}
+
+#endif // MAPNIK_UTIL_VARIANT_RECURSIVE_WRAPPER_HPP
diff --git a/include/mapnik/util/timer.hpp b/include/mapnik/util/timer.hpp
new file mode 100644
index 0000000..ee6ccf5
--- /dev/null
+++ b/include/mapnik/util/timer.hpp
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_UTIL_TIMER_HPP
+#define MAPNIK_UTIL_TIMER_HPP
+
+#include <string>
+#include <chrono>
+
+namespace mapnik {
+
+class auto_cpu_timer
+{
+public:
+    auto_cpu_timer(std::ostream & os, std::string const& message)
+        : start_(std::chrono::system_clock::now()),
+          os_(os),
+          message_(message) {}
+
+    ~auto_cpu_timer()
+    {
+        std::chrono::duration<double,std::milli> elapsed = std::chrono::system_clock::now() - start_;
+        os_ << message_ << std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count() << " ms" << std::endl;
+    }
+private:
+    std::chrono::time_point<std::chrono::system_clock> start_;
+    std::ostream & os_;
+    std::string message_;
+};
+
+// NOTE : add more timers here
+
+}
+
+#endif // MAPNIK_UTIL_TIMER_HPP
diff --git a/include/mapnik/util/variant.hpp b/include/mapnik/util/variant.hpp
new file mode 100644
index 0000000..55be089
--- /dev/null
+++ b/include/mapnik/util/variant.hpp
@@ -0,0 +1,764 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_UTIL_VARIANT_HPP
+#define MAPNIK_UTIL_VARIANT_HPP
+
+#include <mapnik/config.hpp>
+
+#include <utility> // swap
+#include <typeinfo>
+#include <type_traits>
+#include <stdexcept> // runtime_error
+#include <new> // operator new
+#include <cstddef> // size_t
+#include <iosfwd>
+#include <string>
+
+#include "recursive_wrapper.hpp"
+#include <boost/mpl/vector.hpp>
+
+#ifdef _MSC_VER
+ // http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
+ #ifdef NDEBUG
+  #define VARIANT_INLINE __forceinline
+ #else
+  #define VARIANT_INLINE __declspec(noinline)
+ #endif
+#else
+ #ifdef NDEBUG
+  #define VARIANT_INLINE inline __attribute__((always_inline))
+ #else
+  #define VARIANT_INLINE __attribute__((noinline))
+ #endif
+#endif
+
+#define VARIANT_MAJOR_VERSION 0
+#define VARIANT_MINOR_VERSION 1
+#define VARIANT_PATCH_VERSION 0
+
+// translates to 100
+#define VARIANT_VERSION (VARIANT_MAJOR_VERSION*100000) + (VARIANT_MINOR_VERSION*100) + (VARIANT_PATCH_VERSION)
+
+namespace mapnik { namespace util { namespace detail {
+
+static constexpr std::size_t invalid_value = std::size_t(-1);
+
+template <typename T, typename...Types>
+struct direct_type;
+
+template <typename T, typename First, typename...Types>
+struct direct_type<T, First, Types...>
+{
+    static constexpr std::size_t index = std::is_same<T, First>::value
+        ? sizeof...(Types) : direct_type<T, Types...>::index;
+};
+
+template <typename T>
+struct direct_type<T>
+{
+    static constexpr std::size_t index = invalid_value;
+};
+
+template <typename T, typename...Types>
+struct convertible_type;
+
+template <typename T, typename First, typename...Types>
+struct convertible_type<T, First, Types...>
+{
+    static constexpr std::size_t index = std::is_convertible<T, First>::value
+        ? sizeof...(Types) : convertible_type<T, Types...>::index;
+};
+
+template <typename T>
+struct convertible_type<T>
+{
+    static constexpr std::size_t index = invalid_value;
+};
+
+template <typename T, typename...Types>
+struct value_traits
+{
+    static constexpr std::size_t direct_index = direct_type<T, Types...>::index;
+    static constexpr std::size_t index =
+        (direct_index == invalid_value) ? convertible_type<T, Types...>::index : direct_index;
+};
+
+template <typename T, typename...Types>
+struct is_valid_type;
+
+template <typename T, typename First, typename... Types>
+struct is_valid_type<T, First, Types...>
+{
+    static constexpr bool value = std::is_convertible<T, First>::value
+        || is_valid_type<T, Types...>::value;
+};
+
+template <typename T>
+struct is_valid_type<T> : std::false_type {};
+
+template <std::size_t N, typename ... Types>
+struct select_type
+{
+    static_assert(N < sizeof...(Types), "index out of bounds");
+};
+
+template <std::size_t N, typename T, typename ... Types>
+struct select_type<N, T, Types...>
+{
+    using type = typename select_type<N - 1, Types...>::type;
+};
+
+template <typename T, typename ... Types>
+struct select_type<0, T, Types...>
+{
+    using type = T;
+};
+
+} // namespace detail
+
+// static visitor
+template <typename R = void>
+struct static_visitor
+{
+    using result_type = R;
+protected:
+    static_visitor() {}
+    ~static_visitor() {}
+};
+
+
+template <std::size_t arg1, std::size_t ... others>
+struct static_max;
+
+template <std::size_t arg>
+struct static_max<arg>
+{
+    static const std::size_t value = arg;
+};
+
+template <std::size_t arg1, std::size_t arg2, std::size_t ... others>
+struct static_max<arg1, arg2, others...>
+{
+    static const std::size_t value = arg1 >= arg2 ? static_max<arg1, others...>::value :
+        static_max<arg2, others...>::value;
+};
+
+template<typename... Types>
+struct variant_helper;
+
+template<typename T, typename... Types>
+struct variant_helper<T, Types...>
+{
+    VARIANT_INLINE static void destroy(const std::size_t id, void * data)
+    {
+        if (id == sizeof...(Types))
+        {
+            reinterpret_cast<T*>(data)->~T();
+        }
+        else
+        {
+            variant_helper<Types...>::destroy(id, data);
+        }
+    }
+
+    VARIANT_INLINE static void move(const std::size_t old_id, void * old_value, void * new_value)
+    {
+        if (old_id == sizeof...(Types))
+        {
+            new (new_value) T(std::move(*reinterpret_cast<T*>(old_value)));
+            //std::memcpy(new_value, old_value, sizeof(T));
+            // ^^  DANGER: this should only be considered for relocatable types e.g built-in types
+            // Also, I don't see any measurable performance benefit just yet
+        }
+        else
+        {
+            variant_helper<Types...>::move(old_id, old_value, new_value);
+        }
+    }
+
+    VARIANT_INLINE static void copy(const std::size_t old_id, const void * old_value, void * new_value)
+    {
+        if (old_id == sizeof...(Types))
+        {
+            new (new_value) T(*reinterpret_cast<const T*>(old_value));
+        }
+        else
+        {
+            variant_helper<Types...>::copy(old_id, old_value, new_value);
+        }
+    }
+};
+
+template<> struct variant_helper<>
+{
+    VARIANT_INLINE static void destroy(const std::size_t, void *) {}
+    VARIANT_INLINE static void move(const std::size_t, void *, void *) {}
+    VARIANT_INLINE static void copy(const std::size_t, const void *, void *) {}
+};
+
+namespace detail {
+
+template <typename T>
+struct unwrapper
+{
+    T const& operator() (T const& obj) const
+    {
+        return obj;
+    }
+
+    T& operator() (T & obj) const
+    {
+        return obj;
+    }
+};
+
+
+template <typename T>
+struct unwrapper<recursive_wrapper<T>>
+{
+    auto operator() (recursive_wrapper<T> const& obj) const
+        -> typename recursive_wrapper<T>::type const&
+    {
+        return obj.get();
+    }
+};
+
+
+template <typename F, typename V, typename...Types>
+struct dispatcher;
+
+template <typename F, typename V, typename T, typename...Types>
+struct dispatcher<F, V, T, Types...>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const& v, F f)
+    {
+        if (v.get_type_index() == sizeof...(Types))
+        {
+            return f(unwrapper<T>()(v. template get<T>()));
+        }
+        else
+        {
+            return dispatcher<F, V, Types...>::apply_const(v, f);
+        }
+    }
+
+    VARIANT_INLINE static result_type apply(V & v, F f)
+    {
+        if (v.get_type_index() == sizeof...(Types))
+        {
+            return f(unwrapper<T>()(v. template get<T>()));
+        }
+        else
+        {
+            return dispatcher<F, V, Types...>::apply(v, f);
+        }
+    }
+};
+
+template<typename F, typename V>
+struct dispatcher<F, V>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const&, F)
+    {
+        throw std::runtime_error(std::string("unary dispatch: FAIL ") + typeid(V).name());
+    }
+
+    VARIANT_INLINE static result_type apply(V &, F)
+    {
+        throw std::runtime_error(std::string("unary dispatch: FAIL ") + typeid(V).name());
+    }
+};
+
+
+template <typename F, typename V, typename T, typename...Types>
+struct binary_dispatcher_rhs;
+
+template <typename F, typename V, typename T0, typename T1, typename...Types>
+struct binary_dispatcher_rhs<F, V, T0, T1, Types...>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const& lhs, V const& rhs, F f)
+    {
+        if (rhs.get_type_index() == sizeof...(Types)) // call binary functor
+        {
+            return f(unwrapper<T0>()(lhs. template get<T0>()),
+                     unwrapper<T1>()(rhs. template get<T1>()));
+        }
+        else
+        {
+            return binary_dispatcher_rhs<F, V, T0, Types...>::apply_const(lhs, rhs, f);
+        }
+    }
+
+    VARIANT_INLINE static result_type apply(V & lhs, V & rhs, F f)
+    {
+        if (rhs.get_type_index() == sizeof...(Types)) // call binary functor
+        {
+            return f(unwrapper<T0>()(lhs. template get<T0>()),
+                     unwrapper<T1>()(rhs. template get<T1>()));
+        }
+        else
+        {
+            return binary_dispatcher_rhs<F, V, T0, Types...>::apply(lhs, rhs, f);
+        }
+    }
+
+};
+
+template<typename F, typename V, typename T>
+struct binary_dispatcher_rhs<F, V, T>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const&, V const&, F)
+    {
+        throw std::runtime_error("binary dispatch: FAIL");
+    }
+    VARIANT_INLINE static result_type apply(V &, V &, F)
+    {
+        throw std::runtime_error("binary dispatch: FAIL");
+    }
+};
+
+
+template <typename F, typename V, typename T, typename...Types>
+struct binary_dispatcher_lhs;
+
+template <typename F, typename V, typename T0, typename T1, typename...Types>
+struct binary_dispatcher_lhs<F, V, T0, T1, Types...>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const& lhs, V const& rhs, F f)
+    {
+        if (lhs.get_type_index() == sizeof...(Types)) // call binary functor
+        {
+            return f(lhs. template get<T1>(), rhs. template get<T0>());
+        }
+        else
+        {
+            return binary_dispatcher_lhs<F, V, T0, Types...>::apply_const(lhs, rhs, f);
+        }
+    }
+
+    VARIANT_INLINE static result_type apply(V & lhs, V & rhs, F f)
+    {
+        if (lhs.get_type_index() == sizeof...(Types)) // call binary functor
+        {
+            return f(lhs. template get<T1>(), rhs. template get<T0>());
+        }
+        else
+        {
+            return binary_dispatcher_lhs<F, V, T0, Types...>::apply(lhs, rhs, f);
+        }
+    }
+
+};
+
+template<typename F, typename V, typename T>
+struct binary_dispatcher_lhs<F, V, T>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const&, V const&, F)
+    {
+        throw std::runtime_error("binary dispatch: FAIL");
+    }
+
+    VARIANT_INLINE static result_type apply(V &, V &, F)
+    {
+        throw std::runtime_error("binary dispatch: FAIL");
+    }
+};
+
+template <typename F, typename V, typename...Types>
+struct binary_dispatcher;
+
+template <typename F, typename V, typename T, typename...Types>
+struct binary_dispatcher<F, V, T, Types...>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const& v0, V const& v1, F f)
+    {
+        if (v0.get_type_index() == sizeof...(Types))
+        {
+            if (v0.get_type_index() == v1.get_type_index())
+            {
+                return f(v0. template get<T>(), v1. template get<T>()); // call binary functor
+            }
+            else
+            {
+                return binary_dispatcher_rhs<F, V, T, Types...>::apply_const(v0, v1, f);
+            }
+        }
+        else if (v1.get_type_index() == sizeof...(Types))
+        {
+            return binary_dispatcher_lhs<F, V, T, Types...>::apply_const(v0, v1, f);
+        }
+        return binary_dispatcher<F, V, Types...>::apply_const(v0, v1, f);
+    }
+
+    VARIANT_INLINE static result_type apply(V & v0, V & v1, F f)
+    {
+        if (v0.get_type_index() == sizeof...(Types))
+        {
+            if (v0.get_type_index() == v1.get_type_index())
+            {
+                return f(v0. template get<T>(), v1. template get<T>()); // call binary functor
+            }
+            else
+            {
+                return binary_dispatcher_rhs<F, V, T, Types...>::apply(v0, v1, f);
+            }
+        }
+        else if (v1.get_type_index() == sizeof...(Types))
+        {
+            return binary_dispatcher_lhs<F, V, T, Types...>::apply(v0, v1, f);
+        }
+        return binary_dispatcher<F, V, Types...>::apply(v0, v1, f);
+    }
+};
+
+template<typename F, typename V>
+struct binary_dispatcher<F, V>
+{
+    using result_type = typename F::result_type;
+    VARIANT_INLINE static result_type apply_const(V const&, V const&, F)
+    {
+        throw std::runtime_error("binary dispatch: FAIL");
+    }
+
+    VARIANT_INLINE static result_type apply(V &, V &, F)
+    {
+        throw std::runtime_error("binary dispatch: FAIL");
+    }
+};
+
+// comparator functors
+struct equal_comp
+{
+    template <typename T>
+    bool operator()(T const& lhs, T const& rhs) const
+    {
+        return lhs == rhs;
+    }
+};
+
+struct less_comp
+{
+    template <typename T>
+    bool operator()(T const& lhs, T const& rhs) const
+    {
+        return lhs < rhs;
+    }
+};
+
+template <typename Variant, typename Comp>
+class comparer : public static_visitor<bool>
+{
+public:
+    explicit comparer(Variant const& lhs) noexcept
+        : lhs_(lhs) {}
+    comparer& operator=(comparer const&) = delete;
+    // visitor
+    template<typename T>
+    bool operator()(T const& rhs_content) const
+    {
+        T const& lhs_content = lhs_.template get<T>();
+        return Comp()(lhs_content, rhs_content);
+    }
+private:
+    Variant const& lhs_;
+};
+
+// operator<< helper
+template <typename Out>
+class printer : public static_visitor<>
+{
+public:
+    explicit printer(Out & out)
+        : out_(out) {}
+    printer& operator=(printer const&) = delete;
+
+// visitor
+    template <typename T>
+    void operator()(T const& operand) const
+    {
+        out_ << operand;
+    }
+private:
+    Out & out_;
+};
+
+} // namespace detail
+
+struct no_init {};
+
+template<typename... Types>
+class variant
+{
+private:
+
+    static const std::size_t data_size = static_max<sizeof(Types)...>::value;
+    static const std::size_t data_align = static_max<alignof(Types)...>::value;
+
+    using data_type = typename std::aligned_storage<data_size, data_align>::type;
+    using helper_type = variant_helper<Types...>;
+
+    std::size_t type_index;
+    data_type data;
+
+public:
+    // tell spirit that this is an adapted variant
+    struct adapted_variant_tag;
+    using types = boost::mpl::vector<Types...>;
+    VARIANT_INLINE variant()
+        : type_index(sizeof...(Types) - 1)
+    {
+        new (&data) typename detail::select_type<0, Types...>::type();
+    }
+
+    VARIANT_INLINE variant(no_init)
+        : type_index(detail::invalid_value) {}
+
+    template <typename T, class = typename std::enable_if<
+                          detail::is_valid_type<typename std::remove_reference<T>::type, Types...>::value>::type>
+    VARIANT_INLINE variant(T && val) noexcept
+        : type_index(detail::value_traits<typename std::remove_reference<T>::type, Types...>::index)
+    {
+        constexpr std::size_t index = sizeof...(Types) - detail::value_traits<typename std::remove_reference<T>::type, Types...>::index - 1;
+        using target_type = typename detail::select_type<index, Types...>::type;
+        new (&data) target_type(std::forward<T>(val)); // nothrow
+    }
+
+    VARIANT_INLINE variant(variant<Types...> const& old)
+        : type_index(old.type_index)
+    {
+        helper_type::copy(old.type_index, &old.data, &data);
+    }
+
+    VARIANT_INLINE variant(variant<Types...>&& old) noexcept
+        : type_index(old.type_index)
+    {
+        helper_type::move(old.type_index, &old.data, &data);
+    }
+
+    friend void swap(variant<Types...> & first, variant<Types...> & second)
+    {
+        using std::swap; //enable ADL
+        swap(first.type_index, second.type_index);
+        swap(first.data, second.data);
+    }
+
+    VARIANT_INLINE variant<Types...>& operator=(variant<Types...> other)
+    {
+        swap(*this, other);
+        return *this;
+    }
+
+    // conversions
+    // move-assign
+    template <typename T>
+    VARIANT_INLINE variant<Types...>& operator=(T && rhs) noexcept
+    {
+        variant<Types...> temp(std::forward<T>(rhs));
+        swap(*this, temp);
+        return *this;
+    }
+
+    // copy-assign
+    template <typename T>
+    VARIANT_INLINE variant<Types...>& operator=(T const& rhs)
+    {
+        variant<Types...> temp(rhs);
+        swap(*this, temp);
+        return *this;
+    }
+
+    template<typename T>
+    VARIANT_INLINE bool is() const
+    {
+        return (type_index == detail::direct_type<T, Types...>::index);
+    }
+
+    VARIANT_INLINE bool valid() const
+    {
+        return (type_index != detail::invalid_value);
+    }
+
+    template<typename T, typename... Args>
+    VARIANT_INLINE void set(Args&&... args)
+    {
+        helper_type::destroy(type_index, &data);
+        new (&data) T(std::forward<Args>(args)...);
+        type_index = detail::direct_type<T, Types...>::index;
+    }
+
+    template<typename T>
+    VARIANT_INLINE T& get()
+    {
+        if (type_index == detail::direct_type<T, Types...>::index)
+        {
+            return *reinterpret_cast<T*>(&data);
+        }
+        else
+        {
+            throw std::runtime_error("in get()");
+        }
+    }
+
+    template<typename T>
+    VARIANT_INLINE T const& get() const
+    {
+        if (type_index == detail::direct_type<T, Types...>::index)
+        {
+            return *reinterpret_cast<T const*>(&data);
+        }
+        else
+        {
+            throw std::runtime_error("in get()");
+        }
+    }
+
+    VARIANT_INLINE std::size_t get_type_index() const
+    {
+        return type_index;
+    }
+
+    // visitor
+    // unary
+    template <typename F, typename V>
+    auto VARIANT_INLINE
+    static visit(V const& v, F f)
+        -> decltype(detail::dispatcher<F, V, Types...>::apply_const(v, f))
+    {
+        return detail::dispatcher<F, V, Types...>::apply_const(v, f);
+    }
+    // non-const
+    template <typename F, typename V>
+    auto VARIANT_INLINE
+    static visit(V & v, F f)
+        -> decltype(detail::dispatcher<F, V, Types...>::apply(v, f))
+    {
+        return detail::dispatcher<F, V, Types...>::apply(v, f);
+    }
+
+    // binary
+    // const
+    template <typename F, typename V>
+    auto VARIANT_INLINE
+    static binary_visit(V const& v0, V const& v1, F f)
+        -> decltype(detail::binary_dispatcher<F, V, Types...>::apply_const(v0, v1, f))
+    {
+        return detail::binary_dispatcher<F, V, Types...>::apply_const(v0, v1, f);
+    }
+    // non-const
+    template <typename F, typename V>
+    auto VARIANT_INLINE
+    static binary_visit(V& v0, V& v1, F f)
+        -> decltype(detail::binary_dispatcher<F, V, Types...>::apply(v0, v1, f))
+    {
+        return detail::binary_dispatcher<F, V, Types...>::apply(v0, v1, f);
+    }
+
+    ~variant() noexcept
+    {
+        helper_type::destroy(type_index, &data);
+    }
+
+    // comparison operators
+    // equality
+    VARIANT_INLINE bool operator==(variant const& rhs) const
+    {
+        if (this->get_type_index() != rhs.get_type_index())
+            return false;
+        detail::comparer<variant, detail::equal_comp> visitor(*this);
+        return visit(rhs, visitor);
+    }
+    // less than
+    VARIANT_INLINE bool operator<(variant const& rhs) const
+    {
+        if (this->get_type_index() != rhs.get_type_index())
+        {
+            return this->get_type_index() < rhs.get_type_index();
+            // ^^ borrowed from boost::variant
+        }
+        detail::comparer<variant, detail::less_comp> visitor(*this);
+        return visit(rhs, visitor);
+    }
+};
+
+// unary visitor interface
+
+// const
+template <typename V, typename F>
+auto VARIANT_INLINE static apply_visitor(F f, V const& v) -> decltype(V::visit(v, f))
+{
+    return V::visit(v, f);
+}
+// non-const
+template <typename V, typename F>
+auto VARIANT_INLINE static apply_visitor(F f, V & v) -> decltype(V::visit(v, f))
+{
+    return V::visit(v, f);
+}
+
+// binary visitor interface
+// const
+template <typename V, typename F>
+auto VARIANT_INLINE static apply_visitor(F f, V const& v0, V const& v1) -> decltype(V::binary_visit(v0, v1, f))
+{
+    return V::binary_visit(v0, v1, f);
+}
+// non-const
+template <typename V, typename F>
+auto VARIANT_INLINE static apply_visitor(F f, V & v0, V & v1) -> decltype(V::binary_visit(v0, v1, f))
+{
+    return V::binary_visit(v0, v1, f);
+}
+
+// getter interface
+template<typename ResultType, typename T>
+ResultType &  get(T & var)
+{
+    return var.template get<ResultType>();
+}
+
+template<typename ResultType, typename T>
+ResultType const&  get(T const& var)
+{
+    return var.template get<ResultType>();
+}
+
+// operator<<
+template <typename charT, typename traits, typename... Types>
+VARIANT_INLINE std::basic_ostream<charT, traits>&
+operator<< (std::basic_ostream<charT, traits>& out, variant<Types...> const& rhs)
+{
+    detail::printer<std::basic_ostream<charT, traits>> visitor(out);
+    apply_visitor(visitor, rhs);
+    return out;
+}
+
+}}
+
+#endif  // MAPNIK_UTIL_VARIANT_HPP
diff --git a/include/mapnik/utils.hpp b/include/mapnik/utils.hpp
index a9f013f..d6961d9 100644
--- a/include/mapnik/utils.hpp
+++ b/include/mapnik/utils.hpp
@@ -24,27 +24,20 @@
 #define MAPNIK_UTILS_HPP
 
 #include <mapnik/config.hpp>
+#include <mapnik/unique_lock.hpp>
+
+// stl
+#include <stdexcept> // std::runtime_error
+#include <cstdlib> // std::atexit
+#include <new> // operator new
 
-// boost
 #ifdef MAPNIK_THREADSAFE
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #endif
 
-// stl
-#include <stdexcept>
-#include <cstdlib>
-#include <limits>
-#include <ctime>
-#include <algorithm>
-#include <cmath>
-
 namespace mapnik
 {
 
-#ifdef MAPNIK_THREADSAFE
-using boost::mutex;
-#endif
-
 template <typename T>
 class CreateUsingNew
 {
@@ -84,56 +77,44 @@ public:
         static MaxAlign staticMemory;
         return new(&staticMemory) T;
     }
-#ifdef __SUNPRO_CC
-// Sun C++ Compiler doesn't handle `volatile` keyword same as GCC.
-    static void destroy(T* obj)
-#else
-        static void destroy(volatile T* obj)
-#endif
+    static void destroy(volatile T* obj)
     {
         obj->~T();
     }
 };
 
+
 #ifdef __GNUC__
 template <typename T,
           template <typename U> class CreatePolicy=CreateStatic> class MAPNIK_DECL singleton
 {
 #else
-    template <typename T,
-              template <typename U> class CreatePolicy=CreateStatic> class singleton
-    {
+template <typename T,
+          template <typename U> class CreatePolicy=CreateStatic> class singleton
+{
 #endif
+    friend class CreatePolicy<T>;
+    static T* pInstance_;
+    static bool destroyed_;
+    singleton(const singleton &rhs);
+    singleton& operator=(const singleton&);
 
-#ifdef __SUNPRO_CC
-/* Sun's C++ compiler will issue the following errors if CreatePolicy<T> is used:
-   Error: A class template name was expected instead of mapnik::CreatePolicy<mapnik::T>
-   Error: A "friend" declaration must specify a class or function.
-*/
-        friend class CreatePolicy;
-#else
-        friend class CreatePolicy<T>;
-#endif
-        static T* pInstance_;
-        static bool destroyed_;
-        singleton(const singleton &rhs);
-        singleton& operator=(const singleton&);
+    static void onDeadReference()
+    {
+        throw std::runtime_error("dead reference!");
+    }
 
-        static void onDeadReference()
-        {
-            throw std::runtime_error("dead reference!");
-        }
+    static void DestroySingleton()
+    {
+        CreatePolicy<T>::destroy(pInstance_);
+        pInstance_ = 0;
+        destroyed_ = true;
+    }
 
-        static void DestroySingleton()
-        {
-            CreatePolicy<T>::destroy(pInstance_);
-            pInstance_ = 0;
-            destroyed_ = true;
-        }
+protected:
 
-    protected:
 #ifdef MAPNIK_THREADSAFE
-        static mutex mutex_;
+        static std::mutex mutex_;
 #endif
         singleton() {}
     public:
@@ -142,7 +123,7 @@ template <typename T,
             if (! pInstance_)
             {
 #ifdef MAPNIK_THREADSAFE
-                mutex::scoped_lock lock(mutex_);
+                mapnik::scoped_lock lock(mutex_);
 #endif
                 if (! pInstance_)
                 {
@@ -162,10 +143,11 @@ template <typename T,
             }
             return *pInstance_;
         }
-    };
+};
+
 #ifdef MAPNIK_THREADSAFE
     template <typename T,
-              template <typename U> class CreatePolicy> mutex singleton<T,CreatePolicy>::mutex_;
+              template <typename U> class CreatePolicy> std::mutex singleton<T,CreatePolicy>::mutex_;
 #endif
 
     template <typename T,
diff --git a/include/mapnik/value.hpp b/include/mapnik/value.hpp
index a9a1572..9a94623 100644
--- a/include/mapnik/value.hpp
+++ b/include/mapnik/value.hpp
@@ -25,31 +25,26 @@
 
 // mapnik
 #include <mapnik/value_types.hpp>
-#include <mapnik/global.hpp>
-#include <mapnik/unicode.hpp>
+#include <mapnik/value_hash.hpp>
 #include <mapnik/util/conversions.hpp>
-
-// boost
-#include <boost/variant/recursive_wrapper.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/variant.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/functional/hash.hpp>
-#include "hash_variant.hpp"
+#include <mapnik/util/variant.hpp>
 
 // stl
 #include <string>
 #include <cmath>
-// uci
+#include <memory>
+
+#include <iosfwd>
+#include <cstddef>
+#include <new>
+
+// icu
 #include <unicode/unistr.h>
 #include <unicode/ustring.h>
 
-
 namespace mapnik  {
 
-inline void to_utf8(UnicodeString const& input, std::string & target)
+inline void to_utf8(mapnik::value_unicode_string const& input, std::string & target)
 {
     if (input.isEmpty()) return;
 
@@ -61,7 +56,7 @@ inline void to_utf8(UnicodeString const& input, std::string & target)
     u_strToUTF8(buf, BUF_SIZE, &len, input.getBuffer(), input.length(), &err);
     if (err == U_BUFFER_OVERFLOW_ERROR || err == U_STRING_NOT_TERMINATED_WARNING )
     {
-        boost::scoped_array<char> buf_ptr(new char [len+1]);
+        const std::unique_ptr<char[]> buf_ptr(new char [len+1]);
         err = U_ZERO_ERROR;
         u_strToUTF8(buf_ptr.get() , len + 1, &len, input.getBuffer(), input.length(), &err);
         target.assign(buf_ptr.get() , static_cast<std::size_t>(len));
@@ -72,12 +67,12 @@ inline void to_utf8(UnicodeString const& input, std::string & target)
     }
 }
 
-typedef boost::variant<value_null,value_bool,value_integer,value_double,value_unicode_string> value_base;
+using value_base = util::variant<value_null, value_bool, value_integer,value_double, value_unicode_string>;
 
 namespace impl {
 
 struct equals
-    : public boost::static_visitor<bool>
+    : public util::static_visitor<bool>
 {
     bool operator() (value_integer lhs, value_double rhs) const
     {
@@ -122,14 +117,14 @@ struct equals
     }
 
     template <typename T, typename U>
-    bool operator() (T const& lhs, U const& rhs) const
+    bool operator() (T const&, U const&) const
     {
         return false;
     }
 };
 
 struct not_equals
-    : public boost::static_visitor<bool>
+    : public util::static_visitor<bool>
 {
     template <typename T, typename U>
     bool operator() (const T &, const U &) const
@@ -182,7 +177,7 @@ struct not_equals
     // back compatibility shim to equate empty string with null for != test
     // https://github.com/mapnik/mapnik/issues/1859
     // TODO - consider removing entire specialization at Mapnik 3.x
-    bool operator() (value_null lhs,value_unicode_string const& rhs) const
+    bool operator() (value_null, value_unicode_string const& rhs) const
     {
         if (rhs.isEmpty()) return false;
         return true;
@@ -191,7 +186,7 @@ struct not_equals
 };
 
 struct greater_than
-    : public boost::static_visitor<bool>
+    : public util::static_visitor<bool>
 {
     template <typename T, typename U>
     bool operator()(const T &, const U &) const
@@ -227,7 +222,7 @@ struct greater_than
 };
 
 struct greater_or_equal
-    : public boost::static_visitor<bool>
+    : public util::static_visitor<bool>
 {
     template <typename T, typename U>
     bool operator()(const T &, const U &) const
@@ -263,7 +258,7 @@ struct greater_or_equal
 };
 
 struct less_than
-    : public boost::static_visitor<bool>
+    : public util::static_visitor<bool>
 {
     template <typename T, typename U>
     bool operator()(const T &, const U &) const
@@ -300,7 +295,7 @@ struct less_than
 };
 
 struct less_or_equal
-    : public boost::static_visitor<bool>
+    : public util::static_visitor<bool>
 {
     template <typename T, typename U>
     bool operator()(const T &, const U &) const
@@ -337,9 +332,9 @@ struct less_or_equal
 };
 
 template <typename V>
-struct add : public boost::static_visitor<V>
+struct add : public util::static_visitor<V>
 {
-    typedef V value_type;
+    using value_type = V;
     value_type operator() (value_unicode_string const& lhs ,
                            value_unicode_string const& rhs ) const
     {
@@ -356,15 +351,13 @@ struct add : public boost::static_visitor<V>
         return lhs + rhs;
     }
 
-    value_type operator() (value_unicode_string const& lhs, value_null rhs) const
+    value_type operator() (value_unicode_string const& lhs, value_null) const
     {
-        boost::ignore_unused_variable_warning(rhs);
         return lhs;
     }
 
-    value_type operator() (value_null lhs, value_unicode_string const& rhs) const
+    value_type operator() (value_null, value_unicode_string const& rhs) const
     {
-        boost::ignore_unused_variable_warning(lhs);
         return rhs;
     }
 
@@ -405,9 +398,9 @@ struct add : public boost::static_visitor<V>
 };
 
 template <typename V>
-struct sub : public boost::static_visitor<V>
+struct sub : public util::static_visitor<V>
 {
-    typedef V value_type;
+    using value_type = V;
     template <typename T1, typename T2>
     value_type operator() (T1 const& lhs, T2 const&) const
     {
@@ -420,10 +413,10 @@ struct sub : public boost::static_visitor<V>
         return lhs - rhs ;
     }
 
-    value_type operator() (value_unicode_string const& lhs,
-                           value_unicode_string const& ) const
+    value_type operator() (value_unicode_string const&,
+                           value_unicode_string const&) const
     {
-        return lhs;
+        return value_type();
     }
 
     value_type operator() (value_double lhs, value_integer rhs) const
@@ -443,9 +436,9 @@ struct sub : public boost::static_visitor<V>
 };
 
 template <typename V>
-struct mult : public boost::static_visitor<V>
+struct mult : public util::static_visitor<V>
 {
-    typedef V value_type;
+    using value_type = V;
     template <typename T1, typename T2>
     value_type operator() (T1 const& lhs , T2 const& ) const
     {
@@ -457,10 +450,10 @@ struct mult : public boost::static_visitor<V>
         return lhs * rhs;
     }
 
-    value_type operator() (value_unicode_string const& lhs,
-                           value_unicode_string const& ) const
+    value_type operator() (value_unicode_string const&,
+                           value_unicode_string const&) const
     {
-        return lhs;
+        return value_type();
     }
 
     value_type operator() (value_double lhs, value_integer rhs) const
@@ -473,18 +466,16 @@ struct mult : public boost::static_visitor<V>
         return lhs * rhs;
     }
 
-    value_type operator() (value_bool lhs, value_bool rhs) const
+    value_type operator() (value_bool, value_bool) const
     {
-        boost::ignore_unused_variable_warning(lhs);
-        boost::ignore_unused_variable_warning(rhs);
         return value_integer(0);
     }
 };
 
 template <typename V>
-struct div: public boost::static_visitor<V>
+struct div: public util::static_visitor<V>
 {
-    typedef V value_type;
+    using value_type = V;
     template <typename T1, typename T2>
     value_type operator() (T1 const& lhs, T2 const&) const
     {
@@ -494,37 +485,38 @@ struct div: public boost::static_visitor<V>
     template <typename T>
     value_type operator() (T lhs, T rhs) const
     {
+        if (rhs == 0) return value_type();
         return lhs / rhs;
     }
 
-    value_type operator() (value_bool lhs, value_bool rhs ) const
+    value_type operator() (value_bool, value_bool) const
     {
-        boost::ignore_unused_variable_warning(lhs);
-        boost::ignore_unused_variable_warning(rhs);
         return false;
     }
 
-    value_type operator() (value_unicode_string const& lhs,
+    value_type operator() (value_unicode_string const&,
                            value_unicode_string const&) const
     {
-        return lhs;
+        return value_type();
     }
 
     value_type operator() (value_double lhs, value_integer rhs) const
     {
+        if (rhs == 0) return value_type();
         return lhs / rhs;
     }
 
     value_type operator() (value_integer lhs, value_double rhs) const
     {
+        if (rhs == 0) return value_type();
         return lhs / rhs;
     }
 };
 
 template <typename V>
-struct mod: public boost::static_visitor<V>
+struct mod: public util::static_visitor<V>
 {
-    typedef V value_type;
+    using value_type = V;
     template <typename T1, typename T2>
     value_type operator() (T1 const& lhs, T2 const&) const
     {
@@ -537,17 +529,15 @@ struct mod: public boost::static_visitor<V>
         return lhs % rhs;
     }
 
-    value_type operator() (value_unicode_string const& lhs,
+    value_type operator() (value_unicode_string const&,
                            value_unicode_string const&) const
     {
-        return lhs;
+        return value_type();
     }
 
-    value_type operator() (value_bool lhs,
-                           value_bool rhs) const
+    value_type operator() (value_bool,
+                           value_bool) const
     {
-        boost::ignore_unused_variable_warning(lhs);
-        boost::ignore_unused_variable_warning(rhs);
         return false;
     }
 
@@ -568,9 +558,9 @@ struct mod: public boost::static_visitor<V>
 };
 
 template <typename V>
-struct negate : public boost::static_visitor<V>
+struct negate : public util::static_visitor<V>
 {
-    typedef V value_type;
+    using value_type = V;
 
     template <typename T>
     value_type operator() (T val) const
@@ -578,7 +568,7 @@ struct negate : public boost::static_visitor<V>
         return -val;
     }
 
-    value_type operator() (value_null const& val) const
+    value_type operator() (value_null val) const
     {
         return val;
     }
@@ -588,14 +578,18 @@ struct negate : public boost::static_visitor<V>
         return val ? value_integer(-1) : value_integer(0);
     }
 
-    value_type operator() (value_unicode_string const& ustr) const
+    value_type operator() (value_unicode_string const&) const
     {
-        value_unicode_string inplace(ustr);
-        return inplace.reverse();
+        return value_type();
     }
 };
 
-struct to_bool : public boost::static_visitor<value_bool>
+// converters
+template <typename T>
+struct convert {};
+
+template <>
+struct convert<value_bool> : public util::static_visitor<value_bool>
 {
     value_bool operator() (value_bool val) const
     {
@@ -607,9 +601,8 @@ struct to_bool : public boost::static_visitor<value_bool>
         return !ustr.isEmpty();
     }
 
-    value_bool operator() (value_null const& val) const
+    value_bool operator() (value_null const&) const
     {
-        boost::ignore_unused_variable_warning(val);
         return false;
     }
 
@@ -620,7 +613,86 @@ struct to_bool : public boost::static_visitor<value_bool>
     }
 };
 
-struct to_string : public boost::static_visitor<std::string>
+template <>
+struct convert<value_double> : public util::static_visitor<value_double>
+{
+    value_double operator() (value_double val) const
+    {
+        return val;
+    }
+
+    value_double operator() (value_integer val) const
+    {
+        return static_cast<value_double>(val);
+    }
+
+    value_double operator() (value_bool val) const
+    {
+        return static_cast<value_double>(val);
+    }
+
+    value_double operator() (std::string const& val) const
+    {
+        value_double result;
+        if (util::string2double(val,result))
+            return result;
+        return 0;
+    }
+
+    value_double operator() (value_unicode_string const& val) const
+    {
+        std::string utf8;
+        to_utf8(val,utf8);
+        return operator()(utf8);
+    }
+
+    value_double operator() (value_null const&) const
+    {
+        return 0.0;
+    }
+};
+
+template <>
+struct convert<value_integer> : public util::static_visitor<value_integer>
+{
+    value_integer operator() (value_integer val) const
+    {
+        return val;
+    }
+
+    value_integer operator() (value_double val) const
+    {
+        return static_cast<value_integer>(rint(val));
+    }
+
+    value_integer operator() (value_bool val) const
+    {
+        return static_cast<value_integer>(val);
+    }
+
+    value_integer operator() (std::string const& val) const
+    {
+        value_integer result;
+        if (util::string2int(val,result))
+            return result;
+        return value_integer(0);
+    }
+
+    value_integer operator() (value_unicode_string const& val) const
+    {
+        std::string utf8;
+        to_utf8(val,utf8);
+        return operator()(utf8);
+    }
+
+    value_integer operator() (value_null const&) const
+    {
+        return value_integer(0);
+    }
+};
+
+template <>
+struct convert<std::string> : public util::static_visitor<std::string>
 {
     template <typename T>
     std::string operator() (T val) const
@@ -645,14 +717,13 @@ struct to_string : public boost::static_visitor<std::string>
         return str;
     }
 
-    std::string operator() (value_null const& val) const
+    std::string operator() (value_null const&) const
     {
-        boost::ignore_unused_variable_warning(val);
         return "";
     }
 };
 
-struct to_unicode : public boost::static_visitor<value_unicode_string>
+struct to_unicode : public util::static_visitor<value_unicode_string>
 {
 
     template <typename T>
@@ -676,20 +747,22 @@ struct to_unicode : public boost::static_visitor<value_unicode_string>
         return value_unicode_string(str.c_str());
     }
 
-    value_unicode_string operator() (value_null const& val) const
+    value_unicode_string operator() (value_null const&) const
     {
-        boost::ignore_unused_variable_warning(val);
         return value_unicode_string("");
     }
 };
 
-struct to_expression_string : public boost::static_visitor<std::string>
+struct to_expression_string : public util::static_visitor<std::string>
 {
+    explicit to_expression_string(char quote = '\'')
+        : quote_(quote) {}
+
     std::string operator() (value_unicode_string const& val) const
     {
         std::string utf8;
         to_utf8(val,utf8);
-        return "'" + utf8 + "'";
+        return quote_ + utf8 + quote_;
     }
 
     std::string operator() (value_integer val) const
@@ -711,98 +784,20 @@ struct to_expression_string : public boost::static_visitor<std::string>
         return val ? "true":"false";
     }
 
-    std::string operator() (value_null const& val) const
+    std::string operator() (value_null const&) const
     {
-        boost::ignore_unused_variable_warning(val);
         return "null";
     }
-};
 
-struct to_double : public boost::static_visitor<value_double>
-{
-    value_double operator() (value_double val) const
-    {
-        return val;
-    }
-
-    value_double operator() (value_integer val) const
-    {
-        return static_cast<value_double>(val);
-    }
-
-    value_double operator() (value_bool val) const
-    {
-        return static_cast<value_double>(val);
-    }
-
-    value_double operator() (std::string const& val) const
-    {
-        value_double result;
-        if (util::string2double(val,result))
-            return result;
-        return 0;
-    }
-
-    value_double operator() (value_unicode_string const& val) const
-    {
-        std::string utf8;
-        to_utf8(val,utf8);
-        return operator()(utf8);
-    }
-
-    value_double operator() (value_null const& val) const
-    {
-        boost::ignore_unused_variable_warning(val);
-        return 0.0;
-    }
-};
-
-struct to_int : public boost::static_visitor<value_integer>
-{
-    value_integer operator() (value_integer val) const
-    {
-        return val;
-    }
-
-    value_integer operator() (value_double val) const
-    {
-        return static_cast<value_integer>(rint(val));
-    }
-
-    value_integer operator() (value_bool val) const
-    {
-        return static_cast<value_integer>(val);
-    }
-
-    value_integer operator() (std::string const& val) const
-    {
-        value_integer result;
-        if (util::string2int(val,result))
-            return result;
-        return value_integer(0);
-    }
-
-    value_integer operator() (value_unicode_string const& val) const
-    {
-        std::string utf8;
-        to_utf8(val,utf8);
-        return operator()(utf8);
-    }
-
-    value_integer operator() (value_null const& val) const
-    {
-        boost::ignore_unused_variable_warning(val);
-        return value_integer(0);
-    }
+    const char quote_;
 };
 
 } // namespace impl
 
 namespace value_adl_barrier {
 
-class value
+class value : public value_base
 {
-    value_base base_;
     friend const value operator+(value const&,value const&);
     friend const value operator-(value const&,value const&);
     friend const value operator*(value const&,value const&);
@@ -810,113 +805,124 @@ class value
     friend const value operator%(value const&,value const&);
 
 public:
-    value ()
-        : base_(value_null()) {}
+    value () noexcept //-- comment out for VC++11
+        : value_base(value_null()) {}
+
+    value (value const& other) = default;
 
-    template <typename T> value(T _val_)
-        : base_(_val_) {}
+    value( value && other) noexcept = default;
+
+    template <typename T>
+    value ( T const& val)
+        : value_base(typename detail::mapnik_value_type<T>::type(val)) {}
+
+    template <typename T>
+    value ( T && val)
+        : value_base(std::move(typename detail::mapnik_value_type<T>::type(val))) {}
+
+    value & operator=( value const& other) = default;
 
     bool operator==(value const& other) const
     {
-        return boost::apply_visitor(impl::equals(),base_,other.base_);
+        return util::apply_visitor(impl::equals(),*this,other);
     }
 
     bool operator!=(value const& other) const
     {
-        return boost::apply_visitor(impl::not_equals(),base_,other.base_);
+        return util::apply_visitor(impl::not_equals(),*this,other);
     }
 
     bool operator>(value const& other) const
     {
-        return boost::apply_visitor(impl::greater_than(),base_,other.base_);
+        return util::apply_visitor(impl::greater_than(),*this,other);
     }
 
     bool operator>=(value const& other) const
     {
-        return boost::apply_visitor(impl::greater_or_equal(),base_,other.base_);
+        return util::apply_visitor(impl::greater_or_equal(),*this,other);
     }
 
     bool operator<(value const& other) const
     {
-        return boost::apply_visitor(impl::less_than(),base_,other.base_);
+        return util::apply_visitor(impl::less_than(),*this,other);
     }
 
     bool operator<=(value const& other) const
     {
-        return boost::apply_visitor(impl::less_or_equal(),base_,other.base_);
+        return util::apply_visitor(impl::less_or_equal(),*this,other);
     }
 
     value operator- () const
     {
-        return boost::apply_visitor(impl::negate<value>(), base_);
+        return util::apply_visitor(impl::negate<value>(), *this);
     }
 
-    value_base const& base() const
+    bool is_null() const;
+
+    template <typename T>
+    T convert() const
     {
-        return base_;
+        return util::apply_visitor(impl::convert<T>(),*this);
     }
 
-    bool is_null() const;
-
     value_bool to_bool() const
     {
-        return boost::apply_visitor(impl::to_bool(),base_);
+        return util::apply_visitor(impl::convert<value_bool>(),*this);
     }
 
-    std::string to_expression_string() const
+    std::string to_expression_string(char quote = '\'') const
     {
-        return boost::apply_visitor(impl::to_expression_string(),base_);
+        return util::apply_visitor(impl::to_expression_string(quote),*this);
     }
 
     std::string to_string() const
     {
-        return boost::apply_visitor(impl::to_string(),base_);
+        return util::apply_visitor(impl::convert<std::string>(),*this);
     }
 
     value_unicode_string to_unicode() const
     {
-        return boost::apply_visitor(impl::to_unicode(),base_);
+        return util::apply_visitor(impl::to_unicode(),*this);
     }
 
     value_double to_double() const
     {
-        return boost::apply_visitor(impl::to_double(),base_);
+        return util::apply_visitor(impl::convert<value_double>(),*this);
     }
 
     value_integer to_int() const
     {
-        return boost::apply_visitor(impl::to_int(),base_);
+        return util::apply_visitor(impl::convert<value_integer>(),*this);
     }
 };
 
 inline const value operator+(value const& p1,value const& p2)
 {
-
-    return value(boost::apply_visitor(impl::add<value>(),p1.base_, p2.base_));
+    return value(util::apply_visitor(impl::add<value>(),p1, p2));
 }
 
 inline const value operator-(value const& p1,value const& p2)
 {
 
-    return value(boost::apply_visitor(impl::sub<value>(),p1.base_, p2.base_));
+    return value(util::apply_visitor(impl::sub<value>(),p1, p2));
 }
 
 inline const value operator*(value const& p1,value const& p2)
 {
 
-    return value(boost::apply_visitor(impl::mult<value>(),p1.base_, p2.base_));
+    return value(util::apply_visitor(impl::mult<value>(),p1, p2));
 }
 
 inline const value operator/(value const& p1,value const& p2)
 {
 
-    return value(boost::apply_visitor(impl::div<value>(),p1.base_, p2.base_));
+    return value(util::apply_visitor(impl::div<value>(),p1, p2));
 }
 
 inline const value operator%(value const& p1,value const& p2)
 {
 
-    return value(boost::apply_visitor(impl::mod<value>(),p1.base_, p2.base_));
+    return value(util::apply_visitor(impl::mod<value>(),p1, p2));
 }
 
 template <typename charT, typename traits>
@@ -928,8 +934,10 @@ operator << (std::basic_ostream<charT,traits>& out,
     return out;
 }
 
-inline std::size_t hash_value(const value& val) {
-    return hash_value(val.base());
+// hash function
+inline std::size_t hash_value(value const& val)
+{
+    return mapnik_hash_value(val);
 }
 
 } // namespace value_adl_barrier
@@ -937,44 +945,32 @@ inline std::size_t hash_value(const value& val) {
 using value_adl_barrier::value;
 using value_adl_barrier::operator<<;
 
-namespace impl {
+namespace detail {
 
-struct is_null : public boost::static_visitor<bool>
+struct is_null_visitor : public util::static_visitor<bool>
 {
     bool operator() (value const& val) const
     {
         return val.is_null();
     }
 
-    bool operator() (value_null const& val) const
+    bool operator() (value_null const&) const
     {
-        boost::ignore_unused_variable_warning(val);
         return true;
     }
 
     template <typename T>
-    bool operator() (T const& val) const
+    bool operator() (T const&) const
     {
-        boost::ignore_unused_variable_warning(val);
         return false;
     }
-
-    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-    bool operator() (boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& val)
-        const
-    {
-        return boost::apply_visitor(*this, val);
-    }
 };
 
-} // namespace impl
-
-// constant visitor instance substitutes overloaded function
-impl::is_null const is_null = impl::is_null();
+} // namespace detail
 
 inline bool value::is_null() const
 {
-    return boost::apply_visitor(impl::is_null(), base_);
+    return util::apply_visitor(mapnik::detail::is_null_visitor(), *this);
 }
 
 } // namespace mapnik
diff --git a/include/mapnik/value_hash.hpp b/include/mapnik/value_hash.hpp
new file mode 100644
index 0000000..1a72108
--- /dev/null
+++ b/include/mapnik/value_hash.hpp
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_VALUE_HASH_HPP
+#define MAPNIK_VALUE_HASH_HPP
+
+// mapnik
+#include <mapnik/util/variant.hpp>
+#include <mapnik/value_types.hpp>
+
+// stl
+#include <functional>
+
+// icu
+#include <unicode/unistr.h>
+
+namespace mapnik { namespace detail {
+
+template <class T>
+inline void hash_combine(std::size_t & seed, T const& v)
+{
+    std::hash<T> hasher;
+    seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+}
+
+struct value_hasher: public util::static_visitor<std::size_t>
+{
+    std::size_t operator() (value_null val) const
+    {
+        return hash_value(val);
+    }
+
+    std::size_t operator() (value_unicode_string const& val) const
+    {
+        return val.hashCode();
+    }
+
+    template <class T>
+    std::size_t operator()(T const& val) const
+    {
+        std::hash<T> hasher;
+        return hasher(val);
+    }
+};
+
+} // namespace  detail
+
+template <typename T>
+std::size_t mapnik_hash_value(T const& val)
+{
+    std::size_t seed = util::apply_visitor(detail::value_hasher(), val);
+    detail::hash_combine(seed, val.get_type_index());
+    return seed;
+}
+
+} // namespace mapnik
+
+#endif // MAPNIK_VALUE_HASH_HPP
diff --git a/include/mapnik/value_types.hpp b/include/mapnik/value_types.hpp
index 41672eb..c4f5e55 100644
--- a/include/mapnik/value_types.hpp
+++ b/include/mapnik/value_types.hpp
@@ -23,80 +23,187 @@
 #ifndef MAPNIK_VALUE_TYPES_HPP
 #define MAPNIK_VALUE_TYPES_HPP
 
-// icu
-#include <unicode/unistr.h>  // for UnicodeString
+// mapnik
+#include <mapnik/config.hpp>
 
-// boost
-//#include <boost/cstdint.hpp>
+// icu
+#include <unicode/uversion.h> // for U_NAMESPACE_QUALIFIER
 
 // stl
-#include <iosfwd> // for ostream
+#include <type_traits>
+#include <iosfwd>
+#include <cstddef>
+
+namespace U_ICU_NAMESPACE {
+    class UnicodeString;
+}
 
 namespace mapnik  {
 
 #ifdef BIGINT
-//typedef boost::long_long_type value_integer;
-typedef long long value_integer;
+//using value_integer = boost::long_long_type;
+using value_integer = long long;
 #else
-typedef int value_integer;
+using value_integer = int;
 #endif
 
-typedef double value_double;
-typedef UnicodeString  value_unicode_string;
-typedef bool value_bool;
+using value_double = double;
+using value_unicode_string = U_NAMESPACE_QUALIFIER UnicodeString;
+using value_bool = bool;
 
-struct value_null
+struct MAPNIK_DECL value_null
 {
-    bool operator==(value_null const& other) const
+    bool operator==(value_null const&) const
     {
         return true;
     }
 
-    bool operator!=(value_null const& other) const
+    template <typename T>
+    bool operator==(T const&) const
+    {
+        return false;
+    }
+
+    bool operator!=(value_null const&) const
     {
         return false;
     }
 
     template <typename T>
-    value_null operator+ (T const& /*other*/) const
+    bool operator!=(T const&) const
+    {
+        return true;
+    }
+
+    template <typename T>
+    value_null operator+ (T const&) const
     {
         return *this;
     }
 
     template <typename T>
-    value_null operator- (T const& /*other*/) const
+    value_null operator- (T const&) const
     {
         return *this;
     }
 
     template <typename T>
-    value_null operator* (T const& /*other*/) const
+    value_null operator* (T const&) const
     {
         return *this;
     }
 
     template <typename T>
-    value_null operator/ (T const& /*other*/) const
+    value_null operator/ (T const&) const
     {
         return *this;
     }
 
     template <typename T>
-    value_null operator% (T const& /*other*/) const
+    value_null operator% (T const&) const
     {
         return *this;
     }
 };
 
-inline std::size_t hash_value(const value_null& val) {
+inline std::size_t hash_value(value_null const&)
+{
     return 0;
 }
 
-inline std::ostream& operator<< (std::ostream & out,value_null const& v)
+template <typename TChar, typename TTraits>
+inline std::basic_ostream<TChar, TTraits>& operator<<(std::basic_ostream<TChar, TTraits>& out, value_null const&)
 {
     return out;
 }
 
+inline std::istream& operator>> ( std::istream & s, value_null & )
+{
+    return s;
+}
+
+
+namespace detail {
+// to mapnik::value_type conversions traits
+template <typename T>
+struct is_value_bool
+{
+    constexpr static bool value = std::is_same<T, bool>::value;
+};
+
+template <typename T>
+struct is_value_integer
+{
+    constexpr static bool value = std::is_integral<T>::value && !std::is_same<T, bool>::value;
+};
+
+template <typename T>
+struct is_value_double
+{
+    constexpr static bool value = std::is_floating_point<T>::value;
+};
+
+template <typename T>
+struct is_value_unicode_string
+{
+    constexpr static bool value = std::is_same<T, typename mapnik::value_unicode_string>::value;
+};
+
+template <typename T>
+struct is_value_string
+{
+    constexpr static bool value = std::is_same<T, typename std::string>::value;
+};
+
+template <typename T>
+struct is_value_null
+{
+    constexpr static bool value = std::is_same<T, typename mapnik::value_null>::value;
+};
+
+template <typename T, class Enable = void>
+struct mapnik_value_type
+{
+    using type = T;
+};
+
+// value_null
+template <typename T>
+struct mapnik_value_type<T, typename std::enable_if<detail::is_value_null<T>::value>::type>
+{
+    using type = mapnik::value_null;
+};
+
+// value_bool
+template <typename T>
+struct mapnik_value_type<T, typename std::enable_if<detail::is_value_bool<T>::value>::type>
+{
+    using type = mapnik::value_bool;
+};
+
+// value_integer
+template <typename T>
+struct mapnik_value_type<T, typename std::enable_if<detail::is_value_integer<T>::value>::type>
+{
+    using type = mapnik::value_integer;
+};
+
+// value_double
+template <typename T>
+struct mapnik_value_type<T, typename std::enable_if<detail::is_value_double<T>::value>::type>
+{
+    using type = mapnik::value_double;
+};
+
+// value_unicode_string
+template <typename T>
+struct mapnik_value_type<T, typename std::enable_if<detail::is_value_unicode_string<T>::value>::type>
+{
+    using type = mapnik::value_unicode_string const&;
+};
+
+} // namespace detail
+
 } // namespace mapnik
 
 #endif // MAPNIK_VALUE_TYPES_HPP
diff --git a/include/mapnik/version.hpp b/include/mapnik/version.hpp
index e05a3ea..cfb3bd0 100644
--- a/include/mapnik/version.hpp
+++ b/include/mapnik/version.hpp
@@ -23,13 +23,13 @@
 #ifndef MAPNIK_VERSION_HPP
 #define MAPNIK_VERSION_HPP
 
-#define MAPNIK_VERSION_IS_RELEASE 1
+#define MAPNIK_VERSION_IS_RELEASE 0
 
-#define MAPNIK_MAJOR_VERSION 2
-#define MAPNIK_MINOR_VERSION 2
+#define MAPNIK_MAJOR_VERSION 3
+#define MAPNIK_MINOR_VERSION 0
 #define MAPNIK_PATCH_VERSION 0
 
-// translates to 200200
+// translates to 300000
 #define MAPNIK_VERSION (MAPNIK_MAJOR_VERSION*100000) + (MAPNIK_MINOR_VERSION*100) + (MAPNIK_PATCH_VERSION)
 
 #ifndef MAPNIK_STRINGIFY
diff --git a/include/mapnik/vertex.hpp b/include/mapnik/vertex.hpp
index b573579..877c130 100644
--- a/include/mapnik/vertex.hpp
+++ b/include/mapnik/vertex.hpp
@@ -23,7 +23,7 @@
 #ifndef MAPNIK_VERTEX_HPP
 #define MAPNIK_VERTEX_HPP
 
-#include <sstream>
+#include <utility>
 
 namespace mapnik
 {
@@ -35,9 +35,10 @@ enum CommandType {
     SEG_CLOSE = (0x40 | 0x0f)
 };
 
+
 template <typename T,int dim>
 struct vertex {
-    typedef T coord_type;
+    using coord_type = T;
 };
 
 template <typename T>
@@ -45,7 +46,7 @@ struct vertex<T,2>
 {
     enum no_init_t { no_init };
 
-    typedef T coord_type;
+    using coord_type = T;
     coord_type x;
     coord_type y;
     unsigned cmd;
@@ -59,63 +60,48 @@ struct vertex<T,2>
     vertex(coord_type x_,coord_type y_,unsigned cmd_)
         : x(x_),y(y_),cmd(cmd_) {}
 
+    vertex(vertex<T,2> && rhs) noexcept
+        : x(std::move(rhs.x)),
+          y(std::move(rhs.y)),
+          cmd(std::move(rhs.cmd)) {}
+
+    vertex(vertex<T,2> const& rhs)
+        : x(rhs.x),
+          y(rhs.y),
+          cmd(rhs.cmd) {}
+
     template <typename T2>
-    vertex(const vertex<T2,2>& rhs)
+    vertex(vertex<T2,2> const& rhs)
         : x(coord_type(rhs.x)),
           y(coord_type(rhs.y)),
           cmd(rhs.cmd) {}
 
-    template <typename T2> vertex<T,2> operator=(const vertex<T2,2>& rhs)
+
+    vertex<T,2>& operator=(vertex<T,2> rhs)
     {
-        if (&cmd != &rhs.cmd)
-        {
-            x = coord_type(rhs.x);
-            y = coord_type(rhs.y);
-            cmd = rhs.cmd;
-        }
+        swap(rhs);
         return *this;
     }
-};
 
-typedef vertex<double,2> vertex2d;
-typedef vertex<int,2> vertex2i;
-
-template <class charT,class traits,class T,int dim>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             const vertex<T,dim>& c);
+    template <typename T2>
+    vertex<T,2>& operator=(vertex<T2,2> const& rhs)
+    {
+        vertex<T,2> tmp(rhs);
+        swap(tmp);
+        return *this;
+    }
 
-template <class charT,class traits,class T>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             const vertex<T,2>& v)
-{
-    std::basic_ostringstream<charT,traits> s;
-    s.copyfmt(out);
-    s.width(0);
-    switch (v.cmd)
+private:
+    void swap(vertex<T,2> & rhs)
     {
-        case SEG_END: s << "End "; break;
-        case SEG_MOVETO: s << "MoveTo "; break;
-        case SEG_LINETO: s << "LineTo "; break;
-        case SEG_CLOSE: s << "Close "; break;
+        std::swap(this->x,rhs.x);
+        std::swap(this->y,rhs.y);
+        std::swap(this->cmd,rhs.cmd);
     }
-    s << "(" << v.x << ", " << v.y << ")";
-    return out << s.str();
-}
+};
 
-template <class charT,class traits,class T>
-inline std::basic_ostream<charT,traits>&
-operator << (std::basic_ostream<charT,traits>& out,
-             const vertex<T,3>& v)
-{
-    std::basic_ostringstream<charT,traits> s;
-    s.copyfmt(out);
-    s.width(0);
-    s<<"vertex3("<<v.x<<","<<v.y<<","<<v.z<<",cmd="<<v.cmd<<")";
-    out << s.str();
-    return out;
-}
+using vertex2d = vertex<double,2>;
+using vertex2i = vertex<int,2>;
 
 }
 
diff --git a/include/mapnik/vertex_converters.hpp b/include/mapnik/vertex_converters.hpp
index 6167415..0f0e362 100644
--- a/include/mapnik/vertex_converters.hpp
+++ b/include/mapnik/vertex_converters.hpp
@@ -23,37 +23,24 @@
 #ifndef MAPNIK_VERTEX_CONVERTERS_HPP
 #define MAPNIK_VERTEX_CONVERTERS_HPP
 
-// boost
-#include <boost/type_traits/is_same.hpp>
-
-// mpl
-#include <boost/mpl/vector.hpp>
-#include <boost/mpl/push_back.hpp>
-#include <boost/mpl/set.hpp>
-#include <boost/mpl/begin_end.hpp>
-#include <boost/mpl/distance.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/find.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/int.hpp>
-
-// fusion
-#include <boost/fusion/include/mpl.hpp>
-#include <boost/fusion/container/vector.hpp>
-#include <boost/fusion/include/at_c.hpp>
-#include <boost/fusion/include/make_vector.hpp>
-
-#include <boost/foreach.hpp>
-#include <boost/array.hpp>
 
 // mapnik
-#include <mapnik/agg_helpers.hpp>
+#include <mapnik/config.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/transform_path_adapter.hpp>
 #include <mapnik/offset_converter.hpp>
+#include <mapnik/simplify.hpp>
 #include <mapnik/simplify_converter.hpp>
 #include <mapnik/noncopyable.hpp>
-
+#include <mapnik/value_types.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/symbolizer_keys.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/geometry.hpp>
 // agg
+#include "agg_math_stroke.h"
+#include "agg_trans_affine.h"
 #include "agg_conv_clip_polygon.h"
 #include "agg_conv_clip_polyline.h"
 #include "agg_conv_close_polygon.h"
@@ -61,15 +48,17 @@
 #include "agg_conv_stroke.h"
 #include "agg_conv_dash.h"
 #include "agg_conv_transform.h"
-#include "agg_conv_clipper.h"
-#include "agg_path_storage.h"
+
+// stl
+#include <type_traits>
+#include <stdexcept>
+#include <array>
 
 namespace mapnik {
 
 struct transform_tag {};
 struct clip_line_tag {};
 struct clip_poly_tag {};
-struct clipper_tag {};
 struct close_poly_tag {};
 struct smooth_tag {};
 struct simplify_tag {};
@@ -83,167 +72,172 @@ namespace  detail {
 template <typename T0, typename T1>
 struct converter_traits
 {
-    typedef T0 geometry_type;
-    typedef geometry_type conv_type;
-    template <typename Args>
-    static void setup(geometry_type & geom, Args const& args)
-    {
-        throw "BOOM!";
-    }
+    using geometry_type = T0;
+    using conv_type = geometry_type;
 };
 
 template <typename T>
 struct converter_traits<T,mapnik::smooth_tag>
 {
-    typedef T geometry_type;
-    typedef typename agg::conv_smooth_poly1_curve<geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = typename agg::conv_smooth_poly1_curve<geometry_type>;
 
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        geom.smooth_value(boost::fusion::at_c<2>(args).smooth());
+        geom.smooth_value(get<value_double, keys::smooth>(args.sym, args.feature, args.vars));
     }
 };
 
 template <typename T>
 struct converter_traits<T,mapnik::simplify_tag>
 {
-    typedef T geometry_type;
-    typedef simplify_converter<geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = simplify_converter<geometry_type>;
 
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        geom.set_simplify_algorithm(boost::fusion::at_c<2>(args).simplify_algorithm());
-        geom.set_simplify_tolerance(boost::fusion::at_c<2>(args).simplify_tolerance());
+        geom.set_simplify_algorithm(get<simplify_algorithm_e,keys::simplify_algorithm>(args.sym, args.feature, args.vars));
+        geom.set_simplify_tolerance(get<value_double,keys::simplify_tolerance>(args.sym,args.feature, args.vars));
     }
 };
 
 template <typename T>
 struct converter_traits<T, mapnik::clip_line_tag>
 {
-    typedef T geometry_type;
-    typedef typename agg::conv_clip_polyline<geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = typename agg::conv_clip_polyline<geometry_type>;
 
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        typename boost::mpl::at<Args,boost::mpl::int_<0> >::type box = boost::fusion::at_c<0>(args);
+        auto const& box = args.bbox;
         geom.clip_box(box.minx(),box.miny(),box.maxx(),box.maxy());
     }
 };
 
-
 template <typename T>
 struct converter_traits<T, mapnik::dash_tag>
 {
-    typedef T geometry_type;
-    typedef typename agg::conv_dash<geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = typename agg::conv_dash<geometry_type>;
 
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
-        double scale_factor = boost::fusion::at_c<6>(args);
-        stroke const& stroke_ = sym.get_stroke();
-        dash_array const& d = stroke_.get_dash_array();
-        dash_array::const_iterator itr = d.begin();
-        dash_array::const_iterator end = d.end();
-        for (;itr != end;++itr)
+        auto const& sym = args.sym;
+        auto const& feat = args.feature;
+        auto const& vars = args.vars;
+        double scale_factor = args.scale_factor;
+        auto dash = get_optional<dash_array>(sym, keys::stroke_dasharray, feat, vars);
+        if (dash)
         {
-            geom.add_dash(itr->first * scale_factor,
-                          itr->second * scale_factor);
+            for (auto const& d : *dash)
+            {
+                geom.add_dash(d.first * scale_factor,
+                              d.second * scale_factor);
+            }
         }
-
     }
 };
 
-template <typename T>
-struct converter_traits<T, mapnik::stroke_tag>
+template <typename Symbolizer, typename PathType, typename Feature>
+void set_join_caps(Symbolizer const& sym, PathType & stroke, Feature const& feature, attributes const& vars)
 {
-    typedef T geometry_type;
-    typedef typename agg::conv_stroke<geometry_type> conv_type;
-
-    template <typename Args>
-    static void setup(geometry_type & geom, Args const& args)
+    line_join_enum join = get<line_join_enum,keys::stroke_linejoin>(sym, feature, vars);
+    switch (join)
     {
-        typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
-        stroke const& stroke_ = sym.get_stroke();
-        set_join_caps(stroke_,geom);
-        geom.generator().miter_limit(stroke_.get_miterlimit());
-        double scale_factor = boost::fusion::at_c<6>(args);
-        geom.generator().width(stroke_.get_width() * scale_factor);
+    case MITER_JOIN:
+        stroke.generator().line_join(agg::miter_join);
+        break;
+    case MITER_REVERT_JOIN:
+        stroke.generator().line_join(agg::miter_join);
+        break;
+    case ROUND_JOIN:
+        stroke.generator().line_join(agg::round_join);
+        break;
+    default:
+        stroke.generator().line_join(agg::bevel_join);
     }
-};
 
+    line_cap_enum cap = get<line_cap_enum,keys::stroke_linecap>(sym, feature, vars);
+
+    switch (cap)
+    {
+    case BUTT_CAP:
+        stroke.generator().line_cap(agg::butt_cap);
+        break;
+    case SQUARE_CAP:
+        stroke.generator().line_cap(agg::square_cap);
+        break;
+    default:
+        stroke.generator().line_cap(agg::round_cap);
+    }
+}
 
 template <typename T>
-struct converter_traits<T,mapnik::clip_poly_tag>
+struct converter_traits<T, mapnik::stroke_tag>
 {
-    typedef T geometry_type;
-    typedef typename agg::conv_clip_polygon<geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = typename agg::conv_stroke<geometry_type>;
+
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        typename boost::mpl::at<Args,boost::mpl::int_<0> >::type box = boost::fusion::at_c<0>(args);
-        geom.clip_box(box.minx(),box.miny(),box.maxx(),box.maxy());
+        auto const& sym = args.sym;
+        auto const& feat = args.feature;
+        auto const& vars = args.vars;
+        set_join_caps(sym, geom, feat, vars);
+        double miterlimit = get<value_double,keys::stroke_miterlimit>(sym, feat, vars);
+        geom.generator().miter_limit(miterlimit);
+        double scale_factor = args.scale_factor;
+        double width = get<value_double,keys::stroke_width>(sym, feat, vars);
+        geom.generator().width(width * scale_factor);
     }
 };
 
 template <typename T>
-struct converter_traits<T,mapnik::clipper_tag>
+struct converter_traits<T,mapnik::clip_poly_tag>
 {
-    typedef T geometry_type;
-    typedef typename agg::conv_clipper<geometry_type,agg::path_storage> conv_type;
+    using geometry_type = T;
+    using conv_type = typename agg::conv_clip_polygon<geometry_type>;
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        typename boost::mpl::at<Args,boost::mpl::int_<0> >::type box = boost::fusion::at_c<0>(args);
-        agg::path_storage * ps = new agg::path_storage(); // FIXME: this will leak memory!
-        ps->move_to(box.minx(),box.miny());
-        ps->line_to(box.minx(),box.maxy());
-        ps->line_to(box.maxx(),box.maxy());
-        ps->line_to(box.maxx(),box.miny());
-        ps->close_polygon();
-        geom.attach2(*ps, agg::clipper_non_zero);
-        //geom.reverse(true);
+        auto const& box = args.bbox;
+        geom.clip_box(box.minx(),box.miny(),box.maxx(),box.maxy());
     }
 };
 
 template <typename T>
 struct converter_traits<T,mapnik::close_poly_tag>
 {
-    typedef T geometry_type;
-    typedef typename agg::conv_close_polygon<geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = typename agg::conv_close_polygon<geometry_type>;
     template <typename Args>
-    static void setup(geometry_type & geom, Args const& args)
-    {
-        // no-op
-    }
+    static void setup(geometry_type & , Args const&) {}
 };
 
 template <typename T>
 struct converter_traits<T,mapnik::transform_tag>
 {
-    typedef T geometry_type;
-    typedef coord_transform<CoordTransform, geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = transform_path_adapter<view_transform, geometry_type>;
 
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        geom.set_proj_trans(boost::fusion::at_c<4>(args));
-        geom.set_trans(boost::fusion::at_c<3>(args));
+        geom.set_proj_trans(args.prj_trans);
+        geom.set_trans(args.tr);
     }
 };
 
-
 template <typename T>
 struct converter_traits<T,mapnik::affine_transform_tag>
 {
-    typedef T geometry_type;
-    typedef agg::conv_transform<geometry_type, agg::trans_affine const>
-        conv_base_type;
-
+    using geometry_type = T;
+    using conv_base_type =  agg::conv_transform<geometry_type, agg::trans_affine const>;
     struct conv_type : public conv_base_type
     {
         conv_type(geometry_type& geom)
@@ -253,166 +247,167 @@ struct converter_traits<T,mapnik::affine_transform_tag>
     template <typename Args>
     static void setup(geometry_type & geom, Args & args)
     {
-        geom.transformer(boost::fusion::at_c<5>(args));
+        geom.transformer(args.affine_trans);
     }
 };
 
 template <typename T>
 struct converter_traits<T,mapnik::offset_transform_tag>
 {
-    typedef T geometry_type;
-    typedef offset_converter<geometry_type> conv_type;
+    using geometry_type = T;
+    using conv_type = offset_converter<geometry_type>;
 
     template <typename Args>
     static void setup(geometry_type & geom, Args const& args)
     {
-        typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
-        double scale_factor = boost::fusion::at_c<6>(args);
-        geom.set_offset(sym.offset()*scale_factor);
-    }
-};
-
-template <bool>
-struct converter_fwd
-{
-    template <typename Base, typename T0,typename T1,typename T2, typename Iter,typename End>
-    static void forward(Base& base, T0 & geom,T1 const& args)
-    {
-        typedef T0 geometry_type;
-        typedef T2 conv_tag;
-        typedef typename detail::converter_traits<geometry_type,conv_tag>::conv_type conv_type;
-        conv_type conv(geom);
-        detail::converter_traits<conv_type,conv_tag>::setup(conv,args);
-        base.template dispatch<Iter,End>(conv, typename boost::is_same<Iter,End>::type());
+        auto const& sym = args.sym;
+        auto const& feat = args.feature;
+        auto const& vars = args.vars;
+        double offset = get<value_double, keys::offset>(sym, feat, vars);
+        geom.set_offset(offset * args.scale_factor);
     }
 };
 
-template <>
-struct converter_fwd<true>
-{
-    template <typename Base, typename T0,typename T1,typename T2, typename Iter,typename End>
-    static void forward(Base& base, T0 & geom,T1 const& args)
-    {
-        base.template dispatch<Iter,End>(geom, typename boost::is_same<Iter,End>::type());
-    }
-};
+template <typename Dispatcher, typename... ConverterTypes>
+struct converters_helper;
 
-template <typename A, typename C>
-struct dispatcher
+template <typename Dispatcher, typename Current, typename... ConverterTypes>
+struct converters_helper<Dispatcher,Current,ConverterTypes...>
 {
-    typedef dispatcher this_type;
-    typedef A args_type;
-    typedef C conv_types;
-
-    dispatcher(args_type const& args)
-        : args_(args)
-    {
-        std::memset(&vec_[0], 0,  sizeof(unsigned)*vec_.size());
-    }
-
-    template <typename Iter, typename End, typename Geometry>
-    void dispatch(Geometry & geom, boost::mpl::true_)
+    template <typename Converter>
+    static void set(Dispatcher & disp, int state)
     {
-        boost::fusion::at_c<1>(args_).add_path(geom);
+        if (std::is_same<Converter,Current>::value)
+        {
+            constexpr std::size_t index = sizeof...(ConverterTypes) ;
+            disp.vec_[index] = state;
+        }
+        else
+        {
+            converters_helper<Dispatcher,ConverterTypes...>:: template set<Converter>(disp, state);
+        }
     }
 
-    template <typename Iter, typename End, typename Geometry>
-    void dispatch(Geometry & geom, boost::mpl::false_)
+    template <typename Geometry>
+    static void forward(Dispatcher & disp, Geometry & geom)
     {
-        typedef typename boost::mpl::deref<Iter>::type conv_tag;
-        typedef typename detail::converter_traits<Geometry,conv_tag>::conv_type conv_type;
-        typedef typename boost::mpl::next<Iter>::type Next;
-
-        std::size_t index = boost::mpl::distance<Iter,End>::value - 1;
-        if (vec_[index] == 1)
+        constexpr std::size_t index = sizeof...(ConverterTypes);
+        if (disp.vec_[index] == 1)
         {
-            converter_fwd<boost::is_same<Geometry,conv_type>::value>::
-                template forward<this_type,Geometry,args_type,conv_tag,Next,End>(*this,geom,args_);
+            using conv_type = typename detail::converter_traits<Geometry,Current>::conv_type;
+            conv_type conv(geom);
+            detail::converter_traits<conv_type,Current>::setup(conv,disp.args_);
+            converters_helper<Dispatcher, ConverterTypes...>::forward(disp, conv);
         }
         else
         {
-            converter_fwd<boost::mpl::true_::value>::
-                template forward<this_type,Geometry,args_type,conv_tag,Next,End>(*this,geom,args_);
+            converters_helper<Dispatcher,ConverterTypes...>::forward(disp, geom);
         }
-
     }
+};
 
+template <typename Dispatcher>
+struct converters_helper<Dispatcher>
+{
+    template <typename Converter>
+    static void set(Dispatcher &, int) {}
     template <typename Geometry>
-    void apply(Geometry & geom)
+    static void forward(Dispatcher & disp, Geometry & geom)
+    {
+        disp.args_.proc.add_path(geom);
+    }
+};
+
+template <typename Args, typename... ConverterTypes>
+struct dispatcher : mapnik::noncopyable
+{
+    using this_type = dispatcher;
+    using args_type = Args;
+
+    dispatcher(typename Args::processor_type & proc, box2d<double> const& bbox, symbolizer_base const& sym, view_transform const& tr,
+               proj_transform const& prj_trans, agg::trans_affine const& affine_trans, feature_impl const& feature,
+               attributes const& vars, double scale_factor)
+        : args_(proc,bbox,sym,tr,prj_trans,affine_trans,feature,vars,scale_factor)
     {
-        typedef typename boost::mpl::begin<conv_types>::type begin;
-        typedef typename boost::mpl::end  <conv_types>::type end;
-        dispatch<begin,end,Geometry>(geom, boost::false_type());
+        std::fill(vec_.begin(), vec_.end(), 0);
     }
 
-    boost::array<unsigned, boost::mpl::size<conv_types>::value> vec_;
+    std::array<unsigned, sizeof...(ConverterTypes)> vec_;
     args_type args_;
 };
-}
 
+template <typename Processor>
+struct arguments : mapnik::noncopyable
+{
+    using processor_type = Processor;
+    arguments(Processor & proc, box2d<double> const& bbox, symbolizer_base const& sym, view_transform const& tr,
+              proj_transform const& prj_trans, agg::trans_affine const& affine_trans, feature_impl const& feature,
+              attributes const& vars, double scale_factor)
+        : proc(proc),
+          bbox(bbox),
+          sym(sym),
+          tr(tr),
+          prj_trans(prj_trans),
+          affine_trans(affine_trans),
+          feature(feature),
+          vars(vars),
+          scale_factor(scale_factor) {}
+
+    Processor & proc;
+    box2d<double> const& bbox;
+    symbolizer_base const& sym;
+    view_transform const& tr;
+    proj_transform const& prj_trans;
+    agg::trans_affine const& affine_trans;
+    feature_impl const& feature;
+    attributes const& vars;
+    double scale_factor;
+};
 
+}
 
-template <typename B, typename R, typename S, typename T, typename P, typename A, typename C >
+template <typename Processor, typename... ConverterTypes >
 struct vertex_converter : private mapnik::noncopyable
 {
-    typedef C conv_types;
-    typedef B bbox_type;
-    typedef R rasterizer_type;
-    typedef S symbolizer_type;
-    typedef T trans_type;
-    typedef P proj_trans_type;
-    typedef A affine_trans_type;
-    typedef typename boost::fusion::vector
-    <
-    bbox_type const&,
-    rasterizer_type&,
-    symbolizer_type const&,
-    trans_type const&,
-    proj_trans_type const&,
-    affine_trans_type const&,
-    double //scale-factor
-    > args_type;
-
-    vertex_converter(bbox_type const& b, rasterizer_type & ras,
-                     symbolizer_type const& sym, trans_type & tr,
+    using bbox_type = box2d<double>;
+    using processor_type = Processor;
+    using symbolizer_type = symbolizer_base;
+    using trans_type = view_transform;
+    using proj_trans_type = proj_transform;
+    using affine_trans_type = agg::trans_affine;
+    using feature_type = feature_impl;
+    using args_type = detail::arguments<Processor>;
+    using dispatcher_type = detail::dispatcher<args_type,ConverterTypes...>;
+
+    vertex_converter(bbox_type const& bbox,
+                     processor_type & proc,
+                     symbolizer_type const& sym,
+                     trans_type const& tr,
                      proj_trans_type const& prj_trans,
                      affine_trans_type const& affine_trans,
+                     feature_type const& feature,
+                     attributes const& vars,
                      double scale_factor)
-        : disp_(args_type(boost::cref(b), boost::ref(ras),
-                          boost::cref(sym), boost::cref(tr),
-                          boost::cref(prj_trans),
-                          boost::cref(affine_trans),
-                          scale_factor)) {}
+        : disp_(proc,bbox,sym,tr,prj_trans,affine_trans,feature,vars,scale_factor) {}
 
-    template <typename Geometry>
-    void apply(Geometry & geom)
+    void apply(geometry_type & geom)
     {
-        typedef Geometry geometry_type;
-        disp_.template apply<geometry_type>(geom);
+        detail::converters_helper<dispatcher_type, ConverterTypes...>:: template forward<geometry_type>(disp_, geom);
     }
 
-    template <typename Conv>
+    template <typename Converter>
     void set()
     {
-        typedef typename boost::mpl::find<conv_types,Conv>::type iter;
-        typedef typename boost::mpl::end<conv_types>::type end;
-        std::size_t index = boost::mpl::distance<iter,end>::value - 1;
-        if (index < disp_.vec_.size())
-            disp_.vec_[index]=1;
+        detail::converters_helper<dispatcher_type, ConverterTypes...>:: template set<Converter>(disp_, 1);
     }
 
-    template <typename Conv>
+    template <typename Converter>
     void unset()
     {
-        typedef typename boost::mpl::find<conv_types,Conv>::type iter;
-        typedef typename boost::mpl::end<conv_types>::type end;
-        std::size_t index = boost::mpl::distance<iter,end>::value - 1;
-        if (index < disp_.vec_.size())
-            disp_.vec_[index]=0;
+        detail::converters_helper<dispatcher_type, ConverterTypes...>:: template set<Converter>(disp_, 0);
     }
 
-
-    detail::dispatcher<args_type,conv_types> disp_;
+    dispatcher_type disp_;
 };
 
 }
diff --git a/include/mapnik/vertex_vector.hpp b/include/mapnik/vertex_vector.hpp
index 44fbd78..198865c 100644
--- a/include/mapnik/vertex_vector.hpp
+++ b/include/mapnik/vertex_vector.hpp
@@ -31,10 +31,10 @@
 #include <mapnik/vertex.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/tuple/tuple.hpp>
-
-#include <cstring>  // required for memcpy with linux/g++
+// stl
+#include <algorithm>
+#include <tuple>
+#include <cstdint>
 
 namespace mapnik
 {
@@ -42,9 +42,7 @@ namespace mapnik
 template <typename T>
 class vertex_vector : private mapnik::noncopyable
 {
-    typedef T coord_type;
-    typedef vertex<coord_type,2> vertex_type;
-
+    using coord_type = T;
     enum block_e {
         block_shift = 8,
         block_size  = 1<<block_shift,
@@ -53,14 +51,14 @@ class vertex_vector : private mapnik::noncopyable
     };
 public:
     // required for iterators support
-    typedef boost::tuple<unsigned,coord_type,coord_type> value_type;
-    typedef std::size_t size_type;
-
+    using value_type = std::tuple<unsigned,coord_type,coord_type>;
+    using size_type = std::size_t;
+    using command_size = std::uint8_t;
 private:
     unsigned num_blocks_;
     unsigned max_blocks_;
     coord_type** vertices_;
-    unsigned char** commands_;
+    command_size** commands_;
     size_type pos_;
 
 public:
@@ -90,17 +88,17 @@ public:
         return pos_;
     }
 
-    void push_back (coord_type x,coord_type y,unsigned command)
+    void push_back (coord_type x,coord_type y,command_size command)
     {
-        unsigned block = pos_ >> block_shift;
+        size_type block = pos_ >> block_shift;
         if (block >= num_blocks_)
         {
             allocate_block(block);
         }
         coord_type* vertex = vertices_[block] + ((pos_ & block_mask) << 1);
-        unsigned char* cmd= commands_[block] + (pos_ & block_mask);
+        command_size* cmd= commands_[block] + (pos_ & block_mask);
 
-        *cmd = static_cast<unsigned char>(command);
+        *cmd = static_cast<command_size>(command);
         *vertex++ = x;
         *vertex   = y;
         ++pos_;
@@ -108,7 +106,7 @@ public:
     unsigned get_vertex(unsigned pos,coord_type* x,coord_type* y) const
     {
         if (pos >= pos_) return SEG_END;
-        unsigned block = pos >> block_shift;
+        size_type block = pos >> block_shift;
         const coord_type* vertex = vertices_[block] + (( pos & block_mask) << 1);
         *x = (*vertex++);
         *y = (*vertex);
@@ -119,22 +117,22 @@ public:
     {
         if (pos < pos_)
         {
-            unsigned block = pos >> block_shift;
+            size_type block = pos >> block_shift;
             commands_[block] [pos & block_mask] = command;
         }
     }
 private:
-    void allocate_block(unsigned block)
+    void allocate_block(size_type block)
     {
         if (block >= max_blocks_)
         {
             coord_type** new_vertices =
                 static_cast<coord_type**>(::operator new (sizeof(coord_type*)*((max_blocks_ + grow_by) * 2)));
-            unsigned char** new_commands = (unsigned char**)(new_vertices + max_blocks_ + grow_by);
+            command_size** new_commands = (command_size**)(new_vertices + max_blocks_ + grow_by);
             if (vertices_)
             {
-                std::memcpy(new_vertices,vertices_,max_blocks_ * sizeof(coord_type*));
-                std::memcpy(new_commands,commands_,max_blocks_ * sizeof(unsigned char*));
+                std::copy(vertices_, vertices_ + max_blocks_, new_vertices);
+                std::copy(commands_, commands_ + max_blocks_, new_commands);
                 ::operator delete(vertices_);
             }
             vertices_ = new_vertices;
@@ -144,7 +142,7 @@ private:
         vertices_[block] = static_cast<coord_type*>
             (::operator new(sizeof(coord_type)*(block_size * 2 + block_size / (sizeof(coord_type)))));
 
-        commands_[block] = (unsigned char*)(vertices_[block] + block_size*2);
+        commands_[block] = (command_size*)(vertices_[block] + block_size*2);
         ++num_blocks_;
     }
 };
diff --git a/include/mapnik/view_transform.hpp b/include/mapnik/view_transform.hpp
new file mode 100644
index 0000000..683e979
--- /dev/null
+++ b/include/mapnik/view_transform.hpp
@@ -0,0 +1,183 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_VIEW_TRANSFORM_HPP
+#define MAPNIK_VIEW_TRANSFORM_HPP
+
+// mapnik
+#include <mapnik/coord.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/proj_transform.hpp>
+
+namespace mapnik
+{
+
+class view_transform
+{
+private:
+    const int width_;
+    const int height_;
+    const box2d<double> extent_;
+    const double sx_;
+    const double sy_;
+    const double offset_x_;
+    const double offset_y_;
+    int offset_;
+public:
+
+    view_transform(int width, int height, box2d<double> const& extent,
+                   double offset_x = 0.0, double offset_y = 0.0)
+        : width_(width),
+          height_(height),
+          extent_(extent),
+          sx_(extent_.width() > 0 ? static_cast<double>(width_) / extent_.width() : 1.0),
+          sy_(extent_.height() > 0 ? static_cast<double>(height_) / extent_.height() : 1.0),
+          offset_x_(offset_x),
+          offset_y_(offset_y),
+          offset_(0) {}
+
+    view_transform(view_transform const&) = default;
+
+    inline int offset() const
+    {
+        return offset_;
+    }
+
+    inline void set_offset(int offset)
+    {
+        offset_ = offset;
+    }
+
+    inline double offset_x() const
+    {
+        return offset_x_;
+    }
+
+    inline double offset_y() const
+    {
+        return offset_y_;
+    }
+
+    inline int width() const
+    {
+        return width_;
+    }
+
+    inline int height() const
+    {
+        return height_;
+    }
+
+    inline double scale_x() const
+    {
+        return sx_;
+    }
+
+    inline double scale_y() const
+    {
+        return sy_;
+    }
+
+    inline void forward(double *x, double *y) const
+    {
+        *x = (*x - extent_.minx()) * sx_ - (offset_x_ - offset_);
+        *y = (extent_.maxy() - *y) * sy_ - (offset_y_ - offset_);
+    }
+
+    inline void backward(double *x, double *y) const
+    {
+        *x = extent_.minx() + (*x + (offset_x_ - offset_)) / sx_;
+        *y = extent_.maxy() - (*y + (offset_y_ - offset_)) / sy_;
+    }
+
+    inline coord2d& forward(coord2d& c) const
+    {
+        forward(&c.x, &c.y);
+        return c;
+    }
+
+    inline coord2d& backward(coord2d& c) const
+    {
+        backward(&c.x, &c.y);
+        return c;
+    }
+
+    inline box2d<double> forward(box2d<double> const& e,
+                                 proj_transform const& prj_trans) const
+    {
+        double x0 = e.minx();
+        double y0 = e.miny();
+        double x1 = e.maxx();
+        double y1 = e.maxy();
+        double z = 0.0;
+        prj_trans.backward(x0, y0, z);
+        forward(&x0, &y0);
+        prj_trans.backward(x1, y1, z);
+        forward(&x1, &y1);
+        return box2d<double>(x0, y0, x1, y1);
+    }
+
+    inline box2d<double> forward(box2d<double> const& e) const
+    {
+        double x0 = e.minx();
+        double y0 = e.miny();
+        double x1 = e.maxx();
+        double y1 = e.maxy();
+        forward(&x0, &y0);
+        forward(&x1, &y1);
+        return box2d<double>(x0, y0, x1, y1);
+    }
+
+    inline box2d<double> backward(box2d<double> const& e,
+                                  proj_transform const& prj_trans) const
+    {
+        double x0 = e.minx();
+        double y0 = e.miny();
+        double x1 = e.maxx();
+        double y1 = e.maxy();
+        double z = 0.0;
+        backward(&x0, &y0);
+        prj_trans.forward(x0, y0, z);
+        backward(&x1, &y1);
+        prj_trans.forward(x1, y1, z);
+        return box2d<double>(x0, y0, x1, y1);
+    }
+
+    inline box2d<double> backward(box2d<double> const& e) const
+    {
+        double x0 = e.minx();
+        double y0 = e.miny();
+        double x1 = e.maxx();
+        double y1 = e.maxy();
+        backward(&x0, &y0);
+        backward(&x1, &y1);
+        return box2d<double>(x0, y0, x1, y1);
+    }
+
+    inline box2d<double> const& extent() const
+    {
+        return extent_;
+    }
+};
+}
+
+#endif // MAPNIK_VIEW_TRANSFORM_HPP
diff --git a/include/mapnik/warp.hpp b/include/mapnik/warp.hpp
index ee58916..7e53ca0 100644
--- a/include/mapnik/warp.hpp
+++ b/include/mapnik/warp.hpp
@@ -25,18 +25,18 @@
 
 // mapnik
 #include <mapnik/image_scaling.hpp>
+#include <mapnik/config.hpp>
 
 namespace mapnik {
 
 class raster;
 class proj_transform;
 
-void reproject_and_scale_raster(raster & target,
+MAPNIK_DECL void reproject_and_scale_raster(raster & target,
                                 raster const& source,
                                 proj_transform const& prj_trans,
                                 double offset_x, double offset_y,
                                 unsigned mesh_size,
-                                double filter_radius,
                                 scaling_method_e scaling_method);
 
 }
diff --git a/include/mapnik/webp_io.hpp b/include/mapnik/webp_io.hpp
new file mode 100644
index 0000000..2689635
--- /dev/null
+++ b/include/mapnik/webp_io.hpp
@@ -0,0 +1,212 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_WEBP_IO_HPP
+#define MAPNIK_WEBP_IO_HPP
+
+// mapnik
+#include <mapnik/image_data.hpp>
+#include <mapnik/util/conversions.hpp>
+
+// webp
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
+extern "C"
+{
+#include <webp/encode.h>
+}
+#pragma clang diagnostic pop
+
+// stl
+#include <algorithm>
+#include <stdexcept>
+#include <string>
+
+namespace mapnik {
+
+template <typename T>
+int webp_stream_write(const uint8_t* data, size_t data_size, const WebPPicture* picture)
+{
+    T* out = static_cast<T*>(picture->custom_ptr);
+    out->write(reinterpret_cast<const char*>(data), data_size);
+    return true;
+}
+
+std::string webp_encoding_error(WebPEncodingError error)
+{
+    std::string os;
+    switch (error)
+    {
+        case VP8_ENC_ERROR_OUT_OF_MEMORY: os = "memory error allocating objects"; break;
+        case VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY: os = "memory error while flushing bits"; break;
+        case VP8_ENC_ERROR_NULL_PARAMETER: os = "a pointer parameter is NULL"; break;
+        case VP8_ENC_ERROR_INVALID_CONFIGURATION: os = "configuration is invalid"; break;
+        case VP8_ENC_ERROR_BAD_DIMENSION: os = "picture has invalid width/height"; break;
+        case VP8_ENC_ERROR_PARTITION0_OVERFLOW: os = "partition is bigger than 512k"; break;
+        case VP8_ENC_ERROR_PARTITION_OVERFLOW: os = "partition is bigger than 16M"; break;
+        case VP8_ENC_ERROR_BAD_WRITE: os = "error while flushing bytes"; break;
+        case VP8_ENC_ERROR_FILE_TOO_BIG: os = "file is bigger than 4G"; break;
+        default:
+            mapnik::util::to_string(os,error);
+            os = "unknown error (" + os + ")"; break;
+    }
+    return os;
+}
+
+template <typename T2>
+inline int import_image_data(T2 const& image,
+                             WebPPicture & pic,
+                             bool alpha)
+{
+    image_data<typename T2::pixel_type> const& data = image.data();
+    int stride = sizeof(typename T2::pixel_type) * image.width();
+    if (data.width() == image.width() &&
+        data.height() == image.height())
+    {
+        if (alpha)
+        {
+            return WebPPictureImportRGBA(&pic, data.getBytes(), stride);
+        }
+        else
+        {
+    #if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1
+            return WebPPictureImportRGBX(&pic, data.getBytes(), stride);
+    #else
+            return WebPPictureImportRGBA(&pic, data.getBytes(), stride);
+    #endif
+        }
+    }
+    else
+    {
+        // need to copy: https://github.com/mapnik/mapnik/issues/2024
+        image_data_32 im(image.width(),image.height());
+        for (unsigned y = 0; y < image.height(); ++y)
+        {
+            typename T2::pixel_type const * row_from = image.getRow(y);
+            image_data_32::pixel_type * row_to = im.getRow(y);
+            std::copy(row_from, row_from + stride, row_to);
+        }
+        if (alpha)
+        {
+            return WebPPictureImportRGBA(&pic, im.getBytes(), stride);
+        }
+        else
+        {
+    #if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1
+            return WebPPictureImportRGBX(&pic, im.getBytes(), stride);
+    #else
+            return WebPPictureImportRGBA(&pic, im.getBytes(), stride);
+    #endif
+        }
+    }
+}
+
+template <>
+inline int import_image_data(image_data_32 const& im,
+                             WebPPicture & pic,
+                             bool alpha)
+{
+    int stride = sizeof(image_data_32::pixel_type) * im.width();
+    if (alpha)
+    {
+        return WebPPictureImportRGBA(&pic, im.getBytes(), stride);
+    }
+    else
+    {
+#if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1
+        return WebPPictureImportRGBX(&pic, im.getBytes(), stride);
+#else
+        return WebPPictureImportRGBA(&pic, im.getBytes(), stride);
+#endif
+    }
+}
+
+template <typename T1, typename T2>
+void save_as_webp(T1& file,
+                  T2 const& image,
+                  WebPConfig const& config,
+                  bool alpha)
+{
+    if (WebPValidateConfig(&config) != 1)
+    {
+        throw std::runtime_error("Invalid configuration");
+    }
+
+    WebPPicture pic;
+    if (!WebPPictureInit(&pic))
+    {
+        throw std::runtime_error("version mismatch");
+    }
+    pic.width = image.width();
+    pic.height = image.height();
+    int ok = 0;
+#if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1
+    pic.use_argb = !!config.lossless;
+    // lossless fast track
+    if (pic.use_argb)
+    {
+        pic.colorspace = static_cast<WebPEncCSP>(pic.colorspace | WEBP_CSP_ALPHA_BIT);
+        if (WebPPictureAlloc(&pic)) {
+            ok = 1;
+            const int width = pic.width;
+            const int height = pic.height;
+            for (int y = 0; y < height; ++y) {
+                typename T2::pixel_type const * row = image.getRow(y);
+                for (int x = 0; x < width; ++x) {
+                    const unsigned rgba = row[x];
+                    unsigned a = (rgba >> 24) & 0xff;
+                    unsigned r = rgba & 0xff;
+                    unsigned g = (rgba >> 8 ) & 0xff;
+                    unsigned b = (rgba >> 16) & 0xff;
+                    const uint32_t argb = (a << 24) | (r << 16) | (g << 8) | (b);
+                    pic.argb[x + y * pic.argb_stride] = argb;
+                }
+            }
+        }
+    }
+    else
+    {
+        // different approach for lossy since ImportYUVAFromRGBA is needed
+        // to prepare WebPPicture and working with view pixels is not viable
+        ok = import_image_data(image,pic,alpha);
+    }
+#else
+    ok = import_image_data(image,pic,alpha);
+#endif
+    if (!ok)
+    {
+        throw std::runtime_error(webp_encoding_error(pic.error_code));
+    }
+
+    pic.writer = webp_stream_write<T1>;
+    pic.custom_ptr = &file;
+    ok = WebPEncode(&config, &pic);
+    WebPPictureFree(&pic);
+    if (!ok)
+    {
+        throw std::runtime_error(webp_encoding_error(pic.error_code));
+    }
+    file.flush();
+}
+}
+
+#endif // MAPNIK_WEBP_IO_HPP
diff --git a/include/mapnik/wkb.hpp b/include/mapnik/wkb.hpp
index 0f440aa..2f3052c 100644
--- a/include/mapnik/wkb.hpp
+++ b/include/mapnik/wkb.hpp
@@ -25,6 +25,7 @@
 
 // mapnik
 #include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
 #include <mapnik/noncopyable.hpp>
 
 namespace mapnik
@@ -52,7 +53,7 @@ class MAPNIK_DECL geometry_utils : private mapnik::noncopyable
 {
 public:
 
-    static bool from_wkb (boost::ptr_vector<geometry_type>& paths,
+    static bool from_wkb(mapnik::geometry_container& paths,
                           const char* wkb,
                           unsigned size,
                           wkbFormat format = wkbGeneric);
diff --git a/include/mapnik/wkt/wkt_factory.hpp b/include/mapnik/wkt/wkt_factory.hpp
index a35299b..c546d59 100644
--- a/include/mapnik/wkt/wkt_factory.hpp
+++ b/include/mapnik/wkt/wkt_factory.hpp
@@ -24,38 +24,25 @@
 #define MAPNIK_WKT_FACTORY_HPP
 
 // mapnik
-#include <mapnik/config.hpp>
 #include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
 #include <mapnik/wkt/wkt_grammar.hpp>
-#include <mapnik/noncopyable.hpp>
-
-// boost
-#include <boost/ptr_container/ptr_vector.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/version.hpp>
 
 // stl
 #include <string>
 
 namespace mapnik {
 
-MAPNIK_DECL bool from_wkt(std::string const& wkt, boost::ptr_vector<geometry_type> & paths);
-
-#if BOOST_VERSION >= 104700
-
-class MAPNIK_DECL wkt_parser : mapnik::noncopyable
+inline bool from_wkt(std::string const& wkt, mapnik::geometry_container & paths)
 {
-    typedef std::string::const_iterator iterator_type;
-public:
-    wkt_parser();
-    bool parse(std::string const& wkt, boost::ptr_vector<geometry_type> & paths);
-private:
-    boost::scoped_ptr<mapnik::wkt::wkt_collection_grammar<iterator_type> > grammar_;
-};
-
-#endif
-
+    using namespace boost::spirit;
+    static const mapnik::wkt::wkt_collection_grammar<std::string::const_iterator> g;
+    ascii::space_type space;
+    std::string::const_iterator first = wkt.begin();
+    std::string::const_iterator last =  wkt.end();
+    return qi::phrase_parse(first, last, g, space, paths);
 }
 
+}
 
 #endif // MAPNIK_WKT_FACTORY_HPP
diff --git a/include/mapnik/wkt/wkt_generator_grammar.hpp b/include/mapnik/wkt/wkt_generator_grammar.hpp
new file mode 100644
index 0000000..9c6337c
--- /dev/null
+++ b/include/mapnik/wkt/wkt_generator_grammar.hpp
@@ -0,0 +1,204 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef MAPNIK_GEOMETRY_WKT_GENERATOR_HPP
+#define MAPNIK_GEOMETRY_WKT_GENERATOR_HPP
+
+// mapnik
+#include <mapnik/global.hpp>
+#include <mapnik/geometry.hpp>
+#include <mapnik/vertex.hpp>    // for CommandType::SEG_MOVETO
+#include <mapnik/util/container_adapter.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/karma.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_fusion.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/fusion/adapted/std_tuple.hpp>
+#include <boost/math/special_functions/trunc.hpp> // for vc++ and android whose c++11 libs lack std::trunc
+#pragma GCC diagnostic pop
+
+// stl
+#include <tuple>
+#include <type_traits>
+
+namespace mapnik { namespace wkt {
+
+namespace karma = boost::spirit::karma;
+namespace phoenix = boost::phoenix;
+
+namespace detail {
+
+template <typename Geometry>
+struct get_type
+{
+    using result_type = int;
+
+    int operator() (Geometry const& geom) const
+    {
+        return static_cast<int>(geom.type());
+    }
+};
+
+template <typename Geometry>
+struct get_first
+{
+    using result_type = const typename Geometry::value_type;
+    typename geometry_type::value_type const operator() (Geometry const& geom) const
+    {
+        typename Geometry::value_type coord;
+        geom.rewind(0);
+        std::get<0>(coord) = geom.vertex(&std::get<1>(coord),&std::get<2>(coord));
+        return coord;
+    }
+};
+
+template <typename GeometryContainer>
+struct multi_geometry_
+{
+    using result_type = bool;
+    bool operator() (GeometryContainer const& geom) const
+    {
+        return geom.size() > 1 ? true : false;
+    }
+};
+
+template <typename T>
+struct get_x
+{
+    using value_type = T;
+    using result_type = double;
+    double operator() (value_type const& val) const
+    {
+        return std::get<1>(val);
+    }
+};
+
+template <typename T>
+struct get_y
+{
+    using value_type = T;
+    using result_type = double;
+    double operator() (value_type const& val) const
+    {
+        return std::get<2>(val);
+    }
+};
+
+template <typename GeometryContainer>
+struct multi_geometry_type
+{
+    using result_type = std::tuple<unsigned,bool>;
+    std::tuple<unsigned,bool> operator() (GeometryContainer const& geom) const;
+};
+
+
+template <typename T>
+struct wkt_coordinate_policy : karma::real_policies<T>
+{
+    using base_type = boost::spirit::karma::real_policies<T>;
+    static int floatfield(T) { return base_type::fmtflags::fixed; }
+    static unsigned precision(T n)
+    {
+        if (n == 0.0) return 0;
+        using namespace boost::spirit;
+        return static_cast<unsigned>(14 - boost::math::trunc(log10(traits::get_absolute_value(n))));
+    }
+
+    template <typename OutputIterator>
+    static bool dot(OutputIterator& sink, T n, unsigned precision)
+    {
+        if (n == 0) return true;
+        return base_type::dot(sink, n, precision);
+    }
+
+    template <typename OutputIterator>
+    static bool fraction_part(OutputIterator& sink, T n
+                       , unsigned adjprec, unsigned precision)
+    {
+        if (n == 0) return true;
+        return base_type::fraction_part(sink, n, adjprec, precision);
+    }
+};
+
+}
+
+template <typename OutputIterator, typename Geometry>
+struct wkt_generator :
+    karma::grammar<OutputIterator, Geometry const& ()>
+{
+    using geometry_type = Geometry;
+    using coord_type = typename std::remove_pointer<typename geometry_type::value_type>::type;
+
+    wkt_generator(bool single = false);
+    // rules
+    karma::rule<OutputIterator, geometry_type const& ()> wkt;
+    karma::rule<OutputIterator, geometry_type const& ()> point;
+    karma::rule<OutputIterator, geometry_type const& ()> linestring;
+    karma::rule<OutputIterator, geometry_type const& ()> polygon;
+
+    karma::rule<OutputIterator, geometry_type const& ()> coords;
+    karma::rule<OutputIterator, karma::locals<unsigned,double,double>, geometry_type const& ()> coords2;
+    karma::rule<OutputIterator, coord_type ()> point_coord;
+    karma::rule<OutputIterator, karma::locals<double,double>, coord_type (unsigned&, double&, double& )> polygon_coord;
+
+    // phoenix functions
+    phoenix::function<detail::get_type<geometry_type> > _type;
+    phoenix::function<detail::get_first<geometry_type> > _first;
+    phoenix::function<detail::get_x<typename geometry_type::value_type> > _x;
+    phoenix::function<detail::get_y<typename geometry_type::value_type> > _y;
+    //
+    karma::real_generator<double, detail::wkt_coordinate_policy<double> > coordinate;
+};
+
+
+template <typename OutputIterator, typename GeometryContainer>
+struct wkt_multi_generator :
+        karma::grammar<OutputIterator, karma::locals< std::tuple<unsigned,bool> >, GeometryContainer const& ()>
+{
+    using geometry_type = typename std::remove_pointer<typename GeometryContainer::value_type>::type;
+
+    wkt_multi_generator();
+    // rules
+    karma::rule<OutputIterator, karma::locals<std::tuple<unsigned,bool> >, GeometryContainer const& ()> wkt;
+    karma::rule<OutputIterator, GeometryContainer const& ()> geometry;
+    karma::rule<OutputIterator, geometry_type const& ()> single_geometry;
+    karma::rule<OutputIterator, GeometryContainer const& ()> multi_geometry;
+    wkt_generator<OutputIterator, geometry_type >  path;
+    // phoenix
+    phoenix::function<detail::multi_geometry_<GeometryContainer> > is_multi;
+    phoenix::function<detail::multi_geometry_type<GeometryContainer> > _multi_type;
+    phoenix::function<detail::get_type<geometry_type> > _type;
+    //
+    karma::symbols<unsigned, char const*> geometry_types;
+};
+
+}}
+
+
+#endif // MAPNIK_GEOMETRY_WKT_GENERATOR_HPP
diff --git a/include/mapnik/wkt/wkt_generator_grammar_impl.hpp b/include/mapnik/wkt/wkt_generator_grammar_impl.hpp
new file mode 100644
index 0000000..e4051a7
--- /dev/null
+++ b/include/mapnik/wkt/wkt_generator_grammar_impl.hpp
@@ -0,0 +1,147 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/geometry.hpp>
+#include <mapnik/wkt/wkt_generator_grammar.hpp>
+#include <mapnik/util/path_iterator.hpp>
+#include <mapnik/util/container_adapter.hpp>
+
+namespace mapnik { namespace wkt {
+
+template <typename T>
+std::tuple<unsigned,bool> detail::multi_geometry_type<T>::operator() (T const& geom) const
+{
+    using geometry_container = T;
+    unsigned type = 0u;
+    bool collection = false;
+
+    typename geometry_container::const_iterator itr = geom.begin();
+    typename geometry_container::const_iterator end = geom.end();
+
+    for ( ; itr != end; ++itr)
+    {
+        if (type != 0 && itr->type() != type)
+        {
+            collection = true;
+            break;
+        }
+        type = itr->type();
+    }
+    return std::tuple<unsigned,bool>(type, collection);
+}
+
+template <typename OutputIterator, typename Geometry>
+wkt_generator<OutputIterator, Geometry>::wkt_generator(bool single)
+    : wkt_generator::base_type(wkt)
+{
+    boost::spirit::karma::uint_type uint_;
+    boost::spirit::karma::_val_type _val;
+    boost::spirit::karma::_1_type _1;
+    boost::spirit::karma::lit_type lit;
+    boost::spirit::karma::_a_type _a;
+    boost::spirit::karma::_b_type _b;
+    boost::spirit::karma::_c_type _c;
+    boost::spirit::karma::_r1_type _r1;
+    boost::spirit::karma::eps_type eps;
+    boost::spirit::karma::string_type kstring;
+
+    wkt = point | linestring | polygon
+        ;
+
+    point = &uint_(mapnik::geometry_type::types::Point)[_1 = _type(_val)]
+        << kstring[ phoenix::if_ (single) [_1 = "Point("]
+                   .else_[_1 = "("]]
+        << point_coord [_1 = _first(_val)] << lit(')')
+        ;
+
+    linestring = &uint_(mapnik::geometry_type::types::LineString)[_1 = _type(_val)]
+        << kstring[ phoenix::if_ (single) [_1 = "LineString("]
+                   .else_[_1 = "("]]
+        << coords
+        << lit(')')
+        ;
+
+    polygon = &uint_(mapnik::geometry_type::types::Polygon)[_1 = _type(_val)]
+        << kstring[ phoenix::if_ (single) [_1 = "Polygon("]
+                   .else_[_1 = "("]]
+        << coords2
+        << lit("))")
+        ;
+
+    point_coord = &uint_ << coordinate << lit(' ') << coordinate
+        ;
+
+    polygon_coord %= ( &uint_(mapnik::SEG_MOVETO)
+                       << eps[_r1 += 1][_a  = _x(_val)][ _b = _y(_val)]
+                       << kstring[ if_ (_r1 > 1u) [_1 = "),("]
+                                  .else_[_1 = "("]]
+                       |
+                       &uint_(mapnik::SEG_LINETO)
+                       << lit(',') << eps[_a = _x(_val)][_b = _y(_val)]
+        )
+        << coordinate[_1 = _a]
+        << lit(' ')
+        << coordinate[_1 = _b]
+        ;
+
+    coords2 %= *polygon_coord(_a,_b,_c)
+        ;
+
+    coords = point_coord % lit(',')
+        ;
+}
+
+template <typename OutputIterator, typename GeometryContainer>
+wkt_multi_generator<OutputIterator, GeometryContainer>::wkt_multi_generator()
+    : wkt_multi_generator::base_type(wkt)
+{
+    boost::spirit::karma::lit_type lit;
+    boost::spirit::karma::eps_type eps;
+    boost::spirit::karma::_val_type _val;
+    boost::spirit::karma::_1_type _1;
+    boost::spirit::karma::_a_type _a;
+
+    geometry_types.add
+        (mapnik::geometry_type::types::Point,"Point")
+        (mapnik::geometry_type::types::LineString,"LineString")
+        (mapnik::geometry_type::types::Polygon,"Polygon")
+        ;
+
+    wkt =  eps(phoenix::at_c<1>(_a))[_a = _multi_type(_val)]
+        << lit("GeometryCollection(") << geometry << lit(")")
+        | eps(is_multi(_val)) << lit("Multi") << geometry_types[_1 = phoenix::at_c<0>(_a)]
+        << "(" << multi_geometry << ")"
+        |  geometry
+        ;
+
+    geometry =  -(single_geometry % lit(','))
+        ;
+
+    single_geometry = geometry_types[_1 = _type(_val)] << path
+        ;
+
+    multi_geometry = -(path % lit(','))
+        ;
+
+}
+
+}}
diff --git a/include/mapnik/wkt/wkt_grammar.hpp b/include/mapnik/wkt/wkt_grammar.hpp
index e7e986f..ff004fa 100644
--- a/include/mapnik/wkt/wkt_grammar.hpp
+++ b/include/mapnik/wkt/wkt_grammar.hpp
@@ -23,226 +23,101 @@
 #ifndef MAPNIK_WKT_GRAMMAR_HPP
 #define MAPNIK_WKT_GRAMMAR_HPP
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/assert.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
-// spirit::qi
 #include <boost/spirit/include/qi.hpp>
-// spirit::phoenix
 #include <boost/spirit/include/phoenix_function.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_fusion.hpp>
-#include <boost/spirit/include/phoenix_object.hpp>
-#include <boost/spirit/include/phoenix_stl.hpp>
+#pragma GCC diagnostic pop
+
 // mapnik
 #include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/vertex.hpp>
 
 namespace mapnik { namespace wkt {
 
-    using namespace boost::spirit;
-    using namespace boost::fusion;
-    using namespace boost::phoenix;
+using namespace boost::spirit;
 
-    struct push_vertex
+struct push_vertex
+{
+    template <typename T>
+    struct result
     {
-        template <typename T0,typename T1, typename T2, typename T3>
-        struct result
-        {
-            typedef void type;
-        };
-
-        template <typename T0,typename T1, typename T2, typename T3>
-        void operator() (T0 c, T1 path, T2 x, T3 y) const
-        {
-            BOOST_ASSERT( path!=0 );
-            path->push_vertex(x,y,c);
-        }
+        using type = void;
     };
 
-    struct close_path
+    template <typename T0,typename T1, typename T2, typename T3>
+    void operator() (T0 c, T1 path, T2 x, T3 y) const
     {
-        template <typename T>
-        struct result
-        {
-            typedef void type;
-        };
-
-        template <typename T>
-        void operator() (T path) const
-        {
-            BOOST_ASSERT( path!=0 );
-            path->close_path();
-        }
-    };
+        BOOST_ASSERT( path!=0 );
+        path->push_vertex(x,y,c);
+    }
+};
 
-    struct cleanup
+struct close_path
+{
+    template <typename T>
+    struct result
     {
-        template <typename T0>
-        struct result
-        {
-            typedef void type;
-        };
-
-        template <typename T0>
-        void operator() (T0 & path) const
-        {
-            if (path)  delete path,path=0;
-        }
+        using type = void;
     };
 
-    template <typename Iterator>
-    struct wkt_grammar : qi::grammar<Iterator,  boost::ptr_vector<mapnik::geometry_type>() , ascii::space_type>
+    template <typename T>
+    void operator() (T path) const
     {
-        wkt_grammar()
-            : wkt_grammar::base_type(geometry_tagged_text)
-        {
-            using qi::no_case;
-            using qi::_1;
-            using qi::_2;
-            using boost::phoenix::push_back;
-
-            geometry_tagged_text = point_tagged_text
-                | linestring_tagged_text
-                | polygon_tagged_text
-                | multipoint_tagged_text
-                | multilinestring_tagged_text
-                | multipolygon_tagged_text
-                ;
-
-            // <point tagged text> ::= point <point text>
-            point_tagged_text = no_case[lit("POINT")] [ _a = new_<geometry_type>(Point) ]
-                >> ( point_text(_a) [push_back(_val,_a)]
-                     | eps[cleanup_(_a)][_pass = false])
-                ;
-
-            // <point text> ::= <empty set> | <left paren> <point> <right paren>
-            point_text = (lit("(") >> point(SEG_MOVETO,_r1) >> lit(')'))
-                | empty_set
-                ;
-
-            // <linestring tagged text> ::= linestring <linestring text>
-            linestring_tagged_text = no_case[lit("LINESTRING")] [ _a = new_<geometry_type>(LineString) ]
-                >> (linestring_text(_a)[push_back(_val,_a)]
-                    | eps[cleanup_(_a)][_pass = false])
-                ;
-
-            // <linestring text> ::= <empty set> | <left paren> <point> {<comma> <point>}* <right paren>
-            linestring_text = points(_r1) | empty_set
-                ;
-
-            // <polygon tagged text> ::= polygon <polygon text>
-            polygon_tagged_text = no_case[lit("POLYGON")] [ _a = new_<geometry_type>(Polygon) ]
-                >> ( polygon_text(_a)[push_back(_val,_a)]
-                     | eps[cleanup_(_a)][_pass = false])
-                ;
-
-            // <polygon text> ::= <empty set> | <left paren> <linestring text> {<comma> <linestring text>}* <right paren>
-            polygon_text = (lit('(') >> linestring_text(_r1)[close_path_(_r1)] % lit(',') >> lit(')')) | empty_set;
-
-
-            //<multipoint tagged text> ::= multipoint <multipoint text>
-            multipoint_tagged_text = no_case[lit("MULTIPOINT")]
-                >>  multipoint_text
-                ;
-
-            // <multipoint text> ::= <empty set> | <left paren> <point text> {<comma> <point text>}* <right paren>
-            multipoint_text = (lit('(')
-                               >> ((eps[_a = new_<geometry_type>(Point)]
-                                    >> (point_text(_a) | empty_set) [push_back(_val,_a)]
-                                    | eps[cleanup_(_a)][_pass = false]) % lit(','))
-                               >> lit(')')) | empty_set
-                ;
-
-            // <multilinestring tagged text> ::= multilinestring <multilinestring text>
-            multilinestring_tagged_text = no_case[lit("MULTILINESTRING")]
-                >> multilinestring_text ;
-
-            // <multilinestring text> ::= <empty set> | <left paren> <linestring text> {<comma> <linestring text>}* <right paren>
-            multilinestring_text = (lit('(')
-                                    >> ((eps[_a = new_<geometry_type>(LineString)]
-                                         >> ( points(_a)[push_back(_val,_a)]
-                                              | eps[cleanup_(_a)][_pass = false]))
-                                        % lit(','))
-                                    >> lit(')')) | empty_set;
-
-            // <multipolygon tagged text> ::= multipolygon <multipolygon text>
-            multipolygon_tagged_text = no_case[lit("MULTIPOLYGON")]
-                >> multipolygon_text ;
-
-            // <multipolygon text> ::= <empty set> | <left paren> <polygon text> {<comma> <polygon text>}* <right paren>
-
-            multipolygon_text = (lit('(')
-                                 >> ((eps[_a = new_<geometry_type>(Polygon)]
-                                      >> ( polygon_text(_a)[push_back(_val,_a)]
-                                           | eps[cleanup_(_a)][_pass = false]))
-                                     % lit(','))
-                                 >> lit(')')) | empty_set;
-
-            // points
-            points = lit('(')[_a = SEG_MOVETO] >> point (_a,_r1) % lit(',') [_a = SEG_LINETO]  >> lit(')');
-            // point
-            point = (double_ >> double_) [push_vertex_(_r1,_r2,_1,_2)];
-
-            // <empty set>
-            empty_set = no_case[lit("EMPTY")];
-
-        }
-
-        // start
-        qi::rule<Iterator,boost::ptr_vector<geometry_type>(),ascii::space_type> geometry_tagged_text;
+        BOOST_ASSERT( path!=0 );
+        path->close_path();
+    }
+};
 
-        qi::rule<Iterator,qi::locals<geometry_type*>,boost::ptr_vector<geometry_type>(),ascii::space_type> point_tagged_text;
-        qi::rule<Iterator,qi::locals<geometry_type*>,boost::ptr_vector<geometry_type>(),ascii::space_type> linestring_tagged_text;
-        qi::rule<Iterator,qi::locals<geometry_type*>,boost::ptr_vector<geometry_type>(),ascii::space_type> polygon_tagged_text;
-        qi::rule<Iterator,boost::ptr_vector<geometry_type>(),ascii::space_type> multipoint_tagged_text;
-        qi::rule<Iterator,boost::ptr_vector<geometry_type>(),ascii::space_type> multilinestring_tagged_text;
-        qi::rule<Iterator,boost::ptr_vector<geometry_type>(),ascii::space_type> multipolygon_tagged_text;
-        //
-        qi::rule<Iterator,void(geometry_type*),ascii::space_type> point_text;
-        qi::rule<Iterator,void(geometry_type*),ascii::space_type> linestring_text;
-        qi::rule<Iterator,void(geometry_type*),ascii::space_type> polygon_text;
-        qi::rule<Iterator, qi::locals<geometry_type*>, boost::ptr_vector<geometry_type>(),ascii::space_type> multipoint_text;
-        qi::rule<Iterator, qi::locals<geometry_type*>, boost::ptr_vector<geometry_type>(),ascii::space_type> multilinestring_text;
-        qi::rule<Iterator, qi::locals<geometry_type*>, boost::ptr_vector<geometry_type>(),ascii::space_type> multipolygon_text;
-        //
-        qi::rule<Iterator,void(CommandType,geometry_type*),ascii::space_type> point;
-        qi::rule<Iterator,qi::locals<CommandType>,void(geometry_type*),ascii::space_type> points;
-        qi::rule<Iterator,ascii::space_type> empty_set;
-        boost::phoenix::function<push_vertex> push_vertex_;
-        boost::phoenix::function<close_path> close_path_;
-        boost::phoenix::function<cleanup> cleanup_;
+struct cleanup
+{
+    template <typename T0>
+    struct result
+    {
+        using type = void;
     };
 
-
-template <typename Iterator>
-struct wkt_collection_grammar : qi::grammar<Iterator, boost::ptr_vector<mapnik::geometry_type>(), ascii::space_type>
-{
-    wkt_collection_grammar()
-        :  wkt_collection_grammar::base_type(start)
+    template <typename T0>
+    void operator() (T0 & path) const
     {
-        using qi::_1;
-        using qi::_val;
-        using qi::no_case;
-        using boost::phoenix::push_back;
-        start = wkt | no_case[lit("GEOMETRYCOLLECTION")]
-            >> (lit("(") >> wkt % lit(",") >> lit(")"));
+        if (path)  delete path,path=0;
     }
-
-    qi::rule<Iterator,boost::ptr_vector<mapnik::geometry_type>(),ascii::space_type> start;
-    wkt_grammar<Iterator> wkt;
 };
 
 template <typename Iterator>
-struct wkt_stream_grammar : qi::grammar<Iterator, boost::ptr_vector<mapnik::geometry_type>(), ascii::space_type>
+struct wkt_grammar : qi::grammar<Iterator,  mapnik::geometry_container() , ascii::space_type>
 {
-    wkt_stream_grammar()
-        :  wkt_stream_grammar::base_type(start)
-    {
-        start = *wkt_collection;
-    }
+    wkt_grammar();
+    qi::rule<Iterator,mapnik::geometry_container(),ascii::space_type> geometry_tagged_text;
+    qi::rule<Iterator,qi::locals<geometry_type*>,mapnik::geometry_container(),ascii::space_type> point_tagged_text;
+    qi::rule<Iterator,qi::locals<geometry_type*>,mapnik::geometry_container(),ascii::space_type> linestring_tagged_text;
+    qi::rule<Iterator,qi::locals<geometry_type*>,mapnik::geometry_container(),ascii::space_type> polygon_tagged_text;
+    qi::rule<Iterator,mapnik::geometry_container(),ascii::space_type> multipoint_tagged_text;
+    qi::rule<Iterator,mapnik::geometry_container(),ascii::space_type> multilinestring_tagged_text;
+    qi::rule<Iterator,mapnik::geometry_container(),ascii::space_type> multipolygon_tagged_text;
+    qi::rule<Iterator,void(geometry_type*),ascii::space_type> point_text;
+    qi::rule<Iterator,void(geometry_type*),ascii::space_type> linestring_text;
+    qi::rule<Iterator,void(geometry_type*),ascii::space_type> polygon_text;
+    qi::rule<Iterator, qi::locals<geometry_type*>, mapnik::geometry_container(),ascii::space_type> multipoint_text;
+    qi::rule<Iterator, qi::locals<geometry_type*>, mapnik::geometry_container(),ascii::space_type> multilinestring_text;
+    qi::rule<Iterator, qi::locals<geometry_type*>, mapnik::geometry_container(),ascii::space_type> multipolygon_text;
+    qi::rule<Iterator,void(CommandType,geometry_type*),ascii::space_type> point;
+    qi::rule<Iterator,qi::locals<CommandType>,void(geometry_type*),ascii::space_type> points;
+    qi::rule<Iterator,ascii::space_type> empty_set;
+    boost::phoenix::function<push_vertex> push_vertex_;
+    boost::phoenix::function<close_path> close_path_;
+    boost::phoenix::function<cleanup> cleanup_;
+};
 
-    qi::rule<Iterator,boost::ptr_vector<mapnik::geometry_type>(),ascii::space_type> start;
-    wkt_collection_grammar<Iterator> wkt_collection;
+template <typename Iterator>
+struct wkt_collection_grammar : qi::grammar<Iterator, mapnik::geometry_container(), ascii::space_type>
+{
+    wkt_collection_grammar();
+    qi::rule<Iterator,mapnik::geometry_container(),ascii::space_type> start;
+    wkt_grammar<Iterator> wkt;
 };
 
 }}
diff --git a/include/mapnik/wkt/wkt_grammar_impl.hpp b/include/mapnik/wkt/wkt_grammar_impl.hpp
new file mode 100644
index 0000000..8cf6f7f
--- /dev/null
+++ b/include/mapnik/wkt/wkt_grammar_impl.hpp
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/config.hpp>
+#include <mapnik/wkt/wkt_grammar.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_fusion.hpp>
+#include <boost/spirit/include/phoenix_object.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+
+namespace mapnik { namespace wkt {
+
+using namespace boost::spirit;
+
+template <typename Iterator>
+wkt_grammar<Iterator>::wkt_grammar()
+    : wkt_grammar::base_type(geometry_tagged_text)
+{
+    qi::_r1_type _r1;
+    qi::_r2_type _r2;
+    qi::_pass_type _pass;
+    qi::eps_type eps;
+    qi::_val_type _val;
+    qi::lit_type lit;
+    qi::no_case_type no_case;
+    qi::double_type double_;
+    qi::_1_type _1;
+    qi::_2_type _2;
+    qi::_a_type _a;
+    using boost::phoenix::push_back;
+    using boost::phoenix::new_;
+
+    geometry_tagged_text = point_tagged_text
+        | linestring_tagged_text
+        | polygon_tagged_text
+        | multipoint_tagged_text
+        | multilinestring_tagged_text
+        | multipolygon_tagged_text
+        ;
+
+    // <point tagged text> ::= point <point text>
+    point_tagged_text = no_case[lit("POINT")] [ _a = new_<geometry_type>(geometry_type::types::Point) ]
+        >> ( point_text(_a) [push_back(_val,_a)]
+             | eps[cleanup_(_a)][_pass = false])
+        ;
+
+    // <point text> ::= <empty set> | <left paren> <point> <right paren>
+    point_text = (lit("(") >> point(SEG_MOVETO,_r1) >> lit(')'))
+        | empty_set
+        ;
+
+    // <linestring tagged text> ::= linestring <linestring text>
+    linestring_tagged_text = no_case[lit("LINESTRING")] [ _a = new_<geometry_type>(geometry_type::types::LineString) ]
+        >> (linestring_text(_a)[push_back(_val,_a)]
+            | eps[cleanup_(_a)][_pass = false])
+        ;
+
+    // <linestring text> ::= <empty set> | <left paren> <point> {<comma> <point>}* <right paren>
+    linestring_text = points(_r1) | empty_set
+        ;
+
+    // <polygon tagged text> ::= polygon <polygon text>
+    polygon_tagged_text = no_case[lit("POLYGON")] [ _a = new_<geometry_type>(geometry_type::types::Polygon) ]
+        >> ( polygon_text(_a)[push_back(_val,_a)]
+             | eps[cleanup_(_a)][_pass = false])
+        ;
+
+    // <polygon text> ::= <empty set> | <left paren> <linestring text> {<comma> <linestring text>}* <right paren>
+    polygon_text = (lit('(') >> linestring_text(_r1)[close_path_(_r1)] % lit(',') >> lit(')')) | empty_set;
+
+
+    //<multipoint tagged text> ::= multipoint <multipoint text>
+    multipoint_tagged_text = no_case[lit("MULTIPOINT")]
+        >>  multipoint_text
+        ;
+
+    // <multipoint text> ::= <empty set> | <left paren> <point text> {<comma> <point text>}* <right paren>
+    multipoint_text = (lit('(')
+                       >> ((eps[_a = new_<geometry_type>(geometry_type::types::Point)]
+                            >> (point_text(_a) | empty_set) [push_back(_val,_a)]
+                            | eps[cleanup_(_a)][_pass = false]) % lit(','))
+                       >> lit(')')) | empty_set
+        ;
+
+    // <multilinestring tagged text> ::= multilinestring <multilinestring text>
+    multilinestring_tagged_text = no_case[lit("MULTILINESTRING")]
+        >> multilinestring_text ;
+
+    // <multilinestring text> ::= <empty set> | <left paren> <linestring text> {<comma> <linestring text>}* <right paren>
+    multilinestring_text = (lit('(')
+                            >> ((eps[_a = new_<geometry_type>(geometry_type::types::LineString)]
+                                 >> ( points(_a)[push_back(_val,_a)]
+                                      | eps[cleanup_(_a)][_pass = false]))
+                                % lit(','))
+                            >> lit(')')) | empty_set;
+
+    // <multipolygon tagged text> ::= multipolygon <multipolygon text>
+    multipolygon_tagged_text = no_case[lit("MULTIPOLYGON")]
+        >> multipolygon_text ;
+
+    // <multipolygon text> ::= <empty set> | <left paren> <polygon text> {<comma> <polygon text>}* <right paren>
+
+    multipolygon_text = (lit('(')
+                         >> ((eps[_a = new_<geometry_type>(geometry_type::types::Polygon)]
+                              >> ( polygon_text(_a)[push_back(_val,_a)]
+                                   | eps[cleanup_(_a)][_pass = false]))
+                             % lit(','))
+                         >> lit(')')) | empty_set;
+
+    // points
+    points = lit('(')[_a = SEG_MOVETO] >> point (_a,_r1) % lit(',') [_a = SEG_LINETO]  >> lit(')');
+    // point
+    point = (double_ >> double_) [push_vertex_(_r1,_r2,_1,_2)];
+
+    // <empty set>
+    empty_set = no_case[lit("EMPTY")];
+
+}
+
+template <typename Iterator>
+wkt_collection_grammar<Iterator>::wkt_collection_grammar()
+    :  wkt_collection_grammar::base_type(start)
+{
+    qi::lit_type lit;
+    qi::no_case_type no_case;
+    start = wkt | no_case[lit("GEOMETRYCOLLECTION")]
+        >> (lit("(") >> wkt % lit(",") >> lit(")"));
+}
+
+}}
diff --git a/include/mapnik/xml_attribute_cast.hpp b/include/mapnik/xml_attribute_cast.hpp
index 20a411c..3718853 100644
--- a/include/mapnik/xml_attribute_cast.hpp
+++ b/include/mapnik/xml_attribute_cast.hpp
@@ -28,15 +28,21 @@
 #include <mapnik/xml_tree.hpp>
 #include <mapnik/enumeration.hpp>
 #include <mapnik/boolean.hpp>
+#include <mapnik/color.hpp>
 #include <mapnik/color_factory.hpp>
 #include <mapnik/expression.hpp>
+#include <mapnik/util/conversions.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/text/font_feature_settings.hpp>
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/format.hpp>
 
 // stl
 #include <string>
+#include <map>
+#include <typeinfo>
+#include <utility>
 #include <stdexcept>
 
 namespace mapnik { namespace detail {
@@ -44,23 +50,24 @@ namespace mapnik { namespace detail {
 template <typename T>
 struct do_xml_attribute_cast
 {
-    static inline boost::optional<T> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<T> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& /*source*/)
     {
-        std::string err_msg = (boost::format("No conversion from std::string to %s") % typeid(T).name()).str();
+        std::string err_msg("No conversion from std::string to");
+        err_msg += std::string(typeid(T).name());
         throw std::runtime_error(err_msg);
     }
 };
 
-// specialization for mapnik::boolean
+// specialization for mapnik::boolean_type
 template <>
-struct do_xml_attribute_cast<mapnik::boolean>
+struct do_xml_attribute_cast<mapnik::boolean_type>
 {
-    static inline boost::optional<mapnik::boolean> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<mapnik::boolean_type> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
         bool result;
         if (mapnik::util::string2bool(source, result))
-            return boost::optional<mapnik::boolean>(result);
-        return boost::optional<mapnik::boolean>();
+            return boost::optional<mapnik::boolean_type>(result);
+        return boost::optional<mapnik::boolean_type>();
     }
 };
 
@@ -68,7 +75,7 @@ struct do_xml_attribute_cast<mapnik::boolean>
 template <>
 struct do_xml_attribute_cast<int>
 {
-    static inline boost::optional<int> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<int> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
         int result;
         if (mapnik::util::string2int(source, result))
@@ -82,7 +89,7 @@ struct do_xml_attribute_cast<int>
 template <>
 struct do_xml_attribute_cast<long long>
 {
-    static inline boost::optional<long long> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<long long> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
         int result;
         if (mapnik::util::string2int(source, result))
@@ -98,7 +105,7 @@ struct do_xml_attribute_cast<long long>
 template <>
 struct do_xml_attribute_cast<unsigned>
 {
-    static inline boost::optional<unsigned> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<unsigned> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
         int result;
         if (mapnik::util::string2int(source, result))
@@ -111,7 +118,7 @@ struct do_xml_attribute_cast<unsigned>
 template <>
 struct do_xml_attribute_cast<float>
 {
-    static inline boost::optional<float> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<float> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
         float result;
         if (mapnik::util::string2float(source, result))
@@ -124,7 +131,7 @@ struct do_xml_attribute_cast<float>
 template <>
 struct do_xml_attribute_cast<double>
 {
-    static inline boost::optional<double> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<double> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
         double result;
         if (mapnik::util::string2double(source, result))
@@ -137,9 +144,9 @@ struct do_xml_attribute_cast<double>
 template <typename T, int MAX>
 struct do_xml_attribute_cast<mapnik::enumeration<T,MAX> >
 {
-    static inline boost::optional<mapnik::enumeration<T,MAX> > xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<mapnik::enumeration<T,MAX> > xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
-        typedef typename boost::optional<mapnik::enumeration<T,MAX> > result_type;
+        using result_type = typename boost::optional<mapnik::enumeration<T,MAX> >;
         try
         {
             mapnik::enumeration<T,MAX> e;
@@ -160,7 +167,7 @@ struct do_xml_attribute_cast<mapnik::color>
 {
     static inline boost::optional<mapnik::color> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
     {
-        return parse_color(source, tree.color_grammar);
+        return parse_color(source);
     }
 };
 
@@ -168,7 +175,7 @@ struct do_xml_attribute_cast<mapnik::color>
 template <>
 struct do_xml_attribute_cast<std::string>
 {
-    static inline boost::optional<std::string> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    static inline boost::optional<std::string> xml_attribute_cast_impl(xml_tree const& /*tree*/, std::string const& source)
     {
         return boost::optional<std::string>(source);
     }
@@ -180,7 +187,27 @@ struct do_xml_attribute_cast<mapnik::expression_ptr>
 {
     static inline boost::optional<mapnik::expression_ptr> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
     {
-        return parse_expression(source, tree.expr_grammar);
+        std::map<std::string,mapnik::expression_ptr>::const_iterator itr = tree.expr_cache_.find(source);
+        if (itr != tree.expr_cache_.end())
+        {
+            return itr->second;
+        }
+        else
+        {
+            mapnik::expression_ptr expr = parse_expression(source);
+            tree.expr_cache_.emplace(source,expr);
+            return expr;
+        }
+    }
+};
+
+// specialization for mapnik::font_feature_settings
+template <>
+struct do_xml_attribute_cast<mapnik::font_feature_settings>
+{
+    static inline boost::optional<mapnik::font_feature_settings> xml_attribute_cast_impl(xml_tree const& tree, std::string const& source)
+    {
+        return mapnik::font_feature_settings(source);
     }
 };
 
diff --git a/include/mapnik/xml_node.hpp b/include/mapnik/xml_node.hpp
index ab352ce..59498e0 100644
--- a/include/mapnik/xml_node.hpp
+++ b/include/mapnik/xml_node.hpp
@@ -23,10 +23,6 @@
 #ifndef MAPNIK_XML_NODE_H
 #define MAPNIK_XML_NODE_H
 
-//mapnik
-#include <mapnik/boolean.hpp>
-
-
 //boost
 #include <boost/optional.hpp>
 
@@ -43,7 +39,7 @@ class xml_tree;
 class xml_attribute
 {
 public:
-    xml_attribute(std::string const& value);
+    xml_attribute(const char * value_);
     std::string value;
     mutable bool processed;
 };
@@ -56,6 +52,8 @@ public:
     ~node_not_found() throw ();
 private:
     std::string node_name_;
+protected:
+    mutable std::string msg_;
 };
 
 class attribute_not_found: public std::exception
@@ -67,6 +65,8 @@ public:
 private:
     std::string node_name_;
     std::string attribute_name_;
+protected:
+    mutable std::string msg_;
 };
 
 class more_than_one_child: public std::exception
@@ -77,14 +77,16 @@ public:
     ~more_than_one_child() throw ();
 private:
     std::string node_name_;
+protected:
+    mutable std::string msg_;
 };
 
 class xml_node
 {
 public:
-    typedef std::list<xml_node>::const_iterator const_iterator;
-    typedef std::map<std::string, xml_attribute> attribute_map;
-    xml_node(xml_tree &tree, std::string const& name, unsigned line=0, bool is_text = false);
+    using const_iterator = std::list<xml_node>::const_iterator;
+    using attribute_map = std::map<std::string, xml_attribute>;
+    xml_node(xml_tree &tree, std::string && name, unsigned line=0, bool is_text = false);
 
     std::string const& name() const;
     std::string const& text() const;
@@ -92,16 +94,20 @@ public:
     bool is_text() const;
     bool is(std::string const& name) const;
 
-    xml_node &add_child(std::string const& name, unsigned line=0, bool is_text = false);
-    void add_attribute(std::string const& name, std::string const& value);
+    xml_node & add_child(const char * name, unsigned line=0, bool is_text = false);
+    void add_attribute(const char * name, const char * value);
     attribute_map const& get_attributes() const;
 
+    bool ignore() const;
+    void set_ignore(bool ignore) const;
+
     bool processed() const;
     void set_processed(bool processed) const;
 
     unsigned line() const;
     std::string line_to_string() const;
 
+    std::size_t size() const;
     const_iterator begin() const;
     const_iterator end() const;
 
@@ -109,32 +115,31 @@ public:
     xml_node const& get_child(std::string const& name) const;
     xml_node const* get_opt_child(std::string const& name) const;
     bool has_child(std::string const& name) const;
+    bool has_attribute(std::string const& name) const;
 
     template <typename T>
     boost::optional<T> get_opt_attr(std::string const& name) const;
 
     template <typename T>
-    T get_attr(std::string const& name, T const& default_value) const;
+    T get_attr(std::string const& name, T const& default_opt_value) const;
     template <typename T>
     T get_attr(std::string const& name) const;
 
-    std::string get_text() const;
+    std::string const& get_text() const;
 
-    xml_tree const& get_tree() const
-    {
-        return tree_;
-    }
+    inline xml_tree const& get_tree() const { return tree_; }
 
     template <typename T>
     T get_value() const;
 private:
-    xml_tree &tree_;
+    xml_tree & tree_;
     std::string name_;
     std::list<xml_node> children_;
     attribute_map attributes_;
     bool is_text_;
     unsigned line_;
     mutable bool processed_;
+    mutable bool ignore_;
     static std::string xml_text;
 };
 
diff --git a/include/mapnik/xml_tree.hpp b/include/mapnik/xml_tree.hpp
index 966e034..68d980b 100644
--- a/include/mapnik/xml_tree.hpp
+++ b/include/mapnik/xml_tree.hpp
@@ -25,42 +25,27 @@
 
 // mapnik
 #include <mapnik/xml_node.hpp>
-#include <mapnik/expression_grammar.hpp>
-#include <mapnik/path_expression_grammar.hpp>
-#include <mapnik/transform_expression_grammar.hpp>
-#include <mapnik/image_filter_grammar.hpp>
-#include <mapnik/image_filter.hpp>
-#include <mapnik/css_color_grammar.hpp>
-#include <mapnik/unicode.hpp>
-
-// boost
-#include <boost/format.hpp>
+#include <mapnik/expression.hpp>
 
 //stl
 #include <string>
 
-
 namespace mapnik
 {
+
 class xml_tree
 {
 public:
     xml_tree(std::string const& encoding="utf8");
-    void set_filename(std::string fn);
+    void set_filename(std::string const& fn);
     std::string const& filename() const;
     xml_node &root();
     xml_node const& root() const;
 private:
     xml_node node_;
     std::string file_;
-    transcoder tr_;
 public:
-    mapnik::css_color_grammar<std::string::const_iterator> color_grammar;
-    mapnik::expression_grammar<std::string::const_iterator> expr_grammar;
-    path_expression_grammar<std::string::const_iterator> path_expr_grammar;
-    transform_expression_grammar<std::string::const_iterator> transform_expr_grammar;
-    image_filter_grammar<std::string::const_iterator,std::vector<filter::filter_type> > image_filters_grammar;
-
+    mutable std::map<std::string,mapnik::expression_ptr> expr_cache_;
 };
 
 } //ns mapnik
diff --git a/localize.sh b/localize.sh
new file mode 100755
index 0000000..4f227e7
--- /dev/null
+++ b/localize.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+UNAME=$(uname -s)
+export CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+if [ ${UNAME} = 'Darwin' ]; then
+    export DYLD_LIBRARY_PATH="${CURRENT_DIR}/src/":${DYLD_LIBRARY_PATH}
+else
+    export LD_LIBRARY_PATH="${CURRENT_DIR}/src/":${LD_LIBRARY_PATH}
+fi
+export PYTHONPATH="${CURRENT_DIR}/bindings/python/":$PYTHONPATH
+export MAPNIK_FONT_DIRECTORY="${CURRENT_DIR}/fonts/dejavu-fonts-ttf-2.34/ttf/"
+export MAPNIK_INPUT_PLUGINS_DIRECTORY="${CURRENT_DIR}/plugins/input/"
+export PATH="${CURRENT_DIR}/utils/mapnik-config":${PATH}
+export PATH="${CURRENT_DIR}/utils/nik2img":${PATH}
\ No newline at end of file
diff --git a/plugins/input/csv/build.py b/plugins/input/csv/build.py
index 001537b..174deda 100644
--- a/plugins/input/csv/build.py
+++ b/plugins/input/csv/build.py
@@ -21,53 +21,46 @@
 
 Import ('env')
 
-can_build = False
+Import ('plugin_base')
 
-if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
-    boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
-    if boost_version_from_header >= 47:
-        can_build = True
+PLUGIN_NAME = 'csv'
 
-if not can_build:
-    print 'WARNING: skipping building the optional geojson datasource plugin which requires boost >= 1.47'
-else:
-    Import ('plugin_base')
+plugin_env = plugin_base.Clone()
 
-    PLUGIN_NAME = 'csv'
+plugin_sources = Split(
+  """
+  %(PLUGIN_NAME)s_datasource.cpp
+  """ % locals()
+)
 
-    plugin_env = plugin_base.Clone()
+# Link Library to Dependencies
+libraries = []
+libraries.append('boost_system%s' % env['BOOST_APPEND'])
+libraries.append(env['ICU_LIB_NAME'])
+libraries.append('mapnik-json')
+libraries.append('mapnik-wkt')
 
-    plugin_sources = Split(
-      """
-      %(PLUGIN_NAME)s_datasource.cpp
-      """ % locals()
-    )
+if env['PLUGIN_LINKING'] == 'shared':
+    libraries.append(env['MAPNIK_NAME'])
 
-    # Link Library to Dependencies
-    libraries = []
-    libraries.append('boost_system%s' % env['BOOST_APPEND'])
-    libraries.append(env['ICU_LIB_NAME'])
+    TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
+                                      SHLIBPREFIX='',
+                                      SHLIBSUFFIX='.input',
+                                      source=plugin_sources,
+                                      LIBS=libraries)
 
-    if env['PLUGIN_LINKING'] == 'shared':
-        libraries.append('mapnik')
+    # if the plugin links to libmapnik ensure it is built first
+    Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
+    Depends(TARGET, env.subst('../../../src/json/libmapnik-json${LIBSUFFIX}'))
+    Depends(TARGET, env.subst('../../../src/wkt/libmapnik-wkt${LIBSUFFIX}'))
 
-        TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
-                                          SHLIBPREFIX='',
-                                          SHLIBSUFFIX='.input',
-                                          source=plugin_sources,
-                                          LIBS=libraries,
-                                          LINKFLAGS=env.get('CUSTOM_LDFLAGS'))
+    if 'uninstall' not in COMMAND_LINE_TARGETS:
+        env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
+        env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
 
-        # if the plugin links to libmapnik ensure it is built first
-        Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
+plugin_obj = {
+  'LIBS': libraries,
+  'SOURCES': plugin_sources,
+}
 
-        if 'uninstall' not in COMMAND_LINE_TARGETS:
-            env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
-            env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
-
-    plugin_obj = {
-      'LIBS': libraries,
-      'SOURCES': plugin_sources,
-    }
-
-    Return('plugin_obj')
+Return('plugin_obj')
diff --git a/plugins/input/csv/csv_datasource.cpp b/plugins/input/csv/csv_datasource.cpp
index e1478cd..76b5770 100644
--- a/plugins/input/csv/csv_datasource.cpp
+++ b/plugins/input/csv/csv_datasource.cpp
@@ -24,7 +24,6 @@
 #include "csv_utils.hpp"
 
 // boost
-#include <boost/make_shared.hpp>
 #include <boost/tokenizer.hpp>
 #include <boost/algorithm/string.hpp>
 
@@ -58,22 +57,23 @@ using mapnik::parameters;
 DATASOURCE_PLUGIN(csv_datasource)
 
 csv_datasource::csv_datasource(parameters const& params)
-    : datasource(params),
-      desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding", "utf-8")),
-      extent_(),
-      filename_(),
-      inline_string_(),
-      file_length_(0),
-      row_limit_(*params.get<mapnik::value_integer>("row_limit", 0)),
-      features_(),
-      escape_(*params.get<std::string>("escape", "")),
-      separator_(*params.get<std::string>("separator", "")),
-      quote_(*params.get<std::string>("quote", "")),
-      headers_(),
-      manual_headers_(mapnik::util::trim_copy(*params.get<std::string>("headers", ""))),
-      strict_(*params.get<mapnik::boolean>("strict", false)),
-      filesize_max_(*params.get<double>("filesize_max", 20.0)),  // MB
-      ctx_(boost::make_shared<mapnik::context_type>())
+  : datasource(params),
+    desc_(csv_datasource::name(), *params.get<std::string>("encoding", "utf-8")),
+    extent_(),
+    filename_(),
+    inline_string_(),
+    file_length_(0),
+    row_limit_(*params.get<mapnik::value_integer>("row_limit", 0)),
+    features_(),
+    escape_(*params.get<std::string>("escape", "")),
+    separator_(*params.get<std::string>("separator", "")),
+    quote_(*params.get<std::string>("quote", "")),
+    headers_(),
+    manual_headers_(mapnik::util::trim_copy(*params.get<std::string>("headers", ""))),
+    strict_(*params.get<mapnik::boolean_type>("strict", false)),
+    filesize_max_(*params.get<double>("filesize_max", 20.0)),  // MB
+    ctx_(std::make_shared<mapnik::context_type>()),
+    extent_initialized_(false)
 {
     /* TODO:
        general:
@@ -97,6 +97,12 @@ csv_datasource::csv_datasource(parameters const& params)
        http://boost-spirit.com/home/articles/qi-example/tracking-the-input-position-while-parsing/
     */
 
+    boost::optional<std::string> ext = params.get<std::string>("extent");
+    if (ext && !ext->empty())
+    {
+        extent_initialized_ = extent_.from_string(*ext);
+    }
+
     boost::optional<std::string> inline_string = params.get<std::string>("inline");
     if (inline_string)
     {
@@ -233,7 +239,7 @@ void csv_datasource::parse_csv(T & stream,
     // set back to start
     stream.seekg(0, std::ios::beg);
 
-    typedef boost::escaped_list_separator<char> escape_type;
+    using escape_type = boost::escaped_list_separator<char>;
 
     std::string esc = mapnik::util::trim_copy(escape);
     if (esc.empty()) esc = "\\";
@@ -257,7 +263,7 @@ void csv_datasource::parse_csv(T & stream,
         throw mapnik::datasource_exception(s);
     }
 
-    typedef boost::tokenizer< escape_type > Tokenizer;
+    using Tokenizer = boost::tokenizer< escape_type >;
 
     int line_number(1);
     bool has_wkt_field = false;
@@ -407,7 +413,8 @@ void csv_datasource::parse_csv(T & stream,
     }
 
     mapnik::value_integer feature_count(0);
-    bool extent_initialized = false;
+    bool extent_started = false;
+
     std::size_t num_headers = headers_.size();
 
     for (std::size_t i = 0; i < headers_.size(); ++i)
@@ -416,8 +423,6 @@ void csv_datasource::parse_csv(T & stream,
     }
 
     mapnik::transcoder tr(desc_.get_encoding());
-    mapnik::wkt_parser parse_wkt;
-    mapnik::json::geometry_parser<std::string::const_iterator> parse_json;
 
     // handle rare case of a single line of data and user-provided headers
     // where a lack of a newline will mean that std::getline returns false
@@ -470,16 +475,16 @@ void csv_datasource::parse_csv(T & stream,
             {
                 std::ostringstream s;
                 s << "CSV Plugin: # of columns("
-                << num_fields << ") > # of headers("
-                << num_headers << ") parsed for row " << line_number << "\n";
+                  << num_fields << ") > # of headers("
+                  << num_headers << ") parsed for row " << line_number << "\n";
                 throw mapnik::datasource_exception(s.str());
             }
             else if (num_fields < num_headers)
             {
                 std::ostringstream s;
                 s << "CSV Plugin: # of headers("
-                << num_headers << ") > # of columns("
-                << num_fields << ") parsed for row " << line_number << "\n";
+                  << num_headers << ") > # of columns("
+                  << num_fields << ") parsed for row " << line_number << "\n";
                 if (strict_)
                 {
                     throw mapnik::datasource_exception(s.str());
@@ -536,7 +541,7 @@ void csv_datasource::parse_csv(T & stream,
                             break;
                         }
 
-                        if (parse_wkt.parse(value, feature->paths()))
+                        if (mapnik::from_wkt(value, feature->paths()))
                         {
                             parsed_wkt = true;
                         }
@@ -571,7 +576,7 @@ void csv_datasource::parse_csv(T & stream,
                         {
                             break;
                         }
-                        if (parse_json.parse(value.begin(),value.end(), feature->paths()))
+                        if (mapnik::json::from_geojson(value, feature->paths()))
                         {
                             parsed_json = true;
                         }
@@ -663,12 +668,14 @@ void csv_datasource::parse_csv(T & stream,
                 // now, add attributes, skipping any WKT or JSON fields
                 if ((has_wkt_field) && (i == wkt_idx)) continue;
                 if ((has_json_field) && (i == json_idx)) continue;
-                /* First we detect likely strings, then try parsing likely numbers,
-                   finally falling back to string type
-                   * We intentionally do not try to detect boolean or null types
-                   since they are not common in csv
-                   * Likely strings are either empty values, very long values
-                   or value with leading zeros like 001 (which are not safe
+                /* First we detect likely strings,
+                   then try parsing likely numbers,
+                   then try converting to bool,
+                   finally falling back to string type.
+                   An empty string or a string of "null" will be parsed
+                   as a string rather than a true null value.
+                   Likely strings are either empty values, very long values
+                   or values with leading zeros like 001 (which are not safe
                    to assume are numbers)
                 */
 
@@ -679,16 +686,13 @@ void csv_datasource::parse_csv(T & stream,
                     (value_length > 1 && !has_dot && value[0] == '0'))
                 {
                     matched = true;
-                    feature->put(fld_name,tr.transcode(value.c_str()));
+                    feature->put(fld_name,std::move(tr.transcode(value.c_str())));
                     if (feature_count == 1)
                     {
                         desc_.add_descriptor(mapnik::attribute_descriptor(fld_name,mapnik::String));
                     }
                 }
-                else if ((value[0] >= '0' && value[0] <= '9') ||
-                          value[0] == '-' ||
-                          value[0] == '+' ||
-                          value[0] == '.')
+                else if (csv_utils::is_likely_number(value))
                 {
                     bool has_e = value.find("e") != std::string::npos;
                     if (has_dot || has_e)
@@ -724,13 +728,42 @@ void csv_datasource::parse_csv(T & stream,
                 }
                 if (!matched)
                 {
-                    // fallback to normal string
-                    feature->put(fld_name,tr.transcode(value.c_str()));
-                    if (feature_count == 1)
+                    // NOTE: we don't use mapnik::util::string2bool
+                    // here because we don't want to treat 'on' and 'off'
+                    // as booleans, only 'true' and 'false'
+                    bool bool_val = false;
+                    std::string lower_val = value;
+                    std::transform(lower_val.begin(), lower_val.end(), lower_val.begin(), ::tolower);
+                    if (lower_val == "true")
+                    {
+                        matched = true;
+                        bool_val = true;
+                    }
+                    else if (lower_val == "false")
                     {
-                        desc_.add_descriptor(
-                            mapnik::attribute_descriptor(
-                                fld_name,mapnik::String));
+                        matched = true;
+                        bool_val = false;
+                    }
+                    if (matched)
+                    {
+                        feature->put(fld_name,bool_val);
+                        if (feature_count == 1)
+                        {
+                            desc_.add_descriptor(
+                                mapnik::attribute_descriptor(
+                                    fld_name,mapnik::Boolean));
+                        }
+                    }
+                    else
+                    {
+                        // fallback to normal string
+                        feature->put(fld_name,std::move(tr.transcode(value.c_str())));
+                        if (feature_count == 1)
+                        {
+                            desc_.add_descriptor(
+                                mapnik::attribute_descriptor(
+                                    fld_name,mapnik::String));
+                        }
                     }
                 }
             }
@@ -740,14 +773,17 @@ void csv_datasource::parse_csv(T & stream,
             {
                 if (parsed_wkt || parsed_json)
                 {
-                    if (!extent_initialized)
+                    if (!extent_initialized_)
                     {
-                        extent_initialized = true;
-                        extent_ = feature->envelope();
-                    }
-                    else
-                    {
-                        extent_.expand_to_include(feature->envelope());
+                        if (!extent_started)
+                        {
+                            extent_started = true;
+                            extent_ = feature->envelope();
+                        }
+                        else
+                        {
+                            extent_.expand_to_include(feature->envelope());
+                        }
                     }
                     features_.push_back(feature);
                     null_geom = false;
@@ -773,19 +809,22 @@ void csv_datasource::parse_csv(T & stream,
             {
                 if (parsed_x && parsed_y)
                 {
-                    mapnik::geometry_type * pt = new mapnik::geometry_type(mapnik::Point);
+                    mapnik::geometry_type * pt = new mapnik::geometry_type(mapnik::geometry_type::types::Point);
                     pt->move_to(x,y);
                     feature->add_geometry(pt);
                     features_.push_back(feature);
                     null_geom = false;
-                    if (!extent_initialized)
+                    if (!extent_initialized_)
                     {
-                        extent_initialized = true;
-                        extent_ = feature->envelope();
-                    }
-                    else
-                    {
-                        extent_.expand_to_include(feature->envelope());
+                        if (!extent_started)
+                        {
+                            extent_started = true;
+                            extent_ = feature->envelope();
+                        }
+                        else
+                        {
+                            extent_.expand_to_include(feature->envelope());
+                        }
                     }
                 }
                 else if (parsed_x || parsed_y)
@@ -794,14 +833,14 @@ void csv_datasource::parse_csv(T & stream,
                     s << "CSV Plugin: does your csv have valid headers?\n";
                     if (!parsed_x)
                     {
-                          s << "Could not detect or parse any rows named 'x' or 'longitude' "
+                        s << "Could not detect or parse any rows named 'x' or 'longitude' "
                           << "for line " << line_number << " but found " <<  headers_.size()
                           << " with values like: " << csv_line << "\n"
                           << "for: " << boost::algorithm::join(collected, ",") << "\n";
                     }
                     if (!parsed_y)
                     {
-                          s << "Could not detect or parse any rows named 'y' or 'latitude' "
+                        s << "Could not detect or parse any rows named 'y' or 'latitude' "
                           << "for line " << line_number << " but found " <<  headers_.size()
                           << " with values like: " << csv_line << "\n"
                           << "for: " << boost::algorithm::join(collected, ",") << "\n";
@@ -938,7 +977,7 @@ mapnik::featureset_ptr csv_datasource::features(mapnik::query const& q) const
         }
         ++pos;
     }
-    return boost::make_shared<mapnik::memory_featureset>(q.get_bbox(),features_);
+    return std::make_shared<mapnik::memory_featureset>(q.get_bbox(),features_);
 }
 
 mapnik::featureset_ptr csv_datasource::features_at_point(mapnik::coord2d const& pt, double tol) const
diff --git a/plugins/input/csv/csv_datasource.hpp b/plugins/input/csv/csv_datasource.hpp
index 0d9e28b..b5b695b 100644
--- a/plugins/input/csv/csv_datasource.hpp
+++ b/plugins/input/csv/csv_datasource.hpp
@@ -76,6 +76,7 @@ private:
     bool strict_;
     double filesize_max_;
     mapnik::context_ptr ctx_;
+    bool extent_initialized_;
 };
 
 #endif // MAPNIK_CSV_DATASOURCE_HPP
diff --git a/plugins/input/csv/csv_utils.hpp b/plugins/input/csv/csv_utils.hpp
index 3fdcaa3..a073462 100644
--- a/plugins/input/csv/csv_utils.hpp
+++ b/plugins/input/csv/csv_utils.hpp
@@ -23,12 +23,22 @@
 #ifndef MAPNIK_CSV_UTILS_DATASOURCE_HPP
 #define MAPNIK_CSV_UTILS_DATASOURCE_HPP
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic pop
 
 #include <string>
-#include <boost/algorithm/string.hpp>
+#include <cstdio>
 
 namespace csv_utils
 {
+    static inline bool is_likely_number(std::string const& value)
+    {
+        return( strspn( value.c_str(), "e-.+0123456789" ) == value.size() );
+    }
+
     static inline void fix_json_quoting(std::string & csv_line)
     {
         std::string wrapping_char;
diff --git a/plugins/input/gdal/build.py b/plugins/input/gdal/build.py
index 0e80f3c..506385a 100644
--- a/plugins/input/gdal/build.py
+++ b/plugins/input/gdal/build.py
@@ -35,17 +35,17 @@ plugin_sources = Split(
 )
 
 plugin_env['LIBS'] = []
+plugin_env.Append(LIBS=env['PLUGINS']['gdal']['lib'])
 
 if env['RUNTIME_LINK'] == 'static':
     cmd = 'gdal-config --dep-libs'
     plugin_env.ParseConfig(cmd)
 
 # Link Library to Dependencies
-plugin_env.Append(LIBS=env['PLUGINS']['gdal']['lib'])
 libraries = copy(plugin_env['LIBS'])
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.insert(0,env['MAPNIK_NAME'])
     libraries.append(env['ICU_LIB_NAME'])
     libraries.append('boost_system%s' % env['BOOST_APPEND'])
 
@@ -53,8 +53,7 @@ if env['PLUGIN_LINKING'] == 'shared':
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/gdal/gdal_datasource.cpp b/plugins/input/gdal/gdal_datasource.cpp
index aefcfce..ed71401 100644
--- a/plugins/input/gdal/gdal_datasource.cpp
+++ b/plugins/input/gdal/gdal_datasource.cpp
@@ -29,6 +29,7 @@
 #include <mapnik/geom_util.hpp>
 #include <mapnik/timer.hpp>
 #include <mapnik/value_types.hpp>
+#include <mapnik/boolean.hpp>
 
 #include <gdal_version.h>
 
@@ -76,9 +77,9 @@ inline GDALDataset* gdal_datasource::open_dataset() const
 
 gdal_datasource::gdal_datasource(parameters const& params)
     : datasource(params),
-      desc_(*params.get<std::string>("type"), "utf-8"),
-      filter_factor_(*params.get<double>("filter_factor", 0.0)),
-      nodata_value_(params.get<double>("nodata"))
+      desc_(gdal_datasource::name(), "utf-8"),
+      nodata_value_(params.get<double>("nodata")),
+      nodata_tolerance_(*params.get<double>("nodata_tolerance",1e-12))
 {
     MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource: Initializing...";
 
@@ -101,14 +102,15 @@ gdal_datasource::gdal_datasource(parameters const& params)
         dataset_name_ = *file;
     }
 
-    shared_dataset_ = *params.get<mapnik::boolean>("shared", false);
-    band_ = *params.get<int>("band", -1);
+    shared_dataset_ = *params.get<mapnik::boolean_type>("shared", false);
+    band_ = *params.get<mapnik::value_integer>("band", -1);
 
     GDALDataset *dataset = open_dataset();
 
     nbands_ = dataset->GetRasterCount();
     width_ = dataset->GetRasterXSize();
     height_ = dataset->GetRasterYSize();
+    desc_.add_descriptor(mapnik::attribute_descriptor("nodata", mapnik::Integer));
 
     double tr[6];
     bool bbox_override = false;
@@ -132,17 +134,29 @@ gdal_datasource::gdal_datasource(parameters const& params)
         tr[3] = extent_.maxy();
         tr[4] = 0;
         tr[5] = -extent_.height() / (double)height_;
+        MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource extent override gives Geotransform="
+                               << tr[0] << "," << tr[1] << ","
+                               << tr[2] << "," << tr[3] << ","
+                               << tr[4] << "," << tr[5];
     }
     else
     {
-        dataset->GetGeoTransform(tr);
+        if (dataset->GetGeoTransform(tr) != CPLE_None)
+        {
+            MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource GetGeotransform failure gives="
+                                   << tr[0] << "," << tr[1] << ","
+                                   << tr[2] << "," << tr[3] << ","
+                                   << tr[4] << "," << tr[5];
+        }
+        else
+        {
+            MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource Geotransform="
+                                   << tr[0] << "," << tr[1] << ","
+                                   << tr[2] << "," << tr[3] << ","
+                                   << tr[4] << "," << tr[5];
+        }
     }
 
-    MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource Geotransform="
-                           << tr[0] << "," << tr[1] << ","
-                           << tr[2] << "," << tr[3] << ","
-                           << tr[4] << "," << tr[5];
-
     // TODO - We should throw for true non-north up images, but the check
     // below is clearly too restrictive.
     // https://github.com/mapnik/mapnik/issues/970
@@ -218,7 +232,7 @@ featureset_ptr gdal_datasource::features(query const& q) const
 
     gdal_query gq = q;
 
-    // TODO - move to boost::make_shared, but must reduce # of args to <= 9
+    // TODO - move to std::make_shared, but must reduce # of args to <= 9
     return featureset_ptr(new gdal_featureset(*open_dataset(),
                                               band_,
                                               gq,
@@ -228,8 +242,8 @@ featureset_ptr gdal_datasource::features(query const& q) const
                                               nbands_,
                                               dx_,
                                               dy_,
-                                              filter_factor_,
-                                              nodata_value_));
+                                              nodata_value_,
+                                              nodata_tolerance_));
 }
 
 featureset_ptr gdal_datasource::features_at_point(coord2d const& pt, double tol) const
@@ -240,7 +254,7 @@ featureset_ptr gdal_datasource::features_at_point(coord2d const& pt, double tol)
 
     gdal_query gq = pt;
 
-    // TODO - move to boost::make_shared, but must reduce # of args to <= 9
+    // TODO - move to std::make_shared, but must reduce # of args to <= 9
     return featureset_ptr(new gdal_featureset(*open_dataset(),
                                               band_,
                                               gq,
@@ -250,6 +264,6 @@ featureset_ptr gdal_datasource::features_at_point(coord2d const& pt, double tol)
                                               nbands_,
                                               dx_,
                                               dy_,
-                                              filter_factor_,
-                                              nodata_value_));
+                                              nodata_value_,
+                                              nodata_tolerance_));
 }
diff --git a/plugins/input/gdal/gdal_datasource.hpp b/plugins/input/gdal/gdal_datasource.hpp
index 7bd1f33..bb43b95 100644
--- a/plugins/input/gdal/gdal_datasource.hpp
+++ b/plugins/input/gdal/gdal_datasource.hpp
@@ -66,8 +66,8 @@ private:
     double dy_;
     int nbands_;
     bool shared_dataset_;
-    double filter_factor_;
     boost::optional<double> nodata_value_;
+    double nodata_tolerance_;
 };
 
 #endif // GDAL_DATASOURCE_HPP
diff --git a/plugins/input/gdal/gdal_featureset.cpp b/plugins/input/gdal/gdal_featureset.cpp
index f5bbbcf..f250cac 100644
--- a/plugins/input/gdal/gdal_featureset.cpp
+++ b/plugins/input/gdal/gdal_featureset.cpp
@@ -21,20 +21,20 @@
  *****************************************************************************/
 
 // mapnik
+#include <mapnik/make_unique.hpp>
 #include <mapnik/global.hpp>
 #include <mapnik/debug.hpp>
 #include <mapnik/image_data.hpp>
 #include <mapnik/raster.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/feature_factory.hpp>
-
-// boost
-#include <boost/format.hpp>
-#include <boost/make_shared.hpp>
+#include <mapnik/util/variant.hpp>
 
 // stl
 #include <cmath>
+#include <memory>
+#include <sstream>
 
 #include "gdal_featureset.hpp"
 #include <gdal_priv.h>
@@ -43,15 +43,11 @@ using mapnik::query;
 using mapnik::coord2d;
 using mapnik::box2d;
 using mapnik::feature_ptr;
-using mapnik::CoordTransform;
+using mapnik::view_transform;
 using mapnik::geometry_type;
 using mapnik::datasource_exception;
 using mapnik::feature_factory;
 
-#ifdef _WINDOWS
-using mapnik::rint;
-#endif
-
 gdal_featureset::gdal_featureset(GDALDataset& dataset,
                                  int band,
                                  gdal_query q,
@@ -61,10 +57,10 @@ gdal_featureset::gdal_featureset(GDALDataset& dataset,
                                  int nbands,
                                  double dx,
                                  double dy,
-                                 double filter_factor,
-                                 boost::optional<double> const& nodata)
+                                 boost::optional<double> const& nodata,
+                                 double nodata_tolerance)
     : dataset_(dataset),
-      ctx_(boost::make_shared<mapnik::context_type>()),
+      ctx_(std::make_shared<mapnik::context_type>()),
       band_(band),
       gquery_(q),
       raster_extent_(extent),
@@ -73,12 +69,11 @@ gdal_featureset::gdal_featureset(GDALDataset& dataset,
       dx_(dx),
       dy_(dy),
       nbands_(nbands),
-      filter_factor_(filter_factor),
       nodata_value_(nodata),
+      nodata_tolerance_(nodata_tolerance),
       first_(true)
 {
-    ctx_->push("value");
-    ctx_->push("NODATA");
+    ctx_->push("nodata");
 }
 
 gdal_featureset::~gdal_featureset()
@@ -93,23 +88,8 @@ feature_ptr gdal_featureset::next()
     if (first_)
     {
         first_ = false;
-
         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Next feature in Dataset=" << &dataset_;
-
-        query *q = boost::get<query>(&gquery_);
-        if (q)
-        {
-            return get_feature(*q);
-        }
-        else
-        {
-            coord2d *p = boost::get<coord2d>(&gquery_);
-            if (p)
-            {
-                return get_feature_at_point(*p);
-            }
-        }
-        // should never reach here
+        return mapnik::util::apply_visitor(query_dispatch(*this), gquery_);
     }
     return feature_ptr();
 }
@@ -117,7 +97,8 @@ feature_ptr gdal_featureset::next()
 feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
 {
     feature_ptr feature = feature_factory::create(ctx_,1);
-
+    int raster_has_nodata = 0;
+    double raster_nodata = 0;
     GDALRasterBand * red = 0;
     GDALRasterBand * green = 0;
     GDALRasterBand * blue = 0;
@@ -135,13 +116,13 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
 #endif
     */
 
-    CoordTransform t(raster_width_, raster_height_, raster_extent_, 0, 0);
+    view_transform t(raster_width_, raster_height_, raster_extent_, 0, 0);
     box2d<double> intersect = raster_extent_.intersect(q.get_bbox());
     box2d<double> box = t.forward(intersect);
 
     //size of resized output pixel in source image domain
-    double margin_x = 1.0 / (std::fabs(dx_) * boost::get<0>(q.resolution()));
-    double margin_y = 1.0 / (std::fabs(dy_) * boost::get<1>(q.resolution()));
+    double margin_x = 1.0 / (std::fabs(dx_) * std::get<0>(q.resolution()));
+    double margin_y = 1.0 / (std::fabs(dy_) * std::get<1>(q.resolution()));
     if (margin_x < 1)
     {
         margin_x = 1.0;
@@ -193,31 +174,19 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
 
     MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Raster extent=" << raster_extent_;
     MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: View extent=" << intersect;
-    MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Query resolution=" << boost::get<0>(q.resolution()) << "," << boost::get<1>(q.resolution());
+    MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Query resolution=" << std::get<0>(q.resolution()) << "," << std::get<1>(q.resolution());
     MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: StartX=" << x_off << " StartY=" << y_off << " Width=" << width << " Height=" << height;
 
     if (width > 0 && height > 0)
     {
-        double width_res = boost::get<0>(q.resolution());
-        double height_res = boost::get<1>(q.resolution());
+        double width_res = std::get<0>(q.resolution());
+        double height_res = std::get<1>(q.resolution());
         int im_width = int(width_res * intersect.width() + 0.5);
         int im_height = int(height_res * intersect.height() + 0.5);
 
-        // if layer-level filter_factor is set, apply it
-        if (filter_factor_)
-        {
-            im_width = int(im_width * filter_factor_ + 0.5);
-            im_height = int(im_height * filter_factor_ + 0.5);
-
-            MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Applying layer filter_factor=" << filter_factor_;
-        }
-        // otherwise respect symbolizer level factor applied to query, default of 1.0
-        else
-        {
-            double sym_downsample_factor = q.get_filter_factor();
-            im_width = int(im_width * sym_downsample_factor + 0.5);
-            im_height = int(im_height * sym_downsample_factor + 0.5);
-        }
+        double filter_factor = q.get_filter_factor();
+        im_width = int(im_width * filter_factor + 0.5);
+        im_height = int(im_height * filter_factor + 0.5);
 
         // case where we need to avoid upsampling so that the
         // image can be later scaled within raster_symbolizer
@@ -229,7 +198,7 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
 
         if (im_width > 0 && im_height > 0)
         {
-            mapnik::raster_ptr raster = boost::make_shared<mapnik::raster>(intersect, im_width, im_height);
+            mapnik::raster_ptr raster = std::make_shared<mapnik::raster>(intersect, im_width, im_height, filter_factor);
             feature->set_raster(raster);
             mapnik::image_data_32 & image = raster->data_;
             image.set(0xffffffff);
@@ -241,144 +210,112 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
             {
                 if (band_ > nbands_)
                 {
-                    throw datasource_exception((boost::format("GDAL Plugin: '%d' is an invalid band, dataset only has '%d' bands\n") % band_ % nbands_).str());
+                    std::ostringstream s;
+                    s << "GDAL Plugin: " << band_ << " is an invalid band, dataset only has " << nbands_ << "bands";
+                    throw datasource_exception(s.str());
                 }
-
                 float* imageData = (float*)image.getBytes();
                 GDALRasterBand * band = dataset_.GetRasterBand(band_);
-                int hasNoData(0);
-                double nodata(0);
-                if (nodata_value_)
-                {
-                    hasNoData = 1;
-                    nodata = *nodata_value_;
-                }
-                else
-                {
-                    nodata = band->GetNoDataValue(&hasNoData);
-                }
+                raster_nodata = band->GetNoDataValue(&raster_has_nodata);
                 band->RasterIO(GF_Read, x_off, y_off, width, height,
                                imageData, image.width(), image.height(),
                                GDT_Float32, 0, 0);
-
-                if (hasNoData)
-                {
-                    feature->put("NODATA",nodata);
-                }
             }
             else // working with all bands
             {
                 for (int i = 0; i < nbands_; ++i)
                 {
                     GDALRasterBand * band = dataset_.GetRasterBand(i + 1);
-
 #ifdef MAPNIK_LOG
                     get_overview_meta(band);
 #endif
-
                     GDALColorInterp color_interp = band->GetColorInterpretation();
                     switch (color_interp)
                     {
                     case GCI_RedBand:
                         red = band;
-
                         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found red band";
-
                         break;
                     case GCI_GreenBand:
                         green = band;
-
                         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found green band";
-
                         break;
                     case GCI_BlueBand:
                         blue = band;
-
                         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found blue band";
-
                         break;
                     case GCI_AlphaBand:
                         alpha = band;
-
                         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found alpha band";
-
                         break;
                     case GCI_GrayIndex:
                         grey = band;
-
                         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found gray band";
-
                         break;
                     case GCI_PaletteIndex:
                     {
                         grey = band;
-
+#ifdef MAPNIK_LOG
                         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found gray band, and colortable...";
-
                         GDALColorTable *color_table = band->GetColorTable();
 
                         if (color_table)
                         {
                             int count = color_table->GetColorEntryCount();
-
                             MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Color Table count=" << count;
 
                             for (int j = 0; j < count; j++)
                             {
                                 const GDALColorEntry *ce = color_table->GetColorEntry (j);
                                 if (! ce) continue;
-
                                 MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Color entry RGB=" << ce->c1 << "," <<ce->c2 << "," << ce->c3;
                             }
                         }
+#endif
                         break;
                     }
                     case GCI_Undefined:
+#if GDAL_VERSION_NUM <= 1730
+                        if (nbands_ == 4)
+                        {
+                            MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found undefined band (assumming alpha band)";
+                            alpha = band;
+                        }
+                        else
+                        {
+                            MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found undefined band (assumming gray band)";
+                            grey = band;
+                        }
+#else
                         MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Found undefined band (assumming gray band)";
-
                         grey = band;
+#endif
                         break;
                     default:
                         MAPNIK_LOG_WARN(gdal) << "gdal_featureset: Band type unknown!";
-
                         break;
                     }
                 }
-
                 if (red && green && blue)
                 {
                     MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Processing rgb bands...";
-
-                    int hasNoData = 0;
-                    double nodata = 0.0;
-                    if (nodata_value_)
-                    {
-                        hasNoData = 1;
-                        nodata = *nodata_value_;
-                    }
-                    else
-                    {
-                        nodata = red->GetNoDataValue(&hasNoData);
-                    }
-                    if (hasNoData)
-                    {
-                        feature->put("NODATA",nodata);
-                    }
+                    raster_nodata = red->GetNoDataValue(&raster_has_nodata);
                     GDALColorTable *color_table = red->GetColorTable();
-
-                    if (! alpha && hasNoData && ! color_table)
+                    bool has_nodata = nodata_value_ || raster_has_nodata;
+                    if (has_nodata && !color_table)
                     {
-                        // first read the data in and create an alpha channel from the nodata values
+                        double apply_nodata = nodata_value_ ? *nodata_value_ : raster_nodata;
+                        // read the data in and create an alpha channel from the nodata values
+                        // TODO - we assume here the nodata value for the red band applies to all bands
+                        // more details about this at http://trac.osgeo.org/gdal/ticket/2734
                         float* imageData = (float*)image.getBytes();
                         red->RasterIO(GF_Read, x_off, y_off, width, height,
                                       imageData, image.width(), image.height(),
                                       GDT_Float32, 0, 0);
-
                         int len = image.width() * image.height();
-
                         for (int i = 0; i < len; ++i)
                         {
-                            if (nodata == imageData[i])
+                            if (std::fabs(apply_nodata - imageData[i]) < nodata_tolerance_)
                             {
                                 *reinterpret_cast<unsigned *>(&imageData[i]) = 0;
                             }
@@ -387,9 +324,7 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
                                 *reinterpret_cast<unsigned *>(&imageData[i]) = 0xFFFFFFFF;
                             }
                         }
-
                     }
-
                     red->RasterIO(GF_Read, x_off, y_off, width, height, image.getBytes() + 0,
                                   image.width(), image.height(), GDT_Byte, 4, 4 * image.width());
                     green->RasterIO(GF_Read, x_off, y_off, width, height, image.getBytes() + 1,
@@ -400,46 +335,31 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
                 else if (grey)
                 {
                     MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Processing gray band...";
-
-                    int hasNoData(0);
-                    double nodata(0);
-                    if (nodata_value_)
-                    {
-                        hasNoData = 1;
-                        nodata = *nodata_value_;
-                    }
-                    else
-                    {
-                        nodata = grey->GetNoDataValue(&hasNoData);
-                    }
+                    raster_nodata = grey->GetNoDataValue(&raster_has_nodata);
                     GDALColorTable* color_table = grey->GetColorTable();
-
-                    if (hasNoData && ! color_table)
+                    bool has_nodata = nodata_value_ || raster_has_nodata;
+                    if (!color_table && has_nodata)
                     {
-                        MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: No data value for layer=" << nodata;
-
-                        feature->put("NODATA",nodata);
+                        double apply_nodata = nodata_value_ ? *nodata_value_ : raster_nodata;
+                        MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: applying nodata value for layer=" << apply_nodata;
                         // first read the data in and create an alpha channel from the nodata values
                         float* imageData = (float*)image.getBytes();
                         grey->RasterIO(GF_Read, x_off, y_off, width, height,
                                        imageData, image.width(), image.height(),
                                        GDT_Float32, 0, 0);
-
                         int len = image.width() * image.height();
-
                         for (int i = 0; i < len; ++i)
                         {
-                            if (nodata == imageData[i])
+                            if (std::fabs(apply_nodata - imageData[i]) < nodata_tolerance_)
                             {
                                 *reinterpret_cast<unsigned *>(&imageData[i]) = 0;
                             }
                             else
                             {
-                                *reinterpret_cast<unsigned *> (&imageData[i]) = 0xFFFFFFFF;
+                                *reinterpret_cast<unsigned *>(&imageData[i]) = 0xFFFFFFFF;
                             }
                         }
                     }
-
                     grey->RasterIO(GF_Read, x_off, y_off, width, height, image.getBytes() + 0,
                                    image.width(), image.height(), GDT_Byte, 4, 4 * image.width());
                     grey->RasterIO(GF_Read,x_off, y_off, width, height, image.getBytes() + 1,
@@ -449,38 +369,23 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
 
                     if (color_table)
                     {
-                        MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Loading colour table...";
-
-                        unsigned nodata_value = static_cast<unsigned>(std::floor(nodata+.5)); // FIXME: is it realy unsigned ?
-                        if (hasNoData)
-                        {
-                            feature->put("NODATA",static_cast<mapnik::value_integer>(nodata_value));
-                        }
+                        MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Loading color table...";
                         for (unsigned y = 0; y < image.height(); ++y)
                         {
                             unsigned int* row = image.getRow(y);
                             for (unsigned x = 0; x < image.width(); ++x)
                             {
                                 unsigned value = row[x] & 0xff;
-                                if (hasNoData && (value == nodata_value))
+                                const GDALColorEntry *ce = color_table->GetColorEntry(value);
+                                if (ce)
                                 {
-                                    // make no data fully alpha
-                                    row[x] = 0;
+                                    row[x] = (ce->c4 << 24)| (ce->c3 << 16) |  (ce->c2 << 8) | (ce->c1) ;
                                 }
                                 else
                                 {
-                                    const GDALColorEntry *ce = color_table->GetColorEntry(value);
-                                    if (ce)
-                                    {
-                                        // TODO - big endian support
-                                        row[x] = (ce->c4 << 24)| (ce->c3 << 16) |  (ce->c2 << 8) | (ce->c1) ;
-                                    }
-                                    else
-                                    {
-                                        // make lacking color entry fully alpha
-                                        // note - gdal_translate makes black
-                                        row[x] = 0;
-                                    }
+                                    // make lacking color entry fully alpha
+                                    // note - gdal_translate makes black
+                                    row[x] = 0;
                                 }
                             }
                         }
@@ -489,11 +394,31 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
                 if (alpha)
                 {
                     MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: processing alpha band...";
-
-                    alpha->RasterIO(GF_Read, x_off, y_off, width, height, image.getBytes() + 3,
-                                    image.width(), image.height(), GDT_Byte, 4, 4 * image.width());
+                    if (!raster_has_nodata)
+                    {
+                        alpha->RasterIO(GF_Read, x_off, y_off, width, height, image.getBytes() + 3,
+                                        image.width(), image.height(), GDT_Byte, 4, 4 * image.width());
+                    }
+                    else
+                    {
+                        MAPNIK_LOG_WARN(gdal) << "warning: nodata value (" << raster_nodata << ") used to set transparency instead of alpha band";
+                    }
                 }
             }
+            // set nodata value to be used in raster colorizer
+            if (nodata_value_)
+            {
+                raster->set_nodata(*nodata_value_);
+            }
+            else
+            {
+                raster->set_nodata(raster_nodata);
+            }
+            // report actual/original source nodata in feature attributes
+            if (raster_has_nodata)
+            {
+                feature->put("nodata",raster_nodata);
+            }
             return feature;
         }
     }
@@ -527,19 +452,22 @@ feature_ptr gdal_featureset::get_feature_at_point(mapnik::coord2d const& pt)
             MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: x=" << x << " y=" << y;
 
             GDALRasterBand* band = dataset_.GetRasterBand(band_);
-            int hasNoData;
-            double nodata = band->GetNoDataValue(&hasNoData);
+            int raster_has_nodata;
+            double nodata = band->GetNoDataValue(&raster_has_nodata);
             double value;
             band->RasterIO(GF_Read, x, y, 1, 1, &value, 1, 1, GDT_Float64, 0, 0);
-
-            if (! hasNoData || value != nodata)
+            if (! raster_has_nodata || value != nodata)
             {
                 // construct feature
                 feature_ptr feature = feature_factory::create(ctx_,1);
-                geometry_type * point = new geometry_type(mapnik::Point);
+                std::unique_ptr<geometry_type> point = std::make_unique<geometry_type>(mapnik::geometry_type::types::Point);
                 point->move_to(pt.x, pt.y);
-                feature->add_geometry(point);
-                feature->put("value",value);
+                feature->add_geometry(point.release());
+                feature->put_new("value",value);
+                if (raster_has_nodata)
+                {
+                    feature->put_new("nodata",nodata);
+                }
                 return feature;
             }
         }
@@ -558,8 +486,9 @@ void gdal_featureset::get_overview_meta(GDALRasterBand* band)
         for (int b = 0; b < band_overviews; b++)
         {
             GDALRasterBand * overview = band->GetOverview(b);
-            MAPNIK_LOG_DEBUG(gdal) << boost::format("gdal_featureset: Overview=%d Width=%d Height=%d")
-                % b % overview->GetXSize() % overview->GetYSize();
+            MAPNIK_LOG_DEBUG(gdal) << "Overview= " << b
+              << " Width=" << overview->GetXSize()
+              << " Height=" << overview->GetYSize();
         }
     }
     else
@@ -572,8 +501,9 @@ void gdal_featureset::get_overview_meta(GDALRasterBand* band)
     band->GetBlockSize(&bsx, &bsy);
     scale = band->GetScale();
 
-    MAPNIK_LOG_DEBUG(gdal) << boost::format("gdal_featureset: Block=%dx%d Scale=%f Type=%s Color=%s") % bsx % bsy % scale
-        % GDALGetDataTypeName(band->GetRasterDataType())
-        % GDALGetColorInterpretationName(band->GetColorInterpretation());
+    MAPNIK_LOG_DEBUG(gdal) << "Block=" << bsx << "x" << bsy
+        << " Scale=" << scale
+        << " Type=" << GDALGetDataTypeName(band->GetRasterDataType())
+        << "Color=" << GDALGetColorInterpretationName(band->GetColorInterpretation());
 }
 #endif
diff --git a/plugins/input/gdal/gdal_featureset.hpp b/plugins/input/gdal/gdal_featureset.hpp
index cb6c0b0..a10a3f0 100644
--- a/plugins/input/gdal/gdal_featureset.hpp
+++ b/plugins/input/gdal/gdal_featureset.hpp
@@ -25,9 +25,8 @@
 
 // mapnik
 #include <mapnik/feature.hpp>
-
+#include <mapnik/util/variant.hpp>
 // boost
-#include <boost/variant.hpp>
 #include <boost/optional.hpp>
 
 #include "gdal_datasource.hpp"
@@ -35,10 +34,28 @@
 class GDALDataset;
 class GDALRasterBand;
 
-typedef boost::variant<mapnik::query, mapnik::coord2d> gdal_query;
+using gdal_query = mapnik::util::variant<mapnik::query, mapnik::coord2d>;
 
 class gdal_featureset : public mapnik::Featureset
 {
+    struct query_dispatch : public mapnik::util::static_visitor<mapnik::feature_ptr>
+    {
+        query_dispatch( gdal_featureset & featureset)
+            : featureset_(featureset) {}
+
+        mapnik::feature_ptr operator() (mapnik::query const& q) const
+        {
+            return featureset_.get_feature(q);
+        }
+
+        mapnik::feature_ptr operator() (mapnik::coord2d const& p) const
+        {
+            return featureset_.get_feature_at_point(p);
+        }
+
+        gdal_featureset & featureset_;
+    };
+
 public:
     gdal_featureset(GDALDataset& dataset,
                     int band,
@@ -49,8 +66,8 @@ public:
                     int nbands,
                     double dx,
                     double dy,
-                    double filter_factor,
-                    boost::optional<double> const& nodata);
+                    boost::optional<double> const& nodata,
+                    double nodata_tolerance);
     virtual ~gdal_featureset();
     mapnik::feature_ptr next();
 
@@ -72,8 +89,8 @@ private:
     double dx_;
     double dy_;
     int nbands_;
-    double filter_factor_;
     boost::optional<double> nodata_value_;
+    double nodata_tolerance_;
     bool first_;
 };
 
diff --git a/plugins/input/geojson/build.py b/plugins/input/geojson/build.py
index 73aeb12..1302c6a 100644
--- a/plugins/input/geojson/build.py
+++ b/plugins/input/geojson/build.py
@@ -21,56 +21,45 @@
 
 Import ('env')
 
-can_build = False
+Import ('plugin_base')
 
-if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
-    boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
-    if boost_version_from_header >= 47:
-        can_build = True
+PLUGIN_NAME = 'geojson'
 
-if not can_build:
-    print 'WARNING: skipping building the optional geojson datasource plugin which requires boost >= 1.47'
-else:
-    Import ('plugin_base')
+plugin_env = plugin_base.Clone()
 
-    PLUGIN_NAME = 'geojson'
+plugin_sources = Split(
+  """
+  %(PLUGIN_NAME)s_datasource.cpp
+  %(PLUGIN_NAME)s_featureset.cpp
+  """ % locals()
+)
 
-    plugin_env = plugin_base.Clone()
+# Link Library to Dependencies
+libraries = []
+libraries.append(env['ICU_LIB_NAME'])
+libraries.append('boost_system%s' % env['BOOST_APPEND'])
+libraries.append('mapnik-json')
 
-    plugin_sources = Split(
-      """
-      %(PLUGIN_NAME)s_datasource.cpp
-      %(PLUGIN_NAME)s_featureset.cpp
-      """ % locals()
-    )
+if env['PLUGIN_LINKING'] == 'shared':
+    libraries.append(env['MAPNIK_NAME'])
 
-    # Link Library to Dependencies
-    libraries = []
-    libraries.append(env['ICU_LIB_NAME'])
-    libraries.append('boost_system%s' % env['BOOST_APPEND'])
-    if env['THREADING'] == 'multi':
-        libraries.append('boost_thread%s' % env['BOOST_APPEND'])
+    TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
+                                      SHLIBPREFIX='',
+                                      SHLIBSUFFIX='.input',
+                                      source=plugin_sources,
+                                      LIBS=libraries)
 
-    if env['PLUGIN_LINKING'] == 'shared':
-        libraries.append('mapnik')
+    # if the plugin links to libmapnik ensure it is built first
+    Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
+    Depends(TARGET, env.subst('../../../src/json/libmapnik-json${LIBSUFFIX}'))
 
-        TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
-                                          SHLIBPREFIX='',
-                                          SHLIBSUFFIX='.input',
-                                          source=plugin_sources,
-                                          LIBS=libraries,
-                                          LINKFLAGS=env['CUSTOM_LDFLAGS'])
+    if 'uninstall' not in COMMAND_LINE_TARGETS:
+        env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
+        env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
 
-        # if the plugin links to libmapnik ensure it is built first
-        Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
+plugin_obj = {
+  'LIBS': libraries,
+  'SOURCES': plugin_sources,
+}
 
-        if 'uninstall' not in COMMAND_LINE_TARGETS:
-            env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
-            env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
-
-    plugin_obj = {
-      'LIBS': libraries,
-      'SOURCES': plugin_sources,
-    }
-
-    Return('plugin_obj')
+Return('plugin_obj')
diff --git a/plugins/input/geojson/geojson_datasource.cpp b/plugins/input/geojson/geojson_datasource.cpp
index dd5e167..21c7160 100644
--- a/plugins/input/geojson/geojson_datasource.cpp
+++ b/plugins/input/geojson/geojson_datasource.cpp
@@ -27,139 +27,175 @@
 #include <algorithm>
 
 // boost
-#include <boost/variant.hpp>
-#include <boost/make_shared.hpp>
+
 #include <boost/algorithm/string.hpp>
-#include <boost/spirit/include/support_multi_pass.hpp>
-#include <boost/foreach.hpp>
-#include <boost/geometry/geometries/box.hpp>
-#include <boost/geometry/geometries/geometries.hpp>
-#include <boost/geometry.hpp>
-#include <boost/geometry/extensions/index/rtree/rtree.hpp>
 
 // mapnik
 #include <mapnik/unicode.hpp>
 #include <mapnik/utils.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/feature_kv_iterator.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/box2d.hpp>
 #include <mapnik/debug.hpp>
 #include <mapnik/proj_transform.hpp>
 #include <mapnik/projection.hpp>
 #include <mapnik/util/geometry_to_ds_type.hpp>
-#include <mapnik/json/feature_collection_parser.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/util/file_io.hpp>
+#include <mapnik/make_unique.hpp>
+#include <mapnik/json/feature_collection_grammar.hpp>
+
+#include <boost/spirit/include/qi.hpp>
 
 using mapnik::datasource;
 using mapnik::parameters;
 
 DATASOURCE_PLUGIN(geojson_datasource)
 
-struct attr_value_converter : public boost::static_visitor<mapnik::eAttributeType>
+struct attr_value_converter : public mapnik::util::static_visitor<mapnik::eAttributeType>
 {
-    mapnik::eAttributeType operator() (mapnik::value_integer /*val*/) const
+    mapnik::eAttributeType operator() (mapnik::value_integer) const
     {
         return mapnik::Integer;
     }
 
-    mapnik::eAttributeType operator() (double /*val*/) const
+    mapnik::eAttributeType operator() (double) const
     {
         return mapnik::Double;
     }
 
-    mapnik::eAttributeType operator() (float /*val*/) const
+    mapnik::eAttributeType operator() (float) const
     {
         return mapnik::Double;
     }
 
-    mapnik::eAttributeType operator() (bool /*val*/) const
+    mapnik::eAttributeType operator() (bool) const
     {
         return mapnik::Boolean;
     }
 
-    mapnik::eAttributeType operator() (std::string const& /*val*/) const
+    mapnik::eAttributeType operator() (std::string const& ) const
     {
         return mapnik::String;
     }
 
-    mapnik::eAttributeType operator() (UnicodeString const& /*val*/) const
+    mapnik::eAttributeType operator() (mapnik::value_unicode_string const&) const
     {
         return mapnik::String;
     }
 
-    mapnik::eAttributeType operator() (mapnik::value_null const& /*val*/) const
+    mapnik::eAttributeType operator() (mapnik::value_null const& ) const
     {
         return mapnik::String;
     }
 };
 
 geojson_datasource::geojson_datasource(parameters const& params)
-: datasource(params),
+  : datasource(params),
     type_(datasource::Vector),
-    desc_(*params.get<std::string>("type"),
+    desc_(geojson_datasource::name(),
           *params.get<std::string>("encoding","utf-8")),
-    file_(*params.get<std::string>("file","")),
+    filename_(),
+    inline_string_(),
     extent_(),
-    tr_(new mapnik::transcoder(*params.get<std::string>("encoding","utf-8"))),
     features_(),
-    tree_(16,1)
+    tree_(nullptr)
 {
-    if (file_.empty()) throw mapnik::datasource_exception("GeoJSON Plugin: missing <file> parameter");
-
-    boost::optional<std::string> base = params.get<std::string>("base");
-    if (base)
+    boost::optional<std::string> inline_string = params.get<std::string>("inline");
+    if (inline_string)
     {
-        file_ = *base + "/" + file_;
+        inline_string_ = *inline_string;
     }
+    else
+    {
+        boost::optional<std::string> file = params.get<std::string>("file");
+        if (!file) throw mapnik::datasource_exception("GeoJSON Plugin: missing <file> parameter");
 
-    typedef std::istreambuf_iterator<char> base_iterator_type;
-
-#if defined (_WINDOWS)
-    std::ifstream is(mapnik::utf8_to_utf16(file_),std::ios_base::in | std::ios_base::binary);
-#else
-    std::ifstream is(file_.c_str(),std::ios_base::in | std::ios_base::binary);
-#endif
-    if (!is.is_open())
+        boost::optional<std::string> base = params.get<std::string>("base");
+        if (base)
+            filename_ = *base + "/" + *file;
+        else
+            filename_ = *file;
+    }
+    if (!inline_string_.empty())
     {
-        throw mapnik::datasource_exception("GeoJSON Plugin: could not open: '" + file_ + "'");
+        parse_geojson(inline_string_);
     }
+    else
+    {
+        mapnik::util::file file(filename_);
+        if (!file.open())
+        {
+            throw mapnik::datasource_exception("TopoJSON Plugin: could not open: '" + filename_ + "'");
+        }
+        std::string file_buffer;
+        file_buffer.resize(file.size());
+        std::fread(&file_buffer[0], file.size(), 1, file.get());
+        parse_geojson(file_buffer);
+    }
+}
 
-    boost::spirit::multi_pass<base_iterator_type> begin =
-        boost::spirit::make_default_multi_pass(base_iterator_type(is));
-
-    boost::spirit::multi_pass<base_iterator_type> end =
-        boost::spirit::make_default_multi_pass(base_iterator_type());
+namespace {
+using base_iterator_type = std::string::const_iterator;
+const mapnik::transcoder tr("utf8");
+const mapnik::json::feature_collection_grammar<base_iterator_type,mapnik::feature_impl> fc_grammar(tr);
+}
 
-    mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
-    mapnik::json::feature_collection_parser<boost::spirit::multi_pass<base_iterator_type> > p(ctx,*tr_);
-    bool result = p.parse(begin,end, features_);
+template <typename T>
+void geojson_datasource::parse_geojson(T const& buffer)
+{
+    boost::spirit::standard_wide::space_type space;
+    mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
+    bool result = boost::spirit::qi::phrase_parse(buffer.begin(), buffer.end(), (fc_grammar)(boost::phoenix::ref(ctx)), space, features_);
     if (!result)
     {
-        throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file '" + file_ + "'");
+        if (!inline_string_.empty()) throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file from in-memory string");
+        else throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file '" + filename_ + "'");
     }
 
-    bool first = true;
-    std::size_t count=0;
-    BOOST_FOREACH (mapnik::feature_ptr f, features_)
+#if BOOST_VERSION >= 105600
+    using values_container = std::vector< std::pair<box_type, std::size_t> >;
+    values_container values;
+    values.reserve(features_.size());
+#else
+    tree_ = std::make_unique<spatial_index_type>(16, 4);
+#endif
+
+    std::size_t geometry_index = 0;
+    for (mapnik::feature_ptr const& f : features_)
     {
-        mapnik::box2d<double> const& box = f->envelope();
-        if (first)
+        mapnik::box2d<double> box = f->envelope();
+        if (box.valid())
         {
-            extent_ = box;
-            first = false;
-            mapnik::feature_kv_iterator f_itr = f->begin();
-            mapnik::feature_kv_iterator f_end = f->end();
-            for ( ;f_itr!=f_end; ++f_itr)
+            if (geometry_index == 0)
             {
-                desc_.add_descriptor(mapnik::attribute_descriptor(boost::get<0>(*f_itr),
-                    boost::apply_visitor(attr_value_converter(),boost::get<1>(*f_itr).base())));
+                extent_ = box;
+                for ( auto const& kv : *f)
+                {
+                    desc_.add_descriptor(mapnik::attribute_descriptor(std::get<0>(kv),
+                                                                      mapnik::util::apply_visitor(attr_value_converter(),
+                                                                                                  std::get<1>(kv))));
+                }
+            }
+            else
+            {
+                extent_.expand_to_include(box);
             }
         }
-        else
-        {
-            extent_.expand_to_include(box);
-        }
-        tree_.insert(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())), count++);
+#if BOOST_VERSION >= 105600
+        values.emplace_back(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())), geometry_index);
+#else
+        tree_->insert(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())),geometry_index);
+#endif
+        ++geometry_index;
     }
+
+#if BOOST_VERSION >= 105600
+    // packing algorithm
+    tree_ = std::make_unique<spatial_index_type>(values);
+#endif
+
 }
 
 geojson_datasource::~geojson_datasource() { }
@@ -213,8 +249,19 @@ mapnik::featureset_ptr geojson_datasource::features(mapnik::query const& q) cons
     if (extent_.intersects(b))
     {
         box_type box(point_type(b.minx(),b.miny()),point_type(b.maxx(),b.maxy()));
-        index_array_ = tree_.find(box);
-        return boost::make_shared<geojson_featureset>(features_, index_array_.begin(), index_array_.end());
+#if BOOST_VERSION >= 105600
+        geojson_featureset::array_type index_array;
+        if (tree_)
+        {
+            tree_->query(boost::geometry::index::intersects(box),std::back_inserter(index_array));
+            return std::make_shared<geojson_featureset>(features_, std::move(index_array));
+        }
+#else
+        if (tree_)
+        {
+            return std::make_shared<geojson_featureset>(features_, tree_->find(box));
+        }
+#endif
     }
     // otherwise return an empty featureset pointer
     return mapnik::featureset_ptr();
diff --git a/plugins/input/geojson/geojson_datasource.hpp b/plugins/input/geojson/geojson_datasource.hpp
index 7cad44b..c5194ec 100644
--- a/plugins/input/geojson/geojson_datasource.hpp
+++ b/plugins/input/geojson/geojson_datasource.hpp
@@ -35,26 +35,65 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/geometry/geometries/box.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/geometry/geometries/point_xy.hpp>
-#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/geometries/box.hpp>
 #include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry.hpp>
+#include <boost/version.hpp>
+#if BOOST_VERSION >= 105600
+#include <boost/geometry/index/rtree.hpp>
+#else
 #include <boost/geometry/extensions/index/rtree/rtree.hpp>
+#endif
+#pragma GCC diagnostic pop
 
 // stl
+#include <memory>
 #include <vector>
 #include <string>
 #include <map>
 #include <deque>
 
+
+#if BOOST_VERSION >= 105600
+template <std::size_t Max, std::size_t Min>
+struct geojson_linear : boost::geometry::index::linear<Max,Min> {};
+
+namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree {
+
+template <std::size_t Max, std::size_t Min>
+struct options_type<geojson_linear<Max,Min> >
+{
+    using type = options<geojson_linear<Max, Min>,
+                         insert_default_tag,
+                         choose_by_content_diff_tag,
+                         split_default_tag,
+                         linear_tag,
+                         node_s_mem_static_tag>;
+};
+
+}}}}}
+
+#endif //BOOST_VERSION >= 105600
+
 class geojson_datasource : public mapnik::datasource
 {
 public:
-    typedef boost::geometry::model::d2::point_xy<double> point_type;
-    typedef boost::geometry::model::box<point_type> box_type;
-    typedef boost::geometry::index::rtree<box_type,std::size_t> spatial_index_type;
-    
+    using point_type = boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>;
+    using box_type = boost::geometry::model::box<point_type>;
+
+#if BOOST_VERSION >= 105600
+    using item_type = std::pair<box_type,std::size_t>;
+    using spatial_index_type = boost::geometry::index::rtree<item_type,geojson_linear<16,4> >;
+#else
+    using item_type = std::size_t;
+    using spatial_index_type = boost::geometry::index::rtree<box_type,std::size_t>;
+#endif
+
     // constructor
     geojson_datasource(mapnik::parameters const& params);
     virtual ~geojson_datasource ();
@@ -65,17 +104,17 @@ public:
     mapnik::box2d<double> envelope() const;
     mapnik::layer_descriptor get_descriptor() const;
     boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
+    template <typename T>
+    void parse_geojson(T const& buffer);
 private:
     mapnik::datasource::datasource_t type_;
-    std::map<std::string, mapnik::parameters> statistics_;
     mapnik::layer_descriptor desc_;
-    std::string file_;
+    std::string filename_;
+    std::string inline_string_;
     mapnik::box2d<double> extent_;
-    boost::shared_ptr<mapnik::transcoder> tr_;
     std::vector<mapnik::feature_ptr> features_;
-    spatial_index_type tree_;
-    mutable std::deque<std::size_t> index_array_;
+    std::unique_ptr<spatial_index_type> tree_;
 };
 
 
-#endif // FILE_DATASOURCE_HPP
+#endif // GEOJSON_DATASOURCE_HPP
diff --git a/plugins/input/geojson/geojson_featureset.cpp b/plugins/input/geojson/geojson_featureset.cpp
index f6d45a9..722108d 100644
--- a/plugins/input/geojson/geojson_featureset.cpp
+++ b/plugins/input/geojson/geojson_featureset.cpp
@@ -25,16 +25,16 @@
 // stl
 #include <string>
 #include <vector>
-#include <fstream>
+#include <deque>
 
 #include "geojson_featureset.hpp"
 
-geojson_featureset::geojson_featureset(std::vector<mapnik::feature_ptr> const& features, 
-                                       std::deque<std::size_t>::const_iterator index_itr,
-                                       std::deque<std::size_t>::const_iterator index_end)
+geojson_featureset::geojson_featureset(std::vector<mapnik::feature_ptr> const& features,
+                                       array_type && index_array)
     : features_(features),
-      index_itr_(index_itr),
-      index_end_(index_end) {}
+      index_array_(std::move(index_array)),
+      index_itr_(index_array_.begin()),
+      index_end_(index_array_.end()) {}
 
 geojson_featureset::~geojson_featureset() {}
 
@@ -42,11 +42,16 @@ mapnik::feature_ptr geojson_featureset::next()
 {
     if (index_itr_ != index_end_)
     {
-        std::size_t index = *index_itr_++;        
+#if BOOST_VERSION >= 105600
+        geojson_datasource::item_type const& item = *index_itr_++;
+        std::size_t index = item.second;
+#else
+        std::size_t index = *index_itr_++;
+#endif
         if ( index < features_.size())
         {
             return features_.at(index);
         }
-    }    
+    }
     return mapnik::feature_ptr();
 }
diff --git a/plugins/input/geojson/geojson_featureset.hpp b/plugins/input/geojson/geojson_featureset.hpp
index f8b37d6..1f6898b 100644
--- a/plugins/input/geojson/geojson_featureset.hpp
+++ b/plugins/input/geojson/geojson_featureset.hpp
@@ -1,3 +1,25 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
 #ifndef GEOJSON_FEATURESET_HPP
 #define GEOJSON_FEATURESET_HPP
 
@@ -11,17 +33,17 @@
 class geojson_featureset : public mapnik::Featureset
 {
 public:
+    typedef std::deque<geojson_datasource::item_type> array_type;
     geojson_featureset(std::vector<mapnik::feature_ptr> const& features,
-                       std::deque<std::size_t>::const_iterator index_itr,
-                       std::deque<std::size_t>::const_iterator index_end);
+                       array_type && index_array);
     virtual ~geojson_featureset();
     mapnik::feature_ptr next();
 
 private:
-    mapnik::box2d<double> box_;
     std::vector<mapnik::feature_ptr> const& features_;
-    std::deque<std::size_t>::const_iterator index_itr_;
-    std::deque<std::size_t>::const_iterator index_end_;
+    const array_type index_array_;
+    array_type::const_iterator index_itr_;
+    array_type::const_iterator index_end_;
 };
 
 #endif // GEOJSON_FEATURESET_HPP
diff --git a/plugins/input/occi/build.py b/plugins/input/occi/build.py
index 946d32d..2797345 100644
--- a/plugins/input/occi/build.py
+++ b/plugins/input/occi/build.py
@@ -41,14 +41,13 @@ libraries.append('boost_system%s' % env['BOOST_APPEND'])
 libraries.append(env['ICU_LIB_NAME'])
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.append(env['MAPNIK_NAME'])
 
     TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/occi/occi_datasource.cpp b/plugins/input/occi/occi_datasource.cpp
index 6111c70..364817b 100644
--- a/plugins/input/occi/occi_datasource.cpp
+++ b/plugins/input/occi/occi_datasource.cpp
@@ -33,7 +33,6 @@
 // boost
 #include <boost/algorithm/string.hpp>
 #include <boost/tokenizer.hpp>
-#include <boost/make_shared.hpp>
 
 // stl
 #include <string>
@@ -77,8 +76,8 @@ occi_datasource::occi_datasource(parameters const& params)
       scale_denom_token_("!scale_denominator!"),
       pixel_width_token_("!pixel_width!"),
       pixel_height_token_("!pixel_height!"),
-      desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding", "utf-8")),
-      use_wkb_(*params.get<mapnik::boolean>("use_wkb", false)),
+      desc_(occi_datasource::name(), *params.get<std::string>("encoding", "utf-8")),
+      use_wkb_(*params.get<mapnik::boolean_type>("use_wkb", false)),
       row_limit_(*params.get<mapnik::value_integer>("row_limit", 0)),
       row_prefetch_(*params.get<int>("row_prefetch", 100)),
       pool_(0),
@@ -101,9 +100,9 @@ occi_datasource::occi_datasource(parameters const& params)
     {
         table_ = *table;
     }
-    estimate_extent_ = *params.get<mapnik::boolean>("estimate_extent",false);
-    use_spatial_index_ = *params.get<mapnik::boolean>("use_spatial_index",true);
-    use_connection_pool_ = *params.get<mapnik::boolean>("use_connection_pool",true);
+    estimate_extent_ = *params.get<mapnik::boolean_type>("estimate_extent",false);
+    use_spatial_index_ = *params.get<mapnik::boolean_type>("use_spatial_index",true);
+    use_connection_pool_ = *params.get<mapnik::boolean_type>("use_connection_pool",true);
 
     boost::optional<std::string> ext = params.get<std::string>("extent");
     if (ext) extent_initialized_ = extent_.from_string(*ext);
@@ -506,8 +505,8 @@ featureset_ptr occi_datasource::features(query const& q) const
 #endif
 
     box2d<double> const& box = q.get_bbox();
-    const double px_gw = 1.0 / boost::get<0>(q.resolution());
-    const double px_gh = 1.0 / boost::get<1>(q.resolution());
+    const double px_gw = 1.0 / std::get<0>(q.resolution());
+    const double px_gh = 1.0 / std::get<1>(q.resolution());
     const double scale_denom = q.scale_denominator();
 
     std::ostringstream s;
@@ -523,7 +522,7 @@ featureset_ptr occi_datasource::features(query const& q) const
     std::set<std::string> const& props = q.property_names();
     std::set<std::string>::const_iterator pos = props.begin();
     std::set<std::string>::const_iterator end = props.end();
-    mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+    mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
     for (; pos != end; ++pos)
     {
         s << ", " << *pos;
@@ -562,7 +561,7 @@ featureset_ptr occi_datasource::features(query const& q) const
 
     MAPNIK_LOG_DEBUG(occi) << "occi_datasource: " << s.str();
 
-    return boost::make_shared<occi_featureset>(pool_,
+    return std::make_shared<occi_featureset>(pool_,
                                                 conn_,
                                                 ctx,
                                                 s.str(),
@@ -590,7 +589,7 @@ featureset_ptr occi_datasource::features_at_point(coord2d const& pt, double tol)
     }
     std::vector<attribute_descriptor>::const_iterator itr = desc_.get_descriptors().begin();
     std::vector<attribute_descriptor>::const_iterator end = desc_.get_descriptors().end();
-    mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+    mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
     while (itr != end)
     {
         s << ", " << itr->get_name();
@@ -631,7 +630,7 @@ featureset_ptr occi_datasource::features_at_point(coord2d const& pt, double tol)
 
     MAPNIK_LOG_DEBUG(occi) << "occi_datasource: " << s.str();
 
-    return boost::make_shared<occi_featureset>(pool_,
+    return std::make_shared<occi_featureset>(pool_,
                                                 conn_,
                                                 ctx,
                                                 s.str(),
diff --git a/plugins/input/occi/occi_datasource.hpp b/plugins/input/occi/occi_datasource.hpp
index 10261f1..0aa6f38 100644
--- a/plugins/input/occi/occi_datasource.hpp
+++ b/plugins/input/occi/occi_datasource.hpp
@@ -35,7 +35,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
diff --git a/plugins/input/occi/occi_featureset.cpp b/plugins/input/occi/occi_featureset.cpp
index 9a2eb67..33f89e8 100644
--- a/plugins/input/occi/occi_featureset.cpp
+++ b/plugins/input/occi/occi_featureset.cpp
@@ -29,6 +29,7 @@
 #include <mapnik/feature_layer_desc.hpp>
 #include <mapnik/wkb.hpp>
 #include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/feature_factory.hpp>
 
 // ogr
@@ -61,7 +62,7 @@ occi_featureset::occi_featureset(StatelessConnectionPool* pool,
                                  bool use_connection_pool,
                                  bool use_wkb,
                                  unsigned prefetch_rows)
-    : rs_(NULL),
+    : rs_(nullptr),
       tr_(new transcoder(encoding)),
       feature_id_(1),
       ctx_(ctx),
@@ -84,7 +85,7 @@ occi_featureset::occi_featureset(StatelessConnectionPool* pool,
     {
         MAPNIK_LOG_ERROR(occi) << "OCCI Plugin: error processing " << sqlstring << " : " << ex.getMessage();
 
-        rs_ = NULL;
+        rs_ = nullptr;
     }
 }
 
@@ -94,7 +95,7 @@ occi_featureset::~occi_featureset()
 
 feature_ptr occi_featureset::next()
 {
-    while (rs_ != NULL && rs_->next() == oracle::occi::ResultSet::DATA_AVAILABLE)
+    while (rs_ != nullptr && rs_->next() == oracle::occi::ResultSet::DATA_AVAILABLE)
     {
         feature_ptr feature(feature_factory::create(ctx_, feature_id_));
 
@@ -121,7 +122,7 @@ feature_ptr occi_featureset::next()
         }
         else
         {
-            boost::scoped_ptr<SDOGeometry> geom(dynamic_cast<SDOGeometry*>(rs_->getObject(1)));
+            const std::unique_ptr<SDOGeometry> geom(dynamic_cast<SDOGeometry*>(rs_->getObject(1)));
             if (geom.get())
             {
                 convert_geometry(geom.get(), feature);
@@ -192,7 +193,7 @@ feature_ptr occi_featureset::next()
             case oracle::occi::OCCI_SQLT_TIMESTAMP:
             case oracle::occi::OCCI_SQLT_TIMESTAMP_LTZ:
             case oracle::occi::OCCI_SQLT_TIMESTAMP_TZ:
-                feature->put(fld_name, (UnicodeString)tr_->transcode(rs_->getString(i + 1).c_str()));
+                feature->put(fld_name, static_cast<mapnik::value_unicode_string>(tr_->transcode(rs_->getString(i + 1).c_str())));
                 break;
             case oracle::occi::OCCIINTERVALDS:
             case oracle::occi::OCCIINTERVALYM:
@@ -258,9 +259,9 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
         SDOPointType* sdopoint = geom->getSdo_point();
         if (sdopoint && ! sdopoint->isNull())
         {
-            geometry_type* point = new geometry_type(mapnik::Point);
+            std::unique_ptr<geometry_type> point = std::make_unique<geometry_type>(mapnik::geometry_type::types::Point);
             point->move_to(sdopoint->getX(), sdopoint->getY());
-            feature->add_geometry(point);
+            feature->add_geometry(point.release());
         }
     }
     break;
@@ -271,7 +272,7 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
             const bool is_single_geom = true;
             const bool is_point_type = false;
             convert_ordinates(feature,
-                              mapnik::LineString,
+                              mapnik::geometry_type::types::LineString,
                               elem_info,
                               ordinates,
                               dimensions,
@@ -287,7 +288,7 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
             const bool is_single_geom = true;
             const bool is_point_type = false;
             convert_ordinates(feature,
-                              mapnik::Polygon,
+                              mapnik::geometry_type::types::Polygon,
                               elem_info,
                               ordinates,
                               dimensions,
@@ -303,7 +304,7 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
             const bool is_single_geom = false;
             const bool is_point_type = true;
             convert_ordinates(feature,
-                              mapnik::Point,
+                              mapnik::geometry_type::types::Point,
                               elem_info,
                               ordinates,
                               dimensions,
@@ -320,7 +321,7 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
             const bool is_point_type = false;
 
             convert_ordinates(feature,
-                              mapnik::LineString,
+                              mapnik::geometry_type::types::LineString,
                               elem_info,
                               ordinates,
                               dimensions,
@@ -337,7 +338,7 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
             const bool is_point_type = false;
 
             convert_ordinates(feature,
-                              mapnik::Polygon,
+                              mapnik::geometry_type::types::Polygon,
                               elem_info,
                               ordinates,
                               dimensions,
@@ -355,7 +356,7 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
             const bool is_point_type = false;
 
             convert_ordinates(feature,
-                              mapnik::Polygon,
+                              mapnik::geometry_type::types::Polygon,
                               elem_info,
                               ordinates,
                               dimensions,
@@ -376,7 +377,7 @@ void occi_featureset::convert_geometry(SDOGeometry* geom, feature_ptr feature)
 }
 
 void occi_featureset::convert_ordinates(mapnik::feature_ptr feature,
-                                        const mapnik::eGeomType& geom_type,
+                                        const mapnik::geometry_type::types& geom_type,
                                         const std::vector<Number>& elem_info,
                                         const std::vector<Number>& ordinates,
                                         const int dimensions,
@@ -403,20 +404,20 @@ void occi_featureset::convert_ordinates(mapnik::feature_ptr feature,
                 int next_interp = elem_info[i + 2];
                 bool is_linear_element = true;
                 bool is_unknown_etype = false;
-                mapnik::eGeomType gtype = mapnik::Point;
+                mapnik::geometry_type::types gtype = mapnik::geometry_type::types::Point;
 
                 switch (etype)
                 {
                 case SDO_ETYPE_POINT:
                     if (interp == SDO_INTERPRETATION_POINT)     {}
                     if (interp > SDO_INTERPRETATION_POINT)      {}
-                    gtype = mapnik::Point;
+                    gtype = mapnik::geometry_type::types::Point;
                     break;
 
                 case SDO_ETYPE_LINESTRING:
                     if (interp == SDO_INTERPRETATION_STRAIGHT)  {}
                     if (interp == SDO_INTERPRETATION_CIRCULAR)  {}
-                    gtype = mapnik::LineString;
+                    gtype = mapnik::geometry_type::types::LineString;
                     break;
 
                 case SDO_ETYPE_POLYGON:
@@ -425,7 +426,7 @@ void occi_featureset::convert_ordinates(mapnik::feature_ptr feature,
                     if (interp == SDO_INTERPRETATION_CIRCULAR)  {}
                     if (interp == SDO_INTERPRETATION_RECTANGLE) {}
                     if (interp == SDO_INTERPRETATION_CIRCLE)    {}
-                    gtype = mapnik::Polygon;
+                    gtype = mapnik::geometry_type::types::Polygon;
                     break;
 
                 case SDO_ETYPE_COMPOUND_LINESTRING:
@@ -433,7 +434,7 @@ void occi_featureset::convert_ordinates(mapnik::feature_ptr feature,
                 case SDO_ETYPE_COMPOUND_POLYGON_INTERIOR:
                     // interp = next ETYPE to consider
                     is_linear_element = false;
-                    gtype = mapnik::Polygon;
+                    gtype = mapnik::geometry_type::types::Polygon;
                     break;
 
                 case SDO_ETYPE_UNKNOWN:    // unknown
diff --git a/plugins/input/occi/occi_featureset.hpp b/plugins/input/occi/occi_featureset.hpp
index cb4e7cb..88f9cfb 100644
--- a/plugins/input/occi/occi_featureset.hpp
+++ b/plugins/input/occi/occi_featureset.hpp
@@ -30,8 +30,8 @@
 #include <mapnik/unicode.hpp>
 
 // boost
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
+
+#include <memory>
 
 // oci
 #include "occi_types.hpp"
@@ -55,7 +55,7 @@ public:
 private:
     void convert_geometry (SDOGeometry* geom, mapnik::feature_ptr feature);
     void convert_ordinates (mapnik::feature_ptr feature,
-                            const mapnik::eGeomType& geom_type,
+                            const mapnik::geometry_type::types& geom_type,
                             const std::vector<oracle::occi::Number>& elem_info,
                             const std::vector<oracle::occi::Number>& ordinates,
                             const int dimensions,
@@ -70,7 +70,7 @@ private:
 
     occi_connection_ptr conn_;
     oracle::occi::ResultSet* rs_;
-    boost::scoped_ptr<mapnik::transcoder> tr_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
     mapnik::value_integer feature_id_;
     mapnik::context_ptr ctx_;
     bool use_wkb_;
diff --git a/plugins/input/occi/occi_types.hpp b/plugins/input/occi/occi_types.hpp
index 896219a..066704c 100644
--- a/plugins/input/occi/occi_types.hpp
+++ b/plugins/input/occi/occi_types.hpp
@@ -27,11 +27,6 @@
 #include <mapnik/debug.hpp>
 #include <mapnik/utils.hpp>
 
-// boost
-#ifdef MAPNIK_THREADSAFE
-#include <boost/thread/mutex.hpp>
-#endif
-
 // occi
 #include <occi.h>
 
diff --git a/plugins/input/occi/spatial_classeso.cpp b/plugins/input/occi/spatial_classeso.cpp
index b757e21..cbc7046 100644
--- a/plugins/input/occi/spatial_classeso.cpp
+++ b/plugins/input/occi/spatial_classeso.cpp
@@ -97,7 +97,7 @@ void *SDOPointType::readSQL(void *ctxOCCI_)
     {
         delete objOCCI_;
         excep.setErrorCtx(ctxOCCI_);
-        return (void *)NULL;
+        return (void *)nullptr;
     }
     return (void *)objOCCI_;
 }
@@ -264,7 +264,7 @@ void *SDOGeometry::readSQL(void *ctxOCCI_)
     {
         delete objOCCI_;
         excep.setErrorCtx(ctxOCCI_);
-        return (void *)NULL;
+        return (void *)nullptr;
     }
     return (void *)objOCCI_;
 }
diff --git a/plugins/input/ogr/build.py b/plugins/input/ogr/build.py
index b66f6a9..9c4101b 100644
--- a/plugins/input/ogr/build.py
+++ b/plugins/input/ogr/build.py
@@ -39,26 +39,19 @@ plugin_sources = Split(
 
 cxxflags = []
 plugin_env['LIBS'] = []
+plugin_env.Append(LIBS=env['PLUGINS']['ogr']['lib'])
 
 if env['RUNTIME_LINK'] == 'static':
     cmd = 'gdal-config --dep-libs'
     plugin_env.ParseConfig(cmd)
 
 # Link Library to Dependencies
-plugin_env.Append(LIBS=env['PLUGINS']['ogr']['lib'])
 libraries = copy(plugin_env['LIBS'])
 
-if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
-    boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
-    if boost_version_from_header < 46:
-        # avoid ubuntu issue with boost interprocess:
-        # https://github.com/mapnik/mapnik/issues/1082
-        cxxflags.append('-fpermissive')
-
 plugin_env.Append(CXXFLAGS=cxxflags)
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.insert(0,env['MAPNIK_NAME'])
     libraries.append(env['ICU_LIB_NAME'])
     libraries.append('boost_system%s' % env['BOOST_APPEND'])
 
@@ -66,8 +59,7 @@ if env['PLUGIN_LINKING'] == 'shared':
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/ogr/ogr_converter.cpp b/plugins/input/ogr/ogr_converter.cpp
index 8892ef1..341ab04 100644
--- a/plugins/input/ogr/ogr_converter.cpp
+++ b/plugins/input/ogr/ogr_converter.cpp
@@ -79,21 +79,21 @@ void ogr_converter::convert_geometry(OGRGeometry* geom, feature_ptr feature)
 
 void ogr_converter::convert_point(OGRPoint* geom, feature_ptr feature)
 {
-    std::auto_ptr<geometry_type> point(new geometry_type(mapnik::Point));
+    std::unique_ptr<geometry_type> point(new geometry_type(mapnik::geometry_type::types::Point));
     point->move_to(geom->getX(), geom->getY());
-    feature->paths().push_back(point);
+    feature->paths().push_back(point.release());
 }
 
 void ogr_converter::convert_linestring(OGRLineString* geom, feature_ptr feature)
 {
     int num_points = geom->getNumPoints();
-    std::auto_ptr<geometry_type> line(new geometry_type(mapnik::LineString));
+    std::unique_ptr<geometry_type> line(new geometry_type(mapnik::geometry_type::types::LineString));
     line->move_to(geom->getX(0), geom->getY(0));
     for (int i = 1; i < num_points; ++i)
     {
         line->line_to (geom->getX(i), geom->getY(i));
     }
-    feature->paths().push_back(line);
+    feature->paths().push_back(line.release());
 }
 
 void ogr_converter::convert_polygon(OGRPolygon* geom, feature_ptr feature)
@@ -108,7 +108,7 @@ void ogr_converter::convert_polygon(OGRPolygon* geom, feature_ptr feature)
         capacity += interior->getNumPoints();
     }
 
-    std::auto_ptr<geometry_type> poly(new geometry_type(mapnik::Polygon));
+    std::unique_ptr<geometry_type> poly(new geometry_type(mapnik::geometry_type::types::Polygon));
 
     poly->move_to(exterior->getX(0), exterior->getY(0));
     for (int i = 1; i < num_points; ++i)
@@ -127,7 +127,7 @@ void ogr_converter::convert_polygon(OGRPolygon* geom, feature_ptr feature)
         }
         poly->close_path();
     }
-    feature->paths().push_back(poly);
+    feature->paths().push_back(poly.release());
 }
 
 void ogr_converter::convert_multipoint(OGRMultiPoint* geom, feature_ptr feature)
@@ -163,7 +163,7 @@ void ogr_converter::convert_collection(OGRGeometryCollection* geom, feature_ptr
     for (int i = 0; i < num_geometries; ++i)
     {
         OGRGeometry* g = geom->getGeometryRef(i);
-        if (g != NULL)
+        if (g != nullptr)
         {
             convert_geometry(g, feature);
         }
diff --git a/plugins/input/ogr/ogr_datasource.cpp b/plugins/input/ogr/ogr_datasource.cpp
index dd8a623..3e76dd9 100644
--- a/plugins/input/ogr/ogr_datasource.cpp
+++ b/plugins/input/ogr/ogr_datasource.cpp
@@ -34,8 +34,11 @@
 #include <mapnik/utils.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <fstream>
@@ -62,7 +65,7 @@ ogr_datasource::ogr_datasource(parameters const& params)
     : datasource(params),
       extent_(),
       type_(datasource::Vector),
-      desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding", "utf-8")),
+      desc_(ogr_datasource::name(), *params.get<std::string>("encoding", "utf-8")),
       indexed_(false)
 {
     init(params);
@@ -72,7 +75,11 @@ ogr_datasource::~ogr_datasource()
 {
     // free layer before destroying the datasource
     layer_.free_layer();
+#if GDAL_VERSION_MAJOR >= 2
+    GDALClose(( GDALDatasetH) dataset_);
+#else
     OGRDataSource::DestroyDataSource (dataset_);
+#endif
 }
 
 void ogr_datasource::init(mapnik::parameters const& params)
@@ -82,10 +89,12 @@ void ogr_datasource::init(mapnik::parameters const& params)
 #endif
 
     // initialize ogr formats
+    // NOTE: in GDAL >= 2.0 this is the same as GDALAllRegister()
     OGRRegisterAll();
 
     boost::optional<std::string> file = params.get<std::string>("file");
     boost::optional<std::string> string = params.get<std::string>("string");
+    if (!string) string  = params.get<std::string>("inline");
     if (! file && ! string)
     {
         throw datasource_exception("missing <file> or <string> parameter");
@@ -112,17 +121,26 @@ void ogr_datasource::init(mapnik::parameters const& params)
 
     if (! driver.empty())
     {
+#if GDAL_VERSION_MAJOR >= 2
+        unsigned int nOpenFlags = GDAL_OF_READONLY | GDAL_OF_VECTOR;
+        const char* papszAllowedDrivers[] = { driver.c_str(), nullptr };
+        dataset_ = reinterpret_cast<gdal_dataset_type>(GDALOpenEx(dataset_name_.c_str(),nOpenFlags,papszAllowedDrivers, nullptr, nullptr));
+#else
         OGRSFDriver * ogr_driver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(driver.c_str());
-        if (ogr_driver && ogr_driver != NULL)
+        if (ogr_driver && ogr_driver != nullptr)
         {
-            dataset_ = ogr_driver->Open((dataset_name_).c_str(), FALSE);
+            dataset_ = ogr_driver->Open((dataset_name_).c_str(), false);
         }
-
+#endif
     }
     else
     {
         // open ogr driver
-        dataset_ = OGRSFDriverRegistrar::Open((dataset_name_).c_str(), FALSE);
+#if GDAL_VERSION_MAJOR >= 2
+        dataset_ = reinterpret_cast<gdal_dataset_type>(OGROpen(dataset_name_.c_str(), false, nullptr));
+#else
+        dataset_ = OGRSFDriverRegistrar::Open(dataset_name_.c_str(), false);
+#endif
     }
 
     if (! dataset_)
@@ -140,7 +158,7 @@ void ogr_datasource::init(mapnik::parameters const& params)
 
     // initialize layer
     boost::optional<std::string> layer_by_name = params.get<std::string>("layer");
-    boost::optional<int> layer_by_index = params.get<int>("layer_by_index");
+    boost::optional<mapnik::value_integer> layer_by_index = params.get<mapnik::value_integer>("layer_by_index");
     boost::optional<std::string> layer_by_sql = params.get<std::string>("layer_by_sql");
 
     int passed_parameters = 0;
@@ -166,8 +184,8 @@ void ogr_datasource::init(mapnik::parameters const& params)
         int num_layers = dataset_->GetLayerCount();
         if (*layer_by_index >= num_layers)
         {
-            std::ostringstream s("OGR Plugin: only ");
-            s << num_layers << " layer(s) exist, cannot find layer by index '" << *layer_by_index << "'";
+            std::ostringstream s;
+            s << "OGR Plugin: only " << num_layers << " layer(s) exist, cannot find layer by index '" << *layer_by_index << "'";
             throw datasource_exception(s.str());
         }
 
@@ -215,7 +233,8 @@ void ogr_datasource::init(mapnik::parameters const& params)
 
     if (! layer_.is_valid())
     {
-        std::ostringstream s("OGR Plugin: ");
+        std::ostringstream s;
+        s << "OGR Plugin: ";
 
         if (layer_by_name)
         {
@@ -239,9 +258,30 @@ void ogr_datasource::init(mapnik::parameters const& params)
     OGRLayer* layer = layer_.layer();
 
     // initialize envelope
-    OGREnvelope envelope;
-    layer->GetExtent(&envelope);
-    extent_.init(envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY);
+    boost::optional<std::string> ext = params.get<std::string>("extent");
+    if (ext && !ext->empty())
+    {
+        extent_.from_string(*ext);
+    }
+    else
+    {
+        OGREnvelope envelope;
+        OGRErr e = layer->GetExtent(&envelope);
+        if (e == OGRERR_FAILURE)
+        {
+            if (layer->GetFeatureCount() == 0)
+            {
+                MAPNIK_LOG_ERROR(ogr) << "could not determine extent, layer '" << layer->GetLayerDefn()->GetName() << "' appears to have no features";
+            }
+            else
+            {
+                std::ostringstream s;
+                s << "OGR Plugin: Cannot determine extent for layer '" << layer->GetLayerDefn()->GetName() << "'. Please provide a manual extent string (minx,miny,maxx,maxy).";
+                throw datasource_exception(s.str());
+            }
+        }
+        extent_.init(envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY);
+    }
 
     // scan for index file
     // TODO - layer names don't match dataset name, so this will break for
@@ -383,7 +423,7 @@ boost::optional<mapnik::datasource::geometry_t> ogr_datasource::get_geometry_typ
                     //layer->ResetReading();
                     layer->SetNextByIndex(0);
                     OGRFeature *poFeature;
-                    while ((poFeature = layer->GetNextFeature()) != NULL)
+                    while ((poFeature = layer->GetNextFeature()) != nullptr)
                     {
                         OGRGeometry* geom = poFeature->GetGeometryRef();
                         if (geom && ! geom->IsEmpty())
@@ -453,8 +493,8 @@ void validate_attribute_names(query const& q, std::vector<attribute_descriptor>
 
         if (! found_name)
         {
-            std::ostringstream s("OGR Plugin: no attribute '");
-            s << *pos << "'. Valid attributes are: ";
+            std::ostringstream s;
+            s << "OGR Plugin: no attribute named '" << *pos << "'. Valid attributes are: ";
             std::vector<attribute_descriptor>::const_iterator e_itr = names.begin();
             std::vector<attribute_descriptor>::const_iterator e_end = names.end();
             for ( ;e_itr!=e_end;++e_itr)
@@ -478,7 +518,7 @@ featureset_ptr ogr_datasource::features(query const& q) const
 
         std::vector<attribute_descriptor> const& desc_ar = desc_.get_descriptors();
         // feature context (schema)
-        mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+        mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
 
         std::vector<attribute_descriptor>::const_iterator itr = desc_ar.begin();
         std::vector<attribute_descriptor>::const_iterator end = desc_ar.end();
@@ -521,7 +561,7 @@ featureset_ptr ogr_datasource::features_at_point(coord2d const& pt, double tol)
     {
         std::vector<attribute_descriptor> const& desc_ar = desc_.get_descriptors();
         // feature context (schema)
-        mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+        mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
 
         std::vector<attribute_descriptor>::const_iterator itr = desc_ar.begin();
         std::vector<attribute_descriptor>::const_iterator end = desc_ar.end();
diff --git a/plugins/input/ogr/ogr_datasource.hpp b/plugins/input/ogr/ogr_datasource.hpp
index ebff6c5..5691fd8 100644
--- a/plugins/input/ogr/ogr_datasource.hpp
+++ b/plugins/input/ogr/ogr_datasource.hpp
@@ -34,7 +34,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
@@ -56,14 +56,14 @@ public:
     mapnik::box2d<double> envelope() const;
     boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
     mapnik::layer_descriptor get_descriptor() const;
-    
+
 private:
     void init(mapnik::parameters const& params);
     mapnik::box2d<double> extent_;
     mapnik::datasource::datasource_t type_;
     std::string dataset_name_;
     std::string index_name_;
-    OGRDataSource* dataset_;
+    gdal_dataset_type dataset_;
     ogr_layer_ptr layer_;
     std::string layer_name_;
     mapnik::layer_descriptor desc_;
diff --git a/plugins/input/ogr/ogr_featureset.cpp b/plugins/input/ogr/ogr_featureset.cpp
index afa5bc4..7383c7f 100644
--- a/plugins/input/ogr/ogr_featureset.cpp
+++ b/plugins/input/ogr/ogr_featureset.cpp
@@ -30,6 +30,7 @@
 #include <mapnik/feature_layer_desc.hpp>
 #include <mapnik/wkb.hpp>
 #include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/feature_factory.hpp>
 
 // ogr
@@ -67,7 +68,7 @@ ogr_featureset::ogr_featureset(mapnik::context_ptr const& ctx,
       layer_(layer),
       layerdef_(layer.GetLayerDefn()),
       tr_(new transcoder(encoding)),
-      fidcolumn_(layer_.GetFIDColumn()),
+      fidcolumn_(layer_.GetFIDColumn()), // TODO - unused
       count_(0)
 {
     layer_.SetSpatialFilterRect (extent.minx(),
@@ -82,8 +83,15 @@ ogr_featureset::~ogr_featureset()
 
 feature_ptr ogr_featureset::next()
 {
+    if (count_ == 0)
+    {
+        // Reset the layer reading on the first feature read
+        // this is a hack, but needed due to https://github.com/mapnik/mapnik/issues/2048
+        // Proper solution is to avoid storing layer state in featureset
+        layer_.ResetReading();
+    }
     OGRFeature *poFeature;
-    while ((poFeature = layer_.GetNextFeature()) != NULL)
+    while ((poFeature = layer_.GetNextFeature()) != nullptr)
     {
         // ogr feature ids start at 0, so add one to stay
         // consistent with other mapnik datasources that start at 1
@@ -129,8 +137,7 @@ feature_ptr ogr_featureset::next()
             case OFTString:
             case OFTWideString:     // deprecated !
             {
-                UnicodeString ustr = tr_->transcode(poFeature->GetFieldAsString(i));
-                feature->put( fld_name, ustr);
+                feature->put( fld_name, tr_->transcode(poFeature->GetFieldAsString(i)));
                 break;
             }
 
diff --git a/plugins/input/ogr/ogr_featureset.hpp b/plugins/input/ogr/ogr_featureset.hpp
index 29f707f..861ff27 100644
--- a/plugins/input/ogr/ogr_featureset.hpp
+++ b/plugins/input/ogr/ogr_featureset.hpp
@@ -30,7 +30,7 @@
 #include <mapnik/geom_util.hpp>
 
 // boost
-#include <boost/scoped_ptr.hpp>
+
 
 // ogr
 #include <ogrsf_frmts.h>
@@ -54,7 +54,7 @@ private:
     mapnik::context_ptr ctx_;
     OGRLayer& layer_;
     OGRFeatureDefn* layerdef_;
-    boost::scoped_ptr<mapnik::transcoder> tr_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
     const char* fidcolumn_;
     mutable int count_;
 };
diff --git a/plugins/input/ogr/ogr_index_featureset.cpp b/plugins/input/ogr/ogr_index_featureset.cpp
index 1f6c629..f72a5a6 100644
--- a/plugins/input/ogr/ogr_index_featureset.cpp
+++ b/plugins/input/ogr/ogr_index_featureset.cpp
@@ -30,11 +30,14 @@
 #include <mapnik/feature_layer_desc.hpp>
 #include <mapnik/wkb.hpp>
 #include <mapnik/unicode.hpp>
-#include <mapnik/mapped_memory_cache.hpp>
 #include <mapnik/feature_factory.hpp>
 
 // boost
+#ifdef SHAPE_MEMORY_MAPPED_FILE
+#include <mapnik/mapped_memory_cache.hpp>
+#include <boost/interprocess/mapped_region.hpp>
 #include <boost/interprocess/streams/bufferstream.hpp>
+#endif
 
 // ogr
 #include "ogr_index_featureset.hpp"
@@ -63,12 +66,21 @@ ogr_index_featureset<filterT>::ogr_index_featureset(mapnik::context_ptr const &
       feature_envelope_()
 {
 
+#ifdef SHAPE_MEMORY_MAPPED_FILE
     boost::optional<mapnik::mapped_region_ptr> memory = mapnik::mapped_memory_cache::instance().find(index_file, true);
     if (memory)
     {
         boost::interprocess::ibufferstream file(static_cast<char*>((*memory)->get_address()),(*memory)->get_size());
         ogr_index<filterT,boost::interprocess::ibufferstream >::query(filter,file,ids_);
     }
+#else
+  #if defined (WINDOWS)
+      std::ifstream file(mapnik::utf8_to_utf16(index_file), std::ios::in | std::ios::binary);
+  #else
+      std::ifstream file(index_file.c_str(), std::ios::in | std::ios::binary);
+  #endif
+      ogr_index<filterT,std::ifstream>::query(filter,file,ids_);
+#endif
 
     std::sort(ids_.begin(),ids_.end());
 
@@ -92,7 +104,7 @@ feature_ptr ogr_index_featureset<filterT>::next()
         layer_.SetNextByIndex (pos);
 
         OGRFeature *poFeature = layer_.GetNextFeature();
-        if (poFeature == NULL)
+        if (poFeature == nullptr)
         {
             return feature_ptr();
         }
@@ -142,8 +154,7 @@ feature_ptr ogr_index_featureset<filterT>::next()
             case OFTString:
             case OFTWideString:     // deprecated !
             {
-                UnicodeString ustr = tr_->transcode(poFeature->GetFieldAsString (i));
-                feature->put(fld_name,ustr);
+                feature->put(fld_name,tr_->transcode(poFeature->GetFieldAsString (i)));
                 break;
             }
 
diff --git a/plugins/input/ogr/ogr_index_featureset.hpp b/plugins/input/ogr/ogr_index_featureset.hpp
index 9972935..83645da 100644
--- a/plugins/input/ogr/ogr_index_featureset.hpp
+++ b/plugins/input/ogr/ogr_index_featureset.hpp
@@ -25,7 +25,7 @@
 
 #include <set>
 #include <vector>
-#include <boost/scoped_ptr.hpp>
+
 #include <mapnik/feature.hpp>
 #include "ogr_featureset.hpp"
 
@@ -48,7 +48,7 @@ private:
     filterT filter_;
     std::vector<int> ids_;
     std::vector<int>::iterator itr_;
-    boost::scoped_ptr<mapnik::transcoder> tr_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
     const char* fidcolumn_;
     OGREnvelope feature_envelope_;
 };
diff --git a/plugins/input/ogr/ogr_layer_ptr.hpp b/plugins/input/ogr/ogr_layer_ptr.hpp
index 26588ae..81fe3dc 100644
--- a/plugins/input/ogr/ogr_layer_ptr.hpp
+++ b/plugins/input/ogr/ogr_layer_ptr.hpp
@@ -29,15 +29,22 @@
 // stl
 #include <stdexcept>
 
-// ogr
+// gdal
+#include <gdal_version.h>
 #include <ogrsf_frmts.h>
 
+#if GDAL_VERSION_MAJOR >= 2
+using gdal_dataset_type = GDALDataset*;
+#else
+using gdal_dataset_type = OGRDataSource*;
+#endif
+
 class ogr_layer_ptr
 {
 public:
     ogr_layer_ptr()
-        : datasource_(NULL),
-          layer_(NULL),
+        : datasource_(nullptr),
+          layer_(nullptr),
           owns_layer_(false),
           is_valid_(false)
     {
@@ -50,19 +57,19 @@ public:
 
     void free_layer()
     {
-        if (owns_layer_ && layer_ != NULL && datasource_ != NULL)
+        if (owns_layer_ && layer_ != nullptr && datasource_ != nullptr)
         {
             datasource_->ReleaseResultSet(layer_);
         }
 
-        datasource_ = NULL;
-        layer_ = NULL;
+        datasource_ = nullptr;
+        layer_ = nullptr;
         layer_name_ = "";
         owns_layer_ = false;
         is_valid_ = false;
     }
 
-    void layer_by_name(OGRDataSource* const datasource,
+    void layer_by_name(gdal_dataset_type const datasource,
                        std::string const& layer_name)
     {
         free_layer();
@@ -84,7 +91,7 @@ public:
 #endif
     }
 
-    void layer_by_index(OGRDataSource* const datasource,
+    void layer_by_index(gdal_dataset_type const datasource,
                         int layer_index)
     {
         free_layer();
@@ -110,7 +117,7 @@ public:
 #endif
     }
 
-    void layer_by_sql(OGRDataSource* const datasource,
+    void layer_by_sql(gdal_dataset_type const datasource,
                       std::string const& layer_sql)
     {
         free_layer();
@@ -122,8 +129,8 @@ public:
         // http://trac.osgeo.org/gdal/wiki/rfc29_desired_fields
         // http://trac.osgeo.org/gdal/wiki/rfc28_sqlfunc
 
-        OGRGeometry* spatial_filter = NULL;
-        const char* sql_dialect = NULL;
+        OGRGeometry* spatial_filter = nullptr;
+        const char* sql_dialect = nullptr;
         OGRLayer* ogr_layer = datasource_->ExecuteSQL(layer_sql.c_str(), spatial_filter, sql_dialect);
 
         if (ogr_layer)
@@ -179,7 +186,7 @@ private:
     }
 #endif
 
-    OGRDataSource* datasource_;
+    gdal_dataset_type datasource_;
     OGRLayer* layer_;
     std::string layer_name_;
     bool owns_layer_;
diff --git a/plugins/input/osm/basiccurl.cpp b/plugins/input/osm/basiccurl.cpp
index 600f2f3..ece3aca 100755
--- a/plugins/input/osm/basiccurl.cpp
+++ b/plugins/input/osm/basiccurl.cpp
@@ -23,6 +23,7 @@
 #include "basiccurl.h"
 
 #include <iostream>
+#include <cstring>
 
 CURL_LOAD_DATA* grab_http_response(const char* url)
 {
@@ -36,13 +37,13 @@ CURL_LOAD_DATA* grab_http_response(const char* url)
         curl_easy_cleanup(curl);
         return data;
     }
-    return NULL;
+    return nullptr;
 }
 
 CURL_LOAD_DATA* do_grab(CURL* curl,const char* url)
 {
     CURL_LOAD_DATA* data = (CURL_LOAD_DATA*)malloc(sizeof(CURL_LOAD_DATA));
-    data->data = NULL;
+    data->data = nullptr;
     data->nbytes = 0;
 
     curl_easy_setopt(curl, CURLOPT_URL, url);
@@ -65,7 +66,7 @@ size_t response_callback(void* ptr, size_t size, size_t nmemb, void* d)
     // fprintf(stderr,"rsize is %d\n", rsize);
 
     data->data = (char*)realloc(data->data, (data->nbytes + rsize) * sizeof(char));
-    memcpy(&(data->data[data->nbytes]), ptr, rsize);
+    std::memcpy(&(data->data[data->nbytes]), ptr, rsize);
     data->nbytes += rsize;
 
     // fprintf(stderr,"data->nbytes is %d\n", data->nbytes);
diff --git a/plugins/input/osm/build.py b/plugins/input/osm/build.py
index ce24e04..3a0dffe 100644
--- a/plugins/input/osm/build.py
+++ b/plugins/input/osm/build.py
@@ -21,6 +21,7 @@
 
 Import ('plugin_base')
 Import ('env')
+from copy import copy
 
 PLUGIN_NAME = 'osm'
 
@@ -33,25 +34,25 @@ plugin_sources = Split(
   %(PLUGIN_NAME)s_featureset.cpp
   osmparser.cpp
   dataset_deliverer.cpp
-  basiccurl.cpp
   """ % locals()
 )
 
+plugin_env['LIBS'] = []
+plugin_env.Append(LIBS='xml2')
+
 # Link Library to Dependencies
-libraries = [ 'xml2' ]
-libraries.append('curl')
+libraries = copy(plugin_env['LIBS'])
 libraries.append(env['ICU_LIB_NAME'])
 libraries.append('boost_system%s' % env['BOOST_APPEND'])
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.append(env['MAPNIK_NAME'])
 
     TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/osm/dataset_deliverer.cpp b/plugins/input/osm/dataset_deliverer.cpp
index 994c104..caaadb8 100644
--- a/plugins/input/osm/dataset_deliverer.cpp
+++ b/plugins/input/osm/dataset_deliverer.cpp
@@ -29,16 +29,15 @@
 #include <sstream>
 
 #include "dataset_deliverer.h"
-#include "basiccurl.h"
 
-osm_dataset * dataset_deliverer::dataset = NULL;
+osm_dataset * dataset_deliverer::dataset = nullptr;
 std::string dataset_deliverer::last_bbox = "";
 std::string dataset_deliverer::last_filename = "";
 
 osm_dataset* dataset_deliverer::load_from_file(const string& file, const string& parser)
 {
     // Only actually load from file if we haven't done so already
-    if (dataset == NULL)
+    if (dataset == nullptr)
     {
         if (!mapnik::util::exists(file))
         {
@@ -48,7 +47,7 @@ osm_dataset* dataset_deliverer::load_from_file(const string& file, const string&
         dataset = new osm_dataset;
         if (dataset->load(file.c_str(), parser) == false)
         {
-            return NULL;
+            return nullptr;
         }
 
         atexit(dataset_deliverer::release);
@@ -59,38 +58,9 @@ osm_dataset* dataset_deliverer::load_from_file(const string& file, const string&
         dataset = new osm_dataset;
         if (dataset->load(file.c_str(), parser) == false)
         {
-            return NULL;
+            return nullptr;
         }
         last_filename = file;
     }
     return dataset;
 }
-
-osm_dataset* dataset_deliverer::load_from_url(const string& url, const string& bbox, const string& parser)
-{
-    if (dataset == NULL)
-    {
-        dataset = new osm_dataset;
-        if (dataset->load_from_url(url.c_str(), bbox, parser) == false)
-        {
-            return NULL;
-        }
-
-        atexit(dataset_deliverer::release);
-        last_bbox = bbox;
-    }
-    else if (bbox != last_bbox)
-    {
-        MAPNIK_LOG_WARN(osm) << "osm_dataset_deliverer: BBoxes are different=" << last_bbox << "," << bbox;
-
-        // Reload the dataset
-        dataset->clear();
-        if (dataset->load_from_url(url.c_str(), bbox, parser) == false)
-        {
-            return NULL;
-        }
-
-        last_bbox = bbox;
-    }
-    return dataset;
-}
diff --git a/plugins/input/osm/dataset_deliverer.h b/plugins/input/osm/dataset_deliverer.h
index 217eb67..dde269b 100644
--- a/plugins/input/osm/dataset_deliverer.h
+++ b/plugins/input/osm/dataset_deliverer.h
@@ -37,7 +37,6 @@ private:
 
 public:
     static osm_dataset *load_from_file(const string&, const string&);
-    static osm_dataset *load_from_url(const string&, const string&, const string&);
 
     static void release()
     {
diff --git a/plugins/input/osm/osm.cpp b/plugins/input/osm/osm.cpp
index 3b91132..d5fe096 100644
--- a/plugins/input/osm/osm.cpp
+++ b/plugins/input/osm/osm.cpp
@@ -22,7 +22,6 @@
 
 #include "osm.h"
 #include "osmparser.h"
-#include "basiccurl.h"
 
 #include <mapnik/debug.hpp>
 
@@ -31,6 +30,7 @@
 #include <fstream>
 #include <sstream>
 #include <string>
+#include <cstring>
 
 polygon_types osm_way::ptypes;
 
@@ -43,40 +43,6 @@ bool osm_dataset::load(const char* filename,std::string const& parser)
     return false;
 }
 
-bool osm_dataset::load_from_url(std::string const& url,
-                                std::string const& bbox,
-                                std::string const& parser)
-{
-    if (parser == "libxml2")
-    {
-        MAPNIK_LOG_DEBUG(osm) << "osm_dataset: load_from_url url=" << url << ",bbox=" << bbox;
-
-        std::ostringstream str;
-        // use curl to grab the data
-        // fetch all the data we want - probably from osmxpai
-
-        str << url << "?bbox=" << bbox;
-
-        MAPNIK_LOG_DEBUG(osm) << "osm_dataset: Full url=" << str.str();
-
-        CURL_LOAD_DATA* resp = grab_http_response(str.str().c_str());
-
-        if (resp != NULL)
-        {
-            char *blx = new char[resp->nbytes + 1];
-            memcpy(blx, resp->data, resp->nbytes);
-            blx[resp->nbytes] = '\0';
-
-            MAPNIK_LOG_DEBUG(osm) << "osm_dataset: CURL Response=" << blx;
-
-            delete[] blx;
-            bool success = osmparser::parse(this, resp->data, resp->nbytes);
-            return success;
-        }
-    }
-    return false;
-}
-
 osm_dataset::~osm_dataset()
 {
     clear();
@@ -90,7 +56,7 @@ void osm_dataset::clear()
     for (unsigned int count = 0; count < ways.size(); ++count)
     {
         delete ways[count];
-        ways[count] = NULL;
+        ways[count] = nullptr;
     }
     ways.clear();
 
@@ -98,7 +64,7 @@ void osm_dataset::clear()
     for (unsigned int count = 0; count < nodes.size(); ++count)
     {
         delete nodes[count];
-        nodes[count] = NULL;
+        nodes[count] = nullptr;
     }
     nodes.clear();
 
@@ -141,7 +107,7 @@ osm_node* osm_dataset::next_node()
     {
         return *(node_i++);
     }
-    return NULL;
+    return nullptr;
 }
 
 osm_way* osm_dataset::next_way()
@@ -150,16 +116,16 @@ osm_way* osm_dataset::next_way()
     {
         return *(way_i++);
     }
-    return NULL;
+    return nullptr;
 }
 
 osm_item* osm_dataset::next_item()
 {
-    osm_item* item = NULL;
+    osm_item* item = nullptr;
     if (next_item_mode == Node)
     {
         item = next_node();
-        if (item == NULL)
+        if (item == nullptr)
         {
             next_item_mode = Way;
             rewind_ways();
@@ -225,7 +191,7 @@ std::string osm_way::to_string()
 
     for (unsigned int count = 0; count < nodes.size(); ++count)
     {
-        if (nodes[count] != NULL)
+        if (nodes[count] != nullptr)
         {
             strm << nodes[count]->id << " ";
         }
diff --git a/plugins/input/osm/osm.h b/plugins/input/osm/osm.h
index f4db4c6..86a48a9 100644
--- a/plugins/input/osm/osm.h
+++ b/plugins/input/osm/osm.h
@@ -61,6 +61,7 @@ public:
         ptypes.push_back(std::pair<std::string, std::string>("landuse", "forest"));
         ptypes.push_back(std::pair<std::string, std::string>("landuse", "industrial"));
         ptypes.push_back(std::pair<std::string, std::string>("leisure", "park"));
+        ptypes.push_back(std::pair<std::string, std::string>("area", "yes"));
     }
 };
 
@@ -108,9 +109,6 @@ public:
     ~osm_dataset();
 
     bool load(const char* name, std::string const& parser = "libxml2");
-    bool load_from_url(std::string const&,
-                       std::string const&,
-                       std::string const& parser = "libxml2");
     void clear();
     void add_node(osm_node* n) { nodes.push_back(n); }
     void add_way(osm_way* w) { ways.push_back(w); }
diff --git a/plugins/input/osm/osm_datasource.cpp b/plugins/input/osm/osm_datasource.cpp
index 0a18b49..65a66a8 100644
--- a/plugins/input/osm/osm_datasource.cpp
+++ b/plugins/input/osm/osm_datasource.cpp
@@ -31,7 +31,6 @@
 #include <mapnik/boolean.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 
 #include "osm_datasource.hpp"
 #include "osm_featureset.hpp"
@@ -53,9 +52,9 @@ osm_datasource::osm_datasource(const parameters& params)
     : datasource (params),
       extent_(),
       type_(datasource::Vector),
-      desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding", "utf-8"))
+      desc_(osm_datasource::name(), *params.get<std::string>("encoding", "utf-8"))
 {
-    osm_data_ = NULL;
+    osm_data_ = nullptr;
     std::string osm_filename = *params.get<std::string>("file", "");
     std::string parser = *params.get<std::string>("parser", "libxml2");
     std::string url = *params.get<std::string>("url", "");
@@ -64,18 +63,12 @@ osm_datasource::osm_datasource(const parameters& params)
     // load the data
     if (url != "" && bbox != "")
     {
-        // if we supplied a url and a bounding box, load from the url
-        MAPNIK_LOG_DEBUG(osm) << "osm_datasource: loading_from_url url=" << url << ",bbox=" << bbox;
-
-        if ((osm_data_ = dataset_deliverer::load_from_url(url, bbox, parser)) == NULL)
-        {
-            throw datasource_exception("Error loading from URL");
-        }
+        throw datasource_exception("Error loading from URL is no longer supported (removed in >= Mapnik 2.3.x");
     }
     else if (osm_filename != "")
     {
         // if we supplied a filename, load from file
-        if ((osm_data_ = dataset_deliverer::load_from_file(osm_filename, parser)) == NULL)
+        if ((osm_data_ = dataset_deliverer::load_from_file(osm_filename, parser)) == nullptr)
         {
             std::string s("OSM Plugin: Error loading from file '");
             s += osm_filename + "'";
@@ -99,14 +92,13 @@ osm_datasource::osm_datasource(const parameters& params)
 
     // Add the attributes to the datasource descriptor - assume they are
     // all of type String
-    for (std::set<std::string>::iterator i = keys.begin(); i != keys.end(); i++)
+    for (auto const& key : keys)
     {
-        desc_.add_descriptor(attribute_descriptor(*i, tagtypes.get_type(*i)));
+        desc_.add_descriptor(attribute_descriptor(key, tagtypes.get_type(key)));
     }
-
     // Get the bounds of the data and set extent_ accordingly
     bounds b = osm_data_->get_bounds();
-    extent_ =  box2d<double>(b.w, b.s, b.e, b.n);
+    extent_ = box2d<double>(b.w,b.s,b.e,b.n);
 }
 
 osm_datasource::~osm_datasource()
@@ -135,7 +127,7 @@ featureset_ptr osm_datasource::features(const query& q) const
     filter_in_box filter(q.get_bbox());
     // so we need to filter osm features by bbox here...
 
-    return boost::make_shared<osm_featureset<filter_in_box> >(filter,
+    return std::make_shared<osm_featureset<filter_in_box> >(filter,
                                                               osm_data_,
                                                               q.property_names(),
                                                               desc_.get_encoding());
@@ -145,21 +137,15 @@ featureset_ptr osm_datasource::features_at_point(coord2d const& pt, double tol)
 {
     filter_at_point filter(pt);
     // collect all attribute names
-    std::vector<attribute_descriptor> const& desc_vector = desc_.get_descriptors();
-    std::vector<attribute_descriptor>::const_iterator itr = desc_vector.begin();
-    std::vector<attribute_descriptor>::const_iterator end = desc_vector.end();
     std::set<std::string> names;
-
-    while (itr != end)
+    for (auto const& elem : desc_.get_descriptors())
     {
-        names.insert(itr->get_name());
-        ++itr;
+        names.insert(elem.get_name());
     }
-
-    return boost::make_shared<osm_featureset<filter_at_point> >(filter,
-                                                                osm_data_,
-                                                                names,
-                                                                desc_.get_encoding());
+    return std::make_shared<osm_featureset<filter_at_point> >(filter,
+                                                              osm_data_,
+                                                              names,
+                                                              desc_.get_encoding());
 }
 
 box2d<double> osm_datasource::envelope() const
diff --git a/plugins/input/osm/osm_datasource.hpp b/plugins/input/osm/osm_datasource.hpp
index efdd20d..fb9fcb3 100644
--- a/plugins/input/osm/osm_datasource.hpp
+++ b/plugins/input/osm/osm_datasource.hpp
@@ -34,7 +34,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
diff --git a/plugins/input/osm/osm_featureset.cpp b/plugins/input/osm/osm_featureset.cpp
index e72c597..99be92b 100644
--- a/plugins/input/osm/osm_featureset.cpp
+++ b/plugins/input/osm/osm_featureset.cpp
@@ -1,4 +1,3 @@
-
 /*****************************************************************************
  *
  * This file is part of Mapnik (c++ mapping toolkit)
@@ -22,6 +21,7 @@
  *****************************************************************************/
 
 // mapnik
+#include <mapnik/make_unique.hpp>
 #include <mapnik/geometry.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/feature_factory.hpp>
@@ -29,7 +29,6 @@
 #include <mapnik/unicode.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 
 #include "osm_featureset.hpp"
 
@@ -48,7 +47,7 @@ osm_featureset<filterT>::osm_featureset(const filterT& filter,
       tr_(new transcoder(encoding)),
       dataset_ (dataset),
       attribute_names_ (attribute_names),
-      ctx_(boost::make_shared<mapnik::context_type>())
+      ctx_(std::make_shared<mapnik::context_type>())
 {
     dataset_->rewind();
 }
@@ -65,9 +64,9 @@ feature_ptr osm_featureset<filterT>::next()
         feature = feature_factory::create(ctx_, cur_item->id);
         double lat = static_cast<osm_node*>(cur_item)->lat;
         double lon = static_cast<osm_node*>(cur_item)->lon;
-        geometry_type* point = new geometry_type(mapnik::Point);
+        std::unique_ptr<geometry_type> point = std::make_unique<geometry_type>(mapnik::geometry_type::types::Point);
         point->move_to(lon, lat);
-        feature->add_geometry(point);
+        feature->add_geometry(point.release());
     }
     else if (dataset_->current_item_is_way())
     {
@@ -83,15 +82,12 @@ feature_ptr osm_featureset<filterT>::next()
 
         if (!cur_item) return feature_ptr();
         feature = feature_factory::create(ctx_, cur_item->id);
-        geometry_type* geom;
+        mapnik::geometry_type::types geom_type = mapnik::geometry_type::types::LineString;
         if (static_cast<osm_way*>(cur_item)->is_polygon())
         {
-            geom = new geometry_type(mapnik::Polygon);
-        }
-        else
-        {
-            geom = new geometry_type(mapnik::LineString);
+            geom_type = mapnik::geometry_type::types::Polygon;
         }
+        std::unique_ptr<geometry_type> geom = std::make_unique<geometry_type>(geom_type);
 
         geom->move_to(static_cast<osm_way*>(cur_item)->nodes[0]->lon,
                       static_cast<osm_way*>(cur_item)->nodes[0]->lat);
@@ -103,7 +99,7 @@ feature_ptr osm_featureset<filterT>::next()
             geom->line_to(static_cast<osm_way*>(cur_item)->nodes[count]->lon,
                           static_cast<osm_way*>(cur_item)->nodes[count]->lat);
         }
-        feature->add_geometry(geom);
+        feature->add_geometry(geom.release());
     }
     else
     {
diff --git a/plugins/input/osm/osm_featureset.hpp b/plugins/input/osm/osm_featureset.hpp
index bf9510e..ebf11c7 100644
--- a/plugins/input/osm/osm_featureset.hpp
+++ b/plugins/input/osm/osm_featureset.hpp
@@ -27,7 +27,7 @@
 #include <set>
 
 // boost
-#include <boost/scoped_ptr.hpp>
+
 
 // mapnik
 #include <mapnik/geom_util.hpp>
@@ -57,7 +57,7 @@ public:
 private:
     filterT filter_;
     box2d<double> query_ext_;
-    boost::scoped_ptr<transcoder> tr_;
+    const std::unique_ptr<transcoder> tr_;
     std::vector<int> attr_ids_;
     mutable box2d<double> feature_ext_;
     mutable int total_geom_size;
diff --git a/plugins/input/osm/osmparser.cpp b/plugins/input/osm/osmparser.cpp
index 7238e02..b6c3d9b 100644
--- a/plugins/input/osm/osmparser.cpp
+++ b/plugins/input/osm/osmparser.cpp
@@ -4,18 +4,19 @@
 #include "osm.h"
 #include <string>
 #include <cassert>
+#include <mapnik/util/conversions.hpp>
 
-osm_item* osmparser::cur_item=NULL;
+osm_item* osmparser::cur_item=nullptr;
 mapnik::value_integer osmparser::curID=0;
 bool osmparser::in_node=false, osmparser::in_way=false;
-osm_dataset* osmparser::components=NULL;
+osm_dataset* osmparser::components=nullptr;
 std::string osmparser::error="";
-std::map<long,osm_node*> osmparser::tmp_node_store=std::map<long,osm_node*>();
+std::map<mapnik::value_integer,osm_node*> osmparser::tmp_node_store=std::map<mapnik::value_integer,osm_node*>();
 
 void osmparser::processNode(xmlTextReaderPtr reader)
 {
     xmlChar *name = xmlTextReaderName(reader);
-    if(name==NULL)
+    if(name==nullptr)
         name=xmlStrdup(BAD_CAST "--");
 
     switch(xmlTextReaderNodeType(reader))
@@ -48,7 +49,7 @@ void osmparser::startElement(xmlTextReaderPtr reader, const xmlChar *name)
         assert(xid);
         node->lat=atof((char*)xlat);
         node->lon=atof((char*)xlon);
-        node->id = atol((char*)xid);
+        mapnik::util::string2int((char *)xid, node->id);
         cur_item = node;
         tmp_node_store[node->id] = node;
         xmlFree(xid);
@@ -62,7 +63,7 @@ void osmparser::startElement(xmlTextReaderPtr reader, const xmlChar *name)
         osm_way *way=new osm_way;
         xid=xmlTextReaderGetAttribute(reader,BAD_CAST "id");
         assert(xid);
-        way->id = atol((char*)xid);
+        mapnik::util::string2int((char *)xid, way->id);
         cur_item  =  way;
         xmlFree(xid);
     }
@@ -70,7 +71,8 @@ void osmparser::startElement(xmlTextReaderPtr reader, const xmlChar *name)
     {
         xid=xmlTextReaderGetAttribute(reader,BAD_CAST "ref");
         assert(xid);
-        long ndid = atol((char*)xid);
+        mapnik::value_integer ndid;
+        mapnik::util::string2int((char *)xid, ndid);
         if(tmp_node_store.find(ndid)!=tmp_node_store.end())
         {
             (static_cast<osm_way*>(cur_item))->nodes.push_back
@@ -125,7 +127,7 @@ bool osmparser::parse(osm_dataset *ds,char* data, int nbytes)
     // libxml2.html, converted from Objective-C to straight C
 
     components=ds;
-    xmlTextReaderPtr reader = xmlReaderForMemory(data,nbytes,NULL,NULL,0);
+    xmlTextReaderPtr reader = xmlReaderForMemory(data,nbytes,nullptr,nullptr,0);
     int ret=do_parse(reader);
     xmlFreeTextReader(reader);
     return (ret==0) ? true:false;
@@ -135,7 +137,7 @@ bool osmparser::parse(osm_dataset *ds,char* data, int nbytes)
 int osmparser::do_parse(xmlTextReaderPtr reader)
 {
     int ret=-1;
-    if(reader!=NULL)
+    if(reader!=nullptr)
     {
         ret = xmlTextReaderRead(reader);
         while(ret==1)
diff --git a/plugins/input/osm/osmparser.h b/plugins/input/osm/osmparser.h
index 4e8d0f3..9f2aeac 100644
--- a/plugins/input/osm/osmparser.h
+++ b/plugins/input/osm/osmparser.h
@@ -46,7 +46,7 @@ private:
     static bool in_node, in_way;
     static osm_dataset* components;
     static std::string error;
-    static std::map<long, osm_node*> tmp_node_store;
+    static std::map<mapnik::value_integer, osm_node*> tmp_node_store;
 
     static int do_parse(xmlTextReaderPtr);
 };
diff --git a/plugins/input/osm/render.cpp b/plugins/input/osm/render.cpp
index e301b1c..707ac12 100644
--- a/plugins/input/osm/render.cpp
+++ b/plugins/input/osm/render.cpp
@@ -56,8 +56,8 @@ int main(int argc,char *argv[])
         p["file"] = argv[6];
         for (int count = 0; count < m.layer_count(); count++)
         {
-            mapnik::parameters q = m.getLayer(count).datasource()->params();
-            m.getLayer(count).set_datasource(mapnik::datasource_cache::instance().create(p));
+            mapnik::parameters q = m.get_layer(count).datasource()->params();
+            m.get_layer(count).set_datasource(mapnik::datasource_cache::instance().create(p));
         }
     }
 
diff --git a/plugins/input/osm/test.cpp b/plugins/input/osm/test.cpp
deleted file mode 100644
index a01aa56..0000000
--- a/plugins/input/osm/test.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "osm.h"
-#include <iostream>
-using std::cout;
-using std::endl;
-
-int main(int argc,char* argv[])
-{
-    if(argc>=2)
-    {
-        osm_dataset dataset(argv[1]);
-        bounds b = dataset.get_bounds();
-        osm_item *item;
-        dataset.rewind();
-        while((item=dataset.next_item())!=NULL)
-        {
-            std::cerr << item->to_string() << endl;
-        }
-    }
-    else
-    {
-        std::cerr<<"Usage: test OSMfile"<<std::endl;
-        exit(1);
-    }
-    return 0;
-}
diff --git a/plugins/input/osm/test.osm b/plugins/input/osm/test.osm
deleted file mode 100644
index eb918e5..0000000
--- a/plugins/input/osm/test.osm
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<osm version='0.5' generator='JOSM'>
-  <bound box='0.0,0.0,0.0,0.0' origin='http://www.openstreetmap.org/api/0.5' />
-  <bound box='50.9,-1.45,51.0,-1.35' origin='http://www.openstreetmap.org/api/0.5' />
-  <node id='28418532' timestamp='2007-05-24T10:51:06+01:00' visible='true' lat='50.9664497' lon='-1.3641324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109765' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true' lat='50.9300913' lon='-1.4308423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <way id='4698470' timestamp='2007-06-02T19:44:15+01:00' visible='true'>
-    <nd ref='29874141' />
-    <nd ref='29874142' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Arnold Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910609' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20102965' />
-    <nd ref='20133094' />
-    <nd ref='20133102' />
-    <nd ref='20133106' />
-    <nd ref='20133109' />
-    <nd ref='20133112' />
-    <nd ref='20133120' />
-    <nd ref='20133121' />
-    <nd ref='20133126' />
-    <nd ref='20133127' />
-    <nd ref='20133128' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Paulet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-</osm>
diff --git a/plugins/input/osm/test.xml b/plugins/input/osm/test.xml
deleted file mode 100644
index 5c25294..0000000
--- a/plugins/input/osm/test.xml
+++ /dev/null
@@ -1,503 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE Map>
-<Map bgcolor="#b5d0d0" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
- 
-  <Style name="coast-poly">
-     <Rule>
-     <PolygonSymbolizer>
-      <CssParameter name="fill">#f2efe9</CssParameter>
-    </PolygonSymbolizer>
-  </Rule>
-  </Style>
-
-  <Style name="coast-line">
-     <Rule>
-     <LineSymbolizer>
-      <CssParameter name="stroke">skyblue</CssParameter>
-    </LineSymbolizer>
-  </Rule>
-  </Style>
-
-  <Style name="leisure">
-    <Rule>
-      <Filter>[landuse] = 'reservoir'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#89bac6</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[landuse] = 'cemetery'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">grey</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[landuse] = 'wood' or [landuse] = 'forest'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#aed1a0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[leisure] = 'park' or [leisure] = 'common' or
-      [leisure] = 'golf_course'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#d8e8d0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'wood'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#aed1a0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'heath'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#ffe0c0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-  </Style>
- 
-
-  <Style name='lakes'>
-    <Rule>
-      <Filter>[natural] = 'water'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#89bac6</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-  </Style>
-
-
-
-  <Style name="text">
-    <Rule>
-      <Filter>[place] = 'city'</Filter>
-      <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" size="16" fill="#000" halo_radius="2" wrap_width="0"/>
-    </Rule>
-    <Rule>
-      <Filter>[place] = 'town'</Filter>
-      <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" size="14" fill="#000" halo_radius="2" wrap_width="20"/>
-    </Rule>
-     <Rule>
-      <Filter>[place] = 'village' or [place] = 'suburb'</Filter>
-      <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" size="13" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-     <Rule>
-      <Filter>[place] = 'hamlet'</Filter>
-      <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" size="12" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'peak'</Filter>
-      <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" size="11" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-  <Rule>
-    <Filter>[natural] = 'wood' or [natural] = 'water' or [natural] = 'heath'
-    or [leisure] = 'golf_course' </Filter>
-    <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" 
-    size="10" fill="#000" halo_radius="2" wrap_width="0" />
-  </Rule>
-  </Style>
-  
-   <Style name="river">
-    <Rule>
-      <Filter>[waterway] = 'river'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#89bac6</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-      <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" size="9" fill="white" placement="line"/>
-    </Rule>
-  </Style>
-   <Style name="stream">
-    <Rule>
-      <Filter>[waterway] = 'stream'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#89bac6</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-      <TextSymbolizer name="name" face_name="Bitstream Vera Sans Roman" size="9" fill="white" placement="line"/>
-    </Rule>
-  </Style>
-  
-  
-  <Style name="roads-casing">
-    <Rule>
-      <Filter>[highway] = 'motorway' or [highway]='motorway_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#506077</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'trunk' or [highway] = 'trunk_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#477147</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'primary' or [highway] = 'primary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#8d4346</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'secondary' or [highway] = 'secondary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#a37b48</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'tertiary' or [highway] = 'tertiary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'minor' or [highway] = 'unclassified'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'residential' or [highway] = 'service'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'unsurfaced' or [highway] = 'track'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-    <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="motorway">
-    <Rule>
-      <Filter>[highway] = 'motorway' or [highway] = 'motorway_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#809bc0</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="trunk">
-    <Rule>
-      <Filter>[highway] = 'trunk' or [highway] = 'trunk_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#7fc97f</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  
-  <Style name="primary">
-    <Rule>
-      <Filter>[highway] = 'primary' or [highway] = 'primary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#e46d71</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="secondary">
-    <Rule>
-      <Filter>[highway] = 'secondary' or [highway] = 'secondary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fdbf6f</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Style name="tertiary">
-    <Rule>
-      <Filter>[highway] = 'tertiary' or [highway] = 'tertiary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#ffffc0</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Style name="unclassified">
-    <Rule>
-      <Filter>[highway] = 'minor' or [highway] = 'unclassified'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-   <Style name="residential">
-    <Rule>
-      <Filter>[highway] = 'residential' or [highway] = 'service' or
-      [highway] = 'unsurfaced' or [highway] = 'track'</Filter> 
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-    
-  <Style name="bridleway">
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = ''</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">magenta</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [foot] = 'yes' and [horse] = 'yes'
-    and [bicycle] = 'yes'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'narrow'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#00c000</CssParameter>
-        <CssParameter name="stroke-width">1.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,5</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'path'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#00c000</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">2,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'gravel'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">brown</CssParameter>
-    <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'track'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">brown</CssParameter>
-    <CssParameter name="stroke-dasharray">2,4</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="footway">
-    <Rule>
-      <Filter>[highway] = 'footway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">magenta</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'footway' and [foot] = 'yes'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="cycleway">
-    <Rule>
-      <Filter>[highway] = 'cycleway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">blue</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">4,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="byway">
-    <Rule>
-      <Filter>[highway] = 'byway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="contours">
-    <Rule>
-    <Filter>[major] = 1</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fb9b67</CssParameter>
-        <CssParameter name="stroke-width">1.0</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  <Rule>
-      <ElseFilter/>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fb9b67</CssParameter>
-        <CssParameter name="stroke-width">0.5</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="contours-text">
-    <Rule>
-      <TextSymbolizer name="height" face_name="Bitstream Vera Sans Roman" 
-      size="8" fill="#fb9b67" halo_radius="0" placement="line"/>
-    </Rule>
-  </Style>
-
-  <Layer name="roads" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>roads-casing</StyleName>
-    <StyleName>footway</StyleName>
-    <StyleName>cycleway</StyleName>
-    <StyleName>bridleway</StyleName>
-    <StyleName>byway</StyleName>
-    <StyleName>residential</StyleName>
-    <StyleName>unclassified</StyleName>
-    <StyleName>tertiary</StyleName>
-    <StyleName>secondary</StyleName>
-    <StyleName>primary</StyleName>
-    <StyleName>trunk</StyleName>
-    <StyleName>motorway</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="parser">libxml2</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-   </Layer>
-</Map>
diff --git a/plugins/input/osm/test2.osm b/plugins/input/osm/test2.osm
deleted file mode 100644
index 425ed8c..0000000
--- a/plugins/input/osm/test2.osm
+++ /dev/null
@@ -1,84526 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<osm version='0.5' generator='JOSM'>
-  <bound box='0.0,0.0,0.0,0.0' origin='http://www.openstreetmap.org/api/0.5' />
-  <bound box='50.9,-1.45,51.0,-1.35' origin='http://www.openstreetmap.org/api/0.5' />
-  <node id='28418532' timestamp='2007-05-24T10:51:06+01:00' visible='true' lat='50.9664497' lon='-1.3641324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109765' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true' lat='50.9300913' lon='-1.4308423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419697' timestamp='2006-07-24T21:03:58+01:00' user='nickw' visible='true' lat='50.9168964' lon='-1.4277769' />
-  <node id='675837' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.9291124' lon='-1.3767433' />
-  <node id='28194867' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9431605' lon='-1.4064618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971189' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9053172' lon='-1.4000942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962303' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9586157' lon='-1.3687782' />
-  <node id='122344822' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true' lat='50.9195434' lon='-1.4369515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998555' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.9647545' lon='-1.4258056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727693' timestamp='2007-11-20T11:10:43+00:00' user='Gregory Williams' visible='true' lat='50.9059607' lon='-1.3509683'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='28874072' timestamp='2007-05-08T14:50:37+01:00' visible='true' lat='50.9383567' lon='-1.4412603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226207' timestamp='2007-06-11T22:28:57+01:00' visible='true' lat='50.9829395' lon='-1.3519563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700399' timestamp='2007-04-05T14:17:50+01:00' user='Dean Earley' visible='true' lat='50.9230152' lon='-1.3907234' />
-  <node id='29632216' timestamp='2007-05-26T19:21:16+01:00' visible='true' lat='50.9580451' lon='-1.3672435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87799819' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8966323' lon='-1.3884412' />
-  <node id='254946' timestamp='2006-09-04T02:08:07+01:00' user='Dean Earley' visible='true' lat='50.9506862' lon='-1.4160197' />
-  <node id='28244106' timestamp='2007-04-29T20:35:18+01:00' user='Andy Street' visible='true' lat='50.9042287' lon='-1.349482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815437' timestamp='2007-05-31T21:37:06+01:00' visible='true' lat='50.9872612' lon='-1.3547337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830678' timestamp='2007-05-05T09:03:34+01:00' user='nickw' visible='true' lat='50.9236918' lon='-1.3615579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122324312' timestamp='2007-11-18T19:05:24+00:00' user='nickw' visible='true' lat='50.9142642' lon='-1.4371501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657729' timestamp='2007-04-05T14:17:50+01:00' user='Dean Earley' visible='true' lat='50.9150816' lon='-1.3310583' />
-  <node id='42189114' timestamp='2007-09-05T18:30:25+01:00' user='mike l' visible='true' lat='50.9354694' lon='-1.3932851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345064' timestamp='2007-04-30T23:00:38+01:00' user='nickw' visible='true' lat='50.9270157' lon='-1.3578704'>
-    <tag k='name' v='ONIBURY CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071361' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9178096' lon='-1.3695749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157176107' timestamp='2007-12-08T19:49:41+00:00' user='nickw' visible='true' lat='50.9403419' lon='-1.4491496'>
-    <tag k='religion' v='christian' />
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='Lord's Hill Church' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935737' timestamp='2007-05-11T00:50:35+01:00' visible='true' lat='50.939117' lon='-1.4455151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961027' timestamp='2006-11-11T17:12:17+00:00' user='Dean Earley' visible='true' lat='50.9461696' lon='-1.5108683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740741' timestamp='2008-01-29T12:06:35+00:00' user='Dean Earley' visible='true' lat='50.966657' lon='-1.3504354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275656' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true' lat='50.9113509' lon='-1.430409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745506' timestamp='2006-09-03T01:40:49+01:00' user='Dean Earley' visible='true' lat='50.9559721' lon='-1.4015426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212542' timestamp='2007-12-08T20:16:58+00:00' user='nickw' visible='true' lat='50.9445589' lon='-1.447816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689170' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9403925' lon='-1.3726627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728899' timestamp='2007-05-28T19:12:41+01:00' visible='true' lat='50.9720131' lon='-1.3613541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226996' timestamp='2007-06-11T22:32:13+01:00' visible='true' lat='50.9821675' lon='-1.3528207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254373' timestamp='2006-09-02T14:28:40+01:00' user='Dean Earley' visible='true' lat='50.9163011' lon='-1.4064912' />
-  <node id='26728541' timestamp='2007-03-23T22:52:49+00:00' user='nickw' visible='true' lat='50.9010106' lon='-1.3666923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244205' timestamp='2007-04-29T20:36:22+01:00' user='Andy Street' visible='true' lat='50.9026013' lon='-1.3530651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563364' timestamp='2007-04-23T23:02:19+01:00' visible='true' lat='50.928567' lon='-1.3973274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745491' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9568725' lon='-1.4007357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642315' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.950947' lon='-1.3617611' />
-  <node id='301599' timestamp='2005-12-08T22:43:53+00:00' user='nickw' visible='true' lat='50.9316516' lon='-1.402688' />
-  <node id='30161114' timestamp='2007-06-10T18:13:42+01:00' visible='true' lat='50.9711788' lon='-1.353759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976762' timestamp='2007-04-29T20:52:51+01:00' user='Dean Earley' visible='true' lat='50.9313599' lon='-1.4212329'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419451' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9413269' lon='-1.3719125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249917' timestamp='2007-04-29T21:41:47+01:00' visible='true' lat='50.9167463' lon='-1.4550919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014688' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9308001' lon='-1.3719377' />
-  <node id='91118186' timestamp='2007-10-29T08:10:31+00:00' user='nickw' visible='true' lat='50.9297814' lon='-1.4447788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668176' timestamp='2007-01-04T21:05:55+00:00' user='nickw' visible='true' lat='50.9836317' lon='-1.4135414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26004507' timestamp='2007-12-07T20:58:34+00:00' user='Steve Jeapes' visible='true' lat='50.9164417' lon='-1.3963744'>
-    <tag k='amenity' v='parking' />
-    <tag k='note' v='Free up to 24 hours' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='25947173' timestamp='2007-02-16T20:51:23+00:00' user='nickw' visible='true' lat='50.9120704' lon='-1.3938978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329470' timestamp='2007-04-05T14:17:50+01:00' user='Dean Earley' visible='true' lat='50.9338' lon='-1.38827' />
-  <node id='206162414' timestamp='2008-01-04T19:28:05+00:00' user='nickw' visible='true' lat='50.9724095' lon='-1.3819937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781154' timestamp='2007-03-25T18:42:11+01:00' user='Dean Earley' visible='true' lat='50.9015884' lon='-1.373791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254356' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9468995' lon='-1.4268157' />
-  <node id='10217211' timestamp='2006-09-04T01:04:05+01:00' user='Dean Earley' visible='true' lat='50.9160809' lon='-1.3590954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28849623' timestamp='2007-07-30T16:07:01+01:00' visible='true' lat='50.9155026' lon='-1.4124596'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='comment' v='originally added by someone else, but this is presumably the location of St Mark's church' />
-    <tag k='name' v='Saint Marks' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730540' timestamp='2007-05-28T19:37:06+01:00' visible='true' lat='50.9678835' lon='-1.3797769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913890' timestamp='2007-06-03T15:59:39+01:00' visible='true' lat='50.985294' lon='-1.357495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583039' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9389389' lon='-1.4322099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145253' timestamp='2007-05-16T00:58:57+01:00' visible='true' lat='50.9227007' lon='-1.3803923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125570131' timestamp='2007-11-20T11:50:15+00:00' user='Nick Dyer' visible='true' lat='50.9627409' lon='-1.4231124' />
-  <node id='206163289' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.969651' lon='-1.3852916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582962' timestamp='2007-05-02T23:57:48+01:00' visible='true' lat='50.9420119' lon='-1.4256342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051787' timestamp='2007-10-26T17:11:21+01:00' user='Nick Dyer' visible='true' lat='50.9970126' lon='-1.4625925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689073' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9424831' lon='-1.3904136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31072237' timestamp='2007-06-30T12:31:58+01:00' visible='true' lat='50.9696928' lon='-1.3548647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911930' timestamp='2007-06-03T15:38:21+01:00' visible='true' lat='50.9865575' lon='-1.3571777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161120' timestamp='2007-06-10T18:13:43+01:00' visible='true' lat='50.9728851' lon='-1.3546312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194852' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9463453' lon='-1.4091783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964113' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9212772' lon='-1.3774591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009189' timestamp='2007-05-12T15:33:36+01:00' user='nickw' visible='true' lat='50.9300466' lon='-1.3534641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269310' timestamp='2006-12-14T23:57:11+00:00' user='Dean Earley' visible='true' lat='50.9697619' lon='-1.3369111' />
-  <node id='15740481' timestamp='2006-09-16T19:31:31+01:00' user='nickw' visible='true' lat='50.9927886' lon='-1.3499162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189060' timestamp='2006-11-22T23:51:57+00:00' user='crouchingbadger' visible='true' lat='50.9579464' lon='-1.4484603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801035' timestamp='2007-05-04T01:58:34+01:00' user='Dean Earley' visible='true' lat='50.9420363' lon='-1.4498941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577040' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9190979' lon='-1.4723901' />
-  <node id='28194366' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9441221' lon='-1.439376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966365' timestamp='2007-02-18T20:18:24+00:00' visible='true' lat='50.9154181' lon='-1.3638015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639996' timestamp='2007-02-04T22:51:23+00:00' user='Dean Earley' visible='true' lat='50.9092274' lon='-1.3708948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398362' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.946237' lon='-1.4227944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252919' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9462568' lon='-1.4295207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924230' timestamp='2007-02-13T19:43:31+00:00' user='Dean Earley' visible='true' lat='50.9657494' lon='-1.3860203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706654' timestamp='2007-04-05T14:17:51+01:00' user='Dean Earley' visible='true' lat='50.9100312' lon='-1.37275' />
-  <node id='28236176' timestamp='2007-04-29T19:26:23+01:00' user='Andy Street' visible='true' lat='50.8984383' lon='-1.3574612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596756' timestamp='2007-11-02T14:14:23+00:00' user='Nick Dyer' visible='true' lat='50.9019911' lon='-1.4094866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957211' timestamp='2007-04-03T00:51:30+01:00' user='Dean Earley' visible='true' lat='50.9172762' lon='-1.4269518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111076' timestamp='2006-10-22T23:24:09+01:00' user='Ben' visible='true' lat='51.0143586' lon='-1.3914713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160378137' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9212427' lon='-1.4665695' />
-  <node id='48958681' timestamp='2007-09-10T23:55:15+01:00' visible='true' lat='50.9059096' lon='-1.4084256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464266' timestamp='2007-05-22T00:19:16+01:00' user='Dean Earley' visible='true' lat='50.9503612' lon='-1.404431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275639' timestamp='2007-03-24T16:33:38+00:00' user='Dean Earley' visible='true' lat='50.921369' lon='-1.4253267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360193' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.956297' lon='-1.3717741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162633' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.9712148' lon='-1.3826195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243567' timestamp='2007-04-29T20:24:39+01:00' user='Dean Earley' visible='true' lat='50.9384917' lon='-1.4121586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28539402' timestamp='2007-05-02T21:44:58+01:00' user='nickw' visible='true' lat='50.9166257' lon='-1.3530983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124218' timestamp='2007-06-09T19:35:54+01:00' user='nickw' visible='true' lat='50.9249723' lon='-1.3492104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271281' timestamp='2007-12-10T19:45:11+00:00' user='sladen' visible='true' lat='50.8553367' lon='-1.5050017'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Beaulieu Road' />
-  </node>
-  <node id='90582770' timestamp='2007-10-28T20:25:32+00:00' user='Nick Dyer' visible='true' lat='50.9254661' lon='-1.442624' />
-  <node id='29466132' timestamp='2007-05-22T00:38:16+01:00' user='Dean Earley' visible='true' lat='50.9816293' lon='-1.4447713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071254' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9213183' lon='-1.3597648'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342610' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9115904' lon='-1.3634139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239026' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.907303' lon='-1.4125069' />
-  <node id='254899' timestamp='2007-02-11T00:33:25+00:00' visible='true' lat='50.909675' lon='-1.4084884' />
-  <node id='206162098' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true' lat='50.9716839' lon='-1.377921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254339' timestamp='2005-11-15T15:39:08+00:00' user='nickw' visible='true' lat='50.9658014' lon='-1.4136654' />
-  <node id='402757' timestamp='2007-04-05T14:17:51+01:00' user='Dean Earley' visible='true' lat='50.9176382' lon='-1.4038782' />
-  <node id='28179487' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.9535285' lon='-1.405571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254552' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9230383' lon='-1.3612822' />
-  <node id='28240344' timestamp='2007-04-29T20:02:57+01:00' user='Andy Street' visible='true' lat='50.9082589' lon='-1.3487285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896265' timestamp='2007-02-13T19:24:11+00:00' user='Dean Earley' visible='true' lat='50.9696647' lon='-1.3894739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124661' timestamp='2007-06-09T19:48:37+01:00' user='nickw' visible='true' lat='50.9305352' lon='-1.3521159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600508' timestamp='2006-12-16T10:14:00+00:00' user='nickw' visible='true' lat='50.917395' lon='-1.4330287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132722' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='51.0003942' lon='-1.3565342' />
-  <node id='330227' timestamp='2006-11-11T22:14:27+00:00' user='Dean Earley' visible='true' lat='50.9464' lon='-1.42387' />
-  <node id='26781169' timestamp='2007-03-25T18:42:13+01:00' user='Dean Earley' visible='true' lat='50.9017911' lon='-1.3754713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325045' timestamp='2006-06-04T00:30:44+01:00' user='Dean Earley' visible='true' lat='50.9469905' lon='-1.472441' />
-  <node id='29929022' timestamp='2007-06-03T21:58:09+01:00' visible='true' lat='50.9760944' lon='-1.3631721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530530' timestamp='2007-05-23T13:04:50+01:00' visible='true' lat='50.9838444' lon='-1.35389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957180' timestamp='2006-11-10T21:58:50+00:00' user='nickw' visible='true' lat='50.9134793' lon='-1.4185928'>
-    <tag k='name' v='ATHERLEY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117332' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9314405' lon='-1.4449775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903649' timestamp='2007-05-09T23:57:41+01:00' visible='true' lat='50.9596698' lon='-1.3540542'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124674' timestamp='2007-06-09T19:48:39+01:00' user='nickw' visible='true' lat='50.9313491' lon='-1.3530397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157238279' timestamp='2007-12-08T20:33:29+00:00' user='nickw' visible='true' lat='50.9472' lon='-1.4476583'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984738' timestamp='2007-01-10T00:13:55+00:00' user='nickw' visible='true' lat='50.9442652' lon='-1.3907346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931383' timestamp='2007-06-03T22:43:09+01:00' visible='true' lat='50.9938754' lon='-1.3735643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624980' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.9016025' lon='-1.3698761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392430' timestamp='2007-05-20T18:02:22+01:00' visible='true' lat='50.9633679' lon='-1.3545597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243592' timestamp='2007-04-29T20:24:58+01:00' user='Dean Earley' visible='true' lat='50.9353312' lon='-1.4163373'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346973' timestamp='2007-04-30T23:26:37+01:00' user='nickw' visible='true' lat='50.899862' lon='-1.3624579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90593916' timestamp='2007-10-28T20:36:49+00:00' user='Nick Dyer' visible='true' lat='50.9133944' lon='-1.4469928' />
-  <node id='10217898' timestamp='2006-07-09T23:00:37+01:00' user='Dean Earley' visible='true' lat='50.9276393' lon='-1.3648777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169415702' timestamp='2007-12-14T21:31:22+00:00' user='nickw' visible='true' lat='50.9291883' lon='-1.4258983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13104968' timestamp='2006-09-02T12:59:32+01:00' user='Dean Earley' visible='true' lat='50.961524' lon='-1.3912486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021762' timestamp='2007-04-03T00:52:41+01:00' user='Ben' visible='true' lat='50.9401388' lon='-1.3792287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325660' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9313108' lon='-1.4308784' />
-  <node id='518800' timestamp='2007-04-05T14:17:51+01:00' user='Dean Earley' visible='true' lat='50.9279' lon='-1.38355' />
-  <node id='28830648' timestamp='2007-05-05T09:03:31+01:00' user='nickw' visible='true' lat='50.9262077' lon='-1.3643277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372813' timestamp='2007-05-01T10:05:25+01:00' visible='true' lat='50.9300415' lon='-1.4337037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278531' timestamp='2007-08-14T04:48:00+01:00' user='andrewpmk' visible='true' lat='50.9075324' lon='-1.3984963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418541' timestamp='2007-05-02T17:07:50+01:00' visible='true' lat='50.9614476' lon='-1.3713045'>
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13565094' timestamp='2007-06-12T00:08:12+01:00' user='nickw' visible='true' lat='50.9342541' lon='-1.3520782'>
-    <tag k='name' v='Torridge Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29998362' timestamp='2007-06-05T23:05:26+01:00' user='nickw' visible='true' lat='50.9730743' lon='-1.4222494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464274' timestamp='2007-05-22T00:19:17+01:00' user='Dean Earley' visible='true' lat='50.9381578' lon='-1.4044375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87990029' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9021394' lon='-1.3946799' />
-  <node id='28904030' timestamp='2007-05-10T01:07:18+01:00' user='LivingWithDragons' visible='true' lat='50.981134' lon='-1.4442293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388907' timestamp='2007-04-05T14:17:51+01:00' user='Dean Earley' visible='true' lat='50.9441' lon='-1.39958' />
-  <node id='20130974' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9296366' lon='-1.3562313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583069' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.938147' lon='-1.4348393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632190' timestamp='2007-05-26T19:20:42+01:00' visible='true' lat='50.9556199' lon='-1.3686281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726188' timestamp='2006-09-02T18:21:41+01:00' user='Dean Earley' visible='true' lat='50.9099623' lon='-1.4015632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675876' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9296372' lon='-1.3706493' />
-  <node id='29632796' timestamp='2007-05-26T20:05:09+01:00' visible='true' lat='50.960106' lon='-1.3701471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903406' timestamp='2007-05-09T23:28:30+01:00' visible='true' lat='50.9458253' lon='-1.363882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957228' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9182897' lon='-1.4254489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549369' timestamp='2007-05-24T11:22:50+01:00' visible='true' lat='50.9637766' lon='-1.3713393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952631' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9335664' lon='-1.3790416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924082' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9327931' lon='-1.3828328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216415' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9210432' lon='-1.3568754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706270' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9124662' lon='-1.3801136'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29026803' timestamp='2007-05-13T10:10:58+01:00' user='nickw' visible='true' lat='50.9177215' lon='-1.4092179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254646' timestamp='2007-12-10T19:11:41+00:00' user='sladen' visible='true' lat='50.9141544' lon='-1.3912638' />
-  <node id='24949991' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9823044' lon='-1.3833957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431962' timestamp='2007-06-16T16:25:57+01:00' visible='true' lat='50.9788417' lon='-1.3542588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413147' timestamp='2007-04-05T14:17:52+01:00' user='Dean Earley' visible='true' lat='50.9377871' lon='-1.3873143' />
-  <node id='305629' timestamp='2006-12-16T17:47:17+00:00' user='David Currie' visible='true' lat='50.9839536' lon='-1.3861241' />
-  <node id='21600594' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9896542' lon='-1.4018054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30513365' timestamp='2007-06-17T22:40:51+01:00' visible='true' lat='50.9845709' lon='-1.3511616'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668330' timestamp='2007-01-04T21:06:42+00:00' user='nickw' visible='true' lat='50.9878339' lon='-1.4033696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973111' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9046838' lon='-1.4091072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926523' timestamp='2007-06-03T20:59:01+01:00' visible='true' lat='50.9798191' lon='-1.3667272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282084' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9759542' lon='-1.4069818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348145' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9316344' lon='-1.3678357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110917' timestamp='2006-10-27T23:39:33+01:00' user='Dean Earley' visible='true' lat='50.9351096' lon='-1.3659271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706669' timestamp='2007-04-05T14:17:52+01:00' user='Dean Earley' visible='true' lat='50.9060453' lon='-1.3804562' />
-  <node id='675889' timestamp='2007-11-11T18:09:42+00:00' user='Dean Earley' visible='true' lat='50.9232351' lon='-1.3747284' />
-  <node id='9312072' timestamp='2007-02-18T21:30:55+00:00' visible='true' lat='50.9135235' lon='-1.3965877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282107' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.9775203' lon='-1.4068843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347580' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9256907' lon='-1.3556436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='55420344' timestamp='2007-09-20T19:44:50+01:00' user='mike l' visible='true' lat='50.937122' lon='-1.3775567' />
-  <node id='28259921' timestamp='2007-04-29T23:09:28+01:00' user='Andy Street' visible='true' lat='50.9030772' lon='-1.3480498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689127' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.940912' lon='-1.3856754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236142' timestamp='2007-04-29T19:25:59+01:00' user='Andy Street' visible='true' lat='50.9078839' lon='-1.3540987'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331361' timestamp='2007-04-05T14:17:52+01:00' user='Dean Earley' visible='true' lat='50.9462' lon='-1.40486' />
-  <node id='30223926' timestamp='2007-06-11T22:03:09+01:00' visible='true' lat='50.9843556' lon='-1.3516981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089108' timestamp='2007-06-08T18:12:06+01:00' visible='true' lat='50.9664809' lon='-1.3804016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711870' timestamp='2007-05-28T15:03:27+01:00' visible='true' lat='50.9858605' lon='-1.3549137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949829' timestamp='2007-01-07T12:38:44+00:00' user='nickw' visible='true' lat='50.9878366' lon='-1.3799132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254961' timestamp='2006-09-02T13:46:14+01:00' user='Dean Earley' visible='true' lat='50.9402946' lon='-1.4206053' />
-  <node id='254962' timestamp='2006-09-02T13:46:14+01:00' user='Dean Earley' visible='true' lat='50.940752' lon='-1.4203292' />
-  <node id='325180' timestamp='2006-11-11T17:20:09+00:00' user='Dean Earley' visible='true' lat='50.9534618' lon='-1.4067245' />
-  <node id='19890099' timestamp='2006-10-27T00:48:05+01:00' user='Dean Earley' visible='true' lat='50.9140348' lon='-1.392224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927563' timestamp='2007-06-03T21:24:30+01:00' visible='true' lat='50.9804396' lon='-1.3711373'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874146' timestamp='2007-06-02T19:43:16+01:00' visible='true' lat='50.9606446' lon='-1.3599479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549384' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9643834' lon='-1.3755759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548669' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.9629084' lon='-1.3622927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668343' timestamp='2007-01-04T21:06:43+00:00' user='nickw' visible='true' lat='50.9849012' lon='-1.389433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254424' timestamp='2005-11-15T15:40:08+00:00' user='nickw' visible='true' lat='50.9265019' lon='-1.3658479' />
-  <node id='13707216' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.851859' lon='-1.322311'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='298290' timestamp='2006-09-02T12:59:32+01:00' user='Dean Earley' visible='true' lat='50.950738' lon='-1.3995333' />
-  <node id='28936012' timestamp='2007-05-11T00:59:51+01:00' visible='true' lat='50.9416643' lon='-1.4413766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762785' timestamp='2007-05-29T21:12:06+01:00' visible='true' lat='50.9881001' lon='-1.3553326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29693182' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8952139' lon='-1.3923894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348713' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9829859' lon='-1.4329442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325203' timestamp='2005-12-16T22:59:48+00:00' user='80n' visible='true' lat='50.9435558' lon='-1.3629647' />
-  <node id='29871568' timestamp='2007-06-02T18:40:10+01:00' visible='true' lat='50.9159433' lon='-1.3516029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728910' timestamp='2007-05-28T19:12:42+01:00' visible='true' lat='50.9712781' lon='-1.3615206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122342999' timestamp='2007-11-18T19:15:52+00:00' user='nickw' visible='true' lat='50.9190957' lon='-1.4380293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141386' timestamp='2007-03-24T16:33:39+00:00' user='Dean Earley' visible='true' lat='50.925968' lon='-1.427125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301573' timestamp='2007-02-18T21:30:36+00:00' visible='true' lat='50.9029756' lon='-1.3980523' />
-  <node id='28243652' timestamp='2007-04-29T20:25:07+01:00' user='Dean Earley' visible='true' lat='50.9387641' lon='-1.4132548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245153987' timestamp='2008-02-03T06:25:10+00:00' user='sladen' visible='true' lat='50.907975' lon='-1.3962261' />
-  <node id='29815642' timestamp='2007-05-31T21:47:57+01:00' visible='true' lat='50.9899271' lon='-1.3574998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997538' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0017629' lon='-1.350431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815659' timestamp='2007-05-31T21:48:01+01:00' visible='true' lat='50.9909805' lon='-1.35331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19229535' timestamp='2007-05-22T00:19:44+01:00' user='Dean Earley' visible='true' lat='50.9353255' lon='-1.413127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282118' timestamp='2007-01-17T21:10:13+00:00' user='David Currie' visible='true' lat='50.9767706' lon='-1.4084863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66589146' timestamp='2007-10-12T14:03:58+01:00' user='SteveC' visible='true' lat='50.9305406' lon='-1.4483153' />
-  <node id='388873' timestamp='2007-04-05T14:17:53+01:00' user='Dean Earley' visible='true' lat='50.9348' lon='-1.39868' />
-  <node id='20961023' timestamp='2006-11-11T17:12:07+00:00' user='Dean Earley' visible='true' lat='50.9436447' lon='-1.5430748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928068' timestamp='2007-06-03T21:43:52+01:00' visible='true' lat='50.9800022' lon='-1.3696045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87800150' timestamp='2007-10-26T11:41:57+01:00' user='Nick Dyer' visible='true' lat='50.9013472' lon='-1.4422485' />
-  <node id='10908579' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9380771' lon='-1.3613648' />
-  <node id='28246071' timestamp='2007-10-16T17:47:53+01:00' user='Dean Earley' visible='true' lat='50.9397281' lon='-1.4278902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096950' timestamp='2007-06-08T23:24:13+01:00' visible='true' lat='50.9656038' lon='-1.3742944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280989' timestamp='2007-04-20T23:53:16+01:00' user='Dean Earley' visible='true' lat='50.91631' lon='-1.3672565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504275' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.9997986' lon='-1.3536391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636784' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9487624' lon='-1.4090803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263992' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9640865' lon='-1.3711708' />
-  <node id='28582925' timestamp='2007-05-02T23:57:42+01:00' visible='true' lat='50.9420896' lon='-1.4268496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90589191' timestamp='2007-10-28T20:32:03+00:00' user='Nick Dyer' visible='true' lat='50.9019692' lon='-1.4204711' />
-  <node id='30780866' timestamp='2007-10-28T21:01:28+00:00' user='Nick Dyer' visible='true' lat='50.9075812' lon='-1.4111616'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='30411001' timestamp='2007-06-15T23:09:53+01:00' visible='true' lat='50.9745814' lon='-1.357725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461238' timestamp='2007-05-21T23:43:15+01:00' user='nickw' visible='true' lat='50.9023567' lon='-1.3967005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931712' timestamp='2007-04-05T14:17:53+01:00' user='Dean Earley' visible='true' lat='50.9227621' lon='-1.3851898' />
-  <node id='28935771' timestamp='2007-05-11T00:50:56+01:00' visible='true' lat='50.9395106' lon='-1.4471542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009083' timestamp='2007-05-12T15:31:59+01:00' user='nickw' visible='true' lat='50.9294706' lon='-1.3522225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577070' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9121605' lon='-1.4395341' />
-  <node id='25639898' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9004878' lon='-1.3821123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20698067' timestamp='2006-10-31T22:26:04+00:00' user='nickw' visible='true' lat='50.9046712' lon='-1.4043822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964044' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='50.9984868' lon='-1.4454181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331335' timestamp='2007-12-06T22:09:43+00:00' user='Dean Earley' visible='true' lat='51.0042' lon='-1.37087' />
-  <node id='271022' timestamp='2007-11-28T12:24:04+00:00' user='Dean Earley' visible='true' lat='50.969' lon='-1.40119'>
-    <tag k='residence' v='farm' />
-    <tag k='landuse' v='farm' />
-    <tag k='name' v='Velmore Farm' />
-  </node>
-  <node id='28582992' timestamp='2007-05-03T00:08:35+01:00' visible='true' lat='50.9410424' lon='-1.4323944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160213500' timestamp='2007-12-10T19:09:23+00:00' user='sladen' visible='true' lat='50.9210157' lon='-1.3885344' />
-  <node id='28194509' timestamp='2007-04-29T08:32:15+01:00' user='Dean Earley' visible='true' lat='50.947679' lon='-1.4121409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816570' timestamp='2007-05-31T22:04:30+01:00' visible='true' lat='50.9910628' lon='-1.3543142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949846' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9916132' lon='-1.3739134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705512' timestamp='2007-05-28T11:19:15+01:00' visible='true' lat='50.9830936' lon='-1.3512909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20136223' timestamp='2007-03-31T20:35:02+01:00' user='nickw' visible='true' lat='50.9179227' lon='-1.3582276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29387393' timestamp='2007-06-10T18:16:25+01:00' visible='true' lat='50.9659634' lon='-1.3662495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278591' timestamp='2007-08-14T04:48:05+01:00' user='andrewpmk' visible='true' lat='50.9077453' lon='-1.3962853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548686' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9635375' lon='-1.3635193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797938' timestamp='2007-09-15T18:57:47+01:00' user='mike l' visible='true' lat='50.9707145' lon='-1.4478891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269417' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9202038' lon='-1.4786373' />
-  <node id='21636950' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.9206639' lon='-1.4143311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595092' timestamp='2007-05-25T21:54:10+01:00' visible='true' lat='50.9674649' lon='-1.3515854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50800107' timestamp='2007-10-26T15:04:21+01:00' user='Nick Dyer' visible='true' lat='50.9780351' lon='-1.4378364'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='20976683' timestamp='2006-11-13T21:39:14+00:00' user='nickw' visible='true' lat='50.9391783' lon='-1.4229659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724271' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.93023' lon='-1.4035668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661194' timestamp='2007-04-05T14:17:53+01:00' user='Dean Earley' visible='true' lat='50.916514' lon='-1.3718362' />
-  <node id='29710216' timestamp='2007-10-07T23:29:47+01:00' user='alfabet' visible='true' lat='50.9878854' lon='-1.3732164'>
-    <tag k='amenity' v='library' />
-    <tag k='name' v='Chandler's Ford Library' />
-    <tag k='created_by' v='Potlatch 0.4' />
-  </node>
-  <node id='18398460' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.9188598' lon='-1.4152313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706428' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9230486' lon='-1.3793352'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21092036' timestamp='2007-12-08T19:53:00+00:00' user='nickw' visible='true' lat='50.9369813' lon='-1.4528464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689110' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9393722' lon='-1.3830133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254441' timestamp='2006-08-31T20:35:50+01:00' user='nickw' visible='true' lat='50.9449167' lon='-1.3692188'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='157223774' timestamp='2007-12-08T20:24:11+00:00' user='nickw' visible='true' lat='50.9459358' lon='-1.4478967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764411' timestamp='2007-05-29T22:14:26+01:00' user='Jodi Crisp' visible='true' lat='50.9245389' lon='-1.3588568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329813' timestamp='2007-01-25T22:42:27+00:00' user='Dean Earley' visible='true' lat='50.9288' lon='-1.40398' />
-  <node id='14964156' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9189052' lon='-1.3817855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298235' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='51.004667' lon='-1.3540424' />
-  <node id='29468537' timestamp='2007-05-22T01:06:54+01:00' user='Dean Earley' visible='true' lat='50.9131122' lon='-1.4432361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675842' timestamp='2007-04-05T14:17:54+01:00' user='Dean Earley' visible='true' lat='50.9334238' lon='-1.3709372' />
-  <node id='245148852' timestamp='2008-02-03T06:07:44+00:00' user='sladen' visible='true' lat='50.9038724' lon='-1.4018051' />
-  <node id='20961036' timestamp='2006-11-11T17:12:24+00:00' user='Dean Earley' visible='true' lat='50.9499328' lon='-1.3979206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949897' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9946643' lon='-1.3781649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998580' timestamp='2007-06-05T23:13:54+01:00' user='nickw' visible='true' lat='50.9588985' lon='-1.4523476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110895' timestamp='2006-10-27T23:39:31+01:00' user='Dean Earley' visible='true' lat='50.93517' lon='-1.3646132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000966' timestamp='2007-05-12T09:31:58+01:00' user='nickw' visible='true' lat='50.918624' lon='-1.4096533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222323' timestamp='2007-12-08T20:23:18+00:00' user='nickw' visible='true' lat='50.9461236' lon='-1.4440823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25635425' timestamp='2007-02-04T18:26:15+00:00' user='Dean Earley' visible='true' lat='50.9883866' lon='-1.3503496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518770' timestamp='2007-04-05T14:17:54+01:00' user='Dean Earley' visible='true' lat='50.9125' lon='-1.3937' />
-  <node id='14601309' timestamp='2006-09-01T00:16:03+01:00' user='nickw' visible='true' lat='50.832324' lon='-1.5110064'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='24984802' timestamp='2007-01-10T00:15:43+00:00' user='nickw' visible='true' lat='50.9409917' lon='-1.3779602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903848' timestamp='2007-12-06T19:26:16+00:00' user='Dean Earley' visible='true' lat='50.9808803' lon='-1.4452604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130926' timestamp='2006-10-28T01:45:32+01:00' user='Dean Earley' visible='true' lat='50.9349637' lon='-1.3604157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659219' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9040796' lon='-1.40576' />
-  <node id='13071352' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.918805' lon='-1.3654025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160283355' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9170279' lon='-1.4888962' />
-  <node id='8596778' timestamp='2007-03-25T19:25:24+01:00' user='Dean Earley' visible='true' lat='50.901823' lon='-1.3978286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194893' timestamp='2007-04-29T08:58:00+01:00' user='Dean Earley' visible='true' lat='50.9434151' lon='-1.4083789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089142' timestamp='2007-06-13T09:24:39+01:00' visible='true' lat='50.9646177' lon='-1.3787971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170432' timestamp='2006-11-11T17:20:19+00:00' user='Dean Earley' visible='true' lat='50.9202732' lon='-1.3156204' />
-  <node id='2433503' timestamp='2007-01-19T09:38:45+00:00' user='Dean Earley' visible='true' lat='50.9699319' lon='-1.350481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124201' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.9224176' lon='-1.3487733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248228' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8964878' lon='-1.3970919' />
-  <node id='29816425' timestamp='2007-05-31T22:00:50+01:00' visible='true' lat='50.9898144' lon='-1.3552763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816553' timestamp='2007-05-31T22:04:26+01:00' visible='true' lat='50.9914063' lon='-1.3544353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154769815' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true' lat='50.9619746' lon='-1.4269376' />
-  <node id='254616' timestamp='2005-11-15T15:41:32+00:00' user='nickw' visible='true' lat='50.9122984' lon='-1.4261739' />
-  <node id='18348728' timestamp='2006-12-16T17:47:21+00:00' user='David Currie' visible='true' lat='50.9956981' lon='-1.4473228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632203' timestamp='2007-05-26T19:21:07+01:00' visible='true' lat='50.955713' lon='-1.3673885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423288' timestamp='2007-04-05T14:17:54+01:00' user='Dean Earley' visible='true' lat='50.93' lon='-1.38651' />
-  <node id='30124375' timestamp='2007-06-09T19:43:10+01:00' user='nickw' visible='true' lat='50.9249128' lon='-1.3500597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575785' timestamp='2007-03-16T21:52:31+00:00' user='nickw' visible='true' lat='50.8997137' lon='-1.4001674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92680538' timestamp='2007-10-31T12:24:55+00:00' user='Dean Earley' visible='true' lat='50.9607615' lon='-1.4255743' />
-  <node id='25783105' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9481377' lon='-1.3523447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091890' timestamp='2007-04-03T00:51:35+01:00' user='Dean Earley' visible='true' lat='50.9162766' lon='-1.4256462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962316' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9574696' lon='-1.3624611' />
-  <node id='21561800' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9214512' lon='-1.4385503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325030' timestamp='2006-11-11T17:20:19+00:00' user='Dean Earley' visible='true' lat='50.9590566' lon='-1.4417514' />
-  <node id='469871' timestamp='2007-11-18T18:58:30+00:00' user='nickw' visible='true' lat='50.9131372' lon='-1.4300704' />
-  <node id='29464247' timestamp='2007-05-22T00:19:11+01:00' user='Dean Earley' visible='true' lat='50.9375304' lon='-1.4088376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856366' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9467091' lon='-1.3918485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704604' timestamp='2007-05-28T10:48:38+01:00' visible='true' lat='50.9758176' lon='-1.3499286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342542' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9097597' lon='-1.3647289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581809' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9181022' lon='-1.4483832' />
-  <node id='20954591' timestamp='2006-11-10T08:43:41+00:00' user='nickw' visible='true' lat='50.929482' lon='-1.3898862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249934' timestamp='2007-04-29T21:41:52+01:00' visible='true' lat='50.9143858' lon='-1.4450601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743142' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9301785' lon='-1.4260975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583026' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9399107' lon='-1.4341535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564800' timestamp='2006-10-27T22:27:56+01:00' user='Dean Earley' visible='true' lat='50.9310025' lon='-1.3577816'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='169423570' timestamp='2007-12-14T21:35:47+00:00' user='nickw' visible='true' lat='50.9331324' lon='-1.4432072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028818' timestamp='2006-09-08T23:06:40+01:00' user='Dean Earley' visible='true' lat='50.9358773' lon='-1.3772894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278576' timestamp='2007-08-14T04:48:04+01:00' user='andrewpmk' visible='true' lat='50.9074342' lon='-1.3976859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29839516' timestamp='2007-06-01T21:00:15+01:00' visible='true' lat='50.9781122' lon='-1.3522598'>
-    <tag k='leisure' v='playground' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984719' timestamp='2007-01-10T00:12:02+00:00' user='nickw' visible='true' lat='50.9439647' lon='-1.390218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342526' timestamp='2007-04-30T22:13:31+01:00' user='nickw' visible='true' lat='50.9095968' lon='-1.3643315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398467' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.9278628' lon='-1.416081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178442' timestamp='2007-10-04T19:44:17+01:00' user='Gregory Williams' visible='true' lat='50.9986998' lon='-1.3548209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305565' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9987283' lon='-1.3964653' />
-  <node id='28252916' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9461246' lon='-1.4301173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92682349' timestamp='2007-10-31T12:24:57+00:00' user='Dean Earley' visible='true' lat='50.9615717' lon='-1.4259814' />
-  <node id='14964139' timestamp='2006-09-08T02:12:01+01:00' user='Dean Earley' visible='true' lat='50.9172933' lon='-1.382842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243879' timestamp='2007-04-29T20:52:53+01:00' user='Dean Earley' visible='true' lat='50.937294' lon='-1.4239031' />
-  <node id='25282148' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9754011' lon='-1.4092446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705638' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8949358' lon='-1.409208' />
-  <node id='21689140' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9401359' lon='-1.3827153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728916' timestamp='2007-05-28T19:12:46+01:00' visible='true' lat='50.9716689' lon='-1.3591629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706125' timestamp='2007-04-05T14:17:54+01:00' user='Dean Earley' visible='true' lat='50.9064892' lon='-1.3870812' />
-  <node id='30290787' timestamp='2007-06-13T09:24:10+01:00' visible='true' lat='50.965266' lon='-1.3817039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122342982' timestamp='2007-11-18T19:15:52+00:00' user='nickw' visible='true' lat='50.9190957' lon='-1.4386451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243473' timestamp='2007-04-29T20:23:53+01:00' user='Dean Earley' visible='true' lat='50.9405315' lon='-1.4073616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340627' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9637053' lon='-1.3712961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548703' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.9634334' lon='-1.3701891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980712' timestamp='2008-01-29T12:06:37+00:00' user='Dean Earley' visible='true' lat='50.9579257' lon='-1.3480521' />
-  <node id='20133138' timestamp='2006-10-28T01:55:40+01:00' user='Dean Earley' visible='true' lat='50.9275452' lon='-1.3530764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491396' timestamp='2007-05-22T12:23:39+01:00' visible='true' lat='50.9139416' lon='-1.4080567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345081' timestamp='2007-04-30T23:00:40+01:00' user='nickw' visible='true' lat='50.9332516' lon='-1.3677366'>
-    <tag k='name' v='WLSNGHM GD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28212756' timestamp='2007-12-06T20:43:04+00:00' user='Dean Earley' visible='true' lat='50.9971933' lon='-1.3565753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708038' timestamp='2007-05-28T12:04:08+01:00' visible='true' lat='50.9795123' lon='-1.3674041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632445' timestamp='2007-05-26T19:27:05+01:00' visible='true' lat='50.960678' lon='-1.3638885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684539' timestamp='2007-11-20T11:49:27+00:00' user='Nick Dyer' visible='true' lat='50.9621463' lon='-1.4224343' />
-  <node id='30290737' timestamp='2007-06-13T09:23:58+01:00' visible='true' lat='50.9645258' lon='-1.3832319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704304' timestamp='2007-05-28T10:32:51+01:00' visible='true' lat='50.986907' lon='-1.3571736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071335' timestamp='2006-08-11T02:48:09+01:00' user='Dean Earley' visible='true' lat='50.9168973' lon='-1.3661735'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721085' timestamp='2007-01-19T09:38:45+00:00' user='Dean Earley' visible='true' lat='50.9708042' lon='-1.3505755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125580528' timestamp='2007-11-20T11:56:43+00:00' user='Nick Dyer' visible='true' lat='50.9625355' lon='-1.4248376' />
-  <node id='17724237' timestamp='2007-01-28T00:06:51+00:00' visible='true' lat='50.9273779' lon='-1.4056328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150414' timestamp='2008-02-03T06:15:24+00:00' user='sladen' visible='true' lat='50.9091657' lon='-1.4063627' />
-  <node id='17722345' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.9521047' lon='-1.3734032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561536' timestamp='2007-06-01T16:30:45+01:00' user='Dean Earley' visible='true' lat='50.9256905' lon='-1.4317604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107341' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9299876' lon='-1.3537505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462601' timestamp='2007-05-21T23:56:38+01:00' user='nickw' visible='true' lat='50.9049376' lon='-1.4024618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949914' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9922135' lon='-1.3776881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659198' timestamp='2007-11-20T16:53:21+00:00' user='Nick Dyer' visible='true' lat='50.9044489' lon='-1.4085427' />
-  <node id='26945393' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9042909' lon='-1.3418625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='51191284' timestamp='2007-09-14T09:51:45+01:00' user='mike l' visible='true' lat='50.9455535' lon='-1.4448545' />
-  <node id='26447402' timestamp='2007-03-09T20:54:22+00:00' user='nickw' visible='true' lat='50.9002759' lon='-1.3921564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999016' timestamp='2007-06-05T23:29:01+01:00' user='nickw' visible='true' lat='50.9946862' lon='-1.4401295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339144' timestamp='2007-04-30T20:39:27+01:00' visible='true' lat='50.9679513' lon='-1.3600425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830614' timestamp='2007-05-05T08:58:24+01:00' user='nickw' visible='true' lat='50.9289919' lon='-1.3591788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908421' timestamp='2006-07-18T10:20:26+01:00' user='nickw' visible='true' lat='50.9349443' lon='-1.3713101' />
-  <node id='29998546' timestamp='2007-06-05T23:13:23+01:00' user='nickw' visible='true' lat='50.9658055' lon='-1.4250109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008384' timestamp='2007-05-12T15:11:48+01:00' user='nickw' visible='true' lat='50.9258048' lon='-1.3521281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149210' timestamp='2008-02-03T06:09:35+00:00' user='sladen' visible='true' lat='50.9049333' lon='-1.3976595' />
-  <node id='28405236' timestamp='2007-05-01T22:40:09+01:00' visible='true' lat='50.9974806' lon='-1.3573565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66583980' timestamp='2007-10-12T14:01:25+01:00' user='SteveC' visible='true' lat='50.931828' lon='-1.4494054' />
-  <node id='29008954' timestamp='2007-05-12T15:26:05+01:00' user='nickw' visible='true' lat='50.9326385' lon='-1.3506828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632809' timestamp='2007-05-26T20:06:16+01:00' visible='true' lat='50.9621869' lon='-1.368459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973122' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.9042393' lon='-1.4134403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194445' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9459919' lon='-1.4338774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780760' timestamp='2007-06-22T21:09:30+01:00' user='Steve Chilton' visible='true' lat='50.9073556' lon='-1.4076623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331324' timestamp='2006-11-11T21:23:54+00:00' user='Dean Earley' visible='true' lat='51.0019' lon='-1.36033' />
-  <node id='307474' timestamp='2007-04-05T14:17:58+01:00' user='Dean Earley' visible='true' lat='50.9256' lon='-1.40373' />
-  <node id='18398762' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9452328' lon='-1.4114977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16570733' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9207287' lon='-1.4763284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913612' timestamp='2007-06-03T15:53:28+01:00' visible='true' lat='50.9854301' lon='-1.3589435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582981' timestamp='2007-05-02T23:57:50+01:00' visible='true' lat='50.938533' lon='-1.4236605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783086' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9412781' lon='-1.3548479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247796' timestamp='2007-09-05T17:47:10+01:00' user='mike l' visible='true' lat='50.9380196' lon='-1.3964126' />
-  <node id='32894415' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9167732' lon='-1.3875774' />
-  <node id='29392365' timestamp='2007-05-20T17:53:04+01:00' visible='true' lat='50.9645935' lon='-1.3527779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160218968' timestamp='2007-12-10T19:13:23+00:00' user='sladen' visible='true' lat='50.9142194' lon='-1.3896159' />
-  <node id='28230956' timestamp='2007-04-29T18:44:00+01:00' user='nickw' visible='true' lat='50.9121783' lon='-1.3615037'>
-    <tag k='name' v='CARIS DR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021807' timestamp='2007-04-03T00:53:03+01:00' user='Ben' visible='true' lat='50.9372166' lon='-1.4013067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142612656' timestamp='2007-11-29T22:26:19+00:00' user='nickw' visible='true' lat='50.9120453' lon='-1.4149466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001695' timestamp='2007-05-12T09:53:00+01:00' user='nickw' visible='true' lat='50.9402843' lon='-1.363262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971159' timestamp='2008-02-03T06:08:54+00:00' user='sladen' visible='true' lat='50.90312' lon='-1.4011099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096963' timestamp='2007-10-29T17:03:05+00:00' user='Dean Earley' visible='true' lat='50.9648353' lon='-1.3759044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194419' timestamp='2007-04-29T08:20:31+01:00' visible='true' lat='50.9473327' lon='-1.4365283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956713' timestamp='2007-06-26T23:49:21+01:00' user='nickw' visible='true' lat='50.9275586' lon='-1.3478238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721050' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9612807' lon='-1.3714947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668274' timestamp='2007-01-04T21:06:33+00:00' user='nickw' visible='true' lat='50.9860518' lon='-1.3905456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25302629' timestamp='2007-09-17T22:55:04+01:00' user='mike l' visible='true' lat='50.9742226' lon='-1.3685429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903814' timestamp='2007-10-17T01:09:34+01:00' user='Dean Earley' visible='true' lat='50.9507697' lon='-1.3635954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471863' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9399094' lon='-1.3672086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227246' timestamp='2006-10-23T20:52:58+01:00' user='nickw' visible='true' lat='50.9423665' lon='-1.415621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243651' timestamp='2007-04-29T20:25:07+01:00' user='Dean Earley' visible='true' lat='50.9387262' lon='-1.4135729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346875' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9132217' lon='-1.3679714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871583' timestamp='2007-06-02T18:53:55+01:00' visible='true' lat='50.9159907' lon='-1.3503116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342764' timestamp='2007-04-30T22:17:31+01:00' user='nickw' visible='true' lat='50.9050368' lon='-1.3677089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507800' timestamp='2007-04-29T02:33:55+01:00' user='Dean Earley' visible='true' lat='50.9425188' lon='-1.4064169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249870' timestamp='2007-04-29T21:41:42+01:00' visible='true' lat='50.9194751' lon='-1.4418658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746404' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9930813' lon='-1.3408219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114353' timestamp='2007-02-23T21:46:02+00:00' user='nickw' visible='true' lat='50.9048176' lon='-1.3965909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997504' timestamp='2007-06-05T22:43:51+01:00' user='nickw' visible='true' lat='51.0034132' lon='-1.3590135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949863' timestamp='2007-01-07T12:38:47+00:00' user='nickw' visible='true' lat='50.993814' lon='-1.372483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325218' timestamp='2006-11-11T17:20:44+00:00' user='Dean Earley' visible='true' lat='50.9379139' lon='-1.3524076' />
-  <node id='13706334' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9193396' lon='-1.3882339'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='30956626' timestamp='2007-06-26T23:45:05+01:00' user='nickw' visible='true' lat='50.9302664' lon='-1.3512458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621222' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9684919' lon='-1.3728274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973088' timestamp='2007-12-10T21:07:22+00:00' user='sladen' visible='true' lat='50.9048563' lon='-1.4129682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856353' timestamp='2007-06-02T08:31:26+01:00' user='nickw' visible='true' lat='50.9478669' lon='-1.3942722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422976' timestamp='2007-04-05T14:17:59+01:00' user='Dean Earley' visible='true' lat='50.934' lon='-1.4114' />
-  <node id='113962269' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.956026' lon='-1.3648472' />
-  <node id='29816284' timestamp='2007-05-31T21:52:22+01:00' visible='true' lat='50.9913314' lon='-1.3544256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160359714' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9204744' lon='-1.4773241' />
-  <node id='160180355' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9067834' lon='-1.3780287' />
-  <node id='142617040' timestamp='2007-11-29T22:29:08+00:00' user='nickw' visible='true' lat='50.9139602' lon='-1.416156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780798' timestamp='2007-06-22T21:09:41+01:00' user='Steve Chilton' visible='true' lat='50.908237' lon='-1.4052522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773093' timestamp='2007-12-07T13:53:03+00:00' user='Nick Dyer' visible='true' lat='50.9609961' lon='-1.426723' />
-  <node id='28342593' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9061374' lon='-1.3606917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462620' timestamp='2007-05-21T23:56:40+01:00' user='nickw' visible='true' lat='50.9025947' lon='-1.3984686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721016' timestamp='2006-10-06T23:27:15+01:00' user='Dean Earley' visible='true' lat='50.9724961' lon='-1.3766408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689086' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9432838' lon='-1.3880351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530368' timestamp='2007-06-12T20:07:44+01:00' visible='true' lat='50.9783028' lon='-1.3496452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926696' timestamp='2007-06-03T21:00:16+01:00' visible='true' lat='50.9790514' lon='-1.3650081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252972' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.9431569' lon='-1.4296161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874085' timestamp='2007-11-20T11:07:06+00:00' user='Gregory Williams' visible='true' lat='50.9386886' lon='-1.4448977'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='90615359' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true' lat='50.8937562' lon='-1.4064667' />
-  <node id='170444' timestamp='2006-11-11T17:20:44+00:00' user='Dean Earley' visible='true' lat='50.9446045' lon='-1.3635617' />
-  <node id='21419450' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9413637' lon='-1.371816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254758' timestamp='2008-02-03T06:26:21+00:00' user='sladen' visible='true' lat='50.9079047' lon='-1.3925869' />
-  <node id='90663590' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9066181' lon='-1.40576' />
-  <node id='18232095' timestamp='2006-10-14T13:19:08+01:00' user='nickw' visible='true' lat='50.9148766' lon='-1.4098815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932225' timestamp='2007-09-15T18:42:04+01:00' user='mike l' visible='true' lat='50.9613634' lon='-1.4514281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544330' timestamp='2007-04-05T14:18:03+01:00' user='Dean Earley' visible='true' lat='50.9305' lon='-1.38786' />
-  <node id='26346750' timestamp='2007-03-04T18:57:52+00:00' user='Dean Earley' visible='true' lat='50.915685' lon='-1.3657578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134833' timestamp='2006-10-28T02:02:31+01:00' user='Dean Earley' visible='true' lat='50.9288293' lon='-1.3536954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830575' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.9231664' lon='-1.3573918'>
-    <tag k='name' v='OAK GRN WY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908279' timestamp='2007-05-15T20:24:23+01:00' user='nickw' visible='true' lat='50.9245786' lon='-1.3773939' />
-  <node id='20972767' timestamp='2006-11-13T00:06:50+00:00' user='Dean Earley' visible='true' lat='50.898778' lon='-1.4078209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142616989' timestamp='2007-11-29T22:29:06+00:00' user='nickw' visible='true' lat='50.9132415' lon='-1.4155327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141503' timestamp='2007-09-05T17:46:25+01:00' user='mike l' visible='true' lat='50.9344872' lon='-1.3958522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949816' timestamp='2007-01-07T12:38:43+00:00' user='nickw' visible='true' lat='50.9880213' lon='-1.3796416'>
-    <tag k='name' v='KINGSWAY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675803' timestamp='2007-02-06T01:03:07+00:00' user='Dean Earley' visible='true' lat='50.9097392' lon='-1.4465463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071387' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9258102' lon='-1.359394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236115' timestamp='2007-04-29T19:25:37+01:00' user='Andy Street' visible='true' lat='50.9080076' lon='-1.3552508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163274' timestamp='2008-01-04T19:34:24+00:00' user='nickw' visible='true' lat='50.9701264' lon='-1.3891557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269156' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='51.0026' lon='-1.3311726' />
-  <node id='14601294' timestamp='2007-12-10T19:45:11+00:00' user='sladen' visible='true' lat='50.8170676' lon='-1.5728045'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Brockenhurst' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28372790' timestamp='2007-12-14T21:27:52+00:00' user='nickw' visible='true' lat='50.9279413' lon='-1.4407545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956607' timestamp='2007-06-26T23:45:01+01:00' user='nickw' visible='true' lat='50.929127' lon='-1.3500836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507762' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9388901' lon='-1.3948973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008937' timestamp='2007-05-12T15:26:02+01:00' user='nickw' visible='true' lat='50.9321658' lon='-1.3498832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976796' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9247605' lon='-1.4192409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29002289' timestamp='2007-05-12T09:57:58+01:00' user='nickw' visible='true' lat='50.9358715' lon='-1.3680074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608178' timestamp='2007-04-05T14:18:03+01:00' user='Dean Earley' visible='true' lat='50.8996819' lon='-1.3718366' />
-  <node id='18398415' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9810954' lon='-1.4123225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990895' timestamp='2007-06-05T20:41:25+01:00' visible='true' lat='51.0012484' lon='-1.3516394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226350' timestamp='2007-06-11T22:23:48+01:00' visible='true' lat='50.9812978' lon='-1.353598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486256' timestamp='2007-07-09T11:55:38+01:00' visible='true' lat='50.9099639' lon='-1.3840227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009218' timestamp='2007-06-09T19:48:46+01:00' user='nickw' visible='true' lat='50.9304473' lon='-1.3526496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359718' timestamp='2006-09-11T20:17:31+01:00' user='Dean Earley' visible='true' lat='50.9701024' lon='-1.3561461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419246' timestamp='2006-12-02T22:59:16+00:00' user='Dean Earley' visible='true' lat='50.9380613' lon='-1.360846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290767' timestamp='2007-06-13T09:24:06+01:00' visible='true' lat='50.9695768' lon='-1.3830209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339118' timestamp='2007-04-30T20:39:16+01:00' visible='true' lat='50.9669364' lon='-1.3602109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29706974' timestamp='2007-06-03T15:50:59+01:00' visible='true' lat='50.9865562' lon='-1.3596536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071425' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.924358' lon='-1.3529517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252363' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9465093' lon='-1.3613432' />
-  <node id='26575772' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9010783' lon='-1.3950028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957857' timestamp='2007-05-04T01:58:39+01:00' user='Dean Earley' visible='true' lat='50.9429716' lon='-1.4498641'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29999007' timestamp='2007-06-05T23:29:01+01:00' user='nickw' visible='true' lat='50.9924354' lon='-1.4367522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000933' timestamp='2007-05-12T09:30:25+01:00' user='nickw' visible='true' lat='50.9190279' lon='-1.4104628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254303' timestamp='2007-02-18T20:18:29+00:00' visible='true' lat='50.9854996' lon='-1.3495992' />
-  <node id='29026662' timestamp='2007-05-13T10:02:48+01:00' user='nickw' visible='true' lat='50.920124' lon='-1.3988814'>
-    <tag k='name' v='HGHCLFF AV' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180244' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9611437' lon='-1.4233388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249823' timestamp='2007-04-29T21:41:34+01:00' visible='true' lat='50.9197479' lon='-1.4448894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707284' timestamp='2007-05-28T11:52:22+01:00' visible='true' lat='50.9868004' lon='-1.3635643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915746' timestamp='2006-05-17T01:46:23+01:00' user='Dean Earley' visible='true' lat='50.9002106' lon='-1.3716301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932437' timestamp='2007-05-10T21:05:54+01:00' user='Dean Earley' visible='true' lat='50.9641662' lon='-1.468842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298303' timestamp='2006-11-11T17:20:47+00:00' user='Dean Earley' visible='true' lat='50.9478312' lon='-1.387863' />
-  <node id='13071378' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9183674' lon='-1.3620913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071314' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.921251' lon='-1.3600185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157188688' timestamp='2007-12-08T19:58:39+00:00' user='nickw' visible='true' lat='50.9389366' lon='-1.4500336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134836' timestamp='2007-05-15T20:53:16+01:00' user='nickw' visible='true' lat='50.9446435' lon='-1.3819406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601361' timestamp='2007-12-10T19:51:54+00:00' user='sladen' visible='true' lat='50.9172106' lon='-1.4846563' />
-  <node id='21561545' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9222017' lon='-1.4268213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252934' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9456848' lon='-1.4237869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226373' timestamp='2007-06-11T22:23:57+01:00' visible='true' lat='50.9815424' lon='-1.3533126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30511431' timestamp='2007-06-17T22:30:28+01:00' visible='true' lat='50.9750766' lon='-1.3598283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222222' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.919771' lon='-1.4792982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111065' timestamp='2006-10-22T23:24:07+01:00' user='Ben' visible='true' lat='50.9944973' lon='-1.390815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291048' timestamp='2007-06-13T09:32:58+01:00' visible='true' lat='50.9645804' lon='-1.384962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423488' timestamp='2007-12-14T21:35:45+00:00' user='nickw' visible='true' lat='50.9322528' lon='-1.4435847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87819945' timestamp='2007-10-26T12:11:53+01:00' user='Nick Dyer' visible='true' lat='50.9111796' lon='-1.4429052' />
-  <node id='20957194' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9208023' lon='-1.4200233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518785' timestamp='2007-04-05T14:18:03+01:00' user='Dean Earley' visible='true' lat='50.9194308' lon='-1.3888894' />
-  <node id='20976713' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9329246' lon='-1.4254393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133222' timestamp='2006-10-28T01:55:55+01:00' user='Dean Earley' visible='true' lat='50.9283092' lon='-1.3511336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071215' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.919146' lon='-1.371068'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91113443' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.927349' lon='-1.4420173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998120' timestamp='2007-06-05T23:00:28+01:00' user='nickw' visible='true' lat='50.9894592' lon='-1.3984887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648586' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9544291' lon='-1.3579674' />
-  <node id='29001318' timestamp='2007-05-12T09:40:13+01:00' user='nickw' visible='true' lat='50.9225305' lon='-1.3823643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124670' timestamp='2007-06-09T19:48:38+01:00' user='nickw' visible='true' lat='50.9313303' lon='-1.3520761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160284170' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9170549' lon='-1.4930247' />
-  <node id='29872367' timestamp='2007-06-02T19:03:56+01:00' visible='true' lat='50.9169576' lon='-1.348983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600474' timestamp='2007-12-08T19:58:59+00:00' user='nickw' visible='true' lat='50.9394891' lon='-1.4493605'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='29871553' timestamp='2007-06-02T18:39:56+01:00' visible='true' lat='50.9153035' lon='-1.3524086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='47017483' timestamp='2007-09-08T20:54:07+01:00' user='mike l' visible='true' lat='50.9404368' lon='-1.450377' />
-  <node id='29632432' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true' lat='50.9593051' lon='-1.3631495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721031' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9665096' lon='-1.3697207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179538' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9556149' lon='-1.3986552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467486' timestamp='2007-04-19T17:50:44+01:00' visible='true' lat='50.9329671' lon='-1.3720295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956724' timestamp='2007-06-26T23:49:23+01:00' user='nickw' visible='true' lat='50.9275586' lon='-1.3500488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613421' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9758328' lon='-1.4028045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783120' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9469361' lon='-1.3476958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965521' timestamp='2007-05-10T21:08:06+01:00' user='Dean Earley' visible='true' lat='50.9618848' lon='-1.4490431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794813' timestamp='2007-05-30T21:42:41+01:00' user='nickw' visible='true' lat='50.9191601' lon='-1.3547866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25761520' timestamp='2007-02-18T20:19:19+00:00' visible='true' lat='50.9351113' lon='-1.3594358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728545' timestamp='2007-03-25T18:42:32+01:00' user='Dean Earley' visible='true' lat='50.9010327' lon='-1.3688644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310985' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9666141' lon='-1.4375469' />
-  <node id='29914408' timestamp='2007-06-03T16:22:49+01:00' visible='true' lat='50.9837756' lon='-1.3612152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124208' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.9232191' lon='-1.3476608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963751' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9334084' lon='-1.4110141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346713' timestamp='2007-03-04T18:57:45+00:00' user='Dean Earley' visible='true' lat='50.9141322' lon='-1.3650743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296285' timestamp='2007-01-19T18:15:24+00:00' user='Dean Earley' visible='true' lat='50.9736978' lon='-1.3673149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468473' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.916573' lon='-1.4574113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582048' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9305514' lon='-1.4499976' />
-  <node id='59936562' timestamp='2007-09-26T21:57:28+01:00' visible='true' lat='50.9070532' lon='-1.4117759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964055' timestamp='2006-11-12T00:52:17+00:00' user='nickw' visible='true' lat='51.0012248' lon='-1.4410871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705484' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.9077971' lon='-1.4412057'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='90581822' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9155049' lon='-1.449499' />
-  <node id='169435853' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.9360277' lon='-1.4330652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889442' timestamp='2006-08-08T23:26:27+01:00' user='Dean Earley' visible='true' lat='50.9552873' lon='-1.36601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830669' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9239485' lon='-1.3642895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419416' timestamp='2007-02-18T20:18:46+00:00' visible='true' lat='50.9405699' lon='-1.3689163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700380' timestamp='2007-04-05T14:18:03+01:00' user='Dean Earley' visible='true' lat='50.9229995' lon='-1.3928952' />
-  <node id='66586257' timestamp='2007-10-12T14:02:05+01:00' user='SteveC' visible='true' lat='50.9328396' lon='-1.4498688' />
-  <node id='305616' timestamp='2005-12-11T11:52:19+00:00' user='nickw' visible='true' lat='50.9878922' lon='-1.3930964' />
-  <node id='14726558' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9120651' lon='-1.4007483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91124924' timestamp='2007-10-29T08:16:55+00:00' user='nickw' visible='true' lat='50.9305695' lon='-1.446573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815064' timestamp='2007-05-31T21:30:59+01:00' visible='true' lat='50.9883123' lon='-1.3552861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705523' timestamp='2007-06-11T21:58:24+01:00' visible='true' lat='50.9839839' lon='-1.3529992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021792' timestamp='2007-04-03T00:52:57+01:00' user='Ben' visible='true' lat='50.9485415' lon='-1.3953062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372779' timestamp='2007-05-01T10:05:21+01:00' visible='true' lat='50.9316043' lon='-1.4429554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90678353' timestamp='2007-10-28T22:03:33+00:00' user='Nick Dyer' visible='true' lat='50.9022203' lon='-1.4419322'>
-    <tag k='leisure' v='marina' />
-    <tag k='name' v='Marchwood Yacht Club' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='90581826' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9151964' lon='-1.4497823' />
-  <node id='122316844' timestamp='2007-11-18T19:01:09+00:00' user='nickw' visible='true' lat='50.9133404' lon='-1.4365144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903735' timestamp='2007-05-10T00:36:35+01:00' visible='true' lat='50.9348146' lon='-1.3732477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963768' timestamp='2007-05-22T00:19:46+01:00' user='Dean Earley' visible='true' lat='50.9375857' lon='-1.4016521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636739' timestamp='2007-04-29T02:33:12+01:00' user='Dean Earley' visible='true' lat='50.9490286' lon='-1.4062315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099529' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9524549' lon='-1.3619907' />
-  <node id='13071232' timestamp='2007-01-19T20:35:57+00:00' user='Dean Earley' visible='true' lat='50.9206661' lon='-1.366213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133080' timestamp='2007-05-15T20:36:53+01:00' user='nickw' visible='true' lat='50.9341301' lon='-1.3759586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727976' timestamp='2007-02-18T21:25:28+00:00' visible='true' lat='50.9151009' lon='-1.3974709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243609' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.9347201' lon='-1.4169599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762100' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.943163' lon='-1.3476963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613395' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9757561' lon='-1.4257804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573778' timestamp='2007-09-16T10:20:35+01:00' user='mike l' visible='true' lat='50.9913762' lon='-1.3958124' />
-  <node id='28194344' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9454568' lon='-1.4370819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816742' timestamp='2007-05-31T22:13:32+01:00' visible='true' lat='50.9913015' lon='-1.3552026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110825' timestamp='2006-10-27T23:39:23+01:00' user='Dean Earley' visible='true' lat='50.9355573' lon='-1.3652973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089086' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.9677998' lon='-1.3797258'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290782' timestamp='2007-06-13T09:24:09+01:00' visible='true' lat='50.9641421' lon='-1.3833051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071408' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9220175' lon='-1.3557433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896413' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9690017' lon='-1.3885599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160179635' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.912098' lon='-1.3715056' />
-  <node id='29728856' timestamp='2007-05-28T19:12:22+01:00' visible='true' lat='50.9715363' lon='-1.3538645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600513' timestamp='2007-04-03T00:51:55+01:00' user='Dean Earley' visible='true' lat='50.9093435' lon='-1.4171626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639947' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9008998' lon='-1.3810894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464304' timestamp='2007-05-22T00:19:24+01:00' user='Dean Earley' visible='true' lat='50.9473459' lon='-1.3994705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447513' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9107619' lon='-1.3867774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238997' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9179731' lon='-1.440917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001707' timestamp='2007-05-12T09:53:02+01:00' user='nickw' visible='true' lat='50.9402968' lon='-1.3645136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931327' timestamp='2007-06-04T21:17:04+01:00' visible='true' lat='51.0002414' lon='-1.364729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021822' timestamp='2007-04-03T00:53:06+01:00' user='Ben' visible='true' lat='50.9406734' lon='-1.3971573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254471' timestamp='2007-02-18T20:18:23+00:00' visible='true' lat='50.9158089' lon='-1.3598958' />
-  <node id='29569522' timestamp='2007-12-06T19:26:16+00:00' user='Dean Earley' visible='true' lat='50.9804963' lon='-1.4435318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635147' timestamp='2007-03-25T19:25:11+01:00' user='Dean Earley' visible='true' lat='50.9003695' lon='-1.3953317' />
-  <node id='91113445' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.9273741' lon='-1.4422955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889404' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.9347339' lon='-1.3512604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711872' timestamp='2007-06-11T21:42:45+01:00' visible='true' lat='50.9860456' lon='-1.3544906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962290' timestamp='2007-12-10T19:32:11+00:00' user='sladen' visible='true' lat='50.9581723' lon='-1.3671282' />
-  <node id='29997517' timestamp='2007-06-05T22:43:53+01:00' user='nickw' visible='true' lat='51.0126635' lon='-1.3606823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949876' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9897375' lon='-1.3782444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246666' timestamp='2007-04-29T21:09:36+01:00' visible='true' lat='50.9478986' lon='-1.4365581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='76476565' timestamp='2007-10-17T15:40:56+01:00' user='Nick Dyer' visible='true' lat='50.8992882' lon='-1.4453103' />
-  <node id='28341785' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9132788' lon='-1.3627036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838718' timestamp='2007-06-01T20:37:03+01:00' visible='true' lat='50.9695253' lon='-1.3887945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409606' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9108422' lon='-1.4305892' />
-  <node id='24668309' timestamp='2007-01-04T21:06:39+00:00' user='nickw' visible='true' lat='50.9861831' lon='-1.3912111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271056' timestamp='2007-01-25T22:42:32+00:00' user='Dean Earley' visible='true' lat='50.9244217' lon='-1.376136'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Bitterne Park' />
-  </node>
-  <node id='324996' timestamp='2006-11-11T17:21:00+00:00' user='Dean Earley' visible='true' lat='50.9593985' lon='-1.4223486' />
-  <node id='29926972' timestamp='2007-06-03T21:16:10+01:00' visible='true' lat='50.9849377' lon='-1.3685572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942635' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.9029864' lon='-1.3757262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341768' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.91229' lon='-1.3597026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971178' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9060086' lon='-1.3983522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160226520' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.9031895' lon='-1.3908175' />
-  <node id='28249887' timestamp='2007-11-28T12:24:19+00:00' user='Dean Earley' visible='true' lat='50.9207075' lon='-1.4398779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668012' timestamp='2007-01-04T21:05:27+00:00' user='nickw' visible='true' lat='50.9851325' lon='-1.4126672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594788' timestamp='2007-02-11T00:33:10+00:00' visible='true' lat='50.9160749' lon='-1.4105635'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='20976770' timestamp='2007-12-14T21:27:14+00:00' user='nickw' visible='true' lat='50.9280413' lon='-1.4186648'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325233' timestamp='2006-11-11T17:21:00+00:00' user='Dean Earley' visible='true' lat='50.9354644' lon='-1.3383793' />
-  <node id='29930661' timestamp='2007-06-03T22:25:17+01:00' visible='true' lat='50.9962161' lon='-1.352071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659202' timestamp='2007-11-20T16:53:21+00:00' user='Nick Dyer' visible='true' lat='50.9045896' lon='-1.4083195' />
-  <node id='21178408' timestamp='2007-01-19T09:28:13+00:00' user='Dean Earley' visible='true' lat='50.9870488' lon='-1.3495075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577116' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9641572' lon='-1.4229493' />
-  <node id='17722360' timestamp='2006-10-06T23:46:14+01:00' user='Dean Earley' visible='true' lat='50.9435751' lon='-1.3855753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021743' timestamp='2007-04-03T00:52:30+01:00' user='Ben' visible='true' lat='50.9378955' lon='-1.3931773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463023' timestamp='2007-05-22T00:01:32+01:00' user='nickw' visible='true' lat='50.9097094' lon='-1.401748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972786' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.906506' lon='-1.4150589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563351' timestamp='2007-04-23T23:02:15+01:00' visible='true' lat='50.930077' lon='-1.3976288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132664' timestamp='2007-05-15T20:24:19+01:00' user='nickw' visible='true' lat='50.9267598' lon='-1.3790442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325094' timestamp='2006-11-11T17:21:01+00:00' user='Dean Earley' visible='true' lat='50.9222784' lon='-1.586175' />
-  <node id='29026788' timestamp='2007-05-13T10:10:56+01:00' user='nickw' visible='true' lat='50.9173708' lon='-1.4082643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953502' timestamp='2007-06-04T21:24:02+01:00' visible='true' lat='50.9893354' lon='-1.3678787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463012' timestamp='2007-05-22T00:01:31+01:00' user='nickw' visible='true' lat='50.9108576' lon='-1.4031441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487480' timestamp='2007-07-09T12:19:39+01:00' visible='true' lat='50.9135854' lon='-1.3867264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613410' timestamp='2006-12-16T17:46:52+00:00' user='David Currie' visible='true' lat='50.9860152' lon='-1.4220562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704899' timestamp='2006-08-25T22:23:18+01:00' user='dmgroom' visible='true' lat='50.9014498' lon='-1.4465132' />
-  <node id='13706061' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8929819' lon='-1.3898047' />
-  <node id='21091875' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.9148509' lon='-1.4261255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963785' timestamp='2007-04-29T08:58:10+01:00' user='Dean Earley' visible='true' lat='50.9421443' lon='-1.4120048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904000' timestamp='2007-05-10T01:07:08+01:00' user='LivingWithDragons' visible='true' lat='50.9812228' lon='-1.444766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419421' timestamp='2007-09-23T16:33:08+01:00' user='mike l' visible='true' lat='50.9399723' lon='-1.3671848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240331' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9061474' lon='-1.3518563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325262' timestamp='2006-11-11T17:21:04+00:00' user='Dean Earley' visible='true' lat='50.9231126' lon='-1.3150157' />
-  <node id='28339199' timestamp='2007-04-30T20:39:46+01:00' visible='true' lat='50.9697255' lon='-1.3620612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964741' timestamp='2007-04-03T00:54:02+01:00' user='Ben' visible='true' lat='50.9396961' lon='-1.3796452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961057' timestamp='2006-11-11T17:12:42+00:00' user='Dean Earley' visible='true' lat='50.9353773' lon='-1.3335682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507796' timestamp='2007-05-22T00:19:46+01:00' user='Dean Earley' visible='true' lat='50.9438091' lon='-1.4054372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380434' timestamp='2007-05-20T10:19:28+01:00' user='nickw' visible='true' lat='50.9436504' lon='-1.3754953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305582' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9945869' lon='-1.394062' />
-  <node id='29794382' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.9229893' lon='-1.3625595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419250' timestamp='2006-12-02T22:59:16+00:00' user='Dean Earley' visible='true' lat='50.9379936' lon='-1.3601182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243981299' timestamp='2008-01-29T12:06:34+00:00' user='Dean Earley' visible='true' lat='50.9636132' lon='-1.3478189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282133' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9763727' lon='-1.4058599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384705' timestamp='2007-06-02T19:55:01+01:00' visible='true' lat='50.9690923' lon='-1.3612153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973092' timestamp='2006-11-13T00:42:41+00:00' user='Dean Earley' visible='true' lat='50.9013308' lon='-1.4082376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783101' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9469111' lon='-1.3526625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924315' timestamp='2007-05-28T13:26:09+01:00' visible='true' lat='50.9863186' lon='-1.371786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194498' timestamp='2007-11-25T22:27:50+00:00' user='southglos' visible='true' lat='50.9481347' lon='-1.406004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728566' timestamp='2007-03-23T22:53:04+00:00' user='nickw' visible='true' lat='50.9005471' lon='-1.3743013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331824' timestamp='2007-12-06T20:44:25+00:00' user='nickw' visible='true' lat='50.9427448' lon='-1.4428559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935752' timestamp='2007-05-11T00:50:43+01:00' visible='true' lat='50.9401657' lon='-1.4450784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632419' timestamp='2007-05-26T19:26:39+01:00' visible='true' lat='50.9561415' lon='-1.3673662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87825998' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8992991' lon='-1.4384677' />
-  <node id='125571492' timestamp='2007-11-20T11:54:53+00:00' user='Nick Dyer' visible='true' lat='50.962968' lon='-1.4249578' />
-  <node id='28250054' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.9164759' lon='-1.4492766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615430' timestamp='2006-12-16T21:52:54+00:00' user='nickw' visible='true' lat='50.9095554' lon='-1.4162291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092025' timestamp='2006-11-19T12:29:33+00:00' user='nickw' visible='true' lat='50.9756882' lon='-1.4371516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160219872' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9144142' lon='-1.3885344' />
-  <node id='21178438' timestamp='2006-11-22T18:12:46+00:00' user='southglos' visible='true' lat='50.9953343' lon='-1.3565538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316547' timestamp='2007-04-03T00:51:55+01:00' user='Dean Earley' visible='true' lat='50.9190763' lon='-1.450081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704664' timestamp='2007-04-05T14:18:05+01:00' user='Dean Earley' visible='true' lat='50.8750312' lon='-1.3981562' />
-  <node id='21613436' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true' lat='50.9765931' lon='-1.4055287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091399' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9840701' lon='-1.4431018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796769' timestamp='2007-05-30T22:22:03+01:00' user='nickw' visible='true' lat='50.9137712' lon='-1.3550449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325071' timestamp='2006-11-11T17:21:04+00:00' user='Dean Earley' visible='true' lat='50.942664' lon='-1.5458412' />
-  <node id='52285782' timestamp='2007-09-15T22:37:20+01:00' user='mike l' visible='true' lat='50.9468917' lon='-1.3901551' />
-  <node id='13564838' timestamp='2006-08-15T12:12:05+01:00' user='nickw' visible='true' lat='50.9348166' lon='-1.3518595'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='123671359' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.916404' lon='-1.4371346' />
-  <node id='10215645' timestamp='2007-03-04T19:38:17+00:00' user='Dean Earley' visible='true' lat='50.9237373' lon='-1.3407587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254728' timestamp='2007-04-29T15:19:34+01:00' visible='true' lat='50.9983948' lon='-1.3563785' />
-  <node id='245146241' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9142474' lon='-1.4013416' />
-  <node id='206163076' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9719904' lon='-1.3875067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675688' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.8997466' lon='-1.443666' />
-  <node id='29816729' timestamp='2007-05-31T22:13:29+01:00' visible='true' lat='50.9901515' lon='-1.3569404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632173' timestamp='2007-05-26T19:20:18+01:00' visible='true' lat='50.9578132' lon='-1.3677726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600526' timestamp='2006-12-16T10:22:34+00:00' user='nickw' visible='true' lat='50.9338365' lon='-1.4425757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998063' timestamp='2007-06-05T23:00:21+01:00' user='nickw' visible='true' lat='50.9871957' lon='-1.4125147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700439' timestamp='2007-04-05T14:18:06+01:00' user='Dean Earley' visible='true' lat='50.9237808' lon='-1.3840359' />
-  <node id='29838970' timestamp='2007-06-01T20:50:37+01:00' visible='true' lat='50.9888812' lon='-1.3958066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111050' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9825464' lon='-1.3832091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66589359' timestamp='2007-12-06T17:35:44+00:00' user='blackadder' visible='true' lat='50.9297677' lon='-1.4491405'>
-    <tag k='amenity' v='pub' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='422964' timestamp='2007-04-05T14:18:06+01:00' user='Dean Earley' visible='true' lat='50.9106' lon='-1.40878' />
-  <node id='28249888' timestamp='2007-04-29T21:41:43+01:00' visible='true' lat='50.9142973' lon='-1.4430277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360192' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9556688' lon='-1.3716537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600436' timestamp='2006-12-16T10:13:54+00:00' user='nickw' visible='true' lat='50.9212693' lon='-1.4525297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677138' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8968775' lon='-1.4470305' />
-  <node id='28250003' timestamp='2007-04-29T21:42:11+01:00' visible='true' lat='50.9154373' lon='-1.4487359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303934' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9335596' lon='-1.418435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928425' timestamp='2007-06-03T21:48:28+01:00' visible='true' lat='50.9795512' lon='-1.3679625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179491' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.9548266' lon='-1.405574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963738' timestamp='2007-02-18T20:19:10+00:00' visible='true' lat='50.9337721' lon='-1.4127277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392382' timestamp='2007-05-20T17:56:46+01:00' visible='true' lat='50.9631993' lon='-1.3545894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932475' timestamp='2007-05-10T21:06:13+01:00' user='Dean Earley' visible='true' lat='50.9633319' lon='-1.4592167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359706' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9687465' lon='-1.3527961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035787' timestamp='2006-10-22T10:18:16+01:00' user='nickw' visible='true' lat='50.9333149' lon='-1.3937002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223084' timestamp='2007-06-11T21:51:51+01:00' visible='true' lat='50.9837035' lon='-1.3555306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976785' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9292935' lon='-1.4215256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728882' timestamp='2007-05-28T19:12:32+01:00' visible='true' lat='50.969817' lon='-1.3575769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096976' timestamp='2007-06-08T23:24:18+01:00' visible='true' lat='50.9620638' lon='-1.3769007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705832' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8889429' lon='-1.3992804' />
-  <node id='27440008' timestamp='2007-04-18T02:00:20+01:00' visible='true' lat='50.9281975' lon='-1.3819264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254522' timestamp='2007-02-18T21:30:34+00:00' visible='true' lat='50.8993764' lon='-1.3914003' />
-  <node id='29914335' timestamp='2007-06-03T16:16:12+01:00' visible='true' lat='50.9850012' lon='-1.359835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997559' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9932607' lon='-1.3479675'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932482' timestamp='2007-05-10T21:06:16+01:00' user='Dean Earley' visible='true' lat='50.96526' lon='-1.4488092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984717' timestamp='2007-01-10T00:11:58+00:00' user='nickw' visible='true' lat='50.9443278' lon='-1.390377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816772' timestamp='2007-05-31T22:15:43+01:00' visible='true' lat='50.98782' lon='-1.3606798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026659' timestamp='2007-05-13T10:02:48+01:00' user='nickw' visible='true' lat='50.9273481' lon='-1.4000668'>
-    <tag k='name' v='CROFTON CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254991' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9514959' lon='-1.4000917' />
-  <node id='325256' timestamp='2006-11-11T17:21:07+00:00' user='Dean Earley' visible='true' lat='50.922356' lon='-1.3154991' />
-  <node id='29733498' timestamp='2007-05-28T21:25:42+01:00' user='LivingWithDragons' visible='true' lat='50.9811722' lon='-1.4444224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342559' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9071415' lon='-1.3666162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90665695' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.8994353' lon='-1.4129612' />
-  <node id='19228103' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.9494314' lon='-1.4250708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259902' timestamp='2007-04-29T23:09:26+01:00' user='Andy Street' visible='true' lat='50.9016328' lon='-1.3492067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398377' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9526922' lon='-1.442734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998080' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.990566' lon='-1.4088095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949933' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9924135' lon='-1.3873036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021773' timestamp='2007-04-03T00:52:45+01:00' user='Ben' visible='true' lat='50.9446581' lon='-1.3977585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908532' timestamp='2007-01-27T14:11:11+00:00' user='nickw' visible='true' lat='50.9384021' lon='-1.3670061' />
-  <node id='29001307' timestamp='2007-05-12T09:51:47+01:00' user='nickw' visible='true' lat='50.9394916' lon='-1.364807'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194393' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9455306' lon='-1.4381582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577087' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9196931' lon='-1.4706048' />
-  <node id='28372764' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9302915' lon='-1.4367876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657778' timestamp='2007-04-05T14:18:06+01:00' user='Dean Earley' visible='true' lat='50.8983357' lon='-1.3640309' />
-  <node id='29931342' timestamp='2007-06-03T22:43:02+01:00' visible='true' lat='50.9942237' lon='-1.3726934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161103' timestamp='2007-06-10T18:13:38+01:00' visible='true' lat='50.9710622' lon='-1.3549109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157204144' timestamp='2007-12-08T20:11:11+00:00' user='nickw' visible='true' lat='50.9423871' lon='-1.4449552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998990' timestamp='2007-06-05T23:28:58+01:00' user='nickw' visible='true' lat='50.9909098' lon='-1.4381826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21157474' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9072597' lon='-1.4105414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162247' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9734416' lon='-1.3857485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929007' timestamp='2007-06-03T21:58:06+01:00' visible='true' lat='50.9741745' lon='-1.3642143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9727817' timestamp='2007-02-04T22:51:54+00:00' user='Dean Earley' visible='true' lat='50.9088782' lon='-1.3700425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914421' timestamp='2007-06-03T16:22:51+01:00' visible='true' lat='50.9830319' lon='-1.3626937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114384' timestamp='2007-12-10T19:16:01+00:00' user='sladen' visible='true' lat='50.9049973' lon='-1.3920277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325056' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.944887' lon='-1.4845704' />
-  <node id='247794' timestamp='2007-09-05T17:47:13+01:00' user='mike l' visible='true' lat='50.937006' lon='-1.3962909' />
-  <node id='325671' timestamp='2007-04-05T14:18:07+01:00' user='Dean Earley' visible='true' lat='50.9405' lon='-1.42717' />
-  <node id='24984772' timestamp='2007-01-10T00:14:41+00:00' user='nickw' visible='true' lat='50.9444279' lon='-1.3939431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998542' timestamp='2007-06-05T23:13:23+01:00' user='nickw' visible='true' lat='50.9635033' lon='-1.4336728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949961' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.99709' lon='-1.3901644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133587' timestamp='2007-05-15T20:41:27+01:00' user='nickw' visible='true' lat='50.933778' lon='-1.3725428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009231' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9297837' lon='-1.3550833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59058425' timestamp='2007-09-23T16:33:06+01:00' user='mike l' visible='true' lat='50.9416085' lon='-1.3750915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254676' timestamp='2007-05-01T18:34:23+01:00' visible='true' lat='50.9717501' lon='-1.3681953'>
-    <tag k='highway' v='traffic_signals' />
-  </node>
-  <node id='20954590' timestamp='2006-11-10T08:43:41+00:00' user='nickw' visible='true' lat='50.929521' lon='-1.3907592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29862361' timestamp='2007-06-02T12:32:36+01:00' visible='true' lat='50.9311936' lon='-1.4293544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909661' timestamp='2007-06-03T14:54:17+01:00' visible='true' lat='50.9679601' lon='-1.3544923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471861' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9395713' lon='-1.366245'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248232' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8951182' lon='-1.3976155' />
-  <node id='18398400' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.976505' lon='-1.4202123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071258' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9198659' lon='-1.3606932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591287' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9194342' lon='-1.411751'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29588095' timestamp='2007-05-25T19:00:53+01:00' visible='true' lat='50.9675808' lon='-1.3549337'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526312' timestamp='2007-05-23T09:19:01+01:00' user='nickw' visible='true' lat='50.9289411' lon='-1.3635242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325686' timestamp='2007-04-05T14:18:07+01:00' user='Dean Earley' visible='true' lat='50.9196' lon='-1.41348' />
-  <node id='9266201' timestamp='2007-01-28T00:56:04+00:00' visible='true' lat='50.9246882' lon='-1.3873174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613496' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9790241' lon='-1.396181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269048' timestamp='2006-07-01T00:43:25+01:00' user='Dean Earley' visible='true' lat='50.9464916' lon='-1.3722551' />
-  <node id='20972825' timestamp='2006-11-13T00:07:33+00:00' user='Dean Earley' visible='true' lat='50.9005326' lon='-1.3970741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147651' timestamp='2008-02-03T06:17:24+00:00' user='sladen' visible='true' lat='50.9096798' lon='-1.406294' />
-  <node id='29711601' timestamp='2007-05-28T14:46:27+01:00' visible='true' lat='50.9767245' lon='-1.3643792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157218839' timestamp='2007-12-08T20:21:05+00:00' user='nickw' visible='true' lat='50.9453319' lon='-1.4462515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298252' timestamp='2007-01-06T14:30:52+00:00' user='Dean Earley' visible='true' lat='50.9790077' lon='-1.3696813' />
-  <node id='48965788' timestamp='2007-09-11T00:11:36+01:00' visible='true' lat='50.9018133' lon='-1.4061714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114367' timestamp='2007-02-23T21:46:12+00:00' user='nickw' visible='true' lat='50.9046798' lon='-1.393889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675769' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9072973' lon='-1.4233194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388941' timestamp='2007-04-05T14:18:07+01:00' user='Dean Earley' visible='true' lat='50.9421' lon='-1.40046' />
-  <node id='29380423' timestamp='2007-05-20T10:19:27+01:00' user='nickw' visible='true' lat='50.9452401' lon='-1.3801442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668283' timestamp='2007-01-04T21:06:34+00:00' user='nickw' visible='true' lat='50.9897347' lon='-1.404204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817071' timestamp='2007-05-31T22:18:46+01:00' visible='true' lat='50.985074' lon='-1.3647878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114374' timestamp='2007-03-09T20:54:28+00:00' user='nickw' visible='true' lat='50.9080247' lon='-1.3922003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924330' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9816794' lon='-1.389369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422998' timestamp='2007-05-22T00:19:46+01:00' user='Dean Earley' visible='true' lat='50.9466093' lon='-1.3994951' />
-  <node id='13704895' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.9019568' lon='-1.44295'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='160232036' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.907238' lon='-1.3938216' />
-  <node id='29569817' timestamp='2007-05-26T14:54:04+01:00' user='LivingWithDragons' visible='true' lat='50.9806431' lon='-1.4434695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298273' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9626305' lon='-1.3882895' />
-  <node id='13706714' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.896851' lon='-1.3830729'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29632897' timestamp='2007-05-26T20:07:53+01:00' visible='true' lat='50.9679729' lon='-1.3634344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997542' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0006127' lon='-1.3498747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254659' timestamp='2006-12-14T23:57:11+00:00' user='Dean Earley' visible='true' lat='50.9700674' lon='-1.3495142' />
-  <node id='15657683' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9141815' lon='-1.3726729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92683732' timestamp='2007-10-30T17:25:08+00:00' user='Nick Dyer' visible='true' lat='50.9604843' lon='-1.4238098' />
-  <node id='254835' timestamp='2007-04-03T00:52:05+01:00' user='Dean Earley' visible='true' lat='50.9104911' lon='-1.4194511' />
-  <node id='29708018' timestamp='2007-05-28T12:04:03+01:00' visible='true' lat='50.9848684' lon='-1.363097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110486' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9277591' lon='-1.4368768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160233335' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9067022' lon='-1.3940018' />
-  <node id='28249922' timestamp='2007-04-29T21:41:48+01:00' visible='true' lat='50.9175679' lon='-1.4555173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780802' timestamp='2007-06-22T21:09:49+01:00' user='Steve Chilton' visible='true' lat='50.9075057' lon='-1.4051757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903064' timestamp='2007-05-09T23:03:40+01:00' visible='true' lat='50.9425382' lon='-1.37121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325011' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9575439' lon='-1.4145888' />
-  <node id='28173833' timestamp='2007-04-29T01:01:18+01:00' visible='true' lat='50.9426021' lon='-1.4333341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290772' timestamp='2007-10-29T15:43:33+00:00' user='Dean Earley' visible='true' lat='50.9675774' lon='-1.3827128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726571' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.9119509' lon='-1.399821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329534' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9763473' lon='-1.4309404' />
-  <node id='21579404' timestamp='2006-12-14T13:52:50+00:00' user='David Currie' visible='true' lat='50.9763408' lon='-1.4048217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269322' timestamp='2006-10-22T23:24:25+01:00' user='Ben' visible='true' lat='50.986864' lon='-1.385682' />
-  <node id='324344' timestamp='2006-09-02T19:02:13+01:00' user='Dean Earley' visible='true' lat='50.9173687' lon='-1.402688' />
-  <node id='254706' timestamp='2007-01-28T00:55:30+00:00' visible='true' lat='50.918697' lon='-1.4037254' />
-  <node id='28180210' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9623674' lon='-1.4255309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998094' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.9874396' lon='-1.4011211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160216602' timestamp='2007-12-10T19:11:24+00:00' user='sladen' visible='true' lat='50.9136404' lon='-1.3902596' />
-  <node id='702366' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.949305' lon='-1.3645447' />
-  <node id='91127587' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9351082' lon='-1.438455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9267990' timestamp='2007-02-01T22:21:56+00:00' user='Dean Earley' visible='true' lat='50.9423838' lon='-1.3759016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642327' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9506334' lon='-1.3609887' />
-  <node id='21661766' timestamp='2006-12-20T23:57:08+00:00' user='nickw' visible='true' lat='50.9028121' lon='-1.4045066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071292' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9206616' lon='-1.3584753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796784' timestamp='2007-05-30T22:22:06+01:00' user='nickw' visible='true' lat='50.9211859' lon='-1.3558197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223566' timestamp='2007-06-11T21:58:16+01:00' visible='true' lat='50.9842704' lon='-1.3534755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480539' timestamp='2007-01-27T23:21:09+00:00' visible='true' lat='50.9112773' lon='-1.3891616'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29707329' timestamp='2007-06-03T15:50:16+01:00' visible='true' lat='50.9873422' lon='-1.3583249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290718' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true' lat='50.9704545' lon='-1.3823178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872360' timestamp='2007-06-02T19:03:55+01:00' visible='true' lat='50.9171669' lon='-1.3510975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468533' timestamp='2007-05-22T01:06:53+01:00' user='Dean Earley' visible='true' lat='50.9217194' lon='-1.4682062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723035' timestamp='2007-01-06T14:30:52+00:00' user='Dean Earley' visible='true' lat='50.9923632' lon='-1.3599281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301582' timestamp='2008-02-03T06:18:39+00:00' user='sladen' visible='true' lat='50.9089709' lon='-1.3998052' />
-  <node id='28179461' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9624777' lon='-1.4120644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871666' timestamp='2007-06-02T18:57:48+01:00' visible='true' lat='50.9146638' lon='-1.3508092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664557' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9075869' lon='-1.407674' />
-  <node id='21561783' timestamp='2006-12-13T20:19:44+00:00' user='nickw' visible='true' lat='50.926401' lon='-1.4362075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971208' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9081342' lon='-1.4146737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161990' timestamp='2007-09-16T10:21:43+01:00' user='mike l' visible='true' lat='50.9816831' lon='-1.3825859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461223' timestamp='2007-05-21T23:43:13+01:00' user='nickw' visible='true' lat='50.9062185' lon='-1.3971624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903897' timestamp='2007-05-10T01:06:39+01:00' user='LivingWithDragons' visible='true' lat='50.9811965' lon='-1.4446531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924300' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.971347' lon='-1.3835679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254882' timestamp='2007-02-06T00:16:37+00:00' user='Dean Earley' visible='true' lat='50.9110669' lon='-1.4009648' />
-  <node id='3915351' timestamp='2006-07-09T22:04:01+01:00' user='Dean Earley' visible='true' lat='50.9148601' lon='-1.3295953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743153' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9233708' lon='-1.427559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305228' timestamp='2007-01-06T14:30:52+00:00' user='Dean Earley' visible='true' lat='50.9943022' lon='-1.3584093' />
-  <node id='29839189' timestamp='2007-06-01T20:53:34+01:00' visible='true' lat='50.9854663' lon='-1.3649863'>
-    <tag k='leisure' v='playground' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229573' timestamp='2007-06-12T00:14:39+01:00' user='nickw' visible='true' lat='50.9339738' lon='-1.3534671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999063' timestamp='2007-06-05T23:29:05+01:00' user='nickw' visible='true' lat='50.9934858' lon='-1.4284478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345034' timestamp='2007-04-30T23:00:34+01:00' user='nickw' visible='true' lat='50.9251427' lon='-1.3588561'>
-    <tag k='name' v='CLEVELND R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229562' timestamp='2007-06-12T00:14:37+01:00' user='nickw' visible='true' lat='50.9332476' lon='-1.3545796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423505' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9312637' lon='-1.444131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976702' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9345773' lon='-1.4240288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640004' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9110342' lon='-1.3709161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613481' timestamp='2006-12-16T17:46:59+00:00' user='David Currie' visible='true' lat='50.9701511' lon='-1.3927079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305595' timestamp='2007-10-07T23:28:17+01:00' user='alfabet' visible='true' lat='50.9916511' lon='-1.3897946'>
-    <tag k='created_by' v='Potlatch 0.4' />
-  </node>
-  <node id='201648597' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9521528' lon='-1.3593064' />
-  <node id='387803' timestamp='2007-04-05T14:18:08+01:00' user='Dean Earley' visible='true' lat='50.9263' lon='-1.40378' />
-  <node id='18232081' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9112876' lon='-1.4128728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252904' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9455034' lon='-1.4306371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998969' timestamp='2007-06-05T23:28:55+01:00' user='nickw' visible='true' lat='50.9881837' lon='-1.4371098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949950' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9944643' lon='-1.3894889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636947' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.9190738' lon='-1.4259541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342522' timestamp='2007-04-30T22:13:31+01:00' user='nickw' visible='true' lat='50.9102357' lon='-1.3623448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127604' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9361536' lon='-1.4357878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001337' timestamp='2007-05-16T00:59:48+01:00' visible='true' lat='50.9228541' lon='-1.380837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275707' timestamp='2006-12-13T20:09:46+00:00' user='nickw' visible='true' lat='50.9244781' lon='-1.4332042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504286' timestamp='2007-01-28T19:31:52+00:00' user='nickw' visible='true' lat='50.998764' lon='-1.3478739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677153' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8964877' lon='-1.4409966' />
-  <node id='21507787' timestamp='2007-05-22T00:19:47+01:00' user='Dean Earley' visible='true' lat='50.9491744' lon='-1.400723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431996' timestamp='2007-06-16T16:26:10+01:00' visible='true' lat='50.9838977' lon='-1.3507151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331365' timestamp='2007-11-28T12:24:03+00:00' user='Dean Earley' visible='true' lat='50.9711' lon='-1.4097' />
-  <node id='29991809' timestamp='2007-06-05T20:54:57+01:00' visible='true' lat='50.9808142' lon='-1.3685588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636814' timestamp='2007-04-29T02:33:44+01:00' user='Dean Earley' visible='true' lat='50.9511864' lon='-1.4126676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342640' timestamp='2007-04-30T22:13:42+01:00' user='nickw' visible='true' lat='50.9118641' lon='-1.3635369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29510747' timestamp='2007-05-22T21:47:16+01:00' visible='true' lat='50.9720752' lon='-1.3510837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194878' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9434692' lon='-1.4109062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346781' timestamp='2007-03-04T18:57:57+00:00' user='Dean Earley' visible='true' lat='50.9144493' lon='-1.3666002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48967846' timestamp='2007-12-10T21:06:32+00:00' user='sladen' visible='true' lat='50.9030972' lon='-1.4156805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244158' timestamp='2007-04-29T20:36:15+01:00' user='Andy Street' visible='true' lat='50.9039399' lon='-1.3511591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254492' timestamp='2006-09-02T18:21:44+01:00' user='Dean Earley' visible='true' lat='50.9103984' lon='-1.4016254' />
-  <node id='19227231' timestamp='2007-05-22T00:19:47+01:00' user='Dean Earley' visible='true' lat='50.9367644' lon='-1.4169404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141416' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9280258' lon='-1.4286508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469845' timestamp='2007-04-05T14:18:08+01:00' user='Dean Earley' visible='true' lat='50.9221364' lon='-1.3466656' />
-  <node id='474845' timestamp='2007-09-23T16:33:13+01:00' user='mike l' visible='true' lat='50.9368773' lon='-1.3548316' />
-  <node id='15657717' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9235803' lon='-1.3847493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964154' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9183642' lon='-1.3811889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613447' timestamp='2006-12-16T17:46:56+00:00' user='David Currie' visible='true' lat='50.97493' lon='-1.4028261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179508' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9538658' lon='-1.4021626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290757' timestamp='2007-06-13T09:24:04+01:00' visible='true' lat='50.9636803' lon='-1.3825174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66587708' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9312384' lon='-1.4486329' />
-  <node id='14743176' timestamp='2007-02-18T21:30:54+00:00' visible='true' lat='50.9077337' lon='-1.4103399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091832' timestamp='2007-03-24T16:33:39+00:00' user='Dean Earley' visible='true' lat='50.9208661' lon='-1.4235584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924101' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.941983' lon='-1.3738952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229592' timestamp='2007-06-12T00:14:42+01:00' user='nickw' visible='true' lat='50.9338611' lon='-1.3498911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='197672645' timestamp='2007-12-30T16:16:02+00:00' visible='true' lat='50.9220467' lon='-1.3879184'>
-    <tag k='ref' v='SDN' />
-    <tag k='railway' v='station' />
-    <tag k='name' v='St Denys' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949899' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9926886' lon='-1.3792774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398445' timestamp='2007-04-03T00:53:56+01:00' user='Ben' visible='true' lat='50.9356539' lon='-1.4070617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388956' timestamp='2007-04-05T14:18:08+01:00' user='Dean Earley' visible='true' lat='50.9445095' lon='-1.39745' />
-  <node id='25296609' timestamp='2007-01-19T10:19:55+00:00' user='Dean Earley' visible='true' lat='50.9712491' lon='-1.3660965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668051' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.988159' lon='-1.3999128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254386' timestamp='2007-01-19T20:36:00+00:00' user='Dean Earley' visible='true' lat='50.9207615' lon='-1.3675293' />
-  <node id='13706238' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9103355' lon='-1.3770034'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='254944' timestamp='2006-09-04T02:08:07+01:00' user='Dean Earley' visible='true' lat='50.9506' lon='-1.4149672' />
-  <node id='298243' timestamp='2006-08-11T09:59:01+01:00' user='80n' visible='true' lat='50.9988494' lon='-1.3568568' />
-  <node id='14727993' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9185344' lon='-1.4036916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926801' timestamp='2007-06-03T21:02:52+01:00' visible='true' lat='50.9787069' lon='-1.3642896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124370' timestamp='2007-06-09T19:43:10+01:00' user='nickw' visible='true' lat='50.9249629' lon='-1.3513907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147524' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9097718' lon='-1.4021742' />
-  <node id='20102967' timestamp='2006-10-27T22:27:53+01:00' user='Dean Earley' visible='true' lat='50.9296929' lon='-1.3579207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600419' timestamp='2007-03-24T16:33:39+00:00' user='Dean Earley' visible='true' lat='50.9183635' lon='-1.4305133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526770' timestamp='2007-05-23T09:49:13+01:00' visible='true' lat='50.9815539' lon='-1.3488955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296388' timestamp='2007-01-19T09:58:46+00:00' user='Dean Earley' visible='true' lat='50.9758849' lon='-1.3712042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342576' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9086573' lon='-1.3625038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689097' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.941563' lon='-1.3847417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746411' timestamp='2006-12-27T00:28:32+00:00' user='southglos' visible='true' lat='50.9905502' lon='-1.3429175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469854' timestamp='2007-04-05T14:18:08+01:00' user='Dean Earley' visible='true' lat='50.9094621' lon='-1.4173572' />
-  <node id='91130461' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true' lat='50.9290622' lon='-1.4323782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675856' timestamp='2007-04-05T14:18:09+01:00' user='Dean Earley' visible='true' lat='50.9263926' lon='-1.3665934' />
-  <node id='29463034' timestamp='2007-05-22T00:01:33+01:00' user='nickw' visible='true' lat='50.909046' lon='-1.4075548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153329594' timestamp='2007-12-06T20:42:59+00:00' user='Dean Earley' visible='true' lat='50.9977745' lon='-1.3581623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684350' timestamp='2007-10-31T12:25:02+00:00' user='Dean Earley' visible='true' lat='50.9614141' lon='-1.4221913' />
-  <node id='29588107' timestamp='2007-10-16T11:34:24+01:00' user='Dean Earley' visible='true' lat='50.9672168' lon='-1.3521074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27434185' timestamp='2007-04-17T22:04:00+01:00' visible='true' lat='50.9294448' lon='-1.3875597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963795' timestamp='2006-09-28T23:48:07+01:00' user='nickw' visible='true' lat='50.9340142' lon='-1.4008482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29510734' timestamp='2007-06-16T16:26:48+01:00' visible='true' lat='50.9733427' lon='-1.353027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303938' timestamp='2007-04-29T20:37:38+01:00' user='Dean Earley' visible='true' lat='50.9343127' lon='-1.4190883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953377' timestamp='2007-06-04T21:17:00+01:00' visible='true' lat='51.0043309' lon='-1.3848287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998103' timestamp='2007-06-05T23:00:26+01:00' user='nickw' visible='true' lat='50.9845318' lon='-1.3955087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601927' timestamp='2006-09-01T00:23:19+01:00' user='nickw' visible='true' lat='50.8706287' lon='-1.5097457'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29704452' timestamp='2007-05-28T10:36:07+01:00' visible='true' lat='50.9824513' lon='-1.3573171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423273' timestamp='2007-09-25T17:50:08+01:00' user='mike l' visible='true' lat='50.9399329' lon='-1.3889546' />
-  <node id='24949978' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9857106' lon='-1.3831713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161358' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9743561' lon='-1.3545884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244175' timestamp='2007-04-29T20:36:17+01:00' user='Andy Street' visible='true' lat='50.904057' lon='-1.3524215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244140' timestamp='2007-04-29T20:36:11+01:00' user='Andy Street' visible='true' lat='50.9044316' lon='-1.3498657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331348' timestamp='2007-12-06T22:09:49+00:00' user='Dean Earley' visible='true' lat='51.011' lon='-1.38181' />
-  <node id='382995' timestamp='2007-04-05T14:18:09+01:00' user='Dean Earley' visible='true' lat='50.9282873' lon='-1.4242207' />
-  <node id='254256' timestamp='2005-11-15T15:38:49+00:00' user='nickw' visible='true' lat='50.9395022' lon='-1.3633936' />
-  <node id='28194430' timestamp='2007-04-29T21:10:30+01:00' visible='true' lat='50.9471267' lon='-1.4356965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135266' timestamp='2007-05-15T20:56:01+01:00' user='nickw' visible='true' lat='50.9443806' lon='-1.3856159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296017' timestamp='2007-01-19T09:28:07+00:00' user='Dean Earley' visible='true' lat='50.9861212' lon='-1.3507369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29512250' timestamp='2007-05-28T10:59:41+01:00' visible='true' lat='50.9801998' lon='-1.3510626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342623' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9097221' lon='-1.3679274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035788' timestamp='2006-10-22T10:18:16+01:00' user='nickw' visible='true' lat='50.93353' lon='-1.3936643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157201965' timestamp='2007-12-08T20:09:10+00:00' user='nickw' visible='true' lat='50.9422994' lon='-1.4439817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632839' timestamp='2007-05-26T20:07:29+01:00' visible='true' lat='50.9680472' lon='-1.3630703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575734' timestamp='2007-03-16T21:52:24+00:00' user='nickw' visible='true' lat='50.9031866' lon='-1.3979352'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466085' timestamp='2007-05-22T00:37:51+01:00' user='Dean Earley' visible='true' lat='50.9435494' lon='-1.4480277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931364' timestamp='2007-06-03T22:43:06+01:00' visible='true' lat='50.9951109' lon='-1.3731207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141399' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9260848' lon='-1.4268827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26353252' timestamp='2007-03-04T21:50:41+00:00' user='Dean Earley' visible='true' lat='50.8999192' lon='-1.3524024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28388968' timestamp='2007-08-21T00:40:59+01:00' user='HenryDCase' visible='true' lat='50.9650964' lon='-1.3592697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949916' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9927137' lon='-1.3788801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194400' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9461457' lon='-1.4392776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640038' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9139461' lon='-1.3612385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009023' timestamp='2007-05-12T15:28:41+01:00' user='nickw' visible='true' lat='50.9310734' lon='-1.3500272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384701' timestamp='2007-06-02T19:55:02+01:00' visible='true' lat='50.9690864' lon='-1.3619587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830631' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9271762' lon='-1.360351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110501' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true' lat='50.9303386' lon='-1.4318306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227216' timestamp='2006-10-23T20:52:55+01:00' user='nickw' visible='true' lat='50.9323429' lon='-1.412232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660058' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.904518' lon='-1.4099399' />
-  <node id='8596761' timestamp='2007-08-14T04:48:36+01:00' user='andrewpmk' visible='true' lat='50.9077063' lon='-1.3975877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000490' timestamp='2007-05-12T09:26:08+01:00' user='nickw' visible='true' lat='50.9197855' lon='-1.4111684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160260406' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9498566' lon='-1.3686388' />
-  <node id='29595202' timestamp='2007-05-25T21:54:34+01:00' visible='true' lat='50.9693492' lon='-1.3537995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601312' timestamp='2006-09-01T00:20:28+01:00' user='nickw' visible='true' lat='50.8356912' lon='-1.5056207'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='91120349' timestamp='2007-10-29T08:12:54+00:00' user='nickw' visible='true' lat='50.9314592' lon='-1.4460205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130964' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.929355' lon='-1.356885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512894' timestamp='2008-01-29T11:33:03+00:00' user='Dean Earley' visible='true' lat='50.9589406' lon='-1.3454951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621211' timestamp='2007-06-18T21:09:43+01:00' visible='true' lat='50.9700864' lon='-1.3546139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998563' timestamp='2007-06-05T23:13:26+01:00' user='nickw' visible='true' lat='50.9625523' lon='-1.4303352'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9727811' timestamp='2007-11-11T18:09:50+00:00' user='Dean Earley' visible='true' lat='50.9156107' lon='-1.3606789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956739' timestamp='2007-06-26T23:49:25+01:00' user='nickw' visible='true' lat='50.9280094' lon='-1.3511415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561566' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.925897' lon='-1.4293321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372749' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.929583' lon='-1.440059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296300' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9837865' lon='-1.3572628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689056' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.932216' lon='-1.3955873'>
-    <tag k='name' v='HILLDOWN' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161247' timestamp='2007-06-10T18:18:28+01:00' visible='true' lat='50.9637593' lon='-1.3638641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432004' timestamp='2007-06-16T16:28:30+01:00' visible='true' lat='50.9720113' lon='-1.3506852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149963' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9087544' lon='-1.4020969' />
-  <node id='29464228' timestamp='2007-05-22T00:19:07+01:00' user='Dean Earley' visible='true' lat='50.9369743' lon='-1.4198769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639966' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.8999077' lon='-1.3788377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254599' timestamp='2006-08-27T18:01:38+01:00' user='Dean Earley' visible='true' lat='50.9166958' lon='-1.406287' />
-  <node id='13564829' timestamp='2006-10-27T22:28:01+01:00' user='Dean Earley' visible='true' lat='50.9325822' lon='-1.3572616'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='661179' timestamp='2007-04-05T14:18:09+01:00' user='Dean Earley' visible='true' lat='50.9130568' lon='-1.3598144' />
-  <node id='14728172' timestamp='2007-04-29T02:05:44+01:00' user='Dean Earley' visible='true' lat='50.9518972' lon='-1.4042101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179521' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9553658' lon='-1.4018187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431936' timestamp='2007-06-16T16:23:57+01:00' visible='true' lat='50.9836725' lon='-1.3505684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957241' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9216691' lon='-1.4096597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254897' timestamp='2007-02-18T20:19:18+00:00' visible='true' lat='50.9339768' lon='-1.4179726' />
-  <node id='92682869' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9621146' lon='-1.4250715' />
-  <node id='21507745' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.9318038' lon='-1.3985031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942601' timestamp='2006-07-19T01:48:01+01:00' user='Dean Earley' visible='true' lat='50.9147945' lon='-1.3294023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710561' timestamp='2007-05-28T14:15:21+01:00' visible='true' lat='50.9832796' lon='-1.3593273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163091' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.97149' lon='-1.3842387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976664' timestamp='2006-11-13T21:39:12+00:00' user='nickw' visible='true' lat='50.9328426' lon='-1.42574'>
-    <tag k='name' v='HOLLYBRK R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92720598' timestamp='2007-10-30T18:01:30+00:00' user='Nick Dyer' visible='true' lat='50.9037086' lon='-1.4189' />
-  <node id='21636769' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.9476471' lon='-1.4026526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28388955' timestamp='2007-05-02T14:53:31+01:00' visible='true' lat='50.9638549' lon='-1.3599503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486282' timestamp='2007-07-09T11:55:40+01:00' visible='true' lat='50.9100227' lon='-1.381526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549370' timestamp='2007-05-24T11:22:50+01:00' visible='true' lat='50.9667684' lon='-1.3730235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903638' timestamp='2007-05-09T23:57:38+01:00' visible='true' lat='50.9488678' lon='-1.3638199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201644178' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9479297' lon='-1.3652459' />
-  <node id='25640019' timestamp='2007-03-04T18:58:33+00:00' user='Dean Earley' visible='true' lat='50.9117792' lon='-1.3692512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710124' timestamp='2007-05-28T13:11:04+01:00' visible='true' lat='50.9895744' lon='-1.3712231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071288' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9182401' lon='-1.359868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730506' timestamp='2007-05-28T19:36:35+01:00' visible='true' lat='50.9714163' lon='-1.3717664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008799' timestamp='2007-05-12T15:20:39+01:00' user='nickw' visible='true' lat='50.9274483' lon='-1.3496597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816771' timestamp='2007-05-31T22:15:43+01:00' visible='true' lat='50.9879485' lon='-1.3603972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956570' timestamp='2007-06-26T23:44:56+01:00' user='nickw' visible='true' lat='50.927449' lon='-1.3518617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704310' timestamp='2007-05-28T10:32:52+01:00' visible='true' lat='50.9868417' lon='-1.3576632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447530' timestamp='2007-03-09T21:07:40+00:00' user='nickw' visible='true' lat='50.9081563' lon='-1.3900555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583082' timestamp='2007-05-02T23:57:59+01:00' visible='true' lat='50.9357237' lon='-1.434095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727959' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.91713' lon='-1.4032793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831115' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9134281' lon='-1.4064602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999084' timestamp='2007-06-05T23:29:06+01:00' user='nickw' visible='true' lat='50.9893842' lon='-1.4336132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091852' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9110046' lon='-1.4257656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254305' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9869018' lon='-1.3478413' />
-  <node id='87874506' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.9195957' lon='-1.4133345' />
-  <node id='28903874' timestamp='2007-10-16T11:34:25+01:00' user='Dean Earley' visible='true' lat='50.9503407' lon='-1.3633453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816408' timestamp='2007-05-31T21:56:31+01:00' visible='true' lat='50.9893477' lon='-1.3552696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942559' timestamp='2006-10-19T00:01:03+01:00' user='Dean Earley' visible='true' lat='50.9002426' lon='-1.354011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171748' timestamp='2007-05-16T23:47:59+01:00' user='nickw' visible='true' lat='50.9405282' lon='-1.391813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341754' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9122455' lon='-1.358128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247809' timestamp='2006-12-18T23:27:28+00:00' visible='true' lat='50.9310079' lon='-1.3915086' />
-  <node id='254745' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.9658667' lon='-1.392072' />
-  <node id='254775' timestamp='2007-04-03T00:52:07+01:00' user='Dean Earley' visible='true' lat='50.9233347' lon='-1.4346636' />
-  <node id='28179478' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.9572022' lon='-1.4091384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29506472' timestamp='2007-05-22T19:46:56+01:00' visible='true' lat='50.987002' lon='-1.3512627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708040' timestamp='2007-05-28T12:04:10+01:00' visible='true' lat='50.9789732' lon='-1.3671089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303132' timestamp='2007-01-19T18:27:12+00:00' user='Dean Earley' visible='true' lat='50.9616569' lon='-1.3875753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237233' timestamp='2007-04-29T19:42:02+01:00' user='Andy Street' visible='true' lat='50.9021179' lon='-1.3570084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659232' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9029213' lon='-1.4060947' />
-  <node id='325199' timestamp='2006-11-11T17:21:33+00:00' user='Dean Earley' visible='true' lat='50.9459591' lon='-1.3648681' />
-  <node id='24924187' timestamp='2007-01-06T14:37:52+00:00' user='nickw' visible='true' lat='50.9428805' lon='-1.3734507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110900' timestamp='2006-10-27T23:39:31+01:00' user='Dean Earley' visible='true' lat='50.9352355' lon='-1.3656255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947169' timestamp='2007-03-24T16:33:39+00:00' user='Dean Earley' visible='true' lat='50.9094686' lon='-1.3936122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632212' timestamp='2007-05-26T19:21:12+01:00' visible='true' lat='50.9572303' lon='-1.366028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957198' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9199227' lon='-1.4181585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236154' timestamp='2007-04-29T19:26:05+01:00' user='Andy Street' visible='true' lat='50.9067787' lon='-1.3559481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27561984' timestamp='2007-04-23T21:55:06+01:00' user='waschbaer' visible='true' lat='50.9054495' lon='-1.4142176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931387' timestamp='2007-06-03T22:43:10+01:00' visible='true' lat='50.9941703' lon='-1.3737083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247807' timestamp='2007-04-05T14:18:09+01:00' user='Dean Earley' visible='true' lat='50.9308438' lon='-1.3906953' />
-  <node id='29392344' timestamp='2007-05-20T17:52:29+01:00' visible='true' lat='50.9630544' lon='-1.3534348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160378141' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.921919' lon='-1.4689813' />
-  <node id='29712186' timestamp='2007-05-28T15:03:24+01:00' visible='true' lat='50.9860117' lon='-1.3548993'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661175' timestamp='2007-04-05T14:18:09+01:00' user='Dean Earley' visible='true' lat='50.9131505' lon='-1.3568457' />
-  <node id='30956611' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9292459' lon='-1.3505008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256892' timestamp='2007-06-12T20:38:17+01:00' visible='true' lat='50.9794089' lon='-1.3581627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418536' timestamp='2007-05-02T00:35:24+01:00' visible='true' lat='50.9636185' lon='-1.371985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089059' timestamp='2007-06-08T18:11:58+01:00' visible='true' lat='50.9655741' lon='-1.3747513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447389' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.9087497' lon='-1.388422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173978' timestamp='2007-04-29T01:03:39+01:00' visible='true' lat='50.9422854' lon='-1.4337954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745495' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9604598' lon='-1.3912235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160377636' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9214375' lon='-1.4669471' />
-  <node id='91117372' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9304075' lon='-1.4453053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964117' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9221226' lon='-1.3761524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115459' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9280205' lon='-1.4433906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280980' timestamp='2007-02-18T20:18:24+00:00' visible='true' lat='50.9156484' lon='-1.3654622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740485' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9964465' lon='-1.3525341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324987' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9583975' lon='-1.4112866' />
-  <node id='245150603' timestamp='2008-02-03T06:16:22+00:00' user='sladen' visible='true' lat='50.9087814' lon='-1.407942' />
-  <node id='29530526' timestamp='2007-05-23T13:04:49+01:00' visible='true' lat='50.9849782' lon='-1.3558889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636821' timestamp='2007-04-29T02:33:01+01:00' user='Dean Earley' visible='true' lat='50.9508567' lon='-1.4129157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577051' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9043021' lon='-1.417364' />
-  <node id='59599702' timestamp='2007-09-24T09:46:23+01:00' user='mike l' visible='true' lat='50.9972035' lon='-1.4443737' />
-  <node id='18398464' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.9256501' lon='-1.4149652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984766' timestamp='2007-01-10T00:14:39+00:00' user='nickw' visible='true' lat='50.9454794' lon='-1.3972012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325247' timestamp='2005-12-16T23:14:53+00:00' user='80n' visible='true' lat='50.9304951' lon='-1.3201352' />
-  <node id='25764489' timestamp='2007-02-18T21:27:35+00:00' visible='true' lat='50.9156945' lon='-1.3943113' />
-  <node id='157238299' timestamp='2007-12-08T20:33:30+00:00' user='nickw' visible='true' lat='50.9472751' lon='-1.4492675'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440794' timestamp='2007-04-20T23:53:15+01:00' user='Dean Earley' visible='true' lat='50.9159176' lon='-1.3847818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796863' timestamp='2007-05-30T22:26:19+01:00' user='nickw' visible='true' lat='50.9166145' lon='-1.3599719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194521' timestamp='2007-04-29T08:33:30+01:00' user='Dean Earley' visible='true' lat='50.9477339' lon='-1.4127118'>
-    <tag k='amenity' v='parking' />
-    <tag k='name' v='Municipal Golf Course' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239022' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9074329' lon='-1.4153822' />
-  <node id='28935741' timestamp='2007-05-11T00:50:38+01:00' visible='true' lat='50.939443' lon='-1.4460625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689167' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9406053' lon='-1.3726031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237245' timestamp='2007-04-29T19:42:06+01:00' user='Andy Street' visible='true' lat='50.9075111' lon='-1.3478366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342589' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9099977' lon='-1.3624839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675869' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9267375' lon='-1.3687267' />
-  <node id='28874059' timestamp='2007-10-12T14:11:46+01:00' user='SteveC' visible='true' lat='50.9366692' lon='-1.4411055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971144' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.9102029' lon='-1.3993146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972653' timestamp='2008-01-29T12:06:35+00:00' user='Dean Earley' visible='true' lat='50.9658294' lon='-1.3502928'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28343218' timestamp='2007-04-30T22:24:06+01:00' user='nickw' visible='true' lat='50.9124529' lon='-1.405575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998913' timestamp='2007-06-05T23:28:49+01:00' user='nickw' visible='true' lat='50.9861577' lon='-1.437825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000940' timestamp='2007-05-12T09:30:26+01:00' user='nickw' visible='true' lat='50.919579' lon='-1.408198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110937' timestamp='2006-10-27T23:39:34+01:00' user='Dean Earley' visible='true' lat='50.9350712' lon='-1.3665756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702385' timestamp='2006-04-15T16:31:47+01:00' user='Gagravarr' visible='true' lat='50.9858844' lon='-1.3449459' />
-  <node id='29816558' timestamp='2007-05-31T22:04:27+01:00' visible='true' lat='50.9913585' lon='-1.3544153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071250' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9217951' lon='-1.3594553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984787' timestamp='2007-01-10T00:15:07+00:00' user='nickw' visible='true' lat='50.9424563' lon='-1.3857679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518804' timestamp='2007-04-05T14:18:10+01:00' user='Dean Earley' visible='true' lat='50.9293' lon='-1.38445' />
-  <node id='29816403' timestamp='2007-05-31T21:56:29+01:00' visible='true' lat='50.9889255' lon='-1.3550924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91119011' timestamp='2007-10-29T08:11:20+00:00' user='nickw' visible='true' lat='50.928955' lon='-1.4455337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728880' timestamp='2007-05-28T19:12:31+01:00' visible='true' lat='50.9712801' lon='-1.3572808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639992' timestamp='2007-02-04T22:51:23+00:00' user='Dean Earley' visible='true' lat='50.9008104' lon='-1.3745954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830579' timestamp='2007-05-05T09:03:38+01:00' user='nickw' visible='true' lat='50.9255206' lon='-1.366301'>
-    <tag k='name' v='TRENT RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59740698' timestamp='2007-09-25T13:21:04+01:00' visible='true' lat='50.9125426' lon='-1.4033724'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Varsity' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='154765447' timestamp='2007-12-07T13:46:56+00:00' user='Nick Dyer' visible='true' lat='50.9618773' lon='-1.4284739' />
-  <node id='25639981' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9011004' lon='-1.3794653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249905' timestamp='2007-04-29T21:41:45+01:00' visible='true' lat='50.9141055' lon='-1.4481377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659215' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9040471' lon='-1.4060518' />
-  <node id='25282145' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9750861' lon='-1.4092499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700395' timestamp='2007-04-05T14:18:10+01:00' user='Dean Earley' visible='true' lat='50.9219839' lon='-1.3917234' />
-  <node id='29511212' timestamp='2007-05-22T21:51:12+01:00' visible='true' lat='50.970525' lon='-1.3552419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008933' timestamp='2007-05-12T15:26:02+01:00' user='nickw' visible='true' lat='50.932892' lon='-1.350062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945389' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9057567' lon='-1.34075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613470' timestamp='2006-12-16T17:46:58+00:00' user='David Currie' visible='true' lat='50.9753179' lon='-1.3960278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87799815' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8943964' lon='-1.3897888' />
-  <node id='17504823' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9549015' lon='-1.4039728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238990' timestamp='2007-04-09T15:39:34+01:00' user='avantman42' visible='true' lat='50.9018168' lon='-1.4108048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252923' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9452389' lon='-1.4262209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146247' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9183653' lon='-1.4037363' />
-  <node id='19227242' timestamp='2006-10-23T20:52:58+01:00' user='nickw' visible='true' lat='50.9426354' lon='-1.4169479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87823417' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.896495' lon='-1.406882' />
-  <node id='13071365' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9180566' lon='-1.37003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051791' timestamp='2007-10-26T17:11:21+01:00' user='Nick Dyer' visible='true' lat='50.9953861' lon='-1.469513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961031' timestamp='2007-12-10T20:19:29+00:00' user='sladen' visible='true' lat='50.9485209' lon='-1.4689577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388885' timestamp='2007-04-05T14:18:10+01:00' user='Dean Earley' visible='true' lat='50.9417' lon='-1.39166' />
-  <node id='206162637' timestamp='2008-01-04T19:29:41+00:00' user='nickw' visible='true' lat='50.9720029' lon='-1.3790137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009193' timestamp='2007-05-12T15:36:09+01:00' user='nickw' visible='true' lat='50.9300967' lon='-1.3526397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240349' timestamp='2007-04-29T20:02:58+01:00' user='Andy Street' visible='true' lat='50.9071964' lon='-1.3515945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808676' timestamp='2007-11-11T18:09:36+00:00' user='Dean Earley' visible='true' lat='50.9150293' lon='-1.358254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153329602' timestamp='2007-12-06T20:43:00+00:00' user='Dean Earley' visible='true' lat='50.9977295' lon='-1.3578474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160298241' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9152692' lon='-1.4841326' />
-  <node id='29621218' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9724862' lon='-1.3748616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512885' timestamp='2008-01-29T11:33:03+00:00' user='Dean Earley' visible='true' lat='50.962959' lon='-1.3512131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830635' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9265251' lon='-1.3607086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162241' timestamp='2008-01-04T19:26:28+00:00' user='nickw' visible='true' lat='50.9729005' lon='-1.3881872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254927' timestamp='2007-10-26T15:07:02+01:00' user='Nick Dyer' visible='true' lat='50.9814071' lon='-1.4452951' />
-  <node id='10216421' timestamp='2007-03-04T19:43:32+00:00' user='Dean Earley' visible='true' lat='50.9220088' lon='-1.348633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30509426' timestamp='2007-06-17T22:18:56+01:00' visible='true' lat='50.9745308' lon='-1.3510113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240348' timestamp='2007-04-29T20:02:58+01:00' user='Andy Street' visible='true' lat='50.9070871' lon='-1.3513995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447525' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9113381' lon='-1.3848504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254556' timestamp='2007-03-09T21:07:46+00:00' user='nickw' visible='true' lat='50.9079092' lon='-1.3878815' />
-  <node id='25340632' timestamp='2007-04-21T22:32:50+01:00' user='Dean Earley' visible='true' lat='50.9633225' lon='-1.355596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009018' timestamp='2007-05-12T15:28:41+01:00' user='nickw' visible='true' lat='50.9318121' lon='-1.3508119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636818' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9508221' lon='-1.4123004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636772' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.9479099' lon='-1.4027917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132695' timestamp='2006-05-09T11:25:12+01:00' user='80n' visible='true' lat='50.9241181' lon='-1.5813796' />
-  <node id='18398366' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.9549874' lon='-1.4130398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507736' timestamp='2006-12-09T09:51:38+00:00' user='nickw' visible='true' lat='50.9395566' lon='-1.3949864'>
-    <tag k='name' v='BEGONIA' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229586' timestamp='2007-06-12T00:14:41+01:00' user='nickw' visible='true' lat='50.9327468' lon='-1.3538644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957215' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9156302' lon='-1.4216417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957184' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.9124738' lon='-1.4171793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91107587' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.929099' lon='-1.4177848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949963' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9897625' lon='-1.3838865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815654' timestamp='2007-05-31T21:48:01+01:00' visible='true' lat='50.991242' lon='-1.3535549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194363' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9437039' lon='-1.4389947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745510' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9526112' lon='-1.4037703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579419' timestamp='2006-12-14T13:53:01+00:00' user='David Currie' visible='true' lat='50.9775128' lon='-1.402125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398426' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9676828' lon='-1.3937099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18349475' timestamp='2006-10-16T22:13:42+01:00' user='nickw' visible='true' lat='50.9861326' lon='-1.4307528'>
-    <tag k='name' v='Body Farm' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001330' timestamp='2007-05-12T09:40:15+01:00' user='nickw' visible='true' lat='50.9239498' lon='-1.3818149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668270' timestamp='2007-01-04T21:06:33+00:00' user='nickw' visible='true' lat='50.984651' lon='-1.3895522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595198' timestamp='2007-05-25T21:54:32+01:00' visible='true' lat='50.9691169' lon='-1.3506148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290723' timestamp='2007-06-13T09:23:56+01:00' visible='true' lat='50.9698648' lon='-1.3804107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998551' timestamp='2007-06-05T23:13:24+01:00' user='nickw' visible='true' lat='50.9646043' lon='-1.4219911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945342' timestamp='2007-03-31T20:34:29+01:00' user='nickw' visible='true' lat='50.9196105' lon='-1.349392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668064' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9823122' lon='-1.3952739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150148' timestamp='2008-02-03T06:13:56+00:00' user='sladen' visible='true' lat='50.9084784' lon='-1.4019338' />
-  <node id='169428755' timestamp='2007-12-14T21:38:56+00:00' user='nickw' visible='true' lat='50.9288627' lon='-1.4360552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727723' timestamp='2007-03-31T20:35:02+01:00' user='nickw' visible='true' lat='50.8991335' lon='-1.3565344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962273' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9561882' lon='-1.3637056' />
-  <node id='21092048' timestamp='2007-05-03T00:08:33+01:00' visible='true' lat='50.9405218' lon='-1.4295516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464278' timestamp='2007-05-22T00:19:18+01:00' user='Dean Earley' visible='true' lat='50.9378002' lon='-1.4034661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728906' timestamp='2007-05-28T19:12:42+01:00' visible='true' lat='50.9725049' lon='-1.3612129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217642' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9216224' lon='-1.3578231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141382' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.9226001' lon='-1.4212886'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998576' timestamp='2007-06-05T23:13:54+01:00' user='nickw' visible='true' lat='50.9607004' lon='-1.4465465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915355' timestamp='2006-07-19T01:48:49+01:00' user='Dean Earley' visible='true' lat='50.911482' lon='-1.349155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689144' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9387311' lon='-1.3800852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225812' timestamp='2007-06-11T22:16:49+01:00' visible='true' lat='50.9825997' lon='-1.3560279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130970' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9295697' lon='-1.3560194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194848' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9451267' lon='-1.4100896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254880' timestamp='2006-09-02T18:21:44+01:00' user='Dean Earley' visible='true' lat='50.9108711' lon='-1.4015001' />
-  <node id='28583065' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9384361' lon='-1.435196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275635' timestamp='2007-06-01T16:39:25+01:00' user='Dean Earley' visible='true' lat='50.9198409' lon='-1.4333387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774718' timestamp='2007-09-13T20:11:58+01:00' user='mike l' visible='true' lat='50.9468012' lon='-1.4480252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952627' timestamp='2007-02-11T00:33:15+00:00' visible='true' lat='50.9319038' lon='-1.3806563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949987' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9901429' lon='-1.3889898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142617015' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9139727' lon='-1.4171444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722330' timestamp='2007-02-01T22:21:45+00:00' user='Dean Earley' visible='true' lat='50.9418385' lon='-1.3803391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984704' timestamp='2007-01-10T00:11:40+00:00' user='nickw' visible='true' lat='50.9453104' lon='-1.3819237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549365' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9656177' lon='-1.3723854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581832' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.912929' lon='-1.4503917' />
-  <node id='27563287' timestamp='2007-04-23T22:47:34+01:00' visible='true' lat='50.9291876' lon='-1.3963791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339122' timestamp='2007-04-30T20:39:18+01:00' visible='true' lat='50.9671534' lon='-1.361782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583022' timestamp='2007-05-02T23:57:54+01:00' visible='true' lat='50.9380348' lon='-1.4333785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245151124' timestamp='2008-02-03T06:18:39+00:00' user='sladen' visible='true' lat='50.9095662' lon='-1.400715' />
-  <node id='122316810' timestamp='2007-11-18T19:01:08+00:00' user='nickw' visible='true' lat='50.9147308' lon='-1.4359184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998349' timestamp='2007-06-05T23:05:24+01:00' user='nickw' visible='true' lat='50.9794163' lon='-1.4326397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639894' timestamp='2007-02-04T22:51:14+00:00' user='Dean Earley' visible='true' lat='50.898883' lon='-1.3813215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282088' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.975564' lon='-1.4079677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613455' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9771117' lon='-1.4016863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583035' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9387483' lon='-1.4337414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726184' timestamp='2006-09-02T18:21:41+01:00' user='Dean Earley' visible='true' lat='50.9101222' lon='-1.4002381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704600' timestamp='2007-05-28T10:48:38+01:00' visible='true' lat='50.9772884' lon='-1.3533295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727968' timestamp='2007-09-25T14:05:38+01:00' visible='true' lat='50.9143815' lon='-1.4022234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216402' timestamp='2006-07-09T22:24:16+01:00' user='Dean Earley' visible='true' lat='50.9208994' lon='-1.3562367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360205' timestamp='2006-10-06T23:29:33+01:00' user='Dean Earley' visible='true' lat='50.9610996' lon='-1.372679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957232' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9120379' lon='-1.4219569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745441' timestamp='2007-10-31T15:18:29+00:00' user='Dean Earley' visible='true' lat='50.9672253' lon='-1.3508314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035800' timestamp='2007-09-05T17:47:16+01:00' user='mike l' visible='true' lat='50.9371948' lon='-1.3963088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160293174' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9129747' lon='-1.4919861' />
-  <node id='29632186' timestamp='2007-05-26T19:20:39+01:00' visible='true' lat='50.9561212' lon='-1.3690062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945416' timestamp='2007-03-31T20:34:38+01:00' user='nickw' visible='true' lat='50.9001062' lon='-1.3527296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342529' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9078054' lon='-1.3674705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971193' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9066825' lon='-1.4001535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601339' timestamp='2006-09-01T00:16:07+01:00' user='nickw' visible='true' lat='50.8937144' lon='-1.5234303'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29711866' timestamp='2007-05-28T14:55:45+01:00' visible='true' lat='50.9848577' lon='-1.3551849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107719' timestamp='2007-04-27T23:44:12+01:00' visible='true' lat='50.9315242' lon='-1.388703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29703872' timestamp='2007-05-28T10:12:58+01:00' visible='true' lat='50.9881137' lon='-1.3533341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660542' timestamp='2007-10-28T21:45:54+00:00' user='Nick Dyer' visible='true' lat='50.9030728' lon='-1.4086181' />
-  <node id='29132983' timestamp='2007-05-15T20:36:23+01:00' user='nickw' visible='true' lat='50.9321488' lon='-1.3757637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148855' timestamp='2008-02-03T06:07:44+00:00' user='sladen' visible='true' lat='50.904798' lon='-1.4010755' />
-  <node id='25440793' timestamp='2007-04-20T23:53:15+01:00' user='Dean Earley' visible='true' lat='50.9159843' lon='-1.3848732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949833' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9889872' lon='-1.3777676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348717' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.9852094' lon='-1.4307924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290738' timestamp='2007-06-13T09:23:59+01:00' visible='true' lat='50.9644084' lon='-1.3829909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773057' timestamp='2006-11-29T20:11:19+00:00' user='Nick Dyer' visible='true' lat='50.9180095' lon='-1.4537893' />
-  <node id='20973115' timestamp='2006-11-13T00:42:44+00:00' user='Dean Earley' visible='true' lat='50.9047883' lon='-1.4126808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466128' timestamp='2007-05-22T00:38:14+01:00' user='Dean Earley' visible='true' lat='50.9817159' lon='-1.4454333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30410997' timestamp='2007-06-15T23:09:52+01:00' visible='true' lat='50.9742965' lon='-1.3564036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003050' timestamp='2007-05-12T10:05:27+01:00' user='nickw' visible='true' lat='50.9403288' lon='-1.4054435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830652' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9242964' lon='-1.3700459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744286' timestamp='2006-09-03T00:58:07+01:00' user='Dean Earley' visible='true' lat='50.9070487' lon='-1.4089246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972821' timestamp='2006-11-13T00:07:33+00:00' user='Dean Earley' visible='true' lat='50.8990362' lon='-1.396266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372809' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9298956' lon='-1.4338704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325656' timestamp='2007-04-05T14:18:13+01:00' user='Dean Earley' visible='true' lat='50.9250167' lon='-1.4276344' />
-  <node id='29871678' timestamp='2007-06-02T18:57:50+01:00' visible='true' lat='50.9147112' lon='-1.3491031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706665' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.90764' lon='-1.379088'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28240314' timestamp='2007-04-29T20:02:54+01:00' user='Andy Street' visible='true' lat='50.905922' lon='-1.3547002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162410' timestamp='2008-01-04T19:28:05+00:00' user='nickw' visible='true' lat='50.9725283' lon='-1.3790336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117355' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9306516' lon='-1.4453351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24667948' timestamp='2007-01-04T21:04:54+00:00' user='nickw' visible='true' lat='50.985489' lon='-1.3894926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924349' timestamp='2007-06-03T20:10:39+01:00' visible='true' lat='50.981961' lon='-1.362188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282103' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.9768425' lon='-1.406453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347576' timestamp='2007-06-09T19:43:23+01:00' user='nickw' visible='true' lat='50.9246701' lon='-1.352296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704775' timestamp='2006-08-26T00:06:14+01:00' user='dmgroom' visible='true' lat='50.8882759' lon='-1.4168442' />
-  <node id='325026' timestamp='2005-12-16T21:52:13+00:00' user='80n' visible='true' lat='50.9598572' lon='-1.4362633' />
-  <node id='25296126' timestamp='2007-01-19T09:38:43+00:00' user='Dean Earley' visible='true' lat='50.9711061' lon='-1.3503765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976679' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9347945' lon='-1.4302669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388919' timestamp='2007-04-05T14:18:13+01:00' user='Dean Earley' visible='true' lat='50.9453031' lon='-1.3999901' />
-  <node id='14728163' timestamp='2007-05-22T00:19:48+01:00' user='Dean Earley' visible='true' lat='50.9371718' lon='-1.4065726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561796' timestamp='2007-10-28T20:52:05+00:00' user='Nick Dyer' visible='true' lat='50.9235715' lon='-1.4314841'>
-    <tag k='residence' v='tower_block' />
-    <tag k='name' v='Shirley Towers' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='28935767' timestamp='2007-05-11T00:50:51+01:00' visible='true' lat='50.9388248' lon='-1.4474833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160206566' timestamp='2007-12-10T19:05:42+00:00' user='sladen' visible='true' lat='50.9124985' lon='-1.3715228' />
-  <node id='107808646' timestamp='2007-11-11T18:09:35+00:00' user='Dean Earley' visible='true' lat='50.9149155' lon='-1.3591652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700400' timestamp='2007-04-05T14:18:14+01:00' user='Dean Earley' visible='true' lat='50.9219058' lon='-1.390364' />
-  <node id='20961040' timestamp='2006-11-11T17:12:25+00:00' user='Dean Earley' visible='true' lat='50.948484' lon='-1.3835798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243486' timestamp='2007-04-29T20:23:55+01:00' user='Dean Earley' visible='true' lat='50.9393718' lon='-1.4092278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577068' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9120036' lon='-1.4389762' />
-  <node id='30510872' timestamp='2007-06-17T22:25:13+01:00' visible='true' lat='50.9770381' lon='-1.357285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160266397' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9765503' lon='-1.3774622' />
-  <node id='29705516' timestamp='2007-06-11T22:20:43+01:00' visible='true' lat='50.9832745' lon='-1.3524296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073423' timestamp='2007-04-05T14:18:17+01:00' user='Dean Earley' visible='true' lat='50.9311944' lon='-1.3925219' />
-  <node id='87844993' timestamp='2007-10-26T13:03:03+01:00' user='Nick Dyer' visible='true' lat='50.9023303' lon='-1.4195177' />
-  <node id='13071356' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.9187574' lon='-1.365501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636754' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9452939' lon='-1.3921431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348149' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9332726' lon='-1.3684974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345060' timestamp='2007-04-30T23:00:38+01:00' user='nickw' visible='true' lat='50.9275047' lon='-1.3569044'>
-    <tag k='name' v='MDLTN CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815065' timestamp='2007-05-31T21:30:59+01:00' visible='true' lat='50.9884248' lon='-1.3554621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924334' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.976551' lon='-1.3956469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668094' timestamp='2007-01-04T21:05:33+00:00' user='nickw' visible='true' lat='50.987984' lon='-1.4069059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91107583' timestamp='2007-10-29T07:45:59+00:00' user='nickw' visible='true' lat='50.9286857' lon='-1.417606'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504269' timestamp='2007-06-17T21:38:59+01:00' visible='true' lat='50.9947384' lon='-1.3508171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815663' timestamp='2007-05-31T21:48:03+01:00' visible='true' lat='50.9905993' lon='-1.3531166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254697' timestamp='2007-01-19T20:35:56+00:00' user='Dean Earley' visible='true' lat='50.9204307' lon='-1.390138' />
-  <node id='29874673' timestamp='2007-06-02T19:57:54+01:00' visible='true' lat='50.9606285' lon='-1.3614014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17658118' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9075087' lon='-1.4221543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346969' timestamp='2007-04-30T23:26:36+01:00' user='nickw' visible='true' lat='50.8990852' lon='-1.3629545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254369' timestamp='2006-09-02T14:28:40+01:00' user='Dean Earley' visible='true' lat='50.9143039' lon='-1.4063601' />
-  <node id='30089128' timestamp='2007-06-13T09:24:40+01:00' visible='true' lat='50.9645265' lon='-1.3797367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280985' timestamp='2007-02-18T20:18:25+00:00' visible='true' lat='50.9158984' lon='-1.3599362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160236650' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9069566' lon='-1.3985938' />
-  <node id='319622' timestamp='2005-12-14T22:03:13+00:00' user='nickw' visible='true' lat='50.9188628' lon='-1.3969588' />
-  <node id='30096946' timestamp='2007-06-08T23:24:13+01:00' visible='true' lat='50.9654639' lon='-1.3755398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689076' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9426865' lon='-1.390359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418268' timestamp='2007-05-02T00:31:38+01:00' visible='true' lat='50.9666988' lon='-1.3619096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342606' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9061142' lon='-1.3709074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596752' timestamp='2007-08-14T04:48:35+01:00' user='andrewpmk' visible='true' lat='50.9073613' lon='-1.3976941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246059' timestamp='2007-04-29T20:52:45+01:00' user='Dean Earley' visible='true' lat='50.9336436' lon='-1.4189855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348724' timestamp='2006-10-16T21:59:55+01:00' user='nickw' visible='true' lat='50.9897998' lon='-1.4371042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263970' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9658974' lon='-1.3708018' />
-  <node id='29632438' timestamp='2007-05-26T19:27:00+01:00' visible='true' lat='50.9557335' lon='-1.3701819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160268798' timestamp='2007-12-10T19:40:05+00:00' user='sladen' visible='true' lat='50.9697243' lon='-1.3494214' />
-  <node id='160361172' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9192028' lon='-1.4795042' />
-  <node id='21600663' timestamp='2006-12-16T11:37:17+00:00' user='David Currie' visible='true' lat='50.9698577' lon='-1.391961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423284' timestamp='2007-04-05T14:18:18+01:00' user='Dean Earley' visible='true' lat='50.934616' lon='-1.383123' />
-  <node id='25592564' timestamp='2007-02-01T22:20:32+00:00' user='Dean Earley' visible='true' lat='50.9447124' lon='-1.3731492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958647' timestamp='2007-09-10T23:55:12+01:00' visible='true' lat='50.9061317' lon='-1.4012057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596803' timestamp='2006-11-13T00:43:24+00:00' user='Dean Earley' visible='true' lat='50.9020099' lon='-1.4078457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962320' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.957102' lon='-1.3619976' />
-  <node id='242720' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9137638' lon='-1.4154793' />
-  <node id='48967861' timestamp='2007-09-11T00:17:28+01:00' visible='true' lat='50.9041198' lon='-1.4154727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908378' timestamp='2006-12-18T23:27:56+00:00' visible='true' lat='50.9320224' lon='-1.3789976' />
-  <node id='29008950' timestamp='2007-05-12T15:26:04+01:00' user='nickw' visible='true' lat='50.9329014' lon='-1.3493219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222226' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9179258' lon='-1.4803796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30259418' timestamp='2007-06-12T21:04:32+01:00' visible='true' lat='50.9781637' lon='-1.358034'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935990' timestamp='2007-05-11T00:59:39+01:00' visible='true' lat='50.941163' lon='-1.4459619'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581813' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9174962' lon='-1.4487781' />
-  <node id='15028814' timestamp='2006-09-08T23:06:40+01:00' user='Dean Earley' visible='true' lat='50.9326866' lon='-1.3687298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984806' timestamp='2007-01-10T00:15:49+00:00' user='nickw' visible='true' lat='50.9456358' lon='-1.3997541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229463' timestamp='2007-06-12T00:08:05+01:00' user='nickw' visible='true' lat='50.9340239' lon='-1.3517586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963790' timestamp='2007-05-22T00:19:48+01:00' user='Dean Earley' visible='true' lat='50.9335644' lon='-1.4010006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885371' timestamp='2006-12-16T21:53:09+00:00' user='nickw' visible='true' lat='50.8983834' lon='-1.4053236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872352' timestamp='2007-06-02T19:03:54+01:00' visible='true' lat='50.9173386' lon='-1.3514786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254586' timestamp='2006-10-27T00:58:33+01:00' user='Dean Earley' visible='true' lat='50.9119701' lon='-1.3872375' />
-  <node id='673879' timestamp='2006-08-08T23:26:33+01:00' user='Dean Earley' visible='true' lat='50.9487445' lon='-1.3711415' />
-  <node id='29953366' timestamp='2007-06-04T21:16:58+01:00' visible='true' lat='51.0006426' lon='-1.3680582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91121998' timestamp='2007-10-29T08:14:24+00:00' user='nickw' visible='true' lat='50.932018' lon='-1.4457697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831103' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.911357' lon='-1.4065498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924202' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.9450961' lon='-1.3719309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976815' timestamp='2006-11-13T21:50:51+00:00' user='nickw' visible='true' lat='50.925603' lon='-1.4230539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153327669' timestamp='2007-12-06T20:41:53+00:00' user='nickw' visible='true' lat='50.9376434' lon='-1.440015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462605' timestamp='2008-02-03T06:09:09+00:00' user='sladen' visible='true' lat='50.9030009' lon='-1.4013931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740472' timestamp='2006-09-16T19:31:31+01:00' user='nickw' visible='true' lat='50.9776904' lon='-1.3493782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971163' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9025189' lon='-1.3990647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561549' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9208344' lon='-1.4290292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29693185' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8952139' lon='-1.3913337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='658325' timestamp='2007-04-05T14:18:19+01:00' user='Dean Earley' visible='true' lat='50.9360509' lon='-1.3885307' />
-  <node id='28903803' timestamp='2007-10-16T11:34:26+01:00' user='Dean Earley' visible='true' lat='50.9510478' lon='-1.3633711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949997' timestamp='2007-01-07T12:38:57+00:00' user='nickw' visible='true' lat='50.9826589' lon='-1.3877804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949980' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9852854' lon='-1.3835686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700490' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.9293613' lon='-1.3724775' />
-  <node id='331331' timestamp='2007-12-06T22:09:50+00:00' user='Dean Earley' visible='true' lat='51.0029' lon='-1.36823' />
-  <node id='28830618' timestamp='2007-05-05T08:58:24+01:00' user='nickw' visible='true' lat='50.9285537' lon='-1.3579471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008380' timestamp='2007-05-12T15:11:47+01:00' user='nickw' visible='true' lat='50.9257297' lon='-1.3512738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071429' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9242274' lon='-1.3548736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601297' timestamp='2006-09-01T00:16:01+01:00' user='nickw' visible='true' lat='50.8197284' lon='-1.5678263'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='160335536' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.9452385' lon='-1.4787167' />
-  <node id='29632792' timestamp='2007-05-26T20:05:05+01:00' visible='true' lat='50.9607883' lon='-1.3702621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706676' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9042556' lon='-1.3847737'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21189055' timestamp='2006-11-22T23:51:56+00:00' user='crouchingbadger' visible='true' lat='50.9303724' lon='-1.4482512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856362' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.9470596' lon='-1.3925835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339092' timestamp='2007-04-30T20:38:42+01:00' visible='true' lat='50.9653341' lon='-1.3591466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636803' timestamp='2007-04-29T02:33:40+01:00' user='Dean Earley' visible='true' lat='50.9520686' lon='-1.4058367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250071' timestamp='2007-04-29T21:42:23+01:00' visible='true' lat='50.9154571' lon='-1.4510924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134845' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.92819' lon='-1.3531796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816767' timestamp='2007-05-31T22:15:42+01:00' visible='true' lat='50.988512' lon='-1.359421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704321' timestamp='2007-05-28T10:32:53+01:00' visible='true' lat='50.9852865' lon='-1.3589607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92682347' timestamp='2007-10-31T12:24:58+00:00' user='Dean Earley' visible='true' lat='50.9613716' lon='-1.4258784' />
-  <node id='21689150' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9406804' lon='-1.3766956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414287' timestamp='2007-05-01T23:50:09+01:00' user='nickw' visible='true' lat='50.9431931' lon='-1.37179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935722' timestamp='2007-05-11T00:47:43+01:00' visible='true' lat='50.9407162' lon='-1.4385649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110490' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9281598' lon='-1.4352775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814007' timestamp='2007-05-31T21:13:51+01:00' visible='true' lat='50.9877599' lon='-1.3554034'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923780' timestamp='2007-06-03T20:04:48+01:00' visible='true' lat='50.9826065' lon='-1.3621136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964040' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='50.999587' lon='-1.4483186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976781' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9305707' lon='-1.4221812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232560' timestamp='2007-05-26T09:43:05+01:00' user='nickw' visible='true' lat='50.9154461' lon='-1.3558123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263981' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9648703' lon='-1.370673' />
-  <node id='28247336' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.9196821' lon='-1.4154261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303943' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9218591' lon='-1.415031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998133' timestamp='2007-06-05T23:00:30+01:00' user='nickw' visible='true' lat='50.9909349' lon='-1.4042501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464251' timestamp='2007-05-22T00:19:12+01:00' user='Dean Earley' visible='true' lat='50.938733' lon='-1.4081069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469867' timestamp='2007-04-05T14:18:20+01:00' user='Dean Earley' visible='true' lat='50.914' lon='-1.42616' />
-  <node id='30089044' timestamp='2007-06-13T09:24:42+01:00' visible='true' lat='50.9648992' lon='-1.3760486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632822' timestamp='2007-05-26T20:07:06+01:00' visible='true' lat='50.9611273' lon='-1.3644749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708034' timestamp='2007-05-28T12:04:07+01:00' visible='true' lat='50.9806373' lon='-1.3661959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956630' timestamp='2007-06-26T23:45:05+01:00' user='nickw' visible='true' lat='50.9326517' lon='-1.3513551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003031' timestamp='2007-05-22T00:19:49+01:00' user='Dean Earley' visible='true' lat='50.9413905' lon='-1.4047294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107337' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9317975' lon='-1.3539549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92679905' timestamp='2007-10-31T12:25:01+00:00' user='Dean Earley' visible='true' lat='50.9611461' lon='-1.4245676' />
-  <node id='254509' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.903976' lon='-1.3903954' />
-  <node id='29710212' timestamp='2007-05-28T13:24:01+01:00' visible='true' lat='50.9888152' lon='-1.3716102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275764' timestamp='2006-11-25T23:58:41+00:00' user='nickw' visible='true' lat='50.914108' lon='-1.428605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816421' timestamp='2007-05-31T21:58:46+01:00' visible='true' lat='50.9897485' lon='-1.3569671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117321' timestamp='2007-10-29T08:09:29+00:00' user='nickw' visible='true' lat='50.9328929' lon='-1.4439742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660385' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.904334' lon='-1.4097769' />
-  <node id='661190' timestamp='2007-04-05T14:18:20+01:00' user='Dean Earley' visible='true' lat='50.9157024' lon='-1.3717331' />
-  <node id='254957' timestamp='2006-09-02T13:46:23+01:00' user='Dean Earley' visible='true' lat='50.9387746' lon='-1.4205815' />
-  <node id='324346' timestamp='2005-12-16T00:18:59+00:00' user='nickw' visible='true' lat='50.9177041' lon='-1.4003062' />
-  <node id='298239' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='51.0016262' lon='-1.3563875' />
-  <node id='21275815' timestamp='2007-11-18T19:19:51+00:00' user='nickw' visible='true' lat='50.9158741' lon='-1.4367305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254445' timestamp='2007-02-06T00:19:13+00:00' user='Dean Earley' visible='true' lat='50.9069031' lon='-1.4034552' />
-  <node id='107808739' timestamp='2007-11-11T18:09:38+00:00' user='Dean Earley' visible='true' lat='50.9151743' lon='-1.3582459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347763' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.930518' lon='-1.360193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976792' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9269769' lon='-1.4202342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325105' timestamp='2006-11-11T17:22:35+00:00' user='Dean Earley' visible='true' lat='50.9187864' lon='-1.5919223' />
-  <node id='29704340' timestamp='2007-05-28T10:32:59+01:00' visible='true' lat='50.9825577' lon='-1.3608798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935748' timestamp='2007-05-11T00:50:41+01:00' visible='true' lat='50.9404609' lon='-1.4464438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026806' timestamp='2007-05-13T10:10:58+01:00' user='nickw' visible='true' lat='50.9173207' lon='-1.4085226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245145422' timestamp='2008-02-03T05:57:02+00:00' user='sladen' visible='true' lat='50.913533' lon='-1.4021999' />
-  <node id='29526354' timestamp='2007-05-23T09:23:19+01:00' user='nickw' visible='true' lat='50.9278844' lon='-1.3572749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290791' timestamp='2007-06-13T09:24:11+01:00' visible='true' lat='50.9645707' lon='-1.3794211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913886' timestamp='2007-06-03T15:59:38+01:00' visible='true' lat='50.98477' lon='-1.3581927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706121' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9047993' lon='-1.3881179'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='254384' timestamp='2005-11-15T15:39:31+00:00' user='nickw' visible='true' lat='50.9132972' lon='-1.4064725' />
-  <node id='12594769' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.9152936' lon='-1.4135479'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='91110965' timestamp='2007-10-29T07:59:19+00:00' user='nickw' visible='true' lat='50.9271862' lon='-1.4397823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469888' timestamp='2007-04-05T14:18:21+01:00' user='Dean Earley' visible='true' lat='50.9226907' lon='-1.4338276' />
-  <node id='91111717' timestamp='2007-10-29T08:01:17+00:00' user='nickw' visible='true' lat='50.9269248' lon='-1.4388461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256615' timestamp='2007-06-12T20:36:07+01:00' visible='true' lat='50.9805954' lon='-1.3559007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913608' timestamp='2007-06-03T15:53:28+01:00' visible='true' lat='50.9858724' lon='-1.3603231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431966' timestamp='2007-06-16T16:26:00+01:00' visible='true' lat='50.9723026' lon='-1.351855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797942' timestamp='2007-09-15T19:03:46+01:00' user='mike l' visible='true' lat='50.9710712' lon='-1.4444559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949850' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9923885' lon='-1.3716088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420435' timestamp='2007-01-19T20:35:57+00:00' user='Dean Earley' visible='true' lat='50.9190989' lon='-1.395208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596773' timestamp='2007-03-04T18:58:22+00:00' user='Dean Earley' visible='true' lat='50.9164457' lon='-1.3689814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831120' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9137687' lon='-1.4058953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980725' timestamp='2007-10-26T15:58:01+01:00' user='Nick Dyer' visible='true' lat='50.9607215' lon='-1.3434001' />
-  <node id='27021713' timestamp='2007-04-03T00:50:47+01:00' user='Dean Earley' visible='true' lat='50.9198988' lon='-1.4481597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319656' timestamp='2005-12-14T22:05:42+00:00' user='nickw' visible='true' lat='50.9147644' lon='-1.400156' />
-  <node id='28342546' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9081938' lon='-1.3682055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636920' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.9181883' lon='-1.4321413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325208' timestamp='2006-11-11T17:22:59+00:00' user='Dean Earley' visible='true' lat='50.9410954' lon='-1.3611068' />
-  <node id='29914412' timestamp='2007-06-03T16:22:49+01:00' visible='true' lat='50.9843943' lon='-1.3611706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927552' timestamp='2007-06-03T21:24:27+01:00' visible='true' lat='50.9805595' lon='-1.3714294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250025' timestamp='2007-04-29T21:42:15+01:00' visible='true' lat='50.9175356' lon='-1.4487065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931729' timestamp='2007-04-05T14:18:22+01:00' user='Dean Earley' visible='true' lat='50.9235199' lon='-1.3847132' />
-  <node id='28903402' timestamp='2007-05-09T23:24:34+01:00' visible='true' lat='50.9468679' lon='-1.3664499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980708' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9599701' lon='-1.3516275' />
-  <node id='50656130' timestamp='2007-09-13T21:25:22+01:00' user='mike l' visible='true' lat='50.9450163' lon='-1.4482073' />
-  <node id='388870' timestamp='2007-04-05T14:18:22+01:00' user='Dean Earley' visible='true' lat='50.9342' lon='-1.39941' />
-  <node id='28249819' timestamp='2007-04-29T21:41:33+01:00' visible='true' lat='50.920684' lon='-1.4441826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282130' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9758284' lon='-1.4064145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464289' timestamp='2007-05-22T00:19:20+01:00' user='Dean Earley' visible='true' lat='50.94126' lon='-1.4065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169409526' timestamp='2007-12-14T21:27:51+00:00' user='nickw' visible='true' lat='50.9279204' lon='-1.4382405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392361' timestamp='2007-05-20T17:52:59+01:00' visible='true' lat='50.964193' lon='-1.3556878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27558579' timestamp='2007-04-23T19:29:27+01:00' visible='true' lat='50.9261037' lon='-1.3906627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091863' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9089135' lon='-1.4252117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781173' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.9015633' lon='-1.3746492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924078' timestamp='2007-01-06T14:28:56+00:00' user='nickw' visible='true' lat='50.9315911' lon='-1.3839652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675799' timestamp='2007-02-06T01:03:07+00:00' user='Dean Earley' visible='true' lat='50.9109317' lon='-1.440013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890077' timestamp='2006-10-27T00:48:04+01:00' user='Dean Earley' visible='true' lat='50.9204476' lon='-1.3880577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650752' timestamp='2007-05-16T00:37:07+01:00' visible='true' lat='50.9252351' lon='-1.3851118' />
-  <node id='28932471' timestamp='2007-05-10T21:06:12+01:00' user='Dean Earley' visible='true' lat='50.9638912' lon='-1.4634192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331773' timestamp='2007-12-06T20:44:24+00:00' user='nickw' visible='true' lat='50.9406417' lon='-1.4410878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162260' timestamp='2008-01-04T19:26:30+00:00' user='nickw' visible='true' lat='50.9736918' lon='-1.3860366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668364' timestamp='2007-01-04T21:06:45+00:00' user='nickw' visible='true' lat='50.9865333' lon='-1.4113958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600512' timestamp='2006-12-16T10:14:00+00:00' user='nickw' visible='true' lat='50.9094641' lon='-1.4165907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240302' timestamp='2007-04-29T20:02:53+01:00' user='Andy Street' visible='true' lat='50.9040869' lon='-1.35642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089113' timestamp='2007-06-08T18:12:07+01:00' visible='true' lat='50.9655346' lon='-1.3788208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252938' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9445593' lon='-1.424837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091878' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.9183579' lon='-1.4269599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387818' timestamp='2007-04-05T14:18:23+01:00' user='Dean Earley' visible='true' lat='50.9296' lon='-1.38878' />
-  <node id='157204133' timestamp='2007-12-08T20:11:11+00:00' user='nickw' visible='true' lat='50.9433009' lon='-1.444538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998116' timestamp='2007-06-05T23:00:28+01:00' user='nickw' visible='true' lat='50.9884588' lon='-1.3956279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662864' timestamp='2007-10-28T21:47:41+00:00' user='Nick Dyer' visible='true' lat='50.9059415' lon='-1.4082405' />
-  <node id='13071211' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9248469' lon='-1.3670107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212563' timestamp='2007-12-08T20:16:58+00:00' user='nickw' visible='true' lat='50.9444588' lon='-1.4488392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648582' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9502008' lon='-1.3626623' />
-  <node id='28252968' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.9438765' lon='-1.4278877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956585' timestamp='2007-06-26T23:44:58+01:00' user='nickw' visible='true' lat='50.9277871' lon='-1.3488419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089037' timestamp='2007-06-08T18:11:55+01:00' visible='true' lat='50.9665699' lon='-1.3738715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305620' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9866704' lon='-1.3914774' />
-  <node id='28237074' timestamp='2007-04-29T19:33:09+01:00' user='nickw' visible='true' lat='50.9086851' lon='-1.3463894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728537' timestamp='2007-03-23T22:52:48+00:00' user='nickw' visible='true' lat='50.900796' lon='-1.36328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14567154' timestamp='2007-10-17T01:27:50+01:00' user='Dean Earley' visible='true' lat='50.9261986' lon='-1.4417684'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='700385' timestamp='2007-04-05T14:18:23+01:00' user='Dean Earley' visible='true' lat='50.924437' lon='-1.3922234' />
-  <node id='18232072' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9112728' lon='-1.4043946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600590' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9881322' lon='-1.4006271'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398758' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9498232' lon='-1.4120715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347750' timestamp='2007-04-30T23:40:06+01:00' user='nickw' visible='true' lat='50.9301959' lon='-1.3584772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689115' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9397603' lon='-1.3813445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021803' timestamp='2007-04-03T00:52:59+01:00' user='Ben' visible='true' lat='50.9363891' lon='-1.4043863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87800147' timestamp='2007-10-26T11:41:57+01:00' user='Nick Dyer' visible='true' lat='50.9016612' lon='-1.4415704' />
-  <node id='30089089' timestamp='2007-06-13T09:24:41+01:00' visible='true' lat='50.9652162' lon='-1.3763225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178477' timestamp='2006-11-22T18:19:04+00:00' user='southglos' visible='true' lat='50.9953089' lon='-1.3583651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928592' timestamp='2007-06-03T21:52:03+01:00' visible='true' lat='50.9784355' lon='-1.3617132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507142' timestamp='2007-06-17T22:07:48+01:00' visible='true' lat='50.9768341' lon='-1.3606299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310848' timestamp='2008-02-03T05:58:04+00:00' user='sladen' visible='true' lat='50.9159249' lon='-1.4013159' />
-  <node id='26575729' timestamp='2007-03-24T16:33:41+00:00' user='Dean Earley' visible='true' lat='50.9000889' lon='-1.3999461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298269' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='50.9631767' lon='-1.3865988' />
-  <node id='26781158' timestamp='2007-03-25T18:42:12+01:00' user='Dean Earley' visible='true' lat='50.9002211' lon='-1.3650286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635144' timestamp='2006-11-12T22:57:33+00:00' user='Dean Earley' visible='true' lat='50.9025749' lon='-1.3992868' />
-  <node id='21613398' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9766437' lon='-1.4340928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931331' timestamp='2007-06-03T22:43:00+01:00' visible='true' lat='50.9951086' lon='-1.3726608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13565146' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9380718' lon='-1.3592566'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30291044' timestamp='2007-06-13T09:32:57+01:00' visible='true' lat='50.9677933' lon='-1.3826416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21496776' timestamp='2006-12-08T01:33:58+00:00' user='Dean Earley' visible='true' lat='50.996822' lon='-1.3571335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724249' timestamp='2006-10-07T00:25:17+01:00' user='nickw' visible='true' lat='50.91038' lon='-1.4120304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462624' timestamp='2007-05-21T23:56:40+01:00' user='nickw' visible='true' lat='50.9028954' lon='-1.3997798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000937' timestamp='2007-05-12T09:30:26+01:00' user='nickw' visible='true' lat='50.9202052' lon='-1.4093503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325000' timestamp='2006-11-11T17:23:05+00:00' user='Dean Earley' visible='true' lat='50.9586582' lon='-1.4191832' />
-  <node id='254973' timestamp='2006-09-02T13:46:23+01:00' user='Dean Earley' visible='true' lat='50.9448675' lon='-1.4142278' />
-  <node id='20133226' timestamp='2006-10-28T01:55:55+01:00' user='Dean Earley' visible='true' lat='50.9286478' lon='-1.3506995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706447' timestamp='2007-04-05T14:18:23+01:00' user='Dean Earley' visible='true' lat='50.9258176' lon='-1.3799172' />
-  <node id='26114371' timestamp='2007-02-23T21:46:13+00:00' user='nickw' visible='true' lat='50.9072355' lon='-1.3927963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='307478' timestamp='2005-12-12T00:24:12+00:00' user='nickw' visible='true' lat='50.9264374' lon='-1.4003277' />
-  <node id='544334' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9351644' lon='-1.3813361' />
-  <node id='29816781' timestamp='2007-05-31T22:15:45+01:00' visible='true' lat='50.9868493' lon='-1.3608288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256424' timestamp='2007-06-12T20:20:04+01:00' visible='true' lat='50.9808753' lon='-1.3552093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305561' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9992862' lon='-1.3921094' />
-  <node id='206162085' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9703828' lon='-1.3830665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325178' timestamp='2006-11-11T17:23:05+00:00' user='Dean Earley' visible='true' lat='50.951769' lon='-1.4011859' />
-  <node id='28874076' timestamp='2007-05-08T14:50:38+01:00' visible='true' lat='50.9392245' lon='-1.4425398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595176' timestamp='2007-05-25T21:54:25+01:00' visible='true' lat='50.9690764' lon='-1.3522673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480577' timestamp='2007-01-27T23:26:04+00:00' visible='true' lat='50.9102617' lon='-1.3899116'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='160377034' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9218108' lon='-1.4682603' />
-  <node id='17721046' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9612326' lon='-1.3662567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507766' timestamp='2007-02-18T20:19:17+00:00' visible='true' lat='50.9393283' lon='-1.3877651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87238586' timestamp='2007-10-25T21:08:43+01:00' user='Nick Dyer' visible='true' lat='50.9356501' lon='-1.4469912' />
-  <node id='24924217' timestamp='2007-01-06T14:37:59+00:00' user='nickw' visible='true' lat='50.9576275' lon='-1.3617442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816313' timestamp='2007-05-31T21:52:28+01:00' visible='true' lat='50.9913418' lon='-1.3547203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359714' timestamp='2006-10-06T23:29:36+01:00' user='Dean Earley' visible='true' lat='50.96921' lon='-1.3518124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132725' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='51.0238235' lon='-1.3327541' />
-  <node id='28179456' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9643198' lon='-1.4194079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591403' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.91235' lon='-1.4510011' />
-  <node id='27467491' timestamp='2007-04-19T17:50:44+01:00' visible='true' lat='50.9336006' lon='-1.378543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976709' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9360422' lon='-1.422658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232091' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9150711' lon='-1.4113486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728893' timestamp='2007-05-28T19:12:40+01:00' visible='true' lat='50.9704911' lon='-1.359812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932229' timestamp='2007-05-10T20:48:52+01:00' user='Dean Earley' visible='true' lat='50.9625993' lon='-1.4476042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997509' timestamp='2007-06-05T22:43:52+01:00' user='nickw' visible='true' lat='51.0068635' lon='-1.3624305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984747' timestamp='2007-05-22T00:19:51+01:00' user='Dean Earley' visible='true' lat='50.9488151' lon='-1.4041773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582985' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.9404397' lon='-1.4249706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601324' timestamp='2006-09-01T00:16:05+01:00' user='nickw' visible='true' lat='50.8858824' lon='-1.5265417'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28932433' timestamp='2007-05-10T21:05:52+01:00' user='Dean Earley' visible='true' lat='50.9646643' lon='-1.4752206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298299' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9483075' lon='-1.3942547' />
-  <node id='30223956' timestamp='2007-06-11T22:03:13+01:00' visible='true' lat='50.983869' lon='-1.3516899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243533' timestamp='2007-04-29T20:24:20+01:00' user='Dean Earley' visible='true' lat='50.9403713' lon='-1.4083275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='179713783' timestamp='2007-12-20T10:51:11+00:00' user='mike l' visible='true' lat='50.938017' lon='-1.3970494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915750' timestamp='2007-03-25T18:42:38+01:00' user='Dean Earley' visible='true' lat='50.9031759' lon='-1.3675849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632483' timestamp='2007-05-26T19:45:31+01:00' visible='true' lat='50.9602849' lon='-1.3693459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419446' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.941832' lon='-1.3718497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27561986' timestamp='2007-04-23T21:55:08+01:00' user='waschbaer' visible='true' lat='50.9054689' lon='-1.414369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724267' timestamp='2006-10-07T00:25:18+01:00' user='nickw' visible='true' lat='50.9280244' lon='-1.4115283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706042' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8884394' lon='-1.3929633' />
-  <node id='13071382' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9289533' lon='-1.3570257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163278' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.9702014' lon='-1.3870001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071391' timestamp='2006-09-08T23:08:03+01:00' user='Dean Earley' visible='true' lat='50.9289229' lon='-1.3637157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18868874' timestamp='2006-10-21T14:41:58+01:00' user='nickw' visible='true' lat='50.911483' lon='-1.4217381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071228' timestamp='2006-08-11T02:47:58+01:00' user='Dean Earley' visible='true' lat='50.9201339' lon='-1.3711418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091856' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9081368' lon='-1.421278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296303' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.985843' lon='-1.3561625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931346' timestamp='2007-06-03T22:43:03+01:00' visible='true' lat='50.9938707' lon='-1.3729953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254286' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9736955' lon='-1.340733' />
-  <node id='29997513' timestamp='2007-06-05T22:43:53+01:00' user='nickw' visible='true' lat='51.0103136' lon='-1.3625895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689059' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.9434012' lon='-1.3884839'>
-    <tag k='name' v='POPPY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160402633' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9138133' lon='-1.4484764' />
-  <node id='21613432' timestamp='2006-12-16T17:46:54+00:00' user='David Currie' visible='true' lat='50.9765546' lon='-1.4024003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657754' timestamp='2007-04-20T23:53:18+01:00' user='Dean Earley' visible='true' lat='50.9145956' lon='-1.3474732' />
-  <node id='14601369' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9201229' lon='-1.4717902'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='26575768' timestamp='2007-03-25T19:25:10+01:00' user='Dean Earley' visible='true' lat='50.8996347' lon='-1.3943487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130888' timestamp='2006-10-28T01:45:24+01:00' user='Dean Earley' visible='true' lat='50.9331488' lon='-1.3624874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009219' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.9299151' lon='-1.3532059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903743' timestamp='2007-05-10T00:36:37+01:00' visible='true' lat='50.9342979' lon='-1.3696988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549399' timestamp='2007-05-24T11:22:54+01:00' visible='true' lat='50.9627515' lon='-1.3775634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179533' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9566221' lon='-1.3981136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895688' timestamp='2007-04-29T01:53:38+01:00' user='Dean Earley' visible='true' lat='50.9717244' lon='-1.4302148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956702' timestamp='2007-06-26T23:49:19+01:00' user='nickw' visible='true' lat='50.9299252' lon='-1.3473469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830673' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9243054' lon='-1.3654915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594893' timestamp='2006-08-04T11:57:59+01:00' user='nickw' visible='true' lat='50.9165749' lon='-1.4142822'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='24949920' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9917383' lon='-1.3811052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134848' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9281412' lon='-1.3532311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964130' timestamp='2007-02-11T00:33:29+00:00' visible='true' lat='50.918066' lon='-1.3796044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48965780' timestamp='2007-10-26T13:11:23+01:00' user='Nick Dyer' visible='true' lat='50.9017457' lon='-1.4054157'>
-    <tag k='amenity' v='parking' />
-    <tag k='name' v='Albion Place' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='24668016' timestamp='2007-01-04T21:05:28+00:00' user='nickw' visible='true' lat='50.9829626' lon='-1.3943401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90610021' timestamp='2007-10-28T20:53:33+00:00' user='Nick Dyer' visible='true' lat='50.9110718' lon='-1.4322223' />
-  <node id='30956566' timestamp='2007-06-26T23:44:56+01:00' user='nickw' visible='true' lat='50.9268918' lon='-1.3508286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467474' timestamp='2007-04-19T17:50:42+01:00' visible='true' lat='50.9249498' lon='-1.3800499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794809' timestamp='2007-05-30T21:41:49+01:00' user='nickw' visible='true' lat='50.9193793' lon='-1.3547072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700528' timestamp='2007-04-05T14:18:25+01:00' user='Dean Earley' visible='true' lat='50.931898' lon='-1.3700437' />
-  <node id='21613417' timestamp='2006-12-16T17:46:52+00:00' user='David Currie' visible='true' lat='50.9755152' lon='-1.4039825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924067' timestamp='2007-01-25T22:42:40+00:00' user='Dean Earley' visible='true' lat='50.9749261' lon='-1.3984318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145095' timestamp='2007-05-16T00:37:04+01:00' visible='true' lat='50.925001' lon='-1.3869089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341781' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9123401' lon='-1.3631991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575738' timestamp='2007-10-26T16:05:52+01:00' user='Nick Dyer' visible='true' lat='50.9017504' lon='-1.3952147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447379' timestamp='2007-03-25T19:25:10+01:00' user='Dean Earley' visible='true' lat='50.9000368' lon='-1.394185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243647' timestamp='2007-04-29T20:25:07+01:00' user='Dean Earley' visible='true' lat='50.9382195' lon='-1.4160791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149967' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9083052' lon='-1.401539' />
-  <node id='28348306' timestamp='2007-04-30T23:48:45+01:00' user='nickw' visible='true' lat='50.9241191' lon='-1.3588421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764420' timestamp='2007-05-30T21:37:24+01:00' user='nickw' visible='true' lat='50.9220675' lon='-1.3634419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997569' timestamp='2007-06-05T22:44:02+01:00' user='nickw' visible='true' lat='51.0004127' lon='-1.3554374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711024' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9866705' lon='-1.3546612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310981' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9646357' lon='-1.4301568' />
-  <node id='28194340' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9445219' lon='-1.4366267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816597' timestamp='2007-05-31T22:07:50+01:00' visible='true' lat='50.9900057' lon='-1.3559896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422968' timestamp='2007-04-05T14:18:25+01:00' user='Dean Earley' visible='true' lat='50.9210719' lon='-1.407488'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='657803' timestamp='2008-02-03T05:55:50+00:00' user='sladen' visible='true' lat='50.9122829' lon='-1.4019939' />
-  <node id='28339170' timestamp='2007-05-02T00:35:37+01:00' visible='true' lat='50.9697806' lon='-1.3608462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384692' timestamp='2007-06-02T19:55:04+01:00' visible='true' lat='50.9690306' lon='-1.3612006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743149' timestamp='2007-04-03T00:52:15+01:00' user='Dean Earley' visible='true' lat='50.9254467' lon='-1.4395519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254680' timestamp='2007-04-29T17:20:20+01:00' visible='true' lat='50.9696301' lon='-1.3592364' />
-  <node id='29505738' timestamp='2007-05-22T19:28:32+01:00' visible='true' lat='50.9911891' lon='-1.3531923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964850' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9999171' lon='-1.4338921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963726' timestamp='2007-02-18T20:19:08+00:00' visible='true' lat='50.9286438' lon='-1.4144491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107847' timestamp='2007-04-27T23:50:37+01:00' visible='true' lat='50.9367799' lon='-1.3990268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021769' timestamp='2007-05-22T00:19:51+01:00' user='Dean Earley' visible='true' lat='50.9467887' lon='-1.398773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091395' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9884473' lon='-1.4450487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908438' timestamp='2006-07-18T10:20:38+01:00' user='nickw' visible='true' lat='50.9355693' lon='-1.369357' />
-  <node id='28173887' timestamp='2007-04-29T01:03:01+01:00' visible='true' lat='50.9420301' lon='-1.4308739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487484' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9159943' lon='-1.3905857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133032' timestamp='2007-05-15T20:36:39+01:00' user='nickw' visible='true' lat='50.9333179' lon='-1.3746834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635133' timestamp='2007-04-05T14:18:26+01:00' user='Dean Earley' visible='true' lat='50.904524' lon='-1.362447' />
-  <node id='19111072' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0001812' lon='-1.3920817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600478' timestamp='2007-05-22T00:40:27+01:00' user='Dean Earley' visible='true' lat='50.9405475' lon='-1.4291037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582910' timestamp='2007-05-02T23:57:40+01:00' visible='true' lat='50.9407335' lon='-1.4269328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783116' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9482629' lon='-1.3482918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956717' timestamp='2007-06-26T23:49:22+01:00' user='nickw' visible='true' lat='50.9273708' lon='-1.3483602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966369' timestamp='2007-02-18T20:18:24+00:00' visible='true' lat='50.9166262' lon='-1.3698124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613444' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.9774264' lon='-1.402973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133112' timestamp='2006-10-28T01:55:37+01:00' user='Dean Earley' visible='true' lat='50.9277998' lon='-1.3548215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254269' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9548032' lon='-1.3460552' />
-  <node id='29990891' timestamp='2008-01-03T19:20:41+00:00' user='nickw' visible='true' lat='51.0000553' lon='-1.3525056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157205669' timestamp='2007-12-08T20:12:20+00:00' user='nickw' visible='true' lat='50.9424935' lon='-1.4476174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797898' timestamp='2007-09-13T21:06:04+01:00' user='mike l' visible='true' lat='50.9744829' lon='-1.4508603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29543383' timestamp='2007-06-10T18:16:26+01:00' visible='true' lat='50.9659412' lon='-1.3659746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147521' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9092036' lon='-1.402775' />
-  <node id='30226354' timestamp='2007-06-11T22:23:53+01:00' visible='true' lat='50.9805857' lon='-1.3537149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179504' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9589587' lon='-1.4016339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271035' timestamp='2007-09-20T19:40:25+01:00' user='mike l' visible='true' lat='50.9412781' lon='-1.3763184'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Swaythling' />
-  </node>
-  <node id='28903996' timestamp='2007-10-16T11:34:27+01:00' user='Dean Earley' visible='true' lat='50.9501042' lon='-1.3636427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722350' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.9551601' lon='-1.3717467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25555528' timestamp='2008-01-03T19:18:18+00:00' user='nickw' visible='true' lat='51.0070168' lon='-1.3438992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632449' timestamp='2007-05-26T19:27:10+01:00' visible='true' lat='50.9609973' lon='-1.3659158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913877' timestamp='2007-06-03T15:56:39+01:00' visible='true' lat='50.9857819' lon='-1.3576837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705527' timestamp='2007-05-28T11:19:19+01:00' visible='true' lat='50.9848131' lon='-1.3527293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341764' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9106365' lon='-1.3601794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872370' timestamp='2007-06-02T19:03:57+01:00' visible='true' lat='50.9166678' lon='-1.350856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419251' timestamp='2006-12-02T22:59:19+00:00' user='Dean Earley' visible='true' lat='50.9380092' lon='-1.3593324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194389' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9458443' lon='-1.4385211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001303' timestamp='2007-05-12T09:40:11+01:00' user='nickw' visible='true' lat='50.9211659' lon='-1.3836617'>
-    <tag k='name' v='COLLIER CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471837' timestamp='2007-03-24T16:33:41+00:00' user='Dean Earley' visible='true' lat='50.9381986' lon='-1.3686237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180197' timestamp='2007-04-29T02:05:34+01:00' user='Dean Earley' visible='true' lat='50.9643652' lon='-1.4215765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133583' timestamp='2007-05-15T20:41:27+01:00' user='nickw' visible='true' lat='50.933125' lon='-1.3722419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730525' timestamp='2007-05-28T19:36:52+01:00' visible='true' lat='50.9684328' lon='-1.3700483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925346' timestamp='2007-06-03T20:36:37+01:00' visible='true' lat='50.9794254' lon='-1.3649884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577120' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9647897' lon='-1.4215245' />
-  <node id='27021818' timestamp='2007-04-03T00:53:05+01:00' user='Ben' visible='true' lat='50.9368876' lon='-1.3954632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132707' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.9454386' lon='-1.4775666' />
-  <node id='29548708' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.966789' lon='-1.3664509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998137' timestamp='2007-06-05T23:00:31+01:00' user='nickw' visible='true' lat='50.9924104' lon='-1.4037336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718200' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.9352556' lon='-1.4458375' />
-  <node id='29621207' timestamp='2007-05-26T11:34:37+01:00' visible='true' lat='50.970497' lon='-1.3535282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223088' timestamp='2007-06-11T21:51:52+01:00' visible='true' lat='50.9835672' lon='-1.3566371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125571496' timestamp='2007-11-20T11:54:53+00:00' user='Nick Dyer' visible='true' lat='50.9630436' lon='-1.4252152' />
-  <node id='29730496' timestamp='2007-05-28T19:36:27+01:00' visible='true' lat='50.9713591' lon='-1.3619677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949880' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.990913' lon='-1.3797145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727989' timestamp='2006-11-12T09:56:55+00:00' user='Dean Earley' visible='true' lat='50.9286465' lon='-1.3846577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573782' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true' lat='50.9949147' lon='-1.4013914' />
-  <node id='160264003' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9540579' lon='-1.3701924' />
-  <node id='29816746' timestamp='2007-05-31T22:13:34+01:00' visible='true' lat='50.990899' lon='-1.3553435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801364' timestamp='2006-12-16T00:49:39+00:00' user='Dean Earley' visible='true' lat='50.9056348' lon='-1.3738404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250007' timestamp='2007-04-29T21:42:12+01:00' visible='true' lat='50.9147453' lon='-1.4493884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950442' timestamp='2007-09-10T23:28:30+01:00' visible='true' lat='50.9134441' lon='-1.3979758'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613493' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9778862' lon='-1.4001434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945352' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9222027' lon='-1.3463919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689098' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.941588' lon='-1.3844635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889419' timestamp='2007-09-23T16:33:11+01:00' user='mike l' visible='true' lat='50.9414596' lon='-1.372979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924215' timestamp='2007-01-06T14:37:59+00:00' user='nickw' visible='true' lat='50.9575023' lon='-1.3616846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639943' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.9017212' lon='-1.3788543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924097' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.9395475' lon='-1.3746676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21614661' timestamp='2006-12-16T20:57:37+00:00' user='nickw' visible='true' lat='50.8995777' lon='-1.4058182'>
-    <tag k='name' v='BUGLE ST' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764416' timestamp='2007-05-30T21:37:23+01:00' user='nickw' visible='true' lat='50.9219366' lon='-1.363084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549350' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.9677726' lon='-1.3703874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963772' timestamp='2007-04-29T08:58:10+01:00' user='Dean Earley' visible='true' lat='50.9425863' lon='-1.4096118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254316' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.999174' lon='-1.3348904' />
-  <node id='29691354' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8969901' lon='-1.3962773' />
-  <node id='254833' timestamp='2007-04-03T00:52:15+01:00' user='Dean Earley' visible='true' lat='50.9142978' lon='-1.4231336' />
-  <node id='24984776' timestamp='2007-01-10T00:14:53+00:00' user='nickw' visible='true' lat='50.9419081' lon='-1.3908276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998059' timestamp='2007-06-05T23:00:20+01:00' user='nickw' visible='true' lat='50.9840441' lon='-1.4104883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325667' timestamp='2007-04-29T20:52:52+01:00' user='Dean Earley' visible='true' lat='50.9358842' lon='-1.4316721' />
-  <node id='21636727' timestamp='2007-05-22T00:19:51+01:00' user='Dean Earley' visible='true' lat='50.94595' lon='-1.3956333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301597' timestamp='2005-12-08T22:43:53+00:00' user='nickw' visible='true' lat='50.9298062' lon='-1.4032459' />
-  <node id='25640026' timestamp='2007-03-04T18:58:23+00:00' user='Dean Earley' visible='true' lat='50.9161985' lon='-1.373847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360188' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9536002' lon='-1.3702783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706274' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9126426' lon='-1.380635'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='26593134' timestamp='2007-04-29T19:27:57+01:00' user='Andy Street' visible='true' lat='50.9002024' lon='-1.3607591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110808' timestamp='2006-10-27T23:39:09+01:00' user='Dean Earley' visible='true' lat='50.9352891' lon='-1.3612226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154770520' timestamp='2007-12-07T13:51:23+00:00' user='Nick Dyer' visible='true' lat='50.961207' lon='-1.4272723' />
-  <node id='21420714' timestamp='2006-12-02T23:56:34+00:00' user='Dean Earley' visible='true' lat='50.9280334' lon='-1.3928731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783090' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9427803' lon='-1.3544505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021758' timestamp='2007-04-03T00:52:40+01:00' user='Ben' visible='true' lat='50.9462496' lon='-1.4050435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243614' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.9382251' lon='-1.4146217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548691' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9635647' lon='-1.3667054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142620773' timestamp='2007-11-29T22:31:12+00:00' user='nickw' visible='true' lat='50.9175753' lon='-1.412205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194494' timestamp='2007-11-25T22:27:52+00:00' user='southglos' visible='true' lat='50.9478106' lon='-1.4059089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600440' timestamp='2006-12-16T10:13:54+00:00' user='nickw' visible='true' lat='50.9210939' lon='-1.4560659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071412' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9227101' lon='-1.3552627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640007' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9092509' lon='-1.3719391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249892' timestamp='2007-04-29T21:41:44+01:00' visible='true' lat='50.91368' lon='-1.4439271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071339' timestamp='2006-08-11T02:48:09+01:00' user='Dean Earley' visible='true' lat='50.91887' lon='-1.3643166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723039' timestamp='2006-10-06T23:52:00+01:00' user='Dean Earley' visible='true' lat='50.9946375' lon='-1.3575973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964737' timestamp='2007-01-19T20:35:58+00:00' user='Dean Earley' visible='true' lat='50.9206469' lon='-1.3896381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160405066' timestamp='2007-12-10T20:59:12+00:00' user='sladen' visible='true' lat='50.9124495' lon='-1.4357992' />
-  <node id='21178427' timestamp='2006-11-22T18:12:41+00:00' user='southglos' visible='true' lat='50.9904703' lon='-1.3513958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325229' timestamp='2006-11-11T17:23:33+00:00' user='Dean Earley' visible='true' lat='50.9354637' lon='-1.3404645' />
-  <node id='21689179' timestamp='2006-12-23T10:22:27+00:00' user='nickw' visible='true' lat='50.9381266' lon='-1.3712372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296613' timestamp='2007-01-19T10:19:55+00:00' user='Dean Earley' visible='true' lat='50.9703106' lon='-1.3635551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099524' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9512274' lon='-1.3659819' />
-  <node id='254940' timestamp='2006-09-04T02:08:07+01:00' user='Dean Earley' visible='true' lat='50.9495494' lon='-1.4134998' />
-  <node id='29998965' timestamp='2007-06-05T23:28:55+01:00' user='nickw' visible='true' lat='50.9869331' lon='-1.4389375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388888' timestamp='2007-04-05T14:18:28+01:00' user='Dean Earley' visible='true' lat='50.9421125' lon='-1.3913383' />
-  <node id='20972832' timestamp='2007-02-23T21:48:38+00:00' user='nickw' visible='true' lat='50.9023101' lon='-1.3962832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928996' timestamp='2007-06-03T21:57:59+01:00' visible='true' lat='50.9759097' lon='-1.3633806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227261' timestamp='2007-02-18T20:18:21+00:00' visible='true' lat='50.9273245' lon='-1.4155606'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290776' timestamp='2007-10-29T15:43:32+00:00' user='Dean Earley' visible='true' lat='50.9664694' lon='-1.3856995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250050' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.9170511' lon='-1.4493342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194420' timestamp='2007-04-29T08:20:31+01:00' visible='true' lat='50.9474189' lon='-1.4366513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582964' timestamp='2007-05-02T23:57:48+01:00' visible='true' lat='50.9430668' lon='-1.4242482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111562' timestamp='2007-10-29T08:00:08+00:00' user='nickw' visible='true' lat='50.9268012' lon='-1.4385555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762104' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9402588' lon='-1.3526233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157216951' timestamp='2007-12-08T20:19:41+00:00' user='nickw' visible='true' lat='50.9451285' lon='-1.4489981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491400' timestamp='2007-11-19T13:49:31+00:00' user='nickw' visible='true' lat='50.9191366' lon='-1.4019869'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='St Barnabas' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='90677142' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8989887' lon='-1.4441294' />
-  <node id='329521' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9511809' lon='-1.4098919' />
-  <node id='469841' timestamp='2007-04-05T14:18:28+01:00' user='Dean Earley' visible='true' lat='50.9232879' lon='-1.3429564' />
-  <node id='29389520' timestamp='2007-05-26T11:38:04+01:00' visible='true' lat='50.9706514' lon='-1.3529745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418331' timestamp='2007-05-02T00:33:12+01:00' visible='true' lat='50.9665087' lon='-1.3617787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071322' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9204064' lon='-1.3622042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504462' timestamp='2007-06-17T21:43:57+01:00' visible='true' lat='50.9817342' lon='-1.3588662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600667' timestamp='2006-12-16T11:37:21+00:00' user='David Currie' visible='true' lat='50.9722017' lon='-1.3975618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661160' timestamp='2007-04-05T14:18:28+01:00' user='Dean Earley' visible='true' lat='50.9007823' lon='-1.3606777' />
-  <node id='20961061' timestamp='2006-11-11T17:12:57+00:00' user='Dean Earley' visible='true' lat='50.9169752' lon='-1.317932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885354' timestamp='2006-08-23T01:17:10+01:00' user='dmgroom' visible='true' lat='50.8984417' lon='-1.402427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414291' timestamp='2007-05-01T23:50:11+01:00' user='nickw' visible='true' lat='50.9435687' lon='-1.3722469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710871' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9859036' lon='-1.356216'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48965784' timestamp='2007-09-11T00:11:36+01:00' visible='true' lat='50.9019693' lon='-1.4053939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232077' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9116463' lon='-1.4122631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346867' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9125929' lon='-1.3686935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021739' timestamp='2007-04-03T00:52:29+01:00' user='Ben' visible='true' lat='50.933647' lon='-1.3834762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480654' timestamp='2007-01-27T23:30:37+00:00' visible='true' lat='50.9204883' lon='-1.3894585'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29380438' timestamp='2007-05-20T10:19:29+01:00' user='nickw' visible='true' lat='50.9438757' lon='-1.3751973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924319' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9861318' lon='-1.3802303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831098' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9111239' lon='-1.4069532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663601' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9055031' lon='-1.4049789' />
-  <node id='27237360' timestamp='2007-04-09T14:37:12+01:00' user='avantman42' visible='true' lat='50.9004911' lon='-1.3497182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998090' timestamp='2007-06-05T23:00:24+01:00' user='nickw' visible='true' lat='50.9874021' lon='-1.4037435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486269' timestamp='2007-07-09T11:55:39+01:00' visible='true' lat='50.911128' lon='-1.3841455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447508' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.909791' lon='-1.3881979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518808' timestamp='2007-04-05T14:18:28+01:00' user='Dean Earley' visible='true' lat='50.9319' lon='-1.387' />
-  <node id='29795097' timestamp='2007-05-30T21:48:09+01:00' user='nickw' visible='true' lat='50.9166927' lon='-1.3571756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505743' timestamp='2007-05-22T19:28:34+01:00' visible='true' lat='50.9928629' lon='-1.3546965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249875' timestamp='2007-04-29T21:41:42+01:00' visible='true' lat='50.9204287' lon='-1.4409342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091841' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9084625' lon='-1.4166292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209186' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9428737' lon='-1.4486728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31163574' timestamp='2007-07-01T22:15:23+01:00' visible='true' lat='50.9645137' lon='-1.3519052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675692' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.901403' lon='-1.4440522' />
-  <node id='160415528' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true' lat='50.9109072' lon='-1.4294219' />
-  <node id='21507783' timestamp='2007-05-22T00:19:52+01:00' user='Dean Earley' visible='true' lat='50.9482299' lon='-1.400178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896443' timestamp='2007-02-13T19:46:56+00:00' user='Dean Earley' visible='true' lat='50.9646116' lon='-1.3851834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19229173' timestamp='2007-04-29T20:37:41+01:00' user='Dean Earley' visible='true' lat='50.9349322' lon='-1.4148763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414276' timestamp='2007-05-01T23:49:59+01:00' user='nickw' visible='true' lat='50.9400636' lon='-1.3760216'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783097' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9445078' lon='-1.3543711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108692' timestamp='2007-10-29T07:48:43+00:00' user='nickw' visible='true' lat='50.9312088' lon='-1.4223641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254893' timestamp='2007-04-29T20:52:52+01:00' user='Dean Earley' visible='true' lat='50.9339432' lon='-1.419568' />
-  <node id='20973096' timestamp='2007-11-02T14:14:23+00:00' user='Nick Dyer' visible='true' lat='50.9020182' lon='-1.4092548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25938548' timestamp='2007-02-16T20:51:28+00:00' user='nickw' visible='true' lat='50.9116219' lon='-1.3938819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380419' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.9455656' lon='-1.3796872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972782' timestamp='2007-12-10T21:05:18+00:00' user='sladen' visible='true' lat='50.9055383' lon='-1.4161869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727680' timestamp='2007-03-23T22:53:45+00:00' user='nickw' visible='true' lat='50.9007325' lon='-1.3738642'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Manor' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561813' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9227412' lon='-1.442623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17768856' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9447626' lon='-1.3716429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632169' timestamp='2007-05-26T19:20:14+01:00' visible='true' lat='50.9570361' lon='-1.3683894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997555' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9933107' lon='-1.34312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935726' timestamp='2007-05-11T00:47:45+01:00' visible='true' lat='50.9416633' lon='-1.4394936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217122' timestamp='2007-03-25T19:25:02+01:00' user='Dean Earley' visible='true' lat='50.9165747' lon='-1.3593602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964051' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='51.0029376' lon='-1.4368952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998538' timestamp='2007-06-05T23:13:22+01:00' user='nickw' visible='true' lat='50.9644041' lon='-1.4404275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228099' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.95083' lon='-1.4241025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329474' timestamp='2007-04-05T14:18:29+01:00' user='Dean Earley' visible='true' lat='50.9371' lon='-1.37533' />
-  <node id='9267988' timestamp='2007-02-01T22:21:50+00:00' user='Dean Earley' visible='true' lat='50.9443254' lon='-1.373683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632152' timestamp='2007-05-26T19:20:00+01:00' visible='true' lat='50.9577254' lon='-1.3666584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636935' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9089369' lon='-1.4164122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237091' timestamp='2007-04-29T19:33:16+01:00' user='nickw' visible='true' lat='50.909778' lon='-1.3482331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243469' timestamp='2007-04-29T20:23:53+01:00' user='Dean Earley' visible='true' lat='50.9394205' lon='-1.4069832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908390' timestamp='2006-12-18T23:27:57+00:00' visible='true' lat='50.9342255' lon='-1.3757632' />
-  <node id='29815557' timestamp='2007-05-31T21:42:56+01:00' visible='true' lat='50.9892437' lon='-1.3583099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976724' timestamp='2007-04-29T20:52:52+01:00' user='Dean Earley' visible='true' lat='50.9330714' lon='-1.4210821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27558592' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9266834' lon='-1.3914922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241436' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.945917' lon='-1.4495655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231354' timestamp='2007-04-29T18:48:53+01:00' user='nickw' visible='true' lat='50.9101326' lon='-1.3648127'>
-    <tag k='name' v='MORLEY CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125580532' timestamp='2007-11-20T11:56:43+00:00' user='Nick Dyer' visible='true' lat='50.9626112' lon='-1.4253955' />
-  <node id='28903060' timestamp='2007-05-09T23:03:38+01:00' visible='true' lat='50.9422799' lon='-1.3707764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27239001' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9173548' lon='-1.4440968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160392708' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9183966' lon='-1.4596172' />
-  <node id='254710' timestamp='2007-04-29T08:58:12+01:00' user='Dean Earley' visible='true' lat='50.940641' lon='-1.4071367' />
-  <node id='29171752' timestamp='2007-05-16T23:48:00+01:00' user='nickw' visible='true' lat='50.942118' lon='-1.3901243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530523' timestamp='2007-05-28T10:13:00+01:00' visible='true' lat='50.989022' lon='-1.3544628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670535' timestamp='2007-05-27T11:12:24+01:00' visible='true' lat='50.9679369' lon='-1.3642424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249806' timestamp='2007-04-29T21:41:32+01:00' visible='true' lat='50.9217752' lon='-1.4439905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160221498' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9141653' lon='-1.3904484' />
-  <node id='28583045' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9393141' lon='-1.430254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152510' timestamp='2008-02-03T06:21:47+00:00' user='sladen' visible='true' lat='50.9079047' lon='-1.3981745' />
-  <node id='24984713' timestamp='2007-01-10T00:11:56+00:00' user='nickw' visible='true' lat='50.9433484' lon='-1.3814879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29912979' timestamp='2007-06-03T15:50:11+01:00' visible='true' lat='50.9873427' lon='-1.3594151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149857' timestamp='2008-02-03T06:12:31+00:00' user='sladen' visible='true' lat='50.90745' lon='-1.4021141' />
-  <node id='20976811' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9256997' lon='-1.4217839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102982' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9313178' lon='-1.3575863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180238' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9618963' lon='-1.4249635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608161' timestamp='2007-04-05T14:18:29+01:00' user='Dean Earley' visible='true' lat='50.8957434' lon='-1.3620519' />
-  <node id='19111046' timestamp='2006-10-22T23:24:06+01:00' user='Ben' visible='true' lat='50.9736407' lon='-1.3823517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124195' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9229874' lon='-1.349717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229558' timestamp='2007-06-12T00:14:36+01:00' user='nickw' visible='true' lat='50.9334104' lon='-1.3540532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114388' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.9039906' lon='-1.3905171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815548' timestamp='2007-05-31T21:42:53+01:00' visible='true' lat='50.988173' lon='-1.357139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924112' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9397979' lon='-1.3704161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306299' timestamp='2005-12-11T21:47:02+00:00' user='nickw' visible='true' lat='50.9232831' lon='-1.4043188' />
-  <node id='675886' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.9256122' lon='-1.3744859' />
-  <node id='28257912' timestamp='2007-04-29T22:56:50+01:00' user='Andy Street' visible='true' lat='50.900541' lon='-1.3549848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359701' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9682596' lon='-1.3526311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471850' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9393366' lon='-1.3679089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222192' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9096732' lon='-1.4295249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091835' timestamp='2006-11-19T12:09:11+00:00' user='nickw' visible='true' lat='50.9150012' lon='-1.4256565'>
-    <tag k='name' v='NGALE GR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613459' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9775872' lon='-1.401092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179457' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9643902' lon='-1.4194251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817624' timestamp='2007-05-31T22:21:08+01:00' visible='true' lat='50.9868357' lon='-1.3639997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305603' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9910464' lon='-1.3948131' />
-  <node id='28252908' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9454726' lon='-1.42794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950455' timestamp='2007-09-10T23:28:32+01:00' visible='true' lat='50.911888' lon='-1.3955524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339157' timestamp='2007-04-30T20:39:32+01:00' visible='true' lat='50.9670479' lon='-1.361392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816784' timestamp='2007-05-31T22:15:45+01:00' visible='true' lat='50.9869418' lon='-1.3615532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704319' timestamp='2007-06-03T15:56:40+01:00' visible='true' lat='50.9856054' lon='-1.3589004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537332' timestamp='2006-10-27T22:49:32+01:00' user='Dean Earley' visible='true' lat='50.9299276' lon='-1.3539683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231305' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true' lat='50.90524' lon='-1.3711229'>
-    <tag k='name' v='MALDON RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269318' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0061803' lon='-1.3933538' />
-  <node id='2784524' timestamp='2007-02-18T20:18:35+00:00' visible='true' lat='50.9397231' lon='-1.3588708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952640' timestamp='2007-02-11T00:33:17+00:00' visible='true' lat='50.9326874' lon='-1.3798315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724252' timestamp='2007-02-18T21:30:18+00:00' visible='true' lat='50.91388' lon='-1.4098779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728176' timestamp='2007-04-29T02:05:43+01:00' user='Dean Earley' visible='true' lat='50.9518889' lon='-1.4038751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418545' timestamp='2007-05-02T00:35:25+01:00' visible='true' lat='50.9614206' lon='-1.3741975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582938' timestamp='2007-05-02T23:57:44+01:00' visible='true' lat='50.9425017' lon='-1.4266282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423509' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9311635' lon='-1.4441409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780847' timestamp='2007-06-22T21:10:24+01:00' user='Steve Chilton' visible='true' lat='50.9072565' lon='-1.4115609'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726311' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true' lat='50.9183503' lon='-1.3749236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87877615' timestamp='2007-10-26T13:40:22+01:00' user='Nick Dyer' visible='true' lat='50.9244328' lon='-1.4424654' />
-  <node id='29925570' timestamp='2007-06-03T20:41:54+01:00' visible='true' lat='50.981115' lon='-1.3628526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463027' timestamp='2007-05-22T00:01:32+01:00' user='nickw' visible='true' lat='50.9080509' lon='-1.4016469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110950' timestamp='2007-10-29T07:59:19+00:00' user='nickw' visible='true' lat='50.9274367' lon='-1.4370606'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179447' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9606124' lon='-1.4220128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021837' timestamp='2007-04-03T00:53:17+01:00' user='Ben' visible='true' lat='50.9502289' lon='-1.3737377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305599' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9915614' lon='-1.3914871' />
-  <node id='90660054' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.9049456' lon='-1.4110128' />
-  <node id='325682' timestamp='2007-04-05T14:18:30+01:00' user='Dean Earley' visible='true' lat='50.9214025' lon='-1.4159472' />
-  <node id='29704619' timestamp='2007-05-28T10:50:13+01:00' visible='true' lat='50.978259' lon='-1.3507791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48884799' timestamp='2007-09-12T23:19:58+01:00' user='mike l' visible='true' lat='50.9441016' lon='-1.4330366' />
-  <node id='28194378' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9449156' lon='-1.4403048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169409513' timestamp='2007-12-14T21:27:51+00:00' user='nickw' visible='true' lat='50.9279705' lon='-1.4388564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463008' timestamp='2007-05-22T00:01:30+01:00' user='nickw' visible='true' lat='50.9085357' lon='-1.4035285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243562' timestamp='2007-04-29T20:24:37+01:00' user='Dean Earley' visible='true' lat='50.9387517' lon='-1.4116857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33130199' timestamp='2007-07-30T16:06:39+01:00' visible='true' lat='50.9150395' lon='-1.4144858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278522' timestamp='2007-08-14T04:47:59+01:00' user='andrewpmk' visible='true' lat='50.9074155' lon='-1.3979547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325022' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9580731' lon='-1.4122307' />
-  <node id='29009082' timestamp='2007-05-12T15:31:58+01:00' user='nickw' visible='true' lat='50.9295082' lon='-1.3518351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718255' timestamp='2007-08-08T01:32:20+01:00' visible='true' lat='50.9369161' lon='-1.444962' />
-  <node id='21613474' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9720384' lon='-1.3944434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432000' timestamp='2007-06-16T16:26:11+01:00' visible='true' lat='50.9845813' lon='-1.3521005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903642' timestamp='2007-05-09T23:57:39+01:00' visible='true' lat='50.9520661' lon='-1.3610582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659243' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9025316' lon='-1.4076998' />
-  <node id='28583005' timestamp='2007-05-03T00:08:36+01:00' visible='true' lat='50.940487' lon='-1.4319946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194905' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9409497' lon='-1.407193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744414' timestamp='2006-09-03T01:03:35+01:00' user='Dean Earley' visible='true' lat='50.9437668' lon='-1.3742948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668287' timestamp='2007-01-04T21:06:34+00:00' user='nickw' visible='true' lat='50.9842321' lon='-1.3951845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096970' timestamp='2007-06-08T23:24:17+01:00' visible='true' lat='50.9636085' lon='-1.376657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909955' timestamp='2007-06-03T14:59:08+01:00' visible='true' lat='50.9666996' lon='-1.3641153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347589' timestamp='2007-04-30T23:36:50+01:00' user='nickw' visible='true' lat='50.9278659' lon='-1.3557338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115436' timestamp='2007-10-29T08:07:20+00:00' user='nickw' visible='true' lat='50.9270454' lon='-1.4427623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945325' timestamp='2007-03-31T20:34:28+01:00' user='nickw' visible='true' lat='50.9191065' lon='-1.3576791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372733' timestamp='2007-12-14T21:30:35+00:00' user='nickw' visible='true' lat='50.9305793' lon='-1.4423899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071237' timestamp='2006-08-11T02:47:59+01:00' user='Dean Earley' visible='true' lat='50.9198659' lon='-1.3723501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325252' timestamp='2006-11-11T17:24:03+00:00' user='Dean Earley' visible='true' lat='50.9276675' lon='-1.317145' />
-  <node id='19890092' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9192862' lon='-1.3920982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600423' timestamp='2007-03-24T16:33:41+00:00' user='Dean Earley' visible='true' lat='50.916999' lon='-1.428687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642323' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9506334' lon='-1.3604994' />
-  <node id='18398381' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9493929' lon='-1.4496196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194863' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9438484' lon='-1.4076224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640041' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9141017' lon='-1.3594079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592371' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9126855' lon='-1.4444179' />
-  <node id='21141412' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9281134' lon='-1.4276177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474841' timestamp='2007-04-05T14:18:30+01:00' user='Dean Earley' visible='true' lat='50.9342502' lon='-1.3492093' />
-  <node id='29909657' timestamp='2007-06-03T14:54:16+01:00' visible='true' lat='50.9687034' lon='-1.3541458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157238284' timestamp='2007-12-08T20:33:29+00:00' user='nickw' visible='true' lat='50.9468496' lon='-1.4478769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431951' timestamp='2007-06-16T16:25:12+01:00' visible='true' lat='50.9721041' lon='-1.3517289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30581720' timestamp='2007-06-18T21:23:07+01:00' visible='true' lat='50.9679285' lon='-1.357531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998559' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.964254' lon='-1.4292227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874051' timestamp='2007-05-08T14:50:31+01:00' visible='true' lat='50.9362163' lon='-1.4391138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636742' timestamp='2007-04-03T00:54:13+01:00' user='Ben' visible='true' lat='50.9398235' lon='-1.3925246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162421' timestamp='2008-01-04T19:28:06+00:00' user='nickw' visible='true' lat='50.9717152' lon='-1.3833546'>
-    <tag k='religion' v='christian' />
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='Velmore Chapel' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668253' timestamp='2007-01-04T21:06:31+00:00' user='nickw' visible='true' lat='50.9833378' lon='-1.3929693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212578' timestamp='2007-12-08T20:16:59+00:00' user='nickw' visible='true' lat='50.944246' lon='-1.4469319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908493' timestamp='2006-07-18T10:21:53+01:00' user='nickw' visible='true' lat='50.937538' lon='-1.365396' />
-  <node id='21636757' timestamp='2007-05-22T00:19:53+01:00' user='Dean Earley' visible='true' lat='50.944895' lon='-1.3933624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932452' timestamp='2007-05-10T21:06:03+01:00' user='Dean Earley' visible='true' lat='50.9628939' lon='-1.4546578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142616998' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9133104' lon='-1.4171717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998525' timestamp='2007-06-05T23:13:20+01:00' user='nickw' visible='true' lat='50.9606003' lon='-1.4547316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783127' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9438819' lon='-1.347815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342636' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9126658' lon='-1.3651858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998994' timestamp='2007-06-05T23:28:58+01:00' user='nickw' visible='true' lat='50.99121' lon='-1.4388978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236171' timestamp='2007-04-29T19:26:21+01:00' user='Andy Street' visible='true' lat='50.9040476' lon='-1.3595528'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Earl Of Locksley' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976698' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9359044' lon='-1.4223401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227227' timestamp='2007-04-29T20:37:34+01:00' user='Dean Earley' visible='true' lat='50.9352924' lon='-1.4162235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324355' timestamp='2005-12-16T00:19:02+00:00' user='nickw' visible='true' lat='50.9142923' lon='-1.4060783' />
-  <node id='91120326' timestamp='2007-10-29T08:12:53+00:00' user='nickw' visible='true' lat='50.9312589' lon='-1.4474707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657766' timestamp='2007-04-05T14:18:32+01:00' user='Dean Earley' visible='true' lat='50.9046611' lon='-1.3654221' />
-  <node id='700407' timestamp='2007-04-05T14:18:32+01:00' user='Dean Earley' visible='true' lat='50.9231895' lon='-1.3897113' />
-  <node id='24984683' timestamp='2007-01-10T00:10:53+00:00' user='nickw' visible='true' lat='50.9452102' lon='-1.3879234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830656' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9236574' lon='-1.3704035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242665' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9076927' lon='-1.4231585' />
-  <node id='28372760' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.9308958' lon='-1.4397882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526316' timestamp='2007-05-23T09:19:02+01:00' user='nickw' visible='true' lat='50.9262345' lon='-1.3618282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331344' timestamp='2007-12-06T22:09:53+00:00' user='Dean Earley' visible='true' lat='51.0083' lon='-1.37421' />
-  <node id='28246356' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.9384432' lon='-1.4261798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896255' timestamp='2007-10-16T17:59:42+01:00' user='Dean Earley' visible='true' lat='50.9632751' lon='-1.393841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248236' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8936727' lon='-1.3972207' />
-  <node id='254863' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9220543' lon='-1.4698139' />
-  <node id='29913607' timestamp='2007-06-03T15:54:45+01:00' visible='true' lat='50.9860031' lon='-1.3606446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874047' timestamp='2007-05-08T14:50:18+01:00' visible='true' lat='50.9365914' lon='-1.4378836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342580' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9093463' lon='-1.3612522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225255' timestamp='2007-06-11T22:10:26+01:00' visible='true' lat='50.9818933' lon='-1.3571908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9285002' timestamp='2007-02-18T21:25:30+00:00' visible='true' lat='50.9150711' lon='-1.3999601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259899' timestamp='2007-04-29T23:09:26+01:00' user='Andy Street' visible='true' lat='50.9020543' lon='-1.3480475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225797' timestamp='2007-06-11T22:16:46+01:00' visible='true' lat='50.9833173' lon='-1.3555849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949903' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9941892' lon='-1.3810257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275703' timestamp='2006-11-25T23:51:15+00:00' user='nickw' visible='true' lat='50.9230755' lon='-1.4332439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924304' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9761007' lon='-1.3729987'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161986' timestamp='2007-09-16T10:21:43+01:00' user='mike l' visible='true' lat='50.978965' lon='-1.3787236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231009' timestamp='2007-04-29T18:44:40+01:00' user='nickw' visible='true' lat='50.9100094' lon='-1.3599236'>
-    <tag k='name' v='DEACON CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677157' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8962766' lon='-1.4416919' />
-  <node id='122337311' timestamp='2007-11-18T19:12:33+00:00' user='nickw' visible='true' lat='50.9180029' lon='-1.4369217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183714' timestamp='2007-04-29T02:25:34+01:00' user='Dean Earley' visible='true' lat='50.9521043' lon='-1.4052392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816631' timestamp='2007-05-31T22:10:47+01:00' visible='true' lat='50.9911442' lon='-1.3599001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52569039' timestamp='2007-09-16T10:11:15+01:00' user='mike l' visible='true' lat='50.9947257' lon='-1.4290718' />
-  <node id='254741' timestamp='2007-09-17T23:09:07+01:00' user='mike l' visible='true' lat='50.9697839' lon='-1.3897328' />
-  <node id='29707708' timestamp='2007-05-28T11:58:08+01:00' visible='true' lat='50.9867615' lon='-1.3611027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518778' timestamp='2007-04-05T14:18:33+01:00' user='Dean Earley' visible='true' lat='50.9162561' lon='-1.3949506' />
-  <node id='17721043' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9606722' lon='-1.3626614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160278854' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9120547' lon='-1.4428309' />
-  <node id='28341750' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9130792' lon='-1.3509016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965517' timestamp='2007-05-10T21:08:09+01:00' user='Dean Earley' visible='true' lat='50.9708714' lon='-1.4442982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963755' timestamp='2007-05-22T00:19:53+01:00' user='Dean Earley' visible='true' lat='50.9367629' lon='-1.4103193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466081' timestamp='2007-05-22T00:37:43+01:00' user='Dean Earley' visible='true' lat='50.9424351' lon='-1.4370774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657686' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.910599' lon='-1.371909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903947' timestamp='2007-05-26T14:54:10+01:00' user='LivingWithDragons' visible='true' lat='50.9812105' lon='-1.4448512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808642' timestamp='2007-11-11T18:09:35+00:00' user='Dean Earley' visible='true' lat='50.9147583' lon='-1.3593887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298286' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9558632' lon='-1.3997524' />
-  <node id='254496' timestamp='2007-09-23T16:33:14+01:00' user='mike l' visible='true' lat='50.9375259' lon='-1.3757529' />
-  <node id='30089074' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.966463' lon='-1.3765843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329825' timestamp='2007-01-25T22:42:41+00:00' user='Dean Earley' visible='true' lat='50.9335' lon='-1.40134' />
-  <node id='20110920' timestamp='2006-10-27T23:39:33+01:00' user='Dean Earley' visible='true' lat='50.9351453' lon='-1.3670022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957245' timestamp='2006-11-10T21:58:56+00:00' user='nickw' visible='true' lat='50.9213587' lon='-1.4052277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463038' timestamp='2007-05-22T00:01:34+01:00' user='nickw' visible='true' lat='50.9097604' lon='-1.4078785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971182' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9053548' lon='-1.3994386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743180' timestamp='2007-08-12T23:07:07+01:00' user='Edward' visible='true' lat='50.9091982' lon='-1.408791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237228' timestamp='2007-04-29T19:42:01+01:00' user='Andy Street' visible='true' lat='50.9029684' lon='-1.3572008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431985' timestamp='2007-06-16T16:26:06+01:00' visible='true' lat='50.9741406' lon='-1.3504213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331760' timestamp='2007-12-06T20:44:24+00:00' user='nickw' visible='true' lat='50.9401285' lon='-1.4407103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945403' timestamp='2007-03-31T20:34:36+01:00' user='nickw' visible='true' lat='50.9020733' lon='-1.3475643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223941' timestamp='2007-06-11T22:03:12+01:00' visible='true' lat='50.9835945' lon='-1.3517171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704456' timestamp='2007-05-28T10:36:47+01:00' visible='true' lat='50.9816593' lon='-1.3570133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324976' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9593707' lon='-1.4093554' />
-  <node id='305578' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9944153' lon='-1.395843' />
-  <node id='31486286' timestamp='2007-07-09T11:55:41+01:00' visible='true' lat='50.9118488' lon='-1.3835839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341798' timestamp='2007-04-30T21:49:02+01:00' user='nickw' visible='true' lat='50.9096449' lon='-1.3606841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254252' timestamp='2005-11-15T15:38:44+00:00' user='nickw' visible='true' lat='50.9557043' lon='-1.3759733' />
-  <node id='319633' timestamp='2008-01-18T20:55:09+00:00' user='jpd' visible='true' lat='50.9205259' lon='-1.3920319' />
-  <node id='29009031' timestamp='2007-05-12T15:28:42+01:00' user='nickw' visible='true' lat='50.9303096' lon='-1.3506729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474645' timestamp='2007-04-05T14:18:35+01:00' user='Dean Earley' visible='true' lat='50.9250177' lon='-1.3550946' />
-  <node id='28372745' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9315001' lon='-1.4411218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071284' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9193782' lon='-1.3593006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624976' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.9055746' lon='-1.3716519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721061' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9707896' lon='-1.3606096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707246' timestamp='2007-04-05T14:18:37+01:00' user='Dean Earley' visible='true' lat='50.8488906' lon='-1.3134688' />
-  <node id='18398430' timestamp='2007-06-01T20:19:56+01:00' visible='true' lat='50.9636411' lon='-1.3892045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889408' timestamp='2007-09-23T16:33:10+01:00' user='mike l' visible='true' lat='50.9362337' lon='-1.3539969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504290' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='50.9992891' lon='-1.3458872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147536' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9094688' lon='-1.4040796' />
-  <node id='301610' timestamp='2007-04-03T00:53:59+01:00' user='Ben' visible='true' lat='50.9375789' lon='-1.3993538' />
-  <node id='21141489' timestamp='2006-11-21T23:19:59+00:00' user='nickw' visible='true' lat='50.9339188' lon='-1.4379413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29765430' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.999022' lon='-1.3518423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342619' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9103484' lon='-1.3652454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469850' timestamp='2007-04-05T14:18:37+01:00' user='Dean Earley' visible='true' lat='50.908929' lon='-1.4142177' />
-  <node id='29817075' timestamp='2007-05-31T22:18:46+01:00' visible='true' lat='50.9853658' lon='-1.3645188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244225' timestamp='2007-04-29T20:36:25+01:00' user='Andy Street' visible='true' lat='50.9023515' lon='-1.3532756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2742650' timestamp='2006-05-11T21:32:17+01:00' user='Dean Earley' visible='true' lat='50.9486892' lon='-1.3971943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66586253' timestamp='2007-10-12T14:02:05+01:00' user='SteveC' visible='true' lat='50.9323528' lon='-1.4516198' />
-  <node id='25639977' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9003197' lon='-1.3798349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931368' timestamp='2007-06-03T22:43:07+01:00' visible='true' lat='50.9956404' lon='-1.3720756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071296' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9212602' lon='-1.3585589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227212' timestamp='2006-10-23T20:52:55+01:00' user='nickw' visible='true' lat='50.9302449' lon='-1.4133616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30227019' timestamp='2007-06-11T22:36:20+01:00' visible='true' lat='50.9824187' lon='-1.3527274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122339040' timestamp='2007-11-18T19:13:59+00:00' user='nickw' visible='true' lat='50.920561' lon='-1.4336586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507749' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9326302' lon='-1.3990196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91126050' timestamp='2007-10-29T08:17:57+00:00' user='nickw' visible='true' lat='50.9296155' lon='-1.4465047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957249' timestamp='2007-04-03T00:52:23+01:00' user='Dean Earley' visible='true' lat='50.9129102' lon='-1.4215731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110838' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9336114' lon='-1.3624715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66587704' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9315468' lon='-1.4491479' />
-  <node id='15028848' timestamp='2006-09-08T23:06:50+01:00' user='Dean Earley' visible='true' lat='50.9279422' lon='-1.3524377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505726' timestamp='2007-05-22T19:28:30+01:00' visible='true' lat='50.988848' lon='-1.3521971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461219' timestamp='2007-05-21T23:43:13+01:00' user='nickw' visible='true' lat='50.9068324' lon='-1.3973213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161107' timestamp='2007-06-10T18:13:41+01:00' visible='true' lat='50.9692369' lon='-1.3562949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964150' timestamp='2007-02-18T21:30:38+00:00' visible='true' lat='50.9159117' lon='-1.375129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348128' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9332976' lon='-1.3667093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325214' timestamp='2006-11-11T17:24:03+00:00' user='Dean Earley' visible='true' lat='50.9392835' lon='-1.3568077' />
-  <node id='298248' timestamp='2007-01-06T14:30:54+00:00' user='Dean Earley' visible='true' lat='50.9936854' lon='-1.3591206' />
-  <node id='28339139' timestamp='2007-04-30T20:39:24+01:00' visible='true' lat='50.9664241' lon='-1.3601682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743116' timestamp='2007-04-03T00:52:24+01:00' user='Dean Earley' visible='true' lat='50.9127587' lon='-1.4214107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117419' timestamp='2007-10-29T08:09:32+00:00' user='nickw' visible='true' lat='50.9276089' lon='-1.4425438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956743' timestamp='2007-06-26T23:49:25+01:00' user='nickw' visible='true' lat='50.9282598' lon='-1.3505455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432008' timestamp='2007-06-16T16:28:31+01:00' visible='true' lat='50.9749532' lon='-1.3490016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388937' timestamp='2007-04-05T14:18:37+01:00' user='Dean Earley' visible='true' lat='50.9423031' lon='-1.397615' />
-  <node id='245150395' timestamp='2008-02-03T06:15:17+00:00' user='sladen' visible='true' lat='50.9089709' lon='-1.4049293' />
-  <node id='254449' timestamp='2007-03-04T18:58:32+00:00' user='Dean Earley' visible='true' lat='50.9130904' lon='-1.3698727' />
-  <node id='28194329' timestamp='2007-04-29T08:20:21+01:00' visible='true' lat='50.9447495' lon='-1.4347877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236133' timestamp='2007-04-29T19:25:54+01:00' user='Andy Street' visible='true' lat='50.9079396' lon='-1.3544125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998076' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.9876709' lon='-1.4126339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997530' timestamp='2007-06-05T22:43:55+01:00' user='nickw' visible='true' lat='51.0082136' lon='-1.3554374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254633' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9626337' lon='-1.4212822' />
-  <node id='30124221' timestamp='2007-06-09T19:35:54+01:00' user='nickw' visible='true' lat='50.924822' lon='-1.3499653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231019' timestamp='2007-04-29T18:44:56+01:00' user='nickw' visible='true' lat='50.9110869' lon='-1.3588031'>
-    <tag k='name' v='DEACON CRS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160281292' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9203448' lon='-1.4749831' />
-  <node id='247790' timestamp='2005-11-14T22:25:08+00:00' user='nickw' visible='true' lat='50.9344196' lon='-1.3963151' />
-  <node id='25783075' timestamp='2007-02-11T18:07:09+00:00' user='nickw' visible='true' lat='50.9398761' lon='-1.3606887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124212' timestamp='2007-06-09T19:35:53+01:00' user='nickw' visible='true' lat='50.9239204' lon='-1.3474224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949937' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.991013' lon='-1.3854759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29387398' timestamp='2007-05-20T15:17:20+01:00' visible='true' lat='50.9653817' lon='-1.3635182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903833' timestamp='2007-11-20T11:02:01+00:00' user='Gregory Williams' visible='true' lat='50.9510224' lon='-1.3627908'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='21178412' timestamp='2007-01-19T09:28:17+00:00' user='Dean Earley' visible='true' lat='50.9875035' lon='-1.3447873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984762' timestamp='2007-04-03T00:54:07+01:00' user='Ben' visible='true' lat='50.9464091' lon='-1.4001212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998099' timestamp='2007-06-05T23:00:26+01:00' user='nickw' visible='true' lat='50.9864578' lon='-1.3981709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530602' timestamp='2007-04-05T14:18:39+01:00' user='Dean Earley' visible='true' lat='50.9229' lon='-1.39692' />
-  <node id='30290761' timestamp='2007-06-13T09:24:05+01:00' visible='true' lat='50.9693901' lon='-1.3831492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120345' timestamp='2007-10-29T08:12:54+00:00' user='nickw' visible='true' lat='50.9310961' lon='-1.4465569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903372' timestamp='2007-05-09T23:24:24+01:00' visible='true' lat='50.9473876' lon='-1.364943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092033' timestamp='2007-12-15T01:02:06+00:00' user='blackadder' visible='true' lat='50.9367004' lon='-1.453336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243516' timestamp='2007-04-29T20:24:02+01:00' user='Dean Earley' visible='true' lat='50.9400315' lon='-1.4080559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984732' timestamp='2007-01-10T00:12:11+00:00' user='nickw' visible='true' lat='50.9438896' lon='-1.3921849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684889' timestamp='2007-10-31T12:25:05+00:00' user='Dean Earley' visible='true' lat='50.9632266' lon='-1.4224745' />
-  <node id='29871565' timestamp='2007-06-02T18:40:08+01:00' visible='true' lat='50.9157182' lon='-1.3516266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512890' timestamp='2007-04-21T21:50:16+01:00' user='Dean Earley' visible='true' lat='50.9586537' lon='-1.345846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670783' timestamp='2007-05-27T11:37:38+01:00' visible='true' lat='50.9719465' lon='-1.3677849'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Leigh' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722364' timestamp='2006-10-06T23:46:15+01:00' user='Dean Earley' visible='true' lat='50.9476738' lon='-1.3950763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001333' timestamp='2007-05-12T09:40:16+01:00' user='nickw' visible='true' lat='50.9234363' lon='-1.3809805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874149' timestamp='2007-06-02T19:43:16+01:00' visible='true' lat='50.960564' lon='-1.3559737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816404' timestamp='2007-05-31T21:56:30+01:00' visible='true' lat='50.9890282' lon='-1.3551015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963791' timestamp='2007-05-22T00:19:53+01:00' user='Dean Earley' visible='true' lat='50.9331143' lon='-1.3999636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600495' timestamp='2006-12-16T10:13:58+00:00' user='nickw' visible='true' lat='50.9224214' lon='-1.4367356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296273' timestamp='2007-09-17T22:55:05+01:00' user='mike l' visible='true' lat='50.9737329' lon='-1.3674395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797911' timestamp='2007-09-13T21:06:06+01:00' user='mike l' visible='true' lat='50.9734588' lon='-1.4518981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745476' timestamp='2007-05-01T18:41:56+01:00' visible='true' lat='50.9733993' lon='-1.3769329'>
-    <tag k='highway' v='traffic_signals' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464232' timestamp='2007-05-22T00:19:08+01:00' user='Dean Earley' visible='true' lat='50.937875' lon='-1.4201418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254350' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9490042' lon='-1.4492844' />
-  <node id='25639962' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.9011492' lon='-1.3776084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510064' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.9022214' lon='-1.4163333' />
-  <node id='28179474' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.96192' lon='-1.4033905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123697' timestamp='2007-10-29T08:15:56+00:00' user='nickw' visible='true' lat='50.9305632' lon='-1.4474025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194890' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9426676' lon='-1.4081897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021788' timestamp='2007-04-03T00:52:50+01:00' user='Ben' visible='true' lat='50.9513429' lon='-1.398973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009019' timestamp='2007-05-12T15:28:41+01:00' user='nickw' visible='true' lat='50.9319248' lon='-1.3508219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814530' timestamp='2007-05-31T21:17:05+01:00' visible='true' lat='50.9880508' lon='-1.3560977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229588' timestamp='2007-06-12T00:14:42+01:00' user='nickw' visible='true' lat='50.9335544' lon='-1.350348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704910' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.900059' lon='-1.45312'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='157238273' timestamp='2007-12-08T20:33:29+00:00' user='nickw' visible='true' lat='50.9473627' lon='-1.4472014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383139' timestamp='2007-04-05T14:18:40+01:00' user='Dean Earley' visible='true' lat='50.9271359' lon='-1.4150369' />
-  <node id='9727815' timestamp='2007-02-04T22:51:56+00:00' user='Dean Earley' visible='true' lat='50.9078653' lon='-1.373153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704958' timestamp='2007-05-28T11:03:42+01:00' visible='true' lat='50.9821043' lon='-1.3513636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153327682' timestamp='2007-12-06T20:42:06+00:00' user='nickw' visible='true' lat='50.9379689' lon='-1.4400547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746400' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9952516' lon='-1.3386269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730502' timestamp='2007-05-28T19:36:33+01:00' visible='true' lat='50.9710487' lon='-1.3654237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325015' timestamp='2006-09-02T12:59:35+01:00' user='Dean Earley' visible='true' lat='50.9587176' lon='-1.42099' />
-  <node id='14727955' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.934684' lon='-1.3816892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17769058' timestamp='2007-12-10T19:18:16+00:00' user='sladen' visible='true' lat='50.9090078' lon='-1.3920277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298295' timestamp='2006-09-02T12:59:35+01:00' user='Dean Earley' visible='true' lat='50.9510325' lon='-1.3986343' />
-  <node id='170435' timestamp='2006-11-11T17:24:11+00:00' user='Dean Earley' visible='true' lat='50.9349417' lon='-1.3304709' />
-  <node id='28935989' timestamp='2007-05-11T00:59:39+01:00' visible='true' lat='50.9406591' lon='-1.4472716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903057' timestamp='2007-05-09T23:03:36+01:00' visible='true' lat='50.9421292' lon='-1.3700106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639969' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.9000974' lon='-1.3791042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254465' timestamp='2007-03-24T13:44:05+00:00' user='Dean Earley' visible='true' lat='50.9000011' lon='-1.3775072' />
-  <node id='30291055' timestamp='2007-06-13T09:33:01+01:00' visible='true' lat='50.966193' lon='-1.3859468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949983' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9951395' lon='-1.3813833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526777' timestamp='2007-05-23T09:49:14+01:00' visible='true' lat='50.9827927' lon='-1.3507669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282077' timestamp='2007-01-17T21:10:06+00:00' user='David Currie' visible='true' lat='50.9761904' lon='-1.4061398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008377' timestamp='2007-05-12T15:11:24+01:00' user='nickw' visible='true' lat='50.9261304' lon='-1.3513732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896423' timestamp='2007-02-13T19:43:29+00:00' user='Dean Earley' visible='true' lat='50.966114' lon='-1.3861976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110904' timestamp='2006-10-27T23:39:31+01:00' user='Dean Earley' visible='true' lat='50.9351489' lon='-1.3668527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816309' timestamp='2007-05-31T21:52:27+01:00' visible='true' lat='50.9912054' lon='-1.3547359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194517' timestamp='2007-04-29T08:33:23+01:00' user='Dean Earley' visible='true' lat='50.9472706' lon='-1.4125667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236150' timestamp='2007-04-29T19:26:04+01:00' user='Andy Street' visible='true' lat='50.9071241' lon='-1.3572301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26782574' timestamp='2007-03-25T19:23:43+01:00' user='Dean Earley' visible='true' lat='50.9073977' lon='-1.3952053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935763' timestamp='2007-05-11T00:50:49+01:00' visible='true' lat='50.9395076' lon='-1.4482706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949923' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9912881' lon='-1.3817409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29860319' timestamp='2007-06-02T11:30:15+01:00' visible='true' lat='50.92044' lon='-1.4434748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237241' timestamp='2007-04-29T19:42:04+01:00' user='Andy Street' visible='true' lat='50.9034934' lon='-1.3547967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239018' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9073842' lon='-1.4175795' />
-  <node id='21689081' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9423485' lon='-1.3899716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028817' timestamp='2006-12-02T23:18:58+00:00' user='Dean Earley' visible='true' lat='50.9364844' lon='-1.3779826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325037' timestamp='2006-11-11T17:24:11+00:00' user='Dean Earley' visible='true' lat='50.9570387' lon='-1.4498839' />
-  <node id='28874063' timestamp='2007-05-08T14:50:34+01:00' visible='true' lat='50.9368313' lon='-1.4405161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266208' timestamp='2007-02-18T20:18:21+00:00' visible='true' lat='50.940665' lon='-1.3773227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051795' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9924154' lon='-1.4762013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689149' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9407681' lon='-1.3769142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089063' timestamp='2007-06-08T18:11:58+01:00' visible='true' lat='50.9654262' lon='-1.3756434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706072' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8966702' lon='-1.3910762' />
-  <node id='20972818' timestamp='2006-11-13T00:07:30+00:00' user='Dean Earley' visible='true' lat='50.900088' lon='-1.3956814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889409' timestamp='2007-09-23T16:33:10+01:00' user='mike l' visible='true' lat='50.9372507' lon='-1.3558588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874080' timestamp='2007-05-08T14:50:39+01:00' visible='true' lat='50.9396975' lon='-1.4389108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243874' timestamp='2007-05-22T00:19:55+01:00' user='Dean Earley' visible='true' lat='50.9378202' lon='-1.4185348' />
-  <node id='90577047' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.901298' lon='-1.4148063' />
-  <node id='24924107' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.941926' lon='-1.373853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518792' timestamp='2007-04-05T14:18:42+01:00' user='Dean Earley' visible='true' lat='50.9224' lon='-1.38256' />
-  <node id='29632471' timestamp='2007-05-26T19:44:06+01:00' visible='true' lat='50.9612325' lon='-1.3687131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91478072' timestamp='2007-10-29T15:11:17+00:00' user='Dean Earley' visible='true' lat='50.8861672' lon='-1.3929318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109271' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true' lat='50.9336034' lon='-1.4245147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957236' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9118549' lon='-1.4230175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903973' timestamp='2007-10-16T11:34:27+01:00' user='Dean Earley' visible='true' lat='50.951406' lon='-1.3620037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924191' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.9436191' lon='-1.3736593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28235744' timestamp='2007-04-29T19:22:27+01:00' user='nickw' visible='true' lat='50.9145937' lon='-1.3425711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153334850' timestamp='2007-12-06T20:46:07+00:00' user='nickw' visible='true' lat='50.943837' lon='-1.4496355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110491' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9282788' lon='-1.434761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345042' timestamp='2007-04-30T23:00:36+01:00' user='nickw' visible='true' lat='50.9273644' lon='-1.3566197'>
-    <tag k='name' v='DYNELEY GR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252927' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9455649' lon='-1.4258181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194405' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9471851' lon='-1.4389517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507740' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.943407' lon='-1.3968851'>
-    <tag k='name' v='HURL GDNS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704520' timestamp='2007-05-28T10:40:38+01:00' visible='true' lat='50.9810658' lon='-1.3565222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194442' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9468837' lon='-1.4349169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721058' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9712389' lon='-1.3603259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45116801' timestamp='2007-09-15T19:10:58+01:00' user='mike l' visible='true' lat='50.9759137' lon='-1.4492796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583061' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9383731' lon='-1.4314534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675865' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.925531' lon='-1.3697481' />
-  <node id='21275647' timestamp='2006-11-25T23:47:32+00:00' user='nickw' visible='true' lat='50.908399' lon='-1.4163323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661171' timestamp='2007-04-05T14:18:44+01:00' user='Dean Earley' visible='true' lat='50.908463' lon='-1.3612832' />
-  <node id='19227238' timestamp='2006-10-23T20:52:57+01:00' user='nickw' visible='true' lat='50.9233055' lon='-1.4106899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124366' timestamp='2007-06-09T19:43:09+01:00' user='nickw' visible='true' lat='50.9244182' lon='-1.3517285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21677590' timestamp='2006-12-22T14:24:02+00:00' user='nickw' visible='true' lat='50.9048709' lon='-1.4033114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298229' timestamp='2007-01-06T14:30:54+00:00' user='Dean Earley' visible='true' lat='51.0201606' lon='-1.3363428' />
-  <node id='29134130' timestamp='2007-05-22T00:19:59+01:00' user='Dean Earley' visible='true' lat='50.9388016' lon='-1.4025504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225808' timestamp='2007-06-11T22:16:48+01:00' visible='true' lat='50.9822535' lon='-1.3549228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243482' timestamp='2007-04-29T20:23:55+01:00' user='Dean Earley' visible='true' lat='50.9394829' lon='-1.4091547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706009' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8900691' lon='-1.3965167' />
-  <node id='18868870' timestamp='2006-10-21T14:41:58+01:00' user='nickw' visible='true' lat='50.9104251' lon='-1.4184567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582917' timestamp='2007-05-02T23:57:41+01:00' visible='true' lat='50.9411424' lon='-1.4290639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014680' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9283225' lon='-1.3685302' />
-  <node id='675852' timestamp='2007-04-05T14:18:46+01:00' user='Dean Earley' visible='true' lat='50.9294551' lon='-1.3577359' />
-  <node id='29026818' timestamp='2007-05-13T10:10:59+01:00' user='nickw' visible='true' lat='50.9206709' lon='-1.4040724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931360' timestamp='2007-06-03T22:43:06+01:00' visible='true' lat='50.9946302' lon='-1.3733134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414284' timestamp='2007-05-01T23:50:07+01:00' user='nickw' visible='true' lat='50.9428176' lon='-1.3724058'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702378' timestamp='2006-04-15T16:30:53+01:00' user='Gagravarr' visible='true' lat='50.9839663' lon='-1.3457613' />
-  <node id='26447511' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9107493' lon='-1.3874728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13565056' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.9353006' lon='-1.3528504'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29796859' timestamp='2007-05-30T22:26:18+01:00' user='nickw' visible='true' lat='50.9172783' lon='-1.361144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90661632' timestamp='2007-10-28T21:46:42+00:00' user='Nick Dyer' visible='true' lat='50.9045722' lon='-1.4098455' />
-  <node id='247803' timestamp='2006-05-25T22:32:17+01:00' user='Dean Earley' visible='true' lat='50.9279823' lon='-1.3912511' />
-  <node id='29816562' timestamp='2007-05-31T22:04:28+01:00' visible='true' lat='50.9913113' lon='-1.3540634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124673' timestamp='2007-06-09T19:48:39+01:00' user='nickw' visible='true' lat='50.9312927' lon='-1.3528212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342533' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9071164' lon='-1.3688611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117414' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9279783' lon='-1.442812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549344' timestamp='2007-12-19T15:30:39+00:00' user='Nick Dyer' visible='true' lat='50.9630209' lon='-1.3665882'>
-    <tag k='amenity' v='college' />
-    <tag k='name' v='Barton Peveril' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856358' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.9474351' lon='-1.3933683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830639' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9282531' lon='-1.3609271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232068' timestamp='2006-10-14T13:19:05+01:00' user='nickw' visible='true' lat='50.9107169' lon='-1.4107749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967602' timestamp='2006-11-12T20:47:02+00:00' user='Dean Earley' visible='true' lat='50.9198138' lon='-1.3924267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431939' timestamp='2007-11-28T12:24:29+00:00' user='Dean Earley' visible='true' lat='50.9838793' lon='-1.3511133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957219' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9172111' lon='-1.4171382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639988' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9011465' lon='-1.3757301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021800' timestamp='2007-04-03T00:52:58+01:00' user='Ben' visible='true' lat='50.9368027' lon='-1.4032974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890091' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9192502' lon='-1.3922925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329527' timestamp='2007-11-10T22:23:12+00:00' user='Dean Earley' visible='true' lat='50.9671' lon='-1.42685' />
-  <node id='15360202' timestamp='2006-10-06T23:29:36+01:00' user='Dean Earley' visible='true' lat='50.9610161' lon='-1.3727193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998354' timestamp='2007-06-05T23:05:25+01:00' user='nickw' visible='true' lat='50.9781154' lon='-1.4267592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282156' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9756112' lon='-1.4089794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705646' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8952282' lon='-1.4079034' />
-  <node id='254954' timestamp='2006-11-11T22:14:27+00:00' user='Dean Earley' visible='true' lat='50.9517' lon='-1.42197' />
-  <node id='160207839' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9232665' lon='-1.3827494' />
-  <node id='20976694' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9366979' lon='-1.4246892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722335' timestamp='2006-10-06T23:46:12+01:00' user='Dean Earley' visible='true' lat='50.9448276' lon='-1.3786597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924344' timestamp='2007-06-03T20:10:37+01:00' visible='true' lat='50.9820949' lon='-1.361129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388881' timestamp='2007-04-05T14:18:48+01:00' user='Dean Earley' visible='true' lat='50.9392125' lon='-1.3958309' />
-  <node id='28230945' timestamp='2007-04-29T18:43:43+01:00' user='nickw' visible='true' lat='50.9117261' lon='-1.3590205'>
-    <tag k='name' v='BRNL GDNS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931375' timestamp='2007-06-03T22:43:08+01:00' visible='true' lat='50.9943352' lon='-1.3725703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727951' timestamp='2007-02-18T21:25:18+00:00' visible='true' lat='50.9126571' lon='-1.399914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169424901' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true' lat='50.9327568' lon='-1.4427105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122319006' timestamp='2007-11-18T19:02:18+00:00' user='nickw' visible='true' lat='50.9136254' lon='-1.4361518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372753' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.929031' lon='-1.4381243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180222' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9609813' lon='-1.4253417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194902' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9421693' lon='-1.4153506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577077' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9118088' lon='-1.4495849' />
-  <node id='14745499' timestamp='2007-01-19T18:27:14+00:00' user='Dean Earley' visible='true' lat='50.9588568' lon='-1.3949739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705600' timestamp='2006-08-23T11:43:43+01:00' user='dmgroom' visible='true' lat='50.8986033' lon='-1.4108923' />
-  <node id='29839185' timestamp='2007-06-01T20:53:33+01:00' visible='true' lat='50.9853403' lon='-1.36491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254414' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9105403' lon='-1.4048725' />
-  <node id='254560' timestamp='2007-01-28T00:07:10+00:00' visible='true' lat='50.9065883' lon='-1.3887401' />
-  <node id='30124653' timestamp='2007-06-09T19:48:36+01:00' user='nickw' visible='true' lat='50.9261227' lon='-1.3480306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706643' timestamp='2007-04-05T14:18:54+01:00' user='Dean Earley' visible='true' lat='50.9162812' lon='-1.3772188' />
-  <node id='28342631' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.91229' lon='-1.3632786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419443' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9413469' lon='-1.3719988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092044' timestamp='2006-11-19T12:29:36+00:00' user='nickw' visible='true' lat='50.9400986' lon='-1.4383833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29163388' timestamp='2007-05-16T20:05:38+01:00' visible='true' lat='50.9263115' lon='-1.3909859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583031' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9391727' lon='-1.4343072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704779' timestamp='2006-08-26T20:03:06+01:00' user='dmgroom' visible='true' lat='50.8897501' lon='-1.4185186' />
-  <node id='20957185' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9174944' lon='-1.4253778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249833' timestamp='2007-04-29T21:41:35+01:00' visible='true' lat='50.9200345' lon='-1.4442208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668304' timestamp='2007-01-04T21:06:39+00:00' user='nickw' visible='true' lat='50.9863519' lon='-1.3919363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931398' timestamp='2007-06-03T22:43:15+01:00' visible='true' lat='50.9952456' lon='-1.3731509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194891' timestamp='2007-04-29T08:58:00+01:00' user='Dean Earley' visible='true' lat='50.9428247' lon='-1.4081554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976675' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9352055' lon='-1.4304082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728167' timestamp='2007-02-18T20:19:00+00:00' visible='true' lat='50.9403803' lon='-1.4068414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154769821' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true' lat='50.9608177' lon='-1.4263282' />
-  <node id='12594960' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.917653' lon='-1.4115869'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30431992' timestamp='2007-06-16T16:26:07+01:00' visible='true' lat='50.9708225' lon='-1.3519905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='447393' timestamp='2007-04-05T14:18:55+01:00' user='Dean Earley' visible='true' lat='50.9276' lon='-1.40449' />
-  <node id='21600586' timestamp='2006-12-16T11:37:37+00:00' user='David Currie' visible='true' lat='50.9847625' lon='-1.3988398'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621221' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9700324' lon='-1.3732994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122344813' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true' lat='50.9191959' lon='-1.4370558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194374' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9444358' lon='-1.4376969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689133' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9397228' lon='-1.3882382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413158' timestamp='2007-04-05T14:18:56+01:00' user='Dean Earley' visible='true' lat='50.9352' lon='-1.3891076' />
-  <node id='18398434' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9615862' lon='-1.3913429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598843' timestamp='2007-03-04T18:58:23+00:00' user='Dean Earley' visible='true' lat='50.9114346' lon='-1.3662149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657800' timestamp='2008-02-03T06:16:22+00:00' user='sladen' visible='true' lat='50.9088247' lon='-1.4075729' />
-  <node id='29632501' timestamp='2007-10-16T11:34:24+01:00' user='Dean Earley' visible='true' lat='50.9612707' lon='-1.3704071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325211' timestamp='2006-11-11T17:24:20+00:00' user='Dean Earley' visible='true' lat='50.9404925' lon='-1.3596603' />
-  <node id='29997512' timestamp='2007-06-05T22:43:52+01:00' user='nickw' visible='true' lat='51.0094136' lon='-1.3612385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971181' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9053869' lon='-1.3990798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348705' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9809059' lon='-1.4182405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263974' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9652379' lon='-1.3707417' />
-  <node id='15028843' timestamp='2006-09-08T23:06:50+01:00' user='Dean Earley' visible='true' lat='50.9273143' lon='-1.3620549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091391' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.9910984' lon='-1.446201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115435' timestamp='2007-10-29T08:07:20+00:00' user='nickw' visible='true' lat='50.9269014' lon='-1.4427921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160291503' timestamp='2007-12-10T19:57:14+00:00' user='sladen' visible='true' lat='50.9147768' lon='-1.4854372' />
-  <node id='113962277' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9565505' lon='-1.3625126' />
-  <node id='28372738' timestamp='2007-05-01T10:05:16+01:00' visible='true' lat='50.9286245' lon='-1.4404341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141378' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9257952' lon='-1.4249109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549393' timestamp='2007-05-24T11:22:53+01:00' visible='true' lat='50.9632013' lon='-1.3770717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464259' timestamp='2007-05-22T00:19:14+01:00' user='Dean Earley' visible='true' lat='50.9378337' lon='-1.4066307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984697' timestamp='2007-01-10T00:11:06+00:00' user='nickw' visible='true' lat='50.9453604' lon='-1.3846653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243660' timestamp='2007-04-29T20:25:10+01:00' user='Dean Earley' visible='true' lat='50.9390052' lon='-1.4127562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670265' timestamp='2007-05-27T10:45:21+01:00' visible='true' lat='50.9680739' lon='-1.3536058'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Litterm Tree' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346857' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9153544' lon='-1.3668065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932478' timestamp='2007-05-10T21:06:14+01:00' user='Dean Earley' visible='true' lat='50.9631977' lon='-1.4525716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706688' timestamp='2007-04-05T14:18:57+01:00' user='Dean Earley' visible='true' lat='50.901067' lon='-1.3835483' />
-  <node id='29008408' timestamp='2007-05-12T15:11:59+01:00' user='nickw' visible='true' lat='50.9258924' lon='-1.3469031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728540' timestamp='2007-03-23T22:52:49+00:00' user='nickw' visible='true' lat='50.9008478' lon='-1.366732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930467' timestamp='2007-06-03T22:22:08+01:00' visible='true' lat='50.9943454' lon='-1.3523291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402748' timestamp='2007-04-05T14:18:57+01:00' user='Dean Earley' visible='true' lat='50.9143' lon='-1.40977' />
-  <node id='325678' timestamp='2007-04-05T14:18:58+01:00' user='Dean Earley' visible='true' lat='50.9224325' lon='-1.4198656' />
-  <node id='14745514' timestamp='2006-09-03T01:40:49+01:00' user='Dean Earley' visible='true' lat='50.9609147' lon='-1.3913196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342563' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9081061' lon='-1.3647487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935729' timestamp='2007-05-11T00:47:47+01:00' visible='true' lat='50.9390063' lon='-1.4459149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956600' timestamp='2007-06-26T23:45:00+01:00' user='nickw' visible='true' lat='50.9288765' lon='-1.3497359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471871' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9378375' lon='-1.3689569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254860' timestamp='2007-02-18T21:30:26+00:00' visible='true' lat='50.9196633' lon='-1.4627651' />
-  <node id='13071313' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.9203236' lon='-1.3595403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342618' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9095592' lon='-1.3683247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962264' timestamp='2007-11-14T14:56:38+00:00' user='Nick Dyer' visible='true' lat='50.9554043' lon='-1.3642292'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Eastleigh Parkway Station' />
-  </node>
-  <node id='20107334' timestamp='2007-06-12T00:14:50+01:00' user='nickw' visible='true' lat='50.9334083' lon='-1.3503377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18393858' timestamp='2007-09-25T14:05:30+01:00' visible='true' lat='50.9143714' lon='-1.4052188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431973' timestamp='2007-06-16T16:26:02+01:00' visible='true' lat='50.9851538' lon='-1.3515221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162090' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9706518' lon='-1.3813878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925390' timestamp='2007-06-03T20:40:36+01:00' visible='true' lat='50.9806261' lon='-1.3630101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028892' timestamp='2006-09-08T23:06:54+01:00' user='Dean Earley' visible='true' lat='50.9353398' lon='-1.3497279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814525' timestamp='2007-05-31T21:17:05+01:00' visible='true' lat='50.9873223' lon='-1.3561563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127615' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.9366794' lon='-1.4350379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162419' timestamp='2008-01-04T19:28:06+00:00' user='nickw' visible='true' lat='50.9717715' lon='-1.3827487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24950000' timestamp='2007-01-07T12:38:57+00:00' user='nickw' visible='true' lat='50.9817443' lon='-1.387664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008945' timestamp='2007-05-12T15:26:04+01:00' user='nickw' visible='true' lat='50.9305256' lon='-1.3497044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461220' timestamp='2007-05-21T23:43:13+01:00' user='nickw' visible='true' lat='50.9068512' lon='-1.3975299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935718' timestamp='2007-05-11T00:47:41+01:00' visible='true' lat='50.9405439' lon='-1.4403978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160414192' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9107502' lon='-1.430203' />
-  <node id='14727998' timestamp='2007-02-11T00:33:25+00:00' visible='true' lat='50.9173632' lon='-1.4029971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14765932' timestamp='2007-02-13T19:24:19+00:00' user='Dean Earley' visible='true' lat='50.9532702' lon='-1.4036029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964036' timestamp='2006-11-12T00:52:15+00:00' user='nickw' visible='true' lat='51.0062407' lon='-1.4344958'>
-    <tag k='name' v='LWR FM LA' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924077' timestamp='2007-01-06T14:28:56+00:00' user='nickw' visible='true' lat='50.9305017' lon='-1.3845413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183741' timestamp='2007-04-29T02:25:39+01:00' user='Dean Earley' visible='true' lat='50.9481562' lon='-1.4073668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179528' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9565626' lon='-1.3996266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254543' timestamp='2006-09-08T23:08:02+01:00' user='Dean Earley' visible='true' lat='50.9338223' lon='-1.374277' />
-  <node id='28830622' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9288417' lon='-1.3599934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744410' timestamp='2007-04-03T00:54:08+01:00' user='Ben' visible='true' lat='50.9382647' lon='-1.3938873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949940' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9951645' lon='-1.3848401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29569784' timestamp='2007-12-06T19:26:16+00:00' user='Dean Earley' visible='true' lat='50.9811525' lon='-1.4443374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704596' timestamp='2007-05-28T10:44:49+01:00' visible='true' lat='50.9765712' lon='-1.355297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962307' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9583346' lon='-1.3673878' />
-  <node id='30255642' timestamp='2007-06-12T20:07:39+01:00' visible='true' lat='50.97994' lon='-1.349509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160253077' timestamp='2007-12-10T19:30:25+00:00' user='sladen' visible='true' lat='50.9495267' lon='-1.36318' />
-  <node id='29874677' timestamp='2007-06-02T19:57:57+01:00' visible='true' lat='50.9609909' lon='-1.3592394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160232029' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9080932' lon='-1.3923024' />
-  <node id='20133127' timestamp='2006-10-28T01:55:39+01:00' user='Dean Earley' visible='true' lat='50.9280626' lon='-1.3546195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700388' timestamp='2007-04-05T14:19:01+01:00' user='Dean Earley' visible='true' lat='50.9249214' lon='-1.3909577' />
-  <node id='160263985' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9646973' lon='-1.3708876' />
-  <node id='28173892' timestamp='2007-04-29T01:03:02+01:00' visible='true' lat='50.9421101' lon='-1.4326575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392593' timestamp='2007-05-20T18:06:39+01:00' visible='true' lat='50.9685957' lon='-1.3534445'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243584' timestamp='2007-04-29T20:24:52+01:00' user='Dean Earley' visible='true' lat='50.9372078' lon='-1.411041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997568' timestamp='2007-06-05T22:44:02+01:00' user='nickw' visible='true' lat='51.0009628' lon='-1.3550401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927555' timestamp='2007-06-03T21:24:28+01:00' visible='true' lat='50.9814949' lon='-1.3692073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254970' timestamp='2006-09-02T13:46:23+01:00' user='Dean Earley' visible='true' lat='50.9436887' lon='-1.4141002' />
-  <node id='28849616' timestamp='2007-05-07T23:11:34+01:00' user='nickw' visible='true' lat='50.9188725' lon='-1.4098354'>
-    <tag k='name' v='CH KNOTT G' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071434' timestamp='2006-08-11T02:48:16+01:00' user='Dean Earley' visible='true' lat='50.9209972' lon='-1.3543343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711862' timestamp='2007-05-28T14:55:45+01:00' visible='true' lat='50.985001' lon='-1.3515128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90588898' timestamp='2007-10-28T20:31:45+00:00' user='Nick Dyer' visible='true' lat='50.9059042' lon='-1.4309939' />
-  <node id='700491' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.9296047' lon='-1.3721856' />
-  <node id='91117324' timestamp='2007-10-29T08:09:29+00:00' user='nickw' visible='true' lat='50.9327051' lon='-1.4441331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45116818' timestamp='2007-11-28T12:24:00+00:00' user='Dean Earley' visible='true' lat='50.9751123' lon='-1.449679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275698' timestamp='2007-11-18T19:11:26+00:00' user='nickw' visible='true' lat='50.9217105' lon='-1.435767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419460' timestamp='2006-12-02T23:18:53+00:00' user='Dean Earley' visible='true' lat='50.9408063' lon='-1.3707603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949885' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9923885' lon='-1.3780854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341797' timestamp='2007-04-30T21:49:02+01:00' user='nickw' visible='true' lat='50.9109497' lon='-1.361133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971151' timestamp='2008-02-03T06:10:35+00:00' user='sladen' visible='true' lat='50.9068709' lon='-1.4039509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668338' timestamp='2007-01-04T21:06:43+00:00' user='nickw' visible='true' lat='50.9898098' lon='-1.4090117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675794' timestamp='2007-02-06T01:03:07+00:00' user='Dean Earley' visible='true' lat='50.9108233' lon='-1.4453772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998572' timestamp='2007-06-05T23:13:53+01:00' user='nickw' visible='true' lat='50.9607505' lon='-1.4424142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661172' timestamp='2007-04-05T14:19:03+01:00' user='Dean Earley' visible='true' lat='50.9092403' lon='-1.3583457' />
-  <node id='29764422' timestamp='2007-05-29T22:14:31+01:00' user='Jodi Crisp' visible='true' lat='50.9217879' lon='-1.3639889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650799' timestamp='2007-04-05T14:19:08+01:00' user='Dean Earley' visible='true' lat='50.9162621' lon='-1.4000756' />
-  <node id='388915' timestamp='2007-04-05T14:19:11+01:00' user='Dean Earley' visible='true' lat='50.9462852' lon='-1.4033854' />
-  <node id='28194359' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9435809' lon='-1.4372541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239962' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.9075628' lon='-1.4147814' />
-  <node id='14964137' timestamp='2006-09-08T02:12:01+01:00' user='Dean Earley' visible='true' lat='50.9170766' lon='-1.3814025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577064' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9114354' lon='-1.4345216' />
-  <node id='14806969' timestamp='2007-04-20T23:53:16+01:00' user='Dean Earley' visible='true' lat='50.9114236' lon='-1.3881696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201640650' timestamp='2008-01-01T18:33:11+00:00' user='Milliams' visible='true' lat='50.9509092' lon='-1.3621731' />
-  <node id='596428' timestamp='2006-09-13T00:41:54+01:00' user='Dean Earley' visible='true' lat='50.8996894' lon='-1.3280784' />
-  <node id='254464' timestamp='2006-12-16T00:49:39+00:00' user='Dean Earley' visible='true' lat='50.8988918' lon='-1.3780525' />
-  <node id='20134838' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9281873' lon='-1.3540134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282126' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9771609' lon='-1.4060525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431954' timestamp='2007-06-16T16:25:12+01:00' visible='true' lat='50.9790864' lon='-1.3565909'>
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Shakespear Junior School' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956634' timestamp='2007-06-26T23:45:06+01:00' user='nickw' visible='true' lat='50.932683' lon='-1.3525669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728570' timestamp='2007-03-23T22:53:06+00:00' user='nickw' visible='true' lat='50.9004969' lon='-1.372851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935744' timestamp='2007-05-11T00:50:39+01:00' visible='true' lat='50.9401011' lon='-1.446207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504296' timestamp='2007-05-28T12:47:29+01:00' visible='true' lat='51.0013937' lon='-1.3405063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721077' timestamp='2007-06-16T16:26:48+01:00' visible='true' lat='50.9709135' lon='-1.3517984'>
-    <tag k='junction' v='traffic_signals' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='330489' timestamp='2007-01-25T22:42:41+00:00' user='Dean Earley' visible='true' lat='50.9214097' lon='-1.4048258' />
-  <node id='14601335' timestamp='2006-09-01T00:16:06+01:00' user='nickw' visible='true' lat='50.8910322' lon='-1.5257478'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21636822' timestamp='2007-04-29T02:33:37+01:00' user='Dean Earley' visible='true' lat='50.9510377' lon='-1.4129608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290745' timestamp='2007-06-13T09:24:00+01:00' visible='true' lat='50.965328' lon='-1.3820729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482481' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8975807' lon='-1.4292878' />
-  <node id='29795100' timestamp='2007-05-30T21:48:10+01:00' user='nickw' visible='true' lat='50.917726' lon='-1.3567385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021717' timestamp='2007-04-03T00:50:50+01:00' user='Dean Earley' visible='true' lat='50.9192448' lon='-1.449233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254843' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9075896' lon='-1.4248558' />
-  <node id='29008376' timestamp='2007-05-12T15:11:24+01:00' user='nickw' visible='true' lat='50.9263057' lon='-1.3511944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87241285' timestamp='2007-10-25T21:07:27+01:00' user='Nick Dyer' visible='true' lat='50.9324533' lon='-1.4462959' />
-  <node id='29392339' timestamp='2007-05-20T17:52:20+01:00' visible='true' lat='50.9621306' lon='-1.3573617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145262' timestamp='2007-05-16T00:59:02+01:00' visible='true' lat='50.9229682' lon='-1.381238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254498' timestamp='2007-09-20T19:44:50+01:00' user='mike l' visible='true' lat='50.9410757' lon='-1.3757199' />
-  <node id='30223552' timestamp='2007-06-11T21:57:52+01:00' visible='true' lat='50.9843685' lon='-1.3538489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563357' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9296126' lon='-1.4004458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624971' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.9044169' lon='-1.3729007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998067' timestamp='2007-06-05T23:00:21+01:00' user='nickw' visible='true' lat='50.9881462' lon='-1.4074685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962324' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9557665' lon='-1.3632421' />
-  <node id='13071327' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9185217' lon='-1.363255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111042' timestamp='2006-10-22T23:24:05+01:00' user='Ben' visible='true' lat='50.9747043' lon='-1.3858506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222230' timestamp='2007-12-10T19:57:14+00:00' user='sladen' visible='true' lat='50.9141436' lon='-1.4874113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689064' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.92662' lon='-1.3993189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419429' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9434138' lon='-1.3647187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721024' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9622255' lon='-1.3705025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147522' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9093389' lon='-1.4024832' />
-  <node id='21746393' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.9984211' lon='-1.3353559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91228882' timestamp='2007-10-29T10:34:26+00:00' user='DrMark' visible='true' lat='50.9775626' lon='-1.437187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708029' timestamp='2007-05-28T12:04:05+01:00' visible='true' lat='50.9821538' lon='-1.3656929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398754' timestamp='2006-10-17T23:14:31+01:00' user='nickw' visible='true' lat='50.9511143' lon='-1.417953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249908' timestamp='2007-04-29T21:41:46+01:00' visible='true' lat='50.9144576' lon='-1.4503384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705520' timestamp='2007-06-11T21:58:24+01:00' visible='true' lat='50.9835414' lon='-1.3531243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348315' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.92596' lon='-1.3573918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890106' timestamp='2006-10-27T00:48:06+01:00' user='Dean Earley' visible='true' lat='50.9128511' lon='-1.3882983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282141' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9756859' lon='-1.409346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903807' timestamp='2007-05-26T14:54:12+01:00' user='LivingWithDragons' visible='true' lat='50.98096' lon='-1.4434825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325652' timestamp='2007-04-05T14:19:15+01:00' user='Dean Earley' visible='true' lat='50.9205' lon='-1.42112' />
-  <node id='27523497' timestamp='2007-04-22T01:26:28+01:00' visible='true' lat='50.9727145' lon='-1.3730793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549359' timestamp='2007-05-24T11:22:48+01:00' visible='true' lat='50.9703145' lon='-1.3722808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091849' timestamp='2007-12-10T21:01:29+00:00' user='sladen' visible='true' lat='50.909998' lon='-1.4273534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976788' timestamp='2006-11-21T23:12:54+00:00' user='nickw' visible='true' lat='50.9279393' lon='-1.4214527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931335' timestamp='2007-06-03T22:43:01+01:00' visible='true' lat='50.9949762' lon='-1.3726632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347754' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9293284' lon='-1.3611467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956721' timestamp='2007-06-26T23:49:22+01:00' user='nickw' visible='true' lat='50.9277339' lon='-1.3492542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325173' timestamp='2005-12-16T22:55:18+00:00' user='80n' visible='true' lat='50.9484769' lon='-1.39425' />
-  <node id='30223094' timestamp='2007-06-11T21:51:54+01:00' visible='true' lat='50.9846901' lon='-1.3561629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000960' timestamp='2007-05-12T09:31:57+01:00' user='nickw' visible='true' lat='50.9186115' lon='-1.4085805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544338' timestamp='2007-04-05T14:19:16+01:00' user='Dean Earley' visible='true' lat='50.9391083' lon='-1.3723101' />
-  <node id='14726180' timestamp='2007-01-28T00:07:09+00:00' visible='true' lat='50.9083367' lon='-1.3986637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147653' timestamp='2008-02-03T06:03:10+00:00' user='sladen' visible='true' lat='50.9095012' lon='-1.4065' />
-  <node id='13706247' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9119672' lon='-1.3777131'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='325188' timestamp='2006-11-11T17:24:31+00:00' user='Dean Earley' visible='true' lat='50.949983' lon='-1.3727242' />
-  <node id='29929861' timestamp='2007-06-03T22:13:29+01:00' visible='true' lat='50.9773444' lon='-1.3678827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636807' timestamp='2007-04-29T02:33:42+01:00' user='Dean Earley' visible='true' lat='50.95222' lon='-1.4116169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325085' timestamp='2006-11-11T17:24:31+00:00' user='Dean Earley' visible='true' lat='50.9298508' lon='-1.5696731' />
-  <node id='25440789' timestamp='2007-01-25T23:00:43+00:00' user='Dean Earley' visible='true' lat='50.9179059' lon='-1.3774048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745426' timestamp='2007-01-19T18:15:25+00:00' user='Dean Earley' visible='true' lat='50.9571687' lon='-1.3575211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601320' timestamp='2006-09-01T00:20:05+01:00' user='nickw' visible='true' lat='50.8613162' lon='-1.5066519'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='153334859' timestamp='2007-12-06T20:46:07+00:00' user='nickw' visible='true' lat='50.943499' lon='-1.4504003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561537' timestamp='2007-06-01T16:17:40+01:00' user='Dean Earley' visible='true' lat='50.9253332' lon='-1.4371943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229582' timestamp='2007-06-12T00:14:41+01:00' user='nickw' visible='true' lat='50.9332351' lon='-1.3535764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661152' timestamp='2007-04-05T14:19:16+01:00' user='Dean Earley' visible='true' lat='50.9145724' lon='-1.3509394' />
-  <node id='29929165' timestamp='2007-06-03T22:00:33+01:00' visible='true' lat='50.9767617' lon='-1.362982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194857' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9440813' lon='-1.406969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706662' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.907874' lon='-1.377458'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='24668042' timestamp='2007-01-04T21:05:30+00:00' user='nickw' visible='true' lat='50.9863019' lon='-1.3927905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91238655' timestamp='2007-10-29T10:34:25+00:00' user='DrMark' visible='true' lat='50.9776163' lon='-1.4369977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127581' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9352115' lon='-1.4390212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949906' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9949894' lon='-1.3801913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468550' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9131097' lon='-1.4447256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727964' timestamp='2007-02-11T00:33:25+00:00' visible='true' lat='50.9185217' lon='-1.4035162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348698' timestamp='2006-10-16T21:59:52+01:00' user='nickw' visible='true' lat='50.9776065' lon='-1.4089162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815420' timestamp='2007-05-31T21:34:34+01:00' visible='true' lat='50.987425' lon='-1.3535579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133590' timestamp='2007-05-15T20:41:28+01:00' user='nickw' visible='true' lat='50.934404' lon='-1.3729898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972797' timestamp='2006-11-13T00:07:22+00:00' user='Dean Earley' visible='true' lat='50.89857' lon='-1.3896639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141429' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.924311' lon='-1.4217817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639909' timestamp='2007-02-04T22:51:16+00:00' user='Dean Earley' visible='true' lat='50.904364' lon='-1.3818201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91126053' timestamp='2007-10-29T08:17:57+00:00' user='nickw' visible='true' lat='50.9297172' lon='-1.4463011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153322101' timestamp='2007-12-06T20:39:09+00:00' user='nickw' visible='true' lat='50.9333172' lon='-1.4474505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976777' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9301825' lon='-1.4184462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071344' timestamp='2006-08-11T02:48:09+01:00' user='Dean Earley' visible='true' lat='50.9169406' lon='-1.3650215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254380' timestamp='2005-11-15T15:39:31+00:00' user='nickw' visible='true' lat='50.9119014' lon='-1.4061204' />
-  <node id='29928595' timestamp='2007-06-03T21:52:05+01:00' visible='true' lat='50.9786881' lon='-1.3614091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469863' timestamp='2007-04-05T14:19:17+01:00' user='Dean Earley' visible='true' lat='50.9125' lon='-1.42342' />
-  <node id='90665702' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9003231' lon='-1.4149954' />
-  <node id='30225261' timestamp='2007-06-11T22:10:27+01:00' visible='true' lat='50.982211' lon='-1.3557779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310847' timestamp='2007-02-18T21:25:30+00:00' visible='true' lat='50.9166527' lon='-1.3983536' />
-  <node id='90588900' timestamp='2007-10-28T20:31:45+00:00' user='Nick Dyer' visible='true' lat='50.9036688' lon='-1.4256124' />
-  <node id='28903414' timestamp='2007-05-09T23:36:04+01:00' visible='true' lat='50.9458031' lon='-1.3625182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675694' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.901587' lon='-1.444653' />
-  <node id='30290726' timestamp='2007-06-13T09:23:56+01:00' visible='true' lat='50.9699919' lon='-1.3819946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584208' timestamp='2007-05-03T00:08:17+01:00' visible='true' lat='50.9417759' lon='-1.4328803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579415' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.978463' lon='-1.4043985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743150' timestamp='2007-04-03T00:51:35+01:00' user='Dean Earley' visible='true' lat='50.9238419' lon='-1.4353519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530519' timestamp='2007-04-05T14:19:17+01:00' user='Dean Earley' visible='true' lat='50.9495193' lon='-1.3720051' />
-  <node id='24924206' timestamp='2007-12-10T19:33:02+00:00' user='sladen' visible='true' lat='50.9551446' lon='-1.3617381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689103' timestamp='2007-02-01T22:22:03+00:00' user='Dean Earley' visible='true' lat='50.9410336' lon='-1.3800096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773393' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9197331' lon='-1.4625612' />
-  <node id='518781' timestamp='2007-04-05T14:19:17+01:00' user='Dean Earley' visible='true' lat='50.9194023' lon='-1.3916964' />
-  <node id='29794374' timestamp='2007-05-30T21:37:18+01:00' user='nickw' visible='true' lat='50.921117' lon='-1.3630661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781146' timestamp='2007-03-25T18:42:05+01:00' user='Dean Earley' visible='true' lat='50.9032198' lon='-1.3750732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660389' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.9030295' lon='-1.4095966' />
-  <node id='25762126' timestamp='2007-02-10T22:56:22+00:00' user='nickw' visible='true' lat='50.9359897' lon='-1.3707219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932467' timestamp='2007-05-10T21:06:11+01:00' user='Dean Earley' visible='true' lat='50.9644341' lon='-1.4740416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115450' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9279908' lon='-1.4434775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583018' timestamp='2007-05-02T23:57:54+01:00' visible='true' lat='50.9380717' lon='-1.4327081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026779' timestamp='2007-05-13T10:10:55+01:00' user='nickw' visible='true' lat='50.9212345' lon='-1.4091186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347767' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.932609' lon='-1.3634512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303007' timestamp='2007-01-19T18:15:19+00:00' user='Dean Earley' visible='true' lat='50.9505512' lon='-1.364774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194506' timestamp='2007-04-29T08:31:52+01:00' user='Dean Earley' visible='true' lat='50.9474491' lon='-1.4122787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29002297' timestamp='2007-05-12T09:57:59+01:00' user='nickw' visible='true' lat='50.9369167' lon='-1.3650898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30511434' timestamp='2007-06-17T22:30:29+01:00' visible='true' lat='50.9740655' lon='-1.3597408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632182' timestamp='2007-05-26T19:20:32+01:00' visible='true' lat='50.9568732' lon='-1.3691057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='430651' timestamp='2007-04-05T14:19:18+01:00' user='Dean Earley' visible='true' lat='50.9095' lon='-1.41084' />
-  <node id='27021753' timestamp='2007-04-03T00:52:39+01:00' user='Ben' visible='true' lat='50.94435' lon='-1.4030913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216407' timestamp='2006-07-09T22:24:18+01:00' user='Dean Earley' visible='true' lat='50.9209199' lon='-1.3562998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125580533' timestamp='2007-12-07T13:24:50+00:00' user='Nick Dyer' visible='true' lat='50.9626666' lon='-1.4252295' />
-  <node id='16963773' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9427953' lon='-1.4098717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160378618' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9210533' lon='-1.4659858' />
-  <node id='59322761' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.913846' lon='-1.456744' />
-  <node id='13071370' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9165583' lon='-1.3682097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096940' timestamp='2007-06-08T23:24:12+01:00' visible='true' lat='50.9647622' lon='-1.3779305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971196' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.905905' lon='-1.400181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107349' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9290623' lon='-1.3531455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984777' timestamp='2007-01-10T00:14:55+00:00' user='nickw' visible='true' lat='50.9414173' lon='-1.3899796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816841' timestamp='2007-05-31T22:17:19+01:00' visible='true' lat='50.9862519' lon='-1.3650213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998363' timestamp='2007-06-05T23:05:26+01:00' user='nickw' visible='true' lat='50.9731493' lon='-1.4242758'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122315321' timestamp='2007-11-18T19:00:11+00:00' user='nickw' visible='true' lat='50.9130398' lon='-1.427634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249878' timestamp='2007-04-29T21:41:42+01:00' visible='true' lat='50.920238' lon='-1.4390563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161365' timestamp='2007-06-10T18:25:29+01:00' visible='true' lat='50.9738473' lon='-1.3631306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435859' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.9362155' lon='-1.4327474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306293' timestamp='2005-12-11T21:46:56+00:00' user='nickw' visible='true' lat='50.9224462' lon='-1.4025593' />
-  <node id='29135243' timestamp='2007-05-15T20:56:00+01:00' user='nickw' visible='true' lat='50.9441553' lon='-1.383212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342550' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9069786' lon='-1.3672718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342601' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.905801' lon='-1.3696558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348736' timestamp='2006-10-16T21:59:56+01:00' user='nickw' visible='true' lat='50.9984606' lon='-1.4519693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134156' timestamp='2007-05-15T20:47:35+01:00' user='nickw' visible='true' lat='50.9409726' lon='-1.3898724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162105' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true' lat='50.9734103' lon='-1.3777919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303933' timestamp='2007-05-22T00:20:05+01:00' user='Dean Earley' visible='true' lat='50.9341315' lon='-1.4153944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816399' timestamp='2007-05-31T21:56:27+01:00' visible='true' lat='50.9887133' lon='-1.3551122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773931' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9221246' lon='-1.47117' />
-  <node id='29632210' timestamp='2007-05-26T19:21:11+01:00' visible='true' lat='50.9566964' lon='-1.3664852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561805' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true' lat='50.9216266' lon='-1.4408747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464255' timestamp='2007-05-22T00:19:13+01:00' user='Dean Earley' visible='true' lat='50.9366365' lon='-1.4088806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179511' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9532106' lon='-1.4025752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000930' timestamp='2007-05-12T09:30:25+01:00' user='nickw' visible='true' lat='50.9196291' lon='-1.4106814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591407' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9152938' lon='-1.4540137' />
-  <node id='41141832' timestamp='2007-09-04T18:28:01+01:00' visible='true' lat='50.9248231' lon='-1.3907892' />
-  <node id='13071207' timestamp='2006-09-08T23:08:02+01:00' user='Dean Earley' visible='true' lat='50.9257102' lon='-1.3637153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973118' timestamp='2006-11-13T00:42:44+00:00' user='Dean Earley' visible='true' lat='50.905121' lon='-1.4125578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689180' timestamp='2006-12-23T10:22:27+00:00' user='nickw' visible='true' lat='50.9383488' lon='-1.3710767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26782593' timestamp='2007-03-25T19:24:26+01:00' user='Dean Earley' visible='true' lat='50.9001781' lon='-1.3946508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573785' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true' lat='50.9964702' lon='-1.4062917' />
-  <node id='254877' timestamp='2007-02-18T21:30:29+00:00' visible='true' lat='50.9128966' lon='-1.4917769' />
-  <node id='91119005' timestamp='2007-10-29T08:11:20+00:00' user='nickw' visible='true' lat='50.9293244' lon='-1.4459211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254766' timestamp='2007-02-18T20:18:24+00:00' visible='true' lat='50.9154657' lon='-1.3645392' />
-  <node id='24668140' timestamp='2007-12-06T22:09:54+00:00' user='Dean Earley' visible='true' lat='50.9817872' lon='-1.412218'>
-    <tag k='bridge' v='yes' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398370' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.9594344' lon='-1.4326925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035797' timestamp='2007-09-05T17:47:15+01:00' user='mike l' visible='true' lat='50.9360149' lon='-1.3961389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418540' timestamp='2007-05-02T17:07:47+01:00' visible='true' lat='50.9614588' lon='-1.3707771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468567' timestamp='2007-05-22T01:06:59+01:00' user='Dean Earley' visible='true' lat='50.9151284' lon='-1.4533972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243678' timestamp='2007-04-29T20:25:13+01:00' user='Dean Earley' visible='true' lat='50.939077' lon='-1.4140134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464277' timestamp='2007-05-22T00:19:18+01:00' user='Dean Earley' visible='true' lat='50.9380386' lon='-1.4035262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26001633' timestamp='2007-02-18T20:20:24+00:00' visible='true' lat='50.9282676' lon='-1.3886363' />
-  <node id='122337281' timestamp='2007-11-18T19:12:33+00:00' user='nickw' visible='true' lat='50.9186166' lon='-1.4390474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001465' timestamp='2007-05-12T09:49:21+01:00' user='nickw' visible='true' lat='50.941774' lon='-1.3519876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34098117' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9253687' lon='-1.3723659' />
-  <node id='28194876' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9422861' lon='-1.4088023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447410' timestamp='2007-03-09T20:54:23+00:00' user='nickw' visible='true' lat='50.8998718' lon='-1.393552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601302' timestamp='2006-09-01T00:16:02+01:00' user='nickw' visible='true' lat='50.8264875' lon='-1.5526772'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29815649' timestamp='2007-05-31T21:47:59+01:00' visible='true' lat='50.9915165' lon='-1.3548017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021738' timestamp='2007-04-03T00:52:29+01:00' user='Ben' visible='true' lat='50.9344488' lon='-1.3826251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111563' timestamp='2007-10-29T08:00:08+00:00' user='nickw' visible='true' lat='50.9270829' lon='-1.4375225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160213508' timestamp='2007-12-10T19:09:23+00:00' user='sladen' visible='true' lat='50.922785' lon='-1.3872641' />
-  <node id='21613482' timestamp='2006-12-16T17:46:59+00:00' user='David Currie' visible='true' lat='50.9702219' lon='-1.392435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254937' timestamp='2005-11-15T15:43:25+00:00' user='nickw' visible='true' lat='50.9390072' lon='-1.4221444' />
-  <node id='325070' timestamp='2006-11-11T17:24:32+00:00' user='Dean Earley' visible='true' lat='50.943171' lon='-1.5444978' />
-  <node id='254295' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9784973' lon='-1.3422036' />
-  <node id='28250029' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9171809' lon='-1.4485695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290775' timestamp='2007-10-29T15:43:33+00:00' user='Dean Earley' visible='true' lat='50.9665664' lon='-1.3857043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026670' timestamp='2007-05-13T10:02:49+01:00' user='nickw' visible='true' lat='50.9276087' lon='-1.3996819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388896' timestamp='2007-05-15T20:47:45+01:00' user='nickw' visible='true' lat='50.9441125' lon='-1.3924404' />
-  <node id='24924338' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9755002' lon='-1.3985077'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130912' timestamp='2006-10-28T01:45:29+01:00' user='Dean Earley' visible='true' lat='50.9335172' lon='-1.3613699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200361' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.9422024' lon='-1.4466786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564833' timestamp='2006-10-27T22:49:34+01:00' user='Dean Earley' visible='true' lat='50.9333868' lon='-1.3558159'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28343214' timestamp='2008-02-03T05:55:38+00:00' user='sladen' visible='true' lat='50.9117093' lon='-1.4031355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608170' timestamp='2007-04-05T14:19:18+01:00' user='Dean Earley' visible='true' lat='50.8975204' lon='-1.3649423' />
-  <node id='21636728' timestamp='2007-04-29T02:33:50+01:00' user='Dean Earley' visible='true' lat='50.9513215' lon='-1.4130021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398423' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9679697' lon='-1.4019582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964047' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='51.0030876' lon='-1.435882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388866' timestamp='2007-04-05T14:19:18+01:00' user='Dean Earley' visible='true' lat='50.9312' lon='-1.40067' />
-  <node id='24949889' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9934389' lon='-1.3763769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596808' timestamp='2007-04-20T23:53:18+01:00' user='Dean Earley' visible='true' lat='50.913275' lon='-1.387192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325226' timestamp='2006-11-11T17:24:32+00:00' user='Dean Earley' visible='true' lat='50.9354799' lon='-1.3437095' />
-  <node id='657769' timestamp='2007-04-05T14:19:18+01:00' user='Dean Earley' visible='true' lat='50.904449' lon='-1.3717985' />
-  <node id='27512881' timestamp='2007-04-21T21:50:10+01:00' user='Dean Earley' visible='true' lat='50.9653381' lon='-1.3510594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66583518' timestamp='2007-10-12T14:00:11+01:00' user='SteveC' visible='true' lat='50.9321742' lon='-1.449165' />
-  <node id='28231042' timestamp='2007-04-30T21:49:15+01:00' user='nickw' visible='true' lat='50.9113276' lon='-1.360731'>
-    <tag k='name' v='EDWINA CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947164' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9126666' lon='-1.3944467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29709217' timestamp='2007-05-28T12:41:52+01:00' visible='true' lat='50.9951874' lon='-1.3512026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142620760' timestamp='2007-11-29T22:31:12+00:00' user='nickw' visible='true' lat='50.9169256' lon='-1.4141643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632437' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true' lat='50.9550339' lon='-1.3698443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957202' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9202979' lon='-1.4209013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252980' timestamp='2007-04-29T22:00:42+01:00' visible='true' lat='50.942548' lon='-1.4278139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743123' timestamp='2007-04-03T00:51:36+01:00' user='Dean Earley' visible='true' lat='50.915452' lon='-1.4246399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001310' timestamp='2007-05-12T09:40:12+01:00' user='nickw' visible='true' lat='50.9256793' lon='-1.3821114'>
-    <tag k='name' v='PRIORY CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595172' timestamp='2007-05-25T21:54:24+01:00' visible='true' lat='50.9692634' lon='-1.3505907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956686' timestamp='2007-06-26T23:49:18+01:00' user='nickw' visible='true' lat='50.929775' lon='-1.3484396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125579931' timestamp='2007-12-07T13:31:11+00:00' user='Nick Dyer' visible='true' lat='50.9633261' lon='-1.4257188'>
-    <tag k='tourism' v='hotel' />
-    <tag k='name' v='Chilworth Manor' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='206163282' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.9712773' lon='-1.3896524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223079' timestamp='2007-06-11T21:51:50+01:00' visible='true' lat='50.9845544' lon='-1.3546193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998554' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.9645042' lon='-1.4250109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008391' timestamp='2007-05-12T15:11:57+01:00' user='nickw' visible='true' lat='50.9261304' lon='-1.3503004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636762' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9476471' lon='-1.4014805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387814' timestamp='2007-04-05T14:19:19+01:00' user='Dean Earley' visible='true' lat='50.9281' lon='-1.39029' />
-  <node id='20967591' timestamp='2006-11-12T20:46:55+00:00' user='Dean Earley' visible='true' lat='50.9203547' lon='-1.3894611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743135' timestamp='2007-10-17T01:27:50+01:00' user='Dean Earley' visible='true' lat='50.92654' lon='-1.4409507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924221' timestamp='2007-01-06T14:38:00+00:00' user='nickw' visible='true' lat='50.95993' lon='-1.3635918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801150' timestamp='2007-09-15T18:41:56+01:00' user='mike l' visible='true' lat='50.9550059' lon='-1.4525389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92683064' timestamp='2007-10-31T12:24:57+00:00' user='Dean Earley' visible='true' lat='50.9619439' lon='-1.4259177' />
-  <node id='12889433' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9518408' lon='-1.3622596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963777' timestamp='2007-04-29T08:58:15+01:00' user='Dean Earley' visible='true' lat='50.9444741' lon='-1.411078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925205' timestamp='2007-06-03T20:30:02+01:00' visible='true' lat='50.9793007' lon='-1.3632923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952623' timestamp='2007-02-11T00:33:15+00:00' visible='true' lat='50.9295106' lon='-1.3809344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467495' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.9318538' lon='-1.3793733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976705' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.935341' lon='-1.4237507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87819784' timestamp='2007-10-26T12:15:04+01:00' user='Nick Dyer' visible='true' lat='50.9080785' lon='-1.4412572' />
-  <node id='33718256' timestamp='2007-08-08T01:32:12+01:00' visible='true' lat='50.9363157' lon='-1.4438548' />
-  <node id='29703877' timestamp='2007-05-28T10:12:59+01:00' visible='true' lat='50.9872647' lon='-1.3523819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250059' timestamp='2007-04-29T21:42:21+01:00' visible='true' lat='50.9157447' lon='-1.4500243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582989' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.9374812' lon='-1.4217354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548678' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.9634696' lon='-1.3636491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600676' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true' lat='50.976653' lon='-1.4059626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20136215' timestamp='2007-05-30T21:56:42+01:00' user='nickw' visible='true' lat='50.9180118' lon='-1.3551574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740477' timestamp='2007-06-17T21:28:40+01:00' visible='true' lat='50.9887708' lon='-1.3458821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419442' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9410543' lon='-1.3705612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582052' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9307299' lon='-1.4510791' />
-  <node id='29466108' timestamp='2007-05-22T00:38:10+01:00' user='Dean Earley' visible='true' lat='50.9821867' lon='-1.4459577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25305498' timestamp='2007-01-19T20:35:53+00:00' user='Dean Earley' visible='true' lat='50.9205524' lon='-1.3691882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661186' timestamp='2007-04-05T14:19:19+01:00' user='Dean Earley' visible='true' lat='50.9138051' lon='-1.3635309' />
-  <node id='28231139' timestamp='2007-04-29T18:46:17+01:00' user='nickw' visible='true' lat='50.9103854' lon='-1.3657919'>
-    <tag k='name' v='FREEM CMN' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561571' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9273746' lon='-1.4313983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179464' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9620878' lon='-1.4116861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635140' timestamp='2007-04-05T14:19:20+01:00' user='Dean Earley' visible='true' lat='50.912588' lon='-1.3643144' />
-  <node id='122316854' timestamp='2007-11-18T19:01:09+00:00' user='nickw' visible='true' lat='50.9129396' lon='-1.4368919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640048' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9053687' lon='-1.3753032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173840' timestamp='2007-04-29T01:01:31+01:00' visible='true' lat='50.9425898' lon='-1.4331127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435838' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9354643' lon='-1.4329957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000941' timestamp='2007-05-12T09:30:26+01:00' user='nickw' visible='true' lat='50.919554' lon='-1.408496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229459' timestamp='2007-06-12T00:08:03+01:00' user='nickw' visible='true' lat='50.9345497' lon='-1.3530598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724245' timestamp='2006-10-07T00:25:16+01:00' user='nickw' visible='true' lat='50.911689' lon='-1.4112773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949838' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.991088' lon='-1.3751054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212575' timestamp='2007-12-08T20:16:59+00:00' user='nickw' visible='true' lat='50.9444963' lon='-1.4469021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956615' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9279437' lon='-1.3500935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179502' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9593702' lon='-1.399949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581798' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.921365' lon='-1.4458941' />
-  <node id='325241' timestamp='2006-11-11T17:24:33+00:00' user='Dean Earley' visible='true' lat='50.9337852' lon='-1.3266735' />
-  <node id='2742647' timestamp='2006-10-06T23:46:20+01:00' user='Dean Earley' visible='true' lat='50.9436733' lon='-1.3863974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331748' timestamp='2007-12-06T20:44:24+00:00' user='nickw' visible='true' lat='50.9397404' lon='-1.4403527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636939' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9170068' lon='-1.4297378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341776' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.9110875' lon='-1.3594244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705531' timestamp='2007-05-28T11:19:20+01:00' visible='true' lat='50.985527' lon='-1.3525478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635129' timestamp='2006-03-17T18:23:58+00:00' user='nickw' visible='true' lat='50.9011367' lon='-1.3554529' />
-  <node id='160411096' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true' lat='50.91193' lon='-1.4271045' />
-  <node id='21178435' timestamp='2006-11-22T18:12:44+00:00' user='southglos' visible='true' lat='50.9963067' lon='-1.3559756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141603' timestamp='2007-09-05T17:46:35+01:00' user='mike l' visible='true' lat='50.9356255' lon='-1.3954052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949970' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9882618' lon='-1.385754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254299' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9821964' lon='-1.3475226' />
-  <node id='27513797' timestamp='2007-04-28T17:57:55+01:00' visible='true' lat='50.9650963' lon='-1.3580594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17769062' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9072002' lon='-1.3947228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423315' timestamp='2006-06-03T23:38:11+01:00' user='Dean Earley' visible='true' lat='50.924' lon='-1.40589'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Cowherds' />
-  </node>
-  <node id='28236137' timestamp='2007-04-29T19:25:57+01:00' user='Andy Street' visible='true' lat='50.907649' lon='-1.3542948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632165' timestamp='2007-05-26T19:20:08+01:00' visible='true' lat='50.9563593' lon='-1.3675537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561809' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9240812' lon='-1.4399012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141493' timestamp='2006-11-21T23:19:59+00:00' user='nickw' visible='true' lat='50.9295038' lon='-1.4353215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984712' timestamp='2007-01-10T00:11:56+00:00' user='nickw' visible='true' lat='50.9444592' lon='-1.3813277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089135' timestamp='2007-06-08T18:12:09+01:00' visible='true' lat='50.9640757' lon='-1.3787895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325079' timestamp='2006-11-11T17:24:39+00:00' user='Dean Earley' visible='true' lat='50.9285045' lon='-1.5739895' />
-  <node id='29998128' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.988959' lon='-1.4031773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009223' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.929696' lon='-1.3543283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613403' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.985952' lon='-1.4299867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091840' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9086216' lon='-1.4223333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229552' timestamp='2007-06-12T00:14:34+01:00' user='nickw' visible='true' lat='50.9337046' lon='-1.3528016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141408' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9277002' lon='-1.4227305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231078' timestamp='2007-04-29T19:27:57+01:00' user='Andy Street' visible='true' lat='50.9108998' lon='-1.3531764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114391' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9032165' lon='-1.3921736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636758' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9455361' lon='-1.3913422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595104' timestamp='2006-08-04T12:01:15+01:00' user='nickw' visible='true' lat='50.9183405' lon='-1.4139775'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='10222206' timestamp='2007-04-03T00:51:45+01:00' user='Dean Earley' visible='true' lat='50.917766' lon='-1.4559751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984727' timestamp='2007-01-10T00:12:09+00:00' user='nickw' visible='true' lat='50.9432512' lon='-1.3907942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956706' timestamp='2007-06-26T23:49:20+01:00' user='nickw' visible='true' lat='50.9293993' lon='-1.3479231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325255' timestamp='2006-11-11T17:24:40+00:00' user='Dean Earley' visible='true' lat='50.9213359' lon='-1.3156839' />
-  <node id='29815668' timestamp='2007-05-31T21:48:05+01:00' visible='true' lat='50.9899584' lon='-1.3532197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508354' timestamp='2007-06-17T22:14:18+01:00' visible='true' lat='50.9762197' lon='-1.3543938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621236' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9482992' lon='-1.3696087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298265' timestamp='2006-09-02T12:59:35+01:00' user='Dean Earley' visible='true' lat='50.9607925' lon='-1.393096' />
-  <node id='254417' timestamp='2006-08-11T02:50:51+01:00' user='Dean Earley' visible='true' lat='50.9200044' lon='-1.3701701' />
-  <node id='29632424' timestamp='2007-05-26T19:26:44+01:00' visible='true' lat='50.9567526' lon='-1.3680019'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173857' timestamp='2007-04-29T01:02:41+01:00' visible='true' lat='50.9425468' lon='-1.4316673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480488' timestamp='2007-01-27T23:14:27+00:00' visible='true' lat='50.9106758' lon='-1.3906772'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='48967860' timestamp='2007-09-11T00:17:28+01:00' visible='true' lat='50.9043966' lon='-1.4148699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947175' timestamp='2007-02-16T20:51:23+00:00' user='nickw' visible='true' lat='50.9111317' lon='-1.3939449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001344' timestamp='2007-05-12T09:41:45+01:00' user='nickw' visible='true' lat='50.9250135' lon='-1.3820396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956687' timestamp='2007-06-26T23:49:18+01:00' user='nickw' visible='true' lat='50.930063' lon='-1.3483403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675811' timestamp='2007-05-22T01:08:01+01:00' user='Dean Earley' visible='true' lat='50.9039025' lon='-1.4174092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33130187' timestamp='2007-07-30T16:05:12+01:00' visible='true' lat='50.9153996' lon='-1.4076111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596785' timestamp='2007-04-20T23:53:19+01:00' user='Dean Earley' visible='true' lat='50.9162216' lon='-1.3673416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548713' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.9669218' lon='-1.3661152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29706910' timestamp='2007-05-28T11:38:41+01:00' visible='true' lat='50.9782546' lon='-1.3519961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924058' timestamp='2007-01-06T14:28:45+00:00' user='Dean Earley' visible='true' lat='50.9959061' lon='-1.3584043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997525' timestamp='2007-06-05T22:43:54+01:00' user='nickw' visible='true' lat='51.0097136' lon='-1.357742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122340932' timestamp='2007-11-18T19:14:39+00:00' user='nickw' visible='true' lat='50.9197971' lon='-1.4401153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92720591' timestamp='2007-10-30T18:01:30+00:00' user='Nick Dyer' visible='true' lat='50.9034813' lon='-1.4172091' />
-  <node id='122352464' timestamp='2007-12-10T21:00:07+00:00' user='sladen' visible='true' lat='50.9105987' lon='-1.4244609'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242715' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.925665' lon='-1.4151367' />
-  <node id='518811' timestamp='2007-04-05T14:19:21+01:00' user='Dean Earley' visible='true' lat='50.9327' lon='-1.38767' />
-  <node id='90659210' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9041283' lon='-1.4065496' />
-  <node id='21613489' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9930302' lon='-1.3986104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232089' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9148201' lon='-1.4109362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874139' timestamp='2007-06-02T19:43:15+01:00' visible='true' lat='50.9597124' lon='-1.3616992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163072' timestamp='2008-01-04T19:32:05+00:00' user='nickw' visible='true' lat='50.9725909' lon='-1.3859969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890072' timestamp='2006-10-27T00:48:03+01:00' user='Dean Earley' visible='true' lat='50.9207772' lon='-1.3908941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160211054' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9159564' lon='-1.3912295' />
-  <node id='29511444' timestamp='2007-05-22T21:54:34+01:00' visible='true' lat='50.9729334' lon='-1.3678228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099522' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9515519' lon='-1.3680075' />
-  <node id='27021781' timestamp='2007-04-03T00:52:48+01:00' user='Ben' visible='true' lat='50.9552416' lon='-1.4000681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91113450' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.9271033' lon='-1.4417268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704341' timestamp='2007-05-28T10:33:00+01:00' visible='true' lat='50.9823071' lon='-1.3607377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275818' timestamp='2007-11-18T19:19:52+00:00' user='nickw' visible='true' lat='50.9171767' lon='-1.4369689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249858' timestamp='2007-04-29T21:41:40+01:00' visible='true' lat='50.9186208' lon='-1.4410688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871070' timestamp='2007-06-02T18:20:21+01:00' visible='true' lat='50.9347726' lon='-1.4364992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254736' timestamp='2005-11-15T15:42:24+00:00' user='nickw' visible='true' lat='50.9828029' lon='-1.3830045' />
-  <node id='25639999' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9094189' lon='-1.3724205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160419630' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.906821' lon='-1.4167018' />
-  <node id='20831108' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9112584' lon='-1.4080022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563293' timestamp='2007-04-23T22:47:35+01:00' visible='true' lat='50.929628' lon='-1.3976411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575742' timestamp='2007-12-10T19:17:32+00:00' user='sladen' visible='true' lat='50.9018687' lon='-1.3957528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29733427' timestamp='2007-12-06T19:26:17+00:00' user='Dean Earley' visible='true' lat='50.981198' lon='-1.4444922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301593' timestamp='2005-12-08T22:43:50+00:00' user='nickw' visible='true' lat='50.927918' lon='-1.4044476' />
-  <node id='28236120' timestamp='2007-04-29T19:25:41+01:00' user='Andy Street' visible='true' lat='50.9074171' lon='-1.3553587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418259' timestamp='2007-05-02T00:31:36+01:00' visible='true' lat='50.9678398' lon='-1.3634697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380426' timestamp='2007-05-20T10:19:27+01:00' user='nickw' visible='true' lat='50.9440134' lon='-1.3777006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730492' timestamp='2007-05-28T19:36:25+01:00' visible='true' lat='50.9726243' lon='-1.3667668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998085' timestamp='2007-06-05T23:00:24+01:00' user='nickw' visible='true' lat='50.9890903' lon='-1.4058891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096975' timestamp='2007-06-08T23:24:17+01:00' visible='true' lat='50.9623361' lon='-1.3767671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384696' timestamp='2007-06-02T19:55:01+01:00' visible='true' lat='50.9690238' lon='-1.3610581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147533' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9102102' lon='-1.403968' />
-  <node id='13071417' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9242323' lon='-1.3549651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874056' timestamp='2007-05-08T14:50:32+01:00' visible='true' lat='50.9374341' lon='-1.4413956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613388' timestamp='2006-12-16T17:46:40+00:00' user='David Currie' visible='true' lat='50.9755048' lon='-1.4042598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180201' timestamp='2007-04-29T02:05:34+01:00' user='Dean Earley' visible='true' lat='50.9636289' lon='-1.4218859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830677' timestamp='2007-05-05T09:03:34+01:00' user='nickw' visible='true' lat='50.9238045' lon='-1.3619155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229567' timestamp='2007-06-12T00:14:38+01:00' user='nickw' visible='true' lat='50.9334605' lon='-1.354371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331357' timestamp='2007-05-22T00:20:06+01:00' user='Dean Earley' visible='true' lat='50.9428761' lon='-1.403566' />
-  <node id='14707270' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.966257' lon='-1.3274362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544321' timestamp='2007-04-05T14:19:21+01:00' user='Dean Earley' visible='true' lat='50.9262' lon='-1.3921777' />
-  <node id='30223092' timestamp='2007-06-11T21:51:53+01:00' visible='true' lat='50.9843331' lon='-1.3554952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141391' timestamp='2007-01-19T18:58:06+00:00' user='Dean Earley' visible='true' lat='50.9237981' lon='-1.4188973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419255' timestamp='2006-12-02T22:59:19+00:00' user='Dean Earley' visible='true' lat='50.9376756' lon='-1.3622026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179468' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9632627' lon='-1.4087461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650906' timestamp='2007-01-25T22:42:41+00:00' user='Dean Earley' visible='true' lat='50.9309' lon='-1.39962' />
-  <node id='26728553' timestamp='2007-03-23T22:52:58+00:00' user='nickw' visible='true' lat='50.89967' lon='-1.3690167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950451' timestamp='2007-09-10T23:28:31+01:00' visible='true' lat='50.9128106' lon='-1.3953433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125574208' timestamp='2007-11-20T11:52:26+00:00' user='Nick Dyer' visible='true' lat='50.9605299' lon='-1.4228635' />
-  <node id='33718204' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.9356504' lon='-1.4453998' />
-  <node id='25783128' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9436566' lon='-1.3479342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548712' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.9667839' lon='-1.3660825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561558' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9225909' lon='-1.4314181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250089' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9162705' lon='-1.4513143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963743' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9337363' lon='-1.4082449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467478' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.9285817' lon='-1.3796255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229457' timestamp='2007-06-12T00:08:02+01:00' user='nickw' visible='true' lat='50.934412' lon='-1.3524638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710906' timestamp='2007-05-28T14:29:56+01:00' visible='true' lat='50.9845955' lon='-1.3570847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342768' timestamp='2007-04-30T22:17:35+01:00' user='nickw' visible='true' lat='50.905563' lon='-1.3657222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222334' timestamp='2007-12-08T20:24:12+00:00' user='nickw' visible='true' lat='50.9465116' lon='-1.4467147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134816' timestamp='2007-05-15T20:53:13+01:00' user='nickw' visible='true' lat='50.9445684' lon='-1.3871059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243708' timestamp='2007-04-29T20:25:20+01:00' user='Dean Earley' visible='true' lat='50.93923' lon='-1.4096142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252897' timestamp='2007-04-29T22:00:34+01:00' visible='true' lat='50.9466197' lon='-1.4313413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422984' timestamp='2007-05-22T00:20:06+01:00' user='Dean Earley' visible='true' lat='50.9421971' lon='-1.4054654' />
-  <node id='14743161' timestamp='2006-09-03T00:38:40+01:00' user='Dean Earley' visible='true' lat='50.920089' lon='-1.4330278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340619' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9645061' lon='-1.381309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595103' timestamp='2007-05-25T21:54:12+01:00' visible='true' lat='50.969324' lon='-1.3533663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194384' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.945506' lon='-1.4394868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='126067695' timestamp='2007-11-20T16:53:21+00:00' user='Nick Dyer' visible='true' lat='50.9043569' lon='-1.4085684' />
-  <node id='14727985' timestamp='2007-01-28T00:55:34+00:00' visible='true' lat='50.9370111' lon='-1.3803594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598851' timestamp='2007-02-04T22:51:52+00:00' user='Dean Earley' visible='true' lat='50.8981963' lon='-1.3810586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130892' timestamp='2006-10-28T01:45:25+01:00' user='Dean Earley' visible='true' lat='50.9331109' lon='-1.3619974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111716' timestamp='2007-10-29T08:01:16+00:00' user='nickw' visible='true' lat='50.926856' lon='-1.438707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600428' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9218203' lon='-1.4438677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392369' timestamp='2007-05-20T17:53:09+01:00' visible='true' lat='50.9604817' lon='-1.3556244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949851' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9932138' lon='-1.3712115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997534' timestamp='2007-06-05T22:43:56+01:00' user='nickw' visible='true' lat='51.0044133' lon='-1.3536097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110753' timestamp='2006-10-27T23:38:39+01:00' user='Dean Earley' visible='true' lat='50.934983' lon='-1.3628258'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728558' timestamp='2007-03-23T22:53:01+00:00' user='nickw' visible='true' lat='50.8998579' lon='-1.3703875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930928' timestamp='2007-06-03T22:32:33+01:00' visible='true' lat='50.9998866' lon='-1.3525422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909669' timestamp='2007-06-03T14:54:19+01:00' visible='true' lat='50.9682743' lon='-1.3535803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008451' timestamp='2007-05-12T15:12:16+01:00' user='nickw' visible='true' lat='50.929783' lon='-1.3499208'>
-    <tag k='name' v='OLD IVY LA' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816433' timestamp='2007-05-31T22:00:53+01:00' visible='true' lat='50.990673' lon='-1.3549755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507795' timestamp='2007-05-22T00:20:06+01:00' user='Dean Earley' visible='true' lat='50.9477459' lon='-1.4046287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781180' timestamp='2007-03-25T18:42:15+01:00' user='Dean Earley' visible='true' lat='50.9003088' lon='-1.3738346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549347' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.9655236' lon='-1.3701677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008395' timestamp='2007-05-12T15:11:57+01:00' user='nickw' visible='true' lat='50.9261053' lon='-1.349903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957864' timestamp='2007-05-10T21:08:06+01:00' user='Dean Earley' visible='true' lat='50.9606805' lon='-1.4522195'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='245147281' timestamp='2008-02-03T06:02:10+00:00' user='sladen' visible='true' lat='50.9092144' lon='-1.4042169' />
-  <node id='28243465' timestamp='2007-04-29T20:23:52+01:00' user='Dean Earley' visible='true' lat='50.9398203' lon='-1.4088378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089034' timestamp='2007-06-08T18:11:55+01:00' visible='true' lat='50.9655375' lon='-1.3737536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319636' timestamp='2005-12-14T22:03:22+00:00' user='nickw' visible='true' lat='50.9212661' lon='-1.3946414' />
-  <node id='29728920' timestamp='2007-05-28T19:12:47+01:00' visible='true' lat='50.9721535' lon='-1.358957'>
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303946' timestamp='2007-01-19T18:57:44+00:00' user='Dean Earley' visible='true' lat='50.9198449' lon='-1.3964426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976807' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9261755' lon='-1.4213666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180243' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9612195' lon='-1.4231238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254312' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.993802' lon='-1.3402344' />
-  <node id='20976671' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9385966' lon='-1.4259357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504826' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9552068' lon='-1.4038269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928999' timestamp='2007-06-03T21:58:00+01:00' visible='true' lat='50.975446' lon='-1.3622004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636747' timestamp='2006-12-18T21:21:43+00:00' user='nickw' visible='true' lat='50.943487' lon='-1.3963408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244246' timestamp='2007-04-29T20:36:29+01:00' user='Andy Street' visible='true' lat='50.9034248' lon='-1.3507383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762376' timestamp='2007-05-29T21:02:22+01:00' visible='true' lat='50.9900068' lon='-1.370642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249896' timestamp='2007-04-29T21:41:44+01:00' visible='true' lat='50.9138707' lon='-1.4470081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324350' timestamp='2005-12-16T00:19:02+00:00' user='nickw' visible='true' lat='50.9132194' lon='-1.4037395' />
-  <node id='91124444' timestamp='2007-10-29T08:16:32+00:00' user='nickw' visible='true' lat='50.9312397' lon='-1.4465414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236103' timestamp='2007-04-29T19:25:34+01:00' user='Andy Street' visible='true' lat='50.9088851' lon='-1.3544748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091860' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9080366' lon='-1.4235428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227257' timestamp='2007-06-02T11:56:17+01:00' visible='true' lat='50.939593' lon='-1.4091585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238993' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9015093' lon='-1.4116112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91528338' timestamp='2007-10-29T16:21:46+00:00' user='Nick Dyer' visible='true' lat='50.9101659' lon='-1.4402794' />
-  <node id='254329' timestamp='2005-11-15T15:39:02+00:00' user='nickw' visible='true' lat='50.9673968' lon='-1.3915121' />
-  <node id='125577124' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9651843' lon='-1.4204345' />
-  <node id='28194424' timestamp='2007-04-29T08:20:31+01:00' visible='true' lat='50.9476464' lon='-1.4357656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87825991' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.9003601' lon='-1.4382961' />
-  <node id='21689161' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9396915' lon='-1.3731991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816750' timestamp='2007-05-31T22:13:35+01:00' visible='true' lat='50.9901422' lon='-1.3558517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160278849' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9117517' lon='-1.4479121' />
-  <node id='254684' timestamp='2006-10-06T23:29:32+01:00' user='Dean Earley' visible='true' lat='50.9710421' lon='-1.3509995' />
-  <node id='59937121' timestamp='2007-09-26T22:06:45+01:00' visible='true' lat='50.8175475' lon='-1.5720775'>
-    <tag k='railway' v='level_crossing' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914413' timestamp='2007-06-03T16:22:50+01:00' visible='true' lat='50.9847394' lon='-1.3625449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636792' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9505171' lon='-1.4108205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537328' timestamp='2006-10-27T22:49:34+01:00' user='Dean Earley' visible='true' lat='50.9270136' lon='-1.3527542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781165' timestamp='2007-03-25T18:42:13+01:00' user='Dean Earley' visible='true' lat='50.9032911' lon='-1.3665626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963730' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9311542' lon='-1.4160629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783078' timestamp='2007-02-11T18:07:11+00:00' user='nickw' visible='true' lat='50.939801' lon='-1.3595364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505721' timestamp='2007-05-22T19:28:28+01:00' visible='true' lat='50.988373' lon='-1.3519257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290748' timestamp='2007-06-13T09:24:02+01:00' visible='true' lat='50.9655236' lon='-1.381232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319645' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9215665' lon='-1.4007139' />
-  <node id='30956732' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.9270953' lon='-1.3517772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464296' timestamp='2007-05-22T00:19:22+01:00' user='Dean Earley' visible='true' lat='50.9601897' lon='-1.4040938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583055' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9401014' lon='-1.4320869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973239' timestamp='2007-08-14T04:48:37+01:00' user='andrewpmk' visible='true' lat='50.9075888' lon='-1.3984618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339126' timestamp='2007-04-30T20:39:19+01:00' visible='true' lat='50.9681571' lon='-1.3619022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615423' timestamp='2006-12-16T21:52:53+00:00' user='nickw' visible='true' lat='50.9004349' lon='-1.404915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388934' timestamp='2007-04-05T14:19:22+01:00' user='Dean Earley' visible='true' lat='50.9429' lon='-1.397' />
-  <node id='157219704' timestamp='2007-12-08T20:21:42+00:00' user='nickw' visible='true' lat='50.9448953' lon='-1.4442772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419425' timestamp='2006-12-02T23:18:50+00:00' user='Dean Earley' visible='true' lat='50.9404932' lon='-1.3654938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29765429' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.9986686' lon='-1.3516989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972778' timestamp='2007-02-06T00:16:41+00:00' user='Dean Earley' visible='true' lat='50.9008634' lon='-1.4095697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246351' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.9315797' lon='-1.4312619'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689120' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.940574' lon='-1.3813047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419640' timestamp='2007-04-03T00:51:58+01:00' user='Dean Earley' visible='true' lat='50.9173294' lon='-1.427009' />
-  <node id='18347835' timestamp='2007-02-18T20:19:13+00:00' visible='true' lat='50.9308596' lon='-1.4130315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668072' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9854508' lon='-1.3852834'>
-    <tag k='name' v='SUTHER WAY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722339' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.9472387' lon='-1.3767374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29631644' timestamp='2007-05-26T18:26:52+01:00' visible='true' lat='50.9695642' lon='-1.3504859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26593140' timestamp='2007-03-17T20:47:44+00:00' user='nickw' visible='true' lat='50.8996688' lon='-1.363938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440016' timestamp='2007-04-18T02:00:23+01:00' visible='true' lat='50.9279135' lon='-1.3857523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706035' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8889916' lon='-1.3934611' />
-  <node id='244310977' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9690519' lon='-1.4308435' />
-  <node id='28582968' timestamp='2007-05-02T23:57:49+01:00' visible='true' lat='50.9381557' lon='-1.4230002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659222' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9040634' lon='-1.4047815' />
-  <node id='29491404' timestamp='2007-05-22T12:23:40+01:00' visible='true' lat='50.9234954' lon='-1.3951558'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Gordon Arms' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474849' timestamp='2007-04-05T14:19:22+01:00' user='Dean Earley' visible='true' lat='50.9375342' lon='-1.3613758' />
-  <node id='26945398' timestamp='2007-04-08T17:43:57+01:00' user='avantman42' visible='true' lat='50.9033516' lon='-1.3439947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707709' timestamp='2007-05-28T11:58:08+01:00' visible='true' lat='50.9866902' lon='-1.3615332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949868' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9961148' lon='-1.3746286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392356' timestamp='2007-05-20T17:52:54+01:00' visible='true' lat='50.9647018' lon='-1.3581507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423292' timestamp='2007-09-25T18:47:49+01:00' user='mike l' visible='true' lat='50.9400477' lon='-1.3887474' />
-  <node id='28179437' timestamp='2007-04-29T01:53:15+01:00' user='Dean Earley' visible='true' lat='50.96324' lon='-1.4188908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157205681' timestamp='2007-12-08T20:12:20+00:00' user='nickw' visible='true' lat='50.9429817' lon='-1.4480644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92685108' timestamp='2007-10-31T12:25:04+00:00' user='Dean Earley' visible='true' lat='50.9614318' lon='-1.4237093' />
-  <node id='20972833' timestamp='2006-11-13T00:07:35+00:00' user='Dean Earley' visible='true' lat='50.9022349' lon='-1.3965583'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141425' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9321328' lon='-1.4258694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001299' timestamp='2007-10-29T15:11:19+00:00' user='Dean Earley' visible='true' lat='50.9217178' lon='-1.3832116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091845' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9090888' lon='-1.4200463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964838' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='50.9970613' lon='-1.4441888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252912' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9456141' lon='-1.4291794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710867' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9868586' lon='-1.3535309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162255' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9734353' lon='-1.3872783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414280' timestamp='2007-05-01T23:50:04+01:00' user='nickw' visible='true' lat='50.9400886' lon='-1.3758229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='307470' timestamp='2005-12-12T00:24:04+00:00' user='nickw' visible='true' lat='50.924871' lon='-1.4035463' />
-  <node id='160408127' timestamp='2007-12-10T20:59:12+00:00' user='sladen' visible='true' lat='50.9109396' lon='-1.4307952' />
-  <node id='28339153' timestamp='2007-04-30T20:39:31+01:00' visible='true' lat='50.9681016' lon='-1.3612148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561524' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9204462' lon='-1.4293572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305218' timestamp='2006-11-22T18:19:06+00:00' user='southglos' visible='true' lat='50.995168' lon='-1.3574291' />
-  <node id='90623400' timestamp='2007-10-28T21:04:53+00:00' user='Nick Dyer' visible='true' lat='50.9101032' lon='-1.4000809' />
-  <node id='21275630' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.9207765' lon='-1.4267922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924092' timestamp='2007-09-20T19:44:50+01:00' user='mike l' visible='true' lat='50.939107' lon='-1.3757285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021815' timestamp='2007-04-03T00:53:05+01:00' user='Ben' visible='true' lat='50.9335457' lon='-1.40145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530519' timestamp='2007-05-23T13:01:39+01:00' visible='true' lat='50.9877026' lon='-1.3530844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26593138' timestamp='2007-03-17T20:47:44+00:00' user='nickw' visible='true' lat='50.9028011' lon='-1.3623884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783113' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9482128' lon='-1.3498812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724264' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.9266079' lon='-1.4145946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21637743' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9334752' lon='-1.3831122'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25640030' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9168009' lon='-1.370672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179485' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.953424' lon='-1.404104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398453' timestamp='2006-10-17T23:09:40+01:00' user='nickw' visible='true' lat='50.9239304' lon='-1.4041817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124209' timestamp='2007-06-09T19:35:53+01:00' user='nickw' visible='true' lat='50.9236198' lon='-1.3473429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254282' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9705011' lon='-1.3404221' />
-  <node id='30507161' timestamp='2007-06-17T22:07:51+01:00' visible='true' lat='50.9766247' lon='-1.3591975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157223787' timestamp='2007-12-08T20:24:11+00:00' user='nickw' visible='true' lat='50.9458732' lon='-1.4466253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071400' timestamp='2006-08-11T02:48:13+01:00' user='Dean Earley' visible='true' lat='50.9232372' lon='-1.3598579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462160' timestamp='2007-05-21T23:53:39+01:00' user='nickw' visible='true' lat='50.9010536' lon='-1.3987418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170450' timestamp='2006-11-11T17:24:41+00:00' user='Dean Earley' visible='true' lat='50.9479978' lon='-1.3878668' />
-  <node id='20961049' timestamp='2006-11-11T17:12:38+00:00' user='Dean Earley' visible='true' lat='50.9467487' lon='-1.365151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984757' timestamp='2007-04-29T02:33:54+01:00' user='Dean Earley' visible='true' lat='50.9468165' lon='-1.4066712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816416' timestamp='2007-05-31T21:58:45+01:00' visible='true' lat='50.9894982' lon='-1.3560405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998111' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.9863578' lon='-1.3949525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360184' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9509392' lon='-1.3708013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21599031' timestamp='2006-12-16T01:07:07+00:00' user='Dean Earley' visible='true' lat='50.9344404' lon='-1.3544092'>
-    <tag k='highway' v='gate' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704907' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.90004' lon='-1.451702'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='24949953' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9956896' lon='-1.38635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816575' timestamp='2007-05-31T22:04:31+01:00' visible='true' lat='50.9911786' lon='-1.3547852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447520' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9088017' lon='-1.3870039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815561' timestamp='2007-05-31T21:42:57+01:00' visible='true' lat='50.9894647' lon='-1.3589393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885350' timestamp='2006-08-23T01:17:09+01:00' user='dmgroom' visible='true' lat='50.9018219' lon='-1.3994286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216426' timestamp='2007-03-04T19:43:33+00:00' user='Dean Earley' visible='true' lat='50.9229873' lon='-1.3443274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009028' timestamp='2007-05-12T15:28:42+01:00' user='nickw' visible='true' lat='50.9304911' lon='-1.3504047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259894' timestamp='2007-04-29T23:09:26+01:00' user='Andy Street' visible='true' lat='50.9031183' lon='-1.3473668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998071' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9845944' lon='-1.4133094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976720' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9345898' lon='-1.4218633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071301' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.921208' lon='-1.3580482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998102' timestamp='2007-06-05T23:00:26+01:00' user='nickw' visible='true' lat='50.984857' lon='-1.3981311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728890' timestamp='2007-05-28T19:12:40+01:00' visible='true' lat='50.9705965' lon='-1.3616089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305609' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9907246' lon='-1.3962722' />
-  <node id='20965514' timestamp='2007-09-07T16:44:35+01:00' user='mike l' visible='true' lat='50.9727608' lon='-1.4454708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507774' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9416411' lon='-1.3941225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325270' timestamp='2006-11-11T17:24:45+00:00' user='Dean Earley' visible='true' lat='50.9176981' lon='-1.3174492' />
-  <node id='29925630' timestamp='2007-06-03T20:45:00+01:00' visible='true' lat='50.9813337' lon='-1.3637861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222338' timestamp='2007-12-08T20:23:18+00:00' user='nickw' visible='true' lat='50.9468433' lon='-1.4469531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964147' timestamp='2007-02-18T21:30:38+00:00' visible='true' lat='50.916806' lon='-1.376282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636232' timestamp='2006-12-18T20:45:48+00:00' visible='true' lat='50.9283684' lon='-1.388427'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21496775' timestamp='2006-12-08T01:33:58+00:00' user='Dean Earley' visible='true' lat='50.9955053' lon='-1.3573282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25482178' timestamp='2007-01-28T00:56:06+00:00' visible='true' lat='50.9207621' lon='-1.3880938'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Junction Inn' />
-  </node>
-  <node id='29704535' timestamp='2007-05-28T10:40:40+01:00' visible='true' lat='50.9793114' lon='-1.3589058'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252931' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9461215' lon='-1.4270451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348132' timestamp='2007-04-30T23:45:32+01:00' user='nickw' visible='true' lat='50.9341481' lon='-1.3671854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971219' timestamp='2007-05-20T00:10:59+01:00' user='Dean Earley' visible='true' lat='50.9066009' lon='-1.4146368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142612647' timestamp='2007-11-29T22:26:19+00:00' user='nickw' visible='true' lat='50.9116758' lon='-1.4148572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003236' timestamp='2007-05-22T00:20:07+01:00' user='Dean Earley' visible='true' lat='50.940492' lon='-1.404118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254434' timestamp='2007-01-28T00:55:34+00:00' visible='true' lat='50.9366121' lon='-1.380451' />
-  <node id='21420710' timestamp='2006-12-02T23:56:33+00:00' user='Dean Earley' visible='true' lat='50.9301136' lon='-1.3966562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973103' timestamp='2006-11-13T00:42:42+00:00' user='Dean Earley' visible='true' lat='50.9054851' lon='-1.4095717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926151' timestamp='2007-06-03T20:55:50+01:00' visible='true' lat='50.9801176' lon='-1.3642601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463031' timestamp='2008-02-03T06:02:10+00:00' user='sladen' visible='true' lat='50.9086948' lon='-1.403556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636777' timestamp='2007-04-29T02:33:37+01:00' user='Dean Earley' visible='true' lat='50.9488429' lon='-1.4074186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814534' timestamp='2007-05-31T21:17:07+01:00' visible='true' lat='50.987909' lon='-1.3561123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331340' timestamp='2007-12-06T22:09:56+00:00' user='Dean Earley' visible='true' lat='51.0062' lon='-1.37348' />
-  <node id='29708010' timestamp='2007-05-28T12:03:58+01:00' visible='true' lat='50.9866548' lon='-1.3616313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135438' timestamp='2007-05-15T20:57:26+01:00' user='nickw' visible='true' lat='50.94393' lon='-1.3824372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510068' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.9007328' lon='-1.4148141' />
-  <node id='28342584' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9097471' lon='-1.3623448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134115' timestamp='2007-05-15T20:47:31+01:00' user='nickw' visible='true' lat='50.9425349' lon='-1.3926336'>
-    <tag k='name' v='CTLAND GDN' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254363' timestamp='2007-05-13T10:11:10+01:00' user='nickw' visible='true' lat='50.9178503' lon='-1.4066807' />
-  <node id='26114360' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9069728' lon='-1.3957098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718243' timestamp='2007-08-08T01:28:51+01:00' visible='true' lat='50.9340872' lon='-1.4462152' />
-  <node id='29914194' timestamp='2007-06-03T16:01:59+01:00' visible='true' lat='50.9837781' lon='-1.3588735'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830583' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9228872' lon='-1.3565465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135559' timestamp='2007-05-15T20:58:25+01:00' user='nickw' visible='true' lat='50.9454947' lon='-1.380689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316554' timestamp='2007-04-03T00:52:05+01:00' user='Dean Earley' visible='true' lat='50.9251633' lon='-1.4435195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896260' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.9613798' lon='-1.3963227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928072' timestamp='2007-06-03T21:43:53+01:00' visible='true' lat='50.9806041' lon='-1.3688221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347572' timestamp='2007-04-30T23:36:48+01:00' user='nickw' visible='true' lat='50.9227792' lon='-1.3524947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347585' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.926943' lon='-1.3570144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952636' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9345941' lon='-1.3772197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700503' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.9276247' lon='-1.3733959' />
-  <node id='29001699' timestamp='2007-05-12T09:53:01+01:00' user='nickw' visible='true' lat='50.9398962' lon='-1.3645335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657691' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9047916' lon='-1.380329'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730520' timestamp='2007-05-28T19:36:50+01:00' visible='true' lat='50.9712072' lon='-1.3711537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348119' timestamp='2007-04-30T23:45:30+01:00' user='nickw' visible='true' lat='50.9334482' lon='-1.3632107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132710' timestamp='2006-11-11T17:24:45+00:00' user='Dean Earley' visible='true' lat='50.9533581' lon='-1.4594265' />
-  <node id='29762787' timestamp='2007-05-31T21:31:15+01:00' visible='true' lat='50.987964' lon='-1.3549633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341763' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.910311' lon='-1.3594681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796776' timestamp='2007-05-30T22:22:05+01:00' user='nickw' visible='true' lat='50.9143975' lon='-1.3524622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329467' timestamp='2007-04-05T14:19:24+01:00' user='Dean Earley' visible='true' lat='50.9312' lon='-1.39078' />
-  <node id='92482298' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8950796' lon='-1.4253224' />
-  <node id='31487485' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9161675' lon='-1.3909462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592375' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9123662' lon='-1.441122' />
-  <node id='28345059' timestamp='2007-04-30T23:00:38+01:00' user='nickw' visible='true' lat='50.9237546' lon='-1.3594307'>
-    <tag k='name' v='LYTHAM R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325693' timestamp='2007-04-05T14:19:24+01:00' user='Dean Earley' visible='true' lat='50.9223' lon='-1.40812' />
-  <node id='28173811' timestamp='2007-09-07T17:38:58+01:00' user='mike l' visible='true' lat='50.9438015' lon='-1.4340423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071383' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9282692' lon='-1.3578924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728873' timestamp='2007-05-28T19:12:27+01:00' visible='true' lat='50.9725326' lon='-1.3571268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874154' timestamp='2007-06-02T19:43:17+01:00' visible='true' lat='50.9607961' lon='-1.3585454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254478' timestamp='2007-04-29T21:35:06+01:00' user='Dean Earley' visible='true' lat='50.9723677' lon='-1.4310402' />
-  <node id='15359697' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9676653' lon='-1.3528938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59740021' timestamp='2007-12-07T21:00:39+00:00' user='Steve Jeapes' visible='true' lat='50.9245416' lon='-1.3938166'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Varsity' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='91110954' timestamp='2007-10-29T07:59:19+00:00' user='nickw' visible='true' lat='50.9274617' lon='-1.4376168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675882' timestamp='2007-04-05T14:19:24+01:00' user='Dean Earley' visible='true' lat='50.9326113' lon='-1.3705778' />
-  <node id='21746340' timestamp='2007-05-29T22:49:17+01:00' visible='true' lat='51.0029914' lon='-1.349537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600465' timestamp='2007-10-12T14:05:20+01:00' user='SteveC' visible='true' lat='50.9269323' lon='-1.4516627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240323' timestamp='2007-04-29T20:02:55+01:00' user='Andy Street' visible='true' lat='50.9065726' lon='-1.3525494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135273' timestamp='2007-05-15T20:56:02+01:00' user='nickw' visible='true' lat='50.9444808' lon='-1.3850994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461231' timestamp='2007-05-21T23:43:15+01:00' user='nickw' visible='true' lat='50.9039729' lon='-1.3951707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135271' timestamp='2007-05-15T20:56:02+01:00' user='nickw' visible='true' lat='50.9443055' lon='-1.385159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252942' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9442025' lon='-1.4269651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250034' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9161409' lon='-1.4487468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380437' timestamp='2007-05-20T10:19:29+01:00' user='nickw' visible='true' lat='50.9441136' lon='-1.3759126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613429' timestamp='2006-12-16T17:46:54+00:00' user='David Currie' visible='true' lat='50.9757' lon='-1.4020538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130916' timestamp='2006-10-28T01:45:30+01:00' user='Dean Earley' visible='true' lat='50.9341132' lon='-1.3610432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726176' timestamp='2007-04-29T01:14:17+01:00' user='Dean Earley' visible='true' lat='50.9100264' lon='-1.4004005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280991' timestamp='2007-01-28T00:06:56+00:00' visible='true' lat='50.9170395' lon='-1.3707034'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961028' timestamp='2006-11-11T17:12:17+00:00' user='Dean Earley' visible='true' lat='50.9460249' lon='-1.474962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160290439' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9175525' lon='-1.4808345' />
-  <node id='25282115' timestamp='2007-01-17T21:10:10+00:00' user='David Currie' visible='true' lat='50.9768836' lon='-1.4080755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28141318' timestamp='2007-04-28T17:57:37+01:00' visible='true' lat='50.9666971' lon='-1.3576602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730515' timestamp='2007-05-28T19:36:42+01:00' visible='true' lat='50.9702814' lon='-1.3694398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28257908' timestamp='2007-04-29T22:56:50+01:00' user='Andy Street' visible='true' lat='50.9024449' lon='-1.3546889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110942' timestamp='2006-10-27T23:39:34+01:00' user='Dean Earley' visible='true' lat='50.9354706' lon='-1.3653446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640045' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9050229' lon='-1.3749241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157238294' timestamp='2007-12-08T20:33:30+00:00' user='nickw' visible='true' lat='50.9468433' lon='-1.4488901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160402232' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9144843' lon='-1.4508539' />
-  <node id='29998981' timestamp='2007-06-05T23:28:57+01:00' user='nickw' visible='true' lat='50.9902596' lon='-1.4359575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254667' timestamp='2005-11-15T15:42:09+00:00' user='nickw' visible='true' lat='50.9267964' lon='-1.3907612' />
-  <node id='28830660' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9245215' lon='-1.3644236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971170' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9067039' lon='-1.3989991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160401142' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9152365' lon='-1.4531885' />
-  <node id='388900' timestamp='2007-04-05T14:19:24+01:00' user='Dean Earley' visible='true' lat='50.9433' lon='-1.39436' />
-  <node id='28107842' timestamp='2007-04-27T23:50:35+01:00' visible='true' lat='50.9343812' lon='-1.4005829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930867' timestamp='2007-06-03T22:30:56+01:00' visible='true' lat='50.9987232' lon='-1.3548165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372772' timestamp='2007-05-01T10:05:20+01:00' visible='true' lat='50.9308958' lon='-1.4359124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903072' timestamp='2007-05-09T23:03:42+01:00' visible='true' lat='50.9418063' lon='-1.3678487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163083' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9711585' lon='-1.3866723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984796' timestamp='2007-01-10T00:15:10+00:00' user='nickw' visible='true' lat='50.9417428' lon='-1.3772848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404154' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9129312' lon='-1.4433523' />
-  <node id='29929854' timestamp='2007-06-03T22:13:27+01:00' visible='true' lat='50.9764827' lon='-1.3647219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402744' timestamp='2007-04-05T14:19:25+01:00' user='Dean Earley' visible='true' lat='50.9121' lon='-1.40893' />
-  <node id='14964133' timestamp='2007-02-18T21:25:14+00:00' visible='true' lat='50.9169142' lon='-1.3839136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549362' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9675843' lon='-1.3724586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239958' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.9073788' lon='-1.4119576' />
-  <node id='29001329' timestamp='2007-05-12T09:40:15+01:00' user='nickw' visible='true' lat='50.9238746' lon='-1.3818149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903646' timestamp='2007-05-09T23:57:40+01:00' visible='true' lat='50.9584443' lon='-1.3550675'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583049' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9391973' lon='-1.4292207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123681011' timestamp='2007-12-06T17:35:21+00:00' user='blackadder' visible='true' lat='50.9323968' lon='-1.4463339'>
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='14726549' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9118125' lon='-1.400756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071233' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.9206832' lon='-1.3657319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244183' timestamp='2007-04-29T20:36:18+01:00' user='Andy Street' visible='true' lat='50.902894' lon='-1.3523782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668385' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9813347' lon='-1.4121339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700488' timestamp='2007-04-05T14:19:25+01:00' user='Dean Earley' visible='true' lat='50.9241402' lon='-1.3719577' />
-  <node id='29710555' timestamp='2007-05-28T14:15:19+01:00' visible='true' lat='50.9829189' lon='-1.3589907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624988' timestamp='2007-03-25T18:42:34+01:00' user='Dean Earley' visible='true' lat='50.9034882' lon='-1.3744605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254637' timestamp='2006-10-27T00:48:15+01:00' user='Dean Earley' visible='true' lat='50.9153548' lon='-1.3953846' />
-  <node id='28243495' timestamp='2007-04-29T20:23:58+01:00' user='Dean Earley' visible='true' lat='50.9390591' lon='-1.4090832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723043' timestamp='2006-10-06T23:52:00+01:00' user='Dean Earley' visible='true' lat='50.9952023' lon='-1.3587186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30510884' timestamp='2007-06-17T22:25:16+01:00' visible='true' lat='50.9749584' lon='-1.3591718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957179' timestamp='2006-11-10T21:58:50+00:00' user='nickw' visible='true' lat='50.9133173' lon='-1.4201284'>
-    <tag k='name' v='ARTHUR R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296379' timestamp='2007-05-28T10:59:40+01:00' visible='true' lat='50.977877' lon='-1.349345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711911' timestamp='2007-05-28T14:57:28+01:00' visible='true' lat='50.9851176' lon='-1.3532706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275758' timestamp='2006-11-25T23:58:33+00:00' user='nickw' visible='true' lat='50.9155234' lon='-1.4277507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601317' timestamp='2006-09-01T00:22:45+01:00' user='nickw' visible='true' lat='50.8477224' lon='-1.5026832'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29816292' timestamp='2007-05-31T21:52:24+01:00' visible='true' lat='50.9911638' lon='-1.3539811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296616' timestamp='2007-01-19T10:19:56+00:00' user='Dean Earley' visible='true' lat='50.9702169' lon='-1.3640358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594988' timestamp='2006-08-04T11:59:16+01:00' user='nickw' visible='true' lat='50.9170358' lon='-1.4100088'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='48933481' timestamp='2007-09-10T22:29:42+01:00' user='mike l' visible='true' lat='50.9358306' lon='-1.3987805'>
-    <tag k='amenity' v='concert_hall' />
-    <tag k='name' v='Turner sims Concert Hall' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='157218265' timestamp='2007-12-08T20:20:38+00:00' user='nickw' visible='true' lat='50.9447686' lon='-1.4462316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675864' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9254769' lon='-1.3705119' />
-  <node id='26575765' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9001484' lon='-1.3945634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762105' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9397079' lon='-1.3529411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398385' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9443721' lon='-1.442734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471854' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9391113' lon='-1.3672731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577111' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9636383' lon='-1.4252067' />
-  <node id='30161250' timestamp='2007-06-10T18:18:29+01:00' visible='true' lat='50.9635731' lon='-1.3635854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223933' timestamp='2007-06-11T22:03:10+01:00' visible='true' lat='50.9839152' lon='-1.3517796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21585944' timestamp='2007-04-28T17:58:00+01:00' visible='true' lat='50.9690863' lon='-1.3563374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632803' timestamp='2007-05-26T20:05:18+01:00' visible='true' lat='50.9622217' lon='-1.3699103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398408' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9810954' lon='-1.4252331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964120' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.921857' lon='-1.3752842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90513087' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8883581' lon='-1.3926715' />
-  <node id='13706639' timestamp='2007-04-05T14:19:25+01:00' user='Dean Earley' visible='true' lat='50.9154993' lon='-1.3790701' />
-  <node id='113962298' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9585401' lon='-1.3694134' />
-  <node id='29730539' timestamp='2007-05-28T19:37:06+01:00' visible='true' lat='50.9711351' lon='-1.3765864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28936004' timestamp='2007-05-11T00:59:47+01:00' visible='true' lat='50.9407263' lon='-1.4422961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071224' timestamp='2006-08-11T02:47:58+01:00' user='Dean Earley' visible='true' lat='50.9207323' lon='-1.371324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252983' timestamp='2007-04-29T22:00:42+01:00' visible='true' lat='50.9422528' lon='-1.4277278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924308' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9785524' lon='-1.3726014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871576' timestamp='2007-06-02T18:40:15+01:00' visible='true' lat='50.9161684' lon='-1.3513541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324981' timestamp='2006-09-02T12:59:35+01:00' user='Dean Earley' visible='true' lat='50.9609312' lon='-1.4007904' />
-  <node id='29466078' timestamp='2007-09-09T12:08:40+01:00' user='mike l' visible='true' lat='50.9432176' lon='-1.4311364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90668433' timestamp='2007-10-28T21:53:08+00:00' user='Nick Dyer' visible='true' lat='50.9089778' lon='-1.3804657'>
-    <tag k='leisure' v='marina' />
-    <tag k='name' v='Shamrock Quay' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='28194339' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9451308' lon='-1.4352182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331791' timestamp='2007-12-06T20:44:25+00:00' user='nickw' visible='true' lat='50.9413302' lon='-1.4416838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801374' timestamp='2007-02-04T22:51:55+00:00' user='Dean Earley' visible='true' lat='50.907447' lon='-1.3748884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29588099' timestamp='2007-05-25T19:01:06+01:00' visible='true' lat='50.9634508' lon='-1.3557868'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945351' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9215267' lon='-1.3456372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298259' timestamp='2007-01-06T14:30:56+00:00' user='Dean Earley' visible='true' lat='50.9657097' lon='-1.3830741' />
-  <node id='21091398' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9851206' lon='-1.4438965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200346' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.9423527' lon='-1.4461621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380415' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.944389' lon='-1.3796475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469846' timestamp='2007-04-05T14:19:26+01:00' user='Dean Earley' visible='true' lat='50.9212767' lon='-1.3551318' />
-  <node id='28194409' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9466623' lon='-1.4381152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170455' timestamp='2007-04-03T00:54:01+01:00' user='Ben' visible='true' lat='50.958168' lon='-1.3970711' />
-  <node id='13704719' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.879711' lon='-1.407607'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29704460' timestamp='2007-05-28T10:40:47+01:00' visible='true' lat='50.9813631' lon='-1.3562821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160406181' timestamp='2007-12-10T20:56:44+00:00' user='sladen' visible='true' lat='50.9113564' lon='-1.4315849' />
-  <node id='30161111' timestamp='2007-06-10T18:13:42+01:00' visible='true' lat='50.9649013' lon='-1.3561866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275700' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true' lat='50.9206271' lon='-1.4355286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662047' timestamp='2007-10-28T21:46:58+00:00' user='Nick Dyer' visible='true' lat='50.9064665' lon='-1.411133' />
-  <node id='28179444' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9617177' lon='-1.4216974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178431' timestamp='2006-11-22T18:12:42+00:00' user='southglos' visible='true' lat='50.9951138' lon='-1.3567661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194369' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9444481' lon='-1.4387241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997551' timestamp='2007-06-05T22:43:59+01:00' user='nickw' visible='true' lat='51.0000126' lon='-1.3455835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259924' timestamp='2007-04-29T23:09:29+01:00' user='Andy Street' visible='true' lat='50.901962' lon='-1.3503932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596791' timestamp='2006-11-13T00:43:25+00:00' user='Dean Earley' visible='true' lat='50.9016755' lon='-1.4080748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87877509' timestamp='2007-10-26T13:40:01+01:00' user='Nick Dyer' visible='true' lat='50.9263967' lon='-1.4298225' />
-  <node id='25296308' timestamp='2007-01-19T09:52:17+00:00' user='Dean Earley' visible='true' lat='50.9866547' lon='-1.3516407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122316814' timestamp='2007-11-18T19:01:08+00:00' user='nickw' visible='true' lat='50.9144427' lon='-1.4357396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794905' timestamp='2007-05-30T21:44:19+01:00' user='nickw' visible='true' lat='50.9145782' lon='-1.355025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071280' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.920151' lon='-1.3584343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467566' timestamp='2007-04-19T17:55:55+01:00' visible='true' lat='50.9350091' lon='-1.379687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816636' timestamp='2007-05-31T22:10:49+01:00' visible='true' lat='50.9889389' lon='-1.3613653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600437' timestamp='2006-12-16T10:13:54+00:00' user='nickw' visible='true' lat='50.9210939' lon='-1.453523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254265' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.949803' lon='-1.3525464' />
-  <node id='21091883' timestamp='2006-11-25T23:51:23+00:00' user='nickw' visible='true' lat='50.9221652' lon='-1.4193832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871616' timestamp='2007-06-02T18:56:33+01:00' visible='true' lat='50.9145824' lon='-1.3494348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726566' timestamp='2006-09-02T18:32:37+01:00' user='Dean Earley' visible='true' lat='50.9134846' lon='-1.4008858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931320' timestamp='2007-08-16T19:35:53+01:00' user='southglos' visible='true' lat='50.998609' lon='-1.3588611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419619' timestamp='2006-12-02T23:23:54+00:00' user='Dean Earley' visible='true' lat='50.9399349' lon='-1.3787503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600499' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9222849' lon='-1.4347719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111051' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9842412' lon='-1.3847789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372806' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9290621' lon='-1.442497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124662' timestamp='2007-06-09T19:48:37+01:00' user='nickw' visible='true' lat='50.930554' lon='-1.3518079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217121' timestamp='2007-03-31T20:35:04+01:00' user='nickw' visible='true' lat='50.9197894' lon='-1.3569122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29912975' timestamp='2007-06-03T15:50:11+01:00' visible='true' lat='50.9873656' lon='-1.3589035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227208' timestamp='2006-10-23T20:52:54+01:00' user='nickw' visible='true' lat='50.9297249' lon='-1.4139713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998533' timestamp='2007-06-05T23:13:21+01:00' user='nickw' visible='true' lat='50.9614512' lon='-1.4499636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581815' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9171715' lon='-1.4486579' />
-  <node id='28582928' timestamp='2007-05-02T23:57:42+01:00' visible='true' lat='50.9419727' lon='-1.4266344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659239' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9024233' lon='-1.4073822' />
-  <node id='38459899' timestamp='2007-09-01T18:19:08+01:00' visible='true' lat='50.9147632' lon='-1.4012223' />
-  <node id='29632820' timestamp='2007-05-26T20:07:04+01:00' visible='true' lat='50.9607498' lon='-1.3613547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157184967' timestamp='2007-12-08T19:58:59+00:00' user='nickw' visible='true' lat='50.9373358' lon='-1.4507082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194491' timestamp='2007-04-29T08:28:57+01:00' user='Dean Earley' visible='true' lat='50.9470362' lon='-1.4102837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675847' timestamp='2007-04-05T14:19:26+01:00' user='Dean Earley' visible='true' lat='50.9332153' lon='-1.362868' />
-  <node id='29925337' timestamp='2007-06-03T20:36:29+01:00' visible='true' lat='50.980075' lon='-1.3634137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721039' timestamp='2007-06-02T19:44:17+01:00' visible='true' lat='50.9607355' lon='-1.3601138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301606' timestamp='2005-12-08T22:43:56+00:00' user='nickw' visible='true' lat='50.9365654' lon='-1.3998985' />
-  <node id='21507778' timestamp='2007-05-22T00:20:08+01:00' user='Dean Earley' visible='true' lat='50.9469614' lon='-1.3985803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583042' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9391173' lon='-1.4310905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110861' timestamp='2006-10-27T23:39:27+01:00' user='Dean Earley' visible='true' lat='50.9352043' lon='-1.3668739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964103' timestamp='2007-11-11T18:09:43+00:00' user='Dean Earley' visible='true' lat='50.9179281' lon='-1.3754303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102975' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9344212' lon='-1.366287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764437' timestamp='2007-02-10T23:52:28+00:00' visible='true' lat='50.908459' lon='-1.393843' />
-  <node id='29815638' timestamp='2007-05-31T21:47:55+01:00' visible='true' lat='50.9895514' lon='-1.3582126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420709' timestamp='2006-12-02T23:56:30+00:00' user='Dean Earley' visible='true' lat='50.9333718' lon='-1.4046138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153329586' timestamp='2007-12-06T20:42:59+00:00' user='Dean Earley' visible='true' lat='50.9976168' lon='-1.3587039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200343' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.9418269' lon='-1.4457846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180226' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9604127' lon='-1.4256598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704962' timestamp='2007-05-28T11:06:40+01:00' visible='true' lat='50.9818022' lon='-1.3509398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689137' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9396727' lon='-1.3857152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504461' timestamp='2007-06-17T21:43:57+01:00' visible='true' lat='50.9819402' lon='-1.3585344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87826006' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8999162' lon='-1.4391973' />
-  <node id='91132084' timestamp='2007-10-29T08:23:16+00:00' user='nickw' visible='true' lat='50.9308152' lon='-1.4234829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194438' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9471113' lon='-1.4326473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815552' timestamp='2007-05-31T21:42:54+01:00' visible='true' lat='50.9888037' lon='-1.3581755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722354' timestamp='2006-10-06T23:46:14+01:00' user='Dean Earley' visible='true' lat='50.9454156' lon='-1.3777057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640011' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9095734' lon='-1.3712814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491397' timestamp='2007-05-22T12:23:39+01:00' visible='true' lat='50.9140727' lon='-1.4114488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383143' timestamp='2007-04-05T14:19:27+01:00' user='Dean Earley' visible='true' lat='50.9244' lon='-1.4084' />
-  <node id='29909699' timestamp='2007-06-03T14:55:51+01:00' visible='true' lat='50.9698066' lon='-1.35932'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Good Companion' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507753' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9316535' lon='-1.4000924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632193' timestamp='2007-05-26T19:20:44+01:00' visible='true' lat='50.9558956' lon='-1.3676333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447393' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.9075473' lon='-1.3887887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706470' timestamp='2007-04-05T14:19:27+01:00' user='Dean Earley' visible='true' lat='50.9343769' lon='-1.3796155' />
-  <node id='27496133' timestamp='2007-04-20T23:53:12+01:00' user='Dean Earley' visible='true' lat='50.9127998' lon='-1.387664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163293' timestamp='2008-01-04T19:34:27+00:00' user='nickw' visible='true' lat='50.9700888' lon='-1.3864836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073222' timestamp='2007-04-05T14:19:27+01:00' user='Dean Earley' visible='true' lat='50.9326319' lon='-1.3927875' />
-  <node id='10217891' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9236643' lon='-1.3609428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161124' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9707134' lon='-1.3494214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953369' timestamp='2007-06-04T21:16:59+01:00' visible='true' lat='51.0014439' lon='-1.3690838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342786' timestamp='2007-04-30T22:17:40+01:00' user='nickw' visible='true' lat='50.9047737' lon='-1.3654639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298310' timestamp='2006-11-11T17:24:49+00:00' user='Dean Earley' visible='true' lat='50.9483179' lon='-1.3852879' />
-  <node id='87980704' timestamp='2007-10-26T15:58:01+01:00' user='Nick Dyer' visible='true' lat='50.9626406' lon='-1.351966' />
-  <node id='27021830' timestamp='2007-04-03T00:53:16+01:00' user='Ben' visible='true' lat='50.9397511' lon='-1.3925147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816635' timestamp='2007-05-31T22:10:49+01:00' visible='true' lat='50.9892632' lon='-1.3611822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021751' timestamp='2007-05-22T00:20:08+01:00' user='Dean Earley' visible='true' lat='50.942662' lon='-1.4046147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171756' timestamp='2007-05-16T23:48:01+01:00' user='nickw' visible='true' lat='50.9409037' lon='-1.3869655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600603' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9965998' lon='-1.399082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249977' timestamp='2007-04-29T21:42:07+01:00' visible='true' lat='50.9151345' lon='-1.4458345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816601' timestamp='2007-05-31T22:07:51+01:00' visible='true' lat='50.9898993' lon='-1.3566826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896243' timestamp='2007-04-29T02:05:44+01:00' user='Dean Earley' visible='true' lat='50.9522071' lon='-1.4042395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30410996' timestamp='2007-06-15T23:09:51+01:00' visible='true' lat='50.9693575' lon='-1.3574799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816720' timestamp='2007-05-31T22:13:27+01:00' visible='true' lat='50.9899034' lon='-1.3565241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935725' timestamp='2007-05-11T00:47:45+01:00' visible='true' lat='50.9415895' lon='-1.4392476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903376' timestamp='2007-05-09T23:24:26+01:00' visible='true' lat='50.9467079' lon='-1.3645617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27239004' timestamp='2007-04-09T15:39:36+01:00' user='avantman42' visible='true' lat='50.9177081' lon='-1.4473502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509854' timestamp='2007-05-22T21:20:32+01:00' visible='true' lat='50.9934447' lon='-1.3565952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254920' timestamp='2007-04-20T23:53:21+01:00' user='Dean Earley' visible='true' lat='50.9069998' lon='-1.4072982' />
-  <node id='474649' timestamp='2007-04-05T14:19:28+01:00' user='Dean Earley' visible='true' lat='50.9304683' lon='-1.354216' />
-  <node id='29464236' timestamp='2007-05-22T00:19:09+01:00' user='Dean Earley' visible='true' lat='50.9382498' lon='-1.4216788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924289' timestamp='2007-10-29T15:43:35+00:00' user='Dean Earley' visible='true' lat='50.9665243' lon='-1.3854267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743164' timestamp='2007-04-29T20:37:42+01:00' user='Dean Earley' visible='true' lat='50.9342137' lon='-1.418853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856375' timestamp='2007-06-02T08:31:29+01:00' user='nickw' visible='true' lat='50.9493063' lon='-1.3936663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956747' timestamp='2007-06-26T23:49:26+01:00' user='nickw' visible='true' lat='50.9287231' lon='-1.3500687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924236' timestamp='2007-02-13T19:46:58+00:00' user='Dean Earley' visible='true' lat='50.9616647' lon='-1.377588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254515' timestamp='2007-02-18T21:30:34+00:00' visible='true' lat='50.9012856' lon='-1.391001' />
-  <node id='28346964' timestamp='2007-04-30T23:26:35+01:00' user='nickw' visible='true' lat='50.8995237' lon='-1.3626168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613504' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9834133' lon='-1.3899223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762092' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9476692' lon='-1.3438024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639958' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9029545' lon='-1.3774444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530605' timestamp='2007-04-05T14:19:28+01:00' user='Dean Earley' visible='true' lat='50.93' lon='-1.39477' />
-  <node id='325003' timestamp='2006-11-11T17:25:25+00:00' user='Dean Earley' visible='true' lat='50.9579475' lon='-1.4163506' />
-  <node id='90677147' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8957407' lon='-1.433289' />
-  <node id='29931350' timestamp='2007-06-03T22:43:04+01:00' visible='true' lat='50.9938312' lon='-1.3733692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774721' timestamp='2007-09-14T09:50:06+01:00' user='mike l' visible='true' lat='50.9471109' lon='-1.447129' />
-  <node id='28935714' timestamp='2007-05-11T00:47:38+01:00' visible='true' lat='50.9409007' lon='-1.4406561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549396' timestamp='2007-05-24T11:22:54+01:00' visible='true' lat='50.9623435' lon='-1.3766324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160336499' timestamp='2007-12-10T20:19:02+00:00' user='sladen' visible='true' lat='50.946731' lon='-1.4730862' />
-  <node id='17721073' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9714396' lon='-1.360477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700410' timestamp='2007-11-11T18:09:46+00:00' user='Dean Earley' visible='true' lat='50.9253553' lon='-1.3889474' />
-  <node id='30096957' timestamp='2007-06-08T23:24:15+01:00' visible='true' lat='50.9660413' lon='-1.377985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815072' timestamp='2007-05-31T21:31:02+01:00' visible='true' lat='50.9883612' lon='-1.3545283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815441' timestamp='2007-05-31T21:37:57+01:00' visible='true' lat='50.9886542' lon='-1.3539614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29387394' timestamp='2007-05-24T10:51:06+01:00' visible='true' lat='50.966034' lon='-1.3665001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169428764' timestamp='2007-12-14T21:38:56+00:00' user='nickw' visible='true' lat='50.9289378' lon='-1.4354393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122320008' timestamp='2007-11-19T13:57:14+00:00' user='nickw' visible='true' lat='50.9135414' lon='-1.4357355'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='baptist' />
-    <tag k='name' v='Freemantle Baptist Church' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='20957240' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9212186' lon='-1.4107862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109267' timestamp='2007-10-29T07:50:30+00:00' user='nickw' visible='true' lat='50.934893' lon='-1.4234617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507744' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.9308585' lon='-1.3994812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254485' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true' lat='50.9623368' lon='-1.4080341' />
-  <node id='29708045' timestamp='2007-05-28T12:04:13+01:00' visible='true' lat='50.9784065' lon='-1.3642125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209145' timestamp='2007-12-08T20:14:57+00:00' user='nickw' visible='true' lat='50.9416735' lon='-1.447071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278564' timestamp='2007-08-14T04:48:02+01:00' user='andrewpmk' visible='true' lat='50.90764' lon='-1.3973741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409604' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9108043' lon='-1.4303489' />
-  <node id='324339' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9235191' lon='-1.3976026' />
-  <node id='29145249' timestamp='2007-12-10T19:09:39+00:00' user='sladen' visible='true' lat='50.9233206' lon='-1.3863028'>
-    <tag k='railway' v='level_crossing' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984742' timestamp='2007-05-22T00:20:08+01:00' user='Dean Earley' visible='true' lat='50.9470347' lon='-1.3948432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935993' timestamp='2007-05-11T00:59:40+01:00' visible='true' lat='50.9411692' lon='-1.4432833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927559' timestamp='2007-06-03T21:24:29+01:00' visible='true' lat='50.9804075' lon='-1.3700459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051799' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9914695' lon='-1.4795537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890103' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.914241' lon='-1.3914698'>
-    <tag k='railway' v='crossing' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668180' timestamp='2007-01-04T21:05:55+00:00' user='nickw' visible='true' lat='50.9877338' lon='-1.4026941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745448' timestamp='2006-12-14T23:57:10+00:00' user='Dean Earley' visible='true' lat='50.97005' lon='-1.3485356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971185' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9060125' lon='-1.3996174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925688' timestamp='2007-06-03T20:46:01+01:00' visible='true' lat='50.9802703' lon='-1.361916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632816' timestamp='2007-05-26T20:06:45+01:00' visible='true' lat='50.9611364' lon='-1.3591339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296127' timestamp='2007-01-19T09:38:43+00:00' user='Dean Earley' visible='true' lat='50.971031' lon='-1.350314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508358' timestamp='2007-06-17T22:14:18+01:00' visible='true' lat='50.9748023' lon='-1.3544282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342537' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9060516' lon='-1.3689009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600482' timestamp='2006-12-16T10:13:57+00:00' user='nickw' visible='true' lat='50.9406975' lon='-1.4338833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801039' timestamp='2007-10-31T15:08:49+00:00' user='Dean Earley' visible='true' lat='50.9427381' lon='-1.4505525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507761' timestamp='2007-04-03T00:53:55+01:00' user='Ben' visible='true' lat='50.9396574' lon='-1.3937022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298276' timestamp='2006-09-03T01:41:00+01:00' user='Dean Earley' visible='true' lat='50.959578' lon='-1.394952' />
-  <node id='25675790' timestamp='2007-02-06T01:03:02+00:00' user='Dean Earley' visible='true' lat='50.9092188' lon='-1.447853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160247658' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9368988' lon='-1.3792647' />
-  <node id='245149209' timestamp='2008-02-03T06:09:35+00:00' user='sladen' visible='true' lat='50.9038074' lon='-1.3991701' />
-  <node id='26575778' timestamp='2007-03-16T21:52:30+00:00' user='nickw' visible='true' lat='50.9018135' lon='-1.3998499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254950' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.951458' lon='-1.4174766' />
-  <node id='26945346' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9206876' lon='-1.34671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689052' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.941109' lon='-1.3808229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708023' timestamp='2007-05-28T12:04:04+01:00' visible='true' lat='50.9837525' lon='-1.3643121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467498' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.9304023' lon='-1.3794471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780794' timestamp='2007-06-22T21:09:31+01:00' user='Steve Chilton' visible='true' lat='50.9080319' lon='-1.4139827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530534' timestamp='2007-05-23T13:04:51+01:00' visible='true' lat='50.9818487' lon='-1.3541412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329476' timestamp='2007-04-05T14:19:29+01:00' user='Dean Earley' visible='true' lat='50.9373' lon='-1.37366' />
-  <node id='331318' timestamp='2006-11-11T21:24:04+00:00' user='Dean Earley' visible='true' lat='51.0' lon='-1.3558' />
-  <node id='15028813' timestamp='2006-09-08T23:06:39+01:00' user='Dean Earley' visible='true' lat='50.9328638' lon='-1.3689106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243635' timestamp='2007-04-29T20:25:05+01:00' user='Dean Earley' visible='true' lat='50.9382035' lon='-1.4158295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342554' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9067907' lon='-1.3670135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290763' timestamp='2007-06-13T09:24:05+01:00' visible='true' lat='50.9684099' lon='-1.3830325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506811' timestamp='2007-06-17T22:03:34+01:00' visible='true' lat='50.9785854' lon='-1.3616449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730529' timestamp='2007-05-28T19:36:58+01:00' visible='true' lat='50.9705012' lon='-1.3701431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115799' timestamp='2007-10-29T08:07:47+00:00' user='nickw' visible='true' lat='50.927421' lon='-1.4429113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227234' timestamp='2007-05-22T00:20:09+01:00' user='Dean Earley' visible='true' lat='50.9352364' lon='-1.4193708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27561976' timestamp='2007-04-23T21:54:57+01:00' user='waschbaer' visible='true' lat='50.9052595' lon='-1.413174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269926' timestamp='2007-04-29T02:33:18+01:00' user='Dean Earley' visible='true' lat='50.9502696' lon='-1.4136612' />
-  <node id='169426684' timestamp='2007-12-14T21:37:42+00:00' user='nickw' visible='true' lat='50.9334955' lon='-1.4415086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508366' timestamp='2007-06-17T22:14:19+01:00' visible='true' lat='50.9760047' lon='-1.3559903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706076' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8953763' lon='-1.3882438'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29506475' timestamp='2007-05-22T19:46:56+01:00' visible='true' lat='50.9875838' lon='-1.3512412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705462' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.9037702' lon='-1.447025' />
-  <node id='30510880' timestamp='2007-06-17T22:25:15+01:00' visible='true' lat='50.9751598' lon='-1.3588479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147920' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.9090033' lon='-1.4038479' />
-  <node id='206162094' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9712335' lon='-1.3788846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291051' timestamp='2007-06-13T09:32:59+01:00' visible='true' lat='50.9662238' lon='-1.3846789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301576' timestamp='2007-02-18T21:30:36+00:00' visible='true' lat='50.9041218' lon='-1.3975383' />
-  <node id='21636780' timestamp='2007-04-29T02:33:54+01:00' user='Dean Earley' visible='true' lat='50.9477936' lon='-1.4076187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675807' timestamp='2007-10-29T16:22:03+00:00' user='Nick Dyer' visible='true' lat='50.9108045' lon='-1.4401335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953373' timestamp='2007-06-04T21:17:00+01:00' visible='true' lat='51.0033713' lon='-1.3811595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021796' timestamp='2007-04-03T00:52:58+01:00' user='Ben' visible='true' lat='50.958671' lon='-1.3967254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372798' timestamp='2007-05-01T10:05:23+01:00' visible='true' lat='50.9304279' lon='-1.4430926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796855' timestamp='2007-05-30T22:26:18+01:00' user='nickw' visible='true' lat='50.9169777' lon='-1.36025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903747' timestamp='2007-05-10T00:36:38+01:00' visible='true' lat='50.9373363' lon='-1.3635543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194354' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9441467' lon='-1.4374017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035792' timestamp='2007-04-03T00:54:00+01:00' user='Ben' visible='true' lat='50.9360508' lon='-1.3953196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928599' timestamp='2007-06-03T21:52:07+01:00' visible='true' lat='50.978394' lon='-1.3610285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705642' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8943133' lon='-1.4082382' />
-  <node id='27021826' timestamp='2007-04-03T00:53:06+01:00' user='Ben' visible='true' lat='50.9398267' lon='-1.3939345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564702' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true' lat='50.9297209' lon='-1.3563708'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='14964126' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.9208211' lon='-1.375657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976799' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9251862' lon='-1.421168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266204' timestamp='2007-01-19T20:35:56+00:00' user='Dean Earley' visible='true' lat='50.9193914' lon='-1.3946175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339190' timestamp='2007-04-30T20:39:45+01:00' visible='true' lat='50.9693908' lon='-1.363577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360197' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9587337' lon='-1.3716021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423566' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true' lat='50.9332827' lon='-1.4428397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976690' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9319835' lon='-1.4298347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892126' timestamp='2006-10-27T00:58:30+01:00' user='Dean Earley' visible='true' lat='50.911596' lon='-1.3837838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114352' timestamp='2007-02-23T21:46:01+00:00' user='nickw' visible='true' lat='50.9041661' lon='-1.3964915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856354' timestamp='2007-06-02T08:31:26+01:00' user='nickw' visible='true' lat='50.9477918' lon='-1.394004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169415698' timestamp='2007-12-14T21:31:22+00:00' user='nickw' visible='true' lat='50.928487' lon='-1.4252824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889413' timestamp='2006-08-08T23:26:25+01:00' user='Dean Earley' visible='true' lat='50.9374788' lon='-1.3633601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232590' timestamp='2007-04-29T18:59:41+01:00' user='nickw' visible='true' lat='50.9158066' lon='-1.3460109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25555530' timestamp='2007-04-29T15:19:35+01:00' visible='true' lat='50.998179' lon='-1.3565066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592381' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9130372' lon='-1.4418773' />
-  <node id='29816411' timestamp='2007-05-31T21:56:32+01:00' visible='true' lat='50.9895294' lon='-1.3553785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348709' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9815514' lon='-1.4248392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232099' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.915603' lon='-1.4122972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595078' timestamp='2006-08-04T12:00:26+01:00' user='nickw' visible='true' lat='50.9184186' lon='-1.4130713'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28232589' timestamp='2007-04-29T18:59:41+01:00' user='nickw' visible='true' lat='50.9160786' lon='-1.3465047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238982' timestamp='2007-04-09T15:39:33+01:00' user='avantman42' visible='true' lat='50.8988421' lon='-1.4073958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125571487' timestamp='2007-11-20T11:54:53+00:00' user='Nick Dyer' visible='true' lat='50.9635248' lon='-1.4261165' />
-  <node id='29815433' timestamp='2007-05-31T21:37:04+01:00' visible='true' lat='50.9872123' lon='-1.3542056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278534' timestamp='2007-08-14T04:48:00+01:00' user='andrewpmk' visible='true' lat='50.9074952' lon='-1.3986991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928529' timestamp='2007-06-03T21:49:37+01:00' visible='true' lat='50.9847101' lon='-1.3626371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='53421244' timestamp='2007-09-17T23:09:04+01:00' user='mike l' visible='true' lat='50.969933' lon='-1.3940616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240340' timestamp='2007-04-29T20:02:57+01:00' user='Andy Street' visible='true' lat='50.9072613' lon='-1.3506193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134107' timestamp='2007-05-15T20:56:07+01:00' user='nickw' visible='true' lat='50.9437575' lon='-1.3837058'>
-    <tag k='name' v='BINS CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021723' timestamp='2007-04-03T00:51:00+01:00' user='Dean Earley' visible='true' lat='50.9258007' lon='-1.4407391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275660' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true' lat='50.9116811' lon='-1.4323659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001322' timestamp='2007-05-12T09:40:13+01:00' user='nickw' visible='true' lat='50.9221714' lon='-1.3822917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402752' timestamp='2007-02-18T21:25:31+00:00' visible='true' lat='50.9170547' lon='-1.4066094' />
-  <node id='423289' timestamp='2007-04-05T14:19:30+01:00' user='Dean Earley' visible='true' lat='50.9302' lon='-1.38729' />
-  <node id='29931379' timestamp='2007-06-03T22:43:09+01:00' visible='true' lat='50.9938521' lon='-1.3729767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117410' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9282913' lon='-1.4430603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549340' timestamp='2007-05-24T11:22:46+01:00' visible='true' lat='50.9622912' lon='-1.3598954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957223' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9147178' lon='-1.4216413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418544' timestamp='2007-05-02T00:35:25+01:00' visible='true' lat='50.961387' lon='-1.3734681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924086' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9385272' lon='-1.3735252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249828' timestamp='2007-04-29T21:41:35+01:00' visible='true' lat='50.9187545' lon='-1.4454434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282138' timestamp='2007-09-17T23:09:05+01:00' user='mike l' visible='true' lat='50.9754612' lon='-1.4043744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632475' timestamp='2007-05-26T19:44:44+01:00' visible='true' lat='50.960688' lon='-1.3690751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871681' timestamp='2007-06-02T18:57:51+01:00' visible='true' lat='50.9147114' lon='-1.3494416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764426' timestamp='2007-05-30T21:37:53+01:00' user='nickw' visible='true' lat='50.9216883' lon='-1.3637029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110913' timestamp='2007-02-18T20:19:16+00:00' visible='true' lat='50.9358634' lon='-1.3643861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345068' timestamp='2007-04-30T23:00:39+01:00' user='nickw' visible='true' lat='50.9327158' lon='-1.3651028'>
-    <tag k='name' v='PATH' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984693' timestamp='2007-01-10T00:11:03+00:00' user='nickw' visible='true' lat='50.9451101' lon='-1.3854202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949944' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9949394' lon='-1.3866679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243870' timestamp='2007-04-29T20:37:35+01:00' user='Dean Earley' visible='true' lat='50.9372678' lon='-1.4131333' />
-  <node id='14727960' timestamp='2007-02-11T00:33:24+00:00' visible='true' lat='50.9186584' lon='-1.3954855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325041' timestamp='2006-11-11T17:26:00+00:00' user='Dean Earley' visible='true' lat='50.9545517' lon='-1.4571695' />
-  <node id='29387392' timestamp='2007-05-20T15:17:08+01:00' visible='true' lat='50.9684675' lon='-1.3530972'>
-    <tag k='is_in' v='Hampshire' />
-    <tag k='place' v='town' />
-    <tag k='name' v='Eastleigh' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689123' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9409621' lon='-1.3836291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998358' timestamp='2007-06-05T23:05:26+01:00' user='nickw' visible='true' lat='50.9762016' lon='-1.4307127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796766' timestamp='2007-05-30T22:22:03+01:00' user='nickw' visible='true' lat='50.9144225' lon='-1.355323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157204142' timestamp='2007-12-08T20:11:11+00:00' user='nickw' visible='true' lat='50.9425436' lon='-1.4450744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='658449' timestamp='2007-04-05T14:19:35+01:00' user='Dean Earley' visible='true' lat='50.9209375' lon='-1.3988008' />
-  <node id='28345055' timestamp='2007-04-30T23:00:37+01:00' user='nickw' visible='true' lat='50.9324925' lon='-1.367154'>
-    <tag k='name' v='LINGFLD GD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243672' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9391' lon='-1.4147506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976784' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9296566' lon='-1.4218236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706684' timestamp='2007-04-05T14:19:38+01:00' user='Dean Earley' visible='true' lat='50.9020829' lon='-1.3838874' />
-  <node id='206162626' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.9714587' lon='-1.3801362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071203' timestamp='2006-08-11T02:47:51+01:00' user='Dean Earley' visible='true' lat='50.924337' lon='-1.3665433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632112' timestamp='2007-05-26T19:19:02+01:00' visible='true' lat='50.9697659' lon='-1.3501523'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173913' timestamp='2007-04-29T01:03:08+01:00' visible='true' lat='50.9417534' lon='-1.431981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577073' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9118467' lon='-1.4435595' />
-  <node id='15028822' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9258535' lon='-1.3638836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124677' timestamp='2007-06-09T19:48:40+01:00' user='nickw' visible='true' lat='50.9315119' lon='-1.3532682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814618' timestamp='2007-05-31T21:23:00+01:00' visible='true' lat='50.9889772' lon='-1.3571023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254966' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9431958' lon='-1.4180496' />
-  <node id='169424897' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true' lat='50.9327317' lon='-1.4428496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254410' timestamp='2007-01-28T00:07:09+00:00' visible='true' lat='50.907497' lon='-1.4048251' />
-  <node id='28249989' timestamp='2007-04-29T21:42:09+01:00' visible='true' lat='50.9167396' lon='-1.4436857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639984' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9011613' lon='-1.3794152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398438' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9631641' lon='-1.4071942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236145' timestamp='2007-04-29T19:26:01+01:00' user='Andy Street' visible='true' lat='50.9079148' lon='-1.3537898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706296' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.914035' lon='-1.38738'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28194897' timestamp='2007-04-29T08:58:00+01:00' user='Dean Earley' visible='true' lat='50.9434042' lon='-1.4086883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518796' timestamp='2007-04-05T14:19:39+01:00' user='Dean Earley' visible='true' lat='50.9255' lon='-1.38127' />
-  <node id='18348732' timestamp='2006-10-16T21:59:55+01:00' user='nickw' visible='true' lat='50.9972054' lon='-1.4490644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707328' timestamp='2007-05-28T11:54:36+01:00' visible='true' lat='50.9873598' lon='-1.3579456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972814' timestamp='2007-03-25T19:25:11+01:00' user='Dean Earley' visible='true' lat='50.9040758' lon='-1.3973837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161361' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9740967' lon='-1.3577641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157238263' timestamp='2007-12-08T20:33:29+00:00' user='nickw' visible='true' lat='50.9457731' lon='-1.4457511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423557' timestamp='2007-12-14T21:35:47+00:00' user='nickw' visible='true' lat='50.9339775' lon='-1.4417271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728171' timestamp='2007-04-29T02:33:54+01:00' user='Dean Earley' visible='true' lat='50.9428099' lon='-1.4063431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217215' timestamp='2007-02-18T20:18:25+00:00' visible='true' lat='50.9158382' lon='-1.3609315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341793' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9119142' lon='-1.362027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269152' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='51.0007018' lon='-1.3342216' />
-  <node id='20961032' timestamp='2006-11-11T17:12:21+00:00' user='Dean Earley' visible='true' lat='50.9553477' lon='-1.455838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874084' timestamp='2007-05-08T14:50:40+01:00' visible='true' lat='50.9369543' lon='-1.4434038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932222' timestamp='2007-05-10T20:48:47+01:00' user='Dean Earley' visible='true' lat='50.9602725' lon='-1.4522082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464263' timestamp='2007-05-22T00:19:15+01:00' user='Dean Earley' visible='true' lat='50.9371782' lon='-1.407359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924225' timestamp='2007-01-06T14:38:00+00:00' user='nickw' visible='true' lat='50.9600551' lon='-1.3686579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228097' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.9510452' lon='-1.4233852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577060' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.908908' lon='-1.4289941' />
-  <node id='30956604' timestamp='2007-06-26T23:45:01+01:00' user='nickw' visible='true' lat='50.9292835' lon='-1.3490505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331327' timestamp='2006-11-11T21:24:41+00:00' user='Dean Earley' visible='true' lat='51.0026' lon='-1.36597' />
-  <node id='28194433' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.947628' lon='-1.4340927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282153' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.975346' lon='-1.4086412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469859' timestamp='2007-04-05T14:19:39+01:00' user='Dean Earley' visible='true' lat='50.9106248' lon='-1.4226797' />
-  <node id='28259909' timestamp='2007-04-29T23:09:27+01:00' user='Andy Street' visible='true' lat='50.9013991' lon='-1.3515514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728536' timestamp='2007-03-23T22:52:48+00:00' user='nickw' visible='true' lat='50.8997797' lon='-1.360929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745503' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9574416' lon='-1.3988525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='430649' timestamp='2007-04-05T14:19:39+01:00' user='Dean Earley' visible='true' lat='50.9101' lon='-1.41191' />
-  <node id='29728869' timestamp='2007-05-28T19:12:25+01:00' visible='true' lat='50.972114' lon='-1.3555538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244119' timestamp='2007-04-29T20:35:31+01:00' user='Andy Street' visible='true' lat='50.9049897' lon='-1.3509425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117328' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.932223' lon='-1.4445205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091387' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.9922238' lon='-1.4465189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325207' timestamp='2006-11-11T17:26:08+00:00' user='Dean Earley' visible='true' lat='50.9417982' lon='-1.3619512' />
-  <node id='157176112' timestamp='2007-12-08T19:49:41+00:00' user='nickw' visible='true' lat='50.9405171' lon='-1.4489509'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Mountbatten' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17769050' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.9187529' lon='-1.3900585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29765432' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.9994163' lon='-1.3521547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931402' timestamp='2007-06-03T22:43:15+01:00' visible='true' lat='50.9953037' lon='-1.3727096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001468' timestamp='2007-05-12T09:49:22+01:00' user='nickw' visible='true' lat='50.9426002' lon='-1.3503983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583027' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9399169' lon='-1.4351253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282096' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.9764677' lon='-1.4072488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160207843' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9225307' lon='-1.3815306' />
-  <node id='10908370' timestamp='2006-12-18T23:27:55+00:00' visible='true' lat='50.9311162' lon='-1.378732' />
-  <node id='245146237' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9157247' lon='-1.4021313' />
-  <node id='28342567' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9075799' lon='-1.3642918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342781' timestamp='2007-04-30T22:17:39+01:00' user='nickw' visible='true' lat='50.9045858' lon='-1.362464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29002290' timestamp='2007-05-12T09:57:58+01:00' user='nickw' visible='true' lat='50.9354644' lon='-1.367295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700529' timestamp='2007-04-05T14:19:39+01:00' user='Dean Earley' visible='true' lat='50.9298355' lon='-1.3663093' />
-  <node id='28830626' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9277272' lon='-1.3602914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229593' timestamp='2007-06-12T00:14:42+01:00' user='nickw' visible='true' lat='50.9338462' lon='-1.355239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325064' timestamp='2006-11-11T17:26:17+00:00' user='Dean Earley' visible='true' lat='50.9452735' lon='-1.5356679' />
-  <node id='29710912' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9832371' lon='-1.3579786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700430' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9280308' lon='-1.3863171' />
-  <node id='24949825' timestamp='2007-01-31T02:05:55+00:00' user='Dean Earley' visible='true' lat='50.9906316' lon='-1.3870134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801034' timestamp='2007-09-12T16:39:45+01:00' user='mike l' visible='true' lat='50.9429307' lon='-1.4494603' />
-  <node id='30431977' timestamp='2007-06-16T16:26:03+01:00' visible='true' lat='50.9736432' lon='-1.3497024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711873' timestamp='2007-06-11T21:42:40+01:00' visible='true' lat='50.9860995' lon='-1.3541488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127611' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.9366544' lon='-1.4355494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601366' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9196468' lon='-1.4780472'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29998921' timestamp='2007-06-05T23:28:50+01:00' user='nickw' visible='true' lat='50.984882' lon='-1.4375866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966253' timestamp='2006-11-12T17:38:32+00:00' user='Dean Earley' visible='true' lat='50.9464818' lon='-1.3726475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962268' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9558855' lon='-1.3650617' />
-  <node id='29997508' timestamp='2007-06-05T22:43:52+01:00' user='nickw' visible='true' lat='51.0060134' lon='-1.3617948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958701' timestamp='2007-09-10T23:55:16+01:00' visible='true' lat='50.904824' lon='-1.4081212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071242' timestamp='2006-08-11T02:47:59+01:00' user='Dean Earley' visible='true' lat='50.9224563' lon='-1.3670374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17980436' timestamp='2007-02-18T21:25:24+00:00' visible='true' lat='50.9169592' lon='-1.4020139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111070' timestamp='2006-10-22T23:24:08+01:00' user='Ben' visible='true' lat='50.9987677' lon='-1.391904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91528333' timestamp='2007-10-29T16:21:46+00:00' user='Nick Dyer' visible='true' lat='50.9087534' lon='-1.4388031' />
-  <node id='29535184' timestamp='2007-05-23T18:33:43+01:00' visible='true' lat='50.9743358' lon='-1.350364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764480' timestamp='2007-02-16T20:51:28+00:00' user='nickw' visible='true' lat='50.9084413' lon='-1.3941321' />
-  <node id='30780720' timestamp='2007-10-16T11:34:23+01:00' user='Dean Earley' visible='true' lat='50.9082131' lon='-1.4048876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325034' timestamp='2006-11-11T17:26:17+00:00' user='Dean Earley' visible='true' lat='50.9576152' lon='-1.4475942' />
-  <node id='29026665' timestamp='2007-05-13T10:11:10+01:00' user='nickw' visible='true' lat='50.9214732' lon='-1.4083664'>
-    <tag k='name' v='WDLNDS W' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924073' timestamp='2007-04-18T02:00:40+01:00' visible='true' lat='50.9294761' lon='-1.3846072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237236' timestamp='2007-04-29T19:42:03+01:00' user='Andy Street' visible='true' lat='50.9017576' lon='-1.3578033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282111' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.9768733' lon='-1.4072232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962281' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9572533' lon='-1.3621521' />
-  <node id='91109278' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true' lat='50.9340541' lon='-1.4247134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967598' timestamp='2006-11-12T20:46:59+00:00' user='Dean Earley' visible='true' lat='50.9193881' lon='-1.3924889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657679' timestamp='2007-12-10T19:05:58+00:00' user='sladen' visible='true' lat='50.9211834' lon='-1.3800887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710557' timestamp='2007-05-28T14:15:20+01:00' visible='true' lat='50.9831053' lon='-1.3588946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600582' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9822585' lon='-1.3997382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231121' timestamp='2007-04-29T18:45:50+01:00' visible='true' lat='50.9683448' lon='-1.3535353'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Stones' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998895' timestamp='2007-06-05T23:28:47+01:00' user='nickw' visible='true' lat='50.9878085' lon='-1.4430301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249845' timestamp='2007-04-29T21:41:37+01:00' visible='true' lat='50.9196333' lon='-1.4412408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348123' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9329095' lon='-1.3644048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689174' timestamp='2007-02-18T20:19:00+00:00' visible='true' lat='50.9396539' lon='-1.372325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130907' timestamp='2006-10-28T01:45:29+01:00' user='Dean Earley' visible='true' lat='50.9333493' lon='-1.3614129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661182' timestamp='2007-04-05T14:19:40+01:00' user='Dean Earley' visible='true' lat='50.9129005' lon='-1.3612207' />
-  <node id='20961019' timestamp='2006-11-11T17:12:04+00:00' user='Dean Earley' visible='true' lat='50.941457' lon='-1.5484842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001325' timestamp='2007-05-12T09:40:14+01:00' user='nickw' visible='true' lat='50.9224845' lon='-1.3830864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727676' timestamp='2007-05-01T14:43:39+01:00' user='Andy Street' visible='true' lat='50.905158' lon='-1.3528923'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Chamberlayne Arms' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107330' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9363728' lon='-1.3505799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124214' timestamp='2007-06-09T19:43:23+01:00' user='nickw' visible='true' lat='50.9244025' lon='-1.3480084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816836' timestamp='2007-05-31T22:17:18+01:00' visible='true' lat='50.9872777' lon='-1.3652256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021766' timestamp='2007-05-22T00:20:10+01:00' user='Dean Earley' visible='true' lat='50.9387269' lon='-1.404377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157188675' timestamp='2007-12-08T20:00:26+00:00' user='nickw' visible='true' lat='50.9377493' lon='-1.4491108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9727807' timestamp='2007-04-20T23:53:16+01:00' user='Dean Earley' visible='true' lat='50.9152248' lon='-1.3575183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924614' timestamp='2007-06-03T20:17:26+01:00' visible='true' lat='50.9828702' lon='-1.3627444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232096' timestamp='2006-10-14T13:19:08+01:00' user='nickw' visible='true' lat='50.914769' lon='-1.4069726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419455' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.940516' lon='-1.3710668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130956' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.9319244' lon='-1.3587394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226374' timestamp='2007-06-11T22:23:58+01:00' visible='true' lat='50.9818305' lon='-1.3531495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957189' timestamp='2006-11-10T21:58:51+00:00' user='nickw' visible='true' lat='50.9140617' lon='-1.4209775'>
-    <tag k='name' v='STAF R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727994' timestamp='2007-01-28T00:55:36+00:00' visible='true' lat='50.9305322' lon='-1.3852857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896419' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9656967' lon='-1.3863101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157238313' timestamp='2007-12-08T20:33:30+00:00' user='nickw' visible='true' lat='50.9471374' lon='-1.4495953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30505714' timestamp='2007-06-17T21:56:40+01:00' visible='true' lat='50.9791608' lon='-1.354834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964160' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.920517' lon='-1.3772722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008372' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9265812' lon='-1.3516513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706367' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.92087' lon='-1.3841374'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28347771' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.932058' lon='-1.3630539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372787' timestamp='2007-12-14T21:28:02+00:00' user='nickw' visible='true' lat='50.9283164' lon='-1.4390994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903053' timestamp='2007-05-09T23:03:34+01:00' visible='true' lat='50.9414926' lon='-1.369617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419433' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9409951' lon='-1.3686159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984663' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.9455495' lon='-1.3994426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721020' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9613301' lon='-1.3706213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089068' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.9663626' lon='-1.376066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924323' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9819545' lon='-1.384442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319630' timestamp='2006-10-27T00:48:16+01:00' user='Dean Earley' visible='true' lat='50.920767' lon='-1.3907178' />
-  <node id='245146244' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9142961' lon='-1.4020626' />
-  <node id='27467485' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.931657' lon='-1.3749695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949842' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9884619' lon='-1.3758206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530523' timestamp='2007-04-05T14:19:40+01:00' user='Dean Earley' visible='true' lat='50.9507458' lon='-1.3700728' />
-  <node id='30431958' timestamp='2007-06-16T16:25:56+01:00' visible='true' lat='50.9783649' lon='-1.3549356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596782' timestamp='2007-03-25T19:25:24+01:00' user='Dean Earley' visible='true' lat='50.9077606' lon='-1.3951578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243589' timestamp='2007-04-29T20:24:57+01:00' user='Dean Earley' visible='true' lat='50.9358697' lon='-1.4127431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743146' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9325093' lon='-1.4222027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724275' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.9095745' lon='-1.4086098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243618' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.9387235' lon='-1.4178367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469880' timestamp='2006-06-01T09:43:59+01:00' user='nickw' visible='true' lat='50.9156094' lon='-1.4427734' />
-  <node id='28250017' timestamp='2007-04-29T21:42:15+01:00' visible='true' lat='50.9148343' lon='-1.4496356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348319' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9261839' lon='-1.3591927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935759' timestamp='2007-05-11T00:50:46+01:00' visible='true' lat='50.9410022' lon='-1.4453459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254359' timestamp='2007-02-18T21:25:22+00:00' visible='true' lat='50.9167961' lon='-1.4065561' />
-  <node id='28194853' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9457495' lon='-1.4075106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582993' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.9411409' lon='-1.431275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704642' timestamp='2006-08-26T00:18:30+01:00' user='dmgroom' visible='true' lat='50.8726888' lon='-1.3991041' />
-  <node id='153334855' timestamp='2007-12-06T20:46:07+00:00' user='nickw' visible='true' lat='50.9437556' lon='-1.4496752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636735' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.9525171' lon='-1.4094377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243571' timestamp='2007-04-29T20:24:42+01:00' user='Dean Earley' visible='true' lat='50.9377766' lon='-1.4113505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932448' timestamp='2007-05-10T21:06:01+01:00' user='Dean Earley' visible='true' lat='50.962976' lon='-1.4574462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903954' timestamp='2007-10-16T11:34:28+01:00' user='Dean Earley' visible='true' lat='50.9509869' lon='-1.3626031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783109' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.949865' lon='-1.35155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964846' timestamp='2006-11-12T10:50:41+00:00' user='nickw' visible='true' lat='50.9921035' lon='-1.4279007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998568' timestamp='2007-06-05T23:13:27+01:00' user='nickw' visible='true' lat='50.9606503' lon='-1.43558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194502' timestamp='2007-11-25T22:27:50+00:00' user='southglos' visible='true' lat='50.9485426' lon='-1.4062084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447500' timestamp='2008-02-03T06:25:10+00:00' user='sladen' visible='true' lat='50.9073905' lon='-1.3966381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418340' timestamp='2007-05-02T00:33:13+01:00' visible='true' lat='50.9674577' lon='-1.3637881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414295' timestamp='2007-05-01T23:50:14+01:00' user='nickw' visible='true' lat='50.9389995' lon='-1.3728628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885363' timestamp='2006-08-23T01:17:11+01:00' user='dmgroom' visible='true' lat='50.8983156' lon='-1.4014775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092029' timestamp='2006-11-19T12:29:34+00:00' user='nickw' visible='true' lat='50.9736366' lon='-1.4400919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639905' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9030304' lon='-1.3815794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134126' timestamp='2007-05-22T00:20:10+01:00' user='Dean Earley' visible='true' lat='50.9394258' lon='-1.4036265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929857' timestamp='2007-06-03T22:13:28+01:00' visible='true' lat='50.9778791' lon='-1.36528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636942' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9179837' lon='-1.4325986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530531' timestamp='2007-05-23T13:04:50+01:00' visible='true' lat='50.9833652' lon='-1.3536946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632441' timestamp='2007-05-26T19:27:03+01:00' visible='true' lat='50.9601125' lon='-1.3626721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911801' timestamp='2007-06-03T15:31:38+01:00' visible='true' lat='50.98707' lon='-1.3538093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14707285' timestamp='2007-01-19T09:38:45+00:00' user='Dean Earley' visible='true' lat='50.9702001' lon='-1.3452076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903410' timestamp='2007-05-09T23:36:02+01:00' visible='true' lat='50.9459133' lon='-1.3637548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071348' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9158892' lon='-1.3640587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561532' timestamp='2007-06-01T16:31:31+01:00' user='Dean Earley' visible='true' lat='50.9265159' lon='-1.43147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25761519' timestamp='2007-02-18T20:19:19+00:00' visible='true' lat='50.9358625' lon='-1.3575286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91119001' timestamp='2007-10-29T08:11:30+00:00' user='nickw' visible='true' lat='50.929149' lon='-1.4463285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124656' timestamp='2007-06-09T19:48:36+01:00' user='nickw' visible='true' lat='50.9304977' lon='-1.3533576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461242' timestamp='2007-05-21T23:43:16+01:00' user='nickw' visible='true' lat='50.9026448' lon='-1.3977931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561541' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9212325' lon='-1.423083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668038' timestamp='2007-01-04T21:05:30+00:00' user='nickw' visible='true' lat='50.9873149' lon='-1.3935852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194872' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9444499' lon='-1.4116757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127577' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9351771' lon='-1.4397562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340624' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9635551' lon='-1.3760641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388930' timestamp='2007-04-05T14:19:40+01:00' user='Dean Earley' visible='true' lat='50.9426' lon='-1.3941' />
-  <node id='29872362' timestamp='2007-06-02T19:03:55+01:00' visible='true' lat='50.9171186' lon='-1.350534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704539' timestamp='2007-06-03T22:07:19+01:00' visible='true' lat='50.9783444' lon='-1.3602262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972793' timestamp='2007-03-16T21:52:47+00:00' user='nickw' visible='true' lat='50.9003066' lon='-1.3900276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073628' timestamp='2007-04-05T14:19:41+01:00' user='Dean Earley' visible='true' lat='50.9323233' lon='-1.3941469' />
-  <node id='28194887' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9408872' lon='-1.4098197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189063' timestamp='2006-11-22T23:51:57+00:00' user='crouchingbadger' visible='true' lat='50.9573295' lon='-1.4495783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956725' timestamp='2007-06-26T23:49:23+01:00' user='nickw' visible='true' lat='50.9274334' lon='-1.3502276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325169' timestamp='2005-12-16T22:54:06+00:00' user='80n' visible='true' lat='50.9516402' lon='-1.4012882' />
-  <node id='18348694' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.974375' lon='-1.4103197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071421' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9231027' lon='-1.3538483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463020' timestamp='2007-05-22T00:01:32+01:00' user='nickw' visible='true' lat='50.9102324' lon='-1.4016873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342597' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9052223' lon='-1.3720946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243883' timestamp='2007-10-30T15:48:42+00:00' user='Dean Earley' visible='true' lat='50.938675' lon='-1.4224407' />
-  <node id='21636811' timestamp='2007-04-29T02:33:44+01:00' user='Dean Earley' visible='true' lat='50.951691' lon='-1.4135585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398765' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9431528' lon='-1.4165902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831094' timestamp='2007-01-19T19:03:48+00:00' user='Dean Earley' visible='true' lat='50.9131449' lon='-1.407994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706829' timestamp='2007-04-05T14:19:41+01:00' user='Dean Earley' visible='true' lat='50.8852513' lon='-1.3719078' />
-  <node id='90665698' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9007291' lon='-1.4163515' />
-  <node id='107808731' timestamp='2007-11-11T18:09:37+00:00' user='Dean Earley' visible='true' lat='50.9153654' lon='-1.3587096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601305' timestamp='2006-09-01T00:16:02+01:00' user='nickw' visible='true' lat='50.8287191' lon='-1.5391803'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28584204' timestamp='2007-05-03T00:08:08+01:00' visible='true' lat='50.9419297' lon='-1.4330587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26004487' timestamp='2008-02-03T06:26:21+00:00' user='sladen' visible='true' lat='50.9080941' lon='-1.3922264' />
-  <node id='160221505' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9153017' lon='-1.3904999' />
-  <node id='675877' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9306921' lon='-1.3726577' />
-  <node id='29816737' timestamp='2007-05-31T22:13:31+01:00' visible='true' lat='50.9910474' lon='-1.355937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089138' timestamp='2007-06-08T18:12:10+01:00' visible='true' lat='50.9634153' lon='-1.3782573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579411' timestamp='2006-12-14T13:52:55+00:00' user='David Currie' visible='true' lat='50.977824' lon='-1.4044587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507804' timestamp='2006-12-09T09:51:44+00:00' user='nickw' visible='true' lat='50.943773' lon='-1.3971733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347581' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9267301' lon='-1.3571336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781150' timestamp='2007-03-25T18:42:08+01:00' user='Dean Earley' visible='true' lat='50.9033299' lon='-1.3742485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973235' timestamp='2007-08-14T04:48:36+01:00' user='andrewpmk' visible='true' lat='50.9078559' lon='-1.396638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509902' timestamp='2007-05-22T21:20:52+01:00' visible='true' lat='50.9874857' lon='-1.3577923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657705' timestamp='2007-04-05T14:19:41+01:00' user='Dean Earley' visible='true' lat='50.9385254' lon='-1.3868094' />
-  <node id='21141433' timestamp='2006-11-21T23:12:46+00:00' user='nickw' visible='true' lat='50.9230731' lon='-1.4217173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561792' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9250579' lon='-1.4364444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613406' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9855733' lon='-1.4274458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160217495' timestamp='2007-12-10T19:11:24+00:00' user='sladen' visible='true' lat='50.9137432' lon='-1.3901823' />
-  <node id='29632189' timestamp='2007-05-26T19:20:41+01:00' visible='true' lat='50.9556199' lon='-1.3689863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25938551' timestamp='2007-09-10T23:28:38+01:00' visible='true' lat='50.9126787' lon='-1.3970267'>
-    <tag k='amenity' v='hospital' />
-    <tag k='name' v='Royal South Hants Hospital' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998550' timestamp='2007-06-05T23:13:24+01:00' user='nickw' visible='true' lat='50.9655552' lon='-1.4203223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706243' timestamp='2007-04-05T14:19:41+01:00' user='Dean Earley' visible='true' lat='50.9112883' lon='-1.3770843' />
-  <node id='244310992' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9726677' lon='-1.4382335' />
-  <node id='544342' timestamp='2007-04-05T14:19:41+01:00' user='Dean Earley' visible='true' lat='50.9388063' lon='-1.3710092' />
-  <node id='245147927' timestamp='2008-02-03T06:13:06+00:00' user='sladen' visible='true' lat='50.9086137' lon='-1.4019768' />
-  <node id='10222234' timestamp='2007-04-20T23:53:17+01:00' user='Dean Earley' visible='true' lat='50.9068913' lon='-1.4067812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976773' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9302577' lon='-1.4196184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591249' timestamp='2007-05-13T10:11:10+01:00' user='nickw' visible='true' lat='50.9208342' lon='-1.4089329'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30290733' timestamp='2007-10-29T15:43:33+00:00' user='Dean Earley' visible='true' lat='50.9674872' lon='-1.3827136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238989' timestamp='2007-04-09T15:39:34+01:00' user='avantman42' visible='true' lat='50.9012838' lon='-1.4103401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9736873' timestamp='2007-02-18T21:25:26+00:00' visible='true' lat='50.9175661' lon='-1.3831899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9519441' timestamp='2006-10-03T23:25:15+01:00' user='Dean Earley' visible='true' lat='50.9235837' lon='-1.275978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971200' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9080242' lon='-1.4142956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727689' timestamp='2007-04-20T23:53:17+01:00' user='Dean Earley' visible='true' lat='50.9130734' lon='-1.3553459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956638' timestamp='2007-06-26T23:45:06+01:00' user='nickw' visible='true' lat='50.9326705' lon='-1.3520007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003039' timestamp='2007-05-22T00:20:10+01:00' user='Dean Earley' visible='true' lat='50.9405411' lon='-1.4039113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071331' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9201896' lon='-1.3613551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721081' timestamp='2006-10-06T23:27:21+01:00' user='Dean Earley' visible='true' lat='50.9711691' lon='-1.3504124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226995' timestamp='2007-06-11T22:32:13+01:00' visible='true' lat='50.9820643' lon='-1.3528832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708025' timestamp='2007-05-28T12:04:05+01:00' visible='true' lat='50.9835232' lon='-1.3645148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675683' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.8990104' lon='-1.4468503' />
-  <node id='254873' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9170601' lon='-1.4812637' />
-  <node id='387826' timestamp='2007-04-05T14:19:42+01:00' user='Dean Earley' visible='true' lat='50.9325' lon='-1.38722' />
-  <node id='30229578' timestamp='2007-06-12T00:14:40+01:00' user='nickw' visible='true' lat='50.9341741' lon='-1.3538247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815073' timestamp='2007-05-31T21:31:03+01:00' visible='true' lat='50.9879286' lon='-1.3543988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984781' timestamp='2007-09-25T17:50:09+01:00' user='mike l' visible='true' lat='50.9401737' lon='-1.3886367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217893' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.924481' lon='-1.3612542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949910' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9914882' lon='-1.3765358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464281' timestamp='2007-05-22T00:19:18+01:00' user='Dean Earley' visible='true' lat='50.9377298' lon='-1.4039217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816429' timestamp='2007-05-31T22:00:52+01:00' visible='true' lat='50.9900911' lon='-1.3551468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816837' timestamp='2007-05-31T22:17:18+01:00' visible='true' lat='50.9871484' lon='-1.365063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096967' timestamp='2007-06-08T23:24:16+01:00' visible='true' lat='50.9630359' lon='-1.3805439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632458' timestamp='2007-05-26T19:27:16+01:00' visible='true' lat='50.960595' lon='-1.3687025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388910' timestamp='2007-04-05T14:19:42+01:00' user='Dean Earley' visible='true' lat='50.9444' lon='-1.40149' />
-  <node id='50797904' timestamp='2007-09-13T21:06:05+01:00' user='mike l' visible='true' lat='50.9742234' lon='-1.451666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256885' timestamp='2007-06-12T20:38:16+01:00' visible='true' lat='50.9785188' lon='-1.3588213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48884748' timestamp='2007-09-10T19:07:16+01:00' user='mike l' visible='true' lat='50.9430997' lon='-1.4335612' />
-  <node id='87819949' timestamp='2007-10-26T12:11:53+01:00' user='Nick Dyer' visible='true' lat='50.9085981' lon='-1.4416091' />
-  <node id='29468554' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9132667' lon='-1.4452062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581802' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9196985' lon='-1.4467439' />
-  <node id='25471841' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.9381473' lon='-1.3687135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194497' timestamp='2007-11-25T22:27:50+00:00' user='southglos' visible='true' lat='50.9480082' lon='-1.4059163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573789' timestamp='2007-09-16T10:20:35+01:00' user='mike l' visible='true' lat='50.9971836' lon='-1.411219' />
-  <node id='430655' timestamp='2006-06-01T09:12:13+01:00' user='nickw' visible='true' lat='50.9125781' lon='-1.4064531' />
-  <node id='13564837' timestamp='2006-08-15T12:11:55+01:00' user='nickw' visible='true' lat='50.9350588' lon='-1.3526642'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29632163' timestamp='2007-05-26T19:20:05+01:00' visible='true' lat='50.9566977' lon='-1.3678124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87979705' timestamp='2008-01-29T12:06:37+00:00' user='Dean Earley' visible='true' lat='50.9662205' lon='-1.350547' />
-  <node id='11419686' timestamp='2006-07-24T21:03:43+01:00' user='nickw' visible='true' lat='50.9150526' lon='-1.4320582' />
-  <node id='125580524' timestamp='2007-12-07T13:24:50+00:00' user='Nick Dyer' visible='true' lat='50.962899' lon='-1.4248261' />
-  <node id='142617043' timestamp='2007-11-29T22:29:08+00:00' user='nickw' visible='true' lat='50.9141168' lon='-1.4161212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130978' timestamp='2006-10-28T01:45:38+01:00' user='Dean Earley' visible='true' lat='50.9295554' lon='-1.3562958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949859' timestamp='2007-01-07T12:38:47+00:00' user='nickw' visible='true' lat='50.9958647' lon='-1.3718075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342614' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9100227' lon='-1.3667354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18347839' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9327995' lon='-1.4160799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133169' timestamp='2006-10-28T01:55:45+01:00' user='Dean Earley' visible='true' lat='50.9286586' lon='-1.3516537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071318' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.9217876' lon='-1.3608591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945406' timestamp='2007-03-31T20:34:36+01:00' user='nickw' visible='true' lat='50.9009457' lon='-1.34969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838969' timestamp='2007-06-01T20:50:37+01:00' visible='true' lat='50.9889771' lon='-1.395751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815645' timestamp='2007-05-31T21:47:57+01:00' visible='true' lat='50.9908663' lon='-1.3564059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342772' timestamp='2007-04-30T22:16:37+01:00' user='nickw' visible='true' lat='50.9069536' lon='-1.3635369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243981300' timestamp='2008-01-29T12:06:34+00:00' user='Dean Earley' visible='true' lat='50.9599159' lon='-1.3428282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90582767' timestamp='2007-10-28T20:25:32+00:00' user='Nick Dyer' visible='true' lat='50.9244057' lon='-1.4434222' />
-  <node id='26447507' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9094591' lon='-1.3882476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549355' timestamp='2007-05-24T11:22:48+01:00' visible='true' lat='50.970597' lon='-1.3706175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92680542' timestamp='2007-10-31T12:24:55+00:00' user='Dean Earley' visible='true' lat='50.9609723' lon='-1.4254284' />
-  <node id='29008387' timestamp='2007-05-12T15:11:56+01:00' user='nickw' visible='true' lat='50.9256545' lon='-1.352148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163286' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.9691693' lon='-1.3836327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613391' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9742846' lon='-1.4109639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160387799' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9158263' lon='-1.4542184' />
-  <node id='8596812' timestamp='2007-02-06T00:19:17+00:00' user='Dean Earley' visible='true' lat='50.9069292' lon='-1.407861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091886' timestamp='2007-04-29T21:18:23+01:00' user='Dean Earley' visible='true' lat='50.9232227' lon='-1.4194889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160225520' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9028052' lon='-1.3922852' />
-  <node id='24984768' timestamp='2007-04-03T00:54:08+01:00' user='Ben' visible='true' lat='50.9453283' lon='-1.3959366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689082' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.942361' lon='-1.3897332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462616' timestamp='2008-02-03T06:09:19+00:00' user='sladen' visible='true' lat='50.9032012' lon='-1.3980715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29561784' timestamp='2007-12-06T19:26:17+00:00' user='Dean Earley' visible='true' lat='50.9807171' lon='-1.4434474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='205340399' timestamp='2008-01-03T19:17:14+00:00' user='nickw' visible='true' lat='51.0092628' lon='-1.3425534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632842' timestamp='2007-05-26T20:07:35+01:00' visible='true' lat='50.9667354' lon='-1.3621266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504763' timestamp='2007-06-17T21:50:35+01:00' visible='true' lat='50.9808348' lon='-1.3579834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544325' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9275895' lon='-1.3877374' />
-  <node id='30124363' timestamp='2007-06-09T19:43:09+01:00' user='nickw' visible='true' lat='50.9238045' lon='-1.3495928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254762' timestamp='2007-04-20T23:53:18+01:00' user='Dean Earley' visible='true' lat='50.9175051' lon='-1.3830947' />
-  <node id='325222' timestamp='2006-11-11T17:26:46+00:00' user='Dean Earley' visible='true' lat='50.9362316' lon='-1.3479304' />
-  <node id='29911935' timestamp='2007-06-03T15:38:22+01:00' visible='true' lat='50.9859112' lon='-1.3568928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726302' timestamp='2006-09-08T02:12:12+01:00' user='Dean Earley' visible='true' lat='50.9182779' lon='-1.3747944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957206' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.918832' lon='-1.4245972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549389' timestamp='2007-05-24T11:22:52+01:00' visible='true' lat='50.9621552' lon='-1.3730444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107345' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9233731' lon='-1.3556738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346701' timestamp='2007-03-04T18:57:33+00:00' user='Dean Earley' visible='true' lat='50.9129146' lon='-1.3651252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971155' timestamp='2006-11-12T22:56:58+00:00' user='Dean Earley' visible='true' lat='50.9085494' lon='-1.4036851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706658' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.908999' lon='-1.375392'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29710758' timestamp='2007-05-28T14:21:51+01:00' visible='true' lat='50.9868017' lon='-1.3548255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008367' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9267314' lon='-1.351989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657676' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9231745' lon='-1.3866976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='95828982' timestamp='2007-11-02T14:14:14+00:00' user='Nick Dyer' visible='true' lat='50.9064511' lon='-1.4072464' />
-  <node id='21561575' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.92527' lon='-1.4278056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949927' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9912631' lon='-1.3830124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347758' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9295162' lon='-1.3617029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721054' timestamp='2007-01-19T10:20:27+00:00' user='Dean Earley' visible='true' lat='50.9700542' lon='-1.3607835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223083' timestamp='2007-06-11T21:51:51+01:00' visible='true' lat='50.9838506' lon='-1.3552717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250000' timestamp='2007-04-29T21:42:10+01:00' visible='true' lat='50.916632' lon='-1.443096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924342' timestamp='2007-09-17T23:09:08+01:00' user='mike l' visible='true' lat='50.9748092' lon='-1.3881534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325663' timestamp='2007-04-29T20:59:48+01:00' user='Dean Earley' visible='true' lat='50.9324433' lon='-1.4316216' />
-  <node id='29997564' timestamp='2007-06-05T22:44:01+01:00' user='nickw' visible='true' lat='50.997512' lon='-1.3503515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889437' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9510531' lon='-1.3660241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949893' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9949144' lon='-1.3751054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964043' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='50.9985618' lon='-1.4461333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26782589' timestamp='2007-03-25T19:24:26+01:00' user='Dean Earley' visible='true' lat='50.9046906' lon='-1.3974516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706960' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8736228' lon='-1.3557223'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='25675144' timestamp='2007-02-06T00:16:35+00:00' user='Dean Earley' visible='true' lat='50.9020991' lon='-1.4015862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178401' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.9869767' lon='-1.3510546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25635429' timestamp='2007-02-04T18:26:16+00:00' user='Dean Earley' visible='true' lat='50.958515' lon='-1.3562744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816550' timestamp='2007-05-31T22:04:25+01:00' visible='true' lat='50.9912658' lon='-1.3549118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134837' timestamp='2006-10-28T02:02:31+01:00' user='Dean Earley' visible='true' lat='50.928301' lon='-1.3540091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160278845' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.912531' lon='-1.4522551' />
-  <node id='13071374' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9182718' lon='-1.3625843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726189' timestamp='2006-09-04T01:04:09+01:00' user='Dean Earley' visible='true' lat='50.9110727' lon='-1.4004833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152163' timestamp='2008-02-03T06:21:03+00:00' user='sladen' visible='true' lat='50.9076665' lon='-1.3976852' />
-  <node id='24949812' timestamp='2007-01-07T12:38:43+00:00' user='nickw' visible='true' lat='50.988007' lon='-1.3753401'>
-    <tag k='name' v='BROWNHILL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895692' timestamp='2007-02-13T18:31:37+00:00' user='Dean Earley' visible='true' lat='50.9654404' lon='-1.4196349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239993' timestamp='2007-10-25T21:06:49+01:00' user='Nick Dyer' visible='true' lat='50.9341681' lon='-1.4472572' />
-  <node id='26945334' timestamp='2007-03-31T20:34:29+01:00' user='nickw' visible='true' lat='50.9181163' lon='-1.3574104'>
-    <tag k='name' v='CHICH' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92681272' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9614388' lon='-1.4247196' />
-  <node id='28249964' timestamp='2007-04-29T21:42:00+01:00' visible='true' lat='50.9142155' lon='-1.4459639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964740' timestamp='2007-04-03T00:54:01+01:00' user='Ben' visible='true' lat='50.9399484' lon='-1.379412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642320' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9507469' lon='-1.3607312' />
-  <node id='254421' timestamp='2006-08-11T02:52:52+01:00' user='Dean Earley' visible='true' lat='50.9239966' lon='-1.3682986' />
-  <node id='4931288' timestamp='2007-04-05T14:19:43+01:00' user='Dean Earley' visible='true' lat='50.9216918' lon='-1.3918382' />
-  <node id='21689106' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9401484' lon='-1.3802319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958655' timestamp='2007-09-10T23:55:13+01:00' visible='true' lat='50.9063801' lon='-1.3998517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781841' timestamp='2007-03-25T19:01:55+01:00' user='Dean Earley' visible='true' lat='50.9062564' lon='-1.3592517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461216' timestamp='2007-12-10T19:19:47+00:00' user='sladen' visible='true' lat='50.9065507' lon='-1.3967999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435887' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.9368978' lon='-1.4317441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008941' timestamp='2007-05-12T15:26:03+01:00' user='nickw' visible='true' lat='50.9316399' lon='-1.3499428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931339' timestamp='2007-06-03T22:43:01+01:00' visible='true' lat='50.994521' lon='-1.3725099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282081' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9755537' lon='-1.4060473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932233' timestamp='2007-05-10T20:48:55+01:00' user='Dean Earley' visible='true' lat='50.9646673' lon='-1.4455862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730544' timestamp='2007-05-28T19:37:08+01:00' visible='true' lat='50.9694327' lon='-1.3724288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122352456' timestamp='2007-11-19T13:57:44+00:00' user='nickw' visible='true' lat='50.9116256' lon='-1.4280279'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='anglican' />
-    <tag k='name' v='Christ Church Freemantle' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='17768861' timestamp='2007-12-10T19:08:32+00:00' user='sladen' visible='true' lat='50.9247868' lon='-1.3864144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561801' timestamp='2006-12-16T10:14:15+00:00' user='nickw' visible='true' lat='50.9237055' lon='-1.4390867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956619' timestamp='2007-06-26T23:45:04+01:00' user='nickw' visible='true' lat='50.9276181' lon='-1.3509081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147657' timestamp='2008-02-03T06:03:21+00:00' user='sladen' visible='true' lat='50.9094525' lon='-1.4059679' />
-  <node id='29548666' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.962666' lon='-1.3614445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743131' timestamp='2007-04-03T00:52:14+01:00' user='Dean Earley' visible='true' lat='50.9208847' lon='-1.4316565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179498' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9576483' lon='-1.4040065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='51196149' timestamp='2007-12-08T20:43:35+00:00' user='nickw' visible='true' lat='50.9457865' lon='-1.4483327' />
-  <node id='18398419' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9742098' lon='-1.4113184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924071' timestamp='2007-01-06T14:28:56+00:00' user='nickw' visible='true' lat='50.9869808' lon='-1.3727624'>
-    <tag k='name' v='OAKMOUNT R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464270' timestamp='2007-05-22T00:19:16+01:00' user='Dean Earley' visible='true' lat='50.9385199' lon='-1.4028668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091871' timestamp='2007-12-10T20:59:56+00:00' user='sladen' visible='true' lat='50.9112211' lon='-1.4241605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621226' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9650757' lon='-1.3708619'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990887' timestamp='2007-06-05T20:41:23+01:00' visible='true' lat='51.0009976' lon='-1.3517967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398374' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9514012' lon='-1.4397215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746408' timestamp='2007-02-18T20:18:31+00:00' visible='true' lat='50.9892922' lon='-1.342635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305569' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9973764' lon='-1.3967872' />
-  <node id='388925' timestamp='2007-04-05T14:19:43+01:00' user='Dean Earley' visible='true' lat='50.9436' lon='-1.39479' />
-  <node id='14743127' timestamp='2007-04-03T00:52:14+01:00' user='Dean Earley' visible='true' lat='50.9182204' lon='-1.4281778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964109' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9205185' lon='-1.3783531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141421' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9307931' lon='-1.4280548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341758' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9104987' lon='-1.3594443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908369' timestamp='2006-07-18T10:19:16+01:00' user='nickw' visible='true' lat='50.9308037' lon='-1.3788257' />
-  <node id='9280988' timestamp='2007-02-18T20:18:25+00:00' visible='true' lat='50.9157735' lon='-1.3653786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914417' timestamp='2007-06-03T16:22:50+01:00' visible='true' lat='50.9833502' lon='-1.3625301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398457' timestamp='2007-01-28T00:07:19+00:00' visible='true' lat='50.9217787' lon='-1.4073376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296281' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9761148' lon='-1.3645723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950434' timestamp='2007-09-10T23:28:29+01:00' visible='true' lat='50.9121955' lon='-1.3988368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949957' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9965899' lon='-1.3880983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998124' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.9887839' lon='-1.4003165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071404' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9218516' lon='-1.3553542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='596304' timestamp='2007-04-05T14:19:43+01:00' user='Dean Earley' visible='true' lat='50.9147891' lon='-1.3572796' />
-  <node id='26114395' timestamp='2007-02-23T21:46:30+00:00' user='nickw' visible='true' lat='50.9073185' lon='-1.3924599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815060' timestamp='2007-05-31T21:30:58+01:00' visible='true' lat='50.9880679' lon='-1.3543988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942597' timestamp='2006-07-19T01:48:01+01:00' user='Dean Earley' visible='true' lat='50.913706' lon='-1.3416111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243682' timestamp='2007-04-29T20:25:13+01:00' user='Dean Earley' visible='true' lat='50.9383186' lon='-1.4131409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930657' timestamp='2007-06-03T22:25:16+01:00' visible='true' lat='50.9953575' lon='-1.3525145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447517' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9097096' lon='-1.3870754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931390' timestamp='2007-06-03T22:43:10+01:00' visible='true' lat='50.9944792' lon='-1.3734389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325676' timestamp='2007-04-05T14:19:43+01:00' user='Dean Earley' visible='true' lat='50.929' lon='-1.42642' />
-  <node id='29815672' timestamp='2007-05-31T21:48:07+01:00' visible='true' lat='50.9896563' lon='-1.352833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254261' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9411583' lon='-1.3603439' />
-  <node id='29914404' timestamp='2007-06-03T16:22:48+01:00' visible='true' lat='50.9851737' lon='-1.3612866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990883' timestamp='2007-10-04T19:45:39+01:00' user='Gregory Williams' visible='true' lat='50.9997751' lon='-1.3536333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640018' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9116132' lon='-1.3674086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636799' timestamp='2007-04-29T02:33:05+01:00' user='Dean Earley' visible='true' lat='50.9519018' lon='-1.408253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903900' timestamp='2007-05-10T01:06:40+01:00' user='LivingWithDragons' visible='true' lat='50.9803976' lon='-1.4435435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380430' timestamp='2007-05-20T10:19:28+01:00' user='nickw' visible='true' lat='50.9434877' lon='-1.376151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244280' timestamp='2007-04-29T20:36:33+01:00' user='Andy Street' visible='true' lat='50.903417' lon='-1.3533498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504285' timestamp='2007-01-28T19:31:52+00:00' user='nickw' visible='true' lat='50.9985389' lon='-1.3486685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780758' timestamp='2007-06-22T21:09:20+01:00' user='Steve Chilton' visible='true' lat='50.9072964' lon='-1.4056203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961053' timestamp='2006-11-11T17:12:41+00:00' user='Dean Earley' visible='true' lat='50.9366636' lon='-1.3494815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487476' timestamp='2007-07-09T12:19:38+01:00' visible='true' lat='50.8981325' lon='-1.3945068'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997521' timestamp='2007-06-05T22:43:54+01:00' user='nickw' visible='true' lat='51.0108136' lon='-1.3585367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762557' timestamp='2007-05-31T21:17:10+01:00' visible='true' lat='50.9874851' lon='-1.3574882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114366' timestamp='2007-02-23T21:46:11+00:00' user='nickw' visible='true' lat='50.905018' lon='-1.3939287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575776' timestamp='2007-03-25T19:25:11+01:00' user='Dean Earley' visible='true' lat='50.9008867' lon='-1.3950994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998081' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.9904409' lon='-1.4083327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254291' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9772006' lon='-1.3419228' />
-  <node id='34278567' timestamp='2007-08-14T04:48:03+01:00' user='andrewpmk' visible='true' lat='50.907626' lon='-1.3975411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895696' timestamp='2007-04-29T01:53:38+01:00' user='Dean Earley' visible='true' lat='50.9637018' lon='-1.4116152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325691' timestamp='2007-04-05T14:19:44+01:00' user='Dean Earley' visible='true' lat='50.9221' lon='-1.41056' />
-  <node id='29548683' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9637969' lon='-1.3638897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217117' timestamp='2007-03-31T20:35:03+01:00' user='nickw' visible='true' lat='50.9193262' lon='-1.3573142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271128' timestamp='2007-11-28T12:24:05+00:00' user='Dean Earley' visible='true' lat='50.9345' lon='-1.39705'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Students Union' />
-  </node>
-  <node id='28249999' timestamp='2007-04-29T21:42:10+01:00' visible='true' lat='50.9172652' lon='-1.4420669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25302624' timestamp='2007-09-17T22:55:04+01:00' user='mike l' visible='true' lat='50.9742047' lon='-1.368778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359726' timestamp='2006-09-11T20:17:31+01:00' user='Dean Earley' visible='true' lat='50.9674714' lon='-1.3537677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180205' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9624107' lon='-1.4222814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122352460' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9108476' lon='-1.4244781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518815' timestamp='2007-04-05T14:19:46+01:00' user='Dean Earley' visible='true' lat='50.9406456' lon='-1.3691945' />
-  <node id='30124666' timestamp='2007-06-09T19:48:38+01:00' user='nickw' visible='true' lat='50.9310987' lon='-1.3520463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998529' timestamp='2007-06-05T23:13:21+01:00' user='nickw' visible='true' lat='50.9627025' lon='-1.4521092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306312' timestamp='2006-12-02T23:56:42+00:00' user='Dean Earley' visible='true' lat='50.9297496' lon='-1.3958566' />
-  <node id='28341772' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9125781' lon='-1.3608548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583085' timestamp='2007-11-19T13:56:13+00:00' user='nickw' visible='true' lat='50.9352312' lon='-1.4351948'>
-    <tag k='amenity' v='hospital' />
-    <tag k='name' v='Princess Anne Hospital' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='24984723' timestamp='2007-01-10T00:12:05+00:00' user='nickw' visible='true' lat='50.9432763' lon='-1.3899399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668282' timestamp='2007-01-04T21:06:33+00:00' user='nickw' visible='true' lat='50.986033' lon='-1.4120315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219708' timestamp='2007-12-08T20:21:42+00:00' user='nickw' visible='true' lat='50.9449141' lon='-1.4444809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561562' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9235427' lon='-1.4318751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254732' timestamp='2007-05-22T21:32:52+01:00' visible='true' lat='50.9954058' lon='-1.3632303' />
-  <node id='30956574' timestamp='2007-06-26T23:44:57+01:00' user='nickw' visible='true' lat='50.9273301' lon='-1.3509677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956682' timestamp='2007-06-26T23:49:18+01:00' user='nickw' visible='true' lat='50.9294995' lon='-1.3498899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148033' timestamp='2008-02-03T06:04:24+00:00' user='sladen' visible='true' lat='50.9091495' lon='-1.4023115' />
-  <node id='29001340' timestamp='2007-05-12T09:40:17+01:00' user='nickw' visible='true' lat='50.9228602' lon='-1.3816361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582972' timestamp='2007-05-02T23:57:50+01:00' visible='true' lat='50.9401322' lon='-1.423759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422980' timestamp='2007-04-29T20:37:31+01:00' user='Dean Earley' visible='true' lat='50.9371738' lon='-1.4117075' />
-  <node id='28252901' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9471796' lon='-1.4319106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249815' timestamp='2007-04-29T21:41:33+01:00' visible='true' lat='50.921429' lon='-1.4436286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677843' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.9001526' lon='-1.4431853' />
-  <node id='45116797' timestamp='2007-11-20T11:02:39+00:00' user='Gregory Williams' visible='true' lat='50.9751949' lon='-1.4492453'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='87825994' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8998837' lon='-1.4376695' />
-  <node id='27021747' timestamp='2007-04-03T00:52:34+01:00' user='Ben' visible='true' lat='50.9416678' lon='-1.401514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816640' timestamp='2007-05-31T22:10:50+01:00' visible='true' lat='50.987402' lon='-1.3621351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29839509' timestamp='2007-06-01T21:00:15+01:00' visible='true' lat='50.9782148' lon='-1.3520858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463016' timestamp='2007-05-22T00:01:31+01:00' user='nickw' visible='true' lat='50.9107172' lon='-1.4023145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704903' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.901174' lon='-1.450245'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='24949855' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9953395' lon='-1.3697414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341789' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9135802' lon='-1.3612323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838292' timestamp='2007-06-01T20:13:23+01:00' visible='true' lat='50.9956383' lon='-1.3531308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21599027' timestamp='2006-12-16T01:02:09+00:00' user='Dean Earley' visible='true' lat='50.9341036' lon='-1.3549887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160415525' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true' lat='50.9109938' lon='-1.4288383' />
-  <node id='29914258' timestamp='2007-06-03T16:05:27+01:00' visible='true' lat='50.9826322' lon='-1.3606864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464300' timestamp='2007-05-22T00:19:23+01:00' user='Dean Earley' visible='true' lat='50.9492411' lon='-1.4009599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263999' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9555285' lon='-1.371085' />
-  <node id='169424892' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true' lat='50.9328194' lon='-1.4429092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232085' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9151608' lon='-1.4120121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153334885' timestamp='2007-12-06T20:46:08+00:00' user='nickw' visible='true' lat='50.9435115' lon='-1.4495063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372783' timestamp='2007-05-01T10:05:21+01:00' visible='true' lat='50.9303957' lon='-1.4432055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796781' timestamp='2007-05-30T22:22:06+01:00' user='nickw' visible='true' lat='50.9144601' lon='-1.3509593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668102' timestamp='2007-01-04T21:05:35+00:00' user='nickw' visible='true' lat='50.9871836' lon='-1.4086144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243537' timestamp='2007-04-29T20:24:22+01:00' user='Dean Earley' visible='true' lat='50.9388772' lon='-1.4104594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956736' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.927521' lon='-1.3514792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949974' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9877616' lon='-1.3828534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600372' timestamp='2007-10-28T20:59:52+00:00' user='Nick Dyer' visible='true' lat='50.9023472' lon='-1.4136593'>
-    <tag k='amenity' v='cinema' />
-    <tag k='name' v='Odeon Leisure World' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='26728549' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.9036746' lon='-1.3704539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254278' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9641972' lon='-1.3373355' />
-  <node id='48967841' timestamp='2007-12-10T21:06:05+00:00' user='sladen' visible='true' lat='50.9044179' lon='-1.416513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325642' timestamp='2007-04-05T14:19:47+01:00' user='Dean Earley' visible='true' lat='50.918957' lon='-1.4022538' />
-  <node id='113965201' timestamp='2007-11-14T14:53:44+00:00' user='Nick Dyer' visible='true' lat='50.9553759' lon='-1.3645193' />
-  <node id='17722370' timestamp='2007-02-01T22:21:22+00:00' user='Dean Earley' visible='true' lat='50.9426308' lon='-1.3753098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908464' timestamp='2006-07-18T10:21:00+01:00' user='nickw' visible='true' lat='50.9371787' lon='-1.3650445' />
-  <node id='48965791' timestamp='2007-09-11T00:11:36+01:00' visible='true' lat='50.9012059' lon='-1.4062745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33130191' timestamp='2007-07-30T16:06:20+01:00' visible='true' lat='50.9158901' lon='-1.4076989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838295' timestamp='2007-06-01T20:13:23+01:00' visible='true' lat='50.9962474' lon='-1.3527821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582044' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9316874' lon='-1.4494998' />
-  <node id='18398769' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9441569' lon='-1.422902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173862' timestamp='2007-04-29T01:02:47+01:00' visible='true' lat='50.9423008' lon='-1.4315812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296311' timestamp='2007-01-19T09:52:17+00:00' user='Dean Earley' visible='true' lat='50.974324' lon='-1.3668881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909665' timestamp='2007-06-03T14:54:18+01:00' visible='true' lat='50.9687236' lon='-1.353902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930924' timestamp='2007-06-03T22:32:32+01:00' visible='true' lat='50.9985679' lon='-1.3529134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27434189' timestamp='2007-04-17T22:04:01+01:00' visible='true' lat='50.9294337' lon='-1.3858602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530516' timestamp='2007-06-03T15:31:40+01:00' visible='true' lat='50.987286' lon='-1.3532444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372726' timestamp='2007-05-01T10:05:14+01:00' visible='true' lat='50.9330949' lon='-1.4405403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388895' timestamp='2007-04-05T14:19:47+01:00' user='Dean Earley' visible='true' lat='50.9442' lon='-1.39151' />
-  <node id='21636750' timestamp='2007-05-22T00:20:15+01:00' user='Dean Earley' visible='true' lat='50.9461277' lon='-1.3961224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229563' timestamp='2007-06-12T00:14:37+01:00' user='nickw' visible='true' lat='50.9332038' lon='-1.3546591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743172' timestamp='2006-11-12T22:57:30+00:00' user='Dean Earley' visible='true' lat='50.9079386' lon='-1.4121143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721019' timestamp='2007-05-01T18:41:56+01:00' visible='true' lat='50.9734218' lon='-1.3755382'>
-    <tag k='highway' v='traffic_signals' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548700' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.9640191' lon='-1.3685432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228093' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.9428319' lon='-1.4180921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418523' timestamp='2007-05-02T00:35:22+01:00' visible='true' lat='50.9663013' lon='-1.3679557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325237' timestamp='2005-12-16T23:10:12+00:00' user='80n' visible='true' lat='50.9350389' lon='-1.3321086' />
-  <node id='87937489' timestamp='2007-10-26T15:03:37+01:00' user='Nick Dyer' visible='true' lat='50.967496' lon='-1.422301' />
-  <node id='29008399' timestamp='2007-05-12T15:11:58+01:00' user='nickw' visible='true' lat='50.9263182' lon='-1.3485719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924210' timestamp='2007-01-06T14:37:59+00:00' user='nickw' visible='true' lat='50.9570268' lon='-1.3619826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21637747' timestamp='2007-04-03T00:54:22+01:00' user='Ben' visible='true' lat='50.9365868' lon='-1.3934657'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='122328046' timestamp='2007-11-18T19:07:25+00:00' user='nickw' visible='true' lat='50.9151973' lon='-1.434339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073310' timestamp='2007-04-05T14:19:47+01:00' user='Dean Earley' visible='true' lat='50.9329249' lon='-1.3937328' />
-  <node id='29457979' timestamp='2007-05-21T22:59:03+01:00' user='Jodi Crisp' visible='true' lat='50.9248163' lon='-1.3604536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275869' timestamp='2006-11-26T00:15:48+00:00' user='nickw' visible='true' lat='50.9217668' lon='-1.4345948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325251' timestamp='2006-11-11T17:27:05+00:00' user='Dean Earley' visible='true' lat='50.928324' lon='-1.3176777' />
-  <node id='254869' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9200469' lon='-1.4785858' />
-  <node id='29505729' timestamp='2007-05-22T19:28:31+01:00' visible='true' lat='50.9894474' lon='-1.352559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259906' timestamp='2007-04-29T23:09:27+01:00' user='Andy Street' visible='true' lat='50.9010708' lon='-1.3506506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179481' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.9542526' lon='-1.4065196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122316833' timestamp='2007-11-18T19:04:32+00:00' user='nickw' visible='true' lat='50.9137099' lon='-1.4360078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700435' timestamp='2007-04-05T14:19:48+01:00' user='Dean Earley' visible='true' lat='50.9251762' lon='-1.3837687' />
-  <node id='12889428' timestamp='2008-01-01T18:32:31+00:00' user='Milliams' visible='true' lat='50.9477134' lon='-1.3656407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816725' timestamp='2007-05-31T22:13:28+01:00' visible='true' lat='50.9899915' lon='-1.3568134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931832' timestamp='2007-04-05T14:19:48+01:00' user='Dean Earley' visible='true' lat='50.9234261' lon='-1.3837523' />
-  <node id='254688' timestamp='2007-01-19T18:15:24+00:00' user='Dean Earley' visible='true' lat='50.950948' lon='-1.3637656' />
-  <node id='24949872' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9993156' lon='-1.3889724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26001569' timestamp='2007-02-18T20:16:52+00:00' visible='true' lat='50.925928' lon='-1.39327' />
-  <node id='657774' timestamp='2007-04-05T14:19:48+01:00' user='Dean Earley' visible='true' lat='50.9013375' lon='-1.3654892' />
-  <node id='245149960' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9090033' lon='-1.4028522' />
-  <node id='305592' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9971833' lon='-1.3922381' />
-  <node id='29464285' timestamp='2007-05-22T00:19:19+01:00' user='Dean Earley' visible='true' lat='50.9377894' lon='-1.4056582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28223261' timestamp='2007-04-29T17:07:39+01:00' visible='true' lat='50.96422' lon='-1.35945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976803' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9262256' lon='-1.4222408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298272' timestamp='2006-09-02T12:59:36+01:00' user='Dean Earley' visible='true' lat='50.9633874' lon='-1.3867874' />
-  <node id='25783082' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9403017' lon='-1.3553644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194448' timestamp='2007-04-29T08:20:34+01:00' visible='true' lat='50.9466746' lon='-1.4324505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463035' timestamp='2007-05-22T00:01:33+01:00' user='nickw' visible='true' lat='50.9088801' lon='-1.4049852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383000' timestamp='2007-04-05T14:19:48+01:00' user='Dean Earley' visible='true' lat='50.9273' lon='-1.41649' />
-  <node id='28372768' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9331254' lon='-1.4396215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242728' timestamp='2006-10-09T20:34:51+01:00' visible='true' lat='50.9385542' lon='-1.3874443' />
-  <node id='28582955' timestamp='2007-05-02T23:57:47+01:00' visible='true' lat='50.9433689' lon='-1.424863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124197' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9232754' lon='-1.3501342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305605' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9909391' lon='-1.3951564' />
-  <node id='66587922' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9317253' lon='-1.4493882' />
-  <node id='91130464' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true' lat='50.9295036' lon='-1.4301084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998612' timestamp='2007-06-05T23:13:59+01:00' user='nickw' visible='true' lat='50.9591362' lon='-1.4567779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668068' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9815055' lon='-1.411952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28257904' timestamp='2007-04-29T22:56:49+01:00' user='Andy Street' visible='true' lat='50.902083' lon='-1.3545212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657694' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9006292' lon='-1.3810929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241425' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.9458169' lon='-1.4504297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27523503' timestamp='2007-04-22T01:27:25+01:00' visible='true' lat='50.9730453' lon='-1.3746545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728562' timestamp='2007-03-23T22:53:03+00:00' user='nickw' visible='true' lat='50.9048469' lon='-1.3669896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021811' timestamp='2007-04-03T00:53:04+01:00' user='Ben' visible='true' lat='50.9370285' lon='-1.3996356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242743' timestamp='2007-04-03T00:53:58+01:00' user='Ben' visible='true' lat='50.9383201' lon='-1.3933092' />
-  <node id='17722342' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.9487164' lon='-1.3746389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984753' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9521835' lon='-1.4052706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816412' timestamp='2007-05-31T21:56:33+01:00' visible='true' lat='50.9896214' lon='-1.3554892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240306' timestamp='2007-04-29T20:02:53+01:00' user='Andy Street' visible='true' lat='50.9052435' lon='-1.3550284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689157' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.940405' lon='-1.3744706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331353' timestamp='2007-04-05T14:19:49+01:00' user='Dean Earley' visible='true' lat='50.9378012' lon='-1.3993924'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29711122' timestamp='2007-05-28T14:39:20+01:00' visible='true' lat='50.9814057' lon='-1.3611587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591411' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.916257' lon='-1.4569148' />
-  <node id='28252946' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.944793' lon='-1.4274572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762096' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9455664' lon='-1.346107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48884010' timestamp='2007-11-19T13:55:27+00:00' user='nickw' visible='true' lat='50.9407968' lon='-1.4488504'>
-    <tag k='amenity' v='post_office' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='700376' timestamp='2007-04-05T14:19:50+01:00' user='Dean Earley' visible='true' lat='50.9233276' lon='-1.394114' />
-  <node id='30290752' timestamp='2007-06-13T09:24:03+01:00' visible='true' lat='50.9653792' lon='-1.3768156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250093' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9164184' lon='-1.4508788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871573' timestamp='2007-06-02T18:40:14+01:00' visible='true' lat='50.9161447' lon='-1.35152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236125' timestamp='2007-04-29T19:25:45+01:00' user='Andy Street' visible='true' lat='50.9075253' lon='-1.3558686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636765' timestamp='2007-05-22T00:20:15+01:00' user='Dean Earley' visible='true' lat='50.9470937' lon='-1.3953944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657725' timestamp='2007-03-04T21:51:26+00:00' user='Dean Earley' visible='true' lat='50.9036101' lon='-1.3358312' />
-  <node id='25480576' timestamp='2007-01-27T23:25:56+00:00' visible='true' lat='50.9093398' lon='-1.3907397'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30224274' timestamp='2007-06-11T22:06:24+01:00' visible='true' lat='50.9829775' lon='-1.3549217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929003' timestamp='2007-06-03T21:58:04+01:00' visible='true' lat='50.9742705' lon='-1.3626359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91124448' timestamp='2007-10-29T08:16:32+00:00' user='nickw' visible='true' lat='50.9311818' lon='-1.4466233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325266' timestamp='2006-11-11T17:28:05+00:00' user='Dean Earley' visible='true' lat='50.9271464' lon='-1.3163435' />
-  <node id='30956710' timestamp='2007-06-26T23:49:21+01:00' user='nickw' visible='true' lat='50.9284727' lon='-1.3480026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507770' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9403892' lon='-1.3916193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964143' timestamp='2006-09-08T02:12:02+01:00' user='Dean Earley' visible='true' lat='50.919508' lon='-1.3807695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319615' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.918026' lon='-1.3988471' />
-  <node id='28348136' timestamp='2007-04-30T23:45:32+01:00' user='nickw' visible='true' lat='50.9333226' lon='-1.3656564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561528' timestamp='2007-03-24T16:33:45+00:00' user='Dean Earley' visible='true' lat='50.9213101' lon='-1.4283783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831128' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.912917' lon='-1.4085312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816776' timestamp='2007-05-31T22:15:44+01:00' visible='true' lat='50.9876049' lon='-1.360972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227253' timestamp='2006-10-23T20:52:59+01:00' user='nickw' visible='true' lat='50.9423409' lon='-1.4123457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194412' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9470129' lon='-1.4374325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232555' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true' lat='50.9085498' lon='-1.3702737'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Winning Post' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491408' timestamp='2007-12-07T21:00:53+00:00' user='Steve Jeapes' visible='true' lat='50.9255425' lon='-1.3913447'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='28384700' timestamp='2007-06-02T19:55:04+01:00' visible='true' lat='50.9690862' lon='-1.3617819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160211043' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9182453' lon='-1.390354' />
-  <node id='29862365' timestamp='2007-06-02T12:33:09+01:00' visible='true' lat='50.932694' lon='-1.4289035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290778' timestamp='2007-10-29T15:43:32+00:00' user='Dean Earley' visible='true' lat='50.9664864' lon='-1.3855653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254671' timestamp='2007-08-12T23:11:02+01:00' user='Edward' visible='true' lat='50.9244815' lon='-1.3811378' />
-  <node id='21141404' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.926252' lon='-1.4236929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109549' timestamp='2007-10-29T07:51:36+00:00' user='nickw' visible='true' lat='50.931863' lon='-1.4238193'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Malvern' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505717' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9939826' lon='-1.3549453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162240' timestamp='2008-01-04T19:26:28+00:00' user='nickw' visible='true' lat='50.9729881' lon='-1.3886838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957860' timestamp='2007-09-15T18:41:50+01:00' user='mike l' visible='true' lat='50.9558116' lon='-1.4523488'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21613501' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.981808' lon='-1.3932142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134835' timestamp='2007-05-15T20:53:15+01:00' user='nickw' visible='true' lat='50.9446435' lon='-1.3820796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154769819' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true' lat='50.9614665' lon='-1.4268088' />
-  <node id='30259414' timestamp='2007-06-12T21:04:30+01:00' visible='true' lat='50.9783438' lon='-1.358528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874142' timestamp='2007-06-02T19:43:15+01:00' visible='true' lat='50.9581742' lon='-1.3594299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419438' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9415666' lon='-1.3704297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998098' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.9863578' lon='-1.3987669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125570950' timestamp='2007-11-20T11:50:35+00:00' user='Nick Dyer' visible='true' lat='50.962622' lon='-1.4240823' />
-  <node id='20976667' timestamp='2007-04-02T23:00:14+01:00' user='Dean Earley' visible='true' lat='50.9309258' lon='-1.4187555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963764' timestamp='2007-05-22T00:20:15+01:00' user='Dean Earley' visible='true' lat='50.9388049' lon='-1.4058742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254308' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9867019' lon='-1.3458635' />
-  <node id='20976716' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.93315' lon='-1.4269691'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762113' timestamp='2007-05-10T00:36:44+01:00' visible='true' lat='50.9367236' lon='-1.3659447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636954' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.9201787' lon='-1.4136996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298232' timestamp='2007-01-06T14:30:57+00:00' user='Dean Earley' visible='true' lat='51.0167631' lon='-1.3402758' />
-  <node id='27021777' timestamp='2007-04-03T00:52:47+01:00' user='Ben' visible='true' lat='50.9473173' lon='-1.4034464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275626' timestamp='2006-11-25T23:47:30+00:00' user='nickw' visible='true' lat='50.9146552' lon='-1.429883'>
-    <tag k='name' v='ALBANY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923776' timestamp='2007-06-03T20:04:46+01:00' visible='true' lat='50.9830081' lon='-1.3624468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24667940' timestamp='2007-01-04T21:04:53+00:00' user='nickw' visible='true' lat='50.9891845' lon='-1.4107203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727685' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9138639' lon='-1.3571264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924088' timestamp='2007-02-18T20:19:18+00:00' visible='true' lat='50.938909' lon='-1.3737338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724260' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9240975' lon='-1.4144511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161246' timestamp='2007-06-10T18:18:26+01:00' visible='true' lat='50.9636973' lon='-1.3639491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615426' timestamp='2006-12-16T21:52:53+00:00' user='nickw' visible='true' lat='50.9010613' lon='-1.4048554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271027' timestamp='2007-11-28T12:24:05+00:00' user='Dean Earley' visible='true' lat='50.9554' lon='-1.37601'>
-    <tag k='landuse' v='farm' />
-  </node>
-  <node id='20110829' timestamp='2006-10-27T23:39:23+01:00' user='Dean Earley' visible='true' lat='50.9352708' lon='-1.3650236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325075' timestamp='2006-11-11T17:28:26+00:00' user='Dean Earley' visible='true' lat='50.9376674' lon='-1.5549333' />
-  <node id='21613440' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.9781395' lon='-1.4025687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579392' timestamp='2006-12-14T13:52:46+00:00' user='David Currie' visible='true' lat='50.9769061' lon='-1.4053144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310900' timestamp='2005-12-12T23:40:28+00:00' user='nickw' visible='true' lat='50.9157729' lon='-1.3970017' />
-  <node id='21613418' timestamp='2006-12-16T17:46:52+00:00' user='David Currie' visible='true' lat='50.9757635' lon='-1.4038208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671355' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9180814' lon='-1.4383104' />
-  <node id='206162251' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9732915' lon='-1.3844274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339130' timestamp='2007-05-02T00:35:38+01:00' visible='true' lat='50.9689519' lon='-1.3618302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409617' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9119462' lon='-1.434486' />
-  <node id='21091864' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9086629' lon='-1.4228674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925909' timestamp='2007-06-03T20:50:20+01:00' visible='true' lat='50.9817252' lon='-1.3647358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071305' timestamp='2006-08-11T02:48:04+01:00' user='Dean Earley' visible='true' lat='50.9210175' lon='-1.3587788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160216598' timestamp='2007-12-10T19:11:24+00:00' user='sladen' visible='true' lat='50.9136512' lon='-1.3901051' />
-  <node id='27467481' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.9290122' lon='-1.3796747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700484' timestamp='2007-04-05T14:19:50+01:00' user='Dean Earley' visible='true' lat='50.923812' lon='-1.373614' />
-  <node id='170446' timestamp='2005-08-14T22:31:08+01:00' visible='true' lat='50.9494781' lon='-1.370352' />
-  <node id='15433277' timestamp='2006-09-13T00:37:06+01:00' user='Dean Earley' visible='true' lat='50.8996328' lon='-1.355593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324985' timestamp='2006-09-02T12:59:36+01:00' user='Dean Earley' visible='true' lat='50.959668' lon='-1.4073384' />
-  <node id='160424532' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9043638' lon='-1.4140068' />
-  <node id='17721069' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9713418' lon='-1.3592514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830587' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9241959' lon='-1.3569339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249981' timestamp='2007-04-29T21:42:08+01:00' visible='true' lat='50.9156005' lon='-1.443142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162415' timestamp='2008-01-04T19:28:05+00:00' user='nickw' visible='true' lat='50.9722469' lon='-1.3820632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675838' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.9310707' lon='-1.3756275' />
-  <node id='157201962' timestamp='2007-12-08T20:09:10+00:00' user='nickw' visible='true' lat='50.9417674' lon='-1.4436142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730516' timestamp='2007-05-28T19:36:43+01:00' visible='true' lat='50.9706371' lon='-1.3691305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780839' timestamp='2007-06-22T21:09:59+01:00' user='Steve Chilton' visible='true' lat='50.9073369' lon='-1.4117648'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530323' timestamp='2007-11-28T12:24:30+00:00' user='Dean Earley' visible='true' lat='50.9798805' lon='-1.3565182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957183' timestamp='2006-11-10T21:58:51+00:00' user='nickw' visible='true' lat='50.9183222' lon='-1.4186137'>
-    <tag k='name' v='GREVILLE R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577115' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9640383' lon='-1.4234815' />
-  <node id='30780862' timestamp='2007-06-22T21:11:25+01:00' user='Steve Chilton' visible='true' lat='50.907795' lon='-1.4135364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600432' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9225216' lon='-1.4480795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161115' timestamp='2007-06-10T18:13:42+01:00' visible='true' lat='50.9710236' lon='-1.3553397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110497' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true' lat='50.9297751' lon='-1.4327246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110846' timestamp='2006-10-27T23:39:25+01:00' user='Dean Earley' visible='true' lat='50.9353216' lon='-1.3612913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331336' timestamp='2007-12-06T22:10:29+00:00' user='Dean Earley' visible='true' lat='51.0043' lon='-1.37102' />
-  <node id='21600469' timestamp='2007-12-16T23:37:41+00:00' user='blackadder' visible='true' lat='50.9311833' lon='-1.4493728'>
-    <tag k='name' v='Ordnance Survey HQ' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='25282092' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.975677' lon='-1.4089227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111081' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0095496' lon='-1.3946391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254839' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9067813' lon='-1.4162693' />
-  <node id='14727981' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9145879' lon='-1.4012465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275711' timestamp='2006-12-13T20:09:46+00:00' user='nickw' visible='true' lat='50.9214913' lon='-1.4280686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173845' timestamp='2007-04-29T01:02:33+01:00' visible='true' lat='50.9427498' lon='-1.4321901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114364' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9068971' lon='-1.3941134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831111' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9112649' lon='-1.4052228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664553' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9073975' lon='-1.4072878' />
-  <node id='28936008' timestamp='2007-05-11T00:59:49+01:00' visible='true' lat='50.9422578' lon='-1.4415396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718247' timestamp='2007-08-08T01:32:20+01:00' visible='true' lat='50.9355964' lon='-1.4445329' />
-  <node id='90659203' timestamp='2007-11-20T16:53:21+00:00' user='Nick Dyer' visible='true' lat='50.9047466' lon='-1.407547' />
-  <node id='29998908' timestamp='2007-06-05T23:28:48+01:00' user='nickw' visible='true' lat='50.9856324' lon='-1.4394143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621232' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9754911' lon='-1.3769902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661167' timestamp='2007-04-05T14:19:51+01:00' user='Dean Earley' visible='true' lat='50.9057755' lon='-1.3655332' />
-  <node id='29730511' timestamp='2007-05-28T19:36:39+01:00' visible='true' lat='50.9705778' lon='-1.3700315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194365' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9440422' lon='-1.439456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254549' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.925311' lon='-1.3633346' />
-  <node id='25640033' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9143139' lon='-1.3694642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133109' timestamp='2006-10-28T01:55:36+01:00' user='Dean Earley' visible='true' lat='50.9278486' lon='-1.3549204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141403' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9272974' lon='-1.4247224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115444' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9275275' lon='-1.4435371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180230' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.961696' lon='-1.4259693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930570' timestamp='2007-06-03T22:23:15+01:00' visible='true' lat='50.9916956' lon='-1.35378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706414' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.921885' lon='-1.380419'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='30290714' timestamp='2007-10-04T19:38:15+01:00' user='Gregory Williams' visible='true' lat='50.9683786' lon='-1.3808898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089280' timestamp='2007-06-08T18:20:45+01:00' visible='true' lat='50.9630548' lon='-1.3777777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325184' timestamp='2006-11-11T17:28:27+00:00' user='Dean Earley' visible='true' lat='50.9500729' lon='-1.3769413' />
-  <node id='18398389' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.9443721' lon='-1.4405822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706617' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9160481' lon='-1.3865732'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='31518173' timestamp='2007-07-09T22:35:55+01:00' visible='true' lat='50.9252717' lon='-1.3913992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971174' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9063202' lon='-1.3991332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305586' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9962392' lon='-1.3935041' />
-  <node id='29135434' timestamp='2007-05-15T20:57:25+01:00' user='nickw' visible='true' lat='50.9434156' lon='-1.3826992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781204' timestamp='2007-03-25T18:42:19+01:00' user='Dean Earley' visible='true' lat='50.8999485' lon='-1.3657099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157201977' timestamp='2007-12-08T20:09:11+00:00' user='nickw' visible='true' lat='50.9418551' lon='-1.4446175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613452' timestamp='2007-12-20T19:29:00+00:00' visible='true' lat='50.9762726' lon='-1.404819' />
-  <node id='29997570' timestamp='2007-06-05T22:44:02+01:00' user='nickw' visible='true' lat='50.9987123' lon='-1.3578215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971204' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9077748' lon='-1.4149317'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071220' timestamp='2006-08-11T02:47:58+01:00' user='Dean Earley' visible='true' lat='50.9202224' lon='-1.3712878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507791' timestamp='2007-05-22T00:20:16+01:00' user='Dean Earley' visible='true' lat='50.9488845' lon='-1.4032923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346977' timestamp='2007-04-30T23:26:38+01:00' user='nickw' visible='true' lat='50.900075' lon='-1.3627757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962302' timestamp='2007-11-14T14:56:38+00:00' user='Nick Dyer' visible='true' lat='50.9587563' lon='-1.36907'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Monks Brook Halt' />
-  </node>
-  <node id='325060' timestamp='2006-11-11T17:28:36+00:00' user='Dean Earley' visible='true' lat='50.9456934' lon='-1.4994776' />
-  <node id='18398404' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9783698' lon='-1.4262372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398442' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.9337213' lon='-1.4182354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254886' timestamp='2006-09-03T00:38:54+01:00' user='Dean Earley' visible='true' lat='50.9265792' lon='-1.4400017' />
-  <node id='26346808' timestamp='2007-03-04T18:57:58+00:00' user='Dean Earley' visible='true' lat='50.9159885' lon='-1.3704944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924312' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9838056' lon='-1.3682307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705967' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8881145' lon='-1.3936414' />
-  <node id='254342' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.958759' lon='-1.4236564' />
-  <node id='24984678' timestamp='2007-01-10T00:10:48+00:00' user='nickw' visible='true' lat='50.944287' lon='-1.3877521'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Stoneham Arms' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639920' timestamp='2007-02-04T22:51:16+00:00' user='Dean Earley' visible='true' lat='50.9001462' lon='-1.3818545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028841' timestamp='2006-09-08T23:06:50+01:00' user='Dean Earley' visible='true' lat='50.9271366' lon='-1.3628074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727672' timestamp='2007-03-25T18:42:33+01:00' user='Dean Earley' visible='true' lat='50.9009975' lon='-1.3724154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816287' timestamp='2007-05-31T21:52:23+01:00' visible='true' lat='50.9913012' lon='-1.3542101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107723' timestamp='2007-04-27T23:44:17+01:00' visible='true' lat='50.9328374' lon='-1.3893919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422994' timestamp='2007-05-22T00:20:16+01:00' user='Dean Earley' visible='true' lat='50.9478249' lon='-1.3960223' />
-  <node id='21624984' timestamp='2006-12-17T19:47:27+00:00' user='Dean Earley' visible='true' lat='50.8987934' lon='-1.365835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29709172' timestamp='2007-05-28T12:35:19+01:00' visible='true' lat='50.9881051' lon='-1.3524454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632223' timestamp='2007-05-26T19:21:23+01:00' visible='true' lat='50.9574129' lon='-1.3691505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707279' timestamp='2007-05-28T11:52:21+01:00' visible='true' lat='50.9864401' lon='-1.3611917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783124' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9451336' lon='-1.3478945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727947' timestamp='2007-02-18T21:25:16+00:00' visible='true' lat='50.915916' lon='-1.3965314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90593912' timestamp='2007-10-28T20:36:49+00:00' user='Nick Dyer' visible='true' lat='50.9118683' lon='-1.4477395' />
-  <node id='160402236' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9138349' lon='-1.4476524' />
-  <node id='20954600' timestamp='2007-04-03T00:53:47+01:00' user='Ben' visible='true' lat='50.9387169' lon='-1.3979536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296296' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9816217' lon='-1.3603576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972829' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.902291' lon='-1.3942421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461227' timestamp='2007-12-10T19:19:58+00:00' user='sladen' visible='true' lat='50.9056252' lon='-1.3970745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903068' timestamp='2007-05-09T23:03:41+01:00' visible='true' lat='50.9418063' lon='-1.3684607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575731' timestamp='2007-03-24T16:33:45+00:00' user='Dean Earley' visible='true' lat='50.9014626' lon='-1.3997303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259891' timestamp='2007-04-29T23:09:25+01:00' user='Andy Street' visible='true' lat='50.903558' lon='-1.3470533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508731' timestamp='2007-06-17T22:15:46+01:00' visible='true' lat='50.974507' lon='-1.3532473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2417459' timestamp='2007-01-19T18:15:25+00:00' user='Dean Earley' visible='true' lat='50.950592' lon='-1.3645581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25765747' timestamp='2007-02-11T00:33:37+00:00' visible='true' lat='50.9131988' lon='-1.3934344' />
-  <node id='28252965' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.9449406' lon='-1.4314366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613425' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9759887' lon='-1.4025851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999038' timestamp='2007-06-05T23:29:03+01:00' user='nickw' visible='true' lat='50.9991624' lon='-1.4271366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071276' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9177957' lon='-1.3593006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21661749' timestamp='2006-12-20T23:57:06+00:00' user='nickw' visible='true' lat='50.9008872' lon='-1.40524'>
-    <tag k='name' v='LANSD HILL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896264' timestamp='2007-09-17T23:09:05+01:00' user='mike l' visible='true' lat='50.9697971' lon='-1.3902185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305575' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9954238' lon='-1.3961864' />
-  <node id='29711907' timestamp='2007-05-28T14:57:27+01:00' visible='true' lat='50.9850531' lon='-1.3550349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28141322' timestamp='2007-04-28T17:57:53+01:00' visible='true' lat='50.9698032' lon='-1.3574325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275754' timestamp='2006-11-25T23:58:10+00:00' user='nickw' visible='true' lat='50.9157369' lon='-1.4297106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30410992' timestamp='2007-06-15T23:09:50+01:00' visible='true' lat='50.9650273' lon='-1.3574115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621217' timestamp='2007-05-26T11:34:57+01:00' visible='true' lat='50.9637157' lon='-1.3589013'>
-    <tag k='highway' v='bus_stop' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130952' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.931816' lon='-1.3586534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636927' timestamp='2006-12-18T21:41:04+00:00' user='nickw' visible='true' lat='50.9089494' lon='-1.4160347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249883' timestamp='2007-04-29T21:41:43+01:00' visible='true' lat='50.9201647' lon='-1.4410809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240341' timestamp='2007-04-29T20:02:57+01:00' user='Andy Street' visible='true' lat='50.907743' lon='-1.3496116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874067' timestamp='2007-10-12T14:12:03+01:00' user='SteveC' visible='true' lat='50.9374211' lon='-1.4380328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762109' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9381556' lon='-1.3565966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707223' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8506967' lon='-1.317897'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='675860' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true' lat='50.9286797' lon='-1.3714132' />
-  <node id='387807' timestamp='2007-04-05T14:19:54+01:00' user='Dean Earley' visible='true' lat='50.9274' lon='-1.40262' />
-  <node id='305622' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='50.9854037' lon='-1.3882242' />
-  <node id='15359692' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9673068' lon='-1.351979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133094' timestamp='2006-10-28T01:55:34+01:00' user='Dean Earley' visible='true' lat='50.9278107' lon='-1.3554018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331323' timestamp='2006-11-11T21:25:08+00:00' user='Dean Earley' visible='true' lat='51.0012' lon='-1.35887' />
-  <node id='319641' timestamp='2005-12-14T22:03:25+00:00' user='nickw' visible='true' lat='50.9221673' lon='-1.3958216' />
-  <node id='29930871' timestamp='2007-06-03T22:30:57+01:00' visible='true' lat='50.9992575' lon='-1.3535372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925341' timestamp='2007-06-03T20:36:33+01:00' visible='true' lat='50.9807836' lon='-1.3648769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613467' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9764264' lon='-1.3992669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226866' timestamp='2007-06-11T22:28:56+01:00' visible='true' lat='50.9807297' lon='-1.3533806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388945' timestamp='2007-04-05T14:19:54+01:00' user='Dean Earley' visible='true' lat='50.9408941' lon='-1.3974793' />
-  <node id='29998957' timestamp='2007-06-05T23:28:54+01:00' user='nickw' visible='true' lat='50.9879085' lon='-1.4415202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600599' timestamp='2007-09-24T20:31:07+01:00' user='mike l' visible='true' lat='50.9932289' lon='-1.4027727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305224' timestamp='2006-11-22T18:19:07+00:00' user='southglos' visible='true' lat='50.9953375' lon='-1.358576' />
-  <node id='29999088' timestamp='2007-06-05T23:29:06+01:00' user='nickw' visible='true' lat='50.989009' lon='-1.4344476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689069' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9317914' lon='-1.3959217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325098' timestamp='2006-05-09T11:25:12+01:00' user='80n' visible='true' lat='50.9233451' lon='-1.583313' />
-  <node id='11419590' timestamp='2006-07-24T21:02:34+01:00' user='nickw' visible='true' lat='50.9190214' lon='-1.4320738' />
-  <node id='254325' timestamp='2005-11-15T15:38:59+00:00' user='nickw' visible='true' lat='50.9564041' lon='-1.4413511' />
-  <node id='14743157' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9217817' lon='-1.4309513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808668' timestamp='2007-11-11T18:09:35+00:00' user='Dean Earley' visible='true' lat='50.9151811' lon='-1.3589761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964058' timestamp='2006-11-12T00:52:17+00:00' user='nickw' visible='true' lat='50.9987743' lon='-1.4431532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380441' timestamp='2007-05-20T10:19:29+01:00' user='nickw' visible='true' lat='50.9402605' lon='-1.3722788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482294' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8947873' lon='-1.4248675' />
-  <node id='21600503' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9190681' lon='-1.4350121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632176' timestamp='2007-05-26T19:20:23+01:00' visible='true' lat='50.9580764' lon='-1.3687674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227219' timestamp='2006-10-23T20:52:56+01:00' user='nickw' visible='true' lat='50.9331139' lon='-1.4116044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372802' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9296247' lon='-1.443393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21586133' timestamp='2006-12-14T23:57:08+00:00' user='Dean Earley' visible='true' lat='50.9673691' lon='-1.3319843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87868991' timestamp='2007-10-26T13:30:16+01:00' user='Nick Dyer' visible='true' lat='50.9162138' lon='-1.4133516'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Blue Keys' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='29872356' timestamp='2007-06-02T19:03:54+01:00' visible='true' lat='50.9177196' lon='-1.3508453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461822' timestamp='2007-05-21T23:51:10+01:00' user='nickw' visible='true' lat='50.9002267' lon='-1.3984686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659235' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.902813' lon='-1.4063351' />
-  <node id='16963747' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9348121' lon='-1.4075276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325657' timestamp='2007-04-05T14:19:54+01:00' user='Dean Earley' visible='true' lat='50.9268' lon='-1.42884' />
-  <node id='325007' timestamp='2006-11-11T17:30:06+00:00' user='Dean Earley' visible='true' lat='50.9561578' lon='-1.4123014' />
-  <node id='29009228' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9302532' lon='-1.3547058'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980715' timestamp='2008-01-29T12:06:37+00:00' user='Dean Earley' visible='true' lat='50.9573404' lon='-1.3447556' />
-  <node id='298306' timestamp='2006-11-11T17:30:06+00:00' user='Dean Earley' visible='true' lat='50.9490956' lon='-1.3954691' />
-  <node id='87248243' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8900399' lon='-1.3982335' />
-  <node id='29931354' timestamp='2007-06-03T22:43:05+01:00' visible='true' lat='50.9940983' lon='-1.3737408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171760' timestamp='2007-05-16T23:48:01+01:00' user='nickw' visible='true' lat='50.9402152' lon='-1.3885549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838588' timestamp='2007-09-17T23:09:08+01:00' user='mike l' visible='true' lat='50.9708222' lon='-1.3898048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142617022' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9135688' lon='-1.4162206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956691' timestamp='2007-06-26T23:49:19+01:00' user='nickw' visible='true' lat='50.9303134' lon='-1.3476847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222201' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9105933' lon='-1.430512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662043' timestamp='2007-10-28T21:46:58+00:00' user='Nick Dyer' visible='true' lat='50.9068725' lon='-1.4100515' />
-  <node id='21091828' timestamp='2006-11-19T12:09:11+00:00' user='nickw' visible='true' lat='50.9161031' lon='-1.425905'>
-    <tag k='name' v='DYER' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957841' timestamp='2007-09-09T12:08:40+01:00' user='mike l' visible='true' lat='50.9412328' lon='-1.4294884'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='27496129' timestamp='2007-04-20T23:53:11+01:00' user='Dean Earley' visible='true' lat='50.9064919' lon='-1.4067038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700514' timestamp='2007-04-05T14:19:55+01:00' user='Dean Earley' visible='true' lat='50.9251402' lon='-1.3677859' />
-  <node id='254916' timestamp='2007-04-03T00:52:23+01:00' user='Dean Earley' visible='true' lat='50.9386004' lon='-1.4550511' />
-  <node id='28903380' timestamp='2007-05-09T23:24:27+01:00' visible='true' lat='50.9470647' lon='-1.3641403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163087' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.9707144' lon='-1.3839307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707133' timestamp='2007-04-05T14:19:55+01:00' user='Dean Earley' visible='true' lat='50.8587969' lon='-1.3346301' />
-  <node id='14601347' timestamp='2006-09-01T00:16:13+01:00' user='nickw' visible='true' lat='50.906868' lon='-1.5100622'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30290713' timestamp='2007-10-04T19:38:25+01:00' user='Gregory Williams' visible='true' lat='50.9681146' lon='-1.3803814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745484' timestamp='2007-01-19T18:27:15+00:00' user='Dean Earley' visible='true' lat='50.9732076' lon='-1.374028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089104' timestamp='2007-06-08T18:12:06+01:00' visible='true' lat='50.9661162' lon='-1.3788521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269326' timestamp='2006-10-22T23:24:26+01:00' user='Ben' visible='true' lat='50.9827876' lon='-1.3832856' />
-  <node id='25639954' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9031443' lon='-1.3767997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110849' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9340975' lon='-1.3625762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584178' timestamp='2007-05-03T00:06:27+01:00' visible='true' lat='50.9409839' lon='-1.4350267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700499' timestamp='2007-04-05T14:19:55+01:00' user='Dean Earley' visible='true' lat='50.9299058' lon='-1.3735515' />
-  <node id='232014685' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9300806' lon='-1.371294' />
-  <node id='24984708' timestamp='2007-01-10T00:11:50+00:00' user='nickw' visible='true' lat='50.9448097' lon='-1.3812879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096953' timestamp='2007-06-08T23:24:14+01:00' visible='true' lat='50.9656081' lon='-1.3738501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194882' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9425452' lon='-1.4137567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700414' timestamp='2007-04-05T14:19:55+01:00' user='Dean Earley' visible='true' lat='50.9273902' lon='-1.3877234' />
-  <node id='14745433' timestamp='2007-10-31T15:18:30+00:00' user='Dean Earley' visible='true' lat='50.9661032' lon='-1.3512966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632415' timestamp='2007-05-26T19:26:27+01:00' visible='true' lat='50.9555654' lon='-1.3691728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796780' timestamp='2007-05-30T22:22:05+01:00' user='nickw' visible='true' lat='50.914577' lon='-1.3542304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689093' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9430057' lon='-1.3871704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122316818' timestamp='2007-11-18T19:01:08+00:00' user='nickw' visible='true' lat='50.9141796' lon='-1.4357396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830664' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9239454' lon='-1.3640263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706733' timestamp='2007-11-23T09:08:21+00:00' user='Dean Earley' visible='true' lat='50.8923185' lon='-1.3853713'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='90581819' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9163707' lon='-1.4487437' />
-  <node id='25896247' timestamp='2007-02-13T19:24:09+00:00' user='Dean Earley' visible='true' lat='50.9553427' lon='-1.4028617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668163' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9854891' lon='-1.3850407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275694' timestamp='2006-11-25T23:51:14+00:00' user='nickw' visible='true' lat='50.9202076' lon='-1.4342372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157192561' timestamp='2007-12-08T20:01:50+00:00' user='nickw' visible='true' lat='50.9403215' lon='-1.4502596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507757' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9329557' lon='-1.3978872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150392' timestamp='2008-02-03T06:15:16+00:00' user='sladen' visible='true' lat='50.9094363' lon='-1.4075901' />
-  <node id='423277' timestamp='2007-09-25T18:47:49+01:00' user='mike l' visible='true' lat='50.9391003' lon='-1.3924353' />
-  <node id='48950447' timestamp='2007-09-10T23:28:30+01:00' visible='true' lat='50.9131981' lon='-1.3953556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952632' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9338418' lon='-1.3796008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114347' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9048133' lon='-1.3919848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743168' timestamp='2007-04-03T00:52:24+01:00' user='Dean Earley' visible='true' lat='50.9100598' lon='-1.4188326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464240' timestamp='2007-05-22T00:19:10+01:00' user='Dean Earley' visible='true' lat='50.9373775' lon='-1.4192905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161128' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9739076' lon='-1.3524083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928422' timestamp='2007-06-03T21:48:28+01:00' visible='true' lat='50.980468' lon='-1.367668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141460' timestamp='2007-09-05T17:46:24+01:00' user='mike l' visible='true' lat='50.9346572' lon='-1.3963766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675843' timestamp='2007-04-05T14:19:56+01:00' user='Dean Earley' visible='true' lat='50.9335375' lon='-1.369338' />
-  <node id='29468597' timestamp='2007-05-22T01:07:07+01:00' user='Dean Earley' visible='true' lat='50.9163316' lon='-1.4570765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310852' timestamp='2005-12-12T23:32:04+00:00' user='nickw' visible='true' lat='50.9161592' lon='-1.3970661' />
-  <node id='29132668' timestamp='2007-05-15T20:24:19+01:00' user='nickw' visible='true' lat='50.9272106' lon='-1.3785773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20012525' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8960206' lon='-1.3923379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677151' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8970616' lon='-1.4397092' />
-  <node id='298293' timestamp='2007-04-03T00:53:48+01:00' user='Ben' visible='true' lat='50.9532916' lon='-1.3999264' />
-  <node id='29466089' timestamp='2007-05-22T00:38:06+01:00' user='Dean Earley' visible='true' lat='50.9830743' lon='-1.4462156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794377' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.922143' lon='-1.3636315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148949' timestamp='2008-02-03T06:08:19+00:00' user='sladen' visible='true' lat='50.9040889' lon='-1.4020111' />
-  <node id='254749' timestamp='2007-04-29T02:33:52+01:00' user='Dean Earley' visible='true' lat='50.9515976' lon='-1.4041179' />
-  <node id='24984783' timestamp='2007-01-10T00:15:03+00:00' user='nickw' visible='true' lat='50.9434453' lon='-1.3858076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179525' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9564109' lon='-1.400555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194335' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9444543' lon='-1.4357779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183749' timestamp='2007-04-29T02:25:40+01:00' user='Dean Earley' visible='true' lat='50.9493586' lon='-1.4056174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726562' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9126239' lon='-1.4006109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092041' timestamp='2007-10-12T14:11:08+01:00' user='SteveC' visible='true' lat='50.9313845' lon='-1.447766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160425495' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.904104' lon='-1.413157' />
-  <node id='15359709' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9687553' lon='-1.3509289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998107' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.9854823' lon='-1.3921314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471858' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9393397' lon='-1.3664238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856371' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9471973' lon='-1.3918087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997547' timestamp='2007-06-05T22:43:59+01:00' user='nickw' visible='true' lat='51.0007127' lon='-1.3483649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632428' timestamp='2007-05-26T19:26:49+01:00' visible='true' lat='50.9576518' lon='-1.3674777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474653' timestamp='2007-04-05T14:19:57+01:00' user='Dean Earley' visible='true' lat='50.9333328' lon='-1.3507235' />
-  <node id='29549374' timestamp='2007-05-24T11:22:50+01:00' visible='true' lat='50.9635279' lon='-1.3734835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924293' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9674687' lon='-1.3841241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222321' timestamp='2007-12-08T20:23:17+00:00' user='nickw' visible='true' lat='50.9464302' lon='-1.4440227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179440' timestamp='2007-04-29T01:53:15+01:00' user='Dean Earley' visible='true' lat='50.963063' lon='-1.4199116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704603' timestamp='2007-05-28T10:48:38+01:00' visible='true' lat='50.9759637' lon='-1.3507027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229557' timestamp='2007-06-12T00:14:35+01:00' user='nickw' visible='true' lat='50.9334229' lon='-1.3538446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469889' timestamp='2007-04-05T14:19:57+01:00' user='Dean Earley' visible='true' lat='50.9163834' lon='-1.4257869' />
-  <node id='142617005' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9134717' lon='-1.4172288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668037' timestamp='2007-01-04T21:05:30+00:00' user='nickw' visible='true' lat='50.9897097' lon='-1.3987605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398459' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.9191249' lon='-1.4141515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675768' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9071187' lon='-1.4233194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325685' timestamp='2007-04-05T14:19:58+01:00' user='Dean Earley' visible='true' lat='50.9191' lon='-1.4146' />
-  <node id='700483' timestamp='2007-04-05T14:19:58+01:00' user='Dean Earley' visible='true' lat='50.9234214' lon='-1.3745046' />
-  <node id='254440' timestamp='2007-09-23T16:33:13+01:00' user='mike l' visible='true' lat='50.9418849' lon='-1.3737112' />
-  <node id='245145573' timestamp='2008-02-03T05:57:20+00:00' user='sladen' visible='true' lat='50.9139876' lon='-1.4020883' />
-  <node id='28194450' timestamp='2007-04-29T08:20:34+01:00' visible='true' lat='50.9461088' lon='-1.4327826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347762' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9307058' lon='-1.3614447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325014' timestamp='2006-09-02T12:59:36+01:00' user='Dean Earley' visible='true' lat='50.9580148' lon='-1.4191221' />
-  <node id='29464244' timestamp='2007-05-22T00:19:11+01:00' user='Dean Earley' visible='true' lat='50.9348453' lon='-1.4120825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518771' timestamp='2006-10-27T00:48:11+01:00' user='Dean Earley' visible='true' lat='50.9146504' lon='-1.3928828' />
-  <node id='28348142' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9332976' lon='-1.3642856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325187' timestamp='2006-11-11T17:20:01+00:00' user='Dean Earley' visible='true' lat='50.9499377' lon='-1.3757965' />
-  <node id='28874046' timestamp='2007-05-08T14:50:18+01:00' visible='true' lat='50.9367206' lon='-1.4376253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640040' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9139762' lon='-1.3595273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949898' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9934639' lon='-1.3789596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296289' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9767614' lon='-1.3641228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089141' timestamp='2007-06-13T09:24:39+01:00' visible='true' lat='50.9647366' lon='-1.3793773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961016' timestamp='2006-11-11T17:12:00+00:00' user='Dean Earley' visible='true' lat='50.9319492' lon='-1.5642794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745429' timestamp='2007-10-31T15:18:30+00:00' user='Dean Earley' visible='true' lat='50.9658905' lon='-1.3510221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27496136' timestamp='2007-04-20T23:53:12+01:00' user='Dean Earley' visible='true' lat='50.9150054' lon='-1.3303403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388923' timestamp='2007-04-05T14:19:58+01:00' user='Dean Earley' visible='true' lat='50.9441' lon='-1.39677' />
-  <node id='29929158' timestamp='2007-06-03T22:00:32+01:00' visible='true' lat='50.9764637' lon='-1.3636494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092037' timestamp='2007-05-04T01:58:40+01:00' user='Dean Earley' visible='true' lat='50.9413964' lon='-1.4512173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608192' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.8989673' lon='-1.377076'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Woolston' />
-  </node>
-  <node id='157223777' timestamp='2007-12-08T20:24:11+00:00' user='nickw' visible='true' lat='50.946255' lon='-1.4481749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431995' timestamp='2007-06-16T16:26:10+01:00' visible='true' lat='50.9709086' lon='-1.3520437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20954592' timestamp='2006-11-10T08:43:41+00:00' user='nickw' visible='true' lat='50.9299702' lon='-1.3936786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636951' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.9207265' lon='-1.4141722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124202' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.9224677' lon='-1.3485349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254836' timestamp='2007-04-03T00:51:30+01:00' user='Dean Earley' visible='true' lat='50.9102815' lon='-1.4192343' />
-  <node id='87248227' timestamp='2007-10-25T21:13:37+01:00' user='Nick Dyer' visible='true' lat='50.896699' lon='-1.39674' />
-  <node id='661195' timestamp='2007-04-05T14:19:58+01:00' user='Dean Earley' visible='true' lat='50.9246661' lon='-1.3876269' />
-  <node id='28936015' timestamp='2007-05-11T00:59:52+01:00' visible='true' lat='50.9416858' lon='-1.4403679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='442383' timestamp='2007-04-05T14:19:58+01:00' user='Dean Earley' visible='true' lat='50.9211' lon='-1.39784' />
-  <node id='27563297' timestamp='2007-04-23T22:47:36+01:00' visible='true' lat='50.9298063' lon='-1.3974197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254536' timestamp='2006-09-02T18:32:39+01:00' user='Dean Earley' visible='true' lat='50.9125964' lon='-1.400432' />
-  <node id='8596806' timestamp='2007-12-10T21:07:14+00:00' user='sladen' visible='true' lat='50.9050241' lon='-1.4128652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87851394' timestamp='2007-10-26T13:09:48+01:00' user='Nick Dyer' visible='true' lat='50.8993802' lon='-1.3795291' />
-  <node id='169435800' timestamp='2007-12-14T21:43:12+00:00' user='nickw' visible='true' lat='50.9372265' lon='-1.431908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071261' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9194432' lon='-1.3609855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718235' timestamp='2007-08-08T01:28:52+01:00' visible='true' lat='50.9352069' lon='-1.4455543' />
-  <node id='20130925' timestamp='2006-10-28T01:45:32+01:00' user='Dean Earley' visible='true' lat='50.9344491' lon='-1.3606478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254289' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9758007' lon='-1.3424554' />
-  <node id='160283354' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.917082' lon='-1.4896773' />
-  <node id='20964852' timestamp='2006-12-16T17:47:17+00:00' user='David Currie' visible='true' lat='51.002133' lon='-1.4339595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608162' timestamp='2007-04-05T14:19:59+01:00' user='Dean Earley' visible='true' lat='50.8960129' lon='-1.3621292' />
-  <node id='20110894' timestamp='2006-10-27T23:39:31+01:00' user='Dean Earley' visible='true' lat='50.934908' lon='-1.3662036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194842' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.9453549' lon='-1.4083796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509895' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9887518' lon='-1.3593018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728175' timestamp='2007-04-29T02:05:43+01:00' user='Dean Earley' visible='true' lat='50.9523377' lon='-1.4041177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87228870' timestamp='2007-10-25T20:56:26+01:00' user='Nick Dyer' visible='true' lat='50.9372682' lon='-1.4466816' />
-  <node id='28243700' timestamp='2007-04-29T20:25:18+01:00' user='Dean Earley' visible='true' lat='50.9387316' lon='-1.4102503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194894' timestamp='2007-04-29T08:58:00+01:00' user='Dean Earley' visible='true' lat='50.9435992' lon='-1.4083875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325029' timestamp='2005-12-16T21:53:47+00:00' user='80n' visible='true' lat='50.9592085' lon='-1.4395678' />
-  <node id='28418337' timestamp='2007-05-02T00:33:13+01:00' visible='true' lat='50.9659399' lon='-1.3618867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942867' timestamp='2006-07-19T01:50:15+01:00' user='Dean Earley' visible='true' lat='50.9144799' lon='-1.3393226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254883' timestamp='2007-02-06T00:16:36+00:00' user='Dean Earley' visible='true' lat='50.911035' lon='-1.4007744' />
-  <node id='324343' timestamp='2007-02-18T21:25:31+00:00' visible='true' lat='50.9173472' lon='-1.4028377' />
-  <node id='269323' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9858184' lon='-1.3850812' />
-  <node id='29909658' timestamp='2007-06-03T14:54:17+01:00' visible='true' lat='50.9684287' lon='-1.3541394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971205' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9077748' lon='-1.4142956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107323' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.9352471' lon='-1.3527022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089100' timestamp='2007-06-08T18:12:06+01:00' visible='true' lat='50.9656726' lon='-1.3781008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418525' timestamp='2007-05-02T00:35:22+01:00' visible='true' lat='50.9679845' lon='-1.3675203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178441' timestamp='2007-10-04T19:44:17+01:00' user='Gregory Williams' visible='true' lat='50.9985493' lon='-1.3539017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325644' timestamp='2007-04-05T14:19:59+01:00' user='Dean Earley' visible='true' lat='50.9176' lon='-1.40142' />
-  <node id='29998974' timestamp='2007-06-05T23:28:56+01:00' user='nickw' visible='true' lat='50.9887589' lon='-1.4355602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123655' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9319929' lon='-1.4454915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447503' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9086198' lon='-1.389678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507801' timestamp='2006-12-09T09:51:43+00:00' user='nickw' visible='true' lat='50.9429' lon='-1.3969299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160278848' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9118978' lon='-1.4492768' />
-  <node id='17721084' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.9709765' lon='-1.3504635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783121' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9468109' lon='-1.3472985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250083' timestamp='2007-04-29T21:42:26+01:00' visible='true' lat='50.9156214' lon='-1.451569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134161' timestamp='2007-05-15T20:47:36+01:00' user='nickw' visible='true' lat='50.9408429' lon='-1.3892423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591254' timestamp='2007-01-28T00:06:57+00:00' visible='true' lat='50.9203092' lon='-1.4102822'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='245148868' timestamp='2008-02-03T06:07:49+00:00' user='sladen' visible='true' lat='50.9034177' lon='-1.4010412' />
-  <node id='28583008' timestamp='2007-05-02T23:57:53+01:00' visible='true' lat='50.9397508' lon='-1.431521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684701' timestamp='2007-10-30T17:26:33+00:00' user='Nick Dyer' visible='true' lat='50.9616304' lon='-1.4232348' />
-  <node id='13565140' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9381135' lon='-1.3607501'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25340628' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9651508' lon='-1.3702321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227230' timestamp='2007-04-29T20:37:33+01:00' user='Dean Earley' visible='true' lat='50.9359356' lon='-1.4160428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348320' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9240941' lon='-1.3595176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372734' timestamp='2007-05-01T10:05:15+01:00' visible='true' lat='50.9299373' lon='-1.4421219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387804' timestamp='2007-04-05T14:19:59+01:00' user='Dean Earley' visible='true' lat='50.927' lon='-1.40363' />
-  <node id='91109263' timestamp='2007-10-29T07:50:30+00:00' user='nickw' visible='true' lat='50.935206' lon='-1.4220909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173950' timestamp='2007-04-29T01:03:20+01:00' visible='true' lat='50.9421224' lon='-1.4353792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298238' timestamp='2006-08-11T09:59:02+01:00' user='80n' visible='true' lat='51.0030138' lon='-1.3553467' />
-  <node id='28418516' timestamp='2007-05-24T10:51:06+01:00' visible='true' lat='50.96667' lon='-1.3640904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504291' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='50.9994391' lon='-1.3455296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816595' timestamp='2007-05-31T22:07:49+01:00' visible='true' lat='50.9898448' lon='-1.3560415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636736' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.951132' lon='-1.4071269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388889' timestamp='2007-04-05T14:19:59+01:00' user='Dean Earley' visible='true' lat='50.9423875' lon='-1.3914576' />
-  <node id='29462602' timestamp='2007-05-21T23:56:38+01:00' user='nickw' visible='true' lat='50.9049626' lon='-1.4009718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815076' timestamp='2007-05-31T21:31:04+01:00' visible='true' lat='50.9875399' lon='-1.3540125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249901' timestamp='2007-04-29T21:41:45+01:00' visible='true' lat='50.9161594' lon='-1.4476683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225800' timestamp='2007-06-11T22:16:47+01:00' visible='true' lat='50.983127' lon='-1.3561829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243474' timestamp='2007-04-29T20:23:53+01:00' user='Dean Earley' visible='true' lat='50.9400844' lon='-1.408127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305227' timestamp='2007-01-06T14:30:50+00:00' user='Dean Earley' visible='true' lat='50.9944124' lon='-1.3586707' />
-  <node id='28180215' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9621345' lon='-1.4259607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246357' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.938517' lon='-1.4260183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107342' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.930027' lon='-1.35391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296605' timestamp='2007-01-19T10:19:54+00:00' user='Dean Earley' visible='true' lat='50.9704843' lon='-1.3633786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871068' timestamp='2007-06-02T18:20:20+01:00' visible='true' lat='50.9342523' lon='-1.4363359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958652' timestamp='2007-09-10T23:55:12+01:00' visible='true' lat='50.9062663' lon='-1.4003591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998087' timestamp='2007-06-05T23:00:24+01:00' user='nickw' visible='true' lat='50.98844' lon='-1.4053329'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150415' timestamp='2008-02-03T06:15:24+00:00' user='sladen' visible='true' lat='50.9092739' lon='-1.4070665' />
-  <node id='42141693' timestamp='2007-09-05T17:46:41+01:00' user='mike l' visible='true' lat='50.935878' lon='-1.3939747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275704' timestamp='2006-11-25T23:51:18+00:00' user='nickw' visible='true' lat='50.923614' lon='-1.4326678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544316' timestamp='2007-04-05T14:20:06+01:00' user='Dean Earley' visible='true' lat='50.925' lon='-1.39668' />
-  <node id='24924297' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9687448' lon='-1.3830911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721017' timestamp='2006-10-06T23:27:15+01:00' user='Dean Earley' visible='true' lat='50.9724518' lon='-1.3764121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506815' timestamp='2007-06-17T22:03:34+01:00' visible='true' lat='50.9784484' lon='-1.3623313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431946' timestamp='2007-06-16T16:25:12+01:00' visible='true' lat='50.9845371' lon='-1.3512845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380416' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.9444891' lon='-1.379727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290786' timestamp='2007-06-13T09:24:10+01:00' visible='true' lat='50.9653669' lon='-1.3813002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949947' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9948144' lon='-1.3880585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346786' timestamp='2007-03-04T18:57:58+00:00' user='Dean Earley' visible='true' lat='50.9144439' lon='-1.3667893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254489' timestamp='2007-02-06T00:16:36+00:00' user='Dean Earley' visible='true' lat='50.9111578' lon='-1.401089' />
-  <node id='29912982' timestamp='2007-06-03T15:50:12+01:00' visible='true' lat='50.9875471' lon='-1.360009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249825' timestamp='2007-04-29T21:41:34+01:00' visible='true' lat='50.9194232' lon='-1.4451187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348691' timestamp='2006-10-16T21:59:52+01:00' user='nickw' visible='true' lat='50.9810314' lon='-1.4347283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999060' timestamp='2007-06-05T23:29:05+01:00' user='nickw' visible='true' lat='50.9950863' lon='-1.4298783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744283' timestamp='2006-09-03T00:58:06+01:00' user='Dean Earley' visible='true' lat='50.9069589' lon='-1.4089376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896252' timestamp='2007-10-16T17:59:42+01:00' user='Dean Earley' visible='true' lat='50.9586639' lon='-1.3992915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689143' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9379482' lon='-1.3794124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266200' timestamp='2006-09-02T19:02:10+01:00' user='Dean Earley' visible='true' lat='50.9262452' lon='-1.3859912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423554' timestamp='2007-12-14T21:35:47+00:00' user='nickw' visible='true' lat='50.9306611' lon='-1.4429961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071336' timestamp='2006-08-11T02:48:09+01:00' user='Dean Earley' visible='true' lat='50.91732' lon='-1.3659843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463037' timestamp='2007-05-22T00:01:33+01:00' user='nickw' visible='true' lat='50.9103983' lon='-1.4050662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194382' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9443066' lon='-1.4400772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639980' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9009839' lon='-1.3796157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923781' timestamp='2007-06-03T20:04:48+01:00' visible='true' lat='50.9825143' lon='-1.3622415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21637746' timestamp='2006-12-18T23:28:11+00:00' visible='true' lat='50.9363544' lon='-1.393336'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='271133' timestamp='2007-12-06T22:10:34+00:00' user='Dean Earley' visible='true' lat='50.9826' lon='-1.38328'>
-    <tag k='place' v='town' />
-    <tag k='name' v='Chandler's Ford' />
-  </node>
-  <node id='20976714' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9327118' lon='-1.4262936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319642' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9220815' lon='-1.3969588' />
-  <node id='29509890' timestamp='2007-05-22T21:20:51+01:00' visible='true' lat='50.98913' lon='-1.3592853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021808' timestamp='2007-04-03T00:53:04+01:00' user='Ben' visible='true' lat='50.9375852' lon='-1.4001011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001694' timestamp='2007-05-12T09:53:00+01:00' user='nickw' visible='true' lat='50.9402092' lon='-1.3631826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305583' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9949732' lon='-1.3937831' />
-  <node id='30229466' timestamp='2007-06-12T00:08:06+01:00' user='nickw' visible='true' lat='50.9338055' lon='-1.3509875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160265684' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9747723' lon='-1.3768786' />
-  <node id='91113440' timestamp='2007-10-29T08:05:05+00:00' user='nickw' visible='true' lat='50.9280753' lon='-1.4417094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773094' timestamp='2007-12-07T13:53:03+00:00' user='Nick Dyer' visible='true' lat='50.9611259' lon='-1.4267745' />
-  <node id='28582982' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.9385391' lon='-1.4235314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66587705' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9314927' lon='-1.448959' />
-  <node id='13564760' timestamp='2006-08-15T12:10:34+01:00' user='nickw' visible='true' lat='50.930051' lon='-1.3555626'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='254742' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9692271' lon='-1.3895087' />
-  <node id='28341749' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9133046' lon='-1.3506632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='307479' timestamp='2005-12-12T00:24:12+00:00' user='nickw' visible='true' lat='50.9262872' lon='-1.4000058' />
-  <node id='26447529' timestamp='2007-03-09T21:07:40+00:00' user='nickw' visible='true' lat='50.9089455' lon='-1.3883469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183715' timestamp='2007-04-29T02:25:34+01:00' user='Dean Earley' visible='true' lat='50.9510754' lon='-1.4050844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372746' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9310833' lon='-1.4408092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596815' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.9043205' lon='-1.4135776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462753' timestamp='2007-05-21T23:57:40+01:00' user='nickw' visible='true' lat='50.9068669' lon='-1.4032962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244256' timestamp='2007-04-29T20:36:30+01:00' user='Andy Street' visible='true' lat='50.9044668' lon='-1.3516913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706333' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.918802' lon='-1.389243'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='325272' timestamp='2006-09-30T14:46:49+01:00' user='Dean Earley' visible='true' lat='50.9204057' lon='-1.3159622' />
-  <node id='28339147' timestamp='2007-04-30T20:39:28+01:00' visible='true' lat='50.9681361' lon='-1.3609135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87819944' timestamp='2007-10-26T12:11:53+01:00' user='Nick Dyer' visible='true' lat='50.9111688' lon='-1.4426305' />
-  <node id='21507746' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.9316661' lon='-1.3982846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724238' timestamp='2007-01-28T00:07:18+00:00' visible='true' lat='50.9243358' lon='-1.4047376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254456' timestamp='2005-11-15T15:40:29+00:00' user='nickw' visible='true' lat='50.9092972' lon='-1.4016158' />
-  <node id='14743156' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9214556' lon='-1.4312671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269157' timestamp='2008-01-03T19:14:12+00:00' user='nickw' visible='true' lat='51.0046271' lon='-1.3290057' />
-  <node id='29931367' timestamp='2007-06-03T22:43:07+01:00' visible='true' lat='50.9951945' lon='-1.3726864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194418' timestamp='2007-04-29T21:10:28+01:00' visible='true' lat='50.9477156' lon='-1.4370204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591314' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9170592' lon='-1.412751'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21746412' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9873729' lon='-1.344091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114354' timestamp='2007-12-10T19:19:47+00:00' user='sladen' visible='true' lat='50.9058092' lon='-1.3967226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071238' timestamp='2006-08-11T02:47:59+01:00' user='Dean Earley' visible='true' lat='50.9197467' lon='-1.372161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342594' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9064149' lon='-1.3614508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298287' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9545656' lon='-1.4003329' />
-  <node id='28379453' timestamp='2007-05-01T14:37:34+01:00' user='Andy Street' visible='true' lat='50.9016181' lon='-1.3602252'>
-    <tag k='religion' v='christian' />
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='baptist' />
-    <tag k='name' v='Sholing Baptist Church' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169409523' timestamp='2007-12-14T21:27:51+00:00' user='nickw' visible='true' lat='50.9278954' lon='-1.4384789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464290' timestamp='2007-05-22T00:19:21+01:00' user='Dean Earley' visible='true' lat='50.9433418' lon='-1.4036621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398429' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9643117' lon='-1.3925622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21638006' timestamp='2006-12-18T23:28:11+00:00' visible='true' lat='50.9297845' lon='-1.3851456'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='Catholic Church of the Imaculate Conception' />
-  </node>
-  <node id='20971156' timestamp='2006-11-12T22:56:58+00:00' user='Dean Earley' visible='true' lat='50.9087373' lon='-1.4037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90615358' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true' lat='50.8938807' lon='-1.4059173' />
-  <node id='28230849' timestamp='2007-04-29T18:42:00+01:00' user='nickw' visible='true' lat='50.9058415' lon='-1.3672328'>
-    <tag k='name' v='ACACIA' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509877' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9903666' lon='-1.359532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668393' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9834879' lon='-1.3909826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021823' timestamp='2007-04-03T00:53:06+01:00' user='Ben' visible='true' lat='50.9405656' lon='-1.3969737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142614219' timestamp='2007-11-29T22:27:21+00:00' user='nickw' visible='true' lat='50.9093458' lon='-1.4192478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704449' timestamp='2007-05-28T10:36:07+01:00' visible='true' lat='50.9830888' lon='-1.3578821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903950' timestamp='2007-05-26T14:54:18+01:00' user='LivingWithDragons' visible='true' lat='50.9808988' lon='-1.4450606'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111707' timestamp='2007-10-29T08:00:56+00:00' user='nickw' visible='true' lat='50.9273443' lon='-1.4389057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953378' timestamp='2007-06-04T21:17:00+01:00' visible='true' lat='51.0043591' lon='-1.3853931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998104' timestamp='2007-06-05T23:00:26+01:00' user='nickw' visible='true' lat='50.9843067' lon='-1.3947935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830630' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9268006' lon='-1.3599139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001334' timestamp='2007-05-12T09:40:16+01:00' user='nickw' visible='true' lat='50.9233111' lon='-1.380464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130936' timestamp='2006-10-28T01:45:33+01:00' user='Dean Earley' visible='true' lat='50.9304962' lon='-1.3590955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252973' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.9432861' lon='-1.4297821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972768' timestamp='2006-11-13T00:06:52+00:00' user='Dean Earley' visible='true' lat='50.898722' lon='-1.4076116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111038' timestamp='2007-09-17T23:09:06+01:00' user='mike l' visible='true' lat='50.975084' lon='-1.3880115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339119' timestamp='2007-04-30T20:39:17+01:00' visible='true' lat='50.9670321' lon='-1.3611535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071426' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9244079' lon='-1.3528059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997520' timestamp='2007-06-05T22:43:54+01:00' user='nickw' visible='true' lat='51.0113635' lon='-1.3581393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595201' timestamp='2007-05-25T21:54:33+01:00' visible='true' lat='50.969132' lon='-1.352893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518801' timestamp='2007-04-05T14:20:06+01:00' user='Dean Earley' visible='true' lat='50.9285' lon='-1.38325' />
-  <node id='24984799' timestamp='2007-01-10T00:15:37+00:00' user='nickw' visible='true' lat='50.9419055' lon='-1.3767682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471847' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.9380221' lon='-1.3664387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132665' timestamp='2007-05-15T20:24:19+01:00' user='nickw' visible='true' lat='50.9268788' lon='-1.3789151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467561' timestamp='2007-04-19T17:55:53+01:00' visible='true' lat='50.9354027' lon='-1.3779679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507143' timestamp='2007-06-17T22:07:48+01:00' visible='true' lat='50.9766726' lon='-1.3607107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730507' timestamp='2007-05-28T19:36:36+01:00' visible='true' lat='50.97134' lon='-1.3712688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949817' timestamp='2007-01-31T02:05:29+00:00' user='Dean Earley' visible='true' lat='50.9947607' lon='-1.3718921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962285' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9575561' lon='-1.3629589' />
-  <node id='29462617' timestamp='2007-05-21T23:56:39+01:00' user='nickw' visible='true' lat='50.9030332' lon='-1.3981309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17768860' timestamp='2007-09-20T19:41:40+01:00' user='mike l' visible='true' lat='50.9264454' lon='-1.3854501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675802' timestamp='2007-05-22T01:08:01+01:00' user='Dean Earley' visible='true' lat='50.9040286' lon='-1.4174845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998564' timestamp='2007-06-05T23:13:26+01:00' user='nickw' visible='true' lat='50.9620017' lon='-1.4324808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467502' timestamp='2007-04-19T17:50:46+01:00' visible='true' lat='50.9245223' lon='-1.3774174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071353' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.9189675' lon='-1.365454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721066' timestamp='2007-01-19T10:20:32+00:00' user='Dean Earley' visible='true' lat='50.9699391' lon='-1.3598511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000493' timestamp='2007-05-12T09:26:09+01:00' user='nickw' visible='true' lat='50.9197919' lon='-1.411774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636785' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9497555' lon='-1.4088425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346865' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9124737' lon='-1.3688998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956608' timestamp='2007-06-26T23:45:01+01:00' user='nickw' visible='true' lat='50.9291958' lon='-1.3502425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178411' timestamp='2007-01-19T09:28:15+00:00' user='Dean Earley' visible='true' lat='50.9877619' lon='-1.3453437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533030' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9280791' lon='-1.4332608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640037' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9139712' lon='-1.3615808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608179' timestamp='2007-04-05T14:20:07+01:00' user='Dean Earley' visible='true' lat='50.8998587' lon='-1.3735349' />
-  <node id='18398414' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9812389' lon='-1.4143308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110960' timestamp='2007-10-29T07:59:19+00:00' user='nickw' visible='true' lat='50.9274993' lon='-1.438332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134138' timestamp='2007-05-15T20:47:33+01:00' user='nickw' visible='true' lat='50.9407279' lon='-1.3924159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561548' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9236091' lon='-1.424954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976801' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9266889' lon='-1.4231745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984705' timestamp='2007-01-10T00:11:42+00:00' user='nickw' visible='true' lat='50.9452603' lon='-1.3816455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291047' timestamp='2007-06-13T09:32:58+01:00' visible='true' lat='50.9672025' lon='-1.3815091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639961' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.9027795' lon='-1.3762479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254600' timestamp='2006-08-27T18:01:38+01:00' user='Dean Earley' visible='true' lat='50.9163973' lon='-1.4041852' />
-  <node id='29009022' timestamp='2007-05-12T15:28:41+01:00' user='nickw' visible='true' lat='50.9318935' lon='-1.3511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290756' timestamp='2007-06-13T09:24:04+01:00' visible='true' lat='50.9642123' lon='-1.3818687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999051' timestamp='2007-06-05T23:29:04+01:00' user='nickw' visible='true' lat='50.997287' lon='-1.4307127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244188' timestamp='2007-04-29T20:36:19+01:00' user='Andy Street' visible='true' lat='50.9027262' lon='-1.3524525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432003' timestamp='2007-06-16T16:28:30+01:00' visible='true' lat='50.9735434' lon='-1.3503994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296274' timestamp='2007-01-19T09:58:48+00:00' user='Dean Earley' visible='true' lat='50.9748232' lon='-1.3662716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727956' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9154054' lon='-1.4018455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952624' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9307292' lon='-1.3802161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239145' timestamp='2007-10-25T21:06:40+01:00' user='Nick Dyer' visible='true' lat='50.9346062' lon='-1.4513857' />
-  <node id='9727814' timestamp='2007-02-04T22:51:54+00:00' user='Dean Earley' visible='true' lat='50.9083624' lon='-1.3724228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469855' timestamp='2007-04-05T14:20:07+01:00' user='Dean Earley' visible='true' lat='50.9099325' lon='-1.4185182' />
-  <node id='13071216' timestamp='2006-11-12T17:59:56+00:00' user='Dean Earley' visible='true' lat='50.9182092' lon='-1.371578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746399' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9956468' lon='-1.3380451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249982' timestamp='2007-04-29T21:42:08+01:00' visible='true' lat='50.91573' lon='-1.4432197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247810' timestamp='2006-12-18T23:27:29+00:00' visible='true' lat='50.9311581' lon='-1.3922381' />
-  <node id='25302628' timestamp='2007-01-19T18:06:00+00:00' user='Dean Earley' visible='true' lat='50.9727969' lon='-1.3686709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110988' timestamp='2007-10-29T07:59:21+00:00' user='nickw' visible='true' lat='50.9270735' lon='-1.4407756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28848616' timestamp='2007-05-07T20:39:23+01:00' user='nickw' visible='true' lat='50.9198619' lon='-1.4122987'>
-    <tag k='name' v='ARLOTT CT' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621238' timestamp='2007-05-26T11:35:26+01:00' visible='true' lat='50.9452735' lon='-1.3720961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339132' timestamp='2007-04-30T20:39:21+01:00' visible='true' lat='50.9692094' lon='-1.3625805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254306' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9868998' lon='-1.3474851' />
-  <node id='26447512' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.910837' lon='-1.387294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743183' timestamp='2007-01-19T18:58:00+00:00' user='Dean Earley' visible='true' lat='50.9109598' lon='-1.4028554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180245' timestamp='2007-04-29T02:05:38+01:00' user='Dean Earley' visible='true' lat='50.961095' lon='-1.4235881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932228' timestamp='2007-05-10T20:48:52+01:00' user='Dean Earley' visible='true' lat='50.9622708' lon='-1.448091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965522' timestamp='2007-09-15T18:41:55+01:00' user='mike l' visible='true' lat='50.960938' lon='-1.452116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409624' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9130773' lon='-1.4418846' />
-  <node id='30956567' timestamp='2007-06-26T23:44:56+01:00' user='nickw' visible='true' lat='50.9270358' lon='-1.3503915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957181' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9193413' lon='-1.4221935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700398' timestamp='2007-04-05T14:20:07+01:00' user='Dean Earley' visible='true' lat='50.923687' lon='-1.3910515' />
-  <node id='2417453' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9477837' lon='-1.3652888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194868' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9422339' lon='-1.4083426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001319' timestamp='2007-05-12T09:40:13+01:00' user='nickw' visible='true' lat='50.9223468' lon='-1.3821328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50800659' timestamp='2007-09-13T21:14:16+01:00' user='mike l' visible='true' lat='50.9796882' lon='-1.4356347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242672' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9073246' lon='-1.4196309' />
-  <node id='21600475' timestamp='2007-10-31T15:08:49+00:00' user='Dean Earley' visible='true' lat='50.9425623' lon='-1.4491252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727694' timestamp='2007-11-20T11:10:43+00:00' user='Gregory Williams' visible='true' lat='50.9058411' lon='-1.3512797'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='19262893' timestamp='2006-11-11T17:20:15+00:00' user='Dean Earley' visible='true' lat='50.9455633' lon='-1.5326085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957195' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9209782' lon='-1.4183344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254287' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9746021' lon='-1.3420165' />
-  <node id='92720597' timestamp='2007-10-30T18:01:30+00:00' user='Nick Dyer' visible='true' lat='50.9040983' lon='-1.4200759' />
-  <node id='388874' timestamp='2007-04-05T14:20:07+01:00' user='Dean Earley' visible='true' lat='50.935' lon='-1.39825' />
-  <node id='325244' timestamp='2006-11-11T17:20:19+00:00' user='Dean Earley' visible='true' lat='50.9321171' lon='-1.3226836' />
-  <node id='26781190' timestamp='2007-03-25T18:42:16+01:00' user='Dean Earley' visible='true' lat='50.8999805' lon='-1.3771797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963752' timestamp='2007-02-18T20:19:08+00:00' visible='true' lat='50.9299932' lon='-1.4145727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998121' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.9895843' lon='-1.3992834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816741' timestamp='2007-05-31T22:13:32+01:00' visible='true' lat='50.991346' lon='-1.3553046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467473' timestamp='2007-04-19T17:50:42+01:00' visible='true' lat='50.9249254' lon='-1.381192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254304' timestamp='2007-02-18T20:18:29+00:00' visible='true' lat='50.9860981' lon='-1.3488642' />
-  <node id='20964849' timestamp='2006-12-16T17:47:21+00:00' user='David Currie' visible='true' lat='50.9965832' lon='-1.4301299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114370' timestamp='2007-02-23T21:46:12+00:00' user='nickw' visible='true' lat='50.9072229' lon='-1.3931341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071362' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9177936' lon='-1.3700047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160264004' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9535821' lon='-1.3698576' />
-  <node id='324990' timestamp='2006-11-11T17:20:19+00:00' user='Dean Earley' visible='true' lat='50.9601744' lon='-1.4275515' />
-  <node id='20110946' timestamp='2006-10-27T23:39:36+01:00' user='Dean Earley' visible='true' lat='50.9346904' lon='-1.366349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487475' timestamp='2007-07-09T12:19:38+01:00' visible='true' lat='50.9010371' lon='-1.3932461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963765' timestamp='2007-05-22T00:19:44+01:00' user='Dean Earley' visible='true' lat='50.9387893' lon='-1.4048477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420432' timestamp='2006-12-02T23:33:09+00:00' user='Dean Earley' visible='true' lat='50.9421979' lon='-1.3760994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903386' timestamp='2007-05-09T23:24:28+01:00' visible='true' lat='50.9474368' lon='-1.3653828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911931' timestamp='2007-06-03T15:38:21+01:00' visible='true' lat='50.9864548' lon='-1.3573701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518816' timestamp='2007-04-05T14:20:07+01:00' user='Dean Earley' visible='true' lat='50.9394' lon='-1.36988' />
-  <node id='28180228' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9606239' lon='-1.4257888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194514' timestamp='2007-04-29T08:32:53+01:00' user='Dean Earley' visible='true' lat='50.9475468' lon='-1.4122201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124660' timestamp='2007-06-09T19:48:36+01:00' user='nickw' visible='true' lat='50.9304851' lon='-1.352394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051786' timestamp='2007-10-26T17:11:21+01:00' user='Nick Dyer' visible='true' lat='50.9971855' lon='-1.4604602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163290' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.9698011' lon='-1.3857982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728548' timestamp='2007-03-25T18:42:32+01:00' user='Dean Earley' visible='true' lat='50.9031018' lon='-1.3694494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26004506' timestamp='2007-12-07T20:59:57+00:00' user='Steve Jeapes' visible='true' lat='50.9179784' lon='-1.3957392'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='29817248' timestamp='2007-12-20T19:55:37+00:00' visible='true' lat='50.9856328' lon='-1.364573' />
-  <node id='21561561' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9233047' lon='-1.4314777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762099' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9441144' lon='-1.347299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435850' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9359088' lon='-1.4331546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154765450' timestamp='2007-12-07T13:46:56+00:00' user='Nick Dyer' visible='true' lat='50.9606231' lon='-1.4329028' />
-  <node id='28194883' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9421555' lon='-1.4130418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132900' timestamp='2007-08-12T23:13:03+01:00' user='Edward' visible='true' lat='50.9285606' lon='-1.3780908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149962' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9088572' lon='-1.4022514' />
-  <node id='87240155' timestamp='2007-10-25T21:06:49+01:00' user='Nick Dyer' visible='true' lat='50.9336812' lon='-1.4492142' />
-  <node id='305613' timestamp='2006-12-16T17:47:21+00:00' user='David Currie' visible='true' lat='50.9891644' lon='-1.3958949' />
-  <node id='30508361' timestamp='2007-06-17T22:14:19+01:00' visible='true' lat='50.9748559' lon='-1.3559957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120344' timestamp='2007-10-29T08:12:54+00:00' user='nickw' visible='true' lat='50.9310085' lon='-1.4466562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271036' timestamp='2007-10-28T19:19:32+00:00' user='Nick Dyer' visible='true' lat='50.9387926' lon='-1.3798209'>
-    <tag k='is_in' v='Hampshire' />
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Swaythling' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='160359286' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9203824' lon='-1.4781223' />
-  <node id='329641' timestamp='2007-02-18T20:18:28+00:00' visible='true' lat='50.939' lon='-1.37001' />
-  <node id='25639995' timestamp='2007-02-04T22:51:23+00:00' user='Dean Earley' visible='true' lat='50.9091748' lon='-1.3711113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468591' timestamp='2007-05-22T01:07:05+01:00' user='Dean Earley' visible='true' lat='50.9162991' lon='-1.4560277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150242' timestamp='2008-02-03T06:14:29+00:00' user='sladen' visible='true' lat='50.9106594' lon='-1.40335' />
-  <node id='21613414' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9889034' lon='-1.41259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903650' timestamp='2007-05-09T23:57:41+01:00' visible='true' lat='50.9517017' lon='-1.3610259'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573777' timestamp='2007-09-16T10:20:35+01:00' user='mike l' visible='true' lat='50.9878375' lon='-1.3910059' />
-  <node id='18398444' timestamp='2007-01-28T00:07:20+00:00' visible='true' lat='50.934761' lon='-1.411928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945390' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9052555' lon='-1.3400745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464301' timestamp='2007-05-22T00:19:23+01:00' user='Dean Earley' visible='true' lat='50.9488195' lon='-1.4004728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596755' timestamp='2007-04-20T23:53:17+01:00' user='Dean Earley' visible='true' lat='50.9150426' lon='-1.3320968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797892' timestamp='2007-09-13T21:06:04+01:00' user='mike l' visible='true' lat='50.9748516' lon='-1.4500274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575741' timestamp='2007-03-16T21:52:25+00:00' user='nickw' visible='true' lat='50.9017278' lon='-1.395742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298257' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='50.9673783' lon='-1.3809661' />
-  <node id='24924227' timestamp='2007-01-06T14:38:00+00:00' user='nickw' visible='true' lat='50.9602178' lon='-1.3687373'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133216' timestamp='2006-10-28T01:55:54+01:00' user='Dean Earley' visible='true' lat='50.9282441' lon='-1.3513399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549351' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.968327' lon='-1.3701782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635148' timestamp='2007-03-25T19:25:25+01:00' user='Dean Earley' visible='true' lat='50.9001739' lon='-1.3953647' />
-  <node id='21599028' timestamp='2006-12-16T01:02:09+00:00' user='Dean Earley' visible='true' lat='50.9337401' lon='-1.3553422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797922' timestamp='2007-09-13T21:06:07+01:00' user='mike l' visible='true' lat='50.971629' lon='-1.4508057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28388967' timestamp='2007-08-21T00:40:59+01:00' user='HenryDCase' visible='true' lat='50.9639774' lon='-1.3596645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160230084' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9021719' lon='-1.3954695' />
-  <node id='29925935' timestamp='2007-06-03T20:51:16+01:00' visible='true' lat='50.9808033' lon='-1.3657397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162632' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.9712398' lon='-1.3823414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780833' timestamp='2007-06-22T21:09:54+01:00' user='Steve Chilton' visible='true' lat='50.9076262' lon='-1.4113825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111075' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0104126' lon='-1.3935314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306319' timestamp='2005-12-11T21:52:37+00:00' user='nickw' visible='true' lat='50.9267378' lon='-1.3941693' />
-  <node id='15740661' timestamp='2007-02-04T18:26:17+00:00' user='Dean Earley' visible='true' lat='50.9897749' lon='-1.3506649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173973' timestamp='2007-04-29T01:03:36+01:00' visible='true' lat='50.9420086' lon='-1.4344197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816285' timestamp='2007-05-31T21:52:22+01:00' visible='true' lat='50.9913168' lon='-1.3543476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348710' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9809776' lon='-1.4286407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896266' timestamp='2007-02-13T19:24:11+00:00' user='Dean Earley' visible='true' lat='50.9694479' lon='-1.3893692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271053' timestamp='2007-01-25T23:00:46+00:00' user='Dean Earley' visible='true' lat='50.9107434' lon='-1.3888232'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Northam' />
-  </node>
-  <node id='28194367' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9441037' lon='-1.4396282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463011' timestamp='2007-05-22T00:01:31+01:00' user='nickw' visible='true' lat='50.9105004' lon='-1.4047829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9727816' timestamp='2007-03-04T18:58:22+00:00' user='Dean Earley' visible='true' lat='50.9075726' lon='-1.3737805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925345' timestamp='2007-06-03T20:36:36+01:00' visible='true' lat='50.9795304' lon='-1.365556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816596' timestamp='2007-05-31T22:07:49+01:00' visible='true' lat='50.9897186' lon='-1.3561455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243667' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9390079' lon='-1.4126531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153327657' timestamp='2007-12-06T20:41:52+00:00' user='nickw' visible='true' lat='50.9375558' lon='-1.439558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227221' timestamp='2007-05-22T00:19:45+01:00' user='Dean Earley' visible='true' lat='50.9347361' lon='-1.4127266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87799818' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8943802' lon='-1.3905012' />
-  <node id='30124219' timestamp='2007-06-09T19:35:54+01:00' user='nickw' visible='true' lat='50.9249723' lon='-1.3493296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706651' timestamp='2007-04-05T14:20:08+01:00' user='Dean Earley' visible='true' lat='50.9125625' lon='-1.371875' />
-  <node id='28903862' timestamp='2007-10-17T01:09:34+01:00' user='Dean Earley' visible='true' lat='50.9501768' lon='-1.3642653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579420' timestamp='2006-12-14T13:53:01+00:00' user='David Currie' visible='true' lat='50.9776166' lon='-1.402151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194849' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9459824' lon='-1.4075364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650902' timestamp='2007-04-05T14:20:08+01:00' user='Dean Earley' visible='true' lat='50.9297' lon='-1.40199' />
-  <node id='26575724' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9012439' lon='-1.3941319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575767' timestamp='2007-03-16T21:52:29+00:00' user='nickw' visible='true' lat='50.8997983' lon='-1.3948282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963786' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9419841' lon='-1.4115621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874069' timestamp='2007-05-08T14:50:36+01:00' visible='true' lat='50.9376001' lon='-1.4380682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976759' timestamp='2007-04-29T20:52:53+01:00' user='Dean Earley' visible='true' lat='50.9325884' lon='-1.4219698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635119' timestamp='2006-07-11T22:59:44+01:00' user='Dean Earley' visible='true' lat='50.8983052' lon='-1.3251554' />
-  <node id='29931382' timestamp='2007-06-03T22:43:09+01:00' visible='true' lat='50.9938034' lon='-1.3734063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162097' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.971515' lon='-1.3780104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59766052' timestamp='2007-09-25T17:25:34+01:00' user='mike l' visible='true' lat='50.9379475' lon='-1.3916843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600514' timestamp='2007-04-03T00:51:36+01:00' user='Dean Earley' visible='true' lat='50.9095408' lon='-1.4175541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133064' timestamp='2007-05-15T20:36:48+01:00' user='nickw' visible='true' lat='50.9329291' lon='-1.3787108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924197' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.9446205' lon='-1.3721693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254270' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9545003' lon='-1.3417735' />
-  <node id='29953501' timestamp='2007-06-04T21:24:02+01:00' visible='true' lat='50.989874' lon='-1.3691715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147525' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9099775' lon='-1.4022085' />
-  <node id='12889420' timestamp='2006-08-08T23:26:25+01:00' user='Dean Earley' visible='true' lat='50.9421498' lon='-1.3728583'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132721' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='50.993628' lon='-1.3588391' />
-  <node id='29914259' timestamp='2007-06-03T16:05:27+01:00' visible='true' lat='50.982719' lon='-1.3603417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226204' timestamp='2007-06-11T22:20:37+01:00' visible='true' lat='50.9825399' lon='-1.3526684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781170' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.9017146' lon='-1.3754654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700383' timestamp='2007-04-05T14:20:09+01:00' user='Dean Earley' visible='true' lat='50.9238902' lon='-1.392739' />
-  <node id='675873' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9275869' lon='-1.3700399' />
-  <node id='14726185' timestamp='2006-09-02T18:21:41+01:00' user='Dean Earley' visible='true' lat='50.9093212' lon='-1.4000437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316552' timestamp='2007-04-03T00:51:36+01:00' user='Dean Earley' visible='true' lat='50.92378' lon='-1.4451185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404162' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9132396' lon='-1.4449487' />
-  <node id='160363014' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9200631' lon='-1.4789291' />
-  <node id='160230980' timestamp='2007-12-10T19:18:16+00:00' user='sladen' visible='true' lat='50.899552' lon='-1.3938301' />
-  <node id='21624979' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.9031765' lon='-1.3726688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932459' timestamp='2007-05-10T21:06:06+01:00' user='Dean Earley' visible='true' lat='50.9637006' lon='-1.451116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325659' timestamp='2007-04-05T14:20:09+01:00' user='Dean Earley' visible='true' lat='50.9289217' lon='-1.4289372' />
-  <node id='59058426' timestamp='2007-09-23T16:33:07+01:00' user='mike l' visible='true' lat='50.9380689' lon='-1.3757715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009234' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9292891' lon='-1.3549641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089055' timestamp='2007-06-08T18:11:58+01:00' visible='true' lat='50.9655543' lon='-1.3744226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282106' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.977623' lon='-1.4063605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347577' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9256845' lon='-1.3528523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250053' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.9165499' lon='-1.4492438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160230976' timestamp='2007-12-10T19:18:16+00:00' user='sladen' visible='true' lat='50.9026915' lon='-1.3928431' />
-  <node id='254945' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.9506636' lon='-1.4150946' />
-  <node id='13565093' timestamp='2007-06-12T00:08:13+01:00' user='nickw' visible='true' lat='50.9343853' lon='-1.3523481'>
-    <tag k='name' v='Torridge Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='19890081' timestamp='2006-10-27T00:48:04+01:00' user='Dean Earley' visible='true' lat='50.91939' lon='-1.3894131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423491' timestamp='2007-12-14T21:35:45+00:00' user='nickw' visible='true' lat='50.9321151' lon='-1.4436443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931343' timestamp='2007-06-03T22:43:02+01:00' visible='true' lat='50.9941285' lon='-1.3727839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972576' timestamp='2006-08-25T11:53:20+01:00' user='nickw' visible='true' lat='50.9549595' lon='-1.3331361'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29928424' timestamp='2007-06-03T21:48:28+01:00' visible='true' lat='50.9797202' lon='-1.3680957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595206' timestamp='2006-08-04T12:02:30+01:00' user='nickw' visible='true' lat='50.9202702' lon='-1.4129072'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28236099' timestamp='2007-04-29T19:25:32+01:00' user='Andy Street' visible='true' lat='50.9114757' lon='-1.3537085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325044' timestamp='2006-11-11T17:20:44+00:00' user='Dean Earley' visible='true' lat='50.9535163' lon='-1.459584' />
-  <node id='29026802' timestamp='2007-05-13T10:10:58+01:00' user='nickw' visible='true' lat='50.917972' lon='-1.4093371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632418' timestamp='2007-05-26T19:26:34+01:00' visible='true' lat='50.9556568' lon='-1.3677008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243623' timestamp='2007-04-29T20:25:01+01:00' user='Dean Earley' visible='true' lat='50.9382549' lon='-1.4156017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243999' timestamp='2007-04-29T20:34:49+01:00' user='Andy Street' visible='true' lat='50.9049077' lon='-1.3491704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668346' timestamp='2007-01-04T21:06:43+00:00' user='nickw' visible='true' lat='50.9878089' lon='-1.4121507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237232' timestamp='2007-04-29T19:42:01+01:00' user='Andy Street' visible='true' lat='50.9021179' lon='-1.3567517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='330447' timestamp='2006-11-21T23:12:54+00:00' user='nickw' visible='true' lat='50.9278904' lon='-1.4253701' />
-  <node id='25896418' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9657476' lon='-1.3865343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380435' timestamp='2007-05-20T10:19:28+01:00' user='nickw' visible='true' lat='50.9435002' lon='-1.3747801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600593' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9895724' lon='-1.4016418'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254323' timestamp='2005-11-15T15:38:59+00:00' user='nickw' visible='true' lat='50.9595984' lon='-1.4268446' />
-  <node id='30225815' timestamp='2007-06-11T22:16:49+01:00' visible='true' lat='50.9828117' lon='-1.3563351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874141' timestamp='2007-06-02T19:43:15+01:00' visible='true' lat='50.9584927' lon='-1.3591709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600525' timestamp='2007-08-08T01:28:08+01:00' visible='true' lat='50.9332055' lon='-1.4437347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600666' timestamp='2007-09-17T23:09:09+01:00' user='mike l' visible='true' lat='50.9710505' lon='-1.3965557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973089' timestamp='2006-11-13T00:42:41+00:00' user='Dean Earley' visible='true' lat='50.9014654' lon='-1.4086642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600501' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9231071' lon='-1.4363035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998355' timestamp='2007-06-05T23:05:25+01:00' user='nickw' visible='true' lat='50.9783156' lon='-1.4306531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301572' timestamp='2007-02-18T21:30:36+00:00' visible='true' lat='50.9011833' lon='-1.3974925' />
-  <node id='90663602' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9053949' lon='-1.4049875' />
-  <node id='13706670' timestamp='2007-04-05T14:20:09+01:00' user='Dean Earley' visible='true' lat='50.90575' lon='-1.3806875' />
-  <node id='21419420' timestamp='2007-09-23T16:33:08+01:00' user='mike l' visible='true' lat='50.9397761' lon='-1.3665389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632185' timestamp='2007-05-26T19:20:38+01:00' visible='true' lat='50.9562967' lon='-1.3687873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223087' timestamp='2007-06-11T21:51:52+01:00' visible='true' lat='50.9835917' lon='-1.3564545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896249' timestamp='2007-10-16T17:59:42+01:00' user='Dean Earley' visible='true' lat='50.95911' lon='-1.3988251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783098' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9447581' lon='-1.3539737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163073' timestamp='2008-01-04T19:32:05+00:00' user='nickw' visible='true' lat='50.9723344' lon='-1.3867518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967599' timestamp='2006-11-12T20:46:59+00:00' user='Dean Earley' visible='true' lat='50.9195369' lon='-1.3925152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254506' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.9046429' lon='-1.3900359' />
-  <node id='700434' timestamp='2007-04-05T14:20:10+01:00' user='Dean Earley' visible='true' lat='50.9252417' lon='-1.3873093' />
-  <node id='24924083' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9330154' lon='-1.3835918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160425876' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9036655' lon='-1.4127279' />
-  <node id='254647' timestamp='2007-12-10T19:11:41+00:00' user='sladen' visible='true' lat='50.9140192' lon='-1.3910407' />
-  <node id='91117348' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9308144' lon='-1.4452556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926524' timestamp='2007-06-03T20:59:01+01:00' visible='true' lat='50.9800651' lon='-1.3665238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346801' timestamp='2007-03-04T18:57:58+00:00' user='Dean Earley' visible='true' lat='50.9158205' lon='-1.3704686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471845' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.9383226' lon='-1.3664387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726306' timestamp='2006-09-08T02:12:12+01:00' user='Dean Earley' visible='true' lat='50.9182167' lon='-1.3734214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021778' timestamp='2007-04-03T00:52:47+01:00' user='Ben' visible='true' lat='50.9539038' lon='-1.4004497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169426680' timestamp='2007-12-14T21:37:41+00:00' user='nickw' visible='true' lat='50.9335268' lon='-1.4416477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228108' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9492162' lon='-1.426828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831099' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.9111777' lon='-1.4070608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282117' timestamp='2007-01-17T21:10:13+00:00' user='David Currie' visible='true' lat='50.9769658' lon='-1.4084247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998539' timestamp='2007-06-05T23:13:22+01:00' user='nickw' visible='true' lat='50.9652049' lon='-1.4368515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507784' timestamp='2007-05-22T00:19:45+01:00' user='Dean Earley' visible='true' lat='50.9483964' lon='-1.4003515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689075' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9426364' lon='-1.3904981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997537' timestamp='2007-06-05T22:43:57+01:00' user='nickw' visible='true' lat='51.002463' lon='-1.3514641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='76476562' timestamp='2007-10-17T15:40:56+01:00' user='Nick Dyer' visible='true' lat='50.9003059' lon='-1.4441602' />
-  <node id='17658113' timestamp='2007-09-23T20:35:59+01:00' user='mike l' visible='true' lat='50.9122263' lon='-1.4411364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595097' timestamp='2007-05-25T21:54:11+01:00' visible='true' lat='50.9692128' lon='-1.3516897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66589145' timestamp='2007-10-12T14:03:58+01:00' user='SteveC' visible='true' lat='50.9307948' lon='-1.4485642' />
-  <node id='90662045' timestamp='2007-10-28T21:46:58+00:00' user='Nick Dyer' visible='true' lat='50.9063799' lon='-1.4101717' />
-  <node id='28339089' timestamp='2007-04-30T20:38:42+01:00' visible='true' lat='50.9655448' lon='-1.3603528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956729' timestamp='2007-06-26T23:49:23+01:00' user='nickw' visible='true' lat='50.9267447' lon='-1.3514594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815660' timestamp='2007-05-31T21:48:02+01:00' visible='true' lat='50.990929' lon='-1.3532805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254853' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9135373' lon='-1.4469314' />
-  <node id='17724253' timestamp='2006-10-07T00:25:17+01:00' user='nickw' visible='true' lat='50.9123163' lon='-1.408966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071302' timestamp='2006-08-11T02:48:04+01:00' user='Dean Earley' visible='true' lat='50.9199924' lon='-1.3577434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239967' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.9075141' lon='-1.4170988' />
-  <node id='29548670' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.9630194' lon='-1.3631308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431980' timestamp='2007-06-16T16:26:04+01:00' visible='true' lat='50.9723545' lon='-1.3522477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935768' timestamp='2007-05-11T00:50:51+01:00' visible='true' lat='50.9388679' lon='-1.4470035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675140' timestamp='2007-02-06T00:16:35+00:00' user='Dean Earley' visible='true' lat='50.9017847' lon='-1.402559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949830' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9881868' lon='-1.3795158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142614189' timestamp='2007-11-29T22:27:21+00:00' user='nickw' visible='true' lat='50.9089481' lon='-1.4193223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179494' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9552381' lon='-1.4055912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325257' timestamp='2005-12-16T23:24:44+00:00' user='80n' visible='true' lat='50.9230585' lon='-1.3154575' />
-  <node id='90581806' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9185243' lon='-1.4475078' />
-  <node id='310897' timestamp='2007-02-18T21:25:26+00:00' visible='true' lat='50.9169745' lon='-1.3984609' />
-  <node id='157190818' timestamp='2007-12-08T20:00:25+00:00' user='nickw' visible='true' lat='50.9386675' lon='-1.4490204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816569' timestamp='2007-05-31T22:04:30+01:00' visible='true' lat='50.9910707' lon='-1.3542422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504759' timestamp='2007-06-17T21:50:34+01:00' visible='true' lat='50.9811011' lon='-1.3585649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30411002' timestamp='2007-06-17T22:30:38+01:00' visible='true' lat='50.9746545' lon='-1.3583989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999074' timestamp='2007-06-05T23:29:06+01:00' user='nickw' visible='true' lat='50.989009' lon='-1.4313087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160244232' timestamp='2007-12-10T19:25:22+00:00' user='sladen' visible='true' lat='50.9115677' lon='-1.4339045' />
-  <node id='29862364' timestamp='2007-06-02T12:33:01+01:00' visible='true' lat='50.9328298' lon='-1.4290545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026772' timestamp='2007-05-13T10:10:55+01:00' user='nickw' visible='true' lat='50.9211093' lon='-1.409059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507154' timestamp='2007-06-17T22:07:50+01:00' visible='true' lat='50.9759848' lon='-1.3589702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122326370' timestamp='2007-11-18T19:06:35+00:00' user='nickw' visible='true' lat='50.9147402' lon='-1.4336834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000963' timestamp='2007-05-12T09:31:58+01:00' user='nickw' visible='true' lat='50.91915' lon='-1.4083719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398395' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.9472411' lon='-1.4322621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613478' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9704724' lon='-1.3920851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773382' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9190405' lon='-1.4610763' />
-  <node id='29704333' timestamp='2007-06-03T16:02:02+01:00' visible='true' lat='50.9839048' lon='-1.3597015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961037' timestamp='2006-11-11T17:12:24+00:00' user='Dean Earley' visible='true' lat='50.9500962' lon='-1.3976725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413150' timestamp='2007-04-05T14:20:10+01:00' user='Dean Earley' visible='true' lat='50.9386388' lon='-1.38299' />
-  <node id='29927562' timestamp='2007-06-03T21:24:30+01:00' visible='true' lat='50.9803433' lon='-1.3708083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160221499' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.914214' lon='-1.3905428' />
-  <node id='122344801' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true' lat='50.9191082' lon='-1.4363207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091842' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9084875' lon='-1.4174636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275776' timestamp='2006-11-25T23:58:49+00:00' user='nickw' visible='true' lat='50.9145589' lon='-1.4271746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984769' timestamp='2007-01-10T00:14:41+00:00' user='nickw' visible='true' lat='50.9451789' lon='-1.3957708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657777' timestamp='2007-04-05T14:20:10+01:00' user='Dean Earley' visible='true' lat='50.8990381' lon='-1.3642383' />
-  <node id='29549385' timestamp='2007-05-24T11:22:52+01:00' visible='true' lat='50.9642787' lon='-1.3755445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122311149' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true' lat='50.9120274' lon='-1.4331727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509864' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9914683' lon='-1.3596175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348129' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9334228' lon='-1.3667888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252838' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9461362' lon='-1.3612574' />
-  <node id='157218844' timestamp='2007-12-08T20:21:05+00:00' user='nickw' visible='true' lat='50.9455572' lon='-1.4462118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675887' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.925109' lon='-1.3744344' />
-  <node id='30096951' timestamp='2007-06-08T23:24:14+01:00' visible='true' lat='50.9659388' lon='-1.3742271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114383' timestamp='2007-02-23T21:46:22+00:00' user='nickw' visible='true' lat='50.9051934' lon='-1.3922401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668054' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9852013' lon='-1.3866318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661161' timestamp='2007-04-05T14:20:11+01:00' user='Dean Earley' visible='true' lat='50.898588' lon='-1.3613457' />
-  <node id='29856367' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9465777' lon='-1.3917193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815553' timestamp='2007-05-31T21:42:55+01:00' visible='true' lat='50.9889381' lon='-1.3582952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504821' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true' lat='50.9542087' lon='-1.4037014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342543' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9082439' lon='-1.3677685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254613' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9116324' lon='-1.4326234' />
-  <node id='15359722' timestamp='2006-09-11T20:17:31+01:00' user='Dean Earley' visible='true' lat='50.9707748' lon='-1.3524157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632806' timestamp='2007-05-26T20:05:45+01:00' visible='true' lat='50.962551' lon='-1.3689756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711604' timestamp='2007-05-28T14:46:30+01:00' visible='true' lat='50.9758579' lon='-1.3650638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243521' timestamp='2007-04-29T20:24:12+01:00' user='Dean Earley' visible='true' lat='50.9399096' lon='-1.4079914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764412' timestamp='2007-05-29T22:14:27+01:00' user='Jodi Crisp' visible='true' lat='50.924992' lon='-1.3623138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964155' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9185555' lon='-1.3813773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306298' timestamp='2005-12-11T21:47:02+00:00' user='nickw' visible='true' lat='50.9234333' lon='-1.4036322' />
-  <node id='87248231' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8956379' lon='-1.3975897' />
-  <node id='24949843' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9889121' lon='-1.3765358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398399' timestamp='2007-10-26T15:04:20+01:00' user='Nick Dyer' visible='true' lat='50.9746574' lon='-1.420593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388942' timestamp='2007-04-05T14:20:11+01:00' user='Dean Earley' visible='true' lat='50.9418' lon='-1.40059' />
-  <node id='10222225' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9185589' lon='-1.4799076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903063' timestamp='2007-05-09T23:03:40+01:00' visible='true' lat='50.9423814' lon='-1.3707579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252905' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9454972' lon='-1.4304925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259918' timestamp='2007-04-29T23:09:28+01:00' user='Andy Street' visible='true' lat='50.9009135' lon='-1.3511803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160359716' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9202201' lon='-1.4781824' />
-  <node id='29548687' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9632214' lon='-1.3651099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239604' timestamp='2007-10-25T21:07:04+01:00' user='Nick Dyer' visible='true' lat='50.9353094' lon='-1.4512398' />
-  <node id='29632827' timestamp='2007-05-26T20:07:13+01:00' visible='true' lat='50.968768' lon='-1.3629502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209165' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.9425201' lon='-1.4480917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171745' timestamp='2007-05-16T23:47:59+01:00' user='nickw' visible='true' lat='50.9406909' lon='-1.3902833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831121' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.912917' lon='-1.4059491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816426' timestamp='2007-05-31T22:00:51+01:00' visible='true' lat='50.9898934' lon='-1.3552631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154769816' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true' lat='50.9616449' lon='-1.4267659' />
-  <node id='29708043' timestamp='2007-05-28T12:04:12+01:00' visible='true' lat='50.9786505' lon='-1.3653459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001470' timestamp='2007-05-12T09:49:22+01:00' user='nickw' visible='true' lat='50.9429194' lon='-1.3495142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110485' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9277779' lon='-1.437294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141417' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9276863' lon='-1.4295704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160220280' timestamp='2007-12-10T19:12:44+00:00' user='sladen' visible='true' lat='50.9152259' lon='-1.3905342' />
-  <node id='157238308' timestamp='2007-12-08T20:33:30+00:00' user='nickw' visible='true' lat='50.9467432' lon='-1.449198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632435' timestamp='2007-05-26T19:26:57+01:00' visible='true' lat='50.9551654' lon='-1.3597989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950460' timestamp='2007-09-10T23:28:32+01:00' visible='true' lat='50.9119741' lon='-1.3969609'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925571' timestamp='2007-06-03T20:41:54+01:00' visible='true' lat='50.9813217' lon='-1.3626656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423287' timestamp='2007-04-05T14:20:11+01:00' user='Dean Earley' visible='true' lat='50.9317' lon='-1.38606' />
-  <node id='29632232' timestamp='2007-05-26T19:23:00+01:00' visible='true' lat='50.9569634' lon='-1.3692955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091868' timestamp='2007-12-10T21:00:29+00:00' user='sladen' visible='true' lat='50.9114159' lon='-1.4255939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298274' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9620359' lon='-1.3895769' />
-  <node id='254759' timestamp='2007-04-20T23:53:19+01:00' user='Dean Earley' visible='true' lat='50.9090563' lon='-1.3906786' />
-  <node id='15028819' timestamp='2006-09-08T23:06:40+01:00' user='Dean Earley' visible='true' lat='50.9340784' lon='-1.3747431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903980' timestamp='2007-10-17T01:09:34+01:00' user='Dean Earley' visible='true' lat='50.9504359' lon='-1.3638322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249923' timestamp='2007-04-29T21:41:48+01:00' visible='true' lat='50.9176528' lon='-1.4555382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160233334' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9052625' lon='-1.3940276' />
-  <node id='13707251' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8486231' lon='-1.310492'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='48965787' timestamp='2007-09-11T00:11:36+01:00' visible='true' lat='50.9020009' lon='-1.4059254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160209421' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9235641' lon='-1.3841999' />
-  <node id='25640022' timestamp='2007-03-04T18:58:22+00:00' user='Dean Earley' visible='true' lat='50.9136239' lon='-1.370536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147652' timestamp='2008-02-03T06:03:10+00:00' user='sladen' visible='true' lat='50.9096149' lon='-1.4064314' />
-  <node id='13706504' timestamp='2007-04-05T14:20:11+01:00' user='Dean Earley' visible='true' lat='50.9230625' lon='-1.377' />
-  <node id='201642326' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9505793' lon='-1.3605938' />
-  <node id='34278525' timestamp='2007-08-14T04:47:59+01:00' user='andrewpmk' visible='true' lat='50.907495' lon='-1.3981031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254660' timestamp='2006-09-03T01:40:59+01:00' user='Dean Earley' visible='true' lat='50.9701693' lon='-1.3464514' />
-  <node id='24984720' timestamp='2007-01-10T00:12:02+00:00' user='nickw' visible='true' lat='50.9434766' lon='-1.3904763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976680' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.934875' lon='-1.4300581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561531' timestamp='2007-06-01T16:18:05+01:00' user='Dean Earley' visible='true' lat='50.926005' lon='-1.4351401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319627' timestamp='2005-12-14T22:03:18+00:00' user='nickw' visible='true' lat='50.9211588' lon='-1.389749' />
-  <node id='329533' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9763991' lon='-1.432676' />
-  <node id='21579405' timestamp='2006-12-14T13:52:51+00:00' user='David Currie' visible='true' lat='50.9764186' lon='-1.4049669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384704' timestamp='2007-06-02T19:55:01+01:00' visible='true' lat='50.9691663' lon='-1.3614901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600435' timestamp='2006-12-16T10:13:54+00:00' user='nickw' visible='true' lat='50.92167' lon='-1.4514171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548704' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.9644859' lon='-1.3646767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346880' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9074733' lon='-1.3762025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632125' timestamp='2007-05-26T19:19:34+01:00' visible='true' lat='50.9565849' lon='-1.3667976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301554' timestamp='2006-09-04T18:54:43+01:00' user='Dean Earley' visible='true' lat='50.8993618' lon='-1.4012218' />
-  <node id='18232078' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9115745' lon='-1.4127114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339160' timestamp='2007-04-30T20:39:33+01:00' visible='true' lat='50.9683557' lon='-1.3595022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976699' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.935604' lon='-1.4226183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179460' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9625914' lon='-1.4120816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708032' timestamp='2007-05-28T12:04:07+01:00' visible='true' lat='50.9809231' lon='-1.3663179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342527' timestamp='2007-04-30T22:13:31+01:00' user='nickw' visible='true' lat='50.9089454' lon='-1.3649275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932444' timestamp='2007-05-10T21:05:58+01:00' user='Dean Earley' visible='true' lat='50.9633324' lon='-1.4605894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632448' timestamp='2007-05-26T19:27:10+01:00' visible='true' lat='50.9608513' lon='-1.36496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148640' timestamp='2008-02-03T06:06:37+00:00' user='sladen' visible='true' lat='50.904982' lon='-1.4022085' />
-  <node id='661164' timestamp='2007-04-05T14:20:12+01:00' user='Dean Earley' visible='true' lat='50.8992914' lon='-1.3569636' />
-  <node id='9312076' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true' lat='50.9146706' lon='-1.3962664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584198' timestamp='2007-05-03T00:07:27+01:00' visible='true' lat='50.9416098' lon='-1.4335999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980711' timestamp='2007-10-26T15:58:01+01:00' user='Nick Dyer' visible='true' lat='50.9584077' lon='-1.3495198' />
-  <node id='12594898' timestamp='2006-08-04T11:58:01+01:00' user='nickw' visible='true' lat='50.9168561' lon='-1.4142197'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28932455' timestamp='2007-05-10T21:06:04+01:00' user='Dean Earley' visible='true' lat='50.962921' lon='-1.4536864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447401' timestamp='2007-03-09T20:54:22+00:00' user='nickw' visible='true' lat='50.8995617' lon='-1.3922756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972820' timestamp='2006-11-13T00:07:31+00:00' user='Dean Earley' visible='true' lat='50.8992206' lon='-1.3961457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461222' timestamp='2007-12-10T19:19:47+00:00' user='sladen' visible='true' lat='50.9062259' lon='-1.3967827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194403' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.947056' lon='-1.4389578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474844' timestamp='2007-09-23T16:33:13+01:00' user='mike l' visible='true' lat='50.9365184' lon='-1.354233' />
-  <node id='29998585' timestamp='2007-06-05T23:13:55+01:00' user='nickw' visible='true' lat='50.9574469' lon='-1.4559236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92683731' timestamp='2007-10-30T17:25:08+00:00' user='Nick Dyer' visible='true' lat='50.9610465' lon='-1.4241017' />
-  <node id='142612670' timestamp='2007-11-29T22:26:19+00:00' user='nickw' visible='true' lat='50.9120641' lon='-1.4145195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331328' timestamp='2006-11-11T21:23:57+00:00' user='Dean Earley' visible='true' lat='51.0027' lon='-1.36647' />
-  <node id='29816409' timestamp='2007-05-31T21:56:32+01:00' visible='true' lat='50.9893877' lon='-1.355299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660055' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.9049781' lon='-1.4108583' />
-  <node id='21689126' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9410122' lon='-1.3851192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229576' timestamp='2007-06-12T00:14:40+01:00' user='nickw' visible='true' lat='50.9342618' lon='-1.3536062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668260' timestamp='2007-01-04T21:06:32+00:00' user='nickw' visible='true' lat='50.9835254' lon='-1.3940024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964039' timestamp='2006-11-12T00:52:15+00:00' user='nickw' visible='true' lat='50.9987368' lon='-1.4503053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073513' timestamp='2007-04-05T14:20:12+01:00' user='Dean Earley' visible='true' lat='50.9291007' lon='-1.3913657' />
-  <node id='29710195' timestamp='2007-05-28T13:21:50+01:00' visible='true' lat='50.987487' lon='-1.3700597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872359' timestamp='2007-06-02T19:03:55+01:00' visible='true' lat='50.9172366' lon='-1.3513175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600580' timestamp='2007-01-25T22:42:43+00:00' user='Dean Earley' visible='true' lat='50.9798309' lon='-1.4014585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091390' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.9914235' lon='-1.4461613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245145423' timestamp='2008-02-03T05:57:02+00:00' user='sladen' visible='true' lat='50.9137711' lon='-1.4019253' />
-  <node id='28342521' timestamp='2007-04-30T22:13:31+01:00' user='nickw' visible='true' lat='50.9103855' lon='-1.361849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705808' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8929765' lon='-1.3979157' />
-  <node id='29026805' timestamp='2007-05-13T10:10:58+01:00' user='nickw' visible='true' lat='50.9176588' lon='-1.4093967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242668' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9074167' lon='-1.4214247' />
-  <node id='157200370' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.9423527' lon='-1.4467581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984735' timestamp='2007-01-10T00:13:31+00:00' user='nickw' visible='true' lat='50.9442401' lon='-1.3913504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243504' timestamp='2007-04-29T20:24:00+01:00' user='Dean Earley' visible='true' lat='50.9389481' lon='-1.4090488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632206' timestamp='2007-05-26T19:21:08+01:00' visible='true' lat='50.9560221' lon='-1.367132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418542' timestamp='2007-05-02T00:35:24+01:00' visible='true' lat='50.9613029' lon='-1.3728099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345037' timestamp='2007-04-30T23:00:35+01:00' user='nickw' visible='true' lat='50.9282171' lon='-1.3640866'>
-    <tag k='name' v='CRNWLL CRE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830617' timestamp='2007-05-05T08:58:24+01:00' user='nickw' visible='true' lat='50.9288291' lon='-1.3586027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961041' timestamp='2006-11-11T17:12:28+00:00' user='Dean Earley' visible='true' lat='50.9486548' lon='-1.3835901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29839188' timestamp='2007-06-01T20:53:34+01:00' visible='true' lat='50.9854762' lon='-1.3650923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91107940' timestamp='2007-10-29T07:46:37+00:00' user='nickw' visible='true' lat='50.9325047' lon='-1.4193146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008383' timestamp='2007-05-12T15:11:48+01:00' user='nickw' visible='true' lat='50.925905' lon='-1.3519692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305596' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9916043' lon='-1.390264' />
-  <node id='28342637' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9119518' lon='-1.3656626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689072' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9319632' lon='-1.3945223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707232' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.850127' lon='-1.3148035'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13706011' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8925217' lon='-1.3962506' />
-  <node id='28244286' timestamp='2007-04-29T20:36:33+01:00' user='Andy Street' visible='true' lat='50.9031745' lon='-1.3495814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008798' timestamp='2007-05-12T15:20:38+01:00' user='nickw' visible='true' lat='50.9274296' lon='-1.349451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796768' timestamp='2007-05-30T22:22:03+01:00' user='nickw' visible='true' lat='50.9140342' lon='-1.3555217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231064' timestamp='2007-04-29T18:45:17+01:00' user='nickw' visible='true' lat='50.9057728' lon='-1.3706404'>
-    <tag k='name' v='ELSTREE RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331349' timestamp='2007-12-06T22:10:39+00:00' user='Dean Earley' visible='true' lat='51.0113' lon='-1.38381' />
-  <node id='24949900' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.993764' lon='-1.380827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232587' timestamp='2007-04-29T18:59:40+01:00' user='nickw' visible='true' lat='50.9163041' lon='-1.3468623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243650' timestamp='2007-04-29T20:25:07+01:00' user='Dean Earley' visible='true' lat='50.9385149' lon='-1.4141317'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526771' timestamp='2007-05-23T09:49:13+01:00' visible='true' lat='50.9817758' lon='-1.3488292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='76476549' timestamp='2007-10-17T15:40:56+01:00' user='Nick Dyer' visible='true' lat='50.8989201' lon='-1.4464261' />
-  <node id='30229591' timestamp='2007-06-12T00:14:42+01:00' user='nickw' visible='true' lat='50.9338298' lon='-1.3501593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613448' timestamp='2006-12-16T17:46:56+00:00' user='David Currie' visible='true' lat='50.97493' lon='-1.3988473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956714' timestamp='2007-06-26T23:49:21+01:00' user='nickw' visible='true' lat='50.9273708' lon='-1.3479827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303941' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9278965' lon='-1.416189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014689' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9311355' lon='-1.3723669' />
-  <node id='24668080' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9899848' lon='-1.4098462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743115' timestamp='2006-11-12T22:57:31+00:00' user='Dean Earley' visible='true' lat='50.9083732' lon='-1.4155645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591402' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9131184' lon='-1.4539451' />
-  <node id='27434186' timestamp='2007-04-17T22:04:01+01:00' visible='true' lat='50.9285553' lon='-1.3862911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239322' timestamp='2007-10-25T21:07:04+01:00' user='Nick Dyer' visible='true' lat='50.9347685' lon='-1.4508535' />
-  <node id='91130460' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true' lat='50.9280103' lon='-1.4312657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952641' timestamp='2007-02-11T00:33:17+00:00' visible='true' lat='50.9320573' lon='-1.3800203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071315' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.9214531' lon='-1.3601183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949860' timestamp='2007-01-07T12:38:47+00:00' user='nickw' visible='true' lat='50.9954646' lon='-1.3716883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27561974' timestamp='2007-04-23T21:54:54+01:00' user='waschbaer' visible='true' lat='50.9051403' lon='-1.4129614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392364' timestamp='2007-05-20T17:53:03+01:00' visible='true' lat='50.9658706' lon='-1.3525492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387819' timestamp='2007-04-05T14:20:13+01:00' user='Dean Earley' visible='true' lat='50.9303' lon='-1.38883' />
-  <node id='25296389' timestamp='2007-01-19T09:58:46+00:00' user='Dean Earley' visible='true' lat='50.975505' lon='-1.3651382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636815' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9511614' lon='-1.4124464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743137' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9264301' lon='-1.4360514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089126' timestamp='2007-06-08T23:30:34+01:00' visible='true' lat='50.9641911' lon='-1.3799919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194345' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.94526' lon='-1.4368543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956586' timestamp='2007-06-26T23:44:58+01:00' user='nickw' visible='true' lat='50.9278059' lon='-1.3484247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657109' timestamp='2006-06-03T23:38:49+01:00' user='Dean Earley' visible='true' lat='50.933' lon='-1.38338'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Brook' />
-  </node>
-  <node id='28194431' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9473081' lon='-1.435944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256427' timestamp='2007-06-12T20:20:04+01:00' visible='true' lat='50.9801138' lon='-1.3552196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236095' timestamp='2007-04-29T19:25:28+01:00' user='Andy Street' visible='true' lat='50.9115881' lon='-1.3544048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169424885' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true' lat='50.9328319' lon='-1.4422039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463046' timestamp='2007-05-22T00:01:34+01:00' user='nickw' visible='true' lat='50.9090077' lon='-1.4086069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160283359' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.91699' lon='-1.4872054' />
-  <node id='254387' timestamp='2007-01-19T20:35:59+00:00' user='Dean Earley' visible='true' lat='50.9210612' lon='-1.3690253' />
-  <node id='30780829' timestamp='2007-06-22T21:09:53+01:00' user='Steve Chilton' visible='true' lat='50.9077307' lon='-1.4112678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111060' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9890964' lon='-1.3882986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325217' timestamp='2006-11-11T17:21:04+00:00' user='Dean Earley' visible='true' lat='50.9384261' lon='-1.3545256' />
-  <node id='24924182' timestamp='2007-01-06T14:37:47+00:00' user='nickw' visible='true' lat='50.9424048' lon='-1.3735898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282155' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9755685' lon='-1.4090167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466086' timestamp='2007-05-22T00:37:54+01:00' user='Dean Earley' visible='true' lat='50.98223' lon='-1.446078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254881' timestamp='2006-09-02T18:21:44+01:00' user='Dean Earley' visible='true' lat='50.9110167' lon='-1.4013121' />
-  <node id='28194330' timestamp='2007-04-29T08:20:21+01:00' visible='true' lat='50.9447987' lon='-1.4350583'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796854' timestamp='2007-05-30T22:26:18+01:00' user='nickw' visible='true' lat='50.9169025' lon='-1.3597931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102966' timestamp='2006-10-27T22:27:53+01:00' user='Dean Earley' visible='true' lat='50.928254' lon='-1.3560841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331325' timestamp='2006-11-11T21:23:57+00:00' user='Dean Earley' visible='true' lat='51.0022' lon='-1.3611' />
-  <node id='28265078' timestamp='2007-04-29T23:43:11+01:00' user='Andy Street' visible='true' lat='50.9146892' lon='-1.3355468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422973' timestamp='2007-04-05T14:20:13+01:00' user='Dean Earley' visible='true' lat='50.9321' lon='-1.41018' />
-  <node id='28194909' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9412645' lon='-1.4078036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120333' timestamp='2007-10-29T08:15:56+00:00' user='nickw' visible='true' lat='50.9305906' lon='-1.4473813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575784' timestamp='2007-03-16T21:52:31+00:00' user='nickw' visible='true' lat='50.9001272' lon='-1.3994522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342573' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9063272' lon='-1.365901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342624' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9099476' lon='-1.3672519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504517' timestamp='2007-06-17T21:45:21+01:00' visible='true' lat='50.98243' lon='-1.3590787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249871' timestamp='2007-04-29T21:41:42+01:00' visible='true' lat='50.9186682' lon='-1.4420125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141400' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9263729' lon='-1.4271409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561565' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9255088' lon='-1.4297891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708021' timestamp='2007-05-28T12:04:04+01:00' visible='true' lat='50.9840448' lon='-1.363913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621212' timestamp='2007-06-18T21:09:41+01:00' visible='true' lat='50.9699081' lon='-1.3550256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700413' timestamp='2007-04-05T14:20:13+01:00' user='Dean Earley' visible='true' lat='50.9261558' lon='-1.3885359' />
-  <node id='28252950' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.944916' lon='-1.4285582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122322758' timestamp='2007-11-18T19:04:32+00:00' user='nickw' visible='true' lat='50.9141577' lon='-1.4331073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601311' timestamp='2006-09-01T00:20:32+01:00' user='nickw' visible='true' lat='50.8345037' lon='-1.5069332'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21600589' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9867886' lon='-1.3996617'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721047' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9612828' lon='-1.367024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227215' timestamp='2006-10-23T20:52:55+01:00' user='nickw' visible='true' lat='50.9319484' lon='-1.4124292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419683' timestamp='2006-07-24T21:03:41+01:00' user='nickw' visible='true' lat='50.9153495' lon='-1.4321519' />
-  <node id='298246' timestamp='2006-08-11T09:59:03+01:00' user='80n' visible='true' lat='50.9953044' lon='-1.3581638' />
-  <node id='29000934' timestamp='2007-05-12T09:30:25+01:00' user='nickw' visible='true' lat='50.9188651' lon='-1.410741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180235' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.961853' lon='-1.4255395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957242' timestamp='2007-01-28T00:07:22+00:00' visible='true' lat='50.921932' lon='-1.408308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601293' timestamp='2006-09-01T00:16:01+01:00' user='nickw' visible='true' lat='50.8163381' lon='-1.5737915'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25480578' timestamp='2007-01-27T23:26:06+00:00' visible='true' lat='50.9101367' lon='-1.3900366'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21561786' timestamp='2007-04-03T00:52:02+01:00' user='Dean Earley' visible='true' lat='50.924364' lon='-1.4362477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544329' timestamp='2007-04-05T14:20:13+01:00' user='Dean Earley' visible='true' lat='50.9304' lon='-1.38762' />
-  <node id='30226351' timestamp='2007-06-11T22:23:49+01:00' visible='true' lat='50.9810124' lon='-1.3539812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243981296' timestamp='2008-01-29T12:06:34+00:00' user='Dean Earley' visible='true' lat='50.9657499' lon='-1.3505335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419449' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9417261' lon='-1.3715552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507763' timestamp='2006-12-18T21:22:00+00:00' user='nickw' visible='true' lat='50.9385145' lon='-1.3923146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746350' timestamp='2007-05-28T12:47:26+01:00' visible='true' lat='51.001511' lon='-1.3398953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942509' timestamp='2006-07-19T01:47:54+01:00' user='Dean Earley' visible='true' lat='50.9124964' lon='-1.3456588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583081' timestamp='2007-05-02T23:57:59+01:00' visible='true' lat='50.9366647' lon='-1.4338244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613497' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9793899' lon='-1.3958558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028853' timestamp='2006-10-27T22:49:35+01:00' user='Dean Earley' visible='true' lat='50.9333412' lon='-1.349845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689113' timestamp='2007-02-18T20:19:17+00:00' visible='true' lat='50.9390718' lon='-1.3844636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874073' timestamp='2007-05-08T14:50:37+01:00' visible='true' lat='50.9386519' lon='-1.440879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711126' timestamp='2007-05-28T14:39:21+01:00' visible='true' lat='50.9784436' lon='-1.3633216'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816315' timestamp='2007-05-31T21:52:29+01:00' visible='true' lat='50.9913554' lon='-1.3545756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707283' timestamp='2007-05-28T11:52:22+01:00' visible='true' lat='50.9871914' lon='-1.3633359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120348' timestamp='2007-10-29T08:12:54+00:00' user='nickw' visible='true' lat='50.9312088' lon='-1.4464277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668359' timestamp='2007-01-04T21:06:45+00:00' user='nickw' visible='true' lat='50.9853014' lon='-1.389433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469876' timestamp='2007-11-18T18:58:29+00:00' user='nickw' visible='true' lat='50.9130998' lon='-1.4326503' />
-  <node id='142618200' timestamp='2007-11-29T22:29:51+00:00' user='nickw' visible='true' lat='50.9137379' lon='-1.4172834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021710' timestamp='2007-04-03T00:50:47+01:00' user='Dean Earley' visible='true' lat='50.9266747' lon='-1.4427573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028894' timestamp='2006-09-08T23:06:54+01:00' user='Dean Earley' visible='true' lat='50.9352336' lon='-1.3498852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122320980' timestamp='2007-11-18T19:03:28+00:00' user='nickw' visible='true' lat='50.91358' lon='-1.4339789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956740' timestamp='2007-06-26T23:49:25+01:00' user='nickw' visible='true' lat='50.928047' lon='-1.3509627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243981069' timestamp='2008-01-29T12:02:00+00:00' user='Dean Earley' visible='true' lat='50.9603079' lon='-1.3494028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303129' timestamp='2007-01-19T18:27:11+00:00' user='Dean Earley' visible='true' lat='50.9639624' lon='-1.3847285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831116' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9135446' lon='-1.4050346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296016' timestamp='2007-01-19T09:28:06+00:00' user='Dean Earley' visible='true' lat='50.9864914' lon='-1.350813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071392' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9289971' lon='-1.3629355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724272' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9274506' lon='-1.4050372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549371' timestamp='2007-06-08T18:12:33+01:00' visible='true' lat='50.965178' lon='-1.3723643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632091' timestamp='2007-12-10T19:40:05+00:00' user='sladen' visible='true' lat='50.9670595' lon='-1.350314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464229' timestamp='2007-05-22T00:19:07+01:00' user='Dean Earley' visible='true' lat='50.9371103' lon='-1.4199766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684890' timestamp='2007-10-31T12:25:04+00:00' user='Dean Earley' visible='true' lat='50.9630212' lon='-1.4224573' />
-  <node id='206163092' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.9716964' lon='-1.3853711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518786' timestamp='2007-04-05T14:20:14+01:00' user='Dean Earley' visible='true' lat='50.9195352' lon='-1.3886797' />
-  <node id='13706730' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8927326' lon='-1.3841914'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29621227' timestamp='2007-05-26T11:35:17+01:00' visible='true' lat='50.9638671' lon='-1.3715047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663591' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9065261' lon='-1.4057428' />
-  <node id='92682866' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9621416' lon='-1.4257067' />
-  <node id='310851' timestamp='2005-12-12T23:32:04+00:00' user='nickw' visible='true' lat='50.9160519' lon='-1.3970232' />
-  <node id='28240296' timestamp='2007-04-29T20:02:52+01:00' user='Andy Street' visible='true' lat='50.9043895' lon='-1.3545858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581823' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9154778' lon='-1.4496879' />
-  <node id='21689166' timestamp='2007-02-18T20:19:01+00:00' visible='true' lat='50.9405552' lon='-1.3722455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613411' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9865105' lon='-1.4186284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721032' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9672832' lon='-1.3694238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90616287' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true' lat='50.8954778' lon='-1.4037458' />
-  <node id='29998556' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.9648045' lon='-1.427236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162250' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9733915' lon='-1.3848049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179537' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9560806' lon='-1.3987841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636944' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9187227' lon='-1.4309497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581827' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9145038' lon='-1.4501599' />
-  <node id='301598' timestamp='2005-12-08T22:43:53+00:00' user='nickw' visible='true' lat='50.9312439' lon='-1.4027953' />
-  <node id='20979896' timestamp='2007-01-28T00:55:34+00:00' visible='true' lat='50.9275047' lon='-1.3886377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109766' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true' lat='50.9300256' lon='-1.431026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20954596' timestamp='2006-11-10T08:43:41+00:00' user='nickw' visible='true' lat='50.938306' lon='-1.4005876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254353' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9489006' lon='-1.435134' />
-  <node id='59743404' timestamp='2007-09-25T14:03:06+01:00' visible='true' lat='50.9144032' lon='-1.4027126'>
-    <tag k='type' v='magistrates' />
-    <tag k='amenity' v='courthouse' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='12889441' timestamp='2007-12-10T19:33:02+00:00' user='sladen' visible='true' lat='50.9550311' lon='-1.3606652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794814' timestamp='2007-05-30T21:56:42+01:00' user='nickw' visible='true' lat='50.9188846' lon='-1.354886'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='41999477' timestamp='2007-09-05T21:05:11+01:00' user='mike l' visible='true' lat='50.9379296' lon='-1.3990466'>
-    <tag k='amenity' v='fuel' />
-    <tag k='name' v='Shell' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='20964054' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='51.0028229' lon='-1.4394785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549386' timestamp='2007-05-24T11:22:52+01:00' visible='true' lat='50.9642787' lon='-1.3753248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530525' timestamp='2007-05-23T13:04:49+01:00' visible='true' lat='50.9850263' lon='-1.3563108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964112' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.920952' lon='-1.3778717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518775' timestamp='2007-04-05T14:20:14+01:00' user='Dean Earley' visible='true' lat='50.9156132' lon='-1.393877' />
-  <node id='25296286' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9728641' lon='-1.3678537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160284171' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9170982' lon='-1.4925097' />
-  <node id='59936561' timestamp='2007-09-26T21:57:27+01:00' visible='true' lat='50.9067625' lon='-1.4117748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130948' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.9316427' lon='-1.3585158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134822' timestamp='2007-05-15T20:53:14+01:00' user='nickw' visible='true' lat='50.9447937' lon='-1.3852186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563365' timestamp='2007-04-23T23:02:19+01:00' visible='true' lat='50.9284255' lon='-1.3970875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505714' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9947207' lon='-1.3535265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091853' timestamp='2007-12-10T21:01:29+00:00' user='sladen' visible='true' lat='50.9111453' lon='-1.4269414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463018' timestamp='2007-05-22T00:01:31+01:00' user='nickw' visible='true' lat='50.9105514' lon='-1.4017885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254729' timestamp='2007-12-06T20:43:04+00:00' user='Dean Earley' visible='true' lat='50.9973319' lon='-1.3565599' />
-  <node id='114099530' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9536282' lon='-1.3609694' />
-  <node id='28903736' timestamp='2007-05-10T00:36:35+01:00' visible='true' lat='50.9351652' lon='-1.3712979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659207' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9042636' lon='-1.4070732' />
-  <node id='25764488' timestamp='2007-02-10T23:53:40+00:00' visible='true' lat='50.9151678' lon='-1.395089' />
-  <node id='29838715' timestamp='2007-06-01T20:37:03+01:00' visible='true' lat='50.9696821' lon='-1.3887569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179435' timestamp='2007-04-29T01:53:14+01:00' user='Dean Earley' visible='true' lat='50.9633508' lon='-1.4185258'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30510877' timestamp='2007-06-17T22:25:15+01:00' visible='true' lat='50.9756631' lon='-1.3577581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639950' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9020709' lon='-1.378433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372780' timestamp='2007-05-01T10:05:21+01:00' visible='true' lat='50.9310416' lon='-1.4426429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582047' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9304378' lon='-1.4499032' />
-  <node id='28830570' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.9282414' lon='-1.3610714'>
-    <tag k='name' v='CORN CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984788' timestamp='2007-01-10T00:15:07+00:00' user='nickw' visible='true' lat='50.9423562' lon='-1.384854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518767' timestamp='2007-04-05T14:20:14+01:00' user='Dean Earley' visible='true' lat='50.909' lon='-1.39554' />
-  <node id='29815434' timestamp='2007-05-31T21:37:05+01:00' visible='true' lat='50.987227' lon='-1.3543425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650774' timestamp='2007-04-05T14:20:15+01:00' user='Dean Earley' visible='true' lat='50.9308' lon='-1.40293' />
-  <node id='30161374' timestamp='2007-12-10T19:38:34+00:00' user='sladen' visible='true' lat='50.9753938' lon='-1.3721751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726557' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.911856' lon='-1.4008668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341784' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9129414' lon='-1.3633183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815063' timestamp='2007-05-31T21:30:59+01:00' visible='true' lat='50.988261' lon='-1.3552494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999006' timestamp='2007-06-05T23:29:01+01:00' user='nickw' visible='true' lat='50.9916351' lon='-1.43707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089085' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.9676095' lon='-1.3794595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='330491' timestamp='2007-04-05T14:20:15+01:00' user='Dean Earley' visible='true' lat='50.9209136' lon='-1.4047292' />
-  <node id='28830591' timestamp='2007-05-05T08:52:59+01:00' user='nickw' visible='true' lat='50.9230563' lon='-1.3572319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924068' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9390707' lon='-1.3744195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740482' timestamp='2006-09-16T19:31:32+01:00' user='nickw' visible='true' lat='50.9934341' lon='-1.3503824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249918' timestamp='2007-12-10T20:45:55+00:00' user='sladen' visible='true' lat='50.9170871' lon='-1.4554372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29712187' timestamp='2007-05-28T15:03:25+01:00' visible='true' lat='50.986044' lon='-1.3552166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762782' timestamp='2007-05-29T21:12:05+01:00' visible='true' lat='50.9885834' lon='-1.3562406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341771' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9127284' lon='-1.360974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705641' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.894768' lon='-1.4087617' />
-  <node id='160260405' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9504189' lon='-1.3687848' />
-  <node id='29730528' timestamp='2007-05-28T19:36:57+01:00' visible='true' lat='50.9704216' lon='-1.3686903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310982' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9642627' lon='-1.4301568' />
-  <node id='29914405' timestamp='2007-06-03T16:22:48+01:00' visible='true' lat='50.9852481' lon='-1.3619381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447384' timestamp='2007-12-07T20:56:29+00:00' user='Steve Jeapes' visible='true' lat='50.9009035' lon='-1.3911988'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Chapel Arms' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='21636800' timestamp='2007-04-29T02:33:42+01:00' user='Dean Earley' visible='true' lat='50.9516485' lon='-1.4068439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947174' timestamp='2007-02-16T20:51:23+00:00' user='nickw' visible='true' lat='50.9110257' lon='-1.3922344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28936000' timestamp='2007-05-11T00:59:46+01:00' visible='true' lat='50.940671' lon='-1.4420593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781155' timestamp='2007-03-25T18:42:11+01:00' user='Dean Earley' visible='true' lat='50.9022485' lon='-1.3742397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486279' timestamp='2007-07-09T11:55:40+01:00' visible='true' lat='50.9100165' lon='-1.3804538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243610' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.9370658' lon='-1.4150773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613396' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9766244' lon='-1.4309076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409605' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9108747' lon='-1.4304004' />
-  <node id='254470' timestamp='2006-11-12T17:51:48+00:00' user='Dean Earley' visible='true' lat='50.9145116' lon='-1.3622315' />
-  <node id='90582765' timestamp='2007-10-28T20:25:32+00:00' user='Nick Dyer' visible='true' lat='50.9235184' lon='-1.4445123' />
-  <node id='29001323' timestamp='2007-05-12T09:40:13+01:00' user='nickw' visible='true' lat='50.9219585' lon='-1.3827884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001304' timestamp='2007-05-15T20:38:59+01:00' user='nickw' visible='true' lat='50.9272768' lon='-1.3784628'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254928' timestamp='2007-02-13T02:05:10+00:00' user='Dean Earley' visible='true' lat='50.9849148' lon='-1.46118' />
-  <node id='242723' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9308195' lon='-1.417399' />
-  <node id='157190806' timestamp='2007-12-08T20:00:24+00:00' user='nickw' visible='true' lat='50.9381918' lon='-1.4485188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928600' timestamp='2007-06-03T21:52:07+01:00' visible='true' lat='50.9783474' lon='-1.36106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710898' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9852592' lon='-1.3569463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963735' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9333059' lon='-1.4153815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675890' timestamp='2007-01-25T22:42:43+00:00' user='Dean Earley' visible='true' lat='50.9304082' lon='-1.3592965'>
-    <tag k='is_in' v='Hampshire' />
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Townhill Park' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21613437' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.9761504' lon='-1.404993'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275640' timestamp='2007-06-01T16:38:56+01:00' user='Dean Earley' visible='true' lat='50.9213075' lon='-1.4349044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45158385' timestamp='2007-09-07T17:35:51+01:00' user='mike l' visible='true' lat='50.9434974' lon='-1.4337918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743152' timestamp='2007-04-03T00:52:06+01:00' user='Dean Earley' visible='true' lat='50.9246811' lon='-1.4370994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890096' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.9196511' lon='-1.3909908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689096' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9416005' lon='-1.385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932470' timestamp='2007-05-10T21:06:12+01:00' user='Dean Earley' visible='true' lat='50.9637109' lon='-1.465952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324995' timestamp='2006-11-11T17:21:15+00:00' user='Dean Earley' visible='true' lat='50.9598485' lon='-1.4239479' />
-  <node id='29999034' timestamp='2007-06-05T23:29:03+01:00' user='nickw' visible='true' lat='50.9995625' lon='-1.4271764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001706' timestamp='2007-05-12T09:53:02+01:00' user='nickw' visible='true' lat='50.940397' lon='-1.3642554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464267' timestamp='2007-05-22T00:19:16+01:00' user='Dean Earley' visible='true' lat='50.950185' lon='-1.4029804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595159' timestamp='2007-05-25T21:54:23+01:00' visible='true' lat='50.9677529' lon='-1.353992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764417' timestamp='2007-05-30T21:37:23+01:00' user='nickw' visible='true' lat='50.923305' lon='-1.363591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071375' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9180725' lon='-1.3623947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949877' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9897875' lon='-1.3787212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31163577' timestamp='2007-07-01T22:15:23+01:00' visible='true' lat='50.9648356' lon='-1.3520896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573792' timestamp='2007-09-16T10:20:35+01:00' user='mike l' visible='true' lat='50.9972916' lon='-1.4143519' />
-  <node id='21419415' timestamp='2007-09-23T16:33:08+01:00' user='mike l' visible='true' lat='50.9404249' lon='-1.3685218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282080' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9756256' lon='-1.4059652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388908' timestamp='2007-04-05T14:20:15+01:00' user='Dean Earley' visible='true' lat='50.9442' lon='-1.40031' />
-  <node id='29998946' timestamp='2007-06-05T23:28:53+01:00' user='nickw' visible='true' lat='50.9878835' lon='-1.4348052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305626' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='50.9843385' lon='-1.3874524' />
-  <node id='28935738' timestamp='2007-05-11T00:50:36+01:00' visible='true' lat='50.9393815' lon='-1.4456258'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021744' timestamp='2007-04-03T00:52:30+01:00' user='Ben' visible='true' lat='50.9381466' lon='-1.3932039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957216' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9159117' lon='-1.421501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895700' timestamp='2007-02-13T18:31:38+00:00' user='Dean Earley' visible='true' lat='50.9553426' lon='-1.4039552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026787' timestamp='2007-05-13T10:10:56+01:00' user='nickw' visible='true' lat='50.9174209' lon='-1.4080657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727990' timestamp='2007-02-11T00:33:24+00:00' visible='true' lat='50.9178984' lon='-1.3955632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90665700' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9007832' lon='-1.4156219' />
-  <node id='21178407' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.9869361' lon='-1.3507831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398763' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9441569' lon='-1.4139363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705759' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8927491' lon='-1.4017266' />
-  <node id='91117407' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9284478' lon='-1.443259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250019' timestamp='2007-04-29T21:42:15+01:00' visible='true' lat='50.9149826' lon='-1.4488644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122340925' timestamp='2007-11-18T19:14:38+00:00' user='nickw' visible='true' lat='50.9195716' lon='-1.4382677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275657' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true' lat='50.9113726' lon='-1.4307695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783087' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9422546' lon='-1.3531791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924098' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.9397228' lon='-1.3746477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689153' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9396163' lon='-1.3751063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577082' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9146391' lon='-1.4592322' />
-  <node id='29632219' timestamp='2007-05-26T19:21:20+01:00' visible='true' lat='50.9581786' lon='-1.3689609'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675834' timestamp='2007-04-05T14:20:15+01:00' user='Dean Earley' visible='true' lat='50.9273613' lon='-1.3762497' />
-  <node id='13071409' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9221402' lon='-1.3557777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240330' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9062074' lon='-1.3516845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372814' timestamp='2007-05-01T10:05:25+01:00' visible='true' lat='50.9300831' lon='-1.4334536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957225' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.917113' lon='-1.4153037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957845' timestamp='2007-09-10T19:10:37+01:00' user='mike l' visible='true' lat='50.942202' lon='-1.4403762'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28232565' timestamp='2007-04-29T18:59:31+01:00' user='nickw' visible='true' lat='50.9164731' lon='-1.3561103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419249' timestamp='2007-02-18T20:18:44+00:00' visible='true' lat='50.9379233' lon='-1.3589269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238996' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9179289' lon='-1.4405343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48884749' timestamp='2007-09-10T19:07:16+01:00' user='mike l' visible='true' lat='50.9430889' lon='-1.432969' />
-  <node id='9280986' timestamp='2007-02-18T20:18:25+00:00' visible='true' lat='50.9155761' lon='-1.3629226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961058' timestamp='2006-11-11T17:12:51+00:00' user='Dean Earley' visible='true' lat='50.9352141' lon='-1.3335992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816728' timestamp='2007-05-31T22:13:29+01:00' visible='true' lat='50.9900996' lon='-1.3569479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372765' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9294283' lon='-1.4354584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227249' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9425559' lon='-1.4141796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325263' timestamp='2005-12-16T23:24:52+00:00' user='80n' visible='true' lat='50.9223011' lon='-1.3150712' />
-  <node id='28346972' timestamp='2007-04-30T23:26:37+01:00' user='nickw' visible='true' lat='50.899649' lon='-1.3624976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254690' timestamp='2006-11-12T17:38:42+00:00' user='Dean Earley' visible='true' lat='50.9475795' lon='-1.3719965' />
-  <node id='29929008' timestamp='2007-06-03T21:58:07+01:00' visible='true' lat='50.9743033' lon='-1.3608305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636521' timestamp='2006-12-18T20:55:31+00:00' visible='true' lat='50.9284543' lon='-1.3879758'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='24924316' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9876075' lon='-1.373714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183635' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9052355' lon='-1.3799513' />
-  <node id='28345050' timestamp='2007-04-30T23:00:37+01:00' user='nickw' visible='true' lat='50.926466' lon='-1.3561885'>
-    <tag k='name' v='HAZELWD RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325232' timestamp='2006-11-11T17:21:20+00:00' user='Dean Earley' visible='true' lat='50.9353356' lon='-1.3383906' />
-  <node id='29794381' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.9236181' lon='-1.3633122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092026' timestamp='2006-11-19T12:29:33+00:00' user='nickw' visible='true' lat='50.9746874' lon='-1.4370721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548705' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.964232' lon='-1.3627672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949988' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9887727' lon='-1.3879906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728565' timestamp='2007-03-23T22:53:03+00:00' user='nickw' visible='true' lat='50.9007726' lon='-1.3741224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141383' timestamp='2006-11-21T23:12:42+00:00' user='nickw' visible='true' lat='50.923763' lon='-1.4174559'>
-    <tag k='name' v='KELLETT' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582965' timestamp='2007-05-02T23:57:48+01:00' visible='true' lat='50.9400059' lon='-1.4255948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342774' timestamp='2007-04-30T22:17:38+01:00' user='nickw' visible='true' lat='50.9058261' lon='-1.3612919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254866' timestamp='2007-02-18T21:30:28+00:00' visible='true' lat='50.9215933' lon='-1.4733037' />
-  <node id='91116012' timestamp='2007-10-29T08:08:03+00:00' user='nickw' visible='true' lat='50.9272645' lon='-1.4426729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958637' timestamp='2007-09-10T23:55:11+01:00' visible='true' lat='50.9063801' lon='-1.3988584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282087' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9754202' lon='-1.4079369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464275' timestamp='2007-05-22T00:19:17+01:00' user='Dean Earley' visible='true' lat='50.9381361' lon='-1.4041968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52181337' timestamp='2007-09-15T19:10:58+01:00' user='mike l' visible='true' lat='50.9754976' lon='-1.4492367' />
-  <node id='28173956' timestamp='2007-04-29T01:03:22+01:00' visible='true' lat='50.9420455' lon='-1.4351854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507797' timestamp='2007-05-22T00:19:47+01:00' user='Dean Earley' visible='true' lat='50.9439026' lon='-1.4060626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360191' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9553439' lon='-1.371499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640003' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9104542' lon='-1.3711482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222197' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9069893' lon='-1.4160936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577071' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.912166' lon='-1.4404611' />
-  <node id='30290751' timestamp='2007-06-13T09:24:03+01:00' visible='true' lat='50.9652446' lon='-1.3768348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932243' timestamp='2007-05-10T20:49:12+01:00' user='Dean Earley' visible='true' lat='50.9805973' lon='-1.4514916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467558' timestamp='2007-04-19T17:55:53+01:00' visible='true' lat='50.9357344' lon='-1.377138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269049' timestamp='2005-11-20T12:17:36+00:00' user='nickw' visible='true' lat='50.9481971' lon='-1.3713756' />
-  <node id='25282132' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9762289' lon='-1.4059729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259903' timestamp='2007-04-29T23:09:27+01:00' user='Andy Street' visible='true' lat='50.9015417' lon='-1.3495862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486266' timestamp='2007-07-09T11:55:38+01:00' visible='true' lat='50.9107581' lon='-1.3815507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422963' timestamp='2007-04-05T14:20:16+01:00' user='Dean Earley' visible='true' lat='50.9104' lon='-1.40891' />
-  <node id='20130971' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9296421' lon='-1.3563001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021759' timestamp='2007-04-03T00:52:40+01:00' user='Ben' visible='true' lat='50.9398903' lon='-1.3796054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998064' timestamp='2007-06-05T23:00:21+01:00' user='nickw' visible='true' lat='50.9875209' lon='-1.4122366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601296' timestamp='2007-11-18T22:51:14+00:00' user='Dean Earley' visible='true' lat='50.8189078' lon='-1.5697317'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='14601360' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9170874' lon='-1.4855402'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28345067' timestamp='2007-04-30T23:00:39+01:00' user='nickw' visible='true' lat='50.9296598' lon='-1.35909'>
-    <tag k='name' v='OZIER RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183654' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.8990215' lon='-1.3780716' />
-  <node id='20971194' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9067162' lon='-1.3997159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675781' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9164324' lon='-1.4573513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745444' timestamp='2006-09-03T01:40:44+01:00' user='Dean Earley' visible='true' lat='50.9689407' lon='-1.3504995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976786' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.928442' lon='-1.4212276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269309' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9700588' lon='-1.340132' />
-  <node id='13071265' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9190422' lon='-1.3605557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342607' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9059513' lon='-1.3707485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359705' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9686642' lon='-1.3525766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874145' timestamp='2007-06-02T19:43:16+01:00' visible='true' lat='50.9604504' lon='-1.3587639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325025' timestamp='2006-11-11T17:21:29+00:00' user='Dean Earley' visible='true' lat='50.9600623' lon='-1.4318289' />
-  <node id='21561799' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.92214' lon='-1.4385702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071435' timestamp='2007-03-04T19:43:33+00:00' user='Dean Earley' visible='true' lat='50.9214041' lon='-1.3544124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331319' timestamp='2006-11-11T21:24:03+00:00' user='Dean Earley' visible='true' lat='51.0002' lon='-1.35604' />
-  <node id='14727977' timestamp='2006-12-18T23:27:23+00:00' visible='true' lat='50.9253789' lon='-1.3870177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237094' timestamp='2007-04-29T19:33:19+01:00' user='nickw' visible='true' lat='50.9106298' lon='-1.3498821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613463' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9780138' lon='-1.4014696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254427' timestamp='2007-08-12T23:07:49+01:00' user='Edward' visible='true' lat='50.9125354' lon='-1.4000012' />
-  <node id='30124376' timestamp='2007-06-09T19:43:10+01:00' user='nickw' visible='true' lat='50.9250255' lon='-1.3501888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728887' timestamp='2007-05-28T19:12:39+01:00' visible='true' lat='50.9709855' lon='-1.3591635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='285866' timestamp='2005-12-03T12:42:09+00:00' user='nickw' visible='true' lat='50.9047866' lon='-1.4041901' />
-  <node id='29816552' timestamp='2007-05-31T22:04:25+01:00' visible='true' lat='50.991402' lon='-1.3546242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745488' timestamp='2006-10-03T23:25:14+01:00' user='Dean Earley' visible='true' lat='50.9526349' lon='-1.4039274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704599' timestamp='2007-05-28T10:48:37+01:00' visible='true' lat='50.9783968' lon='-1.3527044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724257' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9235595' lon='-1.4135366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026660' timestamp='2007-05-13T10:11:10+01:00' user='nickw' visible='true' lat='50.9177956' lon='-1.4075375'>
-    <tag k='name' v='CT RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342560' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9077303' lon='-1.3652454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639901' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9014257' lon='-1.3821983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325670' timestamp='2007-10-16T17:47:53+01:00' user='Dean Earley' visible='true' lat='50.9396292' lon='-1.4279825' />
-  <node id='245146236' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9183274' lon='-1.403393' />
-  <node id='25639973' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9015775' lon='-1.3788292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711869' timestamp='2007-06-11T21:42:51+01:00' visible='true' lat='50.9856377' lon='-1.3550066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935753' timestamp='2007-05-11T00:50:43+01:00' visible='true' lat='50.9402272' lon='-1.4450261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162411' timestamp='2008-01-04T19:28:05+00:00' user='nickw' visible='true' lat='50.9725409' lon='-1.3793415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339196' timestamp='2007-04-30T20:39:46+01:00' visible='true' lat='50.9697813' lon='-1.3624254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440007' timestamp='2007-04-18T02:00:20+01:00' visible='true' lat='50.927919' lon='-1.3823887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984690' timestamp='2007-01-10T00:11:02+00:00' user='nickw' visible='true' lat='50.9449849' lon='-1.3857381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830668' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9238358' lon='-1.3639717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636755' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9452689' lon='-1.3919444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325202' timestamp='2006-11-11T17:21:33+00:00' user='Dean Earley' visible='true' lat='50.9452187' lon='-1.3643354' />
-  <node id='29491405' timestamp='2007-12-07T21:00:09+00:00' user='Steve Jeapes' visible='true' lat='50.9233621' lon='-1.394838'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Richmond Inn' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='169423537' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9307894' lon='-1.4437362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997558' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9927105' lon='-1.3471729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089070' timestamp='2007-06-08T18:11:59+01:00' visible='true' lat='50.9664711' lon='-1.3752208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179452' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9572179' lon='-1.4253581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243640' timestamp='2007-04-29T20:25:06+01:00' user='Dean Earley' visible='true' lat='50.9384094' lon='-1.4165173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='7015569' timestamp='2007-11-20T11:09:49+00:00' user='Gregory Williams' visible='true' lat='50.9214075' lon='-1.4152837'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='28236112' timestamp='2007-04-29T19:25:36+01:00' user='Andy Street' visible='true' lat='50.9078407' lon='-1.3560205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952628' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9326035' lon='-1.3803525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133035' timestamp='2007-05-15T20:36:40+01:00' user='nickw' visible='true' lat='50.9332866' lon='-1.3744748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='285832' timestamp='2007-11-29T15:23:04+00:00' user='Nick Dyer' visible='true' lat='50.9027063' lon='-1.4040383'>
-    <tag k='is_in' v='England, Hampshire' />
-    <tag k='place' v='city' />
-    <tag k='name' v='Southampton' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='20973108' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9045102' lon='-1.4089021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160387797' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9168382' lon='-1.4557205' />
-  <node id='24949962' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.997015' lon='-1.3904823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533045' timestamp='2007-12-15T20:18:40+00:00' user='nickw' visible='true' lat='50.9270898' lon='-1.4335489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482290' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.891945' lon='-1.4211854' />
-  <node id='28194360' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9437039' lon='-1.4372541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246070' timestamp='2007-10-16T17:47:53+01:00' user='Dean Earley' visible='true' lat='50.9393081' lon='-1.4273425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247795' timestamp='2007-09-05T17:47:12+01:00' user='mike l' visible='true' lat='50.9376641' lon='-1.396356' />
-  <node id='20698068' timestamp='2006-10-31T22:26:04+00:00' user='nickw' visible='true' lat='50.9045636' lon='-1.4051712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232545' timestamp='2007-04-29T18:59:24+01:00' user='nickw' visible='true' lat='50.9128905' lon='-1.3632016'>
-    <tag k='name' v='REDLANDS D' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632172' timestamp='2007-05-26T19:20:17+01:00' visible='true' lat='50.9575374' lon='-1.3678124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972783' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.9053489' lon='-1.4161697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380420' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.9456783' lon='-1.3798263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254370' timestamp='2006-09-02T14:28:40+01:00' user='Dean Earley' visible='true' lat='50.9147986' lon='-1.4063823' />
-  <node id='160242655' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9122712' lon='-1.4375351' />
-  <node id='91505916' timestamp='2007-10-29T15:43:30+00:00' user='Dean Earley' visible='true' lat='50.9658188' lon='-1.3859311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872351' timestamp='2007-06-02T19:03:53+01:00' visible='true' lat='50.9174781' lon='-1.3517845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296293' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9791862' lon='-1.3627646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227226' timestamp='2007-04-29T20:37:30+01:00' user='Dean Earley' visible='true' lat='50.9354896' lon='-1.4153046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160406928' timestamp='2007-12-10T20:57:12+00:00' user='sladen' visible='true' lat='50.9121032' lon='-1.4330698' />
-  <node id='29710215' timestamp='2007-05-28T13:24:37+01:00' visible='true' lat='50.9888366' lon='-1.3723919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290790' timestamp='2007-06-13T09:24:11+01:00' visible='true' lat='50.9646339' lon='-1.3789281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730512' timestamp='2007-05-28T19:36:40+01:00' visible='true' lat='50.970527' lon='-1.3694801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972835' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9025237' lon='-1.3915213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962319' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9572209' lon='-1.3620148' />
-  <node id='24667985' timestamp='2007-01-04T21:05:20+00:00' user='nickw' visible='true' lat='50.988034' lon='-1.4047205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726570' timestamp='2006-09-02T18:32:37+01:00' user='Dean Earley' visible='true' lat='50.9139931' lon='-1.400935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591400' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9148609' lon='-1.4590262' />
-  <node id='30124678' timestamp='2007-06-09T19:48:40+01:00' user='nickw' visible='true' lat='50.9317685' lon='-1.3536158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243511468' timestamp='2008-01-26T18:04:26+00:00' user='stuphi' visible='true' lat='50.9495994' lon='-1.3708668' />
-  <node id='29526313' timestamp='2007-05-23T09:19:02+01:00' user='nickw' visible='true' lat='50.9286482' lon='-1.3633442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704318' timestamp='2007-05-28T10:32:52+01:00' visible='true' lat='50.9857724' lon='-1.3588309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229462' timestamp='2007-06-12T00:08:05+01:00' user='nickw' visible='true' lat='50.9340236' lon='-1.3520932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706068' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8944235' lon='-1.3884584'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21561552' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9212108' lon='-1.4304408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114357' timestamp='2007-03-25T19:25:10+01:00' user='Dean Earley' visible='true' lat='50.9074535' lon='-1.3951062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348725' timestamp='2006-10-16T21:59:55+01:00' user='nickw' visible='true' lat='50.9908039' lon='-1.4410491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796775' timestamp='2007-05-30T22:22:05+01:00' user='nickw' visible='true' lat='50.914385' lon='-1.3530384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142617001' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.913359' lon='-1.4172338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462606' timestamp='2008-02-03T06:09:09+00:00' user='sladen' visible='true' lat='50.90312' lon='-1.4027149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194879' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9436697' lon='-1.4111126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329644' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true' lat='50.9390188' lon='-1.3690802' />
-  <node id='24924331' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9814542' lon='-1.3898458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831104' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9112494' lon='-1.4065049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596802' timestamp='2007-03-25T19:25:10+01:00' user='Dean Earley' visible='true' lat='50.9036151' lon='-1.3975105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728179' timestamp='2007-04-29T02:05:43+01:00' user='Dean Earley' visible='true' lat='50.9523286' lon='-1.4037824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160219862' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9160755' lon='-1.390869' />
-  <node id='25471851' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9394368' lon='-1.3677897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147719' timestamp='2008-02-03T06:03:21+00:00' user='sladen' visible='true' lat='50.9095608' lon='-1.4059507' />
-  <node id='29928071' timestamp='2007-06-03T21:43:53+01:00' visible='true' lat='50.9802229' lon='-1.3691631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998083' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.9897281' lon='-1.4065447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254540' timestamp='2007-09-23T16:33:13+01:00' user='mike l' visible='true' lat='50.9366123' lon='-1.378176' />
-  <node id='27562856' timestamp='2007-12-07T21:01:42+00:00' user='Steve Jeapes' visible='true' lat='50.9267976' lon='-1.3910014'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Mitre' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='20130921' timestamp='2006-10-28T01:45:31+01:00' user='Dean Earley' visible='true' lat='50.934319' lon='-1.3608025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600662' timestamp='2007-02-13T19:24:17+00:00' user='Dean Earley' visible='true' lat='50.9694581' lon='-1.3904839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942592' timestamp='2006-07-19T01:48:01+01:00' user='Dean Earley' visible='true' lat='50.9133124' lon='-1.3428465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464248' timestamp='2007-05-22T00:19:12+01:00' user='Dean Earley' visible='true' lat='50.9375304' lon='-1.4085711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189056' timestamp='2006-11-22T23:51:56+00:00' user='crouchingbadger' visible='true' lat='50.9300983' lon='-1.4487385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726312' timestamp='2007-01-25T23:00:48+00:00' user='Dean Earley' visible='true' lat='50.9177331' lon='-1.3757492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418261' timestamp='2007-05-02T00:31:37+01:00' visible='true' lat='50.9676116' lon='-1.3631979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577065' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9117926' lon='-1.4358777' />
-  <node id='28372742' timestamp='2007-05-01T10:05:16+01:00' visible='true' lat='50.9284578' lon='-1.4384129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976816' timestamp='2006-11-13T21:50:51+00:00' user='nickw' visible='true' lat='50.9249693' lon='-1.4224299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132709' timestamp='2006-11-11T17:21:36+00:00' user='Dean Earley' visible='true' lat='50.9507933' lon='-1.4643494' />
-  <node id='9267991' timestamp='2006-09-03T01:03:36+01:00' user='Dean Earley' visible='true' lat='50.9408982' lon='-1.377312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269319' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9992953' lon='-1.3919408' />
-  <node id='28194379' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9450263' lon='-1.4403294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26593139' timestamp='2007-03-17T20:47:44+00:00' user='nickw' visible='true' lat='50.8999946' lon='-1.3636201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976665' timestamp='2006-11-13T21:50:59+00:00' user='nickw' visible='true' lat='50.9273805' lon='-1.4205045'>
-    <tag k='name' v='IVANHOE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133206' timestamp='2006-10-28T01:55:52+01:00' user='Dean Earley' visible='true' lat='50.9285579' lon='-1.3521352'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133131' timestamp='2006-10-28T01:55:40+01:00' user='Dean Earley' visible='true' lat='50.9270927' lon='-1.3535105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926977' timestamp='2007-06-03T21:16:19+01:00' visible='true' lat='50.985042' lon='-1.3680918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21661765' timestamp='2006-12-20T23:57:08+00:00' user='nickw' visible='true' lat='50.9029478' lon='-1.4044707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157190823' timestamp='2007-12-08T20:00:25+00:00' user='nickw' visible='true' lat='50.9391808' lon='-1.449383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194906' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9410515' lon='-1.4072939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21614667' timestamp='2006-12-16T20:57:37+00:00' user='nickw' visible='true' lat='50.9004332' lon='-1.4053525'>
-    <tag k='name' v='HAMTUN ST' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967606' timestamp='2006-11-12T20:47:05+00:00' user='Dean Earley' visible='true' lat='50.9183923' lon='-1.3934361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071430' timestamp='2006-08-11T02:48:16+01:00' user='Dean Earley' visible='true' lat='50.9188945' lon='-1.3507457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668033' timestamp='2007-04-29T01:53:38+01:00' user='Dean Earley' visible='true' lat='50.9574086' lon='-1.4090607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998903' timestamp='2007-06-05T23:28:48+01:00' user='nickw' visible='true' lat='50.9866579' lon='-1.4396924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998134' timestamp='2007-06-05T23:00:30+01:00' user='nickw' visible='true' lat='50.9911349' lon='-1.4034952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325681' timestamp='2007-04-05T14:20:17+01:00' user='Dean Earley' visible='true' lat='50.9215' lon='-1.417' />
-  <node id='29912995' timestamp='2007-06-03T15:50:13+01:00' visible='true' lat='50.9865724' lon='-1.3580151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463026' timestamp='2007-05-22T00:01:32+01:00' user='nickw' visible='true' lat='50.9090077' lon='-1.4017076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668299' timestamp='2007-01-04T21:06:39+00:00' user='nickw' visible='true' lat='50.9863519' lon='-1.3934263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670534' timestamp='2007-05-27T11:12:21+01:00' visible='true' lat='50.9688612' lon='-1.3633618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702374' timestamp='2006-04-15T16:30:14+01:00' user='Gagravarr' visible='true' lat='50.9737258' lon='-1.3488941' />
-  <node id='28249970' timestamp='2007-04-29T21:42:04+01:00' visible='true' lat='50.9148368' lon='-1.4461192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908494' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true' lat='50.9379395' lon='-1.3658032' />
-  <node id='254958' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9390356' lon='-1.420621' />
-  <node id='544320' timestamp='2007-04-05T14:20:17+01:00' user='Dean Earley' visible='true' lat='50.9252458' lon='-1.3933321' />
-  <node id='25640044' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.905392' lon='-1.3743641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999013' timestamp='2007-06-05T23:29:01+01:00' user='nickw' visible='true' lat='50.993936' lon='-1.438421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325253' timestamp='2006-11-11T17:21:37+00:00' user='Dean Earley' visible='true' lat='50.9261607' lon='-1.3161706' />
-  <node id='254864' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9220543' lon='-1.4711013' />
-  <node id='15359700' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9679869' lon='-1.3526697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706587' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9186789' lon='-1.3839142'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='30956627' timestamp='2007-06-26T23:45:05+01:00' user='nickw' visible='true' lat='50.9309113' lon='-1.3514445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724234' timestamp='2007-02-18T20:19:07+00:00' visible='true' lat='50.9274998' lon='-1.415028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706893' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.878577' lon='-1.362676'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28194864' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9438863' lon='-1.4075708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232561' timestamp='2007-05-30T21:41:54+01:00' user='nickw' visible='true' lat='50.9164606' lon='-1.3554746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668144' timestamp='2007-01-04T21:05:49+00:00' user='nickw' visible='true' lat='50.9846573' lon='-1.3975288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984803' timestamp='2007-02-01T22:21:13+00:00' user='Dean Earley' visible='true' lat='50.9413165' lon='-1.3801226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372757' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.9311458' lon='-1.4411634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398384' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9460935' lon='-1.4437382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924094' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.939247' lon='-1.3750053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773776' timestamp='2007-12-07T13:53:38+00:00' user='Nick Dyer' visible='true' lat='50.9613475' lon='-1.4272466' />
-  <node id='29464305' timestamp='2007-05-22T00:19:24+01:00' user='Dean Earley' visible='true' lat='50.9470432' lon='-1.3987165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107338' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9319306' lon='-1.3538206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998560' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.9627525' lon='-1.4268386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705618' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8965978' lon='-1.4076974' />
-  <node id='27021834' timestamp='2007-05-22T00:19:48+01:00' user='Dean Earley' visible='true' lat='50.9382281' lon='-1.4083666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564679' timestamp='2006-08-15T12:09:07+01:00' user='nickw' visible='true' lat='50.9297775' lon='-1.3566876'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28347590' timestamp='2007-04-30T23:36:50+01:00' user='nickw' visible='true' lat='50.9272247' lon='-1.3569548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613426' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9761908' lon='-1.4024696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254738' timestamp='2007-09-17T23:09:07+01:00' user='mike l' visible='true' lat='50.974086' lon='-1.388573' />
-  <node id='30089043' timestamp='2007-06-08T18:11:56+01:00' visible='true' lat='50.9642532' lon='-1.3762852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194446' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9460657' lon='-1.4339697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931317' timestamp='2007-12-06T20:43:05+00:00' user='Dean Earley' visible='true' lat='50.998074' lon='-1.3579378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250087' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9158351' lon='-1.4516429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509881' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9898897' lon='-1.3593149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254493' timestamp='2006-09-02T18:21:44+01:00' user='Dean Earley' visible='true' lat='50.9102597' lon='-1.4015142' />
-  <node id='24949951' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9942892' lon='-1.3901247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325018' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9582923' lon='-1.4162648' />
-  <node id='29704339' timestamp='2007-05-28T10:32:59+01:00' visible='true' lat='50.9828189' lon='-1.3608538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745425' timestamp='2006-09-03T01:40:42+01:00' user='Dean Earley' visible='true' lat='50.9624734' lon='-1.3522596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537333' timestamp='2007-06-12T00:14:51+01:00' user='nickw' visible='true' lat='50.9337145' lon='-1.3523779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708037' timestamp='2007-05-28T12:04:08+01:00' visible='true' lat='50.9797156' lon='-1.3672974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275816' timestamp='2007-11-18T19:20:01+00:00' user='nickw' visible='true' lat='50.9162498' lon='-1.4367901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632104' timestamp='2007-12-10T19:40:05+00:00' user='sladen' visible='true' lat='50.9692378' lon='-1.3494214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266196' timestamp='2006-07-01T00:24:29+01:00' user='Dean Earley' visible='true' lat='50.9488406' lon='-1.3699053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677152' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8972564' lon='-1.4403529' />
-  <node id='29008457' timestamp='2007-05-12T15:12:17+01:00' user='nickw' visible='true' lat='50.9262536' lon='-1.3462912'>
-    <tag k='name' v='WINDER RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222328' timestamp='2007-12-08T20:23:18+00:00' user='nickw' visible='true' lat='50.9462049' lon='-1.4456915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4942221' timestamp='2006-05-21T10:14:59+01:00' user='nickw' visible='true' lat='50.9217074' lon='-1.3842679' />
-  <node id='42141467' timestamp='2007-09-05T17:46:24+01:00' user='mike l' visible='true' lat='50.9345071' lon='-1.3961999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700403' timestamp='2007-04-05T14:20:18+01:00' user='Dean Earley' visible='true' lat='50.9210894' lon='-1.390069' />
-  <node id='17722348' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.954949' lon='-1.3726637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447499' timestamp='2007-04-20T23:53:15+01:00' user='Dean Earley' visible='true' lat='50.9086152' lon='-1.3912551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071234' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9208098' lon='-1.3633324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254444' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9071361' lon='-1.4014789' />
-  <node id='28347766' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.9327091' lon='-1.3632327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111718' timestamp='2007-10-29T08:01:17+00:00' user='nickw' visible='true' lat='50.927144' lon='-1.4389404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964153' timestamp='2006-12-08T00:19:53+00:00' user='Dean Earley' visible='true' lat='50.916612' lon='-1.3824706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600505' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9176093' lon='-1.4344957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700478' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9263534' lon='-1.3705377' />
-  <node id='123671353' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9171778' lon='-1.4395979' />
-  <node id='91110964' timestamp='2007-10-29T07:59:19+00:00' user='nickw' visible='true' lat='50.9273741' lon='-1.4389678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958660' timestamp='2007-09-10T23:55:13+01:00' visible='true' lat='50.9067768' lon='-1.3999655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932466' timestamp='2007-05-10T21:06:10+01:00' user='Dean Earley' visible='true' lat='50.9661694' lon='-1.4474883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816770' timestamp='2007-05-31T22:15:43+01:00' visible='true' lat='50.987934' lon='-1.3601868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675798' timestamp='2007-10-29T16:22:11+00:00' user='Nick Dyer' visible='true' lat='50.9109615' lon='-1.4404253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890078' timestamp='2006-10-27T00:48:04+01:00' user='Dean Earley' visible='true' lat='50.9195471' lon='-1.3900728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009030' timestamp='2007-05-12T15:28:42+01:00' user='nickw' visible='true' lat='50.9304911' lon='-1.3508517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903401' timestamp='2007-05-09T23:24:32+01:00' visible='true' lat='50.946711' lon='-1.3661424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092049' timestamp='2007-05-03T00:08:33+01:00' visible='true' lat='50.9401423' lon='-1.4292976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999030' timestamp='2007-06-05T23:29:03+01:00' user='nickw' visible='true' lat='50.997287' lon='-1.4330967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089036' timestamp='2007-06-08T18:11:55+01:00' visible='true' lat='50.9666887' lon='-1.3735295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997550' timestamp='2007-06-05T22:43:59+01:00' user='nickw' visible='true' lat='50.9999126' lon='-1.3474907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931356' timestamp='2007-06-03T22:43:05+01:00' visible='true' lat='50.9941889' lon='-1.3736061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480591' timestamp='2007-01-27T23:26:14+00:00' visible='true' lat='50.9095586' lon='-1.3904663'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29730503' timestamp='2007-05-28T19:36:33+01:00' visible='true' lat='50.9725333' lon='-1.3713178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249837' timestamp='2007-04-29T21:41:36+01:00' visible='true' lat='50.9199198' lon='-1.4434185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507147' timestamp='2007-06-17T22:07:49+01:00' visible='true' lat='50.9763556' lon='-1.3603368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469851' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9088891' lon='-1.4146577' />
-  <node id='21600418' timestamp='2007-01-25T22:42:44+00:00' user='Dean Earley' visible='true' lat='50.9177383' lon='-1.4296773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705616' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8967332' lon='-1.4077661'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29704453' timestamp='2007-05-28T10:36:07+01:00' visible='true' lat='50.9821918' lon='-1.3572727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372730' timestamp='2007-05-01T10:05:14+01:00' visible='true' lat='50.9316876' lon='-1.4422261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507776' timestamp='2006-12-09T09:51:42+00:00' user='nickw' visible='true' lat='50.9420041' lon='-1.3963078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431988' timestamp='2007-11-28T12:24:29+00:00' user='Dean Earley' visible='true' lat='50.9721267' lon='-1.3511341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170456' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9604145' lon='-1.3925182' />
-  <node id='28252969' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.943489' lon='-1.4277524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575746' timestamp='2007-06-04T17:52:31+01:00' visible='true' lat='50.8980369' lon='-1.3908481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48965775' timestamp='2007-11-29T15:23:28+00:00' user='Nick Dyer' visible='true' lat='50.9029607' lon='-1.4075316'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='26781174' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.9012597' lon='-1.3750059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30581719' timestamp='2007-06-18T21:23:07+01:00' visible='true' lat='50.9678925' lon='-1.3570733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398759' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9492494' lon='-1.4102066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911927' timestamp='2007-06-03T15:38:20+01:00' visible='true' lat='50.9868729' lon='-1.356898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926802' timestamp='2007-06-03T21:02:53+01:00' visible='true' lat='50.9788512' lon='-1.3646964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341745' timestamp='2007-04-30T21:48:56+01:00' user='nickw' visible='true' lat='50.9145867' lon='-1.3487956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124371' timestamp='2007-06-09T19:43:10+01:00' user='nickw' visible='true' lat='50.9250944' lon='-1.3510133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707707' timestamp='2007-05-28T11:58:07+01:00' visible='true' lat='50.9868955' lon='-1.3606847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154770235' timestamp='2007-12-07T13:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9607745' lon='-1.4264912' />
-  <node id='29931394' timestamp='2007-06-03T22:43:14+01:00' visible='true' lat='50.9948043' lon='-1.3732554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='512434' timestamp='2007-05-20T00:11:00+01:00' user='Dean Earley' visible='true' lat='50.9240913' lon='-1.3387637' />
-  <node id='21746395' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.9975999' lon='-1.3359576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689114' timestamp='2007-02-18T20:19:17+00:00' visible='true' lat='50.9396226' lon='-1.3843642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='330167' timestamp='2007-10-26T13:59:37+01:00' user='Nick Dyer' visible='true' lat='50.963574' lon='-1.4167127'>
-    <tag k='place' v='village' />
-    <tag k='name' v='Chilworth' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='13071212' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9250853' lon='-1.3668903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91228879' timestamp='2007-10-29T10:20:36+00:00' user='DrMark' visible='true' lat='50.9777299' lon='-1.4370372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346853' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9154357' lon='-1.3670386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913611' timestamp='2007-06-03T15:53:28+01:00' visible='true' lat='50.9855203' lon='-1.3592219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160298502' timestamp='2007-12-10T19:57:14+00:00' user='sladen' visible='true' lat='50.9150473' lon='-1.4845103' />
-  <node id='29838424' timestamp='2007-06-01T20:19:55+01:00' visible='true' lat='50.9643636' lon='-1.3886502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816297' timestamp='2007-05-31T21:52:25+01:00' visible='true' lat='50.9911013' lon='-1.3542195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721062' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9707193' lon='-1.3599305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507750' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9327178' lon='-1.3988607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339136' timestamp='2007-04-30T20:39:23+01:00' visible='true' lat='50.9698533' lon='-1.3626838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30255629' timestamp='2007-06-12T20:07:33+01:00' visible='true' lat='50.9792106' lon='-1.3495209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661191' timestamp='2007-04-05T14:20:18+01:00' user='Dean Earley' visible='true' lat='50.914927' lon='-1.3721932' />
-  <node id='319638' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9212765' lon='-1.3954226' />
-  <node id='305579' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9942865' lon='-1.395371' />
-  <node id='254634' timestamp='2007-04-29T01:53:39+01:00' user='Dean Earley' visible='true' lat='50.9586531' lon='-1.421791' />
-  <node id='27021804' timestamp='2007-04-03T00:52:59+01:00' user='Ben' visible='true' lat='50.9365922' lon='-1.4037776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561522' timestamp='2006-12-13T20:09:32+00:00' user='nickw' visible='true' lat='50.9216934' lon='-1.432042'>
-    <tag k='name' v='CANNON ST' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727698' timestamp='2007-04-29T19:42:18+01:00' user='Andy Street' visible='true' lat='50.9022741' lon='-1.3565253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45159057' timestamp='2007-10-16T17:47:52+01:00' user='Dean Earley' visible='true' lat='50.9435255' lon='-1.4328285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613445' timestamp='2006-12-16T17:46:56+00:00' user='David Currie' visible='true' lat='50.9776991' lon='-1.402924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30511428' timestamp='2007-06-17T22:30:28+01:00' visible='true' lat='50.9745718' lon='-1.3570447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237073' timestamp='2007-04-29T19:33:07+01:00' user='nickw' visible='true' lat='50.9090448' lon='-1.3471243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957856' timestamp='2007-09-09T12:10:13+01:00' user='mike l' visible='true' lat='50.943488' lon='-1.4319432'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29510729' timestamp='2007-05-22T21:45:56+01:00' visible='true' lat='50.972807' lon='-1.3518421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28247335' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.92587' lon='-1.4152015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305617' timestamp='2005-12-11T11:52:19+00:00' user='nickw' visible='true' lat='50.9875917' lon='-1.392839' />
-  <node id='27467490' timestamp='2007-04-19T17:50:44+01:00' visible='true' lat='50.9342464' lon='-1.3773928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797926' timestamp='2007-09-13T21:06:08+01:00' user='mike l' visible='true' lat='50.9713559' lon='-1.4505872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133225' timestamp='2006-10-28T01:55:55+01:00' user='Dean Earley' visible='true' lat='50.9286018' lon='-1.3506264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298300' timestamp='2006-11-11T17:22:21+00:00' user='Dean Earley' visible='true' lat='50.94817' lon='-1.3928233' />
-  <node id='8596819' timestamp='2006-11-13T00:43:24+00:00' user='Dean Earley' visible='true' lat='50.9045292' lon='-1.4087752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092034' timestamp='2007-12-08T19:58:59+00:00' user='nickw' visible='true' lat='50.9380518' lon='-1.447979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223959' timestamp='2007-06-11T22:03:14+01:00' visible='true' lat='50.9839165' lon='-1.3526177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662867' timestamp='2007-10-28T21:47:41+00:00' user='Nick Dyer' visible='true' lat='50.9061688' lon='-1.4068586' />
-  <node id='29998100' timestamp='2007-06-05T23:00:26+01:00' user='nickw' visible='true' lat='50.9858325' lon='-1.397853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601323' timestamp='2006-09-01T00:19:28+01:00' user='nickw' visible='true' lat='50.8851912' lon='-1.5261207'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='635141' timestamp='2006-11-12T22:57:31+00:00' user='Dean Earley' visible='true' lat='50.906559' lon='-1.4013283' />
-  <node id='29000956' timestamp='2007-05-12T09:31:57+01:00' user='nickw' visible='true' lat='50.9186804' lon='-1.4070309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923777' timestamp='2007-06-03T20:04:47+01:00' visible='true' lat='50.9829278' lon='-1.3622326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28223255' timestamp='2007-04-30T20:40:53+01:00' visible='true' lat='50.9679964' lon='-1.3587693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931839' timestamp='2007-04-05T14:20:19+01:00' user='Dean Earley' visible='true' lat='50.9233011' lon='-1.3833304' />
-  <node id='20976710' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9342268' lon='-1.4239692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282114' timestamp='2007-01-17T21:10:10+00:00' user='David Currie' visible='true' lat='50.9771609' lon='-1.4078907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089077' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.9665629' lon='-1.3771515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931371' timestamp='2007-06-03T22:43:07+01:00' visible='true' lat='50.9949367' lon='-1.3726074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124222' timestamp='2007-06-09T19:35:54+01:00' user='nickw' visible='true' lat='50.9246342' lon='-1.3503626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783076' timestamp='2007-02-11T18:07:10+00:00' user='nickw' visible='true' lat='50.9397008' lon='-1.3599338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413141' timestamp='2007-04-05T14:20:19+01:00' user='Dean Earley' visible='true' lat='50.9159' lon='-1.39717' />
-  <node id='30291043' timestamp='2007-06-13T09:32:56+01:00' visible='true' lat='50.9681072' lon='-1.3831894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432007' timestamp='2007-06-16T16:28:30+01:00' visible='true' lat='50.9755628' lon='-1.3488753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600496' timestamp='2006-12-16T10:13:58+00:00' user='nickw' visible='true' lat='50.9230216' lon='-1.4380443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134157' timestamp='2007-05-15T20:47:36+01:00' user='nickw' visible='true' lat='50.94091' lon='-1.3895148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179455' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9643307' lon='-1.4192876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971160' timestamp='2006-11-14T01:57:34+00:00' user='Dean Earley' visible='true' lat='50.9029499' lon='-1.4013386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169428756' timestamp='2007-12-14T21:38:56+00:00' user='nickw' visible='true' lat='50.9288126' lon='-1.4359956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706045' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8884718' lon='-1.3924311' />
-  <node id='13071289' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9202844' lon='-1.3578354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462621' timestamp='2007-05-21T23:56:40+01:00' user='nickw' visible='true' lat='50.9025947' lon='-1.399005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700538' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9208355' lon='-1.3953468' />
-  <node id='29709218' timestamp='2007-05-28T12:41:56+01:00' visible='true' lat='50.9961027' lon='-1.3510056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931968' timestamp='2007-04-05T14:20:19+01:00' user='Dean Earley' visible='true' lat='50.9224261' lon='-1.3839085' />
-  <node id='28249820' timestamp='2007-04-29T21:41:34+01:00' visible='true' lat='50.9203783' lon='-1.4444119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600679' timestamp='2006-12-16T11:37:28+00:00' user='David Currie' visible='true' lat='50.991067' lon='-1.4030748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659231' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9028942' lon='-1.405966' />
-  <node id='21614682' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9001529' lon='-1.4043071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486283' timestamp='2007-07-09T11:55:40+01:00' visible='true' lat='50.9099639' lon='-1.3820296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639976' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9002059' lon='-1.3797662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431969' timestamp='2007-06-16T16:26:00+01:00' visible='true' lat='50.9724552' lon='-1.352015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247791' timestamp='2007-09-05T17:47:09+01:00' user='mike l' visible='true' lat='50.9348644' lon='-1.3963558' />
-  <node id='29998117' timestamp='2007-06-05T23:00:28+01:00' user='nickw' visible='true' lat='50.9884338' lon='-1.3962239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903639' timestamp='2007-05-09T23:57:38+01:00' visible='true' lat='50.9495689' lon='-1.3637214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816780' timestamp='2007-05-31T22:15:45+01:00' visible='true' lat='50.9870381' lon='-1.3609977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254351' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9472986' lon='-1.4442648' />
-  <node id='518805' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9296554' lon='-1.3852207' />
-  <node id='29816314' timestamp='2007-05-31T21:52:29+01:00' visible='true' lat='50.9913512' lon='-1.3546672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464294' timestamp='2007-05-22T00:19:21+01:00' user='Dean Earley' visible='true' lat='50.9603865' lon='-1.4043269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59322760' timestamp='2007-09-23T20:35:59+01:00' user='mike l' visible='true' lat='50.9198292' lon='-1.4706192' />
-  <node id='28582986' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.9368265' lon='-1.4220142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718239' timestamp='2007-08-08T01:31:05+01:00' visible='true' lat='50.9351204' lon='-1.4435201' />
-  <node id='28582913' timestamp='2007-05-02T23:57:40+01:00' visible='true' lat='50.9407734' lon='-1.4278153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290760' timestamp='2007-06-13T09:24:04+01:00' visible='true' lat='50.9680365' lon='-1.3805121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420711' timestamp='2006-12-02T23:56:33+00:00' user='Dean Earley' visible='true' lat='50.9303879' lon='-1.3979062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661176' timestamp='2007-04-05T14:20:19+01:00' user='Dean Earley' visible='true' lat='50.911963' lon='-1.3573457' />
-  <node id='91111559' timestamp='2007-10-29T08:00:08+00:00' user='nickw' visible='true' lat='50.9271518' lon='-1.4390025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009222' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.9298337' lon='-1.3543383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931386' timestamp='2007-06-03T22:43:10+01:00' visible='true' lat='50.994103' lon='-1.3737733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339173' timestamp='2007-05-02T00:35:38+01:00' visible='true' lat='50.9687669' lon='-1.3627439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392343' timestamp='2007-05-20T17:52:24+01:00' visible='true' lat='50.9617135' lon='-1.3537187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237244' timestamp='2007-04-29T20:03:08+01:00' user='Andy Street' visible='true' lat='50.9054731' lon='-1.3519698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147537' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9092685' lon='-1.4038221' />
-  <node id='29913889' timestamp='2007-06-03T15:59:39+01:00' visible='true' lat='50.9851034' lon='-1.3574894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931347' timestamp='2007-06-03T22:43:03+01:00' visible='true' lat='50.9938405' lon='-1.3730464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15739310' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9137269' lon='-1.4895829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467575' timestamp='2007-04-19T17:55:57+01:00' visible='true' lat='50.936067' lon='-1.3786321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440797' timestamp='2007-01-25T23:00:44+00:00' user='Dean Earley' visible='true' lat='50.9108677' lon='-1.3885418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561812' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9230417' lon='-1.4423647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122329587' timestamp='2007-11-18T19:08:12+00:00' user='nickw' visible='true' lat='50.9146619' lon='-1.4320891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632834' timestamp='2007-05-26T20:07:22+01:00' visible='true' lat='50.9683053' lon='-1.3626958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232090' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9151429' lon='-1.4110259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134117' timestamp='2007-05-15T20:47:32+01:00' user='nickw' visible='true' lat='50.9429294' lon='-1.3834802'>
-    <tag k='name' v='FIELD CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660384' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.9042528' lon='-1.4103348' />
-  <node id='26727681' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9027535' lon='-1.3566783'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Spike Islander' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271049' timestamp='2007-12-10T19:05:58+00:00' user='sladen' visible='true' lat='50.9181425' lon='-1.3769473'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Bitterne' />
-  </node>
-  <node id='27562858' timestamp='2007-04-23T22:36:06+01:00' visible='true' lat='50.9278597' lon='-1.3920133'>
-    <tag k='tourism' v='hotel' />
-    <tag k='name' v='Highfield House Hotel' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160411094' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true' lat='50.9117568' lon='-1.4277311' />
-  <node id='90577052' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9052547' lon='-1.4165915' />
-  <node id='29512136' timestamp='2007-05-28T10:42:23+01:00' visible='true' lat='50.9771034' lon='-1.3566642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816600' timestamp='2007-05-31T22:07:51+01:00' visible='true' lat='50.9898498' lon='-1.3565044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721028' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9645999' lon='-1.3704974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874060' timestamp='2007-10-12T14:11:46+01:00' user='SteveC' visible='true' lat='50.9365611' lon='-1.441054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252920' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9463829' lon='-1.4294992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924231' timestamp='2007-02-13T19:43:31+00:00' user='Dean Earley' visible='true' lat='50.9651257' lon='-1.3857882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440012' timestamp='2007-04-18T02:00:21+01:00' visible='true' lat='50.9276684' lon='-1.3820768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895687' timestamp='2007-02-13T18:31:36+00:00' user='Dean Earley' visible='true' lat='50.9828193' lon='-1.4508714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953505' timestamp='2007-06-04T21:24:03+01:00' visible='true' lat='50.9890533' lon='-1.3681401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122316841' timestamp='2007-11-18T19:01:09+00:00' user='nickw' visible='true' lat='50.9135158' lon='-1.4363157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21586022' timestamp='2006-12-14T23:37:09+00:00' user='Dean Earley' visible='true' lat='50.9689355' lon='-1.358724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600479' timestamp='2007-05-22T00:40:26+01:00' user='Dean Earley' visible='true' lat='50.9432251' lon='-1.4435191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956733' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.9272205' lon='-1.3518368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325177' timestamp='2006-11-11T17:22:34+00:00' user='Dean Earley' visible='true' lat='50.9512808' lon='-1.4000436' />
-  <node id='171532996' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9274279' lon='-1.4348005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125570130' timestamp='2007-11-20T11:50:15+00:00' user='Nick Dyer' visible='true' lat='50.9624923' lon='-1.4230695' />
-  <node id='20957199' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9199227' lon='-1.41844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935764' timestamp='2007-05-11T00:50:49+01:00' visible='true' lat='50.9395906' lon='-1.4482613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179515' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9532106' lon='-1.4029706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632499' timestamp='2007-05-26T19:47:17+01:00' visible='true' lat='50.9613258' lon='-1.3703948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700438' timestamp='2007-04-05T14:20:20+01:00' user='Dean Earley' visible='true' lat='50.9237026' lon='-1.3836765' />
-  <node id='29929856' timestamp='2007-06-03T22:13:28+01:00' visible='true' lat='50.9773906' lon='-1.3648739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28234926' timestamp='2007-04-29T19:16:50+01:00' user='nickw' visible='true' lat='50.9075482' lon='-1.3613254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135269' timestamp='2007-05-15T20:56:02+01:00' user='nickw' visible='true' lat='50.9444683' lon='-1.386053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949917' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9925886' lon='-1.3795953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021789' timestamp='2007-04-03T00:52:50+01:00' user='Ben' visible='true' lat='50.9505485' lon='-1.3980107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254300' timestamp='2007-02-18T20:18:29+00:00' visible='true' lat='50.982798' lon='-1.3489531' />
-  <node id='25639991' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9006206' lon='-1.3748189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132724' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='51.014216' lon='-1.3432312' />
-  <node id='30956563' timestamp='2007-06-26T23:44:55+01:00' user='nickw' visible='true' lat='50.9265443' lon='-1.3509329'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194341' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9448664' lon='-1.4371065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830578' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.925851' lon='-1.3662728'>
-    <tag k='name' v='TRENT CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089146' timestamp='2007-06-08T18:12:12+01:00' visible='true' lat='50.9664816' lon='-1.3759286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419695' timestamp='2006-11-26T00:08:00+00:00' user='nickw' visible='true' lat='50.9163651' lon='-1.4280256' />
-  <node id='28257910' timestamp='2007-04-29T22:56:50+01:00' user='Andy Street' visible='true' lat='50.9006382' lon='-1.3552546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997516' timestamp='2007-06-05T22:43:53+01:00' user='nickw' visible='true' lat='51.0131634' lon='-1.3612385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816557' timestamp='2007-05-31T22:04:27+01:00' visible='true' lat='50.9913787' lon='-1.3544783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348311' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9256594' lon='-1.356915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254847' timestamp='2007-02-18T21:30:31+00:00' visible='true' lat='50.9120044' lon='-1.4341013' />
-  <node id='20976725' timestamp='2006-11-13T21:39:17+00:00' user='nickw' visible='true' lat='50.9316801' lon='-1.4238476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635134' timestamp='2007-03-25T19:03:49+01:00' user='Dean Earley' visible='true' lat='50.90623' lon='-1.360591' />
-  <node id='25296278' timestamp='2007-01-19T09:52:14+00:00' user='Dean Earley' visible='true' lat='50.9765441' lon='-1.3644564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707168' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8560468' lon='-1.3297907'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20102962' timestamp='2006-10-27T22:27:53+01:00' user='Dean Earley' visible='true' lat='50.9265765' lon='-1.3548744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228115' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9518176' lon='-1.4303261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413153' timestamp='2007-04-05T14:20:20+01:00' user='Dean Earley' visible='true' lat='50.9393108' lon='-1.38024' />
-  <node id='206162636' timestamp='2008-01-04T19:29:41+00:00' user='nickw' visible='true' lat='50.9717152' lon='-1.3790236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051790' timestamp='2007-10-26T17:11:21+01:00' user='Nick Dyer' visible='true' lat='50.99605' lon='-1.4674053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231128' timestamp='2007-04-29T18:45:57+01:00' user='nickw' visible='true' lat='50.9095541' lon='-1.3655373'>
-    <tag k='name' v='FREEM CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154765446' timestamp='2007-12-07T13:46:56+00:00' user='Nick Dyer' visible='true' lat='50.9620557' lon='-1.4277787' />
-  <node id='29026775' timestamp='2007-05-13T10:10:55+01:00' user='nickw' visible='true' lat='50.921222' lon='-1.4089199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388886' timestamp='2007-04-05T14:20:20+01:00' user='Dean Earley' visible='true' lat='50.942' lon='-1.39046' />
-  <node id='12594990' timestamp='2006-08-04T11:59:17+01:00' user='nickw' visible='true' lat='50.9171452' lon='-1.4094619'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='27021819' timestamp='2007-04-03T00:53:05+01:00' user='Ben' visible='true' lat='50.9410596' lon='-1.3982816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178426' timestamp='2006-11-22T18:12:41+00:00' user='southglos' visible='true' lat='50.9916058' lon='-1.3526221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240347' timestamp='2007-04-29T20:02:58+01:00' user='Andy Street' visible='true' lat='50.9073092' lon='-1.3509173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178480' timestamp='2007-12-06T20:43:05+00:00' user='Dean Earley' visible='true' lat='50.9976773' lon='-1.3576747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009017' timestamp='2007-05-12T15:28:40+01:00' user='nickw' visible='true' lat='50.9316994' lon='-1.3507225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122311154' timestamp='2007-12-10T20:57:12+00:00' user='sladen' visible='true' lat='50.9123846' lon='-1.432529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008934' timestamp='2007-05-12T15:26:02+01:00' user='nickw' visible='true' lat='50.9326541' lon='-1.3500024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325192' timestamp='2006-11-11T17:22:34+00:00' user='Dean Earley' visible='true' lat='50.9491179' lon='-1.3692014' />
-  <node id='13071323' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9201514' lon='-1.3624301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583038' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9392096' lon='-1.4334462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009192' timestamp='2007-05-12T15:33:37+01:00' user='nickw' visible='true' lat='50.9300779' lon='-1.3527688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796862' timestamp='2007-05-30T22:26:19+01:00' user='nickw' visible='true' lat='50.9166145' lon='-1.3612831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398410' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9806651' lon='-1.4229379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29733428' timestamp='2007-05-28T21:25:05+01:00' user='LivingWithDragons' visible='true' lat='50.9810249' lon='-1.443702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896414' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9666751' lon='-1.3875217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346708' timestamp='2007-03-04T18:57:41+00:00' user='Dean Earley' visible='true' lat='50.9119558' lon='-1.3657363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28343221' timestamp='2007-04-30T22:24:06+01:00' user='nickw' visible='true' lat='50.9120396' lon='-1.4037077'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533026' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9280102' lon='-1.4334694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889424' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9457231' lon='-1.3682667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705545' timestamp='2007-05-28T11:19:22+01:00' visible='true' lat='50.9859949' lon='-1.3515912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380439' timestamp='2007-05-20T10:19:29+01:00' user='nickw' visible='true' lat='50.943591' lon='-1.3755599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160327675' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.945298' lon='-1.4926213' />
-  <node id='26114390' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.9031624' lon='-1.3909119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621219' timestamp='2007-05-26T11:35:04+01:00' visible='true' lat='50.9714661' lon='-1.373918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008445' timestamp='2007-05-12T15:12:15+01:00' user='nickw' visible='true' lat='50.9298354' lon='-1.3516028'>
-    <tag k='name' v='HARB GDNS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162244' timestamp='2008-01-04T19:26:28+00:00' user='nickw' visible='true' lat='50.9729881' lon='-1.3871342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705767' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8920886' lon='-1.4009885' />
-  <node id='160295476' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9129639' lon='-1.4921235' />
-  <node id='700394' timestamp='2007-04-05T14:20:20+01:00' user='Dean Earley' visible='true' lat='50.9222183' lon='-1.3917077' />
-  <node id='20971179' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9055427' lon='-1.3982913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913876' timestamp='2007-06-03T15:56:39+01:00' visible='true' lat='50.9857589' lon='-1.3579628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='7170911' timestamp='2007-04-29T20:37:33+01:00' user='Dean Earley' visible='true' lat='50.9347314' lon='-1.4190788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945343' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9198485' lon='-1.3468491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575763' timestamp='2007-03-16T21:52:28+00:00' user='nickw' visible='true' lat='50.8998359' lon='-1.3903979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949964' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9897375' lon='-1.3843236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30509431' timestamp='2007-06-17T22:18:57+01:00' visible='true' lat='50.9739434' lon='-1.3515939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815653' timestamp='2007-05-31T21:48:00+01:00' visible='true' lat='50.991301' lon='-1.3536875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675853' timestamp='2007-04-05T14:20:20+01:00' user='Dean Earley' visible='true' lat='50.9280698' lon='-1.3558747' />
-  <node id='245149966' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9083106' lon='-1.4017536' />
-  <node id='254266' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9505978' lon='-1.3515245' />
-  <node id='30229585' timestamp='2007-06-12T00:14:41+01:00' user='nickw' visible='true' lat='50.9329158' lon='-1.3537154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435876' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.9366725' lon='-1.4320123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668058' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.988059' lon='-1.4063893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001331' timestamp='2007-05-12T09:40:15+01:00' user='nickw' visible='true' lat='50.9240249' lon='-1.3819143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124192' timestamp='2007-06-09T19:35:50+01:00' user='nickw' visible='true' lat='50.9219781' lon='-1.3489403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963769' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9420761' lon='-1.4065193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467477' timestamp='2007-08-12T23:13:03+01:00' user='Edward' visible='true' lat='50.9285715' lon='-1.3777046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169428754' timestamp='2007-12-14T21:38:56+00:00' user='nickw' visible='true' lat='50.9290067' lon='-1.436224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360204' timestamp='2006-10-06T23:29:36+01:00' user='Dean Earley' visible='true' lat='50.9611319' lon='-1.3728111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290722' timestamp='2007-06-13T09:23:56+01:00' visible='true' lat='50.9700799' lon='-1.3796969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573781' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true' lat='50.9941855' lon='-1.3997607' />
-  <node id='31487479' timestamp='2007-12-10T19:18:16+00:00' user='sladen' visible='true' lat='50.9021286' lon='-1.3929461'>
-    <tag k='railway' v='level_crossing' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447524' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9112003' lon='-1.386539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816745' timestamp='2007-05-31T22:13:33+01:00' visible='true' lat='50.9911123' lon='-1.3552026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706098' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9011925' lon='-1.3876867'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21091825' timestamp='2006-11-19T12:09:10+00:00' user='nickw' visible='true' lat='50.9142317' lon='-1.4253001'>
-    <tag k='name' v='CAWTE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930662' timestamp='2007-06-03T22:25:18+01:00' visible='true' lat='50.996468' lon='-1.3520402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504822' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9538226' lon='-1.4035992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419254' timestamp='2006-12-02T22:59:19+00:00' user='Dean Earley' visible='true' lat='50.9376131' lon='-1.3621364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723041' timestamp='2006-10-06T23:52:00+01:00' user='Dean Earley' visible='true' lat='50.9944863' lon='-1.3589984'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223091' timestamp='2007-06-11T21:51:53+01:00' visible='true' lat='50.9837525' lon='-1.3564518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962276' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9561828' lon='-1.3629246' />
-  <node id='30124205' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.922643' lon='-1.3481773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135254' timestamp='2007-05-15T20:56:01+01:00' user='nickw' visible='true' lat='50.9437548' lon='-1.3840464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254941' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.9495515' lon='-1.4139126' />
-  <node id='29134824' timestamp='2007-05-15T20:53:14+01:00' user='nickw' visible='true' lat='50.9452311' lon='-1.3850788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24667717' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9591089' lon='-1.4055531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903892' timestamp='2007-10-16T11:34:25+01:00' user='Dean Earley' visible='true' lat='50.9503805' lon='-1.364516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071340' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9185557' lon='-1.3633366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160373386' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9220813' lon='-1.4704662' />
-  <node id='29733545' timestamp='2007-05-28T21:26:00+01:00' user='LivingWithDragons' visible='true' lat='50.9810717' lon='-1.4439578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563288' timestamp='2007-04-23T22:47:34+01:00' visible='true' lat='50.9305844' lon='-1.3962757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668350' timestamp='2007-01-04T21:06:44+00:00' user='nickw' visible='true' lat='50.9859017' lon='-1.3900092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243876' timestamp='2007-04-29T20:33:54+01:00' user='Andy Street' visible='true' lat='50.9078448' lon='-1.3446628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179490' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.9549295' lon='-1.4041384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91126064' timestamp='2007-10-29T08:17:58+00:00' user='nickw' visible='true' lat='50.9299363' lon='-1.4463955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797909' timestamp='2007-09-13T21:06:06+01:00' user='mike l' visible='true' lat='50.9738411' lon='-1.4519937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615434' timestamp='2006-12-16T21:52:54+00:00' user='nickw' visible='true' lat='50.9090418' lon='-1.4152358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973093' timestamp='2006-11-13T00:42:41+00:00' user='Dean Earley' visible='true' lat='50.9015205' lon='-1.4085407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398448' timestamp='2007-04-03T00:53:56+01:00' user='Ben' visible='true' lat='50.9361393' lon='-1.4002836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29862360' timestamp='2007-06-02T12:32:22+01:00' visible='true' lat='50.9313491' lon='-1.4297237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999056' timestamp='2007-06-05T23:29:04+01:00' user='nickw' visible='true' lat='50.9956615' lon='-1.4329377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127601' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9358719' lon='-1.4359517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998359' timestamp='2007-06-05T23:05:26+01:00' user='nickw' visible='true' lat='50.9747255' lon='-1.4278518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194423' timestamp='2007-04-29T08:20:31+01:00' visible='true' lat='50.9479847' lon='-1.4357595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958675' timestamp='2007-09-10T23:55:14+01:00' visible='true' lat='50.9064632' lon='-1.4054426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984773' timestamp='2007-01-10T00:14:42+00:00' user='nickw' visible='true' lat='50.9441775' lon='-1.393506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579416' timestamp='2006-12-14T13:52:58+00:00' user='David Currie' visible='true' lat='50.9780107' lon='-1.4018657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613490' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9933417' lon='-1.3987315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727952' timestamp='2008-02-03T05:57:48+00:00' user='sladen' visible='true' lat='50.9141283' lon='-1.4014532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245153986' timestamp='2008-02-03T06:25:10+00:00' user='sladen' visible='true' lat='50.9075637' lon='-1.3965265' />
-  <node id='28830651' timestamp='2007-05-05T09:03:31+01:00' user='nickw' visible='true' lat='50.9258752' lon='-1.367169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229570' timestamp='2007-06-12T00:14:39+01:00' user='nickw' visible='true' lat='50.9337109' lon='-1.3548379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509868' timestamp='2007-05-22T21:20:45+01:00' visible='true' lat='50.9910638' lon='-1.3596372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704661' timestamp='2006-08-26T00:08:09+01:00' user='dmgroom' visible='true' lat='50.873557' lon='-1.3983954' />
-  <node id='29762563' timestamp='2007-05-31T21:23:02+01:00' visible='true' lat='50.9883109' lon='-1.3570443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183728' timestamp='2007-04-29T02:25:37+01:00' user='Dean Earley' visible='true' lat='50.9515141' lon='-1.4106033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783094' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9447283' lon='-1.3545308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254510' timestamp='2007-02-18T21:30:33+00:00' visible='true' lat='50.9032658' lon='-1.3905982' />
-  <node id='28348133' timestamp='2007-04-30T23:45:32+01:00' user='nickw' visible='true' lat='50.9321332' lon='-1.3656961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762103' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9405091' lon='-1.3521465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256878' timestamp='2007-06-12T20:38:14+01:00' visible='true' lat='50.9788069' lon='-1.357113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346789' timestamp='2007-03-04T18:57:58+00:00' user='Dean Earley' visible='true' lat='50.914704' lon='-1.368139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636724' timestamp='2007-01-19T19:03:48+00:00' user='Dean Earley' visible='true' lat='50.9530081' lon='-1.4077116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148856' timestamp='2008-02-03T06:07:44+00:00' user='sladen' visible='true' lat='50.905009' lon='-1.4010755' />
-  <node id='30780837' timestamp='2007-06-22T21:09:54+01:00' user='Steve Chilton' visible='true' lat='50.9076182' lon='-1.4117393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949834' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9892623' lon='-1.3776484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346883' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9074679' lon='-1.3763057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169409510' timestamp='2007-12-14T21:27:51+00:00' user='nickw' visible='true' lat='50.9281458' lon='-1.4389955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998535' timestamp='2007-06-05T23:13:21+01:00' user='nickw' visible='true' lat='50.9620017' lon='-1.4478974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707070' timestamp='2007-04-05T14:20:21+01:00' user='Dean Earley' visible='true' lat='50.8644428' lon='-1.3421818' />
-  <node id='14744287' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9070992' lon='-1.4096277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2417457' timestamp='2006-08-08T23:26:33+01:00' user='Dean Earley' visible='true' lat='50.9494541' lon='-1.3643239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325655' timestamp='2007-04-05T14:20:21+01:00' user='Dean Earley' visible='true' lat='50.9246867' lon='-1.4270784' />
-  <node id='160383995' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9168111' lon='-1.4558235' />
-  <node id='160425939' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.9037738' lon='-1.4126249' />
-  <node id='254681' timestamp='2007-04-29T17:20:57+01:00' visible='true' lat='50.9699021' lon='-1.3589901' />
-  <node id='30410998' timestamp='2007-06-15T23:09:52+01:00' visible='true' lat='50.9743463' lon='-1.3565114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110950' timestamp='2007-05-12T09:45:12+01:00' user='nickw' visible='true' lat='50.9355716' lon='-1.362324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071366' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9185268' lon='-1.3699415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726181' timestamp='2006-11-13T00:56:01+00:00' user='Dean Earley' visible='true' lat='50.9086143' lon='-1.3991669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250049' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.9172729' lon='-1.4493095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924282' timestamp='2007-02-13T19:43:31+00:00' user='Dean Earley' visible='true' lat='50.9660221' lon='-1.3859928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325051' timestamp='2005-12-17T11:28:12+00:00' user='80n' visible='true' lat='50.9450437' lon='-1.4807236' />
-  <node id='13704650' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.873182' lon='-1.398716'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28347573' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9229044' lon='-1.3522165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163077' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9718841' lon='-1.3875961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306323' timestamp='2005-12-11T21:52:40+00:00' user='nickw' visible='true' lat='50.9251285' lon='-1.3956928' />
-  <node id='25471868' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9390271' lon='-1.3679049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388935' timestamp='2007-04-05T14:20:21+01:00' user='Dean Earley' visible='true' lat='50.9428' lon='-1.39735' />
-  <node id='25504276' timestamp='2007-01-28T19:31:52+00:00' user='nickw' visible='true' lat='50.9994641' lon='-1.3535558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945326' timestamp='2007-03-31T20:34:28+01:00' user='nickw' visible='true' lat='50.9201491' lon='-1.3560275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254283' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9711027' lon='-1.3402569' />
-  <node id='24984718' timestamp='2007-01-10T00:11:59+00:00' user='nickw' visible='true' lat='50.944115' lon='-1.3902379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815554' timestamp='2007-05-31T21:42:55+01:00' visible='true' lat='50.9890726' lon='-1.3582855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342530' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9076175' lon='-1.3680069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290771' timestamp='2007-06-13T09:24:06+01:00' visible='true' lat='50.9699968' lon='-1.3832892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418520' timestamp='2007-05-02T00:35:19+01:00' visible='true' lat='50.9664716' lon='-1.363758'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431999' timestamp='2007-06-16T16:26:10+01:00' visible='true' lat='50.9838387' lon='-1.3505919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816574' timestamp='2007-05-31T22:04:31+01:00' visible='true' lat='50.9911662' lon='-1.3547211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228104' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.949001' lon='-1.4250708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348714' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.984277' lon='-1.4322269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290741' timestamp='2007-06-13T09:23:59+01:00' visible='true' lat='50.9644676' lon='-1.3821413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817625' timestamp='2007-05-31T22:21:08+01:00' visible='true' lat='50.9869441' lon='-1.3640414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675870' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9270296' lon='-1.3688726' />
-  <node id='21689079' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.942555' lon='-1.389763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549381' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9642997' lon='-1.3746658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903390' timestamp='2007-05-09T23:24:29+01:00' visible='true' lat='50.947609' lon='-1.3657426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705515' timestamp='2007-05-28T11:19:16+01:00' visible='true' lat='50.983221' lon='-1.3521131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107718' timestamp='2007-04-27T23:44:12+01:00' visible='true' lat='50.9316811' lon='-1.3880234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134102' timestamp='2007-05-22T00:19:51+01:00' user='Dean Earley' visible='true' lat='50.9398569' lon='-1.4039514'>
-    <tag k='name' v='BASSETT CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303929' timestamp='2007-05-22T00:19:51+01:00' user='Dean Earley' visible='true' lat='50.9413254' lon='-1.4066972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071357' timestamp='2006-08-11T02:48:10+01:00' user='Dean Earley' visible='true' lat='50.9171481' lon='-1.3681717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830625' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9278754' lon='-1.3605862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815664' timestamp='2007-05-31T21:48:03+01:00' visible='true' lat='50.990509' lon='-1.3531553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935727' timestamp='2007-05-11T00:47:46+01:00' visible='true' lat='50.939871' lon='-1.4396839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710868' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9868383' lon='-1.3528392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161104' timestamp='2007-06-10T18:13:39+01:00' visible='true' lat='50.9708123' lon='-1.3562928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209189' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9424199' lon='-1.4477738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661157' timestamp='2007-04-05T14:20:21+01:00' user='Dean Earley' visible='true' lat='50.9098528' lon='-1.3551165' />
-  <node id='28179520' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9551492' lon='-1.4018961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319623' timestamp='2006-09-02T19:02:11+01:00' user='Dean Earley' visible='true' lat='50.9192061' lon='-1.3953855' />
-  <node id='30096947' timestamp='2007-06-08T23:24:13+01:00' visible='true' lat='50.9656759' lon='-1.3753715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160410636' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9114375' lon='-1.4290185' />
-  <node id='24949981' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9850603' lon='-1.3837276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339156' timestamp='2007-04-30T20:39:32+01:00' visible='true' lat='50.9668247' lon='-1.3614805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949934' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9921635' lon='-1.3882969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021774' timestamp='2007-04-03T00:52:46+01:00' user='Ben' visible='true' lat='50.9458018' lon='-1.4022362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740473' timestamp='2006-09-16T19:31:31+01:00' user='nickw' visible='true' lat='50.9808105' lon='-1.3495217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507158' timestamp='2007-06-17T22:07:51+01:00' visible='true' lat='50.9766666' lon='-1.3610157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026790' timestamp='2007-05-13T10:10:56+01:00' user='nickw' visible='true' lat='50.9173833' lon='-1.4084431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194845' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.9442005' lon='-1.4083359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316548' timestamp='2007-04-03T00:52:14+01:00' user='Dean Earley' visible='true' lat='50.920428' lon='-1.4477179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874674' timestamp='2007-06-02T19:57:54+01:00' visible='true' lat='50.9606409' lon='-1.3610157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705716' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true' lat='50.8940269' lon='-1.4060633'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29914344' timestamp='2007-06-03T16:16:29+01:00' visible='true' lat='50.985257' lon='-1.3606054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160384738' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.916151' lon='-1.4548021' />
-  <node id='20971209' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9080707' lon='-1.415111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243470' timestamp='2007-04-29T20:23:53+01:00' user='Dean Earley' visible='true' lat='50.9404366' lon='-1.407052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249889' timestamp='2007-04-29T21:41:43+01:00' visible='true' lat='50.9144136' lon='-1.4443379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173903' timestamp='2007-04-29T01:03:04+01:00' visible='true' lat='50.94219' lon='-1.4321286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704532' timestamp='2007-05-28T10:40:39+01:00' visible='true' lat='50.9800263' lon='-1.357821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147282' timestamp='2008-02-03T06:02:10+00:00' user='sladen' visible='true' lat='50.9092848' lon='-1.4042684' />
-  <node id='17658117' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9090782' lon='-1.4273814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613486' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9909885' lon='-1.3985931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124196' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9231502' lon='-1.3498958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180239' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.961788' lon='-1.4255051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903059' timestamp='2007-05-09T23:03:38+01:00' visible='true' lat='50.9420554' lon='-1.3700598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111045' timestamp='2006-10-22T23:24:05+01:00' user='Ben' visible='true' lat='50.9737527' lon='-1.3826831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298253' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='50.9788239' lon='-1.3694669' />
-  <node id='21677588' timestamp='2006-12-22T14:23:57+00:00' user='nickw' visible='true' lat='50.9049712' lon='-1.4025167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508368' timestamp='2007-06-17T22:14:19+01:00' visible='true' lat='50.9747647' lon='-1.3566023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613460' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9776362' lon='-1.4012248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009081' timestamp='2007-05-12T15:31:58+01:00' user='nickw' visible='true' lat='50.9295458' lon='-1.3516265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518790' timestamp='2007-04-05T14:20:22+01:00' user='Dean Earley' visible='true' lat='50.9214' lon='-1.38488' />
-  <node id='20961045' timestamp='2006-11-11T17:12:28+00:00' user='Dean Earley' visible='true' lat='50.950102' lon='-1.3722544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089131' timestamp='2007-06-13T09:24:40+01:00' visible='true' lat='50.9645071' lon='-1.3796364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816405' timestamp='2007-05-31T21:56:30+01:00' visible='true' lat='50.9891287' lon='-1.3551855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141413' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9282136' lon='-1.4273197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305604' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9909606' lon='-1.3950062' />
-  <node id='15028815' timestamp='2006-09-08T23:06:40+01:00' user='Dean Earley' visible='true' lat='50.9294686' lon='-1.3659306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945387' timestamp='2007-03-31T20:34:34+01:00' user='nickw' visible='true' lat='50.9081344' lon='-1.3452582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29534191' timestamp='2007-05-23T17:35:58+01:00' visible='true' lat='50.9737751' lon='-1.3558799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180545' timestamp='2007-04-29T02:33:53+01:00' user='Dean Earley' visible='true' lat='50.9474613' lon='-1.4051654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008947' timestamp='2007-05-12T15:26:04+01:00' user='nickw' visible='true' lat='50.9297743' lon='-1.3497242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111041' timestamp='2006-10-22T23:24:05+01:00' user='Ben' visible='true' lat='50.9735711' lon='-1.3820774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091836' timestamp='2007-03-24T16:33:47+00:00' user='Dean Earley' visible='true' lat='50.9153126' lon='-1.4265585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242719' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9224746' lon='-1.4148372' />
-  <node id='14957849' timestamp='2007-05-04T02:33:07+01:00' user='Dean Earley' visible='true' lat='50.9471' lon='-1.4497312'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='702384' timestamp='2006-12-27T00:28:45+00:00' user='southglos' visible='true' lat='50.9942681' lon='-1.340902' />
-  <node id='24668380' timestamp='2007-01-04T21:06:49+00:00' user='nickw' visible='true' lat='50.9844072' lon='-1.3956215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700384' timestamp='2007-04-05T14:20:22+01:00' user='Dean Earley' visible='true' lat='50.9240933' lon='-1.3922702' />
-  <node id='20102981' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9317714' lon='-1.3574329'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157218269' timestamp='2007-12-08T20:20:38+00:00' user='nickw' visible='true' lat='50.9447248' lon='-1.4455959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435811' timestamp='2007-12-14T21:43:12+00:00' user='nickw' visible='true' lat='50.9371858' lon='-1.432658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30505708' timestamp='2007-06-17T21:56:39+01:00' visible='true' lat='50.9788993' lon='-1.354222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949847' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9918133' lon='-1.373079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237090' timestamp='2007-04-29T19:33:16+01:00' user='nickw' visible='true' lat='50.9103417' lon='-1.3492066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249807' timestamp='2007-10-26T13:40:22+01:00' user='Nick Dyer' visible='true' lat='50.9259314' lon='-1.4417788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122316848' timestamp='2007-11-18T19:01:09+00:00' user='nickw' visible='true' lat='50.9131901' lon='-1.4366932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252909' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9453834' lon='-1.4280046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319649' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.9223819' lon='-1.3993192' />
-  <node id='91131365' timestamp='2007-10-29T08:22:38+00:00' user='nickw' visible='true' lat='50.9317339' lon='-1.4266491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222229' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9171304' lon='-1.4813667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581810' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9178966' lon='-1.4486407' />
-  <node id='25282144' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9751591' lon='-1.4095543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418546' timestamp='2007-05-02T00:35:25+01:00' visible='true' lat='50.9612525' lon='-1.3725252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325021' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9583847' lon='-1.4125131' />
-  <node id='28903976' timestamp='2007-05-10T01:07:00+01:00' user='LivingWithDragons' visible='true' lat='50.9809015' lon='-1.4434422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008379' timestamp='2007-05-12T15:11:47+01:00' user='nickw' visible='true' lat='50.9259551' lon='-1.3515718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229572' timestamp='2007-06-12T00:14:39+01:00' user='nickw' visible='true' lat='50.9338987' lon='-1.3532883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510065' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.9017721' lon='-1.4160586' />
-  <node id='675883' timestamp='2007-08-12T23:13:31+01:00' user='Edward' visible='true' lat='50.9310978' lon='-1.3734559' />
-  <node id='30096971' timestamp='2007-06-08T23:24:17+01:00' visible='true' lat='50.9634847' lon='-1.3760282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949998' timestamp='2007-01-07T12:38:57+00:00' user='nickw' visible='true' lat='50.9823838' lon='-1.3877407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474853' timestamp='2007-09-23T16:33:12+01:00' user='mike l' visible='true' lat='50.9390587' lon='-1.3658997' />
-  <node id='29171749' timestamp='2007-05-16T23:47:59+01:00' user='nickw' visible='true' lat='50.941079' lon='-1.3928461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305600' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9912825' lon='-1.3926458' />
-  <node id='700489' timestamp='2007-04-05T14:20:23+01:00' user='Dean Earley' visible='true' lat='50.9242964' lon='-1.3681609' />
-  <node id='17979921' timestamp='2007-02-18T21:25:28+00:00' visible='true' lat='50.9173358' lon='-1.3971351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110489' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9278781' lon='-1.4359132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949921' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9914632' lon='-1.3811846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127618' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.9366074' lon='-1.4346455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984699' timestamp='2007-01-10T00:11:07+00:00' user='nickw' visible='true' lat='50.9453855' lon='-1.3843474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744415' timestamp='2006-11-12T17:38:46+00:00' user='Dean Earley' visible='true' lat='50.9436566' lon='-1.3741501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461241' timestamp='2007-05-21T23:43:16+01:00' user='nickw' visible='true' lat='50.9026198' lon='-1.3973561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507780' timestamp='2006-12-09T09:51:42+00:00' user='nickw' visible='true' lat='50.9481032' lon='-1.3997994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601300' timestamp='2006-09-01T00:16:02+01:00' user='nickw' visible='true' lat='50.8237624' lon='-1.5585566'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='469872' timestamp='2007-11-18T18:58:29+00:00' user='nickw' visible='true' lat='50.9132875' lon='-1.4310295' />
-  <node id='25480536' timestamp='2007-01-27T23:19:10+00:00' visible='true' lat='50.9112226' lon='-1.3884819'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28935723' timestamp='2007-05-11T00:47:44+01:00' visible='true' lat='50.9411651' lon='-1.4390754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133115' timestamp='2006-10-28T01:55:38+01:00' user='Dean Earley' visible='true' lat='50.9277267' lon='-1.3547742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29588074' timestamp='2007-05-25T18:50:22+01:00' visible='true' lat='50.9704713' lon='-1.3523496'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664551' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9085881' lon='-1.4057342' />
-  <node id='20976797' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9251737' lon='-1.4199164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30505719' timestamp='2007-06-17T21:56:40+01:00' visible='true' lat='50.9800844' lon='-1.3539967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282102' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.9767193' lon='-1.4063297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677156' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8954267' lon='-1.440722' />
-  <node id='90592372' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9122796' lon='-1.4445123' />
-  <node id='8596772' timestamp='2006-11-13T00:08:31+00:00' user='Dean Earley' visible='true' lat='50.9009229' lon='-1.4098845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414264' timestamp='2007-09-20T19:36:53+01:00' user='mike l' visible='true' lat='50.9398242' lon='-1.3763348'>
-    <tag k='name' v='FMRY CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021714' timestamp='2007-04-03T00:50:47+01:00' user='Dean Earley' visible='true' lat='50.9200024' lon='-1.4482186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48965783' timestamp='2007-09-11T00:11:36+01:00' visible='true' lat='50.900087' lon='-1.4052689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642322' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9507145' lon='-1.3604565' />
-  <node id='29526355' timestamp='2007-05-23T09:23:19+01:00' user='nickw' visible='true' lat='50.9276965' lon='-1.3571557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830621' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9291065' lon='-1.3598085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440790' timestamp='2007-01-25T23:00:43+00:00' user='Dean Earley' visible='true' lat='50.9181714' lon='-1.3786736'>
-    <tag k='amenity' v='fuel' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329520' timestamp='2007-04-29T02:33:29+01:00' user='Dean Earley' visible='true' lat='50.9506878' lon='-1.40735' />
-  <node id='21613505' timestamp='2007-01-07T12:39:39+00:00' user='nickw' visible='true' lat='50.9836978' lon='-1.3882181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134104' timestamp='2007-05-15T20:47:30+01:00' user='nickw' visible='true' lat='50.9447445' lon='-1.384818'>
-    <tag k='name' v='BEM CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='430652' timestamp='2007-04-05T14:20:23+01:00' user='Dean Earley' visible='true' lat='50.9095' lon='-1.41033' />
-  <node id='30956582' timestamp='2007-06-26T23:44:58+01:00' user='nickw' visible='true' lat='50.9279124' lon='-1.3493386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596794' timestamp='2007-02-18T21:30:35+00:00' visible='true' lat='50.9028358' lon='-1.3979097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705312' timestamp='2007-10-26T12:19:24+01:00' user='Nick Dyer' visible='true' lat='50.9181008' lon='-1.4711263'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29816422' timestamp='2007-05-31T21:58:46+01:00' visible='true' lat='50.9898429' lon='-1.3570505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708017' timestamp='2007-06-03T21:49:41+01:00' visible='true' lat='50.9849955' lon='-1.3630281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240335' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9068069' lon='-1.3507439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339186' timestamp='2007-04-30T20:39:44+01:00' visible='true' lat='50.9693536' lon='-1.3631341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636743' timestamp='2007-04-03T00:54:14+01:00' user='Ben' visible='true' lat='50.9399717' lon='-1.3926204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640010' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9096412' lon='-1.3711697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632420' timestamp='2007-05-26T19:26:40+01:00' visible='true' lat='50.9562539' lon='-1.3677008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972798' timestamp='2006-11-13T00:07:22+00:00' user='Dean Earley' visible='true' lat='50.8983639' lon='-1.3901625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096960' timestamp='2007-06-08T23:24:15+01:00' visible='true' lat='50.9655258' lon='-1.3757937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243880' timestamp='2007-04-29T20:52:51+01:00' user='Dean Earley' visible='true' lat='50.9372192' lon='-1.4234447' />
-  <node id='324349' timestamp='2008-02-03T05:56:26+00:00' user='sladen' visible='true' lat='50.9124778' lon='-1.4033415' />
-  <node id='90663598' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9056384' lon='-1.4044725' />
-  <node id='28250024' timestamp='2007-04-29T21:42:15+01:00' visible='true' lat='50.9176645' lon='-1.4486823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021755' timestamp='2007-04-03T00:52:39+01:00' user='Ben' visible='true' lat='50.9455294' lon='-1.403903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885368' timestamp='2006-11-14T01:57:28+00:00' user='Dean Earley' visible='true' lat='50.9017829' lon='-1.4020397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342577' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9088201' lon='-1.3616694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324354' timestamp='2005-12-16T00:19:02+00:00' user='nickw' visible='true' lat='50.9142923' lon='-1.4055848' />
-  <node id='21561535' timestamp='2007-06-01T16:17:58+01:00' user='Dean Earley' visible='true' lat='50.9255802' lon='-1.4359597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325183' timestamp='2006-11-11T17:23:29+00:00' user='Dean Earley' visible='true' lat='50.9530236' lon='-1.4049385' />
-  <node id='29998526' timestamp='2007-06-05T23:13:20+01:00' user='nickw' visible='true' lat='50.9615012' lon='-1.45497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66589144' timestamp='2007-10-12T14:03:58+01:00' user='SteveC' visible='true' lat='50.9306001' lon='-1.4490363' />
-  <node id='28342633' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9133297' lon='-1.3643315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071413' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9228111' lon='-1.355091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278574' timestamp='2007-08-14T04:48:03+01:00' user='andrewpmk' visible='true' lat='50.9075278' lon='-1.3976524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632121' timestamp='2007-05-26T19:19:26+01:00' visible='true' lat='50.9563969' lon='-1.3669767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929411' timestamp='2007-06-03T22:04:05+01:00' visible='true' lat='50.9777834' lon='-1.360493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976695' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9367141' lon='-1.4244991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582948' timestamp='2007-05-02T23:57:46+01:00' visible='true' lat='50.9422926' lon='-1.4259947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949904' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9945143' lon='-1.3807078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303942' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9228931' lon='-1.4148581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163068' timestamp='2008-01-04T19:32:05+00:00' user='nickw' visible='true' lat='50.9721749' lon='-1.3832503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892128' timestamp='2007-02-18T21:30:33+00:00' visible='true' lat='50.9025349' lon='-1.3907325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908422' timestamp='2006-07-18T10:21:32+01:00' user='nickw' visible='true' lat='50.9351162' lon='-1.3710289' />
-  <node id='87248235' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8939597' lon='-1.3972979' />
-  <node id='20976782' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9303954' lon='-1.42236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980707' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.960988' lon='-1.3521953' />
-  <node id='91120329' timestamp='2007-10-29T08:12:53+00:00' user='nickw' visible='true' lat='50.9309083' lon='-1.4476297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957246' timestamp='2006-11-10T21:58:56+00:00' user='nickw' visible='true' lat='50.918102' lon='-1.4186151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388871' timestamp='2007-04-05T14:20:24+01:00' user='Dean Earley' visible='true' lat='50.9345' lon='-1.39938' />
-  <node id='90591406' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9142981' lon='-1.4513873' />
-  <node id='16963794' timestamp='2006-09-28T23:48:07+01:00' user='nickw' visible='true' lat='50.9341756' lon='-1.4005434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254253' timestamp='2005-11-15T15:38:44+00:00' user='nickw' visible='true' lat='50.9598998' lon='-1.3768142' />
-  <node id='160218967' timestamp='2007-12-10T19:13:23+00:00' user='sladen' visible='true' lat='50.9139163' lon='-1.3898734' />
-  <node id='16963756' timestamp='2007-05-22T00:19:51+01:00' user='Dean Earley' visible='true' lat='50.9373014' lon='-1.4098715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161108' timestamp='2007-06-10T18:13:41+01:00' visible='true' lat='50.9690899' lon='-1.3547863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663595' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9057467' lon='-1.4050562' />
-  <node id='21636770' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.9477597' lon='-1.4029109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927551' timestamp='2007-06-03T21:24:27+01:00' visible='true' lat='50.9821687' lon='-1.3703721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342547' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9084318' lon='-1.3683645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909673' timestamp='2007-06-03T14:54:22+01:00' visible='true' lat='50.9677972' lon='-1.3543802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464233' timestamp='2007-05-22T00:19:08+01:00' user='Dean Earley' visible='true' lat='50.937546' lon='-1.4210249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957250' timestamp='2006-11-10T21:58:56+00:00' user='nickw' visible='true' lat='50.9122585' lon='-1.4219381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331345' timestamp='2007-12-06T22:10:42+00:00' user='Dean Earley' visible='true' lat='51.008' lon='-1.38048' />
-  <node id='28252954' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.9435752' lon='-1.4304894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87887625' timestamp='2007-10-26T13:59:31+01:00' user='Nick Dyer' visible='true' lat='50.9638443' lon='-1.4183005'>
-    <tag k='amenity' v='post_office' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='244310997' timestamp='2008-01-31T11:50:55+00:00' user='Nick Dyer' visible='true' lat='50.9721759' lon='-1.4321824'>
-    <tag k='key' v='golf_course' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </node>
-  <node id='206162259' timestamp='2008-01-04T19:26:30+00:00' user='nickw' visible='true' lat='50.9739107' lon='-1.3864935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160373993' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9218595' lon='-1.4727149' />
-  <node id='28583077' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9368062' lon='-1.4342119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471864' timestamp='2007-09-23T16:33:09+01:00' user='mike l' visible='true' lat='50.9400465' lon='-1.3674187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223936' timestamp='2007-06-11T22:03:11+01:00' visible='true' lat='50.9836896' lon='-1.3519971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466082' timestamp='2007-05-22T00:37:44+01:00' user='Dean Earley' visible='true' lat='50.9421267' lon='-1.4393014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930864' timestamp='2007-06-03T22:30:55+01:00' visible='true' lat='50.9988258' lon='-1.3532056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324975' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9586408' lon='-1.4114583' />
-  <node id='13071297' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.921208' lon='-1.358542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282129' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9761038' lon='-1.4059611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965518' timestamp='2007-05-10T21:08:07+01:00' user='Dean Earley' visible='true' lat='50.9706025' lon='-1.4441738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170437' timestamp='2006-11-11T17:23:33+00:00' user='Dean Earley' visible='true' lat='50.9331911' lon='-1.3245353' />
-  <node id='29706975' timestamp='2007-06-03T15:45:30+01:00' visible='true' lat='50.9863956' lon='-1.3589726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28230864' timestamp='2007-04-29T18:42:25+01:00' user='nickw' visible='true' lat='50.9170087' lon='-1.3543755'>
-    <tag k='name' v='ALMATADE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582051' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9303837' lon='-1.4507701' />
-  <node id='29928589' timestamp='2007-06-03T21:52:02+01:00' visible='true' lat='50.97779' lon='-1.3615217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342620' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9102232' lon='-1.3650865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026671' timestamp='2007-05-13T10:02:49+01:00' user='nickw' visible='true' lat='50.9274835' lon='-1.4003176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461218' timestamp='2007-05-21T23:43:12+01:00' user='nickw' visible='true' lat='50.9063877' lon='-1.3972716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636921' timestamp='2007-03-24T16:33:48+00:00' user='Dean Earley' visible='true' lat='50.917392' lon='-1.4302745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249957' timestamp='2007-04-29T21:41:56+01:00' visible='true' lat='50.914332' lon='-1.4469995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949864' timestamp='2007-01-07T12:38:47+00:00' user='nickw' visible='true' lat='50.993589' lon='-1.3725625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238974' timestamp='2007-04-09T15:39:33+01:00' user='avantman42' visible='true' lat='50.8991115' lon='-1.4022995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621223' timestamp='2007-05-26T11:42:45+01:00' visible='true' lat='50.9668609' lon='-1.3717726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624975' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.9050331' lon='-1.3723324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816630' timestamp='2007-05-31T22:10:47+01:00' visible='true' lat='50.9913348' lon='-1.3598036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387815' timestamp='2007-04-05T14:20:24+01:00' user='Dean Earley' visible='true' lat='50.9281' lon='-1.38986' />
-  <node id='26782594' timestamp='2007-03-25T19:24:26+01:00' user='Dean Earley' visible='true' lat='50.9004639' lon='-1.3946823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980724' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9603497' lon='-1.3430382' />
-  <node id='92684351' timestamp='2007-10-31T12:25:02+00:00' user='Dean Earley' visible='true' lat='50.9612303' lon='-1.4222513' />
-  <node id='21141396' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9249578' lon='-1.4262072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244146' timestamp='2007-04-29T20:36:13+01:00' user='Andy Street' visible='true' lat='50.9036743' lon='-1.3485918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648583' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.949725' lon='-1.3630486' />
-  <node id='27512891' timestamp='2007-04-21T21:50:17+01:00' user='Dean Earley' visible='true' lat='50.9579799' lon='-1.3444057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530365' timestamp='2007-05-28T10:44:50+01:00' visible='true' lat='50.9782392' lon='-1.3516046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830574' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.9277113' lon='-1.3638039'>
-    <tag k='name' v='LITCH CRS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227211' timestamp='2006-10-23T20:52:55+01:00' user='nickw' visible='true' lat='50.9299939' lon='-1.4134334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254604' timestamp='2007-05-04T02:33:09+01:00' user='Dean Earley' visible='true' lat='50.9493039' lon='-1.451712' />
-  <node id='254755' timestamp='2006-11-12T22:57:31+00:00' user='Dean Earley' visible='true' lat='50.9072514' lon='-1.3996459' />
-  <node id='8596789' timestamp='2008-02-03T06:26:23+00:00' user='sladen' visible='true' lat='50.9077585' lon='-1.3932134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324999' timestamp='2006-11-11T17:23:33+00:00' user='Dean Earley' visible='true' lat='50.9592692' lon='-1.4207693' />
-  <node id='254972' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9442016' lon='-1.4141507' />
-  <node id='15028890' timestamp='2006-09-08T23:06:54+01:00' user='Dean Earley' visible='true' lat='50.9355239' lon='-1.3496942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956744' timestamp='2007-06-26T23:49:25+01:00' user='nickw' visible='true' lat='50.9282849' lon='-1.3503071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668076' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9893596' lon='-1.4107203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001702' timestamp='2007-05-12T09:53:02+01:00' user='nickw' visible='true' lat='50.9403219' lon='-1.363123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724268' timestamp='2006-10-07T00:25:18+01:00' user='nickw' visible='true' lat='50.9284727' lon='-1.41004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305562' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9992647' lon='-1.3932896' />
-  <node id='160252366' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.946028' lon='-1.3611544' />
-  <node id='17721059' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9711415' lon='-1.3604119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000938' timestamp='2007-05-12T09:30:26+01:00' user='nickw' visible='true' lat='50.9198921' lon='-1.409092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942466' timestamp='2006-07-19T01:50:15+01:00' user='Dean Earley' visible='true' lat='50.9143729' lon='-1.3394285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160281291' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9202907' lon='-1.4755152' />
-  <node id='29990894' timestamp='2007-06-05T20:41:24+01:00' visible='true' lat='51.002013' lon='-1.3506917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127584' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9351645' lon='-1.4387281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422985' timestamp='2007-05-22T00:19:52+01:00' user='Dean Earley' visible='true' lat='50.942545' lon='-1.4050047' />
-  <node id='29998077' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.9881962' lon='-1.4128326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997529' timestamp='2007-06-05T22:43:55+01:00' user='nickw' visible='true' lat='51.0097136' lon='-1.3560732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091879' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.9192346' lon='-1.4257282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223591' timestamp='2007-06-11T21:58:17+01:00' visible='true' lat='50.98438' lon='-1.3519917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530601' timestamp='2007-04-05T14:20:25+01:00' user='Dean Earley' visible='true' lat='50.9227' lon='-1.39717' />
-  <node id='21613399' timestamp='2006-12-16T17:46:41+00:00' user='David Currie' visible='true' lat='50.9955359' lon='-1.4496049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548675' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.9634334' lon='-1.3623836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816766' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9886501' lon='-1.3592347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728003' timestamp='2007-04-03T00:54:08+01:00' user='Ben' visible='true' lat='50.9362773' lon='-1.4049858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122313896' timestamp='2007-11-18T18:59:19+00:00' user='nickw' visible='true' lat='50.9129772' lon='-1.4319451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722363' timestamp='2006-10-06T23:46:15+01:00' user='Dean Earley' visible='true' lat='50.9473611' lon='-1.3941785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903740' timestamp='2007-05-10T00:36:36+01:00' visible='true' lat='50.9358664' lon='-1.368604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163275' timestamp='2008-01-04T19:34:24+00:00' user='nickw' visible='true' lat='50.9702953' lon='-1.3886789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856363' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.9469657' lon='-1.3923749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874077' timestamp='2007-05-08T14:50:38+01:00' visible='true' lat='50.9396016' lon='-1.4408918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256423' timestamp='2007-06-12T20:20:04+01:00' visible='true' lat='50.9809996' lon='-1.3556983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20698064' timestamp='2006-10-31T22:26:03+00:00' user='nickw' visible='true' lat='50.9074326' lon='-1.4090264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971145' timestamp='2007-03-25T19:25:23+01:00' user='Dean Earley' visible='true' lat='50.9097678' lon='-1.3989033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028849' timestamp='2006-10-27T22:49:34+01:00' user='Dean Earley' visible='true' lat='50.9312008' lon='-1.3543408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249862' timestamp='2007-04-29T21:41:41+01:00' visible='true' lat='50.9184298' lon='-1.4404957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388938' timestamp='2007-04-05T14:20:25+01:00' user='Dean Earley' visible='true' lat='50.9426' lon='-1.39973' />
-  <node id='29815549' timestamp='2007-05-31T21:42:53+01:00' visible='true' lat='50.9882268' lon='-1.3573981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163098' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.9721468' lon='-1.3878941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152431' timestamp='2008-02-03T06:21:38+00:00' user='sladen' visible='true' lat='50.9078235' lon='-1.3977453' />
-  <node id='21091872' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true' lat='50.9127688' lon='-1.4254051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50656125' timestamp='2007-12-08T20:20:39+00:00' user='nickw' visible='true' lat='50.9452877' lon='-1.4459405' />
-  <node id='29874148' timestamp='2007-06-02T19:43:16+01:00' visible='true' lat='50.9589902' lon='-1.3574686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29389523' timestamp='2007-05-20T16:37:04+01:00' visible='true' lat='50.9647301' lon='-1.3543468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689131' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9412125' lon='-1.3871456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998581' timestamp='2007-06-05T23:13:54+01:00' user='nickw' visible='true' lat='50.9582478' lon='-1.4536191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871605' timestamp='2007-06-02T18:55:45+01:00' visible='true' lat='50.9156708' lon='-1.3495415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179473' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.9608048' lon='-1.406867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254772' timestamp='2007-04-03T00:52:22+01:00' user='Dean Earley' visible='true' lat='50.9260681' lon='-1.4414192' />
-  <node id='25296385' timestamp='2007-01-19T09:58:46+00:00' user='Dean Earley' visible='true' lat='50.9846856' lon='-1.3511889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27561987' timestamp='2007-10-17T15:33:45+01:00' user='Nick Dyer' visible='true' lat='50.9055021' lon='-1.4143684'>
-    <tag k='tourism' v='hostel' />
-    <tag k='name' v='IBIS' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='29914409' timestamp='2007-06-03T16:22:49+01:00' visible='true' lat='50.9841683' lon='-1.3620035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447388' timestamp='2007-12-07T20:56:30+00:00' user='Steve Jeapes' visible='true' lat='50.9075989' lon='-1.3943316'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='King Alfred' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='21636788' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9504285' lon='-1.4060228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419445' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.941462' lon='-1.3721056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704911' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.900225' lon='-1.452976'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='544333' timestamp='2007-04-05T14:20:28+01:00' user='Dean Earley' visible='true' lat='50.9369549' lon='-1.3879125' />
-  <node id='20972816' timestamp='2007-03-25T19:25:23+01:00' user='Dean Earley' visible='true' lat='50.9014877' lon='-1.3976013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071396' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.928325' lon='-1.3600696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392360' timestamp='2007-05-20T17:52:58+01:00' visible='true' lat='50.9644402' lon='-1.3568112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507767' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9404268' lon='-1.389573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949938' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9950645' lon='-1.3834892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051801' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9910048' lon='-1.4845159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956612' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9283944' lon='-1.3497161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114387' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.9041584' lon='-1.3907402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254617' timestamp='2005-11-15T15:41:32+00:00' user='nickw' visible='true' lat='50.9136012' lon='-1.4240808' />
-  <node id='59599705' timestamp='2007-09-24T09:46:23+01:00' user='mike l' visible='true' lat='50.9971495' lon='-1.4570767' />
-  <node id='27021695' timestamp='2007-04-03T00:50:23+01:00' user='Dean Earley' visible='true' lat='50.9279257' lon='-1.4447264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949883' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9915382' lon='-1.3788801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229587' timestamp='2007-06-12T00:14:41+01:00' user='nickw' visible='true' lat='50.9336858' lon='-1.3503877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932440' timestamp='2007-05-10T21:05:56+01:00' user='Dean Earley' visible='true' lat='50.9641771' lon='-1.4629448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468557' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9134344' lon='-1.4469486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245151023' timestamp='2008-02-03T06:18:05+00:00' user='sladen' visible='true' lat='50.9090953' lon='-1.4017793' />
-  <node id='142618204' timestamp='2007-11-29T22:29:51+00:00' user='nickw' visible='true' lat='50.9135656' lon='-1.416007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021785' timestamp='2007-04-03T00:52:49+01:00' user='Ben' visible='true' lat='50.9526913' lon='-1.399786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984748' timestamp='2007-05-22T00:19:52+01:00' user='Dean Earley' visible='true' lat='50.9485853' lon='-1.4048957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26424290' timestamp='2007-03-08T22:26:01+00:00' user='Andy Street' visible='true' lat='50.8909675' lon='-1.2170842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783117' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9482879' lon='-1.347974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706692' timestamp='2007-04-05T14:20:29+01:00' user='Dean Earley' visible='true' lat='50.9010893' lon='-1.382631' />
-  <node id='29794810' timestamp='2007-05-30T21:41:50+01:00' user='nickw' visible='true' lat='50.9192853' lon='-1.354141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20979930' timestamp='2007-03-25T19:25:24+01:00' user='Dean Earley' visible='true' lat='50.9096356' lon='-1.3984962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657753' timestamp='2007-04-05T14:20:30+01:00' user='Dean Earley' visible='true' lat='50.9145924' lon='-1.3393198' />
-  <node id='15740486' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9972714' lon='-1.3524983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280981' timestamp='2006-07-05T00:16:28+01:00' user='Dean Earley' visible='true' lat='50.9153101' lon='-1.3611395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115452' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9280972' lon='-1.4435471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243646' timestamp='2007-04-29T20:25:07+01:00' user='Dean Earley' visible='true' lat='50.938389' lon='-1.4165559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814524' timestamp='2007-05-31T21:17:04+01:00' visible='true' lat='50.9874494' lon='-1.3557652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958694' timestamp='2007-09-10T23:55:15+01:00' visible='true' lat='50.9062141' lon='-1.4081089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764421' timestamp='2007-05-29T22:14:31+01:00' user='Jodi Crisp' visible='true' lat='50.9218128' lon='-1.3637899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689058' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.942582' lon='-1.3872644'>
-    <tag k='name' v='LUPIN' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091402' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9825942' lon='-1.4431018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345063' timestamp='2007-04-30T23:00:38+01:00' user='nickw' visible='true' lat='50.9327779' lon='-1.3649584'>
-    <tag k='name' v='OLD FM DR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24950056' timestamp='2007-01-07T12:44:12+00:00' user='nickw' visible='true' lat='50.9937261' lon='-1.3656436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816310' timestamp='2007-05-31T21:52:28+01:00' visible='true' lat='50.9912377' lon='-1.3548046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663585' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9066343' lon='-1.4063951' />
-  <node id='25947170' timestamp='2007-02-16T20:51:23+00:00' user='nickw' visible='true' lat='50.9127342' lon='-1.3952086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341767' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9129064' lon='-1.3595205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636773' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.9476471' lon='-1.4032685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700527' timestamp='2007-04-05T14:20:30+01:00' user='Dean Earley' visible='true' lat='50.9298823' lon='-1.3677624' />
-  <node id='28240300' timestamp='2007-04-29T20:02:53+01:00' user='Andy Street' visible='true' lat='50.9044803' lon='-1.3559134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728877' timestamp='2007-05-28T19:12:29+01:00' visible='true' lat='50.9717246' lon='-1.357191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316545' timestamp='2007-04-03T00:52:22+01:00' user='Dean Earley' visible='true' lat='50.9181419' lon='-1.4538501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296383' timestamp='2007-01-19T09:58:45+00:00' user='Dean Earley' visible='true' lat='50.9833104' lon='-1.3510198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240318' timestamp='2007-04-29T20:02:55+01:00' user='Andy Street' visible='true' lat='50.9065616' lon='-1.3557209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964129' timestamp='2007-02-11T00:33:29+00:00' visible='true' lat='50.9179966' lon='-1.3795906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997554' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9938609' lon='-1.3441531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073636' timestamp='2007-04-05T14:20:30+01:00' user='Dean Earley' visible='true' lat='50.9321202' lon='-1.3943813' />
-  <node id='19890108' timestamp='2007-12-10T19:14:07+00:00' user='sladen' visible='true' lat='50.9119898' lon='-1.3880194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90610022' timestamp='2007-10-28T20:53:33+00:00' user='Nick Dyer' visible='true' lat='50.9119864' lon='-1.4344453' />
-  <node id='30124665' timestamp='2007-06-09T19:48:37+01:00' user='nickw' visible='true' lat='50.9310674' lon='-1.3521457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254527' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9148053' lon='-1.4153736' />
-  <node id='28341780' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.9123527' lon='-1.3628415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107846' timestamp='2007-04-27T23:50:37+01:00' visible='true' lat='50.9364232' lon='-1.3993528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815438' timestamp='2007-05-31T21:37:06+01:00' visible='true' lat='50.9872905' lon='-1.3550392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249906' timestamp='2007-04-29T21:41:45+01:00' visible='true' lat='50.9140908' lon='-1.4485632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526774' timestamp='2007-05-23T09:49:13+01:00' visible='true' lat='50.9827529' lon='-1.3496705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179532' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9566817' lon='-1.398191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014677' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9320659' lon='-1.3702211' />
-  <node id='28342590' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9095968' lon='-1.363815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422967' timestamp='2007-04-05T14:20:30+01:00' user='Dean Earley' visible='true' lat='50.918143' lon='-1.4056638' />
-  <node id='29595100' timestamp='2007-05-25T21:54:12+01:00' visible='true' lat='50.9664638' lon='-1.3547441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194443' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9466131' lon='-1.4346708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325089' timestamp='2006-11-11T17:24:00+00:00' user='Dean Earley' visible='true' lat='50.9307234' lon='-1.5668635' />
-  <node id='28232549' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true' lat='50.9080416' lon='-1.3676324'>
-    <tag k='name' v='THE OAKS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160423786' timestamp='2007-12-10T21:07:22+00:00' user='sladen' visible='true' lat='50.9040607' lon='-1.4137493' />
-  <node id='13071229' timestamp='2006-08-11T02:47:58+01:00' user='Dean Earley' visible='true' lat='50.9199743' lon='-1.3730034'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632168' timestamp='2007-05-26T19:20:13+01:00' visible='true' lat='50.9568481' lon='-1.3684491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632215' timestamp='2007-05-26T19:21:15+01:00' visible='true' lat='50.9579468' lon='-1.3668532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278609' timestamp='2007-08-14T04:48:07+01:00' user='andrewpmk' visible='true' lat='50.9079301' lon='-1.3975466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689101' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9413126' lon='-1.3826358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301579' timestamp='2007-08-14T04:48:38+01:00' user='andrewpmk' visible='true' lat='50.9072845' lon='-1.3978379' />
-  <node id='24924113' timestamp='2007-02-18T20:18:28+00:00' visible='true' lat='50.9396521' lon='-1.3697412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830672' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.92408' lon='-1.3652332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935742' timestamp='2007-05-11T00:50:38+01:00' visible='true' lat='50.9396675' lon='-1.4460686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071379' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9183276' lon='-1.3618638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962306' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9584644' lon='-1.3681001' />
-  <node id='90661635' timestamp='2007-10-28T21:46:42+00:00' user='Nick Dyer' visible='true' lat='50.9047778' lon='-1.4099228'>
-    <tag k='tourism' v='hotel' />
-  </node>
-  <node id='14727973' timestamp='2007-02-18T21:25:27+00:00' visible='true' lat='50.9172595' lon='-1.4032368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730543' timestamp='2007-05-28T19:37:08+01:00' visible='true' lat='50.9675556' lon='-1.3725043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160416878' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9090671' lon='-1.4289241' />
-  <node id='29816733' timestamp='2007-05-31T22:13:30+01:00' visible='true' lat='50.9904409' lon='-1.356538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745440' timestamp='2007-10-31T15:18:29+00:00' user='Dean Earley' visible='true' lat='50.9671809' lon='-1.3510691'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575750' timestamp='2007-03-16T21:52:25+00:00' user='nickw' visible='true' lat='50.8986676' lon='-1.3895929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966366' timestamp='2007-02-18T20:18:25+00:00' visible='true' lat='50.9155594' lon='-1.3637693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480655' timestamp='2007-01-27T23:30:39+00:00' visible='true' lat='50.9206758' lon='-1.3891929'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29548709' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.9669179' lon='-1.3664202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325213' timestamp='2006-11-11T17:24:03+00:00' user='Dean Earley' visible='true' lat='50.9399699' lon='-1.3585874' />
-  <node id='160183639' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9030704' lon='-1.381213' />
-  <node id='21141395' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9237308' lon='-1.425134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971198' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9031725' lon='-1.4040724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096942' timestamp='2007-06-13T09:30:25+01:00' visible='true' lat='50.9642171' lon='-1.3776654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728544' timestamp='2007-03-25T18:42:34+01:00' user='Dean Earley' visible='true' lat='50.9005159' lon='-1.3679477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563361' timestamp='2007-04-23T23:02:18+01:00' visible='true' lat='50.9282533' lon='-1.3988528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710079' timestamp='2007-05-28T13:11:13+01:00' visible='true' lat='50.9879425' lon='-1.3652257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161117' timestamp='2007-06-10T18:13:43+01:00' visible='true' lat='50.9715064' lon='-1.3542554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801363' timestamp='2006-12-16T00:49:38+00:00' user='Dean Earley' visible='true' lat='50.9098909' lon='-1.3681692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219686' timestamp='2007-12-08T20:21:41+00:00' user='nickw' visible='true' lat='50.9446371' lon='-1.4439966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957229' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9196415' lon='-1.4232899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008393' timestamp='2007-05-12T15:11:57+01:00' user='nickw' visible='true' lat='50.9265311' lon='-1.3500421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700508' timestamp='2007-04-05T14:20:30+01:00' user='Dean Earley' visible='true' lat='50.926687' lon='-1.3753015' />
-  <node id='14745511' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9543863' lon='-1.4028812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474644' timestamp='2007-04-05T14:20:30+01:00' user='Dean Earley' visible='true' lat='50.9219894' lon='-1.3560505' />
-  <node id='29621208' timestamp='2007-06-30T12:32:05+01:00' visible='true' lat='50.9704026' lon='-1.3539614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160377031' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9220651' lon='-1.4693504' />
-  <node id='254725' timestamp='2007-01-31T01:07:53+00:00' user='Dean Earley' visible='true' lat='51.0035045' lon='-1.3489025' />
-  <node id='24668097' timestamp='2007-01-04T21:05:34+00:00' user='nickw' visible='true' lat='50.9900098' lon='-1.4036477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305630' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='50.9836103' lon='-1.3859047' />
-  <node id='14964116' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9221984' lon='-1.3763931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984792' timestamp='2007-01-10T00:15:08+00:00' user='nickw' visible='true' lat='50.9421434' lon='-1.3824501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942622' timestamp='2006-07-19T01:48:03+01:00' user='Dean Earley' visible='true' lat='50.9070844' lon='-1.3600995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639946' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9010191' lon='-1.3804102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180198' timestamp='2007-04-29T02:05:34+01:00' user='Dean Earley' visible='true' lat='50.9640837' lon='-1.4218344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163079' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9716151' lon='-1.3875067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956718' timestamp='2007-06-26T23:49:22+01:00' user='nickw' visible='true' lat='50.9274584' lon='-1.3485787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418529' timestamp='2007-05-02T00:35:23+01:00' visible='true' lat='50.9649781' lon='-1.3686187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147655' timestamp='2008-02-03T06:03:10+00:00' user='sladen' visible='true' lat='50.9093443' lon='-1.4062425' />
-  <node id='91113446' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.9274868' lon='-1.4423054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145096' timestamp='2007-05-16T00:37:05+01:00' visible='true' lat='50.9249057' lon='-1.3870967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59768618' timestamp='2007-09-25T18:24:00+01:00' visible='true' lat='50.9132806' lon='-1.4028531'>
-    <tag k='type' v='crown' />
-    <tag k='amenity' v='courthouse' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='29998138' timestamp='2007-06-05T23:00:31+01:00' user='nickw' visible='true' lat='50.9922354' lon='-1.404707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254432' timestamp='2007-01-28T00:55:35+00:00' visible='true' lat='50.9287823' lon='-1.385336' />
-  <node id='29998949' timestamp='2007-06-05T23:28:53+01:00' user='nickw' visible='true' lat='50.9881837' lon='-1.4350039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636819' timestamp='2007-04-29T02:33:44+01:00' user='Dean Earley' visible='true' lat='50.9507332' lon='-1.4124846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209155' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.9423933' lon='-1.4477266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231321' timestamp='2007-04-29T18:48:22+01:00' user='nickw' visible='true' lat='50.90672' lon='-1.3620572'>
-    <tag k='name' v='MARGAM AV' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830634' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9266503' lon='-1.360947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730524' timestamp='2007-05-28T19:36:52+01:00' visible='true' lat='50.9688704' lon='-1.3709958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194404' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9470375' lon='-1.4388348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160413818' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9113131' lon='-1.4290014' />
-  <node id='29872371' timestamp='2007-06-02T19:03:57+01:00' visible='true' lat='50.9165873' lon='-1.3506574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949881' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9911131' lon='-1.379635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='603226' timestamp='2007-04-05T14:20:31+01:00' user='Dean Earley' visible='true' lat='50.9173462' lon='-1.3962879' />
-  <node id='18398365' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.950397' lon='-1.4160522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817902' timestamp='2007-05-31T22:22:42+01:00' visible='true' lat='50.9875908' lon='-1.3643407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998552' timestamp='2007-06-05T23:13:24+01:00' user='nickw' visible='true' lat='50.964254' lon='-1.4226269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668171' timestamp='2007-01-04T21:05:54+00:00' user='nickw' visible='true' lat='50.987984' lon='-1.4055947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704146' timestamp='2007-05-28T10:20:04+01:00' visible='true' lat='50.9869805' lon='-1.3523684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388904' timestamp='2007-04-05T14:20:31+01:00' user='Dean Earley' visible='true' lat='50.9437' lon='-1.39743' />
-  <node id='29463022' timestamp='2007-05-22T00:01:32+01:00' user='nickw' visible='true' lat='50.9099773' lon='-1.4016873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111056' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9861214' lon='-1.3851236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227245' timestamp='2006-10-23T20:52:58+01:00' user='nickw' visible='true' lat='50.9425996' lon='-1.4162127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957220' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9147752' lon='-1.4172084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388862' timestamp='2007-04-05T14:20:31+01:00' user='Dean Earley' visible='true' lat='50.9281838' lon='-1.4057223' />
-  <node id='21689162' timestamp='2007-05-01T23:51:02+01:00' user='nickw' visible='true' lat='50.9395913' lon='-1.3729408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132661' timestamp='2007-05-15T20:24:18+01:00' user='nickw' visible='true' lat='50.9245274' lon='-1.3770353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998929' timestamp='2007-06-05T23:28:51+01:00' user='nickw' visible='true' lat='50.9836314' lon='-1.4381031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282151' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9750469' lon='-1.4084756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435865' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.9364722' lon='-1.4322904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303008' timestamp='2007-01-19T18:15:19+00:00' user='Dean Earley' visible='true' lat='50.9502371' lon='-1.3645852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298230' timestamp='2007-01-06T14:30:54+00:00' user='Dean Earley' visible='true' lat='51.0199878' lon='-1.3361971' />
-  <node id='298296' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9569559' lon='-1.3985033' />
-  <node id='113962293' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9585022' lon='-1.3685207' />
-  <node id='28249943' timestamp='2007-04-29T21:41:53+01:00' visible='true' lat='50.9143836' lon='-1.4479044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659225' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9038252' lon='-1.4046785' />
-  <node id='24924301' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9716973' lon='-1.3834884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675685' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.8984203' lon='-1.4458289' />
-  <node id='29929616' timestamp='2007-06-03T22:07:09+01:00' visible='true' lat='50.9770704' lon='-1.3569779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600585' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9847147' lon='-1.3992412'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275636' timestamp='2007-06-01T16:39:58+01:00' user='Dean Earley' visible='true' lat='50.9174242' lon='-1.4356434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26593135' timestamp='2007-03-17T20:47:44+00:00' user='nickw' visible='true' lat='50.9009719' lon='-1.3611169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892135' timestamp='2006-10-27T00:58:31+01:00' user='Dean Earley' visible='true' lat='50.9064334' lon='-1.3895179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689178' timestamp='2006-12-23T10:22:27+00:00' user='nickw' visible='true' lat='50.9381015' lon='-1.3713862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254557' timestamp='2007-03-09T21:07:46+00:00' user='nickw' visible='true' lat='50.9074389' lon='-1.3882425' />
-  <node id='10216405' timestamp='2006-07-09T22:24:17+01:00' user='Dean Earley' visible='true' lat='50.921106' lon='-1.3567019'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764441' timestamp='2007-02-10T23:52:28+00:00' visible='true' lat='50.911707' lon='-1.396977' />
-  <node id='25783091' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9427553' lon='-1.3550863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134119' timestamp='2007-05-15T20:47:32+01:00' user='nickw' visible='true' lat='50.9452864' lon='-1.3804415'>
-    <tag k='name' v='SMMRFLD GD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896256' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.964644' lon='-1.3927283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998060' timestamp='2007-06-05T23:00:20+01:00' user='nickw' visible='true' lat='50.9842192' lon='-1.4100909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464279' timestamp='2007-05-22T00:19:18+01:00' user='Dean Earley' visible='true' lat='50.9376811' lon='-1.4034403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577078' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9120361' lon='-1.4509324' />
-  <node id='20972779' timestamp='2006-11-13T00:06:56+00:00' user='Dean Earley' visible='true' lat='50.8990309' lon='-1.4080223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816843' timestamp='2007-05-31T22:17:19+01:00' visible='true' lat='50.9855952' lon='-1.3656968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099523' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9513788' lon='-1.3674925' />
-  <node id='306310' timestamp='2005-12-11T21:52:33+00:00' user='nickw' visible='true' lat='50.9264588' lon='-1.3987398' />
-  <node id='29392429' timestamp='2007-05-20T18:02:21+01:00' visible='true' lat='50.966261' lon='-1.3541004'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Chamberlayne Arms' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706681' timestamp='2007-04-05T14:20:32+01:00' user='Dean Earley' visible='true' lat='50.90275' lon='-1.3845625' />
-  <node id='28244112' timestamp='2007-04-29T20:35:24+01:00' user='Andy Street' visible='true' lat='50.9051731' lon='-1.3514561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360187' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9530045' lon='-1.3701407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296612' timestamp='2007-01-19T10:19:55+00:00' user='Dean Earley' visible='true' lat='50.971029' lon='-1.3683727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998950' timestamp='2007-06-05T23:28:53+01:00' user='nickw' visible='true' lat='50.9886339' lon='-1.4348449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956601' timestamp='2007-06-26T23:45:00+01:00' user='nickw' visible='true' lat='50.9287701' lon='-1.3494181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773491' timestamp='2007-04-03T00:52:23+01:00' user='Dean Earley' visible='true' lat='50.9175285' lon='-1.4558097' />
-  <node id='29003051' timestamp='2007-05-22T00:19:53+01:00' user='Dean Earley' visible='true' lat='50.9405687' lon='-1.4054746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718201' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.935407' lon='-1.4459834' />
-  <node id='29548692' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9634738' lon='-1.3672406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236117' timestamp='2007-04-29T19:25:39+01:00' user='Andy Street' visible='true' lat='50.9078407' lon='-1.355089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549366' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9650005' lon='-1.3721866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254415' timestamp='2007-01-28T00:06:55+00:00' visible='true' lat='50.9171474' lon='-1.3715357' />
-  <node id='28339123' timestamp='2007-04-30T20:39:18+01:00' visible='true' lat='50.967313' lon='-1.3619442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671362' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9150674' lon='-1.4362762' />
-  <node id='28231253' timestamp='2007-04-29T18:47:19+01:00' user='nickw' visible='true' lat='50.9128716' lon='-1.3511283'>
-    <tag k='name' v='KEYNSHAM R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398433' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9623751' lon='-1.3891194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348146' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9333978' lon='-1.3670272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157190810' timestamp='2007-12-08T20:00:25+00:00' user='nickw' visible='true' lat='50.9379007' lon='-1.4495916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9312073' timestamp='2007-02-18T21:30:55+00:00' visible='true' lat='50.9139568' lon='-1.3964732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710902' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9849491' lon='-1.3569783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924320' timestamp='2007-01-07T12:39:39+00:00' user='nickw' visible='true' lat='50.9861818' lon='-1.3808859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091857' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9081117' lon='-1.4209204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26001630' timestamp='2007-02-18T20:20:21+00:00' visible='true' lat='50.927826' lon='-1.388783' />
-  <node id='19035799' timestamp='2007-04-03T00:54:01+01:00' user='Ben' visible='true' lat='50.9370513' lon='-1.3957887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254694' timestamp='2007-04-03T00:54:23+01:00' user='Ben' visible='true' lat='50.9405137' lon='-1.3776993' />
-  <node id='29632881' timestamp='2007-05-26T20:07:47+01:00' visible='true' lat='50.967128' lon='-1.3619016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87877505' timestamp='2007-10-26T13:40:01+01:00' user='Nick Dyer' visible='true' lat='50.9276951' lon='-1.4315306' />
-  <node id='28903877' timestamp='2007-10-17T01:09:34+01:00' user='Dean Earley' visible='true' lat='50.9506342' lon='-1.3639798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325228' timestamp='2006-11-11T17:24:03+00:00' user='Dean Earley' visible='true' lat='50.9355002' lon='-1.3421382' />
-  <node id='29909654' timestamp='2007-06-03T14:54:16+01:00' visible='true' lat='50.967577' lon='-1.3543441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935749' timestamp='2007-05-11T00:50:42+01:00' visible='true' lat='50.9406362' lon='-1.4460071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722333' timestamp='2006-10-06T23:46:12+01:00' user='Dean Earley' visible='true' lat='50.9437498' lon='-1.3793298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29795094' timestamp='2007-05-30T21:48:09+01:00' user='nickw' visible='true' lat='50.916054' lon='-1.3577617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601342' timestamp='2006-09-01T00:16:12+01:00' user='nickw' visible='true' lat='50.8981347' lon='-1.5195465'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='10908692' timestamp='2006-07-18T10:29:29+01:00' user='nickw' visible='true' lat='50.9383193' lon='-1.3613726'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='White Swan' />
-  </node>
-  <node id='29711865' timestamp='2007-05-28T14:55:45+01:00' visible='true' lat='50.9848651' lon='-1.3526685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331362' timestamp='2007-04-05T14:20:32+01:00' user='Dean Earley' visible='true' lat='50.9463' lon='-1.40528' />
-  <node id='28372810' timestamp='2007-05-01T10:05:25+01:00' visible='true' lat='50.9297289' lon='-1.4337662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27239000' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.917605' lon='-1.4436552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021740' timestamp='2007-04-03T00:52:29+01:00' user='Ben' visible='true' lat='50.9364638' lon='-1.3934231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668019' timestamp='2007-01-04T21:05:29+00:00' user='nickw' visible='true' lat='50.9894596' lon='-1.4051179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721091' timestamp='2007-01-19T09:38:47+00:00' user='Dean Earley' visible='true' lat='50.970651' lon='-1.3503045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984669' timestamp='2007-01-25T22:42:44+00:00' user='Dean Earley' visible='true' lat='50.9420032' lon='-1.381579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254334' timestamp='2005-11-15T15:39:05+00:00' user='nickw' visible='true' lat='50.949998' lon='-1.4132805' />
-  <node id='20961062' timestamp='2006-11-11T17:13:00+00:00' user='Dean Earley' visible='true' lat='50.9168645' lon='-1.3175748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949819' timestamp='2007-01-31T02:05:53+00:00' user='Dean Earley' visible='true' lat='50.9898948' lon='-1.3727615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435796' timestamp='2007-12-14T21:43:12+00:00' user='nickw' visible='true' lat='50.9372202' lon='-1.4315802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577123' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9652005' lon='-1.4206491' />
-  <node id='29001300' timestamp='2007-11-28T12:24:01+00:00' user='Dean Earley' visible='true' lat='50.9421179' lon='-1.3525761'>
-    <tag k='bridge' v='yes' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296013' timestamp='2007-01-19T09:28:06+00:00' user='Dean Earley' visible='true' lat='50.9878515' lon='-1.3457678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998350' timestamp='2007-06-05T23:05:25+01:00' user='nickw' visible='true' lat='50.9795664' lon='-1.4315272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372776' timestamp='2007-05-01T10:05:21+01:00' visible='true' lat='50.9323792' lon='-1.4401148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518763' timestamp='2007-04-05T14:20:32+01:00' user='Dean Earley' visible='true' lat='50.9086127' lon='-1.3980043' />
-  <node id='92682344' timestamp='2007-10-31T12:24:58+00:00' user='Dean Earley' visible='true' lat='50.9612797' lon='-1.4255865' />
-  <node id='90659211' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9041554' lon='-1.4064466' />
-  <node id='29925631' timestamp='2007-06-03T20:45:00+01:00' visible='true' lat='50.9811871' lon='-1.3634202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241433' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.9456417' lon='-1.4495059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342822' timestamp='2007-04-30T22:17:26+01:00' user='nickw' visible='true' lat='50.9047693' lon='-1.3635172'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613433' timestamp='2006-12-16T17:46:54+00:00' user='David Currie' visible='true' lat='50.9767913' lon='-1.4023194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342564' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9071622' lon='-1.3637282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726553' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9112523' lon='-1.401265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613475' timestamp='2006-12-16T17:46:59+00:00' user='David Currie' visible='true' lat='50.9717989' lon='-1.3930984'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134832' timestamp='2006-10-28T02:02:31+01:00' user='Dean Earley' visible='true' lat='50.9289269' lon='-1.3535406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639897' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9002926' lon='-1.3820866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904025' timestamp='2007-10-17T01:09:34+01:00' user='Dean Earley' visible='true' lat='50.9498756' lon='-1.364149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310978' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9675492' lon='-1.4318563' />
-  <node id='28194394' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9458997' lon='-1.4394806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242651' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9123524' lon='-1.4387024' />
-  <node id='29530537' timestamp='2007-05-23T13:04:51+01:00' visible='true' lat='50.9813231' lon='-1.3557508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579401' timestamp='2006-12-14T13:52:49+00:00' user='David Currie' visible='true' lat='50.977155' lon='-1.4046713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924350' timestamp='2007-06-03T20:10:39+01:00' visible='true' lat='50.9820949' lon='-1.3624408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706543' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.920216' lon='-1.380273'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20133128' timestamp='2006-10-28T01:55:39+01:00' user='Dean Earley' visible='true' lat='50.9282902' lon='-1.3548129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='307481' timestamp='2005-12-12T00:24:15+00:00' user='nickw' visible='true' lat='50.9264588' lon='-1.3995123' />
-  <node id='10222193' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9089913' lon='-1.428392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254481' timestamp='2007-02-13T18:31:46+00:00' user='Dean Earley' visible='true' lat='50.9648985' lon='-1.4183705' />
-  <node id='169423541' timestamp='2007-12-14T21:35:47+00:00' user='nickw' visible='true' lat='50.9307644' lon='-1.4435772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232074' timestamp='2006-10-14T13:19:05+01:00' user='nickw' visible='true' lat='50.9104987' lon='-1.4095197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896444' timestamp='2007-02-13T19:46:56+00:00' user='Dean Earley' visible='true' lat='50.9636079' lon='-1.3835965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890066' timestamp='2006-10-27T00:48:03+01:00' user='Dean Earley' visible='true' lat='50.9201744' lon='-1.3940321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762786' timestamp='2007-05-31T21:31:15+01:00' visible='true' lat='50.9879971' lon='-1.355057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668329' timestamp='2007-01-04T21:06:42+00:00' user='nickw' visible='true' lat='50.9879339' lon='-1.4059125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246058' timestamp='2007-04-29T20:52:45+01:00' user='Dean Earley' visible='true' lat='50.9331885' lon='-1.4204298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706105' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9016232' lon='-1.3894024'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13071269' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9184244' lon='-1.3608136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963739' timestamp='2007-02-18T20:19:10+00:00' visible='true' lat='50.9335211' lon='-1.411867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372761' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9310215' lon='-1.4393077'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117386' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9292367' lon='-1.4446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319608' timestamp='2007-02-18T21:25:25+00:00' visible='true' lat='50.9164609' lon='-1.3961267' />
-  <node id='17768855' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9433132' lon='-1.3738917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636932' timestamp='2006-12-18T21:41:04+00:00' user='nickw' visible='true' lat='50.9087427' lon='-1.4157268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160425677' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9039903' lon='-1.4132171' />
-  <node id='157201953' timestamp='2007-12-08T20:09:10+00:00' user='nickw' visible='true' lat='50.941564' lon='-1.444394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348721' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.9861418' lon='-1.4316531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130967' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9295205' lon='-1.3563834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9267987' timestamp='2006-07-01T00:43:23+01:00' user='Dean Earley' visible='true' lat='50.9476293' lon='-1.3721872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973112' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9049227' lon='-1.4090421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254894' timestamp='2007-04-29T20:52:54+01:00' user='Dean Earley' visible='true' lat='50.9341281' lon='-1.4191479' />
-  <node id='28194356' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9439069' lon='-1.4380967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964050' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='51.0029876' lon='-1.4364979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325666' timestamp='2007-04-29T20:59:48+01:00' user='Dean Earley' visible='true' lat='50.9353971' lon='-1.4326237' />
-  <node id='29815068' timestamp='2007-05-31T21:31:01+01:00' visible='true' lat='50.9885299' lon='-1.3550539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282091' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.976211' lon='-1.4086557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254664' timestamp='2007-05-22T00:19:53+01:00' user='Dean Earley' visible='true' lat='50.9345755' lon='-1.4063204' />
-  <node id='29796772' timestamp='2007-05-30T22:22:04+01:00' user='nickw' visible='true' lat='50.9137587' lon='-1.3537536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431984' timestamp='2007-06-16T16:26:06+01:00' visible='true' lat='50.9729204' lon='-1.3529162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162246' timestamp='2008-01-04T19:32:10+00:00' user='nickw' visible='true' lat='50.9732164' lon='-1.3864439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87877612' timestamp='2007-10-26T13:40:22+01:00' user='Nick Dyer' visible='true' lat='50.9220955' lon='-1.4442078' />
-  <node id='14743133' timestamp='2007-04-03T00:52:24+01:00' user='Dean Earley' visible='true' lat='50.9217468' lon='-1.432691'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329473' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9326485' lon='-1.3839957' />
-  <node id='48950439' timestamp='2007-09-10T23:28:30+01:00' visible='true' lat='50.9124784' lon='-1.3983509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87826002' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8995156' lon='-1.4390342' />
-  <node id='25555529' timestamp='2007-01-31T01:06:22+00:00' user='Dean Earley' visible='true' lat='51.0003733' lon='-1.3528065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976812' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9256997' lon='-1.422062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296304' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9863083' lon='-1.3554404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30510873' timestamp='2007-06-17T22:25:14+01:00' visible='true' lat='50.9764991' lon='-1.3573554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561795' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9261164' lon='-1.4354286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325198' timestamp='2006-11-11T17:24:11+00:00' user='Dean Earley' visible='true' lat='50.9460943' lon='-1.364526' />
-  <node id='91109762' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true' lat='50.9337443' lon='-1.4338471'>
-    <tag k='amenity' v='hospital' />
-    <tag k='name' v='Southampton General Hospital' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243598' timestamp='2007-04-29T20:24:58+01:00' user='Dean Earley' visible='true' lat='50.9349975' lon='-1.4149699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28936007' timestamp='2007-05-11T00:59:48+01:00' visible='true' lat='50.9422978' lon='-1.441638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254381' timestamp='2005-11-15T15:39:31+00:00' user='nickw' visible='true' lat='50.9122986' lon='-1.4064141' />
-  <node id='254844' timestamp='2007-02-18T21:30:31+00:00' visible='true' lat='50.9088744' lon='-1.428466' />
-  <node id='14964163' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9206652' lon='-1.3768478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727982' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9152419' lon='-1.4025324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114361' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.907027' lon='-1.3955038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120339' timestamp='2007-10-29T08:12:53+00:00' user='nickw' visible='true' lat='50.9306829' lon='-1.4468449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924335' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.976501' lon='-1.3960839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563358' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9293604' lon='-1.4005288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583046' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9392649' lon='-1.4298604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700502' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.9282847' lon='-1.3730268' />
-  <node id='30509430' timestamp='2007-06-17T22:18:57+01:00' visible='true' lat='50.9735408' lon='-1.3509015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728569' timestamp='2007-03-23T22:53:04+00:00' user='nickw' visible='true' lat='50.9006974' lon='-1.3727516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324991' timestamp='2006-11-11T17:24:11+00:00' user='Dean Earley' visible='true' lat='50.9600019' lon='-1.4275389' />
-  <node id='29530522' timestamp='2007-05-31T21:31:14+01:00' visible='true' lat='50.9881982' lon='-1.3539581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091850' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9102914' lon='-1.428589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347586' timestamp='2007-04-30T23:36:50+01:00' user='nickw' visible='true' lat='50.926968' lon='-1.3571932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781147' timestamp='2007-03-25T18:42:08+01:00' user='Dean Earley' visible='true' lat='50.9027485' lon='-1.3758939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071328' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9192049' lon='-1.3628423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254364' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9179574' lon='-1.4065123' />
-  <node id='20133143' timestamp='2006-10-28T01:55:41+01:00' user='Dean Earley' visible='true' lat='50.927659' lon='-1.3528615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296275' timestamp='2007-01-19T09:58:48+00:00' user='Dean Earley' visible='true' lat='50.9751829' lon='-1.3657452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702362' timestamp='2007-09-20T19:40:27+01:00' user='mike l' visible='true' lat='50.9508367' lon='-1.3625535'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Southampton Airport Parkway' />
-  </node>
-  <node id='21275712' timestamp='2006-12-13T20:09:46+00:00' user='nickw' visible='true' lat='50.9222677' lon='-1.4269263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14713527' timestamp='2006-09-02T18:21:43+01:00' user='Dean Earley' visible='true' lat='50.9108477' lon='-1.4004252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976661' timestamp='2007-03-24T16:33:48+00:00' user='Dean Earley' visible='true' lat='50.9250904' lon='-1.4217562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50656124' timestamp='2007-09-14T09:51:45+01:00' user='mike l' visible='true' lat='50.9452236' lon='-1.4449231' />
-  <node id='29145261' timestamp='2007-05-16T00:59:02+01:00' visible='true' lat='50.9231391' lon='-1.3816066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956631' timestamp='2007-06-26T23:45:05+01:00' user='nickw' visible='true' lat='50.9330085' lon='-1.3511961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25482179' timestamp='2007-01-28T00:56:06+00:00' visible='true' lat='50.9223695' lon='-1.388719'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Dolphin' />
-  </node>
-  <node id='92684542' timestamp='2007-10-31T12:25:02+00:00' user='Dean Earley' visible='true' lat='50.9621169' lon='-1.4221742' />
-  <node id='29926152' timestamp='2007-06-03T20:55:50+01:00' visible='true' lat='50.9798748' lon='-1.3642109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146243' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9142095' lon='-1.4018223' />
-  <node id='28418345' timestamp='2007-05-02T00:33:16+01:00' visible='true' lat='50.9671859' lon='-1.3638484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24667922' timestamp='2007-01-04T21:04:22+00:00' user='nickw' visible='true' lat='50.9852013' lon='-1.3886781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122315318' timestamp='2007-11-18T19:00:10+00:00' user='nickw' visible='true' lat='50.913641' lon='-1.4259254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903643' timestamp='2007-05-09T23:57:39+01:00' visible='true' lat='50.9543049' lon='-1.3590101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668213' timestamp='2007-01-04T21:06:02+00:00' user='nickw' visible='true' lat='50.9862593' lon='-1.3914219'>
-    <tag k='name' v='TAW DR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325651' timestamp='2007-04-05T14:20:34+01:00' user='Dean Earley' visible='true' lat='50.92' lon='-1.42054' />
-  <node id='28179518' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9546348' lon='-1.4017585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29506479' timestamp='2007-05-22T19:46:57+01:00' visible='true' lat='50.988319' lon='-1.3521057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668354' timestamp='2007-01-04T21:06:44+00:00' user='nickw' visible='true' lat='50.9848824' lon='-1.4130646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998890' timestamp='2007-06-05T23:28:46+01:00' user='nickw' visible='true' lat='50.9891591' lon='-1.4433082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762788' timestamp='2007-05-31T21:34:37+01:00' visible='true' lat='50.9879219' lon='-1.3545966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246062' timestamp='2007-04-29T20:52:46+01:00' user='Dean Earley' visible='true' lat='50.9371592' lon='-1.4225479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114348' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9025616' lon='-1.3915814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147654' timestamp='2008-02-03T06:03:10+00:00' user='sladen' visible='true' lat='50.9094038' lon='-1.4063799' />
-  <node id='113962323' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9560639' lon='-1.3629417' />
-  <node id='25555526' timestamp='2007-11-20T11:10:47+00:00' user='Gregory Williams' visible='true' lat='51.0096975' lon='-1.3424051'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='28347753' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.929078' lon='-1.3596368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280992' timestamp='2007-01-28T00:06:56+00:00' visible='true' lat='50.9172104' lon='-1.3713562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721076' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9703856' lon='-1.3556624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486271' timestamp='2007-07-09T11:55:39+01:00' visible='true' lat='50.9104269' lon='-1.3849765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254448' timestamp='2007-03-04T18:58:18+00:00' user='Dean Earley' visible='true' lat='50.9114494' lon='-1.368981' />
-  <node id='29549360' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9691848' lon='-1.372354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469885' timestamp='2007-04-05T14:20:35+01:00' user='Dean Earley' visible='true' lat='50.9209' lon='-1.43715' />
-  <node id='700391' timestamp='2007-04-05T14:20:35+01:00' user='Dean Earley' visible='true' lat='50.924062' lon='-1.3911921' />
-  <node id='30506820' timestamp='2007-06-17T22:03:35+01:00' visible='true' lat='50.9785578' lon='-1.3630491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718257' timestamp='2007-08-08T01:32:12+01:00' visible='true' lat='50.93657' lon='-1.4442153' />
-  <node id='19111084' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0100113' lon='-1.3939248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595089' timestamp='2007-06-03T14:54:29+01:00' visible='true' lat='50.967754' lon='-1.3541397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346756' timestamp='2007-03-04T18:57:53+00:00' user='Dean Earley' visible='true' lat='50.9146226' lon='-1.365509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341762' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9114382' lon='-1.3584907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931336' timestamp='2007-06-03T22:43:01+01:00' visible='true' lat='50.994881' lon='-1.3726283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409616' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9116324' lon='-1.4337821' />
-  <node id='14601319' timestamp='2006-09-01T00:20:09+01:00' user='nickw' visible='true' lat='50.8521912' lon='-1.5041519'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30956722' timestamp='2007-06-26T23:49:22+01:00' user='nickw' visible='true' lat='50.9277214' lon='-1.3495919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903398' timestamp='2007-05-09T23:24:31+01:00' visible='true' lat='50.9459084' lon='-1.3651183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160216595' timestamp='2007-12-10T19:11:24+00:00' user='sladen' visible='true' lat='50.9137053' lon='-1.3902682' />
-  <node id='254591' timestamp='2006-10-27T00:58:32+01:00' user='Dean Earley' visible='true' lat='50.9118986' lon='-1.3864828' />
-  <node id='27523498' timestamp='2007-04-22T01:26:38+01:00' visible='true' lat='50.972431' lon='-1.3733865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537329' timestamp='2006-10-27T22:49:32+01:00' user='Dean Earley' visible='true' lat='50.9245137' lon='-1.3553323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179448' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9587309' lon='-1.4240371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236168' timestamp='2007-04-29T19:26:18+01:00' user='Andy Street' visible='true' lat='50.9058553' lon='-1.3569428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904036' timestamp='2007-05-10T01:07:20+01:00' user='LivingWithDragons' visible='true' lat='50.9809834' lon='-1.4435487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071345' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9167672' lon='-1.3650903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783110' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9502905' lon='-1.3514705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964136' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.9178487' lon='-1.3854846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549345' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.9637871' lon='-1.3707012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816840' timestamp='2007-05-31T22:17:18+01:00' visible='true' lat='50.9864625' lon='-1.3649358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730523' timestamp='2007-05-28T19:36:51+01:00' visible='true' lat='50.9705907' lon='-1.3704589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914251' timestamp='2007-06-03T16:02:35+01:00' visible='true' lat='50.9844226' lon='-1.3583692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244197' timestamp='2007-04-29T20:36:21+01:00' user='Andy Street' visible='true' lat='50.902613' lon='-1.3527433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561540' timestamp='2007-03-24T16:33:49+00:00' user='Dean Earley' visible='true' lat='50.9269868' lon='-1.4308451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145093' timestamp='2007-05-16T00:37:04+01:00' visible='true' lat='50.925185' lon='-1.3857094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774714' timestamp='2007-09-13T20:11:57+01:00' user='mike l' visible='true' lat='50.9463317' lon='-1.4494218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608184' timestamp='2006-10-27T00:48:16+01:00' user='Dean Earley' visible='true' lat='50.9200605' lon='-1.3944003' />
-  <node id='29392355' timestamp='2007-05-20T17:52:54+01:00' visible='true' lat='50.9643988' lon='-1.3556919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998095' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.9876897' lon='-1.4005251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59740821' timestamp='2007-09-25T13:23:10+01:00' visible='true' lat='50.9123586' lon='-1.4050633'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Orange Rooms' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='14726552' timestamp='2007-02-06T00:16:36+00:00' user='Dean Earley' visible='true' lat='50.9112521' lon='-1.4011184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91119008' timestamp='2007-10-29T08:11:20+00:00' user='nickw' visible='true' lat='50.9296687' lon='-1.4462589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244132' timestamp='2007-04-29T20:35:44+01:00' user='Andy Street' visible='true' lat='50.9046346' lon='-1.3501318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398388' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.9426507' lon='-1.4391477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579412' timestamp='2006-12-14T13:52:55+00:00' user='David Currie' visible='true' lat='50.9773417' lon='-1.4037482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249986' timestamp='2007-04-29T21:42:09+01:00' visible='true' lat='50.9165973' lon='-1.4432326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25765746' timestamp='2007-02-11T00:33:37+00:00' visible='true' lat='50.9133594' lon='-1.3950726' />
-  <node id='298279' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.961252' lon='-1.3925381' />
-  <node id='90660388' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.9031865' lon='-1.4088413' />
-  <node id='325172' timestamp='2006-11-11T17:24:15+00:00' user='Dean Earley' visible='true' lat='50.949238' lon='-1.3964426' />
-  <node id='24668388' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9844322' lon='-1.3941514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222187' timestamp='2007-02-18T21:30:19+00:00' visible='true' lat='50.9137442' lon='-1.446648'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342615' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9099601' lon='-1.367093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254891' timestamp='2006-09-03T00:38:50+01:00' user='Dean Earley' visible='true' lat='50.929664' lon='-1.4270782' />
-  <node id='17721025' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9630135' lon='-1.3705775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924305' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9763509' lon='-1.3727206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815421' timestamp='2007-05-31T21:34:35+01:00' visible='true' lat='50.9874641' lon='-1.3537168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675695' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.9013543' lon='-1.4469104' />
-  <node id='29816293' timestamp='2007-05-31T21:52:24+01:00' visible='true' lat='50.9911367' lon='-1.3540061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942664' timestamp='2006-07-19T01:48:06+01:00' user='Dean Earley' visible='true' lat='50.9047108' lon='-1.3635163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348699' timestamp='2006-10-16T21:59:52+01:00' user='nickw' visible='true' lat='50.978252' lon='-1.4088445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573784' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true' lat='50.9957517' lon='-1.4037426' />
-  <node id='30956560' timestamp='2007-06-26T23:44:55+01:00' user='nickw' visible='true' lat='50.9266194' lon='-1.3514892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419428' timestamp='2006-12-02T23:18:50+00:00' user='Dean Earley' visible='true' lat='50.940796' lon='-1.3645947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949907' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9951895' lon='-1.3798337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150459' timestamp='2008-02-03T06:15:39+00:00' user='sladen' visible='true' lat='50.9095554' lon='-1.4081652' />
-  <node id='254638' timestamp='2006-10-27T00:48:12+01:00' user='Dean Earley' visible='true' lat='50.9150599' lon='-1.3949184' />
-  <node id='206162625' timestamp='2008-01-04T19:29:39+00:00' user='nickw' visible='true' lat='50.9715838' lon='-1.3801163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971197' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9057612' lon='-1.4002335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632145' timestamp='2007-05-26T19:19:55+01:00' visible='true' lat='50.9573996' lon='-1.3664594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632804' timestamp='2007-05-26T20:05:34+01:00' visible='true' lat='50.9622024' lon='-1.3689756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998547' timestamp='2007-06-05T23:13:23+01:00' user='nickw' visible='true' lat='50.9662059' lon='-1.4242162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305576' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9951234' lon='-1.3962293' />
-  <node id='42141544' timestamp='2007-09-10T22:26:39+01:00' user='mike l' visible='true' lat='50.9346082' lon='-1.3948237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471855' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9392897' lon='-1.3665927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107722' timestamp='2007-04-27T23:44:14+01:00' visible='true' lat='50.9321424' lon='-1.389724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463030' timestamp='2007-05-22T00:01:33+01:00' user='nickw' visible='true' lat='50.9092374' lon='-1.4048032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225260' timestamp='2007-06-11T22:10:27+01:00' visible='true' lat='50.9822736' lon='-1.3558513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133045' timestamp='2007-05-15T20:36:42+01:00' user='nickw' visible='true' lat='50.9324947' lon='-1.3762181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227222' timestamp='2007-05-22T00:20:00+01:00' user='Dean Earley' visible='true' lat='50.9342269' lon='-1.4146952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830655' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.92372' lon='-1.3702446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999009' timestamp='2007-06-05T23:29:01+01:00' user='nickw' visible='true' lat='50.9929606' lon='-1.4369906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583000' timestamp='2007-05-02T23:57:52+01:00' visible='true' lat='50.9417313' lon='-1.4304508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404159' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9129907' lon='-1.4445453' />
-  <node id='325195' timestamp='2006-11-11T17:24:15+00:00' user='Dean Earley' visible='true' lat='50.9479815' lon='-1.3667842' />
-  <node id='30780740' timestamp='2007-06-22T21:09:07+01:00' user='Steve Chilton' visible='true' lat='50.9078277' lon='-1.404854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903413' timestamp='2007-05-09T23:36:03+01:00' visible='true' lat='50.9462337' lon='-1.3622879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949967' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9891622' lon='-1.38635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173942' timestamp='2007-04-29T01:03:19+01:00' visible='true' lat='50.9423315' lon='-1.4352808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372754' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.9312133' lon='-1.4409067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632100' timestamp='2007-12-10T19:40:05+00:00' user='sladen' visible='true' lat='50.9679784' lon='-1.3497389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398422' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9681849' lon='-1.4064052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984778' timestamp='2007-01-10T00:14:57+00:00' user='nickw' visible='true' lat='50.9413047' lon='-1.3898008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107858' timestamp='2007-04-27T23:52:57+01:00' visible='true' lat='50.9326067' lon='-1.3965573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632817' timestamp='2007-05-26T20:06:46+01:00' visible='true' lat='50.9626817' lon='-1.363946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706467' timestamp='2007-04-05T14:20:35+01:00' user='Dean Earley' visible='true' lat='50.93' lon='-1.3805235' />
-  <node id='30096958' timestamp='2007-06-08T23:24:15+01:00' visible='true' lat='50.9658546' lon='-1.3768249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346794' timestamp='2007-03-04T18:57:58+00:00' user='Dean Earley' visible='true' lat='50.9151864' lon='-1.3696434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342602' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9060641' lon='-1.3698148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461215' timestamp='2007-05-21T23:43:11+01:00' user='nickw' visible='true' lat='50.9070203' lon='-1.3976988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600509' timestamp='2006-12-16T10:14:00+00:00' user='nickw' visible='true' lat='50.9174932' lon='-1.4322059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728857' timestamp='2007-05-28T19:12:23+01:00' visible='true' lat='50.9722466' lon='-1.3540745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252962' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.9448668' lon='-1.4298006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30410993' timestamp='2007-06-15T23:09:50+01:00' visible='true' lat='50.9666324' lon='-1.3570803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945339' timestamp='2007-03-31T20:34:29+01:00' user='nickw' visible='true' lat='50.9183673' lon='-1.3512841'>
-    <tag k='name' v='SHALES' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668063' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9842821' lon='-1.394509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469847' timestamp='2007-04-05T14:20:36+01:00' user='Dean Earley' visible='true' lat='50.9089' lon='-1.40943' />
-  <node id='21600500' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9228754' lon='-1.4358565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071208' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9250829' lon='-1.3650212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071285' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9190964' lon='-1.3594037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107350' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9309013' lon='-1.3543606'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157190813' timestamp='2007-12-08T20:00:25+00:00' user='nickw' visible='true' lat='50.9383889' lon='-1.4499393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134828' timestamp='2007-05-15T20:53:15+01:00' user='nickw' visible='true' lat='50.9453811' lon='-1.384285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561808' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9241312' lon='-1.4400403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704295' timestamp='2007-05-28T10:32:49+01:00' visible='true' lat='50.9861904' lon='-1.3556234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746392' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.9993777' lon='-1.3348854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816400' timestamp='2007-05-31T21:56:28+01:00' visible='true' lat='50.9887839' lon='-1.3551015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160283363' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9198686' lon='-1.4774035' />
-  <node id='90581816' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.916928' lon='-1.4486751' />
-  <node id='14743175' timestamp='2006-09-03T00:38:41+01:00' user='Dean Earley' visible='true' lat='50.9077449' lon='-1.4105652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237227' timestamp='2007-04-29T19:42:00+01:00' user='Andy Street' visible='true' lat='50.9002501' lon='-1.358601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114080' timestamp='2007-02-23T21:10:59+00:00' user='www2' visible='true' lat='50.9945' lon='-1.42925'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='10216406' timestamp='2006-07-09T22:24:17+01:00' user='Dean Earley' visible='true' lat='50.9210804' lon='-1.3565691'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704457' timestamp='2007-05-28T10:36:48+01:00' visible='true' lat='50.9815671' lon='-1.3568562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29002294' timestamp='2007-05-12T09:57:58+01:00' user='nickw' visible='true' lat='50.9358149' lon='-1.366997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608171' timestamp='2007-04-05T14:20:36+01:00' user='Dean Earley' visible='true' lat='50.899246' lon='-1.3699106' />
-  <node id='29871627' timestamp='2007-06-02T18:56:49+01:00' visible='true' lat='50.9154931' lon='-1.3494586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564752' timestamp='2006-10-28T01:46:39+01:00' user='Dean Earley' visible='true' lat='50.9292991' lon='-1.3570423'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='474648' timestamp='2007-04-05T14:20:36+01:00' user='Dean Earley' visible='true' lat='50.9275112' lon='-1.3522536' />
-  <node id='30290774' timestamp='2007-10-29T15:43:32+00:00' user='Dean Earley' visible='true' lat='50.966667' lon='-1.3856885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856376' timestamp='2007-06-02T08:31:29+01:00' user='nickw' visible='true' lat='50.9493439' lon='-1.3940835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254497' timestamp='2007-09-23T16:33:13+01:00' user='mike l' visible='true' lat='50.9405474' lon='-1.3754711' />
-  <node id='160244227' timestamp='2007-12-10T19:25:22+00:00' user='sladen' visible='true' lat='50.9108696' lon='-1.432145' />
-  <node id='329479' timestamp='2007-04-05T14:20:36+01:00' user='Dean Earley' visible='true' lat='50.9379688' lon='-1.3699375' />
-  <node id='30229566' timestamp='2007-06-12T00:14:38+01:00' user='nickw' visible='true' lat='50.9332789' lon='-1.3553147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87234239' timestamp='2007-11-19T13:55:52+00:00' user='nickw' visible='true' lat='50.9413755' lon='-1.4494598'>
-    <tag k='created_by' v='Potlatch 0.5a' />
-    <tag k='shop' v='supermarket' />
-  </node>
-  <node id='91111564' timestamp='2007-10-29T08:00:08+00:00' user='nickw' visible='true' lat='50.9272645' lon='-1.4374927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009026' timestamp='2007-05-12T15:28:42+01:00' user='nickw' visible='true' lat='50.9312862' lon='-1.3506927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467494' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.932026' lon='-1.379933'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348312' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9265736' lon='-1.3584845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462609' timestamp='2007-05-21T23:56:38+01:00' user='nickw' visible='true' lat='50.9049501' lon='-1.4008526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999026' timestamp='2007-06-05T23:29:02+01:00' user='nickw' visible='true' lat='50.997512' lon='-1.4356396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596807' timestamp='2006-11-13T00:43:24+00:00' user='Dean Earley' visible='true' lat='50.9056409' lon='-1.4095155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949890' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.993739' lon='-1.376059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464252' timestamp='2007-05-22T00:19:12+01:00' user='Dean Earley' visible='true' lat='50.93863' lon='-1.4083047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957203' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9193418' lon='-1.4208086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830693' timestamp='2007-05-05T09:07:24+01:00' user='nickw' visible='true' lat='50.9252011' lon='-1.3599989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254398' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9210554' lon='-1.3627158' />
-  <node id='30161983' timestamp='2007-09-16T10:21:43+01:00' user='mike l' visible='true' lat='50.9770466' lon='-1.3758053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706845' timestamp='2007-04-05T14:20:37+01:00' user='Dean Earley' visible='true' lat='50.8840901' lon='-1.3696126' />
-  <node id='661187' timestamp='2007-04-05T14:20:37+01:00' user='Dean Earley' visible='true' lat='50.9131482' lon='-1.364805' />
-  <node id='29796779' timestamp='2007-05-30T22:22:05+01:00' user='nickw' visible='true' lat='50.9144225' lon='-1.3542105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689080' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9424799' lon='-1.3896736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953370' timestamp='2007-06-04T21:16:59+01:00' visible='true' lat='51.0017564' lon='-1.3707986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325054' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.9449897' lon='-1.4865101' />
-  <node id='254296' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9789955' lon='-1.3428376' />
-  <node id='28372769' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9328128' lon='-1.4390589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28223259' timestamp='2007-04-29T17:07:37+01:00' visible='true' lat='50.96562' lon='-1.35902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815635' timestamp='2007-05-31T21:47:54+01:00' visible='true' lat='50.9892749' lon='-1.3584035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418264' timestamp='2007-05-02T00:31:38+01:00' visible='true' lat='50.9671299' lon='-1.3628356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254347' timestamp='2007-05-04T02:33:10+01:00' user='Dean Earley' visible='true' lat='50.9489309' lon='-1.4514177' />
-  <node id='25640047' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9054229' lon='-1.3748797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59058423' timestamp='2007-09-23T16:33:06+01:00' user='mike l' visible='true' lat='50.9408112' lon='-1.3756685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600602' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9955573' lon='-1.3991249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209174' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.9424199' lon='-1.4484046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668367' timestamp='2007-01-04T21:06:45+00:00' user='nickw' visible='true' lat='50.986552' lon='-1.3935852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160279833' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.919149' lon='-1.4689148' />
-  <node id='25639953' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9029762' lon='-1.3769802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871547' timestamp='2007-06-02T18:39:29+01:00' visible='true' lat='50.9154457' lon='-1.353309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925204' timestamp='2007-06-03T20:30:01+01:00' visible='true' lat='50.9793926' lon='-1.3632562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773041' timestamp='2007-04-03T00:51:34+01:00' user='Dean Earley' visible='true' lat='50.9220653' lon='-1.4462887' />
-  <node id='90659238' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9025803' lon='-1.4066698' />
-  <node id='87819785' timestamp='2007-10-26T12:15:04+01:00' user='Nick Dyer' visible='true' lat='50.9082192' lon='-1.440665' />
-  <node id='25282099' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.9763239' lon='-1.4066738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956748' timestamp='2007-06-26T23:49:26+01:00' user='nickw' visible='true' lat='50.9288484' lon='-1.3502276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743122' timestamp='2007-04-03T00:51:34+01:00' user='Dean Earley' visible='true' lat='50.9115223' lon='-1.4202361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035796' timestamp='2006-10-22T10:18:17+01:00' user='nickw' visible='true' lat='50.9369948' lon='-1.3995586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447392' timestamp='2007-03-24T16:33:49+00:00' user='Dean Earley' visible='true' lat='50.9003366' lon='-1.3927959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303932' timestamp='2007-05-22T00:20:04+01:00' user='Dean Earley' visible='true' lat='50.9343803' lon='-1.4138496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740474' timestamp='2007-01-19T09:58:48+00:00' user='Dean Earley' visible='true' lat='50.9825373' lon='-1.3506423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657675' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9206965' lon='-1.3888176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971212' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9089188' lon='-1.4123075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896244' timestamp='2007-10-16T17:59:42+01:00' user='Dean Earley' visible='true' lat='50.9554186' lon='-1.4027256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18868873' timestamp='2006-10-21T14:41:58+01:00' user='nickw' visible='true' lat='50.9113934' lon='-1.4205905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229458' timestamp='2007-06-12T00:08:03+01:00' user='nickw' visible='true' lat='50.934437' lon='-1.3526128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179501' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9593052' lon='-1.3996911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613422' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9754055' lon='-1.4028795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161219' timestamp='2007-06-10T18:16:24+01:00' visible='true' lat='50.9658521' lon='-1.3661316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958705' timestamp='2007-09-10T23:55:16+01:00' visible='true' lat='50.9047072' lon='-1.4086255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721074' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9704219' lon='-1.3616452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160228470' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9022585' lon='-1.3944996' />
-  <node id='28341779' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.9124278' lon='-1.3625634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247787' timestamp='2006-12-23T10:22:41+00:00' user='nickw' visible='true' lat='50.9322829' lon='-1.3952084' />
-  <node id='48932859' timestamp='2007-09-10T22:27:12+01:00' user='mike l' visible='true' lat='50.9360145' lon='-1.3973471'>
-    <tag k='amenity' v='theatre' />
-    <tag k='name' v='Nuffield Theatre' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='30124669' timestamp='2007-06-09T19:48:38+01:00' user='nickw' visible='true' lat='50.931274' lon='-1.3522053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254750' timestamp='2007-04-29T02:33:54+01:00' user='Dean Earley' visible='true' lat='50.9463216' lon='-1.405454' />
-  <node id='383142' timestamp='2007-04-05T14:20:38+01:00' user='Dean Earley' visible='true' lat='50.9255' lon='-1.40996' />
-  <node id='28932462' timestamp='2007-05-10T21:06:08+01:00' user='Dean Earley' visible='true' lat='50.9655955' lon='-1.4485457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530608' timestamp='2007-04-05T14:20:38+01:00' user='Dean Earley' visible='true' lat='50.9314' lon='-1.39494' />
-  <node id='28179463' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9621311' lon='-1.4118151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582990' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.93988' lon='-1.4322775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724246' timestamp='2006-10-07T00:25:17+01:00' user='nickw' visible='true' lat='50.9110435' lon='-1.4112235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296297' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9822603' lon='-1.3594291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122334962' timestamp='2007-11-18T19:11:25+00:00' user='nickw' visible='true' lat='50.9212999' lon='-1.4358439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237240' timestamp='2007-04-29T19:42:04+01:00' user='Andy Street' visible='true' lat='50.9031892' lon='-1.355167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632427' timestamp='2007-05-26T19:26:45+01:00' visible='true' lat='50.9574551' lon='-1.3676339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997546' timestamp='2007-06-05T22:43:59+01:00' user='nickw' visible='true' lat='51.0017629' lon='-1.3482059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507151' timestamp='2007-06-17T22:07:49+01:00' visible='true' lat='50.9761702' lon='-1.3593261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505735' timestamp='2007-05-22T19:28:32+01:00' visible='true' lat='50.9906123' lon='-1.3530566'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125580534' timestamp='2007-12-07T13:24:50+00:00' user='Nick Dyer' visible='true' lat='50.9627368' lon='-1.4252982' />
-  <node id='21507754' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9316786' lon='-1.3998143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147538' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9091603' lon='-1.4034788' />
-  <node id='700441' timestamp='2007-04-05T14:20:38+01:00' user='Dean Earley' visible='true' lat='50.9250464' lon='-1.383864' />
-  <node id='635137' timestamp='2006-07-19T01:48:51+01:00' user='Dean Earley' visible='true' lat='50.9096931' lon='-1.3607147' />
-  <node id='325006' timestamp='2006-11-11T17:24:30+00:00' user='Dean Earley' visible='true' lat='50.9560465' lon='-1.4124882' />
-  <node id='21600675' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true' lat='50.9764548' lon='-1.405901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984743' timestamp='2007-05-22T00:20:04+01:00' user='Dean Earley' visible='true' lat='50.9496513' lon='-1.4010212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704325' timestamp='2007-05-28T10:32:58+01:00' visible='true' lat='50.9846158' lon='-1.3591273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243675' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9390363' lon='-1.4139533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124367' timestamp='2007-06-09T19:43:09+01:00' user='nickw' visible='true' lat='50.9245246' lon='-1.3517583'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903744' timestamp='2007-05-10T00:36:37+01:00' visible='true' lat='50.9353435' lon='-1.367177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462628' timestamp='2008-02-03T06:08:57+00:00' user='sladen' visible='true' lat='50.9031363' lon='-1.4009725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675866' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9257474' lon='-1.3692159' />
-  <node id='13705694' timestamp='2007-10-28T20:58:24+00:00' user='Nick Dyer' visible='true' lat='50.892505' lon='-1.4051826' />
-  <node id='25947180' timestamp='2007-02-16T20:51:24+00:00' user='nickw' visible='true' lat='50.9143847' lon='-1.3929838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110494' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9290864' lon='-1.4337378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657768' timestamp='2007-04-05T14:20:38+01:00' user='Dean Earley' visible='true' lat='50.9048194' lon='-1.3688926' />
-  <node id='635130' timestamp='2007-04-29T19:42:18+01:00' user='Andy Street' visible='true' lat='50.9026931' lon='-1.3568779' />
-  <node id='92482480' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8970718' lon='-1.4294681' />
-  <node id='30124193' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9223738' lon='-1.3491806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976721' timestamp='2006-11-13T21:39:17+00:00' user='nickw' visible='true' lat='50.9344271' lon='-1.4219229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114394' timestamp='2007-12-07T20:59:41+00:00' user='Steve Jeapes' visible='true' lat='50.9054935' lon='-1.3912761'>
-    <tag k='name' v='Southampton Football Club' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='25302623' timestamp='2007-09-17T22:55:03+01:00' user='mike l' visible='true' lat='50.974112' lon='-1.3682432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245153002' timestamp='2008-02-03T06:22:46+00:00' user='sladen' visible='true' lat='50.907883' lon='-1.3977367' />
-  <node id='298266' timestamp='2006-09-02T12:59:39+01:00' user='Dean Earley' visible='true' lat='50.961107' lon='-1.3946635' />
-  <node id='25895691' timestamp='2007-02-13T18:31:36+00:00' user='Dean Earley' visible='true' lat='50.9788552' lon='-1.4378894'>
-    <tag k='place' v='village' />
-    <tag k='name' v='North Baddesley' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561553' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9215949' lon='-1.4311322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949984' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9952145' lon='-1.380986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997528' timestamp='2007-06-05T22:43:55+01:00' user='nickw' visible='true' lat='51.0102136' lon='-1.3562321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575775' timestamp='2007-03-25T19:25:24+01:00' user='Dean Earley' visible='true' lat='50.9012124' lon='-1.3951413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675810' timestamp='2007-10-29T16:22:03+00:00' user='Nick Dyer' visible='true' lat='50.910837' lon='-1.4404253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935715' timestamp='2007-05-11T00:47:39+01:00' visible='true' lat='50.9410544' lon='-1.4402071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173967' timestamp='2007-04-29T01:03:26+01:00' visible='true' lat='50.9420332' lon='-1.4342936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967607' timestamp='2006-11-12T20:47:05+00:00' user='Dean Earley' visible='true' lat='50.9184481' lon='-1.3934066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348137' timestamp='2007-04-30T23:45:32+01:00' user='nickw' visible='true' lat='50.9335104' lon='-1.3657359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051794' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9931125' lon='-1.4745251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170436' timestamp='2006-11-11T17:24:30+00:00' user='Dean Earley' visible='true' lat='50.9306181' lon='-1.3198977' />
-  <node id='254655' timestamp='2006-10-06T23:46:21+01:00' user='Dean Earley' visible='true' lat='50.9493209' lon='-1.3742132'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='254262' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9428045' lon='-1.3556241' />
-  <node id='28343217' timestamp='2007-04-30T22:24:06+01:00' user='nickw' visible='true' lat='50.9122525' lon='-1.4054955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575745' timestamp='2007-03-16T21:52:25+00:00' user='nickw' visible='true' lat='50.901638' lon='-1.392832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290781' timestamp='2007-06-13T09:24:09+01:00' visible='true' lat='50.9646853' lon='-1.3827515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998112' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.986833' lon='-1.3946743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668277' timestamp='2007-01-04T21:06:33+00:00' user='nickw' visible='true' lat='50.9857641' lon='-1.3898105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976706' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9354913' lon='-1.4233533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244150' timestamp='2007-04-29T20:36:14+01:00' user='Andy Street' visible='true' lat='50.9042404' lon='-1.3502679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384691' timestamp='2007-06-02T19:55:01+01:00' visible='true' lat='50.9689318' lon='-1.3612922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108514' timestamp='2007-10-29T07:48:08+00:00' user='nickw' visible='true' lat='50.9323889' lon='-1.4200596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252981' timestamp='2007-04-29T22:00:42+01:00' visible='true' lat='50.9424619' lon='-1.429044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089048' timestamp='2007-06-08T18:11:57+01:00' visible='true' lat='50.9646376' lon='-1.3750174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801038' timestamp='2007-10-31T15:08:49+00:00' user='Dean Earley' visible='true' lat='50.9425292' lon='-1.4507005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577048' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9015037' lon='-1.4151238' />
-  <node id='247804' timestamp='2005-11-14T22:50:55+00:00' user='nickw' visible='true' lat='50.9284329' lon='-1.3909936' />
-  <node id='91124930' timestamp='2007-10-29T08:16:55+00:00' user='nickw' visible='true' lat='50.9302189' lon='-1.4465035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947165' timestamp='2007-03-24T16:33:49+00:00' user='Dean Earley' visible='true' lat='50.9121574' lon='-1.3946116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25932487' timestamp='2007-12-10T19:28:54+00:00' user='sladen' visible='true' lat='50.9574911' lon='-1.3526915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636763' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9478599' lon='-1.4013216'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504832' timestamp='2006-10-03T23:25:11+01:00' user='Dean Earley' visible='true' lat='50.9260251' lon='-1.2831084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123677' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9324147' lon='-1.4450631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971167' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9065967' lon='-1.400972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163069' timestamp='2008-01-04T19:32:05+00:00' user='nickw' visible='true' lat='50.9726753' lon='-1.3853363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30227009' timestamp='2007-06-11T22:35:17+01:00' visible='true' lat='50.982048' lon='-1.3545249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549378' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9636963' lon='-1.3767363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930744' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.9992442' lon='-1.3526263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17768852' timestamp='2007-01-28T00:56:02+00:00' visible='true' lat='50.9339049' lon='-1.3810032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348737' timestamp='2006-10-16T21:59:56+01:00' user='nickw' visible='true' lat='50.9986758' lon='-1.4530452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392590' timestamp='2007-05-20T18:06:37+01:00' visible='true' lat='50.9650348' lon='-1.3582332'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Grantham Arms' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704904' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.901052' lon='-1.450655'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28339169' timestamp='2007-05-02T00:35:39+01:00' visible='true' lat='50.9694476' lon='-1.3609523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931321' timestamp='2007-08-16T19:35:53+01:00' user='southglos' visible='true' lat='50.9987106' lon='-1.3594854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924063' timestamp='2007-01-06T14:28:45+00:00' user='Dean Earley' visible='true' lat='51.0223457' lon='-1.3341022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762558' timestamp='2007-05-29T21:09:34+01:00' visible='true' lat='50.9876961' lon='-1.3573385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675815' timestamp='2007-02-06T01:03:09+00:00' user='Dean Earley' visible='true' lat='50.9087332' lon='-1.4335738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306311' timestamp='2005-12-11T21:52:33+00:00' user='nickw' visible='true' lat='50.9266949' lon='-1.3986969' />
-  <node id='28179480' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.9557309' lon='-1.4085226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945412' timestamp='2007-03-31T20:34:38+01:00' user='nickw' visible='true' lat='50.9000347' lon='-1.3526512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816561' timestamp='2007-05-31T22:04:28+01:00' visible='true' lat='50.9913259' lon='-1.3541658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096972' timestamp='2007-06-08T23:24:17+01:00' visible='true' lat='50.9630639' lon='-1.3763269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194522' timestamp='2007-04-29T08:33:35+01:00' user='Dean Earley' visible='true' lat='50.9475266' lon='-1.4131666'>
-    <tag k='leisure' v='golf_course' />
-    <tag k='name' v='Municipal Golf Course' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319652' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9216309' lon='-1.4014864' />
-  <node id='29380427' timestamp='2007-05-20T10:19:27+01:00' user='nickw' visible='true' lat='50.9439508' lon='-1.3775814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464308' timestamp='2007-05-22T00:19:25+01:00' user='Dean Earley' visible='true' lat='50.9471015' lon='-1.3951508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621214' timestamp='2007-05-26T11:34:51+01:00' visible='true' lat='50.9698853' lon='-1.3532123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418255' timestamp='2007-05-02T00:31:31+01:00' visible='true' lat='50.9680933' lon='-1.3627248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816417' timestamp='2007-05-31T22:07:59+01:00' visible='true' lat='50.989544' lon='-1.3561777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275768' timestamp='2006-11-25T23:58:48+00:00' user='nickw' visible='true' lat='50.9138825' lon='-1.429956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275819' timestamp='2007-11-18T19:19:52+00:00' user='nickw' visible='true' lat='50.9174272' lon='-1.4370286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160212396' timestamp='2007-12-10T19:08:32+00:00' user='sladen' visible='true' lat='50.9214702' lon='-1.3883456' />
-  <node id='29509885' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9895608' lon='-1.3591235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728556' timestamp='2007-03-23T22:53:00+00:00' user='nickw' visible='true' lat='50.8994273' lon='-1.3706444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924345' timestamp='2007-06-03T20:10:38+01:00' visible='true' lat='50.9818807' lon='-1.3614235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730493' timestamp='2007-05-28T19:36:25+01:00' visible='true' lat='50.9723155' lon='-1.3657121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990890' timestamp='2008-01-03T19:20:41+00:00' user='nickw' visible='true' lat='51.0001449' lon='-1.3525375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254482' timestamp='2007-02-13T18:31:46+00:00' user='Dean Earley' visible='true' lat='50.9646773' lon='-1.4175963' />
-  <node id='28194907' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9412741' lon='-1.4077228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='32894414' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9172224' lon='-1.3876633' />
-  <node id='25471838' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.937922' lon='-1.3697168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342534' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9069035' lon='-1.3690399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133072' timestamp='2007-05-15T20:36:51+01:00' user='nickw' visible='true' lat='50.9335339' lon='-1.3752645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689051' timestamp='2007-03-24T16:33:49+00:00' user='Dean Earley' visible='true' lat='50.9395131' lon='-1.3751712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331358' timestamp='2007-04-05T14:20:39+01:00' user='Dean Earley' visible='true' lat='50.9451553' lon='-1.4037601' />
-  <node id='305230' timestamp='2006-11-22T18:13:08+00:00' user='southglos' visible='true' lat='50.9946662' lon='-1.356447' />
-  <node id='15360200' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9604989' lon='-1.3721523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722334' timestamp='2006-10-06T23:46:12+01:00' user='Dean Earley' visible='true' lat='50.9441498' lon='-1.3792064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675767' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9068156' lon='-1.4200063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976691' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9336917' lon='-1.4282598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27434190' timestamp='2007-04-17T22:04:01+01:00' visible='true' lat='50.929057' lon='-1.3860121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639987' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9006586' lon='-1.377011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111713' timestamp='2007-10-29T08:01:16+00:00' user='nickw' visible='true' lat='50.9272598' lon='-1.4375696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598852' timestamp='2007-02-04T22:51:55+00:00' user='Dean Earley' visible='true' lat='50.8983732' lon='-1.3811762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325036' timestamp='2006-11-11T17:24:32+00:00' user='Dean Earley' visible='true' lat='50.9567032' lon='-1.4519727' />
-  <node id='29511447' timestamp='2007-05-22T21:54:47+01:00' visible='true' lat='50.9713966' lon='-1.3621743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340620' timestamp='2007-06-13T09:24:43+01:00' visible='true' lat='50.9648345' lon='-1.3802525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008394' timestamp='2007-05-12T15:11:57+01:00' user='nickw' visible='true' lat='50.9265937' lon='-1.350499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398770' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9460935' lon='-1.4223999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710864' timestamp='2007-05-28T14:29:45+01:00' visible='true' lat='50.9863725' lon='-1.3554912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931359' timestamp='2007-06-03T22:43:05+01:00' visible='true' lat='50.9945349' lon='-1.3733576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194427' timestamp='2007-04-29T08:20:31+01:00' visible='true' lat='50.9471605' lon='-1.434677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950465' timestamp='2007-09-10T23:28:32+01:00' visible='true' lat='50.9130689' lon='-1.3988307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141392' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9237932' lon='-1.4157573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581837' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9112027' lon='-1.4522628' />
-  <node id='254861' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9206367' lon='-1.4649473' />
-  <node id='29464282' timestamp='2007-05-22T00:19:19+01:00' user='Dean Earley' visible='true' lat='50.9380007' lon='-1.4039733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111090' timestamp='2006-10-22T23:24:10+01:00' user='Ben' visible='true' lat='51.0169988' lon='-1.391507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963744' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9339514' lon='-1.4079221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636744' timestamp='2007-02-18T20:19:17+00:00' visible='true' lat='50.9400488' lon='-1.3926994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388882' timestamp='2007-04-05T14:20:39+01:00' user='Dean Earley' visible='true' lat='50.9403' lon='-1.3959613' />
-  <node id='675849' timestamp='2007-04-05T14:20:39+01:00' user='Dean Earley' visible='true' lat='50.9318466' lon='-1.3616968' />
-  <node id='28250092' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9164431' lon='-1.4510678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507741' timestamp='2007-05-22T00:20:05+01:00' user='Dean Earley' visible='true' lat='50.9478747' lon='-1.3996531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796858' timestamp='2007-05-30T22:26:18+01:00' user='nickw' visible='true' lat='50.9172157' lon='-1.3609453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702373' timestamp='2008-01-29T12:06:35+00:00' user='Dean Earley' visible='true' lat='50.9650854' lon='-1.3509356' />
-  <node id='254279' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9684032' lon='-1.3399961' />
-  <node id='160372952' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9221517' lon='-1.4704662' />
-  <node id='29838696' timestamp='2007-09-17T23:09:07+01:00' user='mike l' visible='true' lat='50.9703311' lon='-1.3898192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9519444' timestamp='2006-10-03T23:25:15+01:00' user='Dean Earley' visible='true' lat='50.922238' lon='-1.2720208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998129' timestamp='2007-06-05T23:00:30+01:00' user='nickw' visible='true' lat='50.9892842' lon='-1.4040912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722369' timestamp='2006-10-06T23:46:16+01:00' user='Dean Earley' visible='true' lat='50.9515183' lon='-1.4028936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160250719' timestamp='2007-12-10T19:31:28+00:00' user='sladen' visible='true' lat='50.9505811' lon='-1.3591288' />
-  <node id='27021754' timestamp='2007-04-03T00:52:39+01:00' user='Ben' visible='true' lat='50.9443881' lon='-1.4028028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222331' timestamp='2007-12-08T20:24:12+00:00' user='nickw' visible='true' lat='50.9462613' lon='-1.4462279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783129' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9433561' lon='-1.34857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507775' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9417537' lon='-1.3951158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254685' timestamp='2007-01-19T09:38:45+00:00' user='Dean Earley' visible='true' lat='50.9709849' lon='-1.3506519' />
-  <node id='30431987' timestamp='2007-06-16T16:26:06+01:00' visible='true' lat='50.9855709' lon='-1.3512301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965519' timestamp='2007-05-10T21:08:04+01:00' user='Dean Earley' visible='true' lat='50.9659659' lon='-1.4452262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816749' timestamp='2007-05-31T22:13:35+01:00' visible='true' lat='50.9903333' lon='-1.3556774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153334866' timestamp='2007-12-06T20:46:07+00:00' user='nickw' visible='true' lat='50.9434114' lon='-1.4506685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243466' timestamp='2007-04-29T20:23:52+01:00' user='Dean Earley' visible='true' lat='50.9393826' lon='-1.4067759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728166' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9406625' lon='-1.4068596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640032' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9155461' lon='-1.3715372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48967856' timestamp='2007-09-11T00:17:28+01:00' visible='true' lat='50.9048332' lon='-1.4155711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962280' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9571344' lon='-1.3620491' />
-  <node id='20957186' timestamp='2006-11-10T21:58:51+00:00' user='nickw' visible='true' lat='50.9166363' lon='-1.4239211'>
-    <tag k='name' v='MALM PL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689119' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9404739' lon='-1.3808875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924074' timestamp='2007-01-06T14:28:56+00:00' user='nickw' visible='true' lat='50.9296127' lon='-1.3842433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180223' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9610787' lon='-1.4255738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636924' timestamp='2006-12-18T21:41:04+00:00' user='nickw' visible='true' lat='50.9210036' lon='-1.4198133'>
-    <tag k='name' v='SOUTHVIEW' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110496' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9294809' lon='-1.4331915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240305' timestamp='2007-04-29T20:02:53+01:00' user='Andy Street' visible='true' lat='50.9049443' lon='-1.3554123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339152' timestamp='2007-05-01T18:52:31+01:00' visible='true' lat='50.9689869' lon='-1.3607298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671354' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9171399' lon='-1.4390228' />
-  <node id='518793' timestamp='2007-04-05T14:20:39+01:00' user='Dean Earley' visible='true' lat='50.923' lon='-1.38166' />
-  <node id='28830629' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.927026' lon='-1.3598146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254969' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9432163' lon='-1.4167397' />
-  <node id='29764423' timestamp='2007-05-30T21:37:53+01:00' user='nickw' visible='true' lat='50.9214761' lon='-1.3640984'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661153' timestamp='2007-04-05T14:20:39+01:00' user='Dean Earley' visible='true' lat='50.9143692' lon='-1.3509394' />
-  <node id='29931397' timestamp='2007-06-03T22:43:15+01:00' visible='true' lat='50.9949832' lon='-1.3732763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728917' timestamp='2007-05-28T19:12:46+01:00' visible='true' lat='50.9724913' lon='-1.3610977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931374' timestamp='2007-06-03T22:43:08+01:00' visible='true' lat='50.9944862' lon='-1.3724913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249834' timestamp='2008-01-20T09:54:32+00:00' user='andrewpmk' visible='true' lat='50.9199962' lon='-1.4439152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964106' timestamp='2006-09-08T02:11:58+01:00' user='Dean Earley' visible='true' lat='50.9185079' lon='-1.3767198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001326' timestamp='2007-05-12T09:40:14+01:00' user='nickw' visible='true' lat='50.9225972' lon='-1.3831063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122324306' timestamp='2007-11-18T19:05:24+00:00' user='nickw' visible='true' lat='50.9139072' lon='-1.4368223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339127' timestamp='2007-04-30T20:39:19+01:00' visible='true' lat='50.9684098' lon='-1.3617851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932451' timestamp='2007-05-10T21:06:03+01:00' user='Dean Earley' visible='true' lat='50.9626665' lon='-1.4560246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180224' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9605264' lon='-1.4251182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29733517' timestamp='2007-05-28T21:25:49+01:00' user='LivingWithDragons' visible='true' lat='50.9805327' lon='-1.4435123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480534' timestamp='2007-12-10T19:13:51+00:00' user='sladen' visible='true' lat='50.9121954' lon='-1.3902596'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='325677' timestamp='2007-04-05T14:20:39+01:00' user='Dean Earley' visible='true' lat='50.9283' lon='-1.42573' />
-  <node id='28243615' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.9385014' lon='-1.4149784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291039' timestamp='2007-06-13T09:32:55+01:00' visible='true' lat='50.9646976' lon='-1.3818137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781177' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.9009182' lon='-1.3735574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071294' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9207935' lon='-1.3584333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145259' timestamp='2007-05-16T00:59:02+01:00' visible='true' lat='50.9234695' lon='-1.3798879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976676' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9351107' lon='-1.4306225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141480' timestamp='2007-09-05T17:46:25+01:00' user='mike l' visible='true' lat='50.9345071' lon='-1.3960211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372739' timestamp='2007-05-01T10:05:16+01:00' visible='true' lat='50.9285203' lon='-1.4398923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718240' timestamp='2007-08-08T01:31:05+01:00' visible='true' lat='50.9347958' lon='-1.4437518' />
-  <node id='14727948' timestamp='2007-01-28T00:55:36+00:00' visible='true' lat='50.930318' lon='-1.3853104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008946' timestamp='2007-05-12T15:26:04+01:00' user='nickw' visible='true' lat='50.9302' lon='-1.3497242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122311157' timestamp='2007-12-10T20:57:12+00:00' user='sladen' visible='true' lat='50.91239' lon='-1.431705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973236' timestamp='2007-08-14T04:48:37+01:00' user='andrewpmk' visible='true' lat='50.9079363' lon='-1.397373'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689160' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9397916' lon='-1.3734574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930468' timestamp='2007-06-03T22:22:08+01:00' visible='true' lat='50.9943106' lon='-1.3523899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243871' timestamp='2007-11-20T11:03:16+00:00' user='Gregory Williams' visible='true' lat='50.9357934' lon='-1.4197721'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='29670302' timestamp='2007-10-16T11:34:23+01:00' user='Dean Earley' visible='true' lat='50.9706841' lon='-1.3671331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904006' timestamp='2007-05-10T01:07:10+01:00' user='LivingWithDragons' visible='true' lat='50.9808728' lon='-1.4451553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194375' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.944731' lon='-1.4390685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727965' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9336845' lon='-1.3828427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217216' timestamp='2007-02-18T20:18:23+00:00' visible='true' lat='50.9157478' lon='-1.3609233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874678' timestamp='2007-06-02T19:57:58+01:00' visible='true' lat='50.9610108' lon='-1.3584261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925910' timestamp='2007-06-03T20:50:20+01:00' visible='true' lat='50.9811412' lon='-1.365241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935719' timestamp='2007-05-11T00:47:41+01:00' visible='true' lat='50.9403656' lon='-1.4400349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162089' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9705017' lon='-1.3820036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194839' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.9453' lon='-1.4075192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480489' timestamp='2007-01-27T23:14:30+00:00' visible='true' lat='50.9095273' lon='-1.3910601'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30124210' timestamp='2007-06-09T19:35:53+01:00' user='nickw' visible='true' lat='50.9237325' lon='-1.347323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964841' timestamp='2006-12-16T17:47:24+00:00' user='David Currie' visible='true' lat='50.995939' lon='-1.4504227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244004' timestamp='2007-04-29T20:34:50+01:00' user='Andy Street' visible='true' lat='50.9044938' lon='-1.3483723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710913' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9829976' lon='-1.3582198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927554' timestamp='2007-06-03T21:24:28+01:00' visible='true' lat='50.9816554' lon='-1.3692474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254544' timestamp='2005-11-15T15:41:03+00:00' user='nickw' visible='true' lat='50.9330008' lon='-1.3718794' />
-  <node id='21689132' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9398855' lon='-1.3885362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160232028' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9082988' lon='-1.3922079' />
-  <node id='26781162' timestamp='2007-03-25T18:42:12+01:00' user='Dean Earley' visible='true' lat='50.9013988' lon='-1.3663204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700539' timestamp='2007-04-05T14:20:40+01:00' user='Dean Earley' visible='true' lat='50.9207417' lon='-1.396528' />
-  <node id='90577061' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9090649' lon='-1.4293889' />
-  <node id='13071247' timestamp='2007-02-18T20:18:28+00:00' visible='true' lat='50.9226947' lon='-1.3616234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706815' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8862253' lon='-1.3745126'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20133210' timestamp='2006-10-28T01:55:53+01:00' user='Dean Earley' visible='true' lat='50.9286117' lon='-1.3521916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640029' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9165083' lon='-1.3711706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486288' timestamp='2007-07-09T11:55:41+01:00' visible='true' lat='50.912096' lon='-1.3834974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929407' timestamp='2007-06-12T21:04:58+01:00' visible='true' lat='50.9775865' lon='-1.3593341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18393859' timestamp='2007-09-25T14:05:30+01:00' visible='true' lat='50.9145686' lon='-1.4050753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727999' timestamp='2007-09-25T14:05:38+01:00' visible='true' lat='50.9159075' lon='-1.4027813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282125' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.976822' lon='-1.4060833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173744' timestamp='2007-09-07T17:39:00+01:00' user='mike l' visible='true' lat='50.9440792' lon='-1.4325108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419459' timestamp='2006-12-02T23:18:53+00:00' user='Dean Earley' visible='true' lat='50.9407542' lon='-1.3707222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228100' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.9504714' lon='-1.4248197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797913' timestamp='2007-09-13T21:06:06+01:00' user='mike l' visible='true' lat='50.9729535' lon='-1.451625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874064' timestamp='2007-10-12T14:12:00+01:00' user='SteveC' visible='true' lat='50.9366692' lon='-1.4399726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464293' timestamp='2007-05-22T00:19:21+01:00' user='Dean Earley' visible='true' lat='50.9604066' lon='-1.4044701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271028' timestamp='2007-11-28T12:24:05+00:00' user='Dean Earley' visible='true' lat='50.9613' lon='-1.37838'>
-    <tag k='leisure' v='park' />
-    <tag k='name' v='Avenue Park' />
-  </node>
-  <node id='29817629' timestamp='2007-05-31T22:21:09+01:00' visible='true' lat='50.9870629' lon='-1.3643666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134841' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9286641' lon='-1.3536223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194892' timestamp='2007-04-29T08:58:00+01:00' user='Dean Earley' visible='true' lat='50.9429655' lon='-1.4081554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398452' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9273015' lon='-1.4043252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347770' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.9322459' lon='-1.3640273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704536' timestamp='2007-05-28T10:40:40+01:00' visible='true' lat='50.9788483' lon='-1.3595904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889425' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9454216' lon='-1.3685768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179527' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9565084' lon='-1.3997899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66587714' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9311302' lon='-1.4487359' />
-  <node id='113965200' timestamp='2007-11-14T14:53:44+00:00' user='Nick Dyer' visible='true' lat='50.9553813' lon='-1.3640043' />
-  <node id='254463' timestamp='2007-02-04T22:51:56+00:00' user='Dean Earley' visible='true' lat='50.8980606' lon='-1.3789362' />
-  <node id='30255643' timestamp='2007-11-28T12:24:29+00:00' user='Dean Earley' visible='true' lat='50.9783096' lon='-1.3493882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254433' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9309624' lon='-1.385131' />
-  <node id='30290759' timestamp='2007-06-13T09:24:04+01:00' visible='true' lat='50.9695021' lon='-1.3832828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009226' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.9298901' lon='-1.3547555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615427' timestamp='2007-05-03T14:47:23+01:00' visible='true' lat='50.9017843' lon='-1.4052827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200377' timestamp='2007-12-08T20:07:48+00:00' user='nickw' visible='true' lat='50.9420397' lon='-1.4465793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141426' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9311974' lon='-1.424664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021767' timestamp='2007-05-22T00:20:05+01:00' user='Dean Earley' visible='true' lat='50.9384542' lon='-1.4032439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727686' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9143023' lon='-1.3580602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815558' timestamp='2007-05-31T21:42:56+01:00' visible='true' lat='50.9893023' lon='-1.3584859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780804' timestamp='2007-06-22T21:09:51+01:00' user='Steve Chilton' visible='true' lat='50.9073208' lon='-1.4060551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998573' timestamp='2007-06-05T23:13:53+01:00' user='nickw' visible='true' lat='50.9607505' lon='-1.4440035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956737' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.9277214' lon='-1.3513998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730508' timestamp='2007-05-28T19:36:37+01:00' visible='true' lat='50.9712045' lon='-1.3705157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431972' timestamp='2007-06-16T16:26:02+01:00' visible='true' lat='50.9726384' lon='-1.3522914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341796' timestamp='2007-04-30T21:49:02+01:00' user='nickw' visible='true' lat='50.9126032' lon='-1.3614111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727673' timestamp='2007-03-25T18:42:38+01:00' user='Dean Earley' visible='true' lat='50.9001812' lon='-1.3728339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071306' timestamp='2006-08-11T02:48:04+01:00' user='Dean Earley' visible='true' lat='50.9209848' lon='-1.3583449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830569' timestamp='2007-05-05T08:52:56+01:00' user='nickw' visible='true' lat='50.9266625' lon='-1.3599154'>
-    <tag k='name' v='BRNTWD CRS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482299' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.896276' lon='-1.4262494' />
-  <node id='21141409' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9277253' lon='-1.4231278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157201972' timestamp='2007-12-08T20:09:10+00:00' user='nickw' visible='true' lat='50.9420929' lon='-1.4447764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163279' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.9704391' lon='-1.3887484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632487' timestamp='2007-05-26T19:45:35+01:00' visible='true' lat='50.9598455' lon='-1.3693541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4942933' timestamp='2006-05-21T10:18:54+01:00' user='nickw' visible='true' lat='50.9230667' lon='-1.3864554' />
-  <node id='13071225' timestamp='2006-08-11T02:47:58+01:00' user='Dean Earley' visible='true' lat='50.9207151' lon='-1.3712449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30510885' timestamp='2007-06-17T22:25:17+01:00' visible='true' lat='50.9746958' lon='-1.3592331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903056' timestamp='2007-05-09T23:03:36+01:00' visible='true' lat='50.9419908' lon='-1.3684453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163099' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.9719779' lon='-1.3879438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160358555' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9199225' lon='-1.4791522' />
-  <node id='29001315' timestamp='2007-05-12T09:40:12+01:00' user='nickw' visible='true' lat='50.9216455' lon='-1.3834242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135439' timestamp='2007-05-15T20:57:26+01:00' user='nickw' visible='true' lat='50.9434353' lon='-1.383054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87981004' timestamp='2008-01-29T12:06:35+00:00' user='Dean Earley' visible='true' lat='50.9611155' lon='-1.3439458' />
-  <node id='169435890' timestamp='2007-12-14T21:43:15+00:00' user='nickw' visible='true' lat='50.936998' lon='-1.4316745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001698' timestamp='2007-05-12T09:53:01+01:00' user='nickw' visible='true' lat='50.9402718' lon='-1.3644143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814533' timestamp='2007-05-31T21:17:06+01:00' visible='true' lat='50.9879261' lon='-1.3560219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348702' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9808341' lon='-1.4109963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117400' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9288047' lon='-1.4438153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003040' timestamp='2007-05-22T00:20:06+01:00' user='Dean Earley' visible='true' lat='50.9405262' lon='-1.4042967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29912991' timestamp='2007-06-03T15:50:13+01:00' visible='true' lat='50.9866881' lon='-1.3589147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282140' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9755985' lon='-1.4039282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689063' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.9265145' lon='-1.3992181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388931' timestamp='2007-04-05T14:20:40+01:00' user='Dean Earley' visible='true' lat='50.9427' lon='-1.39456' />
-  <node id='90592376' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.912442' lon='-1.4386243' />
-  <node id='29998055' timestamp='2007-06-05T23:00:20+01:00' user='nickw' visible='true' lat='50.9837189' lon='-1.4128723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342581' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9094966' lon='-1.361272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657690' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9057442' lon='-1.3794363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254546' timestamp='2006-09-08T23:08:03+01:00' user='Dean Earley' visible='true' lat='50.9329132' lon='-1.3691198' />
-  <node id='20972775' timestamp='2006-11-13T00:06:54+00:00' user='Dean Earley' visible='true' lat='50.9033247' lon='-1.4120111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708013' timestamp='2007-05-28T12:03:59+01:00' visible='true' lat='50.9862258' lon='-1.3621273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903888' timestamp='2007-10-17T01:09:34+01:00' user='Dean Earley' visible='true' lat='50.9505317' lon='-1.3633412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762108' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9388567' lon='-1.3542126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331341' timestamp='2007-12-06T22:10:45+00:00' user='Dean Earley' visible='true' lat='51.0063' lon='-1.37396' />
-  <node id='24924324' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9828801' lon='-1.3846009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008375' timestamp='2007-05-12T15:11:24+01:00' user='nickw' visible='true' lat='50.9262932' lon='-1.3510354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830582' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9225115' lon='-1.357063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392338' timestamp='2007-11-28T12:24:29+00:00' user='Dean Earley' visible='true' lat='50.9622693' lon='-1.3586706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961033' timestamp='2006-11-11T17:12:21+00:00' user='Dean Earley' visible='true' lat='50.9552196' lon='-1.4556649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507792' timestamp='2007-01-10T00:21:00+00:00' user='nickw' visible='true' lat='50.9490763' lon='-1.4033804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929864' timestamp='2007-06-03T22:13:31+01:00' visible='true' lat='50.9782141' lon='-1.3687525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250033' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9162538' lon='-1.4486904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134817' timestamp='2007-05-15T20:53:13+01:00' user='nickw' visible='true' lat='50.9443681' lon='-1.3871655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624987' timestamp='2007-03-25T18:42:32+01:00' user='Dean Earley' visible='true' lat='50.9021837' lon='-1.3741955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107843' timestamp='2007-04-27T23:50:35+01:00' visible='true' lat='50.9358143' lon='-1.3997218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231268' timestamp='2007-04-29T18:47:26+01:00' user='nickw' visible='true' lat='50.9069819' lon='-1.3658144'>
-    <tag k='name' v='LAVENDER C' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726177' timestamp='2006-11-13T00:56:00+00:00' user='Dean Earley' visible='true' lat='50.9085665' lon='-1.3992646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596798' timestamp='2006-10-14T13:19:13+01:00' user='nickw' visible='true' lat='50.9069362' lon='-1.4056306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153334880' timestamp='2007-12-06T20:46:07+00:00' user='nickw' visible='true' lat='50.9440623' lon='-1.4491289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194869' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9417739' lon='-1.4103915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141430' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9214206' lon='-1.4221928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388901' timestamp='2007-04-05T14:20:40+01:00' user='Dean Earley' visible='true' lat='50.9431' lon='-1.39544' />
-  <node id='21600466' timestamp='2007-10-12T14:05:13+01:00' user='SteveC' visible='true' lat='50.9283334' lon='-1.4502894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071384' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9280651' lon='-1.3581132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705649' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8964138' lon='-1.4072854'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29874153' timestamp='2007-06-02T19:43:17+01:00' visible='true' lat='50.9608378' lon='-1.3593006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='603223' timestamp='2007-04-05T14:20:41+01:00' user='Dean Earley' visible='true' lat='50.9170434' lon='-1.3957401' />
-  <node id='157186811' timestamp='2007-12-08T19:57:14+00:00' user='nickw' visible='true' lat='50.9378569' lon='-1.4500833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935760' timestamp='2007-05-11T00:50:47+01:00' visible='true' lat='50.9408607' lon='-1.445469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885364' timestamp='2006-08-23T01:17:11+01:00' user='dmgroom' visible='true' lat='50.8979689' lon='-1.40154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972828' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9022531' lon='-1.3938816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461230' timestamp='2007-05-21T23:43:14+01:00' user='nickw' visible='true' lat='50.9039729' lon='-1.3954091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998577' timestamp='2007-06-05T23:13:54+01:00' user='nickw' visible='true' lat='50.9590486' lon='-1.4467849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414268' timestamp='2007-05-01T23:49:44+01:00' user='nickw' visible='true' lat='50.9431926' lon='-1.3728918'>
-    <tag k='name' v='MARDON  CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544337' timestamp='2007-04-05T14:20:41+01:00' user='Dean Earley' visible='true' lat='50.9385' lon='-1.37233' />
-  <node id='25639908' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9048086' lon='-1.3806767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000957' timestamp='2007-05-12T09:31:57+01:00' user='nickw' visible='true' lat='50.9186741' lon='-1.4073686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743145' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9315857' lon='-1.4240348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150241' timestamp='2008-02-03T06:14:29+00:00' user='sladen' visible='true' lat='50.9103509' lon='-1.40329' />
-  <node id='29135276' timestamp='2007-05-15T20:56:02+01:00' user='nickw' visible='true' lat='50.9439926' lon='-1.3851789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744411' timestamp='2007-04-03T00:54:08+01:00' user='Ben' visible='true' lat='50.9381344' lon='-1.3951432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980720' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9589842' lon='-1.3429169' />
-  <node id='29728874' timestamp='2007-05-28T19:12:28+01:00' visible='true' lat='50.9722821' lon='-1.3573707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25305486' timestamp='2007-01-19T20:35:49+00:00' user='Dean Earley' visible='true' lat='50.9253345' lon='-1.3868738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28230905' timestamp='2007-04-29T18:43:27+01:00' user='nickw' visible='true' lat='50.9139702' lon='-1.3521952'>
-    <tag k='name' v='BATH CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548662' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.9631305' lon='-1.3596976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91107585' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.9288047' lon='-1.4176855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238992' timestamp='2007-04-09T15:39:34+01:00' user='avantman42' visible='true' lat='50.9025276' lon='-1.4114677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331851' timestamp='2007-12-06T20:44:25+00:00' user='nickw' visible='true' lat='50.9431172' lon='-1.4435562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711910' timestamp='2007-05-28T14:57:28+01:00' visible='true' lat='50.9851613' lon='-1.353693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930868' timestamp='2007-06-03T22:30:56+01:00' visible='true' lat='50.9989153' lon='-1.3552455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984793' timestamp='2007-01-10T00:15:08+00:00' user='nickw' visible='true' lat='50.942569' lon='-1.3823111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163084' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9710772' lon='-1.3863048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469868' timestamp='2007-11-18T18:58:30+00:00' user='nickw' visible='true' lat='50.9139875' lon='-1.42648' />
-  <node id='30223932' timestamp='2007-06-11T22:03:10+01:00' visible='true' lat='50.9840212' lon='-1.3516709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91126054' timestamp='2007-10-29T08:17:57+00:00' user='nickw' visible='true' lat='50.9298127' lon='-1.4460379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632181' timestamp='2007-05-26T19:20:29+01:00' visible='true' lat='50.9570737' lon='-1.3691057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976778' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9296691' lon='-1.4182078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961029' timestamp='2007-12-10T20:19:02+00:00' user='sladen' visible='true' lat='50.9461686' lon='-1.4749916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972794' timestamp='2006-11-13T00:07:02+00:00' user='Dean Earley' visible='true' lat='50.8995242' lon='-1.3896467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296380' timestamp='2007-05-28T10:59:40+01:00' visible='true' lat='50.9793872' lon='-1.3495491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549363' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9673123' lon='-1.3720506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636808' timestamp='2007-04-29T02:33:34+01:00' user='Dean Earley' visible='true' lat='50.9515968' lon='-1.4102649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271206' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9073788' lon='-1.4142922'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Southampton Central' />
-  </node>
-  <node id='28173796' timestamp='2007-09-07T17:38:57+01:00' user='mike l' visible='true' lat='50.9436239' lon='-1.4338004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2417454' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9476593' lon='-1.3648339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577105' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.962649' lon='-1.4245286' />
-  <node id='24668088' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9888093' lon='-1.4122302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115432' timestamp='2007-10-29T08:07:20+00:00' user='nickw' visible='true' lat='50.92682' lon='-1.4429709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504268' timestamp='2007-06-17T21:38:11+01:00' visible='true' lat='50.9944291' lon='-1.349822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447383' timestamp='2007-03-24T16:33:50+00:00' user='Dean Earley' visible='true' lat='50.9094474' lon='-1.389306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92679904' timestamp='2007-10-31T12:25:01+00:00' user='Dean Earley' visible='true' lat='50.9610163' lon='-1.424499' />
-  <node id='17723044' timestamp='2006-10-06T23:52:00+01:00' user='Dean Earley' visible='true' lat='50.9954774' lon='-1.3586883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816736' timestamp='2007-05-31T22:13:31+01:00' visible='true' lat='50.9909583' lon='-1.3560502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504297' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9984177' lon='-1.3528596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952637' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9341099' lon='-1.3786936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419458' timestamp='2006-12-02T23:18:53+00:00' user='Dean Earley' visible='true' lat='50.9404797' lon='-1.3708134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668170' timestamp='2007-01-04T21:05:54+00:00' user='nickw' visible='true' lat='50.9819245' lon='-1.3971612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727695' timestamp='2007-04-29T20:03:07+01:00' user='Andy Street' visible='true' lat='50.905201' lon='-1.3526549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254668' timestamp='2007-01-27T23:37:02+00:00' visible='true' lat='50.9265352' lon='-1.390521'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='157204119' timestamp='2007-12-08T20:11:10+00:00' user='nickw' visible='true' lat='50.9419802' lon='-1.4428295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388950' timestamp='2007-12-20T10:42:35+00:00' user='mike l' visible='true' lat='50.9387641' lon='-1.3971727' />
-  <node id='28582952' timestamp='2007-05-02T23:57:46+01:00' visible='true' lat='50.9428154' lon='-1.4252628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290732' timestamp='2007-10-29T15:43:33+00:00' user='Dean Earley' visible='true' lat='50.967452' lon='-1.3825871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730538' timestamp='2007-05-28T19:37:05+01:00' visible='true' lat='50.9714127' lon='-1.3761246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583017' timestamp='2007-05-02T23:57:54+01:00' visible='true' lat='50.9383177' lon='-1.4326035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232580' timestamp='2007-04-29T18:59:36+01:00' user='nickw' visible='true' lat='50.9162477' lon='-1.3534879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945348' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9210007' lon='-1.3466901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801373' timestamp='2007-03-04T18:58:22+00:00' user='Dean Earley' visible='true' lat='50.9075493' lon='-1.3745214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689102' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9412751' lon='-1.3823378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466126' timestamp='2007-05-22T00:38:12+01:00' user='Dean Earley' visible='true' lat='50.9818458' lon='-1.4456224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18101133' timestamp='2006-10-11T19:37:00+01:00' user='nickw' visible='true' lat='50.9128118' lon='-1.4010335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298260' timestamp='2007-01-19T18:27:13+00:00' user='Dean Earley' visible='true' lat='50.9631685' lon='-1.385705' />
-  <node id='28194507' timestamp='2007-04-29T08:31:58+01:00' user='Dean Earley' visible='true' lat='50.9475688' lon='-1.4128572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621203' timestamp='2007-05-26T11:34:33+01:00' visible='true' lat='50.9704781' lon='-1.3526184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305623' timestamp='2005-12-11T11:52:19+00:00' user='nickw' visible='true' lat='50.9850168' lon='-1.3878393' />
-  <node id='30161249' timestamp='2007-06-10T18:18:28+01:00' visible='true' lat='50.9636352' lon='-1.3635684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26593141' timestamp='2007-03-17T20:47:44+00:00' user='nickw' visible='true' lat='50.8995435' lon='-1.3641764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346805' timestamp='2007-03-04T18:57:58+00:00' user='Dean Earley' visible='true' lat='50.9159072' lon='-1.3705202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278600' timestamp='2007-08-14T04:48:06+01:00' user='andrewpmk' visible='true' lat='50.908023' lon='-1.3977751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561791' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9254712' lon='-1.4375371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794373' timestamp='2007-05-30T21:37:18+01:00' user='nickw' visible='true' lat='50.9213174' lon='-1.3627979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398407' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.979374' lon='-1.42552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92681273' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9613307' lon='-1.4252775' />
-  <node id='14964119' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.92196' lon='-1.3754819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632894' timestamp='2007-05-26T20:07:52+01:00' visible='true' lat='50.9678978' lon='-1.3635359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021718' timestamp='2007-04-03T00:50:50+01:00' user='Dean Earley' visible='true' lat='50.9193752' lon='-1.4493313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387827' timestamp='2007-04-05T14:20:41+01:00' user='Dean Earley' visible='true' lat='50.9326' lon='-1.38721' />
-  <node id='28903071' timestamp='2007-05-09T23:03:42+01:00' visible='true' lat='50.9417017' lon='-1.3678548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229581' timestamp='2007-06-12T00:14:41+01:00' user='nickw' visible='true' lat='50.9340176' lon='-1.3542022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160267785' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9712106' lon='-1.3494557' />
-  <node id='10222233' timestamp='2007-04-20T23:53:19+01:00' user='Dean Earley' visible='true' lat='50.9069345' lon='-1.4064618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518782' timestamp='2007-04-05T14:20:41+01:00' user='Dean Earley' visible='true' lat='50.919849' lon='-1.3902892' />
-  <node id='20971171' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9068018' lon='-1.3986936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801368' timestamp='2007-03-04T19:32:14+00:00' user='Dean Earley' visible='true' lat='50.9057547' lon='-1.376133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575764' timestamp='2007-03-16T21:52:28+00:00' user='nickw' visible='true' lat='50.900124' lon='-1.3903979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133164' timestamp='2006-10-28T01:55:44+01:00' user='Dean Earley' visible='true' lat='50.9282062' lon='-1.3517225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254874' timestamp='2007-02-18T21:30:29+00:00' visible='true' lat='50.9156441' lon='-1.4832287' />
-  <node id='21689089' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9434313' lon='-1.3888988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636823' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9488955' lon='-1.407851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530518' timestamp='2007-04-05T14:20:41+01:00' user='Dean Earley' visible='true' lat='50.9491736' lon='-1.3719767' />
-  <node id='50774731' timestamp='2007-09-13T20:11:58+01:00' user='mike l' visible='true' lat='50.9461204' lon='-1.4447507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419424' timestamp='2006-12-02T23:18:50+00:00' user='Dean Earley' visible='true' lat='50.9400927' lon='-1.3657108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071367' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9187181' lon='-1.369853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324980' timestamp='2006-09-02T12:59:39+01:00' user='Dean Earley' visible='true' lat='50.9607492' lon='-1.4026177' />
-  <node id='24984679' timestamp='2007-01-25T22:42:45+00:00' user='Dean Earley' visible='true' lat='50.9418557' lon='-1.3778477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194888' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9413297' lon='-1.4099262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194336' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9446695' lon='-1.4359563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160220273' timestamp='2007-12-10T19:12:44+00:00' user='sladen' visible='true' lat='50.9157183' lon='-1.3902596' />
-  <node id='28249879' timestamp='2007-04-29T21:41:43+01:00' visible='true' lat='50.920238' lon='-1.4384401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601368' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9203827' lon='-1.4743994'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='430656' timestamp='2007-04-05T14:20:42+01:00' user='Dean Earley' visible='true' lat='50.9129' lon='-1.4041' />
-  <node id='29632209' timestamp='2007-05-26T19:21:09+01:00' visible='true' lat='50.9564154' lon='-1.3667305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504766' timestamp='2007-06-17T21:50:36+01:00' visible='true' lat='50.9805411' lon='-1.3572249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325048' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.9456981' lon='-1.4762705' />
-  <node id='13071358' timestamp='2006-08-11T02:48:10+01:00' user='Dean Earley' visible='true' lat='50.9177856' lon='-1.3681085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640014' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9112348' lon='-1.3699275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099519' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9548771' lon='-1.3699473' />
-  <node id='29026813' timestamp='2007-05-13T10:10:59+01:00' user='nickw' visible='true' lat='50.920147' lon='-1.4034657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232073' timestamp='2006-10-14T13:19:05+01:00' user='nickw' visible='true' lat='50.9088491' lon='-1.405576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91107581' timestamp='2007-10-29T07:45:59+00:00' user='nickw' visible='true' lat='50.9286732' lon='-1.4174073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162104' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true' lat='50.9727723' lon='-1.3778118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435823' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9369479' lon='-1.4331646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924233' timestamp='2007-02-13T19:46:58+00:00' user='Dean Earley' visible='true' lat='50.9633178' lon='-1.3828013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764483' timestamp='2007-02-10T23:53:38+00:00' visible='true' lat='50.9111367' lon='-1.3968477' />
-  <node id='169423477' timestamp='2007-12-14T21:35:45+00:00' user='nickw' visible='true' lat='50.9330917' lon='-1.4435449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675680' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.9012622' lon='-1.4479146'>
-    <tag k='landuse' v='residential' />
-  </node>
-  <node id='29632198' timestamp='2007-05-26T19:21:04+01:00' visible='true' lat='50.9552563' lon='-1.3671209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404877' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9123575' lon='-1.4352413' />
-  <node id='28250028' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9173501' lon='-1.4485856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359713' timestamp='2006-10-06T23:29:32+01:00' user='Dean Earley' visible='true' lat='50.9692541' lon='-1.3517471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998534' timestamp='2007-06-05T23:13:21+01:00' user='nickw' visible='true' lat='50.9616013' lon='-1.4487716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301609' timestamp='2007-04-03T00:53:58+01:00' user='Ben' visible='true' lat='50.9374265' lon='-1.3993665' />
-  <node id='107808656' timestamp='2007-11-11T18:09:35+00:00' user='Dean Earley' visible='true' lat='50.9149155' lon='-1.3577296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248242' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.891518' lon='-1.3977013' />
-  <node id='29815648' timestamp='2007-05-31T21:47:58+01:00' visible='true' lat='50.991498' lon='-1.3555071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28343213' timestamp='2008-02-03T05:55:50+00:00' user='sladen' visible='true' lat='50.9123749' lon='-1.4026377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278570' timestamp='2007-08-14T04:48:03+01:00' user='andrewpmk' visible='true' lat='50.9075839' lon='-1.3976078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675848' timestamp='2007-04-05T14:20:42+01:00' user='Dean Earley' visible='true' lat='50.9326147' lon='-1.3624305' />
-  <node id='28339140' timestamp='2007-04-30T20:39:25+01:00' visible='true' lat='50.966891' lon='-1.3594771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50656129' timestamp='2007-09-13T21:25:22+01:00' user='mike l' visible='true' lat='50.9452326' lon='-1.4476322' />
-  <node id='92684347' timestamp='2007-10-31T12:25:03+00:00' user='Dean Earley' visible='true' lat='50.9607708' lon='-1.4225088' />
-  <node id='17721040' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9606107' lon='-1.3610054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243679' timestamp='2007-04-29T20:25:13+01:00' user='Dean Earley' visible='true' lat='50.9383538' lon='-1.4131839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29506029' timestamp='2007-05-22T19:36:57+01:00' visible='true' lat='50.9879433' lon='-1.3516316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227207' timestamp='2006-10-23T20:52:53+01:00' user='nickw' visible='true' lat='50.929438' lon='-1.4140968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222202' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.910485' lon='-1.4306407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924222' timestamp='2007-01-06T14:38:00+00:00' user='nickw' visible='true' lat='50.9598924' lon='-1.3681612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583071' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9379564' lon='-1.4345502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380442' timestamp='2007-05-20T10:19:29+01:00' user='nickw' visible='true' lat='50.9402298' lon='-1.3715369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468545' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9127039' lon='-1.4436012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708024' timestamp='2007-05-28T12:04:04+01:00' visible='true' lat='50.9829899' lon='-1.3651306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245144834' timestamp='2008-02-03T05:55:22+00:00' user='sladen' visible='true' lat='50.9128458' lon='-1.4023287'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='Friends Meeting House' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </node>
-  <node id='160242663' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9079308' lon='-1.4240254' />
-  <node id='388867' timestamp='2007-05-22T00:20:07+01:00' user='Dean Earley' visible='true' lat='50.9316754' lon='-1.4015971' />
-  <node id='28180227' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.960651' lon='-1.4244821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18347838' timestamp='2007-02-18T20:19:13+00:00' visible='true' lat='50.9320072' lon='-1.4143584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161372' timestamp='2007-06-10T18:25:30+01:00' visible='true' lat='50.9744803' lon='-1.3690266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117366' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9305452' lon='-1.4453351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890088' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9192345' lon='-1.3924915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171753' timestamp='2007-05-16T23:48:00+01:00' user='nickw' visible='true' lat='50.9416173' lon='-1.3884754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398369' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.959291' lon='-1.4272414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447409' timestamp='2007-03-09T20:54:23+00:00' user='nickw' visible='true' lat='50.8982814' lon='-1.390337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601301' timestamp='2006-09-01T00:16:02+01:00' user='nickw' visible='true' lat='50.8253288' lon='-1.5556598'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28342551' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9070037' lon='-1.3671526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372807' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9287704' lon='-1.4420386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243979485' timestamp='2008-01-29T11:33:02+00:00' user='Dean Earley' visible='true' lat='50.9612606' lon='-1.3503456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217892' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9234777' lon='-1.3610107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956616' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9278623' lon='-1.3502028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964046' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9979135' lon='-1.443602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254921' timestamp='2007-06-22T21:44:05+01:00' user='Steve Chilton' visible='true' lat='50.9072209' lon='-1.4075153' />
-  <node id='28194385' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9455552' lon='-1.4391054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102977' timestamp='2007-02-18T20:18:19+00:00' visible='true' lat='50.9336504' lon='-1.3635083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096941' timestamp='2007-06-08T23:24:12+01:00' visible='true' lat='50.9644867' lon='-1.3773964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964102' timestamp='2007-11-11T18:09:42+00:00' user='Dean Earley' visible='true' lat='50.9178739' lon='-1.3752755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967592' timestamp='2006-11-12T20:46:55+00:00' user='Dean Earley' visible='true' lat='50.9203461' lon='-1.3893457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021752' timestamp='2007-05-22T00:20:07+01:00' user='Dean Earley' visible='true' lat='50.9437709' lon='-1.4046129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66583519' timestamp='2007-10-12T14:01:25+01:00' user='SteveC' visible='true' lat='50.9319741' lon='-1.4489848' />
-  <node id='28249940' timestamp='2007-04-29T21:41:52+01:00' visible='true' lat='50.9149811' lon='-1.4441473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130934' timestamp='2006-10-28T01:45:33+01:00' user='Dean Earley' visible='true' lat='50.934662' lon='-1.3605235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639968' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.9000053' lon='-1.379087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325225' timestamp='2006-11-11T17:24:41+00:00' user='Dean Earley' visible='true' lat='50.9360669' lon='-1.3465572' />
-  <node id='21561570' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9271868' lon='-1.4311003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745481' timestamp='2006-09-03T01:40:47+01:00' user='Dean Earley' visible='true' lat='50.971982' lon='-1.3741058'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298307' timestamp='2005-12-06T02:08:52+00:00' visible='true' lat='50.948632' lon='-1.394083' />
-  <node id='29387397' timestamp='2007-05-27T10:45:24+01:00' visible='true' lat='50.9644771' lon='-1.3642981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298249' timestamp='2007-01-06T14:30:55+00:00' user='Dean Earley' visible='true' lat='50.9854626' lon='-1.3640523' />
-  <node id='24949822' timestamp='2007-01-31T02:05:54+00:00' user='Dean Earley' visible='true' lat='50.9944916' lon='-1.3833784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161121' timestamp='2007-06-10T18:13:44+01:00' visible='true' lat='50.9728222' lon='-1.3553553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28257909' timestamp='2007-04-29T22:56:50+01:00' user='Andy Street' visible='true' lat='50.9005896' lon='-1.3550949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745436' timestamp='2007-10-31T15:18:30+00:00' user='Dean Earley' visible='true' lat='50.9662577' lon='-1.350903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108518' timestamp='2007-10-29T07:48:08+00:00' user='nickw' visible='true' lat='50.9322042' lon='-1.4200248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932236' timestamp='2007-09-15T18:41:58+01:00' user='mike l' visible='true' lat='50.9683' lon='-1.4448093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871562' timestamp='2007-06-02T18:40:07+01:00' visible='true' lat='50.9155286' lon='-1.3516977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636774' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.9466082' lon='-1.403348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632453' timestamp='2007-05-26T19:27:14+01:00' visible='true' lat='50.9606142' lon='-1.3670163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194439' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9471175' lon='-1.4323521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157216947' timestamp='2007-12-08T20:19:41+00:00' user='nickw' visible='true' lat='50.944828' lon='-1.44872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677146' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8960655' lon='-1.4325166' />
-  <node id='31487488' timestamp='2007-07-09T12:19:40+01:00' visible='true' lat='50.9192751' lon='-1.3894985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924290' timestamp='2007-10-29T15:43:35+00:00' user='Dean Earley' visible='true' lat='50.9667999' lon='-1.3853273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797934' timestamp='2007-11-20T11:02:14+00:00' user='Gregory Williams' visible='true' lat='50.9708064' lon='-1.4500864'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='13706452' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9265629' lon='-1.3800704'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29464237' timestamp='2007-05-22T00:19:09+01:00' user='Dean Earley' visible='true' lat='50.9384085' lon='-1.4193072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021831' timestamp='2007-04-03T00:53:16+01:00' user='Ben' visible='true' lat='50.9497851' lon='-1.3753508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241440' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.9452849' lon='-1.4507079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932436' timestamp='2007-05-10T21:05:54+01:00' user='Dean Earley' visible='true' lat='50.9642312' lon='-1.4701143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632440' timestamp='2007-05-26T19:27:02+01:00' visible='true' lat='50.9606507' lon='-1.3624838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976793' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9263133' lon='-1.4196184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639911' timestamp='2007-02-04T22:51:16+00:00' user='Dean Earley' visible='true' lat='50.9042502' lon='-1.3830666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21586130' timestamp='2006-12-14T23:57:07+00:00' user='Dean Earley' visible='true' lat='50.9698221' lon='-1.3374039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973100' timestamp='2006-11-13T00:42:42+00:00' user='Dean Earley' visible='true' lat='50.9056585' lon='-1.4096592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815071' timestamp='2007-05-31T21:31:02+01:00' visible='true' lat='50.9883539' lon='-1.3546237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341757' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9101981' lon='-1.3595039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346967' timestamp='2007-04-30T23:26:36+01:00' user='nickw' visible='true' lat='50.8993232' lon='-1.3629347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29706971' timestamp='2007-05-28T11:45:28+01:00' visible='true' lat='50.9864093' lon='-1.3607304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509859' timestamp='2007-05-22T21:20:38+01:00' visible='true' lat='50.9927081' lon='-1.3582593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28849617' timestamp='2007-05-07T23:11:34+01:00' user='nickw' visible='true' lat='50.9200101' lon='-1.4115318'>
-    <tag k='name' v='EDWN JNS G' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346771' timestamp='2007-03-04T18:57:55+00:00' user='Dean Earley' visible='true' lat='50.9144236' lon='-1.3645066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000942' timestamp='2007-05-12T09:30:27+01:00' user='nickw' visible='true' lat='50.9196166' lon='-1.4089331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161112' timestamp='2007-06-10T18:13:42+01:00' visible='true' lat='50.9733622' lon='-1.353081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801042' timestamp='2007-10-31T15:08:49+00:00' user='Dean Earley' visible='true' lat='50.9423126' lon='-1.448882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931351' timestamp='2007-06-03T22:43:04+01:00' visible='true' lat='50.9938939' lon='-1.3735178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419441' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.941082' lon='-1.3704492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91124934' timestamp='2007-10-29T08:16:55+00:00' user='nickw' visible='true' lat='50.930006' lon='-1.446424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316555' timestamp='2007-10-17T01:27:50+01:00' user='Dean Earley' visible='true' lat='50.9265137' lon='-1.4415454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008390' timestamp='2007-05-12T15:11:57+01:00' user='nickw' visible='true' lat='50.926193' lon='-1.3507772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548679' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.9635559' lon='-1.3639425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463004' timestamp='2007-05-22T00:01:30+01:00' user='nickw' visible='true' lat='50.9072471' lon='-1.403832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949971' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9873114' lon='-1.3845223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089134' timestamp='2007-06-08T18:12:09+01:00' visible='true' lat='50.9639969' lon='-1.3782416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173882' timestamp='2007-04-29T01:03:01+01:00' visible='true' lat='50.942067' lon='-1.430714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903820' timestamp='2007-10-17T01:09:35+01:00' user='Dean Earley' visible='true' lat='50.9505433' lon='-1.3632144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548697' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9640696' lon='-1.3683715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290762' timestamp='2007-06-13T09:24:05+01:00' visible='true' lat='50.9689467' lon='-1.3830209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325240' timestamp='2005-12-16T23:12:59+00:00' user='80n' visible='true' lat='50.9339571' lon='-1.3264867' />
-  <node id='325647' timestamp='2007-04-05T14:20:42+01:00' user='Dean Earley' visible='true' lat='50.9138' lon='-1.41348' />
-  <node id='242718' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9209454' lon='-1.4153637' />
-  <node id='28830676' timestamp='2007-05-30T21:37:24+01:00' user='nickw' visible='true' lat='50.9242052' lon='-1.3627896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18868877' timestamp='2007-04-03T00:52:05+01:00' user='Dean Earley' visible='true' lat='50.9114196' lon='-1.4201786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071401' timestamp='2006-08-11T02:48:13+01:00' user='Dean Earley' visible='true' lat='50.9227614' lon='-1.3584388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773777' timestamp='2007-12-07T13:53:38+00:00' user='Nick Dyer' visible='true' lat='50.9617151' lon='-1.4268431' />
-  <node id='91127595' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9352772' lon='-1.4373027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971186' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9058606' lon='-1.4002333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949924' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9914132' lon='-1.3818998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245151110' timestamp='2008-02-03T06:18:34+00:00' user='sladen' visible='true' lat='50.9098747' lon='-1.4011957' />
-  <node id='28194390' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9459243' lon='-1.4386011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243479' timestamp='2007-04-29T20:23:54+01:00' user='Dean Earley' visible='true' lat='50.93964' lon='-1.4088623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243526' timestamp='2007-04-29T20:24:17+01:00' user='Dean Earley' visible='true' lat='50.9394275' lon='-1.4079312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956575' timestamp='2007-06-26T23:44:57+01:00' user='nickw' visible='true' lat='50.9274678' lon='-1.3506697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949835' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9894123' lon='-1.3774497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963727' timestamp='2007-02-18T20:19:08+00:00' visible='true' lat='50.9291458' lon='-1.4142698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505739' timestamp='2007-05-22T19:28:33+01:00' visible='true' lat='50.9915397' lon='-1.3532828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815669' timestamp='2007-05-31T21:48:05+01:00' visible='true' lat='50.9898829' lon='-1.3531516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124377' timestamp='2007-06-09T19:43:14+01:00' user='nickw' visible='true' lat='50.9252008' lon='-1.3504868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245145464' timestamp='2008-02-03T05:57:08+00:00' user='sladen' visible='true' lat='50.9142365' lon='-1.4021398' />
-  <node id='301575' timestamp='2007-03-25T19:25:25+01:00' user='Dean Earley' visible='true' lat='50.9037546' lon='-1.3975942' />
-  <node id='25675806' timestamp='2007-02-06T01:03:08+00:00' user='Dean Earley' visible='true' lat='50.9096308' lon='-1.4464088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984728' timestamp='2007-01-10T00:12:09+00:00' user='nickw' visible='true' lat='50.9431886' lon='-1.391112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508357' timestamp='2007-06-17T22:14:18+01:00' visible='true' lat='50.9751941' lon='-1.3543262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278555' timestamp='2007-08-14T04:48:02+01:00' user='andrewpmk' visible='true' lat='50.90764' lon='-1.396354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972817' timestamp='2007-02-18T21:30:36+00:00' visible='true' lat='50.901507' lon='-1.397768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462161' timestamp='2007-05-21T23:53:39+01:00' user='nickw' visible='true' lat='50.9011288' lon='-1.3982898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677848' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.8983933' lon='-1.4456229' />
-  <node id='14727969' timestamp='2008-02-03T05:58:07+00:00' user='sladen' visible='true' lat='50.9157138' lon='-1.4020712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254951' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.9516966' lon='-1.4184418' />
-  <node id='48967859' timestamp='2007-09-11T00:17:28+01:00' visible='true' lat='50.9045257' lon='-1.4149253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956688' timestamp='2007-06-26T23:49:19+01:00' user='nickw' visible='true' lat='50.9303259' lon='-1.3482807'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971216' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9052785' lon='-1.41641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956685' timestamp='2007-06-26T23:49:18+01:00' user='nickw' visible='true' lat='50.9296998' lon='-1.3488171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896424' timestamp='2007-02-13T19:43:29+00:00' user='Dean Earley' visible='true' lat='50.9654981' lon='-1.386018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831122' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9128901' lon='-1.4057698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591310' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9178092' lon='-1.4119385'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='4931812' timestamp='2007-04-05T14:20:43+01:00' user='Dean Earley' visible='true' lat='50.9235199' lon='-1.3844085' />
-  <node id='29816634' timestamp='2007-05-31T22:10:48+01:00' visible='true' lat='50.9901492' lon='-1.3604991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774705' timestamp='2007-09-13T20:11:57+01:00' user='mike l' visible='true' lat='50.9463971' lon='-1.4501049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530533' timestamp='2007-05-23T13:04:50+01:00' visible='true' lat='50.9822116' lon='-1.3538342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958690' timestamp='2007-09-10T23:55:15+01:00' visible='true' lat='50.9060572' lon='-1.4082442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122324309' timestamp='2007-11-18T19:05:24+00:00' user='nickw' visible='true' lat='50.9141013' lon='-1.437021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957233' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9123946' lon='-1.4219663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92720590' timestamp='2007-10-30T18:01:30+00:00' user='Nick Dyer' visible='true' lat='50.9038439' lon='-1.4183421' />
-  <node id='28341792' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9118892' lon='-1.3624839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874055' timestamp='2007-12-06T20:41:54+00:00' user='nickw' visible='true' lat='50.937238' lon='-1.4423244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160219865' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9158753' lon='-1.3903626' />
-  <node id='29003037' timestamp='2007-05-22T00:20:07+01:00' user='Dean Earley' visible='true' lat='50.9407715' lon='-1.4036944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303107' timestamp='2007-01-19T18:20:22+00:00' user='Dean Earley' visible='true' lat='50.9507262' lon='-1.3696394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745515' timestamp='2007-01-19T18:27:14+00:00' user='Dean Earley' visible='true' lat='50.9596387' lon='-1.393888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973119' timestamp='2007-09-26T21:57:29+01:00' visible='true' lat='50.9056854' lon='-1.4105354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504278' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.998989' lon='-1.3533174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957224' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9122557' lon='-1.4156226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507779' timestamp='2007-05-22T00:20:08+01:00' user='Dean Earley' visible='true' lat='50.9476532' lon='-1.3996141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909666' timestamp='2007-06-03T14:54:18+01:00' visible='true' lat='50.9689216' lon='-1.3537096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232098' timestamp='2006-10-14T13:19:08+01:00' user='nickw' visible='true' lat='50.9143898' lon='-1.4069196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071418' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.923482' lon='-1.3541316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254313' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9971107' lon='-1.3361896' />
-  <node id='329526' timestamp='2007-04-05T14:20:43+01:00' user='Dean Earley' visible='true' lat='50.9671' lon='-1.42638' />
-  <node id='30431938' timestamp='2007-06-16T16:23:58+01:00' visible='true' lat='50.9707749' lon='-1.3517928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998086' timestamp='2007-06-05T23:00:24+01:00' user='nickw' visible='true' lat='50.9886651' lon='-1.405611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730497' timestamp='2007-05-28T19:36:29+01:00' visible='true' lat='50.9720815' lon='-1.3617859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903394' timestamp='2007-05-09T23:24:30+01:00' visible='true' lat='50.9471416' lon='-1.3665821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87844992' timestamp='2007-10-29T16:21:46+00:00' user='Nick Dyer' visible='true' lat='50.9084557' lon='-1.4380221' />
-  <node id='28194408' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9465024' lon='-1.4383489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506816' timestamp='2007-06-17T22:03:34+01:00' visible='true' lat='50.978435' lon='-1.3624618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908444' timestamp='2006-07-18T10:20:41+01:00' user='nickw' visible='true' lat='50.9355849' lon='-1.3689976' />
-  <node id='29134131' timestamp='2007-05-22T00:20:08+01:00' user='Dean Earley' visible='true' lat='50.9383672' lon='-1.4030116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856359' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.94736' lon='-1.3931398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422981' timestamp='2007-04-29T20:37:33+01:00' user='Dean Earley' visible='true' lat='50.9376679' lon='-1.4117832' />
-  <node id='12595073' timestamp='2006-08-04T12:00:24+01:00' user='nickw' visible='true' lat='50.9183327' lon='-1.4125166'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21613389' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9750207' lon='-1.4055588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099527' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9511355' lon='-1.3635185' />
-  <node id='21091876' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.9157402' lon='-1.4267613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710907' timestamp='2007-05-28T14:29:56+01:00' visible='true' lat='50.984502' lon='-1.3570706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29533957' timestamp='2007-06-12T20:07:45+01:00' visible='true' lat='50.9784778' lon='-1.3494043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219690' timestamp='2007-12-08T20:21:41+00:00' user='nickw' visible='true' lat='50.9447811' lon='-1.4440066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949852' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9938891' lon='-1.3708539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728557' timestamp='2007-03-23T22:53:00+00:00' user='nickw' visible='true' lat='50.9000208' lon='-1.3702683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924108' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9398479' lon='-1.3709723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227241' timestamp='2006-10-23T20:52:58+01:00' user='nickw' visible='true' lat='50.9225165' lon='-1.4103133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469890' timestamp='2007-04-05T14:20:44+01:00' user='Dean Earley' visible='true' lat='50.9191' lon='-1.42099' />
-  <node id='27512886' timestamp='2008-01-29T11:33:03+00:00' user='Dean Earley' visible='true' lat='50.9625923' lon='-1.3510903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90610018' timestamp='2007-10-28T20:53:33+00:00' user='Nick Dyer' visible='true' lat='50.9111584' lon='-1.4297074' />
-  <node id='21613471' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.974931' lon='-1.3959541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613441' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.9764334' lon='-1.4035254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418533' timestamp='2007-05-20T15:17:30+01:00' visible='true' lat='50.9665778' lon='-1.3644079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180202' timestamp='2007-04-29T02:05:34+01:00' user='Dean Earley' visible='true' lat='50.963082' lon='-1.421671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563294' timestamp='2007-04-23T22:47:35+01:00' visible='true' lat='50.9297295' lon='-1.3977641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18349476' timestamp='2006-10-16T22:13:42+01:00' user='nickw' visible='true' lat='50.9857222' lon='-1.4316219'>
-    <tag k='name' v='Fairfields Farm' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298226' timestamp='2006-08-11T09:59:04+01:00' user='80n' visible='true' lat='51.0239163' lon='-1.3330513' />
-  <node id='14743160' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9244539' lon='-1.4265047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021797' timestamp='2007-04-03T00:52:58+01:00' user='Ben' visible='true' lat='50.9353505' lon='-1.4005371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506258' timestamp='2007-06-17T21:59:35+01:00' visible='true' lat='50.9802991' lon='-1.353686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50800120' timestamp='2007-10-26T15:04:23+01:00' user='Nick Dyer' visible='true' lat='50.977927' lon='-1.438051'>
-    <tag k='amenity' v='post_office' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='245150147' timestamp='2008-02-03T06:13:56+00:00' user='sladen' visible='true' lat='50.908473' lon='-1.4025432' />
-  <node id='8596784' timestamp='2006-11-13T00:43:25+00:00' user='Dean Earley' visible='true' lat='50.901439' lon='-1.4082284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600427' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9214195' lon='-1.4377885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402751' timestamp='2007-04-05T14:20:44+01:00' user='Dean Earley' visible='true' lat='50.9155' lon='-1.40644' />
-  <node id='29997533' timestamp='2007-06-05T22:43:56+01:00' user='nickw' visible='true' lat='51.0051134' lon='-1.3525766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929000' timestamp='2007-06-03T21:58:01+01:00' visible='true' lat='50.9751276' lon='-1.3613082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149561' timestamp='2008-02-03T06:10:52+00:00' user='sladen' visible='true' lat='50.9051552' lon='-1.4031526' />
-  <node id='20110924' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9346756' lon='-1.3636561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246353' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.9313464' lon='-1.4300374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346873' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9132217' lon='-1.3682636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110907' timestamp='2006-10-27T23:39:32+01:00' user='Dean Earley' visible='true' lat='50.9356927' lon='-1.3650824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232086' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9153939' lon='-1.4121556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2742646' timestamp='2006-10-06T23:46:22+01:00' user='Dean Earley' visible='true' lat='50.9433265' lon='-1.3810933'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360201' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9608346' lon='-1.3725821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183646' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9003585' lon='-1.3809212' />
-  <node id='28935730' timestamp='2007-05-11T00:47:48+01:00' visible='true' lat='50.9388771' lon='-1.4459795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269426' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0120281' lon='-1.3919988' />
-  <node id='29914414' timestamp='2007-06-03T16:22:50+01:00' visible='true' lat='50.9842307' lon='-1.3603883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533039' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9276909' lon='-1.4328833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340633' timestamp='2007-04-28T17:57:54+01:00' visible='true' lat='50.9636484' lon='-1.3583941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325210' timestamp='2006-11-11T17:24:49+00:00' user='Dean Earley' visible='true' lat='50.9403477' lon='-1.3598748' />
-  <node id='20976672' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9381994' lon='-1.4270634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169406425' timestamp='2007-12-14T21:26:08+00:00' user='nickw' visible='true' lat='50.9282241' lon='-1.4176238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254330' timestamp='2005-11-15T15:39:02+00:00' user='nickw' visible='true' lat='50.9684034' lon='-1.3965837' />
-  <node id='254411' timestamp='2007-01-28T00:07:09+00:00' visible='true' lat='50.9084055' lon='-1.4049044' />
-  <node id='14743171' timestamp='2006-11-12T22:57:32+00:00' user='Dean Earley' visible='true' lat='50.9080127' lon='-1.4128988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87823411' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8953148' lon='-1.4075343' />
-  <node id='14957863' timestamp='2007-05-10T21:08:10+01:00' user='Dean Earley' visible='true' lat='50.9593205' lon='-1.451793'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='244310993' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9728137' lon='-1.4353925' />
-  <node id='25639942' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.901816' lon='-1.3786308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447523' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9114132' lon='-1.3865986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342632' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9127785' lon='-1.363815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675689' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.8999035' lon='-1.4440951' />
-  <node id='29026812' timestamp='2007-05-13T10:10:58+01:00' user='nickw' visible='true' lat='50.9171704' lon='-1.4093173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579397' timestamp='2006-12-14T13:52:48+00:00' user='David Currie' visible='true' lat='50.9767194' lon='-1.4050706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830638' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9288524' lon='-1.3644232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577074' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9116518' lon='-1.4454822' />
-  <node id='29816434' timestamp='2007-05-31T22:00:53+01:00' visible='true' lat='50.9907344' lon='-1.3550699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092045' timestamp='2007-05-03T00:08:33+01:00' visible='true' lat='50.9408805' lon='-1.4354307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722338' timestamp='2006-10-06T23:46:12+01:00' user='Dean Earley' visible='true' lat='50.9467943' lon='-1.3770725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028844' timestamp='2006-09-08T23:06:50+01:00' user='Dean Earley' visible='true' lat='50.9276256' lon='-1.3611214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243602' timestamp='2007-04-29T20:24:59+01:00' user='Dean Earley' visible='true' lat='50.9347472' lon='-1.4173725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071273' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9178499' lon='-1.3603666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504829' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9548619' lon='-1.4022954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089115' timestamp='2007-06-08T18:12:07+01:00' visible='true' lat='50.9656233' lon='-1.3796503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949869' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9966149' lon='-1.3764563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636793' timestamp='2007-04-29T02:33:46+01:00' user='Dean Earley' visible='true' lat='50.9504132' lon='-1.4107948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548696' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9655237' lon='-1.3673011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945399' timestamp='2007-04-08T17:43:56+01:00' user='avantman42' visible='true' lat='50.9032426' lon='-1.3446112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890070' timestamp='2006-10-27T00:48:03+01:00' user='Dean Earley' visible='true' lat='50.9207242' lon='-1.3907229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021816' timestamp='2007-09-05T17:47:10+01:00' user='mike l' visible='true' lat='50.937341' lon='-1.3963309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613456' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9773005' lon='-1.4015255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160401143' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9153501' lon='-1.453506' />
-  <node id='24924093' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.9391093' lon='-1.3750053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071427' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9218615' lon='-1.354795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303004' timestamp='2007-01-19T18:15:19+00:00' user='Dean Earley' visible='true' lat='50.9557551' lon='-1.3586647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246352' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.9314643' lon='-1.4310519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711121' timestamp='2007-05-28T14:39:19+01:00' visible='true' lat='50.9815913' lon='-1.3609266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306288' timestamp='2006-09-02T19:02:13+01:00' user='Dean Earley' visible='true' lat='50.9219213' lon='-1.4049407' />
-  <node id='157223781' timestamp='2007-12-08T20:24:11+00:00' user='nickw' visible='true' lat='50.946255' lon='-1.4470127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25302627' timestamp='2007-01-19T18:06:00+00:00' user='Dean Earley' visible='true' lat='50.9726888' lon='-1.368236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932477' timestamp='2007-05-10T21:06:14+01:00' user='Dean Earley' visible='true' lat='50.9629252' lon='-1.4543607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728539' timestamp='2007-03-23T22:52:48+00:00' user='nickw' visible='true' lat='50.9006348' lon='-1.3667519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387812' timestamp='2007-04-05T14:20:44+01:00' user='Dean Earley' visible='true' lat='50.9282' lon='-1.39117' />
-  <node id='661188' timestamp='2007-04-05T14:20:44+01:00' user='Dean Earley' visible='true' lat='50.9138495' lon='-1.3677119' />
-  <node id='27440015' timestamp='2007-04-18T02:00:23+01:00' visible='true' lat='50.9274011' lon='-1.3818039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160377036' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9216701' lon='-1.4677454' />
-  <node id='2773037' timestamp='2007-04-03T00:52:06+01:00' user='Dean Earley' visible='true' lat='50.9237052' lon='-1.444975' />
-  <node id='206162258' timestamp='2008-01-04T19:26:30+00:00' user='nickw' visible='true' lat='50.973942' lon='-1.3866624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670266' timestamp='2007-05-27T10:45:22+01:00' visible='true' lat='50.9694133' lon='-1.3518695'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Home Tavern' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657799' timestamp='2007-04-05T14:20:44+01:00' user='Dean Earley' visible='true' lat='50.9085795' lon='-1.4084527' />
-  <node id='48965768' timestamp='2007-09-11T00:11:34+01:00' visible='true' lat='50.9020455' lon='-1.4062898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976808' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9260127' lon='-1.4213269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708033' timestamp='2007-05-28T12:04:07+01:00' visible='true' lat='50.9807111' lon='-1.3662441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724265' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.9268589' lon='-1.4148815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591410' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9161975' lon='-1.4563741' />
-  <node id='325063' timestamp='2005-12-16T22:05:51+00:00' user='80n' visible='true' lat='50.945963' lon='-1.5257418' />
-  <node id='15360183' timestamp='2007-10-31T15:08:47+00:00' user='Dean Earley' visible='true' lat='50.9512112' lon='-1.3709607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984758' timestamp='2007-01-10T00:14:06+00:00' user='nickw' visible='true' lat='50.9436017' lon='-1.3930689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689177' timestamp='2006-12-23T10:22:27+00:00' user='nickw' visible='true' lat='50.9381454' lon='-1.371565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30255974' timestamp='2007-06-12T20:14:38+01:00' visible='true' lat='50.9831865' lon='-1.3505677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632864' timestamp='2007-05-26T20:07:40+01:00' visible='true' lat='50.9670556' lon='-1.362033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706071' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8943369' lon='-1.3925954' />
-  <node id='29856364' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9468718' lon='-1.3921465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291058' timestamp='2007-06-13T09:33:01+01:00' visible='true' lat='50.9659161' lon='-1.3857991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009078' timestamp='2007-05-12T15:31:58+01:00' user='nickw' visible='true' lat='50.9298212' lon='-1.3486266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162420' timestamp='2008-01-04T19:28:06+00:00' user='nickw' visible='true' lat='50.9718716' lon='-1.3833844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816779' timestamp='2007-05-31T22:15:44+01:00' visible='true' lat='50.9872773' lon='-1.3610346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29389519' timestamp='2007-05-26T11:38:15+01:00' visible='true' lat='50.9704171' lon='-1.3550733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885351' timestamp='2007-10-26T13:10:43+01:00' user='Nick Dyer' visible='true' lat='50.9017673' lon='-1.3994161'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Anchor' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='28179436' timestamp='2007-04-29T01:53:14+01:00' user='Dean Earley' visible='true' lat='50.9638417' lon='-1.4180398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021694' timestamp='2007-04-03T00:50:22+01:00' user='Dean Earley' visible='true' lat='50.9284003' lon='-1.4454437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621237' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9470933' lon='-1.3696602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949954' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9959397' lon='-1.3867076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998072' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9850446' lon='-1.413071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908427' timestamp='2006-07-18T10:20:32+01:00' user='nickw' visible='true' lat='50.9356005' lon='-1.370857' />
-  <node id='28249817' timestamp='2007-04-29T21:41:33+01:00' visible='true' lat='50.9211806' lon='-1.4437815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997511' timestamp='2007-06-05T22:43:52+01:00' user='nickw' visible='true' lat='51.0087136' lon='-1.3602849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001701' timestamp='2007-05-12T09:53:01+01:00' user='nickw' visible='true' lat='50.9402342' lon='-1.3630832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706991' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.8701562' lon='-1.3519187' />
-  <node id='28935992' timestamp='2007-05-11T00:59:40+01:00' visible='true' lat='50.9410462' lon='-1.4437938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254737' timestamp='2005-11-15T15:42:24+00:00' user='nickw' visible='true' lat='50.9811011' lon='-1.3843235' />
-  <node id='700429' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9278355' lon='-1.3867702' />
-  <node id='20971148' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9081748' lon='-1.3953517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229551' timestamp='2007-06-12T00:14:34+01:00' user='nickw' visible='true' lat='50.9337109' lon='-1.3525433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561523' timestamp='2007-03-24T16:33:50+00:00' user='Dean Earley' visible='true' lat='50.9215751' lon='-1.42374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107335' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9332175' lon='-1.3502426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632164' timestamp='2007-05-26T19:20:07+01:00' visible='true' lat='50.9564847' lon='-1.367693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275631' timestamp='2007-06-01T16:39:04+01:00' user='Dean Earley' visible='true' lat='50.921172' lon='-1.43344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783079' timestamp='2007-02-11T18:07:11+00:00' user='nickw' visible='true' lat='50.939175' lon='-1.358106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486262' timestamp='2007-07-09T11:55:38+01:00' visible='true' lat='50.9113112' lon='-1.3815198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964146' timestamp='2006-09-08T02:12:02+01:00' user='Dean Earley' visible='true' lat='50.9180925' lon='-1.3777501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613404' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9857863' lon='-1.4292686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173920' timestamp='2007-04-29T01:03:13+01:00' visible='true' lat='50.9418456' lon='-1.4320056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601304' timestamp='2006-09-01T00:21:10+01:00' user='nickw' visible='true' lat='50.8277849' lon='-1.5454332'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25675789' timestamp='2007-02-06T01:03:02+00:00' user='Dean Earley' visible='true' lat='50.9094573' lon='-1.4506383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668333' timestamp='2007-03-24T16:33:50+00:00' user='Dean Earley' visible='true' lat='50.9819894' lon='-1.3967215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194854' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.945408' lon='-1.4099203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305610' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9903812' lon='-1.3973451' />
-  <node id='30956605' timestamp='2007-06-26T23:45:01+01:00' user='nickw' visible='true' lat='50.9294964' lon='-1.3488121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961050' timestamp='2006-11-11T17:12:38+00:00' user='Dean Earley' visible='true' lat='50.9466467' lon='-1.3654973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595190' timestamp='2006-08-04T12:02:15+01:00' user='nickw' visible='true' lat='50.9205436' lon='-1.4146494'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28173818' timestamp='2007-09-07T17:38:58+01:00' user='mike l' visible='true' lat='50.9440045' lon='-1.433972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009027' timestamp='2007-05-12T15:28:42+01:00' user='nickw' visible='true' lat='50.9304974' lon='-1.3499875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705534' timestamp='2007-05-28T11:19:21+01:00' visible='true' lat='50.9858011' lon='-1.3518495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398437' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9614427' lon='-1.4028907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704776' timestamp='2006-08-26T00:06:13+01:00' user='dmgroom' visible='true' lat='50.8886924' lon='-1.4171482' />
-  <node id='24949886' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9926886' lon='-1.3776881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997567' timestamp='2007-06-05T22:44:01+01:00' user='nickw' visible='true' lat='50.9993625' lon='-1.3538481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249994' timestamp='2007-04-29T21:42:10+01:00' visible='true' lat='50.91573' lon='-1.4442682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636936' timestamp='2007-04-03T00:52:07+01:00' user='Dean Earley' visible='true' lat='50.9089082' lon='-1.416546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325033' timestamp='2006-11-11T17:25:22+00:00' user='Dean Earley' visible='true' lat='50.9578243' lon='-1.4476131' />
-  <node id='325271' timestamp='2006-11-11T17:25:22+00:00' user='Dean Earley' visible='true' lat='50.9193454' lon='-1.3164836' />
-  <node id='21091861' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9083873' lon='-1.4246157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348733' timestamp='2006-10-16T21:59:56+01:00' user='nickw' visible='true' lat='50.9973847' lon='-1.4492079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600581' timestamp='2007-01-25T22:42:45+00:00' user='Dean Earley' visible='true' lat='50.9809109' lon='-1.4005697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254698' timestamp='2007-01-19T20:36:00+00:00' user='Dean Earley' visible='true' lat='50.919652' lon='-1.3938597' />
-  <node id='29526778' timestamp='2007-05-23T09:49:14+01:00' visible='true' lat='50.9825178' lon='-1.3492598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949941' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9952395' lon='-1.3853964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745496' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.960023' lon='-1.3926946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52569042' timestamp='2007-09-16T10:11:15+01:00' user='mike l' visible='true' lat='50.9969945' lon='-1.4308743' />
-  <node id='29860316' timestamp='2007-06-02T11:30:15+01:00' visible='true' lat='50.9205356' lon='-1.4421851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435845' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9357773' lon='-1.4331745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711861' timestamp='2007-05-28T14:55:44+01:00' visible='true' lat='50.9850164' lon='-1.3510953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388916' timestamp='2007-04-05T14:20:45+01:00' user='Dean Earley' visible='true' lat='50.946' lon='-1.40275' />
-  <node id='25639893' timestamp='2007-02-04T22:51:14+00:00' user='Dean Earley' visible='true' lat='50.8985143' lon='-1.3812355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956703' timestamp='2007-06-26T23:49:20+01:00' user='nickw' visible='true' lat='50.9297624' lon='-1.3475059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305563' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9992629' lon='-1.3942754' />
-  <node id='30290717' timestamp='2007-10-04T19:38:15+01:00' user='Gregory Williams' visible='true' lat='50.9694932' lon='-1.3830311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325010' timestamp='2006-09-02T12:59:39+01:00' user='Dean Earley' visible='true' lat='50.9577871' lon='-1.413299' />
-  <node id='29838708' timestamp='2007-06-01T20:37:01+01:00' visible='true' lat='50.9700522' lon='-1.3890705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348316' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9260727' lon='-1.358862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675861' timestamp='2007-04-05T14:20:45+01:00' user='Dean Earley' visible='true' lat='50.9256582' lon='-1.3731872' />
-  <node id='28240293' timestamp='2007-04-29T20:02:52+01:00' user='Andy Street' visible='true' lat='50.9033957' lon='-1.3549156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305587' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9965181' lon='-1.393311' />
-  <node id='331332' timestamp='2007-12-06T22:10:47+00:00' user='Dean Earley' visible='true' lat='51.003' lon='-1.36921' />
-  <node id='91110957' timestamp='2007-10-29T07:59:19+00:00' user='nickw' visible='true' lat='50.9274993' lon='-1.4378751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721070' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9715367' lon='-1.3591912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173710' timestamp='2007-05-22T00:40:28+01:00' user='Dean Earley' visible='true' lat='50.9434609' lon='-1.4344076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409621' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9127472' lon='-1.4369236' />
-  <node id='8596760' timestamp='2007-09-10T23:55:27+01:00' visible='true' lat='50.9069878' lon='-1.4095854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254689' timestamp='2007-01-19T18:15:23+00:00' user='Dean Earley' visible='true' lat='50.950705' lon='-1.3644511' />
-  <node id='13071349' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9161017' lon='-1.3645099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783106' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9487385' lon='-1.3522255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816566' timestamp='2007-05-31T22:04:29+01:00' visible='true' lat='50.9912011' lon='-1.3539252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157218260' timestamp='2007-12-08T20:20:38+00:00' user='nickw' visible='true' lat='50.9447592' lon='-1.4460181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909662' timestamp='2007-06-03T14:54:17+01:00' visible='true' lat='50.9682631' lon='-1.354473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636732' timestamp='2007-03-24T16:44:18+00:00' user='Dean Earley' visible='true' lat='50.9508392' lon='-1.4103062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331864' timestamp='2007-12-06T20:44:25+00:00' user='nickw' visible='true' lat='50.9432862' lon='-1.4440728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134142' timestamp='2007-05-15T20:47:34+01:00' user='nickw' visible='true' lat='50.9414108' lon='-1.3909055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949911' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9916132' lon='-1.3768934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998911' timestamp='2007-06-05T23:28:49+01:00' user='nickw' visible='true' lat='50.9862327' lon='-1.4386991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148739' timestamp='2008-02-03T06:07:07+00:00' user='sladen' visible='true' lat='50.9101236' lon='-1.4032556' />
-  <node id='608180' timestamp='2007-04-05T14:20:45+01:00' user='Dean Earley' visible='true' lat='50.8998768' lon='-1.3745679' />
-  <node id='20130940' timestamp='2006-10-28T01:45:34+01:00' user='Dean Earley' visible='true' lat='50.9313393' lon='-1.3587308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001338' timestamp='2007-05-12T09:40:17+01:00' user='nickw' visible='true' lat='50.9226974' lon='-1.3810401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388877' timestamp='2007-04-05T14:20:46+01:00' user='Dean Earley' visible='true' lat='50.9346' lon='-1.39664' />
-  <node id='17721080' timestamp='2006-10-06T23:27:21+01:00' user='Dean Earley' visible='true' lat='50.9699128' lon='-1.3517583'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170447' timestamp='2006-11-11T17:25:26+00:00' user='Dean Earley' visible='true' lat='50.9501606' lon='-1.3757467' />
-  <node id='25938550' timestamp='2007-02-16T09:18:09+00:00' user='nickw' visible='true' lat='50.9142367' lon='-1.3997287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817070' timestamp='2007-05-31T22:18:46+01:00' visible='true' lat='50.9855806' lon='-1.3656447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577110' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9634545' lon='-1.4253268' />
-  <node id='469881' timestamp='2007-04-05T14:20:46+01:00' user='Dean Earley' visible='true' lat='50.9167' lon='-1.44118' />
-  <node id='25783125' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9447581' lon='-1.3480534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110500' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true' lat='50.9302572' lon='-1.4320889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110786' timestamp='2006-10-27T23:38:59+01:00' user='Dean Earley' visible='true' lat='50.9350589' lon='-1.3639821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160335764' timestamp='2007-12-10T20:19:02+00:00' user='sladen' visible='true' lat='50.9464931' lon='-1.4738587' />
-  <node id='25296301' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9846957' lon='-1.3569018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640036' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9140565' lon='-1.3618753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201643747' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9477675' lon='-1.3646708' />
-  <node id='21092030' timestamp='2006-11-19T12:29:34+00:00' user='nickw' visible='true' lat='50.9724357' lon='-1.4415223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25761518' timestamp='2007-05-12T09:43:59+01:00' user='nickw' visible='true' lat='50.9367639' lon='-1.3590782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089137' timestamp='2007-06-08T18:12:10+01:00' visible='true' lat='50.9637406' lon='-1.3779443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173946' timestamp='2007-04-29T01:03:20+01:00' visible='true' lat='50.9421685' lon='-1.4352377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282122' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9781262' lon='-1.4068945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359708' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9688875' lon='-1.3511202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932447' timestamp='2007-05-10T21:06:01+01:00' user='Dean Earley' visible='true' lat='50.9629682' lon='-1.4580084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621242' timestamp='2007-05-26T11:35:31+01:00' visible='true' lat='50.9390636' lon='-1.3740202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183650' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.8996277' lon='-1.3799942' />
-  <node id='24924309' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.979503' lon='-1.3719657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903409' timestamp='2007-05-09T23:36:02+01:00' visible='true' lat='50.945708' lon='-1.3636496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169426692' timestamp='2007-12-14T21:37:42+00:00' user='nickw' visible='true' lat='50.9332952' lon='-1.4416179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179514' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9528802' lon='-1.4030824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998962' timestamp='2007-06-05T23:28:55+01:00' user='nickw' visible='true' lat='50.9873083' lon='-1.4396527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419432' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9410782' lon='-1.3686564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134123' timestamp='2007-05-22T00:20:09+01:00' user='Dean Earley' visible='true' lat='50.9386583' lon='-1.4039341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838346' timestamp='2007-06-01T20:15:02+01:00' visible='true' lat='50.9808978' lon='-1.361419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730519' timestamp='2007-05-28T19:36:49+01:00' visible='true' lat='50.9714686' lon='-1.3692107'>
-    <tag k='tourism' v='hotel' />
-    <tag k='name' v='Holiday Inn' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561544' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9232591' lon='-1.4243687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727978' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9317282' lon='-1.3848233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180211' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9623024' lon='-1.42621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254477' timestamp='2007-02-13T18:31:44+00:00' user='Dean Earley' visible='true' lat='50.9746432' lon='-1.4319063' />
-  <node id='18398392' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.9473846' lon='-1.4391477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282095' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.9764677' lon='-1.4074953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700498' timestamp='2007-04-05T14:20:46+01:00' user='Dean Earley' visible='true' lat='50.9301558' lon='-1.3732234' />
-  <node id='28250062' timestamp='2007-04-29T21:42:21+01:00' visible='true' lat='50.9153256' lon='-1.4505502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122344818' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true' lat='50.9194339' lon='-1.4370359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14707284' timestamp='2006-12-14T23:57:11+00:00' user='Dean Earley' visible='true' lat='50.9701282' lon='-1.3424521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976766' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9282918' lon='-1.4198568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773089' timestamp='2007-12-07T13:53:03+00:00' user='Nick Dyer' visible='true' lat='50.9612664' lon='-1.4270577' />
-  <node id='17721021' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9613278' lon='-1.3704447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303003' timestamp='2007-01-19T18:15:15+00:00' user='Dean Earley' visible='true' lat='50.9671411' lon='-1.3691496'>
-    <tag k='amenity' v='fuel' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404155' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9126768' lon='-1.4437986' />
-  <node id='28582996' timestamp='2007-05-02T23:57:52+01:00' visible='true' lat='50.941227' lon='-1.4307337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348695' timestamp='2006-10-16T21:59:52+01:00' user='nickw' visible='true' lat='50.9754548' lon='-1.4100638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956726' timestamp='2007-06-26T23:49:23+01:00' user='nickw' visible='true' lat='50.9272956' lon='-1.3502872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217217' timestamp='2006-09-04T01:04:13+01:00' user='Dean Earley' visible='true' lat='50.9163236' lon='-1.3589913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071422' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9239726' lon='-1.3525636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689139' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9395976' lon='-1.3846622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931325' timestamp='2007-08-16T19:35:53+01:00' user='southglos' visible='true' lat='51.0000844' lon='-1.3633973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830659' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9247719' lon='-1.3638078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582977' timestamp='2007-05-02T23:57:50+01:00' visible='true' lat='50.9390558' lon='-1.4247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402743' timestamp='2007-04-05T14:20:47+01:00' user='Dean Earley' visible='true' lat='50.9116' lon='-1.40915' />
-  <node id='28903647' timestamp='2007-05-09T23:57:40+01:00' visible='true' lat='50.9588871' lon='-1.3550429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700487' timestamp='2007-04-05T14:20:47+01:00' user='Dean Earley' visible='true' lat='50.9240308' lon='-1.372739' />
-  <node id='29816288' timestamp='2007-05-31T21:52:23+01:00' visible='true' lat='50.991296' lon='-1.3541466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342598' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9053375' lon='-1.3704306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704540' timestamp='2007-05-28T10:40:40+01:00' visible='true' lat='50.9780101' lon='-1.3607181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675772' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9127959' lon='-1.4368978' />
-  <node id='254343' timestamp='2007-04-29T01:53:39+01:00' user='Dean Earley' visible='true' lat='50.9581282' lon='-1.4249681' />
-  <node id='28345084' timestamp='2007-04-30T23:00:40+01:00' user='nickw' visible='true' lat='50.9256762' lon='-1.3581427'>
-    <tag k='name' v='WYCLIFFE R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706524' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.921082' lon='-1.378013'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28230966' timestamp='2007-04-30T22:14:06+01:00' user='nickw' visible='true' lat='50.9072965' lon='-1.3676305'>
-    <tag k='name' v='CORNEL RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259925' timestamp='2007-04-29T23:09:29+01:00' user='Andy Street' visible='true' lat='50.9015124' lon='-1.351366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924196' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.9445391' lon='-1.372368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325191' timestamp='2006-11-11T17:26:00+00:00' user='Dean Earley' visible='true' lat='50.9485318' lon='-1.3678142' />
-  <node id='702358' timestamp='2006-04-15T16:25:51+01:00' user='Gagravarr' visible='true' lat='50.9554548' lon='-1.3584213' />
-  <node id='19227218' timestamp='2006-10-23T20:52:56+01:00' user='nickw' visible='true' lat='50.9328449' lon='-1.4118554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636928' timestamp='2006-12-18T21:41:04+00:00' user='nickw' visible='true' lat='50.9089494' lon='-1.4161738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111080' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0093628' lon='-1.3947528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781151' timestamp='2007-03-25T18:42:10+01:00' user='Dean Earley' visible='true' lat='50.9009674' lon='-1.3725864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275708' timestamp='2007-04-03T00:52:07+01:00' user='Dean Earley' visible='true' lat='50.9228064' lon='-1.4339925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243948' timestamp='2007-04-29T20:34:36+01:00' user='Andy Street' visible='true' lat='50.9057071' lon='-1.3445665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254394' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9226683' lon='-1.361406' />
-  <node id='24668122' timestamp='2007-01-04T21:05:45+00:00' user='nickw' visible='true' lat='50.9862894' lon='-1.3932077'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509907' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9871042' lon='-1.3575095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254887' timestamp='2006-09-03T00:38:50+01:00' user='Dean Earley' visible='true' lat='50.9262828' lon='-1.4378483' />
-  <node id='30956635' timestamp='2007-06-26T23:45:06+01:00' user='nickw' visible='true' lat='50.9326579' lon='-1.3523385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727690' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9086261' lon='-1.346269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903733' timestamp='2007-05-10T00:36:34+01:00' visible='true' lat='50.9341319' lon='-1.3741149'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071332' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9199728' lon='-1.3612692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217894' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9251357' lon='-1.3629817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718244' timestamp='2007-08-08T01:28:51+01:00' visible='true' lat='50.9337627' lon='-1.4450135' />
-  <node id='59766922' timestamp='2007-09-25T17:50:06+01:00' user='mike l' visible='true' lat='50.9403854' lon='-1.3884838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831095' timestamp='2007-01-19T19:03:48+00:00' user='Dean Earley' visible='true' lat='50.9133966' lon='-1.4077124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984782' timestamp='2007-01-10T00:15:02+00:00' user='nickw' visible='true' lat='50.943603' lon='-1.3858091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325168' timestamp='2005-12-16T22:54:04+00:00' user='80n' visible='true' lat='50.952289' lon='-1.4030048' />
-  <node id='29632141' timestamp='2007-05-26T19:19:54+01:00' visible='true' lat='50.9572366' lon='-1.3665788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874068' timestamp='2007-10-12T14:12:03+01:00' user='SteveC' visible='true' lat='50.9374535' lon='-1.4373204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160237670' timestamp='2007-12-10T19:21:49+00:00' user='sladen' visible='true' lat='50.9066102' lon='-1.4022158' />
-  <node id='29871555' timestamp='2007-06-02T18:40:00+01:00' visible='true' lat='50.9153154' lon='-1.3520295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133083' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.93225' lon='-1.3730783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896261' timestamp='2007-10-16T17:59:42+01:00' user='Dean Earley' visible='true' lat='50.968826' lon='-1.3905657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600504' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9182423' lon='-1.4347288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935745' timestamp='2007-05-11T00:50:40+01:00' visible='true' lat='50.9401687' lon='-1.4463946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462613' timestamp='2007-05-21T23:56:39+01:00' user='nickw' visible='true' lat='50.9041733' lon='-1.3976541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945407' timestamp='2007-03-31T20:34:37+01:00' user='nickw' visible='true' lat='50.9005322' lon='-1.3503854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30511424' timestamp='2007-06-17T22:30:27+01:00' visible='true' lat='50.9751641' lon='-1.3569877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464256' timestamp='2007-05-22T00:19:13+01:00' user='Dean Earley' visible='true' lat='50.9367232' lon='-1.4088548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117381' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9297313' lon='-1.4450569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957207' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.918656' lon='-1.4233658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659234' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9028942' lon='-1.4062492' />
-  <node id='28342611' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9112128' lon='-1.3639739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108690' timestamp='2007-10-29T07:48:42+00:00' user='nickw' visible='true' lat='50.9315844' lon='-1.421331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232132' timestamp='2006-10-14T13:21:27+01:00' user='nickw' visible='true' lat='50.9140939' lon='-1.4008454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000489' timestamp='2007-05-12T09:26:08+01:00' user='nickw' visible='true' lat='50.9190906' lon='-1.4126283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179507' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9540987' lon='-1.401982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926267' timestamp='2007-06-03T20:57:36+01:00' visible='true' lat='50.9794057' lon='-1.3660055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583058' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9380655' lon='-1.43205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706090' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8985919' lon='-1.3865959'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='18398418' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9772222' lon='-1.4094535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706640' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9150683' lon='-1.3787454'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='31486275' timestamp='2007-07-09T11:55:39+01:00' visible='true' lat='50.9102729' lon='-1.377988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856372' timestamp='2007-06-02T08:31:29+01:00' user='nickw' visible='true' lat='50.9472599' lon='-1.3916995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179445' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9613376' lon='-1.4217945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153334845' timestamp='2007-12-06T20:46:07+00:00' user='nickw' visible='true' lat='50.9439215' lon='-1.4496305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194370' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9447003' lon='-1.4382505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28257902' timestamp='2007-04-29T22:56:49+01:00' user='Andy Street' visible='true' lat='50.9020755' lon='-1.3542614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911800' timestamp='2007-06-03T15:31:37+01:00' visible='true' lat='50.9870448' lon='-1.3537478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816753' timestamp='2007-05-31T22:13:36+01:00' visible='true' lat='50.9899827' lon='-1.3563525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998937' timestamp='2007-06-05T23:28:52+01:00' user='nickw' visible='true' lat='50.9842817' lon='-1.4357986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815639' timestamp='2007-05-31T21:47:56+01:00' visible='true' lat='50.9896195' lon='-1.3579971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600598' timestamp='2007-09-24T20:31:07+01:00' user='mike l' visible='true' lat='50.9925536' lon='-1.4040859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632162' timestamp='2007-05-26T19:20:05+01:00' visible='true' lat='50.9569108' lon='-1.3678124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815417' timestamp='2007-05-31T21:34:33+01:00' visible='true' lat='50.9875741' lon='-1.3531912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325641' timestamp='2007-04-05T14:20:48+01:00' user='Dean Earley' visible='true' lat='50.9202656' lon='-1.4028281' />
-  <node id='11419589' timestamp='2006-07-24T21:02:32+01:00' user='nickw' visible='true' lat='50.9193026' lon='-1.432355' />
-  <node id='29132669' timestamp='2007-05-15T20:24:19+01:00' user='nickw' visible='true' lat='50.9272795' lon='-1.3785674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254326' timestamp='2005-11-15T15:38:59+00:00' user='nickw' visible='true' lat='50.9561027' lon='-1.4460537' />
-  <node id='13564836' timestamp='2006-10-27T22:27:57+01:00' user='Dean Earley' visible='true' lat='50.9350965' lon='-1.3531401'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28243620' timestamp='2007-04-29T20:25:01+01:00' user='Dean Earley' visible='true' lat='50.9386693' lon='-1.4178024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486292' timestamp='2007-07-09T11:55:41+01:00' visible='true' lat='50.9114286' lon='-1.3836766'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705675' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8941833' lon='-1.4066674' />
-  <node id='29926527' timestamp='2007-06-03T20:59:02+01:00' visible='true' lat='50.9805531' lon='-1.3663513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871543' timestamp='2007-06-02T18:39:09+01:00' visible='true' lat='50.9155789' lon='-1.3540823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134832' timestamp='2007-05-15T20:53:15+01:00' user='nickw' visible='true' lat='50.9447061' lon='-1.3827352'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160225519' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9026374' lon='-1.3921736' />
-  <node id='24924339' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9752501' lon='-1.3987064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87819948' timestamp='2007-10-26T12:11:53+01:00' user='Nick Dyer' visible='true' lat='50.9109956' lon='-1.4431884' />
-  <node id='28243714' timestamp='2007-04-29T20:25:22+01:00' user='Dean Earley' visible='true' lat='50.9386341' lon='-1.4103449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924102' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.9420524' lon='-1.374295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223082' timestamp='2007-06-11T21:51:51+01:00' visible='true' lat='50.9840115' lon='-1.3551763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931240' timestamp='2007-04-05T14:20:48+01:00' user='Dean Earley' visible='true' lat='50.9218011' lon='-1.3924241' />
-  <node id='388911' timestamp='2007-04-05T14:20:48+01:00' user='Dean Earley' visible='true' lat='50.9444' lon='-1.40252' />
-  <node id='29704461' timestamp='2007-05-28T10:36:48+01:00' visible='true' lat='50.9812974' lon='-1.3560062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743179' timestamp='2006-11-12T22:57:31+00:00' user='Dean Earley' visible='true' lat='50.9084322' lon='-1.412904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896248' timestamp='2007-10-16T17:59:41+01:00' user='Dean Earley' visible='true' lat='50.9597814' lon='-1.3978857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932473' timestamp='2007-05-10T21:06:13+01:00' user='Dean Earley' visible='true' lat='50.9640249' lon='-1.4622185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931355' timestamp='2007-06-03T22:43:05+01:00' visible='true' lat='50.9941378' lon='-1.3736897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544324' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9273808' lon='-1.3892847' />
-  <node id='29133068' timestamp='2007-05-15T20:36:50+01:00' user='nickw' visible='true' lat='50.9334087' lon='-1.3751652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169409519' timestamp='2007-12-14T21:27:51+00:00' user='nickw' visible='true' lat='50.9279204' lon='-1.4386677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008366' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9267565' lon='-1.3517506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931363' timestamp='2007-06-03T22:43:06+01:00' visible='true' lat='50.9949437' lon='-1.3731718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471842' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.9381223' lon='-1.3683758'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474652' timestamp='2007-04-05T14:20:49+01:00' user='Dean Earley' visible='true' lat='50.9336332' lon='-1.3520806' />
-  <node id='13706471' timestamp='2007-04-05T14:20:49+01:00' user='Dean Earley' visible='true' lat='50.9314897' lon='-1.379525' />
-  <node id='271129' timestamp='2006-06-03T23:38:57+01:00' user='Dean Earley' visible='true' lat='50.9378' lon='-1.39655'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Stile' />
-  </node>
-  <node id='28252977' timestamp='2007-04-29T22:00:42+01:00' visible='true' lat='50.9431323' lon='-1.4275864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115802' timestamp='2007-10-29T08:07:47+00:00' user='nickw' visible='true' lat='50.927709' lon='-1.4430007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613434' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.976878' lon='-1.4022848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636544' timestamp='2006-12-18T20:55:37+00:00' visible='true' lat='50.9284172' lon='-1.3874484'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28418537' timestamp='2007-05-02T00:35:24+01:00' visible='true' lat='50.9618184' lon='-1.3717158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383146' timestamp='2007-04-05T14:20:49+01:00' user='Dean Earley' visible='true' lat='50.9221' lon='-1.40591' />
-  <node id='26447506' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9095468' lon='-1.3888237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549356' timestamp='2007-05-24T11:22:48+01:00' visible='true' lat='50.9706597' lon='-1.3713079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504762' timestamp='2007-06-17T21:50:35+01:00' visible='true' lat='50.9812357' lon='-1.3576293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90582766' timestamp='2007-10-28T20:25:32+00:00' user='Nick Dyer' visible='true' lat='50.9240973' lon='-1.4440574' />
-  <node id='307475' timestamp='2007-04-05T14:20:49+01:00' user='Dean Earley' visible='true' lat='50.9268' lon='-1.40109' />
-  <node id='24949894' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9954646' lon='-1.3749465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964739' timestamp='2006-12-18T23:27:23+00:00' visible='true' lat='50.9398728' lon='-1.3778488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249799' timestamp='2007-04-29T21:41:31+01:00' visible='true' lat='50.9192894' lon='-1.4464368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372750' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9291871' lon='-1.4396631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575771' timestamp='2007-03-25T19:25:22+01:00' user='Dean Earley' visible='true' lat='50.901058' lon='-1.3941302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9727810' timestamp='2007-11-11T18:09:50+00:00' user='Dean Earley' visible='true' lat='50.9156427' lon='-1.3604004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179524' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9563135' lon='-1.4007871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949813' timestamp='2007-01-31T02:05:55+00:00' user='Dean Earley' visible='true' lat='50.9927943' lon='-1.3852483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507758' timestamp='2007-04-03T00:53:54+01:00' user='Ben' visible='true' lat='50.9393656' lon='-1.4001219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632800' timestamp='2007-05-26T20:05:11+01:00' visible='true' lat='50.9598241' lon='-1.3699872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816396' timestamp='2007-05-31T21:56:26+01:00' visible='true' lat='50.9886389' lon='-1.3550998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980703' timestamp='2008-01-29T12:06:37+00:00' user='Dean Earley' visible='true' lat='50.965342' lon='-1.3506492' />
-  <node id='90581820' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9159973' lon='-1.449087' />
-  <node id='21689055' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.9386828' lon='-1.3793283'>
-    <tag k='name' v='FLEMING' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246067' timestamp='2007-10-16T17:47:53+01:00' user='Dean Earley' visible='true' lat='50.9390815' lon='-1.4268072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998125' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.9886089' lon='-1.4004357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160221502' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9144845' lon='-1.3907145' />
-  <node id='700472' timestamp='2007-11-11T18:09:46+00:00' user='Dean Earley' visible='true' lat='50.9250926' lon='-1.3878578' />
-  <node id='254420' timestamp='2006-08-11T02:52:52+01:00' user='Dean Earley' visible='true' lat='50.9225703' lon='-1.3685396' />
-  <node id='14726561' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.912355' lon='-1.4006441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254533' timestamp='2006-09-02T18:32:40+01:00' user='Dean Earley' visible='true' lat='50.9135455' lon='-1.4006171' />
-  <node id='30096954' timestamp='2007-06-08T23:24:14+01:00' visible='true' lat='50.9654066' lon='-1.3757567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87873166' timestamp='2007-10-29T08:27:44+00:00' user='nickw' visible='true' lat='50.9266131' lon='-1.4166218'>
-    <tag k='amenity' v='college' />
-    <tag k='name' v='Taunton's College' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='29008449' timestamp='2007-05-12T15:12:16+01:00' user='nickw' visible='true' lat='50.927127' lon='-1.3502482'>
-    <tag k='name' v='MONNOW GDN' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008777' timestamp='2007-05-12T15:20:36+01:00' user='nickw' visible='true' lat='50.926985' lon='-1.3484478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27239003' timestamp='2007-04-09T15:39:36+01:00' user='avantman42' visible='true' lat='50.917502' lon='-1.4458633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639965' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.8998968' lon='-1.3784509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241421' timestamp='2007-12-08T20:35:41+00:00' user='nickw' visible='true' lat='50.9464018' lon='-1.4491758'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347757' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9294035' lon='-1.3614049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160410643' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9114051' lon='-1.4288211' />
-  <node id='254674' timestamp='2007-02-04T22:51:53+00:00' user='Dean Earley' visible='true' lat='50.9176283' lon='-1.3751829' />
-  <node id='29595190' timestamp='2007-05-25T21:54:30+01:00' visible='true' lat='50.9673993' lon='-1.352179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724256' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9234699' lon='-1.4132856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232540' timestamp='2007-04-30T21:49:15+01:00' user='nickw' visible='true' lat='50.9144298' lon='-1.3582799'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Red Lion' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25635426' timestamp='2007-02-04T18:26:16+00:00' user='Dean Earley' visible='true' lat='50.9604539' lon='-1.3609698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724242' timestamp='2006-10-07T00:25:16+01:00' user='nickw' visible='true' lat='50.912209' lon='-1.4105242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903828' timestamp='2007-05-10T01:06:22+01:00' user='LivingWithDragons' visible='true' lat='50.9804249' lon='-1.4435435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561804' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9214888' lon='-1.4394244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743126' timestamp='2007-04-03T00:52:08+01:00' user='Dean Earley' visible='true' lat='50.9159059' lon='-1.4251576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422989' timestamp='2007-04-05T14:20:49+01:00' user='Dean Earley' visible='true' lat='50.946' lon='-1.40082' />
-  <node id='25471859' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9393084' lon='-1.3665033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249978' timestamp='2007-04-29T21:42:08+01:00' visible='true' lat='50.9157942' lon='-1.4477211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591295' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9189186' lon='-1.4119697'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='15740478' timestamp='2007-08-16T19:35:52+01:00' user='southglos' visible='true' lat='50.9904384' lon='-1.3475318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889416' timestamp='2007-09-23T16:33:10+01:00' user='mike l' visible='true' lat='50.9393473' lon='-1.3659507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706856' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8823303' lon='-1.3674621'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29998108' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.9855324' lon='-1.3932042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111711' timestamp='2007-10-29T08:01:16+00:00' user='nickw' visible='true' lat='50.9274602' lon='-1.4378776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990886' timestamp='2007-10-04T19:45:39+01:00' user='Gregory Williams' visible='true' lat='51.0003546' lon='-1.3527941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931340' timestamp='2007-06-03T22:43:02+01:00' visible='true' lat='50.9944235' lon='-1.3725517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008942' timestamp='2007-05-12T15:26:03+01:00' user='nickw' visible='true' lat='50.9312017' lon='-1.349764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243981301' timestamp='2008-01-29T12:06:35+00:00' user='Dean Earley' visible='true' lat='50.9614322' lon='-1.3523524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269153' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='51.0011958' lon='-1.3341147' />
-  <node id='306292' timestamp='2005-12-11T21:46:56+00:00' user='nickw' visible='true' lat='50.9222317' lon='-1.4031816' />
-  <node id='245147658' timestamp='2008-02-03T06:03:10+00:00' user='sladen' visible='true' lat='50.909642' lon='-1.4060366' />
-  <node id='122324324' timestamp='2007-11-18T19:05:24+00:00' user='nickw' visible='true' lat='50.9145648' lon='-1.4373687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179497' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9531553' lon='-1.4038262'>
-    <tag k='amenity' v='fuel' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464271' timestamp='2007-05-22T00:19:16+01:00' user='Dean Earley' visible='true' lat='50.9386173' lon='-1.4027117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419555' timestamp='2006-09-03T00:38:50+01:00' user='Dean Earley' visible='true' lat='50.924293' lon='-1.4261909' />
-  <node id='388926' timestamp='2007-05-15T20:47:44+01:00' user='nickw' visible='true' lat='50.9433125' lon='-1.39419' />
-  <node id='21141422' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9313064' lon='-1.4272005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114382' timestamp='2007-02-23T21:46:22+00:00' user='nickw' visible='true' lat='50.9053062' lon='-1.3923195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984709' timestamp='2007-01-10T00:11:52+00:00' user='nickw' visible='true' lat='50.9446595' lon='-1.3812482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66587709' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9311194' lon='-1.4485299' />
-  <node id='160244231' timestamp='2007-12-10T19:25:22+00:00' user='sladen' visible='true' lat='50.9113783' lon='-1.4333981' />
-  <node id='254746' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.9628986' lon='-1.3942568' />
-  <node id='28341753' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9140186' lon='-1.3520141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160406180' timestamp='2007-12-10T20:56:44+00:00' user='sladen' visible='true' lat='50.9114592' lon='-1.4320226' />
-  <node id='298294' timestamp='2006-09-02T12:59:40+01:00' user='Dean Earley' visible='true' lat='50.9517113' lon='-1.3992758' />
-  <node id='28932458' timestamp='2007-05-10T21:06:05+01:00' user='Dean Earley' visible='true' lat='50.963457' lon='-1.4519155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17769057' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.910166' lon='-1.3919161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728552' timestamp='2007-03-23T22:52:58+00:00' user='nickw' visible='true' lat='50.8990996' lon='-1.3694286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160232032' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9077306' lon='-1.39268' />
-  <node id='24924059' timestamp='2007-01-06T14:28:45+00:00' user='Dean Earley' visible='true' lat='50.9966014' lon='-1.3578416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895695' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9634667' lon='-1.4101549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348141' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.933523' lon='-1.3646432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141494' timestamp='2006-11-21T23:20:00+00:00' user='nickw' visible='true' lat='50.9302576' lon='-1.4341824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254486' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9576275' lon='-1.4045168' />
-  <node id='658448' timestamp='2007-04-05T14:20:50+01:00' user='Dean Earley' visible='true' lat='50.9218516' lon='-1.3991367' />
-  <node id='325248' timestamp='2006-11-11T17:26:17+00:00' user='Dean Earley' visible='true' lat='50.9295858' lon='-1.3185751' />
-  <node id='15360196' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9582572' lon='-1.3716021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984739' timestamp='2007-01-10T00:13:56+00:00' user='nickw' visible='true' lat='50.9478138' lon='-1.3968933'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928528' timestamp='2007-06-03T21:49:36+01:00' visible='true' lat='50.9848132' lon='-1.3628584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419454' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9407954' lon='-1.3709775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324338' timestamp='2007-01-28T00:55:28+00:00' visible='true' lat='50.9228969' lon='-1.3991046' />
-  <node id='29925687' timestamp='2007-06-03T20:46:00+01:00' visible='true' lat='50.9805244' lon='-1.3628428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583084' timestamp='2007-05-02T23:57:59+01:00' visible='true' lat='50.9358221' lon='-1.4345871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764415' timestamp='2007-02-16T20:51:28+00:00' user='nickw' visible='true' lat='50.908471' lon='-1.3931926' />
-  <node id='28903858' timestamp='2007-10-16T11:34:25+01:00' user='Dean Earley' visible='true' lat='50.9497928' lon='-1.3641531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091833' timestamp='2006-11-19T12:09:11+00:00' user='nickw' visible='true' lat='50.9133875' lon='-1.423016'>
-    <tag k='name' v='LISBON' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418251' timestamp='2007-05-02T00:31:21+01:00' visible='true' lat='50.968381' lon='-1.3625858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600671' timestamp='2006-12-16T11:37:24+00:00' user='David Currie' visible='true' lat='50.9741101' lon='-1.4012335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575781' timestamp='2007-03-16T21:52:30+00:00' user='nickw' visible='true' lat='50.9003151' lon='-1.3987568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254857' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9149713' lon='-1.4525619' />
-  <node id='28388963' timestamp='2007-05-02T00:35:41+01:00' visible='true' lat='50.9642048' lon='-1.3625712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727699' timestamp='2007-04-29T19:42:18+01:00' user='Andy Street' visible='true' lat='50.9077102' lon='-1.3474223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997524' timestamp='2007-06-05T22:43:54+01:00' user='nickw' visible='true' lat='51.0095136' lon='-1.3581393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931389' timestamp='2007-06-03T22:43:10+01:00' visible='true' lat='50.9943259' lon='-1.3735805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222218' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9135484' lon='-1.490218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632431' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true' lat='50.9592023' lon='-1.3678444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29506474' timestamp='2007-05-22T19:46:56+01:00' visible='true' lat='50.9874033' lon='-1.3512008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29765435' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.998431' lon='-1.3516271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4942325' timestamp='2006-05-21T10:15:31+01:00' user='nickw' visible='true' lat='50.9220511' lon='-1.3834866' />
-  <node id='25640017' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9106198' lon='-1.3700266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249867' timestamp='2007-04-29T21:41:41+01:00' visible='true' lat='50.918277' lon='-1.4396934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431976' timestamp='2007-06-16T16:26:03+01:00' visible='true' lat='50.9740282' lon='-1.3495423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28848620' timestamp='2007-05-07T20:39:23+01:00' user='nickw' visible='true' lat='50.9207565' lon='-1.4109288'>
-    <tag k='name' v='ASHRDG CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953374' timestamp='2007-06-04T21:17:00+01:00' visible='true' lat='51.0033713' lon='-1.3820486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816723' timestamp='2007-05-31T22:13:27+01:00' visible='true' lat='50.9899663' lon='-1.3567285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964853' timestamp='2006-12-16T17:47:21+00:00' user='David Currie' visible='true' lat='51.0032285' lon='-1.4345476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325040' timestamp='2006-11-11T17:26:27+00:00' user='Dean Earley' visible='true' lat='50.9558915' lon='-1.4538988' />
-  <node id='50797917' timestamp='2007-09-13T21:06:07+01:00' user='mike l' visible='true' lat='50.9722708' lon='-1.4513246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259922' timestamp='2007-04-29T23:09:28+01:00' user='Andy Street' visible='true' lat='50.9020489' lon='-1.3501411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548714' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.9667257' lon='-1.3658056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380431' timestamp='2007-05-20T10:19:28+01:00' user='nickw' visible='true' lat='50.9445267' lon='-1.3768264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816592' timestamp='2007-05-31T22:07:48+01:00' visible='true' lat='50.9900973' lon='-1.3555465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29706911' timestamp='2007-05-28T11:38:42+01:00' visible='true' lat='50.975781' lon='-1.3531211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705775' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8902369' lon='-1.4007825' />
-  <node id='28252928' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9458447' lon='-1.4258242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162093' timestamp='2008-01-04T19:29:42+00:00' user='nickw' visible='true' lat='50.9709521' lon='-1.3800567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722357' timestamp='2006-10-06T23:46:14+01:00' user='Dean Earley' visible='true' lat='50.9546395' lon='-1.3734836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001469' timestamp='2007-05-12T09:49:22+01:00' user='nickw' visible='true' lat='50.9427504' lon='-1.350001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657772' timestamp='2007-04-05T14:20:50+01:00' user='Dean Earley' visible='true' lat='50.9022054' lon='-1.3649814' />
-  <node id='13706655' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.909489' lon='-1.373754'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13706935' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8754942' lon='-1.3581065'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21141405' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9268046' lon='-1.4242372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947176' timestamp='2007-02-16T20:51:24+00:00' user='nickw' visible='true' lat='50.9125558' lon='-1.3926356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90497491' timestamp='2007-10-28T19:06:23+00:00' user='Nick Dyer' visible='true' lat='50.9913617' lon='-1.489049' />
-  <node id='30580570' timestamp='2007-06-18T21:09:14+01:00' visible='true' lat='50.9702503' lon='-1.3532703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266203' timestamp='2007-01-28T00:07:22+00:00' visible='true' lat='50.9241821' lon='-1.387364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871071' timestamp='2007-06-02T18:20:21+01:00' visible='true' lat='50.9349038' lon='-1.4367054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242659' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.910783' lon='-1.4322823' />
-  <node id='30227013' timestamp='2007-06-11T22:35:17+01:00' visible='true' lat='50.9822138' lon='-1.3548728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976800' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9268142' lon='-1.4231348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117329' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.931885' lon='-1.4447192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194355' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9441775' lon='-1.4380414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563352' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.929914' lon='-1.3979394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388892' timestamp='2007-05-15T20:47:45+01:00' user='nickw' visible='true' lat='50.9429935' lon='-1.3916181' />
-  <node id='28384695' timestamp='2007-06-02T19:55:03+01:00' visible='true' lat='50.9689778' lon='-1.361598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021782' timestamp='2007-04-03T00:52:49+01:00' user='Ben' visible='true' lat='50.9551789' lon='-1.3996699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224279' timestamp='2007-06-11T22:06:25+01:00' visible='true' lat='50.9827682' lon='-1.3552587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147534' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9099559' lon='-1.4041397' />
-  <node id='29463015' timestamp='2007-05-22T00:01:31+01:00' user='nickw' visible='true' lat='50.9108193' lon='-1.4026383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114365' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9051056' lon='-1.3939761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469843' timestamp='2007-04-05T14:20:50+01:00' user='Dean Earley' visible='true' lat='50.922726' lon='-1.3451277' />
-  <node id='254563' timestamp='2007-11-20T11:16:06+00:00' user='Gregory Williams' visible='true' lat='50.9059281' lon='-1.3891481'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='20107326' timestamp='2006-10-27T22:49:23+01:00' user='Dean Earley' visible='true' lat='50.9355678' lon='-1.3522332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008398' timestamp='2007-05-12T15:11:58+01:00' user='nickw' visible='true' lat='50.9262556' lon='-1.3489097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544315' timestamp='2007-04-05T14:20:50+01:00' user='Dean Earley' visible='true' lat='50.9246' lon='-1.39651' />
-  <node id='20976687' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9308315' lon='-1.4303728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518812' timestamp='2007-04-05T14:20:50+01:00' user='Dean Earley' visible='true' lat='50.9331' lon='-1.38868' />
-  <node id='29463043' timestamp='2007-05-22T00:01:34+01:00' user='nickw' visible='true' lat='50.9093139' lon='-1.4086474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966370' timestamp='2007-01-28T00:06:56+00:00' visible='true' lat='50.9173361' lon='-1.3720916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668307' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9878773' lon='-1.400444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252958' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.9441287' lon='-1.4307416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232567' timestamp='2007-04-29T18:59:31+01:00' user='nickw' visible='true' lat='50.9164982' lon='-1.3566269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931378' timestamp='2007-06-03T22:43:08+01:00' visible='true' lat='50.9939683' lon='-1.3729326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282152' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9753175' lon='-1.4085842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561557' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9223905' lon='-1.4312195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704900' timestamp='2006-08-25T22:23:17+01:00' user='dmgroom' visible='true' lat='50.901537' lon='-1.447004' />
-  <node id='29026783' timestamp='2007-05-13T10:10:56+01:00' user='nickw' visible='true' lat='50.9176338' lon='-1.4080855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924087' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9387525' lon='-1.3735252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632813' timestamp='2007-05-26T20:06:32+01:00' visible='true' lat='50.96252' lon='-1.3672352'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967603' timestamp='2006-11-12T20:47:02+00:00' user='Dean Earley' visible='true' lat='50.9187518' lon='-1.3927511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243555' timestamp='2007-04-29T20:24:33+01:00' user='Dean Earley' visible='true' lat='50.9349397' lon='-1.4176391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657723' timestamp='2007-04-05T14:20:51+01:00' user='Dean Earley' visible='true' lat='50.9015332' lon='-1.3528314' />
-  <node id='700379' timestamp='2007-04-05T14:20:51+01:00' user='Dean Earley' visible='true' lat='50.922187' lon='-1.3931609' />
-  <node id='254275' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9609007' lon='-1.3364852' />
-  <node id='30226208' timestamp='2007-06-11T22:20:38+01:00' visible='true' lat='50.983214' lon='-1.3524374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331320' timestamp='2006-11-11T21:24:42+00:00' user='Dean Earley' visible='true' lat='51.0008' lon='-1.3561' />
-  <node id='125571490' timestamp='2007-12-07T13:24:19+00:00' user='Nick Dyer' visible='true' lat='50.9627855' lon='-1.4254527' />
-  <node id='27021724' timestamp='2007-04-03T00:51:00+01:00' user='Dean Earley' visible='true' lat='50.9242094' lon='-1.4358736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577044' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.899398' lon='-1.4111928' />
-  <node id='19228113' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9507942' lon='-1.4287288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998351' timestamp='2007-06-05T23:05:25+01:00' user='nickw' visible='true' lat='50.9794163' lon='-1.4304147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243671' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9389646' lon='-1.4146818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282137' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9760544' lon='-1.4064607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930464' timestamp='2007-06-03T22:22:08+01:00' visible='true' lat='50.9945104' lon='-1.3528851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149856' timestamp='2008-02-03T06:12:31+00:00' user='sladen' visible='true' lat='50.9078235' lon='-1.4023372' />
-  <node id='474848' timestamp='2007-04-05T14:20:51+01:00' user='Dean Earley' visible='true' lat='50.9376285' lon='-1.3609149' />
-  <node id='301592' timestamp='2005-12-08T22:43:50+00:00' user='nickw' visible='true' lat='50.9274244' lon='-1.4046407' />
-  <node id='305223' timestamp='2006-10-06T23:52:03+01:00' user='Dean Earley' visible='true' lat='50.9953852' lon='-1.3590721' />
-  <node id='25640002' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9104217' lon='-1.3709247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114349' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9020853' lon='-1.3926714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745451' timestamp='2006-09-03T01:40:44+01:00' user='Dean Earley' visible='true' lat='50.9696292' lon='-1.3364627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071204' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9246914' lon='-1.3659443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339148' timestamp='2007-04-30T20:39:29+01:00' visible='true' lat='50.9674833' lon='-1.3610108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816395' timestamp='2007-05-31T21:56:26+01:00' visible='true' lat='50.988614' lon='-1.355128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564649' timestamp='2006-10-27T22:27:57+01:00' user='Dean Earley' visible='true' lat='50.9303127' lon='-1.3586869'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25783102' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9472866' lon='-1.3525831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830633' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9268381' lon='-1.3612648'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615431' timestamp='2006-12-16T21:52:54+00:00' user='nickw' visible='true' lat='50.909831' lon='-1.4163682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209208' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9442194' lon='-1.4490999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671358' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9168693' lon='-1.4374521' />
-  <node id='91117344' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.930877' lon='-1.4452357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636766' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9472466' lon='-1.4023348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762095' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9459169' lon='-1.3463454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956741' timestamp='2007-06-26T23:49:25+01:00' user='nickw' visible='true' lat='50.9281972' lon='-1.3509031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874081' timestamp='2007-12-06T20:41:53+00:00' user='nickw' visible='true' lat='50.9377228' lon='-1.4401601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648590' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9541209' lon='-1.3585854' />
-  <node id='10216410' timestamp='2006-07-09T22:24:18+01:00' user='Dean Earley' visible='true' lat='50.9207594' lon='-1.3564437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639983' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9011872' lon='-1.3794997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9727806' timestamp='2007-04-20T23:53:17+01:00' user='Dean Earley' visible='true' lat='50.914854' lon='-1.3568814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392594' timestamp='2007-05-20T18:06:40+01:00' visible='true' lat='50.9685957' lon='-1.3533714'>
-    <tag k='amenity' v='post_office' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28223264' timestamp='2007-04-29T17:07:41+01:00' visible='true' lat='50.9668472' lon='-1.3587578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706614' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9164919' lon='-1.3873543'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29008450' timestamp='2007-05-12T15:12:16+01:00' user='nickw' visible='true' lat='50.930005' lon='-1.3506181'>
-    <tag k='name' v='OKEMENT CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194903' timestamp='2007-11-19T13:55:00+00:00' user='nickw' visible='true' lat='50.9421759' lon='-1.4152821'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='10908461' timestamp='2006-07-18T10:20:55+01:00' user='nickw' visible='true' lat='50.9366162' lon='-1.365857' />
-  <node id='30161364' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9738265' lon='-1.3615235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124198' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9233381' lon='-1.3503726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178437' timestamp='2007-01-31T01:07:54+00:00' user='Dean Earley' visible='true' lat='50.9955688' lon='-1.3562636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507771' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9403892' lon='-1.3918577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319646' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9215665' lon='-1.4012074' />
-  <node id='29707327' timestamp='2007-05-31T21:17:11+01:00' visible='true' lat='50.9873851' lon='-1.3577103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965515' timestamp='2007-09-07T16:44:34+01:00' user='mike l' visible='true' lat='50.9777439' lon='-1.4487245'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998543' timestamp='2007-06-05T23:13:23+01:00' user='nickw' visible='true' lat='50.9640538' lon='-1.4300173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282110' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.977202' lon='-1.4072232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249990' timestamp='2007-04-29T21:42:09+01:00' visible='true' lat='50.9170238' lon='-1.4475997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889429' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9476891' lon='-1.3659222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160269151' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9732752' lon='-1.3511723' />
-  <node id='21689136' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9396727' lon='-1.3865098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814619' timestamp='2007-05-31T21:23:00+01:00' visible='true' lat='50.9891752' lon='-1.3567821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469860' timestamp='2007-04-05T14:20:51+01:00' user='Dean Earley' visible='true' lat='50.9111' lon='-1.42269' />
-  <node id='26781166' timestamp='2007-03-25T18:42:13+01:00' user='Dean Earley' visible='true' lat='50.9021326' lon='-1.374698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464286' timestamp='2007-05-22T00:19:20+01:00' user='Dean Earley' visible='true' lat='50.9379586' lon='-1.4039652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111069' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9977813' lon='-1.3918878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431961' timestamp='2007-06-16T16:25:56+01:00' visible='true' lat='50.9849293' lon='-1.3514951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998569' timestamp='2007-06-05T23:13:27+01:00' user='nickw' visible='true' lat='50.9606003' lon='-1.4370104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418528' timestamp='2007-05-02T00:35:23+01:00' visible='true' lat='50.9675684' lon='-1.3644122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817634' timestamp='2007-05-31T22:21:09+01:00' visible='true' lat='50.9870608' lon='-1.3647649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021763' timestamp='2007-04-03T00:52:41+01:00' user='Ben' visible='true' lat='50.9402726' lon='-1.3788764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724241' timestamp='2007-02-18T21:30:54+00:00' visible='true' lat='50.9144684' lon='-1.4108649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963781' timestamp='2007-04-29T08:58:15+01:00' user='Dean Earley' visible='true' lat='50.9437399' lon='-1.4126432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583030' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.940003' lon='-1.4349346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254965' timestamp='2006-09-02T13:46:28+01:00' user='Dean Earley' visible='true' lat='50.9428991' lon='-1.4180675' />
-  <node id='18348706' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9810493' lon='-1.4203923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999048' timestamp='2007-06-05T23:29:04+01:00' user='nickw' visible='true' lat='50.9984623' lon='-1.4304743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464297' timestamp='2007-05-22T00:19:22+01:00' user='Dean Earley' visible='true' lat='50.9473557' lon='-1.4047708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154770517' timestamp='2007-12-07T13:51:23+00:00' user='Nick Dyer' visible='true' lat='50.9608556' lon='-1.4265599' />
-  <node id='91123658' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9320462' lon='-1.445417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964125' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.9231086' lon='-1.3759653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359695' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9674232' lon='-1.3530977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594957' timestamp='2006-08-04T11:58:46+01:00' user='nickw' visible='true' lat='50.9164889' lon='-1.4109307'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28936011' timestamp='2007-05-11T00:59:50+01:00' visible='true' lat='50.9417074' lon='-1.4412721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657773' timestamp='2007-04-05T14:20:52+01:00' user='Dean Earley' visible='true' lat='50.9017432' lon='-1.3653369' />
-  <node id='24984797' timestamp='2007-01-10T00:15:10+00:00' user='nickw' visible='true' lat='50.9418304' lon='-1.3770861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564819' timestamp='2006-08-15T12:11:10+01:00' user='nickw' visible='true' lat='50.9315978' lon='-1.3574689'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21275772' timestamp='2006-11-25T23:58:49+00:00' user='nickw' visible='true' lat='50.914346' lon='-1.4304725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341740' timestamp='2007-04-30T21:48:55+01:00' user='nickw' visible='true' lat='50.9140562' lon='-1.3495904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194843' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.9448125' lon='-1.4077685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21599032' timestamp='2006-12-16T01:02:10+00:00' user='Dean Earley' visible='true' lat='50.9323108' lon='-1.3551898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298231' timestamp='2007-01-06T14:30:57+00:00' user='Dean Earley' visible='true' lat='51.0169467' lon='-1.3404474' />
-  <node id='20976717' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9324989' lon='-1.4249427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816305' timestamp='2007-05-31T21:52:27+01:00' visible='true' lat='50.991168' lon='-1.3545922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577057' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9069217' lon='-1.4227799' />
-  <node id='13071243' timestamp='2006-08-11T02:47:59+01:00' user='Dean Earley' visible='true' lat='50.9229115' lon='-1.3672438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613419' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9760869' lon='-1.4036706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392381' timestamp='2007-05-20T17:56:44+01:00' visible='true' lat='50.9645345' lon='-1.3568099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217212' timestamp='2006-09-04T01:04:13+01:00' user='Dean Earley' visible='true' lat='50.9160077' lon='-1.3593103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949826' timestamp='2007-01-07T12:38:44+00:00' user='nickw' visible='true' lat='50.9859886' lon='-1.3798705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331354' timestamp='2007-11-20T11:03:31+00:00' user='Gregory Williams' visible='true' lat='50.9414849' lon='-1.4011731'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='254258' timestamp='2007-02-18T20:18:35+00:00' visible='true' lat='50.9391986' lon='-1.3572344' />
-  <node id='29931401' timestamp='2007-06-03T22:43:15+01:00' visible='true' lat='50.9953408' lon='-1.3727654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925906' timestamp='2007-06-03T20:50:20+01:00' visible='true' lat='50.9810395' lon='-1.3647883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254597' timestamp='2007-02-18T21:30:31+00:00' visible='true' lat='50.9159024' lon='-1.4112339' />
-  <node id='28249846' timestamp='2007-04-29T21:41:37+01:00' visible='true' lat='50.9195569' lon='-1.4408587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971201' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9080149' lon='-1.4145194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173929' timestamp='2007-04-29T01:03:18+01:00' visible='true' lat='50.942636' lon='-1.4341368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704329' timestamp='2007-05-28T10:32:58+01:00' visible='true' lat='50.9842445' lon='-1.3593794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026798' timestamp='2007-05-13T10:10:57+01:00' user='nickw' visible='true' lat='50.9181348' lon='-1.4080458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727995' timestamp='2007-02-11T00:33:25+00:00' visible='true' lat='50.9180067' lon='-1.4031554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110929' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9345079' lon='-1.3632898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704896' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.901856' lon='-1.443737'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21598848' timestamp='2007-02-04T22:51:55+00:00' user='Dean Earley' visible='true' lat='50.8981191' lon='-1.3803858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601365' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.91857' lon='-1.4805106'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='26781201' timestamp='2007-03-25T18:42:19+01:00' user='Dean Earley' visible='true' lat='50.9034561' lon='-1.3636306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964845' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9905977' lon='-1.4276264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930567' timestamp='2007-06-03T22:23:15+01:00' visible='true' lat='50.9915457' lon='-1.3542643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582922' timestamp='2007-05-02T23:57:41+01:00' visible='true' lat='50.9420465' lon='-1.4272433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124672' timestamp='2007-06-09T19:48:39+01:00' user='nickw' visible='true' lat='50.9312677' lon='-1.3525728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310974' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9713436' lon='-1.4318563' />
-  <node id='29632495' timestamp='2007-05-26T19:46:00+01:00' visible='true' lat='50.95937' lon='-1.3695347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194449' timestamp='2007-04-29T08:20:34+01:00' visible='true' lat='50.9463548' lon='-1.4324997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194415' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9477571' lon='-1.4379184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957190' timestamp='2007-03-24T16:33:51+00:00' user='Dean Earley' visible='true' lat='50.9171844' lon='-1.4194594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518797' timestamp='2007-04-05T14:20:52+01:00' user='Dean Earley' visible='true' lat='50.926' lon='-1.38151' />
-  <node id='29008403' timestamp='2007-05-12T15:11:58+01:00' user='nickw' visible='true' lat='50.9260552' lon='-1.3478567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700532' timestamp='2007-04-05T14:20:52+01:00' user='Dean Earley' visible='true' lat='50.9314448' lon='-1.3656687' />
-  <node id='28342538' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9058637' lon='-1.3687618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244012' timestamp='2007-04-29T20:34:51+01:00' user='Andy Street' visible='true' lat='50.9046762' lon='-1.34877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730504' timestamp='2007-05-28T19:36:34+01:00' visible='true' lat='50.9705832' lon='-1.3684792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310901' timestamp='2005-12-12T23:40:28+00:00' user='nickw' visible='true' lat='50.9159875' lon='-1.3970447' />
-  <node id='91109550' timestamp='2007-11-19T13:52:05+00:00' user='nickw' visible='true' lat='50.932294' lon='-1.4220713'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='united_reformed' />
-    <tag k='name' v='Isaac Watts Memorial Church' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='29026666' timestamp='2007-05-13T10:02:49+01:00' user='nickw' visible='true' lat='50.9223952' lon='-1.4027072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998894' timestamp='2007-06-05T23:28:47+01:00' user='nickw' visible='true' lat='50.9883838' lon='-1.4432685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595185' timestamp='2007-05-25T21:54:28+01:00' visible='true' lat='50.9694553' lon='-1.3537513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90589190' timestamp='2007-10-28T20:32:03+00:00' user='Nick Dyer' visible='true' lat='50.9032899' lon='-1.4243163' />
-  <node id='29862368' timestamp='2007-06-02T12:33:19+01:00' visible='true' lat='50.9323053' lon='-1.4290746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='395775' timestamp='2007-04-05T14:20:52+01:00' user='Dean Earley' visible='true' lat='50.9169' lon='-1.4025' />
-  <node id='28250045' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.917503' lon='-1.4493999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130955' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.9317889' lon='-1.3587136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431991' timestamp='2007-06-16T16:26:07+01:00' visible='true' lat='50.9855921' lon='-1.3510392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160278852' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9118112' lon='-1.4448307' />
-  <node id='28339131' timestamp='2007-05-01T18:52:32+01:00' visible='true' lat='50.9690865' lon='-1.3620867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237235' timestamp='2007-04-29T19:42:03+01:00' user='Andy Street' visible='true' lat='50.9018803' lon='-1.3578613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530518' timestamp='2007-05-23T13:01:39+01:00' visible='true' lat='50.9875726' lon='-1.3530742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613498' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9802434' lon='-1.3949211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124215' timestamp='2007-06-09T19:35:53+01:00' user='nickw' visible='true' lat='50.924509' lon='-1.3481376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781181' timestamp='2007-03-25T18:42:15+01:00' user='Dean Earley' visible='true' lat='50.9005586' lon='-1.3738134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398456' timestamp='2006-10-17T23:09:41+01:00' user='nickw' visible='true' lat='50.9212049' lon='-1.4071225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927558' timestamp='2007-06-03T21:24:29+01:00' visible='true' lat='50.9807445' lon='-1.3697088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90593913' timestamp='2007-10-28T20:36:49+00:00' user='Nick Dyer' visible='true' lat='50.9119116' lon='-1.445053' />
-  <node id='19890085' timestamp='2007-02-18T21:25:24+00:00' visible='true' lat='50.9184948' lon='-1.3938494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303133' timestamp='2007-01-19T18:27:12+00:00' user='Dean Earley' visible='true' lat='50.9615901' lon='-1.3874523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962301' timestamp='2007-12-10T19:32:11+00:00' user='sladen' visible='true' lat='50.958767' lon='-1.3693083' />
-  <node id='28257905' timestamp='2007-04-29T22:56:49+01:00' user='Andy Street' visible='true' lat='50.9022111' lon='-1.3544031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632890' timestamp='2007-05-26T20:07:50+01:00' visible='true' lat='50.9671448' lon='-1.3620036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544341' timestamp='2007-04-05T14:20:53+01:00' user='Dean Earley' visible='true' lat='50.939' lon='-1.37123' />
-  <node id='20831112' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9127944' lon='-1.4048724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706229' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9096624' lon='-1.3772027'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28339178' timestamp='2007-05-02T00:35:37+01:00' visible='true' lat='50.9682636' lon='-1.3626165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668264' timestamp='2007-01-04T21:06:32+00:00' user='nickw' visible='true' lat='50.9890844' lon='-1.411356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830586' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9244714' lon='-1.3565564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677150' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8966231' lon='-1.4386019' />
-  <node id='530522' timestamp='2007-04-05T14:20:53+01:00' user='Dean Earley' visible='true' lat='50.9508242' lon='-1.37044' />
-  <node id='13706715' timestamp='2007-10-26T13:08:39+01:00' user='Nick Dyer' visible='true' lat='50.8957207' lon='-1.3837177'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='331337' timestamp='2007-12-06T22:10:48+00:00' user='Dean Earley' visible='true' lat='51.0043' lon='-1.37256' />
-  <node id='29008371' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9265436' lon='-1.3526446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252935' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9452051' lon='-1.424591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929860' timestamp='2007-06-03T22:13:29+01:00' visible='true' lat='50.9770932' lon='-1.3669518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636943' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9184221' lon='-1.4316252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329590' timestamp='2007-01-25T22:42:46+00:00' user='Dean Earley' visible='true' lat='50.9341' lon='-1.38936' />
-  <node id='28348120' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9332851' lon='-1.3635108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945394' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9043034' lon='-1.3424188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903052' timestamp='2007-05-09T23:03:33+01:00' visible='true' lat='50.942898' lon='-1.3703028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243590' timestamp='2007-04-29T20:24:57+01:00' user='Dean Earley' visible='true' lat='50.9355339' lon='-1.4126314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600470' timestamp='2006-12-16T10:13:56+00:00' user='nickw' visible='true' lat='50.9379166' lon='-1.44652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724276' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9096269' lon='-1.409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200332' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.9410758' lon='-1.4470362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305627' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9838283' lon='-1.3871222' />
-  <node id='28903957' timestamp='2007-05-10T01:06:55+01:00' user='LivingWithDragons' visible='true' lat='50.9804522' lon='-1.4435422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964159' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9205788' lon='-1.3774354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600431' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9222711' lon='-1.4473246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598860' timestamp='2006-12-16T00:49:33+00:00' user='Dean Earley' visible='true' lat='50.8983406' lon='-1.3787134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596781' timestamp='2006-06-24T21:46:06+01:00' user='Dean Earley' visible='true' lat='50.9057482' lon='-1.4117651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003044' timestamp='2007-05-22T00:20:11+01:00' user='Dean Earley' visible='true' lat='50.9406463' lon='-1.4044796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173984' timestamp='2007-04-29T01:03:40+01:00' visible='true' lat='50.9424176' lon='-1.4338385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398403' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.977796' lon='-1.4250896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675839' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.9313682' lon='-1.3753356' />
-  <node id='25296376' timestamp='2007-01-19T09:58:45+00:00' user='Dean Earley' visible='true' lat='50.9713802' lon='-1.350701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180231' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9615823' lon='-1.4264507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903067' timestamp='2007-05-09T23:03:41+01:00' visible='true' lat='50.9418924' lon='-1.368473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817245' timestamp='2007-05-31T22:19:24+01:00' visible='true' lat='50.9857182' lon='-1.3645126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173757' timestamp='2007-09-07T17:39:00+01:00' user='mike l' visible='true' lat='50.9446881' lon='-1.4323482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125574209' timestamp='2007-11-20T11:52:26+00:00' user='Nick Dyer' visible='true' lat='50.9604542' lon='-1.4225545' />
-  <node id='254550' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9249326' lon='-1.362038' />
-  <node id='30089279' timestamp='2007-06-08T18:20:45+01:00' visible='true' lat='50.9638358' lon='-1.3797201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161116' timestamp='2007-06-10T18:13:43+01:00' visible='true' lat='50.9714505' lon='-1.354988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223928' timestamp='2007-06-11T22:03:10+01:00' visible='true' lat='50.9842795' lon='-1.3515921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872363' timestamp='2007-06-02T19:03:55+01:00' visible='true' lat='50.9171508' lon='-1.3502227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952633' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9345907' lon='-1.3783166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238988' timestamp='2007-04-09T15:39:34+01:00' user='avantman42' visible='true' lat='50.9007439' lon='-1.4099369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925340' timestamp='2007-06-03T20:36:31+01:00' visible='true' lat='50.9806852' lon='-1.3643257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162416' timestamp='2008-01-04T19:28:05+00:00' user='nickw' visible='true' lat='50.9720592' lon='-1.3821725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26004484' timestamp='2007-02-18T21:30:56+00:00' visible='true' lat='50.9084682' lon='-1.3968422' />
-  <node id='700536' timestamp='2007-04-05T14:20:53+01:00' user='Dean Earley' visible='true' lat='50.9199692' lon='-1.4044209' />
-  <node id='29008955' timestamp='2007-05-12T15:26:05+01:00' user='nickw' visible='true' lat='50.9326385' lon='-1.3509311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744294' timestamp='2006-11-12T22:57:30+00:00' user='Dean Earley' visible='true' lat='50.9070133' lon='-1.4150633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122344805' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true' lat='50.9185947' lon='-1.4373538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831129' timestamp='2006-11-02T19:56:07+00:00' user='nickw' visible='true' lat='50.9135536' lon='-1.4075539'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721035' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9607615' lon='-1.3568114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972790' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9019878' lon='-1.391693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135435' timestamp='2007-05-15T20:57:25+01:00' user='nickw' visible='true' lat='50.9434013' lon='-1.3824412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290721' timestamp='2007-06-13T09:23:56+01:00' visible='true' lat='50.9702559' lon='-1.3792667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194503' timestamp='2007-11-25T22:27:51+00:00' user='southglos' visible='true' lat='50.9476425' lon='-1.4060284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661168' timestamp='2007-04-05T14:20:54+01:00' user='Dean Earley' visible='true' lat='50.9063068' lon='-1.3646582' />
-  <node id='21689156' timestamp='2007-05-01T23:50:32+01:00' user='nickw' visible='true' lat='50.9403174' lon='-1.374709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575730' timestamp='2007-03-24T16:33:51+00:00' user='Dean Earley' visible='true' lat='50.9012372' lon='-1.3981439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249842' timestamp='2007-04-29T21:41:36+01:00' visible='true' lat='50.9198243' lon='-1.4427881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20954601' timestamp='2007-04-03T00:53:47+01:00' user='Ben' visible='true' lat='50.9411348' lon='-1.3982545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613453' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.976811' lon='-1.4019241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706766' timestamp='2007-04-05T14:20:54+01:00' user='Dean Earley' visible='true' lat='50.88862' lon='-1.3816561' />
-  <node id='244310989' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9700518' lon='-1.4393751' />
-  <node id='29461226' timestamp='2007-12-10T19:19:53+00:00' user='sladen' visible='true' lat='50.9056197' lon='-1.3973921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319657' timestamp='2005-12-14T22:05:42+00:00' user='nickw' visible='true' lat='50.9151292' lon='-1.3980961' />
-  <node id='28935756' timestamp='2007-05-11T00:50:45+01:00' visible='true' lat='50.9403748' lon='-1.4446386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706370' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9207181' lon='-1.3833618'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29145248' timestamp='2007-05-16T00:58:47+01:00' visible='true' lat='50.9204157' lon='-1.3889109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762112' timestamp='2007-02-10T22:56:20+00:00' user='nickw' visible='true' lat='50.9382557' lon='-1.3639076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133168' timestamp='2006-10-28T01:55:45+01:00' user='Dean Earley' visible='true' lat='50.9285422' lon='-1.3517225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632192' timestamp='2007-05-26T19:20:44+01:00' visible='true' lat='50.9557201' lon='-1.3678721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387823' timestamp='2007-04-05T14:20:54+01:00' user='Dean Earley' visible='true' lat='50.9315' lon='-1.38863' />
-  <node id='13706265' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9128373' lon='-1.3800268'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20971175' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9060728' lon='-1.3991071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984675' timestamp='2007-01-25T22:42:46+00:00' user='Dean Earley' visible='true' lat='50.9481618' lon='-1.3969586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584201' timestamp='2007-05-03T00:07:55+01:00' visible='true' lat='50.9418436' lon='-1.4329603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744407' timestamp='2006-09-03T01:03:34+01:00' user='Dean Earley' visible='true' lat='50.9376413' lon='-1.4001652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689068' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9319041' lon='-1.3958025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595092' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.9183336' lon='-1.415301'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='91126058' timestamp='2007-10-29T08:17:58+00:00' user='nickw' visible='true' lat='50.9298956' lon='-1.4456803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507788' timestamp='2007-05-22T00:20:14+01:00' user='Dean Earley' visible='true' lat='50.9492066' lon='-1.4012611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632222' timestamp='2007-05-26T19:21:22+01:00' visible='true' lat='50.9575675' lon='-1.3692397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830573' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.927262' lon='-1.3607421'>
-    <tag k='name' v='GRSDEAN CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601308' timestamp='2006-09-01T00:22:18+01:00' user='nickw' visible='true' lat='50.8321599' lon='-1.5114644'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29928596' timestamp='2007-06-03T21:52:05+01:00' visible='true' lat='50.9786682' lon='-1.3612296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469864' timestamp='2007-04-05T14:20:54+01:00' user='Dean Earley' visible='true' lat='50.9129376' lon='-1.4238399' />
-  <node id='28830680' timestamp='2007-05-05T09:03:34+01:00' user='nickw' visible='true' lat='50.9235986' lon='-1.3609667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730534' timestamp='2007-05-28T19:37:03+01:00' visible='true' lat='50.971409' lon='-1.3724589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932432' timestamp='2007-05-10T21:05:52+01:00' user='Dean Earley' visible='true' lat='50.9646968' lon='-1.475702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160179639' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9101822' lon='-1.3722094' />
-  <node id='160404881' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9129582' lon='-1.4385887' />
-  <node id='675878' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.930995' lon='-1.3729753' />
-  <node id='30431965' timestamp='2007-06-16T16:26:00+01:00' visible='true' lat='50.984736' lon='-1.3518198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463019' timestamp='2007-05-22T00:01:31+01:00' user='nickw' visible='true' lat='50.9104111' lon='-1.4017683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976789' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9295064' lon='-1.4209097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705966' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8878275' lon='-1.3931865' />
-  <node id='21141434' timestamp='2006-11-21T23:12:46+00:00' user='nickw' visible='true' lat='50.9228351' lon='-1.422353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613468' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9761467' lon='-1.3986795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096964' timestamp='2007-10-29T17:03:05+00:00' user='Dean Earley' visible='true' lat='50.9648454' lon='-1.3760037'>
-    <tag k='leisure' v='common' />
-    <tag k='name' v='Millenium Green' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130951' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.9317673' lon='-1.3586018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243492' timestamp='2007-04-29T20:23:57+01:00' user='Dean Earley' visible='true' lat='50.9392634' lon='-1.4092063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668084' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9856641' lon='-1.3896714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639923' timestamp='2007-02-04T22:51:17+00:00' user='Dean Earley' visible='true' lat='50.8999402' lon='-1.3807971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613407' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9857232' lon='-1.4261911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707220' timestamp='2007-04-05T14:20:54+01:00' user='Dean Earley' visible='true' lat='50.8510781' lon='-1.3200625' />
-  <node id='245148853' timestamp='2008-02-03T06:07:44+00:00' user='sladen' visible='true' lat='50.9039482' lon='-1.4018051' />
-  <node id='28583024' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9399845' lon='-1.4341043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924328' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9817294' lon='-1.3871439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595200' timestamp='2007-05-25T21:54:33+01:00' visible='true' lat='50.9674498' lon='-1.3527406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249884' timestamp='2007-04-29T21:41:43+01:00' visible='true' lat='50.9198419' lon='-1.4411836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976774' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9305957' lon='-1.4199164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90665699' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.900545' lon='-1.4158022' />
-  <node id='29816430' timestamp='2007-05-31T22:00:52+01:00' visible='true' lat='50.9902558' lon='-1.3550348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29709173' timestamp='2007-05-28T12:35:24+01:00' visible='true' lat='50.9881979' lon='-1.3525262'>
-    <tag k='highway' v='steps' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290736' timestamp='2007-06-13T09:23:58+01:00' visible='true' lat='50.9642427' lon='-1.3834906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624983' timestamp='2006-12-17T19:47:27+00:00' user='Dean Earley' visible='true' lat='50.8989729' lon='-1.3658845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583013' timestamp='2007-05-02T23:57:54+01:00' visible='true' lat='50.9392342' lon='-1.4326896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908383' timestamp='2006-12-18T23:27:56+00:00' visible='true' lat='50.9335537' lon='-1.3785132' />
-  <node id='18398441' timestamp='2006-10-17T23:09:40+01:00' user='nickw' visible='true' lat='50.9674676' lon='-1.415586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963731' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9316921' lon='-1.4165291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581803' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9195145' lon='-1.4470099' />
-  <node id='21689085' timestamp='2007-05-15T23:39:53+01:00' user='jonnyswerve' visible='true' lat='50.9418996' lon='-1.3882365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229577' timestamp='2007-06-12T00:14:40+01:00' user='nickw' visible='true' lat='50.9343682' lon='-1.3535366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710892' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9857755' lon='-1.3563928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071371' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9177726' lon='-1.3702699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949873' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9993656' lon='-1.3899658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171757' timestamp='2007-05-16T23:48:01+01:00' user='nickw' visible='true' lat='50.940741' lon='-1.3861708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316551' timestamp='2007-04-03T00:52:15+01:00' user='Dean Earley' visible='true' lat='50.9227978' lon='-1.4458353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957842' timestamp='2007-09-10T19:10:37+01:00' user='mike l' visible='true' lat='50.9425805' lon='-1.4302481'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29703876' timestamp='2007-05-28T10:12:59+01:00' visible='true' lat='50.9887689' lon='-1.3534406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372803' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9298636' lon='-1.442063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324984' timestamp='2006-09-02T12:59:40+01:00' user='Dean Earley' visible='true' lat='50.9602086' lon='-1.4055789' />
-  <node id='29872355' timestamp='2007-06-02T19:03:54+01:00' visible='true' lat='50.9175855' lon='-1.3510116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904032' timestamp='2007-05-10T01:07:19+01:00' user='LivingWithDragons' visible='true' lat='50.9810195' lon='-1.4449782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30255978' timestamp='2007-06-12T20:14:38+01:00' visible='true' lat='50.9833322' lon='-1.3495428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601350' timestamp='2006-09-01T00:16:13+01:00' user='nickw' visible='true' lat='50.9155154' lon='-1.4987969'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29815644' timestamp='2007-05-31T21:47:57+01:00' visible='true' lat='50.9904943' lon='-1.3566711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346876' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9130374' lon='-1.3675415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956620' timestamp='2007-06-26T23:45:04+01:00' user='nickw' visible='true' lat='50.9278873' lon='-1.35062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780825' timestamp='2007-06-22T21:09:52+01:00' user='Steve Chilton' visible='true' lat='50.9076343' lon='-1.4105286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001466' timestamp='2007-05-12T09:49:22+01:00' user='nickw' visible='true' lat='50.941774' lon='-1.351789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700409' timestamp='2007-04-05T14:20:55+01:00' user='Dean Earley' visible='true' lat='50.9248433' lon='-1.3891366' />
-  <node id='254763' timestamp='2007-11-11T18:09:50+00:00' user='Dean Earley' visible='true' lat='50.9180473' lon='-1.3787883' />
-  <node id='18232069' timestamp='2007-02-18T21:30:18+00:00' visible='true' lat='50.91374' lon='-1.4125319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577053' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9064779' lon='-1.4189605' />
-  <node id='10222198' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9067171' lon='-1.4152882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21586134' timestamp='2006-12-14T23:57:08+00:00' user='Dean Earley' visible='true' lat='50.967223' lon='-1.33162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141388' timestamp='2007-10-29T07:46:03+00:00' user='nickw' visible='true' lat='50.9237874' lon='-1.4150345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664552' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9073704' lon='-1.4057686' />
-  <node id='21677596' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.9039689' lon='-1.4025565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071319' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.9219993' lon='-1.361862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613392' timestamp='2006-12-16T17:46:40+00:00' user='David Currie' visible='true' lat='50.9745326' lon='-1.4149955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091829' timestamp='2006-11-19T12:09:11+00:00' user='nickw' visible='true' lat='50.9087643' lon='-1.4240818'>
-    <tag k='name' v='ELGIN' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997503' timestamp='2007-06-05T22:43:51+01:00' user='nickw' visible='true' lat='51.0028631' lon='-1.3603644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932240' timestamp='2007-09-07T16:44:36+01:00' user='mike l' visible='true' lat='50.978063' lon='-1.4489853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301557' timestamp='2006-11-13T00:10:32+00:00' user='Dean Earley' visible='true' lat='50.8991116' lon='-1.3980578' />
-  <node id='301605' timestamp='2007-04-03T00:53:57+01:00' user='Ben' visible='true' lat='50.9349294' lon='-1.4006856' />
-  <node id='29009227' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9300967' lon='-1.3546661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963748' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9352425' lon='-1.407169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240327' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9065325' lon='-1.3520498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178404' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.9867687' lon='-1.3512151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11151903' timestamp='2006-11-11T17:27:16+00:00' user='Dean Earley' visible='true' lat='50.949426' lon='-1.3796025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963734' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9330549' lon='-1.4158477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001311' timestamp='2007-05-12T09:40:12+01:00' user='nickw' visible='true' lat='50.9240912' lon='-1.382192'>
-    <tag k='name' v='ST AUG GDS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700513' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9258719' lon='-1.36907' />
-  <node id='13564627' timestamp='2006-10-28T01:46:39+01:00' user='Dean Earley' visible='true' lat='50.9291487' lon='-1.3573154'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='206163088' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.9707394' lon='-1.3835135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124364' timestamp='2007-06-09T19:43:09+01:00' user='nickw' visible='true' lat='50.9237983' lon='-1.3497815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780755' timestamp='2007-06-22T21:09:12+01:00' user='Steve Chilton' visible='true' lat='50.9075295' lon='-1.4056137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133213' timestamp='2006-10-28T01:55:53+01:00' user='Dean Earley' visible='true' lat='50.9282089' lon='-1.3515247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325221' timestamp='2006-11-11T17:27:16+00:00' user='Dean Earley' visible='true' lat='50.9370214' lon='-1.3505054' />
-  <node id='702392' timestamp='2006-12-27T18:13:35+00:00' user='southglos' visible='true' lat='50.9979645' lon='-1.3381071' />
-  <node id='27021827' timestamp='2007-04-03T00:53:06+01:00' user='Ben' visible='true' lat='50.9395645' lon='-1.3936314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388897' timestamp='2007-05-15T20:47:44+01:00' user='nickw' visible='true' lat='50.9437498' lon='-1.3931419' />
-  <node id='29632444' timestamp='2007-05-26T19:27:04+01:00' visible='true' lat='50.9605139' lon='-1.3628748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530609' timestamp='2007-06-12T20:38:37+01:00' visible='true' lat='50.9788811' lon='-1.3579773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303937' timestamp='2007-04-29T20:37:40+01:00' user='Dean Earley' visible='true' lat='50.9343184' lon='-1.4188017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035791' timestamp='2006-10-22T10:18:16+01:00' user='nickw' visible='true' lat='50.9319952' lon='-1.3905125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275887' timestamp='2007-10-28T20:52:11+00:00' user='Nick Dyer' visible='true' lat='50.920179' lon='-1.4304456'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='catholic' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='91108522' timestamp='2007-10-29T07:48:09+00:00' user='nickw' visible='true' lat='50.932371' lon='-1.420009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161125' timestamp='2007-06-10T18:25:33+01:00' visible='true' lat='50.9724228' lon='-1.3501881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071388' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9243082' lon='-1.361054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924237' timestamp='2007-02-13T19:46:57+00:00' user='Dean Earley' visible='true' lat='50.9613906' lon='-1.3762408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997563' timestamp='2007-06-05T22:44:01+01:00' user='nickw' visible='true' lat='50.9965618' lon='-1.3501131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911932' timestamp='2007-06-03T15:38:21+01:00' visible='true' lat='50.9862872' lon='-1.3573829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549390' timestamp='2007-05-24T11:22:52+01:00' visible='true' lat='50.9622285' lon='-1.3752307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27496134' timestamp='2007-04-20T23:53:12+01:00' user='Dean Earley' visible='true' lat='50.9127535' lon='-1.3875314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949928' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9904878' lon='-1.3830124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613483' timestamp='2006-12-16T17:46:59+00:00' user='David Currie' visible='true' lat='50.9702084' lon='-1.3922024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914401' timestamp='2007-06-03T16:22:47+01:00' visible='true' lat='50.9853433' lon='-1.3596505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636796' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9533994' lon='-1.4085762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92682870' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9620011' lon='-1.425638' />
-  <node id='310855' timestamp='2005-12-12T23:32:09+00:00' user='nickw' visible='true' lat='50.9167385' lon='-1.3980103' />
-  <node id='14743141' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9292404' lon='-1.4281095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008386' timestamp='2007-05-12T15:11:48+01:00' user='nickw' visible='true' lat='50.9260177' lon='-1.3525453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135246' timestamp='2007-05-15T20:56:00+01:00' user='nickw' visible='true' lat='50.9442429' lon='-1.3843047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160220277' timestamp='2007-12-10T19:12:44+00:00' user='sladen' visible='true' lat='50.9153937' lon='-1.3902424' />
-  <node id='675844' timestamp='2007-04-05T14:20:55+01:00' user='Dean Earley' visible='true' lat='50.9343051' lon='-1.3667292' />
-  <node id='29632903' timestamp='2007-05-26T20:07:54+01:00' visible='true' lat='50.968823' lon='-1.3629668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254917' timestamp='2007-04-03T00:52:19+01:00' user='Dean Earley' visible='true' lat='50.9293365' lon='-1.4465475' />
-  <node id='29632414' timestamp='2007-05-26T19:26:25+01:00' visible='true' lat='50.9557481' lon='-1.3693178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726190' timestamp='2007-02-06T00:16:40+00:00' user='Dean Earley' visible='true' lat='50.9109742' lon='-1.4005721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102970' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9315336' lon='-1.3612225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152162' timestamp='2008-02-03T06:21:03+00:00' user='sladen' visible='true' lat='50.9079588' lon='-1.3978826' />
-  <node id='29816549' timestamp='2007-05-31T22:04:25+01:00' visible='true' lat='50.9911955' lon='-1.3549162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506808' timestamp='2007-06-17T22:03:33+01:00' visible='true' lat='50.9785079' lon='-1.3613641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561574' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9246322' lon='-1.4284977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413145' timestamp='2007-04-05T14:20:55+01:00' user='Dean Earley' visible='true' lat='50.9349152' lon='-1.3892819' />
-  <node id='28232606' timestamp='2007-04-29T18:59:47+01:00' user='nickw' visible='true' lat='50.9145934' lon='-1.3418559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414272' timestamp='2007-05-01T23:49:52+01:00' user='nickw' visible='true' lat='50.9405893' lon='-1.3750481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706749' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8896932' lon='-1.3835736'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='254245' timestamp='2007-04-29T01:53:39+01:00' user='Dean Earley' visible='true' lat='50.9632781' lon='-1.4186551' />
-  <node id='24984784' timestamp='2007-01-10T00:15:03+00:00' user='nickw' visible='true' lat='50.9428569' lon='-1.3859665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549375' timestamp='2007-05-24T11:22:50+01:00' visible='true' lat='50.9635078' lon='-1.3742161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398373' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.956135' lon='-1.441443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014682' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9286038' lon='-1.3705215' />
-  <node id='245147529' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9104429' lon='-1.4029381' />
-  <node id='21746407' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9908898' lon='-1.3419375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342555' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9067531' lon='-1.3671725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='75690566' timestamp='2007-10-16T20:09:29+01:00' user='Dean Earley' visible='true' lat='50.9344889' lon='-1.3963328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160387800' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9156044' lon='-1.4538408' />
-  <node id='21178434' timestamp='2006-11-22T18:12:44+00:00' user='southglos' visible='true' lat='50.9966659' lon='-1.3560369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636778' timestamp='2007-04-29T02:33:37+01:00' user='Dean Earley' visible='true' lat='50.9479424' lon='-1.407418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092042' timestamp='2006-11-19T12:29:36+00:00' user='nickw' visible='true' lat='50.9383209' lon='-1.446489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028898' timestamp='2006-09-08T23:06:54+01:00' user='Dean Earley' visible='true' lat='50.9355027' lon='-1.3516494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111054' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9845026' lon='-1.3849023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964042' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='50.9987368' lon='-1.4469677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721036' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9609542' lon='-1.3580356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743130' timestamp='2007-04-03T00:52:22+01:00' user='Dean Earley' visible='true' lat='50.9194695' lon='-1.4298196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689109' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9396602' lon='-1.3821391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949839' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9905878' lon='-1.3743505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889436' timestamp='2007-01-19T18:20:23+00:00' user='Dean Earley' visible='true' lat='50.9510593' lon='-1.3678044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924294' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.967894' lon='-1.3835679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583067' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9381839' lon='-1.434704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305570' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.997119' lon='-1.3964224' />
-  <node id='206163283' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.9713649' lon='-1.3904868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123673' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9324351' lon='-1.4450855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973104' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9055114' lon='-1.4097027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466090' timestamp='2007-05-22T00:38:09+01:00' user='Dean Earley' visible='true' lat='50.9831555' lon='-1.4463015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275695' timestamp='2006-11-25T23:51:14+00:00' user='nickw' visible='true' lat='50.9203078' lon='-1.4342571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903972' timestamp='2007-05-10T01:06:59+01:00' user='LivingWithDragons' visible='true' lat='50.9812557' lon='-1.4444938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896420' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9694844' lon='-1.3892495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949958' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9967149' lon='-1.388734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342641' timestamp='2007-04-30T22:13:42+01:00' user='nickw' visible='true' lat='50.912027' lon='-1.3632786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930925' timestamp='2007-06-03T22:32:32+01:00' visible='true' lat='50.9992733' lon='-1.3534898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689092' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.943037' lon='-1.3872101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707282' timestamp='2007-05-28T11:52:22+01:00' visible='true' lat='50.9869585' lon='-1.3618508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956681' timestamp='2007-06-26T23:49:18+01:00' user='nickw' visible='true' lat='50.9294744' lon='-1.3501879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296282' timestamp='2007-01-19T09:58:48+00:00' user='Dean Earley' visible='true' lat='50.9760144' lon='-1.3646816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914418' timestamp='2007-06-03T16:22:50+01:00' visible='true' lat='50.983615' lon='-1.3630893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359725' timestamp='2007-04-29T18:46:09+01:00' visible='true' lat='50.967637' lon='-1.3537637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227237' timestamp='2006-10-23T20:52:57+01:00' user='nickw' visible='true' lat='50.9318229' lon='-1.4169658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372799' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9302498' lon='-1.4429346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956571' timestamp='2007-06-26T23:44:56+01:00' user='nickw' visible='true' lat='50.9274303' lon='-1.3517226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141446' timestamp='2007-09-05T17:46:23+01:00' user='mike l' visible='true' lat='50.9362954' lon='-1.3961976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962314' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.957621' lon='-1.3629932' />
-  <node id='28249936' timestamp='2007-04-29T21:41:52+01:00' visible='true' lat='50.9147562' lon='-1.4449279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254292' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9774984' lon='-1.3420895' />
-  <node id='26782571' timestamp='2007-03-25T19:23:40+01:00' user='Dean Earley' visible='true' lat='50.9088827' lon='-1.3968582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148950' timestamp='2008-02-03T06:08:19+00:00' user='sladen' visible='true' lat='50.9045111' lon='-1.4025432' />
-  <node id='28339165' timestamp='2007-04-30T20:39:37+01:00' visible='true' lat='50.9688516' lon='-1.3601026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711600' timestamp='2007-06-03T22:13:35+01:00' visible='true' lat='50.9763948' lon='-1.3649061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815059' timestamp='2007-05-31T21:30:57+01:00' visible='true' lat='50.9884126' lon='-1.3544134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254947' timestamp='2006-09-04T02:08:09+01:00' user='Dean Earley' visible='true' lat='50.9510029' lon='-1.4164002' />
-  <node id='28194351' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9439007' lon='-1.4363315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548684' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9637425' lon='-1.3636135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621233' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9759775' lon='-1.3772047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021793' timestamp='2007-04-03T00:52:57+01:00' user='Ben' visible='true' lat='50.95778' lon='-1.3980443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579408' timestamp='2006-12-14T13:52:53+00:00' user='David Currie' visible='true' lat='50.9775699' lon='-1.4041994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639972' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9013823' lon='-1.3787862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929608' timestamp='2007-06-03T22:07:05+01:00' visible='true' lat='50.9779562' lon='-1.3603689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275644' timestamp='2006-11-25T23:47:32+00:00' user='nickw' visible='true' lat='50.9078764' lon='-1.415579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998082' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.9898407' lon='-1.4075381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964108' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9187789' lon='-1.3762899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659217' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9038415' lon='-1.4057342' />
-  <node id='29535052' timestamp='2007-05-23T18:26:42+01:00' visible='true' lat='50.9720061' lon='-1.3508462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632179' timestamp='2007-05-26T19:20:25+01:00' visible='true' lat='50.957575' lon='-1.3690062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856355' timestamp='2007-06-02T08:31:26+01:00' user='nickw' visible='true' lat='50.9477355' lon='-1.3938351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549341' timestamp='2007-05-26T20:16:03+01:00' visible='true' lat='50.9627146' lon='-1.364149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659200' timestamp='2007-11-20T16:53:21+00:00' user='Nick Dyer' visible='true' lat='50.9045247' lon='-1.4084826' />
-  <node id='20957237' timestamp='2007-04-03T00:52:22+01:00' user='Dean Earley' visible='true' lat='50.9122245' lon='-1.4207205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924104' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9413752' lon='-1.374151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710894' timestamp='2007-05-28T14:29:53+01:00' visible='true' lat='50.9857165' lon='-1.3565773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254733' timestamp='2005-11-15T15:42:24+00:00' user='nickw' visible='true' lat='50.9882028' lon='-1.3735855' />
-  <node id='30124373' timestamp='2007-06-09T19:43:10+01:00' user='nickw' visible='true' lat='50.9244307' lon='-1.3497815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984724' timestamp='2007-01-10T00:12:05+00:00' user='nickw' visible='true' lat='50.9431886' lon='-1.3898803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194396' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9458566' lon='-1.4402863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298277' timestamp='2007-04-03T00:54:23+01:00' user='Ben' visible='true' lat='50.9582775' lon='-1.3974066' />
-  <node id='157188695' timestamp='2007-12-08T19:58:39+00:00' user='nickw' visible='true' lat='50.9393717' lon='-1.4503962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290766' timestamp='2007-06-13T09:24:05+01:00' visible='true' lat='50.9696351' lon='-1.3831959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512882' timestamp='2008-01-29T11:33:02+00:00' user='Dean Earley' visible='true' lat='50.9644448' lon='-1.3514131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815430' timestamp='2007-05-31T21:37:03+01:00' visible='true' lat='50.9874421' lon='-1.3540125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764492' timestamp='2007-02-10T23:53:41+00:00' visible='true' lat='50.9154953' lon='-1.3966299' />
-  <node id='113962327' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9554043' lon='-1.3636885' />
-  <node id='55420345' timestamp='2007-09-23T16:33:13+01:00' user='mike l' visible='true' lat='50.9373836' lon='-1.3763551' />
-  <node id='28180206' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9623674' lon='-1.4228144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001341' timestamp='2007-05-12T09:40:18+01:00' user='nickw' visible='true' lat='50.9236242' lon='-1.3808613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290785' timestamp='2007-06-13T09:24:10+01:00' visible='true' lat='50.96571' lon='-1.3812262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071405' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9218444' lon='-1.3550452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600371' timestamp='2007-04-09T15:39:47+01:00' user='avantman42' visible='true' lat='50.9026236' lon='-1.4137668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903933' timestamp='2007-05-26T14:54:48+01:00' user='LivingWithDragons' visible='true' lat='50.981242' lon='-1.4444907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329530' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9701' lon='-1.43163' />
-  <node id='21091865' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9091389' lon='-1.4182186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130975' timestamp='2006-10-28T01:45:38+01:00' user='Dean Earley' visible='true' lat='50.9295933' lon='-1.356184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705645' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8952661' lon='-1.4081094' />
-  <node id='29998530' timestamp='2007-06-05T23:13:21+01:00' user='nickw' visible='true' lat='50.9627525' lon='-1.451394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110752' timestamp='2006-10-27T23:38:38+01:00' user='Dean Earley' visible='true' lat='50.9352547' lon='-1.3668046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110911' timestamp='2006-10-27T23:39:32+01:00' user='Dean Earley' visible='true' lat='50.9351293' lon='-1.3615535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783072' timestamp='2007-02-18T20:18:35+00:00' visible='true' lat='50.939983' lon='-1.3624919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945347' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9208629' lon='-1.34671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073213' timestamp='2007-04-05T14:20:56+01:00' user='Dean Earley' visible='true' lat='50.9322882' lon='-1.3915844' />
-  <node id='24949975' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.988562' lon='-1.3828137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091880' timestamp='2006-11-25T23:51:22+00:00' user='nickw' visible='true' lat='50.9198358' lon='-1.4249733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348611' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true' lat='50.9279635' lon='-1.3619016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949856' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9955146' lon='-1.3694235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301571' timestamp='2006-11-13T00:10:37+00:00' user='Dean Earley' visible='true' lat='50.8995599' lon='-1.3979199' />
-  <node id='28243654' timestamp='2007-04-29T20:25:08+01:00' user='Dean Earley' visible='true' lat='50.9388291' lon='-1.4130399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889414' timestamp='2007-09-23T16:33:09+01:00' user='mike l' visible='true' lat='50.9377919' lon='-1.365577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677844' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.8995571' lon='-1.4436831' />
-  <node id='27021748' timestamp='2007-04-03T00:52:35+01:00' user='Ben' visible='true' lat='50.9413983' lon='-1.4011045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548701' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.9632719' lon='-1.3682402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372784' timestamp='2007-12-14T21:30:35+00:00' user='nickw' visible='true' lat='50.9302873' lon='-1.4434594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160415526' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true' lat='50.9109072' lon='-1.4291816' />
-  <node id='13071431' timestamp='2007-03-31T20:35:04+01:00' user='nickw' visible='true' lat='50.9187618' lon='-1.3506634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135261' timestamp='2007-05-15T20:56:01+01:00' user='nickw' visible='true' lat='50.9437673' lon='-1.385755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530515' timestamp='2007-06-11T21:52:00+01:00' visible='true' lat='50.9870977' lon='-1.3533912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254900' timestamp='2006-09-03T00:38:54+01:00' user='Dean Earley' visible='true' lat='50.9098253' lon='-1.4079181' />
-  <node id='25296312' timestamp='2007-01-19T09:52:17+00:00' user='Dean Earley' visible='true' lat='50.9742344' lon='-1.3667869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447516' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9104236' lon='-1.3863006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595160' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.9205187' lon='-1.4154073'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29134112' timestamp='2007-05-15T20:47:31+01:00' user='nickw' visible='true' lat='50.9443372' lon='-1.3821374'>
-    <tag k='name' v='BRAD CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971190' timestamp='2007-02-18T21:30:55+00:00' visible='true' lat='50.905057' lon='-1.4000048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='596303' timestamp='2007-04-05T14:20:57+01:00' user='Dean Earley' visible='true' lat='50.9136544' lon='-1.3562021' />
-  <node id='160211057' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9154857' lon='-1.3913153' />
-  <node id='27467497' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.9307713' lon='-1.3791396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341788' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9133547' lon='-1.3612919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291054' timestamp='2007-06-13T09:33:00+01:00' visible='true' lat='50.9659468' lon='-1.3858914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089119' timestamp='2007-06-08T18:12:07+01:00' visible='true' lat='50.9652291' lon='-1.3790242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325236' timestamp='2006-11-11T17:28:40+00:00' user='Dean Earley' visible='true' lat='50.9353165' lon='-1.3351697' />
-  <node id='28194381' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9444174' lon='-1.4401572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504282' timestamp='2007-05-28T12:16:21+01:00' visible='true' lat='50.9979992' lon='-1.3504168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794385' timestamp='2007-05-30T21:37:53+01:00' user='nickw' visible='true' lat='50.9215351' lon='-1.3641788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816639' timestamp='2007-05-31T22:10:50+01:00' visible='true' lat='50.987496' lon='-1.3620187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594901' timestamp='2006-08-04T11:58:03+01:00' user='nickw' visible='true' lat='50.9178561' lon='-1.4134229'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21636751' timestamp='2007-05-22T00:20:16+01:00' user='Dean Earley' visible='true' lat='50.9469975' lon='-1.395521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372727' timestamp='2007-05-01T10:05:14+01:00' visible='true' lat='50.932792' lon='-1.4410592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87241889' timestamp='2007-12-06T17:35:14+00:00' user='blackadder' visible='true' lat='50.9314068' lon='-1.4481363'>
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='shop' v='supermarket' />
-  </node>
-  <node id='29929004' timestamp='2007-06-03T21:58:04+01:00' visible='true' lat='50.9742822' lon='-1.3636569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972824' timestamp='2006-11-13T00:07:33+00:00' user='Dean Earley' visible='true' lat='50.8999796' lon='-1.3971944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953498' timestamp='2007-06-04T21:24:01+01:00' visible='true' lat='50.9917055' lon='-1.3676393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342585' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9096845' lon='-1.3624839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254309' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9868016' lon='-1.3444088' />
-  <node id='9725924' timestamp='2006-07-09T22:04:08+01:00' user='Dean Earley' visible='true' lat='50.9144704' lon='-1.3283666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794909' timestamp='2007-05-30T21:44:20+01:00' user='nickw' visible='true' lat='50.9152711' lon='-1.3536145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348729' timestamp='2006-10-16T21:59:55+01:00' user='nickw' visible='true' lat='50.9962013' lon='-1.4478809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773033' timestamp='2007-04-03T00:52:23+01:00' user='Dean Earley' visible='true' lat='50.9243488' lon='-1.4443487' />
-  <node id='48950431' timestamp='2007-09-10T23:28:29+01:00' visible='true' lat='50.912091' lon='-1.3993104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254870' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9196898' lon='-1.4791522' />
-  <node id='14745500' timestamp='2007-01-19T18:27:14+00:00' user='Dean Earley' visible='true' lat='50.9584745' lon='-1.3954683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30259422' timestamp='2007-06-12T21:04:45+01:00' visible='true' lat='50.9779939' lon='-1.3598915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305606' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9908318' lon='-1.3952637' />
-  <node id='28194898' timestamp='2007-04-29T20:37:36+01:00' user='Dean Earley' visible='true' lat='50.9400594' lon='-1.4089247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582956' timestamp='2007-05-02T23:57:47+01:00' visible='true' lat='50.9434366' lon='-1.4251029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466122' timestamp='2007-05-22T00:38:10+01:00' user='Dean Earley' visible='true' lat='50.9821326' lon='-1.4458545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170451' timestamp='2006-11-11T17:30:05+00:00' user='Dean Earley' visible='true' lat='50.948331' lon='-1.3927196' />
-  <node id='382999' timestamp='2007-04-05T14:20:57+01:00' user='Dean Earley' visible='true' lat='50.9274' lon='-1.41754' />
-  <node id='242727' timestamp='2007-01-19T21:03:47+00:00' user='Dean Earley' visible='true' lat='50.9384257' lon='-1.384543' />
-  <node id='27021812' timestamp='2007-04-03T00:53:04+01:00' user='Ben' visible='true' lat='50.9372241' lon='-1.3995401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290747' timestamp='2007-06-13T09:24:01+01:00' visible='true' lat='50.9657191' lon='-1.3811831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711125' timestamp='2007-05-28T14:39:21+01:00' visible='true' lat='50.979266' lon='-1.3629194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704780' timestamp='2006-08-26T00:06:07+01:00' user='dmgroom' visible='true' lat='50.8902594' lon='-1.4190657' />
-  <node id='28246348' timestamp='2007-04-29T20:59:43+01:00' user='Dean Earley' visible='true' lat='50.9337998' lon='-1.4314634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17769053' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9164597' lon='-1.3911093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87236104' timestamp='2007-10-25T21:06:18+01:00' user='Nick Dyer' visible='true' lat='50.9352986' lon='-1.4470341' />
-  <node id='66587923' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9316387' lon='-1.4493195' />
-  <node id='29816413' timestamp='2007-05-31T21:58:44+01:00' visible='true' lat='50.9895794' lon='-1.3556035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342572' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9057885' lon='-1.3674903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892127' timestamp='2006-10-27T00:58:30+01:00' user='Dean Earley' visible='true' lat='50.9114982' lon='-1.3838014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228098' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.95083' lon='-1.4237797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236108' timestamp='2007-05-01T14:43:39+01:00' user='Andy Street' visible='true' lat='50.9077555' lon='-1.3567411'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949992' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9829591' lon='-1.3855156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728561' timestamp='2007-03-23T22:53:03+00:00' user='nickw' visible='true' lat='50.9047595' lon='-1.3691918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232082' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9112697' lon='-1.413339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089082' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.9669685' lon='-1.3783387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783083' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9403017' lon='-1.3550465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728870' timestamp='2007-05-28T19:12:26+01:00' visible='true' lat='50.9727934' lon='-1.3556871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87825995' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8996618' lon='-1.4376952' />
-  <node id='17658112' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9117192' lon='-1.4463929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689122' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9408494' lon='-1.3827749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486258' timestamp='2007-07-09T11:55:38+01:00' visible='true' lat='50.9102019' lon='-1.3822738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091394' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.9892976' lon='-1.4454858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160420352' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9067561' lon='-1.4194313' />
-  <node id='29999022' timestamp='2007-06-05T23:29:02+01:00' user='nickw' visible='true' lat='50.9954114' lon='-1.4369906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130896' timestamp='2006-10-28T01:45:27+01:00' user='Dean Earley' visible='true' lat='50.9327696' lon='-1.3614129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984754' timestamp='2007-04-29T02:33:50+01:00' user='Dean Earley' visible='true' lat='50.9512782' lon='-1.4041988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422993' timestamp='2007-05-22T00:20:17+01:00' user='Dean Earley' visible='true' lat='50.9475355' lon='-1.3966593' />
-  <node id='206162629' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.9715588' lon='-1.3809209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491401' timestamp='2007-05-22T12:23:40+01:00' visible='true' lat='50.9193899' lon='-1.3983111'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Honest Lawyer' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161981' timestamp='2007-12-10T19:38:25+00:00' user='sladen' visible='true' lat='50.9757343' lon='-1.3730334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467480' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.9254018' lon='-1.376464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466071' timestamp='2007-09-09T12:08:40+01:00' user='mike l' visible='true' lat='50.9419629' lon='-1.4298146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464260' timestamp='2007-05-22T00:19:14+01:00' user='Dean Earley' visible='true' lat='50.9373086' lon='-1.4065846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932221' timestamp='2007-05-10T20:48:46+01:00' user='Dean Earley' visible='true' lat='50.9600055' lon='-1.4521243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998091' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.9870769' lon='-1.403366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561787' timestamp='2007-04-03T00:52:24+01:00' user='Dean Earley' visible='true' lat='50.9248272' lon='-1.4374388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252947' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.9440795' lon='-1.4278754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254407' timestamp='2006-09-02T13:46:28+01:00' user='Dean Earley' visible='true' lat='50.9387565' lon='-1.422361' />
-  <node id='15028823' timestamp='2006-09-08T23:06:40+01:00' user='Dean Earley' visible='true' lat='50.9264277' lon='-1.3646037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90616406' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true' lat='50.895559' lon='-1.4038402' />
-  <node id='28342628' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9104361' lon='-1.3658811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148036' timestamp='2008-02-03T06:04:24+00:00' user='sladen' visible='true' lat='50.9085704' lon='-1.4025518' />
-  <node id='169423550' timestamp='2007-12-14T21:35:47+00:00' user='nickw' visible='true' lat='50.9307112' lon='-1.4432395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147923' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.908565' lon='-1.4031355' />
-  <node id='245152428' timestamp='2008-02-03T06:21:38+00:00' user='sladen' visible='true' lat='50.9073418' lon='-1.3978311' />
-  <node id='29925389' timestamp='2007-06-03T20:40:36+01:00' visible='true' lat='50.9799536' lon='-1.3628592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160207842' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9227309' lon='-1.3817795' />
-  <node id='29708044' timestamp='2007-05-28T12:04:13+01:00' visible='true' lat='50.9785167' lon='-1.3648461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724261' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.9248506' lon='-1.4142539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962267' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9556962' lon='-1.3650617' />
-  <node id='21141387' timestamp='2007-03-24T16:33:51+00:00' user='Dean Earley' visible='true' lat='50.9308973' lon='-1.4266499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650801' timestamp='2007-04-05T14:20:57+01:00' user='Dean Earley' visible='true' lat='50.9164' lon='-1.39938' />
-  <node id='254672' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.924238' lon='-1.3758935' />
-  <node id='160335936' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.9462822' lon='-1.4740132' />
-  <node id='21561527' timestamp='2007-03-24T16:33:51+00:00' user='Dean Earley' visible='true' lat='50.9259431' lon='-1.4384976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971152' timestamp='2006-11-12T22:56:57+00:00' user='Dean Earley' visible='true' lat='50.9072528' lon='-1.4039235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956707' timestamp='2007-06-26T23:49:20+01:00' user='nickw' visible='true' lat='50.9292491' lon='-1.3479827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325206' timestamp='2006-11-11T17:30:10+00:00' user='Dean Earley' visible='true' lat='50.94251' lon='-1.3626909' />
-  <node id='20961054' timestamp='2006-11-11T17:12:41+00:00' user='Dean Earley' visible='true' lat='50.9367918' lon='-1.3493178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388912' timestamp='2007-04-05T14:20:57+01:00' user='Dean Earley' visible='true' lat='50.9443' lon='-1.40329' />
-  <node id='154769820' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true' lat='50.9613259' lon='-1.4265771' />
-  <node id='21419437' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.941533' lon='-1.3705485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325690' timestamp='2007-04-05T14:20:58+01:00' user='Dean Earley' visible='true' lat='50.9213' lon='-1.41114' />
-  <node id='20976668' timestamp='2007-03-24T16:33:51+00:00' user='Dean Earley' visible='true' lat='50.9288147' lon='-1.4213555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657678' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.922206' lon='-1.3811959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162254' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.973329' lon='-1.3872783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194434' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9471544' lon='-1.4335145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464241' timestamp='2007-05-22T00:19:10+01:00' user='Dean Earley' visible='true' lat='50.9341052' lon='-1.4164196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298256' timestamp='2007-01-06T14:30:58+00:00' user='Dean Earley' visible='true' lat='50.971419' lon='-1.3769527' />
-  <node id='14964142' timestamp='2006-09-08T02:12:02+01:00' user='Dean Earley' visible='true' lat='50.9188916' lon='-1.3801779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704314' timestamp='2007-05-28T10:32:52+01:00' visible='true' lat='50.9863438' lon='-1.3582671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708022' timestamp='2007-05-28T12:04:04+01:00' visible='true' lat='50.9839533' lon='-1.3641316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924089' timestamp='2007-02-18T20:19:18+00:00' visible='true' lat='50.9389716' lon='-1.3738928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162239' timestamp='2008-01-04T19:26:28+00:00' user='nickw' visible='true' lat='50.9731007' lon='-1.3890415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29912987' timestamp='2007-06-03T15:50:12+01:00' visible='true' lat='50.9867983' lon='-1.3599586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997507' timestamp='2007-06-05T22:43:52+01:00' user='nickw' visible='true' lat='51.0053634' lon='-1.3595697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998068' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9886214' lon='-1.4075877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972813' timestamp='2007-02-06T00:16:42+00:00' user='Dean Earley' visible='true' lat='50.9052486' lon='-1.3975624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212553' timestamp='2007-12-08T20:16:58+00:00' user='nickw' visible='true' lat='50.9440895' lon='-1.447369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976804' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9263133' lon='-1.422062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341775' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.911576' lon='-1.3602986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146240' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9143881' lon='-1.4012729' />
-  <node id='21677595' timestamp='2006-12-22T14:24:06+00:00' user='nickw' visible='true' lat='50.9043698' lon='-1.4025565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073397' timestamp='2007-04-05T14:20:58+01:00' user='Dean Earley' visible='true' lat='50.93021' lon='-1.3928344' />
-  <node id='28345071' timestamp='2007-04-30T23:00:39+01:00' user='nickw' visible='true' lat='50.9258811' lon='-1.3552952'>
-    <tag k='name' v='RND HIL CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275627' timestamp='2007-06-01T16:40:12+01:00' user='Dean Earley' visible='true' lat='50.9166033' lon='-1.4340382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183738' timestamp='2007-04-29T02:25:39+01:00' user='Dean Earley' visible='true' lat='50.9504399' lon='-1.4138801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935996' timestamp='2007-05-11T00:59:42+01:00' visible='true' lat='50.9408647' lon='-1.4444827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107331' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9358774' lon='-1.3516389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949945' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9949394' lon='-1.3872241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661183' timestamp='2007-04-05T14:20:58+01:00' user='Dean Earley' visible='true' lat='50.9128692' lon='-1.3616269' />
-  <node id='20971220' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9064592' lon='-1.4146536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127574' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9352271' lon='-1.4402479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689173' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9396163' lon='-1.3711131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636781' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.9480476' lon='-1.4090497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008385' timestamp='2007-05-12T15:11:48+01:00' user='nickw' visible='true' lat='50.9259175' lon='-1.3524857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008795' timestamp='2007-05-12T15:20:38+01:00' user='nickw' visible='true' lat='50.9273106' lon='-1.3491332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816775' timestamp='2007-05-31T22:15:44+01:00' visible='true' lat='50.9877237' lon='-1.3609206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639904' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9024937' lon='-1.3817513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956609' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9292021' lon='-1.3503419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160226525' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.9040826' lon='-1.3905085' />
-  <node id='157188678' timestamp='2007-12-08T20:00:26+00:00' user='nickw' visible='true' lat='50.9379742' lon='-1.4492812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764479' timestamp='2007-02-10T23:53:36+00:00' visible='true' lat='50.9096849' lon='-1.3969722' />
-  <node id='122322753' timestamp='2007-11-18T19:04:32+00:00' user='nickw' visible='true' lat='50.9138821' lon='-1.4358687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956745' timestamp='2007-06-26T23:49:25+01:00' user='nickw' visible='true' lat='50.92836' lon='-1.3500687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956568' timestamp='2007-06-26T23:44:56+01:00' user='nickw' visible='true' lat='50.927017' lon='-1.3510968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388863' timestamp='2007-04-05T14:20:58+01:00' user='Dean Earley' visible='true' lat='50.9308' lon='-1.40284' />
-  <node id='20972773' timestamp='2006-11-13T00:06:54+00:00' user='Dean Earley' visible='true' lat='50.9018064' lon='-1.4105743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92681275' timestamp='2007-10-31T12:24:55+00:00' user='Dean Earley' visible='true' lat='50.9617253' lon='-1.4252432' />
-  <node id='12801366' timestamp='2007-03-04T19:32:14+00:00' user='Dean Earley' visible='true' lat='50.9059326' lon='-1.3749991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949959' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9967649' lon='-1.3891711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194413' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.946853' lon='-1.4374448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422978' timestamp='2007-05-22T00:19:43+01:00' user='Dean Earley' visible='true' lat='50.9350133' lon='-1.4114595' />
-  <node id='13707090' timestamp='2007-04-05T14:20:59+01:00' user='Dean Earley' visible='true' lat='50.8625472' lon='-1.339176' />
-  <node id='26575740' timestamp='2007-10-26T16:05:45+01:00' user='Nick Dyer' visible='true' lat='50.9016529' lon='-1.3955409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727991' timestamp='2007-02-18T21:25:31+00:00' visible='true' lat='50.9157466' lon='-1.3967036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310983' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9636519' lon='-1.433324' />
-  <node id='14743125' timestamp='2007-04-03T00:51:29+01:00' user='Dean Earley' visible='true' lat='50.9150832' lon='-1.4241406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254773' timestamp='2007-04-03T00:51:29+01:00' user='Dean Earley' visible='true' lat='50.9250553' lon='-1.4380023' />
-  <node id='21316553' timestamp='2007-04-03T00:51:29+01:00' user='Dean Earley' visible='true' lat='50.9244213' lon='-1.4444716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942493' timestamp='2006-10-18T23:59:53+01:00' user='Dean Earley' visible='true' lat='50.8993068' lon='-1.3562928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783118' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9482128' lon='-1.3476164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21599029' timestamp='2006-12-16T01:02:10+00:00' user='Dean Earley' visible='true' lat='50.9343659' lon='-1.3545552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816740' timestamp='2007-05-31T22:13:32+01:00' visible='true' lat='50.9912885' lon='-1.3554233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931612' timestamp='2007-04-05T14:20:59+01:00' user='Dean Earley' visible='true' lat='50.9200558' lon='-1.390353' />
-  <node id='160228953' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.902291' lon='-1.3943709' />
-  <node id='27021775' timestamp='2007-04-03T00:52:46+01:00' user='Ben' visible='true' lat='50.9464309' lon='-1.4033254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224264' timestamp='2007-06-11T22:06:22+01:00' visible='true' lat='50.9837334' lon='-1.3538447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677845' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.8992107' lon='-1.4440522' />
-  <node id='29912985' timestamp='2007-06-03T15:50:12+01:00' visible='true' lat='50.9872764' lon='-1.3602257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180199' timestamp='2007-04-29T02:05:34+01:00' user='Dean Earley' visible='true' lat='50.9638454' lon='-1.4219031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254288' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9749004' lon='-1.3422829' />
-  <node id='29380432' timestamp='2007-05-20T10:19:28+01:00' user='nickw' visible='true' lat='50.9435002' lon='-1.3758927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838701' timestamp='2007-06-01T20:36:55+01:00' visible='true' lat='50.9702215' lon='-1.3893025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997553' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9947112' lon='-1.3440736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582046' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9308381' lon='-1.4487788' />
-  <node id='125577114' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9639626' lon='-1.4240823' />
-  <node id='21275779' timestamp='2006-11-25T23:58:55+00:00' user='nickw' visible='true' lat='50.9149942' lon='-1.4290371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945331' timestamp='2007-03-31T20:34:28+01:00' user='nickw' visible='true' lat='50.9207632' lon='-1.3562352'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Big Cheese' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621213' timestamp='2007-05-26T11:34:51+01:00' visible='true' lat='50.9696564' lon='-1.3534865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507159' timestamp='2007-06-17T22:07:51+01:00' visible='true' lat='50.9767264' lon='-1.3612639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728547' timestamp='2007-03-25T18:42:32+01:00' user='Dean Earley' visible='true' lat='50.9026784' lon='-1.3717883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250022' timestamp='2007-04-29T21:42:15+01:00' visible='true' lat='50.915093' lon='-1.4494965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561564' timestamp='2007-04-03T00:51:30+01:00' user='Dean Earley' visible='true' lat='50.9222431' lon='-1.4332736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114369' timestamp='2007-02-23T21:46:12+00:00' user='nickw' visible='true' lat='50.9071979' lon='-1.3934321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021745' timestamp='2007-04-03T00:52:30+01:00' user='Ben' visible='true' lat='50.9382345' lon='-1.3932504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639945' timestamp='2007-02-04T22:51:18+00:00' user='Dean Earley' visible='true' lat='50.9011709' lon='-1.3798601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930659' timestamp='2007-06-03T22:25:16+01:00' visible='true' lat='50.9956609' lon='-1.3524155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341770' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9119393' lon='-1.3594443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581828' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9136487' lon='-1.4500741' />
-  <node id='14727974' timestamp='2006-12-18T23:27:24+00:00' visible='true' lat='50.9196951' lon='-1.3941518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134823' timestamp='2007-05-15T20:53:14+01:00' user='nickw' visible='true' lat='50.9446435' lon='-1.3852385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149961' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9089817' lon='-1.4026806' />
-  <node id='17768859' timestamp='2007-02-18T20:19:10+00:00' visible='true' lat='50.9485368' lon='-1.3657974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480656' timestamp='2007-01-27T23:30:41+00:00' visible='true' lat='50.9209258' lon='-1.3889741'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='24984721' timestamp='2007-01-10T00:12:02+00:00' user='nickw' visible='true' lat='50.9434014' lon='-1.3902379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582912' timestamp='2007-05-02T23:57:40+01:00' visible='true' lat='50.9408164' lon='-1.4272002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721033' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9681268' lon='-1.3691141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173932' timestamp='2007-04-29T01:03:18+01:00' visible='true' lat='50.9425652' lon='-1.434515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689095' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9416131' lon='-1.3857549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794815' timestamp='2007-05-30T21:41:50+01:00' user='nickw' visible='true' lat='50.9204344' lon='-1.3556161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949931' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9931388' lon='-1.383211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180229' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9617664' lon='-1.4259951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071230' timestamp='2007-01-19T20:35:55+00:00' user='Dean Earley' visible='true' lat='50.9222442' lon='-1.3723704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815062' timestamp='2007-05-31T21:30:58+01:00' visible='true' lat='50.988261' lon='-1.3550074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305614' timestamp='2006-12-16T17:47:17+00:00' user='David Currie' visible='true' lat='50.9885428' lon='-1.3948884' />
-  <node id='160415527' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true' lat='50.9108963' lon='-1.4293018' />
-  <node id='29997519' timestamp='2007-06-05T22:43:54+01:00' user='nickw' visible='true' lat='51.0122135' lon='-1.3579804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447519' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9099476' lon='-1.3875125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296283' timestamp='2007-01-19T09:58:48+00:00' user='Dean Earley' visible='true' lat='50.9751051' lon='-1.3655928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160406931' timestamp='2007-12-10T20:57:12+00:00' user='sladen' visible='true' lat='50.9124116' lon='-1.4323917' />
-  <node id='29795095' timestamp='2007-05-30T21:48:09+01:00' user='nickw' visible='true' lat='50.9165424' lon='-1.3572948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254726' timestamp='2007-01-31T01:07:52+00:00' user='Dean Earley' visible='true' lat='51.00205' lon='-1.3507171' />
-  <node id='27434183' timestamp='2007-04-17T22:04:00+01:00' visible='true' lat='50.9288451' lon='-1.3898255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657727' timestamp='2007-04-05T14:20:59+01:00' user='Dean Earley' visible='true' lat='50.9070579' lon='-1.3430453' />
-  <node id='18398443' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.933972' lon='-1.414295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325212' timestamp='2005-12-16T23:03:11+00:00' user='80n' visible='true' lat='50.9398244' lon='-1.358802' />
-  <node id='29549352' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.9687664' lon='-1.371151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091873' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.9146505' lon='-1.4247349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640024' timestamp='2007-02-18T20:18:19+00:00' visible='true' lat='50.9141291' lon='-1.3714638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700382' timestamp='2007-04-05T14:21:00+01:00' user='Dean Earley' visible='true' lat='50.9236558' lon='-1.3929421' />
-  <node id='28249809' timestamp='2007-04-29T21:41:32+01:00' visible='true' lat='50.9243378' lon='-1.4410757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325092' timestamp='2006-11-11T17:20:02+00:00' user='Dean Earley' visible='true' lat='50.9214948' lon='-1.5876822' />
-  <node id='21178406' timestamp='2007-11-28T12:24:30+00:00' user='Dean Earley' visible='true' lat='50.9866596' lon='-1.3507594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242722' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9090474' lon='-1.4147978' />
-  <node id='635135' timestamp='2006-07-19T01:48:48+01:00' user='Dean Earley' visible='true' lat='50.9080646' lon='-1.3599606' />
-  <node id='20130890' timestamp='2006-10-28T01:45:25+01:00' user='Dean Earley' visible='true' lat='50.9331705' lon='-1.3622725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021824' timestamp='2007-04-03T00:53:06+01:00' user='Ben' visible='true' lat='50.9405098' lon='-1.3967964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148032' timestamp='2008-02-03T06:04:24+00:00' user='sladen' visible='true' lat='50.9093389' lon='-1.4022772' />
-  <node id='160409608' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9107989' lon='-1.4309669' />
-  <node id='25296305' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9866222' lon='-1.3545635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929611' timestamp='2007-06-03T22:07:07+01:00' visible='true' lat='50.9777469' lon='-1.3585288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998122' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.9895843' lon='-1.3999192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324998' timestamp='2006-11-11T17:20:02+00:00' user='Dean Earley' visible='true' lat='50.959094' lon='-1.4208632' />
-  <node id='29913875' timestamp='2007-06-03T15:56:39+01:00' visible='true' lat='50.9855949' lon='-1.3584031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250005' timestamp='2007-04-29T21:42:11+01:00' visible='true' lat='50.9146761' lon='-1.4488051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613442' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.9767201' lon='-1.4033436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963736' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9334135' lon='-1.4149153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134846' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9281873' lon='-1.3530936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889406' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.934426' lon='-1.3496738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254271' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9557028' lon='-1.3397061' />
-  <node id='24949878' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9898125' lon='-1.379635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372777' timestamp='2007-05-01T10:05:21+01:00' visible='true' lat='50.9322294' lon='-1.4406008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90665697' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9005558' lon='-1.4164717' />
-  <node id='30956639' timestamp='2007-06-26T23:45:07+01:00' user='nickw' visible='true' lat='50.9327894' lon='-1.3518716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583054' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9382026' lon='-1.4293747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704897' timestamp='2006-08-25T22:27:28+01:00' user='dmgroom' visible='true' lat='50.9017133' lon='-1.4442368' />
-  <node id='21419418' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9409508' lon='-1.370747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249791' timestamp='2007-04-29T21:41:29+01:00' visible='true' lat='50.9209323' lon='-1.4452333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718202' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.9355909' lon='-1.4458976' />
-  <node id='21091888' timestamp='2007-04-29T21:18:23+01:00' user='Dean Earley' visible='true' lat='50.9251532' lon='-1.4175592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635145' timestamp='2007-02-18T21:30:36+00:00' visible='true' lat='50.9025813' lon='-1.3981623' />
-  <node id='21636737' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9478897' lon='-1.4081636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359704' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9685779' lon='-1.3524708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223086' timestamp='2007-06-11T21:51:52+01:00' visible='true' lat='50.9836626' lon='-1.3563292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705525' timestamp='2007-05-28T12:56:42+01:00' visible='true' lat='50.9844637' lon='-1.3528577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914260' timestamp='2007-06-03T16:05:27+01:00' visible='true' lat='50.9829628' lon='-1.3599607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872372' timestamp='2007-06-02T19:03:57+01:00' visible='true' lat='50.9174352' lon='-1.3501744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909674' timestamp='2007-06-03T14:54:22+01:00' visible='true' lat='50.9677861' lon='-1.3542909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636752' timestamp='2006-12-18T21:21:43+00:00' user='nickw' visible='true' lat='50.9470713' lon='-1.3949443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632892' timestamp='2007-05-26T20:07:51+01:00' visible='true' lat='50.9677145' lon='-1.3637036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132662' timestamp='2007-05-15T20:24:18+01:00' user='nickw' visible='true' lat='50.926599' lon='-1.3791153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924099' timestamp='2007-02-18T20:19:18+00:00' visible='true' lat='50.9397728' lon='-1.3739921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659204' timestamp='2007-11-20T16:53:21+00:00' user='Nick Dyer' visible='true' lat='50.9047087' lon='-1.4073582' />
-  <node id='387820' timestamp='2007-04-05T14:21:00+01:00' user='Dean Earley' visible='true' lat='50.9307' lon='-1.38878' />
-  <node id='325235' timestamp='2006-11-11T17:20:02+00:00' user='Dean Earley' visible='true' lat='50.9355281' lon='-1.3363888' />
-  <node id='21613430' timestamp='2006-12-16T17:46:54+00:00' user='David Currie' visible='true' lat='50.9757981' lon='-1.4020249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998527' timestamp='2007-06-05T23:13:20+01:00' user='nickw' visible='true' lat='50.962202' lon='-1.4543343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160377032' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9219894' lon='-1.468947' />
-  <node id='31487478' timestamp='2007-07-09T12:19:39+01:00' visible='true' lat='50.9075013' lon='-1.392211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141436' timestamp='2006-11-21T23:12:46+00:00' user='nickw' visible='true' lat='50.923286' lon='-1.4227702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632854' timestamp='2007-05-26T20:07:38+01:00' visible='true' lat='50.9671067' lon='-1.3620554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668311' timestamp='2007-01-04T21:06:39+00:00' user='nickw' visible='true' lat='50.9843821' lon='-1.4131043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271054' timestamp='2007-01-25T22:42:26+00:00' user='Dean Earley' visible='true' lat='50.926' lon='-1.36418'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Midanbury' />
-  </node>
-  <node id='24949976' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9892373' lon='-1.382774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183716' timestamp='2007-04-29T02:25:34+01:00' user='Dean Earley' visible='true' lat='50.9519039' lon='-1.407715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298258' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='50.967206' lon='-1.3807518' />
-  <node id='13071410' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9224432' lon='-1.3556975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684887' timestamp='2007-11-20T11:49:42+00:00' user='Nick Dyer' visible='true' lat='50.9630977' lon='-1.4220138' />
-  <node id='14743159' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9236234' lon='-1.4285145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896415' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9661695' lon='-1.3869363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125571494' timestamp='2007-11-20T11:54:53+00:00' user='Nick Dyer' visible='true' lat='50.9630923' lon='-1.4250951' />
-  <node id='28341787' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.913217' lon='-1.3614707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419582' timestamp='2007-04-03T00:51:31+01:00' user='Dean Earley' visible='true' lat='50.9202174' lon='-1.4307417' />
-  <node id='25895699' timestamp='2007-02-13T18:31:38+00:00' user='Dean Earley' visible='true' lat='50.9554963' lon='-1.4041377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008448' timestamp='2007-05-12T15:12:16+01:00' user='nickw' visible='true' lat='50.9310395' lon='-1.3509191'>
-    <tag k='name' v='KENWYN CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509861' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.99183' lon='-1.3592788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252902' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9458724' lon='-1.430634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59766051' timestamp='2007-09-25T17:25:34+01:00' user='mike l' visible='true' lat='50.9378648' lon='-1.3924904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971221' timestamp='2006-11-12T22:57:21+00:00' user='Dean Earley' visible='true' lat='50.9068511' lon='-1.4150341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924313' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9849312' lon='-1.3698201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710190' timestamp='2007-05-28T13:19:32+01:00' visible='true' lat='50.9868699' lon='-1.3708899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973094' timestamp='2006-11-13T00:42:41+00:00' user='Dean Earley' visible='true' lat='50.9015113' lon='-1.4083687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889417' timestamp='2007-09-23T16:33:10+01:00' user='mike l' visible='true' lat='50.9419443' lon='-1.373328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133038' timestamp='2007-05-15T20:36:41+01:00' user='nickw' visible='true' lat='50.9332678' lon='-1.3742861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661162' timestamp='2007-04-05T14:21:00+01:00' user='Dean Earley' visible='true' lat='50.8974547' lon='-1.3617015' />
-  <node id='21419419' timestamp='2007-05-01T23:50:33+01:00' user='nickw' visible='true' lat='50.9412129' lon='-1.3721402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961059' timestamp='2006-11-11T17:12:51+00:00' user='Dean Earley' visible='true' lat='50.9256288' lon='-1.3155163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='382998' timestamp='2007-04-05T14:21:00+01:00' user='Dean Earley' visible='true' lat='50.9275624' lon='-1.4187908' />
-  <node id='25783088' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.942555' lon='-1.3538148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089072' timestamp='2007-06-08T18:11:59+01:00' visible='true' lat='50.9665302' lon='-1.3744382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723037' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='50.9922646' lon='-1.3596413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9281157' timestamp='2007-02-18T20:18:23+00:00' visible='true' lat='50.9157548' lon='-1.3591341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657776' timestamp='2007-04-05T14:21:00+01:00' user='Dean Earley' visible='true' lat='50.8994327' lon='-1.3644588' />
-  <node id='298305' timestamp='2006-11-11T17:20:02+00:00' user='Dean Earley' visible='true' lat='50.949172' lon='-1.3807364' />
-  <node id='29794380' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.9222316' lon='-1.3639005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099534' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9550988' lon='-1.3640764' />
-  <node id='25282135' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9768194' lon='-1.405788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243981297' timestamp='2008-01-29T12:06:34+00:00' user='Dean Earley' visible='true' lat='50.9654042' lon='-1.3500395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762102' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9413604' lon='-1.3519081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931344' timestamp='2007-06-03T22:43:03+01:00' visible='true' lat='50.9940101' lon='-1.3729349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348304' timestamp='2007-04-30T23:48:45+01:00' user='nickw' visible='true' lat='50.9301169' lon='-1.3665514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929005' timestamp='2007-06-03T21:58:04+01:00' visible='true' lat='50.9743735' lon='-1.363849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675686' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.8991674' lon='-1.4443269' />
-  <node id='29998941' timestamp='2007-06-05T23:28:52+01:00' user='nickw' visible='true' lat='50.9861827' lon='-1.4363548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241442' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.9451222' lon='-1.4499728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179441' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9629574' lon='-1.4201884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976779' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.9298917' lon='-1.4169862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231386' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true' lat='50.9043502' lon='-1.3729197'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Peartree Inn' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009233' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9294644' lon='-1.3550932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816727' timestamp='2007-05-31T22:13:28+01:00' visible='true' lat='50.9900588' lon='-1.3569349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071337' timestamp='2006-08-11T02:48:09+01:00' user='Dean Earley' visible='true' lat='50.9177644' lon='-1.3654858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392380' timestamp='2007-05-20T17:56:43+01:00' visible='true' lat='50.9645196' lon='-1.3566884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984770' timestamp='2007-01-10T00:14:41+00:00' user='nickw' visible='true' lat='50.9448535' lon='-1.3954529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928423' timestamp='2007-06-03T21:48:28+01:00' visible='true' lat='50.9802888' lon='-1.3678191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372762' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9311875' lon='-1.4385171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290750' timestamp='2007-06-13T09:24:02+01:00' visible='true' lat='50.9650283' lon='-1.3765609'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874140' timestamp='2007-06-02T19:43:15+01:00' visible='true' lat='50.959557' lon='-1.3618472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579848' timestamp='2006-12-14T14:09:17+00:00' user='David Currie' visible='true' lat='50.9772494' lon='-1.4037274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980714' timestamp='2008-01-29T12:06:37+00:00' user='Dean Earley' visible='true' lat='50.9573186' lon='-1.345441' />
-  <node id='21507798' timestamp='2007-05-22T00:19:43+01:00' user='Dean Earley' visible='true' lat='50.9438063' lon='-1.4037199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91126061' timestamp='2007-10-29T08:17:58+00:00' user='nickw' visible='true' lat='50.9297939' lon='-1.4463508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269050' timestamp='2006-07-01T00:43:24+01:00' user='Dean Earley' visible='true' lat='50.9482982' lon='-1.3719104' />
-  <node id='2430249' timestamp='2007-08-17T10:29:42+01:00' user='Edward' visible='true' lat='50.9324501' lon='-1.2946051'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Hedge End' />
-  </node>
-  <node id='21141435' timestamp='2006-11-21T23:12:46+00:00' user='nickw' visible='true' lat='50.9230856' lon='-1.422651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663603' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9053678' lon='-1.4061033' />
-  <node id='28250099' timestamp='2007-11-28T12:24:19+00:00' user='Dean Earley' visible='true' lat='50.9199388' lon='-1.4387958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250052' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.9168128' lon='-1.4493013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600665' timestamp='2006-12-16T11:37:20+00:00' user='David Currie' visible='true' lat='50.9702933' lon='-1.3951971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838972' timestamp='2007-10-07T23:27:43+01:00' user='alfabet' visible='true' lat='50.9889714' lon='-1.3958457'>
-    <tag k='leisure' v='playground' />
-    <tag k='created_by' v='Potlatch 0.4' />
-  </node>
-  <node id='325171' timestamp='2006-11-11T17:20:08+00:00' user='Dean Earley' visible='true' lat='50.9506185' lon='-1.399164' />
-  <node id='15360190' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9550515' lon='-1.3713442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526768' timestamp='2007-05-23T09:49:12+01:00' visible='true' lat='50.9811995' lon='-1.3497302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091858' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9077108' lon='-1.4213575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783099' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9455843' lon='-1.3536161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163074' timestamp='2008-01-04T19:32:05+00:00' user='nickw' visible='true' lat='50.9722469' lon='-1.3870895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668066' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9844072' lon='-1.3960189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728568' timestamp='2007-03-23T22:53:04+00:00' user='nickw' visible='true' lat='50.9009104' lon='-1.3725132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718197' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.9355314' lon='-1.4452281' />
-  <node id='700433' timestamp='2007-04-05T14:21:01+01:00' user='Dean Earley' visible='true' lat='50.9267417' lon='-1.3863405' />
-  <node id='13564840' timestamp='2006-10-27T22:49:34+01:00' user='Dean Earley' visible='true' lat='50.9334417' lon='-1.3511743'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30956692' timestamp='2007-06-26T23:49:19+01:00' user='nickw' visible='true' lat='50.9301506' lon='-1.3475257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613479' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9704171' lon='-1.3909429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956730' timestamp='2007-06-26T23:49:23+01:00' user='nickw' visible='true' lat='50.9269075' lon='-1.3514594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239968' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.9074329' lon='-1.4181546' />
-  <node id='29998540' timestamp='2007-06-05T23:13:22+01:00' user='nickw' visible='true' lat='50.9645042' lon='-1.4353416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831100' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.9113211' lon='-1.4071056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689155' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9397415' lon='-1.3747884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161129' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9742913' lon='-1.3538674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388864' timestamp='2007-04-05T14:21:01+01:00' user='Dean Earley' visible='true' lat='50.9305' lon='-1.40202' />
-  <node id='26727687' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9141519' lon='-1.3581595'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='anglican' />
-    <tag k='name' v='Bitterne Church' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325669' timestamp='2007-04-29T20:52:52+01:00' user='Dean Earley' visible='true' lat='50.9388725' lon='-1.4288668' />
-  <node id='21092027' timestamp='2006-11-19T12:29:33+00:00' user='nickw' visible='true' lat='50.9739869' lon='-1.4380257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830663' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9240331' lon='-1.3642448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133585' timestamp='2007-05-15T20:41:27+01:00' user='nickw' visible='true' lat='50.933321' lon='-1.3723143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963766' timestamp='2007-05-22T00:19:44+01:00' user='Dean Earley' visible='true' lat='50.9385607' lon='-1.4035771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932238' timestamp='2007-05-10T20:49:00+01:00' user='Dean Earley' visible='true' lat='50.9703136' lon='-1.4441433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228109' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9493597' lon='-1.4277246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173737' timestamp='2007-09-10T19:07:16+01:00' user='mike l' visible='true' lat='50.9431917' lon='-1.4327544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111044' timestamp='2006-10-22T23:24:05+01:00' user='Ben' visible='true' lat='50.9741477' lon='-1.3837193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306301' timestamp='2006-09-02T19:02:10+01:00' user='Dean Earley' visible='true' lat='50.9231925' lon='-1.4052136' />
-  <node id='28179493' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9550594' lon='-1.4054622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152655' timestamp='2008-02-03T06:22:03+00:00' user='sladen' visible='true' lat='50.9080129' lon='-1.3983461' />
-  <node id='28935754' timestamp='2007-05-11T00:50:44+01:00' visible='true' lat='50.940341' lon='-1.4450323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964141' timestamp='2006-09-08T02:12:01+01:00' user='Dean Earley' visible='true' lat='50.9186006' lon='-1.3798545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001305' timestamp='2007-05-15T20:38:59+01:00' user='nickw' visible='true' lat='50.9318249' lon='-1.3754503'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964844' timestamp='2006-11-12T10:50:41+00:00' user='nickw' visible='true' lat='50.9898025' lon='-1.4287749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227263' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.9261565' lon='-1.4143754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577085' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9192656' lon='-1.4694718' />
-  <node id='29632175' timestamp='2007-05-26T19:20:21+01:00' visible='true' lat='50.958114' lon='-1.3683098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537338' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.9343881' lon='-1.349326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17768854' timestamp='2007-01-28T00:56:03+00:00' visible='true' lat='50.9401426' lon='-1.3772526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398379' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9489625' lon='-1.4467506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600476' timestamp='2007-05-04T01:58:40+01:00' user='Dean Earley' visible='true' lat='50.9410994' lon='-1.4509887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162245' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9730413' lon='-1.3869803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254678' timestamp='2005-11-15T15:42:13+00:00' user='nickw' visible='true' lat='50.9698971' lon='-1.3595597' />
-  <node id='29026771' timestamp='2007-05-13T10:10:55+01:00' user='nickw' visible='true' lat='50.9209646' lon='-1.4081768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325077' timestamp='2006-11-11T17:20:15+00:00' user='Dean Earley' visible='true' lat='50.9276064' lon='-1.5758145' />
-  <node id='13705875' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8830895' lon='-1.3951949' />
-  <node id='29000964' timestamp='2007-05-12T09:31:58+01:00' user='nickw' visible='true' lat='50.9184487' lon='-1.4091765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972784' timestamp='2006-11-13T00:06:58+00:00' user='Dean Earley' visible='true' lat='50.9062689' lon='-1.415605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380417' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.9452151' lon='-1.3795879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796771' timestamp='2007-05-30T22:22:04+01:00' user='nickw' visible='true' lat='50.9133829' lon='-1.3542304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816774' timestamp='2007-05-31T22:15:44+01:00' visible='true' lat='50.9878955' lon='-1.3609704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194334' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9443559' lon='-1.4358579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704893' timestamp='2006-08-25T22:27:17+01:00' user='dmgroom' visible='true' lat='50.9014143' lon='-1.4408751' />
-  <node id='31163576' timestamp='2007-07-01T22:15:23+01:00' visible='true' lat='50.9647833' lon='-1.3518312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581824' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9153642' lon='-1.4497823' />
-  <node id='30504758' timestamp='2007-06-17T21:50:34+01:00' visible='true' lat='50.9815893' lon='-1.3582254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726307' timestamp='2007-04-20T23:53:16+01:00' user='Dean Earley' visible='true' lat='50.9175226' lon='-1.3736936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29862363' timestamp='2007-06-02T12:32:54+01:00' visible='true' lat='50.9315435' lon='-1.4291989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636933' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9087365' lon='-1.4159453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319609' timestamp='2007-02-18T21:25:26+00:00' visible='true' lat='50.9170604' lon='-1.3970017' />
-  <node id='19890082' timestamp='2006-10-27T00:48:04+01:00' user='Dean Earley' visible='true' lat='50.9193805' lon='-1.3891431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091843' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9086629' lon='-1.4177815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675141' timestamp='2007-02-06T00:16:35+00:00' user='Dean Earley' visible='true' lat='50.90296' lon='-1.4014429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561815' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9223029' lon='-1.4429607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342557' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9069035' lon='-1.3673314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091401' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9829945' lon='-1.443221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110484' timestamp='2007-10-29T07:57:17+00:00' user='nickw' visible='true' lat='50.9271518' lon='-1.4368867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903636' timestamp='2008-01-01T18:33:43+00:00' user='Milliams' visible='true' lat='50.9478486' lon='-1.3644734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359721' timestamp='2007-05-28T19:39:38+01:00' visible='true' lat='50.9706222' lon='-1.3535948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296290' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9769562' lon='-1.3638821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817622' timestamp='2007-05-31T22:21:08+01:00' visible='true' lat='50.9867252' lon='-1.3640039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325013' timestamp='2006-09-02T12:59:32+01:00' user='Dean Earley' visible='true' lat='50.9576761' lon='-1.4178933' />
-  <node id='19228094' timestamp='2007-04-29T08:58:12+01:00' user='Dean Earley' visible='true' lat='50.940985' lon='-1.4092875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160209418' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9234829' lon='-1.3855732' />
-  <node id='30223564' timestamp='2007-06-11T21:58:09+01:00' visible='true' lat='50.9842349' lon='-1.3534837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595008' timestamp='2006-08-04T11:59:32+01:00' user='nickw' visible='true' lat='50.9179499' lon='-1.4110635'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29171750' timestamp='2007-05-16T23:47:59+01:00' user='nickw' visible='true' lat='50.9416673' lon='-1.3915746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579406' timestamp='2006-12-14T13:52:52+00:00' user='David Currie' visible='true' lat='50.9762112' lon='-1.4047854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254537' timestamp='2006-09-02T18:32:40+01:00' user='Dean Earley' visible='true' lat='50.9123001' lon='-1.4004976' />
-  <node id='21600430' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9217702' lon='-1.4454571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997544' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0009128' lon='-1.3489211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708016' timestamp='2007-05-28T12:04:00+01:00' visible='true' lat='50.985542' lon='-1.3627488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998105' timestamp='2007-06-05T23:00:26+01:00' user='nickw' visible='true' lat='50.9846319' lon='-1.3939194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59936560' timestamp='2007-09-26T21:57:27+01:00' visible='true' lat='50.9064734' lon='-1.4111475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180208' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.962297' lon='-1.4249377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447528' timestamp='2007-03-09T21:07:40+00:00' user='nickw' visible='true' lat='50.9080435' lon='-1.3886052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133120' timestamp='2006-10-28T01:55:38+01:00' user='Dean Earley' visible='true' lat='50.9278486' lon='-1.3547097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254837' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9064867' lon='-1.4141243' />
-  <node id='325024' timestamp='2006-11-11T17:20:15+00:00' user='Dean Earley' visible='true' lat='50.9602356' lon='-1.4318314' />
-  <node id='29461229' timestamp='2007-12-10T19:19:53+00:00' user='sladen' visible='true' lat='50.905636' lon='-1.3967141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141401' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9267861' lon='-1.4263264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507785' timestamp='2007-05-22T00:19:44+01:00' user='Dean Earley' visible='true' lat='50.9485662' lon='-1.400425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474847' timestamp='2007-04-05T14:21:02+01:00' user='Dean Earley' visible='true' lat='50.9379275' lon='-1.3582263' />
-  <node id='28243552' timestamp='2007-04-29T20:24:31+01:00' user='Dean Earley' visible='true' lat='50.9366489' lon='-1.4145449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325692' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9224' lon='-1.41018' />
-  <node id='325258' timestamp='2006-11-11T17:20:15+00:00' user='Dean Earley' visible='true' lat='50.9239417' lon='-1.3154991' />
-  <node id='122340930' timestamp='2007-11-18T19:14:39+00:00' user='nickw' visible='true' lat='50.9197219' lon='-1.4394398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706142' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9079142' lon='-1.3849673'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='160221500' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9142843' lon='-1.3906287' />
-  <node id='14728174' timestamp='2007-04-29T02:05:43+01:00' user='Dean Earley' visible='true' lat='50.9520444' lon='-1.4042936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903066' timestamp='2007-05-09T23:03:40+01:00' visible='true' lat='50.9424296' lon='-1.3692484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148738' timestamp='2008-02-03T06:07:07+00:00' user='sladen' visible='true' lat='50.9029955' lon='-1.4017965' />
-  <node id='13564729' timestamp='2006-08-15T12:09:57+01:00' user='nickw' visible='true' lat='50.9279494' lon='-1.3544532'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30290720' timestamp='2007-06-13T09:23:56+01:00' visible='true' lat='50.9705688' lon='-1.3791103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132720' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='50.9853308' lon='-1.3638419' />
-  <node id='254884' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.9111283' lon='-1.3995635' />
-  <node id='29909659' timestamp='2007-06-03T14:54:17+01:00' visible='true' lat='50.9682631' lon='-1.3541907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227214' timestamp='2006-10-23T20:52:55+01:00' user='nickw' visible='true' lat='50.9314284' lon='-1.4128416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440006' timestamp='2007-04-18T02:00:19+01:00' visible='true' lat='50.9283645' lon='-1.3828843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359703' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9684892' lon='-1.3524852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387805' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9276' lon='-1.40361' />
-  <node id='25640021' timestamp='2007-03-04T18:58:21+00:00' user='Dean Earley' visible='true' lat='50.912814' lon='-1.3696866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115442' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9274523' lon='-1.4436166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613494' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9783942' lon='-1.3993103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998898' timestamp='2007-06-05T23:28:47+01:00' user='nickw' visible='true' lat='50.9872832' lon='-1.4420367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091837' timestamp='2007-12-10T20:59:56+00:00' user='sladen' visible='true' lat='50.9116107' lon='-1.4243322'>
-    <tag k='name' v='QUEENSTOWN' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31517591' timestamp='2007-07-09T21:38:39+01:00' visible='true' lat='50.9255362' lon='-1.3918451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028809' timestamp='2007-02-18T20:18:28+00:00' visible='true' lat='50.922975' lon='-1.3614101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271232' timestamp='2007-09-13T21:14:24+01:00' user='mike l' visible='true' lat='50.9779088' lon='-1.4373672' />
-  <node id='254290' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9764016' lon='-1.342162' />
-  <node id='269324' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9838487' lon='-1.3844429' />
-  <node id='30229571' timestamp='2007-06-12T00:14:39+01:00' user='nickw' visible='true' lat='50.9338173' lon='-1.353179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419600' timestamp='2006-07-24T21:02:44+01:00' user='nickw' visible='true' lat='50.9173026' lon='-1.4310738' />
-  <node id='20976817' timestamp='2006-11-13T21:50:51+00:00' user='nickw' visible='true' lat='50.9233633' lon='-1.4208485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463006' timestamp='2007-05-22T00:01:30+01:00' user='nickw' visible='true' lat='50.9081785' lon='-1.4036499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122324329' timestamp='2007-11-18T19:05:24+00:00' user='nickw' visible='true' lat='50.914784' lon='-1.4374481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275705' timestamp='2006-11-25T23:51:18+00:00' user='nickw' visible='true' lat='50.9238269' lon='-1.4333035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506812' timestamp='2007-06-17T22:03:34+01:00' visible='true' lat='50.9786039' lon='-1.3618304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423309' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9312' lon='-1.41013' />
-  <node id='90592369' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.913021' lon='-1.4431304' />
-  <node id='28583007' timestamp='2007-05-02T23:57:53+01:00' visible='true' lat='50.9397078' lon='-1.4317547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331367' timestamp='2007-11-28T12:24:03+00:00' user='Dean Earley' visible='true' lat='50.9703' lon='-1.41067' />
-  <node id='306322' timestamp='2005-12-11T21:52:40+00:00' user='nickw' visible='true' lat='50.9252787' lon='-1.3954139' />
-  <node id='24924298' timestamp='2008-01-04T19:25:08+00:00' user='nickw' visible='true' lat='50.970365' lon='-1.3834586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329519' timestamp='2007-04-29T02:33:43+01:00' user='Dean Earley' visible='true' lat='50.9501739' lon='-1.4044784' />
-  <node id='325182' timestamp='2006-11-11T17:20:22+00:00' user='Dean Earley' visible='true' lat='50.9535906' lon='-1.4065794' />
-  <node id='29872358' timestamp='2007-06-02T19:03:54+01:00' visible='true' lat='50.9177733' lon='-1.3506413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372735' timestamp='2007-05-01T10:05:15+01:00' visible='true' lat='50.9295205' lon='-1.4417885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2784526' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9402612' lon='-1.3587612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25305495' timestamp='2007-01-28T00:56:04+00:00' visible='true' lat='50.9246518' lon='-1.3871489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929189' timestamp='2007-06-03T22:00:37+01:00' visible='true' lat='50.9770546' lon='-1.3624071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632434' timestamp='2007-06-02T19:44:17+01:00' visible='true' lat='50.9572743' lon='-1.3579868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232079' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.911449' lon='-1.4127294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325643' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9189658' lon='-1.4021438' />
-  <node id='28243928' timestamp='2007-04-29T20:34:32+01:00' user='Andy Street' visible='true' lat='50.9057912' lon='-1.3443998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949948' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9946893' lon='-1.3884161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127589' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.935127' lon='-1.4382911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636930' timestamp='2006-12-18T21:41:04+00:00' user='nickw' visible='true' lat='50.909438' lon='-1.416442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141418' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.92887' lon='-1.429073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243607' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.934628' lon='-1.4170545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339163' timestamp='2007-04-30T20:39:36+01:00' visible='true' lat='50.9684363' lon='-1.3600042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466068' timestamp='2007-05-22T00:37:27+01:00' user='Dean Earley' visible='true' lat='50.9401109' lon='-1.4284291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660056' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.9049673' lon='-1.4106781' />
-  <node id='21689125' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9410372' lon='-1.384841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319643' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9219742' lon='-1.3982248' />
-  <node id='25640006' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9092129' lon='-1.371982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874045' timestamp='2007-05-08T14:50:17+01:00' visible='true' lat='50.9388979' lon='-1.4397596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28936014' timestamp='2007-05-11T00:59:51+01:00' visible='true' lat='50.9419626' lon='-1.4405617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831105' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9112046' lon='-1.4066125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003030' timestamp='2007-05-22T00:19:45+01:00' user='Dean Earley' visible='true' lat='50.9419132' lon='-1.4057462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504288' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='50.998864' lon='-1.3472779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254567' timestamp='2006-10-27T00:58:33+01:00' user='Dean Earley' visible='true' lat='50.9113978' lon='-1.3838413' />
-  <node id='28194402' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9466254' lon='-1.4391915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726309' timestamp='2006-08-11T02:50:51+01:00' user='Dean Earley' visible='true' lat='50.9175568' lon='-1.3737546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662868' timestamp='2007-10-28T21:47:41+00:00' user='Nick Dyer' visible='true' lat='50.9061039' lon='-1.4078113' />
-  <node id='28194383' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9444912' lon='-1.4400403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636816' timestamp='2007-04-29T02:33:44+01:00' user='Dean Earley' visible='true' lat='50.9510484' lon='-1.4122702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796835' timestamp='2007-05-30T22:23:40+01:00' user='nickw' visible='true' lat='50.9181349' lon='-1.3515303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508726' timestamp='2007-06-17T22:15:44+01:00' visible='true' lat='50.9753229' lon='-1.3529145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280983' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9149437' lon='-1.357227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984676' timestamp='2007-01-25T22:42:27+00:00' user='Dean Earley' visible='true' lat='50.9411329' lon='-1.3788713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671365' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9148347' lon='-1.4382246' />
-  <node id='48967848' timestamp='2007-12-10T21:06:05+00:00' user='sladen' visible='true' lat='50.9047805' lon='-1.4168306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87242888' timestamp='2007-10-25T21:08:43+01:00' user='Nick Dyer' visible='true' lat='50.9365588' lon='-1.4478237' />
-  <node id='33130193' timestamp='2007-07-30T16:06:28+01:00' visible='true' lat='50.9149159' lon='-1.4098886'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342524' timestamp='2007-04-30T22:13:31+01:00' user='nickw' visible='true' lat='50.9098849' lon='-1.3639739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677155' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8955674' lon='-1.4404301' />
-  <node id='30161988' timestamp='2007-09-16T10:21:43+01:00' user='mike l' visible='true' lat='50.9802241' lon='-1.3804659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577055' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9066998' lon='-1.4207543' />
-  <node id='21677597' timestamp='2006-12-22T14:24:06+00:00' user='nickw' visible='true' lat='50.9059734' lon='-1.4032319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229560' timestamp='2007-06-12T00:14:36+01:00' user='nickw' visible='true' lat='50.9333603' lon='-1.3543015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976696' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9364177' lon='-1.4219627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780860' timestamp='2007-06-22T21:11:24+01:00' user='Steve Chilton' visible='true' lat='50.9078111' lon='-1.4138805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689071' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9318947' lon='-1.3962346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266199' timestamp='2007-01-19T18:20:24+00:00' user='Dean Earley' visible='true' lat='50.9496101' lon='-1.3695532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924213' timestamp='2007-01-06T14:37:59+00:00' user='nickw' visible='true' lat='50.957227' lon='-1.3618237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27434182' timestamp='2007-04-17T22:04:00+01:00' visible='true' lat='50.9288133' lon='-1.3892384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998088' timestamp='2007-06-05T23:00:24+01:00' user='nickw' visible='true' lat='50.9881524' lon='-1.4045382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324983' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.96056' lon='-1.4040768' />
-  <node id='15359691' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9672701' lon='-1.3515412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248234' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8944252' lon='-1.3975125' />
-  <node id='142612675' timestamp='2007-11-29T22:26:19+00:00' user='nickw' visible='true' lat='50.9120641' lon='-1.4143804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950461' timestamp='2007-09-10T23:28:32+01:00' visible='true' lat='50.9118326' lon='-1.3956939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246358' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.9349081' lon='-1.4315359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830637' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9268879' lon='-1.3634375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200337' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.941299' lon='-1.4454179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952642' timestamp='2007-02-11T00:33:17+00:00' visible='true' lat='50.9305212' lon='-1.3795013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305584' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9952736' lon='-1.3936973' />
-  <node id='28194428' timestamp='2007-04-29T21:10:29+01:00' visible='true' lat='50.9472635' lon='-1.4347908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254254' timestamp='2007-02-13T19:46:57+00:00' user='Dean Earley' visible='true' lat='50.962728' lon='-1.3810938'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='331350' timestamp='2007-12-06T22:10:50+00:00' user='Dean Earley' visible='true' lat='51.0117' lon='-1.38462' />
-  <node id='29816629' timestamp='2007-05-31T22:10:47+01:00' visible='true' lat='50.9913843' lon='-1.3597343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507747' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.9321043' lon='-1.3977283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958698' timestamp='2007-09-10T23:55:16+01:00' visible='true' lat='50.9057312' lon='-1.4090038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707706' timestamp='2007-05-28T11:58:07+01:00' visible='true' lat='50.9869062' lon='-1.3602614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157201967' timestamp='2007-12-08T20:09:10+00:00' user='nickw' visible='true' lat='50.9425686' lon='-1.4429785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236161' timestamp='2007-04-29T19:26:10+01:00' user='Andy Street' visible='true' lat='50.9065174' lon='-1.3559412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704450' timestamp='2007-05-28T10:36:07+01:00' visible='true' lat='50.9829088' lon='-1.3576482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915353' timestamp='2006-07-19T01:48:52+01:00' user='Dean Earley' visible='true' lat='50.9111172' lon='-1.3499113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='447394' timestamp='2006-06-11T01:09:46+01:00' user='Dean Earley' visible='true' lat='50.9244' lon='-1.40435' />
-  <node id='30229590' timestamp='2007-06-12T00:14:42+01:00' user='nickw' visible='true' lat='50.9338924' lon='-1.3503381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17769055' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9122766' lon='-1.3917273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700412' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9256089' lon='-1.3887546' />
-  <node id='29730500' timestamp='2007-05-28T19:36:31+01:00' visible='true' lat='50.9716901' lon='-1.3663016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275777' timestamp='2006-11-25T23:58:55+00:00' user='nickw' visible='true' lat='50.9141455' lon='-1.4267773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91130463' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true' lat='50.9291123' lon='-1.4309875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783073' timestamp='2007-02-11T18:07:06+00:00' user='nickw' visible='true' lat='50.9399261' lon='-1.3621588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639979' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9006613' lon='-1.3797232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727957' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9170685' lon='-1.4027083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179510' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9534001' lon='-1.4027815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92682867' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9622443' lon='-1.4251402' />
-  <node id='254455' timestamp='2005-11-15T15:40:29+00:00' user='nickw' visible='true' lat='50.9097022' lon='-1.4016533' />
-  <node id='25639964' timestamp='2007-03-24T13:44:05+00:00' user='Dean Earley' visible='true' lat='50.8999477' lon='-1.3775335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342587' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9075284' lon='-1.3643502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636771' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.9477973' lon='-1.40305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911928' timestamp='2007-06-03T15:38:20+01:00' visible='true' lat='50.9867227' lon='-1.3569124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971172' timestamp='2007-09-10T23:55:27+01:00' visible='true' lat='50.9065706' lon='-1.3988918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66584633' timestamp='2007-10-12T14:01:07+01:00' user='SteveC' visible='true' lat='50.9319957' lon='-1.4496028' />
-  <node id='91127606' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.93626' lon='-1.4358027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746413' timestamp='2007-02-18T20:18:31+00:00' visible='true' lat='50.9882911' lon='-1.3434871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710126' timestamp='2007-05-28T13:11:10+01:00' visible='true' lat='50.9874283' lon='-1.3654828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684352' timestamp='2007-10-31T12:25:03+00:00' user='Dean Earley' visible='true' lat='50.9612519' lon='-1.4224058' />
-  <node id='25471848' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9385115' lon='-1.3664989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632837' timestamp='2007-05-26T20:07:23+01:00' visible='true' lat='50.9681407' lon='-1.3628159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600579' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.97942' lon='-1.4023664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341752' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.913981' lon='-1.3517161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953500' timestamp='2007-06-04T21:24:02+01:00' visible='true' lat='50.9901254' lon='-1.3693151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160260408' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9494889' lon='-1.3688105' />
-  <node id='25296390' timestamp='2007-01-19T09:58:46+00:00' user='Dean Earley' visible='true' lat='50.9755753' lon='-1.3652692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874049' timestamp='2007-10-12T14:12:00+01:00' user='SteveC' visible='true' lat='50.936745' lon='-1.4390456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721067' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9713689' lon='-1.3600251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348126' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9326966' lon='-1.3663517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298288' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9533334' lon='-1.400482' />
-  <node id='700516' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9251558' lon='-1.3739734' />
-  <node id='13564677' timestamp='2006-10-27T22:27:57+01:00' user='Dean Earley' visible='true' lat='50.9307775' lon='-1.3579455'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='160283360' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.917017' lon='-1.4866045' />
-  <node id='254388' timestamp='2007-01-19T20:35:57+00:00' user='Dean Earley' visible='true' lat='50.9212853' lon='-1.369949' />
-  <node id='169424888' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true' lat='50.9329822' lon='-1.4427602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743114' timestamp='2007-04-03T00:51:36+01:00' user='Dean Earley' visible='true' lat='50.9085878' lon='-1.4154729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200352' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.9416391' lon='-1.4465793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372747' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9306874' lon='-1.4406217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931366' timestamp='2007-06-03T22:43:06+01:00' visible='true' lat='50.9952317' lon='-1.3728211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668285' timestamp='2007-01-04T21:06:34+00:00' user='nickw' visible='true' lat='50.9892345' lon='-1.3989592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976670' timestamp='2007-04-29T20:52:54+01:00' user='Dean Earley' visible='true' lat='50.9376935' lon='-1.4246303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071239' timestamp='2006-08-11T02:47:59+01:00' user='Dean Earley' visible='true' lat='50.9209606' lon='-1.3662466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466083' timestamp='2007-05-22T00:37:44+01:00' user='Dean Earley' visible='true' lat='50.9438012' lon='-1.4458958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998074' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9865954' lon='-1.4125942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999044' timestamp='2007-06-05T23:29:04+01:00' user='nickw' visible='true' lat='50.9987123' lon='-1.429918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342574' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9064775' lon='-1.3656626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530600' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9484095' lon='-1.3715227' />
-  <node id='28418547' timestamp='2007-05-02T00:35:25+01:00' visible='true' lat='50.9614723' lon='-1.3741705'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Cricketers' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613415' timestamp='2006-12-16T17:46:52+00:00' user='David Currie' visible='true' lat='50.9902868' lon='-1.4098045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216417' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9211201' lon='-1.3570348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953379' timestamp='2007-06-04T21:17:01+01:00' visible='true' lat='51.003583' lon='-1.3891187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254307' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9867965' lon='-1.3467029' />
-  <node id='442384' timestamp='2007-04-05T14:21:03+01:00' user='Dean Earley' visible='true' lat='50.9211484' lon='-1.3973672' />
-  <node id='28194327' timestamp='2007-04-29T08:20:21+01:00' visible='true' lat='50.9448848' lon='-1.4332931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170457' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9494247' lon='-1.3962547' />
-  <node id='9727813' timestamp='2007-02-04T22:51:55+00:00' user='Dean Earley' visible='true' lat='50.9092294' lon='-1.3706832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219678' timestamp='2007-12-08T20:21:41+00:00' user='nickw' visible='true' lat='50.9444588' lon='-1.4439023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073232' timestamp='2007-04-05T14:21:04+01:00' user='Dean Earley' visible='true' lat='50.9340382' lon='-1.3919594' />
-  <node id='28194884' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9401301' lon='-1.4100931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561785' timestamp='2006-12-13T20:19:44+00:00' user='nickw' visible='true' lat='50.9244692' lon='-1.4348148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001335' timestamp='2007-05-12T09:40:16+01:00' user='nickw' visible='true' lat='50.9234989' lon='-1.3803051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474647' timestamp='2007-04-05T14:21:04+01:00' user='Dean Earley' visible='true' lat='50.9273727' lon='-1.352309' />
-  <node id='51949469' timestamp='2007-09-23T16:48:15+01:00' user='mike l' visible='true' lat='50.9456206' lon='-1.4505249' />
-  <node id='17769060' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9075141' lon='-1.392989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659230' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.90297' lon='-1.4058716' />
-  <node id='20957243' timestamp='2007-01-28T00:07:22+00:00' visible='true' lat='50.9219695' lon='-1.4077072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773938' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9216485' lon='-1.4736076' />
-  <node id='325273' timestamp='2006-11-11T17:20:47+00:00' user='Dean Earley' visible='true' lat='50.9192451' lon='-1.316139' />
-  <node id='28384699' timestamp='2007-05-02T00:35:40+01:00' visible='true' lat='50.9694946' lon='-1.3612477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102965' timestamp='2006-10-27T22:27:53+01:00' user='Dean Earley' visible='true' lat='50.9277615' lon='-1.3556617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110503' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true' lat='50.9305953' lon='-1.4313141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028899' timestamp='2006-09-08T23:06:54+01:00' user='Dean Earley' visible='true' lat='50.9352832' lon='-1.3514921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92720596' timestamp='2007-10-30T18:01:30+00:00' user='Nick Dyer' visible='true' lat='50.9037032' lon='-1.420402' />
-  <node id='29000492' timestamp='2007-05-12T09:26:08+01:00' user='nickw' visible='true' lat='50.9201927' lon='-1.4113171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346843' timestamp='2007-03-04T18:58:02+00:00' user='Dean Earley' visible='true' lat='50.9161294' lon='-1.3702365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998565' timestamp='2007-06-05T23:13:26+01:00' user='nickw' visible='true' lat='50.962252' lon='-1.4334344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161360' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.974221' lon='-1.3568543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984706' timestamp='2007-05-15T20:58:26+01:00' user='nickw' visible='true' lat='50.9451226' lon='-1.3814071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746398' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9964279' lon='-1.337173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298245' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='50.9976193' lon='-1.357167' />
-  <node id='17722362' timestamp='2007-05-22T00:19:45+01:00' user='Dean Earley' visible='true' lat='50.9470876' lon='-1.3936896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303130' timestamp='2007-01-19T18:27:12+00:00' user='Dean Earley' visible='true' lat='50.961122' lon='-1.3884302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66586255' timestamp='2007-10-12T14:02:05+01:00' user='SteveC' visible='true' lat='50.9327531' lon='-1.4507443' />
-  <node id='113962288' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9579994' lon='-1.3661089' />
-  <node id='14743182' timestamp='2007-02-11T00:33:25+00:00' visible='true' lat='50.9097625' lon='-1.408224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209168' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.9424731' lon='-1.4482556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677149' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8962171' lon='-1.4380355' />
-  <node id='29872365' timestamp='2007-06-02T19:03:56+01:00' visible='true' lat='50.9170595' lon='-1.3496163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533033' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9281667' lon='-1.4330422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512896' timestamp='2008-01-29T11:33:03+00:00' user='Dean Earley' visible='true' lat='50.9582627' lon='-1.3440772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914201' timestamp='2007-06-03T16:01:59+01:00' visible='true' lat='50.9840359' lon='-1.3580694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958664' timestamp='2007-09-10T23:55:14+01:00' visible='true' lat='50.9069552' lon='-1.4000331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976802' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9260628' lon='-1.4224792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296015' timestamp='2007-01-19T09:28:06+00:00' user='Dean Earley' visible='true' lat='50.9868904' lon='-1.3501864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657718' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9234072' lon='-1.3832644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110832' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9338415' lon='-1.3624589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009021' timestamp='2007-05-12T15:28:41+01:00' user='nickw' visible='true' lat='50.9319248' lon='-1.3509411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388939' timestamp='2007-04-05T14:21:04+01:00' user='Dean Earley' visible='true' lat='50.9426' lon='-1.40013' />
-  <node id='29816406' timestamp='2007-05-31T21:56:30+01:00' visible='true' lat='50.9892224' lon='-1.3552121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632239' timestamp='2007-05-26T19:23:15+01:00' visible='true' lat='50.9562258' lon='-1.3690501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464230' timestamp='2007-05-22T00:19:08+01:00' user='Dean Earley' visible='true' lat='50.9375013' lon='-1.4198833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621239' timestamp='2007-05-26T11:35:26+01:00' visible='true' lat='50.9424052' lon='-1.3740202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163089' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.9714196' lon='-1.3835557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243701' timestamp='2007-04-29T20:25:18+01:00' user='Dean Earley' visible='true' lat='50.9388833' lon='-1.410044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958668' timestamp='2007-09-10T23:55:14+01:00' visible='true' lat='50.9065554' lon='-1.3998732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998557' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.9648045' lon='-1.4283485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398394' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.9481018' lon='-1.4352746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290725' timestamp='2007-06-13T09:23:56+01:00' visible='true' lat='50.9698843' lon='-1.3816133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160401542' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9143923' lon='-1.450914' />
-  <node id='30226994' timestamp='2007-06-11T22:32:13+01:00' visible='true' lat='50.9820849' lon='-1.3539414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577049' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.901888' lon='-1.4155101' />
-  <node id='29998915' timestamp='2007-06-05T23:28:49+01:00' user='nickw' visible='true' lat='50.9858325' lon='-1.437229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928601' timestamp='2007-06-03T21:52:08+01:00' visible='true' lat='50.9782826' lon='-1.3611481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28343220' timestamp='2007-04-30T22:24:06+01:00' user='nickw' visible='true' lat='50.9123556' lon='-1.4045313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650903' timestamp='2007-04-05T14:21:04+01:00' user='Dean Earley' visible='true' lat='50.9293' lon='-1.40118' />
-  <node id='20133126' timestamp='2006-10-28T01:55:39+01:00' user='Dean Earley' visible='true' lat='50.9279895' lon='-1.3546066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957200' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9202745' lon='-1.4190381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123669' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9324053' lon='-1.4451873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282116' timestamp='2007-01-17T21:10:13+00:00' user='David Currie' visible='true' lat='50.9768631' lon='-1.4084452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254865' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9218108' lon='-1.4724832' />
-  <node id='324989' timestamp='2006-11-11T17:20:51+00:00' user='Dean Earley' visible='true' lat='50.9602555' lon='-1.4294259' />
-  <node id='29145251' timestamp='2007-08-12T23:11:12+01:00' user='Edward' visible='true' lat='50.924449' lon='-1.3800563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115461' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9280495' lon='-1.4433943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964111' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.920757' lon='-1.3781812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675788' timestamp='2007-10-28T20:44:34+00:00' user='Nick Dyer' visible='true' lat='50.9094861' lon='-1.450899' />
-  <node id='90659213' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9040038' lon='-1.4063866' />
-  <node id='160218970' timestamp='2007-12-10T19:13:23+00:00' user='sladen' visible='true' lat='50.9146361' lon='-1.3893927' />
-  <node id='28240295' timestamp='2007-04-29T20:02:52+01:00' user='Andy Street' visible='true' lat='50.9038062' lon='-1.3552453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675835' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.9273164' lon='-1.3775329' />
-  <node id='388875' timestamp='2007-04-05T14:21:04+01:00' user='Dean Earley' visible='true' lat='50.935026' lon='-1.3978259' />
-  <node id='29009085' timestamp='2007-05-12T15:31:59+01:00' user='nickw' visible='true' lat='50.9291886' lon='-1.3532466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20954597' timestamp='2006-11-10T08:43:41+00:00' user='nickw' visible='true' lat='50.9383811' lon='-1.4008129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549338' timestamp='2007-05-24T11:22:46+01:00' visible='true' lat='50.9610464' lon='-1.3580962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130947' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.9315397' lon='-1.3585588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740483' timestamp='2007-08-16T19:35:51+01:00' user='southglos' visible='true' lat='50.9950993' lon='-1.3509633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727961' timestamp='2006-12-18T23:27:24+00:00' visible='true' lat='50.9198284' lon='-1.394371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423521' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9309115' lon='-1.444064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275641' timestamp='2006-11-26T00:08:07+00:00' user='nickw' visible='true' lat='50.9147268' lon='-1.4308692'>
-    <tag k='name' v='TRAFALGAR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579410' timestamp='2006-12-14T13:52:54+00:00' user='David Currie' visible='true' lat='50.9778603' lon='-1.4042098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360195' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9574016' lon='-1.3718085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507760' timestamp='2007-04-03T00:53:55+01:00' user='Ben' visible='true' lat='50.9397474' lon='-1.3938046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372796' timestamp='2007-05-01T10:05:23+01:00' visible='true' lat='50.9287216' lon='-1.4406574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162412' timestamp='2008-01-04T19:28:05+00:00' user='nickw' visible='true' lat='50.9725471' lon='-1.3799375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856356' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.9476479' lon='-1.3936961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217209' timestamp='2007-03-25T19:24:47+01:00' user='Dean Earley' visible='true' lat='50.9164273' lon='-1.3590954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238984' timestamp='2007-04-09T15:39:34+01:00' user='avantman42' visible='true' lat='50.9009945' lon='-1.4065449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162096' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9713899' lon='-1.3781892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071217' timestamp='2006-11-12T18:00:10+00:00' user='Dean Earley' visible='true' lat='50.9175716' lon='-1.3713462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707203' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.852913' lon='-1.324298'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28252921' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9461523' lon='-1.429533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518802' timestamp='2007-04-18T02:00:39+01:00' visible='true' lat='50.928722' lon='-1.3833742' />
-  <node id='28342591' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9074247' lon='-1.3633104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816568' timestamp='2007-05-31T22:04:29+01:00' visible='true' lat='50.9911213' lon='-1.3539454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530528' timestamp='2007-05-23T13:04:50+01:00' visible='true' lat='50.9846663' lon='-1.354754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801033' timestamp='2007-10-31T15:08:49+00:00' user='Dean Earley' visible='true' lat='50.9423165' lon='-1.4492067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162631' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.9712836' lon='-1.382103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431953' timestamp='2007-06-16T16:25:12+01:00' visible='true' lat='50.9847083' lon='-1.3512845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549387' timestamp='2007-05-24T11:22:52+01:00' visible='true' lat='50.9628979' lon='-1.3741741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662042' timestamp='2007-10-28T21:46:58+00:00' user='Nick Dyer' visible='true' lat='50.9069482' lon='-1.41103' />
-  <node id='28874087' timestamp='2007-05-08T14:50:41+01:00' visible='true' lat='50.9370228' lon='-1.4422021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21661760' timestamp='2006-12-20T23:57:07+00:00' user='nickw' visible='true' lat='50.9011606' lon='-1.405511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953375' timestamp='2007-06-04T21:17:00+01:00' visible='true' lat='51.0038511' lon='-1.3832199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830590' timestamp='2007-05-05T08:52:59+01:00' user='nickw' visible='true' lat='50.9230312' lon='-1.3569736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518768' timestamp='2007-04-05T14:21:05+01:00' user='Dean Earley' visible='true' lat='50.9097' lon='-1.39475' />
-  <node id='29815435' timestamp='2007-05-31T21:37:05+01:00' visible='true' lat='50.9872392' lon='-1.3544868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29512662' timestamp='2007-05-22T22:55:40+01:00' visible='true' lat='50.9798314' lon='-1.3525074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150974' timestamp='2008-02-03T06:17:50+00:00' user='sladen' visible='true' lat='50.9090953' lon='-1.4015819' />
-  <node id='26781156' timestamp='2007-03-25T18:42:12+01:00' user='Dean Earley' visible='true' lat='50.9041179' lon='-1.3712212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254354' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.947998' lon='-1.4325966' />
-  <node id='28249984' timestamp='2007-04-29T21:42:08+01:00' visible='true' lat='50.9161054' lon='-1.4446436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764491' timestamp='2007-02-10T23:53:41+00:00' visible='true' lat='50.9154364' lon='-1.3963265' />
-  <node id='91131368' timestamp='2007-10-29T08:22:38+00:00' user='nickw' visible='true' lat='50.9312049' lon='-1.4259538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133200' timestamp='2007-05-12T15:33:39+01:00' user='nickw' visible='true' lat='50.9292699' lon='-1.3513608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668341' timestamp='2007-01-04T21:06:43+00:00' user='nickw' visible='true' lat='50.9890844' lon='-1.4108792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600596' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9923916' lon='-1.4044807'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730531' timestamp='2007-11-28T12:24:08+00:00' user='Dean Earley' visible='true' lat='50.9670246' lon='-1.3690194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305631' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9831701' lon='-1.3851364' />
-  <node id='26004488' timestamp='2007-02-18T21:31:02+00:00' visible='true' lat='50.908443' lon='-1.395973' />
-  <node id='30509428' timestamp='2007-06-17T22:18:57+01:00' visible='true' lat='50.9737555' lon='-1.3512772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583063' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9387252' lon='-1.4352022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871683' timestamp='2007-06-02T18:57:51+01:00' visible='true' lat='50.9145733' lon='-1.3516148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817073' timestamp='2007-05-31T22:18:46+01:00' visible='true' lat='50.9852533' lon='-1.3646273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964128' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.9172527' lon='-1.3793829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464264' timestamp='2007-05-22T00:19:15+01:00' user='Dean Earley' visible='true' lat='50.937162' lon='-1.4075396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700511' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true' lat='50.9265265' lon='-1.372632' />
-  <node id='30226209' timestamp='2007-06-11T22:20:38+01:00' visible='true' lat='50.983339' lon='-1.3527092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931381' timestamp='2007-06-03T22:43:09+01:00' visible='true' lat='50.9937592' lon='-1.3732322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161373' timestamp='2007-12-10T19:38:34+00:00' user='sladen' visible='true' lat='50.9747885' lon='-1.3703125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579421' timestamp='2006-12-14T13:53:01+00:00' user='David Currie' visible='true' lat='50.9782441' lon='-1.4010256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972611' timestamp='2006-08-25T11:54:01+01:00' user='nickw' visible='true' lat='50.9390845' lon='-1.3057611'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29008935' timestamp='2007-05-12T15:26:02+01:00' user='nickw' visible='true' lat='50.9324788' lon='-1.3499428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745489' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9553429' lon='-1.4023761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071376' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.917961' lon='-1.3623947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632477' timestamp='2007-05-26T19:45:06+01:00' visible='true' lat='50.9605898' lon='-1.3692557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595196' timestamp='2007-05-25T21:54:31+01:00' visible='true' lat='50.9673841' lon='-1.3519625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150150' timestamp='2008-02-03T06:13:56+00:00' user='sladen' visible='true' lat='50.9080995' lon='-1.4025089' />
-  <node id='42141674' timestamp='2007-09-05T18:30:27+01:00' user='mike l' visible='true' lat='50.9351417' lon='-1.393633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924228' timestamp='2007-01-06T14:38:00+00:00' user='nickw' visible='true' lat='50.9613336' lon='-1.3687182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700393' timestamp='2007-04-05T14:21:05+01:00' user='Dean Earley' visible='true' lat='50.9227964' lon='-1.3918952' />
-  <node id='29929024' timestamp='2007-06-03T21:58:09+01:00' visible='true' lat='50.9763848' lon='-1.3625806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91112241' timestamp='2007-10-29T08:02:37+00:00' user='nickw' visible='true' lat='50.9267824' lon='-1.4426282'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Old Thatched House' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347582' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9267552' lon='-1.3570541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632218' timestamp='2007-05-26T19:21:19+01:00' visible='true' lat='50.958277' lon='-1.3686487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163287' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.9692756' lon='-1.3842685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45116803' timestamp='2007-09-15T19:10:58+01:00' user='mike l' visible='true' lat='50.9762488' lon='-1.4497002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194899' timestamp='2007-04-29T20:37:34+01:00' user='Dean Earley' visible='true' lat='50.9402192' lon='-1.4085293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275658' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true' lat='50.9114321' lon='-1.4313531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223924' timestamp='2007-06-11T22:03:09+01:00' visible='true' lat='50.984554' lon='-1.3522145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278529' timestamp='2007-08-14T04:47:59+01:00' user='andrewpmk' visible='true' lat='50.9075348' lon='-1.3982997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194361' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9434394' lon='-1.4370696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117404' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9285731' lon='-1.4433782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87799817' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8941961' lon='-1.3905355' />
-  <node id='122319004' timestamp='2007-12-10T20:57:27+00:00' user='sladen' visible='true' lat='50.9130015' lon='-1.4343143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282086' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9753484' lon='-1.4084298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25932490' timestamp='2007-12-10T19:28:54+00:00' user='sladen' visible='true' lat='50.9429996' lon='-1.3607939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945391' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.90503' lon='-1.3402334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706663' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.907629' lon='-1.378278'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='160239028' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9072813' lon='-1.4116143' />
-  <node id='171532999' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9275344' lon='-1.4343733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134825' timestamp='2007-05-15T20:53:14+01:00' user='nickw' visible='true' lat='50.9447436' lon='-1.3844041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935739' timestamp='2007-05-11T00:50:37+01:00' visible='true' lat='50.9395721' lon='-1.4456442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639998' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9089148' lon='-1.3731082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976760' timestamp='2007-04-29T20:52:52+01:00' user='Dean Earley' visible='true' lat='50.9321192' lon='-1.421605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='658424' timestamp='2007-04-05T14:21:05+01:00' user='Dean Earley' visible='true' lat='50.9253086' lon='-1.3960977' />
-  <node id='329468' timestamp='2007-04-05T14:21:06+01:00' user='Dean Earley' visible='true' lat='50.9323' lon='-1.39041' />
-  <node id='30780796' timestamp='2007-06-22T21:09:38+01:00' user='Steve Chilton' visible='true' lat='50.9080243' lon='-1.4132811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254743' timestamp='2007-10-16T17:59:44+01:00' user='Dean Earley' visible='true' lat='50.9690823' lon='-1.3900907' />
-  <node id='544741' timestamp='2007-12-07T21:01:07+00:00' user='Steve Jeapes' visible='true' lat='50.9265596' lon='-1.3921944'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Portswood' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='13071256' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9209498' lon='-1.3600227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925344' timestamp='2007-06-03T20:36:35+01:00' visible='true' lat='50.9800422' lon='-1.3656774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388909' timestamp='2007-04-05T14:21:06+01:00' user='Dean Earley' visible='true' lat='50.9443' lon='-1.40089' />
-  <node id='160267786' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9717944' lon='-1.349696' />
-  <node id='28194846' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.94478' lon='-1.4097199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675874' timestamp='2007-04-05T14:21:06+01:00' user='Dean Earley' visible='true' lat='50.9276738' lon='-1.370609' />
-  <node id='18348711' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9809059' lon='-1.4332311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615435' timestamp='2006-12-16T21:52:54+00:00' user='nickw' visible='true' lat='50.9089666' lon='-1.4151762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624978' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.9032977' lon='-1.3724825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958679' timestamp='2007-09-10T23:55:14+01:00' visible='true' lat='50.9069358' lon='-1.4058362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957226' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9126044' lon='-1.4186112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957846' timestamp='2007-09-10T19:10:37+01:00' user='mike l' visible='true' lat='50.9424832' lon='-1.441595'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29874675' timestamp='2007-06-02T19:57:57+01:00' visible='true' lat='50.9607526' lon='-1.3601281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600506' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9170893' lon='-1.434287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935769' timestamp='2007-05-11T00:50:52+01:00' visible='true' lat='50.9387726' lon='-1.4469759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561802' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true' lat='50.9228789' lon='-1.4396032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926525' timestamp='2007-06-03T20:59:01+01:00' visible='true' lat='50.9802685' lon='-1.3662942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971195' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9061944' lon='-1.3991858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18500678' timestamp='2006-10-19T00:01:04+01:00' user='Dean Earley' visible='true' lat='50.9012661' lon='-1.3532333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998360' timestamp='2007-06-05T23:05:26+01:00' user='nickw' visible='true' lat='50.9744503' lon='-1.4263022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325043' timestamp='2006-11-11T17:21:04+00:00' user='Dean Earley' visible='true' lat='50.9509313' lon='-1.4644776' />
-  <node id='157209203' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9440754' lon='-1.4490502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324353' timestamp='2005-12-16T00:19:02+00:00' user='nickw' visible='true' lat='50.9142065' lon='-1.4051557' />
-  <node id='28345053' timestamp='2007-04-30T23:00:37+01:00' user='nickw' visible='true' lat='50.9337813' lon='-1.3652555'>
-    <tag k='name' v='KINGSFLD A' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254507' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.9043282' lon='-1.3902318' />
-  <node id='14726186' timestamp='2006-09-02T18:21:41+01:00' user='Dean Earley' visible='true' lat='50.909354' lon='-1.3999409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003048' timestamp='2007-05-22T00:19:46+01:00' user='Dean Earley' visible='true' lat='50.9396027' lon='-1.4053699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254691' timestamp='2007-02-01T22:21:47+00:00' user='Dean Earley' visible='true' lat='50.9441613' lon='-1.3735776' />
-  <node id='325062' timestamp='2006-11-11T17:21:04+00:00' user='Dean Earley' visible='true' lat='50.9462326' lon='-1.5156996' />
-  <node id='20130977' timestamp='2006-10-28T01:45:38+01:00' user='Dean Earley' visible='true' lat='50.9295581' lon='-1.356227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661180' timestamp='2007-04-05T14:21:06+01:00' user='Dean Earley' visible='true' lat='50.913213' lon='-1.3602519' />
-  <node id='28194376' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9451493' lon='-1.4393699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668057' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9884279' lon='-1.3994658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914205' timestamp='2007-06-03T16:02:00+01:00' visible='true' lat='50.9834839' lon='-1.3584561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28141320' timestamp='2007-04-29T17:20:53+01:00' visible='true' lat='50.9679548' lon='-1.3575789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110932' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9343172' lon='-1.3628576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160416572' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9091753' lon='-1.4288126' />
-  <node id='28372815' timestamp='2007-05-01T10:05:25+01:00' visible='true' lat='50.9301665' lon='-1.4331202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325654' timestamp='2007-04-05T14:21:06+01:00' user='Dean Earley' visible='true' lat='50.9235' lon='-1.4247' />
-  <node id='21613464' timestamp='2006-12-16T17:46:58+00:00' user='David Currie' visible='true' lat='50.9781047' lon='-1.4015185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889440' timestamp='2007-12-10T19:33:02+00:00' user='sladen' visible='true' lat='50.9552636' lon='-1.3633946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728871' timestamp='2007-05-28T19:12:26+01:00' visible='true' lat='50.9722264' lon='-1.3555758'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706400' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9210244' lon='-1.3801555'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13706712' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8980374' lon='-1.3826636'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20957209' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9185505' lon='-1.425125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254554' timestamp='2006-10-27T00:58:34+01:00' user='Dean Earley' visible='true' lat='50.9083316' lon='-1.3874339' />
-  <node id='30956598' timestamp='2007-06-26T23:45:00+01:00' user='nickw' visible='true' lat='50.9285447' lon='-1.3495472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243979482' timestamp='2008-01-29T12:02:02+00:00' user='Dean Earley' visible='true' lat='50.960817' lon='-1.3494212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000961' timestamp='2007-05-12T09:31:57+01:00' user='nickw' visible='true' lat='50.9188557' lon='-1.4087195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18868869' timestamp='2006-10-21T14:41:58+01:00' user='nickw' visible='true' lat='50.9105685' lon='-1.4166456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964038' timestamp='2006-11-12T00:52:15+00:00' user='nickw' visible='true' lat='50.9984868' lon='-1.4513781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952629' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9330622' lon='-1.3799091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282105' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.9772122' lon='-1.4062887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227233' timestamp='2007-05-22T00:19:46+01:00' user='Dean Earley' visible='true' lat='50.936176' lon='-1.4199632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924084' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9373418' lon='-1.3731997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290740' timestamp='2007-06-13T09:23:59+01:00' visible='true' lat='50.9647903' lon='-1.3829431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815661' timestamp='2007-05-31T21:48:02+01:00' visible='true' lat='50.9908498' lon='-1.3532658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342608' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9055254' lon='-1.37053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636782' timestamp='2006-12-18T21:21:46+00:00' user='nickw' visible='true' lat='50.9481352' lon='-1.4091292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582919' timestamp='2007-05-02T23:57:41+01:00' visible='true' lat='50.9413515' lon='-1.427108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418266' timestamp='2007-05-02T00:31:38+01:00' visible='true' lat='50.967122' lon='-1.3622865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110949' timestamp='2006-10-27T23:39:36+01:00' user='Dean Earley' visible='true' lat='50.9351021' lon='-1.3671617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675871' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9272569' lon='-1.3691043' />
-  <node id='402742' timestamp='2007-04-05T14:21:07+01:00' user='Dean Earley' visible='true' lat='50.9096283' lon='-1.4124786' />
-  <node id='29468569' timestamp='2007-10-28T20:36:55+00:00' user='Nick Dyer' visible='true' lat='50.915375' lon='-1.453988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089106' timestamp='2007-06-08T18:12:06+01:00' visible='true' lat='50.9661951' lon='-1.3794625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632188' timestamp='2007-05-26T19:20:41+01:00' visible='true' lat='50.9558079' lon='-1.3691455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17658120' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.920269' lon='-1.472391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223945' timestamp='2007-06-11T22:03:13+01:00' visible='true' lat='50.9837168' lon='-1.3515921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964851' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='51.0009791' lon='-1.4339276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87800152' timestamp='2007-10-26T11:41:57+01:00' user='Nick Dyer' visible='true' lat='50.9019481' lon='-1.4422399' />
-  <node id='254371' timestamp='2006-09-02T14:28:40+01:00' user='Dean Earley' visible='true' lat='50.915698' lon='-1.4063851' />
-  <node id='8596776' timestamp='2006-06-24T21:46:06+01:00' user='Dean Earley' visible='true' lat='50.9057915' lon='-1.4114212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639900' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9011709' lon='-1.3821553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657685' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.911427' lon='-1.3715571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331333' timestamp='2007-12-06T22:10:51+00:00' user='Dean Earley' visible='true' lat='51.0032' lon='-1.37009' />
-  <node id='21613449' timestamp='2006-12-16T17:46:56+00:00' user='David Currie' visible='true' lat='50.9753426' lon='-1.4040009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222194' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9077086' lon='-1.4247785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724254' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9235416' lon='-1.4112414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967600' timestamp='2006-11-12T20:47:02+00:00' user='Dean Earley' visible='true' lat='50.9197683' lon='-1.3926299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348722' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.9866439' lon='-1.4310793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236157' timestamp='2007-04-29T19:26:08+01:00' user='Andy Street' visible='true' lat='50.9066742' lon='-1.3558375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133121' timestamp='2006-10-28T01:55:38+01:00' user='Dean Earley' visible='true' lat='50.9279163' lon='-1.3546324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325201' timestamp='2006-11-11T17:21:08+00:00' user='Dean Earley' visible='true' lat='50.9452982' lon='-1.363934' />
-  <node id='24667720' timestamp='2007-04-29T01:53:39+01:00' user='Dean Earley' visible='true' lat='50.9580823' lon='-1.4089596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973109' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9047925' lon='-1.408864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254426' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.911361' lon='-1.3996064' />
-  <node id='90581807' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9184323' lon='-1.4476623' />
-  <node id='28194515' timestamp='2007-04-29T08:33:12+01:00' user='Dean Earley' visible='true' lat='50.9474717' lon='-1.412915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548671' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.9635041' lon='-1.3630197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927561' timestamp='2007-06-03T21:24:29+01:00' visible='true' lat='50.9802831' lon='-1.3705515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984785' timestamp='2007-01-10T00:15:03+00:00' user='nickw' visible='true' lat='50.9426566' lon='-1.3859864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254661' timestamp='2006-09-02T12:38:13+01:00' user='Dean Earley' visible='true' lat='50.9701678' lon='-1.3440158' />
-  <node id='30431979' timestamp='2007-06-16T16:26:03+01:00' visible='true' lat='50.9845482' lon='-1.3522672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949989' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9941949' lon='-1.3906865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='56265808' timestamp='2007-10-26T15:04:56+01:00' user='Nick Dyer' visible='true' lat='50.9765219' lon='-1.4477241'>
-    <tag k='amenity' v='fuel' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='30096948' timestamp='2007-06-08T23:24:13+01:00' visible='true' lat='50.9656123' lon='-1.3751763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173865' timestamp='2007-04-29T01:02:52+01:00' visible='true' lat='50.9423807' lon='-1.4309969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700531' timestamp='2007-04-05T14:21:07+01:00' user='Dean Earley' visible='true' lat='50.9311737' lon='-1.3674443' />
-  <node id='95828981' timestamp='2007-11-02T14:14:14+00:00' user='Nick Dyer' visible='true' lat='50.90683' lon='-1.4073923' />
-  <node id='92482291' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8945058' lon='-1.4241637' />
-  <node id='29931404' timestamp='2007-06-03T22:43:16+01:00' visible='true' lat='50.9952781' lon='-1.3725285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237248' timestamp='2007-04-29T19:42:07+01:00' user='Andy Street' visible='true' lat='50.9033943' lon='-1.3555189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141384' timestamp='2006-11-21T23:12:42+00:00' user='nickw' visible='true' lat='50.9243856' lon='-1.4167525'>
-    <tag k='name' v='KINETON' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240312' timestamp='2007-04-29T20:02:54+01:00' user='Andy Street' visible='true' lat='50.9064875' lon='-1.3528584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971210' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9080962' lon='-1.4145643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745447' timestamp='2007-01-19T09:38:45+00:00' user='Dean Earley' visible='true' lat='50.9701779' lon='-1.3502616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160216600' timestamp='2007-12-10T19:13:44+00:00' user='sladen' visible='true' lat='50.9136187' lon='-1.3901652' />
-  <node id='245145574' timestamp='2008-02-03T05:57:20+00:00' user='sladen' visible='true' lat='50.9138361' lon='-1.4021999' />
-  <node id='24949827' timestamp='2007-01-07T12:38:44+00:00' user='nickw' visible='true' lat='50.9873364' lon='-1.3800721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413149' timestamp='2007-04-05T14:21:08+01:00' user='Dean Earley' visible='true' lat='50.9384388' lon='-1.3840685' />
-  <node id='28246069' timestamp='2007-04-29T20:52:47+01:00' user='Dean Earley' visible='true' lat='50.9362295' lon='-1.4311714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179519' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9549218' lon='-1.4018789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160236652' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9067401' lon='-1.400379' />
-  <node id='20698069' timestamp='2006-10-31T22:26:04+00:00' user='nickw' visible='true' lat='50.9041512' lon='-1.4050995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173804' timestamp='2007-04-29T00:59:55+01:00' visible='true' lat='50.9436293' lon='-1.4339615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071436' timestamp='2007-03-04T19:43:33+00:00' user='Dean Earley' visible='true' lat='50.921735' lon='-1.3513771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976685' timestamp='2006-11-13T21:39:14+00:00' user='nickw' visible='true' lat='50.9398543' lon='-1.4251115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153327675' timestamp='2007-12-06T20:41:53+00:00' user='nickw' visible='true' lat='50.9378563' lon='-1.4401342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998924' timestamp='2007-06-05T23:28:51+01:00' user='nickw' visible='true' lat='50.984782' lon='-1.4369508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464245' timestamp='2007-05-22T00:19:11+01:00' user='Dean Earley' visible='true' lat='50.9377796' lon='-1.4105054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169428759' timestamp='2007-12-14T21:38:56+00:00' user='nickw' visible='true' lat='50.9289566' lon='-1.4357671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342544' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9084944' lon='-1.3678678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636801' timestamp='2007-04-29T02:33:37+01:00' user='Dean Earley' visible='true' lat='50.9516302' lon='-1.4066657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254614' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true' lat='50.9112535' lon='-1.4305292' />
-  <node id='91228875' timestamp='2007-10-29T10:34:26+00:00' user='DrMark' visible='true' lat='50.9776354' lon='-1.4373388'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Knights Cross' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20136217' timestamp='2007-05-30T21:56:42+01:00' user='nickw' visible='true' lat='50.9181627' lon='-1.3551001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984736' timestamp='2007-01-10T00:13:55+00:00' user='nickw' visible='true' lat='50.9442777' lon='-1.3912312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347761' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9306056' lon='-1.3608884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418342' timestamp='2007-05-02T00:33:15+01:00' visible='true' lat='50.9671606' lon='-1.3633164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071419' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9231358' lon='-1.3537863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008382' timestamp='2007-05-12T15:11:48+01:00' user='nickw' visible='true' lat='50.9262055' lon='-1.35185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797940' timestamp='2007-09-15T18:57:47+01:00' user='mike l' visible='true' lat='50.9708226' lon='-1.4465759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107343' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9298913' lon='-1.3538091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447400' timestamp='2007-03-09T20:54:22+00:00' user='nickw' visible='true' lat='50.8994615' lon='-1.3927126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248230' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8959248' lon='-1.3974696' />
-  <node id='7015241' timestamp='2007-02-18T21:25:33+00:00' visible='true' lat='50.9166953' lon='-1.4065625' />
-  <node id='28249902' timestamp='2007-04-29T21:41:45+01:00' visible='true' lat='50.9149417' lon='-1.4478443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325103' timestamp='2006-11-11T17:21:12+00:00' user='Dean Earley' visible='true' lat='50.9264752' lon='-1.5775582' />
-  <node id='21689112' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9391093' lon='-1.3837881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705510' timestamp='2007-05-28T11:19:15+01:00' visible='true' lat='50.9830683' lon='-1.3509016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388924' timestamp='2007-04-05T14:21:08+01:00' user='Dean Earley' visible='true' lat='50.9438' lon='-1.39604' />
-  <node id='28830616' timestamp='2007-05-05T08:58:24+01:00' user='nickw' visible='true' lat='50.9288041' lon='-1.3587219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724273' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9276023' lon='-1.4045711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447498' timestamp='2007-03-09T21:07:37+00:00' user='nickw' visible='true' lat='50.908175' lon='-1.3918683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575779' timestamp='2007-03-16T21:52:30+00:00' user='nickw' visible='true' lat='50.9013425' lon='-1.3997005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183746' timestamp='2007-04-29T02:25:39+01:00' user='Dean Earley' visible='true' lat='50.9492936' lon='-1.405755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223958' timestamp='2007-06-11T22:03:14+01:00' visible='true' lat='50.9847818' lon='-1.3522365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998065' timestamp='2007-06-05T23:00:21+01:00' user='nickw' visible='true' lat='50.9874458' lon='-1.4114022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160213815' timestamp='2007-12-10T19:09:23+00:00' user='sladen' visible='true' lat='50.9229852' lon='-1.3870152' />
-  <node id='20130939' timestamp='2006-10-28T01:45:34+01:00' user='Dean Earley' visible='true' lat='50.9308029' lon='-1.3587651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110993' timestamp='2007-10-29T07:59:21+00:00' user='nickw' visible='true' lat='50.9270266' lon='-1.4414263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108525' timestamp='2007-10-29T07:48:09+00:00' user='nickw' visible='true' lat='50.9322552' lon='-1.4199949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984804' timestamp='2007-01-10T00:15:43+00:00' user='nickw' visible='true' lat='50.9459738' lon='-1.400668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325186' timestamp='2005-12-16T23:01:12+00:00' user='80n' visible='true' lat='50.9498558' lon='-1.3769122' />
-  <node id='28236130' timestamp='2007-04-29T19:25:53+01:00' user='Andy Street' visible='true' lat='50.9080509' lon='-1.3549125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237093' timestamp='2007-04-29T19:33:19+01:00' user='nickw' visible='true' lat='50.9109145' lon='-1.3502139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530525' timestamp='2007-04-05T14:21:08+01:00' user='Dean Earley' visible='true' lat='50.9506633' lon='-1.364954' />
-  <node id='13071350' timestamp='2006-08-11T02:48:10+01:00' user='Dean Earley' visible='true' lat='50.917636' lon='-1.36527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133132' timestamp='2006-10-28T01:55:40+01:00' user='Dean Earley' visible='true' lat='50.9271605' lon='-1.3535449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59766050' timestamp='2007-09-25T17:25:34+01:00' user='mike l' visible='true' lat='50.9377761' lon='-1.3932049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561534' timestamp='2006-12-13T20:09:33+00:00' user='nickw' visible='true' lat='50.924971' lon='-1.4289567'>
-    <tag k='name' v='SALEM ST' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632158' timestamp='2007-05-26T19:20:02+01:00' visible='true' lat='50.9574622' lon='-1.3672951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87851393' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.8998226' lon='-1.3803376' />
-  <node id='92682345' timestamp='2007-10-31T12:24:58+00:00' user='Dean Earley' visible='true' lat='50.9611662' lon='-1.4261702' />
-  <node id='21507802' timestamp='2006-12-09T09:51:43+00:00' user='nickw' visible='true' lat='50.9432567' lon='-1.3969349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632828' timestamp='2007-05-26T20:07:18+01:00' visible='true' lat='50.9686301' lon='-1.3627524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689169' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9404676' lon='-1.372762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398462' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.922393' lon='-1.4146906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721014' timestamp='2006-10-06T23:27:15+01:00' user='Dean Earley' visible='true' lat='50.9726967' lon='-1.3768379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636952' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.920689' lon='-1.4139338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001471' timestamp='2007-05-12T09:49:22+01:00' user='nickw' visible='true' lat='50.9431322' lon='-1.3491964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160362616' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9190838' lon='-1.4797359' />
-  <node id='160211045' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9168709' lon='-1.3909548' />
-  <node id='27467501' timestamp='2007-04-19T17:50:46+01:00' visible='true' lat='50.9268903' lon='-1.3794471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704602' timestamp='2007-05-28T11:38:43+01:00' visible='true' lat='50.975873' lon='-1.3514236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003045' timestamp='2007-05-22T00:19:47+01:00' user='Dean Earley' visible='true' lat='50.9388218' lon='-1.4053863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30259420' timestamp='2007-06-12T21:04:32+01:00' visible='true' lat='50.9777418' lon='-1.3591866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816427' timestamp='2007-05-31T22:00:51+01:00' visible='true' lat='50.9900186' lon='-1.3553005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147919' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.9091278' lon='-1.4039766' />
-  <node id='169435832' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9353015' lon='-1.4328765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972799' timestamp='2006-11-13T00:07:22+00:00' user='Dean Earley' visible='true' lat='50.8970301' lon='-1.3929821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838968' timestamp='2007-06-01T20:50:37+01:00' visible='true' lat='50.9890597' lon='-1.3958864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319628' timestamp='2007-04-05T14:21:08+01:00' user='Dean Earley' visible='true' lat='50.9209863' lon='-1.3901885' />
-  <node id='254760' timestamp='2007-04-20T23:53:20+01:00' user='Dean Earley' visible='true' lat='50.9101191' lon='-1.3891789' />
-  <node id='15028820' timestamp='2006-09-08T23:06:40+01:00' user='Dean Earley' visible='true' lat='50.9346757' lon='-1.3757802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764413' timestamp='2007-05-29T22:14:29+01:00' user='Jodi Crisp' visible='true' lat='50.9254683' lon='-1.3613529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949844' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9912881' lon='-1.3748273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217885' timestamp='2007-02-18T20:18:28+00:00' visible='true' lat='50.9229019' lon='-1.361135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170430' timestamp='2006-11-11T17:21:12+00:00' user='Dean Earley' visible='true' lat='50.927766' lon='-1.3168073' />
-  <node id='30089140' timestamp='2007-06-13T09:24:39+01:00' visible='true' lat='50.9645343' lon='-1.3784277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160244235' timestamp='2007-12-10T19:25:22+00:00' user='sladen' visible='true' lat='50.9118924' lon='-1.435149' />
-  <node id='21689152' timestamp='2007-09-20T19:44:50+01:00' user='mike l' visible='true' lat='50.9397236' lon='-1.3757028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189053' timestamp='2007-10-12T14:11:15+01:00' user='SteveC' visible='true' lat='50.9306704' lon='-1.4479634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141696' timestamp='2007-09-20T19:45:53+01:00' user='mike l' visible='true' lat='50.9348827' lon='-1.3927573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254959' timestamp='2006-09-02T13:46:14+01:00' user='Dean Earley' visible='true' lat='50.9397367' lon='-1.4205411' />
-  <node id='29998586' timestamp='2007-06-05T23:13:55+01:00' user='nickw' visible='true' lat='50.9583979' lon='-1.4567977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153322107' timestamp='2007-12-06T20:39:09+00:00' user='nickw' visible='true' lat='50.9334108' lon='-1.4481931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582960' timestamp='2007-05-02T23:57:48+01:00' visible='true' lat='50.9415756' lon='-1.4260774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263983' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9646973' lon='-1.3707159' />
-  <node id='29704302' timestamp='2007-05-28T10:32:50+01:00' visible='true' lat='50.9868557' lon='-1.3567586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722347' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.9547712' lon='-1.3732633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4942415' timestamp='2006-05-21T10:16:00+01:00' user='nickw' visible='true' lat='50.9232074' lon='-1.3815804' />
-  <node id='160278843' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9129639' lon='-1.453903' />
-  <node id='29838289' timestamp='2007-06-01T20:13:22+01:00' visible='true' lat='50.9949315' lon='-1.3537167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549337' timestamp='2007-05-24T11:22:45+01:00' visible='true' lat='50.9620611' lon='-1.3575627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582949' timestamp='2007-05-02T23:57:46+01:00' visible='true' lat='50.9428154' lon='-1.4255211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632811' timestamp='2007-05-26T20:06:24+01:00' visible='true' lat='50.9616252' lon='-1.3676165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290735' timestamp='2007-06-13T09:23:58+01:00' visible='true' lat='50.9640863' lon='-1.383295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418526' timestamp='2007-05-02T00:35:22+01:00' visible='true' lat='50.9681547' lon='-1.3677155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932443' timestamp='2007-05-10T21:05:58+01:00' user='Dean Earley' visible='true' lat='50.963327' lon='-1.4608387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135249' timestamp='2007-05-15T20:56:00+01:00' user='nickw' visible='true' lat='50.9444432' lon='-1.384265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13565092' timestamp='2006-08-15T12:20:55+01:00' user='nickw' visible='true' lat='50.9348791' lon='-1.3520782'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21496507' timestamp='2007-01-19T18:20:24+00:00' user='Dean Earley' visible='true' lat='50.9486706' lon='-1.3678346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431968' timestamp='2007-06-16T16:26:00+01:00' visible='true' lat='50.984736' lon='-1.3521268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596818' timestamp='2008-02-03T06:26:26+00:00' user='sladen' visible='true' lat='50.9078181' lon='-1.3932564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342528' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9083191' lon='-1.3655434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388890' timestamp='2007-04-05T14:21:08+01:00' user='Dean Earley' visible='true' lat='50.9425376' lon='-1.3915567' />
-  <node id='254273' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9575005' lon='-1.3379434' />
-  <node id='21420433' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9284878' lon='-1.3855515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340625' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9635051' lon='-1.3743159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781171' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.9011676' lon='-1.3743698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290789' timestamp='2007-06-13T09:24:10+01:00' visible='true' lat='50.9646815' lon='-1.3790971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114351' timestamp='2007-02-23T21:46:01+00:00' user='nickw' visible='true' lat='50.9039155' lon='-1.3963525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282139' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9753897' lon='-1.4040963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091389' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.9917236' lon='-1.4465189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194447' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9461641' lon='-1.4338344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976783' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9302451' lon='-1.4223401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469886' timestamp='2007-04-05T14:21:09+01:00' user='Dean Earley' visible='true' lat='50.9218' lon='-1.43603' />
-  <node id='254443' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9227057' lon='-1.3607743' />
-  <node id='29816594' timestamp='2007-05-31T22:07:49+01:00' visible='true' lat='50.9899933' lon='-1.3558015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700402' timestamp='2007-11-11T18:09:43+00:00' user='Dean Earley' visible='true' lat='50.9214683' lon='-1.3899233' />
-  <node id='28179536' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9561889' lon='-1.3987497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29839514' timestamp='2007-06-01T21:00:15+01:00' visible='true' lat='50.9779426' lon='-1.3521929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745428' timestamp='2007-04-21T21:51:21+01:00' user='Dean Earley' visible='true' lat='50.9636784' lon='-1.3520241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684702' timestamp='2007-10-30T17:26:33+00:00' user='Nick Dyer' visible='true' lat='50.9620683' lon='-1.4235008' />
-  <node id='29464306' timestamp='2007-05-22T00:19:24+01:00' user='Dean Earley' visible='true' lat='50.9475997' lon='-1.3964325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124676' timestamp='2007-06-09T19:48:39+01:00' user='nickw' visible='true' lat='50.931443' lon='-1.3532086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250082' timestamp='2007-04-29T21:42:26+01:00' visible='true' lat='50.9155064' lon='-1.4512239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418245' timestamp='2007-05-02T00:31:06+01:00' visible='true' lat='50.9686496' lon='-1.3626481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319654' timestamp='2005-12-14T22:05:42+00:00' user='nickw' visible='true' lat='50.9144854' lon='-1.4011216' />
-  <node id='29816299' timestamp='2007-05-31T21:52:26+01:00' visible='true' lat='50.9911097' lon='-1.3543569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096961' timestamp='2007-10-29T17:03:05+00:00' user='Dean Earley' visible='true' lat='50.9642671' lon='-1.3761871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721087' timestamp='2006-10-06T23:27:21+01:00' user='Dean Earley' visible='true' lat='50.971499' lon='-1.3499561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871069' timestamp='2007-06-02T18:20:21+01:00' visible='true' lat='50.9345663' lon='-1.4363867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526352' timestamp='2007-05-23T09:23:19+01:00' user='nickw' visible='true' lat='50.92826' lon='-1.3575531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961042' timestamp='2006-11-11T17:12:28+00:00' user='Dean Earley' visible='true' lat='50.9479514' lon='-1.3866409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744284' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9070239' lon='-1.4119896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601329' timestamp='2006-09-01T00:29:38+01:00' user='nickw' visible='true' lat='50.8890974' lon='-1.5268433'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28243594' timestamp='2007-04-29T20:24:58+01:00' user='Dean Earley' visible='true' lat='50.9360413' lon='-1.4133186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147925' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.9085379' lon='-1.4029638' />
-  <node id='122352477' timestamp='2007-11-18T19:21:22+00:00' user='nickw' visible='true' lat='50.9100178' lon='-1.4237699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689088' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9416694' lon='-1.3869668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021805' timestamp='2007-04-03T00:53:00+01:00' user='Ben' visible='true' lat='50.9367653' lon='-1.4031927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398417' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9788002' lon='-1.4097404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675682' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.8989671' lon='-1.4471679' />
-  <node id='20971157' timestamp='2006-11-12T22:57:16+00:00' user='Dean Earley' visible='true' lat='50.9073778' lon='-1.3992209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000931' timestamp='2007-05-12T09:30:25+01:00' user='nickw' visible='true' lat='50.9195039' lon='-1.4109198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976711' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9338637' lon='-1.4239692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533014' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9275845' lon='-1.4339065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689142' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9380165' lon='-1.3801991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001693' timestamp='2007-05-12T09:53:00+01:00' user='nickw' visible='true' lat='50.9398587' lon='-1.3634806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071316' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.9215756' lon='-1.3602654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945344' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9199111' lon='-1.3466504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583020' timestamp='2007-05-02T23:57:54+01:00' visible='true' lat='50.9378933' lon='-1.4329972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398764' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9431528' lon='-1.4145819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30505943' timestamp='2007-06-17T21:57:27+01:00' visible='true' lat='50.9796734' lon='-1.3542496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724239' timestamp='2006-10-07T00:25:16+01:00' user='nickw' visible='true' lat='50.9141815' lon='-1.412389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132970' timestamp='2007-05-15T20:35:53+01:00' user='nickw' visible='true' lat='50.9322333' lon='-1.3759028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745504' timestamp='2006-09-03T01:40:49+01:00' user='Dean Earley' visible='true' lat='50.9570842' lon='-1.3997772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913610' timestamp='2007-06-03T15:53:28+01:00' visible='true' lat='50.985647' lon='-1.3596239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956711' timestamp='2007-06-26T23:49:21+01:00' user='nickw' visible='true' lat='50.9281346' lon='-1.3479032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911799' timestamp='2007-06-03T15:31:37+01:00' visible='true' lat='50.9870686' lon='-1.3536961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582979' timestamp='2007-05-02T23:57:50+01:00' visible='true' lat='50.9383239' lon='-1.4241095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243962' timestamp='2007-04-29T20:34:40+01:00' user='Andy Street' visible='true' lat='50.9058056' lon='-1.3508084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999018' timestamp='2007-06-05T23:29:02+01:00' user='nickw' visible='true' lat='50.9947612' lon='-1.4384607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227248' timestamp='2007-04-29T08:58:14+01:00' user='Dean Earley' visible='true' lat='50.9424328' lon='-1.4146367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706531' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.920581' lon='-1.378842'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='422974' timestamp='2007-04-05T14:21:09+01:00' user='Dean Earley' visible='true' lat='50.9325' lon='-1.41037' />
-  <node id='29710756' timestamp='2007-05-31T21:13:54+01:00' visible='true' lat='50.9871736' lon='-1.3554773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632460' timestamp='2007-10-16T11:34:24+01:00' user='Dean Earley' visible='true' lat='50.9609028' lon='-1.3652969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291050' timestamp='2007-06-13T09:32:59+01:00' visible='true' lat='50.9657068' lon='-1.3858668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705644' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8947897' lon='-1.4085643'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29462618' timestamp='2007-05-21T23:56:39+01:00' user='nickw' visible='true' lat='50.9026323' lon='-1.3982501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209149' timestamp='2007-12-08T20:14:57+00:00' user='nickw' visible='true' lat='50.9417486' lon='-1.4468723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271130' timestamp='2006-06-03T23:38:11+01:00' user='Dean Earley' visible='true' lat='50.9381' lon='-1.39474'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Gate' />
-  </node>
-  <node id='30229465' timestamp='2007-06-12T00:08:06+01:00' user='nickw' visible='true' lat='50.9338736' lon='-1.3512619'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413152' timestamp='2007-04-05T14:21:10+01:00' user='Dean Earley' visible='true' lat='50.9392217' lon='-1.38078' />
-  <node id='24668375' timestamp='2007-01-04T21:06:49+00:00' user='nickw' visible='true' lat='50.9826999' lon='-1.3932276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962271' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9562045' lon='-1.3642807' />
-  <node id='87980710' timestamp='2007-10-26T15:58:01+01:00' user='Nick Dyer' visible='true' lat='50.9589213' lon='-1.350567' />
-  <node id='91111708' timestamp='2007-10-29T08:00:56+00:00' user='nickw' visible='true' lat='50.9274476' lon='-1.4383146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071393' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9289044' lon='-1.362273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183712' timestamp='2007-04-29T02:25:34+01:00' user='Dean Earley' visible='true' lat='50.9510791' lon='-1.4051805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668362' timestamp='2007-01-04T21:06:45+00:00' user='nickw' visible='true' lat='50.9873587' lon='-1.406588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122326379' timestamp='2007-11-18T19:06:35+00:00' user='nickw' visible='true' lat='50.9154228' lon='-1.4335741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796853' timestamp='2007-05-30T22:26:18+01:00' user='nickw' visible='true' lat='50.9168632' lon='-1.3595079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089281' timestamp='2007-06-08T18:20:45+01:00' visible='true' lat='50.9622793' lon='-1.3785234'>
-    <tag k='landuse' v='recreation_ground' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746402' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9942522' lon='-1.3397718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243881' timestamp='2007-04-29T20:52:54+01:00' user='Dean Earley' visible='true' lat='50.9364357' lon='-1.421217' />
-  <node id='13706332' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.918677' lon='-1.389451'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='700387' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9258707' lon='-1.3926155' />
-  <node id='19111059' timestamp='2006-10-22T23:24:07+01:00' user='Ben' visible='true' lat='50.9866521' lon='-1.3854538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282154' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9755204' lon='-1.4086963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242974' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9122171' lon='-1.4370373' />
-  <node id='30956583' timestamp='2007-06-26T23:44:58+01:00' user='nickw' visible='true' lat='50.9278873' lon='-1.3491201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773923' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9207503' lon='-1.4649129' />
-  <node id='14728004' timestamp='2007-04-03T00:54:09+01:00' user='Ben' visible='true' lat='50.9366318' lon='-1.4038617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998126' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.9886589' lon='-1.4011906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908371' timestamp='2006-12-18T23:27:56+00:00' visible='true' lat='50.9314755' lon='-1.3787789' />
-  <node id='30226375' timestamp='2007-06-11T22:28:57+01:00' visible='true' lat='50.9816865' lon='-1.3526956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932227' timestamp='2007-05-10T20:48:51+01:00' user='Dean Earley' visible='true' lat='50.9620403' lon='-1.4485857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50656128' timestamp='2007-09-13T21:25:22+01:00' user='mike l' visible='true' lat='50.9453602' lon='-1.4472137' />
-  <node id='544328' timestamp='2007-04-05T14:21:10+01:00' user='Dean Earley' visible='true' lat='50.9302' lon='-1.38713' />
-  <node id='331326' timestamp='2006-11-11T21:24:03+00:00' user='Dean Earley' visible='true' lat='51.0025' lon='-1.36419' />
-  <node id='21419248' timestamp='2007-02-18T20:18:45+00:00' visible='true' lat='50.9377789' lon='-1.3602264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990893' timestamp='2007-06-05T20:41:24+01:00' visible='true' lat='51.0029719' lon='-1.349474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252951' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.943895' lon='-1.4298744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648588' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9543318' lon='-1.3581047' />
-  <node id='21561547' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9224688' lon='-1.4253339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721048' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9613405' lon='-1.3689466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464291' timestamp='2007-05-22T00:19:21+01:00' user='Dean Earley' visible='true' lat='50.9597691' lon='-1.4060646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435814' timestamp='2007-12-14T21:43:12+00:00' user='nickw' visible='true' lat='50.937142' lon='-1.4328467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392363' timestamp='2007-05-20T17:53:02+01:00' visible='true' lat='50.9661278' lon='-1.354001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305571' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.99684' lon='-1.3962078' />
-  <node id='45160155' timestamp='2007-09-07T17:38:23+01:00' user='mike l' visible='true' lat='50.9454888' lon='-1.4401934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467484' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.932026' lon='-1.3760335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28257903' timestamp='2007-04-29T22:56:49+01:00' user='Andy Street' visible='true' lat='50.9021128' lon='-1.3543889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575770' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9010052' lon='-1.3941388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830577' timestamp='2007-05-05T09:03:38+01:00' user='nickw' visible='true' lat='50.9264101' lon='-1.3648668'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Castle' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874074' timestamp='2007-05-08T14:50:37+01:00' visible='true' lat='50.9379876' lon='-1.4414202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464272' timestamp='2007-05-22T00:19:17+01:00' user='Dean Earley' visible='true' lat='50.937979' lon='-1.405469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924069' timestamp='2007-01-06T14:28:56+00:00' user='nickw' visible='true' lat='50.9848268' lon='-1.382637'>
-    <tag k='name' v='MEAD RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254975' timestamp='2007-04-29T08:34:12+01:00' user='Dean Earley' visible='true' lat='50.9476616' lon='-1.4133056' />
-  <node id='26011755' timestamp='2007-10-26T13:59:34+01:00' user='Nick Dyer' visible='true' lat='50.9645308' lon='-1.4165496'>
-    <tag k='upload_tag' v='avantman42' />
-    <tag k='amenity' v='telephone' />
-    <tag k='source' v='GPS waypoint' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='28372788' timestamp='2007-12-14T21:27:52+00:00' user='nickw' visible='true' lat='50.9281829' lon='-1.4395182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091869' timestamp='2007-12-10T21:00:29+00:00' user='sladen' visible='true' lat='50.9116702' lon='-1.425345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984749' timestamp='2007-04-29T02:33:52+01:00' user='Dean Earley' visible='true' lat='50.9514252' lon='-1.4050837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87819947' timestamp='2007-10-26T12:11:53+01:00' user='Nick Dyer' visible='true' lat='50.9110984' lon='-1.4431026' />
-  <node id='21419448' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9418065' lon='-1.3715896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949814' timestamp='2007-01-31T02:05:51+00:00' user='Dean Earley' visible='true' lat='50.9935799' lon='-1.3798637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252361' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.946731' lon='-1.3612574' />
-  <node id='25675797' timestamp='2007-10-29T16:22:11+00:00' user='Nick Dyer' visible='true' lat='50.9114539' lon='-1.4418415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591401' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.913968' lon='-1.4567775' />
-  <node id='30956613' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9282317' lon='-1.3498154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001320' timestamp='2007-05-12T09:40:13+01:00' user='nickw' visible='true' lat='50.9222591' lon='-1.3819143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796767' timestamp='2007-05-30T22:22:03+01:00' user='nickw' visible='true' lat='50.9143474' lon='-1.3554422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621228' timestamp='2007-05-26T11:35:18+01:00' visible='true' lat='50.9616318' lon='-1.3711734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700496' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9305352' lon='-1.3724346' />
-  <node id='244310972' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9730839' lon='-1.4324743' />
-  <node id='24949995' timestamp='2007-01-07T12:38:57+00:00' user='nickw' visible='true' lat='50.982859' lon='-1.3867473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232093' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9152684' lon='-1.4115818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816316' timestamp='2007-05-31T21:52:29+01:00' visible='true' lat='50.9913543' lon='-1.3544912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469877' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9121302' lon='-1.4340396' />
-  <node id='20965523' timestamp='2007-10-26T15:04:01+01:00' user='Nick Dyer' visible='true' lat='50.9681392' lon='-1.4214856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271050' timestamp='2007-01-25T22:42:39+00:00' user='Dean Earley' visible='true' lat='50.925098' lon='-1.3827921'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='St Denys' />
-  </node>
-  <node id='27467476' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.9284524' lon='-1.3770952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903741' timestamp='2007-05-10T00:36:36+01:00' visible='true' lat='50.9333323' lon='-1.3722574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325176' timestamp='2006-11-11T17:21:33+00:00' user='Dean Earley' visible='true' lat='50.9508204' lon='-1.3990427' />
-  <node id='29009221' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.9295395' lon='-1.3529377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949882' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9912881' lon='-1.3793966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107845' timestamp='2007-04-27T23:50:36+01:00' visible='true' lat='50.9362571' lon='-1.3996542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684883' timestamp='2007-10-31T12:25:05+00:00' user='Dean Earley' visible='true' lat='50.9628752' lon='-1.4221483' />
-  <node id='24949918' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9921384' lon='-1.3802708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021790' timestamp='2007-04-03T00:52:52+01:00' user='Ben' visible='true' lat='50.9497436' lon='-1.3983757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90610019' timestamp='2007-10-28T20:53:33+00:00' user='Nick Dyer' visible='true' lat='50.910969' lon='-1.4304799' />
-  <node id='20972769' timestamp='2006-11-13T00:06:52+00:00' user='Dean Earley' visible='true' lat='50.8987039' lon='-1.4080435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561811' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9235677' lon='-1.4416495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997515' timestamp='2007-06-05T22:43:53+01:00' user='nickw' visible='true' lat='51.0131134' lon='-1.3637815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252943' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.9437474' lon='-1.4267191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956564' timestamp='2007-06-26T23:44:55+01:00' user='nickw' visible='true' lat='50.9265568' lon='-1.3507144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956749' timestamp='2007-06-26T23:49:26+01:00' user='nickw' visible='true' lat='50.9290237' lon='-1.3503468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254722' timestamp='2007-01-31T01:07:53+00:00' user='Dean Earley' visible='true' lat='51.0065573' lon='-1.3447154' />
-  <node id='13705655' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.8963709' lon='-1.4070375'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='700522' timestamp='2007-04-05T14:21:12+01:00' user='Dean Earley' visible='true' lat='50.9285308' lon='-1.3665827' />
-  <node id='28384690' timestamp='2007-06-02T19:55:03+01:00' visible='true' lat='50.9689096' lon='-1.3614402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420712' timestamp='2006-12-02T23:56:34+00:00' user='Dean Earley' visible='true' lat='50.92884' lon='-1.3940809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704961' timestamp='2007-05-28T11:06:40+01:00' visible='true' lat='50.9822438' lon='-1.3504171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111560' timestamp='2007-10-29T08:00:08+00:00' user='nickw' visible='true' lat='50.9269014' lon='-1.4389131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178410' timestamp='2007-01-19T09:28:12+00:00' user='Dean Earley' visible='true' lat='50.987573' lon='-1.3471659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932231' timestamp='2007-05-10T20:48:54+01:00' user='Dean Earley' visible='true' lat='50.9637582' lon='-1.4462313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925988' timestamp='2007-06-03T20:53:27+01:00' visible='true' lat='50.9801242' lon='-1.364575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931348' timestamp='2007-06-03T22:43:04+01:00' visible='true' lat='50.9938034' lon='-1.3731393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149965' timestamp='2008-02-03T06:13:04+00:00' user='sladen' visible='true' lat='50.9085866' lon='-1.401848' />
-  <node id='14727970' timestamp='2007-02-18T20:18:23+00:00' visible='true' lat='50.9389431' lon='-1.3800514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930663' timestamp='2007-06-03T22:25:18+01:00' visible='true' lat='50.9968228' lon='-1.352071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2742653' timestamp='2006-05-11T21:32:18+01:00' user='Dean Earley' visible='true' lat='50.9518343' lon='-1.4031773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21379085' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9177367' lon='-1.4825447'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Totton' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130894' timestamp='2006-10-28T01:45:26+01:00' user='Dean Earley' visible='true' lat='50.9329375' lon='-1.3616192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325002' timestamp='2006-11-11T17:21:36+00:00' user='Dean Earley' visible='true' lat='50.9577925' lon='-1.416526' />
-  <node id='29816744' timestamp='2007-05-31T22:13:33+01:00' visible='true' lat='50.9911605' lon='-1.3551562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895686' timestamp='2007-02-13T18:31:35+00:00' user='Dean Earley' visible='true' lat='50.9811279' lon='-1.4436821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409612' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9108531' lon='-1.431808' />
-  <node id='28173936' timestamp='2007-04-29T01:03:18+01:00' visible='true' lat='50.9424945' lon='-1.4350348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984672' timestamp='2007-04-29T02:33:09+01:00' user='Dean Earley' visible='true' lat='50.9514038' lon='-1.4045728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122326360' timestamp='2007-11-18T19:06:34+00:00' user='nickw' visible='true' lat='50.9145836' lon='-1.4349251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21599025' timestamp='2006-12-16T01:07:06+00:00' user='Dean Earley' visible='true' lat='50.9329069' lon='-1.3568467'>
-    <tag k='highway' v='gate' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440011' timestamp='2007-04-18T02:00:21+01:00' visible='true' lat='50.9282532' lon='-1.3813863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783114' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9479625' lon='-1.3498414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505740' timestamp='2007-06-03T22:23:16+01:00' visible='true' lat='50.9918798' lon='-1.3535329'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487482' timestamp='2007-07-09T12:19:39+01:00' visible='true' lat='50.9147348' lon='-1.3890376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762233' timestamp='2007-05-29T20:51:36+01:00' visible='true' lat='50.9934967' lon='-1.3811901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91113447' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.9275431' lon='-1.4421961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949935' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9912131' lon='-1.3840455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896411' timestamp='2007-02-13T19:43:27+00:00' user='Dean Earley' visible='true' lat='50.9694567' lon='-1.3890163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341783' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9129539' lon='-1.3635766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348308' timestamp='2007-04-30T23:48:45+01:00' user='nickw' visible='true' lat='50.9246576' lon='-1.3579878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250035' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9178096' lon='-1.4493837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816599' timestamp='2007-05-31T22:07:50+01:00' visible='true' lat='50.9899166' lon='-1.3563089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249787' timestamp='2007-04-29T21:41:25+01:00' visible='true' lat='50.9216847' lon='-1.4446976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801370' timestamp='2007-03-04T19:32:14+00:00' user='Dean Earley' visible='true' lat='50.9059318' lon='-1.376694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339172' timestamp='2007-05-02T00:35:38+01:00' visible='true' lat='50.9688484' lon='-1.3628748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600480' timestamp='2007-05-02T23:58:19+01:00' visible='true' lat='50.9393561' lon='-1.4291985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123680' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9323271' lon='-1.4450979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650904' timestamp='2007-04-05T14:21:13+01:00' user='Dean Earley' visible='true' lat='50.9291' lon='-1.40135' />
-  <node id='14964132' timestamp='2007-02-18T21:25:13+00:00' visible='true' lat='50.916891' lon='-1.3837629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764418' timestamp='2007-05-30T21:37:23+01:00' user='nickw' visible='true' lat='50.9226087' lon='-1.363877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635131' timestamp='2007-04-05T14:21:13+01:00' user='Dean Earley' visible='true' lat='50.9041044' lon='-1.359304' />
-  <node id='244310979' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9665547' lon='-1.4316675' />
-  <node id='254848' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9128662' lon='-1.4374557' />
-  <node id='28243611' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.936925' lon='-1.4154727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209218' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9445855' lon='-1.449378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021820' timestamp='2007-04-03T00:53:05+01:00' user='Ben' visible='true' lat='50.9410095' lon='-1.3977499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632133' timestamp='2007-05-26T19:19:46+01:00' visible='true' lat='50.9570988' lon='-1.366718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141530' timestamp='2007-09-10T22:26:39+01:00' user='mike l' visible='true' lat='50.9342458' lon='-1.3950983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021741' timestamp='2007-04-03T00:52:29+01:00' user='Ben' visible='true' lat='50.9362629' lon='-1.3932039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178479' timestamp='2007-12-06T20:43:05+00:00' user='Dean Earley' visible='true' lat='50.9973583' lon='-1.3569679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963770' timestamp='2007-04-29T08:58:10+01:00' user='Dean Earley' visible='true' lat='50.9422357' lon='-1.4087226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298267' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9612192' lon='-1.3987857' />
-  <node id='19228105' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9485348' lon='-1.4253577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091846' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9093895' lon='-1.4221124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632451' timestamp='2007-05-26T19:27:12+01:00' visible='true' lat='50.9610611' lon='-1.3670163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575762' timestamp='2007-03-16T21:52:28+00:00' user='nickw' visible='true' lat='50.8994976' lon='-1.3904774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504279' timestamp='2007-01-28T19:31:52+00:00' user='nickw' visible='true' lat='50.9983639' lon='-1.3525624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949865' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9958147' lon='-1.3723241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='53421251' timestamp='2007-09-17T23:09:04+01:00' user='mike l' visible='true' lat='50.9759891' lon='-1.4287874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962292' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9583779' lon='-1.3679886' />
-  <node id='21613491' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.993878' lon='-1.3995101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224268' timestamp='2007-06-11T22:06:23+01:00' visible='true' lat='50.9834178' lon='-1.3545738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114389' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.9032436' lon='-1.3907488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008444' timestamp='2007-05-12T15:12:15+01:00' user='nickw' visible='true' lat='50.9264935' lon='-1.3496892'>
-    <tag k='name' v='GRASMERE C' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071324' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9200023' lon='-1.3625194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447515' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.910574' lon='-1.3863006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133078' timestamp='2007-05-15T20:36:52+01:00' user='nickw' visible='true' lat='50.933922' lon='-1.3756023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346768' timestamp='2007-03-04T18:57:55+00:00' user='Dean Earley' visible='true' lat='50.9146336' lon='-1.3639869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471835' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.9379083' lon='-1.3682613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621209' timestamp='2007-06-30T12:32:04+01:00' visible='true' lat='50.9703841' lon='-1.354003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925348' timestamp='2007-06-03T20:36:37+01:00' visible='true' lat='50.979386' lon='-1.3641289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956734' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.9273082' lon='-1.3517574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254469' timestamp='2007-02-18T20:18:18+00:00' visible='true' lat='50.9106009' lon='-1.3671973' />
-  <node id='24924317' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9880166' lon='-1.3740555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575744' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9022206' lon='-1.395727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689061' timestamp='2007-05-01T23:50:34+01:00' user='nickw' visible='true' lat='50.9402312' lon='-1.3747421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518776' timestamp='2007-04-05T14:21:13+01:00' user='Dean Earley' visible='true' lat='50.9157473' lon='-1.394593' />
-  <node id='29990889' timestamp='2007-06-05T20:41:24+01:00' visible='true' lat='51.0002768' lon='-1.3525095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730527' timestamp='2007-05-28T19:36:54+01:00' visible='true' lat='50.9676174' lon='-1.3694641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705732' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true' lat='50.8956294' lon='-1.4044754' />
-  <node id='29816436' timestamp='2007-05-31T22:00:54+01:00' visible='true' lat='50.9909408' lon='-1.3550743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324978' timestamp='2006-09-02T12:59:33+01:00' user='Dean Earley' visible='true' lat='50.9604789' lon='-1.4056647' />
-  <node id='29764414' timestamp='2007-05-29T22:14:30+01:00' user='Jodi Crisp' visible='true' lat='50.925344' lon='-1.3611042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419621' timestamp='2006-12-02T23:23:54+00:00' user='Dean Earley' visible='true' lat='50.9399566' lon='-1.3785784'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762106' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.939107' lon='-1.3533385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160378354' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9220002' lon='-1.4693847' />
-  <node id='11968238' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9972304' lon='-1.3918457'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28179531' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9570391' lon='-1.3991796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27513795' timestamp='2007-04-21T22:32:29+01:00' user='Dean Earley' visible='true' lat='50.9661214' lon='-1.3521363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091397' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9864713' lon='-1.4446911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723042' timestamp='2006-10-06T23:52:00+01:00' user='Dean Earley' visible='true' lat='50.9948573' lon='-1.3589152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419253' timestamp='2006-12-02T22:59:19+00:00' user='Dean Earley' visible='true' lat='50.937733' lon='-1.36121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071226' timestamp='2006-08-11T02:47:58+01:00' user='Dean Earley' visible='true' lat='50.920763' lon='-1.3712358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091826' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.9095634' lon='-1.4249248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398447' timestamp='2007-04-03T00:53:56+01:00' user='Ben' visible='true' lat='50.9377457' lon='-1.3994485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160264001' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9547337' lon='-1.3707417' />
-  <node id='19111055' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9864422' lon='-1.385282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963787' timestamp='2007-04-29T08:58:10+01:00' user='Dean Earley' visible='true' lat='50.9417661' lon='-1.409899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296271' timestamp='2007-01-19T09:52:14+00:00' user='Dean Earley' visible='true' lat='50.972353' lon='-1.36815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419423' timestamp='2006-12-02T23:18:50+00:00' user='Dean Earley' visible='true' lat='50.9399071' lon='-1.3658503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147526' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.910194' lon='-1.4023458' />
-  <node id='26575723' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.901226' lon='-1.4004638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124206' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.9227432' lon='-1.348078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341766' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9108119' lon='-1.360239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727987' timestamp='2007-02-18T21:25:30+00:00' visible='true' lat='50.9173394' lon='-1.403161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48965778' timestamp='2007-10-28T20:55:19+00:00' user='Nick Dyer' visible='true' lat='50.9048856' lon='-1.406679'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='28243612' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.9379461' lon='-1.4143165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914341' timestamp='2007-06-03T16:16:25+01:00' visible='true' lat='50.9850071' lon='-1.3605519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926803' timestamp='2007-06-03T21:02:53+01:00' visible='true' lat='50.9791104' lon='-1.3645291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162102' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true' lat='50.9725784' lon='-1.3778217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180219' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9618043' lon='-1.4257888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794384' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.922601' lon='-1.3628973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783092' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9468064' lon='-1.3531409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316549' timestamp='2007-04-03T00:52:08+01:00' user='Dean Earley' visible='true' lat='50.9210077' lon='-1.4472068'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591319' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.9167467' lon='-1.4129697'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='254942' timestamp='2006-09-04T02:08:07+01:00' user='Dean Earley' visible='true' lat='50.9494004' lon='-1.4142704' />
-  <node id='29929615' timestamp='2007-06-03T22:07:09+01:00' visible='true' lat='50.977338' lon='-1.3574798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29733564' timestamp='2007-05-28T21:26:03+01:00' user='LivingWithDragons' visible='true' lat='50.9808782' lon='-1.4453201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372773' timestamp='2007-05-01T10:05:20+01:00' visible='true' lat='50.9302498' lon='-1.4346205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932242' timestamp='2007-05-10T20:49:10+01:00' user='Dean Earley' visible='true' lat='50.98306' lon='-1.4536391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179453' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9557545' lon='-1.4260279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301595' timestamp='2005-12-08T22:43:53+00:00' user='nickw' visible='true' lat='50.9282827' lon='-1.4042759' />
-  <node id='24984774' timestamp='2007-01-10T00:14:44+00:00' user='nickw' visible='true' lat='50.9420489' lon='-1.3913879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246354' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.9382662' lon='-1.426902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935750' timestamp='2007-05-11T00:50:42+01:00' visible='true' lat='50.9407377' lon='-1.4459979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632417' timestamp='2007-05-26T19:26:31+01:00' visible='true' lat='50.9555725' lon='-1.3681357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504460' timestamp='2007-06-17T21:43:57+01:00' visible='true' lat='50.9821767' lon='-1.3579127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601295' timestamp='2006-09-01T00:16:01+01:00' user='nickw' visible='true' lat='50.8179474' lon='-1.5714741'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='245147283' timestamp='2008-02-03T06:02:10+00:00' user='sladen' visible='true' lat='50.9092956' lon='-1.4043629' />
-  <node id='27021760' timestamp='2007-04-03T00:52:40+01:00' user='Ben' visible='true' lat='50.9398499' lon='-1.3795135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548706' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.9634338' lon='-1.3705952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998536' timestamp='2007-06-05T23:13:22+01:00' user='nickw' visible='true' lat='50.9634532' lon='-1.4460697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966299' timestamp='2006-11-12T17:51:45+00:00' user='Dean Earley' visible='true' lat='50.9149203' lon='-1.363469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29543385' timestamp='2007-05-24T10:51:05+01:00' visible='true' lat='50.9644955' lon='-1.3648343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924302' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9739991' lon='-1.3751841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964057' timestamp='2006-12-16T17:47:17+00:00' user='David Currie' visible='true' lat='50.9994469' lon='-1.4428046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816435' timestamp='2007-05-31T22:00:53+01:00' visible='true' lat='50.9908596' lon='-1.3551028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972780' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9066424' lon='-1.4190622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909670' timestamp='2007-06-03T14:54:19+01:00' visible='true' lat='50.9681209' lon='-1.351971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236118' timestamp='2007-04-29T19:25:40+01:00' user='Andy Street' visible='true' lat='50.9076613' lon='-1.3550841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107354' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9330998' lon='-1.3528558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896253' timestamp='2007-10-16T17:59:42+01:00' user='Dean Earley' visible='true' lat='50.9653146' lon='-1.3923589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675690' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.9002446' lon='-1.4438205' />
-  <node id='29710869' timestamp='2007-05-28T14:29:46+01:00' visible='true' lat='50.9868035' lon='-1.352522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486267' timestamp='2007-07-09T11:55:39+01:00' visible='true' lat='50.9107364' lon='-1.3832255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783095' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.942987' lon='-1.3555203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548689' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9629286' lon='-1.3651806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998135' timestamp='2007-06-05T23:00:30+01:00' user='nickw' visible='true' lat='50.991285' lon='-1.4025416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092023' timestamp='2007-05-10T21:08:00+01:00' user='Dean Earley' visible='true' lat='50.9770086' lon='-1.4388517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254318' timestamp='2006-11-11T22:14:27+00:00' user='Dean Earley' visible='true' lat='50.9549002' lon='-1.4206515' />
-  <node id='29762564' timestamp='2007-05-31T21:23:02+01:00' visible='true' lat='50.9885203' lon='-1.3572949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704662' timestamp='2006-08-26T00:08:08+01:00' user='dmgroom' visible='true' lat='50.8737913' lon='-1.3980177' />
-  <node id='29816731' timestamp='2007-05-31T22:13:29+01:00' visible='true' lat='50.9902591' lon='-1.3567698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008801' timestamp='2007-05-12T15:20:39+01:00' user='nickw' visible='true' lat='50.9273482' lon='-1.350057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52569045' timestamp='2007-09-16T10:11:15+01:00' user='mike l' visible='true' lat='50.9974266' lon='-1.4309601' />
-  <node id='29001301' timestamp='2007-05-12T09:40:10+01:00' user='nickw' visible='true' lat='50.9373271' lon='-1.388832'>
-    <tag k='name' v='BEALING CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071341' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9180354' lon='-1.3637664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='76476563' timestamp='2007-10-17T15:40:56+01:00' user='Nick Dyer' visible='true' lat='50.8998782' lon='-1.4445035' />
-  <node id='48967851' timestamp='2007-12-10T21:06:05+00:00' user='sladen' visible='true' lat='50.9038496' lon='-1.4161611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254682' timestamp='2006-10-06T23:29:33+01:00' user='Dean Earley' visible='true' lat='50.9697912' lon='-1.3569486' />
-  <node id='27238995' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.900775' lon='-1.4097539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259900' timestamp='2007-04-29T23:09:26+01:00' user='Andy Street' visible='true' lat='50.9017369' lon='-1.3487158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507163' timestamp='2007-06-17T22:07:52+01:00' visible='true' lat='50.976526' lon='-1.3585276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935724' timestamp='2007-05-11T00:47:44+01:00' visible='true' lat='50.9415342' lon='-1.4393952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398383' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9466673' lon='-1.4457465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816573' timestamp='2007-05-31T22:04:31+01:00' visible='true' lat='50.9911741' lon='-1.354666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838301' timestamp='2007-06-01T20:13:23+01:00' visible='true' lat='50.996213' lon='-1.3526147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200356' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.941927' lon='-1.4454072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928994' timestamp='2007-06-03T21:57:57+01:00' visible='true' lat='50.9761626' lon='-1.3640621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254335' timestamp='2005-11-15T15:39:05+00:00' user='nickw' visible='true' lat='50.9484972' lon='-1.4134988' />
-  <node id='29728914' timestamp='2007-05-28T19:12:44+01:00' visible='true' lat='50.9719692' lon='-1.3612549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871551' timestamp='2007-06-02T18:39:46+01:00' visible='true' lat='50.9153628' lon='-1.3526929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217120' timestamp='2006-12-16T01:02:12+00:00' user='Dean Earley' visible='true' lat='50.9182542' lon='-1.3585807'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998954' timestamp='2007-06-05T23:28:53+01:00' user='nickw' visible='true' lat='50.9887339' lon='-1.4427122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348130' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9336106' lon='-1.3667491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296309' timestamp='2007-01-19T09:52:17+00:00' user='Dean Earley' visible='true' lat='50.9767306' lon='-1.3640429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976813' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9257873' lon='-1.4222607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930929' timestamp='2007-06-03T22:32:33+01:00' visible='true' lat='50.9992549' lon='-1.3526712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232075' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9105166' lon='-1.4103445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089145' timestamp='2007-06-08T18:12:12+01:00' visible='true' lat='50.9666619' lon='-1.3741837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163078' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9717777' lon='-1.3875862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125580530' timestamp='2007-12-07T13:24:50+00:00' user='Nick Dyer' visible='true' lat='50.9624449' lon='-1.4247403' />
-  <node id='28414274' timestamp='2007-09-20T19:44:50+01:00' user='mike l' visible='true' lat='50.9400643' lon='-1.3755912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491398' timestamp='2007-11-28T12:24:18+00:00' user='Dean Earley' visible='true' lat='50.9138851' lon='-1.4118332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130932' timestamp='2006-10-28T01:45:33+01:00' user='Dean Earley' visible='true' lat='50.9349637' lon='-1.3603211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160277830' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9149337' lon='-1.459628' />
-  <node id='13885352' timestamp='2007-02-11T00:33:24+00:00' visible='true' lat='50.90179' lon='-1.4040802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254524' timestamp='2007-02-18T21:30:35+00:00' visible='true' lat='50.8990552' lon='-1.391672' />
-  <node id='16963740' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.93327' lon='-1.4098587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254284' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9728041' lon='-1.3405462' />
-  <node id='24949820' timestamp='2007-01-07T12:38:44+00:00' user='nickw' visible='true' lat='50.987753' lon='-1.3850501'>
-    <tag k='name' v='MERRIELEAS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700437' timestamp='2007-04-05T14:21:14+01:00' user='Dean Earley' visible='true' lat='50.923562' lon='-1.3830827' />
-  <node id='29462158' timestamp='2007-05-21T23:53:38+01:00' user='nickw' visible='true' lat='50.9005148' lon='-1.3987528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380436' timestamp='2007-05-20T10:19:28+01:00' user='nickw' visible='true' lat='50.9439258' lon='-1.3753364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874144' timestamp='2007-06-02T19:43:16+01:00' visible='true' lat='50.9602096' lon='-1.3577032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='205342802' timestamp='2008-01-03T19:20:40+00:00' user='nickw' visible='true' lat='50.9997759' lon='-1.3524595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91126048' timestamp='2007-10-29T08:17:57+00:00' user='nickw' visible='true' lat='50.929531' lon='-1.446733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329523' timestamp='2007-04-05T14:21:14+01:00' user='Dean Earley' visible='true' lat='50.9676' lon='-1.42284' />
-  <node id='14743186' timestamp='2007-10-26T13:37:53+01:00' user='Nick Dyer' visible='true' lat='50.933889' lon='-1.4188105'>
-    <tag k='key' v='Total' />
-    <tag k='amenity' v='fuel' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='14726556' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.911575' lon='-1.4010659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310898' timestamp='2007-02-18T21:25:26+00:00' visible='true' lat='50.9170818' lon='-1.3985252' />
-  <node id='30290770' timestamp='2007-06-13T09:24:06+01:00' visible='true' lat='50.9699618' lon='-1.3825191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661158' timestamp='2007-04-05T14:21:14+01:00' user='Dean Earley' visible='true' lat='50.9063616' lon='-1.3578207' />
-  <node id='29909655' timestamp='2007-06-03T14:54:16+01:00' visible='true' lat='50.9688489' lon='-1.3544794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815555' timestamp='2007-05-31T21:42:55+01:00' visible='true' lat='50.9891263' lon='-1.358305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071264' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9191939' lon='-1.3606073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360186' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9526362' lon='-1.3701751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507781' timestamp='2007-05-22T00:19:48+01:00' user='Dean Earley' visible='true' lat='50.94817' lon='-1.3994815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830667' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9238108' lon='-1.36422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794811' timestamp='2007-05-30T21:41:50+01:00' user='nickw' visible='true' lat='50.9191601' lon='-1.3536542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173963' timestamp='2007-04-29T01:03:26+01:00' visible='true' lat='50.9419133' lon='-1.4342321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549397' timestamp='2007-05-24T11:22:54+01:00' visible='true' lat='50.9619669' lon='-1.3768311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244372880' timestamp='2008-01-31T17:11:17+00:00' user='Dean Earley' visible='true' lat='50.9078262' lon='-1.2452967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227259' timestamp='2006-10-23T20:52:59+01:00' user='nickw' visible='true' lat='50.9407706' lon='-1.4102595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241446' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.9450909' lon='-1.4497841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179489' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.9542905' lon='-1.4041212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243471' timestamp='2007-04-29T20:23:53+01:00' user='Dean Earley' visible='true' lat='50.9405477' lon='-1.4071638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998061' timestamp='2007-06-05T23:00:21+01:00' user='nickw' visible='true' lat='50.9858951' lon='-1.41172'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636937' timestamp='2007-04-03T00:52:09+01:00' user='Dean Earley' visible='true' lat='50.916756' lon='-1.426273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632171' timestamp='2007-05-26T19:20:16+01:00' visible='true' lat='50.957387' lon='-1.3679914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239964' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.9075736' lon='-1.4159058' />
-  <node id='29925393' timestamp='2007-06-03T20:40:37+01:00' visible='true' lat='50.9810494' lon='-1.3631249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973098' timestamp='2006-11-13T00:42:42+00:00' user='Dean Earley' visible='true' lat='50.9027422' lon='-1.4080041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808661' timestamp='2007-11-11T18:09:35+00:00' user='Dean Earley' visible='true' lat='50.9151323' lon='-1.3581164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639957' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9031009' lon='-1.3771436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431983' timestamp='2007-06-16T16:26:05+01:00' visible='true' lat='50.984736' lon='-1.3522935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743136' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9262779' lon='-1.436977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518806' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9298932' lon='-1.3852521' />
-  <node id='14743167' timestamp='2007-04-29T20:37:43+01:00' user='Dean Earley' visible='true' lat='50.9341261' lon='-1.418771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249993' timestamp='2007-04-29T21:42:10+01:00' visible='true' lat='50.9159749' lon='-1.4441486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325665' timestamp='2007-04-29T20:52:53+01:00' user='Dean Earley' visible='true' lat='50.9349231' lon='-1.4337758' />
-  <node id='28194395' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9459304' lon='-1.4401818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194422' timestamp='2007-04-29T21:10:29+01:00' visible='true' lat='50.9479939' lon='-1.4360824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102976' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.934391' lon='-1.3650301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222190' timestamp='2007-02-18T21:30:22+00:00' visible='true' lat='50.9129963' lon='-1.4372553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640028' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9164703' lon='-1.3714113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096944' timestamp='2007-06-13T09:24:44+01:00' visible='true' lat='50.96452' lon='-1.3797124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998971' timestamp='2007-06-05T23:28:56+01:00' user='nickw' visible='true' lat='50.9884588' lon='-1.4365535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325020' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9581798' lon='-1.4136289' />
-  <node id='92683730' timestamp='2007-10-30T17:25:08+00:00' user='Nick Dyer' visible='true' lat='50.9609709' lon='-1.4244364' />
-  <node id='122316827' timestamp='2007-11-18T19:04:32+00:00' user='nickw' visible='true' lat='50.9137851' lon='-1.4359184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724250' timestamp='2007-02-18T21:30:18+00:00' visible='true' lat='50.913793' lon='-1.4115267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133116' timestamp='2006-10-28T01:55:38+01:00' user='Dean Earley' visible='true' lat='50.9275425' lon='-1.3547355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305601' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9911323' lon='-1.3939333' />
-  <node id='21141414' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9279507' lon='-1.4280945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773918' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9202255' lon='-1.4636255' />
-  <node id='30225257' timestamp='2007-06-11T22:10:26+01:00' visible='true' lat='50.9820724' lon='-1.3561013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114358' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9058308' lon='-1.3958472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298254' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='50.9754826' lon='-1.3730189' />
-  <node id='29928070' timestamp='2007-06-03T21:43:52+01:00' visible='true' lat='50.9800744' lon='-1.3693196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925572' timestamp='2007-06-03T20:41:54+01:00' visible='true' lat='50.9815621' lon='-1.3624707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331814' timestamp='2007-12-06T20:44:25+00:00' user='nickw' visible='true' lat='50.9421189' lon='-1.4423593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706434' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.923917' lon='-1.379131'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29998979' timestamp='2007-06-05T23:28:57+01:00' user='nickw' visible='true' lat='50.9896343' lon='-1.4357191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704317' timestamp='2007-05-28T10:32:52+01:00' visible='true' lat='50.9859466' lon='-1.3586827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526314' timestamp='2007-05-23T09:19:02+01:00' user='nickw' visible='true' lat='50.9277967' lon='-1.3628674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269320' timestamp='2006-10-22T23:24:25+01:00' user='Ben' visible='true' lat='50.9921126' lon='-1.3898016' />
-  <node id='24924332' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9770263' lon='-1.3948919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596801' timestamp='2007-04-20T23:53:16+01:00' user='Dean Earley' visible='true' lat='50.9177504' lon='-1.382536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296294' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9799872' lon='-1.3620769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831109' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.911366' lon='-1.4073656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132708' timestamp='2006-11-11T17:58:16+00:00' user='Dean Earley' visible='true' lat='50.9474216' lon='-1.4709162' />
-  <node id='28342578' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.908983' lon='-1.3613118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730513' timestamp='2007-05-28T19:36:40+01:00' visible='true' lat='50.9705355' lon='-1.3688749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564827' timestamp='2006-12-16T01:07:07+00:00' user='Dean Earley' visible='true' lat='50.9324075' lon='-1.3573321'>
-    <tag k='highway' v='gate' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29924353' timestamp='2007-06-03T20:10:40+01:00' visible='true' lat='50.9828603' lon='-1.3613369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482300' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8967687' lon='-1.4266528' />
-  <node id='28903062' timestamp='2007-05-09T23:03:39+01:00' visible='true' lat='50.9424582' lon='-1.3708041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252906' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9453066' lon='-1.4279831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021835' timestamp='2007-05-22T00:19:49+01:00' user='Dean Earley' visible='true' lat='50.9377428' lon='-1.4092571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718236' timestamp='2007-08-08T01:31:05+01:00' visible='true' lat='50.9335355' lon='-1.4449106' />
-  <node id='28249920' timestamp='2007-04-29T21:41:47+01:00' visible='true' lat='50.9173771' lon='-1.455532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728000' timestamp='2007-01-28T00:06:51+00:00' visible='true' lat='50.9256658' lon='-1.4054662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924110' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9399606' lon='-1.3704558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180212' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9621887' lon='-1.427147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984715' timestamp='2007-01-10T00:11:58+00:00' user='nickw' visible='true' lat='50.9446908' lon='-1.3906551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728178' timestamp='2007-04-29T02:05:43+01:00' user='Dean Earley' visible='true' lat='50.9521992' lon='-1.4037309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997540' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0009128' lon='-1.3507489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471852' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9394618' lon='-1.3676705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372743' timestamp='2007-05-01T10:05:16+01:00' visible='true' lat='50.9319585' lon='-1.4415802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971214' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9088142' lon='-1.4121228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33130197' timestamp='2007-07-30T16:06:34+01:00' visible='true' lat='50.9137857' lon='-1.4141517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161101' timestamp='2007-06-10T18:13:37+01:00' visible='true' lat='50.9738762' lon='-1.3527059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431998' timestamp='2007-06-16T16:26:10+01:00' visible='true' lat='50.9710234' lon='-1.3515271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707331' timestamp='2007-06-03T15:50:16+01:00' visible='true' lat='50.9872976' lon='-1.3600571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675830' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9251794' lon='-1.375739' />
-  <node id='29530363' timestamp='2007-05-28T10:44:50+01:00' visible='true' lat='50.9783618' lon='-1.3525743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142612652' timestamp='2007-11-29T22:26:19+00:00' user='nickw' visible='true' lat='50.9119576' lon='-1.4149963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998084' timestamp='2007-06-05T23:00:24+01:00' user='nickw' visible='true' lat='50.9895655' lon='-1.4059289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726569' timestamp='2008-02-03T05:57:48+00:00' user='sladen' visible='true' lat='50.9140688' lon='-1.4012386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976666' timestamp='2006-11-13T21:39:12+00:00' user='nickw' visible='true' lat='50.9290141' lon='-1.4200989'>
-    <tag k='name' v='LUCCOMBE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142612637' timestamp='2007-11-29T22:26:18+00:00' user='nickw' visible='true' lat='50.9116664' lon='-1.4157065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670533' timestamp='2007-05-27T11:12:21+01:00' visible='true' lat='50.9690088' lon='-1.3639428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303109' timestamp='2007-01-19T18:20:22+00:00' user='Dean Earley' visible='true' lat='50.9492951' lon='-1.3691656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621235' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9522574' lon='-1.3697546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549382' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9643206' lon='-1.3751679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325254' timestamp='2006-11-11T17:22:34+00:00' user='Dean Earley' visible='true' lat='50.9262251' lon='-1.3157856' />
-  <node id='325688' timestamp='2007-04-05T14:21:15+01:00' user='Dean Earley' visible='true' lat='50.9204' lon='-1.41252' />
-  <node id='14957850' timestamp='2007-05-04T02:33:07+01:00' user='Dean Earley' visible='true' lat='50.9450783' lon='-1.4508062'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='9267992' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9406006' lon='-1.3777471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711603' timestamp='2007-05-28T14:46:28+01:00' visible='true' lat='50.9761523' lon='-1.3649106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110488' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9278468' lon='-1.4361516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160415530' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true' lat='50.9109451' lon='-1.4295764' />
-  <node id='90577066' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9120577' lon='-1.4373025' />
-  <node id='25640043' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9137253' lon='-1.3608246'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817078' timestamp='2007-05-31T22:18:47+01:00' visible='true' lat='50.9856077' lon='-1.3645251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249804' timestamp='2007-04-29T21:41:32+01:00' visible='true' lat='50.9181623' lon='-1.4471245'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244126' timestamp='2007-04-29T20:35:34+01:00' user='Andy Street' visible='true' lat='50.9046697' lon='-1.3503917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579402' timestamp='2006-12-14T13:52:49+00:00' user='David Currie' visible='true' lat='50.9767868' lon='-1.4042772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133049' timestamp='2007-05-15T20:36:43+01:00' user='nickw' visible='true' lat='50.9327325' lon='-1.3767744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871570' timestamp='2007-06-02T18:40:11+01:00' visible='true' lat='50.9160855' lon='-1.3515793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52570895' timestamp='2007-09-24T20:20:40+01:00' user='mike l' visible='true' lat='50.9972376' lon='-1.4315609' />
-  <node id='29708012' timestamp='2007-05-28T12:03:59+01:00' visible='true' lat='50.9862911' lon='-1.3619826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171754' timestamp='2007-05-16T23:48:00+01:00' user='nickw' visible='true' lat='50.9414921' lon='-1.3881774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388902' timestamp='2007-04-05T14:21:15+01:00' user='Dean Earley' visible='true' lat='50.9432' lon='-1.39593' />
-  <node id='201642321' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9507686' lon='-1.3605595' />
-  <node id='29912981' timestamp='2007-06-03T15:50:12+01:00' visible='true' lat='50.9871382' lon='-1.3593573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773775' timestamp='2007-12-07T13:53:38+00:00' user='Nick Dyer' visible='true' lat='50.9616286' lon='-1.4278903' />
-  <node id='28903906' timestamp='2007-10-16T11:34:26+01:00' user='Dean Earley' visible='true' lat='50.9500222' lon='-1.3644575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600434' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9220958' lon='-1.4505827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932450' timestamp='2007-05-10T21:06:02+01:00' user='Dean Earley' visible='true' lat='50.962726' lon='-1.4564029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706637' timestamp='2007-04-05T14:21:15+01:00' user='Dean Earley' visible='true' lat='50.915912' lon='-1.3808107' />
-  <node id='30229556' timestamp='2007-06-12T00:14:35+01:00' user='nickw' visible='true' lat='50.9334354' lon='-1.353626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972819' timestamp='2006-11-13T00:07:30+00:00' user='Dean Earley' visible='true' lat='50.8995459' lon='-1.3959737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474843' timestamp='2007-04-05T14:21:16+01:00' user='Dean Earley' visible='true' lat='50.9355138' lon='-1.35334' />
-  <node id='8596767' timestamp='2006-11-13T00:43:24+00:00' user='Dean Earley' visible='true' lat='50.905583' lon='-1.4097505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254665' timestamp='2006-12-02T23:56:42+00:00' user='Dean Earley' visible='true' lat='50.9313575' lon='-1.4010988' />
-  <node id='21613427' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9760869' lon='-1.402048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780864' timestamp='2007-06-22T21:11:28+01:00' user='Steve Chilton' visible='true' lat='50.9078432' lon='-1.4133324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248238' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8928336' lon='-1.3973065' />
-  <node id='48950457' timestamp='2007-09-10T23:28:32+01:00' visible='true' lat='50.9121525' lon='-1.3985539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640009' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9096303' lon='-1.3712556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301553' timestamp='2006-09-04T18:54:43+01:00' user='Dean Earley' visible='true' lat='50.8993985' lon='-1.4022448' />
-  <node id='160233337' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9069133' lon='-1.3958386' />
-  <node id='13071290' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9201161' lon='-1.3575245'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700405' timestamp='2007-04-05T14:21:16+01:00' user='Dean Earley' visible='true' lat='50.9222808' lon='-1.3897859' />
-  <node id='24984685' timestamp='2007-01-10T00:10:53+00:00' user='nickw' visible='true' lat='50.9453604' lon='-1.3886784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254250' timestamp='2005-11-15T15:38:44+00:00' user='nickw' visible='true' lat='50.9540032' lon='-1.3740454' />
-  <node id='30089110' timestamp='2007-06-08T18:12:07+01:00' visible='true' lat='50.9665894' lon='-1.3808868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380413' timestamp='2007-05-20T10:19:25+01:00' user='nickw' visible='true' lat='50.9439258' lon='-1.3802832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341748' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9133297' lon='-1.3505241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998523' timestamp='2007-06-05T23:13:20+01:00' user='nickw' visible='true' lat='50.9598996' lon='-1.4564004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671369' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9150295' lon='-1.4390228' />
-  <node id='28173993' timestamp='2007-04-29T01:03:47+01:00' visible='true' lat='50.9424349' lon='-1.4351861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359699' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9678736' lon='-1.3527335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301584' timestamp='2007-04-29T01:14:17+01:00' user='Dean Earley' visible='true' lat='50.9101575' lon='-1.4005364' />
-  <node id='21624991' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.8997383' lon='-1.3663544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930865' timestamp='2007-06-03T22:30:55+01:00' visible='true' lat='50.9987785' lon='-1.3539215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949901' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9938641' lon='-1.3809462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254401' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.941268' lon='-1.3723605' />
-  <node id='24949952' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9954146' lon='-1.3861116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636759' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.946433' lon='-1.4016196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179467' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9630901' lon='-1.4088762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677159' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8959464' lon='-1.4436917' />
-  <node id='21689129' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.940912' lon='-1.3863112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504292' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='50.9999892' lon='-1.3449733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675771' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9127093' lon='-1.4360481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743155' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9226778' lon='-1.4298199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245154220' timestamp='2008-02-03T06:26:32+00:00' user='sladen' visible='true' lat='50.9078993' lon='-1.3943807' />
-  <node id='30581718' timestamp='2007-06-18T21:23:07+01:00' visible='true' lat='50.9692745' lon='-1.3569277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194880' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9429059' lon='-1.4122129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463002' timestamp='2007-05-22T00:01:30+01:00' user='nickw' visible='true' lat='50.9069664' lon='-1.4038725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244177' timestamp='2007-04-29T20:36:18+01:00' user='Andy Street' visible='true' lat='50.9044238' lon='-1.3524834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071235' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9220792' lon='-1.3620537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115438' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9272207' lon='-1.4428219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325231' timestamp='2005-12-16T23:09:12+00:00' user='80n' visible='true' lat='50.9353093' lon='-1.34052' />
-  <node id='30225795' timestamp='2007-06-11T22:16:46+01:00' visible='true' lat='50.9835048' lon='-1.3557344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372758' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.9303213' lon='-1.4422889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21585942' timestamp='2007-04-29T17:20:42+01:00' visible='true' lat='50.9697077' lon='-1.3561622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127602' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9360472' lon='-1.4358127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325017' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9585071' lon='-1.4173151' />
-  <node id='8596793' timestamp='2007-02-11T00:33:29+00:00' visible='true' lat='50.9179241' lon='-1.381171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331346' timestamp='2007-12-06T22:10:52+00:00' user='Dean Earley' visible='true' lat='51.0086' lon='-1.38097' />
-  <node id='28345028' timestamp='2007-04-30T23:00:34+01:00' user='nickw' visible='true' lat='50.9001075' lon='-1.3625229'>
-    <tag k='name' v='BRACK CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592373' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9122471' lon='-1.4434222' />
-  <node id='28583003' timestamp='2007-05-03T00:08:36+01:00' visible='true' lat='50.9405207' lon='-1.4302601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275701' timestamp='2006-11-25T23:51:15+00:00' user='nickw' visible='true' lat='50.9200322' lon='-1.4352902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249971' timestamp='2007-04-29T21:42:04+01:00' visible='true' lat='50.9153521' lon='-1.447785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931318' timestamp='2007-12-06T20:43:05+00:00' user='Dean Earley' visible='true' lat='50.9982823' lon='-1.3580544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388951' timestamp='2007-04-05T14:21:16+01:00' user='Dean Earley' visible='true' lat='50.9379736' lon='-1.3970392' />
-  <node id='30508722' timestamp='2007-06-17T22:15:43+01:00' visible='true' lat='50.9754851' lon='-1.3527063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342638' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9114132' lon='-1.3661394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347587' timestamp='2007-04-30T23:36:50+01:00' user='nickw' visible='true' lat='50.9268804' lon='-1.3572528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707229' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8503513' lon='-1.3156141'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13565105' timestamp='2006-08-15T12:21:53+01:00' user='nickw' visible='true' lat='50.9325666' lon='-1.3528126'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Two Brothers' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='305226' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='50.996235' lon='-1.3577534' />
-  <node id='21636740' timestamp='2007-03-24T16:43:27+00:00' user='Dean Earley' visible='true' lat='50.9483147' lon='-1.4016338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874053' timestamp='2007-08-08T01:26:29+01:00' visible='true' lat='50.9359087' lon='-1.4418569' />
-  <node id='29953504' timestamp='2007-06-04T21:24:03+01:00' visible='true' lat='50.9885074' lon='-1.3686536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783077' timestamp='2007-02-11T18:07:11+00:00' user='nickw' visible='true' lat='50.9397258' lon='-1.3597748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913605' timestamp='2007-06-03T15:53:27+01:00' visible='true' lat='50.9862841' lon='-1.3610211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474651' timestamp='2007-04-05T14:21:16+01:00' user='Dean Earley' visible='true' lat='50.9335924' lon='-1.3523155' />
-  <node id='469852' timestamp='2007-04-05T14:21:17+01:00' user='Dean Earley' visible='true' lat='50.9085268' lon='-1.4158849' />
-  <node id='4931456' timestamp='2007-11-11T18:09:47+00:00' user='Dean Earley' visible='true' lat='50.9203043' lon='-1.3904786' />
-  <node id='2742652' timestamp='2006-05-11T21:32:17+01:00' user='Dean Earley' visible='true' lat='50.9502568' lon='-1.4012411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009029' timestamp='2007-05-12T15:28:42+01:00' user='nickw' visible='true' lat='50.9304911' lon='-1.3507027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816769' timestamp='2007-05-31T22:15:43+01:00' visible='true' lat='50.9881781' lon='-1.3597903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310994' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9731704' lon='-1.4348089' />
-  <node id='24924234' timestamp='2007-02-13T19:46:57+00:00' user='Dean Earley' visible='true' lat='50.9622795' lon='-1.3793771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743118' timestamp='2007-04-03T00:52:13+01:00' user='Dean Earley' visible='true' lat='50.9092148' lon='-1.4169634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237230' timestamp='2007-04-29T19:42:01+01:00' user='Andy Street' visible='true' lat='50.9032485' lon='-1.3568345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290755' timestamp='2007-06-13T09:24:03+01:00' visible='true' lat='50.9647233' lon='-1.3807777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639960' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.9017615' lon='-1.3779186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124372' timestamp='2007-06-09T19:43:10+01:00' user='nickw' visible='true' lat='50.925038' lon='-1.3511921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163093' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.9717965' lon='-1.3858975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245151148' timestamp='2008-02-03T06:18:47+00:00' user='sladen' visible='true' lat='50.9088356' lon='-1.4006979' />
-  <node id='254267' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9509019' lon='-1.3512355' />
-  <node id='29997549' timestamp='2007-06-05T22:43:59+01:00' user='nickw' visible='true' lat='50.9997626' lon='-1.3479675'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504765' timestamp='2007-06-17T21:50:36+01:00' visible='true' lat='50.980878' lon='-1.3568898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598849' timestamp='2006-12-16T00:49:32+00:00' user='Dean Earley' visible='true' lat='50.8981364' lon='-1.3807922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684348' timestamp='2007-10-31T12:25:02+00:00' user='Dean Earley' visible='true' lat='50.9608195' lon='-1.422835' />
-  <node id='13071282' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9199601' lon='-1.3586726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549348' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.9665905' lon='-1.3698225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223090' timestamp='2007-06-11T21:51:53+01:00' visible='true' lat='50.9837498' lon='-1.356738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721063' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9706922' lon='-1.3598187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624974' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.9046209' lon='-1.3727634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998101' timestamp='2007-06-05T23:00:26+01:00' user='nickw' visible='true' lat='50.9851572' lon='-1.3977338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028846' timestamp='2006-09-08T23:06:50+01:00' user='Dean Earley' visible='true' lat='50.9280675' lon='-1.3602689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296386' timestamp='2007-01-19T09:58:46+00:00' user='Dean Earley' visible='true' lat='50.9759395' lon='-1.3711694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526772' timestamp='2007-05-23T09:49:13+01:00' visible='true' lat='50.9820342' lon='-1.3488193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704454' timestamp='2007-05-28T10:36:43+01:00' visible='true' lat='50.981987' lon='-1.3572386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160260404' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9510299' lon='-1.3693684' />
-  <node id='27512892' timestamp='2008-01-29T11:33:03+00:00' user='Dean Earley' visible='true' lat='50.9599748' lon='-1.347702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808690' timestamp='2007-11-11T18:09:36+00:00' user='Dean Earley' visible='true' lat='50.9150456' lon='-1.3591996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931393' timestamp='2007-06-03T22:43:14+01:00' visible='true' lat='50.9947509' lon='-1.3732554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194346' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9450017' lon='-1.437537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243705' timestamp='2007-04-29T20:25:19+01:00' user='Dean Earley' visible='true' lat='50.9390458' lon='-1.4098979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179506' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9543099' lon='-1.4019476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971176' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9060016' lon='-1.3990003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710563' timestamp='2007-05-28T14:15:21+01:00' visible='true' lat='50.983521' lon='-1.3601096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346847' timestamp='2007-03-04T18:58:02+00:00' user='Dean Earley' visible='true' lat='50.916124' lon='-1.370056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632235' timestamp='2007-05-26T19:23:13+01:00' visible='true' lat='50.9567667' lon='-1.3692286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816298' timestamp='2007-05-31T21:52:26+01:00' visible='true' lat='50.9911013' lon='-1.3542903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746394' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.9981851' lon='-1.3356852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305580' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9942865' lon='-1.3947272' />
-  <node id='25282113' timestamp='2007-01-17T21:10:10+00:00' user='David Currie' visible='true' lat='50.9768631' lon='-1.4070794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28388970' timestamp='2007-05-02T14:52:49+01:00' visible='true' lat='50.964306' lon='-1.362315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577118' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9644978' lon='-1.4220309' />
-  <node id='28583076' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.937083' lon='-1.4343841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924095' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.9393096' lon='-1.3751245'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561521' timestamp='2007-03-24T16:33:40+00:00' user='Dean Earley' visible='true' lat='50.922351' lon='-1.426599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339137' timestamp='2007-08-21T00:37:20+01:00' user='HenryDCase' visible='true' lat='50.9703287' lon='-1.3625055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179484' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.9533536' lon='-1.4042072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874151' timestamp='2007-06-02T19:43:17+01:00' visible='true' lat='50.9609586' lon='-1.3584427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227210' timestamp='2006-10-23T20:52:54+01:00' user='nickw' visible='true' lat='50.929958' lon='-1.4136306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949867' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9959397' lon='-1.3737942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342621' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9097471' lon='-1.3684042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480846' timestamp='2007-01-27T23:37:10+00:00' visible='true' lat='50.9260352' lon='-1.3903569'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='14957855' timestamp='2007-09-07T17:38:56+01:00' user='mike l' visible='true' lat='50.9436247' lon='-1.4328217'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='170453' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9522894' lon='-1.3996392' />
-  <node id='20957251' timestamp='2006-11-10T21:58:56+00:00' user='nickw' visible='true' lat='50.9169568' lon='-1.4261811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507751' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9327804' lon='-1.3993971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298284' timestamp='2006-09-02T12:59:34+01:00' user='Dean Earley' visible='true' lat='50.9593869' lon='-1.3947697' />
-  <node id='16963753' timestamp='2007-05-22T00:19:49+01:00' user='Dean Earley' visible='true' lat='50.9351395' lon='-1.4107685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096968' timestamp='2007-06-08T23:24:16+01:00' visible='true' lat='50.9634305' lon='-1.3815246'>
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Knightingale Primary School' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615424' timestamp='2006-12-16T21:52:53+00:00' user='nickw' visible='true' lat='50.9000966' lon='-1.4048951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964152' timestamp='2007-02-18T21:30:37+00:00' visible='true' lat='50.9164675' lon='-1.3815971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816633' timestamp='2007-05-31T22:10:48+01:00' visible='true' lat='50.9903819' lon='-1.3604174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223943' timestamp='2007-06-11T22:03:12+01:00' visible='true' lat='50.9836326' lon='-1.351622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372731' timestamp='2007-05-01T10:05:15+01:00' visible='true' lat='50.9314167' lon='-1.4422886'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='862475' timestamp='2007-04-05T14:21:18+01:00' user='Dean Earley' visible='true' lat='50.9144065' lon='-1.4011633' />
-  <node id='169424884' timestamp='2007-12-14T21:36:40+00:00' user='nickw' visible='true' lat='50.9330698' lon='-1.4425417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510062' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.903699' lon='-1.4172431' />
-  <node id='29931370' timestamp='2007-06-03T22:43:07+01:00' visible='true' lat='50.9951272' lon='-1.3725888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914197' timestamp='2007-06-03T16:02:36+01:00' visible='true' lat='50.9840919' lon='-1.3585709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180232' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9617393' lon='-1.4265367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127585' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9351019' lon='-1.4385493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141397' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9251957' lon='-1.4263661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727953' timestamp='2008-02-03T05:57:50+00:00' user='sladen' visible='true' lat='50.9141086' lon='-1.4016773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194861' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9440596' lon='-1.4079232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254831' timestamp='2007-04-03T00:52:14+01:00' user='Dean Earley' visible='true' lat='50.9186563' lon='-1.4287333' />
-  <node id='29009080' timestamp='2007-05-12T15:31:58+01:00' user='nickw' visible='true' lat='50.9295458' lon='-1.3514576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243548' timestamp='2007-04-29T20:24:28+01:00' user='Dean Earley' visible='true' lat='50.9371383' lon='-1.4133941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903835' timestamp='2007-10-16T11:34:25+01:00' user='Dean Earley' visible='true' lat='50.9509939' lon='-1.3623877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29387400' timestamp='2007-05-20T15:17:21+01:00' visible='true' lat='50.9657454' lon='-1.3624654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124664' timestamp='2007-06-09T19:48:37+01:00' user='nickw' visible='true' lat='50.9309422' lon='-1.3521556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305597' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9916043' lon='-1.3910365' />
-  <node id='28582914' timestamp='2007-05-02T23:57:41+01:00' visible='true' lat='50.940515' lon='-1.428295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246056' timestamp='2007-04-29T20:52:45+01:00' user='Dean Earley' visible='true' lat='50.9331777' lon='-1.4206275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704908' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.899787' lon='-1.451913'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='12591304' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9181686' lon='-1.4118291'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29997532' timestamp='2007-06-05T22:43:55+01:00' user='nickw' visible='true' lat='51.0061135' lon='-1.3535302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413142' timestamp='2007-04-05T14:21:18+01:00' user='Dean Earley' visible='true' lat='50.9157' lon='-1.3976' />
-  <node id='18347834' timestamp='2007-02-18T20:19:13+00:00' visible='true' lat='50.9305369' lon='-1.4127446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254635' timestamp='2007-02-18T21:25:27+00:00' visible='true' lat='50.9161761' lon='-1.3963367' />
-  <node id='20971146' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9099341' lon='-1.3991105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998561' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.9617515' lon='-1.4285074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124223' timestamp='2007-06-09T19:35:54+01:00' user='nickw' visible='true' lat='50.9242835' lon='-1.3513957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659241' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9024287' lon='-1.4075624' />
-  <node id='21561568' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9263227' lon='-1.4310605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194331' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9447003' lon='-1.4345355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595193' timestamp='2007-05-25T21:54:30+01:00' visible='true' lat='50.9692533' lon='-1.3535909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505728' timestamp='2007-05-22T19:28:30+01:00' visible='true' lat='50.9892552' lon='-1.352412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236135' timestamp='2007-04-29T19:25:55+01:00' user='Andy Street' visible='true' lat='50.9077665' lon='-1.3543879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133076' timestamp='2007-05-15T20:36:52+01:00' user='nickw' visible='true' lat='50.9337092' lon='-1.3754632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636804' timestamp='2007-04-29T02:33:51+01:00' user='Dean Earley' visible='true' lat='50.9521559' lon='-1.4059096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509852' timestamp='2007-05-22T21:20:26+01:00' visible='true' lat='50.9936388' lon='-1.3559901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745478' timestamp='2007-01-19T18:27:15+00:00' user='Dean Earley' visible='true' lat='50.9733194' lon='-1.3744829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102980' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9336845' lon='-1.368594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639975' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9000974' lon='-1.3796028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721029' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9654563' lon='-1.370085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796774' timestamp='2007-05-30T22:22:04+01:00' user='nickw' visible='true' lat='50.9141219' lon='-1.3531178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247792' timestamp='2007-09-05T17:47:14+01:00' user='mike l' visible='true' lat='50.9351591' lon='-1.396246' />
-  <node id='20957247' timestamp='2006-11-10T21:58:56+00:00' user='nickw' visible='true' lat='50.9180832' lon='-1.4190844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591399' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9163977' lon='-1.4572925' />
-  <node id='13707244' timestamp='2007-04-05T14:21:18+01:00' user='Dean Earley' visible='true' lat='50.8496197' lon='-1.313933' />
-  <node id='29998070' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9842442' lon='-1.4137067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464234' timestamp='2007-05-22T00:19:09+01:00' user='Dean Earley' visible='true' lat='50.9385307' lon='-1.4207114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744292' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9066453' lon='-1.4141112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984734' timestamp='2007-01-10T00:12:36+00:00' user='nickw' visible='true' lat='50.9440023' lon='-1.3923438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973240' timestamp='2007-08-14T04:48:36+01:00' user='andrewpmk' visible='true' lat='50.9076724' lon='-1.3985049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130962' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9316264' lon='-1.3581548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613461' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9778599' lon='-1.4012458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903640' timestamp='2007-05-09T23:57:38+01:00' visible='true' lat='50.9500487' lon='-1.3632909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028895' timestamp='2006-09-08T23:06:54+01:00' user='Dean Earley' visible='true' lat='50.9352336' lon='-1.3501774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727682' timestamp='2007-04-20T23:53:18+01:00' user='Dean Earley' visible='true' lat='50.9138644' lon='-1.3565184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931646' timestamp='2007-04-05T14:21:19+01:00' user='Dean Earley' visible='true' lat='50.920239' lon='-1.389902' />
-  <node id='21586131' timestamp='2006-12-14T23:57:08+00:00' user='Dean Earley' visible='true' lat='50.9690664' lon='-1.3352835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432006' timestamp='2007-06-16T16:28:30+01:00' visible='true' lat='50.9755363' lon='-1.3485175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194440' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9469207' lon='-1.433207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310850' timestamp='2005-12-12T23:32:02+00:00' user='nickw' visible='true' lat='50.9149146' lon='-1.4006281' />
-  <node id='254352' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.947102' lon='-1.440765' />
-  <node id='28874061' timestamp='2007-10-12T14:11:46+01:00' user='SteveC' visible='true' lat='50.9365286' lon='-1.4408995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689165' timestamp='2007-02-18T20:19:01+00:00' visible='true' lat='50.9403675' lon='-1.3722654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115457' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9282976' lon='-1.4439643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961025' timestamp='2006-11-11T17:12:07+00:00' user='Dean Earley' visible='true' lat='50.9444985' lon='-1.5400291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661173' timestamp='2007-04-05T14:21:19+01:00' user='Dean Earley' visible='true' lat='50.9100568' lon='-1.3540019' />
-  <node id='14745508' timestamp='2006-10-03T23:25:14+01:00' user='Dean Earley' visible='true' lat='50.9552572' lon='-1.4022371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59599704' timestamp='2007-09-24T09:46:23+01:00' user='mike l' visible='true' lat='50.9971495' lon='-1.4549309' />
-  <node id='29816311' timestamp='2007-05-31T21:52:28+01:00' visible='true' lat='50.9912773' lon='-1.3548015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2417450' timestamp='2006-05-09T20:41:09+01:00' user='Dean Earley' visible='true' lat='50.9466249' lon='-1.3674469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815439' timestamp='2007-05-31T21:37:06+01:00' visible='true' lat='50.9869602' lon='-1.3551033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122320975' timestamp='2007-11-18T19:03:28+00:00' user='nickw' visible='true' lat='50.9134547' lon='-1.4340335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30510878' timestamp='2007-06-17T22:25:15+01:00' visible='true' lat='50.9754224' lon='-1.3580688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345062' timestamp='2007-04-30T23:00:38+01:00' user='nickw' visible='true' lat='50.9318072' lon='-1.3667253'>
-    <tag k='name' v='NTHFLD RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727691' timestamp='2007-04-29T19:42:19+01:00' user='Andy Street' visible='true' lat='50.9080795' lon='-1.3469598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601344' timestamp='2006-09-01T00:16:12+01:00' user='nickw' visible='true' lat='50.9031129' lon='-1.5149117'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25296384' timestamp='2007-01-19T09:58:46+00:00' user='Dean Earley' visible='true' lat='50.9839819' lon='-1.3511301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398398' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.9459501' lon='-1.4266676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392342' timestamp='2007-10-30T15:48:43+00:00' user='Dean Earley' visible='true' lat='50.9614882' lon='-1.3538044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247805' timestamp='2007-04-05T14:21:19+01:00' user='Dean Earley' visible='true' lat='50.9288976' lon='-1.39085' />
-  <node id='30290744' timestamp='2007-06-13T09:24:00+01:00' visible='true' lat='50.9652107' lon='-1.3817307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163291' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.9698887' lon='-1.3860664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418530' timestamp='2007-05-02T00:35:23+01:00' visible='true' lat='50.9669623' lon='-1.362893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325245' timestamp='2005-12-16T23:14:49+00:00' user='80n' visible='true' lat='50.9312524' lon='-1.3212081' />
-  <node id='29998919' timestamp='2007-06-05T23:28:50+01:00' user='nickw' visible='true' lat='50.9855574' lon='-1.4377852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90511351' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8944815' lon='-1.3989457' />
-  <node id='122324295' timestamp='2007-11-18T19:05:23+00:00' user='nickw' visible='true' lat='50.9136128' lon='-1.4364846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163095' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.9719404' lon='-1.3863247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814523' timestamp='2007-05-31T21:17:04+01:00' visible='true' lat='50.9873803' lon='-1.3553962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903374' timestamp='2007-05-09T23:24:25+01:00' visible='true' lat='50.9471539' lon='-1.3648815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160209422' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9235046' lon='-1.3837021' />
-  <node id='21092035' timestamp='2007-12-08T19:52:31+00:00' user='nickw' visible='true' lat='50.9369438' lon='-1.452449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123665' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9323772' lon='-1.4451972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240299' timestamp='2007-04-29T20:02:52+01:00' user='Andy Street' visible='true' lat='50.9043727' lon='-1.3557642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935743' timestamp='2007-05-11T00:50:39+01:00' visible='true' lat='50.9401257' lon='-1.4457119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145255' timestamp='2007-05-16T00:58:58+01:00' visible='true' lat='50.9224208' lon='-1.3808259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301578' timestamp='2007-02-06T00:16:39+00:00' user='Dean Earley' visible='true' lat='50.9066816' lon='-1.3979804' />
-  <node id='20130968' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.929628' lon='-1.3563443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584210' timestamp='2007-05-03T00:08:23+01:00' visible='true' lat='50.9415483' lon='-1.4353897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282128' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9759183' lon='-1.4050564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632214' timestamp='2007-05-26T19:21:15+01:00' visible='true' lat='50.9578625' lon='-1.3664517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254601' timestamp='2007-04-05T14:21:19+01:00' user='Dean Earley' visible='true' lat='50.9165601' lon='-1.4030415' />
-  <node id='245147656' timestamp='2008-02-03T06:03:10+00:00' user='sladen' visible='true' lat='50.9093768' lon='-1.4060709' />
-  <node id='20954593' timestamp='2006-11-10T08:43:41+00:00' user='nickw' visible='true' lat='50.9300077' lon='-1.3944296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984764' timestamp='2007-01-10T00:14:35+00:00' user='nickw' visible='true' lat='50.9461553' lon='-1.3999428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071252' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9216326' lon='-1.3596444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162243' timestamp='2008-01-04T19:26:28+00:00' user='nickw' visible='true' lat='50.9728755' lon='-1.387611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728878' timestamp='2007-05-28T19:12:30+01:00' visible='true' lat='50.971773' lon='-1.3567675'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675867' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9260721' lon='-1.3689241' />
-  <node id='13071380' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9181841' lon='-1.3613708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227244' timestamp='2006-10-23T20:52:58+01:00' user='nickw' visible='true' lat='50.9425996' lon='-1.4164817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962305' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9585617' lon='-1.3685036' />
-  <node id='90577045' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.8999285' lon='-1.4107465' />
-  <node id='30255971' timestamp='2007-06-12T20:14:37+01:00' visible='true' lat='50.9794004' lon='-1.3501176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29712188' timestamp='2007-05-28T15:03:25+01:00' visible='true' lat='50.9862349' lon='-1.3554199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135238' timestamp='2007-05-15T20:55:59+01:00' user='nickw' visible='true' lat='50.9434771' lon='-1.3838084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280982' timestamp='2007-03-04T19:38:17+00:00' user='Dean Earley' visible='true' lat='50.9166213' lon='-1.3596587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125570129' timestamp='2007-11-20T11:50:15+00:00' user='Nick Dyer' visible='true' lat='50.9625301' lon='-1.4226232' />
-  <node id='29526775' timestamp='2007-05-23T09:49:13+01:00' visible='true' lat='50.9828225' lon='-1.3499421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110939' timestamp='2006-10-27T23:39:34+01:00' user='Dean Earley' visible='true' lat='50.9356304' lon='-1.3652028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730542' timestamp='2007-05-28T19:37:07+01:00' visible='true' lat='50.9673008' lon='-1.3721264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254925' timestamp='2007-02-13T18:31:45+00:00' user='Dean Earley' visible='true' lat='50.9774195' lon='-1.436351' />
-  <node id='90582768' timestamp='2007-10-28T20:25:32+00:00' user='Nick Dyer' visible='true' lat='50.9249954' lon='-1.4429759' />
-  <node id='29134829' timestamp='2007-05-15T20:53:15+01:00' user='nickw' visible='true' lat='50.9447687' lon='-1.38351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957204' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9188011' lon='-1.4215187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162635' timestamp='2008-01-04T19:29:41+00:00' user='nickw' visible='true' lat='50.9715963' lon='-1.3790236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639994' timestamp='2007-02-04T22:51:23+00:00' user='Dean Earley' visible='true' lat='50.9003712' lon='-1.3750252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='41127252' timestamp='2007-09-04T18:11:23+01:00' visible='true' lat='50.9275227' lon='-1.3917591'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='ceno*' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='20966367' timestamp='2007-04-20T23:53:19+01:00' user='Dean Earley' visible='true' lat='50.9159684' lon='-1.3663791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728543' timestamp='2007-03-23T22:52:53+00:00' user='nickw' visible='true' lat='50.9031406' lon='-1.3655996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707180' timestamp='2007-04-05T14:21:20+01:00' user='Dean Earley' visible='true' lat='50.8544636' lon='-1.3269592' />
-  <node id='27563362' timestamp='2007-04-23T23:02:18+01:00' visible='true' lat='50.9291451' lon='-1.3985391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194407' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9466008' lon='-1.4382259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964115' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.921857' lon='-1.3767198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984789' timestamp='2007-01-10T00:15:08+00:00' user='nickw' visible='true' lat='50.9428319' lon='-1.3847348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466130' timestamp='2007-05-22T00:38:15+01:00' user='Dean Earley' visible='true' lat='50.9816401' lon='-1.4451066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707218' timestamp='2007-04-05T14:21:20+01:00' user='Dean Earley' visible='true' lat='50.8516094' lon='-1.3216964' />
-  <node id='29009191' timestamp='2007-05-12T15:33:37+01:00' user='nickw' visible='true' lat='50.9300779' lon='-1.3530668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706697' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.89885' lon='-1.382839'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='388905' timestamp='2007-04-05T14:21:20+01:00' user='Dean Earley' visible='true' lat='50.9437' lon='-1.39797' />
-  <node id='28183751' timestamp='2007-04-29T02:25:40+01:00' user='Dean Earley' visible='true' lat='50.9494506' lon='-1.4056346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45116807' timestamp='2007-09-07T16:44:32+01:00' user='mike l' visible='true' lat='50.9760071' lon='-1.4482372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249907' timestamp='2007-04-29T21:41:45+01:00' visible='true' lat='50.9142082' lon='-1.4493261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290729' timestamp='2007-06-13T09:23:57+01:00' visible='true' lat='50.9677528' lon='-1.3825128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87823415' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8961539' lon='-1.4075172' />
-  <node id='28244291' timestamp='2007-04-29T20:36:34+01:00' user='Andy Street' visible='true' lat='50.9018655' lon='-1.3521733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388887' timestamp='2007-04-05T14:21:20+01:00' user='Dean Earley' visible='true' lat='50.9424' lon='-1.3902' />
-  <node id='24668174' timestamp='2007-01-04T21:05:54+00:00' user='nickw' visible='true' lat='50.9847323' lon='-1.3929594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957213' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9157358' lon='-1.4228028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163080' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9714963' lon='-1.3873677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915357' timestamp='2006-07-19T01:50:15+01:00' user='Dean Earley' visible='true' lat='50.9142735' lon='-1.3396884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583037' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9389758' lon='-1.4332985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071363' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9177697' lon='-1.370839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431957' timestamp='2007-06-16T16:25:56+01:00' visible='true' lat='50.9836984' lon='-1.3503866'>
-    <tag k='tourism' v='hotel' />
-    <tag k='name' v='Travelodge' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340630' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9648564' lon='-1.3674817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675854' timestamp='2007-04-05T14:21:20+01:00' user='Dean Earley' visible='true' lat='50.9267676' lon='-1.3551247' />
-  <node id='24949965' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9896374' lon='-1.3847607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976692' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9367384' lon='-1.4252552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926154' timestamp='2007-06-03T20:55:51+01:00' visible='true' lat='50.9799466' lon='-1.3634652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111089' timestamp='2006-10-22T23:24:10+01:00' user='Ben' visible='true' lat='51.0154753' lon='-1.3913746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398364' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.9516881' lon='-1.4177736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924232' timestamp='2007-02-13T19:46:57+00:00' user='Dean Earley' visible='true' lat='50.9639281' lon='-1.3842743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561538' timestamp='2007-06-01T16:30:20+01:00' user='Dean Earley' visible='true' lat='50.9241598' lon='-1.4328042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329472' timestamp='2007-04-05T14:21:20+01:00' user='Dean Earley' visible='true' lat='50.933' lon='-1.38499' />
-  <node id='30089057' timestamp='2007-06-08T18:11:58+01:00' visible='true' lat='50.9656135' lon='-1.3750956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780800' timestamp='2007-06-22T21:09:46+01:00' user='Steve Chilton' visible='true' lat='50.9078352' lon='-1.4052522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142617034' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9138381' lon='-1.416151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440796' timestamp='2007-04-20T23:53:19+01:00' user='Dean Earley' visible='true' lat='50.9138657' lon='-1.3866942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194858' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9439405' lon='-1.4069862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160413817' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9109667' lon='-1.4300571' />
-  <node id='29815652' timestamp='2007-05-31T21:48:00+01:00' visible='true' lat='50.9913673' lon='-1.353938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162100' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true' lat='50.972078' lon='-1.3778316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700507' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.9288203' lon='-1.3755073' />
-  <node id='113962275' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9560963' lon='-1.3631477' />
-  <node id='28252925' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9451866' lon='-1.4257689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949905' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9946893' lon='-1.3805489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133130' timestamp='2006-10-28T01:55:39+01:00' user='Dean Earley' visible='true' lat='50.9269492' lon='-1.3533945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816556' timestamp='2007-05-31T22:04:27+01:00' visible='true' lat='50.9913765' lon='-1.3545525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973113' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9043902' lon='-1.4087152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254558' timestamp='2007-01-28T00:07:10+00:00' visible='true' lat='50.9073091' lon='-1.3883527' />
-  <node id='30956602' timestamp='2007-06-26T23:45:00+01:00' user='nickw' visible='true' lat='50.9288578' lon='-1.3494081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392428' timestamp='2007-05-20T18:02:11+01:00' visible='true' lat='50.9663097' lon='-1.3539613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830650' timestamp='2007-05-05T09:03:31+01:00' user='nickw' visible='true' lat='50.9255483' lon='-1.3664699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160293176' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9130288' lon='-1.4918059' />
-  <node id='20952625' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9350662' lon='-1.3770862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398428' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9661048' lon='-1.3922753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183739' timestamp='2007-04-29T02:25:39+01:00' user='Dean Earley' visible='true' lat='50.9503435' lon='-1.4136652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='212413322' timestamp='2008-01-09T08:18:18+00:00' user='hairywill' visible='true' lat='50.9324408' lon='-1.3705442'>
-    <tag k='amenity' v='post_office' />
-    <tag k='created_by' v='Potlatch 0.6a' />
-  </node>
-  <node id='9312074' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true' lat='50.9141153' lon='-1.3980495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347578' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9263357' lon='-1.3533291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549367' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9643101' lon='-1.3722494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660540' timestamp='2007-10-28T21:45:54+00:00' user='Nick Dyer' visible='true' lat='50.9028672' lon='-1.4099399' />
-  <node id='28236100' timestamp='2007-04-29T19:25:33+01:00' user='Andy Street' visible='true' lat='50.911246' lon='-1.3533861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91107577' timestamp='2007-10-29T07:45:59+00:00' user='nickw' visible='true' lat='50.9288986' lon='-1.4166127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579417' timestamp='2006-12-14T13:53:01+00:00' user='David Currie' visible='true' lat='50.9776788' lon='-1.4019228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971199' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.9030902' lon='-1.4027919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706659' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.90849' lon='-1.375613'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='254416' timestamp='2006-08-11T02:50:52+01:00' user='Dean Earley' visible='true' lat='50.9186985' lon='-1.3714608' />
-  <node id='17721090' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.9704229' lon='-1.3504061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577083' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9154075' lon='-1.4614381' />
-  <node id='29728867' timestamp='2007-05-28T19:12:24+01:00' visible='true' lat='50.9729163' lon='-1.3542727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668332' timestamp='2007-01-04T21:06:42+00:00' user='nickw' visible='true' lat='50.9846073' lon='-1.3934362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913888' timestamp='2007-06-03T15:59:38+01:00' visible='true' lat='50.9849241' lon='-1.3576659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30410999' timestamp='2007-06-15T23:09:52+01:00' visible='true' lat='50.9744683' lon='-1.3566694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243511512' timestamp='2008-01-26T18:04:56+00:00' user='stuphi' visible='true' lat='50.9493939' lon='-1.3710127' />
-  <node id='325058' timestamp='2006-11-11T17:23:33+00:00' user='Dean Earley' visible='true' lat='50.9452234' lon='-1.4908807' />
-  <node id='254695' timestamp='2007-04-05T14:21:21+01:00' user='Dean Earley' visible='true' lat='50.9250443' lon='-1.3872491' />
-  <node id='160283711' timestamp='2007-12-10T19:49:35+00:00' user='sladen' visible='true' lat='50.9171253' lon='-1.4916857' />
-  <node id='29632436' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true' lat='50.9548447' lon='-1.3601454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254878' timestamp='2007-02-18T21:30:29+00:00' visible='true' lat='50.912734' lon='-1.4921322' />
-  <node id='28342531' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9074797' lon='-1.3683645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601341' timestamp='2006-09-01T00:16:12+01:00' user='nickw' visible='true' lat='50.8953667' lon='-1.5219712'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28237231' timestamp='2007-04-29T19:42:01+01:00' user='Andy Street' visible='true' lat='50.9045983' lon='-1.3582132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958634' timestamp='2007-09-10T23:55:11+01:00' visible='true' lat='50.9064478' lon='-1.3984709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945414' timestamp='2007-03-31T20:34:38+01:00' user='nickw' visible='true' lat='50.9005698' lon='-1.3537031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711868' timestamp='2007-06-11T21:42:53+01:00' visible='true' lat='50.9852929' lon='-1.3549305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924351' timestamp='2007-06-03T20:10:39+01:00' visible='true' lat='50.9822525' lon='-1.3630715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161118' timestamp='2007-06-10T18:13:43+01:00' visible='true' lat='50.9721497' lon='-1.3551554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254430' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9230534' lon='-1.3952716' />
-  <node id='160221916' timestamp='2007-12-10T19:13:31+00:00' user='sladen' visible='true' lat='50.9145982' lon='-1.3891009' />
-  <node id='28179472' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9631671' lon='-1.4087878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949985' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9876518' lon='-1.3749765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194873' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9441112' lon='-1.4103225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160383996' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9171358' lon='-1.4564586' />
-  <node id='20133160' timestamp='2006-10-28T01:55:44+01:00' user='Dean Earley' visible='true' lat='50.9277186' lon='-1.3517568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564832' timestamp='2006-12-16T01:02:12+00:00' user='Dean Earley' visible='true' lat='50.933051' lon='-1.3564816'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='24668113' timestamp='2007-01-04T21:05:43+00:00' user='nickw' visible='true' lat='50.9895597' lon='-1.39884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216404' timestamp='2007-02-18T20:18:23+00:00' visible='true' lat='50.9210967' lon='-1.35682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677850' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.8977328' lon='-1.4466014' />
-  <node id='13706389' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9215723' lon='-1.3809544'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21275637' timestamp='2007-06-01T16:38:53+01:00' user='Dean Earley' visible='true' lat='50.9219449' lon='-1.434222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331363' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9741527' lon='-1.410992'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='90660387' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.9035113' lon='-1.4089958' />
-  <node id='20957230' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9199794' lon='-1.4228956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372811' timestamp='2007-05-01T10:05:25+01:00' visible='true' lat='50.9294997' lon='-1.4338704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561841' timestamp='2006-12-13T20:21:46+00:00' user='nickw' visible='true' lat='50.9302084' lon='-1.4043996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348147' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9333101' lon='-1.3674842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298227' timestamp='2007-01-06T14:30:54+00:00' user='Dean Earley' visible='true' lat='51.0210664' lon='-1.3349371' />
-  <node id='42141454' timestamp='2007-09-05T17:46:24+01:00' user='mike l' visible='true' lat='50.9354573' lon='-1.3960874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464276' timestamp='2007-05-22T00:19:17+01:00' user='Dean Earley' visible='true' lat='50.9381578' lon='-1.404042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346884' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9075275' lon='-1.3763229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808618' timestamp='2007-11-11T18:09:34+00:00' user='Dean Earley' visible='true' lat='50.9156255' lon='-1.3593801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305635' timestamp='2007-12-06T22:10:54+00:00' user='Dean Earley' visible='true' lat='50.9910028' lon='-1.3950732'>
-    <tag k='bridge' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4' />
-  </node>
-  <node id='254648' timestamp='2007-12-10T19:11:41+00:00' user='sladen' visible='true' lat='50.9138839' lon='-1.3908776' />
-  <node id='90577062' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9095466' lon='-1.4301871' />
-  <node id='29704598' timestamp='2007-05-28T10:44:49+01:00' visible='true' lat='50.978176' lon='-1.3541766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726182' timestamp='2008-02-03T06:18:39+00:00' user='sladen' visible='true' lat='50.9089693' lon='-1.3996684' />
-  <node id='24949831' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9884619' lon='-1.3785225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42356506' timestamp='2007-09-10T19:02:10+01:00' user='mike l' visible='true' lat='50.9377886' lon='-1.3980702'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='24667950' timestamp='2007-01-04T21:04:54+00:00' user='nickw' visible='true' lat='50.9832378' lon='-1.3921747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518764' timestamp='2007-04-05T14:21:21+01:00' user='Dean Earley' visible='true' lat='50.9089199' lon='-1.3970268' />
-  <node id='25764487' timestamp='2007-02-10T23:53:39+00:00' visible='true' lat='50.9104617' lon='-1.3940549' />
-  <node id='20698065' timestamp='2006-10-31T22:26:03+00:00' user='nickw' visible='true' lat='50.9052808' lon='-1.4063009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705514' timestamp='2007-05-28T11:19:16+01:00' visible='true' lat='50.9831914' lon='-1.3516854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613476' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9715778' lon='-1.3919562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91238658' timestamp='2007-10-29T10:34:25+00:00' user='DrMark' visible='true' lat='50.9776999' lon='-1.4371092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583059' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9380409' lon='-1.4315272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998553' timestamp='2007-06-05T23:13:24+01:00' user='nickw' visible='true' lat='50.9641539' lon='-1.423501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194357' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.943587' lon='-1.4380721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229569' timestamp='2007-06-12T00:14:39+01:00' user='nickw' visible='true' lat='50.9335857' lon='-1.35453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071354' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.9185698' lon='-1.3653019'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947163' timestamp='2008-01-20T09:54:32+00:00' user='andrewpmk' visible='true' lat='50.9094452' lon='-1.3923985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209213' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9442757' lon='-1.4491396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471865' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9380065' lon='-1.3670397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838422' timestamp='2007-06-01T20:19:55+01:00' visible='true' lat='50.965066' lon='-1.3880042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240316' timestamp='2007-04-29T20:02:54+01:00' user='Andy Street' visible='true' lat='50.9063493' lon='-1.3555312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816732' timestamp='2007-05-31T22:13:30+01:00' visible='true' lat='50.9903296' lon='-1.3566567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639896' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9000974' lon='-1.3819834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668092' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9826124' lon='-1.3943997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596805' timestamp='2006-09-04T18:54:43+01:00' user='Dean Earley' visible='true' lat='50.8994458' lon='-1.4038166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331329' timestamp='2006-11-11T21:25:00+00:00' user='Dean Earley' visible='true' lat='51.0028' lon='-1.36703' />
-  <node id='2433501' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.9710039' lon='-1.3504195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745493' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9572301' lon='-1.4000839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930469' timestamp='2007-06-03T22:22:09+01:00' visible='true' lat='50.9943345' lon='-1.3525963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745443' timestamp='2007-01-19T18:15:25+00:00' user='Dean Earley' visible='true' lat='50.9681669' lon='-1.3505645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194511' timestamp='2007-04-29T08:32:29+01:00' user='Dean Earley' visible='true' lat='50.9478619' lon='-1.4131182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935720' timestamp='2007-05-11T00:47:42+01:00' visible='true' lat='50.9401995' lon='-1.4398996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668345' timestamp='2007-01-04T21:06:43+00:00' user='nickw' visible='true' lat='50.9833628' lon='-1.3912409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194372' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9445465' lon='-1.4378876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563289' timestamp='2007-04-23T22:47:35+01:00' visible='true' lat='50.9307751' lon='-1.3969215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346971' timestamp='2007-04-30T23:26:37+01:00' user='nickw' visible='true' lat='50.8990351' lon='-1.362736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815067' timestamp='2007-05-31T21:31:00+01:00' visible='true' lat='50.9885666' lon='-1.3551419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109273' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true' lat='50.9337411' lon='-1.4246637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467570' timestamp='2007-04-19T17:55:56+01:00' visible='true' lat='50.9360362' lon='-1.3790996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141487' timestamp='2006-11-21T23:19:59+00:00' user='nickw' visible='true' lat='50.934529' lon='-1.4351506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342604' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9068323' lon='-1.3704752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780868' timestamp='2007-10-28T21:49:36+00:00' user='Nick Dyer' visible='true' lat='50.9081335' lon='-1.409013'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='21141375' timestamp='2007-01-25T22:42:40+00:00' user='Dean Earley' visible='true' lat='50.9286766' lon='-1.4288861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530521' timestamp='2007-05-28T10:13:01+01:00' visible='true' lat='50.9883995' lon='-1.3536141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254541' timestamp='2006-09-08T23:08:07+01:00' user='Dean Earley' visible='true' lat='50.934822' lon='-1.3762822' />
-  <node id='325197' timestamp='2006-11-11T17:23:38+00:00' user='Dean Earley' visible='true' lat='50.9472348' lon='-1.3662023' />
-  <node id='20961021' timestamp='2006-11-11T17:12:04+00:00' user='Dean Earley' visible='true' lat='50.9420587' lon='-1.547257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816842' timestamp='2007-05-31T22:17:19+01:00' visible='true' lat='50.986008' lon='-1.3652652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998364' timestamp='2007-06-05T23:05:27+01:00' user='nickw' visible='true' lat='50.9731743' lon='-1.42515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957187' timestamp='2006-11-10T21:58:51+00:00' user='nickw' visible='true' lat='50.9205949' lon='-1.4218851'>
-    <tag k='name' v='NEWLAANDS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135561' timestamp='2007-05-15T20:58:25+01:00' user='nickw' visible='true' lat='50.9455448' lon='-1.3807684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598845' timestamp='2006-12-16T00:49:32+00:00' user='Dean Earley' visible='true' lat='50.8985041' lon='-1.3785261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282090' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.9760877' lon='-1.4087071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675888' timestamp='2007-04-05T14:21:22+01:00' user='Dean Earley' visible='true' lat='50.9240644' lon='-1.3746559' />
-  <node id='29815665' timestamp='2007-05-31T21:48:04+01:00' visible='true' lat='50.9904022' lon='-1.3532087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689074' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9425926' lon='-1.3905279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141380' timestamp='2006-11-21T23:12:42+00:00' user='nickw' visible='true' lat='50.9272099' lon='-1.4250809'>
-    <tag k='name' v='CLTBRK AV' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935765' timestamp='2007-05-11T00:50:50+01:00' visible='true' lat='50.9396847' lon='-1.4487355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924336' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9764259' lon='-1.397117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504277' timestamp='2007-01-28T19:31:52+00:00' user='nickw' visible='true' lat='50.9992641' lon='-1.353516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127619' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.9365417' lon='-1.4344866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773401' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9152202' lon='-1.4529138' />
-  <node id='28903058' timestamp='2007-05-09T23:03:37+01:00' visible='true' lat='50.9419754' lon='-1.370109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229461' timestamp='2007-06-12T00:08:04+01:00' user='nickw' visible='true' lat='50.9347062' lon='-1.353487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254382' timestamp='2005-11-15T15:39:31+00:00' user='nickw' visible='true' lat='50.9127037' lon='-1.4064943' />
-  <node id='29856368' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9470721' lon='-1.3922557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509900' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9881895' lon='-1.3587855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243979484' timestamp='2008-01-29T11:33:02+00:00' user='Dean Earley' visible='true' lat='50.9613763' lon='-1.349807'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250086' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9157447' lon='-1.4517169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461240' timestamp='2007-05-21T23:43:16+01:00' user='nickw' visible='true' lat='50.9025446' lon='-1.3970978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447404' timestamp='2007-03-09T20:54:22+00:00' user='nickw' visible='true' lat='50.9003761' lon='-1.3931497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949848' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9919884' lon='-1.3723638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949982' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9847351' lon='-1.3842441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423286' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9313932' lon='-1.3849942' />
-  <node id='29953364' timestamp='2007-06-04T21:16:58+01:00' visible='true' lat='51.0003542' lon='-1.3671528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325038' timestamp='2006-11-11T17:23:38+00:00' user='Dean Earley' visible='true' lat='50.9547036' lon='-1.4572943' />
-  <node id='29704338' timestamp='2007-05-28T10:32:59+01:00' visible='true' lat='50.9830283' lon='-1.3606567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249928' timestamp='2007-04-29T21:41:48+01:00' visible='true' lat='50.9181182' lon='-1.4533213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469873' timestamp='2007-11-18T18:58:29+00:00' user='nickw' visible='true' lat='50.9134749' lon='-1.4318992' />
-  <node id='28932439' timestamp='2007-05-10T21:05:55+01:00' user='Dean Earley' visible='true' lat='50.9634299' lon='-1.4640538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584186' timestamp='2007-05-03T00:07:08+01:00' visible='true' lat='50.9421203' lon='-1.4355189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240334' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9051465' lon='-1.3534776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028816' timestamp='2006-12-02T23:18:59+00:00' user='Dean Earley' visible='true' lat='50.9366469' lon='-1.3786458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290793' timestamp='2007-06-13T09:24:11+01:00' visible='true' lat='50.9647582' lon='-1.376116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984745' timestamp='2007-05-22T00:19:52+01:00' user='Dean Earley' visible='true' lat='50.9495373' lon='-1.4019012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595075' timestamp='2007-05-25T21:54:06+01:00' visible='true' lat='50.9676266' lon='-1.3527165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20136221' timestamp='2007-05-30T21:48:11+01:00' user='nickw' visible='true' lat='50.9182499' lon='-1.3566047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684541' timestamp='2007-10-31T12:25:02+00:00' user='Dean Earley' visible='true' lat='50.9617493' lon='-1.4222343' />
-  <node id='30089130' timestamp='2007-06-08T23:30:35+01:00' visible='true' lat='50.9641735' lon='-1.3799201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291046' timestamp='2007-06-13T09:32:57+01:00' visible='true' lat='50.9676272' lon='-1.3823585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194895' timestamp='2007-04-29T08:58:00+01:00' user='Dean Earley' visible='true' lat='50.9437346' lon='-1.4083187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008378' timestamp='2007-05-12T15:11:24+01:00' user='nickw' visible='true' lat='50.9260427' lon='-1.3514526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414285' timestamp='2007-05-01T23:50:07+01:00' user='nickw' visible='true' lat='50.9431133' lon='-1.3715569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640039' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9139361' lon='-1.3597024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303928' timestamp='2007-04-29T08:58:12+01:00' user='Dean Earley' visible='true' lat='50.9408695' lon='-1.4070063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462622' timestamp='2007-05-21T23:56:40+01:00' user='nickw' visible='true' lat='50.9026574' lon='-1.3992434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319650' timestamp='2007-01-28T00:55:28+00:00' visible='true' lat='50.922296' lon='-1.4001346' />
-  <node id='91110492' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9283852' lon='-1.4343338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222228' timestamp='2007-02-18T21:30:29+00:00' visible='true' lat='50.918458' lon='-1.479811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966254' timestamp='2006-11-12T17:38:32+00:00' user='Dean Earley' visible='true' lat='50.9464408' lon='-1.3724723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964848' timestamp='2007-09-16T10:11:15+01:00' user='mike l' visible='true' lat='50.9954549' lon='-1.4296726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160283357' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9169792' lon='-1.4878748' />
-  <node id='25282101' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9748326' lon='-1.4070303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089042' timestamp='2007-06-08T18:11:56+01:00' visible='true' lat='50.9659946' lon='-1.3743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92680540' timestamp='2007-10-31T12:24:55+00:00' user='Dean Earley' visible='true' lat='50.9607182' lon='-1.4258919' />
-  <node id='13071397' timestamp='2006-09-08T23:08:10+01:00' user='Dean Earley' visible='true' lat='50.9287874' lon='-1.3650748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671352' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.915365' lon='-1.4421986' />
-  <node id='29026808' timestamp='2007-05-13T10:10:58+01:00' user='nickw' visible='true' lat='50.917233' lon='-1.4089199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388920' timestamp='2007-04-05T14:21:22+01:00' user='Dean Earley' visible='true' lat='50.9451691' lon='-1.3994859' />
-  <node id='29132905' timestamp='2007-05-15T20:31:19+01:00' user='nickw' visible='true' lat='50.9304349' lon='-1.377137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601299' timestamp='2006-09-01T00:16:01+01:00' user='nickw' visible='true' lat='50.822432' lon='-1.5610671'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='20971161' timestamp='2006-11-12T22:57:16+00:00' user='Dean Earley' visible='true' lat='50.9029093' lon='-1.4002555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464249' timestamp='2007-05-22T00:19:12+01:00' user='Dean Earley' visible='true' lat='50.9375845' lon='-1.4081241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026793' timestamp='2007-05-13T10:10:57+01:00' user='nickw' visible='true' lat='50.9179344' lon='-1.408761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689148' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9421952' lon='-1.3744507'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Fleming Arms' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908375' timestamp='2006-12-18T23:27:56+00:00' visible='true' lat='50.9317412' lon='-1.3789195' />
-  <node id='325650' timestamp='2007-04-05T14:21:22+01:00' user='Dean Earley' visible='true' lat='50.9189' lon='-1.41857' />
-  <node id='17979922' timestamp='2007-02-18T21:25:29+00:00' visible='true' lat='50.9172972' lon='-1.3959572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263987' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9646108' lon='-1.3711022' />
-  <node id='29816555' timestamp='2007-05-31T22:04:26+01:00' visible='true' lat='50.9913742' lon='-1.3546458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160336907' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.9464823' lon='-1.4733437' />
-  <node id='90581811' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9177397' lon='-1.4487351' />
-  <node id='29008948' timestamp='2007-05-12T15:26:04+01:00' user='nickw' visible='true' lat='50.9329202' lon='-1.3498782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903846' timestamp='2007-05-10T01:06:26+01:00' user='LivingWithDragons' visible='true' lat='50.9812067' lon='-1.4447035'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964855' timestamp='2006-11-12T10:50:42+00:00' user='nickw' visible='true' lat='51.0046565' lon='-1.434417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976798' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.925349' lon='-1.4201349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440791' timestamp='2007-04-20T23:53:20+01:00' user='Dean Earley' visible='true' lat='50.9178484' lon='-1.3820642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134843' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9286099' lon='-1.3535234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469882' timestamp='2007-04-05T14:21:22+01:00' user='Dean Earley' visible='true' lat='50.9177' lon='-1.4399' />
-  <node id='29632824' timestamp='2007-05-26T20:07:11+01:00' visible='true' lat='50.9679627' lon='-1.3633811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157204146' timestamp='2007-12-08T20:11:11+00:00' user='nickw' visible='true' lat='50.9424309' lon='-1.4455611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561798' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9227286' lon='-1.4383119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632423' timestamp='2007-05-26T19:26:42+01:00' visible='true' lat='50.956563' lon='-1.3680799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956628' timestamp='2007-06-26T23:45:05+01:00' user='nickw' visible='true' lat='50.9320006' lon='-1.3517226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447510' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9101355' lon='-1.3879893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347591' timestamp='2007-04-30T23:36:50+01:00' user='nickw' visible='true' lat='50.9270995' lon='-1.3570342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507734' timestamp='2007-05-22T00:19:53+01:00' user='Dean Earley' visible='true' lat='50.9465254' lon='-1.4049208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816423' timestamp='2007-05-31T21:58:47+01:00' visible='true' lat='50.9899022' lon='-1.3572723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636948' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.9201629' lon='-1.4279597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526356' timestamp='2007-05-23T09:23:19+01:00' user='nickw' visible='true' lat='50.9275964' lon='-1.3570365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435828' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9368477' lon='-1.4332043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661192' timestamp='2007-04-05T14:21:23+01:00' user='Dean Earley' visible='true' lat='50.9168482' lon='-1.3745801' />
-  <node id='17724235' timestamp='2007-01-28T00:06:49+00:00' visible='true' lat='50.9289248' lon='-1.4087986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976681' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9350181' lon='-1.430005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708036' timestamp='2007-05-28T12:04:08+01:00' visible='true' lat='50.9803418' lon='-1.3666712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721044' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9609099' lon='-1.3638462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972795' timestamp='2006-11-13T00:07:22+00:00' user='Dean Earley' visible='true' lat='50.8990796' lon='-1.3894404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003033' timestamp='2007-05-22T00:19:53+01:00' user='Dean Earley' visible='true' lat='50.9413473' lon='-1.4044843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595086' timestamp='2007-05-25T21:54:09+01:00' visible='true' lat='50.9693745' lon='-1.3531657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956579' timestamp='2007-06-26T23:44:57+01:00' user='nickw' visible='true' lat='50.9277684' lon='-1.3502723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342561' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9061393' lon='-1.3663182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744288' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9072099' lon='-1.4107219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28247334' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true' lat='50.927178' lon='-1.4158051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721026' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9636952' lon='-1.3706063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708031' timestamp='2007-05-28T12:04:06+01:00' visible='true' lat='50.98118' lon='-1.3663346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664550' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9086314' lon='-1.4072363' />
-  <node id='27021756' timestamp='2007-04-03T00:52:39+01:00' user='Ben' visible='true' lat='50.9458777' lon='-1.4042009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31518115' timestamp='2007-07-09T22:33:52+01:00' visible='true' lat='50.9255915' lon='-1.3909471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577106' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9628653' lon='-1.4246659' />
-  <node id='26346869' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.912929' lon='-1.3684699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='430653' timestamp='2007-04-05T14:21:23+01:00' user='Dean Earley' visible='true' lat='50.9097' lon='-1.40985' />
-  <node id='28903404' timestamp='2007-05-09T23:24:57+01:00' visible='true' lat='50.9459084' lon='-1.3639681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26001629' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9251774' lon='-1.3933984' />
-  <node id='306309' timestamp='2005-12-11T21:52:33+00:00' user='nickw' visible='true' lat='50.9262443' lon='-1.3984823' />
-  <node id='30255977' timestamp='2007-06-12T20:14:38+01:00' visible='true' lat='50.9832015' lon='-1.3498025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903925' timestamp='2007-10-16T11:34:26+01:00' user='Dean Earley' visible='true' lat='50.9513498' lon='-1.3627389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958649' timestamp='2007-09-10T23:55:12+01:00' visible='true' lat='50.906254' lon='-1.4007712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564678' timestamp='2006-08-15T12:09:05+01:00' user='nickw' visible='true' lat='50.9300744' lon='-1.3570939'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29913606' timestamp='2007-06-03T15:53:27+01:00' visible='true' lat='50.986155' lon='-1.3608359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243877' timestamp='2007-01-19T18:58:07+00:00' user='Dean Earley' visible='true' lat='50.9405433' lon='-1.4075095' />
-  <node id='13071414' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9230059' lon='-1.3549765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29631649' timestamp='2007-05-26T18:27:04+01:00' visible='true' lat='50.9692321' lon='-1.3503617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48885109' timestamp='2007-09-10T19:07:45+01:00' user='mike l' visible='true' lat='50.9443598' lon='-1.4323767'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='28830620' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9283801' lon='-1.3577519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961046' timestamp='2006-12-08T01:02:58+00:00' user='Dean Earley' visible='true' lat='50.9502451' lon='-1.3742761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707019' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8685886' lon='-1.3495779'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29632184' timestamp='2007-05-26T19:20:37+01:00' visible='true' lat='50.9565473' lon='-1.3688072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998131' timestamp='2007-06-05T23:00:30+01:00' user='nickw' visible='true' lat='50.9900095' lon='-1.4051243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340629' timestamp='2007-04-21T21:51:22+01:00' user='Dean Earley' visible='true' lat='50.9629468' lon='-1.3525264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962322' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9562531' lon='-1.3627615' />
-  <node id='91124455' timestamp='2007-10-29T08:16:33+00:00' user='nickw' visible='true' lat='50.9311568' lon='-1.446591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794372' timestamp='2007-05-30T21:37:18+01:00' user='nickw' visible='true' lat='50.9217769' lon='-1.3624731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608176' timestamp='2007-04-05T14:21:23+01:00' user='Dean Earley' visible='true' lat='50.8995388' lon='-1.371096' />
-  <node id='25761522' timestamp='2007-05-12T09:45:12+01:00' user='nickw' visible='true' lat='50.9363633' lon='-1.3639257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347765' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.9329039' lon='-1.3626311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636729' timestamp='2007-04-29T02:33:45+01:00' user='Dean Earley' visible='true' lat='50.9531422' lon='-1.4106075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110952' timestamp='2006-10-27T23:39:36+01:00' user='Dean Earley' visible='true' lat='50.9347772' lon='-1.3630064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071423' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9240159' lon='-1.3524263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29795315' timestamp='2007-05-30T21:56:41+01:00' user='nickw' visible='true' lat='50.9150363' lon='-1.354886'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999040' timestamp='2007-06-05T23:29:03+01:00' user='nickw' visible='true' lat='50.9989124' lon='-1.4286862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924080' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9315285' lon='-1.3833493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689117' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.939898' lon='-1.3806491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142620775' timestamp='2007-11-29T22:31:12+00:00' user='nickw' visible='true' lat='50.917663' lon='-1.4124434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980706' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9617499' lon='-1.3523816' />
-  <node id='34278559' timestamp='2007-08-14T04:48:02+01:00' user='andrewpmk' visible='true' lat='50.9076307' lon='-1.3967138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591405' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9136866' lon='-1.4483747' />
-  <node id='25282150' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9754634' lon='-1.4094297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169409528' timestamp='2007-12-14T21:27:51+00:00' user='nickw' visible='true' lat='50.9279956' lon='-1.437863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28382723' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9191' lon='-1.4612136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595837' timestamp='2007-10-16T11:34:23+01:00' user='Dean Earley' visible='true' lat='50.9705136' lon='-1.3537867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157204131' timestamp='2007-12-08T20:11:11+00:00' user='nickw' visible='true' lat='50.9430881' lon='-1.445432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621224' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9664866' lon='-1.371291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914410' timestamp='2007-06-03T16:22:49+01:00' visible='true' lat='50.9845966' lon='-1.3618459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226203' timestamp='2007-06-11T22:20:37+01:00' visible='true' lat='50.9826813' lon='-1.3530789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021801' timestamp='2007-04-03T00:52:59+01:00' user='Ben' visible='true' lat='50.936437' lon='-1.4044497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781175' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.901032' lon='-1.3741248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25305500' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9227153' lon='-1.3610681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298263' timestamp='2007-01-19T18:27:14+00:00' user='Dean Earley' visible='true' lat='50.9609804' lon='-1.3895351' />
-  <node id='28257899' timestamp='2007-04-29T22:56:48+01:00' user='Andy Street' visible='true' lat='50.9026935' lon='-1.3520054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831118' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9135446' lon='-1.4057249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932465' timestamp='2007-05-10T21:06:09+01:00' user='Dean Earley' visible='true' lat='50.9660828' lon='-1.4478322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000935' timestamp='2007-05-12T09:30:26+01:00' user='nickw' visible='true' lat='50.9202303' lon='-1.409698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303945' timestamp='2007-01-28T00:55:30+00:00' visible='true' lat='50.9188366' lon='-1.4033224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923782' timestamp='2007-06-03T20:04:49+01:00' visible='true' lat='50.9823894' lon='-1.3625033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504825' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9551166' lon='-1.4039429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398413' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9819561' lon='-1.4156219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600510' timestamp='2006-12-16T10:14:00+00:00' user='nickw' visible='true' lat='50.9172762' lon='-1.4290584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359716' timestamp='2007-04-29T17:20:51+01:00' visible='true' lat='50.9697249' lon='-1.3563351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700406' timestamp='2007-04-05T14:21:27+01:00' user='Dean Earley' visible='true' lat='50.9225464' lon='-1.3897859' />
-  <node id='28252940' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9444608' lon='-1.4254582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928590' timestamp='2007-06-03T21:52:02+01:00' visible='true' lat='50.9781746' lon='-1.3614174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648584' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9491356' lon='-1.3604136' />
-  <node id='29530366' timestamp='2007-05-28T10:44:50+01:00' visible='true' lat='50.9782663' lon='-1.3504781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127566' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9351019' lon='-1.4410128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252955' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.9436674' lon='-1.4303664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179454' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9559279' lon='-1.4258677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209198' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9439909' lon='-1.4490006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28343216' timestamp='2007-04-30T22:24:06+01:00' user='nickw' visible='true' lat='50.9121648' lon='-1.4056743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254756' timestamp='2008-02-03T06:24:13+00:00' user='sladen' visible='true' lat='50.907948' lon='-1.3977024' />
-  <node id='30956715' timestamp='2007-06-26T23:49:21+01:00' user='nickw' visible='true' lat='50.9272456' lon='-1.348082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398760' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9463804' lon='-1.4104218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663600' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9055139' lon='-1.4044639' />
-  <node id='26447527' timestamp='2007-03-09T21:07:40+00:00' user='nickw' visible='true' lat='50.9111377' lon='-1.3858437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29873130' timestamp='2007-06-02T19:16:04+01:00' visible='true' lat='50.9176909' lon='-1.3487422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87819786' timestamp='2007-10-26T12:15:04+01:00' user='Nick Dyer' visible='true' lat='50.9110605' lon='-1.4425189' />
-  <node id='245149521' timestamp='2008-02-03T06:10:43+00:00' user='sladen' visible='true' lat='50.9068818' lon='-1.4044058' />
-  <node id='21141379' timestamp='2007-03-24T16:33:41+00:00' user='Dean Earley' visible='true' lat='50.9236095' lon='-1.4235184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347752' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9292908' lon='-1.3594778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387816' timestamp='2007-04-05T14:21:28+01:00' user='Dean Earley' visible='true' lat='50.9283' lon='-1.3884' />
-  <node id='402747' timestamp='2007-04-05T14:21:28+01:00' user='Dean Earley' visible='true' lat='50.9142' lon='-1.4097' />
-  <node id='26114355' timestamp='2007-12-10T19:19:47+00:00' user='sladen' visible='true' lat='50.9066914' lon='-1.3968085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419444' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.941387' lon='-1.3720841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249958' timestamp='2007-04-29T21:41:56+01:00' visible='true' lat='50.9142932' lon='-1.4466241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20979897' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9276592' lon='-1.387284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419461' timestamp='2006-12-23T10:22:41+00:00' user='nickw' visible='true' lat='50.9395894' lon='-1.3781895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600592' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9894742' lon='-1.40174'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582050' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9305027' lon='-1.4504697' />
-  <node id='21689130' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9411123' lon='-1.387086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252365' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9462768' lon='-1.3613346' />
-  <node id='34278593' timestamp='2008-02-03T06:23:42+00:00' user='sladen' visible='true' lat='50.9077694' lon='-1.3968784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147523' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9095391' lon='-1.4022686' />
-  <node id='30956617' timestamp='2007-06-26T23:45:03+01:00' user='nickw' visible='true' lat='50.9296687' lon='-1.350661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305567' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9979558' lon='-1.3974953' />
-  <node id='29706972' timestamp='2007-06-03T15:45:30+01:00' visible='true' lat='50.9860401' lon='-1.3591129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467489' timestamp='2007-04-19T17:50:44+01:00' visible='true' lat='50.9341357' lon='-1.3763595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163276' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.970314' lon='-1.3875167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949818' timestamp='2007-01-07T12:38:44+00:00' user='nickw' visible='true' lat='50.9921636' lon='-1.3782874'>
-    <tag k='name' v='LAKEWOOD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675137' timestamp='2007-04-20T23:53:21+01:00' user='Dean Earley' visible='true' lat='50.9132508' lon='-1.3557446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464295' timestamp='2007-05-22T00:19:22+01:00' user='Dean Earley' visible='true' lat='50.9599721' lon='-1.4039448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949999' timestamp='2007-01-07T12:38:57+00:00' user='nickw' visible='true' lat='50.9821086' lon='-1.3877009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21677586' timestamp='2007-12-07T20:58:09+00:00' user='Steve Jeapes' visible='true' lat='50.9116687' lon='-1.4027001'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='29392359' timestamp='2007-05-20T17:52:57+01:00' visible='true' lat='50.9646519' lon='-1.3568022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668366' timestamp='2007-01-04T21:06:45+00:00' user='nickw' visible='true' lat='50.9863644' lon='-1.3922144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600678' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9778232' lon='-1.4050503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548676' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.9635243' lon='-1.3624946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223954' timestamp='2007-06-11T22:03:13+01:00' visible='true' lat='50.983812' lon='-1.351622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226352' timestamp='2007-06-11T22:23:49+01:00' visible='true' lat='50.9811727' lon='-1.3542286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931329' timestamp='2007-06-03T22:43:00+01:00' visible='true' lat='50.998423' lon='-1.3654599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575783' timestamp='2007-03-16T21:52:31+00:00' user='nickw' visible='true' lat='50.9001773' lon='-1.3991542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632094' timestamp='2007-12-10T19:40:05+00:00' user='sladen' visible='true' lat='50.970281' lon='-1.3495072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998582' timestamp='2007-06-05T23:13:55+01:00' user='nickw' visible='true' lat='50.9568962' lon='-1.453778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874078' timestamp='2007-05-08T14:50:38+01:00' visible='true' lat='50.9389586' lon='-1.4437019'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170438' timestamp='2006-11-11T17:24:04+00:00' user='Dean Earley' visible='true' lat='50.9352059' lon='-1.3319991' />
-  <node id='20976707' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9357417' lon='-1.4230951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581800' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9210512' lon='-1.4461001' />
-  <node id='254971' timestamp='2006-09-02T13:46:23+01:00' user='Dean Earley' visible='true' lat='50.9439039' lon='-1.4139694' />
-  <node id='21599034' timestamp='2006-12-16T01:02:10+00:00' user='Dean Earley' visible='true' lat='50.9326857' lon='-1.356117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507764' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9391405' lon='-1.3875664'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='St Alban's Church' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474852' timestamp='2007-09-23T16:33:12+01:00' user='mike l' visible='true' lat='50.9382816' lon='-1.36599' />
-  <node id='254399' timestamp='2007-01-19T20:36:00+00:00' user='Dean Earley' visible='true' lat='50.9207438' lon='-1.3640628' />
-  <node id='21636786' timestamp='2007-04-29T02:33:51+01:00' user='Dean Earley' visible='true' lat='50.9503405' lon='-1.408618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249863' timestamp='2007-04-29T21:41:41+01:00' visible='true' lat='50.9184298' lon='-1.4402092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662866' timestamp='2007-10-28T21:47:41+00:00' user='Nick Dyer' visible='true' lat='50.9056276' lon='-1.4067041' />
-  <node id='298301' timestamp='2005-12-06T02:07:56+00:00' visible='true' lat='50.9478749' lon='-1.3906927' />
-  <node id='122313901' timestamp='2007-11-18T18:59:19+00:00' user='nickw' visible='true' lat='50.9129239' lon='-1.4317812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816783' timestamp='2007-05-31T22:15:45+01:00' visible='true' lat='50.9870285' lon='-1.3614424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925203' timestamp='2007-06-03T20:30:01+01:00' visible='true' lat='50.9792074' lon='-1.3629481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724269' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9296741' lon='-1.4064538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561551' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9203058' lon='-1.4295804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001316' timestamp='2007-05-12T09:40:12+01:00' user='nickw' visible='true' lat='50.9214326' lon='-1.383901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675793' timestamp='2007-02-06T01:03:02+00:00' user='Dean Earley' visible='true' lat='50.9098042' lon='-1.4468214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29389522' timestamp='2007-05-20T16:37:03+01:00' visible='true' lat='50.9648504' lon='-1.3556728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601326' timestamp='2006-09-01T00:16:05+01:00' user='nickw' visible='true' lat='50.8869124' lon='-1.5269065'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21636918' timestamp='2007-01-25T22:42:41+00:00' user='Dean Earley' visible='true' lat='50.918654' lon='-1.4308482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781160' timestamp='2007-03-25T18:42:12+01:00' user='Dean Earley' visible='true' lat='50.9000097' lon='-1.367067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613400' timestamp='2006-12-16T17:46:41+00:00' user='David Currie' visible='true' lat='50.9974535' lon='-1.4437992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160421180' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9069996' lon='-1.4226413' />
-  <node id='29762783' timestamp='2007-05-29T21:12:06+01:00' visible='true' lat='50.9885938' lon='-1.3561335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636789' timestamp='2007-04-29T02:33:53+01:00' user='Dean Earley' visible='true' lat='50.9512173' lon='-1.4100573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582983' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.9405196' lon='-1.4250998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422986' timestamp='2007-04-05T14:21:29+01:00' user='Dean Earley' visible='true' lat='50.9441' lon='-1.3988' />
-  <node id='28243577' timestamp='2007-04-29T20:24:46+01:00' user='Dean Earley' visible='true' lat='50.9378091' lon='-1.4112301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931385' timestamp='2007-06-03T22:43:10+01:00' visible='true' lat='50.9940217' lon='-1.3737872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254618' timestamp='2005-11-15T15:41:32+00:00' user='nickw' visible='true' lat='50.9141996' lon='-1.4232341' />
-  <node id='13071213' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9243466' lon='-1.3668999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830581' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9222522' lon='-1.3572618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008456' timestamp='2007-05-12T15:12:17+01:00' user='nickw' visible='true' lat='50.9315827' lon='-1.3511449'>
-    <tag k='name' v='TRESILL GD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='658473' timestamp='2006-05-21T17:28:48+01:00' user='nickw' visible='true' lat='50.9206036' lon='-1.3879667' />
-  <node id='254301' timestamp='2007-02-18T20:18:29+00:00' visible='true' lat='50.9837029' lon='-1.349952' />
-  <node id='28342548' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9081061' lon='-1.3685234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245151024' timestamp='2008-02-03T06:18:05+00:00' user='sladen' visible='true' lat='50.9099775' lon='-1.4021227' />
-  <node id='3915748' timestamp='2007-03-25T18:42:38+01:00' user='Dean Earley' visible='true' lat='50.904457' lon='-1.3657194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924060' timestamp='2007-01-06T14:28:45+00:00' user='Dean Earley' visible='true' lat='51.010878' lon='-1.3474291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561556' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9222903' lon='-1.4310407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089133' timestamp='2007-06-13T09:24:39+01:00' visible='true' lat='50.9645424' lon='-1.3792146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964053' timestamp='2006-12-16T17:47:17+00:00' user='David Currie' visible='true' lat='51.0030615' lon='-1.4387121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984714' timestamp='2007-01-10T00:11:57+00:00' user='nickw' visible='true' lat='50.9448868' lon='-1.3903631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160212397' timestamp='2007-12-10T19:08:32+00:00' user='sladen' visible='true' lat='50.9234126' lon='-1.3872727' />
-  <node id='28348614' timestamp='2007-04-30T23:49:35+01:00' user='nickw' visible='true' lat='50.9275253' lon='-1.3618023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549361' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9682433' lon='-1.3723958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071402' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.922374' lon='-1.3575629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254297' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9796987' lon='-1.3447368' />
-  <node id='12591322' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.9163092' lon='-1.4129854'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28236139' timestamp='2007-04-29T19:25:58+01:00' user='Andy Street' visible='true' lat='50.9076397' lon='-1.3541134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25302622' timestamp='2007-09-17T22:55:03+01:00' user='mike l' visible='true' lat='50.9738917' lon='-1.3679578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325243' timestamp='2006-11-11T17:24:11+00:00' user='Dean Earley' visible='true' lat='50.9322539' lon='-1.3224956' />
-  <node id='28179479' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.9567432' lon='-1.4095012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24667968' timestamp='2007-01-04T21:04:56+00:00' user='nickw' visible='true' lat='50.9852326' lon='-1.3918866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947181' timestamp='2007-02-16T20:51:24+00:00' user='nickw' visible='true' lat='50.909499' lon='-1.3941732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976722' timestamp='2006-11-13T21:39:17+00:00' user='nickw' visible='true' lat='50.9340264' lon='-1.4222607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583087' timestamp='2007-05-02T23:58:00+01:00' visible='true' lat='50.939582' lon='-1.4342773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124194' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9227369' lon='-1.3494587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895690' timestamp='2007-02-13T18:31:36+00:00' user='Dean Earley' visible='true' lat='50.9847901' lon='-1.4601222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157180460' timestamp='2007-12-08T19:53:00+00:00' user='nickw' visible='true' lat='50.9369372' lon='-1.4526048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794807' timestamp='2007-05-30T21:46:53+01:00' user='nickw' visible='true' lat='50.9201986' lon='-1.356018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278584' timestamp='2007-08-14T04:48:04+01:00' user='andrewpmk' visible='true' lat='50.9078931' lon='-1.3979479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762559' timestamp='2007-05-29T21:09:34+01:00' visible='true' lat='50.9877962' lon='-1.3571451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997527' timestamp='2007-06-05T22:43:55+01:00' user='nickw' visible='true' lat='51.0110136' lon='-1.3562321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783126' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9441322' lon='-1.347815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133102' timestamp='2006-10-28T01:55:35+01:00' user='Dean Earley' visible='true' lat='50.9278594' lon='-1.3552212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613438' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true' lat='50.9754305' lon='-1.4041659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956684' timestamp='2007-06-26T23:49:18+01:00' user='nickw' visible='true' lat='50.9296372' lon='-1.3494528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930926' timestamp='2007-06-05T20:41:29+01:00' visible='true' lat='50.9997647' lon='-1.3536025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670301' timestamp='2007-06-10T18:15:23+01:00' visible='true' lat='50.9691499' lon='-1.3555666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275867' timestamp='2006-11-26T00:15:48+00:00' user='nickw' visible='true' lat='50.9176276' lon='-1.434426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114393' timestamp='2007-12-07T20:56:25+00:00' user='Steve Jeapes' visible='true' lat='50.9024461' lon='-1.3958251'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='anglican' />
-    <tag k='name' v='St Mary's Church' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='254528' timestamp='2005-11-15T15:40:57+00:00' user='nickw' visible='true' lat='50.9147146' lon='-1.4218904' />
-  <node id='28244282' timestamp='2007-04-29T20:36:33+01:00' user='Andy Street' visible='true' lat='50.9030462' lon='-1.3533746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275713' timestamp='2006-11-25T23:51:19+00:00' user='nickw' visible='true' lat='50.9221362' lon='-1.4266879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259896' timestamp='2007-04-29T23:09:26+01:00' user='Andy Street' visible='true' lat='50.9025954' lon='-1.3475401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179470' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9641452' lon='-1.4084023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173775' timestamp='2007-04-29T00:58:32+01:00' visible='true' lat='50.9458681' lon='-1.4319687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636760' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9467083' lon='-1.4018977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471839' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.937972' lon='-1.3694386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831123' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9111418' lon='-1.4075898'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='673876' timestamp='2006-12-08T01:02:58+00:00' user='Dean Earley' visible='true' lat='50.9488798' lon='-1.3704976' />
-  <node id='14957839' timestamp='2007-02-18T21:27:34+00:00' visible='true' lat='50.9168656' lon='-1.3946322'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29632116' timestamp='2007-05-26T19:19:13+01:00' visible='true' lat='50.9562841' lon='-1.3672553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384694' timestamp='2007-06-02T19:55:00+01:00' visible='true' lat='50.9690876' lon='-1.3616115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664549' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9083771' lon='-1.4072534' />
-  <node id='16963728' timestamp='2007-02-18T20:19:08+00:00' visible='true' lat='50.9295403' lon='-1.4142339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254734' timestamp='2005-11-15T15:42:24+00:00' user='nickw' visible='true' lat='50.9854962' lon='-1.3804183' />
-  <node id='29704620' timestamp='2007-05-28T10:50:13+01:00' visible='true' lat='50.9772812' lon='-1.3509902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160180234' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9069404' lon='-1.3777798' />
-  <node id='21613423' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9753535' lon='-1.403047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971164' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9025227' lon='-1.3984657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249997' timestamp='2007-04-29T21:42:10+01:00' visible='true' lat='50.9155617' lon='-1.4452131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001342' timestamp='2007-05-12T09:41:44+01:00' user='nickw' visible='true' lat='50.9247572' lon='-1.3820892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464309' timestamp='2007-05-22T00:19:25+01:00' user='Dean Earley' visible='true' lat='50.9454917' lon='-1.3945369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932235' timestamp='2007-05-10T20:48:58+01:00' user='Dean Earley' visible='true' lat='50.9675051' lon='-1.444998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462162' timestamp='2007-05-21T23:53:39+01:00' user='nickw' visible='true' lat='50.9011163' lon='-1.397813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124211' timestamp='2007-06-09T19:35:53+01:00' user='nickw' visible='true' lat='50.9238202' lon='-1.347323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194342' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9449648' lon='-1.4373894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909667' timestamp='2007-06-03T14:54:18+01:00' visible='true' lat='50.9681903' lon='-1.3527601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26782591' timestamp='2007-03-25T19:24:26+01:00' user='Dean Earley' visible='true' lat='50.9046838' lon='-1.3976153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830671' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9242491' lon='-1.3648955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021783' timestamp='2007-04-03T00:52:49+01:00' user='Ben' visible='true' lat='50.9541964' lon='-1.3999686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157205679' timestamp='2007-12-08T20:12:20+00:00' user='nickw' visible='true' lat='50.9434448' lon='-1.4474882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306314' timestamp='2006-12-02T23:56:39+00:00' user='Dean Earley' visible='true' lat='50.9275245' lon='-1.3920411' />
-  <node id='254263' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9475741' lon='-1.3525426' />
-  <node id='29838712' timestamp='2007-06-01T20:37:02+01:00' visible='true' lat='50.9698891' lon='-1.3889137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971213' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.908798' lon='-1.4114437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163070' timestamp='2008-01-04T19:32:05+00:00' user='nickw' visible='true' lat='50.972666' lon='-1.3855797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149449' timestamp='2008-02-03T06:10:28+00:00' user='sladen' visible='true' lat='50.9056694' lon='-1.4023544' />
-  <node id='29632167' timestamp='2007-05-26T19:20:12+01:00' visible='true' lat='50.9566852' lon='-1.3685088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705770' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8910707' lon='-1.4013575' />
-  <node id='29815636' timestamp='2007-05-31T21:47:55+01:00' visible='true' lat='50.989342' lon='-1.3582964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124668' timestamp='2007-06-09T19:48:38+01:00' user='nickw' visible='true' lat='50.9311988' lon='-1.3521556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480490' timestamp='2007-01-27T23:14:34+00:00' visible='true' lat='50.9092617' lon='-1.3906147'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='157205664' timestamp='2007-12-08T20:12:20+00:00' user='nickw' visible='true' lat='50.943376' lon='-1.4485908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29706912' timestamp='2007-05-28T11:38:42+01:00' visible='true' lat='50.976107' lon='-1.3539872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160219866' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9153882' lon='-1.3899249' />
-  <node id='29003038' timestamp='2007-05-22T00:19:55+01:00' user='Dean Earley' visible='true' lat='50.9406579' lon='-1.4037206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254575' timestamp='2007-03-09T21:07:46+00:00' user='nickw' visible='true' lat='50.9089736' lon='-1.386699' />
-  <node id='28252978' timestamp='2007-04-29T22:00:42+01:00' visible='true' lat='50.9431569' lon='-1.4268975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238999' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9177081' lon='-1.443243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548710' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.9669936' lon='-1.3662206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815666' timestamp='2007-05-31T21:48:04+01:00' visible='true' lat='50.9902162' lon='-1.3532584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613386' timestamp='2007-09-17T23:09:06+01:00' user='mike l' visible='true' lat='50.9745683' lon='-1.4082658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325249' timestamp='2005-12-16T23:14:57+00:00' user='80n' visible='true' lat='50.9294672' lon='-1.3188478' />
-  <node id='28194426' timestamp='2007-04-29T21:10:29+01:00' visible='true' lat='50.9474604' lon='-1.4350091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461820' timestamp='2007-05-21T23:51:10+01:00' user='nickw' visible='true' lat='50.9001014' lon='-1.3984686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194391' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.945629' lon='-1.4382935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236122' timestamp='2007-04-29T19:25:43+01:00' user='Andy Street' visible='true' lat='50.9072254' lon='-1.3547753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245145334' timestamp='2008-02-03T05:56:46+00:00' user='sladen' visible='true' lat='50.9135222' lon='-1.402363' />
-  <node id='29730494' timestamp='2007-05-28T19:36:26+01:00' visible='true' lat='50.9719786' lon='-1.3645082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890074' timestamp='2006-10-27T00:48:03+01:00' user='Dean Earley' visible='true' lat='50.9207229' lon='-1.3911481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596770' timestamp='2007-08-14T04:48:35+01:00' user='andrewpmk' visible='true' lat='50.9076826' lon='-1.3963435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91112113' timestamp='2007-10-29T08:02:19+00:00' user='nickw' visible='true' lat='50.9279219' lon='-1.4376615'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Ice House' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173924' timestamp='2007-04-29T01:03:15+01:00' visible='true' lat='50.9418764' lon='-1.4318334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728560' timestamp='2007-03-25T18:42:34+01:00' user='Dean Earley' visible='true' lat='50.9019876' lon='-1.3675067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091866' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9095649' lon='-1.4183775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704343' timestamp='2007-05-28T10:33:01+01:00' visible='true' lat='50.9817886' lon='-1.3601149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275820' timestamp='2007-11-18T19:12:34+00:00' user='nickw' visible='true' lat='50.9179657' lon='-1.4367206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600422' timestamp='2007-06-01T16:29:49+01:00' user='Dean Earley' visible='true' lat='50.9234455' lon='-1.4358564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462610' timestamp='2007-05-21T23:56:39+01:00' user='nickw' visible='true' lat='50.9052006' lon='-1.397813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998139' timestamp='2007-06-05T23:00:31+01:00' user='nickw' visible='true' lat='50.9914601' lon='-1.4070116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17768851' timestamp='2007-01-28T00:56:02+00:00' visible='true' lat='50.9298882' lon='-1.3835853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254314' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.9978965' lon='-1.335915' />
-  <node id='25640016' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9106858' lon='-1.3697457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244265' timestamp='2007-04-29T20:36:32+01:00' user='Andy Street' visible='true' lat='50.9040297' lon='-1.3527433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111714' timestamp='2007-10-29T08:01:16+00:00' user='nickw' visible='true' lat='50.9271158' lon='-1.4375945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706309' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.914826' lon='-1.388975'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='30096973' timestamp='2007-06-08T23:24:17+01:00' visible='true' lat='50.9623559' lon='-1.3776553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950453' timestamp='2007-09-10T23:28:31+01:00' visible='true' lat='50.912706' lon='-1.3953064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956576' timestamp='2007-06-26T23:44:57+01:00' user='nickw' visible='true' lat='50.9276431' lon='-1.3505008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722352' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.944969' lon='-1.378425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704145' timestamp='2007-05-28T10:20:03+01:00' visible='true' lat='50.9867422' lon='-1.3525254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9736882' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.907097' lon='-1.4107234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87825992' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.9003005' lon='-1.4380901' />
-  <node id='160411098' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true' lat='50.912114' lon='-1.4265895' />
-  <node id='661154' timestamp='2007-04-05T14:21:30+01:00' user='Dean Earley' visible='true' lat='50.9138692' lon='-1.3514394' />
-  <node id='657767' timestamp='2007-04-05T14:21:30+01:00' user='Dean Earley' visible='true' lat='50.905014' lon='-1.3681606' />
-  <node id='28418257' timestamp='2007-05-02T00:31:34+01:00' visible='true' lat='50.9679412' lon='-1.363057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700474' timestamp='2007-04-05T14:21:30+01:00' user='Dean Earley' visible='true' lat='50.9257495' lon='-1.389989' />
-  <node id='24949853' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9945393' lon='-1.3704566'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997536' timestamp='2007-06-05T22:43:56+01:00' user='nickw' visible='true' lat='51.0034632' lon='-1.3533713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099526' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9509084' lon='-1.3645743' />
-  <node id='16963741' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9333059' lon='-1.4093208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705744' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8939455' lon='-1.4026107' />
-  <node id='29464283' timestamp='2007-05-22T00:19:19+01:00' user='Dean Earley' visible='true' lat='50.9378071' lon='-1.4039364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209158' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.942481' lon='-1.4478657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831106' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9108997' lon='-1.4080112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301591' timestamp='2005-12-08T22:43:50+00:00' user='nickw' visible='true' lat='50.9266305' lon='-1.4047909' />
-  <node id='27237363' timestamp='2007-04-09T14:37:14+01:00' user='avantman42' visible='true' lat='50.9002393' lon='-1.3500684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507793' timestamp='2007-05-22T00:20:00+01:00' user='Dean Earley' visible='true' lat='50.948594' lon='-1.4039785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998130' timestamp='2007-06-05T23:00:30+01:00' user='nickw' visible='true' lat='50.9895093' lon='-1.404568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563291' timestamp='2007-04-23T22:47:35+01:00' visible='true' lat='50.9296495' lon='-1.3973366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148038' timestamp='2008-02-03T06:04:24+00:00' user='sladen' visible='true' lat='50.908159' lon='-1.4029123' />
-  <node id='13705693' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true' lat='50.8923757' lon='-1.40578'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13972792' timestamp='2008-01-31T17:11:18+00:00' user='Dean Earley' visible='true' lat='50.8972086' lon='-1.2278396'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25504283' timestamp='2007-05-28T12:16:21+01:00' visible='true' lat='50.9979672' lon='-1.3499288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232087' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9146946' lon='-1.4114383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632208' timestamp='2007-05-26T19:21:09+01:00' visible='true' lat='50.9562398' lon='-1.3670205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956719' timestamp='2007-06-26T23:49:22+01:00' user='nickw' visible='true' lat='50.9275586' lon='-1.3488568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254686' timestamp='2007-04-21T21:51:20+01:00' user='Dean Earley' visible='true' lat='50.9655751' lon='-1.351081' />
-  <node id='12594782' timestamp='2007-02-18T21:30:31+00:00' visible='true' lat='50.915778' lon='-1.4117041'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21636745' timestamp='2007-04-03T00:54:14+01:00' user='Ben' visible='true' lat='50.94074' lon='-1.3937347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359712' timestamp='2006-10-06T23:29:31+01:00' user='Dean Earley' visible='true' lat='50.9692805' lon='-1.3516351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964149' timestamp='2007-02-18T21:30:38+00:00' visible='true' lat='50.9165914' lon='-1.3756138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9267986' timestamp='2006-07-01T00:43:23+01:00' user='Dean Earley' visible='true' lat='50.9484426' lon='-1.3716659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422970' timestamp='2007-04-05T14:21:30+01:00' user='Dean Earley' visible='true' lat='50.9242' lon='-1.40582' />
-  <node id='29914415' timestamp='2007-06-03T16:22:50+01:00' visible='true' lat='50.9833383' lon='-1.3614413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325264' timestamp='2006-11-11T17:24:15+00:00' user='Dean Earley' visible='true' lat='50.9212651' lon='-1.3152682' />
-  <node id='29765431' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true' lat='50.9992063' lon='-1.3519447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331359' timestamp='2007-04-05T14:21:30+01:00' user='Dean Earley' visible='true' lat='50.9453338' lon='-1.4038097' />
-  <node id='21689049' timestamp='2007-01-25T22:42:41+00:00' user='Dean Earley' visible='true' lat='50.9403528' lon='-1.3739589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601315' timestamp='2006-09-01T00:16:04+01:00' user='nickw' visible='true' lat='50.8427954' lon='-1.5027452'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='17722337' timestamp='2006-10-06T23:46:12+01:00' user='Dean Earley' visible='true' lat='50.9451387' lon='-1.3780248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21614662' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9008367' lon='-1.4048383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254331' timestamp='2005-11-15T15:39:02+00:00' user='nickw' visible='true' lat='50.9683993' lon='-1.4062976' />
-  <node id='254875' timestamp='2007-12-10T19:57:14+00:00' user='sladen' visible='true' lat='50.9151988' lon='-1.4840725' />
-  <node id='518779' timestamp='2007-04-05T14:21:30+01:00' user='Dean Earley' visible='true' lat='50.9186615' lon='-1.3937549' />
-  <node id='170452' timestamp='2006-09-02T12:59:35+01:00' user='Dean Earley' visible='true' lat='50.9500339' lon='-1.3972381' />
-  <node id='26593136' timestamp='2007-03-17T20:47:44+00:00' user='nickw' visible='true' lat='50.9017737' lon='-1.3628652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13105009' timestamp='2006-08-11T10:04:17+01:00' user='Dean Earley' visible='true' lat='50.9180944' lon='-1.3606981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671357' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.917865' lon='-1.4370745' />
-  <node id='387813' timestamp='2007-04-05T14:21:30+01:00' user='Dean Earley' visible='true' lat='50.9282' lon='-1.39065' />
-  <node id='20973237' timestamp='2007-08-14T04:48:37+01:00' user='andrewpmk' visible='true' lat='50.9073201' lon='-1.3991426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254466' timestamp='2007-02-04T22:51:52+00:00' user='Dean Earley' visible='true' lat='50.9015159' lon='-1.3767627' />
-  <node id='269425' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0174294' lon='-1.3915511' />
-  <node id='90659228' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.903652' lon='-1.4055712' />
-  <node id='21636790' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9508986' lon='-1.408411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91124442' timestamp='2007-10-29T08:16:32+00:00' user='nickw' visible='true' lat='50.9311912' lon='-1.446442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689118' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9402611' lon='-1.380371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091393' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.990173' lon='-1.4455653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582970' timestamp='2007-05-02T23:57:49+01:00' visible='true' lat='50.941067' lon='-1.4245585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964105' timestamp='2006-09-08T02:11:58+01:00' user='Dean Earley' visible='true' lat='50.9181665' lon='-1.3763759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18347833' timestamp='2007-02-18T20:19:13+00:00' visible='true' lat='50.9295686' lon='-1.411848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243467' timestamp='2007-04-29T20:23:53+01:00' user='Dean Earley' visible='true' lat='50.9393718' lon='-1.406923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781178' timestamp='2007-03-25T18:42:15+01:00' user='Dean Earley' visible='true' lat='50.9002463' lon='-1.3728937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889426' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9479351' lon='-1.3646708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232557' timestamp='2007-04-29T18:59:29+01:00' user='nickw' visible='true' lat='50.9149451' lon='-1.3565871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582953' timestamp='2007-05-02T23:57:46+01:00' visible='true' lat='50.9430183' lon='-1.4250967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88086805' timestamp='2007-10-26T17:55:08+01:00' user='Nick Dyer' visible='true' lat='50.9962355' lon='-1.4666299' />
-  <node id='21141490' timestamp='2007-12-14T21:30:36+00:00' user='nickw' visible='true' lat='50.9337214' lon='-1.4409732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705441' timestamp='2007-10-26T12:19:24+01:00' user='Nick Dyer' visible='true' lat='50.9040462' lon='-1.4508788' />
-  <node id='28249860' timestamp='2007-04-29T21:41:40+01:00' visible='true' lat='50.9185253' lon='-1.4410306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246349' timestamp='2007-04-29T20:59:43+01:00' user='Dean Earley' visible='true' lat='50.933686' lon='-1.4314132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194500' timestamp='2007-11-25T22:27:51+00:00' user='southglos' visible='true' lat='50.9482381' lon='-1.406102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27237175' timestamp='2007-04-09T14:34:50+01:00' user='avantman42' visible='true' lat='50.8989457' lon='-1.3503051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706339' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.919945' lon='-1.3869248'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='25762094' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9463174' lon='-1.3466632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329537' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9745' lon='-1.42011' />
-  <node id='29505723' timestamp='2007-05-22T19:28:28+01:00' visible='true' lat='50.9885087' lon='-1.3519257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2742649' timestamp='2006-10-06T23:46:21+01:00' user='Dean Earley' visible='true' lat='50.9463223' lon='-1.3925278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874058' timestamp='2007-10-12T14:12:00+01:00' user='SteveC' visible='true' lat='50.9369289' lon='-1.4408395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='603227' timestamp='2007-04-05T14:21:31+01:00' user='Dean Earley' visible='true' lat='50.9176' lon='-1.39621' />
-  <node id='29491402' timestamp='2007-12-07T20:59:56+00:00' user='Steve Jeapes' visible='true' lat='50.9198344' lon='-1.3963401'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Bent Brief' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='25896257' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.9601119' lon='-1.3974618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816748' timestamp='2007-05-31T22:13:34+01:00' visible='true' lat='50.9905039' lon='-1.3555512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243616' timestamp='2007-04-29T20:25:00+01:00' user='Dean Earley' visible='true' lat='50.939211' lon='-1.4158338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949870' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9974401' lon='-1.3805092'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152429' timestamp='2008-02-03T06:21:38+00:00' user='sladen' visible='true' lat='50.9074284' lon='-1.3977796' />
-  <node id='28348134' timestamp='2007-04-30T23:45:32+01:00' user='nickw' visible='true' lat='50.9319829' lon='-1.3657557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236105' timestamp='2007-04-29T19:25:34+01:00' user='Andy Street' visible='true' lat='50.9098827' lon='-1.3508783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961051' timestamp='2006-11-11T17:12:38+00:00' user='Dean Earley' visible='true' lat='50.9497685' lon='-1.3715917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548693' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9633931' lon='-1.3679171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945400' timestamp='2007-04-08T17:43:56+01:00' user='avantman42' visible='true' lat='50.9031804' lon='-1.3452043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507772' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9410951' lon='-1.3930211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998113' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.9874083' lon='-1.3946743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92685110' timestamp='2007-10-31T12:25:04+00:00' user='Dean Earley' visible='true' lat='50.9613724' lon='-1.4240097' />
-  <node id='28180207' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9623619' lon='-1.4243875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577122' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9651681' lon='-1.4208035' />
-  <node id='13071295' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9209633' lon='-1.3587614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179449' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9586374' lon='-1.4243337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963758' timestamp='2007-05-22T00:20:01+01:00' user='Dean Earley' visible='true' lat='50.9380266' lon='-1.4087991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021813' timestamp='2007-04-03T00:53:04+01:00' user='Ben' visible='true' lat='50.9353736' lon='-1.4006502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903074' timestamp='2007-05-09T23:03:43+01:00' visible='true' lat='50.9420216' lon='-1.3683776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613393' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9746232' lon='-1.4196629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162253' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9728348' lon='-1.3828281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071268' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9186845' lon='-1.3607448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14962500' timestamp='2006-09-07T23:47:40+01:00' user='Dean Earley' visible='true' lat='50.9234452' lon='-1.3421536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781163' timestamp='2007-03-25T18:42:13+01:00' user='Dean Earley' visible='true' lat='50.902914' lon='-1.3670638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984759' timestamp='2007-01-10T00:14:08+00:00' user='nickw' visible='true' lat='50.9432763' lon='-1.3925921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464298' timestamp='2007-05-22T00:19:22+01:00' user='Dean Earley' visible='true' lat='50.9483545' lon='-1.4042282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704905' timestamp='2006-08-25T22:23:12+01:00' user='dmgroom' visible='true' lat='50.9008638' lon='-1.4511441' />
-  <node id='20976809' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9258624' lon='-1.4213865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275632' timestamp='2007-06-01T16:39:56+01:00' user='Dean Earley' visible='true' lat='50.9183864' lon='-1.434003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632150' timestamp='2007-05-26T19:19:58+01:00' visible='true' lat='50.9577756' lon='-1.366917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561526' timestamp='2007-06-01T16:31:48+01:00' user='Dean Earley' visible='true' lat='50.9267606' lon='-1.4318116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141427' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9303031' lon='-1.4259261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254480' timestamp='2007-02-13T18:31:45+00:00' user='Dean Earley' visible='true' lat='50.9651726' lon='-1.4191338' />
-  <node id='160409615' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9112968' lon='-1.433044' />
-  <node id='27440014' timestamp='2007-04-18T02:00:22+01:00' visible='true' lat='50.9277408' lon='-1.3812248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212558' timestamp='2007-12-08T20:16:58+00:00' user='nickw' visible='true' lat='50.9442648' lon='-1.4486405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908428' timestamp='2006-07-18T10:20:35+01:00' user='nickw' visible='true' lat='50.9357568' lon='-1.3706851' />
-  <node id='29710865' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9866957' lon='-1.3545911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30259412' timestamp='2007-06-12T21:04:29+01:00' visible='true' lat='50.9784056' lon='-1.3596239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816414' timestamp='2007-05-31T21:58:44+01:00' visible='true' lat='50.9895246' lon='-1.3557506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971202' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.90797' lon='-1.4149661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984729' timestamp='2007-01-10T00:12:09+00:00' user='nickw' visible='true' lat='50.9434891' lon='-1.390973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998967' timestamp='2007-06-05T23:28:55+01:00' user='nickw' visible='true' lat='50.986808' lon='-1.4383812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608185' timestamp='2007-04-05T14:21:31+01:00' user='Dean Earley' visible='true' lat='50.9212' lon='-1.39709' />
-  <node id='307472' timestamp='2005-12-12T00:24:07+00:00' user='nickw' visible='true' lat='50.9251714' lon='-1.4036322' />
-  <node id='29925632' timestamp='2007-06-03T20:45:00+01:00' visible='true' lat='50.9810362' lon='-1.3632857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290780' timestamp='2007-06-13T09:24:09+01:00' visible='true' lat='50.9647541' lon='-1.382944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27523499' timestamp='2007-04-22T01:26:52+01:00' visible='true' lat='50.9723129' lon='-1.3738512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924090' timestamp='2007-02-18T20:19:18+00:00' visible='true' lat='50.9394098' lon='-1.3737338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724262' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.9256037' lon='-1.4141463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668074' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9817063' lon='-1.4000789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583043' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9390004' lon='-1.4306169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504625' timestamp='2007-06-17T21:47:10+01:00' visible='true' lat='50.9814406' lon='-1.358069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462625' timestamp='2007-05-21T23:56:40+01:00' user='nickw' visible='true' lat='50.9029831' lon='-1.4002566'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925911' timestamp='2007-06-03T20:50:20+01:00' visible='true' lat='50.9811379' lon='-1.365392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29631646' timestamp='2007-05-26T18:26:59+01:00' visible='true' lat='50.969467' lon='-1.3504872'>
-    <tag k='highway' v='bus_stop' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243599' timestamp='2007-04-29T20:24:58+01:00' user='Dean Earley' visible='true' lat='50.934991' lon='-1.4140973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414297' timestamp='2007-05-01T23:50:15+01:00' user='nickw' visible='true' lat='50.9389995' lon='-1.373121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305220' timestamp='2006-11-22T18:13:08+00:00' user='southglos' visible='true' lat='50.9949441' lon='-1.3568557' />
-  <node id='25783080' timestamp='2007-02-11T18:07:12+00:00' user='nickw' visible='true' lat='50.9391249' lon='-1.3575895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961034' timestamp='2006-11-11T17:12:21+00:00' user='Dean Earley' visible='true' lat='50.9599252' lon='-1.433781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347769' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.9323961' lon='-1.3638883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815559' timestamp='2007-05-31T21:42:56+01:00' visible='true' lat='50.9893903' lon='-1.358591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252910' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9454296' lon='-1.4288503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319634' timestamp='2005-12-14T22:03:22+00:00' user='nickw' visible='true' lat='50.921309' lon='-1.3927102' />
-  <node id='14744291' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9071495' lon='-1.4120206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392358' timestamp='2007-11-28T12:24:29+00:00' user='Dean Earley' visible='true' lat='50.9634609' lon='-1.3584269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965520' timestamp='2007-05-10T21:08:01+01:00' user='Dean Earley' visible='true' lat='50.9642383' lon='-1.4458235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252929' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9459893' lon='-1.4257289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009225' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.9298463' lon='-1.3546263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615428' timestamp='2006-12-16T21:52:54+00:00' user='nickw' visible='true' lat='50.9022516' lon='-1.4055706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113965199' timestamp='2007-11-14T14:53:44+00:00' user='Nick Dyer' visible='true' lat='50.9554949' lon='-1.3640043' />
-  <node id='160226526' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.9041367' lon='-1.3905686' />
-  <node id='18398451' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9298119' lon='-1.4038948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575761' timestamp='2007-03-16T21:52:27+00:00' user='nickw' visible='true' lat='50.8990966' lon='-1.3904376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227255' timestamp='2007-04-29T08:58:12+01:00' user='Dean Earley' visible='true' lat='50.9393906' lon='-1.4095602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958627' timestamp='2007-09-10T23:55:11+01:00' visible='true' lat='50.9066046' lon='-1.3977451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956738' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.9278466' lon='-1.3513402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132712' timestamp='2005-07-18T10:15:22+01:00' visible='true' lat='50.9588661' lon='-1.4416661' />
-  <node id='28342582' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9096845' lon='-1.3616098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632490' timestamp='2007-05-26T19:45:36+01:00' visible='true' lat='50.9594682' lon='-1.3693952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721075' timestamp='2007-04-29T17:19:54+01:00' visible='true' lat='50.9698791' lon='-1.3562478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341778' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.9125406' lon='-1.3622455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28936006' timestamp='2007-05-11T00:59:48+01:00' visible='true' lat='50.942264' lon='-1.4419086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239732' timestamp='2007-10-25T21:06:43+01:00' user='Nick Dyer' visible='true' lat='50.935093' lon='-1.447077' />
-  <node id='245150659' timestamp='2008-02-03T06:16:37+00:00' user='sladen' visible='true' lat='50.9086948' lon='-1.4076244' />
-  <node id='33718241' timestamp='2007-08-08T01:28:08+01:00' visible='true' lat='50.933238' lon='-1.4444041' />
-  <node id='30161252' timestamp='2007-06-10T18:18:29+01:00' visible='true' lat='50.9635945' lon='-1.3639083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345057' timestamp='2007-04-30T23:00:38+01:00' user='nickw' visible='true' lat='50.9302557' lon='-1.3609562'>
-    <tag k='name' v='LONGDWN RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296618' timestamp='2007-01-19T10:19:58+00:00' user='Dean Earley' visible='true' lat='50.9706349' lon='-1.3659013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600467' timestamp='2007-10-12T14:05:13+01:00' user='SteveC' visible='true' lat='50.929556' lon='-1.4490706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727983' timestamp='2006-09-02T19:02:01+01:00' user='Dean Earley' visible='true' lat='50.9188781' lon='-1.4038867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26004483' timestamp='2007-02-18T21:30:55+00:00' visible='true' lat='50.9087775' lon='-1.3974259' />
-  <node id='31517599' timestamp='2007-07-09T21:49:29+01:00' visible='true' lat='50.9258529' lon='-1.3913899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29912977' timestamp='2007-06-03T15:50:11+01:00' visible='true' lat='50.9878179' lon='-1.3589633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664555' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9075815' lon='-1.4072964' />
-  <node id='18348715' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.984779' lon='-1.4317248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180236' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9619342' lon='-1.4255652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252944' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.9441226' lon='-1.4273957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998906' timestamp='2007-06-05T23:28:48+01:00' user='nickw' visible='true' lat='50.9865579' lon='-1.4390567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976767' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9279912' lon='-1.4199561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160269280' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9741021' lon='-1.3530606' />
-  <node id='657802' timestamp='2007-08-12T23:07:10+01:00' user='Edward' visible='true' lat='50.9108685' lon='-1.4024474' />
-  <node id='13706641' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.914797' lon='-1.377623'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29621230' timestamp='2007-05-26T11:35:19+01:00' visible='true' lat='50.9570418' lon='-1.3707475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194337' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9448725' lon='-1.4362577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632231' timestamp='2007-05-26T19:22:51+01:00' visible='true' lat='50.9571601' lon='-1.3692063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467483' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.9301439' lon='-1.3769315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305573' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.996089' lon='-1.3959289' />
-  <node id='20976662' timestamp='2006-11-13T21:38:56+00:00' user='nickw' visible='true' lat='50.9264492' lon='-1.4228932'>
-    <tag k='name' v='HARLAND CR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952638' timestamp='2007-02-11T00:33:17+00:00' visible='true' lat='50.9333054' lon='-1.3786926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704533' timestamp='2007-05-28T10:40:39+01:00' visible='true' lat='50.9796437' lon='-1.3583974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160402931' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9134182' lon='-1.445601' />
-  <node id='21585938' timestamp='2007-06-03T14:54:29+01:00' visible='true' lat='50.9688951' lon='-1.354824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613457' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9773285' lon='-1.4012948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706876' timestamp='2007-04-05T14:21:32+01:00' user='Dean Earley' visible='true' lat='50.8800312' lon='-1.3651234' />
-  <node id='18101134' timestamp='2006-10-11T19:37:00+01:00' user='nickw' visible='true' lat='50.9128567' lon='-1.4008991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021770' timestamp='2007-04-03T00:52:42+01:00' user='Ben' visible='true' lat='50.9467549' lon='-1.3982426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816735' timestamp='2007-05-31T22:13:30+01:00' visible='true' lat='50.9908248' lon='-1.3562097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613450' timestamp='2006-12-16T17:46:56+00:00' user='David Currie' visible='true' lat='50.9751398' lon='-1.4035674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346979' timestamp='2007-04-30T23:26:38+01:00' user='nickw' visible='true' lat='50.9000829' lon='-1.3635826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613487' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9914557' lon='-1.3997004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122315313' timestamp='2007-11-18T19:00:10+00:00' user='nickw' visible='true' lat='50.9139291' lon='-1.4257665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815474' timestamp='2007-05-31T21:38:53+01:00' visible='true' lat='50.9875643' lon='-1.3558019'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903644' timestamp='2007-05-09T23:57:39+01:00' visible='true' lat='50.9544894' lon='-1.3581367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740488' timestamp='2007-01-19T09:58:47+00:00' user='Dean Earley' visible='true' lat='50.9850982' lon='-1.3510722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929406' timestamp='2007-06-03T22:04:02+01:00' visible='true' lat='50.9771832' lon='-1.3596562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675884' timestamp='2007-08-12T23:13:31+01:00' user='Edward' visible='true' lat='50.9306109' lon='-1.3744344' />
-  <node id='29633877' timestamp='2007-05-27T10:45:24+01:00' visible='true' lat='50.9645044' lon='-1.3641746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817900' timestamp='2007-05-31T22:22:41+01:00' visible='true' lat='50.9873736' lon='-1.3645022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135440' timestamp='2007-05-15T20:57:26+01:00' user='nickw' visible='true' lat='50.9429536' lon='-1.3831326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577109' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9632491' lon='-1.425241' />
-  <node id='700501' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true' lat='50.928566' lon='-1.3742198' />
-  <node id='19111083' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0097473' lon='-1.3943673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114362' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9070378' lon='-1.395109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243971' timestamp='2007-04-29T20:34:44+01:00' user='Andy Street' visible='true' lat='50.9051953' lon='-1.3497155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157201975' timestamp='2007-12-08T20:09:10+00:00' user='nickw' visible='true' lat='50.9422932' lon='-1.4449055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141410' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9276752' lon='-1.423545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487483' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9151664' lon='-1.389736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254365' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.918471' lon='-1.4041303' />
-  <node id='14964162' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9205726' lon='-1.3769556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728875' timestamp='2007-05-28T19:12:28+01:00' visible='true' lat='50.9722417' lon='-1.357114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871559' timestamp='2007-06-02T18:40:05+01:00' visible='true' lat='50.9153628' lon='-1.3494822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537330' timestamp='2006-10-27T22:49:32+01:00' user='Dean Earley' visible='true' lat='50.9284751' lon='-1.3527693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639956' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9031497' lon='-1.376963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25305487' timestamp='2007-01-28T00:56:04+00:00' visible='true' lat='50.925066' lon='-1.3870637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998983' timestamp='2007-06-05T23:28:57+01:00' user='nickw' visible='true' lat='50.9906597' lon='-1.4366727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25555527' timestamp='2007-01-31T01:06:22+00:00' user='Dean Earley' visible='true' lat='51.0077483' lon='-1.3432882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001700' timestamp='2007-05-12T09:53:01+01:00' user='nickw' visible='true' lat='50.9398336' lon='-1.3634011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134310' timestamp='2007-05-15T20:48:44+01:00' user='nickw' visible='true' lat='50.9404004' lon='-1.3887802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744412' timestamp='2006-12-02T23:18:59+00:00' user='Dean Earley' visible='true' lat='50.9403292' lon='-1.3786804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145094' timestamp='2007-05-16T00:37:04+01:00' visible='true' lat='50.925084' lon='-1.38614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984794' timestamp='2007-01-10T00:15:09+00:00' user='nickw' visible='true' lat='50.9425565' lon='-1.381874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710553' timestamp='2007-05-28T14:15:19+01:00' visible='true' lat='50.9825713' lon='-1.358787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254639' timestamp='2006-10-27T00:48:13+01:00' user='Dean Earley' visible='true' lat='50.9148854' lon='-1.3945677' />
-  <node id='27558575' timestamp='2007-04-23T19:28:23+01:00' visible='true' lat='50.9260791' lon='-1.3905151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730533' timestamp='2007-05-28T19:37:03+01:00' visible='true' lat='50.9645838' lon='-1.3650513'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91113448' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.9275619' lon='-1.4420769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28234929' timestamp='2007-04-29T19:16:51+01:00' user='nickw' visible='true' lat='50.9073603' lon='-1.3614644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932220' timestamp='2007-05-10T20:48:46+01:00' user='Dean Earley' visible='true' lat='50.9596171' lon='-1.4519144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964135' timestamp='2007-02-18T21:25:15+00:00' visible='true' lat='50.9174559' lon='-1.3850764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925339' timestamp='2007-06-03T20:36:29+01:00' visible='true' lat='50.9806655' lon='-1.3640337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296381' timestamp='2007-05-28T10:59:40+01:00' visible='true' lat='50.9801614' lon='-1.349493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914252' timestamp='2007-06-03T16:03:05+01:00' visible='true' lat='50.9832664' lon='-1.3591875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706671' timestamp='2007-04-05T14:21:32+01:00' user='Dean Earley' visible='true' lat='50.9064375' lon='-1.3822188' />
-  <node id='28250032' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9165843' lon='-1.4486339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160373390' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9219461' lon='-1.4718652' />
-  <node id='298280' timestamp='2006-09-02T12:59:35+01:00' user='Dean Earley' visible='true' lat='50.9608594' lon='-1.3947425' />
-  <node id='26346722' timestamp='2007-03-04T18:57:47+00:00' user='Dean Earley' visible='true' lat='50.91562' lon='-1.365732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471856' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9393585' lon='-1.3665629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254892' timestamp='2007-04-29T20:52:53+01:00' user='Dean Earley' visible='true' lat='50.9332452' lon='-1.4207429' />
-  <node id='28240321' timestamp='2007-04-29T20:02:55+01:00' user='Andy Street' visible='true' lat='50.9064815' lon='-1.3527472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173825' timestamp='2007-09-10T19:06:54+01:00' user='mike l' visible='true' lat='50.9440948' lon='-1.4335097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163081' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9713461' lon='-1.3871491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971183' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9053266' lon='-1.3998707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632801' timestamp='2007-05-26T20:05:11+01:00' visible='true' lat='50.9597838' lon='-1.3703549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972831' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.902069' lon='-1.3952206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402746' timestamp='2007-02-18T21:30:18+00:00' visible='true' lat='50.9138945' lon='-1.4096016' />
-  <node id='142617047' timestamp='2007-11-29T22:29:08+00:00' user='nickw' visible='true' lat='50.9140917' lon='-1.4159424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711909' timestamp='2007-05-28T14:57:27+01:00' visible='true' lat='50.9850544' lon='-1.35447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929410' timestamp='2007-06-03T22:04:04+01:00' visible='true' lat='50.9774513' lon='-1.359474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730522' timestamp='2007-05-28T19:36:51+01:00' visible='true' lat='50.9707299' lon='-1.3711063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929182' timestamp='2007-06-03T22:00:36+01:00' visible='true' lat='50.9775037' lon='-1.3617563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816294' timestamp='2007-05-31T21:52:25+01:00' visible='true' lat='50.9911253' lon='-1.3540727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071278' timestamp='2007-03-31T20:35:03+01:00' user='nickw' visible='true' lat='50.917713' lon='-1.3589781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123695' timestamp='2007-10-29T08:15:56+00:00' user='nickw' visible='true' lat='50.9305319' lon='-1.4474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998096' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.9878335' lon='-1.3998794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149626' timestamp='2008-02-03T06:11:20+00:00' user='sladen' visible='true' lat='50.9057884' lon='-1.4026033' />
-  <node id='28582999' timestamp='2007-05-02T23:57:52+01:00' visible='true' lat='50.9414299' lon='-1.4303647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160179633' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9138027' lon='-1.3722781' />
-  <node id='113962296' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.958486' lon='-1.369173' />
-  <node id='15657689' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.907146' lon='-1.3773764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331321' timestamp='2006-11-11T21:23:54+00:00' user='Dean Earley' visible='true' lat='51.0009' lon='-1.35707' />
-  <node id='8596797' timestamp='2006-11-13T00:43:24+00:00' user='Dean Earley' visible='true' lat='50.9050411' lon='-1.4127114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14713528' timestamp='2006-09-02T18:21:44+01:00' user='Dean Earley' visible='true' lat='50.910463' lon='-1.4002379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239960' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.9074545' lon='-1.4127901' />
-  <node id='28339141' timestamp='2007-04-30T20:39:25+01:00' visible='true' lat='50.9669939' lon='-1.3607461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071222' timestamp='2006-08-11T02:47:58+01:00' user='Dean Earley' visible='true' lat='50.9203166' lon='-1.371322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388947' timestamp='2007-04-05T14:21:32+01:00' user='Dean Earley' visible='true' lat='50.940612' lon='-1.39707' />
-  <node id='17721041' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9605889' lon='-1.3615836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331342' timestamp='2007-12-06T22:10:59+00:00' user='Dean Earley' visible='true' lat='51.0066' lon='-1.37428' />
-  <node id='325695' timestamp='2007-04-05T14:21:32+01:00' user='Dean Earley' visible='true' lat='50.9219' lon='-1.40655' />
-  <node id='24949968' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9888871' lon='-1.3862308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217218' timestamp='2006-07-09T22:47:14+01:00' user='Dean Earley' visible='true' lat='50.9205682' lon='-1.3564874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423499' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9313764' lon='-1.4441012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200329' timestamp='2007-12-08T20:07:46+00:00' user='nickw' visible='true' lat='50.9408505' lon='-1.4467978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26593142' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.901488' lon='-1.3666356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723045' timestamp='2006-10-06T23:52:01+01:00' user='Dean Earley' visible='true' lat='50.994925' lon='-1.3573083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341765' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9107117' lon='-1.3602588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639922' timestamp='2007-02-04T22:51:17+00:00' user='Dean Earley' visible='true' lat='50.9000703' lon='-1.3813645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91124927' timestamp='2007-10-29T08:16:55+00:00' user='nickw' visible='true' lat='50.9304129' lon='-1.4465531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930869' timestamp='2007-06-03T22:30:57+01:00' visible='true' lat='50.9992681' lon='-1.3543848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009196' timestamp='2007-05-12T15:33:38+01:00' user='nickw' visible='true' lat='50.9298275' lon='-1.3519543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275756' timestamp='2006-11-25T23:58:21+00:00' user='nickw' visible='true' lat='50.9154482' lon='-1.4277309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141393' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.923718' lon='-1.4161745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469848' timestamp='2007-04-05T14:21:33+01:00' user='Dean Earley' visible='true' lat='50.9088906' lon='-1.4112436' />
-  <node id='14726551' timestamp='2007-02-06T00:16:37+00:00' user='Dean Earley' visible='true' lat='50.9113731' lon='-1.4010916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926153' timestamp='2007-06-03T20:55:51+01:00' visible='true' lat='50.9799241' lon='-1.3637417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398387' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.943368' lon='-1.4412995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305624' timestamp='2006-12-16T17:47:21+00:00' user='David Currie' visible='true' lat='50.9850044' lon='-1.3876026' />
-  <node id='28107721' timestamp='2007-04-27T23:44:14+01:00' visible='true' lat='50.9314935' lon='-1.389847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217640' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9223212' lon='-1.3595753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830585' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9245215' lon='-1.3563577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117341' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9309834' lon='-1.4452357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071411' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9226019' lon='-1.355503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903378' timestamp='2007-05-09T23:24:26+01:00' visible='true' lat='50.9468771' lon='-1.3640327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636925' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9195964' lon='-1.4269947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372755' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.9314167' lon='-1.4413301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21586135' timestamp='2006-12-14T23:57:08+00:00' user='Dean Earley' visible='true' lat='50.9663078' lon='-1.3278897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003053' timestamp='2007-05-22T00:20:05+01:00' user='Dean Earley' visible='true' lat='50.9405545' lon='-1.4055938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132670' timestamp='2007-05-15T20:24:20+01:00' user='nickw' visible='true' lat='50.9277115' lon='-1.378925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248241' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8919673' lon='-1.3975125' />
-  <node id='30410994' timestamp='2007-06-15T23:09:51+01:00' visible='true' lat='50.9678597' lon='-1.3570307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743174' timestamp='2006-09-03T00:38:41+01:00' user='Dean Earley' visible='true' lat='50.9077861' lon='-1.4108024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222203' timestamp='2007-02-18T21:30:19+00:00' visible='true' lat='50.9135237' lon='-1.4431099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92680535' timestamp='2007-10-31T12:24:55+00:00' user='Dean Earley' visible='true' lat='50.9606155' lon='-1.425231' />
-  <node id='30096959' timestamp='2007-06-08T23:24:15+01:00' visible='true' lat='50.9657206' lon='-1.3761869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764482' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.9109335' lon='-1.399512' />
-  <node id='21419617' timestamp='2006-12-02T23:23:54+00:00' user='Dean Earley' visible='true' lat='50.9397795' lon='-1.3788905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909656' timestamp='2007-06-03T14:54:16+01:00' visible='true' lat='50.9687923' lon='-1.354242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972694' timestamp='2006-08-25T11:56:05+01:00' user='nickw' visible='true' lat='50.9127408' lon='-1.2516361'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='24924306' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9774766' lon='-1.3728001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372804' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9296247' lon='-1.4425387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325047' timestamp='2007-12-10T20:19:02+00:00' user='sladen' visible='true' lat='50.9458333' lon='-1.4763392' />
-  <node id='14743185' timestamp='2007-04-20T23:53:17+01:00' user='Dean Earley' visible='true' lat='50.9083232' lon='-1.4082269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640013' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9110559' lon='-1.3699275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380443' timestamp='2007-05-20T10:19:29+01:00' user='nickw' visible='true' lat='50.9403613' lon='-1.3714376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254751' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.8995789' lon='-1.395693' />
-  <node id='30161105' timestamp='2007-06-10T18:13:39+01:00' visible='true' lat='50.970516' lon='-1.3561605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178429' timestamp='2007-02-04T18:26:17+00:00' user='Dean Earley' visible='true' lat='50.9877472' lon='-1.3506052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482296' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8950309' lon='-1.4250564' />
-  <node id='29464238' timestamp='2007-05-22T00:19:10+01:00' user='Dean Earley' visible='true' lat='50.9379389' lon='-1.4185749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091881' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.9216699' lon='-1.4224833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120336' timestamp='2007-10-29T08:15:56+00:00' user='nickw' visible='true' lat='50.9305812' lon='-1.4472472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961060' timestamp='2006-11-11T17:12:57+00:00' user='Dean Earley' visible='true' lat='50.9256094' lon='-1.3159434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601349' timestamp='2007-09-27T21:05:22+01:00' user='mike l' visible='true' lat='50.914005' lon='-1.5011144' />
-  <node id='29710908' timestamp='2007-05-28T14:29:56+01:00' visible='true' lat='50.9841907' lon='-1.3571628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706457' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9284703' lon='-1.3806541'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='30229565' timestamp='2007-06-12T00:14:38+01:00' user='nickw' visible='true' lat='50.9328782' lon='-1.354967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420707' timestamp='2007-05-22T00:20:05+01:00' user='Dean Earley' visible='true' lat='50.9336436' lon='-1.4051037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171758' timestamp='2007-05-16T23:48:01+01:00' user='nickw' visible='true' lat='50.9398897' lon='-1.3861907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388898' timestamp='2007-05-15T20:47:44+01:00' user='nickw' visible='true' lat='50.943537' lon='-1.3933323' />
-  <node id='28180216' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.962352' lon='-1.4257877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594887' timestamp='2006-08-04T11:57:55+01:00' user='nickw' visible='true' lat='50.9161061' lon='-1.4141729'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28179442' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9625024' lon='-1.4214408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372770' timestamp='2007-05-01T10:05:20+01:00' visible='true' lat='50.9320835' lon='-1.437892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90661630' timestamp='2007-10-28T21:46:42+00:00' user='Nick Dyer' visible='true' lat='50.9048753' lon='-1.409382' />
-  <node id='30780841' timestamp='2007-06-22T21:10:03+01:00' user='Steve Chilton' visible='true' lat='50.9072565' lon='-1.4117776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009025' timestamp='2007-05-12T15:28:42+01:00' user='nickw' visible='true' lat='50.9310546' lon='-1.3506927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278520' timestamp='2007-08-14T04:47:59+01:00' user='andrewpmk' visible='true' lat='50.9075227' lon='-1.3978418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856377' timestamp='2007-06-02T08:31:29+01:00' user='nickw' visible='true' lat='50.9493626' lon='-1.3946993'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91130466' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true' lat='50.928865' lon='-1.4294528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237226' timestamp='2007-04-29T19:42:00+01:00' user='Andy Street' visible='true' lat='50.8996371' lon='-1.356785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668165' timestamp='2007-01-04T21:05:54+00:00' user='nickw' visible='true' lat='50.988703' lon='-1.3991479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194411' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9469514' lon='-1.4375186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706134' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.907099' lon='-1.386202'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20102973' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9330523' lon='-1.362734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600439' timestamp='2006-12-16T10:13:54+00:00' user='nickw' visible='true' lat='50.9210438' lon='-1.4553905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998531' timestamp='2007-06-05T23:13:21+01:00' user='nickw' visible='true' lat='50.9630528' lon='-1.4505993'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325684' timestamp='2007-10-29T07:46:03+00:00' user='nickw' visible='true' lat='50.9189063' lon='-1.4153604' />
-  <node id='423279' timestamp='2007-09-25T18:47:49+01:00' user='mike l' visible='true' lat='50.9390002' lon='-1.3934797' />
-  <node id='26447395' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9114487' lon='-1.3847364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632195' timestamp='2007-05-26T19:20:56+01:00' visible='true' lat='50.9562716' lon='-1.3681705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831113' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9126706' lon='-1.4057769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160424212' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.9047805' lon='-1.4146333' />
-  <node id='13706022' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8912169' lon='-1.3933066' />
-  <node id='30161984' timestamp='2007-09-16T10:21:43+01:00' user='mike l' visible='true' lat='50.9780626' lon='-1.3774018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530607' timestamp='2007-04-05T14:21:34+01:00' user='Dean Earley' visible='true' lat='50.9307' lon='-1.39505' />
-  <node id='29815550' timestamp='2007-05-31T21:42:54+01:00' visible='true' lat='50.9884052' lon='-1.3578503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745482' timestamp='2006-09-03T01:40:47+01:00' user='Dean Earley' visible='true' lat='50.9717357' lon='-1.3769029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359711' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9693047' lon='-1.3510642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243544' timestamp='2007-04-29T20:24:26+01:00' user='Dean Earley' visible='true' lat='50.9384447' lon='-1.411217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973097' timestamp='2006-11-13T00:42:42+00:00' user='Dean Earley' visible='true' lat='50.901657' lon='-1.4087671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275696' timestamp='2006-11-25T23:51:14+00:00' user='nickw' visible='true' lat='50.9211218' lon='-1.4345154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298308' timestamp='2006-11-11T17:24:33+00:00' user='Dean Earley' visible='true' lat='50.948057' lon='-1.390593' />
-  <node id='25938547' timestamp='2007-08-12T23:07:49+01:00' user='Edward' visible='true' lat='50.9115342' lon='-1.3996579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677141' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8981713' lon='-1.4457345' />
-  <node id='254348' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9496039' lon='-1.4506014' />
-  <node id='91108691' timestamp='2007-10-29T07:48:42+00:00' user='nickw' visible='true' lat='50.9314968' lon='-1.4218873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639967' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.8999348' lon='-1.3790011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600601' timestamp='2007-10-15T14:19:22+01:00' user='alfabet' visible='true' lat='50.9943874' lon='-1.3997253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924291' timestamp='2007-01-06T14:47:54+00:00' user='nickw' visible='true' lat='50.9670433' lon='-1.3849188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27496135' timestamp='2007-04-20T23:53:12+01:00' user='Dean Earley' visible='true' lat='50.914839' lon='-1.3338976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247788' timestamp='2005-11-14T22:25:08+00:00' user='nickw' visible='true' lat='50.9323168' lon='-1.3951993' />
-  <node id='14726568' timestamp='2008-02-03T05:57:48+00:00' user='sladen' visible='true' lat='50.9139876' lon='-1.4011528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298250' timestamp='2007-01-06T14:30:55+00:00' user='Dean Earley' visible='true' lat='50.9825147' lon='-1.3663424' />
-  <node id='319619' timestamp='2007-04-05T14:21:34+01:00' user='Dean Earley' visible='true' lat='50.9184766' lon='-1.3976875' />
-  <node id='21613502' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9830069' lon='-1.3923607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814532' timestamp='2007-05-31T21:17:06+01:00' visible='true' lat='50.9879848' lon='-1.3559608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091830' timestamp='2006-11-25T23:51:22+00:00' user='nickw' visible='true' lat='50.9211188' lon='-1.4212456'>
-    <tag k='name' v='HANLEY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592377' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9123554' lon='-1.4368819' />
-  <node id='29997545' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0018629' lon='-1.3485238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632426' timestamp='2007-05-26T19:26:45+01:00' visible='true' lat='50.9571039' lon='-1.3679684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925987' timestamp='2007-06-03T20:53:27+01:00' visible='true' lat='50.9800356' lon='-1.3648244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964122' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.922426' lon='-1.3762298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422988' timestamp='2007-04-05T14:21:34+01:00' user='Dean Earley' visible='true' lat='50.9443' lon='-1.39799' />
-  <node id='29549376' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9635211' lon='-1.3748748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956689' timestamp='2007-06-26T23:49:19+01:00' user='nickw' visible='true' lat='50.9305388' lon='-1.3481218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815070' timestamp='2007-05-31T21:31:01+01:00' visible='true' lat='50.9883637' lon='-1.3547337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296298' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9828015' lon='-1.3583116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817081' timestamp='2007-05-31T22:18:47+01:00' visible='true' lat='50.9859892' lon='-1.3652089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161122' timestamp='2007-06-10T18:13:44+01:00' visible='true' lat='50.9737527' lon='-1.355522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194436' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9475972' lon='-1.4326534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704458' timestamp='2007-05-28T10:36:48+01:00' visible='true' lat='50.9814988' lon='-1.356706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021832' timestamp='2007-04-03T00:53:16+01:00' user='Ben' visible='true' lat='50.9497524' lon='-1.3744855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931352' timestamp='2007-06-03T22:43:04+01:00' visible='true' lat='50.9939752' lon='-1.3736479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510066' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.9014094' lon='-1.4157582' />
-  <node id='15028826' timestamp='2006-09-08T23:06:41+01:00' user='Dean Earley' visible='true' lat='50.9256358' lon='-1.3627301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178433' timestamp='2006-11-22T18:12:44+00:00' user='southglos' visible='true' lat='50.9969287' lon='-1.3562472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507755' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9317412' lon='-1.4006686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903887' timestamp='2007-05-10T01:06:37+01:00' user='LivingWithDragons' visible='true' lat='50.9808509' lon='-1.4434305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223569' timestamp='2007-06-11T21:58:16+01:00' visible='true' lat='50.9840614' lon='-1.3529763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474655' timestamp='2007-04-05T14:21:35+01:00' user='Dean Earley' visible='true' lat='50.9337242' lon='-1.3494009' />
-  <node id='29505736' timestamp='2007-05-22T19:28:32+01:00' visible='true' lat='50.9907367' lon='-1.3531471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249893' timestamp='2007-04-29T21:41:44+01:00' visible='true' lat='50.9137533' lon='-1.4450715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796778' timestamp='2007-05-30T22:22:05+01:00' user='nickw' visible='true' lat='50.9144601' lon='-1.3518662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924238' timestamp='2007-05-02T00:35:39+01:00' visible='true' lat='50.9611486' lon='-1.3743147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254922' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.9089854' lon='-1.4087238' />
-  <node id='21636779' timestamp='2007-04-29T02:33:53+01:00' user='Dean Earley' visible='true' lat='50.9478294' lon='-1.4074803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596763' timestamp='2006-09-04T01:04:08+01:00' user='Dean Earley' visible='true' lat='50.9145795' lon='-1.3559895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325005' timestamp='2006-11-11T17:24:33+00:00' user='Dean Earley' visible='true' lat='50.956995' lon='-1.4140193' />
-  <node id='16963789' timestamp='2006-09-28T23:48:07+01:00' user='nickw' visible='true' lat='50.9418771' lon='-1.4094642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549394' timestamp='2007-05-24T11:22:53+01:00' visible='true' lat='50.9630235' lon='-1.3767265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249941' timestamp='2007-04-29T21:41:52+01:00' visible='true' lat='50.9144998' lon='-1.4450194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383141' timestamp='2007-04-05T14:21:35+01:00' user='Dean Earley' visible='true' lat='50.9257' lon='-1.41121' />
-  <node id='310889' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.9206867' lon='-1.400156' />
-  <node id='28237243' timestamp='2007-04-29T20:03:08+01:00' user='Andy Street' visible='true' lat='50.905353' lon='-1.3522921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244052' timestamp='2007-04-29T20:34:57+01:00' user='Andy Street' visible='true' lat='50.9051453' lon='-1.345679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227240' timestamp='2006-10-23T20:52:58+01:00' user='nickw' visible='true' lat='50.9226779' lon='-1.4103313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021798' timestamp='2007-04-03T00:52:58+01:00' user='Ben' visible='true' lat='50.9361445' lon='-1.4001558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468540' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9127905' lon='-1.4434467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124368' timestamp='2007-06-09T19:43:09+01:00' user='nickw' visible='true' lat='50.9247751' lon='-1.351947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418534' timestamp='2007-05-24T10:51:06+01:00' visible='true' lat='50.9674139' lon='-1.3661353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689147' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.941031' lon='-1.3760599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325646' timestamp='2007-04-05T14:21:35+01:00' user='Dean Earley' visible='true' lat='50.9137' lon='-1.41329' />
-  <node id='254652' timestamp='2006-09-04T01:04:08+01:00' user='Dean Earley' visible='true' lat='50.9664034' lon='-1.3872809' />
-  <node id='90677160' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8956216' lon='-1.4466014' />
-  <node id='469891' timestamp='2007-04-05T14:21:35+01:00' user='Dean Earley' visible='true' lat='50.9195' lon='-1.42069' />
-  <node id='91110493' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9287484' lon='-1.434006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122342988' timestamp='2007-11-18T19:15:52+00:00' user='nickw' visible='true' lat='50.9187951' lon='-1.4383074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689105' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9401859' lon='-1.3798545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507738' timestamp='2007-03-24T16:33:42+00:00' user='Dean Earley' visible='true' lat='50.9312782' lon='-1.3976405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240338' timestamp='2007-04-29T20:02:57+01:00' user='Andy Street' visible='true' lat='50.9070529' lon='-1.3509119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461233' timestamp='2007-05-21T23:43:15+01:00' user='nickw' visible='true' lat='50.9039478' lon='-1.3942171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745439' timestamp='2007-10-31T15:18:30+00:00' user='Dean Earley' visible='true' lat='50.9670135' lon='-1.3508905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928527' timestamp='2007-06-03T21:49:36+01:00' visible='true' lat='50.9848881' lon='-1.36287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675805' timestamp='2007-02-06T01:03:08+00:00' user='Dean Earley' visible='true' lat='50.9094357' lon='-1.4466495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222217' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9132074' lon='-1.4912737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282079' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9756564' lon='-1.4056366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549379' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9646972' lon='-1.3734001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29387396' timestamp='2007-05-24T10:51:05+01:00' visible='true' lat='50.9644976' lon='-1.3648337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237239' timestamp='2007-04-29T19:42:04+01:00' user='Andy Street' visible='true' lat='50.9029285' lon='-1.3554844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212573' timestamp='2007-12-08T20:16:58+00:00' user='nickw' visible='true' lat='50.9444275' lon='-1.447071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924189' timestamp='2007-01-06T14:37:54+00:00' user='nickw' visible='true' lat='50.9429869' lon='-1.3735302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706423' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.922135' lon='-1.380004'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29816307' timestamp='2007-05-31T21:52:27+01:00' visible='true' lat='50.9912065' lon='-1.354663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700432' timestamp='2007-04-05T14:21:35+01:00' user='Dean Earley' visible='true' lat='50.927312' lon='-1.3860984' />
-  <node id='30089061' timestamp='2007-06-08T18:11:58+01:00' visible='true' lat='50.9653276' lon='-1.3752678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29944861' timestamp='2007-06-04T15:25:25+01:00' visible='true' lat='50.9835022' lon='-1.360242'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794903' timestamp='2007-05-30T21:44:19+01:00' user='nickw' visible='true' lat='50.917815' lon='-1.3531997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482479' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8966766' lon='-1.4282321' />
-  <node id='27561982' timestamp='2007-04-23T21:55:04+01:00' user='waschbaer' visible='true' lat='50.9053239' lon='-1.4139696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157188682' timestamp='2007-12-08T19:58:39+00:00' user='nickw' visible='true' lat='50.9380048' lon='-1.4492998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621427' timestamp='2007-05-26T11:42:39+01:00' visible='true' lat='50.9676401' lon='-1.3725441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468578' timestamp='2007-05-22T01:07:02+01:00' user='Dean Earley' visible='true' lat='50.916234' lon='-1.4553228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243674' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9396959' lon='-1.4147334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999077' timestamp='2007-06-05T23:29:06+01:00' user='nickw' visible='true' lat='50.9895593' lon='-1.4320636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896421' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9661302' lon='-1.3863437'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329525' timestamp='2007-04-05T14:21:35+01:00' user='Dean Earley' visible='true' lat='50.9664' lon='-1.4243' />
-  <node id='13704762' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.886474' lon='-1.414874'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13706656' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.909372' lon='-1.374568'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20957234' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.912695' lon='-1.4221822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506805' timestamp='2007-06-17T22:03:33+01:00' visible='true' lat='50.9781951' lon='-1.3607768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976688' timestamp='2007-04-29T20:59:45+01:00' user='Dean Earley' visible='true' lat='50.9311848' lon='-1.4300822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008943' timestamp='2007-05-12T15:26:03+01:00' user='nickw' visible='true' lat='50.931089' lon='-1.3497441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816560' timestamp='2007-05-31T22:04:28+01:00' visible='true' lat='50.9913326' lon='-1.3542467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530536' timestamp='2007-05-23T13:04:51+01:00' visible='true' lat='50.981444' lon='-1.3550065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971187' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9058223' lon='-1.4005996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967608' timestamp='2006-11-12T20:47:05+00:00' user='Dean Earley' visible='true' lat='50.9183034' lon='-1.3934754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544336' timestamp='2007-04-05T14:21:36+01:00' user='Dean Earley' visible='true' lat='50.9382' lon='-1.37245' />
-  <node id='13706675' timestamp='2007-04-05T14:21:36+01:00' user='Dean Earley' visible='true' lat='50.9041314' lon='-1.3839204' />
-  <node id='28339168' timestamp='2007-06-02T19:55:01+01:00' visible='true' lat='50.9691053' lon='-1.3610195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930465' timestamp='2007-06-03T22:22:08+01:00' visible='true' lat='50.994493' lon='-1.3526028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239020' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9074383' lon='-1.4165152' />
-  <node id='20134844' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9285503' lon='-1.3534504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816401' timestamp='2007-05-31T21:56:28+01:00' visible='true' lat='50.9888273' lon='-1.3551003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668336' timestamp='2007-01-04T21:06:42+00:00' user='nickw' visible='true' lat='50.9843134' lon='-1.3898701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984744' timestamp='2007-05-22T00:20:06+01:00' user='Dean Earley' visible='true' lat='50.9496283' lon='-1.4015045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254858' timestamp='2007-05-20T00:17:24+01:00' user='Dean Earley' visible='true' lat='50.9173276' lon='-1.4568934' />
-  <node id='20831102' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9114287' lon='-1.4066753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124378' timestamp='2007-06-09T19:43:17+01:00' user='nickw' visible='true' lat='50.9253574' lon='-1.3504769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110855' timestamp='2007-02-18T20:19:16+00:00' visible='true' lat='50.9358282' lon='-1.3644291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636730' timestamp='2007-03-24T16:44:15+00:00' user='Dean Earley' visible='true' lat='50.9435652' lon='-1.3962656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945413' timestamp='2007-03-31T20:34:38+01:00' user='nickw' visible='true' lat='50.90067' lon='-1.3530078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303108' timestamp='2007-01-19T18:20:22+00:00' user='Dean Earley' visible='true' lat='50.9505391' lon='-1.3694308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892124' timestamp='2006-10-27T00:58:30+01:00' user='Dean Earley' visible='true' lat='50.9117026' lon='-1.3838636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026820' timestamp='2007-05-13T10:10:59+01:00' user='nickw' visible='true' lat='50.9200948' lon='-1.3992249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296291' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9776274' lon='-1.3635039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504761' timestamp='2007-06-17T21:50:35+01:00' visible='true' lat='50.9808745' lon='-1.3567826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508364' timestamp='2007-06-17T22:14:19+01:00' visible='true' lat='50.9756826' lon='-1.3557273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816418' timestamp='2007-05-31T21:58:45+01:00' visible='true' lat='50.9895575' lon='-1.3564115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157187230' timestamp='2007-12-08T19:57:33+00:00' user='nickw' visible='true' lat='50.937644' lon='-1.4499244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675814' timestamp='2007-05-22T01:08:01+01:00' user='Dean Earley' visible='true' lat='50.9038157' lon='-1.4174444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001618' timestamp='2007-05-12T09:51:45+01:00' user='nickw' visible='true' lat='50.9396153' lon='-1.3632409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613472' timestamp='2006-12-16T17:46:58+00:00' user='David Currie' visible='true' lat='50.9739729' lon='-1.3957146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512887' timestamp='2007-04-21T21:50:14+01:00' user='Dean Earley' visible='true' lat='50.9607901' lon='-1.3500794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953367' timestamp='2007-06-04T21:16:58+01:00' visible='true' lat='51.0009151' lon='-1.3682265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372728' timestamp='2007-05-01T10:05:14+01:00' visible='true' lat='50.9323544' lon='-1.4417052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730498' timestamp='2007-05-28T19:36:30+01:00' visible='true' lat='50.9709858' lon='-1.3639609'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639990' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9010977' lon='-1.375412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998352' timestamp='2007-06-05T23:05:25+01:00' user='nickw' visible='true' lat='50.9791661' lon='-1.4291432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209139' timestamp='2007-12-08T20:14:57+00:00' user='nickw' visible='true' lat='50.9413418' lon='-1.4479551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162639' timestamp='2008-01-04T19:29:41+00:00' user='nickw' visible='true' lat='50.9725283' lon='-1.3789442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051789' timestamp='2007-10-26T17:11:21+01:00' user='Nick Dyer' visible='true' lat='50.9966143' lon='-1.4653308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254952' timestamp='2006-09-04T02:08:07+01:00' user='Dean Earley' visible='true' lat='50.9518439' lon='-1.4209458' />
-  <node id='28230875' timestamp='2007-04-29T18:42:49+01:00' user='nickw' visible='true' lat='50.9160472' lon='-1.3523265'>
-    <tag k='name' v='ALUM WY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581834' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9123229' lon='-1.4508981' />
-  <node id='122320971' timestamp='2007-12-10T20:57:27+00:00' user='sladen' visible='true' lat='50.9124712' lon='-1.4347091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269150' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.9995007' lon='-1.3349229' />
-  <node id='29511214' timestamp='2007-06-10T18:25:33+01:00' visible='true' lat='50.9743101' lon='-1.3560203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423545' timestamp='2007-12-14T21:35:47+00:00' user='nickw' visible='true' lat='50.93073' lon='-1.443319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278554' timestamp='2007-08-14T04:48:01+01:00' user='andrewpmk' visible='true' lat='50.9077206' lon='-1.3957665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162624' timestamp='2008-01-04T19:29:39+00:00' user='nickw' visible='true' lat='50.9720968' lon='-1.380017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661189' timestamp='2007-04-05T14:21:36+01:00' user='Dean Earley' visible='true' lat='50.9144687' lon='-1.369905' />
-  <node id='329478' timestamp='2007-04-05T14:21:36+01:00' user='Dean Earley' visible='true' lat='50.9378' lon='-1.37039' />
-  <node id='90577041' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9181942' lon='-1.4710168' />
-  <node id='48958687' timestamp='2007-09-10T23:55:15+01:00' visible='true' lat='50.9044335' lon='-1.4069925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325035' timestamp='2006-11-11T17:24:40+00:00' user='Dean Earley' visible='true' lat='50.9572303' lon='-1.4499722' />
-  <node id='28243586' timestamp='2007-04-29T20:24:55+01:00' user='Dean Earley' visible='true' lat='50.9360539' lon='-1.4126228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595031' timestamp='2006-08-04T11:59:52+01:00' user='nickw' visible='true' lat='50.9162702' lon='-1.4117744'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='388883' timestamp='2007-04-05T14:21:36+01:00' user='Dean Earley' visible='true' lat='50.9401249' lon='-1.3950589' />
-  <node id='26447522' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.908179' lon='-1.3902872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931358' timestamp='2007-06-03T22:43:05+01:00' visible='true' lat='50.9944165' lon='-1.3734435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122324299' timestamp='2007-11-18T19:05:23+00:00' user='nickw' visible='true' lat='50.9137444' lon='-1.4366237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632814' timestamp='2007-05-26T20:06:36+01:00' visible='true' lat='50.9625238' lon='-1.3671061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924109' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9399231' lon='-1.3707141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957217' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9168265' lon='-1.4199529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675850' timestamp='2007-04-05T14:21:36+01:00' user='Dean Earley' visible='true' lat='50.9311806' lon='-1.3606192' />
-  <node id='29026782' timestamp='2007-05-13T10:10:56+01:00' user='nickw' visible='true' lat='50.9178843' lon='-1.4071518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324337' timestamp='2007-01-28T00:55:28+00:00' visible='true' lat='50.9224033' lon='-1.3998556' />
-  <node id='28342535' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9066153' lon='-1.3690995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21677592' timestamp='2006-12-22T14:24:05+00:00' user='nickw' visible='true' lat='50.9046454' lon='-1.4032319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684699' timestamp='2007-10-30T17:26:33+00:00' user='Nick Dyer' visible='true' lat='50.9621061' lon='-1.4232519' />
-  <node id='29998932' timestamp='2007-06-05T23:28:51+01:00' user='nickw' visible='true' lat='50.9832061' lon='-1.4376263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29839187' timestamp='2007-06-01T20:53:34+01:00' visible='true' lat='50.9855922' lon='-1.3649929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874641' timestamp='2007-06-02T19:54:59+01:00' visible='true' lat='50.9690161' lon='-1.3609226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310975' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9702572' lon='-1.4317361' />
-  <node id='518794' timestamp='2007-04-05T14:21:37+01:00' user='Dean Earley' visible='true' lat='50.9241' lon='-1.38117' />
-  <node id='19035794' timestamp='2007-04-03T00:54:01+01:00' user='Ben' visible='true' lat='50.9370286' lon='-1.3956132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160335537' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.9451033' lon='-1.4798067' />
-  <node id='13704777' timestamp='2006-08-26T00:06:11+01:00' user='dmgroom' visible='true' lat='50.8889878' lon='-1.4174745' />
-  <node id='24668250' timestamp='2007-01-04T21:06:31+00:00' user='nickw' visible='true' lat='50.9896847' lon='-1.4100448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348151' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9333352' lon='-1.3687556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704522' timestamp='2007-05-28T10:40:38+01:00' visible='true' lat='50.9809248' lon='-1.3566808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668302' timestamp='2007-01-04T21:06:39+00:00' user='nickw' visible='true' lat='50.988349' lon='-1.4048383'>
-    <tag k='name' v='MERLIN WY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303005' timestamp='2007-01-19T18:15:19+00:00' user='Dean Earley' visible='true' lat='50.9508594' lon='-1.3645784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026667' timestamp='2007-05-13T10:02:49+01:00' user='nickw' visible='true' lat='50.92692' lon='-1.3995031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254412' timestamp='2008-02-03T06:03:31+00:00' user='sladen' visible='true' lat='50.9097015' lon='-1.4049551' />
-  <node id='27021768' timestamp='2007-05-22T00:20:06+01:00' user='Dean Earley' visible='true' lat='50.937958' lon='-1.4021677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122313892' timestamp='2007-11-18T18:59:19+00:00' user='nickw' visible='true' lat='50.9129772' lon='-1.4324417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722367' timestamp='2006-10-06T23:46:15+01:00' user='Dean Earley' visible='true' lat='50.9508091' lon='-1.4020639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931396' timestamp='2007-06-03T22:43:14+01:00' visible='true' lat='50.9949181' lon='-1.37326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431986' timestamp='2007-06-16T16:26:06+01:00' visible='true' lat='50.9854613' lon='-1.3513986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932480' timestamp='2007-05-10T21:06:15+01:00' user='Dean Earley' visible='true' lat='50.9639274' lon='-1.4505727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160412681' timestamp='2007-12-10T21:00:29+00:00' user='sladen' visible='true' lat='50.9118921' lon='-1.4250103' />
-  <node id='160235357' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9071677' lon='-1.3954266' />
-  <node id='254545' timestamp='2006-09-08T23:08:03+01:00' user='Dean Earley' visible='true' lat='50.9328417' lon='-1.3711124' />
-  <node id='28830654' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9235697' lon='-1.3700459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252895' timestamp='2007-04-29T22:00:34+01:00' visible='true' lat='50.9472655' lon='-1.4312613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160420523' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.906978' lon='-1.4193454' />
-  <node id='25340634' timestamp='2007-05-02T14:53:18+01:00' visible='true' lat='50.9640719' lon='-1.3616142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071428' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9241955' lon='-1.3549322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601337' timestamp='2006-09-01T00:16:06+01:00' user='nickw' visible='true' lat='50.8924484' lon='-1.5246105'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29931373' timestamp='2007-06-03T22:43:08+01:00' visible='true' lat='50.9946255' lon='-1.3724263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134147' timestamp='2007-05-15T20:47:34+01:00' user='nickw' visible='true' lat='50.9410039' lon='-1.3913028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254968' timestamp='2006-09-02T13:46:24+01:00' user='Dean Earley' visible='true' lat='50.9432188' lon='-1.4172521' />
-  <node id='21092046' timestamp='2006-11-19T12:29:37+00:00' user='nickw' visible='true' lat='50.9408998' lon='-1.4346484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962266' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.955534' lon='-1.3648987' />
-  <node id='29008406' timestamp='2007-05-12T15:11:59+01:00' user='nickw' visible='true' lat='50.9259175' lon='-1.3472806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728538' timestamp='2007-03-23T22:52:48+00:00' user='nickw' visible='true' lat='50.9003967' lon='-1.3666525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632180' timestamp='2007-05-26T19:20:28+01:00' visible='true' lat='50.9572868' lon='-1.3689863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225810' timestamp='2007-06-11T22:16:48+01:00' visible='true' lat='50.9824692' lon='-1.3559274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87877506' timestamp='2007-10-26T13:40:01+01:00' user='Nick Dyer' visible='true' lat='50.9282577' lon='-1.4302774' />
-  <node id='402750' timestamp='2007-04-05T14:21:37+01:00' user='Dean Earley' visible='true' lat='50.9152' lon='-1.40994' />
-  <node id='29026797' timestamp='2007-05-13T10:10:57+01:00' user='nickw' visible='true' lat='50.9179845' lon='-1.4083438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705633' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8954935' lon='-1.4087789'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29928593' timestamp='2007-06-03T21:52:03+01:00' visible='true' lat='50.9785552' lon='-1.36168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471869' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9379063' lon='-1.3693542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='46710314' timestamp='2007-11-19T13:55:31+00:00' user='nickw' visible='true' lat='50.940667' lon='-1.4497002'>
-    <tag k='amenity' v='fuel' />
-    <tag k='name' v='Sainsbury' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='169423559' timestamp='2007-12-14T21:35:47+00:00' user='nickw' visible='true' lat='50.9337271' lon='-1.4418861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642810' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9476755' lon='-1.3650914' />
-  <node id='21579413' timestamp='2006-12-14T13:52:56+00:00' user='David Currie' visible='true' lat='50.9778447' lon='-1.4034371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464257' timestamp='2007-05-22T00:19:14+01:00' user='Dean Earley' visible='true' lat='50.9371999' lon='-1.4083906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339124' timestamp='2007-04-30T20:39:18+01:00' visible='true' lat='50.9675556' lon='-1.3619847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583033' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9386068' lon='-1.4341719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657798' timestamp='2007-04-05T14:21:37+01:00' user='Dean Earley' visible='true' lat='50.9087976' lon='-1.4049024' />
-  <node id='48965793' timestamp='2007-09-11T00:11:37+01:00' visible='true' lat='50.8986202' lon='-1.4052341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325680' timestamp='2007-04-29T21:18:23+01:00' user='Dean Earley' visible='true' lat='50.9215784' lon='-1.4176' />
-  <node id='325209' timestamp='2005-12-16T23:03:04+00:00' user='80n' visible='true' lat='50.9412306' lon='-1.360819' />
-  <node id='13706645' timestamp='2007-04-05T14:21:37+01:00' user='Dean Earley' visible='true' lat='50.9157026' lon='-1.3752191' />
-  <node id='25282124' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9783624' lon='-1.4066892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028845' timestamp='2006-09-08T23:06:50+01:00' user='Dean Earley' visible='true' lat='50.927811' lon='-1.3606926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239051' timestamp='2007-10-25T21:08:43+01:00' user='Nick Dyer' visible='true' lat='50.9357583' lon='-1.4472916' />
-  <node id='66582039' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9311248' lon='-1.4523064' />
-  <node id='25282147' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9753282' lon='-1.4092641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984695' timestamp='2007-01-10T00:11:06+00:00' user='nickw' visible='true' lat='50.9452853' lon='-1.3849831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194904' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9408392' lon='-1.4071253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976677' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9349588' lon='-1.4306381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87823412' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8956234' lon='-1.4074313' />
-  <node id='18398436' timestamp='2006-12-16T16:25:57+00:00' user='Dean Earley' visible='true' lat='50.9612916' lon='-1.3965789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874082' timestamp='2007-05-08T14:50:39+01:00' visible='true' lat='50.9378769' lon='-1.4435022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173898' timestamp='2007-04-29T01:03:02+01:00' visible='true' lat='50.9421347' lon='-1.4325284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162417' timestamp='2008-01-04T19:28:06+00:00' user='nickw' visible='true' lat='50.9718278' lon='-1.3823215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183735' timestamp='2007-04-29T02:25:38+01:00' user='Dean Earley' visible='true' lat='50.9505307' lon='-1.4103956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244295' timestamp='2007-04-29T20:36:34+01:00' user='Andy Street' visible='true' lat='50.904332' lon='-1.3472895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249847' timestamp='2007-04-29T21:41:37+01:00' visible='true' lat='50.9195995' lon='-1.4410718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269928' timestamp='2007-04-29T01:53:39+01:00' user='Dean Earley' visible='true' lat='50.9565341' lon='-1.4095914' />
-  <node id='29132910' timestamp='2007-05-15T20:32:06+01:00' user='nickw' visible='true' lat='50.9303661' lon='-1.3768688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746397' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9967557' lon='-1.3365775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178478' timestamp='2006-11-22T18:19:04+00:00' user='southglos' visible='true' lat='50.9952042' lon='-1.3576228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706626' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9155828' lon='-1.3854918'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='271356' timestamp='2007-12-10T21:00:43+00:00' user='sladen' visible='true' lat='50.9114862' lon='-1.4284006'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Freemantle' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='28247347' timestamp='2007-04-29T21:18:22+01:00' user='Dean Earley' visible='true' lat='50.9230006' lon='-1.4188819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727674' timestamp='2007-03-25T18:42:37+01:00' user='Dean Earley' visible='true' lat='50.9013666' lon='-1.3735455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162088' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9704266' lon='-1.3824904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124216' timestamp='2007-06-09T19:35:53+01:00' user='nickw' visible='true' lat='50.9246342' lon='-1.3483164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632861' timestamp='2007-05-26T20:07:39+01:00' visible='true' lat='50.9671484' lon='-1.3619573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464242' timestamp='2007-05-22T00:19:10+01:00' user='Dean Earley' visible='true' lat='50.9344153' lon='-1.4164198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291057' timestamp='2007-06-13T09:33:01+01:00' visible='true' lat='50.9662608' lon='-1.3849066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147922' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.9086624' lon='-1.4033415' />
-  <node id='90577058' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9071815' lon='-1.4238957' />
-  <node id='13071248' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9220262' lon='-1.3587812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201640652' timestamp='2008-01-01T18:33:11+00:00' user='Milliams' visible='true' lat='50.9511309' lon='-1.3619242' />
-  <node id='29997510' timestamp='2007-06-05T22:43:52+01:00' user='nickw' visible='true' lat='51.0078135' lon='-1.3613975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957191' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.9156595' lon='-1.4171623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956606' timestamp='2007-06-26T23:45:01+01:00' user='nickw' visible='true' lat='50.9296967' lon='-1.3486532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157204136' timestamp='2007-12-08T20:11:11+00:00' user='nickw' visible='true' lat='50.9435387' lon='-1.4462863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87241480' timestamp='2007-10-25T21:07:37+01:00' user='Nick Dyer' visible='true' lat='50.9325885' lon='-1.4465448' />
-  <node id='160183643' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9011759' lon='-1.3813504' />
-  <node id='28372740' timestamp='2007-05-01T10:05:16+01:00' visible='true' lat='50.9284161' lon='-1.4392672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256863' timestamp='2007-06-12T20:38:09+01:00' visible='true' lat='50.9793401' lon='-1.3569886'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18393860' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9148469' lon='-1.4023779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689135' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9396476' lon='-1.3870264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971149' timestamp='2007-03-25T19:25:23+01:00' user='Dean Earley' visible='true' lat='50.9080555' lon='-1.3952603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997566' timestamp='2007-06-05T22:44:01+01:00' user='nickw' visible='true' lat='50.9997125' lon='-1.3524972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764424' timestamp='2007-05-30T21:37:53+01:00' user='nickw' visible='true' lat='50.9214334' lon='-1.3640237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874152' timestamp='2007-06-02T19:43:17+01:00' visible='true' lat='50.9593918' lon='-1.3584778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194840' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.9453108' lon='-1.4080952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142614229' timestamp='2007-11-29T22:27:22+00:00' user='nickw' visible='true' lat='50.9094648' lon='-1.4193074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435842' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9356145' lon='-1.4331248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962309' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9580156' lon='-1.3656111' />
-  <node id='20972812' timestamp='2006-11-14T01:57:27+00:00' user='Dean Earley' visible='true' lat='50.9052491' lon='-1.3976928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239486' timestamp='2007-10-25T21:08:43+01:00' user='Nick Dyer' visible='true' lat='50.9363154' lon='-1.4476606' />
-  <node id='28342629' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9106115' lon='-1.3653447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25302626' timestamp='2007-01-19T18:06:00+00:00' user='Dean Earley' visible='true' lat='50.9736905' lon='-1.3676752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924079' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9316161' lon='-1.3839056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160359017' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9198846' lon='-1.4788948' />
-  <node id='28341795' timestamp='2007-04-30T21:49:02+01:00' user='nickw' visible='true' lat='50.9123527' lon='-1.361431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561794' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9254211' lon='-1.4361266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388917' timestamp='2007-04-05T14:21:38+01:00' user='Dean Earley' visible='true' lat='50.9457' lon='-1.4018528' />
-  <node id='26782576' timestamp='2007-08-14T04:48:36+01:00' user='andrewpmk' visible='true' lat='50.9071908' lon='-1.3977207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675796' timestamp='2007-02-06T01:03:07+00:00' user='Dean Earley' visible='true' lat='50.9114304' lon='-1.4440362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45160070' timestamp='2007-09-07T17:38:15+01:00' user='mike l' visible='true' lat='50.9436239' lon='-1.4341503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650797' timestamp='2007-04-05T14:21:38+01:00' user='Dean Earley' visible='true' lat='50.9161' lon='-1.40065' />
-  <node id='245146239' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9145342' lon='-1.4012815' />
-  <node id='28935761' timestamp='2007-05-11T00:50:48+01:00' visible='true' lat='50.9394922' lon='-1.4485473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249818' timestamp='2007-04-29T21:41:33+01:00' visible='true' lat='50.9208941' lon='-1.4440107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348730' timestamp='2006-10-16T21:59:55+01:00' user='nickw' visible='true' lat='50.9964164' lon='-1.4478809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123661' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9323216' lon='-1.4451687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254699' timestamp='2006-12-18T23:27:24+00:00' visible='true' lat='50.9199383' lon='-1.3947345' />
-  <node id='122344811' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true' lat='50.9190581' lon='-1.4370756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600588' timestamp='2006-12-16T11:37:37+00:00' user='David Currie' visible='true' lat='50.9858233' lon='-1.3991934'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263972' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9654379' lon='-1.3706301' />
-  <node id='28903790' timestamp='2007-10-16T11:34:26+01:00' user='Dean Earley' visible='true' lat='50.9516659' lon='-1.3623409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689176' timestamp='2006-12-23T10:22:27+00:00' user='nickw' visible='true' lat='50.9382205' lon='-1.3715849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935995' timestamp='2007-05-11T00:59:41+01:00' visible='true' lat='50.9409724' lon='-1.444372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431971' timestamp='2007-06-16T16:26:01+01:00' visible='true' lat='50.9836478' lon='-1.3530569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949887' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9929637' lon='-1.377251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927553' timestamp='2007-06-03T21:24:28+01:00' visible='true' lat='50.9817838' lon='-1.3693999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949942' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9950895' lon='-1.3856745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071385' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9270351' lon='-1.3588052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711864' timestamp='2007-05-28T14:55:45+01:00' visible='true' lat='50.9847777' lon='-1.3522849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127613' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.9367577' lon='-1.4354998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998056' timestamp='2007-06-05T23:00:20+01:00' user='nickw' visible='true' lat='50.9837939' lon='-1.41172'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903055' timestamp='2007-05-09T23:03:35+01:00' visible='true' lat='50.9422614' lon='-1.368925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114097643' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true' lat='50.9551961' lon='-1.3640164' />
-  <node id='25762128' timestamp='2007-02-10T22:56:22+00:00' user='nickw' visible='true' lat='50.9346626' lon='-1.3743377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781148' timestamp='2007-03-25T18:42:08+01:00' user='Dean Earley' visible='true' lat='50.9030637' lon='-1.3748113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071307' timestamp='2006-08-11T02:48:04+01:00' user='Dean Earley' visible='true' lat='50.9201481' lon='-1.3590149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133182' timestamp='2006-10-28T01:55:48+01:00' user='Dean Earley' visible='true' lat='50.9287697' lon='-1.3515548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419431' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9411851' lon='-1.3690326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980719' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9581596' lon='-1.3434107' />
-  <node id='325179' timestamp='2006-11-11T17:24:45+00:00' user='Dean Earley' visible='true' lat='50.9523924' lon='-1.4028798' />
-  <node id='30290743' timestamp='2007-06-13T09:23:59+01:00' visible='true' lat='50.9653183' lon='-1.3812613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924204' timestamp='2007-01-06T14:37:58+00:00' user='nickw' visible='true' lat='50.9452902' lon='-1.3713051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636820' timestamp='2007-04-29T02:33:39+01:00' user='Dean Earley' visible='true' lat='50.9507437' lon='-1.4127574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291042' timestamp='2007-06-13T09:32:56+01:00' visible='true' lat='50.967381' lon='-1.3840942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801367' timestamp='2007-03-04T19:32:14+00:00' user='Dean Earley' visible='true' lat='50.9058274' lon='-1.3752767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133163' timestamp='2006-10-28T01:55:44+01:00' user='Dean Earley' visible='true' lat='50.9278622' lon='-1.3517182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956632' timestamp='2007-06-26T23:45:05+01:00' user='nickw' visible='true' lat='50.9333966' lon='-1.3509876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972776' timestamp='2006-11-13T00:06:54+00:00' user='Dean Earley' visible='true' lat='50.902685' lon='-1.4112546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563359' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9292251' lon='-1.4004796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530517' timestamp='2007-04-05T14:21:39+01:00' user='Dean Earley' visible='true' lat='50.9488217' lon='-1.3717144' />
-  <node id='469878' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9131909' lon='-1.4432235' />
-  <node id='24668383' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9832361' lon='-1.3911868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163100' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.9722656' lon='-1.3878544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296276' timestamp='2007-01-19T09:52:14+00:00' user='Dean Earley' visible='true' lat='50.9762311' lon='-1.3648183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194870' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9426214' lon='-1.4126461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506823' timestamp='2007-06-17T22:03:35+01:00' visible='true' lat='50.9779572' lon='-1.3619955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133140' timestamp='2006-10-28T01:55:40+01:00' user='Dean Earley' visible='true' lat='50.927621' lon='-1.3529346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935716' timestamp='2007-05-11T00:47:40+01:00' visible='true' lat='50.9409745' lon='-1.4401579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127569' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.935199' lon='-1.4409383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244215' timestamp='2007-04-29T20:36:24+01:00' user='Andy Street' visible='true' lat='50.9028199' lon='-1.3535107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440795' timestamp='2007-02-18T21:25:15+00:00' visible='true' lat='50.9139034' lon='-1.386816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814528' timestamp='2007-05-31T21:17:05+01:00' visible='true' lat='50.9880092' lon='-1.3561808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689062' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.9295689' lon='-1.3950972'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='denomination' v='anglican' />
-    <tag k='name' v='Highfield Church' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163280' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.9704829' lon='-1.3888378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783107' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9488136' lon='-1.3512719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727696' timestamp='2007-03-23T22:38:14+00:00' user='nickw' visible='true' lat='50.902771' lon='-1.3556761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146246' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9155028' lon='-1.4025089' />
-  <node id='21091851' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9108098' lon='-1.4240661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956561' timestamp='2007-06-26T23:44:55+01:00' user='nickw' visible='true' lat='50.9265944' lon='-1.3513501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='212417579' timestamp='2008-01-09T09:30:17+00:00' user='hairywill' visible='true' lat='50.9326572' lon='-1.3707416'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Hop Inn' />
-    <tag k='created_by' v='Potlatch 0.6a' />
-  </node>
-  <node id='17721079' timestamp='2006-10-06T23:27:21+01:00' user='Dean Earley' visible='true' lat='50.9693821' lon='-1.3517724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700523' timestamp='2007-04-05T14:21:39+01:00' user='Dean Earley' visible='true' lat='50.928812' lon='-1.3666765' />
-  <node id='29000939' timestamp='2007-05-12T09:30:26+01:00' user='nickw' visible='true' lat='50.9197168' lon='-1.4090523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='36686480' timestamp='2007-08-28T23:32:21+01:00' visible='true' lat='50.9245865' lon='-1.3758363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962326' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9554367' lon='-1.3635254' />
-  <node id='29998578' timestamp='2007-06-05T23:13:54+01:00' user='nickw' visible='true' lat='50.959349' lon='-1.4492484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885365' timestamp='2006-08-23T01:17:11+01:00' user='dmgroom' visible='true' lat='50.8997969' lon='-1.4021646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000958' timestamp='2007-05-12T09:31:57+01:00' user='nickw' visible='true' lat='50.9186992' lon='-1.407756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21157480' timestamp='2007-12-10T19:21:49+00:00' user='sladen' visible='true' lat='50.9067293' lon='-1.4040612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388932' timestamp='2007-04-05T14:21:39+01:00' user='Dean Earley' visible='true' lat='50.9428' lon='-1.39507' />
-  <node id='29929863' timestamp='2007-06-03T22:13:30+01:00' visible='true' lat='50.97795' lon='-1.3688749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718258' timestamp='2007-08-08T01:32:12+01:00' visible='true' lat='50.937192' lon='-1.4453998' />
-  <node id='21636733' timestamp='2007-04-29T02:33:40+01:00' user='Dean Earley' visible='true' lat='50.9518189' lon='-1.4077665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904035' timestamp='2007-05-10T01:07:20+01:00' user='LivingWithDragons' visible='true' lat='50.9809733' lon='-1.4450022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249910' timestamp='2007-04-29T21:41:46+01:00' visible='true' lat='50.9149417' lon='-1.4515855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632107' timestamp='2007-05-26T19:18:42+01:00' visible='true' lat='50.9685967' lon='-1.3503463'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583074' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9375504' lon='-1.4345256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504267' timestamp='2007-06-17T21:38:11+01:00' visible='true' lat='50.9943933' lon='-1.3500231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583012' timestamp='2007-05-02T23:57:53+01:00' visible='true' lat='50.9395355' lon='-1.4325851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726178' timestamp='2007-01-28T00:07:09+00:00' visible='true' lat='50.9082779' lon='-1.3987616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254845' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9096462' lon='-1.4297138' />
-  <node id='24984665' timestamp='2007-04-29T02:33:55+01:00' user='Dean Earley' visible='true' lat='50.9473029' lon='-1.4091441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179517' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9545102' lon='-1.4018359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160253691' timestamp='2007-12-10T19:30:43+00:00' user='sladen' visible='true' lat='50.953674' lon='-1.3582877' />
-  <node id='28903921' timestamp='2007-10-16T11:34:26+01:00' user='Dean Earley' visible='true' lat='50.951214' lon='-1.3629894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575787' timestamp='2007-03-16T21:52:31+00:00' user='nickw' visible='true' lat='50.901245' lon='-1.3997196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409626' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9130827' lon='-1.4430776' />
-  <node id='28932446' timestamp='2007-05-10T21:06:00+01:00' user='Dean Earley' visible='true' lat='50.9634137' lon='-1.4595836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548663' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.9631709' lon='-1.3612021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504294' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='51.0004393' lon='-1.3440595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29389518' timestamp='2007-06-18T21:09:41+01:00' visible='true' lat='50.9697632' lon='-1.3554379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743144' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9310665' lon='-1.424876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='673877' timestamp='2006-08-08T23:26:32+01:00' user='Dean Earley' visible='true' lat='50.9503452' lon='-1.3696651' />
-  <node id='157176117' timestamp='2007-12-08T19:49:41+00:00' user='nickw' visible='true' lat='50.9400289' lon='-1.4497257'>
-    <tag k='amenity' v='library' />
-    <tag k='name' v='Lordshill Library' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830624' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9283118' lon='-1.3599706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141431' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9219084' lon='-1.4213398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705518' timestamp='2007-06-11T22:20:41+01:00' visible='true' lat='50.9833997' lon='-1.3527506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480565' timestamp='2007-01-27T23:23:08+00:00' visible='true' lat='50.9101836' lon='-1.3893413'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='18398756' timestamp='2006-10-17T23:14:31+01:00' user='nickw' visible='true' lat='50.9500384' lon='-1.4163033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325194' timestamp='2006-11-11T17:24:45+00:00' user='Dean Earley' visible='true' lat='50.9483863' lon='-1.3680313' />
-  <node id='27021715' timestamp='2007-04-03T00:50:50+01:00' user='Dean Earley' visible='true' lat='50.9195716' lon='-1.4486365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238991' timestamp='2007-04-09T15:39:34+01:00' user='avantman42' visible='true' lat='50.902015' lon='-1.4109073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816839' timestamp='2007-05-31T22:17:18+01:00' visible='true' lat='50.9867356' lon='-1.3648983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998073' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9856199' lon='-1.4125544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150458' timestamp='2008-02-03T06:15:39+00:00' user='sladen' visible='true' lat='50.9095121' lon='-1.4078562' />
-  <node id='13071333' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9198211' lon='-1.3612262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194885' timestamp='2007-06-02T11:56:17+01:00' visible='true' lat='50.9397769' lon='-1.4094503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133592' timestamp='2007-05-15T20:41:28+01:00' user='nickw' visible='true' lat='50.9347348' lon='-1.3732149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348700' timestamp='2006-10-16T21:59:52+01:00' user='nickw' visible='true' lat='50.9791845' lon='-1.4088445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92679907' timestamp='2007-10-31T12:25:01+00:00' user='Dean Earley' visible='true' lat='50.9607028' lon='-1.4249796' />
-  <node id='160213506' timestamp='2007-12-10T19:09:23+00:00' user='sladen' visible='true' lat='50.9225685' lon='-1.3874615' />
-  <node id='254395' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.9225393' lon='-1.3616735' />
-  <node id='29708027' timestamp='2007-05-28T12:04:05+01:00' visible='true' lat='50.9824519' lon='-1.3653608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48967840' timestamp='2007-12-10T21:06:05+00:00' user='sladen' visible='true' lat='50.904721' lon='-1.4167533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419457' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9404488' lon='-1.370909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707097' timestamp='2007-04-05T14:21:40+01:00' user='Dean Earley' visible='true' lat='50.8614844' lon='-1.3377812' />
-  <node id='29133027' timestamp='2007-05-15T20:36:39+01:00' user='nickw' visible='true' lat='50.9332866' lon='-1.3749119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727966' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9292355' lon='-1.3852244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310990' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9713003' lon='-1.438285' />
-  <node id='387828' timestamp='2007-04-05T14:21:40+01:00' user='Dean Earley' visible='true' lat='50.9323' lon='-1.38522' />
-  <node id='48884143' timestamp='2007-11-19T13:55:29+00:00' user='nickw' visible='true' lat='50.9407644' lon='-1.4490049'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='13706249' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9125314' lon='-1.3766497'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='14601352' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9168926' lon='-1.4946469'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='17721022' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9614125' lon='-1.3705497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668370' timestamp='2007-01-04T21:06:49+00:00' user='nickw' visible='true' lat='50.9900098' lon='-1.3978466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908458' timestamp='2006-07-18T10:20:49+01:00' user='nickw' visible='true' lat='50.936288' lon='-1.3668726' />
-  <node id='28194504' timestamp='2007-11-25T22:27:51+00:00' user='southglos' visible='true' lat='50.9474981' lon='-1.4063995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797901' timestamp='2007-09-13T21:06:04+01:00' user='mike l' visible='true' lat='50.9743736' lon='-1.4512427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089046' timestamp='2007-06-08T18:11:57+01:00' visible='true' lat='50.964677' lon='-1.3754087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325032' timestamp='2006-11-11T17:24:45+00:00' user='Dean Earley' visible='true' lat='50.9582639' lon='-1.4447038' />
-  <node id='675879' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.931233' lon='-1.3731298' />
-  <node id='29621204' timestamp='2007-06-18T21:09:42+01:00' visible='true' lat='50.9702834' lon='-1.3528814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342599' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9054252' lon='-1.3697154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160328499' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.944887' lon='-1.4845961' />
-  <node id='608164' timestamp='2007-04-05T14:21:40+01:00' user='Dean Earley' visible='true' lat='50.8965979' lon='-1.3625617' />
-  <node id='92684884' timestamp='2007-10-31T12:25:05+00:00' user='Dean Earley' visible='true' lat='50.9628806' lon='-1.421805' />
-  <node id='21636809' timestamp='2007-04-29T02:33:44+01:00' user='Dean Earley' visible='true' lat='50.9539304' lon='-1.4099411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398425' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9682566' lon='-1.396292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243510' timestamp='2007-04-29T20:24:01+01:00' user='Dean Earley' visible='true' lat='50.9389264' lon='-1.409096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469869' timestamp='2007-11-18T18:58:30+00:00' user='nickw' visible='true' lat='50.9134499' lon='-1.4281205' />
-  <node id='90660391' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.9033002' lon='-1.4100258' />
-  <node id='20976775' timestamp='2007-04-29T20:52:53+01:00' user='Dean Earley' visible='true' lat='50.9314763' lon='-1.4202144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92681274' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9616713' lon='-1.4254835' />
-  <node id='24949908' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9954146' lon='-1.3795556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780835' timestamp='2007-06-22T21:09:54+01:00' user='Steve Chilton' visible='true' lat='50.9077066' lon='-1.4117266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133197' timestamp='2006-10-28T01:55:51+01:00' user='Dean Earley' visible='true' lat='50.9290975' lon='-1.3510906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945404' timestamp='2007-03-31T20:34:36+01:00' user='nickw' visible='true' lat='50.9018728' lon='-1.3481603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324352' timestamp='2005-12-16T00:19:02+00:00' user='nickw' visible='true' lat='50.9140134' lon='-1.404705' />
-  <node id='387830' timestamp='2007-04-05T14:21:40+01:00' user='Dean Earley' visible='true' lat='50.9321' lon='-1.38453' />
-  <node id='13071368' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9190846' lon='-1.3695117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189061' timestamp='2006-11-22T23:51:57+00:00' user='crouchingbadger' visible='true' lat='50.9581866' lon='-1.4484753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130980' timestamp='2006-10-28T01:45:39+01:00' user='Dean Earley' visible='true' lat='50.9284257' lon='-1.3556425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160400474' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.914836' lon='-1.4522529' />
-  <node id='169435891' timestamp='2007-12-14T21:43:15+00:00' user='nickw' visible='true' lat='50.9370981' lon='-1.4316149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398368' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.957713' lon='-1.4209296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561539' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9213793' lon='-1.4307698'>
-    <tag k='name' v='VINCENT' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229584' timestamp='2007-06-12T00:14:41+01:00' user='nickw' visible='true' lat='50.933041' lon='-1.3536558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2417455' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9480378' lon='-1.3650914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418334' timestamp='2007-05-02T00:33:13+01:00' visible='true' lat='50.9666862' lon='-1.3616881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071342' timestamp='2006-08-11T02:48:09+01:00' user='Dean Earley' visible='true' lat='50.9176669' lon='-1.3642135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194859' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9441842' lon='-1.4081554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162242' timestamp='2008-01-04T19:26:28+00:00' user='nickw' visible='true' lat='50.972863' lon='-1.387909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924321' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9841308' lon='-1.3835281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668267' timestamp='2007-01-04T21:06:32+00:00' user='nickw' visible='true' lat='50.9906601' lon='-1.4084157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431960' timestamp='2007-06-17T22:38:18+01:00' visible='true' lat='50.9839642' lon='-1.350498'>
-    <tag k='amenity' v='restaurant' />
-    <tag k='name' v='Ham Farm Harvester' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815418' timestamp='2007-05-31T21:34:34+01:00' visible='true' lat='50.9874788' lon='-1.3533159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348703' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9816231' lon='-1.4127894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998548' timestamp='2007-06-05T23:13:24+01:00' user='nickw' visible='true' lat='50.9661058' lon='-1.4232626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108511' timestamp='2007-10-29T07:48:08+00:00' user='nickw' visible='true' lat='50.9322105' lon='-1.4209039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581804' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9193468' lon='-1.4470872' />
-  <node id='29002846' timestamp='2007-05-12T10:03:22+01:00' user='nickw' visible='true' lat='50.93867' lon='-1.3987782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518783' timestamp='2007-04-05T14:21:41+01:00' user='Dean Earley' visible='true' lat='50.9196582' lon='-1.3901949' />
-  <node id='29533956' timestamp='2007-06-12T20:07:45+01:00' visible='true' lat='50.9781411' lon='-1.3493721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601367' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9202041' lon='-1.4761074'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29135241' timestamp='2007-05-15T20:55:59+01:00' user='nickw' visible='true' lat='50.9442054' lon='-1.3836094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149885' timestamp='2008-02-03T06:12:39+00:00' user='sladen' visible='true' lat='50.9090088' lon='-1.4030325' />
-  <node id='154770236' timestamp='2007-12-07T13:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9605528' lon='-1.4267144' />
-  <node id='15740479' timestamp='2006-09-16T19:31:31+01:00' user='nickw' visible='true' lat='50.9912465' lon='-1.3483382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298297' timestamp='2007-04-03T00:53:48+01:00' user='Ben' visible='true' lat='50.9494137' lon='-1.3977841' />
-  <node id='13707052' timestamp='2007-04-05T14:21:41+01:00' user='Dean Earley' visible='true' lat='50.8655781' lon='-1.3442423' />
-  <node id='24984779' timestamp='2007-01-10T00:14:57+00:00' user='nickw' visible='true' lat='50.9411795' lon='-1.3895823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161371' timestamp='2007-06-10T18:25:29+01:00' visible='true' lat='50.9742596' lon='-1.3678192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957208' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9183042' lon='-1.4237528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956621' timestamp='2007-06-26T23:45:04+01:00' user='nickw' visible='true' lat='50.9280751' lon='-1.3500439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225259' timestamp='2007-06-11T22:10:27+01:00' visible='true' lat='50.9822953' lon='-1.3559926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815647' timestamp='2007-05-31T21:47:58+01:00' visible='true' lat='50.9913194' lon='-1.3557963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461214' timestamp='2007-05-21T23:43:08+01:00' user='nickw' visible='true' lat='50.9070702' lon='-1.3968935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973116' timestamp='2007-12-10T21:07:19+00:00' user='sladen' visible='true' lat='50.9048022' lon='-1.412848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600674' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true' lat='50.9765057' lon='-1.4055987'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249848' timestamp='2007-04-29T21:41:37+01:00' visible='true' lat='50.919404' lon='-1.4408778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071359' timestamp='2006-08-11T02:48:10+01:00' user='Dean Earley' visible='true' lat='50.9177697' lon='-1.3679948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636922' timestamp='2007-06-01T16:41:15+01:00' user='Dean Earley' visible='true' lat='50.9166855' lon='-1.430469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073622' timestamp='2007-04-05T14:21:41+01:00' user='Dean Earley' visible='true' lat='50.9326358' lon='-1.3939125' />
-  <node id='20110906' timestamp='2006-10-27T23:39:32+01:00' user='Dean Earley' visible='true' lat='50.9336114' lon='-1.3703901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157181911' timestamp='2007-12-08T19:54:07+00:00' user='nickw' visible='true' lat='50.9370118' lon='-1.4521693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480588' timestamp='2007-01-27T23:26:12+00:00' visible='true' lat='50.9096523' lon='-1.3902397'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28252966' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.9443953' lon='-1.426109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773044' timestamp='2007-04-03T00:52:06+01:00' user='Dean Earley' visible='true' lat='50.9209778' lon='-1.4470956' />
-  <node id='24924340' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9742493' lon='-1.3989845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464253' timestamp='2007-05-22T00:19:13+01:00' user='Dean Earley' visible='true' lat='50.935474' lon='-1.4086666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001312' timestamp='2007-05-12T09:40:12+01:00' user='nickw' visible='true' lat='50.9270068' lon='-1.3825876'>
-    <tag k='name' v='THE ST D' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794376' timestamp='2007-05-30T21:37:18+01:00' user='nickw' visible='true' lat='50.9209604' lon='-1.3637416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596753' timestamp='2006-07-19T01:49:02+01:00' user='Dean Earley' visible='true' lat='50.9146449' lon='-1.336034'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008365' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9269819' lon='-1.3518301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388868' timestamp='2007-04-05T14:21:41+01:00' user='Dean Earley' visible='true' lat='50.9336125' lon='-1.3993504' />
-  <node id='29703875' timestamp='2007-05-28T10:12:59+01:00' visible='true' lat='50.9877012' lon='-1.3537719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342552' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9069661' lon='-1.3670135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762561' timestamp='2007-05-31T21:17:11+01:00' visible='true' lat='50.9878839' lon='-1.3563094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342616' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9097096' lon='-1.3677486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232070' timestamp='2007-02-18T21:30:54+00:00' visible='true' lat='50.9143188' lon='-1.4118122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089091' timestamp='2007-06-08T23:30:34+01:00' visible='true' lat='50.9654009' lon='-1.3760274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904005' timestamp='2007-10-17T01:09:35+01:00' user='Dean Earley' visible='true' lat='50.950646' lon='-1.3633049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924346' timestamp='2007-06-03T20:10:38+01:00' visible='true' lat='50.9818063' lon='-1.3616138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648580' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.952115' lon='-1.3594694' />
-  <node id='30256426' timestamp='2007-06-12T20:20:04+01:00' visible='true' lat='50.9805717' lon='-1.3547771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889431' timestamp='2006-12-15T00:23:44+00:00' user='Dean Earley' visible='true' lat='50.9490978' lon='-1.3643768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949891' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9940641' lon='-1.3756617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447505' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9095342' lon='-1.3891615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908363' timestamp='2007-04-19T17:50:52+01:00' visible='true' lat='50.9278221' lon='-1.3798045' />
-  <node id='13707079' timestamp='2007-04-05T14:21:41+01:00' user='Dean Earley' visible='true' lat='50.8635156' lon='-1.340625' />
-  <node id='24949925' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9915132' lon='-1.3816217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573787' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true' lat='50.9968324' lon='-1.4081721' />
-  <node id='325224' timestamp='2005-12-16T23:03:30+00:00' user='80n' visible='true' lat='50.9359572' lon='-1.3467857' />
-  <node id='13071209' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9245109' lon='-1.3670107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743121' timestamp='2007-04-03T00:52:07+01:00' user='Dean Earley' visible='true' lat='50.9111579' lon='-1.4200401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718194' timestamp='2007-08-08T01:25:53+01:00' visible='true' lat='50.9348932' lon='-1.4415975' />
-  <node id='91528336' timestamp='2007-10-29T16:21:46+00:00' user='Nick Dyer' visible='true' lat='50.9097708' lon='-1.440082' />
-  <node id='28194352' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9438207' lon='-1.4364545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18868876' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9114239' lon='-1.4156728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345074' timestamp='2007-04-30T23:00:39+01:00' user='nickw' visible='true' lat='50.932996' lon='-1.3654727'>
-    <tag k='name' v='SPINNEY WK' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923778' timestamp='2007-06-03T20:04:47+01:00' visible='true' lat='50.9828534' lon='-1.3621136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008389' timestamp='2007-05-12T15:11:56+01:00' user='nickw' visible='true' lat='50.925379' lon='-1.3522473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152432' timestamp='2008-02-03T06:21:38+00:00' user='sladen' visible='true' lat='50.907883' lon='-1.3976938' />
-  <node id='25303927' timestamp='2007-04-29T08:58:15+01:00' user='Dean Earley' visible='true' lat='50.9407509' lon='-1.4071762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932461' timestamp='2007-05-10T21:06:07+01:00' user='Dean Earley' visible='true' lat='50.9648376' lon='-1.4492506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120323' timestamp='2007-10-29T08:12:53+00:00' user='nickw' visible='true' lat='50.9313779' lon='-1.4475005'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133014' timestamp='2007-05-15T20:36:37+01:00' user='nickw' visible='true' lat='50.932648' lon='-1.3758556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632452' timestamp='2007-05-26T19:27:12+01:00' visible='true' lat='50.961052' lon='-1.3682906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801041' timestamp='2007-05-04T02:33:10+01:00' user='Dean Earley' visible='true' lat='50.9443622' lon='-1.4508619'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='330224' timestamp='2006-11-11T22:14:30+00:00' user='Dean Earley' visible='true' lat='50.9474' lon='-1.4238' />
-  <node id='25947166' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.9110684' lon='-1.3929138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243680' timestamp='2007-04-29T20:25:13+01:00' user='Dean Earley' visible='true' lat='50.9383321' lon='-1.4132312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973086' timestamp='2006-11-13T00:42:40+00:00' user='Dean Earley' visible='true' lat='50.9048569' lon='-1.4125915'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325661' timestamp='2007-11-20T11:10:23+00:00' user='Gregory Williams' visible='true' lat='50.9318783' lon='-1.4321674'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='29925207' timestamp='2007-06-03T20:30:02+01:00' visible='true' lat='50.9795763' lon='-1.3636138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963779' timestamp='2007-04-29T08:58:15+01:00' user='Dean Earley' visible='true' lat='50.9445133' lon='-1.4113907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890104' timestamp='2007-12-10T19:11:41+00:00' user='sladen' visible='true' lat='50.9137973' lon='-1.3906802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341760' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9108996' lon='-1.359047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467493' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.9326657' lon='-1.3797177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179500' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9586607' lon='-1.399361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305618' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='50.9872007' lon='-1.3923205' />
-  <node id='245145766' timestamp='2008-02-03T05:57:50+00:00' user='sladen' visible='true' lat='50.9142257' lon='-1.4012815' />
-  <node id='21091823' timestamp='2007-12-10T21:01:24+00:00' user='sladen' visible='true' lat='50.9106853' lon='-1.4301687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632443' timestamp='2007-05-26T19:27:04+01:00' visible='true' lat='50.9605686' lon='-1.3625273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601322' timestamp='2006-09-01T00:16:05+01:00' user='nickw' visible='true' lat='50.8824062' lon='-1.5234947'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30089148' timestamp='2007-06-08T18:12:12+01:00' visible='true' lat='50.9661458' lon='-1.3781763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124361' timestamp='2007-06-09T19:43:08+01:00' user='nickw' visible='true' lat='50.9238546' lon='-1.349265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924219' timestamp='2007-01-06T14:37:59+00:00' user='nickw' visible='true' lat='50.9596171' lon='-1.3635521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331882' timestamp='2007-12-06T20:44:26+00:00' user='nickw' visible='true' lat='50.9435315' lon='-1.4444042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290765' timestamp='2007-06-13T09:24:05+01:00' visible='true' lat='50.9672664' lon='-1.3813873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702391' timestamp='2006-04-15T16:32:50+01:00' user='Gagravarr' visible='true' lat='50.9962303' lon='-1.3394527' />
-  <node id='20972791' timestamp='2006-11-13T00:07:00+00:00' user='Dean Earley' visible='true' lat='50.9008254' lon='-1.3907299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29709219' timestamp='2007-05-28T12:42:02+01:00' visible='true' lat='50.9969487' lon='-1.3509616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596810' timestamp='2006-11-13T00:43:25+00:00' user='Dean Earley' visible='true' lat='50.9022838' lon='-1.4078667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797931' timestamp='2007-09-13T21:06:09+01:00' user='mike l' visible='true' lat='50.9709189' lon='-1.4502049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561807' timestamp='2006-12-16T10:14:15+00:00' user='nickw' visible='true' lat='50.9218645' lon='-1.4417091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724247' timestamp='2006-10-07T00:25:17+01:00' user='nickw' visible='true' lat='50.9109897' lon='-1.4116359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949836' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9898375' lon='-1.376655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999027' timestamp='2007-06-05T23:29:02+01:00' user='nickw' visible='true' lat='50.997262' lon='-1.4344079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635142' timestamp='2006-11-14T01:57:35+00:00' user='Dean Earley' visible='true' lat='50.9050052' lon='-1.4009115' />
-  <node id='160415523' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true' lat='50.9109938' lon='-1.4286838' />
-  <node id='20976794' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9258499' lon='-1.4185654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008374' timestamp='2007-05-12T15:11:24+01:00' user='nickw' visible='true' lat='50.9263433' lon='-1.3513732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990885' timestamp='2007-06-05T20:41:23+01:00' visible='true' lat='51.0020345' lon='-1.3507064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925686' timestamp='2007-06-03T20:46:00+01:00' visible='true' lat='50.9799925' lon='-1.3630372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963775' timestamp='2007-04-29T08:58:15+01:00' user='Dean Earley' visible='true' lat='50.9433745' lon='-1.4101314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242747' timestamp='2007-01-19T21:04:08+00:00' user='Dean Earley' visible='true' lat='50.9386393' lon='-1.3894157' />
-  <node id='92683062' timestamp='2007-10-31T12:24:57+00:00' user='Dean Earley' visible='true' lat='50.9620898' lon='-1.4259863' />
-  <node id='26945336' timestamp='2007-03-31T20:34:29+01:00' user='nickw' visible='true' lat='50.9181292' lon='-1.3565938'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Fox and Hounds' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133224' timestamp='2006-10-28T01:55:55+01:00' user='Dean Earley' visible='true' lat='50.9284202' lon='-1.3509015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949823' timestamp='2007-01-31T02:05:54+00:00' user='Dean Earley' visible='true' lat='50.9967597' lon='-1.380666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229554' timestamp='2007-06-12T00:14:34+01:00' user='nickw' visible='true' lat='50.9335919' lon='-1.3532088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706093' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.900288' lon='-1.3867916'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21561569' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9267735' lon='-1.4305837'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548680' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9636467' lon='-1.3640327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250057' timestamp='2007-04-29T21:42:21+01:00' visible='true' lat='50.9161719' lon='-1.4495971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133340' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.93159' lon='-1.3748807'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932435' timestamp='2007-05-10T21:05:53+01:00' user='Dean Earley' visible='true' lat='50.9641987' lon='-1.4726331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721056' timestamp='2007-05-28T19:39:41+01:00' visible='true' lat='50.9716278' lon='-1.3614753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816289' timestamp='2007-05-31T21:52:23+01:00' visible='true' lat='50.9912814' lon='-1.354081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108515' timestamp='2007-10-29T07:48:08+00:00' user='nickw' visible='true' lat='50.9323044' lon='-1.41999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895694' timestamp='2007-02-13T18:31:37+00:00' user='Dean Earley' visible='true' lat='50.9846042' lon='-1.4592448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931388' timestamp='2007-06-03T22:43:10+01:00' visible='true' lat='50.9942168' lon='-1.3736363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797936' timestamp='2007-09-15T18:41:52+01:00' user='mike l' visible='true' lat='50.9706141' lon='-1.448917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325674' timestamp='2007-04-29T22:00:56+01:00' visible='true' lat='50.9433185' lon='-1.4239531' />
-  <node id='21599033' timestamp='2006-12-16T01:02:10+00:00' user='Dean Earley' visible='true' lat='50.9324861' lon='-1.3557794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984725' timestamp='2007-01-10T00:12:09+00:00' user='nickw' visible='true' lat='50.9433764' lon='-1.3905955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971168' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9065747' lon='-1.4006218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157205675' timestamp='2007-12-08T20:12:20+00:00' user='nickw' visible='true' lat='50.9431757' lon='-1.4473492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926985' timestamp='2007-06-03T21:16:24+01:00' visible='true' lat='50.9851503' lon='-1.3671328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689091' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9434689' lon='-1.3887498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949972' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9871113' lon='-1.3841647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254436' timestamp='2007-04-03T00:53:48+01:00' user='Ben' visible='true' lat='50.9400175' lon='-1.3794712' />
-  <node id='29509873' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9905507' lon='-1.3595419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636797' timestamp='2007-04-29T02:32:02+01:00' user='Dean Earley' visible='true' lat='50.9528179' lon='-1.4074485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956704' timestamp='2007-06-26T23:49:20+01:00' user='nickw' visible='true' lat='50.9296497' lon='-1.3476847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091834' timestamp='2007-12-10T21:00:29+00:00' user='sladen' visible='true' lat='50.9121681' lon='-1.4239631'>
-    <tag k='name' v='MANSION' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28230999' timestamp='2007-04-29T18:44:32+01:00' user='nickw' visible='true' lat='50.9089558' lon='-1.3628572'>
-    <tag k='name' v='CYPRESS AV' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162249' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9734791' lon='-1.3851823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668104' timestamp='2007-01-04T21:05:42+00:00' user='nickw' visible='true' lat='50.9874775' lon='-1.3934461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298234' timestamp='2007-01-06T14:30:56+00:00' user='Dean Earley' visible='true' lat='51.0064621' lon='-1.3524736' />
-  <node id='413144' timestamp='2007-04-05T14:21:42+01:00' user='Dean Earley' visible='true' lat='50.9341886' lon='-1.3896842' />
-  <node id='59079871' timestamp='2007-12-09T20:41:18+00:00' user='Thomas Matern' visible='true' lat='50.9356733' lon='-1.4202709'>
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Hollybrook' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='21141423' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9315568' lon='-1.4268628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815670' timestamp='2007-05-31T21:48:05+01:00' visible='true' lat='50.9897871' lon='-1.3531074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28388962' timestamp='2007-05-01T19:53:56+01:00' visible='true' lat='50.9652473' lon='-1.3591345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728551' timestamp='2007-03-23T22:52:58+00:00' user='nickw' visible='true' lat='50.8983872' lon='-1.3673211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254658' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.9700953' lon='-1.3500656' />
-  <node id='596302' timestamp='2006-09-13T00:41:09+01:00' user='Dean Earley' visible='true' lat='50.896962' lon='-1.3225013' />
-  <node id='29914419' timestamp='2007-06-03T16:22:51+01:00' visible='true' lat='50.9841534' lon='-1.362777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341774' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.9117013' lon='-1.3604575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021749' timestamp='2007-04-03T00:52:35+01:00' user='Ben' visible='true' lat='50.9422526' lon='-1.4027424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639949' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.9018838' lon='-1.3786823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33130189' timestamp='2007-07-30T16:05:46+01:00' visible='true' lat='50.9151132' lon='-1.4070086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997523' timestamp='2007-06-05T22:43:54+01:00' user='nickw' visible='true' lat='51.0096136' lon='-1.3584572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961055' timestamp='2006-11-11T17:12:41+00:00' user='Dean Earley' visible='true' lat='50.935661' lon='-1.3452151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252933' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9457156' lon='-1.4248493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160405283' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9126281' lon='-1.4361425' />
-  <node id='30290784' timestamp='2007-06-13T09:24:10+01:00' visible='true' lat='50.9658143' lon='-1.3813708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='430657' timestamp='2007-04-05T14:21:43+01:00' user='Dean Earley' visible='true' lat='50.9128218' lon='-1.4035892' />
-  <node id='26781202' timestamp='2007-03-25T18:42:19+01:00' user='Dean Earley' visible='true' lat='50.9037847' lon='-1.3643602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518813' timestamp='2007-04-05T14:21:43+01:00' user='Dean Earley' visible='true' lat='50.9334062' lon='-1.3896562' />
-  <node id='29816591' timestamp='2007-05-31T22:07:48+01:00' visible='true' lat='50.9900453' lon='-1.3553857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871611' timestamp='2007-06-02T18:56:19+01:00' visible='true' lat='50.915031' lon='-1.3494586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114368' timestamp='2007-02-23T21:46:12+00:00' user='nickw' visible='true' lat='50.9042037' lon='-1.3938095'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600670' timestamp='2006-12-16T11:37:21+00:00' user='David Currie' visible='true' lat='50.973799' lon='-1.399408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997541' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0011128' lon='-1.3501131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949955' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9961898' lon='-1.3871049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254419' timestamp='2005-11-15T15:40:08+00:00' user='nickw' visible='true' lat='50.9215001' lon='-1.3689039' />
-  <node id='30956572' timestamp='2007-06-26T23:44:57+01:00' user='nickw' visible='true' lat='50.9273802' lon='-1.3515835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504831' timestamp='2007-04-29T01:53:38+01:00' user='Dean Earley' visible='true' lat='50.9543839' lon='-1.4022055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657771' timestamp='2007-04-05T14:21:43+01:00' user='Dean Earley' visible='true' lat='50.9045007' lon='-1.3735609' />
-  <node id='21141406' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9274873' lon='-1.4220948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914406' timestamp='2007-06-03T16:22:48+01:00' visible='true' lat='50.9834412' lon='-1.3601938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29631642' timestamp='2007-05-26T18:26:02+01:00' visible='true' lat='50.969236' lon='-1.3504916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613484' timestamp='2006-12-16T17:46:59+00:00' user='David Currie' visible='true' lat='50.9703062' lon='-1.3921822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796783' timestamp='2007-05-30T22:22:06+01:00' user='nickw' visible='true' lat='50.9213362' lon='-1.3557402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122340934' timestamp='2007-11-18T19:14:39+00:00' user='nickw' visible='true' lat='50.9199724' lon='-1.4400954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726304' timestamp='2006-09-08T02:12:12+01:00' user='Dean Earley' visible='true' lat='50.918178' lon='-1.373569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179523' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.956086' lon='-1.4011396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707150' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.8572148' lon='-1.3322002'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29925628' timestamp='2007-06-03T20:44:59+01:00' visible='true' lat='50.9812265' lon='-1.3638598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324994' timestamp='2006-09-02T12:59:35+01:00' user='Dean Earley' visible='true' lat='50.959668' lon='-1.4241612' />
-  <node id='28341791' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9118391' lon='-1.362623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601334' timestamp='2007-12-10T19:45:11+00:00' user='sladen' visible='true' lat='50.8901524' lon='-1.5263271'>
-    <tag k='railway' v='station' />
-    <tag k='note' v='Transferred from a nearby node' />
-    <tag k='name' v='Ashurst New Forest' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='14707268' timestamp='2006-12-14T23:57:11+00:00' user='Dean Earley' visible='true' lat='50.9670417' lon='-1.3310656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636929' timestamp='2006-12-18T21:41:04+00:00' user='nickw' visible='true' lat='50.9093628' lon='-1.4164917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563295' timestamp='2007-04-23T22:47:35+01:00' visible='true' lat='50.929834' lon='-1.3977149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48967843' timestamp='2007-09-11T00:17:27+01:00' visible='true' lat='50.9028958' lon='-1.4156203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966371' timestamp='2007-01-28T00:06:55+00:00' visible='true' lat='50.9172623' lon='-1.3721474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582974' timestamp='2007-05-02T23:57:50+01:00' visible='true' lat='50.9390927' lon='-1.4255365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29824067' timestamp='2007-06-01T09:03:14+01:00' visible='true' lat='50.9938072' lon='-1.3841539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232080' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9114132' lon='-1.4128369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306318' timestamp='2007-04-05T14:21:43+01:00' user='Dean Earley' visible='true' lat='50.9268' lon='-1.39408' />
-  <node id='14743163' timestamp='2007-04-29T20:37:33+01:00' user='Dean Earley' visible='true' lat='50.9342435' lon='-1.4190963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263997' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9563557' lon='-1.3710507' />
-  <node id='28179466' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9620445' lon='-1.4118752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711160' timestamp='2007-05-28T14:42:17+01:00' visible='true' lat='50.9770903' lon='-1.3641368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548715' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.9629921' lon='-1.3595711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704901' timestamp='2006-08-25T23:42:29+01:00' user='dmgroom' visible='true' lat='50.9016305' lon='-1.4491068' />
-  <node id='169435788' timestamp='2007-12-14T21:43:12+00:00' user='nickw' visible='true' lat='50.936951' lon='-1.4304974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071415' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9232584' lon='-1.354864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254293' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9777979' lon='-1.3425839' />
-  <node id='29839511' timestamp='2007-06-01T21:00:15+01:00' visible='true' lat='50.9782639' lon='-1.3523134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932442' timestamp='2007-05-10T21:05:57+01:00' user='Dean Earley' visible='true' lat='50.9635274' lon='-1.461406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706063' timestamp='2007-10-26T13:08:08+01:00' user='Nick Dyer' visible='true' lat='50.8928914' lon='-1.3893081' />
-  <node id='13071406' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9219538' lon='-1.3547277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348610' timestamp='2007-04-30T23:49:35+01:00' user='nickw' visible='true' lat='50.9287149' lon='-1.3622791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254673' timestamp='2007-01-28T00:06:51+00:00' visible='true' lat='50.9226797' lon='-1.3736616' />
-  <node id='422982' timestamp='2007-04-29T20:37:33+01:00' user='Dean Earley' visible='true' lat='50.9380758' lon='-1.4118775' />
-  <node id='30229561' timestamp='2007-06-12T00:14:37+01:00' user='nickw' visible='true' lat='50.9332977' lon='-1.3544505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469844' timestamp='2007-04-05T14:21:44+01:00' user='Dean Earley' visible='true' lat='50.9225233' lon='-1.3455125' />
-  <node id='29595204' timestamp='2007-06-03T14:54:30+01:00' visible='true' lat='50.9676169' lon='-1.3541872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325239' timestamp='2006-11-11T17:26:00+00:00' user='Dean Earley' visible='true' lat='50.9343166' lon='-1.3285037' />
-  <node id='87825996' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8994615' lon='-1.4378326' />
-  <node id='21141495' timestamp='2006-11-21T23:20:00+00:00' user='nickw' visible='true' lat='50.926375' lon='-1.4363466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464302' timestamp='2007-05-22T00:19:23+01:00' user='Dean Earley' visible='true' lat='50.9483053' lon='-1.3992824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228114' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9514756' lon='-1.4294101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956680' timestamp='2007-06-26T23:49:17+01:00' user='nickw' visible='true' lat='50.9292991' lon='-1.3502872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924212' timestamp='2007-01-06T14:37:59+00:00' user='nickw' visible='true' lat='50.9571895' lon='-1.3619628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600426' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9215197' lon='-1.4371925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600370' timestamp='2007-04-09T15:39:45+01:00' user='avantman42' visible='true' lat='50.9032754' lon='-1.4122429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677849' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.8980035' lon='-1.4462237' />
-  <node id='11151901' timestamp='2006-07-21T23:34:43+01:00' user='Dean Earley' visible='true' lat='50.9496776' lon='-1.3737954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640001' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9103567' lon='-1.3710966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252899' timestamp='2007-04-29T22:00:34+01:00' visible='true' lat='50.9464967' lon='-1.4313351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254276' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9618014' lon='-1.3351337' />
-  <node id='29008397' timestamp='2007-05-12T15:11:58+01:00' user='nickw' visible='true' lat='50.9261304' lon='-1.3495057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504287' timestamp='2007-01-28T19:31:52+00:00' user='nickw' visible='true' lat='50.998714' lon='-1.3475957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816638' timestamp='2007-05-31T22:10:50+01:00' visible='true' lat='50.988095' lon='-1.3617341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372781' timestamp='2007-05-01T10:05:21+01:00' visible='true' lat='50.9311458' lon='-1.4429763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290746' timestamp='2007-06-13T09:24:00+01:00' visible='true' lat='50.9658658' lon='-1.3813689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380428' timestamp='2007-05-20T10:19:27+01:00' user='nickw' visible='true' lat='50.9439008' lon='-1.3774622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950449' timestamp='2007-09-10T23:28:31+01:00' visible='true' lat='50.912909' lon='-1.3954294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613412' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9872396' lon='-1.4160672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091884' timestamp='2006-11-25T23:51:20+00:00' user='nickw' visible='true' lat='50.9217144' lon='-1.420086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561560' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9230292' lon='-1.431438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252959' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.944467' lon='-1.4298436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147535' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9096961' lon='-1.4041826' />
-  <node id='17722341' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.948272' lon='-1.3751503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9285003' timestamp='2007-02-18T21:25:30+00:00' visible='true' lat='50.9153765' lon='-1.39871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388893' timestamp='2007-04-05T14:21:44+01:00' user='Dean Earley' visible='true' lat='50.9436' lon='-1.39129' />
-  <node id='2742645' timestamp='2007-02-01T22:21:36+00:00' user='Dean Earley' visible='true' lat='50.9431605' lon='-1.3800767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141389' timestamp='2007-10-29T07:46:03+00:00' user='nickw' visible='true' lat='50.9243218' lon='-1.4150995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830675' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9244432' lon='-1.3633359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700378' timestamp='2007-04-05T14:21:44+01:00' user='Dean Earley' visible='true' lat='50.9224058' lon='-1.3940202' />
-  <node id='325096' timestamp='2006-05-09T11:25:12+01:00' user='80n' visible='true' lat='50.92285' lon='-1.5847066' />
-  <node id='29548698' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9641605' lon='-1.3685331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249813' timestamp='2007-04-29T21:41:33+01:00' visible='true' lat='50.921983' lon='-1.4432275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243604' timestamp='2007-04-29T20:24:59+01:00' user='Dean Earley' visible='true' lat='50.9346876' lon='-1.4172522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254310' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9876956' lon='-1.3440451' />
-  <node id='21615432' timestamp='2006-12-16T21:52:54+00:00' user='nickw' visible='true' lat='50.9089666' lon='-1.4158914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387809' timestamp='2007-04-05T14:21:44+01:00' user='Dean Earley' visible='true' lat='50.9281' lon='-1.39739' />
-  <node id='154770518' timestamp='2007-12-07T13:51:23+00:00' user='Nick Dyer' visible='true' lat='50.960688' lon='-1.4267487' />
-  <node id='28236164' timestamp='2007-04-29T19:26:13+01:00' user='Andy Street' visible='true' lat='50.9061297' lon='-1.3566181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='395774' timestamp='2007-04-05T14:21:44+01:00' user='Dean Earley' visible='true' lat='50.9172' lon='-1.40071' />
-  <node id='29816752' timestamp='2007-05-31T22:13:36+01:00' visible='true' lat='50.9900495' lon='-1.3561002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636767' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9473342' lon='-1.402454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178440' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9985472' lon='-1.352905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124199' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9234382' lon='-1.35075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537326' timestamp='2006-10-27T22:49:33+01:00' user='Dean Earley' visible='true' lat='50.9274814' lon='-1.3520765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783103' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9475369' lon='-1.3521857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505731' timestamp='2007-05-22T19:28:31+01:00' visible='true' lat='50.9899337' lon='-1.3527626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871653' timestamp='2007-06-02T18:57:35+01:00' visible='true' lat='50.9146875' lon='-1.3519347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250096' timestamp='2007-04-29T21:42:28+01:00' visible='true' lat='50.9164102' lon='-1.4496217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591409' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9162679' lon='-1.4557046' />
-  <node id='24924287' timestamp='2007-10-29T15:43:35+00:00' user='Dean Earley' visible='true' lat='50.9662332' lon='-1.3860168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26001571' timestamp='2007-02-18T20:16:52+00:00' visible='true' lat='50.925374' lon='-1.393874' />
-  <node id='21613446' timestamp='2006-12-16T17:46:56+00:00' user='David Currie' visible='true' lat='50.9734627' lon='-1.3995639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305590' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9970975' lon='-1.3927102' />
-  <node id='28240308' timestamp='2007-04-29T20:02:54+01:00' user='Andy Street' visible='true' lat='50.9056551' lon='-1.3543406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689159' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9399168' lon='-1.3736362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964145' timestamp='2006-09-08T02:12:02+01:00' user='Dean Earley' visible='true' lat='50.9199005' lon='-1.3796198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27523501' timestamp='2007-04-22T01:27:18+01:00' visible='true' lat='50.9727381' lon='-1.3747096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659224' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9038415' lon='-1.404215' />
-  <node id='21636794' timestamp='2006-12-18T21:21:46+00:00' user='nickw' visible='true' lat='50.9503256' lon='-1.4104603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621200' timestamp='2007-05-26T11:34:24+01:00' visible='true' lat='50.9706695' lon='-1.3526267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244252' timestamp='2007-04-29T20:36:30+01:00' user='Andy Street' visible='true' lat='50.9036394' lon='-1.3502061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965516' timestamp='2007-05-10T21:07:59+01:00' user='Dean Earley' visible='true' lat='50.9834238' lon='-1.4539615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291038' timestamp='2007-06-13T09:32:54+01:00' visible='true' lat='50.9649434' lon='-1.381401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='22231194' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9917026' lon='-1.3896432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392354' timestamp='2007-05-20T17:52:52+01:00' visible='true' lat='50.9632928' lon='-1.3570778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359694' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9674073' lon='-1.3529346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071299' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9212278' lon='-1.3585998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339151' timestamp='2007-04-30T20:39:30+01:00' visible='true' lat='50.9684499' lon='-1.3608403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464287' timestamp='2007-05-22T00:19:20+01:00' user='Dean Earley' visible='true' lat='50.941184' lon='-1.4067215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290731' timestamp='2007-10-29T15:43:34+00:00' user='Dean Earley' visible='true' lat='50.9675162' lon='-1.3825011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963782' timestamp='2007-04-29T08:58:11+01:00' user='Dean Earley' visible='true' lat='50.9432357' lon='-1.4129402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668070' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.988109' lon='-1.4053165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133106' timestamp='2006-10-28T01:55:36+01:00' user='Dean Earley' visible='true' lat='50.927873' lon='-1.3550708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956742' timestamp='2007-06-26T23:49:25+01:00' user='nickw' visible='true' lat='50.9282598' lon='-1.3507442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889430' timestamp='2006-12-15T00:23:43+00:00' user='Dean Earley' visible='true' lat='50.9483485' lon='-1.3651215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232083' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9146408' lon='-1.4119224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372766' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9301529' lon='-1.4343406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319647' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9215021' lon='-1.401701' />
-  <node id='160219870' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true' lat='50.9149607' lon='-1.3894442' />
-  <node id='474851' timestamp='2007-04-05T14:21:45+01:00' user='Dean Earley' visible='true' lat='50.9377' lon='-1.36522' />
-  <node id='28582957' timestamp='2007-05-02T23:57:47+01:00' visible='true' lat='50.9433874' lon='-1.4254411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325081' timestamp='2006-11-11T17:26:07+00:00' user='Dean Earley' visible='true' lat='50.9290138' lon='-1.5725884' />
-  <node id='305607' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9908748' lon='-1.3953924' />
-  <node id='28339128' timestamp='2007-05-02T00:35:38+01:00' visible='true' lat='50.9687037' lon='-1.3616899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224276' timestamp='2007-06-11T22:06:24+01:00' visible='true' lat='50.9828715' lon='-1.3552995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21157476' timestamp='2007-12-10T19:21:49+00:00' user='sladen' visible='true' lat='50.9066481' lon='-1.4011944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21585934' timestamp='2007-04-29T17:21:00+01:00' visible='true' lat='50.9677104' lon='-1.3550718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984755' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9495887' lon='-1.4046266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254871' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9194138' lon='-1.479384' />
-  <node id='331355' timestamp='2007-04-05T14:21:45+01:00' user='Dean Earley' visible='true' lat='50.9420427' lon='-1.4023874' />
-  <node id='24668374' timestamp='2007-01-04T21:06:49+00:00' user='nickw' visible='true' lat='50.9876838' lon='-1.4014624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783084' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9407273' lon='-1.3548876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242726' timestamp='2006-09-08T23:08:02+01:00' user='Dean Earley' visible='true' lat='50.9366165' lon='-1.3807294' />
-  <node id='20976805' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9263633' lon='-1.4218435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419440' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9414299' lon='-1.37021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945396' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9036018' lon='-1.3435512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161248' timestamp='2007-06-10T18:18:28+01:00' visible='true' lat='50.9637144' lon='-1.3636432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250044' timestamp='2007-04-29T21:42:19+01:00' visible='true' lat='50.9176726' lon='-1.4494078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236127' timestamp='2007-04-29T19:25:50+01:00' user='Andy Street' visible='true' lat='50.907513' lon='-1.355996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762098' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9444648' lon='-1.3460275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998078' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.9887277' lon='-1.412763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303936' timestamp='2007-04-29T20:37:40+01:00' user='Dean Earley' visible='true' lat='50.9342654' lon='-1.4187958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160280778' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9203881' lon='-1.4738329' />
-  <node id='29871072' timestamp='2007-06-02T18:20:21+01:00' visible='true' lat='50.9347163' lon='-1.4381302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157204125' timestamp='2007-12-08T20:11:10+00:00' user='nickw' visible='true' lat='50.9426812' lon='-1.4470809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243511771' timestamp='2008-01-26T18:09:52+00:00' user='stuphi' visible='true' lat='50.9493939' lon='-1.3710127' />
-  <node id='30226864' timestamp='2007-06-11T22:28:55+01:00' visible='true' lat='50.9806672' lon='-1.3536388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831126' timestamp='2006-11-02T19:56:07+00:00' user='nickw' visible='true' lat='50.9129439' lon='-1.4079753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33130204' timestamp='2007-07-30T16:06:52+01:00' visible='true' lat='50.9141012' lon='-1.4137588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964840' timestamp='2006-12-16T17:47:20+00:00' user='David Currie' visible='true' lat='50.9954118' lon='-1.4485707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398455' timestamp='2006-10-17T23:09:41+01:00' user='nickw' visible='true' lat='50.9221373' lon='-1.4052576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227251' timestamp='2007-04-29T08:58:12+01:00' user='Dean Earley' visible='true' lat='50.9419682' lon='-1.4129794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998092' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.9871769' lon='-1.4024919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160226522' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true' lat='50.903682' lon='-1.3906544' />
-  <node id='29998069' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9903346' lon='-1.409634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976718' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.935316' lon='-1.4221415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125570948' timestamp='2007-11-20T11:50:35+00:00' user='Nick Dyer' visible='true' lat='50.9624328' lon='-1.4236102' />
-  <node id='325689' timestamp='2007-04-05T14:21:45+01:00' user='Dean Earley' visible='true' lat='50.9208' lon='-1.41174' />
-  <node id='469874' timestamp='2007-11-18T18:58:29+00:00' user='nickw' visible='true' lat='50.9135373' lon='-1.4323507' />
-  <node id='29925907' timestamp='2007-06-03T20:50:20+01:00' visible='true' lat='50.9812298' lon='-1.3646899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504820' timestamp='2006-10-03T23:25:10+01:00' user='Dean Earley' visible='true' lat='50.9537535' lon='-1.4029698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640020' timestamp='2007-03-04T18:58:32+00:00' user='Dean Earley' visible='true' lat='50.9123711' lon='-1.3694965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117397' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9288924' lon='-1.4439543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613420' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9759021' lon='-1.4037515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947177' timestamp='2007-02-16T20:51:24+00:00' user='nickw' visible='true' lat='50.9094752' lon='-1.3931702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561530' timestamp='2007-03-24T16:33:43+00:00' user='Dean Earley' visible='true' lat='50.9248993' lon='-1.440308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973090' timestamp='2007-02-06T00:16:41+00:00' user='Dean Earley' visible='true' lat='50.9013772' lon='-1.408718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134833' timestamp='2007-05-15T20:53:15+01:00' user='nickw' visible='true' lat='50.9452193' lon='-1.3826558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507768' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9404894' lon='-1.389871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601303' timestamp='2006-09-01T00:21:15+01:00' user='nickw' visible='true' lat='50.8276287' lon='-1.5472144'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28194855' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9446446' lon='-1.4069518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27558586' timestamp='2007-04-23T19:30:00+01:00' visible='true' lat='50.9264635' lon='-1.3912224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929152' timestamp='2007-06-03T22:00:31+01:00' visible='true' lat='50.9763528' lon='-1.3637913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963762' timestamp='2007-05-22T00:20:09+01:00' user='Dean Earley' visible='true' lat='50.9385987' lon='-1.407266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491406' timestamp='2007-12-07T21:00:51+00:00' user='Steve Jeapes' visible='true' lat='50.9238382' lon='-1.3943745'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='Portswood Church' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='254361' timestamp='2007-02-18T21:25:23+00:00' visible='true' lat='50.9173998' lon='-1.4067903' />
-  <node id='30124671' timestamp='2007-06-09T19:48:39+01:00' user='nickw' visible='true' lat='50.9314868' lon='-1.3520662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021779' timestamp='2007-04-03T00:52:48+01:00' user='Ben' visible='true' lat='50.9527436' lon='-1.4004663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254841' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.906794' lon='-1.4186416' />
-  <node id='29862367' timestamp='2007-06-02T12:33:17+01:00' visible='true' lat='50.9329583' lon='-1.428406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160361457' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9181477' lon='-1.4799934' />
-  <node id='29998583' timestamp='2007-06-05T23:13:55+01:00' user='nickw' visible='true' lat='50.9565959' lon='-1.45497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890086' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9189803' lon='-1.3929622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530517' timestamp='2007-05-23T13:01:38+01:00' visible='true' lat='50.9874655' lon='-1.3531176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613499' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9805482' lon='-1.3944334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728564' timestamp='2007-03-23T22:53:03+00:00' user='nickw' visible='true' lat='50.9011234' lon='-1.3738443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957862' timestamp='2007-05-10T21:08:00+01:00' user='Dean Earley' visible='true' lat='50.958932' lon='-1.4516946'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28348138' timestamp='2007-04-30T23:45:32+01:00' user='nickw' visible='true' lat='50.9337984' lon='-1.3657557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781182' timestamp='2007-03-25T18:42:15+01:00' user='Dean Earley' visible='true' lat='50.9002151' lon='-1.3739054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254611' timestamp='2006-10-27T00:48:12+01:00' user='Dean Earley' visible='true' lat='50.9131956' lon='-1.3901803' />
-  <node id='28180241' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.961566' lon='-1.4228574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613397' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9767403' lon='-1.4326836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998544' timestamp='2007-06-05T23:13:23+01:00' user='nickw' visible='true' lat='50.9658055' lon='-1.4299379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409619' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9124928' lon='-1.4360996' />
-  <node id='29872368' timestamp='2007-06-02T19:03:56+01:00' visible='true' lat='50.9166731' lon='-1.3487952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462629' timestamp='2007-05-21T23:56:41+01:00' user='nickw' visible='true' lat='50.9030028' lon='-1.4006972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971217' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9065286' lon='-1.4152541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533019' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9279163' lon='-1.4336283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275628' timestamp='2007-06-01T16:39:14+01:00' user='Dean Earley' visible='true' lat='50.9201198' lon='-1.4347726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505719' timestamp='2007-05-22T19:28:27+01:00' visible='true' lat='50.9937903' lon='-1.3554543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972772' timestamp='2006-11-13T00:06:54+00:00' user='Dean Earley' visible='true' lat='50.8989712' lon='-1.4081622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160392400' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9187591' lon='-1.4606987' />
-  <node id='29001339' timestamp='2007-05-12T09:40:17+01:00' user='nickw' visible='true' lat='50.9226098' lon='-1.3812785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575737' timestamp='2007-03-16T21:52:24+00:00' user='nickw' visible='true' lat='50.9019283' lon='-1.3950864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24667959' timestamp='2007-01-04T21:04:55+00:00' user='nickw' visible='true' lat='50.9901099' lon='-1.4094488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115446' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9276214' lon='-1.4434477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325066' timestamp='2006-11-11T17:26:17+00:00' user='Dean Earley' visible='true' lat='50.9447876' lon='-1.5385974' />
-  <node id='30510882' timestamp='2007-06-17T22:25:16+01:00' visible='true' lat='50.9750328' lon='-1.359093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830572' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.9245081' lon='-1.3559904'>
-    <tag k='name' v='EX RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727992' timestamp='2007-04-03T00:54:06+01:00' user='Ben' visible='true' lat='50.9397162' lon='-1.3797514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507789' timestamp='2007-05-22T00:20:10+01:00' user='Dean Earley' visible='true' lat='50.9489813' lon='-1.4019227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194416' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9476587' lon='-1.4377646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305628' timestamp='2006-12-16T17:47:20+00:00' user='David Currie' visible='true' lat='50.9839232' lon='-1.3865519' />
-  <node id='123671370' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9153001' lon='-1.4411257' />
-  <node id='388928' timestamp='2007-04-05T14:21:46+01:00' user='Dean Earley' visible='true' lat='50.943' lon='-1.39363' />
-  <node id='91110499' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true' lat='50.9300756' lon='-1.4324465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639903' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9020925' lon='-1.3819662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282121' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9779413' lon='-1.407028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583047' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.9390681' lon='-1.4293745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001697' timestamp='2007-05-12T09:53:01+01:00' user='nickw' visible='true' lat='50.9403469' lon='-1.3641759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724258' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9236133' lon='-1.4141463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179476' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.9579941' lon='-1.4090602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269046' timestamp='2005-11-20T12:17:36+00:00' user='nickw' visible='true' lat='50.9453992' lon='-1.3711998' />
-  <node id='298261' timestamp='2007-01-06T14:30:57+00:00' user='Dean Earley' visible='true' lat='50.9655627' lon='-1.3828104' />
-  <node id='28194414' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9474865' lon='-1.4375186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275709' timestamp='2007-04-03T00:52:12+01:00' user='Dean Earley' visible='true' lat='50.9223543' lon='-1.433424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249979' timestamp='2007-04-29T21:42:08+01:00' visible='true' lat='50.9157041' lon='-1.4467665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325009' timestamp='2006-11-11T17:26:26+00:00' user='Dean Earley' visible='true' lat='50.9543696' lon='-1.4084226' />
-  <node id='20952634' timestamp='2008-01-09T08:16:00+00:00' user='hairywill' visible='true' lat='50.9344855' lon='-1.3759773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962300' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9586644' lon='-1.3694477' />
-  <node id='29914192' timestamp='2007-06-03T16:01:59+01:00' visible='true' lat='50.9837081' lon='-1.3589576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613469' timestamp='2006-12-16T17:46:58+00:00' user='David Currie' visible='true' lat='50.9757416' lon='-1.3974465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998996' timestamp='2007-06-05T23:28:58+01:00' user='nickw' visible='true' lat='50.9915601' lon='-1.4385799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677145' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8966826' lon='-1.4317012' />
-  <node id='331338' timestamp='2007-12-06T22:11:03+00:00' user='Dean Earley' visible='true' lat='51.0049' lon='-1.37357' />
-  <node id='30505701' timestamp='2007-06-17T21:56:39+01:00' visible='true' lat='50.9799931' lon='-1.3554158'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600471' timestamp='2006-12-16T10:13:56+00:00' user='nickw' visible='true' lat='50.9392186' lon='-1.4464802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29510737' timestamp='2007-05-22T21:46:50+01:00' visible='true' lat='50.9735389' lon='-1.3535187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815416' timestamp='2007-05-31T21:34:33+01:00' visible='true' lat='50.9876279' lon='-1.3530786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305588' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9967971' lon='-1.3930321' />
-  <node id='153327689' timestamp='2007-12-06T20:41:53+00:00' user='nickw' visible='true' lat='50.9380691' lon='-1.4399156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730518' timestamp='2007-05-28T19:36:46+01:00' visible='true' lat='50.9705217' lon='-1.3691585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388878' timestamp='2007-04-05T14:21:46+01:00' user='Dean Earley' visible='true' lat='50.938028' lon='-1.3962507' />
-  <node id='29711871' timestamp='2007-06-11T21:42:47+01:00' visible='true' lat='50.9859616' lon='-1.354765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727979' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9183414' lon='-1.4033495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341761' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9112503' lon='-1.3586496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66586258' timestamp='2007-10-12T14:02:05+01:00' user='SteveC' visible='true' lat='50.9334671' lon='-1.4504782' />
-  <node id='28903749' timestamp='2007-05-10T00:36:38+01:00' visible='true' lat='50.9375024' lon='-1.3647168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700408' timestamp='2007-04-05T14:21:46+01:00' user='Dean Earley' visible='true' lat='50.9244526' lon='-1.3892738' />
-  <node id='26346761' timestamp='2007-03-04T18:57:54+00:00' user='Dean Earley' visible='true' lat='50.9133912' lon='-1.3643663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816565' timestamp='2007-05-31T22:04:29+01:00' visible='true' lat='50.9912562' lon='-1.3539387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744408' timestamp='2007-05-22T00:20:10+01:00' user='Dean Earley' visible='true' lat='50.9372926' lon='-1.4013476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926149' timestamp='2007-06-03T20:55:50+01:00' visible='true' lat='50.9804129' lon='-1.3643323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9312077' timestamp='2007-02-18T21:25:16+00:00' visible='true' lat='50.9143572' lon='-1.3982156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661165' timestamp='2007-04-05T14:21:46+01:00' user='Dean Earley' visible='true' lat='50.9007599' lon='-1.356205' />
-  <node id='142617028' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9136314' lon='-1.4162057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998987' timestamp='2007-06-05T23:28:57+01:00' user='nickw' visible='true' lat='50.9910849' lon='-1.4379442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179530' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9570174' lon='-1.3993859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170448' timestamp='2005-12-16T23:01:16+00:00' user='80n' visible='true' lat='50.9498454' lon='-1.3785139' />
-  <node id='14726547' timestamp='2006-09-02T18:32:35+01:00' user='Dean Earley' visible='true' lat='50.9120381' lon='-1.4006287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073383' timestamp='2007-04-05T14:21:47+01:00' user='Dean Earley' visible='true' lat='50.9293038' lon='-1.3918188' />
-  <node id='154769817' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true' lat='50.9615475' lon='-1.4268603' />
-  <node id='29927008' timestamp='2007-06-03T21:16:35+01:00' visible='true' lat='50.9845716' lon='-1.3693123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296302' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9853992' lon='-1.3565407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831117' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9137329' lon='-1.4050615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398402' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9770788' lon='-1.4248027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290716' timestamp='2007-10-04T19:38:15+01:00' user='Gregory Williams' visible='true' lat='50.9691804' lon='-1.3824248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924193' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.9441573' lon='-1.3729044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359707' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.96877' lon='-1.3511249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577113' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9639086' lon='-1.4246745' />
-  <node id='29816778' timestamp='2007-05-31T22:15:44+01:00' visible='true' lat='50.9874315' lon='-1.3610121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909663' timestamp='2007-06-03T14:54:17+01:00' visible='true' lat='50.9685459' lon='-1.3544538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764435' timestamp='2007-02-18T21:31:01+00:00' visible='true' lat='50.9081296' lon='-1.3941683' />
-  <node id='171533004' timestamp='2007-12-15T20:18:39+00:00' user='nickw' visible='true' lat='50.9275031' lon='-1.4341449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584180' timestamp='2007-05-03T00:06:42+01:00' visible='true' lat='50.942188' lon='-1.4356973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296622' timestamp='2007-01-19T10:20:01+00:00' user='Dean Earley' visible='true' lat='50.9709232' lon='-1.3674921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341739' timestamp='2007-04-30T21:48:54+01:00' user='nickw' visible='true' lat='50.9143318' lon='-1.34965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510070' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.9004513' lon='-1.4139558' />
-  <node id='160401144' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9155611' lon='-1.4539524' />
-  <node id='17721071' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9715313' lon='-1.3591224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254476' timestamp='2007-02-13T18:31:45+00:00' user='Dean Earley' visible='true' lat='50.9752233' lon='-1.4323101' />
-  <node id='29135436' timestamp='2007-05-15T20:57:25+01:00' user='nickw' visible='true' lat='50.9439425' lon='-1.3826359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544742' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9269739' lon='-1.3910144' />
-  <node id='28179459' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9645478' lon='-1.4168948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632409' timestamp='2007-05-26T19:25:41+01:00' visible='true' lat='50.9559378' lon='-1.3693401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700520' timestamp='2007-04-05T14:21:47+01:00' user='Dean Earley' visible='true' lat='50.9267964' lon='-1.3664577' />
-  <node id='9727809' timestamp='2007-11-11T18:10:10+00:00' user='Dean Earley' visible='true' lat='50.9155899' lon='-1.3588479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945349' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.921176' lon='-1.3465312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447382' timestamp='2007-03-24T16:33:44+00:00' user='Dean Earley' visible='true' lat='50.9089013' lon='-1.3878062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404156' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9126985' lon='-1.4440217' />
-  <node id='28348125' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9323961' lon='-1.3657955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157200348' timestamp='2007-12-08T20:07:47+00:00' user='nickw' visible='true' lat='50.9428283' lon='-1.4464998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971206' timestamp='2007-10-28T21:00:40+00:00' user='Nick Dyer' visible='true' lat='50.9085012' lon='-1.4126808'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='20954602' timestamp='2006-11-10T08:43:42+00:00' user='nickw' visible='true' lat='50.9409813' lon='-1.3982877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783122' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9460599' lon='-1.3477753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071274' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9177957' lon='-1.3600571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089278' timestamp='2007-06-08T18:20:45+01:00' visible='true' lat='50.9629674' lon='-1.3804485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924310' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9819295' lon='-1.3707339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324979' timestamp='2006-09-02T12:59:36+01:00' user='Dean Earley' visible='true' lat='50.9607763' lon='-1.4042914' />
-  <node id='25282094' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.9763445' lon='-1.4076391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874065' timestamp='2007-10-12T14:12:00+01:00' user='SteveC' visible='true' lat='50.9366692' lon='-1.4395262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830589' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9238828' lon='-1.3574504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774712' timestamp='2007-09-13T20:11:57+01:00' user='mike l' visible='true' lat='50.9462965' lon='-1.4497504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339145' timestamp='2007-04-30T20:39:27+01:00' visible='true' lat='50.9681183' lon='-1.3600561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657693' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9018525' lon='-1.3814276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582995' timestamp='2007-05-02T23:57:52+01:00' visible='true' lat='50.9416083' lon='-1.4314595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984798' timestamp='2007-01-10T00:15:13+00:00' user='nickw' visible='true' lat='50.941893' lon='-1.3769272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92679903' timestamp='2007-10-31T12:25:01+00:00' user='Dean Earley' visible='true' lat='50.9609461' lon='-1.4248595' />
-  <node id='28936010' timestamp='2007-05-11T00:59:50+01:00' visible='true' lat='50.9421194' lon='-1.4415581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601345' timestamp='2006-09-01T00:16:12+01:00' user='nickw' visible='true' lat='50.9046578' lon='-1.5130234'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28582978' timestamp='2007-05-02T23:57:50+01:00' visible='true' lat='50.9386253' lon='-1.42462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071218' timestamp='2006-08-11T02:47:53+01:00' user='Dean Earley' visible='true' lat='50.9198062' lon='-1.3704417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903648' timestamp='2007-05-09T23:57:40+01:00' visible='true' lat='50.9592792' lon='-1.35472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632221' timestamp='2007-05-26T19:21:21+01:00' visible='true' lat='50.957722' lon='-1.3693178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='76476566' timestamp='2007-10-17T15:40:56+01:00' user='Nick Dyer' visible='true' lat='50.8990392' lon='-1.4459627' />
-  <node id='26781167' timestamp='2007-03-25T18:42:13+01:00' user='Dean Earley' visible='true' lat='50.9019276' lon='-1.3751526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706279' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9134141' lon='-1.3807903'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='25765745' timestamp='2007-02-16T20:51:28+00:00' user='nickw' visible='true' lat='50.9117485' lon='-1.3953941' />
-  <node id='383002' timestamp='2007-01-25T22:42:42+00:00' user='Dean Earley' visible='true' lat='50.967' lon='-1.42249'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='Chilworth Church' />
-  </node>
-  <node id='254344' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9564498' lon='-1.4255668' />
-  <node id='28830658' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9251873' lon='-1.3630857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762111' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9383058' lon='-1.36057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402754' timestamp='2007-04-05T14:21:48+01:00' user='Dean Earley' visible='true' lat='50.9174' lon='-1.39941' />
-  <node id='125574210' timestamp='2007-11-20T11:52:26+00:00' user='Nick Dyer' visible='true' lat='50.9607786' lon='-1.422297' />
-  <node id='169423517' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9309506' lon='-1.4441012'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871578' timestamp='2007-06-02T18:40:17+01:00' visible='true' lat='50.9161447' lon='-1.3510817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227225' timestamp='2007-04-29T20:37:34+01:00' user='Dean Earley' visible='true' lat='50.9359583' lon='-1.41334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2742644' timestamp='2007-02-01T22:21:56+00:00' user='Dean Earley' visible='true' lat='50.9426456' lon='-1.3804003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711120' timestamp='2007-05-28T14:39:19+01:00' visible='true' lat='50.9824524' lon='-1.3595474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111079' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0091081' lon='-1.3947069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722359' timestamp='2007-02-01T22:22:00+00:00' user='Dean Earley' visible='true' lat='50.942626' lon='-1.377061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963732' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9323376' lon='-1.4163857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111040' timestamp='2006-10-22T23:24:05+01:00' user='Ben' visible='true' lat='50.9735165' lon='-1.3816715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976763' timestamp='2006-11-13T21:50:46+00:00' user='nickw' visible='true' lat='50.9308962' lon='-1.4211481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896262' timestamp='2007-02-13T19:24:11+00:00' user='Dean Earley' visible='true' lat='50.9693086' lon='-1.3904297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254547' timestamp='2005-11-15T15:41:03+00:00' user='nickw' visible='true' lat='50.9291995' lon='-1.3657543' />
-  <node id='24668391' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9816493' lon='-1.3991876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903070' timestamp='2007-05-09T23:03:42+01:00' visible='true' lat='50.9416402' lon='-1.3679748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639952' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9028461' lon='-1.377178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706461' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9287832' lon='-1.3812461'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29925343' timestamp='2007-06-03T20:36:35+01:00' visible='true' lat='50.9802915' lon='-1.3654445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624982' timestamp='2007-03-25T18:42:35+01:00' user='Dean Earley' visible='true' lat='50.8996578' lon='-1.3663021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180220' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.961252' lon='-1.4255051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254888' timestamp='2006-09-03T00:38:51+01:00' user='Dean Earley' visible='true' lat='50.9269937' lon='-1.433824' />
-  <node id='122349926' timestamp='2007-11-18T19:19:51+00:00' user='nickw' visible='true' lat='50.917661' lon='-1.4369832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583057' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9379856' lon='-1.4324252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872354' timestamp='2007-06-02T19:03:54+01:00' visible='true' lat='50.9174889' lon='-1.3511834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160402234' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9143111' lon='-1.4502359' />
-  <node id='675862' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true' lat='50.9281224' lon='-1.3717565' />
-  <node id='29171743' timestamp='2007-05-16T23:47:58+01:00' user='nickw' visible='true' lat='50.9403529' lon='-1.3888529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801372' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.9075464' lon='-1.374073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924295' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9681693' lon='-1.3832897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236110' timestamp='2007-04-29T19:25:36+01:00' user='Andy Street' visible='true' lat='50.9077572' lon='-1.3564667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935772' timestamp='2007-05-11T00:50:56+01:00' visible='true' lat='50.9394092' lon='-1.4472649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721037' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9609675' lon='-1.3592458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000488' timestamp='2007-05-12T09:26:08+01:00' user='nickw' visible='true' lat='50.9191657' lon='-1.4127873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301608' timestamp='2007-04-03T00:53:58+01:00' user='Ben' visible='true' lat='50.9372017' lon='-1.3994396' />
-  <node id='28249881' timestamp='2007-04-29T21:41:43+01:00' visible='true' lat='50.9202583' lon='-1.4376809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161109' timestamp='2007-06-10T18:13:41+01:00' visible='true' lat='50.9677615' lon='-1.3557783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466087' timestamp='2007-05-22T00:37:58+01:00' user='Dean Earley' visible='true' lat='50.9828795' lon='-1.4457513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092024' timestamp='2006-11-19T12:29:33+00:00' user='nickw' visible='true' lat='50.9766389' lon='-1.4381052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706472' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.929314' lon='-1.380161'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='59766921' timestamp='2007-09-25T17:50:06+01:00' user='mike l' visible='true' lat='50.94013' lon='-1.3885658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194371' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9448541' lon='-1.4384227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244235' timestamp='2007-04-29T20:36:27+01:00' user='Andy Street' visible='true' lat='50.9030774' lon='-1.3514004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21637745' timestamp='2006-12-18T23:28:11+00:00' visible='true' lat='50.9361903' lon='-1.3930314'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='9281158' timestamp='2007-02-18T20:18:25+00:00' visible='true' lat='50.9158352' lon='-1.3591172'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161218' timestamp='2007-06-10T18:16:24+01:00' visible='true' lat='50.9659521' lon='-1.36622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980717' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9577663' lon='-1.3437417' />
-  <node id='21600597' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9925158' lon='-1.4042919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275692' timestamp='2006-11-25T23:51:13+00:00' user='nickw' visible='true' lat='50.9141205' lon='-1.4321115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254327' timestamp='2005-11-15T15:38:59+00:00' user='nickw' visible='true' lat='50.9553006' lon='-1.447601' />
-  <node id='29512252' timestamp='2007-05-22T22:58:29+01:00' visible='true' lat='50.9814888' lon='-1.3512157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089096' timestamp='2007-06-13T09:24:40+01:00' visible='true' lat='50.9654785' lon='-1.3768512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29912973' timestamp='2007-06-03T15:50:11+01:00' visible='true' lat='50.98714' lon='-1.3584852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110863' timestamp='2006-10-27T23:39:27+01:00' user='Dean Earley' visible='true' lat='50.9353623' lon='-1.3613558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924103' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9407994' lon='-1.3741709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706256' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9123496' lon='-1.3783606'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='14957843' timestamp='2007-05-22T00:40:31+01:00' user='Dean Earley' visible='true' lat='50.9432133' lon='-1.4351638'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='13706977' timestamp='2007-04-05T14:21:48+01:00' user='Dean Earley' visible='true' lat='50.8716584' lon='-1.3536155' />
-  <node id='27496131' timestamp='2007-04-20T23:53:12+01:00' user='Dean Earley' visible='true' lat='50.9084177' lon='-1.3916962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254918' timestamp='2007-10-17T01:27:50+01:00' user='Dean Earley' visible='true' lat='50.9262646' lon='-1.441908' />
-  <node id='29824066' timestamp='2007-06-01T09:03:14+01:00' visible='true' lat='50.9939571' lon='-1.3833123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163085' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.9707894' lon='-1.3848049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856373' timestamp='2007-06-02T08:31:29+01:00' user='nickw' visible='true' lat='50.9473537' lon='-1.39162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194333' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9443436' lon='-1.435618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931362' timestamp='2007-06-03T22:43:06+01:00' visible='true' lat='50.9947672' lon='-1.3732229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383145' timestamp='2007-04-05T14:21:48+01:00' user='Dean Earley' visible='true' lat='50.923' lon='-1.40674' />
-  <node id='91123691' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9304693' lon='-1.4473006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657722' timestamp='2007-04-05T14:21:48+01:00' user='Dean Earley' visible='true' lat='50.9005383' lon='-1.3537767' />
-  <node id='21613435' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.9767336' lon='-1.4019903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728854' timestamp='2007-05-28T19:12:21+01:00' visible='true' lat='50.9705009' lon='-1.3539571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815640' timestamp='2007-05-31T21:47:56+01:00' visible='true' lat='50.9897245' lon='-1.3579345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20628555' timestamp='2007-05-22T00:20:11+01:00' user='Dean Earley' visible='true' lat='50.936254' lon='-1.4160954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325216' timestamp='2006-11-11T17:26:46+00:00' user='Dean Earley' visible='true' lat='50.938555' lon='-1.3543678' />
-  <node id='27434187' timestamp='2007-04-17T22:04:01+01:00' visible='true' lat='50.9283183' lon='-1.3866997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705663' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8958995' lon='-1.4051397'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28173788' timestamp='2007-04-29T00:59:29+01:00' visible='true' lat='50.9473443' lon='-1.431901'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242658' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9116705' lon='-1.4348057' />
-  <node id='87248245' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8890653' lon='-1.3985768' />
-  <node id='29704462' timestamp='2007-05-28T10:36:49+01:00' visible='true' lat='50.9827894' lon='-1.3575204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773024' timestamp='2007-04-03T00:52:14+01:00' user='Dean Earley' visible='true' lat='50.9250666' lon='-1.443424' />
-  <node id='21636812' timestamp='2007-04-29T02:33:50+01:00' user='Dean Earley' visible='true' lat='50.9508397' lon='-1.4140247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743178' timestamp='2006-11-12T22:57:32+00:00' user='Dean Earley' visible='true' lat='50.9080381' lon='-1.4137307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896245' timestamp='2007-02-13T19:24:09+00:00' user='Dean Earley' visible='true' lat='50.9553119' lon='-1.4027139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700497' timestamp='2007-04-05T14:21:48+01:00' user='Dean Earley' visible='true' lat='50.930312' lon='-1.3729577' />
-  <node id='27021828' timestamp='2007-04-03T00:53:10+01:00' user='Ben' visible='true' lat='50.9394415' lon='-1.3935646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209180' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.9419442' lon='-1.4479725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096955' timestamp='2007-06-08T23:24:14+01:00' visible='true' lat='50.9655036' lon='-1.3760194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447532' timestamp='2007-03-09T21:07:40+00:00' user='nickw' visible='true' lat='50.9085416' lon='-1.390447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773090' timestamp='2007-12-07T13:53:03+00:00' user='Nick Dyer' visible='true' lat='50.9613691' lon='-1.4269376' />
-  <node id='14726564' timestamp='2006-09-02T18:32:37+01:00' user='Dean Earley' visible='true' lat='50.9132007' lon='-1.4007389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971142' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.9107062' lon='-1.3994777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372751' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9289579' lon='-1.439038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632178' timestamp='2007-05-26T19:20:24+01:00' visible='true' lat='50.9577505' lon='-1.3690858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621243' timestamp='2007-05-26T11:35:32+01:00' visible='true' lat='50.9376228' lon='-1.3733169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296279' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9764791' lon='-1.3642277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254747' timestamp='2006-12-16T11:37:36+00:00' user='David Currie' visible='true' lat='50.9552589' lon='-1.4028533' />
-  <node id='28249937' timestamp='2007-04-29T21:41:52+01:00' visible='true' lat='50.9149414' lon='-1.4447426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563353' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9297479' lon='-1.3984591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243697' timestamp='2007-04-29T20:25:17+01:00' user='Dean Earley' visible='true' lat='50.9393528' lon='-1.4133307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102969' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9299164' lon='-1.3580524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422992' timestamp='2007-05-22T00:20:11+01:00' user='Dean Earley' visible='true' lat='50.9465959' lon='-1.3977592' />
-  <node id='29632430' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true' lat='50.9591267' lon='-1.3692692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984710' timestamp='2007-01-10T00:11:54+00:00' user='nickw' visible='true' lat='50.9446344' lon='-1.380533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816722' timestamp='2007-05-31T22:13:27+01:00' visible='true' lat='50.9899349' lon='-1.3566215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161126' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.972951' lon='-1.3506831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675845' timestamp='2007-04-05T14:21:49+01:00' user='Dean Earley' visible='true' lat='50.9344574' lon='-1.3655909' />
-  <node id='20698070' timestamp='2007-02-18T21:30:55+00:00' visible='true' lat='50.9044739' lon='-1.4060678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091854' timestamp='2007-12-10T21:01:39+00:00' user='sladen' visible='true' lat='50.9113022' lon='-1.4282375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222199' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9070429' lon='-1.417234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303940' timestamp='2007-10-29T07:46:01+00:00' user='nickw' visible='true' lat='50.9328779' lon='-1.4181203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298291' timestamp='2006-09-02T12:59:36+01:00' user='Dean Earley' visible='true' lat='50.9501162' lon='-1.3989076' />
-  <node id='21689054' timestamp='2006-12-23T10:22:17+00:00' user='nickw' visible='true' lat='50.9411983' lon='-1.383574'>
-    <tag k='name' v='DAFFODIL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903883' timestamp='2007-10-16T11:34:25+01:00' user='Dean Earley' visible='true' lat='50.9506661' lon='-1.3642069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507759' timestamp='2007-02-18T20:19:16+00:00' visible='true' lat='50.9399542' lon='-1.3942615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27239002' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9173842' lon='-1.4445384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173851' timestamp='2007-04-29T01:02:39+01:00' visible='true' lat='50.9426821' lon='-1.4318395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487487' timestamp='2007-07-09T12:19:40+01:00' visible='true' lat='50.9187147' lon='-1.3899152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600497' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9227363' lon='-1.439671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009230' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9298713' lon='-1.3548945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722356' timestamp='2006-10-06T23:46:14+01:00' user='Dean Earley' visible='true' lat='50.9516506' lon='-1.3734661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684891' timestamp='2007-11-20T11:49:42+00:00' user='Nick Dyer' visible='true' lat='50.9630112' lon='-1.4221683' />
-  <node id='91120351' timestamp='2007-10-29T08:12:54+00:00' user='nickw' visible='true' lat='50.9319413' lon='-1.4457622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130929' timestamp='2006-10-28T01:45:32+01:00' user='Dean Earley' visible='true' lat='50.9349746' lon='-1.3605274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423275' timestamp='2007-09-25T18:47:49+01:00' user='mike l' visible='true' lat='50.9393233' lon='-1.389455' />
-  <node id='114099520' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9534389' lon='-1.3685654' />
-  <node id='21157475' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9070973' lon='-1.4079922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903382' timestamp='2007-05-09T23:24:27+01:00' visible='true' lat='50.9469509' lon='-1.3637406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549372' timestamp='2007-05-24T11:22:50+01:00' visible='true' lat='50.9642474' lon='-1.3723435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471860' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9394149' lon='-1.3660762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447399' timestamp='2007-03-09T20:54:22+00:00' user='nickw' visible='true' lat='50.8995492' lon='-1.3931497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160221503' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9148633' lon='-1.3906716' />
-  <node id='30259427' timestamp='2007-06-12T21:04:48+01:00' visible='true' lat='50.9779125' lon='-1.3589992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346862' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.915143' lon='-1.3666604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87239380' timestamp='2007-10-25T21:07:04+01:00' user='Nick Dyer' visible='true' lat='50.9358935' lon='-1.4516432' />
-  <node id='30956693' timestamp='2007-06-26T23:49:19+01:00' user='nickw' visible='true' lat='50.9300755' lon='-1.3473271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973101' timestamp='2006-11-13T00:42:42+00:00' user='Dean Earley' visible='true' lat='50.9055929' lon='-1.4094779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482292' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8938886' lon='-1.4253739' />
-  <node id='27467564' timestamp='2007-04-19T17:55:54+01:00' visible='true' lat='50.9351228' lon='-1.3786567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132666' timestamp='2007-05-15T20:24:19+01:00' user='nickw' visible='true' lat='50.9270102' lon='-1.3787164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745486' timestamp='2006-09-03T01:40:47+01:00' user='Dean Earley' visible='true' lat='50.9718017' lon='-1.3752178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581821' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9157105' lon='-1.4493531' />
-  <node id='66587710' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9310329' lon='-1.4485041' />
-  <node id='29998109' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.9857325' lon='-1.3940386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508360' timestamp='2007-06-17T22:14:19+01:00' visible='true' lat='50.974872' lon='-1.3551905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222221' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9157725' lon='-1.4832228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706179' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9093014' lon='-1.3810485'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='154765449' timestamp='2007-12-07T13:46:56+00:00' user='Nick Dyer' visible='true' lat='50.9611475' lon='-1.4311175' />
-  <node id='30291053' timestamp='2007-10-29T15:43:35+00:00' user='Dean Earley' visible='true' lat='50.9673905' lon='-1.3825467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242671' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9073409' lon='-1.4204806' />
-  <node id='24924105' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9415505' lon='-1.3742305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212569' timestamp='2007-12-08T20:16:58+00:00' user='nickw' visible='true' lat='50.9438767' lon='-1.448273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689172' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9397666' lon='-1.3710038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346962' timestamp='2007-04-30T23:26:35+01:00' user='nickw' visible='true' lat='50.89892' lon='-1.3612296'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984740' timestamp='2007-06-02T08:31:34+01:00' user='nickw' visible='true' lat='50.9474821' lon='-1.3945004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927557' timestamp='2007-06-03T21:24:29+01:00' visible='true' lat='50.9810254' lon='-1.369452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194865' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9438051' lon='-1.4075106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109265' timestamp='2007-10-29T07:50:30+00:00' user='nickw' visible='true' lat='50.935544' lon='-1.4212963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700397' timestamp='2007-04-05T14:21:49+01:00' user='Dean Earley' visible='true' lat='50.9212964' lon='-1.3921296' />
-  <node id='29132989' timestamp='2007-05-15T20:36:24+01:00' user='nickw' visible='true' lat='50.9319891' lon='-1.3756495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194519' timestamp='2007-04-29T08:33:25+01:00' user='Dean Earley' visible='true' lat='50.9473315' lon='-1.4129247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169426686' timestamp='2007-12-14T21:37:42+00:00' user='nickw' visible='true' lat='50.9333578' lon='-1.4414887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447387' timestamp='2007-03-24T16:33:44+00:00' user='Dean Earley' visible='true' lat='50.9116488' lon='-1.3866119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254901' timestamp='2007-01-19T18:58:06+00:00' user='Dean Earley' visible='true' lat='50.9109402' lon='-1.4031707' />
-  <node id='48958672' timestamp='2008-02-03T06:11:28+00:00' user='sladen' visible='true' lat='50.9061187' lon='-1.4032561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275645' timestamp='2006-11-25T23:47:32+00:00' user='nickw' visible='true' lat='50.9081109' lon='-1.4155873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110945' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.933421' lon='-1.36261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282098' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.976519' lon='-1.4066327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2433500' timestamp='2006-10-06T23:29:32+01:00' user='Dean Earley' visible='true' lat='50.971206' lon='-1.3505686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661169' timestamp='2007-04-05T14:21:50+01:00' user='Dean Earley' visible='true' lat='50.906963' lon='-1.3639707' />
-  <node id='28173724' timestamp='2007-04-29T00:50:51+01:00' visible='true' lat='50.943211' lon='-1.4338446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931377' timestamp='2007-06-03T22:43:08+01:00' visible='true' lat='50.9940588' lon='-1.3728397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949840' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9904878' lon='-1.3737545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958642' timestamp='2007-09-10T23:55:12+01:00' visible='true' lat='50.9072142' lon='-1.4002177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962313' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9577183' lon='-1.3636627' />
-  <node id='15740662' timestamp='2006-09-16T19:33:57+01:00' user='nickw' visible='true' lat='50.9926989' lon='-1.3538252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976703' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9349028' lon='-1.4241281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051793' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9938095' lon='-1.4729982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124220' timestamp='2007-06-09T19:35:54+01:00' user='nickw' visible='true' lat='50.9249723' lon='-1.3494488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957238' timestamp='2007-04-03T00:52:14+01:00' user='Dean Earley' visible='true' lat='50.9121868' lon='-1.4206643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706652' timestamp='2007-04-05T14:21:50+01:00' user='Dean Earley' visible='true' lat='50.9119579' lon='-1.3717657' />
-  <node id='24668340' timestamp='2007-01-04T21:06:43+00:00' user='nickw' visible='true' lat='50.9898098' lon='-1.4046013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506809' timestamp='2007-06-17T22:03:34+01:00' visible='true' lat='50.9785502' lon='-1.3614754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708047' timestamp='2007-05-28T12:04:13+01:00' visible='true' lat='50.9781394' lon='-1.36328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179438' timestamp='2007-04-29T01:53:15+01:00' user='Dean Earley' visible='true' lat='50.963216' lon='-1.4193165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711599' timestamp='2007-06-03T22:13:36+01:00' visible='true' lat='50.9768772' lon='-1.3662219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124374' timestamp='2007-06-09T19:43:10+01:00' user='nickw' visible='true' lat='50.9246185' lon='-1.3495829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021721' timestamp='2007-12-10T20:51:01+00:00' user='sladen' visible='true' lat='50.9176066' lon='-1.4556947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194399' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9454876' lon='-1.4401449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964107' timestamp='2006-09-08T02:11:58+01:00' user='Dean Earley' visible='true' lat='50.918573' lon='-1.3767026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931322' timestamp='2007-08-16T19:35:52+01:00' user='southglos' visible='true' lat='50.9989032' lon='-1.3605136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801037' timestamp='2007-05-04T01:58:34+01:00' user='Dean Earley' visible='true' lat='50.9421423' lon='-1.4503634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66587711' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9309788' lon='-1.44859' />
-  <node id='24668289' timestamp='2007-12-06T22:11:05+00:00' user='Dean Earley' visible='true' lat='50.9853281' lon='-1.3878848'>
-    <tag k='bridge' v='yes' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953371' timestamp='2007-06-04T21:16:59+01:00' visible='true' lat='51.0023693' lon='-1.3755852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947171' timestamp='2007-02-16T20:51:23+00:00' user='nickw' visible='true' lat='50.9126302' lon='-1.3936505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931637' timestamp='2007-04-05T14:21:50+01:00' user='Dean Earley' visible='true' lat='50.9201136' lon='-1.3901297' />
-  <node id='29549342' timestamp='2007-05-26T20:16:01+01:00' visible='true' lat='50.9611639' lon='-1.3646934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890101' timestamp='2006-10-27T00:48:05+01:00' user='Dean Earley' visible='true' lat='50.9144399' lon='-1.3920752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984800' timestamp='2007-01-10T00:15:37+00:00' user='nickw' visible='true' lat='50.9414048' lon='-1.3774834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431975' timestamp='2007-06-16T16:26:03+01:00' visible='true' lat='50.9727972' lon='-1.3526066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254948' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.9510506' lon='-1.4169549' />
-  <node id='29815431' timestamp='2007-05-31T21:37:03+01:00' visible='true' lat='50.9873003' lon='-1.354059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133227' timestamp='2006-10-28T01:55:55+01:00' user='Dean Earley' visible='true' lat='50.9286776' lon='-1.3504975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925392' timestamp='2007-06-03T20:40:37+01:00' visible='true' lat='50.9808197' lon='-1.3622916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639971' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.901057' lon='-1.378812'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675146' timestamp='2007-02-06T00:16:35+00:00' user='Dean Earley' visible='true' lat='50.9020992' lon='-1.4023874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325039' timestamp='2007-11-10T22:23:12+00:00' user='Dean Earley' visible='true' lat='50.9560712' lon='-1.4540118' />
-  <node id='18868872' timestamp='2006-10-21T14:41:58+01:00' user='nickw' visible='true' lat='50.9115727' lon='-1.4198195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575780' timestamp='2007-03-16T21:52:30+00:00' user='nickw' visible='true' lat='50.9012924' lon='-1.398737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372800' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9299789' lon='-1.4428721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727700' timestamp='2007-03-23T22:38:14+00:00' user='nickw' visible='true' lat='50.8994558' lon='-1.3514041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021794' timestamp='2007-04-03T00:52:57+01:00' user='Ben' visible='true' lat='50.9576355' lon='-1.3977958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87240154' timestamp='2007-10-25T21:06:49+01:00' user='Nick Dyer' visible='true' lat='50.9342059' lon='-1.447592' />
-  <node id='20976684' timestamp='2007-05-02T23:58:18+01:00' visible='true' lat='50.9397866' lon='-1.423665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120321' timestamp='2007-10-29T08:12:53+00:00' user='nickw' visible='true' lat='50.9315406' lon='-1.4475303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29631655' timestamp='2007-05-26T18:27:18+01:00' visible='true' lat='50.9689188' lon='-1.3503488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998927' timestamp='2007-06-05T23:28:51+01:00' user='nickw' visible='true' lat='50.9843568' lon='-1.436633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464246' timestamp='2007-05-22T00:19:11+01:00' user='Dean Earley' visible='true' lat='50.9376062' lon='-1.4090526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816642' timestamp='2007-05-31T22:10:51+01:00' visible='true' lat='50.9870613' lon='-1.3625062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324341' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.923628' lon='-1.3948577' />
-  <node id='14745435' timestamp='2007-10-31T15:18:30+00:00' user='Dean Earley' visible='true' lat='50.96617' lon='-1.3510635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908537' timestamp='2006-07-18T10:22:51+01:00' user='nickw' visible='true' lat='50.9389599' lon='-1.3678257' />
-  <node id='25296607' timestamp='2007-01-19T10:19:54+00:00' user='Dean Earley' visible='true' lat='50.9707085' lon='-1.3642818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808626' timestamp='2007-11-11T18:09:34+00:00' user='Dean Earley' visible='true' lat='50.9152136' lon='-1.3593973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689050' timestamp='2007-03-24T16:33:45+00:00' user='Dean Earley' visible='true' lat='50.9387237' lon='-1.3845082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194850' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.946107' lon='-1.4076911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957221' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9147575' lon='-1.4185804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949993' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.982784' lon='-1.3856745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110928' timestamp='2006-10-27T23:39:33+01:00' user='Dean Earley' visible='true' lat='50.9349803' lon='-1.3617169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889411' timestamp='2007-02-18T20:18:45+00:00' visible='true' lat='50.9378953' lon='-1.3593793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582915' timestamp='2007-11-19T13:54:41+00:00' user='nickw' visible='true' lat='50.9403479' lon='-1.4278477'>
-    <tag k='name' v='Aldermoor Health Centre' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='30505944' timestamp='2007-06-17T21:57:27+01:00' visible='true' lat='50.9798556' lon='-1.3548073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329529' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9691' lon='-1.43071' />
-  <node id='24667976' timestamp='2007-01-04T21:04:58+00:00' user='nickw' visible='true' lat='50.9883841' lon='-1.4123096'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689084' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9421576' lon='-1.3890528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089136' timestamp='2007-06-08T18:12:09+01:00' visible='true' lat='50.9637406' lon='-1.3791494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339192' timestamp='2007-04-30T20:39:45+01:00' visible='true' lat='50.9698681' lon='-1.3629274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071205' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9249354' lon='-1.3654558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249868' timestamp='2007-04-29T21:41:41+01:00' visible='true' lat='50.918166' lon='-1.4394666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035790' timestamp='2006-10-22T10:18:16+01:00' user='nickw' visible='true' lat='50.9349646' lon='-1.392714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984751' timestamp='2007-04-29T02:33:35+01:00' user='Dean Earley' visible='true' lat='50.9514343' lon='-1.4049109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856360' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.9472786' lon='-1.3929213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160416879' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9093323' lon='-1.4293705' />
-  <node id='29931400' timestamp='2007-06-03T22:43:15+01:00' visible='true' lat='50.9953757' lon='-1.3728513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480582' timestamp='2007-01-27T23:26:08+00:00' visible='true' lat='50.9099726' lon='-1.3901069'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='245147918' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.9092631' lon='-1.4040453' />
-  <node id='25639986' timestamp='2007-03-24T13:44:05+00:00' user='Dean Earley' visible='true' lat='50.9006665' lon='-1.3771801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794906' timestamp='2007-05-30T21:44:19+01:00' user='nickw' visible='true' lat='50.9151459' lon='-1.3545482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632473' timestamp='2007-05-26T19:44:36+01:00' visible='true' lat='50.9595612' lon='-1.3683694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632831' timestamp='2007-05-26T20:07:20+01:00' visible='true' lat='50.9684788' lon='-1.3626817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924342' timestamp='2007-06-03T20:10:37+01:00' visible='true' lat='50.9822571' lon='-1.3606689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266206' timestamp='2007-09-20T19:37:38+01:00' user='mike l' visible='true' lat='50.9401671' lon='-1.3776683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642329' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9508497' lon='-1.3618212' />
-  <node id='29512658' timestamp='2007-05-22T22:55:30+01:00' visible='true' lat='50.9806683' lon='-1.3519306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598943' timestamp='2007-03-04T18:58:22+00:00' user='Dean Earley' visible='true' lat='50.9126948' lon='-1.3653073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621215' timestamp='2007-05-26T11:34:52+01:00' visible='true' lat='50.9705921' lon='-1.3533243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152653' timestamp='2008-02-03T06:22:03+00:00' user='sladen' visible='true' lat='50.907856' lon='-1.3982517' />
-  <node id='2773926' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9221192' lon='-1.4698225' />
-  <node id='28252963' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.9449713' lon='-1.4296222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796857' timestamp='2007-05-30T22:26:18+01:00' user='nickw' visible='true' lat='50.917128' lon='-1.3608063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592379' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9128424' lon='-1.4381179' />
-  <node id='27561978' timestamp='2007-04-23T21:55:00+01:00' user='waschbaer' visible='true' lat='50.9053175' lon='-1.4135347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964124' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.9228433' lon='-1.3760149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360199' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.960109' lon='-1.3718944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668306' timestamp='2007-01-04T21:06:39+00:00' user='nickw' visible='true' lat='50.9875525' lon='-1.3931481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392350' timestamp='2007-05-20T17:52:48+01:00' visible='true' lat='50.9634893' lon='-1.3570282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342569' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9082838' lon='-1.3656756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727949' timestamp='2007-02-18T21:25:17+00:00' visible='true' lat='50.9184108' lon='-1.4038213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114350' timestamp='2007-02-23T21:46:01+00:00' user='nickw' visible='true' lat='50.9027253' lon='-1.3962134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125571485' timestamp='2007-11-20T11:54:53+00:00' user='Nick Dyer' visible='true' lat='50.9636383' lon='-1.4257903' />
-  <node id='29463042' timestamp='2007-05-22T00:01:34+01:00' user='nickw' visible='true' lat='50.909467' lon='-1.408526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127592' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9351958' lon='-1.4379831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507742' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.9388532' lon='-1.3877488'>
-    <tag k='name' v='TULIP' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134109' timestamp='2007-05-15T20:56:07+01:00' user='nickw' visible='true' lat='50.9436787' lon='-1.3847886'>
-    <tag k='name' v='BON CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339164' timestamp='2007-04-30T20:39:37+01:00' visible='true' lat='50.968678' lon='-1.3600337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967604' timestamp='2006-11-12T20:47:02+00:00' user='Dean Earley' visible='true' lat='50.9186898' lon='-1.3928691'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632810' timestamp='2007-05-26T20:06:18+01:00' visible='true' lat='50.9621249' lon='-1.3677395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149855' timestamp='2008-02-03T06:12:31+00:00' user='sladen' visible='true' lat='50.9079859' lon='-1.4024402' />
-  <node id='20971191' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9058995' lon='-1.3991582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254487' timestamp='2006-10-03T23:25:15+01:00' user='Dean Earley' visible='true' lat='50.9552602' lon='-1.4036231' />
-  <node id='30431990' timestamp='2007-06-16T16:26:06+01:00' visible='true' lat='50.9730768' lon='-1.3507936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183647' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9000879' lon='-1.3806466' />
-  <node id='50797906' timestamp='2007-09-13T21:06:05+01:00' user='mike l' visible='true' lat='50.9740459' lon='-1.4518981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263976' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9652595' lon='-1.3709134' />
-  <node id='29953497' timestamp='2007-06-04T21:24:01+01:00' visible='true' lat='50.9920063' lon='-1.3679548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9519443' timestamp='2006-10-03T23:25:15+01:00' user='Dean Earley' visible='true' lat='50.9244461' lon='-1.2790202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305222' timestamp='2006-10-06T23:52:03+01:00' user='Dean Earley' visible='true' lat='50.9955052' lon='-1.3588802' />
-  <node id='13706611' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9177851' lon='-1.3873285' />
-  <node id='25282109' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.9773457' lon='-1.4069459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962270' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9561666' lon='-1.3646068' />
-  <node id='243872' timestamp='2007-05-22T00:20:15+01:00' user='Dean Earley' visible='true' lat='50.9363408' lon='-1.4199842' />
-  <node id='27467496' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.9312818' lon='-1.3789243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398440' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9661766' lon='-1.4181681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640031' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.9148166' lon='-1.3705294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232592' timestamp='2007-04-29T18:59:41+01:00' user='nickw' visible='true' lat='50.9145948' lon='-1.3454717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30255640' timestamp='2007-06-12T20:07:39+01:00' visible='true' lat='50.9806314' lon='-1.3495138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518798' timestamp='2007-04-05T14:21:51+01:00' user='Dean Earley' visible='true' lat='50.9264' lon='-1.38192' />
-  <node id='206162628' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.9715901' lon='-1.3806825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243670' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9388346' lon='-1.4145787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110495' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9292805' lon='-1.4335292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706335' timestamp='2007-04-05T14:21:51+01:00' user='Dean Earley' visible='true' lat='50.9193909' lon='-1.3873514' />
-  <node id='87826011' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.900241' lon='-1.4389398' />
-  <node id='157187226' timestamp='2007-12-08T19:57:33+00:00' user='nickw' visible='true' lat='50.9381761' lon='-1.4503416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924075' timestamp='2007-01-06T14:28:56+00:00' user='nickw' visible='true' lat='50.9301637' lon='-1.3839652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998356' timestamp='2007-06-05T23:05:25+01:00' user='nickw' visible='true' lat='50.9777152' lon='-1.4300968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249991' timestamp='2007-04-29T21:42:09+01:00' visible='true' lat='50.9169726' lon='-1.447349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298242' timestamp='2007-01-06T14:30:57+00:00' user='Dean Earley' visible='true' lat='50.9988858' lon='-1.3571465' />
-  <node id='24668387' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9844541' lon='-1.3963692'>
-    <tag k='name' v='SHANNON WY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962283' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9574047' lon='-1.3624782' />
-  <node id='21600584' timestamp='2006-12-16T11:37:37+00:00' user='David Currie' visible='true' lat='50.9845044' lon='-1.3989545'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275752' timestamp='2006-11-25T23:57:58+00:00' user='nickw' visible='true' lat='50.9177276' lon='-1.4331752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956625' timestamp='2007-06-26T23:45:04+01:00' user='nickw' visible='true' lat='50.9296156' lon='-1.3510051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325205' timestamp='2006-11-11T17:27:16+00:00' user='Dean Earley' visible='true' lat='50.9426866' lon='-1.3623602' />
-  <node id='254964' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9426568' lon='-1.418156' />
-  <node id='30221372' timestamp='2007-06-11T21:42:10+01:00' visible='true' lat='50.985363' lon='-1.3540159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689067' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9270958' lon='-1.3989613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561790' timestamp='2006-12-13T20:19:44+00:00' user='nickw' visible='true' lat='50.9263278' lon='-1.4381754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071432' timestamp='2006-08-11T02:48:16+01:00' user='Dean Earley' visible='true' lat='50.918187' lon='-1.3496359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028824' timestamp='2007-05-23T09:19:07+01:00' user='nickw' visible='true' lat='50.9266276' lon='-1.3622208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110915' timestamp='2007-05-12T09:43:59+01:00' user='nickw' visible='true' lat='50.9354652' lon='-1.3624637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711875' timestamp='2007-06-11T21:42:31+01:00' visible='true' lat='50.9859654' lon='-1.3534355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999032' timestamp='2007-06-05T23:29:03+01:00' user='nickw' visible='true' lat='50.9993375' lon='-1.4307127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431964' timestamp='2007-06-16T16:26:00+01:00' visible='true' lat='50.9848133' lon='-1.3526621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582043' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9311302' lon='-1.4509589' />
-  <node id='28932224' timestamp='2007-09-15T18:42:03+01:00' user='mike l' visible='true' lat='50.9611722' lon='-1.4518284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976673' timestamp='2007-04-29T20:59:46+01:00' user='Dean Earley' visible='true' lat='50.9378279' lon='-1.4274671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596750' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9042068' lon='-1.4136978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='658451' timestamp='2007-04-05T14:21:51+01:00' user='Dean Earley' visible='true' lat='50.9197109' lon='-1.3971211' />
-  <node id='12594958' timestamp='2006-08-04T11:58:48+01:00' user='nickw' visible='true' lat='50.9167233' lon='-1.411001'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='160179640' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9098088' lon='-1.3726214' />
-  <node id='28194435' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9475111' lon='-1.4327888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27558571' timestamp='2007-04-23T19:26:58+01:00' visible='true' lat='50.9261158' lon='-1.3903834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296377' timestamp='2007-01-19T09:58:45+00:00' user='Dean Earley' visible='true' lat='50.9733963' lon='-1.3506401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348707' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9809059' lon='-1.4229027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972823' timestamp='2007-03-25T19:25:22+01:00' user='Dean Earley' visible='true' lat='50.9002724' lon='-1.3955869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342586' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9092586' lon='-1.3631196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419245' timestamp='2006-12-02T22:59:15+00:00' user='Dean Earley' visible='true' lat='50.9380613' lon='-1.3610528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17658116' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9105394' lon='-1.4314669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160392578' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9188295' lon='-1.4605957' />
-  <node id='14745501' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9579711' lon='-1.3966457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704781' timestamp='2006-08-26T00:06:06+01:00' user='dmgroom' visible='true' lat='50.8907837' lon='-1.4196834' />
-  <node id='10217213' timestamp='2006-09-04T01:04:09+01:00' user='Dean Earley' visible='true' lat='50.9160429' lon='-1.3589235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249830' timestamp='2007-04-29T21:41:35+01:00' visible='true' lat='50.9183725' lon='-1.4455772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464261' timestamp='2007-05-22T00:19:15+01:00' user='Dean Earley' visible='true' lat='50.9372487' lon='-1.4068433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021764' timestamp='2007-04-03T00:52:41+01:00' user='Ben' visible='true' lat='50.9401966' lon='-1.3788378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008938' timestamp='2007-05-12T15:26:03+01:00' user='nickw' visible='true' lat='50.9320406' lon='-1.3499428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254854' timestamp='2007-05-20T00:11:03+01:00' user='Dean Earley' visible='true' lat='50.9140722' lon='-1.4497308' />
-  <node id='18232094' timestamp='2006-10-14T13:19:08+01:00' user='nickw' visible='true' lat='50.9152146' lon='-1.4106493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071244' timestamp='2006-08-11T02:47:59+01:00' user='Dean Earley' visible='true' lat='50.9233992' lon='-1.3673297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660059' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.9043557' lon='-1.4103863' />
-  <node id='28830628' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9275269' lon='-1.3595364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668053' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9877588' lon='-1.4020981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194844' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.944233' lon='-1.4081725'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='447391' timestamp='2007-04-05T14:21:52+01:00' user='Dean Earley' visible='true' lat='50.9238' lon='-1.40481' />
-  <node id='25764478' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true' lat='50.9086517' lon='-1.3924932' />
-  <node id='24949946' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9948894' lon='-1.3877009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874086' timestamp='2007-05-08T14:50:40+01:00' visible='true' lat='50.9384428' lon='-1.4459563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325028' timestamp='2006-11-11T17:28:05+00:00' user='Dean Earley' visible='true' lat='50.9593993' lon='-1.4396132' />
-  <node id='17658111' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9121359' lon='-1.4505986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418270' timestamp='2007-05-02T00:31:38+01:00' visible='true' lat='50.9666735' lon='-1.3615774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945378' timestamp='2007-03-31T20:34:33+01:00' user='nickw' visible='true' lat='50.9146054' lon='-1.3385052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342625' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9100854' lon='-1.3667553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134128' timestamp='2007-05-22T00:20:15+01:00' user='Dean Earley' visible='true' lat='50.9395544' lon='-1.4046913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398466' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.9272785' lon='-1.4157806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254594' timestamp='2006-10-27T00:58:34+01:00' user='Dean Earley' visible='true' lat='50.9118097' lon='-1.384215' />
-  <node id='28348121' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9331599' lon='-1.3637293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254458' timestamp='2006-09-02T18:32:40+01:00' user='Dean Earley' visible='true' lat='50.9080266' lon='-1.4015221' />
-  <node id='26575733' timestamp='2007-03-25T19:25:23+01:00' user='Dean Earley' visible='true' lat='50.9004084' lon='-1.3944435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87799821' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8953926' lon='-1.3888446' />
-  <node id='29710914' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9829444' lon='-1.3584793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071214' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9195089' lon='-1.3706229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162092' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9707582' lon='-1.3808613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146235' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9184735' lon='-1.4035303' />
-  <node id='29026663' timestamp='2007-05-13T10:02:48+01:00' user='nickw' visible='true' lat='50.922957' lon='-1.4032009'>
-    <tag k='name' v='NORCLIFFE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109280' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true' lat='50.9341418' lon='-1.4244551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29860317' timestamp='2007-06-02T11:30:15+01:00' visible='true' lat='50.9202967' lon='-1.4422488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997506' timestamp='2007-06-05T22:43:51+01:00' user='nickw' visible='true' lat='51.0038632' lon='-1.3599671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236147' timestamp='2007-04-29T19:26:02+01:00' user='Andy Street' visible='true' lat='50.9086382' lon='-1.3516768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710559' timestamp='2007-05-28T14:15:20+01:00' visible='true' lat='50.9832495' lon='-1.3590088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130958' timestamp='2006-10-28T01:45:36+01:00' user='Dean Earley' visible='true' lat='50.9320057' lon='-1.3587394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817631' timestamp='2007-05-31T22:21:09+01:00' visible='true' lat='50.9870838' lon='-1.3645272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675792' timestamp='2007-02-06T01:03:02+00:00' user='Dean Earley' visible='true' lat='50.9096308' lon='-1.4470621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14806971' timestamp='2006-11-25T23:49:19+00:00' user='nickw' visible='true' lat='50.9122322' lon='-1.4336041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226376' timestamp='2007-06-11T22:23:58+01:00' visible='true' lat='50.9811755' lon='-1.3530761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127573' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9353868' lon='-1.4403969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134840' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9279597' lon='-1.3538501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346745' timestamp='2007-03-04T18:57:50+00:00' user='Dean Earley' visible='true' lat='50.9156254' lon='-1.3656288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92720593' timestamp='2007-10-30T18:01:30+00:00' user='Nick Dyer' visible='true' lat='50.9026423' lon='-1.417295'>
-    <tag k='building' v='yes' />
-    <tag k='name' v='Rank Hovis Flour Mills' />
-  </node>
-  <node id='20973105' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9054208' lon='-1.4094403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90589189' timestamp='2007-10-28T20:32:03+00:00' user='Nick Dyer' visible='true' lat='50.9036634' lon='-1.423973' />
-  <node id='59936559' timestamp='2007-09-26T21:57:27+01:00' visible='true' lat='50.9059506' lon='-1.4106677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661184' timestamp='2007-04-05T14:21:52+01:00' user='Dean Earley' visible='true' lat='50.9129318' lon='-1.3619863' />
-  <node id='29814616' timestamp='2007-05-31T21:22:59+01:00' visible='true' lat='50.9887817' lon='-1.3573101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504339' timestamp='2007-06-17T21:40:03+01:00' visible='true' lat='50.9867023' lon='-1.3502923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730509' timestamp='2007-05-28T19:36:38+01:00' visible='true' lat='50.9710521' lon='-1.3701257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29693184' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8949974' lon='-1.3913337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961038' timestamp='2006-11-11T17:12:24+00:00' user='Dean Earley' visible='true' lat='50.9488777' lon='-1.3954576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133023' timestamp='2007-05-15T20:36:38+01:00' user='nickw' visible='true' lat='50.9332553' lon='-1.3751404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419453' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9408204' lon='-1.3708938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372785' timestamp='2007-05-01T10:05:22+01:00' visible='true' lat='50.9298956' lon='-1.4444557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249915' timestamp='2007-04-29T21:41:47+01:00' visible='true' lat='50.9163208' lon='-1.4543877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727996' timestamp='2006-09-02T19:02:02+01:00' user='Dean Earley' visible='true' lat='50.9228201' lon='-1.4051509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110986' timestamp='2007-10-29T07:59:20+00:00' user='nickw' visible='true' lat='50.9271111' lon='-1.4403982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721051' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9612595' lon='-1.3720771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710910' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9834052' lon='-1.3576841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149817' timestamp='2008-02-03T06:12:18+00:00' user='sladen' visible='true' lat='50.9082781' lon='-1.4027922' />
-  <node id='90577075' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9116086' lon='-1.446246' />
-  <node id='635128' timestamp='2006-03-17T18:23:53+00:00' user='nickw' visible='true' lat='50.9003789' lon='-1.3533929' />
-  <node id='20107332' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9332894' lon='-1.3503612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142617007' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9136064' lon='-1.4171791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001327' timestamp='2007-05-12T09:40:14+01:00' user='nickw' visible='true' lat='50.922735' lon='-1.3829871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704526' timestamp='2007-05-28T10:40:39+01:00' visible='true' lat='50.9806756' lon='-1.3570961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152607' timestamp='2008-02-03T06:21:57+00:00' user='sladen' visible='true' lat='50.9077694' lon='-1.3983204' />
-  <node id='90593914' timestamp='2007-10-28T20:36:49+00:00' user='Nick Dyer' visible='true' lat='50.9129723' lon='-1.4446753' />
-  <node id='30956610' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9292271' lon='-1.3504511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601364' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9180073' lon='-1.4818495'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29998574' timestamp='2007-06-05T23:13:53+01:00' user='nickw' visible='true' lat='50.9610508' lon='-1.4447187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632857' timestamp='2007-05-26T20:07:39+01:00' visible='true' lat='50.967096' lon='-1.361883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871596' timestamp='2007-06-02T18:55:04+01:00' visible='true' lat='50.9159196' lon='-1.3499088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388913' timestamp='2007-04-05T14:21:52+01:00' user='Dean Earley' visible='true' lat='50.9441296' lon='-1.4036097' />
-  <node id='26945395' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9037772' lon='-1.3436505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935757' timestamp='2007-05-11T00:50:45+01:00' visible='true' lat='50.9407223' lon='-1.445023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29533947' timestamp='2007-05-23T17:04:40+01:00' visible='true' lat='50.9704413' lon='-1.3552257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092031' timestamp='2006-11-19T12:29:34+00:00' user='nickw' visible='true' lat='50.971535' lon='-1.442317'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179513' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9528531' lon='-1.4028073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872364' timestamp='2007-06-02T19:03:56+01:00' visible='true' lat='50.9171025' lon='-1.3498739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243591' timestamp='2007-04-29T20:24:57+01:00' user='Dean Earley' visible='true' lat='50.9366932' lon='-1.4130354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226993' timestamp='2007-06-11T22:32:13+01:00' visible='true' lat='50.9820316' lon='-1.3533615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724277' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9094297' lon='-1.4094124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409622' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9128933' lon='-1.4383741' />
-  <node id='25639907' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9041634' lon='-1.3810808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254357' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9464992' lon='-1.425881' />
-  <node id='298304' timestamp='2005-12-06T02:08:01+00:00' visible='true' lat='50.9481453' lon='-1.3852425' />
-  <node id='25932495' timestamp='2007-12-10T19:31:28+00:00' user='sladen' visible='true' lat='50.9500837' lon='-1.3568457' />
-  <node id='29134818' timestamp='2007-05-15T20:53:13+01:00' user='nickw' visible='true' lat='50.9441804' lon='-1.3868079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325190' timestamp='2005-12-16T23:01:26+00:00' user='80n' visible='true' lat='50.949261' lon='-1.3704749' />
-  <node id='26781152' timestamp='2007-03-25T18:42:11+01:00' user='Dean Earley' visible='true' lat='50.9009896' lon='-1.3727535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976771' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9294813' lon='-1.4192409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530521' timestamp='2007-04-05T14:21:52+01:00' user='Dean Earley' visible='true' lat='50.9506783' lon='-1.3712968' />
-  <node id='29926697' timestamp='2007-06-03T21:00:16+01:00' visible='true' lat='50.9789169' lon='-1.3648638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964158' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.920657' lon='-1.3775432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071346' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9165288' lon='-1.3650559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914333' timestamp='2007-06-03T16:16:04+01:00' visible='true' lat='50.9847156' lon='-1.3601562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414293' timestamp='2007-05-01T23:50:12+01:00' user='nickw' visible='true' lat='50.9389995' lon='-1.3730217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727683' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9138138' lon='-1.3567291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838347' timestamp='2007-06-01T20:15:02+01:00' visible='true' lat='50.981383' lon='-1.3619036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252914' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9460662' lon='-1.4291732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30259416' timestamp='2007-06-12T21:04:31+01:00' visible='true' lat='50.9780917' lon='-1.358811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544340' timestamp='2007-04-05T14:21:53+01:00' user='Dean Earley' visible='true' lat='50.9391' lon='-1.37172' />
-  <node id='244310986' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9664465' lon='-1.4381648' />
-  <node id='91127575' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.935152' lon='-1.4400989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949895' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9941642' lon='-1.3786417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348726' timestamp='2006-10-16T21:59:55+01:00' user='nickw' visible='true' lat='50.9912343' lon='-1.4419098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340622' timestamp='2007-06-13T09:24:42+01:00' visible='true' lat='50.9643765' lon='-1.3781892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146242' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9141932' lon='-1.4015133' />
-  <node id='29911803' timestamp='2007-06-03T15:31:38+01:00' visible='true' lat='50.9871622' lon='-1.3540286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160207841' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9229311' lon='-1.3820799' />
-  <node id='25761517' timestamp='2007-05-12T09:45:13+01:00' user='nickw' visible='true' lat='50.9369893' lon='-1.3634887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972787' timestamp='2006-11-13T00:06:58+00:00' user='Dean Earley' visible='true' lat='50.9064668' lon='-1.4154884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9736871' timestamp='2007-02-11T00:33:29+00:00' visible='true' lat='50.9180245' lon='-1.3811627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480797' timestamp='2007-01-27T23:32:37+00:00' visible='true' lat='50.9224961' lon='-1.3888335'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30124203' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.9224802' lon='-1.3484356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929859' timestamp='2007-06-03T22:13:29+01:00' visible='true' lat='50.9781078' lon='-1.3658824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282143' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.974844' lon='-1.4097162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518772' timestamp='2007-04-05T14:21:53+01:00' user='Dean Earley' visible='true' lat='50.9147' lon='-1.3931624' />
-  <node id='28249843' timestamp='2007-04-29T21:41:36+01:00' visible='true' lat='50.9197288' lon='-1.442215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189057' timestamp='2006-11-22T23:51:56+00:00' user='crouchingbadger' visible='true' lat='50.930144' lon='-1.449576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14707283' timestamp='2006-12-14T23:57:11+00:00' user='Dean Earley' visible='true' lat='50.9663843' lon='-1.3282731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222184' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9147278' lon='-1.4515748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903412' timestamp='2007-05-09T23:36:03+01:00' visible='true' lat='50.9460134' lon='-1.362403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704541' timestamp='2007-05-28T10:40:40+01:00' visible='true' lat='50.9776902' lon='-1.3612392'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008370' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9266062' lon='-1.3523665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122344806' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true' lat='50.9189204' lon='-1.4371154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579409' timestamp='2006-12-14T13:52:53+00:00' user='David Currie' visible='true' lat='50.9777618' lon='-1.4043187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237238' timestamp='2007-04-29T19:42:04+01:00' user='Andy Street' visible='true' lat='50.9022485' lon='-1.3575218'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325175' timestamp='2006-11-11T17:28:36+00:00' user='Dean Earley' visible='true' lat='50.9497365' lon='-1.3969927' />
-  <node id='13706596' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9182559' lon='-1.3864273'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28249898' timestamp='2007-04-29T21:41:44+01:00' visible='true' lat='50.9139881' lon='-1.447947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561543' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9227023' lon='-1.4236865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636940' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9162232' lon='-1.42991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096965' timestamp='2007-06-08T23:24:16+01:00' visible='true' lat='50.9642104' lon='-1.3806881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17769052' timestamp='2007-02-18T21:25:18+00:00' visible='true' lat='50.917677' lon='-1.3906323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727962' timestamp='2006-12-18T23:27:23+00:00' visible='true' lat='50.9259192' lon='-1.3863097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613408' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9856285' lon='-1.4246445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110544' timestamp='2007-10-29T07:57:51+00:00' user='nickw' visible='true' lat='50.9277153' lon='-1.4361516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148854' timestamp='2008-02-03T06:07:44+00:00' user='sladen' visible='true' lat='50.9045652' lon='-1.4011785' />
-  <node id='469865' timestamp='2007-04-05T14:21:53+01:00' user='Dean Earley' visible='true' lat='50.9134' lon='-1.42445' />
-  <node id='13706767' timestamp='2007-04-05T14:21:53+01:00' user='Dean Earley' visible='true' lat='50.888' lon='-1.3805938' />
-  <node id='29001421' timestamp='2007-05-12T09:45:12+01:00' user='nickw' visible='true' lat='50.935397' lon='-1.3666564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815075' timestamp='2007-05-31T21:31:03+01:00' visible='true' lat='50.9875985' lon='-1.3540321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419436' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9411846' lon='-1.3707827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903941' timestamp='2007-10-16T11:34:28+01:00' user='Dean Earley' visible='true' lat='50.9508534' lon='-1.3638183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928597' timestamp='2007-06-03T21:52:06+01:00' visible='true' lat='50.9786001' lon='-1.3610783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530529' timestamp='2007-06-11T21:58:23+01:00' visible='true' lat='50.9842498' lon='-1.3542527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601307' timestamp='2006-09-01T00:16:03+01:00' user='nickw' visible='true' lat='50.8311868' lon='-1.5189028'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30956636' timestamp='2007-06-26T23:45:06+01:00' user='nickw' visible='true' lat='50.9327143' lon='-1.3521895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563355' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9296126' lon='-1.3998338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961013' timestamp='2006-11-11T17:11:54+00:00' user='Dean Earley' visible='true' lat='50.9280131' lon='-1.5749997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976790' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9269895' lon='-1.4205918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387824' timestamp='2007-04-27T23:44:33+01:00' visible='true' lat='50.9316585' lon='-1.3880169' />
-  <node id='48958623' timestamp='2007-12-07T20:56:34+00:00' user='Steve Jeapes' visible='true' lat='50.9084919' lon='-1.398297'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='28243475' timestamp='2007-04-29T20:23:53+01:00' user='Dean Earley' visible='true' lat='50.9397186' lon='-1.4087247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348317' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9255342' lon='-1.3579282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908384' timestamp='2007-04-19T17:50:52+01:00' visible='true' lat='50.9341792' lon='-1.3772007' />
-  <node id='29466123' timestamp='2007-05-22T00:38:10+01:00' user='Dean Earley' visible='true' lat='50.9819919' lon='-1.4457771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816431' timestamp='2007-05-31T22:00:52+01:00' visible='true' lat='50.9903743' lon='-1.3550414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957212' timestamp='2007-04-03T00:52:23+01:00' user='Dean Earley' visible='true' lat='50.9168912' lon='-1.4264495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003041' timestamp='2007-05-22T00:20:16+01:00' user='Dean Earley' visible='true' lat='50.9412473' lon='-1.4046891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924325' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9813552' lon='-1.3841276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816739' timestamp='2007-05-31T22:13:32+01:00' visible='true' lat='50.991231' lon='-1.3555828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480561' timestamp='2007-01-27T23:21:20+00:00' visible='true' lat='50.9109726' lon='-1.3895054'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28583023' timestamp='2007-05-02T23:57:54+01:00' visible='true' lat='50.9380163' lon='-1.4340059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949857' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9958897' lon='-1.3704566'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675875' timestamp='2007-04-05T14:21:54+01:00' user='Dean Earley' visible='true' lat='50.9292832' lon='-1.3704215' />
-  <node id='27021809' timestamp='2007-04-03T00:53:04+01:00' user='Ben' visible='true' lat='50.9374573' lon='-1.3994446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447502' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9090332' lon='-1.3895787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398767' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9434397' lon='-1.4183833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932431' timestamp='2007-05-22T00:40:35+01:00' user='Dean Earley' visible='true' lat='50.9816513' lon='-1.4463847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831096' timestamp='2008-02-03T06:17:48+00:00' user='sladen' visible='true' lat='50.9101399' lon='-1.4064915' />
-  <node id='24949912' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9918133' lon='-1.3773305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217895' timestamp='2006-07-09T23:00:37+01:00' user='Dean Earley' visible='true' lat='50.9267403' lon='-1.364841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021719' timestamp='2007-04-03T00:50:55+01:00' user='Dean Earley' visible='true' lat='50.9177057' lon='-1.4553356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19229538' timestamp='2007-05-22T00:20:16+01:00' user='Dean Earley' visible='true' lat='50.9352276' lon='-1.4130765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30505716' timestamp='2007-06-17T21:56:40+01:00' visible='true' lat='50.9797539' lon='-1.3541577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133201' timestamp='2006-10-28T01:55:52+01:00' user='Dean Earley' visible='true' lat='50.9292194' lon='-1.3508886'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325260' timestamp='2006-11-11T17:28:40+00:00' user='Dean Earley' visible='true' lat='50.9246736' lon='-1.3151873' />
-  <node id='20110815' timestamp='2006-10-27T23:39:17+01:00' user='Dean Earley' visible='true' lat='50.9351347' lon='-1.3667644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924208' timestamp='2007-01-06T14:37:58+00:00' user='nickw' visible='true' lat='50.9556565' lon='-1.3632442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689138' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9396351' lon='-1.3853973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001467' timestamp='2007-05-12T09:49:22+01:00' user='nickw' visible='true' lat='50.9419743' lon='-1.3513916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229580' timestamp='2007-06-12T00:14:40+01:00' user='nickw' visible='true' lat='50.9341303' lon='-1.3541128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935746' timestamp='2007-05-11T00:50:40+01:00' visible='true' lat='50.9401564' lon='-1.4466253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462614' timestamp='2007-05-21T23:56:39+01:00' user='nickw' visible='true' lat='50.9037975' lon='-1.3976739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237034' timestamp='2007-04-29T19:32:43+01:00' user='nickw' visible='true' lat='50.9131595' lon='-1.343254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92683066' timestamp='2007-10-31T12:24:57+00:00' user='Dean Earley' visible='true' lat='50.9619871' lon='-1.4265356' />
-  <node id='29026816' timestamp='2007-05-13T10:10:59+01:00' user='nickw' visible='true' lat='50.9203954' lon='-1.4039731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632161' timestamp='2007-05-26T19:20:04+01:00' visible='true' lat='50.9571239' lon='-1.3676731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183722' timestamp='2007-04-29T02:25:36+01:00' user='Dean Earley' visible='true' lat='50.9523264' lon='-1.4072679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949929' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9918884' lon='-1.3830521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325220' timestamp='2006-11-11T17:28:40+00:00' user='Dean Earley' visible='true' lat='50.9371662' lon='-1.3503729' />
-  <node id='29468565' timestamp='2007-05-22T01:06:59+01:00' user='Dean Earley' visible='true' lat='50.9143696' lon='-1.4514028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87800149' timestamp='2007-10-26T11:41:57+01:00' user='Nick Dyer' visible='true' lat='50.9010495' lon='-1.4424631' />
-  <node id='20971153' timestamp='2006-11-12T22:56:57+00:00' user='Dean Earley' visible='true' lat='50.9078071' lon='-1.4038192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306291' timestamp='2005-12-11T21:46:56+00:00' user='nickw' visible='true' lat='50.92206' lon='-1.4038253' />
-  <node id='26945408' timestamp='2007-03-31T20:34:37+01:00' user='nickw' visible='true' lat='50.9003317' lon='-1.3504251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071389' timestamp='2006-08-11T02:48:13+01:00' user='Dean Earley' visible='true' lat='50.9255389' lon='-1.3596394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342770' timestamp='2007-04-30T22:16:36+01:00' user='nickw' visible='true' lat='50.9061267' lon='-1.3644905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125580526' timestamp='2007-11-20T11:56:43+00:00' user='Nick Dyer' visible='true' lat='50.9626436' lon='-1.4245801' />
-  <node id='29815658' timestamp='2007-05-31T21:48:01+01:00' visible='true' lat='50.9911002' lon='-1.3534057'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160420928' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9071999' lon='-1.4225641' />
-  <node id='28342612' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9105489' lon='-1.365305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947162' timestamp='2007-02-16T20:51:22+00:00' user='nickw' visible='true' lat='50.9116984' lon='-1.3941696'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579538' timestamp='2006-12-14T14:06:05+00:00' user='David Currie' visible='true' lat='50.9776687' lon='-1.4018689'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726187' timestamp='2006-09-02T18:21:41+01:00' user='Dean Earley' visible='true' lat='50.9102779' lon='-1.4003306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303931' timestamp='2007-04-29T20:37:37+01:00' user='Dean Earley' visible='true' lat='50.9363725' lon='-1.4152142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071372' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.917074' lon='-1.3673659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997502' timestamp='2007-06-05T22:43:51+01:00' user='nickw' visible='true' lat='51.001913' lon='-1.3620332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577054' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9063047' lon='-1.4191236' />
-  <node id='25340621' timestamp='2007-06-13T09:24:43+01:00' visible='true' lat='50.9647179' lon='-1.3790893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911933' timestamp='2007-06-03T15:38:21+01:00' visible='true' lat='50.9855751' lon='-1.3569816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11151902' timestamp='2006-07-21T23:34:43+01:00' user='Dean Earley' visible='true' lat='50.9497486' lon='-1.3764621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949810' timestamp='2007-12-06T22:11:07+00:00' user='Dean Earley' visible='true' lat='50.9830168' lon='-1.3879293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122337287' timestamp='2007-11-18T19:12:33+00:00' user='nickw' visible='true' lat='50.9184288' lon='-1.4385508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471843' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.9382537' lon='-1.367591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463014' timestamp='2007-05-22T00:01:31+01:00' user='nickw' visible='true' lat='50.9108703' lon='-1.4028811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466106' timestamp='2007-05-22T00:38:10+01:00' user='Dean Earley' visible='true' lat='50.9832637' lon='-1.4463187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179496' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9565161' lon='-1.4078951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071320' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.9208834' lon='-1.3616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549391' timestamp='2007-05-24T11:22:52+01:00' visible='true' lat='50.9629084' lon='-1.3750528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160225518' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9025941' lon='-1.3920277' />
-  <node id='90665704' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9001065' lon='-1.4142916' />
-  <node id='169435818' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.937023' lon='-1.4330851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561573' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9246196' lon='-1.4287163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931337' timestamp='2007-06-03T22:43:01+01:00' visible='true' lat='50.9947556' lon='-1.3725331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392367' timestamp='2007-05-20T17:53:08+01:00' visible='true' lat='50.9657655' lon='-1.3518358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342595' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9040721' lon='-1.3717816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721052' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9612009' lon='-1.3724356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949874' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9993406' lon='-1.3908796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997562' timestamp='2007-06-05T22:44:01+01:00' user='nickw' visible='true' lat='50.9956615' lon='-1.350431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223554' timestamp='2007-06-11T21:57:53+01:00' visible='true' lat='50.9844257' lon='-1.3534237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107347' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9255528' lon='-1.3547465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581808' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9182429' lon='-1.4480914' />
-  <node id='28240326' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9066946' lon='-1.3522072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296313' timestamp='2007-01-19T09:52:17+00:00' user='Dean Earley' visible='true' lat='50.9763072' lon='-1.3641993'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398421' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9673959' lon='-1.4122867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243621' timestamp='2007-04-29T20:25:01+01:00' user='Dean Earley' visible='true' lat='50.9375534' lon='-1.4151976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178403' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.986929' lon='-1.351166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718198' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.9353367' lon='-1.4453225' />
-  <node id='29926268' timestamp='2007-06-03T20:57:37+01:00' visible='true' lat='50.9795205' lon='-1.3668355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346791' timestamp='2007-03-04T18:57:58+00:00' user='Dean Earley' visible='true' lat='50.9150238' lon='-1.3693253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282136' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9767475' lon='-1.4059472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447412' timestamp='2007-03-09T20:54:23+00:00' user='nickw' visible='true' lat='50.9075988' lon='-1.3935272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219694' timestamp='2007-12-08T20:21:41+00:00' user='nickw' visible='true' lat='50.9448562' lon='-1.4440463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474860' timestamp='2007-09-23T16:33:12+01:00' user='mike l' visible='true' lat='50.9379993' lon='-1.3658415' />
-  <node id='18232131' timestamp='2006-10-14T13:21:27+01:00' user='nickw' visible='true' lat='50.914076' lon='-1.3997337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256868' timestamp='2007-06-12T20:38:11+01:00' visible='true' lat='50.9790692' lon='-1.3575208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254504' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.9050592' lon='-1.389687' />
-  <node id='28932239' timestamp='2007-09-15T19:03:59+01:00' user='mike l' visible='true' lat='50.9753787' lon='-1.447254'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398372' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9575695' lon='-1.4364222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418538' timestamp='2007-05-02T17:07:34+01:00' visible='true' lat='50.9635211' lon='-1.3717524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675801' timestamp='2007-05-22T01:07:51+01:00' user='Dean Earley' visible='true' lat='50.9039604' lon='-1.4177435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388927' timestamp='2007-04-05T14:21:54+01:00' user='Dean Earley' visible='true' lat='50.9432' lon='-1.39391' />
-  <node id='12889435' timestamp='2007-01-19T18:20:24+00:00' user='Dean Earley' visible='true' lat='50.950802' lon='-1.3688479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160266395' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9771664' lon='-1.3776339' />
-  <node id='254423' timestamp='2005-11-15T15:40:08+00:00' user='nickw' visible='true' lat='50.9261033' lon='-1.3669775' />
-  <node id='28246066' timestamp='2007-04-29T20:52:46+01:00' user='Dean Earley' visible='true' lat='50.93579' lon='-1.4204188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689108' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9399481' lon='-1.3803909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160220278' timestamp='2007-12-10T19:12:44+00:00' user='sladen' visible='true' lat='50.9151934' lon='-1.3903454' />
-  <node id='30506819' timestamp='2007-06-17T22:03:35+01:00' visible='true' lat='50.978673' lon='-1.3635615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250061' timestamp='2007-04-29T21:42:21+01:00' visible='true' lat='50.9150956' lon='-1.4501147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743140' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9275101' lon='-1.4324001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544327' timestamp='2007-04-05T14:21:55+01:00' user='Dean Earley' visible='true' lat='50.9289' lon='-1.3867' />
-  <node id='20973120' timestamp='2006-11-13T00:42:44+00:00' user='Dean Earley' visible='true' lat='50.905544' lon='-1.4100386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663592' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9064557' lon='-1.4055883' />
-  <node id='28243569' timestamp='2007-04-29T20:24:40+01:00' user='Dean Earley' visible='true' lat='50.9388005' lon='-1.4115998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026823' timestamp='2007-05-13T10:11:00+01:00' user='nickw' visible='true' lat='50.9200072' lon='-1.4006554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423482' timestamp='2007-12-14T21:35:45+00:00' user='nickw' visible='true' lat='50.9323405' lon='-1.443535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808653' timestamp='2007-11-11T18:09:35+00:00' user='Dean Earley' visible='true' lat='50.9149155' lon='-1.3581164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561803' timestamp='2006-12-16T10:14:15+00:00' user='nickw' visible='true' lat='50.9215389' lon='-1.4401993'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001308' timestamp='2007-05-12T09:40:11+01:00' user='nickw' visible='true' lat='50.9230737' lon='-1.3825347'>
-    <tag k='name' v='GRIFFIN CT' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18347837' timestamp='2007-02-18T20:19:13+00:00' visible='true' lat='50.9316486' lon='-1.4137487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931392' timestamp='2007-06-03T22:43:14+01:00' visible='true' lat='50.9946069' lon='-1.3733738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575774' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9013282' lon='-1.3948465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269154' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='51.0023033' lon='-1.3327733' />
-  <node id='29464268' timestamp='2007-05-22T00:19:16+01:00' user='Dean Earley' visible='true' lat='50.9502393' lon='-1.4032554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25635427' timestamp='2007-02-04T18:26:16+00:00' user='Dean Earley' visible='true' lat='50.9601507' lon='-1.3612793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240309' timestamp='2007-04-29T20:02:54+01:00' user='Andy Street' visible='true' lat='50.9057176' lon='-1.3542073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280990' timestamp='2007-03-04T18:58:32+00:00' user='Dean Earley' visible='true' lat='50.9165366' lon='-1.3689393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548668' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.9628074' lon='-1.361707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227236' timestamp='2007-10-29T07:46:03+00:00' user='nickw' visible='true' lat='50.931854' lon='-1.417742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549357' timestamp='2007-05-24T11:22:48+01:00' visible='true' lat='50.9713083' lon='-1.3713393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282083' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.975944' lon='-1.4064376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512883' timestamp='2008-01-29T12:02:01+00:00' user='Dean Earley' visible='true' lat='50.964314' lon='-1.3507515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278618' timestamp='2007-08-14T04:48:07+01:00' user='andrewpmk' visible='true' lat='50.9080178' lon='-1.3980604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816397' timestamp='2007-05-31T21:56:27+01:00' visible='true' lat='50.9886614' lon='-1.3551082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223081' timestamp='2007-06-11T21:51:51+01:00' visible='true' lat='50.9842567' lon='-1.3551327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342556' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9068032' lon='-1.3672917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160283364' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9200364' lon='-1.4767941' />
-  <node id='29990896' timestamp='2007-06-05T20:41:25+01:00' visible='true' lat='51.0002948' lon='-1.3527544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830649' timestamp='2007-05-05T09:03:31+01:00' user='nickw' visible='true' lat='50.9256109' lon='-1.366013'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347760' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9299921' lon='-1.3610473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632456' timestamp='2007-05-26T19:27:15+01:00' visible='true' lat='50.9606138' lon='-1.3687008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504757' timestamp='2007-06-17T21:50:33+01:00' visible='true' lat='50.9816923' lon='-1.3584009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134835' timestamp='2006-10-28T02:02:31+01:00' user='Dean Earley' visible='true' lat='50.9285638' lon='-1.353906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346776' timestamp='2007-03-04T18:57:56+00:00' user='Dean Earley' visible='true' lat='50.9144926' lon='-1.3663165'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290769' timestamp='2007-06-13T09:24:06+01:00' visible='true' lat='50.968725' lon='-1.379917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564835' timestamp='2006-10-27T22:28:02+01:00' user='Dean Earley' visible='true' lat='50.934797' lon='-1.3536213'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29815643' timestamp='2007-05-31T21:47:57+01:00' visible='true' lat='50.9901628' lon='-1.3571702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964045' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='50.9983367' lon='-1.4447823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704912' timestamp='2006-08-25T22:23:08+01:00' user='dmgroom' visible='true' lat='50.900716' lon='-1.4524485' />
-  <node id='28249796' timestamp='2007-04-29T21:41:30+01:00' visible='true' lat='50.9200727' lon='-1.4458255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341756' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9093087' lon='-1.3594642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601292' timestamp='2006-09-01T00:16:01+01:00' user='nickw' visible='true' lat='50.8159089' lon='-1.5743065'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='254534' timestamp='2006-09-02T18:32:41+01:00' user='Dean Earley' visible='true' lat='50.913239' lon='-1.4004836' />
-  <node id='29133042' timestamp='2007-05-15T20:36:42+01:00' user='nickw' visible='true' lat='50.9331363' lon='-1.3740378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21378695' timestamp='2007-09-15T18:41:56+01:00' user='mike l' visible='true' lat='50.9571368' lon='-1.4519974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914402' timestamp='2007-06-03T16:22:48+01:00' visible='true' lat='50.985849' lon='-1.3615276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111712' timestamp='2007-10-29T08:01:16+00:00' user='nickw' visible='true' lat='50.9274195' lon='-1.4376491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='95828984' timestamp='2007-11-02T14:14:14+00:00' user='Nick Dyer' visible='true' lat='50.9067705' lon='-1.407976' />
-  <node id='21746406' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9917621' lon='-1.3414955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142618212' timestamp='2007-11-29T22:29:51+00:00' user='nickw' visible='true' lat='50.9139508' lon='-1.4163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231288' timestamp='2007-04-30T22:14:06+01:00' user='nickw' visible='true' lat='50.9087259' lon='-1.3638995'>
-    <tag k='name' v='MAGNOLIA' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000943' timestamp='2007-05-12T09:30:27+01:00' user='nickw' visible='true' lat='50.9195007' lon='-1.4091268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507152' timestamp='2007-06-17T22:07:50+01:00' visible='true' lat='50.9760984' lon='-1.359045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194386' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9452231' lon='-1.4388963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122319000' timestamp='2007-12-10T20:57:23+00:00' user='sladen' visible='true' lat='50.9126552' lon='-1.4330869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089121' timestamp='2007-06-08T18:12:08+01:00' visible='true' lat='50.9648348' lon='-1.3779443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194348' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9451431' lon='-1.4376908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724243' timestamp='2006-10-07T00:25:16+01:00' user='nickw' visible='true' lat='50.9122628' lon='-1.4097173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956587' timestamp='2007-06-26T23:44:58+01:00' user='nickw' visible='true' lat='50.9278122' lon='-1.3481764'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480584' timestamp='2007-01-27T23:26:10+00:00' visible='true' lat='50.909793' lon='-1.3900991'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='15359724' timestamp='2006-09-11T20:17:31+01:00' user='Dean Earley' visible='true' lat='50.9693554' lon='-1.3532691'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163284' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.9702202' lon='-1.3874074'>
-    <tag k='power' v='tower' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008939' timestamp='2007-05-12T15:26:03+01:00' user='nickw' visible='true' lat='50.9319404' lon='-1.3499825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380424' timestamp='2007-05-20T10:19:27+01:00' user='nickw' visible='true' lat='50.9445889' lon='-1.3788523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932457' timestamp='2007-05-10T21:06:05+01:00' user='Dean Earley' visible='true' lat='50.9630184' lon='-1.4531448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16479652' timestamp='2006-11-11T17:30:19+00:00' user='Dean Earley' visible='true' lat='50.9461953' lon='-1.5200298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635138' timestamp='2007-04-30T21:49:15+01:00' user='nickw' visible='true' lat='50.9104585' lon='-1.3619686' />
-  <node id='29707281' timestamp='2007-05-28T11:52:21+01:00' visible='true' lat='50.9867432' lon='-1.3615652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30505710' timestamp='2007-06-17T21:56:40+01:00' visible='true' lat='50.979926' lon='-1.3531078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329535' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9756' lon='-1.42578' />
-  <node id='90677148' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8945442' lon='-1.4375033' />
-  <node id='24949845' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9913631' lon='-1.3745889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830615' timestamp='2007-05-05T08:58:24+01:00' user='nickw' visible='true' lat='50.9289043' lon='-1.3589404'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600429' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.921645' lon='-1.4443445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579407' timestamp='2006-12-14T13:52:52+00:00' user='David Currie' visible='true' lat='50.9772743' lon='-1.4047387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245145424' timestamp='2008-02-03T05:57:02+00:00' user='sladen' visible='true' lat='50.9139281' lon='-1.4017193' />
-  <node id='29708041' timestamp='2007-05-28T12:04:12+01:00' visible='true' lat='50.978859' lon='-1.3667193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342541' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9090582' lon='-1.365305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461239' timestamp='2007-05-21T23:43:16+01:00' user='nickw' visible='true' lat='50.9024569' lon='-1.3968594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259920' timestamp='2007-04-29T23:09:28+01:00' user='Andy Street' visible='true' lat='50.9007527' lon='-1.351443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668378' timestamp='2007-01-04T21:06:49+00:00' user='nickw' visible='true' lat='50.9871918' lon='-1.3937832'>
-    <tag k='name' v='BRUE CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564728' timestamp='2006-08-15T12:09:55+01:00' user='nickw' visible='true' lat='50.9281682' lon='-1.3545079'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='92683733' timestamp='2007-10-30T17:25:08+00:00' user='Nick Dyer' visible='true' lat='50.960414' lon='-1.4241102' />
-  <node id='20972826' timestamp='2006-11-13T00:07:33+00:00' user='Dean Earley' visible='true' lat='50.9000531' lon='-1.39779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141402' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9257164' lon='-1.4281074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548685' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9636263' lon='-1.3635036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160226762' timestamp='2007-12-10T19:16:01+00:00' user='sladen' visible='true' lat='50.9048674' lon='-1.3920363' />
-  <node id='28194350' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9442697' lon='-1.4369589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254709' timestamp='2007-01-28T00:06:51+00:00' visible='true' lat='50.9354359' lon='-1.4063951' />
-  <node id='27021712' timestamp='2007-04-03T00:50:47+01:00' user='Dean Earley' visible='true' lat='50.9227591' lon='-1.4457071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764410' timestamp='2007-05-29T22:14:25+01:00' user='Jodi Crisp' visible='true' lat='50.9248445' lon='-1.3583224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329814' timestamp='2007-01-25T22:42:42+00:00' user='Dean Earley' visible='true' lat='50.9293' lon='-1.40368' />
-  <node id='20136218' timestamp='2006-10-28T02:09:01+01:00' user='Dean Earley' visible='true' lat='50.9182167' lon='-1.3556895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816407' timestamp='2007-05-31T21:56:31+01:00' visible='true' lat='50.9892777' lon='-1.3552533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507765' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9385645' lon='-1.3877661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838720' timestamp='2007-06-01T20:37:04+01:00' visible='true' lat='50.9693663' lon='-1.3888949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613495' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9787193' lon='-1.3981927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998579' timestamp='2007-06-05T23:13:54+01:00' user='nickw' visible='true' lat='50.9594491' lon='-1.4513145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976686' timestamp='2007-11-20T11:01:40+00:00' user='Gregory Williams' visible='true' lat='50.93077' lon='-1.4305452'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='21561533' timestamp='2007-06-01T16:29:34+01:00' user='Dean Earley' visible='true' lat='50.9231668' lon='-1.4407238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613401' timestamp='2007-10-16T02:43:05+01:00' user='andrewpmk' visible='true' lat='50.9856522' lon='-1.4279114'>
-    <tag k='religion' v='christian' />
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='Parish Church of Saint John the Baptist' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632825' timestamp='2007-05-26T20:07:12+01:00' visible='true' lat='50.9683142' lon='-1.3633458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301583' timestamp='2006-09-02T18:21:43+01:00' user='Dean Earley' visible='true' lat='50.9096786' lon='-1.400238' />
-  <node id='142620768' timestamp='2007-11-29T22:31:12+00:00' user='nickw' visible='true' lat='50.916935' lon='-1.4153116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964140' timestamp='2006-09-08T02:12:01+01:00' user='Dean Earley' visible='true' lat='50.9183703' lon='-1.3797278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964157' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9186347' lon='-1.3821832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419633' timestamp='2007-04-03T00:51:30+01:00' user='Dean Earley' visible='true' lat='50.9179067' lon='-1.4277839' />
-  <node id='154769814' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true' lat='50.9620935' lon='-1.4270663' />
-  <node id='21636753' timestamp='2006-12-18T21:21:43+00:00' user='nickw' visible='true' lat='50.9454691' lon='-1.3924014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359720' timestamp='2006-09-11T20:17:31+01:00' user='Dean Earley' visible='true' lat='50.9703162' lon='-1.3558493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816554' timestamp='2007-05-31T22:04:26+01:00' visible='true' lat='50.9913607' lon='-1.3547279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689154' timestamp='2006-12-23T10:22:25+00:00' user='nickw' visible='true' lat='50.9397165' lon='-1.3749672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601310' timestamp='2006-09-01T00:20:36+01:00' user='nickw' visible='true' lat='50.8334099' lon='-1.5086207'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28345035' timestamp='2007-04-30T23:00:35+01:00' user='nickw' visible='true' lat='50.9306633' lon='-1.3599665'>
-    <tag k='name' v='COPSE RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504266' timestamp='2007-06-17T21:38:09+01:00' visible='true' lat='50.9946805' lon='-1.3507979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935721' timestamp='2007-05-11T00:47:42+01:00' visible='true' lat='50.9405747' lon='-1.4386018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028851' timestamp='2006-10-27T22:49:32+01:00' user='Dean Earley' visible='true' lat='50.931909' lon='-1.353986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711602' timestamp='2007-05-28T14:46:28+01:00' visible='true' lat='50.9765429' lon='-1.3648016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091889' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9250679' lon='-1.4151155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463005' timestamp='2007-05-22T00:01:30+01:00' user='nickw' visible='true' lat='50.9077957' lon='-1.4037308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008369' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9268692' lon='-1.3523268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659220' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9041662' lon='-1.4047901' />
-  <node id='319625' timestamp='2007-04-05T14:21:55+01:00' user='Dean Earley' visible='true' lat='50.9221661' lon='-1.3890019' />
-  <node id='423285' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.93423' lon='-1.3821243' />
-  <node id='28234919' timestamp='2007-04-29T19:16:48+01:00' user='nickw' visible='true' lat='50.907711' lon='-1.3612062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003046' timestamp='2007-05-22T00:19:43+01:00' user='Dean Earley' visible='true' lat='50.9392593' lon='-1.4053527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127620' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.9364196' lon='-1.4338906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48965785' timestamp='2007-09-11T00:11:36+01:00' visible='true' lat='50.9019378' lon='-1.4055226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='53411351' timestamp='2007-09-17T22:49:13+01:00' user='mike l' visible='true' lat='50.9339238' lon='-1.3941796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584191' timestamp='2007-05-03T00:07:15+01:00' visible='true' lat='50.9420773' lon='-1.4356481'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='5292817' timestamp='2006-05-22T22:37:46+01:00' user='nickw' visible='true' lat='50.9290078' lon='-1.3908359' />
-  <node id='28903065' timestamp='2007-05-09T23:03:40+01:00' visible='true' lat='50.9427811' lon='-1.3719757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232076' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9105704' lon='-1.4105238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305568' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9976768' lon='-1.3972807' />
-  <node id='21091838' timestamp='2007-04-29T21:18:23+01:00' user='Dean Earley' visible='true' lat='50.9250636' lon='-1.417799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25305496' timestamp='2007-05-16T00:37:07+01:00' visible='true' lat='50.9251112' lon='-1.3867109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342525' timestamp='2007-04-30T22:13:31+01:00' user='nickw' visible='true' lat='50.9097847' lon='-1.364113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254757' timestamp='2007-08-14T04:48:38+01:00' user='andrewpmk' visible='true' lat='50.9078849' lon='-1.3951821' />
-  <node id='10942573' timestamp='2006-07-19T01:47:59+01:00' user='Dean Earley' visible='true' lat='50.9127696' lon='-1.3442929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173871' timestamp='2007-04-29T01:02:56+01:00' visible='true' lat='50.9424422' lon='-1.4307078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592370' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.912626' lon='-1.4434995' />
-  <node id='29491395' timestamp='2007-05-22T12:23:38+01:00' visible='true' lat='50.9143525' lon='-1.4081029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194429' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9473512' lon='-1.4346831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469870' timestamp='2007-11-18T18:58:30+00:00' user='nickw' visible='true' lat='50.9132747' lon='-1.4288884' />
-  <node id='29710870' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9867098' lon='-1.3516375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976701' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9344897' lon='-1.4237904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816424' timestamp='2007-05-31T22:00:50+01:00' visible='true' lat='50.9897639' lon='-1.3553707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303944' timestamp='2007-01-19T18:57:44+00:00' user='Dean Earley' visible='true' lat='50.913782' lon='-1.4067279'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961043' timestamp='2006-11-11T17:12:28+00:00' user='Dean Earley' visible='true' lat='50.9481077' lon='-1.3866293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179535' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9568333' lon='-1.397744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342571' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9057509' lon='-1.3678479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663593' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9058225' lon='-1.4052965' />
-  <node id='11419676' timestamp='2006-07-24T21:03:38+01:00' user='nickw' visible='true' lat='50.9170839' lon='-1.4275425' />
-  <node id='28252937' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9448422' lon='-1.4245418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796834' timestamp='2007-05-30T22:23:39+01:00' user='nickw' visible='true' lat='50.9186685' lon='-1.352502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325181' timestamp='2006-11-11T17:20:02+00:00' user='Dean Earley' visible='true' lat='50.9529298' lon='-1.4051366' />
-  <node id='29135252' timestamp='2007-05-15T20:56:00+01:00' user='nickw' visible='true' lat='50.9439425' lon='-1.3843842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467488' timestamp='2007-04-19T17:50:44+01:00' visible='true' lat='50.9345355' lon='-1.3758121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254568' timestamp='2006-10-27T00:58:32+01:00' user='Dean Earley' visible='true' lat='50.9113091' lon='-1.3839308' />
-  <node id='29632812' timestamp='2007-05-26T20:06:26+01:00' visible='true' lat='50.9621365' lon='-1.367389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306321' timestamp='2005-12-11T21:52:40+00:00' user='nickw' visible='true' lat='50.925622' lon='-1.3950491' />
-  <node id='30290734' timestamp='2007-10-29T15:43:34+00:00' user='Dean Earley' visible='true' lat='50.9658822' lon='-1.3857197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347592' timestamp='2007-04-30T23:36:50+01:00' user='nickw' visible='true' lat='50.9274877' lon='-1.3566965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419435' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9411205' lon='-1.3707646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632200' timestamp='2007-05-26T19:21:06+01:00' visible='true' lat='50.955453' lon='-1.3672212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342639' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9105489' lon='-1.3670533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984673' timestamp='2007-01-25T22:42:42+00:00' user='Dean Earley' visible='true' lat='50.944046' lon='-1.3813722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256429' timestamp='2007-06-12T20:20:04+01:00' visible='true' lat='50.9803607' lon='-1.354278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677154' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8961954' lon='-1.4409365' />
-  <node id='122316824' timestamp='2007-11-18T19:01:08+00:00' user='nickw' visible='true' lat='50.9139917' lon='-1.4357992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689057' timestamp='2006-12-23T10:22:18+00:00' user='nickw' visible='true' lat='50.9410539' lon='-1.3869286'>
-    <tag k='name' v='LABURNUM' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957227' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9123933' lon='-1.4199529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461228' timestamp='2007-12-10T19:19:58+00:00' user='sladen' visible='true' lat='50.9059066' lon='-1.3971003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583079' timestamp='2007-05-02T23:57:59+01:00' visible='true' lat='50.9374705' lon='-1.4338921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325023' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9584089' lon='-1.4200527' />
-  <node id='21141419' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.929944' lon='-1.4297938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708019' timestamp='2007-05-28T12:04:03+01:00' visible='true' lat='50.9846498' lon='-1.3635241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248233' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.894723' lon='-1.3976069' />
-  <node id='10908420' timestamp='2006-07-18T10:20:18+01:00' user='nickw' visible='true' lat='50.9349443' lon='-1.3720757' />
-  <node id='30229574' timestamp='2007-06-12T00:14:40+01:00' user='nickw' visible='true' lat='50.9340364' lon='-1.3535664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689070' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9318008' lon='-1.396026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872357' timestamp='2007-06-02T19:03:54+01:00' visible='true' lat='50.9178001' lon='-1.3507487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280984' timestamp='2007-04-20T23:53:15+01:00' user='Dean Earley' visible='true' lat='50.9155979' lon='-1.3580752'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474846' timestamp='2007-09-20T19:44:47+01:00' user='mike l' visible='true' lat='50.9377981' lon='-1.3573264' />
-  <node id='90577056' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.906781' lon='-1.4219903' />
-  <node id='26447403' timestamp='2007-03-09T20:54:22+00:00' user='nickw' visible='true' lat='50.9010653' lon='-1.3929709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096962' timestamp='2007-10-29T17:03:05+00:00' user='Dean Earley' visible='true' lat='50.9642913' lon='-1.375892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640005' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9117822' lon='-1.3708043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269418' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9210695' lon='-1.4756933' />
-  <node id='28342523' timestamp='2007-04-30T22:13:31+01:00' user='nickw' visible='true' lat='50.9101229' lon='-1.3630004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466084' timestamp='2007-05-22T00:37:47+01:00' user='Dean Earley' visible='true' lat='50.9437571' lon='-1.4469473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091831' timestamp='2006-11-19T12:09:11+00:00' user='nickw' visible='true' lat='50.909131' lon='-1.4208391'>
-    <tag k='name' v='HEWITTS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21585930' timestamp='2006-12-14T23:31:52+00:00' user='Dean Earley' visible='true' lat='50.9664441' lon='-1.3552643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163090' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.9714462' lon='-1.3839903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229589' timestamp='2007-06-12T00:14:42+01:00' user='nickw' visible='true' lat='50.933811' lon='-1.3503381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949930' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9926386' lon='-1.3831316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636919' timestamp='2007-03-24T16:33:45+00:00' user='Dean Earley' visible='true' lat='50.9162827' lon='-1.4271707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223089' timestamp='2007-06-11T21:51:52+01:00' visible='true' lat='50.9835972' lon='-1.3567298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794908' timestamp='2007-05-30T21:44:20+01:00' user='nickw' visible='true' lat='50.915221' lon='-1.3538926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762260' timestamp='2007-05-29T20:52:58+01:00' visible='true' lat='50.9935306' lon='-1.3810459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668271' timestamp='2007-01-04T21:06:33+00:00' user='nickw' visible='true' lat='50.9818995' lon='-1.3982142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471862' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9396778' lon='-1.3664834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008953' timestamp='2007-05-12T15:26:05+01:00' user='nickw' visible='true' lat='50.9325884' lon='-1.3504742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526769' timestamp='2007-05-23T09:49:12+01:00' visible='true' lat='50.9814115' lon='-1.3490445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90582771' timestamp='2007-10-28T20:25:32+00:00' user='Nick Dyer' visible='true' lat='50.9255689' lon='-1.4425639' />
-  <node id='28342588' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9081684' lon='-1.3619125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632238' timestamp='2007-05-26T19:23:15+01:00' visible='true' lat='50.9564225' lon='-1.3689163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392366' timestamp='2007-05-26T20:19:11+01:00' visible='true' lat='50.9645066' lon='-1.3518278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='32894416' timestamp='2007-07-26T16:27:05+01:00' user='Nick Dyer' visible='true' lat='50.9150362' lon='-1.3854145' />
-  <node id='29008400' timestamp='2007-06-09T19:48:46+01:00' user='nickw' visible='true' lat='50.9262118' lon='-1.3480951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924184' timestamp='2007-01-06T14:37:48+00:00' user='nickw' visible='true' lat='50.94253' lon='-1.3734706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949862' timestamp='2007-01-07T12:38:47+00:00' user='nickw' visible='true' lat='50.9952645' lon='-1.3716486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282149' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.97541' lon='-1.4092784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000936' timestamp='2007-05-12T09:30:26+01:00' user='nickw' visible='true' lat='50.9202929' lon='-1.4094695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29389525' timestamp='2007-10-16T11:34:24+01:00' user='Dean Earley' visible='true' lat='50.9646172' lon='-1.3530208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684349' timestamp='2007-10-31T12:25:02+00:00' user='Dean Earley' visible='true' lat='50.9614844' lon='-1.4226719' />
-  <node id='20831114' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9136875' lon='-1.4064357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089124' timestamp='2007-06-08T18:12:08+01:00' visible='true' lat='50.9644996' lon='-1.3772869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232585' timestamp='2007-04-29T18:59:38+01:00' user='nickw' visible='true' lat='50.9173311' lon='-1.3480941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512889' timestamp='2007-04-21T21:50:16+01:00' user='Dean Earley' visible='true' lat='50.959681' lon='-1.3480427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91130462' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true' lat='50.9294879' lon='-1.4314246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953499' timestamp='2007-06-04T21:24:01+01:00' visible='true' lat='50.9903648' lon='-1.3692673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575735' timestamp='2007-03-16T21:52:24+00:00' user='nickw' visible='true' lat='50.9028309' lon='-1.3962258'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243519' timestamp='2007-04-29T20:24:04+01:00' user='Dean Earley' visible='true' lat='50.9399854' lon='-1.4080172'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615421' timestamp='2006-12-16T21:52:53+00:00' user='nickw' visible='true' lat='50.9000715' lon='-1.4058686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348127' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9331098' lon='-1.3667093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147531' timestamp='2008-02-03T06:14:30+00:00' user='sladen' visible='true' lat='50.9104646' lon='-1.4033071' />
-  <node id='325219' timestamp='2006-11-11T17:20:02+00:00' user='Dean Earley' visible='true' lat='50.9377858' lon='-1.3525792' />
-  <node id='13071394' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9287837' lon='-1.3618166'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600578' timestamp='2006-12-16T11:07:27+00:00' user='David Currie' visible='true' lat='50.9789421' lon='-1.4037905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422975' timestamp='2007-04-05T14:21:56+01:00' user='Dean Earley' visible='true' lat='50.9339' lon='-1.41129' />
-  <node id='331351' timestamp='2007-12-06T22:11:08+00:00' user='Dean Earley' visible='true' lat='51.0112' lon='-1.38696' />
-  <node id='122322756' timestamp='2007-11-18T19:04:32+00:00' user='nickw' visible='true' lat='50.91407' lon='-1.4338821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240345' timestamp='2007-04-29T20:02:57+01:00' user='Andy Street' visible='true' lat='50.9073126' lon='-1.3507547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227247' timestamp='2007-04-29T08:58:11+01:00' user='Dean Earley' visible='true' lat='50.9422309' lon='-1.4152393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561788' timestamp='2007-04-03T00:51:34+01:00' user='Dean Earley' visible='true' lat='50.9251605' lon='-1.438379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122334969' timestamp='2007-11-18T19:11:25+00:00' user='nickw' visible='true' lat='50.9208867' lon='-1.4357843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801375' timestamp='2006-08-07T20:18:23+01:00' user='Dean Earley' visible='true' lat='50.9070677' lon='-1.3737475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705643' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8943782' lon='-1.4081523'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29998075' timestamp='2007-06-05T23:00:22+01:00' user='nickw' visible='true' lat='50.9872707' lon='-1.412912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243882' timestamp='2007-04-29T20:52:52+01:00' user='Dean Earley' visible='true' lat='50.9366825' lon='-1.421815' />
-  <node id='29990892' timestamp='2007-06-05T20:41:24+01:00' visible='true' lat='50.9994345' lon='-1.3521685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746405' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9924242' lon='-1.3411641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59599701' timestamp='2007-09-24T09:46:23+01:00' user='mike l' visible='true' lat='50.9972035' lon='-1.4438158' />
-  <node id='28243685' timestamp='2007-04-29T20:25:14+01:00' user='Dean Earley' visible='true' lat='50.9395049' lon='-1.4135449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071321' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9206449' lon='-1.3618889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170443' timestamp='2006-11-11T17:20:09+00:00' user='Dean Earley' visible='true' lat='50.9419138' lon='-1.3616421' />
-  <node id='17769054' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9148417' lon='-1.3914183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689087' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9417508' lon='-1.3874833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130965' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9294614' lon='-1.3564733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='55424645' timestamp='2007-10-28T19:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9373377' lon='-1.3796149'>
-    <tag k='amenity' v='fuel' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='20971173' timestamp='2007-09-10T23:55:27+01:00' visible='true' lat='50.9063985' lon='-1.3989847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148035' timestamp='2008-02-03T06:04:24+00:00' user='sladen' visible='true' lat='50.9087652' lon='-1.402466' />
-  <node id='26575782' timestamp='2007-03-16T21:52:30+00:00' user='nickw' visible='true' lat='50.9002274' lon='-1.3989555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388940' timestamp='2007-04-05T14:21:56+01:00' user='Dean Earley' visible='true' lat='50.9426' lon='-1.40022' />
-  <node id='28194397' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9454876' lon='-1.4402986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102964' timestamp='2006-10-27T22:27:53+01:00' user='Dean Earley' visible='true' lat='50.927097' lon='-1.3553511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384702' timestamp='2007-05-02T00:35:41+01:00' visible='true' lat='50.9688017' lon='-1.3615962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435817' timestamp='2007-12-14T21:43:13+00:00' user='nickw' visible='true' lat='50.9370856' lon='-1.4329758'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976795' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9249984' lon='-1.418923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956584' timestamp='2007-06-26T23:44:58+01:00' user='nickw' visible='true' lat='50.9278623' lon='-1.3489115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18347840' timestamp='2006-10-16T21:47:24+01:00' user='nickw' visible='true' lat='50.9283395' lon='-1.4104823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464231' timestamp='2007-05-22T00:19:08+01:00' user='Dean Earley' visible='true' lat='50.9376159' lon='-1.4199088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419247' timestamp='2006-12-02T22:59:16+00:00' user='Dean Earley' visible='true' lat='50.9380144' lon='-1.3603663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122313137' timestamp='2007-11-18T18:58:50+00:00' user='nickw' visible='true' lat='50.9135158' lon='-1.4332364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219681' timestamp='2007-12-08T20:21:41+00:00' user='nickw' visible='true' lat='50.9445558' lon='-1.4439668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310973' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9729326' lon='-1.4320451' />
-  <node id='50656127' timestamp='2007-09-13T21:25:23+01:00' user='mike l' visible='true' lat='50.9453959' lon='-1.4468052' />
-  <node id='27021791' timestamp='2007-04-03T00:52:54+01:00' user='Ben' visible='true' lat='50.9490955' lon='-1.3970815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957858' timestamp='2007-09-12T16:44:59+01:00' user='mike l' visible='true' lat='50.9431132' lon='-1.4494474' />
-  <node id='29026661' timestamp='2007-05-13T10:11:10+01:00' user='nickw' visible='true' lat='50.9213147' lon='-1.4089985'>
-    <tag k='name' v='CT RYL MWS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707249' timestamp='2007-04-05T14:21:57+01:00' user='Dean Earley' visible='true' lat='50.8486719' lon='-1.3129688' />
-  <node id='14728005' timestamp='2007-04-03T00:54:14+01:00' user='Ben' visible='true' lat='50.9370026' lon='-1.4025501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957244' timestamp='2006-11-10T21:58:56+00:00' user='nickw' visible='true' lat='50.9218381' lon='-1.4068436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601362' timestamp='2006-09-01T00:16:15+01:00' user='nickw' visible='true' lat='50.9173608' lon='-1.4839697'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29704528' timestamp='2007-05-28T10:40:39+01:00' visible='true' lat='50.9804995' lon='-1.3572169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915747' timestamp='2007-03-24T13:43:22+00:00' user='Dean Earley' visible='true' lat='50.9005592' lon='-1.3713953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244275' timestamp='2007-04-29T20:36:32+01:00' user='Andy Street' visible='true' lat='50.9037721' lon='-1.3532384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544331' timestamp='2007-04-05T14:21:57+01:00' user='Dean Earley' visible='true' lat='50.9309' lon='-1.39033' />
-  <node id='20957193' timestamp='2006-11-10T21:58:51+00:00' user='nickw' visible='true' lat='50.92133' lon='-1.4190029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932438' timestamp='2007-05-10T21:05:55+01:00' user='Dean Earley' visible='true' lat='50.963392' lon='-1.4642687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660061' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.9036249' lon='-1.412223' />
-  <node id='25303939' timestamp='2007-04-29T20:37:42+01:00' user='Dean Earley' visible='true' lat='50.9344323' lon='-1.418561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232092' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9151608' lon='-1.41151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963750' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9354218' lon='-1.4067028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90573195' timestamp='2007-10-28T20:15:49+00:00' user='Nick Dyer' visible='true' lat='50.9164843' lon='-1.4701413' />
-  <node id='422962' timestamp='2007-04-05T14:21:57+01:00' user='Dean Earley' visible='true' lat='50.9099' lon='-1.40882' />
-  <node id='29816628' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9913654' lon='-1.3596368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171747' timestamp='2007-05-16T23:47:59+01:00' user='nickw' visible='true' lat='50.9405282' lon='-1.3916342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722361' timestamp='2006-10-06T23:46:14+01:00' user='Dean Earley' visible='true' lat='50.9444345' lon='-1.3894275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66586256' timestamp='2007-10-12T14:02:05+01:00' user='SteveC' visible='true' lat='50.932607' lon='-1.4505212' />
-  <node id='21689111' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9392596' lon='-1.3832318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298255' timestamp='2006-09-03T01:40:58+01:00' user='Dean Earley' visible='true' lat='50.9713274' lon='-1.3765984' />
-  <node id='30780827' timestamp='2007-06-22T21:09:52+01:00' user='Steve Chilton' visible='true' lat='50.9076664' lon='-1.4108727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359719' timestamp='2007-04-29T17:21:03+01:00' visible='true' lat='50.9697712' lon='-1.3567024'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872366' timestamp='2007-06-02T19:03:56+01:00' visible='true' lat='50.9169683' lon='-1.349305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721049' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9612981' lon='-1.370907'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956708' timestamp='2007-06-26T23:49:20+01:00' user='nickw' visible='true' lat='50.9290863' lon='-1.3479827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949915' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9926386' lon='-1.3786417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222223' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9194355' lon='-1.4795728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621229' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.959086' lon='-1.3707846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648585' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9543156' lon='-1.3574782' />
-  <node id='20972774' timestamp='2006-11-13T00:06:54+00:00' user='Dean Earley' visible='true' lat='50.9025939' lon='-1.4113699'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903738' timestamp='2007-05-10T00:36:36+01:00' visible='true' lat='50.9358725' lon='-1.3706767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114385' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9042179' lon='-1.3920535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051803' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9912039' lon='-1.4873704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613458' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9775173' lon='-1.40105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724270' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9301762' lon='-1.4056468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252952' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.9439257' lon='-1.4301204'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130950' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.9317077' lon='-1.3585244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581829' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9134431' lon='-1.4500226' />
-  <node id='21613465' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9771677' lon='-1.4007004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924186' timestamp='2007-01-06T14:37:50+00:00' user='nickw' visible='true' lat='50.9427303' lon='-1.373411'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783119' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9479124' lon='-1.3474574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329528' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9688' lon='-1.42992' />
-  <node id='92681276' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.9615253' lon='-1.425123' />
-  <node id='700525' timestamp='2007-04-05T14:21:58+01:00' user='Dean Earley' visible='true' lat='50.9294058' lon='-1.3671374' />
-  <node id='24949960' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.997015' lon='-1.3898466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903997' timestamp='2007-10-17T01:09:35+01:00' user='Dean Earley' visible='true' lat='50.9503707' lon='-1.3642461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704957' timestamp='2007-05-28T10:59:33+01:00' visible='true' lat='50.9787212' lon='-1.3506216'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331781' timestamp='2007-12-06T20:44:24+00:00' user='nickw' visible='true' lat='50.9409672' lon='-1.4413262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134820' timestamp='2007-05-15T20:53:14+01:00' user='nickw' visible='true' lat='50.9440051' lon='-1.3868874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341773' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.9122149' lon='-1.3606959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447386' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9006905' lon='-1.3930834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107848' timestamp='2007-04-27T23:50:38+01:00' visible='true' lat='50.9370227' lon='-1.3990266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418531' timestamp='2007-05-02T00:35:23+01:00' visible='true' lat='50.9660086' lon='-1.3616981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20954598' timestamp='2006-11-10T08:43:41+00:00' user='nickw' visible='true' lat='50.9393574' lon='-1.4019769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162413' timestamp='2008-01-04T19:28:05+00:00' user='nickw' visible='true' lat='50.972741' lon='-1.3818745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254355' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9472026' lon='-1.429944' />
-  <node id='254551' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9242168' lon='-1.3610063' />
-  <node id='29998991' timestamp='2007-06-05T23:28:58+01:00' user='nickw' visible='true' lat='50.9908848' lon='-1.438858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801365' timestamp='2007-03-04T19:32:14+00:00' user='Dean Earley' visible='true' lat='50.9061675' lon='-1.3747231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250021' timestamp='2007-04-29T21:42:15+01:00' visible='true' lat='50.9146889' lon='-1.4489135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601343' timestamp='2006-09-01T00:16:12+01:00' user='nickw' visible='true' lat='50.9001088' lon='-1.5177441'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='13071377' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.9183515' lon='-1.3623442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689168' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9405678' lon='-1.372762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595073' timestamp='2007-05-25T21:54:05+01:00' visible='true' lat='50.9690613' lon='-1.351417'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447518' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9097096' lon='-1.3872542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745490' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9560674' lon='-1.4017264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15741006' timestamp='2007-10-04T19:44:17+01:00' user='Gregory Williams' visible='true' lat='50.9989121' lon='-1.3553036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201642316' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true' lat='50.9507523' lon='-1.3609286' />
-  <node id='29730541' timestamp='2007-05-28T19:37:07+01:00' visible='true' lat='50.966827' lon='-1.3729652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903909' timestamp='2007-10-17T01:09:35+01:00' user='Dean Earley' visible='true' lat='50.9507143' lon='-1.3633823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914407' timestamp='2007-06-03T16:22:48+01:00' visible='true' lat='50.983734' lon='-1.3609178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947172' timestamp='2007-02-16T20:51:23+00:00' user='nickw' visible='true' lat='50.9122393' lon='-1.3953107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27513800' timestamp='2007-04-21T22:32:35+01:00' user='Dean Earley' visible='true' lat='50.9649602' lon='-1.3567808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071403' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.9214837' lon='-1.3553084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342626' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9102983' lon='-1.3661195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956573' timestamp='2007-06-26T23:44:57+01:00' user='nickw' visible='true' lat='50.9273426' lon='-1.3514147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254472' timestamp='2007-03-31T20:35:02+01:00' user='nickw' visible='true' lat='50.917751' lon='-1.3589107' />
-  <node id='28830576' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.9239262' lon='-1.3700397'>
-    <tag k='name' v='PARKLANDS' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296284' timestamp='2007-01-19T09:58:48+00:00' user='Dean Earley' visible='true' lat='50.9747783' lon='-1.3660856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727975' timestamp='2007-02-18T21:25:28+00:00' visible='true' lat='50.9175178' lon='-1.3956088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815436' timestamp='2007-05-31T21:37:05+01:00' visible='true' lat='50.9872588' lon='-1.3546139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636798' timestamp='2007-04-29T02:33:41+01:00' user='Dean Earley' visible='true' lat='50.9520274' lon='-1.4083351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815061' timestamp='2007-05-31T21:34:38+01:00' visible='true' lat='50.9880434' lon='-1.3546383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764490' timestamp='2007-02-10T23:53:41+00:00' visible='true' lat='50.9154462' lon='-1.396101' />
-  <node id='26945345' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9200614' lon='-1.3465312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071270' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9181534' lon='-1.3607448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29534112' timestamp='2007-05-23T17:28:36+01:00' visible='true' lat='50.9851157' lon='-1.3566862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929610' timestamp='2007-06-03T22:07:06+01:00' visible='true' lat='50.978112' lon='-1.3601936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689094' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9416631' lon='-1.3860728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721034' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.969547' lon='-1.3687268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231417' timestamp='2007-04-29T18:50:11+01:00' user='nickw' visible='true' lat='50.9110443' lon='-1.3638278'>
-    <tag k='name' v='POPLAR RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613394' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9755069' lon='-1.4243303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240298' timestamp='2007-04-29T20:02:52+01:00' user='Andy Street' visible='true' lat='50.9040331' lon='-1.3555935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161113' timestamp='2007-06-10T18:13:42+01:00' visible='true' lat='50.9719305' lon='-1.353981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942721' timestamp='2007-03-24T13:44:05+00:00' user='Dean Earley' visible='true' lat='50.9011878' lon='-1.3769239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530527' timestamp='2007-05-23T13:04:50+01:00' visible='true' lat='50.9849117' lon='-1.3553065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189059' timestamp='2006-11-22T23:51:56+00:00' user='crouchingbadger' visible='true' lat='50.9578414' lon='-1.4480099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984722' timestamp='2007-01-10T00:12:03+00:00' user='nickw' visible='true' lat='50.9433639' lon='-1.390079'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530367' timestamp='2007-05-28T10:59:41+01:00' visible='true' lat='50.9782961' lon='-1.3496813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583051' timestamp='2007-05-02T23:57:56+01:00' visible='true' lat='50.938982' lon='-1.4294483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964114' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9215861' lon='-1.3770207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325091' timestamp='2006-11-11T17:20:22+00:00' user='Dean Earley' visible='true' lat='50.9203938' lon='-1.5894283' />
-  <node id='25639948' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9008998' lon='-1.381502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178405' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.9866483' lon='-1.3510914'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242721' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9106177' lon='-1.4155965' />
-  <node id='19035789' timestamp='2006-10-22T10:18:16+01:00' user='nickw' visible='true' lat='50.9343549' lon='-1.3931085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952630' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9332661' lon='-1.3791297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726559' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9141151' lon='-1.4010217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613443' timestamp='2006-12-16T17:46:55+00:00' user='David Currie' visible='true' lat='50.9771397' lon='-1.4032037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950445' timestamp='2007-09-10T23:28:30+01:00' visible='true' lat='50.9134687' lon='-1.3977912'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089038' timestamp='2007-06-08T18:11:55+01:00' visible='true' lat='50.9659946' lon='-1.3737913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250004' timestamp='2007-04-29T21:42:11+01:00' visible='true' lat='50.9154769' lon='-1.4492303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972789' timestamp='2007-03-09T20:54:28+00:00' user='nickw' visible='true' lat='50.9009372' lon='-1.3920212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463024' timestamp='2007-05-22T00:01:32+01:00' user='nickw' visible='true' lat='50.9092756' lon='-1.4017683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636817' timestamp='2007-04-29T02:33:44+01:00' user='Dean Earley' visible='true' lat='50.9509357' lon='-1.4122569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711124' timestamp='2007-05-28T14:39:20+01:00' visible='true' lat='50.9800419' lon='-1.362128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161100' timestamp='2007-06-10T18:13:34+01:00' visible='true' lat='50.9720064' lon='-1.3526765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388906' timestamp='2007-04-05T14:21:58+01:00' user='Dean Earley' visible='true' lat='50.9438' lon='-1.39904' />
-  <node id='254727' timestamp='2007-01-31T01:07:52+00:00' user='Dean Earley' visible='true' lat='50.999297' lon='-1.3543933' />
-  <node id='27021746' timestamp='2007-04-03T00:52:30+01:00' user='Ben' visible='true' lat='50.9415703' lon='-1.4013138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021825' timestamp='2007-04-03T00:53:06+01:00' user='Ben' visible='true' lat='50.9398818' lon='-1.3940578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727988' timestamp='2007-01-19T20:35:56+00:00' user='Dean Earley' visible='true' lat='50.9208744' lon='-1.389346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949879' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9897625' lon='-1.3828534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958695' timestamp='2007-09-10T23:55:16+01:00' visible='true' lat='50.9063801' lon='-1.4080997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372778' timestamp='2007-05-01T10:05:21+01:00' visible='true' lat='50.9315417' lon='-1.4424553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026785' timestamp='2007-05-13T10:10:56+01:00' user='nickw' visible='true' lat='50.9175461' lon='-1.4080458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728542' timestamp='2007-03-23T22:52:51+00:00' user='nickw' visible='true' lat='50.9029902' lon='-1.3656592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963733' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9326604' lon='-1.4162064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161119' timestamp='2007-06-10T18:13:43+01:00' visible='true' lat='50.9722132' lon='-1.3544472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563363' timestamp='2007-04-23T23:02:18+01:00' visible='true' lat='50.9288161' lon='-1.3981578'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324997' timestamp='2005-12-16T21:47:56+00:00' user='80n' visible='true' lat='50.9595869' lon='-1.4222729' />
-  <node id='21275655' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true' lat='50.911286' lon='-1.4299455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091874' timestamp='2007-04-03T00:51:35+01:00' user='Dean Earley' visible='true' lat='50.914952' lon='-1.4239697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150149' timestamp='2008-02-03T06:13:56+00:00' user='sladen' visible='true' lat='50.9081157' lon='-1.4019081' />
-  <node id='305632' timestamp='2006-12-16T17:47:21+00:00' user='David Currie' visible='true' lat='50.9832262' lon='-1.3849156' />
-  <node id='254389' timestamp='2007-01-19T20:35:56+00:00' user='Dean Earley' visible='true' lat='50.9220448' lon='-1.3717453' />
-  <node id='29001321' timestamp='2007-05-12T09:40:13+01:00' user='nickw' visible='true' lat='50.9223217' lon='-1.3817355'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296306' timestamp='2007-01-19T09:52:17+00:00' user='Dean Earley' visible='true' lat='50.9867846' lon='-1.3536523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783089' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9426551' lon='-1.3543711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895698' timestamp='2007-02-13T18:31:38+00:00' user='Dean Earley' visible='true' lat='50.9568466' lon='-1.4042125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976769' timestamp='2007-12-14T21:27:14+00:00' user='nickw' visible='true' lat='50.9279412' lon='-1.4186846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341786' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9131042' lon='-1.3616694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29795092' timestamp='2007-05-30T21:48:09+01:00' user='nickw' visible='true' lat='50.9158097' lon='-1.358159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325234' timestamp='2006-11-11T17:20:22+00:00' user='Dean Earley' visible='true' lat='50.9353817' lon='-1.3364746' />
-  <node id='28342609' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.909736' lon='-1.3684739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222343' timestamp='2007-12-08T20:23:18+00:00' user='nickw' visible='true' lat='50.9473189' lon='-1.4473206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971188' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9059523' lon='-1.4006356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480657' timestamp='2007-01-27T23:30:43+00:00' visible='true' lat='50.9213008' lon='-1.3887163'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29632217' timestamp='2007-05-26T19:21:18+01:00' visible='true' lat='50.9582489' lon='-1.3680688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310988' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9692032' lon='-1.4372894' />
-  <node id='18398363' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.9514012' lon='-1.421073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110897' timestamp='2006-10-27T23:39:31+01:00' user='Dean Earley' visible='true' lat='50.935281' lon='-1.3626324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154770239' timestamp='2007-12-07T13:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9607096' lon='-1.4263282' />
-  <node id='28249886' timestamp='2007-11-28T12:24:19+00:00' user='Dean Earley' visible='true' lat='50.9205021' lon='-1.4398779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668082' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9851638' lon='-1.389433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663587' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9066938' lon='-1.4059488' />
-  <node id='28830679' timestamp='2007-05-05T09:03:34+01:00' user='nickw' visible='true' lat='50.9236292' lon='-1.3612003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675858' timestamp='2007-04-05T14:21:59+01:00' user='Dean Earley' visible='true' lat='50.9282676' lon='-1.3684997' />
-  <node id='28179488' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.9541887' lon='-1.4040441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621206' timestamp='2007-06-18T21:09:42+01:00' visible='true' lat='50.9704854' lon='-1.3533077'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486277' timestamp='2007-11-20T11:08:16+00:00' user='Gregory Williams' visible='true' lat='50.9101154' lon='-1.379122'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='25296610' timestamp='2007-01-19T10:19:55+00:00' user='Dean Earley' visible='true' lat='50.9716373' lon='-1.3675718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924327' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9817044' lon='-1.3864684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727945' timestamp='2007-02-11T00:33:24+00:00' visible='true' lat='50.9183139' lon='-1.3955021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254898' timestamp='2007-05-22T00:19:45+01:00' user='Dean Earley' visible='true' lat='50.9340717' lon='-1.4172239' />
-  <node id='21600416' timestamp='2007-05-01T17:19:28+01:00' user='Nickb' visible='true' lat='50.9214319' lon='-1.4570841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773047' timestamp='2007-04-03T00:51:35+01:00' user='Dean Earley' visible='true' lat='50.9203675' lon='-1.4476261' />
-  <node id='160183637' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9041854' lon='-1.3807496' />
-  <node id='33718203' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.9357208' lon='-1.4456744' />
-  <node id='29929021' timestamp='2007-06-03T21:58:08+01:00' visible='true' lat='50.9749636' lon='-1.3603972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339121' timestamp='2007-04-30T20:39:17+01:00' visible='true' lat='50.9670768' lon='-1.3615793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259905' timestamp='2007-04-29T23:09:27+01:00' user='Andy Street' visible='true' lat='50.9012868' lon='-1.3501926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675836' timestamp='2007-08-12T23:12:45+01:00' user='Edward' visible='true' lat='50.9274462' lon='-1.3775501' />
-  <node id='21598944' timestamp='2006-12-16T00:52:20+00:00' user='Dean Earley' visible='true' lat='50.9092317' lon='-1.3694655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21637748' timestamp='2007-04-03T00:54:23+01:00' user='Ben' visible='true' lat='50.9367986' lon='-1.3934559'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21419417' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.9407119' lon='-1.369482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998528' timestamp='2007-06-05T23:13:20+01:00' user='nickw' visible='true' lat='50.9623021' lon='-1.4527449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613431' timestamp='2006-12-16T17:46:54+00:00' user='David Currie' visible='true' lat='50.9758039' lon='-1.4021924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305581' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9943509' lon='-1.3944268' />
-  <node id='29132939' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.9299618' lon='-1.3762283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226353' timestamp='2007-06-11T22:23:50+01:00' visible='true' lat='50.9808738' lon='-1.353984'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816726' timestamp='2007-05-31T22:13:28+01:00' visible='true' lat='50.9900135' lon='-1.3568888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26782585' timestamp='2007-03-25T19:24:11+01:00' user='Dean Earley' visible='true' lat='50.9023871' lon='-1.3981674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='382997' timestamp='2007-04-05T14:22:00+01:00' user='Dean Earley' visible='true' lat='50.927775' lon='-1.4204205' />
-  <node id='29549368' timestamp='2007-05-24T11:22:50+01:00' visible='true' lat='50.9636825' lon='-1.3720088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504338' timestamp='2007-06-17T21:40:02+01:00' visible='true' lat='50.9864557' lon='-1.3505346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504459' timestamp='2007-06-17T21:43:56+01:00' visible='true' lat='50.982356' lon='-1.3575961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028825' timestamp='2007-05-23T09:19:07+01:00' user='nickw' visible='true' lat='50.9261294' lon='-1.361599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704913' timestamp='2006-08-25T22:22:59+01:00' user='dmgroom' visible='true' lat='50.901405' lon='-1.4518816' />
-  <node id='20976780' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9308336' lon='-1.4216448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929006' timestamp='2007-06-03T21:58:05+01:00' visible='true' lat='50.9746124' lon='-1.3639216'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194380' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9446203' lon='-1.4402556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668327' timestamp='2007-01-04T21:06:42+00:00' user='nickw' visible='true' lat='50.982716' lon='-1.3925678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957847' timestamp='2007-05-22T00:40:23+01:00' user='Dean Earley' visible='true' lat='50.943635' lon='-1.44474'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='87989444' timestamp='2007-10-26T16:05:45+01:00' user='Nick Dyer' visible='true' lat='50.9016529' lon='-1.3953692' />
-  <node id='21507799' timestamp='2007-05-22T00:19:45+01:00' user='Dean Earley' visible='true' lat='50.9424269' lon='-1.4051863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282134' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9764908' lon='-1.406014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577069' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.911798' lon='-1.4395255' />
-  <node id='28240311' timestamp='2007-04-29T20:02:54+01:00' user='Andy Street' visible='true' lat='50.9060908' lon='-1.3535302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='55420343' timestamp='2007-09-20T19:44:50+01:00' user='mike l' visible='true' lat='50.936884' lon='-1.3779859' />
-  <node id='107808628' timestamp='2007-11-11T18:09:34+00:00' user='Dean Earley' visible='true' lat='50.9149751' lon='-1.3593715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582944' timestamp='2007-05-02T23:57:45+01:00' visible='true' lat='50.9425447' lon='-1.4261485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583010' timestamp='2007-05-02T23:57:53+01:00' visible='true' lat='50.9399661' lon='-1.4312873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282085' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9755537' lon='-1.4071461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='608160' timestamp='2007-04-05T14:22:00+01:00' user='Dean Earley' visible='true' lat='50.895497' lon='-1.362114' />
-  <node id='29711867' timestamp='2007-05-28T14:55:45+01:00' visible='true' lat='50.9850933' lon='-1.3550041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935736' timestamp='2007-05-11T00:50:35+01:00' visible='true' lat='50.9391078' lon='-1.4460779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232563' timestamp='2007-04-29T18:59:30+01:00' user='nickw' visible='true' lat='50.9165483' lon='-1.3559911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325061' timestamp='2006-11-11T17:20:44+00:00' user='Dean Earley' visible='true' lat='50.9460155' lon='-1.5059856' />
-  <node id='28252903' timestamp='2007-04-29T22:00:35+01:00' visible='true' lat='50.9453742' lon='-1.4306494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657680' timestamp='2007-12-10T19:05:58+00:00' user='sladen' visible='true' lat='50.9201716' lon='-1.3790415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099533' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9549691' lon='-1.362377' />
-  <node id='17658110' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9156318' lon='-1.4613789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28235790' timestamp='2007-04-29T19:22:31+01:00' user='nickw' visible='true' lat='50.912577' lon='-1.3452559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957210' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9177412' lon='-1.4260749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091400' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9834697' lon='-1.4431415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345065' timestamp='2007-04-30T23:00:39+01:00' user='nickw' visible='true' lat='50.9251245' lon='-1.3557825'>
-    <tag k='name' v='ONIBURY RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194493' timestamp='2007-04-29T08:29:09+01:00' user='Dean Earley' visible='true' lat='50.9475083' lon='-1.4053871'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706175' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9085127' lon='-1.3838126'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='27239006' timestamp='2007-04-09T15:39:36+01:00' user='avantman42' visible='true' lat='50.9178995' lon='-1.4493228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091859' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9079113' lon='-1.4228674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254692' timestamp='2007-02-01T22:22:03+00:00' user='Dean Earley' visible='true' lat='50.9422964' lon='-1.3756823' />
-  <node id='29709563' timestamp='2007-05-28T12:56:40+01:00' visible='true' lat='50.983146' lon='-1.3536617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929175' timestamp='2007-06-03T22:00:35+01:00' visible='true' lat='50.9772193' lon='-1.3620537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964060' timestamp='2007-04-03T00:09:05+01:00' user='Dean Earley' visible='true' lat='51.006818' lon='-1.433982'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26001628' timestamp='2007-02-18T20:20:20+00:00' visible='true' lat='50.9272869' lon='-1.3915099' />
-  <node id='90675687' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.8994218' lon='-1.443975' />
-  <node id='87980713' timestamp='2008-01-29T12:06:37+00:00' user='Dean Earley' visible='true' lat='50.9574452' lon='-1.3461648' />
-  <node id='27237361' timestamp='2007-04-09T14:37:14+01:00' user='avantman42' visible='true' lat='50.9012135' lon='-1.348722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998959' timestamp='2007-06-05T23:28:54+01:00' user='nickw' visible='true' lat='50.9876834' lon='-1.440646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173958' timestamp='2007-04-29T01:03:26+01:00' visible='true' lat='50.9421777' lon='-1.434349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001302' timestamp='2007-05-16T00:59:46+01:00' visible='true' lat='50.9221859' lon='-1.3833923'>
-    <tag k='name' v='The Bridge Inn' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728567' timestamp='2007-03-23T22:53:04+00:00' user='nickw' visible='true' lat='50.9002464' lon='-1.3744205'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29535463' timestamp='2007-06-11T21:52:01+01:00' visible='true' lat='50.9867865' lon='-1.3535338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689124' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9410372' lon='-1.3845828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179471' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9640478' lon='-1.4089094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246667' timestamp='2007-04-29T21:09:37+01:00' visible='true' lat='50.9479148' lon='-1.4351535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671364' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9149754' lon='-1.4380358' />
-  <node id='28240328' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9064342' lon='-1.3518491'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414292' timestamp='2007-05-01T23:50:11+01:00' user='nickw' visible='true' lat='50.9441194' lon='-1.3715913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339194' timestamp='2007-04-30T20:39:45+01:00' visible='true' lat='50.9699053' lon='-1.3633112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217897' timestamp='2006-07-09T23:00:37+01:00' user='Dean Earley' visible='true' lat='50.9270226' lon='-1.3647037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269051' timestamp='2005-11-20T12:17:36+00:00' user='nickw' visible='true' lat='50.9492014' lon='-1.3724868' />
-  <node id='402741' timestamp='2007-04-05T14:22:01+01:00' user='Dean Earley' visible='true' lat='50.908928' lon='-1.4126119' />
-  <node id='21275638' timestamp='2006-11-25T23:47:31+00:00' user='nickw' visible='true' lat='50.9140454' lon='-1.4313101'>
-    <tag k='name' v='NELSON' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924314' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9853814' lon='-1.3706147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372812' timestamp='2007-05-01T10:05:25+01:00' visible='true' lat='50.9290829' lon='-1.4345163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657726' timestamp='2007-04-05T14:22:01+01:00' user='Dean Earley' visible='true' lat='50.906761' lon='-1.3424794' />
-  <node id='90665694' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.8998197' lon='-1.4126779' />
-  <node id='301604' timestamp='2007-04-03T00:53:57+01:00' user='Ben' visible='true' lat='50.9340725' lon='-1.4010194' />
-  <node id='29926270' timestamp='2007-06-03T20:57:37+01:00' visible='true' lat='50.9790022' lon='-1.3659825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512880' timestamp='2007-05-25T18:50:23+01:00' visible='true' lat='50.9644776' lon='-1.3515787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141437' timestamp='2006-11-21T23:12:46+00:00' user='nickw' visible='true' lat='50.9226723' lon='-1.4222338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997560' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9935608' lon='-1.3487622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874147' timestamp='2007-06-02T19:43:16+01:00' visible='true' lat='50.9605902' lon='-1.3594052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998089' timestamp='2007-06-05T23:00:24+01:00' user='nickw' visible='true' lat='50.9877272' lon='-1.4041408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331334' timestamp='2007-12-06T22:11:13+00:00' user='Dean Earley' visible='true' lat='51.0033' lon='-1.37076' />
-  <node id='17768853' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9388621' lon='-1.3780716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325170' timestamp='2006-11-11T17:20:47+00:00' user='Dean Earley' visible='true' lat='50.9511178' lon='-1.4001332' />
-  <node id='29710900' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9850157' lon='-1.3569425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890098' timestamp='2007-02-18T21:25:28+00:00' visible='true' lat='50.9158931' lon='-1.3948559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254521' timestamp='2007-02-18T21:30:34+00:00' visible='true' lat='50.899912' lon='-1.3912698' />
-  <node id='254372' timestamp='2006-09-02T14:28:40+01:00' user='Dean Earley' visible='true' lat='50.9160038' lon='-1.4063954' />
-  <node id='206162248' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9734728' lon='-1.3854704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160213501' timestamp='2007-12-10T19:09:23+00:00' user='sladen' visible='true' lat='50.9214702' lon='-1.3881911' />
-  <node id='20961052' timestamp='2006-11-11T17:12:41+00:00' user='Dean Earley' visible='true' lat='50.9495719' lon='-1.3717556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398378' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9516881' lon='-1.4451727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830662' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9243086' lon='-1.364523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632174' timestamp='2007-05-26T19:20:20+01:00' visible='true' lat='50.9580262' lon='-1.367892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92682346' timestamp='2007-12-07T13:27:41+00:00' user='Nick Dyer' visible='true' lat='50.9612989' lon='-1.4262337' />
-  <node id='24949990' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9967419' lon='-1.3916615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122352472' timestamp='2007-11-18T19:21:22+00:00' user='nickw' visible='true' lat='50.9099739' lon='-1.4227666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179450' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.958236' lon='-1.4248987'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87826000' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8993803' lon='-1.4388196' />
-  <node id='28935755' timestamp='2007-05-11T00:50:44+01:00' visible='true' lat='50.9404794' lon='-1.4447709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87800151' timestamp='2007-10-26T12:21:06+01:00' user='Nick Dyer' visible='true' lat='50.9015347' lon='-1.442373' />
-  <node id='21141385' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9318564' lon='-1.4264387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796770' timestamp='2007-05-30T22:22:04+01:00' user='nickw' visible='true' lat='50.9137712' lon='-1.3542304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009084' timestamp='2007-05-12T15:31:59+01:00' user='nickw' visible='true' lat='50.929408' lon='-1.3526099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706228' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9093521' lon='-1.378088'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29856369' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9471284' lon='-1.3921167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932237' timestamp='2007-09-15T18:41:58+01:00' user='mike l' visible='true' lat='50.9699118' lon='-1.4442179'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157216955' timestamp='2007-12-08T20:19:41+00:00' user='nickw' visible='true' lat='50.9452787' lon='-1.448561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014683' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9292854' lon='-1.3703498' />
-  <node id='20973110' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9046252' lon='-1.4086677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601328' timestamp='2006-09-01T00:16:05+01:00' user='nickw' visible='true' lat='50.8880496' lon='-1.5269709'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='13706476' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9267429' lon='-1.3794567'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='675841' timestamp='2007-04-05T14:22:01+01:00' user='Dean Earley' visible='true' lat='50.9326426' lon='-1.3723747' />
-  <node id='28348322' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9242444' lon='-1.3599348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87844668' timestamp='2007-10-26T13:01:52+01:00' user='Nick Dyer' visible='true' lat='50.9073748' lon='-1.4294311' />
-  <node id='28243638' timestamp='2007-04-29T20:25:05+01:00' user='Dean Earley' visible='true' lat='50.9382955' lon='-1.4163152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984786' timestamp='2007-01-10T00:15:04+00:00' user='nickw' visible='true' lat='50.9425565' lon='-1.3859665'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728868' timestamp='2007-05-28T19:12:25+01:00' visible='true' lat='50.9714177' lon='-1.3554171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20698066' timestamp='2006-10-31T22:26:04+00:00' user='nickw' visible='true' lat='50.9052808' lon='-1.4044898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254868' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9209343' lon='-1.4755731' />
-  <node id='29924352' timestamp='2007-06-03T20:10:40+01:00' visible='true' lat='50.982315' lon='-1.3636129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325196' timestamp='2006-11-11T17:20:47+00:00' user='Dean Earley' visible='true' lat='50.9478638' lon='-1.3670998' />
-  <node id='17504819' timestamp='2007-04-29T01:53:41+01:00' user='Dean Earley' visible='true' lat='50.9541719' lon='-1.4024156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926800' timestamp='2007-06-03T21:02:52+01:00' visible='true' lat='50.9791203' lon='-1.3640304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222195' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.907135' lon='-1.4218161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794379' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.9224151' lon='-1.3638334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705961' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8874593' lon='-1.3929633' />
-  <node id='20134830' timestamp='2006-10-28T02:02:31+01:00' user='Dean Earley' visible='true' lat='50.9289837' lon='-1.3534074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908513' timestamp='2007-09-23T16:33:11+01:00' user='mike l' visible='true' lat='50.9386297' lon='-1.3659595' />
-  <node id='25639899' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.900954' lon='-1.3819834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998058' timestamp='2007-06-05T23:00:20+01:00' user='nickw' visible='true' lat='50.9844443' lon='-1.4096936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816773' timestamp='2007-05-31T22:15:43+01:00' visible='true' lat='50.9879003' lon='-1.3608756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342558' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9073419' lon='-1.3661593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372763' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9310208' lon='-1.4379961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173768' timestamp='2007-04-29T00:58:14+01:00' visible='true' lat='50.9451054' lon='-1.4322393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109768' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true' lat='50.9302243' lon='-1.430959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764477' timestamp='2007-02-16T20:51:28+00:00' user='nickw' visible='true' lat='50.9125453' lon='-1.3920783' />
-  <node id='388921' timestamp='2007-04-05T14:22:01+01:00' user='Dean Earley' visible='true' lat='50.9448506' lon='-1.3982655' />
-  <node id='19227262' timestamp='2006-10-23T20:52:59+01:00' user='nickw' visible='true' lat='50.9260759' lon='-1.4146975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505716' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9942879' lon='-1.3540971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127864' timestamp='2007-10-29T08:19:30+00:00' user='nickw' visible='true' lat='50.9367921' lon='-1.4348839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348723' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.989226' lon='-1.4344504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689171' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9398667' lon='-1.3711131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092043' timestamp='2006-11-19T12:29:36+00:00' user='nickw' visible='true' lat='50.9398482' lon='-1.4398137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160290748' timestamp='2007-12-10T19:57:14+00:00' user='sladen' visible='true' lat='50.9153125' lon='-1.4838236' />
-  <node id='29733452' timestamp='2007-12-06T19:26:17+00:00' user='Dean Earley' visible='true' lat='50.9810042' lon='-1.4436292'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422995' timestamp='2007-05-22T00:19:45+01:00' user='Dean Earley' visible='true' lat='50.9480319' lon='-1.395793' />
-  <node id='26447497' timestamp='2007-03-09T21:14:48+00:00' user='nickw' visible='true' lat='50.9077679' lon='-1.392067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180209' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9623024' lon='-1.4251526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071420' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9231658' lon='-1.35371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962317' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9573506' lon='-1.362195' />
-  <node id='29998110' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.9858575' lon='-1.3949127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903928' timestamp='2007-10-17T01:09:35+01:00' user='Dean Earley' visible='true' lat='50.9510942' lon='-1.3628469'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269321' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9884821' lon='-1.3877142' />
-  <node id='29380422' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.9453153' lon='-1.3800846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278562' timestamp='2007-08-14T04:48:02+01:00' user='andrewpmk' visible='true' lat='50.9076307' lon='-1.397107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298236' timestamp='2007-01-06T14:30:51+00:00' user='Dean Earley' visible='true' lat='51.0047636' lon='-1.3543259' />
-  <node id='30229464' timestamp='2007-06-12T00:08:05+01:00' user='nickw' visible='true' lat='50.9339112' lon='-1.3514308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110892' timestamp='2007-02-18T20:19:16+00:00' visible='true' lat='50.9357767' lon='-1.3644119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506813' timestamp='2007-06-17T22:03:34+01:00' visible='true' lat='50.9785828' lon='-1.3620876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325012' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9575296' lon='-1.4165019' />
-  <node id='254834' timestamp='2007-04-03T00:51:36+01:00' user='Dean Earley' visible='true' lat='50.9120255' lon='-1.420464' />
-  <node id='20130942' timestamp='2006-10-28T01:45:34+01:00' user='Dean Earley' visible='true' lat='50.9314585' lon='-1.3589886'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245145683' timestamp='2008-02-03T05:57:37+00:00' user='sladen' visible='true' lat='50.9141012' lon='-1.402054' />
-  <node id='157204128' timestamp='2007-12-08T20:11:10+00:00' user='nickw' visible='true' lat='50.9429629' lon='-1.4459485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269047' timestamp='2005-11-20T12:17:36+00:00' user='nickw' visible='true' lat='50.9461989' lon='-1.3710609' />
-  <node id='29462608' timestamp='2007-05-21T23:56:38+01:00' user='nickw' visible='true' lat='50.9039979' lon='-1.4024618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636946' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9180429' lon='-1.4311368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924329' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9817794' lon='-1.3888922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071259' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9195624' lon='-1.3609855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704530' timestamp='2007-05-28T10:40:39+01:00' visible='true' lat='50.9803182' lon='-1.357378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706286' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9136079' lon='-1.386371'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28232551' timestamp='2007-04-29T18:59:25+01:00' user='nickw' visible='true' lat='50.9080704' lon='-1.3690608'>
-    <tag k='name' v='THRUX CT' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976663' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9334099' lon='-1.4273976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740471' timestamp='2007-01-19T09:58:47+00:00' user='Dean Earley' visible='true' lat='50.9725546' lon='-1.3509734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675770' timestamp='2007-02-18T21:30:31+00:00' visible='true' lat='50.9115032' lon='-1.4327338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160263995' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9579236' lon='-1.3704499' />
-  <node id='30225802' timestamp='2007-06-11T22:16:47+01:00' visible='true' lat='50.9829612' lon='-1.3562943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561550' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9207405' lon='-1.4289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947168' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.913337' lon='-1.3924211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134121' timestamp='2007-05-22T00:19:46+01:00' user='Dean Earley' visible='true' lat='50.9388569' lon='-1.4026675'>
-    <tag k='name' v='THE MAYFLR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133137' timestamp='2006-10-28T01:55:40+01:00' user='Dean Earley' visible='true' lat='50.9272959' lon='-1.3534804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636953' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.9205888' lon='-1.413755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984801' timestamp='2007-01-10T00:15:43+00:00' user='nickw' visible='true' lat='50.9410042' lon='-1.377841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467500' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.9278067' lon='-1.3798469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248229' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8961847' lon='-1.3973322' />
-  <node id='28936013' timestamp='2007-05-11T00:59:51+01:00' visible='true' lat='50.9416243' lon='-1.4411767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464307' timestamp='2007-05-22T00:19:24+01:00' user='Dean Earley' visible='true' lat='50.9473942' lon='-1.3969143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971162' timestamp='2006-11-12T22:57:16+00:00' user='Dean Earley' visible='true' lat='50.9028294' lon='-1.3998287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194377' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9449832' lon='-1.4397574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325687' timestamp='2007-04-05T14:22:02+01:00' user='Dean Earley' visible='true' lat='50.9201' lon='-1.41279' />
-  <node id='30089139' timestamp='2007-06-13T09:24:39+01:00' visible='true' lat='50.9641069' lon='-1.3776588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964854' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='51.0038621' lon='-1.4345836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704601' timestamp='2007-05-28T10:48:38+01:00' visible='true' lat='50.9760813' lon='-1.3540385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325185' timestamp='2005-12-16T23:01:13+00:00' user='80n' visible='true' lat='50.9496666' lon='-1.3783284' />
-  <node id='160269527' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9743724' lon='-1.3552578' />
-  <node id='29509893' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9889163' lon='-1.3593314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636931' timestamp='2006-12-18T21:41:04+00:00' user='nickw' visible='true' lat='50.9088555' lon='-1.41525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595095' timestamp='2007-05-25T21:54:11+01:00' visible='true' lat='50.9686319' lon='-1.3522673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464250' timestamp='2007-05-22T00:19:12+01:00' user='Dean Earley' visible='true' lat='50.9386463' lon='-1.4081413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874044' timestamp='2007-05-08T14:50:17+01:00' visible='true' lat='50.9388241' lon='-1.4403869'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997543' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0003627' lon='-1.3494774'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998093' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.987252' lon='-1.4016376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745431' timestamp='2007-10-31T15:18:29+00:00' user='Dean Earley' visible='true' lat='50.965989' lon='-1.3511051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109261' timestamp='2007-10-29T07:50:30+00:00' user='nickw' visible='true' lat='50.9330463' lon='-1.4220512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92685107' timestamp='2007-10-31T12:25:03+00:00' user='Dean Earley' visible='true' lat='50.9620373' lon='-1.4240183' />
-  <node id='28173988' timestamp='2007-04-29T01:03:45+01:00' visible='true' lat='50.9420025' lon='-1.4336693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28230923' timestamp='2007-04-29T18:43:32+01:00' user='nickw' visible='true' lat='50.9098898' lon='-1.3648464'>
-    <tag k='name' v='BLACK CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133052' timestamp='2007-05-15T20:36:45+01:00' user='nickw' visible='true' lat='50.9327451' lon='-1.3771519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071351' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.9186595' lon='-1.3651571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582933' timestamp='2007-05-02T23:57:43+01:00' visible='true' lat='50.9417513' lon='-1.4264621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108526' timestamp='2007-10-29T07:48:09+00:00' user='nickw' visible='true' lat='50.9322093' lon='-1.420126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707330' timestamp='2007-05-28T11:54:37+01:00' visible='true' lat='50.9873719' lon='-1.3590608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290719' timestamp='2008-01-04T19:25:08+00:00' user='nickw' visible='true' lat='50.9711025' lon='-1.3793757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29506473' timestamp='2007-05-22T19:46:56+01:00' visible='true' lat='50.9870721' lon='-1.3512708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132719' timestamp='2006-08-11T09:59:06+01:00' user='80n' visible='true' lat='50.9752811' lon='-1.3727968' />
-  <node id='18398461' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true' lat='50.9211324' lon='-1.4151884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721015' timestamp='2007-01-06T14:30:52+00:00' user='Dean Earley' visible='true' lat='50.9726211' lon='-1.375875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507803' timestamp='2006-12-18T21:21:59+00:00' user='nickw' visible='true' lat='50.9435768' lon='-1.3967873'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160279830' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9203231' lon='-1.47276' />
-  <node id='28249933' timestamp='2007-04-29T21:41:51+01:00' visible='true' lat='50.917441' lon='-1.4555271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431997' timestamp='2007-06-16T16:26:10+01:00' visible='true' lat='50.9855857' lon='-1.3508652'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194444' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9463671' lon='-1.4351567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189054' timestamp='2006-11-22T23:51:56+00:00' user='crouchingbadger' visible='true' lat='50.9305247' lon='-1.448038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830653' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.923745' lon='-1.3700459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28141321' timestamp='2007-04-28T17:57:51+01:00' visible='true' lat='50.9690389' lon='-1.3575138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109276' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true' lat='50.9339352' lon='-1.4247928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924299' timestamp='2008-01-04T19:29:42+00:00' user='nickw' visible='true' lat='50.9711343' lon='-1.383538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290788' timestamp='2007-06-13T09:24:10+01:00' visible='true' lat='50.9647909' lon='-1.380159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348318' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.923299' lon='-1.3601244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254491' timestamp='2007-01-19T18:58:06+00:00' user='Dean Earley' visible='true' lat='50.9106116' lon='-1.40164' />
-  <node id='21275706' timestamp='2006-11-25T23:51:18+00:00' user='nickw' visible='true' lat='50.9239396' lon='-1.4334426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123653' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9319523' lon='-1.4456356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956629' timestamp='2007-06-26T23:45:05+01:00' user='nickw' visible='true' lat='50.9321321' lon='-1.3516928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600672' timestamp='2007-09-17T23:09:10+01:00' user='mike l' visible='true' lat='50.9748493' lon='-1.4031533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52570896' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true' lat='50.9972376' lon='-1.4302305' />
-  <node id='13071334' timestamp='2007-04-20T23:53:19+01:00' user='Dean Earley' visible='true' lat='50.9160864' lon='-1.3663677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089098' timestamp='2007-06-08T18:12:05+01:00' visible='true' lat='50.9655839' lon='-1.3774904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431952' timestamp='2007-06-17T22:38:25+01:00' visible='true' lat='50.9837944' lon='-1.3508734'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Ham Farm Pub' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183734' timestamp='2007-04-29T02:25:38+01:00' user='Dean Earley' visible='true' lat='50.9505774' lon='-1.4106638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9736872' timestamp='2007-04-20T23:53:19+01:00' user='Dean Earley' visible='true' lat='50.9178266' lon='-1.3826874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305225' timestamp='2006-10-06T23:52:03+01:00' user='Dean Earley' visible='true' lat='50.9952239' lon='-1.3590165' />
-  <node id='17722346' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.9544602' lon='-1.3735455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29839513' timestamp='2007-06-01T21:00:15+01:00' visible='true' lat='50.9780006' lon='-1.352416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838971' timestamp='2007-06-01T20:50:37+01:00' visible='true' lat='50.9889657' lon='-1.3959446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071201' timestamp='2006-08-11T02:47:51+01:00' user='Dean Earley' visible='true' lat='50.9242282' lon='-1.3668793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387802' timestamp='2007-04-05T14:22:02+01:00' user='Dean Earley' visible='true' lat='50.9257' lon='-1.40376' />
-  <node id='10537335' timestamp='2007-06-12T00:08:13+01:00' user='nickw' visible='true' lat='50.9337792' lon='-1.3521554'>
-    <tag k='name' v='Torridge Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249968' timestamp='2007-04-29T21:42:03+01:00' visible='true' lat='50.9148368' lon='-1.4469736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157222326' timestamp='2007-12-08T20:23:18+00:00' user='nickw' visible='true' lat='50.9460547' lon='-1.4441022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107325' timestamp='2006-10-27T22:49:23+01:00' user='Dean Earley' visible='true' lat='50.9365806' lon='-1.350189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518769' timestamp='2007-04-05T14:22:03+01:00' user='Dean Earley' visible='true' lat='50.9097307' lon='-1.3941822' />
-  <node id='13706634' timestamp='2007-04-05T14:22:03+01:00' user='Dean Earley' visible='true' lat='50.916359' lon='-1.3836921' />
-  <node id='254274' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9583018' lon='-1.3365222' />
-  <node id='26781172' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.9014007' lon='-1.3748211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227232' timestamp='2006-10-23T20:52:57+01:00' user='nickw' visible='true' lat='50.9374174' lon='-1.4179341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340626' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9635551' lon='-1.3724881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124675' timestamp='2007-06-09T19:48:39+01:00' user='nickw' visible='true' lat='50.9314054' lon='-1.3531688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705628' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8957425' lon='-1.4082124'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28194877' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.943258' lon='-1.4104678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911798' timestamp='2007-06-11T21:52:00+01:00' visible='true' lat='50.9869933' lon='-1.3534606'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962274' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9561396' lon='-1.3633709' />
-  <node id='160183652' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.8992272' lon='-1.379093' />
-  <node id='92684540' timestamp='2007-10-31T12:25:02+00:00' user='Dean Earley' visible='true' lat='50.9617709' lon='-1.4224918' />
-  <node id='25761521' timestamp='2007-05-12T09:43:59+01:00' user='nickw' visible='true' lat='50.9354369' lon='-1.3609457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816593' timestamp='2007-05-31T22:07:48+01:00' visible='true' lat='50.9900453' lon='-1.3556629'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347764' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.9308091' lon='-1.3597921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278547' timestamp='2007-08-14T04:48:01+01:00' user='andrewpmk' visible='true' lat='50.9076765' lon='-1.3968382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704301' timestamp='2007-05-28T10:32:50+01:00' visible='true' lat='50.9866272' lon='-1.356227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973121' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9041473' lon='-1.4135175'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229559' timestamp='2007-06-12T00:14:36+01:00' user='nickw' visible='true' lat='50.9333853' lon='-1.3542121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816300' timestamp='2007-05-31T21:52:26+01:00' visible='true' lat='50.9911274' lon='-1.354434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319644' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9218025' lon='-1.3994265' />
-  <node id='388891' timestamp='2007-05-15T20:47:45+01:00' user='nickw' visible='true' lat='50.9428064' lon='-1.3915876' />
-  <node id='206334645' timestamp='2008-01-05T17:55:00+00:00' user='Andy Street' visible='true' lat='50.9028231' lon='-1.3474655' />
-  <node id='21600420' timestamp='2006-12-16T10:13:52+00:00' user='nickw' visible='true' lat='50.9225732' lon='-1.4391498'>
-    <tag k='name' v='HENTY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30581717' timestamp='2007-06-18T21:23:07+01:00' visible='true' lat='50.9693302' lon='-1.3574478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743158' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9244141' lon='-1.4273669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254454' timestamp='2006-09-02T18:21:44+01:00' user='Dean Earley' visible='true' lat='50.910144' lon='-1.4011669' />
-  <node id='14743177' timestamp='2006-09-03T00:38:41+01:00' user='Dean Earley' visible='true' lat='50.9077674' lon='-1.4101679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724240' timestamp='2007-02-18T21:30:54+00:00' visible='true' lat='50.9142532' lon='-1.4122276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339134' timestamp='2007-04-30T20:39:22+01:00' visible='true' lat='50.9695891' lon='-1.3627313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071287' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9185219' lon='-1.3597476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28235755' timestamp='2007-04-29T19:22:28+01:00' user='nickw' visible='true' lat='50.9145945' lon='-1.3446571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923783' timestamp='2007-06-03T20:04:49+01:00' visible='true' lat='50.9821752' lon='-1.3627115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509883' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9897384' lon='-1.3591834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998570' timestamp='2007-06-05T23:13:27+01:00' user='nickw' visible='true' lat='50.9605502' lon='-1.4388382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706252' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9128314' lon='-1.377182'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='13707200' timestamp='2007-04-05T14:22:06+01:00' user='Dean Earley' visible='true' lat='50.8533595' lon='-1.3250938' />
-  <node id='28257900' timestamp='2007-04-29T22:56:49+01:00' user='Andy Street' visible='true' lat='50.9014493' lon='-1.353432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021806' timestamp='2007-04-03T00:53:03+01:00' user='Ben' visible='true' lat='50.9369458' lon='-1.4025123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271131' timestamp='2006-06-03T23:38:48+01:00' user='Dean Earley' visible='true' lat='50.9382' lon='-1.39335'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Crown and Sceptre' />
-  </node>
-  <node id='675855' timestamp='2007-11-20T11:02:00+00:00' user='Gregory Williams' visible='true' lat='50.92617' lon='-1.3541324'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='66587707' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9313845' lon='-1.4487359' />
-  <node id='245148772' timestamp='2008-02-03T06:07:18+00:00' user='sladen' visible='true' lat='50.9030713' lon='-1.4026634' />
-  <node id='25639963' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.9016755' lon='-1.3789369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595165' timestamp='2007-05-25T21:54:23+01:00' visible='true' lat='50.9673134' lon='-1.3516255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179509' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9535788' lon='-1.4025666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721064' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9706381' lon='-1.3598015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224265' timestamp='2007-06-11T22:06:23+01:00' visible='true' lat='50.9835592' lon='-1.3544542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291049' timestamp='2007-06-13T09:32:58+01:00' visible='true' lat='50.9654852' lon='-1.3859099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976712' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9330999' lon='-1.4255188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463039' timestamp='2007-05-22T00:01:34+01:00' user='nickw' visible='true' lat='50.9096839' lon='-1.408182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727958' timestamp='2006-09-02T19:01:59+01:00' user='Dean Earley' visible='true' lat='50.9204027' lon='-1.404611'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346863' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9145862' lon='-1.3676072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28388969' timestamp='2007-08-21T00:40:59+01:00' user='HenryDCase' visible='true' lat='50.9653072' lon='-1.3618704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704451' timestamp='2007-05-28T10:36:07+01:00' visible='true' lat='50.9826425' lon='-1.3574263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700386' timestamp='2007-04-05T14:22:07+01:00' user='Dean Earley' visible='true' lat='50.9253745' lon='-1.3916452' />
-  <node id='13706331' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.917914' lon='-1.389882'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29913613' timestamp='2007-06-03T15:54:45+01:00' visible='true' lat='50.9856408' lon='-1.3609828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423274' timestamp='2007-09-25T17:50:08+01:00' user='mike l' visible='true' lat='50.9396453' lon='-1.3894045' />
-  <node id='21689145' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9386493' lon='-1.3787171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290754' timestamp='2007-06-13T09:24:03+01:00' visible='true' lat='50.9654137' lon='-1.3767176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504289' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='50.999014' lon='-1.3468011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341751' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9130165' lon='-1.3510208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001336' timestamp='2007-05-16T00:59:47+01:00' visible='true' lat='50.9230197' lon='-1.3806688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142620785' timestamp='2007-11-29T22:31:13+00:00' user='nickw' visible='true' lat='50.9178383' lon='-1.4131785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710125' timestamp='2007-05-28T13:11:08+01:00' visible='true' lat='50.9886184' lon='-1.3689798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966251' timestamp='2006-11-12T17:38:32+00:00' user='Dean Earley' visible='true' lat='50.9451799' lon='-1.3729447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418527' timestamp='2007-05-02T00:35:23+01:00' visible='true' lat='50.9674644' lon='-1.3647575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254257' timestamp='2007-02-18T20:18:35+00:00' visible='true' lat='50.9408019' lon='-1.360956' />
-  <node id='28372736' timestamp='2007-05-01T10:05:15+01:00' visible='true' lat='50.9291454' lon='-1.441351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071240' timestamp='2006-08-11T02:47:59+01:00' user='Dean Earley' visible='true' lat='50.9219035' lon='-1.3666248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224278' timestamp='2007-06-11T22:06:24+01:00' visible='true' lat='50.9830781' lon='-1.3554055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700544' timestamp='2007-04-05T14:22:07+01:00' user='Dean Earley' visible='true' lat='50.9210855' lon='-1.392403' />
-  <node id='92680541' timestamp='2007-10-31T12:24:55+00:00' user='Dean Earley' visible='true' lat='50.9608534' lon='-1.4259777' />
-  <node id='160406182' timestamp='2007-12-10T20:56:44+00:00' user='sladen' visible='true' lat='50.911286' lon='-1.4310356' />
-  <node id='28194862' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9439188' lon='-1.4078115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926695' timestamp='2007-06-03T21:00:15+01:00' visible='true' lat='50.9791728' lon='-1.3650475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639982' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9012522' lon='-1.3793363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16570732' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9206583' lon='-1.4771781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372748' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9301665' lon='-1.4403924'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254960' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.940088' lon='-1.4206506' />
-  <node id='700510' timestamp='2007-04-05T14:22:07+01:00' user='Dean Earley' visible='true' lat='50.9273276' lon='-1.3721765' />
-  <node id='29931365' timestamp='2007-06-03T22:43:06+01:00' visible='true' lat='50.995241' lon='-1.3730139'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='382996' timestamp='2007-04-05T14:22:07+01:00' user='Dean Earley' visible='true' lat='50.9282998' lon='-1.4238' />
-  <node id='24949977' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9859857' lon='-1.3830918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48965773' timestamp='2007-11-20T16:53:26+00:00' user='Nick Dyer' visible='true' lat='50.9053528' lon='-1.4085341'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5b' />
-  </node>
-  <node id='91110990' timestamp='2007-10-29T07:59:21+00:00' user='nickw' visible='true' lat='50.9270235' lon='-1.4412127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469861' timestamp='2007-04-05T14:22:08+01:00' user='Dean Earley' visible='true' lat='50.9114' lon='-1.42279' />
-  <node id='170458' timestamp='2007-01-06T14:30:52+00:00' user='Dean Earley' visible='true' lat='50.9617808' lon='-1.3893895' />
-  <node id='254598' timestamp='2006-08-27T18:01:38+01:00' user='Dean Earley' visible='true' lat='50.9167019' lon='-1.4074963' />
-  <node id='675832' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.9270513' lon='-1.3774042' />
-  <node id='30432005' timestamp='2007-06-16T16:28:30+01:00' visible='true' lat='50.971945' lon='-1.3495277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372789' timestamp='2007-12-14T21:27:15+00:00' user='nickw' visible='true' lat='50.928058' lon='-1.4402069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668361' timestamp='2007-01-04T21:06:45+00:00' user='nickw' visible='true' lat='50.9832753' lon='-1.3942209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009024' timestamp='2007-05-12T15:28:41+01:00' user='nickw' visible='true' lat='50.9310546' lon='-1.3504941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110502' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true' lat='50.9305264' lon='-1.4314234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398416' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9802347' lon='-1.4118922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903875' timestamp='2007-05-10T01:06:33+01:00' user='LivingWithDragons' visible='true' lat='50.981195' lon='-1.4445651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348140' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9336982' lon='-1.3650008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237234' timestamp='2007-04-29T19:42:02+01:00' user='Andy Street' visible='true' lat='50.9021989' lon='-1.3577081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575773' timestamp='2007-03-25T19:25:22+01:00' user='Dean Earley' visible='true' lat='50.9011802' lon='-1.3949201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577117' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9642437' lon='-1.4224687' />
-  <node id='24949815' timestamp='2007-01-07T12:38:43+00:00' user='nickw' visible='true' lat='50.9864425' lon='-1.3831532'>
-    <tag k='name' v='KINGS R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179522' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9556853' lon='-1.4015694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675804' timestamp='2007-02-06T01:03:08+00:00' user='Dean Earley' visible='true' lat='50.9094573' lon='-1.446959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324345' timestamp='2005-12-16T00:18:59+00:00' user='nickw' visible='true' lat='50.9175754' lon='-1.4012504' />
-  <node id='29595203' timestamp='2007-05-25T21:54:35+01:00' visible='true' lat='50.9675407' lon='-1.3536711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640035' timestamp='2007-02-04T22:51:27+00:00' user='Dean Earley' visible='true' lat='50.914355' lon='-1.3624844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830632' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9270886' lon='-1.3615231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596762' timestamp='2006-11-13T00:10:33+00:00' user='Dean Earley' visible='true' lat='50.9032106' lon='-1.4121308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549354' timestamp='2007-05-24T11:22:48+01:00' visible='true' lat='50.9699693' lon='-1.3707326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971143' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.9104194' lon='-1.3994176'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984688' timestamp='2007-01-10T00:10:59+00:00' user='nickw' visible='true' lat='50.9449098' lon='-1.3861751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659229' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9035979' lon='-1.4060003' />
-  <node id='28183743' timestamp='2007-04-29T02:25:39+01:00' user='Dean Earley' visible='true' lat='50.9486329' lon='-1.4073683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160232037' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9072164' lon='-1.3942765' />
-  <node id='201644179' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true' lat='50.9480108' lon='-1.3648596' />
-  <node id='9727812' timestamp='2007-11-11T18:09:42+00:00' user='Dean Earley' visible='true' lat='50.9151483' lon='-1.3576102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700392' timestamp='2007-04-05T14:22:08+01:00' user='Dean Earley' visible='true' lat='50.9234058' lon='-1.3921765' />
-  <node id='26447390' timestamp='2007-03-09T20:54:21+00:00' user='nickw' visible='true' lat='50.9119825' lon='-1.387849'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Prince of Wales' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90662865' timestamp='2007-10-28T21:47:41+00:00' user='Nick Dyer' visible='true' lat='50.9055085' lon='-1.4077856' />
-  <node id='29132667' timestamp='2007-05-15T20:24:19+01:00' user='nickw' visible='true' lat='50.9270916' lon='-1.3786369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296299' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9831695' lon='-1.3577614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962287' timestamp='2007-12-10T19:32:11+00:00' user='sladen' visible='true' lat='50.9578479' lon='-1.365197' />
-  <node id='88051797' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9917848' lon='-1.4781098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746410' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9904779' lon='-1.3421834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462755' timestamp='2007-05-21T23:57:40+01:00' user='nickw' visible='true' lat='50.9050754' lon='-1.4010116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964110' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9206106' lon='-1.3783703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071210' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9246843' lon='-1.3670279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124224' timestamp='2007-06-09T19:35:55+01:00' user='nickw' visible='true' lat='50.9242335' lon='-1.3516142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117375' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9300694' lon='-1.4451662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160265686' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9738427' lon='-1.3766211' />
-  <node id='30511430' timestamp='2007-06-17T22:30:28+01:00' visible='true' lat='50.9747133' lon='-1.3597802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781157' timestamp='2007-03-25T18:42:12+01:00' user='Dean Earley' visible='true' lat='50.8998882' lon='-1.3647917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250064' timestamp='2007-04-29T21:42:21+01:00' visible='true' lat='50.9153256' lon='-1.4506816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134140' timestamp='2007-05-15T20:47:34+01:00' user='nickw' visible='true' lat='50.9409851' lon='-1.3916107'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730505' timestamp='2007-05-28T19:36:35+01:00' visible='true' lat='50.9715941' lon='-1.3717799'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123687' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9304881' lon='-1.4472311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447531' timestamp='2007-04-20T23:53:20+01:00' user='Dean Earley' visible='true' lat='50.9091779' lon='-1.3904769'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91130819' timestamp='2007-10-29T08:22:06+00:00' user='nickw' visible='true' lat='50.9287632' lon='-1.429356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707031' timestamp='2007-04-05T14:22:08+01:00' user='Dean Earley' visible='true' lat='50.8671719' lon='-1.347' />
-  <node id='29998119' timestamp='2007-06-05T23:00:28+01:00' user='nickw' visible='true' lat='50.9891091' lon='-1.3976941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903637' timestamp='2008-01-01T18:33:11+00:00' user='Milliams' visible='true' lat='50.9479189' lon='-1.3641816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388876' timestamp='2007-04-05T14:22:08+01:00' user='Dean Earley' visible='true' lat='50.9346625' lon='-1.397412' />
-  <node id='10216401' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true' lat='50.9212121' lon='-1.3566154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92571643' timestamp='2007-12-22T00:59:00+00:00' user='Jon Burgess' visible='true' lat='50.9580346' lon='-1.4486466'>
-    <tag k='highway' v='services' />
-    <tag k='name' v='Rownhams Services' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956723' timestamp='2007-06-26T23:49:22+01:00' user='nickw' visible='true' lat='50.9276713' lon='-1.3498502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468585' timestamp='2007-05-22T01:07:03+01:00' user='Dean Earley' visible='true' lat='50.9163316' lon='-1.455701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965524' timestamp='2007-09-17T23:09:08+01:00' user='mike l' visible='true' lat='50.9748465' lon='-1.4221899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577050' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9041235' lon='-1.416849' />
-  <node id='21178424' timestamp='2006-11-22T18:12:41+00:00' user='southglos' visible='true' lat='50.9937178' lon='-1.3551429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108520' timestamp='2007-10-29T07:48:08+00:00' user='nickw' visible='true' lat='50.9323547' lon='-1.4201775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600473' timestamp='2006-12-16T10:13:57+00:00' user='nickw' visible='true' lat='50.9402952' lon='-1.4469173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290724' timestamp='2007-06-13T09:23:56+01:00' visible='true' lat='50.9697377' lon='-1.381056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398393' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.9476715' lon='-1.4374263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122326365' timestamp='2007-11-18T19:06:34+00:00' user='nickw' visible='true' lat='50.9146838' lon='-1.4342496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467487' timestamp='2007-04-19T17:50:44+01:00' visible='true' lat='50.933619' lon='-1.3741453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816567' timestamp='2007-05-31T22:04:29+01:00' visible='true' lat='50.9911573' lon='-1.3539162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963767' timestamp='2007-05-22T00:19:46+01:00' user='Dean Earley' visible='true' lat='50.9382041' lon='-1.4026073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154765452' timestamp='2007-12-07T13:46:56+00:00' user='Nick Dyer' visible='true' lat='50.9605204' lon='-1.4332719' />
-  <node id='20976765' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9286173' lon='-1.4198568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930660' timestamp='2007-06-03T22:25:17+01:00' visible='true' lat='50.9959282' lon='-1.3522304'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380429' timestamp='2007-05-20T10:19:27+01:00' user='nickw' visible='true' lat='50.9436504' lon='-1.3767271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071257' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9204404' lon='-1.3602634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021776' timestamp='2007-04-03T00:52:47+01:00' user='Ben' visible='true' lat='50.9470885' lon='-1.4035069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271055' timestamp='2007-01-25T22:42:43+00:00' user='Dean Earley' visible='true' lat='50.9145' lon='-1.36201'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Bitterne' />
-  </node>
-  <node id='30290783' timestamp='2007-06-13T09:24:10+01:00' visible='true' lat='50.9653602' lon='-1.3819898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254774' timestamp='2007-04-03T00:52:05+01:00' user='Dean Earley' visible='true' lat='50.9240829' lon='-1.4356822' />
-  <node id='324988' timestamp='2005-12-16T21:47:32+00:00' user='80n' visible='true' lat='50.9600735' lon='-1.4294398' />
-  <node id='518803' timestamp='2007-04-05T14:22:09+01:00' user='Dean Earley' visible='true' lat='50.929' lon='-1.38408' />
-  <node id='30226206' timestamp='2007-06-11T22:20:37+01:00' visible='true' lat='50.98304' lon='-1.3523559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914261' timestamp='2007-06-03T16:05:27+01:00' visible='true' lat='50.98334' lon='-1.359523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238983' timestamp='2007-04-09T15:39:34+01:00' user='avantman42' visible='true' lat='50.8994094' lon='-1.4070454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636738' timestamp='2007-04-29T02:33:40+01:00' user='Dean Earley' visible='true' lat='50.9494142' lon='-1.4075918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392345' timestamp='2007-05-20T17:52:36+01:00' visible='true' lat='50.9643655' lon='-1.3528513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282123' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9782289' lon='-1.4066789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577039' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9198391' lon='-1.4715489' />
-  <node id='21561563' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.925147' lon='-1.4342457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728546' timestamp='2007-03-25T18:42:32+01:00' user='Dean Earley' visible='true' lat='50.9021321' lon='-1.3708161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668048' timestamp='2007-04-29T02:33:55+01:00' user='Dean Earley' visible='true' lat='50.9461701' lon='-1.4055009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997518' timestamp='2007-06-05T22:43:53+01:00' user='nickw' visible='true' lat='51.0124635' lon='-1.3590929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348305' timestamp='2007-04-30T23:48:45+01:00' user='nickw' visible='true' lat='50.9238812' lon='-1.3592196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911929' timestamp='2007-06-03T15:38:21+01:00' visible='true' lat='50.9866526' lon='-1.3569724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949932' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9926136' lon='-1.3863103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435882' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.9368039' lon='-1.4318434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984765' timestamp='2007-01-10T00:14:37+00:00' user='nickw' visible='true' lat='50.9458048' lon='-1.3989495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59599703' timestamp='2007-09-24T09:46:23+01:00' user='mike l' visible='true' lat='50.9971495' lon='-1.4543301' />
-  <node id='29953376' timestamp='2007-06-04T21:17:00+01:00' visible='true' lat='51.0040628' lon='-1.3841513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783100' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9464855' lon='-1.3531393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710208' timestamp='2007-05-28T13:23:39+01:00' visible='true' lat='50.9890712' lon='-1.3711573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659216' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.903809' lon='-1.4060089' />
-  <node id='271038' timestamp='2007-01-25T22:42:43+00:00' user='Dean Earley' visible='true' lat='50.931' lon='-1.39974'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Highfield' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='160418074' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9092836' lon='-1.4290357' />
-  <node id='206162630' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.9713774' lon='-1.3817454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801036' timestamp='2007-05-04T01:58:34+01:00' user='Dean Earley' visible='true' lat='50.9415899' lon='-1.4511028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661178' timestamp='2007-04-05T14:22:09+01:00' user='Dean Earley' visible='true' lat='50.9123692' lon='-1.3584707' />
-  <node id='29008936' timestamp='2007-05-12T15:26:02+01:00' user='nickw' visible='true' lat='50.9323286' lon='-1.349903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728855' timestamp='2007-06-02T19:52:09+01:00' visible='true' lat='50.970571' lon='-1.3539462'>
-    <tag k='junction' v='traffic_signals' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122337306' timestamp='2007-11-18T19:12:33+00:00' user='nickw' visible='true' lat='50.9180906' lon='-1.437319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924085' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9380264' lon='-1.3732073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254272' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9568968' lon='-1.3393332' />
-  <node id='29931380' timestamp='2007-06-03T22:43:09+01:00' visible='true' lat='50.9937848' lon='-1.3730835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28539405' timestamp='2007-05-02T21:44:59+01:00' user='nickw' visible='true' lat='50.9164672' lon='-1.3523737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895685' timestamp='2007-05-10T21:08:08+01:00' user='Dean Earley' visible='true' lat='50.9819903' lon='-1.4479264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600595' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9922835' lon='-1.404146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27434184' timestamp='2007-04-17T22:04:00+01:00' visible='true' lat='50.9292482' lon='-1.3887046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730530' timestamp='2007-05-28T19:37:01+01:00' visible='true' lat='50.9671129' lon='-1.3694892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254338' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9646095' lon='-1.4172796'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='160264006' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9529495' lon='-1.3697117' />
-  <node id='59740797' timestamp='2007-09-25T13:23:07+01:00' visible='true' lat='50.9123856' lon='-1.404823'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Mono' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='28249810' timestamp='2007-04-29T21:41:33+01:00' visible='true' lat='50.9221475' lon='-1.4432528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147520' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9091332' lon='-1.4030496' />
-  <node id='13071325' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.919638' lon='-1.362656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147527' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9103239' lon='-1.4025947' />
-  <node id='28252918' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9461892' lon='-1.4300681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706653' timestamp='2007-04-05T14:22:10+01:00' user='Dean Earley' visible='true' lat='50.911085' lon='-1.3718981' />
-  <node id='28194851' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9463832' lon='-1.4090236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226997' timestamp='2007-06-11T22:32:14+01:00' visible='true' lat='50.9820314' lon='-1.3524921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360194' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9569034' lon='-1.3717913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816743' timestamp='2007-05-31T22:13:33+01:00' visible='true' lat='50.9912328' lon='-1.3551302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026773' timestamp='2007-05-13T10:10:55+01:00' user='nickw' visible='true' lat='50.9211406' lon='-1.4089497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194347' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9452846' lon='-1.4378753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298268' timestamp='2007-01-06T14:30:52+00:00' user='Dean Earley' visible='true' lat='50.9623982' lon='-1.3881266' />
-  <node id='19111092' timestamp='2007-09-24T20:33:51+01:00' user='mike l' visible='true' lat='51.0176967' lon='-1.391656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30509425' timestamp='2007-06-17T22:18:56+01:00' visible='true' lat='50.9742655' lon='-1.3524367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160378138' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9214916' lon='-1.467402' />
-  <node id='13704898' timestamp='2006-08-25T22:23:19+01:00' user='dmgroom' visible='true' lat='50.9015334' lon='-1.4457371' />
-  <node id='30504251' timestamp='2007-06-17T21:34:39+01:00' visible='true' lat='50.9943176' lon='-1.3493706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160416571' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.909381' lon='-1.4291645' />
-  <node id='14964127' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.9199026' lon='-1.3758419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52573779' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true' lat='50.9927268' lon='-1.3976578' />
-  <node id='27021821' timestamp='2007-04-03T00:53:05+01:00' user='Ben' visible='true' lat='50.9408028' lon='-1.3973225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117335' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9312965' lon='-1.4450867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124217' timestamp='2007-06-09T19:35:54+01:00' user='nickw' visible='true' lat='50.9247469' lon='-1.3485548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780752' timestamp='2007-06-22T21:09:11+01:00' user='Steve Chilton' visible='true' lat='50.9078107' lon='-1.4056056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124207' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.9229561' lon='-1.3478594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700381' timestamp='2007-04-05T14:22:10+01:00' user='Dean Earley' visible='true' lat='50.923312' lon='-1.3930046' />
-  <node id='206163288' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.9695759' lon='-1.3850631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549353' timestamp='2007-05-24T11:22:48+01:00' visible='true' lat='50.9694254' lon='-1.3708477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325087' timestamp='2006-11-11T17:21:16+00:00' user='Dean Earley' visible='true' lat='50.9302737' lon='-1.5681167' />
-  <node id='29008447' timestamp='2007-05-12T15:12:16+01:00' user='nickw' visible='true' lat='50.9329857' lon='-1.3510626'>
-    <tag k='name' v='KENNET CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600507' timestamp='2006-12-16T10:14:00+00:00' user='nickw' visible='true' lat='50.9185578' lon='-1.4364574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254744' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.9684473' lon='-1.391001' />
-  <node id='25896416' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9660863' lon='-1.3865224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124369' timestamp='2007-06-09T19:43:09+01:00' user='nickw' visible='true' lat='50.9248815' lon='-1.3515894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544344' timestamp='2007-11-28T12:24:28+00:00' user='Dean Earley' visible='true' lat='50.9693981' lon='-1.3359454'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='12595199' timestamp='2006-08-04T12:03:08+01:00' user='nickw' visible='true' lat='50.9202077' lon='-1.4138604'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='52182252' timestamp='2007-09-15T19:10:57+01:00' user='mike l' visible='true' lat='50.975557' lon='-1.4485414' />
-  <node id='28874071' timestamp='2007-05-08T14:50:36+01:00' visible='true' lat='50.9393162' lon='-1.4398088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639997' timestamp='2007-02-04T22:51:23+00:00' user='Dean Earley' visible='true' lat='50.9088281' lon='-1.3731082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87868941' timestamp='2007-10-26T13:30:03+01:00' user='Nick Dyer' visible='true' lat='50.9151153' lon='-1.4150339'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Winston' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='28347579' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9262793' lon='-1.3564581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431963' timestamp='2007-06-16T16:25:57+01:00' visible='true' lat='50.9721071' lon='-1.352209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563286' timestamp='2007-04-23T22:47:34+01:00' visible='true' lat='50.9302815' lon='-1.3974214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889418' timestamp='2007-09-23T16:33:11+01:00' user='mike l' visible='true' lat='50.9417064' lon='-1.3734595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926526' timestamp='2007-06-03T20:59:01+01:00' visible='true' lat='50.9804096' lon='-1.3660448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661163' timestamp='2007-04-05T14:22:10+01:00' user='Dean Earley' visible='true' lat='50.8977188' lon='-1.3582566' />
-  <node id='10908206' timestamp='2007-08-12T23:11:38+01:00' user='Edward' visible='true' lat='50.9243895' lon='-1.3768806' />
-  <node id='21507769' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9404894' lon='-1.3906458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091388' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.9920237' lon='-1.4465586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704663' timestamp='2007-04-05T14:22:10+01:00' user='Dean Earley' visible='true' lat='50.8745312' lon='-1.3971563' />
-  <node id='28252974' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.9429047' lon='-1.4292224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463009' timestamp='2007-05-22T00:01:30+01:00' user='nickw' visible='true' lat='50.9087398' lon='-1.403569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110935' timestamp='2006-10-27T23:39:34+01:00' user='Dean Earley' visible='true' lat='50.9352775' lon='-1.3653544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914338' timestamp='2007-06-03T16:16:24+01:00' visible='true' lat='50.9848197' lon='-1.3604091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111077' timestamp='2006-12-16T11:08:03+00:00' user='David Currie' visible='true' lat='51.0089159' lon='-1.394617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392379' timestamp='2007-05-20T17:56:42+01:00' visible='true' lat='50.9645463' lon='-1.356906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984703' timestamp='2007-01-10T00:11:35+00:00' user='nickw' visible='true' lat='50.9452853' lon='-1.3833938'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657779' timestamp='2007-04-05T14:22:11+01:00' user='Dean Earley' visible='true' lat='50.897782' lon='-1.3636084' />
-  <node id='254645' timestamp='2007-12-10T19:11:41+00:00' user='sladen' visible='true' lat='50.9142897' lon='-1.3916157' />
-  <node id='28236097' timestamp='2007-04-29T19:25:31+01:00' user='Andy Street' visible='true' lat='50.9115417' lon='-1.3539849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219698' timestamp='2007-12-08T20:21:41+00:00' user='nickw' visible='true' lat='50.9448828' lon='-1.4441382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419422' timestamp='2007-09-23T16:33:08+01:00' user='mike l' visible='true' lat='50.9395576' lon='-1.3661604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998361' timestamp='2007-06-05T23:05:26+01:00' user='nickw' visible='true' lat='50.9743252' lon='-1.4228454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677139' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8972348' lon='-1.4467044' />
-  <node id='91117390' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9290238' lon='-1.4442722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831101' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9113928' lon='-1.407007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624977' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.9039836' lon='-1.3735078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420717' timestamp='2007-04-03T00:53:48+01:00' user='Ben' visible='true' lat='50.9373269' lon='-1.3933088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243981298' timestamp='2008-01-29T12:06:34+00:00' user='Dean Earley' visible='true' lat='50.9649807' lon='-1.3495231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949949' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9945143' lon='-1.3890121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9736874' timestamp='2007-04-20T23:53:21+01:00' user='Dean Earley' visible='true' lat='50.9133611' lon='-1.3873262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341738' timestamp='2007-04-30T21:48:54+01:00' user='nickw' visible='true' lat='50.9143944' lon='-1.3497493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275774' timestamp='2007-11-18T18:58:29+00:00' user='nickw' visible='true' lat='50.9131873' lon='-1.4308102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904012' timestamp='2007-05-10T01:07:12+01:00' user='LivingWithDragons' visible='true' lat='50.9811208' lon='-1.4449266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892122' timestamp='2006-10-27T00:58:30+01:00' user='Dean Earley' visible='true' lat='50.9117875' lon='-1.3840051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348693' timestamp='2007-02-13T18:31:42+00:00' user='Dean Earley' visible='true' lat='50.9763628' lon='-1.434198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142614238' timestamp='2007-11-29T22:27:22+00:00' user='nickw' visible='true' lat='50.9093583' lon='-1.4194464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796785' timestamp='2007-05-30T22:22:06+01:00' user='nickw' visible='true' lat='50.9213737' lon='-1.3555416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464288' timestamp='2007-05-22T00:19:20+01:00' user='Dean Earley' visible='true' lat='50.9410646' lon='-1.4068336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632191' timestamp='2007-05-26T19:20:43+01:00' visible='true' lat='50.9556825' lon='-1.3681506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223085' timestamp='2007-06-11T21:51:52+01:00' visible='true' lat='50.9836299' lon='-1.3557514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303935' timestamp='2007-04-29T20:37:39+01:00' user='Dean Earley' visible='true' lat='50.9341968' lon='-1.419006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325653' timestamp='2007-04-05T14:22:11+01:00' user='Dean Earley' visible='true' lat='50.9231' lon='-1.42415' />
-  <node id='160229550' timestamp='2007-12-10T19:17:32+00:00' user='sladen' visible='true' lat='50.9017984' lon='-1.3957785' />
-  <node id='14726183' timestamp='2006-09-02T18:21:41+01:00' user='Dean Earley' visible='true' lat='50.9096817' lon='-1.4001111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250098' timestamp='2007-11-28T12:24:19+00:00' user='Dean Earley' visible='true' lat='50.920238' lon='-1.4386791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089053' timestamp='2007-06-08T18:11:57+01:00' visible='true' lat='50.9650023' lon='-1.3749391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325072' timestamp='2006-11-11T17:21:29+00:00' user='Dean Earley' visible='true' lat='50.9406796' lon='-1.5499744' />
-  <node id='30290773' timestamp='2007-10-29T15:43:33+00:00' user='Dean Earley' visible='true' lat='50.9666918' lon='-1.3855431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163075' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9721093' lon='-1.3873975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000962' timestamp='2007-05-12T09:31:58+01:00' user='nickw' visible='true' lat='50.9189684' lon='-1.4087493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636768' timestamp='2006-12-18T21:21:45+00:00' user='nickw' visible='true' lat='50.947547' lon='-1.4025334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179462' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9621961' lon='-1.4118494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505742' timestamp='2007-05-22T19:28:33+01:00' visible='true' lat='50.9923314' lon='-1.3541084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596775' timestamp='2006-11-13T00:43:25+00:00' user='Dean Earley' visible='true' lat='50.9012463' lon='-1.4085187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153331802' timestamp='2007-12-06T20:44:25+00:00' user='nickw' visible='true' lat='50.9415806' lon='-1.4419619'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431978' timestamp='2007-06-16T16:26:03+01:00' visible='true' lat='50.9852952' lon='-1.3516064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319621' timestamp='2007-01-28T00:55:30+00:00' visible='true' lat='50.9186482' lon='-1.3975382' />
-  <node id='700440' timestamp='2007-04-05T14:22:11+01:00' user='Dean Earley' visible='true' lat='50.9237339' lon='-1.3846921' />
-  <node id='17658119' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9073463' lon='-1.4188412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964843' timestamp='2006-11-12T10:50:41+00:00' user='nickw' visible='true' lat='50.9889022' lon='-1.4293311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949828' timestamp='2007-01-07T12:38:44+00:00' user='nickw' visible='true' lat='50.9876115' lon='-1.3800324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124654' timestamp='2007-06-09T19:48:36+01:00' user='nickw' visible='true' lat='50.9304538' lon='-1.3535662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66589147' timestamp='2007-10-12T14:03:58+01:00' user='SteveC' visible='true' lat='50.9303404' lon='-1.4488217' />
-  <node id='29008413' timestamp='2007-05-12T15:12:07+01:00' user='nickw' visible='true' lat='50.9259926' lon='-1.346625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613480' timestamp='2007-09-17T23:09:06+01:00' user='mike l' visible='true' lat='50.9703996' lon='-1.3899953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762097' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9451158' lon='-1.3461864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704331' timestamp='2007-05-28T10:32:58+01:00' visible='true' lat='50.9840382' lon='-1.3596147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998541' timestamp='2007-06-05T23:13:22+01:00' user='nickw' visible='true' lat='50.9638036' lon='-1.4345469'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815662' timestamp='2007-05-31T21:48:02+01:00' visible='true' lat='50.9907485' lon='-1.3531958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239965' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.907552' lon='-1.4164895' />
-  <node id='17724255' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9234161' lon='-1.4127297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564839' timestamp='2006-08-15T12:12:12+01:00' user='nickw' visible='true' lat='50.9345119' lon='-1.3506564'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='271021' timestamp='2007-01-25T22:42:43+00:00' user='Dean Earley' visible='true' lat='50.9536' lon='-1.37416'>
-    <tag k='amenity' v='place_of_worship' />
-    <tag k='name' v='North Stoneham' />
-  </node>
-  <node id='20964041' timestamp='2006-11-12T00:52:16+00:00' user='nickw' visible='true' lat='50.9992619' lon='-1.4479213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928426' timestamp='2007-06-03T21:48:29+01:00' visible='true' lat='50.9793975' lon='-1.3677781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889439' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9553434' lon='-1.3666162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998940' timestamp='2007-06-05T23:28:52+01:00' user='nickw' visible='true' lat='50.9851822' lon='-1.4349642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228110' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9495748' lon='-1.428155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111043' timestamp='2006-10-22T23:24:05+01:00' user='Ben' visible='true' lat='50.9744856' lon='-1.3849192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582920' timestamp='2007-05-02T23:57:41+01:00' visible='true' lat='50.9414253' lon='-1.4270526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967597' timestamp='2006-11-12T20:46:58+00:00' user='Dean Earley' visible='true' lat='50.9215574' lon='-1.3886056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675872' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9274841' lon='-1.3695506' />
-  <node id='21600527' timestamp='2007-12-14T21:30:35+00:00' user='nickw' visible='true' lat='50.9340089' lon='-1.4415006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096949' timestamp='2007-06-08T23:24:13+01:00' visible='true' lat='50.9654046' lon='-1.3753042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160236651' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9068917' lon='-1.399392' />
-  <node id='13706801' timestamp='2007-04-05T14:22:11+01:00' user='Dean Earley' visible='true' lat='50.886875' lon='-1.377' />
-  <node id='13704894' timestamp='2007-10-26T11:41:57+01:00' user='Nick Dyer' visible='true' lat='50.9018669' lon='-1.4420425' />
-  <node id='29931403' timestamp='2007-06-03T22:43:15+01:00' visible='true' lat='50.9953153' lon='-1.3726376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705490' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.9081759' lon='-1.4397294' />
-  <node id='25282104' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.976935' lon='-1.4064119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249840' timestamp='2007-04-29T21:41:36+01:00' visible='true' lat='50.9198434' lon='-1.4429791'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254675' timestamp='2007-05-01T18:41:56+01:00' visible='true' lat='50.9728956' lon='-1.3727621'>
-    <tag k='highway' v='traffic_signals' />
-  </node>
-  <node id='30507156' timestamp='2007-06-17T22:07:50+01:00' visible='true' lat='50.9758353' lon='-1.35903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423308' timestamp='2007-04-05T14:22:11+01:00' user='Dean Earley' visible='true' lat='50.9291' lon='-1.40889' />
-  <node id='298289' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9523061' lon='-1.4003916' />
-  <node id='153329608' timestamp='2007-12-06T20:43:00+00:00' user='Dean Earley' visible='true' lat='50.9979174' lon='-1.3579587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59058428' timestamp='2007-09-23T16:33:07+01:00' user='mike l' visible='true' lat='50.93869' lon='-1.3756899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971211' timestamp='2007-10-28T21:00:37+00:00' user='Nick Dyer' visible='true' lat='50.908117' lon='-1.414715'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='29009232' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9296334' lon='-1.3551429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9727808' timestamp='2007-11-11T18:09:51+00:00' user='Dean Earley' visible='true' lat='50.9154133' lon='-1.3582114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727688' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9095269' lon='-1.356835'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160221501' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9143871' lon='-1.3907059' />
-  <node id='24984771' timestamp='2007-01-10T00:14:41+00:00' user='nickw' visible='true' lat='50.9445531' lon='-1.3948569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114381' timestamp='2007-02-23T21:46:21+00:00' user='nickw' visible='true' lat='50.9054941' lon='-1.3923394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152654' timestamp='2008-02-03T06:22:03+00:00' user='sladen' visible='true' lat='50.9079263' lon='-1.3982689' />
-  <node id='29927560' timestamp='2007-06-03T21:24:29+01:00' visible='true' lat='50.9802791' lon='-1.3703067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903384' timestamp='2007-05-09T23:24:28+01:00' visible='true' lat='50.9473261' lon='-1.3651613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179492' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9549186' lon='-1.4054794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91528724' timestamp='2007-10-29T16:22:03+00:00' user='Nick Dyer' visible='true' lat='50.911021' lon='-1.4401764' />
-  <node id='160209419' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9235478' lon='-1.3851612' />
-  <node id='28194512' timestamp='2007-04-29T08:32:44+01:00' user='Dean Earley' visible='true' lat='50.9477276' lon='-1.4131852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726308' timestamp='2006-09-04T01:04:11+01:00' user='Dean Earley' visible='true' lat='50.9174674' lon='-1.3739098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244018' timestamp='2007-04-29T20:34:52+01:00' user='Andy Street' visible='true' lat='50.9040935' lon='-1.3477616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973095' timestamp='2007-02-06T00:16:42+00:00' user='Dean Earley' visible='true' lat='50.9009714' lon='-1.4096803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21316546' timestamp='2007-04-03T00:52:07+01:00' user='Dean Earley' visible='true' lat='50.9188411' lon='-1.4508415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29862362' timestamp='2007-06-02T12:32:46+01:00' visible='true' lat='50.9309604' lon='-1.4294905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874676' timestamp='2007-06-02T19:57:57+01:00' visible='true' lat='50.9609338' lon='-1.35971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418267' timestamp='2007-05-02T00:31:38+01:00' visible='true' lat='50.966778' lon='-1.3623797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931341' timestamp='2007-06-03T22:43:02+01:00' visible='true' lat='50.9943352' lon='-1.3726028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708015' timestamp='2007-05-28T12:04:00+01:00' visible='true' lat='50.9861058' lon='-1.3622826'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961047' timestamp='2006-11-11T17:12:37+00:00' user='Dean Earley' visible='true' lat='50.9501083' lon='-1.3740598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008381' timestamp='2007-05-12T15:14:01+01:00' user='nickw' visible='true' lat='50.9259488' lon='-1.3517208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504295' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='51.0009394' lon='-1.3421522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632900' timestamp='2007-05-26T20:07:53+01:00' visible='true' lat='50.9683285' lon='-1.3633859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306300' timestamp='2005-12-11T21:47:02+00:00' user='nickw' visible='true' lat='50.9232187' lon='-1.404984' />
-  <node id='20136222' timestamp='2007-03-31T20:34:59+01:00' user='nickw' visible='true' lat='50.9180822' lon='-1.3576741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972601' timestamp='2006-08-27T18:01:38+01:00' user='Dean Earley' visible='true' lat='50.9447745' lon='-1.3156142'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='305602' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9910893' lon='-1.3942552' />
-  <node id='19227217' timestamp='2006-10-23T20:52:55+01:00' user='nickw' visible='true' lat='50.9326118' lon='-1.4119271'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856365' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9467842' lon='-1.3919776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636802' timestamp='2007-04-29T02:32:41+01:00' user='Dean Earley' visible='true' lat='50.9516323' lon='-1.4059956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903061' timestamp='2007-05-09T23:03:39+01:00' visible='true' lat='50.9418432' lon='-1.3710593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160415531' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true' lat='50.9109559' lon='-1.4296966' />
-  <node id='87875044' timestamp='2007-10-26T13:36:52+01:00' user='Nick Dyer' visible='true' lat='50.9275274' lon='-1.4162527'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Bellemoor' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='21636756' timestamp='2007-05-22T00:19:47+01:00' user='Dean Earley' visible='true' lat='50.9449167' lon='-1.3931563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613477' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9705461' lon='-1.3922694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414288' timestamp='2007-05-01T23:50:10+01:00' user='nickw' visible='true' lat='50.9434185' lon='-1.372227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632808' timestamp='2007-05-26T20:06:02+01:00' visible='true' lat='50.9625548' lon='-1.3684713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388903' timestamp='2007-04-05T14:22:12+01:00' user='Dean Earley' visible='true' lat='50.9434' lon='-1.39627' />
-  <node id='24924201' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.944971' lon='-1.3719309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613405' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9855969' lon='-1.4284164'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171751' timestamp='2007-05-16T23:47:59+01:00' user='nickw' visible='true' lat='50.9418676' lon='-1.3906409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28212755' timestamp='2007-12-06T20:43:05+00:00' user='Dean Earley' visible='true' lat='50.9972925' lon='-1.3567623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91121995' timestamp='2007-10-29T08:14:24+00:00' user='nickw' visible='true' lat='50.9323748' lon='-1.4464004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953365' timestamp='2007-06-04T21:16:58+01:00' visible='true' lat='51.0004744' lon='-1.3677056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298251' timestamp='2007-01-06T14:30:52+00:00' user='Dean Earley' visible='true' lat='50.982385' lon='-1.3660852' />
-  <node id='16963724' timestamp='2007-02-18T20:19:08+00:00' visible='true' lat='50.9277113' lon='-1.4150229'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194401' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9464471' lon='-1.4389701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976776' timestamp='2007-10-29T07:46:37+00:00' user='nickw' visible='true' lat='50.9316478' lon='-1.4190038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816420' timestamp='2007-05-31T21:58:46+01:00' visible='true' lat='50.9896805' lon='-1.3568705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668382' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9854827' lon='-1.3916085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240333' timestamp='2007-04-29T20:02:56+01:00' user='Andy Street' visible='true' lat='50.9053588' lon='-1.3536788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708030' timestamp='2007-05-28T12:04:06+01:00' visible='true' lat='50.9818018' lon='-1.3659854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548672' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.9634738' lon='-1.362636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296287' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9723444' lon='-1.3680772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657684' timestamp='2007-12-10T19:05:42+00:00' user='sladen' visible='true' lat='50.9129206' lon='-1.3716601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925569' timestamp='2007-06-03T20:41:54+01:00' visible='true' lat='50.9809908' lon='-1.3629888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153200231' timestamp='2007-12-06T19:26:16+00:00' user='Dean Earley' visible='true' lat='50.9812852' lon='-1.4444963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950436' timestamp='2007-09-10T23:28:29+01:00' visible='true' lat='50.9123062' lon='-1.3985109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303110' timestamp='2007-01-19T18:20:23+00:00' user='Dean Earley' visible='true' lat='50.9494981' lon='-1.3729422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903978' timestamp='2007-10-16T11:34:27+01:00' user='Dean Earley' visible='true' lat='50.9498396' lon='-1.3643006'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160233336' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9068051' lon='-1.3940104' />
-  <node id='24984701' timestamp='2007-01-10T00:11:10+00:00' user='nickw' visible='true' lat='50.9453354' lon='-1.3836322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310893' timestamp='2007-04-05T14:22:12+01:00' user='Dean Earley' visible='true' lat='50.9214' lon='-1.40209' />
-  <node id='90581812' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9176044' lon='-1.4487781' />
-  <node id='29795099' timestamp='2007-05-30T21:48:10+01:00' user='nickw' visible='true' lat='50.9171311' lon='-1.356977'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339158' timestamp='2007-04-30T20:39:33+01:00' visible='true' lat='50.9677421' lon='-1.3594825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161102' timestamp='2007-06-10T18:13:38+01:00' visible='true' lat='50.971164' lon='-1.3541906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179458' timestamp='2007-04-29T01:53:17+01:00' user='Dean Earley' visible='true' lat='50.9644065' lon='-1.4192962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707285' timestamp='2007-05-28T11:52:22+01:00' visible='true' lat='50.9868663' lon='-1.3638192'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636741' timestamp='2007-04-03T00:54:09+01:00' user='Ben' visible='true' lat='50.9469197' lon='-1.4034911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657805' timestamp='2008-02-03T05:55:50+00:00' user='sladen' visible='true' lat='50.9121368' lon='-1.4009897' />
-  <node id='21579403' timestamp='2006-12-14T13:52:50+00:00' user='David Currie' visible='true' lat='50.9765898' lon='-1.4042824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816768' timestamp='2007-05-31T22:15:43+01:00' visible='true' lat='50.9883707' lon='-1.3595334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575786' timestamp='2007-03-16T21:52:31+00:00' user='nickw' visible='true' lat='50.8993254' lon='-1.4002878'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305598' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9916043' lon='-1.3912511' />
-  <node id='24949979' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9854855' lon='-1.3832905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071398' timestamp='2006-08-11T02:48:13+01:00' user='Dean Earley' visible='true' lat='50.9218375' lon='-1.3561222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008949' timestamp='2007-05-12T15:26:04+01:00' user='nickw' visible='true' lat='50.9329077' lon='-1.3496795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28936002' timestamp='2007-05-11T00:59:47+01:00' visible='true' lat='50.9407755' lon='-1.4421854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243979483' timestamp='2008-01-29T11:33:01+00:00' user='Dean Earley' visible='true' lat='50.9609481' lon='-1.3495376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722365' timestamp='2006-10-06T23:46:15+01:00' user='Dean Earley' visible='true' lat='50.9484607' lon='-1.3965463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601298' timestamp='2006-09-01T00:16:01+01:00' user='nickw' visible='true' lat='50.82093' lon='-1.5647578'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='14957851' timestamp='2007-05-04T02:33:08+01:00' user='Dean Earley' visible='true' lat='50.9440866' lon='-1.450675'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='325019' timestamp='2006-09-02T12:59:37+01:00' user='Dean Earley' visible='true' lat='50.9581542' lon='-1.4150631' />
-  <node id='29817627' timestamp='2007-05-31T22:21:08+01:00' visible='true' lat='50.9870025' lon='-1.3641748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134134' timestamp='2007-05-15T20:47:33+01:00' user='nickw' visible='true' lat='50.9426407' lon='-1.3932448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160362613' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9182018' lon='-1.4801136' />
-  <node id='91110487' timestamp='2007-10-29T07:57:18+00:00' user='nickw' visible='true' lat='50.9277904' lon='-1.4365689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194328' timestamp='2007-04-29T08:20:21+01:00' visible='true' lat='50.9450263' lon='-1.4346339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248237' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8933208' lon='-1.3972464' />
-  <node id='21689128' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.940862' lon='-1.3859933'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640012' timestamp='2007-02-04T22:51:25+00:00' user='Dean Earley' visible='true' lat='50.9110017' lon='-1.3700478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705355' timestamp='2007-10-26T12:19:24+01:00' user='Nick Dyer' visible='true' lat='50.9108495' lon='-1.4667403'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20972796' timestamp='2006-11-13T00:07:22+00:00' user='Dean Earley' visible='true' lat='50.8988302' lon='-1.3894748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071291' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9205355' lon='-1.3584108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073390' timestamp='2007-04-05T14:22:12+01:00' user='Dean Earley' visible='true' lat='50.9298819' lon='-1.3927094' />
-  <node id='28342562' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9056909' lon='-1.3658251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632791' timestamp='2007-05-26T20:05:04+01:00' visible='true' lat='50.9610646' lon='-1.3703513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180203' timestamp='2007-04-29T02:05:34+01:00' user='Dean Earley' visible='true' lat='50.9627897' lon='-1.4216538'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632196' timestamp='2007-05-26T19:21:01+01:00' visible='true' lat='50.9563593' lon='-1.3683098'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976791' timestamp='2006-11-13T21:50:49+00:00' user='nickw' visible='true' lat='50.9272023' lon='-1.4219031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632433' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true' lat='50.9575642' lon='-1.3614843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028821' timestamp='2006-09-08T23:06:40+01:00' user='Dean Earley' visible='true' lat='50.9352281' lon='-1.3766016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976682' timestamp='2007-10-30T15:48:42+00:00' user='Dean Earley' visible='true' lat='50.9389278' lon='-1.4227323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096969' timestamp='2007-06-08T23:24:16+01:00' visible='true' lat='50.9632223' lon='-1.37694'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998524' timestamp='2007-06-05T23:13:20+01:00' user='nickw' visible='true' lat='50.9599997' lon='-1.4553673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003034' timestamp='2007-05-22T00:19:47+01:00' user='Dean Earley' visible='true' lat='50.9413213' lon='-1.4040843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932449' timestamp='2007-05-10T21:06:02+01:00' user='Dean Earley' visible='true' lat='50.9629426' lon='-1.4569444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711912' timestamp='2007-05-28T14:57:28+01:00' visible='true' lat='50.9849088' lon='-1.3527947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582950' timestamp='2007-05-02T23:57:46+01:00' visible='true' lat='50.9428953' lon='-1.4253243'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236102' timestamp='2007-04-29T19:25:34+01:00' user='Andy Street' visible='true' lat='50.9092127' lon='-1.3556124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600433' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.9228472' lon='-1.4493112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706085' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8969679' lon='-1.3872482'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='27021716' timestamp='2007-04-03T00:50:50+01:00' user='Dean Earley' visible='true' lat='50.9196423' lon='-1.4487806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414262' timestamp='2007-05-01T23:49:37+01:00' user='nickw' visible='true' lat='50.9441953' lon='-1.3716821'>
-    <tag k='name' v='CLAUDEEN C' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422971' timestamp='2007-04-05T14:22:13+01:00' user='Dean Earley' visible='true' lat='50.9268' lon='-1.40769' />
-  <node id='245153003' timestamp='2008-02-03T06:22:46+00:00' user='sladen' visible='true' lat='50.9078018' lon='-1.3976681' />
-  <node id='30956580' timestamp='2007-06-26T23:44:57+01:00' user='nickw' visible='true' lat='50.9278998' lon='-1.3498949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548690' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9634435' lon='-1.3650998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420434' timestamp='2006-12-18T23:27:25+00:00' visible='true' lat='50.9226608' lon='-1.3953766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115439' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9273396' lon='-1.4437855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243878' timestamp='2007-04-29T20:52:51+01:00' user='Dean Earley' visible='true' lat='50.9357352' lon='-1.4201915' />
-  <node id='53411347' timestamp='2007-09-17T22:49:13+01:00' user='mike l' visible='true' lat='50.9336991' lon='-1.3935504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984686' timestamp='2007-09-15T22:38:40+01:00' user='mike l' visible='true' lat='50.9449989' lon='-1.3868592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963796' timestamp='2006-09-28T23:48:07+01:00' user='nickw' visible='true' lat='50.9391515' lon='-1.4200795'>
-    <tag k='amenity' v='sports_centre' />
-    <tag k='name' v='Southampton Sports Centre' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474842' timestamp='2007-04-05T14:22:13+01:00' user='Dean Earley' visible='true' lat='50.9345523' lon='-1.3504734' />
-  <node id='325230' timestamp='2006-11-11T17:22:12+00:00' user='Dean Earley' visible='true' lat='50.9353714' lon='-1.3422215' />
-  <node id='30225256' timestamp='2007-06-11T22:10:26+01:00' visible='true' lat='50.9819392' lon='-1.3563949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250026' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9174388' lon='-1.4486581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930866' timestamp='2007-06-03T22:30:56+01:00' visible='true' lat='50.9986732' lon='-1.3540584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949902' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9939891' lon='-1.3810257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254402' timestamp='2007-09-23T16:33:13+01:00' user='mike l' visible='true' lat='50.9396559' lon='-1.3662792' />
-  <node id='29913887' timestamp='2007-06-03T15:59:38+01:00' visible='true' lat='50.9847896' lon='-1.3578845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346870' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9131458' lon='-1.368384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229583' timestamp='2007-06-12T00:14:41+01:00' user='nickw' visible='true' lat='50.9331161' lon='-1.3536161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890095' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.9195313' lon='-1.3913033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830619' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9286914' lon='-1.3582848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29795316' timestamp='2007-05-30T21:56:41+01:00' user='nickw' visible='true' lat='50.9154496' lon='-1.3540714'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Percy Arms' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953503' timestamp='2007-06-04T21:24:03+01:00' visible='true' lat='50.9889763' lon='-1.3667655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949849' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9921635' lon='-1.371887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254666' timestamp='2006-12-02T23:56:38+00:00' user='Dean Earley' visible='true' lat='50.9292447' lon='-1.3948938' />
-  <node id='24924111' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9402736' lon='-1.3704161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342635' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9129163' lon='-1.3650269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831119' timestamp='2006-11-02T19:55:39+00:00' user='nickw' visible='true' lat='50.9135625' lon='-1.4058953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141415' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9282261' lon='-1.4285515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592374' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9121227' lon='-1.4430617' />
-  <node id='21561784' timestamp='2006-12-13T20:19:44+00:00' user='nickw' visible='true' lat='50.9255911' lon='-1.4338843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677158' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8967205' lon='-1.4424386' />
-  <node id='254943' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.950339' lon='-1.4149136' />
-  <node id='469866' timestamp='2007-04-05T14:22:13+01:00' user='Dean Earley' visible='true' lat='50.9139' lon='-1.42545' />
-  <node id='29526353' timestamp='2007-05-23T09:23:19+01:00' user='nickw' visible='true' lat='50.9281223' lon='-1.3573941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398367' timestamp='2006-10-17T23:09:34+01:00' user='nickw' visible='true' lat='50.9569957' lon='-1.4167695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392362' timestamp='2007-05-20T17:53:02+01:00' visible='true' lat='50.9614584' lon='-1.3536748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657687' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9095166' lon='-1.3729647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359715' timestamp='2006-09-11T20:17:30+01:00' user='Dean Earley' visible='true' lat='50.9673538' lon='-1.3520579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091862' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9086379' lon='-1.4254103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663597' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.905606' lon='-1.4049875' />
-  <node id='160260403' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9515707' lon='-1.3696946' />
-  <node id='29621225' timestamp='2007-05-26T11:35:16+01:00' visible='true' lat='50.966281' lon='-1.3711261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160179638' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9110373' lon='-1.3716858' />
-  <node id='25282131' timestamp='2007-01-17T21:10:15+00:00' user='David Currie' visible='true' lat='50.9760698' lon='-1.4061321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342545' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.908507' lon='-1.3681062'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464235' timestamp='2007-05-22T00:19:09+01:00' user='Dean Earley' visible='true' lat='50.9385736' lon='-1.4208887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50656131' timestamp='2007-09-13T21:25:22+01:00' user='mike l' visible='true' lat='50.9443198' lon='-1.450087' />
-  <node id='29008800' timestamp='2007-05-12T15:20:39+01:00' user='nickw' visible='true' lat='50.9274483' lon='-1.3498484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668078' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9832378' lon='-1.3926316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413151' timestamp='2007-04-05T14:22:13+01:00' user='Dean Earley' visible='true' lat='50.9389914' lon='-1.3818791' />
-  <node id='15028896' timestamp='2006-09-08T23:06:54+01:00' user='Dean Earley' visible='true' lat='50.9353682' lon='-1.3514584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298244' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='50.9976626' lon='-1.35743' />
-  <node id='160229117' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9020744' lon='-1.3948258' />
-  <node id='29389521' timestamp='2007-05-26T11:38:01+01:00' visible='true' lat='50.9694765' lon='-1.3531032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096974' timestamp='2007-06-08T23:24:17+01:00' visible='true' lat='50.962648' lon='-1.3774903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071317' timestamp='2006-08-11T02:48:07+01:00' user='Dean Earley' visible='true' lat='50.9216982' lon='-1.3605281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209152' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.9421179' lon='-1.4474882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928591' timestamp='2007-06-03T21:52:02+01:00' visible='true' lat='50.9783242' lon='-1.3616451'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296387' timestamp='2007-01-19T09:58:46+00:00' user='Dean Earley' visible='true' lat='50.9760192' lon='-1.371117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254268' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9524976' lon='-1.350302' />
-  <node id='21419447' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9418559' lon='-1.3717351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243578' timestamp='2007-04-29T20:24:46+01:00' user='Dean Earley' visible='true' lat='50.9372024' lon='-1.4111356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130961' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9321682' lon='-1.3586448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816632' timestamp='2007-05-31T22:10:48+01:00' visible='true' lat='50.9905329' lon='-1.360212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111088' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0134133' lon='-1.3915721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624973' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.9085643' lon='-1.370488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705942' timestamp='2007-10-29T15:11:23+00:00' user='Dean Earley' visible='true' lat='50.8830174' lon='-1.3931511' />
-  <node id='8596792' timestamp='2006-06-24T21:46:07+01:00' user='Dean Earley' visible='true' lat='50.9056005' lon='-1.4120429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21638005' timestamp='2006-12-18T23:27:30+00:00' visible='true' lat='50.9303501' lon='-1.3873644'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Drummond Arms' />
-  </node>
-  <node id='331347' timestamp='2007-12-06T22:11:14+00:00' user='Dean Earley' visible='true' lat='51.0109' lon='-1.38108' />
-  <node id='14743170' timestamp='2006-09-03T00:38:40+01:00' user='Dean Earley' visible='true' lat='50.9089197' lon='-1.4135423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243595' timestamp='2007-04-29T20:24:58+01:00' user='Dean Earley' visible='true' lat='50.935056' lon='-1.4141402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706454' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9268081' lon='-1.38056'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28342575' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.9072918' lon='-1.364709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387817' timestamp='2007-04-05T14:22:13+01:00' user='Dean Earley' visible='true' lat='50.9289' lon='-1.38863' />
-  <node id='21600591' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9894087' lon='-1.4015763'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721045' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.961047' lon='-1.364688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743139' timestamp='2006-09-03T00:38:38+01:00' user='Dean Earley' visible='true' lat='50.9267441' lon='-1.434579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710204' timestamp='2007-05-28T13:23:23+01:00' visible='true' lat='50.9893787' lon='-1.3707639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254251' timestamp='2005-11-15T15:38:44+00:00' user='nickw' visible='true' lat='50.9554025' lon='-1.3750375' />
-  <node id='14728001' timestamp='2007-01-28T00:06:51+00:00' visible='true' lat='50.9335968' lon='-1.4062088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874150' timestamp='2007-06-02T19:43:17+01:00' visible='true' lat='50.9608255' lon='-1.3572182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388869' timestamp='2007-04-05T14:22:14+01:00' user='Dean Earley' visible='true' lat='50.9338165' lon='-1.3997593' />
-  <node id='30161370' timestamp='2007-06-10T18:25:29+01:00' visible='true' lat='50.9740829' lon='-1.3662123'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648581' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9498493' lon='-1.3607912' />
-  <node id='21636805' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9526594' lon='-1.4071213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163094' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.9718528' lon='-1.386126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963754' timestamp='2007-05-22T00:19:48+01:00' user='Dean Earley' visible='true' lat='50.9356937' lon='-1.4107855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945388' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9058673' lon='-1.3405936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091877' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.915878' lon='-1.4263639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636923' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9198405' lon='-1.4283449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26782596' timestamp='2007-03-25T19:24:26+01:00' user='Dean Earley' visible='true' lat='50.9008841' lon='-1.3941612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21677587' timestamp='2006-12-22T14:23:56+00:00' user='nickw' visible='true' lat='50.9049712' lon='-1.4022783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342622' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9096344' lon='-1.3683247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223093' timestamp='2007-06-11T21:51:53+01:00' visible='true' lat='50.9843821' lon='-1.3561874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249946' timestamp='2007-04-29T21:41:53+01:00' visible='true' lat='50.914319' lon='-1.4471677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162257' timestamp='2008-01-04T19:26:30+00:00' user='nickw' visible='true' lat='50.9739294' lon='-1.3869008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980709' timestamp='2007-10-26T15:58:01+01:00' user='Nick Dyer' visible='true' lat='50.9594078' lon='-1.3512536' />
-  <node id='28179483' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.953267' lon='-1.405084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252368' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9459144' lon='-1.3610085' />
-  <node id='28583075' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9374213' lon='-1.4344272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18101131' timestamp='2006-10-11T19:37:00+01:00' user='nickw' visible='true' lat='50.9127939' lon='-1.4014191'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639941' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.9019759' lon='-1.3782224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111062' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9896152' lon='-1.3886754'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252941' timestamp='2007-04-29T22:00:38+01:00' visible='true' lat='50.9441041' lon='-1.4255259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745479' timestamp='2006-09-03T01:40:47+01:00' user='Dean Earley' visible='true' lat='50.9724131' lon='-1.3731474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997531' timestamp='2007-06-05T22:43:55+01:00' user='nickw' visible='true' lat='51.0070635' lon='-1.355199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021787' timestamp='2007-04-03T00:52:50+01:00' user='Ben' visible='true' lat='50.9565272' lon='-1.3992883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728896' timestamp='2007-05-28T19:12:41+01:00' visible='true' lat='50.9710627' lon='-1.3597816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161123' timestamp='2007-06-10T18:13:44+01:00' visible='true' lat='50.9737078' lon='-1.3548048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180233' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9618259' lon='-1.4260467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582049' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9304216' lon='-1.4503838' />
-  <node id='305564' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9990931' lon='-1.3956714' />
-  <node id='87228250' timestamp='2007-10-25T20:56:26+01:00' user='Nick Dyer' visible='true' lat='50.935678' lon='-1.4523808' />
-  <node id='90510063' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.9027085' lon='-1.4166165' />
-  <node id='206162086' timestamp='2008-01-04T19:25:06+00:00' user='nickw' visible='true' lat='50.9704016' lon='-1.3827586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160253459' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.953501' lon='-1.357498' />
-  <node id='20971147' timestamp='2006-11-12T22:56:57+00:00' user='Dean Earley' visible='true' lat='50.9096342' lon='-1.3988875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874075' timestamp='2007-05-08T14:50:37+01:00' visible='true' lat='50.937594' lon='-1.4414571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296018' timestamp='2007-01-19T09:28:07+00:00' user='Dean Earley' visible='true' lat='50.9857823' lon='-1.3507818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660057' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.9049294' lon='-1.4105064' />
-  <node id='305615' timestamp='2006-12-16T17:47:20+00:00' user='David Currie' visible='true' lat='50.9883794' lon='-1.3937644' />
-  <node id='21141398' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9257467' lon='-1.4268628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591404' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9120253' lon='-1.4491385' />
-  <node id='21561567' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9264982' lon='-1.428636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29709561' timestamp='2007-05-28T12:56:39+01:00' visible='true' lat='50.9823222' lon='-1.354818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911989' timestamp='2007-06-03T15:43:45+01:00' visible='true' lat='50.9860124' lon='-1.3572354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87887818' timestamp='2007-10-26T13:59:49+01:00' user='Nick Dyer' visible='true' lat='50.96432' lon='-1.4171761'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Chilworth Arms' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='29706973' timestamp='2007-06-03T15:50:59+01:00' visible='true' lat='50.9862081' lon='-1.3598748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021693' timestamp='2007-04-03T00:50:22+01:00' user='Dean Earley' visible='true' lat='50.9287637' lon='-1.4459154'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20102979' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9334744' lon='-1.3704078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632416' timestamp='2007-05-26T19:26:30+01:00' visible='true' lat='50.9555303' lon='-1.3686264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927001' timestamp='2007-06-03T21:16:33+01:00' visible='true' lat='50.9854111' lon='-1.3660413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780831' timestamp='2007-06-22T21:09:53+01:00' user='Steve Chilton' visible='true' lat='50.9078618' lon='-1.4114582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956712' timestamp='2007-06-26T23:49:21+01:00' user='nickw' visible='true' lat='50.9279468' lon='-1.3478635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160377637' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9211994' lon='-1.466209' />
-  <node id='29526773' timestamp='2007-05-23T09:49:13+01:00' visible='true' lat='50.9822528' lon='-1.3489187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141688' timestamp='2007-09-05T18:30:26+01:00' user='mike l' visible='true' lat='50.9356528' lon='-1.3931468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984750' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9510013' lon='-1.405197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949919' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9919884' lon='-1.3805489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548673' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.963383' lon='-1.3625047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956614' timestamp='2007-06-26T23:45:02+01:00' user='nickw' visible='true' lat='50.9280438' lon='-1.3499545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957248' timestamp='2006-11-10T21:58:56+00:00' user='nickw' visible='true' lat='50.9189' lon='-1.4170944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252956' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.9435998' lon='-1.4302803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908454' timestamp='2006-07-18T10:20:46+01:00' user='nickw' visible='true' lat='50.9361005' lon='-1.3672164' />
-  <node id='90681709' timestamp='2007-10-29T15:17:14+00:00' user='Dean Earley' visible='true' lat='50.8748014' lon='-1.3977294' />
-  <node id='254974' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9462233' lon='-1.4137836' />
-  <node id='29001704' timestamp='2007-05-12T09:53:02+01:00' user='nickw' visible='true' lat='50.9404345' lon='-1.3640766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29860315' timestamp='2007-06-02T11:30:15+01:00' visible='true' lat='50.9204719' lon='-1.4414368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170439' timestamp='2006-11-11T17:22:25+00:00' user='Dean Earley' visible='true' lat='50.9354876' lon='-1.3351259' />
-  <node id='17724266' timestamp='2007-02-18T20:19:10+00:00' visible='true' lat='50.9280424' lon='-1.4124428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721030' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9658432' lon='-1.3699147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932434' timestamp='2007-05-10T21:05:53+01:00' user='Dean Earley' visible='true' lat='50.9642366' lon='-1.4731746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704909' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.89992' lon='-1.452314'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29914411' timestamp='2007-06-03T16:22:49+01:00' visible='true' lat='50.9845728' lon='-1.3616585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388936' timestamp='2007-04-05T14:22:14+01:00' user='Dean Earley' visible='true' lat='50.9425031' lon='-1.397555' />
-  <node id='700495' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9300537' lon='-1.3713531' />
-  <node id='21586132' timestamp='2006-12-14T23:57:08+00:00' user='Dean Earley' visible='true' lat='50.9684509' lon='-1.3341842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504828' timestamp='2007-02-13T19:24:19+00:00' user='Dean Earley' visible='true' lat='50.9551761' lon='-1.4026987'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908347' timestamp='2006-12-18T23:27:55+00:00' visible='true' lat='50.9258818' lon='-1.3784507' />
-  <node id='24949996' timestamp='2007-01-07T12:38:57+00:00' user='nickw' visible='true' lat='50.982709' lon='-1.3873036'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229553' timestamp='2007-06-12T00:14:34+01:00' user='nickw' visible='true' lat='50.9336858' lon='-1.35303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956569' timestamp='2007-06-26T23:44:56+01:00' user='nickw' visible='true' lat='50.927305' lon='-1.3511763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303131' timestamp='2007-01-19T18:27:12+00:00' user='Dean Earley' visible='true' lat='50.9612752' lon='-1.3884638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66586252' timestamp='2007-10-12T14:02:05+01:00' user='SteveC' visible='true' lat='50.9327693' lon='-1.4520747' />
-  <node id='254832' timestamp='2007-04-03T00:52:09+01:00' user='Dean Earley' visible='true' lat='50.9145697' lon='-1.423472' />
-  <node id='206163277' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.9702828' lon='-1.3873279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148562' timestamp='2008-02-03T06:06:15+00:00' user='sladen' visible='true' lat='50.9070116' lon='-1.4026377' />
-  <node id='29134149' timestamp='2007-05-15T20:47:34+01:00' user='nickw' visible='true' lat='50.9410039' lon='-1.3901902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711863' timestamp='2007-05-28T14:55:45+01:00' visible='true' lat='50.9848117' lon='-1.3518867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727971' timestamp='2007-02-18T21:25:26+00:00' visible='true' lat='50.9162251' lon='-1.4029199'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90610020' timestamp='2007-12-10T20:59:12+00:00' user='sladen' visible='true' lat='50.9109721' lon='-1.4317651' />
-  <node id='28341769' timestamp='2007-04-30T21:48:59+01:00' user='nickw' visible='true' lat='50.9121021' lon='-1.359643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194441' timestamp='2007-04-29T08:20:33+01:00' visible='true' lat='50.9463609' lon='-1.4343387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13565143' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.938051' lon='-1.3600782'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29815440' timestamp='2007-05-31T21:37:07+01:00' visible='true' lat='50.987097' lon='-1.3548965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418535' timestamp='2007-05-24T10:51:06+01:00' visible='true' lat='50.9677073' lon='-1.3660737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108509' timestamp='2007-10-29T07:48:08+00:00' user='nickw' visible='true' lat='50.9320415' lon='-1.4215595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21661759' timestamp='2006-12-20T23:57:07+00:00' user='nickw' visible='true' lat='50.9008891' lon='-1.4058697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745505' timestamp='2007-01-19T18:27:14+00:00' user='Dean Earley' visible='true' lat='50.95674' lon='-1.4004285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972555' timestamp='2006-08-25T11:55:12+01:00' user='nickw' visible='true' lat='50.9623658' lon='-1.3460736'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29728879' timestamp='2007-05-28T19:12:30+01:00' visible='true' lat='50.9713609' lon='-1.3566007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816402' timestamp='2007-05-31T21:56:29+01:00' visible='true' lat='50.988846' lon='-1.3550902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998558' timestamp='2007-06-05T23:13:25+01:00' user='nickw' visible='true' lat='50.9646544' lon='-1.4288253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='171533043' timestamp='2007-12-15T20:18:40+00:00' user='nickw' visible='true' lat='50.9273403' lon='-1.433678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466080' timestamp='2007-05-22T00:37:40+01:00' user='Dean Earley' visible='true' lat='50.9427212' lon='-1.4361333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935740' timestamp='2007-05-11T00:50:37+01:00' visible='true' lat='50.9395629' lon='-1.4460533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659205' timestamp='2007-11-20T16:53:21+00:00' user='Nick Dyer' visible='true' lat='50.9046329' lon='-1.407238' />
-  <node id='20971192' timestamp='2006-11-12T22:57:19+00:00' user='Dean Earley' visible='true' lat='50.9065943' lon='-1.4004841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764419' timestamp='2007-05-30T21:37:23+01:00' user='nickw' visible='true' lat='50.9220558' lon='-1.363519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814002' timestamp='2007-05-31T21:13:50+01:00' visible='true' lat='50.9874568' lon='-1.3553888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29705532' timestamp='2007-05-28T11:19:21+01:00' visible='true' lat='50.9855305' lon='-1.3519595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310984' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9653655' lon='-1.4367915' />
-  <node id='301600' timestamp='2007-05-22T00:19:49+01:00' user='Dean Earley' visible='true' lat='50.93219' lon='-1.4022484'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28345061' timestamp='2007-04-30T23:00:38+01:00' user='nickw' visible='true' lat='50.9316026' lon='-1.3632484'>
-    <tag k='name' v='MRLHLL CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689060' timestamp='2007-03-24T16:33:46+00:00' user='Dean Earley' visible='true' lat='50.9381449' lon='-1.3793077'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745494' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9606849' lon='-1.3900255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744293' timestamp='2006-11-12T22:57:32+00:00' user='Dean Earley' visible='true' lat='50.9078325' lon='-1.4153383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518765' timestamp='2007-04-05T14:22:15+01:00' user='Dean Earley' visible='true' lat='50.9084846' lon='-1.3960604' />
-  <node id='21178409' timestamp='2007-01-19T09:28:16+00:00' user='Dean Earley' visible='true' lat='50.9873472' lon='-1.3483825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700521' timestamp='2007-04-05T14:22:15+01:00' user='Dean Earley' visible='true' lat='50.9278745' lon='-1.366489' />
-  <node id='29794812' timestamp='2007-05-30T21:41:50+01:00' user='nickw' visible='true' lat='50.9200243' lon='-1.35429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668099' timestamp='2007-01-04T21:05:34+00:00' user='nickw' visible='true' lat='50.983663' lon='-1.3938037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280979' timestamp='2007-02-18T20:18:24+00:00' visible='true' lat='50.915455' lon='-1.3629395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964056' timestamp='2006-12-16T17:47:20+00:00' user='David Currie' visible='true' lat='51.0002734' lon='-1.4420111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254723' timestamp='2007-01-31T01:07:53+00:00' user='Dean Earley' visible='true' lat='51.0053795' lon='-1.3465254' />
-  <node id='20961056' timestamp='2006-11-11T17:12:41+00:00' user='Dean Earley' visible='true' lat='50.9358079' lon='-1.3451532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243648' timestamp='2007-04-29T20:25:07+01:00' user='Dean Earley' visible='true' lat='50.9374421' lon='-1.4136989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='603224' timestamp='2007-04-05T14:22:15+01:00' user='Dean Earley' visible='true' lat='50.9172358' lon='-1.3956843' />
-  <node id='25932493' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9455143' lon='-1.3594035' />
-  <node id='91115454' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9281786' lon='-1.4437159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20954594' timestamp='2007-04-03T00:53:47+01:00' user='Ben' visible='true' lat='50.938471' lon='-1.3996985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998054' timestamp='2007-06-05T23:00:19+01:00' user='nickw' visible='true' lat='50.9837939' lon='-1.4138259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348719' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.9856397' lon='-1.430649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28849622' timestamp='2007-05-07T23:11:35+01:00' user='nickw' visible='true' lat='50.9195271' lon='-1.409189'>
-    <tag k='name' v='MRSHLL SQ' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014687' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9305675' lon='-1.3723669' />
-  <node id='21636775' timestamp='2007-04-29T02:33:40+01:00' user='Dean Earley' visible='true' lat='50.9488593' lon='-1.4048113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='205342803' timestamp='2008-01-03T19:20:41+00:00' user='nickw' visible='true' lat='50.9994258' lon='-1.352529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801369' timestamp='2007-03-04T19:32:14+00:00' user='Dean Earley' visible='true' lat='50.9057929' lon='-1.3764221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724233' timestamp='2006-10-07T00:25:15+01:00' user='nickw' visible='true' lat='50.9088977' lon='-1.409895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10942468' timestamp='2006-07-19T01:47:50+01:00' user='Dean Earley' visible='true' lat='50.9049308' lon='-1.3676576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325001' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9588456' lon='-1.4190426' />
-  <node id='14964131' timestamp='2006-12-08T00:19:54+00:00' user='Dean Earley' visible='true' lat='50.9165633' lon='-1.3792201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194406' timestamp='2007-04-29T08:20:29+01:00' visible='true' lat='50.9467915' lon='-1.4384781'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890110' timestamp='2007-02-18T21:25:31+00:00' visible='true' lat='50.9120311' lon='-1.3878574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984790' timestamp='2007-01-10T00:15:08+00:00' user='nickw' visible='true' lat='50.9427818' lon='-1.3844964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632213' timestamp='2007-05-26T19:21:14+01:00' visible='true' lat='50.9575605' lon='-1.366028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816312' timestamp='2007-05-31T21:52:28+01:00' visible='true' lat='50.99132' lon='-1.3547848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254525' timestamp='2007-03-25T19:25:25+01:00' user='Dean Earley' visible='true' lat='50.8988788' lon='-1.3919568' />
-  <node id='13706327' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9160603' lon='-1.3906093'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='157206239' timestamp='2007-12-08T20:12:41+00:00' user='nickw' visible='true' lat='50.9432743' lon='-1.4446349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341782' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9127911' lon='-1.3637157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091396' timestamp='2006-11-19T11:35:54+00:00' user='nickw' visible='true' lat='50.9880221' lon='-1.4450487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708449' timestamp='2007-05-28T12:16:15+01:00' visible='true' lat='50.9997617' lon='-1.3452034'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001314' timestamp='2007-05-12T09:40:12+01:00' user='nickw' visible='true' lat='50.9219629' lon='-1.3836872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783115' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9480125' lon='-1.3489673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422965' timestamp='2007-04-05T14:22:17+01:00' user='Dean Earley' visible='true' lat='50.911' lon='-1.4088' />
-  <node id='15740484' timestamp='2006-09-16T19:31:32+01:00' user='nickw' visible='true' lat='50.9954065' lon='-1.3528928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301611' timestamp='2007-04-03T00:53:59+01:00' user='Ben' visible='true' lat='50.9376994' lon='-1.3993632'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='122352468' timestamp='2007-12-10T21:00:07+00:00' user='sladen' visible='true' lat='50.91009' lon='-1.4246755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730526' timestamp='2007-05-28T19:36:53+01:00' visible='true' lat='50.9678461' lon='-1.3701904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872369' timestamp='2007-06-02T19:03:57+01:00' visible='true' lat='50.9168717' lon='-1.3508989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194392' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9455737' lon='-1.4383858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929865' timestamp='2007-06-03T22:13:32+01:00' visible='true' lat='50.979174' lon='-1.3676605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091847' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9094145' lon='-1.4228276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464265' timestamp='2007-05-22T00:19:15+01:00' user='Dean Earley' visible='true' lat='50.9372378' lon='-1.4073676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021742' timestamp='2007-04-03T00:52:29+01:00' user='Ben' visible='true' lat='50.9380587' lon='-1.3931773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957214' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9171109' lon='-1.4245086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232088' timestamp='2006-10-14T13:19:07+01:00' user='nickw' visible='true' lat='50.9147125' lon='-1.4109362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549364' timestamp='2007-05-24T11:22:49+01:00' visible='true' lat='50.9667998' lon='-1.3729293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432009' timestamp='2007-06-16T16:28:31+01:00' visible='true' lat='50.9735088' lon='-1.3495698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447514' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9106616' lon='-1.3864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130946' timestamp='2006-10-28T01:45:35+01:00' user='Dean Earley' visible='true' lat='50.931218' lon='-1.3584452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243642' timestamp='2007-04-29T20:25:06+01:00' user='Dean Earley' visible='true' lat='50.9384378' lon='-1.4164785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639944' timestamp='2007-03-04T19:32:15+00:00' user='Dean Earley' visible='true' lat='50.9014094' lon='-1.3793529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87825989' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.9003168' lon='-1.438751' />
-  <node id='21419620' timestamp='2006-12-02T23:23:54+00:00' user='Dean Earley' visible='true' lat='50.9401407' lon='-1.3782002'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961030' timestamp='2006-11-11T17:12:17+00:00' user='Dean Earley' visible='true' lat='50.9482568' lon='-1.4691602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52170206' timestamp='2007-09-15T18:41:37+01:00' user='mike l' visible='true' lat='50.9706791' lon='-1.4498257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254468' timestamp='2006-12-16T00:49:38+00:00' user='Dean Earley' visible='true' lat='50.9074376' lon='-1.371987' />
-  <node id='28173717' timestamp='2007-09-07T17:38:59+01:00' user='mike l' visible='true' lat='50.9433903' lon='-1.4341337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107352' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9326989' lon='-1.3531865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29543384' timestamp='2007-05-24T00:04:46+01:00' visible='true' lat='50.9658273' lon='-1.366136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340631' timestamp='2007-05-26T20:19:16+01:00' visible='true' lat='50.9644416' lon='-1.3643169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296614' timestamp='2007-01-19T10:19:56+00:00' user='Dean Earley' visible='true' lat='50.9702241' lon='-1.3637497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746401' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9947669' lon='-1.3391651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689099' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9414879' lon='-1.3834702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243689' timestamp='2007-04-29T20:25:15+01:00' user='Dean Earley' visible='true' lat='50.9395401' lon='-1.4134848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249904' timestamp='2007-04-29T21:41:45+01:00' visible='true' lat='50.9141331' lon='-1.4479314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194362' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9438823' lon='-1.438964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='658423' timestamp='2007-04-05T14:22:18+01:00' user='Dean Earley' visible='true' lat='50.9259922' lon='-1.3978711' />
-  <node id='20966368' timestamp='2006-11-12T17:59:36+00:00' user='Dean Earley' visible='true' lat='50.9173446' lon='-1.3712833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122340927' timestamp='2007-11-18T19:14:39+00:00' user='nickw' visible='true' lat='50.9196718' lon='-1.4387643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689164' timestamp='2007-02-18T20:19:00+00:00' visible='true' lat='50.9398918' lon='-1.372325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548707' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.9666497' lon='-1.3663555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730537' timestamp='2007-05-28T19:37:05+01:00' visible='true' lat='50.9717167' lon='-1.375348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964118' timestamp='2006-09-08T02:11:59+01:00' user='Dean Earley' visible='true' lat='50.9220304' lon='-1.3758601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91113444' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.9273177' lon='-1.4421365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972785' timestamp='2006-11-13T00:06:58+00:00' user='Dean Earley' visible='true' lat='50.906429' lon='-1.4153887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27513796' timestamp='2007-04-21T22:32:32+01:00' user='Dean Earley' visible='true' lat='50.9665637' lon='-1.3564639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160384741' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9165081' lon='-1.4553171' />
-  <node id='13705481' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.9082138' lon='-1.4427764' />
-  <node id='29764415' timestamp='2007-05-30T21:37:24+01:00' user='nickw' visible='true' lat='50.9217224' lon='-1.3622925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871579' timestamp='2007-06-02T18:41:35+01:00' visible='true' lat='50.9160736' lon='-1.3507381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254336' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9480996' lon='-1.4131336' />
-  <node id='21141381' timestamp='2007-03-24T16:33:47+00:00' user='Dean Earley' visible='true' lat='50.9221501' lon='-1.4216412'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935751' timestamp='2007-05-11T00:50:43+01:00' visible='true' lat='50.9405655' lon='-1.4458134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372774' timestamp='2007-05-01T10:05:20+01:00' visible='true' lat='50.9276381' lon='-1.4372145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398427' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9664635' lon='-1.3941402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227258' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9402756' lon='-1.4102315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275634' timestamp='2007-06-01T16:40:33+01:00' user='Dean Earley' visible='true' lat='50.9156733' lon='-1.4344233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87826004' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8996889' lon='-1.4391544' />
-  <node id='91132086' timestamp='2007-10-29T08:23:16+00:00' user='nickw' visible='true' lat='50.9311533' lon='-1.422867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892133' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9060999' lon='-1.3893422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216403' timestamp='2006-07-09T22:47:15+01:00' user='Dean Earley' visible='true' lat='50.9206781' lon='-1.3564622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639910' timestamp='2007-02-04T22:51:16+00:00' user='Dean Earley' visible='true' lat='50.9045104' lon='-1.3829376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722331' timestamp='2007-02-01T22:22:03+00:00' user='Dean Earley' visible='true' lat='50.9422728' lon='-1.3804321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504463' timestamp='2007-06-17T21:43:57+01:00' visible='true' lat='50.982402' lon='-1.3573087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577084' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9181347' lon='-1.467163' />
-  <node id='29466069' timestamp='2007-05-22T00:37:27+01:00' user='Dean Earley' visible='true' lat='50.9405787' lon='-1.4289105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577121' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9650005' lon='-1.4210868' />
-  <node id='2073407' timestamp='2007-04-05T14:22:19+01:00' user='Dean Earley' visible='true' lat='50.9305382' lon='-1.3927563' />
-  <node id='700480' timestamp='2007-04-05T14:22:19+01:00' user='Dean Earley' visible='true' lat='50.9242964' lon='-1.3704109' />
-  <node id='28348148' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9330973' lon='-1.3681398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838298' timestamp='2007-06-01T20:13:23+01:00' visible='true' lat='50.9963264' lon='-1.3529634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957231' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9120379' lon='-1.4211121'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9267989' timestamp='2006-12-02T23:23:54+00:00' user='Dean Earley' visible='true' lat='50.9427149' lon='-1.375573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48950441' timestamp='2007-09-10T23:28:30+01:00' visible='true' lat='50.9133518' lon='-1.3980926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632866' timestamp='2007-05-26T20:07:41+01:00' visible='true' lat='50.9670444' lon='-1.3619321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162101' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true' lat='50.9723344' lon='-1.3778118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468546' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9128392' lon='-1.4443393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130969' timestamp='2006-10-28T01:45:37+01:00' user='Dean Earley' visible='true' lat='50.9295662' lon='-1.3563519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949986' timestamp='2007-01-07T12:38:56+00:00' user='nickw' visible='true' lat='50.9891652' lon='-1.371773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885353' timestamp='2006-12-16T21:53:09+00:00' user='nickw' visible='true' lat='50.8994205' lon='-1.4049314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298228' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='51.0211689' lon='-1.3351601' />
-  <node id='24924318' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9858506' lon='-1.3795237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929614' timestamp='2007-06-03T22:07:08+01:00' visible='true' lat='50.9776009' lon='-1.3581321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243979481' timestamp='2008-01-29T12:02:02+00:00' user='Dean Earley' visible='true' lat='50.9607206' lon='-1.3492804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160283712' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.917109' lon='-1.4908789' />
-  <node id='30255976' timestamp='2007-06-12T20:14:38+01:00' visible='true' lat='50.9831665' lon='-1.3501426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973114' timestamp='2006-11-13T00:42:44+00:00' user='Dean Earley' visible='true' lat='50.9049887' lon='-1.4125678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87877507' timestamp='2007-10-26T13:40:01+01:00' user='Nick Dyer' visible='true' lat='50.9267483' lon='-1.4290157' />
-  <node id='26593133' timestamp='2007-04-29T19:27:57+01:00' user='Andy Street' visible='true' lat='50.8997783' lon='-1.3596638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29703873' timestamp='2007-05-28T10:12:58+01:00' visible='true' lat='50.9885613' lon='-1.3538347'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660543' timestamp='2007-10-28T21:45:54+00:00' user='Nick Dyer' visible='true' lat='50.9021851' lon='-1.4082748' />
-  <node id='21613454' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9769509' lon='-1.4016654'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305636' timestamp='2007-11-14T08:11:25+00:00' user='Edward' visible='true' lat='50.9836' lon='-1.38523'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Chandler's Ford' />
-  </node>
-  <node id='20952626' timestamp='2007-02-11T00:33:15+00:00' visible='true' lat='50.9313905' lon='-1.3802227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924348' timestamp='2007-06-03T20:10:38+01:00' visible='true' lat='50.981851' lon='-1.3619797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710904' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9848248' lon='-1.3570168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932241' timestamp='2007-09-07T16:44:35+01:00' user='mike l' visible='true' lat='50.9787963' lon='-1.4497936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254429' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9199968' lon='-1.3953744' />
-  <node id='29816730' timestamp='2007-05-31T22:13:29+01:00' visible='true' lat='50.9901942' lon='-1.3568848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972822' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.900477' lon='-1.3955926'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071407' timestamp='2006-08-11T02:48:14+01:00' user='Dean Earley' visible='true' lat='50.921931' lon='-1.3555945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398431' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9628772' lon='-1.3900519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794383' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.9234276' lon='-1.3622118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998136' timestamp='2007-06-05T23:00:31+01:00' user='nickw' visible='true' lat='50.9919352' lon='-1.4032965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003049' timestamp='2007-05-22T00:19:50+01:00' user='Dean Earley' visible='true' lat='50.9399782' lon='-1.405407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021757' timestamp='2007-04-03T00:52:40+01:00' user='Ben' visible='true' lat='50.9460264' lon='-1.4044585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238994' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9011607' lon='-1.4124518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282089' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.9760261' lon='-1.4077212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764486' timestamp='2007-02-10T23:53:39+00:00' visible='true' lat='50.9104435' lon='-1.396731' />
-  <node id='16963737' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9336645' lon='-1.4133015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254926' timestamp='2007-02-13T18:31:45+00:00' user='Dean Earley' visible='true' lat='50.9809904' lon='-1.4431797' />
-  <node id='28179446' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9609368' lon='-1.4219461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636934' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9087678' lon='-1.4160943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141376' timestamp='2006-11-21T23:12:42+00:00' user='nickw' visible='true' lat='50.9316415' lon='-1.4252705'>
-    <tag k='name' v='BLADON' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486264' timestamp='2007-07-09T11:55:38+01:00' visible='true' lat='50.9112895' lon='-1.382076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998348' timestamp='2007-06-05T23:05:24+01:00' user='nickw' visible='true' lat='50.9784156' lon='-1.4322424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909660' timestamp='2007-06-03T14:54:17+01:00' visible='true' lat='50.9679277' lon='-1.3542549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91109764' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true' lat='50.9303386' lon='-1.430132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639895' timestamp='2007-02-04T22:51:14+00:00' user='Dean Earley' visible='true' lat='50.8990077' lon='-1.3813559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964101' timestamp='2007-01-19T20:35:57+00:00' user='Dean Earley' visible='true' lat='50.9241727' lon='-1.375883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745446' timestamp='2007-01-19T09:38:47+00:00' user='Dean Earley' visible='true' lat='50.9708301' lon='-1.3502556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296310' timestamp='2007-01-19T09:58:48+00:00' user='Dean Earley' visible='true' lat='50.9760715' lon='-1.3648541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372808' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9300206' lon='-1.4340162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783093' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.945735' lon='-1.3538762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160408129' timestamp='2007-12-10T20:59:12+00:00' user='sladen' visible='true' lat='50.9109505' lon='-1.4312587' />
-  <node id='30510875' timestamp='2007-06-17T22:25:14+01:00' visible='true' lat='50.9759432' lon='-1.357583'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440009' timestamp='2007-04-18T02:00:20+01:00' visible='true' lat='50.9283868' lon='-1.3820824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331330' timestamp='2007-12-06T22:11:15+00:00' user='Dean Earley' visible='true' lat='51.0029' lon='-1.36773' />
-  <node id='24949821' timestamp='2007-01-31T02:05:52+00:00' user='Dean Earley' visible='true' lat='50.9960868' lon='-1.3768961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997556' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9921103' lon='-1.3437558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325672' timestamp='2007-04-05T14:22:20+01:00' user='Dean Earley' visible='true' lat='50.9424' lon='-1.42524' />
-  <node id='29997565' timestamp='2007-06-05T22:44:01+01:00' user='nickw' visible='true' lat='50.9986623' lon='-1.351623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726555' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9113928' lon='-1.4011796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243596' timestamp='2007-04-29T20:24:58+01:00' user='Dean Earley' visible='true' lat='50.934937' lon='-1.4146475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157212547' timestamp='2007-12-08T20:16:58+00:00' user='nickw' visible='true' lat='50.9442648' lon='-1.447528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491399' timestamp='2008-01-02T05:42:27+00:00' user='80n' visible='true' lat='50.9189797' lon='-1.4034203'>
-    <tag k='tourism' v='hotel' />
-    <tag k='name' v='Travelodge' />
-  </node>
-  <node id='59740699' timestamp='2007-09-25T13:22:04+01:00' visible='true' lat='50.9129485' lon='-1.4027974'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Chambers' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='254896' timestamp='2007-11-20T11:08:51+00:00' user='Gregory Williams' visible='true' lat='50.9338718' lon='-1.4185347'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='30256654' timestamp='2007-06-12T20:36:34+01:00' visible='true' lat='50.9809216' lon='-1.3564442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278587' timestamp='2007-08-14T04:48:05+01:00' user='andrewpmk' visible='true' lat='50.9078655' lon='-1.3958252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90675691' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.9005423' lon='-1.4447131' />
-  <node id='20976814' timestamp='2006-11-13T21:50:51+00:00' user='nickw' visible='true' lat='50.925875' lon='-1.4223997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360185' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9521055' lon='-1.3703642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201639183' timestamp='2008-01-01T18:38:08+00:00' user='Milliams' visible='true' lat='50.950363' lon='-1.3614607'>
-    <tag k='aeroway' v='terminal' />
-    <tag k='name' v='Southampton International' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </node>
-  <node id='29704597' timestamp='2007-05-28T10:44:49+01:00' visible='true' lat='50.9775362' lon='-1.3548885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244271' timestamp='2007-04-29T20:36:32+01:00' user='Andy Street' visible='true' lat='50.9038658' lon='-1.3531023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904027' timestamp='2007-10-16T11:34:28+01:00' user='Dean Earley' visible='true' lat='50.9501393' lon='-1.3644949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247793' timestamp='2007-09-20T19:46:47+01:00' user='mike l' visible='true' lat='50.9356616' lon='-1.396079' />
-  <node id='91109259' timestamp='2007-10-29T07:50:30+00:00' user='nickw' visible='true' lat='50.9333342' lon='-1.4214353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90606453' timestamp='2007-10-28T20:49:24+00:00' user='Nick Dyer' visible='true' lat='50.8955155' lon='-1.4034432' />
-  <node id='28246671' timestamp='2007-04-29T21:09:38+01:00' visible='true' lat='50.9476397' lon='-1.4347073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632170' timestamp='2007-05-26T19:20:15+01:00' visible='true' lat='50.9572241' lon='-1.36827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388918' timestamp='2007-04-05T14:22:20+01:00' user='Dean Earley' visible='true' lat='50.9455501' lon='-1.4012101' />
-  <node id='28240315' timestamp='2007-04-29T20:02:54+01:00' user='Andy Street' visible='true' lat='50.9059946' lon='-1.3550326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107844' timestamp='2007-04-27T23:50:36+01:00' visible='true' lat='50.9360357' lon='-1.3997464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464273' timestamp='2007-05-22T00:19:17+01:00' user='Dean Earley' visible='true' lat='50.9381578' lon='-1.404661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160242653' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9123253' lon='-1.4381016' />
-  <node id='9312075' timestamp='2007-02-16T20:51:28+00:00' user='nickw' visible='true' lat='50.9143561' lon='-1.3980863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329475' timestamp='2007-04-05T14:22:21+01:00' user='Dean Earley' visible='true' lat='50.9371' lon='-1.37464' />
-  <node id='307483' timestamp='2007-01-28T00:07:18+00:00' visible='true' lat='50.924077' lon='-1.4047265' />
-  <node id='29549398' timestamp='2007-05-24T11:22:54+01:00' visible='true' lat='50.9623226' lon='-1.377804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431982' timestamp='2007-06-16T16:26:05+01:00' visible='true' lat='50.98538' lon='-1.3515109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903787' timestamp='2007-12-06T19:26:18+00:00' user='Dean Earley' visible='true' lat='50.9812797' lon='-1.4444955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583066' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9383746' lon='-1.4347286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342605' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9062349' lon='-1.3710341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092032' timestamp='2006-11-19T12:29:34+00:00' user='nickw' visible='true' lat='50.9710846' lon='-1.4429527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346966' timestamp='2007-04-30T23:26:35+01:00' user='nickw' visible='true' lat='50.8994235' lon='-1.3627559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815066' timestamp='2007-05-31T21:31:00+01:00' visible='true' lat='50.988569' lon='-1.3553839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222191' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9110803' lon='-1.4313703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561793' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9253084' lon='-1.4361862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722366' timestamp='2006-10-06T23:46:15+01:00' user='Dean Earley' visible='true' lat='50.9493559' lon='-1.3993148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237247' timestamp='2007-04-29T19:42:07+01:00' user='Andy Street' visible='true' lat='50.9031118' lon='-1.3558388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743166' timestamp='2007-04-29T20:37:42+01:00' user='Dean Earley' visible='true' lat='50.9343524' lon='-1.4190406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380418' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.9454029' lon='-1.379568'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183641' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9015277' lon='-1.381419' />
-  <node id='28830666' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9237763' lon='-1.3641256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246060' timestamp='2007-04-29T20:52:45+01:00' user='Dean Earley' visible='true' lat='50.9372363' lon='-1.4230074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509871' timestamp='2007-05-22T21:20:45+01:00' visible='true' lat='50.9907415' lon='-1.3595747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='52285785' timestamp='2007-09-15T22:37:20+01:00' user='mike l' visible='true' lat='50.9459129' lon='-1.3919061' />
-  <node id='25592563' timestamp='2007-02-01T22:20:27+00:00' user='Dean Earley' visible='true' lat='50.9448312' lon='-1.373284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704337' timestamp='2007-05-28T10:32:59+01:00' visible='true' lat='50.9832819' lon='-1.3603618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999058' timestamp='2007-06-05T23:29:04+01:00' user='nickw' visible='true' lat='50.9943861' lon='-1.4311895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160221497' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9140192' lon='-1.3900536' />
-  <node id='29928069' timestamp='2007-06-03T21:43:52+01:00' visible='true' lat='50.9800022' lon='-1.3694641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670536' timestamp='2007-05-27T11:12:25+01:00' visible='true' lat='50.9685839' lon='-1.3676306'>
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595078' timestamp='2007-05-25T21:54:07+01:00' visible='true' lat='50.9675154' lon='-1.3533663'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526315' timestamp='2007-05-23T09:19:02+01:00' user='nickw' visible='true' lat='50.9271949' lon='-1.3625998'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956633' timestamp='2007-06-26T23:45:06+01:00' user='nickw' visible='true' lat='50.9328437' lon='-1.3530671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728571' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true' lat='50.8998188' lon='-1.3728479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984805' timestamp='2007-01-10T00:15:48+00:00' user='nickw' visible='true' lat='50.9457735' lon='-1.4000124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935991' timestamp='2007-05-11T00:59:39+01:00' visible='true' lat='50.9416182' lon='-1.4441382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250068' timestamp='2007-04-29T21:42:23+01:00' visible='true' lat='50.9153749' lon='-1.4508213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25947179' timestamp='2007-02-16T20:51:24+00:00' user='nickw' visible='true' lat='50.9136375' lon='-1.3932677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675831' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true' lat='50.9258719' lon='-1.3760309' />
-  <node id='87796733' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8940755' lon='-1.4028596' />
-  <node id='245149858' timestamp='2008-02-03T06:12:31+00:00' user='sladen' visible='true' lat='50.9072823' lon='-1.4019424' />
-  <node id='33718254' timestamp='2007-08-08T01:32:20+01:00' visible='true' lat='50.9343306' lon='-1.4441982' />
-  <node id='9285001' timestamp='2007-02-18T21:25:30+00:00' visible='true' lat='50.917316' lon='-1.3999557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29510727' timestamp='2007-05-22T21:45:07+01:00' visible='true' lat='50.9723392' lon='-1.3513423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359702' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9683515' lon='-1.3525922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392591' timestamp='2007-05-20T18:06:38+01:00' visible='true' lat='50.9649486' lon='-1.3555735'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180213' timestamp='2007-04-29T02:05:35+01:00' user='Dean Earley' visible='true' lat='50.9621995' lon='-1.4261756'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383140' timestamp='2007-04-05T14:22:22+01:00' user='Dean Earley' visible='true' lat='50.9262' lon='-1.41264' />
-  <node id='325259' timestamp='2006-11-11T17:23:10+00:00' user='Dean Earley' visible='true' lat='50.9246545' lon='-1.3156291' />
-  <node id='20133204' timestamp='2006-10-28T01:55:52+01:00' user='Dean Earley' visible='true' lat='50.9285948' lon='-1.3520497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250085' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9156707' lon='-1.451684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509897' timestamp='2007-05-22T21:20:51+01:00' visible='true' lat='50.9884624' lon='-1.359111'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724251' timestamp='2007-02-18T21:30:18+00:00' visible='true' lat='50.9138354' lon='-1.4107221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998901' timestamp='2007-06-05T23:28:48+01:00' user='nickw' visible='true' lat='50.9870081' lon='-1.4408845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998537' timestamp='2007-06-05T23:13:22+01:00' user='nickw' visible='true' lat='50.9636534' lon='-1.4420963'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194896' timestamp='2007-04-29T08:58:00+01:00' user='Dean Earley' visible='true' lat='50.9426297' lon='-1.4075794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745427' timestamp='2007-01-19T18:15:24+00:00' user='Dean Earley' visible='true' lat='50.960243' lon='-1.3546124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675766' timestamp='2007-02-06T01:02:59+00:00' user='Dean Earley' visible='true' lat='50.907023' lon='-1.4195644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561797' timestamp='2006-12-13T20:19:45+00:00' user='nickw' visible='true' lat='50.9231419' lon='-1.4379344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984716' timestamp='2007-01-10T00:11:58+00:00' user='nickw' visible='true' lat='50.9445406' lon='-1.3904763'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071263' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9193023' lon='-1.3608823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471849' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9390236' lon='-1.3677698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29912993' timestamp='2007-06-03T15:50:13+01:00' visible='true' lat='50.9867647' lon='-1.358474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463028' timestamp='2007-05-22T00:01:33+01:00' user='nickw' visible='true' lat='50.9071961' lon='-1.4016064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561554' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9219073' lon='-1.4307928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089102' timestamp='2007-06-08T18:12:06+01:00' visible='true' lat='50.9656825' lon='-1.3784921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19262896' timestamp='2006-10-24T00:36:46+01:00' user='Dean Earley' visible='true' lat='50.9457254' lon='-1.5297619'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000965' timestamp='2007-05-12T09:31:58+01:00' user='nickw' visible='true' lat='50.9184612' lon='-1.4094645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577067' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9121227' lon='-1.4382295' />
-  <node id='2073202' timestamp='2007-04-05T14:22:22+01:00' user='Dean Earley' visible='true' lat='50.9321319' lon='-1.3909438' />
-  <node id='21636949' timestamp='2006-12-18T21:41:06+00:00' user='nickw' visible='true' lat='50.9196102' lon='-1.4286186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971166' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9058722' lon='-1.4011312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372744' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9317293' lon='-1.4412051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998106' timestamp='2007-06-05T23:00:27+01:00' user='nickw' visible='true' lat='50.9851072' lon='-1.3927671'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958631' timestamp='2007-09-10T23:55:11+01:00' visible='true' lat='50.90654' lon='-1.3981572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964847' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9936823' lon='-1.4281113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469883' timestamp='2007-04-05T14:22:22+01:00' user='Dean Earley' visible='true' lat='50.9187' lon='-1.43897' />
-  <node id='29998978' timestamp='2007-06-05T23:28:57+01:00' user='nickw' visible='true' lat='50.9894092' lon='-1.4348847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659244' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9026939' lon='-1.4077942' />
-  <node id='87877614' timestamp='2007-10-26T13:40:22+01:00' user='Nick Dyer' visible='true' lat='50.9238755' lon='-1.4430319' />
-  <node id='29001332' timestamp='2007-05-12T09:40:15+01:00' user='nickw' visible='true' lat='50.9235351' lon='-1.3814297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971215' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9088495' lon='-1.4118133'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624990' timestamp='2006-12-17T19:47:27+00:00' user='Dean Earley' visible='true' lat='50.8988727' lon='-1.3686813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133018' timestamp='2007-05-15T20:36:37+01:00' user='nickw' visible='true' lat='50.9332177' lon='-1.3752695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462159' timestamp='2007-05-21T23:53:38+01:00' user='nickw' visible='true' lat='50.9004147' lon='-1.3981706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='36686479' timestamp='2007-08-28T23:32:21+01:00' visible='true' lat='50.9243653' lon='-1.3763631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509888' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9894293' lon='-1.3591702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924062' timestamp='2007-01-06T14:28:45+00:00' user='Dean Earley' visible='true' lat='51.0223035' lon='-1.3338834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816295' timestamp='2007-05-31T21:52:25+01:00' visible='true' lat='50.9911107' lon='-1.3541508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275814' timestamp='2006-11-26T00:10:56+00:00' user='nickw' visible='true' lat='50.9152227' lon='-1.436214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266198' timestamp='2006-07-01T00:24:29+01:00' user='Dean Earley' visible='true' lat='50.9481034' lon='-1.3679336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347768' timestamp='2007-04-30T23:40:08+01:00' user='nickw' visible='true' lat='50.9324337' lon='-1.3637889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18349493' timestamp='2007-04-29T21:35:05+01:00' user='Dean Earley' visible='true' lat='50.967788' lon='-1.4228132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721027' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9641179' lon='-1.3705829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668297' timestamp='2007-01-04T21:06:36+00:00' user='nickw' visible='true' lat='50.9847323' lon='-1.3985221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254956' timestamp='2006-09-02T13:46:27+01:00' user='Dean Earley' visible='true' lat='50.9386713' lon='-1.4197003' />
-  <node id='254366' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9185676' lon='-1.4038877' />
-  <node id='30229555' timestamp='2007-06-12T00:14:35+01:00' user='nickw' visible='true' lat='50.9334855' lon='-1.3534572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194908' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9413217' lon='-1.4077178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544318' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.924535' lon='-1.3940209' />
-  <node id='26346851' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9159343' lon='-1.3692135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447509' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9098975' lon='-1.388188'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254849' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9130665' lon='-1.4405284' />
-  <node id='24924096' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.9393973' lon='-1.3747669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360189' timestamp='2006-09-11T20:23:42+01:00' user='Dean Earley' visible='true' lat='50.9540984' lon='-1.3705706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462612' timestamp='2007-05-21T23:56:39+01:00' user='nickw' visible='true' lat='50.9046995' lon='-1.3977335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107340' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9318159' lon='-1.3537839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269317' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0084891' lon='-1.394339' />
-  <node id='29925937' timestamp='2007-06-03T20:52:42+01:00' visible='true' lat='50.9801111' lon='-1.3661859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708039' timestamp='2007-06-03T21:48:32+01:00' visible='true' lat='50.9792116' lon='-1.3674313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724236' timestamp='2006-10-07T00:25:16+01:00' user='nickw' visible='true' lat='50.9242961' lon='-1.4053302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341747' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9133297' lon='-1.3502658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124356' timestamp='2007-06-09T19:43:07+01:00' user='nickw' visible='true' lat='50.9240362' lon='-1.3487882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87844774' timestamp='2007-10-26T13:03:03+01:00' user='Nick Dyer' visible='true' lat='50.9059838' lon='-1.4305469' />
-  <node id='14743154' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9220502' lon='-1.4292865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706638' timestamp='2007-04-05T14:22:23+01:00' user='Dean Earley' visible='true' lat='50.9154565' lon='-1.380611' />
-  <node id='28932219' timestamp='2007-05-10T20:48:45+01:00' user='Dean Earley' visible='true' lat='50.9646385' lon='-1.4760864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254696' timestamp='2007-01-19T20:35:58+00:00' user='Dean Earley' visible='true' lat='50.9211024' lon='-1.3891384' />
-  <node id='21689151' timestamp='2007-05-01T23:50:30+01:00' user='nickw' visible='true' lat='50.9403786' lon='-1.3754441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464254' timestamp='2007-05-22T00:19:13+01:00' user='Dean Earley' visible='true' lat='50.9362465' lon='-1.408829'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632802' timestamp='2007-05-26T20:05:13+01:00' visible='true' lat='50.959804' lon='-1.3701631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275763' timestamp='2006-11-25T23:58:41+00:00' user='nickw' visible='true' lat='50.9165616' lon='-1.4280234'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398382' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9476715' lon='-1.447181'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595083' timestamp='2007-05-25T21:54:08+01:00' visible='true' lat='50.9694099' lon='-1.3534946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856352' timestamp='2007-06-02T08:31:26+01:00' user='nickw' visible='true' lat='50.9496974' lon='-1.395052'>
-    <tag k='leisure' v='golf_course' />
-    <tag k='name' v='Stoneham Golf Club' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254862' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9207557' lon='-1.4652133' />
-  <node id='20110835' timestamp='2006-10-27T23:39:24+01:00' user='Dean Earley' visible='true' lat='50.9337225' lon='-1.3702642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254740' timestamp='2007-09-17T23:09:07+01:00' user='mike l' visible='true' lat='50.972551' lon='-1.389279' />
-  <node id='160183656' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.8989727' lon='-1.3776596' />
-  <node id='254446' timestamp='2008-02-03T06:10:30+00:00' user='sladen' visible='true' lat='50.9068763' lon='-1.404586' />
-  <node id='28903403' timestamp='2007-05-09T23:24:35+01:00' visible='true' lat='50.9462589' lon='-1.3642203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932468' timestamp='2007-05-10T21:06:11+01:00' user='Dean Earley' visible='true' lat='50.9640872' lon='-1.4681549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160265292' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9691567' lon='-1.373145' />
-  <node id='9726310' timestamp='2006-09-08T02:12:12+01:00' user='Dean Earley' visible='true' lat='50.918234' lon='-1.3749548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183713' timestamp='2007-04-29T02:25:34+01:00' user='Dean Earley' visible='true' lat='50.9521176' lon='-1.4052994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601313' timestamp='2006-09-01T00:16:04+01:00' user='nickw' visible='true' lat='50.8386755' lon='-1.5033245'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29998132' timestamp='2007-06-05T23:00:30+01:00' user='nickw' visible='true' lat='50.9905097' lon='-1.4052037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962321' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9568965' lon='-1.3621521' />
-  <node id='28246355' timestamp='2007-04-29T20:59:44+01:00' user='Dean Earley' visible='true' lat='50.9383508' lon='-1.4265541'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071424' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.9243766' lon='-1.3528841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305229' timestamp='2005-12-10T22:27:22+00:00' user='80n' visible='true' lat='50.9961794' lon='-1.357501' />
-  <node id='254332' timestamp='2006-07-29T14:06:24+01:00' user='nickw' visible='true' lat='50.968' lon='-1.41225'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='154773092' timestamp='2007-12-07T13:53:03+00:00' user='Nick Dyer' visible='true' lat='50.9610448' lon='-1.4265084' />
-  <node id='21600424' timestamp='2007-03-24T16:44:16+00:00' user='Dean Earley' visible='true' lat='50.9224905' lon='-1.4365747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728177' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.952059' lon='-1.4037301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621424' timestamp='2007-05-26T11:42:38+01:00' visible='true' lat='50.9672412' lon='-1.3719852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298240' timestamp='2005-12-06T01:50:09+00:00' visible='true' lat='51.0015343' lon='-1.3561459' />
-  <node id='28830657' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9235572' lon='-1.370483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123694' timestamp='2007-10-29T08:15:56+00:00' user='nickw' visible='true' lat='50.9304865' lon='-1.4473602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431937' timestamp='2007-06-16T16:23:57+01:00' visible='true' lat='50.9844432' lon='-1.351925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29707705' timestamp='2007-06-03T15:50:16+01:00' visible='true' lat='50.9869653' lon='-1.3600397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254383' timestamp='2005-11-15T15:39:31+00:00' user='nickw' visible='true' lat='50.9130005' lon='-1.4064905' />
-  <node id='24924303' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9746246' lon='-1.37431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275702' timestamp='2006-11-25T23:51:15+00:00' user='nickw' visible='true' lat='50.9231757' lon='-1.4334823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874048' timestamp='2007-05-08T14:50:18+01:00' visible='true' lat='50.9363577' lon='-1.4384556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227228' timestamp='2007-01-19T18:58:06+00:00' user='Dean Earley' visible='true' lat='50.9355903' lon='-1.4165432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509910' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9869003' lon='-1.3574371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372759' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.9305207' lon='-1.4414135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290792' timestamp='2007-06-13T09:24:11+01:00' visible='true' lat='50.9646135' lon='-1.3798072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160179634' timestamp='2007-12-10T19:05:42+00:00' user='sladen' visible='true' lat='50.9134022' lon='-1.3719777' />
-  <node id='160414998' timestamp='2007-12-10T21:01:39+00:00' user='sladen' visible='true' lat='50.9109451' lon='-1.4283748' />
-  <node id='13071338' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.9185015' lon='-1.3647319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700401' timestamp='2007-04-05T14:22:23+01:00' user='Dean Earley' visible='true' lat='50.9215777' lon='-1.3901765' />
-  <node id='28372732' timestamp='2007-05-01T10:05:15+01:00' visible='true' lat='50.9309583' lon='-1.4423928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237229' timestamp='2007-04-29T19:42:01+01:00' user='Andy Street' visible='true' lat='50.9040101' lon='-1.3589405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132723' timestamp='2007-01-06T14:30:53+00:00' user='Dean Earley' visible='true' lat='51.0063332' lon='-1.352255' />
-  <node id='28347751' timestamp='2007-04-30T23:40:06+01:00' user='nickw' visible='true' lat='50.9298668' lon='-1.3588818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639959' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.9015394' lon='-1.3776426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2742651' timestamp='2007-05-22T00:19:52+01:00' user='Dean Earley' visible='true' lat='50.9496577' lon='-1.400132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252971' timestamp='2007-04-29T22:00:41+01:00' visible='true' lat='50.9434091' lon='-1.429124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639978' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9004471' lon='-1.3798049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91123683' timestamp='2007-10-29T08:15:55+00:00' user='nickw' visible='true' lat='50.9305272' lon='-1.4472088'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149447' timestamp='2008-02-03T06:10:27+00:00' user='sladen' visible='true' lat='50.9066544' lon='-1.4045431' />
-  <node id='319640' timestamp='2006-12-18T23:27:25+00:00' visible='true' lat='50.9221458' lon='-1.3954054' />
-  <node id='305577' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.994823' lon='-1.3961649' />
-  <node id='31486285' timestamp='2007-07-09T11:55:40+01:00' visible='true' lat='50.9099948' lon='-1.3821625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298264' timestamp='2007-01-19T18:27:14+00:00' user='Dean Earley' visible='true' lat='50.9608189' lon='-1.3910999' />
-  <node id='29730501' timestamp='2007-05-28T19:36:31+01:00' visible='true' lat='50.9719412' lon='-1.3672798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29709220' timestamp='2007-05-28T12:42:07+01:00' visible='true' lat='50.9981314' lon='-1.3511043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913609' timestamp='2007-06-03T15:53:28+01:00' visible='true' lat='50.9857286' lon='-1.3599369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704455' timestamp='2007-05-28T10:36:46+01:00' visible='true' lat='50.9818197' lon='-1.3571532'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133193' timestamp='2006-10-28T01:55:51+01:00' user='Dean Earley' visible='true' lat='50.9288943' lon='-1.3514087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298285' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9570764' lon='-1.3988309' />
-  <node id='29999081' timestamp='2007-06-05T23:29:06+01:00' user='nickw' visible='true' lat='50.9896843' lon='-1.4325801'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507748' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.9322671' lon='-1.3993971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291040' timestamp='2007-06-13T09:32:55+01:00' visible='true' lat='50.9665377' lon='-1.3852759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518777' timestamp='2007-04-05T14:22:23+01:00' user='Dean Earley' visible='true' lat='50.9160736' lon='-1.3949567' />
-  <node id='29009020' timestamp='2007-05-12T15:28:41+01:00' user='nickw' visible='true' lat='50.9320187' lon='-1.3507821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290758' timestamp='2007-06-13T09:24:04+01:00' visible='true' lat='50.9702284' lon='-1.3834667'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675800' timestamp='2007-02-06T01:03:07+00:00' user='Dean Earley' visible='true' lat='50.9038739' lon='-1.418814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071283' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9196925' lon='-1.3590427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700404' timestamp='2007-04-05T14:22:24+01:00' user='Dean Earley' visible='true' lat='50.9219058' lon='-1.3898484' />
-  <node id='27021802' timestamp='2007-04-03T00:52:59+01:00' user='Ben' visible='true' lat='50.9362011' lon='-1.405007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781176' timestamp='2007-03-25T18:42:14+01:00' user='Dean Earley' visible='true' lat='50.9015577' lon='-1.373861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447526' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9110374' lon='-1.3852676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575769' timestamp='2007-03-25T19:25:12+01:00' user='Dean Earley' visible='true' lat='50.9006862' lon='-1.394244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241450' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.9449031' lon='-1.4500821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830636' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9264124' lon='-1.3601523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781161' timestamp='2007-03-25T18:42:12+01:00' user='Dean Earley' visible='true' lat='50.8987183' lon='-1.3682447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29510003' timestamp='2007-05-22T21:30:12+01:00' visible='true' lat='50.9968672' lon='-1.3606841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964151' timestamp='2007-02-18T21:30:37+00:00' visible='true' lat='50.9164789' lon='-1.3805429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600511' timestamp='2006-12-16T10:14:00+00:00' user='nickw' visible='true' lat='50.9096395' lon='-1.4173655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30511426' timestamp='2007-06-17T22:30:27+01:00' visible='true' lat='50.9757857' lon='-1.3568477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179505' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9544453' lon='-1.4019992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998115' timestamp='2007-06-05T23:00:28+01:00' user='nickw' visible='true' lat='50.9882337' lon='-1.3953101'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913604' timestamp='2007-06-03T15:53:27+01:00' visible='true' lat='50.986427' lon='-1.3609955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817076' timestamp='2007-05-31T22:18:46+01:00' visible='true' lat='50.9855326' lon='-1.3644626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134136' timestamp='2007-05-15T20:47:33+01:00' user='nickw' visible='true' lat='50.9426281' lon='-1.3929666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114356' timestamp='2007-08-14T04:48:35+01:00' user='andrewpmk' visible='true' lat='50.9072673' lon='-1.3968865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462751' timestamp='2007-05-21T23:57:40+01:00' user='nickw' visible='true' lat='50.9050002' lon='-1.403038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945402' timestamp='2007-03-31T20:34:36+01:00' user='nickw' visible='true' lat='50.9024116' lon='-1.3461736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504293' timestamp='2007-01-28T19:31:53+00:00' user='nickw' visible='true' lat='51.0002143' lon='-1.3446157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254450' timestamp='2007-03-04T18:58:23+00:00' user='Dean Earley' visible='true' lat='50.9145306' lon='-1.3718899' />
-  <node id='29953380' timestamp='2007-06-04T21:17:01+01:00' visible='true' lat='51.0043762' lon='-1.3929712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170454' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9558061' lon='-1.3993613' />
-  <node id='87239966' timestamp='2007-10-29T15:11:18+00:00' user='Dean Earley' visible='true' lat='50.9340058' lon='-1.4508192' />
-  <node id='29133060' timestamp='2007-05-15T20:36:48+01:00' user='nickw' visible='true' lat='50.93272' lon='-1.3775889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923779' timestamp='2007-06-03T20:04:47+01:00' visible='true' lat='50.9827255' lon='-1.362063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071206' timestamp='2006-08-11T02:47:52+01:00' user='Dean Earley' visible='true' lat='50.9251677' lon='-1.3648015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583006' timestamp='2007-05-02T23:57:53+01:00' visible='true' lat='50.9406368' lon='-1.4336736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595011' timestamp='2006-08-04T11:59:34+01:00' user='nickw' visible='true' lat='50.9183327' lon='-1.4102119'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='92685112' timestamp='2007-10-31T12:25:03+00:00' user='Dean Earley' visible='true' lat='50.9619887' lon='-1.4243445' />
-  <node id='21689116' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.939898' lon='-1.3809074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87800148' timestamp='2007-10-26T11:41:57+01:00' user='Nick Dyer' visible='true' lat='50.9008925' lon='-1.4424116' />
-  <node id='25675147' timestamp='2007-02-06T00:16:35+00:00' user='Dean Earley' visible='true' lat='50.9020121' lon='-1.4025268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871074' timestamp='2007-08-08T01:25:53+01:00' visible='true' lat='50.934098' lon='-1.4412112' />
-  <node id='298302' timestamp='2005-12-06T02:07:57+00:00' visible='true' lat='50.9477938' lon='-1.3889761' />
-  <node id='21636787' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9500719' lon='-1.4073868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984761' timestamp='2007-05-15T20:47:45+01:00' user='nickw' visible='true' lat='50.9427255' lon='-1.3918074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932226' timestamp='2007-09-15T18:41:59+01:00' user='mike l' visible='true' lat='50.9615268' lon='-1.4508434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249822' timestamp='2007-04-29T21:41:34+01:00' visible='true' lat='50.9200918' lon='-1.444622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600494' timestamp='2006-12-16T10:13:58+00:00' user='nickw' visible='true' lat='50.9222962' lon='-1.4367157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507141' timestamp='2007-06-17T22:07:48+01:00' visible='true' lat='50.9773655' lon='-1.3602255'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976708' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9359796' lon='-1.4229361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903641' timestamp='2008-01-25T19:48:18+00:00' visible='true' lat='50.9509795' lon='-1.3619328'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305619' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='50.9870214' lon='-1.3917335' />
-  <node id='301581' timestamp='2007-08-14T04:48:38+01:00' user='andrewpmk' visible='true' lat='50.907848' lon='-1.3980946' />
-  <node id='29816782' timestamp='2007-05-31T22:15:45+01:00' visible='true' lat='50.9870782' lon='-1.361147'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325215' timestamp='2006-11-11T17:23:33+00:00' user='Dean Earley' visible='true' lat='50.939173' lon='-1.3570324' />
-  <node id='29931369' timestamp='2007-06-03T22:43:07+01:00' visible='true' lat='50.9954593' lon='-1.3722358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613416' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9915767' lon='-1.4071124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18101129' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9130338' lon='-1.4028422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247789' timestamp='2005-11-14T22:25:08+00:00' user='nickw' visible='true' lat='50.9334326' lon='-1.3957143' />
-  <node id='29998944' timestamp='2007-06-05T23:28:52+01:00' user='nickw' visible='true' lat='50.9874333' lon='-1.434686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505725' timestamp='2007-05-22T19:28:30+01:00' visible='true' lat='50.9886218' lon='-1.3520614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984731' timestamp='2007-01-10T00:12:09+00:00' user='nickw' visible='true' lat='50.943802' lon='-1.3920259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9509195' timestamp='2007-10-26T15:57:49+01:00' user='Nick Dyer' visible='true' lat='50.9162944' lon='-1.2591144'>
-    <tag k='railway' v='station' />
-    <tag k='name' v='Botley' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325274' timestamp='2006-11-11T17:23:34+00:00' user='Dean Earley' visible='true' lat='50.9176345' lon='-1.3170756' />
-  <node id='21599035' timestamp='2006-12-16T01:02:10+00:00' user='Dean Earley' visible='true' lat='50.9328964' lon='-1.3563367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635143' timestamp='2008-02-03T06:08:54+00:00' user='sladen' visible='true' lat='50.9029414' lon='-1.4006721' />
-  <node id='474646' timestamp='2007-04-05T14:22:24+01:00' user='Dean Earley' visible='true' lat='50.9265717' lon='-1.3535603'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='2073651' timestamp='2007-04-05T14:22:24+01:00' user='Dean Earley' visible='true' lat='50.9320304' lon='-1.3944243' />
-  <node id='26114372' timestamp='2007-02-23T21:46:14+00:00' user='nickw' visible='true' lat='50.907248' lon='-1.3925579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903834' timestamp='2007-05-10T01:06:23+01:00' user='LivingWithDragons' visible='true' lat='50.9811672' lon='-1.4448951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348144' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9331724' lon='-1.3641664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157188685' timestamp='2007-12-08T19:58:39+00:00' user='nickw' visible='true' lat='50.9384828' lon='-1.4496711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762784' timestamp='2007-05-29T21:12:06+01:00' visible='true' lat='50.9884419' lon='-1.3558643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132965' timestamp='2007-05-15T20:35:30+01:00' user='nickw' visible='true' lat='50.932058' lon='-1.376017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291045' timestamp='2007-06-13T09:32:57+01:00' visible='true' lat='50.9663469' lon='-1.3847528'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990888' timestamp='2007-06-05T20:41:23+01:00' visible='true' lat='51.0005277' lon='-1.3524597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464292' timestamp='2007-05-22T00:19:21+01:00' user='Dean Earley' visible='true' lat='50.9599554' lon='-1.4057967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254302' timestamp='2007-02-18T20:18:29+00:00' visible='true' lat='50.984198' lon='-1.3500449' />
-  <node id='25305497' timestamp='2007-01-19T20:35:53+00:00' user='Dean Earley' visible='true' lat='50.9251828' lon='-1.3868566'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161359' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9743561' lon='-1.3559102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796773' timestamp='2007-05-30T22:22:04+01:00' user='nickw' visible='true' lat='50.9138088' lon='-1.3535946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925202' timestamp='2007-06-03T20:30:01+01:00' visible='true' lat='50.9791299' lon='-1.3627932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783074' timestamp='2007-02-11T18:07:08+00:00' user='nickw' visible='true' lat='50.9399011' lon='-1.3610463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071381' timestamp='2006-08-11T10:04:24+01:00' user='Dean Earley' visible='true' lat='50.918092' lon='-1.3608792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089143' timestamp='2007-06-13T09:24:39+01:00' visible='true' lat='50.9642373' lon='-1.3779009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254349' timestamp='2005-11-15T15:39:14+00:00' user='nickw' visible='true' lat='50.9497969' lon='-1.4495598' />
-  <node id='469857' timestamp='2007-04-05T14:22:25+01:00' user='Dean Earley' visible='true' lat='50.9103' lon='-1.41947' />
-  <node id='29621240' timestamp='2007-05-26T11:35:30+01:00' visible='true' lat='50.9409267' lon='-1.3745834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='423270' timestamp='2007-04-05T14:22:25+01:00' user='Dean Earley' visible='true' lat='50.944041' lon='-1.3878595' />
-  <node id='14743181' timestamp='2007-02-18T21:30:32+00:00' visible='true' lat='50.9094698' lon='-1.4087361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668365' timestamp='2007-01-04T21:06:45+00:00' user='nickw' visible='true' lat='50.9852388' lon='-1.3869497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600677' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9767772' lon='-1.4056724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13707114' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.860004' lon='-1.336193'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='325016' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9591629' lon='-1.4223407' />
-  <node id='29535529' timestamp='2007-06-10T18:16:26+01:00' visible='true' lat='50.965932' lon='-1.3660196'>
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18868875' timestamp='2006-10-21T14:41:58+01:00' user='nickw' visible='true' lat='50.911483' lon='-1.4221685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856378' timestamp='2007-06-02T08:31:29+01:00' user='nickw' visible='true' lat='50.9495441' lon='-1.3953649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194889' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9413513' lon='-1.4097027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229460' timestamp='2007-06-12T00:08:04+01:00' user='nickw' visible='true' lat='50.9345935' lon='-1.353189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972766' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.905403' lon='-1.4163156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12591275' timestamp='2007-01-28T00:06:57+00:00' visible='true' lat='50.9200749' lon='-1.4106885'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='13071253' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9214917' lon='-1.3597476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467573' timestamp='2007-04-19T17:55:57+01:00' visible='true' lat='50.93611' lon='-1.3788782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931345' timestamp='2007-06-03T22:43:03+01:00' visible='true' lat='50.9939543' lon='-1.3729767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976723' timestamp='2006-11-13T21:39:17+00:00' user='nickw' visible='true' lat='50.9337885' lon='-1.4221017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163096' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.9720279' lon='-1.3864836'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913891' timestamp='2007-06-03T15:59:39+01:00' visible='true' lat='50.9846327' lon='-1.35782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903388' timestamp='2007-05-09T23:24:29+01:00' visible='true' lat='50.9475875' lon='-1.3655335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997514' timestamp='2007-06-05T22:43:53+01:00' user='nickw' visible='true' lat='51.0115135' lon='-1.3632252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021772' timestamp='2007-04-03T00:52:45+01:00' user='Ben' visible='true' lat='50.9462307' lon='-1.4004814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28343219' timestamp='2007-04-30T22:24:06+01:00' user='nickw' visible='true' lat='50.9126953' lon='-1.4055964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648593' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9539966' lon='-1.3586369' />
-  <node id='254649' timestamp='2007-12-10T19:11:41+00:00' user='sladen' visible='true' lat='50.9137269' lon='-1.3904227' />
-  <node id='14744289' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9072351' lon='-1.4113457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661174' timestamp='2007-04-05T14:22:25+01:00' user='Dean Earley' visible='true' lat='50.910695' lon='-1.3514811' />
-  <node id='25482180' timestamp='2007-01-28T00:56:06+00:00' visible='true' lat='50.9216122' lon='-1.387677'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='South Western Arms' />
-  </node>
-  <node id='29001317' timestamp='2007-05-12T09:40:13+01:00' user='nickw' visible='true' lat='50.9213699' lon='-1.3840599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124365' timestamp='2007-06-09T19:43:09+01:00' user='nickw' visible='true' lat='50.92403' lon='-1.3506557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928965' timestamp='2007-06-03T21:57:56+01:00' visible='true' lat='50.9762329' lon='-1.3640316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28234914' timestamp='2007-04-29T19:16:43+01:00' user='nickw' visible='true' lat='50.9074973' lon='-1.360041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956565' timestamp='2007-06-26T23:44:56+01:00' user='nickw' visible='true' lat='50.9267102' lon='-1.3510173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194343' timestamp='2007-04-29T08:20:23+01:00' visible='true' lat='50.9453646' lon='-1.4369589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431956' timestamp='2007-06-16T16:25:13+01:00' visible='true' lat='50.9849569' lon='-1.3512056'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247806' timestamp='2005-11-14T22:50:55+00:00' user='nickw' visible='true' lat='50.9301066' lon='-1.3906717' />
-  <node id='24668314' timestamp='2007-01-04T21:06:40+00:00' user='nickw' visible='true' lat='50.9853764' lon='-1.3871484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957197' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9207319' lon='-1.4178067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544335' timestamp='2007-04-05T14:22:25+01:00' user='Dean Earley' visible='true' lat='50.937413' lon='-1.372396' />
-  <node id='29632497' timestamp='2007-05-26T19:46:22+01:00' visible='true' lat='50.9590805' lon='-1.3695429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325246' timestamp='2006-11-11T17:23:59+00:00' user='Dean Earley' visible='true' lat='50.9313797' lon='-1.3209367' />
-  <node id='26575722' timestamp='2007-03-25T19:25:24+01:00' user='Dean Earley' visible='true' lat='50.9010206' lon='-1.3944563'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124658' timestamp='2007-06-09T19:48:36+01:00' user='nickw' visible='true' lat='50.9304726' lon='-1.3528708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440010' timestamp='2007-04-18T02:00:21+01:00' visible='true' lat='50.9285706' lon='-1.3820434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254679' timestamp='2005-11-15T15:42:13+00:00' user='nickw' visible='true' lat='50.9696001' lon='-1.3595211' />
-  <node id='206163292' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.969995' lon='-1.3863346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722351' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.95536' lon='-1.3716585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998566' timestamp='2007-06-05T23:13:26+01:00' user='nickw' visible='true' lat='50.9619016' lon='-1.4339112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956746' timestamp='2007-06-26T23:49:26+01:00' user='nickw' visible='true' lat='50.9285103' lon='-1.3500091'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325083' timestamp='2006-11-11T17:23:59+00:00' user='Dean Earley' visible='true' lat='50.929518' lon='-1.5710084' />
-  <node id='28874062' timestamp='2007-10-12T14:11:46+01:00' user='SteveC' visible='true' lat='50.9365286' lon='-1.4407365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398397' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.946237' lon='-1.4303973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392341' timestamp='2007-05-20T17:52:21+01:00' visible='true' lat='50.9617433' lon='-1.3549015'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87799820' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8955766' lon='-1.3889734' />
-  <node id='24949936' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.991088' lon='-1.3847209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243583' timestamp='2007-04-29T20:24:51+01:00' user='Dean Earley' visible='true' lat='50.9371428' lon='-1.411127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896412' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9692752' lon='-1.3887724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089144' timestamp='2007-06-08T18:12:11+01:00' visible='true' lat='50.9636263' lon='-1.376403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051792' timestamp='2007-10-26T17:11:21+01:00' user='Nick Dyer' visible='true' lat='50.9946227' lon='-1.4711892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26004508' timestamp='2007-12-07T20:58:36+00:00' user='Steve Jeapes' visible='true' lat='50.9151808' lon='-1.3975503'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Bevois Castle' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='31487481' timestamp='2007-07-09T12:19:39+01:00' visible='true' lat='50.9137831' lon='-1.3873444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324992' timestamp='2006-11-11T17:24:03+00:00' user='Dean Earley' visible='true' lat='50.9598667' lon='-1.4256796' />
-  <node id='675868' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true' lat='50.9264021' lon='-1.3687868' />
-  <node id='25783111' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9485883' lon='-1.3502785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339171' timestamp='2007-05-02T00:35:39+01:00' visible='true' lat='50.9689927' lon='-1.3627658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964164' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9205479' lon='-1.3769196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254285' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9730016' lon='-1.3404864' />
-  <node id='254602' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.916604' lon='-1.4025179' />
-  <node id='26575739' timestamp='2007-10-26T16:05:45+01:00' user='Nick Dyer' visible='true' lat='50.9016259' lon='-1.3948542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117339' timestamp='2007-10-29T08:09:30+00:00' user='nickw' visible='true' lat='50.9311024' lon='-1.4451761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009220' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.9297774' lon='-1.3530966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467475' timestamp='2007-04-19T17:50:42+01:00' visible='true' lat='50.9272808' lon='-1.3783707'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976761' timestamp='2007-04-29T20:52:53+01:00' user='Dean Earley' visible='true' lat='50.931774' lon='-1.4213833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632480' timestamp='2007-05-26T19:45:09+01:00' visible='true' lat='50.9604761' lon='-1.3693213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577046' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9011518' lon='-1.4144372' />
-  <node id='30290739' timestamp='2007-06-13T09:23:59+01:00' visible='true' lat='50.9646925' lon='-1.3826888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816598' timestamp='2007-05-31T22:07:50+01:00' visible='true' lat='50.9900057' lon='-1.3561232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830580' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9250099' lon='-1.3596636'>
-    <tag k='name' v='WAKE CT' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30255970' timestamp='2007-06-12T20:14:37+01:00' visible='true' lat='50.9791804' lon='-1.3500126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600477' timestamp='2007-05-22T00:40:27+01:00' user='Dean Earley' visible='true' lat='50.9400102' lon='-1.4285495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008443' timestamp='2007-05-12T15:12:15+01:00' user='nickw' visible='true' lat='50.9294561' lon='-1.3541022'>
-    <tag k='name' v='GATCMB GD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635136' timestamp='2007-04-05T14:22:26+01:00' user='Dean Earley' visible='true' lat='50.9087677' lon='-1.3601261' />
-  <node id='17504824' timestamp='2007-02-13T19:24:17+00:00' user='Dean Earley' visible='true' lat='50.9552941' lon='-1.4031446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252922' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.945405' lon='-1.427245'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150657' timestamp='2008-02-03T06:16:37+00:00' user='sladen' visible='true' lat='50.908224' lon='-1.4078218' />
-  <node id='25471836' timestamp='2007-03-24T16:33:48+00:00' user='Dean Earley' visible='true' lat='50.9381181' lon='-1.3664065'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224269' timestamp='2007-06-11T22:06:23+01:00' visible='true' lat='50.9832602' lon='-1.3546227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949866' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9958147' lon='-1.3727214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640023' timestamp='2007-03-04T18:58:22+00:00' user='Dean Earley' visible='true' lat='50.9133433' lon='-1.3701418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275761' timestamp='2006-11-25T23:58:34+00:00' user='nickw' visible='true' lat='50.916771' lon='-1.4283739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249985' timestamp='2007-04-29T21:42:08+01:00' visible='true' lat='50.9163132' lon='-1.4476561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162634' timestamp='2008-01-04T19:29:41+00:00' user='nickw' visible='true' lat='50.9711522' lon='-1.383146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639993' timestamp='2007-02-04T22:51:23+00:00' user='Dean Earley' visible='true' lat='50.9005501' lon='-1.3748361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021817' timestamp='2007-04-03T00:53:05+01:00' user='Ben' visible='true' lat='50.9369759' lon='-1.3955193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925347' timestamp='2007-06-03T20:36:37+01:00' visible='true' lat='50.9793729' lon='-1.3644832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111561' timestamp='2007-10-29T08:00:08+00:00' user='nickw' visible='true' lat='50.9268137' lon='-1.4387045'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816747' timestamp='2007-05-31T22:13:34+01:00' visible='true' lat='50.9907283' lon='-1.3554214'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700390' timestamp='2007-04-05T14:22:26+01:00' user='Dean Earley' visible='true' lat='50.9243433' lon='-1.3911765' />
-  <node id='18398412' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9813823' lon='-1.4196385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419252' timestamp='2006-12-02T22:59:19+00:00' user='Dean Earley' visible='true' lat='50.9378633' lon='-1.3611604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613492' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.994276' lon='-1.4003233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178428' timestamp='2007-02-04T18:26:17+00:00' user='Dean Earley' visible='true' lat='50.9890983' lon='-1.3503787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134826' timestamp='2007-05-15T20:53:14+01:00' user='nickw' visible='true' lat='50.9447562' lon='-1.3846822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237246' timestamp='2007-04-29T19:42:07+01:00' user='Andy Street' visible='true' lat='50.9081383' lon='-1.3468856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895689' timestamp='2007-04-29T21:35:06+01:00' user='Dean Earley' visible='true' lat='50.9727608' lon='-1.4313159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245145603' timestamp='2008-02-03T05:57:24+00:00' user='sladen' visible='true' lat='50.9140471' lon='-1.4019338' />
-  <node id='30290728' timestamp='2007-10-29T15:43:34+00:00' user='Dean Earley' visible='true' lat='50.9662553' lon='-1.3847014'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668060' timestamp='2007-01-04T21:05:31+00:00' user='nickw' visible='true' lat='50.9849489' lon='-1.3924054'>
-    <tag k='name' v='FOYLE RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561520' timestamp='2007-01-25T22:42:44+00:00' user='Dean Earley' visible='true' lat='50.9253052' lon='-1.429975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581831' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9132321' lon='-1.4501342' />
-  <node id='29796864' timestamp='2007-05-30T22:26:19+01:00' user='nickw' visible='true' lat='50.9161009' lon='-1.3604884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924199' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.9447394' lon='-1.3720104'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706649' timestamp='2007-04-05T14:22:27+01:00' user='Dean Earley' visible='true' lat='50.9134267' lon='-1.3725344' />
-  <node id='2417451' timestamp='2006-08-08T23:26:34+01:00' user='Dean Earley' visible='true' lat='50.947246' lon='-1.3666395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889407' timestamp='2007-09-23T16:33:09+01:00' user='mike l' visible='true' lat='50.9357215' lon='-1.3536881'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908359' timestamp='2006-12-18T23:27:55+00:00' visible='true' lat='50.9269443' lon='-1.3794351' />
-  <node id='25296272' timestamp='2007-01-19T09:52:14+00:00' user='Dean Earley' visible='true' lat='50.9729264' lon='-1.3679384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727692' timestamp='2007-04-29T19:42:20+01:00' user='Andy Street' visible='true' lat='50.9063764' lon='-1.3501786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026777' timestamp='2007-05-13T10:10:55+01:00' user='nickw' visible='true' lat='50.9212971' lon='-1.4091186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50797897' timestamp='2007-09-13T21:06:04+01:00' user='mike l' visible='true' lat='50.9746467' lon='-1.4504507'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816437' timestamp='2007-05-31T22:00:54+01:00' visible='true' lat='50.991088' lon='-1.3551555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949966' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9893873' lon='-1.3854361'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160417538' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9107881' lon='-1.4308038' />
-  <node id='4931656' timestamp='2007-04-05T14:22:27+01:00' user='Dean Earley' visible='true' lat='50.9203465' lon='-1.3895403' />
-  <node id='153329582' timestamp='2007-12-06T20:42:58+00:00' user='Dean Earley' visible='true' lat='50.9974601' lon='-1.3564628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419427' timestamp='2006-12-02T23:18:50+00:00' user='Dean Earley' visible='true' lat='50.9407569' lon='-1.3650287'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009190' timestamp='2007-05-12T15:33:37+01:00' user='nickw' visible='true' lat='50.9300842' lon='-1.3532357'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684888' timestamp='2007-10-31T12:25:04+00:00' user='Dean Earley' visible='true' lat='50.9632266' lon='-1.4220282' />
-  <node id='12889422' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9423295' lon='-1.3725449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971177' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9059726' lon='-1.3988885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549349' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.9675111' lon='-1.3694773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945341' timestamp='2007-03-31T20:34:29+01:00' user='nickw' visible='true' lat='50.9194727' lon='-1.34969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001620' timestamp='2007-05-12T09:51:46+01:00' user='nickw' visible='true' lat='50.9396563' lon='-1.3629276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29913874' timestamp='2007-06-03T15:56:39+01:00' visible='true' lat='50.9855908' lon='-1.3586267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815650' timestamp='2007-05-31T21:47:59+01:00' visible='true' lat='50.9914723' lon='-1.3544739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931384' timestamp='2007-06-03T22:43:09+01:00' visible='true' lat='50.9939659' lon='-1.3736874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956727' timestamp='2007-06-26T23:49:23+01:00' user='nickw' visible='true' lat='50.9271329' lon='-1.3504263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324977' timestamp='2006-09-02T12:59:38+01:00' user='Dean Earley' visible='true' lat='50.9599924' lon='-1.4074242' />
-  <node id='29815651' timestamp='2007-05-31T21:48:00+01:00' visible='true' lat='50.9914096' lon='-1.3541664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071364' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9177378' lon='-1.371016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071329' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9207586' lon='-1.3614669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675851' timestamp='2007-04-05T14:22:27+01:00' user='Dean Earley' visible='true' lat='50.9300642' lon='-1.3582408' />
-  <node id='24984775' timestamp='2007-01-10T00:14:44+00:00' user='nickw' visible='true' lat='50.9419932' lon='-1.3910723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290777' timestamp='2007-10-29T15:43:32+00:00' user='Dean Earley' visible='true' lat='50.9666241' lon='-1.3854208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890083' timestamp='2006-10-27T00:48:04+01:00' user='Dean Earley' visible='true' lat='50.9197199' lon='-1.388498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721060' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9707951' lon='-1.3604893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135256' timestamp='2007-05-15T20:56:01+01:00' user='nickw' visible='true' lat='50.9436922' lon='-1.3841458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705624' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8964084' lon='-1.4076288' />
-  <node id='20957188' timestamp='2006-11-10T21:58:51+00:00' user='nickw' visible='true' lat='50.9186392' lon='-1.4197843'>
-    <tag k='name' v='NORFQLK R' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25938549' timestamp='2007-02-18T21:25:23+00:00' visible='true' lat='50.914217' lon='-1.3983604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194847' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9450021' lon='-1.4100552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254939' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.9494142' lon='-1.4134445' />
-  <node id='28194508' timestamp='2007-04-29T08:32:03+01:00' user='Dean Earley' visible='true' lat='50.9476452' lon='-1.4132264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14582446' timestamp='2006-10-06T23:46:22+01:00' user='Dean Earley' visible='true' lat='50.954198' lon='-1.3735817'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25783096' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9429806' lon='-1.3552849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420713' timestamp='2006-12-02T23:56:34+00:00' user='Dean Earley' visible='true' lat='50.9284658' lon='-1.3934596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107355' timestamp='2006-10-27T22:49:25+01:00' user='Dean Earley' visible='true' lat='50.9334571' lon='-1.3495786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249891' timestamp='2007-04-29T21:41:44+01:00' visible='true' lat='50.9136787' lon='-1.4430934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689077' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9426927' lon='-1.3901703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194421' timestamp='2007-04-29T08:20:31+01:00' visible='true' lat='50.9474865' lon='-1.4365468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431967' timestamp='2007-06-16T16:26:00+01:00' visible='true' lat='50.9795463' lon='-1.3559408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998575' timestamp='2007-06-05T23:13:54+01:00' user='nickw' visible='true' lat='50.9610508' lon='-1.4463081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636726' timestamp='2007-04-29T02:33:46+01:00' user='Dean Earley' visible='true' lat='50.9491009' lon='-1.4089693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596757' timestamp='2006-11-13T00:43:25+00:00' user='Dean Earley' visible='true' lat='50.9047742' lon='-1.4090011'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17723038' timestamp='2006-10-06T23:52:00+01:00' user='Dean Earley' visible='true' lat='50.9942008' lon='-1.3580431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122342994' timestamp='2007-11-18T19:15:52+00:00' user='nickw' visible='true' lat='50.9189705' lon='-1.4381485'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935770' timestamp='2007-05-11T00:50:55+01:00' visible='true' lat='50.9394245' lon='-1.4471419'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600524' timestamp='2007-08-08T01:31:05+01:00' visible='true' lat='50.9334111' lon='-1.4449277' />
-  <node id='29928995' timestamp='2007-06-03T21:57:58+01:00' visible='true' lat='50.9761322' lon='-1.36387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194373' timestamp='2007-04-29T08:20:26+01:00' visible='true' lat='50.9444666' lon='-1.4379553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='635146' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9012505' lon='-1.397288' />
-  <node id='29509866' timestamp='2007-05-22T21:20:44+01:00' visible='true' lat='50.9912578' lon='-1.359657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30259408' timestamp='2007-06-12T21:04:23+01:00' visible='true' lat='50.9786114' lon='-1.3591197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976697' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9361298' lon='-1.4221415'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615425' timestamp='2006-12-16T21:52:53+00:00' user='nickw' visible='true' lat='50.9001595' lon='-1.4038969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762101' timestamp='2007-02-18T20:19:26+00:00' visible='true' lat='50.9426623' lon='-1.3486499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600668' timestamp='2006-12-16T11:37:21+00:00' user='David Currie' visible='true' lat='50.9732804' lon='-1.3992421'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909671' timestamp='2007-06-03T14:54:19+01:00' visible='true' lat='50.9688568' lon='-1.3534126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111073' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0077055' lon='-1.394008'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650794' timestamp='2007-04-05T14:22:28+01:00' user='Dean Earley' visible='true' lat='50.9301' lon='-1.40315' />
-  <node id='76476564' timestamp='2007-10-17T15:40:56+01:00' user='Nick Dyer' visible='true' lat='50.899521' lon='-1.4448726' />
-  <node id='28194874' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9430999' lon='-1.4100731'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945415' timestamp='2007-03-31T20:34:38+01:00' user='nickw' visible='true' lat='50.9011587' lon='-1.3532263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962278' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9569181' lon='-1.3622036' />
-  <node id='90660386' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.9034571' lon='-1.4093649' />
-  <node id='20110857' timestamp='2006-10-27T23:39:26+01:00' user='Dean Earley' visible='true' lat='50.9358227' lon='-1.3646784'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329522' timestamp='2007-04-29T02:33:49+01:00' user='Dean Earley' visible='true' lat='50.952635' lon='-1.4128244' />
-  <node id='25640042' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9144529' lon='-1.3593761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380433' timestamp='2007-05-20T10:19:28+01:00' user='nickw' visible='true' lat='50.9435378' lon='-1.3756741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30411000' timestamp='2007-06-15T23:09:52+01:00' visible='true' lat='50.9745678' lon='-1.3567627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924081' timestamp='2007-01-06T14:28:57+00:00' user='nickw' visible='true' lat='50.9326553' lon='-1.3827732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640008' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9091642' lon='-1.3720422'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949832' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.988612' lon='-1.3781649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342532' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9072918' lon='-1.3686625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904008' timestamp='2007-10-16T11:34:28+01:00' user='Dean Earley' visible='true' lat='50.950528' lon='-1.3644692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331360' timestamp='2007-04-05T14:22:28+01:00' user='Dean Earley' visible='true' lat='50.9457969' lon='-1.4041051' />
-  <node id='29762565' timestamp='2007-05-31T21:23:01+01:00' visible='true' lat='50.9886342' lon='-1.3573324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87238687' timestamp='2007-10-25T21:08:43+01:00' user='Nick Dyer' visible='true' lat='50.9368942' lon='-1.4480383' />
-  <node id='4931231' timestamp='2007-04-05T14:22:31+01:00' user='Dean Earley' visible='true' lat='50.9223792' lon='-1.3922523' />
-  <node id='28243531' timestamp='2007-04-29T20:24:18+01:00' user='Dean Earley' visible='true' lat='50.9392812' lon='-1.4079269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29588102' timestamp='2007-05-25T19:01:24+01:00' visible='true' lat='50.9675058' lon='-1.3544239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677851' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.8968829' lon='-1.4473223' />
-  <node id='29632136' timestamp='2007-05-26T19:19:52+01:00' visible='true' lat='50.9569609' lon='-1.3668772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549383' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9643938' lon='-1.3753144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348309' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9251335' lon='-1.3571932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125572904' timestamp='2007-11-20T11:51:58+00:00' user='Nick Dyer' visible='true' lat='50.9606921' lon='-1.4233956' />
-  <node id='254542' timestamp='2006-12-18T23:27:57+00:00' visible='true' lat='50.9343763' lon='-1.3751638' />
-  <node id='91109270' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true' lat='50.934411' lon='-1.4228955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339154' timestamp='2007-04-30T20:39:31+01:00' visible='true' lat='50.968145' lon='-1.3615987'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071355' timestamp='2007-05-05T09:05:25+01:00' user='nickw' visible='true' lat='50.9186532' lon='-1.3654712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17979923' timestamp='2006-10-09T23:21:06+01:00' user='nickw' visible='true' lat='50.9173331' lon='-1.3961186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632439' timestamp='2007-05-26T19:27:00+01:00' visible='true' lat='50.9599757' lon='-1.3627879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418263' timestamp='2007-05-02T00:31:37+01:00' visible='true' lat='50.9674024' lon='-1.3628859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677143' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8994543' lon='-1.4435286' />
-  <node id='20973099' timestamp='2006-11-13T00:42:42+00:00' user='Dean Earley' visible='true' lat='50.9047375' lon='-1.4087097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319617' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.9182191' lon='-1.39889' />
-  <node id='661159' timestamp='2007-04-05T14:22:31+01:00' user='Dean Earley' visible='true' lat='50.9033692' lon='-1.3596894' />
-  <node id='29815556' timestamp='2007-05-31T21:42:55+01:00' visible='true' lat='50.9891752' lon='-1.3582855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388872' timestamp='2007-04-05T14:22:31+01:00' user='Dean Earley' visible='true' lat='50.9349' lon='-1.39915' />
-  <node id='24668348' timestamp='2007-01-04T21:06:43+00:00' user='nickw' visible='true' lat='50.988034' lon='-1.4061112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341734' timestamp='2007-04-30T21:48:53+01:00' user='nickw' visible='true' lat='50.9145943' lon='-1.3476727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325053' timestamp='2007-12-10T20:18:39+00:00' user='sladen' visible='true' lat='50.944914' lon='-1.4829997' />
-  <node id='28347575' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9238812' lon='-1.3520576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278543' timestamp='2007-08-14T04:48:01+01:00' user='andrewpmk' visible='true' lat='50.9076899' lon='-1.3971844'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471866' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9379626' lon='-1.3676258'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632187' timestamp='2007-05-26T19:20:40+01:00' visible='true' lat='50.9559959' lon='-1.3691455'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348734' timestamp='2006-10-16T21:59:56+01:00' user='nickw' visible='true' lat='50.997313' lon='-1.4504989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141440' timestamp='2007-09-05T17:46:23+01:00' user='mike l' visible='true' lat='50.9366334' lon='-1.3962445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282119' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9772328' lon='-1.4083939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706405' timestamp='2007-04-05T14:22:31+01:00' user='Dean Earley' visible='true' lat='50.9213253' lon='-1.3796093' />
-  <node id='28173901' timestamp='2007-04-29T01:03:02+01:00' visible='true' lat='50.9422393' lon='-1.432553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675885' timestamp='2007-04-05T14:22:32+01:00' user='Dean Earley' visible='true' lat='50.9268613' lon='-1.3754372' />
-  <node id='24924333' timestamp='2007-01-06T14:47:58+00:00' user='nickw' visible='true' lat='50.9768262' lon='-1.3950906'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668095' timestamp='2007-01-04T21:05:34+00:00' user='nickw' visible='true' lat='50.9863996' lon='-1.3909894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398450' timestamp='2007-01-28T00:07:21+00:00' visible='true' lat='50.9322506' lon='-1.4024603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997539' timestamp='2007-06-05T22:43:58+01:00' user='nickw' visible='true' lat='51.0008628' lon='-1.3513846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964738' timestamp='2007-04-19T23:33:27+01:00' visible='true' lat='50.9340075' lon='-1.3814846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325068' timestamp='2006-11-11T17:24:07+00:00' user='Dean Earley' visible='true' lat='50.944126' lon='-1.5414318' />
-  <node id='29998365' timestamp='2007-06-05T23:05:27+01:00' user='nickw' visible='true' lat='50.9737998' lon='-1.4282094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773069' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9171845' lon='-1.45639' />
-  <node id='28582924' timestamp='2007-05-02T23:57:42+01:00' visible='true' lat='50.9418989' lon='-1.4288055'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91238657' timestamp='2007-10-29T10:34:25+00:00' user='DrMark' visible='true' lat='50.9775884' lon='-1.4372486'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154770519' timestamp='2007-12-07T13:51:23+00:00' user='Nick Dyer' visible='true' lat='50.961034' lon='-1.4274697' />
-  <node id='13704644' timestamp='2006-08-26T00:18:29+01:00' user='dmgroom' visible='true' lat='50.8729729' lon='-1.3990961' />
-  <node id='21561814' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9224907' lon='-1.4428614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096945' timestamp='2007-06-13T09:24:44+01:00' visible='true' lat='50.964477' lon='-1.3797197'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345078' timestamp='2007-04-30T23:45:39+01:00' user='nickw' visible='true' lat='50.9292076' lon='-1.3577694'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Ark' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346885' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9075384' lon='-1.3762197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282100' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9754228' lon='-1.4044797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583032' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.9387298' lon='-1.4341904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816571' timestamp='2007-05-31T22:04:30+01:00' visible='true' lat='50.9910988' lon='-1.3544333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740475' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.98662' lon='-1.3509432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125580531' timestamp='2007-11-20T11:56:43+00:00' user='Nick Dyer' visible='true' lat='50.9623301' lon='-1.4250693' />
-  <node id='29026792' timestamp='2007-05-13T10:10:57+01:00' user='nickw' visible='true' lat='50.9178342' lon='-1.408761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48967865' timestamp='2007-09-11T00:17:29+01:00' visible='true' lat='50.9047132' lon='-1.4152436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28584194' timestamp='2007-05-03T00:07:23+01:00' visible='true' lat='50.9412839' lon='-1.4350884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816572' timestamp='2007-05-31T22:04:30+01:00' visible='true' lat='50.991128' lon='-1.3545581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706495' timestamp='2007-04-05T14:22:32+01:00' user='Dean Earley' visible='true' lat='50.9245945' lon='-1.3776077' />
-  <node id='169423526' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9308583' lon='-1.4440242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160239961' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true' lat='50.9075249' lon='-1.4137686' />
-  <node id='21141488' timestamp='2006-11-21T23:19:59+00:00' user='nickw' visible='true' lat='50.9341701' lon='-1.4366883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507782' timestamp='2007-05-22T00:19:54+01:00' user='Dean Earley' visible='true' lat='50.9486223' lon='-1.3990366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704335' timestamp='2007-05-28T10:32:58+01:00' visible='true' lat='50.9836073' lon='-1.3600425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724278' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9206188' lon='-1.4127297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161251' timestamp='2007-06-10T18:18:29+01:00' visible='true' lat='50.9635303' lon='-1.3636772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817901' timestamp='2007-05-31T22:22:41+01:00' visible='true' lat='50.9875299' lon='-1.3643792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339184' timestamp='2007-05-01T18:33:44+01:00' visible='true' lat='50.9681761' lon='-1.3621607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600468' timestamp='2007-04-03T00:51:29+01:00' user='Dean Earley' visible='true' lat='50.9220765' lon='-1.4464174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141411' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9273872' lon='-1.4269025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222231' timestamp='2007-04-20T23:53:15+01:00' user='Dean Earley' visible='true' lat='50.9068552' lon='-1.407084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929862' timestamp='2007-06-03T22:13:29+01:00' visible='true' lat='50.9777406' lon='-1.3687976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134114' timestamp='2007-05-15T20:47:31+01:00' user='nickw' visible='true' lat='50.944723' lon='-1.3840836'>
-    <tag k='name' v='BRIGH CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952639' timestamp='2007-02-11T00:33:17+00:00' visible='true' lat='50.9330623' lon='-1.3787975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744413' timestamp='2007-04-03T00:54:08+01:00' user='Ben' visible='true' lat='50.9402535' lon='-1.3786342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708011' timestamp='2007-05-28T12:03:58+01:00' visible='true' lat='50.9866053' lon='-1.3616931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305621' timestamp='2005-12-11T11:52:19+00:00' user='nickw' visible='true' lat='50.9862828' lon='-1.390779' />
-  <node id='30089808' timestamp='2007-10-16T11:34:23+01:00' user='Dean Earley' visible='true' lat='50.9672892' lon='-1.3720902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141428' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9237619' lon='-1.4231278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563290' timestamp='2007-04-23T22:47:35+01:00' visible='true' lat='50.9302665' lon='-1.3973529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392340' timestamp='2007-05-20T17:52:21+01:00' visible='true' lat='50.9619121' lon='-1.3560527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706435' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9249372' lon='-1.3792775'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='21507790' timestamp='2007-05-22T00:19:55+01:00' user='Dean Earley' visible='true' lat='50.9489366' lon='-1.4022841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613466' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9767831' lon='-1.400085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440798' timestamp='2008-02-03T06:23:42+00:00' user='sladen' visible='true' lat='50.9078073' lon='-1.3975136'>
-    <tag k='note' v='Here be Six Dials. This junction is absolutely hideous to map, avoid at all costs!!!' />
-    <tag k='name' v='Six dials junction' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632485' timestamp='2007-05-26T19:45:34+01:00' visible='true' lat='50.9599851' lon='-1.3693377'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180237' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9620317' lon='-1.4250237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613473' timestamp='2006-12-16T17:46:58+00:00' user='David Currie' visible='true' lat='50.9727201' lon='-1.3952909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624972' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.9077841' lon='-1.3695848'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577107' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9630274' lon='-1.4247174' />
-  <node id='206163097' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true' lat='50.972103' lon='-1.3876657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14744296' timestamp='2006-09-03T00:58:07+01:00' user='Dean Earley' visible='true' lat='50.9072393' lon='-1.4150862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998066' timestamp='2007-06-05T23:00:21+01:00' user='nickw' visible='true' lat='50.9873458' lon='-1.4083427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830623' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.9286163' lon='-1.3597947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976787' timestamp='2006-11-13T21:50:48+00:00' user='nickw' visible='true' lat='50.9281916' lon='-1.4212673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431955' timestamp='2007-06-16T16:25:13+01:00' visible='true' lat='50.9718476' lon='-1.3516222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380440' timestamp='2007-05-20T10:19:29+01:00' user='nickw' visible='true' lat='50.9425262' lon='-1.3765834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932528' timestamp='2007-05-10T21:07:03+01:00' user='Dean Earley' visible='true' lat='50.9629515' lon='-1.4577935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160417540' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9103173' lon='-1.4301773' />
-  <node id='21689163' timestamp='2007-02-18T20:19:00+00:00' visible='true' lat='50.9395538' lon='-1.372325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632442' timestamp='2007-05-26T19:27:03+01:00' visible='true' lat='50.9599119' lon='-1.3630631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29874155' timestamp='2007-06-02T19:43:17+01:00' visible='true' lat='50.9573449' lon='-1.3573579'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25305488' timestamp='2007-01-28T00:07:22+00:00' visible='true' lat='50.9241641' lon='-1.3872693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419690' timestamp='2006-07-24T21:03:45+01:00' user='nickw' visible='true' lat='50.9150995' lon='-1.4313394' />
-  <node id='160242648' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9123199' lon='-1.4399126' />
-  <node id='28257907' timestamp='2007-04-29T22:56:49+01:00' user='Andy Street' visible='true' lat='50.9023734' lon='-1.3545212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575732' timestamp='2007-03-25T19:25:11+01:00' user='Dean Earley' visible='true' lat='50.9005971' lon='-1.3938524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282142' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9755542' lon='-1.4086661'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31487486' timestamp='2007-07-09T12:19:40+01:00' visible='true' lat='50.9176641' lon='-1.3904776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613488' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9921305' lon='-1.3992679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976772' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9297318' lon='-1.4193601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700534' timestamp='2007-04-05T14:22:32+01:00' user='Dean Earley' visible='true' lat='50.9309761' lon='-1.3652468' />
-  <node id='29512139' timestamp='2007-05-28T11:38:43+01:00' visible='true' lat='50.9757441' lon='-1.3531102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28414266' timestamp='2007-05-01T23:49:40+01:00' user='nickw' visible='true' lat='50.9409716' lon='-1.3751932'>
-    <tag k='name' v='HVNSTN WY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001313' timestamp='2007-05-12T09:40:12+01:00' user='nickw' visible='true' lat='50.9425931' lon='-1.3711867'>
-    <tag k='name' v='WALNUT AVE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675881' timestamp='2007-04-05T14:22:33+01:00' user='Dean Earley' visible='true' lat='50.9328917' lon='-1.370607' />
-  <node id='20133166' timestamp='2006-10-28T01:55:45+01:00' user='Dean Earley' visible='true' lat='50.9284555' lon='-1.3517268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='307482' timestamp='2005-12-12T00:24:15+00:00' user='nickw' visible='true' lat='50.926609' lon='-1.3987184' />
-  <node id='28830584' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9230625' lon='-1.3564273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290742' timestamp='2007-06-13T09:23:59+01:00' visible='true' lat='50.9650347' lon='-1.3811244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28346978' timestamp='2007-04-30T23:26:38+01:00' user='nickw' visible='true' lat='50.9000374' lon='-1.3630539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613451' timestamp='2006-12-16T17:46:56+00:00' user='David Currie' visible='true' lat='50.9748741' lon='-1.402994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21157479' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9070594' lon='-1.3967398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624985' timestamp='2006-12-17T19:47:27+00:00' user='Dean Earley' visible='true' lat='50.8985671' lon='-1.3658845'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348720' timestamp='2006-10-16T21:59:54+01:00' user='nickw' visible='true' lat='50.9859984' lon='-1.4310793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903974' timestamp='2007-05-10T01:06:59+01:00' user='LivingWithDragons' visible='true' lat='50.9809399' lon='-1.4450261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90665705' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9003339' lon='-1.4141199' />
-  <node id='29816734' timestamp='2007-05-31T22:13:30+01:00' visible='true' lat='50.9906022' lon='-1.3563896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639906' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9036159' lon='-1.3813559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726179' timestamp='2007-08-14T04:48:39+01:00' user='andrewpmk' visible='true' lat='50.9081111' lon='-1.3980983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621205' timestamp='2007-06-18T21:09:40+01:00' visible='true' lat='50.970491' lon='-1.3529406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964104' timestamp='2007-11-11T18:09:41+00:00' user='Dean Earley' visible='true' lat='50.9180472' lon='-1.3761868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668168' timestamp='2007-01-04T21:05:54+00:00' user='nickw' visible='true' lat='50.988134' lon='-1.4001909'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026780' timestamp='2007-05-13T10:10:56+01:00' user='nickw' visible='true' lat='50.9179219' lon='-1.4068339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183640' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9023072' lon='-1.3813847' />
-  <node id='254670' timestamp='2007-01-19T20:35:56+00:00' user='Dean Earley' visible='true' lat='50.9252421' lon='-1.3842523' />
-  <node id='90588901' timestamp='2007-10-28T20:31:45+00:00' user='Nick Dyer' visible='true' lat='50.9040423' lon='-1.4253377' />
-  <node id='388933' timestamp='2007-04-05T14:22:33+01:00' user='Dean Earley' visible='true' lat='50.9429' lon='-1.39662' />
-  <node id='14601351' timestamp='2006-09-01T00:16:13+01:00' user='nickw' visible='true' lat='50.9163523' lon='-1.4968872'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='25296382' timestamp='2007-01-19T09:58:45+00:00' user='Dean Earley' visible='true' lat='50.98168' lon='-1.3499846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925338' timestamp='2007-06-03T20:36:29+01:00' visible='true' lat='50.9804457' lon='-1.3632923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984791' timestamp='2007-01-10T00:15:08+00:00' user='nickw' visible='true' lat='50.9423437' lon='-1.3845759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583015' timestamp='2007-05-02T23:57:54+01:00' visible='true' lat='50.9387913' lon='-1.4326343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298247' timestamp='2007-01-06T14:30:54+00:00' user='Dean Earley' visible='true' lat='50.995311' lon='-1.3578538' />
-  <node id='20954599' timestamp='2007-02-18T20:19:16+00:00' visible='true' lat='50.9395826' lon='-1.4019018'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096943' timestamp='2007-06-13T09:30:25+01:00' visible='true' lat='50.9647548' lon='-1.3796026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730532' timestamp='2007-05-28T19:37:02+01:00' visible='true' lat='50.9671624' lon='-1.3693839'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632183' timestamp='2007-05-26T19:20:33+01:00' visible='true' lat='50.9567353' lon='-1.3689266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26593143' timestamp='2007-03-25T18:42:34+01:00' user='Dean Earley' visible='true' lat='50.9025529' lon='-1.3684922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743151' timestamp='2006-09-03T00:38:39+01:00' user='Dean Earley' visible='true' lat='50.9254187' lon='-1.4340177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331343' timestamp='2007-12-06T22:11:25+00:00' user='Dean Earley' visible='true' lat='51.0069' lon='-1.37439' />
-  <node id='325694' timestamp='2007-04-05T14:22:33+01:00' user='Dean Earley' visible='true' lat='50.9221' lon='-1.40762' />
-  <node id='324982' timestamp='2006-09-02T12:59:39+01:00' user='Dean Earley' visible='true' lat='50.9610195' lon='-1.4026606' />
-  <node id='28194886' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9408406' lon='-1.4101349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091392' timestamp='2006-11-19T11:35:53+00:00' user='nickw' visible='true' lat='50.9908483' lon='-1.446201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980722' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9594036' lon='-1.3427662' />
-  <node id='29929409' timestamp='2007-06-03T22:04:04+01:00' visible='true' lat='50.9774913' lon='-1.358468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636806' timestamp='2006-12-18T21:21:47+00:00' user='nickw' visible='true' lat='50.9513068' lon='-1.4102323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636941' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9178968' lon='-1.4332498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163082' timestamp='2008-01-04T19:32:06+00:00' user='nickw' visible='true' lat='50.9712273' lon='-1.3869207'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331322' timestamp='2006-11-11T21:23:44+00:00' user='Dean Earley' visible='true' lat='51.001' lon='-1.35821' />
-  <node id='254512' timestamp='2007-11-20T11:09:31+00:00' user='Gregory Williams' visible='true' lat='50.9019945' lon='-1.3908559'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='387829' timestamp='2007-04-05T14:22:33+01:00' user='Dean Earley' visible='true' lat='50.9322' lon='-1.38488' />
-  <node id='530520' timestamp='2007-04-05T14:22:33+01:00' user='Dean Earley' visible='true' lat='50.9502' lon='-1.37172' />
-  <node id='29871674' timestamp='2007-06-02T18:57:49+01:00' visible='true' lat='50.9146993' lon='-1.3501102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908459' timestamp='2006-07-18T10:20:53+01:00' user='nickw' visible='true' lat='50.9364443' lon='-1.3665445' />
-  <node id='24668266' timestamp='2007-01-04T21:06:32+00:00' user='nickw' visible='true' lat='50.9873587' lon='-1.411952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028842' timestamp='2006-09-08T23:06:50+01:00' user='Dean Earley' visible='true' lat='50.9272301' lon='-1.3624746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157201959' timestamp='2007-12-08T20:09:10+00:00' user='nickw' visible='true' lat='50.9417768' lon='-1.4445529'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130898' timestamp='2006-10-28T01:45:27+01:00' user='Dean Earley' visible='true' lat='50.9331326' lon='-1.3614387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816432' timestamp='2007-05-31T22:00:53+01:00' visible='true' lat='50.9905149' lon='-1.3549931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711908' timestamp='2007-05-28T14:57:27+01:00' visible='true' lat='50.9850059' lon='-1.3547856'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194860' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.9441138' lon='-1.4079748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141394' timestamp='2006-11-21T23:12:43+00:00' user='nickw' visible='true' lat='50.9240311' lon='-1.4247569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388948' timestamp='2007-04-03T00:54:07+01:00' user='Ben' visible='true' lat='50.9387778' lon='-1.3968496' />
-  <node id='27021720' timestamp='2007-12-10T20:50:55+00:00' user='sladen' visible='true' lat='50.917796' lon='-1.4553257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814005' timestamp='2007-05-31T21:13:51+01:00' visible='true' lat='50.9876059' lon='-1.3553839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324351' timestamp='2005-12-16T00:19:02+00:00' user='nickw' visible='true' lat='50.913713' lon='-1.4042759' />
-  <node id='13706593' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9186292' lon='-1.3850454'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='244310991' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.972311' lon='-1.4384223' />
-  <node id='157238303' timestamp='2007-12-08T20:33:30+00:00' user='nickw' visible='true' lat='50.9474754' lon='-1.4494265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945350' timestamp='2007-03-31T20:34:30+01:00' user='nickw' visible='true' lat='50.9212512' lon='-1.3462729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148876' timestamp='2008-02-03T06:07:54+00:00' user='sladen' visible='true' lat='50.9034231' lon='-1.4012644' />
-  <node id='21689100' timestamp='2006-12-23T10:22:21+00:00' user='nickw' visible='true' lat='50.9411999' lon='-1.381861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708026' timestamp='2007-05-28T12:04:05+01:00' visible='true' lat='50.9826279' lon='-1.3652614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345026' timestamp='2007-04-30T23:00:34+01:00' user='nickw' visible='true' lat='50.9243429' lon='-1.3601278'>
-    <tag k='name' v='BENHMS F C' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924322' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9817294' lon='-1.3844023'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706672' timestamp='2007-04-05T14:22:34+01:00' user='Dean Earley' visible='true' lat='50.9062188' lon='-1.3826875' />
-  <node id='30290727' timestamp='2007-06-13T09:23:57+01:00' visible='true' lat='50.9700701' lon='-1.3821511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348704' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9811928' lon='-1.417595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398405' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9792306' lon='-1.4259503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='430650' timestamp='2007-04-05T14:22:34+01:00' user='Dean Earley' visible='true' lat='50.9096' lon='-1.41119' />
-  <node id='91238656' timestamp='2007-10-29T10:34:25+00:00' user='DrMark' visible='true' lat='50.9774908' lon='-1.4371615'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='123671367' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9148888' lon='-1.4385679' />
-  <node id='17723046' timestamp='2006-10-06T23:52:01+01:00' user='Dean Earley' visible='true' lat='50.9952783' lon='-1.3572118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971180' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9054668' lon='-1.3988389'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962295' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9585292' lon='-1.3687954' />
-  <node id='28342579' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9091333' lon='-1.3612124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930870' timestamp='2007-06-03T22:30:57+01:00' visible='true' lat='50.9997603' lon='-1.353653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160268465' timestamp='2008-01-29T12:06:35+00:00' user='Dean Earley' visible='true' lat='50.966195' lon='-1.3503875' />
-  <node id='18398371' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9590041' lon='-1.4365656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071369' timestamp='2007-01-28T00:06:56+00:00' visible='true' lat='50.9166999' lon='-1.3697215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161106' timestamp='2007-06-10T18:13:40+01:00' visible='true' lat='50.9704142' lon='-1.3560135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194410' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9472159' lon='-1.4379368'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29703874' timestamp='2007-05-28T12:35:50+01:00' visible='true' lat='50.9883909' lon='-1.3528518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702394' timestamp='2006-04-15T16:33:02+01:00' user='Gagravarr' visible='true' lat='51.0044945' lon='-1.3343458' />
-  <node id='21586136' timestamp='2006-12-14T23:57:08+00:00' user='Dean Earley' visible='true' lat='50.9662864' lon='-1.3270356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87980705' timestamp='2008-01-29T12:06:36+00:00' user='Dean Earley' visible='true' lat='50.9620792' lon='-1.3522738' />
-  <node id='29632211' timestamp='2007-05-26T19:21:11+01:00' visible='true' lat='50.9569282' lon='-1.3662733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223934' timestamp='2007-06-11T22:03:11+01:00' visible='true' lat='50.9838364' lon='-1.3519183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243677' timestamp='2007-04-29T20:25:13+01:00' user='Dean Earley' visible='true' lat='50.9390715' lon='-1.4138974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157219714' timestamp='2007-12-08T20:21:42+00:00' user='nickw' visible='true' lat='50.9449579' lon='-1.4448137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071360' timestamp='2006-08-11T02:48:10+01:00' user='Dean Earley' visible='true' lat='50.9178175' lon='-1.3685004'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250048' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.9173551' lon='-1.4493177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447411' timestamp='2007-03-09T20:54:23+00:00' user='nickw' visible='true' lat='50.9075236' lon='-1.3942026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721042' timestamp='2006-10-06T23:27:18+01:00' user='Dean Earley' visible='true' lat='50.9606295' lon='-1.3622846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956716' timestamp='2007-06-26T23:49:21+01:00' user='nickw' visible='true' lat='50.9272581' lon='-1.3482608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890090' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9191855' lon='-1.3926526'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161366' timestamp='2007-06-10T18:25:29+01:00' visible='true' lat='50.9739305' lon='-1.3646715'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998057' timestamp='2007-06-05T23:00:20+01:00' user='nickw' visible='true' lat='50.9840191' lon='-1.4113624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92683065' timestamp='2007-10-31T12:24:57+00:00' user='Dean Earley' visible='true' lat='50.9618466' lon='-1.426467' />
-  <node id='30256626' timestamp='2007-06-12T20:36:25+01:00' visible='true' lat='50.9801426' lon='-1.3562918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229579' timestamp='2007-06-12T00:14:40+01:00' user='nickw' visible='true' lat='50.9341741' lon='-1.3539638'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21420708' timestamp='2006-12-02T23:56:30+00:00' user='Dean Earley' visible='true' lat='50.9326669' lon='-1.4030217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998532' timestamp='2007-06-05T23:13:21+01:00' user='nickw' visible='true' lat='50.9619016' lon='-1.4502814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404161' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9131855' lon='-1.4448286' />
-  <node id='90677140' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true' lat='50.8976625' lon='-1.446464' />
-  <node id='20102972' timestamp='2006-10-27T22:27:54+01:00' user='Dean Earley' visible='true' lat='50.9322672' lon='-1.3621241'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372805' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9293747' lon='-1.4429554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001464' timestamp='2007-05-12T09:49:21+01:00' user='nickw' visible='true' lat='50.9419993' lon='-1.3522658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296014' timestamp='2007-01-19T09:28:06+00:00' user='Dean Earley' visible='true' lat='50.986878' lon='-1.3505433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194875' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9424511' lon='-1.4092964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764485' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true' lat='50.9103111' lon='-1.3993489' />
-  <node id='29464239' timestamp='2007-05-22T00:19:10+01:00' user='Dean Earley' visible='true' lat='50.9376279' lon='-1.4196864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160291204' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9154532' lon='-1.4837807' />
-  <node id='21600438' timestamp='2006-12-16T10:13:54+00:00' user='nickw' visible='true' lat='50.9210438' lon='-1.4545958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232071' timestamp='2006-10-14T13:19:05+01:00' user='nickw' visible='true' lat='50.9112521' lon='-1.405843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924224' timestamp='2007-01-06T14:38:00+00:00' user='nickw' visible='true' lat='50.9599425' lon='-1.3684989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223938' timestamp='2007-06-11T22:03:11+01:00' visible='true' lat='50.9835918' lon='-1.3519183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111052' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9847052' lon='-1.3849444'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301607' timestamp='2007-04-03T00:53:58+01:00' user='Ben' visible='true' lat='50.9370961' lon='-1.3994908' />
-  <node id='13564830' timestamp='2006-10-27T22:27:57+01:00' user='Dean Earley' visible='true' lat='50.9327385' lon='-1.357125'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21507777' timestamp='2006-12-18T21:21:59+00:00' user='nickw' visible='true' lat='50.9436924' lon='-1.3973151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249877' timestamp='2007-11-28T12:24:19+00:00' user='Dean Earley' visible='true' lat='50.9203114' lon='-1.4398779'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28343215' timestamp='2007-04-30T22:24:06+01:00' user='nickw' visible='true' lat='50.9115259' lon='-1.4053962'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026669' timestamp='2007-05-13T10:02:49+01:00' user='nickw' visible='true' lat='50.9271203' lon='-1.3998408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29873131' timestamp='2007-06-02T19:16:05+01:00' visible='true' lat='50.9170178' lon='-1.3477183'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250030' timestamp='2007-04-29T21:42:16+01:00' visible='true' lat='50.9167859' lon='-1.4486259'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997561' timestamp='2007-06-05T22:44:01+01:00' user='nickw' visible='true' lat='50.9947612' lon='-1.3497953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243558' timestamp='2007-04-29T20:24:34+01:00' user='Dean Earley' visible='true' lat='50.9377834' lon='-1.4123757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549392' timestamp='2007-05-24T11:22:53+01:00' visible='true' lat='50.9629712' lon='-1.3762558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743132' timestamp='2007-04-03T00:51:34+01:00' user='Dean Earley' visible='true' lat='50.9210826' lon='-1.4318838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171755' timestamp='2007-05-16T23:48:00+01:00' user='nickw' visible='true' lat='50.9410539' lon='-1.387482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9285000' timestamp='2007-02-18T21:25:30+00:00' visible='true' lat='50.9171055' lon='-1.401274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636776' timestamp='2007-04-29T02:33:36+01:00' user='Dean Earley' visible='true' lat='50.9490377' lon='-1.4058061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660053' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.9040471' lon='-1.4127638' />
-  <node id='388899' timestamp='2007-04-05T14:22:34+01:00' user='Dean Earley' visible='true' lat='50.9433086' lon='-1.3942213' />
-  <node id='206163281' timestamp='2008-01-04T19:34:25+00:00' user='nickw' visible='true' lat='50.970558' lon='-1.3890067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90623214' timestamp='2007-12-07T20:56:36+00:00' user='Steve Jeapes' visible='true' lat='50.9099856' lon='-1.3999106'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </node>
-  <node id='325227' timestamp='2006-11-11T17:24:20+00:00' user='Dean Earley' visible='true' lat='50.9356175' lon='-1.3436262' />
-  <node id='19227213' timestamp='2007-02-18T20:19:13+00:00' visible='true' lat='50.9307848' lon='-1.412965'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122324319' timestamp='2007-11-18T19:05:24+00:00' user='nickw' visible='true' lat='50.914402' lon='-1.4372693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935728' timestamp='2007-05-11T00:47:47+01:00' visible='true' lat='50.9391662' lon='-1.4451737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815551' timestamp='2007-05-31T21:42:54+01:00' visible='true' lat='50.9886399' lon='-1.3579897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816602' timestamp='2007-05-31T22:07:51+01:00' visible='true' lat='50.9900057' lon='-1.3570662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91528335' timestamp='2007-10-29T16:21:46+00:00' user='Nick Dyer' visible='true' lat='50.9093487' lon='-1.4397902' />
-  <node id='28244164' timestamp='2007-04-29T20:36:16+01:00' user='Andy Street' visible='true' lat='50.9041546' lon='-1.3514809'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668111' timestamp='2007-01-04T21:05:42+00:00' user='nickw' visible='true' lat='50.9893095' lon='-1.39884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17979920' timestamp='2006-10-09T23:21:06+01:00' user='nickw' visible='true' lat='50.9174048' lon='-1.396782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931391' timestamp='2007-06-03T22:43:10+01:00' visible='true' lat='50.9945442' lon='-1.3733831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27496132' timestamp='2007-04-20T23:53:12+01:00' user='Dean Earley' visible='true' lat='50.9096641' lon='-1.3897478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689065' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9267076' lon='-1.3992991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160266396' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9768584' lon='-1.3775738' />
-  <node id='20972792' timestamp='2006-11-13T00:07:00+00:00' user='Dean Earley' visible='true' lat='50.9006627' lon='-1.390386'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561572' timestamp='2006-12-13T20:09:36+00:00' user='nickw' visible='true' lat='50.9255088' lon='-1.4313387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814531' timestamp='2007-05-31T21:17:06+01:00' visible='true' lat='50.9880386' lon='-1.3560072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194437' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9472097' lon='-1.4324628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745483' timestamp='2006-09-03T01:40:47+01:00' user='Dean Earley' visible='true' lat='50.9722037' lon='-1.376766'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341759' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9107117' lon='-1.3592854'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161127' timestamp='2007-06-10T18:25:33+01:00' visible='true' lat='50.9736081' lon='-1.3517828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668090' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9852826' lon='-1.4124686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632160' timestamp='2007-05-26T19:20:02+01:00' visible='true' lat='50.9572868' lon='-1.3674741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66582053' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9304919' lon='-1.45174' />
-  <node id='254247' timestamp='2005-11-15T15:38:41+00:00' user='nickw' visible='true' lat='50.9413001' lon='-1.422059' />
-  <node id='30956618' timestamp='2007-06-26T23:45:04+01:00' user='nickw' visible='true' lat='50.9274741' lon='-1.3510273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581801' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9199149' lon='-1.4466323' />
-  <node id='24924292' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9671684' lon='-1.3846407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889434' timestamp='2007-01-19T18:15:25+00:00' user='Dean Earley' visible='true' lat='50.9548673' lon='-1.359641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964121' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.9215563' lon='-1.3739891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504624' timestamp='2007-06-17T21:47:09+01:00' visible='true' lat='50.9812727' lon='-1.3575923'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249942' timestamp='2007-04-29T21:41:52+01:00' visible='true' lat='50.9145578' lon='-1.4453644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254765' timestamp='2007-01-28T00:06:55+00:00' visible='true' lat='50.9169264' lon='-1.3707662' />
-  <node id='28379463' timestamp='2007-05-01T14:43:38+01:00' user='Andy Street' visible='true' lat='50.9066034' lon='-1.3497102'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90663584' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true' lat='50.9065531' lon='-1.4065239' />
-  <node id='10222200' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.906794' lon='-1.4173542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506806' timestamp='2007-06-17T22:03:33+01:00' visible='true' lat='50.9782979' lon='-1.3611274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973102' timestamp='2006-11-13T00:42:42+00:00' user='Dean Earley' visible='true' lat='50.9055191' lon='-1.4094811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963792' timestamp='2007-05-22T00:20:04+01:00' user='Dean Earley' visible='true' lat='50.9321463' lon='-1.4021655'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90591408' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true' lat='50.9162192' lon='-1.455387' />
-  <node id='29815069' timestamp='2007-05-31T21:31:01+01:00' visible='true' lat='50.9884223' lon='-1.3548852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924235' timestamp='2007-02-13T19:46:58+00:00' user='Dean Earley' visible='true' lat='50.9619041' lon='-1.3785985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949837' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9901627' lon='-1.3762577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592378' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9126963' lon='-1.4367961' />
-  <node id='26447394' timestamp='2007-03-24T16:33:49+00:00' user='Dean Earley' visible='true' lat='50.9081831' lon='-1.3895651'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466107' timestamp='2007-05-22T00:38:10+01:00' user='Dean Earley' visible='true' lat='50.9834964' lon='-1.4461726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510067' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.9010684' lon='-1.415372' />
-  <node id='19111058' timestamp='2006-10-22T23:24:06+01:00' user='Ben' visible='true' lat='50.986258' lon='-1.3851778'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632455' timestamp='2007-05-26T19:27:15+01:00' visible='true' lat='50.9604409' lon='-1.3654669'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178436' timestamp='2006-11-22T18:12:46+00:00' user='southglos' visible='true' lat='50.9959475' lon='-1.3560194'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173729' timestamp='2007-09-10T19:07:17+01:00' user='mike l' visible='true' lat='50.9430456' lon='-1.4332865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008392' timestamp='2007-05-12T15:11:57+01:00' user='nickw' visible='true' lat='50.9261179' lon='-1.3501414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021833' timestamp='2007-04-03T00:53:17+01:00' user='Ben' visible='true' lat='50.9493708' lon='-1.3724607'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548677' timestamp='2007-05-24T10:50:47+01:00' visible='true' lat='50.9635896' lon='-1.3635063'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29387399' timestamp='2007-05-20T15:17:21+01:00' visible='true' lat='50.9656441' lon='-1.3630354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249894' timestamp='2007-04-29T21:41:44+01:00' visible='true' lat='50.9137974' lon='-1.4460544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244232' timestamp='2007-04-29T20:36:25+01:00' user='Andy Street' visible='true' lat='50.9026325' lon='-1.3522359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613503' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9831085' lon='-1.3920966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949824' timestamp='2007-01-07T12:38:44+00:00' user='nickw' visible='true' lat='50.9904367' lon='-1.3819758'>
-    <tag k='name' v='TYRREL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721092' timestamp='2006-10-06T23:27:22+01:00' user='Dean Earley' visible='true' lat='50.970031' lon='-1.3502767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000944' timestamp='2007-05-12T09:30:27+01:00' user='nickw' visible='true' lat='50.9199499' lon='-1.4067892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856361' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.9471785' lon='-1.3927723'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596786' timestamp='2007-03-25T19:25:23+01:00' user='Dean Earley' visible='true' lat='50.9024797' lon='-1.3980119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160413821' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true' lat='50.9113834' lon='-1.4286666' />
-  <node id='90677846' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true' lat='50.8988642' lon='-1.4446959' />
-  <node id='325242' timestamp='2006-11-11T17:24:30+00:00' user='Dean Earley' visible='true' lat='50.9330725' lon='-1.3247145' />
-  <node id='29134815' timestamp='2007-05-15T20:53:13+01:00' user='nickw' visible='true' lat='50.9447305' lon='-1.3881152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711607' timestamp='2007-05-28T14:46:33+01:00' visible='true' lat='50.9756291' lon='-1.3652635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706323' timestamp='2007-04-05T14:22:38+01:00' user='Dean Earley' visible='true' lat='50.9159968' lon='-1.3901437' />
-  <node id='19227239' timestamp='2006-10-23T20:52:58+01:00' user='nickw' visible='true' lat='50.9230724' lon='-1.4105285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282078' timestamp='2007-01-17T21:10:06+00:00' user='David Currie' visible='true' lat='50.9758618' lon='-1.405462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956683' timestamp='2007-06-26T23:49:18+01:00' user='nickw' visible='true' lat='50.9294494' lon='-1.3495522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447504' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9085571' lon='-1.3902939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964052' timestamp='2006-12-16T17:47:20+00:00' user='David Currie' visible='true' lat='51.0031058' lon='-1.4372693'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342634' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9131293' lon='-1.364709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240320' timestamp='2007-04-29T20:02:55+01:00' user='Andy Street' visible='true' lat='50.9066234' lon='-1.3556719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957218' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.9171736' lon='-1.4186159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924106' timestamp='2007-01-06T14:28:59+00:00' user='nickw' visible='true' lat='50.9418885' lon='-1.3739921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530535' timestamp='2007-05-23T13:04:51+01:00' visible='true' lat='50.9816208' lon='-1.3545413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='51191465' timestamp='2007-12-08T20:19:16+00:00' user='nickw' visible='true' lat='50.9455119' lon='-1.4438671' />
-  <node id='29708046' timestamp='2007-05-28T14:39:25+01:00' visible='true' lat='50.978226' lon='-1.3634464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141684' timestamp='2007-09-05T18:30:27+01:00' user='mike l' visible='true' lat='50.9351205' lon='-1.3935695'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976704' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9351658' lon='-1.4240487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700431' timestamp='2007-04-18T02:00:40+01:00' visible='true' lat='50.9275835' lon='-1.3860883' />
-  <node id='29549343' timestamp='2007-05-26T20:16:00+01:00' visible='true' lat='50.9613869' lon='-1.3673156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30227007' timestamp='2007-06-11T22:35:16+01:00' visible='true' lat='50.9818139' lon='-1.3541911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359727' timestamp='2007-04-30T20:40:53+01:00' visible='true' lat='50.9679995' lon='-1.35865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745509' timestamp='2007-02-13T19:24:17+00:00' user='Dean Earley' visible='true' lat='50.9531056' lon='-1.4035441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661170' timestamp='2007-04-05T14:22:39+01:00' user='Dean Earley' visible='true' lat='50.9077755' lon='-1.3627519' />
-  <node id='24949969' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.988587' lon='-1.3860719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613402' timestamp='2006-12-16T17:46:41+00:00' user='David Currie' visible='true' lat='50.9858021' lon='-1.4303813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613409' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9857074' lon='-1.4236818'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275646' timestamp='2006-11-25T23:47:32+00:00' user='nickw' visible='true' lat='50.9082863' lon='-1.4162131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275714' timestamp='2006-11-25T23:51:19+00:00' user='nickw' visible='true' lat='50.9206001' lon='-1.4239315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157241423' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.946643' lon='-1.4493867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949922' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9911881' lon='-1.3813833'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325101' timestamp='2006-11-11T17:24:31+00:00' user='Dean Earley' visible='true' lat='50.9252526' lon='-1.5793263' />
-  <node id='28173876' timestamp='2007-04-29T01:03:00+01:00' visible='true' lat='50.941901' lon='-1.4308247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157204122' timestamp='2007-12-08T20:11:10+00:00' user='nickw' visible='true' lat='50.9422056' lon='-1.4429983'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249996' timestamp='2007-04-29T21:42:10+01:00' visible='true' lat='50.9155229' lon='-1.4444235'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830670' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9239986' lon='-1.3641505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254529' timestamp='2005-11-15T15:40:57+00:00' user='nickw' visible='true' lat='50.914583' lon='-1.4225607' />
-  <node id='28414277' timestamp='2007-05-01T23:50:00+01:00' user='nickw' visible='true' lat='50.940001' lon='-1.3761805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275868' timestamp='2007-11-18T19:13:33+00:00' user='nickw' visible='true' lat='50.9210279' lon='-1.4338597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613424' timestamp='2006-12-16T17:46:53+00:00' user='David Currie' visible='true' lat='50.9753189' lon='-1.4027929'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254735' timestamp='2006-10-22T23:24:24+01:00' user='Ben' visible='true' lat='50.9837446' lon='-1.38222' />
-  <node id='25639970' timestamp='2007-02-04T22:51:20+00:00' user='Dean Earley' visible='true' lat='50.9005176' lon='-1.3789624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831124' timestamp='2006-11-02T19:56:07+00:00' user='nickw' visible='true' lat='50.9114825' lon='-1.4052228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28801168' timestamp='2007-05-04T02:32:55+01:00' user='Dean Earley' visible='true' lat='50.9446547' lon='-1.4509031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794808' timestamp='2007-05-30T21:41:49+01:00' user='nickw' visible='true' lat='50.9194607' lon='-1.3551244'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329536' timestamp='2007-11-10T22:23:11+00:00' user='Dean Earley' visible='true' lat='50.9754' lon='-1.42436' />
-  <node id='30291056' timestamp='2007-06-13T09:33:01+01:00' visible='true' lat='50.9664516' lon='-1.385399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962308' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9581941' lon='-1.3667526' />
-  <node id='24668335' timestamp='2007-01-04T21:06:42+00:00' user='nickw' visible='true' lat='50.983613' lon='-1.3906648'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18868871' timestamp='2006-10-21T14:41:58+01:00' user='nickw' visible='true' lat='50.9115189' lon='-1.4180443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462163' timestamp='2007-05-21T23:53:39+01:00' user='nickw' visible='true' lat='50.9010912' lon='-1.3976739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124667' timestamp='2007-06-09T19:48:38+01:00' user='nickw' visible='true' lat='50.9311362' lon='-1.3517483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282157' timestamp='2007-01-17T21:10:17+00:00' user='David Currie' visible='true' lat='50.9754795' lon='-1.4092499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290764' timestamp='2007-06-13T09:24:05+01:00' visible='true' lat='50.9681999' lon='-1.3831375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160388163' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9175362' lon='-1.4571968' />
-  <node id='29871659' timestamp='2007-06-02T18:57:43+01:00' visible='true' lat='50.9146638' lon='-1.3516029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127597' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9353836' lon='-1.4369798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689146' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9410685' lon='-1.3763976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026795' timestamp='2007-05-13T10:10:57+01:00' user='nickw' visible='true' lat='50.918022' lon='-1.408463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706736' timestamp='2007-11-23T09:08:21+00:00' user='Dean Earley' visible='true' lat='50.8908532' lon='-1.3853029'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='20957235' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.9123362' lon='-1.4233119'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325645' timestamp='2006-06-01T09:11:45+01:00' user='nickw' visible='true' lat='50.914' lon='-1.4064062' />
-  <node id='29632166' timestamp='2007-05-26T19:20:09+01:00' visible='true' lat='50.9565348' lon='-1.3685684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194388' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9453646' lon='-1.4388286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001343' timestamp='2007-05-12T09:41:45+01:00' user='nickw' visible='true' lat='50.9252146' lon='-1.3820335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956705' timestamp='2007-06-26T23:49:20+01:00' user='nickw' visible='true' lat='50.9295496' lon='-1.3478635'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461221' timestamp='2007-05-21T23:43:13+01:00' user='nickw' visible='true' lat='50.906989' lon='-1.3973213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275633' timestamp='2006-11-26T00:08:06+00:00' user='nickw' visible='true' lat='50.914953' lon='-1.4274568'>
-    <tag k='name' v='FIRGROVE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154773779' timestamp='2007-12-07T13:53:38+00:00' user='Nick Dyer' visible='true' lat='50.9619908' lon='-1.4275126' />
-  <node id='107808752' timestamp='2007-11-11T18:09:38+00:00' user='Dean Earley' visible='true' lat='50.9151215' lon='-1.3588042'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388865' timestamp='2007-04-05T14:22:39+01:00' user='Dean Earley' visible='true' lat='50.9303' lon='-1.40149' />
-  <node id='30089132' timestamp='2007-06-13T09:24:39+01:00' visible='true' lat='50.9646529' lon='-1.3800414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583062' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9386145' lon='-1.4352022'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12889412' timestamp='2007-02-18T20:18:46+00:00' visible='true' lat='50.9374467' lon='-1.3620423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310980' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9655114' lon='-1.4310752' />
-  <node id='87825993' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.9001381' lon='-1.437824' />
-  <node id='90659209' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.904334' lon='-1.406644' />
-  <node id='29461819' timestamp='2007-05-21T23:51:10+01:00' user='nickw' visible='true' lat='50.9000638' lon='-1.3981706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932245' timestamp='2007-09-15T19:03:13+01:00' user='mike l' visible='true' lat='50.9832738' lon='-1.4531849'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504280' timestamp='2007-05-29T22:39:33+01:00' visible='true' lat='50.9982067' lon='-1.3515592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815667' timestamp='2007-05-31T21:48:05+01:00' visible='true' lat='50.9900781' lon='-1.3532492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949854' timestamp='2007-01-07T12:38:46+00:00' user='nickw' visible='true' lat='50.9949394' lon='-1.370099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003035' timestamp='2007-05-22T00:20:04+01:00' user='Dean Earley' visible='true' lat='50.9411855' lon='-1.4038922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27238998' timestamp='2007-04-09T15:39:35+01:00' user='avantman42' visible='true' lat='50.9178259' lon='-1.4421242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091867' timestamp='2007-12-10T21:00:29+00:00' user='sladen' visible='true' lat='50.9120436' lon='-1.4246498'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243575' timestamp='2007-04-29T20:24:44+01:00' user='Dean Earley' visible='true' lat='50.9378633' lon='-1.4113935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512888' timestamp='2007-04-21T21:50:15+01:00' user='Dean Earley' visible='true' lat='50.9604328' lon='-1.3496496'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254953' timestamp='2006-09-04T02:08:08+01:00' user='Dean Earley' visible='true' lat='50.9517103' lon='-1.4212038' />
-  <node id='21677589' timestamp='2006-12-22T14:24:01+00:00' user='nickw' visible='true' lat='50.9049211' lon='-1.4031127'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998935' timestamp='2007-06-05T23:28:52+01:00' user='nickw' visible='true' lat='50.9838315' lon='-1.436474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229568' timestamp='2007-06-12T00:14:38+01:00' user='nickw' visible='true' lat='50.9335418' lon='-1.3544604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956581' timestamp='2007-06-26T23:44:58+01:00' user='nickw' visible='true' lat='50.9279186' lon='-1.3495969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259897' timestamp='2007-04-29T23:09:26+01:00' user='Andy Street' visible='true' lat='50.9021817' lon='-1.347899'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600421' timestamp='2007-06-01T16:39:38+01:00' user='Dean Earley' visible='true' lat='50.9188981' lon='-1.4363806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909672' timestamp='2007-06-03T14:54:22+01:00' visible='true' lat='50.967808' lon='-1.3546753'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613387' timestamp='2007-09-17T23:09:06+01:00' user='mike l' visible='true' lat='50.974908' lon='-1.4054864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402749' timestamp='2007-02-11T00:33:28+00:00' visible='true' lat='50.914625' lon='-1.4098359' />
-  <node id='28179495' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9566677' lon='-1.4076372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636731' timestamp='2007-03-24T16:44:18+00:00' user='Dean Earley' visible='true' lat='50.9433599' lon='-1.3953028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743169' timestamp='2006-09-03T00:38:40+01:00' user='Dean Earley' visible='true' lat='50.9088085' lon='-1.4149639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232084' timestamp='2006-10-14T13:19:06+01:00' user='nickw' visible='true' lat='50.9149277' lon='-1.4119942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110922' timestamp='2006-10-27T23:39:33+01:00' user='Dean Earley' visible='true' lat='50.9358363' lon='-1.3645494'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544322' timestamp='2007-04-05T14:22:40+01:00' user='Dean Earley' visible='true' lat='50.9265138' lon='-1.391781' />
-  <node id='27563292' timestamp='2007-04-23T22:47:35+01:00' visible='true' lat='50.9296034' lon='-1.3974658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710909' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9838153' lon='-1.3573153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021799' timestamp='2007-04-03T00:52:58+01:00' user='Ben' visible='true' lat='50.9377377' lon='-1.3997828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254315' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='50.9985063' lon='-1.3351442' />
-  <node id='20961044' timestamp='2006-11-11T17:12:28+00:00' user='Dean Earley' visible='true' lat='50.9500992' lon='-1.3720601'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135259' timestamp='2007-05-15T20:56:01+01:00' user='nickw' visible='true' lat='50.9436796' lon='-1.3844637'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710198' timestamp='2007-05-28T13:22:24+01:00' visible='true' lat='50.9881629' lon='-1.3694132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928998' timestamp='2007-06-03T21:57:59+01:00' visible='true' lat='50.9757317' lon='-1.3630083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728559' timestamp='2007-03-23T22:53:03+00:00' user='nickw' visible='true' lat='50.9001712' lon='-1.3700895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089117' timestamp='2007-06-08T18:12:07+01:00' visible='true' lat='50.9655839' lon='-1.3799946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730499' timestamp='2007-05-28T19:36:30+01:00' visible='true' lat='50.9713467' lon='-1.3650933'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830640' timestamp='2007-05-05T08:58:26+01:00' user='nickw' visible='true' lat='50.9284963' lon='-1.3608021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160247665' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9499052' lon='-1.363695' />
-  <node id='2742648' timestamp='2006-10-06T23:46:22+01:00' user='Dean Earley' visible='true' lat='50.9446765' lon='-1.390046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9736883' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9071113' lon='-1.4113511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099525' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9509409' lon='-1.3647974' />
-  <node id='28348613' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true' lat='50.9274101' lon='-1.3617499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930927' timestamp='2007-06-05T20:41:29+01:00' visible='true' lat='51.0001803' lon='-1.3528264'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325250' timestamp='2006-11-11T17:24:32+00:00' user='Dean Earley' visible='true' lat='50.9284672' lon='-1.3174164' />
-  <node id='14601370' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9195061' lon='-1.4697388'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29997535' timestamp='2007-06-05T22:43:56+01:00' user='nickw' visible='true' lat='51.0040633' lon='-1.3532918'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548711' timestamp='2007-05-24T10:50:51+01:00' visible='true' lat='50.9666621' lon='-1.3661575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160418873' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9073731' lon='-1.4242635' />
-  <node id='204884736' timestamp='2008-01-03T10:01:56+00:00' user='hairywill' visible='true' lat='50.9295772' lon='-1.3767'>
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Bitterne Park Infant School' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984681' timestamp='2007-01-10T00:10:49+00:00' user='nickw' visible='true' lat='50.9441622' lon='-1.3883425'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249831' timestamp='2007-04-29T21:41:35+01:00' visible='true' lat='50.9180477' lon='-1.44573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87823413' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8956342' lon='-1.4076202' />
-  <node id='319635' timestamp='2005-12-14T22:03:22+00:00' user='nickw' visible='true' lat='50.9214377' lon='-1.3932467' />
-  <node id='325668' timestamp='2007-04-29T20:52:54+01:00' user='Dean Earley' visible='true' lat='50.9378946' lon='-1.4296082' />
-  <node id='254876' timestamp='2007-12-10T19:57:14+00:00' user='sladen' visible='true' lat='50.9134293' lon='-1.4901236' />
-  <node id='13704778' timestamp='2006-08-26T00:06:11+01:00' user='dmgroom' visible='true' lat='50.8892769' lon='-1.4178276' />
-  <node id='27021692' timestamp='2007-04-03T00:50:22+01:00' user='Dean Earley' visible='true' lat='50.9299634' lon='-1.4471452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348152' timestamp='2007-04-30T23:45:34+01:00' user='nickw' visible='true' lat='50.9336142' lon='-1.3689499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183740' timestamp='2007-04-29T02:25:39+01:00' user='Dean Earley' visible='true' lat='50.9502833' lon='-1.4137776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745498' timestamp='2006-09-03T01:40:48+01:00' user='Dean Earley' visible='true' lat='50.9596524' lon='-1.3935773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577080' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9123013' lon='-1.4527091' />
-  <node id='25303006' timestamp='2007-01-19T18:15:19+00:00' user='Dean Earley' visible='true' lat='50.9508586' lon='-1.3648544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360203' timestamp='2006-10-06T23:29:32+01:00' user='Dean Earley' visible='true' lat='50.9610455' lon='-1.3728466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945401' timestamp='2007-04-08T17:43:56+01:00' user='avantman42' visible='true' lat='50.9028417' lon='-1.3450717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141491' timestamp='2006-11-21T23:19:59+00:00' user='nickw' visible='true' lat='50.9285204' lon='-1.4378208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600587' timestamp='2006-12-16T11:37:37+00:00' user='David Currie' visible='true' lat='50.9850396' lon='-1.3990978'>
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422969' timestamp='2007-04-05T14:22:40+01:00' user='Dean Earley' visible='true' lat='50.9234' lon='-1.40582' />
-  <node id='21636791' timestamp='2007-04-29T02:33:45+01:00' user='Dean Earley' visible='true' lat='50.9505921' lon='-1.4104887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='596305' timestamp='2007-11-11T18:09:42+00:00' user='Dean Earley' visible='true' lat='50.9155675' lon='-1.3582881' />
-  <node id='29794371' timestamp='2007-05-30T21:37:18+01:00' user='nickw' visible='true' lat='50.9227138' lon='-1.3618344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949871' timestamp='2007-10-07T23:25:08+01:00' user='alfabet' visible='true' lat='50.9991005' lon='-1.3879664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8084979' timestamp='2006-06-15T15:12:57+01:00' visible='true' lat='50.921039' lon='-1.3862499' />
-  <node id='28236106' timestamp='2007-04-29T19:25:35+01:00' user='Andy Street' visible='true' lat='50.9089407' lon='-1.3541224'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972815' timestamp='2007-03-25T19:25:26+01:00' user='Dean Earley' visible='true' lat='50.9017985' lon='-1.3979662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548694' timestamp='2007-05-24T10:50:49+01:00' visible='true' lat='50.9640292' lon='-1.3677353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582967' timestamp='2007-05-02T23:57:48+01:00' visible='true' lat='50.9398543' lon='-1.4245585'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932223' timestamp='2007-05-10T20:48:47+01:00' user='Dean Earley' visible='true' lat='50.9604819' lon='-1.4522367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30511433' timestamp='2007-06-17T22:30:28+01:00' visible='true' lat='50.9752035' lon='-1.360126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447521' timestamp='2007-03-09T21:07:39+00:00' user='nickw' visible='true' lat='50.9077894' lon='-1.3901155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19892129' timestamp='2007-11-20T11:15:51+00:00' user='Gregory Williams' visible='true' lat='50.9008104' lon='-1.3910941'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='28246350' timestamp='2007-11-20T11:03:10+00:00' user='Gregory Williams' visible='true' lat='50.9320779' lon='-1.4319746'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='24949884' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9917633' lon='-1.3785622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089080' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.9667415' lon='-1.3777657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971218' timestamp='2007-02-18T21:30:24+00:00' visible='true' lat='50.9066689' lon='-1.4151593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141573' timestamp='2007-09-05T17:46:33+01:00' user='mike l' visible='true' lat='50.9344077' lon='-1.3941138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254467' timestamp='2006-12-17T19:47:33+00:00' user='Dean Earley' visible='true' lat='50.9050215' lon='-1.3743069' />
-  <node id='14745442' timestamp='2007-10-31T15:18:29+00:00' user='Dean Earley' visible='true' lat='50.9673711' lon='-1.3506477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10537327' timestamp='2006-10-27T22:49:33+01:00' user='Dean Earley' visible='true' lat='50.927345' lon='-1.3521338'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87241481' timestamp='2007-10-25T21:07:37+01:00' user='Nick Dyer' visible='true' lat='50.9336866' lon='-1.4463303' />
-  <node id='29464258' timestamp='2007-05-22T00:19:14+01:00' user='Dean Earley' visible='true' lat='50.9363061' lon='-1.4082445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021814' timestamp='2007-04-03T00:53:04+01:00' user='Ben' visible='true' lat='50.9340948' lon='-1.4011515'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579399' timestamp='2006-12-14T13:52:48+00:00' user='David Currie' visible='true' lat='50.9770306' lon='-1.4049151'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972781' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true' lat='50.9067074' lon='-1.4187961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29163389' timestamp='2007-05-16T20:05:39+01:00' visible='true' lat='50.9255864' lon='-1.3920596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91113449' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true' lat='50.9274555' lon='-1.4419776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657688' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9079362' lon='-1.3759344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419426' timestamp='2006-12-02T23:18:50+00:00' user='Dean Earley' visible='true' lat='50.9406397' lon='-1.3653078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518780' timestamp='2007-04-05T14:22:41+01:00' user='Dean Earley' visible='true' lat='50.9188008' lon='-1.3935325' />
-  <node id='29491403' timestamp='2007-05-22T12:23:40+01:00' visible='true' lat='50.9197251' lon='-1.3962722'>
-    <tag k='amenity' v='fuel' />
-    <tag k='name' v='Esso' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117417' timestamp='2007-10-29T08:09:32+00:00' user='nickw' visible='true' lat='50.9278092' lon='-1.4427325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141377' timestamp='2007-03-24T16:33:50+00:00' user='Dean Earley' visible='true' lat='50.9263158' lon='-1.4253524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724263' timestamp='2007-02-18T20:19:14+00:00' visible='true' lat='50.9259802' lon='-1.4142897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783081' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9401765' lon='-1.3559604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107856' timestamp='2007-04-27T23:52:57+01:00' visible='true' lat='50.9320901' lon='-1.3965051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486260' timestamp='2007-07-09T11:55:38+01:00' visible='true' lat='50.9102884' lon='-1.38156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956599' timestamp='2007-06-26T23:45:00+01:00' user='nickw' visible='true' lat='50.9286825' lon='-1.3495273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16570753' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9220164' lon='-1.4719682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325265' timestamp='2006-11-11T17:24:32+00:00' user='Dean Earley' visible='true' lat='50.9270915' lon='-1.316702' />
-  <node id='29914416' timestamp='2007-06-03T16:22:50+01:00' visible='true' lat='50.9839154' lon='-1.3621701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124225' timestamp='2007-06-09T19:35:55+01:00' user='nickw' visible='true' lat='50.9240801' lon='-1.3521168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896258' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.9604499' lon='-1.3970714'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87826008' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.9001219' lon='-1.4390771' />
-  <node id='254559' timestamp='2007-01-28T00:07:10+00:00' visible='true' lat='50.9069885' lon='-1.3885278' />
-  <node id='26593137' timestamp='2007-03-17T20:47:44+00:00' user='nickw' visible='true' lat='50.9026021' lon='-1.3645771'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440013' timestamp='2007-04-18T02:00:22+01:00' visible='true' lat='50.9276406' lon='-1.3817984'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814526' timestamp='2007-05-31T21:17:05+01:00' visible='true' lat='50.9879139' lon='-1.3562052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949939' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9950895' lon='-1.3842044'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342617' timestamp='2007-04-30T22:13:40+01:00' user='nickw' visible='true' lat='50.9096219' lon='-1.3681459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728876' timestamp='2007-05-28T19:12:29+01:00' visible='true' lat='50.9721528' lon='-1.357114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999024' timestamp='2007-06-05T23:29:02+01:00' user='nickw' visible='true' lat='50.9959116' lon='-1.4367919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708035' timestamp='2007-05-28T12:04:08+01:00' visible='true' lat='50.9804703' lon='-1.3665042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561525' timestamp='2007-03-24T16:44:18+00:00' user='Dean Earley' visible='true' lat='50.9233045' lon='-1.4393453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924091' timestamp='2007-02-18T20:19:18+00:00' visible='true' lat='50.9400232' lon='-1.3740517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29526776' timestamp='2007-05-23T09:49:13+01:00' visible='true' lat='50.9828556' lon='-1.3504025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325204' timestamp='2006-11-11T17:24:33+00:00' user='Dean Earley' visible='true' lat='50.9434477' lon='-1.3633371' />
-  <node id='14964148' timestamp='2007-02-18T21:30:38+00:00' visible='true' lat='50.9167866' lon='-1.3759167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147921' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.9088843' lon='-1.4036676' />
-  <node id='28874057' timestamp='2007-05-08T14:50:32+01:00' visible='true' lat='50.9371758' lon='-1.4411373'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409610' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9107989' lon='-1.4314132' />
-  <node id='254700' timestamp='2006-12-18T23:27:24+00:00' visible='true' lat='50.9200018' lon='-1.3950758' />
-  <node id='13071267' timestamp='2006-08-11T02:48:01+01:00' user='Dean Earley' visible='true' lat='50.9189013' lon='-1.3606073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071395' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9284126' lon='-1.3605064'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227254' timestamp='2007-04-29T08:58:15+01:00' user='Dean Earley' visible='true' lat='50.941748' lon='-1.4132742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549377' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9635493' lon='-1.3758582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711874' timestamp='2007-06-11T21:42:36+01:00' visible='true' lat='50.9860592' lon='-1.3537862'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33130201' timestamp='2007-07-30T16:06:47+01:00' visible='true' lat='50.9140365' lon='-1.4141009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001703' timestamp='2007-05-12T09:53:02+01:00' user='nickw' visible='true' lat='50.940422' lon='-1.3636395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146238' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9149346' lon='-1.4015133' />
-  <node id='20976810' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9257247' lon='-1.4215653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305219' timestamp='2006-10-06T23:52:03+01:00' user='Dean Earley' visible='true' lat='50.9952376' lon='-1.3569033' />
-  <node id='27467568' timestamp='2007-04-19T17:55:56+01:00' visible='true' lat='50.9347846' lon='-1.3798161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249861' timestamp='2007-04-29T21:41:40+01:00' visible='true' lat='50.9184871' lon='-1.4409542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984730' timestamp='2007-01-10T00:12:09+00:00' user='nickw' visible='true' lat='50.9437144' lon='-1.3917875'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816415' timestamp='2007-05-31T21:58:44+01:00' visible='true' lat='50.9894938' lon='-1.3558824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90664548' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true' lat='50.9083933' lon='-1.4076826' />
-  <node id='169426698' timestamp='2007-12-14T21:37:42+00:00' user='nickw' visible='true' lat='50.9333578' lon='-1.4416973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890068' timestamp='2006-10-27T00:48:03+01:00' user='Dean Earley' visible='true' lat='50.9203189' lon='-1.3933232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342566' timestamp='2007-04-30T22:13:35+01:00' user='nickw' visible='true' lat='50.9074923' lon='-1.3643911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348731' timestamp='2006-10-16T21:59:55+01:00' user='nickw' visible='true' lat='50.9970978' lon='-1.4485623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071433' timestamp='2006-08-11T02:48:16+01:00' user='Dean Earley' visible='true' lat='50.9207272' lon='-1.3541311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675795' timestamp='2007-02-06T01:03:07+00:00' user='Dean Earley' visible='true' lat='50.9111919' lon='-1.444827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577125' timestamp='2007-11-28T09:43:11+00:00' user='Dean Earley' visible='true' lat='50.9650924' lon='-1.4202714' />
-  <node id='29705536' timestamp='2007-05-28T11:19:21+01:00' visible='true' lat='50.9859495' lon='-1.3518478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149859' timestamp='2008-02-03T06:12:31+00:00' user='sladen' visible='true' lat='50.9071091' lon='-1.4017536' />
-  <node id='28243600' timestamp='2007-04-29T20:24:58+01:00' user='Dean Earley' visible='true' lat='50.9351643' lon='-1.4141746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971150' timestamp='2006-11-12T22:56:57+00:00' user='Dean Earley' visible='true' lat='50.9086052' lon='-1.3977877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925629' timestamp='2007-06-03T20:45:00+01:00' visible='true' lat='50.981489' lon='-1.3636794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392357' timestamp='2007-05-20T17:52:55+01:00' visible='true' lat='50.9648671' lon='-1.3558406'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90588899' timestamp='2007-10-28T20:31:45+00:00' user='Nick Dyer' visible='true' lat='50.905547' lon='-1.4312772' />
-  <node id='125570945' timestamp='2007-11-20T11:50:35+00:00' user='Nick Dyer' visible='true' lat='50.9626544' lon='-1.4236703' />
-  <node id='29026810' timestamp='2007-05-13T10:10:58+01:00' user='nickw' visible='true' lat='50.9170201' lon='-1.4088405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162256' timestamp='2008-01-04T19:26:30+00:00' user='nickw' visible='true' lat='50.9738544' lon='-1.3870895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305612' timestamp='2005-12-11T11:52:19+00:00' user='nickw' visible='true' lat='50.9901881' lon='-1.3971734' />
-  <node id='170449' timestamp='2006-11-11T17:24:33+00:00' user='Dean Earley' visible='true' lat='50.9493368' lon='-1.3808298' />
-  <node id='29998097' timestamp='2007-06-05T23:00:25+01:00' user='nickw' visible='true' lat='50.986783' lon='-1.3991642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28246064' timestamp='2007-04-29T20:52:46+01:00' user='Dean Earley' visible='true' lat='50.9369526' lon='-1.4221884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636938' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9165169' lon='-1.4290492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071386' timestamp='2006-08-11T02:48:12+01:00' user='Dean Earley' visible='true' lat='50.926302' lon='-1.359129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252911' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9454695' lon='-1.429081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254413' timestamp='2005-11-15T15:40:05+00:00' user='nickw' visible='true' lat='50.9101958' lon='-1.4049756' />
-  <node id='28935994' timestamp='2007-05-11T00:59:41+01:00' visible='true' lat='50.9408955' lon='-1.444332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904023' timestamp='2007-05-10T01:07:15+01:00' user='LivingWithDragons' visible='true' lat='50.9808778' lon='-1.4450903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13885349' timestamp='2006-11-14T01:57:37+00:00' user='Dean Earley' visible='true' lat='50.9017923' lon='-1.4009225'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418347' timestamp='2007-05-02T00:33:16+01:00' visible='true' lat='50.9668888' lon='-1.3639588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275697' timestamp='2006-11-26T00:16:12+00:00' user='nickw' visible='true' lat='50.9214349' lon='-1.4351511'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984760' timestamp='2007-01-10T00:14:08+00:00' user='nickw' visible='true' lat='50.943101' lon='-1.392155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2380579' timestamp='2006-09-13T00:41:09+01:00' user='Dean Earley' visible='true' lat='50.8967137' lon='-1.3218632' />
-  <node id='160263990' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.964373' lon='-1.3709305' />
-  <node id='29997505' timestamp='2007-06-05T22:43:51+01:00' user='nickw' visible='true' lat='51.0040633' lon='-1.3586161'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194358' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9434394' lon='-1.438066'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021786' timestamp='2007-04-03T00:52:50+01:00' user='Ben' visible='true' lat='50.9564331' lon='-1.3989398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706518' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.922096' lon='-1.377167'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='122337293' timestamp='2007-11-18T19:12:33+00:00' user='nickw' visible='true' lat='50.9183161' lon='-1.4381733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469879' timestamp='2007-04-05T14:22:42+01:00' user='Dean Earley' visible='true' lat='50.9155' lon='-1.4429' />
-  <node id='125570128' timestamp='2007-11-20T11:50:15+00:00' user='Nick Dyer' visible='true' lat='50.9627788' lon='-1.4226489' />
-  <node id='45116811' timestamp='2007-09-07T16:44:32+01:00' user='mike l' visible='true' lat='50.9753105' lon='-1.4481076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348701' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9801886' lon='-1.4113549'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87873451' timestamp='2007-10-26T13:34:49+01:00' user='Nick Dyer' visible='true' lat='50.922788' lon='-1.4171539'>
-    <tag k='amenity' v='school' />
-    <tag k='name' v='King Edward VI' />
-    <tag k='created_by' v='Potlatch 0.4a' />
-  </node>
-  <node id='160409627' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9130665' lon='-1.4432579' />
-  <node id='27467482' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.9304761' lon='-1.3787336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347588' timestamp='2007-04-30T23:36:50+01:00' user='nickw' visible='true' lat='50.9269689' lon='-1.355263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956562' timestamp='2007-06-26T23:44:55+01:00' user='nickw' visible='true' lat='50.9265443' lon='-1.3511713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142617010' timestamp='2007-11-29T22:29:07+00:00' user='nickw' visible='true' lat='50.9137379' lon='-1.4171543'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245150658' timestamp='2008-02-03T06:16:37+00:00' user='sladen' visible='true' lat='50.9083701' lon='-1.4077188' />
-  <node id='26114359' timestamp='2007-12-10T19:19:34+00:00' user='sladen' visible='true' lat='50.9066752' lon='-1.3958815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949909' timestamp='2007-01-07T12:38:50+00:00' user='nickw' visible='true' lat='50.9955646' lon='-1.3809462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506822' timestamp='2007-06-17T22:03:35+01:00' visible='true' lat='50.9786269' lon='-1.3632794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903806' timestamp='2007-10-17T01:09:35+01:00' user='Dean Earley' visible='true' lat='50.9507858' lon='-1.3634037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684885' timestamp='2007-11-20T11:49:42+00:00' user='Nick Dyer' visible='true' lat='50.9630977' lon='-1.4218078' />
-  <node id='305574' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9956598' lon='-1.3959932' />
-  <node id='13796446' timestamp='2006-12-09T09:51:54+00:00' user='nickw' visible='true' lat='50.9318028' lon='-1.4009024'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='The Crown' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='862640' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.91173' lon='-1.4039701' />
-  <node id='25471853' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9394242' lon='-1.3675314'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976768' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9277416' lon='-1.4200353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29926150' timestamp='2007-06-03T20:55:50+01:00' visible='true' lat='50.980134' lon='-1.364201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896259' timestamp='2007-10-16T17:59:43+01:00' user='Dean Earley' visible='true' lat='50.9617613' lon='-1.395885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706642' timestamp='2007-04-05T14:22:42+01:00' user='Dean Earley' visible='true' lat='50.9148125' lon='-1.377125' />
-  <node id='21419430' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9411606' lon='-1.3691516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660544' timestamp='2007-10-28T21:45:54+00:00' user='Nick Dyer' visible='true' lat='50.9019686' lon='-1.4096138' />
-  <node id='24668185' timestamp='2007-01-04T21:05:55+00:00' user='nickw' visible='true' lat='50.9853192' lon='-1.3881401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132711' timestamp='2006-11-11T17:24:39+00:00' user='Dean Earley' visible='true' lat='50.9565488' lon='-1.4517993' />
-  <node id='125570949' timestamp='2007-12-07T13:21:45+00:00' user='Nick Dyer' visible='true' lat='50.9624017' lon='-1.4240279' />
-  <node id='608165' timestamp='2007-04-05T14:22:42+01:00' user='Dean Earley' visible='true' lat='50.8973351' lon='-1.3632547' />
-  <node id='15359698' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9677847' lon='-1.3528016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160409614' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.9109505' lon='-1.4321599' />
-  <node id='28830661' timestamp='2007-05-05T09:03:32+01:00' user='nickw' visible='true' lat='50.9244213' lon='-1.3645428'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704316' timestamp='2007-05-28T10:32:52+01:00' visible='true' lat='50.986217' lon='-1.3583618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='673878' timestamp='2006-12-08T01:02:58+00:00' user='Dean Earley' visible='true' lat='50.9500212' lon='-1.3696477' />
-  <node id='91127580' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9352146' lon='-1.4395476'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700389' timestamp='2007-04-05T14:22:42+01:00' user='Dean Earley' visible='true' lat='50.9246558' lon='-1.391114' />
-  <node id='254379' timestamp='2006-09-03T00:38:52+01:00' user='Dean Earley' visible='true' lat='50.9103585' lon='-1.4054613' />
-  <node id='28179516' timestamp='2007-04-29T01:53:23+01:00' user='Dean Earley' visible='true' lat='50.9543803' lon='-1.402068'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583002' timestamp='2007-05-03T00:08:35+01:00' visible='true' lat='50.9405104' lon='-1.4327081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120341' timestamp='2007-10-29T08:12:53+00:00' user='nickw' visible='true' lat='50.9307581' lon='-1.4466761'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727984' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9184925' lon='-1.4037958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730514' timestamp='2007-05-28T19:36:42+01:00' visible='true' lat='50.9714586' lon='-1.3719009'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296277' timestamp='2007-06-03T22:13:35+01:00' visible='true' lat='50.9763502' lon='-1.3648222'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721078' timestamp='2006-10-06T23:27:21+01:00' user='Dean Earley' visible='true' lat='50.9693226' lon='-1.3517552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595188' timestamp='2007-05-25T21:54:29+01:00' visible='true' lat='50.9675862' lon='-1.3539037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254479' timestamp='2007-04-29T01:53:38+01:00' user='Dean Earley' visible='true' lat='50.9665347' lon='-1.4207585' />
-  <node id='28179529' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9569145' lon='-1.399489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291041' timestamp='2007-06-13T09:32:56+01:00' visible='true' lat='50.9667901' lon='-1.3852021'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721072' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9716016' lon='-1.359174'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563360' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9286039' lon='-1.3993602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704538' timestamp='2007-05-28T10:40:40+01:00' visible='true' lat='50.9786872' lon='-1.3597037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232574' timestamp='2007-04-29T18:59:33+01:00' user='nickw' visible='true' lat='50.916924' lon='-1.3534084'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600664' timestamp='2007-09-17T23:09:10+01:00' user='mike l' visible='true' lat='50.9697862' lon='-1.3930617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932445' timestamp='2007-05-10T21:06:00+01:00' user='Dean Earley' visible='true' lat='50.9634245' lon='-1.4600736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903400' timestamp='2007-05-09T23:24:32+01:00' visible='true' lat='50.9463143' lon='-1.3655734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783112' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.9484381' lon='-1.3500798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639955' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9036322' lon='-1.3764644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275629' timestamp='2006-11-25T23:47:30+00:00' user='nickw' visible='true' lat='50.9205679' lon='-1.4299329'>
-    <tag k='name' v='CHURCH END' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29670532' timestamp='2007-05-27T11:12:20+01:00' visible='true' lat='50.9700615' lon='-1.3638408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661156' timestamp='2007-04-05T14:22:43+01:00' user='Dean Earley' visible='true' lat='50.9108886' lon='-1.3508962' />
-  <node id='254846' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9109992' lon='-1.4314905' />
-  <node id='13071326' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9190285' lon='-1.3629345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132977' timestamp='2007-05-15T20:36:20+01:00' user='nickw' visible='true' lat='50.9323178' lon='-1.3758283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964161' timestamp='2006-09-08T02:12:03+01:00' user='Dean Earley' visible='true' lat='50.9205191' lon='-1.377109'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640046' timestamp='2007-02-04T22:51:28+00:00' user='Dean Earley' visible='true' lat='50.9054191' lon='-1.3745789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780714' timestamp='2007-06-22T21:07:41+01:00' user='Steve Chilton' visible='true' lat='50.9082368' lon='-1.4055935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092028' timestamp='2006-11-19T12:29:33+00:00' user='nickw' visible='true' lat='50.9735866' lon='-1.4392177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962325' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9555449' lon='-1.3633966' />
-  <node id='28583073' timestamp='2007-05-02T23:57:58+01:00' visible='true' lat='50.9379871' lon='-1.4343534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133145' timestamp='2006-10-28T01:55:41+01:00' user='Dean Earley' visible='true' lat='50.927575' lon='-1.3518944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14707286' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.9709103' lon='-1.3502706'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111086' timestamp='2006-12-16T11:08:02+00:00' user='David Currie' visible='true' lat='51.0107807' lon='-1.3931424'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561542' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9220586' lon='-1.4246237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929855' timestamp='2007-06-03T22:13:27+01:00' visible='true' lat='50.9766555' lon='-1.365587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160213505' timestamp='2007-12-10T19:09:23+00:00' user='sladen' visible='true' lat='50.9222872' lon='-1.3876418' />
-  <node id='245149627' timestamp='2008-02-03T06:11:20+00:00' user='sladen' visible='true' lat='50.9060212' lon='-1.4024231' />
-  <node id='29132947' timestamp='2007-05-15T20:34:13+01:00' user='nickw' visible='true' lat='50.9307871' lon='-1.3767322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2773054' timestamp='2007-04-03T00:51:55+01:00' user='Dean Earley' visible='true' lat='50.91871' lon='-1.4507742' />
-  <node id='28874066' timestamp='2007-05-08T14:50:35+01:00' visible='true' lat='50.9370281' lon='-1.4384433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783123' timestamp='2007-02-11T18:07:16+00:00' user='nickw' visible='true' lat='50.9457845' lon='-1.3479342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122328041' timestamp='2007-11-18T19:07:25+00:00' user='nickw' visible='true' lat='50.9150095' lon='-1.4351535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227224' timestamp='2007-04-29T20:37:32+01:00' user='Dean Earley' visible='true' lat='50.9359224' lon='-1.4134334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957178' timestamp='2007-01-25T22:42:45+00:00' user='Dean Earley' visible='true' lat='50.9153268' lon='-1.423644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718259' timestamp='2007-08-08T01:32:12+01:00' visible='true' lat='50.9375652' lon='-1.4462066' />
-  <node id='254593' timestamp='2006-10-27T00:58:34+01:00' user='Dean Earley' visible='true' lat='50.9118479' lon='-1.385561' />
-  <node id='29816838' timestamp='2007-05-31T22:17:18+01:00' visible='true' lat='50.9869837' lon='-1.3649713'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486290' timestamp='2007-07-09T11:55:41+01:00' visible='true' lat='50.912782' lon='-1.3835159'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372771' timestamp='2007-05-01T10:05:20+01:00' visible='true' lat='50.9313542' lon='-1.4367251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325193' timestamp='2006-11-11T17:24:40+00:00' user='Dean Earley' visible='true' lat='50.9489191' lon='-1.3693591' />
-  <node id='21585941' timestamp='2007-04-29T17:20:24+01:00' visible='true' lat='50.9678122' lon='-1.3564808'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418335' timestamp='2007-05-02T00:33:13+01:00' visible='true' lat='50.9657639' lon='-1.3618672'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254396' timestamp='2007-02-18T20:18:22+00:00' visible='true' lat='50.92243' lon='-1.3618148' />
-  <node id='325031' timestamp='2006-11-11T17:24:40+00:00' user='Dean Earley' visible='true' lat='50.9584547' lon='-1.4448199' />
-  <node id='18398757' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9492494' lon='-1.4139363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14726550' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9115416' lon='-1.4009755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92679906' timestamp='2007-10-31T12:24:58+00:00' user='Dean Earley' visible='true' lat='50.9610434' lon='-1.4251341' />
-  <node id='254889' timestamp='2006-09-03T00:38:53+01:00' user='Dean Earley' visible='true' lat='50.9272731' lon='-1.4329604' />
-  <node id='19113227' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='51.0149883' lon='-1.391383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816291' timestamp='2007-05-31T21:52:24+01:00' visible='true' lat='50.9912096' lon='-1.3539884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435806' timestamp='2007-12-14T21:43:12+00:00' user='nickw' visible='true' lat='50.9372265' lon='-1.4324643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089045' timestamp='2007-06-08T18:11:57+01:00' visible='true' lat='50.9649235' lon='-1.3753461'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='45160139' timestamp='2007-09-07T17:38:22+01:00' user='mike l' visible='true' lat='50.9433708' lon='-1.4339464'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964134' timestamp='2007-02-18T21:25:14+00:00' visible='true' lat='50.9172391' lon='-1.3847326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071343' timestamp='2006-08-11T02:48:09+01:00' user='Dean Earley' visible='true' lat='50.917255' lon='-1.364884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796861' timestamp='2007-05-30T22:26:19+01:00' user='nickw' visible='true' lat='50.9172908' lon='-1.3613427'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931319' timestamp='2007-08-16T19:35:53+01:00' user='southglos' visible='true' lat='50.9984732' lon='-1.358376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903645' timestamp='2007-05-09T23:57:39+01:00' visible='true' lat='50.9567775' lon='-1.3562116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702360' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9522736' lon='-1.3611544' />
-  <node id='24668369' timestamp='2007-01-04T21:06:46+00:00' user='nickw' visible='true' lat='50.9889344' lon='-1.3989989'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781149' timestamp='2007-03-25T18:42:08+01:00' user='Dean Earley' visible='true' lat='50.9031635' lon='-1.3745299'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721023' timestamp='2006-10-06T23:27:16+01:00' user='Dean Earley' visible='true' lat='50.9618444' lon='-1.3705059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730521' timestamp='2007-05-28T19:36:50+01:00' visible='true' lat='50.9710381' lon='-1.3703168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160265288' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9721403' lon='-1.3744324' />
-  <node id='30256894' timestamp='2007-06-12T20:38:18+01:00' visible='true' lat='50.9790899' lon='-1.3590939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243694' timestamp='2007-04-29T20:25:17+01:00' user='Dean Earley' visible='true' lat='50.9395428' lon='-1.4136051'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419592' timestamp='2006-07-24T21:02:39+01:00' user='nickw' visible='true' lat='50.9166464' lon='-1.4326988' />
-  <node id='675863' timestamp='2007-04-05T14:22:43+01:00' user='Dean Earley' visible='true' lat='50.9252676' lon='-1.3731247' />
-  <node id='29998549' timestamp='2007-06-05T23:13:24+01:00' user='nickw' visible='true' lat='50.9668565' lon='-1.4219911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249988' timestamp='2007-04-29T21:42:09+01:00' visible='true' lat='50.9167267' lon='-1.4433232'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342600' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9055129' lon='-1.3695366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924307' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9782021' lon='-1.3727603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30780857' timestamp='2007-06-22T21:11:17+01:00' user='Steve Chilton' visible='true' lat='50.9079236' lon='-1.4139569'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639940' timestamp='2007-02-04T22:51:18+00:00' user='Dean Earley' visible='true' lat='50.9042412' lon='-1.3810321'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115449' timestamp='2007-10-29T08:07:21+00:00' user='nickw' visible='true' lat='50.9278906' lon='-1.4434477'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='53421238' timestamp='2007-09-17T23:09:03+01:00' user='mike l' visible='true' lat='50.9700844' lon='-1.3899106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='402745' timestamp='2007-04-05T14:22:43+01:00' user='Dean Earley' visible='true' lat='50.9139' lon='-1.40923' />
-  <node id='169423514' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9310446' lon='-1.4441211'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29510740' timestamp='2007-05-22T21:47:00+01:00' visible='true' lat='50.9736852' lon='-1.3544435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577108' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.9631193' lon='-1.425035' />
-  <node id='21275699' timestamp='2007-11-18T19:11:26+00:00' user='nickw' visible='true' lat='50.920721' lon='-1.435628'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549346' timestamp='2007-05-24T11:22:47+01:00' visible='true' lat='50.9645612' lon='-1.3706489'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91108512' timestamp='2007-10-29T07:48:08+00:00' user='nickw' visible='true' lat='50.9322668' lon='-1.4202533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296617' timestamp='2007-01-19T10:19:57+00:00' user='Dean Earley' visible='true' lat='50.9703755' lon='-1.3649399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463032' timestamp='2007-05-22T00:01:33+01:00' user='nickw' visible='true' lat='50.908676' lon='-1.408445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613428' timestamp='2006-12-16T17:46:54+00:00' user='David Currie' visible='true' lat='50.9759598' lon='-1.4019787'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815419' timestamp='2007-05-31T21:34:34+01:00' visible='true' lat='50.9874397' lon='-1.3534308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111039' timestamp='2006-10-22T23:24:05+01:00' user='Ben' visible='true' lat='50.9734319' lon='-1.3803565'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21189062' timestamp='2006-11-22T23:51:57+00:00' user='crouchingbadger' visible='true' lat='50.9582317' lon='-1.4487305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956637' timestamp='2007-06-26T23:45:06+01:00' user='nickw' visible='true' lat='50.9331275' lon='-1.3518319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380414' timestamp='2007-05-20T10:19:25+01:00' user='nickw' visible='true' lat='50.9442697' lon='-1.3791097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762127' timestamp='2007-02-10T22:56:22+00:00' user='nickw' visible='true' lat='50.9352385' lon='-1.3713576'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660390' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true' lat='50.9033435' lon='-1.4097425' />
-  <node id='122313906' timestamp='2007-11-18T18:59:19+00:00' user='nickw' visible='true' lat='50.9128863' lon='-1.4312547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718242' timestamp='2007-08-08T01:28:51+01:00' visible='true' lat='50.9346876' lon='-1.4464383' />
-  <node id='12889423' timestamp='2006-08-08T23:26:26+01:00' user='Dean Earley' visible='true' lat='50.9443314' lon='-1.3700215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225794' timestamp='2007-06-11T22:16:40+01:00' visible='true' lat='50.9819582' lon='-1.3553738'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816751' timestamp='2007-05-31T22:13:35+01:00' visible='true' lat='50.9900773' lon='-1.3559574'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009195' timestamp='2007-05-12T15:33:37+01:00' user='nickw' visible='true' lat='50.9298713' lon='-1.3521728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='201648596' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true' lat='50.9538884' lon='-1.3583022' />
-  <node id='160211040' timestamp='2007-12-10T19:14:41+00:00' user='sladen' visible='true' lat='50.9195386' lon='-1.3895815' />
-  <node id='30504760' timestamp='2007-06-17T21:50:34+01:00' visible='true' lat='50.9808227' lon='-1.3580423'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581814' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9173501' lon='-1.4486836' />
-  <node id='25296307' timestamp='2007-01-19T09:52:17+00:00' user='Dean Earley' visible='true' lat='50.9867737' lon='-1.3528442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507752' timestamp='2006-12-09T09:51:40+00:00' user='nickw' visible='true' lat='50.9318163' lon='-1.4005692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30227020' timestamp='2007-06-11T22:36:20+01:00' visible='true' lat='50.9822883' lon='-1.3523405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224501' timestamp='2007-06-11T22:07:23+01:00' visible='true' lat='50.9827282' lon='-1.3542482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704459' timestamp='2007-05-28T10:36:48+01:00' visible='true' lat='50.9814408' lon='-1.3565182'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216408' timestamp='2006-07-09T22:24:18+01:00' user='Dean Earley' visible='true' lat='50.9208385' lon='-1.3563219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306290' timestamp='2005-12-11T21:46:56+00:00' user='nickw' visible='true' lat='50.9219527' lon='-1.4047265' />
-  <node id='13071202' timestamp='2006-08-11T02:47:51+01:00' user='Dean Earley' visible='true' lat='50.9242209' lon='-1.3671976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179443' timestamp='2007-04-29T01:53:16+01:00' user='Dean Earley' visible='true' lat='50.9621607' lon='-1.4216278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474650' timestamp='2007-04-05T14:22:43+01:00' user='Dean Earley' visible='true' lat='50.9315604' lon='-1.3541522' />
-  <node id='29464280' timestamp='2007-05-22T00:19:18+01:00' user='Dean Earley' visible='true' lat='50.9376323' lon='-1.4038959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632819' timestamp='2007-05-26T20:06:57+01:00' visible='true' lat='50.9623042' lon='-1.3601736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250056' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.9164102' lon='-1.4493342'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298298' timestamp='2006-09-02T12:59:39+01:00' user='Dean Earley' visible='true' lat='50.9488369' lon='-1.3963756' />
-  <node id='28342613' timestamp='2007-04-30T22:13:39+01:00' user='nickw' visible='true' lat='50.9102357' lon='-1.3660798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28230915' timestamp='2007-04-29T18:43:30+01:00' user='nickw' visible='true' lat='50.9110183' lon='-1.3600933'>
-    <tag k='name' v='BITT CRES' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92680536' timestamp='2007-10-31T12:24:55+00:00' user='Dean Earley' visible='true' lat='50.9605669' lon='-1.4254628' />
-  <node id='28372756' timestamp='2007-05-01T10:05:18+01:00' visible='true' lat='50.93125' lon='-1.441351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254936' timestamp='2005-11-15T15:43:25+00:00' user='nickw' visible='true' lat='50.939203' lon='-1.4217149' />
-  <node id='122339034' timestamp='2007-11-18T19:13:32+00:00' user='nickw' visible='true' lat='50.9208867' lon='-1.4341751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30410995' timestamp='2007-06-15T23:09:51+01:00' visible='true' lat='50.9692963' lon='-1.3568817'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657677' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9230988' lon='-1.3823889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26348284' timestamp='2007-03-04T19:32:10+00:00' user='Dean Earley' visible='true' lat='50.8992075' lon='-1.3814724'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945405' timestamp='2007-03-31T20:34:36+01:00' user='nickw' visible='true' lat='50.9011963' lon='-1.3493721'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48958658' timestamp='2007-09-10T23:55:13+01:00' visible='true' lat='50.906697' lon='-1.3999653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31486273' timestamp='2007-07-09T11:55:39+01:00' visible='true' lat='50.9113143' lon='-1.3812479'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507145' timestamp='2007-06-17T22:07:48+01:00' visible='true' lat='50.976529' lon='-1.3606598'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984780' timestamp='2007-01-10T00:14:58+00:00' user='nickw' visible='true' lat='50.9406287' lon='-1.389026'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29733460' timestamp='2007-05-28T21:25:27+01:00' user='LivingWithDragons' visible='true' lat='50.981047' lon='-1.4437903'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924347' timestamp='2007-06-03T20:10:38+01:00' visible='true' lat='50.9818182' lon='-1.3618221'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117383' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9293995' lon='-1.4448285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254345' timestamp='2005-11-15T15:39:11+00:00' user='nickw' visible='true' lat='50.9494018' lon='-1.4327646' />
-  <node id='657721' timestamp='2007-04-05T14:22:43+01:00' user='Dean Earley' visible='true' lat='50.8999752' lon='-1.3544504' />
-  <node id='28180217' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9622212' lon='-1.425806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435871' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.9365848' lon='-1.4321414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071279' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.920472' lon='-1.3582442'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254328' timestamp='2007-05-07T23:35:23+01:00' user='Dean Earley' visible='true' lat='50.9543783' lon='-1.4525359' />
-  <node id='28348310' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9253839' lon='-1.3565773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909653' timestamp='2007-10-29T16:25:37+00:00' user='Dean Earley' visible='true' lat='50.9695767' lon='-1.3546858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903935' timestamp='2007-12-06T19:26:18+00:00' user='Dean Earley' visible='true' lat='50.9811145' lon='-1.4441046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29733449' timestamp='2007-05-28T21:25:19+01:00' user='LivingWithDragons' visible='true' lat='50.9808778' lon='-1.445308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689078' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9426364' lon='-1.3899418'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178432' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.986983' lon='-1.3508911'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997552' timestamp='2007-06-05T22:43:59+01:00' user='nickw' visible='true' lat='50.9996625' lon='-1.3447094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469853' timestamp='2007-04-05T14:22:44+01:00' user='Dean Earley' visible='true' lat='50.9086187' lon='-1.4161984' />
-  <node id='20973117' timestamp='2007-12-10T21:07:14+00:00' user='sladen' visible='true' lat='50.9049537' lon='-1.412951'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908364' timestamp='2007-04-19T17:50:52+01:00' visible='true' lat='50.9293456' lon='-1.3800644' />
-  <node id='28240303' timestamp='2007-04-29T20:02:53+01:00' user='Andy Street' visible='true' lat='50.9036095' lon='-1.3568145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971154' timestamp='2006-11-12T22:56:58+00:00' user='Dean Earley' visible='true' lat='50.9081641' lon='-1.4037745'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398424' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9673242' lon='-1.3971527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949892' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9943892' lon='-1.3755027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096956' timestamp='2007-06-08T23:24:14+01:00' visible='true' lat='50.9653035' lon='-1.3761266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091882' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.920972' lon='-1.4216701'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440017' timestamp='2007-04-18T02:00:23+01:00' visible='true' lat='50.9270264' lon='-1.3825073'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549395' timestamp='2007-05-24T11:22:53+01:00' visible='true' lat='50.9625841' lon='-1.3770613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228111' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9501845' lon='-1.4285853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383144' timestamp='2007-04-05T14:22:44+01:00' user='Dean Earley' visible='true' lat='50.9239' lon='-1.40801' />
-  <node id='160418739' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9074867' lon='-1.4240919' />
-  <node id='28932464' timestamp='2007-05-10T21:06:08+01:00' user='Dean Earley' visible='true' lat='50.9658554' lon='-1.4482448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303926' timestamp='2007-04-29T08:58:11+01:00' user='Dean Earley' visible='true' lat='50.9406059' lon='-1.4069825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91132083' timestamp='2007-10-29T08:23:16+00:00' user='nickw' visible='true' lat='50.9309905' lon='-1.4232047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601321' timestamp='2006-09-01T00:16:04+01:00' user='nickw' visible='true' lat='50.8669567' lon='-1.5079165'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21636761' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9471965' lon='-1.401997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089147' timestamp='2007-06-08T18:12:12+01:00' visible='true' lat='50.9668175' lon='-1.3807141'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='154770237' timestamp='2007-12-07T13:51:05+00:00' user='Nick Dyer' visible='true' lat='50.960488' lon='-1.4265599' />
-  <node id='30124663' timestamp='2007-06-09T19:48:37+01:00' user='nickw' visible='true' lat='50.9308858' lon='-1.3521258'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718195' timestamp='2007-08-08T01:25:53+01:00' visible='true' lat='50.9360399' lon='-1.4418807' />
-  <node id='25635428' timestamp='2007-02-04T18:26:16+00:00' user='Dean Earley' visible='true' lat='50.9601507' lon='-1.3603853'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689121' timestamp='2006-12-23T10:22:23+00:00' user='nickw' visible='true' lat='50.9408119' lon='-1.3824173'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134830' timestamp='2007-05-15T20:53:15+01:00' user='nickw' visible='true' lat='50.9445434' lon='-1.3835895'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957201' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9205912' lon='-1.4196362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28223257' timestamp='2007-04-30T20:40:52+01:00' visible='true' lat='50.9680216' lon='-1.3594942'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254636' timestamp='2007-02-10T23:53:41+00:00' visible='true' lat='50.9155983' lon='-1.3957509' />
-  <node id='24924337' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true' lat='50.9759167' lon='-1.3979795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29856374' timestamp='2007-06-02T08:31:29+01:00' user='nickw' visible='true' lat='50.9491999' lon='-1.393557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632798' timestamp='2007-05-26T20:05:09+01:00' visible='true' lat='50.9599349' lon='-1.3701471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762562' timestamp='2007-05-31T21:43:02+01:00' visible='true' lat='50.9881317' lon='-1.3568649'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740476' timestamp='2007-11-20T11:02:55+00:00' user='Gregory Williams' visible='true' lat='50.9878701' lon='-1.3459136'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='29815637' timestamp='2007-05-31T21:47:55+01:00' visible='true' lat='50.9894243' lon='-1.3582236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718237' timestamp='2007-10-16T11:34:24+01:00' user='Dean Earley' visible='true' lat='50.9356991' lon='-1.4434686' />
-  <node id='15359728' timestamp='2007-01-19T10:20:31+00:00' user='Dean Earley' visible='true' lat='50.9698586' lon='-1.358592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194452' timestamp='2007-04-29T08:20:34+01:00' visible='true' lat='50.9459058' lon='-1.4330286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461823' timestamp='2007-05-21T23:51:10+01:00' user='nickw' visible='true' lat='50.900114' lon='-1.398866'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890105' timestamp='2006-10-27T00:48:06+01:00' user='Dean Earley' visible='true' lat='50.913038' lon='-1.389274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319620' timestamp='2007-04-05T14:22:44+01:00' user='Dean Earley' visible='true' lat='50.9185781' lon='-1.3977656' />
-  <node id='14726563' timestamp='2006-09-02T18:32:36+01:00' user='Dean Earley' visible='true' lat='50.9128899' lon='-1.4006441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59766920' timestamp='2007-09-25T17:50:06+01:00' user='mike l' visible='true' lat='50.9405056' lon='-1.388467'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973087' timestamp='2006-11-13T00:42:40+00:00' user='Dean Earley' visible='true' lat='50.9045722' lon='-1.4090744'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963780' timestamp='2007-04-29T08:58:12+01:00' user='Dean Earley' visible='true' lat='50.9442391' lon='-1.4120301'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925206' timestamp='2007-06-03T20:30:02+01:00' visible='true' lat='50.9795172' lon='-1.3636794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600604' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true' lat='50.9975614' lon='-1.3981206'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122326373' timestamp='2007-11-18T19:06:35+00:00' user='nickw' visible='true' lat='50.9147777' lon='-1.433594'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009016' timestamp='2007-05-12T15:28:40+01:00' user='nickw' visible='true' lat='50.931762' lon='-1.3501961'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595105' timestamp='2006-08-04T12:00:53+01:00' user='nickw' visible='true' lat='50.9188874' lon='-1.4139775'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='107808671' timestamp='2007-11-11T18:09:35+00:00' user='Dean Earley' visible='true' lat='50.9151703' lon='-1.35834'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530606' timestamp='2007-04-05T14:22:44+01:00' user='Dean Earley' visible='true' lat='50.9304' lon='-1.39503' />
-  <node id='325004' timestamp='2006-11-11T17:24:41+00:00' user='Dean Earley' visible='true' lat='50.9568567' lon='-1.4142036' />
-  <node id='29002296' timestamp='2007-05-12T09:57:59+01:00' user='nickw' visible='true' lat='50.9369667' lon='-1.36505'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600673' timestamp='2007-09-17T23:09:10+01:00' user='mike l' visible='true' lat='50.9753081' lon='-1.4041797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298292' timestamp='2007-04-03T00:53:47+01:00' user='Ben' visible='true' lat='50.9544898' lon='-1.3999187' />
-  <node id='635139' timestamp='2006-03-17T18:25:52+00:00' user='nickw' visible='true' lat='50.9117447' lon='-1.363607' />
-  <node id='30956690' timestamp='2007-06-26T23:49:19+01:00' user='nickw' visible='true' lat='50.9306014' lon='-1.3478238'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000929' timestamp='2007-05-12T09:30:25+01:00' user='nickw' visible='true' lat='50.9198796' lon='-1.4103039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127563' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9349767' lon='-1.4416187'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008364' timestamp='2007-05-12T15:11:22+01:00' user='nickw' visible='true' lat='50.9272073' lon='-1.3520089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724248' timestamp='2006-10-07T00:25:17+01:00' user='nickw' visible='true' lat='50.9108821' lon='-1.4118331'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179499' timestamp='2007-04-29T01:53:21+01:00' user='Dean Earley' visible='true' lat='50.9576916' lon='-1.4034219'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600498' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9224795' lon='-1.4384212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675143' timestamp='2007-02-06T00:16:35+00:00' user='Dean Earley' visible='true' lat='50.9021954' lon='-1.4014677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596809' timestamp='2007-03-25T19:25:23+01:00' user='Dean Earley' visible='true' lat='50.906121' lon='-1.3977931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998562' timestamp='2007-06-05T23:13:26+01:00' user='nickw' visible='true' lat='50.9624522' lon='-1.4292227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632425' timestamp='2007-05-26T19:26:44+01:00' visible='true' lat='50.9569353' lon='-1.3680242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505733' timestamp='2007-05-22T19:28:32+01:00' visible='true' lat='50.9904879' lon='-1.3530114'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468594' timestamp='2007-05-22T01:07:05+01:00' user='Dean Earley' visible='true' lat='50.9162557' lon='-1.4565435'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984711' timestamp='2007-01-10T00:11:56+00:00' user='nickw' visible='true' lat='50.9444091' lon='-1.3805727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963776' timestamp='2007-04-29T08:58:12+01:00' user='Dean Earley' visible='true' lat='50.9439009' lon='-1.4101743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160244229' timestamp='2007-12-10T19:25:22+00:00' user='sladen' visible='true' lat='50.9111185' lon='-1.4327458' />
-  <node id='28582988' timestamp='2007-05-02T23:57:51+01:00' visible='true' lat='50.9371983' lon='-1.4216678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423496' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9315016' lon='-1.4440118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668005' timestamp='2007-01-04T21:05:23+00:00' user='nickw' visible='true' lat='50.9835504' lon='-1.3936249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932230' timestamp='2007-05-10T20:48:53+01:00' user='Dean Earley' visible='true' lat='50.9633352' lon='-1.4466727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871549' timestamp='2007-06-02T18:39:37+01:00' visible='true' lat='50.9153865' lon='-1.3530365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796777' timestamp='2007-05-30T22:22:05+01:00' user='nickw' visible='true' lat='50.9144601' lon='-1.3521841'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467492' timestamp='2007-04-19T17:50:44+01:00' visible='true' lat='50.9329978' lon='-1.3787644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595081' timestamp='2007-05-25T21:54:08+01:00' visible='true' lat='50.9662352' lon='-1.3522888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380421' timestamp='2007-05-20T10:19:26+01:00' user='nickw' visible='true' lat='50.9457659' lon='-1.380025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743165' timestamp='2007-04-29T20:37:44+01:00' user='Dean Earley' visible='true' lat='50.9343828' lon='-1.4189074'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341777' timestamp='2007-04-30T21:49:00+01:00' user='nickw' visible='true' lat='50.9126783' lon='-1.3619674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90681708' timestamp='2007-10-29T15:11:19+00:00' user='Dean Earley' visible='true' lat='50.876632' lon='-1.4014029' />
-  <node id='29872350' timestamp='2007-06-02T19:03:53+01:00' visible='true' lat='50.9176369' lon='-1.3520559'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675812' timestamp='2007-05-22T01:07:52+01:00' user='Dean Earley' visible='true' lat='50.9038196' lon='-1.4177365'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507739' timestamp='2007-04-29T02:33:54+01:00' user='Dean Earley' visible='true' lat='50.9394868' lon='-1.3989852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149854' timestamp='2008-02-03T06:12:31+00:00' user='sladen' visible='true' lat='50.9081536' lon='-1.4026291' />
-  <node id='170434' timestamp='2005-08-14T22:28:34+01:00' visible='true' lat='50.9344749' lon='-1.3283489' />
-  <node id='29391632' timestamp='2007-05-20T17:35:14+01:00' visible='true' lat='50.9649699' lon='-1.3568718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20134839' timestamp='2006-10-28T02:02:32+01:00' user='Dean Earley' visible='true' lat='50.9280951' lon='-1.3539747'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984741' timestamp='2007-01-10T00:13:58+00:00' user='nickw' visible='true' lat='50.9472881' lon='-1.3946086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549380' timestamp='2007-05-24T11:22:51+01:00' visible='true' lat='50.9647913' lon='-1.3745089'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009224' timestamp='2007-05-12T15:36:02+01:00' user='nickw' visible='true' lat='50.929552' lon='-1.3541992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254435' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9394165' lon='-1.3799164' />
-  <node id='29928526' timestamp='2007-06-03T21:49:35+01:00' visible='true' lat='50.9849463' lon='-1.3629083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561555' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9221025' lon='-1.4307824'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419456' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9404617' lon='-1.3710272'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29595106' timestamp='2007-05-25T21:54:14+01:00' visible='true' lat='50.9692583' lon='-1.3519223'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997526' timestamp='2007-06-05T22:43:55+01:00' user='nickw' visible='true' lat='51.0102636' lon='-1.3568678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931349' timestamp='2007-06-03T22:43:04+01:00' visible='true' lat='50.9937918' lon='-1.3732322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903392' timestamp='2007-05-09T23:24:30+01:00' visible='true' lat='50.9475198' lon='-1.3659825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471840' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.9380346' lon='-1.3690413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29990884' timestamp='2007-06-05T20:41:23+01:00' visible='true' lat='51.0029818' lon='-1.349506'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28235777' timestamp='2007-04-29T19:22:30+01:00' user='nickw' visible='true' lat='50.9124468' lon='-1.3458298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998127' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.9887589' lon='-1.402184'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564715' timestamp='2006-08-15T12:09:46+01:00' user='nickw' visible='true' lat='50.928676' lon='-1.3547579'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='254298' timestamp='2007-02-18T20:18:39+00:00' visible='true' lat='50.9799966' lon='-1.3449462' />
-  <node id='28874079' timestamp='2007-05-08T14:50:38+01:00' visible='true' lat='50.9399804' lon='-1.4390584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141424' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9316946' lon='-1.4267237'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='243873' timestamp='2007-05-22T00:20:07+01:00' user='Dean Earley' visible='true' lat='50.9370418' lon='-1.4198636' />
-  <node id='422987' timestamp='2007-04-05T14:22:46+01:00' user='Dean Earley' visible='true' lat='50.9442' lon='-1.39833' />
-  <node id='21561810' timestamp='2006-12-13T20:19:46+00:00' user='nickw' visible='true' lat='50.9243942' lon='-1.4410337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816559' timestamp='2007-05-31T22:04:27+01:00' visible='true' lat='50.9913371' lon='-1.3543231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254264' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9481022' lon='-1.3525551' />
-  <node id='29008944' timestamp='2007-05-12T15:26:03+01:00' user='nickw' visible='true' lat='50.9308135' lon='-1.3497242'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575726' timestamp='2007-03-25T19:25:25+01:00' user='Dean Earley' visible='true' lat='50.9010078' lon='-1.3934475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372741' timestamp='2007-05-01T10:05:16+01:00' visible='true' lat='50.928437' lon='-1.4389755'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28384693' timestamp='2007-06-02T19:55:02+01:00' visible='true' lat='50.9691713' lon='-1.3613582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147532' timestamp='2008-02-03T06:02:50+00:00' user='sladen' visible='true' lat='50.9103888' lon='-1.4036676' />
-  <node id='29704323' timestamp='2007-06-03T15:59:44+01:00' visible='true' lat='50.9849376' lon='-1.3590249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392592' timestamp='2007-05-20T18:06:39+01:00' visible='true' lat='50.9660973' lon='-1.352397'>
-    <tag k='amenity' v='post_box' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668030' timestamp='2007-01-04T21:05:29+00:00' user='nickw' visible='true' lat='50.986024' lon='-1.3900269'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721057' timestamp='2006-10-06T23:27:19+01:00' user='Dean Earley' visible='true' lat='50.9713905' lon='-1.360283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237242' timestamp='2007-04-29T20:03:08+01:00' user='Andy Street' visible='true' lat='50.9048874' lon='-1.3530709'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245153297' timestamp='2008-02-03T06:23:26+00:00' user='sladen' visible='true' lat='50.9078614' lon='-1.397917' />
-  <node id='50797915' timestamp='2007-09-13T21:06:07+01:00' user='mike l' visible='true' lat='50.9726941' lon='-1.4514748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29762560' timestamp='2007-05-31T21:17:11+01:00' visible='true' lat='50.9878403' lon='-1.3567872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895693' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9670363' lon='-1.4214773'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256227' timestamp='2007-06-12T20:17:49+01:00' visible='true' lat='50.9815658' lon='-1.3546861'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675813' timestamp='2007-05-22T01:07:56+01:00' user='Dean Earley' visible='true' lat='50.9037678' lon='-1.4175883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963759' timestamp='2007-05-22T00:20:07+01:00' user='Dean Earley' visible='true' lat='50.9384309' lon='-1.4078939'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967605' timestamp='2006-11-12T20:47:02+00:00' user='Dean Earley' visible='true' lat='50.9185803' lon='-1.3925447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142612663' timestamp='2007-11-29T22:26:19+00:00' user='nickw' visible='true' lat='50.9121017' lon='-1.4147777'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071249' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9219469' lon='-1.3589395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228096' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.9515831' lon='-1.4225604'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160418015' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9092024' lon='-1.4291902' />
-  <node id='635132' timestamp='2006-03-17T18:24:26+00:00' user='nickw' visible='true' lat='50.9043843' lon='-1.3607745' />
-  <node id='28252926' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9452143' lon='-1.4259226'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480487' timestamp='2007-12-10T19:13:44+00:00' user='sladen' visible='true' lat='50.9113729' lon='-1.3903368'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='657770' timestamp='2007-04-05T14:22:46+01:00' user='Dean Earley' visible='true' lat='50.9044382' lon='-1.3731768' />
-  <node id='28414281' timestamp='2007-05-01T23:50:06+01:00' user='nickw' visible='true' lat='50.9427076' lon='-1.3720683'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249865' timestamp='2007-04-29T21:41:41+01:00' visible='true' lat='50.9183534' lon='-1.4399608'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245149450' timestamp='2008-02-03T06:10:28+00:00' user='sladen' visible='true' lat='50.9066653' lon='-1.40438' />
-  <node id='28243673' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9395225' lon='-1.4147936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464299' timestamp='2007-05-22T00:19:22+01:00' user='Dean Earley' visible='true' lat='50.9489243' lon='-1.4028943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325698' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.9195' lon='-1.39828' />
-  <node id='254418' timestamp='2006-08-11T02:50:51+01:00' user='Dean Earley' visible='true' lat='50.9202531' lon='-1.3695025' />
-  <node id='254859' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9189539' lon='-1.4612823' />
-  <node id='29930466' timestamp='2007-06-03T22:22:08+01:00' visible='true' lat='50.9944235' lon='-1.3523726'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726301' timestamp='2006-11-12T18:00:17+00:00' user='Dean Earley' visible='true' lat='50.9177103' lon='-1.3751732'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817080' timestamp='2007-05-31T22:18:47+01:00' visible='true' lat='50.9857682' lon='-1.3648316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249802' timestamp='2007-04-29T21:41:32+01:00' visible='true' lat='50.9188119' lon='-1.4467616'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29511445' timestamp='2007-05-22T21:54:44+01:00' visible='true' lat='50.9720685' lon='-1.3648688'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915358' timestamp='2006-07-19T01:48:59+01:00' user='Dean Earley' visible='true' lat='50.9107081' lon='-1.350522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298281' timestamp='2006-09-02T12:59:39+01:00' user='Dean Earley' visible='true' lat='50.9609617' lon='-1.3987654' />
-  <node id='28194425' timestamp='2007-04-29T21:10:29+01:00' visible='true' lat='50.9477833' lon='-1.4345678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27237362' timestamp='2007-04-09T14:37:14+01:00' user='avantman42' visible='true' lat='50.8995825' lon='-1.3508128'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275766' timestamp='2006-11-25T23:58:42+00:00' user='nickw' visible='true' lat='50.9139577' lon='-1.4293798'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009194' timestamp='2007-05-12T15:33:37+01:00' user='nickw' visible='true' lat='50.9300403' lon='-1.3524112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194353' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9439745' lon='-1.4362208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331356' timestamp='2007-05-22T00:20:07+01:00' user='Dean Earley' visible='true' lat='50.9424391' lon='-1.4031136' />
-  <node id='26575743' timestamp='2007-12-10T19:17:32+00:00' user='sladen' visible='true' lat='50.9020311' lon='-1.3956927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021784' timestamp='2007-04-03T00:52:49+01:00' user='Ben' visible='true' lat='50.9538933' lon='-1.3999686'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099521' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9518979' lon='-1.3682135' />
-  <node id='21598850' timestamp='2007-02-04T22:51:54+00:00' user='Dean Earley' visible='true' lat='50.898163' lon='-1.3809531'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728554' timestamp='2007-03-23T22:52:59+00:00' user='nickw' visible='true' lat='50.8997828' lon='-1.3689372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91111715' timestamp='2007-10-29T08:01:16+00:00' user='nickw' visible='true' lat='50.9268372' lon='-1.438553'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250090' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9164102' lon='-1.4511664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689083' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.942408' lon='-1.3896488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28244262' timestamp='2007-04-29T20:36:31+01:00' user='Andy Street' visible='true' lat='50.9044941' lon='-1.3520997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87799816' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8941528' lon='-1.3898746' />
-  <node id='27239005' timestamp='2007-04-09T15:39:36+01:00' user='avantman42' visible='true' lat='50.9178406' lon='-1.4486162'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508363' timestamp='2007-06-17T22:14:19+01:00' visible='true' lat='50.9755001' lon='-1.3558668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418253' timestamp='2007-05-02T00:31:25+01:00' visible='true' lat='50.9682478' lon='-1.3624678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301590' timestamp='2005-12-08T22:43:50+00:00' user='nickw' visible='true' lat='50.9255791' lon='-1.4047909' />
-  <node id='29816419' timestamp='2007-05-31T21:58:46+01:00' visible='true' lat='50.9896453' lon='-1.3566882'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122334956' timestamp='2007-11-18T19:11:25+00:00' user='nickw' visible='true' lat='50.9215128' lon='-1.4358439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222216' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9129531' lon='-1.4923552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42144359' timestamp='2007-09-10T19:01:43+01:00' user='mike l' visible='true' lat='50.9376967' lon='-1.3980702'>
-    <tag k='amenity' v='post_office' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='206162638' timestamp='2008-01-04T19:35:06+00:00' user='nickw' visible='true' lat='50.9722031' lon='-1.3789839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704342' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9819928' lon='-1.3603053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275817' timestamp='2007-11-18T19:19:52+00:00' user='nickw' visible='true' lat='50.9164502' lon='-1.4367702'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26001568' timestamp='2007-02-18T20:16:52+00:00' visible='true' lat='50.926397' lon='-1.392815' />
-  <node id='25640000' timestamp='2007-02-04T22:51:24+00:00' user='Dean Earley' visible='true' lat='50.9098986' lon='-1.3717413'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026819' timestamp='2007-05-13T10:10:59+01:00' user='nickw' visible='true' lat='50.9199988' lon='-1.3998378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29953368' timestamp='2007-06-04T21:16:59+01:00' visible='true' lat='51.0012356' lon='-1.368547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125574207' timestamp='2007-11-20T11:52:26+00:00' user='Nick Dyer' visible='true' lat='50.9608597' lon='-1.4230609' />
-  <node id='30504764' timestamp='2007-06-17T21:50:35+01:00' visible='true' lat='50.9811959' lon='-1.3576275'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='247802' timestamp='2006-12-02T23:56:43+00:00' user='Dean Earley' visible='true' lat='50.9273578' lon='-1.3916221' />
-  <node id='90661631' timestamp='2007-10-28T21:46:42+00:00' user='Nick Dyer' visible='true' lat='50.9046804' lon='-1.4092962' />
-  <node id='157238288' timestamp='2007-12-08T20:33:30+00:00' user='nickw' visible='true' lat='50.9475004' lon='-1.4484431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29132954' timestamp='2007-05-15T20:34:42+01:00' user='nickw' visible='true' lat='50.9313036' lon='-1.3764888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924061' timestamp='2007-01-06T14:28:45+00:00' user='Dean Earley' visible='true' lat='51.0107579' lon='-1.3472379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639989' timestamp='2007-02-04T22:51:22+00:00' user='Dean Earley' visible='true' lat='50.9011519' lon='-1.375584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254484' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9632986' lon='-1.4093935' />
-  <node id='661155' timestamp='2007-04-20T23:53:20+01:00' user='Dean Earley' visible='true' lat='50.9124269' lon='-1.3540608' />
-  <node id='26114392' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true' lat='50.9027023' lon='-1.3922509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179469' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9638421' lon='-1.4087719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650905' timestamp='2007-04-05T14:22:47+01:00' user='Dean Earley' visible='true' lat='50.9299' lon='-1.40066' />
-  <node id='329477' timestamp='2007-04-05T14:22:47+01:00' user='Dean Earley' visible='true' lat='50.9374' lon='-1.37256' />
-  <node id='28342536' timestamp='2007-04-30T22:13:32+01:00' user='nickw' visible='true' lat='50.9062896' lon='-1.3690201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727950' timestamp='2007-01-19T20:35:59+00:00' user='Dean Earley' visible='true' lat='50.9238086' lon='-1.3874595'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419256' timestamp='2006-12-02T22:59:19+00:00' user='Dean Earley' visible='true' lat='50.9377486' lon='-1.3621198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976693' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9367906' lon='-1.4250453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467479' timestamp='2007-04-19T17:50:43+01:00' visible='true' lat='50.9244854' lon='-1.3764948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577042' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.899149' lon='-1.4104461' />
-  <node id='298233' timestamp='2007-01-06T14:30:56+00:00' user='Dean Earley' visible='true' lat='51.0143178' lon='-1.3434426' />
-  <node id='29926993' timestamp='2007-06-03T21:16:28+01:00' visible='true' lat='50.9852426' lon='-1.3665148'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245148037' timestamp='2008-02-03T06:04:24+00:00' user='sladen' visible='true' lat='50.9084026' lon='-1.4026806' />
-  <node id='29998353' timestamp='2007-06-05T23:05:25+01:00' user='nickw' visible='true' lat='50.9787158' lon='-1.4279512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141492' timestamp='2006-11-21T23:19:59+00:00' user='nickw' visible='true' lat='50.92875' lon='-1.4366883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30089035' timestamp='2007-06-08T18:11:55+01:00' visible='true' lat='50.9667184' lon='-1.3732582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18347832' timestamp='2006-10-16T21:47:21+01:00' user='nickw' visible='true' lat='50.9288513' lon='-1.4114535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340618' timestamp='2007-01-21T19:22:07+00:00' user='nickw' visible='true' lat='50.9640056' lon='-1.3822626'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796860' timestamp='2007-05-30T22:26:19+01:00' user='nickw' visible='true' lat='50.917654' lon='-1.3608659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240337' timestamp='2007-04-29T20:02:57+01:00' user='Andy Street' visible='true' lat='50.9065234' lon='-1.3512857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581835' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9119495' lon='-1.45125' />
-  <node id='25296292' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9783743' lon='-1.3631772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831107' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.911106' lon='-1.4080919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254653' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9691149' lon='-1.3898208' />
-  <node id='29931357' timestamp='2007-06-03T22:43:05+01:00' visible='true' lat='50.9942679' lon='-1.3735596'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21614657' timestamp='2007-02-18T21:30:55+00:00' visible='true' lat='50.9027521' lon='-1.4057717'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='862495' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9141356' lon='-1.4019777' />
-  <node id='29463041' timestamp='2007-05-22T00:01:34+01:00' user='nickw' visible='true' lat='50.9095946' lon='-1.4083641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141390' timestamp='2007-01-19T18:58:08+00:00' user='Dean Earley' visible='true' lat='50.9244387' lon='-1.4182414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87248240' timestamp='2007-10-25T21:14:44+01:00' user='Nick Dyer' visible='true' lat='50.8923517' lon='-1.3973751' />
-  <node id='29512134' timestamp='2007-05-28T10:42:23+01:00' visible='true' lat='50.9768863' lon='-1.3587294'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225258' timestamp='2007-06-11T22:10:26+01:00' visible='true' lat='50.9822056' lon='-1.3560986'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243587' timestamp='2007-04-29T20:24:56+01:00' user='Dean Earley' visible='true' lat='50.9359943' lon='-1.4127431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008396' timestamp='2007-05-12T15:11:57+01:00' user='nickw' visible='true' lat='50.9261053' lon='-1.3496646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325042' timestamp='2007-12-10T20:19:02+00:00' user='sladen' visible='true' lat='50.9474556' lon='-1.4711636' />
-  <node id='26781179' timestamp='2007-03-25T18:42:15+01:00' user='Dean Earley' visible='true' lat='50.9002775' lon='-1.3729786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282112' timestamp='2007-01-17T21:10:10+00:00' user='David Currie' visible='true' lat='50.9767193' lon='-1.4072334'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222189' timestamp='2007-02-18T21:30:21+00:00' visible='true' lat='50.9133298' lon='-1.4403552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931395' timestamp='2007-06-03T22:43:14+01:00' visible='true' lat='50.994867' lon='-1.3732786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194901' timestamp='2007-04-29T08:58:01+01:00' user='Dean Earley' visible='true' lat='50.9422818' lon='-1.4150138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579418' timestamp='2006-12-14T13:53:01+00:00' user='David Currie' visible='true' lat='50.9775803' lon='-1.4020473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008452' timestamp='2007-05-12T15:12:16+01:00' user='nickw' visible='true' lat='50.9264136' lon='-1.3528331'>
-    <tag k='name' v='ROTHER CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026668' timestamp='2007-05-13T10:02:49+01:00' user='nickw' visible='true' lat='50.9270076' lon='-1.3996819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254967' timestamp='2006-09-02T13:46:28+01:00' user='Dean Earley' visible='true' lat='50.9432842' lon='-1.4177353' />
-  <node id='18348708' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9815514' lon='-1.424122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124200' timestamp='2007-06-09T19:35:51+01:00' user='nickw' visible='true' lat='50.9234758' lon='-1.3509288'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615429' timestamp='2007-10-29T07:46:02+00:00' user='nickw' visible='true' lat='50.9097648' lon='-1.4151627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325679' timestamp='2007-04-29T21:18:23+01:00' user='Dean Earley' visible='true' lat='50.9218784' lon='-1.4186128' />
-  <node id='21636746' timestamp='2006-12-18T21:21:43+00:00' user='nickw' visible='true' lat='50.9436623' lon='-1.3951794'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20965513' timestamp='2007-05-10T21:08:10+01:00' user='Dean Earley' visible='true' lat='50.9755314' lon='-1.441156'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254683' timestamp='2006-10-06T23:29:32+01:00' user='Dean Earley' visible='true' lat='50.9704292' lon='-1.3553669' />
-  <node id='30256856' timestamp='2007-06-12T20:38:08+01:00' visible='true' lat='50.9804997' lon='-1.3570513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10216427' timestamp='2006-08-07T20:18:28+01:00' user='Dean Earley' visible='true' lat='50.9228136' lon='-1.34487'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29839186' timestamp='2007-06-01T20:53:33+01:00' visible='true' lat='50.9854564' lon='-1.3648106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='48967854' timestamp='2007-09-11T00:17:27+01:00' visible='true' lat='50.9047533' lon='-1.4158233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668301' timestamp='2007-01-04T21:06:39+00:00' user='nickw' visible='true' lat='50.9861143' lon='-1.3932673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924076' timestamp='2007-01-06T14:28:56+00:00' user='nickw' visible='true' lat='50.930339' lon='-1.3845612'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973238' timestamp='2007-08-14T04:48:37+01:00' user='andrewpmk' visible='true' lat='50.9076802' lon='-1.3980519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372729' timestamp='2007-05-01T10:05:14+01:00' visible='true' lat='50.9321252' lon='-1.4419136'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621220' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9707674' lon='-1.3734539'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999011' timestamp='2007-06-05T23:29:01+01:00' user='nickw' visible='true' lat='50.9935108' lon='-1.4375071'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341746' timestamp='2007-04-30T21:48:57+01:00' user='nickw' visible='true' lat='50.9134048' lon='-1.3501268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28173781' timestamp='2007-04-29T00:59:00+01:00' visible='true' lat='50.9466062' lon='-1.4319441'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743184' timestamp='2008-02-03T06:16:39+00:00' user='sladen' visible='true' lat='50.9080995' lon='-1.408045' />
-  <node id='20976678' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9348265' lon='-1.4305149'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29145257' timestamp='2007-05-16T00:59:00+01:00' visible='true' lat='50.9231866' lon='-1.3800448'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601318' timestamp='2006-09-01T00:22:40+01:00' user='nickw' visible='true' lat='50.8487849' lon='-1.5027144'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='29931372' timestamp='2007-06-03T22:43:07+01:00' visible='true' lat='50.9947881' lon='-1.3725308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217214' timestamp='2006-09-04T01:04:13+01:00' user='Dean Earley' visible='true' lat='50.9159129' lon='-1.3588547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30580572' timestamp='2007-06-18T21:09:14+01:00' visible='true' lat='50.9704116' lon='-1.352852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29588073' timestamp='2007-05-25T18:50:21+01:00' visible='true' lat='50.9667001' lon='-1.3513867'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928594' timestamp='2007-06-03T21:52:04+01:00' visible='true' lat='50.9786499' lon='-1.3615703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469862' timestamp='2007-04-05T14:22:48+01:00' user='Dean Earley' visible='true' lat='50.912' lon='-1.42309' />
-  <node id='25471870' timestamp='2007-01-27T14:11:06+00:00' user='nickw' visible='true' lat='50.9378437' lon='-1.3691257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008405' timestamp='2007-05-12T15:11:58+01:00' user='nickw' visible='true' lat='50.9259425' lon='-1.3475587'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398409' timestamp='2006-10-17T23:09:37+01:00' user='nickw' visible='true' lat='50.9810954' lon='-1.4242289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431989' timestamp='2007-06-16T16:26:06+01:00' visible='true' lat='50.9708081' lon='-1.3518842'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956731' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.9269826' lon='-1.3516382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972593' timestamp='2006-08-25T11:53:35+01:00' user='nickw' visible='true' lat='50.9497095' lon='-1.3241361'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='14743120' timestamp='2007-04-03T00:52:06+01:00' user='Dean Earley' visible='true' lat='50.9136881' lon='-1.4224131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903073' timestamp='2007-05-09T23:03:43+01:00' visible='true' lat='50.9420123' lon='-1.3682239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689134' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9396602' lon='-1.3878409'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746396' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9973617' lon='-1.3360324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25440792' timestamp='2007-02-11T00:33:29+00:00' visible='true' lat='50.9179429' lon='-1.3821318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282146' timestamp='2007-01-17T21:10:16+00:00' user='David Currie' visible='true' lat='50.9752855' lon='-1.4091858'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29764425' timestamp='2007-05-30T21:37:53+01:00' user='nickw' visible='true' lat='50.9214326' lon='-1.3638843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615422' timestamp='2006-12-16T21:52:53+00:00' user='nickw' visible='true' lat='50.9004098' lon='-1.4058289'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774737' timestamp='2007-09-13T20:11:59+01:00' user='mike l' visible='true' lat='50.944982' lon='-1.4449502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30224273' timestamp='2007-06-11T22:06:24+01:00' visible='true' lat='50.9830781' lon='-1.3547124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706646' timestamp='2007-04-05T14:22:48+01:00' user='Dean Earley' visible='true' lat='50.9145013' lon='-1.3734875' />
-  <node id='29838423' timestamp='2007-06-01T20:19:55+01:00' visible='true' lat='50.9648528' lon='-1.3883053'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='655065' timestamp='2007-04-29T19:27:58+01:00' user='Andy Street' visible='true' lat='50.8988504' lon='-1.3570593' />
-  <node id='21689158' timestamp='2007-02-18T20:19:18+00:00' visible='true' lat='50.9402047' lon='-1.3738746'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704906' timestamp='2007-10-17T15:39:36+01:00' user='Nick Dyer' visible='true' lat='50.90055' lon='-1.451482'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='26727697' timestamp='2007-03-23T22:38:14+00:00' user='nickw' visible='true' lat='50.9025956' lon='-1.3558351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87825990' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.9003655' lon='-1.4385192' />
-  <node id='14727967' timestamp='2007-02-18T21:25:24+00:00' visible='true' lat='50.9153473' lon='-1.3972142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598842' timestamp='2006-12-17T19:47:33+00:00' user='Dean Earley' visible='true' lat='50.8980439' lon='-1.3663592'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935766' timestamp='2007-05-11T00:50:50+01:00' visible='true' lat='50.9397791' lon='-1.4484544'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14728164' timestamp='2007-04-29T08:58:15+01:00' user='Dean Earley' visible='true' lat='50.9407848' lon='-1.4068263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091844' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9087381' lon='-1.4182186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480566' timestamp='2007-01-27T23:24:00+00:00' visible='true' lat='50.9103164' lon='-1.3897319'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='206163071' timestamp='2008-01-04T19:32:05+00:00' user='nickw' visible='true' lat='50.9726409' lon='-1.3857883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28583028' timestamp='2007-05-02T23:57:55+01:00' visible='true' lat='50.939923' lon='-1.4349285'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29631643' timestamp='2007-05-26T18:26:44+01:00' visible='true' lat='50.9689' lon='-1.3505029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='307469' timestamp='2005-12-12T00:24:04+00:00' user='nickw' visible='true' lat='50.9245706' lon='-1.404233' />
-  <node id='21599030' timestamp='2006-12-16T01:02:10+00:00' user='Dean Earley' visible='true' lat='50.9344332' lon='-1.3546815'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160232026' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9085045' lon='-1.3921479' />
-  <node id='20971203' timestamp='2006-11-12T22:57:20+00:00' user='Dean Earley' visible='true' lat='50.9078019' lon='-1.4160664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4942444' timestamp='2007-12-10T19:09:39+00:00' user='sladen' visible='true' lat='50.9240185' lon='-1.3858565' />
-  <node id='20976719' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9349404' lon='-1.4219627'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507164' timestamp='2007-06-17T22:07:52+01:00' visible='true' lat='50.976849' lon='-1.3597388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348135' timestamp='2007-04-30T23:45:32+01:00' user='nickw' visible='true' lat='50.9331724' lon='-1.3656167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29530520' timestamp='2007-05-28T10:13:01+01:00' visible='true' lat='50.9879335' lon='-1.3532327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972834' timestamp='2007-03-09T20:54:28+00:00' user='nickw' visible='true' lat='50.9005885' lon='-1.3921145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29928073' timestamp='2007-06-03T21:48:33+01:00' visible='true' lat='50.9808529' lon='-1.3686586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398454' timestamp='2006-10-17T23:09:40+01:00' user='nickw' visible='true' lat='50.9224959' lon='-1.4043252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179486' timestamp='2007-04-29T01:53:20+01:00' user='Dean Earley' visible='true' lat='50.9541605' lon='-1.4041298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='7015694' timestamp='2007-05-22T00:20:08+01:00' user='Dean Earley' visible='true' lat='50.9359042' lon='-1.4064517' />
-  <node id='28107720' timestamp='2007-04-27T23:44:13+01:00' visible='true' lat='50.9313643' lon='-1.3887246'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27523500' timestamp='2007-04-22T01:27:04+01:00' visible='true' lat='50.9724074' lon='-1.374371'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141407' timestamp='2006-11-21T23:12:44+00:00' user='nickw' visible='true' lat='50.9276501' lon='-1.4224126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001328' timestamp='2007-05-12T09:40:14+01:00' user='nickw' visible='true' lat='50.923806' lon='-1.3813052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706866' timestamp='2007-04-05T14:22:48+01:00' user='Dean Earley' visible='true' lat='50.8809688' lon='-1.3661875' />
-  <node id='26781164' timestamp='2007-03-25T18:42:13+01:00' user='Dean Earley' visible='true' lat='50.9025868' lon='-1.3665186'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254362' timestamp='2007-02-11T00:33:09+00:00' visible='true' lat='50.9176578' lon='-1.4068718' />
-  <node id='28244296' timestamp='2007-04-29T20:36:34+01:00' user='Andy Street' visible='true' lat='50.9008757' lon='-1.3547217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252369' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9458279' lon='-1.3608282' />
-  <node id='142614196' timestamp='2007-11-29T22:27:44+00:00' user='nickw' visible='true' lat='50.9091422' lon='-1.419213'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29468560' timestamp='2007-05-22T01:06:58+01:00' user='Dean Earley' visible='true' lat='50.9139902' lon='-1.4498038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339150' timestamp='2007-04-30T20:39:29+01:00' visible='true' lat='50.967904' lon='-1.360954'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935717' timestamp='2007-05-11T00:47:40+01:00' visible='true' lat='50.9411098' lon='-1.4400657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710866' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9868611' lon='-1.3536679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504270' timestamp='2007-06-17T21:38:59+01:00' visible='true' lat='50.994677' lon='-1.352048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245147280' timestamp='2008-02-03T06:02:10+00:00' user='sladen' visible='true' lat='50.9089059' lon='-1.4039594' />
-  <node id='13071300' timestamp='2006-08-11T02:48:03+01:00' user='Dean Earley' visible='true' lat='50.9212179' lon='-1.3581375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998571' timestamp='2007-06-05T23:13:53+01:00' user='nickw' visible='true' lat='50.9605502' lon='-1.4406659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815560' timestamp='2007-05-31T21:42:56+01:00' visible='true' lat='50.9893806' lon='-1.3587059'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998118' timestamp='2007-06-05T23:00:28+01:00' user='nickw' visible='true' lat='50.9887089' lon='-1.3967802'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431970' timestamp='2007-11-28T12:24:30+00:00' user='Dean Earley' visible='true' lat='50.9851043' lon='-1.3514379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18393861' timestamp='2006-10-17T21:00:36+01:00' user='nickw' visible='true' lat='50.9142298' lon='-1.4052722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971165' timestamp='2007-02-18T21:30:18+00:00' visible='true' lat='50.9039264' lon='-1.4010337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341794' timestamp='2007-04-30T21:49:02+01:00' user='nickw' visible='true' lat='50.912027' lon='-1.3617488'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='3915752' timestamp='2006-12-17T19:53:40+00:00' user='Dean Earley' visible='true' lat='50.8999572' lon='-1.3762748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91528334' timestamp='2007-10-29T16:21:46+00:00' user='Nick Dyer' visible='true' lat='50.9090564' lon='-1.4394726' />
-  <node id='254461' timestamp='2007-02-11T00:33:08+00:00' visible='true' lat='50.9192451' lon='-1.3994892' />
-  <node id='13706721' timestamp='2007-10-26T13:08:39+01:00' user='Nick Dyer' visible='true' lat='50.8946055' lon='-1.3841039'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='29000955' timestamp='2007-05-12T09:31:57+01:00' user='nickw' visible='true' lat='50.9189075' lon='-1.40614'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957192' timestamp='2007-04-29T21:18:23+01:00' user='Dean Earley' visible='true' lat='50.9217321' lon='-1.4181823'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595232' timestamp='2006-08-04T12:03:06+01:00' user='nickw' visible='true' lat='50.9203639' lon='-1.4143525'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='27021765' timestamp='2007-04-03T00:52:41+01:00' user='Ben' visible='true' lat='50.9403653' lon='-1.3776928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640027' timestamp='2007-03-04T18:58:33+00:00' user='Dean Earley' visible='true' lat='50.917373' lon='-1.3750896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157209194' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true' lat='50.9426828' lon='-1.4478483'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961035' timestamp='2006-11-11T17:12:21+00:00' user='Dean Earley' visible='true' lat='50.9601148' lon='-1.4337311'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113965198' timestamp='2007-11-14T14:53:44+00:00' user='Nick Dyer' visible='true' lat='50.9554949' lon='-1.3645107' />
-  <node id='26346841' timestamp='2007-03-04T18:58:02+00:00' user='Dean Earley' visible='true' lat='50.9160861' lon='-1.3703741'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180242' timestamp='2007-04-29T02:05:37+01:00' user='Dean Earley' visible='true' lat='50.9613657' lon='-1.4229433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228102' timestamp='2006-10-23T21:01:04+01:00' user='nickw' visible='true' lat='50.9500052' lon='-1.4252501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577063' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9098335' lon='-1.4302129' />
-  <node id='14743147' timestamp='2007-04-29T20:52:51+01:00' user='Dean Earley' visible='true' lat='50.9328955' lon='-1.4213785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324986' timestamp='2006-09-02T12:59:39+01:00' user='Dean Earley' visible='true' lat='50.9591274' lon='-1.409055' />
-  <node id='28830588' timestamp='2007-05-05T08:52:58+01:00' user='nickw' visible='true' lat='50.9239454' lon='-1.3573312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194338' timestamp='2007-04-29T08:20:22+01:00' visible='true' lat='50.9451062' lon='-1.4358025'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830571' timestamp='2007-05-05T08:52:57+01:00' user='nickw' visible='true' lat='50.9238677' lon='-1.3576179'>
-    <tag k='name' v='EX CL' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342583' timestamp='2007-04-30T22:13:37+01:00' user='nickw' visible='true' lat='50.9097471' lon='-1.361868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831110' timestamp='2006-11-02T19:55:38+00:00' user='nickw' visible='true' lat='50.9114441' lon='-1.4059251'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639921' timestamp='2007-02-04T22:51:17+00:00' user='Dean Earley' visible='true' lat='50.9001516' lon='-1.3817083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26348506' timestamp='2007-03-04T19:38:17+00:00' user='Dean Earley' visible='true' lat='50.9162581' lon='-1.3599452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278614' timestamp='2007-08-14T04:48:07+01:00' user='andrewpmk' visible='true' lat='50.9081371' lon='-1.398398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339180' timestamp='2007-04-30T20:39:42+01:00' visible='true' lat='50.9681884' lon='-1.3622581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600472' timestamp='2006-12-16T10:13:57+00:00' user='nickw' visible='true' lat='50.9395191' lon='-1.4465597'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801362' timestamp='2006-10-28T02:18:12+01:00' user='Dean Earley' visible='true' lat='50.9223032' lon='-1.3459765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='530524' timestamp='2007-04-05T14:22:49+01:00' user='Dean Earley' visible='true' lat='50.9511327' lon='-1.36679' />
-  <node id='24949841' timestamp='2007-01-07T12:38:45+00:00' user='nickw' visible='true' lat='50.9903377' lon='-1.3733571'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9312078' timestamp='2007-02-18T21:25:16+00:00' visible='true' lat='50.9135713' lon='-1.3989825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661166' timestamp='2007-04-05T14:22:49+01:00' user='Dean Earley' visible='true' lat='50.9012911' lon='-1.3555644' />
-  <node id='29134819' timestamp='2007-05-15T20:53:14+01:00' user='nickw' visible='true' lat='50.9443932' lon='-1.3866887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564724' timestamp='2006-08-15T12:09:53+01:00' user='nickw' visible='true' lat='50.92834' lon='-1.3545236'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28179475' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.9615114' lon='-1.4045276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15657692' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9035738' lon='-1.3810328'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141432' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9221964' lon='-1.4208233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632879' timestamp='2007-05-26T20:07:46+01:00' visible='true' lat='50.9670403' lon='-1.3619898'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972788' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9066284' lon='-1.4156457'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17724259' timestamp='2007-02-18T20:19:15+00:00' visible='true' lat='50.9238464' lon='-1.4143973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90510071' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true' lat='50.900094' lon='-1.4129258' />
-  <node id='28240324' timestamp='2007-04-29T20:02:55+01:00' user='Andy Street' visible='true' lat='50.9065735' lon='-1.3522231'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305625' timestamp='2006-12-16T17:47:17+00:00' user='David Currie' visible='true' lat='50.9846735' lon='-1.3875168' />
-  <node id='160264335' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9680217' lon='-1.3727673' />
-  <node id='29912989' timestamp='2007-06-03T15:50:13+01:00' visible='true' lat='50.9867367' lon='-1.3594992'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249844' timestamp='2007-04-29T21:41:37+01:00' visible='true' lat='50.9196906' lon='-1.4418712'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507786' timestamp='2007-05-22T00:20:09+01:00' user='Dean Earley' visible='true' lat='50.949028' lon='-1.4005475'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252915' timestamp='2007-04-29T22:00:36+01:00' visible='true' lat='50.9459708' lon='-1.4300897'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42189110' timestamp='2007-09-05T18:30:25+01:00' user='mike l' visible='true' lat='50.9354015' lon='-1.393381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130913' timestamp='2006-10-28T01:45:30+01:00' user='Dean Earley' visible='true' lat='50.9339181' lon='-1.3611894'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90677144' timestamp='2007-10-28T22:07:56+00:00' user='Nick Dyer' visible='true' lat='50.8981172' lon='-1.4304824' />
-  <node id='153331837' timestamp='2007-12-06T20:44:25+00:00' user='nickw' visible='true' lat='50.942895' lon='-1.4430943'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30505698' timestamp='2007-06-17T21:56:38+01:00' visible='true' lat='50.9796076' lon='-1.3558796'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252835' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9488075' lon='-1.3601244' />
-  <node id='29998567' timestamp='2007-06-05T23:13:26+01:00' user='nickw' visible='true' lat='50.9611509' lon='-1.4336728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388929' timestamp='2007-04-05T14:22:49+01:00' user='Dean Earley' visible='true' lat='50.9428' lon='-1.39372' />
-  <node id='21178402' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.986792' lon='-1.3506759'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872361' timestamp='2007-06-02T19:03:55+01:00' visible='true' lat='50.9171186' lon='-1.3508775'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20952635' timestamp='2007-02-11T00:33:16+00:00' visible='true' lat='50.9343192' lon='-1.3762904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903054' timestamp='2007-05-09T23:03:34+01:00' visible='true' lat='50.9419969' lon='-1.3692295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29533946' timestamp='2007-11-28T12:24:31+00:00' user='Dean Earley' visible='true' lat='50.9808566' lon='-1.3556751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29461232' timestamp='2007-05-21T23:43:15+01:00' user='nickw' visible='true' lat='50.9039729' lon='-1.3948131'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194871' timestamp='2007-04-29T08:57:58+01:00' user='Dean Earley' visible='true' lat='50.9434661' lon='-1.4128905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20954595' timestamp='2007-04-03T00:53:47+01:00' user='Ben' visible='true' lat='50.9401134' lon='-1.4004953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254501' timestamp='2007-01-28T00:07:10+00:00' visible='true' lat='50.9054942' lon='-1.3893439' />
-  <node id='14744409' timestamp='2007-04-03T00:54:08+01:00' user='Ben' visible='true' lat='50.9378473' lon='-1.398768'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504515' timestamp='2007-06-17T21:45:21+01:00' visible='true' lat='50.9821309' lon='-1.3587403'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548664' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.9624843' lon='-1.3605458'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706668' timestamp='2007-04-05T14:22:49+01:00' user='Dean Earley' visible='true' lat='50.9066269' lon='-1.3811844' />
-  <node id='125573355' timestamp='2007-11-20T11:51:58+00:00' user='Nick Dyer' visible='true' lat='50.9612759' lon='-1.4236789' />
-  <node id='387825' timestamp='2007-04-05T14:22:49+01:00' user='Dean Earley' visible='true' lat='50.9321' lon='-1.38756' />
-  <node id='24668086' timestamp='2007-01-04T21:05:32+00:00' user='nickw' visible='true' lat='50.9900849' lon='-1.4065085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26447381' timestamp='2007-03-24T16:33:50+00:00' user='Dean Earley' visible='true' lat='50.8997683' lon='-1.393473'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971184' timestamp='2006-11-12T22:57:18+00:00' user='Dean Earley' visible='true' lat='50.9059562' lon='-1.4000197'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29817897' timestamp='2007-05-31T22:22:41+01:00' visible='true' lat='50.9872193' lon='-1.364548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25480562' timestamp='2007-01-27T23:21:23+00:00' visible='true' lat='50.9109883' lon='-1.3897319'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='20971169' timestamp='2006-11-12T22:57:17+00:00' user='Dean Earley' visible='true' lat='50.9067595' lon='-1.3991369'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675880' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9317307' lon='-1.3732156' />
-  <node id='402753' timestamp='2007-04-05T14:22:50+01:00' user='Dean Earley' visible='true' lat='50.9155' lon='-1.39822' />
-  <node id='17724274' timestamp='2006-10-07T00:25:19+01:00' user='nickw' visible='true' lat='50.9242454' lon='-1.4048803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388944' timestamp='2007-04-05T14:22:51+01:00' user='Dean Earley' visible='true' lat='50.9411' lon='-1.39807' />
-  <node id='50797920' timestamp='2007-09-13T21:06:07+01:00' user='mike l' visible='true' lat='50.9718884' lon='-1.4511198'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636813' timestamp='2007-04-29T02:33:34+01:00' user='Dean Earley' visible='true' lat='50.9511655' lon='-1.4128662'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704782' timestamp='2006-08-26T00:06:05+01:00' user='dmgroom' visible='true' lat='50.8911182' lon='-1.4201219' />
-  <node id='29928598' timestamp='2007-06-03T21:52:06+01:00' visible='true' lat='50.9785053' lon='-1.3610202'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929858' timestamp='2007-06-03T22:13:29+01:00' visible='true' lat='50.9774797' lon='-1.3640463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259908' timestamp='2007-04-29T23:09:27+01:00' user='Andy Street' visible='true' lat='50.9010708' lon='-1.3511085'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601306' timestamp='2006-09-01T00:16:03+01:00' user='nickw' visible='true' lat='50.829792' lon='-1.5301895'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='24984795' timestamp='2007-01-10T00:15:09+00:00' user='nickw' visible='true' lat='50.9420683' lon='-1.3819137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001422' timestamp='2007-05-12T09:45:12+01:00' user='nickw' visible='true' lat='50.9367237' lon='-1.3638449'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223930' timestamp='2007-06-11T22:03:10+01:00' visible='true' lat='50.9841517' lon='-1.3515785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310987' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9681871' lon='-1.4383794' />
-  <node id='20972830' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true' lat='50.9020474' lon='-1.3949803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254548' timestamp='2006-07-09T23:00:41+01:00' user='Dean Earley' visible='true' lat='50.926581' lon='-1.3647818' />
-  <node id='24949858' timestamp='2007-09-24T20:32:21+01:00' user='mike l' visible='true' lat='50.9959897' lon='-1.3712115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783085' timestamp='2007-02-11T18:07:13+00:00' user='nickw' visible='true' lat='50.9410027' lon='-1.3549273'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91115464' timestamp='2007-10-29T08:07:22+00:00' user='nickw' visible='true' lat='50.928087' lon='-1.4434788'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='319629' timestamp='2006-10-27T00:48:16+01:00' user='Dean Earley' visible='true' lat='50.9207974' lon='-1.3906564' />
-  <node id='28194417' timestamp='2007-04-29T08:20:30+01:00' visible='true' lat='50.9475849' lon='-1.4378445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331339' timestamp='2007-12-06T22:11:27+00:00' user='Dean Earley' visible='true' lat='51.0055' lon='-1.37305' />
-  <node id='24924326' timestamp='2007-01-06T14:47:57+00:00' user='nickw' visible='true' lat='50.9817044' lon='-1.3857135'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963729' timestamp='2007-02-18T20:19:09+00:00' visible='true' lat='50.9306162' lon='-1.4154533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727963' timestamp='2007-02-18T21:25:23+00:00' visible='true' lat='50.9167387' lon='-1.3959426'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29003042' timestamp='2007-05-12T10:05:26+01:00' user='nickw' visible='true' lat='50.9411049' lon='-1.4047283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632220' timestamp='2007-05-26T19:21:20+01:00' visible='true' lat='50.9579117' lon='-1.369262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90665701' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true' lat='50.9005396' lon='-1.4148323' />
-  <node id='30096966' timestamp='2007-06-08T23:24:16+01:00' visible='true' lat='50.9638709' lon='-1.37978'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21624981' timestamp='2006-12-17T19:47:26+00:00' user='Dean Earley' visible='true' lat='50.8996676' lon='-1.3664414'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254642' timestamp='2005-11-15T15:41:45+00:00' user='nickw' visible='true' lat='50.9145017' lon='-1.3923729' />
-  <node id='21636810' timestamp='2006-12-18T21:21:47+00:00' user='nickw' visible='true' lat='50.9544112' lon='-1.4114315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903069' timestamp='2007-05-09T23:03:41+01:00' visible='true' lat='50.9416433' lon='-1.3681193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298262' timestamp='2007-01-19T18:27:13+00:00' user='Dean Earley' visible='true' lat='50.9621898' lon='-1.3866568' />
-  <node id='21636764' timestamp='2006-12-18T21:21:44+00:00' user='nickw' visible='true' lat='50.9480852' lon='-1.4014408'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29466088' timestamp='2007-05-22T00:38:01+01:00' user='Dean Earley' visible='true' lat='50.9829769' lon='-1.4458201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160218972' timestamp='2007-12-10T19:13:23+00:00' user='sladen' visible='true' lat='50.9147984' lon='-1.3893412' />
-  <node id='29171744' timestamp='2007-05-16T23:47:58+01:00' user='nickw' visible='true' lat='50.9405907' lon='-1.3895283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250018' timestamp='2007-04-29T21:42:15+01:00' visible='true' lat='50.9153088' lon='-1.4487952'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325261' timestamp='2005-12-16T23:24:49+00:00' user='80n' visible='true' lat='50.9239242' lon='-1.3150712' />
-  <node id='9519442' timestamp='2006-10-03T23:25:15+01:00' user='Dean Earley' visible='true' lat='50.9277501' lon='-1.2865129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431959' timestamp='2007-06-16T16:25:56+01:00' visible='true' lat='50.9716827' lon='-1.3516416'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249882' timestamp='2007-04-29T21:41:43+01:00' visible='true' lat='50.9203701' lon='-1.4410075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339142' timestamp='2007-04-30T20:39:26+01:00' visible='true' lat='50.9674132' lon='-1.3600677'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925342' timestamp='2007-06-03T20:36:35+01:00' visible='true' lat='50.9805244' lon='-1.3652017'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816428' timestamp='2007-05-31T22:00:51+01:00' visible='true' lat='50.9900757' lon='-1.3552456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632408' timestamp='2007-05-26T19:25:41+01:00' visible='true' lat='50.9560853' lon='-1.369262'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544343' timestamp='2007-04-05T14:22:52+01:00' user='Dean Earley' visible='true' lat='50.9388' lon='-1.37005' />
-  <node id='28345039' timestamp='2007-04-30T23:00:35+01:00' user='nickw' visible='true' lat='50.9302713' lon='-1.3656231'>
-    <tag k='name' v='DOWNTN RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689104' timestamp='2007-02-01T22:21:37+00:00' user='Dean Earley' visible='true' lat='50.9402564' lon='-1.3796443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92679902' timestamp='2007-10-31T12:25:01+00:00' user='Dean Earley' visible='true' lat='50.9607352' lon='-1.4247479' />
-  <node id='91126056' timestamp='2007-10-29T08:17:57+00:00' user='nickw' visible='true' lat='50.9298753' lon='-1.4458268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581796' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9216896' lon='-1.4456281' />
-  <node id='20133211' timestamp='2006-10-28T01:55:53+01:00' user='Dean Earley' visible='true' lat='50.9286448' lon='-1.352117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957844' timestamp='2007-05-22T00:40:31+01:00' user='Dean Earley' visible='true' lat='50.9421966' lon='-1.4381482'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='301563' timestamp='2006-11-13T00:08:34+00:00' user='Dean Earley' visible='true' lat='50.8988328' lon='-1.3962038' />
-  <node id='29026815' timestamp='2007-05-13T10:10:59+01:00' user='nickw' visible='true' lat='50.920458' lon='-1.4036354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92482293' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true' lat='50.8940672' lon='-1.4253911' />
-  <node id='29548665' timestamp='2007-05-24T10:50:46+01:00' visible='true' lat='50.9625146' lon='-1.3612122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000932' timestamp='2007-05-12T09:30:25+01:00' user='nickw' visible='true' lat='50.9194037' lon='-1.4110588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='430654' timestamp='2007-04-05T14:22:52+01:00' user='Dean Earley' visible='true' lat='50.9098' lon='-1.40932' />
-  <node id='29710757' timestamp='2007-05-31T21:13:52+01:00' visible='true' lat='50.9872933' lon='-1.3554046'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721038' timestamp='2006-10-06T23:27:17+01:00' user='Dean Earley' visible='true' lat='50.9609119' lon='-1.3596974'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911934' timestamp='2007-06-03T15:38:22+01:00' visible='true' lat='50.9858237' lon='-1.3571217'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956622' timestamp='2007-06-26T23:45:04+01:00' user='nickw' visible='true' lat='50.9281048' lon='-1.3499093'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90581805' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true' lat='50.9191195' lon='-1.4471301' />
-  <node id='24924296' timestamp='2007-01-06T14:47:55+00:00' user='nickw' visible='true' lat='50.9684696' lon='-1.3831308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549373' timestamp='2007-06-08T18:12:33+01:00' visible='true' lat='50.9653035' lon='-1.372783'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161110' timestamp='2007-06-10T18:13:41+01:00' visible='true' lat='50.9665086' lon='-1.3559113'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398375' timestamp='2006-10-17T23:09:35+01:00' user='nickw' visible='true' lat='50.9515446' lon='-1.4415864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325223' timestamp='2006-11-11T17:26:03+00:00' user='Dean Earley' visible='true' lat='50.9363684' lon='-1.3478572' />
-  <node id='29997501' timestamp='2007-06-05T22:43:51+01:00' user='nickw' visible='true' lat='51.0006627' lon='-1.3635431'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705758' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8934637' lon='-1.4022931' />
-  <node id='28372801' timestamp='2007-05-01T10:05:24+01:00' visible='true' lat='50.9298122' lon='-1.4429346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507794' timestamp='2007-05-22T00:20:09+01:00' user='Dean Earley' visible='true' lat='50.9480821' lon='-1.4044387'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963746' timestamp='2006-09-28T23:48:04+01:00' user='nickw' visible='true' lat='50.9344535' lon='-1.4076711'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206163285' timestamp='2008-01-04T19:34:26+00:00' user='nickw' visible='true' lat='50.9690504' lon='-1.3831857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794375' timestamp='2007-05-30T21:37:18+01:00' user='nickw' visible='true' lat='50.9209542' lon='-1.3634039'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25764481' timestamp='2007-02-10T23:53:37+00:00' visible='true' lat='50.9109861' lon='-1.3939636' />
-  <node id='29815646' timestamp='2007-05-31T21:47:58+01:00' visible='true' lat='50.9911573' lon='-1.356067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160220275' timestamp='2007-12-10T19:12:44+00:00' user='sladen' visible='true' lat='50.9155344' lon='-1.3901995' />
-  <node id='13071390' timestamp='2006-08-11T02:48:13+01:00' user='Dean Earley' visible='true' lat='50.928716' lon='-1.3654385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579395' timestamp='2006-12-14T13:52:47+00:00' user='David Currie' visible='true' lat='50.9768542' lon='-1.4051484'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595201' timestamp='2006-08-04T12:02:24+01:00' user='nickw' visible='true' lat='50.9201374' lon='-1.4134697'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30096939' timestamp='2007-06-13T09:30:25+01:00' visible='true' lat='50.9645401' lon='-1.3782641'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700411' timestamp='2007-04-05T14:22:52+01:00' user='Dean Earley' visible='true' lat='50.9271558' lon='-1.3877859' />
-  <node id='27021829' timestamp='2007-04-03T00:53:10+01:00' user='Ben' visible='true' lat='50.9399051' lon='-1.3925692'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='232014684' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9296479' lon='-1.3705644' />
-  <node id='24949875' timestamp='2007-01-07T12:38:48+00:00' user='nickw' visible='true' lat='50.9896374' lon='-1.3779265'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20628556' timestamp='2007-04-29T08:58:11+01:00' user='Dean Earley' visible='true' lat='50.9402665' lon='-1.410621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632459' timestamp='2007-05-26T19:27:30+01:00' visible='true' lat='50.9599139' lon='-1.3655501'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008388' timestamp='2007-05-12T15:11:56+01:00' user='nickw' visible='true' lat='50.9255293' lon='-1.3517904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301603' timestamp='2007-04-03T00:53:57+01:00' user='Ben' visible='true' lat='50.9336683' lon='-1.4012337' />
-  <node id='29632156' timestamp='2007-05-26T19:20:00+01:00' visible='true' lat='50.9576878' lon='-1.3671558'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254657' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.9702776' lon='-1.3503943' />
-  <node id='206163086' timestamp='2008-01-04T19:32:07+00:00' user='nickw' visible='true' lat='50.9707144' lon='-1.3842685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169423531' timestamp='2007-12-14T21:35:46+00:00' user='nickw' visible='true' lat='50.9308301' lon='-1.4439348'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949926' timestamp='2007-01-07T12:38:52+00:00' user='nickw' visible='true' lat='50.9913131' lon='-1.3824561'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613390' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true' lat='50.9746681' lon='-1.4083177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071373' timestamp='2006-08-11T02:48:11+01:00' user='Dean Earley' visible='true' lat='50.9184312' lon='-1.3629762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579537' timestamp='2006-12-14T14:06:01+00:00' user='David Currie' visible='true' lat='50.9781864' lon='-1.4018482'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Cleveland Bay' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171759' timestamp='2007-05-16T23:48:01+01:00' user='nickw' visible='true' lat='50.9398897' lon='-1.3877602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091827' timestamp='2006-11-19T12:09:11+00:00' user='nickw' visible='true' lat='50.9089895' lon='-1.4228043'>
-    <tag k='name' v='CRACKNORE' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380444' timestamp='2007-05-20T10:19:30+01:00' user='nickw' visible='true' lat='50.940355' lon='-1.3706727'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226349' timestamp='2007-06-11T22:23:48+01:00' visible='true' lat='50.9816989' lon='-1.3543557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92720592' timestamp='2007-10-30T18:01:30+00:00' user='Nick Dyer' visible='true' lat='50.9027452' lon='-1.4168143' />
-  <node id='160213504' timestamp='2007-12-10T19:09:23+00:00' user='sladen' visible='true' lat='50.9216271' lon='-1.3880623' />
-  <node id='14601348' timestamp='2006-09-01T00:16:13+01:00' user='nickw' visible='true' lat='50.9097004' lon='-1.5067363'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='27434188' timestamp='2007-04-17T22:04:01+01:00' visible='true' lat='50.9299456' lon='-1.3858689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347584' timestamp='2007-04-30T23:36:49+01:00' user='nickw' visible='true' lat='50.9268553' lon='-1.3569349'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29621210' timestamp='2007-06-30T12:32:06+01:00' visible='true' lat='50.9703602' lon='-1.3548555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12801371' timestamp='2007-02-04T22:51:53+00:00' user='Dean Earley' visible='true' lat='50.9065414' lon='-1.377514'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91120350' timestamp='2007-10-29T08:12:54+00:00' user='nickw' visible='true' lat='50.9318098' lon='-1.4457821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026822' timestamp='2007-05-13T10:10:59+01:00' user='nickw' visible='true' lat='50.9201244' lon='-1.3998959'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15028812' timestamp='2007-02-18T20:18:27+00:00' visible='true' lat='50.9231859' lon='-1.3612388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29631652' timestamp='2007-05-26T18:27:12+01:00' visible='true' lat='50.9695534' lon='-1.3502674'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721053' timestamp='2007-01-19T10:20:23+00:00' user='Dean Earley' visible='true' lat='50.9701978' lon='-1.3617588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250001' timestamp='2007-04-29T21:42:11+01:00' visible='true' lat='50.9154077' lon='-1.4480043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796856' timestamp='2007-05-30T22:26:18+01:00' user='nickw' visible='true' lat='50.9170403' lon='-1.3605083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816551' timestamp='2007-05-31T22:04:25+01:00' visible='true' lat='50.9913668' lon='-1.3548108'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278580' timestamp='2007-08-14T04:48:04+01:00' user='andrewpmk' visible='true' lat='50.9079632' lon='-1.3982564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298309' timestamp='2006-11-11T17:26:08+00:00' user='Dean Earley' visible='true' lat='50.947968' lon='-1.3889218' />
-  <node id='160416092' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9102577' lon='-1.4303403' />
-  <node id='12591342' timestamp='2007-02-18T20:18:40+00:00' visible='true' lat='50.9154967' lon='-1.4126572'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='21561576' timestamp='2006-12-13T20:09:39+00:00' user='nickw' visible='true' lat='50.9266859' lon='-1.4319545'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28183748' timestamp='2007-04-29T02:25:40+01:00' user='Dean Earley' visible='true' lat='50.9493802' lon='-1.4057034'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30226210' timestamp='2007-06-11T22:20:39+01:00' visible='true' lat='50.9823442' lon='-1.3527636'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242755' timestamp='2007-05-22T00:20:09+01:00' user='Dean Earley' visible='true' lat='50.935735' lon='-1.407172' />
-  <node id='26346878' timestamp='2007-03-04T18:58:04+00:00' user='Dean Earley' visible='true' lat='50.9070765' lon='-1.3753979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509857' timestamp='2007-10-04T19:44:42+01:00' user='Gregory Williams' visible='true' lat='50.9930402' lon='-1.3575522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249938' timestamp='2007-04-29T21:41:52+01:00' visible='true' lat='50.9150076' lon='-1.4445177'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563354' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9296587' lon='-1.3991634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124362' timestamp='2007-06-09T19:43:08+01:00' user='nickw' visible='true' lat='50.9238171' lon='-1.3493941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305572' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9964538' lon='-1.3959718' />
-  <node id='20134834' timestamp='2006-10-28T02:02:31+01:00' user='Dean Earley' visible='true' lat='50.9287182' lon='-1.3538028'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28539422' timestamp='2007-05-02T21:45:01+01:00' user='nickw' visible='true' lat='50.916392' lon='-1.3522743'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914403' timestamp='2007-06-03T16:22:48+01:00' visible='true' lat='50.9849804' lon='-1.3608315'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142614207' timestamp='2007-11-29T22:27:44+00:00' user='nickw' visible='true' lat='50.9092644' lon='-1.419208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='95828983' timestamp='2007-11-02T14:14:14+00:00' user='Nick Dyer' visible='true' lat='50.9063862' lon='-1.4078043' />
-  <node id='675846' timestamp='2007-04-05T14:22:56+01:00' user='Dean Earley' visible='true' lat='50.9341733' lon='-1.3644101' />
-  <node id='21689107' timestamp='2006-12-23T10:22:22+00:00' user='nickw' visible='true' lat='50.9400482' lon='-1.3802518'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325664' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9338702' lon='-1.4315245' />
-  <node id='10908534' timestamp='2006-07-18T10:22:45+01:00' user='nickw' visible='true' lat='50.9385302' lon='-1.3673023' />
-  <node id='28194387' timestamp='2007-04-29T08:20:27+01:00' visible='true' lat='50.9453215' lon='-1.4389394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249963' timestamp='2007-04-29T21:42:00+01:00' visible='true' lat='50.9142673' lon='-1.446171'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932234' timestamp='2007-05-10T20:48:57+01:00' user='Dean Earley' visible='true' lat='50.9650848' lon='-1.4454203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20136214' timestamp='2007-03-31T20:35:02+01:00' user='nickw' visible='true' lat='50.9177111' lon='-1.3519795'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19111048' timestamp='2006-10-22T23:24:06+01:00' user='Ben' visible='true' lat='50.9734677' lon='-1.3810988'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359723' timestamp='2006-09-11T20:17:31+01:00' user='Dean Earley' visible='true' lat='50.9694528' lon='-1.3534239'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091870' timestamp='2006-11-19T12:09:14+00:00' user='nickw' visible='true' lat='50.912446' lon='-1.4250527'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745487' timestamp='2006-09-03T01:40:47+01:00' user='Dean Earley' visible='true' lat='50.9716248' lon='-1.3760081'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008373' timestamp='2007-05-12T15:11:24+01:00' user='nickw' visible='true' lat='50.926456' lon='-1.351552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29009229' timestamp='2007-05-12T15:36:03+01:00' user='nickw' visible='true' lat='50.9304223' lon='-1.3549144'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722355' timestamp='2006-10-06T23:46:14+01:00' user='Dean Earley' visible='true' lat='50.9478919' lon='-1.3757819'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194349' timestamp='2007-04-29T08:20:24+01:00' visible='true' lat='50.9452169' lon='-1.4376047'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997557' timestamp='2007-06-05T22:44:00+01:00' user='nickw' visible='true' lat='50.9923604' lon='-1.3461398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924070' timestamp='2007-03-24T16:33:50+00:00' user='Dean Earley' visible='true' lat='50.9607481' lon='-1.3686884'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341755' timestamp='2007-04-30T21:48:58+01:00' user='nickw' visible='true' lat='50.9089763' lon='-1.3593405'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231029' timestamp='2007-04-29T18:45:05+01:00' user='nickw' visible='true' lat='50.9119375' lon='-1.3605666'>
-    <tag k='name' v='DOWNSIDE A' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935758' timestamp='2007-05-11T00:50:45+01:00' visible='true' lat='50.9409191' lon='-1.4453367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613462' timestamp='2006-12-16T17:46:57+00:00' user='David Currie' visible='true' lat='50.9779648' lon='-1.4013087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30508355' timestamp='2007-06-17T22:14:18+01:00' visible='true' lat='50.9755055' lon='-1.3550509'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310890' timestamp='2007-01-28T00:55:31+00:00' visible='true' lat='50.9204936' lon='-1.4015937' />
-  <node id='160387798' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9165352' lon='-1.4552227' />
-  <node id='25764413' timestamp='2007-02-16T20:51:28+00:00' user='nickw' visible='true' lat='50.908536' lon='-1.3927096' />
-  <node id='21275693' timestamp='2006-11-25T23:51:13+00:00' user='nickw' visible='true' lat='50.9159367' lon='-1.4323896'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='310853' timestamp='2005-12-12T23:32:04+00:00' user='nickw' visible='true' lat='50.9168029' lon='-1.397624' />
-  <node id='10222196' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9070754' lon='-1.4187789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142616993' timestamp='2007-11-29T22:29:06+00:00' user='nickw' visible='true' lat='50.9133167' lon='-1.4162379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956588' timestamp='2007-06-26T23:44:59+01:00' user='nickw' visible='true' lat='50.927844' lon='-1.347703'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924239' timestamp='2007-02-13T19:46:58+00:00' user='Dean Earley' visible='true' lat='50.9610302' lon='-1.3734698'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706227' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9097968' lon='-1.3791903'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28414270' timestamp='2007-05-01T23:49:48+01:00' user='nickw' visible='true' lat='50.9403068' lon='-1.3752344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29512143' timestamp='2007-06-17T22:19:03+01:00' visible='true' lat='50.9747249' lon='-1.3516555'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18347836' timestamp='2007-02-18T20:19:13+00:00' visible='true' lat='50.9311107' lon='-1.4131391'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600481' timestamp='2007-05-03T00:08:34+01:00' visible='true' lat='50.9397' lon='-1.4290126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='596301' timestamp='2006-09-13T00:41:09+01:00' user='Dean Earley' visible='true' lat='50.8964919' lon='-1.320766' />
-  <node id='160232034' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9073517' lon='-1.3933924' />
-  <node id='21636945' timestamp='2006-12-18T21:41:05+00:00' user='nickw' visible='true' lat='50.9186099' lon='-1.4308106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746409' timestamp='2007-02-18T20:18:32+00:00' visible='true' lat='50.9900016' lon='-1.3423388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904019' timestamp='2007-05-10T01:07:14+01:00' user='LivingWithDragons' visible='true' lat='50.9810756' lon='-1.4449519'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957239' timestamp='2006-11-10T21:58:55+00:00' user='nickw' visible='true' lat='50.912282' lon='-1.4204737'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973106' timestamp='2006-11-13T00:42:43+00:00' user='Dean Earley' visible='true' lat='50.9055261' lon='-1.4099029'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372797' timestamp='2007-10-29T08:05:07+00:00' user='nickw' visible='true' lat='50.9282413' lon='-1.4414647'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29387395' timestamp='2007-05-24T10:51:06+01:00' visible='true' lat='50.9646904' lon='-1.3650589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689090' timestamp='2006-12-23T10:22:20+00:00' user='nickw' visible='true' lat='50.9434751' lon='-1.3888094'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816290' timestamp='2007-05-31T21:52:23+01:00' visible='true' lat='50.9912575' lon='-1.3540102'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275659' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true' lat='50.9115187' lon='-1.4318681'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435791' timestamp='2007-12-14T21:43:12+00:00' user='nickw' visible='true' lat='50.9371764' lon='-1.4312325'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298275' timestamp='2006-09-02T12:59:40+01:00' user='Dean Earley' visible='true' lat='50.9605878' lon='-1.392757' />
-  <node id='29632130' timestamp='2007-05-26T19:19:44+01:00' visible='true' lat='50.956798' lon='-1.3668573'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20136219' timestamp='2006-10-28T02:09:02+01:00' user='Dean Earley' visible='true' lat='50.9182721' lon='-1.3563928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984726' timestamp='2007-01-10T00:12:09+00:00' user='nickw' visible='true' lat='50.9437394' lon='-1.3902975'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25504284' timestamp='2007-01-28T19:31:52+00:00' user='nickw' visible='true' lat='50.9981888' lon='-1.3490261'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548699' timestamp='2007-05-24T10:50:50+01:00' visible='true' lat='50.9640999' lon='-1.3686542'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794904' timestamp='2007-05-30T22:23:51+01:00' user='nickw' visible='true' lat='50.918728' lon='-1.3529589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092040' timestamp='2007-10-12T14:11:15+01:00' user='SteveC' visible='true' lat='50.9308057' lon='-1.4478947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914420' timestamp='2007-06-03T16:22:51+01:00' visible='true' lat='50.9831747' lon='-1.3626877'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708020' timestamp='2007-05-28T12:04:04+01:00' visible='true' lat='50.9841821' lon='-1.3638266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830674' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9245183' lon='-1.3634949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710896' timestamp='2007-05-28T14:29:53+01:00' visible='true' lat='50.9853629' lon='-1.3568822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='301577' timestamp='2007-03-25T19:25:24+01:00' user='Dean Earley' visible='true' lat='50.9061423' lon='-1.3979161' />
-  <node id='29728885' timestamp='2007-05-28T19:12:37+01:00' visible='true' lat='50.9706794' lon='-1.3592052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815671' timestamp='2007-05-31T21:48:06+01:00' visible='true' lat='50.9897576' lon='-1.3529969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071399' timestamp='2006-08-11T02:48:13+01:00' user='Dean Earley' visible='true' lat='50.9233627' lon='-1.360399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254902' timestamp='2007-01-19T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9108114' lon='-1.4022627' />
-  <node id='325673' timestamp='2007-04-05T14:22:57+01:00' user='Dean Earley' visible='true' lat='50.9424' lon='-1.42503' />
-  <node id='14743128' timestamp='2007-04-03T00:52:12+01:00' user='Dean Earley' visible='true' lat='50.9189467' lon='-1.4291439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639974' timestamp='2007-02-04T22:51:21+00:00' user='Dean Earley' visible='true' lat='50.9000053' lon='-1.3792375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282097' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.9764369' lon='-1.4067456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815432' timestamp='2007-05-31T21:37:04+01:00' visible='true' lat='50.9872368' lon='-1.3541103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29708042' timestamp='2007-05-28T12:04:12+01:00' visible='true' lat='50.9786032' lon='-1.3657591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157188693' timestamp='2007-12-08T19:58:39+00:00' user='nickw' visible='true' lat='50.9389742' lon='-1.4500734'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29925391' timestamp='2007-06-03T20:40:36+01:00' visible='true' lat='50.9808689' lon='-1.362705'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021750' timestamp='2007-05-22T00:20:10+01:00' user='Dean Earley' visible='true' lat='50.9426243' lon='-1.403385'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29860318' timestamp='2007-06-02T11:30:15+01:00' visible='true' lat='50.9202967' lon='-1.4425673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21677593' timestamp='2007-02-11T00:33:29+00:00' visible='true' lat='50.9044951' lon='-1.4030333'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180204' timestamp='2007-04-29T02:05:34+01:00' user='Dean Earley' visible='true' lat='50.9625514' lon='-1.4218516'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675840' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9321093' lon='-1.3733787' />
-  <node id='254949' timestamp='2006-09-04T02:08:09+01:00' user='Dean Earley' visible='true' lat='50.9511598' lon='-1.4172098' />
-  <node id='160209416' timestamp='2007-12-10T19:07:06+00:00' user='sladen' visible='true' lat='50.9234072' lon='-1.3859766' />
-  <node id='48965770' timestamp='2007-09-11T00:11:34+01:00' visible='true' lat='50.9025867' lon='-1.4063329'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935998' timestamp='2007-05-11T00:59:43+01:00' visible='true' lat='50.941898' lon='-1.4430865'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2433499' timestamp='2006-09-03T01:41:00+01:00' user='Dean Earley' visible='true' lat='50.9711265' lon='-1.3507152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29909668' timestamp='2007-06-03T14:54:18+01:00' visible='true' lat='50.968154' lon='-1.3523495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275642' timestamp='2007-06-01T16:40:28+01:00' user='Dean Earley' visible='true' lat='50.915824' lon='-1.4335351'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549388' timestamp='2007-05-24T11:22:52+01:00' visible='true' lat='50.9628979' lon='-1.3731908'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613413' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9880808' lon='-1.4139547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='413143' timestamp='2007-04-05T14:22:57+01:00' user='Dean Earley' visible='true' lat='50.9175' lon='-1.39872' />
-  <node id='29464243' timestamp='2007-05-22T00:19:11+01:00' user='Dean Earley' visible='true' lat='50.9351846' lon='-1.4132305'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122325190' timestamp='2007-11-18T19:05:55+00:00' user='nickw' visible='true' lat='50.9146587' lon='-1.4363753'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30432001' timestamp='2007-06-16T16:26:11+01:00' visible='true' lat='50.9715832' lon='-1.3517322'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903746' timestamp='2007-05-10T00:36:37+01:00' visible='true' lat='50.9366167' lon='-1.364397'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422979' timestamp='2007-04-29T20:37:31+01:00' user='Dean Earley' visible='true' lat='50.936237' lon='-1.4116314' />
-  <node id='21091855' timestamp='2006-11-19T12:09:13+00:00' user='nickw' visible='true' lat='50.9085126' lon='-1.4211588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949956' timestamp='2007-01-07T12:38:54+00:00' user='nickw' visible='true' lat='50.9964399' lon='-1.3874625'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021795' timestamp='2007-04-03T00:52:58+01:00' user='Ben' visible='true' lat='50.9585626' lon='-1.3964196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896422' timestamp='2007-10-29T15:43:35+00:00' user='Dean Earley' visible='true' lat='50.9658999' lon='-1.3859276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124379' timestamp='2007-06-09T19:43:17+01:00' user='nickw' visible='true' lat='50.9254638' lon='-1.3502782'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745438' timestamp='2007-10-31T15:18:30+00:00' user='Dean Earley' visible='true' lat='50.9668858' lon='-1.3507762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30291052' timestamp='2007-06-13T09:33:00+01:00' visible='true' lat='50.9673379' lon='-1.3828632'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675808' timestamp='2007-10-29T16:22:03+00:00' user='Nick Dyer' visible='true' lat='50.9107829' lon='-1.4402708'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90609425' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true' lat='50.9115891' lon='-1.4283748' />
-  <node id='10942563' timestamp='2007-03-23T22:53:42+00:00' user='nickw' visible='true' lat='50.9046282' lon='-1.3699478'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924100' timestamp='2007-01-06T14:28:58+00:00' user='nickw' visible='true' lat='50.9403869' lon='-1.3742931'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29796782' timestamp='2007-05-30T22:22:06+01:00' user='nickw' visible='true' lat='50.9215725' lon='-1.3563312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14707267' timestamp='2006-09-02T12:37:44+01:00' user='Dean Earley' visible='true' lat='50.96803' lon='-1.33337'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110850' timestamp='2006-10-27T23:39:26+01:00' user='Dean Earley' visible='true' lat='50.9351726' lon='-1.3668722'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976700' timestamp='2006-11-13T21:39:15+00:00' user='nickw' visible='true' lat='50.9347276' lon='-1.4236513'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949994' timestamp='2007-01-07T12:38:57+00:00' user='nickw' visible='true' lat='50.9829591' lon='-1.3861116'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949973' timestamp='2007-01-07T12:38:55+00:00' user='nickw' visible='true' lat='50.9870112' lon='-1.3830521'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='324993' timestamp='2006-11-11T17:26:27+00:00' user='Dean Earley' visible='true' lat='50.9600393' lon='-1.4257188' />
-  <node id='30229575' timestamp='2007-06-12T00:14:40+01:00' user='nickw' visible='true' lat='50.9341616' lon='-1.3536459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12595079' timestamp='2006-08-04T12:00:28+01:00' user='nickw' visible='true' lat='50.9184342' lon='-1.4139775'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='245148034' timestamp='2008-02-03T06:13:06+00:00' user='sladen' visible='true' lat='50.908933' lon='-1.4023887' />
-  <node id='28249857' timestamp='2007-04-29T21:41:40+01:00' visible='true' lat='50.9189074' lon='-1.4409733'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254294' timestamp='2007-02-18T20:18:38+00:00' visible='true' lat='50.9782985' lon='-1.3420354' />
-  <node id='142620780' timestamp='2007-11-29T22:31:13+00:00' user='nickw' visible='true' lat='50.9177757' lon='-1.4127811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245152509' timestamp='2008-02-03T06:21:47+00:00' user='sladen' visible='true' lat='50.9077369' lon='-1.3980028' />
-  <node id='232014679' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true' lat='50.9298805' lon='-1.3678436' />
-  <node id='13705972' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8887642' lon='-1.39474' />
-  <node id='325238' timestamp='2006-11-11T17:26:36+00:00' user='Dean Earley' visible='true' lat='50.9347629' lon='-1.330459' />
-  <node id='245147917' timestamp='2008-02-03T06:04:04+00:00' user='sladen' visible='true' lat='50.9093605' lon='-1.4040624' />
-  <node id='27563296' timestamp='2007-04-23T22:47:36+01:00' visible='true' lat='50.929834' lon='-1.3975765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505745' timestamp='2007-05-22T19:28:34+01:00' visible='true' lat='50.9934963' lon='-1.3552846'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999072' timestamp='2007-06-05T23:29:05+01:00' user='nickw' visible='true' lat='50.9909599' lon='-1.4288054'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984752' timestamp='2007-04-29T02:33:44+01:00' user='Dean Earley' visible='true' lat='50.9515723' lon='-1.4055374'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957222' timestamp='2006-11-10T21:58:54+00:00' user='nickw' visible='true' lat='50.914758' lon='-1.4200443'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28341790' timestamp='2007-04-30T21:49:01+01:00' user='nickw' visible='true' lat='50.9114844' lon='-1.3632811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071416' timestamp='2006-08-11T02:48:15+01:00' user='Dean Earley' visible='true' lat='50.923951' lon='-1.3547133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21091885' timestamp='2006-11-19T12:09:15+00:00' user='nickw' visible='true' lat='50.9226671' lon='-1.420163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28932441' timestamp='2007-05-10T21:05:57+01:00' user='Dean Earley' visible='true' lat='50.9641987' lon='-1.4626697'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161992' timestamp='2007-09-16T10:21:43+01:00' user='mike l' visible='true' lat='50.9827747' lon='-1.3840536'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127593' timestamp='2007-10-29T08:19:14+00:00' user='nickw' visible='true' lat='50.9352522' lon='-1.4376106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372782' timestamp='2007-12-14T21:30:35+00:00' user='nickw' visible='true' lat='50.9306167' lon='-1.4427946'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339167' timestamp='2007-05-01T18:52:31+01:00' visible='true' lat='50.9689304' lon='-1.3604297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549339' timestamp='2007-05-26T20:16:01+01:00' visible='true' lat='50.9607579' lon='-1.3610807'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30229564' timestamp='2007-06-12T00:14:37+01:00' user='nickw' visible='true' lat='50.9331099' lon='-1.3547584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816410' timestamp='2007-05-31T21:56:32+01:00' visible='true' lat='50.9894605' lon='-1.355339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342570' timestamp='2007-04-30T22:13:36+01:00' user='nickw' visible='true' lat='50.905801' lon='-1.3683645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='107808701' timestamp='2007-11-11T18:09:37+00:00' user='Dean Earley' visible='true' lat='50.9152082' lon='-1.3592082'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194900' timestamp='2007-04-29T20:37:35+01:00' user='Dean Earley' visible='true' lat='50.9406471' lon='-1.4081382'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794907' timestamp='2007-05-30T21:44:19+01:00' user='nickw' visible='true' lat='50.9152336' lon='-1.3543893'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600425' timestamp='2006-12-16T10:13:53+00:00' user='nickw' visible='true' lat='50.909707' lon='-1.4167307'>
-    <tag k='name' v='TINTER GR' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668194' timestamp='2007-01-04T21:05:56+00:00' user='nickw' visible='true' lat='50.9838881' lon='-1.3903072'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110909' timestamp='2006-10-27T23:39:32+01:00' user='Dean Earley' visible='true' lat='50.9359284' lon='-1.3632728'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110926' timestamp='2006-10-27T23:39:33+01:00' user='Dean Earley' visible='true' lat='50.9349364' lon='-1.3641459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110944' timestamp='2006-10-27T23:39:35+01:00' user='Dean Earley' visible='true' lat='50.9354462' lon='-1.3636253'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743162' timestamp='2006-09-03T00:38:40+01:00' user='Dean Earley' visible='true' lat='50.9206794' lon='-1.4320394'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816637' timestamp='2007-05-31T22:10:49+01:00' visible='true' lat='50.9882954' lon='-1.3615163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249827' timestamp='2007-04-29T21:41:34+01:00' visible='true' lat='50.9190793' lon='-1.4453097'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='132716' timestamp='2006-09-02T12:59:40+01:00' user='Dean Earley' visible='true' lat='50.9611965' lon='-1.4007876' />
-  <node id='29856357' timestamp='2007-06-02T08:31:27+01:00' user='nickw' visible='true' lat='50.9475415' lon='-1.3935471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27467499' timestamp='2007-04-19T17:50:45+01:00' visible='true' lat='50.9293567' lon='-1.3800991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29135263' timestamp='2007-05-15T20:56:01+01:00' user='nickw' visible='true' lat='50.9438799' lon='-1.3858345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329524' timestamp='2007-04-05T14:22:58+01:00' user='Dean Earley' visible='true' lat='50.9663' lon='-1.42322' />
-  <node id='30780823' timestamp='2007-06-22T21:09:51+01:00' user='Steve Chilton' visible='true' lat='50.9073449' lon='-1.4069855'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961048' timestamp='2006-11-11T17:12:37+00:00' user='Dean Earley' visible='true' lat='50.9499125' lon='-1.3742105'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518784' timestamp='2007-04-05T14:22:58+01:00' user='Dean Earley' visible='true' lat='50.9194747' lon='-1.3898633' />
-  <node id='30290749' timestamp='2007-06-13T09:24:02+01:00' visible='true' lat='50.9648745' lon='-1.3762293'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29512665' timestamp='2007-05-28T10:44:50+01:00' visible='true' lat='50.9786436' lon='-1.3536236'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998062' timestamp='2007-06-05T23:00:21+01:00' user='nickw' visible='true' lat='50.9865454' lon='-1.4119584'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372767' timestamp='2007-05-01T10:05:19+01:00' visible='true' lat='50.9332296' lon='-1.4399132'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505732' timestamp='2007-05-22T19:28:31+01:00' visible='true' lat='50.9904314' lon='-1.3529209'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704523' timestamp='2007-05-28T10:40:38+01:00' visible='true' lat='50.9808141' lon='-1.3569048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92684700' timestamp='2007-10-30T17:26:33+00:00' user='Nick Dyer' visible='true' lat='50.9616736' lon='-1.4230116' />
-  <node id='28252949' timestamp='2007-04-29T22:00:39+01:00' visible='true' lat='50.9440549' lon='-1.4285212'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29872353' timestamp='2007-06-02T19:03:54+01:00' visible='true' lat='50.9174137' lon='-1.3513605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19035793' timestamp='2007-04-03T00:54:00+01:00' user='Ben' visible='true' lat='50.9367952' lon='-1.3954343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254578' timestamp='2007-12-10T19:13:51+00:00' user='sladen' visible='true' lat='50.9121305' lon='-1.3894356' />
-  <node id='387810' timestamp='2007-04-05T14:22:58+01:00' user='Dean Earley' visible='true' lat='50.9274' lon='-1.39537' />
-  <node id='24949943' timestamp='2007-01-07T12:38:53+00:00' user='nickw' visible='true' lat='50.9949894' lon='-1.3859129'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298241' timestamp='2007-01-06T14:30:57+00:00' user='Dean Earley' visible='true' lat='51.0004699' lon='-1.3567915' />
-  <node id='18398439' timestamp='2006-10-17T23:09:39+01:00' user='nickw' visible='true' lat='50.9654593' lon='-1.4134343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464262' timestamp='2007-05-22T00:19:15+01:00' user='Dean Earley' visible='true' lat='50.9371891' lon='-1.4072043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29728872' timestamp='2007-05-28T19:12:27+01:00' visible='true' lat='50.9721771' lon='-1.3568445'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20972777' timestamp='2006-11-13T00:06:56+00:00' user='Dean Earley' visible='true' lat='50.9018718' lon='-1.4104465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30221326' timestamp='2007-06-11T21:41:37+01:00' visible='true' lat='50.985765' lon='-1.3557324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722358' timestamp='2006-10-06T23:46:14+01:00' user='Dean Earley' visible='true' lat='50.955026' lon='-1.3720572'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999020' timestamp='2007-06-05T23:29:02+01:00' user='nickw' visible='true' lat='50.9945612' lon='-1.4380634'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21092047' timestamp='2007-05-03T00:08:33+01:00' visible='true' lat='50.940479' lon='-1.4330524'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29929002' timestamp='2007-06-03T21:58:02+01:00' visible='true' lat='50.9743009' lon='-1.3615892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348122' timestamp='2007-04-30T23:45:31+01:00' user='nickw' visible='true' lat='50.9330472' lon='-1.3639876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21600583' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true' lat='50.9835105' lon='-1.3990883'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183633' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9063234' lon='-1.3787154' />
-  <node id='29001617' timestamp='2007-09-23T16:33:08+01:00' user='mike l' visible='true' lat='50.9394748' lon='-1.3660343'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146234' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9184627' lon='-1.4036848' />
-  <node id='66582042' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true' lat='50.9314764' lon='-1.451285' />
-  <node id='20976806' timestamp='2006-11-13T21:50:50+00:00' user='nickw' visible='true' lat='50.9263133' lon='-1.4215256'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001306' timestamp='2007-05-15T20:38:58+01:00' user='nickw' visible='true' lat='50.9324901' lon='-1.3732708'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='650803' timestamp='2007-04-05T14:22:59+01:00' user='Dean Earley' visible='true' lat='50.9165' lon='-1.39887' />
-  <node id='21561789' timestamp='2007-04-03T00:52:13+01:00' user='Dean Earley' visible='true' lat='50.9253106' lon='-1.4390336'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269151' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='51.0002006' lon='-1.3346563' />
-  <node id='30290730' timestamp='2007-10-29T15:43:34+00:00' user='Dean Earley' visible='true' lat='50.9675986' lon='-1.3825892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956709' timestamp='2007-06-26T23:49:20+01:00' user='nickw' visible='true' lat='50.9287732' lon='-1.3480622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25302625' timestamp='2007-01-19T18:06:00+00:00' user='Dean Earley' visible='true' lat='50.9737986' lon='-1.3680872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90659223' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9040796' lon='-1.4042322' />
-  <node id='474850' timestamp='2007-04-05T14:22:59+01:00' user='Dean Earley' visible='true' lat='50.9374413' lon='-1.3627356' />
-  <node id='30956603' timestamp='2007-06-26T23:45:01+01:00' user='nickw' visible='true' lat='50.9290644' lon='-1.3492889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745513' timestamp='2007-01-19T18:27:14+00:00' user='Dean Earley' visible='true' lat='50.9581913' lon='-1.3959739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20966252' timestamp='2006-11-12T17:38:32+00:00' user='Dean Earley' visible='true' lat='50.9452248' lon='-1.3731335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87825997' timestamp='2007-10-26T12:21:46+01:00' user='Nick Dyer' visible='true' lat='50.8993262' lon='-1.438133' />
-  <node id='24668373' timestamp='2007-01-04T21:06:49+00:00' user='nickw' visible='true' lat='50.9883404' lon='-1.4049887'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908385' timestamp='2006-12-18T23:27:56+00:00' visible='true' lat='50.9338974' lon='-1.3764351' />
-  <node id='28183736' timestamp='2007-04-29T02:25:39+01:00' user='Dean Earley' visible='true' lat='50.950631' lon='-1.4140133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='242725' timestamp='2006-09-02T12:59:40+01:00' user='Dean Earley' visible='true' lat='50.9368257' lon='-1.3813294' />
-  <node id='206162418' timestamp='2008-01-04T19:28:06+00:00' user='nickw' visible='true' lat='50.9717715' lon='-1.3825003'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254872' timestamp='2007-02-18T21:30:29+00:00' visible='true' lat='50.9178278' lon='-1.4802876' />
-  <node id='26114379' timestamp='2007-02-23T21:46:20+00:00' user='nickw' visible='true' lat='50.9069473' lon='-1.3921407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305608' timestamp='2005-12-11T11:52:16+00:00' user='nickw' visible='true' lat='50.9908962' lon='-1.3959718' />
-  <node id='25296378' timestamp='2007-01-19T09:58:45+00:00' user='Dean Earley' visible='true' lat='50.9728381' lon='-1.3509083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071219' timestamp='2006-08-11T02:47:53+01:00' user='Dean Earley' visible='true' lat='50.9200565' lon='-1.3706556'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160407015' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true' lat='50.9121735' lon='-1.4336019' />
-  <node id='28252896' timestamp='2007-04-29T22:00:34+01:00' visible='true' lat='50.9471364' lon='-1.4313167'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071271' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9179691' lon='-1.3605557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636795' timestamp='2007-04-29T02:33:50+01:00' user='Dean Earley' visible='true' lat='50.9504007' lon='-1.4103523'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28582958' timestamp='2007-05-02T23:57:47+01:00' visible='true' lat='50.9434796' lon='-1.4256995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945397' timestamp='2007-04-08T17:43:57+01:00' user='avantman42' visible='true' lat='50.9034182' lon='-1.3436828'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29392353' timestamp='2007-05-20T18:03:08+01:00' visible='true' lat='50.9629153' lon='-1.3547438'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21637744' timestamp='2007-04-03T00:54:22+01:00' user='Ben' visible='true' lat='50.9337266' lon='-1.3837228'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30089084' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true' lat='50.9672448' lon='-1.3788472'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325027' timestamp='2006-11-11T17:26:46+00:00' user='Dean Earley' visible='true' lat='50.9596752' lon='-1.4362192' />
-  <node id='24949888' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9932138' lon='-1.3766947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29505720' timestamp='2007-05-22T19:28:28+01:00' visible='true' lat='50.9882486' lon='-1.3519822'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='31163579' timestamp='2007-07-01T22:15:23+01:00' visible='true' lat='50.9652938' lon='-1.351945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28904034' timestamp='2007-05-10T01:07:19+01:00' user='LivingWithDragons' visible='true' lat='50.9812318' lon='-1.444806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29548682' timestamp='2007-05-24T10:50:48+01:00' visible='true' lat='50.9637019' lon='-1.3640227'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348727' timestamp='2006-12-16T17:47:22+00:00' user='David Currie' visible='true' lat='50.9955547' lon='-1.4475582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='285868' timestamp='2007-02-11T00:33:24+00:00' visible='true' lat='50.9027266' lon='-1.4040399' />
-  <node id='29461217' timestamp='2007-05-21T23:43:12+01:00' user='nickw' visible='true' lat='50.9065505' lon='-1.3972716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594933' timestamp='2006-08-04T11:58:26+01:00' user='nickw' visible='true' lat='50.9159967' lon='-1.4118604'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28583052' timestamp='2007-05-02T23:57:57+01:00' visible='true' lat='50.9385268' lon='-1.4302786'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984756' timestamp='2007-04-29T02:33:51+01:00' user='Dean Earley' visible='true' lat='50.9465406' lon='-1.4053985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252930' timestamp='2007-04-29T22:00:37+01:00' visible='true' lat='50.9462814' lon='-1.4285335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419439' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9415178' lon='-1.3702522'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90660060' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true' lat='50.904518' lon='-1.4105579' />
-  <node id='21636783' timestamp='2007-04-29T02:33:51+01:00' user='Dean Earley' visible='true' lat='50.9482049' lon='-1.409163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194398' timestamp='2007-04-29T08:20:28+01:00' visible='true' lat='50.9454876' lon='-1.4404463'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127610' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true' lat='50.9364854' lon='-1.4357133'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704312' timestamp='2007-05-28T10:32:52+01:00' visible='true' lat='50.986492' lon='-1.3581201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331317' timestamp='2006-11-11T21:24:42+00:00' user='Dean Earley' visible='true' lat='50.9992' lon='-1.35546' />
-  <node id='28194432' timestamp='2007-04-29T08:20:32+01:00' visible='true' lat='50.9468407' lon='-1.4353228'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561529' timestamp='2007-03-24T16:44:18+00:00' user='Dean Earley' visible='true' lat='50.9255185' lon='-1.430831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964144' timestamp='2006-09-08T02:12:02+01:00' user='Dean Earley' visible='true' lat='50.919948' lon='-1.3798126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157238291' timestamp='2007-12-08T20:33:30+00:00' user='nickw' visible='true' lat='50.9465804' lon='-1.4486517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071454' timestamp='2007-02-18T20:18:48+00:00' visible='true' lat='50.9191621' lon='-1.3640868'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269927' timestamp='2007-04-29T02:33:51+01:00' user='Dean Earley' visible='true' lat='50.9510721' lon='-1.4139866' />
-  <node id='28342630' timestamp='2007-04-30T22:13:41+01:00' user='nickw' visible='true' lat='50.9116387' lon='-1.3634971'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29171746' timestamp='2007-05-16T23:47:59+01:00' user='nickw' visible='true' lat='50.9406283' lon='-1.3910581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28345052' timestamp='2007-04-30T23:00:37+01:00' user='nickw' visible='true' lat='50.9296362' lon='-1.3619899'>
-    <tag k='name' v='KINGSDN WY' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14957861' timestamp='2007-05-10T21:08:05+01:00' user='Dean Earley' visible='true' lat='50.9583697' lon='-1.4517046'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='26728563' timestamp='2007-03-25T18:42:37+01:00' user='Dean Earley' visible='true' lat='50.9046395' lon='-1.3691613'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962265' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9554151' lon='-1.3645897' />
-  <node id='28259893' timestamp='2007-04-29T23:09:25+01:00' user='Andy Street' visible='true' lat='50.903342' lon='-1.3472678'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='661181' timestamp='2007-04-05T14:22:59+01:00' user='Dean Earley' visible='true' lat='50.913213' lon='-1.3608457' />
-  <node id='29998584' timestamp='2007-06-05T23:13:55+01:00' user='nickw' visible='true' lat='50.9567961' lon='-1.4560031'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998079' timestamp='2007-06-05T23:00:23+01:00' user='nickw' visible='true' lat='50.9901283' lon='-1.4096439'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160183644' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.9009377' lon='-1.3812645' />
-  <node id='21689175' timestamp='2006-12-23T10:22:26+00:00' user='nickw' visible='true' lat='50.9390518' lon='-1.3714631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254842' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9069076' lon='-1.4218517' />
-  <node id='157209161' timestamp='2007-12-08T20:14:58+00:00' user='nickw' visible='true' lat='50.9425248' lon='-1.4480048'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28372786' timestamp='2007-12-14T21:28:02+00:00' user='nickw' visible='true' lat='50.928436' lon='-1.4390941'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388943' timestamp='2007-04-05T14:22:59+01:00' user='Dean Earley' visible='true' lat='50.9416' lon='-1.40065' />
-  <node id='29002293' timestamp='2007-05-12T09:57:58+01:00' user='nickw' visible='true' lat='50.9356522' lon='-1.3672751'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639902' timestamp='2007-02-04T22:51:15+00:00' user='Dean Earley' visible='true' lat='50.9017347' lon='-1.3821295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90577076' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9116627' lon='-1.4479798' />
-  <node id='28345069' timestamp='2007-04-30T23:00:39+01:00' user='nickw' visible='true' lat='50.9320635' lon='-1.364006'>
-    <tag k='name' v='PINEFLD RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325200' timestamp='2006-11-11T17:26:49+00:00' user='Dean Earley' visible='true' lat='50.9445293' lon='-1.3639531' />
-  <node id='28249912' timestamp='2007-04-29T21:41:46+01:00' visible='true' lat='50.9155432' lon='-1.4529792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='469875' timestamp='2007-11-18T18:58:29+00:00' user='nickw' visible='true' lat='50.9134248' lon='-1.4323908' />
-  <node id='20972811' timestamp='2007-02-06T00:16:42+00:00' user='Dean Earley' visible='true' lat='50.899064' lon='-1.3959581'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924613' timestamp='2007-06-03T20:17:26+01:00' visible='true' lat='50.9830007' lon='-1.3627857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962312' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9579291' lon='-1.3650017' />
-  <node id='254311' timestamp='2007-02-18T20:18:31+00:00' visible='true' lat='50.9887662' lon='-1.3429324' />
-  <node id='160247661' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9426156' lon='-1.3747843' />
-  <node id='206162252' timestamp='2008-01-04T19:26:29+00:00' user='nickw' visible='true' lat='50.9731413' lon='-1.3839605'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29491407' timestamp='2007-05-22T12:23:41+01:00' visible='true' lat='50.9243596' lon='-1.3933537'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30259409' timestamp='2007-06-12T21:04:24+01:00' visible='true' lat='50.9786114' lon='-1.3593306'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194856' timestamp='2007-04-29T08:57:56+01:00' user='Dean Earley' visible='true' lat='50.9445525' lon='-1.4068831'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25675791' timestamp='2007-02-06T01:03:02+00:00' user='Dean Earley' visible='true' lat='50.9093923' lon='-1.4473716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='170445' timestamp='2005-08-14T22:31:06+01:00' visible='true' lat='50.9473305' lon='-1.3659171' />
-  <node id='25296621' timestamp='2007-01-19T10:19:59+00:00' user='Dean Earley' visible='true' lat='50.9707646' lon='-1.3664049'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92681277' timestamp='2007-10-31T12:24:56+00:00' user='Dean Earley' visible='true' lat='50.961601' lon='-1.4247969' />
-  <node id='254475' timestamp='2007-02-13T18:31:41+00:00' user='Dean Earley' visible='true' lat='50.9757083' lon='-1.4329856' />
-  <node id='160216597' timestamp='2007-12-10T19:13:23+00:00' user='sladen' visible='true' lat='50.9137107' lon='-1.3900965' />
-  <node id='28903411' timestamp='2007-05-09T23:36:03+01:00' visible='true' lat='50.9463338' lon='-1.363925'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911802' timestamp='2007-06-03T15:31:38+01:00' visible='true' lat='50.9871315' lon='-1.3538805'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721082' timestamp='2007-01-19T09:38:44+00:00' user='Dean Earley' visible='true' lat='50.971015' lon='-1.3506985'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071347' timestamp='2007-02-18T20:18:47+00:00' visible='true' lat='50.916312' lon='-1.3648152'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='87937792' timestamp='2007-10-26T15:04:01+01:00' user='Nick Dyer' visible='true' lat='50.9701661' lon='-1.4212796' />
-  <node id='21561546' timestamp='2006-12-13T20:09:34+00:00' user='nickw' visible='true' lat='50.9227881' lon='-1.4259995'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329464' timestamp='2007-04-05T14:23:00+01:00' user='Dean Earley' visible='true' lat='50.9236469' lon='-1.3963402'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30089065' timestamp='2007-06-08T18:11:59+01:00' visible='true' lat='50.9657416' lon='-1.3753617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29134144' timestamp='2007-05-15T20:47:34+01:00' user='nickw' visible='true' lat='50.9416048' lon='-1.3907267'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91127572' timestamp='2007-10-29T08:19:13+00:00' user='nickw' visible='true' lat='50.9352553' lon='-1.4409582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668356' timestamp='2007-01-04T21:06:44+00:00' user='nickw' visible='true' lat='50.9833878' lon='-1.3932276'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290715' timestamp='2007-10-04T19:38:15+01:00' user='Gregory Williams' visible='true' lat='50.9687404' lon='-1.3816622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640034' timestamp='2007-03-04T18:58:18+00:00' user='Dean Earley' visible='true' lat='50.913342' lon='-1.3644673'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133007' timestamp='2007-05-15T20:36:36+01:00' user='nickw' visible='true' lat='50.9324289' lon='-1.3758953'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419434' timestamp='2006-12-02T23:18:51+00:00' user='Dean Earley' visible='true' lat='50.9410749' lon='-1.3706716'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964138' timestamp='2006-09-08T02:12:01+01:00' user='Dean Earley' visible='true' lat='50.9171179' lon='-1.3820041'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914347' timestamp='2007-06-03T16:16:31+01:00' visible='true' lat='50.9854891' lon='-1.3604656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998986' timestamp='2007-06-05T23:28:57+01:00' user='nickw' visible='true' lat='50.9910099' lon='-1.4373482'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='675859' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true' lat='50.9286256' lon='-1.3706579' />
-  <node id='325174' timestamp='2006-11-11T17:26:52+00:00' user='Dean Earley' visible='true' lat='50.9495862' lon='-1.3972566' />
-  <node id='28830665' timestamp='2007-05-05T09:03:33+01:00' user='nickw' visible='true' lat='50.9238703' lon='-1.3639468'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25761516' timestamp='2007-05-12T09:45:13+01:00' user='nickw' visible='true' lat='50.9352115' lon='-1.3661508'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21598846' timestamp='2007-02-04T22:51:51+00:00' user='Dean Earley' visible='true' lat='50.8980892' lon='-1.3802384'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='305585' timestamp='2005-12-11T11:52:12+00:00' user='nickw' visible='true' lat='50.9957242' lon='-1.39359' />
-  <node id='29621231' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9739995' lon='-1.3767327'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348697' timestamp='2006-10-16T21:59:52+01:00' user='nickw' visible='true' lat='50.9762437' lon='-1.4093466'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13972744' timestamp='2008-01-31T17:11:18+00:00' user='Dean Earley' visible='true' lat='50.9104832' lon='-1.2484068'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='20957182' timestamp='2007-03-24T16:33:51+00:00' user='Dean Earley' visible='true' lat='50.917188' lon='-1.4166889'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325189' timestamp='2005-12-16T23:01:21+00:00' user='80n' visible='true' lat='50.9497747' lon='-1.372964' />
-  <node id='28582998' timestamp='2007-05-02T23:57:52+01:00' visible='true' lat='50.9411839' lon='-1.4305554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254838' timestamp='2007-02-18T21:30:30+00:00' visible='true' lat='50.9065724' lon='-1.4154176' />
-  <node id='26114363' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true' lat='50.9069945' lon='-1.3946284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25296295' timestamp='2007-01-19T09:52:16+00:00' user='Dean Earley' visible='true' lat='50.9810372' lon='-1.3610797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348314' timestamp='2007-04-30T23:48:46+01:00' user='nickw' visible='true' lat='50.9267357' lon='-1.3589375'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275710' timestamp='2007-04-03T00:52:15+01:00' user='Dean Earley' visible='true' lat='50.9214833' lon='-1.4323945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27563356' timestamp='2007-04-23T23:02:17+01:00' visible='true' lat='50.9296403' lon='-1.4002367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26114375' timestamp='2007-03-09T21:14:34+00:00' user='nickw' visible='true' lat='50.9079996' lon='-1.3920215'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398753' timestamp='2006-10-17T23:14:31+01:00' user='nickw' visible='true' lat='50.9511143' lon='-1.4208937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='271242' timestamp='2007-10-28T20:52:08+00:00' user='Nick Dyer' visible='true' lat='50.9229601' lon='-1.4340075'>
-    <tag k='place' v='suburb' />
-    <tag k='name' v='Shirley' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='21189058' timestamp='2006-11-22T23:51:56+00:00' user='crouchingbadger' visible='true' lat='50.9578564' lon='-1.4488356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27440005' timestamp='2007-04-18T02:00:19+01:00' visible='true' lat='50.9287154' lon='-1.3829344'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28236195' timestamp='2007-04-29T19:26:32+01:00' user='Andy Street' visible='true' lat='50.8995353' lon='-1.3589339'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783108' timestamp='2007-02-11T18:07:15+00:00' user='nickw' visible='true' lat='50.949114' lon='-1.3515103'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071330' timestamp='2006-08-11T02:48:08+01:00' user='Dean Earley' visible='true' lat='50.9206394' lon='-1.3614067'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816777' timestamp='2007-05-31T22:15:44+01:00' visible='true' lat='50.9875117' lon='-1.3609656'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949896' timestamp='2007-01-07T12:38:49+00:00' user='nickw' visible='true' lat='50.9955146' lon='-1.3774497'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25340623' timestamp='2007-06-13T09:24:42+01:00' visible='true' lat='50.9638753' lon='-1.3771944'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924194' timestamp='2007-01-06T14:37:57+00:00' user='nickw' visible='true' lat='50.9443201' lon='-1.3727653'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388879' timestamp='2007-04-05T14:23:00+01:00' user='Dean Earley' visible='true' lat='50.9388226' lon='-1.39604' />
-  <node id='30256890' timestamp='2007-06-12T20:38:16+01:00' visible='true' lat='50.9797433' lon='-1.3576687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50815074' timestamp='2007-11-19T14:00:59+00:00' user='nickw' visible='true' lat='50.9447772' lon='-1.4449623'>
-    <tag k='amenity' v='school' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </node>
-  <node id='25282093' timestamp='2007-01-17T21:10:08+00:00' user='David Currie' visible='true' lat='50.9756256' lon='-1.4085633'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398390' timestamp='2006-10-17T23:09:36+01:00' user='nickw' visible='true' lat='50.946237' lon='-1.4407257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160337636' timestamp='2007-12-10T20:19:02+00:00' user='sladen' visible='true' lat='50.9480234' lon='-1.4699191' />
-  <node id='28244169' timestamp='2007-04-29T20:36:17+01:00' user='Andy Street' visible='true' lat='50.9033272' lon='-1.352372'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14707282' timestamp='2006-12-14T23:57:11+00:00' user='Dean Earley' visible='true' lat='50.9664041' lon='-1.3255991'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636734' timestamp='2007-04-29T02:33:25+01:00' user='Dean Earley' visible='true' lat='50.9498944' lon='-1.4063839'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='157238269' timestamp='2007-12-08T20:33:29+00:00' user='nickw' visible='true' lat='50.9469872' lon='-1.4463471'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269325' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9831862' lon='-1.3836386' />
-  <node id='29909664' timestamp='2007-06-03T14:54:18+01:00' visible='true' lat='50.9686832' lon='-1.3544602'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914189' timestamp='2007-06-03T16:01:58+01:00' visible='true' lat='50.9837053' lon='-1.3591341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008368' timestamp='2007-05-12T15:11:23+01:00' user='nickw' visible='true' lat='50.9267189' lon='-1.3522076'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29838348' timestamp='2007-06-01T20:15:02+01:00' visible='true' lat='50.9818612' lon='-1.3634178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141598' timestamp='2007-09-05T17:46:34+01:00' user='mike l' visible='true' lat='50.9350435' lon='-1.3936966'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774716' timestamp='2007-09-13T20:11:57+01:00' user='mike l' visible='true' lat='50.9464491' lon='-1.4489876'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727980' timestamp='2006-09-02T19:02:01+01:00' user='Dean Earley' visible='true' lat='50.9275596' lon='-1.385245'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30124204' timestamp='2007-06-09T19:35:52+01:00' user='nickw' visible='true' lat='50.9225303' lon='-1.3483362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961014' timestamp='2006-11-11T17:11:54+00:00' user='Dean Earley' visible='true' lat='50.9312628' lon='-1.5655813'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28240342' timestamp='2007-04-29T20:02:57+01:00' user='Andy Street' visible='true' lat='50.9080983' lon='-1.3492052'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816738' timestamp='2007-05-31T22:13:31+01:00' visible='true' lat='50.9911753' lon='-1.3557645'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110843' timestamp='2006-10-27T23:39:25+01:00' user='Dean Earley' visible='true' lat='50.9343031' lon='-1.3622069'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28107724' timestamp='2007-04-27T23:44:18+01:00' visible='true' lat='50.9323607' lon='-1.3874729'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133056' timestamp='2007-05-15T20:36:47+01:00' user='nickw' visible='true' lat='50.9327451' lon='-1.3773704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254885' timestamp='2007-10-17T01:27:50+01:00' user='Dean Earley' visible='true' lat='50.9264015' lon='-1.4415895' />
-  <node id='28903396' timestamp='2007-05-09T23:24:31+01:00' visible='true' lat='50.9470001' lon='-1.3666252'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='702356' timestamp='2007-09-20T19:40:27+01:00' user='mike l' visible='true' lat='50.9585955' lon='-1.355524' />
-  <node id='26781168' timestamp='2007-03-25T18:42:13+01:00' user='Dean Earley' visible='true' lat='50.9017632' lon='-1.3754157'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20133141' timestamp='2006-10-28T01:55:40+01:00' user='Dean Earley' visible='true' lat='50.9275641' lon='-1.35284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398768' timestamp='2006-10-17T23:14:32+01:00' user='nickw' visible='true' lat='50.9437983' lon='-1.4207502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160404157' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true' lat='50.9127472' lon='-1.4441934' />
-  <node id='30089094' timestamp='2007-06-08T23:30:34+01:00' visible='true' lat='50.9656125' lon='-1.3760739'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28936009' timestamp='2007-05-11T00:59:49+01:00' visible='true' lat='50.942224' lon='-1.4414566'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632147' timestamp='2007-05-26T19:19:57+01:00' visible='true' lat='50.957575' lon='-1.3664793'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342596' timestamp='2007-04-30T22:13:38+01:00' user='nickw' visible='true' lat='50.9035071' lon='-1.3727956'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668390' timestamp='2007-01-04T21:06:50+00:00' user='nickw' visible='true' lat='50.9882091' lon='-1.4049589'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21579414' timestamp='2006-12-14T13:52:57+00:00' user='David Currie' visible='true' lat='50.978327' lon='-1.4035927'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2073253' timestamp='2007-04-05T14:23:01+01:00' user='Dean Earley' visible='true' lat='50.93371' lon='-1.3908032' />
-  <node id='2773050' timestamp='2007-04-03T00:52:15+01:00' user='Dean Earley' visible='true' lat='50.9189505' lon='-1.4499903' />
-  <node id='29816286' timestamp='2007-05-31T21:52:22+01:00' visible='true' lat='50.9913054' lon='-1.3542757'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='383001' timestamp='2007-10-29T07:46:03+00:00' user='nickw' visible='true' lat='50.9274009' lon='-1.4159376' />
-  <node id='29871557' timestamp='2007-06-02T18:40:03+01:00' visible='true' lat='50.9153272' lon='-1.3518517'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924311' timestamp='2007-01-06T14:47:56+00:00' user='nickw' visible='true' lat='50.9835054' lon='-1.3683499'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29711123' timestamp='2007-05-28T14:39:20+01:00' visible='true' lat='50.9806916' lon='-1.3615247'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28259890' timestamp='2007-04-29T23:09:25+01:00' user='Andy Street' visible='true' lat='50.9037375' lon='-1.3466078'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971207' timestamp='2007-10-28T21:00:34+00:00' user='Nick Dyer' visible='true' lat='50.9078951' lon='-1.4146463'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='29530532' timestamp='2007-05-23T13:04:50+01:00' visible='true' lat='50.982714' lon='-1.3535969'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254640' timestamp='2006-10-27T00:48:14+01:00' user='Dean Earley' visible='true' lat='50.9148132' lon='-1.3942399' />
-  <node id='24949913' timestamp='2007-01-07T12:38:51+00:00' user='nickw' visible='true' lat='50.9920384' lon='-1.3774099'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='206162627' timestamp='2008-01-04T19:29:40+00:00' user='nickw' visible='true' lat='50.971221' lon='-1.3801163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721068' timestamp='2006-10-06T23:27:20+01:00' user='Dean Earley' visible='true' lat='50.9713147' lon='-1.3593459'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='125577112' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true' lat='50.963795' lon='-1.4250093' />
-  <node id='90675693' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true' lat='50.9013597' lon='-1.4445672' />
-  <node id='25896263' timestamp='2007-02-13T19:24:11+00:00' user='Dean Earley' visible='true' lat='50.9696882' lon='-1.3903495'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976764' timestamp='2006-11-13T21:50:47+00:00' user='nickw' visible='true' lat='50.9295815' lon='-1.4203534'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25639951' timestamp='2007-02-04T22:51:19+00:00' user='Dean Earley' visible='true' lat='50.9024991' lon='-1.3777453'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122339828' timestamp='2007-11-18T19:13:59+00:00' user='nickw' visible='true' lat='50.9203732' lon='-1.4333804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225262' timestamp='2007-06-11T22:10:27+01:00' visible='true' lat='50.9821268' lon='-1.3558676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='2742643' timestamp='2007-02-01T22:21:34+00:00' user='Dean Earley' visible='true' lat='50.9406684' lon='-1.3798189'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998545' timestamp='2007-06-05T23:13:23+01:00' user='nickw' visible='true' lat='50.9656053' lon='-1.4266797'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160402235' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9139702' lon='-1.4485708' />
-  <node id='153327664' timestamp='2007-12-06T20:42:06+00:00' user='nickw' visible='true' lat='50.9375808' lon='-1.4398362'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700481' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true' lat='50.9262993' lon='-1.3716707' />
-  <node id='160409623' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true' lat='50.913034' lon='-1.4410692' />
-  <node id='27021810' timestamp='2007-04-03T00:53:04+01:00' user='Ben' visible='true' lat='50.9365847' lon='-1.3999937'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222185' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true' lat='50.9141596' lon='-1.4495407'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874070' timestamp='2007-05-08T14:50:36+01:00' visible='true' lat='50.938818' lon='-1.4391138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='387806' timestamp='2007-04-05T14:23:02+01:00' user='Dean Earley' visible='true' lat='50.9276' lon='-1.40327' />
-  <node id='26447501' timestamp='2007-03-09T21:07:38+00:00' user='nickw' visible='true' lat='50.9080592' lon='-1.3960503'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='42141615' timestamp='2007-09-05T17:46:35+01:00' user='mike l' visible='true' lat='50.9355799' lon='-1.3951668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071275' timestamp='2006-08-11T02:48:02+01:00' user='Dean Earley' visible='true' lat='50.9177849' lon='-1.3598852'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509905' timestamp='2007-05-22T21:20:52+01:00' visible='true' lat='50.9873213' lon='-1.3576575'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180221' timestamp='2007-04-29T02:05:36+01:00' user='Dean Earley' visible='true' lat='50.9611599' lon='-1.4252816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='245146245' timestamp='2008-02-03T05:59:11+00:00' user='sladen' visible='true' lat='50.9144584' lon='-1.4021656' />
-  <node id='66584632' timestamp='2007-10-12T14:01:07+01:00' user='SteveC' visible='true' lat='50.9320877' lon='-1.449371' />
-  <node id='26346717' timestamp='2007-03-04T18:57:46+00:00' user='Dean Earley' visible='true' lat='50.9147176' lon='-1.3655557'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10217896' timestamp='2006-07-09T23:00:37+01:00' user='Dean Earley' visible='true' lat='50.9272148' lon='-1.3646968'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431993' timestamp='2007-06-16T16:26:10+01:00' visible='true' lat='50.9850069' lon='-1.3513535'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518773' timestamp='2007-04-05T14:23:02+01:00' user='Dean Earley' visible='true' lat='50.9154227' lon='-1.392856'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28339202' timestamp='2007-05-02T00:35:38+01:00' visible='true' lat='50.9695403' lon='-1.3615429'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462604' timestamp='2008-02-03T06:09:09+00:00' user='sladen' visible='true' lat='50.9031579' lon='-1.40117'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815074' timestamp='2007-05-31T21:31:03+01:00' visible='true' lat='50.9876865' lon='-1.3540859'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15740480' timestamp='2006-09-16T19:31:31+01:00' user='nickw' visible='true' lat='50.9923223' lon='-1.3491631'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='596429' timestamp='2006-07-19T01:48:57+01:00' user='Dean Earley' visible='true' lat='50.9018324' lon='-1.3323543' />
-  <node id='29632794' timestamp='2007-05-26T20:05:08+01:00' visible='true' lat='50.9605121' lon='-1.3702398'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000487' timestamp='2007-05-12T09:26:08+01:00' user='nickw' visible='true' lat='50.9190116' lon='-1.4119303'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29815641' timestamp='2007-05-31T21:47:56+01:00' visible='true' lat='50.9897834' lon='-1.3577816'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='59766053' timestamp='2007-09-25T17:25:34+01:00' user='mike l' visible='true' lat='50.9379992' lon='-1.3911623'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935747' timestamp='2007-05-11T00:50:41+01:00' visible='true' lat='50.9403102' lon='-1.4463885'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20971158' timestamp='2008-02-03T06:08:54+00:00' user='sladen' visible='true' lat='50.9027628' lon='-1.4008867'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107348' timestamp='2006-10-28T01:56:06+01:00' user='Dean Earley' visible='true' lat='50.9267817' lon='-1.3531316'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30504756' timestamp='2007-06-17T21:50:33+01:00' visible='true' lat='50.9816465' lon='-1.3586145'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689141' timestamp='2006-12-23T10:22:24+00:00' user='nickw' visible='true' lat='50.9403111' lon='-1.3817617'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20110862' timestamp='2006-10-27T23:39:27+01:00' user='Dean Earley' visible='true' lat='50.9341948' lon='-1.3623358'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896250' timestamp='2007-10-16T17:59:42+01:00' user='Dean Earley' visible='true' lat='50.9568569' lon='-1.4010935'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14743173' timestamp='2007-06-22T21:44:05+01:00' user='Steve Chilton' visible='true' lat='50.9078919' lon='-1.4117195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232130' timestamp='2007-02-18T21:25:16+00:00' visible='true' lat='50.9140813' lon='-1.3985007'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25303930' timestamp='2007-01-19T18:57:43+00:00' user='Dean Earley' visible='true' lat='50.9401594' lon='-1.40821'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29133085' timestamp='2007-05-15T20:36:55+01:00' user='nickw' visible='true' lat='50.9329455' lon='-1.3756138'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564754' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true' lat='50.9294115' lon='-1.3566165'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='26608524' timestamp='2008-01-26T12:00:53+00:00' user='Skywave' visible='true' lat='50.9502819' lon='-1.3566714'>
-    <tag k='icao' v='EGHI' />
-    <tag k='is_in' v='Southampton,England,UK' />
-    <tag k='type' v='civil' />
-    <tag k='place' v='airport' />
-    <tag k='aeroway' v='aerodrome' />
-    <tag k='iata' v='SOU' />
-    <tag k='source' v='Gagravarr_Airports' />
-    <tag k='name' v='Southampton International' />
-  </node>
-  <node id='21600600' timestamp='2007-09-24T20:31:07+01:00' user='mike l' visible='true' lat='50.9936773' lon='-1.4012277'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325008' timestamp='2006-11-11T17:27:16+00:00' user='Dean Earley' visible='true' lat='50.9542504' lon='-1.4085981' />
-  <node id='29926269' timestamp='2007-06-03T20:57:37+01:00' visible='true' lat='50.9795008' lon='-1.3670356'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252964' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.9447868' lon='-1.4312644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325658' timestamp='2007-04-05T14:23:03+01:00' user='Dean Earley' visible='true' lat='50.9284433' lon='-1.4301944' />
-  <node id='29132671' timestamp='2007-05-15T20:24:20+01:00' user='nickw' visible='true' lat='50.9284691' lon='-1.3795309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34677881' timestamp='2007-08-16T19:35:41+01:00' user='southglos' visible='true' lat='50.9901175' lon='-1.3472143'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='204884739' timestamp='2008-01-03T10:01:57+00:00' user='hairywill' visible='true' lat='50.9288753' lon='-1.3770573'>
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Bitterne Park Junior School' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19227220' timestamp='2007-02-18T20:19:10+00:00' visible='true' lat='50.9334748' lon='-1.4115168'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30511422' timestamp='2007-06-17T22:30:26+01:00' visible='true' lat='50.9752167' lon='-1.3575567'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160388360' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9174875' lon='-1.4572483' />
-  <node id='469849' timestamp='2007-04-05T14:23:03+01:00' user='Dean Earley' visible='true' lat='50.9089252' lon='-1.4128778' />
-  <node id='29856370' timestamp='2007-06-02T08:31:28+01:00' user='nickw' visible='true' lat='50.9471597' lon='-1.3919379'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706357' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9203' lon='-1.386353'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='90659236' timestamp='2007-10-28T21:44:36+00:00' user='Nick Dyer' visible='true' lat='50.9026777' lon='-1.4063265' />
-  <node id='24984767' timestamp='2007-01-10T00:14:41+00:00' user='nickw' visible='true' lat='50.9453792' lon='-1.3965257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179512' timestamp='2007-04-29T01:53:22+01:00' user='Dean Earley' visible='true' lat='50.9530752' lon='-1.4025666'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21561806' timestamp='2006-12-16T10:14:15+00:00' user='nickw' visible='true' lat='50.9217518' lon='-1.4412323'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816303' timestamp='2007-05-31T21:52:26+01:00' visible='true' lat='50.9911471' lon='-1.3545037'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160244233' timestamp='2007-12-10T19:25:22+00:00' user='sladen' visible='true' lat='50.9117246' lon='-1.4344109' />
-  <node id='8596766' timestamp='2006-11-13T00:43:24+00:00' user='Dean Earley' visible='true' lat='50.9017603' lon='-1.4090551'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='11419591' timestamp='2006-07-24T21:02:36+01:00' user='nickw' visible='true' lat='50.9184901' lon='-1.4335113' />
-  <node id='21689053' timestamp='2007-10-28T19:19:30+00:00' user='Nick Dyer' visible='true' lat='50.9378785' lon='-1.3798981'>
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </node>
-  <node id='87980716' timestamp='2008-01-29T12:06:37+00:00' user='Dean Earley' visible='true' lat='50.9574957' lon='-1.3441795' />
-  <node id='29931338' timestamp='2007-06-03T22:43:01+01:00' visible='true' lat='50.9946232' lon='-1.3724588'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931361' timestamp='2007-06-03T22:43:06+01:00' visible='true' lat='50.9947114' lon='-1.3732345'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26346859' timestamp='2007-03-04T18:58:03+00:00' user='Dean Earley' visible='true' lat='50.9152677' lon='-1.3666948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30096952' timestamp='2007-06-08T23:24:14+01:00' visible='true' lat='50.965943' lon='-1.3738433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001696' timestamp='2007-05-12T09:53:01+01:00' user='nickw' visible='true' lat='50.9403719' lon='-1.3636792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='122337301' timestamp='2007-11-18T19:12:33+00:00' user='nickw' visible='true' lat='50.9182096' lon='-1.4377958'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28252979' timestamp='2007-04-29T22:00:42+01:00' visible='true' lat='50.942794' lon='-1.4275679'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25896417' timestamp='2007-02-13T19:43:28+00:00' user='Dean Earley' visible='true' lat='50.9659015' lon='-1.3866257'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26575777' timestamp='2007-03-25T19:25:20+01:00' user='Dean Earley' visible='true' lat='50.900715' lon='-1.3950452'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418539' timestamp='2007-05-02T17:07:37+01:00' visible='true' lat='50.9635692' lon='-1.3708341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29911990' timestamp='2007-06-03T15:43:46+01:00' visible='true' lat='50.9860332' lon='-1.3585719'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='544326' timestamp='2007-04-05T14:23:03+01:00' user='Dean Earley' visible='true' lat='50.9282566' lon='-1.3859368' />
-  <node id='29707280' timestamp='2007-05-28T11:52:21+01:00' visible='true' lat='50.9865323' lon='-1.3614378'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='307473' timestamp='2005-12-12T00:24:07+00:00' user='nickw' visible='true' lat='50.9254718' lon='-1.403718' />
-  <node id='21600502' timestamp='2006-12-16T10:13:59+00:00' user='nickw' visible='true' lat='50.9236432' lon='-1.437233'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='33718199' timestamp='2007-08-08T01:30:37+01:00' visible='true' lat='50.9352015' lon='-1.4455371' />
-  <node id='91130465' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true' lat='50.9295975' lon='-1.4298502'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223553' timestamp='2007-06-11T21:57:52+01:00' visible='true' lat='50.984314' lon='-1.3534646'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471844' timestamp='2007-01-27T14:11:04+00:00' user='nickw' visible='true' lat='50.9383226' lon='-1.3672533'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29509879' timestamp='2007-05-22T21:20:48+01:00' visible='true' lat='50.9900739' lon='-1.3594169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957205' timestamp='2006-11-10T21:58:53+00:00' user='nickw' visible='true' lat='50.9203801' lon='-1.4222399'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27512884' timestamp='2008-01-29T11:33:03+00:00' user='Dean Earley' visible='true' lat='50.963314' lon='-1.3512142'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254748' timestamp='2007-02-13T19:24:18+00:00' user='Dean Earley' visible='true' lat='50.9544239' lon='-1.403027' />
-  <node id='30290768' timestamp='2007-06-13T09:24:06+01:00' visible='true' lat='50.9682699' lon='-1.3802904'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194364' timestamp='2007-04-29T08:20:25+01:00' visible='true' lat='50.9439253' lon='-1.4392038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781153' timestamp='2007-03-25T18:42:11+01:00' user='Dean Earley' visible='true' lat='50.9011893' lon='-1.3732153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282120' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.9777565' lon='-1.4070999'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908368' timestamp='2007-04-19T17:50:52+01:00' visible='true' lat='50.93036' lon='-1.3794082' />
-  <node id='25296280' timestamp='2007-01-19T09:52:15+00:00' user='Dean Earley' visible='true' lat='50.9761647' lon='-1.3643286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160221504' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true' lat='50.9151014' lon='-1.3906029' />
-  <node id='661185' timestamp='2007-04-05T14:23:03+01:00' user='Dean Earley' visible='true' lat='50.9131505' lon='-1.3625019' />
-  <node id='254422' timestamp='2005-11-15T15:40:08+00:00' user='nickw' visible='true' lat='50.9250022' lon='-1.3679032' />
-  <node id='154773091' timestamp='2007-12-07T13:53:03+00:00' user='Nick Dyer' visible='true' lat='50.961207' lon='-1.4265942' />
-  <node id='28246065' timestamp='2007-04-29T20:52:46+01:00' user='Dean Earley' visible='true' lat='50.9362146' lon='-1.4208789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13564834' timestamp='2006-12-16T01:02:12+00:00' user='Dean Earley' visible='true' lat='50.9345106' lon='-1.3542715'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='254535' timestamp='2006-09-02T18:32:40+01:00' user='Dean Earley' visible='true' lat='50.9128876' lon='-1.4004175' />
-  <node id='13706473' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.928289' lon='-1.380196'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='28372752' timestamp='2007-05-01T10:05:17+01:00' visible='true' lat='50.9290204' lon='-1.4384546'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29816398' timestamp='2007-05-31T21:56:27+01:00' visible='true' lat='50.9886755' lon='-1.3551043'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228107' timestamp='2006-10-23T21:01:05+01:00' user='nickw' visible='true' lat='50.9483555' lon='-1.4257163'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160424533' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true' lat='50.9046723' lon='-1.414702' />
-  <node id='21091403' timestamp='2007-02-13T18:31:45+00:00' user='Dean Earley' visible='true' lat='50.9812444' lon='-1.4442383'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9726305' timestamp='2006-09-08T02:12:12+01:00' user='Dean Earley' visible='true' lat='50.9180772' lon='-1.3734767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254324' timestamp='2005-11-15T15:38:59+00:00' user='nickw' visible='true' lat='50.958004' lon='-1.4336851' />
-  <node id='29632177' timestamp='2007-05-26T19:20:23+01:00' visible='true' lat='50.957951' lon='-1.3689863'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30506818' timestamp='2007-06-17T22:03:35+01:00' visible='true' lat='50.9785079' lon='-1.3627843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24949811' timestamp='2007-01-31T02:05:56+00:00' user='Dean Earley' visible='true' lat='50.995099' lon='-1.3777308'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28935773' timestamp='2007-12-08T19:58:59+00:00' user='nickw' visible='true' lat='50.9386063' lon='-1.4484916'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194881' timestamp='2007-04-29T08:57:59+01:00' user='Dean Earley' visible='true' lat='50.9425838' lon='-1.4139664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945333' timestamp='2007-03-31T20:34:28+01:00' user='nickw' visible='true' lat='50.919303' lon='-1.3563617'>
-    <tag k='name' v='BROOK RD' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28347759' timestamp='2007-04-30T23:40:07+01:00' user='nickw' visible='true' lat='50.9296665' lon='-1.360948'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29549358' timestamp='2007-05-24T11:22:48+01:00' visible='true' lat='50.9714024' lon='-1.3723749'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13705602' timestamp='2007-10-26T12:18:08+01:00' user='Nick Dyer' visible='true' lat='50.8979187' lon='-1.4114225' />
-  <node id='28250060' timestamp='2007-04-29T21:42:21+01:00' visible='true' lat='50.9153256' lon='-1.4504434'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30256875' timestamp='2007-06-12T20:38:13+01:00' visible='true' lat='50.9787657' lon='-1.3584765'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398420' timestamp='2006-10-17T23:09:38+01:00' user='nickw' visible='true' lat='50.9743532' lon='-1.415335'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871545' timestamp='2007-06-02T18:39:19+01:00' visible='true' lat='50.9155168' lon='-1.3535933'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464269' timestamp='2007-05-22T00:19:16+01:00' user='Dean Earley' visible='true' lat='50.9393393' lon='-1.403599'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117379' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9299755' lon='-1.4451364'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='422991' timestamp='2007-05-22T00:20:15+01:00' user='Dean Earley' visible='true' lat='50.9467985' lon='-1.3984743' />
-  <node id='29632194' timestamp='2007-05-26T19:20:46+01:00' visible='true' lat='50.9561463' lon='-1.367892'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30507149' timestamp='2007-06-17T22:07:49+01:00' visible='true' lat='50.9761522' lon='-1.3597118'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507756' timestamp='2007-05-22T00:20:15+01:00' user='Dean Earley' visible='true' lat='50.9320748' lon='-1.4011618'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29008940' timestamp='2007-05-12T15:26:03+01:00' user='nickw' visible='true' lat='50.9317777' lon='-1.3499825'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30223080' timestamp='2007-06-11T21:51:50+01:00' visible='true' lat='50.9844121' lon='-1.3549282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282082' timestamp='2007-01-17T21:10:07+00:00' user='David Currie' visible='true' lat='50.975718' lon='-1.405996'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='114099532' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true' lat='50.9547636' lon='-1.3600081' />
-  <node id='28932460' timestamp='2007-05-10T21:06:06+01:00' user='Dean Earley' visible='true' lat='50.964215' lon='-1.4500586'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15359710' timestamp='2007-01-19T18:15:25+00:00' user='Dean Earley' visible='true' lat='50.9693274' lon='-1.3504891'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91110498' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true' lat='50.9299254' lon='-1.4325061'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29794378' timestamp='2007-05-30T21:37:19+01:00' user='nickw' visible='true' lat='50.9222688' lon='-1.3637332'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29795005' timestamp='2007-05-30T21:46:52+01:00' user='nickw' visible='true' lat='50.9202568' lon='-1.3560919'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='269155' timestamp='2007-02-18T20:18:33+00:00' visible='true' lat='51.0025025' lon='-1.3314306' />
-  <node id='13705792' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8944869' lon='-1.3990659' />
-  <node id='17724244' timestamp='2006-10-07T00:25:16+01:00' user='nickw' visible='true' lat='50.9117069' lon='-1.4104704'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9280987' timestamp='2007-02-18T20:18:25+00:00' visible='true' lat='50.9156183' lon='-1.3644792'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924341' timestamp='2007-01-06T14:47:59+00:00' user='nickw' visible='true' lat='50.973849' lon='-1.3991832'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25471857' timestamp='2007-01-27T14:11:05+00:00' user='nickw' visible='true' lat='50.9393773' lon='-1.3664735'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984707' timestamp='2007-01-10T00:11:45+00:00' user='nickw' visible='true' lat='50.94501' lon='-1.3812879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997548' timestamp='2007-06-05T22:43:59+01:00' user='nickw' visible='true' lat='51.0001626' lon='-1.3487622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179526' timestamp='2007-04-29T01:53:24+01:00' user='Dean Earley' visible='true' lat='50.9564868' lon='-1.4002112'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='8596813' timestamp='2007-03-25T19:25:23+01:00' user='Dean Earley' visible='true' lat='50.9066246' lon='-1.3978284'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='474654' timestamp='2007-06-12T00:14:50+01:00' user='nickw' visible='true' lat='50.9332942' lon='-1.3501973' />
-  <node id='52285256' timestamp='2007-09-15T22:38:01+01:00' user='mike l' visible='true' lat='50.9469457' lon='-1.3900435'>
-    <tag k='amenity' v='crematorium' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </node>
-  <node id='122329589' timestamp='2007-11-18T19:08:12+00:00' user='nickw' visible='true' lat='50.9146744' lon='-1.4332016'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='329471' timestamp='2007-04-05T14:23:04+01:00' user='Dean Earley' visible='true' lat='50.9333' lon='-1.38681' />
-  <node id='635125' timestamp='2007-03-04T21:52:15+00:00' user='Dean Earley' visible='true' lat='50.898387' lon='-1.3491013' />
-  <node id='28194866' timestamp='2007-04-29T08:57:57+01:00' user='Dean Earley' visible='true' lat='50.942091' lon='-1.4067297'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18398458' timestamp='2007-01-28T00:07:20+00:00' visible='true' lat='50.9214201' lon='-1.4107804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17504830' timestamp='2007-04-29T01:53:40+01:00' user='Dean Earley' visible='true' lat='50.9545846' lon='-1.402137'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='88051800' timestamp='2007-10-26T17:11:22+01:00' user='Nick Dyer' visible='true' lat='50.9910878' lon='-1.4821593'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418249' timestamp='2007-05-02T00:31:17+01:00' visible='true' lat='50.9685158' lon='-1.3625879'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325076' timestamp='2006-11-11T17:28:27+00:00' user='Dean Earley' visible='true' lat='50.9334449' lon='-1.5617817' />
-  <node id='29998123' timestamp='2007-06-05T23:00:29+01:00' user='nickw' visible='true' lat='50.9891341' lon='-1.4001178'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='153334873' timestamp='2007-12-06T20:46:07+00:00' user='nickw' visible='true' lat='50.9432424' lon='-1.4511155'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924057' timestamp='2007-01-06T14:28:44+00:00' user='Dean Earley' visible='true' lat='50.9640317' lon='-1.3850603'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27561979' timestamp='2007-04-23T21:55:03+01:00' user='waschbaer' visible='true' lat='50.9053046' lon='-1.4137216'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28232569' timestamp='2007-05-30T21:41:54+01:00' user='nickw' visible='true' lat='50.9170743' lon='-1.3554249'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342540' timestamp='2007-04-30T22:13:33+01:00' user='nickw' visible='true' lat='50.9049428' lon='-1.3684283'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179439' timestamp='2007-04-29T01:53:15+01:00' user='Dean Earley' visible='true' lat='50.9631814' lon='-1.4195295'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254277' timestamp='2007-02-18T20:18:37+00:00' visible='true' lat='50.9624044' lon='-1.3352106' />
-  <node id='26781203' timestamp='2007-03-25T18:42:19+01:00' user='Dean Earley' visible='true' lat='50.9005661' lon='-1.3653169'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518814' timestamp='2007-09-25T13:11:17+01:00' visible='true' lat='50.9360405' lon='-1.3808193' />
-  <node id='30227011' timestamp='2007-06-11T22:35:17+01:00' visible='true' lat='50.9816919' lon='-1.3550032'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29704327' timestamp='2007-05-28T10:32:58+01:00' visible='true' lat='50.9844232' lon='-1.359248'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26728550' timestamp='2007-03-23T22:52:58+00:00' user='nickw' visible='true' lat='50.8995412' lon='-1.3662388'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160232030' timestamp='2007-12-10T19:21:18+00:00' user='sladen' visible='true' lat='50.9078983' lon='-1.3924569' />
-  <node id='11419664' timestamp='2006-07-24T21:03:32+01:00' user='nickw' visible='true' lat='50.9174276' lon='-1.4286519' />
-  <node id='27021722' timestamp='2007-12-10T20:50:55+00:00' user='sladen' visible='true' lat='50.9177419' lon='-1.455772'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419452' timestamp='2006-12-02T23:18:52+00:00' user='Dean Earley' visible='true' lat='50.9408155' lon='-1.37083'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='298237' timestamp='2007-01-06T14:30:58+00:00' user='Dean Earley' visible='true' lat='51.0031216' lon='-1.3556347' />
-  <node id='29632815' timestamp='2007-05-26T20:06:44+01:00' visible='true' lat='50.9613001' lon='-1.3675981'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945392' timestamp='2007-03-31T20:34:35+01:00' user='nickw' visible='true' lat='50.9048421' lon='-1.3404718'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613485' timestamp='2006-12-16T17:47:00+00:00' user='David Currie' visible='true' lat='50.9702017' lon='-1.3920643'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28342553' timestamp='2007-04-30T22:13:34+01:00' user='nickw' visible='true' lat='50.9068533' lon='-1.3669341'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29706909' timestamp='2007-05-28T11:38:41+01:00' visible='true' lat='50.9783537' lon='-1.3526928'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='66587712' timestamp='2007-10-12T14:03:05+01:00' user='SteveC' visible='true' lat='50.9310058' lon='-1.4487101' />
-  <node id='29953372' timestamp='2007-06-04T21:16:59+01:00' visible='true' lat='51.0030326' lon='-1.3795648'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21141420' timestamp='2006-11-21T23:12:45+00:00' user='nickw' visible='true' lat='50.9303673' lon='-1.4291872'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='34278550' timestamp='2007-08-14T04:48:01+01:00' user='andrewpmk' visible='true' lat='50.9073418' lon='-1.3978789'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29999067' timestamp='2007-06-05T23:29:05+01:00' user='nickw' visible='true' lat='50.9919102' lon='-1.4280902'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17768858' timestamp='2007-12-10T19:39:35+00:00' user='sladen' visible='true' lat='50.9473259' lon='-1.3675402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29506476' timestamp='2007-05-22T19:46:56+01:00' visible='true' lat='50.98774' lon='-1.3513785'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30431974' timestamp='2007-06-16T16:26:03+01:00' visible='true' lat='50.9843825' lon='-1.3520742'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10908568' timestamp='2006-07-18T10:24:16+01:00' user='nickw' visible='true' lat='50.9377021' lon='-1.364357' />
-  <node id='28194841' timestamp='2007-04-29T08:57:55+01:00' user='Dean Earley' visible='true' lat='50.9456846' lon='-1.4097027'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254439' timestamp='2007-02-18T20:18:18+00:00' visible='true' lat='50.9421096' lon='-1.3746248' />
-  <node id='21600669' timestamp='2006-12-16T11:37:21+00:00' user='David Currie' visible='true' lat='50.973633' lon='-1.3998644'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29997522' timestamp='2007-06-05T22:43:54+01:00' user='nickw' visible='true' lat='51.0103136' lon='-1.3596492'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17722343' timestamp='2006-10-06T23:46:13+01:00' user='Dean Earley' visible='true' lat='50.9511057' lon='-1.3736664'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632429' timestamp='2007-05-26T19:26:49+01:00' visible='true' lat='50.9578133' lon='-1.3673997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730495' timestamp='2007-05-28T19:36:26+01:00' visible='true' lat='50.9717111' lon='-1.3634354'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29380425' timestamp='2007-05-20T10:19:27+01:00' user='nickw' visible='true' lat='50.9442262' lon='-1.3780582'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28418522' timestamp='2007-05-02T00:35:21+01:00' visible='true' lat='50.9663297' lon='-1.368286'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29463045' timestamp='2007-05-22T00:01:34+01:00' user='nickw' visible='true' lat='50.9091608' lon='-1.4086676'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='306317' timestamp='2005-12-11T21:52:37+00:00' user='nickw' visible='true' lat='50.9265876' lon='-1.3937187' />
-  <node id='13972755' timestamp='2008-01-31T17:11:20+00:00' user='Dean Earley' visible='true' lat='50.9064065' lon='-1.2433103'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='30089050' timestamp='2007-06-08T18:11:57+01:00' visible='true' lat='50.9648052' lon='-1.3749548'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='15360198' timestamp='2006-09-11T20:23:43+01:00' user='Dean Earley' visible='true' lat='50.9592102' lon='-1.3716537'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601333' timestamp='2006-09-01T00:16:06+01:00' user='nickw' visible='true' lat='50.8894658' lon='-1.526649'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='19111063' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true' lat='50.9903861' lon='-1.3891346'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13704902' timestamp='2006-08-25T23:42:30+01:00' user='dmgroom' visible='true' lat='50.9015543' lon='-1.4498132' />
-  <node id='29816641' timestamp='2007-05-31T22:10:50+01:00' visible='true' lat='50.9871272' lon='-1.3623504'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931323' timestamp='2007-08-16T19:35:52+01:00' user='southglos' visible='true' lat='50.9996755' lon='-1.3622432'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='10222220' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9151231' lon='-1.4845274'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931399' timestamp='2007-06-03T22:43:15+01:00' visible='true' lat='50.9953919' lon='-1.3730208'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21275770' timestamp='2006-11-25T23:58:49+00:00' user='nickw' visible='true' lat='50.9139201' lon='-1.430552'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29914257' timestamp='2007-06-03T16:05:26+01:00' visible='true' lat='50.9826988' lon='-1.3608658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13565095' timestamp='2007-06-12T00:08:12+01:00' user='nickw' visible='true' lat='50.9340822' lon='-1.3520782'>
-    <tag k='name' v='Torridge Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28252960' timestamp='2007-04-29T22:00:40+01:00' visible='true' lat='50.9448606' lon='-1.4296776'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160252360' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true' lat='50.9536253' lon='-1.3574208' />
-  <node id='48950463' timestamp='2007-09-10T23:28:32+01:00' visible='true' lat='50.913096' lon='-1.3994668'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956735' timestamp='2007-06-26T23:49:24+01:00' user='nickw' visible='true' lat='50.9273207' lon='-1.351658'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='92682351' timestamp='2007-10-31T12:24:57+00:00' user='Dean Earley' visible='true' lat='50.9616203' lon='-1.4257496' />
-  <node id='160263979' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true' lat='50.9650217' lon='-1.3707589' />
-  <node id='29816563' timestamp='2007-05-31T22:04:28+01:00' visible='true' lat='50.9912888' lon='-1.3539803'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249814' timestamp='2007-04-29T21:41:33+01:00' visible='true' lat='50.9217346' lon='-1.4433994'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17721018' timestamp='2006-10-06T23:27:15+01:00' user='Dean Earley' visible='true' lat='50.9724679' lon='-1.3761851'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19228092' timestamp='2007-04-29T20:37:34+01:00' user='Dean Earley' visible='true' lat='50.9369283' lon='-1.4138874'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464303' timestamp='2007-05-22T00:19:24+01:00' user='Dean Earley' visible='true' lat='50.9474756' lon='-1.3995945'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20967601' timestamp='2006-11-12T20:47:02+00:00' user='Dean Earley' visible='true' lat='50.9197394' lon='-1.3927675'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254565' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9452726' lon='-1.4057177' />
-  <node id='29621216' timestamp='2007-05-28T19:39:39+01:00' visible='true' lat='50.9706569' lon='-1.3532736'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29931353' timestamp='2007-06-03T22:43:04+01:00' visible='true' lat='50.9940356' lon='-1.3737454'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='9266205' timestamp='2007-02-11T00:33:24+00:00' visible='true' lat='50.9188542' lon='-1.3954456'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668279' timestamp='2007-01-04T21:06:33+00:00' user='nickw' visible='true' lat='50.9824748' lon='-1.3943997'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25640015' timestamp='2007-02-18T20:18:18+00:00' visible='true' lat='50.9111669' lon='-1.3685955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25481216' timestamp='2007-01-28T00:07:23+00:00' visible='true' lat='50.9147046' lon='-1.3925895'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Old Farmhouse' />
-  </node>
-  <node id='25639985' timestamp='2007-03-24T13:44:05+00:00' user='Dean Earley' visible='true' lat='50.9005694' lon='-1.3772279'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='169435856' timestamp='2007-12-14T21:43:14+00:00' user='nickw' visible='true' lat='50.936084' lon='-1.4329659'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14964123' timestamp='2006-09-08T02:12:00+01:00' user='Dean Earley' visible='true' lat='50.9227078' lon='-1.3760922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179465' timestamp='2007-04-29T01:53:18+01:00' user='Dean Earley' visible='true' lat='50.9619904' lon='-1.4117291'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243605' timestamp='2007-04-29T20:24:59+01:00' user='Dean Earley' visible='true' lat='50.9346768' lon='-1.4170888'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507743' timestamp='2006-12-09T09:51:39+00:00' user='nickw' visible='true' lat='50.9305299' lon='-1.3983814'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710862' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9862434' lon='-1.3556967'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='388880' timestamp='2007-04-05T14:23:04+01:00' user='Dean Earley' visible='true' lat='50.9388376' lon='-1.395772' />
-  <node id='28252900' timestamp='2007-04-29T22:00:34+01:00' visible='true' lat='50.9466136' lon='-1.4317657'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700396' timestamp='2007-04-05T14:23:04+01:00' user='Dean Earley' visible='true' lat='50.9215777' lon='-1.3918796' />
-  <node id='700377' timestamp='2007-04-05T14:23:05+01:00' user='Dean Earley' visible='true' lat='50.923312' lon='-1.3936921' />
-  <node id='29392349' timestamp='2007-05-20T17:52:46+01:00' visible='true' lat='50.9633688' lon='-1.3559936'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24984737' timestamp='2007-01-10T00:13:55+00:00' user='nickw' visible='true' lat='50.9442652' lon='-1.390973'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976689' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9316356' lon='-1.4300393'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90592380' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true' lat='50.9129885' lon='-1.4408559' />
-  <node id='324340' timestamp='2007-01-28T00:55:29+00:00' visible='true' lat='50.9236479' lon='-1.3970017' />
-  <node id='21561559' timestamp='2006-12-13T20:09:35+00:00' user='nickw' visible='true' lat='50.9227537' lon='-1.4314976'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28179482' timestamp='2007-04-29T01:53:19+01:00' user='Dean Earley' visible='true' lat='50.953332' lon='-1.4053075'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20130981' timestamp='2006-10-28T01:45:39+01:00' user='Dean Earley' visible='true' lat='50.9283441' lon='-1.3558689'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998357' timestamp='2007-06-05T23:05:26+01:00' user='nickw' visible='true' lat='50.9757513' lon='-1.4277326'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28231154' timestamp='2007-04-29T18:46:46+01:00' user='nickw' visible='true' lat='50.9168188' lon='-1.3535418'>
-    <tag k='amenity' v='pub' />
-    <tag k='name' v='Humble Plumb' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021761' timestamp='2007-04-03T00:52:40+01:00' user='Ben' visible='true' lat='50.940078' lon='-1.3791804'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29001324' timestamp='2007-05-12T09:40:14+01:00' user='nickw' visible='true' lat='50.9222874' lon='-1.3828591'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28223262' timestamp='2007-04-29T17:07:40+01:00' visible='true' lat='50.9638099' lon='-1.3596196'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963783' timestamp='2007-04-29T08:58:13+01:00' user='Dean Earley' visible='true' lat='50.9429245' lon='-1.4128685'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14745449' timestamp='2006-12-14T23:57:12+00:00' user='Dean Earley' visible='true' lat='50.9699901' lon='-1.3392465'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21178439' timestamp='2007-10-04T19:44:31+01:00' user='Gregory Williams' visible='true' lat='50.9979943' lon='-1.3526642'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29924343' timestamp='2007-06-03T20:10:37+01:00' visible='true' lat='50.9821692' lon='-1.3609564'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30161362' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true' lat='50.9739346' lon='-1.359309'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21636926' timestamp='2007-06-01T16:41:20+01:00' user='Dean Earley' visible='true' lat='50.9168429' lon='-1.430106'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='50774726' timestamp='2007-12-08T20:24:12+00:00' user='nickw' visible='true' lat='50.9463868' lon='-1.4466351' />
-  <node id='26001570' timestamp='2007-02-18T20:16:52+00:00' visible='true' lat='50.925437' lon='-1.393872' />
-  <node id='28244220' timestamp='2007-04-29T20:36:24+01:00' user='Andy Street' visible='true' lat='50.9018754' lon='-1.3539687'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='657775' timestamp='2007-04-05T14:23:05+01:00' user='Dean Earley' visible='true' lat='50.9009237' lon='-1.3654672' />
-  <node id='28243669' timestamp='2007-04-29T20:25:12+01:00' user='Dean Earley' visible='true' lat='50.9386884' lon='-1.4137462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='518799' timestamp='2007-04-05T14:23:05+01:00' user='Dean Earley' visible='true' lat='50.9271402' lon='-1.382614' />
-  <node id='123671360' timestamp='2007-11-19T13:54:10+00:00' user='nickw' visible='true' lat='50.9157546' lon='-1.4370058' />
-  <node id='10216412' timestamp='2006-07-09T22:24:19+01:00' user='Dean Earley' visible='true' lat='50.9207687' lon='-1.3565396'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20107328' timestamp='2006-10-27T22:49:24+01:00' user='Dean Earley' visible='true' lat='50.9361932' lon='-1.3510622'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28237067' timestamp='2007-04-29T19:33:07+01:00' user='nickw' visible='true' lat='50.9120295' lon='-1.347268'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='325046' timestamp='2006-11-11T17:28:40+00:00' user='Dean Earley' visible='true' lat='50.946899' lon='-1.4721532' />
-  <node id='13343026' timestamp='2007-10-28T19:06:23+00:00' user='Nick Dyer' visible='true' lat='50.9916535' lon='-1.4905596'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='305221' timestamp='2006-10-06T23:52:03+01:00' user='Dean Earley' visible='true' lat='50.994892' lon='-1.3570229' />
-  <node id='48958685' timestamp='2007-11-20T11:06:51+00:00' user='Gregory Williams' visible='true' lat='50.9049501' lon='-1.4074231'>
-    <tag k='direction' v='clockwise' />
-    <tag k='highway' v='mini_roundabout' />
-  </node>
-  <node id='29931376' timestamp='2007-06-03T22:43:08+01:00' visible='true' lat='50.9941959' lon='-1.3726934'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90593915' timestamp='2007-10-28T20:36:49+00:00' user='Nick Dyer' visible='true' lat='50.9132321' lon='-1.4452418' />
-  <node id='157241428' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true' lat='50.9456792' lon='-1.4496748'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727946' timestamp='2006-09-02T19:01:58+01:00' user='Dean Earley' visible='true' lat='50.9190325' lon='-1.3953827'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29464284' timestamp='2007-05-22T00:19:19+01:00' user='Dean Earley' visible='true' lat='50.937654' lon='-1.4056324'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21507773' timestamp='2006-12-09T09:51:41+00:00' user='nickw' visible='true' lat='50.9415034' lon='-1.3937847'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18348712' timestamp='2006-10-16T21:59:53+01:00' user='nickw' visible='true' lat='50.9818383' lon='-1.434307'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28903940' timestamp='2007-05-10T01:06:50+01:00' user='LivingWithDragons' visible='true' lat='50.9807937' lon='-1.4434201'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30956720' timestamp='2007-06-26T23:49:22+01:00' user='nickw' visible='true' lat='50.9276963' lon='-1.3488767'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20976715' timestamp='2006-11-13T21:39:16+00:00' user='nickw' visible='true' lat='50.9324238' lon='-1.4270684'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24924072' timestamp='2007-03-24T16:33:51+00:00' user='Dean Earley' visible='true' lat='50.9814565' lon='-1.3845381'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='19890075' timestamp='2006-12-18T23:27:22+00:00' visible='true' lat='50.9236667' lon='-1.3895624'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30225805' timestamp='2007-11-28T12:24:30+00:00' user='Dean Earley' visible='true' lat='50.9828688' lon='-1.3564302'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28874083' timestamp='2007-05-08T14:50:40+01:00' visible='true' lat='50.9370589' lon='-1.4432562'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21689066' timestamp='2006-12-23T10:22:19+00:00' user='nickw' visible='true' lat='50.9268329' lon='-1.3992395'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160417604' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9107232' lon='-1.4309755' />
-  <node id='15657695' timestamp='2007-12-10T18:54:18+00:00' user='sladen' visible='true' lat='50.8991135' lon='-1.3786038'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20831097' timestamp='2006-11-02T19:55:37+00:00' user='nickw' visible='true' lat='50.9110522' lon='-1.4069353'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339146' timestamp='2007-04-30T20:39:28+01:00' visible='true' lat='50.9681148' lon='-1.3604512'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='142612642' timestamp='2007-11-29T22:26:18+00:00' user='nickw' visible='true' lat='50.9116664' lon='-1.4149913'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25783104' timestamp='2007-02-11T18:07:14+00:00' user='nickw' visible='true' lat='50.9477372' lon='-1.3521857'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28339133' timestamp='2007-04-30T20:39:22+01:00' visible='true' lat='50.9693201' lon='-1.3627313'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='30290753' timestamp='2007-06-13T09:24:03+01:00' visible='true' lat='50.965051' lon='-1.3761401'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='12594959' timestamp='2006-08-04T11:58:50+01:00' user='nickw' visible='true' lat='50.9173483' lon='-1.4112744'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='298271' timestamp='2007-01-06T14:30:58+00:00' user='Dean Earley' visible='true' lat='50.9642707' lon='-1.3851918' />
-  <node id='21091848' timestamp='2006-11-19T12:09:12+00:00' user='nickw' visible='true' lat='50.9094646' lon='-1.4239402'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762093' timestamp='2007-02-18T20:19:25+00:00' visible='true' lat='50.9469182' lon='-1.3441203'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='700436' timestamp='2007-04-05T14:23:05+01:00' user='Dean Earley' visible='true' lat='50.9248203' lon='-1.3823327' />
-  <node id='20976674' timestamp='2007-04-29T20:59:47+01:00' user='Dean Earley' visible='true' lat='50.9351738' lon='-1.430146'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28243506' timestamp='2007-04-29T20:24:00+01:00' user='Dean Earley' visible='true' lat='50.9389427' lon='-1.4089972'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254963' timestamp='2006-09-02T13:46:28+01:00' user='Dean Earley' visible='true' lat='50.9423814' lon='-1.4188427' />
-  <node id='28372737' timestamp='2007-05-01T10:05:15+01:00' visible='true' lat='50.9288329' lon='-1.4409134'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='91117394' timestamp='2007-10-29T08:09:31+00:00' user='nickw' visible='true' lat='50.9289675' lon='-1.444153'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='17658115' timestamp='2007-12-10T19:24:44+00:00' user='sladen' visible='true' lat='50.9121089' lon='-1.4364193'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29998114' timestamp='2007-06-05T23:00:28+01:00' user='nickw' visible='true' lat='50.9878335' lon='-1.3949922'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254260' timestamp='2007-02-18T20:18:36+00:00' visible='true' lat='50.9396021' lon='-1.3570153' />
-  <node id='24668026' timestamp='2007-01-04T21:05:29+00:00' user='nickw' visible='true' lat='50.9872586' lon='-1.4115547'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21599026' timestamp='2006-12-16T01:02:09+00:00' user='Dean Earley' visible='true' lat='50.9331649' lon='-1.3562068'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21615433' timestamp='2006-12-16T21:52:54+00:00' user='nickw' visible='true' lat='50.9088914' lon='-1.4158318'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28250094' timestamp='2007-04-29T21:42:27+01:00' visible='true' lat='50.9164102' lon='-1.4502462'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26945379' timestamp='2007-03-31T20:34:34+01:00' user='nickw' visible='true' lat='50.912529' lon='-1.3454957'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='658450' timestamp='2007-04-05T14:23:05+01:00' user='Dean Earley' visible='true' lat='50.9190682' lon='-1.4009836' />
-  <node id='8596749' timestamp='2007-02-06T00:19:17+00:00' user='Dean Earley' visible='true' lat='50.9069369' lon='-1.4082964'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28249899' timestamp='2007-04-29T21:41:44+01:00' visible='true' lat='50.9170837' lon='-1.4475949'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29000959' timestamp='2007-05-12T09:31:57+01:00' user='nickw' visible='true' lat='50.9187054' lon='-1.4080639'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160297672' timestamp='2007-12-10T19:57:05+00:00' user='sladen' visible='true' lat='50.9142519' lon='-1.4875143' />
-  <node id='15359693' timestamp='2006-09-11T20:17:29+01:00' user='Dean Earley' visible='true' lat='50.9673987' lon='-1.3520762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='113962286' timestamp='2007-11-14T14:52:01+00:00' user='Nick Dyer' visible='true' lat='50.9577291' lon='-1.3642978' />
-  <node id='11419493' timestamp='2007-04-03T00:52:24+01:00' user='Dean Earley' visible='true' lat='50.9206159' lon='-1.4312726' />
-  <node id='28237237' timestamp='2007-04-29T19:42:04+01:00' user='Andy Street' visible='true' lat='50.9013738' lon='-1.3568263'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29710915' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true' lat='50.9827525' lon='-1.3588932'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='447392' timestamp='2007-04-05T14:23:06+01:00' user='Dean Earley' visible='true' lat='50.9242' lon='-1.40443' />
-  <node id='29925908' timestamp='2007-06-03T20:50:20+01:00' visible='true' lat='50.9814529' lon='-1.3646735'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='90589192' timestamp='2007-10-28T20:32:03+00:00' user='Nick Dyer' visible='true' lat='50.9024184' lon='-1.4201278' />
-  <node id='30290779' timestamp='2007-06-13T09:24:08+01:00' visible='true' lat='50.9642487' lon='-1.383446'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160280779' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9203664' lon='-1.4733094' />
-  <node id='29693183' timestamp='2007-10-26T11:41:30+01:00' user='Nick Dyer' visible='true' lat='50.8949216' lon='-1.3926126'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254855' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true' lat='50.9145817' lon='-1.4515319' />
-  <node id='90577059' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true' lat='50.9085616' lon='-1.4279727' />
-  <node id='13705777' timestamp='2007-10-28T20:49:49+00:00' user='Nick Dyer' visible='true' lat='50.8902802' lon='-1.4006451' />
-  <node id='29929168' timestamp='2007-06-03T22:00:34+01:00' visible='true' lat='50.9768075' lon='-1.3627042'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28830627' timestamp='2007-05-05T08:58:25+01:00' user='nickw' visible='true' lat='50.927627' lon='-1.3595762'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706918' timestamp='2007-04-05T14:23:07+01:00' user='Dean Earley' visible='true' lat='50.877095' lon='-1.3603249' />
-  <node id='30124213' timestamp='2007-06-09T19:43:23+01:00' user='nickw' visible='true' lat='50.9239517' lon='-1.3474621'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026664' timestamp='2007-05-13T10:11:10+01:00' user='nickw' visible='true' lat='50.9241394' lon='-1.4008091'>
-    <tag k='name' v='REGENT CT' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='331352' timestamp='2007-12-06T22:11:31+00:00' user='Dean Earley' visible='true' lat='51.0135' lon='-1.39001' />
-  <node id='25947178' timestamp='2007-02-16T20:51:24+00:00' user='nickw' visible='true' lat='50.9080686' lon='-1.3932554'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20964839' timestamp='2006-12-16T17:47:23+00:00' user='David Currie' visible='true' lat='50.9961881' lon='-1.4462087'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28348139' timestamp='2007-04-30T23:45:33+01:00' user='nickw' visible='true' lat='50.9337358' lon='-1.3662921'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282108' timestamp='2007-01-17T21:10:09+00:00' user='David Currie' visible='true' lat='50.9777976' lon='-1.4055185'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21746415' timestamp='2007-02-18T20:18:30+00:00' visible='true' lat='50.9873007' lon='-1.3441312'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13706627' timestamp='2007-07-26T16:27:01+01:00' user='Nick Dyer' visible='true' lat='50.9145894' lon='-1.3853479'>
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='almien_coastlines' />
-  </node>
-  <node id='10217210' timestamp='2006-09-04T01:04:14+01:00' user='Dean Earley' visible='true' lat='50.9162055' lon='-1.3589493'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29871073' timestamp='2007-06-02T18:20:21+01:00' visible='true' lat='50.9342664' lon='-1.440811'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20957196' timestamp='2006-11-10T21:58:52+00:00' user='nickw' visible='true' lat='50.9209078' lon='-1.4179474'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='27021780' timestamp='2007-04-03T00:52:48+01:00' user='Ben' visible='true' lat='50.9519074' lon='-1.4002838'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254457' timestamp='2006-09-02T18:32:41+01:00' user='Dean Earley' visible='true' lat='50.9090155' lon='-1.401558' />
-  <node id='28250047' timestamp='2007-04-29T21:42:20+01:00' visible='true' lat='50.917429' lon='-1.449367'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14727997' timestamp='2007-09-25T18:23:13+01:00' visible='true' lat='50.9149466' lon='-1.4014843'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='4931223' timestamp='2007-04-05T14:23:07+01:00' user='Dean Earley' visible='true' lat='50.9227542' lon='-1.3922991' />
-  <node id='20110931' timestamp='2006-10-27T23:39:34+01:00' user='Dean Earley' visible='true' lat='50.934146' lon='-1.3624433'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29930569' timestamp='2007-06-03T22:23:15+01:00' visible='true' lat='50.9916391' lon='-1.3540298'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='16963763' timestamp='2007-05-22T00:20:17+01:00' user='Dean Earley' visible='true' lat='50.9387261' lon='-1.4067124'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026800' timestamp='2007-05-13T10:10:57+01:00' user='nickw' visible='true' lat='50.9178467' lon='-1.4092577'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29730510' timestamp='2007-05-28T19:36:39+01:00' visible='true' lat='50.9708234' lon='-1.3701122'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29765433' timestamp='2007-05-29T22:39:28+01:00' visible='true' lat='50.9982815' lon='-1.3520366'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20973091' timestamp='2006-11-13T00:42:41+00:00' user='Dean Earley' visible='true' lat='50.9012653' lon='-1.4083376'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26727684' timestamp='2007-03-23T22:38:13+00:00' user='nickw' visible='true' lat='50.9138263' lon='-1.3568682'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='18232097' timestamp='2006-10-14T13:19:08+01:00' user='nickw' visible='true' lat='50.9154483' lon='-1.4070436'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29814617' timestamp='2007-05-31T21:22:59+01:00' visible='true' lat='50.9888868' lon='-1.3572319'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29927556' timestamp='2007-06-03T21:24:28+01:00' visible='true' lat='50.9812782' lon='-1.3692955'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29862366' timestamp='2007-06-02T12:33:14+01:00' visible='true' lat='50.9326163' lon='-1.4287947'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='244310976' timestamp='2008-01-31T11:50:43+00:00' user='Nick Dyer' visible='true' lat='50.9701059' lon='-1.4317876' />
-  <node id='29874143' timestamp='2007-06-02T19:43:15+01:00' visible='true' lat='50.9577625' lon='-1.3586282'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071304' timestamp='2006-08-11T02:48:04+01:00' user='Dean Earley' visible='true' lat='50.9201329' lon='-1.3576525'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='20961039' timestamp='2006-11-11T17:12:24+00:00' user='Dean Earley' visible='true' lat='50.9480678' lon='-1.3928033'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28180246' timestamp='2007-04-29T02:05:38+01:00' user='Dean Earley' visible='true' lat='50.962574' lon='-1.4216952'>
-    <tag k='highway' v='gate' />
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25762114' timestamp='2007-02-10T22:56:21+00:00' user='nickw' visible='true' lat='50.9360022' lon='-1.3686359'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25895697' timestamp='2007-04-29T01:53:41+01:00' user='Dean Earley' visible='true' lat='50.9627719' lon='-1.408447'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21613500' timestamp='2006-12-16T17:47:01+00:00' user='David Currie' visible='true' lat='50.9811171' lon='-1.3939864'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='14601363' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9174878' lon='-1.4833601'>
-    <tag k='created_by' v='osmeditor2' />
-  </node>
-  <node id='28935762' timestamp='2007-05-11T00:50:48+01:00' visible='true' lat='50.9394584' lon='-1.4483905'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='26781183' timestamp='2007-03-25T18:42:15+01:00' user='Dean Earley' visible='true' lat='50.8999964' lon='-1.3739125'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194516' timestamp='2007-04-29T08:33:17+01:00' user='Dean Earley' visible='true' lat='50.9474047' lon='-1.4125086'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29462754' timestamp='2007-05-21T23:57:40+01:00' user='nickw' visible='true' lat='50.9070798' lon='-1.4015281'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29923775' timestamp='2007-06-03T20:04:46+01:00' visible='true' lat='50.9829278' lon='-1.3630001'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29026770' timestamp='2007-05-13T10:10:55+01:00' user='nickw' visible='true' lat='50.9245049' lon='-1.4012195'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='21419244' timestamp='2006-12-02T22:59:15+00:00' user='Dean Earley' visible='true' lat='50.9378893' lon='-1.3610115'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='160277831' timestamp='2007-12-10T19:49:13+00:00' user='sladen' visible='true' lat='50.9143601' lon='-1.4581259' />
-  <node id='30255641' timestamp='2007-06-12T20:07:39+01:00' visible='true' lat='50.9802711' lon='-1.3494979'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='25282127' timestamp='2007-01-17T21:10:14+00:00' user='David Currie' visible='true' lat='50.977356' lon='-1.4059806'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='24668232' timestamp='2007-01-04T21:06:28+00:00' user='nickw' visible='true' lat='50.984082' lon='-1.3947077'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='29632237' timestamp='2007-05-26T19:23:14+01:00' visible='true' lat='50.9566192' lon='-1.3690278'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='254687' timestamp='2007-10-17T01:09:35+01:00' user='Dean Earley' visible='true' lat='50.9512859' lon='-1.3630004' />
-  <node id='395773' timestamp='2007-04-05T14:23:07+01:00' user='Dean Earley' visible='true' lat='50.9152' lon='-1.39941' />
-  <node id='700530' timestamp='2007-04-05T14:23:07+01:00' user='Dean Earley' visible='true' lat='50.9306964' lon='-1.3670497' />
-  <node id='20133136' timestamp='2006-10-28T01:55:40+01:00' user='Dean Earley' visible='true' lat='50.9272282' lon='-1.3535363'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='13071245' timestamp='2006-08-11T02:48:00+01:00' user='Dean Earley' visible='true' lat='50.9237676' lon='-1.3672266'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <node id='28194451' timestamp='2007-04-29T08:20:34+01:00' visible='true' lat='50.9462687' lon='-1.4329917'>
-    <tag k='created_by' v='JOSM' />
-  </node>
-  <way id='4698470' timestamp='2007-06-02T19:44:15+01:00' visible='true'>
-    <nd ref='29874141' />
-    <nd ref='29874142' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Arnold Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910609' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20102965' />
-    <nd ref='20133094' />
-    <nd ref='20133102' />
-    <nd ref='20133106' />
-    <nd ref='20133109' />
-    <nd ref='20133112' />
-    <nd ref='20133120' />
-    <nd ref='20133121' />
-    <nd ref='20133126' />
-    <nd ref='20133127' />
-    <nd ref='20133128' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Paulet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3431514' timestamp='2006-09-28T23:48:13+01:00' user='nickw' visible='true'>
-    <nd ref='16963790' />
-    <nd ref='16963792' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Furzedown Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043819' timestamp='2006-12-02T23:18:57+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419415' />
-    <nd ref='21419429' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Stoneham Cemetry Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536703' timestamp='2007-06-02T11:56:17+01:00' visible='true'>
-    <nd ref='28194885' />
-    <nd ref='28194898' />
-    <nd ref='28194899' />
-    <nd ref='28243533' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Talbot Close' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4536144' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179473' />
-    <nd ref='28179475' />
-    <nd ref='28179474' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Green Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4078455' timestamp='2007-10-17T00:35:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21624971' />
-    <nd ref='21624977' />
-    <nd ref='21624988' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545711' timestamp='2007-05-26T20:16:27+01:00' visible='true'>
-    <nd ref='28339132' />
-    <nd ref='28339171' />
-    <nd ref='28339172' />
-    <nd ref='28339173' />
-    <nd ref='28418245' />
-    <nd ref='28418249' />
-    <nd ref='28418251' />
-    <nd ref='28339178' />
-    <nd ref='28418253' />
-    <nd ref='28339180' />
-    <nd ref='28339184' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Bright Wire Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723919' timestamp='2007-12-08T20:09:11+00:00' user='nickw' visible='true'>
-    <nd ref='157201953' />
-    <nd ref='157201959' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tangmere Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556821' timestamp='2007-10-29T08:23:16+00:00' user='nickw' visible='true'>
-    <nd ref='91132084' />
-    <nd ref='91132083' />
-    <nd ref='91132086' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fuchsia Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4254567' timestamp='2007-01-27T23:23:31+00:00' visible='true'>
-    <nd ref='25480488' />
-    <nd ref='25480566' />
-    <nd ref='25480565' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Augustine Road' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='8119865' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387809' />
-    <nd ref='387810' />
-    <nd ref='306318' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Abbotts Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1655' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='413147' />
-    <nd ref='518814' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Harefield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4211081' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24949928' />
-    <nd ref='24949824' />
-    <nd ref='24949922' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tyrrel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10517845' timestamp='2007-10-28T20:34:23+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90591399' />
-    <nd ref='90591400' />
-    <nd ref='90591401' />
-    <nd ref='90591402' />
-    <nd ref='90591403' />
-    <nd ref='90591404' />
-    <nd ref='90591405' />
-    <nd ref='90591406' />
-    <nd ref='90591407' />
-    <nd ref='90591408' />
-    <nd ref='90591409' />
-    <nd ref='90591410' />
-    <nd ref='90591411' />
-    <nd ref='90591399' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4764769' timestamp='2007-06-16T16:26:35+01:00' visible='true'>
-    <nd ref='30432000' />
-    <nd ref='30431968' />
-    <nd ref='30431965' />
-    <nd ref='30431961' />
-    <nd ref='30431956' />
-    <nd ref='30431953' />
-    <nd ref='30431946' />
-    <nd ref='30431937' />
-    <nd ref='30432000' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545714' timestamp='2007-04-30T20:40:50+01:00' visible='true'>
-    <nd ref='28223257' />
-    <nd ref='28339160' />
-    <nd ref='28339163' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Charlie Soar Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061532' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='21507758' />
-    <nd ref='21507739' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glen Eyre Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015827' timestamp='2007-11-18T19:13:33+00:00' user='nickw' visible='true'>
-    <nd ref='21275710' />
-    <nd ref='21275631' />
-    <nd ref='21275868' />
-    <nd ref='122339034' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Emsworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9657399' timestamp='2007-10-16T19:19:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9266206' />
-    <nd ref='20964739' />
-    <nd ref='20964738' />
-    <nd ref='14727989' />
-    <nd ref='14727980' />
-    <nd ref='9266200' />
-    <nd ref='14727962' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='width' v='4' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4580486' timestamp='2007-05-11T00:51:25+01:00' visible='true'>
-    <nd ref='28935743' />
-    <nd ref='28935744' />
-    <nd ref='28935745' />
-    <nd ref='28935747' />
-    <nd ref='28935748' />
-    <nd ref='28935749' />
-    <nd ref='28935751' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chelveston Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342678' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447502' />
-    <nd ref='26447531' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540313' timestamp='2007-04-29T21:09:44+01:00' visible='true'>
-    <nd ref='28194342' />
-    <nd ref='28194343' />
-    <nd ref='28194344' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Plover Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084410' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689086' />
-    <nd ref='21689092' />
-    <nd ref='21689093' />
-    <nd ref='21689058' />
-    <nd ref='21689087' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lupin Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4797577' timestamp='2007-06-22T21:44:04+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780760' />
-    <nd ref='30780823' />
-    <nd ref='30780804' />
-    <nd ref='30780758' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875593' timestamp='2007-12-10T19:18:16+00:00' user='sladen' visible='true'>
-    <nd ref='17769058' />
-    <nd ref='31487478' />
-    <nd ref='160230976' />
-    <nd ref='31487479' />
-    <nd ref='31487475' />
-    <nd ref='160230980' />
-    <nd ref='31487476' />
-    <nd ref='29691354' />
-    <nd ref='87248227' />
-    <nd ref='87248228' />
-    <nd ref='87248229' />
-    <nd ref='87248230' />
-    <nd ref='87248231' />
-    <nd ref='87248232' />
-    <nd ref='87248233' />
-    <nd ref='87248234' />
-    <nd ref='87248235' />
-    <nd ref='87248236' />
-    <nd ref='87248237' />
-    <nd ref='87248238' />
-    <nd ref='87248240' />
-    <nd ref='87248241' />
-    <nd ref='87248242' />
-    <nd ref='87248243' />
-    <nd ref='87248245' />
-    <tag k='railway' v='rail' />
-    <tag k='note' v='position estimated, not used for passenger trains; from aerial images and local knowledge' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4540972' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252942' />
-    <nd ref='28252943' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996897' timestamp='2006-11-10T21:59:05+00:00' user='nickw' visible='true'>
-    <nd ref='20957192' />
-    <nd ref='20957193' />
-    <nd ref='20957194' />
-    <nd ref='20957202' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Southview Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8137930' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640009' />
-    <nd ref='25640010' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Braeside Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4414521' timestamp='2007-11-25T22:28:45+00:00' user='southglos' visible='true'>
-    <nd ref='25303928' />
-    <nd ref='29464288' />
-    <nd ref='25303929' />
-    <tag k='oneway' v='yes' />
-    <tag k='osmarender:renderName' v='no' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8119881' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319622' />
-    <nd ref='658451' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Spear Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3144199' timestamp='2007-05-23T09:19:08+01:00' user='nickw' visible='true'>
-    <nd ref='15028823' />
-    <nd ref='28830637' />
-    <nd ref='15028841' />
-    <nd ref='29526315' />
-    <nd ref='15028842' />
-    <nd ref='15028843' />
-    <nd ref='28348613' />
-    <nd ref='15028844' />
-    <nd ref='15028845' />
-    <nd ref='28830625' />
-    <nd ref='15028846' />
-    <nd ref='13071396' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Litchfield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126540' timestamp='2006-09-02T13:46:13+01:00' user='Dean Earley' visible='true'>
-    <nd ref='247809' />
-    <nd ref='247807' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Welbeck Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13638723' timestamp='2007-11-20T11:54:25+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180207' />
-    <nd ref='125577105' />
-    <nd ref='125577106' />
-    <nd ref='125577107' />
-    <nd ref='125577108' />
-    <nd ref='125577109' />
-    <nd ref='125577110' />
-    <nd ref='125577111' />
-    <nd ref='125577112' />
-    <nd ref='125577113' />
-    <nd ref='125577114' />
-    <nd ref='125577115' />
-    <nd ref='125577116' />
-    <nd ref='125577117' />
-    <nd ref='125577118' />
-    <nd ref='125577120' />
-    <nd ref='125577121' />
-    <nd ref='125577122' />
-    <nd ref='125577123' />
-    <nd ref='125577124' />
-    <nd ref='125577125' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5b' />
-  </way>
-  <way id='3677088' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='422963' />
-    <nd ref='422964' />
-    <nd ref='422965' />
-    <nd ref='402743' />
-    <nd ref='402744' />
-    <nd ref='17724253' />
-    <nd ref='402745' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Devonshire Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10155196' timestamp='2008-01-09T08:16:00+00:00' user='hairywill' visible='true'>
-    <nd ref='13706270' />
-    <nd ref='13706274' />
-    <nd ref='13706279' />
-    <nd ref='13706286' />
-    <nd ref='13706296' />
-    <nd ref='13706309' />
-    <nd ref='13706323' />
-    <nd ref='13706327' />
-    <nd ref='13706331' />
-    <nd ref='13706332' />
-    <nd ref='13706333' />
-    <nd ref='13706334' />
-    <nd ref='13706335' />
-    <nd ref='13706339' />
-    <nd ref='13706357' />
-    <nd ref='13706367' />
-    <nd ref='13706370' />
-    <nd ref='13706389' />
-    <nd ref='13706400' />
-    <nd ref='13706405' />
-    <nd ref='13706414' />
-    <nd ref='13706423' />
-    <nd ref='13706428' />
-    <nd ref='13706434' />
-    <nd ref='13706435' />
-    <nd ref='13706447' />
-    <nd ref='13706452' />
-    <nd ref='13706454' />
-    <nd ref='13706457' />
-    <nd ref='13706461' />
-    <nd ref='20952623' />
-    <nd ref='13706467' />
-    <nd ref='20952624' />
-    <nd ref='20952626' />
-    <nd ref='20952627' />
-    <nd ref='20952628' />
-    <nd ref='20952629' />
-    <nd ref='20952630' />
-    <nd ref='20952631' />
-    <nd ref='20952632' />
-    <nd ref='13706470' />
-    <nd ref='20952633' />
-    <nd ref='20952625' />
-    <nd ref='20952634' />
-    <nd ref='20952635' />
-    <nd ref='20952636' />
-    <nd ref='20952637' />
-    <nd ref='20952638' />
-    <nd ref='20952639' />
-    <nd ref='20952640' />
-    <tag k='natural' v='coastline' />
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='Potlatch 0.6a' />
-  </way>
-  <way id='4438015' timestamp='2007-10-16T17:24:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='27238990' />
-    <nd ref='27238993' />
-    <nd ref='27238994' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4480964' timestamp='2007-04-19T17:50:50+01:00' visible='true'>
-    <nd ref='27467473' />
-    <nd ref='27467474' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Priory Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577437' timestamp='2007-05-09T23:36:12+01:00' visible='true'>
-    <nd ref='2417454' />
-    <nd ref='28903372' />
-    <nd ref='28903374' />
-    <nd ref='28903376' />
-    <nd ref='28903403' />
-    <nd ref='28903404' />
-    <nd ref='28903406' />
-    <nd ref='28903409' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='name' v='George Curl Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4712196' timestamp='2007-06-05T22:44:12+01:00' user='nickw' visible='true'>
-    <nd ref='29997530' />
-    <nd ref='29997531' />
-    <nd ref='29997532' />
-    <nd ref='29997533' />
-    <nd ref='29997534' />
-    <nd ref='29997535' />
-    <nd ref='29997536' />
-    <nd ref='29997537' />
-    <nd ref='29997538' />
-    <nd ref='29997539' />
-    <nd ref='29997540' />
-    <nd ref='29997541' />
-    <nd ref='29997542' />
-    <nd ref='29997543' />
-    <nd ref='29997544' />
-    <nd ref='29997545' />
-    <nd ref='29997546' />
-    <nd ref='29997547' />
-    <nd ref='29997548' />
-    <nd ref='29997549' />
-    <nd ref='29997550' />
-    <nd ref='29997551' />
-    <nd ref='29997552' />
-    <nd ref='29997553' />
-    <nd ref='29997554' />
-    <nd ref='29997555' />
-    <nd ref='29997556' />
-    <nd ref='29997557' />
-    <nd ref='29997558' />
-    <nd ref='29997559' />
-    <nd ref='29997560' />
-    <nd ref='29997561' />
-    <nd ref='29997562' />
-    <nd ref='29997563' />
-    <nd ref='29997564' />
-    <nd ref='29997565' />
-    <nd ref='29997566' />
-    <nd ref='29997567' />
-    <nd ref='29997568' />
-    <nd ref='29997569' />
-    <nd ref='29997570' />
-    <nd ref='29997501' />
-    <nd ref='29997502' />
-    <nd ref='29997503' />
-    <nd ref='29997504' />
-    <nd ref='29997505' />
-    <nd ref='29997506' />
-    <nd ref='29997507' />
-    <nd ref='29997508' />
-    <nd ref='29997509' />
-    <nd ref='29997510' />
-    <nd ref='29997511' />
-    <nd ref='29997512' />
-    <nd ref='29997513' />
-    <nd ref='29997514' />
-    <nd ref='29997515' />
-    <nd ref='29997516' />
-    <nd ref='29997517' />
-    <nd ref='29997518' />
-    <nd ref='29997519' />
-    <nd ref='29997520' />
-    <nd ref='29997521' />
-    <nd ref='29997522' />
-    <nd ref='29997523' />
-    <nd ref='29997524' />
-    <nd ref='29997525' />
-    <nd ref='29997526' />
-    <nd ref='29997527' />
-    <nd ref='29997528' />
-    <nd ref='29997529' />
-    <nd ref='29997530' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072043' timestamp='2008-02-03T06:24:04+00:00' user='sladen' visible='true'>
-    <nd ref='254755' />
-    <nd ref='20973237' />
-    <nd ref='34278534' />
-    <nd ref='20973239' />
-    <nd ref='20973238' />
-    <nd ref='8596761' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='secondary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4084420' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689151' />
-    <nd ref='28414270' />
-    <nd ref='21689061' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Westbrook Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124541' timestamp='2006-07-29T14:14:02+01:00' user='nickw' visible='true'>
-    <nd ref='301597' />
-    <nd ref='329814' />
-    <nd ref='329813' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3274' timestamp='2006-06-04T00:35:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700403' />
-    <nd ref='700402' />
-    <nd ref='700404' />
-    <nd ref='700405' />
-    <nd ref='700406' />
-    <nd ref='700407' />
-    <nd ref='19890075' />
-    <nd ref='700408' />
-    <nd ref='700409' />
-    <nd ref='700410' />
-    <nd ref='700412' />
-    <nd ref='700413' />
-    <nd ref='700411' />
-    <nd ref='700414' />
-    <nd ref='544325' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Belmont Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4215246' timestamp='2007-01-10T00:20:50+00:00' user='nickw' visible='true'>
-    <nd ref='24984782' />
-    <nd ref='24984783' />
-    <nd ref='24984784' />
-    <nd ref='24984785' />
-    <nd ref='24984786' />
-    <nd ref='24984787' />
-    <nd ref='24984788' />
-    <nd ref='24984791' />
-    <nd ref='24984792' />
-    <nd ref='24984795' />
-    <nd ref='24984669' />
-    <nd ref='17722330' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ethelburt Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578766' timestamp='2006-10-07T00:25:28+01:00' user='nickw' visible='true'>
-    <nd ref='17724238' />
-    <nd ref='307483' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Lovers Walk' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='19746076' timestamp='2008-01-03T19:20:41+00:00' user='nickw' visible='true'>
-    <nd ref='29930744' />
-    <nd ref='205342803' />
-    <nd ref='205342802' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125054' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071351' />
-    <nd ref='13071352' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cobden Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10364656' timestamp='2008-01-29T12:06:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='87981004' />
-    <nd ref='87980725' />
-    <nd ref='87980724' />
-    <nd ref='243981300' />
-    <nd ref='87980722' />
-    <nd ref='87980720' />
-    <nd ref='87980719' />
-    <nd ref='87980717' />
-    <nd ref='87980716' />
-    <nd ref='87980715' />
-    <nd ref='87980714' />
-    <nd ref='87980713' />
-    <nd ref='87980712' />
-    <nd ref='87980711' />
-    <nd ref='87980710' />
-    <nd ref='87980709' />
-    <nd ref='87980708' />
-    <nd ref='87980707' />
-    <nd ref='243981301' />
-    <nd ref='87980706' />
-    <nd ref='87980705' />
-    <nd ref='87980704' />
-    <nd ref='87980703' />
-    <nd ref='243981296' />
-    <nd ref='87979705' />
-    <tag k='railway' v='rail' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4074103' timestamp='2006-12-13T20:09:44+00:00' user='nickw' visible='true'>
-    <nd ref='21561541' />
-    <nd ref='21561523' />
-    <nd ref='21561542' />
-    <nd ref='21561547' />
-    <nd ref='21561546' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cedar Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540957' timestamp='2007-04-29T22:00:53+01:00' visible='true'>
-    <nd ref='28252904' />
-    <nd ref='28252905' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunvegan Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152663' timestamp='2007-06-17T22:07:58+01:00' visible='true'>
-    <nd ref='30507161' />
-    <nd ref='30507151' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Winston Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136102' timestamp='2007-01-17T21:10:28+00:00' user='David Currie' visible='true'>
-    <nd ref='25282087' />
-    <nd ref='25282088' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blenheim Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215226' timestamp='2007-01-10T00:20:38+00:00' user='nickw' visible='true'>
-    <nd ref='24984712' />
-    <nd ref='24984711' />
-    <nd ref='24984710' />
-    <nd ref='24984709' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leaside Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126591' timestamp='2007-10-29T16:05:09+00:00' user='Dean Earley' visible='true'>
-    <nd ref='17721014' />
-    <nd ref='17721016' />
-    <nd ref='17721017' />
-    <nd ref='17721018' />
-    <nd ref='17721015' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8437641' timestamp='2007-10-30T15:48:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29392342' />
-    <nd ref='29392362' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cherbourg Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269313' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639899' />
-    <nd ref='25639948' />
-    <nd ref='25639947' />
-    <nd ref='25639946' />
-    <nd ref='25639945' />
-    <nd ref='25639944' />
-    <nd ref='25639963' />
-    <nd ref='25639943' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Sea Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2920959' timestamp='2007-06-12T00:08:26+01:00' user='nickw' visible='true'>
-    <nd ref='13564839' />
-    <nd ref='30229466' />
-    <nd ref='13564840' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='19788364' timestamp='2008-01-04T19:26:30+00:00' user='nickw' visible='true'>
-    <nd ref='206162245' />
-    <nd ref='206162254' />
-    <nd ref='206162255' />
-    <nd ref='206162256' />
-    <nd ref='206162257' />
-    <nd ref='206162258' />
-    <nd ref='206162259' />
-    <nd ref='206162260' />
-    <nd ref='206162247' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Westfield Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129266' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964112' />
-    <nd ref='14964158' />
-    <nd ref='14964159' />
-    <nd ref='14964160' />
-    <nd ref='14964161' />
-    <nd ref='14964162' />
-    <nd ref='14964163' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hollingbourne Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3294' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true'>
-    <nd ref='675830' />
-    <nd ref='675887' />
-    <nd ref='700516' />
-    <nd ref='675863' />
-    <nd ref='34098117' />
-    <nd ref='675864' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bond Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4749614' timestamp='2007-06-13T09:24:38+01:00' visible='true'>
-    <nd ref='30290755' />
-    <nd ref='30290742' />
-    <nd ref='30290743' />
-    <nd ref='30290744' />
-    <nd ref='30290745' />
-    <nd ref='30290746' />
-    <nd ref='30290747' />
-    <nd ref='30290748' />
-    <nd ref='30290743' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sparrow Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701679' timestamp='2007-06-10T18:15:31+01:00' visible='true'>
-    <nd ref='29909666' />
-    <nd ref='29909671' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999270' timestamp='2007-12-10T21:07:46+00:00' user='sladen' visible='true'>
-    <nd ref='20972769' />
-    <nd ref='20972772' />
-    <nd ref='27238995' />
-    <nd ref='8596772' />
-    <nd ref='20972773' />
-    <nd ref='20972774' />
-    <nd ref='8596762' />
-    <nd ref='21600370' />
-    <nd ref='160425876' />
-    <nd ref='160425677' />
-    <nd ref='20973121' />
-    <nd ref='8596750' />
-    <nd ref='160424532' />
-    <nd ref='160424533' />
-    <nd ref='20971216' />
-    <nd ref='20972780' />
-    <nd ref='160420352' />
-    <nd ref='25675767' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4475490' timestamp='2007-04-17T22:04:03+01:00' visible='true'>
-    <nd ref='27434188' />
-    <nd ref='27434189' />
-    <nd ref='27434190' />
-    <nd ref='27434186' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8137926' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639984' />
-    <nd ref='25639982' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wharnecliffe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008587' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='11419555' />
-    <nd ref='20976815' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Upper Shirley Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574132' timestamp='2007-05-08T14:51:06+01:00' visible='true'>
-    <nd ref='28874082' />
-    <nd ref='28874083' />
-    <nd ref='28874084' />
-    <nd ref='28874086' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Conifer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10568212' timestamp='2007-10-29T15:43:32+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25896422' />
-    <nd ref='30290734' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='note' v='Needs tidying with a real GPS trace' />
-    <tag k='name' v='Tollgate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694241' timestamp='2007-10-04T19:43:58+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29505717' />
-    <nd ref='29505719' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='name' v='Boyatt Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='layer' v='-1' />
-  </way>
-  <way id='3701404' timestamp='2007-11-06T18:20:38+00:00' user='nickw' visible='true'>
-    <nd ref='18348719' />
-    <nd ref='18348720' />
-    <nd ref='18348721' />
-    <nd ref='18348722' />
-    <nd ref='18348723' />
-    <nd ref='18348724' />
-    <nd ref='18348725' />
-    <nd ref='18348726' />
-    <nd ref='18348727' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743089' timestamp='2007-10-16T02:44:04+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30224264' />
-    <nd ref='30224265' />
-    <nd ref='30224268' />
-    <nd ref='30224269' />
-    <nd ref='30224273' />
-    <nd ref='30224274' />
-    <nd ref='30224276' />
-    <nd ref='30224279' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Loughwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677092' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='18232070' />
-    <nd ref='18232083' />
-    <nd ref='18232084' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Burton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551576' timestamp='2007-05-02T00:35:35+01:00' visible='true'>
-    <nd ref='28418337' />
-    <nd ref='28418531' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Grasemere' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136222' timestamp='2007-10-16T06:20:11+01:00' user='andrewpmk' visible='true'>
-    <nd ref='21178405' />
-    <nd ref='25296308' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='C354' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='maxspeed' v='64' />
-    <tag k='note' v='40 mph' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360443' timestamp='2007-12-10T19:17:32+00:00' user='sladen' visible='true'>
-    <nd ref='26575744' />
-    <nd ref='26575743' />
-    <nd ref='26575742' />
-    <nd ref='160229550' />
-    <nd ref='26575741' />
-    <nd ref='26575740' />
-    <nd ref='87989444' />
-    <nd ref='26575738' />
-    <nd ref='26575739' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Maryfield' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4558327' timestamp='2007-05-03T00:08:32+01:00' visible='true'>
-    <nd ref='28582993' />
-    <nd ref='28582995' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Purbrook Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625933' timestamp='2007-05-20T10:19:36+01:00' user='nickw' visible='true'>
-    <nd ref='29134119' />
-    <nd ref='29380423' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237114' timestamp='2007-01-19T09:52:21+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296281' />
-    <nd ref='25296282' />
-    <nd ref='25296389' />
-    <nd ref='25296283' />
-    <nd ref='25296284' />
-    <nd ref='25296312' />
-    <nd ref='25296285' />
-    <nd ref='25296286' />
-    <nd ref='25296287' />
-    <nd ref='254676' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C354' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546152' timestamp='2007-04-30T22:13:57+01:00' user='nickw' visible='true'>
-    <nd ref='28342546' />
-    <nd ref='28342547' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Oaks' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819432' timestamp='2006-10-23T21:01:11+01:00' user='nickw' visible='true'>
-    <nd ref='19227228' />
-    <nd ref='28243592' />
-    <nd ref='19227227' />
-    <nd ref='19227226' />
-    <nd ref='19227224' />
-    <nd ref='19227225' />
-    <nd ref='28243594' />
-    <nd ref='19228092' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pointout Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005414' timestamp='2006-11-19T12:09:22+00:00' user='nickw' visible='true'>
-    <nd ref='21091874' />
-    <nd ref='21091873' />
-    <nd ref='21091825' />
-    <nd ref='469866' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cawte Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4797573' timestamp='2007-06-22T21:44:04+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780755' />
-    <nd ref='30780802' />
-    <nd ref='254410' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150045' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464250' />
-    <nd ref='29464252' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tudor Wood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123569' timestamp='2007-05-30T22:26:35+01:00' user='nickw' visible='true'>
-    <nd ref='10216410' />
-    <nd ref='10216403' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westend Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703340' timestamp='2007-06-03T20:50:22+01:00' visible='true'>
-    <nd ref='29925628' />
-    <nd ref='29925908' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='12511552' timestamp='2007-11-14T14:53:44+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='113965198' />
-    <nd ref='113965199' />
-    <nd ref='113965200' />
-    <nd ref='113965201' />
-    <nd ref='113965198' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </way>
-  <way id='3999838' timestamp='2007-10-29T07:50:32+00:00' user='nickw' visible='true'>
-    <nd ref='20976724' />
-    <nd ref='91109259' />
-    <nd ref='20976723' />
-    <nd ref='20976722' />
-    <nd ref='20976721' />
-    <nd ref='20976720' />
-    <nd ref='20976719' />
-    <nd ref='91109263' />
-    <nd ref='20976718' />
-    <nd ref='20976699' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Seagarth Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215251' timestamp='2007-01-10T00:20:55+00:00' user='nickw' visible='true'>
-    <nd ref='422989' />
-    <nd ref='24984804' />
-    <nd ref='24984805' />
-    <nd ref='24984806' />
-    <nd ref='24984663' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Aspen Holt' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679921' timestamp='2007-05-28T19:39:29+01:00' visible='true'>
-    <nd ref='29730499' />
-    <nd ref='29730502' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3282' timestamp='2007-08-12T23:13:31+01:00' user='Edward' visible='true'>
-    <nd ref='675834' />
-    <nd ref='700507' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Oak Tree Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4269317' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='10942721' />
-    <nd ref='25639962' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Shamrock Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072047' timestamp='2007-08-14T04:48:34+01:00' user='andrewpmk' visible='true'>
-    <nd ref='254757' />
-    <nd ref='8596782' />
-    <tag k='highway' v='residential' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4379591' timestamp='2007-03-23T22:38:21+00:00' user='nickw' visible='true'>
-    <nd ref='26727682' />
-    <nd ref='26727683' />
-    <nd ref='26727684' />
-    <nd ref='26727685' />
-    <nd ref='26727686' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235065' timestamp='2007-10-04T19:37:17+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='21613398' />
-    <nd ref='21613397' />
-    <nd ref='21613396' />
-    <nd ref='21613395' />
-    <nd ref='21613394' />
-    <nd ref='21613393' />
-    <nd ref='21613392' />
-    <nd ref='21613391' />
-    <nd ref='18348694' />
-    <nd ref='21613390' />
-    <nd ref='25282101' />
-    <nd ref='21613389' />
-    <nd ref='25282100' />
-    <nd ref='25282138' />
-    <nd ref='21613388' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='24' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3999327' timestamp='2007-12-10T21:07:19+00:00' user='sladen' visible='true'>
-    <nd ref='20973116' />
-    <nd ref='20973122' />
-    <nd ref='20973121' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='2147334' timestamp='2006-07-01T03:18:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254379' />
-    <nd ref='18232071' />
-    <nd ref='20831110' />
-    <nd ref='254380' />
-    <nd ref='254381' />
-    <nd ref='430655' />
-    <nd ref='254382' />
-    <nd ref='254383' />
-    <nd ref='254384' />
-    <nd ref='20831115' />
-    <nd ref='20831114' />
-    <nd ref='325645' />
-    <nd ref='254369' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bedford Place' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4749602' timestamp='2007-10-04T19:38:15+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='30290713' />
-    <nd ref='30290714' />
-    <nd ref='30290715' />
-    <nd ref='30290716' />
-    <nd ref='30290717' />
-    <nd ref='30290759' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='24' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3910154' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20102966' />
-    <nd ref='20130981' />
-    <nd ref='20130980' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hallet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079327' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='12595190' />
-    <nd ref='21636950' />
-    <nd ref='21636951' />
-    <nd ref='21636952' />
-    <nd ref='21636953' />
-    <nd ref='21636954' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4650204' timestamp='2007-05-25T18:50:22+01:00' visible='true'>
-    <nd ref='29392379' />
-    <nd ref='29392381' />
-    <nd ref='29392380' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556220' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true'>
-    <nd ref='91109765' />
-    <nd ref='91109768' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Seacole Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151457' timestamp='2007-06-03T19:02:05+01:00' visible='true'>
-    <nd ref='29914415' />
-    <nd ref='29914408' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ladywood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724591' timestamp='2007-06-08T23:30:32+01:00' visible='true'>
-    <nd ref='30096946' />
-    <nd ref='30096947' />
-    <nd ref='30096948' />
-    <nd ref='30096949' />
-    <nd ref='30096946' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558174' timestamp='2007-05-02T23:58:14+01:00' visible='true'>
-    <nd ref='28583015' />
-    <nd ref='28583039' />
-    <nd ref='28583042' />
-    <nd ref='28583043' />
-    <nd ref='28583052' />
-    <nd ref='28583054' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Greywell Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22701483' timestamp='2008-01-26T18:09:52+00:00' user='stuphi' visible='true'>
-    <nd ref='243511771' />
-    <nd ref='20961052' />
-    <nd ref='325189' />
-    <nd ref='20961048' />
-    <nd ref='325187' />
-    <nd ref='325186' />
-    <nd ref='325185' />
-    <nd ref='11151903' />
-    <nd ref='298305' />
-    <nd ref='20961040' />
-    <nd ref='298304' />
-    <nd ref='20961042' />
-    <nd ref='298303' />
-    <nd ref='298302' />
-    <nd ref='298301' />
-    <nd ref='298300' />
-    <nd ref='325173' />
-    <nd ref='20961038' />
-    <nd ref='325172' />
-    <nd ref='325174' />
-    <nd ref='20961036' />
-    <nd ref='325171' />
-    <nd ref='325170' />
-    <nd ref='325169' />
-    <nd ref='325168' />
-    <nd ref='325181' />
-    <nd ref='325180' />
-    <nd ref='325008' />
-    <nd ref='325006' />
-    <nd ref='325004' />
-    <nd ref='325002' />
-    <nd ref='325000' />
-    <nd ref='324998' />
-    <nd ref='324996' />
-    <nd ref='324994' />
-    <nd ref='324992' />
-    <nd ref='324991' />
-    <nd ref='324988' />
-    <nd ref='325025' />
-    <nd ref='20961034' />
-    <nd ref='325027' />
-    <nd ref='325029' />
-    <nd ref='132712' />
-    <nd ref='325032' />
-    <nd ref='325034' />
-    <nd ref='325037' />
-    <nd ref='132711' />
-    <nd ref='325040' />
-    <nd ref='20961033' />
-    <nd ref='325041' />
-    <nd ref='132710' />
-    <nd ref='132709' />
-    <nd ref='20961030' />
-    <nd ref='132708' />
-    <nd ref='325046' />
-    <nd ref='160336907' />
-    <nd ref='160335936' />
-    <nd ref='20961028' />
-    <nd ref='325048' />
-    <nd ref='132707' />
-    <nd ref='160335536' />
-    <nd ref='160335537' />
-    <nd ref='325051' />
-    <nd ref='325053' />
-    <nd ref='325056' />
-    <nd ref='160328499' />
-    <nd ref='325054' />
-    <nd ref='325058' />
-    <nd ref='160327675' />
-    <nd ref='325060' />
-    <nd ref='325061' />
-    <nd ref='20961027' />
-    <nd ref='325062' />
-    <nd ref='16479652' />
-    <nd ref='325063' />
-    <nd ref='19262896' />
-    <nd ref='19262893' />
-    <nd ref='325064' />
-    <nd ref='325066' />
-    <nd ref='20961025' />
-    <nd ref='325068' />
-    <nd ref='20961023' />
-    <nd ref='325070' />
-    <nd ref='325071' />
-    <nd ref='20961021' />
-    <nd ref='20961019' />
-    <nd ref='325072' />
-    <nd ref='325075' />
-    <nd ref='325076' />
-    <nd ref='20961016' />
-    <nd ref='20961014' />
-    <nd ref='325089' />
-    <nd ref='325087' />
-    <nd ref='325085' />
-    <nd ref='325083' />
-    <nd ref='325081' />
-    <nd ref='325079' />
-    <nd ref='20961013' />
-    <nd ref='325077' />
-    <nd ref='325103' />
-    <nd ref='325101' />
-    <nd ref='132695' />
-    <nd ref='325098' />
-    <nd ref='325096' />
-    <nd ref='325094' />
-    <nd ref='325092' />
-    <nd ref='325091' />
-    <nd ref='325105' />
-    <tag k='oneway' v='true' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='ref' v='M27' />
-    <tag k='highway' v='motorway' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='M27 westbound' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='19390388' timestamp='2008-01-01T18:33:11+00:00' user='Milliams' visible='true'>
-    <nd ref='28903636' />
-    <nd ref='28903637' />
-    <nd ref='28903638' />
-    <nd ref='28903639' />
-    <nd ref='28903640' />
-    <nd ref='201640650' />
-    <nd ref='28903641' />
-    <nd ref='201640652' />
-    <nd ref='28903642' />
-    <nd ref='28903643' />
-    <nd ref='28903644' />
-    <nd ref='28903645' />
-    <nd ref='28903646' />
-    <nd ref='28903647' />
-    <nd ref='28903648' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mitchell Way' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </way>
-  <way id='4084428' timestamp='2006-12-23T10:22:41+00:00' user='nickw' visible='true'>
-    <nd ref='544342' />
-    <nd ref='21689180' />
-    <nd ref='21689179' />
-    <nd ref='21689178' />
-    <nd ref='21689177' />
-    <nd ref='21689176' />
-    <nd ref='21689175' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Claude Ashby Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10523715' timestamp='2007-10-28T22:02:33+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90677138' />
-    <nd ref='90677139' />
-    <nd ref='90677140' />
-    <nd ref='90677141' />
-    <nd ref='90677142' />
-    <nd ref='90677143' />
-    <nd ref='87800148' />
-    <nd ref='87800147' />
-    <nd ref='13704893' />
-    <nd ref='90677144' />
-    <nd ref='90677145' />
-    <nd ref='90677146' />
-    <nd ref='90677147' />
-    <nd ref='90677148' />
-    <nd ref='90677149' />
-    <nd ref='90677150' />
-    <nd ref='90677151' />
-    <nd ref='90677152' />
-    <nd ref='90677153' />
-    <nd ref='90677154' />
-    <nd ref='90677155' />
-    <nd ref='90677156' />
-    <nd ref='90677157' />
-    <nd ref='90677158' />
-    <nd ref='90677159' />
-    <nd ref='90677160' />
-    <nd ref='90677138' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4661836' timestamp='2007-05-26T20:15:27+01:00' visible='true'>
-    <nd ref='29632471' />
-    <nd ref='24924070' />
-    <nd ref='29632456' />
-    <nd ref='29632458' />
-    <nd ref='24924227' />
-    <nd ref='24924225' />
-    <nd ref='24924224' />
-    <nd ref='24924222' />
-    <nd ref='29632459' />
-    <nd ref='24924221' />
-    <nd ref='29632442' />
-    <nd ref='29632439' />
-    <nd ref='29632441' />
-    <nd ref='29632443' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Monks Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589171' timestamp='2007-05-13T10:11:08+01:00' user='nickw' visible='true'>
-    <nd ref='29026790' />
-    <nd ref='29026806' />
-    <nd ref='29026808' />
-    <nd ref='29026812' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mayfair Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8275896' timestamp='2007-10-29T16:25:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='14745442' />
-    <nd ref='14745438' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535825' timestamp='2007-04-29T01:04:24+01:00' visible='true'>
-    <nd ref='28173898' />
-    <nd ref='28173901' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Petworth Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677100' timestamp='2007-05-28T12:38:30+01:00' visible='true'>
-    <nd ref='29704145' />
-    <nd ref='29704146' />
-    <nd ref='29703877' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151435' timestamp='2007-06-03T14:54:28+01:00' visible='true'>
-    <nd ref='29909657' />
-    <nd ref='29909665' />
-    <nd ref='29909666' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Hanns Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540351' timestamp='2007-04-29T21:10:25+01:00' visible='true'>
-    <nd ref='28194448' />
-    <nd ref='28194449' />
-    <nd ref='28194450' />
-    <nd ref='28194452' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Puffin Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125305' timestamp='2007-05-13T10:16:38+01:00' user='nickw' visible='true'>
-    <nd ref='254665' />
-    <nd ref='388866' />
-    <nd ref='650906' />
-    <nd ref='21507744' />
-    <nd ref='21507743' />
-    <nd ref='21420711' />
-    <nd ref='27563286' />
-    <nd ref='27563290' />
-    <nd ref='21420710' />
-    <nd ref='306312' />
-    <nd ref='254666' />
-    <nd ref='21420712' />
-    <nd ref='21420713' />
-    <nd ref='21420714' />
-    <nd ref='306314' />
-    <nd ref='247802' />
-    <nd ref='26001628' />
-    <nd ref='544742' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4253361' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true'>
-    <nd ref='25471848' />
-    <nd ref='25471845' />
-    <nd ref='25471836' />
-    <nd ref='25471847' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Itchen View' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3879900' timestamp='2006-10-27T00:48:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='19890101' />
-    <nd ref='19890099' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northumberland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4742943' timestamp='2007-10-16T02:44:05+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30223090' />
-    <nd ref='30223091' />
-    <nd ref='30223086' />
-    <nd ref='30223087' />
-    <nd ref='30223088' />
-    <nd ref='30223089' />
-    <nd ref='30223090' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Arundel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644822' timestamp='2007-06-08T18:12:35+01:00' visible='true'>
-    <nd ref='29549371' />
-    <nd ref='29549373' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Kestrel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540745' timestamp='2007-04-29T21:43:25+01:00' visible='true'>
-    <nd ref='28249875' />
-    <nd ref='28249882' />
-    <nd ref='28249883' />
-    <nd ref='28249884' />
-    <nd ref='28249845' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Falkland Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079319' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636938' />
-    <nd ref='21636939' />
-    <nd ref='21636921' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kentish Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743106' timestamp='2007-06-11T22:10:30+01:00' visible='true'>
-    <nd ref='30225261' />
-    <nd ref='30225262' />
-    <nd ref='30225257' />
-    <nd ref='30225258' />
-    <nd ref='30225259' />
-    <nd ref='30225260' />
-    <nd ref='30225261' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Buckland Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585214' timestamp='2007-05-12T09:51:47+01:00' user='nickw' visible='true'>
-    <nd ref='29001617' />
-    <nd ref='29001307' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4379658' timestamp='2007-03-23T22:53:37+00:00' user='nickw' visible='true'>
-    <nd ref='26727673' />
-    <nd ref='26728570' />
-    <nd ref='26728569' />
-    <nd ref='26728568' />
-    <nd ref='26727672' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136110' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true'>
-    <nd ref='25282090' />
-    <nd ref='25282092' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sandringham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005402' timestamp='2006-11-19T12:09:21+00:00' user='nickw' visible='true'>
-    <nd ref='21091856' />
-    <nd ref='21091858' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150636' timestamp='2007-05-28T12:56:42+01:00' visible='true'>
-    <nd ref='29705531' />
-    <nd ref='29705532' />
-    <nd ref='29705534' />
-    <nd ref='29705536' />
-    <nd ref='29705545' />
-    <nd ref='25296018' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639864' timestamp='2006-06-01T10:05:58+01:00' user='nickw' visible='true'>
-    <nd ref='329521' />
-    <nd ref='21636789' />
-    <nd ref='21636806' />
-    <nd ref='28183728' />
-    <nd ref='21636807' />
-    <nd ref='329522' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Roman Drive' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4558185' timestamp='2007-05-02T23:58:16+01:00' visible='true'>
-    <nd ref='28583071' />
-    <nd ref='28583073' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854806' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700489' />
-    <nd ref='13071202' />
-    <nd ref='13071201' />
-    <nd ref='13071203' />
-    <nd ref='13071204' />
-    <nd ref='13071205' />
-    <nd ref='13071208' />
-    <nd ref='13071206' />
-    <nd ref='13071207' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Avon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556558' timestamp='2007-10-29T08:16:33+00:00' user='nickw' visible='true'>
-    <nd ref='91120321' />
-    <nd ref='91120323' />
-    <nd ref='91120326' />
-    <nd ref='91120329' />
-    <nd ref='91120333' />
-    <nd ref='91120336' />
-    <nd ref='91120339' />
-    <nd ref='91120341' />
-    <nd ref='91120344' />
-    <nd ref='91120345' />
-    <nd ref='91124442' />
-    <nd ref='91120348' />
-    <nd ref='91120349' />
-    <nd ref='91120350' />
-    <nd ref='91120351' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thorndike Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235074' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true'>
-    <nd ref='25282150' />
-    <nd ref='25282141' />
-    <nd ref='25282156' />
-    <nd ref='25282142' />
-    <nd ref='25282152' />
-    <nd ref='25282151' />
-    <nd ref='25282143' />
-    <nd ref='25282144' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749606' timestamp='2007-06-13T09:24:35+01:00' visible='true'>
-    <nd ref='30290761' />
-    <nd ref='30290760' />
-    <nd ref='30290765' />
-    <nd ref='30290764' />
-    <nd ref='30290763' />
-    <nd ref='30290762' />
-    <nd ref='30290761' />
-    <tag k='leisure' v='golf_course' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3987525' timestamp='2006-11-02T19:56:10+00:00' user='nickw' visible='true'>
-    <nd ref='20831097' />
-    <nd ref='20831106' />
-    <nd ref='20831107' />
-    <nd ref='20831108' />
-    <nd ref='20831109' />
-    <nd ref='20831100' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grosvenor Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910150' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20130936' />
-    <nd ref='20130939' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546548' timestamp='2007-04-30T23:48:49+01:00' user='nickw' visible='true'>
-    <nd ref='28348318' />
-    <nd ref='28345059' />
-    <nd ref='28348305' />
-    <nd ref='28348306' />
-    <nd ref='28348308' />
-    <nd ref='28348309' />
-    <nd ref='28348310' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lytham Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551572' timestamp='2007-05-02T00:35:34+01:00' visible='true'>
-    <nd ref='28418264' />
-    <nd ref='28418530' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Rolling Mews' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661841' timestamp='2007-05-26T20:15:34+01:00' visible='true'>
-    <nd ref='24924222' />
-    <nd ref='29632473' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3631343' timestamp='2006-10-09T23:26:39+01:00' user='nickw' visible='true'>
-    <nd ref='14727969' />
-    <nd ref='310848' />
-    <nd ref='650797' />
-    <nd ref='650799' />
-    <nd ref='650801' />
-    <nd ref='650803' />
-    <nd ref='310847' />
-    <nd ref='310855' />
-    <nd ref='310853' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Middle Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661846' timestamp='2007-10-16T11:34:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29632501' />
-    <nd ref='17721021' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996905' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957218' />
-    <nd ref='20957246' />
-    <nd ref='20957183' />
-    <nd ref='325650' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Greville Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061524' timestamp='2006-12-09T09:51:50+00:00' user='nickw' visible='true'>
-    <nd ref='21507744' />
-    <nd ref='21507745' />
-    <nd ref='21507748' />
-    <nd ref='21507749' />
-    <nd ref='21507750' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Roselands Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='367821' timestamp='2007-10-17T00:02:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9280983' />
-    <nd ref='596303' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bursledon Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8124974' timestamp='2007-10-29T16:25:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='14745436' />
-    <nd ref='14745429' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724586' timestamp='2007-06-08T23:30:31+01:00' visible='true'>
-    <nd ref='30096939' />
-    <nd ref='30096940' />
-    <nd ref='30096941' />
-    <nd ref='30096942' />
-    <nd ref='30096939' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539746' timestamp='2007-04-29T20:03:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237241' />
-    <nd ref='28240295' />
-    <nd ref='28240298' />
-    <nd ref='28240299' />
-    <nd ref='28240300' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pangbourne Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854815' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071235' />
-    <nd ref='13071319' />
-    <nd ref='13071318' />
-    <nd ref='13071317' />
-    <nd ref='13071316' />
-    <nd ref='13071315' />
-    <nd ref='13071314' />
-    <nd ref='13071256' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leybourne Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546536' timestamp='2007-04-30T23:45:38+01:00' user='nickw' visible='true'>
-    <nd ref='28348138' />
-    <nd ref='28348137' />
-    <nd ref='28348136' />
-    <nd ref='28348135' />
-    <nd ref='28345074' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Spinney Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16415170' timestamp='2007-12-14T21:43:15+00:00' user='nickw' visible='true'>
-    <nd ref='169435832' />
-    <nd ref='169435838' />
-    <nd ref='169435842' />
-    <nd ref='169435845' />
-    <nd ref='169435850' />
-    <nd ref='169435853' />
-    <nd ref='169435856' />
-    <nd ref='169435859' />
-    <nd ref='169435865' />
-    <nd ref='169435871' />
-    <nd ref='169435876' />
-    <nd ref='169435882' />
-    <nd ref='169435887' />
-    <nd ref='169435890' />
-    <nd ref='169435891' />
-    <nd ref='169435796' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Springford Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150427' timestamp='2007-05-26T20:15:22+01:00' visible='true'>
-    <nd ref='29632198' />
-    <nd ref='29632200' />
-    <nd ref='29632203' />
-    <nd ref='29632206' />
-    <nd ref='29632208' />
-    <nd ref='29632209' />
-    <nd ref='29632210' />
-    <nd ref='29632211' />
-    <nd ref='29632212' />
-    <nd ref='29632213' />
-    <nd ref='29632214' />
-    <nd ref='29632215' />
-    <nd ref='29632216' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539982' timestamp='2007-04-29T20:37:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243614' />
-    <nd ref='28243650' />
-    <nd ref='28243669' />
-    <nd ref='28243651' />
-    <nd ref='28243652' />
-    <nd ref='28243654' />
-    <nd ref='28243660' />
-    <nd ref='28243667' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Underwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077026' timestamp='2007-10-12T14:11:15+01:00' user='SteveC' visible='true'>
-    <nd ref='21600465' />
-    <nd ref='21600466' />
-    <nd ref='21600467' />
-    <nd ref='21189056' />
-    <nd ref='21189055' />
-    <nd ref='21189054' />
-    <nd ref='21189053' />
-    <nd ref='21092040' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Wimpson Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4683723' timestamp='2007-05-30T21:37:24+01:00' user='nickw' visible='true'>
-    <nd ref='28830676' />
-    <nd ref='29794381' />
-    <nd ref='29764417' />
-    <nd ref='29764418' />
-    <nd ref='29794379' />
-    <nd ref='29794378' />
-    <nd ref='29794377' />
-    <nd ref='29764419' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='High View Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8139070' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='9312075' />
-    <nd ref='9312077' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Denzil Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540772' timestamp='2007-06-02T19:21:42+01:00' visible='true'>
-    <nd ref='28250098' />
-    <nd ref='28250099' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ashdene' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546156' timestamp='2007-04-30T22:13:58+01:00' user='nickw' visible='true'>
-    <nd ref='28341798' />
-    <nd ref='28342581' />
-    <nd ref='28342582' />
-    <nd ref='28342583' />
-    <nd ref='28342584' />
-    <nd ref='28342585' />
-    <nd ref='28342586' />
-    <nd ref='28231288' />
-    <nd ref='28342563' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Magnolia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15451340' timestamp='2007-12-06T20:44:26+00:00' user='nickw' visible='true'>
-    <nd ref='153331748' />
-    <nd ref='153331760' />
-    <nd ref='153331773' />
-    <nd ref='153331781' />
-    <nd ref='153331791' />
-    <nd ref='153331802' />
-    <nd ref='153331814' />
-    <nd ref='153331824' />
-    <nd ref='153331837' />
-    <nd ref='153331851' />
-    <nd ref='153331864' />
-    <nd ref='153331882' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578752' timestamp='2006-10-07T00:25:25+01:00' user='nickw' visible='true'>
-    <nd ref='430649' />
-    <nd ref='17724249' />
-    <nd ref='17724248' />
-    <nd ref='17724247' />
-    <nd ref='17724246' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Handel Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009868' timestamp='2007-12-06T20:43:06+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21178480' />
-    <nd ref='21178479' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4679914' timestamp='2007-05-28T19:39:24+01:00' visible='true'>
-    <nd ref='17721057' />
-    <nd ref='17721058' />
-    <nd ref='17721059' />
-    <nd ref='17721060' />
-    <nd ref='17721061' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Causton Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4496258' timestamp='2007-04-23T23:02:21+01:00' visible='true'>
-    <nd ref='27563286' />
-    <nd ref='27563351' />
-    <nd ref='27563352' />
-    <nd ref='27563353' />
-    <nd ref='27563354' />
-    <nd ref='27563355' />
-    <nd ref='27563356' />
-    <nd ref='27563357' />
-    <nd ref='27563358' />
-    <nd ref='27563359' />
-    <nd ref='27563360' />
-    <nd ref='27563361' />
-    <tag k='access' v='private' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Orchards Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687640' timestamp='2007-05-30T22:30:44+01:00' user='nickw' visible='true'>
-    <nd ref='13071320' />
-    <nd ref='13071329' />
-    <nd ref='13071330' />
-    <nd ref='13071331' />
-    <nd ref='13071332' />
-    <nd ref='13071333' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rowborough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260196' timestamp='2006-05-22T22:23:18+01:00' user='nickw' visible='true'>
-    <nd ref='661176' />
-    <nd ref='28341754' />
-    <nd ref='661178' />
-    <nd ref='28341767' />
-    <nd ref='661179' />
-    <nd ref='661180' />
-    <nd ref='661181' />
-    <nd ref='661182' />
-    <nd ref='661183' />
-    <nd ref='661184' />
-    <nd ref='661185' />
-    <nd ref='28341785' />
-    <nd ref='661186' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brownlow Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3677084' timestamp='2007-06-22T21:44:10+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='8596798' />
-    <nd ref='30780758' />
-    <nd ref='30780755' />
-    <nd ref='30780752' />
-    <nd ref='30780714' />
-    <nd ref='18232073' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='West Marlands Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16610268' timestamp='2007-12-15T20:18:40+00:00' user='nickw' visible='true'>
-    <nd ref='171533030' />
-    <nd ref='171533039' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Briarswood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9674787' timestamp='2007-10-16T23:54:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973105' />
-    <nd ref='20973112' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578266' timestamp='2006-10-06T23:29:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15359723' />
-    <nd ref='15359712' />
-    <tag k='source:name' v='Hampshire county council' />
-    <tag k='highway' v='pedestrian' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='Leigh Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134045' timestamp='2007-10-16T17:59:45+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25896264' />
-    <nd ref='21613480' />
-    <nd ref='29838588' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Bournemouth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3987533' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831119' />
-    <nd ref='20831118' />
-    <nd ref='20831116' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Handford Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148391' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194863' />
-    <nd ref='28194865' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cleek Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539436' timestamp='2007-11-19T17:24:18+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28236115' />
-    <nd ref='28236117' />
-    <nd ref='28236118' />
-    <nd ref='28236120' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lime Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342671' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447507' />
-    <nd ref='26447506' />
-    <nd ref='26447505' />
-    <nd ref='26447383' />
-    <nd ref='26447502' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Cable Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074111' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561562' />
-    <nd ref='21561538' />
-    <nd ref='21275707' />
-    <nd ref='21561563' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Victor Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773512' timestamp='2007-06-17T22:15:49+01:00' visible='true'>
-    <nd ref='30508722' />
-    <nd ref='30508726' />
-    <nd ref='30508731' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Byron Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129254' timestamp='2006-09-08T02:12:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964144' />
-    <nd ref='14964145' />
-    <nd ref='14964146' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chafen Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1659' timestamp='2006-06-04T00:38:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='413144' />
-    <nd ref='413145' />
-    <nd ref='413158' />
-    <tag k='foot' v='unofficial' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='3998313' timestamp='2007-10-26T15:04:01+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='87937489' />
-    <nd ref='20965523' />
-    <nd ref='87937792' />
-    <nd ref='20965524' />
-    <tag k='highway' v='unclassified' />
-    <tag k='source' v='npe' />
-    <tag k='name' v='Misselbrook Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='10360075' timestamp='2007-10-26T12:15:04+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='87819949' />
-    <nd ref='87819784' />
-    <nd ref='87819785' />
-    <nd ref='87819786' />
-    <nd ref='87819944' />
-    <nd ref='87819945' />
-    <nd ref='87819947' />
-    <nd ref='87819948' />
-    <nd ref='87819949' />
-    <tag k='natural' v='water' />
-    <tag k='name' v='King George V Dry Dock' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4254575' timestamp='2007-01-27T23:31:20+00:00' visible='true'>
-    <nd ref='20967591' />
-    <nd ref='25480654' />
-    <nd ref='25480655' />
-    <nd ref='25480656' />
-    <nd ref='25480657' />
-    <nd ref='20967597' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4546502' timestamp='2007-04-30T23:36:54+01:00' user='nickw' visible='true'>
-    <nd ref='28345060' />
-    <nd ref='28345042' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Dyneley Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008583' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141375' />
-    <nd ref='21141418' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558170' timestamp='2007-05-02T23:58:14+01:00' visible='true'>
-    <nd ref='20976684' />
-    <nd ref='28582972' />
-    <nd ref='28582970' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601439' timestamp='2007-11-20T11:49:27+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92684539' />
-    <nd ref='92684540' />
-    <nd ref='92684541' />
-    <nd ref='92684542' />
-    <nd ref='92684539' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5b' />
-  </way>
-  <way id='3677096' timestamp='2006-10-14T13:19:13+01:00' user='nickw' visible='true'>
-    <nd ref='18232094' />
-    <nd ref='18232090' />
-    <nd ref='18232091' />
-    <nd ref='18232092' />
-    <nd ref='18232093' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Berkeley Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723789' timestamp='2007-12-08T20:07:48+00:00' user='nickw' visible='true'>
-    <nd ref='157200352' />
-    <nd ref='157200343' />
-    <nd ref='157200356' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wittering Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536700' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194887' />
-    <nd ref='28194888' />
-    <nd ref='28194889' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vermont Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4253360' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true'>
-    <nd ref='25471858' />
-    <nd ref='25471860' />
-    <nd ref='25471861' />
-    <nd ref='25471862' />
-    <nd ref='25471863' />
-    <nd ref='25471864' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1694' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319615' />
-    <nd ref='324346' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Padwell Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999849' timestamp='2006-11-13T21:50:58+00:00' user='nickw' visible='true'>
-    <nd ref='20976817' />
-    <nd ref='20976796' />
-    <nd ref='20976797' />
-    <nd ref='20976798' />
-    <nd ref='20976791' />
-    <nd ref='21141406' />
-    <nd ref='21141407' />
-    <nd ref='21141408' />
-    <nd ref='21141409' />
-    <nd ref='21141410' />
-    <nd ref='21141403' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wilton Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008579' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='325657' />
-    <nd ref='21141411' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bellemoor Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4747608' timestamp='2007-06-12T21:04:57+01:00' visible='true'>
-    <nd ref='30259420' />
-    <nd ref='30259427' />
-    <nd ref='30259416' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778249' timestamp='2006-08-04T12:00:05+01:00' user='nickw' visible='true'>
-    <nd ref='12594957' />
-    <nd ref='12595031' />
-    <nd ref='12594933' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Ranelagh Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4254705' timestamp='2007-01-28T00:56:06+00:00' visible='true'>
-    <nd ref='658473' />
-    <nd ref='19890077' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4015823' timestamp='2006-11-26T00:16:01+00:00' user='nickw' visible='true'>
-    <nd ref='21275695' />
-    <nd ref='21275635' />
-    <nd ref='11419589' />
-    <nd ref='11419590' />
-    <nd ref='11419591' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Heysham Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701997' timestamp='2007-06-03T16:22:57+01:00' visible='true'>
-    <nd ref='29704327' />
-    <nd ref='29914333' />
-    <nd ref='29914335' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sovereign Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605585' timestamp='2007-05-16T00:59:45+01:00' visible='true'>
-    <nd ref='29145255' />
-    <nd ref='29145253' />
-    <nd ref='29145257' />
-    <nd ref='29145259' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536140' timestamp='2007-04-29T01:53:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254633' />
-    <nd ref='28179442' />
-    <nd ref='28179443' />
-    <nd ref='28179444' />
-    <nd ref='28179445' />
-    <nd ref='28179446' />
-    <nd ref='28179447' />
-    <nd ref='254634' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Chilworth Drove' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15725191' timestamp='2007-12-08T20:20:38+00:00' user='nickw' visible='true'>
-    <nd ref='157218265' />
-    <nd ref='157218260' />
-    <nd ref='157218269' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sutherland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084959' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true'>
-    <nd ref='20971145' />
-    <nd ref='20971146' />
-    <nd ref='20971144' />
-    <nd ref='25764485' />
-    <nd ref='20971143' />
-    <nd ref='20971142' />
-    <nd ref='25764482' />
-    <nd ref='254884' />
-    <nd ref='254426' />
-    <nd ref='25938547' />
-    <nd ref='14726571' />
-    <nd ref='254427' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='St Mary's Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4540968' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252952' />
-    <nd ref='28252955' />
-    <nd ref='28252954' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687170' timestamp='2007-05-30T21:37:22+01:00' user='nickw' visible='true'>
-    <nd ref='28830665' />
-    <nd ref='29794381' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4707453' timestamp='2007-10-16T02:44:06+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29953504' />
-    <nd ref='29953505' />
-    <nd ref='29953502' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Vesta Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548024' timestamp='2007-12-14T21:29:01+00:00' user='nickw' visible='true'>
-    <nd ref='28372781' />
-    <nd ref='28372780' />
-    <nd ref='28372732' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ross Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8311327' timestamp='2007-10-12T14:04:19+01:00' user='SteveC' visible='true'>
-    <nd ref='21189056' />
-    <nd ref='21189057' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8130059' timestamp='2007-06-09T19:49:15+01:00' user='nickw' visible='true'>
-    <nd ref='20134845' />
-    <nd ref='20134848' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Culvery Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9676784' timestamp='2007-10-17T00:35:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20972818' />
-    <nd ref='20972819' />
-    <nd ref='20972820' />
-    <nd ref='20972821' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Terminus Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119869' timestamp='2006-06-04T00:35:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306323' />
-    <nd ref='544318' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brookvale Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4636413' timestamp='2007-12-10T20:58:41+00:00' user='sladen' visible='true'>
-    <nd ref='469878' />
-    <nd ref='29468537' />
-    <nd ref='160409627' />
-    <nd ref='160404154' />
-    <nd ref='29468540' />
-    <nd ref='29468545' />
-    <nd ref='160404155' />
-    <nd ref='160404156' />
-    <nd ref='160404157' />
-    <nd ref='29468546' />
-    <nd ref='160404159' />
-    <nd ref='29468550' />
-    <nd ref='160404161' />
-    <nd ref='160404162' />
-    <nd ref='29468554' />
-    <nd ref='29468557' />
-    <nd ref='29468560' />
-    <nd ref='29468565' />
-    <nd ref='29468567' />
-    <nd ref='29468569' />
-    <nd ref='29468578' />
-    <nd ref='29468585' />
-    <nd ref='29468591' />
-    <nd ref='29468594' />
-    <nd ref='29468597' />
-    <nd ref='25675781' />
-    <nd ref='29468473' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='name' v='Third Avenue' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4535829' timestamp='2007-04-29T01:04:30+01:00' visible='true'>
-    <nd ref='28173887' />
-    <nd ref='28173882' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Petworth Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342674' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447528' />
-    <nd ref='26447389' />
-    <nd ref='26447529' />
-    <nd ref='26447507' />
-    <nd ref='26447508' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Peel Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704066' timestamp='2007-06-03T22:23:16+01:00' visible='true'>
-    <nd ref='29815649' />
-    <nd ref='29930567' />
-    <nd ref='29930569' />
-    <nd ref='29930570' />
-    <nd ref='29505740' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084424' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689061' />
-    <nd ref='21689156' />
-    <nd ref='21689157' />
-    <nd ref='24924100' />
-    <nd ref='21689049' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585174' timestamp='2007-05-12T09:40:24+01:00' user='nickw' visible='true'>
-    <nd ref='29001317' />
-    <nd ref='29001316' />
-    <nd ref='29001315' />
-    <nd ref='29001299' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Collier Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295851' timestamp='2007-02-16T20:53:40+00:00' user='nickw' visible='true'>
-    <nd ref='25947179' />
-    <nd ref='25765747' />
-    <nd ref='25947171' />
-    <nd ref='518770' />
-    <nd ref='25947173' />
-    <nd ref='25938548' />
-    <nd ref='25947175' />
-    <nd ref='25764481' />
-    <nd ref='25764487' />
-    <nd ref='518769' />
-    <nd ref='25947181' />
-    <nd ref='25764480' />
-    <nd ref='25764435' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='Some of this is Access Only' />
-    <tag k='name' v='Derby Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800107' timestamp='2008-02-03T06:14:59+00:00' user='sladen' visible='true'>
-    <nd ref='245147719' />
-    <nd ref='254412' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4540339' timestamp='2007-04-29T21:10:00+01:00' visible='true'>
-    <nd ref='28194423' />
-    <nd ref='28194424' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brambling Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1675' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306317' />
-    <nd ref='306314' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Abbotts Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4476662' timestamp='2007-04-18T02:00:25+01:00' visible='true'>
-    <nd ref='518802' />
-    <nd ref='27440005' />
-    <nd ref='27440006' />
-    <nd ref='27440007' />
-    <nd ref='27440012' />
-    <nd ref='27440013' />
-    <nd ref='27440014' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saltmead' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269321' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639896' />
-    <nd ref='25639920' />
-    <nd ref='25639921' />
-    <nd ref='25639922' />
-    <nd ref='25639923' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Lower Vicarage Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701906' timestamp='2007-06-03T15:54:45+01:00' visible='true'>
-    <nd ref='29913604' />
-    <nd ref='29913605' />
-    <nd ref='29913606' />
-    <nd ref='29913607' />
-    <nd ref='29913608' />
-    <nd ref='29913609' />
-    <nd ref='29913610' />
-    <nd ref='29913611' />
-    <nd ref='29913612' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4480991' timestamp='2007-04-19T17:56:00+01:00' visible='true'>
-    <nd ref='27467568' />
-    <nd ref='27467566' />
-    <nd ref='27467570' />
-    <nd ref='27467573' />
-    <nd ref='27467575' />
-    <nd ref='27467561' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mead Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129262' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964121' />
-    <nd ref='14964120' />
-    <nd ref='14964119' />
-    <nd ref='14964118' />
-    <nd ref='14964117' />
-    <nd ref='14964116' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harcourt Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074113' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561557' />
-    <nd ref='21561522' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cannon Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4313903' timestamp='2007-02-25T10:47:03+00:00' user='nickw' visible='true'>
-    <nd ref='469886' />
-    <nd ref='21275698' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580479' timestamp='2007-07-01T00:23:41+01:00' visible='true'>
-    <nd ref='28935720' />
-    <nd ref='28935721' />
-    <nd ref='28935722' />
-    <nd ref='28935723' />
-    <nd ref='28935724' />
-    <nd ref='28935726' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Abercrombie Gardens' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='13250694' timestamp='2007-11-18T19:00:11+00:00' user='nickw' visible='true'>
-    <nd ref='122315313' />
-    <nd ref='122315318' />
-    <nd ref='122315321' />
-    <tag k='highway' v='residential' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Pitt Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4488745' timestamp='2008-01-29T12:02:02+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254686' />
-    <nd ref='27512881' />
-    <nd ref='27512882' />
-    <nd ref='27512883' />
-    <nd ref='27512884' />
-    <nd ref='27512885' />
-    <nd ref='27512886' />
-    <nd ref='243979485' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Campbell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743134' timestamp='2007-06-11T22:16:55+01:00' visible='true'>
-    <nd ref='30224278' />
-    <nd ref='30225797' />
-    <nd ref='30225795' />
-    <nd ref='30223085' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4310897' timestamp='2007-02-23T21:48:35+00:00' user='nickw' visible='true'>
-    <nd ref='26114374' />
-    <nd ref='26114395' />
-    <nd ref='26114372' />
-    <nd ref='26114371' />
-    <nd ref='26114370' />
-    <nd ref='26114369' />
-    <nd ref='26114364' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4732324' timestamp='2007-06-10T18:15:23+01:00' visible='true'>
-    <nd ref='30161110' />
-    <nd ref='30161111' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703303' timestamp='2007-06-03T20:41:58+01:00' visible='true'>
-    <nd ref='29925338' />
-    <nd ref='29925390' />
-    <nd ref='29925391' />
-    <nd ref='29925392' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Denbigh Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2651646' timestamp='2007-10-16T20:09:33+01:00' user='Dean Earley' visible='true'>
-    <nd ref='247787' />
-    <nd ref='247788' />
-    <nd ref='247789' />
-    <nd ref='247790' />
-    <nd ref='75690566' />
-    <nd ref='42141460' />
-    <nd ref='247791' />
-    <nd ref='247792' />
-    <nd ref='42141454' />
-    <nd ref='247793' />
-    <nd ref='19035797' />
-    <nd ref='42141446' />
-    <nd ref='42141440' />
-    <nd ref='247794' />
-    <nd ref='19035800' />
-    <nd ref='27021816' />
-    <nd ref='247795' />
-    <nd ref='247796' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='University Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10568676' timestamp='2007-10-29T16:05:07+00:00' user='Dean Earley' visible='true'>
-    <nd ref='17721014' />
-    <nd ref='14745476' />
-    <tag k='oneway' v='no' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732319' timestamp='2007-06-10T18:15:22+01:00' visible='true'>
-    <nd ref='30161102' />
-    <nd ref='30161117' />
-    <nd ref='30161119' />
-    <nd ref='30161120' />
-    <nd ref='30161123' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773443' timestamp='2007-06-17T22:03:39+01:00' visible='true'>
-    <nd ref='29704539' />
-    <nd ref='30506805' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687636' timestamp='2007-05-30T22:26:35+01:00' user='nickw' visible='true'>
-    <nd ref='29796854' />
-    <nd ref='29796863' />
-    <nd ref='29796864' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='West End Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8441025' timestamp='2007-11-28T12:24:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29530519' />
-    <nd ref='29709172' />
-    <nd ref='29506479' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='track' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4577383' timestamp='2007-05-09T23:03:53+01:00' visible='true'>
-    <nd ref='28903065' />
-    <nd ref='28903064' />
-    <nd ref='28903062' />
-    <nd ref='28903052' />
-    <nd ref='28903066' />
-    <nd ref='28903055' />
-    <nd ref='28903056' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Walnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764765' timestamp='2007-06-16T16:26:34+01:00' visible='true'>
-    <nd ref='30431962' />
-    <nd ref='30431958' />
-    <nd ref='30431954' />
-    <nd ref='30431967' />
-    <nd ref='30431962' />
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Shakespear Junior School' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2417622' timestamp='2006-07-13T23:46:44+01:00' user='Dean Earley' visible='true'>
-    <nd ref='474651' />
-    <nd ref='10537333' />
-    <nd ref='10537335' />
-    <nd ref='474652' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149933' timestamp='2007-05-20T18:03:06+01:00' visible='true'>
-    <nd ref='29392380' />
-    <nd ref='29392355' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Meadow Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16414043' timestamp='2007-12-14T21:35:48+00:00' user='nickw' visible='true'>
-    <nd ref='169423477' />
-    <nd ref='21600525' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coxford Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604443' timestamp='2007-05-15T20:38:58+01:00' user='nickw' visible='true'>
-    <nd ref='29133007' />
-    <nd ref='29133045' />
-    <nd ref='29133049' />
-    <nd ref='29133052' />
-    <nd ref='29133056' />
-    <nd ref='29133060' />
-    <nd ref='29133064' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152667' timestamp='2007-06-17T22:25:20+01:00' visible='true'>
-    <nd ref='30509428' />
-    <nd ref='30509431' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Hathaway Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3102399' timestamp='2007-12-10T20:57:19+00:00' user='sladen' visible='true'>
-    <nd ref='469874' />
-    <nd ref='469875' />
-    <nd ref='469876' />
-    <nd ref='122319000' />
-    <nd ref='14806971' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Foundry Lane' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='15723785' timestamp='2007-12-08T20:07:48+00:00' user='nickw' visible='true'>
-    <nd ref='157200329' />
-    <nd ref='157200332' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tangmere Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749610' timestamp='2007-06-13T09:24:36+01:00' visible='true'>
-    <nd ref='29549370' />
-    <nd ref='30089035' />
-    <nd ref='30089036' />
-    <nd ref='30089037' />
-    <nd ref='30089072' />
-    <nd ref='30089070' />
-    <nd ref='30089068' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kingfisher Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121938' timestamp='2007-10-16T17:59:44+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25303939' />
-    <nd ref='25303937' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4724582' timestamp='2007-06-08T23:30:30+01:00' visible='true'>
-    <nd ref='30089102' />
-    <nd ref='30089104' />
-    <nd ref='30089106' />
-    <nd ref='30089108' />
-    <nd ref='30089110' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Dovedale' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120834' timestamp='2007-10-17T00:02:44+01:00' user='Dean Earley' visible='true'>
-    <nd ref='596303' />
-    <nd ref='26727682' />
-    <nd ref='596304' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bursledon Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4558177' timestamp='2007-05-02T23:58:15+01:00' visible='true'>
-    <nd ref='28583047' />
-    <nd ref='28583051' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4711406' timestamp='2007-06-05T21:01:51+01:00' visible='true'>
-    <nd ref='29706971' />
-    <nd ref='29913604' />
-    <nd ref='29707279' />
-    <nd ref='29707280' />
-    <nd ref='29707709' />
-    <nd ref='29707281' />
-    <nd ref='29707282' />
-    <nd ref='29816642' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1261336' timestamp='2006-07-01T03:20:15+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9280992' />
-    <nd ref='20966368' />
-    <nd ref='13071217' />
-    <nd ref='13071216' />
-    <nd ref='254416' />
-    <nd ref='13071215' />
-    <nd ref='13071214' />
-    <nd ref='13071218' />
-    <nd ref='254417' />
-    <nd ref='254418' />
-    <nd ref='25305498' />
-    <nd ref='254387' />
-    <nd ref='254419' />
-    <nd ref='254420' />
-    <nd ref='254421' />
-    <nd ref='700489' />
-    <nd ref='254422' />
-    <nd ref='700514' />
-    <nd ref='28830651' />
-    <nd ref='254423' />
-    <nd ref='675856' />
-    <nd ref='254424' />
-    <nd ref='254548' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Midanbury Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4539432' timestamp='2007-04-29T19:27:54+01:00' user='Andy Street' visible='true'>
-    <nd ref='28236095' />
-    <nd ref='28236097' />
-    <nd ref='28236099' />
-    <nd ref='28236100' />
-    <nd ref='28231078' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Emerald Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1935' timestamp='2006-06-17T22:23:21+01:00' user='nickw' visible='true'>
-    <nd ref='635133' />
-    <nd ref='10942664' />
-    <nd ref='657766' />
-    <nd ref='26728562' />
-    <nd ref='10942468' />
-    <nd ref='657767' />
-    <nd ref='28342540' />
-    <nd ref='657768' />
-    <nd ref='26728561' />
-    <nd ref='10942563' />
-    <nd ref='657769' />
-    <nd ref='21624971' />
-    <nd ref='657770' />
-    <nd ref='657771' />
-    <nd ref='254467' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Sholing Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4548020' timestamp='2007-05-01T10:05:40+01:00' visible='true'>
-    <nd ref='28372761' />
-    <nd ref='28372762' />
-    <nd ref='28372763' />
-    <nd ref='28372764' />
-    <nd ref='28372765' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Jessamine Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079296' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636796' />
-    <nd ref='21636735' />
-    <nd ref='21636808' />
-    <nd ref='21636806' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pine Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4639911' timestamp='2007-05-23T17:04:43+01:00' visible='true'>
-    <nd ref='29512139' />
-    <nd ref='29512250' />
-    <nd ref='29512252' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Lawn Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1679' timestamp='2006-06-11T01:09:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='307475' />
-    <nd ref='387807' />
-    <nd ref='387806' />
-    <nd ref='387805' />
-    <nd ref='447393' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Oakmount Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4628075' timestamp='2007-05-24T00:05:57+01:00' visible='true'>
-    <nd ref='29392430' />
-    <nd ref='29389523' />
-    <nd ref='29392363' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='High Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4253356' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true'>
-    <nd ref='25471839' />
-    <nd ref='25471840' />
-    <nd ref='25471841' />
-    <nd ref='25471837' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Meadowside Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635713' timestamp='2007-05-21T23:53:41+01:00' user='nickw' visible='true'>
-    <nd ref='29462158' />
-    <nd ref='29462159' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Russell Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148423' timestamp='2007-06-10T18:15:28+01:00' visible='true'>
-    <nd ref='29392355' />
-    <nd ref='29389522' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Desbourough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4238067' timestamp='2007-05-16T00:37:10+01:00' visible='true'>
-    <nd ref='254698' />
-    <nd ref='4931456' />
-    <tag k='width' v='3' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604599' timestamp='2007-05-15T20:56:06+01:00' user='nickw' visible='true'>
-    <nd ref='29134107' />
-    <nd ref='29135254' />
-    <nd ref='29135256' />
-    <nd ref='29135259' />
-    <nd ref='29134109' />
-    <nd ref='29135261' />
-    <nd ref='29135263' />
-    <nd ref='29135266' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bonchurch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4553986' timestamp='2007-05-02T17:09:14+01:00' visible='true'>
-    <nd ref='28418541' />
-    <nd ref='28418538' />
-    <nd ref='28418539' />
-    <nd ref='28418540' />
-    <nd ref='28418541' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='YahooApplet 1.0' />
-  </way>
-  <way id='8152290' timestamp='2007-06-12T21:04:57+01:00' visible='true'>
-    <nd ref='30259414' />
-    <nd ref='30259418' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Selwyn Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123249' timestamp='2007-10-16T19:19:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9266206' />
-    <nd ref='27021765' />
-    <nd ref='254694' />
-    <nd ref='9267992' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='width' v='4' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4075486' timestamp='2007-10-29T16:25:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='27513796' />
-    <nd ref='21585941' />
-    <nd ref='21585944' />
-    <nd ref='30161107' />
-    <nd ref='21585942' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cranbury Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3906608' timestamp='2007-06-26T23:45:23+01:00' user='nickw' visible='true'>
-    <nd ref='20107338' />
-    <nd ref='20107352' />
-    <nd ref='30956633' />
-    <nd ref='20107354' />
-    <nd ref='474651' />
-    <tag k='ref' v='C194' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209580' timestamp='2007-10-29T15:43:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25896423' />
-    <nd ref='24924287' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3278' timestamp='2006-06-04T00:35:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700436' />
-    <nd ref='700437' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Stanley Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4215242' timestamp='2007-01-10T00:20:48+00:00' user='nickw' visible='true'>
-    <nd ref='24984756' />
-    <nd ref='24984757' />
-    <nd ref='24984665' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Row' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635770' timestamp='2008-02-03T06:02:10+00:00' user='sladen' visible='true'>
-    <nd ref='29463004' />
-    <nd ref='29463005' />
-    <nd ref='29463006' />
-    <nd ref='29463008' />
-    <nd ref='29463009' />
-    <nd ref='29463031' />
-    <nd ref='245147280' />
-    <nd ref='245147281' />
-    <nd ref='245147282' />
-    <nd ref='245147283' />
-    <nd ref='29463030' />
-    <nd ref='29463011' />
-    <nd ref='29463012' />
-    <nd ref='29463014' />
-    <nd ref='29463015' />
-    <nd ref='29463016' />
-    <nd ref='29463018' />
-    <nd ref='29463019' />
-    <nd ref='29463020' />
-    <nd ref='29463022' />
-    <nd ref='29463023' />
-    <nd ref='29463024' />
-    <nd ref='29463026' />
-    <nd ref='29463027' />
-    <nd ref='29463028' />
-    <nd ref='29463002' />
-    <nd ref='29463004' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4701841' timestamp='2007-06-03T15:40:33+01:00' visible='true'>
-    <nd ref='29509910' />
-    <nd ref='29911931' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043747' timestamp='2006-12-02T22:59:21+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419244' />
-    <nd ref='21419252' />
-    <nd ref='21419253' />
-    <nd ref='21419254' />
-    <nd ref='21419255' />
-    <nd ref='21419256' />
-    <nd ref='21419252' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005410' timestamp='2007-12-10T21:01:39+00:00' user='sladen' visible='true'>
-    <nd ref='21091854' />
-    <nd ref='160414998' />
-    <nd ref='21091850' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Almond Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='5947663' timestamp='2007-11-29T15:23:46+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='48958681' />
-    <nd ref='48958690' />
-    <nd ref='48958694' />
-    <nd ref='48958695' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fitzhugh Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4679926' timestamp='2007-05-28T19:39:35+01:00' visible='true'>
-    <nd ref='29730521' />
-    <nd ref='29730529' />
-    <nd ref='29730528' />
-    <nd ref='29730527' />
-    <nd ref='29730526' />
-    <nd ref='29730525' />
-    <nd ref='29730524' />
-    <nd ref='29730523' />
-    <nd ref='29730522' />
-    <nd ref='29730520' />
-    <nd ref='29730521' />
-    <tag k='leisure' v='sports_centre' />
-    <tag k='name' v='Flemming Park Leisure Centre' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586247' timestamp='2007-05-12T15:36:08+01:00' user='nickw' visible='true'>
-    <nd ref='29009193' />
-    <nd ref='29009218' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harbourne Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996917' timestamp='2006-11-10T21:59:07+00:00' user='nickw' visible='true'>
-    <nd ref='20957206' />
-    <nd ref='20957208' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Newlands Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556613' timestamp='2007-10-29T08:15:56+00:00' user='nickw' visible='true'>
-    <nd ref='91120351' />
-    <nd ref='91123653' />
-    <nd ref='91123655' />
-    <nd ref='91123658' />
-    <nd ref='91123661' />
-    <nd ref='91123665' />
-    <nd ref='91123669' />
-    <nd ref='91123673' />
-    <nd ref='91123677' />
-    <nd ref='91123680' />
-    <nd ref='91123661' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thorndike Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015802' timestamp='2006-11-26T00:07:51+00:00' user='nickw' visible='true'>
-    <nd ref='21275692' />
-    <nd ref='21275638' />
-    <nd ref='21275770' />
-    <nd ref='21275768' />
-    <nd ref='21275766' />
-    <nd ref='21275764' />
-    <nd ref='21275776' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nelson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540749' timestamp='2007-04-29T21:43:30+01:00' visible='true'>
-    <nd ref='27239004' />
-    <nd ref='28249899' />
-    <nd ref='28249990' />
-    <nd ref='28249985' />
-    <nd ref='28249901' />
-    <nd ref='28249978' />
-    <nd ref='28249971' />
-    <nd ref='28249902' />
-    <nd ref='28249943' />
-    <nd ref='28249904' />
-    <nd ref='28249898' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='King George's Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3805998' timestamp='2006-10-22T10:18:19+01:00' user='nickw' visible='true'>
-    <nd ref='19035790' />
-    <nd ref='413144' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Granby Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818219' timestamp='2007-06-26T23:45:19+01:00' user='nickw' visible='true'>
-    <nd ref='10537326' />
-    <nd ref='30956570' />
-    <nd ref='30956571' />
-    <nd ref='30956572' />
-    <nd ref='30956573' />
-    <nd ref='30956569' />
-    <nd ref='30956574' />
-    <nd ref='30956575' />
-    <nd ref='30956576' />
-    <nd ref='30956579' />
-    <nd ref='30956580' />
-    <nd ref='30956581' />
-    <nd ref='30956582' />
-    <nd ref='30956583' />
-    <nd ref='30956584' />
-    <nd ref='30956585' />
-    <nd ref='30956586' />
-    <nd ref='30956587' />
-    <nd ref='30956588' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732315' timestamp='2007-06-16T16:26:52+01:00' visible='true'>
-    <nd ref='30161113' />
-    <nd ref='30161100' />
-    <nd ref='30431984' />
-    <nd ref='29510734' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='George Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4083482' timestamp='2008-02-03T06:07:45+00:00' user='sladen' visible='true'>
-    <nd ref='635142' />
-    <nd ref='245148856' />
-    <nd ref='245148640' />
-    <nd ref='21677587' />
-    <nd ref='21677588' />
-    <nd ref='21677589' />
-    <nd ref='21677590' />
-    <nd ref='285866' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Pound Tree Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='9652513' timestamp='2007-10-16T17:59:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254749' />
-    <nd ref='14728172' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4551442' timestamp='2007-05-01T23:50:25+01:00' user='nickw' visible='true'>
-    <nd ref='28414272' />
-    <nd ref='21689157' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='694' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='650906' />
-    <nd ref='650905' />
-    <nd ref='650903' />
-    <nd ref='650904' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Heatherdeane Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546163' timestamp='2007-04-30T22:13:59+01:00' user='nickw' visible='true'>
-    <nd ref='28342556' />
-    <nd ref='28342537' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Magnolia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150674' timestamp='2007-05-28T19:39:32+01:00' visible='true'>
-    <nd ref='29730518' />
-    <nd ref='29730513' />
-    <nd ref='29730504' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Kornwestheim Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209530' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='24924084' />
-    <nd ref='24924085' />
-    <nd ref='24924086' />
-    <nd ref='24924087' />
-    <nd ref='24924088' />
-    <nd ref='24924089' />
-    <nd ref='24924090' />
-    <nd ref='24924099' />
-    <nd ref='24924091' />
-    <nd ref='21689158' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574119' timestamp='2007-05-08T14:51:00+01:00' visible='true'>
-    <nd ref='28874079' />
-    <nd ref='28874080' />
-    <nd ref='28874070' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Myrtle Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999323' timestamp='2006-11-13T00:42:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20973100' />
-    <nd ref='8596807' />
-    <nd ref='20973101' />
-    <nd ref='20973102' />
-    <nd ref='20973103' />
-    <nd ref='20973104' />
-    <nd ref='8596767' />
-    <nd ref='20973100' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644826' timestamp='2007-05-24T11:23:15+01:00' visible='true'>
-    <nd ref='29549387' />
-    <nd ref='29549388' />
-    <nd ref='29549389' />
-    <nd ref='29549390' />
-    <nd ref='29549391' />
-    <nd ref='29549387' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Falcon Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342626' timestamp='2007-03-09T20:54:26+00:00' user='nickw' visible='true'>
-    <nd ref='20972789' />
-    <nd ref='20972834' />
-    <nd ref='26447402' />
-    <nd ref='26447401' />
-    <nd ref='26447400' />
-    <nd ref='26447399' />
-    <nd ref='26447381' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='Unclear where Paget Street ends and Anderson's Road starts. Guessed it was at the intersection' />
-    <tag k='name' v='Anderson's Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15722939' timestamp='2007-12-08T20:00:26+00:00' user='nickw' visible='true'>
-    <nd ref='157190813' />
-    <nd ref='157188685' />
-    <nd ref='157190818' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gemini Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3102395' timestamp='2007-07-09T11:55:50+01:00' visible='true'>
-    <nd ref='19892124' />
-    <nd ref='19892126' />
-    <nd ref='19892127' />
-    <nd ref='254567' />
-    <nd ref='254568' />
-    <nd ref='31486269' />
-    <nd ref='31486271' />
-    <nd ref='254575' />
-    <nd ref='26447520' />
-    <nd ref='254554' />
-    <nd ref='254556' />
-    <nd ref='254557' />
-    <nd ref='254558' />
-    <nd ref='254559' />
-    <nd ref='254560' />
-    <nd ref='254563' />
-    <nd ref='254501' />
-    <nd ref='254504' />
-    <nd ref='254506' />
-    <nd ref='254507' />
-    <nd ref='254509' />
-    <nd ref='254510' />
-    <nd ref='19892128' />
-    <nd ref='254512' />
-    <nd ref='254515' />
-    <nd ref='19892129' />
-    <nd ref='254521' />
-    <nd ref='254522' />
-    <nd ref='254524' />
-    <nd ref='254525' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Millbank Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150884' timestamp='2007-05-29T20:52:59+01:00' visible='true'>
-    <nd ref='29762260' />
-    <nd ref='24949902' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151058' timestamp='2007-05-31T21:48:20+01:00' visible='true'>
-    <nd ref='29815635' />
-    <nd ref='29815636' />
-    <nd ref='29815637' />
-    <nd ref='29815638' />
-    <nd ref='29815639' />
-    <nd ref='29815640' />
-    <nd ref='29815641' />
-    <nd ref='29815642' />
-    <nd ref='29815643' />
-    <nd ref='29815644' />
-    <nd ref='29815645' />
-    <nd ref='29815646' />
-    <nd ref='29815647' />
-    <nd ref='29815648' />
-    <nd ref='29815649' />
-    <nd ref='29815650' />
-    <nd ref='29815651' />
-    <nd ref='29815652' />
-    <nd ref='29815653' />
-    <nd ref='29815654' />
-    <nd ref='29815658' />
-    <nd ref='29815659' />
-    <nd ref='29815660' />
-    <nd ref='29815661' />
-    <nd ref='29815662' />
-    <nd ref='29815663' />
-    <nd ref='29815664' />
-    <nd ref='29815665' />
-    <nd ref='29815666' />
-    <nd ref='29815667' />
-    <nd ref='29815668' />
-    <nd ref='29815669' />
-    <nd ref='29815670' />
-    <nd ref='29815671' />
-    <nd ref='29815672' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636148' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='16963756' />
-    <nd ref='29464245' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196520' timestamp='2007-01-04T21:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='24668232' />
-    <nd ref='24668063' />
-    <nd ref='24668388' />
-    <nd ref='24668332' />
-    <nd ref='24668174' />
-    <nd ref='24668060' />
-    <nd ref='24667968' />
-    <nd ref='24668382' />
-    <nd ref='24668309' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Foyle Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2651606' timestamp='2007-05-22T00:20:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464287' />
-    <nd ref='29464289' />
-    <nd ref='29003030' />
-    <nd ref='422984' />
-    <nd ref='21507799' />
-    <nd ref='422985' />
-    <nd ref='27021751' />
-    <nd ref='331357' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Chetwynd Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4539538' timestamp='2007-04-29T19:42:12+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237226' />
-    <nd ref='28237227' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Maxwell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540252' timestamp='2007-04-29T20:59:45+01:00' user='Dean Earley' visible='true'>
-    <nd ref='325666' />
-    <nd ref='28246358' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arcadia Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148803' timestamp='2007-06-03T14:59:30+01:00' visible='true'>
-    <nd ref='28418525' />
-    <nd ref='28418523' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chadwick Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084414' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689113' />
-    <nd ref='21689112' />
-    <nd ref='21689111' />
-    <nd ref='21689110' />
-    <nd ref='21689109' />
-    <nd ref='21689115' />
-    <nd ref='21689116' />
-    <nd ref='21689117' />
-    <nd ref='21689108' />
-    <nd ref='21689107' />
-    <nd ref='21689106' />
-    <nd ref='21689105' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Honeysuckle Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644818' timestamp='2007-05-24T11:23:12+01:00' visible='true'>
-    <nd ref='29548694' />
-    <nd ref='29548697' />
-    <nd ref='29548698' />
-    <nd ref='29548699' />
-    <nd ref='29548700' />
-    <nd ref='29548697' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Burns Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260931' timestamp='2006-05-22T22:34:55+01:00' user='nickw' visible='true'>
-    <nd ref='319630' />
-    <nd ref='19890072' />
-    <nd ref='19890074' />
-    <nd ref='319633' />
-    <nd ref='19890068' />
-    <nd ref='19890066' />
-    <nd ref='608184' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Lawn Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2652769' timestamp='2007-11-06T18:10:44+00:00' user='nickw' visible='true'>
-    <nd ref='474851' />
-    <nd ref='254256' />
-    <nd ref='29001618' />
-    <nd ref='29001620' />
-    <nd ref='25783072' />
-    <nd ref='254257' />
-    <nd ref='2784524' />
-    <nd ref='254258' />
-    <nd ref='254260' />
-    <nd ref='2784526' />
-    <nd ref='254261' />
-    <nd ref='254262' />
-    <nd ref='25783095' />
-    <nd ref='25783094' />
-    <nd ref='25783093' />
-    <nd ref='25783092' />
-    <nd ref='254263' />
-    <nd ref='254264' />
-    <nd ref='254265' />
-    <nd ref='254266' />
-    <nd ref='254267' />
-    <nd ref='254268' />
-    <nd ref='254269' />
-    <nd ref='254270' />
-    <nd ref='254271' />
-    <nd ref='254272' />
-    <nd ref='254273' />
-    <nd ref='254274' />
-    <nd ref='254275' />
-    <nd ref='254276' />
-    <nd ref='254277' />
-    <nd ref='254278' />
-    <nd ref='254279' />
-    <nd ref='269309' />
-    <nd ref='254282' />
-    <nd ref='254283' />
-    <nd ref='254284' />
-    <nd ref='254285' />
-    <nd ref='254286' />
-    <nd ref='254287' />
-    <nd ref='254288' />
-    <nd ref='254289' />
-    <nd ref='254290' />
-    <nd ref='254291' />
-    <nd ref='254292' />
-    <nd ref='254293' />
-    <nd ref='254294' />
-    <nd ref='254295' />
-    <nd ref='254296' />
-    <nd ref='254297' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='name' v='Itchen Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4015815' timestamp='2006-11-26T00:10:32+00:00' user='nickw' visible='true'>
-    <nd ref='21275693' />
-    <nd ref='21275642' />
-    <nd ref='21275627' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whitelaw Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604641' timestamp='2007-05-15T20:58:25+01:00' user='nickw' visible='true'>
-    <nd ref='24984706' />
-    <nd ref='29135559' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Summerfield Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540334' timestamp='2007-04-29T21:10:00+01:00' visible='true'>
-    <nd ref='28194411' />
-    <nd ref='28194412' />
-    <tag k='name' v='Harrier Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150624' timestamp='2007-05-28T11:06:41+01:00' visible='true'>
-    <nd ref='29704962' />
-    <nd ref='29704961' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Ruskin Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788498' timestamp='2008-01-04T19:34:27+00:00' user='nickw' visible='true'>
-    <nd ref='206163274' />
-    <nd ref='206163275' />
-    <nd ref='206163276' />
-    <nd ref='206163277' />
-    <nd ref='206163278' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nursery Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='11968801' timestamp='2007-11-11T18:09:41+00:00' user='Dean Earley' visible='true'>
-    <nd ref='107808668' />
-    <nd ref='107808731' />
-    <nd ref='107808671' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536692' timestamp='2007-04-29T08:58:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194843' />
-    <nd ref='28194855' />
-    <nd ref='28194856' />
-    <nd ref='28194857' />
-    <nd ref='28194858' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Mews' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152654' timestamp='2007-06-17T21:45:22+01:00' visible='true'>
-    <nd ref='30504461' />
-    <nd ref='30504515' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818445' timestamp='2007-10-16T17:22:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='530525' />
-    <nd ref='12889437' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546065' timestamp='2007-04-30T21:49:12+01:00' user='nickw' visible='true'>
-    <nd ref='28341763' />
-    <nd ref='28341764' />
-    <nd ref='28341765' />
-    <nd ref='28341766' />
-    <nd ref='28230915' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bitterne Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074121' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561526' />
-    <nd ref='21561532' />
-    <nd ref='21561568' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Newbury Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151622' timestamp='2007-06-05T20:54:58+01:00' visible='true'>
-    <nd ref='29928073' />
-    <nd ref='29991809' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854811' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071248' />
-    <nd ref='13071249' />
-    <nd ref='13071250' />
-    <nd ref='13071252' />
-    <nd ref='13071253' />
-    <nd ref='13071254' />
-    <nd ref='13071256' />
-    <nd ref='13071257' />
-    <nd ref='13071258' />
-    <nd ref='13071259' />
-    <nd ref='13071261' />
-    <nd ref='13071263' />
-    <nd ref='13071264' />
-    <nd ref='13071265' />
-    <nd ref='13071267' />
-    <nd ref='13071268' />
-    <nd ref='13071269' />
-    <nd ref='13071270' />
-    <nd ref='13105009' />
-    <nd ref='13071271' />
-    <nd ref='13071273' />
-    <nd ref='13071274' />
-    <nd ref='13071275' />
-    <nd ref='13071276' />
-    <nd ref='13071278' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Montgomery Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635652' timestamp='2007-05-21T23:43:21+01:00' user='nickw' visible='true'>
-    <nd ref='29461221' />
-    <nd ref='29461219' />
-    <nd ref='29461217' />
-    <nd ref='29461218' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Craven Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043823' timestamp='2006-12-02T23:18:58+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419451' />
-    <nd ref='21419443' />
-    <nd ref='21419444' />
-    <nd ref='21419445' />
-    <nd ref='21419446' />
-    <nd ref='21419447' />
-    <nd ref='21419448' />
-    <nd ref='21419449' />
-    <nd ref='21419450' />
-    <nd ref='21419451' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pilgrim Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092127' timestamp='2008-02-03T06:12:31+00:00' user='sladen' visible='true'>
-    <nd ref='254444' />
-    <nd ref='245149859' />
-    <nd ref='245148562' />
-    <nd ref='254445' />
-    <nd ref='20971151' />
-    <nd ref='245149521' />
-    <nd ref='254446' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3907163' timestamp='2006-10-27T23:39:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20102979' />
-    <nd ref='20110906' />
-    <nd ref='20110835' />
-    <nd ref='20110949' />
-    <nd ref='20110920' />
-    <nd ref='20110904' />
-    <nd ref='20110815' />
-    <nd ref='20110937' />
-    <nd ref='20110894' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='River Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237900' timestamp='2007-01-19T18:57:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25303936' />
-    <nd ref='254896' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Hill Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009864' timestamp='2008-01-25T18:27:46+00:00' visible='true'>
-    <nd ref='298243' />
-    <nd ref='21496776' />
-    <nd ref='21496775' />
-    <nd ref='17723046' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569972' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true'>
-    <nd ref='28830640' />
-    <nd ref='28830639' />
-    <nd ref='28830570' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cornwall Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10598001' timestamp='2007-10-30T16:47:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21613420' />
-    <nd ref='21613421' />
-    <nd ref='21613425' />
-    <nd ref='21613426' />
-    <nd ref='21613432' />
-    <nd ref='21613433' />
-    <nd ref='21613434' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Raglan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540756' timestamp='2007-06-02T19:30:45+01:00' visible='true'>
-    <nd ref='28249957' />
-    <nd ref='28249968' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Marianne Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4076801' timestamp='2007-06-12T00:14:51+01:00' user='nickw' visible='true'>
-    <nd ref='21599025' />
-    <nd ref='13564832' />
-    <nd ref='21599026' />
-    <nd ref='13564833' />
-    <nd ref='21599028' />
-    <nd ref='30229593' />
-    <nd ref='21599027' />
-    <nd ref='21599029' />
-    <nd ref='21599030' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556105' timestamp='2007-10-29T07:46:00+00:00' user='nickw' visible='true'>
-    <nd ref='91107577' />
-    <nd ref='91107581' />
-    <nd ref='91107583' />
-    <nd ref='91107585' />
-    <nd ref='91107587' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lincoln Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586135' timestamp='2007-05-12T15:20:56+01:00' user='nickw' visible='true'>
-    <nd ref='29008777' />
-    <nd ref='29008795' />
-    <nd ref='29008798' />
-    <nd ref='29008799' />
-    <nd ref='29008800' />
-    <nd ref='29008801' />
-    <nd ref='29008449' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Monnow Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589167' timestamp='2007-05-13T10:11:07+01:00' user='nickw' visible='true'>
-    <nd ref='29026792' />
-    <nd ref='29026793' />
-    <nd ref='29026795' />
-    <nd ref='29026797' />
-    <nd ref='29026783' />
-    <nd ref='29026785' />
-    <nd ref='29026787' />
-    <nd ref='29026788' />
-    <nd ref='29026790' />
-    <nd ref='29026792' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mayfair Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196524' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='24668279' />
-    <nd ref='24668375' />
-    <nd ref='24668327' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='15724654' timestamp='2007-12-08T20:15:00+00:00' user='nickw' visible='true'>
-    <nd ref='157209152' />
-    <nd ref='157209180' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hornchurch Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604565' timestamp='2007-05-15T20:53:20+01:00' user='nickw' visible='true'>
-    <nd ref='24984703' />
-    <nd ref='29134829' />
-    <nd ref='29134830' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brading Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3713904' timestamp='2006-10-17T23:14:34+01:00' user='nickw' visible='true'>
-    <nd ref='18398767' />
-    <nd ref='18398768' />
-    <nd ref='18398769' />
-    <nd ref='18398770' />
-    <nd ref='18398753' />
-    <nd ref='18398754' />
-    <nd ref='18398756' />
-    <nd ref='18398757' />
-    <nd ref='18398758' />
-    <nd ref='18398759' />
-    <nd ref='18398760' />
-    <nd ref='18398762' />
-    <nd ref='18398763' />
-    <nd ref='18398764' />
-    <nd ref='18398765' />
-    <nd ref='18398767' />
-    <tag k='leisure' v='golf_course' />
-    <tag k='name' v='Southampton Golf Course' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540304' timestamp='2007-04-29T21:09:42+01:00' visible='true'>
-    <nd ref='28194350' />
-    <nd ref='28194351' />
-    <nd ref='28194353' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Osprey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586114' timestamp='2007-05-12T15:12:23+01:00' user='nickw' visible='true'>
-    <nd ref='29008366' />
-    <nd ref='29008367' />
-    <nd ref='29008368' />
-    <nd ref='29008370' />
-    <nd ref='29008371' />
-    <nd ref='29008452' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rother Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119877' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319644' />
-    <nd ref='658448' />
-    <nd ref='319643' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Alma Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4015806' timestamp='2006-11-26T00:07:59+00:00' user='nickw' visible='true'>
-    <nd ref='21091890' />
-    <nd ref='21091828' />
-    <nd ref='21091877' />
-    <nd ref='21091876' />
-    <nd ref='21275758' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dyer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4747349' timestamp='2007-06-12T20:17:49+01:00' visible='true'>
-    <nd ref='30256227' />
-    <nd ref='30226352' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749648' timestamp='2007-06-13T09:33:15+01:00' visible='true'>
-    <nd ref='30291040' />
-    <nd ref='30291041' />
-    <nd ref='30291042' />
-    <nd ref='30291043' />
-    <nd ref='30291044' />
-    <nd ref='30291045' />
-    <nd ref='30291040' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999853' timestamp='2007-10-29T07:48:43+00:00' user='nickw' visible='true'>
-    <nd ref='20976768' />
-    <nd ref='20976767' />
-    <nd ref='20976766' />
-    <nd ref='20976765' />
-    <nd ref='20976666' />
-    <nd ref='20976764' />
-    <nd ref='20976763' />
-    <nd ref='20976762' />
-    <nd ref='91108690' />
-    <nd ref='20976761' />
-    <nd ref='91108509' />
-    <nd ref='20976760' />
-    <nd ref='20976759' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Luccombe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743741' timestamp='2007-06-12T00:14:49+01:00' user='nickw' visible='true'>
-    <nd ref='30229575' />
-    <nd ref='30229578' />
-    <nd ref='30229579' />
-    <nd ref='30229580' />
-    <nd ref='30229581' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Stour Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546148' timestamp='2007-04-30T22:13:56+01:00' user='nickw' visible='true'>
-    <nd ref='28342527' />
-    <nd ref='28342541' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blackthorn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084961' timestamp='2007-10-17T01:00:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21420432' />
-    <nd ref='254692' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4717671' timestamp='2007-06-07T11:59:04+01:00' visible='true'>
-    <nd ref='29926154' />
-    <nd ref='29926153' />
-    <nd ref='29926152' />
-    <nd ref='29926151' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548029' timestamp='2007-12-14T21:29:16+00:00' user='nickw' visible='true'>
-    <nd ref='28372798' />
-    <nd ref='28372799' />
-    <nd ref='28372800' />
-    <nd ref='28372801' />
-    <nd ref='28372802' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bindon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3907167' timestamp='2006-10-27T23:39:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110894' />
-    <nd ref='20110917' />
-    <nd ref='20110900' />
-    <nd ref='20110935' />
-    <nd ref='20110829' />
-    <nd ref='20110895' />
-    <nd ref='20110926' />
-    <nd ref='20110924' />
-    <nd ref='20110929' />
-    <nd ref='20110932' />
-    <nd ref='20110849' />
-    <nd ref='20110832' />
-    <nd ref='20110838' />
-    <nd ref='20110945' />
-    <nd ref='675847' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Broadwater Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8132234' timestamp='2006-11-26T00:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='11419591' />
-    <nd ref='21636941' />
-    <nd ref='21275752' />
-    <nd ref='21600508' />
-    <nd ref='11419592' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Foundry Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546540' timestamp='2007-04-30T23:45:39+01:00' user='nickw' visible='true'>
-    <nd ref='28345081' />
-    <nd ref='28348148' />
-    <nd ref='28348149' />
-    <nd ref='28348151' />
-    <nd ref='28348152' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386811' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26593143' />
-    <nd ref='21624980' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bishops Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580482' timestamp='2007-05-11T00:51:23+01:00' visible='true'>
-    <nd ref='28935729' />
-    <nd ref='28935736' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134065' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='305627' />
-    <nd ref='21613505' />
-    <nd ref='21613504' />
-    <nd ref='24668383' />
-    <nd ref='21613503' />
-    <nd ref='21613502' />
-    <nd ref='24668327' />
-    <nd ref='21613501' />
-    <nd ref='21613500' />
-    <nd ref='21613499' />
-    <nd ref='21613498' />
-    <nd ref='21613497' />
-    <nd ref='21613496' />
-    <nd ref='21613495' />
-    <nd ref='21613494' />
-    <nd ref='21613493' />
-    <nd ref='21613459' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10512957' timestamp='2007-10-28T19:15:12+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='25675814' />
-    <nd ref='90510062' />
-    <nd ref='90510063' />
-    <nd ref='90510064' />
-    <nd ref='90510065' />
-    <nd ref='90510066' />
-    <nd ref='90510067' />
-    <nd ref='90510068' />
-    <nd ref='90510070' />
-    <nd ref='90510071' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='16414510' timestamp='2007-12-14T21:38:56+00:00' user='nickw' visible='true'>
-    <nd ref='169428754' />
-    <nd ref='169428755' />
-    <nd ref='169428756' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tremona Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15945181' timestamp='2007-12-10T19:30:25+00:00' user='sladen' visible='true'>
-    <nd ref='160252835' />
-    <nd ref='160253077' />
-    <tag k='aeroway' v='taxiway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4768595' timestamp='2007-06-17T10:25:16+01:00' visible='true'>
-    <nd ref='30411001' />
-    <nd ref='30411002' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8148514' timestamp='2007-04-29T20:37:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243679' />
-    <nd ref='28243680' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Underwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077062' timestamp='2007-09-17T23:09:11+01:00' user='mike l' visible='true'>
-    <nd ref='21600662' />
-    <nd ref='21600663' />
-    <nd ref='21600664' />
-    <nd ref='53421244' />
-    <nd ref='21600665' />
-    <nd ref='21600666' />
-    <nd ref='21600667' />
-    <nd ref='21600668' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C37' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Templars Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540965' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28173768' />
-    <nd ref='28252965' />
-    <nd ref='28252964' />
-    <nd ref='28252958' />
-    <nd ref='28252952' />
-    <nd ref='28252951' />
-    <nd ref='28252949' />
-    <nd ref='28252947' />
-    <nd ref='28252944' />
-    <nd ref='28252942' />
-    <nd ref='28252966' />
-    <nd ref='28252940' />
-    <nd ref='28252938' />
-    <nd ref='28252937' />
-    <nd ref='28252935' />
-    <nd ref='28252933' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oakwood Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725278' timestamp='2007-12-08T20:21:42+00:00' user='nickw' visible='true'>
-    <nd ref='157219678' />
-    <nd ref='157219681' />
-    <nd ref='157219686' />
-    <nd ref='157219690' />
-    <nd ref='157219694' />
-    <nd ref='157219698' />
-    <nd ref='157219704' />
-    <nd ref='157219708' />
-    <nd ref='157219714' />
-    <nd ref='50774737' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Berwick Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237121' timestamp='2007-01-19T10:20:22+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296605' />
-    <nd ref='25296613' />
-    <nd ref='25296614' />
-    <nd ref='25296616' />
-    <nd ref='25296617' />
-    <nd ref='25296618' />
-    <nd ref='25296621' />
-    <nd ref='25296622' />
-    <nd ref='25296612' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Dew Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084955' timestamp='2006-09-02T14:28:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='285866' />
-    <nd ref='20971198' />
-    <nd ref='285868' />
-    <nd ref='13885352' />
-    <tag k='highway' v='pedestrian' />
-    <tag k='name' v='Above Bar' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150337' timestamp='2007-05-25T18:50:22+01:00' visible='true'>
-    <nd ref='29392359' />
-    <nd ref='29392381' />
-    <nd ref='29392360' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801195' timestamp='2008-02-03T06:13:06+00:00' user='sladen' visible='true'>
-    <nd ref='245149885' />
-    <nd ref='245149960' />
-    <nd ref='245149961' />
-    <nd ref='245148034' />
-    <nd ref='245149962' />
-    <nd ref='245149963' />
-    <nd ref='245147927' />
-    <nd ref='245149965' />
-    <nd ref='245149966' />
-    <nd ref='245149967' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8279195' timestamp='2006-09-08T02:12:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964129' />
-    <nd ref='14964130' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539749' timestamp='2007-04-29T20:03:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240312' />
-    <nd ref='28240321' />
-    <nd ref='28240323' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295847' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='9312076' />
-    <nd ref='9312073' />
-    <nd ref='9312072' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Frederick Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150115' timestamp='2007-10-16T02:44:13+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29530520' />
-    <nd ref='29703875' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Allbrook Knoll' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701965' timestamp='2007-06-03T16:05:29+01:00' visible='true'>
-    <nd ref='29914257' />
-    <nd ref='29914258' />
-    <nd ref='29914259' />
-    <nd ref='29914260' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sherborne Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091886' timestamp='2008-02-03T06:16:25+00:00' user='sladen' visible='true'>
-    <nd ref='10222231' />
-    <nd ref='254920' />
-    <nd ref='254921' />
-    <nd ref='30780760' />
-    <nd ref='14743184' />
-    <nd ref='14743185' />
-    <nd ref='657799' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Havelock Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4077252' timestamp='2006-12-16T17:47:14+00:00' user='David Currie' visible='true'>
-    <nd ref='20964047' />
-    <nd ref='20964050' />
-    <nd ref='20964051' />
-    <nd ref='20964052' />
-    <nd ref='20964053' />
-    <nd ref='20964054' />
-    <nd ref='20964055' />
-    <nd ref='20964056' />
-    <nd ref='20964057' />
-    <nd ref='20964058' />
-    <nd ref='20964046' />
-    <nd ref='21613400' />
-    <nd ref='20964838' />
-    <nd ref='20964839' />
-    <nd ref='18348728' />
-    <nd ref='18348727' />
-    <nd ref='20964840' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Green Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996457' timestamp='2006-11-10T08:43:44+00:00' user='nickw' visible='true'>
-    <nd ref='2073397' />
-    <nd ref='20954592' />
-    <nd ref='20954593' />
-    <nd ref='530605' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1690' timestamp='2007-05-13T10:11:13+01:00' user='nickw' visible='true'>
-    <nd ref='413142' />
-    <nd ref='310847' />
-    <nd ref='310897' />
-    <nd ref='310898' />
-    <nd ref='413143' />
-    <nd ref='319615' />
-    <nd ref='319617' />
-    <nd ref='254461' />
-    <nd ref='29026819' />
-    <nd ref='29026822' />
-    <nd ref='310889' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cedar Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10522950' timestamp='2007-10-28T21:51:05+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90665694' />
-    <nd ref='90665695' />
-    <nd ref='90665697' />
-    <nd ref='90665698' />
-    <nd ref='90665699' />
-    <nd ref='90665700' />
-    <nd ref='90665701' />
-    <nd ref='90665702' />
-    <nd ref='90665704' />
-    <nd ref='90665705' />
-    <nd ref='90665694' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='15451211' timestamp='2007-12-06T20:43:03+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21178479' />
-    <nd ref='28212755' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015819' timestamp='2006-11-26T00:16:00+00:00' user='nickw' visible='true'>
-    <nd ref='21275642' />
-    <nd ref='21275634' />
-    <nd ref='21275814' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Freshfield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585178' timestamp='2007-05-12T09:40:25+01:00' user='nickw' visible='true'>
-    <nd ref='29001324' />
-    <nd ref='29001325' />
-    <nd ref='29001326' />
-    <nd ref='29001327' />
-    <nd ref='29001308' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Griffin Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724352' timestamp='2007-12-08T20:12:21+00:00' user='nickw' visible='true'>
-    <nd ref='157205675' />
-    <nd ref='157205681' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blackbushe Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999834' timestamp='2006-11-13T21:39:23+00:00' user='nickw' visible='true'>
-    <nd ref='20976725' />
-    <nd ref='20976717' />
-    <nd ref='20976713' />
-    <nd ref='20976712' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Malvern Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5217169' timestamp='2007-08-28T23:32:22+01:00' visible='true'>
-    <nd ref='36686479' />
-    <nd ref='36686480' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2350948' timestamp='2007-10-17T00:35:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9280985' />
-    <nd ref='10217212' />
-    <nd ref='10217211' />
-    <nd ref='10217210' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008573' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='21141395' />
-    <nd ref='21141394' />
-    <nd ref='20976816' />
-    <nd ref='20976661' />
-    <nd ref='20976799' />
-    <nd ref='20976798' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Darlington Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4797569' timestamp='2007-06-22T21:44:03+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='14743173' />
-    <nd ref='30780835' />
-    <nd ref='30780833' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998664' timestamp='2006-11-12T20:47:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='19890086' />
-    <nd ref='20967603' />
-    <nd ref='20967604' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4641066' timestamp='2007-05-23T09:23:20+01:00' user='nickw' visible='true'>
-    <nd ref='28830620' />
-    <nd ref='29526352' />
-    <nd ref='29526353' />
-    <nd ref='29526354' />
-    <nd ref='29526355' />
-    <nd ref='29526356' />
-    <nd ref='28345060' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Middleton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6628877' timestamp='2007-09-20T19:46:38+01:00' user='mike l' visible='true'>
-    <nd ref='53411351' />
-    <nd ref='53411347' />
-    <tag k='oneway' v='no' />
-    <tag k='highway' v='service' />
-    <tag k='twoway' v='yes' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4539975' timestamp='2007-04-29T20:37:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243555' />
-    <nd ref='28243602' />
-    <nd ref='28243604' />
-    <nd ref='28243605' />
-    <nd ref='28243607' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ashwood Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13484529' timestamp='2007-11-19T17:24:18+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28236122' />
-    <nd ref='28236120' />
-    <nd ref='28236125' />
-    <nd ref='28236127' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lime Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4691006' timestamp='2007-11-28T12:24:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29816594' />
-    <nd ref='29816597' />
-    <nd ref='29816598' />
-    <nd ref='29816599' />
-    <nd ref='29816600' />
-    <nd ref='29816601' />
-    <nd ref='29816602' />
-    <nd ref='29815643' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546069' timestamp='2007-04-30T21:49:13+01:00' user='nickw' visible='true'>
-    <nd ref='28341784' />
-    <nd ref='28341785' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120154' timestamp='2007-08-12T23:13:31+01:00' user='Edward' visible='true'>
-    <nd ref='675881' />
-    <nd ref='675882' />
-    <nd ref='675879' />
-    <nd ref='675883' />
-    <nd ref='675884' />
-    <nd ref='700507' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Oak Tree Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2778211' timestamp='2007-11-29T22:31:15+00:00' user='nickw' visible='true'>
-    <nd ref='12594769' />
-    <nd ref='12594887' />
-    <nd ref='12594893' />
-    <nd ref='12594898' />
-    <nd ref='142620760' />
-    <nd ref='12594901' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Silverdale Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4773385' timestamp='2007-06-17T21:56:43+01:00' visible='true'>
-    <nd ref='30505698' />
-    <nd ref='30505701' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thorn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541324' timestamp='2007-04-29T22:57:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244205' />
-    <nd ref='28244225' />
-    <nd ref='28244220' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cunningham Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4681686' timestamp='2007-05-29T10:16:09+01:00' visible='true'>
-    <nd ref='29709173' />
-    <nd ref='29703874' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540761' timestamp='2007-04-29T21:43:34+01:00' visible='true'>
-    <nd ref='28249993' />
-    <nd ref='28249994' />
-    <nd ref='28249996' />
-    <nd ref='28249997' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Avro Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235061' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282096' />
-    <nd ref='25282112' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683414' timestamp='2007-05-31T21:39:03+01:00' visible='true'>
-    <nd ref='29707327' />
-    <nd ref='29762557' />
-    <nd ref='29762558' />
-    <nd ref='29762559' />
-    <nd ref='29762560' />
-    <nd ref='29762561' />
-    <nd ref='29814526' />
-    <nd ref='29814528' />
-    <nd ref='29814530' />
-    <nd ref='29814531' />
-    <nd ref='29814532' />
-    <nd ref='29814533' />
-    <nd ref='29814534' />
-    <nd ref='29814526' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Portchester Rise' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724658' timestamp='2007-12-08T20:15:00+00:00' user='nickw' visible='true'>
-    <nd ref='157209161' />
-    <nd ref='157209194' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215235' timestamp='2007-05-22T00:20:33+01:00' user='Dean Earley' visible='true'>
-    <nd ref='2742651' />
-    <nd ref='24984743' />
-    <nd ref='24984744' />
-    <nd ref='24984745' />
-    <nd ref='21507792' />
-    <nd ref='24984747' />
-    <nd ref='24984748' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Bassett Wood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698138' timestamp='2007-06-02T18:58:35+01:00' visible='true'>
-    <nd ref='29871573' />
-    <nd ref='29871576' />
-    <nd ref='29871578' />
-    <nd ref='29871579' />
-    <nd ref='29871583' />
-    <nd ref='29871596' />
-    <nd ref='29871605' />
-    <nd ref='29871627' />
-    <nd ref='29871559' />
-    <nd ref='29871611' />
-    <nd ref='29871681' />
-    <nd ref='29871616' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Elizabeth's Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569975' timestamp='2007-05-05T09:03:37+01:00' user='nickw' visible='true'>
-    <nd ref='28830652' />
-    <nd ref='28830576' />
-    <nd ref='28830653' />
-    <nd ref='28830654' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Parklands' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149929' timestamp='2007-07-01T22:15:25+01:00' visible='true'>
-    <nd ref='27513800' />
-    <nd ref='30161111' />
-    <nd ref='29392357' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Grantham road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072028' timestamp='2008-02-03T06:21:38+00:00' user='sladen' visible='true'>
-    <nd ref='245152428' />
-    <nd ref='245152429' />
-    <nd ref='245152431' />
-    <nd ref='245152432' />
-    <nd ref='34278609' />
-    <nd ref='20973236' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4079323' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636918' />
-    <nd ref='21636945' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079284' timestamp='2006-12-18T21:21:57+00:00' user='nickw' visible='true'>
-    <nd ref='21636730' />
-    <nd ref='21636747' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150186' timestamp='2007-05-24T00:05:27+01:00' visible='true'>
-    <nd ref='29392353' />
-    <nd ref='29392382' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15942062' timestamp='2007-12-10T19:11:24+00:00' user='sladen' visible='true'>
-    <nd ref='160216595' />
-    <nd ref='160217495' />
-    <nd ref='160216597' />
-    <nd ref='160216598' />
-    <nd ref='160216600' />
-    <nd ref='160216602' />
-    <nd ref='160216595' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mount Pleasant Road; Radcliffe Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4540300' timestamp='2007-04-29T21:09:40+01:00' visible='true'>
-    <nd ref='28194328' />
-    <nd ref='28194329' />
-    <nd ref='28194331' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Curlew Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773359' timestamp='2007-06-17T21:50:43+01:00' visible='true'>
-    <nd ref='30504766' />
-    <nd ref='30504763' />
-    <nd ref='30504764' />
-    <nd ref='30504765' />
-    <nd ref='30504766' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077046' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true'>
-    <nd ref='21600514' />
-    <nd ref='21600511' />
-    <nd ref='21600425' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tintern Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151524' timestamp='2007-06-12T21:04:59+01:00' visible='true'>
-    <nd ref='29929410' />
-    <nd ref='29929407' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9660265' timestamp='2007-10-16T23:54:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973118' />
-    <nd ref='8596792' />
-    <nd ref='8596781' />
-    <nd ref='8596776' />
-    <nd ref='20973119' />
-    <nd ref='20973120' />
-    <nd ref='20973106' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536695' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194874' />
-    <nd ref='28194877' />
-    <nd ref='28194878' />
-    <nd ref='28194879' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Holly Hill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148510' timestamp='2007-04-29T20:37:19+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243571' />
-    <nd ref='28243577' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Shawford Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196528' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='24668097' />
-    <nd ref='24668283' />
-    <nd ref='24668340' />
-    <nd ref='24668019' />
-    <nd ref='24668302' />
-    <nd ref='24667985' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4703926' timestamp='2007-06-03T22:00:44+01:00' visible='true'>
-    <nd ref='29928965' />
-    <nd ref='29929152' />
-    <nd ref='29929158' />
-    <nd ref='29929165' />
-    <nd ref='29929168' />
-    <nd ref='29929189' />
-    <nd ref='29929175' />
-    <nd ref='29929182' />
-    <nd ref='29704541' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8140823' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346722' />
-    <nd ref='26346745' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Little Lances Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635742' timestamp='2007-05-21T23:57:41+01:00' user='nickw' visible='true'>
-    <nd ref='29462754' />
-    <nd ref='29462755' />
-    <nd ref='29462751' />
-    <nd ref='29462753' />
-    <nd ref='29462754' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4762017' timestamp='2007-06-15T23:09:59+01:00' visible='true'>
-    <nd ref='29511214' />
-    <nd ref='30410997' />
-    <nd ref='30410998' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2651495' timestamp='2006-07-29T14:05:59+01:00' user='nickw' visible='true'>
-    <nd ref='254329' />
-    <nd ref='254330' />
-    <nd ref='254331' />
-    <nd ref='254332' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='9674295' timestamp='2007-10-16T23:45:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726310' />
-    <nd ref='9726311' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Bullar Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678264' timestamp='2007-06-03T22:13:39+01:00' visible='true'>
-    <nd ref='25296277' />
-    <nd ref='29711600' />
-    <nd ref='29929855' />
-    <nd ref='29711599' />
-    <nd ref='29929857' />
-    <nd ref='29929858' />
-    <tag k='highway' v='unclassified' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Goodwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698474' timestamp='2007-06-02T19:44:16+01:00' visible='true'>
-    <nd ref='29874144' />
-    <nd ref='29874145' />
-    <nd ref='29874147' />
-    <nd ref='29874146' />
-    <nd ref='17721039' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Mansbridge Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556780' timestamp='2007-10-29T08:22:07+00:00' user='nickw' visible='true'>
-    <nd ref='91130819' />
-    <nd ref='91130466' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778291' timestamp='2006-08-04T12:02:49+01:00' user='nickw' visible='true'>
-    <nd ref='12595160' />
-    <nd ref='12595190' />
-    <nd ref='12595232' />
-    <nd ref='12595199' />
-    <nd ref='21636954' />
-    <nd ref='12595201' />
-    <nd ref='12595206' />
-    <nd ref='325688' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4586119' timestamp='2007-05-12T15:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='29008384' />
-    <nd ref='29008385' />
-    <nd ref='29008386' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Adur Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541328' timestamp='2007-04-29T22:57:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244175' />
-    <nd ref='28244265' />
-    <nd ref='28244271' />
-    <nd ref='28244275' />
-    <nd ref='28244280' />
-    <nd ref='28244282' />
-    <nd ref='28244215' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Portal Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152192' timestamp='2007-10-16T02:43:59+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30226206' />
-    <nd ref='30226207' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Chatsworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4651182' timestamp='2007-05-25T21:55:53+01:00' visible='true'>
-    <nd ref='29595095' />
-    <nd ref='29595176' />
-    <nd ref='29595201' />
-    <nd ref='29595078' />
-    <nd ref='29595203' />
-    <nd ref='29595086' />
-    <nd ref='29595106' />
-    <nd ref='29595190' />
-    <nd ref='29595200' />
-    <nd ref='29595075' />
-    <nd ref='29595095' />
-    <tag k='landuse' v='retail' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='14505890' timestamp='2007-11-29T22:29:52+00:00' user='nickw' visible='true'>
-    <nd ref='142617040' />
-    <nd ref='142618212' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hill Farm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091882' timestamp='2006-09-03T00:38:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743131' />
-    <nd ref='14743162' />
-    <nd ref='14743161' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mayflower Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061542' timestamp='2007-05-15T20:47:46+01:00' user='nickw' visible='true'>
-    <nd ref='21507772' />
-    <nd ref='29134138' />
-    <nd ref='21507771' />
-    <nd ref='21507770' />
-    <nd ref='21507769' />
-    <nd ref='21507768' />
-    <nd ref='21507767' />
-    <nd ref='423292' />
-    <nd ref='21689132' />
-    <nd ref='21689133' />
-    <nd ref='21689134' />
-    <nd ref='21689135' />
-    <nd ref='21689136' />
-    <nd ref='21689137' />
-    <nd ref='21689138' />
-    <nd ref='21689139' />
-    <nd ref='21689114' />
-    <nd ref='21689140' />
-    <nd ref='21689141' />
-    <nd ref='21689119' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bluebell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999319' timestamp='2007-11-02T14:14:23+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='20973096' />
-    <nd ref='20973097' />
-    <nd ref='20973093' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.4c' />
-  </way>
-  <way id='4703976' timestamp='2007-06-12T21:04:59+01:00' visible='true'>
-    <nd ref='29929406' />
-    <nd ref='29929410' />
-    <nd ref='29929411' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875463' timestamp='2007-07-09T11:55:46+01:00' visible='true'>
-    <nd ref='31486258' />
-    <nd ref='31486285' />
-    <nd ref='31486283' />
-    <nd ref='31486282' />
-    <nd ref='31486279' />
-    <nd ref='31486277' />
-    <nd ref='31486275' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Shamrock Quay' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2352513' timestamp='2007-12-10T21:00:37+00:00' user='sladen' visible='true'>
-    <nd ref='254614' />
-    <nd ref='21275655' />
-    <nd ref='160410636' />
-    <nd ref='90609425' />
-    <nd ref='160411094' />
-    <nd ref='160411096' />
-    <nd ref='160411098' />
-    <nd ref='254616' />
-    <nd ref='21091872' />
-    <nd ref='469865' />
-    <nd ref='254617' />
-    <nd ref='254618' />
-    <nd ref='254833' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Paynes Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999278' timestamp='2006-11-13T00:08:24+00:00' user='Dean Earley' visible='true'>
-    <nd ref='635147' />
-    <nd ref='635148' />
-    <nd ref='254751' />
-    <nd ref='20972811' />
-    <nd ref='301563' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661840' timestamp='2007-10-16T11:34:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29632460' />
-    <nd ref='29632455' />
-    <nd ref='29632459' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Friar's Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540347' timestamp='2007-04-29T21:10:05+01:00' visible='true'>
-    <nd ref='28194446' />
-    <nd ref='28194447' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sheldrake Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13251211' timestamp='2007-11-18T19:05:24+00:00' user='nickw' visible='true'>
-    <nd ref='122316841' />
-    <nd ref='122324295' />
-    <nd ref='122324299' />
-    <nd ref='122324306' />
-    <nd ref='122324309' />
-    <nd ref='122324312' />
-    <nd ref='122324319' />
-    <nd ref='122324324' />
-    <nd ref='122324329' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blighmont Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10519066' timestamp='2007-12-10T21:01:12+00:00' user='sladen' visible='true'>
-    <nd ref='21091823' />
-    <nd ref='160414192' />
-    <nd ref='160409604' />
-    <nd ref='160409605' />
-    <nd ref='160409606' />
-    <nd ref='160409608' />
-    <nd ref='160409610' />
-    <nd ref='160409612' />
-    <nd ref='160409614' />
-    <nd ref='160409615' />
-    <nd ref='160409616' />
-    <nd ref='160409617' />
-    <nd ref='160409619' />
-    <nd ref='160409621' />
-    <nd ref='160409622' />
-    <nd ref='160409623' />
-    <nd ref='160409624' />
-    <nd ref='160409626' />
-    <nd ref='160409627' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='3578761' timestamp='2006-10-07T00:25:26+01:00' user='nickw' visible='true'>
-    <nd ref='17724278' />
-    <nd ref='17724254' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687620' timestamp='2007-05-30T22:23:49+01:00' user='nickw' visible='true'>
-    <nd ref='29794814' />
-    <nd ref='29794904' />
-    <nd ref='29796834' />
-    <nd ref='29796835' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Balaclava Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130052' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10537326' />
-    <nd ref='20133145' />
-    <nd ref='20133160' />
-    <nd ref='20133163' />
-    <nd ref='20133164' />
-    <nd ref='20133213' />
-    <nd ref='20133216' />
-    <nd ref='20133222' />
-    <nd ref='20133224' />
-    <nd ref='20133225' />
-    <nd ref='20133227' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Duddon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131447' timestamp='2007-10-16T20:09:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20972786' />
-    <nd ref='20972785' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120158' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700527' />
-    <nd ref='675858' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Copsewood Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8123833' timestamp='2006-07-13T23:46:44+01:00' user='Dean Earley' visible='true'>
-    <nd ref='474651' />
-    <nd ref='474652' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644676' timestamp='2007-05-24T10:51:04+01:00' visible='true'>
-    <nd ref='29548670' />
-    <nd ref='29548671' />
-    <nd ref='29548705' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Shelly Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077576' timestamp='2006-12-16T21:53:08+00:00' user='nickw' visible='true'>
-    <nd ref='21615430' />
-    <nd ref='21615431' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mandela Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196516' timestamp='2007-01-04T21:07:43+00:00' user='nickw' visible='true'>
-    <nd ref='24668074' />
-    <nd ref='24668391' />
-    <nd ref='24668271' />
-    <nd ref='24668170' />
-    <nd ref='24668333' />
-    <nd ref='24668064' />
-    <nd ref='24668279' />
-    <nd ref='24668092' />
-    <nd ref='24668016' />
-    <nd ref='24668361' />
-    <nd ref='24668260' />
-    <nd ref='24668099' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Wicklow Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996461' timestamp='2006-11-10T08:43:44+00:00' user='nickw' visible='true'>
-    <nd ref='388880' />
-    <nd ref='388881' />
-    <nd ref='388882' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Iris Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586251' timestamp='2007-05-12T15:36:08+01:00' user='nickw' visible='true'>
-    <nd ref='29009226' />
-    <nd ref='29009227' />
-    <nd ref='29009228' />
-    <nd ref='29009229' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gatcombe Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996913' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957235' />
-    <nd ref='20957234' />
-    <nd ref='20957249' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kingston Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996901' timestamp='2006-11-10T21:59:05+00:00' user='nickw' visible='true'>
-    <nd ref='20957225' />
-    <nd ref='20957182' />
-    <nd ref='20957219' />
-    <nd ref='20957218' />
-    <nd ref='20957190' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Darwin Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131452' timestamp='2007-10-16T23:54:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='8596819' />
-    <nd ref='20973113' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773682' timestamp='2007-06-17T22:25:19+01:00' visible='true'>
-    <nd ref='30510872' />
-    <nd ref='30510873' />
-    <nd ref='30510875' />
-    <nd ref='30510877' />
-    <nd ref='30510878' />
-    <nd ref='30510880' />
-    <nd ref='30510882' />
-    <nd ref='30510884' />
-    <nd ref='30510885' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Selbourne Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585153' timestamp='2007-05-12T09:30:30+01:00' user='nickw' visible='true'>
-    <nd ref='29000929' />
-    <nd ref='29000935' />
-    <nd ref='29000936' />
-    <nd ref='29000937' />
-    <nd ref='29000938' />
-    <nd ref='29000939' />
-    <nd ref='28849622' />
-    <nd ref='29000943' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Marshall Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3290' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700527' />
-    <nd ref='700528' />
-    <nd ref='675882' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Copsewood Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3578756' timestamp='2006-10-07T00:25:25+01:00' user='nickw' visible='true'>
-    <nd ref='17724242' />
-    <nd ref='17724243' />
-    <nd ref='17724253' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kenilworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235057' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='21600676' />
-    <nd ref='25282102' />
-    <nd ref='25282103' />
-    <nd ref='25282104' />
-    <nd ref='25282105' />
-    <nd ref='25282106' />
-    <nd ref='25282107' />
-    <nd ref='25282109' />
-    <nd ref='25282110' />
-    <nd ref='25282114' />
-    <nd ref='25282115' />
-    <nd ref='25282116' />
-    <nd ref='25282117' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Acorn Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077035' timestamp='2006-12-16T10:14:12+00:00' user='nickw' visible='true'>
-    <nd ref='21600498' />
-    <nd ref='21600420' />
-    <nd ref='21600497' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Henty Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215230' timestamp='2007-01-10T00:20:39+00:00' user='nickw' visible='true'>
-    <nd ref='24984725' />
-    <nd ref='24984727' />
-    <nd ref='24984728' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Village' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556633' timestamp='2007-10-29T08:16:55+00:00' user='nickw' visible='true'>
-    <nd ref='91120341' />
-    <nd ref='91124924' />
-    <nd ref='91124927' />
-    <nd ref='91124930' />
-    <nd ref='91124934' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hardwicke Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540953' timestamp='2007-04-29T22:00:53+01:00' visible='true'>
-    <nd ref='28252896' />
-    <nd ref='28252895' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tintagel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9652512' timestamp='2007-10-16T17:59:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25303929' />
-    <nd ref='16963769' />
-    <nd ref='21507800' />
-    <nd ref='14728171' />
-    <nd ref='21507797' />
-    <nd ref='254565' />
-    <nd ref='24668048' />
-    <nd ref='254750' />
-    <nd ref='24984756' />
-    <nd ref='28180545' />
-    <nd ref='24984748' />
-    <nd ref='21636775' />
-    <nd ref='24984755' />
-    <nd ref='329519' />
-    <nd ref='29464266' />
-    <nd ref='24984754' />
-    <nd ref='254749' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='5653523' timestamp='2007-12-15T22:18:24+00:00' user='Thomas Matern' visible='true'>
-    <nd ref='42141674' />
-    <nd ref='42141615' />
-    <nd ref='42141603' />
-    <nd ref='247793' />
-    <tag k='access' v='permissive' />
-    <tag k='oneway' v='yes' />
-    <tag k='maxheight' v='4.1 m' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8143315' timestamp='2007-03-23T22:53:34+00:00' user='nickw' visible='true'>
-    <nd ref='26781180' />
-    <nd ref='26781181' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Norton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077256' timestamp='2007-10-30T16:47:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21600673' />
-    <nd ref='25282139' />
-    <nd ref='21613417' />
-    <nd ref='25282140' />
-    <nd ref='21613418' />
-    <nd ref='21613420' />
-    <nd ref='21613419' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Raglan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091887' timestamp='2006-09-03T00:38:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743114' />
-    <nd ref='14743115' />
-    <nd ref='469852' />
-    <nd ref='14743114' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999830' timestamp='2006-11-13T21:39:23+00:00' user='nickw' visible='true'>
-    <nd ref='20976679' />
-    <nd ref='20976678' />
-    <nd ref='20976677' />
-    <nd ref='20976676' />
-    <nd ref='20976675' />
-    <nd ref='20976674' />
-    <nd ref='20976681' />
-    <nd ref='20976680' />
-    <nd ref='20976679' />
-    <tag k='oneway' v='yes' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2249753' timestamp='2006-07-05T01:56:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9727817' />
-    <nd ref='9727813' />
-    <nd ref='25639996' />
-    <nd ref='25639995' />
-    <nd ref='9727814' />
-    <nd ref='9727815' />
-    <nd ref='9727816' />
-    <nd ref='12801372' />
-    <nd ref='12801373' />
-    <nd ref='12801374' />
-    <nd ref='26346878' />
-    <nd ref='12801370' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Gainsford Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4061546' timestamp='2006-12-09T09:51:52+00:00' user='nickw' visible='true'>
-    <nd ref='388913' />
-    <nd ref='388912' />
-    <nd ref='27021753' />
-    <nd ref='27021754' />
-    <nd ref='388911' />
-    <nd ref='388910' />
-    <nd ref='388909' />
-    <nd ref='388908' />
-    <nd ref='388907' />
-    <nd ref='422986' />
-    <nd ref='422987' />
-    <nd ref='422988' />
-    <nd ref='388956' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glen Eyre Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605557' timestamp='2007-05-16T00:37:06+01:00' visible='true'>
-    <nd ref='25305496' />
-    <nd ref='29145093' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='layer' v='1' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546167' timestamp='2007-04-30T22:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='28342588' />
-    <nd ref='28342576' />
-    <nd ref='28230999' />
-    <nd ref='28342586' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cypress Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703462' timestamp='2007-10-16T02:44:19+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29927008' />
-    <nd ref='29926972' />
-    <nd ref='29926977' />
-    <nd ref='29926985' />
-    <nd ref='29926993' />
-    <nd ref='29927001' />
-    <nd ref='29816843' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Constantine Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725500' timestamp='2007-12-08T20:24:11+00:00' user='nickw' visible='true'>
-    <nd ref='157223774' />
-    <nd ref='157223777' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chisholm Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9652519' timestamp='2007-10-16T17:59:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25896411' />
-    <nd ref='25896420' />
-    <nd ref='25896266' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121525' timestamp='2007-05-16T14:22:27+01:00' user='jonnyswerve' visible='true'>
-    <nd ref='254546' />
-    <nd ref='675881' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodmill Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4569963' timestamp='2007-05-05T08:53:01+01:00' user='nickw' visible='true'>
-    <nd ref='28830583' />
-    <nd ref='28830590' />
-    <nd ref='28830591' />
-    <nd ref='28830575' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oak Green Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536327' timestamp='2007-04-29T02:31:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21636733' />
-    <nd ref='28183716' />
-    <nd ref='28183722' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lingwood Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704171' timestamp='2007-12-06T20:43:07+00:00' user='Dean Earley' visible='true'>
-    <nd ref='153329608' />
-    <nd ref='29931317' />
-    <nd ref='29931318' />
-    <nd ref='29931319' />
-    <nd ref='29931320' />
-    <nd ref='29931321' />
-    <nd ref='29931322' />
-    <nd ref='29931323' />
-    <nd ref='29931325' />
-    <nd ref='29931327' />
-    <nd ref='29953364' />
-    <nd ref='29953365' />
-    <nd ref='29953366' />
-    <nd ref='29953367' />
-    <nd ref='29953368' />
-    <nd ref='29953369' />
-    <nd ref='29953370' />
-    <nd ref='29953371' />
-    <nd ref='29953372' />
-    <nd ref='29953373' />
-    <nd ref='29953374' />
-    <nd ref='29953375' />
-    <nd ref='29953376' />
-    <nd ref='29953377' />
-    <nd ref='29953378' />
-    <nd ref='29953379' />
-    <nd ref='29953380' />
-    <tag k='highway' v='tertiary' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Hocombe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150194' timestamp='2007-06-08T18:12:35+01:00' visible='true'>
-    <nd ref='30089068' />
-    <nd ref='30089065' />
-    <nd ref='30089057' />
-    <nd ref='30089059' />
-    <nd ref='30089055' />
-    <nd ref='30089034' />
-    <nd ref='29549373' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Kestrel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683370' timestamp='2007-05-29T20:52:59+01:00' visible='true'>
-    <nd ref='24949919' />
-    <nd ref='29762260' />
-    <nd ref='29762233' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999148' timestamp='2006-11-12T22:57:30+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971200' />
-    <nd ref='20971205' />
-    <nd ref='20971204' />
-    <nd ref='20971202' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999135' timestamp='2006-11-12T22:57:28+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971151' />
-    <nd ref='20971152' />
-    <nd ref='20971153' />
-    <nd ref='20971154' />
-    <nd ref='20971155' />
-    <nd ref='20971156' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151235' timestamp='2007-06-02T18:17:09+01:00' visible='true'>
-    <nd ref='29862368' />
-    <nd ref='29862366' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dale Valley Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569976' timestamp='2007-05-05T09:03:38+01:00' user='nickw' visible='true'>
-    <nd ref='28830653' />
-    <nd ref='28830655' />
-    <nd ref='28830656' />
-    <nd ref='28830657' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Parklands' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5780676' timestamp='2007-09-15T19:06:15+01:00' user='mike l' visible='true'>
-    <nd ref='45116801' />
-    <nd ref='45116807' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='1639783' timestamp='2006-06-01T10:01:20+01:00' user='nickw' visible='true'>
-    <nd ref='254975' />
-    <nd ref='254336' />
-    <nd ref='254335' />
-    <nd ref='254939' />
-    <nd ref='254334' />
-    <nd ref='269926' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4743040' timestamp='2007-06-11T22:03:23+01:00' visible='true'>
-    <nd ref='29705520' />
-    <nd ref='30223959' />
-    <nd ref='30223591' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260947' timestamp='2007-07-09T23:20:03+01:00' visible='true'>
-    <nd ref='319630' />
-    <nd ref='319629' />
-    <nd ref='319628' />
-    <nd ref='700403' />
-    <nd ref='319627' />
-    <nd ref='319625' />
-    <nd ref='25480797' />
-    <nd ref='661195' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Osborne Road South' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540765' timestamp='2007-06-02T19:31:31+01:00' visible='true'>
-    <nd ref='28250003' />
-    <nd ref='28250018' />
-    <nd ref='28250019' />
-    <nd ref='28250021' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vulcan Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433544' timestamp='2007-12-06T19:26:18+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29733427' />
-    <nd ref='28903875' />
-    <nd ref='28903897' />
-    <nd ref='28903846' />
-    <nd ref='28904000' />
-    <nd ref='28904034' />
-    <nd ref='28903947' />
-    <nd ref='28903834' />
-    <nd ref='28904012' />
-    <nd ref='28904019' />
-    <nd ref='28904032' />
-    <nd ref='28904035' />
-    <nd ref='28903974' />
-    <nd ref='28903950' />
-    <nd ref='28904023' />
-    <nd ref='28904006' />
-    <nd ref='28903848' />
-    <nd ref='29733449' />
-    <nd ref='29733564' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091889' timestamp='2006-09-03T00:38:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254922' />
-    <nd ref='469847' />
-    <nd ref='17724233' />
-    <nd ref='469848' />
-    <nd ref='20971212' />
-    <nd ref='402741' />
-    <nd ref='469849' />
-    <nd ref='14743170' />
-    <nd ref='469850' />
-    <nd ref='469851' />
-    <nd ref='14743169' />
-    <nd ref='14743114' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Commercial Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4363113' timestamp='2007-03-17T20:47:49+00:00' user='nickw' visible='true'>
-    <nd ref='657774' />
-    <nd ref='26781162' />
-    <nd ref='26593142' />
-    <nd ref='26728560' />
-    <nd ref='26593143' />
-    <nd ref='26728548' />
-    <nd ref='26728549' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wodehouse Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773472' timestamp='2007-06-17T22:07:58+01:00' visible='true'>
-    <nd ref='30507141' />
-    <nd ref='30507142' />
-    <nd ref='30507143' />
-    <nd ref='30507158' />
-    <nd ref='30507159' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whyteways' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701915' timestamp='2007-06-03T15:59:44+01:00' visible='true'>
-    <nd ref='29913890' />
-    <nd ref='29710896' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773473' timestamp='2007-06-17T22:07:58+01:00' visible='true'>
-    <nd ref='30507164' />
-    <nd ref='30507161' />
-    <nd ref='30507163' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Winston Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578449' timestamp='2007-09-15T22:37:24+01:00' user='mike l' visible='true'>
-    <nd ref='9267990' />
-    <nd ref='29380440' />
-    <nd ref='17722359' />
-    <nd ref='2742645' />
-    <nd ref='2742646' />
-    <nd ref='24984713' />
-    <nd ref='29135435' />
-    <nd ref='29135434' />
-    <nd ref='29135439' />
-    <nd ref='29135238' />
-    <nd ref='17722360' />
-    <nd ref='24984782' />
-    <nd ref='2742647' />
-    <nd ref='423270' />
-    <nd ref='24984681' />
-    <nd ref='17722361' />
-    <nd ref='2742648' />
-    <nd ref='24984714' />
-    <nd ref='21636758' />
-    <nd ref='52285785' />
-    <nd ref='2742649' />
-    <nd ref='17722362' />
-    <nd ref='17722363' />
-    <nd ref='24984740' />
-    <nd ref='17722364' />
-    <nd ref='422995' />
-    <nd ref='17722365' />
-    <nd ref='2742650' />
-    <nd ref='17722366' />
-    <nd ref='2742651' />
-    <nd ref='2742652' />
-    <nd ref='17722367' />
-    <nd ref='17722369' />
-    <nd ref='2742653' />
-    <nd ref='14728177' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4580518' timestamp='2007-05-11T01:00:11+01:00' visible='true'>
-    <nd ref='28936011' />
-    <nd ref='28936012' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875468' timestamp='2007-07-09T11:55:47+01:00' visible='true'>
-    <nd ref='19892124' />
-    <nd ref='31486286' />
-    <nd ref='31486288' />
-    <nd ref='31486290' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131456' timestamp='2007-10-16T20:14:45+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973118' />
-    <nd ref='20973114' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800095' timestamp='2008-02-03T05:59:26+00:00' user='sladen' visible='true'>
-    <nd ref='245146234' />
-    <nd ref='245146235' />
-    <nd ref='245146236' />
-    <nd ref='245146237' />
-    <nd ref='245146238' />
-    <nd ref='245146239' />
-    <nd ref='245146240' />
-    <nd ref='245146241' />
-    <nd ref='245146242' />
-    <nd ref='245146243' />
-    <nd ref='245146244' />
-    <nd ref='245146245' />
-    <nd ref='245146246' />
-    <nd ref='245146247' />
-    <nd ref='245146234' />
-    <tag k='landuse' v='common' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='2147860' timestamp='2006-07-01T03:51:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='402753' />
-    <nd ref='650803' />
-    <nd ref='402754' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Castle Street' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4677869' timestamp='2007-11-05T08:11:53+00:00' user='nickw' visible='true'>
-    <nd ref='29709220' />
-    <nd ref='25504282' />
-    <nd ref='25504283' />
-    <nd ref='25504284' />
-    <nd ref='25504285' />
-    <nd ref='25504286' />
-    <nd ref='25504287' />
-    <nd ref='25504288' />
-    <nd ref='25504289' />
-    <nd ref='25504290' />
-    <nd ref='25504291' />
-    <nd ref='29708449' />
-    <nd ref='25504292' />
-    <nd ref='25504293' />
-    <nd ref='25504294' />
-    <nd ref='25504295' />
-    <nd ref='25504296' />
-    <nd ref='21746350' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077034' timestamp='2006-12-16T10:14:12+00:00' user='nickw' visible='true'>
-    <nd ref='469886' />
-    <nd ref='21600494' />
-    <nd ref='21600496' />
-    <nd ref='21561801' />
-    <nd ref='21561809' />
-    <nd ref='21561808' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='extrapolation and npe for westernmost 2 segments' />
-    <tag k='name' v='St Edmunds Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540312' timestamp='2007-04-29T21:09:44+01:00' visible='true'>
-    <nd ref='28194340' />
-    <nd ref='28194341' />
-    <nd ref='28194342' />
-    <nd ref='28194346' />
-    <nd ref='28194348' />
-    <nd ref='28194347' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Plover Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151330' timestamp='2007-06-02T19:44:15+01:00' visible='true'>
-    <nd ref='29874141' />
-    <nd ref='29874152' />
-    <nd ref='29874144' />
-    <nd ref='29874150' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Arnold Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539219' timestamp='2007-04-29T19:00:25+01:00' user='nickw' visible='true'>
-    <nd ref='28232569' />
-    <nd ref='28230864' />
-    <nd ref='28232574' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Almatade Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727657' timestamp='2007-06-09T19:43:22+01:00' user='nickw' visible='true'>
-    <nd ref='30124224' />
-    <nd ref='30124366' />
-    <nd ref='30124367' />
-    <nd ref='30124368' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Epping Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125060' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071422' />
-    <nd ref='13071424' />
-    <nd ref='13071425' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kesteven Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13250943' timestamp='2007-12-10T20:57:23+00:00' user='sladen' visible='true'>
-    <nd ref='122319000' />
-    <nd ref='122319004' />
-    <nd ref='122319006' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Testwood Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4605581' timestamp='2007-12-30T15:53:41+00:00' visible='true'>
-    <nd ref='15657675' />
-    <nd ref='160213500' />
-    <nd ref='160213501' />
-    <nd ref='160213504' />
-    <nd ref='160213505' />
-    <nd ref='160213506' />
-    <nd ref='160213508' />
-    <nd ref='160213815' />
-    <nd ref='15657676' />
-    <nd ref='29145249' />
-    <nd ref='160209416' />
-    <nd ref='160209418' />
-    <nd ref='160209419' />
-    <nd ref='15657717' />
-    <nd ref='160209421' />
-    <nd ref='160209422' />
-    <nd ref='15657718' />
-    <nd ref='160207839' />
-    <tag k='railway' v='rail' />
-    <tag k='name' v='West Coastway Line' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4661849' timestamp='2007-05-26T20:15:56+01:00' visible='true'>
-    <nd ref='29632804' />
-    <nd ref='29632806' />
-    <nd ref='29632808' />
-    <nd ref='29632809' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Maple Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541421' timestamp='2007-04-29T23:09:36+01:00' user='Andy Street' visible='true'>
-    <nd ref='28259894' />
-    <nd ref='28259921' />
-    <nd ref='28259922' />
-    <nd ref='28259924' />
-    <nd ref='28259925' />
-    <nd ref='28259909' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chadwell Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015831' timestamp='2006-11-26T00:18:44+00:00' user='nickw' visible='true'>
-    <nd ref='21275629' />
-    <nd ref='21561551' />
-    <nd ref='21636949' />
-    <nd ref='21091878' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604515' timestamp='2007-05-22T00:20:32+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29134123' />
-    <nd ref='29464269' />
-    <nd ref='29134126' />
-    <nd ref='29134102' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3088262' timestamp='2006-09-02T19:02:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14727989' />
-    <nd ref='254432' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999131' timestamp='2006-11-12T22:57:28+00:00' user='Dean Earley' visible='true'>
-    <nd ref='518763' />
-    <nd ref='20971147' />
-    <nd ref='20971145' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Mary's Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778228' timestamp='2006-08-04T11:59:04+01:00' user='nickw' visible='true'>
-    <nd ref='12594788' />
-    <nd ref='12594957' />
-    <nd ref='12594958' />
-    <nd ref='12594959' />
-    <nd ref='12594960' />
-    <nd ref='12591310' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westrow Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4545710' timestamp='2007-04-30T20:40:46+01:00' visible='true'>
-    <nd ref='28339133' />
-    <nd ref='28339186' />
-    <nd ref='28339190' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Green Farm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13638183' timestamp='2007-12-07T13:22:21+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='125570128' />
-    <nd ref='125570129' />
-    <nd ref='125570130' />
-    <nd ref='125570131' />
-    <nd ref='125570128' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Fibercore House' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4342695' timestamp='2007-12-10T19:16:01+00:00' user='sladen' visible='true'>
-    <nd ref='26114347' />
-    <nd ref='160226762' />
-    <nd ref='26114384' />
-    <nd ref='26114383' />
-    <nd ref='26114382' />
-    <nd ref='26114381' />
-    <nd ref='26114379' />
-    <nd ref='26447497' />
-    <nd ref='26114375' />
-    <nd ref='26114374' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='note' v='A bit creative with the mapping round here to "get the railway in the right place" :-)' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4567184' timestamp='2007-09-12T16:44:23+01:00' user='mike l' visible='true'>
-    <nd ref='28801033' />
-    <nd ref='28801035' />
-    <nd ref='28801037' />
-    <nd ref='28801038' />
-    <nd ref='28801039' />
-    <nd ref='14957857' />
-    <nd ref='28801034' />
-    <nd ref='21600475' />
-    <nd ref='28801033' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3780199' timestamp='2006-10-21T14:42:00+01:00' user='nickw' visible='true'>
-    <nd ref='18868877' />
-    <nd ref='18868873' />
-    <nd ref='18868874' />
-    <nd ref='18868875' />
-    <nd ref='469861' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sir Georges Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819399' timestamp='2006-10-23T20:53:07+01:00' user='nickw' visible='true'>
-    <nd ref='16963727' />
-    <nd ref='19227207' />
-    <nd ref='19227208' />
-    <nd ref='19227210' />
-    <nd ref='19227211' />
-    <nd ref='19227212' />
-    <nd ref='19227213' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Horseshoe Path' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211077' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949869' />
-    <nd ref='24949821' />
-    <nd ref='24949896' />
-    <nd ref='24949811' />
-    <nd ref='24949897' />
-    <nd ref='24949895' />
-    <nd ref='24949898' />
-    <nd ref='24949899' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oakwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546180' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true'>
-    <nd ref='28342523' />
-    <nd ref='28231417' />
-    <nd ref='28342611' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Poplar Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578760' timestamp='2006-10-07T00:25:26+01:00' user='nickw' visible='true'>
-    <nd ref='17724240' />
-    <nd ref='18232070' />
-    <nd ref='17724241' />
-    <nd ref='402749' />
-    <nd ref='18232096' />
-    <nd ref='254370' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Milton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540768' timestamp='2007-04-29T21:43:35+01:00' visible='true'>
-    <nd ref='27239005' />
-    <nd ref='28250024' />
-    <nd ref='28250025' />
-    <nd ref='28250026' />
-    <nd ref='28250028' />
-    <nd ref='28250029' />
-    <nd ref='28250030' />
-    <nd ref='28250032' />
-    <nd ref='28250033' />
-    <nd ref='28250034' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brooks Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077039' timestamp='2006-12-16T10:14:12+00:00' user='nickw' visible='true'>
-    <nd ref='21600424' />
-    <nd ref='21600495' />
-    <nd ref='21600494' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148383' timestamp='2007-04-29T02:31:54+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28183748' />
-    <nd ref='28183749' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3533626' timestamp='2006-10-03T23:25:13+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14728175' />
-    <nd ref='14745488' />
-    <nd ref='14765932' />
-    <nd ref='17504822' />
-    <nd ref='17504821' />
-    <nd ref='17504823' />
-    <nd ref='17504825' />
-    <nd ref='17504826' />
-    <nd ref='254487' />
-    <nd ref='17504824' />
-    <nd ref='254747' />
-    <nd ref='17504828' />
-    <nd ref='17504829' />
-    <nd ref='17504830' />
-    <nd ref='17504831' />
-    <nd ref='17504819' />
-    <nd ref='17504820' />
-    <nd ref='14745509' />
-    <nd ref='14745510' />
-    <nd ref='14728179' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077259' timestamp='2006-12-16T17:47:15+00:00' user='David Currie' visible='true'>
-    <nd ref='21613419' />
-    <nd ref='21613441' />
-    <nd ref='21613442' />
-    <nd ref='21613443' />
-    <nd ref='21613444' />
-    <nd ref='21613445' />
-    <nd ref='21613440' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='George Perrett Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061535' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='21507765' />
-    <nd ref='21507742' />
-    <nd ref='21507766' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tulip Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643761' timestamp='2007-05-24T00:05:31+01:00' visible='true'>
-    <nd ref='28339184' />
-    <nd ref='28339126' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1931' timestamp='2006-06-17T22:22:35+01:00' user='nickw' visible='true'>
-    <nd ref='661155' />
-    <nd ref='28236095' />
-    <nd ref='661157' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Ruby Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4405501' timestamp='2007-05-30T21:44:22+01:00' user='nickw' visible='true'>
-    <nd ref='20136214' />
-    <nd ref='29794903' />
-    <nd ref='20136215' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Marne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687596' timestamp='2007-05-30T22:22:30+01:00' user='nickw' visible='true'>
-    <nd ref='29796766' />
-    <nd ref='29796767' />
-    <nd ref='29796768' />
-    <nd ref='29796769' />
-    <nd ref='29796770' />
-    <nd ref='29796772' />
-    <nd ref='29796773' />
-    <nd ref='29796774' />
-    <nd ref='29796775' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Milbury Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386808' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26728544' />
-    <nd ref='26593142' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leighton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639630' timestamp='2006-06-04T19:10:42+01:00' user='Dean Earley' visible='true'>
-    <nd ref='423308' />
-    <nd ref='423309' />
-    <nd ref='422973' />
-    <nd ref='422974' />
-    <nd ref='16963751' />
-    <nd ref='422975' />
-    <nd ref='422976' />
-    <nd ref='422978' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Coronation Avenue North' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='8123248' timestamp='2007-10-16T19:19:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254695' />
-    <nd ref='14727977' />
-    <nd ref='14727962' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8131980' timestamp='2007-10-16T06:20:04+01:00' user='andrewpmk' visible='true'>
-    <nd ref='25296014' />
-    <nd ref='21178402' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='B3335' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604638' timestamp='2007-05-15T20:57:28+01:00' user='nickw' visible='true'>
-    <nd ref='29135439' />
-    <nd ref='29135440' />
-    <nd ref='29134117' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Field Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15722571' timestamp='2007-12-08T19:57:33+00:00' user='nickw' visible='true'>
-    <nd ref='157187226' />
-    <nd ref='157186811' />
-    <nd ref='157187230' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mercury Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8311329' timestamp='2007-12-22T00:59:02+00:00' user='Jon Burgess' visible='true'>
-    <nd ref='21189058' />
-    <nd ref='21189062' />
-    <nd ref='21189061' />
-    <nd ref='21189060' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015832' timestamp='2006-11-26T00:18:44+00:00' user='nickw' visible='true'>
-    <nd ref='21091880' />
-    <nd ref='21275630' />
-    <nd ref='21275711' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cunard Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123254' timestamp='2006-07-01T03:51:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='402754' />
-    <nd ref='413143' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Mordaunt Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='13251486' timestamp='2007-11-18T19:08:12+00:00' user='nickw' visible='true'>
-    <nd ref='122329587' />
-    <nd ref='122329589' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bangor Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704174' timestamp='2007-06-03T22:43:33+01:00' visible='true'>
-    <nd ref='24949859' />
-    <nd ref='29931368' />
-    <nd ref='29931369' />
-    <nd ref='29931370' />
-    <nd ref='29931371' />
-    <nd ref='29931372' />
-    <nd ref='29931373' />
-    <nd ref='29931374' />
-    <nd ref='29931375' />
-    <nd ref='29931376' />
-    <nd ref='29931377' />
-    <nd ref='29931378' />
-    <nd ref='29931379' />
-    <nd ref='29931380' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546174' timestamp='2007-04-30T22:14:01+01:00' user='nickw' visible='true'>
-    <nd ref='28342605' />
-    <nd ref='28342606' />
-    <nd ref='28342607' />
-    <nd ref='28231064' />
-    <nd ref='28342608' />
-    <nd ref='28342598' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Elstree Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='7988340' timestamp='2007-09-25T17:50:07+01:00' user='mike l' visible='true'>
-    <nd ref='59766920' />
-    <nd ref='59766922' />
-    <nd ref='59766921' />
-    <nd ref='423292' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lobelia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4250817' timestamp='2007-07-09T12:19:48+01:00' visible='true'>
-    <nd ref='14964129' />
-    <nd ref='8596793' />
-    <nd ref='25440791' />
-    <nd ref='8596801' />
-    <nd ref='254762' />
-    <nd ref='14964132' />
-    <nd ref='25440794' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10360214' timestamp='2007-12-16T20:34:19+00:00' user='MikaK' visible='true'>
-    <nd ref='87825989' />
-    <nd ref='87825990' />
-    <nd ref='87825991' />
-    <nd ref='87825992' />
-    <nd ref='87825993' />
-    <nd ref='87825994' />
-    <nd ref='87825995' />
-    <nd ref='87825996' />
-    <nd ref='87825997' />
-    <nd ref='87825998' />
-    <nd ref='87826000' />
-    <nd ref='87826002' />
-    <nd ref='87826004' />
-    <nd ref='87826006' />
-    <nd ref='87826008' />
-    <nd ref='87826011' />
-    <nd ref='87825989' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Marchwood Incinerator' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4540979' timestamp='2007-04-29T22:00:56+01:00' visible='true'>
-    <nd ref='28252972' />
-    <nd ref='28252973' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703785' timestamp='2007-06-03T21:48:30+01:00' visible='true'>
-    <nd ref='29707709' />
-    <nd ref='29708010' />
-    <nd ref='29708011' />
-    <nd ref='29708012' />
-    <nd ref='29708013' />
-    <nd ref='29708015' />
-    <nd ref='29708016' />
-    <nd ref='29708017' />
-    <nd ref='29708018' />
-    <nd ref='29708019' />
-    <nd ref='29708020' />
-    <nd ref='29708021' />
-    <nd ref='29708022' />
-    <nd ref='29708023' />
-    <nd ref='29708025' />
-    <nd ref='29708024' />
-    <nd ref='29708026' />
-    <nd ref='29708027' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818218' timestamp='2007-06-26T23:45:19+01:00' user='nickw' visible='true'>
-    <nd ref='30956562' />
-    <nd ref='30956565' />
-    <nd ref='30956566' />
-    <nd ref='30956567' />
-    <nd ref='29008449' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1666' timestamp='2006-06-04T00:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='329467' />
-    <nd ref='19035791' />
-    <nd ref='329468' />
-    <nd ref='518813' />
-    <nd ref='329590' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upper Shaftesbury Avenue' />
-  </way>
-  <way id='4585157' timestamp='2007-05-12T09:32:00+01:00' user='nickw' visible='true'>
-    <nd ref='29000955' />
-    <nd ref='29000956' />
-    <nd ref='29000957' />
-    <nd ref='29000958' />
-    <nd ref='29000959' />
-    <nd ref='29000960' />
-    <nd ref='29000964' />
-    <nd ref='29000965' />
-    <nd ref='29000966' />
-    <nd ref='28849616' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Charles Knott Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135161' timestamp='2007-10-16T06:17:55+01:00' user='andrewpmk' visible='true'>
-    <nd ref='24668051' />
-    <nd ref='24668057' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='11968795' timestamp='2007-11-11T18:09:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='107808628' />
-    <nd ref='107808642' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551446' timestamp='2007-05-01T23:50:27+01:00' user='nickw' visible='true'>
-    <nd ref='21689162' />
-    <nd ref='28414293' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lord Mountbatten Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556365' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true'>
-    <nd ref='91113443' />
-    <nd ref='91113444' />
-    <nd ref='91113445' />
-    <nd ref='91113446' />
-    <nd ref='91113447' />
-    <nd ref='91113448' />
-    <nd ref='91113449' />
-    <nd ref='91113443' />
-    <tag k='highway' v='unsurfaced' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015790' timestamp='2007-12-10T20:57:14+00:00' user='sladen' visible='true'>
-    <nd ref='21275655' />
-    <nd ref='21275656' />
-    <nd ref='21275657' />
-    <nd ref='21275658' />
-    <nd ref='21275659' />
-    <nd ref='21275660' />
-    <nd ref='122311149' />
-    <nd ref='160407015' />
-    <nd ref='14806971' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='8151342' timestamp='2007-06-02T19:55:00+01:00' visible='true'>
-    <nd ref='28384692' />
-    <nd ref='28384696' />
-    <nd ref='29874641' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4577386' timestamp='2007-05-09T23:03:55+01:00' visible='true'>
-    <nd ref='28903059' />
-    <nd ref='28903057' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295837' timestamp='2007-02-16T20:51:26+00:00' user='nickw' visible='true'>
-    <nd ref='25764477' />
-    <nd ref='25947176' />
-    <nd ref='25947171' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lower Alfred Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151506' timestamp='2007-06-03T20:41:58+01:00' visible='true'>
-    <nd ref='29925391' />
-    <nd ref='29925569' />
-    <nd ref='29925393' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Denbigh Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644814' timestamp='2007-12-19T15:30:39+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='29549343' />
-    <nd ref='29549344' />
-    <nd ref='29549341' />
-    <nd ref='29549342' />
-    <nd ref='29549343' />
-    <tag k='amenity' v='college' />
-    <tag k='name' v='Barton Peveril' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4540308' timestamp='2007-04-29T21:09:43+01:00' visible='true'>
-    <nd ref='28194359' />
-    <nd ref='28194360' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Turnstone Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10314727' timestamp='2007-12-06T20:40:08+00:00' user='nickw' visible='true'>
-    <nd ref='87241285' />
-    <nd ref='87241480' />
-    <nd ref='87241481' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brightside Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='10598005' timestamp='2007-10-30T16:47:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25282155' />
-    <nd ref='25282154' />
-    <nd ref='25282153' />
-    <nd ref='25282152' />
-    <nd ref='25282086' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4695886' timestamp='2007-06-02T08:31:33+01:00' user='nickw' visible='true'>
-    <nd ref='29856363' />
-    <nd ref='29856368' />
-    <nd ref='29856369' />
-    <nd ref='29856370' />
-    <nd ref='29856371' />
-    <nd ref='29856372' />
-    <nd ref='29856373' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Monks Wood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539542' timestamp='2007-04-29T19:42:14+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237239' />
-    <nd ref='28237247' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Compass Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077263' timestamp='2006-12-16T17:47:15+00:00' user='David Currie' visible='true'>
-    <nd ref='21613437' />
-    <nd ref='21613452' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679910' timestamp='2007-05-28T19:39:21+01:00' visible='true'>
-    <nd ref='29728874' />
-    <nd ref='29728875' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Laburnum Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9650504' timestamp='2007-10-16T17:18:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254688' />
-    <nd ref='254689' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604519' timestamp='2007-05-15T20:47:43+01:00' user='nickw' visible='true'>
-    <nd ref='29134138' />
-    <nd ref='29134140' />
-    <nd ref='29134142' />
-    <nd ref='29134144' />
-    <nd ref='24984776' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360457' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575769' />
-    <nd ref='26575732' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rudd Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999857' timestamp='2007-10-29T07:46:37+00:00' user='nickw' visible='true'>
-    <nd ref='20976778' />
-    <nd ref='20976777' />
-    <nd ref='20976667' />
-    <nd ref='20976776' />
-    <nd ref='91107940' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Melrose Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386804' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781153' />
-    <nd ref='26781177' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074132' timestamp='2006-12-13T20:19:51+00:00' user='nickw' visible='true'>
-    <nd ref='21561783' />
-    <nd ref='21561795' />
-    <nd ref='21561531' />
-    <nd ref='21561784' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Medina Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580511' timestamp='2007-12-08T20:11:12+00:00' user='nickw' visible='true'>
-    <nd ref='28935989' />
-    <nd ref='157200329' />
-    <nd ref='28935990' />
-    <nd ref='157200337' />
-    <nd ref='157201953' />
-    <nd ref='28935991' />
-    <nd ref='157201962' />
-    <nd ref='28935998' />
-    <nd ref='157204119' />
-    <nd ref='153331814' />
-    <nd ref='28936006' />
-    <nd ref='28936007' />
-    <nd ref='28936008' />
-    <nd ref='28936009' />
-    <nd ref='28936014' />
-    <nd ref='28936015' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tangmere Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540340' timestamp='2007-04-29T21:10:01+01:00' visible='true'>
-    <nd ref='28194425' />
-    <nd ref='28246671' />
-    <nd ref='28194426' />
-    <nd ref='28194430' />
-    <nd ref='28194432' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Widgeon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295843' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='25764437' />
-    <nd ref='25764415' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4639842' timestamp='2007-06-10T18:15:31+01:00' visible='true'>
-    <nd ref='29511212' />
-    <nd ref='30161115' />
-    <nd ref='29728868' />
-    <nd ref='29728869' />
-    <nd ref='29728871' />
-    <nd ref='29728870' />
-    <nd ref='29534191' />
-    <nd ref='29511214' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Archers Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539754' timestamp='2007-04-29T20:03:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240335' />
-    <nd ref='28240337' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Firtree Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819437' timestamp='2006-10-23T21:01:11+01:00' user='nickw' visible='true'>
-    <nd ref='19227234' />
-    <nd ref='19227231' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rockleigh Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999318' timestamp='2006-11-13T00:42:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20973091' />
-    <nd ref='8596775' />
-    <nd ref='20973090' />
-    <nd ref='20973089' />
-    <nd ref='20973093' />
-    <nd ref='20973094' />
-    <nd ref='8596784' />
-    <nd ref='20973092' />
-    <nd ref='20973091' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123566' timestamp='2007-06-09T19:36:00+01:00' user='nickw' visible='true'>
-    <nd ref='10216402' />
-    <nd ref='10216408' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C68' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='West End Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8125049' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071279' />
-    <nd ref='13071289' />
-    <nd ref='13071304' />
-    <nd ref='13071290' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='MacArthur Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4250746' timestamp='2007-01-25T22:42:20+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21600677' />
-    <nd ref='21600674' />
-    <nd ref='21600675' />
-    <nd ref='21600676' />
-    <nd ref='21600677' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079300' timestamp='2006-12-18T21:21:59+00:00' user='nickw' visible='true'>
-    <nd ref='21636809' />
-    <nd ref='21636729' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dene Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788502' timestamp='2008-01-04T19:34:28+00:00' user='nickw' visible='true'>
-    <nd ref='206163291' />
-    <nd ref='206163292' />
-    <nd ref='206163293' />
-    <nd ref='206163278' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643765' timestamp='2007-05-24T00:05:32+01:00' visible='true'>
-    <nd ref='28418516' />
-    <nd ref='28418533' />
-    <nd ref='29543383' />
-    <nd ref='29543384' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Kelvin Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743334' timestamp='2007-06-11T22:32:16+01:00' visible='true'>
-    <nd ref='30226993' />
-    <nd ref='30226995' />
-    <nd ref='30226996' />
-    <nd ref='30226997' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540961' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252909' />
-    <nd ref='28252906' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Balmoral Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819403' timestamp='2006-10-23T20:53:07+01:00' user='nickw' visible='true'>
-    <nd ref='19227236' />
-    <nd ref='19227237' />
-    <nd ref='16963731' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818223' timestamp='2007-06-26T23:45:20+01:00' user='nickw' visible='true'>
-    <nd ref='30956617' />
-    <nd ref='30956611' />
-    <nd ref='30956610' />
-    <nd ref='30956609' />
-    <nd ref='30956608' />
-    <nd ref='30956607' />
-    <nd ref='30956600' />
-    <nd ref='30956599' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121930' timestamp='2006-06-01T09:41:40+01:00' user='nickw' visible='true'>
-    <nd ref='383000' />
-    <nd ref='382999' />
-    <nd ref='382998' />
-    <nd ref='20976768' />
-    <nd ref='382997' />
-    <nd ref='20976788' />
-    <nd ref='382996' />
-    <nd ref='382995' />
-    <nd ref='330447' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bellemoor Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4211073' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949851' />
-    <nd ref='24949864' />
-    <nd ref='24949863' />
-    <nd ref='24949817' />
-    <nd ref='24949862' />
-    <nd ref='24949860' />
-    <nd ref='24949859' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lake Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10519823' timestamp='2007-10-28T21:04:53+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='20971144' />
-    <nd ref='90623400' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='St Mary's Road' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4008601' timestamp='2007-10-29T08:14:24+00:00' user='nickw' visible='true'>
-    <nd ref='21092041' />
-    <nd ref='91120321' />
-    <nd ref='91121995' />
-    <nd ref='87241285' />
-    <nd ref='21600524' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Coxford Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4875600' timestamp='2007-07-09T12:19:46+01:00' visible='true'>
-    <nd ref='19890108' />
-    <nd ref='27496133' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4279035' timestamp='2007-02-11T00:33:37+00:00' visible='true'>
-    <nd ref='25765745' />
-    <nd ref='25947172' />
-    <nd ref='25947170' />
-    <nd ref='25765746' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Raven Road' />
-  </way>
-  <way id='4235070' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='25282114' />
-    <nd ref='25282119' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3907166' timestamp='2006-10-27T23:39:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110904' />
-    <nd ref='20110850' />
-    <nd ref='20110861' />
-    <nd ref='20110752' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9044699' timestamp='2007-10-12T14:02:05+01:00' user='SteveC' visible='true'>
-    <nd ref='66586252' />
-    <nd ref='66586253' />
-    <nd ref='66586255' />
-    <nd ref='66586256' />
-    <nd ref='66586257' />
-    <nd ref='66586258' />
-    <nd ref='66586252' />
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4677682' timestamp='2007-05-31T22:21:13+01:00' visible='true'>
-    <nd ref='29707283' />
-    <nd ref='29707284' />
-    <nd ref='29707285' />
-    <nd ref='29817625' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123351' timestamp='2007-05-29T22:14:41+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='254395' />
-    <nd ref='13071247' />
-    <nd ref='15028809' />
-    <nd ref='254552' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Witts Hill' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3578588' timestamp='2008-01-25T18:28:22+00:00' visible='true'>
-    <nd ref='17723035' />
-    <nd ref='17723041' />
-    <nd ref='17723042' />
-    <nd ref='305225' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15516422' timestamp='2007-12-07T13:53:38+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='154773775' />
-    <nd ref='154773776' />
-    <nd ref='154773777' />
-    <nd ref='154773779' />
-    <nd ref='154773775' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4586123' timestamp='2007-05-12T15:16:00+01:00' user='nickw' visible='true'>
-    <nd ref='29008394' />
-    <nd ref='29008393' />
-    <nd ref='29008444' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grasmere Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1670' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='544326' />
-    <nd ref='27434186' />
-    <nd ref='544327' />
-    <nd ref='544328' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Arnold Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3631233' timestamp='2007-10-16T17:24:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='17979921' />
-    <nd ref='17979920' />
-    <nd ref='603226' />
-    <nd ref='17979923' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ancasta Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551441' timestamp='2007-05-01T23:50:23+01:00' user='nickw' visible='true'>
-    <nd ref='28414270' />
-    <nd ref='28414272' />
-    <nd ref='28414266' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Havenstone Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773447' timestamp='2007-06-17T22:03:40+01:00' visible='true'>
-    <nd ref='30506818' />
-    <nd ref='30506823' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196532' timestamp='2007-01-04T21:07:46+00:00' user='nickw' visible='true'>
-    <nd ref='24668385' />
-    <nd ref='24668068' />
-    <nd ref='24668140' />
-    <nd ref='24668176' />
-    <nd ref='24668311' />
-    <nd ref='24668354' />
-    <nd ref='24668012' />
-    <nd ref='24668090' />
-    <nd ref='24668282' />
-    <nd ref='24668364' />
-    <nd ref='24668026' />
-    <nd ref='24668266' />
-    <nd ref='24668346' />
-    <nd ref='24667976' />
-    <nd ref='24668088' />
-    <nd ref='24668264' />
-    <nd ref='24668341' />
-    <nd ref='24667940' />
-    <nd ref='24668076' />
-    <nd ref='24668250' />
-    <nd ref='24668080' />
-    <nd ref='24667959' />
-    <nd ref='24668267' />
-    <nd ref='24668086' />
-    <nd ref='24668019' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152187' timestamp='2007-10-16T02:43:47+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30223958' />
-    <nd ref='30223924' />
-    <nd ref='30223591' />
-    <nd ref='30223926' />
-    <nd ref='30223928' />
-    <nd ref='30223930' />
-    <nd ref='30223932' />
-    <nd ref='30223933' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Chartwell Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4691081' timestamp='2007-05-31T22:21:12+01:00' visible='true'>
-    <nd ref='29817245' />
-    <nd ref='29817622' />
-    <nd ref='29817624' />
-    <nd ref='29817625' />
-    <nd ref='29817627' />
-    <nd ref='29817629' />
-    <nd ref='29817631' />
-    <nd ref='29817634' />
-    <nd ref='29816838' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Claudius Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724596' timestamp='2007-06-10T18:20:10+01:00' visible='true'>
-    <nd ref='30096967' />
-    <nd ref='30096968' />
-    <nd ref='30096965' />
-    <nd ref='30096966' />
-    <nd ref='30096967' />
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Knightingale Primary School' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072025' timestamp='2008-02-03T06:25:23+00:00' user='sladen' visible='true'>
-    <nd ref='34278554' />
-    <nd ref='34278555' />
-    <nd ref='34278559' />
-    <nd ref='34278562' />
-    <nd ref='34278564' />
-    <nd ref='34278567' />
-    <nd ref='34278570' />
-    <nd ref='34278574' />
-    <nd ref='8596752' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4540317' timestamp='2007-04-29T21:09:46+01:00' visible='true'>
-    <nd ref='28194372' />
-    <nd ref='28194373' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gannet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539991' timestamp='2007-04-29T20:37:29+01:00' user='Andy Street' visible='true'>
-    <nd ref='26727693' />
-    <nd ref='28243962' />
-    <nd ref='28243971' />
-    <nd ref='28243999' />
-    <nd ref='28244012' />
-    <nd ref='28244004' />
-    <nd ref='28244018' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Drove Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540976' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252977' />
-    <nd ref='28252978' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3701110' timestamp='2006-10-16T21:47:25+01:00' user='nickw' visible='true'>
-    <nd ref='18347840' />
-    <nd ref='18347832' />
-    <nd ref='18347833' />
-    <nd ref='18347834' />
-    <nd ref='19227213' />
-    <nd ref='18347835' />
-    <nd ref='18347836' />
-    <nd ref='18347837' />
-    <nd ref='18347838' />
-    <nd ref='18347839' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Pointout Path' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4639528' timestamp='2007-10-16T06:19:25+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29505720' />
-    <nd ref='29505721' />
-    <nd ref='29505723' />
-    <nd ref='29505725' />
-    <nd ref='29505726' />
-    <nd ref='29505728' />
-    <nd ref='29505729' />
-    <nd ref='29505731' />
-    <nd ref='29505732' />
-    <nd ref='29505733' />
-    <nd ref='29505735' />
-    <nd ref='29505736' />
-    <nd ref='29505738' />
-    <nd ref='29505739' />
-    <nd ref='29505740' />
-    <nd ref='29505742' />
-    <nd ref='29505743' />
-    <nd ref='29505745' />
-    <nd ref='29505719' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3102933' timestamp='2007-12-06T19:26:19+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254475' />
-    <nd ref='18348693' />
-    <nd ref='254925' />
-    <nd ref='91228879' />
-    <nd ref='271232' />
-    <nd ref='254926' />
-    <nd ref='25895686' />
-    <nd ref='21091403' />
-    <nd ref='153200231' />
-    <nd ref='254927' />
-    <nd ref='28932431' />
-    <nd ref='25895685' />
-    <nd ref='25895687' />
-    <nd ref='28932245' />
-    <nd ref='20965516' />
-    <nd ref='25895694' />
-    <nd ref='25895690' />
-    <nd ref='254928' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8100075' timestamp='2007-10-16T02:43:57+01:00' user='andrewpmk' visible='true'>
-    <nd ref='21178440' />
-    <nd ref='25504297' />
-    <nd ref='21178439' />
-    <nd ref='15740486' />
-    <nd ref='15740485' />
-    <nd ref='29838301' />
-    <nd ref='15740484' />
-    <nd ref='29505714' />
-    <nd ref='29505716' />
-    <nd ref='29505717' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='name' v='Boyatt Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8130047' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20130926' />
-    <nd ref='20130929' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wilmington Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1189480' timestamp='2006-05-21T09:20:18+01:00' user='nickw' visible='true'>
-    <nd ref='700384' />
-    <nd ref='700392' />
-    <nd ref='700393' />
-    <nd ref='700394' />
-    <nd ref='700395' />
-    <nd ref='4931288' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='9651719' timestamp='2007-10-16T17:47:51+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14957858' />
-    <nd ref='14957857' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4061550' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='21507800' />
-    <nd ref='21507799' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19390819' timestamp='2008-01-01T18:37:09+00:00' user='Milliams' visible='true'>
-    <nd ref='201648580' />
-    <nd ref='201648581' />
-    <nd ref='201648582' />
-    <nd ref='201648583' />
-    <nd ref='201648584' />
-    <nd ref='201648585' />
-    <nd ref='201648586' />
-    <nd ref='201648588' />
-    <nd ref='201648590' />
-    <nd ref='201648593' />
-    <nd ref='201648596' />
-    <nd ref='201648597' />
-    <nd ref='201648580' />
-    <tag k='aeroway' v='apron' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </way>
-  <way id='15724199' timestamp='2007-12-08T20:11:12+00:00' user='nickw' visible='true'>
-    <nd ref='157204142' />
-    <nd ref='157204146' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pembrey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548025' timestamp='2007-05-01T10:05:41+01:00' visible='true'>
-    <nd ref='28372733' />
-    <nd ref='28372782' />
-    <nd ref='28372798' />
-    <nd ref='28372783' />
-    <nd ref='28372784' />
-    <nd ref='28372785' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bindon Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788475' timestamp='2008-01-04T19:32:09+00:00' user='nickw' visible='true'>
-    <nd ref='206163072' />
-    <nd ref='206162246' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dorset Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540331' timestamp='2007-04-29T21:09:59+01:00' visible='true'>
-    <nd ref='28194406' />
-    <nd ref='28194407' />
-    <nd ref='28194408' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Firecrest Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8279194' timestamp='2006-09-08T02:12:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964132' />
-    <nd ref='14964133' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133951' timestamp='2006-12-14T13:53:18+00:00' user='David Currie' visible='true'>
-    <nd ref='21579404' />
-    <nd ref='21579405' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tristram Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9674298' timestamp='2007-10-16T23:45:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700388' />
-    <nd ref='700389' />
-    <nd ref='700390' />
-    <nd ref='700391' />
-    <nd ref='700398' />
-    <nd ref='700399' />
-    <nd ref='700400' />
-    <nd ref='700401' />
-    <nd ref='700402' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westridge Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2942468' timestamp='2007-10-29T15:11:28+00:00' user='Dean Earley' visible='true'>
-    <nd ref='13705875' />
-    <nd ref='13705942' />
-    <nd ref='91478072' />
-    <nd ref='13705961' />
-    <nd ref='13705966' />
-    <nd ref='13705967' />
-    <nd ref='13705972' />
-    <nd ref='13706009' />
-    <nd ref='13706011' />
-    <nd ref='13706022' />
-    <nd ref='13706035' />
-    <nd ref='13706042' />
-    <nd ref='90513087' />
-    <nd ref='13706045' />
-    <nd ref='13706061' />
-    <nd ref='13706063' />
-    <nd ref='13706068' />
-    <nd ref='87799815' />
-    <nd ref='87799816' />
-    <nd ref='87799817' />
-    <nd ref='87799818' />
-    <nd ref='13706071' />
-    <nd ref='29693183' />
-    <nd ref='29693184' />
-    <nd ref='29693185' />
-    <nd ref='29693182' />
-    <nd ref='20012525' />
-    <nd ref='13706072' />
-    <nd ref='87799819' />
-    <nd ref='87799820' />
-    <nd ref='87799821' />
-    <nd ref='13706076' />
-    <nd ref='13706085' />
-    <nd ref='13706090' />
-    <nd ref='13706093' />
-    <nd ref='13706098' />
-    <nd ref='13706105' />
-    <nd ref='13706121' />
-    <nd ref='13706125' />
-    <nd ref='13706134' />
-    <nd ref='13706142' />
-    <nd ref='13706175' />
-    <nd ref='13706179' />
-    <nd ref='13706227' />
-    <nd ref='13706228' />
-    <nd ref='13706229' />
-    <nd ref='13706238' />
-    <nd ref='13706243' />
-    <nd ref='13706247' />
-    <nd ref='13706249' />
-    <nd ref='13706252' />
-    <nd ref='13706256' />
-    <nd ref='13706265' />
-    <nd ref='13706270' />
-    <tag k='natural' v='coastline' />
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4773737' timestamp='2007-06-17T22:38:16+01:00' visible='true'>
-    <nd ref='30431939' />
-    <nd ref='30431996' />
-    <nd ref='30431999' />
-    <nd ref='30431936' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072036' timestamp='2008-02-03T06:22:40+00:00' user='sladen' visible='true'>
-    <nd ref='14726180' />
-    <nd ref='34278614' />
-    <nd ref='34278618' />
-    <nd ref='245152162' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3987532' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831112' />
-    <nd ref='20831116' />
-    <nd ref='20831117' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Southampton Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151066' timestamp='2007-05-31T22:04:39+01:00' visible='true'>
-    <nd ref='29816554' />
-    <nd ref='29816555' />
-    <nd ref='29816556' />
-    <nd ref='29816557' />
-    <nd ref='29816558' />
-    <nd ref='29816559' />
-    <nd ref='29816560' />
-    <nd ref='29816561' />
-    <nd ref='29816562' />
-    <nd ref='29816563' />
-    <nd ref='29816565' />
-    <nd ref='29816566' />
-    <nd ref='29816567' />
-    <nd ref='29816568' />
-    <nd ref='29816569' />
-    <nd ref='29816570' />
-    <nd ref='29816571' />
-    <nd ref='29816572' />
-    <nd ref='29816573' />
-    <nd ref='29816574' />
-    <nd ref='29816575' />
-    <nd ref='29816550' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121522' timestamp='2006-05-22T22:29:14+01:00' user='nickw' visible='true'>
-    <nd ref='325698' />
-    <nd ref='658449' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Earls Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4742945' timestamp='2007-10-16T02:44:13+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29711868' />
-    <nd ref='30221372' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Woburn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121934' timestamp='2008-02-03T06:00:09+00:00' user='sladen' visible='true'>
-    <nd ref='14727983' />
-    <nd ref='254706' />
-    <nd ref='14727964' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='The Avenue' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150803' timestamp='2007-06-03T16:05:29+01:00' visible='true'>
-    <nd ref='29914252' />
-    <nd ref='29914192' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999139' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971186' />
-    <nd ref='20971187' />
-    <nd ref='20971188' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='the local CC have the amazing ability to forget road signs around here...' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3981716' timestamp='2006-10-31T22:26:05+00:00' user='nickw' visible='true'>
-    <nd ref='14743176' />
-    <nd ref='20698064' />
-    <nd ref='254921' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Kingsbridge Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136279' timestamp='2007-01-19T18:57:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='14743167' />
-    <nd ref='254894' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Hill Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4278990' timestamp='2007-02-10T23:53:39+00:00' visible='true'>
-    <nd ref='25764486' />
-    <nd ref='25764483' />
-    <nd ref='25764441' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Exmoor Road' />
-  </way>
-  <way id='22800851' timestamp='2008-02-03T06:10:43+00:00' user='sladen' visible='true'>
-    <nd ref='245149450' />
-    <nd ref='245149521' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4539979' timestamp='2007-04-29T20:37:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243615' />
-    <nd ref='28243623' />
-    <nd ref='28243635' />
-    <nd ref='28243647' />
-    <nd ref='28243638' />
-    <nd ref='28243640' />
-    <nd ref='28243646' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redhill Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074124' timestamp='2006-12-13T20:09:46+00:00' user='nickw' visible='true'>
-    <nd ref='21561566' />
-    <nd ref='21561534' />
-    <nd ref='21561573' />
-    <nd ref='21561574' />
-    <nd ref='21561575' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Salem Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2920979' timestamp='2006-08-15T12:22:55+01:00' user='nickw' visible='true'>
-    <nd ref='474860' />
-    <nd ref='10908494' />
-    <nd ref='10908493' />
-    <nd ref='10908464' />
-    <nd ref='10908568' />
-    <nd ref='10908579' />
-    <nd ref='13565140' />
-    <nd ref='13565143' />
-    <nd ref='13565146' />
-    <nd ref='474847' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='bridleway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4683441' timestamp='2007-05-31T21:31:15+01:00' visible='true'>
-    <nd ref='29762562' />
-    <nd ref='29762782' />
-    <nd ref='29762783' />
-    <nd ref='29762784' />
-    <nd ref='29762785' />
-    <nd ref='29762786' />
-    <nd ref='29762787' />
-    <nd ref='29762788' />
-    <nd ref='29815073' />
-    <nd ref='29815074' />
-    <nd ref='29815075' />
-    <nd ref='29815076' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4363109' timestamp='2007-03-17T20:47:49+00:00' user='nickw' visible='true'>
-    <nd ref='661160' />
-    <nd ref='26593135' />
-    <nd ref='26593136' />
-    <nd ref='26593137' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rosoman Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556767' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true'>
-    <nd ref='91130460' />
-    <nd ref='91130461' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vinery Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150901' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='21178440' />
-    <nd ref='29930744' />
-    <nd ref='29765432' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chapel Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='14505412' timestamp='2007-11-29T22:26:20+00:00' user='nickw' visible='true'>
-    <nd ref='142612642' />
-    <nd ref='142612652' />
-    <nd ref='142612656' />
-    <nd ref='142612663' />
-    <nd ref='142612670' />
-    <nd ref='142612675' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rollesbrook Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854836' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071413' />
-    <nd ref='13071414' />
-    <nd ref='13071415' />
-    <nd ref='13071416' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glasslaw Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043748' timestamp='2006-12-02T22:59:21+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419247' />
-    <nd ref='21419250' />
-    <nd ref='21419251' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677886' timestamp='2007-05-28T12:56:42+01:00' visible='true'>
-    <nd ref='29705510' />
-    <nd ref='29705512' />
-    <nd ref='29705514' />
-    <nd ref='29705515' />
-    <nd ref='29705516' />
-    <nd ref='29705518' />
-    <nd ref='29705520' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4691086' timestamp='2007-05-31T22:22:44+01:00' visible='true'>
-    <nd ref='29817631' />
-    <nd ref='29817897' />
-    <nd ref='29817900' />
-    <nd ref='29817901' />
-    <nd ref='29817902' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Claudius Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639486' timestamp='2006-06-03T22:25:53+01:00' user='Dean Earley' visible='true'>
-    <nd ref='7015569' />
-    <nd ref='325682' />
-    <nd ref='325681' />
-    <nd ref='325680' />
-    <nd ref='20957192' />
-    <nd ref='325679' />
-    <nd ref='21091883' />
-    <nd ref='325678' />
-    <nd ref='21091885' />
-    <nd ref='20976817' />
-    <nd ref='21141429' />
-    <nd ref='20976816' />
-    <nd ref='20976815' />
-    <nd ref='21141404' />
-    <nd ref='21141405' />
-    <nd ref='21141403' />
-    <nd ref='330447' />
-    <nd ref='325677' />
-    <nd ref='325676' />
-    <nd ref='254891' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Wilton Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2854825' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071362' />
-    <nd ref='13071365' />
-    <nd ref='13071366' />
-    <nd ref='13071367' />
-    <nd ref='13071368' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Monastery Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8302434' timestamp='2007-12-10T19:14:07+00:00' user='sladen' visible='true'>
-    <nd ref='19890108' />
-    <nd ref='19890110' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4278667' timestamp='2007-05-12T09:45:13+01:00' user='nickw' visible='true'>
-    <nd ref='25761522' />
-    <nd ref='25761516' />
-    <nd ref='29001421' />
-    <nd ref='29001422' />
-    <nd ref='25761517' />
-    <nd ref='25761518' />
-    <nd ref='25761519' />
-    <nd ref='25761520' />
-    <nd ref='25761521' />
-    <nd ref='25761522' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='npe' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540326' timestamp='2007-04-29T21:09:53+01:00' visible='true'>
-    <nd ref='28194387' />
-    <nd ref='28194388' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kestrel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4489766' timestamp='2008-01-25T18:33:10+00:00' visible='true'>
-    <nd ref='132719' />
-    <nd ref='27523503' />
-    <nd ref='27523501' />
-    <nd ref='27523500' />
-    <nd ref='27523499' />
-    <nd ref='27523498' />
-    <nd ref='27523497' />
-    <nd ref='254675' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360461' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575786' />
-    <nd ref='26575785' />
-    <nd ref='26575729' />
-    <nd ref='26575787' />
-    <nd ref='26575779' />
-    <nd ref='26575731' />
-    <nd ref='26575778' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Orchard Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639458' timestamp='2007-11-29T22:35:31+00:00' user='nickw' visible='true'>
-    <nd ref='469851' />
-    <nd ref='242722' />
-    <nd ref='21615429' />
-    <nd ref='242721' />
-    <nd ref='18868876' />
-    <nd ref='142612637' />
-    <nd ref='20957224' />
-    <nd ref='142616989' />
-    <nd ref='242720' />
-    <nd ref='254527' />
-    <nd ref='142620768' />
-    <nd ref='20957225' />
-    <nd ref='12595092' />
-    <nd ref='325684' />
-    <nd ref='28247336' />
-    <nd ref='12595160' />
-    <nd ref='242718' />
-    <nd ref='7015569' />
-    <nd ref='25303943' />
-    <nd ref='242719' />
-    <nd ref='25303942' />
-    <nd ref='21141388' />
-    <nd ref='21141389' />
-    <nd ref='21091889' />
-    <nd ref='242715' />
-    <nd ref='28247335' />
-    <nd ref='28247334' />
-    <nd ref='383001' />
-    <nd ref='25303941' />
-    <nd ref='91107577' />
-    <nd ref='20976779' />
-    <nd ref='242723' />
-    <nd ref='19227236' />
-    <nd ref='25303940' />
-    <nd ref='25303934' />
-    <nd ref='254896' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Hill Lane' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='15726282' timestamp='2007-12-08T20:33:31+00:00' user='nickw' visible='true'>
-    <nd ref='157238273' />
-    <nd ref='157222343' />
-    <nd ref='157238279' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Matheson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1927' timestamp='2006-06-04T00:30:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='661194' />
-    <nd ref='661190' />
-    <nd ref='25640032' />
-    <nd ref='25640031' />
-    <nd ref='661189' />
-    <nd ref='25640033' />
-    <nd ref='661188' />
-    <nd ref='25640034' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Chessel Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4690971' timestamp='2007-05-31T21:58:52+01:00' visible='true'>
-    <nd ref='29815067' />
-    <nd ref='29816395' />
-    <nd ref='29816396' />
-    <nd ref='29816397' />
-    <nd ref='29816398' />
-    <nd ref='29816399' />
-    <nd ref='29816400' />
-    <nd ref='29816401' />
-    <nd ref='29816402' />
-    <nd ref='29816403' />
-    <nd ref='29816404' />
-    <nd ref='29816405' />
-    <nd ref='29816406' />
-    <nd ref='29816407' />
-    <nd ref='29816408' />
-    <nd ref='29816409' />
-    <nd ref='29816410' />
-    <nd ref='29816411' />
-    <nd ref='29816412' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536221' timestamp='2007-12-07T13:29:26+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180206' />
-    <nd ref='28180241' />
-    <nd ref='28180242' />
-    <nd ref='28180243' />
-    <nd ref='28180244' />
-    <nd ref='28180245' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Venture Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4701842' timestamp='2007-06-03T15:41:49+01:00' visible='true'>
-    <nd ref='29911933' />
-    <nd ref='29710896' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9660269' timestamp='2007-10-16T20:14:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726312' />
-    <nd ref='9726301' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13250614' timestamp='2007-11-18T18:59:20+00:00' user='nickw' visible='true'>
-    <nd ref='469876' />
-    <nd ref='122313892' />
-    <nd ref='122313896' />
-    <nd ref='122313901' />
-    <nd ref='122313906' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Somerset Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540737' timestamp='2007-04-29T21:43:21+01:00' visible='true'>
-    <nd ref='28249809' />
-    <nd ref='21561808' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beulah Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061555' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='21507740' />
-    <nd ref='21507803' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074140' timestamp='2006-12-13T20:19:52+00:00' user='nickw' visible='true'>
-    <nd ref='14743149' />
-    <nd ref='21561530' />
-    <nd ref='21561810' />
-    <nd ref='28249809' />
-    <nd ref='21561811' />
-    <nd ref='21561812' />
-    <nd ref='21561813' />
-    <nd ref='21561814' />
-    <nd ref='21561815' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='King Edward Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009863' timestamp='2008-01-25T18:27:49+00:00' visible='true'>
-    <nd ref='305222' />
-    <nd ref='24924058' />
-    <nd ref='24924059' />
-    <nd ref='298244' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535833' timestamp='2007-04-29T01:04:32+01:00' visible='true'>
-    <nd ref='28173967' />
-    <nd ref='28173973' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaulieu Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8250663' timestamp='2007-10-16T23:45:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726311' />
-    <nd ref='9726302' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Bullar Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558324' timestamp='2007-05-03T00:08:31+01:00' visible='true'>
-    <nd ref='28584194' />
-    <nd ref='28584198' />
-    <nd ref='28584201' />
-    <nd ref='28584204' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cowdry Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586153' timestamp='2007-05-12T15:26:09+01:00' user='nickw' visible='true'>
-    <nd ref='29008933' />
-    <nd ref='29008948' />
-    <nd ref='29008949' />
-    <nd ref='29008950' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thames Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558166' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582950' />
-    <nd ref='28582952' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698532' timestamp='2007-06-02T19:49:13+01:00' visible='true'>
-    <nd ref='29632423' />
-    <nd ref='29632238' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='8148379' timestamp='2007-12-07T13:29:02+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180222' />
-    <nd ref='28180224' />
-    <nd ref='28180226' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Enterprise Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4209535' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='21689172' />
-    <nd ref='24924108' />
-    <nd ref='24924109' />
-    <nd ref='24924110' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578765' timestamp='2006-10-07T00:25:26+01:00' user='nickw' visible='true'>
-    <nd ref='301590' />
-    <nd ref='301591' />
-    <nd ref='301592' />
-    <nd ref='17724273' />
-    <nd ref='301593' />
-    <nd ref='301595' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Lovers Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124971' timestamp='2007-10-16T17:18:12+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14745431' />
-    <nd ref='14745429' />
-    <nd ref='254686' />
-    <nd ref='27512880' />
-    <nd ref='14745428' />
-    <nd ref='25340629' />
-    <nd ref='29392362' />
-    <nd ref='14745427' />
-    <nd ref='25635429' />
-    <nd ref='29874155' />
-    <nd ref='14745426' />
-    <nd ref='25303004' />
-    <nd ref='12889434' />
-    <nd ref='12889433' />
-    <nd ref='254687' />
-    <nd ref='254688' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679918' timestamp='2007-05-28T19:39:26+01:00' visible='true'>
-    <nd ref='29730496' />
-    <nd ref='29730497' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Drinkwater Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074107' timestamp='2006-12-13T20:09:44+00:00' user='nickw' visible='true'>
-    <nd ref='21561549' />
-    <nd ref='21561528' />
-    <nd ref='21275711' />
-    <nd ref='21275712' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gurney Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678188' timestamp='2007-05-31T21:37:12+01:00' visible='true'>
-    <nd ref='29710756' />
-    <nd ref='29815439' />
-    <nd ref='29710758' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Walmer Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801502' timestamp='2008-02-03T06:15:16+00:00' user='sladen' visible='true'>
-    <nd ref='245147653' />
-    <nd ref='245150392' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4269311' timestamp='2007-02-04T22:51:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639907' />
-    <nd ref='25639909' />
-    <nd ref='25639910' />
-    <nd ref='25639911' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2234' timestamp='2006-06-04T00:30:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='675847' />
-    <nd ref='20102973' />
-    <nd ref='28347765' />
-    <nd ref='675848' />
-    <nd ref='20102972' />
-    <nd ref='675849' />
-    <nd ref='20102970' />
-    <nd ref='675850' />
-    <nd ref='28347764' />
-    <nd ref='20130936' />
-    <nd ref='13564649' />
-    <nd ref='28347750' />
-    <nd ref='675851' />
-    <nd ref='20102969' />
-    <nd ref='20102967' />
-    <nd ref='675852' />
-    <nd ref='13564627' />
-    <nd ref='13071382' />
-    <nd ref='20102966' />
-    <nd ref='675853' />
-    <nd ref='28347589' />
-    <nd ref='20102965' />
-    <nd ref='20102964' />
-    <nd ref='28347588' />
-    <nd ref='675854' />
-    <nd ref='20102962' />
-    <nd ref='675855' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Meggeson Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546547' timestamp='2007-04-30T23:48:49+01:00' user='nickw' visible='true'>
-    <nd ref='28348304' />
-    <nd ref='28345039' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Downton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151491' timestamp='2007-06-03T20:17:27+01:00' visible='true'>
-    <nd ref='29914417' />
-    <nd ref='29914418' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Compton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724854' timestamp='2007-12-08T20:16:59+00:00' user='nickw' visible='true'>
-    <nd ref='157212563' />
-    <nd ref='157212558' />
-    <nd ref='157212569' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunbar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3111328' timestamp='2007-05-20T10:19:39+01:00' user='nickw' visible='true'>
-    <nd ref='544335' />
-    <nd ref='544336' />
-    <nd ref='544337' />
-    <nd ref='544338' />
-    <nd ref='21689163' />
-    <nd ref='21689174' />
-    <nd ref='21689164' />
-    <nd ref='29380441' />
-    <nd ref='21689165' />
-    <nd ref='21689166' />
-    <nd ref='21419419' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Monks Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2494479' timestamp='2006-07-18T10:28:30+01:00' user='nickw' visible='true'>
-    <nd ref='10908537' />
-    <nd ref='25471868' />
-    <nd ref='329644' />
-    <nd ref='329641' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Robert Cecil Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703160' timestamp='2007-06-03T20:10:49+01:00' visible='true'>
-    <nd ref='29923779' />
-    <nd ref='29924353' />
-    <nd ref='29704339' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151056' timestamp='2007-05-31T21:37:11+01:00' visible='true'>
-    <nd ref='29815076' />
-    <nd ref='29815430' />
-    <nd ref='29815431' />
-    <nd ref='29815432' />
-    <nd ref='29815433' />
-    <nd ref='29815434' />
-    <nd ref='29815435' />
-    <nd ref='29815436' />
-    <nd ref='29815437' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8137072' timestamp='2007-10-16T20:14:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254763' />
-    <nd ref='25440789' />
-    <nd ref='9726312' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5041381' timestamp='2007-12-06T20:40:10+00:00' user='nickw' visible='true'>
-    <nd ref='33718235' />
-    <nd ref='33718244' />
-    <nd ref='33718236' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Alder Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4679906' timestamp='2007-06-10T18:15:30+01:00' visible='true'>
-    <nd ref='29728868' />
-    <nd ref='30161116' />
-    <nd ref='30161117' />
-    <nd ref='29728856' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Weston Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773306' timestamp='2007-06-17T21:43:58+01:00' visible='true'>
-    <nd ref='30504463' />
-    <nd ref='30504459' />
-    <nd ref='30504460' />
-    <nd ref='30504461' />
-    <nd ref='30504462' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harewood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725217' timestamp='2007-12-08T20:21:05+00:00' user='nickw' visible='true'>
-    <nd ref='157218839' />
-    <nd ref='157218844' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sutherland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677093' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='18232084' />
-    <nd ref='18232085' />
-    <nd ref='18232086' />
-    <nd ref='18232099' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148597' timestamp='2007-05-26T20:16:27+01:00' visible='true'>
-    <nd ref='28339178' />
-    <nd ref='28418255' />
-    <nd ref='28418257' />
-    <nd ref='28418259' />
-    <nd ref='28418261' />
-    <nd ref='28418263' />
-    <nd ref='28418264' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Bright Wire Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546506' timestamp='2007-04-30T23:40:11+01:00' user='nickw' visible='true'>
-    <nd ref='28347750' />
-    <nd ref='28347751' />
-    <nd ref='28345067' />
-    <nd ref='28347752' />
-    <nd ref='28347753' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ozier Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698173' timestamp='2007-06-02T19:04:04+01:00' visible='true'>
-    <nd ref='29872350' />
-    <nd ref='29872351' />
-    <nd ref='29872352' />
-    <nd ref='29872353' />
-    <nd ref='29872354' />
-    <nd ref='29872355' />
-    <nd ref='29872356' />
-    <nd ref='29872357' />
-    <nd ref='29872358' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='April Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948355' timestamp='2007-12-10T21:06:05+00:00' user='sladen' visible='true'>
-    <nd ref='48967843' />
-    <nd ref='48967846' />
-    <nd ref='48967851' />
-    <nd ref='48967841' />
-    <nd ref='48967840' />
-    <nd ref='48967848' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4269330' timestamp='2007-02-04T22:51:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640015' />
-    <nd ref='25640016' />
-    <nd ref='25640017' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chine Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151510' timestamp='2007-06-03T20:57:38+01:00' visible='true'>
-    <nd ref='29926267' />
-    <nd ref='29926268' />
-    <nd ref='29926269' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oxburgh Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764786' timestamp='2007-06-16T16:28:33+01:00' visible='true'>
-    <nd ref='30432006' />
-    <nd ref='30432007' />
-    <nd ref='30432008' />
-    <nd ref='30432009' />
-    <nd ref='30432003' />
-    <nd ref='30432004' />
-    <nd ref='30432005' />
-    <nd ref='30432006' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6267479' timestamp='2007-09-24T20:26:07+01:00' user='mike l' visible='true'>
-    <nd ref='305636' />
-    <nd ref='52573777' />
-    <nd ref='52573778' />
-    <nd ref='52573779' />
-    <nd ref='52573781' />
-    <nd ref='52573782' />
-    <nd ref='52573784' />
-    <nd ref='52573785' />
-    <nd ref='52573787' />
-    <nd ref='52573789' />
-    <nd ref='52573792' />
-    <nd ref='52570896' />
-    <tag k='railway' v='rail' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4703349' timestamp='2007-06-03T20:52:43+01:00' visible='true'>
-    <nd ref='29925344' />
-    <nd ref='29925937' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Exeter Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724587' timestamp='2007-06-08T23:30:31+01:00' visible='true'>
-    <nd ref='30096943' />
-    <nd ref='30096944' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4301153' timestamp='2007-02-18T21:31:00+00:00' visible='true'>
-    <nd ref='319654' />
-    <nd ref='319656' />
-    <nd ref='319657' />
-    <nd ref='14727967' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rockstone Lane' />
-  </way>
-  <way id='4677922' timestamp='2007-10-16T02:44:02+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29710124' />
-    <nd ref='29710204' />
-    <nd ref='29710125' />
-    <nd ref='29953504' />
-    <nd ref='29710126' />
-    <nd ref='29816836' />
-    <nd ref='29816837' />
-    <nd ref='29816838' />
-    <nd ref='29816839' />
-    <nd ref='29816840' />
-    <nd ref='29816841' />
-    <nd ref='29816842' />
-    <nd ref='29816843' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Peverells Wood Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15942070' timestamp='2007-12-10T19:13:44+00:00' user='sladen' visible='true'>
-    <nd ref='160216600' />
-    <nd ref='254611' />
-    <nd ref='25480534' />
-    <nd ref='25480487' />
-    <nd ref='25480488' />
-    <nd ref='25480489' />
-    <nd ref='25480576' />
-    <nd ref='25480490' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mount Pleasant Road; Radcliffe Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='3266' timestamp='2006-06-04T00:35:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700538' />
-    <nd ref='700539' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Rigby Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='5946804' timestamp='2007-09-10T23:28:37+01:00' visible='true'>
-    <nd ref='48950457' />
-    <nd ref='48950434' />
-    <nd ref='48950436' />
-    <nd ref='48950439' />
-    <nd ref='48950441' />
-    <nd ref='48950442' />
-    <nd ref='48950445' />
-    <nd ref='48950447' />
-    <nd ref='48950449' />
-    <nd ref='48950451' />
-    <nd ref='48950453' />
-    <nd ref='48950455' />
-    <nd ref='48950461' />
-    <nd ref='48950460' />
-    <nd ref='48950457' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8129477' timestamp='2007-09-20T19:45:52+01:00' user='mike l' visible='true'>
-    <nd ref='2073651' />
-    <nd ref='21689072' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hartley Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4379650' timestamp='2007-03-23T22:53:29+00:00' user='nickw' visible='true'>
-    <nd ref='26728536' />
-    <nd ref='26728537' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Loane Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134061' timestamp='2007-10-30T16:47:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21613426' />
-    <nd ref='21613427' />
-    <nd ref='21613428' />
-    <nd ref='21613430' />
-    <nd ref='21613429' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Raglan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077572' timestamp='2006-12-16T21:53:08+00:00' user='nickw' visible='true'>
-    <nd ref='21614661' />
-    <nd ref='21615421' />
-    <nd ref='21615422' />
-    <nd ref='21661759' />
-    <nd ref='21661760' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upper Bugle Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4642372' timestamp='2007-10-16T02:44:12+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29530525' />
-    <nd ref='29530526' />
-    <nd ref='29530527' />
-    <nd ref='29711866' />
-    <nd ref='29530528' />
-    <nd ref='30223079' />
-    <nd ref='29530529' />
-    <nd ref='29530530' />
-    <nd ref='30224264' />
-    <nd ref='29530531' />
-    <nd ref='29709563' />
-    <nd ref='29530532' />
-    <nd ref='29530533' />
-    <nd ref='30226994' />
-    <nd ref='29530534' />
-    <nd ref='30227007' />
-    <nd ref='30226349' />
-    <nd ref='29530535' />
-    <nd ref='30256227' />
-    <nd ref='29530536' />
-    <nd ref='29530537' />
-    <nd ref='29704461' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broadlands Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854818' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071340' />
-    <nd ref='13071341' />
-    <nd ref='13071342' />
-    <nd ref='13071343' />
-    <nd ref='13071344' />
-    <nd ref='13071345' />
-    <nd ref='13071346' />
-    <nd ref='13071347' />
-    <nd ref='13071349' />
-    <nd ref='13071348' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glenfield Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580514' timestamp='2007-05-11T01:00:08+01:00' visible='true'>
-    <nd ref='28935994' />
-    <nd ref='28935995' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074136' timestamp='2006-12-13T20:19:51+00:00' user='nickw' visible='true'>
-    <nd ref='21561786' />
-    <nd ref='21600502' />
-    <nd ref='21561797' />
-    <nd ref='21600496' />
-    <nd ref='21561798' />
-    <nd ref='21600498' />
-    <nd ref='21561799' />
-    <nd ref='21561800' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Shirley Park Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3088319' timestamp='2007-11-25T22:28:43+00:00' user='southglos' visible='true'>
-    <nd ref='14728166' />
-    <nd ref='14728167' />
-    <tag k='oneway' v='yes' />
-    <tag k='osmarender:renderName' v='no' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818441' timestamp='2007-09-20T19:44:47+01:00' user='mike l' visible='true'>
-    <nd ref='10537338' />
-    <nd ref='12889406' />
-    <nd ref='474842' />
-    <nd ref='12889404' />
-    <nd ref='20107323' />
-    <nd ref='13565056' />
-    <nd ref='474843' />
-    <nd ref='12889407' />
-    <nd ref='12889408' />
-    <nd ref='474844' />
-    <nd ref='474845' />
-    <nd ref='12889409' />
-    <nd ref='474846' />
-    <nd ref='474847' />
-    <nd ref='21419249' />
-    <nd ref='12889411' />
-    <nd ref='21419248' />
-    <nd ref='474848' />
-    <nd ref='474849' />
-    <nd ref='12889412' />
-    <nd ref='474850' />
-    <nd ref='12889413' />
-    <nd ref='474851' />
-    <nd ref='12889414' />
-    <nd ref='474860' />
-    <nd ref='474852' />
-    <nd ref='10908513' />
-    <nd ref='474853' />
-    <nd ref='12889416' />
-    <nd ref='29001617' />
-    <nd ref='21419422' />
-    <nd ref='254402' />
-    <nd ref='21419420' />
-    <nd ref='21419421' />
-    <nd ref='25471864' />
-    <nd ref='21419415' />
-    <nd ref='21419416' />
-    <nd ref='518815' />
-    <nd ref='21419417' />
-    <nd ref='21419418' />
-    <nd ref='21419419' />
-    <nd ref='254401' />
-    <nd ref='12889419' />
-    <nd ref='12889418' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Mansbridge Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4585182' timestamp='2007-05-12T09:40:26+01:00' user='nickw' visible='true'>
-    <nd ref='29001333' />
-    <nd ref='29001341' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pettinger Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1880955' timestamp='2006-06-20T15:55:05+01:00' visible='true'>
-    <nd ref='4931729' />
-    <nd ref='4931712' />
-    <nd ref='8084979' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Ivy Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4636159' timestamp='2007-05-22T00:19:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464291' />
-    <nd ref='29464292' />
-    <nd ref='29464293' />
-    <nd ref='29464294' />
-    <nd ref='29464296' />
-    <nd ref='29464295' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551580' timestamp='2007-05-02T00:35:37+01:00' visible='true'>
-    <nd ref='28418522' />
-    <nd ref='28418529' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Spencer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133948' timestamp='2006-12-14T13:53:17+00:00' user='David Currie' visible='true'>
-    <nd ref='21579418' />
-    <nd ref='21579420' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pilgrims Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008590' timestamp='2006-11-21T23:12:54+00:00' user='nickw' visible='true'>
-    <nd ref='21141428' />
-    <nd ref='21141436' />
-    <nd ref='21141435' />
-    <nd ref='21141434' />
-    <nd ref='21141437' />
-    <nd ref='21141381' />
-    <nd ref='21141431' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dawlish Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539957' timestamp='2007-04-29T20:37:17+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243471' />
-    <nd ref='28243473' />
-    <nd ref='28243474' />
-    <nd ref='28243475' />
-    <nd ref='28243479' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4405513' timestamp='2007-03-31T20:34:57+01:00' user='nickw' visible='true'>
-    <nd ref='26945388' />
-    <nd ref='26945389' />
-    <nd ref='26945390' />
-    <nd ref='26945391' />
-    <nd ref='26945392' />
-    <nd ref='26945393' />
-    <nd ref='26945394' />
-    <nd ref='26945395' />
-    <nd ref='26945396' />
-    <nd ref='26945397' />
-    <nd ref='26945398' />
-    <nd ref='26945399' />
-    <nd ref='26945400' />
-    <nd ref='26945401' />
-    <nd ref='26945402' />
-    <nd ref='26945403' />
-    <nd ref='26945404' />
-    <nd ref='26945405' />
-    <nd ref='26945406' />
-    <nd ref='26945407' />
-    <nd ref='26945408' />
-    <nd ref='26727700' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Shoreburs Greenway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360453' timestamp='2007-05-21T23:37:13+01:00' user='nickw' visible='true'>
-    <nd ref='26447379' />
-    <nd ref='26575768' />
-    <nd ref='26575767' />
-    <nd ref='26575765' />
-    <nd ref='26447379' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10522631' timestamp='2007-10-28T21:47:41+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90662864' />
-    <nd ref='90662865' />
-    <nd ref='90662866' />
-    <nd ref='90662867' />
-    <nd ref='90662868' />
-    <nd ref='90662864' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='1261273' timestamp='2007-05-16T14:22:27+01:00' user='jonnyswerve' visible='true'>
-    <nd ref='15028816' />
-    <nd ref='254540' />
-    <nd ref='15028817' />
-    <nd ref='15028818' />
-    <nd ref='27467558' />
-    <nd ref='15028821' />
-    <nd ref='254541' />
-    <nd ref='15028820' />
-    <nd ref='254542' />
-    <nd ref='15028819' />
-    <nd ref='254543' />
-    <nd ref='29133583' />
-    <nd ref='254544' />
-    <nd ref='254545' />
-    <nd ref='675881' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodmill Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4678355' timestamp='2007-05-28T14:58:11+01:00' visible='true'>
-    <nd ref='29711912' />
-    <nd ref='29711865' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4310885' timestamp='2007-02-23T21:48:25+00:00' user='nickw' visible='true'>
-    <nd ref='8596782' />
-    <nd ref='26114357' />
-    <nd ref='26782574' />
-    <nd ref='26114356' />
-    <nd ref='26782576' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Northam Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079315' timestamp='2006-12-18T21:41:10+00:00' user='nickw' visible='true'>
-    <nd ref='21615432' />
-    <nd ref='21636927' />
-    <nd ref='21636928' />
-    <nd ref='21636929' />
-    <nd ref='21636930' />
-    <nd ref='21615430' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mandela Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10518866' timestamp='2007-10-28T20:51:33+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='33718197' />
-    <nd ref='33718198' />
-    <nd ref='33718199' />
-    <nd ref='33718200' />
-    <nd ref='33718201' />
-    <nd ref='33718202' />
-    <nd ref='33718203' />
-    <nd ref='33718204' />
-    <nd ref='33718197' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Palm Road' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4077041' timestamp='2006-12-16T10:14:13+00:00' user='nickw' visible='true'>
-    <nd ref='21600503' />
-    <nd ref='21600421' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lemon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556489' timestamp='2007-10-29T08:10:31+00:00' user='nickw' visible='true'>
-    <nd ref='91117381' />
-    <nd ref='91118186' />
-    <nd ref='28372785' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701931' timestamp='2007-06-03T16:02:36+01:00' visible='true'>
-    <nd ref='29914197' />
-    <nd ref='29914251' />
-    <nd ref='29913886' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151455' timestamp='2007-06-03T16:22:57+01:00' visible='true'>
-    <nd ref='29914402' />
-    <nd ref='29913613' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sovereign Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092437' timestamp='2007-10-29T16:25:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='17721082' />
-    <nd ref='254684' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Romsey Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3186100' timestamp='2006-09-11T20:18:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15359695' />
-    <nd ref='15359726' />
-    <tag k='highway' v='pedestrian' />
-    <tag k='abutters' v='retail' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3651050' timestamp='2006-10-11T19:37:01+01:00' user='nickw' visible='true'>
-    <nd ref='18101129' />
-    <nd ref='18101131' />
-    <nd ref='18101133' />
-    <nd ref='18101134' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ordnance Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211072' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949973' />
-    <nd ref='24949972' />
-    <nd ref='24949971' />
-    <nd ref='24949820' />
-    <nd ref='24949970' />
-    <nd ref='24949969' />
-    <nd ref='24949968' />
-    <nd ref='24949967' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Merrieleas Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2352112' timestamp='2007-12-10T21:04:59+00:00' user='sladen' visible='true'>
-    <nd ref='10222216' />
-    <nd ref='160295476' />
-    <nd ref='160293174' />
-    <nd ref='160293176' />
-    <nd ref='10222217' />
-    <nd ref='10222218' />
-    <nd ref='15739310' />
-    <nd ref='160297672' />
-    <nd ref='10222220' />
-    <nd ref='160298241' />
-    <nd ref='160291204' />
-    <nd ref='10222221' />
-    <nd ref='10222229' />
-    <nd ref='160290439' />
-    <nd ref='10222226' />
-    <nd ref='160362613' />
-    <nd ref='10222225' />
-    <nd ref='160362616' />
-    <nd ref='10222223' />
-    <nd ref='10222222' />
-    <nd ref='160358555' />
-    <nd ref='160363014' />
-    <nd ref='269417' />
-    <nd ref='160359286' />
-    <nd ref='16570732' />
-    <nd ref='269418' />
-    <nd ref='2773938' />
-    <nd ref='160373993' />
-    <nd ref='16570753' />
-    <nd ref='2773931' />
-    <nd ref='160372952' />
-    <nd ref='2773926' />
-    <nd ref='160377031' />
-    <nd ref='160377032' />
-    <nd ref='160377034' />
-    <nd ref='160377036' />
-    <nd ref='160377636' />
-    <nd ref='160377637' />
-    <nd ref='2773923' />
-    <nd ref='2773918' />
-    <nd ref='2773393' />
-    <nd ref='28382723' />
-    <nd ref='2773382' />
-    <nd ref='160392578' />
-    <nd ref='160388163' />
-    <nd ref='2773069' />
-    <nd ref='160387797' />
-    <nd ref='160387798' />
-    <nd ref='160387799' />
-    <nd ref='160387800' />
-    <nd ref='2773401' />
-    <nd ref='10222184' />
-    <nd ref='160402232' />
-    <nd ref='160402234' />
-    <nd ref='10222185' />
-    <nd ref='160402235' />
-    <nd ref='160402236' />
-    <nd ref='10222187' />
-    <nd ref='10222203' />
-    <nd ref='10222189' />
-    <nd ref='10222190' />
-    <nd ref='122316854' />
-    <nd ref='25675771' />
-    <nd ref='469877' />
-    <nd ref='254613' />
-    <nd ref='10222191' />
-    <nd ref='160417538' />
-    <nd ref='10222201' />
-    <nd ref='160417540' />
-    <nd ref='10222192' />
-    <nd ref='160416571' />
-    <nd ref='160418074' />
-    <nd ref='160416572' />
-    <nd ref='10222193' />
-    <nd ref='10222194' />
-    <nd ref='160418739' />
-    <nd ref='25675769' />
-    <nd ref='160420928' />
-    <nd ref='10222195' />
-    <nd ref='10222196' />
-    <nd ref='10222199' />
-    <nd ref='10222197' />
-    <nd ref='10222198' />
-    <nd ref='20971218' />
-    <nd ref='20971219' />
-    <nd ref='14744292' />
-    <nd ref='14744291' />
-    <nd ref='14744289' />
-    <nd ref='14744288' />
-    <nd ref='14744287' />
-    <nd ref='14744286' />
-    <nd ref='8596749' />
-    <tag k='horse' v='yes' />
-    <tag k='oneway' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703216' timestamp='2007-06-03T20:17:27+01:00' visible='true'>
-    <nd ref='29924613' />
-    <nd ref='29924614' />
-    <nd ref='29924351' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1686' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319640' />
-    <nd ref='319641' />
-    <nd ref='319642' />
-    <nd ref='319643' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Alma Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4235066' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='25282107' />
-    <nd ref='25282120' />
-    <nd ref='25282121' />
-    <nd ref='25282122' />
-    <nd ref='25282123' />
-    <nd ref='25282124' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009865' timestamp='2006-11-22T18:19:05+00:00' user='southglos' visible='true'>
-    <nd ref='305224' />
-    <nd ref='21178477' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386799' timestamp='2007-03-25T18:42:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781148' />
-    <nd ref='26781155' />
-    <nd ref='21624987' />
-    <nd ref='26781154' />
-    <nd ref='26727674' />
-    <nd ref='26781153' />
-    <nd ref='26781152' />
-    <nd ref='26781151' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Poole Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536148' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179488' />
-    <nd ref='28179489' />
-    <nd ref='28179490' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Chilworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854807' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071201' />
-    <nd ref='13071213' />
-    <nd ref='13071209' />
-    <nd ref='13071210' />
-    <nd ref='13071211' />
-    <nd ref='13071212' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Midanbury Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724195' timestamp='2007-12-08T20:11:11+00:00' user='nickw' visible='true'>
-    <nd ref='157204119' />
-    <nd ref='157204122' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tangmere Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578262' timestamp='2007-05-28T19:40:00+01:00' visible='true'>
-    <nd ref='17721022' />
-    <nd ref='17721023' />
-    <nd ref='17721024' />
-    <nd ref='17721025' />
-    <nd ref='29548706' />
-    <nd ref='17721026' />
-    <nd ref='17721027' />
-    <nd ref='17721028' />
-    <nd ref='25340628' />
-    <nd ref='17721029' />
-    <nd ref='17721030' />
-    <nd ref='17721031' />
-    <nd ref='29730530' />
-    <nd ref='17721032' />
-    <nd ref='17721033' />
-    <nd ref='17721034' />
-    <nd ref='29730504' />
-    <nd ref='25296612' />
-    <nd ref='254676' />
-    <tag k='ref' v='C351' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Passfield Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585121' timestamp='2007-05-12T09:26:10+01:00' user='nickw' visible='true'>
-    <nd ref='29000487' />
-    <nd ref='29000489' />
-    <nd ref='29000488' />
-    <nd ref='28848616' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arlott Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639642' timestamp='2006-06-01T09:52:38+01:00' user='nickw' visible='true'>
-    <nd ref='325688' />
-    <nd ref='325689' />
-    <nd ref='325690' />
-    <nd ref='325691' />
-    <nd ref='325692' />
-    <nd ref='325693' />
-    <nd ref='325694' />
-    <nd ref='325695' />
-    <nd ref='330489' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cemetery Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3906605' timestamp='2006-10-27T22:49:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='474654' />
-    <nd ref='15028853' />
-    <nd ref='20107355' />
-    <nd ref='474655' />
-    <nd ref='474841' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C194' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150623' timestamp='2007-05-28T11:06:41+01:00' visible='true'>
-    <nd ref='29704962' />
-    <nd ref='29512252' />
-    <nd ref='29512658' />
-    <nd ref='29512662' />
-    <nd ref='29512665' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Ruskin Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539987' timestamp='2007-04-29T20:37:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243651' />
-    <nd ref='28243675' />
-    <nd ref='28243677' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Undercliff Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148502' timestamp='2007-04-29T20:03:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240324' />
-    <nd ref='28240323' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vokes Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152675' timestamp='2007-06-17T22:30:36+01:00' visible='true'>
-    <nd ref='30510885' />
-    <nd ref='30411002' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2148054' timestamp='2006-07-01T04:01:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='673877' />
-    <nd ref='673878' />
-    <nd ref='673876' />
-    <nd ref='673879' />
-    <nd ref='530517' />
-    <nd ref='530518' />
-    <nd ref='530519' />
-    <nd ref='530520' />
-    <nd ref='530521' />
-    <nd ref='530522' />
-    <nd ref='530523' />
-    <nd ref='673877' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999143' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971176' />
-    <nd ref='20971191' />
-    <nd ref='20971181' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='the local CC have the amazing ability to forget road signs around here...' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151906' timestamp='2007-06-08T18:12:32+01:00' visible='true'>
-    <nd ref='30089048' />
-    <nd ref='30089050' />
-    <nd ref='30089053' />
-    <nd ref='30089059' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119861' timestamp='2006-06-04T00:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='329467' />
-    <nd ref='247807' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upper Shaftesbury Avenue' />
-  </way>
-  <way id='4379654' timestamp='2007-03-23T22:53:34+00:00' user='nickw' visible='true'>
-    <nd ref='26781151' />
-    <nd ref='26727672' />
-    <nd ref='26728546' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ludlow Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061538' timestamp='2007-10-30T16:04:03+00:00' user='Dean Earley' visible='true'>
-    <nd ref='423279' />
-    <nd ref='423277' />
-    <nd ref='423275' />
-    <nd ref='21507766' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Honeysuckle Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4280394' timestamp='2007-02-11T18:07:24+00:00' user='nickw' visible='true'>
-    <nd ref='25783087' />
-    <nd ref='25783088' />
-    <nd ref='25783089' />
-    <nd ref='25783090' />
-    <nd ref='25783091' />
-    <nd ref='25783096' />
-    <nd ref='25783097' />
-    <nd ref='25783098' />
-    <nd ref='25783099' />
-    <nd ref='25783100' />
-    <nd ref='25783101' />
-    <nd ref='25783102' />
-    <nd ref='25783103' />
-    <nd ref='25783104' />
-    <nd ref='25783105' />
-    <nd ref='25783106' />
-    <nd ref='25783107' />
-    <nd ref='25783111' />
-    <nd ref='25783112' />
-    <nd ref='25783113' />
-    <nd ref='25783114' />
-    <nd ref='25783115' />
-    <nd ref='25783116' />
-    <nd ref='25783117' />
-    <nd ref='25783118' />
-    <nd ref='25783119' />
-    <nd ref='25783120' />
-    <nd ref='25783121' />
-    <nd ref='25783122' />
-    <nd ref='25783123' />
-    <nd ref='25783124' />
-    <nd ref='25783125' />
-    <nd ref='25783126' />
-    <nd ref='25783127' />
-    <nd ref='25783128' />
-    <nd ref='25783129' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3879899' timestamp='2007-10-17T01:00:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14726558' />
-    <nd ref='254537' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4540305' timestamp='2007-04-29T21:09:42+01:00' visible='true'>
-    <nd ref='28194351' />
-    <nd ref='28194352' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Osprey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725427' timestamp='2007-12-08T20:23:18+00:00' user='nickw' visible='true'>
-    <nd ref='157222321' />
-    <nd ref='157222323' />
-    <nd ref='157222326' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Matheson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061525' timestamp='2006-12-09T09:51:50+00:00' user='nickw' visible='true'>
-    <nd ref='21507745' />
-    <nd ref='21507746' />
-    <nd ref='21507747' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Roselands Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546498' timestamp='2007-04-30T23:36:53+01:00' user='nickw' visible='true'>
-    <nd ref='28347588' />
-    <nd ref='28345050' />
-    <nd ref='28347579' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hazelwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801685' timestamp='2008-02-03T06:16:39+00:00' user='sladen' visible='true'>
-    <nd ref='14743184' />
-    <nd ref='245150657' />
-    <nd ref='245150658' />
-    <nd ref='245150659' />
-    <nd ref='657800' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Commercial Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8152534' timestamp='2007-06-16T16:26:34+01:00' visible='true'>
-    <nd ref='30431951' />
-    <nd ref='30431955' />
-    <nd ref='30431959' />
-    <nd ref='30432001' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Yonge Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569968' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true'>
-    <nd ref='28830625' />
-    <nd ref='28830626' />
-    <nd ref='28830627' />
-    <nd ref='28830628' />
-    <nd ref='28830629' />
-    <nd ref='28830630' />
-    <nd ref='28830569' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brentwood Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077267' timestamp='2007-10-04T19:37:51+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='21613480' />
-    <nd ref='21613479' />
-    <nd ref='21613478' />
-    <nd ref='21613477' />
-    <nd ref='21613476' />
-    <nd ref='21613475' />
-    <nd ref='21613474' />
-    <nd ref='21613473' />
-    <nd ref='21613472' />
-    <nd ref='21613471' />
-    <nd ref='21613470' />
-    <nd ref='21613469' />
-    <nd ref='24924337' />
-    <nd ref='21613468' />
-    <nd ref='21613467' />
-    <nd ref='21613466' />
-    <nd ref='21613465' />
-    <nd ref='21613458' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='24' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8150631' timestamp='2007-10-16T02:43:32+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29707331' />
-    <nd ref='29912985' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broom Hill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540757' timestamp='2007-06-02T19:30:45+01:00' visible='true'>
-    <nd ref='28249963' />
-    <nd ref='28249970' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mottisfont Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536152' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179500' />
-    <nd ref='28179501' />
-    <nd ref='28179502' />
-    <nd ref='28179504' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hutwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3285' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true'>
-    <nd ref='700502' />
-    <nd ref='700501' />
-    <nd ref='700507' />
-    <nd ref='675837' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Wellington Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8119873' timestamp='2006-06-04T00:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='324341' />
-    <nd ref='329464' />
-    <nd ref='324340' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Gordon Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3186091' timestamp='2006-09-11T20:17:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15359691' />
-    <nd ref='15359707' />
-    <nd ref='15359708' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mitchell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='14506056' timestamp='2007-11-29T22:31:13+00:00' user='nickw' visible='true'>
-    <nd ref='142620773' />
-    <nd ref='142620775' />
-    <nd ref='142620780' />
-    <nd ref='142620785' />
-    <nd ref='12594901' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854822' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071335' />
-    <nd ref='13071372' />
-    <nd ref='13071357' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Huntly Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079288' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636761' />
-    <nd ref='21636766' />
-    <nd ref='21636767' />
-    <nd ref='21636768' />
-    <nd ref='21636769' />
-    <nd ref='21636770' />
-    <nd ref='21636771' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211068' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949985' />
-    <nd ref='24949812' />
-    <nd ref='24949842' />
-    <nd ref='24949843' />
-    <nd ref='24949835' />
-    <nd ref='24949875' />
-    <nd ref='24949876' />
-    <nd ref='24949877' />
-    <nd ref='24949878' />
-    <nd ref='24949879' />
-    <nd ref='24949963' />
-    <nd ref='24949964' />
-    <nd ref='24949965' />
-    <nd ref='24949966' />
-    <nd ref='24949967' />
-    <nd ref='24949988' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brownhill Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854829' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071374' />
-    <nd ref='13071377' />
-    <nd ref='13071378' />
-    <nd ref='13071379' />
-    <nd ref='13071380' />
-    <nd ref='13071381' />
-    <nd ref='13105009' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rosyth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636152' timestamp='2007-10-17T00:35:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14728163' />
-    <nd ref='29464261' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Horder Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4642614' timestamp='2007-10-16T02:44:20+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29535463' />
-    <nd ref='29710867' />
-    <nd ref='29911798' />
-    <nd ref='29530515' />
-    <nd ref='29530516' />
-    <nd ref='29530517' />
-    <nd ref='29530518' />
-    <nd ref='29815416' />
-    <nd ref='29530519' />
-    <nd ref='29530520' />
-    <nd ref='29703872' />
-    <nd ref='29530521' />
-    <nd ref='29703873' />
-    <nd ref='29815441' />
-    <nd ref='29530523' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Allbrook Knoll' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589174' timestamp='2007-05-13T10:11:09+01:00' user='nickw' visible='true'>
-    <nd ref='29026819' />
-    <nd ref='29026820' />
-    <nd ref='29026662' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Highcliff Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540323' timestamp='2007-04-29T21:09:50+01:00' visible='true'>
-    <nd ref='28194391' />
-    <nd ref='28194392' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kestrel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2144107' timestamp='2007-10-16T19:19:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9266208' />
-    <nd ref='9266206' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='width' v='4' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4749601' timestamp='2007-10-04T19:38:25+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='30089086' />
-    <nd ref='30290713' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='tunnel' v='yes' />
-    <tag k='ncn_ref' v='24' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='layer' v='-1' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150670' timestamp='2007-05-28T19:39:25+01:00' visible='true'>
-    <nd ref='29728887' />
-    <nd ref='29728896' />
-    <nd ref='17721059' />
-    <nd ref='29728910' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703320' timestamp='2007-06-03T20:45:03+01:00' visible='true'>
-    <nd ref='29925339' />
-    <nd ref='29925628' />
-    <nd ref='29925630' />
-    <nd ref='29925629' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pembroke Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148798' timestamp='2007-05-26T20:16:32+01:00' visible='true'>
-    <nd ref='28339157' />
-    <nd ref='28339156' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Hoddinot Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536217' timestamp='2007-12-07T13:29:12+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180216' />
-    <nd ref='28180217' />
-    <nd ref='28180215' />
-    <nd ref='28180219' />
-    <nd ref='28180220' />
-    <nd ref='28180221' />
-    <nd ref='28180222' />
-    <nd ref='28180223' />
-    <nd ref='28180220' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Enterprise Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4546235' timestamp='2007-04-30T22:24:08+01:00' user='nickw' visible='true'>
-    <nd ref='28343217' />
-    <nd ref='28343220' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150395' timestamp='2007-06-30T12:32:07+01:00' visible='true'>
-    <nd ref='29621205' />
-    <nd ref='29621203' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8126952' timestamp='2006-09-11T20:17:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15359707' />
-    <nd ref='15359709' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mitchell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9660171' timestamp='2007-10-16T20:09:32+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14744294' />
-    <nd ref='14744296' />
-    <nd ref='14744293' />
-    <nd ref='14743115' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5041394' timestamp='2007-12-06T20:40:09+00:00' user='nickw' visible='true'>
-    <nd ref='21092042' />
-    <nd ref='33718259' />
-    <nd ref='33718203' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Alder Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4536669' timestamp='2007-04-29T08:34:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194512' />
-    <nd ref='28194514' />
-    <nd ref='28194509' />
-    <nd ref='28194511' />
-    <nd ref='28194512' />
-    <nd ref='28194508' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10522344' timestamp='2007-11-29T15:23:16+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90659198' />
-    <nd ref='90659200' />
-    <nd ref='90659202' />
-    <nd ref='90659203' />
-    <nd ref='90659204' />
-    <nd ref='90659205' />
-    <nd ref='90659207' />
-    <nd ref='90659209' />
-    <nd ref='90659210' />
-    <nd ref='90659211' />
-    <nd ref='90659213' />
-    <nd ref='90659215' />
-    <nd ref='90659216' />
-    <nd ref='90659217' />
-    <nd ref='90659219' />
-    <nd ref='90659220' />
-    <nd ref='90659222' />
-    <nd ref='90659223' />
-    <nd ref='90659224' />
-    <nd ref='90659225' />
-    <nd ref='90659228' />
-    <nd ref='90659229' />
-    <nd ref='90659230' />
-    <nd ref='90659231' />
-    <nd ref='90659232' />
-    <nd ref='90659234' />
-    <nd ref='90659235' />
-    <nd ref='90659236' />
-    <nd ref='90659238' />
-    <nd ref='90659239' />
-    <nd ref='90659241' />
-    <nd ref='90659243' />
-    <nd ref='90659244' />
-    <nd ref='126067695' />
-    <nd ref='90659198' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='West Quay Shopping Centre' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='3677097' timestamp='2006-10-14T13:19:13+01:00' user='nickw' visible='true'>
-    <nd ref='18232089' />
-    <nd ref='18232095' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558181' timestamp='2007-10-29T08:19:16+00:00' user='nickw' visible='true'>
-    <nd ref='28583006' />
-    <nd ref='28583024' />
-    <nd ref='28583026' />
-    <nd ref='28583087' />
-    <nd ref='28583031' />
-    <nd ref='28583033' />
-    <nd ref='28583023' />
-    <nd ref='28583079' />
-    <nd ref='28583081' />
-    <nd ref='91127620' />
-    <nd ref='28583082' />
-    <nd ref='325665' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Springford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077067' timestamp='2006-12-16T11:37:36+00:00' user='David Currie' visible='true'>
-    <nd ref='19111050' />
-    <nd ref='24949991' />
-    <nd ref='24924325' />
-    <nd ref='254737' />
-    <nd ref='19111038' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Bournemouth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4608534' timestamp='2007-05-16T23:48:04+01:00' user='nickw' visible='true'>
-    <nd ref='29171759' />
-    <nd ref='29171760' />
-    <nd ref='29171743' />
-    <nd ref='29171744' />
-    <nd ref='29171745' />
-    <nd ref='29171746' />
-    <nd ref='29171747' />
-    <nd ref='29171748' />
-    <nd ref='29171749' />
-    <nd ref='29171750' />
-    <nd ref='29171751' />
-    <nd ref='29171752' />
-    <nd ref='29171753' />
-    <nd ref='29171754' />
-    <nd ref='29171755' />
-    <nd ref='29171756' />
-    <nd ref='29171757' />
-    <nd ref='29171758' />
-    <nd ref='29171759' />
-    <tag k='leisure' v='park' />
-    <tag k='name' v='Daisy Dip' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152671' timestamp='2007-06-17T22:25:19+01:00' visible='true'>
-    <nd ref='29929005' />
-    <nd ref='29929007' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parham Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540344' timestamp='2007-04-29T21:10:01+01:00' visible='true'>
-    <nd ref='28194440' />
-    <nd ref='28194441' />
-    <nd ref='28194443' />
-    <nd ref='28194444' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sheldrake Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818227' timestamp='2007-06-26T23:45:21+01:00' user='nickw' visible='true'>
-    <nd ref='30956633' />
-    <nd ref='30956634' />
-    <nd ref='30956635' />
-    <nd ref='30956636' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wessex Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074117' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561520' />
-    <nd ref='21561565' />
-    <nd ref='21561566' />
-    <nd ref='21561567' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Church Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743097' timestamp='2007-06-11T22:07:24+01:00' visible='true'>
-    <nd ref='30224501' />
-    <nd ref='30224269' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639638' timestamp='2007-05-12T09:32:01+01:00' user='nickw' visible='true'>
-    <nd ref='422968' />
-    <nd ref='29000944' />
-    <nd ref='29000955' />
-    <nd ref='422967' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hulse Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546484' timestamp='2007-04-30T23:26:43+01:00' user='nickw' visible='true'>
-    <nd ref='28345028' />
-    <nd ref='28346977' />
-    <nd ref='28346978' />
-    <nd ref='28346979' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124843' timestamp='2007-07-30T16:07:03+01:00' visible='true'>
-    <nd ref='254527' />
-    <nd ref='33130199' />
-    <nd ref='12594769' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Archers Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='22801734' timestamp='2008-02-03T06:25:23+00:00' user='sladen' visible='true'>
-    <nd ref='245153986' />
-    <nd ref='245153987' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='tunnel' v='yes' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4235056' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282089' />
-    <nd ref='25282094' />
-    <nd ref='25282095' />
-    <nd ref='25282096' />
-    <nd ref='25282097' />
-    <nd ref='25282098' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='York Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586164' timestamp='2007-05-12T15:28:46+01:00' user='nickw' visible='true'>
-    <nd ref='29008943' />
-    <nd ref='29009023' />
-    <nd ref='29009024' />
-    <nd ref='29009025' />
-    <nd ref='29008448' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kenwyn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4747337' timestamp='2007-06-12T20:14:40+01:00' visible='true'>
-    <nd ref='30255629' />
-    <nd ref='30255970' />
-    <nd ref='30255971' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bramble Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4329575' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346851' />
-    <nd ref='8596773' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chessel Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574127' timestamp='2007-05-08T14:51:03+01:00' visible='true'>
-    <nd ref='28874072' />
-    <nd ref='28874076' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Linden Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636303' timestamp='2007-05-22T00:39:12+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28932431' />
-    <nd ref='29466086' />
-    <nd ref='29466087' />
-    <nd ref='29466088' />
-    <nd ref='29466089' />
-    <nd ref='29466090' />
-    <nd ref='29466106' />
-    <nd ref='29466107' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996464' timestamp='2006-11-10T08:43:44+00:00' user='nickw' visible='true'>
-    <nd ref='388878' />
-    <nd ref='388879' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580490' timestamp='2007-05-11T00:51:27+01:00' visible='true'>
-    <nd ref='28935758' />
-    <nd ref='28935759' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800933' timestamp='2008-02-03T06:11:44+00:00' user='sladen' visible='true'>
-    <nd ref='245149561' />
-    <nd ref='245149626' />
-    <nd ref='245149627' />
-    <nd ref='254444' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='2859061' timestamp='2006-08-11T09:58:59+01:00' user='80n' visible='true'>
-    <nd ref='14765932' />
-    <nd ref='254748' />
-    <nd ref='14745489' />
-    <nd ref='14745490' />
-    <nd ref='14745491' />
-    <nd ref='14745493' />
-    <nd ref='298276' />
-    <nd ref='298275' />
-    <nd ref='298274' />
-    <nd ref='298273' />
-    <nd ref='298272' />
-    <nd ref='298271' />
-    <nd ref='298259' />
-    <nd ref='298257' />
-    <nd ref='298256' />
-    <nd ref='17721015' />
-    <nd ref='298254' />
-    <nd ref='298252' />
-    <nd ref='298250' />
-    <nd ref='298249' />
-    <nd ref='17723035' />
-    <nd ref='298248' />
-    <nd ref='305227' />
-    <nd ref='298246' />
-    <tag k='oneway' v='true' />
-    <tag k='ref' v='M3' />
-    <tag k='highway' v='motorway' />
-    <tag k='name' v='M3 Northbound' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947655' timestamp='2007-09-10T23:55:23+01:00' visible='true'>
-    <nd ref='48958660' />
-    <nd ref='48958664' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='10155309' timestamp='2008-01-26T21:23:15+00:00' user='stuphi' visible='true'>
-    <nd ref='271049' />
-    <nd ref='15657683' />
-    <nd ref='160179633' />
-    <nd ref='160179634' />
-    <nd ref='15657684' />
-    <nd ref='160206566' />
-    <nd ref='160179635' />
-    <nd ref='15657685' />
-    <nd ref='160179638' />
-    <nd ref='15657686' />
-    <nd ref='160179639' />
-    <nd ref='160179640' />
-    <nd ref='15657687' />
-    <nd ref='15657688' />
-    <nd ref='15657689' />
-    <nd ref='160180234' />
-    <nd ref='160180355' />
-    <nd ref='160183633' />
-    <nd ref='15657690' />
-    <nd ref='160183635' />
-    <nd ref='15657691' />
-    <nd ref='160183637' />
-    <nd ref='15657692' />
-    <nd ref='160183639' />
-    <nd ref='160183640' />
-    <nd ref='15657693' />
-    <nd ref='160183641' />
-    <nd ref='160183643' />
-    <nd ref='160183644' />
-    <nd ref='15657694' />
-    <nd ref='160183646' />
-    <nd ref='160183647' />
-    <nd ref='87851393' />
-    <nd ref='160183650' />
-    <nd ref='87851394' />
-    <nd ref='160183652' />
-    <nd ref='15657695' />
-    <nd ref='160183654' />
-    <nd ref='160183656' />
-    <nd ref='608192' />
-    <tag k='railway' v='rail' />
-    <tag k='name' v='West Coastway Line' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='9660161' timestamp='2007-10-16T20:09:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254695' />
-    <nd ref='25305487' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4211085' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24949997' />
-    <nd ref='24949996' />
-    <nd ref='24949995' />
-    <nd ref='24949994' />
-    <nd ref='24949993' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Electron Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150619' timestamp='2007-06-03T20:10:49+01:00' visible='true'>
-    <nd ref='29704343' />
-    <nd ref='29704342' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Bosville' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556418' timestamp='2007-10-29T08:07:22+00:00' user='nickw' visible='true'>
-    <nd ref='91115450' />
-    <nd ref='91115459' />
-    <nd ref='91115461' />
-    <nd ref='91115464' />
-    <nd ref='91115452' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arliss Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120214' timestamp='2007-09-20T19:40:27+01:00' user='mike l' visible='true'>
-    <nd ref='30161981' />
-    <nd ref='30161983' />
-    <nd ref='30161984' />
-    <nd ref='30161986' />
-    <nd ref='30161988' />
-    <nd ref='30161990' />
-    <nd ref='30161992' />
-    <nd ref='305636' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='railway' v='rail' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4079292' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636782' />
-    <nd ref='21636783' />
-    <nd ref='21636784' />
-    <nd ref='21636726' />
-    <nd ref='21636785' />
-    <nd ref='21636786' />
-    <nd ref='21636790' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Dale' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126608' timestamp='2007-10-16T17:59:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='17504824' />
-    <nd ref='25896247' />
-    <nd ref='25896244' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3806003' timestamp='2006-10-22T10:18:19+01:00' user='nickw' visible='true'>
-    <nd ref='19035797' />
-    <nd ref='19035792' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819504' timestamp='2007-05-22T00:20:34+01:00' user='Dean Earley' visible='true'>
-    <nd ref='19227221' />
-    <nd ref='19229538' />
-    <nd ref='19229535' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sherwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998221' timestamp='2007-09-13T21:15:56+01:00' user='mike l' visible='true'>
-    <nd ref='271232' />
-    <nd ref='50800659' />
-    <nd ref='18348691' />
-    <tag k='highway' v='unclassified' />
-    <tag k='source' v='npe' />
-    <tag k='name' v='Nutburn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546551' timestamp='2007-04-30T23:48:52+01:00' user='nickw' visible='true'>
-    <nd ref='28348305' />
-    <nd ref='28348320' />
-    <nd ref='28348322' />
-    <nd ref='28345026' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Benhams Farm Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152330' timestamp='2007-10-29T15:43:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='24924289' />
-    <nd ref='30290778' />
-    <nd ref='30290775' />
-    <nd ref='30290774' />
-    <nd ref='30290773' />
-    <nd ref='30290777' />
-    <nd ref='24924289' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546510' timestamp='2007-04-30T23:40:11+01:00' user='nickw' visible='true'>
-    <nd ref='28347765' />
-    <nd ref='28347766' />
-    <nd ref='28347767' />
-    <nd ref='28347768' />
-    <nd ref='28347769' />
-    <nd ref='28347770' />
-    <nd ref='28345069' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pinefield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3981720' timestamp='2006-10-31T22:26:05+00:00' user='nickw' visible='true'>
-    <nd ref='20698068' />
-    <nd ref='20698069' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Scullards Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558162' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582922' />
-    <nd ref='28582920' />
-    <nd ref='28582919' />
-    <nd ref='28582917' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Taranto Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585268' timestamp='2007-05-22T00:20:33+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29003033' />
-    <nd ref='29003034' />
-    <nd ref='29003035' />
-    <nd ref='29003037' />
-    <nd ref='29003038' />
-    <nd ref='29003039' />
-    <nd ref='29003236' />
-    <nd ref='29003040' />
-    <nd ref='29003038' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chetwynd Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269326' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='9727814' />
-    <nd ref='25639997' />
-    <nd ref='25639998' />
-    <nd ref='25639999' />
-    <nd ref='25640000' />
-    <nd ref='25640001' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Braeside Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8162995' timestamp='2007-10-16T17:47:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14957841' />
-    <nd ref='29466069' />
-    <nd ref='29466068' />
-    <nd ref='28246071' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8152183' timestamp='2007-10-16T02:43:48+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29711869' />
-    <nd ref='29711870' />
-    <nd ref='29711871' />
-    <nd ref='29711872' />
-    <nd ref='29711873' />
-    <nd ref='29711874' />
-    <nd ref='29711875' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Penshurst Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='186' timestamp='2008-02-03T06:11:31+00:00' user='sladen' visible='true'>
-    <nd ref='254444' />
-    <nd ref='635141' />
-    <nd ref='48958647' />
-    <nd ref='20971166' />
-    <nd ref='635142' />
-    <nd ref='20971165' />
-    <nd ref='245148868' />
-    <nd ref='20971159' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Palmerston Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1639688' timestamp='2008-02-03T06:00:04+00:00' user='sladen' visible='true'>
-    <nd ref='14727949' />
-    <nd ref='254366' />
-    <nd ref='14727983' />
-    <tag k='horse' v='yes' />
-    <tag k='oneway' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='The Avenue' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2920962' timestamp='2006-08-15T12:14:36+01:00' user='nickw' visible='true'>
-    <nd ref='13564677' />
-    <nd ref='13564678' />
-    <nd ref='13564679' />
-    <nd ref='13564702' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='3431518' timestamp='2007-05-15T20:47:47+01:00' user='nickw' visible='true'>
-    <nd ref='16963763' />
-    <nd ref='16963764' />
-    <nd ref='29003045' />
-    <nd ref='16963765' />
-    <nd ref='27021766' />
-    <nd ref='29134123' />
-    <nd ref='16963766' />
-    <nd ref='27021767' />
-    <nd ref='29134131' />
-    <nd ref='16963767' />
-    <nd ref='27021768' />
-    <nd ref='16963768' />
-    <nd ref='14744408' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Crescent East' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269334' timestamp='2007-02-04T22:51:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640035' />
-    <nd ref='25640036' />
-    <nd ref='25640037' />
-    <nd ref='25640038' />
-    <nd ref='25640039' />
-    <nd ref='25640040' />
-    <nd ref='25640041' />
-    <nd ref='25640042' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Angel Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536331' timestamp='2007-04-29T02:31:54+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21636776' />
-    <nd ref='28183746' />
-    <nd ref='28183748' />
-    <nd ref='28183751' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209554' timestamp='2007-01-06T14:38:29+00:00' user='nickw' visible='true'>
-    <nd ref='24924221' />
-    <nd ref='24924219' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541329' timestamp='2007-04-29T22:57:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='18500678' />
-    <nd ref='28257900' />
-    <nd ref='28244220' />
-    <nd ref='28257902' />
-    <nd ref='28257903' />
-    <nd ref='28257904' />
-    <nd ref='661166' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chapel Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4717656' timestamp='2008-01-04T19:34:28+00:00' user='nickw' visible='true'>
-    <nd ref='29838720' />
-    <nd ref='29838718' />
-    <nd ref='29838715' />
-    <nd ref='29838712' />
-    <nd ref='29838708' />
-    <nd ref='206163274' />
-    <nd ref='29838701' />
-    <nd ref='29838696' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Red Lodge' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604560' timestamp='2007-05-15T20:53:19+01:00' user='nickw' visible='true'>
-    <nd ref='29134819' />
-    <nd ref='29134818' />
-    <nd ref='29134820' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ventnor Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360442' timestamp='2007-03-16T21:52:43+00:00' user='nickw' visible='true'>
-    <nd ref='8596794' />
-    <nd ref='26575735' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Chapel Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948204' timestamp='2007-09-11T00:11:45+01:00' visible='true'>
-    <nd ref='48965784' />
-    <nd ref='48965785' />
-    <nd ref='48965787' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Albion Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551575' timestamp='2007-05-02T00:35:35+01:00' visible='true'>
-    <nd ref='28418335' />
-    <nd ref='28388963' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Parnel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133975' timestamp='2007-06-10T18:15:28+01:00' visible='true'>
-    <nd ref='27513796' />
-    <nd ref='27513800' />
-    <nd ref='29392359' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cranbury Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6136575' timestamp='2007-09-14T09:51:45+01:00' user='mike l' visible='true'>
-    <nd ref='50774731' />
-    <nd ref='51191284' />
-    <nd ref='50656124' />
-    <nd ref='50774737' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sinclair Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='19788403' timestamp='2008-01-04T19:29:42+00:00' user='nickw' visible='true'>
-    <nd ref='206162094' />
-    <nd ref='206162635' />
-    <nd ref='206162636' />
-    <nd ref='206162637' />
-    <nd ref='206162638' />
-    <nd ref='206162639' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wiltshire Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3631232' timestamp='2006-10-09T23:21:07+01:00' user='nickw' visible='true'>
-    <nd ref='254533' />
-    <nd ref='9312078' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lyon Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546549' timestamp='2007-04-30T23:48:49+01:00' user='nickw' visible='true'>
-    <nd ref='28348314' />
-    <nd ref='28348312' />
-    <nd ref='28348315' />
-    <nd ref='28348311' />
-    <nd ref='28348310' />
-    <nd ref='28345065' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Onibury Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4747433' timestamp='2007-06-12T20:38:36+01:00' visible='true'>
-    <nd ref='30256894' />
-    <nd ref='30256875' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tiptree Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151443' timestamp='2007-06-03T15:54:45+01:00' visible='true'>
-    <nd ref='29913607' />
-    <nd ref='29913613' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9675172' timestamp='2007-10-17T00:02:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='596303' />
-    <nd ref='25675137' />
-    <nd ref='26727689' />
-    <nd ref='661155' />
-    <nd ref='661156' />
-    <nd ref='3915358' />
-    <nd ref='28237073' />
-    <nd ref='28237074' />
-    <nd ref='26727690' />
-    <nd ref='26945387' />
-    <nd ref='28243876' />
-    <nd ref='657727' />
-    <nd ref='657726' />
-    <nd ref='26945388' />
-    <nd ref='657725' />
-    <nd ref='596429' />
-    <nd ref='596428' />
-    <nd ref='635119' />
-    <nd ref='596302' />
-    <nd ref='2380579' />
-    <nd ref='596301' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bursledon Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4732335' timestamp='2007-06-10T18:20:08+01:00' visible='true'>
-    <nd ref='30089278' />
-    <nd ref='30089279' />
-    <nd ref='30089280' />
-    <nd ref='30089281' />
-    <nd ref='30089278' />
-    <tag k='landuse' v='recreation_ground' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558190' timestamp='2007-05-02T23:58:17+01:00' visible='true'>
-    <nd ref='28583062' />
-    <nd ref='28583063' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151941' timestamp='2007-06-08T23:30:32+01:00' visible='true'>
-    <nd ref='30096954' />
-    <nd ref='30096960' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580494' timestamp='2007-05-11T00:51:30+01:00' visible='true'>
-    <nd ref='28935767' />
-    <nd ref='28935768' />
-    <nd ref='28935770' />
-    <nd ref='28935771' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Odiham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='11968799' timestamp='2007-11-11T18:09:41+00:00' user='Dean Earley' visible='true'>
-    <nd ref='107808626' />
-    <nd ref='107808701' />
-    <nd ref='107808668' />
-    <nd ref='107808671' />
-    <nd ref='107808739' />
-    <nd ref='107808676' />
-    <nd ref='107808690' />
-    <nd ref='107808701' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556195' timestamp='2007-10-29T07:50:32+00:00' user='nickw' visible='true'>
-    <nd ref='91109271' />
-    <nd ref='91109273' />
-    <nd ref='91109276' />
-    <nd ref='91109278' />
-    <nd ref='91109280' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Seymour Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690864' timestamp='2007-05-31T21:39:03+01:00' visible='true'>
-    <nd ref='29814524' />
-    <nd ref='29815474' />
-    <nd ref='29762561' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947651' timestamp='2007-09-10T23:55:23+01:00' visible='true'>
-    <nd ref='48958627' />
-    <nd ref='48958631' />
-    <tag k='highway' v='footway' />
-    <tag k='tunnel' v='yes' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='-1' />
-  </way>
-  <way id='6243222' timestamp='2007-09-15T19:10:57+01:00' user='mike l' visible='true'>
-    <nd ref='52181337' />
-    <nd ref='52182252' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4727724' timestamp='2007-06-09T19:48:45+01:00' user='nickw' visible='true'>
-    <nd ref='30124665' />
-    <nd ref='30124666' />
-    <nd ref='30124667' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lambourne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574123' timestamp='2007-05-08T14:51:02+01:00' visible='true'>
-    <nd ref='28874053' />
-    <nd ref='28874051' />
-    <nd ref='28874048' />
-    <nd ref='28874047' />
-    <nd ref='28874046' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Palm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556769' timestamp='2007-10-29T08:21:50+00:00' user='nickw' visible='true'>
-    <nd ref='91130463' />
-    <nd ref='91130464' />
-    <nd ref='91130465' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vinery Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694198' timestamp='2007-06-01T20:53:45+01:00' visible='true'>
-    <nd ref='29839188' />
-    <nd ref='29839185' />
-    <nd ref='29839186' />
-    <nd ref='29839187' />
-    <nd ref='29839188' />
-    <tag k='leisure' v='playground' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1682' timestamp='2007-05-13T10:11:12+01:00' user='nickw' visible='true'>
-    <nd ref='306298' />
-    <nd ref='29026770' />
-    <nd ref='658423' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winn Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4762014' timestamp='2007-06-15T23:09:58+01:00' visible='true'>
-    <nd ref='30410992' />
-    <nd ref='30410993' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1663' timestamp='2006-06-04T00:38:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387823' />
-    <nd ref='387824' />
-    <nd ref='387825' />
-    <nd ref='387826' />
-    <nd ref='387827' />
-    <tag k='foot' v='unofficial' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='2859057' timestamp='2006-08-11T09:58:58+01:00' user='80n' visible='true'>
-    <nd ref='325001' />
-    <nd ref='325017' />
-    <nd ref='325018' />
-    <nd ref='325019' />
-    <nd ref='325020' />
-    <nd ref='325021' />
-    <nd ref='324975' />
-    <nd ref='324976' />
-    <nd ref='324977' />
-    <nd ref='324978' />
-    <nd ref='324979' />
-    <nd ref='324982' />
-    <nd ref='132716' />
-    <nd ref='298267' />
-    <nd ref='298266' />
-    <nd ref='298279' />
-    <nd ref='13104968' />
-    <nd ref='298274' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126864' timestamp='2006-09-08T23:08:01+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15028896' />
-    <nd ref='15028898' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upmill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9678651' timestamp='2007-10-17T01:00:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254537' />
-    <nd ref='254427' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8136291' timestamp='2007-05-16T00:37:10+01:00' visible='true'>
-    <nd ref='254698' />
-    <nd ref='9266204' />
-    <nd ref='21420435' />
-    <nd ref='9266205' />
-    <tag k='width' v='3' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150431' timestamp='2007-05-26T20:15:49+01:00' visible='true'>
-    <nd ref='29632810' />
-    <nd ref='29632811' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cedar Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726488' timestamp='2007-12-08T20:35:43+00:00' user='nickw' visible='true'>
-    <nd ref='157241440' />
-    <nd ref='157241442' />
-    <nd ref='157241446' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Logan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9652518' timestamp='2007-10-16T17:59:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254744' />
-    <nd ref='254745' />
-    <nd ref='25896253' />
-    <nd ref='25896256' />
-    <nd ref='25896255' />
-    <nd ref='254746' />
-    <nd ref='25896259' />
-    <nd ref='25896260' />
-    <nd ref='25896258' />
-    <nd ref='25896257' />
-    <nd ref='25896248' />
-    <nd ref='25896249' />
-    <nd ref='25896252' />
-    <nd ref='25896250' />
-    <nd ref='25896244' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4082113' timestamp='2006-12-20T23:57:10+00:00' user='nickw' visible='true'>
-    <nd ref='21614662' />
-    <nd ref='21661749' />
-    <nd ref='21661760' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lansdowne Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535820' timestamp='2007-10-16T17:47:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28173811' />
-    <nd ref='28173804' />
-    <nd ref='28173796' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woburn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998080' timestamp='2007-11-06T18:20:37+00:00' user='nickw' visible='true'>
-    <nd ref='18348736' />
-    <nd ref='20964038' />
-    <nd ref='20964039' />
-    <nd ref='20964040' />
-    <nd ref='20964041' />
-    <nd ref='20964042' />
-    <nd ref='20964043' />
-    <nd ref='20964044' />
-    <nd ref='20964045' />
-    <nd ref='20964046' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061529' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='21507756' />
-    <nd ref='21507752' />
-    <nd ref='21507753' />
-    <nd ref='21507754' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Highcrown Mews' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3293' timestamp='2007-08-12T23:12:04+01:00' user='Edward' visible='true'>
-    <nd ref='700510' />
-    <nd ref='700503' />
-    <tag k='foot' v='unofficial' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8137929' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640006' />
-    <nd ref='25640007' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Braeside Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120159' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true'>
-    <nd ref='675861' />
-    <nd ref='700511' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hillside Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4005413' timestamp='2007-12-10T21:00:29+00:00' user='sladen' visible='true'>
-    <nd ref='21091852' />
-    <nd ref='21091868' />
-    <nd ref='21091869' />
-    <nd ref='160412681' />
-    <nd ref='21091867' />
-    <nd ref='21091834' />
-    <nd ref='20957235' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mansion Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4475489' timestamp='2007-04-17T22:04:03+01:00' visible='true'>
-    <nd ref='27434186' />
-    <nd ref='27434187' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1681' timestamp='2006-06-11T01:09:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='307470' />
-    <nd ref='307472' />
-    <nd ref='307473' />
-    <nd ref='307474' />
-    <nd ref='387802' />
-    <nd ref='387803' />
-    <nd ref='387804' />
-    <nd ref='387805' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westbourne Crescent' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4797574' timestamp='2007-10-16T11:34:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='30780714' />
-    <nd ref='30780798' />
-    <nd ref='30780720' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148378' timestamp='2007-12-07T13:29:16+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180215' />
-    <nd ref='28180213' />
-    <nd ref='28180211' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Enterprise Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='2246826' timestamp='2006-07-05T00:16:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726301' />
-    <nd ref='9726307' />
-    <nd ref='20966370' />
-    <nd ref='9280992' />
-    <nd ref='9280991' />
-    <nd ref='13071369' />
-    <nd ref='9280990' />
-    <nd ref='9280989' />
-    <nd ref='13071334' />
-    <nd ref='9280988' />
-    <nd ref='9280987' />
-    <nd ref='20966366' />
-    <nd ref='9280986' />
-    <nd ref='10217215' />
-    <nd ref='9280985' />
-    <nd ref='9281158' />
-    <nd ref='9280984' />
-    <nd ref='9727807' />
-    <nd ref='9280983' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3129259' timestamp='2006-09-08T02:12:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964129' />
-    <nd ref='14964128' />
-    <nd ref='14964131' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rampart Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043820' timestamp='2006-12-02T23:18:57+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419417' />
-    <nd ref='21419430' />
-    <nd ref='21419431' />
-    <nd ref='21419432' />
-    <nd ref='21419433' />
-    <nd ref='21419416' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Howard Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910612' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20133211' />
-    <nd ref='20133204' />
-    <nd ref='20133206' />
-    <nd ref='20133210' />
-    <nd ref='20133211' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Duddon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008588' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='325653' />
-    <nd ref='21141379' />
-    <nd ref='21141428' />
-    <nd ref='21141429' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bridlington Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698469' timestamp='2007-06-02T19:44:15+01:00' visible='true'>
-    <nd ref='29874142' />
-    <nd ref='29874143' />
-    <nd ref='29874155' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15942257' timestamp='2007-12-10T19:13:23+00:00' user='sladen' visible='true'>
-    <nd ref='160216597' />
-    <nd ref='160218967' />
-    <nd ref='160218968' />
-    <nd ref='160218970' />
-    <nd ref='160218972' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4545712' timestamp='2007-04-30T20:40:49+01:00' visible='true'>
-    <nd ref='28339126' />
-    <nd ref='28339154' />
-    <nd ref='28339153' />
-    <nd ref='28339147' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4078456' timestamp='2006-12-17T19:47:32+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21624977' />
-    <nd ref='28342596' />
-    <nd ref='21624978' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Seaward Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724590' timestamp='2007-06-08T23:30:32+01:00' visible='true'>
-    <nd ref='30089055' />
-    <nd ref='30089042' />
-    <nd ref='30089038' />
-    <nd ref='30089034' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Curlew Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136221' timestamp='2007-12-06T20:43:09+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296290' />
-    <nd ref='25296309' />
-    <nd ref='25296279' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C354' />
-    <tag k='highway' v='tertiary' />
-    <tag k='maxspeed' v='64' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148420' timestamp='2007-12-20T12:09:12+00:00' visible='true'>
-    <nd ref='15359727' />
-    <nd ref='21586022' />
-    <nd ref='15359728' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Nutbeam Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703343' timestamp='2007-06-03T20:51:17+01:00' visible='true'>
-    <nd ref='29925342' />
-    <nd ref='29925935' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Totnes Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800427' timestamp='2008-02-03T06:11:20+00:00' user='sladen' visible='true'>
-    <nd ref='245148772' />
-    <nd ref='245148852' />
-    <nd ref='245148853' />
-    <nd ref='245148854' />
-    <nd ref='245148855' />
-    <nd ref='245148856' />
-    <nd ref='245149449' />
-    <nd ref='245149626' />
-    <nd ref='48958672' />
-    <nd ref='245149450' />
-    <nd ref='245149447' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4627872' timestamp='2007-07-01T22:15:25+01:00' visible='true'>
-    <nd ref='29387397' />
-    <nd ref='29633877' />
-    <nd ref='29387398' />
-    <nd ref='29387399' />
-    <nd ref='29387400' />
-    <nd ref='28418335' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Grantham road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556416' timestamp='2007-10-29T08:07:47+00:00' user='nickw' visible='true'>
-    <nd ref='91115432' />
-    <nd ref='91115435' />
-    <nd ref='91115436' />
-    <nd ref='91115438' />
-    <nd ref='91115799' />
-    <nd ref='91115802' />
-    <nd ref='91115449' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4254566' timestamp='2007-01-27T23:23:08+00:00' visible='true'>
-    <nd ref='25480539' />
-    <nd ref='25480561' />
-    <nd ref='25480562' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='Name sign missing (vandalised)' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4545700' timestamp='2007-08-21T00:37:20+01:00' user='HenryDCase' visible='true'>
-    <nd ref='28339137' />
-    <nd ref='28339136' />
-    <nd ref='28339134' />
-    <nd ref='28339133' />
-    <nd ref='28339132' />
-    <nd ref='28339131' />
-    <nd ref='28339130' />
-    <nd ref='28339128' />
-    <nd ref='28339127' />
-    <nd ref='28339126' />
-    <nd ref='28339124' />
-    <nd ref='28339123' />
-    <nd ref='28339122' />
-    <nd ref='28339121' />
-    <nd ref='28339119' />
-    <nd ref='28339141' />
-    <nd ref='28339118' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Stranding Street' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3879901' timestamp='2006-10-27T00:48:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254611' />
-    <nd ref='19890105' />
-    <nd ref='19890106' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Summers Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119868' timestamp='2006-06-04T00:35:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306323' />
-    <nd ref='658424' />
-    <nd ref='658423' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brookvale Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4005407' timestamp='2007-11-29T22:31:49+00:00' user='nickw' visible='true'>
-    <nd ref='21091859' />
-    <nd ref='21091860' />
-    <nd ref='21091861' />
-    <nd ref='21091862' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Norman Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3987534' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831113' />
-    <nd ref='20831122' />
-    <nd ref='20831121' />
-    <nd ref='20831119' />
-    <nd ref='20831120' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upper Bannister Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150637' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29710862' />
-    <nd ref='29710864' />
-    <nd ref='29711024' />
-    <nd ref='29710865' />
-    <nd ref='29710866' />
-    <nd ref='29710867' />
-    <nd ref='29710868' />
-    <nd ref='29710869' />
-    <nd ref='29710870' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4635676' timestamp='2007-05-21T23:45:58+01:00' user='nickw' visible='true'>
-    <nd ref='20972825' />
-    <nd ref='20972818' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Duke Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540971' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252944' />
-    <nd ref='28252946' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996898' timestamp='2006-11-10T21:59:05+00:00' user='nickw' visible='true'>
-    <nd ref='20957193' />
-    <nd ref='20957195' />
-    <nd ref='20957196' />
-    <nd ref='20957197' />
-    <nd ref='20957198' />
-    <nd ref='20957199' />
-    <nd ref='20957200' />
-    <nd ref='20957201' />
-    <nd ref='20957194' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Evelyn Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126613' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true'>
-    <nd ref='14726189' />
-    <nd ref='254884' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='22801520' timestamp='2008-02-03T06:15:39+00:00' user='sladen' visible='true'>
-    <nd ref='245150395' />
-    <nd ref='245150414' />
-    <nd ref='245150415' />
-    <nd ref='245150392' />
-    <nd ref='245150458' />
-    <nd ref='245150459' />
-    <nd ref='17724275' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8150046' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464254' />
-    <nd ref='29464255' />
-    <nd ref='29464256' />
-    <nd ref='29464257' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Meadowhead Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2352516' timestamp='2006-07-10T00:44:52+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254836' />
-    <nd ref='469857' />
-    <nd ref='469859' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Waterloo Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4644675' timestamp='2007-05-24T10:51:04+01:00' visible='true'>
-    <nd ref='28223262' />
-    <nd ref='29548662' />
-    <nd ref='29548663' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Hardy Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211086' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24924072' />
-    <nd ref='24924322' />
-    <nd ref='24924323' />
-    <nd ref='24924324' />
-    <nd ref='305632' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Station Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677087' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='18232078' />
-    <nd ref='18232077' />
-    <nd ref='17724245' />
-    <nd ref='17724244' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sandhurst Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558169' timestamp='2007-05-02T23:58:14+01:00' visible='true'>
-    <nd ref='28582977' />
-    <nd ref='28582974' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arnheim Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536702' timestamp='2007-04-29T08:58:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194890' />
-    <nd ref='28194896' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16414358' timestamp='2007-12-14T21:37:42+00:00' user='nickw' visible='true'>
-    <nd ref='169423559' />
-    <nd ref='169426680' />
-    <nd ref='169426684' />
-    <nd ref='169426686' />
-    <nd ref='169426692' />
-    <nd ref='169426698' />
-    <nd ref='169426680' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Birch Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605586' timestamp='2007-05-16T00:59:46+01:00' visible='true'>
-    <nd ref='29001334' />
-    <nd ref='29145257' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134064' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='21613483' />
-    <nd ref='21613485' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Lulworth Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1206011' timestamp='2007-12-10T19:09:39+00:00' user='sladen' visible='true'>
-    <nd ref='658473' />
-    <nd ref='4942933' />
-    <nd ref='29145249' />
-    <nd ref='4942444' />
-    <nd ref='650752' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Adelaide Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4679924' timestamp='2007-05-28T19:39:31+01:00' visible='true'>
-    <nd ref='29730503' />
-    <nd ref='29730505' />
-    <nd ref='29730514' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Villeneuve Saint Georges Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10569099' timestamp='2007-10-29T16:21:46+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='87844993' />
-    <nd ref='87844774' />
-    <nd ref='87844992' />
-    <nd ref='91528333' />
-    <nd ref='91528334' />
-    <nd ref='91528335' />
-    <nd ref='91528336' />
-    <nd ref='91528338' />
-    <nd ref='25675808' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='2854840' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071435' />
-    <nd ref='13071434' />
-    <nd ref='13071433' />
-    <nd ref='13071430' />
-    <nd ref='13071431' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hatley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732318' timestamp='2007-06-10T18:15:22+01:00' visible='true'>
-    <nd ref='30161103' />
-    <nd ref='30161116' />
-    <nd ref='30161118' />
-    <nd ref='30161121' />
-    <nd ref='30161122' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148517' timestamp='2007-04-29T20:37:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243700' />
-    <nd ref='28243714' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Avington Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9660169' timestamp='2007-10-16T20:09:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20972784' />
-    <nd ref='20972787' />
-    <nd ref='254838' />
-    <nd ref='10222198' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10569168' timestamp='2007-10-29T16:25:33+00:00' user='Dean Earley' visible='true'>
-    <nd ref='14707286' />
-    <nd ref='14745446' />
-    <nd ref='17721091' />
-    <nd ref='17721090' />
-    <nd ref='254657' />
-    <nd ref='14745447' />
-    <nd ref='254658' />
-    <nd ref='254659' />
-    <nd ref='14745448' />
-    <nd ref='254660' />
-    <nd ref='14707285' />
-    <nd ref='254661' />
-    <nd ref='14707284' />
-    <nd ref='269309' />
-    <nd ref='14745449' />
-    <nd ref='21586130' />
-    <nd ref='269310' />
-    <nd ref='14745451' />
-    <nd ref='544344' />
-    <nd ref='21586131' />
-    <nd ref='21586132' />
-    <nd ref='14707267' />
-    <nd ref='21586133' />
-    <nd ref='21586134' />
-    <nd ref='14707268' />
-    <nd ref='14707283' />
-    <nd ref='21586135' />
-    <nd ref='14707270' />
-    <nd ref='21586136' />
-    <nd ref='14707282' />
-    <tag k='ref' v='B3037' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Fairoak Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084427' timestamp='2006-12-23T10:22:41+00:00' user='nickw' visible='true'>
-    <nd ref='21689164' />
-    <nd ref='21689171' />
-    <nd ref='21689172' />
-    <nd ref='21689173' />
-    <nd ref='21689174' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Monks Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580485' timestamp='2007-05-11T00:51:25+01:00' visible='true'>
-    <nd ref='28935740' />
-    <nd ref='28935742' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948202' timestamp='2007-09-11T00:11:44+01:00' visible='true'>
-    <nd ref='21615424' />
-    <nd ref='48965783' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Simnel Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726484' timestamp='2007-12-08T20:35:42+00:00' user='nickw' visible='true'>
-    <nd ref='157241421' />
-    <nd ref='157241423' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Buchanan Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342668' timestamp='2007-03-09T21:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='254591' />
-    <nd ref='26447387' />
-    <nd ref='26447523' />
-    <nd ref='26447524' />
-    <nd ref='26447513' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Graham Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150197' timestamp='2007-10-30T15:20:40+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28223257' />
-    <nd ref='28339158' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='FIXME Segment was also named "William Panter Court"' />
-    <tag k='name' v='Greenfinch Close/William Panter Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1674' timestamp='2006-06-04T00:30:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='530605' />
-    <nd ref='530606' />
-    <nd ref='530607' />
-    <nd ref='530608' />
-    <nd ref='247787' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Church Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703321' timestamp='2007-06-03T20:45:04+01:00' visible='true'>
-    <nd ref='29925630' />
-    <nd ref='29925631' />
-    <nd ref='29925632' />
-    <nd ref='29925393' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4638016' timestamp='2007-07-09T12:19:49+01:00' visible='true'>
-    <nd ref='19890078' />
-    <nd ref='518784' />
-    <nd ref='19890081' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Horseshoe Bridge' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='layer' v='1' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4539489' timestamp='2007-04-29T19:33:33+01:00' user='nickw' visible='true'>
-    <nd ref='28237093' />
-    <nd ref='28237094' />
-    <nd ref='28237090' />
-    <nd ref='28237091' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bursledon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433399' timestamp='2007-10-17T01:09:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254687' />
-    <nd ref='28903928' />
-    <nd ref='28903833' />
-    <tag k='highway' v='service' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3701403' timestamp='2006-10-16T22:13:52+01:00' user='nickw' visible='true'>
-    <nd ref='18348691' />
-    <nd ref='18348712' />
-    <nd ref='18348713' />
-    <nd ref='18348714' />
-    <nd ref='18348715' />
-    <nd ref='18348717' />
-    <nd ref='18348719' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Nutburn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10155488' timestamp='2007-11-05T08:11:54+00:00' user='nickw' visible='true'>
-    <nd ref='254297' />
-    <nd ref='254298' />
-    <nd ref='254299' />
-    <nd ref='254300' />
-    <nd ref='30255978' />
-    <nd ref='254301' />
-    <nd ref='254302' />
-    <nd ref='254303' />
-    <nd ref='254304' />
-    <nd ref='254305' />
-    <nd ref='254306' />
-    <nd ref='254307' />
-    <nd ref='254308' />
-    <nd ref='254309' />
-    <nd ref='21746415' />
-    <nd ref='21746412' />
-    <nd ref='254310' />
-    <nd ref='21746413' />
-    <nd ref='254311' />
-    <nd ref='21746408' />
-    <nd ref='21746409' />
-    <nd ref='21746410' />
-    <nd ref='21746407' />
-    <nd ref='21746406' />
-    <nd ref='21746405' />
-    <nd ref='21746404' />
-    <nd ref='254312' />
-    <nd ref='21746402' />
-    <nd ref='21746401' />
-    <nd ref='21746400' />
-    <nd ref='21746399' />
-    <nd ref='21746398' />
-    <nd ref='21746397' />
-    <nd ref='254313' />
-    <nd ref='21746396' />
-    <nd ref='21746395' />
-    <nd ref='254314' />
-    <nd ref='21746394' />
-    <nd ref='21746393' />
-    <nd ref='254315' />
-    <nd ref='254316' />
-    <nd ref='21746392' />
-    <nd ref='269150' />
-    <nd ref='269151' />
-    <nd ref='269152' />
-    <nd ref='269153' />
-    <nd ref='269154' />
-    <nd ref='269155' />
-    <nd ref='269156' />
-    <nd ref='269157' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='name' v='Itchen Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4078460' timestamp='2006-12-17T19:47:33+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21598842' />
-    <nd ref='21624985' />
-    <nd ref='21624984' />
-    <nd ref='21624983' />
-    <nd ref='26728550' />
-    <nd ref='21624982' />
-    <nd ref='21624991' />
-    <nd ref='26728538' />
-    <nd ref='26728539' />
-    <nd ref='26728540' />
-    <nd ref='26728541' />
-    <nd ref='26593142' />
-    <nd ref='26728542' />
-    <nd ref='26728543' />
-    <nd ref='657766' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Knighton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690853' timestamp='2007-06-21T22:43:13+01:00' user='the_winch' visible='true'>
-    <nd ref='29815059' />
-    <nd ref='29815441' />
-    <tag k='highway' v='footway' />
-  </way>
-  <way id='8376209' timestamp='2007-10-29T15:43:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25896417' />
-    <nd ref='25896415' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4607711' timestamp='2007-05-16T20:05:39+01:00' visible='true'>
-    <nd ref='29163388' />
-    <nd ref='29163389' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764772' timestamp='2007-06-16T16:26:47+01:00' visible='true'>
-    <nd ref='30431951' />
-    <nd ref='30431966' />
-    <nd ref='30431969' />
-    <nd ref='30431972' />
-    <nd ref='30431980' />
-    <nd ref='30431963' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151458' timestamp='2007-06-03T19:02:05+01:00' visible='true'>
-    <nd ref='29914416' />
-    <nd ref='29914409' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ladywood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996458' timestamp='2006-11-10T08:43:44+00:00' user='nickw' visible='true'>
-    <nd ref='20954594' />
-    <nd ref='20954596' />
-    <nd ref='20954597' />
-    <nd ref='20954598' />
-    <nd ref='20954599' />
-    <nd ref='20954595' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Elmsleigh Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342679' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447504' />
-    <nd ref='26447532' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558173' timestamp='2007-05-02T23:58:14+01:00' visible='true'>
-    <nd ref='28583018' />
-    <nd ref='28583057' />
-    <nd ref='28583058' />
-    <nd ref='28583059' />
-    <nd ref='28583061' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Preshaw Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4242450' timestamp='2007-06-13T09:30:28+01:00' visible='true'>
-    <nd ref='24924233' />
-    <nd ref='30290757' />
-    <nd ref='25340618' />
-    <nd ref='30290756' />
-    <nd ref='25340619' />
-    <nd ref='30290755' />
-    <nd ref='25340620' />
-    <nd ref='30096943' />
-    <nd ref='30089141' />
-    <nd ref='25340621' />
-    <nd ref='30089142' />
-    <nd ref='30089140' />
-    <nd ref='25340622' />
-    <nd ref='30089143' />
-    <nd ref='30089139' />
-    <nd ref='25340623' />
-    <nd ref='29549378' />
-    <nd ref='30089144' />
-    <nd ref='25340624' />
-    <nd ref='29549377' />
-    <nd ref='29549376' />
-    <nd ref='25340625' />
-    <nd ref='29549375' />
-    <nd ref='29549374' />
-    <nd ref='25340626' />
-    <nd ref='28418536' />
-    <nd ref='25340627' />
-    <nd ref='17721026' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Nightingale Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9600753' timestamp='2007-10-16T06:17:38+01:00' user='andrewpmk' visible='true'>
-    <nd ref='25296016' />
-    <nd ref='15740475' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Twyford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4253359' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true'>
-    <nd ref='25471868' />
-    <nd ref='25471849' />
-    <nd ref='25471850' />
-    <nd ref='25471851' />
-    <nd ref='25471852' />
-    <nd ref='25471853' />
-    <nd ref='25471854' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Robert Cecil Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237115' timestamp='2007-01-19T09:58:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296284' />
-    <nd ref='25296274' />
-    <nd ref='25296386' />
-    <nd ref='25296388' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='name' v='Woodside Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999848' timestamp='2006-11-13T21:50:57+00:00' user='nickw' visible='true'>
-    <nd ref='20976791' />
-    <nd ref='20976790' />
-    <nd ref='20976792' />
-    <nd ref='20976793' />
-    <nd ref='20976794' />
-    <nd ref='20976795' />
-    <nd ref='20976796' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wilton Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875594' timestamp='2007-07-09T12:19:44+01:00' visible='true'>
-    <nd ref='26447410' />
-    <nd ref='26447379' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='1639859' timestamp='2006-06-03T22:47:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254245' />
-    <nd ref='269928' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='8123570' timestamp='2007-05-26T09:43:11+01:00' user='nickw' visible='true'>
-    <nd ref='10217210' />
-    <nd ref='10217217' />
-    <nd ref='10217209' />
-    <nd ref='10217122' />
-    <nd ref='9280982' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698473' timestamp='2007-06-02T19:44:16+01:00' visible='true'>
-    <nd ref='25635427' />
-    <nd ref='25635428' />
-    <nd ref='29874152' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Ovington Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269328' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640004' />
-    <nd ref='25640012' />
-    <nd ref='25640013' />
-    <nd ref='25640014' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Langbar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3431513' timestamp='2006-09-28T23:48:13+01:00' user='nickw' visible='true'>
-    <nd ref='16963791' />
-    <nd ref='16963790' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oakhurst Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9660160' timestamp='2007-10-16T20:09:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='75690566' />
-    <nd ref='42141467' />
-    <nd ref='42141480' />
-    <nd ref='42141503' />
-    <nd ref='42141530' />
-    <nd ref='53411351' />
-    <tag k='access' v='permissive' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4043829' timestamp='2006-12-02T23:23:54+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419617' />
-    <nd ref='21419619' />
-    <nd ref='21419620' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540954' timestamp='2007-04-29T22:00:53+01:00' visible='true'>
-    <nd ref='28252897' />
-    <nd ref='28252899' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tintagel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818557' timestamp='2007-10-29T16:25:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296126' />
-    <nd ref='25296127' />
-    <nd ref='14707286' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='B3037' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Fairoak Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536141' timestamp='2007-04-29T01:53:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179436' />
-    <nd ref='28179455' />
-    <nd ref='28179456' />
-    <nd ref='28179457' />
-    <nd ref='28179458' />
-    <nd ref='28179455' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chilworth Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10568211' timestamp='2007-10-29T15:43:32+00:00' user='Dean Earley' visible='true'>
-    <nd ref='24924290' />
-    <nd ref='30290777' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6122671' timestamp='2007-12-08T20:21:05+00:00' user='nickw' visible='true'>
-    <nd ref='50656124' />
-    <nd ref='50656125' />
-    <nd ref='157218839' />
-    <nd ref='50656127' />
-    <nd ref='50656128' />
-    <nd ref='50656129' />
-    <nd ref='50656130' />
-    <nd ref='157216947' />
-    <nd ref='157209218' />
-    <nd ref='50656131' />
-    <nd ref='14957851' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sutherland Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8151440' timestamp='2007-06-03T15:43:47+01:00' visible='true'>
-    <nd ref='29911934' />
-    <nd ref='29911935' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lewes Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677091' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='18232078' />
-    <nd ref='18232079' />
-    <nd ref='18232080' />
-    <nd ref='18232081' />
-    <nd ref='18232082' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215227' timestamp='2007-05-15T20:53:22+01:00' user='nickw' visible='true'>
-    <nd ref='24984683' />
-    <nd ref='29134815' />
-    <nd ref='24984681' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leaside Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092124' timestamp='2007-10-16T20:09:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10222198' />
-    <nd ref='14744294' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1658' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='413158' />
-    <nd ref='658325' />
-    <nd ref='544333' />
-    <nd ref='413147' />
-    <nd ref='657705' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodcote Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4643757' timestamp='2007-05-24T00:05:28+01:00' visible='true'>
-    <nd ref='25340633' />
-    <nd ref='29392358' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342672' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447502' />
-    <nd ref='26447503' />
-    <nd ref='26447394' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Wilson Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585175' timestamp='2007-05-12T09:40:24+01:00' user='nickw' visible='true'>
-    <nd ref='29001316' />
-    <nd ref='29001303' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Collier Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577382' timestamp='2007-05-09T23:03:53+01:00' visible='true'>
-    <nd ref='28903074' />
-    <nd ref='28903073' />
-    <nd ref='28903072' />
-    <nd ref='28903071' />
-    <nd ref='28903070' />
-    <nd ref='28903069' />
-    <nd ref='28903068' />
-    <nd ref='28903067' />
-    <nd ref='28903056' />
-    <nd ref='28903074' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723788' timestamp='2007-12-08T20:07:48+00:00' user='nickw' visible='true'>
-    <nd ref='157200337' />
-    <nd ref='157200343' />
-    <nd ref='157200346' />
-    <nd ref='157200348' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wittering Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235075' timestamp='2007-01-17T21:10:31+00:00' user='David Currie' visible='true'>
-    <nd ref='21600675' />
-    <nd ref='25282077' />
-    <nd ref='25282083' />
-    <nd ref='25282084' />
-    <nd ref='25282089' />
-    <nd ref='25282090' />
-    <nd ref='25282091' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sandringham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3631344' timestamp='2008-02-03T05:58:04+00:00' user='sladen' visible='true'>
-    <nd ref='17980436' />
-    <nd ref='310848' />
-    <nd ref='310850' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Methuen Street' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3987528' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='254383' />
-    <nd ref='20831126' />
-    <nd ref='20831128' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Canton Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269324' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639999' />
-    <nd ref='25640006' />
-    <nd ref='25640008' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Braeside Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724583' timestamp='2007-06-08T23:30:30+01:00' visible='true'>
-    <nd ref='30089113' />
-    <nd ref='30089115' />
-    <nd ref='30089117' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Swift Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687633' timestamp='2007-05-30T22:26:34+01:00' user='nickw' visible='true'>
-    <nd ref='29796853' />
-    <nd ref='29796854' />
-    <nd ref='29796855' />
-    <nd ref='29796856' />
-    <nd ref='29796857' />
-    <nd ref='29796858' />
-    <nd ref='29796859' />
-    <nd ref='29796861' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mersham Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091879' timestamp='2006-09-03T00:38:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='469852' />
-    <nd ref='469853' />
-    <nd ref='21636936' />
-    <nd ref='14743118' />
-    <nd ref='21600513' />
-    <nd ref='469854' />
-    <nd ref='21600514' />
-    <nd ref='469855' />
-    <nd ref='14743168' />
-    <nd ref='254836' />
-    <nd ref='254835' />
-    <nd ref='14743121' />
-    <nd ref='18868877' />
-    <nd ref='14743122' />
-    <nd ref='254834' />
-    <nd ref='20957238' />
-    <nd ref='20957237' />
-    <nd ref='14743116' />
-    <nd ref='20957249' />
-    <nd ref='14743120' />
-    <nd ref='254833' />
-    <nd ref='254832' />
-    <nd ref='21091874' />
-    <nd ref='14743125' />
-    <nd ref='14743123' />
-    <nd ref='14743126' />
-    <nd ref='21091890' />
-    <nd ref='469889' />
-    <nd ref='21636937' />
-    <nd ref='20957212' />
-    <nd ref='20957211' />
-    <nd ref='11419640' />
-    <nd ref='11419633' />
-    <nd ref='14743127' />
-    <nd ref='254831' />
-    <nd ref='14743128' />
-    <nd ref='14743130' />
-    <nd ref='11419582' />
-    <nd ref='11419493' />
-    <nd ref='14743131' />
-    <nd ref='14743132' />
-    <nd ref='21275710' />
-    <nd ref='14743133' />
-    <nd ref='21561564' />
-    <nd ref='21275709' />
-    <nd ref='469888' />
-    <nd ref='21275708' />
-    <nd ref='254775' />
-    <nd ref='14743150' />
-    <nd ref='254774' />
-    <nd ref='27021724' />
-    <nd ref='21561786' />
-    <nd ref='14743152' />
-    <nd ref='21561787' />
-    <nd ref='254773' />
-    <nd ref='21561788' />
-    <nd ref='21561789' />
-    <nd ref='14743149' />
-    <nd ref='27021723' />
-    <nd ref='254772' />
-    <nd ref='14567154' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Shirley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1189530' timestamp='2006-05-21T09:22:26+01:00' user='nickw' visible='true'>
-    <nd ref='4931612' />
-    <nd ref='4931637' />
-    <nd ref='4931646' />
-    <nd ref='4931656' />
-    <nd ref='20967591' />
-    <nd ref='20967592' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Drummond Drive' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546149' timestamp='2007-04-30T22:13:56+01:00' user='nickw' visible='true'>
-    <nd ref='28342526' />
-    <nd ref='28342542' />
-    <nd ref='28230923' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blackthorn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644821' timestamp='2007-06-13T09:30:28+01:00' visible='true'>
-    <nd ref='28418536' />
-    <nd ref='29549372' />
-    <nd ref='29549371' />
-    <nd ref='29549370' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Magpie Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749611' timestamp='2007-06-13T09:24:36+01:00' visible='true'>
-    <nd ref='30290757' />
-    <nd ref='30290735' />
-    <nd ref='30290736' />
-    <nd ref='30290737' />
-    <nd ref='30290740' />
-    <nd ref='30290739' />
-    <nd ref='30290741' />
-    <nd ref='30290756' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Robin Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008580' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141411' />
-    <nd ref='21141412' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Morland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4653033' timestamp='2007-10-16T11:34:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29389518' />
-    <nd ref='29389519' />
-    <nd ref='29728854' />
-    <nd ref='29595837' />
-    <nd ref='29621215' />
-    <nd ref='29389520' />
-    <nd ref='29621200' />
-    <nd ref='29621203' />
-    <nd ref='29621204' />
-    <nd ref='29389521' />
-    <nd ref='31072237' />
-    <nd ref='29389518' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120151' timestamp='2006-06-04T00:35:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='27440016' />
-    <nd ref='700432' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Osborne Road North' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4215250' timestamp='2007-01-10T00:20:54+00:00' user='nickw' visible='true'>
-    <nd ref='24984803' />
-    <nd ref='24984676' />
-    <nd ref='24984802' />
-    <nd ref='24984801' />
-    <nd ref='24984800' />
-    <nd ref='24984796' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Phillimore Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1689' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='325643' />
-    <nd ref='325644' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Oxford Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4732323' timestamp='2007-06-10T18:15:23+01:00' visible='true'>
-    <nd ref='30161109' />
-    <nd ref='30161110' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074118' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561566' />
-    <nd ref='21561569' />
-    <nd ref='21561540' />
-    <nd ref='21561570' />
-    <nd ref='21561571' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wordsworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548023' timestamp='2007-12-14T21:29:01+00:00' user='nickw' visible='true'>
-    <nd ref='28372779' />
-    <nd ref='28372778' />
-    <nd ref='28372731' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Warren Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084958' timestamp='2008-02-03T06:00:37+00:00' user='sladen' visible='true'>
-    <nd ref='245145573' />
-    <nd ref='245145574' />
-    <nd ref='245145334' />
-    <nd ref='18101129' />
-    <nd ref='324349' />
-    <nd ref='28343221' />
-    <nd ref='862640' />
-    <nd ref='18232072' />
-    <nd ref='254414' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='London Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4009869' timestamp='2007-12-06T20:43:10+00:00' user='Dean Earley' visible='true'>
-    <nd ref='153329602' />
-    <nd ref='21178480' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589170' timestamp='2007-05-13T10:11:08+01:00' user='nickw' visible='true'>
-    <nd ref='29026802' />
-    <nd ref='29026800' />
-    <nd ref='29026803' />
-    <nd ref='29026805' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mayfair Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546066' timestamp='2007-04-30T21:49:12+01:00' user='nickw' visible='true'>
-    <nd ref='28341767' />
-    <nd ref='28341768' />
-    <nd ref='28341769' />
-    <nd ref='28341770' />
-    <nd ref='28230945' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brownlow Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749605' timestamp='2007-06-13T09:24:34+01:00' visible='true'>
-    <nd ref='30290769' />
-    <nd ref='30290768' />
-    <nd ref='30290767' />
-    <nd ref='30290766' />
-    <nd ref='30290771' />
-    <nd ref='30290770' />
-    <nd ref='30290769' />
-    <tag k='leisure' v='golf_course' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4797566' timestamp='2007-06-22T21:44:02+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780837' />
-    <nd ref='30780839' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4076770' timestamp='2006-12-16T00:49:36+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21598846' />
-    <nd ref='21598848' />
-    <nd ref='21598849' />
-    <nd ref='21598850' />
-    <nd ref='21598851' />
-    <nd ref='21598852' />
-    <nd ref='25639893' />
-    <nd ref='25639894' />
-    <nd ref='25639895' />
-    <nd ref='26348284' />
-    <nd ref='25639896' />
-    <nd ref='25639897' />
-    <nd ref='25639898' />
-    <nd ref='25639899' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='complete' v='no' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551571' timestamp='2007-05-26T20:16:32+01:00' visible='true'>
-    <nd ref='28418264' />
-    <nd ref='28418342' />
-    <nd ref='28418345' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Hoddinot Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996906' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957223' />
-    <nd ref='20957215' />
-    <nd ref='20957216' />
-    <nd ref='20957217' />
-    <nd ref='20957190' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Suffolk Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723921' timestamp='2007-12-08T20:09:11+00:00' user='nickw' visible='true'>
-    <nd ref='157201967' />
-    <nd ref='157201965' />
-    <nd ref='157201972' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northolt Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061523' timestamp='2006-12-09T09:51:50+00:00' user='nickw' visible='true'>
-    <nd ref='21507743' />
-    <nd ref='21507738' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cranford Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342675' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447529' />
-    <nd ref='26447382' />
-    <nd ref='26447520' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Belvidere Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4329574' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346859' />
-    <nd ref='26346862' />
-    <nd ref='26346781' />
-    <nd ref='26346786' />
-    <nd ref='26346863' />
-    <nd ref='26346789' />
-    <nd ref='26346791' />
-    <nd ref='26346794' />
-    <nd ref='26346801' />
-    <nd ref='26346805' />
-    <nd ref='26346808' />
-    <nd ref='26346841' />
-    <nd ref='26346843' />
-    <nd ref='26346847' />
-    <nd ref='26346851' />
-    <nd ref='26346853' />
-    <nd ref='26346857' />
-    <nd ref='26346859' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chessel Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540958' timestamp='2007-04-29T22:00:53+01:00' visible='true'>
-    <nd ref='28252915' />
-    <nd ref='28252916' />
-    <nd ref='28252918' />
-    <nd ref='28252919' />
-    <nd ref='28252920' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunvegan Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4567186' timestamp='2007-05-04T01:58:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28801035' />
-    <nd ref='28801036' />
-    <nd ref='21092037' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lords Hill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540350' timestamp='2007-04-29T21:10:17+01:00' visible='true'>
-    <nd ref='28194437' />
-    <nd ref='28194438' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Warblers Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536697' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='19227254' />
-    <nd ref='19227251' />
-    <nd ref='28194883' />
-    <nd ref='28194882' />
-    <nd ref='28194881' />
-    <nd ref='19227249' />
-    <nd ref='19227248' />
-    <nd ref='28194901' />
-    <nd ref='19227247' />
-    <nd ref='28194902' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='surface' v='unpaved' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008584' timestamp='2007-10-29T08:22:38+00:00' user='nickw' visible='true'>
-    <nd ref='21141419' />
-    <nd ref='21141420' />
-    <nd ref='21141421' />
-    <nd ref='21141422' />
-    <nd ref='21141423' />
-    <nd ref='21141424' />
-    <nd ref='91131365' />
-    <nd ref='21141385' />
-    <nd ref='21141425' />
-    <nd ref='20976717' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Norham Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625931' timestamp='2007-05-20T10:19:35+01:00' user='nickw' visible='true'>
-    <nd ref='29380414' />
-    <nd ref='29380415' />
-    <nd ref='29380416' />
-    <nd ref='29380417' />
-    <nd ref='29380418' />
-    <nd ref='29380419' />
-    <nd ref='29380420' />
-    <nd ref='29380421' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Greenways' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5781530' timestamp='2007-10-16T17:47:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28173710' />
-    <nd ref='45160070' />
-    <nd ref='28173811' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woburn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4991514' timestamp='2007-07-30T16:07:01+01:00' visible='true'>
-    <nd ref='33130197' />
-    <nd ref='33130201' />
-    <nd ref='33130204' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215245' timestamp='2007-05-15T20:48:45+01:00' user='nickw' visible='true'>
-    <nd ref='24984774' />
-    <nd ref='24984775' />
-    <nd ref='24984776' />
-    <nd ref='24984777' />
-    <nd ref='24984778' />
-    <nd ref='24984779' />
-    <nd ref='29134161' />
-    <nd ref='24984780' />
-    <nd ref='29134310' />
-    <nd ref='24984781' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1206026' timestamp='2006-05-21T17:30:24+01:00' user='nickw' visible='true'>
-    <nd ref='4942325' />
-    <nd ref='4931968' />
-    <nd ref='4931712' />
-    <nd ref='4942933' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='South Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3987524' timestamp='2006-11-02T19:56:10+00:00' user='nickw' visible='true'>
-    <nd ref='20831096' />
-    <nd ref='20831097' />
-    <nd ref='20831098' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grosvenor Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136103' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282097' />
-    <nd ref='25282099' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='York Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129263' timestamp='2007-12-30T15:53:41+00:00' visible='true'>
-    <nd ref='14964108' />
-    <nd ref='14964109' />
-    <nd ref='14964110' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whiteworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13252474' timestamp='2007-11-18T19:15:52+00:00' user='nickw' visible='true'>
-    <nd ref='122342988' />
-    <nd ref='122342994' />
-    <nd ref='122342999' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Regents Park Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10523626' timestamp='2007-10-28T22:01:07+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90675680' />
-    <nd ref='90675682' />
-    <nd ref='90675683' />
-    <nd ref='90675685' />
-    <nd ref='90675686' />
-    <nd ref='90675687' />
-    <nd ref='90675688' />
-    <nd ref='90675689' />
-    <nd ref='90675690' />
-    <nd ref='90675691' />
-    <nd ref='90675692' />
-    <nd ref='90675693' />
-    <nd ref='90675694' />
-    <nd ref='90675695' />
-    <nd ref='90675680' />
-    <tag k='landuse' v='residential' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='2818440' timestamp='2006-08-08T23:26:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='12889417' />
-    <nd ref='12889418' />
-    <nd ref='254440' />
-    <nd ref='12889417' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639400' timestamp='2006-06-01T09:36:33+01:00' user='nickw' visible='true'>
-    <nd ref='402746' />
-    <nd ref='402747' />
-    <nd ref='402748' />
-    <nd ref='402749' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4589172' timestamp='2007-05-13T10:11:09+01:00' user='nickw' visible='true'>
-    <nd ref='29026808' />
-    <nd ref='29026810' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mayfair Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558186' timestamp='2007-05-02T23:58:16+01:00' visible='true'>
-    <nd ref='28583075' />
-    <nd ref='28583076' />
-    <nd ref='28583077' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433448' timestamp='2007-05-10T01:07:35+01:00' user='LivingWithDragons' visible='true'>
-    <nd ref='28903828' />
-    <nd ref='28903900' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077031' timestamp='2007-12-06T20:44:26+00:00' user='nickw' visible='true'>
-    <nd ref='325669' />
-    <nd ref='21600480' />
-    <nd ref='21600481' />
-    <nd ref='21092049' />
-    <nd ref='21092048' />
-    <nd ref='28583003' />
-    <nd ref='28583005' />
-    <nd ref='28583002' />
-    <nd ref='21092047' />
-    <nd ref='28583006' />
-    <nd ref='21600482' />
-    <nd ref='21092046' />
-    <nd ref='28584178' />
-    <nd ref='21092045' />
-    <nd ref='21092044' />
-    <nd ref='28874079' />
-    <nd ref='28935727' />
-    <nd ref='21092043' />
-    <nd ref='153331748' />
-    <nd ref='28874077' />
-    <nd ref='28874076' />
-    <nd ref='28874078' />
-    <nd ref='28874085' />
-    <nd ref='28874086' />
-    <nd ref='21092042' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Aldermoor Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4084405' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='247788' />
-    <nd ref='21689056' />
-    <nd ref='21689068' />
-    <nd ref='21689069' />
-    <nd ref='21689070' />
-    <nd ref='21689071' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hilldown Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999835' timestamp='2006-11-13T21:39:23+00:00' user='nickw' visible='true'>
-    <nd ref='20976713' />
-    <nd ref='20976664' />
-    <nd ref='20976714' />
-    <nd ref='20976715' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hollybrook Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749615' timestamp='2007-06-13T09:24:38+01:00' visible='true'>
-    <nd ref='30290789' />
-    <nd ref='30290790' />
-    <nd ref='30290791' />
-    <nd ref='30290792' />
-    <nd ref='30290788' />
-    <nd ref='30290789' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661833' timestamp='2007-05-26T20:15:19+01:00' visible='true'>
-    <nd ref='29632176' />
-    <nd ref='29632175' />
-    <nd ref='29632174' />
-    <nd ref='29632173' />
-    <nd ref='29632172' />
-    <nd ref='29632171' />
-    <nd ref='29632170' />
-    <nd ref='29632169' />
-    <nd ref='29632168' />
-    <nd ref='29632167' />
-    <nd ref='29632166' />
-    <nd ref='29632196' />
-    <nd ref='29632195' />
-    <nd ref='29632194' />
-    <nd ref='29632193' />
-    <nd ref='29632192' />
-    <nd ref='29632191' />
-    <nd ref='29632190' />
-    <nd ref='29632189' />
-    <nd ref='29632188' />
-    <nd ref='29632187' />
-    <nd ref='29632186' />
-    <nd ref='29632185' />
-    <nd ref='29632184' />
-    <nd ref='29632183' />
-    <nd ref='29632182' />
-    <nd ref='29632181' />
-    <nd ref='29632180' />
-    <nd ref='29632179' />
-    <nd ref='29632178' />
-    <nd ref='29632177' />
-    <nd ref='29632176' />
-    <tag k='natural' v='water' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546232' timestamp='2008-02-03T05:55:38+00:00' user='sladen' visible='true'>
-    <nd ref='28343213' />
-    <nd ref='28343214' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='22800693' timestamp='2008-02-03T06:09:39+00:00' user='sladen' visible='true'>
-    <nd ref='635143' />
-    <nd ref='245149209' />
-    <nd ref='245149210' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8137925' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639942' />
-    <nd ref='25639949' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Sea Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683722' timestamp='2007-05-29T22:14:38+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='29764412' />
-    <nd ref='29764413' />
-    <nd ref='29764414' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Barton Cres' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639880' timestamp='2007-10-16T17:59:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743165' />
-    <nd ref='25303939' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8147088' timestamp='2007-04-18T02:00:25+01:00' visible='true'>
-    <nd ref='27440008' />
-    <nd ref='27440009' />
-    <nd ref='27440010' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548034' timestamp='2007-12-14T21:40:38+00:00' user='nickw' visible='true'>
-    <nd ref='28372808' />
-    <nd ref='28372813' />
-    <nd ref='28372814' />
-    <nd ref='28372815' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074114' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561522' />
-    <nd ref='21275710' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134022' timestamp='2007-06-12T00:14:51+01:00' user='nickw' visible='true'>
-    <nd ref='21599029' />
-    <nd ref='21599031' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4238068' timestamp='2007-01-19T20:35:55+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254698' />
-    <nd ref='14727974' />
-    <nd ref='14727961' />
-    <nd ref='254699' />
-    <nd ref='254700' />
-    <nd ref='254429' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540746' timestamp='2007-06-02T19:21:42+01:00' visible='true'>
-    <nd ref='28249877' />
-    <nd ref='28249886' />
-    <nd ref='28249887' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lawnside Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22740648' timestamp='2008-01-29T12:02:01+00:00' user='Dean Earley' visible='true'>
-    <nd ref='243979485' />
-    <nd ref='27512887' />
-    <nd ref='27512888' />
-    <nd ref='243981069' />
-    <nd ref='27512889' />
-    <nd ref='27512890' />
-    <nd ref='27512891' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Campbell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15722708' timestamp='2007-12-08T19:58:40+00:00' user='nickw' visible='true'>
-    <nd ref='157188675' />
-    <nd ref='157188678' />
-    <nd ref='157188682' />
-    <nd ref='157188685' />
-    <nd ref='157188688' />
-    <nd ref='157188693' />
-    <nd ref='157188695' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gemini Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10314641' timestamp='2007-12-06T20:39:11+00:00' user='nickw' visible='true'>
-    <nd ref='87239145' />
-    <nd ref='87239322' />
-    <nd ref='87239051' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lancaster Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4539332' timestamp='2007-04-29T19:16:54+01:00' user='nickw' visible='true'>
-    <nd ref='28234914' />
-    <nd ref='28234919' />
-    <nd ref='28234926' />
-    <nd ref='28234929' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pycroft Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9674788' timestamp='2007-10-16T23:54:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973106' />
-    <nd ref='8596767' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211082' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24949920' />
-    <nd ref='24949921' />
-    <nd ref='24949922' />
-    <nd ref='24949923' />
-    <nd ref='24949924' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Merdon Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635332' timestamp='2007-05-21T22:59:04+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='29457979' />
-    <nd ref='28348306' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chester Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151907' timestamp='2007-06-08T18:12:32+01:00' visible='true'>
-    <nd ref='30089050' />
-    <nd ref='29549380' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074903' timestamp='2006-12-14T14:16:05+00:00' user='David Currie' visible='true'>
-    <nd ref='21579414' />
-    <nd ref='21579413' />
-    <nd ref='21579412' />
-    <nd ref='21579848' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Percivale Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644825' timestamp='2007-05-24T11:23:15+01:00' visible='true'>
-    <nd ref='29549375' />
-    <nd ref='29549387' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Wren Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124969' timestamp='2007-10-16T17:22:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='12889437' />
-    <nd ref='25303006' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569977' timestamp='2007-05-05T09:03:38+01:00' user='nickw' visible='true'>
-    <nd ref='28830658' />
-    <nd ref='28830659' />
-    <nd ref='28830660' />
-    <nd ref='28830661' />
-    <nd ref='28830662' />
-    <nd ref='28830663' />
-    <nd ref='28830670' />
-    <nd ref='28830664' />
-    <nd ref='28830665' />
-    <nd ref='28830668' />
-    <nd ref='28830666' />
-    <nd ref='28830667' />
-    <nd ref='28830669' />
-    <nd ref='28830663' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Summit Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687169' timestamp='2007-05-30T21:37:22+01:00' user='nickw' visible='true'>
-    <nd ref='29794377' />
-    <nd ref='29794380' />
-    <nd ref='29794379' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='High View Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133950' timestamp='2006-12-14T13:53:18+00:00' user='David Currie' visible='true'>
-    <nd ref='21579401' />
-    <nd ref='21579402' />
-    <nd ref='21579403' />
-    <nd ref='21579404' />
-    <nd ref='21579406' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tristram Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578448' timestamp='2007-05-20T10:21:02+01:00' user='nickw' visible='true'>
-    <nd ref='20964740' />
-    <nd ref='254436' />
-    <nd ref='21689104' />
-    <nd ref='2742643' />
-    <nd ref='21689103' />
-    <nd ref='24984803' />
-    <nd ref='17722330' />
-    <nd ref='17722331' />
-    <nd ref='2742644' />
-    <nd ref='2742645' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Stoneham Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126609' timestamp='2007-10-16T17:59:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254744' />
-    <nd ref='25896262' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8433552' timestamp='2007-10-17T01:09:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28903909' />
-    <nd ref='28903980' />
-    <nd ref='28903862' />
-    <nd ref='28903997' />
-    <nd ref='28903877' />
-    <nd ref='28903814' />
-    <nd ref='28903806' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546162' timestamp='2007-04-30T22:13:59+01:00' user='nickw' visible='true'>
-    <nd ref='28342528' />
-    <nd ref='28342563' />
-    <nd ref='28342567' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Merry Oak Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703158' timestamp='2007-06-03T20:10:47+01:00' visible='true'>
-    <nd ref='29924342' />
-    <nd ref='29924343' />
-    <nd ref='29924344' />
-    <nd ref='29924345' />
-    <nd ref='29924346' />
-    <nd ref='29924347' />
-    <nd ref='29924348' />
-    <nd ref='29924349' />
-    <nd ref='29924350' />
-    <nd ref='29923783' />
-    <nd ref='29924351' />
-    <nd ref='29924352' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Clandon Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4711407' timestamp='2007-06-05T21:01:52+01:00' visible='true'>
-    <nd ref='29707283' />
-    <nd ref='29817902' />
-    <nd ref='29710079' />
-    <nd ref='29953505' />
-    <nd ref='29762376' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295852' timestamp='2007-02-16T20:53:40+00:00' user='nickw' visible='true'>
-    <nd ref='518771' />
-    <nd ref='25947180' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Derby Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084964' timestamp='2007-10-16T17:59:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='17504823' />
-    <nd ref='25895699' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604444' timestamp='2007-05-15T20:38:58+01:00' user='nickw' visible='true'>
-    <nd ref='29133023' />
-    <nd ref='29133068' />
-    <nd ref='29133072' />
-    <nd ref='29133076' />
-    <nd ref='29133078' />
-    <nd ref='29133080' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764764' timestamp='2007-06-16T16:26:34+01:00' visible='true'>
-    <nd ref='30431988' />
-    <nd ref='30431951' />
-    <nd ref='30431963' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Yonge Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015799' timestamp='2006-11-26T00:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='11419683' />
-    <nd ref='21275693' />
-    <nd ref='11419592' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Foundry Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625939' timestamp='2007-05-20T10:19:37+01:00' user='nickw' visible='true'>
-    <nd ref='29380441' />
-    <nd ref='29380442' />
-    <nd ref='29380443' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701680' timestamp='2007-06-03T14:54:29+01:00' visible='true'>
-    <nd ref='29909669' />
-    <nd ref='29909667' />
-    <nd ref='29909668' />
-    <nd ref='29909670' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1693' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='388867' />
-    <nd ref='21507756' />
-    <nd ref='16963791' />
-    <nd ref='388868' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hawthorn Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546153' timestamp='2007-04-30T22:13:57+01:00' user='nickw' visible='true'>
-    <nd ref='28342547' />
-    <nd ref='28342545' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577438' timestamp='2007-05-09T23:36:12+01:00' visible='true'>
-    <nd ref='28903376' />
-    <nd ref='28903378' />
-    <nd ref='28903382' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679913' timestamp='2007-05-28T19:39:23+01:00' visible='true'>
-    <nd ref='29728880' />
-    <nd ref='29728879' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084419' timestamp='2007-09-20T19:36:54+01:00' user='mike l' visible='true'>
-    <nd ref='9266208' />
-    <nd ref='21689149' />
-    <nd ref='21689150' />
-    <nd ref='21689146' />
-    <nd ref='21689147' />
-    <nd ref='254498' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4580478' timestamp='2007-05-11T00:51:22+01:00' visible='true'>
-    <nd ref='28935715' />
-    <nd ref='28935716' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124542' timestamp='2006-07-29T14:14:02+01:00' user='nickw' visible='true'>
-    <nd ref='301597' />
-    <nd ref='650794' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10556305' timestamp='2007-10-29T08:00:57+00:00' user='nickw' visible='true'>
-    <nd ref='91111707' />
-    <nd ref='91111708' />
-    <nd ref='91111711' />
-    <nd ref='91111712' />
-    <nd ref='91111713' />
-    <nd ref='91111714' />
-    <nd ref='91111715' />
-    <nd ref='91111716' />
-    <nd ref='91111717' />
-    <nd ref='91111718' />
-    <nd ref='91111707' />
-    <tag k='natural' v='water' />
-    <tag k='name' v='Shirley Pond' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540967' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252960' />
-    <nd ref='28252962' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136109' timestamp='2007-10-30T11:39:22+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25282092' />
-    <nd ref='25282156' />
-    <nd ref='25282155' />
-    <nd ref='25282157' />
-    <nd ref='25282149' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725116' timestamp='2007-12-08T20:19:41+00:00' user='nickw' visible='true'>
-    <nd ref='157216947' />
-    <nd ref='157216951' />
-    <nd ref='157216955' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Armstrong Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8250664' timestamp='2007-10-16T23:45:42+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254674' />
-    <nd ref='9726301' />
-    <nd ref='9726310' />
-    <nd ref='9726302' />
-    <nd ref='9726304' />
-    <nd ref='9726305' />
-    <nd ref='9726309' />
-    <nd ref='9726307' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209529' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='24924075' />
-    <nd ref='24924076' />
-    <nd ref='24924077' />
-    <nd ref='24924078' />
-    <nd ref='24924079' />
-    <nd ref='24924080' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Belgrave Industrial Estate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999142' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971185' />
-    <nd ref='20971182' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150673' timestamp='2007-05-28T19:39:32+01:00' visible='true'>
-    <nd ref='29730512' />
-    <nd ref='29730518' />
-    <nd ref='29730516' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Kornwestheim Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580481' timestamp='2007-09-14T09:16:51+01:00' user='mike l' visible='true'>
-    <nd ref='28874085' />
-    <nd ref='28935728' />
-    <nd ref='28935737' />
-    <nd ref='28935729' />
-    <nd ref='28935730' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chelveston Crescent' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4743137' timestamp='2007-06-11T22:16:56+01:00' visible='true'>
-    <nd ref='30225260' />
-    <nd ref='30225810' />
-    <nd ref='30225812' />
-    <nd ref='30225815' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996918' timestamp='2006-11-10T21:59:07+00:00' user='nickw' visible='true'>
-    <nd ref='325689' />
-    <nd ref='20957240' />
-    <nd ref='20957241' />
-    <nd ref='20957242' />
-    <nd ref='20957243' />
-    <nd ref='20957244' />
-    <nd ref='20957245' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999147' timestamp='2006-11-12T22:57:30+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971170' />
-    <nd ref='20971171' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546533' timestamp='2007-04-30T23:45:38+01:00' user='nickw' visible='true'>
-    <nd ref='28348119' />
-    <nd ref='28348120' />
-    <nd ref='28348121' />
-    <nd ref='28348122' />
-    <nd ref='28348123' />
-    <nd ref='28345063' />
-    <nd ref='28345068' />
-    <nd ref='28348125' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Old Farm Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10516940' timestamp='2007-10-28T20:19:29+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90577039' />
-    <nd ref='90577040' />
-    <nd ref='90577041' />
-    <nd ref='13705312' />
-    <nd ref='90573195' />
-    <nd ref='13705355' />
-    <nd ref='13705441' />
-    <nd ref='13705462' />
-    <nd ref='13705481' />
-    <nd ref='13705484' />
-    <nd ref='13705490' />
-    <nd ref='13705600' />
-    <nd ref='90577042' />
-    <nd ref='90577044' />
-    <nd ref='90577045' />
-    <nd ref='90577046' />
-    <nd ref='90577047' />
-    <nd ref='90577048' />
-    <nd ref='90577049' />
-    <nd ref='90577050' />
-    <nd ref='90577051' />
-    <nd ref='90577052' />
-    <nd ref='90577053' />
-    <nd ref='90577054' />
-    <nd ref='90577055' />
-    <nd ref='90577056' />
-    <nd ref='90577057' />
-    <nd ref='90577058' />
-    <nd ref='90577059' />
-    <nd ref='90577060' />
-    <nd ref='90577061' />
-    <nd ref='90577062' />
-    <nd ref='90577063' />
-    <nd ref='90577064' />
-    <nd ref='90577065' />
-    <nd ref='90577066' />
-    <nd ref='90577067' />
-    <nd ref='90577068' />
-    <nd ref='90577069' />
-    <nd ref='90577070' />
-    <nd ref='90577071' />
-    <nd ref='90577073' />
-    <nd ref='90577074' />
-    <nd ref='90577075' />
-    <nd ref='90577076' />
-    <nd ref='90577077' />
-    <nd ref='90577078' />
-    <nd ref='90577080' />
-    <nd ref='90577082' />
-    <nd ref='90577083' />
-    <nd ref='90577084' />
-    <nd ref='90577085' />
-    <nd ref='90577087' />
-    <nd ref='90577039' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='8150105' timestamp='2007-11-28T09:43:16+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30256654' />
-    <nd ref='30256615' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084409' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689084' />
-    <nd ref='21689089' />
-    <nd ref='21689090' />
-    <nd ref='21689091' />
-    <nd ref='21689059' />
-    <nd ref='21689086' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Poppy Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10522434' timestamp='2007-10-28T21:45:49+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90660384' />
-    <nd ref='90660385' />
-    <nd ref='90660386' />
-    <nd ref='90660387' />
-    <nd ref='90660388' />
-    <nd ref='90660389' />
-    <nd ref='90660390' />
-    <nd ref='90660391' />
-    <nd ref='90660384' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4540750' timestamp='2007-10-26T13:14:45+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='28249904' />
-    <nd ref='28249905' />
-    <nd ref='28249906' />
-    <nd ref='28249907' />
-    <nd ref='28249908' />
-    <nd ref='28249910' />
-    <nd ref='28249912' />
-    <nd ref='28249915' />
-    <nd ref='28249917' />
-    <nd ref='28249918' />
-    <nd ref='28249920' />
-    <nd ref='28249933' />
-    <nd ref='28249922' />
-    <nd ref='28249923' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Millbrook Rd West' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4585152' timestamp='2007-05-12T09:30:30+01:00' user='nickw' visible='true'>
-    <nd ref='12591275' />
-    <nd ref='29000929' />
-    <nd ref='29000930' />
-    <nd ref='29000931' />
-    <nd ref='29000932' />
-    <nd ref='29000933' />
-    <nd ref='29000934' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Marshall Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639417' timestamp='2006-06-01T09:37:30+01:00' user='nickw' visible='true'>
-    <nd ref='430649' />
-    <nd ref='430650' />
-    <nd ref='430651' />
-    <nd ref='430652' />
-    <nd ref='430653' />
-    <nd ref='430654' />
-    <nd ref='422962' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='The Polygon' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4589166' timestamp='2007-05-13T10:11:07+01:00' user='nickw' visible='true'>
-    <nd ref='254363' />
-    <nd ref='29026780' />
-    <nd ref='29026782' />
-    <nd ref='29026660' />
-    <nd ref='29026783' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Court Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724653' timestamp='2007-12-08T20:15:00+00:00' user='nickw' visible='true'>
-    <nd ref='157209145' />
-    <nd ref='157209152' />
-    <nd ref='157209155' />
-    <nd ref='157209189' />
-    <nd ref='157209158' />
-    <nd ref='157209161' />
-    <nd ref='157209165' />
-    <nd ref='157209168' />
-    <nd ref='157209174' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hornchurch Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604566' timestamp='2007-05-15T20:53:20+01:00' user='nickw' visible='true'>
-    <nd ref='29134829' />
-    <nd ref='29134832' />
-    <nd ref='29134835' />
-    <nd ref='29134836' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brading Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636154' timestamp='2007-05-22T00:19:42+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464259' />
-    <nd ref='29464272' />
-    <nd ref='29464273' />
-    <nd ref='29464274' />
-    <nd ref='29464275' />
-    <nd ref='29464276' />
-    <tag k='highway' v='residential' />
-    <tag k='surface' v='unpaved' />
-    <tag k='name' v='Oaklands Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152328' timestamp='2007-10-29T15:43:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30290734' />
-    <nd ref='30290728' />
-    <nd ref='30290733' />
-    <tag k='highway' v='service' />
-    <tag k='note' v='Needs tidying with a real GPS trace' />
-    <tag k='name' v='Tollgate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13638382' timestamp='2007-11-20T11:51:58+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='125573355' />
-    <nd ref='28180245' />
-    <nd ref='125572904' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5b' />
-  </way>
-  <way id='4604598' timestamp='2007-05-15T20:56:06+01:00' user='nickw' visible='true'>
-    <nd ref='29135249' />
-    <nd ref='29135246' />
-    <nd ref='29135252' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Binstead Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4310889' timestamp='2007-02-23T21:48:29+00:00' user='nickw' visible='true'>
-    <nd ref='26114353' />
-    <nd ref='26114367' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='James Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539748' timestamp='2007-04-29T20:03:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28236157' />
-    <nd ref='28240320' />
-    <nd ref='28240318' />
-    <nd ref='28240316' />
-    <nd ref='28240315' />
-    <nd ref='28240314' />
-    <nd ref='28240308' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605560' timestamp='2007-05-16T00:37:07+01:00' visible='true'>
-    <nd ref='25305487' />
-    <nd ref='25305496' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703280' timestamp='2007-06-03T20:30:05+01:00' visible='true'>
-    <nd ref='29925207' />
-    <nd ref='29925204' />
-    <nd ref='29711125' />
-    <nd ref='25296293' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Launceston Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269316' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254466' />
-    <nd ref='25639959' />
-    <nd ref='25639960' />
-    <nd ref='25639941' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ailsa Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13251144' timestamp='2007-11-18T19:04:32+00:00' user='nickw' visible='true'>
-    <nd ref='122322753' />
-    <nd ref='122322756' />
-    <nd ref='122322758' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beech Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536689' timestamp='2007-04-29T08:58:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254565' />
-    <nd ref='28194839' />
-    <nd ref='28194840' />
-    <nd ref='28194842' />
-    <nd ref='28194841' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ridgemont Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586115' timestamp='2007-05-12T15:12:23+01:00' user='nickw' visible='true'>
-    <nd ref='29008368' />
-    <nd ref='29008369' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rother Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148424' timestamp='2007-06-10T18:15:28+01:00' visible='true'>
-    <nd ref='29392349' />
-    <nd ref='29392361' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Desbourough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1678' timestamp='2006-06-11T01:11:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='307469' />
-    <nd ref='307470' />
-    <nd ref='307479' />
-    <nd ref='307481' />
-    <nd ref='21689063' />
-    <nd ref='307482' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Blenheim Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4539976' timestamp='2007-04-29T20:37:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243552' />
-    <nd ref='28243610' />
-    <nd ref='28243611' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Abingdon Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074112' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561554' />
-    <nd ref='21561555' />
-    <nd ref='21561556' />
-    <nd ref='21561557' />
-    <nd ref='21561558' />
-    <nd ref='21561559' />
-    <nd ref='21561560' />
-    <nd ref='21561561' />
-    <nd ref='21561562' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vincent Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10598002' timestamp='2007-10-30T16:47:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21613421' />
-    <nd ref='21613422' />
-    <nd ref='21613423' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Raglan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8132235' timestamp='2006-11-26T00:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='11419591' />
-    <nd ref='21275694' />
-    <nd ref='21275695' />
-    <nd ref='21275696' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Foundry Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151234' timestamp='2007-06-02T18:17:09+01:00' visible='true'>
-    <nd ref='29862363' />
-    <nd ref='29862361' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dale Valley Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152189' timestamp='2007-06-11T22:10:30+01:00' visible='true'>
-    <nd ref='30225255' />
-    <nd ref='30225256' />
-    <nd ref='30225257' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Buckland Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690916' timestamp='2007-05-31T21:49:10+01:00' visible='true'>
-    <nd ref='29815663' />
-    <nd ref='29505735' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4076802' timestamp='2006-12-16T01:02:12+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21599031' />
-    <nd ref='13564834' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209585' timestamp='2007-01-06T14:48:26+00:00' user='nickw' visible='true'>
-    <nd ref='24924325' />
-    <nd ref='24924072' />
-    <nd ref='24924326' />
-    <nd ref='24924327' />
-    <nd ref='24924328' />
-    <nd ref='24950000' />
-    <nd ref='24924329' />
-    <nd ref='24924330' />
-    <nd ref='24924331' />
-    <nd ref='24924332' />
-    <nd ref='24924333' />
-    <nd ref='24924334' />
-    <nd ref='24924335' />
-    <nd ref='24924336' />
-    <nd ref='24924337' />
-    <nd ref='24924338' />
-    <nd ref='24924339' />
-    <nd ref='21613448' />
-    <nd ref='24924340' />
-    <nd ref='24924341' />
-    <nd ref='21600670' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='School Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209552' timestamp='2007-01-06T14:38:29+00:00' user='nickw' visible='true'>
-    <nd ref='24924102' />
-    <nd ref='24924182' />
-    <nd ref='24924184' />
-    <nd ref='24924186' />
-    <nd ref='24924187' />
-    <nd ref='24924189' />
-    <nd ref='24924191' />
-    <nd ref='24924193' />
-    <nd ref='24924194' />
-    <nd ref='24924196' />
-    <nd ref='24924197' />
-    <nd ref='24924199' />
-    <nd ref='24924201' />
-    <nd ref='24924202' />
-    <nd ref='24924204' />
-    <nd ref='269046' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Monks Brook Greenway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043746' timestamp='2006-12-02T22:59:21+00:00' user='Dean Earley' visible='true'>
-    <nd ref='474848' />
-    <nd ref='21419244' />
-    <nd ref='21419245' />
-    <nd ref='21419246' />
-    <nd ref='21419247' />
-    <nd ref='21419248' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854814' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071282' />
-    <nd ref='13071307' />
-    <nd ref='13071313' />
-    <nd ref='13071257' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tedder Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3289' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true'>
-    <nd ref='675864' />
-    <nd ref='700480' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dimond Hill' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='7986640' timestamp='2007-09-25T17:25:35+01:00' user='mike l' visible='true'>
-    <nd ref='59766050' />
-    <nd ref='59766051' />
-    <nd ref='59766052' />
-    <nd ref='59766053' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Hampton Parkway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3267' timestamp='2008-01-18T20:55:09+00:00' user='jpd' visible='true'>
-    <nd ref='319633' />
-    <nd ref='700544' />
-    <nd ref='319634' />
-    <nd ref='319635' />
-    <nd ref='319636' />
-    <nd ref='319638' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Spring Crescent' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150430' timestamp='2007-05-26T20:15:44+01:00' visible='true'>
-    <nd ref='29632802' />
-    <nd ref='29632800' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Monks Brook Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269337' timestamp='2007-02-04T22:51:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640044' />
-    <nd ref='25640046' />
-    <nd ref='25640047' />
-    <nd ref='25640048' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215231' timestamp='2007-01-10T00:20:41+00:00' user='nickw' visible='true'>
-    <nd ref='24984736' />
-    <nd ref='24984737' />
-    <nd ref='24984738' />
-    <nd ref='24984717' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196523' timestamp='2007-10-16T06:18:14+01:00' user='andrewpmk' visible='true'>
-    <nd ref='24668082' />
-    <nd ref='24667922' />
-    <nd ref='24668185' />
-    <nd ref='24668289' />
-    <nd ref='24668314' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635659' timestamp='2007-05-21T23:43:26+01:00' user='nickw' visible='true'>
-    <nd ref='20972833' />
-    <nd ref='29461238' />
-    <nd ref='29461239' />
-    <nd ref='29461240' />
-    <nd ref='29461241' />
-    <nd ref='29461242' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cook Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2956544' timestamp='2007-10-17T01:00:18+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13885352' />
-    <nd ref='25675140' />
-    <nd ref='13885368' />
-    <nd ref='13885349' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='East Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1934' timestamp='2006-06-17T22:23:29+01:00' user='nickw' visible='true'>
-    <nd ref='661163' />
-    <nd ref='28236176' />
-    <nd ref='655065' />
-    <nd ref='661164' />
-    <nd ref='28237226' />
-    <nd ref='661165' />
-    <nd ref='661166' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Monica Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703354' timestamp='2007-06-03T20:53:28+01:00' visible='true'>
-    <nd ref='29925343' />
-    <nd ref='29925987' />
-    <nd ref='29925988' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Barrington Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3907164' timestamp='2006-10-27T23:39:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110849' />
-    <nd ref='20110931' />
-    <nd ref='20110862' />
-    <nd ref='20110843' />
-    <nd ref='20110928' />
-    <nd ref='20110911' />
-    <nd ref='20110846' />
-    <nd ref='20110808' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beverley Heights' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9676783' timestamp='2007-10-17T00:35:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21624988' />
-    <nd ref='26781146' />
-    <nd ref='10942635' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237111' timestamp='2007-12-06T20:43:10+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296278' />
-    <nd ref='25296289' />
-    <nd ref='25296290' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C354' />
-    <tag k='highway' v='tertiary' />
-    <tag k='maxspeed' v='64' />
-    <tag k='note' v='40 mph' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005417' timestamp='2006-11-19T12:09:23+00:00' user='nickw' visible='true'>
-    <nd ref='21091875' />
-    <nd ref='21091836' />
-    <nd ref='21091876' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nightingale Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150399' timestamp='2007-06-30T12:32:07+01:00' visible='true'>
-    <nd ref='29621211' />
-    <nd ref='29621212' />
-    <nd ref='31072237' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4773358' timestamp='2007-06-17T21:50:43+01:00' visible='true'>
-    <nd ref='30504762' />
-    <nd ref='30504761' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639790' timestamp='2006-06-01T10:01:41+01:00' user='nickw' visible='true'>
-    <nd ref='254939' />
-    <nd ref='254940' />
-    <nd ref='254941' />
-    <nd ref='254942' />
-    <nd ref='254943' />
-    <nd ref='254944' />
-    <nd ref='254945' />
-    <nd ref='254946' />
-    <nd ref='254947' />
-    <nd ref='254948' />
-    <nd ref='254949' />
-    <nd ref='254950' />
-    <nd ref='254951' />
-    <nd ref='254952' />
-    <nd ref='254953' />
-    <nd ref='254954' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4743742' timestamp='2007-06-12T00:14:49+01:00' user='nickw' visible='true'>
-    <nd ref='30229560' />
-    <nd ref='30229567' />
-    <nd ref='30229568' />
-    <nd ref='30229569' />
-    <nd ref='30229570' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Creedy Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4628074' timestamp='2007-05-20T18:03:06+01:00' visible='true'>
-    <nd ref='29392356' />
-    <nd ref='29392379' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Meadow Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134044' timestamp='2007-09-24T20:32:23+01:00' user='mike l' visible='true'>
-    <nd ref='305561' />
-    <nd ref='269319' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Baddesley Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='9674297' timestamp='2007-10-16T23:45:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726306' />
-    <nd ref='9726305' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Cobbett Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4527223' timestamp='2007-04-27T23:52:58+01:00' visible='true'>
-    <nd ref='21689071' />
-    <nd ref='28107856' />
-    <nd ref='28107858' />
-    <tag k='access' v='private' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hilldown Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342629' timestamp='2007-03-09T20:54:26+00:00' user='nickw' visible='true'>
-    <nd ref='26447404' />
-    <nd ref='26447392' />
-    <nd ref='26447402' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ted Bates Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551445' timestamp='2007-05-01T23:50:26+01:00' user='nickw' visible='true'>
-    <nd ref='28414285' />
-    <nd ref='28414287' />
-    <nd ref='28414288' />
-    <nd ref='28414291' />
-    <nd ref='28414292' />
-    <nd ref='28414262' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Claudeen Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540753' timestamp='2007-04-29T21:43:33+01:00' visible='true'>
-    <nd ref='28249893' />
-    <nd ref='28249934' />
-    <nd ref='28249941' />
-    <nd ref='28249936' />
-    <nd ref='28249937' />
-    <nd ref='28249938' />
-    <nd ref='28249940' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whitehouse Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4363115' timestamp='2007-03-17T20:47:49+00:00' user='nickw' visible='true'>
-    <nd ref='657766' />
-    <nd ref='3915748' />
-    <nd ref='3915750' />
-    <nd ref='26593143' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bishops Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260034' timestamp='2006-05-22T22:20:34+01:00' user='nickw' visible='true'>
-    <nd ref='655065' />
-    <nd ref='26727723' />
-    <nd ref='10942493' />
-    <nd ref='15433277' />
-    <nd ref='657721' />
-    <nd ref='10942559' />
-    <nd ref='657722' />
-    <nd ref='18500678' />
-    <nd ref='657723' />
-    <nd ref='28244291' />
-    <nd ref='28244286' />
-    <nd ref='28244146' />
-    <nd ref='28244018' />
-    <nd ref='28244295' />
-    <nd ref='28244052' />
-    <nd ref='28243948' />
-    <nd ref='28243928' />
-    <nd ref='657726' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Kathleen Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8120155' timestamp='2007-08-12T23:14:03+01:00' user='Edward' visible='true'>
-    <nd ref='700496' />
-    <nd ref='700497' />
-    <nd ref='700498' />
-    <nd ref='700499' />
-    <nd ref='700501' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Ash Tree Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150426' timestamp='2007-05-28T19:39:54+01:00' visible='true'>
-    <nd ref='29631642' />
-    <nd ref='29631649' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539752' timestamp='2007-04-29T20:03:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='26727694' />
-    <nd ref='28240330' />
-    <nd ref='28240328' />
-    <nd ref='28240327' />
-    <nd ref='28240324' />
-    <nd ref='28240326' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vokes Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605556' timestamp='2007-08-12T23:11:02+01:00' user='Edward' visible='true'>
-    <nd ref='29145251' />
-    <nd ref='254671' />
-    <nd ref='29001342' />
-    <nd ref='700436' />
-    <nd ref='700435' />
-    <nd ref='254670' />
-    <nd ref='650752' />
-    <nd ref='29145093' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8148513' timestamp='2007-04-29T20:37:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243640' />
-    <nd ref='28243642' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redhill Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126829' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964162' />
-    <nd ref='14964164' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hollingbourne Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604562' timestamp='2007-05-15T20:53:19+01:00' user='nickw' visible='true'>
-    <nd ref='29134822' />
-    <nd ref='29134104' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bembridge Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8183117' timestamp='2006-10-22T23:24:27+01:00' user='Ben' visible='true'>
-    <nd ref='254736' />
-    <nd ref='19111050' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-  </way>
-  <way id='4548019' timestamp='2007-05-01T10:05:40+01:00' visible='true'>
-    <nd ref='28372758' />
-    <nd ref='28372759' />
-    <nd ref='28372747' />
-    <nd ref='28372760' />
-    <nd ref='28372761' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sycamore Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535824' timestamp='2007-04-29T01:04:22+01:00' visible='true'>
-    <nd ref='28173892' />
-    <nd ref='28173898' />
-    <nd ref='28173903' />
-    <nd ref='28173862' />
-    <nd ref='28173865' />
-    <nd ref='28173871' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Petworth Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9652508' timestamp='2007-10-16T17:59:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254894' />
-    <nd ref='14743163' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150116' timestamp='2007-10-16T02:44:11+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29530518' />
-    <nd ref='29703877' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Allbrook Knoll' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999273' timestamp='2007-05-27T22:10:37+01:00' visible='true'>
-    <nd ref='19892129' />
-    <nd ref='20972791' />
-    <nd ref='20972792' />
-    <nd ref='20972793' />
-    <nd ref='20972794' />
-    <nd ref='20972795' />
-    <nd ref='20972796' />
-    <nd ref='26575750' />
-    <nd ref='20972797' />
-    <nd ref='20972798' />
-    <nd ref='26447409' />
-    <nd ref='26575746' />
-    <nd ref='20972799' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015803' timestamp='2006-11-26T00:07:51+00:00' user='nickw' visible='true'>
-    <nd ref='469868' />
-    <nd ref='21275777' />
-    <nd ref='21275776' />
-    <nd ref='21275633' />
-    <nd ref='21275756' />
-    <nd ref='21275758' />
-    <nd ref='11419695' />
-    <nd ref='21275763' />
-    <nd ref='11419697' />
-    <nd ref='11419676' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Firgrove Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639435' timestamp='2006-06-01T09:38:38+01:00' user='nickw' visible='true'>
-    <nd ref='324349' />
-    <nd ref='430657' />
-    <nd ref='324350' />
-    <nd ref='324351' />
-    <nd ref='324352' />
-    <nd ref='324353' />
-    <nd ref='18393861' />
-    <nd ref='324354' />
-    <nd ref='324355' />
-    <nd ref='254369' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Carlton Crescent' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10314689' timestamp='2007-12-06T20:39:11+00:00' user='nickw' visible='true'>
-    <nd ref='87239993' />
-    <nd ref='87240154' />
-    <nd ref='87240155' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rylandes Court' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='9652509' timestamp='2007-10-16T17:59:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25303939' />
-    <nd ref='28243555' />
-    <nd ref='19227228' />
-    <nd ref='19227230' />
-    <nd ref='25303931' />
-    <nd ref='28243552' />
-    <nd ref='19228092' />
-    <nd ref='28243548' />
-    <nd ref='243870' />
-    <nd ref='28243558' />
-    <nd ref='422982' />
-    <nd ref='28243544' />
-    <nd ref='28243537' />
-    <nd ref='19227255' />
-    <nd ref='19227257' />
-    <nd ref='28243465' />
-    <nd ref='25303930' />
-    <nd ref='243877' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4635771' timestamp='2007-05-22T00:01:40+01:00' user='nickw' visible='true'>
-    <nd ref='29463039' />
-    <nd ref='29463038' />
-    <nd ref='29463037' />
-    <nd ref='29463035' />
-    <nd ref='29463034' />
-    <nd ref='29463032' />
-    <nd ref='29463046' />
-    <nd ref='29463045' />
-    <nd ref='29463043' />
-    <nd ref='29463042' />
-    <nd ref='29463041' />
-    <nd ref='29463039' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639888' timestamp='2006-06-04T00:48:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743166' />
-    <nd ref='7170911' />
-    <nd ref='19227234' />
-    <nd ref='243871' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hill Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4644817' timestamp='2007-05-24T11:23:11+01:00' visible='true'>
-    <nd ref='29548693' />
-    <nd ref='29548694' />
-    <nd ref='25340630' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Burns Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135241' timestamp='2007-10-29T15:43:40+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30290776' />
-    <nd ref='30290775' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215236' timestamp='2007-01-10T00:20:43+00:00' user='nickw' visible='true'>
-    <nd ref='21507792' />
-    <nd ref='21507791' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Wood Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237838' timestamp='2007-09-17T22:55:05+01:00' user='mike l' visible='true'>
-    <nd ref='25296285' />
-    <nd ref='25296273' />
-    <nd ref='25302622' />
-    <nd ref='25302623' />
-    <nd ref='25302629' />
-    <nd ref='25302624' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Judd Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130053' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20133164' />
-    <nd ref='20133166' />
-    <nd ref='20133168' />
-    <nd ref='20133169' />
-    <nd ref='20133182' />
-    <nd ref='20133193' />
-    <nd ref='20133197' />
-    <nd ref='20133200' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Duddon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130049' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20130952' />
-    <nd ref='20130955' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Camelia Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215241' timestamp='2007-01-10T00:20:48+00:00' user='nickw' visible='true'>
-    <nd ref='21636734' />
-    <nd ref='24984755' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043824' timestamp='2006-12-02T23:18:58+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20964740' />
-    <nd ref='21419617' />
-    <nd ref='21419461' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parkville Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133977' timestamp='2007-06-10T18:15:28+01:00' visible='true'>
-    <nd ref='29392354' />
-    <nd ref='29392339' />
-    <nd ref='17721036' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cranbury Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4556166' timestamp='2007-05-02T21:45:02+01:00' user='nickw' visible='true'>
-    <nd ref='28539402' />
-    <nd ref='28539405' />
-    <nd ref='28539422' />
-    <nd ref='28230875' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Alum Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998663' timestamp='2006-11-12T20:47:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='19890088' />
-    <nd ref='20967598' />
-    <nd ref='20967599' />
-    <nd ref='20967600' />
-    <nd ref='20967601' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15722938' timestamp='2007-12-08T20:00:25+00:00' user='nickw' visible='true'>
-    <nd ref='157188682' />
-    <nd ref='157190810' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gemini Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556656' timestamp='2007-10-29T08:17:58+00:00' user='nickw' visible='true'>
-    <nd ref='91126048' />
-    <nd ref='91126050' />
-    <nd ref='91126053' />
-    <nd ref='91126054' />
-    <nd ref='91126056' />
-    <nd ref='91126058' />
-    <nd ref='91117379' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196519' timestamp='2007-01-04T21:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='24667950' />
-    <nd ref='21613503' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='16413437' timestamp='2007-12-14T21:31:22+00:00' user='nickw' visible='true'>
-    <nd ref='325677' />
-    <nd ref='169415698' />
-    <nd ref='169415702' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Queens Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546070' timestamp='2007-04-30T21:49:14+01:00' user='nickw' visible='true'>
-    <nd ref='661184' />
-    <nd ref='28341786' />
-    <nd ref='28341787' />
-    <nd ref='28341788' />
-    <nd ref='28341789' />
-    <nd ref='25640038' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15943995' timestamp='2007-12-10T19:23:05+00:00' user='sladen' visible='true'>
-    <nd ref='21157474' />
-    <nd ref='160239958' />
-    <nd ref='160239960' />
-    <nd ref='160239961' />
-    <nd ref='160239962' />
-    <nd ref='160239964' />
-    <nd ref='160239965' />
-    <nd ref='160239967' />
-    <nd ref='160239968' />
-    <nd ref='17658119' />
-    <tag k='railway' v='rail' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4773291' timestamp='2007-06-17T21:40:04+01:00' visible='true'>
-    <nd ref='25296017' />
-    <nd ref='30504338' />
-    <nd ref='30504339' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743135' timestamp='2007-06-11T22:16:55+01:00' visible='true'>
-    <nd ref='30225808' />
-    <nd ref='30224279' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084413' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='242727' />
-    <nd ref='21689050' />
-    <nd ref='21689113' />
-    <nd ref='21689114' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Aster Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015828' timestamp='2006-11-26T00:16:07+00:00' user='nickw' visible='true'>
-    <nd ref='11419592' />
-    <nd ref='11419600' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Salcombe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1189534' timestamp='2006-05-21T09:22:43+01:00' user='nickw' visible='true'>
-    <nd ref='4931456' />
-    <nd ref='19890070' />
-    <nd ref='319630' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dukes Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4077027' timestamp='2007-10-28T10:40:40+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='21092040' />
-    <nd ref='21092041' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Rownhams Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3275' timestamp='2006-06-04T00:35:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700430' />
-    <nd ref='700431' />
-    <nd ref='700432' />
-    <nd ref='700433' />
-    <nd ref='700434' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Osborne Road North' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4008574' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='11419555' />
-    <nd ref='21141396' />
-    <nd ref='21141397' />
-    <nd ref='21141398' />
-    <nd ref='21141386' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Twyford Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999831' timestamp='2006-11-13T21:39:23+00:00' user='nickw' visible='true'>
-    <nd ref='20976686' />
-    <nd ref='20976687' />
-    <nd ref='20976688' />
-    <nd ref='28246353' />
-    <nd ref='20976689' />
-    <nd ref='20976690' />
-    <nd ref='20976691' />
-    <nd ref='20976692' />
-    <nd ref='20976693' />
-    <nd ref='20976694' />
-    <nd ref='20976695' />
-    <nd ref='243879' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dale Valley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773507' timestamp='2007-06-17T22:14:23+01:00' visible='true'>
-    <nd ref='30508361' />
-    <nd ref='30508368' />
-    <nd ref='30410999' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578757' timestamp='2006-10-07T00:25:25+01:00' user='nickw' visible='true'>
-    <nd ref='17724243' />
-    <nd ref='17724252' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coventry Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135482' timestamp='2007-01-10T00:20:46+00:00' user='nickw' visible='true'>
-    <nd ref='28183712' />
-    <nd ref='28183715' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fitzroy Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540335' timestamp='2007-04-29T21:10:00+01:00' visible='true'>
-    <nd ref='28194414' />
-    <nd ref='28194416' />
-    <nd ref='28194415' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whinchat Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661845' timestamp='2007-10-16T11:34:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29632499' />
-    <nd ref='29632501' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749647' timestamp='2007-06-13T09:33:14+01:00' visible='true'>
-    <nd ref='30290742' />
-    <nd ref='30291038' />
-    <nd ref='30291039' />
-    <nd ref='30290741' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679927' timestamp='2007-05-28T19:39:37+01:00' visible='true'>
-    <nd ref='29730530' />
-    <nd ref='29730531' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Passfield Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947662' timestamp='2007-09-10T23:55:25+01:00' visible='true'>
-    <nd ref='8596760' />
-    <nd ref='48958681' />
-    <nd ref='48958685' />
-    <nd ref='48958687' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Western Esplanade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077045' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true'>
-    <nd ref='21600418' />
-    <nd ref='21600419' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999282' timestamp='2007-05-21T23:45:58+01:00' user='nickw' visible='true'>
-    <nd ref='20972819' />
-    <nd ref='20972824' />
-    <nd ref='20972826' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Richmond Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2809605' timestamp='2006-08-07T20:18:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='12801364' />
-    <nd ref='12801365' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Osterly Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948198' timestamp='2007-09-11T00:11:42+01:00' visible='true'>
-    <nd ref='27496129' />
-    <nd ref='48958690' />
-    <tag k='highway' v='steps' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536216' timestamp='2007-12-07T13:46:56+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='25895692' />
-    <nd ref='125577125' />
-    <nd ref='28180197' />
-    <nd ref='28180198' />
-    <nd ref='28180199' />
-    <nd ref='28180201' />
-    <nd ref='28180202' />
-    <nd ref='28180203' />
-    <nd ref='28180204' />
-    <nd ref='28180205' />
-    <nd ref='28180206' />
-    <nd ref='28180207' />
-    <nd ref='28180208' />
-    <nd ref='28180209' />
-    <nd ref='28180210' />
-    <nd ref='28180216' />
-    <nd ref='28180211' />
-    <nd ref='28180212' />
-    <nd ref='154765446' />
-    <nd ref='154765447' />
-    <nd ref='154765449' />
-    <nd ref='154765450' />
-    <nd ref='154765452' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='University Parkway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4079324' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636943' />
-    <nd ref='21636946' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kentish Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077575' timestamp='2006-12-16T21:53:08+00:00' user='nickw' visible='true'>
-    <nd ref='21615429' />
-    <nd ref='21615430' />
-    <nd ref='21615432' />
-    <nd ref='21615433' />
-    <nd ref='21615434' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mandela Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3713849' timestamp='2007-10-26T13:36:19+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='18398455' />
-    <nd ref='18398456' />
-    <nd ref='18398457' />
-    <nd ref='18398458' />
-    <nd ref='87874506' />
-    <nd ref='18398459' />
-    <nd ref='18398460' />
-    <nd ref='18398461' />
-    <nd ref='18398462' />
-    <nd ref='18398464' />
-    <nd ref='18398466' />
-    <nd ref='18398467' />
-    <nd ref='18398442' />
-    <nd ref='18398443' />
-    <nd ref='18398444' />
-    <nd ref='18398445' />
-    <nd ref='27021802' />
-    <nd ref='27021803' />
-    <nd ref='27021804' />
-    <nd ref='27021805' />
-    <nd ref='27021806' />
-    <nd ref='27021807' />
-    <nd ref='27021808' />
-    <nd ref='18398447' />
-    <nd ref='27021809' />
-    <nd ref='27021812' />
-    <nd ref='27021811' />
-    <nd ref='27021810' />
-    <nd ref='18398448' />
-    <nd ref='27021813' />
-    <nd ref='27021814' />
-    <nd ref='27021815' />
-    <nd ref='18398450' />
-    <nd ref='18398451' />
-    <nd ref='18398452' />
-    <nd ref='18398453' />
-    <nd ref='18398454' />
-    <nd ref='18398455' />
-    <tag k='leisure' v='common' />
-    <tag k='name' v='Southampton Common' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8150193' timestamp='2007-05-24T11:23:09+01:00' visible='true'>
-    <nd ref='29548687' />
-    <nd ref='29548690' />
-    <nd ref='29387396' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Tennyson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540975' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252969' />
-    <nd ref='28252971' />
-    <nd ref='28252972' />
-    <nd ref='28252974' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Prunus Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540320' timestamp='2007-04-29T21:09:46+01:00' visible='true'>
-    <nd ref='28194378' />
-    <nd ref='28194379' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Goldcrest Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150887' timestamp='2007-05-31T21:31:15+01:00' visible='true'>
-    <nd ref='29762788' />
-    <nd ref='29815061' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4768596' timestamp='2007-06-17T22:30:38+01:00' visible='true'>
-    <nd ref='30410999' />
-    <nd ref='30411000' />
-    <nd ref='30511428' />
-    <nd ref='30411001' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bealieu Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8353339' timestamp='2007-10-30T16:47:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25282106' />
-    <nd ref='25282108' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125059' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071428' />
-    <nd ref='13071429' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rutland Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4691005' timestamp='2007-05-31T22:07:58+01:00' visible='true'>
-    <nd ref='29816427' />
-    <nd ref='29816591' />
-    <nd ref='29816592' />
-    <nd ref='29816593' />
-    <nd ref='29816594' />
-    <nd ref='29816595' />
-    <nd ref='29816596' />
-    <nd ref='29816417' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8437642' timestamp='2007-10-30T16:04:02+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29392363' />
-    <nd ref='29392428' />
-    <tag k='note' v='FIXME Emergency access only' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999324' timestamp='2007-10-16T23:54:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973102' />
-    <nd ref='20973105' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548016' timestamp='2007-05-01T10:05:39+01:00' visible='true'>
-    <nd ref='28372726' />
-    <nd ref='28372727' />
-    <nd ref='28372728' />
-    <nd ref='28372729' />
-    <nd ref='28372730' />
-    <nd ref='28372731' />
-    <nd ref='28372732' />
-    <nd ref='28372733' />
-    <nd ref='28372758' />
-    <nd ref='28372734' />
-    <nd ref='28372803' />
-    <nd ref='28372735' />
-    <nd ref='28372736' />
-    <nd ref='28372737' />
-    <nd ref='28372796' />
-    <nd ref='28372738' />
-    <nd ref='28372739' />
-    <nd ref='28372740' />
-    <nd ref='28372786' />
-    <nd ref='28372741' />
-    <nd ref='28372742' />
-    <nd ref='21141491' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Warren Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119876' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319649' />
-    <nd ref='319650' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Livingstone Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3906610' timestamp='2006-10-27T22:49:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20107342' />
-    <nd ref='474649' />
-    <nd ref='20107350' />
-    <nd ref='15028849' />
-    <nd ref='474650' />
-    <nd ref='20107337' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C194' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235060' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282078' />
-    <nd ref='25282128' />
-    <nd ref='25282100' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4527219' timestamp='2007-04-27T23:51:05+01:00' visible='true'>
-    <nd ref='28107848' />
-    <nd ref='28107847' />
-    <nd ref='28107846' />
-    <nd ref='28107845' />
-    <nd ref='28107844' />
-    <nd ref='28107843' />
-    <nd ref='28107842' />
-    <nd ref='16963794' />
-    <tag k='access' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540443' timestamp='2007-04-29T21:18:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21091886' />
-    <nd ref='28247347' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Radway Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698137' timestamp='2007-06-02T18:58:34+01:00' visible='true'>
-    <nd ref='29871557' />
-    <nd ref='29871562' />
-    <nd ref='29871565' />
-    <nd ref='29871568' />
-    <nd ref='29871570' />
-    <nd ref='29871573' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Philips Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9044258' timestamp='2007-10-12T14:01:25+01:00' user='SteveC' visible='true'>
-    <nd ref='66584633' />
-    <nd ref='66583980' />
-    <nd ref='66583519' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4535828' timestamp='2007-04-29T01:04:30+01:00' visible='true'>
-    <nd ref='28173865' />
-    <nd ref='28173887' />
-    <nd ref='28173876' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Petworth Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061545' timestamp='2006-12-09T09:51:52+00:00' user='nickw' visible='true'>
-    <nd ref='331360' />
-    <nd ref='388915' />
-    <nd ref='388916' />
-    <nd ref='27021774' />
-    <nd ref='388917' />
-    <nd ref='388918' />
-    <nd ref='388919' />
-    <nd ref='388920' />
-    <nd ref='388921' />
-    <nd ref='27021773' />
-    <nd ref='388956' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glenwood Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237901' timestamp='2007-01-19T18:57:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254896' />
-    <nd ref='14743167' />
-    <nd ref='14743164' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Hill Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546166' timestamp='2007-04-30T22:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='28342558' />
-    <nd ref='28231268' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lavender Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8147388' timestamp='2007-11-28T12:24:44+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29392338' />
-    <nd ref='29392358' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chamberlayne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2956548' timestamp='2007-10-17T01:00:18+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13885363' />
-    <nd ref='13885354' />
-    <nd ref='27238974' />
-    <nd ref='301553' />
-    <nd ref='13885365' />
-    <nd ref='13885368' />
-    <tag k='highway' v='unclassified' />
-    <tag k='note' v='The northernmost section of this way is marked as "extrapolated"' />
-    <tag k='name' v='Back of the Walls' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639837' timestamp='2007-05-07T23:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254347' />
-    <nd ref='254348' />
-    <nd ref='254349' />
-    <nd ref='254350' />
-    <nd ref='254351' />
-    <nd ref='254352' />
-    <nd ref='254353' />
-    <nd ref='254354' />
-    <nd ref='254355' />
-    <nd ref='254356' />
-    <nd ref='254357' />
-    <nd ref='330227' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='bridleway' />
-    <tag k='name' v='Lordswood Greenway' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3102935' timestamp='2006-09-04T02:07:01+01:00' user='Dean Earley' visible='true'>
-    <nd ref='329590' />
-    <nd ref='413144' />
-    <tag k='highway' v='residential' />
-    <tag k='complete' v='no' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546537' timestamp='2007-04-30T23:45:38+01:00' user='nickw' visible='true'>
-    <nd ref='28345074' />
-    <nd ref='28345068' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635651' timestamp='2007-12-10T19:19:36+00:00' user='sladen' visible='true'>
-    <nd ref='29461216' />
-    <nd ref='29461217' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Craven Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='12511303' timestamp='2007-12-10T19:32:11+00:00' user='sladen' visible='true'>
-    <nd ref='113962264' />
-    <nd ref='113962265' />
-    <nd ref='113962266' />
-    <nd ref='113962267' />
-    <nd ref='113962268' />
-    <nd ref='113962269' />
-    <nd ref='113962270' />
-    <nd ref='113962271' />
-    <nd ref='113962273' />
-    <nd ref='113962274' />
-    <nd ref='113962275' />
-    <nd ref='113962276' />
-    <nd ref='113962277' />
-    <nd ref='113962278' />
-    <nd ref='113962280' />
-    <nd ref='113962281' />
-    <nd ref='113962283' />
-    <nd ref='113962285' />
-    <nd ref='113962286' />
-    <nd ref='113962287' />
-    <nd ref='113962288' />
-    <nd ref='113962290' />
-    <nd ref='113962292' />
-    <nd ref='113962293' />
-    <nd ref='113962295' />
-    <nd ref='113962296' />
-    <nd ref='113962298' />
-    <nd ref='113962300' />
-    <nd ref='113962301' />
-    <nd ref='113962302' />
-    <nd ref='113962303' />
-    <nd ref='113962305' />
-    <nd ref='113962306' />
-    <nd ref='113962307' />
-    <nd ref='113962308' />
-    <nd ref='113962309' />
-    <nd ref='113962312' />
-    <nd ref='113962313' />
-    <nd ref='113962314' />
-    <nd ref='113962316' />
-    <nd ref='113962317' />
-    <nd ref='113962319' />
-    <nd ref='113962320' />
-    <nd ref='113962321' />
-    <nd ref='113962322' />
-    <nd ref='113962323' />
-    <nd ref='113962324' />
-    <nd ref='113962325' />
-    <nd ref='113962326' />
-    <nd ref='113962327' />
-    <nd ref='113962264' />
-    <tag k='railway' v='miniature' />
-    <tag k='note' v='from landsat' />
-    <tag k='name' v='Eastleigh Lakeside Steam Railway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4677229' timestamp='2007-05-28T10:59:34+01:00' visible='true'>
-    <nd ref='29704619' />
-    <nd ref='29704957' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Nook' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148509' timestamp='2007-04-29T20:37:19+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243562' />
-    <nd ref='28243569' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wykeham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639766' timestamp='2007-05-22T00:20:33+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464237' />
-    <nd ref='254956' />
-    <nd ref='254957' />
-    <nd ref='254958' />
-    <nd ref='254959' />
-    <nd ref='254960' />
-    <nd ref='254961' />
-    <nd ref='254962' />
-    <nd ref='254963' />
-    <nd ref='254964' />
-    <nd ref='19228093' />
-    <nd ref='254965' />
-    <nd ref='254966' />
-    <nd ref='254967' />
-    <nd ref='254968' />
-    <nd ref='254969' />
-    <nd ref='254970' />
-    <nd ref='254971' />
-    <nd ref='254972' />
-    <nd ref='254973' />
-    <nd ref='254974' />
-    <nd ref='254975' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='3091883' timestamp='2006-09-03T00:38:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743163' />
-    <nd ref='25303938' />
-    <nd ref='14743166' />
-    <nd ref='14743165' />
-    <nd ref='25303937' />
-    <nd ref='25303936' />
-    <nd ref='14743164' />
-    <nd ref='25303935' />
-    <nd ref='14743163' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123349' timestamp='2007-10-17T00:35:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9727807' />
-    <nd ref='9727806' />
-    <nd ref='8596763' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A334' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bitterne Road East' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4015824' timestamp='2006-11-26T00:16:01+00:00' user='nickw' visible='true'>
-    <nd ref='21275694' />
-    <nd ref='21275628' />
-    <nd ref='21275701' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Benson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4717670' timestamp='2007-06-07T11:59:04+01:00' visible='true'>
-    <nd ref='29926149' />
-    <nd ref='29925988' />
-    <nd ref='29926151' />
-    <nd ref='29926150' />
-    <nd ref='29926149' />
-    <nd ref='29925340' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569962' timestamp='2007-05-05T08:53:00+01:00' user='nickw' visible='true'>
-    <nd ref='28830572' />
-    <nd ref='28830585' />
-    <nd ref='28830586' />
-    <nd ref='28830587' />
-    <nd ref='28830588' />
-    <nd ref='28830589' />
-    <nd ref='28830571' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Exeter Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545715' timestamp='2007-04-30T20:40:51+01:00' visible='true'>
-    <nd ref='28339169' />
-    <nd ref='28339202' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Benny Hill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947658' timestamp='2007-12-10T19:21:49+00:00' user='sladen' visible='true'>
-    <nd ref='21157476' />
-    <nd ref='160237670' />
-    <nd ref='21157480' />
-    <nd ref='21157475' />
-    <tag k='railway' v='rail' />
-    <tag k='tunnel' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='layer' v='-1' />
-  </way>
-  <way id='3058307' timestamp='2007-12-10T20:51:01+00:00' user='sladen' visible='true'>
-    <nd ref='14567154' />
-    <nd ref='2773024' />
-    <nd ref='2773033' />
-    <nd ref='2773037' />
-    <nd ref='27021712' />
-    <nd ref='2773041' />
-    <nd ref='2773044' />
-    <nd ref='2773047' />
-    <nd ref='27021713' />
-    <nd ref='27021715' />
-    <nd ref='27021717' />
-    <nd ref='2773050' />
-    <nd ref='2773054' />
-    <nd ref='28249928' />
-    <nd ref='2773057' />
-    <nd ref='27021719' />
-    <nd ref='28249923' />
-    <nd ref='27021721' />
-    <nd ref='2773491' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Tebourba Way' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4661837' timestamp='2007-10-16T11:34:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29632440' />
-    <nd ref='29632443' />
-    <nd ref='29632444' />
-    <nd ref='29632445' />
-    <nd ref='29632448' />
-    <nd ref='29632460' />
-    <nd ref='29632449' />
-    <nd ref='29632451' />
-    <nd ref='29632452' />
-    <nd ref='29632471' />
-    <nd ref='24924228' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386816' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781201' />
-    <nd ref='26781202' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Spring Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625934' timestamp='2007-05-20T10:19:36+01:00' user='nickw' visible='true'>
-    <nd ref='29380424' />
-    <nd ref='29380425' />
-    <nd ref='29380426' />
-    <nd ref='29380427' />
-    <nd ref='29380428' />
-    <nd ref='29380429' />
-    <nd ref='29380430' />
-    <nd ref='29380440' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Channel's Farm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2350784' timestamp='2007-05-30T22:26:35+01:00' user='nickw' visible='true'>
-    <nd ref='254470' />
-    <nd ref='9280981' />
-    <nd ref='9727811' />
-    <nd ref='26348506' />
-    <nd ref='9280982' />
-    <nd ref='29796853' />
-    <nd ref='13071278' />
-    <nd ref='254472' />
-    <nd ref='10217120' />
-    <nd ref='26945325' />
-    <nd ref='10217117' />
-    <nd ref='10217121' />
-    <nd ref='10217218' />
-    <nd ref='10216403' />
-    <nd ref='10216412' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westend Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4541325' timestamp='2007-04-29T22:57:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244177' />
-    <nd ref='28244262' />
-    <nd ref='28244256' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Richie Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727655' timestamp='2007-06-09T19:43:22+01:00' user='nickw' visible='true'>
-    <nd ref='30124214' />
-    <nd ref='30124356' />
-    <nd ref='30124361' />
-    <nd ref='30124362' />
-    <nd ref='30124363' />
-    <nd ref='30124364' />
-    <nd ref='30124365' />
-    <nd ref='30124223' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gorselands Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683415' timestamp='2007-05-31T21:23:02+01:00' visible='true'>
-    <nd ref='29762560' />
-    <nd ref='29762562' />
-    <nd ref='29762563' />
-    <nd ref='29762564' />
-    <nd ref='29762565' />
-    <nd ref='29814616' />
-    <nd ref='29814617' />
-    <nd ref='29814618' />
-    <nd ref='29814619' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oakfields' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999859' timestamp='2006-11-13T21:50:59+00:00' user='nickw' visible='true'>
-    <nd ref='20976788' />
-    <nd ref='20976787' />
-    <nd ref='20976786' />
-    <nd ref='20976668' />
-    <nd ref='20976785' />
-    <nd ref='20976784' />
-    <nd ref='20976783' />
-    <nd ref='20976782' />
-    <nd ref='20976781' />
-    <nd ref='20976780' />
-    <nd ref='20976763' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pentire Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13252580' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true'>
-    <nd ref='122344801' />
-    <nd ref='122344813' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Endeavour Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131448' timestamp='2007-10-16T20:09:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20972787' />
-    <nd ref='20972788' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996914' timestamp='2006-11-10T21:59:07+00:00' user='nickw' visible='true'>
-    <nd ref='20957232' />
-    <nd ref='20957250' />
-    <nd ref='20957233' />
-    <nd ref='20957234' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Princes Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136292' timestamp='2007-05-16T00:37:10+01:00' visible='true'>
-    <nd ref='14727950' />
-    <nd ref='254696' />
-    <nd ref='14727988' />
-    <nd ref='20964737' />
-    <nd ref='254697' />
-    <nd ref='4931456' />
-    <tag k='width' v='3' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788473' timestamp='2008-01-04T19:32:08+00:00' user='nickw' visible='true'>
-    <nd ref='206163068' />
-    <nd ref='206163069' />
-    <nd ref='206163070' />
-    <nd ref='206163071' />
-    <nd ref='206163072' />
-    <nd ref='206163073' />
-    <nd ref='206163074' />
-    <nd ref='206163075' />
-    <nd ref='206163076' />
-    <nd ref='206163077' />
-    <nd ref='206163078' />
-    <nd ref='206163079' />
-    <nd ref='206163080' />
-    <nd ref='206163081' />
-    <nd ref='206163082' />
-    <nd ref='206163083' />
-    <nd ref='206163084' />
-    <nd ref='206163085' />
-    <nd ref='206163086' />
-    <nd ref='206163087' />
-    <nd ref='206163088' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Devon Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999856' timestamp='2006-11-13T21:50:58+00:00' user='nickw' visible='true'>
-    <nd ref='20976779' />
-    <nd ref='20976778' />
-    <nd ref='20976771' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leicester Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077038' timestamp='2006-12-16T10:14:12+00:00' user='nickw' visible='true'>
-    <nd ref='21600500' />
-    <nd ref='21600424' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Settle Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585179' timestamp='2007-05-12T09:40:25+01:00' user='nickw' visible='true'>
-    <nd ref='29001328' />
-    <nd ref='29001329' />
-    <nd ref='29001330' />
-    <nd ref='29001331' />
-    <nd ref='29001311' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Augustine Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639427' timestamp='2006-06-01T09:38:04+01:00' user='nickw' visible='true'>
-    <nd ref='402741' />
-    <nd ref='402742' />
-    <nd ref='430649' />
-    <nd ref='18232068' />
-    <nd ref='402743' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Morris Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8151340' timestamp='2007-06-02T19:55:00+01:00' visible='true'>
-    <nd ref='28384701' />
-    <nd ref='28384700' />
-    <nd ref='28384694' />
-    <nd ref='28384704' />
-    <nd ref='28384693' />
-    <nd ref='28384705' />
-    <nd ref='28384692' />
-    <nd ref='28384691' />
-    <nd ref='28384690' />
-    <nd ref='28384695' />
-    <nd ref='28384694' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4005409' timestamp='2007-11-18T19:22:47+00:00' user='nickw' visible='true'>
-    <nd ref='21091847' />
-    <nd ref='122352472' />
-    <nd ref='469859' />
-    <nd ref='469860' />
-    <nd ref='469861' />
-    <nd ref='20957236' />
-    <nd ref='469862' />
-    <nd ref='20957235' />
-    <nd ref='469863' />
-    <nd ref='469864' />
-    <nd ref='469865' />
-    <nd ref='469866' />
-    <nd ref='122315313' />
-    <nd ref='469867' />
-    <nd ref='469868' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Park Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079297' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636810' />
-    <nd ref='21636809' />
-    <nd ref='21636796' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pine Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540764' timestamp='2007-04-29T21:43:35+01:00' visible='true'>
-    <nd ref='28249971' />
-    <nd ref='28250001' />
-    <nd ref='28250003' />
-    <nd ref='28250004' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Westbury Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999328' timestamp='2007-12-10T21:07:22+00:00' user='sladen' visible='true'>
-    <nd ref='160423786' />
-    <nd ref='8596750' />
-    <nd ref='8596815' />
-    <nd ref='20973088' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4539433' timestamp='2007-04-29T19:27:54+01:00' user='Andy Street' visible='true'>
-    <nd ref='28236102' />
-    <nd ref='28236103' />
-    <nd ref='28236106' />
-    <nd ref='28236105' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saint Aubin's Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269320' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639985' />
-    <nd ref='25639970' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tankerville Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585154' timestamp='2007-05-12T09:30:30+01:00' user='nickw' visible='true'>
-    <nd ref='29000943' />
-    <nd ref='29000942' />
-    <nd ref='29000941' />
-    <nd ref='29000940' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4651181' timestamp='2007-10-16T11:34:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29595100' />
-    <nd ref='29595081' />
-    <nd ref='29588107' />
-    <nd ref='29588102' />
-    <nd ref='29595100' />
-    <tag k='landuse' v='retail' />
-    <tag k='name' v='swan centre' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5780675' timestamp='2007-09-15T19:10:58+01:00' user='mike l' visible='true'>
-    <nd ref='45116797' />
-    <nd ref='52181337' />
-    <nd ref='45116801' />
-    <nd ref='45116803' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4079320' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636926' />
-    <nd ref='21636922' />
-    <nd ref='21275693' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='York Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084954' timestamp='2006-09-02T14:28:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254369' />
-    <nd ref='254370' />
-    <nd ref='402751' />
-    <nd ref='254371' />
-    <nd ref='254372' />
-    <nd ref='254373' />
-    <nd ref='7015241' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726287' timestamp='2007-12-08T20:33:32+00:00' user='nickw' visible='true'>
-    <nd ref='157238294' />
-    <nd ref='157238308' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fraser Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535832' timestamp='2007-04-29T01:04:31+01:00' visible='true'>
-    <nd ref='28173932' />
-    <nd ref='28173958' />
-    <nd ref='28173967' />
-    <nd ref='28173963' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaulieu Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743342' timestamp='2007-06-11T22:35:20+01:00' visible='true'>
-    <nd ref='30227013' />
-    <nd ref='30225808' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604642' timestamp='2007-05-15T20:58:26+01:00' user='nickw' visible='true'>
-    <nd ref='29135561' />
-    <nd ref='29135559' />
-    <nd ref='29134119' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Summerfield Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743745' timestamp='2007-06-12T00:14:50+01:00' user='nickw' visible='true'>
-    <nd ref='30229570' />
-    <nd ref='30229593' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119880' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='310890' />
-    <nd ref='310893' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cambridge Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15724657' timestamp='2007-12-08T20:15:00+00:00' user='nickw' visible='true'>
-    <nd ref='157205669' />
-    <nd ref='157209194' />
-    <nd ref='157209198' />
-    <nd ref='157209203' />
-    <nd ref='157209208' />
-    <nd ref='157209213' />
-    <nd ref='157209218' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4083485' timestamp='2008-02-03T06:10:52+00:00' user='sladen' visible='true'>
-    <nd ref='21677589' />
-    <nd ref='245149561' />
-    <nd ref='21677597' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sussex Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4548028' timestamp='2007-12-14T21:28:17+00:00' user='nickw' visible='true'>
-    <nd ref='28372796' />
-    <nd ref='28372797' />
-    <nd ref='91113440' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Stoke Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854810' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071232' />
-    <nd ref='13071239' />
-    <nd ref='13071240' />
-    <nd ref='13071242' />
-    <nd ref='13071243' />
-    <nd ref='13071244' />
-    <nd ref='13071245' />
-    <nd ref='13071201' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Neva Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196515' timestamp='2007-01-04T21:07:43+00:00' user='nickw' visible='true'>
-    <nd ref='21613415' />
-    <nd ref='24667959' />
-    <nd ref='24668338' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4677217' timestamp='2007-05-28T10:48:40+01:00' visible='true'>
-    <nd ref='29512139' />
-    <nd ref='29704602' />
-    <nd ref='29704603' />
-    <nd ref='29704604' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='St Johns Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='14505563' timestamp='2007-11-29T22:27:22+00:00' user='nickw' visible='true'>
-    <nd ref='142614219' />
-    <nd ref='142614238' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edith Haisman Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996902' timestamp='2006-11-10T21:59:05+00:00' user='nickw' visible='true'>
-    <nd ref='20957226' />
-    <nd ref='20957180' />
-    <nd ref='20957221' />
-    <nd ref='20957218' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Atherley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586248' timestamp='2007-05-12T15:36:08+01:00' user='nickw' visible='true'>
-    <nd ref='29009190' />
-    <nd ref='29009219' />
-    <nd ref='29009220' />
-    <nd ref='29009221' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harbourne Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196527' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='24668309' />
-    <nd ref='24668213' />
-    <nd ref='24668304' />
-    <nd ref='24668366' />
-    <nd ref='24668042' />
-    <nd ref='24668122' />
-    <nd ref='24668299' />
-    <nd ref='24668367' />
-    <nd ref='24668378' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Taw Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150048' timestamp='2007-10-17T00:35:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464261' />
-    <nd ref='29464260' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Horder Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536696' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194870' />
-    <nd ref='28194880' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Holly Dell' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121526' timestamp='2007-05-16T14:22:27+01:00' user='jonnyswerve' visible='true'>
-    <nd ref='254546' />
-    <nd ref='15028813' />
-    <nd ref='15028814' />
-    <nd ref='28348145' />
-    <nd ref='700531' />
-    <nd ref='700530' />
-    <nd ref='28348304' />
-    <nd ref='700529' />
-    <nd ref='15028815' />
-    <nd ref='254547' />
-    <nd ref='13071390' />
-    <nd ref='10217898' />
-    <nd ref='10217896' />
-    <nd ref='10217897' />
-    <nd ref='10217895' />
-    <nd ref='254548' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodmill Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10556192' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true'>
-    <nd ref='91109259' />
-    <nd ref='91109261' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wolverley Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074871' timestamp='2006-12-14T13:53:18+00:00' user='David Currie' visible='true'>
-    <nd ref='21579408' />
-    <nd ref='21579407' />
-    <nd ref='21579401' />
-    <nd ref='21579399' />
-    <nd ref='21579395' />
-    <nd ref='21579397' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tristram Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19390324' timestamp='2008-01-01T18:32:22+00:00' user='Milliams' visible='true'>
-    <nd ref='28903641' />
-    <nd ref='201642315' />
-    <nd ref='201642316' />
-    <nd ref='201642320' />
-    <nd ref='201642321' />
-    <nd ref='201642322' />
-    <nd ref='201642323' />
-    <nd ref='201642326' />
-    <nd ref='201642327' />
-    <nd ref='201642329' />
-    <nd ref='28903641' />
-    <tag k='oneway' v='no' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </way>
-  <way id='4540303' timestamp='2007-04-29T21:09:41+01:00' visible='true'>
-    <nd ref='28194335' />
-    <nd ref='28194334' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fulmar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015820' timestamp='2006-11-26T00:16:00+00:00' user='nickw' visible='true'>
-    <nd ref='21275817' />
-    <nd ref='21275627' />
-    <nd ref='11419592' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ampthill Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8450334' timestamp='2007-10-29T17:03:06+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30096964' />
-    <nd ref='30096961' />
-    <nd ref='30096962' />
-    <nd ref='30096963' />
-    <nd ref='30096964' />
-    <tag k='leisure' v='common' />
-    <tag k='note' v='FIXME: Tags were named Millenium Green' />
-    <tag k='name' v='Millenium Park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2651697' timestamp='2006-07-29T14:14:58+01:00' user='nickw' visible='true'>
-    <nd ref='447391' />
-    <nd ref='447392' />
-    <nd ref='447394' />
-    <nd ref='307469' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4704063' timestamp='2007-06-03T22:22:10+01:00' visible='true'>
-    <nd ref='29930465' />
-    <nd ref='29930466' />
-    <nd ref='29930467' />
-    <nd ref='29930468' />
-    <nd ref='29930469' />
-    <nd ref='29930464' />
-    <nd ref='29930465' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Maypole Villas' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875464' timestamp='2007-07-09T11:55:47+01:00' visible='true'>
-    <nd ref='31486271' />
-    <nd ref='31486256' />
-    <nd ref='31486258' />
-    <nd ref='31486260' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='William Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061541' timestamp='2006-12-09T09:51:52+00:00' user='nickw' visible='true'>
-    <nd ref='422989' />
-    <nd ref='27021772' />
-    <nd ref='24984762' />
-    <nd ref='422998' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4540353' timestamp='2007-04-29T21:10:27+01:00' visible='true'>
-    <nd ref='28194450' />
-    <nd ref='28194451' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Puffin Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578749' timestamp='2006-10-07T00:25:25+01:00' user='nickw' visible='true'>
-    <nd ref='254381' />
-    <nd ref='402744' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Henstead Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687241' timestamp='2007-05-30T21:41:53+01:00' user='nickw' visible='true'>
-    <nd ref='29794809' />
-    <nd ref='29794812' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Yew Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209581' timestamp='2007-06-03T21:24:33+01:00' visible='true'>
-    <nd ref='24924317' />
-    <nd ref='24924316' />
-    <nd ref='24924071' />
-    <nd ref='24924315' />
-    <nd ref='24924314' />
-    <nd ref='24924313' />
-    <nd ref='29927008' />
-    <nd ref='24924312' />
-    <nd ref='24924311' />
-    <nd ref='29927551' />
-    <nd ref='24924310' />
-    <nd ref='29927552' />
-    <nd ref='24924309' />
-    <nd ref='24924308' />
-    <nd ref='24924307' />
-    <nd ref='24924306' />
-    <nd ref='24924305' />
-    <nd ref='24924304' />
-    <nd ref='24924303' />
-    <nd ref='24924302' />
-    <nd ref='17721019' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Oakmount Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149932' timestamp='2007-05-24T10:51:09+01:00' visible='true'>
-    <nd ref='29548664' />
-    <nd ref='29548665' />
-    <nd ref='29548666' />
-    <nd ref='29548668' />
-    <nd ref='29548669' />
-    <nd ref='29548670' />
-    <nd ref='29548687' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cherbourg Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540346' timestamp='2007-04-29T21:10:03+01:00' visible='true'>
-    <nd ref='28194441' />
-    <nd ref='28194446' />
-    <nd ref='28194445' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sheldrake Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149316' timestamp='2007-05-22T00:20:33+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29003033' />
-    <nd ref='29003041' />
-    <nd ref='29003042' />
-    <nd ref='29003044' />
-    <nd ref='29003040' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chetwynd Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8143483' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781171' />
-    <nd ref='26781172' />
-    <nd ref='26781173' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Swanage Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121933' timestamp='2006-07-01T04:07:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254435' />
-    <nd ref='413153' />
-    <nd ref='413152' />
-    <nd ref='413151' />
-    <nd ref='413150' />
-    <nd ref='413149' />
-    <nd ref='242727' />
-    <nd ref='657705' />
-    <nd ref='242728' />
-    <nd ref='21507765' />
-    <nd ref='242747' />
-    <nd ref='242743' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Burgess Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2651701' timestamp='2006-07-29T14:15:23+01:00' user='nickw' visible='true'>
-    <nd ref='544315' />
-    <nd ref='329464' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4539543' timestamp='2007-04-29T19:42:16+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237240' />
-    <nd ref='28237248' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kersley Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134060' timestamp='2006-12-16T17:47:15+00:00' user='David Currie' visible='true'>
-    <nd ref='21613433' />
-    <nd ref='21613435' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Raglan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875467' timestamp='2007-07-09T11:55:47+01:00' visible='true'>
-    <nd ref='31486264' />
-    <nd ref='31486262' />
-    <nd ref='31486273' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061534' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='21507763' />
-    <nd ref='423277' />
-    <nd ref='27021830' />
-    <nd ref='21636742' />
-    <nd ref='27021829' />
-    <nd ref='21636743' />
-    <nd ref='21636744' />
-    <nd ref='21636745' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lilac Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150538' timestamp='2007-05-27T15:13:57+01:00' visible='true'>
-    <nd ref='17721070' />
-    <nd ref='17721071' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Loveridge Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121523' timestamp='2006-05-22T22:39:21+01:00' user='nickw' visible='true'>
-    <nd ref='2073383' />
-    <nd ref='2073513' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Crescent' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546170' timestamp='2007-04-30T22:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='28342586' />
-    <nd ref='28342590' />
-    <nd ref='28342525' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604637' timestamp='2007-05-15T20:57:27+01:00' user='nickw' visible='true'>
-    <nd ref='29135434' />
-    <nd ref='29135436' />
-    <nd ref='29135438' />
-    <nd ref='29135435' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150190' timestamp='2007-05-24T10:51:04+01:00' visible='true'>
-    <nd ref='29548662' />
-    <nd ref='29548715' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Hardy Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124497' timestamp='2007-05-16T00:37:10+01:00' visible='true'>
-    <nd ref='254668' />
-    <nd ref='254667' />
-    <nd ref='544742' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2920976' timestamp='2006-08-15T12:21:19+01:00' user='nickw' visible='true'>
-    <nd ref='13565092' />
-    <nd ref='13565093' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4743039' timestamp='2007-06-11T21:58:23+01:00' visible='true'>
-    <nd ref='30223566' />
-    <nd ref='30223569' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='14505885' timestamp='2007-11-29T22:29:51+00:00' user='nickw' visible='true'>
-    <nd ref='142617010' />
-    <nd ref='142618200' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hill Farm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540343' timestamp='2007-04-29T21:10:01+01:00' visible='true'>
-    <nd ref='28194428' />
-    <nd ref='28194429' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Widgeon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605582' timestamp='2007-08-28T23:32:23+01:00' visible='true'>
-    <nd ref='254672' />
-    <nd ref='36686479' />
-    <nd ref='10908206' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4476664' timestamp='2007-04-18T02:00:25+01:00' visible='true'>
-    <nd ref='27440017' />
-    <nd ref='27440015' />
-    <nd ref='27440013' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4586120' timestamp='2007-05-12T15:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='29008387' />
-    <nd ref='29008388' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Adur Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636157' timestamp='2007-05-22T00:19:42+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464283' />
-    <nd ref='29464284' />
-    <nd ref='29464285' />
-    <nd ref='29464286' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540962' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252931' />
-    <nd ref='28252922' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunvegan Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3186097' timestamp='2006-09-11T20:18:03+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15359694' />
-    <nd ref='15359697' />
-    <nd ref='15359698' />
-    <nd ref='15359699' />
-    <nd ref='15359700' />
-    <nd ref='15359701' />
-    <nd ref='15359702' />
-    <nd ref='15359703' />
-    <nd ref='15359704' />
-    <nd ref='15359705' />
-    <nd ref='15359706' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585158' timestamp='2007-05-12T09:32:00+01:00' user='nickw' visible='true'>
-    <nd ref='29000960' />
-    <nd ref='29000961' />
-    <nd ref='29000962' />
-    <nd ref='29000963' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Charles Knott Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015787' timestamp='2006-11-25T23:47:34+00:00' user='nickw' visible='true'>
-    <nd ref='21275644' />
-    <nd ref='21275645' />
-    <nd ref='21275646' />
-    <nd ref='21275647' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4360460' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575722' />
-    <nd ref='26575772' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10604012' timestamp='2007-11-07T14:26:26+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92720590' />
-    <nd ref='92720591' />
-    <nd ref='92720592' />
-    <nd ref='92720593' />
-    <nd ref='92720596' />
-    <nd ref='92720597' />
-    <nd ref='92720598' />
-    <nd ref='92720590' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Rank Hovis Flour Mills' />
-    <tag k='created_by' v='Potlatch 0.4c' />
-  </way>
-  <way id='4310888' timestamp='2007-02-23T21:48:29+00:00' user='nickw' visible='true'>
-    <nd ref='26114354' />
-    <nd ref='26114358' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ascupart Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536153' timestamp='2007-10-16T17:59:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='17504830' />
-    <nd ref='28179505' />
-    <nd ref='28179506' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687593' timestamp='2007-05-30T22:22:29+01:00' user='nickw' visible='true'>
-    <nd ref='29796781' />
-    <nd ref='29796778' />
-    <nd ref='29796777' />
-    <nd ref='29796776' />
-    <nd ref='29796775' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bitterne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133976' timestamp='2007-06-10T18:15:28+01:00' visible='true'>
-    <nd ref='29392350' />
-    <nd ref='29392360' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cranbury Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819400' timestamp='2006-10-23T20:53:07+01:00' user='nickw' visible='true'>
-    <nd ref='18347835' />
-    <nd ref='19227214' />
-    <nd ref='19227215' />
-    <nd ref='19227216' />
-    <nd ref='19227217' />
-    <nd ref='19227218' />
-    <nd ref='19227219' />
-    <nd ref='19227220' />
-    <nd ref='422976' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Green Path' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074137' timestamp='2006-12-13T20:19:51+00:00' user='nickw' visible='true'>
-    <nd ref='21561787' />
-    <nd ref='21561801' />
-    <nd ref='21561525' />
-    <nd ref='21561802' />
-    <nd ref='21600497' />
-    <nd ref='21561803' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Clarendon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152199' timestamp='2007-06-11T22:24:05+01:00' visible='true'>
-    <nd ref='30226350' />
-    <nd ref='30226376' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Haddon Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540740' timestamp='2007-04-29T21:43:21+01:00' visible='true'>
-    <nd ref='28249846' />
-    <nd ref='28249848' />
-    <nd ref='28249857' />
-    <nd ref='28249858' />
-    <nd ref='28249860' />
-    <nd ref='28249861' />
-    <nd ref='28249862' />
-    <nd ref='28249863' />
-    <nd ref='28249865' />
-    <nd ref='28249867' />
-    <nd ref='28249868' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Landsdowne Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342696' timestamp='2007-03-09T21:14:33+00:00' user='nickw' visible='true'>
-    <nd ref='26447497' />
-    <nd ref='26447498' />
-    <nd ref='26447499' />
-    <nd ref='254759' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='3981719' timestamp='2006-10-31T22:26:05+00:00' user='nickw' visible='true'>
-    <nd ref='20698070' />
-    <nd ref='20698068' />
-    <nd ref='20698067' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Portland Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9044991' timestamp='2007-10-29T10:22:13+00:00' user='DrMark' visible='true'>
-    <nd ref='66583980' />
-    <nd ref='66587922' />
-    <nd ref='66587923' />
-    <nd ref='66587704' />
-    <nd ref='66587705' />
-    <nd ref='66587707' />
-    <nd ref='66587708' />
-    <nd ref='66587709' />
-    <nd ref='66587710' />
-    <nd ref='66587711' />
-    <nd ref='66587712' />
-    <nd ref='66587714' />
-    <nd ref='66587708' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8152601' timestamp='2007-06-17T22:30:38+01:00' visible='true'>
-    <nd ref='30511424' />
-    <nd ref='30511426' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bealieu Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854837' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071416' />
-    <nd ref='13071428' />
-    <nd ref='13071417' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rutland Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677196' timestamp='2007-06-17T21:50:44+01:00' visible='true'>
-    <nd ref='29704460' />
-    <nd ref='29704520' />
-    <nd ref='29704522' />
-    <nd ref='30504761' />
-    <nd ref='29704523' />
-    <nd ref='29704526' />
-    <nd ref='29704528' />
-    <nd ref='29704530' />
-    <nd ref='29704532' />
-    <nd ref='29704533' />
-    <nd ref='29704535' />
-    <nd ref='29704536' />
-    <nd ref='29704538' />
-    <nd ref='29704539' />
-    <nd ref='29704540' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3271' timestamp='2006-06-04T00:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700379' />
-    <nd ref='700380' />
-    <nd ref='700381' />
-    <nd ref='700382' />
-    <nd ref='700383' />
-    <nd ref='700384' />
-    <nd ref='700385' />
-    <nd ref='700386' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Tennyson Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8151331' timestamp='2007-06-02T19:44:16+01:00' visible='true'>
-    <nd ref='17721037' />
-    <nd ref='29874153' />
-    <nd ref='29874154' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3092146' timestamp='2006-09-03T01:03:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254710' />
-    <nd ref='25303927' />
-    <nd ref='28194904' />
-    <nd ref='25303928' />
-    <nd ref='14728164' />
-    <nd ref='14728166' />
-    <nd ref='25303926' />
-    <nd ref='254710' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Memorial roundabout' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854830' timestamp='2007-10-16T23:45:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071230' />
-    <nd ref='13071229' />
-    <nd ref='9726306' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Cobbett Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13253092' timestamp='2007-12-10T21:00:07+00:00' user='sladen' visible='true'>
-    <nd ref='122352460' />
-    <nd ref='122352464' />
-    <nd ref='122352468' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bridgewater Court' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4077264' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='21613435' />
-    <nd ref='21613453' />
-    <nd ref='21613454' />
-    <nd ref='21613455' />
-    <nd ref='21613456' />
-    <nd ref='21613457' />
-    <nd ref='21613458' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574128' timestamp='2007-05-08T14:51:03+01:00' visible='true'>
-    <nd ref='28874075' />
-    <nd ref='28874078' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Peach Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150640' timestamp='2007-06-03T22:13:39+01:00' visible='true'>
-    <nd ref='29711599' />
-    <nd ref='29929860' />
-    <nd ref='29929861' />
-    <nd ref='29929862' />
-    <nd ref='29929863' />
-    <nd ref='29929864' />
-    <nd ref='29929865' />
-    <tag k='highway' v='unclassified' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Goodwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061554' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='21507801' />
-    <nd ref='21507802' />
-    <nd ref='21507740' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hurlingham Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8554121' timestamp='2007-10-16T23:54:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='48958705' />
-    <nd ref='20973110' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604520' timestamp='2007-05-15T20:47:43+01:00' user='nickw' visible='true'>
-    <nd ref='29134140' />
-    <nd ref='29134147' />
-    <nd ref='29134149' />
-    <nd ref='29134156' />
-    <nd ref='29134157' />
-    <nd ref='29134161' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604468' timestamp='2007-05-15T20:41:30+01:00' user='nickw' visible='true'>
-    <nd ref='29133583' />
-    <nd ref='29133585' />
-    <nd ref='29133587' />
-    <nd ref='29133590' />
-    <nd ref='29133592' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8138802' timestamp='2007-10-29T15:43:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25896411' />
-    <nd ref='29838720' />
-    <nd ref='25896412' />
-    <nd ref='25896413' />
-    <nd ref='25896414' />
-    <nd ref='254652' />
-    <nd ref='25896415' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150900' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='25504280' />
-    <nd ref='29765435' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chapel Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3091890' timestamp='2006-09-03T00:38:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='469849' />
-    <nd ref='14743179' />
-    <nd ref='14743171' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818448' timestamp='2007-10-29T16:25:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='17721084' />
-    <nd ref='17721085' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589145' timestamp='2007-05-13T10:02:51+01:00' user='nickw' visible='true'>
-    <nd ref='29026666' />
-    <nd ref='29026663' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Norcliffe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342625' timestamp='2007-03-09T20:54:25+00:00' user='nickw' visible='true'>
-    <nd ref='20972790' />
-    <nd ref='20972789' />
-    <tag k='highway' v='unclassified' />
-    <tag k='note' v='Unclear where Paget St ends and Anderson's Road starts.' />
-    <tag k='name' v='Paget Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3220725' timestamp='2007-10-30T15:20:41+00:00' user='Dean Earley' visible='true'>
-    <nd ref='2433500' />
-    <nd ref='25296376' />
-    <nd ref='29535052' />
-    <nd ref='15740471' />
-    <nd ref='25296378' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Twyford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1930' timestamp='2007-05-30T22:22:33+01:00' user='nickw' visible='true'>
-    <nd ref='661152' />
-    <nd ref='29796781' />
-    <nd ref='661153' />
-    <nd ref='661154' />
-    <nd ref='661155' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bath Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3061052' timestamp='2006-08-31T20:36:13+01:00' user='nickw' visible='true'>
-    <nd ref='254441' />
-    <nd ref='269046' />
-    <nd ref='269047' />
-    <nd ref='269048' />
-    <nd ref='269049' />
-    <nd ref='269050' />
-    <nd ref='269051' />
-    <nd ref='254655' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='2651965' timestamp='2007-10-16T06:19:21+01:00' user='andrewpmk' visible='true'>
-    <nd ref='305567' />
-    <nd ref='305568' />
-    <nd ref='305569' />
-    <nd ref='305570' />
-    <nd ref='305571' />
-    <nd ref='305572' />
-    <nd ref='305573' />
-    <nd ref='305574' />
-    <nd ref='305575' />
-    <nd ref='305576' />
-    <nd ref='305577' />
-    <nd ref='305578' />
-    <nd ref='305579' />
-    <nd ref='305580' />
-    <nd ref='305581' />
-    <nd ref='305582' />
-    <nd ref='305583' />
-    <nd ref='305584' />
-    <nd ref='305585' />
-    <nd ref='305586' />
-    <nd ref='305587' />
-    <nd ref='305588' />
-    <nd ref='305590' />
-    <nd ref='305592' />
-    <nd ref='11968238' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='North Millers Dale' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4687372' timestamp='2007-05-30T21:56:42+01:00' user='nickw' visible='true'>
-    <nd ref='29794907' />
-    <nd ref='29794908' />
-    <nd ref='29794909' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Jubilee Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4712290' timestamp='2007-06-05T23:14:39+01:00' user='nickw' visible='true'>
-    <nd ref='29998524' />
-    <nd ref='29998525' />
-    <nd ref='29998526' />
-    <nd ref='29998527' />
-    <nd ref='29998528' />
-    <nd ref='29998529' />
-    <nd ref='29998530' />
-    <nd ref='29998531' />
-    <nd ref='29998532' />
-    <nd ref='29998533' />
-    <nd ref='29998534' />
-    <nd ref='29998535' />
-    <nd ref='29998536' />
-    <nd ref='29998537' />
-    <nd ref='29998538' />
-    <nd ref='29998539' />
-    <nd ref='29998540' />
-    <nd ref='29998541' />
-    <nd ref='29998542' />
-    <nd ref='29998543' />
-    <nd ref='29998544' />
-    <nd ref='29998545' />
-    <nd ref='29998546' />
-    <nd ref='29998547' />
-    <nd ref='29998548' />
-    <nd ref='29998549' />
-    <nd ref='29998550' />
-    <nd ref='29998551' />
-    <nd ref='29998552' />
-    <nd ref='29998553' />
-    <nd ref='29998554' />
-    <nd ref='29998555' />
-    <nd ref='29998556' />
-    <nd ref='29998557' />
-    <nd ref='29998558' />
-    <nd ref='29998559' />
-    <nd ref='29998560' />
-    <nd ref='28180212' />
-    <nd ref='29998561' />
-    <nd ref='29998562' />
-    <nd ref='29998563' />
-    <nd ref='29998564' />
-    <nd ref='29998565' />
-    <nd ref='29998566' />
-    <nd ref='29998567' />
-    <nd ref='29998568' />
-    <nd ref='29998569' />
-    <nd ref='29998570' />
-    <nd ref='29998571' />
-    <nd ref='29998572' />
-    <nd ref='29998573' />
-    <nd ref='29998574' />
-    <nd ref='29998575' />
-    <nd ref='29998576' />
-    <nd ref='29998577' />
-    <nd ref='29998578' />
-    <nd ref='29998579' />
-    <nd ref='29998580' />
-    <nd ref='29998581' />
-    <nd ref='29998582' />
-    <nd ref='29998583' />
-    <nd ref='29998584' />
-    <nd ref='29998585' />
-    <nd ref='29998586' />
-    <nd ref='29998612' />
-    <nd ref='29998523' />
-    <nd ref='29998524' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123253' timestamp='2007-08-12T23:11:38+01:00' user='Edward' visible='true'>
-    <nd ref='254672' />
-    <nd ref='14964101' />
-    <nd ref='675889' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cobden Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2859060' timestamp='2008-01-25T18:35:42+00:00' visible='true'>
-    <nd ref='14745514' />
-    <nd ref='170456' />
-    <nd ref='298284' />
-    <nd ref='27021795' />
-    <nd ref='170455' />
-    <nd ref='27021794' />
-    <nd ref='298296' />
-    <nd ref='27021786' />
-    <nd ref='170454' />
-    <nd ref='27021782' />
-    <nd ref='298292' />
-    <nd ref='27021783' />
-    <nd ref='27021784' />
-    <nd ref='298293' />
-    <nd ref='27021785' />
-    <nd ref='170453' />
-    <nd ref='298294' />
-    <nd ref='27021788' />
-    <nd ref='298295' />
-    <nd ref='27021789' />
-    <nd ref='170452' />
-    <nd ref='170457' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196535' timestamp='2007-01-04T21:07:46+00:00' user='nickw' visible='true'>
-    <nd ref='24668345' />
-    <nd ref='24668383' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4079293' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636823' />
-    <nd ref='21636738' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saxholm Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539539' timestamp='2007-04-29T19:42:14+01:00' user='Andy Street' visible='true'>
-    <nd ref='26727698' />
-    <nd ref='28237232' />
-    <nd ref='28237233' />
-    <nd ref='28237238' />
-    <nd ref='28237234' />
-    <nd ref='28237235' />
-    <nd ref='28237236' />
-    <nd ref='28237237' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='South East Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800096' timestamp='2008-02-03T05:59:59+00:00' user='sladen' visible='true'>
-    <nd ref='14727983' />
-    <nd ref='700536' />
-    <nd ref='14727958' />
-    <nd ref='330491' />
-    <nd ref='330489' />
-    <nd ref='306288' />
-    <nd ref='14727996' />
-    <nd ref='306301' />
-    <nd ref='17724236' />
-    <nd ref='14728000' />
-    <nd ref='17724237' />
-    <nd ref='388862' />
-    <nd ref='14728001' />
-    <nd ref='254664' />
-    <nd ref='254709' />
-    <nd ref='7015694' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='The Avenue' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4701914' timestamp='2007-06-03T15:59:43+01:00' visible='true'>
-    <nd ref='29704323' />
-    <nd ref='29913886' />
-    <nd ref='29913887' />
-    <nd ref='29913891' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Windsor Gate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999858' timestamp='2006-11-13T21:50:58+00:00' user='nickw' visible='true'>
-    <nd ref='20976785' />
-    <nd ref='20976789' />
-    <nd ref='20976764' />
-    <nd ref='20976772' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Luccombe Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16413030' timestamp='2007-12-14T21:27:51+00:00' user='nickw' visible='true'>
-    <nd ref='28372787' />
-    <nd ref='169409510' />
-    <nd ref='169409513' />
-    <nd ref='169409519' />
-    <nd ref='169409523' />
-    <nd ref='169409526' />
-    <nd ref='169409528' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Holland Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677133' timestamp='2007-10-16T02:43:55+01:00' user='andrewpmk' visible='true'>
-    <nd ref='21178403' />
-    <nd ref='29506472' />
-    <nd ref='29506473' />
-    <nd ref='29506474' />
-    <nd ref='29506475' />
-    <nd ref='29506476' />
-    <nd ref='29506029' />
-    <nd ref='29505720' />
-    <nd ref='29506479' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Knowle Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639698' timestamp='2007-11-25T22:28:44+00:00' user='southglos' visible='true'>
-    <nd ref='25303929' />
-    <nd ref='29464287' />
-    <nd ref='14728164' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='osmarender:renderName' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15726288' timestamp='2007-12-08T20:33:32+00:00' user='nickw' visible='true'>
-    <nd ref='157238299' />
-    <nd ref='157238313' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fraser Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4496144' timestamp='2007-04-23T22:47:37+01:00' visible='true'>
-    <nd ref='27563290' />
-    <nd ref='27563289' />
-    <nd ref='27563288' />
-    <nd ref='21420710' />
-    <tag k='access' v='private' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glebe Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3088263' timestamp='2007-08-14T04:49:04+01:00' user='andrewpmk' visible='true'>
-    <nd ref='14713528' />
-    <nd ref='14726184' />
-    <nd ref='14726183' />
-    <nd ref='14726186' />
-    <nd ref='14726182' />
-    <nd ref='14726181' />
-    <nd ref='14726180' />
-    <nd ref='14726179' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='name' v='Saint Andrew's Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8137074' timestamp='2008-02-03T06:26:23+00:00' user='sladen' visible='true'>
-    <nd ref='254758' />
-    <nd ref='8596789' />
-    <nd ref='8596782' />
-    <nd ref='34278554' />
-    <nd ref='8596770' />
-    <nd ref='34278547' />
-    <nd ref='34278543' />
-    <nd ref='8596761' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='10568208' timestamp='2008-01-04T19:34:28+00:00' user='nickw' visible='true'>
-    <nd ref='24924290' />
-    <nd ref='24924291' />
-    <nd ref='24924292' />
-    <nd ref='24924293' />
-    <nd ref='24924294' />
-    <nd ref='24924295' />
-    <nd ref='24924296' />
-    <nd ref='24924297' />
-    <nd ref='206163285' />
-    <nd ref='30290759' />
-    <nd ref='30290758' />
-    <nd ref='24924298' />
-    <nd ref='206163088' />
-    <nd ref='24924299' />
-    <nd ref='24924300' />
-    <nd ref='206163089' />
-    <nd ref='24924301' />
-    <nd ref='206162420' />
-    <nd ref='206163068' />
-    <nd ref='206162253' />
-    <nd ref='19111046' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556429' timestamp='2007-10-29T08:08:03+00:00' user='nickw' visible='true'>
-    <nd ref='91115438' />
-    <nd ref='91116012' />
-    <nd ref='91113446' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135160' timestamp='2007-10-16T06:17:54+01:00' user='andrewpmk' visible='true'>
-    <nd ref='24668051' />
-    <nd ref='24668168' />
-    <nd ref='24668307' />
-    <nd ref='24668374' />
-    <nd ref='24668053' />
-    <nd ref='24668180' />
-    <nd ref='24668330' />
-    <nd ref='24667985' />
-    <nd ref='24668362' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131455' timestamp='2007-10-16T23:54:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973104' />
-    <nd ref='20973106' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577385' timestamp='2007-05-09T23:03:54+01:00' visible='true'>
-    <nd ref='28903060' />
-    <nd ref='28903059' />
-    <nd ref='28903058' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644813' timestamp='2007-05-26T20:16:33+01:00' visible='true'>
-    <nd ref='29549338' />
-    <nd ref='29549337' />
-    <nd ref='29549340' />
-    <nd ref='29549339' />
-    <nd ref='29632816' />
-    <nd ref='29549338' />
-    <tag k='amenity' v='college' />
-    <tag k='name' v='Eastleigh College' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569973' timestamp='2007-05-05T09:03:37+01:00' user='nickw' visible='true'>
-    <nd ref='28830648' />
-    <nd ref='28830649' />
-    <nd ref='28830579' />
-    <nd ref='28830650' />
-    <nd ref='28830651' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Trent Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678218' timestamp='2007-10-16T06:19:36+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29711024' />
-    <nd ref='29710758' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743333' timestamp='2007-06-11T22:32:16+01:00' visible='true'>
-    <nd ref='30226994' />
-    <nd ref='30226993' />
-    <nd ref='30226374' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150669' timestamp='2007-05-28T19:39:24+01:00' visible='true'>
-    <nd ref='17721063' />
-    <nd ref='17721064' />
-    <nd ref='29728893' />
-    <nd ref='17721066' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Causton Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996463' timestamp='2007-12-20T11:19:42+00:00' user='mike l' visible='true'>
-    <nd ref='388950' />
-    <nd ref='179713783' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='December 2007:  Dahlia Road no longer joins Burgess Road. Pedestrian and cycle access possible, bollards and pavement prevent motor vehicles ' />
-    <tag k='name' v='Dahlia Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='8151343' timestamp='2007-06-02T19:55:00+01:00' visible='true'>
-    <nd ref='28384693' />
-    <nd ref='28384699' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2854833' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10217892' />
-    <nd ref='13071399' />
-    <nd ref='28348318' />
-    <nd ref='13071400' />
-    <nd ref='13071401' />
-    <nd ref='13071402' />
-    <nd ref='28830581' />
-    <nd ref='13071398' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vanguard Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8128486' timestamp='2006-10-07T00:25:28+01:00' user='nickw' visible='true'>
-    <nd ref='447391' />
-    <nd ref='307483' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Lovers Walk' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='16414177' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true'>
-    <nd ref='169424884' />
-    <nd ref='169424888' />
-    <nd ref='169424892' />
-    <nd ref='169424897' />
-    <nd ref='169424901' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Birch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3906604' timestamp='2006-10-27T22:49:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20107323' />
-    <nd ref='20107326' />
-    <nd ref='20107331' />
-    <nd ref='20107328' />
-    <nd ref='20107330' />
-    <nd ref='20107325' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Romill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727660' timestamp='2007-06-09T19:43:23+01:00' user='nickw' visible='true'>
-    <nd ref='30124221' />
-    <nd ref='30124375' />
-    <nd ref='30124376' />
-    <nd ref='30124377' />
-    <nd ref='30124378' />
-    <nd ref='30124379' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nomad Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3088259' timestamp='2006-09-02T19:02:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14727959' />
-    <nd ref='14727973' />
-    <nd ref='14727987' />
-    <nd ref='14727998' />
-    <nd ref='324343' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704173' timestamp='2007-06-03T22:43:33+01:00' visible='true'>
-    <nd ref='29931366' />
-    <nd ref='29931367' />
-    <nd ref='29931331' />
-    <nd ref='29931335' />
-    <nd ref='29931336' />
-    <nd ref='29931337' />
-    <nd ref='29931338' />
-    <nd ref='29931339' />
-    <nd ref='29931340' />
-    <nd ref='29931341' />
-    <nd ref='29931342' />
-    <nd ref='29931343' />
-    <nd ref='29931344' />
-    <nd ref='29931345' />
-    <nd ref='29931346' />
-    <nd ref='29931347' />
-    <nd ref='29931348' />
-    <nd ref='29931349' />
-    <nd ref='29931350' />
-    <nd ref='29931351' />
-    <nd ref='29931352' />
-    <nd ref='29931353' />
-    <nd ref='29931354' />
-    <nd ref='29931355' />
-    <nd ref='29931356' />
-    <nd ref='29931357' />
-    <nd ref='29931358' />
-    <nd ref='29931359' />
-    <nd ref='29931360' />
-    <nd ref='29931361' />
-    <nd ref='29931362' />
-    <nd ref='29931363' />
-    <nd ref='29931364' />
-    <nd ref='29931365' />
-    <nd ref='29931366' />
-    <tag k='natural' v='water' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540311' timestamp='2007-04-29T21:09:44+01:00' visible='true'>
-    <nd ref='28194365' />
-    <nd ref='28194366' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Turnstone Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998189' timestamp='2007-10-16T19:19:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254694' />
-    <nd ref='14744413' />
-    <nd ref='27021764' />
-    <nd ref='27021761' />
-    <nd ref='20964740' />
-    <nd ref='27021760' />
-    <nd ref='20964741' />
-    <nd ref='254435' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2920965' timestamp='2006-08-15T12:15:12+01:00' user='nickw' visible='true'>
-    <nd ref='13564627' />
-    <nd ref='13564752' />
-    <nd ref='20130964' />
-    <nd ref='13564754' />
-    <nd ref='20130965' />
-    <nd ref='20130967' />
-    <nd ref='20130969' />
-    <nd ref='20130968' />
-    <nd ref='13564702' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Benhams Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546173' timestamp='2007-04-30T22:14:01+01:00' user='nickw' visible='true'>
-    <nd ref='28342597' />
-    <nd ref='28231305' />
-    <nd ref='28342598' />
-    <nd ref='28342599' />
-    <nd ref='28342600' />
-    <nd ref='28342601' />
-    <nd ref='28342602' />
-    <nd ref='28342604' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Maldon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148375' timestamp='2007-10-16T17:59:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179506' />
-    <nd ref='28179516' />
-    <nd ref='17504831' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130048' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20130950' />
-    <nd ref='20130962' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Camelia Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540978' timestamp='2007-04-29T22:00:56+01:00' visible='true'>
-    <nd ref='28252980' />
-    <nd ref='28252983' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558183' timestamp='2007-05-02T23:58:16+01:00' visible='true'>
-    <nd ref='28583079' />
-    <nd ref='28583075' />
-    <nd ref='28583074' />
-    <nd ref='28583071' />
-    <nd ref='28583067' />
-    <nd ref='28583066' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Springford Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639647' timestamp='2006-06-01T09:52:51+01:00' user='nickw' visible='true'>
-    <nd ref='383001' />
-    <nd ref='19227261' />
-    <nd ref='383139' />
-    <nd ref='383140' />
-    <nd ref='383141' />
-    <nd ref='383142' />
-    <nd ref='383143' />
-    <nd ref='383144' />
-    <nd ref='383145' />
-    <nd ref='383146' />
-    <nd ref='330489' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4386801' timestamp='2007-03-25T18:42:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='3915750' />
-    <nd ref='26781163' />
-    <nd ref='26781164' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bishops Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295844' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='25947178' />
-    <nd ref='25764415' />
-    <nd ref='25947177' />
-    <nd ref='25947166' />
-    <nd ref='25947176' />
-    <nd ref='25947168' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='Some of this is Access Only' />
-    <tag k='name' v='Northumberland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698135' timestamp='2007-06-02T18:58:33+01:00' visible='true'>
-    <nd ref='29871543' />
-    <nd ref='29871545' />
-    <nd ref='29871547' />
-    <nd ref='29871549' />
-    <nd ref='29871551' />
-    <nd ref='29871553' />
-    <nd ref='29871555' />
-    <nd ref='29871557' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='York Drove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704084' timestamp='2007-06-03T22:30:59+01:00' visible='true'>
-    <nd ref='29930870' />
-    <nd ref='29930871' />
-    <nd ref='29930864' />
-    <nd ref='29930865' />
-    <nd ref='29930866' />
-    <nd ref='29930867' />
-    <nd ref='29930868' />
-    <nd ref='29930869' />
-    <nd ref='29930870' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601253' timestamp='2007-10-30T17:23:34+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92681272' />
-    <nd ref='92681273' />
-    <nd ref='92681274' />
-    <nd ref='92681275' />
-    <nd ref='92681276' />
-    <nd ref='92681277' />
-    <nd ref='92681272' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Gamma House' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4586234' timestamp='2007-05-12T15:33:39+01:00' user='nickw' visible='true'>
-    <nd ref='29008445' />
-    <nd ref='29009080' />
-    <nd ref='20133200' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788476' timestamp='2008-01-04T19:32:09+00:00' user='nickw' visible='true'>
-    <nd ref='206163075' />
-    <nd ref='206163097' />
-    <nd ref='206163098' />
-    <nd ref='206163099' />
-    <nd ref='206163077' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Devon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999134' timestamp='2006-11-12T22:57:28+00:00' user='Dean Earley' visible='true'>
-    <nd ref='518767' />
-    <nd ref='518768' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nichols Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077249' timestamp='2007-09-17T23:09:12+01:00' user='mike l' visible='true'>
-    <nd ref='18348693' />
-    <nd ref='329533' />
-    <nd ref='329534' />
-    <nd ref='53421251' />
-    <nd ref='329535' />
-    <nd ref='329536' />
-    <nd ref='20965524' />
-    <nd ref='329537' />
-    <nd ref='331363' />
-    <nd ref='21613386' />
-    <nd ref='21613387' />
-    <nd ref='21600673' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Castle Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295838' timestamp='2007-02-16T20:51:26+00:00' user='nickw' visible='true'>
-    <nd ref='25947171' />
-    <nd ref='25947164' />
-    <nd ref='25947170' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Alfred Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773409' timestamp='2007-06-17T21:59:35+01:00' visible='true'>
-    <nd ref='30505719' />
-    <nd ref='30506258' />
-    <nd ref='30505710' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152188' timestamp='2007-10-16T02:43:47+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30224276' />
-    <nd ref='30224278' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Loughwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4280397' timestamp='2007-02-11T18:07:24+00:00' user='nickw' visible='true'>
-    <nd ref='25783107' />
-    <nd ref='25783108' />
-    <nd ref='25783109' />
-    <nd ref='25783110' />
-    <nd ref='254267' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196531' timestamp='2007-01-04T21:07:46+00:00' user='nickw' visible='true'>
-    <nd ref='24668030' />
-    <nd ref='24668350' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4074133' timestamp='2006-12-13T20:19:51+00:00' user='nickw' visible='true'>
-    <nd ref='21561789' />
-    <nd ref='21561527' />
-    <nd ref='21561790' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Grange Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3906609' timestamp='2006-10-27T22:49:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15028851' />
-    <nd ref='20107338' />
-    <nd ref='20107340' />
-    <nd ref='20107337' />
-    <nd ref='15028851' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211074' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949990' />
-    <nd ref='24949962' />
-    <nd ref='24949961' />
-    <nd ref='24949960' />
-    <nd ref='24949959' />
-    <nd ref='24949958' />
-    <nd ref='24949957' />
-    <nd ref='24949956' />
-    <nd ref='24949955' />
-    <nd ref='24949954' />
-    <nd ref='24949953' />
-    <nd ref='24949952' />
-    <nd ref='24949941' />
-    <nd ref='24949940' />
-    <nd ref='24949939' />
-    <nd ref='24949938' />
-    <nd ref='24949983' />
-    <nd ref='24949984' />
-    <nd ref='24949909' />
-    <nd ref='24949823' />
-    <nd ref='24949870' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pine Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13638241' timestamp='2007-12-07T13:21:45+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='125570945' />
-    <nd ref='125570948' />
-    <nd ref='125570949' />
-    <nd ref='125570950' />
-    <nd ref='125570945' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='The Club' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4005374' timestamp='2007-11-06T18:20:37+00:00' user='nickw' visible='true'>
-    <nd ref='18348727' />
-    <nd ref='21091387' />
-    <nd ref='21091388' />
-    <nd ref='21091389' />
-    <nd ref='21091390' />
-    <nd ref='21091391' />
-    <nd ref='21091392' />
-    <nd ref='21091393' />
-    <nd ref='21091394' />
-    <nd ref='21091395' />
-    <nd ref='21091396' />
-    <nd ref='21091397' />
-    <nd ref='21091398' />
-    <nd ref='21091399' />
-    <nd ref='21091400' />
-    <nd ref='21091401' />
-    <nd ref='21091402' />
-    <nd ref='21091403' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639527' timestamp='2007-10-29T07:53:28+00:00' user='nickw' visible='true'>
-    <nd ref='325659' />
-    <nd ref='21141419' />
-    <nd ref='91109764' />
-    <nd ref='20976686' />
-    <nd ref='325660' />
-    <nd ref='28246352' />
-    <nd ref='28246351' />
-    <nd ref='325661' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dale Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4077272' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='21613492' />
-    <nd ref='21613491' />
-    <nd ref='21613490' />
-    <nd ref='21613489' />
-    <nd ref='21613488' />
-    <nd ref='21613487' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639354' timestamp='2007-11-29T22:37:23+00:00' user='nickw' visible='true'>
-    <nd ref='7015241' />
-    <nd ref='254359' />
-    <nd ref='402752' />
-    <nd ref='254361' />
-    <nd ref='254362' />
-    <nd ref='254363' />
-    <nd ref='254364' />
-    <nd ref='422967' />
-    <nd ref='254365' />
-    <nd ref='254366' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Banister Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='9651718' timestamp='2007-12-08T20:15:01+00:00' user='nickw' visible='true'>
-    <nd ref='28801042' />
-    <nd ref='157209139' />
-    <nd ref='28935989' />
-    <nd ref='21600473' />
-    <nd ref='28935766' />
-    <nd ref='28935765' />
-    <nd ref='21600474' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Lords Hill Centre East' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061549' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='21507798' />
-    <nd ref='27021752' />
-    <nd ref='21507796' />
-    <nd ref='21507797' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beechmount Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1926' timestamp='2006-06-04T00:30:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='661192' />
-    <nd ref='661194' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Garfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10556768' timestamp='2007-10-29T08:21:49+00:00' user='nickw' visible='true'>
-    <nd ref='91130462' />
-    <nd ref='91130463' />
-    <nd ref='325658' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St James' Park Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3780200' timestamp='2006-10-21T14:42:00+01:00' user='nickw' visible='true'>
-    <nd ref='254836' />
-    <nd ref='18868870' />
-    <nd ref='18868869' />
-    <nd ref='242721' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Roberts Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580512' timestamp='2007-05-11T01:00:06+01:00' visible='true'>
-    <nd ref='28935991' />
-    <nd ref='28935992' />
-    <nd ref='28935994' />
-    <nd ref='28935996' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Caistor Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788499' timestamp='2008-01-04T19:34:27+00:00' user='nickw' visible='true'>
-    <nd ref='206163275' />
-    <nd ref='206163279' />
-    <nd ref='206163280' />
-    <nd ref='206163281' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Oaklands' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1669' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387816' />
-    <nd ref='21636232' />
-    <nd ref='387817' />
-    <nd ref='27434184' />
-    <nd ref='387818' />
-    <nd ref='387819' />
-    <nd ref='387820' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Grosvenor Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4574120' timestamp='2007-12-06T20:43:05+00:00' user='nickw' visible='true'>
-    <nd ref='28874067' />
-    <nd ref='28874068' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Outer Circle' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='14505411' timestamp='2007-11-29T22:26:20+00:00' user='nickw' visible='true'>
-    <nd ref='142612637' />
-    <nd ref='142612642' />
-    <nd ref='142612647' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rollesbrook Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819436' timestamp='2006-10-23T21:01:11+01:00' user='nickw' visible='true'>
-    <nd ref='19227233' />
-    <nd ref='19227232' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Highclere Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539753' timestamp='2007-04-29T20:03:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='26727692' />
-    <nd ref='28240335' />
-    <nd ref='28240338' />
-    <nd ref='28240340' />
-    <nd ref='28240341' />
-    <nd ref='28240342' />
-    <nd ref='28240344' />
-    <nd ref='26727699' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Firtree Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556516' timestamp='2007-10-29T08:11:20+00:00' user='nickw' visible='true'>
-    <nd ref='91119001' />
-    <nd ref='91119005' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brook Valley' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005408' timestamp='2007-11-29T22:31:49+00:00' user='nickw' visible='true'>
-    <nd ref='21091859' />
-    <nd ref='21091858' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saxon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4405502' timestamp='2007-05-30T21:46:54+01:00' user='nickw' visible='true'>
-    <nd ref='20136221' />
-    <nd ref='26945333' />
-    <nd ref='26945326' />
-    <nd ref='29794807' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brook Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947666' timestamp='2007-09-10T23:55:27+01:00' visible='true'>
-    <nd ref='8596760' />
-    <nd ref='14744287' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15451501' timestamp='2007-12-06T20:46:08+00:00' user='nickw' visible='true'>
-    <nd ref='50656131' />
-    <nd ref='153334845' />
-    <nd ref='153334850' />
-    <nd ref='153334855' />
-    <nd ref='153334859' />
-    <nd ref='153334866' />
-    <nd ref='153334873' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Menzies Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386805' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26728549' />
-    <nd ref='26781156' />
-    <nd ref='657769' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wodehouse Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084236' timestamp='2006-09-02T13:46:13+01:00' user='Dean Earley' visible='true'>
-    <nd ref='423289' />
-    <nd ref='544329' />
-    <nd ref='544330' />
-    <nd ref='387820' />
-    <nd ref='544331' />
-    <nd ref='247807' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Welbeck Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643762' timestamp='2007-05-24T00:05:31+01:00' visible='true'>
-    <nd ref='29392357' />
-    <nd ref='29389522' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569969' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true'>
-    <nd ref='28830629' />
-    <nd ref='28830631' />
-    <nd ref='28830573' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grasdean Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5653598' timestamp='2007-09-05T18:28:14+01:00' user='mike l' visible='true'>
-    <nd ref='42141573' />
-    <nd ref='42141598' />
-    <nd ref='42141674' />
-    <tag k='access' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540760' timestamp='2007-04-29T21:43:34+01:00' visible='true'>
-    <nd ref='469879' />
-    <nd ref='28249981' />
-    <nd ref='28249982' />
-    <nd ref='28249993' />
-    <nd ref='28249984' />
-    <nd ref='28249985' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='South Mill Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639405' timestamp='2007-05-22T12:23:44+01:00' visible='true'>
-    <nd ref='325645' />
-    <nd ref='29491396' />
-    <nd ref='402745' />
-    <nd ref='402746' />
-    <nd ref='17724252' />
-    <nd ref='17724251' />
-    <nd ref='17724250' />
-    <nd ref='18232069' />
-    <nd ref='325646' />
-    <nd ref='325647' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Wilton Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4278980' timestamp='2007-02-10T23:53:37+00:00' visible='true'>
-    <nd ref='25764480' />
-    <nd ref='518767' />
-    <nd ref='25764479' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northbrook Road' />
-  </way>
-  <way id='8152656' timestamp='2007-06-17T21:50:40+01:00' visible='true'>
-    <nd ref='30504760' />
-    <nd ref='30504762' />
-    <nd ref='30504624' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677107' timestamp='2006-10-14T13:21:28+01:00' user='nickw' visible='true'>
-    <nd ref='18232130' />
-    <nd ref='18232131' />
-    <nd ref='18232132' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cranbury Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2809604' timestamp='2006-08-07T20:18:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='12801375' />
-    <nd ref='12801365' />
-    <nd ref='12801366' />
-    <nd ref='12801367' />
-    <nd ref='12801368' />
-    <nd ref='12801369' />
-    <nd ref='12801370' />
-    <nd ref='12801371' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bryanston Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2241' timestamp='2007-06-23T18:53:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10216405' />
-    <nd ref='10216401' />
-    <nd ref='29796782' />
-    <nd ref='13071398' />
-    <nd ref='474644' />
-    <nd ref='20107345' />
-    <nd ref='10537329' />
-    <nd ref='474645' />
-    <nd ref='20107347' />
-    <nd ref='675855' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C194' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4694090' timestamp='2007-06-01T20:19:56+01:00' visible='true'>
-    <nd ref='25896418' />
-    <nd ref='29838422' />
-    <nd ref='29838423' />
-    <nd ref='29838424' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677577' timestamp='2007-05-28T11:38:43+01:00' visible='true'>
-    <nd ref='29706911' />
-    <nd ref='29706912' />
-    <nd ref='29706909' />
-    <nd ref='29706910' />
-    <nd ref='29706911' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773694' timestamp='2007-06-17T22:30:36+01:00' visible='true'>
-    <nd ref='30510875' />
-    <nd ref='30511426' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578587' timestamp='2006-10-06T23:52:02+01:00' user='Dean Earley' visible='true'>
-    <nd ref='305224' />
-    <nd ref='17723043' />
-    <nd ref='305225' />
-    <nd ref='305223' />
-    <nd ref='305222' />
-    <nd ref='17723044' />
-    <nd ref='305224' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558180' timestamp='2007-05-02T23:58:15+01:00' visible='true'>
-    <nd ref='28583028' />
-    <nd ref='28583030' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2350446' timestamp='2006-07-09T22:24:32+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10216410' />
-    <nd ref='10216412' />
-    <nd ref='10216415' />
-    <nd ref='10216404' />
-    <nd ref='10216405' />
-    <nd ref='10216406' />
-    <nd ref='10216407' />
-    <nd ref='10216408' />
-    <nd ref='10216410' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558165' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582955' />
-    <nd ref='28582953' />
-    <nd ref='28582950' />
-    <nd ref='28582949' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819440' timestamp='2007-06-02T11:56:17+01:00' visible='true'>
-    <nd ref='19227257' />
-    <nd ref='28194885' />
-    <nd ref='28194884' />
-    <nd ref='19227258' />
-    <nd ref='19227259' />
-    <nd ref='28194886' />
-    <nd ref='28194887' />
-    <nd ref='19228094' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vermont Close' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4818226' timestamp='2007-06-26T23:45:21+01:00' user='nickw' visible='true'>
-    <nd ref='30956625' />
-    <nd ref='30956626' />
-    <nd ref='30956627' />
-    <nd ref='30956628' />
-    <nd ref='30956629' />
-    <nd ref='30956630' />
-    <nd ref='30956631' />
-    <nd ref='30956632' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8430594' timestamp='2007-10-30T11:39:21+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28418334' />
-    <nd ref='28418331' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='George Wright Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121937' timestamp='2007-11-25T22:28:45+00:00' user='southglos' visible='true'>
-    <nd ref='254710' />
-    <nd ref='243877' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='osmarender:renderName' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4875597' timestamp='2007-10-16T23:45:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='19890110' />
-    <nd ref='14806969' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125050' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071294' />
-    <nd ref='13071295' />
-    <nd ref='13071305' />
-    <nd ref='13071299' />
-    <nd ref='13071296' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='MacArthur Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152535' timestamp='2007-06-16T16:26:47+01:00' visible='true'>
-    <nd ref='30431972' />
-    <nd ref='30431975' />
-    <nd ref='30431984' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4695885' timestamp='2007-06-02T08:31:33+01:00' user='nickw' visible='true'>
-    <nd ref='24984740' />
-    <nd ref='29856353' />
-    <nd ref='29856354' />
-    <nd ref='29856355' />
-    <nd ref='29856356' />
-    <nd ref='29856357' />
-    <nd ref='29856358' />
-    <nd ref='29856359' />
-    <nd ref='29856360' />
-    <nd ref='29856361' />
-    <nd ref='29856362' />
-    <nd ref='29856363' />
-    <nd ref='29856364' />
-    <nd ref='29856365' />
-    <nd ref='29856366' />
-    <nd ref='29856367' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Monks Wood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545703' timestamp='2007-06-02T19:55:04+01:00' visible='true'>
-    <nd ref='28339152' />
-    <nd ref='29874641' />
-    <nd ref='28339168' />
-    <nd ref='28339169' />
-    <nd ref='28339170' />
-    <nd ref='17721054' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Sopwith Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703606' timestamp='2007-06-03T21:43:54+01:00' visible='true'>
-    <nd ref='29927552' />
-    <nd ref='29927563' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beresford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679917' timestamp='2007-05-28T19:39:26+01:00' visible='true'>
-    <nd ref='29511447' />
-    <nd ref='29730495' />
-    <nd ref='29730494' />
-    <nd ref='29511445' />
-    <nd ref='29730493' />
-    <nd ref='29730492' />
-    <nd ref='29511444' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Kipling Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679909' timestamp='2007-05-28T19:39:21+01:00' visible='true'>
-    <nd ref='29728871' />
-    <nd ref='29728872' />
-    <nd ref='29728876' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Laburnum Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209534' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='21689051' />
-    <nd ref='24924096' />
-    <nd ref='24924097' />
-    <nd ref='24924098' />
-    <nd ref='21689155' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910148' timestamp='2006-10-28T01:46:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20102973' />
-    <nd ref='20130888' />
-    <nd ref='20130890' />
-    <nd ref='20130892' />
-    <nd ref='20130894' />
-    <nd ref='20130896' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hillgrove Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539962' timestamp='2007-04-29T20:37:19+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243544' />
-    <nd ref='28243562' />
-    <nd ref='28243567' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wykeham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589163' timestamp='2007-05-13T10:11:06+01:00' user='nickw' visible='true'>
-    <nd ref='29026770' />
-    <nd ref='29026664' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Regent Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4310884' timestamp='2007-12-10T19:19:47+00:00' user='sladen' visible='true'>
-    <nd ref='8596778' />
-    <nd ref='20972833' />
-    <nd ref='20972832' />
-    <nd ref='26114350' />
-    <nd ref='26575735' />
-    <nd ref='26114351' />
-    <nd ref='26114352' />
-    <nd ref='26114353' />
-    <nd ref='29461229' />
-    <nd ref='26114354' />
-    <nd ref='29461222' />
-    <nd ref='29461216' />
-    <nd ref='26114355' />
-    <nd ref='29461214' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='St Mary Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4694152' timestamp='2007-06-01T20:45:15+01:00' visible='true'>
-    <nd ref='29838971' />
-    <nd ref='29838968' />
-    <nd ref='29838969' />
-    <nd ref='29838970' />
-    <nd ref='29838971' />
-    <tag k='leisure' v='playground' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639439' timestamp='2006-06-01T09:38:48+01:00' user='nickw' visible='true'>
-    <nd ref='430655' />
-    <nd ref='20831113' />
-    <nd ref='28343219' />
-    <nd ref='20831112' />
-    <nd ref='430656' />
-    <nd ref='430657' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Carlton Place' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4661844' timestamp='2007-10-16T11:34:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29632501' />
-    <nd ref='29632791' />
-    <nd ref='29632792' />
-    <nd ref='29632794' />
-    <nd ref='29632796' />
-    <nd ref='29632798' />
-    <nd ref='29632802' />
-    <nd ref='29632801' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Monks Brook Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854826' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071361' />
-    <nd ref='13071369' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639853' timestamp='2006-06-01T10:05:23+01:00' user='nickw' visible='true'>
-    <nd ref='269928' />
-    <nd ref='21636810' />
-    <nd ref='329522' />
-    <nd ref='21636811' />
-    <nd ref='269927' />
-    <nd ref='21636812' />
-    <nd ref='28183736' />
-    <nd ref='28183738' />
-    <nd ref='28183739' />
-    <nd ref='269926' />
-    <nd ref='28183740' />
-    <nd ref='28183738' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hadrian Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4773448' timestamp='2007-06-17T22:04:35+01:00' visible='true'>
-    <nd ref='30506822' />
-    <nd ref='30506820' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='2818444' timestamp='2007-10-16T17:18:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='2417459' />
-    <nd ref='25303008' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Wide Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636153' timestamp='2007-05-22T00:19:42+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464266' />
-    <nd ref='29464268' />
-    <nd ref='29464267' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Spinney' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342638' timestamp='2007-03-09T20:54:27+00:00' user='nickw' visible='true'>
-    <nd ref='26004487' />
-    <nd ref='26114374' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4005421' timestamp='2006-11-19T12:09:23+00:00' user='nickw' visible='true'>
-    <nd ref='21091885' />
-    <nd ref='21091886' />
-    <nd ref='21141391' />
-    <nd ref='21141390' />
-    <nd ref='21091838' />
-    <nd ref='21091888' />
-    <nd ref='21091889' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Radway Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360464' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575787' />
-    <nd ref='26575723' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bell Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079285' timestamp='2007-05-22T00:20:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='422992' />
-    <nd ref='21636750' />
-    <nd ref='21636727' />
-    <nd ref='29464309' />
-    <nd ref='21636757' />
-    <nd ref='21636756' />
-    <nd ref='21636753' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074108' timestamp='2006-12-13T20:09:44+00:00' user='nickw' visible='true'>
-    <nd ref='21561550' />
-    <nd ref='21561524' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cherry Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678187' timestamp='2007-05-31T21:17:12+01:00' visible='true'>
-    <nd ref='29704301' />
-    <nd ref='29710756' />
-    <nd ref='29710757' />
-    <nd ref='29814523' />
-    <nd ref='29814002' />
-    <nd ref='29814005' />
-    <nd ref='29814007' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Highcliffe Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948201' timestamp='2007-09-11T00:11:43+01:00' visible='true'>
-    <nd ref='48965783' />
-    <nd ref='21615421' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Simnel Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540327' timestamp='2007-04-29T21:09:55+01:00' visible='true'>
-    <nd ref='28194394' />
-    <nd ref='28194395' />
-    <nd ref='28194396' />
-    <nd ref='28194397' />
-    <nd ref='28194398' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Siskin Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5041388' timestamp='2007-12-06T20:40:09+00:00' user='nickw' visible='true'>
-    <nd ref='33718242' />
-    <nd ref='33718243' />
-    <nd ref='33718244' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rowan Close' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4077023' timestamp='2006-12-16T10:14:11+00:00' user='nickw' visible='true'>
-    <nd ref='21600433' />
-    <nd ref='21600434' />
-    <nd ref='21600435' />
-    <nd ref='21600436' />
-    <nd ref='21600437' />
-    <nd ref='21600438' />
-    <nd ref='21600439' />
-    <nd ref='21600440' />
-    <nd ref='21600416' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Cumbrian Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3102402' timestamp='2007-12-10T19:11:41+00:00' user='sladen' visible='true'>
-    <nd ref='254635' />
-    <nd ref='254636' />
-    <nd ref='254637' />
-    <nd ref='25764488' />
-    <nd ref='254638' />
-    <nd ref='254639' />
-    <nd ref='254640' />
-    <nd ref='518772' />
-    <nd ref='518771' />
-    <nd ref='254642' />
-    <nd ref='19890101' />
-    <nd ref='254645' />
-    <nd ref='19890103' />
-    <nd ref='254646' />
-    <nd ref='254647' />
-    <nd ref='254648' />
-    <nd ref='19890104' />
-    <nd ref='254649' />
-    <nd ref='160216595' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mount Pleasant Road; Radcliffe Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4747430' timestamp='2007-06-12T20:38:35+01:00' visible='true'>
-    <nd ref='30256856' />
-    <nd ref='30256626' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leander Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3805997' timestamp='2007-09-20T19:45:52+01:00' user='mike l' visible='true'>
-    <nd ref='2073651' />
-    <nd ref='2073636' />
-    <nd ref='2073628' />
-    <nd ref='2073622' />
-    <nd ref='2073310' />
-    <nd ref='19035787' />
-    <nd ref='19035788' />
-    <nd ref='53411347' />
-    <nd ref='19035789' />
-    <nd ref='42141696' />
-    <nd ref='19035790' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hartley Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4546179' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true'>
-    <nd ref='28342612' />
-    <nd ref='28342619' />
-    <nd ref='28342620' />
-    <nd ref='28231354' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Morley Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604516' timestamp='2007-05-15T20:47:42+01:00' user='nickw' visible='true'>
-    <nd ref='29134126' />
-    <nd ref='29134128' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126955' timestamp='2007-10-16T17:22:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15360183' />
-    <nd ref='15360185' />
-    <nd ref='15360186' />
-    <nd ref='15360187' />
-    <nd ref='15360188' />
-    <nd ref='15360189' />
-    <nd ref='15360190' />
-    <nd ref='15360191' />
-    <nd ref='15360192' />
-    <nd ref='15360193' />
-    <nd ref='15360194' />
-    <nd ref='15360195' />
-    <nd ref='15360196' />
-    <nd ref='15360197' />
-    <nd ref='15360198' />
-    <nd ref='15360199' />
-    <nd ref='15360200' />
-    <nd ref='15360201' />
-    <nd ref='15360202' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Stoneham Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134039' timestamp='2007-10-16T17:47:55+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28801042' />
-    <nd ref='28801033' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Lords Hill Centre East' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635714' timestamp='2007-05-21T23:53:41+01:00' user='nickw' visible='true'>
-    <nd ref='29462160' />
-    <nd ref='29462161' />
-    <nd ref='29462162' />
-    <nd ref='29462163' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727725' timestamp='2007-06-09T19:48:45+01:00' user='nickw' visible='true'>
-    <nd ref='30124669' />
-    <nd ref='30124670' />
-    <nd ref='30124671' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lambourne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4250747' timestamp='2007-01-25T22:42:22+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21600673' />
-    <nd ref='25282138' />
-    <nd ref='21600674' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540330' timestamp='2007-04-29T21:09:59+01:00' visible='true'>
-    <nd ref='28194403' />
-    <nd ref='28194404' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wryneck Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578267' timestamp='2006-10-06T23:29:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='17721081' />
-    <nd ref='17721087' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Coles Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2148309' timestamp='2007-09-25T13:11:17+01:00' visible='true'>
-    <nd ref='544318' />
-    <nd ref='324341' />
-    <nd ref='254430' />
-    <nd ref='21420434' />
-    <nd ref='319640' />
-    <nd ref='319638' />
-    <nd ref='700538' />
-    <nd ref='254429' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Portswood Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4687327' timestamp='2007-05-30T21:46:53+01:00' user='nickw' visible='true'>
-    <nd ref='10217218' />
-    <nd ref='29795005' />
-    <nd ref='29794807' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dean Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679905' timestamp='2007-06-10T18:15:27+01:00' visible='true'>
-    <nd ref='15359721' />
-    <nd ref='30161114' />
-    <nd ref='29728856' />
-    <nd ref='30161113' />
-    <nd ref='29728857' />
-    <nd ref='29728867' />
-    <nd ref='29510740' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Newton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585183' timestamp='2007-05-12T09:41:45+01:00' user='nickw' visible='true'>
-    <nd ref='29001342' />
-    <nd ref='29001344' />
-    <nd ref='29001343' />
-    <nd ref='29001310' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Priory Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124842' timestamp='2007-07-30T16:07:03+01:00' visible='true'>
-    <nd ref='12594782' />
-    <nd ref='18232099' />
-    <nd ref='12591342' />
-    <nd ref='12594769' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Archers Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3996455' timestamp='2006-11-10T08:43:43+00:00' user='nickw' visible='true'>
-    <nd ref='247806' />
-    <nd ref='2073407' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Holyrood Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9045312' timestamp='2007-10-12T14:03:58+01:00' user='SteveC' visible='true'>
-    <nd ref='66589144' />
-    <nd ref='66589145' />
-    <nd ref='66589146' />
-    <nd ref='66589147' />
-    <nd ref='66589144' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Ordnance Survey Canteen' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4551583' timestamp='2007-05-02T00:35:37+01:00' visible='true'>
-    <nd ref='17721052' />
-    <nd ref='28418546' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4536330' timestamp='2007-04-29T02:31:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21636796' />
-    <nd ref='21636724' />
-    <nd ref='21636797' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801703' timestamp='2008-02-03T06:18:39+00:00' user='sladen' visible='true'>
-    <nd ref='14726182' />
-    <nd ref='301582' />
-    <nd ref='245151124' />
-    <nd ref='245151110' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='6267335' timestamp='2008-01-30T19:25:21+00:00' visible='true'>
-    <nd ref='52570895' />
-    <nd ref='52570896' />
-    <tag k='bridge' v='yes' />
-    <tag k='railway' v='rail' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='2920961' timestamp='2006-08-15T12:14:25+01:00' user='nickw' visible='true'>
-    <nd ref='13564702' />
-    <nd ref='13564760' />
-    <nd ref='474650' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='2859064' timestamp='2006-08-11T09:58:59+01:00' user='80n' visible='true'>
-    <nd ref='132725' />
-    <nd ref='24924062' />
-    <nd ref='298227' />
-    <nd ref='298230' />
-    <nd ref='298232' />
-    <nd ref='132724' />
-    <nd ref='24924061' />
-    <nd ref='132723' />
-    <nd ref='298235' />
-    <nd ref='298238' />
-    <nd ref='298240' />
-    <nd ref='132722' />
-    <nd ref='298243' />
-    <nd ref='298245' />
-    <nd ref='305229' />
-    <nd ref='298247' />
-    <tag k='oneway' v='true' />
-    <tag k='ref' v='M3' />
-    <tag k='highway' v='motorway' />
-    <tag k='name' v='M3 Southbound' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151490' timestamp='2007-06-03T20:17:27+01:00' visible='true'>
-    <nd ref='29914421' />
-    <nd ref='29924613' />
-    <nd ref='29923775' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Compton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16610266' timestamp='2007-12-15T20:18:40+00:00' user='nickw' visible='true'>
-    <nd ref='171532996' />
-    <nd ref='171532999' />
-    <nd ref='171533004' />
-    <nd ref='171533014' />
-    <nd ref='171533019' />
-    <nd ref='171533026' />
-    <nd ref='171533030' />
-    <nd ref='171533033' />
-    <nd ref='14743140' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Briarswood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4379655' timestamp='2007-03-23T22:53:34+00:00' user='nickw' visible='true'>
-    <nd ref='26728561' />
-    <nd ref='26728563' />
-    <nd ref='26728549' />
-    <nd ref='26728547' />
-    <nd ref='26727674' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Manor Road North' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604397' timestamp='2007-05-15T20:24:23+01:00' user='nickw' visible='true'>
-    <nd ref='27467475' />
-    <nd ref='29132669' />
-    <nd ref='29132668' />
-    <nd ref='29132667' />
-    <nd ref='29132666' />
-    <nd ref='29132665' />
-    <nd ref='29132664' />
-    <nd ref='29132662' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732334' timestamp='2007-06-10T18:18:34+01:00' visible='true'>
-    <nd ref='29535529' />
-    <nd ref='30161219' />
-    <nd ref='30161218' />
-    <nd ref='29535529' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092438' timestamp='2008-01-25T18:29:32+00:00' visible='true'>
-    <nd ref='298262' />
-    <nd ref='25303133' />
-    <nd ref='25303130' />
-    <nd ref='14745494' />
-    <nd ref='14745495' />
-    <nd ref='14745496' />
-    <nd ref='14745498' />
-    <nd ref='14745499' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800084' timestamp='2008-02-03T05:57:02+00:00' user='sladen' visible='true'>
-    <nd ref='245145334' />
-    <nd ref='245145422' />
-    <nd ref='245145423' />
-    <nd ref='245145424' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4386812' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26728546' />
-    <nd ref='26728548' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ludlow Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211069' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949986' />
-    <nd ref='24949819' />
-    <nd ref='24949841' />
-    <nd ref='24949840' />
-    <nd ref='24949839' />
-    <nd ref='24949838' />
-    <nd ref='24949910' />
-    <nd ref='24949911' />
-    <nd ref='24949912' />
-    <nd ref='24949913' />
-    <nd ref='24949914' />
-    <nd ref='24949885' />
-    <nd ref='24949915' />
-    <nd ref='24949916' />
-    <nd ref='24949899' />
-    <nd ref='24949917' />
-    <nd ref='24949918' />
-    <nd ref='24949919' />
-    <nd ref='24949920' />
-    <nd ref='24949925' />
-    <nd ref='24949924' />
-    <nd ref='24949926' />
-    <nd ref='24949927' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Merdon Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150628' timestamp='2007-10-16T02:43:33+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29706973' />
-    <nd ref='29706974' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Birch Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119970' timestamp='2007-06-23T18:53:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10216401' />
-    <nd ref='10216406' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C194' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4061537' timestamp='2007-05-12T10:03:24+01:00' user='nickw' visible='true'>
-    <nd ref='423279' />
-    <nd ref='21507762' />
-    <nd ref='388880' />
-    <nd ref='388879' />
-    <nd ref='388948' />
-    <nd ref='388950' />
-    <nd ref='20954600' />
-    <nd ref='29002846' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Honeysuckle Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151067' timestamp='2007-05-31T22:10:58+01:00' visible='true'>
-    <nd ref='29816595' />
-    <nd ref='29816597' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131414' timestamp='2006-11-12T20:47:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20967606' />
-    <nd ref='20967607' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4707618' timestamp='2007-06-05T20:54:58+01:00' visible='true'>
-    <nd ref='29928422' />
-    <nd ref='29928423' />
-    <nd ref='29928424' />
-    <nd ref='29928425' />
-    <nd ref='29928426' />
-    <nd ref='29708039' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2622616' timestamp='2007-10-17T01:27:51+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319617' />
-    <nd ref='319619' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4703392' timestamp='2007-06-03T21:48:34+01:00' visible='true'>
-    <nd ref='29926268' />
-    <nd ref='29708037' />
-    <nd ref='29708038' />
-    <nd ref='29708039' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8147381' timestamp='2008-01-29T12:02:02+00:00' user='Dean Earley' visible='true'>
-    <nd ref='27512891' />
-    <nd ref='27512896' />
-    <nd ref='27512894' />
-    <nd ref='27512892' />
-    <nd ref='243979481' />
-    <nd ref='243979482' />
-    <nd ref='243979483' />
-    <nd ref='243979484' />
-    <nd ref='243979485' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9600752' timestamp='2007-10-16T06:17:37+01:00' user='andrewpmk' visible='true'>
-    <nd ref='25296014' />
-    <nd ref='25296015' />
-    <nd ref='21178408' />
-    <nd ref='21178409' />
-    <nd ref='21178410' />
-    <nd ref='15740476' />
-    <nd ref='25296013' />
-    <nd ref='21178411' />
-    <nd ref='21178412' />
-    <tag k='ref' v='B3335' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556696' timestamp='2007-10-29T08:19:30+00:00' user='nickw' visible='true'>
-    <nd ref='28583076' />
-    <nd ref='91127864' />
-    <nd ref='91127615' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124972' timestamp='2007-10-29T16:25:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='17721085' />
-    <nd ref='2433503' />
-    <nd ref='29631644' />
-    <nd ref='29631646' />
-    <nd ref='15359710' />
-    <nd ref='29631642' />
-    <nd ref='14745444' />
-    <nd ref='29631643' />
-    <nd ref='14745443' />
-    <nd ref='14745442' />
-    <nd ref='14745441' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724196' timestamp='2007-12-08T20:12:42+00:00' user='nickw' visible='true'>
-    <nd ref='157204125' />
-    <nd ref='157200348' />
-    <nd ref='157204128' />
-    <nd ref='157204131' />
-    <nd ref='157206239' />
-    <nd ref='157204133' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pembrey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10559892' timestamp='2007-10-29T10:20:36+00:00' user='DrMark' visible='true'>
-    <nd ref='91228879' />
-    <nd ref='91228882' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546073' timestamp='2007-04-30T21:49:14+01:00' user='nickw' visible='true'>
-    <nd ref='635138' />
-    <nd ref='28341797' />
-    <nd ref='28231042' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edwina Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546157' timestamp='2007-04-30T22:13:58+01:00' user='nickw' visible='true'>
-    <nd ref='28342581' />
-    <nd ref='28342580' />
-    <nd ref='28342579' />
-    <nd ref='28342578' />
-    <nd ref='28342577' />
-    <nd ref='28342576' />
-    <nd ref='28342567' />
-    <nd ref='28342587' />
-    <nd ref='28342566' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Acacia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546236' timestamp='2007-04-30T22:24:08+01:00' user='nickw' visible='true'>
-    <nd ref='28343220' />
-    <nd ref='28343221' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Vernon Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5041392' timestamp='2007-12-06T20:40:09+00:00' user='nickw' visible='true'>
-    <nd ref='33718254' />
-    <nd ref='33718247' />
-    <nd ref='33718255' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Larch Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='10601304' timestamp='2007-12-07T13:27:41+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92682344' />
-    <nd ref='92682345' />
-    <nd ref='92682346' />
-    <nd ref='92682347' />
-    <nd ref='92682349' />
-    <nd ref='92682351' />
-    <nd ref='92682344' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Delta House' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4540316' timestamp='2007-04-29T21:09:46+01:00' visible='true'>
-    <nd ref='28194369' />
-    <nd ref='28194370' />
-    <nd ref='28194372' />
-    <nd ref='28194374' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gannet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079316' timestamp='2006-12-18T21:41:10+00:00' user='nickw' visible='true'>
-    <nd ref='21615435' />
-    <nd ref='21636931' />
-    <nd ref='21636932' />
-    <nd ref='21636933' />
-    <nd ref='21636934' />
-    <nd ref='21636935' />
-    <nd ref='21636936' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151456' timestamp='2007-06-03T19:02:05+01:00' visible='true'>
-    <nd ref='29914414' />
-    <nd ref='29914407' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ladywood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639758' timestamp='2006-06-01T09:59:51+01:00' user='nickw' visible='true'>
-    <nd ref='254962' />
-    <nd ref='254247' />
-    <nd ref='325674' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='15724853' timestamp='2007-12-08T20:16:59+00:00' user='nickw' visible='true'>
-    <nd ref='157212542' />
-    <nd ref='157212558' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunbar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4250820' timestamp='2008-02-03T06:26:32+00:00' user='sladen' visible='true'>
-    <nd ref='20973236' />
-    <nd ref='20973235' />
-    <nd ref='34278587' />
-    <nd ref='254757' />
-    <nd ref='245154220' />
-    <nd ref='8596818' />
-    <nd ref='254758' />
-    <nd ref='26004487' />
-    <nd ref='27496131' />
-    <nd ref='254759' />
-    <nd ref='26447531' />
-    <nd ref='27496132' />
-    <nd ref='254760' />
-    <nd ref='25440797' />
-    <nd ref='14806969' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4536220' timestamp='2007-12-07T13:28:42+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180236' />
-    <nd ref='28180237' />
-    <nd ref='28180238' />
-    <nd ref='28180239' />
-    <nd ref='28180235' />
-    <nd ref='28180236' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4342624' timestamp='2007-12-10T19:17:48+00:00' user='sladen' visible='true'>
-    <nd ref='20972832' />
-    <nd ref='26575744' />
-    <nd ref='160230084' />
-    <nd ref='20972831' />
-    <nd ref='20972830' />
-    <nd ref='160229117' />
-    <nd ref='87990029' />
-    <nd ref='160228470' />
-    <nd ref='160228953' />
-    <nd ref='20972829' />
-    <nd ref='20972828' />
-    <nd ref='31487479' />
-    <nd ref='26114349' />
-    <nd ref='20972790' />
-    <nd ref='254512' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Chapel Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4551579' timestamp='2007-10-29T15:11:30+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28418535' />
-    <nd ref='28418534' />
-    <nd ref='29548710' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Owen Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4280393' timestamp='2007-02-11T18:07:24+00:00' user='nickw' visible='true'>
-    <nd ref='254260' />
-    <nd ref='25783081' />
-    <nd ref='25783082' />
-    <nd ref='25783083' />
-    <nd ref='25783084' />
-    <nd ref='25783085' />
-    <nd ref='25783086' />
-    <nd ref='25783087' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677942' timestamp='2007-05-28T13:25:53+01:00' visible='true'>
-    <nd ref='29710212' />
-    <nd ref='29710215' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4636302' timestamp='2007-05-22T00:39:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29466086' />
-    <nd ref='29466108' />
-    <nd ref='29466122' />
-    <nd ref='29466123' />
-    <nd ref='29466126' />
-    <nd ref='29466128' />
-    <nd ref='29466130' />
-    <nd ref='29466132' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2651596' timestamp='2007-10-11T00:18:43+01:00' user='alfabet' visible='true'>
-    <nd ref='331353' />
-    <nd ref='20954594' />
-    <nd ref='21507758' />
-    <nd ref='20954595' />
-    <nd ref='27021748' />
-    <nd ref='331354' />
-    <nd ref='27021746' />
-    <nd ref='27021747' />
-    <nd ref='331355' />
-    <nd ref='27021749' />
-    <nd ref='331356' />
-    <nd ref='27021750' />
-    <nd ref='331357' />
-    <nd ref='29464290' />
-    <nd ref='21507798' />
-    <nd ref='388913' />
-    <nd ref='331358' />
-    <nd ref='331359' />
-    <nd ref='27021755' />
-    <nd ref='331360' />
-    <nd ref='27021756' />
-    <nd ref='27021757' />
-    <nd ref='331361' />
-    <nd ref='27021758' />
-    <nd ref='331362' />
-    <nd ref='254750' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Glen Eyre Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4077058' timestamp='2007-09-24T20:32:22+01:00' user='mike l' visible='true'>
-    <nd ref='19111092' />
-    <nd ref='269425' />
-    <nd ref='19111090' />
-    <nd ref='19111089' />
-    <nd ref='19113227' />
-    <nd ref='19111076' />
-    <nd ref='19111088' />
-    <nd ref='269426' />
-    <nd ref='19111086' />
-    <nd ref='19111075' />
-    <nd ref='19111084' />
-    <nd ref='19111083' />
-    <nd ref='19111081' />
-    <nd ref='19111080' />
-    <nd ref='19111079' />
-    <nd ref='19111077' />
-    <nd ref='269317' />
-    <nd ref='19111073' />
-    <nd ref='269318' />
-    <nd ref='29953380' />
-    <nd ref='19111072' />
-    <nd ref='269319' />
-    <nd ref='19111070' />
-    <nd ref='19111069' />
-    <nd ref='11968238' />
-    <nd ref='24949990' />
-    <nd ref='19111065' />
-    <nd ref='24949989' />
-    <nd ref='269320' />
-    <nd ref='22231194' />
-    <nd ref='19111063' />
-    <nd ref='24949987' />
-    <nd ref='19111062' />
-    <nd ref='19111060' />
-    <nd ref='24949988' />
-    <nd ref='269321' />
-    <nd ref='269322' />
-    <nd ref='19111059' />
-    <nd ref='19111055' />
-    <nd ref='19111058' />
-    <nd ref='19111056' />
-    <nd ref='269323' />
-    <nd ref='24668163' />
-    <nd ref='19111052' />
-    <nd ref='19111054' />
-    <nd ref='19111051' />
-    <nd ref='269324' />
-    <nd ref='269325' />
-    <nd ref='269326' />
-    <nd ref='19111050' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Hursley Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3087850' timestamp='2006-09-02T18:21:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254493' />
-    <nd ref='254492' />
-    <nd ref='254491' />
-    <nd ref='254880' />
-    <nd ref='254881' />
-    <nd ref='254882' />
-    <nd ref='254883' />
-    <nd ref='14726190' />
-    <nd ref='14713527' />
-    <nd ref='14713528' />
-    <nd ref='14726187' />
-    <nd ref='301584' />
-    <nd ref='254454' />
-    <nd ref='254493' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Charlotte Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148390' timestamp='2007-04-29T08:34:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194507' />
-    <nd ref='28194515' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084423' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689154' />
-    <nd ref='21689061' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235067' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='25282086' />
-    <nd ref='25282093' />
-    <nd ref='25282092' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9651722' timestamp='2007-10-16T17:47:52+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28246067' />
-    <nd ref='28246070' />
-    <nd ref='325670' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordswood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546501' timestamp='2007-04-30T23:36:54+01:00' user='nickw' visible='true'>
-    <nd ref='28347589' />
-    <nd ref='28347592' />
-    <nd ref='28345060' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Dyneley Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211065' timestamp='2007-01-07T12:39:36+00:00' user='nickw' visible='true'>
-    <nd ref='24949826' />
-    <nd ref='24949827' />
-    <nd ref='24949828' />
-    <nd ref='24949829' />
-    <nd ref='24949816' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kingsway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10522406' timestamp='2007-10-28T21:45:06+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90660053' />
-    <nd ref='90660054' />
-    <nd ref='90660055' />
-    <nd ref='90660056' />
-    <nd ref='90660057' />
-    <nd ref='90660058' />
-    <nd ref='90660059' />
-    <nd ref='90660060' />
-    <nd ref='90660061' />
-    <nd ref='90660053' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4360456' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575771' />
-    <nd ref='26575726' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Clench Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2417621' timestamp='2006-07-13T23:46:44+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10537327' />
-    <nd ref='474647' />
-    <nd ref='474648' />
-    <nd ref='10537326' />
-    <nd ref='10537327' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996909' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957214' />
-    <nd ref='20957186' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Malmesbury Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3907168' timestamp='2006-10-27T23:39:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110935' />
-    <nd ref='20110942' />
-    <nd ref='20110825' />
-    <nd ref='20110939' />
-    <nd ref='20110907' />
-    <nd ref='20110857' />
-    <nd ref='20110922' />
-    <nd ref='20110855' />
-    <nd ref='20110913' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Moat Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151452' timestamp='2007-06-03T16:22:57+01:00' visible='true'>
-    <nd ref='29914333' />
-    <nd ref='29914338' />
-    <nd ref='29914341' />
-    <nd ref='29914403' />
-    <nd ref='29914404' />
-    <nd ref='29914405' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sovereign Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9674783' timestamp='2007-10-16T23:54:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='8596791' />
-    <nd ref='8596784' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150802' timestamp='2007-06-03T16:05:29+01:00' visible='true'>
-    <nd ref='29914260' />
-    <nd ref='29914261' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4636145' timestamp='2007-05-22T00:19:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='243873' />
-    <nd ref='29464240' />
-    <nd ref='243874' />
-    <nd ref='29464238' />
-    <nd ref='29464237' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4643758' timestamp='2007-05-24T00:05:28+01:00' visible='true'>
-    <nd ref='29392350' />
-    <nd ref='29392354' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773444' timestamp='2007-06-17T22:03:39+01:00' visible='true'>
-    <nd ref='30506805' />
-    <nd ref='30506806' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077042' timestamp='2006-12-16T10:14:13+00:00' user='nickw' visible='true'>
-    <nd ref='21600508' />
-    <nd ref='21600509' />
-    <nd ref='21636946' />
-    <nd ref='21600419' />
-    <nd ref='21636945' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edward Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8307811' timestamp='2007-10-16T23:54:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973113' />
-    <nd ref='20973108' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625938' timestamp='2007-05-20T10:19:37+01:00' user='nickw' visible='true'>
-    <nd ref='29380434' />
-    <nd ref='29380435' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Greenlea Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535821' timestamp='2007-10-16T17:47:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28173744' />
-    <nd ref='48884799' />
-    <nd ref='28173825' />
-    <nd ref='28173818' />
-    <nd ref='28173811' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woburn Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='2494480' timestamp='2006-07-18T10:28:51+01:00' user='nickw' visible='true'>
-    <nd ref='518815' />
-    <nd ref='24924113' />
-    <nd ref='518816' />
-    <nd ref='329641' />
-    <nd ref='544343' />
-    <nd ref='329479' />
-    <nd ref='25471838' />
-    <nd ref='25471839' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Octavia Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4701881' timestamp='2007-06-03T15:50:16+01:00' visible='true'>
-    <nd ref='29912995' />
-    <nd ref='29912993' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15516350' timestamp='2007-12-07T13:53:03+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='154773089' />
-    <nd ref='154773090' />
-    <nd ref='154773091' />
-    <nd ref='154773092' />
-    <nd ref='154773093' />
-    <nd ref='154773094' />
-    <nd ref='154773089' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='2854821' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071338' />
-    <nd ref='13071351' />
-    <nd ref='13071354' />
-    <nd ref='13071355' />
-    <nd ref='13071356' />
-    <nd ref='13071352' />
-    <nd ref='13071353' />
-    <nd ref='13071233' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cobden Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061526' timestamp='2006-12-09T09:51:50+00:00' user='nickw' visible='true'>
-    <nd ref='21507749' />
-    <nd ref='21507751' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558325' timestamp='2007-05-03T00:08:31+01:00' visible='true'>
-    <nd ref='28584201' />
-    <nd ref='28584208' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072033' timestamp='2008-02-03T06:25:24+00:00' user='sladen' visible='true'>
-    <nd ref='8596782' />
-    <nd ref='34278591' />
-    <nd ref='34278593' />
-    <nd ref='25440798' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4495960' timestamp='2007-12-13T18:24:53+00:00' visible='true'>
-    <nd ref='8596806' />
-    <nd ref='27561974' />
-    <nd ref='27561976' />
-    <nd ref='27561978' />
-    <nd ref='27561979' />
-    <nd ref='27561982' />
-    <nd ref='27561984' />
-    <nd ref='27561986' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077260' timestamp='2006-12-16T17:47:15+00:00' user='David Currie' visible='true'>
-    <nd ref='21613447' />
-    <nd ref='21613448' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Castle Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635697' timestamp='2007-05-21T23:51:10+01:00' user='nickw' visible='true'>
-    <nd ref='20972826' />
-    <nd ref='29461819' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chandos Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269329' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640002' />
-    <nd ref='25640001' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chine Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3128000' timestamp='2007-12-08T20:35:44+00:00' user='nickw' visible='true'>
-    <nd ref='14957851' />
-    <nd ref='28801041' />
-    <nd ref='28801168' />
-    <nd ref='14957850' />
-    <nd ref='157241440' />
-    <nd ref='51949469' />
-    <nd ref='157241425' />
-    <nd ref='50774705' />
-    <nd ref='14957849' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Rownhams Road North' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4079289' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='388915' />
-    <nd ref='27021775' />
-    <nd ref='21636774' />
-    <nd ref='21636741' />
-    <nd ref='27021776' />
-    <nd ref='27021777' />
-    <nd ref='21636773' />
-    <nd ref='21636771' />
-    <nd ref='21636772' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woodview Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661852' timestamp='2007-05-26T20:15:59+01:00' visible='true'>
-    <nd ref='28418340' />
-    <nd ref='29632892' />
-    <nd ref='29632894' />
-    <nd ref='29632897' />
-    <nd ref='29632900' />
-    <nd ref='29632903' />
-    <nd ref='28339172' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586165' timestamp='2007-05-12T15:28:47+01:00' user='nickw' visible='true'>
-    <nd ref='29009025' />
-    <nd ref='29009026' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kenwyn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119872' timestamp='2006-06-04T00:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319647' />
-    <nd ref='319652' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Gordon Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4711368' timestamp='2007-06-05T20:54:57+01:00' visible='true'>
-    <nd ref='29991809' />
-    <nd ref='29928422' />
-    <tag k='foot' v='yes' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='21555990' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true'>
-    <nd ref='232014677' />
-    <nd ref='232014679' />
-    <nd ref='232014680' />
-    <nd ref='232014682' />
-    <nd ref='232014683' />
-    <nd ref='232014684' />
-    <nd ref='232014685' />
-    <nd ref='232014687' />
-    <nd ref='232014688' />
-    <nd ref='232014689' />
-    <nd ref='232014677' />
-    <tag k='amenity' v='school' />
-    <tag k='name' v='Bitterne Park Secondary' />
-    <tag k='created_by' v='Potlatch 0.6b' />
-  </way>
-  <way id='3999286' timestamp='2006-11-13T00:08:27+00:00' user='Dean Earley' visible='true'>
-    <nd ref='19892129' />
-    <nd ref='20972789' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Anglesea Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148501' timestamp='2007-04-29T20:03:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240330' />
-    <nd ref='28240331' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vokes Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1685' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='324340' />
-    <nd ref='530602' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Livingstone Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4269310' timestamp='2007-02-04T22:51:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639940' />
-    <nd ref='25639908' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3186096' timestamp='2006-09-11T20:18:03+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14745440' />
-    <nd ref='15359691' />
-    <nd ref='15359692' />
-    <nd ref='15359694' />
-    <nd ref='15359695' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237120' timestamp='2007-05-28T19:40:04+01:00' visible='true'>
-    <nd ref='15359719' />
-    <nd ref='254682' />
-    <nd ref='29728882' />
-    <nd ref='15359728' />
-    <nd ref='254681' />
-    <nd ref='254678' />
-    <nd ref='17721066' />
-    <nd ref='17721054' />
-    <nd ref='17721053' />
-    <nd ref='25296605' />
-    <nd ref='25296607' />
-    <nd ref='29730502' />
-    <nd ref='25296609' />
-    <nd ref='25296610' />
-    <nd ref='254676' />
-    <tag k='ref' v='A335' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Leigh Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636149' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='27021835' />
-    <nd ref='29464246' />
-    <nd ref='29464247' />
-    <nd ref='29464248' />
-    <nd ref='29464249' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Meadow' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009846' timestamp='2007-11-20T13:42:28+00:00' user='Gregory Williams' visible='true'>
-    <nd ref='21178404' />
-    <nd ref='21178403' />
-    <nd ref='21178401' />
-    <nd ref='21178432' />
-    <nd ref='21178407' />
-    <nd ref='21178402' />
-    <nd ref='21178406' />
-    <nd ref='15740475' />
-    <nd ref='21178405' />
-    <nd ref='21178404' />
-    <tag k='junction' v='roundabout' />
-    <tag k='ref' v='B3335' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-  </way>
-  <way id='4546497' timestamp='2007-06-09T19:36:01+01:00' user='nickw' visible='true'>
-    <nd ref='28347572' />
-    <nd ref='28347573' />
-    <nd ref='28347575' />
-    <nd ref='30124225' />
-    <nd ref='28347576' />
-    <nd ref='28347577' />
-    <nd ref='28347578' />
-    <nd ref='474646' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541330' timestamp='2007-04-29T22:57:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='28257903' />
-    <nd ref='28257905' />
-    <nd ref='28257907' />
-    <nd ref='28257908' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rothbury Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875601' timestamp='2007-12-10T19:12:28+00:00' user='sladen' visible='true'>
-    <nd ref='31487488' />
-    <nd ref='31487487' />
-    <nd ref='31487486' />
-    <nd ref='31487485' />
-    <nd ref='160219862' />
-    <nd ref='31487484' />
-    <nd ref='160219865' />
-    <nd ref='160219866' />
-    <nd ref='31487483' />
-    <nd ref='160219870' />
-    <nd ref='31487482' />
-    <nd ref='160219872' />
-    <nd ref='31487481' />
-    <nd ref='31487480' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='9657398' timestamp='2007-10-16T19:19:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14727950' />
-    <nd ref='9266203' />
-    <nd ref='9266201' />
-    <nd ref='254695' />
-    <tag k='oneway' v='yes' />
-    <tag k='width' v='3' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4278971' timestamp='2008-01-20T09:54:32+00:00' user='andrewpmk' visible='true'>
-    <nd ref='25764477' />
-    <nd ref='25947174' />
-    <nd ref='25947163' />
-    <nd ref='25764478' />
-    <nd ref='25764413' />
-    <nd ref='25764415' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='Some of this is Access Only' />
-    <tag k='name' v='Hartington Road' />
-  </way>
-  <way id='2249997' timestamp='2007-05-29T22:14:41+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='254548' />
-    <nd ref='15028823' />
-    <nd ref='28830648' />
-    <nd ref='15028822' />
-    <nd ref='13071207' />
-    <nd ref='254549' />
-    <nd ref='28830658' />
-    <nd ref='10217894' />
-    <nd ref='29764412' />
-    <nd ref='254550' />
-    <nd ref='10217893' />
-    <nd ref='13071388' />
-    <nd ref='254551' />
-    <nd ref='10217891' />
-    <nd ref='28830680' />
-    <nd ref='10217892' />
-    <nd ref='15028812' />
-    <nd ref='254552' />
-    <nd ref='10217885' />
-    <nd ref='254443' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Witts Hill' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4580489' timestamp='2007-05-11T00:51:27+01:00' visible='true'>
-    <nd ref='28935743' />
-    <nd ref='28935752' />
-    <nd ref='28935753' />
-    <nd ref='28935754' />
-    <nd ref='28935755' />
-    <nd ref='28935757' />
-    <nd ref='28935758' />
-    <nd ref='28935760' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chelveston Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8440582' timestamp='2007-12-06T19:26:20+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29733427' />
-    <nd ref='29733498' />
-    <nd ref='29569784' />
-    <nd ref='28904030' />
-    <nd ref='28903935' />
-    <nd ref='29733545' />
-    <nd ref='29733460' />
-    <nd ref='29733428' />
-    <nd ref='29733452' />
-    <nd ref='28904036' />
-    <nd ref='28903807' />
-    <nd ref='28903976' />
-    <nd ref='28903887' />
-    <nd ref='28903940' />
-    <nd ref='29561784' />
-    <nd ref='29569817' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129256' timestamp='2006-09-08T02:12:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9736871' />
-    <nd ref='14964154' />
-    <nd ref='14964155' />
-    <nd ref='14964156' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677216' timestamp='2007-05-28T10:48:40+01:00' visible='true'>
-    <nd ref='29704601' />
-    <nd ref='29704600' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='St Lawrence Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556275' timestamp='2007-10-29T07:59:21+00:00' user='nickw' visible='true'>
-    <nd ref='91110950' />
-    <nd ref='91110954' />
-    <nd ref='91110957' />
-    <nd ref='91110960' />
-    <nd ref='91110964' />
-    <nd ref='91110965' />
-    <nd ref='91110986' />
-    <nd ref='91110988' />
-    <nd ref='91110990' />
-    <nd ref='91110993' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Lordsdale Greenway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5041393' timestamp='2007-12-06T20:40:08+00:00' user='nickw' visible='true'>
-    <nd ref='33718237' />
-    <nd ref='33718256' />
-    <nd ref='33718257' />
-    <nd ref='33718255' />
-    <nd ref='33718258' />
-    <nd ref='33718259' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coxford Drove' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4586152' timestamp='2007-05-12T15:26:09+01:00' user='nickw' visible='true'>
-    <nd ref='20107335' />
-    <nd ref='29008933' />
-    <nd ref='29008934' />
-    <nd ref='29008935' />
-    <nd ref='29008936' />
-    <nd ref='29008937' />
-    <nd ref='29008938' />
-    <nd ref='29008939' />
-    <nd ref='29008940' />
-    <nd ref='29008941' />
-    <nd ref='29008942' />
-    <nd ref='29008943' />
-    <nd ref='29008944' />
-    <nd ref='29008945' />
-    <nd ref='29008946' />
-    <nd ref='29008947' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arun Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724595' timestamp='2007-06-08T23:30:33+01:00' visible='true'>
-    <nd ref='30089091' />
-    <nd ref='30096954' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10314687' timestamp='2007-12-06T20:39:10+00:00' user='nickw' visible='true'>
-    <nd ref='87239732' />
-    <nd ref='87239966' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ashmead Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4711286' timestamp='2007-06-05T20:41:28+01:00' visible='true'>
-    <nd ref='29930925' />
-    <nd ref='29930926' />
-    <nd ref='29930927' />
-    <nd ref='29930928' />
-    <nd ref='29990892' />
-    <nd ref='29930929' />
-    <nd ref='29930924' />
-    <nd ref='29930925' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556366' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true'>
-    <nd ref='91113440' />
-    <nd ref='91113448' />
-    <tag k='highway' v='unsurfaced' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342667' timestamp='2007-03-09T21:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='26447517' />
-    <nd ref='26447518' />
-    <nd ref='26447519' />
-    <nd ref='26447510' />
-    <nd ref='26447511' />
-    <nd ref='26447512' />
-    <nd ref='26447513' />
-    <nd ref='26447514' />
-    <nd ref='26447515' />
-    <nd ref='26447516' />
-    <nd ref='26447517' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kent Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2953359' timestamp='2007-05-13T10:17:33+01:00' user='nickw' visible='true'>
-    <nd ref='301600' />
-    <nd ref='21420708' />
-    <nd ref='21420709' />
-    <nd ref='21420707' />
-    <nd ref='254664' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3092430' timestamp='2006-09-03T01:40:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='2433499' />
-    <nd ref='2433500' />
-    <nd ref='17721081' />
-    <nd ref='25296126' />
-    <nd ref='2433501' />
-    <nd ref='17721084' />
-    <nd ref='254685' />
-    <nd ref='17721082' />
-    <nd ref='2433499' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151517' timestamp='2007-06-03T21:43:54+01:00' visible='true'>
-    <nd ref='29927551' />
-    <nd ref='29927553' />
-    <nd ref='29927554' />
-    <nd ref='29927555' />
-    <nd ref='29927556' />
-    <nd ref='29927557' />
-    <nd ref='29927558' />
-    <nd ref='29927559' />
-    <nd ref='29927560' />
-    <nd ref='29927561' />
-    <nd ref='29927562' />
-    <nd ref='29927563' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beresford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545707' timestamp='2007-04-30T20:40:41+01:00' visible='true'>
-    <nd ref='28339136' />
-    <nd ref='28339196' />
-    <nd ref='28339199' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Heinz Burt Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764768' timestamp='2007-06-16T16:26:35+01:00' visible='true'>
-    <nd ref='30431995' />
-    <nd ref='30431998' />
-    <nd ref='30432001' />
-    <tag k='foot' v='yes' />
-    <tag k='bike' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3590008' timestamp='2008-01-01T18:41:07+00:00' user='Milliams' visible='true'>
-    <nd ref='15657675' />
-    <nd ref='160212396' />
-    <nd ref='160212397' />
-    <nd ref='17768861' />
-    <nd ref='17768860' />
-    <nd ref='17768851' />
-    <nd ref='17768852' />
-    <nd ref='160247658' />
-    <nd ref='17768853' />
-    <nd ref='17768854' />
-    <nd ref='271035' />
-    <nd ref='160247661' />
-    <nd ref='17768855' />
-    <nd ref='17768856' />
-    <nd ref='17768858' />
-    <nd ref='17768859' />
-    <nd ref='702366' />
-    <nd ref='160247665' />
-    <nd ref='702362' />
-    <nd ref='702360' />
-    <nd ref='702358' />
-    <nd ref='702356' />
-    <nd ref='14745425' />
-    <nd ref='702373' />
-    <nd ref='87979705' />
-    <nd ref='15740741' />
-    <nd ref='29632091' />
-    <nd ref='29632094' />
-    <nd ref='30161124' />
-    <nd ref='702374' />
-    <nd ref='702378' />
-    <nd ref='702385' />
-    <nd ref='21746411' />
-    <nd ref='702384' />
-    <nd ref='702391' />
-    <nd ref='702392' />
-    <nd ref='702394' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='railway' v='rail' />
-    <tag k='motorcar' v='no' />
-    <tag k='note' v='local knowledge helped too' />
-    <tag k='source' v='Landsat' />
-    <tag k='created_by' v='Potlatch 0.6' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='8151513' timestamp='2007-06-03T21:03:09+01:00' visible='true'>
-    <nd ref='29926802' />
-    <nd ref='29926697' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151942' timestamp='2007-06-08T23:30:33+01:00' visible='true'>
-    <nd ref='30089134' />
-    <nd ref='30089137' />
-    <nd ref='30089138' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Jackdaw Rise' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589175' timestamp='2007-05-13T10:11:09+01:00' user='nickw' visible='true'>
-    <nd ref='29026822' />
-    <nd ref='29026823' />
-    <tag k='highway' v='unsurfaced' />
-    <tag k='name' v='Cedar Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540741' timestamp='2007-04-29T21:43:24+01:00' visible='true'>
-    <nd ref='28249844' />
-    <nd ref='28249870' />
-    <nd ref='28249871' />
-    <nd ref='27238998' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Claremont Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269325' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640000' />
-    <nd ref='25640009' />
-    <nd ref='25640011' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Braeside Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635655' timestamp='2007-12-10T19:19:53+00:00' user='sladen' visible='true'>
-    <nd ref='29461229' />
-    <nd ref='29461227' />
-    <nd ref='29461226' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Johnson Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='8123257' timestamp='2007-09-25T13:11:17+01:00' visible='true'>
-    <nd ref='254434' />
-    <nd ref='518814' />
-    <nd ref='544334' />
-    <nd ref='14727955' />
-    <nd ref='423285' />
-    <nd ref='14727965' />
-    <nd ref='21637743' />
-    <nd ref='24924083' />
-    <nd ref='329473' />
-    <nd ref='387830' />
-    <nd ref='14727978' />
-    <nd ref='423286' />
-    <nd ref='254433' />
-    <nd ref='14727994' />
-    <nd ref='14727948' />
-    <nd ref='518806' />
-    <nd ref='518805' />
-    <nd ref='14727966' />
-    <nd ref='254432' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Portswood Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8148382' timestamp='2007-12-07T13:28:54+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180219' />
-    <nd ref='28180235' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='13252223' timestamp='2007-11-18T19:13:59+00:00' user='nickw' visible='true'>
-    <nd ref='122339828' />
-    <nd ref='14743161' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3713848' timestamp='2006-10-17T23:09:49+01:00' user='nickw' visible='true'>
-    <nd ref='18398430' />
-    <nd ref='18398431' />
-    <nd ref='18398433' />
-    <nd ref='18398434' />
-    <nd ref='18398436' />
-    <nd ref='18398437' />
-    <nd ref='18398438' />
-    <nd ref='18398439' />
-    <nd ref='18398440' />
-    <nd ref='18398441' />
-    <nd ref='18398421' />
-    <nd ref='18398422' />
-    <nd ref='18398423' />
-    <nd ref='18398424' />
-    <nd ref='18398425' />
-    <nd ref='18398426' />
-    <nd ref='18398427' />
-    <nd ref='18398428' />
-    <nd ref='18398429' />
-    <nd ref='18398430' />
-    <tag k='natural' v='wood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3701111' timestamp='2006-10-16T21:47:25+01:00' user='nickw' visible='true'>
-    <nd ref='18347839' />
-    <nd ref='254896' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Pointout Path' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='8150396' timestamp='2007-06-30T12:32:07+01:00' visible='true'>
-    <nd ref='29621214' />
-    <nd ref='29621208' />
-    <nd ref='29728854' />
-    <nd ref='29728855' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4536145' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179487' />
-    <nd ref='28179482' />
-    <nd ref='28179483' />
-    <nd ref='28179484' />
-    <nd ref='28179485' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Roman Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009850' timestamp='2007-10-16T02:43:16+01:00' user='andrewpmk' visible='true'>
-    <nd ref='305220' />
-    <nd ref='305230' />
-    <nd ref='21178424' />
-    <nd ref='15740662' />
-    <nd ref='21178426' />
-    <nd ref='21178427' />
-    <nd ref='15740661' />
-    <nd ref='21178428' />
-    <nd ref='25635425' />
-    <nd ref='21178429' />
-    <nd ref='21178401' />
-    <tag k='highway' v='primary' />
-    <tag k='maxspeed' v='96' />
-    <tag k='note' v='60 mph' />
-    <tag k='name' v='Allbrook Way' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='8150620' timestamp='2007-06-17T21:50:44+01:00' visible='true'>
-    <nd ref='29704541' />
-    <nd ref='29704540' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3431517' timestamp='2006-09-28T23:48:13+01:00' user='nickw' visible='true'>
-    <nd ref='16963753' />
-    <nd ref='16963754' />
-    <nd ref='16963755' />
-    <nd ref='16963756' />
-    <nd ref='27021835' />
-    <nd ref='16963758' />
-    <nd ref='27021834' />
-    <nd ref='16963759' />
-    <nd ref='16963762' />
-    <nd ref='16963763' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Crescent West' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698577' timestamp='2007-06-02T19:57:59+01:00' visible='true'>
-    <nd ref='29874673' />
-    <nd ref='29874674' />
-    <nd ref='29874675' />
-    <nd ref='29874676' />
-    <nd ref='29874677' />
-    <nd ref='29874678' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4724599' timestamp='2007-06-08T23:30:34+01:00' visible='true'>
-    <nd ref='30096975' />
-    <nd ref='30096976' />
-    <nd ref='30096973' />
-    <nd ref='30096974' />
-    <nd ref='30096975' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703309' timestamp='2007-06-03T20:41:56+01:00' visible='true'>
-    <nd ref='29925569' />
-    <nd ref='29925570' />
-    <nd ref='29925571' />
-    <nd ref='29925572' />
-    <nd ref='29924349' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148799' timestamp='2007-05-26T20:16:31+01:00' visible='true'>
-    <nd ref='29632854' />
-    <nd ref='29632864' />
-    <nd ref='29632879' />
-    <nd ref='29632866' />
-    <nd ref='29632857' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4074104' timestamp='2006-12-13T20:09:44+00:00' user='nickw' visible='true'>
-    <nd ref='21561542' />
-    <nd ref='21561543' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whithedwood Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008600' timestamp='2007-12-14T21:38:57+00:00' user='nickw' visible='true'>
-    <nd ref='21141491' />
-    <nd ref='21141492' />
-    <nd ref='169428754' />
-    <nd ref='28372765' />
-    <nd ref='21141493' />
-    <nd ref='28372766' />
-    <nd ref='21141494' />
-    <nd ref='325661' />
-    <nd ref='28246350' />
-    <nd ref='325663' />
-    <nd ref='28246349' />
-    <nd ref='28246348' />
-    <nd ref='325664' />
-    <nd ref='325665' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tremona Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119860' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='518808' />
-    <nd ref='387825' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brickfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3578263' timestamp='2007-06-02T19:44:18+01:00' visible='true'>
-    <nd ref='14745427' />
-    <nd ref='29392369' />
-    <nd ref='29874149' />
-    <nd ref='17721035' />
-    <nd ref='29874150' />
-    <nd ref='17721036' />
-    <nd ref='29874151' />
-    <nd ref='17721037' />
-    <nd ref='17721038' />
-    <nd ref='17721039' />
-    <nd ref='17721040' />
-    <nd ref='17721041' />
-    <nd ref='17721042' />
-    <nd ref='17721043' />
-    <nd ref='17721044' />
-    <nd ref='17721045' />
-    <nd ref='17721046' />
-    <nd ref='17721047' />
-    <nd ref='29632815' />
-    <nd ref='24924228' />
-    <nd ref='17721048' />
-    <nd ref='17721021' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2147865' timestamp='2006-07-01T03:51:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='402754' />
-    <nd ref='9285001' />
-    <nd ref='395774' />
-    <nd ref='9285000' />
-    <nd ref='17980436' />
-    <nd ref='395775' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Mordaunt Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4437586' timestamp='2007-04-09T14:37:17+01:00' user='avantman42' visible='true'>
-    <nd ref='27237362' />
-    <nd ref='27237363' />
-    <nd ref='27237360' />
-    <nd ref='27237361' />
-    <tag k='source:name' v='http://www.flickr.com/photos/russ_osm/452356325/' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Willow Tree Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16412829' timestamp='2007-12-14T21:26:08+00:00' user='nickw' visible='true'>
-    <nd ref='20976770' />
-    <nd ref='169406425' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='what a completely ridiculous name. I've lost track of the number of fake crescents I've come across since starting this mapping thing....' />
-    <tag k='name' v='Shanklin Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152672' timestamp='2007-06-17T22:25:19+01:00' visible='true'>
-    <nd ref='29929002' />
-    <nd ref='29929008' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parham Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910153' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20130968' />
-    <nd ref='20130971' />
-    <nd ref='20130974' />
-    <nd ref='20130975' />
-    <nd ref='20130977' />
-    <nd ref='20130978' />
-    <nd ref='20130969' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3186092' timestamp='2007-06-03T14:54:33+01:00' visible='true'>
-    <nd ref='15359718' />
-    <nd ref='17721075' />
-    <nd ref='15359716' />
-    <nd ref='15359719' />
-    <tag k='source:name' v='Hampshire county council' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Leigh Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120213' timestamp='2007-12-10T19:38:34+00:00' user='sladen' visible='true'>
-    <nd ref='30161371' />
-    <nd ref='30161372' />
-    <nd ref='30161373' />
-    <nd ref='30161374' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='railway' v='rail' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4271530' timestamp='2007-10-29T16:22:11+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='25675793' />
-    <nd ref='25675794' />
-    <nd ref='25675795' />
-    <nd ref='25675796' />
-    <nd ref='25675797' />
-    <nd ref='25675798' />
-    <tag k='highway' v='tertiary' />
-    <tag k='note' v='These are primarily inside Southampton docks, and not strictly public access :o)' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4211078' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24949927' />
-    <nd ref='24949935' />
-    <nd ref='24949936' />
-    <nd ref='24949937' />
-    <nd ref='24949825' />
-    <nd ref='24949987' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Valley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586161' timestamp='2007-05-12T15:28:46+01:00' user='nickw' visible='true'>
-    <nd ref='29008940' />
-    <nd ref='29009016' />
-    <nd ref='29009017' />
-    <nd ref='29008456' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tresillian Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558161' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582960' />
-    <nd ref='28582933' />
-    <nd ref='28582928' />
-    <nd ref='28582925' />
-    <nd ref='28582922' />
-    <nd ref='28582924' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Salerno Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732343' timestamp='2007-06-10T18:25:32+01:00' visible='true'>
-    <nd ref='30161370' />
-    <nd ref='30161371' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='railway' v='rail' />
-    <tag k='bridge' v='yes' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4540322' timestamp='2007-04-29T21:09:48+01:00' visible='true'>
-    <nd ref='28194384' />
-    <nd ref='28194385' />
-    <nd ref='28194389' />
-    <nd ref='28194391' />
-    <nd ref='28194393' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kestrel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574124' timestamp='2007-12-06T20:43:05+00:00' user='nickw' visible='true'>
-    <nd ref='28874063' />
-    <nd ref='28874062' />
-    <nd ref='28874061' />
-    <nd ref='28874060' />
-    <nd ref='28874059' />
-    <nd ref='28874058' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Outer Circle' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='10556194' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true'>
-    <nd ref='91109267' />
-    <nd ref='91109270' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hunton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999827' timestamp='2006-11-13T21:39:22+00:00' user='nickw' visible='true'>
-    <nd ref='243879' />
-    <nd ref='28582968' />
-    <nd ref='243883' />
-    <nd ref='20976682' />
-    <nd ref='20976683' />
-    <nd ref='20976684' />
-    <nd ref='28582967' />
-    <nd ref='20976685' />
-    <nd ref='28582965' />
-    <nd ref='325671' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunkirk Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2147861' timestamp='2006-07-01T03:51:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9285001' />
-    <nd ref='650801' />
-    <nd ref='9285003' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bath Street' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4329578' timestamp='2007-03-04T18:58:18+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346883' />
-    <nd ref='26346884' />
-    <nd ref='26346885' />
-    <nd ref='26346880' />
-    <nd ref='26346883' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ashburnham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8236073' timestamp='2006-06-01T09:19:31+01:00' user='nickw' visible='true'>
-    <nd ref='254366' />
-    <nd ref='254706' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-  </way>
-  <way id='1662' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='423286' />
-    <nd ref='423287' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brickfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='22800088' timestamp='2008-02-03T06:00:41+00:00' user='sladen' visible='true'>
-    <nd ref='14727953' />
-    <nd ref='245145603' />
-    <nd ref='245145573' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='London Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4294710' timestamp='2007-08-12T23:07:49+01:00' user='Edward' visible='true'>
-    <nd ref='25938547' />
-    <nd ref='25764441' />
-    <nd ref='25765745' />
-    <nd ref='25947162' />
-    <nd ref='25938548' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Graham Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='10560219' timestamp='2007-10-29T10:34:25+00:00' user='DrMark' visible='true'>
-    <nd ref='91238655' />
-    <nd ref='91238656' />
-    <nd ref='91238657' />
-    <nd ref='91238658' />
-    <nd ref='91238655' />
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800109' timestamp='2008-02-03T06:04:24+00:00' user='sladen' visible='true'>
-    <nd ref='245147536' />
-    <nd ref='245147917' />
-    <nd ref='245147918' />
-    <nd ref='245147919' />
-    <nd ref='245147920' />
-    <nd ref='245147921' />
-    <nd ref='245147922' />
-    <nd ref='245147923' />
-    <nd ref='245147925' />
-    <nd ref='245148036' />
-    <nd ref='245147927' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3806002' timestamp='2006-10-22T10:18:19+01:00' user='nickw' visible='true'>
-    <nd ref='247794' />
-    <nd ref='19035799' />
-    <nd ref='19035794' />
-    <nd ref='27021817' />
-    <nd ref='27021818' />
-    <nd ref='19035793' />
-    <nd ref='19035792' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='University Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5946803' timestamp='2007-09-10T23:28:37+01:00' visible='true'>
-    <nd ref='14726571' />
-    <nd ref='48950431' />
-    <nd ref='48950434' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Brinton's Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077066' timestamp='2007-12-06T20:43:10+00:00' user='Dean Earley' visible='true'>
-    <nd ref='153329594' />
-    <nd ref='153329586' />
-    <nd ref='29510003' />
-    <nd ref='254732' />
-    <nd ref='24950056' />
-    <nd ref='29953497' />
-    <nd ref='29762376' />
-    <nd ref='29710124' />
-    <nd ref='24949986' />
-    <nd ref='29710215' />
-    <nd ref='254733' />
-    <nd ref='24924317' />
-    <nd ref='24949985' />
-    <nd ref='24924318' />
-    <nd ref='254734' />
-    <nd ref='254735' />
-    <nd ref='254736' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2233' timestamp='2006-06-04T00:30:54+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254544' />
-    <nd ref='675842' />
-    <nd ref='20102979' />
-    <nd ref='675843' />
-    <nd ref='28348152' />
-    <nd ref='20102980' />
-    <nd ref='28348132' />
-    <nd ref='675844' />
-    <nd ref='20102975' />
-    <nd ref='675845' />
-    <nd ref='20102976' />
-    <nd ref='675846' />
-    <nd ref='20102977' />
-    <nd ref='28348119' />
-    <nd ref='675847' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Forest Hills Drive' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8152329' timestamp='2007-10-29T15:43:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30290730' />
-    <nd ref='30290729' />
-    <tag k='highway' v='service' />
-    <tag k='note' v='Needs tidying with a real GPS trace' />
-    <tag k='name' v='Tollgate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150632' timestamp='2007-10-16T02:43:31+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29912979' />
-    <nd ref='29912981' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broom Hill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16414042' timestamp='2007-12-14T21:35:48+00:00' user='nickw' visible='true'>
-    <nd ref='169423557' />
-    <nd ref='169423559' />
-    <nd ref='169423566' />
-    <nd ref='169423570' />
-    <nd ref='169423477' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Birch Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690978' timestamp='2007-05-31T22:00:59+01:00' visible='true'>
-    <nd ref='29816412' />
-    <nd ref='29816424' />
-    <nd ref='29816425' />
-    <nd ref='29816426' />
-    <nd ref='29816427' />
-    <nd ref='29816428' />
-    <nd ref='29816429' />
-    <nd ref='29816430' />
-    <nd ref='29816431' />
-    <nd ref='29816432' />
-    <nd ref='29816433' />
-    <nd ref='29816434' />
-    <nd ref='29816435' />
-    <nd ref='29816436' />
-    <nd ref='29816437' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360452' timestamp='2007-05-21T23:37:12+01:00' user='nickw' visible='true'>
-    <nd ref='635147' />
-    <nd ref='26782593' />
-    <nd ref='26575765' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580493' timestamp='2007-05-11T00:51:29+01:00' visible='true'>
-    <nd ref='28935773' />
-    <nd ref='28935767' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Eastchurch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556770' timestamp='2007-10-29T08:21:50+00:00' user='nickw' visible='true'>
-    <nd ref='91130464' />
-    <nd ref='91130466' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Winifred's Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778239' timestamp='2006-08-04T11:59:44+01:00' user='nickw' visible='true'>
-    <nd ref='12594960' />
-    <nd ref='12595008' />
-    <nd ref='12595011' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westrow Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8119864' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306317' />
-    <nd ref='306318' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Abbotts Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4386800' timestamp='2007-03-25T18:42:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781161' />
-    <nd ref='26781160' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cecil Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='14505786' timestamp='2007-11-29T22:29:08+00:00' user='nickw' visible='true'>
-    <nd ref='142616989' />
-    <nd ref='142616993' />
-    <nd ref='142616998' />
-    <nd ref='142617001' />
-    <nd ref='142617005' />
-    <nd ref='142617007' />
-    <nd ref='142617010' />
-    <nd ref='142617015' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hill Farm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580515' timestamp='2007-05-11T01:00:08+01:00' visible='true'>
-    <nd ref='28935998' />
-    <nd ref='28936002' />
-    <nd ref='28936000' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Croydon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269333' timestamp='2007-02-04T22:51:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='661194' />
-    <nd ref='25640028' />
-    <nd ref='25640029' />
-    <nd ref='25640030' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Garfield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999138' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971175' />
-    <nd ref='20971185' />
-    <nd ref='20971184' />
-    <nd ref='20971196' />
-    <nd ref='20971186' />
-    <nd ref='20971197' />
-    <nd ref='20971189' />
-    <nd ref='20971190' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='the local CC have the amazing ability to forget road signs around here...' />
-    <tag k='name' v='Cossack Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539958' timestamp='2007-04-29T20:37:17+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243479' />
-    <nd ref='28243482' />
-    <nd ref='28243486' />
-    <nd ref='28243492' />
-    <nd ref='28243495' />
-    <nd ref='28243504' />
-    <nd ref='28243506' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Mount' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604559' timestamp='2007-05-15T20:53:19+01:00' user='nickw' visible='true'>
-    <nd ref='29134815' />
-    <nd ref='29134816' />
-    <nd ref='29134817' />
-    <nd ref='29134818' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leaside Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536670' timestamp='2007-04-29T08:34:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194516' />
-    <nd ref='28194517' />
-    <nd ref='28194519' />
-    <nd ref='28194515' />
-    <nd ref='28194516' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556417' timestamp='2007-10-29T08:07:22+00:00' user='nickw' visible='true'>
-    <nd ref='91115439' />
-    <nd ref='91115442' />
-    <nd ref='91115444' />
-    <nd ref='91115446' />
-    <nd ref='91115449' />
-    <nd ref='91115450' />
-    <nd ref='91115452' />
-    <nd ref='91115454' />
-    <nd ref='91115457' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arliss Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536149' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179481' />
-    <nd ref='28179491' />
-    <nd ref='28179492' />
-    <nd ref='28179493' />
-    <nd ref='28179494' />
-    <tag k='highway' v='residential' />
-    <tag k='surface' v='unpaved' />
-    <tag k='name' v='Pine Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854841' timestamp='2007-06-02T19:16:15+01:00' visible='true'>
-    <nd ref='13071431' />
-    <nd ref='13071432' />
-    <nd ref='29873130' />
-    <nd ref='28232585' />
-    <nd ref='29873131' />
-    <nd ref='28232587' />
-    <nd ref='28232589' />
-    <nd ref='28232590' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Taunton Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136108' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='21613438' />
-    <nd ref='25282140' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546509' timestamp='2007-04-30T23:40:11+01:00' user='nickw' visible='true'>
-    <nd ref='28347764' />
-    <nd ref='28345035' />
-    <nd ref='28347763' />
-    <nd ref='28347761' />
-    <nd ref='28347762' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Copse Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690882' timestamp='2007-05-31T21:48:21+01:00' visible='true'>
-    <nd ref='29762562' />
-    <nd ref='29815548' />
-    <nd ref='29815549' />
-    <nd ref='29815550' />
-    <nd ref='29815551' />
-    <nd ref='29815552' />
-    <nd ref='29815553' />
-    <nd ref='29815554' />
-    <nd ref='29815555' />
-    <nd ref='29815556' />
-    <nd ref='29815557' />
-    <nd ref='29815635' />
-    <nd ref='29815558' />
-    <nd ref='29815559' />
-    <nd ref='29815560' />
-    <nd ref='29815561' />
-    <nd ref='29509885' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9680016' timestamp='2007-12-15T20:18:41+00:00' user='nickw' visible='true'>
-    <nd ref='14743135' />
-    <nd ref='254886' />
-    <nd ref='21561790' />
-    <nd ref='254887' />
-    <nd ref='14743136' />
-    <nd ref='21141495' />
-    <nd ref='21561783' />
-    <nd ref='14743137' />
-    <nd ref='14743139' />
-    <nd ref='254888' />
-    <nd ref='171533045' />
-    <nd ref='254889' />
-    <nd ref='14743140' />
-    <nd ref='91130460' />
-    <nd ref='325658' />
-    <nd ref='91130819' />
-    <nd ref='21141418' />
-    <nd ref='325659' />
-    <nd ref='14743141' />
-    <nd ref='254891' />
-    <nd ref='14743142' />
-    <nd ref='21141427' />
-    <nd ref='14743144' />
-    <nd ref='21141426' />
-    <nd ref='14743145' />
-    <nd ref='20976725' />
-    <nd ref='14743146' />
-    <nd ref='20976759' />
-    <nd ref='14743147' />
-    <nd ref='20976724' />
-    <nd ref='254892' />
-    <nd ref='254893' />
-    <nd ref='254894' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10517268' timestamp='2007-10-28T20:25:32+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90582765' />
-    <nd ref='90582766' />
-    <nd ref='90582767' />
-    <nd ref='90582768' />
-    <nd ref='90582770' />
-    <nd ref='90582771' />
-    <tag k='waterway' v='drain' />
-    <tag k='boat' v='no' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4271534' timestamp='2007-02-06T01:05:18+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25675811' />
-    <nd ref='25675814' />
-    <nd ref='25675813' />
-    <nd ref='25675812' />
-    <nd ref='25675801' />
-    <nd ref='25675802' />
-    <nd ref='25675811' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='note' v='The position of this roundabout is guessed for now' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3288' timestamp='2007-08-12T23:15:26+01:00' user='Edward' visible='true'>
-    <nd ref='675864' />
-    <nd ref='700478' />
-    <nd ref='675874' />
-    <nd ref='675859' />
-    <nd ref='675875' />
-    <nd ref='675876' />
-    <nd ref='700495' />
-    <nd ref='700496' />
-    <nd ref='675877' />
-    <nd ref='675878' />
-    <nd ref='675879' />
-    <nd ref='675880' />
-    <nd ref='675840' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dimond Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8151444' timestamp='2007-06-03T15:59:43+01:00' visible='true'>
-    <nd ref='29913887' />
-    <nd ref='29913888' />
-    <nd ref='29913889' />
-    <nd ref='29913890' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Windsor Gate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235055' timestamp='2007-01-17T21:10:28+00:00' user='David Currie' visible='true'>
-    <nd ref='25282084' />
-    <nd ref='25282085' />
-    <nd ref='25282087' />
-    <nd ref='25282086' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blenheim Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788382' timestamp='2008-01-04T19:29:42+00:00' user='nickw' visible='true'>
-    <nd ref='206162102' />
-    <nd ref='206162639' />
-    <nd ref='206162410' />
-    <nd ref='206162411' />
-    <nd ref='206162412' />
-    <nd ref='206162413' />
-    <nd ref='206162253' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cox Row' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15942394' timestamp='2007-12-10T19:12:44+00:00' user='sladen' visible='true'>
-    <nd ref='160219865' />
-    <nd ref='160220273' />
-    <nd ref='160220275' />
-    <nd ref='160220277' />
-    <nd ref='160220278' />
-    <nd ref='160220280' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4681693' timestamp='2007-06-03T16:05:29+01:00' visible='true'>
-    <nd ref='29710915' />
-    <nd ref='29710555' />
-    <nd ref='29710557' />
-    <nd ref='29710559' />
-    <nd ref='29914252' />
-    <nd ref='29710561' />
-    <nd ref='29914261' />
-    <nd ref='29710563' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4773289' timestamp='2007-06-17T21:39:00+01:00' visible='true'>
-    <nd ref='30504269' />
-    <nd ref='30504270' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pitmore Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005416' timestamp='2006-11-19T12:09:23+00:00' user='nickw' visible='true'>
-    <nd ref='469864' />
-    <nd ref='21091833' />
-    <nd ref='14743120' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lisbon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536219' timestamp='2007-12-07T13:28:38+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180231' />
-    <nd ref='28180232' />
-    <nd ref='28180233' />
-    <nd ref='28180229' />
-    <nd ref='28180230' />
-    <nd ref='28180231' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4749604' timestamp='2007-06-13T09:24:34+01:00' visible='true'>
-    <nd ref='30290718' />
-    <nd ref='30290727' />
-    <nd ref='30290726' />
-    <nd ref='30290725' />
-    <nd ref='30290724' />
-    <nd ref='30290723' />
-    <nd ref='30290722' />
-    <nd ref='30290721' />
-    <nd ref='30290720' />
-    <nd ref='30290719' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Somerset Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539956' timestamp='2007-04-29T20:37:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243466' />
-    <nd ref='28243467' />
-    <nd ref='28243469' />
-    <nd ref='28243470' />
-    <nd ref='28243471' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3284' timestamp='2007-08-12T23:15:54+01:00' user='Edward' visible='true'>
-    <nd ref='675864' />
-    <nd ref='675865' />
-    <nd ref='675866' />
-    <nd ref='700513' />
-    <nd ref='675867' />
-    <nd ref='675868' />
-    <nd ref='675869' />
-    <nd ref='675870' />
-    <nd ref='675871' />
-    <nd ref='675872' />
-    <nd ref='675873' />
-    <nd ref='675874' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Sandringham Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4077044' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true'>
-    <nd ref='11419664' />
-    <nd ref='21600510' />
-    <nd ref='21636939' />
-    <nd ref='21636926' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209582' timestamp='2007-01-06T14:48:26+00:00' user='nickw' visible='true'>
-    <nd ref='24924318' />
-    <nd ref='24949826' />
-    <nd ref='24924319' />
-    <nd ref='24924320' />
-    <nd ref='24949815' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kings Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578750' timestamp='2008-02-03T06:17:03+00:00' user='sladen' visible='true'>
-    <nd ref='657799' />
-    <nd ref='245150603' />
-    <nd ref='657800' />
-    <tag k='access' v='no' />
-    <tag k='highway' v='unclassified' />
-    <tag k='psv' v='yes' />
-    <tag k='name' v='Commercial Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4084418' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689145' />
-    <nd ref='21419461' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5041375' timestamp='2007-10-28T20:51:21+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28874053' />
-    <nd ref='33718237' />
-    <nd ref='33718247' />
-    <nd ref='33718197' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Palm Road' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4732317' timestamp='2007-06-10T18:15:21+01:00' visible='true'>
-    <nd ref='30161114' />
-    <nd ref='30161102' />
-    <nd ref='30161103' />
-    <nd ref='30161115' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129264' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964110' />
-    <nd ref='14964111' />
-    <nd ref='14964112' />
-    <nd ref='14964113' />
-    <nd ref='14964114' />
-    <nd ref='14964115' />
-    <nd ref='14964116' />
-    <nd ref='14964122' />
-    <nd ref='14964123' />
-    <nd ref='14964124' />
-    <nd ref='14964125' />
-    <nd ref='14964101' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724589' timestamp='2007-06-08T23:30:31+01:00' visible='true'>
-    <nd ref='30089065' />
-    <nd ref='30089063' />
-    <nd ref='30089061' />
-    <nd ref='30089057' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Swallow Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215228' timestamp='2007-01-10T00:20:38+00:00' user='nickw' visible='true'>
-    <nd ref='24984734' />
-    <nd ref='388896' />
-    <nd ref='388895' />
-    <nd ref='24984735' />
-    <nd ref='24984736' />
-    <nd ref='24984715' />
-    <nd ref='24984716' />
-    <nd ref='24984717' />
-    <nd ref='24984718' />
-    <nd ref='24984719' />
-    <nd ref='24984726' />
-    <nd ref='24984720' />
-    <nd ref='24984725' />
-    <nd ref='24984729' />
-    <nd ref='388893' />
-    <nd ref='24984730' />
-    <nd ref='24984731' />
-    <nd ref='24984732' />
-    <nd ref='24984734' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Village' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9674785' timestamp='2007-10-16T23:54:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='48958705' />
-    <nd ref='48958701' />
-    <nd ref='48958685' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269319' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639968' />
-    <nd ref='25639974' />
-    <nd ref='25639975' />
-    <nd ref='25639976' />
-    <nd ref='25639977' />
-    <nd ref='25639978' />
-    <nd ref='25639979' />
-    <nd ref='25639980' />
-    <nd ref='25639981' />
-    <nd ref='25639984' />
-    <nd ref='25639983' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wharnecliffe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727634' timestamp='2007-06-09T19:36:00+01:00' user='nickw' visible='true'>
-    <nd ref='30124193' />
-    <nd ref='30124201' />
-    <nd ref='30124202' />
-    <nd ref='30124203' />
-    <nd ref='30124204' />
-    <nd ref='30124205' />
-    <nd ref='30124206' />
-    <nd ref='30124207' />
-    <nd ref='30124208' />
-    <nd ref='30124209' />
-    <nd ref='30124210' />
-    <nd ref='30124211' />
-    <nd ref='30124212' />
-    <nd ref='30124213' />
-    <nd ref='30124214' />
-    <nd ref='30124215' />
-    <nd ref='30124216' />
-    <nd ref='30124217' />
-    <nd ref='30124218' />
-    <nd ref='30124219' />
-    <nd ref='30124220' />
-    <nd ref='30124221' />
-    <nd ref='30124222' />
-    <nd ref='30124223' />
-    <nd ref='30124224' />
-    <nd ref='30124225' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edelvale Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151459' timestamp='2007-06-03T19:02:05+01:00' visible='true'>
-    <nd ref='29914413' />
-    <nd ref='29914410' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ladywood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120211' timestamp='2007-12-10T19:40:05+00:00' user='sladen' visible='true'>
-    <nd ref='29632091' />
-    <nd ref='29632100' />
-    <nd ref='29632104' />
-    <nd ref='160268798' />
-    <nd ref='29632094' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='railway' v='rail' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4280392' timestamp='2007-02-11T18:07:24+00:00' user='nickw' visible='true'>
-    <nd ref='25783072' />
-    <nd ref='25783073' />
-    <nd ref='25783074' />
-    <nd ref='25783075' />
-    <nd ref='25783076' />
-    <nd ref='25783077' />
-    <nd ref='25783078' />
-    <nd ref='25783079' />
-    <nd ref='25783080' />
-    <nd ref='254258' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136112' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true'>
-    <nd ref='21600587' />
-    <nd ref='21600588' />
-    <nd ref='21600589' />
-    <nd ref='24668307' />
-    <nd ref='21600590' />
-    <nd ref='21600591' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4084408' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689083' />
-    <nd ref='21689084' />
-    <nd ref='21689085' />
-    <nd ref='21689087' />
-    <nd ref='21689088' />
-    <nd ref='21689094' />
-    <nd ref='21689095' />
-    <nd ref='21689096' />
-    <nd ref='21689097' />
-    <nd ref='21689098' />
-    <nd ref='21689099' />
-    <nd ref='21689101' />
-    <nd ref='21689102' />
-    <nd ref='21689100' />
-    <nd ref='21689052' />
-    <nd ref='21689103' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Carnation Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4797567' timestamp='2007-06-22T21:44:03+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780839' />
-    <nd ref='30780841' />
-    <nd ref='30780847' />
-    <nd ref='14744289' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123575' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true'>
-    <nd ref='160410636' />
-    <nd ref='160410643' />
-    <nd ref='160413821' />
-    <nd ref='21091854' />
-    <nd ref='21091853' />
-    <nd ref='21091852' />
-    <nd ref='122352460' />
-    <nd ref='21091851' />
-    <nd ref='469859' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Waterloo Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4604601' timestamp='2007-05-15T20:56:07+01:00' user='nickw' visible='true'>
-    <nd ref='29135273' />
-    <nd ref='29135271' />
-    <nd ref='29135276' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bonchurch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2920957' timestamp='2006-08-15T12:14:02+01:00' user='nickw' visible='true'>
-    <nd ref='13564836' />
-    <nd ref='13564837' />
-    <nd ref='13565092' />
-    <nd ref='13564838' />
-    <nd ref='13564839' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='3578447' timestamp='2007-10-29T16:25:41+00:00' user='Dean Earley' visible='true'>
-    <nd ref='2742645' />
-    <nd ref='17722333' />
-    <nd ref='17722334' />
-    <nd ref='29380414' />
-    <nd ref='29380424' />
-    <nd ref='17722335' />
-    <nd ref='17722352' />
-    <nd ref='17722337' />
-    <nd ref='17722354' />
-    <nd ref='17722338' />
-    <nd ref='17722339' />
-    <nd ref='17722355' />
-    <nd ref='17722341' />
-    <nd ref='17722342' />
-    <nd ref='254655' />
-    <nd ref='17722343' />
-    <nd ref='17722356' />
-    <nd ref='17722345' />
-    <nd ref='14582446' />
-    <nd ref='17722346' />
-    <nd ref='17722357' />
-    <nd ref='17722347' />
-    <nd ref='17722348' />
-    <nd ref='17722358' />
-    <nd ref='17722350' />
-    <tag k='ref' v='C351' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Stoneham Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548018' timestamp='2007-05-01T10:05:40+01:00' visible='true'>
-    <nd ref='28372745' />
-    <nd ref='28372755' />
-    <nd ref='28372756' />
-    <nd ref='28372757' />
-    <nd ref='28372754' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211087' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='305631' />
-    <nd ref='24949992' />
-    <nd ref='24949993' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='2246825' timestamp='2006-07-05T00:16:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='596304' />
-    <nd ref='9727812' />
-    <nd ref='596305' />
-    <nd ref='9281157' />
-    <nd ref='254471' />
-    <nd ref='10217216' />
-    <nd ref='9280979' />
-    <nd ref='20966365' />
-    <nd ref='254766' />
-    <nd ref='9280980' />
-    <nd ref='20966367' />
-    <nd ref='8596785' />
-    <nd ref='8596773' />
-    <nd ref='20966369' />
-    <nd ref='254765' />
-    <nd ref='254415' />
-    <nd ref='20966371' />
-    <nd ref='9726308' />
-    <nd ref='254674' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4711289' timestamp='2007-10-04T19:45:39+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29990883' />
-    <nd ref='29990886' />
-    <nd ref='29990885' />
-    <nd ref='29990884' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='15726280' timestamp='2007-12-08T20:33:31+00:00' user='nickw' visible='true'>
-    <nd ref='157222328' />
-    <nd ref='157238263' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Matheson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152193' timestamp='2007-06-11T22:36:27+01:00' visible='true'>
-    <nd ref='30227019' />
-    <nd ref='30227020' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chatsworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008585' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141425' />
-    <nd ref='21141376' />
-    <nd ref='21141426' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bladon Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569961' timestamp='2007-05-05T08:53:00+01:00' user='nickw' visible='true'>
-    <nd ref='28830581' />
-    <nd ref='28830582' />
-    <nd ref='28830583' />
-    <nd ref='28830584' />
-    <nd ref='28830572' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Exeter Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133954' timestamp='2006-12-14T14:16:05+00:00' user='David Currie' visible='true'>
-    <nd ref='21579409' />
-    <nd ref='21579410' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Percivale Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701840' timestamp='2007-06-03T15:43:47+01:00' visible='true'>
-    <nd ref='29911927' />
-    <nd ref='29911928' />
-    <nd ref='29911929' />
-    <nd ref='29911930' />
-    <nd ref='29911931' />
-    <nd ref='29911932' />
-    <nd ref='29911989' />
-    <nd ref='29911934' />
-    <nd ref='29911933' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lewes Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644824' timestamp='2007-05-24T11:23:14+01:00' visible='true'>
-    <nd ref='29549383' />
-    <nd ref='29549384' />
-    <nd ref='29549385' />
-    <nd ref='29549386' />
-    <nd ref='29549382' />
-    <nd ref='29549383' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Starling Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725189' timestamp='2007-12-08T20:20:38+00:00' user='nickw' visible='true'>
-    <nd ref='50656125' />
-    <nd ref='157218260' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sutherland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546481' timestamp='2007-04-30T23:26:42+01:00' user='nickw' visible='true'>
-    <nd ref='28346971' />
-    <nd ref='28346969' />
-    <nd ref='28346967' />
-    <nd ref='28346966' />
-    <nd ref='28346964' />
-    <nd ref='28346972' />
-    <nd ref='28346973' />
-    <nd ref='28345028' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bracklesham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585245' timestamp='2007-05-12T09:58:00+01:00' user='nickw' visible='true'>
-    <nd ref='29002290' />
-    <nd ref='29002289' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1684' timestamp='2006-06-04T00:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319650' />
-    <nd ref='324337' />
-    <nd ref='324338' />
-    <nd ref='324339' />
-    <nd ref='324340' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Gordon Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15942512' timestamp='2007-12-10T19:13:31+00:00' user='sladen' visible='true'>
-    <nd ref='160218970' />
-    <nd ref='160221916' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='3431516' timestamp='2006-09-28T23:48:13+01:00' user='nickw' visible='true'>
-    <nd ref='383139' />
-    <nd ref='17724234' />
-    <nd ref='16963724' />
-    <nd ref='16963726' />
-    <nd ref='16963727' />
-    <nd ref='16963728' />
-    <nd ref='16963752' />
-    <nd ref='16963729' />
-    <nd ref='16963730' />
-    <nd ref='16963731' />
-    <nd ref='16963732' />
-    <nd ref='16963733' />
-    <nd ref='18347839' />
-    <nd ref='16963734' />
-    <nd ref='16963735' />
-    <nd ref='16963736' />
-    <nd ref='16963737' />
-    <nd ref='16963738' />
-    <nd ref='16963739' />
-    <nd ref='19227220' />
-    <nd ref='16963751' />
-    <nd ref='16963740' />
-    <nd ref='16963741' />
-    <nd ref='16963743' />
-    <nd ref='16963744' />
-    <nd ref='16963746' />
-    <nd ref='16963747' />
-    <nd ref='16963748' />
-    <nd ref='16963750' />
-    <nd ref='254709' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Carriage Drive North' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4540966' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252958' />
-    <nd ref='28252959' />
-    <nd ref='28252960' />
-    <nd ref='28252963' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635675' timestamp='2007-05-21T23:53:42+01:00' user='nickw' visible='true'>
-    <nd ref='20972824' />
-    <nd ref='20972825' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='no street name' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008589' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141430' />
-    <nd ref='21141431' />
-    <nd ref='21141432' />
-    <nd ref='21141382' />
-    <nd ref='21141433' />
-    <nd ref='21141434' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Eastbourne Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150672' timestamp='2007-05-28T19:39:26+01:00' visible='true'>
-    <nd ref='29511447' />
-    <nd ref='29730496' />
-    <nd ref='29728910' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Kipling Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119867' timestamp='2006-06-04T00:35:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306309' />
-    <nd ref='658423' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brookvale Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8280651' timestamp='2007-10-30T15:20:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='15359710' />
-    <nd ref='15359711' />
-    <nd ref='15359712' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:name' v='Hampshire county council' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='Leigh Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209553' timestamp='2007-01-06T14:38:29+00:00' user='nickw' visible='true'>
-    <nd ref='12889440' />
-    <nd ref='24924208' />
-    <nd ref='24924210' />
-    <nd ref='24924212' />
-    <nd ref='24924213' />
-    <nd ref='24924215' />
-    <nd ref='24924217' />
-    <nd ref='24924219' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8280659' timestamp='2007-10-16T17:22:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15360183' />
-    <nd ref='15360184' />
-    <nd ref='530522' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Stoneham Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1937' timestamp='2006-06-17T22:23:00+01:00' user='nickw' visible='true'>
-    <nd ref='635136' />
-    <nd ref='28341755' />
-    <nd ref='661172' />
-    <nd ref='26727688' />
-    <nd ref='661157' />
-    <nd ref='661173' />
-    <nd ref='661174' />
-    <nd ref='661156' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Deacon Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4084412' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689123' />
-    <nd ref='21689054' />
-    <nd ref='21689099' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Daffodil Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13252315' timestamp='2007-11-18T19:14:39+00:00' user='nickw' visible='true'>
-    <nd ref='122340925' />
-    <nd ref='122340927' />
-    <nd ref='122340930' />
-    <nd ref='122340932' />
-    <nd ref='122340934' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beechfield Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3880048' timestamp='2006-10-27T00:58:32+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254759' />
-    <nd ref='26447532' />
-    <nd ref='26447522' />
-    <nd ref='26447521' />
-    <nd ref='19892135' />
-    <nd ref='19892133' />
-    <nd ref='254563' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558187' timestamp='2007-05-02T23:58:16+01:00' visible='true'>
-    <nd ref='28583032' />
-    <nd ref='28583035' />
-    <nd ref='28583037' />
-    <nd ref='28583038' />
-    <nd ref='28583031' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bradley Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15961656' timestamp='2007-12-10T21:01:57+00:00' user='sladen' visible='true'>
-    <nd ref='160414998' />
-    <nd ref='160415523' />
-    <nd ref='160415525' />
-    <nd ref='160415526' />
-    <nd ref='160415527' />
-    <nd ref='160415528' />
-    <nd ref='160415530' />
-    <nd ref='160415531' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='8126828' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964156' />
-    <nd ref='14964143' />
-    <nd ref='14964144' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639397' timestamp='2007-07-30T16:07:05+01:00' visible='true'>
-    <nd ref='402749' />
-    <nd ref='18232095' />
-    <nd ref='33130193' />
-    <nd ref='402750' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Holt Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4061530' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='21507757' />
-    <nd ref='388868' />
-    <nd ref='388869' />
-    <nd ref='16963794' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chamberlain Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360441' timestamp='2008-02-03T06:09:43+00:00' user='sladen' visible='true'>
-    <nd ref='635142' />
-    <nd ref='245149209' />
-    <nd ref='26575734' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8121520' timestamp='2006-05-22T22:29:14+01:00' user='nickw' visible='true'>
-    <nd ref='319608' />
-    <nd ref='319609' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Earls Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='16414175' timestamp='2007-12-14T21:36:41+00:00' user='nickw' visible='true'>
-    <nd ref='169423566' />
-    <nd ref='169424884' />
-    <nd ref='169424885' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Birch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910152' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20130940' />
-    <nd ref='20130947' />
-    <nd ref='20130948' />
-    <nd ref='20130950' />
-    <nd ref='20130951' />
-    <nd ref='20130952' />
-    <nd ref='20130956' />
-    <nd ref='20130958' />
-    <nd ref='20130961' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Camelia Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084957' timestamp='2008-02-03T06:15:17+00:00' user='sladen' visible='true'>
-    <nd ref='254446' />
-    <nd ref='254410' />
-    <nd ref='30780740' />
-    <nd ref='30780720' />
-    <nd ref='254411' />
-    <nd ref='657798' />
-    <nd ref='245150395' />
-    <nd ref='254412' />
-    <nd ref='254413' />
-    <nd ref='254414' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4015825' timestamp='2006-11-26T00:16:01+00:00' user='nickw' visible='true'>
-    <nd ref='21275698' />
-    <nd ref='21275697' />
-    <nd ref='21275640' />
-    <nd ref='21275696' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Edmunds Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683725' timestamp='2007-05-29T22:14:39+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='28232561' />
-    <nd ref='28232563' />
-    <nd ref='28232565' />
-    <nd ref='28232567' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Peppard Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9675174' timestamp='2007-10-17T00:35:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9725924' />
-    <nd ref='10942601' />
-    <nd ref='3915351' />
-    <nd ref='27496136' />
-    <nd ref='657729' />
-    <nd ref='8596755' />
-    <nd ref='27496135' />
-    <nd ref='28265078' />
-    <nd ref='8596753' />
-    <nd ref='26945378' />
-    <nd ref='657753' />
-    <nd ref='28232606' />
-    <nd ref='28235744' />
-    <nd ref='28235755' />
-    <nd ref='28232592' />
-    <nd ref='657754' />
-    <nd ref='28341734' />
-    <nd ref='28341745' />
-    <nd ref='29871616' />
-    <nd ref='661152' />
-    <nd ref='29871683' />
-    <nd ref='29796780' />
-    <nd ref='29794905' />
-    <nd ref='8596763' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A334' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bitterne Road East' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8148377' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179533' />
-    <nd ref='28179536' />
-    <nd ref='28179537' />
-    <nd ref='28179538' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bracken Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008571' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='21141389' />
-    <nd ref='21141384' />
-    <nd ref='21141390' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kineton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119858' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387827' />
-    <nd ref='518811' />
-    <nd ref='518812' />
-    <nd ref='518813' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Kitchener Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8126538' timestamp='2006-09-02T13:46:13+01:00' user='Dean Earley' visible='true'>
-    <nd ref='544328' />
-    <nd ref='423288' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bowden Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546550' timestamp='2007-04-30T23:48:52+01:00' user='nickw' visible='true'>
-    <nd ref='28348319' />
-    <nd ref='28348316' />
-    <nd ref='28345084' />
-    <nd ref='28348317' />
-    <nd ref='28348309' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wycliffe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4712251' timestamp='2007-06-05T23:05:29+01:00' user='nickw' visible='true'>
-    <nd ref='29998356' />
-    <nd ref='29998355' />
-    <nd ref='29998348' />
-    <nd ref='29998349' />
-    <nd ref='29998350' />
-    <nd ref='29998351' />
-    <nd ref='29998352' />
-    <nd ref='29998353' />
-    <nd ref='29998354' />
-    <nd ref='29998357' />
-    <nd ref='29998358' />
-    <nd ref='29998356' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8454981' timestamp='2007-10-30T15:48:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30431992' />
-    <nd ref='30431995' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='tunnel' v='yes' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='-1' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4215248' timestamp='2007-01-10T00:20:52+00:00' user='nickw' visible='true'>
-    <nd ref='24984792' />
-    <nd ref='24984793' />
-    <nd ref='24984794' />
-    <nd ref='24984795' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ethelburt Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539434' timestamp='2007-04-29T19:27:55+01:00' user='Andy Street' visible='true'>
-    <nd ref='28236108' />
-    <nd ref='28236110' />
-    <nd ref='28236112' />
-    <nd ref='28236115' />
-    <nd ref='28236130' />
-    <nd ref='28236133' />
-    <nd ref='28236142' />
-    <nd ref='28236145' />
-    <nd ref='28236147' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lime Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2777563' timestamp='2007-11-29T22:31:14+00:00' user='nickw' visible='true'>
-    <nd ref='330489' />
-    <nd ref='20957245' />
-    <nd ref='422968' />
-    <nd ref='29026771' />
-    <nd ref='12591249' />
-    <nd ref='12591254' />
-    <nd ref='12591275' />
-    <nd ref='29000490' />
-    <nd ref='12591287' />
-    <nd ref='29000487' />
-    <nd ref='12591295' />
-    <nd ref='12591304' />
-    <nd ref='12591310' />
-    <nd ref='142620773' />
-    <nd ref='12591314' />
-    <nd ref='12591319' />
-    <nd ref='12591322' />
-    <nd ref='12591342' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Northlands Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1673' timestamp='2006-06-04T00:35:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='650774' />
-    <nd ref='388863' />
-    <nd ref='388864' />
-    <nd ref='388865' />
-    <nd ref='650905' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Omdurman Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4074119' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561569' />
-    <nd ref='21561568' />
-    <nd ref='21561536' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Stratton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4747394' timestamp='2007-06-12T20:20:06+01:00' visible='true'>
-    <nd ref='30256423' />
-    <nd ref='30256424' />
-    <nd ref='30256426' />
-    <nd ref='30256427' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hadleigh Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764771' timestamp='2007-06-16T16:26:36+01:00' visible='true'>
-    <nd ref='30431938' />
-    <nd ref='30431989' />
-    <nd ref='30431992' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4379652' timestamp='2007-03-23T22:53:30+00:00' user='nickw' visible='true'>
-    <nd ref='26728552' />
-    <nd ref='26728553' />
-    <nd ref='26728554' />
-    <nd ref='26728544' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leighton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4642540' timestamp='2007-11-28T12:24:35+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29535052' />
-    <nd ref='29510747' />
-    <nd ref='30431988' />
-    <nd ref='29510727' />
-    <nd ref='29510729' />
-    <nd ref='29510734' />
-    <nd ref='30161112' />
-    <nd ref='29510737' />
-    <nd ref='29510740' />
-    <nd ref='30161123' />
-    <nd ref='30161122' />
-    <nd ref='29534191' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='The Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148516' timestamp='2007-04-29T20:37:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243685' />
-    <nd ref='28243689' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Overcliff Rise' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4475488' timestamp='2007-04-17T22:04:03+01:00' visible='true'>
-    <nd ref='27434184' />
-    <nd ref='27434185' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grosvenor Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661834' timestamp='2007-05-26T20:15:22+01:00' visible='true'>
-    <nd ref='29632427' />
-    <nd ref='29632426' />
-    <nd ref='29632425' />
-    <nd ref='29632424' />
-    <nd ref='29632423' />
-    <nd ref='29632420' />
-    <nd ref='29632419' />
-    <nd ref='29632418' />
-    <nd ref='29632417' />
-    <nd ref='29632416' />
-    <nd ref='29632415' />
-    <nd ref='29632414' />
-    <nd ref='29632409' />
-    <nd ref='29632408' />
-    <nd ref='29632239' />
-    <nd ref='29632238' />
-    <nd ref='29632237' />
-    <nd ref='29632235' />
-    <nd ref='29632232' />
-    <nd ref='29632231' />
-    <nd ref='29632223' />
-    <nd ref='29632222' />
-    <nd ref='29632221' />
-    <nd ref='29632220' />
-    <nd ref='29632219' />
-    <nd ref='29632218' />
-    <nd ref='29632217' />
-    <nd ref='29632216' />
-    <nd ref='29632429' />
-    <nd ref='29632428' />
-    <nd ref='29632427' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4271532' timestamp='2007-02-06T01:05:15+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25675792' />
-    <nd ref='25675793' />
-    <nd ref='25675803' />
-    <nd ref='25675806' />
-    <nd ref='25675805' />
-    <nd ref='25675804' />
-    <nd ref='25675792' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='note' v='The position of this roundabout is guessed for now' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819483' timestamp='2006-10-23T21:13:28+01:00' user='nickw' visible='true'>
-    <nd ref='19229173' />
-    <nd ref='19227222' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235084' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true'>
-    <nd ref='21600677' />
-    <nd ref='21600678' />
-    <nd ref='21579415' />
-    <nd ref='21600578' />
-    <nd ref='21600579' />
-    <nd ref='21600580' />
-    <nd ref='21600581' />
-    <nd ref='24668074' />
-    <nd ref='21600582' />
-    <nd ref='21600583' />
-    <nd ref='21600584' />
-    <nd ref='21600585' />
-    <nd ref='21600587' />
-    <nd ref='21600586' />
-    <nd ref='21600584' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3987535' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831118' />
-    <nd ref='20831122' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upper Bannister Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677185' timestamp='2007-10-16T02:43:46+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29704295' />
-    <nd ref='29710862' />
-    <nd ref='29704301' />
-    <nd ref='29704302' />
-    <nd ref='29911927' />
-    <nd ref='29704304' />
-    <nd ref='29509910' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Bosville' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134184' timestamp='2006-12-18T21:21:59+00:00' user='nickw' visible='true'>
-    <nd ref='21636811' />
-    <nd ref='21636728' />
-    <nd ref='21636813' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chilworth Ring' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703444' timestamp='2007-06-04T21:52:42+01:00' visible='true'>
-    <nd ref='29925348' />
-    <nd ref='29926800' />
-    <nd ref='29926801' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Penrhyn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1696' timestamp='2006-06-04T00:35:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319620' />
-    <nd ref='319621' />
-    <nd ref='319622' />
-    <nd ref='319623' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Forster Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703856' timestamp='2007-06-03T21:58:29+01:00' visible='true'>
-    <nd ref='29929006' />
-    <nd ref='29928998' />
-    <nd ref='29928999' />
-    <nd ref='29929000' />
-    <nd ref='29929002' />
-    <nd ref='29929003' />
-    <nd ref='29929004' />
-    <nd ref='29929005' />
-    <nd ref='29929006' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parham Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999272' timestamp='2007-12-10T21:05:18+00:00' user='sladen' visible='true'>
-    <nd ref='20971216' />
-    <nd ref='20972766' />
-    <nd ref='20972782' />
-    <nd ref='20972784' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4536698' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='19227258' />
-    <nd ref='20628556' />
-    <nd ref='19227254' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342665' timestamp='2008-02-03T06:25:10+00:00' user='sladen' visible='true'>
-    <nd ref='26114356' />
-    <nd ref='26447500' />
-    <nd ref='245153986' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4196526' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='24668309' />
-    <nd ref='24668095' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='8124968' timestamp='2006-08-08T23:26:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25303008' />
-    <nd ref='2417457' />
-    <nd ref='12889431' />
-    <nd ref='12889430' />
-    <nd ref='2417455' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Wide Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910611' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20107348' />
-    <nd ref='20133130' />
-    <nd ref='20133131' />
-    <nd ref='20133132' />
-    <nd ref='20133136' />
-    <nd ref='20133137' />
-    <nd ref='20133138' />
-    <nd ref='20133140' />
-    <nd ref='20133141' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cerne Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999851' timestamp='2006-11-13T21:50:58+00:00' user='nickw' visible='true'>
-    <nd ref='20976815' />
-    <nd ref='20976814' />
-    <nd ref='20976802' />
-    <nd ref='20976803' />
-    <nd ref='20976804' />
-    <nd ref='20976805' />
-    <nd ref='20976806' />
-    <nd ref='20976807' />
-    <nd ref='20976808' />
-    <nd ref='20976809' />
-    <nd ref='20976810' />
-    <nd ref='20976811' />
-    <nd ref='20976812' />
-    <nd ref='20976813' />
-    <nd ref='20976814' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pirrie Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677677' timestamp='2007-10-16T02:43:35+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29707327' />
-    <nd ref='29707328' />
-    <nd ref='29707329' />
-    <nd ref='29912975' />
-    <nd ref='29707330' />
-    <nd ref='29912979' />
-    <nd ref='29707331' />
-    <nd ref='29912982' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broom Hill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703794' timestamp='2007-06-03T21:49:40+01:00' visible='true'>
-    <nd ref='29708017' />
-    <nd ref='29928526' />
-    <nd ref='29928527' />
-    <nd ref='29928528' />
-    <nd ref='29928529' />
-    <nd ref='29914413' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585124' timestamp='2007-05-12T09:26:11+01:00' user='nickw' visible='true'>
-    <nd ref='12591254' />
-    <nd ref='28848620' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ashridge Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10522460' timestamp='2007-11-02T14:15:53+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90660540' />
-    <nd ref='90660542' />
-    <nd ref='90660543' />
-    <nd ref='90660544' />
-    <nd ref='90660540' />
-    <tag k='building' v='yes' />
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='Potlatch 0.4c' />
-  </way>
-  <way id='3296' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700531' />
-    <nd ref='700532' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Halstead Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8127212' timestamp='2007-10-16T06:18:53+01:00' user='andrewpmk' visible='true'>
-    <nd ref='21178406' />
-    <nd ref='25296016' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Twyford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151453' timestamp='2007-06-03T16:22:57+01:00' visible='true'>
-    <nd ref='29914341' />
-    <nd ref='29914344' />
-    <nd ref='29914347' />
-    <nd ref='29914401' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sovereign Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2623093' timestamp='2006-07-27T12:06:14+01:00' user='nickw' visible='true'>
-    <nd ref='11419633' />
-    <nd ref='11419664' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Beatrice Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4342680' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447508' />
-    <nd ref='26447509' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120160' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true'>
-    <nd ref='675861' />
-    <nd ref='675863' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hillside Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540263' timestamp='2007-05-22T00:20:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='243871' />
-    <nd ref='19227233' />
-    <nd ref='243872' />
-    <nd ref='29464228' />
-    <nd ref='243873' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hill Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4636143' timestamp='2007-05-22T00:19:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464228' />
-    <nd ref='29464229' />
-    <nd ref='29464230' />
-    <nd ref='29464231' />
-    <nd ref='29464232' />
-    <nd ref='29464234' />
-    <nd ref='29464235' />
-    <nd ref='29464236' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lordswood Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2573945' timestamp='2006-07-24T21:05:48+01:00' user='nickw' visible='true'>
-    <nd ref='11419493' />
-    <nd ref='21561552' />
-    <nd ref='14743154' />
-    <nd ref='14743153' />
-    <nd ref='11419555' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Shirley Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2920949' timestamp='2006-08-15T12:13:06+01:00' user='nickw' visible='true'>
-    <nd ref='13564649' />
-    <nd ref='13564677' />
-    <nd ref='13564800' />
-    <nd ref='20102982' />
-    <nd ref='13564819' />
-    <nd ref='20102981' />
-    <nd ref='13564827' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10556296' timestamp='2007-10-29T08:00:08+00:00' user='nickw' visible='true'>
-    <nd ref='91110964' />
-    <nd ref='91111559' />
-    <nd ref='91111560' />
-    <nd ref='91111561' />
-    <nd ref='91111562' />
-    <nd ref='91111563' />
-    <nd ref='91111564' />
-    <nd ref='91110954' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13251271' timestamp='2007-11-18T19:05:56+00:00' user='nickw' visible='true'>
-    <nd ref='122316810' />
-    <nd ref='122325190' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='no, doesn't look like an Avenue to me either!' />
-    <tag k='name' v='Blighmont Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260395' timestamp='2006-05-22T22:26:24+01:00' user='nickw' visible='true'>
-    <nd ref='635125' />
-    <nd ref='27237175' />
-    <nd ref='26727700' />
-    <nd ref='26353252' />
-    <nd ref='26945412' />
-    <nd ref='635128' />
-    <nd ref='657722' />
-    <nd ref='28244296' />
-    <nd ref='635129' />
-    <nd ref='661166' />
-    <nd ref='26727698' />
-    <nd ref='635130' />
-    <nd ref='28237228' />
-    <nd ref='28237229' />
-    <nd ref='635131' />
-    <nd ref='635132' />
-    <nd ref='635133' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='South East Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3129260' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964156' />
-    <nd ref='14964157' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540337' timestamp='2007-04-29T21:10:00+01:00' visible='true'>
-    <nd ref='28194418' />
-    <nd ref='28194420' />
-    <nd ref='28194419' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hawfinch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679916' timestamp='2007-05-28T19:39:25+01:00' visible='true'>
-    <nd ref='29728887' />
-    <nd ref='17721069' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4690933' timestamp='2007-05-31T21:54:34+01:00' visible='true'>
-    <nd ref='29816314' />
-    <nd ref='29816315' />
-    <nd ref='29816316' />
-    <nd ref='29816284' />
-    <nd ref='29816285' />
-    <nd ref='29816286' />
-    <nd ref='29816287' />
-    <nd ref='29816288' />
-    <nd ref='29816289' />
-    <nd ref='29816290' />
-    <nd ref='29816291' />
-    <nd ref='29816292' />
-    <nd ref='29816293' />
-    <nd ref='29816294' />
-    <nd ref='29816295' />
-    <nd ref='29816297' />
-    <nd ref='29816298' />
-    <nd ref='29816299' />
-    <nd ref='29816300' />
-    <nd ref='29816303' />
-    <nd ref='29816305' />
-    <nd ref='29816307' />
-    <nd ref='29816309' />
-    <nd ref='29816310' />
-    <nd ref='29816311' />
-    <nd ref='29816312' />
-    <nd ref='29816313' />
-    <nd ref='29816314' />
-    <tag k='natural' v='water' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749612' timestamp='2007-06-13T09:33:44+01:00' visible='true'>
-    <nd ref='30290780' />
-    <nd ref='30290781' />
-    <nd ref='30290782' />
-    <nd ref='30290779' />
-    <nd ref='30290780' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009866' timestamp='2006-11-22T18:19:05+00:00' user='southglos' visible='true'>
-    <nd ref='21178477' />
-    <nd ref='21178478' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='10522555' timestamp='2007-10-28T21:46:58+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90662042' />
-    <nd ref='90662043' />
-    <nd ref='90662045' />
-    <nd ref='90662047' />
-    <nd ref='90662042' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='8136104' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282116' />
-    <nd ref='25282118' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Acorn Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152669' timestamp='2007-06-17T22:25:19+01:00' visible='true'>
-    <nd ref='25296313' />
-    <nd ref='29928965' />
-    <nd ref='29928995' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parham Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546060' timestamp='2007-04-30T21:49:12+01:00' user='nickw' visible='true'>
-    <nd ref='661153' />
-    <nd ref='28341738' />
-    <nd ref='28341739' />
-    <nd ref='28341740' />
-    <nd ref='28341746' />
-    <nd ref='28341747' />
-    <nd ref='28341748' />
-    <nd ref='28341749' />
-    <nd ref='28341750' />
-    <nd ref='28341751' />
-    <nd ref='28231253' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Keynsham Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724656' timestamp='2007-12-08T20:15:00+00:00' user='nickw' visible='true'>
-    <nd ref='157209189' />
-    <nd ref='157205669' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548033' timestamp='2007-12-14T21:40:38+00:00' user='nickw' visible='true'>
-    <nd ref='28372808' />
-    <nd ref='28372809' />
-    <nd ref='28372810' />
-    <nd ref='28372811' />
-    <nd ref='28372812' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hollybrook Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150617' timestamp='2007-10-16T02:43:33+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29704310' />
-    <nd ref='29912995' />
-    <nd ref='29704312' />
-    <nd ref='29704314' />
-    <nd ref='29704316' />
-    <nd ref='29911990' />
-    <nd ref='29704317' />
-    <nd ref='29704318' />
-    <nd ref='29704319' />
-    <nd ref='29913612' />
-    <nd ref='29704321' />
-    <nd ref='29704323' />
-    <nd ref='29704325' />
-    <nd ref='29704327' />
-    <nd ref='29704329' />
-    <nd ref='29704331' />
-    <nd ref='29704333' />
-    <nd ref='29704335' />
-    <nd ref='29710563' />
-    <nd ref='29914406' />
-    <nd ref='29704337' />
-    <nd ref='29704338' />
-    <nd ref='29704339' />
-    <nd ref='29914257' />
-    <nd ref='29704340' />
-    <nd ref='29704341' />
-    <nd ref='29924342' />
-    <nd ref='29704342' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Bosville' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732322' timestamp='2007-06-10T18:15:23+01:00' visible='true'>
-    <nd ref='29670301' />
-    <nd ref='30161109' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701677' timestamp='2007-06-03T14:54:28+01:00' visible='true'>
-    <nd ref='21585938' />
-    <nd ref='29909655' />
-    <nd ref='29909656' />
-    <nd ref='29909657' />
-    <nd ref='29909658' />
-    <nd ref='29909659' />
-    <nd ref='29909660' />
-    <nd ref='29909674' />
-    <nd ref='29909654' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Hanns Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540955' timestamp='2007-04-29T22:00:53+01:00' visible='true'>
-    <nd ref='28173775' />
-    <nd ref='28252902' />
-    <nd ref='28252915' />
-    <nd ref='28252914' />
-    <nd ref='28252930' />
-    <nd ref='28252931' />
-    <nd ref='28252929' />
-    <nd ref='28252933' />
-    <nd ref='28252934' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunvegan Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773697' timestamp='2007-06-17T22:30:37+01:00' visible='true'>
-    <nd ref='30511431' />
-    <nd ref='30510884' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151437' timestamp='2007-06-03T14:59:29+01:00' visible='true'>
-    <nd ref='28418345' />
-    <nd ref='28418347' />
-    <nd ref='29909955' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='George Raymond Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3087956' timestamp='2008-02-03T05:57:48+00:00' user='sladen' visible='true'>
-    <nd ref='254881' />
-    <nd ref='14726553' />
-    <nd ref='14726555' />
-    <nd ref='14726556' />
-    <nd ref='14726557' />
-    <nd ref='14726558' />
-    <nd ref='14726561' />
-    <nd ref='14726562' />
-    <nd ref='14726563' />
-    <nd ref='14726564' />
-    <nd ref='14726566' />
-    <nd ref='14726568' />
-    <nd ref='14726569' />
-    <nd ref='14727952' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='The Avenue' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='2147866' timestamp='2006-07-01T03:51:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='310900' />
-    <nd ref='310901' />
-    <nd ref='310851' />
-    <nd ref='310852' />
-    <nd ref='310853' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Peterborough Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569978' timestamp='2007-05-05T09:03:38+01:00' user='nickw' visible='true'>
-    <nd ref='28830662' />
-    <nd ref='28830671' />
-    <nd ref='28830672' />
-    <nd ref='28830673' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Summit Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148540' timestamp='2007-04-29T22:57:08+01:00' user='Andy Street' visible='true'>
-    <nd ref='28257909' />
-    <nd ref='28257912' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lynden Gate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743071' timestamp='2007-06-11T22:03:22+01:00' visible='true'>
-    <nd ref='30223959' />
-    <nd ref='30223936' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3806001' timestamp='2006-10-22T10:18:19+01:00' user='nickw' visible='true'>
-    <nd ref='19035800' />
-    <nd ref='28107848' />
-    <nd ref='19035796' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Salisbury Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6169297' timestamp='2007-12-08T20:19:16+00:00' user='nickw' visible='true'>
-    <nd ref='51191465' />
-    <nd ref='51191284' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sinclair Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8133949' timestamp='2006-12-14T13:53:17+00:00' user='David Currie' visible='true'>
-    <nd ref='21579416' />
-    <nd ref='21579421' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pilgrims Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4082120' timestamp='2008-02-03T06:07:18+00:00' user='sladen' visible='true'>
-    <nd ref='20971160' />
-    <nd ref='25675141' />
-    <nd ref='245148738' />
-    <nd ref='245148772' />
-    <nd ref='20971199' />
-    <nd ref='20971198' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Hanover Buildings' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4079321' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636940' />
-    <nd ref='21636922' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='May Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9657397' timestamp='2007-10-16T19:19:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14727962' />
-    <nd ref='25305486' />
-    <nd ref='25305487' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4084426' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689166' />
-    <nd ref='21689167' />
-    <nd ref='21689168' />
-    <nd ref='21689169' />
-    <nd ref='21689170' />
-    <nd ref='21689165' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Monks Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4329573' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346713' />
-    <nd ref='26346771' />
-    <nd ref='26346768' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grantham Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125056' timestamp='2007-10-16T23:45:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726309' />
-    <nd ref='9726308' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546161' timestamp='2007-04-30T22:13:59+01:00' user='nickw' visible='true'>
-    <nd ref='28342566' />
-    <nd ref='28342560' />
-    <nd ref='28342569' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='Eastern segment also called Forsythia Place' />
-    <tag k='name' v='Merry Oak Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124543' timestamp='2006-07-29T14:14:02+01:00' user='nickw' visible='true'>
-    <nd ref='301598' />
-    <nd ref='650774' />
-    <nd ref='650794' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3102397' timestamp='2007-10-16T17:59:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254743' />
-    <nd ref='25896261' />
-    <nd ref='254744' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4579746' timestamp='2007-05-10T21:07:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28932219' />
-    <nd ref='28932432' />
-    <nd ref='28932433' />
-    <nd ref='28932467' />
-    <nd ref='28932434' />
-    <nd ref='28932435' />
-    <nd ref='28932436' />
-    <nd ref='28932437' />
-    <nd ref='28932468' />
-    <nd ref='28932470' />
-    <nd ref='28932438' />
-    <nd ref='28932439' />
-    <nd ref='28932471' />
-    <nd ref='28932440' />
-    <nd ref='28932441' />
-    <nd ref='28932473' />
-    <nd ref='28932442' />
-    <nd ref='28932443' />
-    <nd ref='28932444' />
-    <nd ref='28932445' />
-    <nd ref='28932446' />
-    <nd ref='28932475' />
-    <nd ref='28932447' />
-    <nd ref='28932528' />
-    <nd ref='28932448' />
-    <nd ref='28932449' />
-    <nd ref='28932450' />
-    <nd ref='28932451' />
-    <nd ref='28932452' />
-    <nd ref='28932477' />
-    <nd ref='28932455' />
-    <nd ref='28932457' />
-    <nd ref='28932478' />
-    <nd ref='28932458' />
-    <nd ref='28932459' />
-    <nd ref='28932480' />
-    <nd ref='28932460' />
-    <nd ref='28932461' />
-    <nd ref='28932482' />
-    <nd ref='28932462' />
-    <nd ref='28932464' />
-    <nd ref='28932465' />
-    <nd ref='28932466' />
-    <nd ref='20965519' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Toothill Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4691039' timestamp='2007-05-31T22:15:50+01:00' visible='true'>
-    <nd ref='29816766' />
-    <nd ref='29816767' />
-    <nd ref='29816768' />
-    <nd ref='29816769' />
-    <nd ref='29816770' />
-    <nd ref='29816771' />
-    <nd ref='29816772' />
-    <nd ref='29816773' />
-    <nd ref='29816774' />
-    <nd ref='29816775' />
-    <nd ref='29816776' />
-    <nd ref='29816777' />
-    <nd ref='29816778' />
-    <nd ref='29816779' />
-    <nd ref='29816780' />
-    <nd ref='29816782' />
-    <nd ref='29816783' />
-    <nd ref='29816784' />
-    <nd ref='29707282' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4747606' timestamp='2007-06-12T21:04:57+01:00' visible='true'>
-    <nd ref='30259412' />
-    <nd ref='30259409' />
-    <nd ref='30259408' />
-    <nd ref='30256885' />
-    <nd ref='30259414' />
-    <nd ref='30259416' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Selwyn Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540747' timestamp='2007-06-02T19:34:51+01:00' visible='true'>
-    <nd ref='28249888' />
-    <nd ref='28249889' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Castle Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10568210' timestamp='2007-10-29T15:43:31+00:00' user='Dean Earley' visible='true'>
-    <nd ref='24924287' />
-    <nd ref='24924282' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558176' timestamp='2007-05-02T23:58:15+01:00' visible='true'>
-    <nd ref='28583043' />
-    <nd ref='28583045' />
-    <nd ref='28583046' />
-    <nd ref='28583047' />
-    <nd ref='28583049' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lyburn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698472' timestamp='2007-06-02T19:44:15+01:00' visible='true'>
-    <nd ref='17721040' />
-    <nd ref='25635426' />
-    <nd ref='25635427' />
-    <nd ref='29874139' />
-    <nd ref='29874140' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cheriton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4797571' timestamp='2007-06-22T21:44:04+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780794' />
-    <nd ref='30780857' />
-    <nd ref='30780860' />
-    <nd ref='30780862' />
-    <nd ref='30780864' />
-    <nd ref='30780796' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996459' timestamp='2006-11-10T08:43:44+00:00' user='nickw' visible='true'>
-    <nd ref='20954600' />
-    <nd ref='20954602' />
-    <nd ref='27021819' />
-    <nd ref='20954601' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Primrose Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005404' timestamp='2006-11-19T12:09:22+00:00' user='nickw' visible='true'>
-    <nd ref='21091855' />
-    <nd ref='21091840' />
-    <nd ref='21091864' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Waverley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580488' timestamp='2007-05-11T00:51:26+01:00' visible='true'>
-    <nd ref='28935749' />
-    <nd ref='28935750' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773506' timestamp='2007-06-17T22:14:23+01:00' visible='true'>
-    <nd ref='30508364' />
-    <nd ref='30508366' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Quadrangle' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625935' timestamp='2007-05-20T10:19:36+01:00' user='nickw' visible='true'>
-    <nd ref='29380428' />
-    <nd ref='29380431' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dawnay Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211083' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24949991' />
-    <nd ref='24924324' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4079317' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21615433' />
-    <nd ref='21636932' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092125' timestamp='2008-02-03T06:10:30+00:00' user='sladen' visible='true'>
-    <nd ref='254446' />
-    <nd ref='8596798' />
-    <nd ref='48958679' />
-    <nd ref='10222233' />
-    <nd ref='10222234' />
-    <nd ref='10222231' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3999836' timestamp='2006-11-13T21:39:23+00:00' user='nickw' visible='true'>
-    <nd ref='20976714' />
-    <nd ref='20976716' />
-    <nd ref='20976663' />
-    <nd ref='20976691' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hollybrook Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3987527' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831103' />
-    <nd ref='20831110' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grosvenor Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585176' timestamp='2007-05-12T09:40:24+01:00' user='nickw' visible='true'>
-    <nd ref='29001318' />
-    <nd ref='29001319' />
-    <nd ref='29001320' />
-    <nd ref='29001321' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Janaway Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661848' timestamp='2007-05-26T20:15:55+01:00' visible='true'>
-    <nd ref='29632811' />
-    <nd ref='29632815' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150398' timestamp='2007-06-30T12:32:07+01:00' visible='true'>
-    <nd ref='29621214' />
-    <nd ref='29389521' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='9676787' timestamp='2007-10-17T00:35:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10217210' />
-    <nd ref='10217213' />
-    <nd ref='10217214' />
-    <nd ref='9280984' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342676' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='254557' />
-    <nd ref='26447393' />
-    <nd ref='26447521' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Victoria Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540315' timestamp='2007-04-29T21:09:45+01:00' visible='true'>
-    <nd ref='28194348' />
-    <nd ref='28194349' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Plover Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269323' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639986' />
-    <nd ref='25639987' />
-    <nd ref='25639988' />
-    <nd ref='25639989' />
-    <nd ref='25639990' />
-    <nd ref='25639991' />
-    <nd ref='25639993' />
-    <nd ref='25639994' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lower Mortimer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535823' timestamp='2007-04-29T01:04:22+01:00' visible='true'>
-    <nd ref='28173833' />
-    <nd ref='28173840' />
-    <nd ref='28173845' />
-    <nd ref='28173851' />
-    <nd ref='28173857' />
-    <nd ref='28173862' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Petworth Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546067' timestamp='2007-04-30T21:49:13+01:00' user='nickw' visible='true'>
-    <nd ref='661182' />
-    <nd ref='28341771' />
-    <nd ref='28341772' />
-    <nd ref='28341773' />
-    <nd ref='28231029' />
-    <nd ref='28341774' />
-    <nd ref='28341775' />
-    <nd ref='28341776' />
-    <nd ref='28341760' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Downside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3276' timestamp='2006-06-04T00:35:20+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700435' />
-    <nd ref='518799' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Aberdeen Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999847' timestamp='2006-11-13T21:50:57+00:00' user='nickw' visible='true'>
-    <nd ref='382997' />
-    <nd ref='20976665' />
-    <nd ref='20976790' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ivanhoe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546233' timestamp='2007-04-30T22:24:08+01:00' user='nickw' visible='true'>
-    <nd ref='20831111' />
-    <nd ref='20831124' />
-    <nd ref='28343215' />
-    <nd ref='28343216' />
-    <nd ref='28343217' />
-    <nd ref='28343218' />
-    <nd ref='28343219' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Salisbury Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4692063' timestamp='2007-06-01T09:03:14+01:00' visible='true'>
-    <nd ref='29824066' />
-    <nd ref='29824067' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Paulson Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577439' timestamp='2007-05-09T23:36:13+01:00' visible='true'>
-    <nd ref='28903378' />
-    <nd ref='28903380' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15450743' timestamp='2007-12-06T20:39:09+00:00' user='nickw' visible='true'>
-    <nd ref='153322101' />
-    <nd ref='153322107' />
-    <tag k='highway' v='unsurfaced' />
-    <tag k='name' v='Rownhams Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690600' timestamp='2007-05-31T21:17:10+01:00' visible='true'>
-    <nd ref='29814523' />
-    <nd ref='29814524' />
-    <nd ref='29814525' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chilham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545701' timestamp='2007-04-30T20:40:35+01:00' visible='true'>
-    <nd ref='28339089' />
-    <nd ref='28339139' />
-    <nd ref='28339118' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Wilmer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556170' timestamp='2007-10-29T07:48:43+00:00' user='nickw' visible='true'>
-    <nd ref='91108690' />
-    <nd ref='91108691' />
-    <nd ref='91108692' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pentire Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3806000' timestamp='2006-10-22T10:18:19+01:00' user='nickw' visible='true'>
-    <nd ref='19035791' />
-    <nd ref='2073202' />
-    <nd ref='2073213' />
-    <nd ref='2073222' />
-    <nd ref='2073310' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blenheim Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4991515' timestamp='2007-07-30T16:07:01+01:00' visible='true'>
-    <nd ref='33130201' />
-    <nd ref='33130199' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546150' timestamp='2007-04-30T22:13:56+01:00' user='nickw' visible='true'>
-    <nd ref='28342529' />
-    <nd ref='28232549' />
-    <nd ref='28342543' />
-    <nd ref='28342544' />
-    <nd ref='28342545' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Oaks' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215249' timestamp='2007-01-10T00:20:52+00:00' user='nickw' visible='true'>
-    <nd ref='17722331' />
-    <nd ref='24984679' />
-    <nd ref='24984796' />
-    <nd ref='24984797' />
-    <nd ref='24984798' />
-    <nd ref='24984799' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Willis Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773357' timestamp='2007-06-17T21:50:40+01:00' visible='true'>
-    <nd ref='30504462' />
-    <nd ref='30504756' />
-    <nd ref='30504757' />
-    <nd ref='30504758' />
-    <nd ref='30504759' />
-    <nd ref='30504760' />
-    <nd ref='29704528' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556804' timestamp='2007-10-29T08:22:38+00:00' user='nickw' visible='true'>
-    <nd ref='91131365' />
-    <nd ref='91131368' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Norham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778217' timestamp='2006-08-04T11:58:34+01:00' user='nickw' visible='true'>
-    <nd ref='12594782' />
-    <nd ref='12594933' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4797562' timestamp='2007-06-22T21:44:01+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780835' />
-    <nd ref='30780837' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8250661' timestamp='2007-10-16T23:45:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726304' />
-    <nd ref='9726306' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Cobbett Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079325' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636947' />
-    <nd ref='21636925' />
-    <nd ref='21636948' />
-    <nd ref='21561550' />
-    <nd ref='21561549' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Treeside Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4379593' timestamp='2007-03-23T22:38:21+00:00' user='nickw' visible='true'>
-    <nd ref='26727698' />
-    <nd ref='26727697' />
-    <nd ref='26727696' />
-    <nd ref='28237239' />
-    <nd ref='28237240' />
-    <nd ref='28240293' />
-    <nd ref='28237241' />
-    <nd ref='28237242' />
-    <nd ref='26727695' />
-    <nd ref='28237243' />
-    <nd ref='28237244' />
-    <nd ref='26727694' />
-    <nd ref='26727693' />
-    <nd ref='26727692' />
-    <nd ref='28379463' />
-    <nd ref='28237245' />
-    <nd ref='26727699' />
-    <nd ref='26727691' />
-    <nd ref='28237246' />
-    <nd ref='26727690' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='North East Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120156' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true'>
-    <nd ref='700490' />
-    <nd ref='700502' />
-    <nd ref='700503' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Newton Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15724652' timestamp='2007-12-08T20:14:59+00:00' user='nickw' visible='true'>
-    <nd ref='157209139' />
-    <nd ref='157209145' />
-    <nd ref='157209149' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hornchurch Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727633' timestamp='2007-06-09T19:35:59+01:00' user='nickw' visible='true'>
-    <nd ref='30124192' />
-    <nd ref='30124193' />
-    <nd ref='30124194' />
-    <nd ref='30124195' />
-    <nd ref='30124196' />
-    <nd ref='30124197' />
-    <nd ref='30124198' />
-    <nd ref='30124199' />
-    <nd ref='30124200' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Francis Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639430' timestamp='2006-06-01T09:38:19+01:00' user='nickw' visible='true'>
-    <nd ref='402752' />
-    <nd ref='402757' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brighton Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4551578' timestamp='2007-06-03T14:59:30+01:00' visible='true'>
-    <nd ref='28418516' />
-    <nd ref='29909955' />
-    <nd ref='28418527' />
-    <nd ref='28418528' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chadwick Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589169' timestamp='2007-05-13T10:11:07+01:00' user='nickw' visible='true'>
-    <nd ref='29026793' />
-    <nd ref='29026800' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mayfair Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150638' timestamp='2007-06-03T22:13:39+01:00' visible='true'>
-    <nd ref='29929857' />
-    <nd ref='29929859' />
-    <tag k='highway' v='unclassified' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Goodwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9652515' timestamp='2007-10-16T17:59:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25896244' />
-    <nd ref='25896245' />
-    <nd ref='17504828' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4743739' timestamp='2007-06-12T00:14:48+01:00' user='nickw' visible='true'>
-    <nd ref='10537333' />
-    <nd ref='30229551' />
-    <nd ref='30229552' />
-    <nd ref='30229553' />
-    <nd ref='30229554' />
-    <nd ref='30229555' />
-    <nd ref='30229556' />
-    <nd ref='30229557' />
-    <nd ref='30229558' />
-    <nd ref='30229559' />
-    <nd ref='30229560' />
-    <nd ref='30229561' />
-    <nd ref='30229562' />
-    <nd ref='30229563' />
-    <nd ref='30229564' />
-    <nd ref='30229565' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Frome Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8129545' timestamp='2006-10-23T21:13:28+01:00' user='nickw' visible='true'>
-    <nd ref='28243595' />
-    <nd ref='28243599' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pointout Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2201735' timestamp='2008-01-31T17:11:40+00:00' user='Dean Earley' visible='true'>
-    <nd ref='15740741' />
-    <nd ref='160268465' />
-    <nd ref='13972653' />
-    <nd ref='243981297' />
-    <nd ref='243981298' />
-    <nd ref='243981299' />
-    <nd ref='13972555' />
-    <nd ref='87981004' />
-    <nd ref='13972576' />
-    <nd ref='13972593' />
-    <nd ref='13972601' />
-    <nd ref='13972611' />
-    <nd ref='2430249' />
-    <nd ref='9519442' />
-    <nd ref='17504832' />
-    <nd ref='9519443' />
-    <nd ref='9519441' />
-    <nd ref='9519444' />
-    <nd ref='9509195' />
-    <nd ref='13972694' />
-    <nd ref='13972744' />
-    <nd ref='244372880' />
-    <nd ref='13972755' />
-    <nd ref='13972792' />
-    <nd ref='26424290' />
-    <tag k='railway' v='rail' />
-    <tag k='name' v='Eastleigh to Fareham Line' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4540349' timestamp='2007-04-29T21:10:09+01:00' visible='true'>
-    <nd ref='28194435' />
-    <nd ref='28194436' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Warblers Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875465' timestamp='2007-07-09T11:55:47+01:00' visible='true'>
-    <nd ref='31486266' />
-    <nd ref='31486267' />
-    <nd ref='31486269' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Bond Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601393' timestamp='2007-10-30T17:25:08+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92683730' />
-    <nd ref='92683731' />
-    <nd ref='92683732' />
-    <nd ref='92683733' />
-    <nd ref='92683730' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Kenneth Dibben House' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='22800105' timestamp='2008-02-03T06:17:24+00:00' user='sladen' visible='true'>
-    <nd ref='245147651' />
-    <nd ref='245147652' />
-    <nd ref='245147653' />
-    <nd ref='245147654' />
-    <nd ref='245147655' />
-    <nd ref='245147656' />
-    <nd ref='245147657' />
-    <nd ref='245147719' />
-    <nd ref='245147658' />
-    <nd ref='245147651' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3298' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700525' />
-    <nd ref='700529' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dell Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4773317' timestamp='2007-06-17T21:45:22+01:00' visible='true'>
-    <nd ref='30504517' />
-    <nd ref='30504515' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548022' timestamp='2007-05-01T10:05:41+01:00' visible='true'>
-    <nd ref='28372776' />
-    <nd ref='28372777' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694243' timestamp='2007-10-16T02:43:57+01:00' user='andrewpmk' visible='true'>
-    <nd ref='15741006' />
-    <nd ref='21178442' />
-    <nd ref='21178441' />
-    <nd ref='21178440' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Boyatt Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8120152' timestamp='2007-08-12T23:11:56+01:00' user='Edward' visible='true'>
-    <nd ref='675886' />
-    <nd ref='700508' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Catherines Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='13251409' timestamp='2007-11-18T19:07:26+00:00' user='nickw' visible='true'>
-    <nd ref='122326365' />
-    <nd ref='122328046' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='about the fifth Crescent I've come across which is anything but!' />
-    <tag k='name' v='Victory Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690913' timestamp='2007-05-31T21:48:20+01:00' visible='true'>
-    <nd ref='29505729' />
-    <nd ref='29815672' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601149' timestamp='2007-10-30T17:21:52+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92679902' />
-    <nd ref='92679903' />
-    <nd ref='92679904' />
-    <nd ref='92679905' />
-    <nd ref='92679906' />
-    <nd ref='92679907' />
-    <nd ref='92679902' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Epsilon House' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4360445' timestamp='2007-03-16T21:52:44+00:00' user='nickw' visible='true'>
-    <nd ref='26114349' />
-    <nd ref='26575745' />
-    <nd ref='26447403' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nelson Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077021' timestamp='2006-12-16T09:34:49+00:00' user='nickw' visible='true'>
-    <nd ref='21600370' />
-    <nd ref='21600371' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13251408' timestamp='2007-11-18T19:07:25+00:00' user='nickw' visible='true'>
-    <nd ref='122326360' />
-    <nd ref='122328041' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Victory Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644828' timestamp='2007-05-24T12:07:47+01:00' visible='true'>
-    <nd ref='29549398' />
-    <nd ref='29549399' />
-    <nd ref='29549395' />
-    <nd ref='29549396' />
-    <nd ref='29549397' />
-    <nd ref='29549398' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Greenfinch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209536' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='24924113' />
-    <nd ref='24924112' />
-    <nd ref='24924110' />
-    <nd ref='24924111' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gilbury Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4254565' timestamp='2007-01-27T23:19:35+00:00' visible='true'>
-    <nd ref='25480487' />
-    <nd ref='25480539' />
-    <nd ref='25480536' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Parsonage Road' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='15945226' timestamp='2007-12-10T19:30:43+00:00' user='sladen' visible='true'>
-    <nd ref='160253459' />
-    <nd ref='160253691' />
-    <tag k='aeroway' v='taxiway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='1261070' timestamp='2006-05-22T22:36:55+01:00' user='nickw' visible='true'>
-    <nd ref='518773' />
-    <nd ref='518775' />
-    <nd ref='25764489' />
-    <nd ref='518776' />
-    <nd ref='19890098' />
-    <nd ref='518777' />
-    <nd ref='518778' />
-    <nd ref='14957839' />
-    <nd ref='19890085' />
-    <nd ref='518779' />
-    <nd ref='518780' />
-    <nd ref='19890086' />
-    <nd ref='19890090' />
-    <nd ref='19890088' />
-    <nd ref='19890091' />
-    <nd ref='19890092' />
-    <nd ref='518781' />
-    <nd ref='19890095' />
-    <nd ref='19890096' />
-    <nd ref='518782' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Empress Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2854813' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071279' />
-    <nd ref='13071291' />
-    <nd ref='13071292' />
-    <nd ref='13071294' />
-    <nd ref='13071306' />
-    <nd ref='13071300' />
-    <nd ref='13071301' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='MacArthur Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2622690' timestamp='2007-10-16T20:09:34+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254668' />
-    <nd ref='27558571' />
-    <nd ref='25480846' />
-    <nd ref='700474' />
-    <nd ref='700410' />
-    <nd ref='700472' />
-    <nd ref='254695' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3879902' timestamp='2006-10-27T00:48:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254578' />
-    <nd ref='19890105' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Layton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4376958' timestamp='2007-10-30T16:47:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21613446' />
-    <nd ref='21600669' />
-    <nd ref='21600670' />
-    <nd ref='21600668' />
-    <nd ref='21613446' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996907' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957227' />
-    <nd ref='20957179' />
-    <nd ref='20957222' />
-    <nd ref='20957217' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arthur Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295853' timestamp='2007-02-16T20:53:40+00:00' user='nickw' visible='true'>
-    <nd ref='25947180' />
-    <nd ref='25947179' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540770' timestamp='2007-04-29T21:43:36+01:00' visible='true'>
-    <nd ref='28250061' />
-    <nd ref='28250060' />
-    <nd ref='28250062' />
-    <nd ref='28250064' />
-    <nd ref='28250068' />
-    <nd ref='28250071' />
-    <nd ref='28250082' />
-    <nd ref='28250083' />
-    <nd ref='28250085' />
-    <nd ref='28250086' />
-    <nd ref='28250087' />
-    <nd ref='28250089' />
-    <nd ref='28250090' />
-    <nd ref='28250092' />
-    <nd ref='28250093' />
-    <nd ref='28250094' />
-    <nd ref='28250096' />
-    <nd ref='28250056' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Munro Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749608' timestamp='2007-10-29T15:43:36+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30290732' />
-    <nd ref='30290733' />
-    <nd ref='30290772' />
-    <nd ref='30290730' />
-    <nd ref='30290731' />
-    <nd ref='30290732' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='service' />
-    <tag k='note' v='Needs tidying with a real GPS trace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084963' timestamp='2006-09-02T14:28:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='10942635' />
-    <nd ref='26781147' />
-    <nd ref='254466' />
-    <nd ref='10942721' />
-    <nd ref='25639986' />
-    <nd ref='25639985' />
-    <nd ref='254465' />
-    <nd ref='25639964' />
-    <nd ref='254464' />
-    <nd ref='21598845' />
-    <nd ref='21598860' />
-    <nd ref='254463' />
-    <tag k='highway' v='tertiary' />
-    <tag k='abutters' v='residential' />
-    <tag k='name' v='Bridge Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635650' timestamp='2007-05-21T23:43:21+01:00' user='nickw' visible='true'>
-    <nd ref='29461214' />
-    <nd ref='29461215' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='North Front' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008581' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141414' />
-    <nd ref='21141412' />
-    <nd ref='21141413' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Shayer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556166' timestamp='2007-10-29T07:48:09+00:00' user='nickw' visible='true'>
-    <nd ref='91108509' />
-    <nd ref='91108511' />
-    <nd ref='91108512' />
-    <nd ref='91108520' />
-    <nd ref='91108514' />
-    <nd ref='91108522' />
-    <nd ref='91108515' />
-    <nd ref='91108525' />
-    <nd ref='91108518' />
-    <nd ref='91108526' />
-    <nd ref='91108512' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pewsey Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580477' timestamp='2007-05-11T00:51:21+01:00' visible='true'>
-    <nd ref='28935727' />
-    <nd ref='28935720' />
-    <nd ref='28935719' />
-    <nd ref='28935718' />
-    <nd ref='28935714' />
-    <nd ref='28935715' />
-    <nd ref='28935717' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lewis Silkin Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585155' timestamp='2007-05-12T09:30:30+01:00' user='nickw' visible='true'>
-    <nd ref='29000940' />
-    <nd ref='29000944' />
-    <tag k='highway' v='unsurfaced' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818245' timestamp='2007-06-26T23:49:35+01:00' user='nickw' visible='true'>
-    <nd ref='30956681' />
-    <nd ref='30956682' />
-    <nd ref='30956683' />
-    <nd ref='30956684' />
-    <nd ref='30956685' />
-    <nd ref='30956686' />
-    <nd ref='30956687' />
-    <nd ref='30956688' />
-    <nd ref='30956689' />
-    <nd ref='30956690' />
-    <nd ref='30956691' />
-    <nd ref='30956692' />
-    <nd ref='30956693' />
-    <nd ref='30956702' />
-    <nd ref='30956703' />
-    <nd ref='30956704' />
-    <nd ref='30956705' />
-    <nd ref='30956706' />
-    <nd ref='30956707' />
-    <nd ref='30956708' />
-    <nd ref='30956709' />
-    <nd ref='30956710' />
-    <nd ref='30956711' />
-    <nd ref='30956712' />
-    <nd ref='30956713' />
-    <nd ref='30956714' />
-    <nd ref='30956715' />
-    <nd ref='30956716' />
-    <nd ref='30956717' />
-    <nd ref='30956718' />
-    <nd ref='30956719' />
-    <nd ref='30956720' />
-    <nd ref='30956721' />
-    <nd ref='30956722' />
-    <nd ref='30956723' />
-    <nd ref='30956724' />
-    <nd ref='30956725' />
-    <nd ref='30956726' />
-    <nd ref='30956727' />
-    <nd ref='30956729' />
-    <nd ref='30956730' />
-    <nd ref='30956731' />
-    <nd ref='30956732' />
-    <nd ref='30956733' />
-    <nd ref='30956734' />
-    <nd ref='30956735' />
-    <nd ref='30956736' />
-    <nd ref='30956737' />
-    <nd ref='30956738' />
-    <nd ref='30956739' />
-    <nd ref='30956740' />
-    <nd ref='30956741' />
-    <nd ref='30956742' />
-    <nd ref='30956743' />
-    <nd ref='30956744' />
-    <nd ref='30956745' />
-    <nd ref='30956746' />
-    <nd ref='30956747' />
-    <nd ref='30956748' />
-    <nd ref='30956749' />
-    <nd ref='30956680' />
-    <nd ref='30956681' />
-    <tag k='natural' v='wood' />
-    <tag k='name' v='West End Copse' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074115' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561564' />
-    <nd ref='21561562' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Church Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589165' timestamp='2007-05-13T10:11:06+01:00' user='nickw' visible='true'>
-    <nd ref='12591249' />
-    <nd ref='29026772' />
-    <nd ref='29026779' />
-    <nd ref='29026777' />
-    <nd ref='29026661' />
-    <nd ref='29026775' />
-    <nd ref='29026773' />
-    <nd ref='29026772' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Court Royal Mews' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694154' timestamp='2007-10-16T06:19:09+01:00' user='andrewpmk' visible='true'>
-    <nd ref='305597' />
-    <nd ref='305598' />
-    <nd ref='305599' />
-    <nd ref='305600' />
-    <nd ref='305601' />
-    <nd ref='305602' />
-    <nd ref='305603' />
-    <nd ref='305604' />
-    <nd ref='305605' />
-    <nd ref='305606' />
-    <nd ref='305607' />
-    <nd ref='305608' />
-    <nd ref='305609' />
-    <nd ref='305610' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126547' timestamp='2006-09-02T14:28:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14726188' />
-    <nd ref='254493' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='East Park Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743743' timestamp='2007-06-12T00:14:49+01:00' user='nickw' visible='true'>
-    <nd ref='30229564' />
-    <nd ref='30229566' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Webburn Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215244' timestamp='2007-01-10T00:20:50+00:00' user='nickw' visible='true'>
-    <nd ref='388897' />
-    <nd ref='24984758' />
-    <nd ref='24984759' />
-    <nd ref='24984760' />
-    <nd ref='24984761' />
-    <nd ref='388891' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3268' timestamp='2006-06-04T00:35:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='324341' />
-    <nd ref='700376' />
-    <nd ref='700377' />
-    <nd ref='700381' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Portswood Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8119879' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='330491' />
-    <nd ref='310893' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Alma Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4687259' timestamp='2007-06-02T18:58:40+01:00' visible='true'>
-    <nd ref='29794905' />
-    <nd ref='29794906' />
-    <nd ref='29794907' />
-    <nd ref='29871543' />
-    <nd ref='28232580' />
-    <nd ref='28232574' />
-    <nd ref='29794903' />
-    <nd ref='29794904' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Commercial Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130054' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20133225' />
-    <nd ref='20133226' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Duddon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948199' timestamp='2007-09-11T00:11:43+01:00' visible='true'>
-    <nd ref='27238984' />
-    <nd ref='48965768' />
-    <nd ref='48965770' />
-    <tag k='highway' v='pedestrian' />
-    <tag k='name' v='Western Esplanade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386809' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26728545' />
-    <nd ref='26728560' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Millais Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999141' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971184' />
-    <nd ref='20971183' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='the local CC have the amazing ability to forget road signs around here...' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605559' timestamp='2007-05-16T00:37:06+01:00' visible='true'>
-    <nd ref='29145095' />
-    <nd ref='29145096' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136472' timestamp='2007-06-13T09:30:28+01:00' visible='true'>
-    <nd ref='25340620' />
-    <nd ref='30089132' />
-    <nd ref='30089128' />
-    <nd ref='30096944' />
-    <nd ref='30089131' />
-    <nd ref='30089133' />
-    <nd ref='30089142' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Nightingale Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150184' timestamp='2007-05-24T00:05:27+01:00' visible='true'>
-    <nd ref='28418523' />
-    <nd ref='29387394' />
-    <nd ref='29387393' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='O'Connell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540332' timestamp='2007-04-29T21:09:59+01:00' visible='true'>
-    <nd ref='28194407' />
-    <nd ref='28194409' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Firecrest Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999321' timestamp='2006-11-13T00:42:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='8596757' />
-    <nd ref='20973109' />
-    <nd ref='20973099' />
-    <nd ref='20973110' />
-    <nd ref='8596819' />
-    <nd ref='20973108' />
-    <nd ref='20973087' />
-    <nd ref='20973111' />
-    <nd ref='8596757' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148801' timestamp='2007-05-26T20:16:31+01:00' visible='true'>
-    <nd ref='29632879' />
-    <nd ref='29632842' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4875595' timestamp='2007-07-09T12:19:45+01:00' visible='true'>
-    <nd ref='27496134' />
-    <nd ref='19890110' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='7988341' timestamp='2007-09-25T17:50:07+01:00' user='mike l' visible='true'>
-    <nd ref='423292' />
-    <nd ref='24984781' />
-    <nd ref='59766920' />
-    <nd ref='21689085' />
-    <nd ref='21689086' />
-    <nd ref='423270' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lobelia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126576' timestamp='2007-10-29T10:22:13+00:00' user='DrMark' visible='true'>
-    <nd ref='7015694' />
-    <nd ref='14728163' />
-    <nd ref='29464260' />
-    <nd ref='29464259' />
-    <nd ref='16963763' />
-    <nd ref='28243466' />
-    <nd ref='14728167' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148512' timestamp='2007-04-29T20:37:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243605' />
-    <nd ref='28243609' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ashwood Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743746' timestamp='2007-06-12T00:14:50+01:00' user='nickw' visible='true'>
-    <nd ref='20107334' />
-    <nd ref='30229588' />
-    <nd ref='30229587' />
-    <nd ref='30229589' />
-    <nd ref='30229591' />
-    <nd ref='30229592' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wylye Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237837' timestamp='2007-01-19T18:06:14+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25302626' />
-    <nd ref='25302627' />
-    <nd ref='25302628' />
-    <nd ref='25302625' />
-    <nd ref='25302626' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='retail' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558168' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582967' />
-    <nd ref='28582977' />
-    <nd ref='28582978' />
-    <nd ref='28582979' />
-    <nd ref='28582981' />
-    <nd ref='28582982' />
-    <nd ref='28582968' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arnheim Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077028' timestamp='2007-10-16T17:47:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21600475' />
-    <nd ref='28801042' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Lords Hill Centre East' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077064' timestamp='2007-10-15T14:26:01+01:00' user='alfabet' visible='true'>
-    <nd ref='25896263' />
-    <nd ref='25896264' />
-    <nd ref='254741' />
-    <nd ref='25896265' />
-    <nd ref='25896266' />
-    <nd ref='254742' />
-    <nd ref='254653' />
-    <nd ref='254743' />
-    <nd ref='25896262' />
-    <nd ref='21600662' />
-    <nd ref='25896263' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4743341' timestamp='2007-06-11T22:35:20+01:00' visible='true'>
-    <nd ref='30227007' />
-    <nd ref='30227009' />
-    <nd ref='30227011' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Mountbatten Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539747' timestamp='2007-04-29T20:03:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240295' />
-    <nd ref='28240296' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Caversham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535831' timestamp='2007-04-29T01:04:31+01:00' visible='true'>
-    <nd ref='28173946' />
-    <nd ref='28173950' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaulieu Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342669' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447524' />
-    <nd ref='26447527' />
-    <nd ref='26447526' />
-    <nd ref='26447525' />
-    <nd ref='26447395' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='York Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342637' timestamp='2007-03-09T20:54:27+00:00' user='nickw' visible='true'>
-    <nd ref='26447411' />
-    <nd ref='26447412' />
-    <nd ref='254758' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='1677' timestamp='2006-06-11T01:11:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306318' />
-    <nd ref='306319' />
-    <nd ref='306321' />
-    <nd ref='306322' />
-    <nd ref='306323' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Russell Place' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150110' timestamp='2007-10-16T02:44:06+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29530525' />
-    <nd ref='29534112' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broadlands Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536690' timestamp='2007-04-29T08:58:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194839' />
-    <nd ref='28194843' />
-    <nd ref='28194844' />
-    <nd ref='28194845' />
-    <nd ref='28194846' />
-    <nd ref='28194847' />
-    <nd ref='28194848' />
-    <nd ref='28194854' />
-    <nd ref='28194841' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ardnave Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043821' timestamp='2006-12-02T23:18:57+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419435' />
-    <nd ref='21419436' />
-    <nd ref='21419437' />
-    <nd ref='21419438' />
-    <nd ref='21419439' />
-    <nd ref='21419440' />
-    <nd ref='21419441' />
-    <nd ref='21419442' />
-    <nd ref='21419434' />
-    <nd ref='21419435' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Capon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4278989' timestamp='2007-08-12T23:07:47+01:00' user='Edward' visible='true'>
-    <nd ref='25764487' />
-    <nd ref='25764486' />
-    <nd ref='25764485' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oxford Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='10569174' timestamp='2007-10-29T16:25:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='17722350' />
-    <nd ref='17722351' />
-    <nd ref='15360192' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Stoneham Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='696' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='650794' />
-    <nd ref='650902' />
-    <nd ref='650903' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Khartoum Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540959' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252919' />
-    <nd ref='28252921' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunvegan Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854809' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071214' />
-    <nd ref='13071238' />
-    <nd ref='13071237' />
-    <nd ref='13071229' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coleson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295845' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='9312075' />
-    <nd ref='9312076' />
-    <nd ref='25947180' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Denzil Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947665' timestamp='2007-10-16T23:54:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973099' />
-    <nd ref='48958705' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998220' timestamp='2007-09-16T10:11:15+01:00' user='mike l' visible='true'>
-    <nd ref='18348719' />
-    <nd ref='20964843' />
-    <nd ref='20964844' />
-    <nd ref='20964845' />
-    <nd ref='20964846' />
-    <nd ref='20964847' />
-    <nd ref='52569039' />
-    <nd ref='20964848' />
-    <nd ref='20964849' />
-    <nd ref='52569042' />
-    <nd ref='52569045' />
-    <nd ref='20964850' />
-    <nd ref='20964851' />
-    <nd ref='20964852' />
-    <nd ref='20964853' />
-    <nd ref='20964854' />
-    <nd ref='20964855' />
-    <nd ref='20964036' />
-    <nd ref='20964060' />
-    <tag k='highway' v='unclassified' />
-    <tag k='source' v='npe' />
-    <tag k='name' v='Pound Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4211103' timestamp='2007-10-15T14:09:18+01:00' user='alfabet' visible='true'>
-    <nd ref='24950056' />
-    <nd ref='24949856' />
-    <nd ref='24949857' />
-    <nd ref='24949858' />
-    <nd ref='24949859' />
-    <nd ref='24949865' />
-    <nd ref='24949866' />
-    <nd ref='24949867' />
-    <nd ref='24949868' />
-    <nd ref='24949869' />
-    <nd ref='24949870' />
-    <nd ref='24949871' />
-    <nd ref='24949872' />
-    <nd ref='24949873' />
-    <nd ref='24949874' />
-    <nd ref='269319' />
-    <tag k='highway' v='unclassified' />
-    <tag k='note' v='East end (east of Kingsway) sourced from NPE' />
-    <tag k='name' v='Hiltingbury Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4743187' timestamp='2007-10-16T02:44:03+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29530532' />
-    <nd ref='30226203' />
-    <nd ref='30226204' />
-    <nd ref='30226206' />
-    <nd ref='30226208' />
-    <nd ref='30226209' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Chatsworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698541' timestamp='2007-06-02T19:52:09+01:00' visible='true'>
-    <nd ref='29728914' />
-    <nd ref='29728916' />
-    <nd ref='29728920' />
-    <nd ref='29728917' />
-    <nd ref='29728914' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135481' timestamp='2007-01-10T00:20:45+00:00' user='nickw' visible='true'>
-    <nd ref='28183713' />
-    <nd ref='28183714' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fitzroy Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677230' timestamp='2007-05-28T10:59:34+01:00' visible='true'>
-    <nd ref='29512250' />
-    <nd ref='25296381' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Milton Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910852' timestamp='2007-06-09T19:49:15+01:00' user='nickw' visible='true'>
-    <nd ref='20107349' />
-    <nd ref='20134830' />
-    <nd ref='20134832' />
-    <nd ref='20134833' />
-    <nd ref='20134834' />
-    <nd ref='20134841' />
-    <nd ref='20134843' />
-    <nd ref='20134844' />
-    <nd ref='20134845' />
-    <nd ref='20134846' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Culvery Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569970' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true'>
-    <nd ref='28830637' />
-    <nd ref='28830574' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='Does this look like a crescent?' />
-    <tag k='name' v='Litchfield Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215232' timestamp='2007-05-22T00:20:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='422992' />
-    <nd ref='29464307' />
-    <nd ref='422993' />
-    <nd ref='29464306' />
-    <nd ref='422994' />
-    <nd ref='422995' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604567' timestamp='2007-05-15T20:53:20+01:00' user='nickw' visible='true'>
-    <nd ref='29134832' />
-    <nd ref='29134833' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brading Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077056' timestamp='2007-10-15T14:19:22+01:00' user='alfabet' visible='true'>
-    <nd ref='21600598' />
-    <nd ref='21600599' />
-    <nd ref='21600600' />
-    <nd ref='21600601' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Flexford Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4558160' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582910' />
-    <nd ref='28582912' />
-    <nd ref='28582913' />
-    <nd ref='28582914' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Aldermoor Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150429' timestamp='2007-05-26T20:15:22+01:00' visible='true'>
-    <nd ref='29632419' />
-    <nd ref='29632208' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999832' timestamp='2007-10-29T07:50:32+00:00' user='nickw' visible='true'>
-    <nd ref='243882' />
-    <nd ref='20976696' />
-    <nd ref='20976697' />
-    <nd ref='20976698' />
-    <nd ref='20976699' />
-    <nd ref='91109267' />
-    <nd ref='20976700' />
-    <nd ref='20976701' />
-    <nd ref='20976710' />
-    <nd ref='20976711' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Malwood Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13250563' timestamp='2007-11-18T18:58:50+00:00' user='nickw' visible='true'>
-    <nd ref='469874' />
-    <nd ref='122313137' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hardy Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540325' timestamp='2007-04-29T21:09:51+01:00' visible='true'>
-    <nd ref='28194385' />
-    <nd ref='28194387' />
-    <nd ref='28194386' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kestrel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636155' timestamp='2007-10-16T23:45:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464282' />
-    <nd ref='29464277' />
-    <nd ref='29464278' />
-    <nd ref='29464281' />
-    <nd ref='29464283' />
-    <nd ref='29464286' />
-    <nd ref='29464282' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269315' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639954' />
-    <nd ref='25639956' />
-    <nd ref='25639957' />
-    <nd ref='25639958' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Peartree Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4310892' timestamp='2007-12-10T19:16:37+00:00' user='sladen' visible='true'>
-    <nd ref='20972790' />
-    <nd ref='20972835' />
-    <nd ref='26114348' />
-    <nd ref='160225518' />
-    <nd ref='160225519' />
-    <nd ref='26114392' />
-    <nd ref='160225520' />
-    <nd ref='26114391' />
-    <nd ref='26114385' />
-    <nd ref='26114347' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Granville Street; Melbourne Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='10522779' timestamp='2007-10-28T21:49:06+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90664548' />
-    <nd ref='90664549' />
-    <nd ref='90664550' />
-    <nd ref='90664551' />
-    <nd ref='90664552' />
-    <nd ref='90664553' />
-    <nd ref='90664555' />
-    <nd ref='90664557' />
-    <nd ref='90664548' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Civic Centre' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='9652510' timestamp='2007-11-25T22:28:43+00:00' user='southglos' visible='true'>
-    <nd ref='243877' />
-    <nd ref='25303927' />
-    <tag k='oneway' v='yes' />
-    <tag k='osmarender:renderName' v='no' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4644812' timestamp='2007-05-24T11:23:09+01:00' visible='true'>
-    <nd ref='29548687' />
-    <nd ref='29548689' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Tennyson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586116' timestamp='2007-05-12T15:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='29008376' />
-    <nd ref='29008377' />
-    <nd ref='29008378' />
-    <nd ref='29008379' />
-    <nd ref='29008381' />
-    <nd ref='29008383' />
-    <nd ref='29008384' />
-    <nd ref='29008387' />
-    <nd ref='29008389' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Adur Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150050' timestamp='2007-05-22T00:19:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29003030' />
-    <nd ref='29003031' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chetwynd Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079282' timestamp='2006-12-18T21:21:57+00:00' user='nickw' visible='true'>
-    <nd ref='21636746' />
-    <nd ref='21636731' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grendon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639377' timestamp='2007-07-30T16:07:03+01:00' visible='true'>
-    <nd ref='402750' />
-    <nd ref='33130187' />
-    <nd ref='18232097' />
-    <nd ref='402751' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cromwell Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4342628' timestamp='2007-03-09T20:54:26+00:00' user='nickw' visible='true'>
-    <nd ref='26447403' />
-    <nd ref='26447386' />
-    <nd ref='26447404' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glebe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15722937' timestamp='2007-12-08T20:00:25+00:00' user='nickw' visible='true'>
-    <nd ref='157188678' />
-    <nd ref='157190806' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gemini Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687597' timestamp='2007-05-30T22:22:31+01:00' user='nickw' visible='true'>
-    <nd ref='29796770' />
-    <nd ref='29796771' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Court Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4642365' timestamp='2007-05-23T17:04:42+01:00' visible='true'>
-    <nd ref='29533947' />
-    <nd ref='29511212' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724584' timestamp='2007-06-08T23:30:30+01:00' visible='true'>
-    <nd ref='30089044' />
-    <nd ref='30089045' />
-    <nd ref='30089046' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Wagtail Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625930' timestamp='2007-05-20T10:19:35+01:00' user='nickw' visible='true'>
-    <nd ref='17722333' />
-    <nd ref='29380413' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Stoneham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150196' timestamp='2007-05-24T12:07:47+01:00' visible='true'>
-    <nd ref='29549394' />
-    <nd ref='29549395' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Greenfinch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539751' timestamp='2007-04-29T20:03:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240309' />
-    <nd ref='28240333' />
-    <nd ref='28240334' />
-    <nd ref='28237242' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pembroke Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535827' timestamp='2007-04-29T01:04:29+01:00' visible='true'>
-    <nd ref='28173920' />
-    <nd ref='28173924' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Petworth Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061544' timestamp='2006-12-09T09:51:52+00:00' user='nickw' visible='true'>
-    <nd ref='388937' />
-    <nd ref='388936' />
-    <nd ref='388935' />
-    <nd ref='388934' />
-    <nd ref='21507801' />
-    <nd ref='388933' />
-    <nd ref='388932' />
-    <nd ref='388931' />
-    <nd ref='388930' />
-    <nd ref='388929' />
-    <nd ref='388928' />
-    <nd ref='388927' />
-    <nd ref='388926' />
-    <nd ref='388899' />
-    <nd ref='388925' />
-    <nd ref='21636746' />
-    <nd ref='388924' />
-    <nd ref='388923' />
-    <nd ref='388956' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Parkway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999146' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20972812' />
-    <nd ref='20971190' />
-    <nd ref='635142' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='South Front' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677090' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='18232077' />
-    <nd ref='18232069' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Burlington Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015821' timestamp='2006-11-26T00:16:00+00:00' user='nickw' visible='true'>
-    <nd ref='21275752' />
-    <nd ref='21275867' />
-    <nd ref='21600505' />
-    <nd ref='21275636' />
-    <nd ref='21275818' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kingsley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005400' timestamp='2007-12-10T21:01:24+00:00' user='sladen' visible='true'>
-    <nd ref='469853' />
-    <nd ref='21091841' />
-    <nd ref='21091842' />
-    <nd ref='21091843' />
-    <nd ref='21091844' />
-    <nd ref='142614189' />
-    <nd ref='21091845' />
-    <nd ref='21091831' />
-    <nd ref='21091846' />
-    <nd ref='21091847' />
-    <nd ref='21091848' />
-    <nd ref='21091826' />
-    <nd ref='21091849' />
-    <nd ref='21091850' />
-    <nd ref='21091823' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Millbrook Road East' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4536142' timestamp='2007-04-29T01:53:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25895696' />
-    <nd ref='28179460' />
-    <nd ref='28179461' />
-    <nd ref='28179462' />
-    <nd ref='28179463' />
-    <nd ref='28179464' />
-    <nd ref='28179465' />
-    <nd ref='28179466' />
-    <nd ref='28179463' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Ordhard' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577556' timestamp='2007-05-10T00:36:43+01:00' visible='true'>
-    <nd ref='28903749' />
-    <nd ref='25762113' />
-    <nd ref='28903740' />
-    <nd ref='28903738' />
-    <nd ref='28903736' />
-    <nd ref='28903735' />
-    <nd ref='28903741' />
-    <nd ref='28903743' />
-    <nd ref='28903744' />
-    <nd ref='28903746' />
-    <nd ref='28903747' />
-    <nd ref='28903749' />
-    <tag k='leisure' v='park' />
-    <tag k='name' v='Riverside Park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604597' timestamp='2007-05-15T20:56:06+01:00' user='nickw' visible='true'>
-    <nd ref='29135243' />
-    <nd ref='29135241' />
-    <nd ref='29135246' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Binstead Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644820' timestamp='2007-10-16T11:34:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29549369' />
-    <nd ref='29549345' />
-    <nd ref='29549346' />
-    <nd ref='29549347' />
-    <nd ref='29549348' />
-    <nd ref='29549349' />
-    <nd ref='29549350' />
-    <nd ref='29549351' />
-    <nd ref='29549352' />
-    <nd ref='29549353' />
-    <nd ref='29549354' />
-    <nd ref='29549355' />
-    <nd ref='29549356' />
-    <nd ref='29549357' />
-    <nd ref='29549358' />
-    <nd ref='29549359' />
-    <nd ref='29549360' />
-    <nd ref='29549361' />
-    <nd ref='29549362' />
-    <nd ref='29549363' />
-    <nd ref='30089808' />
-    <nd ref='29549364' />
-    <nd ref='29549365' />
-    <nd ref='29549366' />
-    <nd ref='29549367' />
-    <nd ref='29549368' />
-    <nd ref='29549369' />
-    <tag k='leisure' v='common' />
-    <tag k='name' v='Flemming Park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072030' timestamp='2008-02-03T06:24:13+00:00' user='sladen' visible='true'>
-    <nd ref='254444' />
-    <nd ref='48958642' />
-    <nd ref='254755' />
-    <nd ref='20971157' />
-    <nd ref='20973240' />
-    <nd ref='245152607' />
-    <nd ref='301581' />
-    <nd ref='34278584' />
-    <nd ref='254756' />
-    <nd ref='20973236' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='secondary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='10569170' timestamp='2007-10-29T16:25:33+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254684' />
-    <nd ref='17721077' />
-    <nd ref='15359722' />
-    <nd ref='29621216' />
-    <nd ref='15359721' />
-    <nd ref='29728855' />
-    <nd ref='29533947' />
-    <nd ref='254683' />
-    <nd ref='17721076' />
-    <nd ref='15359720' />
-    <nd ref='15359718' />
-    <nd ref='15359719' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Romsey Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3431519' timestamp='2006-09-28T23:48:14+01:00' user='nickw' visible='true'>
-    <nd ref='16963769' />
-    <nd ref='28194866' />
-    <nd ref='28194868' />
-    <nd ref='16963770' />
-    <nd ref='16963789' />
-    <nd ref='16963787' />
-    <nd ref='28194869' />
-    <nd ref='16963786' />
-    <nd ref='16963785' />
-    <nd ref='19227253' />
-    <nd ref='28194870' />
-    <nd ref='16963783' />
-    <nd ref='16963782' />
-    <nd ref='28194871' />
-    <nd ref='16963781' />
-    <nd ref='16963780' />
-    <nd ref='28194872' />
-    <nd ref='16963779' />
-    <nd ref='16963777' />
-    <nd ref='28194873' />
-    <nd ref='16963776' />
-    <nd ref='16963775' />
-    <nd ref='28194874' />
-    <nd ref='16963773' />
-    <nd ref='16963772' />
-    <nd ref='28194875' />
-    <nd ref='28194876' />
-    <nd ref='16963770' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Holly Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131445' timestamp='2007-10-17T00:35:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20972782' />
-    <nd ref='20972783' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='672' timestamp='2006-06-04T00:38:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='325684' />
-    <nd ref='325685' />
-    <nd ref='325686' />
-    <nd ref='325687' />
-    <nd ref='325688' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4743136' timestamp='2007-06-11T22:16:56+01:00' visible='true'>
-    <nd ref='30225805' />
-    <nd ref='30225802' />
-    <nd ref='30225800' />
-    <nd ref='30225797' />
-    <nd ref='30224265' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996899' timestamp='2006-11-10T21:59:05+00:00' user='nickw' visible='true'>
-    <nd ref='20957246' />
-    <nd ref='20957247' />
-    <nd ref='20957188' />
-    <nd ref='20957203' />
-    <nd ref='20957205' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Norfolk Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687172' timestamp='2007-05-30T21:37:23+01:00' user='nickw' visible='true'>
-    <nd ref='29794384' />
-    <nd ref='29794382' />
-    <nd ref='29794383' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ferndene Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601208' timestamp='2007-10-30T17:21:43+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92680535' />
-    <nd ref='92680536' />
-    <nd ref='92680538' />
-    <nd ref='92680540' />
-    <nd ref='92680541' />
-    <nd ref='92680542' />
-    <nd ref='92680535' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Phi House' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4005412' timestamp='2007-12-10T20:59:56+00:00' user='sladen' visible='true'>
-    <nd ref='21091851' />
-    <nd ref='21091871' />
-    <nd ref='21091837' />
-    <nd ref='21091867' />
-    <nd ref='21091870' />
-    <nd ref='21091872' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Queenstown Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4077254' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true'>
-    <nd ref='21600596' />
-    <nd ref='21613416' />
-    <nd ref='21613415' />
-    <nd ref='21613414' />
-    <nd ref='21613413' />
-    <nd ref='21613412' />
-    <nd ref='21613411' />
-    <nd ref='21613410' />
-    <nd ref='21613409' />
-    <nd ref='21613408' />
-    <nd ref='21613407' />
-    <nd ref='21613406' />
-    <nd ref='21613405' />
-    <nd ref='21613404' />
-    <nd ref='21613403' />
-    <nd ref='21613402' />
-    <nd ref='18348719' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Flexford Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4546534' timestamp='2007-04-30T23:45:38+01:00' user='nickw' visible='true'>
-    <nd ref='28348132' />
-    <nd ref='28348130' />
-    <nd ref='28348129' />
-    <nd ref='28348128' />
-    <nd ref='28348127' />
-    <nd ref='28348126' />
-    <nd ref='28348125' />
-    <nd ref='28348133' />
-    <nd ref='28348134' />
-    <nd ref='28345062' />
-    <nd ref='28348145' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northfield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635658' timestamp='2007-05-21T23:53:42+01:00' user='nickw' visible='true'>
-    <nd ref='26114351' />
-    <nd ref='29461230' />
-    <nd ref='29461231' />
-    <nd ref='29461232' />
-    <nd ref='29461233' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='no street name. how helpful :-)' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580484' timestamp='2007-05-11T00:51:25+01:00' visible='true'>
-    <nd ref='28935739' />
-    <nd ref='28935740' />
-    <nd ref='28935741' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15451209' timestamp='2007-12-06T20:43:03+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28212756' />
-    <nd ref='21178433' />
-    <nd ref='21178434' />
-    <nd ref='21178435' />
-    <nd ref='21178436' />
-    <nd ref='21178437' />
-    <nd ref='21178438' />
-    <nd ref='21178431' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546071' timestamp='2007-04-30T21:49:14+01:00' user='nickw' visible='true'>
-    <nd ref='28341790' />
-    <nd ref='28341791' />
-    <nd ref='28341792' />
-    <nd ref='28341793' />
-    <nd ref='28341794' />
-    <nd ref='28230956' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Carisbrooke Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4083484' timestamp='2006-12-22T14:24:08+00:00' user='nickw' visible='true'>
-    <nd ref='21677595' />
-    <nd ref='21677593' />
-    <nd ref='21677592' />
-    <nd ref='21677590' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Vincent's Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540763' timestamp='2007-04-29T21:43:35+01:00' visible='true'>
-    <nd ref='469881' />
-    <nd ref='28249999' />
-    <nd ref='28250000' />
-    <nd ref='28249986' />
-    <nd ref='28249982' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Claremont Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8143484' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781172' />
-    <nd ref='26781174' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Swanage Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196522' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='24668094' />
-    <nd ref='24668058' />
-    <nd ref='24668348' />
-    <nd ref='24668329' />
-    <nd ref='24668171' />
-    <nd ref='24668070' />
-    <nd ref='24668390' />
-    <nd ref='24668373' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Merlin Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539980' timestamp='2007-04-29T20:37:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243612' />
-    <nd ref='28243621' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redhill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604563' timestamp='2007-05-15T20:53:20+01:00' user='nickw' visible='true'>
-    <nd ref='29134828' />
-    <nd ref='29134825' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brighstone Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121433' timestamp='2006-05-21T09:20:18+01:00' user='nickw' visible='true'>
-    <nd ref='700396' />
-    <nd ref='700397' />
-    <nd ref='700544' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8125058' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071419' />
-    <nd ref='13071421' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rutland Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3292' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true'>
-    <nd ref='700478' />
-    <nd ref='700481' />
-    <nd ref='700511' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Appleton Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4215233' timestamp='2007-01-10T00:20:42+00:00' user='nickw' visible='true'>
-    <nd ref='422993' />
-    <nd ref='24984739' />
-    <nd ref='24984675' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947657' timestamp='2007-09-10T23:55:24+01:00' visible='true'>
-    <nd ref='29461214' />
-    <nd ref='26114356' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='St Mary Street' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4604440' timestamp='2007-08-12T23:13:03+01:00' user='Edward' visible='true'>
-    <nd ref='29132900' />
-    <nd ref='29132905' />
-    <nd ref='29132910' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4008575' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='21141402' />
-    <nd ref='21141386' />
-    <nd ref='21141399' />
-    <nd ref='21141400' />
-    <nd ref='21141401' />
-    <nd ref='21141380' />
-    <nd ref='21141403' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Colebrook Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551444' timestamp='2007-05-01T23:50:25+01:00' user='nickw' visible='true'>
-    <nd ref='28414281' />
-    <nd ref='28414284' />
-    <nd ref='28414268' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mardon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698140' timestamp='2007-10-17T02:34:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29871683' />
-    <nd ref='29871659' />
-    <nd ref='29871666' />
-    <nd ref='29871674' />
-    <nd ref='29871681' />
-    <nd ref='29871678' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bitterne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703289' timestamp='2007-06-03T20:55:54+01:00' visible='true'>
-    <nd ref='29925344' />
-    <nd ref='29925345' />
-    <nd ref='29925346' />
-    <nd ref='29925347' />
-    <nd ref='29925348' />
-    <nd ref='29925206' />
-    <nd ref='29925207' />
-    <nd ref='29926154' />
-    <nd ref='29925337' />
-    <nd ref='29925338' />
-    <nd ref='29925339' />
-    <nd ref='29925340' />
-    <nd ref='29925341' />
-    <nd ref='29925342' />
-    <nd ref='29925343' />
-    <nd ref='29925344' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Launceston Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4723471' timestamp='2007-10-04T19:39:00+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='30089068' />
-    <nd ref='30089074' />
-    <nd ref='30089077' />
-    <nd ref='30089080' />
-    <nd ref='30089082' />
-    <nd ref='30089084' />
-    <nd ref='30089085' />
-    <nd ref='30089086' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='24' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4295841' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='25947174' />
-    <nd ref='25947166' />
-    <nd ref='25947175' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Durnford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152198' timestamp='2007-06-11T22:24:05+01:00' visible='true'>
-    <nd ref='30226351' />
-    <nd ref='30226352' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Haddon Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4567182' timestamp='2007-12-08T20:01:54+00:00' user='nickw' visible='true'>
-    <nd ref='21600476' />
-    <nd ref='47017483' />
-    <nd ref='157192561' />
-    <nd ref='21600474' />
-    <nd ref='28935773' />
-    <nd ref='21092034' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Lords Hill Centre West' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='1639809' timestamp='2006-06-04T19:03:45+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254634' />
-    <nd ref='254342' />
-    <nd ref='28179448' />
-    <nd ref='28179449' />
-    <nd ref='28179450' />
-    <nd ref='254343' />
-    <nd ref='28179452' />
-    <nd ref='254344' />
-    <nd ref='28179454' />
-    <nd ref='28179453' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chilworth Drive' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='22801735' timestamp='2008-02-03T06:25:18+00:00' user='sladen' visible='true'>
-    <nd ref='245153987' />
-    <nd ref='26447501' />
-    <nd ref='26004488' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4691024' timestamp='2007-05-31T22:10:56+01:00' visible='true'>
-    <nd ref='29816628' />
-    <nd ref='29816629' />
-    <nd ref='29816630' />
-    <nd ref='29816631' />
-    <nd ref='29816632' />
-    <nd ref='29816633' />
-    <nd ref='29816634' />
-    <nd ref='29816635' />
-    <nd ref='29816636' />
-    <nd ref='29816637' />
-    <nd ref='29816638' />
-    <nd ref='29816639' />
-    <nd ref='29816640' />
-    <nd ref='29816641' />
-    <nd ref='29816642' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4697989' timestamp='2007-06-02T18:17:09+01:00' visible='true'>
-    <nd ref='28246353' />
-    <nd ref='29862360' />
-    <nd ref='29862361' />
-    <nd ref='29862362' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dale Valley Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079301' timestamp='2006-12-18T21:21:59+00:00' user='nickw' visible='true'>
-    <nd ref='21636816' />
-    <nd ref='21636817' />
-    <nd ref='21636818' />
-    <nd ref='21636819' />
-    <nd ref='21636820' />
-    <nd ref='21636821' />
-    <nd ref='21636822' />
-    <nd ref='21636813' />
-    <nd ref='21636814' />
-    <nd ref='21636815' />
-    <nd ref='21636816' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chilworth Ring' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061548' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='388896' />
-    <nd ref='388897' />
-    <nd ref='388898' />
-    <nd ref='388926' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4253358' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true'>
-    <nd ref='25471841' />
-    <nd ref='25471842' />
-    <nd ref='25471843' />
-    <nd ref='25471844' />
-    <nd ref='10908532' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578758' timestamp='2007-07-30T16:07:04+01:00' visible='true'>
-    <nd ref='325647' />
-    <nd ref='33130197' />
-    <nd ref='242720' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Milton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546538' timestamp='2007-04-30T23:45:38+01:00' user='nickw' visible='true'>
-    <nd ref='28348126' />
-    <nd ref='28345055' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lingfield Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690702' timestamp='2007-05-31T21:34:37+01:00' visible='true'>
-    <nd ref='29815416' />
-    <nd ref='29815417' />
-    <nd ref='29815418' />
-    <nd ref='29815419' />
-    <nd ref='29815420' />
-    <nd ref='29815421' />
-    <nd ref='29815076' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091880' timestamp='2006-09-03T00:38:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743150' />
-    <nd ref='21561785' />
-    <nd ref='21561563' />
-    <nd ref='14743151' />
-    <nd ref='21561784' />
-    <nd ref='14743140' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Anglesea Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235064' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='21613436' />
-    <nd ref='21613437' />
-    <nd ref='21613388' />
-    <nd ref='21613438' />
-    <nd ref='25282139' />
-    <nd ref='21613449' />
-    <nd ref='21613450' />
-    <nd ref='21613451' />
-    <nd ref='21613447' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='17354030' timestamp='2007-12-20T16:32:58+00:00' user='mike l' visible='true'>
-    <nd ref='388951' />
-    <nd ref='179713783' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='note' v='December 2007:  Dahlia Road no longer joins Burgess Road. Pedestrian and cycle access possible, bollards and pavement prevent motor vehicles ' />
-    <tag k='name' v='Dahlia Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='motorcycle' v='no' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8151526' timestamp='2007-06-03T22:22:10+01:00' visible='true'>
-    <nd ref='29505714' />
-    <nd ref='29930464' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Maypole Villas' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4991511' timestamp='2007-07-30T16:06:55+01:00' visible='true'>
-    <nd ref='33130189' />
-    <nd ref='33130193' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743038' timestamp='2007-06-11T21:58:23+01:00' visible='true'>
-    <nd ref='29530529' />
-    <nd ref='30223552' />
-    <nd ref='30223553' />
-    <nd ref='30223566' />
-    <nd ref='30223564' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Breamore Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433597' timestamp='2007-12-06T19:26:18+00:00' user='Dean Earley' visible='true'>
-    <nd ref='153200231' />
-    <nd ref='28903787' />
-    <nd ref='28903972' />
-    <nd ref='28903933' />
-    <nd ref='29733427' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536701' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194868' />
-    <nd ref='28194890' />
-    <nd ref='28194891' />
-    <nd ref='28194892' />
-    <nd ref='28194893' />
-    <nd ref='28194894' />
-    <nd ref='28194895' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Providence Park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690852' timestamp='2007-05-31T21:37:11+01:00' visible='true'>
-    <nd ref='29815439' />
-    <nd ref='29815440' />
-    <nd ref='29815437' />
-    <nd ref='29815438' />
-    <nd ref='29710757' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077269' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='21600664' />
-    <nd ref='21613481' />
-    <nd ref='21613482' />
-    <nd ref='21613483' />
-    <nd ref='21613484' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Lulworth Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10360749' timestamp='2007-10-26T13:03:08+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='87844668' />
-    <nd ref='87844774' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3819505' timestamp='2006-10-23T21:17:37+01:00' user='nickw' visible='true'>
-    <nd ref='19229535' />
-    <nd ref='19227224' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999150' timestamp='2006-11-12T22:57:30+00:00' user='Dean Earley' visible='true'>
-    <nd ref='469848' />
-    <nd ref='20971213' />
-    <nd ref='20971214' />
-    <nd ref='20971212' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625940' timestamp='2007-05-20T10:19:37+01:00' user='nickw' visible='true'>
-    <nd ref='29380443' />
-    <nd ref='21419455' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295839' timestamp='2007-02-16T20:51:26+00:00' user='nickw' visible='true'>
-    <nd ref='25947173' />
-    <nd ref='25947165' />
-    <nd ref='25947172' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bullar Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677940' timestamp='2007-10-16T02:44:03+01:00' user='andrewpmk' visible='true'>
-    <nd ref='24924315' />
-    <nd ref='29710190' />
-    <nd ref='29710195' />
-    <nd ref='29710198' />
-    <nd ref='29710125' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Peverells Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10522700' timestamp='2007-10-28T21:48:29+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90663584' />
-    <nd ref='90663585' />
-    <nd ref='90663587' />
-    <nd ref='90663590' />
-    <nd ref='90663591' />
-    <nd ref='90663592' />
-    <nd ref='90663593' />
-    <nd ref='90663595' />
-    <nd ref='90663597' />
-    <nd ref='90663598' />
-    <nd ref='90663600' />
-    <nd ref='90663601' />
-    <nd ref='90663602' />
-    <nd ref='90663603' />
-    <nd ref='90663584' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Marlands Shopping Centre' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4209532' timestamp='2007-09-20T19:36:51+01:00' user='mike l' visible='true'>
-    <nd ref='24924092' />
-    <nd ref='24924093' />
-    <nd ref='24924068' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Friars Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4541326' timestamp='2007-04-29T22:57:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244188' />
-    <nd ref='28244232' />
-    <nd ref='28257899' />
-    <nd ref='28244235' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dempsey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540345' timestamp='2007-04-29T21:10:02+01:00' visible='true'>
-    <nd ref='28194443' />
-    <nd ref='28194442' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sheldrake Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703285' timestamp='2007-06-03T20:34:11+01:00' visible='true'>
-    <nd ref='29925202' />
-    <nd ref='29925203' />
-    <nd ref='29925205' />
-    <nd ref='29925206' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Launceston Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4301152' timestamp='2007-02-18T21:30:56+00:00' visible='true'>
-    <nd ref='26004483' />
-    <nd ref='26004484' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Matthews Close' />
-  </way>
-  <way id='4644678' timestamp='2007-05-24T10:51:05+01:00' visible='true'>
-    <nd ref='29548671' />
-    <nd ref='29548677' />
-    <nd ref='29548686' />
-    <nd ref='29548678' />
-    <nd ref='29548679' />
-    <nd ref='29548680' />
-    <nd ref='29548682' />
-    <nd ref='29548683' />
-    <nd ref='29548684' />
-    <nd ref='29548685' />
-    <nd ref='29548677' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Greenwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3907161' timestamp='2006-10-27T23:39:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20102975' />
-    <nd ref='20110946' />
-    <nd ref='20110894' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Broadwater Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130050' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20133112' />
-    <nd ref='20133115' />
-    <nd ref='20133116' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Paulet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540754' timestamp='2007-04-29T21:43:33+01:00' visible='true'>
-    <nd ref='28249943' />
-    <nd ref='28249946' />
-    <nd ref='28249957' />
-    <nd ref='28249958' />
-    <nd ref='28249963' />
-    <nd ref='28249964' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Creighton Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996903' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957224' />
-    <nd ref='20957184' />
-    <nd ref='20957226' />
-    <nd ref='20957227' />
-    <nd ref='20957239' />
-    <nd ref='20957238' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Landguard Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540974' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252947' />
-    <nd ref='28252968' />
-    <nd ref='28252969' />
-    <nd ref='28252977' />
-    <nd ref='28252979' />
-    <nd ref='28252980' />
-    <nd ref='28252981' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Robinia Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694066' timestamp='2007-06-01T20:13:27+01:00' visible='true'>
-    <nd ref='29505714' />
-    <nd ref='29838289' />
-    <nd ref='29838292' />
-    <nd ref='29838295' />
-    <nd ref='29838298' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Boyatt Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10598003' timestamp='2007-10-30T16:47:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21613430' />
-    <nd ref='21613431' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Raglan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679928' timestamp='2007-06-08T18:12:37+01:00' visible='true'>
-    <nd ref='29730538' />
-    <nd ref='29730539' />
-    <nd ref='29730540' />
-    <nd ref='30089147' />
-    <nd ref='30089148' />
-    <nd ref='30089146' />
-    <nd ref='30089145' />
-    <nd ref='29730541' />
-    <nd ref='29730542' />
-    <nd ref='29730543' />
-    <nd ref='29730544' />
-    <nd ref='29730534' />
-    <nd ref='29730537' />
-    <nd ref='29730538' />
-    <tag k='leisure' v='golf_course' />
-    <tag k='name' v='Flemming Park Golf Course' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677086' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='18232068' />
-    <nd ref='17724246' />
-    <nd ref='17724245' />
-    <nd ref='17724250' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Newcombe Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386813' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26728548' />
-    <nd ref='26728562' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ludlow Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569985' timestamp='2007-05-05T09:07:24+01:00' user='nickw' visible='true'>
-    <nd ref='28830693' />
-    <nd ref='28830580' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wakefield Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8132232' timestamp='2007-11-18T19:08:13+00:00' user='nickw' visible='true'>
-    <nd ref='469874' />
-    <nd ref='21275692' />
-    <nd ref='122329587' />
-    <nd ref='11419686' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Foundry Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536693' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194844' />
-    <nd ref='28194859' />
-    <nd ref='28194860' />
-    <nd ref='28194861' />
-    <nd ref='28194862' />
-    <nd ref='28194863' />
-    <nd ref='28194864' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cleek Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015829' timestamp='2006-11-26T00:18:44+00:00' user='nickw' visible='true'>
-    <nd ref='21275708' />
-    <nd ref='21275702' />
-    <nd ref='21275703' />
-    <nd ref='21275704' />
-    <nd ref='21275705' />
-    <nd ref='21275706' />
-    <nd ref='21275707' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Crown Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539992' timestamp='2007-04-29T20:37:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243537' />
-    <nd ref='28243700' />
-    <nd ref='28243701' />
-    <nd ref='28243705' />
-    <nd ref='28243708' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Avington Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679923' timestamp='2007-05-28T19:39:30+01:00' visible='true'>
-    <nd ref='29730492' />
-    <nd ref='29730501' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Meynell Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540188' timestamp='2007-04-29T20:52:51+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254892' />
-    <nd ref='28246056' />
-    <nd ref='28246058' />
-    <nd ref='28246059' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Burgess Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999325' timestamp='2007-12-10T21:07:14+00:00' user='sladen' visible='true'>
-    <nd ref='20973117' />
-    <nd ref='8596806' />
-    <nd ref='8596797' />
-    <nd ref='20973114' />
-    <nd ref='20973086' />
-    <nd ref='20973115' />
-    <nd ref='20973116' />
-    <nd ref='20973088' />
-    <nd ref='20973117' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4540302' timestamp='2007-04-29T21:09:41+01:00' visible='true'>
-    <nd ref='28194337' />
-    <nd ref='28194336' />
-    <nd ref='28194335' />
-    <nd ref='28194333' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fulmar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10517220' timestamp='2007-10-28T20:24:25+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90581796' />
-    <nd ref='90581798' />
-    <nd ref='90581800' />
-    <nd ref='90581801' />
-    <nd ref='90581802' />
-    <nd ref='90581803' />
-    <nd ref='90581804' />
-    <nd ref='90581805' />
-    <nd ref='90581806' />
-    <nd ref='90581807' />
-    <nd ref='90581808' />
-    <nd ref='90581809' />
-    <nd ref='90581810' />
-    <nd ref='90581811' />
-    <nd ref='90581812' />
-    <nd ref='90581813' />
-    <nd ref='90581814' />
-    <nd ref='90581815' />
-    <nd ref='90581816' />
-    <nd ref='90581819' />
-    <nd ref='90581820' />
-    <nd ref='90581821' />
-    <nd ref='90581822' />
-    <nd ref='90581823' />
-    <nd ref='90581824' />
-    <nd ref='90581826' />
-    <nd ref='90581827' />
-    <nd ref='90581828' />
-    <nd ref='90581829' />
-    <nd ref='90581831' />
-    <nd ref='90581832' />
-    <nd ref='90581834' />
-    <nd ref='90581835' />
-    <nd ref='90581837' />
-    <tag k='waterway' v='drain' />
-    <tag k='boat' v='no' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4605583' timestamp='2007-08-12T23:11:12+01:00' user='Edward' visible='true'>
-    <nd ref='10908206' />
-    <nd ref='29145251' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cobden Bridge' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='layer' v='1' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='9660159' timestamp='2007-10-16T20:09:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='42141530' />
-    <nd ref='42141544' />
-    <nd ref='42141573' />
-    <tag k='access' v='permissive' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4661831' timestamp='2007-05-26T20:15:17+01:00' visible='true'>
-    <nd ref='29632141' />
-    <nd ref='29632145' />
-    <nd ref='29632147' />
-    <nd ref='29632152' />
-    <nd ref='29632150' />
-    <nd ref='29632156' />
-    <nd ref='29632158' />
-    <nd ref='29632160' />
-    <nd ref='29632161' />
-    <nd ref='29632162' />
-    <nd ref='29632163' />
-    <nd ref='29632164' />
-    <nd ref='29632165' />
-    <nd ref='29632116' />
-    <nd ref='29632121' />
-    <nd ref='29632125' />
-    <nd ref='29632130' />
-    <nd ref='29632136' />
-    <nd ref='29632133' />
-    <nd ref='29632141' />
-    <tag k='natural' v='water' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235059' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282077' />
-    <nd ref='25282129' />
-    <nd ref='25282078' />
-    <nd ref='25282079' />
-    <nd ref='25282080' />
-    <nd ref='25282081' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tansy Meadow' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149931' timestamp='2007-07-01T22:15:25+01:00' visible='true'>
-    <nd ref='29387397' />
-    <nd ref='25340631' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Grantham road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556517' timestamp='2007-10-29T08:11:21+00:00' user='nickw' visible='true'>
-    <nd ref='91119008' />
-    <nd ref='91119005' />
-    <nd ref='91119011' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brook Valley' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999855' timestamp='2006-11-13T21:50:58+00:00' user='nickw' visible='true'>
-    <nd ref='382998' />
-    <nd ref='20976769' />
-    <nd ref='20976770' />
-    <nd ref='20976771' />
-    <nd ref='20976772' />
-    <nd ref='20976773' />
-    <nd ref='20976774' />
-    <nd ref='20976775' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Shanklin Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4289967' timestamp='2007-10-16T17:59:45+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25896265' />
-    <nd ref='25896411' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077037' timestamp='2006-12-16T10:14:12+00:00' user='nickw' visible='true'>
-    <nd ref='14743150' />
-    <nd ref='21600422' />
-    <nd ref='21600501' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Newman Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077273' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='21613487' />
-    <nd ref='21613486' />
-    <nd ref='305610' />
-    <nd ref='305612' />
-    <nd ref='305613' />
-    <nd ref='305614' />
-    <nd ref='305615' />
-    <nd ref='305616' />
-    <nd ref='305617' />
-    <nd ref='305618' />
-    <nd ref='305619' />
-    <nd ref='305620' />
-    <nd ref='24668095' />
-    <nd ref='305621' />
-    <nd ref='24668030' />
-    <nd ref='305622' />
-    <nd ref='24668185' />
-    <nd ref='305623' />
-    <nd ref='305624' />
-    <nd ref='305625' />
-    <nd ref='305626' />
-    <nd ref='305627' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077048' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true'>
-    <nd ref='21600513' />
-    <nd ref='21600512' />
-    <nd ref='21615430' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209586' timestamp='2007-01-06T14:48:26+00:00' user='nickw' visible='true'>
-    <nd ref='24924342' />
-    <nd ref='21613471' />
-    <nd ref='24924067' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Castle Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8140825' timestamp='2007-03-04T18:58:18+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346878' />
-    <nd ref='26346880' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ashburnham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540766' timestamp='2007-04-29T21:43:35+01:00' visible='true'>
-    <nd ref='28249943' />
-    <nd ref='28250005' />
-    <nd ref='28250021' />
-    <nd ref='28250007' />
-    <nd ref='28250017' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Creighton Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4768597' timestamp='2007-10-16T06:19:26+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30431970' />
-    <nd ref='30431993' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148508' timestamp='2007-04-29T20:37:17+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243504' />
-    <nd ref='28243510' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Mount' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2147558' timestamp='2008-01-09T08:24:04+00:00' user='hairywill' visible='true'>
-    <nd ref='254387' />
-    <nd ref='254388' />
-    <nd ref='254389' />
-    <nd ref='13071230' />
-    <nd ref='254673' />
-    <nd ref='675889' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cobden Avenue' />
-    <tag k='created_by' v='Potlatch 0.6a' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='9652517' timestamp='2007-10-26T15:03:37+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='25895699' />
-    <nd ref='25895698' />
-    <nd ref='254486' />
-    <nd ref='24667717' />
-    <nd ref='29464291' />
-    <nd ref='28179473' />
-    <nd ref='254485' />
-    <nd ref='25895697' />
-    <nd ref='28179467' />
-    <nd ref='254484' />
-    <nd ref='25895695' />
-    <nd ref='25895696' />
-    <nd ref='28179459' />
-    <nd ref='254338' />
-    <nd ref='254482' />
-    <nd ref='254481' />
-    <nd ref='254480' />
-    <nd ref='25895692' />
-    <nd ref='254479' />
-    <nd ref='25895693' />
-    <nd ref='87937489' />
-    <nd ref='18349493' />
-    <nd ref='25895688' />
-    <nd ref='254478' />
-    <nd ref='25895689' />
-    <nd ref='254477' />
-    <nd ref='254476' />
-    <nd ref='254475' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4818217' timestamp='2007-06-26T23:45:19+01:00' user='nickw' visible='true'>
-    <nd ref='29008372' />
-    <nd ref='30956560' />
-    <nd ref='30956561' />
-    <nd ref='30956562' />
-    <nd ref='30956563' />
-    <nd ref='30956564' />
-    <nd ref='29008394' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546165' timestamp='2007-04-30T22:13:59+01:00' user='nickw' visible='true'>
-    <nd ref='28342556' />
-    <nd ref='28342557' />
-    <nd ref='28342550' />
-    <nd ref='28342551' />
-    <nd ref='28342552' />
-    <nd ref='28342553' />
-    <nd ref='28342554' />
-    <nd ref='28342555' />
-    <nd ref='28342556' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3906611' timestamp='2006-10-27T22:49:32+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20107342' />
-    <nd ref='20107341' />
-    <nd ref='20107343' />
-    <nd ref='10537332' />
-    <nd ref='20107342' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3233387' timestamp='2007-12-10T19:05:58+00:00' user='sladen' visible='true'>
-    <nd ref='15657678' />
-    <nd ref='15657679' />
-    <nd ref='15657680' />
-    <nd ref='271049' />
-    <tag k='railway' v='rail' />
-    <tag k='name' v='West Coastway Line' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='5072045' timestamp='2007-08-14T04:48:34+01:00' user='andrewpmk' visible='true'>
-    <nd ref='14726179' />
-    <nd ref='34278600' />
-    <nd ref='20973236' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Tways 0.2' />
-  </way>
-  <way id='8148805' timestamp='2007-05-24T10:51:07+01:00' visible='true'>
-    <nd ref='29548712' />
-    <nd ref='29548714' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Owen Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196534' timestamp='2007-01-04T21:07:46+00:00' user='nickw' visible='true'>
-    <nd ref='24668378' />
-    <nd ref='24668038' />
-    <nd ref='24668104' />
-    <nd ref='24668306' />
-    <nd ref='305617' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brue Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077040' timestamp='2007-11-18T19:11:26+00:00' user='nickw' visible='true'>
-    <nd ref='122334969' />
-    <nd ref='21275699' />
-    <nd ref='21275700' />
-    <nd ref='21275701' />
-    <nd ref='21600503' />
-    <nd ref='21600504' />
-    <nd ref='21600505' />
-    <nd ref='21600506' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Imperial Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661838' timestamp='2007-05-26T20:15:30+01:00' visible='true'>
-    <nd ref='29632451' />
-    <nd ref='29632453' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Priory Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743297' timestamp='2007-06-11T22:36:28+01:00' visible='true'>
-    <nd ref='30226207' />
-    <nd ref='30227020' />
-    <nd ref='30226997' />
-    <nd ref='30226375' />
-    <nd ref='30226376' />
-    <nd ref='30226866' />
-    <nd ref='30226864' />
-    <nd ref='30226354' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215240' timestamp='2007-01-10T00:20:47+00:00' user='nickw' visible='true'>
-    <nd ref='24984672' />
-    <nd ref='24984754' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084416' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689142' />
-    <nd ref='21689143' />
-    <nd ref='21689060' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rayners Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1692' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='603226' />
-    <nd ref='603227' />
-    <nd ref='319622' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Clausentum Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703974' timestamp='2007-06-12T21:04:59+01:00' visible='true'>
-    <nd ref='29704539' />
-    <nd ref='30259427' />
-    <nd ref='29929611' />
-    <nd ref='29929614' />
-    <nd ref='29929615' />
-    <nd ref='29929616' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2573933' timestamp='2006-07-24T21:04:36+01:00' user='nickw' visible='true'>
-    <nd ref='11419582' />
-    <nd ref='11419589' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Villiers Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150117' timestamp='2007-10-16T02:44:11+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29703873' />
-    <nd ref='29703876' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Allbrook Knoll' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4628073' timestamp='2007-05-20T18:03:05+01:00' visible='true'>
-    <nd ref='29392343' />
-    <nd ref='29392344' />
-    <nd ref='29392345' />
-    <nd ref='29392365' />
-    <nd ref='29392364' />
-    <nd ref='29392367' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Market Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237112' timestamp='2007-06-03T22:13:38+01:00' visible='true'>
-    <nd ref='25296278' />
-    <nd ref='25296279' />
-    <nd ref='25296313' />
-    <nd ref='25296280' />
-    <nd ref='25296281' />
-    <nd ref='25296276' />
-    <nd ref='25296277' />
-    <nd ref='29929854' />
-    <nd ref='25296278' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196514' timestamp='2007-10-16T06:18:12+01:00' user='andrewpmk' visible='true'>
-    <nd ref='24668026' />
-    <nd ref='24668102' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015804' timestamp='2006-11-26T00:07:52+00:00' user='nickw' visible='true'>
-    <nd ref='21275756' />
-    <nd ref='21275779' />
-    <nd ref='21275626' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Albany Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947661' timestamp='2007-09-10T23:55:25+01:00' visible='true'>
-    <nd ref='48958679' />
-    <nd ref='48958675' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Windsor Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433430' timestamp='2007-10-17T01:09:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28904005' />
-    <nd ref='28903888' />
-    <nd ref='28904025' />
-    <tag k='highway' v='service' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586249' timestamp='2007-05-12T15:36:08+01:00' user='nickw' visible='true'>
-    <nd ref='10537332' />
-    <nd ref='29009222' />
-    <nd ref='29009225' />
-    <nd ref='29009226' />
-    <nd ref='29009230' />
-    <nd ref='29009231' />
-    <nd ref='29009232' />
-    <nd ref='29009233' />
-    <nd ref='29009234' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gatcombe Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551577' timestamp='2007-05-02T00:35:36+01:00' visible='true'>
-    <nd ref='28418335' />
-    <nd ref='28418337' />
-    <nd ref='28418520' />
-    <nd ref='28418516' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Coniston Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3144197' timestamp='2006-09-08T23:07:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15028822' />
-    <nd ref='15028824' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edge Hill Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005420' timestamp='2006-11-19T12:09:23+00:00' user='nickw' visible='true'>
-    <nd ref='21091882' />
-    <nd ref='21091830' />
-    <nd ref='21091884' />
-    <nd ref='21091883' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='I'm sure there was more of a bend. may need re-surveying' />
-    <tag k='name' v='Hanley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077574' timestamp='2006-12-16T21:53:08+00:00' user='nickw' visible='true'>
-    <nd ref='21615424' />
-    <nd ref='21614682' />
-    <nd ref='21615425' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='West Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540970' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252949' />
-    <nd ref='28252950' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644674' timestamp='2007-05-24T10:51:04+01:00' visible='true'>
-    <nd ref='29548664' />
-    <nd ref='29548663' />
-    <nd ref='25340634' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Goldsmith Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687642' timestamp='2007-05-30T22:31:37+01:00' user='nickw' visible='true'>
-    <nd ref='29526312' />
-    <nd ref='29526313' />
-    <nd ref='29526314' />
-    <nd ref='29526315' />
-    <nd ref='15028824' />
-    <nd ref='29526316' />
-    <nd ref='15028825' />
-    <nd ref='13071389' />
-    <nd ref='28345034' />
-    <nd ref='29764410' />
-    <nd ref='28348308' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cleveland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2148107' timestamp='2008-01-25T18:27:57+00:00' visible='true'>
-    <nd ref='673878' />
-    <nd ref='9266199' />
-    <nd ref='25303109' />
-    <nd ref='21496507' />
-    <nd ref='325195' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3220759' timestamp='2007-11-06T18:24:30+00:00' user='nickw' visible='true'>
-    <nd ref='15741006' />
-    <nd ref='331317' />
-    <nd ref='331318' />
-    <nd ref='331319' />
-    <nd ref='331320' />
-    <nd ref='331321' />
-    <nd ref='331322' />
-    <nd ref='331323' />
-    <nd ref='331324' />
-    <nd ref='331325' />
-    <nd ref='331326' />
-    <nd ref='331327' />
-    <nd ref='331328' />
-    <nd ref='331329' />
-    <nd ref='331330' />
-    <nd ref='331331' />
-    <nd ref='331332' />
-    <nd ref='331333' />
-    <nd ref='331334' />
-    <nd ref='331335' />
-    <nd ref='331336' />
-    <nd ref='331337' />
-    <nd ref='331338' />
-    <nd ref='331339' />
-    <nd ref='331340' />
-    <nd ref='331341' />
-    <nd ref='331342' />
-    <nd ref='331343' />
-    <nd ref='331344' />
-    <nd ref='331345' />
-    <nd ref='331346' />
-    <nd ref='331347' />
-    <nd ref='331348' />
-    <nd ref='331349' />
-    <nd ref='331350' />
-    <nd ref='331351' />
-    <nd ref='331352' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540739' timestamp='2008-01-20T09:54:32+00:00' user='andrewpmk' visible='true'>
-    <nd ref='28249822' />
-    <nd ref='28249833' />
-    <nd ref='28249834' />
-    <nd ref='28249837' />
-    <nd ref='28249840' />
-    <nd ref='28249842' />
-    <nd ref='28249843' />
-    <nd ref='28249844' />
-    <nd ref='28249845' />
-    <nd ref='28249847' />
-    <nd ref='28249846' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tilbrook Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546178' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true'>
-    <nd ref='28342613' />
-    <nd ref='28231128' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Freemantle Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818229' timestamp='2007-06-26T23:45:22+01:00' user='nickw' visible='true'>
-    <nd ref='30956636' />
-    <nd ref='30956638' />
-    <nd ref='30956639' />
-    <nd ref='30956630' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698136' timestamp='2007-06-02T18:58:33+01:00' visible='true'>
-    <nd ref='29871557' />
-    <nd ref='29871559' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Gabriels Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546169' timestamp='2007-04-30T22:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='28342584' />
-    <nd ref='28342589' />
-    <nd ref='28342522' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4878392' timestamp='2007-07-09T23:20:00+01:00' visible='true'>
-    <nd ref='31517599' />
-    <nd ref='31518115' />
-    <nd ref='31518173' />
-    <nd ref='31517591' />
-    <nd ref='31517599' />
-    <tag k='amenity' v='parking' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074138' timestamp='2006-12-13T20:19:52+00:00' user='nickw' visible='true'>
-    <nd ref='21561788' />
-    <nd ref='21561809' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cecil Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732376' timestamp='2007-12-10T19:38:25+00:00' user='sladen' visible='true'>
-    <nd ref='30161374' />
-    <nd ref='30161981' />
-    <tag k='foot' v='no' />
-    <tag k='car' v='no' />
-    <tag k='railway' v='rail' />
-    <tag k='motorcar' v='no' />
-    <tag k='tunnel' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='layer' v='-1' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='8130041' timestamp='2006-10-27T23:39:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110855' />
-    <nd ref='20110892' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Moat Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134055' timestamp='2006-12-16T17:47:14+00:00' user='David Currie' visible='true'>
-    <nd ref='20964841' />
-    <nd ref='21613399' />
-    <nd ref='20964840' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Green Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10568207' timestamp='2007-10-29T15:43:30+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30290778' />
-    <nd ref='30290776' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079298' timestamp='2006-12-18T21:21:59+00:00' user='nickw' visible='true'>
-    <nd ref='21636797' />
-    <nd ref='21636805' />
-    <nd ref='21636804' />
-    <nd ref='21636803' />
-    <nd ref='21636802' />
-    <nd ref='21636801' />
-    <nd ref='21636800' />
-    <nd ref='21636733' />
-    <nd ref='21636799' />
-    <nd ref='21636798' />
-    <nd ref='21636797' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lingwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635711' timestamp='2007-05-21T23:53:41+01:00' user='nickw' visible='true'>
-    <nd ref='29461819' />
-    <nd ref='29461820' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235063' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282083' />
-    <nd ref='25282137' />
-    <nd ref='25282134' />
-    <nd ref='21600676' />
-    <nd ref='25282136' />
-    <nd ref='25282135' />
-    <nd ref='21600677' />
-    <nd ref='21613436' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8249568' timestamp='2007-10-16T19:19:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254435' />
-    <nd ref='14727992' />
-    <nd ref='27021759' />
-    <nd ref='254436' />
-    <nd ref='27021762' />
-    <nd ref='27021763' />
-    <nd ref='14744412' />
-    <nd ref='9267992' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061533' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='21507762' />
-    <nd ref='21507736' />
-    <nd ref='388883' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Begonia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151237' timestamp='2007-06-02T19:04:04+01:00' visible='true'>
-    <nd ref='29872361' />
-    <nd ref='29872362' />
-    <nd ref='29872363' />
-    <nd ref='29872364' />
-    <nd ref='29872365' />
-    <nd ref='29872366' />
-    <nd ref='29872367' />
-    <nd ref='29872368' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redcote Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='295641' timestamp='2006-06-04T00:35:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='2073222' />
-    <nd ref='2073232' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Merton Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2854834' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='469846' />
-    <nd ref='13071403' />
-    <nd ref='13071404' />
-    <nd ref='13071407' />
-    <nd ref='13071408' />
-    <nd ref='13071409' />
-    <nd ref='13071410' />
-    <nd ref='13071411' />
-    <nd ref='13071412' />
-    <nd ref='13071413' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9678653' timestamp='2007-10-17T01:00:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254692' />
-    <nd ref='254439' />
-    <nd ref='24924102' />
-    <nd ref='24924101' />
-    <nd ref='254440' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727659' timestamp='2007-06-09T19:43:22+01:00' user='nickw' visible='true'>
-    <nd ref='30124222' />
-    <nd ref='30124373' />
-    <nd ref='30124374' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arden Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540342' timestamp='2007-04-29T21:10:01+01:00' visible='true'>
-    <nd ref='28194426' />
-    <nd ref='28194428' />
-    <nd ref='28194427' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Widgeon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8143481' timestamp='2007-03-25T18:42:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781163' />
-    <nd ref='26781165' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bishops Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130040' timestamp='2006-10-27T23:39:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110846' />
-    <nd ref='20110863' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beverley Heights' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3186098' timestamp='2007-06-15T23:10:03+01:00' visible='true'>
-    <nd ref='15359726' />
-    <nd ref='29909654' />
-    <nd ref='21585934' />
-    <nd ref='30161109' />
-    <nd ref='21585941' />
-    <nd ref='30410994' />
-    <nd ref='15359727' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Factory Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589146' timestamp='2007-05-13T10:02:51+01:00' user='nickw' visible='true'>
-    <nd ref='21689066' />
-    <nd ref='29026667' />
-    <nd ref='29026668' />
-    <nd ref='29026669' />
-    <nd ref='29026659' />
-    <nd ref='29026671' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Crofton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9600751' timestamp='2007-10-16T06:17:37+01:00' user='andrewpmk' visible='true'>
-    <nd ref='25296308' />
-    <nd ref='21178404' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C354' />
-    <tag k='highway' v='tertiary' />
-    <tag k='maxspeed' v='64' />
-    <tag k='note' v='40 mph' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148425' timestamp='2007-06-10T18:15:28+01:00' visible='true'>
-    <nd ref='29392349' />
-    <nd ref='29392340' />
-    <nd ref='17721035' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Desbourough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540336' timestamp='2007-04-29T21:10:00+01:00' visible='true'>
-    <nd ref='28194416' />
-    <nd ref='28194417' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whinchat Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3907169' timestamp='2006-10-27T23:39:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110926' />
-    <nd ref='20110786' />
-    <nd ref='20110944' />
-    <nd ref='20110909' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saint Helena Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578763' timestamp='2006-10-07T00:25:26+01:00' user='nickw' visible='true'>
-    <nd ref='650794' />
-    <nd ref='17724271' />
-    <nd ref='21561841' />
-    <nd ref='17724270' />
-    <nd ref='17724269' />
-    <nd ref='17724235' />
-    <nd ref='17724268' />
-    <nd ref='18347840' />
-    <nd ref='17724267' />
-    <nd ref='17724266' />
-    <nd ref='17724234' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4773449' timestamp='2007-06-17T22:04:35+01:00' visible='true'>
-    <nd ref='30506819' />
-    <nd ref='30506822' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4712314' timestamp='2007-06-05T23:29:22+01:00' user='nickw' visible='true'>
-    <nd ref='29998990' />
-    <nd ref='29998991' />
-    <nd ref='29998994' />
-    <nd ref='29998996' />
-    <nd ref='29999006' />
-    <nd ref='29999007' />
-    <nd ref='29999009' />
-    <nd ref='29999011' />
-    <nd ref='29999013' />
-    <nd ref='29999016' />
-    <nd ref='29999018' />
-    <nd ref='29999020' />
-    <nd ref='29999022' />
-    <nd ref='29999024' />
-    <nd ref='29999026' />
-    <nd ref='29999027' />
-    <nd ref='29999030' />
-    <nd ref='29999032' />
-    <nd ref='29999034' />
-    <nd ref='29999038' />
-    <nd ref='29999040' />
-    <nd ref='29999044' />
-    <nd ref='29999048' />
-    <nd ref='29999051' />
-    <nd ref='29999056' />
-    <nd ref='29999058' />
-    <nd ref='29999060' />
-    <nd ref='26114080' />
-    <nd ref='29999063' />
-    <nd ref='29999067' />
-    <nd ref='29999072' />
-    <nd ref='29999074' />
-    <nd ref='29999077' />
-    <nd ref='29999081' />
-    <nd ref='29999084' />
-    <nd ref='29999088' />
-    <nd ref='29998950' />
-    <nd ref='29998949' />
-    <nd ref='29998946' />
-    <nd ref='29998944' />
-    <nd ref='29998941' />
-    <nd ref='29998940' />
-    <nd ref='29998937' />
-    <nd ref='29998935' />
-    <nd ref='29998932' />
-    <nd ref='29998929' />
-    <nd ref='29998927' />
-    <nd ref='29998924' />
-    <nd ref='29998921' />
-    <nd ref='29998919' />
-    <nd ref='29998915' />
-    <nd ref='29998913' />
-    <nd ref='29998911' />
-    <nd ref='29998908' />
-    <nd ref='29998906' />
-    <nd ref='29998903' />
-    <nd ref='29998901' />
-    <nd ref='29998898' />
-    <nd ref='29998895' />
-    <nd ref='29998894' />
-    <nd ref='29998890' />
-    <nd ref='29998954' />
-    <nd ref='29998957' />
-    <nd ref='29998959' />
-    <nd ref='29998962' />
-    <nd ref='29998965' />
-    <nd ref='29998967' />
-    <nd ref='29998969' />
-    <nd ref='29998971' />
-    <nd ref='29998974' />
-    <nd ref='29998978' />
-    <nd ref='29998979' />
-    <nd ref='29998981' />
-    <nd ref='29998983' />
-    <nd ref='29998986' />
-    <nd ref='29998987' />
-    <nd ref='29998990' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636158' timestamp='2007-05-22T00:19:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29003041' />
-    <nd ref='29003031' />
-    <nd ref='29003033' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chetwynd Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8128485' timestamp='2006-10-07T00:25:28+01:00' user='nickw' visible='true'>
-    <nd ref='447391' />
-    <nd ref='306301' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Lovers Walk' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='14506054' timestamp='2007-11-29T22:31:13+00:00' user='nickw' visible='true'>
-    <nd ref='142620760' />
-    <nd ref='142620768' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996911' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957178' />
-    <nd ref='14743125' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150185' timestamp='2007-05-24T00:05:27+01:00' visible='true'>
-    <nd ref='29543383' />
-    <nd ref='29387393' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='O'Connell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152600' timestamp='2007-06-17T22:30:38+01:00' visible='true'>
-    <nd ref='30511424' />
-    <nd ref='30511422' />
-    <nd ref='30510878' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bealieu Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788401' timestamp='2008-01-04T19:29:41+00:00' user='nickw' visible='true'>
-    <nd ref='206162412' />
-    <nd ref='206162624' />
-    <nd ref='206162625' />
-    <nd ref='206162626' />
-    <nd ref='206162627' />
-    <nd ref='206162093' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sussex Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999280' timestamp='2007-10-17T00:35:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20972822' />
-    <nd ref='20972823' />
-    <nd ref='20972818' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Terminus Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539977' timestamp='2007-04-29T20:37:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243548' />
-    <nd ref='28243648' />
-    <nd ref='28243612' />
-    <nd ref='28243614' />
-    <nd ref='28243615' />
-    <nd ref='28243616' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redhill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6139690' timestamp='2007-10-30T11:39:22+00:00' user='Dean Earley' visible='true'>
-    <nd ref='50797942' />
-    <nd ref='50797940' />
-    <nd ref='50797938' />
-    <nd ref='50797936' />
-    <nd ref='52170206' />
-    <nd ref='50797934' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Hoe Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3220726' timestamp='2007-12-13T18:57:36+00:00' visible='true'>
-    <nd ref='15740476' />
-    <nd ref='15740477' />
-    <nd ref='34677881' />
-    <nd ref='15740478' />
-    <nd ref='15740479' />
-    <nd ref='15740480' />
-    <nd ref='15740481' />
-    <nd ref='15740482' />
-    <nd ref='30504266' />
-    <nd ref='30504269' />
-    <nd ref='15740483' />
-    <nd ref='29709217' />
-    <nd ref='29930657' />
-    <nd ref='15740484' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Pitmore Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131454' timestamp='2007-10-16T23:54:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973112' />
-    <nd ref='20973109' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854838' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071415' />
-    <nd ref='13071418' />
-    <nd ref='13071422' />
-    <nd ref='13071423' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kesteven Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269332' timestamp='2007-02-04T22:51:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640015' />
-    <nd ref='25640018' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redmoor Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996915' timestamp='2006-11-10T21:59:07+00:00' user='nickw' visible='true'>
-    <nd ref='20957212' />
-    <nd ref='20957251' />
-    <nd ref='20957185' />
-    <nd ref='20957208' />
-    <nd ref='20957207' />
-    <nd ref='20957181' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lumsden Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586166' timestamp='2007-05-12T15:28:47+01:00' user='nickw' visible='true'>
-    <nd ref='29008945' />
-    <nd ref='29009027' />
-    <nd ref='29009028' />
-    <nd ref='29009029' />
-    <nd ref='29009030' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Okement Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778263' timestamp='2007-11-29T22:31:14+00:00' user='nickw' visible='true'>
-    <nd ref='12591304' />
-    <nd ref='12595073' />
-    <nd ref='12595078' />
-    <nd ref='12595079' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4546182' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true'>
-    <nd ref='635139' />
-    <nd ref='28342640' />
-    <nd ref='28342641' />
-    <nd ref='28341781' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2953360' timestamp='2007-05-13T10:16:38+01:00' user='nickw' visible='true'>
-    <nd ref='254665' />
-    <nd ref='388867' />
-    <nd ref='16963792' />
-    <nd ref='301600' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4558184' timestamp='2007-05-02T23:58:16+01:00' visible='true'>
-    <nd ref='28583067' />
-    <nd ref='28583069' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360459' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575773' />
-    <nd ref='26575775' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='White Star Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556313' timestamp='2007-10-29T08:01:39+00:00' user='nickw' visible='true'>
-    <nd ref='91111564' />
-    <nd ref='91110950' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386802' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781155' />
-    <nd ref='26781166' />
-    <nd ref='26781167' />
-    <nd ref='26781168' />
-    <nd ref='26781169' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mullen Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536154' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179513' />
-    <nd ref='28179514' />
-    <nd ref='28179515' />
-    <nd ref='28179510' />
-    <nd ref='28179511' />
-    <nd ref='28179512' />
-    <nd ref='28179513' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152505' timestamp='2007-06-15T23:09:59+01:00' visible='true'>
-    <nd ref='30410995' />
-    <nd ref='30161107' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818447' timestamp='2007-12-10T19:33:02+00:00' user='sladen' visible='true'>
-    <nd ref='12889434' />
-    <nd ref='12889441' />
-    <nd ref='24924206' />
-    <nd ref='12889440' />
-    <nd ref='12889442' />
-    <nd ref='12889439' />
-    <nd ref='29632198' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='byway' />
-    <tag k='motorcar' v='yes' />
-    <tag k='note' v='byway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15724197' timestamp='2007-12-08T20:11:12+00:00' user='nickw' visible='true'>
-    <nd ref='157204128' />
-    <nd ref='157204136' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pembrey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586233' timestamp='2007-06-26T23:45:24+01:00' user='nickw' visible='true'>
-    <nd ref='29008451' />
-    <nd ref='30956617' />
-    <nd ref='30956625' />
-    <nd ref='29009080' />
-    <nd ref='29009081' />
-    <nd ref='29009082' />
-    <nd ref='29009083' />
-    <nd ref='29009084' />
-    <nd ref='29009085' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690996' timestamp='2007-05-31T22:04:39+01:00' visible='true'>
-    <nd ref='29816554' />
-    <nd ref='29816551' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644816' timestamp='2007-05-24T11:23:10+01:00' visible='true'>
-    <nd ref='29548703' />
-    <nd ref='29548706' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Locksley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556689' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true'>
-    <nd ref='91127563' />
-    <nd ref='91127566' />
-    <nd ref='91127569' />
-    <nd ref='91127572' />
-    <nd ref='91127573' />
-    <nd ref='91127574' />
-    <nd ref='91127575' />
-    <nd ref='91127577' />
-    <nd ref='91127580' />
-    <nd ref='91127581' />
-    <nd ref='91127584' />
-    <nd ref='91127585' />
-    <nd ref='91127587' />
-    <nd ref='91127589' />
-    <nd ref='91127592' />
-    <nd ref='91127593' />
-    <nd ref='91127595' />
-    <nd ref='91127597' />
-    <nd ref='91127601' />
-    <nd ref='91127602' />
-    <nd ref='91127604' />
-    <nd ref='91127606' />
-    <nd ref='91127610' />
-    <nd ref='91127611' />
-    <nd ref='91127613' />
-    <nd ref='91127615' />
-    <nd ref='91127618' />
-    <nd ref='91127619' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Lordsdale Greenway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999133' timestamp='2006-11-12T22:57:28+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254757' />
-    <nd ref='20971149' />
-    <nd ref='20971148' />
-    <nd ref='26004488' />
-    <nd ref='518765' />
-    <nd ref='26782571' />
-    <nd ref='518764' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brintons Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121936' timestamp='2007-10-30T15:48:43+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254960' />
-    <nd ref='254936' />
-    <nd ref='254937' />
-    <nd ref='254407' />
-    <nd ref='243883' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='8150668' timestamp='2007-05-28T19:39:24+01:00' visible='true'>
-    <nd ref='17721060' />
-    <nd ref='17721062' />
-    <nd ref='17721063' />
-    <nd ref='29728885' />
-    <nd ref='29728887' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Causton Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13250787' timestamp='2007-11-18T19:04:32+00:00' user='nickw' visible='true'>
-    <nd ref='21275814' />
-    <nd ref='122316810' />
-    <nd ref='122316814' />
-    <nd ref='122316818' />
-    <nd ref='122316824' />
-    <nd ref='122322753' />
-    <nd ref='122316827' />
-    <nd ref='122316833' />
-    <nd ref='122319006' />
-    <nd ref='122316841' />
-    <nd ref='122316844' />
-    <nd ref='122316848' />
-    <nd ref='122316854' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Waterhouse Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4651180' timestamp='2007-05-25T21:55:45+01:00' visible='true'>
-    <nd ref='29595193' />
-    <nd ref='29595202' />
-    <nd ref='29595185' />
-    <nd ref='29595083' />
-    <nd ref='29595103' />
-    <nd ref='29595188' />
-    <nd ref='29595204' />
-    <nd ref='29595089' />
-    <nd ref='29595159' />
-    <nd ref='29595193' />
-    <tag k='landuse' v='retail' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4019046' timestamp='2006-11-28T16:49:21+00:00' visible='true'>
-    <nd ref='518765' />
-    <nd ref='518767' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Marks Road' />
-  </way>
-  <way id='4539437' timestamp='2007-04-29T19:27:55+01:00' user='Andy Street' visible='true'>
-    <nd ref='28236150' />
-    <nd ref='28236154' />
-    <nd ref='28236157' />
-    <nd ref='28236161' />
-    <nd ref='28236164' />
-    <nd ref='28236168' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Furze Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008603' timestamp='2007-10-29T07:59:21+00:00' user='nickw' visible='true'>
-    <nd ref='21141490' />
-    <nd ref='28372726' />
-    <nd ref='28372776' />
-    <nd ref='28372761' />
-    <nd ref='28372753' />
-    <nd ref='21141491' />
-    <nd ref='91110485' />
-    <nd ref='28372774' />
-    <nd ref='91110950' />
-    <nd ref='91110484' />
-    <nd ref='21141495' />
-    <tag k='highway' v='unclassified' />
-    <tag k='note' v='used NPE for southern end' />
-    <tag k='name' v='Warren Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3910149' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20130894' />
-    <nd ref='20130898' />
-    <nd ref='20130907' />
-    <nd ref='20130912' />
-    <nd ref='20130913' />
-    <nd ref='20130916' />
-    <nd ref='20130921' />
-    <nd ref='20130925' />
-    <nd ref='20130934' />
-    <nd ref='20130926' />
-    <nd ref='20130932' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wilmington Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1929' timestamp='2006-05-22T22:22:36+01:00' user='nickw' visible='true'>
-    <nd ref='596303' />
-    <nd ref='661175' />
-    <nd ref='661176' />
-    <nd ref='661172' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2232' timestamp='2007-08-28T23:32:22+01:00' visible='true'>
-    <nd ref='254672' />
-    <nd ref='36686480' />
-    <nd ref='675830' />
-    <nd ref='675831' />
-    <nd ref='675832' />
-    <nd ref='675835' />
-    <nd ref='675836' />
-    <nd ref='27467476' />
-    <nd ref='675837' />
-    <nd ref='29132939' />
-    <nd ref='675838' />
-    <nd ref='675839' />
-    <nd ref='29133340' />
-    <nd ref='675840' />
-    <nd ref='29133083' />
-    <nd ref='675841' />
-    <nd ref='254544' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Manor Farm Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='11968793' timestamp='2007-11-11T18:09:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='107808618' />
-    <nd ref='107808626' />
-    <nd ref='107808628' />
-    <nd ref='107808646' />
-    <nd ref='107808653' />
-    <nd ref='107808656' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148374' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179469' />
-    <nd ref='28179470' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Copse Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540310' timestamp='2007-04-29T21:09:43+01:00' visible='true'>
-    <nd ref='28194362' />
-    <nd ref='28194363' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Turnstone Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4310887' timestamp='2007-12-10T19:19:31+00:00' user='sladen' visible='true'>
-    <nd ref='26114368' />
-    <nd ref='26114367' />
-    <nd ref='26114366' />
-    <nd ref='26114365' />
-    <nd ref='160233334' />
-    <nd ref='160233335' />
-    <nd ref='160233336' />
-    <nd ref='26114364' />
-    <nd ref='26114363' />
-    <nd ref='26114362' />
-    <nd ref='26114361' />
-    <nd ref='26114360' />
-    <nd ref='160233337' />
-    <nd ref='26114359' />
-    <nd ref='26114358' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Golden Grove' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4363111' timestamp='2007-03-17T20:47:49+00:00' user='nickw' visible='true'>
-    <nd ref='635132' />
-    <nd ref='26593138' />
-    <nd ref='26593136' />
-    <nd ref='26728537' />
-    <nd ref='28346979' />
-    <nd ref='26593139' />
-    <nd ref='26593140' />
-    <nd ref='26593141' />
-    <nd ref='657776' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pinegrove Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726284' timestamp='2007-12-08T20:33:31+00:00' user='nickw' visible='true'>
-    <nd ref='157238284' />
-    <nd ref='157238288' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Forbes Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5780674' timestamp='2007-09-15T19:03:59+01:00' user='mike l' visible='true'>
-    <nd ref='28932239' />
-    <nd ref='45116811' />
-    <nd ref='45116797' />
-    <nd ref='45116818' />
-    <nd ref='50797892' />
-    <nd ref='50797897' />
-    <nd ref='50797898' />
-    <nd ref='50797901' />
-    <nd ref='50797904' />
-    <nd ref='50797906' />
-    <nd ref='50797909' />
-    <nd ref='50797911' />
-    <nd ref='50797913' />
-    <nd ref='50797915' />
-    <nd ref='50797917' />
-    <nd ref='50797920' />
-    <nd ref='50797922' />
-    <nd ref='50797926' />
-    <nd ref='50797931' />
-    <nd ref='50797934' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sylvan Drive' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='15724395' timestamp='2007-12-08T20:12:41+00:00' user='nickw' visible='true'>
-    <nd ref='157206239' />
-    <nd ref='153331882' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687594' timestamp='2007-05-30T22:22:29+01:00' user='nickw' visible='true'>
-    <nd ref='29796775' />
-    <nd ref='29796779' />
-    <nd ref='29796766' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bitterne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2148182' timestamp='2007-10-16T17:22:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9267992' />
-    <nd ref='9267991' />
-    <nd ref='21420432' />
-    <nd ref='9267990' />
-    <nd ref='9267989' />
-    <nd ref='14744414' />
-    <nd ref='9267988' />
-    <nd ref='25592563' />
-    <nd ref='20966252' />
-    <nd ref='20966253' />
-    <nd ref='9267987' />
-    <nd ref='9267986' />
-    <nd ref='530517' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8137073' timestamp='2007-10-16T20:14:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254674' />
-    <nd ref='9726312' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539540' timestamp='2007-04-29T19:42:14+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237228' />
-    <nd ref='28237230' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Torrington Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215237' timestamp='2007-01-10T00:20:44+00:00' user='nickw' visible='true'>
-    <nd ref='21636802' />
-    <nd ref='24984752' />
-    <nd ref='24984749' />
-    <nd ref='24984751' />
-    <nd ref='24984672' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fitzroy Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725429' timestamp='2007-12-08T20:23:19+00:00' user='nickw' visible='true'>
-    <nd ref='157222323' />
-    <nd ref='50774731' />
-    <nd ref='157222328' />
-    <nd ref='157222331' />
-    <nd ref='50774726' />
-    <nd ref='157222334' />
-    <nd ref='157222338' />
-    <nd ref='50774721' />
-    <nd ref='157222343' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Matheson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2147413' timestamp='2007-05-29T22:14:43+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='10216415' />
-    <nd ref='10216417' />
-    <nd ref='10217642' />
-    <nd ref='13071248' />
-    <nd ref='10217640' />
-    <nd ref='254443' />
-    <nd ref='25305500' />
-    <nd ref='254394' />
-    <nd ref='254395' />
-    <nd ref='254396' />
-    <nd ref='13071235' />
-    <nd ref='29764415' />
-    <nd ref='254398' />
-    <nd ref='13071234' />
-    <nd ref='254399' />
-    <nd ref='13071233' />
-    <nd ref='13071232' />
-    <nd ref='254386' />
-    <nd ref='254387' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Mousehole Lane' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10567203' timestamp='2007-10-29T15:11:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29548707' />
-    <nd ref='29387394' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Owen Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260293' timestamp='2006-05-22T22:24:58+01:00' user='nickw' visible='true'>
-    <nd ref='608170' />
-    <nd ref='21598842' />
-    <nd ref='26728551' />
-    <nd ref='26781161' />
-    <nd ref='21624990' />
-    <nd ref='26728552' />
-    <nd ref='608171' />
-    <nd ref='26728556' />
-    <nd ref='608176' />
-    <nd ref='608178' />
-    <nd ref='26728571' />
-    <nd ref='608179' />
-    <nd ref='608180' />
-    <nd ref='3915752' />
-    <nd ref='26781190' />
-    <nd ref='254465' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Radstock Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4539973' timestamp='2007-04-29T20:37:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='422979' />
-    <nd ref='28243586' />
-    <nd ref='28243587' />
-    <nd ref='28243589' />
-    <nd ref='28243590' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glencarron Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569974' timestamp='2007-05-05T09:03:37+01:00' user='nickw' visible='true'>
-    <nd ref='28830649' />
-    <nd ref='28830578' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Trent Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541420' timestamp='2007-04-29T23:09:35+01:00' user='Andy Street' visible='true'>
-    <nd ref='28259908' />
-    <nd ref='28259918' />
-    <nd ref='28259920' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079294' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636786' />
-    <nd ref='21636787' />
-    <nd ref='21636734' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Links View Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536668' timestamp='2007-11-25T22:27:52+00:00' user='southglos' visible='true'>
-    <nd ref='28180545' />
-    <nd ref='28194493' />
-    <nd ref='28194494' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Laurels' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2651682' timestamp='2006-07-29T14:14:02+01:00' user='nickw' visible='true'>
-    <nd ref='388862' />
-    <nd ref='301595' />
-    <nd ref='329813' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8124973' timestamp='2007-10-16T17:18:12+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25303005' />
-    <nd ref='254688' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1925' timestamp='2006-06-11T00:46:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254469' />
-    <nd ref='25640015' />
-    <nd ref='254448' />
-    <nd ref='25640019' />
-    <nd ref='25640020' />
-    <nd ref='25640021' />
-    <nd ref='254449' />
-    <nd ref='25640023' />
-    <nd ref='25640022' />
-    <nd ref='25640024' />
-    <nd ref='254450' />
-    <nd ref='661191' />
-    <nd ref='25640026' />
-    <nd ref='661192' />
-    <nd ref='25640027' />
-    <nd ref='254674' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='abutters' v='residential' />
-    <tag k='name' v='Athelstan Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4677647' timestamp='2007-10-16T02:43:36+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29704317' />
-    <nd ref='29706972' />
-    <nd ref='29706973' />
-    <nd ref='29706971' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Birch Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548030' timestamp='2007-05-01T10:05:42+01:00' visible='true'>
-    <nd ref='28372803' />
-    <nd ref='28372804' />
-    <nd ref='28372805' />
-    <nd ref='28372806' />
-    <nd ref='28372807' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Warren Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605562' timestamp='2007-05-16T00:37:07+01:00' visible='true'>
-    <nd ref='29145093' />
-    <nd ref='29145094' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661851' timestamp='2007-05-26T20:15:57+01:00' visible='true'>
-    <nd ref='29632839' />
-    <nd ref='29632824' />
-    <nd ref='29632825' />
-    <nd ref='29632827' />
-    <nd ref='29632828' />
-    <nd ref='29632831' />
-    <nd ref='29632834' />
-    <nd ref='29632837' />
-    <nd ref='29632839' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4405499' timestamp='2007-03-31T20:34:55+01:00' user='nickw' visible='true'>
-    <nd ref='20136217' />
-    <nd ref='20136218' />
-    <nd ref='20136219' />
-    <nd ref='20136221' />
-    <nd ref='20136222' />
-    <nd ref='20136223' />
-    <nd ref='254472' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chichester Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4495486' timestamp='2007-05-16T20:05:40+01:00' visible='true'>
-    <nd ref='27558571' />
-    <nd ref='27558575' />
-    <nd ref='27558579' />
-    <nd ref='29163388' />
-    <nd ref='27558586' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260586' timestamp='2006-05-22T22:29:14+01:00' user='nickw' visible='true'>
-    <nd ref='325698' />
-    <nd ref='319620' />
-    <nd ref='319619' />
-    <nd ref='17979921' />
-    <nd ref='319609' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Earls Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4727726' timestamp='2007-06-09T19:48:46+01:00' user='nickw' visible='true'>
-    <nd ref='30124663' />
-    <nd ref='30124661' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540329' timestamp='2007-04-29T21:09:58+01:00' visible='true'>
-    <nd ref='28194401' />
-    <nd ref='28194402' />
-    <nd ref='28194403' />
-    <nd ref='28194405' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wryneck Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13639022' timestamp='2007-12-07T13:24:50+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='125580524' />
-    <nd ref='125580526' />
-    <nd ref='125580528' />
-    <nd ref='125580530' />
-    <nd ref='125580531' />
-    <nd ref='125580532' />
-    <nd ref='125580533' />
-    <nd ref='125580534' />
-    <nd ref='125580524' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4535835' timestamp='2007-04-29T01:04:33+01:00' visible='true'>
-    <nd ref='28173978' />
-    <nd ref='28173984' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaulieu Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639364' timestamp='2007-05-13T10:16:02+01:00' user='nickw' visible='true'>
-    <nd ref='254527' />
-    <nd ref='20957220' />
-    <nd ref='20957221' />
-    <nd ref='20957222' />
-    <nd ref='20957223' />
-    <nd ref='254528' />
-    <nd ref='254529' />
-    <nd ref='254833' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Howard Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4586117' timestamp='2007-05-12T15:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='29008381' />
-    <nd ref='29008382' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Adur Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4549778' timestamp='2007-08-21T00:40:59+01:00' user='HenryDCase' visible='true'>
-    <nd ref='28388970' />
-    <nd ref='28388967' />
-    <nd ref='28388968' />
-    <nd ref='28388969' />
-    <nd ref='28388970' />
-    <tag k='leisure' v='common' />
-    <tag k='name' v='Grantham Green' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4558326' timestamp='2007-05-03T00:08:31+01:00' visible='true'>
-    <nd ref='28583002' />
-    <nd ref='28582992' />
-    <nd ref='28582993' />
-    <nd ref='28582996' />
-    <nd ref='28582998' />
-    <nd ref='28583003' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Walthorn Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875598' timestamp='2007-07-09T12:19:45+01:00' visible='true'>
-    <nd ref='25440794' />
-    <nd ref='25440796' />
-    <nd ref='8596808' />
-    <nd ref='27496134' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4405503' timestamp='2007-06-02T19:04:05+01:00' visible='true'>
-    <nd ref='13071431' />
-    <nd ref='26945339' />
-    <nd ref='29796835' />
-    <nd ref='20136214' />
-    <nd ref='29872350' />
-    <nd ref='28539402' />
-    <nd ref='28232580' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Shales Road' />
-    <tag k='complete' v='no' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818443' timestamp='2008-01-01T18:33:55+00:00' user='Milliams' visible='true'>
-    <nd ref='12889426' />
-    <nd ref='201643747' />
-    <nd ref='2417454' />
-    <nd ref='201642810' />
-    <nd ref='2417453' />
-    <nd ref='201644178' />
-    <nd ref='2417455' />
-    <nd ref='201644179' />
-    <nd ref='12889426' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </way>
-  <way id='4077057' timestamp='2007-10-08T20:15:47+01:00' user='alfabet' visible='true'>
-    <nd ref='305561' />
-    <nd ref='305562' />
-    <nd ref='305563' />
-    <nd ref='305564' />
-    <nd ref='305565' />
-    <nd ref='305567' />
-    <nd ref='21600604' />
-    <nd ref='21600603' />
-    <nd ref='21600602' />
-    <nd ref='21600601' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Baddesley Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='5368788' timestamp='2007-09-01T18:19:08+01:00' visible='true'>
-    <nd ref='310901' />
-    <nd ref='413141' />
-    <nd ref='413142' />
-    <nd ref='402753' />
-    <nd ref='9285003' />
-    <nd ref='395773' />
-    <nd ref='9285002' />
-    <nd ref='310850' />
-    <nd ref='38459899' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Southcliff Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999320' timestamp='2007-11-02T14:14:23+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='20973089' />
-    <nd ref='8596766' />
-    <nd ref='8596756' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.4c' />
-  </way>
-  <way id='4545704' timestamp='2007-04-30T20:40:36+01:00' visible='true'>
-    <nd ref='28339118' />
-    <nd ref='28339142' />
-    <nd ref='28339144' />
-    <nd ref='28339145' />
-    <nd ref='28339163' />
-    <nd ref='28339164' />
-    <nd ref='28339165' />
-    <nd ref='28339167' />
-    <nd ref='28339152' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cable Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15944969' timestamp='2007-12-10T19:31:28+00:00' user='sladen' visible='true'>
-    <nd ref='25932495' />
-    <nd ref='160250719' />
-    <tag k='aeroway' v='taxiway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4360455' timestamp='2007-03-16T21:52:45+00:00' user='nickw' visible='true'>
-    <nd ref='26575770' />
-    <nd ref='26575722' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Carpathia Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558179' timestamp='2007-05-02T23:58:15+01:00' visible='true'>
-    <nd ref='28583026' />
-    <nd ref='28583028' />
-    <nd ref='28583027' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Springford Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125051' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071299' />
-    <nd ref='13071297' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='MacArthur Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074105' timestamp='2006-12-13T20:09:44+00:00' user='nickw' visible='true'>
-    <nd ref='21561544' />
-    <nd ref='21561547' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Torquay Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079286' timestamp='2007-05-22T00:20:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21636758' />
-    <nd ref='21636755' />
-    <nd ref='21636754' />
-    <nd ref='21636753' />
-    <nd ref='24984742' />
-    <nd ref='21636752' />
-    <nd ref='29464308' />
-    <nd ref='21636765' />
-    <nd ref='21636751' />
-    <nd ref='21636750' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4405515' timestamp='2007-03-31T20:34:57+01:00' user='nickw' visible='true'>
-    <nd ref='26945412' />
-    <nd ref='26945413' />
-    <nd ref='18500678' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9676788' timestamp='2007-10-17T00:35:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464263' />
-    <nd ref='29464265' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Horder Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556193' timestamp='2007-10-29T07:50:31+00:00' user='nickw' visible='true'>
-    <nd ref='91109263' />
-    <nd ref='91109265' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Seagarth Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5041387' timestamp='2007-12-14T21:43:15+00:00' user='nickw' visible='true'>
-    <nd ref='21600524' />
-    <nd ref='33718241' />
-    <nd ref='21600525' />
-    <nd ref='21600526' />
-    <nd ref='169423557' />
-    <nd ref='21600527' />
-    <nd ref='21141490' />
-    <nd ref='21141489' />
-    <nd ref='21141488' />
-    <nd ref='29871068' />
-    <nd ref='21141487' />
-    <nd ref='325665' />
-    <nd ref='169435832' />
-    <nd ref='325666' />
-    <nd ref='325667' />
-    <nd ref='28246069' />
-    <nd ref='169435788' />
-    <nd ref='325668' />
-    <nd ref='28583054' />
-    <nd ref='325669' />
-    <nd ref='325670' />
-    <nd ref='28246071' />
-    <nd ref='325671' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Coxford Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4074122' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561536' />
-    <nd ref='21561572' />
-    <nd ref='21561529' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hyde Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540759' timestamp='2007-06-02T19:30:45+01:00' visible='true'>
-    <nd ref='28249978' />
-    <nd ref='28249979' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Royal Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5653705' timestamp='2007-09-05T18:30:26+01:00' user='mike l' visible='true'>
-    <nd ref='42141693' />
-    <nd ref='42141688' />
-    <nd ref='42189114' />
-    <nd ref='42189110' />
-    <nd ref='42141684' />
-    <tag k='access' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687598' timestamp='2007-05-30T22:22:31+01:00' user='nickw' visible='true'>
-    <nd ref='29796782' />
-    <nd ref='29796783' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bramble Mews' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1672' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='423287' />
-    <nd ref='423288' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Northcote Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2920977' timestamp='2007-06-12T00:08:28+01:00' user='nickw' visible='true'>
-    <nd ref='10537335' />
-    <nd ref='30229462' />
-    <nd ref='13565095' />
-    <nd ref='13565094' />
-    <nd ref='13565093' />
-    <nd ref='30229457' />
-    <nd ref='30229458' />
-    <nd ref='30229459' />
-    <nd ref='30229460' />
-    <nd ref='30229461' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Torridge Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8120212' timestamp='2007-12-10T19:40:35+00:00' user='sladen' visible='true'>
-    <nd ref='30161124' />
-    <nd ref='160267785' />
-    <nd ref='160267786' />
-    <nd ref='30161125' />
-    <nd ref='30161126' />
-    <nd ref='160269151' />
-    <nd ref='30161127' />
-    <nd ref='30161128' />
-    <nd ref='160269280' />
-    <nd ref='30161129' />
-    <nd ref='30161358' />
-    <nd ref='160269527' />
-    <nd ref='30161359' />
-    <nd ref='30161360' />
-    <nd ref='30161361' />
-    <nd ref='30161362' />
-    <nd ref='30161364' />
-    <nd ref='30161365' />
-    <nd ref='30161366' />
-    <nd ref='30161370' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='railway' v='rail' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='19788500' timestamp='2008-01-04T19:34:27+00:00' user='nickw' visible='true'>
-    <nd ref='206163282' />
-    <nd ref='206163283' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Templar's Mede' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2350949' timestamp='2007-11-11T18:09:51+00:00' user='Dean Earley' visible='true'>
-    <nd ref='9727812' />
-    <nd ref='9727808' />
-    <nd ref='9727809' />
-    <nd ref='107808618' />
-    <nd ref='9727810' />
-    <nd ref='9727811' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578586' timestamp='2006-10-06T23:52:02+01:00' user='Dean Earley' visible='true'>
-    <nd ref='305218' />
-    <nd ref='17723046' />
-    <nd ref='305219' />
-    <nd ref='21178431' />
-    <nd ref='305220' />
-    <nd ref='305221' />
-    <nd ref='17723045' />
-    <nd ref='305218' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854827' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071339' />
-    <nd ref='13071340' />
-    <nd ref='13071327' />
-    <nd ref='13071373' />
-    <nd ref='13071374' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rossington Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687326' timestamp='2007-05-30T21:46:53+01:00' user='nickw' visible='true'>
-    <nd ref='29795005' />
-    <nd ref='29794815' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tenby Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800339' timestamp='2008-02-03T06:13:34+00:00' user='sladen' visible='true'>
-    <nd ref='245148739' />
-    <nd ref='245147520' />
-    <nd ref='245149885' />
-    <nd ref='245147925' />
-    <nd ref='245148038' />
-    <nd ref='245148562' />
-    <nd ref='245149627' />
-    <nd ref='245149449' />
-    <nd ref='245148640' />
-    <nd ref='245148949' />
-    <nd ref='245148738' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='track' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4363107' timestamp='2007-03-17T20:47:49+00:00' user='nickw' visible='true'>
-    <nd ref='26593134' />
-    <nd ref='26593133' />
-    <nd ref='28236195' />
-    <nd ref='655065' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635654' timestamp='2007-12-10T19:19:39+00:00' user='sladen' visible='true'>
-    <nd ref='29461222' />
-    <nd ref='29461223' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Winton Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='15724350' timestamp='2007-12-08T20:12:21+00:00' user='nickw' visible='true'>
-    <nd ref='157205669' />
-    <nd ref='157204125' />
-    <nd ref='157205675' />
-    <nd ref='157205679' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blackbushe Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084235' timestamp='2006-09-02T13:46:13+01:00' user='Dean Earley' visible='true'>
-    <nd ref='518806' />
-    <nd ref='27434188' />
-    <nd ref='423288' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bowden Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4300655' timestamp='2007-02-18T20:20:21+00:00' visible='true'>
-    <nd ref='26001629' />
-    <nd ref='26001571' />
-    <nd ref='26001570' />
-    <nd ref='26001569' />
-    <nd ref='26001568' />
-    <nd ref='26001628' />
-    <tag k='highway' v='service' />
-  </way>
-  <way id='4677222' timestamp='2007-05-28T10:50:14+01:00' visible='true'>
-    <nd ref='29704619' />
-    <nd ref='29704620' />
-    <nd ref='29704602' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Darwin Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150113' timestamp='2007-10-16T02:44:14+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29530521' />
-    <nd ref='29530522' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Allbrook Knoll' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9674784' timestamp='2007-10-16T23:54:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973113' />
-    <nd ref='20973098' />
-    <nd ref='8596810' />
-    <nd ref='8596803' />
-    <nd ref='8596791' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3102401' timestamp='2007-12-10T20:56:44+00:00' user='sladen' visible='true'>
-    <nd ref='254613' />
-    <nd ref='160406180' />
-    <nd ref='160406181' />
-    <nd ref='160406182' />
-    <nd ref='254614' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4558322' timestamp='2007-05-03T00:08:29+01:00' visible='true'>
-    <nd ref='28584178' />
-    <nd ref='28584194' />
-    <nd ref='28584210' />
-    <nd ref='28584191' />
-    <nd ref='28584180' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Longleat Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135239' timestamp='2007-10-29T15:43:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='24924287' />
-    <nd ref='30290776' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4482416' timestamp='2007-04-19T23:33:26+01:00' visible='true'>
-    <nd ref='423285' />
-    <nd ref='20964738' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2573937' timestamp='2006-07-24T21:05:01+01:00' user='nickw' visible='true'>
-    <nd ref='11419640' />
-    <nd ref='11419676' />
-    <nd ref='21275761' />
-    <nd ref='21636938' />
-    <nd ref='21636940' />
-    <nd ref='11419683' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Grove Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4209533' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='24924093' />
-    <nd ref='24924094' />
-    <nd ref='24924095' />
-    <nd ref='21689051' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788477' timestamp='2008-01-04T19:32:09+00:00' user='nickw' visible='true'>
-    <nd ref='206163098' />
-    <nd ref='206163100' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Devon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13252476' timestamp='2007-11-18T19:15:52+00:00' user='nickw' visible='true'>
-    <nd ref='122342982' />
-    <nd ref='122342994' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Regents Park Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677309' timestamp='2007-06-17T22:25:20+01:00' visible='true'>
-    <nd ref='29512143' />
-    <nd ref='30508722' />
-    <nd ref='29512139' />
-    <nd ref='29704601' />
-    <nd ref='30508354' />
-    <nd ref='29704596' />
-    <nd ref='29512136' />
-    <nd ref='29929616' />
-    <nd ref='30510872' />
-    <nd ref='29512134' />
-    <nd ref='29929406' />
-    <nd ref='30507141' />
-    <nd ref='29704541' />
-    <nd ref='29928589' />
-    <nd ref='30506823' />
-    <nd ref='25296292' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='32' />
-    <tag k='name' v='Shakespeare Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152201' timestamp='2007-06-11T22:32:16+01:00' visible='true'>
-    <nd ref='30226996' />
-    <nd ref='30226210' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5946806' timestamp='2007-09-10T23:28:38+01:00' visible='true'>
-    <nd ref='48950453' />
-    <nd ref='25947170' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1880964' timestamp='2007-08-12T23:11:01+01:00' user='Edward' visible='true'>
-    <nd ref='518800' />
-    <nd ref='518799' />
-    <nd ref='27440017' />
-    <nd ref='518798' />
-    <nd ref='518797' />
-    <nd ref='518796' />
-    <nd ref='27467473' />
-    <nd ref='254671' />
-    <nd ref='518794' />
-    <nd ref='29001328' />
-    <nd ref='29001332' />
-    <nd ref='4942415' />
-    <nd ref='29145261' />
-    <nd ref='518793' />
-    <nd ref='29001318' />
-    <nd ref='518792' />
-    <nd ref='29001324' />
-    <nd ref='4942325' />
-    <nd ref='29001314' />
-    <nd ref='4942221' />
-    <nd ref='518790' />
-    <nd ref='8084979' />
-    <nd ref='658473' />
-    <nd ref='29145248' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Priory Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4061552' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='388885' />
-    <nd ref='24984776' />
-    <nd ref='388886' />
-    <nd ref='388887' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386797' timestamp='2007-03-25T18:42:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781147' />
-    <nd ref='26781148' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tranby Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121524' timestamp='2006-05-22T22:39:21+01:00' user='nickw' visible='true'>
-    <nd ref='2073383' />
-    <nd ref='2073390' />
-    <nd ref='2073397' />
-    <nd ref='2073407' />
-    <nd ref='2073423' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Crescent' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4074134' timestamp='2006-12-13T20:19:51+00:00' user='nickw' visible='true'>
-    <nd ref='21561785' />
-    <nd ref='21561792' />
-    <nd ref='21561537' />
-    <nd ref='21561791' />
-    <nd ref='254773' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sydney Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9650678' timestamp='2007-10-16T17:22:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='12889437' />
-    <nd ref='530524' />
-    <nd ref='12889436' />
-    <nd ref='12889435' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3987530' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831115' />
-    <nd ref='20831095' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Amoy Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15451502' timestamp='2007-12-06T20:46:08+00:00' user='nickw' visible='true'>
-    <nd ref='153334845' />
-    <nd ref='153334880' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Menzies Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819439' timestamp='2006-10-23T21:01:12+01:00' user='nickw' visible='true'>
-    <nd ref='19227251' />
-    <nd ref='19227253' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749650' timestamp='2007-06-13T09:33:15+01:00' visible='true'>
-    <nd ref='30291046' />
-    <nd ref='30291047' />
-    <nd ref='30291048' />
-    <nd ref='30291049' />
-    <nd ref='30291050' />
-    <nd ref='30291051' />
-    <nd ref='30291052' />
-    <nd ref='30291053' />
-    <nd ref='30291046' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123256' timestamp='2007-09-25T13:11:17+01:00' visible='true'>
-    <nd ref='254434' />
-    <nd ref='14727985' />
-    <nd ref='21689142' />
-    <nd ref='21689144' />
-    <nd ref='14727970' />
-    <nd ref='254435' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Portswood Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4074869' timestamp='2006-12-14T13:53:17+00:00' user='David Currie' visible='true'>
-    <nd ref='21579415' />
-    <nd ref='21579414' />
-    <nd ref='21613440' />
-    <nd ref='21579416' />
-    <nd ref='21579417' />
-    <nd ref='21579418' />
-    <nd ref='21579419' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pilgrims Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540963' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252929' />
-    <nd ref='28252928' />
-    <nd ref='28252927' />
-    <nd ref='28252926' />
-    <nd ref='28252923' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Melville Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585180' timestamp='2007-05-12T09:40:25+01:00' user='nickw' visible='true'>
-    <nd ref='29001332' />
-    <nd ref='29001333' />
-    <nd ref='29001334' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pettinger Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151939' timestamp='2007-06-13T09:30:28+01:00' visible='true'>
-    <nd ref='30290793' />
-    <nd ref='30290749' />
-    <nd ref='30290750' />
-    <nd ref='30290751' />
-    <nd ref='30290752' />
-    <nd ref='30290754' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Woodpecker Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999316' timestamp='2006-11-13T00:42:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20973095' />
-    <nd ref='20973090' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643763' timestamp='2007-05-24T00:05:31+01:00' visible='true'>
-    <nd ref='29387393' />
-    <nd ref='29543384' />
-    <nd ref='29387395' />
-    <nd ref='29387396' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Scott Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701917' timestamp='2007-06-03T16:02:02+01:00' visible='true'>
-    <nd ref='29914194' />
-    <nd ref='29914197' />
-    <nd ref='29914201' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kenilworth Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546154' timestamp='2007-04-30T22:13:57+01:00' user='nickw' visible='true'>
-    <nd ref='28342530' />
-    <nd ref='28230966' />
-    <nd ref='28342550' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='some signs call it Cornel Road, others Cornell Road. Don't ask me why...' />
-    <tag k='name' v='Cornel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9651712' timestamp='2007-10-29T15:11:33+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254916' />
-    <nd ref='21092033' />
-    <nd ref='87228250' />
-    <nd ref='87239145' />
-    <nd ref='87239966' />
-    <nd ref='66583518' />
-    <nd ref='66583519' />
-    <nd ref='21092040' />
-    <nd ref='27021692' />
-    <nd ref='91126048' />
-    <nd ref='254917' />
-    <nd ref='91119001' />
-    <nd ref='27021693' />
-    <nd ref='27021694' />
-    <nd ref='27021695' />
-    <nd ref='91115439' />
-    <nd ref='91115432' />
-    <nd ref='27021710' />
-    <nd ref='254918' />
-    <nd ref='14567154' />
-    <tag k='ref' v='A3057' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4074149' timestamp='2006-12-13T20:21:47+00:00' user='nickw' visible='true'>
-    <nd ref='21561841' />
-    <nd ref='650774' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10517683' timestamp='2007-10-28T20:31:45+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90588898' />
-    <nd ref='90588899' />
-    <nd ref='90588900' />
-    <nd ref='90588901' />
-    <nd ref='90588898' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='8152185' timestamp='2007-06-11T21:58:23+01:00' visible='true'>
-    <nd ref='30223553' />
-    <nd ref='30223554' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Breamore Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152657' timestamp='2007-06-17T21:57:31+01:00' visible='true'>
-    <nd ref='30505943' />
-    <nd ref='30505944' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oak Tree Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773695' timestamp='2007-06-17T22:30:36+01:00' visible='true'>
-    <nd ref='30510885' />
-    <nd ref='30511430' />
-    <nd ref='30511431' />
-    <nd ref='30511433' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773445' timestamp='2007-06-17T22:03:39+01:00' visible='true'>
-    <nd ref='30506811' />
-    <nd ref='30506809' />
-    <nd ref='30506808' />
-    <nd ref='30506806' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151508' timestamp='2007-06-03T20:50:23+01:00' visible='true'>
-    <nd ref='29925911' />
-    <nd ref='29925910' />
-    <nd ref='29925906' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harlaxton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196530' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='21600586' />
-    <nd ref='24668297' />
-    <nd ref='24668144' />
-    <nd ref='24668387' />
-    <nd ref='24668066' />
-    <nd ref='24668380' />
-    <nd ref='24668287' />
-    <nd ref='24668232' />
-    <nd ref='24668099' />
-    <nd ref='24668005' />
-    <nd ref='24668356' />
-    <nd ref='24668253' />
-    <nd ref='24668078' />
-    <nd ref='24667950' />
-    <nd ref='24668345' />
-    <nd ref='24668393' />
-    <nd ref='24668335' />
-    <nd ref='24668194' />
-    <nd ref='24668336' />
-    <nd ref='24668270' />
-    <nd ref='24668343' />
-    <nd ref='24668082' />
-    <nd ref='24668359' />
-    <nd ref='24667948' />
-    <nd ref='24668084' />
-    <nd ref='24668277' />
-    <nd ref='24668350' />
-    <nd ref='24668274' />
-    <nd ref='24668309' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Shannon Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540319' timestamp='2007-04-29T21:09:46+01:00' visible='true'>
-    <nd ref='28194376' />
-    <nd ref='28194377' />
-    <nd ref='28194378' />
-    <nd ref='28194380' />
-    <nd ref='28194381' />
-    <nd ref='28194382' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Goldcrest Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8137928' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639991' />
-    <nd ref='25639992' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lower Mortimer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679912' timestamp='2007-05-28T19:39:23+01:00' visible='true'>
-    <nd ref='29728877' />
-    <nd ref='29728878' />
-    <nd ref='29728879' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Toynbee Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148421' timestamp='2007-06-15T23:10:01+01:00' visible='true'>
-    <nd ref='28339118' />
-    <nd ref='28339140' />
-    <nd ref='28223264' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Blenheim Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4638081' timestamp='2007-05-22T12:23:43+01:00' visible='true'>
-    <nd ref='29491395' />
-    <nd ref='29491396' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2956545' timestamp='2006-08-23T01:17:16+01:00' user='dmgroom' visible='true'>
-    <nd ref='13885364' />
-    <nd ref='13885363' />
-    <nd ref='301554' />
-    <nd ref='13885349' />
-    <nd ref='20971158' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Queensway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703330' timestamp='2007-06-03T20:46:02+01:00' visible='true'>
-    <nd ref='29925688' />
-    <nd ref='29925687' />
-    <nd ref='29925390' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360463' timestamp='2007-05-21T23:53:42+01:00' user='nickw' visible='true'>
-    <nd ref='26575780' />
-    <nd ref='29462160' />
-    <nd ref='29462158' />
-    <nd ref='26575781' />
-    <nd ref='26575782' />
-    <nd ref='26575783' />
-    <nd ref='26575784' />
-    <nd ref='26575729' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='King Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694222' timestamp='2007-06-01T21:00:16+01:00' visible='true'>
-    <nd ref='29839509' />
-    <nd ref='29839511' />
-    <nd ref='29839513' />
-    <nd ref='29839514' />
-    <nd ref='29839509' />
-    <tag k='leisure' v='playground' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3044461' timestamp='2007-10-30T13:48:41+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='13704642' />
-    <nd ref='13704644' />
-    <nd ref='13704650' />
-    <nd ref='13704661' />
-    <nd ref='13704662' />
-    <nd ref='13704663' />
-    <nd ref='90681709' />
-    <nd ref='13704664' />
-    <nd ref='90681708' />
-    <nd ref='13704719' />
-    <nd ref='13704762' />
-    <nd ref='13704775' />
-    <nd ref='13704776' />
-    <nd ref='13704777' />
-    <nd ref='13704778' />
-    <nd ref='13704779' />
-    <nd ref='13704780' />
-    <nd ref='13704781' />
-    <nd ref='13704782' />
-    <nd ref='92482290' />
-    <nd ref='92482291' />
-    <nd ref='92482292' />
-    <nd ref='92482293' />
-    <nd ref='92482294' />
-    <nd ref='92482296' />
-    <nd ref='92482298' />
-    <nd ref='92482299' />
-    <nd ref='92482300' />
-    <nd ref='92482479' />
-    <nd ref='92482480' />
-    <nd ref='92482481' />
-    <nd ref='90677144' />
-    <nd ref='13704893' />
-    <nd ref='87800147' />
-    <nd ref='87800148' />
-    <nd ref='87800149' />
-    <nd ref='87800150' />
-    <nd ref='87800151' />
-    <nd ref='13704894' />
-    <nd ref='87800152' />
-    <nd ref='13704895' />
-    <nd ref='13704896' />
-    <nd ref='13704897' />
-    <nd ref='13704898' />
-    <nd ref='13704899' />
-    <nd ref='13704900' />
-    <nd ref='13704901' />
-    <nd ref='13704902' />
-    <nd ref='13704903' />
-    <nd ref='13704904' />
-    <nd ref='13704905' />
-    <nd ref='13704906' />
-    <nd ref='13704907' />
-    <nd ref='13704908' />
-    <nd ref='13704909' />
-    <nd ref='13704910' />
-    <nd ref='13704911' />
-    <nd ref='13704912' />
-    <nd ref='13704913' />
-    <tag k='natural' v='coastline' />
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='3088264' timestamp='2008-02-03T06:22:04+00:00' user='sladen' visible='true'>
-    <nd ref='245152510' />
-    <nd ref='34278580' />
-    <nd ref='245152655' />
-    <nd ref='14726178' />
-    <nd ref='14726177' />
-    <nd ref='301582' />
-    <nd ref='14726185' />
-    <nd ref='301583' />
-    <nd ref='14726176' />
-    <nd ref='301584' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='name' v='Saint Andrew's Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8151445' timestamp='2007-06-03T16:02:02+01:00' visible='true'>
-    <nd ref='29704333' />
-    <nd ref='29914189' />
-    <nd ref='29914192' />
-    <nd ref='29914205' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kenilworth Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604398' timestamp='2007-05-15T20:24:23+01:00' user='nickw' visible='true'>
-    <nd ref='29132669' />
-    <nd ref='29132670' />
-    <nd ref='29132671' />
-    <nd ref='27467478' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4379656' timestamp='2007-03-23T22:53:34+00:00' user='nickw' visible='true'>
-    <nd ref='26727674' />
-    <nd ref='26728564' />
-    <nd ref='26728565' />
-    <nd ref='26728566' />
-    <nd ref='26728567' />
-    <nd ref='608180' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119863' timestamp='2006-06-04T00:30:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='530605' />
-    <nd ref='254666' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Church Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4732333' timestamp='2007-06-10T18:18:34+01:00' visible='true'>
-    <nd ref='30161248' />
-    <nd ref='30161249' />
-    <nd ref='30161250' />
-    <nd ref='30161251' />
-    <nd ref='30161252' />
-    <nd ref='30161246' />
-    <nd ref='30161247' />
-    <nd ref='30161248' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580492' timestamp='2007-09-12T23:17:33+01:00' user='mike l' visible='true'>
-    <nd ref='28935765' />
-    <nd ref='28935761' />
-    <nd ref='28935762' />
-    <nd ref='28935763' />
-    <nd ref='28935764' />
-    <nd ref='28935766' />
-    <tag k='key' v='Manston Court' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8149928' timestamp='2007-07-01T22:15:25+01:00' visible='true'>
-    <nd ref='27513797' />
-    <nd ref='30410992' />
-    <nd ref='29391632' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Grantham road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061527' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='21507755' />
-    <nd ref='21507752' />
-    <nd ref='21507751' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Highcrown Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1661' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387827' />
-    <nd ref='387828' />
-    <nd ref='387829' />
-    <nd ref='387830' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Kitchener Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4061540' timestamp='2007-05-22T00:20:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21507782' />
-    <nd ref='29464302' />
-    <nd ref='21507781' />
-    <nd ref='21507780' />
-    <nd ref='21507783' />
-    <nd ref='21507784' />
-    <nd ref='21507785' />
-    <nd ref='29464301' />
-    <nd ref='21507786' />
-    <nd ref='21507787' />
-    <nd ref='29464300' />
-    <nd ref='21507788' />
-    <nd ref='21507789' />
-    <nd ref='21507790' />
-    <nd ref='29464299' />
-    <nd ref='21507791' />
-    <nd ref='21507793' />
-    <nd ref='29464298' />
-    <nd ref='21507794' />
-    <nd ref='21507795' />
-    <nd ref='29464297' />
-    <nd ref='21507734' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Wood Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574121' timestamp='2007-12-06T20:43:05+00:00' user='nickw' visible='true'>
-    <nd ref='28874045' />
-    <nd ref='28874071' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Outer Circle' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151068' timestamp='2007-05-31T22:15:50+01:00' visible='true'>
-    <nd ref='29816780' />
-    <nd ref='29816781' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723791' timestamp='2007-12-08T20:07:48+00:00' user='nickw' visible='true'>
-    <nd ref='157200346' />
-    <nd ref='157200361' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wittering Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540307' timestamp='2007-04-29T21:09:42+01:00' visible='true'>
-    <nd ref='28194357' />
-    <nd ref='28194359' />
-    <nd ref='28194361' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Turnstone Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148389' timestamp='2007-04-29T08:34:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194506' />
-    <nd ref='28194514' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999276' timestamp='2006-11-13T00:08:22+00:00' user='Dean Earley' visible='true'>
-    <nd ref='301557' />
-    <nd ref='301571' />
-    <nd ref='20972826' />
-    <nd ref='301572' />
-    <nd ref='635146' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Threefield Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077065' timestamp='2008-01-04T19:34:28+00:00' user='nickw' visible='true'>
-    <nd ref='19111038' />
-    <nd ref='24924342' />
-    <nd ref='254738' />
-    <nd ref='206162239' />
-    <nd ref='254740' />
-    <nd ref='206163282' />
-    <nd ref='29838588' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Bournemouth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551582' timestamp='2007-10-29T16:25:40+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28418546' />
-    <nd ref='28418542' />
-    <nd ref='28418544' />
-    <nd ref='28418545' />
-    <nd ref='24924238' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558172' timestamp='2007-05-02T23:58:14+01:00' visible='true'>
-    <nd ref='28583005' />
-    <nd ref='28583055' />
-    <nd ref='28582990' />
-    <nd ref='28583012' />
-    <nd ref='28583013' />
-    <nd ref='28583015' />
-    <nd ref='28583017' />
-    <nd ref='28583018' />
-    <nd ref='28583020' />
-    <nd ref='28583022' />
-    <nd ref='28583023' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wonston Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3651052' timestamp='2007-08-12T23:07:10+01:00' user='Edward' visible='true'>
-    <nd ref='657802' />
-    <nd ref='657803' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kings Park Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='22801715' timestamp='2008-02-03T06:22:06+00:00' user='sladen' visible='true'>
-    <nd ref='245152607' />
-    <nd ref='245152653' />
-    <nd ref='245152654' />
-    <nd ref='245152655' />
-    <tag k='highway' v='secondary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4585218' timestamp='2007-05-12T09:53:05+01:00' user='nickw' visible='true'>
-    <nd ref='29001307' />
-    <nd ref='29001707' />
-    <nd ref='29001706' />
-    <nd ref='29001704' />
-    <nd ref='29001703' />
-    <nd ref='29001702' />
-    <nd ref='29001701' />
-    <nd ref='29001700' />
-    <nd ref='29001618' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3287' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true'>
-    <nd ref='700490' />
-    <nd ref='700491' />
-    <nd ref='700495' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Newton Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4679908' timestamp='2007-06-10T18:15:31+01:00' visible='true'>
-    <nd ref='29728870' />
-    <nd ref='30161121' />
-    <nd ref='30161120' />
-    <nd ref='29728867' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Bellevue Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131413' timestamp='2006-11-12T20:47:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20967603' />
-    <nd ref='20967605' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151845' timestamp='2007-06-07T11:59:04+01:00' visible='true'>
-    <nd ref='29925207' />
-    <nd ref='29926153' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996456' timestamp='2006-11-10T08:43:43+00:00' user='nickw' visible='true'>
-    <nd ref='20954590' />
-    <nd ref='20954591' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Royston Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211066' timestamp='2007-01-07T12:39:36+00:00' user='nickw' visible='true'>
-    <nd ref='24949816' />
-    <nd ref='24949830' />
-    <nd ref='24949831' />
-    <nd ref='24949832' />
-    <nd ref='24949833' />
-    <nd ref='24949834' />
-    <nd ref='24949835' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2920964' timestamp='2006-08-15T12:14:48+01:00' user='nickw' visible='true'>
-    <nd ref='13564702' />
-    <nd ref='20130970' />
-    <nd ref='13564715' />
-    <nd ref='13564724' />
-    <nd ref='13564728' />
-    <nd ref='13564729' />
-    <nd ref='474646' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='bridleway' />
-    <tag k='motorcar' v='no' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='22801704' timestamp='2008-02-03T06:18:47+00:00' user='sladen' visible='true'>
-    <nd ref='245151124' />
-    <nd ref='245151148' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4536146' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='269928' />
-    <nd ref='28179480' />
-    <nd ref='28179481' />
-    <nd ref='28179487' />
-    <tag k='highway' v='residential' />
-    <tag k='surface' v='unpaved' />
-    <tag k='name' v='Roman Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800510' timestamp='2008-02-03T06:08:22+00:00' user='sladen' visible='true'>
-    <nd ref='245148853' />
-    <nd ref='245148949' />
-    <nd ref='245148950' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4536329' timestamp='2007-04-29T02:31:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28183728' />
-    <nd ref='21636808' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pine Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578264' timestamp='2006-10-06T23:29:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='17721020' />
-    <nd ref='17721049' />
-    <nd ref='17721050' />
-    <nd ref='17721051' />
-    <nd ref='17721052' />
-    <nd ref='15360205' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546074' timestamp='2007-04-30T21:49:15+01:00' user='nickw' visible='true'>
-    <nd ref='28341757' />
-    <nd ref='28231009' />
-    <nd ref='28341798' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Deacon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10517698' timestamp='2007-10-28T20:32:03+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90589189' />
-    <nd ref='90589190' />
-    <nd ref='90589191' />
-    <nd ref='90589192' />
-    <nd ref='90589189' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4015800' timestamp='2006-11-26T00:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='11419686' />
-    <nd ref='11419690' />
-    <nd ref='21275754' />
-    <nd ref='11419695' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wolseley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5781531' timestamp='2007-10-16T17:48:00+01:00' user='Dean Earley' visible='true'>
-    <nd ref='45158385' />
-    <nd ref='45160139' />
-    <nd ref='28173724' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woburn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='14505888' timestamp='2007-11-29T22:29:52+00:00' user='nickw' visible='true'>
-    <nd ref='142617022' />
-    <nd ref='142618204' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hill Farm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546068' timestamp='2007-04-30T21:49:13+01:00' user='nickw' visible='true'>
-    <nd ref='661183' />
-    <nd ref='28341777' />
-    <nd ref='28341778' />
-    <nd ref='28341779' />
-    <nd ref='28341780' />
-    <nd ref='28341781' />
-    <nd ref='28341782' />
-    <nd ref='28341783' />
-    <nd ref='28341784' />
-    <nd ref='28232545' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redlands Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585123' timestamp='2007-05-12T09:26:10+01:00' user='nickw' visible='true'>
-    <nd ref='29000493' />
-    <nd ref='28849617' />
-    <nd ref='29000492' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edwin Jones Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4313901' timestamp='2007-11-18T19:19:52+00:00' user='nickw' visible='true'>
-    <nd ref='21600421' />
-    <nd ref='21600507' />
-    <nd ref='21275820' />
-    <nd ref='122349926' />
-    <nd ref='21275819' />
-    <nd ref='21275818' />
-    <nd ref='21275817' />
-    <nd ref='21275816' />
-    <nd ref='21275815' />
-    <nd ref='21275814' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Waterhouse Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947653' timestamp='2007-09-10T23:55:23+01:00' visible='true'>
-    <nd ref='48958664' />
-    <nd ref='48958642' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679920' timestamp='2007-05-28T19:39:28+01:00' visible='true'>
-    <nd ref='29730494' />
-    <nd ref='29730499' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Bridges Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150397' timestamp='2007-06-30T12:32:07+01:00' visible='true'>
-    <nd ref='29621209' />
-    <nd ref='29621211' />
-    <nd ref='29621213' />
-    <nd ref='29389521' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3677095' timestamp='2006-10-14T13:19:13+01:00' user='nickw' visible='true'>
-    <nd ref='17724241' />
-    <nd ref='18232088' />
-    <nd ref='18232089' />
-    <nd ref='18232090' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Berkeley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546500' timestamp='2007-04-30T23:36:54+01:00' user='nickw' visible='true'>
-    <nd ref='28347589' />
-    <nd ref='28345042' />
-    <nd ref='28347590' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Dyneley Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15961403' timestamp='2007-12-10T21:01:00+00:00' user='sladen' visible='true'>
-    <nd ref='160409605' />
-    <nd ref='160413817' />
-    <nd ref='160413818' />
-    <nd ref='160413821' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4653037' timestamp='2007-12-10T19:38:07+00:00' user='sladen' visible='true'>
-    <nd ref='160266395' />
-    <nd ref='160266396' />
-    <nd ref='160266397' />
-    <nd ref='29621233' />
-    <nd ref='29621232' />
-    <nd ref='160265684' />
-    <nd ref='29621231' />
-    <nd ref='160265686' />
-    <nd ref='29621218' />
-    <nd ref='160265288' />
-    <nd ref='29621219' />
-    <nd ref='29621220' />
-    <nd ref='29621221' />
-    <nd ref='160265292' />
-    <nd ref='29621222' />
-    <nd ref='160264335' />
-    <nd ref='29621427' />
-    <nd ref='29621424' />
-    <nd ref='29621223' />
-    <nd ref='29621224' />
-    <nd ref='29621225' />
-    <nd ref='160263970' />
-    <nd ref='160263972' />
-    <nd ref='160263974' />
-    <nd ref='160263976' />
-    <nd ref='29621226' />
-    <nd ref='160263979' />
-    <nd ref='160263981' />
-    <nd ref='160263983' />
-    <nd ref='160263985' />
-    <nd ref='160263987' />
-    <nd ref='160263990' />
-    <nd ref='160263992' />
-    <nd ref='29621227' />
-    <nd ref='29621228' />
-    <nd ref='29621229' />
-    <nd ref='160263995' />
-    <nd ref='29621230' />
-    <nd ref='160263997' />
-    <nd ref='160263999' />
-    <nd ref='160264001' />
-    <nd ref='160264003' />
-    <nd ref='160264004' />
-    <nd ref='160264006' />
-    <nd ref='29621235' />
-    <nd ref='160260403' />
-    <nd ref='160260404' />
-    <nd ref='160260405' />
-    <nd ref='160260406' />
-    <nd ref='160260408' />
-    <nd ref='29621236' />
-    <nd ref='29621237' />
-    <nd ref='29621238' />
-    <nd ref='29621239' />
-    <nd ref='29621240' />
-    <nd ref='29621242' />
-    <nd ref='29621243' />
-    <tag k='waterway' v='river' />
-    <tag k='name' v='Monks Brook' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4005441' timestamp='2006-11-19T12:29:43+00:00' user='nickw' visible='true'>
-    <nd ref='21092029' />
-    <nd ref='21092030' />
-    <nd ref='21092031' />
-    <nd ref='21092032' />
-    <nd ref='20965518' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bracken Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800112' timestamp='2008-02-03T06:05:21+00:00' user='sladen' visible='true'>
-    <nd ref='254412' />
-    <nd ref='245147535' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3819401' timestamp='2006-10-23T20:53:07+01:00' user='nickw' visible='true'>
-    <nd ref='19227261' />
-    <nd ref='17724234' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='22761356' timestamp='2008-01-31T12:56:53+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='244310972' />
-    <nd ref='244310973' />
-    <nd ref='244310974' />
-    <nd ref='244310975' />
-    <nd ref='244310976' />
-    <nd ref='244310977' />
-    <nd ref='244310978' />
-    <nd ref='244310979' />
-    <nd ref='244310980' />
-    <nd ref='244310981' />
-    <nd ref='244310982' />
-    <nd ref='244310983' />
-    <nd ref='244310984' />
-    <nd ref='244310985' />
-    <nd ref='244310986' />
-    <nd ref='244310987' />
-    <nd ref='244310988' />
-    <nd ref='244310989' />
-    <nd ref='244310990' />
-    <nd ref='244310991' />
-    <nd ref='244310992' />
-    <nd ref='244310993' />
-    <nd ref='244310994' />
-    <nd ref='244310972' />
-    <tag k='leisure' v='golf_course' />
-    <tag k='name' v='Chilworth Golf Centre' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='2494482' timestamp='2006-07-18T10:29:10+01:00' user='nickw' visible='true'>
-    <nd ref='544343' />
-    <nd ref='544342' />
-    <nd ref='544341' />
-    <nd ref='21689175' />
-    <nd ref='544340' />
-    <nd ref='544338' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Claude Ashby Close' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1657' timestamp='2007-09-25T17:25:35+01:00' user='mike l' visible='true'>
-    <nd ref='242743' />
-    <nd ref='27021745' />
-    <nd ref='27021744' />
-    <nd ref='27021742' />
-    <nd ref='27021743' />
-    <nd ref='59766050' />
-    <nd ref='21420717' />
-    <nd ref='658325' />
-    <nd ref='423284' />
-    <nd ref='27021738' />
-    <nd ref='423285' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Mayfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4009853' timestamp='2008-01-03T19:17:16+00:00' user='nickw' visible='true'>
-    <nd ref='25555526' />
-    <nd ref='205340399' />
-    <nd ref='25555527' />
-    <nd ref='25555528' />
-    <nd ref='254722' />
-    <nd ref='254723' />
-    <nd ref='254725' />
-    <nd ref='21746340' />
-    <nd ref='254726' />
-    <nd ref='25555529' />
-    <nd ref='25504275' />
-    <nd ref='254727' />
-    <nd ref='15741006' />
-    <nd ref='254728' />
-    <nd ref='25555530' />
-    <nd ref='153329582' />
-    <nd ref='254729' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Otterbourne Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4762016' timestamp='2007-06-15T23:09:59+01:00' visible='true'>
-    <nd ref='30410994' />
-    <nd ref='30410995' />
-    <nd ref='30410996' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778234' timestamp='2006-08-04T11:59:27+01:00' user='nickw' visible='true'>
-    <nd ref='12594958' />
-    <nd ref='12594988' />
-    <nd ref='12594990' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Banister Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8136473' timestamp='2007-10-30T15:20:42+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25340628' />
-    <nd ref='28418529' />
-    <nd ref='25340630' />
-    <nd ref='29543385' />
-    <nd ref='29548704' />
-    <nd ref='25340631' />
-    <nd ref='29548705' />
-    <nd ref='28388963' />
-    <nd ref='25340634' />
-    <nd ref='28388955' />
-    <nd ref='29621217' />
-    <nd ref='25340633' />
-    <nd ref='29392350' />
-    <nd ref='29392349' />
-    <nd ref='25340632' />
-    <nd ref='29392382' />
-    <nd ref='25340629' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Derby Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636146' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='243873' />
-    <nd ref='29464239' />
-    <nd ref='29464240' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211075' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949909' />
-    <nd ref='24949908' />
-    <nd ref='24949811' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beech Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005403' timestamp='2006-11-19T12:09:21+00:00' user='nickw' visible='true'>
-    <nd ref='21091847' />
-    <nd ref='21091827' />
-    <nd ref='21091864' />
-    <nd ref='21091859' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cracknore Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574125' timestamp='2007-12-06T20:43:05+00:00' user='nickw' visible='true'>
-    <nd ref='28874049' />
-    <nd ref='28874051' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Aldermoor Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701999' timestamp='2007-06-03T19:02:05+01:00' visible='true'>
-    <nd ref='29914406' />
-    <nd ref='29914407' />
-    <nd ref='29914408' />
-    <nd ref='29914409' />
-    <nd ref='29914410' />
-    <nd ref='29914411' />
-    <nd ref='29914412' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ladywood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269309' timestamp='2007-02-04T22:51:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639899' />
-    <nd ref='25639900' />
-    <nd ref='25639901' />
-    <nd ref='25639902' />
-    <nd ref='25639903' />
-    <nd ref='25639904' />
-    <nd ref='25639905' />
-    <nd ref='25639906' />
-    <nd ref='25639907' />
-    <nd ref='25639940' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150629' timestamp='2007-10-16T02:43:33+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29706972' />
-    <nd ref='29706975' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Birch Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124984' timestamp='2007-10-29T16:25:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='14707286' />
-    <nd ref='2433501' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='B3037' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Fairoak Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4438012' timestamp='2007-09-11T00:11:49+01:00' visible='true'>
-    <nd ref='27238984' />
-    <nd ref='27238983' />
-    <nd ref='27238982' />
-    <nd ref='20972768' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Western Esplanade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10518478' timestamp='2007-10-28T20:44:27+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='25675788' />
-    <nd ref='25675789' />
-    <nd ref='25675790' />
-    <nd ref='25675791' />
-    <nd ref='25675792' />
-    <tag k='highway' v='tertiary' />
-    <tag k='note' v='These are primarily inside Southampton docks, and not strictly public access :o)' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='8149935' timestamp='2007-05-24T00:05:57+01:00' visible='true'>
-    <nd ref='29392341' />
-    <nd ref='29392369' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='High Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123252' timestamp='2007-05-29T22:14:43+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='10216417' />
-    <nd ref='10216404' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Mousehole Lane' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4342666' timestamp='2007-03-09T21:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='254760' />
-    <nd ref='26447509' />
-    <nd ref='26447510' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kent Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119871' timestamp='2007-05-13T10:11:12+01:00' user='nickw' visible='true'>
-    <nd ref='306298' />
-    <nd ref='306299' />
-    <nd ref='306300' />
-    <nd ref='306301' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winn Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15722941' timestamp='2007-12-08T20:00:26+00:00' user='nickw' visible='true'>
-    <nd ref='157188693' />
-    <nd ref='157190823' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gemini Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2956553' timestamp='2007-09-11T00:11:47+01:00' visible='true'>
-    <nd ref='13885371' />
-    <nd ref='48965793' />
-    <nd ref='13885353' />
-    <nd ref='21615424' />
-    <nd ref='21615423' />
-    <nd ref='21614662' />
-    <nd ref='21615426' />
-    <nd ref='21615427' />
-    <nd ref='48965784' />
-    <nd ref='21615428' />
-    <nd ref='21614657' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Castle Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211070' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949878' />
-    <nd ref='24949880' />
-    <nd ref='24949881' />
-    <nd ref='24949882' />
-    <nd ref='24949883' />
-    <nd ref='24949884' />
-    <nd ref='24949818' />
-    <nd ref='24949885' />
-    <nd ref='24949886' />
-    <nd ref='24949887' />
-    <nd ref='24949888' />
-    <nd ref='24949889' />
-    <nd ref='24949890' />
-    <nd ref='24949891' />
-    <nd ref='24949892' />
-    <nd ref='24949893' />
-    <nd ref='24949894' />
-    <nd ref='24949868' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lakewood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4250819' timestamp='2007-10-16T20:14:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964130' />
-    <nd ref='254763' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724856' timestamp='2007-12-08T20:16:59+00:00' user='nickw' visible='true'>
-    <nd ref='157212573' />
-    <nd ref='157212578' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunbar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556367' timestamp='2007-10-29T08:05:06+00:00' user='nickw' visible='true'>
-    <nd ref='91113443' />
-    <nd ref='91113450' />
-    <nd ref='91110993' />
-    <tag k='highway' v='unsurfaced' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677941' timestamp='2007-05-28T13:25:50+01:00' visible='true'>
-    <nd ref='29710204' />
-    <nd ref='29710208' />
-    <nd ref='29710212' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Roman Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092435' timestamp='2008-01-25T18:29:31+00:00' visible='true'>
-    <nd ref='254675' />
-    <nd ref='14745479' />
-    <nd ref='14745481' />
-    <nd ref='14745486' />
-    <nd ref='14745487' />
-    <nd ref='298255' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151131' timestamp='2007-06-01T20:13:27+01:00' visible='true'>
-    <nd ref='29838295' />
-    <nd ref='29838301' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Boyatt Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678213' timestamp='2007-10-04T19:43:12+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29710862' />
-    <nd ref='29710871' />
-    <nd ref='29710892' />
-    <nd ref='29710894' />
-    <nd ref='29710896' />
-    <nd ref='29710898' />
-    <nd ref='29710900' />
-    <nd ref='29710902' />
-    <nd ref='29710904' />
-    <nd ref='29710906' />
-    <nd ref='29710907' />
-    <nd ref='29710908' />
-    <nd ref='29710909' />
-    <nd ref='29710910' />
-    <nd ref='29710912' />
-    <nd ref='29710913' />
-    <nd ref='29710914' />
-    <nd ref='29710915' />
-    <nd ref='29711120' />
-    <nd ref='29704342' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4540736' timestamp='2007-10-26T13:40:22+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='28249806' />
-    <nd ref='87877612' />
-    <nd ref='87877614' />
-    <nd ref='87877615' />
-    <nd ref='28249807' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Percy Rd' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4541331' timestamp='2007-04-29T22:57:08+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244296' />
-    <nd ref='28257909' />
-    <nd ref='28257910' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lynden Gate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084422' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689153' />
-    <nd ref='21689154' />
-    <nd ref='21689155' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bankside' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732321' timestamp='2007-06-10T18:15:22+01:00' visible='true'>
-    <nd ref='30161107' />
-    <nd ref='29670301' />
-    <nd ref='30161108' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135480' timestamp='2007-01-10T00:20:38+00:00' user='nickw' visible='true'>
-    <nd ref='24984714' />
-    <nd ref='24984715' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Village' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3127995' timestamp='2006-09-07T15:00:32+01:00' user='nickw' visible='true'>
-    <nd ref='14957839' />
-    <nd ref='603223' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Kingsbury Road' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='8126541' timestamp='2006-09-02T13:46:13+01:00' user='Dean Earley' visible='true'>
-    <nd ref='423289' />
-    <nd ref='544328' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Welbeck Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235068' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='25282104' />
-    <nd ref='25282125' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='7971017' timestamp='2007-10-28T19:06:23+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='52570895' />
-    <nd ref='59599701' />
-    <nd ref='59599702' />
-    <nd ref='59599703' />
-    <nd ref='59599704' />
-    <nd ref='59599705' />
-    <nd ref='88051786' />
-    <nd ref='88051787' />
-    <nd ref='88051789' />
-    <nd ref='88086805' />
-    <nd ref='88051790' />
-    <nd ref='88051791' />
-    <nd ref='88051792' />
-    <nd ref='88051793' />
-    <nd ref='88051794' />
-    <nd ref='88051795' />
-    <nd ref='88051797' />
-    <nd ref='88051799' />
-    <nd ref='88051800' />
-    <nd ref='88051801' />
-    <nd ref='88051803' />
-    <nd ref='90497491' />
-    <nd ref='13343026' />
-    <tag k='railway' v='rail' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4549456' timestamp='2007-10-30T15:20:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='15359727' />
-    <nd ref='28223255' />
-    <nd ref='28223257' />
-    <nd ref='28339145' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Pirelli Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='12524119' timestamp='2007-11-14T16:33:11+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='114099519' />
-    <nd ref='114099520' />
-    <nd ref='114099521' />
-    <nd ref='114099522' />
-    <nd ref='114099523' />
-    <nd ref='114099524' />
-    <nd ref='114099525' />
-    <nd ref='114099526' />
-    <nd ref='114099527' />
-    <nd ref='114099529' />
-    <nd ref='114099530' />
-    <nd ref='114099532' />
-    <nd ref='114099533' />
-    <nd ref='114099534' />
-    <nd ref='114099519' />
-    <tag k='leisure' v='pitch' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </way>
-  <way id='3996910' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957186' />
-    <nd ref='20957213' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577441' timestamp='2007-05-09T23:36:13+01:00' visible='true'>
-    <nd ref='28903412' />
-    <nd ref='28903414' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005424' timestamp='2006-11-19T12:11:42+00:00' user='nickw' visible='true'>
-    <nd ref='21091844' />
-    <nd ref='21091865' />
-    <nd ref='21091866' />
-    <nd ref='469855' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bourne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704074' timestamp='2007-06-03T22:25:20+01:00' visible='true'>
-    <nd ref='29930657' />
-    <nd ref='29930659' />
-    <nd ref='29930660' />
-    <nd ref='29930661' />
-    <nd ref='29930662' />
-    <nd ref='29930663' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lincolns Rise' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4278992' timestamp='2007-02-10T23:53:41+00:00' visible='true'>
-    <nd ref='254636' />
-    <nd ref='25764490' />
-    <nd ref='25764491' />
-    <nd ref='25764492' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blackberry Terrace' />
-  </way>
-  <way id='8151520' timestamp='2007-10-15T14:11:19+01:00' user='alfabet' visible='true'>
-    <nd ref='29707709' />
-    <nd ref='29707708' />
-    <nd ref='29816781' />
-    <nd ref='29707707' />
-    <nd ref='29707706' />
-    <nd ref='29707705' />
-    <nd ref='29707331' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3186110' timestamp='2006-09-11T20:23:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15360204' />
-    <nd ref='15360205' />
-    <nd ref='15360202' />
-    <nd ref='15360203' />
-    <nd ref='15360204' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639705' timestamp='2006-06-01T09:56:23+01:00' user='nickw' visible='true'>
-    <nd ref='329519' />
-    <nd ref='21636788' />
-    <nd ref='329520' />
-    <nd ref='21636790' />
-    <nd ref='329521' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bassett Heath Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4005405' timestamp='2006-11-19T12:09:22+00:00' user='nickw' visible='true'>
-    <nd ref='21091864' />
-    <nd ref='21091829' />
-    <nd ref='21091863' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Elgin Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4211079' timestamp='2007-10-16T02:43:49+01:00' user='andrewpmk' visible='true'>
-    <nd ref='22231194' />
-    <nd ref='24949934' />
-    <nd ref='24949933' />
-    <nd ref='24949932' />
-    <nd ref='24949813' />
-    <nd ref='24949931' />
-    <nd ref='29762233' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Common Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433556' timestamp='2007-10-16T17:18:12+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28903941' />
-    <nd ref='28903883' />
-    <nd ref='28904008' />
-    <nd ref='28903892' />
-    <nd ref='28904027' />
-    <nd ref='28903906' />
-    <nd ref='28903978' />
-    <nd ref='28903858' />
-    <nd ref='28903996' />
-    <nd ref='28903874' />
-    <nd ref='28903820' />
-    <nd ref='28903954' />
-    <nd ref='28903835' />
-    <nd ref='28903973' />
-    <nd ref='28903790' />
-    <nd ref='28903925' />
-    <nd ref='28903921' />
-    <nd ref='28903803' />
-    <nd ref='28903941' />
-    <tag k='note' v='station and car park border' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539967' timestamp='2007-04-29T20:37:19+01:00' user='Dean Earley' visible='true'>
-    <nd ref='422980' />
-    <nd ref='28243578' />
-    <nd ref='28243583' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaumont Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604517' timestamp='2007-05-22T00:20:32+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29134131' />
-    <nd ref='29464270' />
-    <nd ref='29464271' />
-    <nd ref='29134130' />
-    <nd ref='29134121' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Mayflowers' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433611' timestamp='2007-10-17T01:09:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28903833' />
-    <nd ref='28904005' />
-    <nd ref='28903909' />
-    <nd ref='28903806' />
-    <nd ref='28903928' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2352113' timestamp='2007-12-10T21:05:08+00:00' user='sladen' visible='true'>
-    <nd ref='8596749' />
-    <nd ref='14744283' />
-    <nd ref='8596760' />
-    <nd ref='9736882' />
-    <nd ref='9736883' />
-    <nd ref='59936562' />
-    <nd ref='14744284' />
-    <nd ref='254837' />
-    <nd ref='20971220' />
-    <nd ref='20972786' />
-    <nd ref='20971217' />
-    <nd ref='254838' />
-    <nd ref='20972788' />
-    <nd ref='254839' />
-    <nd ref='160419630' />
-    <nd ref='10222200' />
-    <nd ref='254841' />
-    <nd ref='25675767' />
-    <nd ref='254842' />
-    <nd ref='160421180' />
-    <nd ref='25675768' />
-    <nd ref='160418873' />
-    <nd ref='254843' />
-    <nd ref='254844' />
-    <nd ref='160416878' />
-    <nd ref='160418015' />
-    <nd ref='160416879' />
-    <nd ref='254845' />
-    <nd ref='160416092' />
-    <nd ref='10222202' />
-    <nd ref='160417604' />
-    <nd ref='254846' />
-    <nd ref='25675770' />
-    <nd ref='254847' />
-    <nd ref='160404877' />
-    <nd ref='160405283' />
-    <nd ref='25675772' />
-    <nd ref='254848' />
-    <nd ref='160404881' />
-    <nd ref='254849' />
-    <nd ref='469878' />
-    <nd ref='160402931' />
-    <nd ref='254853' />
-    <nd ref='160402633' />
-    <nd ref='254854' />
-    <nd ref='160401542' />
-    <nd ref='254855' />
-    <nd ref='160400474' />
-    <nd ref='254857' />
-    <nd ref='160401142' />
-    <nd ref='160401143' />
-    <nd ref='160401144' />
-    <nd ref='160384738' />
-    <nd ref='160384741' />
-    <nd ref='160383995' />
-    <nd ref='160383996' />
-    <nd ref='254858' />
-    <nd ref='160388360' />
-    <nd ref='160392708' />
-    <nd ref='160392400' />
-    <nd ref='254859' />
-    <nd ref='254860' />
-    <nd ref='254861' />
-    <nd ref='254862' />
-    <nd ref='160378618' />
-    <nd ref='160378137' />
-    <nd ref='160378138' />
-    <nd ref='29468533' />
-    <nd ref='160378141' />
-    <nd ref='160378354' />
-    <nd ref='254863' />
-    <nd ref='160373386' />
-    <nd ref='254864' />
-    <nd ref='160373390' />
-    <nd ref='254865' />
-    <nd ref='254866' />
-    <nd ref='254868' />
-    <nd ref='16570733' />
-    <nd ref='160359714' />
-    <nd ref='160359716' />
-    <nd ref='254869' />
-    <nd ref='160359017' />
-    <nd ref='254870' />
-    <nd ref='254871' />
-    <nd ref='160361172' />
-    <nd ref='10222228' />
-    <nd ref='160361457' />
-    <nd ref='254872' />
-    <nd ref='254873' />
-    <nd ref='254874' />
-    <nd ref='160290748' />
-    <nd ref='254875' />
-    <nd ref='160298502' />
-    <nd ref='160291503' />
-    <nd ref='10222230' />
-    <nd ref='254876' />
-    <nd ref='254877' />
-    <nd ref='254878' />
-    <tag k='horse' v='yes' />
-    <tag k='oneway' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4764767' timestamp='2007-06-16T16:26:35+01:00' visible='true'>
-    <nd ref='30431985' />
-    <nd ref='30431976' />
-    <nd ref='30431977' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mill Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540742' timestamp='2007-04-29T21:43:24+01:00' visible='true'>
-    <nd ref='28249842' />
-    <nd ref='27238999' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Westfield Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636150' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='16963759' />
-    <nd ref='29464250' />
-    <nd ref='29464251' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tudor Wood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148381' timestamp='2007-12-07T13:28:49+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180219' />
-    <nd ref='28180229' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='8121932' timestamp='2006-07-01T04:07:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='331353' />
-    <nd ref='14744409' />
-    <nd ref='388951' />
-    <nd ref='247796' />
-    <nd ref='388878' />
-    <nd ref='14744411' />
-    <nd ref='14744410' />
-    <nd ref='242743' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Burgess Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2859059' timestamp='2008-01-25T18:35:44+00:00' visible='true'>
-    <nd ref='298301' />
-    <nd ref='20961039' />
-    <nd ref='298299' />
-    <nd ref='27021792' />
-    <nd ref='298298' />
-    <nd ref='27021791' />
-    <nd ref='298297' />
-    <nd ref='27021790' />
-    <nd ref='298291' />
-    <nd ref='298290' />
-    <nd ref='254991' />
-    <nd ref='27021780' />
-    <nd ref='298289' />
-    <nd ref='27021779' />
-    <nd ref='298288' />
-    <nd ref='27021778' />
-    <nd ref='298287' />
-    <nd ref='27021781' />
-    <nd ref='298286' />
-    <nd ref='27021787' />
-    <nd ref='298285' />
-    <nd ref='27021793' />
-    <nd ref='298277' />
-    <nd ref='27021796' />
-    <nd ref='298276' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8428559' timestamp='2007-10-17T01:27:51+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194893' />
-    <nd ref='28194897' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687634' timestamp='2007-05-30T22:26:34+01:00' user='nickw' visible='true'>
-    <nd ref='29796859' />
-    <nd ref='29796860' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mersham Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778271' timestamp='2006-08-04T12:01:09+01:00' user='nickw' visible='true'>
-    <nd ref='12595092' />
-    <nd ref='12595104' />
-    <nd ref='12595079' />
-    <nd ref='12595105' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Northlands Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4539985' timestamp='2007-04-29T20:37:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243651' />
-    <nd ref='28243679' />
-    <nd ref='28243682' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Underwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119875' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319649' />
-    <nd ref='530601' />
-    <nd ref='530602' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Livingstone Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4079290' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636775' />
-    <nd ref='21636776' />
-    <nd ref='21636739' />
-    <nd ref='21636777' />
-    <nd ref='21636823' />
-    <nd ref='21636726' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saxholm Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3701402' timestamp='2006-10-16T22:13:51+01:00' user='nickw' visible='true'>
-    <nd ref='18349493' />
-    <nd ref='329523' />
-    <nd ref='329524' />
-    <nd ref='329525' />
-    <nd ref='329526' />
-    <nd ref='329527' />
-    <nd ref='329528' />
-    <nd ref='329529' />
-    <nd ref='329530' />
-    <nd ref='254478' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150633' timestamp='2007-10-16T02:43:18+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29912975' />
-    <nd ref='29912977' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broom Hill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546158' timestamp='2007-04-30T22:13:58+01:00' user='nickw' visible='true'>
-    <nd ref='28342560' />
-    <nd ref='28342558' />
-    <nd ref='28342559' />
-    <nd ref='28342552' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='South side also called Forsythia Place' />
-    <tag k='name' v='Magnolia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4294711' timestamp='2007-02-16T09:18:10+00:00' user='nickw' visible='true'>
-    <nd ref='25938549' />
-    <nd ref='25938550' />
-    <nd ref='18232131' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cranbury Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724594' timestamp='2007-06-08T23:30:33+01:00' visible='true'>
-    <nd ref='30089089' />
-    <nd ref='30096956' />
-    <nd ref='30089091' />
-    <nd ref='30096955' />
-    <nd ref='30089094' />
-    <nd ref='30096959' />
-    <nd ref='30096958' />
-    <nd ref='30096957' />
-    <nd ref='30089104' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773519' timestamp='2007-06-17T22:19:02+01:00' visible='true'>
-    <nd ref='30509425' />
-    <nd ref='29512143' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Stratford Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726485' timestamp='2007-12-08T20:35:43+00:00' user='nickw' visible='true'>
-    <nd ref='157241425' />
-    <nd ref='157241428' />
-    <nd ref='157241433' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lennox Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4078457' timestamp='2006-12-17T19:47:32+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26781156' />
-    <nd ref='21624978' />
-    <nd ref='21624979' />
-    <nd ref='21624987' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mortimer Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2494477' timestamp='2006-07-18T10:28:00+01:00' user='nickw' visible='true'>
-    <nd ref='10908513' />
-    <nd ref='25471848' />
-    <nd ref='10908532' />
-    <nd ref='10908534' />
-    <nd ref='10908537' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Itchenside Close' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4271533' timestamp='2007-10-29T16:22:03+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='25675810' />
-    <nd ref='25675798' />
-    <nd ref='91528724' />
-    <nd ref='25675799' />
-    <nd ref='25675807' />
-    <nd ref='25675808' />
-    <nd ref='25675810' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='note' v='The position of this roundabout is guessed for now' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='16414041' timestamp='2007-12-14T21:35:48+00:00' user='nickw' visible='true'>
-    <nd ref='169423477' />
-    <nd ref='169423482' />
-    <nd ref='169423488' />
-    <nd ref='169423491' />
-    <nd ref='169423496' />
-    <nd ref='169423499' />
-    <nd ref='169423505' />
-    <nd ref='169423509' />
-    <nd ref='169423514' />
-    <nd ref='169423517' />
-    <nd ref='169423521' />
-    <nd ref='169423526' />
-    <nd ref='169423531' />
-    <nd ref='169423537' />
-    <nd ref='169423541' />
-    <nd ref='169423545' />
-    <nd ref='169423550' />
-    <nd ref='169423554' />
-    <nd ref='28372782' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coxford Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136105' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282111' />
-    <nd ref='25282112' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Primrose Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10522525' timestamp='2007-10-28T21:46:42+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90661630' />
-    <nd ref='90661631' />
-    <nd ref='90661632' />
-    <nd ref='90661635' />
-    <nd ref='90661630' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4008577' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='21141405' />
-    <nd ref='21141377' />
-    <nd ref='21141398' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bourne Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558164' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582964' />
-    <nd ref='28582955' />
-    <nd ref='28582956' />
-    <nd ref='28582957' />
-    <nd ref='28582958' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grafton Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703341' timestamp='2007-06-03T20:50:23+01:00' visible='true'>
-    <nd ref='29925341' />
-    <nd ref='29925906' />
-    <nd ref='29925907' />
-    <nd ref='29925908' />
-    <nd ref='29925909' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harlaxton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4238069' timestamp='2007-01-19T20:35:55+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25305486' />
-    <nd ref='25305497' />
-    <nd ref='25305496' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120149' timestamp='2007-05-13T10:11:12+01:00' user='nickw' visible='true'>
-    <nd ref='310889' />
-    <nd ref='658449' />
-    <nd ref='442383' />
-    <nd ref='442384' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Avenue Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3281' timestamp='2007-08-12T23:11:56+01:00' user='Edward' visible='true'>
-    <nd ref='675886' />
-    <nd ref='675887' />
-    <nd ref='675888' />
-    <nd ref='675889' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Catherines Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='188' timestamp='2006-06-24T21:46:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='635146' />
-    <nd ref='20972822' />
-    <nd ref='635147' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Marsh Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3186093' timestamp='2007-06-03T14:54:33+01:00' visible='true'>
-    <nd ref='15359723' />
-    <nd ref='15359724' />
-    <nd ref='29909671' />
-    <nd ref='29909669' />
-    <nd ref='15359725' />
-    <nd ref='15359726' />
-    <tag k='oneway' v='true' />
-    <tag k='source:name' v='Hampshire county council' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='High Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1580' timestamp='2007-09-23T16:33:16+01:00' user='mike l' visible='true'>
-    <nd ref='254540' />
-    <nd ref='55420343' />
-    <nd ref='55420344' />
-    <nd ref='55420345' />
-    <nd ref='254496' />
-    <nd ref='59058426' />
-    <nd ref='59058428' />
-    <nd ref='24924092' />
-    <nd ref='21689152' />
-    <nd ref='28414274' />
-    <nd ref='21689151' />
-    <nd ref='254497' />
-    <nd ref='59058423' />
-    <nd ref='254498' />
-    <nd ref='59058425' />
-    <nd ref='254439' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Wessex Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='13252150' timestamp='2007-11-18T19:13:59+00:00' user='nickw' visible='true'>
-    <nd ref='21275696' />
-    <nd ref='122339034' />
-    <nd ref='122339040' />
-    <nd ref='122339828' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leighton Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661868' timestamp='2007-05-26T20:19:10+01:00' visible='true'>
-    <nd ref='29392366' />
-    <nd ref='27512880' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546508' timestamp='2007-04-30T23:40:11+01:00' user='nickw' visible='true'>
-    <nd ref='28347754' />
-    <nd ref='28347759' />
-    <nd ref='28347760' />
-    <nd ref='28345057' />
-    <nd ref='28347761' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Longdown Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151332' timestamp='2007-06-02T19:44:16+01:00' visible='true'>
-    <nd ref='29874153' />
-    <nd ref='29874147' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4580516' timestamp='2007-05-11T01:00:09+01:00' visible='true'>
-    <nd ref='28936002' />
-    <nd ref='28936004' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773410' timestamp='2007-06-17T21:59:36+01:00' visible='true'>
-    <nd ref='30505708' />
-    <nd ref='30505710' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237113' timestamp='2007-01-19T09:52:21+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254676' />
-    <nd ref='25296271' />
-    <nd ref='25296272' />
-    <nd ref='25296273' />
-    <nd ref='25296311' />
-    <nd ref='25296274' />
-    <nd ref='25296275' />
-    <nd ref='25296390' />
-    <nd ref='25296310' />
-    <nd ref='25296276' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C354' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150621' timestamp='2007-06-17T21:50:44+01:00' visible='true'>
-    <nd ref='29704460' />
-    <nd ref='30225794' />
-    <nd ref='30225808' />
-    <nd ref='29709561' />
-    <nd ref='30224501' />
-    <nd ref='29709563' />
-    <nd ref='29705520' />
-    <nd ref='29705523' />
-    <nd ref='30223569' />
-    <nd ref='29705525' />
-    <nd ref='29705527' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3088260' timestamp='2007-05-13T10:18:41+01:00' user='nickw' visible='true'>
-    <nd ref='254429' />
-    <nd ref='319623' />
-    <nd ref='14727946' />
-    <nd ref='9266205' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Bevois Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4527205' timestamp='2007-04-27T23:44:31+01:00' visible='true'>
-    <nd ref='28107724' />
-    <nd ref='28107718' />
-    <nd ref='28107719' />
-    <nd ref='28107720' />
-    <nd ref='28107721' />
-    <nd ref='28107722' />
-    <nd ref='28107723' />
-    <nd ref='28107724' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703949' timestamp='2007-06-03T22:04:13+01:00' visible='true'>
-    <nd ref='29929407' />
-    <nd ref='29929409' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Arrow Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604467' timestamp='2007-08-12T23:13:18+01:00' user='Edward' visible='true'>
-    <nd ref='29132977' />
-    <nd ref='29132983' />
-    <nd ref='29132989' />
-    <nd ref='29001305' />
-    <nd ref='29133340' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8126539' timestamp='2006-09-02T13:46:13+01:00' user='Dean Earley' visible='true'>
-    <nd ref='247809' />
-    <nd ref='247810' />
-    <nd ref='2073423' />
-    <nd ref='21689072' />
-    <nd ref='247787' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Welbeck Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586162' timestamp='2007-05-12T15:28:46+01:00' user='nickw' visible='true'>
-    <nd ref='29009017' />
-    <nd ref='29009018' />
-    <nd ref='29009019' />
-    <nd ref='29009020' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tresillian Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152673' timestamp='2007-06-17T22:25:19+01:00' visible='true'>
-    <nd ref='29929000' />
-    <nd ref='29929021' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parham Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4280396' timestamp='2007-02-11T18:07:24+00:00' user='nickw' visible='true'>
-    <nd ref='25783105' />
-    <nd ref='254264' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074109' timestamp='2006-12-13T20:09:44+00:00' user='nickw' visible='true'>
-    <nd ref='21561524' />
-    <nd ref='21561551' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875602' timestamp='2007-07-09T12:19:46+01:00' visible='true'>
-    <nd ref='19890081' />
-    <nd ref='31487488' />
-    <tag k='highway' v='steps' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8132904' timestamp='2006-12-02T23:18:58+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419419' />
-    <nd ref='21419443' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pilgrim Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724852' timestamp='2007-12-08T20:16:59+00:00' user='nickw' visible='true'>
-    <nd ref='50656130' />
-    <nd ref='157212542' />
-    <nd ref='157212547' />
-    <nd ref='157212553' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunbar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996462' timestamp='2006-11-10T08:43:44+00:00' user='nickw' visible='true'>
-    <nd ref='331354' />
-    <nd ref='388943' />
-    <nd ref='20954601' />
-    <nd ref='388944' />
-    <nd ref='27021820' />
-    <nd ref='388945' />
-    <nd ref='27021821' />
-    <nd ref='27021822' />
-    <nd ref='388947' />
-    <nd ref='27021823' />
-    <nd ref='27021824' />
-    <nd ref='388882' />
-    <nd ref='388883' />
-    <nd ref='21507759' />
-    <nd ref='27021825' />
-    <nd ref='27021826' />
-    <nd ref='21507760' />
-    <nd ref='21507761' />
-    <nd ref='27021827' />
-    <nd ref='27021828' />
-    <nd ref='423279' />
-    <nd ref='242743' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Violet Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5819637' timestamp='2007-12-09T06:31:13+00:00' user='andrewpmk' visible='true'>
-    <nd ref='14957856' />
-    <nd ref='45159057' />
-    <nd ref='45158385' />
-    <nd ref='28173710' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4727722' timestamp='2007-06-09T19:48:45+01:00' user='nickw' visible='true'>
-    <nd ref='30124654' />
-    <nd ref='30124656' />
-    <nd ref='30124658' />
-    <nd ref='29009218' />
-    <nd ref='30124660' />
-    <nd ref='30124661' />
-    <nd ref='30124662' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harbourne Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580496' timestamp='2007-05-11T00:51:31+01:00' visible='true'>
-    <nd ref='28935768' />
-    <nd ref='28935769' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9651721' timestamp='2007-10-16T17:47:52+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14957841' />
-    <nd ref='29466071' />
-    <nd ref='14957842' />
-    <nd ref='29466078' />
-    <nd ref='14957856' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8376206' timestamp='2007-10-29T15:43:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25896415' />
-    <nd ref='25896416' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539959' timestamp='2007-04-29T20:37:18+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243474' />
-    <nd ref='28243516' />
-    <nd ref='28243519' />
-    <nd ref='28243521' />
-    <nd ref='28243526' />
-    <nd ref='28243531' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tower Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535818' timestamp='2007-10-16T17:47:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28173724' />
-    <nd ref='28173717' />
-    <nd ref='28173710' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woburn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4082121' timestamp='2006-12-20T23:57:14+00:00' user='nickw' visible='true'>
-    <nd ref='21614657' />
-    <nd ref='21661766' />
-    <nd ref='21661765' />
-    <nd ref='20971198' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Bargate Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2859063' timestamp='2006-08-11T09:58:59+01:00' user='80n' visible='true'>
-    <nd ref='298246' />
-    <nd ref='305226' />
-    <nd ref='298244' />
-    <nd ref='298242' />
-    <nd ref='298241' />
-    <nd ref='298239' />
-    <nd ref='298237' />
-    <nd ref='298236' />
-    <nd ref='298234' />
-    <nd ref='24924060' />
-    <nd ref='298233' />
-    <nd ref='298231' />
-    <nd ref='298229' />
-    <nd ref='298228' />
-    <nd ref='24924063' />
-    <nd ref='298226' />
-    <tag k='oneway' v='true' />
-    <tag k='ref' v='M3' />
-    <tag k='highway' v='motorway' />
-    <tag k='name' v='M3 Northbound' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126862' timestamp='2006-09-08T23:08:01+01:00' user='Dean Earley' visible='true'>
-    <nd ref='15028890' />
-    <nd ref='15028892' />
-    <nd ref='15028894' />
-    <nd ref='15028895' />
-    <nd ref='15028896' />
-    <nd ref='15028899' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upmill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643759' timestamp='2007-05-24T00:05:28+01:00' visible='true'>
-    <nd ref='29392361' />
-    <nd ref='29392355' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536150' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254486' />
-    <nd ref='28179495' />
-    <nd ref='28179496' />
-    <nd ref='28179480' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pinelands Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1688' timestamp='2006-06-04T00:35:20+01:00' user='Dean Earley' visible='true'>
-    <nd ref='325641' />
-    <nd ref='325642' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Rose Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4569966' timestamp='2007-05-05T08:58:29+01:00' user='nickw' visible='true'>
-    <nd ref='28830616' />
-    <nd ref='28830617' />
-    <nd ref='28830619' />
-    <nd ref='28830618' />
-    <nd ref='28830620' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690977' timestamp='2007-05-31T21:58:51+01:00' visible='true'>
-    <nd ref='29816413' />
-    <nd ref='29816414' />
-    <nd ref='29816415' />
-    <nd ref='29816416' />
-    <nd ref='29816417' />
-    <nd ref='29816418' />
-    <nd ref='29816419' />
-    <nd ref='29816420' />
-    <nd ref='29816421' />
-    <nd ref='29816422' />
-    <nd ref='29816423' />
-    <nd ref='29815642' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8433623' timestamp='2007-05-10T01:08:45+01:00' user='LivingWithDragons' visible='true'>
-    <nd ref='28903957' />
-    <nd ref='28903828' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092429' timestamp='2006-09-03T01:40:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14745441' />
-    <nd ref='14745439' />
-    <nd ref='14745440' />
-    <nd ref='14745441' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3981718' timestamp='2006-10-31T22:26:05+00:00' user='nickw' visible='true'>
-    <nd ref='20698065' />
-    <nd ref='20698066' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Ogle Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643756' timestamp='2007-05-24T00:05:27+01:00' visible='true'>
-    <nd ref='29392430' />
-    <nd ref='29392382' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15451202' timestamp='2007-12-06T20:43:01+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296290' />
-    <nd ref='25296291' />
-    <nd ref='29708047' />
-    <nd ref='25296292' />
-    <nd ref='29925202' />
-    <nd ref='25296293' />
-    <nd ref='25296294' />
-    <nd ref='25296295' />
-    <nd ref='25296296' />
-    <nd ref='29704343' />
-    <nd ref='25296297' />
-    <nd ref='30504517' />
-    <nd ref='29710553' />
-    <nd ref='25296298' />
-    <nd ref='29704449' />
-    <nd ref='25296299' />
-    <nd ref='25296300' />
-    <nd ref='25296301' />
-    <nd ref='29534112' />
-    <nd ref='25296302' />
-    <nd ref='25296303' />
-    <nd ref='29704295' />
-    <nd ref='25296304' />
-    <nd ref='25296305' />
-    <nd ref='25296306' />
-    <nd ref='29535463' />
-    <nd ref='25296307' />
-    <nd ref='29704145' />
-    <nd ref='25296308' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C354' />
-    <tag k='highway' v='tertiary' />
-    <tag k='maxspeed' v='64' />
-    <tag k='note' v='40 mph' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269336' timestamp='2007-02-04T22:51:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639955' />
-    <nd ref='25640045' />
-    <nd ref='25640044' />
-    <tag k='highway' v='cycleway' />
-    <tag k='note' v='The position of this road is estimated based on the roads at either end' />
-    <tag k='name' v='Sea Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639446' timestamp='2006-06-01T09:39:13+01:00' user='nickw' visible='true'>
-    <nd ref='469889' />
-    <nd ref='20957214' />
-    <nd ref='20957204' />
-    <nd ref='469890' />
-    <nd ref='20957203' />
-    <nd ref='469891' />
-    <nd ref='325651' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Malmesbury Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999137' timestamp='2007-09-10T23:55:29+01:00' visible='true'>
-    <nd ref='635141' />
-    <nd ref='20971167' />
-    <nd ref='20971168' />
-    <nd ref='20971192' />
-    <nd ref='20971193' />
-    <nd ref='48958658' />
-    <nd ref='20971194' />
-    <nd ref='20971169' />
-    <nd ref='20971170' />
-    <nd ref='20971172' />
-    <nd ref='20971173' />
-    <nd ref='20971174' />
-    <nd ref='20971195' />
-    <nd ref='20971175' />
-    <nd ref='20971176' />
-    <nd ref='20971177' />
-    <nd ref='20971178' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='the local CC have the amazing ability to forget road signs around here...' />
-    <tag k='name' v='North Front' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999828' timestamp='2007-10-16T17:47:54+01:00' user='Dean Earley' visible='true'>
-    <nd ref='243871' />
-    <nd ref='243878' />
-    <nd ref='28246066' />
-    <nd ref='28246065' />
-    <nd ref='243881' />
-    <nd ref='243882' />
-    <nd ref='28582986' />
-    <nd ref='28246064' />
-    <nd ref='28246062' />
-    <nd ref='28246060' />
-    <nd ref='243880' />
-    <nd ref='243879' />
-    <nd ref='20976670' />
-    <nd ref='20976671' />
-    <nd ref='28246067' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordswood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540321' timestamp='2007-04-29T21:09:47+01:00' visible='true'>
-    <nd ref='28194381' />
-    <nd ref='28194383' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Goldcrest Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854831' timestamp='2007-05-21T22:59:05+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='13071388' />
-    <nd ref='29457979' />
-    <nd ref='28830693' />
-    <nd ref='13071389' />
-    <nd ref='13071387' />
-    <nd ref='28348319' />
-    <nd ref='13071386' />
-    <nd ref='28348314' />
-    <nd ref='13071385' />
-    <nd ref='13071384' />
-    <nd ref='13071383' />
-    <nd ref='28830620' />
-    <nd ref='13071382' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wakefield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='295631' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='2073213' />
-    <nd ref='2073253' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Sherborne Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546176' timestamp='2007-04-30T22:14:01+01:00' user='nickw' visible='true'>
-    <nd ref='28342610' />
-    <nd ref='28342611' />
-    <nd ref='28342612' />
-    <nd ref='28231139' />
-    <nd ref='28342613' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Freemantle Common Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4480966' timestamp='2007-08-12T23:13:03+01:00' user='Edward' visible='true'>
-    <nd ref='27467476' />
-    <nd ref='27467477' />
-    <nd ref='29132900' />
-    <nd ref='27467478' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='River View Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3129257' timestamp='2006-09-08T02:12:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964132' />
-    <nd ref='14964153' />
-    <nd ref='14964152' />
-    <nd ref='14964151' />
-    <nd ref='14964131' />
-    <nd ref='14964147' />
-    <nd ref='14964148' />
-    <nd ref='14964149' />
-    <nd ref='14964150' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8162993' timestamp='2007-12-09T06:31:18+00:00' user='andrewpmk' visible='true'>
-    <nd ref='28173710' />
-    <nd ref='28173796' />
-    <nd ref='14957855' />
-    <nd ref='14957856' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4329577' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640020' />
-    <nd ref='26346865' />
-    <nd ref='26346867' />
-    <nd ref='26346869' />
-    <nd ref='26346870' />
-    <nd ref='26346873' />
-    <nd ref='26346875' />
-    <nd ref='26346876' />
-    <nd ref='21598943' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bitterne Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3713847' timestamp='2007-10-26T15:04:20+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='18398419' />
-    <nd ref='18398420' />
-    <nd ref='18398399' />
-    <nd ref='18398400' />
-    <nd ref='18398402' />
-    <nd ref='18398403' />
-    <nd ref='18398404' />
-    <nd ref='18398405' />
-    <nd ref='18398407' />
-    <nd ref='18398408' />
-    <nd ref='18398409' />
-    <nd ref='18398410' />
-    <nd ref='18398412' />
-    <nd ref='18398413' />
-    <nd ref='18398414' />
-    <nd ref='18398415' />
-    <nd ref='18398416' />
-    <nd ref='18398417' />
-    <nd ref='18398418' />
-    <nd ref='18398419' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='Landsat for outline; name from NPE' />
-    <tag k='name' v='Great Covert' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8148800' timestamp='2007-05-26T20:16:31+01:00' visible='true'>
-    <nd ref='29632861' />
-    <nd ref='28339123' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4724598' timestamp='2007-06-08T23:30:34+01:00' visible='true'>
-    <nd ref='30096970' />
-    <nd ref='30096971' />
-    <nd ref='30096972' />
-    <nd ref='30096969' />
-    <nd ref='30096970' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126437' timestamp='2007-10-29T15:43:35+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25896424' />
-    <nd ref='25896419' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='C352' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4698175' timestamp='2007-06-02T19:04:04+01:00' visible='true'>
-    <nd ref='29872363' />
-    <nd ref='29872372' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Portway Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2249751' timestamp='2006-07-05T01:56:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254470' />
-    <nd ref='20966299' />
-    <nd ref='9280980' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Lances Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2147858' timestamp='2006-07-01T03:51:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9285002' />
-    <nd ref='650797' />
-    <nd ref='9285000' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Liverpool Street' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='19788363' timestamp='2008-01-04T19:26:30+00:00' user='nickw' visible='true'>
-    <nd ref='206162239' />
-    <nd ref='206162240' />
-    <nd ref='206162241' />
-    <nd ref='206162242' />
-    <nd ref='206162243' />
-    <nd ref='206162244' />
-    <nd ref='206162245' />
-    <nd ref='206162246' />
-    <nd ref='206162247' />
-    <nd ref='206162248' />
-    <nd ref='206162249' />
-    <nd ref='206162250' />
-    <nd ref='206162251' />
-    <nd ref='206162252' />
-    <nd ref='206162253' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Westfield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10481020' timestamp='2007-12-06T20:39:10+00:00' user='nickw' visible='true'>
-    <nd ref='21092041' />
-    <nd ref='153322101' />
-    <nd ref='87239993' />
-    <nd ref='87239732' />
-    <nd ref='87236104' />
-    <nd ref='87238586' />
-    <nd ref='87228870' />
-    <nd ref='21600470' />
-    <nd ref='21092042' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Rownhams Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4701681' timestamp='2007-06-03T14:54:29+01:00' visible='true'>
-    <nd ref='29909674' />
-    <nd ref='29909673' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150639' timestamp='2007-06-03T22:13:39+01:00' visible='true'>
-    <nd ref='29929855' />
-    <nd ref='29929856' />
-    <tag k='highway' v='unclassified' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Goodwood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136107' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282130' />
-    <nd ref='25282083' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698556' timestamp='2007-06-02T19:55:00+01:00' visible='true'>
-    <nd ref='28384701' />
-    <nd ref='28339131' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4698475' timestamp='2007-06-02T19:44:16+01:00' visible='true'>
-    <nd ref='29874151' />
-    <nd ref='29874154' />
-    <nd ref='29874145' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4644673' timestamp='2007-10-29T15:11:31+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29548710' />
-    <nd ref='29548709' />
-    <nd ref='29548708' />
-    <nd ref='29548707' />
-    <nd ref='29548711' />
-    <nd ref='29548712' />
-    <nd ref='29548713' />
-    <nd ref='29548710' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Owen Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998314' timestamp='2007-09-15T19:03:46+01:00' user='mike l' visible='true'>
-    <nd ref='254328' />
-    <nd ref='28801150' />
-    <nd ref='14957860' />
-    <nd ref='21378695' />
-    <nd ref='14957861' />
-    <nd ref='14957862' />
-    <nd ref='14957863' />
-    <nd ref='28932220' />
-    <nd ref='28932221' />
-    <nd ref='28932222' />
-    <nd ref='28932223' />
-    <nd ref='14957864' />
-    <nd ref='20965522' />
-    <nd ref='28932224' />
-    <nd ref='28932225' />
-    <nd ref='28932226' />
-    <nd ref='20965521' />
-    <nd ref='28932227' />
-    <nd ref='28932228' />
-    <nd ref='28932229' />
-    <nd ref='28932230' />
-    <nd ref='28932231' />
-    <nd ref='20965520' />
-    <nd ref='28932233' />
-    <nd ref='28932234' />
-    <nd ref='20965519' />
-    <nd ref='28932235' />
-    <nd ref='28932236' />
-    <nd ref='28932237' />
-    <nd ref='28932238' />
-    <nd ref='20965518' />
-    <nd ref='20965517' />
-    <nd ref='50797942' />
-    <nd ref='20965514' />
-    <nd ref='28932239' />
-    <nd ref='20965515' />
-    <nd ref='28932240' />
-    <nd ref='28932241' />
-    <nd ref='28932243' />
-    <nd ref='28932242' />
-    <nd ref='20965516' />
-    <tag k='ref' v='C69' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Rownhams Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4589164' timestamp='2007-05-13T10:11:06+01:00' user='nickw' visible='true'>
-    <nd ref='29026771' />
-    <nd ref='29026665' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woodlands Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4797564' timestamp='2007-06-22T21:44:02+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780752' />
-    <nd ref='30780800' />
-    <nd ref='30780740' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133953' timestamp='2006-12-14T14:16:05+00:00' user='David Currie' visible='true'>
-    <nd ref='21579412' />
-    <nd ref='21579408' />
-    <nd ref='21579409' />
-    <nd ref='21579411' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Percivale Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209583' timestamp='2007-01-06T14:48:26+00:00' user='nickw' visible='true'>
-    <nd ref='24924320' />
-    <nd ref='24924069' />
-    <nd ref='24924321' />
-    <nd ref='19111054' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mead Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679922' timestamp='2007-05-28T19:39:30+01:00' visible='true'>
-    <nd ref='29730493' />
-    <nd ref='29730500' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Browning Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4707452' timestamp='2007-10-16T02:44:11+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29953497' />
-    <nd ref='29953498' />
-    <nd ref='29953499' />
-    <nd ref='29953500' />
-    <nd ref='29953501' />
-    <nd ref='29953502' />
-    <nd ref='29953503' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Corinthian Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536664' timestamp='2007-04-29T08:20:46+01:00' visible='true'>
-    <nd ref='28173781' />
-    <nd ref='28194448' />
-    <nd ref='28194440' />
-    <nd ref='28194434' />
-    <nd ref='28194433' />
-    <nd ref='28194425' />
-    <nd ref='28246667' />
-    <nd ref='28194423' />
-    <nd ref='28194422' />
-    <nd ref='28246666' />
-    <nd ref='28194418' />
-    <nd ref='28194414' />
-    <nd ref='28194410' />
-    <nd ref='28194406' />
-    <nd ref='28194401' />
-    <nd ref='28194400' />
-    <nd ref='28194394' />
-    <nd ref='28194384' />
-    <nd ref='28194376' />
-    <nd ref='28194375' />
-    <nd ref='28194369' />
-    <nd ref='28194355' />
-    <nd ref='28194354' />
-    <nd ref='28194350' />
-    <nd ref='28194340' />
-    <nd ref='28194337' />
-    <nd ref='28194338' />
-    <nd ref='28194339' />
-    <nd ref='28194328' />
-    <nd ref='28194327' />
-    <nd ref='28173757' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Sandpiper Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3087955' timestamp='2006-09-02T18:32:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='862475' />
-    <nd ref='14726559' />
-    <nd ref='14726570' />
-    <nd ref='254533' />
-    <nd ref='254534' />
-    <nd ref='254535' />
-    <nd ref='254536' />
-    <nd ref='254537' />
-    <nd ref='14726547' />
-    <nd ref='14726549' />
-    <nd ref='14726550' />
-    <nd ref='14726551' />
-    <nd ref='14726552' />
-    <nd ref='254489' />
-    <nd ref='254882' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='The Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556219' timestamp='2007-10-29T07:53:27+00:00' user='nickw' visible='true'>
-    <nd ref='91109764' />
-    <nd ref='91109765' />
-    <nd ref='91109766' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Seacole Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556622' timestamp='2007-10-29T08:16:33+00:00' user='nickw' visible='true'>
-    <nd ref='91124442' />
-    <nd ref='91124444' />
-    <nd ref='91124448' />
-    <nd ref='91124455' />
-    <nd ref='91120345' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thorndike Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788383' timestamp='2008-01-04T19:28:06+00:00' user='nickw' visible='true'>
-    <nd ref='206162413' />
-    <nd ref='206162414' />
-    <nd ref='206162415' />
-    <nd ref='206162416' />
-    <nd ref='206162417' />
-    <nd ref='206162418' />
-    <nd ref='206162419' />
-    <nd ref='206162420' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kent Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3283' timestamp='2007-08-12T23:15:47+01:00' user='Edward' visible='true'>
-    <nd ref='700513' />
-    <nd ref='700514' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Norris Hill' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4625932' timestamp='2007-05-20T10:19:36+01:00' user='nickw' visible='true'>
-    <nd ref='29380417' />
-    <nd ref='29380422' />
-    <nd ref='29380423' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22700968' timestamp='2008-01-26T18:09:52+00:00' user='stuphi' visible='true'>
-    <nd ref='20961061' />
-    <nd ref='325270' />
-    <nd ref='325271' />
-    <nd ref='325272' />
-    <nd ref='325255' />
-    <nd ref='325256' />
-    <nd ref='325257' />
-    <nd ref='325258' />
-    <nd ref='325259' />
-    <nd ref='20961060' />
-    <nd ref='325253' />
-    <nd ref='325265' />
-    <nd ref='325252' />
-    <nd ref='325251' />
-    <nd ref='325249' />
-    <nd ref='325247' />
-    <nd ref='325245' />
-    <nd ref='325244' />
-    <nd ref='325242' />
-    <nd ref='325241' />
-    <nd ref='325239' />
-    <nd ref='325238' />
-    <nd ref='325237' />
-    <nd ref='20961058' />
-    <nd ref='325236' />
-    <nd ref='325234' />
-    <nd ref='325232' />
-    <nd ref='325231' />
-    <nd ref='325230' />
-    <nd ref='325226' />
-    <nd ref='20961055' />
-    <nd ref='325224' />
-    <nd ref='325222' />
-    <nd ref='20961053' />
-    <nd ref='325221' />
-    <nd ref='325219' />
-    <nd ref='325217' />
-    <nd ref='325215' />
-    <nd ref='325212' />
-    <nd ref='325210' />
-    <nd ref='325208' />
-    <nd ref='325207' />
-    <nd ref='325206' />
-    <nd ref='325204' />
-    <nd ref='325200' />
-    <nd ref='325202' />
-    <nd ref='325199' />
-    <nd ref='20961050' />
-    <nd ref='325197' />
-    <nd ref='325196' />
-    <nd ref='325194' />
-    <nd ref='325193' />
-    <nd ref='325190' />
-    <nd ref='243511771' />
-    <tag k='horse' v='no' />
-    <tag k='oneway' v='true' />
-    <tag k='foot' v='no' />
-    <tag k='ref' v='M27' />
-    <tag k='highway' v='motorway' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='M27 westbound' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='8148388' timestamp='2007-11-25T22:27:52+00:00' user='southglos' visible='true'>
-    <nd ref='28194504' />
-    <nd ref='28194503' />
-    <nd ref='28194494' />
-    <nd ref='28194497' />
-    <nd ref='28194498' />
-    <nd ref='28194500' />
-    <nd ref='28194502' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Newitt Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19390427' timestamp='2008-01-01T18:33:43+00:00' user='Milliams' visible='true'>
-    <nd ref='201643747' />
-    <nd ref='28903636' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mitchell Way' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </way>
-  <way id='8148507' timestamp='2007-04-29T20:37:17+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243475' />
-    <nd ref='28243465' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643755' timestamp='2007-05-24T00:05:27+01:00' visible='true'>
-    <nd ref='28418523' />
-    <nd ref='28418522' />
-    <nd ref='17721031' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='O'Connell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084411' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689088' />
-    <nd ref='21689131' />
-    <nd ref='21689130' />
-    <nd ref='21689057' />
-    <nd ref='21689129' />
-    <nd ref='21689128' />
-    <nd ref='21689127' />
-    <nd ref='21689126' />
-    <nd ref='21689125' />
-    <nd ref='21689124' />
-    <nd ref='21689123' />
-    <nd ref='21689122' />
-    <nd ref='21689121' />
-    <nd ref='21689120' />
-    <nd ref='21689119' />
-    <nd ref='21689118' />
-    <nd ref='21689106' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Laburnum Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1660' timestamp='2006-06-04T00:35:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='329590' />
-    <nd ref='329470' />
-    <nd ref='329471' />
-    <nd ref='329472' />
-    <nd ref='329473' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Sirdar Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1639806' timestamp='2006-06-04T19:03:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254634' />
-    <nd ref='254318' />
-    <nd ref='254954' />
-    <nd ref='330224' />
-    <nd ref='330227' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4488903' timestamp='2007-06-15T23:10:03+01:00' visible='true'>
-    <nd ref='25340633' />
-    <nd ref='29392356' />
-    <nd ref='27513797' />
-    <nd ref='28141318' />
-    <nd ref='28141320' />
-    <nd ref='28141321' />
-    <nd ref='30410996' />
-    <nd ref='28141322' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chamberlayne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120157' timestamp='2007-08-12T23:14:45+01:00' user='Edward' visible='true'>
-    <nd ref='675886' />
-    <nd ref='700503' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Newton Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4661847' timestamp='2007-05-26T20:15:49+01:00' visible='true'>
-    <nd ref='17721024' />
-    <nd ref='29632803' />
-    <nd ref='29632804' />
-    <nd ref='29632809' />
-    <nd ref='29632810' />
-    <nd ref='29632812' />
-    <nd ref='29632813' />
-    <nd ref='29632814' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cedar Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601432' timestamp='2007-10-30T17:25:41+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92684347' />
-    <nd ref='92684348' />
-    <nd ref='92684349' />
-    <nd ref='92684350' />
-    <nd ref='92684351' />
-    <nd ref='92684352' />
-    <nd ref='92684347' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4661835' timestamp='2007-11-14T16:33:03+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='29632435' />
-    <nd ref='29632436' />
-    <nd ref='114097643' />
-    <nd ref='29632437' />
-    <nd ref='29632438' />
-    <nd ref='29632430' />
-    <nd ref='29632431' />
-    <nd ref='29632432' />
-    <nd ref='29632433' />
-    <nd ref='29632434' />
-    <nd ref='29632435' />
-    <tag k='leisure' v='park' />
-    <tag k='source' v='landsat' />
-    <tag k='name' v='Lakeside Country Park' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </way>
-  <way id='16414806' timestamp='2007-12-14T21:40:37+00:00' user='nickw' visible='true'>
-    <nd ref='28372808' />
-    <nd ref='28372766' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chalybeate Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4235073' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='25282149' />
-    <nd ref='25282148' />
-    <nd ref='25282147' />
-    <nd ref='25282146' />
-    <nd ref='25282145' />
-    <nd ref='25282144' />
-    <nd ref='25282150' />
-    <nd ref='25282149' />
-    <tag k='leisure' v='playground' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061531' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='388869' />
-    <nd ref='388870' />
-    <nd ref='388871' />
-    <nd ref='388872' />
-    <nd ref='388873' />
-    <nd ref='388874' />
-    <nd ref='388875' />
-    <nd ref='388876' />
-    <nd ref='388877' />
-    <nd ref='247790' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948353' timestamp='2007-12-10T21:06:32+00:00' user='sladen' visible='true'>
-    <nd ref='48967846' />
-    <nd ref='160423786' />
-    <nd ref='20973121' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4636144' timestamp='2007-05-22T00:19:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464232' />
-    <nd ref='29464233' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lordswood Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683724' timestamp='2007-05-30T21:37:54+01:00' user='nickw' visible='true'>
-    <nd ref='29764419' />
-    <nd ref='29764421' />
-    <nd ref='29764426' />
-    <nd ref='29764425' />
-    <nd ref='29764424' />
-    <nd ref='29764423' />
-    <nd ref='29794385' />
-    <nd ref='29764422' />
-    <nd ref='29764421' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fernwood Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690685' timestamp='2007-06-07T11:36:04+01:00' visible='true'>
-    <nd ref='29815071' />
-    <nd ref='29815072' />
-    <nd ref='29815059' />
-    <nd ref='29815060' />
-    <nd ref='29815061' />
-    <nd ref='29815062' />
-    <nd ref='29815063' />
-    <nd ref='29815064' />
-    <nd ref='29815065' />
-    <nd ref='29815066' />
-    <nd ref='29815067' />
-    <nd ref='29815068' />
-    <nd ref='29815069' />
-    <nd ref='29815070' />
-    <nd ref='29815071' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548017' timestamp='2007-05-01T10:05:39+01:00' visible='true'>
-    <nd ref='28372729' />
-    <nd ref='28372743' />
-    <nd ref='28372744' />
-    <nd ref='28372745' />
-    <nd ref='28372754' />
-    <nd ref='28372746' />
-    <nd ref='28372747' />
-    <nd ref='28372748' />
-    <nd ref='28372749' />
-    <nd ref='28372750' />
-    <nd ref='28372751' />
-    <nd ref='28372752' />
-    <nd ref='28372753' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chestnut Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540338' timestamp='2007-04-29T21:10:00+01:00' visible='true'>
-    <nd ref='28194420' />
-    <nd ref='28194421' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hawfinch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1683' timestamp='2007-05-13T10:02:51+01:00' user='nickw' visible='true'>
-    <nd ref='306288' />
-    <nd ref='306290' />
-    <nd ref='306291' />
-    <nd ref='306292' />
-    <nd ref='29026666' />
-    <nd ref='306293' />
-    <nd ref='544316' />
-    <nd ref='658424' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westwood Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10314624' timestamp='2007-10-25T21:08:43+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='87238586' />
-    <nd ref='87239051' />
-    <nd ref='87239486' />
-    <nd ref='87242888' />
-    <nd ref='87238687' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dolton Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8152662' timestamp='2007-06-17T22:07:58+01:00' visible='true'>
-    <nd ref='30507143' />
-    <nd ref='30507145' />
-    <nd ref='30507147' />
-    <nd ref='30507149' />
-    <nd ref='30507151' />
-    <nd ref='30507152' />
-    <nd ref='30507154' />
-    <nd ref='30507156' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Whyteways' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130060' timestamp='2007-06-09T19:49:15+01:00' user='nickw' visible='true'>
-    <nd ref='20134834' />
-    <nd ref='20134835' />
-    <nd ref='20134837' />
-    <nd ref='20134838' />
-    <nd ref='20134839' />
-    <nd ref='20134840' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Culvery Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8100071' timestamp='2007-10-04T19:42:54+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29704342' />
-    <nd ref='29711121' />
-    <nd ref='29711122' />
-    <nd ref='29838346' />
-    <nd ref='29711123' />
-    <nd ref='29925688' />
-    <nd ref='29711124' />
-    <nd ref='29711125' />
-    <nd ref='29925203' />
-    <nd ref='29711126' />
-    <nd ref='29708046' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4008578' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='21141411' />
-    <nd ref='330447' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bellemoor Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546160' timestamp='2007-04-30T22:13:59+01:00' user='nickw' visible='true'>
-    <nd ref='28342564' />
-    <nd ref='28342587' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Merry Oak Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4712252' timestamp='2007-06-05T23:05:30+01:00' user='nickw' visible='true'>
-    <nd ref='29998361' />
-    <nd ref='29998362' />
-    <nd ref='29998363' />
-    <nd ref='29998364' />
-    <nd ref='29998365' />
-    <nd ref='29998359' />
-    <nd ref='29998360' />
-    <nd ref='29998361' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077043' timestamp='2006-12-16T10:14:13+00:00' user='nickw' visible='true'>
-    <nd ref='21275763' />
-    <nd ref='21275761' />
-    <nd ref='21600423' />
-    <nd ref='21600510' />
-    <nd ref='21600418' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Randolph Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540003' timestamp='2007-04-29T20:37:33+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237244' />
-    <nd ref='28244112' />
-    <nd ref='28244119' />
-    <nd ref='28244126' />
-    <nd ref='28244132' />
-    <nd ref='28244140' />
-    <nd ref='28244106' />
-    <nd ref='28244146' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cleethorpes Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724592' timestamp='2007-06-08T23:30:32+01:00' visible='true'>
-    <nd ref='30096952' />
-    <nd ref='30096951' />
-    <nd ref='30096950' />
-    <nd ref='30096953' />
-    <nd ref='30096952' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703445' timestamp='2007-06-03T21:03:09+01:00' visible='true'>
-    <nd ref='29925347' />
-    <nd ref='29926803' />
-    <nd ref='29926802' />
-    <nd ref='29926801' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4642369' timestamp='2007-11-28T12:24:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29530368' />
-    <nd ref='29530367' />
-    <nd ref='29530366' />
-    <nd ref='29704619' />
-    <nd ref='29530365' />
-    <nd ref='29530363' />
-    <nd ref='29704599' />
-    <nd ref='29512665' />
-    <nd ref='30505708' />
-    <nd ref='30505714' />
-    <nd ref='30505698' />
-    <nd ref='29530323' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='St Catherine's Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151460' timestamp='2007-06-03T19:02:05+01:00' visible='true'>
-    <nd ref='29914416' />
-    <nd ref='29914419' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ladywood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269314' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639943' />
-    <nd ref='25639949' />
-    <nd ref='25639950' />
-    <nd ref='25639951' />
-    <nd ref='25639952' />
-    <nd ref='25639953' />
-    <nd ref='25639954' />
-    <nd ref='25639955' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Sea Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678346' timestamp='2007-06-16T16:26:52+01:00' visible='true'>
-    <nd ref='29711861' />
-    <nd ref='30431993' />
-    <nd ref='29711862' />
-    <nd ref='29711863' />
-    <nd ref='30223958' />
-    <nd ref='29711864' />
-    <nd ref='29711865' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rookwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360444' timestamp='2007-10-26T16:05:52+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='20972830' />
-    <nd ref='26575737' />
-    <nd ref='26575738' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4015826' timestamp='2006-11-26T00:16:01+00:00' user='nickw' visible='true'>
-    <nd ref='21275709' />
-    <nd ref='21275637' />
-    <nd ref='21275869' />
-    <nd ref='21275697' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Marlborough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539745' timestamp='2007-04-29T20:03:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240303' />
-    <nd ref='28240302' />
-    <nd ref='28240300' />
-    <nd ref='28240305' />
-    <nd ref='28240306' />
-    <nd ref='28240308' />
-    <nd ref='28240309' />
-    <nd ref='28240311' />
-    <nd ref='28240312' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Franklyn Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129255' timestamp='2006-09-08T02:12:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964130' />
-    <nd ref='14964140' />
-    <nd ref='14964141' />
-    <nd ref='14964142' />
-    <nd ref='14964143' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rampart Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4271531' timestamp='2007-10-28T19:14:40+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='25675799' />
-    <nd ref='25675815' />
-    <nd ref='87844668' />
-    <nd ref='25675800' />
-    <nd ref='25675801' />
-    <tag k='highway' v='tertiary' />
-    <tag k='note' v='These are primarily inside Southampton docks, and not strictly public access :o)' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='2854823' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071358' />
-    <nd ref='13071357' />
-    <nd ref='13071370' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Juniper Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13638478' timestamp='2007-11-20T11:52:26+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180243' />
-    <nd ref='125574207' />
-    <nd ref='125574208' />
-    <nd ref='125574209' />
-    <nd ref='125574210' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5b' />
-  </way>
-  <way id='4438014' timestamp='2007-10-16T17:24:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='27238995' />
-    <nd ref='27238988' />
-    <nd ref='27238989' />
-    <nd ref='27238990' />
-    <nd ref='27238991' />
-    <nd ref='27238992' />
-    <nd ref='20972774' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342677' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447522' />
-    <nd ref='26447530' />
-    <nd ref='26447394' />
-    <nd ref='26447528' />
-    <nd ref='254556' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Rochester Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546164' timestamp='2007-04-30T22:13:59+01:00' user='nickw' visible='true'>
-    <nd ref='28342561' />
-    <nd ref='28230849' />
-    <nd ref='28342572' />
-    <nd ref='28342571' />
-    <nd ref='28342570' />
-    <nd ref='28342538' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Acacia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1695' timestamp='2007-11-29T22:36:00+00:00' user='nickw' visible='true'>
-    <nd ref='254706' />
-    <nd ref='25303945' />
-    <nd ref='325642' />
-    <nd ref='325643' />
-    <nd ref='658450' />
-    <nd ref='254461' />
-    <nd ref='325698' />
-    <nd ref='658451' />
-    <nd ref='25303946' />
-    <nd ref='254429' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Lodge Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4211088' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24949810' />
-    <nd ref='21613505' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4711405' timestamp='2007-06-05T21:01:51+01:00' visible='true'>
-    <nd ref='29816642' />
-    <nd ref='29707283' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='-1' />
-  </way>
-  <way id='2651688' timestamp='2006-07-29T14:14:28+01:00' user='nickw' visible='true'>
-    <nd ref='301600' />
-    <nd ref='329825' />
-    <nd ref='301603' />
-    <nd ref='301604' />
-    <nd ref='301605' />
-    <nd ref='27021797' />
-    <nd ref='27021798' />
-    <nd ref='301606' />
-    <nd ref='19035796' />
-    <nd ref='301607' />
-    <nd ref='301608' />
-    <nd ref='301609' />
-    <nd ref='301610' />
-    <nd ref='301611' />
-    <nd ref='331353' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='motorcar' v='no' />
-    <tag k='name' v='Lovers Walk' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4635737' timestamp='2008-02-03T06:09:19+00:00' user='sladen' visible='true'>
-    <nd ref='29462621' />
-    <nd ref='29462622' />
-    <nd ref='29462624' />
-    <nd ref='29462625' />
-    <nd ref='29462629' />
-    <nd ref='29462628' />
-    <nd ref='29462609' />
-    <nd ref='29462610' />
-    <nd ref='29462612' />
-    <nd ref='29462613' />
-    <nd ref='29462614' />
-    <nd ref='29462616' />
-    <nd ref='29462617' />
-    <nd ref='29462618' />
-    <nd ref='29462620' />
-    <nd ref='29462621' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8152670' timestamp='2007-06-17T22:25:19+01:00' visible='true'>
-    <nd ref='29928996' />
-    <nd ref='29928998' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parham Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3273' timestamp='2007-10-16T23:45:42+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700387' />
-    <nd ref='29163389' />
-    <nd ref='700386' />
-    <nd ref='700388' />
-    <nd ref='41141832' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Westridge Road' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999850' timestamp='2006-11-13T21:50:58+00:00' user='nickw' visible='true'>
-    <nd ref='20976791' />
-    <nd ref='20976800' />
-    <nd ref='20976801' />
-    <nd ref='20976662' />
-    <nd ref='20976802' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harland Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585200' timestamp='2007-05-12T09:49:26+01:00' user='nickw' visible='true'>
-    <nd ref='25783087' />
-    <nd ref='29001300' />
-    <nd ref='29001464' />
-    <nd ref='29001465' />
-    <nd ref='29001466' />
-    <nd ref='29001467' />
-    <nd ref='29001468' />
-    <nd ref='29001469' />
-    <nd ref='29001470' />
-    <nd ref='29001471' />
-    <nd ref='25783129' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536151' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254486' />
-    <nd ref='28179498' />
-    <nd ref='28179499' />
-    <nd ref='28179500' />
-    <nd ref='25896252' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Birch Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536218' timestamp='2007-12-07T13:28:57+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180226' />
-    <nd ref='28180228' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4480990' timestamp='2007-04-19T17:55:59+01:00' visible='true'>
-    <nd ref='27467558' />
-    <nd ref='27467561' />
-    <nd ref='27467564' />
-    <nd ref='27467566' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oliver Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546185' timestamp='2007-04-30T22:16:52+01:00' user='nickw' visible='true'>
-    <nd ref='28342764' />
-    <nd ref='28342768' />
-    <nd ref='28342770' />
-    <nd ref='28342772' />
-    <nd ref='28342774' />
-    <nd ref='28342781' />
-    <nd ref='28342822' />
-    <nd ref='28342786' />
-    <nd ref='28342764' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536704' timestamp='2007-04-29T08:58:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194904' />
-    <nd ref='28194905' />
-    <nd ref='28194906' />
-    <nd ref='28194907' />
-    <nd ref='28194908' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Little Oak Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551573' timestamp='2007-05-26T20:16:31+01:00' visible='true'>
-    <nd ref='28418266' />
-    <nd ref='29632854' />
-    <nd ref='29632890' />
-    <nd ref='29632861' />
-    <nd ref='29632881' />
-    <nd ref='29632857' />
-    <nd ref='28339121' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1656' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='544333' />
-    <nd ref='544334' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Harrison Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3996460' timestamp='2006-11-10T08:43:44+00:00' user='nickw' visible='true'>
-    <nd ref='388947' />
-    <nd ref='388948' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pansy Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580487' timestamp='2007-05-11T00:51:26+01:00' visible='true'>
-    <nd ref='28935745' />
-    <nd ref='28935746' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119866' timestamp='2006-06-04T00:35:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306309' />
-    <nd ref='306310' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brookvale Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4586163' timestamp='2007-05-12T15:28:46+01:00' user='nickw' visible='true'>
-    <nd ref='29009019' />
-    <nd ref='29009021' />
-    <nd ref='29009022' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tresillian Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079318' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636937' />
-    <nd ref='21636919' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harold Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084407' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689076' />
-    <nd ref='21689077' />
-    <nd ref='21689078' />
-    <nd ref='21689079' />
-    <nd ref='21689080' />
-    <nd ref='21689083' />
-    <nd ref='21689082' />
-    <nd ref='21689081' />
-    <nd ref='388887' />
-    <nd ref='21689073' />
-    <nd ref='21689074' />
-    <nd ref='21689075' />
-    <nd ref='21689076' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Carnation Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8010506' timestamp='2007-09-26T21:57:29+01:00' visible='true'>
-    <nd ref='20973119' />
-    <nd ref='59936559' />
-    <nd ref='59936560' />
-    <nd ref='59936561' />
-    <nd ref='59936562' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3910151' timestamp='2006-10-28T01:46:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13564800' />
-    <nd ref='20130946' />
-    <nd ref='20130940' />
-    <nd ref='20130942' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coachmans Copse' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999833' timestamp='2007-10-29T07:50:32+00:00' user='nickw' visible='true'>
-    <nd ref='14743146' />
-    <nd ref='20976711' />
-    <nd ref='91109271' />
-    <nd ref='20976712' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Seymour Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558188' timestamp='2007-05-02T23:58:17+01:00' visible='true'>
-    <nd ref='28583033' />
-    <nd ref='28583062' />
-    <nd ref='28583065' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Jex Blake Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4475487' timestamp='2007-04-17T22:04:03+01:00' visible='true'>
-    <nd ref='387817' />
-    <nd ref='27434182' />
-    <nd ref='27434183' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Donnington Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148515' timestamp='2007-04-29T20:37:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243675' />
-    <nd ref='28243678' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Undercliff Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546234' timestamp='2007-04-30T22:24:08+01:00' user='nickw' visible='true'>
-    <nd ref='20831124' />
-    <nd ref='28343220' />
-    <nd ref='430656' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Winchester Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4476663' timestamp='2007-04-18T02:00:25+01:00' visible='true'>
-    <nd ref='27440007' />
-    <nd ref='27440008' />
-    <nd ref='27440011' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580483' timestamp='2007-05-11T00:51:24+01:00' visible='true'>
-    <nd ref='28935737' />
-    <nd ref='28935738' />
-    <nd ref='28935739' />
-    <nd ref='28935743' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121432' timestamp='2006-05-21T09:20:18+01:00' user='nickw' visible='true'>
-    <nd ref='700396' />
-    <nd ref='4931288' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodside Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4379592' timestamp='2007-03-23T22:38:21+00:00' user='nickw' visible='true'>
-    <nd ref='26727689' />
-    <nd ref='26727688' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chatsworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578751' timestamp='2006-10-07T00:25:25+01:00' user='nickw' visible='true'>
-    <nd ref='17724275' />
-    <nd ref='17724276' />
-    <nd ref='17724277' />
-    <nd ref='17724233' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Water Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269318' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25639964' />
-    <nd ref='25639965' />
-    <nd ref='25639966' />
-    <nd ref='25639967' />
-    <nd ref='25639968' />
-    <nd ref='25639969' />
-    <nd ref='25639970' />
-    <nd ref='25639971' />
-    <nd ref='25639972' />
-    <nd ref='25639973' />
-    <nd ref='25639963' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Defender Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008586' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141427' />
-    <nd ref='21141387' />
-    <nd ref='21141422' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vincent Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698471' timestamp='2007-06-02T19:44:15+01:00' visible='true'>
-    <nd ref='29874139' />
-    <nd ref='29874141' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Tichborne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4800838' timestamp='2007-06-23T18:53:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='675855' />
-    <nd ref='474646' />
-    <nd ref='20107348' />
-    <nd ref='10537328' />
-    <nd ref='474647' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='C194' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='16610269' timestamp='2007-12-15T20:18:40+00:00' user='nickw' visible='true'>
-    <nd ref='171533014' />
-    <nd ref='171533043' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Briarswood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4254576' timestamp='2007-01-27T23:33:17+00:00' visible='true'>
-    <nd ref='700406' />
-    <nd ref='25480797' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4074120' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561570' />
-    <nd ref='21561526' />
-    <nd ref='21561576' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Didcot Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723923' timestamp='2007-12-08T20:09:11+00:00' user='nickw' visible='true'>
-    <nd ref='157201975' />
-    <nd ref='157201972' />
-    <nd ref='157201977' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northolt Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13251968' timestamp='2007-11-18T19:12:33+00:00' user='nickw' visible='true'>
-    <nd ref='122337281' />
-    <nd ref='122337287' />
-    <nd ref='122337293' />
-    <nd ref='122337301' />
-    <nd ref='122337306' />
-    <nd ref='122337311' />
-    <nd ref='21275820' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Waterhouse Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005401' timestamp='2006-11-19T12:09:21+00:00' user='nickw' visible='true'>
-    <nd ref='21091831' />
-    <nd ref='21091855' />
-    <nd ref='21091856' />
-    <nd ref='21091857' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hewitts Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585215' timestamp='2007-05-12T09:51:47+01:00' user='nickw' visible='true'>
-    <nd ref='29001307' />
-    <nd ref='254256' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540328' timestamp='2007-04-29T21:09:56+01:00' visible='true'>
-    <nd ref='28194397' />
-    <nd ref='28194399' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Siskin Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8428690' timestamp='2007-12-06T21:17:13+00:00' user='Dean Earley' visible='true'>
-    <nd ref='28212756' />
-    <nd ref='28212755' />
-    <nd ref='254729' />
-    <nd ref='28212756' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577436' timestamp='2007-05-09T23:36:11+01:00' visible='true'>
-    <nd ref='28903372' />
-    <nd ref='28903384' />
-    <nd ref='28903386' />
-    <nd ref='28903388' />
-    <nd ref='28903390' />
-    <nd ref='28903392' />
-    <nd ref='28903394' />
-    <nd ref='28903396' />
-    <nd ref='28903402' />
-    <nd ref='28903401' />
-    <nd ref='28903400' />
-    <nd ref='28903398' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='name' v='Airways Distribution Park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8129546' timestamp='2007-05-22T00:20:34+01:00' user='Dean Earley' visible='true'>
-    <nd ref='19229538' />
-    <nd ref='29464243' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sherwood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4000066' timestamp='2006-11-14T02:01:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='518764' />
-    <nd ref='20979930' />
-    <nd ref='20971145' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brintons Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999837' timestamp='2006-11-13T21:39:23+00:00' user='nickw' visible='true'>
-    <nd ref='20976701' />
-    <nd ref='20976702' />
-    <nd ref='20976703' />
-    <nd ref='20976704' />
-    <nd ref='20976705' />
-    <nd ref='20976706' />
-    <nd ref='20976707' />
-    <nd ref='20976708' />
-    <nd ref='20976709' />
-    <nd ref='20976698' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Linford Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196521' timestamp='2007-01-04T21:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='24668373' />
-    <nd ref='24668302' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4253362' timestamp='2007-01-27T14:11:10+00:00' user='nickw' visible='true'>
-    <nd ref='25471835' />
-    <nd ref='25471866' />
-    <nd ref='25471865' />
-    <nd ref='25471847' />
-    <nd ref='474860' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10517893' timestamp='2007-10-28T20:35:18+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90592369' />
-    <nd ref='90592370' />
-    <nd ref='90592371' />
-    <nd ref='90592372' />
-    <nd ref='90592373' />
-    <nd ref='90592374' />
-    <nd ref='90592375' />
-    <nd ref='90592376' />
-    <nd ref='90592377' />
-    <nd ref='90592378' />
-    <nd ref='90592379' />
-    <nd ref='90592380' />
-    <nd ref='90592381' />
-    <nd ref='90592369' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4679915' timestamp='2007-05-28T19:39:24+01:00' visible='true'>
-    <nd ref='29728893' />
-    <nd ref='29728890' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701678' timestamp='2007-06-03T14:54:28+01:00' visible='true'>
-    <nd ref='29909660' />
-    <nd ref='29909661' />
-    <nd ref='29909662' />
-    <nd ref='29909663' />
-    <nd ref='29909664' />
-    <nd ref='29909655' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4379657' timestamp='2007-03-23T22:53:34+00:00' user='nickw' visible='true'>
-    <nd ref='26728571' />
-    <nd ref='26727673' />
-    <nd ref='26781178' />
-    <nd ref='26781179' />
-    <nd ref='26781180' />
-    <nd ref='26781182' />
-    <nd ref='26781183' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Norton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580480' timestamp='2007-05-11T00:51:23+01:00' visible='true'>
-    <nd ref='28935724' />
-    <nd ref='28935725' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8280658' timestamp='2007-10-16T17:22:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='530521' />
-    <nd ref='15360183' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Stoneham Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077068' timestamp='2008-01-04T19:25:08+00:00' user='nickw' visible='true'>
-    <nd ref='254676' />
-    <nd ref='29730503' />
-    <nd ref='254675' />
-    <nd ref='14745484' />
-    <nd ref='14745478' />
-    <nd ref='17721019' />
-    <nd ref='14745476' />
-    <nd ref='206162105' />
-    <nd ref='19111039' />
-    <nd ref='19111048' />
-    <nd ref='19111040' />
-    <nd ref='19111041' />
-    <nd ref='19111046' />
-    <nd ref='19111045' />
-    <nd ref='19111044' />
-    <nd ref='19111043' />
-    <nd ref='19111042' />
-    <nd ref='19111038' />
-    <tag k='ref' v='A335' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Leigh Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3295' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700530' />
-    <nd ref='700534' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Norwich Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8148519' timestamp='2007-04-29T20:37:33+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244158' />
-    <nd ref='28244164' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gort Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005419' timestamp='2006-11-19T12:09:23+00:00' user='nickw' visible='true'>
-    <nd ref='11419633' />
-    <nd ref='21091878' />
-    <nd ref='21636947' />
-    <nd ref='21091879' />
-    <nd ref='21091880' />
-    <nd ref='21275714' />
-    <nd ref='21091832' />
-    <nd ref='21561541' />
-    <nd ref='21091881' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Janson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577384' timestamp='2007-05-09T23:03:54+01:00' visible='true'>
-    <nd ref='28903062' />
-    <nd ref='28903063' />
-    <nd ref='28903060' />
-    <nd ref='28903061' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3987526' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831103' />
-    <nd ref='20831104' />
-    <nd ref='20831105' />
-    <nd ref='20831098' />
-    <nd ref='20831099' />
-    <nd ref='20831100' />
-    <nd ref='20831101' />
-    <nd ref='20831102' />
-    <nd ref='20831103' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grosvenor Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079322' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636941' />
-    <nd ref='21636942' />
-    <nd ref='21636920' />
-    <nd ref='21636943' />
-    <nd ref='21636944' />
-    <nd ref='21636918' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Henry Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540735' timestamp='2007-04-29T21:43:21+01:00' visible='true'>
-    <nd ref='28249787' />
-    <nd ref='28249791' />
-    <nd ref='28249796' />
-    <nd ref='28249799' />
-    <nd ref='28249802' />
-    <nd ref='28249804' />
-    <nd ref='27239004' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='King George's Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148392' timestamp='2007-04-29T08:58:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194907' />
-    <nd ref='28194909' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Little Oak Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540952' timestamp='2007-04-29T22:00:53+01:00' visible='true'>
-    <nd ref='28252901' />
-    <nd ref='28252896' />
-    <nd ref='28252897' />
-    <nd ref='28252900' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tintagel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2535341' timestamp='2008-01-25T18:30:40+00:00' visible='true'>
-    <nd ref='530518' />
-    <nd ref='27021833' />
-    <nd ref='25303110' />
-    <nd ref='11151901' />
-    <nd ref='27021832' />
-    <nd ref='27021831' />
-    <nd ref='11151902' />
-    <nd ref='11151903' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703419' timestamp='2007-06-03T21:00:17+01:00' visible='true'>
-    <nd ref='29925346' />
-    <nd ref='29926695' />
-    <nd ref='29926696' />
-    <nd ref='29926697' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dyram Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698467' timestamp='2007-06-02T19:44:14+01:00' visible='true'>
-    <nd ref='29874143' />
-    <nd ref='29874148' />
-    <nd ref='29874149' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Doncaster Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601348' timestamp='2007-10-30T17:24:15+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92683062' />
-    <nd ref='92683064' />
-    <nd ref='92683065' />
-    <nd ref='92683066' />
-    <nd ref='92683062' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Beta House' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4077029' timestamp='2006-12-16T10:14:11+00:00' user='nickw' visible='true'>
-    <nd ref='21092042' />
-    <nd ref='21600471' />
-    <nd ref='21600472' />
-    <nd ref='21600473' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13253094' timestamp='2007-11-18T19:21:22+00:00' user='nickw' visible='true'>
-    <nd ref='122352472' />
-    <nd ref='122352477' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dymott Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150428' timestamp='2007-05-26T20:15:22+01:00' visible='true'>
-    <nd ref='29632418' />
-    <nd ref='29632203' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8443866' timestamp='2007-05-31T22:19:25+01:00' visible='true'>
-    <nd ref='29817248' />
-    <nd ref='29817245' />
-    <tag k='highway' v='footway' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535822' timestamp='2007-09-10T19:07:17+01:00' user='mike l' visible='true'>
-    <nd ref='28173729' />
-    <nd ref='28173833' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4691060' timestamp='2007-05-31T22:19:25+01:00' visible='true'>
-    <nd ref='29817080' />
-    <nd ref='29817081' />
-    <nd ref='29817070' />
-    <nd ref='29817071' />
-    <nd ref='29817073' />
-    <nd ref='29817075' />
-    <nd ref='29817076' />
-    <nd ref='29817078' />
-    <nd ref='29817248' />
-    <nd ref='29817080' />
-    <tag k='amenity' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558175' timestamp='2007-05-02T23:58:14+01:00' visible='true'>
-    <nd ref='28582990' />
-    <nd ref='28583007' />
-    <nd ref='28583008' />
-    <nd ref='28583010' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sharden Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540748' timestamp='2007-04-29T21:43:30+01:00' visible='true'>
-    <nd ref='28249891' />
-    <nd ref='28249892' />
-    <nd ref='28249893' />
-    <nd ref='28249894' />
-    <nd ref='28249896' />
-    <nd ref='28249898' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Millbrook Rd West' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545702' timestamp='2007-04-30T20:40:35+01:00' visible='true'>
-    <nd ref='28339119' />
-    <nd ref='28339148' />
-    <nd ref='28339150' />
-    <nd ref='28339151' />
-    <nd ref='28339152' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Drum Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19746075' timestamp='2008-01-03T19:20:41+00:00' user='nickw' visible='true'>
-    <nd ref='29765432' />
-    <nd ref='205342802' />
-    <nd ref='29990891' />
-    <nd ref='29990890' />
-    <nd ref='29990889' />
-    <nd ref='29990888' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546151' timestamp='2007-04-30T22:13:56+01:00' user='nickw' visible='true'>
-    <nd ref='28342543' />
-    <nd ref='28342546' />
-    <nd ref='28342548' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Oaks' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701859' timestamp='2007-06-03T15:43:47+01:00' visible='true'>
-    <nd ref='29911990' />
-    <nd ref='29911989' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009867' timestamp='2006-11-22T18:19:05+00:00' user='southglos' visible='true'>
-    <nd ref='21178478' />
-    <nd ref='305218' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150618' timestamp='2007-10-16T02:43:34+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29704310' />
-    <nd ref='29509910' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Bosville' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077022' timestamp='2006-12-16T10:14:10+00:00' user='nickw' visible='true'>
-    <nd ref='469886' />
-    <nd ref='21600426' />
-    <nd ref='21600427' />
-    <nd ref='21561800' />
-    <nd ref='21561804' />
-    <nd ref='21561803' />
-    <nd ref='21561805' />
-    <nd ref='21561806' />
-    <nd ref='21561807' />
-    <nd ref='21561815' />
-    <nd ref='28249810' />
-    <nd ref='21600428' />
-    <nd ref='28249806' />
-    <nd ref='21600429' />
-    <nd ref='28249787' />
-    <nd ref='21600430' />
-    <nd ref='2773041' />
-    <nd ref='21600468' />
-    <nd ref='21600431' />
-    <nd ref='21600432' />
-    <nd ref='21600433' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Oakley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074110' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561552' />
-    <nd ref='21561539' />
-    <nd ref='21561553' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vincent Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644827' timestamp='2007-05-24T11:23:16+01:00' visible='true'>
-    <nd ref='29549377' />
-    <nd ref='29549392' />
-    <nd ref='29549394' />
-    <nd ref='29549393' />
-    <nd ref='29549378' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Linnet Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4779476' timestamp='2007-06-18T21:23:09+01:00' visible='true'>
-    <nd ref='30581719' />
-    <nd ref='30581720' />
-    <nd ref='30581717' />
-    <nd ref='30581718' />
-    <nd ref='30581719' />
-    <tag k='amenity' v='school' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948200' timestamp='2007-10-26T13:11:35+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='21614657' />
-    <nd ref='48965770' />
-    <nd ref='8596810' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8136223' timestamp='2007-01-19T09:58:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296386' />
-    <nd ref='25296387' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='name' v='Woodside Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4775939' timestamp='2007-06-18T09:13:46+01:00' visible='true'>
-    <nd ref='30410998' />
-    <nd ref='30410999' />
-    <tag k='foot' v='yes' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4211084' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24950000' />
-    <nd ref='24949999' />
-    <nd ref='24949998' />
-    <nd ref='24949997' />
-    <nd ref='24949810' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Electron Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703302' timestamp='2007-06-03T20:46:09+01:00' visible='true'>
-    <nd ref='29925337' />
-    <nd ref='29925686' />
-    <nd ref='29925389' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lyme Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1206053' timestamp='2006-05-21T17:30:51+01:00' user='nickw' visible='true'>
-    <nd ref='4942221' />
-    <nd ref='4931968' />
-    <nd ref='4931839' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Eastfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540314' timestamp='2007-04-29T21:09:44+01:00' visible='true'>
-    <nd ref='28194343' />
-    <nd ref='28194345' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Plover Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3102408' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true'>
-    <nd ref='254883' />
-    <nd ref='14726189' />
-    <nd ref='14726190' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4376957' timestamp='2007-03-23T00:26:27+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21600669' />
-    <nd ref='21600671' />
-    <nd ref='21600672' />
-    <nd ref='21600673' />
-    <tag k='ref' v='C37' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Templars Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764766' timestamp='2007-06-16T16:26:34+01:00' visible='true'>
-    <nd ref='30431997' />
-    <nd ref='30431991' />
-    <nd ref='30431987' />
-    <nd ref='30431986' />
-    <nd ref='30431982' />
-    <nd ref='30431978' />
-    <nd ref='30431973' />
-    <nd ref='30431970' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Paddock' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764774' timestamp='2007-06-16T16:26:48+01:00' visible='true'>
-    <nd ref='30431983' />
-    <nd ref='30431979' />
-    <nd ref='30431974' />
-    <nd ref='30431971' />
-    <nd ref='30431964' />
-    <nd ref='30431983' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10155197' timestamp='2007-10-22T22:30:45+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='20952640' />
-    <nd ref='20952641' />
-    <nd ref='13706471' />
-    <nd ref='20952642' />
-    <nd ref='13706472' />
-    <nd ref='13706473' />
-    <nd ref='13706476' />
-    <nd ref='13706495' />
-    <nd ref='13706504' />
-    <nd ref='13706518' />
-    <nd ref='13706524' />
-    <nd ref='13706531' />
-    <nd ref='13706543' />
-    <nd ref='13706587' />
-    <nd ref='13706593' />
-    <nd ref='13706596' />
-    <nd ref='13706611' />
-    <nd ref='32894414' />
-    <nd ref='32894415' />
-    <nd ref='13706614' />
-    <nd ref='13706617' />
-    <nd ref='13706626' />
-    <nd ref='32894416' />
-    <nd ref='13706627' />
-    <nd ref='13706634' />
-    <nd ref='13706637' />
-    <nd ref='13706638' />
-    <nd ref='13706639' />
-    <nd ref='13706640' />
-    <nd ref='13706641' />
-    <nd ref='13706642' />
-    <nd ref='13706643' />
-    <nd ref='13706645' />
-    <nd ref='13706646' />
-    <nd ref='13706649' />
-    <nd ref='13706651' />
-    <nd ref='13706652' />
-    <nd ref='13706653' />
-    <nd ref='13706654' />
-    <nd ref='13706655' />
-    <nd ref='13706656' />
-    <nd ref='13706658' />
-    <nd ref='13706659' />
-    <nd ref='13706662' />
-    <nd ref='13706663' />
-    <nd ref='13706665' />
-    <nd ref='13706668' />
-    <nd ref='13706669' />
-    <nd ref='13706670' />
-    <nd ref='13706671' />
-    <tag k='natural' v='coastline' />
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8136111' timestamp='2007-09-24T20:30:44+01:00' user='mike l' visible='true'>
-    <nd ref='21600595' />
-    <nd ref='21600596' />
-    <nd ref='21600597' />
-    <nd ref='21600598' />
-    <nd ref='21600595' />
-    <nd ref='21600679' />
-    <nd ref='21600594' />
-    <nd ref='21600593' />
-    <nd ref='21600591' />
-    <nd ref='21600592' />
-    <nd ref='21600594' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Knightwood Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='9703639' timestamp='2007-10-17T15:40:56+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='76476562' />
-    <nd ref='76476563' />
-    <nd ref='76476564' />
-    <nd ref='76476565' />
-    <nd ref='76476566' />
-    <nd ref='76476549' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4749607' timestamp='2007-10-29T15:43:36+00:00' user='Dean Earley' visible='true'>
-    <nd ref='24924289' />
-    <nd ref='30290728' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Tollgate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539435' timestamp='2007-04-29T19:27:55+01:00' user='Andy Street' visible='true'>
-    <nd ref='28236133' />
-    <nd ref='28236135' />
-    <nd ref='28236137' />
-    <nd ref='28236139' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lime Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10523761' timestamp='2007-10-28T22:03:03+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='87800149' />
-    <nd ref='90677843' />
-    <nd ref='90677844' />
-    <nd ref='90677845' />
-    <nd ref='90677846' />
-    <nd ref='90677848' />
-    <nd ref='90677849' />
-    <nd ref='90677850' />
-    <nd ref='90677851' />
-    <tag k='waterway' v='river' />
-    <tag k='boat' v='no' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='8314348' timestamp='2007-10-17T01:27:51+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254918' />
-    <nd ref='21316555' />
-    <nd ref='14743135' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677854' timestamp='2007-05-29T22:39:33+01:00' visible='true'>
-    <nd ref='29709217' />
-    <nd ref='29709218' />
-    <nd ref='29709219' />
-    <nd ref='29709220' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Park Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724585' timestamp='2007-06-08T23:30:31+01:00' visible='true'>
-    <nd ref='30089140' />
-    <nd ref='30089121' />
-    <nd ref='30089124' />
-    <nd ref='30089139' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119882' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='324343' />
-    <nd ref='324344' />
-    <nd ref='325644' />
-    <nd ref='324345' />
-    <nd ref='324346' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Padwell Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3996908' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957179' />
-    <nd ref='20957189' />
-    <nd ref='20957223' />
-    <nd ref='20957213' />
-    <nd ref='20957178' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Stafford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536699' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20628556' />
-    <nd ref='19227255' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1189510' timestamp='2006-05-21T09:21:29+01:00' user='nickw' visible='true'>
-    <nd ref='4931729' />
-    <nd ref='4931812' />
-    <nd ref='4931832' />
-    <nd ref='4931839' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Railway View Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3084962' timestamp='2008-02-03T06:17:50+00:00' user='sladen' visible='true'>
-    <nd ref='254454' />
-    <nd ref='14726188' />
-    <nd ref='254455' />
-    <nd ref='254456' />
-    <nd ref='245150974' />
-    <nd ref='254457' />
-    <nd ref='245149967' />
-    <nd ref='254458' />
-    <nd ref='254444' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='East Park Terrace' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4558171' timestamp='2007-05-02T23:58:14+01:00' visible='true'>
-    <nd ref='28582986' />
-    <nd ref='28582988' />
-    <nd ref='28582989' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lordswood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586155' timestamp='2007-05-12T15:26:10+01:00' user='nickw' visible='true'>
-    <nd ref='29008934' />
-    <nd ref='29008953' />
-    <nd ref='29008954' />
-    <nd ref='29008955' />
-    <nd ref='29008447' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kennet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604442' timestamp='2007-08-12T23:13:40+01:00' user='Edward' visible='true'>
-    <nd ref='29132939' />
-    <nd ref='27467483' />
-    <nd ref='29132910' />
-    <nd ref='29132947' />
-    <nd ref='29132954' />
-    <nd ref='29132965' />
-    <nd ref='29132970' />
-    <nd ref='29132977' />
-    <nd ref='29133007' />
-    <nd ref='29133014' />
-    <nd ref='29133085' />
-    <nd ref='29133018' />
-    <nd ref='29133023' />
-    <nd ref='29133027' />
-    <nd ref='29133032' />
-    <nd ref='29133035' />
-    <nd ref='29133038' />
-    <nd ref='29133042' />
-    <nd ref='29001306' />
-    <nd ref='29133083' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='5041386' timestamp='2007-12-06T20:40:09+00:00' user='nickw' visible='true'>
-    <nd ref='33718237' />
-    <nd ref='33718239' />
-    <nd ref='33718240' />
-    <nd ref='33718254' />
-    <nd ref='33718236' />
-    <nd ref='21600524' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coxford Drove' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4625937' timestamp='2007-05-20T10:19:37+01:00' user='nickw' visible='true'>
-    <nd ref='29380437' />
-    <nd ref='29380436' />
-    <nd ref='29380438' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Greenlea Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4577440' timestamp='2007-05-09T23:36:13+01:00' visible='true'>
-    <nd ref='28903403' />
-    <nd ref='28903411' />
-    <nd ref='28903412' />
-    <nd ref='28903413' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536143' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179467' />
-    <nd ref='28179472' />
-    <nd ref='28179468' />
-    <nd ref='28179469' />
-    <nd ref='28179471' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Copse Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129261' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964133' />
-    <nd ref='14964134' />
-    <nd ref='14964135' />
-    <nd ref='14964136' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hawkeswood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3805999' timestamp='2007-10-16T17:24:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='518813' />
-    <nd ref='2073253' />
-    <nd ref='2073232' />
-    <nd ref='19035789' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ripstone Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3297' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='675856' />
-    <nd ref='700520' />
-    <nd ref='700521' />
-    <nd ref='700522' />
-    <nd ref='700523' />
-    <nd ref='700525' />
-    <nd ref='700527' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dell Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540348' timestamp='2007-04-29T21:10:07+01:00' visible='true'>
-    <nd ref='28194434' />
-    <nd ref='28194435' />
-    <nd ref='28194437' />
-    <nd ref='28194439' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Warblers Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743133' timestamp='2007-06-11T22:16:55+01:00' visible='true'>
-    <nd ref='30225794' />
-    <nd ref='30225261' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701685' timestamp='2007-06-03T14:55:51+01:00' visible='true'>
-    <nd ref='254678' />
-    <nd ref='254679' />
-    <nd ref='254680' />
-    <nd ref='254681' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773504' timestamp='2007-06-17T22:14:22+01:00' visible='true'>
-    <nd ref='30508363' />
-    <nd ref='30508364' />
-    <nd ref='30508355' />
-    <nd ref='30508357' />
-    <nd ref='30508358' />
-    <nd ref='30508360' />
-    <nd ref='30508361' />
-    <nd ref='30508363' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Quadrangle' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743070' timestamp='2007-10-16T02:44:04+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30223934' />
-    <nd ref='30223936' />
-    <nd ref='30223938' />
-    <nd ref='30223941' />
-    <nd ref='30223943' />
-    <nd ref='30223945' />
-    <nd ref='30223954' />
-    <nd ref='30223956' />
-    <nd ref='30223933' />
-    <nd ref='30223934' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Chartwell Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732320' timestamp='2007-06-10T18:15:22+01:00' visible='true'>
-    <nd ref='15359720' />
-    <nd ref='30161106' />
-    <nd ref='30161105' />
-    <nd ref='30161104' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Romsey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723920' timestamp='2007-12-08T20:09:11+00:00' user='nickw' visible='true'>
-    <nd ref='157201962' />
-    <nd ref='157201965' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northolt Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578265' timestamp='2007-06-16T16:26:54+01:00' visible='true'>
-    <nd ref='15359712' />
-    <nd ref='17721078' />
-    <nd ref='17721079' />
-    <nd ref='17721080' />
-    <nd ref='30431938' />
-    <nd ref='17721077' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601493' timestamp='2007-10-30T17:26:42+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92685107' />
-    <nd ref='92685108' />
-    <nd ref='92685110' />
-    <nd ref='92685112' />
-    <nd ref='92685107' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='3999271' timestamp='2007-12-10T21:07:48+00:00' user='sladen' visible='true'>
-    <nd ref='10222195' />
-    <nd ref='25675766' />
-    <nd ref='160420523' />
-    <nd ref='20972781' />
-    <nd ref='20972766' />
-    <nd ref='20972783' />
-    <nd ref='160424212' />
-    <nd ref='8596815' />
-    <nd ref='20973122' />
-    <nd ref='160425495' />
-    <nd ref='160425939' />
-    <nd ref='20972775' />
-    <nd ref='20972776' />
-    <nd ref='20972777' />
-    <nd ref='20973095' />
-    <nd ref='20972778' />
-    <nd ref='20972779' />
-    <nd ref='20972767' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4585173' timestamp='2007-05-12T09:40:24+01:00' user='nickw' visible='true'>
-    <nd ref='29001314' />
-    <nd ref='29001315' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Collier Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4293771' timestamp='2007-12-10T19:28:54+00:00' user='sladen' visible='true'>
-    <nd ref='25932490' />
-    <nd ref='25932493' />
-    <nd ref='25932495' />
-    <nd ref='25932487' />
-    <tag k='aeroway' v='runway' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4749613' timestamp='2007-06-13T09:24:37+01:00' visible='true'>
-    <nd ref='30290785' />
-    <nd ref='30290786' />
-    <nd ref='30290787' />
-    <nd ref='30290783' />
-    <nd ref='30290784' />
-    <nd ref='30290785' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9652514' timestamp='2007-10-16T17:59:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179506' />
-    <nd ref='28179507' />
-    <nd ref='28179508' />
-    <nd ref='28179509' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540769' timestamp='2007-04-29T21:43:35+01:00' visible='true'>
-    <nd ref='27239006' />
-    <nd ref='28250035' />
-    <nd ref='28250044' />
-    <nd ref='28250045' />
-    <nd ref='28250047' />
-    <nd ref='28250048' />
-    <nd ref='28250049' />
-    <nd ref='28250050' />
-    <nd ref='28250052' />
-    <nd ref='28250053' />
-    <nd ref='28250054' />
-    <nd ref='28250056' />
-    <nd ref='28250057' />
-    <nd ref='28250059' />
-    <nd ref='28250060' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Elmes Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130056' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20133197' />
-    <nd ref='20133201' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Duddon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1676' timestamp='2006-06-04T00:35:22+01:00' user='Dean Earley' visible='true'>
-    <nd ref='306312' />
-    <nd ref='27563287' />
-    <nd ref='27563365' />
-    <nd ref='387809' />
-    <nd ref='306311' />
-    <nd ref='307482' />
-    <nd ref='306310' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brookvale Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4642364' timestamp='2007-11-28T12:24:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29530537' />
-    <nd ref='30256423' />
-    <nd ref='29533946' />
-    <nd ref='30256615' />
-    <nd ref='30256626' />
-    <nd ref='29530323' />
-    <nd ref='30256863' />
-    <nd ref='30256868' />
-    <nd ref='29530609' />
-    <nd ref='30256875' />
-    <nd ref='30256885' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Royston Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124544' timestamp='2006-07-29T14:14:02+01:00' user='nickw' visible='true'>
-    <nd ref='301598' />
-    <nd ref='301599' />
-    <nd ref='301600' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4724581' timestamp='2007-06-13T09:30:28+01:00' visible='true'>
-    <nd ref='30089144' />
-    <nd ref='30089043' />
-    <nd ref='30290793' />
-    <nd ref='30089044' />
-    <nd ref='30290753' />
-    <nd ref='30089089' />
-    <nd ref='30290754' />
-    <nd ref='30089096' />
-    <nd ref='30089098' />
-    <nd ref='30089100' />
-    <nd ref='30089102' />
-    <nd ref='30089113' />
-    <nd ref='30089119' />
-    <nd ref='30089141' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Woodpecker Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3590025' timestamp='2008-02-03T06:26:16+00:00' user='sladen' visible='true'>
-    <nd ref='15657675' />
-    <nd ref='160211040' />
-    <nd ref='17769050' />
-    <nd ref='160211043' />
-    <nd ref='17769052' />
-    <nd ref='160211045' />
-    <nd ref='17769053' />
-    <nd ref='160211054' />
-    <nd ref='160211057' />
-    <nd ref='17769054' />
-    <nd ref='19890103' />
-    <nd ref='17769055' />
-    <nd ref='17769057' />
-    <nd ref='17769058' />
-    <nd ref='160232026' />
-    <tag k='railway' v='rail' />
-    <tag k='source' v='Landsat' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4546503' timestamp='2007-04-30T23:36:54+01:00' user='nickw' visible='true'>
-    <nd ref='28345060' />
-    <nd ref='28347590' />
-    <nd ref='28347591' />
-    <nd ref='28347585' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Dyneley Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10314255' timestamp='2007-10-25T21:05:32+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='87228870' />
-    <nd ref='87238687' />
-    <nd ref='87239380' />
-    <nd ref='87228250' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kennedy Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4496145' timestamp='2007-04-23T22:47:38+01:00' visible='true'>
-    <nd ref='27563287' />
-    <nd ref='27563291' />
-    <nd ref='27563292' />
-    <nd ref='27563293' />
-    <nd ref='27563294' />
-    <nd ref='27563295' />
-    <nd ref='27563296' />
-    <nd ref='27563297' />
-    <nd ref='27563291' />
-    <tag k='access' v='private' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Highfield Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4724588' timestamp='2007-06-08T23:30:31+01:00' visible='true'>
-    <nd ref='30089128' />
-    <nd ref='30089126' />
-    <nd ref='30089130' />
-    <nd ref='30089131' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blackbird Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678393' timestamp='2007-05-28T15:03:26+01:00' visible='true'>
-    <nd ref='29711871' />
-    <nd ref='29712186' />
-    <nd ref='29712187' />
-    <nd ref='29712188' />
-    <nd ref='25296304' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4254568' timestamp='2007-01-27T23:26:47+00:00' visible='true'>
-    <nd ref='25480566' />
-    <nd ref='25480577' />
-    <nd ref='25480578' />
-    <nd ref='25480582' />
-    <nd ref='25480584' />
-    <nd ref='25480588' />
-    <nd ref='25480591' />
-    <nd ref='25480576' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lumpy Lane' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4644823' timestamp='2007-05-24T11:23:14+01:00' visible='true'>
-    <nd ref='29549374' />
-    <nd ref='29549379' />
-    <nd ref='29549380' />
-    <nd ref='29549381' />
-    <nd ref='29549376' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Heron Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125055' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071358' />
-    <nd ref='13071360' />
-    <nd ref='13071361' />
-    <nd ref='13071362' />
-    <nd ref='13071371' />
-    <nd ref='13071363' />
-    <nd ref='13071364' />
-    <nd ref='13071217' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beech Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569979' timestamp='2007-05-05T09:03:38+01:00' user='nickw' visible='true'>
-    <nd ref='28830659' />
-    <nd ref='28830674' />
-    <nd ref='28830675' />
-    <nd ref='28830676' />
-    <nd ref='28830677' />
-    <nd ref='28830678' />
-    <nd ref='28830679' />
-    <nd ref='28830680' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vale Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8170678' timestamp='2007-10-04T19:42:54+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29711160' />
-    <nd ref='29708046' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4742944' timestamp='2007-10-16T02:44:12+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30223094' />
-    <nd ref='30223093' />
-    <nd ref='30223092' />
-    <nd ref='30223081' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Browsholme Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126592' timestamp='2007-10-29T16:25:41+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254684' />
-    <nd ref='2433499' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Romsey Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079326' timestamp='2006-12-18T21:41:11+00:00' user='nickw' visible='true'>
-    <nd ref='21636948' />
-    <nd ref='21636923' />
-    <nd ref='21636949' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mulberry Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084960' timestamp='2007-09-10T23:28:39+01:00' visible='true'>
-    <nd ref='9266205' />
-    <nd ref='14727960' />
-    <nd ref='14727945' />
-    <nd ref='14727990' />
-    <nd ref='14727975' />
-    <nd ref='603224' />
-    <nd ref='603223' />
-    <nd ref='14727963' />
-    <nd ref='319608' />
-    <nd ref='254635' />
-    <nd ref='14727947' />
-    <nd ref='14727991' />
-    <nd ref='14727967' />
-    <nd ref='14727976' />
-    <nd ref='9312077' />
-    <nd ref='25938549' />
-    <nd ref='18232130' />
-    <nd ref='9312078' />
-    <nd ref='48950463' />
-    <nd ref='14727951' />
-    <nd ref='254427' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='9674786' timestamp='2007-10-16T23:54:06+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973112' />
-    <nd ref='8596757' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13251853' timestamp='2007-11-18T19:16:54+00:00' user='nickw' visible='true'>
-    <nd ref='21275698' />
-    <nd ref='122334956' />
-    <nd ref='122334962' />
-    <nd ref='122334969' />
-    <nd ref='122344801' />
-    <nd ref='21600421' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Waterhouse Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4043822' timestamp='2006-12-02T23:18:57+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419418' />
-    <nd ref='21419452' />
-    <nd ref='21419460' />
-    <nd ref='21419459' />
-    <nd ref='21419458' />
-    <nd ref='21419457' />
-    <nd ref='21419456' />
-    <nd ref='21419455' />
-    <nd ref='21419454' />
-    <nd ref='21419453' />
-    <nd ref='21419452' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grange Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3277' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700440' />
-    <nd ref='700441' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dundee Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540960' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252914' />
-    <nd ref='28252912' />
-    <nd ref='28252911' />
-    <nd ref='28252910' />
-    <nd ref='28252909' />
-    <nd ref='28252908' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Balmoral Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148422' timestamp='2007-06-10T18:15:28+01:00' visible='true'>
-    <nd ref='21585930' />
-    <nd ref='29389522' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Desbourough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4749649' timestamp='2007-06-13T09:33:15+01:00' visible='true'>
-    <nd ref='30291056' />
-    <nd ref='30291057' />
-    <nd ref='30291058' />
-    <nd ref='30291054' />
-    <nd ref='30291055' />
-    <nd ref='30291056' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3712704' timestamp='2007-09-25T14:05:30+01:00' visible='true'>
-    <nd ref='18393861' />
-    <nd ref='18393858' />
-    <nd ref='18393859' />
-    <nd ref='18393860' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rockstone Place' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8130055' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20133168' />
-    <nd ref='20133204' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Duddon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773446' timestamp='2007-06-17T22:03:39+01:00' visible='true'>
-    <nd ref='30506811' />
-    <nd ref='30506812' />
-    <nd ref='30506813' />
-    <nd ref='30506815' />
-    <nd ref='30506816' />
-    <nd ref='30506818' />
-    <nd ref='30506820' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4625941' timestamp='2007-05-20T10:19:37+01:00' user='nickw' visible='true'>
-    <nd ref='21419458' />
-    <nd ref='29380444' />
-    <nd ref='24924111' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569971' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true'>
-    <nd ref='28830638' />
-    <nd ref='28345037' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='neither does this' />
-    <tag k='name' v='Cornwall Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4567246' timestamp='2007-05-07T23:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14957849' />
-    <nd ref='254347' />
-    <nd ref='254604' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Rownhams Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151236' timestamp='2007-10-17T02:34:18+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29871653' />
-    <nd ref='29871659' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bitterne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540973' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252940' />
-    <nd ref='28252941' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148802' timestamp='2007-06-03T14:59:30+01:00' visible='true'>
-    <nd ref='28418527' />
-    <nd ref='28418535' />
-    <nd ref='28418525' />
-    <nd ref='28418526' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chadwick Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4638006' timestamp='2007-05-22T11:59:10+01:00' visible='true'>
-    <nd ref='4931456' />
-    <nd ref='4931612' />
-    <nd ref='518782' />
-    <nd ref='518783' />
-    <nd ref='19890078' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Horseshoe Bridge' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10556614' timestamp='2007-10-29T08:15:56+00:00' user='nickw' visible='true'>
-    <nd ref='91120336' />
-    <nd ref='91123683' />
-    <nd ref='91123687' />
-    <nd ref='91123691' />
-    <nd ref='91123694' />
-    <nd ref='91123695' />
-    <nd ref='91123697' />
-    <nd ref='91120333' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thorndike Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1936' timestamp='2006-06-17T22:23:15+01:00' user='nickw' visible='true'>
-    <nd ref='657767' />
-    <nd ref='28342562' />
-    <nd ref='661167' />
-    <nd ref='661168' />
-    <nd ref='661169' />
-    <nd ref='28342564' />
-    <nd ref='28342591' />
-    <nd ref='661170' />
-    <nd ref='28342588' />
-    <nd ref='661171' />
-    <nd ref='635136' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Merryoak Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4496257' timestamp='2007-04-23T23:02:21+01:00' visible='true'>
-    <nd ref='27563354' />
-    <nd ref='27563362' />
-    <nd ref='27563363' />
-    <nd ref='27563364' />
-    <nd ref='27563365' />
-    <tag k='access' v='private' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Uplands Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215229' timestamp='2007-01-10T00:20:39+00:00' user='nickw' visible='true'>
-    <nd ref='24984720' />
-    <nd ref='24984721' />
-    <nd ref='24984722' />
-    <nd ref='24984723' />
-    <nd ref='24984724' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Village' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661843' timestamp='2007-05-27T10:45:25+01:00' visible='true'>
-    <nd ref='29632487' />
-    <nd ref='29632490' />
-    <nd ref='29632495' />
-    <nd ref='29632497' />
-    <nd ref='29632430' />
-    <nd ref='29632218' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4732316' timestamp='2007-06-10T18:15:21+01:00' visible='true'>
-    <nd ref='30161112' />
-    <nd ref='30161101' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Salisbury Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743744' timestamp='2007-06-12T00:14:49+01:00' user='nickw' visible='true'>
-    <nd ref='30229556' />
-    <nd ref='30229582' />
-    <nd ref='30229583' />
-    <nd ref='30229584' />
-    <nd ref='30229585' />
-    <nd ref='30229586' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lynn Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556255' timestamp='2007-10-29T07:57:19+00:00' user='nickw' visible='true'>
-    <nd ref='91110485' />
-    <nd ref='91110486' />
-    <nd ref='91110487' />
-    <nd ref='91110488' />
-    <nd ref='91110489' />
-    <nd ref='91110490' />
-    <nd ref='91110491' />
-    <nd ref='91110492' />
-    <nd ref='91110493' />
-    <nd ref='91110494' />
-    <nd ref='91110495' />
-    <nd ref='91110496' />
-    <nd ref='91110497' />
-    <nd ref='91110498' />
-    <nd ref='91110499' />
-    <nd ref='91110500' />
-    <nd ref='91110501' />
-    <nd ref='91110502' />
-    <nd ref='91110503' />
-    <nd ref='20976686' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Lordsdale Greenway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342673' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447503' />
-    <nd ref='26447504' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Guildford Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773505' timestamp='2007-06-17T22:14:23+01:00' visible='true'>
-    <nd ref='30508355' />
-    <nd ref='30508354' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Arthur Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701701' timestamp='2007-06-03T14:59:29+01:00' visible='true'>
-    <nd ref='28418345' />
-    <nd ref='28418340' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='George Raymond Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540755' timestamp='2007-04-29T21:43:34+01:00' visible='true'>
-    <nd ref='28249941' />
-    <nd ref='28249942' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9676786' timestamp='2007-10-17T00:35:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='8596763' />
-    <nd ref='596304' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A334' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bitterne Road East' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4687325' timestamp='2007-05-30T21:46:52+01:00' user='nickw' visible='true'>
-    <nd ref='28232560' />
-    <nd ref='29794906' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Haynes Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131446' timestamp='2007-10-16T20:09:38+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20971217' />
-    <nd ref='20972785' />
-    <nd ref='20972784' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703812' timestamp='2007-06-17T22:03:41+01:00' visible='true'>
-    <nd ref='29928589' />
-    <nd ref='29928590' />
-    <nd ref='29928601' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150625' timestamp='2007-06-17T22:25:20+01:00' visible='true'>
-    <nd ref='29512143' />
-    <nd ref='30509426' />
-    <nd ref='29535184' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='32' />
-    <tag k='name' v='Shakespeare Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3906607' timestamp='2007-06-26T23:45:23+01:00' user='nickw' visible='true'>
-    <nd ref='474652' />
-    <nd ref='13564840' />
-    <nd ref='30956632' />
-    <nd ref='474653' />
-    <nd ref='20107332' />
-    <tag k='ref' v='C194' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='695' timestamp='2006-06-04T00:35:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='388865' />
-    <nd ref='388866' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Nile Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4679925' timestamp='2007-05-28T19:39:32+01:00' visible='true'>
-    <nd ref='29730514' />
-    <nd ref='29730506' />
-    <nd ref='29730507' />
-    <nd ref='29730508' />
-    <nd ref='29730509' />
-    <nd ref='29730510' />
-    <nd ref='29730511' />
-    <nd ref='29730512' />
-    <nd ref='29730515' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Kornwestheim Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539983' timestamp='2007-04-29T20:37:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243650' />
-    <nd ref='28243670' />
-    <nd ref='28243671' />
-    <nd ref='28243672' />
-    <nd ref='28243673' />
-    <nd ref='28243674' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Boldrewood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125057' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071416' />
-    <nd ref='13071418' />
-    <nd ref='13071419' />
-    <nd ref='13071420' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rutland Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084417' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689144' />
-    <nd ref='21689055' />
-    <nd ref='21689145' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fleming Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4589168' timestamp='2007-05-13T10:11:07+01:00' user='nickw' visible='true'>
-    <nd ref='29026795' />
-    <nd ref='29026798' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mayfair Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875466' timestamp='2007-07-09T11:55:47+01:00' visible='true'>
-    <nd ref='31486260' />
-    <nd ref='31486266' />
-    <nd ref='31486262' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Lower William Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558167' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582965' />
-    <nd ref='28582983' />
-    <nd ref='28582985' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Falaise Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074116' timestamp='2006-12-13T20:09:45+00:00' user='nickw' visible='true'>
-    <nd ref='21561562' />
-    <nd ref='21561520' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Church Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683820' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29765433' />
-    <nd ref='29765435' />
-    <nd ref='29765429' />
-    <nd ref='29765430' />
-    <nd ref='29765431' />
-    <nd ref='29765432' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chapel Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8126548' timestamp='2007-10-16T17:59:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25895699' />
-    <nd ref='25895700' />
-    <nd ref='254487' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A27' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2352117' timestamp='2006-07-10T00:22:01+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254920' />
-    <nd ref='8596812' />
-    <nd ref='8596749' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875603' timestamp='2007-07-09T12:19:46+01:00' visible='true'>
-    <nd ref='19890081' />
-    <nd ref='19890082' />
-    <nd ref='518785' />
-    <nd ref='518786' />
-    <nd ref='19890083' />
-    <nd ref='19890077' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Horseshoe Bridge' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1680' timestamp='2006-06-04T00:35:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='307474' />
-    <nd ref='307475' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Leigh Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10314664' timestamp='2007-12-06T20:39:10+00:00' user='nickw' visible='true'>
-    <nd ref='87239486' />
-    <nd ref='87239604' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rosewall Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4342670' timestamp='2007-03-09T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='26447525' />
-    <nd ref='254568' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4636156' timestamp='2007-10-16T23:45:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464278' />
-    <nd ref='29464279' />
-    <nd ref='29464280' />
-    <nd ref='29464281' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644819' timestamp='2007-05-24T11:23:12+01:00' visible='true'>
-    <nd ref='25340630' />
-    <nd ref='29548696' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Elm Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015805' timestamp='2006-11-26T00:07:58+00:00' user='nickw' visible='true'>
-    <nd ref='21275754' />
-    <nd ref='21275779' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535830' timestamp='2007-04-29T01:04:30+01:00' visible='true'>
-    <nd ref='28173833' />
-    <nd ref='28173929' />
-    <nd ref='28173932' />
-    <nd ref='28173936' />
-    <nd ref='28173993' />
-    <nd ref='28173942' />
-    <nd ref='28173946' />
-    <nd ref='28173956' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaulieu Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8132233' timestamp='2006-11-26T00:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='11419683' />
-    <nd ref='11419686' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Foundry Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3061057' timestamp='2006-08-31T20:36:25+01:00' user='nickw' visible='true'>
-    <nd ref='14582446' />
-    <nd ref='254250' />
-    <nd ref='254251' />
-    <nd ref='254252' />
-    <nd ref='254253' />
-    <nd ref='254254' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='3061034' timestamp='2007-10-29T15:43:36+00:00' user='Dean Earley' visible='true'>
-    <nd ref='24924230' />
-    <nd ref='25896424' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C352' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4254564' timestamp='2007-12-10T19:13:51+00:00' user='sladen' visible='true'>
-    <nd ref='25480534' />
-    <nd ref='254578' />
-    <nd ref='19890108' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Union Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4625936' timestamp='2007-05-20T10:19:36+01:00' user='nickw' visible='true'>
-    <nd ref='29380430' />
-    <nd ref='29380432' />
-    <nd ref='29380433' />
-    <nd ref='29380439' />
-    <nd ref='29380434' />
-    <nd ref='29380436' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Greenlea Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743740' timestamp='2007-06-12T00:14:49+01:00' user='nickw' visible='true'>
-    <nd ref='30229553' />
-    <nd ref='30229571' />
-    <nd ref='30229572' />
-    <nd ref='30229573' />
-    <nd ref='30229574' />
-    <nd ref='30229575' />
-    <nd ref='30229576' />
-    <nd ref='30229577' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dart Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079283' timestamp='2006-12-18T21:21:57+00:00' user='nickw' visible='true'>
-    <nd ref='388924' />
-    <nd ref='21636730' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Evesham Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4712244' timestamp='2007-06-05T23:00:53+01:00' user='nickw' visible='true'>
-    <nd ref='29998103' />
-    <nd ref='29998104' />
-    <nd ref='29998105' />
-    <nd ref='29998106' />
-    <nd ref='29998107' />
-    <nd ref='29998108' />
-    <nd ref='29998109' />
-    <nd ref='29998110' />
-    <nd ref='29998111' />
-    <nd ref='29998112' />
-    <nd ref='29998113' />
-    <nd ref='29998114' />
-    <nd ref='29998115' />
-    <nd ref='29998116' />
-    <nd ref='29998117' />
-    <nd ref='29998118' />
-    <nd ref='29998119' />
-    <nd ref='29998120' />
-    <nd ref='29998121' />
-    <nd ref='29998122' />
-    <nd ref='29998123' />
-    <nd ref='29998124' />
-    <nd ref='29998125' />
-    <nd ref='29998126' />
-    <nd ref='29998127' />
-    <nd ref='29998128' />
-    <nd ref='29998129' />
-    <nd ref='29998130' />
-    <nd ref='29998131' />
-    <nd ref='29998132' />
-    <nd ref='29998133' />
-    <nd ref='29998134' />
-    <nd ref='29998135' />
-    <nd ref='29998136' />
-    <nd ref='29998137' />
-    <nd ref='29998138' />
-    <nd ref='29998139' />
-    <nd ref='29998069' />
-    <nd ref='29998078' />
-    <nd ref='29998077' />
-    <nd ref='29998076' />
-    <nd ref='29998075' />
-    <nd ref='29998074' />
-    <nd ref='29998073' />
-    <nd ref='29998072' />
-    <nd ref='29998071' />
-    <nd ref='29998070' />
-    <nd ref='29998054' />
-    <nd ref='29998055' />
-    <nd ref='29998056' />
-    <nd ref='29998057' />
-    <nd ref='29998059' />
-    <nd ref='29998060' />
-    <nd ref='29998058' />
-    <nd ref='29998061' />
-    <nd ref='29998062' />
-    <nd ref='29998063' />
-    <nd ref='29998064' />
-    <nd ref='29998065' />
-    <nd ref='29998066' />
-    <nd ref='29998067' />
-    <nd ref='29998068' />
-    <nd ref='29998079' />
-    <nd ref='29998080' />
-    <nd ref='29998081' />
-    <nd ref='29998082' />
-    <nd ref='29998083' />
-    <nd ref='29998084' />
-    <nd ref='29998085' />
-    <nd ref='29998086' />
-    <nd ref='29998087' />
-    <nd ref='29998088' />
-    <nd ref='29998089' />
-    <nd ref='29998090' />
-    <nd ref='29998091' />
-    <nd ref='29998092' />
-    <nd ref='29998093' />
-    <nd ref='29998094' />
-    <nd ref='29998095' />
-    <nd ref='29998096' />
-    <nd ref='29998097' />
-    <nd ref='29998098' />
-    <nd ref='29998099' />
-    <nd ref='29998100' />
-    <nd ref='29998101' />
-    <nd ref='29998102' />
-    <nd ref='29998103' />
-    <tag k='natural' v='wood' />
-    <tag k='source' v='landsat' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124545' timestamp='2006-07-29T14:15:23+01:00' user='nickw' visible='true'>
-    <nd ref='544315' />
-    <nd ref='544316' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4386810' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21624980' />
-    <nd ref='3915747' />
-    <nd ref='3915746' />
-    <nd ref='608178' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bishops Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540969' timestamp='2007-04-29T22:00:55+01:00' visible='true'>
-    <nd ref='28252955' />
-    <nd ref='28252956' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996900' timestamp='2006-11-10T21:59:05+00:00' user='nickw' visible='true'>
-    <nd ref='20957190' />
-    <nd ref='20957204' />
-    <nd ref='20957181' />
-    <nd ref='20957230' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Charlton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875596' timestamp='2007-10-16T23:45:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14806969' />
-    <nd ref='19890108' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3065323' timestamp='2007-12-10T20:26:48+00:00' user='sladen' visible='true'>
-    <nd ref='14601292' />
-    <nd ref='14601293' />
-    <nd ref='14601294' />
-    <nd ref='59937121' />
-    <nd ref='14601295' />
-    <nd ref='14601296' />
-    <nd ref='14601297' />
-    <nd ref='14601298' />
-    <nd ref='14601299' />
-    <nd ref='14601300' />
-    <nd ref='14601301' />
-    <nd ref='14601302' />
-    <nd ref='14601303' />
-    <nd ref='14601304' />
-    <nd ref='14601305' />
-    <nd ref='14601306' />
-    <nd ref='14601307' />
-    <nd ref='14601308' />
-    <nd ref='14601309' />
-    <nd ref='14601310' />
-    <nd ref='14601311' />
-    <nd ref='14601312' />
-    <nd ref='14601313' />
-    <nd ref='14601315' />
-    <nd ref='14601317' />
-    <nd ref='14601318' />
-    <nd ref='14601319' />
-    <nd ref='271281' />
-    <nd ref='14601320' />
-    <nd ref='14601321' />
-    <nd ref='14601927' />
-    <nd ref='14601322' />
-    <nd ref='14601323' />
-    <nd ref='14601324' />
-    <nd ref='14601326' />
-    <nd ref='14601328' />
-    <nd ref='14601329' />
-    <nd ref='14601333' />
-    <nd ref='14601334' />
-    <nd ref='14601335' />
-    <nd ref='14601337' />
-    <nd ref='14601339' />
-    <nd ref='14601341' />
-    <nd ref='14601342' />
-    <nd ref='14601343' />
-    <nd ref='14601344' />
-    <nd ref='14601345' />
-    <nd ref='14601347' />
-    <nd ref='14601348' />
-    <nd ref='14601349' />
-    <nd ref='14601350' />
-    <nd ref='14601351' />
-    <nd ref='14601352' />
-    <nd ref='160284170' />
-    <nd ref='160284171' />
-    <nd ref='160283711' />
-    <nd ref='160283712' />
-    <nd ref='160283354' />
-    <nd ref='160283355' />
-    <nd ref='160283357' />
-    <nd ref='160283359' />
-    <nd ref='160283360' />
-    <nd ref='14601360' />
-    <nd ref='14601361' />
-    <nd ref='14601362' />
-    <nd ref='14601363' />
-    <nd ref='21379085' />
-    <nd ref='14601364' />
-    <nd ref='14601365' />
-    <nd ref='14601366' />
-    <nd ref='160283363' />
-    <nd ref='160283364' />
-    <nd ref='14601367' />
-    <nd ref='160281291' />
-    <nd ref='160281292' />
-    <nd ref='14601368' />
-    <nd ref='160280778' />
-    <nd ref='160280779' />
-    <nd ref='160279830' />
-    <nd ref='17658120' />
-    <nd ref='14601369' />
-    <nd ref='59322760' />
-    <nd ref='14601370' />
-    <nd ref='160279833' />
-    <nd ref='17658110' />
-    <nd ref='160277830' />
-    <nd ref='160277831' />
-    <nd ref='59322761' />
-    <nd ref='160278843' />
-    <nd ref='160278845' />
-    <nd ref='17658111' />
-    <nd ref='160278848' />
-    <nd ref='160278849' />
-    <nd ref='17658112' />
-    <nd ref='160278852' />
-    <nd ref='160278854' />
-    <nd ref='17658113' />
-    <nd ref='160242648' />
-    <nd ref='160242651' />
-    <nd ref='160242653' />
-    <nd ref='160242655' />
-    <nd ref='160242974' />
-    <nd ref='17658115' />
-    <nd ref='160242658' />
-    <nd ref='160242659' />
-    <nd ref='17658116' />
-    <nd ref='17658117' />
-    <nd ref='160242663' />
-    <nd ref='160242665' />
-    <nd ref='17658118' />
-    <nd ref='160242668' />
-    <nd ref='160242671' />
-    <nd ref='160242672' />
-    <nd ref='17658119' />
-    <nd ref='160239018' />
-    <nd ref='160239020' />
-    <nd ref='160239022' />
-    <nd ref='271206' />
-    <nd ref='160239026' />
-    <nd ref='160239028' />
-    <nd ref='21157474' />
-    <nd ref='21157475' />
-    <tag k='notes2' v='updated further, from yahoo imagery in solent area' />
-    <tag k='railway' v='rail' />
-    <tag k='note' v='Original GPX track contained some inaccuracies and so the segments were adjusted using existing footpath data and Landsat, to make it fit.' />
-    <tag k='name' v='Waterloo - Weymouth' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4008582' timestamp='2006-11-21T23:12:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141417' />
-    <nd ref='21141416' />
-    <nd ref='21141415' />
-    <nd ref='21141375' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St James Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16415169' timestamp='2007-12-14T21:43:15+00:00' user='nickw' visible='true'>
-    <nd ref='169435788' />
-    <nd ref='169435791' />
-    <nd ref='169435796' />
-    <nd ref='169435800' />
-    <nd ref='169435806' />
-    <nd ref='169435811' />
-    <nd ref='169435814' />
-    <nd ref='169435817' />
-    <nd ref='169435818' />
-    <nd ref='169435823' />
-    <nd ref='169435828' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Springford Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196517' timestamp='2007-10-16T06:18:07+01:00' user='andrewpmk' visible='true'>
-    <nd ref='305610' />
-    <nd ref='24668370' />
-    <nd ref='24668037' />
-    <nd ref='24668113' />
-    <nd ref='24668111' />
-    <nd ref='24668285' />
-    <nd ref='24668369' />
-    <nd ref='24668165' />
-    <nd ref='24668057' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061543' timestamp='2006-12-09T09:51:52+00:00' user='nickw' visible='true'>
-    <nd ref='21507772' />
-    <nd ref='21507773' />
-    <nd ref='21507774' />
-    <nd ref='21507775' />
-    <nd ref='21507776' />
-    <nd ref='388937' />
-    <nd ref='388938' />
-    <nd ref='388939' />
-    <nd ref='388940' />
-    <nd ref='388941' />
-    <nd ref='388942' />
-    <nd ref='388943' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Copperfield Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148511' timestamp='2007-04-29T20:37:19+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243578' />
-    <nd ref='28243584' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaumont Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4237899' timestamp='2007-05-22T00:20:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254896' />
-    <nd ref='254897' />
-    <nd ref='254898' />
-    <nd ref='29464241' />
-    <nd ref='25303933' />
-    <nd ref='19227222' />
-    <nd ref='25303932' />
-    <nd ref='19227221' />
-    <nd ref='29464244' />
-    <nd ref='422978' />
-    <nd ref='16963753' />
-    <nd ref='29464253' />
-    <nd ref='242755' />
-    <nd ref='7015694' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Burgess Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854812' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071275' />
-    <nd ref='13071288' />
-    <nd ref='13071287' />
-    <nd ref='13071285' />
-    <nd ref='13071284' />
-    <nd ref='13071283' />
-    <nd ref='13071282' />
-    <nd ref='13071280' />
-    <nd ref='13071279' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wavell Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3687610' timestamp='2006-10-15T10:30:53+01:00' user='nickw' visible='true'>
-    <nd ref='18232072' />
-    <nd ref='20831111' />
-    <nd ref='18232071' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Waterloo Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15725501' timestamp='2007-12-08T20:24:12+00:00' user='nickw' visible='true'>
-    <nd ref='157223781' />
-    <nd ref='157223787' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chisholm Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639466' timestamp='2006-06-01T09:41:23+01:00' user='nickw' visible='true'>
-    <nd ref='325652' />
-    <nd ref='21091882' />
-    <nd ref='21141430' />
-    <nd ref='21091881' />
-    <nd ref='21561543' />
-    <nd ref='325653' />
-    <nd ref='21561544' />
-    <nd ref='325654' />
-    <nd ref='21561548' />
-    <nd ref='21141395' />
-    <nd ref='11419555' />
-    <nd ref='14743160' />
-    <nd ref='325655' />
-    <nd ref='325656' />
-    <nd ref='21561575' />
-    <nd ref='21141402' />
-    <nd ref='21561567' />
-    <nd ref='325657' />
-    <nd ref='21141417' />
-    <nd ref='325658' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St James Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3677089' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='254899' />
-    <nd ref='422962' />
-    <nd ref='422963' />
-    <tag k='highway' v='unclassified' />
-    <tag k='note' v='southernmost segment might be part of the polygon. need to check' />
-    <tag k='name' v='Devonshire Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661830' timestamp='2007-05-28T19:39:54+01:00' visible='true'>
-    <nd ref='29631643' />
-    <nd ref='29631655' />
-    <nd ref='29631649' />
-    <nd ref='29631652' />
-    <nd ref='29631644' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999145' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971178' />
-    <nd ref='20971179' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8440503' timestamp='2007-05-27T14:47:30+01:00' user='LivingWithDragons' visible='true'>
-    <nd ref='29569522' />
-    <nd ref='28903957' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661839' timestamp='2007-05-26T20:15:31+01:00' visible='true'>
-    <nd ref='29632456' />
-    <nd ref='29632453' />
-    <nd ref='29632455' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Abbots Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540762' timestamp='2007-04-29T21:43:35+01:00' visible='true'>
-    <nd ref='28249986' />
-    <nd ref='28249988' />
-    <nd ref='28249989' />
-    <nd ref='28249991' />
-    <nd ref='28249990' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mill Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546175' timestamp='2007-04-30T22:14:01+01:00' user='nickw' visible='true'>
-    <nd ref='9727817' />
-    <nd ref='28232551' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thruxton Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4289968' timestamp='2007-10-29T15:43:36+00:00' user='Dean Earley' visible='true'>
-    <nd ref='24924282' />
-    <nd ref='25896422' />
-    <nd ref='91505916' />
-    <nd ref='24924230' />
-    <nd ref='25896419' />
-    <nd ref='25896418' />
-    <nd ref='25896417' />
-    <nd ref='25896416' />
-    <nd ref='25896421' />
-    <nd ref='25896423' />
-    <nd ref='24924282' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15723793' timestamp='2007-12-08T20:07:49+00:00' user='nickw' visible='true'>
-    <nd ref='157200370' />
-    <nd ref='157200361' />
-    <nd ref='157200377' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wittering Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540956' timestamp='2007-04-29T22:00:53+01:00' visible='true'>
-    <nd ref='28252902' />
-    <nd ref='28252904' />
-    <nd ref='28252903' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunvegan Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999854' timestamp='2006-11-13T21:50:58+00:00' user='nickw' visible='true'>
-    <nd ref='19227236' />
-    <nd ref='20976776' />
-    <nd ref='20976775' />
-    <nd ref='20976762' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Warwick Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1668' timestamp='2006-06-04T00:35:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387812' />
-    <nd ref='387813' />
-    <nd ref='387814' />
-    <nd ref='387815' />
-    <nd ref='26001633' />
-    <nd ref='387816' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Richmond Gardens' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10569173' timestamp='2007-10-29T16:25:37+00:00' user='Dean Earley' visible='true'>
-    <nd ref='14745439' />
-    <nd ref='14745438' />
-    <nd ref='14745436' />
-    <nd ref='14745435' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342627' timestamp='2007-03-09T20:54:26+00:00' user='nickw' visible='true'>
-    <nd ref='20972789' />
-    <nd ref='26447403' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Anglesea Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125048' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071225' />
-    <nd ref='13071226' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tamarisk Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999140' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971179' />
-    <nd ref='20971180' />
-    <nd ref='20971181' />
-    <nd ref='20971182' />
-    <nd ref='20971183' />
-    <nd ref='20971189' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='the local CC have the amazing ability to forget road signs around here...' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150107' timestamp='2007-11-28T09:43:16+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30256868' />
-    <nd ref='30256878' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635657' timestamp='2007-12-10T19:19:58+00:00' user='sladen' visible='true'>
-    <nd ref='29461227' />
-    <nd ref='29461228' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Johnson Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4535826' timestamp='2007-04-29T01:04:27+01:00' visible='true'>
-    <nd ref='28173903' />
-    <nd ref='28173920' />
-    <nd ref='28173913' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Petworth Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4414520' timestamp='2007-11-25T22:28:46+00:00' user='southglos' visible='true'>
-    <nd ref='14728167' />
-    <nd ref='25303926' />
-    <tag k='oneway' v='yes' />
-    <tag k='osmarender:renderName' v='no' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='osmarender:renderRef' v='no' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15450955' timestamp='2007-12-06T20:40:58+00:00' user='nickw' visible='true'>
-    <nd ref='28874055' />
-    <nd ref='28874056' />
-    <nd ref='28874081' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Holly Oak Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015822' timestamp='2006-11-26T00:16:00+00:00' user='nickw' visible='true'>
-    <nd ref='21275820' />
-    <nd ref='21600504' />
-    <nd ref='21275632' />
-    <nd ref='11419591' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='English Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='14505788' timestamp='2007-11-29T22:29:08+00:00' user='nickw' visible='true'>
-    <nd ref='142616993' />
-    <nd ref='142617022' />
-    <nd ref='142617028' />
-    <nd ref='142617034' />
-    <nd ref='142617040' />
-    <nd ref='142617043' />
-    <nd ref='142617047' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hill Farm Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773389' timestamp='2007-06-17T21:58:22+01:00' visible='true'>
-    <nd ref='30505701' />
-    <nd ref='30505944' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072024' timestamp='2007-08-14T04:48:28+01:00' user='andrewpmk' visible='true'>
-    <nd ref='301579' />
-    <nd ref='34278550' />
-    <nd ref='34278522' />
-    <nd ref='34278525' />
-    <nd ref='34278529' />
-    <nd ref='34278531' />
-    <nd ref='34278534' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Tways 0.2' />
-  </way>
-  <way id='5781533' timestamp='2007-09-07T17:38:56+01:00' user='mike l' visible='true'>
-    <nd ref='45160155' />
-    <nd ref='28194397' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724655' timestamp='2007-12-08T20:15:00+00:00' user='nickw' visible='true'>
-    <nd ref='157209168' />
-    <nd ref='157209186' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hornchurch Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546155' timestamp='2007-04-30T22:13:57+01:00' user='nickw' visible='true'>
-    <nd ref='28342554' />
-    <nd ref='28342561' />
-    <nd ref='28342562' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='some signs call it Cornel Road, others Cornell Road. Don't ask me why...' />
-    <tag k='name' v='Cornel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743747' timestamp='2007-06-12T00:14:50+01:00' user='nickw' visible='true'>
-    <nd ref='30229589' />
-    <nd ref='30229590' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wylye Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540324' timestamp='2007-04-29T21:09:51+01:00' visible='true'>
-    <nd ref='28194389' />
-    <nd ref='28194390' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kestrel Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119878' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319644' />
-    <nd ref='319645' />
-    <nd ref='319646' />
-    <nd ref='319647' />
-    <nd ref='310893' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Alma Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4536691' timestamp='2007-04-29T08:58:08+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194839' />
-    <nd ref='28194853' />
-    <nd ref='28194849' />
-    <nd ref='28194850' />
-    <nd ref='28194851' />
-    <nd ref='28194852' />
-    <nd ref='28194841' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Greenbank Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586113' timestamp='2007-06-09T19:48:46+01:00' user='nickw' visible='true'>
-    <nd ref='10537327' />
-    <nd ref='29008364' />
-    <nd ref='29008365' />
-    <nd ref='29008366' />
-    <nd ref='29008372' />
-    <nd ref='29008373' />
-    <nd ref='29008374' />
-    <nd ref='29008376' />
-    <nd ref='29008375' />
-    <nd ref='29008390' />
-    <nd ref='29008391' />
-    <nd ref='29008392' />
-    <nd ref='29008395' />
-    <nd ref='29008396' />
-    <nd ref='29008397' />
-    <nd ref='29008398' />
-    <nd ref='29008399' />
-    <nd ref='29008400' />
-    <nd ref='30124653' />
-    <nd ref='29008403' />
-    <nd ref='29008405' />
-    <nd ref='29008406' />
-    <nd ref='29008408' />
-    <nd ref='29008413' />
-    <nd ref='29008457' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Windermere Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061547' timestamp='2006-12-09T09:51:52+00:00' user='nickw' visible='true'>
-    <nd ref='388899' />
-    <nd ref='388900' />
-    <nd ref='388901' />
-    <nd ref='388902' />
-    <nd ref='388903' />
-    <nd ref='21636747' />
-    <nd ref='21507803' />
-    <nd ref='21507777' />
-    <nd ref='388904' />
-    <nd ref='388905' />
-    <nd ref='388906' />
-    <nd ref='388907' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3431520' timestamp='2006-09-28T23:48:14+01:00' user='nickw' visible='true'>
-    <nd ref='16963781' />
-    <nd ref='254971' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677085' timestamp='2006-10-14T13:19:12+01:00' user='nickw' visible='true'>
-    <nd ref='422963' />
-    <nd ref='18232074' />
-    <nd ref='18232075' />
-    <nd ref='18232076' />
-    <nd ref='18232068' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Handel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148376' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179509' />
-    <nd ref='28179510' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9660266' timestamp='2007-10-16T20:14:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254763' />
-    <nd ref='14964129' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687171' timestamp='2007-05-30T21:37:22+01:00' user='nickw' visible='true'>
-    <nd ref='29794371' />
-    <nd ref='29794382' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ferndene Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4253357' timestamp='2007-10-16T17:24:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25471839' />
-    <nd ref='25471869' />
-    <nd ref='25471870' />
-    <nd ref='25471871' />
-    <nd ref='25471835' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129265' timestamp='2006-09-08T02:12:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726301' />
-    <nd ref='14964102' />
-    <nd ref='14964103' />
-    <nd ref='14964104' />
-    <nd ref='14964105' />
-    <nd ref='14964106' />
-    <nd ref='14964107' />
-    <nd ref='14964108' />
-    <nd ref='14964127' />
-    <nd ref='14964126' />
-    <nd ref='14964120' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586250' timestamp='2007-05-12T15:36:08+01:00' user='nickw' visible='true'>
-    <nd ref='29009222' />
-    <nd ref='29009223' />
-    <nd ref='29009224' />
-    <nd ref='29008443' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gatcombe Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4673081' timestamp='2007-05-27T15:13:57+01:00' visible='true'>
-    <nd ref='17721056' />
-    <nd ref='17721073' />
-    <nd ref='17721057' />
-    <nd ref='17721067' />
-    <nd ref='17721068' />
-    <nd ref='17721069' />
-    <nd ref='17721070' />
-    <nd ref='17721072' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Loveridge Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996904' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957220' />
-    <nd ref='20957191' />
-    <nd ref='20957219' />
-    <nd ref='20957248' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thornbury Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677231' timestamp='2007-05-28T11:03:42+01:00' visible='true'>
-    <nd ref='29512252' />
-    <nd ref='29704958' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Haven' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546072' timestamp='2007-04-30T21:49:14+01:00' user='nickw' visible='true'>
-    <nd ref='28230956' />
-    <nd ref='28341795' />
-    <nd ref='28341796' />
-    <nd ref='661183' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4991512' timestamp='2007-07-30T16:06:55+01:00' visible='true'>
-    <nd ref='33130187' />
-    <nd ref='33130191' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fitzhugh Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4538731' timestamp='2007-10-29T16:25:40+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21585930' />
-    <nd ref='21585934' />
-    <nd ref='21585938' />
-    <nd ref='30161108' />
-    <nd ref='29909653' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Desbourough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999326' timestamp='2007-10-16T20:14:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='8596797' />
-    <nd ref='20973118' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015830' timestamp='2006-11-26T00:18:44+00:00' user='nickw' visible='true'>
-    <nd ref='11419582' />
-    <nd ref='21275629' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Church End' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574131' timestamp='2007-12-08T20:44:53+00:00' user='nickw' visible='true'>
-    <nd ref='21141490' />
-    <nd ref='29871074' />
-    <nd ref='33718194' />
-    <nd ref='91127563' />
-    <nd ref='28874053' />
-    <nd ref='33718195' />
-    <nd ref='28874087' />
-    <nd ref='28874055' />
-    <nd ref='28874082' />
-    <nd ref='28874085' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Olive Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4215247' timestamp='2007-01-10T00:20:52+00:00' user='nickw' visible='true'>
-    <nd ref='24984788' />
-    <nd ref='24984789' />
-    <nd ref='24984790' />
-    <nd ref='24984791' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ethelburt Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9044025' timestamp='2007-10-12T13:59:13+01:00' user='SteveC' visible='true'>
-    <nd ref='66582039' />
-    <nd ref='66582042' />
-    <nd ref='66582043' />
-    <nd ref='66582044' />
-    <nd ref='66582046' />
-    <nd ref='66582047' />
-    <nd ref='66582048' />
-    <nd ref='66582049' />
-    <nd ref='66582050' />
-    <nd ref='66582051' />
-    <nd ref='66582052' />
-    <nd ref='66582053' />
-    <nd ref='66582039' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Ordnance Survey' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3578755' timestamp='2006-10-07T00:25:25+01:00' user='nickw' visible='true'>
-    <nd ref='17724244' />
-    <nd ref='17724242' />
-    <nd ref='17724251' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harborough Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3291' timestamp='2007-08-12T23:15:08+01:00' user='Edward' visible='true'>
-    <nd ref='675859' />
-    <nd ref='675860' />
-    <nd ref='675862' />
-    <nd ref='700510' />
-    <nd ref='700511' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Hillside Avenue' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3999149' timestamp='2006-11-12T22:57:30+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971201' />
-    <nd ref='20971210' />
-    <nd ref='20971208' />
-    <nd ref='20971209' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540301' timestamp='2007-04-29T21:09:41+01:00' visible='true'>
-    <nd ref='28194329' />
-    <nd ref='28194330' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Curlew Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639830' timestamp='2006-06-04T19:03:46+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254634' />
-    <nd ref='254323' />
-    <nd ref='254324' />
-    <nd ref='254325' />
-    <nd ref='254326' />
-    <nd ref='254327' />
-    <nd ref='254328' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='22801701' timestamp='2008-02-03T06:18:06+00:00' user='sladen' visible='true'>
-    <nd ref='245150974' />
-    <nd ref='245151023' />
-    <nd ref='245151024' />
-    <nd ref='245147525' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3091885' timestamp='2007-08-12T23:07:07+01:00' user='Edward' visible='true'>
-    <nd ref='657799' />
-    <nd ref='254922' />
-    <nd ref='14743180' />
-    <nd ref='14743181' />
-    <nd ref='17724275' />
-    <nd ref='254899' />
-    <nd ref='14743182' />
-    <nd ref='254900' />
-    <nd ref='20831096' />
-    <nd ref='254379' />
-    <nd ref='254414' />
-    <nd ref='254901' />
-    <nd ref='14743183' />
-    <nd ref='657802' />
-    <nd ref='254902' />
-    <nd ref='254491' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Cumberland Place' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='15451212' timestamp='2007-12-06T20:43:04+00:00' user='Dean Earley' visible='true'>
-    <nd ref='153329608' />
-    <nd ref='153329602' />
-    <nd ref='153329594' />
-    <nd ref='153329608' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818446' timestamp='2006-08-08T23:26:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='2417459' />
-    <nd ref='25303007' />
-    <nd ref='530525' />
-    <nd ref='25303006' />
-    <nd ref='25303005' />
-    <nd ref='254689' />
-    <nd ref='2417459' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541327' timestamp='2007-04-29T22:57:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244286' />
-    <nd ref='28244252' />
-    <nd ref='28244246' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Millbridge Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149930' timestamp='2007-10-16T11:34:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29389522' />
-    <nd ref='29389523' />
-    <nd ref='29389525' />
-    <nd ref='29392365' />
-    <nd ref='31163574' />
-    <nd ref='29392366' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Grantham road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605558' timestamp='2007-05-16T00:37:06+01:00' visible='true'>
-    <nd ref='29145095' />
-    <nd ref='254695' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005415' timestamp='2006-11-19T12:09:23+00:00' user='nickw' visible='true'>
-    <nd ref='14743123' />
-    <nd ref='21091835' />
-    <nd ref='21091875' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nightingale Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10569169' timestamp='2007-10-29T16:25:33+00:00' user='Dean Earley' visible='true'>
-    <nd ref='17721085' />
-    <nd ref='254685' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150049' timestamp='2007-05-22T00:19:42+01:00' user='Dean Earley' visible='true'>
-    <nd ref='27021767' />
-    <nd ref='29464277' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6169509' timestamp='2007-12-08T20:43:35+00:00' user='nickw' visible='true'>
-    <nd ref='51196149' />
-    <nd ref='157223774' />
-    <nd ref='157223781' />
-    <nd ref='50774726' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='end guestimated' />
-    <tag k='name' v='Chisholm Close' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='10556597' timestamp='2007-10-29T08:14:24+00:00' user='nickw' visible='true'>
-    <nd ref='91121995' />
-    <nd ref='91121998' />
-    <nd ref='91120351' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='might be Thorndike Road. However the lamp posts are numbered differently (is that a record for the most obscure piece of evidence for it being a different road???)' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818224' timestamp='2007-06-26T23:45:21+01:00' user='nickw' visible='true'>
-    <nd ref='30956565' />
-    <nd ref='30956568' />
-    <nd ref='30956569' />
-    <nd ref='30956618' />
-    <nd ref='30956619' />
-    <nd ref='30956620' />
-    <nd ref='30956621' />
-    <nd ref='30956622' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10518032' timestamp='2007-10-28T20:36:49+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='90591404' />
-    <nd ref='90593912' />
-    <nd ref='90593913' />
-    <nd ref='90593914' />
-    <nd ref='90593915' />
-    <nd ref='90593916' />
-    <nd ref='90591405' />
-    <nd ref='90591404' />
-    <tag k='leisure' v='pitch' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4551443' timestamp='2007-09-20T19:39:21+01:00' user='mike l' visible='true'>
-    <nd ref='28414274' />
-    <nd ref='28414280' />
-    <nd ref='28414276' />
-    <nd ref='28414277' />
-    <nd ref='28414264' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Farmery Close' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4008572' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='21141388' />
-    <nd ref='21141392' />
-    <nd ref='21141393' />
-    <nd ref='21141383' />
-    <nd ref='21141391' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kellett Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3906612' timestamp='2007-05-12T15:32:08+01:00' user='nickw' visible='true'>
-    <nd ref='474648' />
-    <nd ref='15028848' />
-    <nd ref='10537330' />
-    <nd ref='20107349' />
-    <nd ref='29009085' />
-    <nd ref='20107343' />
-    <tag k='ref' v='C194' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Townhill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119859' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='518808' />
-    <nd ref='423287' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Brickfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='22800090' timestamp='2008-02-03T06:01:24+00:00' user='sladen' visible='true'>
-    <nd ref='245145573' />
-    <nd ref='245145683' />
-    <nd ref='245145464' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='London Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4585177' timestamp='2007-05-12T09:40:25+01:00' user='nickw' visible='true'>
-    <nd ref='29001319' />
-    <nd ref='29001322' />
-    <nd ref='29001323' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Janaway Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677232' timestamp='2007-05-28T11:06:41+01:00' visible='true'>
-    <nd ref='29704596' />
-    <nd ref='29704597' />
-    <nd ref='29704598' />
-    <nd ref='29512665' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Ruskin Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151525' timestamp='2007-06-12T21:04:59+01:00' visible='true'>
-    <nd ref='30259422' />
-    <nd ref='30259420' />
-    <nd ref='29929407' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150195' timestamp='2007-05-24T11:23:14+01:00' visible='true'>
-    <nd ref='29549381' />
-    <nd ref='29549382' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Starling Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152191' timestamp='2007-06-11T22:36:27+01:00' visible='true'>
-    <nd ref='30226204' />
-    <nd ref='30227019' />
-    <nd ref='30226210' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Chatsworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079257' timestamp='2006-12-18T20:56:18+00:00' visible='true'>
-    <nd ref='21636232' />
-    <nd ref='21636521' />
-    <nd ref='21636544' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grosvenor Close' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='4703975' timestamp='2007-06-03T22:07:17+01:00' visible='true'>
-    <nd ref='29929411' />
-    <nd ref='29929608' />
-    <nd ref='29929610' />
-    <nd ref='29704539' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540251' timestamp='2007-04-29T20:59:45+01:00' user='Dean Earley' visible='true'>
-    <nd ref='325664' />
-    <nd ref='20976678' />
-    <tag k='oneway' v='yes' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4083483' timestamp='2008-02-03T06:08:19+00:00' user='sladen' visible='true'>
-    <nd ref='21677588' />
-    <nd ref='245148950' />
-    <nd ref='21677595' />
-    <nd ref='21677596' />
-    <nd ref='20971199' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Vincent's Walk' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4773386' timestamp='2007-06-17T21:57:31+01:00' visible='true'>
-    <nd ref='30505714' />
-    <nd ref='30505943' />
-    <nd ref='30505716' />
-    <nd ref='30505719' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oak Tree Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546171' timestamp='2007-04-30T22:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='28342591' />
-    <nd ref='28231321' />
-    <nd ref='28342594' />
-    <nd ref='28342593' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Margam Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4653035' timestamp='2007-06-30T12:32:07+01:00' visible='true'>
-    <nd ref='29621214' />
-    <nd ref='30580570' />
-    <nd ref='30580572' />
-    <nd ref='29621205' />
-    <nd ref='29621206' />
-    <nd ref='29621207' />
-    <nd ref='29621208' />
-    <nd ref='29621209' />
-    <nd ref='29621210' />
-    <nd ref='29621212' />
-    <nd ref='29389518' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4539750' timestamp='2007-04-29T20:03:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240311' />
-    <nd ref='28237243' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wingate Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604568' timestamp='2007-05-15T20:53:21+01:00' user='nickw' visible='true'>
-    <nd ref='29134835' />
-    <nd ref='29134112' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brading Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295840' timestamp='2007-02-16T20:51:26+00:00' user='nickw' visible='true'>
-    <nd ref='19890099' />
-    <nd ref='25947168' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586118' timestamp='2007-05-12T15:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='29008379' />
-    <nd ref='29008380' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Adur Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015833' timestamp='2006-11-26T00:18:45+00:00' user='nickw' visible='true'>
-    <nd ref='21275712' />
-    <nd ref='21561545' />
-    <nd ref='21275713' />
-    <nd ref='21275639' />
-    <nd ref='21275714' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Reynolds Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4651183' timestamp='2007-05-25T21:55:54+01:00' visible='true'>
-    <nd ref='29595172' />
-    <nd ref='29595198' />
-    <nd ref='29595073' />
-    <nd ref='29595092' />
-    <nd ref='29595165' />
-    <nd ref='29595196' />
-    <nd ref='29595097' />
-    <nd ref='29595172' />
-    <tag k='landuse' v='retail' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077270' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='21613484' />
-    <nd ref='21613478' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687240' timestamp='2007-05-30T21:41:53+01:00' user='nickw' visible='true'>
-    <nd ref='29794809' />
-    <nd ref='29794810' />
-    <nd ref='29794811' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dean Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539989' timestamp='2007-04-29T20:37:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243660' />
-    <nd ref='28243697' />
-    <nd ref='28243685' />
-    <nd ref='28243694' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Overcliff Rise' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854808' timestamp='2006-08-11T02:50:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254417' />
-    <nd ref='13071219' />
-    <nd ref='13071228' />
-    <nd ref='13071220' />
-    <nd ref='13071222' />
-    <nd ref='13071225' />
-    <nd ref='13071224' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tamarisk Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1260266' timestamp='2006-05-22T22:24:28+01:00' user='nickw' visible='true'>
-    <nd ref='608160' />
-    <nd ref='608161' />
-    <nd ref='608162' />
-    <nd ref='608164' />
-    <nd ref='608165' />
-    <nd ref='657779' />
-    <nd ref='657778' />
-    <nd ref='657777' />
-    <nd ref='657776' />
-    <nd ref='26781157' />
-    <nd ref='26781158' />
-    <nd ref='26781203' />
-    <nd ref='657775' />
-    <nd ref='657774' />
-    <nd ref='657773' />
-    <nd ref='657772' />
-    <nd ref='26593137' />
-    <nd ref='26781201' />
-    <nd ref='635133' />
-    <nd ref='28342593' />
-    <nd ref='635134' />
-    <nd ref='10942622' />
-    <nd ref='28234914' />
-    <nd ref='635135' />
-    <nd ref='635136' />
-    <nd ref='28341798' />
-    <nd ref='635137' />
-    <nd ref='28342521' />
-    <nd ref='635138' />
-    <nd ref='28341790' />
-    <nd ref='28342610' />
-    <nd ref='635139' />
-    <nd ref='635140' />
-    <nd ref='661187' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='abutters' v='residential' />
-    <tag k='name' v='Spring Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='22801736' timestamp='2008-02-03T06:26:03+00:00' user='sladen' visible='true'>
-    <nd ref='160232026' />
-    <nd ref='160232028' />
-    <nd ref='160232029' />
-    <nd ref='160232030' />
-    <nd ref='160232032' />
-    <nd ref='17769060' />
-    <nd ref='160232034' />
-    <nd ref='160232036' />
-    <nd ref='160232037' />
-    <nd ref='17769062' />
-    <nd ref='160235357' />
-    <nd ref='21157479' />
-    <nd ref='160236650' />
-    <nd ref='160236651' />
-    <nd ref='160236652' />
-    <nd ref='21157476' />
-    <tag k='railway' v='rail' />
-    <tag k='source' v='Landsat' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='layer' v='-1' />
-  </way>
-  <way id='1691' timestamp='2006-06-04T00:35:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='442384' />
-    <nd ref='658451' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Spear Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='14505561' timestamp='2007-11-29T22:27:22+00:00' user='nickw' visible='true'>
-    <nd ref='142614189' />
-    <nd ref='142614196' />
-    <nd ref='142614207' />
-    <nd ref='142614219' />
-    <nd ref='142614229' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edith Haisman Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9674296' timestamp='2007-10-16T23:45:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='9726311' />
-    <nd ref='14964121' />
-    <nd ref='254673' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Bullar Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2350447' timestamp='2007-06-09T19:36:00+01:00' user='nickw' visible='true'>
-    <nd ref='10216407' />
-    <nd ref='10216402' />
-    <nd ref='469846' />
-    <nd ref='13071435' />
-    <nd ref='13071436' />
-    <nd ref='30124192' />
-    <nd ref='10216421' />
-    <nd ref='469845' />
-    <nd ref='26945352' />
-    <nd ref='12801362' />
-    <nd ref='469844' />
-    <nd ref='469843' />
-    <nd ref='10216427' />
-    <nd ref='10216426' />
-    <nd ref='469841' />
-    <nd ref='14962500' />
-    <nd ref='10215645' />
-    <nd ref='512434' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C68' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='West End Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='1260098' timestamp='2006-05-22T22:21:22+01:00' user='nickw' visible='true'>
-    <nd ref='3915358' />
-    <nd ref='28237093' />
-    <nd ref='3915353' />
-    <nd ref='3915355' />
-    <nd ref='28237067' />
-    <nd ref='28235777' />
-    <nd ref='10942509' />
-    <nd ref='26945379' />
-    <nd ref='28235790' />
-    <nd ref='10942573' />
-    <nd ref='28237034' />
-    <nd ref='10942592' />
-    <nd ref='10942597' />
-    <nd ref='3915357' />
-    <nd ref='10942466' />
-    <nd ref='10942867' />
-    <nd ref='657753' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Upper Deacon Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546539' timestamp='2007-04-30T23:45:39+01:00' user='nickw' visible='true'>
-    <nd ref='28348129' />
-    <nd ref='28348146' />
-    <nd ref='28348147' />
-    <nd ref='28345081' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Walsingham Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8130051' timestamp='2006-10-28T01:56:05+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20133140' />
-    <nd ref='20133143' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cerne Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556820' timestamp='2007-10-29T08:23:16+00:00' user='nickw' visible='true'>
-    <nd ref='14743145' />
-    <nd ref='91132083' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fuchsia Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558328' timestamp='2007-05-03T00:08:32+01:00' visible='true'>
-    <nd ref='28582998' />
-    <nd ref='28582999' />
-    <nd ref='28583000' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bransbury Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13250444' timestamp='2007-12-10T20:57:12+00:00' user='sladen' visible='true'>
-    <nd ref='122311149' />
-    <nd ref='160406928' />
-    <nd ref='122311154' />
-    <nd ref='160406931' />
-    <nd ref='122311157' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Lakelands Drive' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='3999322' timestamp='2007-10-16T23:54:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973094' />
-    <nd ref='8596791' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644815' timestamp='2007-05-24T11:23:09+01:00' visible='true'>
-    <nd ref='29548690' />
-    <nd ref='29548691' />
-    <nd ref='29548692' />
-    <nd ref='29548693' />
-    <nd ref='29548701' />
-    <nd ref='29548703' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Locksley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22701431' timestamp='2008-01-26T18:04:26+00:00' user='stuphi' visible='true'>
-    <nd ref='243511468' />
-    <nd ref='170446' />
-    <nd ref='325192' />
-    <nd ref='325191' />
-    <nd ref='325195' />
-    <nd ref='170445' />
-    <nd ref='20961049' />
-    <nd ref='325198' />
-    <nd ref='325201' />
-    <nd ref='170444' />
-    <nd ref='325203' />
-    <nd ref='325205' />
-    <nd ref='170443' />
-    <nd ref='325209' />
-    <nd ref='325211' />
-    <nd ref='325213' />
-    <nd ref='325214' />
-    <nd ref='325216' />
-    <nd ref='325218' />
-    <nd ref='325220' />
-    <nd ref='20961054' />
-    <nd ref='325223' />
-    <nd ref='325225' />
-    <nd ref='20961056' />
-    <nd ref='325227' />
-    <nd ref='325228' />
-    <nd ref='325229' />
-    <nd ref='325233' />
-    <nd ref='325235' />
-    <nd ref='170439' />
-    <nd ref='20961057' />
-    <nd ref='170438' />
-    <nd ref='170435' />
-    <nd ref='170434' />
-    <nd ref='325240' />
-    <nd ref='170437' />
-    <nd ref='325243' />
-    <nd ref='325246' />
-    <nd ref='170436' />
-    <nd ref='325248' />
-    <nd ref='325250' />
-    <nd ref='170430' />
-    <nd ref='325266' />
-    <nd ref='325254' />
-    <nd ref='20961059' />
-    <nd ref='325260' />
-    <nd ref='325261' />
-    <nd ref='325262' />
-    <nd ref='325263' />
-    <nd ref='325264' />
-    <nd ref='170432' />
-    <nd ref='325273' />
-    <nd ref='325274' />
-    <nd ref='20961062' />
-    <tag k='oneway' v='true' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='ref' v='M27' />
-    <tag k='highway' v='motorway' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='M27 eastbound' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4209587' timestamp='2007-01-06T14:48:26+00:00' user='nickw' visible='true'>
-    <nd ref='24924067' />
-    <nd ref='21613448' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4342636' timestamp='2007-03-09T20:54:26+00:00' user='nickw' visible='true'>
-    <nd ref='26114357' />
-    <nd ref='26447411' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Northam Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694071' timestamp='2007-06-03T20:41:58+01:00' visible='true'>
-    <nd ref='29838346' />
-    <nd ref='29838347' />
-    <nd ref='29925572' />
-    <nd ref='29838348' />
-    <nd ref='29708027' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3084956' timestamp='2008-02-03T06:10:27+00:00' user='sladen' visible='true'>
-    <nd ref='254446' />
-    <nd ref='245149447' />
-    <nd ref='285866' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Above Bar' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4196525' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='24668122' />
-    <nd ref='24668301' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Taw Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10155490' timestamp='2007-10-22T22:35:07+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='25762092' />
-    <nd ref='25762093' />
-    <nd ref='25762094' />
-    <nd ref='25762095' />
-    <nd ref='25762096' />
-    <nd ref='25762097' />
-    <nd ref='25762098' />
-    <nd ref='25762099' />
-    <nd ref='25762100' />
-    <nd ref='25762101' />
-    <nd ref='25762102' />
-    <nd ref='25762103' />
-    <nd ref='25762104' />
-    <nd ref='25762105' />
-    <nd ref='25762106' />
-    <nd ref='25762108' />
-    <nd ref='25762109' />
-    <nd ref='25762111' />
-    <nd ref='25762112' />
-    <nd ref='25762114' />
-    <nd ref='25762126' />
-    <nd ref='25762127' />
-    <nd ref='25762128' />
-    <nd ref='20952634' />
-    <tag k='waterway' v='river' />
-    <tag k='source' v='npe' />
-    <tag k='name' v='River Itchen' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3144198' timestamp='2006-09-08T23:07:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254549' />
-    <nd ref='15028826' />
-    <nd ref='15028825' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bromley Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4644677' timestamp='2007-05-24T10:51:05+01:00' visible='true'>
-    <nd ref='29548671' />
-    <nd ref='29548672' />
-    <nd ref='29548673' />
-    <nd ref='29548675' />
-    <nd ref='29548676' />
-    <nd ref='29548672' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Jubilee Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19071533' timestamp='2007-12-30T15:53:41+00:00' visible='true'>
-    <nd ref='160207839' />
-    <nd ref='15657677' />
-    <nd ref='160207841' />
-    <nd ref='160207842' />
-    <nd ref='160207843' />
-    <nd ref='15657678' />
-    <tag k='bridge' v='yes' />
-    <tag k='railway' v='rail' />
-    <tag k='name' v='West Coastway Line' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4215239' timestamp='2007-01-10T00:20:46+00:00' user='nickw' visible='true'>
-    <nd ref='24984749' />
-    <nd ref='28183712' />
-    <nd ref='24984750' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fitzroy Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084415' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689105' />
-    <nd ref='21689104' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541323' timestamp='2007-04-29T22:57:06+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237242' />
-    <nd ref='28244177' />
-    <nd ref='28244175' />
-    <nd ref='28244169' />
-    <nd ref='28244183' />
-    <nd ref='28244188' />
-    <nd ref='28244197' />
-    <nd ref='28244205' />
-    <nd ref='28244215' />
-    <nd ref='28240293' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cunningham Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8128483' timestamp='2007-10-29T16:25:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='15360191' />
-    <nd ref='17722350' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Stoneham Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586246' timestamp='2007-05-12T15:36:07+01:00' user='nickw' visible='true'>
-    <nd ref='20107341' />
-    <nd ref='29009189' />
-    <nd ref='29009190' />
-    <nd ref='29009191' />
-    <nd ref='29009192' />
-    <nd ref='29009193' />
-    <nd ref='29009194' />
-    <nd ref='29009195' />
-    <nd ref='29009196' />
-    <nd ref='29008445' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Harbourne Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077036' timestamp='2006-12-16T10:14:12+00:00' user='nickw' visible='true'>
-    <nd ref='21600499' />
-    <nd ref='21600500' />
-    <nd ref='21600501' />
-    <nd ref='21600502' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Carlisle Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091881' timestamp='2006-09-03T00:38:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743132' />
-    <nd ref='14743156' />
-    <nd ref='21561553' />
-    <nd ref='14743157' />
-    <nd ref='21561554' />
-    <nd ref='14743155' />
-    <nd ref='14743159' />
-    <nd ref='14743158' />
-    <nd ref='325655' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Howards Grove' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295842' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='25947181' />
-    <nd ref='25947169' />
-    <nd ref='25947177' />
-    <nd ref='25947163' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='St Alban's Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540333' timestamp='2007-04-29T21:09:59+01:00' visible='true'>
-    <nd ref='28194410' />
-    <nd ref='28194411' />
-    <nd ref='28194413' />
-    <tag k='name' v='Harrier Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546172' timestamp='2007-04-30T22:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='657769' />
-    <nd ref='28342595' />
-    <nd ref='28342596' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4723472' timestamp='2007-06-08T18:12:32+01:00' visible='true'>
-    <nd ref='30089046' />
-    <nd ref='30089048' />
-    <nd ref='29549382' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10596002' timestamp='2007-10-30T15:20:28+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30431990' />
-    <nd ref='25296377' />
-    <nd ref='30431985' />
-    <nd ref='29535184' />
-    <nd ref='29704604' />
-    <nd ref='15740472' />
-    <nd ref='25296379' />
-    <nd ref='29533956' />
-    <nd ref='30255643' />
-    <nd ref='29533957' />
-    <nd ref='30255629' />
-    <nd ref='25296380' />
-    <nd ref='30255642' />
-    <nd ref='25296381' />
-    <nd ref='30255641' />
-    <nd ref='30255640' />
-    <nd ref='15740473' />
-    <nd ref='25296382' />
-    <nd ref='29704961' />
-    <nd ref='15740474' />
-    <nd ref='29705510' />
-    <nd ref='25296383' />
-    <nd ref='30431939' />
-    <nd ref='25296384' />
-    <nd ref='25296385' />
-    <nd ref='29711861' />
-    <nd ref='15740488' />
-    <nd ref='30431997' />
-    <nd ref='25296018' />
-    <nd ref='25296017' />
-    <nd ref='25296016' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Twyford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3091888' timestamp='2007-06-22T21:44:09+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='657799' />
-    <nd ref='14743177' />
-    <nd ref='14743176' />
-    <nd ref='14743175' />
-    <nd ref='14743174' />
-    <nd ref='30780831' />
-    <nd ref='14743173' />
-    <nd ref='14743172' />
-    <nd ref='14743171' />
-    <nd ref='30780796' />
-    <nd ref='14743178' />
-    <nd ref='30780794' />
-    <nd ref='20971200' />
-    <nd ref='20971201' />
-    <nd ref='20971202' />
-    <nd ref='21275644' />
-    <nd ref='20971203' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2622998' timestamp='2007-09-20T19:45:24+01:00' user='mike l' visible='true'>
-    <nd ref='254496' />
-    <nd ref='329474' />
-    <nd ref='329475' />
-    <nd ref='329476' />
-    <nd ref='24924084' />
-    <nd ref='329477' />
-    <nd ref='544335' />
-    <nd ref='329478' />
-    <nd ref='329479' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='19788347' timestamp='2008-01-04T19:25:07+00:00' user='nickw' visible='true'>
-    <nd ref='24924298' />
-    <nd ref='206162085' />
-    <nd ref='206162086' />
-    <nd ref='206162088' />
-    <nd ref='30290718' />
-    <nd ref='206162089' />
-    <nd ref='206162090' />
-    <nd ref='206162092' />
-    <nd ref='206162093' />
-    <nd ref='30290719' />
-    <nd ref='206162094' />
-    <nd ref='206162096' />
-    <nd ref='206162097' />
-    <nd ref='206162098' />
-    <nd ref='206162100' />
-    <nd ref='206162101' />
-    <nd ref='206162102' />
-    <nd ref='206162104' />
-    <nd ref='206162105' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Belmont Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999829' timestamp='2006-11-13T21:39:23+00:00' user='nickw' visible='true'>
-    <nd ref='20976674' />
-    <nd ref='20976673' />
-    <nd ref='20976672' />
-    <nd ref='28246354' />
-    <nd ref='28246355' />
-    <nd ref='28246356' />
-    <nd ref='28246357' />
-    <nd ref='20976671' />
-    <tag k='oneway' v='yes' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215243' timestamp='2007-01-10T00:20:49+00:00' user='nickw' visible='true'>
-    <nd ref='24984762' />
-    <nd ref='24984764' />
-    <nd ref='24984765' />
-    <nd ref='24984766' />
-    <nd ref='24984767' />
-    <nd ref='24984768' />
-    <nd ref='24984769' />
-    <nd ref='24984770' />
-    <nd ref='24984771' />
-    <nd ref='24984772' />
-    <nd ref='24984773' />
-    <nd ref='388897' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='note' v='accuracy not great' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819441' timestamp='2006-10-23T21:01:12+01:00' user='nickw' visible='true'>
-    <nd ref='254954' />
-    <nd ref='19228096' />
-    <nd ref='19228097' />
-    <nd ref='19228098' />
-    <nd ref='19228099' />
-    <nd ref='19228100' />
-    <nd ref='19228102' />
-    <nd ref='19228103' />
-    <nd ref='19228104' />
-    <nd ref='19228105' />
-    <nd ref='19228107' />
-    <nd ref='19228108' />
-    <nd ref='19228109' />
-    <nd ref='19228110' />
-    <nd ref='19228111' />
-    <nd ref='19228113' />
-    <nd ref='19228114' />
-    <nd ref='19228115' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578759' timestamp='2006-10-07T00:25:26+01:00' user='nickw' visible='true'>
-    <nd ref='325647' />
-    <nd ref='17724239' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Milton Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2920974' timestamp='2006-08-15T12:20:34+01:00' user='nickw' visible='true'>
-    <nd ref='13564834' />
-    <nd ref='13564835' />
-    <nd ref='13564836' />
-    <nd ref='13565056' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4077047' timestamp='2006-12-16T10:14:14+00:00' user='nickw' visible='true'>
-    <nd ref='21600425' />
-    <nd ref='21600512' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4606430' timestamp='2007-05-16T14:22:26+01:00' user='jonnyswerve' visible='true'>
-    <nd ref='254434' />
-    <nd ref='15028816' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Woodmill Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='layer' v='1' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8151521' timestamp='2007-06-17T22:03:41+01:00' visible='true'>
-    <nd ref='29928590' />
-    <nd ref='29928591' />
-    <nd ref='29928592' />
-    <nd ref='29928593' />
-    <nd ref='30506811' />
-    <nd ref='29928594' />
-    <nd ref='29928595' />
-    <nd ref='29928596' />
-    <nd ref='29928597' />
-    <nd ref='29928598' />
-    <nd ref='29928599' />
-    <nd ref='29928600' />
-    <nd ref='30506806' />
-    <nd ref='29928601' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819482' timestamp='2006-10-23T21:13:28+01:00' user='nickw' visible='true'>
-    <nd ref='19227226' />
-    <nd ref='28243598' />
-    <nd ref='19229173' />
-    <nd ref='28243596' />
-    <nd ref='28243595' />
-    <nd ref='28243600' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pointout Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077274' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='305627' />
-    <nd ref='305628' />
-    <nd ref='305629' />
-    <nd ref='305630' />
-    <nd ref='305631' />
-    <nd ref='305632' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704172' timestamp='2007-10-16T02:43:18+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29931327' />
-    <nd ref='29931329' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Kingsway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077573' timestamp='2006-12-16T21:53:08+00:00' user='nickw' visible='true'>
-    <nd ref='21615423' />
-    <nd ref='21614667' />
-    <nd ref='21615422' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hamtun Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947664' timestamp='2007-09-10T23:55:26+01:00' visible='true'>
-    <nd ref='20973101' />
-    <nd ref='48958698' />
-    <nd ref='48958681' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9652520' timestamp='2007-10-16T17:59:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29838588' />
-    <nd ref='29838696' />
-    <nd ref='53421238' />
-    <nd ref='254741' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Bournemouth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3996916' timestamp='2006-11-10T21:59:07+00:00' user='nickw' visible='true'>
-    <nd ref='20957211' />
-    <nd ref='20957210' />
-    <nd ref='20957228' />
-    <nd ref='20957209' />
-    <nd ref='20957206' />
-    <nd ref='20957229' />
-    <nd ref='20957230' />
-    <nd ref='20957205' />
-    <nd ref='20957187' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Newlands Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4310895' timestamp='2007-12-10T19:16:28+00:00' user='sladen' visible='true'>
-    <nd ref='26114391' />
-    <nd ref='26114390' />
-    <nd ref='160226520' />
-    <nd ref='26114389' />
-    <nd ref='160226522' />
-    <nd ref='26114388' />
-    <nd ref='160226525' />
-    <nd ref='160226526' />
-    <nd ref='26114387' />
-    <nd ref='26114385' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Melbourne Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4215225' timestamp='2007-09-15T22:38:40+01:00' user='mike l' visible='true'>
-    <nd ref='24984713' />
-    <nd ref='24984673' />
-    <nd ref='24984712' />
-    <nd ref='24984709' />
-    <nd ref='24984708' />
-    <nd ref='24984707' />
-    <nd ref='24984706' />
-    <nd ref='24984705' />
-    <nd ref='24984704' />
-    <nd ref='24984703' />
-    <nd ref='24984701' />
-    <nd ref='29134828' />
-    <nd ref='24984699' />
-    <nd ref='24984697' />
-    <nd ref='24984695' />
-    <nd ref='29134824' />
-    <nd ref='24984693' />
-    <nd ref='24984690' />
-    <nd ref='24984688' />
-    <nd ref='24984686' />
-    <nd ref='24984683' />
-    <nd ref='24984685' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Leaside Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4797576' timestamp='2007-06-22T21:44:04+01:00' user='Steve Chilton' visible='true'>
-    <nd ref='30780831' />
-    <nd ref='30780829' />
-    <nd ref='30780827' />
-    <nd ref='30780825' />
-    <nd ref='14743176' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10759077' timestamp='2007-11-02T14:14:14+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='95828981' />
-    <nd ref='95828982' />
-    <nd ref='95828983' />
-    <nd ref='95828984' />
-    <nd ref='95828981' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Skandia House' />
-    <tag k='created_by' v='Potlatch 0.4c' />
-  </way>
-  <way id='8120153' timestamp='2007-08-12T23:11:56+01:00' user='Edward' visible='true'>
-    <nd ref='675834' />
-    <nd ref='675885' />
-    <nd ref='700508' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='St Catherines Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8140824' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346717' />
-    <nd ref='26346776' />
-    <nd ref='26346781' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Chessel Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005411' timestamp='2007-12-10T21:01:29+00:00' user='sladen' visible='true'>
-    <nd ref='21091849' />
-    <nd ref='21091853' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Varna Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4743253' timestamp='2007-06-11T22:24:05+01:00' visible='true'>
-    <nd ref='30226349' />
-    <nd ref='30226350' />
-    <nd ref='30226373' />
-    <nd ref='30226374' />
-    <nd ref='30226375' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Haddon Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999136' timestamp='2008-02-03T06:08:54+00:00' user='sladen' visible='true'>
-    <nd ref='635143' />
-    <nd ref='20971158' />
-    <nd ref='20971160' />
-    <nd ref='20971159' />
-    <nd ref='635143' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4235058' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282110' />
-    <nd ref='25282111' />
-    <nd ref='25282113' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Primrose Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536694' timestamp='2007-04-29T08:58:09+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28194866' />
-    <nd ref='28194867' />
-    <tag k='highway' v='residential' />
-    <tag k='surface' v='unpaved' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4278986' timestamp='2007-08-12T23:07:48+01:00' user='Edward' visible='true'>
-    <nd ref='25764482' />
-    <nd ref='25764483' />
-    <nd ref='25764481' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Clovelly Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='1639470' timestamp='2006-06-01T09:41:40+01:00' user='nickw' visible='true'>
-    <nd ref='383000' />
-    <nd ref='383001' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bellemoor Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4818220' timestamp='2007-06-26T23:45:20+01:00' user='nickw' visible='true'>
-    <nd ref='30956579' />
-    <nd ref='30956616' />
-    <nd ref='30956615' />
-    <nd ref='30956614' />
-    <nd ref='30956622' />
-    <nd ref='30956613' />
-    <nd ref='30956612' />
-    <nd ref='30956598' />
-    <nd ref='30956599' />
-    <nd ref='30956601' />
-    <nd ref='30956602' />
-    <nd ref='30956603' />
-    <nd ref='30956604' />
-    <nd ref='30956605' />
-    <nd ref='30956606' />
-    <nd ref='29009078' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2352514' timestamp='2007-11-18T19:22:46+00:00' user='nickw' visible='true'>
-    <nd ref='469868' />
-    <nd ref='469869' />
-    <nd ref='469870' />
-    <nd ref='469871' />
-    <nd ref='21275774' />
-    <nd ref='469872' />
-    <nd ref='469873' />
-    <nd ref='469874' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Richmond Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4215234' timestamp='2007-01-10T00:20:42+00:00' user='nickw' visible='true'>
-    <nd ref='24984740' />
-    <nd ref='24984741' />
-    <nd ref='24984742' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726285' timestamp='2007-12-08T20:33:31+00:00' user='nickw' visible='true'>
-    <nd ref='157238291' />
-    <nd ref='157238294' />
-    <nd ref='157238299' />
-    <nd ref='157238303' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='One sign says Frazer Close. Right opposite the one saying Fraser Close.... I suspect Fraser is the correct name as all the roads in this estate have a Scottish theme and I've never heard of Fraser with a "z"....' />
-    <tag k='name' v='Fraser Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605584' timestamp='2007-05-16T00:59:45+01:00' visible='true'>
-    <nd ref='29145261' />
-    <nd ref='29145262' />
-    <nd ref='29001337' />
-    <nd ref='29145253' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578767' timestamp='2006-10-07T00:25:28+01:00' user='nickw' visible='true'>
-    <nd ref='17724237' />
-    <nd ref='17724272' />
-    <nd ref='17724273' />
-    <nd ref='447393' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546147' timestamp='2007-04-30T22:13:55+01:00' user='nickw' visible='true'>
-    <nd ref='28342521' />
-    <nd ref='28342522' />
-    <nd ref='28342523' />
-    <nd ref='28342524' />
-    <nd ref='28342525' />
-    <nd ref='28342526' />
-    <nd ref='28342527' />
-    <nd ref='28342528' />
-    <nd ref='28342569' />
-    <nd ref='28342529' />
-    <nd ref='28342530' />
-    <nd ref='28342531' />
-    <nd ref='28342532' />
-    <nd ref='28342533' />
-    <nd ref='28342534' />
-    <nd ref='28342535' />
-    <nd ref='28342536' />
-    <nd ref='28342537' />
-    <nd ref='28342538' />
-    <nd ref='28342540' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Blackthorn Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209531' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='24924100' />
-    <nd ref='24924103' />
-    <nd ref='24924104' />
-    <nd ref='24924105' />
-    <nd ref='24924106' />
-    <nd ref='24924107' />
-    <nd ref='24924101' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Monks Brook Greenway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4697990' timestamp='2007-06-02T18:17:09+01:00' visible='true'>
-    <nd ref='29862364' />
-    <nd ref='29862365' />
-    <nd ref='29862366' />
-    <nd ref='29862367' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dale Valley Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152197' timestamp='2007-06-11T22:24:05+01:00' visible='true'>
-    <nd ref='30226350' />
-    <nd ref='30226351' />
-    <nd ref='30226353' />
-    <nd ref='30226354' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Haddon Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551447' timestamp='2007-05-01T23:50:29+01:00' user='nickw' visible='true'>
-    <nd ref='28414297' />
-    <nd ref='28414293' />
-    <nd ref='28414295' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lord Mountbatten Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4694153' timestamp='2007-06-01T20:45:15+01:00' visible='true'>
-    <nd ref='22231194' />
-    <nd ref='305596' />
-    <nd ref='305597' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Ramalley Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585244' timestamp='2007-10-22T22:35:07+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='20110861' />
-    <nd ref='29002290' />
-    <nd ref='29002293' />
-    <nd ref='29002294' />
-    <nd ref='29002297' />
-    <nd ref='29002296' />
-    <nd ref='10908464' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4256548' timestamp='2007-10-04T19:44:15+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='25504275' />
-    <nd ref='29990883' />
-    <nd ref='25504276' />
-    <nd ref='25504277' />
-    <nd ref='25504278' />
-    <nd ref='21178440' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='15944366' timestamp='2007-12-10T19:25:22+00:00' user='sladen' visible='true'>
-    <nd ref='17658116' />
-    <nd ref='160244227' />
-    <nd ref='160244229' />
-    <nd ref='160244231' />
-    <nd ref='160244232' />
-    <nd ref='160244233' />
-    <nd ref='160244235' />
-    <nd ref='17658115' />
-    <tag k='railway' v='rail' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4076803' timestamp='2006-12-16T01:02:12+00:00' user='Dean Earley' visible='true'>
-    <nd ref='15028851' />
-    <nd ref='21599032' />
-    <nd ref='21599033' />
-    <nd ref='21599034' />
-    <nd ref='21599035' />
-    <nd ref='13564832' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Atlantic Park View' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854835' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071404' />
-    <nd ref='13071405' />
-    <nd ref='13071427' />
-    <nd ref='13071406' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Hood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788501' timestamp='2008-01-04T19:34:27+00:00' user='nickw' visible='true'>
-    <nd ref='206163285' />
-    <nd ref='206163286' />
-    <nd ref='206163287' />
-    <nd ref='206163288' />
-    <nd ref='206163289' />
-    <nd ref='206163290' />
-    <nd ref='206163291' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cambridge Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580517' timestamp='2007-05-11T01:00:10+01:00' visible='true'>
-    <nd ref='28936009' />
-    <nd ref='28936010' />
-    <nd ref='28936011' />
-    <nd ref='28936013' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gatwick Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150671' timestamp='2007-05-28T19:39:25+01:00' visible='true'>
-    <nd ref='17721063' />
-    <nd ref='29728896' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4235062' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282101' />
-    <nd ref='25282130' />
-    <nd ref='25282131' />
-    <nd ref='25282129' />
-    <nd ref='25282132' />
-    <nd ref='25282133' />
-    <nd ref='21600675' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151341' timestamp='2007-06-02T19:55:00+01:00' visible='true'>
-    <nd ref='28384690' />
-    <nd ref='28384702' />
-    <nd ref='28339128' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='13251049' timestamp='2007-12-10T20:57:27+00:00' user='sladen' visible='true'>
-    <nd ref='122320971' />
-    <nd ref='122319004' />
-    <nd ref='122320975' />
-    <nd ref='122320980' />
-    <nd ref='122322756' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Marchwood Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='10568206' timestamp='2007-12-10T19:33:05+00:00' user='sladen' visible='true'>
-    <nd ref='25896424' />
-    <nd ref='24924231' />
-    <nd ref='25896443' />
-    <nd ref='24924232' />
-    <nd ref='25896444' />
-    <nd ref='24924233' />
-    <nd ref='254254' />
-    <nd ref='24924234' />
-    <nd ref='24924235' />
-    <nd ref='24924236' />
-    <nd ref='24924237' />
-    <nd ref='24924238' />
-    <nd ref='24924239' />
-    <nd ref='15360203' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='C352' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Chestnut Avenue' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4269331' timestamp='2007-02-04T22:51:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640017' />
-    <nd ref='25640002' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Chine Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15516077' timestamp='2007-12-07T13:51:05+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='154770235' />
-    <nd ref='154770236' />
-    <nd ref='154770237' />
-    <nd ref='154770239' />
-    <nd ref='154770235' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4574126' timestamp='2007-12-06T20:43:06+00:00' user='nickw' visible='true'>
-    <nd ref='28874049' />
-    <nd ref='28874048' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Aldermoor Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2494471' timestamp='2007-08-12T23:11:12+01:00' user='Edward' visible='true'>
-    <nd ref='10908206' />
-    <nd ref='29132661' />
-    <nd ref='10908279' />
-    <nd ref='10908347' />
-    <nd ref='29132662' />
-    <nd ref='10908359' />
-    <nd ref='10908363' />
-    <nd ref='10908364' />
-    <nd ref='10908368' />
-    <nd ref='10908369' />
-    <nd ref='10908370' />
-    <nd ref='10908371' />
-    <nd ref='10908375' />
-    <nd ref='10908378' />
-    <nd ref='29133064' />
-    <nd ref='10908383' />
-    <nd ref='10908384' />
-    <nd ref='10908385' />
-    <nd ref='29133080' />
-    <nd ref='10908390' />
-    <nd ref='254542' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='22701435' timestamp='2008-01-26T18:05:34+00:00' user='stuphi' visible='true'>
-    <nd ref='243511512' />
-    <nd ref='20961052' />
-    <nd ref='325189' />
-    <nd ref='20961048' />
-    <nd ref='325187' />
-    <nd ref='325186' />
-    <nd ref='325185' />
-    <nd ref='11151903' />
-    <nd ref='298305' />
-    <nd ref='20961040' />
-    <nd ref='298304' />
-    <nd ref='20961042' />
-    <nd ref='298303' />
-    <nd ref='298302' />
-    <nd ref='298301' />
-    <nd ref='298300' />
-    <nd ref='325173' />
-    <nd ref='20961038' />
-    <nd ref='325172' />
-    <nd ref='325174' />
-    <nd ref='20961036' />
-    <nd ref='325171' />
-    <nd ref='325170' />
-    <nd ref='325169' />
-    <nd ref='325168' />
-    <nd ref='325181' />
-    <nd ref='325180' />
-    <nd ref='325008' />
-    <nd ref='325006' />
-    <nd ref='325004' />
-    <nd ref='325002' />
-    <nd ref='325000' />
-    <nd ref='324998' />
-    <nd ref='324996' />
-    <nd ref='324994' />
-    <nd ref='324992' />
-    <nd ref='324991' />
-    <nd ref='324988' />
-    <nd ref='325025' />
-    <nd ref='20961034' />
-    <nd ref='325027' />
-    <nd ref='325029' />
-    <nd ref='132712' />
-    <nd ref='325032' />
-    <nd ref='325034' />
-    <nd ref='325037' />
-    <nd ref='132711' />
-    <nd ref='325040' />
-    <nd ref='20961033' />
-    <nd ref='325041' />
-    <nd ref='132710' />
-    <nd ref='132709' />
-    <nd ref='20961030' />
-    <nd ref='132708' />
-    <nd ref='325046' />
-    <nd ref='160336907' />
-    <nd ref='160335936' />
-    <nd ref='20961028' />
-    <nd ref='325048' />
-    <tag k='oneway' v='true' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='ref' v='M27' />
-    <tag k='highway' v='motorway' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='M27 westbound' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='1639462' timestamp='2006-06-01T09:41:11+01:00' user='nickw' visible='true'>
-    <nd ref='325684' />
-    <nd ref='20957248' />
-    <nd ref='325650' />
-    <nd ref='325651' />
-    <nd ref='20957202' />
-    <nd ref='325652' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Raymond Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540309' timestamp='2007-04-29T21:09:43+01:00' visible='true'>
-    <nd ref='28194356' />
-    <nd ref='28194362' />
-    <nd ref='28194364' />
-    <nd ref='28194365' />
-    <nd ref='28194367' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Turnstone Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546177' timestamp='2007-04-30T22:14:04+01:00' user='nickw' visible='true'>
-    <nd ref='28342609' />
-    <nd ref='28342618' />
-    <nd ref='28342617' />
-    <nd ref='28342616' />
-    <nd ref='28342615' />
-    <nd ref='28342614' />
-    <nd ref='28342613' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Freemantle Common Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556657' timestamp='2007-10-29T08:17:58+00:00' user='nickw' visible='true'>
-    <nd ref='91126053' />
-    <nd ref='91126061' />
-    <nd ref='91126064' />
-    <nd ref='91124934' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150047' timestamp='2007-10-17T00:35:40+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464261' />
-    <nd ref='29464262' />
-    <nd ref='29464263' />
-    <nd ref='29464264' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Horder Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788474' timestamp='2008-01-04T19:32:09+00:00' user='nickw' visible='true'>
-    <nd ref='206163089' />
-    <nd ref='206163090' />
-    <nd ref='206163091' />
-    <nd ref='206163092' />
-    <nd ref='206163093' />
-    <nd ref='206163094' />
-    <nd ref='206163095' />
-    <nd ref='206163096' />
-    <nd ref='206163073' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cornwall Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539978' timestamp='2007-04-29T20:37:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243616' />
-    <nd ref='28243618' />
-    <nd ref='28243620' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redhill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687168' timestamp='2007-05-30T21:37:22+01:00' user='nickw' visible='true'>
-    <nd ref='15028812' />
-    <nd ref='29794371' />
-    <nd ref='29794372' />
-    <nd ref='29794373' />
-    <nd ref='29794374' />
-    <nd ref='29794375' />
-    <nd ref='29794376' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4841387' timestamp='2007-07-01T22:15:24+01:00' visible='true'>
-    <nd ref='31163574' />
-    <nd ref='31163576' />
-    <nd ref='31163577' />
-    <nd ref='31163579' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196529' timestamp='2007-01-04T21:07:45+00:00' user='nickw' visible='true'>
-    <nd ref='24668163' />
-    <nd ref='24668072' />
-    <nd ref='24668054' />
-    <nd ref='24668365' />
-    <nd ref='24668314' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sutherlands Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635712' timestamp='2007-05-21T23:53:41+01:00' user='nickw' visible='true'>
-    <nd ref='26575782' />
-    <nd ref='29461823' />
-    <nd ref='29461820' />
-    <nd ref='29461822' />
-    <nd ref='26575781' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='King Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726281' timestamp='2007-12-08T20:33:31+00:00' user='nickw' visible='true'>
-    <nd ref='157222338' />
-    <nd ref='157238269' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Matheson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3314' timestamp='2006-06-04T00:35:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='675889' />
-    <nd ref='700483' />
-    <nd ref='700484' />
-    <nd ref='700487' />
-    <nd ref='700488' />
-    <nd ref='700480' />
-    <nd ref='28830652' />
-    <nd ref='700489' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Thorold Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540767' timestamp='2007-06-02T19:32:07+01:00' visible='true'>
-    <nd ref='28250017' />
-    <nd ref='28250022' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vulcan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2651544' timestamp='2006-07-29T14:08:17+01:00' user='nickw' visible='true'>
-    <nd ref='254338' />
-    <nd ref='254339' />
-    <nd ref='254332' />
-    <nd ref='331367' />
-    <nd ref='331365' />
-    <nd ref='331363' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='bridleway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4679911' timestamp='2007-05-28T19:39:22+01:00' visible='true'>
-    <nd ref='29728873' />
-    <nd ref='29728875' />
-    <nd ref='29728876' />
-    <nd ref='29728877' />
-    <nd ref='29728880' />
-    <nd ref='29728882' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Toynbee Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540341' timestamp='2007-04-29T21:10:01+01:00' visible='true'>
-    <nd ref='28194430' />
-    <nd ref='28194431' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Widgeon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773683' timestamp='2007-06-17T22:25:19+01:00' visible='true'>
-    <nd ref='25296280' />
-    <nd ref='29928994' />
-    <nd ref='29928995' />
-    <nd ref='29928996' />
-    <nd ref='29929022' />
-    <nd ref='29929024' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Parham Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079295' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636789' />
-    <nd ref='21636732' />
-    <nd ref='21636791' />
-    <nd ref='28183734' />
-    <nd ref='21636792' />
-    <nd ref='21636793' />
-    <nd ref='21636794' />
-    <nd ref='21636795' />
-    <nd ref='28183735' />
-    <nd ref='21636791' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Julian Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8143482' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781168' />
-    <nd ref='26781170' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mullen Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4196533' timestamp='2007-01-04T21:07:46+00:00' user='nickw' visible='true'>
-    <nd ref='24667717' />
-    <nd ref='24667720' />
-    <nd ref='28179476' />
-    <nd ref='24668033' />
-    <nd ref='28179478' />
-    <nd ref='28179479' />
-    <nd ref='269928' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Heatherlands Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4278982' timestamp='2007-02-10T23:53:37+00:00' visible='true'>
-    <nd ref='25764480' />
-    <nd ref='25764437' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wolverton Road' />
-  </way>
-  <way id='4546556' timestamp='2007-04-30T23:49:36+01:00' user='nickw' visible='true'>
-    <nd ref='13071393' />
-    <nd ref='28348610' />
-    <nd ref='28348611' />
-    <nd ref='28348614' />
-    <nd ref='28348613' />
-    <nd ref='28830632' />
-    <nd ref='28830633' />
-    <nd ref='28830634' />
-    <nd ref='28830635' />
-    <nd ref='28830636' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Portview Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540738' timestamp='2007-04-29T21:43:21+01:00' visible='true'>
-    <nd ref='28249810' />
-    <nd ref='28249813' />
-    <nd ref='28249814' />
-    <nd ref='28249815' />
-    <nd ref='28249817' />
-    <nd ref='28249818' />
-    <nd ref='28249819' />
-    <nd ref='28249820' />
-    <nd ref='28249822' />
-    <nd ref='28249823' />
-    <nd ref='28249825' />
-    <nd ref='28249827' />
-    <nd ref='28249828' />
-    <nd ref='28249830' />
-    <nd ref='28249831' />
-    <nd ref='27239003' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Prince of Wales Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548026' timestamp='2007-05-01T10:05:41+01:00' visible='true'>
-    <nd ref='28372786' />
-    <nd ref='28372787' />
-    <nd ref='28372788' />
-    <nd ref='28372789' />
-    <nd ref='28372790' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bracken Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604596' timestamp='2007-05-15T20:56:06+01:00' user='nickw' visible='true'>
-    <nd ref='29135238' />
-    <nd ref='29134107' />
-    <nd ref='29135241' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Binstead Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9650505' timestamp='2007-10-16T17:18:11+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25303008' />
-    <nd ref='25303007' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='ref' v='C351' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Wide Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15942474' timestamp='2007-12-10T19:13:19+00:00' user='sladen' visible='true'>
-    <nd ref='160218967' />
-    <nd ref='160221497' />
-    <nd ref='160221498' />
-    <nd ref='160221499' />
-    <nd ref='160221500' />
-    <nd ref='160221501' />
-    <nd ref='160221502' />
-    <nd ref='160221503' />
-    <nd ref='160221504' />
-    <nd ref='160220280' />
-    <nd ref='160221505' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4074139' timestamp='2006-12-13T20:19:52+00:00' user='nickw' visible='true'>
-    <nd ref='21561808' />
-    <nd ref='21561533' />
-    <nd ref='21561807' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Richville Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604561' timestamp='2007-05-15T20:53:19+01:00' user='nickw' visible='true'>
-    <nd ref='29134824' />
-    <nd ref='29134822' />
-    <nd ref='29134823' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bembridge Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4641110' timestamp='2007-05-23T17:04:47+01:00' visible='true'>
-    <nd ref='29526768' />
-    <nd ref='29526769' />
-    <nd ref='29526770' />
-    <nd ref='29526771' />
-    <nd ref='29526772' />
-    <nd ref='29526773' />
-    <nd ref='29526778' />
-    <nd ref='29526774' />
-    <nd ref='29526775' />
-    <nd ref='29526776' />
-    <nd ref='29526777' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Rosebery Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999132' timestamp='2006-11-12T22:57:28+00:00' user='Dean Earley' visible='true'>
-    <nd ref='518764' />
-    <nd ref='26004483' />
-    <nd ref='20971150' />
-    <nd ref='518763' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Trinity Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536155' timestamp='2007-04-29T01:53:37+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179505' />
-    <nd ref='28179517' />
-    <nd ref='28179518' />
-    <nd ref='28179519' />
-    <nd ref='28179520' />
-    <nd ref='28179521' />
-    <nd ref='28179522' />
-    <nd ref='28179523' />
-    <nd ref='28179524' />
-    <nd ref='28179525' />
-    <nd ref='28179526' />
-    <nd ref='28179527' />
-    <nd ref='28179528' />
-    <nd ref='28179529' />
-    <nd ref='28179530' />
-    <nd ref='28179531' />
-    <nd ref='28179532' />
-    <nd ref='28179533' />
-    <nd ref='28179535' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bracken Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3088261' timestamp='2008-02-03T06:00:14+00:00' user='sladen' visible='true'>
-    <nd ref='254602' />
-    <nd ref='14727969' />
-    <nd ref='14727956' />
-    <nd ref='14727997' />
-    <nd ref='14727981' />
-    <nd ref='862475' />
-    <nd ref='245145766' />
-    <nd ref='14727952' />
-    <nd ref='14727953' />
-    <nd ref='862495' />
-    <nd ref='245145464' />
-    <nd ref='14727968' />
-    <nd ref='18393860' />
-    <nd ref='14727982' />
-    <nd ref='14727999' />
-    <nd ref='14727971' />
-    <nd ref='254601' />
-    <nd ref='14727959' />
-    <nd ref='14727949' />
-    <nd ref='14727984' />
-    <nd ref='14727993' />
-    <nd ref='14727964' />
-    <nd ref='14727979' />
-    <nd ref='14727995' />
-    <nd ref='324343' />
-    <nd ref='14727957' />
-    <nd ref='254602' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='The Avenue' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4687595' timestamp='2007-05-30T22:22:30+01:00' user='nickw' visible='true'>
-    <nd ref='29796780' />
-    <nd ref='29796779' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bitterne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4215238' timestamp='2007-01-10T00:20:45+00:00' user='nickw' visible='true'>
-    <nd ref='24984752' />
-    <nd ref='28183713' />
-    <nd ref='24984753' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fitzroy Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3269' timestamp='2006-06-04T00:35:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='700377' />
-    <nd ref='700378' />
-    <nd ref='700379' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Shakespeare Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15451503' timestamp='2007-12-06T20:46:08+00:00' user='nickw' visible='true'>
-    <nd ref='153334855' />
-    <nd ref='153334885' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Menzies Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854839' timestamp='2007-05-30T21:37:25+01:00' user='nickw' visible='true'>
-    <nd ref='13071436' />
-    <nd ref='13071430' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Wynter Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539974' timestamp='2007-04-29T20:37:23+01:00' user='Dean Earley' visible='true'>
-    <nd ref='243870' />
-    <nd ref='28243591' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fernlea Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151940' timestamp='2007-06-08T23:30:30+01:00' visible='true'>
-    <nd ref='30089045' />
-    <nd ref='30089053' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Wagtail Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15945118' timestamp='2007-12-10T19:30:36+00:00' user='sladen' visible='true'>
-    <nd ref='160252360' />
-    <nd ref='160253459' />
-    <nd ref='160250719' />
-    <nd ref='160252835' />
-    <nd ref='160252361' />
-    <nd ref='160252363' />
-    <nd ref='160252365' />
-    <nd ref='160252838' />
-    <nd ref='160252366' />
-    <nd ref='160252368' />
-    <nd ref='160252369' />
-    <nd ref='25932493' />
-    <tag k='aeroway' v='taxiway' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='5947660' timestamp='2008-02-03T06:11:28+00:00' user='sladen' visible='true'>
-    <nd ref='48958672' />
-    <nd ref='245149627' />
-    <nd ref='20971166' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4546181' timestamp='2007-04-30T22:14:05+01:00' user='nickw' visible='true'>
-    <nd ref='28342633' />
-    <nd ref='28342632' />
-    <nd ref='28342631' />
-    <nd ref='28342630' />
-    <nd ref='28342629' />
-    <nd ref='28342628' />
-    <nd ref='28342626' />
-    <nd ref='28342625' />
-    <nd ref='28342624' />
-    <nd ref='28342623' />
-    <nd ref='28342622' />
-    <nd ref='28342621' />
-    <nd ref='28342639' />
-    <nd ref='28342638' />
-    <nd ref='28342637' />
-    <nd ref='28342636' />
-    <nd ref='28342635' />
-    <nd ref='28342634' />
-    <nd ref='28342633' />
-    <tag k='leisure' v='common' />
-    <tag k='note' v='I don't *know* this is called Freemantle Common. But there's a Freemantle Common Road so it obviously isn't....' />
-    <tag k='name' v='Freemantle Common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4020260' timestamp='2007-12-10T20:50:55+00:00' user='sladen' visible='true'>
-    <nd ref='10222206' />
-    <nd ref='27021722' />
-    <nd ref='27021720' />
-    <nd ref='21316545' />
-    <nd ref='21316546' />
-    <nd ref='21316547' />
-    <nd ref='27021718' />
-    <nd ref='27021716' />
-    <nd ref='27021714' />
-    <nd ref='21316548' />
-    <nd ref='21316549' />
-    <nd ref='21600468' />
-    <nd ref='21316551' />
-    <nd ref='21316552' />
-    <nd ref='21316553' />
-    <nd ref='21316554' />
-    <nd ref='254918' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Tebourba Way' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='9678648' timestamp='2007-10-17T01:00:15+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13885349' />
-    <nd ref='26575778' />
-    <nd ref='13885350' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='East Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008576' timestamp='2006-11-21T23:12:52+00:00' user='nickw' visible='true'>
-    <nd ref='21141397' />
-    <nd ref='21141378' />
-    <nd ref='21141404' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Branksome Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4009848' timestamp='2007-10-16T06:18:02+01:00' user='andrewpmk' visible='true'>
-    <nd ref='21178407' />
-    <nd ref='25296014' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='B3335' />
-    <tag k='highway' v='secondary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639550' timestamp='2007-10-17T01:27:51+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14743135' />
-    <nd ref='254885' />
-    <nd ref='14567154' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4589147' timestamp='2007-05-13T10:02:51+01:00' user='nickw' visible='true'>
-    <nd ref='29026659' />
-    <nd ref='29026670' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Crofton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4495487' timestamp='2007-04-23T19:32:38+01:00' visible='true'>
-    <nd ref='27558592' />
-    <nd ref='27558586' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='psv' v='yes' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8280655' timestamp='2007-10-30T15:20:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='15359712' />
-    <nd ref='15359713' />
-    <nd ref='15359714' />
-    <nd ref='29909670' />
-    <nd ref='15359693' />
-    <nd ref='15359715' />
-    <nd ref='15359692' />
-    <tag k='oneway' v='yes' />
-    <tag k='source:name' v='Hampshire county council' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='Market Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558163' timestamp='2007-05-02T23:58:13+01:00' visible='true'>
-    <nd ref='28582962' />
-    <nd ref='28582948' />
-    <nd ref='28582944' />
-    <nd ref='28582938' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Abbotsfield Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4250818' timestamp='2007-07-09T12:19:49+01:00' visible='true'>
-    <nd ref='25440793' />
-    <nd ref='14964133' />
-    <nd ref='9736873' />
-    <nd ref='9736872' />
-    <nd ref='25440792' />
-    <nd ref='9736871' />
-    <nd ref='14964130' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546511' timestamp='2007-04-30T23:40:11+01:00' user='nickw' visible='true'>
-    <nd ref='28347768' />
-    <nd ref='28347771' />
-    <nd ref='28345061' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Marlhill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4586167' timestamp='2007-05-12T15:28:47+01:00' user='nickw' visible='true'>
-    <nd ref='29009029' />
-    <nd ref='29009031' />
-    <nd ref='29008450' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Okement Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556690' timestamp='2007-10-29T08:19:15+00:00' user='nickw' visible='true'>
-    <nd ref='91127620' />
-    <nd ref='91127619' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999317' timestamp='2006-11-13T00:42:50+00:00' user='Dean Earley' visible='true'>
-    <nd ref='8596775' />
-    <nd ref='20972778' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121935' timestamp='2007-10-16T17:59:44+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14728176' />
-    <nd ref='254749' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A33' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Bassett Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4773696' timestamp='2007-06-17T22:30:37+01:00' visible='true'>
-    <nd ref='29929021' />
-    <nd ref='30511430' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601451' timestamp='2007-10-30T17:26:33+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92684699' />
-    <nd ref='92684700' />
-    <nd ref='92684701' />
-    <nd ref='92684702' />
-    <nd ref='92684699' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4079299' timestamp='2006-12-18T21:21:59+00:00' user='nickw' visible='true'>
-    <nd ref='329520' />
-    <nd ref='21636736' />
-    <nd ref='21636800' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pinehurst Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4271528' timestamp='2007-12-10T21:04:30+00:00' user='sladen' visible='true'>
-    <nd ref='25675802' />
-    <nd ref='48967848' />
-    <nd ref='20971216' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='3907165' timestamp='2006-10-27T23:39:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20110929' />
-    <nd ref='20110952' />
-    <nd ref='20110753' />
-    <nd ref='20110897' />
-    <nd ref='20110915' />
-    <nd ref='20110950' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Maryland Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4695887' timestamp='2007-06-02T08:31:33+01:00' user='nickw' visible='true'>
-    <nd ref='29856353' />
-    <nd ref='29856374' />
-    <nd ref='29856375' />
-    <nd ref='29856376' />
-    <nd ref='29856377' />
-    <nd ref='29856378' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701820' timestamp='2007-06-03T15:31:40+01:00' visible='true'>
-    <nd ref='29911798' />
-    <nd ref='29911799' />
-    <nd ref='29911800' />
-    <nd ref='29911801' />
-    <nd ref='29911802' />
-    <nd ref='29911803' />
-    <nd ref='29815432' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4405516' timestamp='2007-03-31T20:34:57+01:00' user='nickw' visible='true'>
-    <nd ref='26945415' />
-    <nd ref='26945416' />
-    <nd ref='26945414' />
-    <nd ref='26945415' />
-    <tag k='leisure' v='common' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061536' timestamp='2007-09-25T18:47:49+01:00' user='mike l' visible='true'>
-    <nd ref='423292' />
-    <nd ref='423273' />
-    <nd ref='423274' />
-    <nd ref='423275' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Daisy Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4211067' timestamp='2007-01-07T12:39:36+00:00' user='nickw' visible='true'>
-    <nd ref='24949835' />
-    <nd ref='24949836' />
-    <nd ref='24949837' />
-    <nd ref='24949838' />
-    <nd ref='24949844' />
-    <nd ref='24949845' />
-    <nd ref='24949846' />
-    <nd ref='24949847' />
-    <nd ref='24949848' />
-    <nd ref='24949849' />
-    <nd ref='24949850' />
-    <nd ref='24949851' />
-    <nd ref='24949852' />
-    <nd ref='24949853' />
-    <nd ref='24949854' />
-    <nd ref='24949855' />
-    <nd ref='24949856' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kingsway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539541' timestamp='2007-04-29T19:42:14+01:00' user='Andy Street' visible='true'>
-    <nd ref='28237229' />
-    <nd ref='28237231' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Calderwood Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1667' timestamp='2006-05-22T22:37:46+01:00' user='nickw' visible='true'>
-    <nd ref='247802' />
-    <nd ref='247803' />
-    <nd ref='387812' />
-    <nd ref='247804' />
-    <nd ref='247805' />
-    <nd ref='5292817' />
-    <nd ref='20954590' />
-    <nd ref='247806' />
-    <nd ref='247807' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Shaftesbury Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4681685' timestamp='2007-05-29T10:16:09+01:00' visible='true'>
-    <nd ref='29709172' />
-    <nd ref='29709173' />
-    <tag k='highway' v='steps' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724198' timestamp='2007-12-08T20:11:12+00:00' user='nickw' visible='true'>
-    <nd ref='157204131' />
-    <nd ref='157204142' />
-    <nd ref='157204144' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pembrey Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360458' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575733' />
-    <nd ref='26782594' />
-    <nd ref='26575777' />
-    <nd ref='26575776' />
-    <nd ref='26575772' />
-    <nd ref='26575773' />
-    <nd ref='26575774' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='White Star Place' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4279036' timestamp='2007-02-11T00:33:38+00:00' visible='true'>
-    <nd ref='9312078' />
-    <nd ref='9312072' />
-    <nd ref='25765746' />
-    <nd ref='25765747' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lyon Street' />
-  </way>
-  <way id='2148106' timestamp='2008-01-25T18:27:57+00:00' visible='true'>
-    <nd ref='325197' />
-    <nd ref='9266198' />
-    <nd ref='9266196' />
-    <nd ref='673876' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4604564' timestamp='2007-05-15T20:53:20+01:00' user='nickw' visible='true'>
-    <nd ref='29134826' />
-    <nd ref='29134825' />
-    <nd ref='29134114' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brighstone Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4480969' timestamp='2007-04-19T17:50:52+01:00' visible='true'>
-    <nd ref='27467486' />
-    <nd ref='27467487' />
-    <nd ref='27467488' />
-    <nd ref='27467489' />
-    <nd ref='27467490' />
-    <nd ref='27467491' />
-    <nd ref='27467492' />
-    <nd ref='27467493' />
-    <nd ref='27467494' />
-    <nd ref='27467495' />
-    <nd ref='27467496' />
-    <nd ref='27467497' />
-    <nd ref='27467498' />
-    <nd ref='27467499' />
-    <nd ref='27467500' />
-    <nd ref='27467501' />
-    <nd ref='27467502' />
-    <nd ref='27467479' />
-    <nd ref='27467480' />
-    <nd ref='27467475' />
-    <nd ref='27467478' />
-    <nd ref='27467481' />
-    <nd ref='27467482' />
-    <nd ref='27467483' />
-    <nd ref='27467484' />
-    <nd ref='27467485' />
-    <nd ref='27467486' />
-    <tag k='leisure' v='park' />
-    <tag k='name' v='Riverside Park' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801113' timestamp='2008-02-03T06:12:32+00:00' user='sladen' visible='true'>
-    <nd ref='245149817' />
-    <nd ref='245149854' />
-    <nd ref='245149855' />
-    <nd ref='245149856' />
-    <nd ref='245149857' />
-    <nd ref='245149858' />
-    <nd ref='245149859' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3996912' timestamp='2006-11-10T21:59:06+00:00' user='nickw' visible='true'>
-    <nd ref='20957237' />
-    <nd ref='20957231' />
-    <nd ref='20957232' />
-    <nd ref='20957236' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Andover Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854832' timestamp='2007-05-23T09:19:09+01:00' user='nickw' visible='true'>
-    <nd ref='13071390' />
-    <nd ref='13071397' />
-    <nd ref='28830638' />
-    <nd ref='13071391' />
-    <nd ref='29526312' />
-    <nd ref='13071392' />
-    <nd ref='13071393' />
-    <nd ref='13071394' />
-    <nd ref='28830640' />
-    <nd ref='13071395' />
-    <nd ref='13071396' />
-    <nd ref='28830624' />
-    <nd ref='13071384' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cornwall Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578764' timestamp='2006-10-07T00:25:26+01:00' user='nickw' visible='true'>
-    <nd ref='17724236' />
-    <nd ref='17724274' />
-    <nd ref='17724238' />
-    <nd ref='307469' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='4546064' timestamp='2007-04-30T21:49:12+01:00' user='nickw' visible='true'>
-    <nd ref='28341755' />
-    <nd ref='28341756' />
-    <nd ref='28341757' />
-    <nd ref='28341763' />
-    <nd ref='28341758' />
-    <nd ref='28341759' />
-    <nd ref='28341760' />
-    <nd ref='28231019' />
-    <nd ref='28341761' />
-    <nd ref='28341762' />
-    <nd ref='28341754' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Deacon Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150111' timestamp='2007-10-16T02:44:06+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29704449' />
-    <nd ref='29704450' />
-    <nd ref='29704462' />
-    <nd ref='29704451' />
-    <nd ref='29704452' />
-    <nd ref='30504463' />
-    <nd ref='29704453' />
-    <nd ref='29704454' />
-    <nd ref='30225255' />
-    <nd ref='29704455' />
-    <nd ref='29704456' />
-    <nd ref='29704457' />
-    <nd ref='29704458' />
-    <nd ref='29704459' />
-    <nd ref='29704460' />
-    <nd ref='29704461' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broadlands Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8100077' timestamp='2007-10-16T02:43:56+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29505719' />
-    <nd ref='29509852' />
-    <nd ref='29509854' />
-    <nd ref='29509857' />
-    <nd ref='29509859' />
-    <nd ref='29509861' />
-    <nd ref='29509864' />
-    <nd ref='29816628' />
-    <nd ref='29509866' />
-    <nd ref='29509868' />
-    <nd ref='29509871' />
-    <nd ref='29509873' />
-    <nd ref='29509877' />
-    <nd ref='29509879' />
-    <nd ref='29509881' />
-    <nd ref='29509883' />
-    <nd ref='29509885' />
-    <nd ref='29509888' />
-    <nd ref='29509890' />
-    <nd ref='29509893' />
-    <nd ref='29509895' />
-    <nd ref='29816766' />
-    <nd ref='29509897' />
-    <nd ref='29509900' />
-    <nd ref='29509902' />
-    <nd ref='29707327' />
-    <nd ref='29509905' />
-    <nd ref='29509907' />
-    <nd ref='29509910' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='name' v='Boyatt Lane' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4079287' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='388918' />
-    <nd ref='422989' />
-    <nd ref='21636759' />
-    <nd ref='21636760' />
-    <nd ref='21636761' />
-    <nd ref='21636762' />
-    <nd ref='21636763' />
-    <nd ref='21636764' />
-    <nd ref='21636740' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Spindlewood Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4893678' timestamp='2007-07-13T12:08:28+01:00' visible='true'>
-    <nd ref='469882' />
-    <nd ref='27238996' />
-    <nd ref='27238997' />
-    <nd ref='27238998' />
-    <nd ref='27238999' />
-    <nd ref='27239000' />
-    <nd ref='27239001' />
-    <nd ref='27239002' />
-    <nd ref='27239003' />
-    <nd ref='27239004' />
-    <nd ref='27239005' />
-    <nd ref='27239006' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Stanton Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8148797' timestamp='2007-05-26T20:16:32+01:00' visible='true'>
-    <nd ref='28418264' />
-    <nd ref='28418266' />
-    <nd ref='28418267' />
-    <nd ref='29632842' />
-    <nd ref='28418268' />
-    <nd ref='28418334' />
-    <nd ref='28418270' />
-    <nd ref='28339156' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Hoddinot Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386807' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21624979' />
-    <nd ref='26728547' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Peveril Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4643764' timestamp='2007-05-24T10:51:08+01:00' visible='true'>
-    <nd ref='28418516' />
-    <nd ref='28418532' />
-    <nd ref='29387396' />
-    <nd ref='29543385' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Tennyson Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4541419' timestamp='2008-01-05T17:55:00+00:00' user='Andy Street' visible='true'>
-    <nd ref='28244295' />
-    <nd ref='28259890' />
-    <nd ref='28259891' />
-    <nd ref='28259893' />
-    <nd ref='28259894' />
-    <nd ref='206334645' />
-    <nd ref='28259896' />
-    <nd ref='28259897' />
-    <nd ref='28259899' />
-    <nd ref='28259900' />
-    <nd ref='28259902' />
-    <nd ref='28259903' />
-    <nd ref='28259905' />
-    <nd ref='28259906' />
-    <nd ref='28259908' />
-    <nd ref='28259909' />
-    <nd ref='28244291' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Alfriston Gardens' />
-    <tag k='created_by' v='Potlatch 0.6a' />
-  </way>
-  <way id='4360462' timestamp='2007-03-16T21:52:46+00:00' user='nickw' visible='true'>
-    <nd ref='26575779' />
-    <nd ref='26575780' />
-    <nd ref='26575730' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lime Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126953' timestamp='2007-10-29T16:25:41+00:00' user='Dean Earley' visible='true'>
-    <nd ref='15359716' />
-    <nd ref='21585942' />
-    <nd ref='29909653' />
-    <nd ref='15359723' />
-    <tag k='source:name' v='Hampshire county council' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Leigh Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546168' timestamp='2007-04-30T22:14:00+01:00' user='nickw' visible='true'>
-    <nd ref='28342577' />
-    <nd ref='28342585' />
-    <tag k='highway' v='footway' />
-    <tag k='note' v='wouldn't fancy mapping this on a dark night...' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4747432' timestamp='2007-06-12T20:38:35+01:00' visible='true'>
-    <nd ref='30256892' />
-    <nd ref='30256890' />
-    <nd ref='30256863' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ainsley Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4271446' timestamp='2007-02-06T00:16:36+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25675141' />
-    <nd ref='25675143' />
-    <nd ref='25675144' />
-    <nd ref='25675146' />
-    <nd ref='25675147' />
-    <nd ref='25675140' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2148181' timestamp='2007-10-16T17:22:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='673879' />
-    <nd ref='530600' />
-    <nd ref='254690' />
-    <nd ref='20966254' />
-    <nd ref='20966251' />
-    <nd ref='25592564' />
-    <nd ref='254691' />
-    <nd ref='14744415' />
-    <nd ref='17722370' />
-    <nd ref='254692' />
-    <nd ref='9266208' />
-    <nd ref='254694' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558323' timestamp='2007-05-03T00:08:31+01:00' visible='true'>
-    <nd ref='28584191' />
-    <nd ref='28584186' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819438' timestamp='2006-10-23T21:01:12+01:00' user='nickw' visible='true'>
-    <nd ref='19228093' />
-    <nd ref='19227242' />
-    <nd ref='19227244' />
-    <nd ref='19227245' />
-    <nd ref='19227246' />
-    <nd ref='19227247' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703159' timestamp='2007-06-03T20:17:27+01:00' visible='true'>
-    <nd ref='29914416' />
-    <nd ref='29914417' />
-    <nd ref='29914420' />
-    <nd ref='29914421' />
-    <nd ref='29923776' />
-    <nd ref='29923777' />
-    <nd ref='29923778' />
-    <nd ref='29923779' />
-    <nd ref='29923780' />
-    <nd ref='29923781' />
-    <nd ref='29923782' />
-    <nd ref='29923783' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Compton Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546499' timestamp='2007-04-30T23:36:53+01:00' user='nickw' visible='true'>
-    <nd ref='28345071' />
-    <nd ref='28347580' />
-    <nd ref='28347579' />
-    <nd ref='28347581' />
-    <nd ref='28347587' />
-    <nd ref='28347586' />
-    <nd ref='28347585' />
-    <nd ref='28347584' />
-    <nd ref='28347582' />
-    <nd ref='28347581' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='variously referred to as Round Hill Close or Roundhill Close' />
-    <tag k='name' v='Round Hill Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4295846' timestamp='2007-02-16T20:51:27+00:00' user='nickw' visible='true'>
-    <nd ref='9312075' />
-    <nd ref='9312074' />
-    <nd ref='9312073' />
-    <nd ref='25947179' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cranbury Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15516036' timestamp='2007-12-07T13:50:42+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180212' />
-    <nd ref='154769814' />
-    <nd ref='154769815' />
-    <nd ref='154769816' />
-    <nd ref='154769817' />
-    <nd ref='154769819' />
-    <nd ref='154769820' />
-    <nd ref='154769821' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='1639622' timestamp='2006-06-01T09:51:24+01:00' user='nickw' visible='true'>
-    <nd ref='330489' />
-    <nd ref='422969' />
-    <nd ref='422970' />
-    <nd ref='422971' />
-    <nd ref='17724235' />
-    <nd ref='423308' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Coronation Avenue South' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='8121521' timestamp='2006-05-22T22:29:14+01:00' user='nickw' visible='true'>
-    <nd ref='319649' />
-    <nd ref='658448' />
-    <nd ref='658449' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Earls Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4703786' timestamp='2007-06-03T21:48:31+01:00' visible='true'>
-    <nd ref='29708027' />
-    <nd ref='29708029' />
-    <nd ref='29708030' />
-    <nd ref='29708031' />
-    <nd ref='29708032' />
-    <nd ref='29708033' />
-    <nd ref='29708034' />
-    <nd ref='29926527' />
-    <nd ref='29708035' />
-    <nd ref='29708036' />
-    <nd ref='29708037' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540964' timestamp='2007-04-29T22:00:54+01:00' visible='true'>
-    <nd ref='28252926' />
-    <nd ref='28252925' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Melville Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4638082' timestamp='2007-05-22T12:23:43+01:00' visible='true'>
-    <nd ref='402748' />
-    <nd ref='29491397' />
-    <nd ref='29491398' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8125052' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071304' />
-    <nd ref='13071302' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='MacArthur Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8123255' timestamp='2007-09-25T13:11:17+01:00' visible='true'>
-    <nd ref='544318' />
-    <nd ref='26001629' />
-    <nd ref='544320' />
-    <nd ref='700387' />
-    <nd ref='544321' />
-    <nd ref='544322' />
-    <nd ref='27558592' />
-    <nd ref='544742' />
-    <nd ref='544324' />
-    <nd ref='20979896' />
-    <nd ref='544325' />
-    <nd ref='20979897' />
-    <nd ref='700429' />
-    <nd ref='700430' />
-    <nd ref='544326' />
-    <nd ref='21420433' />
-    <nd ref='254432' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Portswood Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='16414511' timestamp='2007-12-14T21:38:56+00:00' user='nickw' visible='true'>
-    <nd ref='169428755' />
-    <nd ref='169428759' />
-    <nd ref='169428764' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tremona Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10157493' timestamp='2007-10-28T20:58:40+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='13705441' />
-    <nd ref='13705462' />
-    <nd ref='13705481' />
-    <nd ref='13705484' />
-    <nd ref='13705490' />
-    <nd ref='13705600' />
-    <nd ref='13705602' />
-    <nd ref='13705616' />
-    <nd ref='13705618' />
-    <nd ref='13705624' />
-    <nd ref='13705628' />
-    <nd ref='13705633' />
-    <nd ref='13705638' />
-    <nd ref='13705641' />
-    <nd ref='13705642' />
-    <nd ref='13705643' />
-    <nd ref='13705644' />
-    <nd ref='13705645' />
-    <nd ref='13705646' />
-    <nd ref='87823411' />
-    <nd ref='87823412' />
-    <nd ref='87823413' />
-    <nd ref='87823415' />
-    <nd ref='13705649' />
-    <nd ref='13705655' />
-    <nd ref='87823417' />
-    <nd ref='13705663' />
-    <nd ref='13705675' />
-    <nd ref='90615359' />
-    <nd ref='13705693' />
-    <nd ref='13705694' />
-    <nd ref='90615358' />
-    <nd ref='13705716' />
-    <nd ref='13705732' />
-    <nd ref='90616406' />
-    <nd ref='90616287' />
-    <nd ref='90606453' />
-    <nd ref='87796733' />
-    <nd ref='13705744' />
-    <nd ref='13705758' />
-    <nd ref='13705759' />
-    <nd ref='13705767' />
-    <nd ref='13705770' />
-    <nd ref='13705775' />
-    <nd ref='13705777' />
-    <nd ref='13705792' />
-    <nd ref='90511351' />
-    <nd ref='13705808' />
-    <nd ref='13705832' />
-    <nd ref='13705875' />
-    <tag k='natural' v='coastline' />
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4074123' timestamp='2006-12-13T20:09:46+00:00' user='nickw' visible='true'>
-    <nd ref='21561529' />
-    <nd ref='21561565' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4605561' timestamp='2007-05-16T00:37:07+01:00' visible='true'>
-    <nd ref='29145094' />
-    <nd ref='29145095' />
-    <tag k='oneway' v='yes' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='St Denys Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4635736' timestamp='2008-02-03T06:09:09+00:00' user='sladen' visible='true'>
-    <nd ref='29462605' />
-    <nd ref='29462606' />
-    <nd ref='29462608' />
-    <nd ref='29462601' />
-    <nd ref='29462602' />
-    <nd ref='29462604' />
-    <nd ref='29462605' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8151065' timestamp='2007-05-31T21:58:51+01:00' visible='true'>
-    <nd ref='29816413' />
-    <nd ref='29816412' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698006' timestamp='2007-06-02T18:20:23+01:00' visible='true'>
-    <nd ref='29871068' />
-    <nd ref='29871069' />
-    <nd ref='29871070' />
-    <nd ref='29871071' />
-    <nd ref='29871072' />
-    <nd ref='29871073' />
-    <nd ref='29871074' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Vine Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773288' timestamp='2007-06-17T21:38:12+01:00' visible='true'>
-    <nd ref='30504266' />
-    <nd ref='30504267' />
-    <nd ref='30504268' />
-    <nd ref='30504251' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Park Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4405500' timestamp='2007-05-30T21:48:11+01:00' user='nickw' visible='true'>
-    <nd ref='26945325' />
-    <nd ref='20136221' />
-    <nd ref='29795100' />
-    <nd ref='29795099' />
-    <nd ref='29795097' />
-    <nd ref='29795095' />
-    <nd ref='29795094' />
-    <nd ref='29795092' />
-    <tag k='highway' v='residential' />
-    <tag k='complete' v='no' />
-    <tag k='name' v='Pound Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4696343' timestamp='2007-06-02T11:30:16+01:00' visible='true'>
-    <nd ref='28249881' />
-    <nd ref='28249879' />
-    <nd ref='28250098' />
-    <nd ref='28249878' />
-    <nd ref='28249877' />
-    <nd ref='28249875' />
-    <nd ref='29860315' />
-    <nd ref='29860316' />
-    <nd ref='29860317' />
-    <nd ref='29860318' />
-    <nd ref='29860319' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Clifton Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819398' timestamp='2006-10-23T20:53:06+01:00' user='nickw' visible='true'>
-    <nd ref='383139' />
-    <nd ref='17724265' />
-    <nd ref='17724264' />
-    <nd ref='19227263' />
-    <nd ref='17724263' />
-    <nd ref='17724262' />
-    <nd ref='17724261' />
-    <nd ref='17724260' />
-    <nd ref='17724259' />
-    <nd ref='17724258' />
-    <nd ref='17724257' />
-    <nd ref='17724256' />
-    <nd ref='17724255' />
-    <nd ref='17724254' />
-    <nd ref='19227238' />
-    <nd ref='19227239' />
-    <nd ref='19227240' />
-    <nd ref='19227241' />
-    <nd ref='325692' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='name' v='Carriage Drive South' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='5946805' timestamp='2007-09-10T23:28:37+01:00' visible='true'>
-    <nd ref='48950463' />
-    <nd ref='48950465' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Fanshawe Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2818442' timestamp='2008-01-01T18:32:31+00:00' user='Milliams' visible='true'>
-    <nd ref='12889417' />
-    <nd ref='12889420' />
-    <nd ref='12889422' />
-    <nd ref='28414281' />
-    <nd ref='28903065' />
-    <nd ref='28414285' />
-    <nd ref='12889423' />
-    <nd ref='254441' />
-    <nd ref='12889425' />
-    <nd ref='12889424' />
-    <nd ref='2417450' />
-    <nd ref='2417451' />
-    <nd ref='12889429' />
-    <nd ref='12889428' />
-    <nd ref='2417453' />
-    <tag k='ref' v='C351' />
-    <tag k='source:ref' v='Hampshire county council' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Wide Lane' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </way>
-  <way id='4577387' timestamp='2007-05-09T23:03:55+01:00' visible='true'>
-    <nd ref='28903055' />
-    <nd ref='28903054' />
-    <nd ref='28903053' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386817' timestamp='2007-03-25T18:42:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='21624991' />
-    <nd ref='26781204' />
-    <nd ref='26781158' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3127994' timestamp='2006-09-07T14:59:53+01:00' user='nickw' visible='true'>
-    <nd ref='518772' />
-    <nd ref='518773' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Imperial Road' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='5072035' timestamp='2008-02-03T06:22:46+00:00' user='sladen' visible='true'>
-    <nd ref='245152162' />
-    <nd ref='245153002' />
-    <nd ref='245153003' />
-    <nd ref='245152163' />
-    <nd ref='34278576' />
-    <nd ref='8596752' />
-    <nd ref='26782576' />
-    <nd ref='8596813' />
-    <nd ref='8596809' />
-    <nd ref='20972813' />
-    <nd ref='26782589' />
-    <nd ref='20972814' />
-    <nd ref='8596802' />
-    <nd ref='8596794' />
-    <nd ref='8596786' />
-    <nd ref='8596778' />
-    <nd ref='20972816' />
-    <nd ref='635146' />
-    <tag k='oneway' v='true; yes' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='name' v='Kingsway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8131453' timestamp='2007-10-16T23:54:07+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20973105' />
-    <nd ref='20973103' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Harbour Parade' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4405504' timestamp='2007-03-31T20:34:55+01:00' user='nickw' visible='true'>
-    <nd ref='13071431' />
-    <nd ref='26945341' />
-    <nd ref='26945342' />
-    <nd ref='26945343' />
-    <nd ref='26945344' />
-    <nd ref='26945345' />
-    <nd ref='26945346' />
-    <nd ref='26945347' />
-    <nd ref='26945348' />
-    <nd ref='26945349' />
-    <nd ref='26945350' />
-    <nd ref='26945351' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Yeovil Chase' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4635653' timestamp='2007-05-21T23:43:22+01:00' user='nickw' visible='true'>
-    <nd ref='29461219' />
-    <nd ref='29461220' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Craven Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3987529' timestamp='2006-11-02T19:56:11+00:00' user='nickw' visible='true'>
-    <nd ref='20831126' />
-    <nd ref='20831094' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Canton Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4742946' timestamp='2007-10-16T02:44:14+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29711866' />
-    <nd ref='29711907' />
-    <nd ref='29711867' />
-    <nd ref='29711868' />
-    <nd ref='29711869' />
-    <nd ref='30221326' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Penshurst Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580513' timestamp='2007-05-11T01:00:07+01:00' visible='true'>
-    <nd ref='28935992' />
-    <nd ref='28935993' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1189499' timestamp='2006-05-21T09:20:46+01:00' user='nickw' visible='true'>
-    <nd ref='700393' />
-    <nd ref='4931223' />
-    <nd ref='4931231' />
-    <nd ref='4931240' />
-    <nd ref='4931288' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Thackeray Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8148380' timestamp='2007-12-07T13:29:06+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='28180224' />
-    <nd ref='28180227' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Enterprise Road' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4704175' timestamp='2007-06-03T22:43:34+01:00' visible='true'>
-    <nd ref='29931380' />
-    <nd ref='29931381' />
-    <nd ref='29931382' />
-    <nd ref='29931383' />
-    <nd ref='29931384' />
-    <nd ref='29931385' />
-    <nd ref='29931386' />
-    <nd ref='29931387' />
-    <nd ref='29931388' />
-    <nd ref='29931389' />
-    <nd ref='29931390' />
-    <nd ref='29931391' />
-    <nd ref='29931392' />
-    <nd ref='29931393' />
-    <nd ref='29931394' />
-    <nd ref='29931395' />
-    <nd ref='29931396' />
-    <nd ref='29931397' />
-    <nd ref='29931398' />
-    <nd ref='29931399' />
-    <nd ref='29931400' />
-    <nd ref='29931401' />
-    <nd ref='29931402' />
-    <nd ref='29931403' />
-    <nd ref='29931404' />
-    <nd ref='29931370' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727658' timestamp='2007-06-09T19:43:22+01:00' user='nickw' visible='true'>
-    <nd ref='28347576' />
-    <nd ref='30124368' />
-    <nd ref='30124369' />
-    <nd ref='30124370' />
-    <nd ref='30124372' />
-    <nd ref='30124371' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Epping Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074106' timestamp='2006-12-13T20:09:44+00:00' user='nickw' visible='true'>
-    <nd ref='21561545' />
-    <nd ref='21561521' />
-    <nd ref='21561546' />
-    <nd ref='21561548' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bramston Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150114' timestamp='2007-10-16T02:44:14+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29703872' />
-    <nd ref='29703874' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Allbrook Knoll' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677885' timestamp='2007-05-28T12:56:42+01:00' visible='true'>
-    <nd ref='29705531' />
-    <nd ref='29705527' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061556' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='388923' />
-    <nd ref='21507804' />
-    <nd ref='21507777' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brindle Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8311333' timestamp='2008-01-25T18:28:35+00:00' visible='true'>
-    <nd ref='21189063' />
-    <nd ref='21189058' />
-    <nd ref='21189060' />
-    <nd ref='21189059' />
-    <nd ref='325033' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151511' timestamp='2007-06-03T20:59:04+01:00' visible='true'>
-    <nd ref='29926526' />
-    <nd ref='29926525' />
-    <nd ref='29926524' />
-    <nd ref='29926523' />
-    <nd ref='29926268' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150893' timestamp='2007-05-30T21:37:24+01:00' user='nickw' visible='true'>
-    <nd ref='29764415' />
-    <nd ref='29794372' />
-    <nd ref='29764416' />
-    <nd ref='29764420' />
-    <nd ref='29764419' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='High View Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152599' timestamp='2007-06-17T22:30:38+01:00' visible='true'>
-    <nd ref='30511424' />
-    <nd ref='30511428' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bealieu Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535834' timestamp='2007-04-29T01:04:32+01:00' visible='true'>
-    <nd ref='28173958' />
-    <nd ref='28173978' />
-    <nd ref='28173988' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beaulieu Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854824' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071358' />
-    <nd ref='13071359' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Beech Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9676781' timestamp='2007-10-17T00:35:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='8596805' />
-    <nd ref='21615425' />
-    <nd ref='13885352' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='retail' />
-    <tag k='name' v='High Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386798' timestamp='2007-03-25T18:42:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781148' />
-    <nd ref='26781149' />
-    <nd ref='26781150' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Tranby Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4690995' timestamp='2007-05-31T22:04:39+01:00' visible='true'>
-    <nd ref='29816437' />
-    <nd ref='29816549' />
-    <nd ref='29816550' />
-    <nd ref='29816551' />
-    <nd ref='29816552' />
-    <nd ref='29816553' />
-    <nd ref='29815651' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10568213' timestamp='2007-10-29T15:43:32+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30290734' />
-    <nd ref='91505916' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='note' v='Needs tidying with a real GPS trace' />
-    <tag k='name' v='Tollgate' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3631234' timestamp='2006-10-09T23:21:07+01:00' user='nickw' visible='true'>
-    <nd ref='603224' />
-    <nd ref='17979922' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Ancasta Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800449' timestamp='2008-02-03T06:08:22+00:00' user='sladen' visible='true'>
-    <nd ref='245148868' />
-    <nd ref='245148876' />
-    <nd ref='245148852' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4196518' timestamp='2007-01-04T21:07:44+00:00' user='nickw' visible='true'>
-    <nd ref='24668048' />
-    <nd ref='28194491' />
-    <nd ref='28194506' />
-    <nd ref='28194507' />
-    <nd ref='28194508' />
-    <nd ref='254975' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Golf Course Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580491' timestamp='2007-05-11T00:51:28+01:00' visible='true'>
-    <nd ref='28935755' />
-    <nd ref='28935756' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13251347' timestamp='2007-11-18T19:06:35+00:00' user='nickw' visible='true'>
-    <nd ref='122316814' />
-    <nd ref='122326360' />
-    <nd ref='122326365' />
-    <nd ref='122326370' />
-    <nd ref='122326373' />
-    <nd ref='122326379' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Victory Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679907' timestamp='2007-06-10T18:15:30+01:00' visible='true'>
-    <nd ref='29728869' />
-    <nd ref='30161118' />
-    <nd ref='30161119' />
-    <nd ref='29728857' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Northlands Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585181' timestamp='2007-05-12T09:40:25+01:00' user='nickw' visible='true'>
-    <nd ref='29001335' />
-    <nd ref='29001334' />
-    <nd ref='29001336' />
-    <nd ref='29001337' />
-    <nd ref='29001338' />
-    <nd ref='29001339' />
-    <nd ref='29001340' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Pettinger Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8133952' timestamp='2006-12-14T13:53:18+00:00' user='David Currie' visible='true'>
-    <nd ref='21579395' />
-    <nd ref='21579392' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tristram Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151507' timestamp='2007-06-03T20:46:02+01:00' visible='true'>
-    <nd ref='29925686' />
-    <nd ref='29925687' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703394' timestamp='2007-06-03T20:59:04+01:00' visible='true'>
-    <nd ref='29925343' />
-    <nd ref='29926526' />
-    <nd ref='29926527' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540318' timestamp='2007-04-29T21:09:46+01:00' visible='true'>
-    <nd ref='28194370' />
-    <nd ref='28194371' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gannet Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4075487' timestamp='2007-10-29T16:25:38+00:00' user='Dean Earley' visible='true'>
-    <nd ref='14745433' />
-    <nd ref='27513795' />
-    <nd ref='29392428' />
-    <nd ref='21585930' />
-    <nd ref='30161110' />
-    <nd ref='27513796' />
-    <nd ref='30410993' />
-    <nd ref='28141318' />
-    <nd ref='28223264' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Blenheim Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4545705' timestamp='2007-04-30T20:40:38+01:00' visible='true'>
-    <nd ref='28339136' />
-    <nd ref='28339192' />
-    <nd ref='28339194' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Tommy Green Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4074135' timestamp='2006-12-13T20:19:51+00:00' user='nickw' visible='true'>
-    <nd ref='21561795' />
-    <nd ref='21561535' />
-    <nd ref='21561794' />
-    <nd ref='21561793' />
-    <nd ref='21561792' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sandown Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10361601' timestamp='2007-10-26T13:40:01+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='87877505' />
-    <nd ref='87877506' />
-    <nd ref='87877507' />
-    <nd ref='87877509' />
-    <nd ref='87877505' />
-    <tag k='leisure' v='park' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4673080' timestamp='2007-06-02T19:52:10+01:00' visible='true'>
-    <nd ref='17721053' />
-    <nd ref='17721074' />
-    <nd ref='29728890' />
-    <nd ref='29728910' />
-    <nd ref='17721056' />
-    <nd ref='29728899' />
-    <nd ref='29728906' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Brookwood Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539220' timestamp='2007-10-17T01:00:18+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29794807' />
-    <nd ref='29794808' />
-    <nd ref='29794809' />
-    <nd ref='29794813' />
-    <nd ref='29794814' />
-    <nd ref='20136217' />
-    <nd ref='20136215' />
-    <nd ref='28232569' />
-    <nd ref='28232561' />
-    <nd ref='28232560' />
-    <nd ref='28232557' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dean Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8170679' timestamp='2007-10-04T19:42:54+01:00' user='Gregory Williams' visible='true'>
-    <nd ref='29711160' />
-    <nd ref='29711601' />
-    <nd ref='29711602' />
-    <nd ref='29711600' />
-    <nd ref='29711603' />
-    <nd ref='29711604' />
-    <nd ref='29711607' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='ncn_ref' v='23' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4636147' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464241' />
-    <nd ref='29464242' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Burgess Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8446854' timestamp='2007-06-03T16:02:00+01:00' visible='true'>
-    <nd ref='29914192' />
-    <nd ref='29914194' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13252579' timestamp='2007-11-18T19:16:53+00:00' user='nickw' visible='true'>
-    <nd ref='122344805' />
-    <nd ref='122344806' />
-    <nd ref='122344811' />
-    <nd ref='122344813' />
-    <nd ref='122344818' />
-    <nd ref='122344822' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Endeavour Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1932' timestamp='2006-06-17T22:22:44+01:00' user='nickw' visible='true'>
-    <nd ref='661157' />
-    <nd ref='28236102' />
-    <nd ref='28236108' />
-    <nd ref='28236150' />
-    <nd ref='661158' />
-    <nd ref='635131' />
-    <nd ref='661159' />
-    <nd ref='661160' />
-    <nd ref='26593134' />
-    <nd ref='26728536' />
-    <nd ref='28346962' />
-    <nd ref='661161' />
-    <nd ref='661162' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Middle Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4546535' timestamp='2007-04-30T23:45:38+01:00' user='nickw' visible='true'>
-    <nd ref='28348130' />
-    <nd ref='28348139' />
-    <nd ref='28348138' />
-    <nd ref='28345053' />
-    <nd ref='28348140' />
-    <nd ref='28348141' />
-    <nd ref='28348142' />
-    <nd ref='28348144' />
-    <nd ref='28348122' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kingsfold Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4558178' timestamp='2007-05-02T23:58:15+01:00' visible='true'>
-    <nd ref='28583024' />
-    <nd ref='28583012' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Langrish Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4548021' timestamp='2007-05-01T10:05:40+01:00' visible='true'>
-    <nd ref='28372726' />
-    <nd ref='28372767' />
-    <nd ref='28372768' />
-    <nd ref='28372769' />
-    <nd ref='28372770' />
-    <nd ref='28372771' />
-    <nd ref='28372772' />
-    <nd ref='28372773' />
-    <nd ref='28372766' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Laundry Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687599' timestamp='2007-05-30T22:22:31+01:00' user='nickw' visible='true'>
-    <nd ref='29796784' />
-    <nd ref='29796783' />
-    <nd ref='29796785' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bramble Mews' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4015801' timestamp='2006-11-26T00:07:51+00:00' user='nickw' visible='true'>
-    <nd ref='11419690' />
-    <nd ref='21275641' />
-    <nd ref='21275772' />
-    <nd ref='21275770' />
-    <nd ref='21275774' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Trafalgar Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8135240' timestamp='2007-10-29T15:43:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='30290773' />
-    <nd ref='24924290' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Falkland Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574118' timestamp='2007-10-12T14:12:00+01:00' user='SteveC' visible='true'>
-    <nd ref='28874064' />
-    <nd ref='28874063' />
-    <nd ref='28874058' />
-    <nd ref='28874057' />
-    <nd ref='28874056' />
-    <nd ref='28874075' />
-    <nd ref='28874074' />
-    <nd ref='28874072' />
-    <nd ref='28874073' />
-    <nd ref='28874044' />
-    <nd ref='28874045' />
-    <nd ref='28874070' />
-    <nd ref='28874069' />
-    <nd ref='28874067' />
-    <nd ref='28874066' />
-    <nd ref='28874049' />
-    <nd ref='28874065' />
-    <nd ref='28874064' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Outer Circle' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4586122' timestamp='2007-05-12T15:16:00+01:00' user='nickw' visible='true'>
-    <nd ref='29008392' />
-    <nd ref='29008393' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Grasmere Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639633' timestamp='2006-06-01T09:52:07+01:00' user='nickw' visible='true'>
-    <nd ref='422978' />
-    <nd ref='422979' />
-    <nd ref='422980' />
-    <nd ref='422981' />
-    <nd ref='422982' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Butterfield Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8119846' timestamp='2006-06-04T00:30:55+01:00' user='Dean Earley' visible='true'>
-    <nd ref='242726' />
-    <nd ref='242725' />
-    <nd ref='242727' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Langhorn Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4604600' timestamp='2007-05-15T20:56:07+01:00' user='nickw' visible='true'>
-    <nd ref='29135269' />
-    <nd ref='29135266' />
-    <nd ref='29135271' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bonchurch Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1671' timestamp='2006-06-04T00:35:29+01:00' user='Dean Earley' visible='true'>
-    <nd ref='423289' />
-    <nd ref='518808' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Somerset Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4061551' timestamp='2006-12-09T09:51:53+00:00' user='nickw' visible='true'>
-    <nd ref='388883' />
-    <nd ref='21636745' />
-    <nd ref='21507772' />
-    <nd ref='388885' />
-    <nd ref='24984774' />
-    <nd ref='388888' />
-    <nd ref='388889' />
-    <nd ref='388890' />
-    <nd ref='388891' />
-    <nd ref='388892' />
-    <nd ref='388893' />
-    <nd ref='388895' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152202' timestamp='2007-06-11T22:35:20+01:00' visible='true'>
-    <nd ref='30227009' />
-    <nd ref='30227013' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Mountbatten Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061539' timestamp='2007-05-22T00:20:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='422991' />
-    <nd ref='21507778' />
-    <nd ref='29464305' />
-    <nd ref='29464304' />
-    <nd ref='29464303' />
-    <nd ref='21507779' />
-    <nd ref='21507741' />
-    <nd ref='21507780' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redwood Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4727723' timestamp='2007-06-09T19:48:45+01:00' user='nickw' visible='true'>
-    <nd ref='20107340' />
-    <nd ref='30124678' />
-    <nd ref='30124677' />
-    <nd ref='30124676' />
-    <nd ref='30124675' />
-    <nd ref='30124674' />
-    <nd ref='30124673' />
-    <nd ref='30124672' />
-    <nd ref='30124669' />
-    <nd ref='30124668' />
-    <nd ref='30124665' />
-    <nd ref='30124664' />
-    <nd ref='30124663' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lambourne Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546507' timestamp='2007-04-30T23:40:11+01:00' user='nickw' visible='true'>
-    <nd ref='28345052' />
-    <nd ref='28347758' />
-    <nd ref='28347757' />
-    <nd ref='28347754' />
-    <nd ref='28830621' />
-    <nd ref='28347753' />
-    <nd ref='28830614' />
-    <nd ref='28830615' />
-    <nd ref='28830616' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kingsdown Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4480965' timestamp='2007-08-12T23:12:45+01:00' user='Edward' visible='true'>
-    <nd ref='27467475' />
-    <nd ref='675835' />
-    <nd ref='675834' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Nursery Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='9044343' timestamp='2007-10-12T14:01:07+01:00' user='SteveC' visible='true'>
-    <nd ref='66583518' />
-    <nd ref='66584632' />
-    <nd ref='66584633' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8136290' timestamp='2007-10-16T19:19:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25305487' />
-    <nd ref='29145096' />
-    <nd ref='25305495' />
-    <nd ref='25305488' />
-    <nd ref='14727950' />
-    <tag k='oneway' v='yes' />
-    <tag k='width' v='3' />
-    <tag k='ref' v='A335' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Thomas Lewis Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9678652' timestamp='2007-10-17T01:00:16+01:00' user='Dean Earley' visible='true'>
-    <nd ref='52285785' />
-    <nd ref='52285782' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4079352' timestamp='2006-12-18T22:40:15+00:00' visible='true'>
-    <nd ref='21637743' />
-    <nd ref='27021739' />
-    <nd ref='21637744' />
-    <nd ref='413158' />
-    <nd ref='21637745' />
-    <nd ref='27021741' />
-    <nd ref='21637746' />
-    <nd ref='27021740' />
-    <nd ref='21637747' />
-    <nd ref='21637748' />
-    <nd ref='21420717' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Broadlands Road' />
-    <tag k='created_by' v='osmeditor2' />
-  </way>
-  <way id='3578261' timestamp='2006-10-06T23:29:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='17721021' />
-    <nd ref='17721020' />
-    <nd ref='17721022' />
-    <nd ref='17721021' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3997505' timestamp='2008-01-25T18:32:43+00:00' visible='true'>
-    <nd ref='170447' />
-    <nd ref='20961046' />
-    <nd ref='27021837' />
-    <nd ref='20961045' />
-    <nd ref='20961044' />
-    <nd ref='530520' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948356' timestamp='2007-09-11T00:17:32+01:00' visible='true'>
-    <nd ref='48967841' />
-    <nd ref='48967854' />
-    <nd ref='48967856' />
-    <nd ref='48967865' />
-    <nd ref='48967859' />
-    <nd ref='48967860' />
-    <nd ref='48967861' />
-    <nd ref='48967851' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5781532' timestamp='2007-12-08T20:12:21+00:00' user='nickw' visible='true'>
-    <nd ref='28173710' />
-    <nd ref='14957843' />
-    <nd ref='29466080' />
-    <nd ref='29466081' />
-    <nd ref='14957844' />
-    <nd ref='29466082' />
-    <nd ref='14957845' />
-    <nd ref='14957846' />
-    <nd ref='21600479' />
-    <nd ref='153331882' />
-    <nd ref='14957847' />
-    <nd ref='29466083' />
-    <nd ref='29466084' />
-    <nd ref='29466085' />
-    <nd ref='157205664' />
-    <nd ref='14957858' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='3701405' timestamp='2007-11-06T18:20:38+00:00' user='nickw' visible='true'>
-    <nd ref='18348728' />
-    <nd ref='18348729' />
-    <nd ref='18348730' />
-    <nd ref='18348731' />
-    <nd ref='18348732' />
-    <nd ref='18348733' />
-    <nd ref='18348734' />
-    <nd ref='18348736' />
-    <nd ref='18348737' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8150394' timestamp='2007-06-30T12:32:07+01:00' visible='true'>
-    <nd ref='30580570' />
-    <nd ref='29621206' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='15726490' timestamp='2007-12-08T20:35:44+00:00' user='nickw' visible='true'>
-    <nd ref='157241442' />
-    <nd ref='157241450' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Logan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546159' timestamp='2007-04-30T22:13:59+01:00' user='nickw' visible='true'>
-    <nd ref='28342566' />
-    <nd ref='28342575' />
-    <nd ref='28342574' />
-    <nd ref='28342573' />
-    <nd ref='28342561' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='North side also called Forsythia Place' />
-    <tag k='name' v='Acacia Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5072032' timestamp='2008-02-03T06:23:32+00:00' user='sladen' visible='true'>
-    <nd ref='34278580' />
-    <nd ref='245153297' />
-    <nd ref='25440798' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4300656' timestamp='2007-02-18T20:20:25+00:00' visible='true'>
-    <nd ref='26001633' />
-    <nd ref='26001630' />
-    <nd ref='544324' />
-    <tag k='highway' v='footway' />
-  </way>
-  <way id='4691033' timestamp='2007-05-31T22:13:43+01:00' visible='true'>
-    <nd ref='29816751' />
-    <nd ref='29816752' />
-    <nd ref='29816753' />
-    <nd ref='29816720' />
-    <nd ref='29816722' />
-    <nd ref='29816723' />
-    <nd ref='29816725' />
-    <nd ref='29816726' />
-    <nd ref='29816727' />
-    <nd ref='29816728' />
-    <nd ref='29816729' />
-    <nd ref='29816730' />
-    <nd ref='29816731' />
-    <nd ref='29816732' />
-    <nd ref='29816733' />
-    <nd ref='29816734' />
-    <nd ref='29816735' />
-    <nd ref='29816736' />
-    <nd ref='29816737' />
-    <nd ref='29816738' />
-    <nd ref='29816739' />
-    <nd ref='29816740' />
-    <nd ref='29816741' />
-    <nd ref='29816742' />
-    <nd ref='29816743' />
-    <nd ref='29816744' />
-    <nd ref='29816745' />
-    <nd ref='29816746' />
-    <nd ref='29816747' />
-    <nd ref='29816748' />
-    <nd ref='29816749' />
-    <nd ref='29816750' />
-    <nd ref='29816751' />
-    <tag k='natural' v='water' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3265' timestamp='2007-05-13T10:11:12+01:00' user='nickw' visible='true'>
-    <nd ref='310889' />
-    <nd ref='310890' />
-    <nd ref='325641' />
-    <nd ref='29026813' />
-    <nd ref='700536' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Avenue Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2854816' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071318' />
-    <nd ref='13071320' />
-    <nd ref='13071321' />
-    <nd ref='13071322' />
-    <nd ref='13071323' />
-    <nd ref='13071324' />
-    <nd ref='13071325' />
-    <nd ref='13071328' />
-    <nd ref='13071326' />
-    <nd ref='13071327' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rossington Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4677923' timestamp='2007-05-28T13:11:12+01:00' visible='true'>
-    <nd ref='29710126' />
-    <nd ref='29710079' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Justinian Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677094' timestamp='2006-10-14T13:19:13+01:00' user='nickw' visible='true'>
-    <nd ref='18232083' />
-    <nd ref='18232087' />
-    <nd ref='18232088' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119870' timestamp='2006-06-11T01:09:47+01:00' user='Dean Earley' visible='true'>
-    <nd ref='307475' />
-    <nd ref='307478' />
-    <nd ref='307479' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Oakmount Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8125061' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071424' />
-    <nd ref='13071426' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Kesteven Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360454' timestamp='2007-03-16T21:52:45+00:00' user='nickw' visible='true'>
-    <nd ref='26782593' />
-    <nd ref='26575733' />
-    <nd ref='26575769' />
-    <nd ref='26782596' />
-    <nd ref='26575770' />
-    <nd ref='26575771' />
-    <nd ref='26575724' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Carpathia Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4084421' timestamp='2007-09-20T19:37:06+01:00' user='mike l' visible='true'>
-    <nd ref='21689152' />
-    <nd ref='21689153' />
-    <nd ref='21689051' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bankside' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='1206036' timestamp='2006-05-21T17:30:36+01:00' user='nickw' visible='true'>
-    <nd ref='4942415' />
-    <nd ref='700437' />
-    <nd ref='700438' />
-    <nd ref='700439' />
-    <nd ref='700440' />
-    <nd ref='4942444' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='North Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540004' timestamp='2007-04-29T20:37:33+01:00' user='Andy Street' visible='true'>
-    <nd ref='28244140' />
-    <nd ref='28244150' />
-    <nd ref='28244158' />
-    <nd ref='28244169' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Gort Crescent' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556257' timestamp='2007-10-29T07:57:51+00:00' user='nickw' visible='true'>
-    <nd ref='91110484' />
-    <nd ref='91110544' />
-    <nd ref='91110486' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2859062' timestamp='2006-08-11T09:58:59+01:00' user='80n' visible='true'>
-    <nd ref='298247' />
-    <nd ref='305228' />
-    <nd ref='132721' />
-    <nd ref='17723037' />
-    <nd ref='132720' />
-    <nd ref='298251' />
-    <nd ref='298253' />
-    <nd ref='132719' />
-    <nd ref='298255' />
-    <nd ref='298258' />
-    <nd ref='298261' />
-    <nd ref='24924057' />
-    <nd ref='298269' />
-    <nd ref='298268' />
-    <nd ref='170458' />
-    <nd ref='14745514' />
-    <nd ref='14745515' />
-    <nd ref='14745499' />
-    <nd ref='14745500' />
-    <nd ref='14745513' />
-    <nd ref='14745501' />
-    <nd ref='14745503' />
-    <nd ref='14745504' />
-    <nd ref='14745505' />
-    <nd ref='14745506' />
-    <nd ref='14745508' />
-    <nd ref='14745511' />
-    <nd ref='14745509' />
-    <tag k='oneway' v='true' />
-    <tag k='ref' v='M3' />
-    <tag k='highway' v='motorway' />
-    <tag k='name' v='M3 Southbound' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698174' timestamp='2007-06-02T19:04:04+01:00' visible='true'>
-    <nd ref='29872352' />
-    <nd ref='29872359' />
-    <nd ref='29872360' />
-    <nd ref='29872361' />
-    <nd ref='29872369' />
-    <nd ref='29872370' />
-    <nd ref='29872371' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Redcote Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4673051' timestamp='2007-05-27T15:00:45+01:00' visible='true'>
-    <nd ref='29670536' />
-    <nd ref='29670302' />
-    <nd ref='29670532' />
-    <nd ref='29670533' />
-    <nd ref='29670534' />
-    <nd ref='29670535' />
-    <nd ref='29670536' />
-    <tag k='landuse' v='industrial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801390' timestamp='2008-02-03T06:14:30+00:00' user='sladen' visible='true'>
-    <nd ref='245150241' />
-    <nd ref='245147531' />
-    <nd ref='245150242' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='track' />
-    <tag k='cycleway' v='track' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4043818' timestamp='2006-12-02T23:18:57+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254402' />
-    <nd ref='21419423' />
-    <nd ref='21419424' />
-    <nd ref='21419425' />
-    <nd ref='21419426' />
-    <nd ref='21419427' />
-    <nd ref='21419428' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4687635' timestamp='2007-05-30T22:26:34+01:00' user='nickw' visible='true'>
-    <nd ref='29796857' />
-    <nd ref='29796862' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Mersham Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8121931' timestamp='2007-10-16T17:59:45+01:00' user='Dean Earley' visible='true'>
-    <nd ref='25303935' />
-    <nd ref='254894' />
-    <tag k='oneway' v='yes' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Winchester Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4211076' timestamp='2007-01-07T12:39:37+00:00' user='nickw' visible='true'>
-    <nd ref='24949908' />
-    <nd ref='24949907' />
-    <nd ref='24949906' />
-    <nd ref='24949905' />
-    <nd ref='24949904' />
-    <nd ref='24949903' />
-    <nd ref='24949902' />
-    <nd ref='24949901' />
-    <nd ref='24949900' />
-    <nd ref='24949814' />
-    <nd ref='24949898' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Forest Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875469' timestamp='2007-07-09T11:55:48+01:00' visible='true'>
-    <nd ref='19890110' />
-    <nd ref='254586' />
-    <nd ref='254591' />
-    <nd ref='254593' />
-    <nd ref='254594' />
-    <nd ref='19892122' />
-    <nd ref='19892124' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Princes Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1261192' timestamp='2006-05-22T22:39:21+01:00' user='nickw' visible='true'>
-    <nd ref='5292817' />
-    <nd ref='2073513' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Highfield Crescent' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='10155198' timestamp='2007-10-26T13:08:39+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='13706671' />
-    <nd ref='13706672' />
-    <nd ref='13706675' />
-    <nd ref='13706676' />
-    <nd ref='13706681' />
-    <nd ref='13706684' />
-    <nd ref='13706688' />
-    <nd ref='13706692' />
-    <nd ref='13706697' />
-    <nd ref='13706712' />
-    <nd ref='13706714' />
-    <nd ref='13706715' />
-    <nd ref='13706721' />
-    <nd ref='13706730' />
-    <nd ref='13706733' />
-    <nd ref='13706736' />
-    <nd ref='13706749' />
-    <nd ref='13706766' />
-    <nd ref='13706767' />
-    <nd ref='13706801' />
-    <nd ref='13706815' />
-    <nd ref='13706829' />
-    <nd ref='13706845' />
-    <nd ref='13706856' />
-    <nd ref='13706866' />
-    <nd ref='13706876' />
-    <nd ref='13706893' />
-    <nd ref='13706918' />
-    <nd ref='13706935' />
-    <nd ref='13706960' />
-    <nd ref='13706977' />
-    <nd ref='13706991' />
-    <nd ref='13707019' />
-    <nd ref='13707031' />
-    <nd ref='13707052' />
-    <nd ref='13707070' />
-    <nd ref='13707079' />
-    <nd ref='13707090' />
-    <nd ref='13707097' />
-    <nd ref='13707114' />
-    <nd ref='13707133' />
-    <nd ref='13707150' />
-    <nd ref='13707168' />
-    <nd ref='13707180' />
-    <nd ref='13707200' />
-    <nd ref='13707203' />
-    <nd ref='13707216' />
-    <nd ref='13707218' />
-    <nd ref='13707220' />
-    <nd ref='13707223' />
-    <nd ref='13707229' />
-    <nd ref='13707232' />
-    <nd ref='13707244' />
-    <nd ref='13707246' />
-    <nd ref='13707249' />
-    <nd ref='13707251' />
-    <tag k='natural' v='coastline' />
-    <tag k='source' v='PGS' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4558182' timestamp='2007-05-02T23:58:15+01:00' visible='true'>
-    <nd ref='28583082' />
-    <nd ref='28583084' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639842' timestamp='2006-06-01T10:04:44+01:00' user='nickw' visible='true'>
-    <nd ref='254338' />
-    <nd ref='28179436' />
-    <nd ref='28179435' />
-    <nd ref='254245' />
-    <nd ref='28179437' />
-    <nd ref='28179438' />
-    <nd ref='28179439' />
-    <nd ref='28179440' />
-    <nd ref='28179441' />
-    <nd ref='254633' />
-    <nd ref='28180246' />
-    <nd ref='28180204' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Manor Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4711288' timestamp='2007-06-05T20:41:29+01:00' visible='true'>
-    <nd ref='29990883' />
-    <nd ref='29990896' />
-    <nd ref='29990888' />
-    <nd ref='29990887' />
-    <nd ref='29990895' />
-    <nd ref='29990894' />
-    <nd ref='29990893' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='19788402' timestamp='2008-01-04T19:29:42+00:00' user='nickw' visible='true'>
-    <nd ref='206162625' />
-    <nd ref='206162628' />
-    <nd ref='206162629' />
-    <nd ref='206162630' />
-    <nd ref='206162631' />
-    <nd ref='206162632' />
-    <nd ref='206162633' />
-    <nd ref='206162634' />
-    <nd ref='24924299' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Surrey Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4538727' timestamp='2007-12-20T12:09:23+00:00' visible='true'>
-    <nd ref='15359727' />
-    <nd ref='28223264' />
-    <nd ref='28223259' />
-    <nd ref='28388962' />
-    <nd ref='28223261' />
-    <nd ref='28223262' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Nutbeam Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3102404' timestamp='2008-02-03T06:21:47+00:00' user='sladen' visible='true'>
-    <nd ref='301572' />
-    <nd ref='20972817' />
-    <nd ref='20972815' />
-    <nd ref='26782585' />
-    <nd ref='635145' />
-    <nd ref='301573' />
-    <nd ref='26575734' />
-    <nd ref='301575' />
-    <nd ref='301576' />
-    <nd ref='26782591' />
-    <nd ref='245149210' />
-    <nd ref='20972812' />
-    <nd ref='301577' />
-    <nd ref='301578' />
-    <nd ref='301579' />
-    <nd ref='245152428' />
-    <nd ref='34278520' />
-    <nd ref='245152509' />
-    <nd ref='245152510' />
-    <tag k='oneway' v='yes; true' />
-    <tag k='highway' v='primary' />
-    <tag k='source' v='Yahoo' />
-    <tag k='name' v='Kingsway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4235069' timestamp='2007-01-17T21:10:30+00:00' user='David Currie' visible='true'>
-    <nd ref='25282105' />
-    <nd ref='25282126' />
-    <nd ref='25282127' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8126588' timestamp='2007-10-16T20:09:39+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14744294' />
-    <nd ref='20971221' />
-    <nd ref='20971218' />
-    <nd ref='20971217' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4379653' timestamp='2007-03-23T22:53:34+00:00' user='nickw' visible='true'>
-    <nd ref='26728556' />
-    <nd ref='26728558' />
-    <nd ref='26728557' />
-    <nd ref='26728559' />
-    <nd ref='26728545' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Millais Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4536139' timestamp='2007-04-29T01:53:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179453' />
-    <nd ref='19228115' />
-    <nd ref='254345' />
-    <nd ref='254354' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='bridleway' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4747338' timestamp='2007-06-12T20:14:40+01:00' visible='true'>
-    <nd ref='29705510' />
-    <nd ref='30255974' />
-    <nd ref='30255976' />
-    <nd ref='30255977' />
-    <nd ref='30255978' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6136574' timestamp='2007-12-08T20:35:44+00:00' user='nickw' visible='true'>
-    <nd ref='50774705' />
-    <nd ref='50774712' />
-    <nd ref='50774714' />
-    <nd ref='157241421' />
-    <nd ref='50774716' />
-    <nd ref='157238291' />
-    <nd ref='50774718' />
-    <nd ref='157238284' />
-    <nd ref='50774721' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Buchanan Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4773325' timestamp='2007-06-17T21:47:13+01:00' visible='true'>
-    <nd ref='29704456' />
-    <nd ref='30504624' />
-    <nd ref='30504625' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lydiard Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661842' timestamp='2007-06-02T19:52:10+01:00' visible='true'>
-    <nd ref='24924070' />
-    <nd ref='29632475' />
-    <nd ref='29632477' />
-    <nd ref='29632480' />
-    <nd ref='29632483' />
-    <nd ref='29632485' />
-    <nd ref='29632487' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585269' timestamp='2007-05-12T10:05:30+01:00' user='nickw' visible='true'>
-    <nd ref='29003045' />
-    <nd ref='29003046' />
-    <nd ref='29003048' />
-    <nd ref='29003049' />
-    <nd ref='29003050' />
-    <nd ref='29003051' />
-    <nd ref='29003053' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Denbigh Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4549457' timestamp='2007-05-01T18:33:27+01:00' visible='true'>
-    <nd ref='28339145' />
-    <nd ref='28339146' />
-    <nd ref='28339147' />
-    <tag k='highway' v='service' />
-    <tag k='maxspeed' v='48' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8120150' timestamp='2007-05-13T10:11:12+01:00' user='nickw' visible='true'>
-    <nd ref='319638' />
-    <nd ref='608185' />
-    <nd ref='442384' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Avenue Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='19390387' timestamp='2008-01-01T18:33:40+00:00' user='Milliams' visible='true'>
-    <nd ref='12889426' />
-    <nd ref='28903636' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Mitchell Way' />
-    <tag k='created_by' v='Potlatch 0.6' />
-  </way>
-  <way id='4636160' timestamp='2007-05-22T00:19:43+01:00' user='Dean Earley' visible='true'>
-    <nd ref='422998' />
-    <nd ref='27021769' />
-    <nd ref='422991' />
-    <nd ref='27021770' />
-    <nd ref='422992' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bassett Green Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801317' timestamp='2008-02-03T06:13:56+00:00' user='sladen' visible='true'>
-    <nd ref='245150147' />
-    <nd ref='245150148' />
-    <nd ref='245150149' />
-    <nd ref='245150150' />
-    <nd ref='245150147' />
-    <tag k='sport' v='bowls' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8124970' timestamp='2007-10-16T17:22:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='530523' />
-    <nd ref='25303107' />
-    <nd ref='12889435' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546063' timestamp='2007-04-30T21:49:12+01:00' user='nickw' visible='true'>
-    <nd ref='661154' />
-    <nd ref='28341752' />
-    <nd ref='28341753' />
-    <nd ref='28230905' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bath Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15451066' timestamp='2007-12-06T20:41:53+00:00' user='nickw' visible='true'>
-    <nd ref='153327657' />
-    <nd ref='153327664' />
-    <nd ref='153327669' />
-    <nd ref='28874081' />
-    <nd ref='153327675' />
-    <nd ref='153327682' />
-    <nd ref='153327689' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Holly Oak Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2778197' timestamp='2007-07-30T16:07:03+01:00' visible='true'>
-    <nd ref='12594782' />
-    <nd ref='254597' />
-    <nd ref='12594788' />
-    <nd ref='254598' />
-    <nd ref='7015241' />
-    <nd ref='254599' />
-    <nd ref='254600' />
-    <nd ref='254601' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Archers Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4540758' timestamp='2007-04-29T21:43:34+01:00' visible='true'>
-    <nd ref='28249971' />
-    <nd ref='28249977' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Westbury Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077266' timestamp='2006-12-16T17:47:16+00:00' user='David Currie' visible='true'>
-    <nd ref='21613464' />
-    <nd ref='21613463' />
-    <nd ref='21613462' />
-    <nd ref='21613461' />
-    <nd ref='21613460' />
-    <nd ref='21613459' />
-    <nd ref='21613458' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4818228' timestamp='2007-06-26T23:45:21+01:00' user='nickw' visible='true'>
-    <nd ref='30956636' />
-    <nd ref='30956637' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585122' timestamp='2007-05-12T09:26:10+01:00' user='nickw' visible='true'>
-    <nd ref='29000490' />
-    <nd ref='28849617' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Edwin Jones Green' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4679919' timestamp='2007-05-28T19:39:28+01:00' visible='true'>
-    <nd ref='29730495' />
-    <nd ref='29730498' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Masefield Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131483' timestamp='2007-10-16T17:47:58+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28246071' />
-    <nd ref='28246067' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordswood Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3999144' timestamp='2006-11-12T22:57:29+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20971177' />
-    <nd ref='20971180' />
-    <tag k='highway' v='residential' />
-    <tag k='note' v='the local CC have the amazing ability to forget road signs around here...' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149927' timestamp='2007-07-01T22:15:25+01:00' visible='true'>
-    <nd ref='27513797' />
-    <nd ref='28339092' />
-    <nd ref='28339089' />
-    <nd ref='28418335' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Grantham road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15724855' timestamp='2007-12-08T20:16:59+00:00' user='nickw' visible='true'>
-    <nd ref='157212547' />
-    <nd ref='157212573' />
-    <nd ref='157212575' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Dunbar Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15726486' timestamp='2007-12-08T20:35:43+00:00' user='nickw' visible='true'>
-    <nd ref='157241428' />
-    <nd ref='157241436' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Lennox Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4546552' timestamp='2007-04-30T23:48:52+01:00' user='nickw' visible='true'>
-    <nd ref='28348312' />
-    <nd ref='28345064' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Onibury Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540306' timestamp='2007-04-29T21:09:42+01:00' visible='true'>
-    <nd ref='28194355' />
-    <nd ref='28194356' />
-    <nd ref='28194357' />
-    <nd ref='28194358' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Turnstone Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3819402' timestamp='2006-10-23T20:53:07+01:00' user='nickw' visible='true'>
-    <nd ref='242715' />
-    <nd ref='19227262' />
-    <nd ref='19227263' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800103' timestamp='2008-02-03T06:05:23+00:00' user='sladen' visible='true'>
-    <nd ref='245147520' />
-    <nd ref='245147521' />
-    <nd ref='245147522' />
-    <nd ref='245147523' />
-    <nd ref='245147524' />
-    <nd ref='245147525' />
-    <nd ref='245147526' />
-    <nd ref='245147527' />
-    <nd ref='245147529' />
-    <nd ref='245147531' />
-    <nd ref='245147532' />
-    <nd ref='245147533' />
-    <nd ref='245147534' />
-    <nd ref='245147535' />
-    <nd ref='245147536' />
-    <nd ref='245147537' />
-    <nd ref='245147538' />
-    <nd ref='245147520' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='service' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8441681' timestamp='2007-12-06T19:26:20+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29733517' />
-    <nd ref='29569522' />
-    <tag k='note' v='FIXME previously unwayed segment' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10601467' timestamp='2007-12-07T13:24:03+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92684883' />
-    <nd ref='92684884' />
-    <nd ref='92684885' />
-    <nd ref='92684887' />
-    <nd ref='92684888' />
-    <nd ref='92684889' />
-    <nd ref='92684890' />
-    <nd ref='92684891' />
-    <nd ref='92684883' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Merck' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='8152182' timestamp='2007-10-16T02:43:49+01:00' user='andrewpmk' visible='true'>
-    <nd ref='30223079' />
-    <nd ref='30223080' />
-    <nd ref='30223081' />
-    <nd ref='30223082' />
-    <nd ref='30223083' />
-    <nd ref='30223084' />
-    <nd ref='30223085' />
-    <nd ref='30223086' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Arundel Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4551581' timestamp='2007-05-02T00:35:37+01:00' visible='true'>
-    <nd ref='17721050' />
-    <nd ref='28418537' />
-    <nd ref='28418536' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Magpie Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4762015' timestamp='2007-06-15T23:09:58+01:00' visible='true'>
-    <nd ref='30410993' />
-    <nd ref='30410994' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4875599' timestamp='2007-07-09T12:19:45+01:00' visible='true'>
-    <nd ref='27496133' />
-    <nd ref='9736874' />
-    <nd ref='25440795' />
-    <nd ref='25440793' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='A3024' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='2235' timestamp='2008-01-16T14:36:06+00:00' user='hairywill' visible='true'>
-    <nd ref='675856' />
-    <nd ref='675858' />
-    <nd ref='232014682' />
-    <nd ref='675859' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Castle Road' />
-    <tag k='created_by' v='Potlatch 0.6b' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3651051' timestamp='2008-02-03T05:56:21+00:00' user='sladen' visible='true'>
-    <nd ref='324349' />
-    <nd ref='28343213' />
-    <nd ref='657803' />
-    <nd ref='657805' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bellevue Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='8124104' timestamp='2006-07-18T10:28:30+01:00' user='nickw' visible='true'>
-    <nd ref='10908537' />
-    <nd ref='25471849' />
-    <nd ref='25471854' />
-    <nd ref='25471855' />
-    <nd ref='25471856' />
-    <nd ref='25471857' />
-    <nd ref='25471858' />
-    <nd ref='25471859' />
-    <nd ref='25471855' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Robert Cecil Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='8150630' timestamp='2007-10-16T02:43:32+01:00' user='andrewpmk' visible='true'>
-    <nd ref='29707329' />
-    <nd ref='29912973' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='note' v='30 mph' />
-    <tag k='name' v='Broom Hill Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3092428' timestamp='2006-09-03T01:40:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14745433' />
-    <nd ref='14745435' />
-    <nd ref='14745431' />
-    <nd ref='14745433' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3906606' timestamp='2006-10-27T22:49:31+01:00' user='Dean Earley' visible='true'>
-    <nd ref='20107334' />
-    <nd ref='474654' />
-    <nd ref='20107335' />
-    <nd ref='20107332' />
-    <nd ref='20107334' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4078458' timestamp='2006-12-17T19:47:32+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26728547' />
-    <nd ref='26728546' />
-    <nd ref='21624980' />
-    <nd ref='26728545' />
-    <nd ref='26728544' />
-    <nd ref='26781160' />
-    <nd ref='21624981' />
-    <nd ref='21624982' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Peveril Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3701401' timestamp='2006-10-16T22:13:51+01:00' user='nickw' visible='true'>
-    <nd ref='18348694' />
-    <nd ref='18348695' />
-    <nd ref='18348697' />
-    <nd ref='18348698' />
-    <nd ref='18348699' />
-    <nd ref='18348700' />
-    <nd ref='18348701' />
-    <nd ref='18348702' />
-    <nd ref='24668385' />
-    <nd ref='18348703' />
-    <nd ref='18348704' />
-    <nd ref='18348705' />
-    <nd ref='18348706' />
-    <nd ref='18348707' />
-    <nd ref='18348708' />
-    <nd ref='18348709' />
-    <nd ref='18348710' />
-    <nd ref='18348711' />
-    <nd ref='18348691' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4698468' timestamp='2007-06-02T19:44:15+01:00' visible='true'>
-    <nd ref='29874152' />
-    <nd ref='29874148' />
-    <nd ref='25635429' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='York Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4683721' timestamp='2007-05-29T22:14:38+01:00' user='Jodi Crisp' visible='true'>
-    <nd ref='29764410' />
-    <nd ref='29764411' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cleveland Court' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269327' timestamp='2007-02-04T22:51:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640001' />
-    <nd ref='25640003' />
-    <nd ref='25640004' />
-    <nd ref='25640005' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Bronte Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1924' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='650752' />
-    <nd ref='518800' />
-    <nd ref='518801' />
-    <nd ref='518802' />
-    <nd ref='518803' />
-    <nd ref='518804' />
-    <nd ref='24924073' />
-    <nd ref='518805' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Kent Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4747395' timestamp='2007-06-12T20:20:06+01:00' visible='true'>
-    <nd ref='30256426' />
-    <nd ref='30256429' />
-    <nd ref='30226354' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4209528' timestamp='2007-01-06T14:29:28+00:00' user='nickw' visible='true'>
-    <nd ref='24924073' />
-    <nd ref='24924074' />
-    <nd ref='24924075' />
-    <nd ref='24924080' />
-    <nd ref='24924081' />
-    <nd ref='24924082' />
-    <nd ref='24924083' />
-    <tag k='highway' v='service' />
-    <tag k='name' v='Belgrave Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3088320' timestamp='2006-09-02T19:14:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14728172' />
-    <nd ref='14728174' />
-    <nd ref='25896243' />
-    <nd ref='14728175' />
-    <nd ref='14728179' />
-    <nd ref='14728178' />
-    <nd ref='14728177' />
-    <nd ref='14728176' />
-    <nd ref='14728172' />
-    <tag k='junction' v='roundabout' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8132903' timestamp='2006-12-02T23:18:57+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21419418' />
-    <nd ref='21419434' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Capon Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4360450' timestamp='2007-03-16T21:52:45+00:00' user='nickw' visible='true'>
-    <nd ref='20972795' />
-    <nd ref='26575761' />
-    <nd ref='26575762' />
-    <nd ref='26575763' />
-    <nd ref='26575764' />
-    <nd ref='20972793' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='industrial' />
-    <tag k='name' v='Crosshouse Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='187' timestamp='2006-06-04T00:30:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='635143' />
-    <nd ref='20971161' />
-    <nd ref='20971162' />
-    <nd ref='635144' />
-    <nd ref='20971163' />
-    <nd ref='20971164' />
-    <nd ref='635145' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Houndwell Place' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2854819' timestamp='2006-08-11T02:50:48+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071337' />
-    <nd ref='13071350' />
-    <nd ref='13071343' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Glenfield Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639680' timestamp='2006-07-01T04:07:59+01:00' user='Dean Earley' visible='true'>
-    <nd ref='331353' />
-    <nd ref='27021799' />
-    <nd ref='14744407' />
-    <nd ref='14744408' />
-    <nd ref='14728005' />
-    <nd ref='27021800' />
-    <nd ref='14728004' />
-    <nd ref='27021801' />
-    <nd ref='14728003' />
-    <nd ref='7015694' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='ref' v='A35' />
-    <tag k='highway' v='primary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Burgess Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4589173' timestamp='2007-05-13T10:11:09+01:00' user='nickw' visible='true'>
-    <nd ref='29026813' />
-    <nd ref='29026815' />
-    <nd ref='29026816' />
-    <nd ref='29026818' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Clifford Dibben Mews' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='9650679' timestamp='2007-10-16T17:22:24+01:00' user='Dean Earley' visible='true'>
-    <nd ref='12889435' />
-    <nd ref='25303108' />
-    <nd ref='673877' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='11968798' timestamp='2007-11-11T18:09:40+00:00' user='Dean Earley' visible='true'>
-    <nd ref='107808653' />
-    <nd ref='107808661' />
-    <tag k='highway' v='unclassified' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703378' timestamp='2007-06-03T20:57:38+01:00' visible='true'>
-    <nd ref='29925345' />
-    <nd ref='29926267' />
-    <nd ref='29926270' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Oxburgh Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10518999' timestamp='2007-12-10T20:59:12+00:00' user='sladen' visible='true'>
-    <nd ref='90609425' />
-    <nd ref='160410643' />
-    <nd ref='90610018' />
-    <nd ref='90610019' />
-    <nd ref='160408127' />
-    <nd ref='160408129' />
-    <nd ref='90610020' />
-    <nd ref='90610021' />
-    <nd ref='90610022' />
-    <nd ref='160405066' />
-    <nd ref='25675772' />
-    <tag k='highway' v='tertiary' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='2147859' timestamp='2006-07-01T03:51:04+01:00' user='Dean Earley' visible='true'>
-    <nd ref='395773' />
-    <nd ref='650799' />
-    <nd ref='395774' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Dover Street' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4724597' timestamp='2007-06-08T23:30:33+01:00' visible='true'>
-    <nd ref='30089143' />
-    <nd ref='30089134' />
-    <nd ref='30089135' />
-    <nd ref='30089136' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Jackdaw Rise' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4580495' timestamp='2007-05-11T00:51:31+01:00' visible='true'>
-    <nd ref='28935770' />
-    <nd ref='28935772' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13449110' timestamp='2007-11-29T22:34:07+00:00' user='nickw' visible='true'>
-    <nd ref='123671352' />
-    <nd ref='123671353' />
-    <nd ref='123671354' />
-    <nd ref='123671355' />
-    <nd ref='123671357' />
-    <nd ref='123671358' />
-    <nd ref='123671359' />
-    <nd ref='123671360' />
-    <nd ref='123671362' />
-    <nd ref='123671364' />
-    <nd ref='123671365' />
-    <nd ref='123671367' />
-    <nd ref='123671369' />
-    <nd ref='123671370' />
-    <nd ref='123671352' />
-    <tag k='landuse' v='industrial' />
-    <tag k='name' v='BAT' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </way>
-  <way id='4536147' timestamp='2007-04-29T01:53:36+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28179485' />
-    <nd ref='28179486' />
-    <nd ref='28179488' />
-    <nd ref='17504821' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Chilworth Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4743722' timestamp='2007-06-12T00:08:11+01:00' user='nickw' visible='true'>
-    <nd ref='30229462' />
-    <nd ref='30229463' />
-    <nd ref='30229464' />
-    <nd ref='30229465' />
-    <nd ref='30229466' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Torridge Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2854828' timestamp='2006-08-11T02:50:49+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071374' />
-    <nd ref='13071375' />
-    <nd ref='13071376' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Rossington Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5653596' timestamp='2007-09-20T19:45:53+01:00' user='mike l' visible='true'>
-    <nd ref='42141674' />
-    <nd ref='42141684' />
-    <nd ref='42141696' />
-    <tag k='access' v='permissive' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='8150622' timestamp='2007-05-28T10:48:40+01:00' visible='true'>
-    <nd ref='29704599' />
-    <nd ref='29704600' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='St Lawrence Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3286' timestamp='2007-08-12T23:14:03+01:00' user='Edward' visible='true'>
-    <nd ref='700508' />
-    <nd ref='700501' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Ash Tree Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4604518' timestamp='2007-05-15T20:47:43+01:00' user='nickw' visible='true'>
-    <nd ref='388929' />
-    <nd ref='29134134' />
-    <nd ref='29134136' />
-    <nd ref='29134115' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Courtland Gardens' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3129258' timestamp='2006-09-08T02:12:10+01:00' user='Dean Earley' visible='true'>
-    <nd ref='14964128' />
-    <nd ref='14964137' />
-    <nd ref='14964138' />
-    <nd ref='14964139' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Steuart Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152674' timestamp='2007-06-17T22:30:36+01:00' visible='true'>
-    <nd ref='30511430' />
-    <nd ref='30511434' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151454' timestamp='2007-06-03T16:22:57+01:00' visible='true'>
-    <nd ref='29914347' />
-    <nd ref='29913613' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Sovereign Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119862' timestamp='2006-06-04T00:35:28+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387816' />
-    <nd ref='544325' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Grosvenor Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='2920952' timestamp='2006-08-15T12:13:21+01:00' user='nickw' visible='true'>
-    <nd ref='13564827' />
-    <nd ref='13564829' />
-    <nd ref='13564830' />
-    <nd ref='21599025' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='name' v='Cutbush Lane' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4005440' timestamp='2006-11-19T12:29:42+00:00' user='nickw' visible='true'>
-    <nd ref='21092023' />
-    <nd ref='21092024' />
-    <nd ref='21092025' />
-    <nd ref='21092026' />
-    <nd ref='21092027' />
-    <nd ref='21092028' />
-    <nd ref='21092029' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Fleming Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4574122' timestamp='2007-12-06T20:41:54+00:00' user='nickw' visible='true'>
-    <nd ref='28874077' />
-    <nd ref='28874044' />
-    <nd ref='153327689' />
-    <nd ref='153327657' />
-    <nd ref='28874049' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Aldermoor Avenue' />
-    <tag k='created_by' v='Potlatch 0.5a' />
-  </way>
-  <way id='4636151' timestamp='2007-05-22T00:19:41+01:00' user='Dean Earley' visible='true'>
-    <nd ref='29464253' />
-    <nd ref='29464254' />
-    <nd ref='29464258' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Meadowhead Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1639516' timestamp='2007-11-18T19:15:52+00:00' user='nickw' visible='true'>
-    <nd ref='469878' />
-    <nd ref='10222203' />
-    <nd ref='28249891' />
-    <nd ref='28249888' />
-    <nd ref='469879' />
-    <nd ref='469880' />
-    <nd ref='469881' />
-    <nd ref='469882' />
-    <nd ref='28249868' />
-    <nd ref='122337281' />
-    <nd ref='469883' />
-    <nd ref='122342982' />
-    <nd ref='122340925' />
-    <nd ref='28249881' />
-    <nd ref='469885' />
-    <nd ref='469886' />
-    <nd ref='21600499' />
-    <nd ref='469888' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Regents Park Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4278973' timestamp='2007-02-10T23:53:36+00:00' visible='true'>
-    <nd ref='20979930' />
-    <nd ref='25764479' />
-    <nd ref='518768' />
-    <nd ref='518769' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Argyle Road' />
-  </way>
-  <way id='8136278' timestamp='2007-01-19T18:06:14+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25302622' />
-    <nd ref='25302625' />
-    <tag k='highway' v='service' />
-    <tag k='abutters' v='retail' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='2249752' timestamp='2006-07-05T01:56:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='254470' />
-    <nd ref='25640035' />
-    <nd ref='661186' />
-    <nd ref='26346761' />
-    <nd ref='25640034' />
-    <nd ref='661187' />
-    <nd ref='26346701' />
-    <nd ref='21598943' />
-    <nd ref='26346708' />
-    <nd ref='21598843' />
-    <nd ref='254469' />
-    <nd ref='12801363' />
-    <nd ref='28342609' />
-    <nd ref='21598944' />
-    <nd ref='9727817' />
-    <nd ref='21624973' />
-    <nd ref='254468' />
-    <nd ref='12801364' />
-    <nd ref='254467' />
-    <nd ref='10942635' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='motorcar' v='yes' />
-    <tag k='abutters' v='residential' />
-    <tag k='name' v='Pear Tree Avenue' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='22801686' timestamp='2008-02-03T06:16:43+00:00' user='sladen' visible='true'>
-    <nd ref='657800' />
-    <nd ref='18232073' />
-    <nd ref='657798' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Commercial Road' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='10601333' timestamp='2007-10-30T17:23:51+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='92682866' />
-    <nd ref='92682867' />
-    <nd ref='92682869' />
-    <nd ref='92682870' />
-    <nd ref='92682866' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Alpha House' />
-    <tag k='created_by' v='Potlatch 0.4b' />
-  </way>
-  <way id='4310886' timestamp='2007-12-10T19:19:34+00:00' user='sladen' visible='true'>
-    <nd ref='26114355' />
-    <nd ref='26114359' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Clifford Street' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4078454' timestamp='2006-12-17T19:47:32+00:00' user='Dean Earley' visible='true'>
-    <nd ref='21624973' />
-    <nd ref='21624972' />
-    <nd ref='28342604' />
-    <nd ref='28342605' />
-    <nd ref='21624976' />
-    <nd ref='28342597' />
-    <nd ref='21624975' />
-    <nd ref='21624974' />
-    <nd ref='21624971' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Merridale Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005406' timestamp='2006-11-19T12:09:22+00:00' user='nickw' visible='true'>
-    <nd ref='21091826' />
-    <nd ref='21091863' />
-    <nd ref='21091862' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cliff Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947656' timestamp='2007-09-10T23:55:24+01:00' visible='true'>
-    <nd ref='48958655' />
-    <nd ref='48958668' />
-    <nd ref='48958658' />
-    <nd ref='48958660' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8149934' timestamp='2007-05-24T00:05:57+01:00' visible='true'>
-    <nd ref='29392341' />
-    <nd ref='29392353' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='High Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8152331' timestamp='2007-06-13T09:24:36+01:00' visible='true'>
-    <nd ref='30290735' />
-    <nd ref='30290738' />
-    <nd ref='30290739' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Robin Square' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4278991' timestamp='2007-02-10T23:53:40+00:00' visible='true'>
-    <nd ref='25764488' />
-    <nd ref='25764489' />
-    <tag k='highway' v='footway' />
-  </way>
-  <way id='8150634' timestamp='2007-05-29T22:39:33+01:00' visible='true'>
-    <nd ref='25504297' />
-    <nd ref='25504279' />
-    <nd ref='29765433' />
-    <nd ref='25504280' />
-    <nd ref='29709220' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Park Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386898' timestamp='2007-03-25T19:03:25+01:00' user='Dean Earley' visible='true'>
-    <nd ref='661158' />
-    <nd ref='26781841' />
-    <nd ref='635134' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Heath Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539755' timestamp='2007-04-29T20:03:07+01:00' user='Andy Street' visible='true'>
-    <nd ref='28240340' />
-    <nd ref='28240345' />
-    <nd ref='28240347' />
-    <nd ref='28240348' />
-    <nd ref='28240349' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Firtree Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1581' timestamp='2006-06-04T00:30:55+01:00' user='Dean Earley' visible='true'>
-    <nd ref='242726' />
-    <nd ref='254434' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='unclassified' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Langhorn Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4211071' timestamp='2007-06-01T09:03:15+01:00' visible='true'>
-    <nd ref='19111054' />
-    <nd ref='24949982' />
-    <nd ref='24949981' />
-    <nd ref='24949980' />
-    <nd ref='24949979' />
-    <nd ref='24949978' />
-    <nd ref='24949977' />
-    <nd ref='24949815' />
-    <nd ref='24949973' />
-    <nd ref='24949974' />
-    <nd ref='24949975' />
-    <nd ref='24949976' />
-    <nd ref='24949879' />
-    <nd ref='24949928' />
-    <nd ref='24949927' />
-    <nd ref='24949929' />
-    <nd ref='24949930' />
-    <nd ref='24949931' />
-    <nd ref='29824066' />
-    <nd ref='24949822' />
-    <nd ref='24949938' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Park Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4329576' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='661190' />
-    <nd ref='661191' />
-    <tag k='highway' v='residential' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4707620' timestamp='2007-06-04T21:48:43+01:00' visible='true'>
-    <nd ref='29929865' />
-    <nd ref='29928426' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8134062' timestamp='2006-12-16T17:47:15+00:00' user='David Currie' visible='true'>
-    <nd ref='21613422' />
-    <nd ref='21613424' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Raglan Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539960' timestamp='2007-04-29T20:37:18+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28243533' />
-    <nd ref='28194900' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Firs' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5947652' timestamp='2007-09-10T23:55:23+01:00' visible='true'>
-    <nd ref='48958647' />
-    <nd ref='48958649' />
-    <nd ref='48958652' />
-    <nd ref='48958655' />
-    <nd ref='20971173' />
-    <nd ref='48958637' />
-    <nd ref='48958634' />
-    <nd ref='48958631' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4061528' timestamp='2006-12-09T09:51:51+00:00' user='nickw' visible='true'>
-    <nd ref='254665' />
-    <nd ref='21507755' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Highcrown Street' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269335' timestamp='2007-02-04T22:51:49+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25640044' />
-    <nd ref='12801364' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Sea Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4540743' timestamp='2008-01-20T09:54:33+00:00' user='andrewpmk' visible='true'>
-    <nd ref='28249834' />
-    <nd ref='27239002' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Meadowmead Rd' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4077577' timestamp='2006-12-16T21:53:09+00:00' user='nickw' visible='true'>
-    <nd ref='21615434' />
-    <nd ref='21615435' />
-    <nd ref='469851' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4008602' timestamp='2006-11-21T23:20:05+00:00' user='nickw' visible='true'>
-    <nd ref='325671' />
-    <nd ref='28582910' />
-    <nd ref='28582960' />
-    <nd ref='28582962' />
-    <nd ref='325672' />
-    <nd ref='325673' />
-    <nd ref='28582964' />
-    <nd ref='325674' />
-    <nd ref='28252934' />
-    <nd ref='330227' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Coxford Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3713846' timestamp='2006-10-17T23:09:49+01:00' user='nickw' visible='true'>
-    <nd ref='18398397' />
-    <nd ref='18398398' />
-    <nd ref='18398362' />
-    <nd ref='18398363' />
-    <nd ref='18398364' />
-    <nd ref='18398365' />
-    <nd ref='18398366' />
-    <nd ref='18398367' />
-    <nd ref='18398368' />
-    <nd ref='18398369' />
-    <nd ref='18398370' />
-    <nd ref='18398371' />
-    <nd ref='18398372' />
-    <nd ref='18398373' />
-    <nd ref='18398374' />
-    <nd ref='18398375' />
-    <nd ref='18398377' />
-    <nd ref='18398378' />
-    <nd ref='18398379' />
-    <nd ref='18398381' />
-    <nd ref='18398382' />
-    <nd ref='18398383' />
-    <nd ref='18398384' />
-    <nd ref='18398385' />
-    <nd ref='18398387' />
-    <nd ref='18398388' />
-    <nd ref='18398389' />
-    <nd ref='18398390' />
-    <nd ref='18398392' />
-    <nd ref='18398393' />
-    <nd ref='18398394' />
-    <nd ref='18398395' />
-    <nd ref='18398397' />
-    <tag k='natural' v='wood' />
-    <tag k='name' v='Lordswood' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='13638292' timestamp='2007-12-07T13:24:19+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='125571485' />
-    <nd ref='125571487' />
-    <nd ref='125571490' />
-    <nd ref='125571492' />
-    <nd ref='125571494' />
-    <nd ref='125571496' />
-    <nd ref='125571485' />
-    <tag k='building' v='yes' />
-    <tag k='name' v='Chilworth Manor' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4084404' timestamp='2006-12-23T10:22:39+00:00' user='nickw' visible='true'>
-    <nd ref='21689063' />
-    <nd ref='21689064' />
-    <nd ref='21689065' />
-    <nd ref='21689066' />
-    <nd ref='21689067' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woodstock Drive' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4703692' timestamp='2007-06-03T21:43:54+01:00' visible='true'>
-    <nd ref='29927560' />
-    <nd ref='29928068' />
-    <nd ref='29928069' />
-    <nd ref='29928070' />
-    <nd ref='29928071' />
-    <nd ref='29928072' />
-    <nd ref='29928073' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='The Copse' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10314590' timestamp='2007-10-25T21:04:30+01:00' user='Nick Dyer' visible='true'>
-    <nd ref='33718201' />
-    <nd ref='87236104' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Palm Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='2854843' timestamp='2006-08-11T02:50:50+01:00' user='Dean Earley' visible='true'>
-    <nd ref='13071454' />
-    <nd ref='13071339' />
-    <nd ref='13071338' />
-    <nd ref='13071337' />
-    <nd ref='13071336' />
-    <nd ref='13071335' />
-    <nd ref='13071334' />
-    <tag k='highway' v='residential' />
-    <tag k='complete' v='no' />
-    <tag k='name' v='Glenfield Avenue' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4661850' timestamp='2007-05-26T20:15:56+01:00' visible='true'>
-    <nd ref='29632819' />
-    <nd ref='29632817' />
-    <nd ref='29632822' />
-    <nd ref='29632820' />
-    <nd ref='29632819' />
-    <tag k='landuse' v='recreation_ground' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3677098' timestamp='2007-07-30T16:07:05+01:00' visible='true'>
-    <nd ref='402748' />
-    <nd ref='29491395' />
-    <nd ref='18232098' />
-    <nd ref='18232096' />
-    <nd ref='33130189' />
-    <nd ref='18232097' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4269312' timestamp='2007-02-04T22:51:47+00:00' user='Dean Earley' visible='true'>
-    <nd ref='10942635' />
-    <nd ref='25639961' />
-    <nd ref='25639941' />
-    <nd ref='25639942' />
-    <nd ref='25639943' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Peartree Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3431515' timestamp='2006-09-28T23:48:13+01:00' user='nickw' visible='true'>
-    <nd ref='16963794' />
-    <nd ref='16963795' />
-    <nd ref='301604' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='cycleway' />
-    <tag k='note' v='Even though this is a cycleway, cyclists actually have to dismount (steps)' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='bicycle' v='permissive' />
-  </way>
-  <way id='3819503' timestamp='2007-05-22T00:20:35+01:00' user='Dean Earley' visible='true'>
-    <nd ref='243874' />
-    <nd ref='19227232' />
-    <nd ref='19227231' />
-    <nd ref='20628555' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Thornhill Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4585217' timestamp='2007-05-12T09:53:05+01:00' user='nickw' visible='true'>
-    <nd ref='29001693' />
-    <nd ref='29001699' />
-    <nd ref='29001698' />
-    <nd ref='29001697' />
-    <nd ref='29001696' />
-    <nd ref='29001695' />
-    <nd ref='29001694' />
-    <nd ref='29001693' />
-    <tag k='natural' v='water' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8119874' timestamp='2006-06-04T00:35:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='319650' />
-    <nd ref='319652' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Gordon Avenue' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='3998665' timestamp='2006-11-12T20:47:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='19890085' />
-    <nd ref='20967606' />
-    <nd ref='20967608' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8151442' timestamp='2007-06-03T15:50:16+01:00' visible='true'>
-    <nd ref='29707705' />
-    <nd ref='29912987' />
-    <nd ref='29912989' />
-    <nd ref='29912991' />
-    <nd ref='29912993' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1687' timestamp='2006-06-04T00:35:21+01:00' user='Dean Earley' visible='true'>
-    <nd ref='310890' />
-    <nd ref='658450' />
-    <nd ref='324346' />
-    <tag k='horse' v='yes' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='residential' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='Cambridge Road' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='yes' />
-  </way>
-  <way id='4211080' timestamp='2007-01-07T12:39:38+00:00' user='nickw' visible='true'>
-    <nd ref='24949989' />
-    <nd ref='24949951' />
-    <nd ref='24949950' />
-    <nd ref='24949949' />
-    <nd ref='24949948' />
-    <nd ref='24949947' />
-    <nd ref='24949946' />
-    <nd ref='24949945' />
-    <nd ref='24949944' />
-    <nd ref='24949943' />
-    <nd ref='24949942' />
-    <nd ref='24949941' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Cuckoo Bushes Lane' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4569967' timestamp='2007-05-05T08:58:30+01:00' user='nickw' visible='true'>
-    <nd ref='28830621' />
-    <nd ref='28830622' />
-    <nd ref='28830623' />
-    <nd ref='28830624' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4704003' timestamp='2007-06-03T22:14:56+01:00' visible='true'>
-    <nd ref='29708039' />
-    <nd ref='29708040' />
-    <nd ref='29708041' />
-    <nd ref='29708042' />
-    <nd ref='29708043' />
-    <nd ref='29708044' />
-    <nd ref='29708045' />
-    <nd ref='29708046' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4386803' timestamp='2007-03-25T18:42:30+01:00' user='Dean Earley' visible='true'>
-    <nd ref='26781154' />
-    <nd ref='26781176' />
-    <nd ref='26781171' />
-    <nd ref='26781175' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Swanage Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8124983' timestamp='2007-10-29T16:25:39+00:00' user='Dean Earley' visible='true'>
-    <nd ref='254658' />
-    <nd ref='17721092' />
-    <nd ref='2433503' />
-    <tag k='oneway' v='yes' />
-    <tag k='ref' v='B3037' />
-    <tag k='highway' v='secondary' />
-    <tag k='name' v='Fairoak Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8131412' timestamp='2006-11-12T20:47:46+00:00' user='Dean Earley' visible='true'>
-    <nd ref='20967600' />
-    <nd ref='20967602' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='10556470' timestamp='2007-10-29T08:09:32+00:00' user='nickw' visible='true'>
-    <nd ref='21600525' />
-    <nd ref='91117321' />
-    <nd ref='91117324' />
-    <nd ref='91117328' />
-    <nd ref='91117329' />
-    <nd ref='91117332' />
-    <nd ref='91117335' />
-    <nd ref='91117339' />
-    <nd ref='91117341' />
-    <nd ref='91117344' />
-    <nd ref='91117348' />
-    <nd ref='91117355' />
-    <nd ref='91117366' />
-    <nd ref='91117372' />
-    <nd ref='91117375' />
-    <nd ref='91117379' />
-    <nd ref='91117381' />
-    <nd ref='91117383' />
-    <nd ref='91117386' />
-    <nd ref='91117390' />
-    <nd ref='91117394' />
-    <nd ref='91117397' />
-    <nd ref='91117400' />
-    <nd ref='91117404' />
-    <nd ref='91117407' />
-    <nd ref='91117410' />
-    <nd ref='91117414' />
-    <nd ref='91117417' />
-    <nd ref='91117419' />
-    <nd ref='91113446' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Lordsdale Greenway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3998310' timestamp='2007-05-10T21:08:26+01:00' user='Dean Earley' visible='true'>
-    <nd ref='271232' />
-    <nd ref='21092023' />
-    <nd ref='20965513' />
-    <nd ref='20965514' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Rownhams Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4701912' timestamp='2007-06-03T15:56:40+01:00' visible='true'>
-    <nd ref='29704319' />
-    <nd ref='29913874' />
-    <nd ref='29913875' />
-    <nd ref='29913876' />
-    <nd ref='29913877' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saddlers Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8136106' timestamp='2007-01-17T21:10:29+00:00' user='David Currie' visible='true'>
-    <nd ref='25282080' />
-    <nd ref='25282082' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Tansy Meadow' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4678353' timestamp='2007-05-28T14:57:29+01:00' visible='true'>
-    <nd ref='29711907' />
-    <nd ref='29711908' />
-    <nd ref='29711909' />
-    <nd ref='29711910' />
-    <nd ref='29711911' />
-    <nd ref='29711912' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Torre Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4280395' timestamp='2007-02-11T18:07:24+00:00' user='nickw' visible='true'>
-    <nd ref='25783096' />
-    <nd ref='25783095' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3578589' timestamp='2008-01-25T18:28:22+00:00' visible='true'>
-    <nd ref='305221' />
-    <nd ref='17723039' />
-    <nd ref='17723038' />
-    <nd ref='17723037' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4539964' timestamp='2007-04-29T20:37:19+01:00' user='Dean Earley' visible='true'>
-    <nd ref='422981' />
-    <nd ref='28243571' />
-    <nd ref='28243575' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Shawford Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='8162994' timestamp='2007-10-16T17:47:56+01:00' user='Dean Earley' visible='true'>
-    <nd ref='325670' />
-    <nd ref='21600477' />
-    <nd ref='21600478' />
-    <nd ref='14957841' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='2859058' timestamp='2006-08-11T09:58:58+01:00' user='80n' visible='true'>
-    <nd ref='298261' />
-    <nd ref='25303129' />
-    <nd ref='298260' />
-    <nd ref='298262' />
-    <nd ref='25303132' />
-    <nd ref='25303131' />
-    <nd ref='298263' />
-    <nd ref='298264' />
-    <nd ref='298265' />
-    <nd ref='298280' />
-    <nd ref='298281' />
-    <nd ref='324981' />
-    <nd ref='324980' />
-    <nd ref='324983' />
-    <nd ref='324984' />
-    <nd ref='324985' />
-    <nd ref='324986' />
-    <nd ref='324987' />
-    <nd ref='325022' />
-    <nd ref='325010' />
-    <nd ref='325011' />
-    <nd ref='325012' />
-    <nd ref='325013' />
-    <nd ref='325014' />
-    <nd ref='325023' />
-    <nd ref='325015' />
-    <nd ref='325016' />
-    <nd ref='324994' />
-    <tag k='oneway' v='true' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='1664' timestamp='2006-06-04T00:35:27+01:00' user='Dean Earley' visible='true'>
-    <nd ref='387823' />
-    <nd ref='387820' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Upper Grosvenor Road' />
-  </way>
-  <way id='3092436' timestamp='2007-10-29T16:05:08+00:00' user='Dean Earley' visible='true'>
-    <nd ref='298256' />
-    <nd ref='14745482' />
-    <nd ref='14745483' />
-    <nd ref='17721014' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='motorway_link' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4535819' timestamp='2007-10-16T17:47:57+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28173788' />
-    <nd ref='28252901' />
-    <nd ref='28173781' />
-    <nd ref='28173775' />
-    <nd ref='28173768' />
-    <nd ref='28173757' />
-    <nd ref='28173744' />
-    <nd ref='28173737' />
-    <nd ref='48884749' />
-    <nd ref='28173729' />
-    <nd ref='48884748' />
-    <nd ref='28173724' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Woburn Road' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='4084425' timestamp='2006-12-23T10:22:40+00:00' user='nickw' visible='true'>
-    <nd ref='21689163' />
-    <nd ref='21689162' />
-    <nd ref='21689161' />
-    <nd ref='21689160' />
-    <nd ref='21689159' />
-    <nd ref='21689158' />
-    <nd ref='21689049' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Brookside Way' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4773520' timestamp='2007-06-17T22:25:20+01:00' visible='true'>
-    <nd ref='30509426' />
-    <nd ref='30509428' />
-    <nd ref='30509430' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Hathaway Close' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='15516105' timestamp='2007-12-07T13:51:23+00:00' user='Nick Dyer' visible='true'>
-    <nd ref='154770517' />
-    <nd ref='154770518' />
-    <nd ref='154770519' />
-    <nd ref='154770520' />
-    <nd ref='154770517' />
-    <tag k='building' v='yes' />
-    <tag k='created_by' v='Potlatch 0.5d' />
-  </way>
-  <way id='4577442' timestamp='2007-05-09T23:36:14+01:00' visible='true'>
-    <nd ref='28903406' />
-    <nd ref='28903410' />
-    <tag k='highway' v='unclassified' />
-    <tag k='abutters' v='commercial' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22800111' timestamp='2008-02-03T06:12:18+00:00' user='sladen' visible='true'>
-    <nd ref='245147523' />
-    <nd ref='245148032' />
-    <nd ref='245148033' />
-    <nd ref='245148034' />
-    <nd ref='245148035' />
-    <nd ref='245148036' />
-    <nd ref='245148037' />
-    <nd ref='245149817' />
-    <nd ref='245148038' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='4724593' timestamp='2007-06-08T23:30:32+01:00' visible='true'>
-    <nd ref='30096954' />
-    <nd ref='30089063' />
-    <tag k='highway' v='service' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='6064739' timestamp='2007-10-16T17:48:00+01:00' user='Dean Earley' visible='true'>
-    <nd ref='28801034' />
-    <nd ref='14957858' />
-    <tag k='oneway' v='yes' />
-    <tag k='highway' v='tertiary' />
-    <tag k='name' v='Lordshill Way' />
-    <tag k='created_by' v='Potlatch alpha' />
-  </way>
-  <way id='2494474' timestamp='2007-05-15T20:41:32+01:00' user='nickw' visible='true'>
-    <nd ref='254542' />
-    <nd ref='29133592' />
-    <nd ref='10908420' />
-    <nd ref='10908421' />
-    <nd ref='10908422' />
-    <nd ref='10908427' />
-    <nd ref='10908428' />
-    <nd ref='10908438' />
-    <nd ref='10908444' />
-    <nd ref='29002289' />
-    <nd ref='10908454' />
-    <nd ref='10908458' />
-    <nd ref='10908459' />
-    <nd ref='10908461' />
-    <nd ref='10908464' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='motorcar' v='no' />
-    <tag k='created_by' v='osmeditor2' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='4628072' timestamp='2007-10-30T15:48:48+00:00' user='Dean Earley' visible='true'>
-    <nd ref='29548664' />
-    <nd ref='29392338' />
-    <nd ref='29392339' />
-    <nd ref='29392340' />
-    <nd ref='29392341' />
-    <nd ref='29392342' />
-    <tag k='highway' v='residential' />
-    <tag k='maxspeed' v='48' />
-    <tag k='name' v='Cherbourg Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4079291' timestamp='2006-12-18T21:21:58+00:00' user='nickw' visible='true'>
-    <nd ref='21636777' />
-    <nd ref='28183743' />
-    <nd ref='28183741' />
-    <nd ref='21636778' />
-    <nd ref='21636779' />
-    <nd ref='21636780' />
-    <nd ref='21636737' />
-    <nd ref='21636781' />
-    <nd ref='21636782' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Saxholm Dale' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4005444' timestamp='2007-12-08T19:58:40+00:00' user='nickw' visible='true'>
-    <nd ref='21092033' />
-    <nd ref='21092036' />
-    <nd ref='157180460' />
-    <nd ref='21092035' />
-    <nd ref='157181911' />
-    <nd ref='157184967' />
-    <nd ref='157188675' />
-    <nd ref='21092034' />
-    <nd ref='21092042' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Upper Brownhill Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='5948203' timestamp='2007-09-11T00:11:44+01:00' visible='true'>
-    <nd ref='48965787' />
-    <nd ref='48965788' />
-    <nd ref='48965791' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Forest View' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4301154' timestamp='2007-02-18T21:31:01+00:00' visible='true'>
-    <nd ref='26004487' />
-    <nd ref='25947178' />
-    <nd ref='25764435' />
-    <nd ref='20971148' />
-    <tag k='highway' v='footway' />
-  </way>
-  <way id='22701447' timestamp='2008-01-26T18:05:49+00:00' user='stuphi' visible='true'>
-    <nd ref='325047' />
-    <nd ref='20961029' />
-    <nd ref='160335764' />
-    <nd ref='160336499' />
-    <nd ref='325045' />
-    <nd ref='325042' />
-    <nd ref='160337636' />
-    <nd ref='20961031' />
-    <nd ref='325043' />
-    <nd ref='325044' />
-    <nd ref='325038' />
-    <nd ref='20961032' />
-    <nd ref='325039' />
-    <nd ref='325036' />
-    <nd ref='325035' />
-    <nd ref='21189063' />
-    <nd ref='325033' />
-    <nd ref='325031' />
-    <nd ref='325030' />
-    <nd ref='325028' />
-    <nd ref='325026' />
-    <nd ref='20961035' />
-    <nd ref='325024' />
-    <nd ref='324989' />
-    <nd ref='324990' />
-    <nd ref='324993' />
-    <nd ref='324995' />
-    <nd ref='324997' />
-    <nd ref='324999' />
-    <nd ref='325001' />
-    <nd ref='325003' />
-    <nd ref='325005' />
-    <nd ref='325007' />
-    <nd ref='325009' />
-    <nd ref='325182' />
-    <nd ref='325183' />
-    <nd ref='325179' />
-    <nd ref='325178' />
-    <nd ref='325177' />
-    <nd ref='325176' />
-    <nd ref='20961037' />
-    <nd ref='325175' />
-    <nd ref='170457' />
-    <nd ref='298306' />
-    <nd ref='298307' />
-    <nd ref='170451' />
-    <nd ref='298308' />
-    <nd ref='298309' />
-    <nd ref='170450' />
-    <nd ref='20961043' />
-    <nd ref='298310' />
-    <nd ref='20961041' />
-    <nd ref='170449' />
-    <nd ref='170448' />
-    <nd ref='325184' />
-    <nd ref='170447' />
-    <nd ref='20961047' />
-    <nd ref='325188' />
-    <nd ref='20961051' />
-    <nd ref='243511468' />
-    <tag k='oneway' v='true' />
-    <tag k='horse' v='no' />
-    <tag k='foot' v='no' />
-    <tag k='ref' v='M27' />
-    <tag k='highway' v='motorway' />
-    <tag k='motorcar' v='yes' />
-    <tag k='name' v='M27 eastbound' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-    <tag k='bicycle' v='no' />
-  </way>
-  <way id='8128484' timestamp='2006-10-07T00:25:26+01:00' user='nickw' visible='true'>
-    <nd ref='301590' />
-    <nd ref='17724238' />
-    <tag k='foot' v='permissive' />
-    <tag k='highway' v='footway' />
-    <tag k='name' v='Lovers Walk' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='22801693' timestamp='2008-02-03T06:17:48+00:00' user='sladen' visible='true'>
-    <nd ref='245147651' />
-    <nd ref='20831096' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='Potlatch 0.6c' />
-  </way>
-  <way id='3981717' timestamp='2006-10-31T22:26:05+00:00' user='nickw' visible='true'>
-    <nd ref='10222231' />
-    <nd ref='27496129' />
-    <nd ref='20698065' />
-    <nd ref='20698070' />
-    <nd ref='21614657' />
-    <tag k='highway' v='unclassified' />
-    <tag k='name' v='Portland Terrace' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4329572' timestamp='2007-03-04T18:58:17+00:00' user='Dean Earley' visible='true'>
-    <nd ref='26346761' />
-    <nd ref='26346713' />
-    <nd ref='26346756' />
-    <nd ref='26346717' />
-    <nd ref='26346722' />
-    <nd ref='26346750' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Little Lances Hill' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='3780198' timestamp='2006-10-21T14:42:00+01:00' user='nickw' visible='true'>
-    <nd ref='18868876' />
-    <nd ref='18868871' />
-    <nd ref='18868872' />
-    <nd ref='14743122' />
-    <tag k='highway' v='residential' />
-    <tag k='name' v='Alexandra Road' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='4764770' timestamp='2007-10-30T15:20:42+00:00' user='Dean Earley' visible='true'>
-    <nd ref='25296378' />
-    <nd ref='30431990' />
-    <tag k='bridge' v='yes' />
-    <tag k='highway' v='primary' />
-    <tag k='name' v='Twyford Road' />
-    <tag k='created_by' v='JOSM' />
-    <tag k='layer' v='1' />
-  </way>
-  <way id='4643760' timestamp='2007-05-24T00:05:30+01:00' visible='true'>
-    <nd ref='29391632' />
-    <nd ref='27513800' />
-    <tag k='foot' v='yes' />
-    <tag k='highway' v='cycleway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-  <way id='16610272' timestamp='2007-12-15T20:18:40+00:00' user='nickw' visible='true'>
-    <nd ref='171533045' />
-    <nd ref='171533043' />
-    <tag k='highway' v='footway' />
-    <tag k='created_by' v='JOSM' />
-  </way>
-</osm>
diff --git a/plugins/input/osm/test2.xml b/plugins/input/osm/test2.xml
deleted file mode 100644
index 1d25f87..0000000
--- a/plugins/input/osm/test2.xml
+++ /dev/null
@@ -1,537 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE Map>
-<Map bgcolor="#d0d0d0" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-  <Style name="amenity">
-    <Rule>
-      <Filter>[amenity]='pub'</Filter>
-      <PointSymbolizer file="/home/nick/images/pub.png" type="png" 
-        width="16" height="16" />
-    </Rule>
-    <Rule>
-      <Filter>[man_made]='mast'</Filter>
-      <PointSymbolizer file="/home/nick/images/mast.png" type="png" 
-      width="16" height="16" />
-    </Rule>
-     <Rule>
-      <Filter>[amenity]='parking'</Filter>
-      <PointSymbolizer file="/home/nick/images/carpark.png" type="png" 
-      width="16" height="16"/>
-     </Rule>
-     <Rule>
-      <Filter>[residence]='farm'</Filter>
-      <PointSymbolizer file="/home/nick/images/farm.png" type="png" 
-      width="16" height="16"/>
-     </Rule>
-  </Style>
-  
-  
-  <Style name="leisure">
-    <Rule>
-      <Filter>[landuse] = 'reservoir'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#89bac6</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[landuse] = 'cemetery'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">grey</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[landuse] = 'wood' or [landuse] = 'forest'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#aed1a0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[leisure] = 'park' or [leisure] = 'common' or
-      [leisure] = 'golf_course'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#d8e8d0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'wood'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#aed1a0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'heath'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#ffe0c0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-  </Style>
- 
-
-  <Style name='lakes'>
-    <Rule>
-      <Filter>[natural] = 'water'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#89bac6</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-  </Style>
-
-
-
-  <Style name="text">
-    <Rule>
-      <Filter>[place] = 'city'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="16" fill="#000" halo_radius="2" wrap_width="0"/>
-    </Rule>
-    <Rule>
-      <Filter>[place] = 'town'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="14" fill="#000" halo_radius="2" wrap_width="20"/>
-    </Rule>
-     <Rule>
-      <Filter>[place] = 'village' or [place] = 'suburb'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="13" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-     <Rule>
-      <Filter>[place] = 'hamlet'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="12" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'peak'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="11" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-  <Rule>
-    <Filter>[natural] = 'wood' or [natural] = 'water' or [natural] = 'heath'
-    or [leisure] = 'golf_course' </Filter>
-    <TextSymbolizer name="name" face_name="DejaVu Sans Book" 
-    size="10" fill="#000" halo_radius="2" wrap_width="0" />
-  </Rule>
-  </Style>
-  
-   <Style name="river">
-    <Rule>
-      <Filter>[waterway] = 'river'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#89bac6</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="9" fill="white" placement="line"/>
-    </Rule>
-  </Style>
-   <Style name="stream">
-    <Rule>
-      <Filter>[waterway] = 'stream'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#89bac6</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="9" fill="white" placement="line"/>
-    </Rule>
-  </Style>
-  
-  
-  <Style name="roads-casing">
-    <Rule>
-      <Filter>[highway] = 'motorway' or [highway]='motorway_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#506077</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'trunk' or [highway] = 'trunk_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#477147</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'primary' or [highway] = 'primary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#8d4346</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'secondary' or [highway] = 'secondary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#a37b48</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'tertiary' or [highway] = 'tertiary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'minor' or [highway] = 'unclassified'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'residential' or [highway] = 'service'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'unsurfaced' or [highway] = 'track'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-    <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="motorway">
-    <Rule>
-      <Filter>[highway] = 'motorway' or [highway] = 'motorway_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#809bc0</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="trunk">
-    <Rule>
-      <Filter>[highway] = 'trunk' or [highway] = 'trunk_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#7fc97f</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  
-  <Style name="primary">
-    <Rule>
-      <Filter>[highway] = 'primary' or [highway] = 'primary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#e46d71</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="secondary">
-    <Rule>
-      <Filter>[highway] = 'secondary' or [highway] = 'secondary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fdbf6f</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Style name="tertiary">
-    <Rule>
-      <Filter>[highway] = 'tertiary' or [highway] = 'tertiary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#ffffc0</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Style name="unclassified">
-    <Rule>
-      <Filter>[highway] = 'minor' or [highway] = 'unclassified'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-   <Style name="residential">
-    <Rule>
-      <Filter>[highway] = 'residential' or [highway] = 'service' or
-      [highway] = 'unsurfaced' or [highway] = 'track'</Filter> 
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-    
-  <Style name="bridleway">
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = ''</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">magenta</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [foot] = 'yes' and [horse] = 'yes'
-    and [bicycle] = 'yes'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'narrow'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#00c000</CssParameter>
-        <CssParameter name="stroke-width">1.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,5</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'path'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#00c000</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">2,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'gravel'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">brown</CssParameter>
-    <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'track'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">brown</CssParameter>
-    <CssParameter name="stroke-dasharray">2,4</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="footway">
-    <Rule>
-      <Filter>[highway] = 'footway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">magenta</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'footway' and [foot] = 'yes'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="cycleway">
-    <Rule>
-      <Filter>[highway] = 'cycleway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">blue</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">4,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="byway">
-    <Rule>
-      <Filter>[highway] = 'byway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="roads-text">
-    <Rule>
-      <Filter>[highway] = 'footway' or [highway] = 'bridleway' or [highway] = 'byway' or [highway] = 'residential' or [highway] = 'unclassified' or [highway] = 'tertiary'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="8" fill="#000" halo_radius="1" placement="line"/>
-    </Rule>
-  </Style>
-
-  <Layer name="leisure" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>leisure</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-  </Layer>
-  
-  <Layer name="waterway" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>river</StyleName>
-    <StyleName>stream</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-  </Layer>
-  
-  <Layer name="lakes" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>lakes</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-  </Layer>
-
-  <Layer name="roads" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>roads-casing</StyleName>
-    <StyleName>footway</StyleName>
-    <StyleName>cycleway</StyleName>
-    <StyleName>bridleway</StyleName>
-    <StyleName>byway</StyleName>
-    <StyleName>residential</StyleName>
-    <StyleName>unclassified</StyleName>
-    <StyleName>tertiary</StyleName>
-    <StyleName>secondary</StyleName>
-    <StyleName>primary</StyleName>
-    <StyleName>trunk</StyleName>
-    <StyleName>motorway</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-   </Layer>
-
-  <Layer name="amenity" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>amenity</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-  </Layer>
-
-  <Layer name="roadstext" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-     <StyleName>roads-text</StyleName>
-     <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-   </Layer>
-  
-  <Layer name="text" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>text</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-      <Parameter name="file">test2.osm</Parameter>
-    </Datasource>
-  </Layer>
-
-</Map>
diff --git a/plugins/input/osm/test3.xml b/plugins/input/osm/test3.xml
deleted file mode 100644
index 8dce7fe..0000000
--- a/plugins/input/osm/test3.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE Map>
-<Map bgcolor="#d0d0d0" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-  <Style name="amenity">
-    <Rule>
-      <Filter>[amenity]='pub'</Filter>
-      <PointSymbolizer file="/home/nick/images/pub.png" type="png" 
-        width="16" height="16" />
-    </Rule>
-    <Rule>
-      <Filter>[man_made]='mast'</Filter>
-      <PointSymbolizer file="/home/nick/images/mast.png" type="png" 
-      width="16" height="16" />
-    </Rule>
-     <Rule>
-      <Filter>[amenity]='parking'</Filter>
-      <PointSymbolizer file="/home/nick/images/carpark.png" type="png" 
-      width="16" height="16"/>
-     </Rule>
-     <Rule>
-      <Filter>[residence]='farm'</Filter>
-      <PointSymbolizer file="/home/nick/images/farm.png" type="png" 
-      width="16" height="16"/>
-     </Rule>
-  </Style>
-  
-  
-  <Style name="leisure">
-    <Rule>
-      <Filter>[landuse] = 'reservoir'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#89bac6</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[landuse] = 'cemetery'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">grey</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[landuse] = 'wood' or [landuse] = 'forest'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#aed1a0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[leisure] = 'park' or [leisure] = 'common' or
-      [leisure] = 'golf_course'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#d8e8d0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'wood'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#aed1a0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'heath'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#ffe0c0</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-  </Style>
- 
-
-  <Style name='lakes'>
-    <Rule>
-      <Filter>[natural] = 'water'</Filter>
-      <PolygonSymbolizer>
-        <CssParameter name="fill">#89bac6</CssParameter>
-     </PolygonSymbolizer>
-    </Rule>
-  </Style>
-
-
-
-  <Style name="text">
-    <Rule>
-      <Filter>[place] = 'city'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="16" fill="#000" halo_radius="2" wrap_width="0"/>
-    </Rule>
-    <Rule>
-      <Filter>[place] = 'town'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="14" fill="#000" halo_radius="2" wrap_width="20"/>
-    </Rule>
-     <Rule>
-      <Filter>[place] = 'village' or [place] = 'suburb'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="13" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-     <Rule>
-      <Filter>[place] = 'hamlet'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="12" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-     <Rule>
-      <Filter>[natural] = 'peak'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="11" fill="#000" halo_radius="1" wrap_width="0"/>
-    </Rule>
-  <Rule>
-    <Filter>[natural] = 'wood' or [natural] = 'water' or [natural] = 'heath'
-    or [leisure] = 'golf_course' </Filter>
-    <TextSymbolizer name="name" face_name="DejaVu Sans Book" 
-    size="10" fill="#000" halo_radius="2" wrap_width="0" />
-  </Rule>
-  </Style>
-  
-   <Style name="river">
-    <Rule>
-      <Filter>[waterway] = 'river'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#89bac6</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="9" fill="white" placement="line"/>
-    </Rule>
-  </Style>
-   <Style name="stream">
-    <Rule>
-      <Filter>[waterway] = 'stream'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#89bac6</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="9" fill="white" placement="line"/>
-    </Rule>
-  </Style>
-  
-  
-  <Style name="roads-casing">
-    <Rule>
-      <Filter>[highway] = 'motorway' or [highway]='motorway_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#506077</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'trunk' or [highway] = 'trunk_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#477147</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'primary' or [highway] = 'primary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#8d4346</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'secondary' or [highway] = 'secondary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#a37b48</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'tertiary' or [highway] = 'tertiary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'minor' or [highway] = 'unclassified'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'residential' or [highway] = 'service'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'unsurfaced' or [highway] = 'track'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#999</CssParameter>
-    <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="motorway">
-    <Rule>
-      <Filter>[highway] = 'motorway' or [highway] = 'motorway_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#809bc0</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="trunk">
-    <Rule>
-      <Filter>[highway] = 'trunk' or [highway] = 'trunk_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#7fc97f</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  
-  <Style name="primary">
-    <Rule>
-      <Filter>[highway] = 'primary' or [highway] = 'primary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#e46d71</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="secondary">
-    <Rule>
-      <Filter>[highway] = 'secondary' or [highway] = 'secondary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fdbf6f</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Style name="tertiary">
-    <Rule>
-      <Filter>[highway] = 'tertiary' or [highway] = 'tertiary_link'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#ffffc0</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Style name="unclassified">
-    <Rule>
-      <Filter>[highway] = 'minor' or [highway] = 'unclassified'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-
-   <Style name="residential">
-    <Rule>
-      <Filter>[highway] = 'residential' or [highway] = 'service' or
-      [highway] = 'unsurfaced' or [highway] = 'track'</Filter> 
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-    
-  <Style name="bridleway">
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = ''</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">magenta</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [foot] = 'yes' and [horse] = 'yes'
-    and [bicycle] = 'yes'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'narrow'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#00c000</CssParameter>
-        <CssParameter name="stroke-width">1.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,5</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'path'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#00c000</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">2,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'gravel'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">brown</CssParameter>
-    <CssParameter name="stroke-dasharray">6,4</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'bridleway' and [newforest_pathtype] = 'track'
-    </Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">brown</CssParameter>
-    <CssParameter name="stroke-dasharray">2,4</CssParameter>
-        <CssParameter name="stroke-width">2</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="footway">
-    <Rule>
-      <Filter>[highway] = 'footway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">magenta</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-    <Rule>
-      <Filter>[highway] = 'footway' and [foot] = 'yes'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">1,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="cycleway">
-    <Rule>
-      <Filter>[highway] = 'cycleway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">blue</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-dasharray">4,4</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="byway">
-    <Rule>
-      <Filter>[highway] = 'byway'</Filter>
-      <LineSymbolizer>
-        <CssParameter name="stroke">#fff</CssParameter>
-        <CssParameter name="stroke-width">6</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-        <CssParameter name="stroke-opacity">0.4</CssParameter>
-      </LineSymbolizer>
-      <LineSymbolizer>
-        <CssParameter name="stroke">red</CssParameter>
-        <CssParameter name="stroke-width">2.0</CssParameter>
-        <CssParameter name="stroke-linejoin">round</CssParameter>
-        <CssParameter name="stroke-linecap">round</CssParameter>
-      </LineSymbolizer>
-    </Rule>
-  </Style>
-  <Style name="roads-text">
-    <Rule>
-      <Filter>[highway] = 'footway' or [highway] = 'bridleway' or [highway] = 'byway' or [highway] = 'residential' or [highway] = 'unclassified' or [highway] = 'tertiary'</Filter>
-      <TextSymbolizer name="name" face_name="DejaVu Sans Book" size="8" fill="#000" halo_radius="1" placement="line"/>
-    </Rule>
-  </Style>
-
-  <Layer name="leisure" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>leisure</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-    </Datasource>
-  </Layer>
-  
-  <Layer name="waterway" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>river</StyleName>
-    <StyleName>stream</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-    </Datasource>
-  </Layer>
-  
-  <Layer name="lakes" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>lakes</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-    </Datasource>
-  </Layer>
-
-  <Layer name="roads" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>roads-casing</StyleName>
-    <StyleName>footway</StyleName>
-    <StyleName>cycleway</StyleName>
-    <StyleName>bridleway</StyleName>
-    <StyleName>byway</StyleName>
-    <StyleName>residential</StyleName>
-    <StyleName>unclassified</StyleName>
-    <StyleName>tertiary</StyleName>
-    <StyleName>secondary</StyleName>
-    <StyleName>primary</StyleName>
-    <StyleName>trunk</StyleName>
-    <StyleName>motorway</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-    </Datasource>
-   </Layer>
-
-  <Layer name="amenity" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>amenity</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-    </Datasource>
-  </Layer>
-
-  <Layer name="roadstext" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-     <StyleName>roads-text</StyleName>
-     <Datasource>
-      <Parameter name="type">osm</Parameter>
-    </Datasource>
-   </Layer>
-  
-  <Layer name="text" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>text</StyleName>
-    <Datasource>
-      <Parameter name="type">osm</Parameter>
-    </Datasource>
-  </Layer>
-
-</Map>
diff --git a/plugins/input/pgraster/README b/plugins/input/pgraster/README
new file mode 100644
index 0000000..23570c3
--- /dev/null
+++ b/plugins/input/pgraster/README
@@ -0,0 +1,24 @@
+PostGIS Raster input plugin for mapnik
+======================================
+
+This plugin shares directives with the "postgis" one,
+with the following differences:
+
+ - "raster_field" replaces "geometry_field"
+
+ - "raster_table" replaces "geometry_table"
+
+ - "prescale_rasters" replaces "simplify_geometries"
+
+ - "use_overviews" introduced
+
+ - "clip_rasters" boolean introduced, defaults to false
+
+ - "band" introduced, with same semantic of the GDAL driver
+
+Credits
+=======
+
+The plugin was initially developed by Sandro Santilli <strk at keybit.net>
+with support from CartoDB.
+
diff --git a/plugins/input/pgraster/TODO b/plugins/input/pgraster/TODO
new file mode 100644
index 0000000..730c846
--- /dev/null
+++ b/plugins/input/pgraster/TODO
@@ -0,0 +1,23 @@
+- Automated tests
+  - Test subqueries      [x]
+  - Test Data input      [x]
+  - Test RGB input       [x]
+  - Test RGBA input      [x]
+  - Test Grayscale input [x]
+- Support for all band types:
+  - PT_1BB    data[x] rgb[ ] grayscale[x]
+  - PT_2BUI   data[x] rgb[ ] grayscale[x]
+  - PT_4BUI   data[x] rgb[ ] grayscale[x]
+  - PT_8BSI   data[x] rgb[x] grayscale[x]
+  - PT_8BUI   data[x] rgb[x] grayscale[x]
+  - PT_16BSI  data[x] rgb[ ] grayscale[x]
+  - PT_16BUI  data[x] rgb[ ] grayscale[x]
+  - PT_32BSI  data[x] rgb[ ] grayscale[x]
+  - PT_32BUI  data[x] rgb[ ] grayscale[x]
+  - PT_32BF   data[x] rgb[ ] grayscale[ ]
+  - PT_64BF   data[x] rgb[ ] grayscale[ ]
+- Have pgraster and postgis plugins share the same connection pool
+- Make overviews enabled by default if table is not a subquery ?
+- Make clipping enabled automatically when needed ?
+- Allow more flexible band layout specification, see
+  http://github.com/mapnik/mapnik/wiki/RFC:-Raster-color-interpretation
diff --git a/plugins/input/pgraster/build.py b/plugins/input/pgraster/build.py
new file mode 100644
index 0000000..9f1f40f
--- /dev/null
+++ b/plugins/input/pgraster/build.py
@@ -0,0 +1,81 @@
+#
+# This file is part of Mapnik (c++ mapping toolkit)
+#
+# Copyright (C) 2013 Artem Pavlenko
+#
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+#
+
+Import ('plugin_base')
+Import ('env')
+from copy import copy
+
+PLUGIN_NAME = 'pgraster'
+
+plugin_env = plugin_base.Clone()
+
+plugin_sources = Split(
+  """
+  %(PLUGIN_NAME)s_datasource.cpp
+  %(PLUGIN_NAME)s_featureset.cpp
+  %(PLUGIN_NAME)s_wkb_reader.cpp
+  """ % locals()
+)
+
+cxxflags = []
+plugin_env['LIBS'] = []
+
+if env['RUNTIME_LINK'] == 'static':
+    # pkg-config is more reliable than pg_config across platforms
+    cmd = 'pkg-config libpq --libs --static'
+    try:
+        plugin_env.ParseConfig(cmd)
+    except OSError, e:
+        plugin_env.Append(LIBS='pq')
+else:
+    plugin_env.Append(LIBS='pq')
+
+# Link Library to Dependencies
+libraries = copy(plugin_env['LIBS'])
+
+if env['THREADING'] == 'multi':
+    libraries.append('boost_thread%s' % env['BOOST_APPEND'])
+
+if env['PLUGIN_LINKING'] == 'shared':
+    libraries.insert(0,env['MAPNIK_NAME'])
+    libraries.append(env['ICU_LIB_NAME'])
+    libraries.append('boost_system%s' % env['BOOST_APPEND'])
+
+    TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
+                                      SHLIBPREFIX='',
+                                      SHLIBSUFFIX='.input',
+                                      source=plugin_sources,
+                                      LIBS=libraries,
+                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+
+    # if the plugin links to libmapnik ensure it is built first
+    Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
+
+    if 'uninstall' not in COMMAND_LINE_TARGETS:
+        env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
+        env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
+
+plugin_obj = {
+  'LIBS': libraries,
+  'SOURCES': plugin_sources,
+}
+
+Return('plugin_obj')
diff --git a/plugins/input/pgraster/pgraster_datasource.cpp b/plugins/input/pgraster/pgraster_datasource.cpp
new file mode 100644
index 0000000..f4a8a9d
--- /dev/null
+++ b/plugins/input/pgraster/pgraster_datasource.cpp
@@ -0,0 +1,1197 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************
+ *
+ * Initially developed by Sandro Santilli <strk at keybit.net> for CartoDB
+ *
+ *****************************************************************************/
+
+#include "../postgis/connection_manager.hpp"
+#include "../postgis/asyncresultset.hpp"
+#include "pgraster_datasource.hpp"
+#include "pgraster_featureset.hpp"
+
+// mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/global.hpp> // for byte
+#include <mapnik/boolean.hpp>
+#include <mapnik/sql_utils.hpp>
+#include <mapnik/util/conversions.hpp>
+#include <mapnik/timer.hpp>
+#include <mapnik/value_types.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/algorithm/string.hpp>
+#include <boost/tokenizer.hpp>
+#pragma GCC diagnostic pop
+
+// stl
+#include <string>
+#include <algorithm>
+#include <set>
+#include <sstream>
+#include <iomanip>
+
+DATASOURCE_PLUGIN(pgraster_datasource)
+
+const double pgraster_datasource::FMAX = std::numeric_limits<float>::max();
+const std::string pgraster_datasource::RASTER_COLUMNS = "raster_columns";
+const std::string pgraster_datasource::RASTER_OVERVIEWS = "raster_overviews";
+const std::string pgraster_datasource::SPATIAL_REF_SYS = "spatial_ref_system";
+
+using std::shared_ptr;
+using mapnik::attribute_descriptor;
+using mapnik::value_integer;
+
+namespace {
+
+  // TODO: move to sql_utils
+  std::string quote_ident(std::string& s) {
+    return "\"" + s + "\""; // TODO: escape internal quotes
+  }
+
+};
+
+pgraster_datasource::pgraster_datasource(parameters const& params)
+    : datasource(params),
+      table_(*params.get<std::string>("table", "")),
+      schema_(""),
+      raster_table_(*params.get<std::string>("raster_table", "")),
+      raster_field_(*params.get<std::string>("raster_field", "")),
+      key_field_(*params.get<std::string>("key_field", "")),
+      cursor_fetch_size_(*params.get<mapnik::value_integer>("cursor_size", 0)),
+      row_limit_(*params.get<value_integer>("row_limit", 0)),
+      type_(datasource::Raster),
+      srid_(*params.get<value_integer>("srid", 0)),
+      band_(*params.get<value_integer>("band", 0)),
+      extent_initialized_(false),
+      prescale_rasters_(*params.get<mapnik::boolean_type>("prescale_rasters", false)),
+      use_overviews_(*params.get<mapnik::boolean_type>("use_overviews", false)),
+      clip_rasters_(*params.get<mapnik::boolean_type>("clip_rasters", false)),
+      desc_(*params.get<std::string>("type"), "utf-8"),
+      creator_(params.get<std::string>("host"),
+             params.get<std::string>("port"),
+             params.get<std::string>("dbname"),
+             params.get<std::string>("user"),
+             params.get<std::string>("password"),
+             params.get<std::string>("connect_timeout", "4")),
+      bbox_token_("!bbox!"),
+      scale_denom_token_("!scale_denominator!"),
+      pixel_width_token_("!pixel_width!"),
+      pixel_height_token_("!pixel_height!"),
+      pool_max_size_(*params_.get<value_integer>("max_size", 10)),
+      persist_connection_(*params.get<mapnik::boolean_type>("persist_connection", true)),
+      extent_from_subquery_(*params.get<mapnik::boolean_type>("extent_from_subquery", false)),
+      estimate_extent_(*params.get<mapnik::boolean_type>("estimate_extent", false)),
+      max_async_connections_(*params_.get<value_integer>("max_async_connection", 1)),
+      asynchronous_request_(false),
+      // params below are for testing purposes only and may be removed at any time
+      intersect_min_scale_(*params.get<value_integer>("intersect_min_scale", 0)),
+      intersect_max_scale_(*params.get<value_integer>("intersect_max_scale", 0))
+{
+#ifdef MAPNIK_STATS
+    mapnik::progress_timer __stats__(std::clog, "pgraster_datasource::init");
+#endif
+    if (table_.empty())
+    {
+        throw mapnik::datasource_exception("Pgraster Plugin: missing <table> parameter");
+    }
+
+    boost::optional<std::string> ext = params.get<std::string>("extent");
+    if (ext && !ext->empty())
+    {
+        extent_initialized_ = extent_.from_string(*ext);
+    }
+
+    // NOTE: In multithread environment, pool_max_size_ should be
+    // max_async_connections_ * num_threads
+    if(max_async_connections_ > 1)
+    {
+        if(max_async_connections_ > pool_max_size_)
+        {
+            std::ostringstream err;
+            err << "PostGIS Plugin: Error: 'max_async_connections ("
+                << max_async_connections_ << ") must be <= max_size(" << pool_max_size_ << ")";
+            throw mapnik::datasource_exception(err.str());
+        }
+        asynchronous_request_ = true;
+    }
+
+    boost::optional<value_integer> initial_size = params.get<value_integer>("initial_size", 1);
+    boost::optional<mapnik::boolean_type> autodetect_key_field = params.get<mapnik::boolean_type>("autodetect_key_field", false);
+
+    ConnectionManager::instance().registerPool(creator_, *initial_size, pool_max_size_);
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
+    if (pool)
+    {
+        shared_ptr<Connection> conn = pool->borrowObject();
+        if (!conn) return;
+
+        if (conn->isOK())
+        {
+
+            desc_.set_encoding(conn->client_encoding());
+
+            if (raster_table_.empty())
+            {
+              raster_table_ = mapnik::sql_utils::table_from_sql(table_);
+              // non-trivial subqueries (having no FROM) make it
+              // impossible to use overviews
+              // TODO: improve "table_from_sql" ?
+              if ( raster_table_[raster_table_.find_first_not_of(" \t\r\n")] == '(' )
+              {
+                raster_table_.clear();
+                if ( use_overviews_ )
+                {
+                  std::ostringstream err;
+                  err << "Pgraster Plugin: overviews cannot be used "
+                         "with non-trivial subqueries";
+                  MAPNIK_LOG_WARN(pgraster) << err.str();
+                  use_overviews_ = false;
+                }
+                if ( ! extent_from_subquery_ ) {
+                  std::ostringstream err;
+                  err << "Pgraster Plugin: extent can only be computed "
+                         "from subquery as we could not found table source";
+                  MAPNIK_LOG_WARN(pgraster) << err.str();
+                  extent_from_subquery_ = true;
+                }
+
+              }
+            }
+
+            std::string::size_type idx = raster_table_.find_last_of('.');
+            if (idx != std::string::npos)
+            {
+                schema_ = raster_table_.substr(0, idx);
+                raster_table_ = raster_table_.substr(idx + 1);
+            }
+
+            // If we do not know either the geometry_field or the srid or we
+            // want to use overviews but do not know about schema, or
+            // no extent was specified, then attempt to fetch the missing
+            // information from a raster_columns entry.
+            //
+            // This will return no records if we are querying a bogus table returned
+            // from the simplistic table parsing in table_from_sql() or if
+            // the table parameter references a table, view, or subselect not
+            // registered in the geometry columns.
+            //
+            geometryColumn_ = mapnik::sql_utils::unquote_double(raster_field_);
+            if (!raster_table_.empty() && (
+                  geometryColumn_.empty() || srid_ == 0 ||
+                  (schema_.empty() && use_overviews_) ||
+                  ! extent_initialized_
+               ))
+            {
+#ifdef MAPNIK_STATS
+                mapnik::progress_timer __stats2__(std::clog, "pgraster_datasource::init(get_srid_and_geometry_column)");
+#endif
+                std::ostringstream s;
+
+                try
+                {
+                    s << "SELECT r_raster_column col, srid, r_table_schema";
+                    if ( ! extent_initialized_ ) {
+                      s << ", st_xmin(extent) xmin, st_ymin(extent) ymin"
+                        << ", st_xmax(extent) xmax, st_ymax(extent) ymax";
+                    }
+                    s << " FROM "
+                      << RASTER_COLUMNS << " WHERE r_table_name='"
+                      << mapnik::sql_utils::unquote_double(raster_table_)
+                      << "'";
+                    if (! schema_.empty())
+                    {
+                        s << " AND r_table_schema='"
+                          << mapnik::sql_utils::unquote_double(schema_)
+                          << "'";
+                    }
+                    if (! raster_field_.empty())
+                    {
+                        s << " AND r_raster_column='"
+                          << mapnik::sql_utils::unquote_double(raster_field_)
+                          << "'";
+                    }
+                    MAPNIK_LOG_DEBUG(pgraster) <<
+                      "pgraster_datasource: running query " << s.str();
+                    shared_ptr<ResultSet> rs = conn->executeQuery(s.str());
+                    if (rs->next())
+                    {
+                        geometryColumn_ = rs->getValue("col");
+                        if ( ! extent_initialized_ )
+                        {
+                          double lox, loy, hix, hiy;
+                          if (mapnik::util::string2double(rs->getValue("xmin"), lox) &&
+                              mapnik::util::string2double(rs->getValue("ymin"), loy) &&
+                              mapnik::util::string2double(rs->getValue("xmax"), hix) &&
+                              mapnik::util::string2double(rs->getValue("ymax"), hiy))
+                          {
+                            extent_.init(lox, loy, hix, hiy);
+                            extent_initialized_ = true;
+                            MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: Layer extent=" << extent_;
+                          }
+                          else
+                          {
+                            MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: Could not determine extent from query: " << s.str();
+                          }
+                        }
+                        if (srid_ == 0)
+                        {
+                            const char* srid_c = rs->getValue("srid");
+                            if (srid_c != NULL)
+                            {
+                                int result = 0;
+                                const char * end = srid_c + std::strlen(srid_c);
+                                if (mapnik::util::string2int(srid_c, end, result))
+                                {
+                                    srid_ = result;
+                                }
+                            }
+                        }
+                        if ( schema_.empty() )
+                        {
+                            schema_ = rs->getValue("r_table_schema");
+                        }
+                    }
+                    else
+                    {
+            MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: no response from metadata query " << s.str();
+                    }
+                    rs->close();
+                }
+                catch (mapnik::datasource_exception const& ex) {
+                    // let this pass on query error and use the fallback below
+                    MAPNIK_LOG_WARN(pgraster) << "pgraster_datasource: metadata query failed: " << ex.what();
+                }
+
+                // If we still do not know the srid then we can try to fetch
+                // it from the 'table_' parameter, which should work even if it is
+                // a subselect as long as we know the geometry_field to query
+                if (! geometryColumn_.empty() && srid_ <= 0)
+                {
+                    s.str("");
+
+                    s << "SELECT ST_SRID(\"" << geometryColumn_ << "\") AS srid FROM "
+                      << populate_tokens(table_) << " WHERE \"" << geometryColumn_ << "\" IS NOT NULL LIMIT 1;";
+
+                    shared_ptr<ResultSet> rs = conn->executeQuery(s.str());
+                    if (rs->next())
+                    {
+                        const char* srid_c = rs->getValue("srid");
+                        if (srid_c != NULL)
+                        {
+                            int result = 0;
+                            const char * end = srid_c + std::strlen(srid_c);
+                            if (mapnik::util::string2int(srid_c, end, result))
+                            {
+                                srid_ = result;
+                            }
+                        }
+                    }
+                    rs->close();
+                }
+            }
+
+            // If overviews were requested, take note of the max scale
+            // of each available overview, sorted by scale descending
+            if ( use_overviews_ )
+            {
+                std::ostringstream err;
+                if ( schema_.empty() )
+                {
+                  err << "Pgraster Plugin: unable to lookup available table"
+                      << " overviews due to unknown schema";
+                  throw mapnik::datasource_exception(err.str());
+                }
+                if ( geometryColumn_.empty() )
+                {
+                  err << "Pgraster Plugin: unable to lookup available table"
+                      << " overviews due to unknown column name";
+                  throw mapnik::datasource_exception(err.str());
+                }
+
+                std::ostringstream s;
+                s << "select "
+                     "r.r_table_schema sch, "
+                     "r.r_table_name tab, "
+                     "r.r_raster_column col, "
+                     "greatest(abs(r.scale_x), abs(r.scale_y)) scl "
+                     "from"
+                     " raster_overviews o,"
+                     " raster_columns r "
+                     "where"
+                     " o.r_table_schema = '"
+                  << mapnik::sql_utils::unquote_double(schema_)
+                  << "' and o.r_table_name = '"
+                  << mapnik::sql_utils::unquote_double(raster_table_)
+                  << "' and o.r_raster_column = '"
+                  << mapnik::sql_utils::unquote_double(geometryColumn_)
+                  << "' and r.r_table_schema = o.o_table_schema"
+                     " and r.r_table_name = o.o_table_name"
+                     " and r.r_raster_column = o.o_raster_column"
+                     " ORDER BY scl ASC";
+                MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: running query " << s.str();
+                shared_ptr<ResultSet> rs = conn->executeQuery(s.str());
+                while (rs->next())
+                {
+                  overviews_.resize(overviews_.size()+1);
+                  pgraster_overview& ov = overviews_.back();
+                  ov.schema = rs->getValue("sch");
+                  ov.table = rs->getValue("tab");
+                  ov.column = rs->getValue("col");
+                  ov.scale = atof(rs->getValue("scl"));
+                  MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: found overview " << ov.schema << "." << ov.table << "." << ov.column << " with scale " << ov.scale;
+                }
+                rs->close();
+                if ( overviews_.empty() ) {
+                  MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: no overview found for " << schema_ << "." << raster_table_ << "." << geometryColumn_;
+                }
+            }
+
+            // detect primary key
+            if (*autodetect_key_field && key_field_.empty())
+            {
+#ifdef MAPNIK_STATS
+                mapnik::progress_timer __stats2__(std::clog, "pgraster_datasource::bind(get_primary_key)");
+#endif
+
+                std::ostringstream s;
+                s << "SELECT a.attname, a.attnum, t.typname, t.typname in ('int2','int4','int8') "
+                    "AS is_int FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, pg_index i "
+                    "WHERE a.attnum > 0 AND a.attrelid = c.oid "
+                    "AND a.atttypid = t.oid AND c.relnamespace = n.oid "
+                    "AND c.oid = i.indrelid AND i.indisprimary = 't' "
+                    "AND t.typname !~ '^geom' AND c.relname ="
+                  << " '" << mapnik::sql_utils::unquote_double(raster_table_) << "' "
+                    //"AND a.attnum = ANY (i.indkey) " // postgres >= 8.1
+                  << "AND (i.indkey[0]=a.attnum OR i.indkey[1]=a.attnum OR i.indkey[2]=a.attnum "
+                    "OR i.indkey[3]=a.attnum OR i.indkey[4]=a.attnum OR i.indkey[5]=a.attnum "
+                    "OR i.indkey[6]=a.attnum OR i.indkey[7]=a.attnum OR i.indkey[8]=a.attnum "
+                    "OR i.indkey[9]=a.attnum) ";
+                if (! schema_.empty())
+                {
+                    s << "AND n.nspname='"
+                      << mapnik::sql_utils::unquote_double(schema_)
+                      << "' ";
+                }
+                s << "ORDER BY a.attnum";
+
+                shared_ptr<ResultSet> rs_key = conn->executeQuery(s.str());
+                if (rs_key->next())
+                {
+                    unsigned int result_rows = rs_key->size();
+                    if (result_rows == 1)
+                    {
+                        bool is_int = (std::string(rs_key->getValue(3)) == "t");
+                        if (is_int)
+                        {
+                            const char* key_field_string = rs_key->getValue(0);
+                            if (key_field_string)
+                            {
+                                key_field_ = std::string(key_field_string);
+
+                                MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: auto-detected key field of '"
+                                                          << key_field_ << "' on table '" << raster_table_ << "'";
+                            }
+                        }
+                        else
+                        {
+                            // throw for cases like a numeric primary key, which is invalid
+                            // as it should be floating point (int numerics are useless)
+                            std::ostringstream err;
+                            err << "PostGIS Plugin: Error: '"
+                                << rs_key->getValue(0)
+                                << "' on table '"
+                                << raster_table_
+                                << "' is not a valid integer primary key field\n";
+                            throw mapnik::datasource_exception(err.str());
+                        }
+                    }
+                    else if (result_rows > 1)
+                    {
+                        std::ostringstream err;
+                        err << "PostGIS Plugin: Error: '"
+                            << "multi column primary key detected but is not supported";
+                        throw mapnik::datasource_exception(err.str());
+                    }
+                }
+                rs_key->close();
+            }
+
+            // if a globally unique key field/primary key is required
+            // but still not known at this point, then throw
+            if (*autodetect_key_field && key_field_.empty())
+            {
+                throw mapnik::datasource_exception(std::string("PostGIS Plugin: Error: primary key required")
+                                                   + " but could not be detected for table '" +
+                                                   raster_table_ + "', please supply 'key_field' option to specify field to use for primary key");
+            }
+
+            if (srid_ == 0)
+            {
+                srid_ = -1;
+
+                MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: Table " << table_ << " is using SRID=" << srid_;
+            }
+
+            // At this point the geometry_field may still not be known
+            // but we'll catch that where more useful...
+            MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: Using SRID=" << srid_;
+            MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: Using geometry_column=" << geometryColumn_;
+
+            // collect attribute desc
+#ifdef MAPNIK_STATS
+            mapnik::progress_timer __stats2__(std::clog, "pgraster_datasource::bind(get_column_description)");
+#endif
+
+            std::ostringstream s;
+            s << "SELECT * FROM " << populate_tokens(table_) << " LIMIT 0";
+
+            shared_ptr<ResultSet> rs = conn->executeQuery(s.str());
+            int count = rs->getNumFields();
+            bool found_key_field = false;
+            for (int i = 0; i < count; ++i)
+            {
+                std::string fld_name = rs->getFieldName(i);
+                int type_oid = rs->getTypeOID(i);
+
+                // validate type of key_field
+                if (! found_key_field && ! key_field_.empty() && fld_name == key_field_)
+                {
+                    if (type_oid == 20 || type_oid == 21 || type_oid == 23)
+                    {
+                        found_key_field = true;
+                        desc_.add_descriptor(attribute_descriptor(fld_name, mapnik::Integer));
+                    }
+                    else
+                    {
+                        std::ostringstream error_s;
+                        error_s << "invalid type '";
+
+                        std::ostringstream type_s;
+                        type_s << "SELECT oid, typname FROM pg_type WHERE oid = " << type_oid;
+
+                        shared_ptr<ResultSet> rs_oid = conn->executeQuery(type_s.str());
+                        if (rs_oid->next())
+                        {
+                            error_s << rs_oid->getValue("typname")
+                                    << "' (oid:" << rs_oid->getValue("oid") << ")";
+                        }
+                        else
+                        {
+                            error_s << "oid:" << type_oid << "'";
+                        }
+
+                        rs_oid->close();
+                        error_s << " for key_field '" << fld_name << "' - "
+                                << "must be an integer primary key";
+
+                        rs->close();
+                        throw mapnik::datasource_exception(error_s.str());
+                    }
+                }
+                else
+                {
+                    switch (type_oid)
+                    {
+                    case 16:    // bool
+                        desc_.add_descriptor(attribute_descriptor(fld_name, mapnik::Boolean));
+                        break;
+                    case 20:    // int8
+                    case 21:    // int2
+                    case 23:    // int4
+                        desc_.add_descriptor(attribute_descriptor(fld_name, mapnik::Integer));
+                        break;
+                    case 700:   // float4
+                    case 701:   // float8
+                    case 1700:  // numeric
+                        desc_.add_descriptor(attribute_descriptor(fld_name, mapnik::Double));
+                        break;
+                    case 1042:  // bpchar
+                    case 1043:  // varchar
+                    case 25:    // text
+                    case 705:   // literal
+                        desc_.add_descriptor(attribute_descriptor(fld_name, mapnik::String));
+                        break;
+                    default: // should not get here
+#ifdef MAPNIK_LOG
+                        s.str("");
+                        s << "SELECT oid, typname FROM pg_type WHERE oid = " << type_oid;
+
+                        shared_ptr<ResultSet> rs_oid = conn->executeQuery(s.str());
+                        if (rs_oid->next())
+                        {
+                            std::string typname(rs_oid->getValue("typname"));
+                            if (typname != "geometry" && typname != "raster")
+                            {
+                                MAPNIK_LOG_WARN(pgraster) << "pgraster_datasource: Unknown type=" << typname
+                                                         << " (oid:" << rs_oid->getValue("oid") << ")";
+                            }
+                        }
+                        else
+                        {
+                            MAPNIK_LOG_WARN(pgraster) << "pgraster_datasource: Unknown type_oid=" << type_oid;
+                        }
+                        rs_oid->close();
+#endif
+                        break;
+                    }
+                }
+            }
+
+            rs->close();
+
+        }
+
+        // Close explicitly the connection so we can 'fork()' without sharing open connections
+        conn->close();
+
+    }
+}
+
+pgraster_datasource::~pgraster_datasource()
+{
+    if (! persist_connection_)
+    {
+        CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
+        if (pool)
+        {
+            try {
+              shared_ptr<Connection> conn = pool->borrowObject();
+              if (conn)
+              {
+                  conn->close();
+              }
+            } catch (mapnik::datasource_exception const& ex) {
+              // happens when borrowObject tries to
+              // create a new connection and fails.
+              // In turn, new connection would be needed
+              // when our broke and was thus no good to
+              // be borrowed
+              // See https://github.com/mapnik/mapnik/issues/2191
+            }
+        }
+    }
+}
+
+const char * pgraster_datasource::name()
+{
+    return "pgraster";
+}
+
+mapnik::datasource::datasource_t pgraster_datasource::type() const
+{
+    return type_;
+}
+
+layer_descriptor pgraster_datasource::get_descriptor() const
+{
+    return desc_;
+}
+
+std::string pgraster_datasource::sql_bbox(box2d<double> const& env) const
+{
+    std::ostringstream b;
+
+    if (srid_ > 0)
+    {
+        b << "ST_SetSRID(";
+    }
+
+    b << "'BOX3D(";
+    b << std::setprecision(16);
+    b << env.minx() << " " << env.miny() << ",";
+    b << env.maxx() << " " << env.maxy() << ")'::box3d";
+
+    if (srid_ > 0)
+    {
+        b << ", " << srid_ << ")";
+    }
+
+    return b.str();
+}
+
+std::string pgraster_datasource::populate_tokens(std::string const& sql) const
+{
+    std::string populated_sql = sql;
+
+    if (boost::algorithm::icontains(sql, bbox_token_))
+    {
+        box2d<double> max_env(-1.0 * FMAX, -1.0 * FMAX, FMAX, FMAX);
+        const std::string max_box = sql_bbox(max_env);
+        boost::algorithm::replace_all(populated_sql, bbox_token_, max_box);
+    }
+
+    if (boost::algorithm::icontains(sql, scale_denom_token_))
+    {
+        std::ostringstream ss;
+        ss << FMAX;
+        boost::algorithm::replace_all(populated_sql, scale_denom_token_, ss.str());
+    }
+
+    if (boost::algorithm::icontains(sql, pixel_width_token_))
+    {
+        std::ostringstream ss;
+        ss << 0;
+        boost::algorithm::replace_all(populated_sql, pixel_width_token_, ss.str());
+    }
+
+    if (boost::algorithm::icontains(sql, pixel_height_token_))
+    {
+        std::ostringstream ss;
+        ss << 0;
+        boost::algorithm::replace_all(populated_sql, pixel_height_token_, ss.str());
+    }
+
+    return populated_sql;
+}
+
+std::string pgraster_datasource::populate_tokens(std::string const& sql, double scale_denom, box2d<double> const& env, double pixel_width, double pixel_height) const
+{
+    std::string populated_sql = sql;
+    std::string box = sql_bbox(env);
+
+    if (boost::algorithm::icontains(populated_sql, scale_denom_token_))
+    {
+        std::ostringstream ss;
+        ss << scale_denom;
+        boost::algorithm::replace_all(populated_sql, scale_denom_token_, ss.str());
+    }
+
+    if (boost::algorithm::icontains(sql, pixel_width_token_))
+    {
+        std::ostringstream ss;
+        ss << pixel_width;
+        boost::algorithm::replace_all(populated_sql, pixel_width_token_, ss.str());
+    }
+
+    if (boost::algorithm::icontains(sql, pixel_height_token_))
+    {
+        std::ostringstream ss;
+        ss << pixel_height;
+        boost::algorithm::replace_all(populated_sql, pixel_height_token_, ss.str());
+    }
+
+    if (boost::algorithm::icontains(populated_sql, bbox_token_))
+    {
+        boost::algorithm::replace_all(populated_sql, bbox_token_, box);
+        return populated_sql;
+    }
+    else
+    {
+        std::ostringstream s;
+
+        if (intersect_min_scale_ > 0 && (scale_denom <= intersect_min_scale_))
+        {
+            s << " WHERE ST_Intersects(\"" << geometryColumn_ << "\"," << box << ")";
+        }
+        else if (intersect_max_scale_ > 0 && (scale_denom >= intersect_max_scale_))
+        {
+            // do no bbox restriction
+        }
+        else
+        {
+            s << " WHERE \"" << geometryColumn_ << "\" && " << box;
+        }
+
+        return populated_sql + s.str();
+    }
+}
+
+
+std::shared_ptr<IResultSet> pgraster_datasource::get_resultset(std::shared_ptr<Connection> &conn, std::string const& sql, CnxPool_ptr const& pool, processor_context_ptr ctx) const
+{
+
+    if (!ctx)
+    {
+        // ! asynchronous_request_
+        if (cursor_fetch_size_ > 0)
+        {
+            // cursor
+            std::ostringstream csql;
+            std::string cursor_name = conn->new_cursor_name();
+
+            csql << "DECLARE " << cursor_name << " BINARY INSENSITIVE NO SCROLL CURSOR WITH HOLD FOR " << sql << " FOR READ ONLY";
+
+            if (! conn->execute(csql.str()))
+            {
+                // TODO - better error
+                throw mapnik::datasource_exception("Pgraster Plugin: error creating cursor for data select." );
+            }
+
+            return std::make_shared<CursorResultSet>(conn, cursor_name, cursor_fetch_size_);
+
+        }
+        else
+        {
+            // no cursor
+            return conn->executeQuery(sql, 1);
+        }
+    }
+    else
+    {   // asynchronous requests
+
+        std::shared_ptr<postgis_processor_context> pgis_ctxt = std::static_pointer_cast<postgis_processor_context>(ctx);
+        if (conn)
+        {
+            // lauch async req & create asyncresult with conn
+            conn->executeAsyncQuery(sql, 1);
+            return std::make_shared<AsyncResultSet>(pgis_ctxt, pool, conn, sql);
+        }
+        else
+        {
+            // create asyncresult  with  null connection
+            std::shared_ptr<AsyncResultSet> res = std::make_shared<AsyncResultSet>(pgis_ctxt, pool,  conn, sql);
+            pgis_ctxt->add_request(res);
+            return res;
+        }
+    }
+}
+
+processor_context_ptr pgraster_datasource::get_context(feature_style_context_map & ctx) const
+{
+    if (!asynchronous_request_)
+    {
+        return processor_context_ptr();
+    }
+
+    std::string ds_name(name());
+    feature_style_context_map::const_iterator itr = ctx.find(ds_name);
+    if (itr != ctx.end())
+    {
+        return itr->second;
+    }
+    else
+    {
+        return ctx.insert(std::make_pair(ds_name,std::make_shared<postgis_processor_context>())).first->second;
+    }
+}
+
+featureset_ptr pgraster_datasource::features(query const& q) const
+{
+    // if the driver is in asynchronous mode, return the appropriate fetaures
+    if (asynchronous_request_ )
+    {
+        return features_with_context(q,std::make_shared<postgis_processor_context>());
+    }
+    else
+    {
+        return features_with_context(q,processor_context_ptr());
+    }
+}
+
+featureset_ptr pgraster_datasource::features_with_context(query const& q,processor_context_ptr proc_ctx) const
+{
+
+#ifdef MAPNIK_STATS
+    mapnik::progress_timer __stats__(std::clog, "pgraster_datasource::features_with_context");
+#endif
+
+
+    box2d<double> const& box = q.get_bbox();
+    double scale_denom = q.scale_denominator();
+
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
+
+    if (pool)
+    {
+        shared_ptr<Connection> conn;
+
+        if ( asynchronous_request_ )
+        {
+            // limit use to num_async_request_ => if reached don't borrow the last connexion object
+            std::shared_ptr<postgis_processor_context> pgis_ctxt = std::static_pointer_cast<postgis_processor_context>(proc_ctx);
+            if ( pgis_ctxt->num_async_requests_ < max_async_connections_ )
+            {
+                conn = pool->borrowObject();
+                pgis_ctxt->num_async_requests_++;
+            }
+        }
+        else
+        {
+            // Always get a connection in synchronous mode
+            conn = pool->borrowObject();
+            if(!conn )
+            {
+                throw mapnik::datasource_exception("Pgraster Plugin: Null connection");
+            }
+        }
+
+
+        if (geometryColumn_.empty())
+        {
+            std::ostringstream s_error;
+            s_error << "PostGIS: geometry name lookup failed for table '";
+
+            if (! schema_.empty())
+            {
+                s_error << schema_ << ".";
+            }
+            s_error << raster_table_
+                    << "'. Please manually provide the 'geometry_field' parameter or add an entry "
+                    << "in the geometry_columns for '";
+
+            if (! schema_.empty())
+            {
+                s_error << schema_ << ".";
+            }
+            s_error << raster_table_ << "'.";
+
+            throw mapnik::datasource_exception(s_error.str());
+        }
+
+        const double px_gw = 1.0 / std::get<0>(q.resolution());
+        const double px_gh = 1.0 / std::get<1>(q.resolution());
+
+        MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: px_gw=" << px_gw
+                                   << " px_gh=" << px_gh;
+
+        std::string table_with_bbox;
+        std::string col = geometryColumn_;
+
+        if ( use_overviews_ ) {
+          std::string sch = schema_;
+          std::string tab = mapnik::sql_utils::unquote_double(raster_table_);
+          const double scale = std::min(px_gw, px_gh);
+          std::vector<pgraster_overview>::const_reverse_iterator i;
+          for (i=overviews_.rbegin(); i!=overviews_.rend(); ++i) {
+            const pgraster_overview& o = *i;
+            if ( o.scale < scale ) {
+              sch = o.schema;
+              tab = o.table;
+              col = o.column;
+              MAPNIK_LOG_DEBUG(pgraster)
+                << "pgraster_datasource: using overview "
+                << o.schema << "." << o.table << "." << o.column
+                << " with scale=" << o.scale
+                << " for min out scale=" << scale;
+              break;
+            } else {
+              MAPNIK_LOG_DEBUG(pgraster)
+                << "pgraster_datasource: overview "
+                << o.schema << "." << o.table << "." << o.column
+                << " with scale=" << o.scale
+                << " not good for min out scale " << scale;
+            }
+          }
+          table_with_bbox = table_; // possibly a subquery
+          boost::algorithm::replace_all(table_with_bbox,
+              mapnik::sql_utils::unquote_double(raster_table_), tab);
+          boost::algorithm::replace_all(table_with_bbox,
+              mapnik::sql_utils::unquote_double(schema_), sch);
+          boost::algorithm::replace_all(table_with_bbox,
+              mapnik::sql_utils::unquote_double(geometryColumn_), col);
+          table_with_bbox = populate_tokens(table_with_bbox,
+              scale_denom, box, px_gw, px_gh);
+        } else {
+          table_with_bbox = populate_tokens(table_, scale_denom, box, px_gw, px_gh);
+        }
+
+        std::ostringstream s;
+
+        s << "SELECT ST_AsBinary(";
+
+        if (band_) s << "ST_Band(";
+
+        if (prescale_rasters_) s << "ST_Resize(";
+
+        if (clip_rasters_) s << "ST_Clip(";
+
+        s << "\"" << col << "\"";
+
+        if (clip_rasters_) {
+          s << ", ST_Expand(" << sql_bbox(box)
+            << ", greatest(abs(ST_ScaleX(\""
+            << col << "\")), abs(ST_ScaleY(\""
+            << col << "\")))))";
+        }
+
+        if (prescale_rasters_) {
+          const double scale = std::min(px_gw, px_gh);
+          s << ", least(abs(ST_ScaleX(\"" << col
+            << "\"))::float8/" << scale
+            << ", 1.0), least(abs(ST_ScaleY(\"" << col
+            << "\"))::float8/" << scale << ", 1.0))";
+          // TODO: if band_ is given, we'll interpret as indexed so
+          //       the rescaling must NOT ruin it (use algorithm mode!)
+        }
+
+        if (band_) s << ", " << band_ << ")";
+
+        s << ") AS geom";
+
+        mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
+        std::set<std::string> const& props = q.property_names();
+        std::set<std::string>::const_iterator pos = props.begin();
+        std::set<std::string>::const_iterator end = props.end();
+
+        if (! key_field_.empty())
+        {
+            mapnik::sql_utils::quote_attr(s, key_field_);
+            ctx->push(key_field_);
+
+            for (; pos != end; ++pos)
+            {
+                if (*pos != key_field_)
+                {
+                    mapnik::sql_utils::quote_attr(s, *pos);
+                    ctx->push(*pos);
+                }
+            }
+        }
+        else
+        {
+            for (; pos != end; ++pos)
+            {
+                mapnik::sql_utils::quote_attr(s, *pos);
+                ctx->push(*pos);
+            }
+        }
+
+        s << " FROM " << table_with_bbox;
+
+        if (row_limit_ > 0)
+        {
+            s << " LIMIT " << row_limit_;
+        }
+
+        MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: "
+          "features query: " << s.str();
+
+        std::shared_ptr<IResultSet> rs = get_resultset(conn, s.str(), pool, proc_ctx);
+        return std::make_shared<pgraster_featureset>(rs, ctx,
+                  desc_.get_encoding(), !key_field_.empty(),
+                  band_ ? 1 : 0 // whatever band number is given we'd have
+                                // extracted with ST_Band above so it becomes
+                                // band number 1
+               );
+
+    }
+
+    return featureset_ptr();
+}
+
+
+featureset_ptr pgraster_datasource::features_at_point(coord2d const& pt, double tol) const
+{
+#ifdef MAPNIK_STATS
+    mapnik::progress_timer __stats__(std::clog, "pgraster_datasource::features_at_point");
+#endif
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
+    if (pool)
+    {
+        shared_ptr<Connection> conn = pool->borrowObject();
+        if (!conn) return featureset_ptr();
+
+        if (conn->isOK())
+        {
+            if (geometryColumn_.empty())
+            {
+                std::ostringstream s_error;
+                s_error << "PostGIS: geometry name lookup failed for table '";
+
+                if (! schema_.empty())
+                {
+                    s_error << schema_ << ".";
+                }
+                s_error << raster_table_
+                        << "'. Please manually provide the 'geometry_field' parameter or add an entry "
+                        << "in the geometry_columns for '";
+
+                if (! schema_.empty())
+                {
+                    s_error << schema_ << ".";
+                }
+                s_error << raster_table_ << "'.";
+
+                throw mapnik::datasource_exception(s_error.str());
+            }
+
+            std::ostringstream s;
+            s << "SELECT ST_AsBinary(\"" << geometryColumn_ << "\") AS geom";
+
+            mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
+            std::vector<attribute_descriptor>::const_iterator itr = desc_.get_descriptors().begin();
+            std::vector<attribute_descriptor>::const_iterator end = desc_.get_descriptors().end();
+
+            if (! key_field_.empty())
+            {
+                mapnik::sql_utils::quote_attr(s, key_field_);
+                ctx->push(key_field_);
+                for (; itr != end; ++itr)
+                {
+                    if (itr->get_name() != key_field_)
+                    {
+                        mapnik::sql_utils::quote_attr(s, itr->get_name());
+                        ctx->push(itr->get_name());
+                    }
+                }
+            }
+            else
+            {
+                for (; itr != end; ++itr)
+                {
+                    mapnik::sql_utils::quote_attr(s, itr->get_name());
+                    ctx->push(itr->get_name());
+                }
+            }
+
+            box2d<double> box(pt.x - tol, pt.y - tol, pt.x + tol, pt.y + tol);
+            std::string table_with_bbox = populate_tokens(table_, FMAX, box, 0, 0);
+
+            s << " FROM " << table_with_bbox;
+
+            if (row_limit_ > 0)
+            {
+                s << " LIMIT " << row_limit_;
+            }
+
+            std::shared_ptr<IResultSet> rs = get_resultset(conn, s.str(), pool);
+            return std::make_shared<pgraster_featureset>(rs, ctx, desc_.get_encoding(), !key_field_.empty());
+        }
+    }
+
+    return featureset_ptr();
+}
+
+box2d<double> pgraster_datasource::envelope() const
+{
+    if (extent_initialized_)
+    {
+        return extent_;
+    }
+
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
+    if (pool)
+    {
+        shared_ptr<Connection> conn = pool->borrowObject();
+        if (!conn) return extent_;
+        if (conn->isOK())
+        {
+            std::ostringstream s;
+
+            std::string col = mapnik::sql_utils::unquote_double(geometryColumn_);
+            std::string sch = mapnik::sql_utils::unquote_double(schema_);
+            std::string tab = mapnik::sql_utils::unquote_double(raster_table_);
+
+            if ( ! overviews_.empty() )
+            {
+              // query from highest-factor overview instead
+              const pgraster_overview& o = overviews_.back();
+              sch = o.schema;
+              tab = o.table;
+              col = o.column;
+            }
+
+            if (col.empty())
+            {
+                std::ostringstream s_error;
+                s_error << "PostGIS: unable to query the layer extent of table '";
+
+                if (! sch.empty())
+                {
+                    s_error << sch << ".";
+                }
+                s_error << raster_table_ << "' because we cannot determine the raster field name."
+                        << "\nPlease provide either an 'extent' parameter to skip this query, "
+                        << "a 'raster_field' and/or 'raster_table' parameter, or add "
+                        << "standard constraints to your raster table.";
+
+                throw mapnik::datasource_exception("Pgraster Plugin: " + s_error.str());
+            }
+
+            if (estimate_extent_)
+            {
+                if (tab.empty())
+                {
+                  std::ostringstream s_error;
+                  s_error << "PostGIS: unable to query the layer extent as "
+                          << "we couldn't determine the raster table name.\n"
+                          << "Please provide either an 'extent' parameter to skip this query, "
+                          << "a 'raster_table' parameter, or do not set 'estimate_extent'";
+                  throw mapnik::datasource_exception("Pgraster Plugin: " + s_error.str());
+                }
+                s << "SELECT ST_XMin(ext),ST_YMin(ext),ST_XMax(ext),ST_YMax(ext)"
+                  << " FROM (SELECT ST_Estimated_Extent('";
+
+                if (! sch.empty())
+                {
+                    s << mapnik::sql_utils::unquote_double(sch) << "','";
+                }
+
+                s << mapnik::sql_utils::unquote_double(tab) << "','"
+                  << mapnik::sql_utils::unquote_double(col) << "') as ext) as tmp";
+            }
+            else
+            {
+                s << "SELECT ST_XMin(ext),ST_YMin(ext),ST_XMax(ext),ST_YMax(ext)"
+                  << " FROM (SELECT ST_Extent(" << quote_ident(col) << "::geometry) as ext from ";
+
+                if (extent_from_subquery_)
+                {
+                    // if a subselect limits records then calculating the extent upon the
+                    // subquery will be faster and the bounds will be more accurate
+                    s << populate_tokens(table_) << ") as tmpx";
+                }
+                else
+                {
+                    if (! sch.empty())
+                    {
+                        s << quote_ident(sch) << ".";
+                    }
+
+                    // but if the subquery does not limit records then querying the
+                    // actual table will be faster as indexes can be used
+                    s << quote_ident(tab) << ") as tmp";
+                }
+            }
+
+            shared_ptr<ResultSet> rs = conn->executeQuery(s.str());
+            if (rs->next() && ! rs->isNull(0))
+            {
+                double lox, loy, hix, hiy;
+                if (mapnik::util::string2double(rs->getValue(0), lox) &&
+                    mapnik::util::string2double(rs->getValue(1), loy) &&
+                    mapnik::util::string2double(rs->getValue(2), hix) &&
+                    mapnik::util::string2double(rs->getValue(3), hiy))
+                {
+                    extent_.init(lox, loy, hix, hiy);
+                    extent_initialized_ = true;
+                }
+                else
+                {
+                    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: Could not determine extent from query: " << s.str();
+                }
+            }
+            rs->close();
+        }
+    }
+
+    return extent_;
+}
+
+boost::optional<mapnik::datasource::geometry_t> pgraster_datasource::get_geometry_type() const
+{
+    return boost::optional<mapnik::datasource::geometry_t>();
+}
diff --git a/plugins/input/pgraster/pgraster_datasource.hpp b/plugins/input/pgraster/pgraster_datasource.hpp
new file mode 100644
index 0000000..dc012c8
--- /dev/null
+++ b/plugins/input/pgraster/pgraster_datasource.hpp
@@ -0,0 +1,146 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************
+ *
+ * Initially developed by Sandro Santilli <strk at keybit.net> for CartoDB
+ *
+ *****************************************************************************/
+
+#ifndef PGRASTER_DATASOURCE_HPP
+#define PGRASTER_DATASOURCE_HPP
+
+// mapnik
+#include <mapnik/datasource.hpp>
+#include <mapnik/params.hpp>
+#include <mapnik/query.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/coord.hpp>
+#include <mapnik/feature_layer_desc.hpp>
+#include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
+
+// boost
+#include <boost/optional.hpp>
+
+// stl
+#include <vector>
+#include <string>
+#include <memory>
+
+#include "../postgis/connection_manager.hpp"
+#include "../postgis/resultset.hpp"
+#include "../postgis/cursorresultset.hpp"
+
+using mapnik::transcoder;
+using mapnik::datasource;
+using mapnik::feature_style_context_map;
+using mapnik::processor_context_ptr;
+using mapnik::box2d;
+using mapnik::layer_descriptor;
+using mapnik::featureset_ptr;
+using mapnik::feature_ptr;
+using mapnik::query;
+using mapnik::parameters;
+using mapnik::coord2d;
+
+typedef std::shared_ptr< ConnectionManager::PoolType> CnxPool_ptr;
+
+struct pgraster_overview
+{
+  std::string schema;
+  std::string table;
+  std::string column;
+  float scale; // max absolute scale between x and y
+};
+
+
+class pgraster_datasource : public datasource
+{
+public:
+    pgraster_datasource(const parameters &params);
+    ~pgraster_datasource();
+    mapnik::datasource::datasource_t type() const;
+    static const char * name();
+    processor_context_ptr get_context(feature_style_context_map &) const;
+    featureset_ptr features_with_context(query const& q, processor_context_ptr ctx) const;
+    featureset_ptr features(query const& q) const;
+    featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const;
+    mapnik::box2d<double> envelope() const;
+    boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
+    layer_descriptor get_descriptor() const;
+
+private:
+    std::string sql_bbox(box2d<double> const& env) const;
+    std::string populate_tokens(std::string const& sql, double scale_denom, box2d<double> const& env, double pixel_width, double pixel_height) const;
+    std::string populate_tokens(std::string const& sql) const;
+    std::shared_ptr<IResultSet> get_resultset(std::shared_ptr<Connection> &conn, std::string const& sql, CnxPool_ptr const& pool, processor_context_ptr ctx= processor_context_ptr()) const;
+    static const std::string RASTER_COLUMNS;
+    static const std::string RASTER_OVERVIEWS;
+    static const std::string SPATIAL_REF_SYS;
+    static const double FMAX;
+
+    const std::string uri_;
+    const std::string username_;
+    const std::string password_;
+    // table name (schema qualified or not) or subquery
+    const std::string table_;
+    // schema name (possibly extracted from table_)
+    std::string schema_;
+    // table name (possibly extracted from table_)
+    std::string raster_table_;
+    const std::string raster_field_;
+    std::string key_field_;
+    mapnik::value_integer cursor_fetch_size_;
+    mapnik::value_integer row_limit_;
+    std::string geometryColumn_;
+    mapnik::datasource::datasource_t type_;
+    int srid_;
+    // 1-based index of band to extract from the raster
+    // 0 means fetch all bands
+    // any index also forces color interpretation off so that values
+    // arrives untouched into the resulting mapnik raster, for threatment
+    // by raster colorizer
+    int band_;
+    // Available overviews, ordered by max scale, ascending
+    std::vector<pgraster_overview> overviews_;
+    mutable bool extent_initialized_;
+    mutable mapnik::box2d<double> extent_;
+    bool prescale_rasters_;
+    bool use_overviews_;
+    bool clip_rasters_;
+    layer_descriptor desc_;
+    ConnectionCreator<Connection> creator_;
+    const std::string bbox_token_;
+    const std::string scale_denom_token_;
+    const std::string pixel_width_token_;
+    const std::string pixel_height_token_;
+    int pool_max_size_;
+    bool persist_connection_;
+    bool extent_from_subquery_;
+    bool estimate_extent_;
+    int max_async_connections_;
+    bool asynchronous_request_;
+    int intersect_min_scale_;
+    int intersect_max_scale_;
+};
+
+#endif // PGRASTER_DATASOURCE_HPP
diff --git a/plugins/input/pgraster/pgraster_featureset.cpp b/plugins/input/pgraster/pgraster_featureset.cpp
new file mode 100644
index 0000000..ee36cc4
--- /dev/null
+++ b/plugins/input/pgraster/pgraster_featureset.cpp
@@ -0,0 +1,355 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************
+ *
+ * Initially developed by Sandro Santilli <strk at keybit.net> for CartoDB
+ *
+ *****************************************************************************/
+
+#include "pgraster_featureset.hpp"
+#include "pgraster_wkb_reader.hpp"
+#include "../postgis/resultset.hpp"
+#include "../postgis/cursorresultset.hpp"
+
+// mapnik
+#include <mapnik/global.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/feature_factory.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/raster.hpp>
+#include <mapnik/image_data.hpp>
+#include <mapnik/util/conversions.hpp>
+#include <mapnik/util/trim.hpp>
+#include <mapnik/global.hpp> // for int2net
+
+// stl
+#include <sstream>
+#include <string>
+
+using mapnik::geometry_type;
+using mapnik::byte;
+using mapnik::feature_factory;
+using mapnik::context_ptr;
+
+pgraster_featureset::pgraster_featureset(std::shared_ptr<IResultSet> const& rs,
+                                       context_ptr const& ctx,
+                                       std::string const& encoding,
+                                       bool key_field, int bandno)
+    : rs_(rs),
+      ctx_(ctx),
+      tr_(new transcoder(encoding)),
+      feature_id_(1),
+      key_field_(key_field),
+      band_(bandno)
+{
+}
+
+std::string numeric2string(const char* buf);
+
+feature_ptr pgraster_featureset::next()
+{
+    while (rs_->next())
+    {
+        // new feature
+        unsigned pos = 1;
+        feature_ptr feature;
+
+        if (key_field_)
+        {
+            std::string name = rs_->getFieldName(pos);
+
+            // null feature id is not acceptable
+            if (rs_->isNull(pos))
+            {
+                MAPNIK_LOG_WARN(pgraster) << "pgraster_featureset: null value encountered for key_field: " << name;
+                continue;
+            }
+            // create feature with user driven id from attribute
+            int oid = rs_->getTypeOID(pos);
+            const char* buf = rs_->getValue(pos);
+
+            // validation happens of this type at initialization
+            mapnik::value_integer val;
+
+            if (oid == 20)
+            {
+                val = int8net(buf);
+            }
+            else if (oid == 21)
+            {
+                val = int2net(buf);
+            }
+            else
+            {
+                val = int4net(buf);
+            }
+
+            MAPNIK_LOG_WARN(pgraster) << "pgraster_featureset: feature key: " << val;
+
+            feature = feature_factory::create(ctx_, val);
+            // TODO - extend feature class to know
+            // that its id is also an attribute to avoid
+            // this duplication
+            feature->put<mapnik::value_integer>(name,val);
+            ++pos;
+        }
+        else
+        {
+            // fallback to auto-incrementing id
+            MAPNIK_LOG_WARN(pgraster) << "pgraster_featureset: feature id: " << feature_id_;
+
+            feature = feature_factory::create(ctx_, feature_id_);
+            ++feature_id_;
+        }
+
+        // null geometry is not acceptable
+        if (rs_->isNull(0))
+        {
+            MAPNIK_LOG_WARN(pgraster) << "pgraster_featureset: null value encountered for raster";
+            continue;
+        }
+
+        // parse geometry
+        int size = rs_->getFieldLength(0);
+        const uint8_t *data = (const uint8_t*)rs_->getValue(0);
+
+        mapnik::raster_ptr raster = pgraster_wkb_reader::read(data, size, band_);
+        if (!raster)
+        {
+            MAPNIK_LOG_WARN(pgraster) << "pgraster_featureset: could not parse raster wkb";
+            // TODO: throw an exception ?
+            continue;
+        }
+        MAPNIK_LOG_WARN(pgraster) << "pgraster_featureset: raster of " << raster->data_.width() << "x" << raster->data_.height() << " pixels covering extent " << raster->ext_;
+        feature->set_raster(raster);
+
+        unsigned num_attrs = ctx_->size() + 1;
+        for (; pos < num_attrs; ++pos)
+        {
+            std::string name = rs_->getFieldName(pos);
+
+            // NOTE: we intentionally do not store null here
+            // since it is equivalent to the attribute not existing
+            if (!rs_->isNull(pos))
+            {
+                const char* buf = rs_->getValue(pos);
+                const int oid = rs_->getTypeOID(pos);
+                switch (oid)
+                {
+                    case 16: //bool
+                    {
+                        feature->put(name, (buf[0] != 0));
+                        break;
+                    }
+
+                    case 23: //int4
+                    {
+                        feature->put<mapnik::value_integer>(name, int4net(buf));
+                        break;
+                    }
+
+                    case 21: //int2
+                    {
+                        feature->put<mapnik::value_integer>(name, int2net(buf));
+                        break;
+                    }
+
+                    case 20: //int8/BigInt
+                    {
+                        feature->put<mapnik::value_integer>(name, int8net(buf));
+                        break;
+                    }
+
+                    case 700: //float4
+                    {
+                        float val;
+                        float4net(val, buf);
+                        feature->put(name, static_cast<double>(val));
+                        break;
+                    }
+
+                    case 701: //float8
+                    {
+                        double val;
+                        float8net(val, buf);
+                        feature->put(name, val);
+                        break;
+                    }
+
+                    case 25:   //text
+                    case 1043: //varchar
+                    case 705:  //literal
+                    {
+                        feature->put(name, tr_->transcode(buf));
+                        break;
+                    }
+
+                    case 1042: //bpchar
+                    {
+                        std::string str = mapnik::util::trim_copy(buf);
+                        feature->put(name, tr_->transcode(str.c_str()));
+                        break;
+                    }
+
+                    case 1700: //numeric
+                    {
+                        double val;
+                        std::string str = numeric2string(buf);
+                        if (mapnik::util::string2double(str, val))
+                        {
+                            feature->put(name, val);
+                        }
+                        break;
+                    }
+
+                    default:
+                    {
+                        MAPNIK_LOG_WARN(pgraster) << "pgraster_featureset: Unknown type_oid=" << oid;
+
+                        break;
+                    }
+                }
+            }
+        }
+        return feature;
+    }
+    return feature_ptr();
+}
+
+
+pgraster_featureset::~pgraster_featureset()
+{
+    rs_->close();
+}
+
+std::string numeric2string(const char* buf)
+{
+    std::int16_t ndigits = int2net(buf);
+    std::int16_t weight  = int2net(buf+2);
+    std::int16_t sign    = int2net(buf+4);
+    std::int16_t dscale  = int2net(buf+6);
+
+    std::unique_ptr<std::int16_t[]> digits(new std::int16_t[ndigits]);
+    for (int n=0; n < ndigits ;++n)
+    {
+        digits[n] = int2net(buf+8+n*2);
+    }
+
+    std::ostringstream ss;
+
+    if (sign == 0x4000) ss << "-";
+
+    int i = std::max(weight,std::int16_t(0));
+    int d = 0;
+
+    // Each numeric "digit" is actually a value between 0000 and 9999 stored in a 16 bit field.
+    // For example, the number 1234567809990001 is stored as four digits: [1234] [5678] [999] [1].
+    // Note that the last two digits show that the leading 0's are lost when the number is split.
+    // We must be careful to re-insert these 0's when building the string.
+
+    while ( i >= 0)
+    {
+        if (i <= weight && d < ndigits)
+        {
+            // All digits after the first must be padded to make the field 4 characters long
+            if (d != 0)
+            {
+#ifdef _WINDOWS
+                int dig = digits[d];
+                if (dig < 10)
+                {
+                    ss << "000"; // 0000 - 0009
+                }
+                else if (dig < 100)
+                {
+                    ss << "00";  // 0010 - 0099
+                }
+                else
+                {
+                    ss << "0";   // 0100 - 0999;
+                }
+#else
+                switch(digits[d])
+                {
+                case 0 ... 9:
+                    ss << "000"; // 0000 - 0009
+                    break;
+                case 10 ... 99:
+                    ss << "00";  // 0010 - 0099
+                    break;
+                case 100 ... 999:
+                    ss << "0";   // 0100 - 0999
+                    break;
+                }
+#endif
+            }
+            ss << digits[d++];
+        }
+        else
+        {
+            if (d == 0)
+                ss <<  "0";
+            else
+                ss <<  "0000";
+        }
+
+        i--;
+    }
+    if (dscale > 0)
+    {
+        ss << '.';
+        // dscale counts the number of decimal digits following the point, not the numeric digits
+        while (dscale > 0)
+        {
+            int value;
+            if (i <= weight && d < ndigits)
+                value = digits[d++];
+            else
+                value = 0;
+
+            // Output up to 4 decimal digits for this value
+            if (dscale > 0) {
+                ss << (value / 1000);
+                value %= 1000;
+                dscale--;
+            }
+            if (dscale > 0) {
+                ss << (value / 100);
+                value %= 100;
+                dscale--;
+            }
+            if (dscale > 0) {
+                ss << (value / 10);
+                value %= 10;
+                dscale--;
+            }
+            if (dscale > 0) {
+                ss << value;
+                dscale--;
+            }
+
+            i--;
+        }
+    }
+    return ss.str();
+}
diff --git a/plugins/input/pgraster/pgraster_featureset.hpp b/plugins/input/pgraster/pgraster_featureset.hpp
new file mode 100644
index 0000000..d7f2001
--- /dev/null
+++ b/plugins/input/pgraster/pgraster_featureset.hpp
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************
+ *
+ * Initially developed by Sandro Santilli <strk at keybit.net> for CartoDB
+ *
+ *****************************************************************************/
+
+#ifndef PGRASTER_FEATURESET_HPP
+#define PGRASTER_FEATURESET_HPP
+
+// mapnik
+#include <mapnik/box2d.hpp>
+#include <mapnik/datasource.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/unicode.hpp>
+
+// stl
+#include <memory>
+
+using mapnik::Featureset;
+using mapnik::box2d;
+using mapnik::feature_ptr;
+using mapnik::raster_ptr;
+using mapnik::transcoder;
+using mapnik::context_ptr;
+
+class IResultSet;
+
+class pgraster_featureset : public mapnik::Featureset
+{
+public:
+    /// @param bandno band number (1-based). 0 (default) reads all bands.
+    ///               Anything else forces interpretation of colors off
+    ///               (values copied verbatim)
+    pgraster_featureset(std::shared_ptr<IResultSet> const& rs,
+                       context_ptr const& ctx,
+                       std::string const& encoding,
+                       bool key_field = false,
+                       int bandno = 0);
+    feature_ptr next();
+    ~pgraster_featureset();
+
+private:
+    std::shared_ptr<IResultSet> rs_;
+    context_ptr ctx_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
+    mapnik::value_integer feature_id_;
+    bool key_field_;
+    int band_;
+};
+
+#endif // PGRASTER_FEATURESET_HPP
diff --git a/plugins/input/pgraster/pgraster_wkb_reader.cpp b/plugins/input/pgraster/pgraster_wkb_reader.cpp
new file mode 100644
index 0000000..109438a
--- /dev/null
+++ b/plugins/input/pgraster/pgraster_wkb_reader.cpp
@@ -0,0 +1,497 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************
+ *
+ * Initially developed by Sandro Santilli <strk at keybit.net> for CartoDB
+ *
+ *****************************************************************************/
+
+#include "pgraster_wkb_reader.hpp"
+
+// mapnik
+#include <mapnik/datasource.hpp> // for datasource_exception
+#include <mapnik/global.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/raster.hpp>
+#include <mapnik/image_data.hpp>
+#include <mapnik/util/conversions.hpp>
+#include <mapnik/util/trim.hpp>
+#include <mapnik/box2d.hpp> // for box2d
+
+// boost
+#include <boost/bind.hpp>
+
+#include <cstdint>
+
+namespace {
+
+uint8_t
+read_uint8(const uint8_t** from) {
+    return *(*from)++;
+}
+
+uint16_t
+read_uint16(const uint8_t** from, uint8_t littleEndian) {
+    uint16_t ret = 0;
+
+    if (littleEndian) {
+        ret = (*from)[0] |
+                (*from)[1] << 8;
+    } else {
+        /* big endian */
+        ret = (*from)[0] << 8 |
+                (*from)[1];
+    }
+    *from += 2;
+    return ret;
+}
+
+/*
+int16_t
+read_int16(const uint8_t** from, uint8_t littleEndian) {
+    assert(NULL != from);
+
+    return read_uint16(from, littleEndian);
+}
+*/
+
+double
+read_float64(const uint8_t** from, uint8_t littleEndian) {
+
+    union {
+        double d;
+        uint64_t i;
+    } ret;
+
+    if (littleEndian) {
+        ret.i = (uint64_t) ((*from)[0] & 0xff) |
+                (uint64_t) ((*from)[1] & 0xff) << 8 |
+                (uint64_t) ((*from)[2] & 0xff) << 16 |
+                (uint64_t) ((*from)[3] & 0xff) << 24 |
+                (uint64_t) ((*from)[4] & 0xff) << 32 |
+                (uint64_t) ((*from)[5] & 0xff) << 40 |
+                (uint64_t) ((*from)[6] & 0xff) << 48 |
+                (uint64_t) ((*from)[7] & 0xff) << 56;
+    } else {
+        /* big endian */
+        ret.i = (uint64_t) ((*from)[7] & 0xff) |
+                (uint64_t) ((*from)[6] & 0xff) << 8 |
+                (uint64_t) ((*from)[5] & 0xff) << 16 |
+                (uint64_t) ((*from)[4] & 0xff) << 24 |
+                (uint64_t) ((*from)[3] & 0xff) << 32 |
+                (uint64_t) ((*from)[2] & 0xff) << 40 |
+                (uint64_t) ((*from)[1] & 0xff) << 48 |
+                (uint64_t) ((*from)[0] & 0xff) << 56;
+    }
+
+    *from += 8;
+    return ret.d;
+}
+
+uint32_t
+read_uint32(const uint8_t** from, uint8_t littleEndian) {
+    uint32_t ret = 0;
+
+    if (littleEndian) {
+        ret = (uint32_t) ((*from)[0] & 0xff) |
+                (uint32_t) ((*from)[1] & 0xff) << 8 |
+                (uint32_t) ((*from)[2] & 0xff) << 16 |
+                (uint32_t) ((*from)[3] & 0xff) << 24;
+    } else {
+        /* big endian */
+        ret = (uint32_t) ((*from)[3] & 0xff) |
+                (uint32_t) ((*from)[2] & 0xff) << 8 |
+                (uint32_t) ((*from)[1] & 0xff) << 16 |
+                (uint32_t) ((*from)[0] & 0xff) << 24;
+    }
+
+    *from += 4;
+    return ret;
+}
+
+int32_t
+read_int32(const uint8_t** from, uint8_t littleEndian) {
+
+    return read_uint32(from, littleEndian);
+}
+
+float
+read_float32(const uint8_t** from, uint8_t littleEndian) {
+
+    union {
+        float f;
+        uint32_t i;
+    } ret;
+
+    ret.i = read_uint32(from, littleEndian);
+
+    return ret.f;
+}
+
+
+typedef enum {
+    PT_1BB=0,     /* 1-bit boolean            */
+    PT_2BUI=1,    /* 2-bit unsigned integer   */
+    PT_4BUI=2,    /* 4-bit unsigned integer   */
+    PT_8BSI=3,    /* 8-bit signed integer     */
+    PT_8BUI=4,    /* 8-bit unsigned integer   */
+    PT_16BSI=5,   /* 16-bit signed integer    */
+    PT_16BUI=6,   /* 16-bit unsigned integer  */
+    PT_32BSI=7,   /* 32-bit signed integer    */
+    PT_32BUI=8,   /* 32-bit unsigned integer  */
+    PT_32BF=10,   /* 32-bit float             */
+    PT_64BF=11,   /* 64-bit float             */
+    PT_END=13
+} rt_pixtype;
+
+#define BANDTYPE_FLAGS_MASK 0xF0
+#define BANDTYPE_PIXTYPE_MASK 0x0F
+#define BANDTYPE_FLAG_OFFDB     (1<<7)
+#define BANDTYPE_FLAG_HASNODATA (1<<6)
+#define BANDTYPE_FLAG_ISNODATA  (1<<5)
+#define BANDTYPE_FLAG_RESERVED3 (1<<4)
+
+#define BANDTYPE_PIXTYPE_MASK 0x0F
+#define BANDTYPE_PIXTYPE(x) ((x)&BANDTYPE_PIXTYPE_MASK)
+#define BANDTYPE_IS_OFFDB(x) ((x)&BANDTYPE_FLAG_OFFDB)
+#define BANDTYPE_HAS_NODATA(x) ((x)&BANDTYPE_FLAG_HASNODATA)
+#define BANDTYPE_IS_NODATA(x) ((x)&BANDTYPE_FLAG_ISNODATA)
+
+}
+
+using mapnik::box2d;
+
+template<typename T>
+void read_data_band(mapnik::raster_ptr raster,
+                    uint16_t width, uint16_t height,
+                    bool hasnodata, T reader)
+{
+  mapnik::image_data_32 & image = raster->data_;
+
+  // Start with plain white (ABGR or RGBA depending on endiannes)
+  // TODO: set to transparent instead?
+  image.set(0xffffffff);
+
+  raster->premultiplied_alpha_ = true;
+
+  float* data = (float*)image.getBytes();
+  double val;
+  val = reader(); // nodata value, need to read anyway
+  if ( hasnodata ) raster->set_nodata(val);
+  for (int y=0; y<height; ++y) {
+    for (int x=0; x<width; ++x) {
+      val = reader();
+      int off = y * width + x;
+      data[off] = val;
+    }
+  }
+}
+
+void
+pgraster_wkb_reader::read_indexed(mapnik::raster_ptr raster)
+{
+  mapnik::image_data_32 & image = raster->data_;
+
+  // Start with all zeroes
+  image.set(0);
+
+  uint8_t type = read_uint8(&ptr_);
+
+  int pixtype = BANDTYPE_PIXTYPE(type);
+  int offline = BANDTYPE_IS_OFFDB(type) ? 1 : 0;
+  int hasnodata = BANDTYPE_HAS_NODATA(type) ? 1 : 0;
+
+  MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: band type:"
+        << pixtype << " offline:" << offline
+        << " hasnodata:" << hasnodata;
+
+  if ( offline ) {
+    MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: offline band "
+          " unsupported";
+    return;
+  }
+
+  MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: reading " << height_ << "x" << width_ << " pixels";
+
+  switch (pixtype) {
+    case PT_1BB:
+    case PT_2BUI:
+    case PT_4BUI:
+      // all <8BPP values are wrote in full bytes anyway
+    case PT_8BSI:
+      // mapnik does not support signed anyway
+    case PT_8BUI:
+      read_data_band(raster, width_, height_, hasnodata,
+                     boost::bind(read_uint8, &ptr_));
+      break;
+    case PT_16BSI:
+      // mapnik does not support signed anyway
+    case PT_16BUI:
+      read_data_band(raster, width_, height_, hasnodata,
+                     boost::bind(read_uint16, &ptr_, endian_));
+      break;
+    case PT_32BSI:
+      // mapnik does not support signed anyway
+    case PT_32BUI:
+      read_data_band(raster, width_, height_, hasnodata,
+                     boost::bind(read_uint32, &ptr_, endian_));
+      break;
+    case PT_32BF:
+      read_data_band(raster, width_, height_, hasnodata,
+                     boost::bind(read_float32, &ptr_, endian_));
+      break;
+    case PT_64BF:
+      read_data_band(raster, width_, height_, hasnodata,
+                     boost::bind(read_float64, &ptr_, endian_));
+      break;
+    default:
+      std::ostringstream err;
+      err << "pgraster_wkb_reader: data band type " << pixtype << " unsupported";
+      // TODO: accept policy to decide on throw-or-skip ?
+      //MAPNIK_LOG_WARN(pgraster) << err.str();
+      throw mapnik::datasource_exception(err.str());
+  }
+
+}
+
+template<typename T>
+void read_grayscale_band(mapnik::raster_ptr raster,
+                         uint16_t width, uint16_t height,
+                         bool hasnodata, T reader)
+{
+  mapnik::image_data_32 & image = raster->data_;
+
+  // Start with plain white (ABGR or RGBA depending on endiannes)
+  // TODO: set to transparent instead?
+  image.set(0xffffffff);
+
+  raster->premultiplied_alpha_ = true;
+
+  int val;
+  uint8_t * data = image.getBytes();
+  int ps = 4; // sizeof(image_data::pixel_type)
+  int off;
+  val = reader(); // nodata value, need to read anyway
+  if ( hasnodata ) raster->set_nodata(val);
+  for (int y=0; y<height; ++y) {
+    for (int x=0; x<width; ++x) {
+      val = reader();
+      off = y * width * ps + x * ps;
+      // Pixel space is RGBA
+      data[off+0] = val;
+      data[off+1] = val;
+      data[off+2] = val;
+    }
+  }
+}
+
+void
+pgraster_wkb_reader::read_grayscale(mapnik::raster_ptr raster)
+{
+  uint8_t type = read_uint8(&ptr_);
+
+  int pixtype = BANDTYPE_PIXTYPE(type);
+  int offline = BANDTYPE_IS_OFFDB(type) ? 1 : 0;
+  int hasnodata = BANDTYPE_HAS_NODATA(type) ? 1 : 0;
+
+  MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: band type:"
+        << pixtype << " offline:" << offline
+        << " hasnodata:" << hasnodata;
+
+  if ( offline ) {
+    MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: offline band "
+          " unsupported";
+    return;
+  }
+
+  switch (pixtype) {
+    case PT_1BB:
+    case PT_2BUI:
+    case PT_4BUI:
+      // all <8BPP values are wrote in full bytes anyway
+    case PT_8BSI:
+      // mapnik does not support signed anyway
+    case PT_8BUI:
+      read_grayscale_band(raster, width_, height_, hasnodata,
+                          boost::bind(read_uint8, &ptr_));
+      break;
+    case PT_16BSI:
+      // mapnik does not support signed anyway
+    case PT_16BUI:
+      read_grayscale_band(raster, width_, height_, hasnodata,
+                          boost::bind(read_uint16, &ptr_, endian_));
+      break;
+    case PT_32BSI:
+      // mapnik does not support signed anyway
+    case PT_32BUI:
+      read_grayscale_band(raster, width_, height_, hasnodata,
+                          boost::bind(read_uint32, &ptr_, endian_));
+      break;
+    default:
+      std::ostringstream err;
+      err << "pgraster_wkb_reader: grayscale band type "
+          << pixtype << " unsupported";
+      //MAPNIK_LOG_WARN(pgraster) << err.str();
+      throw mapnik::datasource_exception(err.str());
+  }
+
+}
+
+void
+pgraster_wkb_reader::read_rgba(mapnik::raster_ptr raster)
+{
+  mapnik::image_data_32 & image = raster->data_;
+
+  // Start with plain white (ABGR or RGBA depending on endiannes)
+  image.set(0xffffffff);
+  //raster->set_nodata(0xffffffff);
+
+  raster->premultiplied_alpha_ = true;
+
+  uint8_t nodataval;
+  for (int bn=0; bn<numBands_; ++bn) {
+    uint8_t type = read_uint8(&ptr_);
+
+    int pixtype = BANDTYPE_PIXTYPE(type);
+    int offline = BANDTYPE_IS_OFFDB(type) ? 1 : 0;
+    int hasnodata = BANDTYPE_HAS_NODATA(type) ? 1 : 0;
+
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: band " << bn
+          << " type:" << pixtype << " offline:" << offline
+          << " hasnodata:" << hasnodata;
+
+    if ( offline ) {
+      MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: offline band "
+            << bn << " unsupported";
+      continue;
+    }
+
+    if ( pixtype > PT_8BUI || pixtype < PT_8BSI ) {
+      MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: band " << bn
+            << " type " << type << " unsupported";
+      continue;
+    }
+
+    uint8_t tmp = read_uint8(&ptr_);
+    if ( ! bn ) nodataval = tmp;
+    else if ( tmp != nodataval ) {
+      MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: band " << bn
+            << " nodataval " << tmp << " != band 0 nodataval " << nodataval;
+    }
+
+    int ps = 4; // sizeof(image_data::pixel_type)
+    uint8_t * image_data = image.getBytes();
+    for (int y=0; y<height_; ++y) {
+      for (int x=0; x<width_; ++x) {
+        uint8_t val = read_uint8(&ptr_);
+        // y * width_ * ps is the row (ps is pixel size)
+        // x * ps is the column
+        int off = y * width_ * ps + x * ps;
+        // Pixel space is RGBA
+        image_data[off+bn] = val;
+      }
+    }
+  }
+}
+
+mapnik::raster_ptr
+pgraster_wkb_reader::get_raster() {
+
+    /* Read endianness */
+    endian_ = *ptr_;
+    ptr_ += 1;
+
+    /* Read version of protocol */
+    uint16_t version = read_uint16(&ptr_, endian_);
+    if (version != 0) {
+       MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: WKB version "
+          << version << " unsupported";
+      return mapnik::raster_ptr();
+    }
+
+    numBands_ = read_uint16(&ptr_, endian_);
+    double scaleX = read_float64(&ptr_, endian_);
+    double scaleY = read_float64(&ptr_, endian_);
+    double ipX = read_float64(&ptr_, endian_);
+    double ipY = read_float64(&ptr_, endian_);
+    double skewX = read_float64(&ptr_, endian_);
+    double skewY = read_float64(&ptr_, endian_);
+    int32_t srid = read_int32(&ptr_, endian_);
+    width_ = read_uint16(&ptr_, endian_);
+    height_ = read_uint16(&ptr_, endian_);
+
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: numBands=" << numBands_;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: scaleX=" << scaleX;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: scaleY=" << scaleY;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: ipX=" << ipX;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: ipY=" << ipY;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: skewX=" << skewX;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: skewY=" << skewY;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: srid=" << srid;
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: size="
+      << width_ << "x" << height_;
+
+    // this is for color interpretation
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: bandno=" << bandno_;
+
+    if ( skewX || skewY ) {
+      MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: raster rotation is not supported";
+      return mapnik::raster_ptr();
+    }
+
+    box2d<double> ext(ipX,ipY,ipX+(width_*scaleX),ipY+(height_*scaleY));
+    MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: Raster extent=" << ext;
+
+    mapnik::raster_ptr raster = std::make_shared<mapnik::raster>(ext, width_, height_, 1.0);
+
+    if ( bandno_ ) {
+      if ( bandno_ != 1 ) {
+        MAPNIK_LOG_WARN(pgraster) << "pgraster_wkb_reader: "
+              "reading bands other than 1st as indexed is unsupported";
+        return mapnik::raster_ptr();
+      }
+      MAPNIK_LOG_DEBUG(pgraster) << "pgraster_wkb_reader: requested band " << bandno_;
+      read_indexed(raster);
+    }
+    else {
+      switch (numBands_) {
+        case 1:
+          read_grayscale(raster);
+          break;
+        case 3:
+        case 4:
+          read_rgba(raster);
+          break;
+        default:
+          std::ostringstream err;
+          err << "pgraster_wkb_reader: raster with "
+              << numBands_
+              << " bands is not supported, specify a band number";
+          //MAPNIK_LOG_WARN(pgraster) << err.str();
+          throw mapnik::datasource_exception(err.str());
+          return mapnik::raster_ptr();
+      }
+    }
+
+    return raster;
+
+}
diff --git a/plugins/input/pgraster/pgraster_wkb_reader.hpp b/plugins/input/pgraster/pgraster_wkb_reader.hpp
new file mode 100644
index 0000000..21f163b
--- /dev/null
+++ b/plugins/input/pgraster/pgraster_wkb_reader.hpp
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************
+ *
+ * Initially developed by Sandro Santilli <strk at keybit.net> for CartoDB
+ *
+ *****************************************************************************/
+
+#ifndef PGRASTER_WKB_READER_HPP
+#define PGRASTER_WKB_READER_HPP
+
+// mapnik
+#include <mapnik/feature.hpp> // for raster_ptr
+
+enum pgraster_color_interp {
+  // Automatic color interpretation:
+  // uses grayscale for single band, rgb for 3 bands
+  // rgba for 4 bands
+  pgr_auto,
+  // Grayscale interpretation
+  pgr_grayscale,
+  pgr_indexed,
+  pgr_rgb,
+  pgr_rgba
+};
+
+class pgraster_wkb_reader
+{
+public:
+
+  pgraster_wkb_reader(const uint8_t* wkb, int size, int bnd=0)
+    : ptr_(wkb), bandno_(bnd)
+  {}
+
+  mapnik::raster_ptr get_raster();
+
+  /// @param bnd band number. If 0 (default) it'll try to read all bands
+  ///            with automatic color interpretation (rgb for 3 bands,
+  ///            rgba for 4 bands, grayscale for 1 band).
+  ///            Any other value results in pixel
+  ///            values being copied verbatim into the returned raster
+  ///            for interpretation by the caller.
+  static mapnik::raster_ptr read(const uint8_t* wkb, int size, int bnd=0)
+  {
+    pgraster_wkb_reader reader(wkb,size,bnd);
+    return reader.get_raster();
+  }
+
+private:
+  void read_indexed(mapnik::raster_ptr raster);
+  void read_grayscale(mapnik::raster_ptr raster);
+  void read_rgba(mapnik::raster_ptr raster);
+
+  //int wkbsize_;
+  //const uint8_t* wkb_;
+  //const uint8_t* wkbend_;
+  const uint8_t* ptr_;
+  uint8_t endian_;
+  int bandno_;
+  uint16_t numBands_;
+  uint16_t width_;
+  uint16_t height_;
+};
+
+
+#endif // PGRASTER_WKB_READER_HPP
diff --git a/plugins/input/postgis/asyncresultset.hpp b/plugins/input/postgis/asyncresultset.hpp
new file mode 100644
index 0000000..0db1079
--- /dev/null
+++ b/plugins/input/postgis/asyncresultset.hpp
@@ -0,0 +1,230 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+  * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef POSTGIS_ASYNCRESULTSET_HPP
+#define POSTGIS_ASYNCRESULTSET_HPP
+
+#include <mapnik/debug.hpp>
+#include <mapnik/datasource.hpp>
+
+#include "connection_manager.hpp"
+#include "resultset.hpp"
+#include <queue>
+#include <memory>
+
+class postgis_processor_context;
+using postgis_processor_context_ptr = std::shared_ptr<postgis_processor_context>;
+
+class AsyncResultSet : public IResultSet, private mapnik::noncopyable
+{
+public:
+    AsyncResultSet(postgis_processor_context_ptr const& ctx,
+                     std::shared_ptr< Pool<Connection,ConnectionCreator> > const& pool,
+                     std::shared_ptr<Connection> const& conn, std::string const& sql )
+        : ctx_(ctx),
+          pool_(pool),
+          conn_(conn),
+          sql_(sql),
+          is_closed_(false)
+    {
+    }
+
+    virtual bool use_connection() { return true; }
+
+    virtual ~AsyncResultSet()
+    {
+        close();
+    }
+
+
+    void abort()
+    {
+        if(conn_ && conn_->isPending() )
+        {
+            MAPNIK_LOG_DEBUG(postgis) << "AsyncResultSet: aborting pending connection - " << conn_.get();
+            // there is no easy way to abort a pending connection, so we close it : this will ensure that
+            // the connection will be recycled in the pool
+            conn_->close();
+        }
+    }
+
+    virtual void close()
+    {
+        if (!is_closed_)
+        {
+            rs_.reset();
+            is_closed_ = true;
+            if (conn_)
+            {
+                if(conn_->isPending())
+                {
+                    abort();
+                }
+                conn_.reset();
+            }
+        }
+    }
+
+    virtual int getNumFields() const
+    {
+        return rs_->getNumFields();
+    }
+
+    virtual bool next()
+    {
+        bool next_res = false;
+        if (!rs_)
+        {
+            // Ensure connection is valid
+            if (conn_ && conn_->isOK())
+            {
+                rs_ = conn_->getAsyncResult();
+            }
+            else
+            {
+                throw mapnik::datasource_exception("invalid connection in AsyncResultSet::next");
+            }
+        }
+
+        next_res = rs_->next();
+        if (!next_res)
+        {
+            rs_.reset();
+            rs_ = conn_->getNextAsyncResult();
+            if (rs_ && rs_->next())
+            {
+                return true;
+            }
+            close();
+            prepare_next();
+        }
+        return next_res;
+    }
+
+    virtual const char* getFieldName(int index) const
+    {
+        return rs_->getFieldName(index);
+    }
+
+    virtual int getFieldLength(int index) const
+    {
+        return rs_->getFieldLength(index);
+    }
+
+    virtual int getFieldLength(const char* name) const
+    {
+        return rs_->getFieldLength(name);
+    }
+
+    virtual int getTypeOID(int index) const
+    {
+        return rs_->getTypeOID(index);
+    }
+
+    virtual int getTypeOID(const char* name) const
+    {
+        return rs_->getTypeOID(name);
+    }
+
+    virtual bool isNull(int index) const
+    {
+        return rs_->isNull(index);
+    }
+
+    virtual const char* getValue(int index) const
+    {
+        return rs_->getValue(index);
+    }
+
+    virtual const char* getValue(const char* name) const
+    {
+        return rs_->getValue(name);
+    }
+
+private:
+    postgis_processor_context_ptr ctx_;
+    std::shared_ptr< Pool<Connection,ConnectionCreator> > pool_;
+    std::shared_ptr<Connection> conn_;
+    std::string sql_;
+    std::shared_ptr<ResultSet> rs_;
+    bool is_closed_;
+
+    void prepare()
+    {
+        conn_ = pool_->borrowObject();
+        if (conn_ && conn_->isOK())
+        {
+            conn_->executeAsyncQuery(sql_, 1);
+        }
+        else
+        {
+            throw mapnik::datasource_exception("Postgis Plugin: bad connection");
+        }
+    }
+
+    void prepare_next();
+
+};
+
+
+class postgis_processor_context : public mapnik::IProcessorContext
+{
+public:
+    postgis_processor_context()
+        : num_async_requests_(0) {}
+    ~postgis_processor_context() {}
+
+    void add_request(std::shared_ptr<AsyncResultSet> const& req)
+    {
+        q_.push(req);
+    }
+
+    std::shared_ptr<AsyncResultSet> pop_next_request()
+    {
+        std::shared_ptr<AsyncResultSet> r;
+        if (!q_.empty())
+        {
+            r = q_.front();
+            q_.pop();
+        }
+        return r;
+    }
+
+    int num_async_requests_;
+
+private:
+    using async_queue = std::queue<std::shared_ptr<AsyncResultSet> >;
+    async_queue q_;
+
+};
+
+inline void AsyncResultSet::prepare_next()
+{
+    // ensure cnx pool has unused cnx
+    std::shared_ptr<AsyncResultSet> next = ctx_->pop_next_request();
+    if (next)
+    {
+        next->prepare();
+    }
+}
+
+#endif // POSTGIS_ASYNCRESULTSET_HPP
diff --git a/plugins/input/postgis/build.py b/plugins/input/postgis/build.py
index 2d31a3d..676fbf2 100644
--- a/plugins/input/postgis/build.py
+++ b/plugins/input/postgis/build.py
@@ -21,6 +21,7 @@
 
 Import ('plugin_base')
 Import ('env')
+from copy import copy
 
 PLUGIN_NAME = 'postgis'
 
@@ -33,30 +34,33 @@ plugin_sources = Split(
   """ % locals()
 )
 
-# Link Library to Dependencies
-libraries = ['pq']
-libraries.append('boost_system%s' % env['BOOST_APPEND'])
-libraries.append(env['ICU_LIB_NAME'])
-
-if env['THREADING'] == 'multi':
-    libraries.append('boost_thread%s' % env['BOOST_APPEND'])
+cxxflags = []
+plugin_env['LIBS'] = []
 
 if env['RUNTIME_LINK'] == 'static':
-    #cmd = 'pg_config --libs'
-    #plugin_env.ParseConfig(cmd)
-    # pg_config does not seem to report correct deps of libpq
-    # so resort to hardcoding for now
-    libraries.extend(['ldap', 'pam', 'ssl', 'crypto', 'krb5'])
+    # pkg-config is more reliable than pg_config across platforms
+    cmd = 'pkg-config libpq --libs --static'
+    try:
+        plugin_env.ParseConfig(cmd)
+    except OSError, e:
+        plugin_env.Append(LIBS='pq')
+else:
+    plugin_env.Append(LIBS='pq')
+
+# Link Library to Dependencies
+libraries = copy(plugin_env['LIBS'])
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.insert(0,env['MAPNIK_NAME'])
+    libraries.append(env['ICU_LIB_NAME'])
+    libraries.append('boost_system%s' % env['BOOST_APPEND'])
+    libraries.append('boost_regex%s' % env['BOOST_APPEND'])
 
     TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/postgis/connection.hpp b/plugins/input/postgis/connection.hpp
index d8726ae..4794721 100644
--- a/plugins/input/postgis/connection.hpp
+++ b/plugins/input/postgis/connection.hpp
@@ -28,10 +28,8 @@
 #include <mapnik/datasource.hpp>
 #include <mapnik/timer.hpp>
 
-// boost
-#include <boost/make_shared.hpp>
-
 // std
+#include <memory>
 #include <sstream>
 #include <iostream>
 
@@ -46,7 +44,8 @@ class Connection
 public:
     Connection(std::string const& connection_str,boost::optional<std::string> const& password)
         : cursorId(0),
-          closed_(false)
+          closed_(false),
+          pending_(false)
     {
         std::string connect_with_pass = connection_str;
         if (password && !password->empty())
@@ -54,6 +53,7 @@ public:
             connect_with_pass += " password=" + *password;
         }
         conn_ = PQconnectdb(connect_with_pass.c_str());
+        MAPNIK_LOG_DEBUG(postgis) << "postgis_connection: postgresql connection create - " << this;
         if (PQstatus(conn_) != CONNECTION_OK)
         {
             std::string err_msg = "Postgis Plugin: ";
@@ -61,6 +61,20 @@ public:
             err_msg += "\nConnection string: '";
             err_msg += connection_str;
             err_msg += "'\n";
+            MAPNIK_LOG_DEBUG(postgis) << "postgis_connection: creation failed, closing connection - " << this;
+            close();
+            throw mapnik::datasource_exception(err_msg);
+        }
+        PGresult *result = PQexec(conn_, "SET DEFAULT_TRANSACTION_READ_ONLY = TRUE; SET CLIENT_MIN_MESSAGES = WARNING;");
+        bool ok = (result && (PQresultStatus(result) == PGRES_COMMAND_OK));
+        if ( result ) PQclear(result);
+        if ( ! ok ) {
+            std::string err_msg = "Postgis Plugin: ";
+            err_msg += status();
+            err_msg += "\nConnection string: '";
+            err_msg += connection_str;
+            err_msg += "'\n";
+            close();
             throw mapnik::datasource_exception(err_msg);
         }
     }
@@ -70,56 +84,57 @@ public:
         if (! closed_)
         {
             PQfinish(conn_);
-
-            MAPNIK_LOG_DEBUG(postgis) << "postgis_connection: postgresql connection closed - " << conn_;
-
+            MAPNIK_LOG_DEBUG(postgis) << "postgis_connection: postgresql connection closed - " << this;
             closed_ = true;
         }
     }
 
-    bool execute(std::string const& sql) const
+    bool execute(std::string const& sql)
     {
 #ifdef MAPNIK_STATS
         mapnik::progress_timer __stats__(std::clog, std::string("postgis_connection::execute ") + sql);
 #endif
 
-        PGresult *result = PQexec(conn_, sql.c_str());
+        if ( ! executeAsyncQuery(sql) ) return false;
+        PGresult *result = 0;
+        // fetch multiple times until NULL is returned,
+        // to handle multi-statement queries
+        while ( PGresult *tmp = getResult() ) {
+          if ( result ) PQclear(result);
+          result = tmp;
+        }
         bool ok = (result && (PQresultStatus(result) == PGRES_COMMAND_OK));
-        PQclear(result);
+        if ( result ) PQclear(result);
         return ok;
     }
 
-    boost::shared_ptr<ResultSet> executeQuery(std::string const& sql, int type = 0) const
+    std::shared_ptr<ResultSet> executeQuery(std::string const& sql, int type = 0)
     {
 #ifdef MAPNIK_STATS
         mapnik::progress_timer __stats__(std::clog, std::string("postgis_connection::execute_query ") + sql);
 #endif
-
         PGresult* result = 0;
-        if (type == 1)
-        {
-            result = PQexecParams(conn_,sql.c_str(), 0, 0, 0, 0, 0, 1);
-        }
-        else
-        {
-            result = PQexec(conn_, sql.c_str());
+        if ( executeAsyncQuery(sql, type) ) {
+          // fetch multiple times until NULL is returned,
+          // to handle multi-statement queries
+          while ( PGresult *tmp = getResult() ) {
+            if ( result ) PQclear(result);
+            result = tmp;
+          }
         }
 
         if (! result || (PQresultStatus(result) != PGRES_TUPLES_OK))
         {
-            std::string err_msg = status();
-            err_msg += "\nFull sql was: '";
+            std::string err_msg = "Postgis Plugin: ";
+            err_msg += status();
+            err_msg += "\nin executeQuery Full sql was: '";
             err_msg += sql;
             err_msg += "'\n";
-            if (result)
-            {
-                PQclear(result);
-            }
-
+            if ( result ) PQclear(result);
             throw mapnik::datasource_exception(err_msg);
         }
 
-        return boost::make_shared<ResultSet>(result);
+        return std::make_shared<ResultSet>(result);
     }
 
     std::string status() const
@@ -127,7 +142,8 @@ public:
         std::string status;
         if (conn_)
         {
-            status = PQerrorMessage(conn_);
+            if ( isOK() ) return PQerrorMessage(conn_);
+            else return "Bad connection";
         }
         else
         {
@@ -136,6 +152,72 @@ public:
         return status;
     }
 
+    bool executeAsyncQuery(std::string const& sql, int type = 0)
+    {
+        int result = 0;
+        if (type == 1)
+        {
+            result = PQsendQueryParams(conn_,sql.c_str(), 0, 0, 0, 0, 0, 1);
+        }
+        else
+        {
+            result = PQsendQuery(conn_, sql.c_str());
+        }
+        if (result != 1)
+        {
+            std::string err_msg = "Postgis Plugin: ";
+            err_msg += status();
+            err_msg += "\nin executeAsyncQuery Full sql was: '";
+            err_msg += sql;
+            err_msg += "'\n";
+            clearAsyncResult(PQgetResult(conn_));
+            close();
+            throw mapnik::datasource_exception(err_msg);
+        }
+        pending_ = true;
+        return result;
+    }
+
+    PGresult* getResult()
+    {
+        PGresult *result = PQgetResult(conn_);
+        return result;
+    }
+
+    std::shared_ptr<ResultSet> getNextAsyncResult()
+    {
+        PGresult *result = getResult();
+        if( result && (PQresultStatus(result) != PGRES_TUPLES_OK))
+        {
+            std::string err_msg = "Postgis Plugin: ";
+            err_msg += status();
+            err_msg += "\nin getNextAsyncResult";
+            clearAsyncResult(result);
+            // We need to guarde against losing the connection
+            // (i.e db restart) so here we invalidate the full connection
+            close();
+            throw mapnik::datasource_exception(err_msg);
+        }
+       return std::make_shared<ResultSet>(result);
+    }
+
+    std::shared_ptr<ResultSet> getAsyncResult()
+    {
+        PGresult *result = getResult();
+        if ( !result || (PQresultStatus(result) != PGRES_TUPLES_OK))
+        {
+            std::string err_msg = "Postgis Plugin: ";
+            err_msg += status();
+            err_msg += "\nin getAsyncResult";
+            clearAsyncResult(result);
+            // We need to be guarded against losing the connection
+            // (i.e db restart), we invalidate the full connection
+            close();
+            throw mapnik::datasource_exception(err_msg);
+        }
+        return std::make_shared<ResultSet>(result);
+    }
+
     std::string client_encoding() const
     {
         return PQparameterStatus(conn_, "client_encoding");
@@ -146,14 +228,17 @@ public:
         return (!closed_) && (PQstatus(conn_) != CONNECTION_BAD);
     }
 
+    bool isPending() const
+    {
+        return pending_;
+    }
+
     void close()
     {
         if (! closed_)
         {
             PQfinish(conn_);
-
-            MAPNIK_LOG_DEBUG(postgis) << "postgis_connection: datasource closed, also closing connection - " << conn_;
-
+            MAPNIK_LOG_DEBUG(postgis) << "postgis_connection: closing connection (close)- " << this;
             closed_ = true;
         }
     }
@@ -169,6 +254,18 @@ private:
     PGconn *conn_;
     int cursorId;
     bool closed_;
+    bool pending_;
+
+    void clearAsyncResult(PGresult *result)
+    {
+        // Clear all pending results
+        while(result)
+        {
+           PQclear(result);
+           result = PQgetResult(conn_);
+        }
+        pending_ = false;
+    }
 };
 
 #endif //CONNECTION_HPP
diff --git a/plugins/input/postgis/connection_manager.hpp b/plugins/input/postgis/connection_manager.hpp
index 4fbcce2..4437c1e 100644
--- a/plugins/input/postgis/connection_manager.hpp
+++ b/plugins/input/postgis/connection_manager.hpp
@@ -30,13 +30,13 @@
 #include <mapnik/utils.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include <memory>
 #include <boost/optional.hpp>
 
 // stl
 #include <string>
 #include <sstream>
+#include <memory>
 
 using mapnik::Pool;
 using mapnik::singleton;
@@ -101,10 +101,14 @@ private:
 class ConnectionManager : public singleton <ConnectionManager,CreateStatic>
 {
 
+public:
+    using PoolType = Pool<Connection,ConnectionCreator>;
+
+private:
     friend class CreateStatic<ConnectionManager>;
-    typedef Pool<Connection,ConnectionCreator> PoolType;
-    typedef std::map<std::string,boost::shared_ptr<PoolType> > ContType;
-    typedef boost::shared_ptr<Connection> HolderType;
+
+    using ContType = std::map<std::string,std::shared_ptr<PoolType> >;
+    using HolderType = std::shared_ptr<Connection>;
     ContType pools_;
 
 public:
@@ -122,20 +126,20 @@ public:
         {
             return pools_.insert(
                 std::make_pair(creator.id(),
-                               boost::make_shared<PoolType>(creator,initialSize,maxSize))).second;
+                               std::make_shared<PoolType>(creator,initialSize,maxSize))).second;
         }
         return false;
 
     }
 
-    boost::shared_ptr<PoolType> getPool(std::string const& key)
+    std::shared_ptr<PoolType> getPool(std::string const& key)
     {
         ContType::const_iterator itr=pools_.find(key);
         if (itr!=pools_.end())
         {
             return itr->second;
         }
-        static const boost::shared_ptr<PoolType> emptyPool;
+        static const std::shared_ptr<PoolType> emptyPool;
         return emptyPool;
     }
 
diff --git a/plugins/input/postgis/cursorresultset.hpp b/plugins/input/postgis/cursorresultset.hpp
index 611e394..87f4df2 100644
--- a/plugins/input/postgis/cursorresultset.hpp
+++ b/plugins/input/postgis/cursorresultset.hpp
@@ -28,56 +28,23 @@
 #include "connection.hpp"
 #include "resultset.hpp"
 
-class CursorResultSet : public IResultSet
+class CursorResultSet : public IResultSet, private mapnik::noncopyable
 {
 public:
-    CursorResultSet(boost::shared_ptr<Connection> const &conn, std::string cursorName, int fetch_count)
+    CursorResultSet(std::shared_ptr<Connection> const &conn, std::string cursorName, int fetch_count)
         : conn_(conn),
           cursorName_(cursorName),
           fetch_size_(fetch_count),
-          is_closed_(false),
-          refCount_(new int(1))
+          is_closed_(false)
     {
         getNextResultSet();
     }
 
-    CursorResultSet(const CursorResultSet& rhs)
-        : conn_(rhs.conn_),
-          cursorName_(rhs.cursorName_),
-          rs_(rhs.rs_),
-          fetch_size_(rhs.fetch_size_),
-          is_closed_(rhs.is_closed_),
-          refCount_(rhs.refCount_)
-    {
-        (*refCount_)++;
-    }
-
     virtual ~CursorResultSet()
     {
-        if (--(*refCount_)==0)
-        {
-            close();
-            delete refCount_,refCount_=0;
-        }
+        close();
     }
 
-    CursorResultSet& operator=(const CursorResultSet& rhs)
-    {
-        if (this==&rhs) return *this;
-        if (--(refCount_)==0)
-        {
-            close();
-            delete refCount_,refCount_=0;
-        }
-        conn_=rhs.conn_;
-        cursorName_=rhs.cursorName_;
-        rs_=rhs.rs_;
-        refCount_=rhs.refCount_;
-        fetch_size_=rhs.fetch_size_;
-        is_closed_ = false;
-        (*refCount_)++;
-        return *this;
-    }
 
     virtual void close()
     {
@@ -92,6 +59,7 @@ public:
 
             conn_->execute(s.str());
             is_closed_ = true;
+            conn_.reset();
         }
     }
 
@@ -105,6 +73,7 @@ public:
         if (rs_->next()) {
             return true;
         } else if (rs_->size() == 0) {
+            close();
             return false;
         } else {
             getNextResultSet();
@@ -166,12 +135,13 @@ private:
         MAPNIK_LOG_DEBUG(postgis) << "postgis_cursor_resultset: FETCH result (" << cursorName_ << "): " << rs_->size() << " rows";
     }
 
-    boost::shared_ptr<Connection> conn_;
+    std::shared_ptr<Connection> conn_;
     std::string cursorName_;
-    boost::shared_ptr<ResultSet> rs_;
+    std::shared_ptr<ResultSet> rs_;
     int fetch_size_;
     bool is_closed_;
-    int *refCount_;
+
+
 };
 
 #endif // POSTGIS_CURSORRESULTSET_HPP
diff --git a/plugins/input/postgis/postgis_datasource.cpp b/plugins/input/postgis/postgis_datasource.cpp
index 586a344..95cb808 100644
--- a/plugins/input/postgis/postgis_datasource.cpp
+++ b/plugins/input/postgis/postgis_datasource.cpp
@@ -23,6 +23,8 @@
 #include "connection_manager.hpp"
 #include "postgis_datasource.hpp"
 #include "postgis_featureset.hpp"
+#include "asyncresultset.hpp"
+
 
 // mapnik
 #include <mapnik/debug.hpp>
@@ -34,12 +36,16 @@
 #include <mapnik/value_types.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
 #include <boost/tokenizer.hpp>
-#include <boost/format.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/regex.hpp>
+#pragma GCC diagnostic pop
 
 // stl
+#include <memory>
 #include <string>
 #include <algorithm>
 #include <set>
@@ -48,11 +54,11 @@
 
 DATASOURCE_PLUGIN(postgis_datasource)
 
-const double postgis_datasource::FMAX = std::numeric_limits<double>::max();
+const double postgis_datasource::FMAX = std::numeric_limits<float>::max();
 const std::string postgis_datasource::GEOMETRY_COLUMNS = "geometry_columns";
 const std::string postgis_datasource::SPATIAL_REF_SYS = "spatial_ref_system";
 
-using boost::shared_ptr;
+using std::shared_ptr;
 using mapnik::attribute_descriptor;
 
 postgis_datasource::postgis_datasource(parameters const& params)
@@ -63,27 +69,32 @@ postgis_datasource::postgis_datasource(parameters const& params)
       geometry_field_(*params.get<std::string>("geometry_field", "")),
       key_field_(*params.get<std::string>("key_field", "")),
       cursor_fetch_size_(*params.get<mapnik::value_integer>("cursor_size", 0)),
-      row_limit_(*params.get<int>("row_limit", 0)),
+      row_limit_(*params.get<mapnik::value_integer>("row_limit", 0)),
       type_(datasource::Vector),
-      srid_(*params.get<int>("srid", 0)),
+      srid_(*params.get<mapnik::value_integer>("srid", 0)),
       extent_initialized_(false),
       simplify_geometries_(false),
-    desc_(*params.get<std::string>("type"), "utf-8"),
-    creator_(params.get<std::string>("host"),
+      desc_(postgis_datasource::name(), "utf-8"),
+      creator_(params.get<std::string>("host"),
              params.get<std::string>("port"),
              params.get<std::string>("dbname"),
              params.get<std::string>("user"),
              params.get<std::string>("password"),
              params.get<std::string>("connect_timeout", "4")),
-    bbox_token_("!bbox!"),
-    scale_denom_token_("!scale_denominator!"),
-    pixel_width_token_("!pixel_width!"),
-    pixel_height_token_("!pixel_height!"),
-    persist_connection_(*params.get<mapnik::boolean>("persist_connection", true)),
-    extent_from_subquery_(*params.get<mapnik::boolean>("extent_from_subquery", false)),
-// params below are for testing purposes only (will likely be removed at any time)
-    intersect_min_scale_(*params.get<int>("intersect_min_scale", 0)),
-    intersect_max_scale_(*params.get<int>("intersect_max_scale", 0))
+      bbox_token_("!bbox!"),
+      scale_denom_token_("!scale_denominator!"),
+      pixel_width_token_("!pixel_width!"),
+      pixel_height_token_("!pixel_height!"),
+      pool_max_size_(*params_.get<mapnik::value_integer>("max_size", 10)),
+      persist_connection_(*params.get<mapnik::boolean_type>("persist_connection", true)),
+      extent_from_subquery_(*params.get<mapnik::boolean_type>("extent_from_subquery", false)),
+      max_async_connections_(*params_.get<mapnik::value_integer>("max_async_connection", 1)),
+      asynchronous_request_(false),
+      // TODO - use for known tokens too: "(@\\w+|!\\w+!)"
+      pattern_(boost::regex("(@\\w+)",boost::regex::normal | boost::regbase::icase)),
+      // params below are for testing purposes only and may be removed at any time
+      intersect_min_scale_(*params.get<mapnik::value_integer>("intersect_min_scale", 0)),
+      intersect_max_scale_(*params.get<mapnik::value_integer>("intersect_max_scale", 0))
 {
 #ifdef MAPNIK_STATS
     mapnik::progress_timer __stats__(std::clog, "postgis_datasource::init");
@@ -99,16 +110,29 @@ postgis_datasource::postgis_datasource(parameters const& params)
         extent_initialized_ = extent_.from_string(*ext);
     }
 
-    boost::optional<int> initial_size = params.get<int>("initial_size", 1);
-    boost::optional<int> max_size = params.get<int>("max_size", 10);
-    boost::optional<mapnik::boolean> autodetect_key_field = params.get<mapnik::boolean>("autodetect_key_field", false);
-    boost::optional<mapnik::boolean> estimate_extent = params.get<mapnik::boolean>("estimate_extent", false);
+    // NOTE: In multithread environment, pool_max_size_ should be
+    // max_async_connections_ * num_threads
+    if(max_async_connections_ > 1)
+    {
+        if(max_async_connections_ > pool_max_size_)
+        {
+            std::ostringstream err;
+            err << "PostGIS Plugin: Error: 'max_async_connections ("
+                << max_async_connections_ << ") must be <= max_size(" << pool_max_size_ << ")";
+            throw mapnik::datasource_exception(err.str());
+        }
+        asynchronous_request_ = true;
+    }
+
+    boost::optional<mapnik::value_integer> initial_size = params.get<mapnik::value_integer>("initial_size", 1);
+    boost::optional<mapnik::boolean_type> autodetect_key_field = params.get<mapnik::boolean_type>("autodetect_key_field", false);
+    boost::optional<mapnik::boolean_type> estimate_extent = params.get<mapnik::boolean_type>("estimate_extent", false);
     estimate_extent_ = estimate_extent && *estimate_extent;
-    boost::optional<mapnik::boolean> simplify_opt = params.get<mapnik::boolean>("simplify_geometries", false);
+    boost::optional<mapnik::boolean_type> simplify_opt = params.get<mapnik::boolean_type>("simplify_geometries", false);
     simplify_geometries_ = simplify_opt && *simplify_opt;
 
-    ConnectionManager::instance().registerPool(creator_, *initial_size, *max_size);
-    shared_ptr< Pool<Connection,ConnectionCreator> > pool = ConnectionManager::instance().getPool(creator_.id());
+    ConnectionManager::instance().registerPool(creator_, *initial_size, pool_max_size_);
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
     if (pool)
     {
         shared_ptr<Connection> conn = pool->borrowObject();
@@ -174,7 +198,7 @@ postgis_datasource::postgis_datasource(parameters const& params)
                         if (srid_ == 0)
                         {
                             const char* srid_c = rs->getValue("srid");
-                            if (srid_c != NULL)
+                            if (srid_c != nullptr)
                             {
                                 int result = 0;
                                 const char * end = srid_c + std::strlen(srid_c);
@@ -206,7 +230,7 @@ postgis_datasource::postgis_datasource(parameters const& params)
                     if (rs->next())
                     {
                         const char* srid_c = rs->getValue("srid");
-                        if (srid_c != NULL)
+                        if (srid_c != nullptr)
                         {
                             int result = 0;
                             const char * end = srid_c + std::strlen(srid_c);
@@ -414,6 +438,10 @@ postgis_datasource::postgis_datasource(parameters const& params)
             rs->close();
 
         }
+
+        // Close explicitly the connection so we can 'fork()' without sharing open connections
+        conn->close();
+
     }
 }
 
@@ -421,13 +449,22 @@ postgis_datasource::~postgis_datasource()
 {
     if (! persist_connection_)
     {
-        shared_ptr< Pool<Connection,ConnectionCreator> > pool = ConnectionManager::instance().getPool(creator_.id());
+        CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
         if (pool)
         {
-            shared_ptr<Connection> conn = pool->borrowObject();
-            if (conn)
-            {
-                conn->close();
+            try {
+              shared_ptr<Connection> conn = pool->borrowObject();
+              if (conn)
+              {
+                  conn->close();
+              }
+            } catch (mapnik::datasource_exception const& ex) {
+              // happens when borrowObject tries to
+              // create a new connection and fails.
+              // In turn, new connection would be needed
+              // when our broke and was thus no good to
+              // be borrowed
+              // See https://github.com/mapnik/mapnik/issues/2191
             }
         }
     }
@@ -490,22 +527,34 @@ std::string postgis_datasource::populate_tokens(std::string const& sql) const
 
     if (boost::algorithm::icontains(sql, pixel_width_token_))
     {
-        std::ostringstream ss;
-        ss << 0;
-        boost::algorithm::replace_all(populated_sql, pixel_width_token_, ss.str());
+        boost::algorithm::replace_all(populated_sql, pixel_width_token_, "0");
     }
 
     if (boost::algorithm::icontains(sql, pixel_height_token_))
     {
-        std::ostringstream ss;
-        ss << 0;
-        boost::algorithm::replace_all(populated_sql, pixel_height_token_, ss.str());
+        boost::algorithm::replace_all(populated_sql, pixel_height_token_, "0");
     }
 
+    std::string copy2 = populated_sql;
+    std::list<std::string> l;
+    boost::regex_split(std::back_inserter(l), copy2, pattern_);
+    if (!l.empty())
+    {
+        for (auto const & token: l)
+        {
+            boost::algorithm::replace_all(populated_sql, token, "null");
+        }
+    }
     return populated_sql;
 }
 
-std::string postgis_datasource::populate_tokens(std::string const& sql, double scale_denom, box2d<double> const& env, double pixel_width, double pixel_height) const
+std::string postgis_datasource::populate_tokens(
+                                std::string const& sql,
+                                double scale_denom,
+                                box2d<double> const& env,
+                                double pixel_width,
+                                double pixel_height,
+                                mapnik::attributes const& vars) const
 {
     std::string populated_sql = sql;
     std::string box = sql_bbox(env);
@@ -534,7 +583,6 @@ std::string postgis_datasource::populate_tokens(std::string const& sql, double s
     if (boost::algorithm::icontains(populated_sql, bbox_token_))
     {
         boost::algorithm::replace_all(populated_sql, bbox_token_, box);
-        return populated_sql;
     }
     else
     {
@@ -552,162 +600,246 @@ std::string postgis_datasource::populate_tokens(std::string const& sql, double s
         {
             s << " WHERE \"" << geometryColumn_ << "\" && " << box;
         }
-
-        return populated_sql + s.str();
+        populated_sql += s.str();
+    }
+    std::string copy2 = populated_sql;
+    std::list<std::string> l;
+    boost::regex_split(std::back_inserter(l), copy2, pattern_);
+    if (!l.empty())
+    {
+        for (auto const & token: l)
+        {
+            auto itr = vars.find(token.substr(1,std::string::npos));
+            if (itr != vars.end())
+            {
+                boost::algorithm::replace_all(populated_sql, token, itr->second.to_string());
+            }
+            else
+            {
+                boost::algorithm::replace_all(populated_sql, token, "null");
+            }
+        }
     }
+    return populated_sql;
 }
 
 
-boost::shared_ptr<IResultSet> postgis_datasource::get_resultset(boost::shared_ptr<Connection> const &conn, std::string const& sql) const
+std::shared_ptr<IResultSet> postgis_datasource::get_resultset(std::shared_ptr<Connection> &conn, std::string const& sql, CnxPool_ptr const& pool, processor_context_ptr ctx) const
 {
-    if (cursor_fetch_size_ > 0)
+
+    if (!ctx)
     {
-        // cursor
-        std::ostringstream csql;
-        std::string cursor_name = conn->new_cursor_name();
+        // ! asynchronous_request_
+        if (cursor_fetch_size_ > 0)
+        {
+            // cursor
+            std::ostringstream csql;
+            std::string cursor_name = conn->new_cursor_name();
+
+            csql << "DECLARE " << cursor_name << " BINARY INSENSITIVE NO SCROLL CURSOR WITH HOLD FOR " << sql << " FOR READ ONLY";
+
+            if (! conn->execute(csql.str()))
+            {
+                // TODO - better error
+                throw mapnik::datasource_exception("Postgis Plugin: error creating cursor for data select." );
+            }
 
-        csql << "DECLARE " << cursor_name << " BINARY INSENSITIVE NO SCROLL CURSOR WITH HOLD FOR " << sql << " FOR READ ONLY";
+            return std::make_shared<CursorResultSet>(conn, cursor_name, cursor_fetch_size_);
 
-        if (! conn->execute(csql.str()))
+        }
+        else
         {
-            // TODO - better error
-            throw mapnik::datasource_exception("Postgis Plugin: error creating cursor for data select." );
+            // no cursor
+            return conn->executeQuery(sql, 1);
         }
+    }
+    else
+    {   // asynchronous requests
 
-        return boost::make_shared<CursorResultSet>(conn, cursor_name, cursor_fetch_size_);
+        std::shared_ptr<postgis_processor_context> pgis_ctxt = std::static_pointer_cast<postgis_processor_context>(ctx);
+        if (conn)
+        {
+            // lauch async req & create asyncresult with conn
+            conn->executeAsyncQuery(sql, 1);
+            return std::make_shared<AsyncResultSet>(pgis_ctxt, pool, conn, sql);
+        }
+        else
+        {
+            // create asyncresult  with  null connection
+            std::shared_ptr<AsyncResultSet> res = std::make_shared<AsyncResultSet>(pgis_ctxt, pool,  conn, sql);
+            pgis_ctxt->add_request(res);
+            return res;
+        }
+    }
+}
+
+processor_context_ptr postgis_datasource::get_context(feature_style_context_map & ctx) const
+{
+    if (!asynchronous_request_)
+    {
+        return processor_context_ptr();
+    }
 
+    std::string ds_name(name());
+    feature_style_context_map::const_iterator itr = ctx.find(ds_name);
+    if (itr != ctx.end())
+    {
+        return itr->second;
     }
     else
     {
-        // no cursor
-        return conn->executeQuery(sql, 1);
+        return ctx.emplace(ds_name,std::make_shared<postgis_processor_context>()).first->second;
     }
 }
 
-featureset_ptr postgis_datasource::features(const query& q) const
+featureset_ptr postgis_datasource::features(query const& q) const
 {
+    // if the driver is in asynchronous mode, return the appropriate fetaures
+    if (asynchronous_request_ )
+    {
+        return features_with_context(q,std::make_shared<postgis_processor_context>());
+    }
+    else
+    {
+        return features_with_context(q,processor_context_ptr());
+    }
+}
+
+featureset_ptr postgis_datasource::features_with_context(query const& q,processor_context_ptr proc_ctx) const
+{
+
 #ifdef MAPNIK_STATS
-    mapnik::progress_timer __stats__(std::clog, "postgis_datasource::features");
+    mapnik::progress_timer __stats__(std::clog, "postgis_datasource::features_with_context");
 #endif
 
+
     box2d<double> const& box = q.get_bbox();
     double scale_denom = q.scale_denominator();
 
-    shared_ptr< Pool<Connection,ConnectionCreator> > pool = ConnectionManager::instance().getPool(creator_.id());
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
+
     if (pool)
     {
-        shared_ptr<Connection> conn = pool->borrowObject();
-        if (conn && conn->isOK())
+        shared_ptr<Connection> conn;
+
+        if ( asynchronous_request_ )
         {
-            if (geometryColumn_.empty())
+            // limit use to num_async_request_ => if reached don't borrow the last connexion object
+            std::shared_ptr<postgis_processor_context> pgis_ctxt = std::static_pointer_cast<postgis_processor_context>(proc_ctx);
+            if ( pgis_ctxt->num_async_requests_ < max_async_connections_ )
             {
-                std::ostringstream s_error;
-                s_error << "PostGIS: geometry name lookup failed for table '";
+                conn = pool->borrowObject();
+                pgis_ctxt->num_async_requests_++;
+            }
+        }
+        else
+        {
+            // Always get a connection in synchronous mode
+            conn = pool->borrowObject();
+            if(!conn )
+            {
+                throw mapnik::datasource_exception("Postgis Plugin: Null connection");
+            }
+        }
 
-                if (! schema_.empty())
-                {
-                    s_error << schema_ << ".";
-                }
-                s_error << geometry_table_
-                        << "'. Please manually provide the 'geometry_field' parameter or add an entry "
-                        << "in the geometry_columns for '";
 
-                if (! schema_.empty())
-                {
-                    s_error << schema_ << ".";
-                }
-                s_error << geometry_table_ << "'.";
+        if (geometryColumn_.empty())
+        {
+            std::ostringstream s_error;
+            s_error << "PostGIS: geometry name lookup failed for table '";
 
-                throw mapnik::datasource_exception(s_error.str());
+            if (! schema_.empty())
+            {
+                s_error << schema_ << ".";
             }
+            s_error << geometry_table_
+                    << "'. Please manually provide the 'geometry_field' parameter or add an entry "
+                    << "in the geometry_columns for '";
 
-            std::ostringstream s;
+            if (! schema_.empty())
+            {
+                s_error << schema_ << ".";
+            }
+            s_error << geometry_table_ << "'.";
 
-            const double px_gw = 1.0 / boost::get<0>(q.resolution());
-            const double px_gh = 1.0 / boost::get<1>(q.resolution());
+            throw mapnik::datasource_exception(s_error.str());
+        }
 
-            s << "SELECT ST_AsBinary(";
+        std::ostringstream s;
 
-            if (simplify_geometries_) {
-                s << "ST_Simplify(";
-            }
+        const double px_gw = 1.0 / std::get<0>(q.resolution());
+        const double px_gh = 1.0 / std::get<1>(q.resolution());
 
-            s << "\"" << geometryColumn_ << "\"";
+        s << "SELECT ST_AsBinary(";
 
-            if (simplify_geometries_) {
-                // 1/20 of pixel seems to be a good compromise to avoid
-                // drop of collapsed polygons.
-                // See https://github.com/mapnik/mapnik/issues/1639
-                const double tolerance = std::min(px_gw, px_gh) / 20.0;
-                s << ", " << tolerance << ")";
-            }
+        if (simplify_geometries_) {
+          s << "ST_Simplify(";
+        }
 
-            s << ") AS geom";
+        s << "\"" << geometryColumn_ << "\"";
 
-            mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
-            std::set<std::string> const& props = q.property_names();
-            std::set<std::string>::const_iterator pos = props.begin();
-            std::set<std::string>::const_iterator end = props.end();
+        if (simplify_geometries_) {
+          // 1/20 of pixel seems to be a good compromise to avoid
+          // drop of collapsed polygons.
+          // See https://github.com/mapnik/mapnik/issues/1639
+          const double tolerance = std::min(px_gw, px_gh) / 20.0;
+          s << ", " << tolerance << ")";
+        }
 
-            if (! key_field_.empty())
-            {
-                mapnik::sql_utils::quote_attr(s, key_field_);
-                ctx->push(key_field_);
+        s << ") AS geom";
 
-                for (; pos != end; ++pos)
-                {
-                    if (*pos != key_field_)
-                    {
-                        mapnik::sql_utils::quote_attr(s, *pos);
-                        ctx->push(*pos);
-                    }
-                }
-            }
-            else
+        mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
+        std::set<std::string> const& props = q.property_names();
+        std::set<std::string>::const_iterator pos = props.begin();
+        std::set<std::string>::const_iterator end = props.end();
+
+        if (! key_field_.empty())
+        {
+            mapnik::sql_utils::quote_attr(s, key_field_);
+            ctx->push(key_field_);
+
+            for (; pos != end; ++pos)
             {
-                for (; pos != end; ++pos)
+                if (*pos != key_field_)
                 {
                     mapnik::sql_utils::quote_attr(s, *pos);
                     ctx->push(*pos);
                 }
             }
-
-            std::string table_with_bbox = populate_tokens(table_, scale_denom, box, px_gw, px_gh);
-
-            s << " FROM " << table_with_bbox;
-
-            if (row_limit_ > 0)
-            {
-                s << " LIMIT " << row_limit_;
-            }
-
-            boost::shared_ptr<IResultSet> rs = get_resultset(conn, s.str());
-            return boost::make_shared<postgis_featureset>(rs, ctx, desc_.get_encoding(), !key_field_.empty());
         }
         else
         {
-            std::string err_msg = "Postgis Plugin:";
-            if (conn)
-            {
-                err_msg += conn->status();
-            }
-            else
+            for (; pos != end; ++pos)
             {
-                err_msg += " Null connection";
+                mapnik::sql_utils::quote_attr(s, *pos);
+                ctx->push(*pos);
             }
-            throw mapnik::datasource_exception(err_msg);
         }
+
+        std::string table_with_bbox = populate_tokens(table_, scale_denom, box, px_gw, px_gh, q.variables());
+
+        s << " FROM " << table_with_bbox;
+
+        if (row_limit_ > 0)
+        {
+            s << " LIMIT " << row_limit_;
+        }
+
+        std::shared_ptr<IResultSet> rs = get_resultset(conn, s.str(), pool, proc_ctx);
+        return std::make_shared<postgis_featureset>(rs, ctx, desc_.get_encoding(), !key_field_.empty());
+
     }
 
     return featureset_ptr();
 }
 
+
 featureset_ptr postgis_datasource::features_at_point(coord2d const& pt, double tol) const
 {
 #ifdef MAPNIK_STATS
     mapnik::progress_timer __stats__(std::clog, "postgis_datasource::features_at_point");
 #endif
-    shared_ptr< Pool<Connection,ConnectionCreator> > pool = ConnectionManager::instance().getPool(creator_.id());
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
     if (pool)
     {
         shared_ptr<Connection> conn = pool->borrowObject();
@@ -740,7 +872,7 @@ featureset_ptr postgis_datasource::features_at_point(coord2d const& pt, double t
             std::ostringstream s;
             s << "SELECT ST_AsBinary(\"" << geometryColumn_ << "\") AS geom";
 
-            mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+            mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
             std::vector<attribute_descriptor>::const_iterator itr = desc_.get_descriptors().begin();
             std::vector<attribute_descriptor>::const_iterator end = desc_.get_descriptors().end();
 
@@ -767,7 +899,7 @@ featureset_ptr postgis_datasource::features_at_point(coord2d const& pt, double t
             }
 
             box2d<double> box(pt.x - tol, pt.y - tol, pt.x + tol, pt.y + tol);
-            std::string table_with_bbox = populate_tokens(table_, FMAX, box, 0, 0);
+            std::string table_with_bbox = populate_tokens(table_, FMAX, box, 0, 0, mapnik::attributes());
 
             s << " FROM " << table_with_bbox;
 
@@ -776,8 +908,8 @@ featureset_ptr postgis_datasource::features_at_point(coord2d const& pt, double t
                 s << " LIMIT " << row_limit_;
             }
 
-            boost::shared_ptr<IResultSet> rs = get_resultset(conn, s.str());
-            return boost::make_shared<postgis_featureset>(rs, ctx, desc_.get_encoding(), !key_field_.empty());
+            std::shared_ptr<IResultSet> rs = get_resultset(conn, s.str(), pool);
+            return std::make_shared<postgis_featureset>(rs, ctx, desc_.get_encoding(), !key_field_.empty());
         }
     }
 
@@ -791,7 +923,7 @@ box2d<double> postgis_datasource::envelope() const
         return extent_;
     }
 
-    shared_ptr< Pool<Connection,ConnectionCreator> > pool = ConnectionManager::instance().getPool(creator_.id());
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
     if (pool)
     {
         shared_ptr<Connection> conn = pool->borrowObject();
@@ -882,7 +1014,7 @@ boost::optional<mapnik::datasource::geometry_t> postgis_datasource::get_geometry
 {
     boost::optional<mapnik::datasource::geometry_t> result;
 
-    shared_ptr< Pool<Connection,ConnectionCreator> > pool = ConnectionManager::instance().getPool(creator_.id());
+    CnxPool_ptr pool = ConnectionManager::instance().getPool(creator_.id());
     if (pool)
     {
         shared_ptr<Connection> conn = pool->borrowObject();
@@ -930,8 +1062,7 @@ boost::optional<mapnik::datasource::geometry_t> postgis_datasource::get_geometry
                     }
                     else // geometry
                     {
-                        result.reset(mapnik::datasource::Collection);
-                        return result;
+                        g_type = "";
                     }
                 }
             }
diff --git a/plugins/input/postgis/postgis_datasource.hpp b/plugins/input/postgis/postgis_datasource.hpp
index d0f5a2b..ebe87d7 100644
--- a/plugins/input/postgis/postgis_datasource.hpp
+++ b/plugins/input/postgis/postgis_datasource.hpp
@@ -33,13 +33,14 @@
 #include <mapnik/feature_layer_desc.hpp>
 #include <mapnik/unicode.hpp>
 #include <mapnik/value_types.hpp>
+#include <mapnik/attribute.hpp>
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <boost/regex.hpp>
 
 // stl
+#include <memory>
 #include <vector>
 #include <string>
 
@@ -49,6 +50,8 @@
 
 using mapnik::transcoder;
 using mapnik::datasource;
+using mapnik::feature_style_context_map;
+using mapnik::processor_context_ptr;
 using mapnik::box2d;
 using mapnik::layer_descriptor;
 using mapnik::featureset_ptr;
@@ -57,6 +60,8 @@ using mapnik::query;
 using mapnik::parameters;
 using mapnik::coord2d;
 
+using CnxPool_ptr = std::shared_ptr< ConnectionManager::PoolType>;
+
 class postgis_datasource : public datasource
 {
 public:
@@ -64,7 +69,9 @@ public:
     ~postgis_datasource();
     mapnik::datasource::datasource_t type() const;
     static const char * name();
-    featureset_ptr features(const query& q) const;
+    processor_context_ptr get_context(feature_style_context_map &) const;
+    featureset_ptr features_with_context(query const& q, processor_context_ptr ctx) const;
+    featureset_ptr features(query const& q) const;
     featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const;
     mapnik::box2d<double> envelope() const;
     boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
@@ -72,10 +79,14 @@ public:
 
 private:
     std::string sql_bbox(box2d<double> const& env) const;
-    std::string populate_tokens(std::string const& sql, double scale_denom, box2d<double> const& env, double pixel_width, double pixel_height) const;
+    std::string populate_tokens(std::string const& sql,
+                                double scale_denom,
+                                box2d<double> const& env,
+                                double pixel_width,
+                                double pixel_height,
+                                mapnik::attributes const& vars) const;
     std::string populate_tokens(std::string const& sql) const;
-    boost::shared_ptr<IResultSet> get_resultset(boost::shared_ptr<Connection> const &conn, std::string const& sql) const;
-
+    std::shared_ptr<IResultSet> get_resultset(std::shared_ptr<Connection> &conn, std::string const& sql, CnxPool_ptr const& pool, processor_context_ptr ctx= processor_context_ptr()) const;
     static const std::string GEOMETRY_COLUMNS;
     static const std::string SPATIAL_REF_SYS;
     static const double FMAX;
@@ -102,10 +113,13 @@ private:
     const std::string scale_denom_token_;
     const std::string pixel_width_token_;
     const std::string pixel_height_token_;
+    int pool_max_size_;
     bool persist_connection_;
     bool extent_from_subquery_;
     bool estimate_extent_;
-    // params below are for testing purposes only (will likely be removed at any time)
+    int max_async_connections_;
+    bool asynchronous_request_;
+    boost::regex pattern_;
     int intersect_min_scale_;
     int intersect_max_scale_;
 };
diff --git a/plugins/input/postgis/postgis_featureset.cpp b/plugins/input/postgis/postgis_featureset.cpp
index d23c8ed..8569a03 100644
--- a/plugins/input/postgis/postgis_featureset.cpp
+++ b/plugins/input/postgis/postgis_featureset.cpp
@@ -34,15 +34,11 @@
 #include <mapnik/util/conversions.hpp>
 #include <mapnik/util/trim.hpp>
 #include <mapnik/global.hpp> // for int2net
-#include <boost/scoped_array.hpp>
-
-
-// boost
-#include <boost/cstdint.hpp> // for boost::int16_t
 
 // stl
 #include <sstream>
 #include <string>
+#include <memory>
 
 using mapnik::geometry_type;
 using mapnik::byte;
@@ -50,7 +46,7 @@ using mapnik::geometry_utils;
 using mapnik::feature_factory;
 using mapnik::context_ptr;
 
-postgis_featureset::postgis_featureset(boost::shared_ptr<IResultSet> const& rs,
+postgis_featureset::postgis_featureset(std::shared_ptr<IResultSet> const& rs,
                                        context_ptr const& ctx,
                                        std::string const& encoding,
                                        bool key_field)
@@ -233,12 +229,12 @@ postgis_featureset::~postgis_featureset()
 
 std::string numeric2string(const char* buf)
 {
-    boost::int16_t ndigits = int2net(buf);
-    boost::int16_t weight  = int2net(buf+2);
-    boost::int16_t sign    = int2net(buf+4);
-    boost::int16_t dscale  = int2net(buf+6);
+    std::int16_t ndigits = int2net(buf);
+    std::int16_t weight  = int2net(buf+2);
+    std::int16_t sign    = int2net(buf+4);
+    std::int16_t dscale  = int2net(buf+6);
 
-    boost::scoped_array<boost::int16_t> digits(new boost::int16_t[ndigits]);
+    const std::unique_ptr<std::int16_t[]> digits(new std::int16_t[ndigits]);
     for (int n=0; n < ndigits ;++n)
     {
         digits[n] = int2net(buf+8+n*2);
@@ -248,7 +244,7 @@ std::string numeric2string(const char* buf)
 
     if (sign == 0x4000) ss << "-";
 
-    int i = std::max(weight,boost::int16_t(0));
+    int i = std::max(weight,std::int16_t(0));
     int d = 0;
 
     // Each numeric "digit" is actually a value between 0000 and 9999 stored in a 16 bit field.
diff --git a/plugins/input/postgis/postgis_featureset.hpp b/plugins/input/postgis/postgis_featureset.hpp
index e4ead4a..a3a2cbf 100644
--- a/plugins/input/postgis/postgis_featureset.hpp
+++ b/plugins/input/postgis/postgis_featureset.hpp
@@ -1,4 +1,3 @@
-
 /*****************************************************************************
  *
  * This file is part of Mapnik (c++ mapping toolkit)
@@ -30,9 +29,6 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/unicode.hpp>
 
-// boost
-#include <boost/scoped_ptr.hpp>
-
 using mapnik::Featureset;
 using mapnik::box2d;
 using mapnik::feature_ptr;
@@ -44,7 +40,7 @@ class IResultSet;
 class postgis_featureset : public mapnik::Featureset
 {
 public:
-    postgis_featureset(boost::shared_ptr<IResultSet> const& rs,
+    postgis_featureset(std::shared_ptr<IResultSet> const& rs,
                        context_ptr const& ctx,
                        std::string const& encoding,
                        bool key_field = false);
@@ -52,9 +48,9 @@ public:
     ~postgis_featureset();
 
 private:
-    boost::shared_ptr<IResultSet> rs_;
+    std::shared_ptr<IResultSet> rs_;
     context_ptr ctx_;
-    boost::scoped_ptr<mapnik::transcoder> tr_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
     unsigned totalGeomSize_;
     mapnik::value_integer feature_id_;
     bool key_field_;
diff --git a/plugins/input/postgis/resultset.hpp b/plugins/input/postgis/resultset.hpp
index c8734f5..600fc96 100644
--- a/plugins/input/postgis/resultset.hpp
+++ b/plugins/input/postgis/resultset.hpp
@@ -45,49 +45,16 @@ public:
     virtual const char* getValue(const char* name) const = 0;
 };
 
-class ResultSet : public IResultSet
+class ResultSet : public IResultSet, private mapnik::noncopyable
 {
 public:
     ResultSet(PGresult *res)
       : res_(res),
-        pos_(-1),
-        refCount_(new int(1))
+        pos_(-1)
     {
         numTuples_ = PQntuples(res_);
     }
 
-    ResultSet(const ResultSet& rhs)
-      : res_(rhs.res_),
-        pos_(rhs.pos_),
-        numTuples_(rhs.numTuples_),
-        refCount_(rhs.refCount_)
-    {
-        (*refCount_)++;
-    }
-
-    ResultSet& operator=(const ResultSet& rhs)
-    {
-        if (this == &rhs)
-        {
-            return *this;
-        }
-
-        if (--(refCount_) == 0)
-        {
-            close();
-
-            delete refCount_;
-            refCount_ = 0;
-        }
-
-        res_ = rhs.res_;
-        pos_ = rhs.pos_;
-        numTuples_ = rhs.numTuples_;
-        refCount_ = rhs.refCount_;
-        (*refCount_)++;
-        return *this;
-    }
-
     virtual void close()
     {
         PQclear(res_);
@@ -96,13 +63,7 @@ public:
 
     virtual ~ResultSet()
     {
-        if (--(*refCount_) == 0)
-        {
-            PQclear(res_);
-
-            delete refCount_;
-            refCount_ = 0;
-        }
+        PQclear(res_);
     }
 
     virtual int getNumFields() const
@@ -184,7 +145,6 @@ private:
     PGresult* res_;
     int pos_;
     int numTuples_;
-    int *refCount_;
 };
 
 #endif // POSTGIS_RESULTSET_HPP
diff --git a/plugins/input/python/build.py b/plugins/input/python/build.py
index bf5313e..e5d20ec 100644
--- a/plugins/input/python/build.py
+++ b/plugins/input/python/build.py
@@ -20,6 +20,7 @@
 #
 
 import os
+import copy
 Import ('plugin_base')
 Import ('env')
 
@@ -42,7 +43,7 @@ libraries.append(env['BOOST_PYTHON_LIB'])
 libraries.append(env['ICU_LIB_NAME'])
 
 python_cpppath = env['PYTHON_INCLUDES']
-allcpp_paths = env['CPPPATH']
+allcpp_paths = copy.copy(env['CPPPATH'])
 allcpp_paths.extend(python_cpppath)
 # NOTE: explicit linking to libpython is uneeded on most linux version if the
 # python plugin is used by a app in python using mapnik's python bindings
@@ -65,20 +66,16 @@ else:
     # so instead add to libraries
     libraries.append('python%s' % env['PYTHON_VERSION'])
 
-if env['CUSTOM_LDFLAGS']:
-    linkflags = '%s %s' % (env['CUSTOM_LDFLAGS'], python_link_flag)
-else:
-    linkflags = python_link_flag
+plugin_env.Append(LINKFLAGS=python_link_flag)
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.append(env['MAPNIK_NAME'])
     TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
                                       CPPPATH=allcpp_paths,
-                                      LIBS=libraries,
-                                      LINKFLAGS=linkflags)
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
@@ -94,7 +91,7 @@ plugin_obj = {
   'LIBS': libraries,
   'SOURCES': plugin_sources,
   'CPPPATH': python_cpppath,
-  'LINKFLAGS': linkflags.replace('-Z','').split(' '),
+  'LINKFLAGS': python_link_flag.replace('-Z','').split(' '),
 }
 
 Return('plugin_obj')
diff --git a/plugins/input/python/python_datasource.cpp b/plugins/input/python/python_datasource.cpp
index 45a461b..f100d67 100644
--- a/plugins/input/python/python_datasource.cpp
+++ b/plugins/input/python/python_datasource.cpp
@@ -7,11 +7,15 @@
 #include <vector>
 
 // boost
-#include <boost/foreach.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #include <boost/python.hpp>
 #include <boost/python/stl_iterator.hpp>
 #include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic pop
+
 
 #include "python_utils.hpp"
 
@@ -22,15 +26,15 @@ DATASOURCE_PLUGIN(python_datasource)
 
 python_datasource::python_datasource(parameters const& params)
   : datasource(params),
-    desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding","utf-8")),
+    desc_(python_datasource::name(), *params.get<std::string>("encoding","utf-8")),
     factory_(*params.get<std::string>("factory", ""))
 {
     // extract any remaining parameters as keyword args for the factory
-    BOOST_FOREACH(const mapnik::parameters::value_type& kv, params)
+    for (const mapnik::parameters::value_type& kv : params)
     {
         if((kv.first != "type") && (kv.first != "factory"))
         {
-            kwargs_.insert(std::make_pair(kv.first, *params.get<std::string>(kv.first)));
+            kwargs_.emplace(kv.first, *params.get<std::string>(kv.first));
         }
     }
 
@@ -72,8 +76,8 @@ python_datasource::python_datasource(parameters const& params)
         boost::python::object callable = callable_module.attr(callable_name);
         // prepare the arguments
         boost::python::dict kwargs;
-        typedef std::map<std::string, std::string>::value_type kv_type;
-        BOOST_FOREACH(const kv_type& kv, kwargs_)
+        using kv_type = std::map<std::string, std::string>::value_type;
+        for (kv_type const& kv : kwargs_)
         {
             kwargs[boost::python::str(kv.first)] = boost::python::str(kv.second);
         }
@@ -104,8 +108,6 @@ mapnik::layer_descriptor python_datasource::get_descriptor() const
 
 mapnik::datasource::datasource_t python_datasource::type() const
 {
-    typedef boost::optional<mapnik::datasource::geometry_t> return_type;
-
     try
     {
         ensure_gil lock;
@@ -163,7 +165,7 @@ mapnik::box2d<double> python_datasource::envelope() const
 
 boost::optional<mapnik::datasource::geometry_t> python_datasource::get_geometry_type() const
 {
-    typedef boost::optional<mapnik::datasource::geometry_t> return_type;
+    using return_type = boost::optional<mapnik::datasource::geometry_t>;
 
     try
     {
@@ -202,7 +204,7 @@ mapnik::featureset_ptr python_datasource::features(mapnik::query const& q) const
             {
                 return mapnik::featureset_ptr();
             }
-            return boost::make_shared<python_featureset>(features);
+            return std::make_shared<python_featureset>(features);
         }
         // otherwise return an empty featureset pointer
         return mapnik::featureset_ptr();
@@ -226,7 +228,7 @@ mapnik::featureset_ptr python_datasource::features_at_point(mapnik::coord2d cons
             return mapnik::featureset_ptr();
         }
         // otherwise, return a feature set which can iterate over the iterator
-        return boost::make_shared<python_featureset>(features);
+        return std::make_shared<python_featureset>(features);
     }
     catch ( boost::python::error_already_set )
     {
diff --git a/plugins/input/python/python_datasource.hpp b/plugins/input/python/python_datasource.hpp
index fc9941c..599f4c6 100644
--- a/plugins/input/python/python_datasource.hpp
+++ b/plugins/input/python/python_datasource.hpp
@@ -5,7 +5,12 @@
 #include <mapnik/datasource.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 class python_datasource : public mapnik::datasource
 {
diff --git a/plugins/input/python/python_featureset.cpp b/plugins/input/python/python_featureset.cpp
index f8a3edb..bbd5939 100644
--- a/plugins/input/python/python_featureset.cpp
+++ b/plugins/input/python/python_featureset.cpp
@@ -1,9 +1,9 @@
-// boost
-#include <boost/python.hpp>
-
 #include "python_featureset.hpp"
 #include "python_utils.hpp"
 
+// boost
+#include <boost/python.hpp>
+
 python_featureset::python_featureset(boost::python::object iterator)
 {
     ensure_gil lock;
diff --git a/plugins/input/python/python_featureset.hpp b/plugins/input/python/python_featureset.hpp
index 645e9f9..af024be 100644
--- a/plugins/input/python/python_featureset.hpp
+++ b/plugins/input/python/python_featureset.hpp
@@ -2,11 +2,17 @@
 #define PYTHON_FEATURESET_HPP
 
 // mapnik
+#include <mapnik/config.hpp>
 #include <mapnik/feature.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #include <boost/python.hpp>
 #include <boost/python/stl_iterator.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/datasource.hpp>
@@ -24,7 +30,7 @@ public:
     mapnik::feature_ptr next();
 
 private:
-    typedef boost::python::stl_input_iterator<mapnik::feature_ptr> feature_iter;
+    using feature_iter = boost::python::stl_input_iterator<mapnik::feature_ptr>;
 
     feature_iter begin_, end_;
 };
diff --git a/plugins/input/python/python_utils.hpp b/plugins/input/python/python_utils.hpp
index 745cc41..5ddc380 100644
--- a/plugins/input/python/python_utils.hpp
+++ b/plugins/input/python/python_utils.hpp
@@ -1,7 +1,12 @@
 #ifndef PYTHON_UTILS_HPP
 #define PYTHON_UTILS_HPP
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #include <boost/python.hpp>
+#pragma GCC diagnostic pop
 
 // Use RAII to acquire and release the GIL as needed.
 class ensure_gil
diff --git a/plugins/input/raster/build.py b/plugins/input/raster/build.py
index dd6f8d7..20f65b2 100644
--- a/plugins/input/raster/build.py
+++ b/plugins/input/raster/build.py
@@ -40,14 +40,13 @@ libraries.append(env['ICU_LIB_NAME'])
 libraries.append('boost_system%s' % env['BOOST_APPEND'])
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.append(env['MAPNIK_NAME'])
 
     TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/raster/raster_datasource.cpp b/plugins/input/raster/raster_datasource.cpp
index 5c17798..13d996e 100644
--- a/plugins/input/raster/raster_datasource.cpp
+++ b/plugins/input/raster/raster_datasource.cpp
@@ -21,12 +21,11 @@
  *****************************************************************************/
 
 // boost
-#include <boost/make_shared.hpp>
 
 // mapnik
 #include <mapnik/util/fs.hpp>
 #include <mapnik/debug.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 #include <mapnik/image_util.hpp>
 #include <mapnik/image_reader.hpp>
 #include <mapnik/boolean.hpp>
@@ -47,8 +46,8 @@ using mapnik::image_reader;
 DATASOURCE_PLUGIN(raster_datasource)
 
 raster_datasource::raster_datasource(parameters const& params)
-: datasource(params),
-    desc_(*params.get<std::string>("type"), "utf-8"),
+  : datasource(params),
+    desc_(raster_datasource::name(), "utf-8"),
     extent_initialized_(false)
 {
     MAPNIK_LOG_DEBUG(raster) << "raster_datasource: Initializing...";
@@ -62,17 +61,17 @@ raster_datasource::raster_datasource(parameters const& params)
     else
         filename_ = *file;
 
-    multi_tiles_ = *params.get<mapnik::boolean>("multi", false);
-    tile_size_ = *params.get<int>("tile_size", 256);
-    tile_stride_ = *params.get<int>("tile_stride", 1);
+    multi_tiles_ = *params.get<mapnik::boolean_type>("multi", false);
+    tile_size_ = *params.get<mapnik::value_integer>("tile_size", 256);
+    tile_stride_ = *params.get<mapnik::value_integer>("tile_stride", 1);
 
     boost::optional<std::string> format_from_filename = mapnik::type_from_filename(*file);
     format_ = *params.get<std::string>("format",format_from_filename?(*format_from_filename) : "tiff");
 
-    boost::optional<double> lox = params.get<double>("lox");
-    boost::optional<double> loy = params.get<double>("loy");
-    boost::optional<double> hix = params.get<double>("hix");
-    boost::optional<double> hiy = params.get<double>("hiy");
+    boost::optional<mapnik::value_double> lox = params.get<mapnik::value_double>("lox");
+    boost::optional<mapnik::value_double> loy = params.get<mapnik::value_double>("loy");
+    boost::optional<mapnik::value_double> hix = params.get<mapnik::value_double>("hix");
+    boost::optional<mapnik::value_double> hiy = params.get<mapnik::value_double>("hiy");
 
     boost::optional<std::string> ext = params.get<std::string>("extent");
 
@@ -93,8 +92,8 @@ raster_datasource::raster_datasource(parameters const& params)
 
     if (multi_tiles_)
     {
-        boost::optional<int> x_width = params.get<int>("x_width");
-        boost::optional<int> y_width = params.get<int>("y_width");
+        boost::optional<mapnik::value_integer> x_width = params.get<mapnik::value_integer>("x_width");
+        boost::optional<mapnik::value_integer> y_width = params.get<mapnik::value_integer>("y_width");
 
         if (! x_width)
         {
@@ -118,7 +117,7 @@ raster_datasource::raster_datasource(parameters const& params)
 
         try
         {
-            std::auto_ptr<image_reader> reader(mapnik::get_image_reader(filename_, format_));
+            std::unique_ptr<image_reader> reader(mapnik::get_image_reader(filename_, format_));
             if (reader.get())
             {
                 width_ = reader->width();
@@ -174,7 +173,7 @@ layer_descriptor raster_datasource::get_descriptor() const
 
 featureset_ptr raster_datasource::features(query const& q) const
 {
-    mapnik::CoordTransform t(width_, height_, extent_, 0, 0);
+    mapnik::view_transform t(width_, height_, extent_, 0, 0);
     mapnik::box2d<double> intersect = extent_.intersect(q.get_bbox());
     mapnik::box2d<double> ext = t.forward(intersect);
 
@@ -189,7 +188,7 @@ featureset_ptr raster_datasource::features(query const& q) const
 
         tiled_multi_file_policy policy(filename_, format_, tile_size_, extent_, q.get_bbox(), width_, height_, tile_stride_);
 
-        return boost::make_shared<raster_featureset<tiled_multi_file_policy> >(policy, extent_, q);
+        return std::make_shared<raster_featureset<tiled_multi_file_policy> >(policy, extent_, q);
     }
     else if (width * height > static_cast<int>(tile_size_ * tile_size_ << 2))
     {
@@ -197,7 +196,7 @@ featureset_ptr raster_datasource::features(query const& q) const
 
         tiled_file_policy policy(filename_, format_, tile_size_, extent_, q.get_bbox(), width_, height_);
 
-        return boost::make_shared<raster_featureset<tiled_file_policy> >(policy, extent_, q);
+        return std::make_shared<raster_featureset<tiled_file_policy> >(policy, extent_, q);
     }
     else
     {
@@ -206,7 +205,7 @@ featureset_ptr raster_datasource::features(query const& q) const
         raster_info info(filename_, format_, extent_, width_, height_);
         single_file_policy policy(info);
 
-        return boost::make_shared<raster_featureset<single_file_policy> >(policy, extent_, q);
+        return std::make_shared<raster_featureset<single_file_policy> >(policy, extent_, q);
     }
 }
 
diff --git a/plugins/input/raster/raster_datasource.hpp b/plugins/input/raster/raster_datasource.hpp
index 381a656..96bcaf1 100644
--- a/plugins/input/raster/raster_datasource.hpp
+++ b/plugins/input/raster/raster_datasource.hpp
@@ -34,7 +34,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
diff --git a/plugins/input/raster/raster_featureset.cpp b/plugins/input/raster/raster_featureset.cpp
index 729052d..b396abb 100644
--- a/plugins/input/raster/raster_featureset.cpp
+++ b/plugins/input/raster/raster_featureset.cpp
@@ -24,14 +24,18 @@
 #include <mapnik/debug.hpp>
 #include <mapnik/image_data.hpp>
 #include <mapnik/raster.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 #include <mapnik/image_reader.hpp>
 #include <mapnik/image_util.hpp>
 #include <mapnik/feature_factory.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string/replace.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/format.hpp>
+#pragma GCC diagnostic pop
 
 #include "raster_featureset.hpp"
 
@@ -48,7 +52,7 @@ raster_featureset<LookupPolicy>::raster_featureset(LookupPolicy const& policy,
                                                    query const& q)
     : policy_(policy),
       feature_id_(1),
-      ctx_(boost::make_shared<mapnik::context_type>()),
+      ctx_(std::make_shared<mapnik::context_type>()),
       extent_(extent),
       bbox_(q.get_bbox()),
       curIter_(policy_.begin()),
@@ -70,7 +74,7 @@ feature_ptr raster_featureset<LookupPolicy>::next()
 
         try
         {
-            std::auto_ptr<image_reader> reader(mapnik::get_image_reader(curIter_->file(),curIter_->format()));
+            std::unique_ptr<image_reader> reader(mapnik::get_image_reader(curIter_->file(),curIter_->format()));
 
             MAPNIK_LOG_DEBUG(raster) << "raster_featureset: Reader=" << curIter_->format() << "," << curIter_->file()
                                      << ",size(" << curIter_->width() << "," << curIter_->height() << ")";
@@ -82,7 +86,7 @@ feature_ptr raster_featureset<LookupPolicy>::next()
 
                 if (image_width > 0 && image_height > 0)
                 {
-                    mapnik::CoordTransform t(image_width, image_height, extent_, 0, 0);
+                    mapnik::view_transform t(image_width, image_height, extent_, 0, 0);
                     box2d<double> intersect = bbox_.intersect(curIter_->envelope());
                     box2d<double> ext = t.forward(intersect);
                     box2d<double> rem = policy_.transform(ext);
@@ -95,14 +99,11 @@ feature_ptr raster_featureset<LookupPolicy>::next()
                         int end_y = static_cast<int>(std::ceil(ext.maxy()));
 
                         // clip to available data
-                        if (x_off < 0)
-                            x_off = 0;
-                        if (y_off < 0)
-                            y_off = 0;
-                        if (end_x > image_width)
-                            end_x = image_width;
-                        if (end_y > image_height)
-                            end_y = image_height;
+                        if (x_off < 0) x_off = 0;
+                        if (y_off < 0) y_off = 0;
+                        if (end_x > image_width)  end_x = image_width;
+                        if (end_y > image_height) end_y = image_height;
+
                         int width = end_x - x_off;
                         int height = end_y - y_off;
 
@@ -113,7 +114,7 @@ feature_ptr raster_featureset<LookupPolicy>::next()
                                                             rem.maxy() + y_off + height);
                         intersect = t.backward(feature_raster_extent);
 
-                        mapnik::raster_ptr raster = boost::make_shared<mapnik::raster>(intersect, width, height);
+                        mapnik::raster_ptr raster = std::make_shared<mapnik::raster>(intersect, width, height, 1.0);
                         reader->read(x_off, y_off, raster->data_);
                         raster->premultiplied_alpha_ = reader->premultiplied_alpha();
                         feature->set_raster(raster);
@@ -145,6 +146,7 @@ std::string tiled_multi_file_policy::interpolate(std::string const& pattern, int
     // TODO: make from some sort of configurable interpolation
     int tms_y = tile_stride_ * ((image_height_ / tile_size_) - y - 1);
     int tms_x = tile_stride_ * x;
+    // TODO - optimize by avoiding boost::format
     std::string xs = (boost::format("%03d/%03d/%03d") % (tms_x / 1000000) % ((tms_x / 1000) % 1000) % (tms_x % 1000)).str();
     std::string ys = (boost::format("%03d/%03d/%03d") % (tms_y / 1000000) % ((tms_y / 1000) % 1000) % (tms_y % 1000)).str();
     std::string rv(pattern);
diff --git a/plugins/input/raster/raster_featureset.hpp b/plugins/input/raster/raster_featureset.hpp
index 21d707a..18e3ebc 100644
--- a/plugins/input/raster/raster_featureset.hpp
+++ b/plugins/input/raster/raster_featureset.hpp
@@ -35,7 +35,6 @@
 
 // boost
 #include <boost/utility.hpp>
-#include <boost/format.hpp>
 
 class single_file_policy
 {
@@ -122,7 +121,7 @@ class tiled_file_policy
 {
 public:
 
-    typedef std::vector<raster_info>::const_iterator const_iterator;
+    using const_iterator = std::vector<raster_info>::const_iterator;
 
     tiled_file_policy(std::string const& file,
                       std::string const& format,
@@ -200,7 +199,7 @@ class tiled_multi_file_policy
 {
 public:
 
-    typedef std::vector<raster_info>::const_iterator const_iterator;
+    using const_iterator = std::vector<raster_info>::const_iterator;
 
     tiled_multi_file_policy(std::string const& file_pattern,
                             std::string const& format,
@@ -305,7 +304,7 @@ private:
 template <typename LookupPolicy>
 class raster_featureset : public mapnik::Featureset
 {
-    typedef typename LookupPolicy::const_iterator iterator_type;
+    using iterator_type = typename LookupPolicy::const_iterator;
 
 public:
     raster_featureset(LookupPolicy const& policy,
diff --git a/plugins/input/rasterlite/build.py b/plugins/input/rasterlite/build.py
index a314012..4b46383 100644
--- a/plugins/input/rasterlite/build.py
+++ b/plugins/input/rasterlite/build.py
@@ -39,14 +39,13 @@ libraries.append(env['ICU_LIB_NAME'])
 libraries.append('boost_system%s' % env['BOOST_APPEND'])
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.append(env['MAPNIK_NAME'])
 
     TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
                                       SHLIBPREFIX='',
                                       SHLIBSUFFIX='.input',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/rasterlite/rasterlite_datasource.cpp b/plugins/input/rasterlite/rasterlite_datasource.cpp
index 7b9d678..b6e0755 100644
--- a/plugins/input/rasterlite/rasterlite_datasource.cpp
+++ b/plugins/input/rasterlite/rasterlite_datasource.cpp
@@ -24,7 +24,6 @@
 #include "rasterlite_featureset.hpp"
 
 // boost
-#include <boost/make_shared.hpp>
 
 // mapnik
 #include <mapnik/util/fs.hpp>
@@ -73,7 +72,7 @@ inline void* rasterlite_datasource::open_dataset() const
 
 rasterlite_datasource::rasterlite_datasource(parameters const& params)
     : datasource(params),
-      desc_(*params.get<std::string>("type"),"utf-8")
+      desc_(rasterlite_datasource::name(),"utf-8")
 {
     MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_datasource: Initializing...";
 
@@ -182,12 +181,11 @@ layer_descriptor rasterlite_datasource::get_descriptor() const
 featureset_ptr rasterlite_datasource::features(query const& q) const
 {
     rasterlite_query gq = q;
-    return boost::make_shared<rasterlite_featureset>(open_dataset(), gq);
+    return std::make_shared<rasterlite_featureset>(open_dataset(), gq);
 }
 
 featureset_ptr rasterlite_datasource::features_at_point(coord2d const& pt, double tol) const
 {
     rasterlite_query gq = pt;
-    return boost::make_shared<rasterlite_featureset>(open_dataset(), gq);
+    return std::make_shared<rasterlite_featureset>(open_dataset(), gq);
 }
-
diff --git a/plugins/input/rasterlite/rasterlite_datasource.hpp b/plugins/input/rasterlite/rasterlite_datasource.hpp
index f5b4658..da52577 100644
--- a/plugins/input/rasterlite/rasterlite_datasource.hpp
+++ b/plugins/input/rasterlite/rasterlite_datasource.hpp
@@ -34,7 +34,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
diff --git a/plugins/input/rasterlite/rasterlite_featureset.cpp b/plugins/input/rasterlite/rasterlite_featureset.cpp
index 7eb7a0e..3c32c69 100644
--- a/plugins/input/rasterlite/rasterlite_featureset.cpp
+++ b/plugins/input/rasterlite/rasterlite_featureset.cpp
@@ -31,9 +31,7 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/feature_factory.hpp>
 
-// boost
-#include <boost/make_shared.hpp>
-
+#include <cstring>
 
 using mapnik::coord2d;
 using mapnik::box2d;
@@ -48,7 +46,7 @@ rasterlite_featureset::rasterlite_featureset(void* dataset,
     : dataset_(dataset),
       gquery_(q),
       first_(true),
-      ctx_(boost::make_shared<mapnik::context_type>())
+      ctx_(std::make_shared<mapnik::context_type>())
 {
     rasterliteSetBackgroundColor(dataset_, 255, 0, 255);
     rasterliteSetTransparentColor(dataset_, 255, 0, 255);
@@ -66,21 +64,8 @@ feature_ptr rasterlite_featureset::next()
     if (first_)
     {
         first_ = false;
-
-        query *q = boost::get<query>(&gquery_);
-        if (q)
-        {
-            return get_feature(*q);
-        }
-        else
-        {
-            coord2d *p = boost::get<coord2d>(&gquery_);
-            if (p)
-            {
-                return get_feature_at_point(*p);
-            }
-        }
-        // should never reach here
+        MAPNIK_LOG_DEBUG(gdal) << "rasterlite_featureset: Next feature in Dataset=" << &dataset_;
+        return mapnik::util::apply_visitor(query_dispatch(*this), gquery_);
     }
     return feature_ptr();
 }
@@ -97,8 +82,8 @@ feature_ptr rasterlite_featureset::get_feature(mapnik::query const& q)
     box2d<double> raster_extent(x0, y0, x1, y1);
     box2d<double> intersect = raster_extent.intersect(q.get_bbox());
 
-    const int width = static_cast<int>(boost::get<0>(q.resolution()) * intersect.width() + 0.5);
-    const int height = static_cast<int>(boost::get<0>(q.resolution()) * intersect.height() + 0.5);
+    const int width = static_cast<int>(std::get<0>(q.resolution()) * intersect.width() + 0.5);
+    const int height = static_cast<int>(std::get<0>(q.resolution()) * intersect.height() + 0.5);
 
     const double pixel_size = (intersect.width() >= intersect.height()) ?
         (intersect.width() / (double) width) : (intersect.height() / (double) height);
@@ -106,7 +91,7 @@ feature_ptr rasterlite_featureset::get_feature(mapnik::query const& q)
     MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_featureset: Raster extent=" << raster_extent;
     MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_featureset: View extent=" << q.get_bbox();
     MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_featureset: Intersect extent=" << intersect;
-    MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_featureset: Query resolution=" << boost::get<0>(q.resolution())  << "," << boost::get<1>(q.resolution());
+    MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_featureset: Query resolution=" << std::get<0>(q.resolution())  << "," << std::get<1>(q.resolution());
     MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_featureset: Size=" << width << " " << height;
     MAPNIK_LOG_DEBUG(rasterlite) << "rasterlite_featureset: Pixel Size=" << pixel_size;
 
@@ -129,14 +114,14 @@ feature_ptr rasterlite_featureset::get_feature(mapnik::query const& q)
         {
             if (size > 0)
             {
-                mapnik::raster_ptr rasterp = boost::make_shared<mapnik::raster>(intersect, width, height);
+                mapnik::raster_ptr rasterp = std::make_shared<mapnik::raster>(intersect, width, height);
                 mapnik::image_data_32 & image = rasterp->data_;
                 image.set(0xffffffff);
 
                 unsigned char* raster_data = static_cast<unsigned char*>(raster);
                 unsigned char* image_data = image.getBytes();
 
-                memcpy (image_data, raster_data, size);
+                std::memcpy(image_data, raster_data, size);
 
                 feature->set_raster(rasterp);
 
diff --git a/plugins/input/rasterlite/rasterlite_featureset.hpp b/plugins/input/rasterlite/rasterlite_featureset.hpp
index 4f58b72..63be0db 100644
--- a/plugins/input/rasterlite/rasterlite_featureset.hpp
+++ b/plugins/input/rasterlite/rasterlite_featureset.hpp
@@ -27,16 +27,32 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/query.hpp>
 #include <mapnik/datasource.hpp>
-
-// boost
-#include <boost/variant.hpp>
+#include <mapnik/util/variant.hpp>
 
 #include "rasterlite_include.hpp"
 
-typedef boost::variant<mapnik::query,mapnik::coord2d> rasterlite_query;
+using rasterlite_query = mapnik::util::variant<mapnik::query,mapnik::coord2d>;
 
 class rasterlite_featureset : public mapnik::Featureset
 {
+    struct query_dispatch : public mapnik::util::static_visitor<mapnik::feature_ptr>
+    {
+        query_dispatch( rasterlite_featureset & featureset)
+            : featureset_(featureset) {}
+
+        mapnik::feature_ptr operator() (mapnik::query const& q) const
+        {
+            return featureset_.get_feature(q);
+        }
+
+        mapnik::feature_ptr operator() (mapnik::coord2d const& p) const
+        {
+            return featureset_.get_feature_at_point(p);
+        }
+
+        rasterlite_featureset & featureset_;
+    };
+
 public:
     rasterlite_featureset(void* dataset,
                           rasterlite_query q);
diff --git a/plugins/input/shape/build.py b/plugins/input/shape/build.py
index 3d07be2..4ef3368 100644
--- a/plugins/input/shape/build.py
+++ b/plugins/input/shape/build.py
@@ -45,28 +45,17 @@ libraries.append('boost_system%s' % env['BOOST_APPEND'])
 cppdefines = []
 cxxflags = []
 
-if env['SHAPE_MEMORY_MAPPED_FILE']:
-    cppdefines.append('-DSHAPE_MEMORY_MAPPED_FILE')
-
-if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
-    boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
-    if boost_version_from_header < 46:
-        # avoid ubuntu issue with boost interprocess:
-        # https://github.com/mapnik/mapnik/issues/1082
-        cxxflags.append('-fpermissive')
-
 plugin_env.Append(CXXFLAGS=cxxflags)
 plugin_env.Append(CPPDEFINES=cppdefines)
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
+    libraries.append(env['MAPNIK_NAME'])
 
     TARGET = plugin_env.SharedLibrary('../shape',
                                       SHLIBSUFFIX='.input',
                                       SHLIBPREFIX='',
                                       source=plugin_sources,
-                                      LIBS=libraries,
-                                      LINKFLAGS=env['CUSTOM_LDFLAGS'])
+                                      LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/shape/dbfile.cpp b/plugins/input/shape/dbfile.cpp
index 2c34c76..cada173 100644
--- a/plugins/input/shape/dbfile.cpp
+++ b/plugins/input/shape/dbfile.cpp
@@ -29,16 +29,22 @@
 #include "dbfile.hpp"
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
-#include <boost/cstdint.hpp> // for int16_t and int32_t
+#ifdef SHAPE_MEMORY_MAPPED_FILE
+#include <boost/interprocess/mapped_region.hpp>
 #include <mapnik/mapped_memory_cache.hpp>
+#endif
+#pragma GCC diagnostic pop
 
 // stl
+#include <cstdint>
 #include <string>
+#include <cstring>
 #include <stdexcept>
 
-using mapnik::mapped_memory_cache;
-
 dbf_file::dbf_file()
     : num_records_(0),
       num_fields_(0),
@@ -60,7 +66,7 @@ dbf_file::dbf_file(std::string const& file_name)
 {
 
 #ifdef SHAPE_MEMORY_MAPPED_FILE
-    boost::optional<mapnik::mapped_region_ptr> memory = mapped_memory_cache::instance().find(file_name,true);
+    boost::optional<mapnik::mapped_region_ptr> memory = mapnik::mapped_memory_cache::instance().find(file_name,true);
     if (memory)
     {
         mapped_region_ = *memory;
@@ -141,6 +147,7 @@ void dbf_file::add_attribute(int col, mapnik::transcoder const& tr, mapnik::feat
     {
         std::string const& name=fields_[col].name_;
 
+        // NOTE: ensure types handled here are matched in shape_datasource.cpp
         switch (fields_[col].type_)
         {
         case 'C':
@@ -166,8 +173,11 @@ void dbf_file::add_attribute(int col, mapnik::transcoder const& tr, mapnik::feat
             }
             break;
         }
-        case 'N':
+        case 'N': // numeric
+        case 'O': // double
+        case 'F': // float
         {
+
             if (record_[fields_[col].offset_] == '*')
             {
                 // NOTE: we intentionally do not store null here
@@ -179,16 +189,24 @@ void dbf_file::add_attribute(int col, mapnik::transcoder const& tr, mapnik::feat
                 double val = 0.0;
                 const char *itr = record_+fields_[col].offset_;
                 const char *end = itr + fields_[col].length_;
-                if (qi::phrase_parse(itr,end,double_,ascii::space,val))
+                ascii::space_type space;
+                qi::double_type double_;
+                if (qi::phrase_parse(itr,end,double_,space,val))
+                {
                     f.put(name,val);
+                }
             }
             else
             {
                 mapnik::value_integer val = 0;
                 const char *itr = record_+fields_[col].offset_;
                 const char *end = itr + fields_[col].length_;
-                if (qi::phrase_parse(itr,end,int_,ascii::space,val))
+                ascii::space_type space;
+                qi::int_type int_;
+                if (qi::phrase_parse(itr,end,int_,space,val))
+                {
                     f.put(name,val);
+                }
             }
             break;
         }
@@ -210,7 +228,7 @@ void dbf_file::read_header()
         skip(22);
         std::streampos offset=0;
         char name[11];
-        memset(&name,0,11);
+        std::memset(&name,0,11);
         fields_.reserve(num_fields_);
         for (int i=0;i<num_fields_;++i)
         {
@@ -243,7 +261,7 @@ int dbf_file::read_short()
 {
     char b[2];
     file_.read(b,2);
-    boost::int16_t val;
+    std::int16_t val;
     mapnik::read_int16_ndr(b,val);
     return val;
 }
@@ -253,7 +271,7 @@ int dbf_file::read_int()
 {
     char b[4];
     file_.read(b,4);
-    boost::int32_t val;
+    std::int32_t val;
     mapnik::read_int32_ndr(b,val);
     return val;
 }
diff --git a/plugins/input/shape/dbfile.hpp b/plugins/input/shape/dbfile.hpp
index 3659c1c..29aaefa 100644
--- a/plugins/input/shape/dbfile.hpp
+++ b/plugins/input/shape/dbfile.hpp
@@ -27,7 +27,10 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/noncopyable.hpp>
 #include <mapnik/unicode.hpp>
+#ifdef SHAPE_MEMORY_MAPPED_FILE
 #include <mapnik/mapped_memory_cache.hpp>
+#endif
+
 
 // boost
 #include <boost/interprocess/streams/bufferstream.hpp>
diff --git a/plugins/input/shape/shape_datasource.cpp b/plugins/input/shape/shape_datasource.cpp
index 1ba9564..a649c75 100644
--- a/plugins/input/shape/shape_datasource.cpp
+++ b/plugins/input/shape/shape_datasource.cpp
@@ -26,12 +26,15 @@
 
 // boost
 #include <boost/version.hpp>
-#include <boost/format.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic pop
 
 // mapnik
 #include <mapnik/debug.hpp>
+#include <mapnik/make_unique.hpp>
 #include <mapnik/util/fs.hpp>
 #include <mapnik/global.hpp>
 #include <mapnik/utils.hpp>
@@ -43,6 +46,7 @@
 
 // stl
 #include <fstream>
+#include <sstream>
 #include <stdexcept>
 
 DATASOURCE_PLUGIN(shape_datasource)
@@ -56,13 +60,13 @@ using mapnik::filter_in_box;
 using mapnik::filter_at_point;
 using mapnik::attribute_descriptor;
 
-shape_datasource::shape_datasource(const parameters &params)
+shape_datasource::shape_datasource(parameters const& params)
     : datasource (params),
       type_(datasource::Vector),
       file_length_(0),
       indexed_(false),
       row_limit_(*params.get<mapnik::value_integer>("row_limit",0)),
-      desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding","utf-8"))
+      desc_(shape_datasource::name(), *params.get<std::string>("encoding","utf-8"))
 {
 #ifdef MAPNIK_STATS
     mapnik::progress_timer __stats__(std::clog, "shape_datasource::init");
@@ -96,7 +100,7 @@ shape_datasource::shape_datasource(const parameters &params)
         mapnik::progress_timer __stats2__(std::clog, "shape_datasource::init(get_column_description)");
 #endif
 
-        boost::shared_ptr<shape_io> shape_ref = boost::make_shared<shape_io>(shape_name_);
+        std::unique_ptr<shape_io> shape_ref = std::make_unique<shape_io>(shape_name_);
         init(*shape_ref);
         for (int i=0;i<shape_ref->dbf().num_fields();++i)
         {
@@ -105,15 +109,13 @@ shape_datasource::shape_datasource(const parameters &params)
             switch (fd.type_)
             {
             case 'C': // character
-            case 'D': // Date
-            case 'M': // Memo, a string
-            case '@': // timestamp
+            case 'D': // date
                 desc_.add_descriptor(attribute_descriptor(fld_name, String));
                 break;
             case 'L': // logical
                 desc_.add_descriptor(attribute_descriptor(fld_name, Boolean));
                 break;
-            case 'N':
+            case 'N': // numeric
             case 'O': // double
             case 'F': // float
             {
@@ -131,15 +133,14 @@ shape_datasource::shape_datasource(const parameters &params)
                 // I - long
                 // G - ole
                 // + - autoincrement
-                MAPNIK_LOG_WARN(shape) << "shape_datasource: Unknown type=" << fd.type_;
+                // @ - timestamp
+                // B - binary
+                // l - long
+                // M - memo
+                MAPNIK_LOG_ERROR(shape) << "shape_datasource: Unknown type=" << fd.type_;
                 break;
             }
         }
-        // for indexed shapefiles we keep open the file descriptor for fast reads
-        if (indexed_) {
-            shape_ = shape_ref;
-        }
-
     }
     catch (datasource_exception const& ex)
     {
@@ -169,8 +170,9 @@ void shape_datasource::init(shape_io& shape)
     int file_code=shape.shp().read_xdr_integer();
     if (file_code!=9994)
     {
-        //invalid file code
-        throw datasource_exception("Shape Plugin: " + (boost::format("wrong file code : %d") % file_code).str());
+        std::ostringstream s;
+        s << "Shape Plugin: wrong file code " << file_code;
+        throw datasource_exception(s.str());
     }
 
     shape.shp().skip(5*4);
@@ -179,8 +181,9 @@ void shape_datasource::init(shape_io& shape)
 
     if (version!=1000)
     {
-        //invalid version number
-        throw datasource_exception("Shape Plugin: " + (boost::format("invalid version number: %d") % version).str());
+        std::ostringstream s;
+        s << "Shape Plugin: nvalid version number " << version;
+        throw datasource_exception(s.str());
     }
 
     shape_type_ = static_cast<shape_io::shapeType>(shape.shp().read_ndr_integer());
@@ -197,8 +200,6 @@ void shape_datasource::init(shape_io& shape)
 
     MAPNIK_LOG_DEBUG(shape) << "shape_datasource: Z min/max=" << zmin << "," << zmax;
     MAPNIK_LOG_DEBUG(shape) << "shape_datasource: M min/max=" << mmin << "," << mmax;
-#else
-    shape.shp().skip(4*8);
 #endif
 
     // check if we have an index file around
@@ -225,7 +226,7 @@ layer_descriptor shape_datasource::get_descriptor() const
     return desc_;
 }
 
-featureset_ptr shape_datasource::features(const query& q) const
+featureset_ptr shape_datasource::features(query const& q) const
 {
 #ifdef MAPNIK_STATS
     mapnik::progress_timer __stats__(std::clog, "shape_datasource::features");
@@ -234,11 +235,10 @@ featureset_ptr shape_datasource::features(const query& q) const
     filter_in_box filter(q.get_bbox());
     if (indexed_)
     {
-        shape_->shp().seek(0);
-        // TODO - use boost::make_shared - #760
+        std::unique_ptr<shape_io> shape_ptr = std::make_unique<shape_io>(shape_name_);
         return featureset_ptr
             (new shape_index_featureset<filter_in_box>(filter,
-                                                       *shape_,
+                                                       std::move(shape_ptr),
                                                        q.property_names(),
                                                        desc_.get_encoding(),
                                                        shape_name_,
@@ -246,12 +246,12 @@ featureset_ptr shape_datasource::features(const query& q) const
     }
     else
     {
-        return boost::make_shared<shape_featureset<filter_in_box> >(filter,
-                                                                    shape_name_,
-                                                                    q.property_names(),
-                                                                    desc_.get_encoding(),
-                                                                    file_length_,
-                                                                    row_limit_);
+        return std::make_shared<shape_featureset<filter_in_box> >(filter,
+                                                                  shape_name_,
+                                                                  q.property_names(),
+                                                                  desc_.get_encoding(),
+                                                                  file_length_,
+                                                                  row_limit_);
     }
 }
 
@@ -276,11 +276,10 @@ featureset_ptr shape_datasource::features_at_point(coord2d const& pt, double tol
 
     if (indexed_)
     {
-        shape_->shp().seek(0);
-        // TODO - use boost::make_shared - #760
+        std::unique_ptr<shape_io> shape_ptr = std::make_unique<shape_io>(shape_name_);
         return featureset_ptr
             (new shape_index_featureset<filter_at_point>(filter,
-                                                         *shape_,
+                                                         std::move(shape_ptr),
                                                          names,
                                                          desc_.get_encoding(),
                                                          shape_name_,
@@ -288,12 +287,12 @@ featureset_ptr shape_datasource::features_at_point(coord2d const& pt, double tol
     }
     else
     {
-        return boost::make_shared<shape_featureset<filter_at_point> >(filter,
-                                                                      shape_name_,
-                                                                      names,
-                                                                      desc_.get_encoding(),
-                                                                      file_length_,
-                                                                      row_limit_);
+        return std::make_shared<shape_featureset<filter_at_point> >(filter,
+                                                                    shape_name_,
+                                                                    names,
+                                                                    desc_.get_encoding(),
+                                                                    file_length_,
+                                                                    row_limit_);
     }
 }
 
diff --git a/plugins/input/shape/shape_datasource.hpp b/plugins/input/shape/shape_datasource.hpp
index 9f98e30..ae1894d 100644
--- a/plugins/input/shape/shape_datasource.hpp
+++ b/plugins/input/shape/shape_datasource.hpp
@@ -35,7 +35,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
@@ -53,11 +53,11 @@ using mapnik::coord2d;
 class shape_datasource : public datasource
 {
 public:
-    shape_datasource(const parameters &params);
+    shape_datasource(parameters const& params);
     virtual ~shape_datasource();
     datasource::datasource_t type() const;
     static const char * name();
-    featureset_ptr features(const query& q) const;
+    featureset_ptr features(query const& q) const;
     featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const;
     box2d<double> envelope() const;
     boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
@@ -68,7 +68,6 @@ private:
 
     datasource::datasource_t type_;
     std::string shape_name_;
-    boost::shared_ptr<shape_io> shape_;
     shape_io::shapeType shape_type_;
     long file_length_;
     box2d<double> extent_;
diff --git a/plugins/input/shape/shape_featureset.cpp b/plugins/input/shape/shape_featureset.cpp
index 4550d83..7ae4a64 100644
--- a/plugins/input/shape/shape_featureset.cpp
+++ b/plugins/input/shape/shape_featureset.cpp
@@ -29,7 +29,6 @@
 #include <mapnik/unicode.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 
 #include "shape_featureset.hpp"
 #include "shape_utils.hpp"
@@ -53,7 +52,7 @@ shape_featureset<filterT>::shape_featureset(filterT const& filter,
       file_length_(file_length),
       row_limit_(row_limit),
       count_(0),
-      ctx_(boost::make_shared<mapnik::context_type>())
+      ctx_(std::make_shared<mapnik::context_type>())
 {
     shape_.shp().skip(100);
     setup_attributes(ctx_, attribute_names, shape_name, shape_,attr_ids_);
@@ -89,9 +88,9 @@ feature_ptr shape_featureset<filterT>::next()
             double y = record.read_double();
             if (!filter_.pass(mapnik::box2d<double>(x,y,x,y)))
                 continue;
-            std::auto_ptr<geometry_type> point(new geometry_type(mapnik::Point));
+            std::unique_ptr<geometry_type> point(new geometry_type(mapnik::geometry_type::types::Point));
             point->move_to(x, y);
-            feature->paths().push_back(point);
+            feature->paths().push_back(point.release());
             break;
         }
         case shape_io::shape_multipoint:
@@ -105,9 +104,9 @@ feature_ptr shape_featureset<filterT>::next()
             {
                 double x = record.read_double();
                 double y = record.read_double();
-                std::auto_ptr<geometry_type> point(new geometry_type(mapnik::Point));
+                std::unique_ptr<geometry_type> point(new geometry_type(mapnik::geometry_type::types::Point));
                 point->move_to(x, y);
-                feature->paths().push_back(point);
+                feature->paths().push_back(point.release());
             }
             break;
         }
diff --git a/plugins/input/shape/shape_featureset.hpp b/plugins/input/shape/shape_featureset.hpp
index cc643a5..a71e59e 100644
--- a/plugins/input/shape/shape_featureset.hpp
+++ b/plugins/input/shape/shape_featureset.hpp
@@ -33,7 +33,7 @@
 #include "shape_io.hpp"
 
 //boost
-#include <boost/scoped_ptr.hpp>
+
 #include <boost/utility.hpp>
 
 using mapnik::Featureset;
@@ -60,7 +60,7 @@ private:
     shape_io shape_;
     box2d<double> query_ext_;
     mutable box2d<double> feature_bbox_;
-    boost::scoped_ptr<transcoder> tr_;
+    const std::unique_ptr<transcoder> tr_;
     long file_length_;
     std::vector<int> attr_ids_;
     mapnik::value_integer row_limit_;
diff --git a/plugins/input/shape/shape_index_featureset.cpp b/plugins/input/shape/shape_index_featureset.cpp
index 78836a0..2ff18cd 100644
--- a/plugins/input/shape/shape_index_featureset.cpp
+++ b/plugins/input/shape/shape_index_featureset.cpp
@@ -28,9 +28,14 @@
 #include <mapnik/feature_factory.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
+#ifdef SHAPE_MEMORY_MAPPED_FILE
 #include <boost/interprocess/streams/bufferstream.hpp>
-#include <boost/make_shared.hpp>
+#endif
+#pragma GCC diagnostic pop
 
 #include "shape_index_featureset.hpp"
 #include "shape_utils.hpp"
@@ -41,23 +46,23 @@ using mapnik::geometry_type;
 
 template <typename filterT>
 shape_index_featureset<filterT>::shape_index_featureset(filterT const& filter,
-                                                        shape_io& shape,
+                                                        std::unique_ptr<shape_io> && shape_ptr,
                                                         std::set<std::string> const& attribute_names,
                                                         std::string const& encoding,
                                                         std::string const& shape_name,
                                                         int row_limit)
     : filter_(filter),
-      ctx_(boost::make_shared<mapnik::context_type>()),
-      shape_(shape),
-      tr_(new mapnik::transcoder(encoding)),
-      row_limit_(row_limit),
-      count_(0),
-      feature_bbox_()
+      ctx_(std::make_shared<mapnik::context_type>()),
+    shape_ptr_(std::move(shape_ptr)),
+    tr_(new mapnik::transcoder(encoding)),
+    row_limit_(row_limit),
+    count_(0),
+    feature_bbox_()
 {
-    shape_.shp().skip(100);
-    setup_attributes(ctx_, attribute_names, shape_name, shape_,attr_ids_);
+    shape_ptr_->shp().skip(100);
+    setup_attributes(ctx_, attribute_names, shape_name, *shape_ptr_,attr_ids_);
 
-    boost::shared_ptr<shape_file> index = shape_.index();
+    auto index = shape_ptr_->index();
     if (index)
     {
 #ifdef SHAPE_MEMORY_MAPPED_FILE
@@ -85,11 +90,11 @@ feature_ptr shape_index_featureset<filterT>::next()
 
     while ( itr_ != offsets_.end())
     {
-        shape_.move_to(*itr_++);
-        shape_file::record_type record(shape_.reclength_ * 2);
-        shape_.shp().read_record(record);
+        shape_ptr_->move_to(*itr_++);
+        shape_file::record_type record(shape_ptr_->reclength_ * 2);
+        shape_ptr_->shp().read_record(record);
         int type = record.read_ndr_integer();
-        feature_ptr feature(feature_factory::create(ctx_,shape_.id_));
+        feature_ptr feature(feature_factory::create(ctx_,shape_ptr_->id_));
 
         switch (type)
         {
@@ -99,9 +104,9 @@ feature_ptr shape_index_featureset<filterT>::next()
         {
             double x = record.read_double();
             double y = record.read_double();
-            std::auto_ptr<geometry_type> point(new geometry_type(mapnik::Point));
+            std::unique_ptr<geometry_type> point(new geometry_type(mapnik::geometry_type::types::Point));
             point->move_to(x, y);
-            feature->paths().push_back(point);
+            feature->paths().push_back(point.release());
             break;
         }
         case shape_io::shape_multipoint:
@@ -115,9 +120,9 @@ feature_ptr shape_index_featureset<filterT>::next()
             {
                 double x = record.read_double();
                 double y = record.read_double();
-                std::auto_ptr<geometry_type> point(new geometry_type(mapnik::Point));
+                std::unique_ptr<geometry_type> point(new geometry_type(mapnik::geometry_type::types::Point));
                 point->move_to(x, y);
-                feature->paths().push_back(point);
+                feature->paths().push_back(point.release());
             }
             break;
         }
@@ -144,18 +149,18 @@ feature_ptr shape_index_featureset<filterT>::next()
             return feature_ptr();
         }
 
-        // FIXME
-        feature->set_id(shape_.id_);
+        // FIXME: https://github.com/mapnik/mapnik/issues/1020
+        feature->set_id(shape_ptr_->id_);
         if (attr_ids_.size())
         {
-            shape_.dbf().move_to(shape_.id_);
+            shape_ptr_->dbf().move_to(shape_ptr_->id_);
             std::vector<int>::const_iterator itr = attr_ids_.begin();
             std::vector<int>::const_iterator end = attr_ids_.end();
             try
             {
                 for (; itr!=end; ++itr)
                 {
-                    shape_.dbf().add_attribute(*itr, *tr_, *feature);
+                    shape_ptr_->dbf().add_attribute(*itr, *tr_, *feature);
                 }
             }
             catch (...)
diff --git a/plugins/input/shape/shape_index_featureset.hpp b/plugins/input/shape/shape_index_featureset.hpp
index 5863b32..cc1715b 100644
--- a/plugins/input/shape/shape_index_featureset.hpp
+++ b/plugins/input/shape/shape_index_featureset.hpp
@@ -34,7 +34,7 @@
 #include <mapnik/value_types.hpp>
 
 // boost
-#include <boost/scoped_ptr.hpp>
+
 #include <boost/utility.hpp>
 
 #include "shape_datasource.hpp"
@@ -50,7 +50,7 @@ class shape_index_featureset : public Featureset
 {
 public:
     shape_index_featureset(filterT const& filter,
-                           shape_io & shape,
+                           std::unique_ptr<shape_io> && shape_ptr,
                            std::set<std::string> const& attribute_names,
                            std::string const& encoding,
                            std::string const& shape_name,
@@ -61,8 +61,8 @@ public:
 private:
     filterT filter_;
     context_ptr ctx_;
-    shape_io & shape_;
-    boost::scoped_ptr<mapnik::transcoder> tr_;
+    std::unique_ptr<shape_io> shape_ptr_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
     std::vector<std::streampos> offsets_;
     std::vector<std::streampos>::iterator itr_;
     std::vector<int> attr_ids_;
diff --git a/plugins/input/shape/shape_io.cpp b/plugins/input/shape/shape_io.cpp
index bbeb142..ec1e134 100644
--- a/plugins/input/shape/shape_io.cpp
+++ b/plugins/input/shape/shape_io.cpp
@@ -24,14 +24,15 @@
 
 // mapnik
 #include <mapnik/debug.hpp>
+#include <mapnik/make_unique.hpp>
 #include <mapnik/datasource.hpp>
+#include <mapnik/geom_util.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 
 using mapnik::datasource_exception;
 using mapnik::geometry_type;
-
+using mapnik::hit_test_first;
 const std::string shape_io::SHP = ".shp";
 const std::string shape_io::DBF = ".dbf";
 const std::string shape_io::INDEX = ".index";
@@ -53,7 +54,7 @@ shape_io::shape_io(std::string const& shape_name, bool open_index)
     {
         try
         {
-            index_= boost::make_shared<shape_file>(shape_name + INDEX);
+            index_ = std::make_unique<shape_file>(shape_name + INDEX);
         }
         catch (...)
         {
@@ -96,7 +97,7 @@ void shape_io::read_polyline( shape_file::record_type & record, mapnik::geometry
     int num_points = record.read_ndr_integer();
     if (num_parts == 1)
     {
-        std::auto_ptr<geometry_type> line(new geometry_type(mapnik::LineString));
+        std::unique_ptr<geometry_type> line(new geometry_type(mapnik::geometry_type::types::LineString));
         record.skip(4);
         double x = record.read_double();
         double y = record.read_double();
@@ -107,7 +108,7 @@ void shape_io::read_polyline( shape_file::record_type & record, mapnik::geometry
             y = record.read_double();
             line->line_to(x, y);
         }
-        geom.push_back(line);
+        geom.push_back(line.release());
     }
     else
     {
@@ -120,7 +121,7 @@ void shape_io::read_polyline( shape_file::record_type & record, mapnik::geometry
         int start, end;
         for (int k = 0; k < num_parts; ++k)
         {
-            std::auto_ptr<geometry_type> line(new geometry_type(mapnik::LineString));
+            std::unique_ptr<geometry_type> line(new geometry_type(mapnik::geometry_type::types::LineString));
             start = parts[k];
             if (k == num_parts - 1)
             {
@@ -141,7 +142,7 @@ void shape_io::read_polyline( shape_file::record_type & record, mapnik::geometry
                 y = record.read_double();
                 line->line_to(x, y);
             }
-            geom.push_back(line);
+            geom.push_back(line.release());
         }
     }
 }
@@ -157,9 +158,9 @@ void shape_io::read_polygon(shape_file::record_type & record, mapnik::geometry_c
         parts[i] = record.read_ndr_integer();
     }
 
+    std::unique_ptr<geometry_type> poly(new geometry_type(mapnik::geometry_type::types::Polygon));
     for (int k = 0; k < num_parts; ++k)
     {
-        std::auto_ptr<geometry_type> poly(new geometry_type(mapnik::Polygon));
         int start = parts[k];
         int end;
         if (k == num_parts - 1)
@@ -173,14 +174,19 @@ void shape_io::read_polygon(shape_file::record_type & record, mapnik::geometry_c
 
         double x = record.read_double();
         double y = record.read_double();
+        if (k > 0 && !hit_test_first(*poly, x, y))
+        {
+            geom.push_back(poly.release());
+            poly.reset(new geometry_type(mapnik::geometry_type::types::Polygon));
+        }
         poly->move_to(x, y);
-        for (int j=start+1;j<end;j++)
+        for (int j = start + 1; j < end; ++j)
         {
             x = record.read_double();
             y = record.read_double();
             poly->line_to(x, y);
         }
         poly->close_path();
-        geom.push_back(poly);
     }
+    geom.push_back(poly.release());
 }
diff --git a/plugins/input/shape/shape_io.hpp b/plugins/input/shape/shape_io.hpp
index 34d091f..727310c 100644
--- a/plugins/input/shape/shape_io.hpp
+++ b/plugins/input/shape/shape_io.hpp
@@ -29,7 +29,10 @@
 #include <mapnik/noncopyable.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
+#include <boost/optional.hpp>
+
+// stl
+#include <memory>
 
 #include "dbfile.hpp"
 #include "shapefile.hpp"
@@ -61,9 +64,10 @@ public:
     shape_file& shp();
     dbf_file& dbf();
 
-    inline boost::shared_ptr<shape_file>& index()
+    inline boost::optional<shape_file&> index()
     {
-        return index_;
+        if (index_) return boost::optional<shape_file&>(*index_);
+        return boost::optional<shape_file&>();
     }
 
     inline bool has_index() const
@@ -79,7 +83,7 @@ public:
     shapeType type_;
     shape_file shp_;
     dbf_file   dbf_;
-    boost::shared_ptr<shape_file> index_;
+    std::unique_ptr<shape_file> index_;
     unsigned reclength_;
     unsigned id_;
     box2d<double> cur_extent_;
diff --git a/plugins/input/shape/shape_utils.cpp b/plugins/input/shape/shape_utils.cpp
index b62f38a..0f90878 100644
--- a/plugins/input/shape/shape_utils.cpp
+++ b/plugins/input/shape/shape_utils.cpp
@@ -27,7 +27,11 @@
 #include "shape_utils.hpp"
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic pop
 
 void setup_attributes(mapnik::context_ptr const& ctx,
                       std::set<std::string> const& names,
diff --git a/plugins/input/shape/shapefile.hpp b/plugins/input/shape/shapefile.hpp
index a076304..bd2740a 100644
--- a/plugins/input/shape/shapefile.hpp
+++ b/plugins/input/shape/shapefile.hpp
@@ -27,18 +27,18 @@
 #include <cstring>
 #include <fstream>
 #include <stdexcept>
-
+#include <cstdint>
 
 // mapnik
 #include <mapnik/global.hpp>
 #include <mapnik/utils.hpp>
 #include <mapnik/box2d.hpp>
+#ifdef SHAPE_MEMORY_MAPPED_FILE
+#include <boost/interprocess/mapped_region.hpp>
 #include <mapnik/mapped_memory_cache.hpp>
-#include <mapnik/noncopyable.hpp>
-
-// boost
-#include <boost/cstdint.hpp>
 #include <boost/interprocess/streams/bufferstream.hpp>
+#endif
+#include <mapnik/noncopyable.hpp>
 
 using mapnik::box2d;
 using mapnik::read_int32_ndr;
@@ -49,7 +49,7 @@ using mapnik::read_double_xdr;
 
 struct RecordTag
 {
-    typedef char* data_type;
+    using data_type = char*;
     static data_type alloc(unsigned size)
     {
         return static_cast<data_type>(::operator new(sizeof(char)*size));
@@ -63,7 +63,7 @@ struct RecordTag
 
 struct MappedRecordTag
 {
-    typedef const char* data_type;
+    using data_type = const char*;
     static data_type alloc(unsigned) { return 0; }
     static void dealloc(data_type ) {}
 };
@@ -103,7 +103,7 @@ struct shape_record
 
     int read_ndr_integer()
     {
-        boost::int32_t val;
+        std::int32_t val;
         read_int32_ndr(&data[pos], val);
         pos += 4;
         return val;
@@ -111,7 +111,7 @@ struct shape_record
 
     int read_xdr_integer()
     {
-        boost::int32_t val;
+        std::int32_t val;
         read_int32_xdr(&data[pos], val);
         pos += 4;
         return val;
@@ -131,19 +131,17 @@ struct shape_record
     }
 };
 
-using namespace boost::interprocess;
-
 class shape_file : mapnik::noncopyable
 {
 public:
 
 #ifdef SHAPE_MEMORY_MAPPED_FILE
-    typedef ibufferstream file_source_type;
-    typedef shape_record<MappedRecordTag> record_type;
+    using file_source_type = boost::interprocess::ibufferstream;
+    using record_type = shape_record<MappedRecordTag>;
     mapnik::mapped_region_ptr mapped_region_;
 #else
-    typedef std::ifstream file_source_type;
-    typedef shape_record<RecordTag> record_type;
+    using file_source_type = std::ifstream;
+    using record_type = shape_record<RecordTag>;
 #endif
 
     file_source_type file_;
@@ -166,7 +164,7 @@ public:
         if (memory)
         {
             mapped_region_ = *memory;
-            file_.buffer(static_cast<char*>((*memory)->get_address()),(*memory)->get_size());
+            file_.buffer(static_cast<char*>(mapped_region_->get_address()),mapped_region_->get_size());
         }
         else
         {
@@ -182,7 +180,7 @@ public:
         return file_;
     }
 
-    inline bool is_open()
+    inline bool is_open() const
     {
 #ifdef SHAPE_MEMORY_MAPPED_FILE
         return (file_.buffer().second > 0);
@@ -205,7 +203,7 @@ public:
     {
         char b[4];
         file_.read(b, 4);
-        boost::int32_t val;
+        std::int32_t val;
         read_int32_xdr(b, val);
         return val;
     }
@@ -214,7 +212,7 @@ public:
     {
         char b[4];
         file_.read(b, 4);
-        boost::int32_t val;
+        std::int32_t val;
         read_int32_ndr(b, val);
         return val;
     }
diff --git a/plugins/input/sqlite/build.py b/plugins/input/sqlite/build.py
index 5930a2e..3136dca 100644
--- a/plugins/input/sqlite/build.py
+++ b/plugins/input/sqlite/build.py
@@ -41,17 +41,16 @@ libraries.append('boost_system%s' % env['BOOST_APPEND'])
 linkflags = []
 if env['SQLITE_LINKFLAGS']:
     linkflags.append(env['SQLITE_LINKFLAGS'])
+    plugin_env.Append(LINKFLAGS=linkflags)
 
 if env['PLUGIN_LINKING'] == 'shared':
-    libraries.append('mapnik')
-    linkflags.append(env['CUSTOM_LDFLAGS'])
+    libraries.append(env['MAPNIK_NAME'])
 
     TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
                                        SHLIBPREFIX='',
                                        SHLIBSUFFIX='.input',
                                        source=plugin_sources,
-                                       LIBS=libraries,
-                                       LINKFLAGS=(' ').join(linkflags))
+                                       LIBS=libraries)
 
     # if the plugin links to libmapnik ensure it is built first
     Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/plugins/input/sqlite/sqlite_connection.hpp b/plugins/input/sqlite/sqlite_connection.hpp
index 5490843..244c577 100644
--- a/plugins/input/sqlite/sqlite_connection.hpp
+++ b/plugins/input/sqlite/sqlite_connection.hpp
@@ -25,6 +25,7 @@
 
 // stl
 #include <string.h>
+#include <memory>
 
 // mapnik
 #include <mapnik/datasource.hpp>
@@ -32,9 +33,11 @@
 #include <mapnik/timer.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic pop
 
 // sqlite
 extern "C" {
@@ -58,7 +61,12 @@ public:
         int mode = SQLITE_OPEN_READWRITE;
 #if SQLITE_VERSION_NUMBER >= 3006018
         // shared cache flag not available until >= 3.6.18
-        mode |= SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE;
+        // Don't use shared cache in SQLite prior to 3.7.15.
+        // https://github.com/mapnik/mapnik/issues/2483
+        if (sqlite3_libversion_number() >= 3007015)
+        {
+            mode |= SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE;
+        }
 #endif
         const int rc = sqlite3_open_v2 (file_.c_str(), &db_, mode, 0);
 #else
@@ -116,7 +124,7 @@ public:
         throw mapnik::datasource_exception (s.str());
     }
 
-    boost::shared_ptr<sqlite_resultset> execute_query(std::string const& sql)
+    std::shared_ptr<sqlite_resultset> execute_query(std::string const& sql)
     {
 #ifdef MAPNIK_STATS
         mapnik::progress_timer __stats__(std::clog, std::string("sqlite_resultset::execute_query ") + sql);
@@ -129,7 +137,7 @@ public:
             throw_sqlite_error(sql);
         }
 
-        return boost::make_shared<sqlite_resultset>(stmt);
+        return std::make_shared<sqlite_resultset>(stmt);
     }
 
     void execute(std::string const& sql)
diff --git a/plugins/input/sqlite/sqlite_datasource.cpp b/plugins/input/sqlite/sqlite_datasource.cpp
index 3efa684..25f727b 100644
--- a/plugins/input/sqlite/sqlite_datasource.cpp
+++ b/plugins/input/sqlite/sqlite_datasource.cpp
@@ -38,7 +38,6 @@
 // boost
 #include <boost/algorithm/string.hpp>
 #include <boost/tokenizer.hpp>
-#include <boost/make_shared.hpp>
 
 using mapnik::box2d;
 using mapnik::coord2d;
@@ -67,7 +66,7 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
       row_offset_(*params.get<mapnik::value_integer>("row_offset", 0)),
       row_limit_(*params.get<mapnik::value_integer>("row_limit", 0)),
       intersects_token_("!intersects!"),
-      desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding", "utf-8")),
+      desc_(sqlite_datasource::name(), *params.get<std::string>("encoding", "utf-8")),
       format_(mapnik::wkbAuto)
 {
     /* TODO
@@ -94,10 +93,10 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
         throw datasource_exception("Sqlite Plugin: " + dataset_name_ + " does not exist");
     }
 
-    use_spatial_index_ = *params.get<mapnik::boolean>("use_spatial_index", true);
+    use_spatial_index_ = *params.get<mapnik::boolean_type>("use_spatial_index", true);
 
     // TODO - remove this option once all datasources have an indexing api
-    bool auto_index = *params.get<mapnik::boolean>("auto_index", true);
+    bool auto_index = *params.get<mapnik::boolean_type>("auto_index", true);
 
     boost::optional<std::string> ext  = params.get<std::string>("extent");
     if (ext) extent_initialized_ = extent_.from_string(*ext);
@@ -139,9 +138,9 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
     }
 
     // now actually create the connection and start executing setup sql
-    dataset_ = boost::make_shared<sqlite_connection>(dataset_name_);
+    dataset_ = std::make_shared<sqlite_connection>(dataset_name_);
 
-    boost::optional<int> table_by_index = params.get<int>("table_by_index");
+    boost::optional<mapnik::value_integer> table_by_index = params.get<mapnik::value_integer>("table_by_index");
 
     int passed_parameters = 0;
     passed_parameters += params.get<std::string>("table") ? 1 : 0;
@@ -279,9 +278,11 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
         mapnik::progress_timer __stats2__(std::clog, "sqlite_datasource::init(use_spatial_index)");
 #endif
 
+        bool index_db_attached = false;
         if (mapnik::util::exists(index_db))
         {
             dataset_->execute("attach database '" + index_db + "' as " + index_table_);
+            index_db_attached = true;
         }
         has_spatial_index_ = sqlite_utils::has_rtree(index_table_,dataset_);
 
@@ -296,12 +297,16 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
                       << " FROM ("
                       << geometry_table_ << ")";
 
-                boost::shared_ptr<sqlite_resultset> rs = dataset_->execute_query(query.str());
+#ifdef MAPNIK_STATS
+                mapnik::progress_timer __stats2__(std::clog, "sqlite_datasource::init(create_spatial_index)");
+#endif
+
+                std::shared_ptr<sqlite_resultset> rs = dataset_->execute_query(query.str());
                 if (sqlite_utils::create_spatial_index(index_db,index_table_,rs))
                 {
                     //extent_initialized_ = true;
                     has_spatial_index_ = true;
-                    if (mapnik::util::exists(index_db))
+                    if (!index_db_attached && mapnik::util::exists(index_db))
                     {
                         dataset_->execute("attach database '" + index_db + "' as " + index_table_);
                     }
@@ -323,6 +328,9 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
 
     if (! extent_initialized_)
     {
+#ifdef MAPNIK_STATS
+        mapnik::progress_timer __stats2__(std::clog, "sqlite_datasource::init(detect_extent)");
+#endif
         // TODO - clean this up - reducing arguments
         std::string query = populate_tokens(table_);
         if (!sqlite_utils::detect_extent(dataset_,
@@ -430,7 +438,7 @@ boost::optional<mapnik::datasource::geometry_t> sqlite_datasource::get_geometry_
         {
             s << " LIMIT 5";
         }
-        boost::shared_ptr<sqlite_resultset> rs = dataset_->execute_query(s.str());
+        std::shared_ptr<sqlite_resultset> rs = dataset_->execute_query(s.str());
         int multi_type = 0;
         while (rs->is_valid() && rs->step_next())
         {
@@ -438,7 +446,7 @@ boost::optional<mapnik::datasource::geometry_t> sqlite_datasource::get_geometry_
             const char* data = (const char*) rs->column_blob(0, size);
             if (data)
             {
-                boost::ptr_vector<mapnik::geometry_type> paths;
+                mapnik::geometry_container paths;
                 if (mapnik::geometry_utils::from_wkb(paths, data, size, format_))
                 {
                     mapnik::util::to_ds_type(paths,result);
@@ -476,7 +484,7 @@ featureset_ptr sqlite_datasource::features(query const& q) const
         mapnik::box2d<double> const& e = q.get_bbox();
 
         std::ostringstream s;
-        mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+        mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
 
         s << "SELECT " << geometry_field_;
         if (!key_field_.empty())
@@ -529,9 +537,9 @@ featureset_ptr sqlite_datasource::features(query const& q) const
 
         MAPNIK_LOG_DEBUG(sqlite) << "sqlite_datasource: " << s.str();
 
-        boost::shared_ptr<sqlite_resultset> rs(dataset_->execute_query(s.str()));
+        std::shared_ptr<sqlite_resultset> rs(dataset_->execute_query(s.str()));
 
-        return boost::make_shared<sqlite_featureset>(rs,
+        return std::make_shared<sqlite_featureset>(rs,
                                                      ctx,
                                                      desc_.get_encoding(),
                                                      e,
@@ -554,7 +562,7 @@ featureset_ptr sqlite_datasource::features_at_point(coord2d const& pt, double to
         mapnik::box2d<double> e(pt.x, pt.y, pt.x, pt.y);
         e.pad(tol);
         std::ostringstream s;
-        mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+        mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
 
         s << "SELECT " << geometry_field_;
         if (!key_field_.empty())
@@ -610,9 +618,9 @@ featureset_ptr sqlite_datasource::features_at_point(coord2d const& pt, double to
 
         MAPNIK_LOG_DEBUG(sqlite) << "sqlite_datasource: " << s.str();
 
-        boost::shared_ptr<sqlite_resultset> rs(dataset_->execute_query(s.str()));
+        std::shared_ptr<sqlite_resultset> rs(dataset_->execute_query(s.str()));
 
-        return boost::make_shared<sqlite_featureset>(rs,
+        return std::make_shared<sqlite_featureset>(rs,
                                                      ctx,
                                                      desc_.get_encoding(),
                                                      e,
diff --git a/plugins/input/sqlite/sqlite_datasource.hpp b/plugins/input/sqlite/sqlite_datasource.hpp
index 516d632..db0bcfa 100644
--- a/plugins/input/sqlite/sqlite_datasource.hpp
+++ b/plugins/input/sqlite/sqlite_datasource.hpp
@@ -36,7 +36,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <vector>
@@ -68,7 +68,7 @@ private:
     bool extent_initialized_;
     mapnik::datasource::datasource_t type_;
     std::string dataset_name_;
-    boost::shared_ptr<sqlite_connection> dataset_;
+    std::shared_ptr<sqlite_connection> dataset_;
     std::string table_;
     std::string fields_;
     std::string metadata_;
diff --git a/plugins/input/sqlite/sqlite_featureset.cpp b/plugins/input/sqlite/sqlite_featureset.cpp
index 2f1735e..1153080 100644
--- a/plugins/input/sqlite/sqlite_featureset.cpp
+++ b/plugins/input/sqlite/sqlite_featureset.cpp
@@ -29,6 +29,7 @@
 #include <mapnik/feature_layer_desc.hpp>
 #include <mapnik/wkb.hpp>
 #include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/feature_factory.hpp>
 
 // ogr
@@ -42,7 +43,7 @@ using mapnik::geometry_utils;
 using mapnik::transcoder;
 using mapnik::feature_factory;
 
-sqlite_featureset::sqlite_featureset(boost::shared_ptr<sqlite_resultset> rs,
+sqlite_featureset::sqlite_featureset(std::shared_ptr<sqlite_resultset> rs,
                                      mapnik::context_ptr const& ctx,
                                      std::string const& encoding,
                                      mapnik::box2d<double> const& bbox,
@@ -123,8 +124,7 @@ feature_ptr sqlite_featureset::next()
             {
                 int text_col_size;
                 const char * text_data = rs_->column_text(i, text_col_size);
-                UnicodeString ustr = tr_->transcode(text_data, text_col_size);
-                feature->put(fld_name_str, ustr);
+                feature->put(fld_name_str, tr_->transcode(text_data, text_col_size));
                 break;
             }
 
diff --git a/plugins/input/sqlite/sqlite_featureset.hpp b/plugins/input/sqlite/sqlite_featureset.hpp
index 9fc5356..6fc5360 100644
--- a/plugins/input/sqlite/sqlite_featureset.hpp
+++ b/plugins/input/sqlite/sqlite_featureset.hpp
@@ -29,8 +29,8 @@
 #include <mapnik/wkb.hpp>
 
 // boost
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
+
+#include <memory>
 
 // sqlite
 #include "sqlite_resultset.hpp"
@@ -39,7 +39,7 @@
 class sqlite_featureset : public mapnik::Featureset
 {
 public:
-    sqlite_featureset(boost::shared_ptr<sqlite_resultset> rs,
+    sqlite_featureset(std::shared_ptr<sqlite_resultset> rs,
                       mapnik::context_ptr const& ctx,
                       std::string const& encoding,
                       mapnik::box2d<double> const& bbox,
@@ -50,9 +50,9 @@ public:
     mapnik::feature_ptr next();
 
 private:
-    boost::shared_ptr<sqlite_resultset> rs_;
+    std::shared_ptr<sqlite_resultset> rs_;
     mapnik::context_ptr ctx_;
-    boost::scoped_ptr<mapnik::transcoder> tr_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
     mapnik::box2d<double> bbox_;
     mapnik::wkbFormat format_;
     bool spatial_index_;
diff --git a/plugins/input/sqlite/sqlite_prepared.hpp b/plugins/input/sqlite/sqlite_prepared.hpp
index f10ad72..e05e5db 100644
--- a/plugins/input/sqlite/sqlite_prepared.hpp
+++ b/plugins/input/sqlite/sqlite_prepared.hpp
@@ -31,7 +31,7 @@
 #include <mapnik/noncopyable.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <string.h>
@@ -47,7 +47,7 @@ class prepared_index_statement : mapnik::noncopyable
 {
 
 public:
-    prepared_index_statement(boost::shared_ptr<sqlite_connection> ds, std::string const& sql)
+    prepared_index_statement(std::shared_ptr<sqlite_connection> ds, std::string const& sql)
         : ds_(ds),
           stmt_(0)
     {
@@ -133,7 +133,7 @@ public:
     }
 
 private:
-    boost::shared_ptr<sqlite_connection> ds_;
+    std::shared_ptr<sqlite_connection> ds_;
     sqlite3_stmt * stmt_;
 };
 
diff --git a/plugins/input/sqlite/sqlite_resultset.hpp b/plugins/input/sqlite/sqlite_resultset.hpp
index 909a4da..e8e6a16 100644
--- a/plugins/input/sqlite/sqlite_resultset.hpp
+++ b/plugins/input/sqlite/sqlite_resultset.hpp
@@ -126,7 +126,7 @@ public:
         return (const char*) sqlite3_column_text (stmt_, col);
     }
 
-    const void* column_blob (int col, int& bytes)
+    const char* column_blob (int col, int& bytes)
     {
         bytes = sqlite3_column_bytes (stmt_, col);
         return (const char*) sqlite3_column_blob (stmt_, col);
diff --git a/plugins/input/sqlite/sqlite_utils.hpp b/plugins/input/sqlite/sqlite_utils.hpp
index 05d6e28..06832f6 100644
--- a/plugins/input/sqlite/sqlite_utils.hpp
+++ b/plugins/input/sqlite/sqlite_utils.hpp
@@ -27,6 +27,7 @@
 #include <string>
 #include <vector>
 #include <algorithm>
+#include <memory>
 
 // mapnik
 #include <mapnik/debug.hpp>
@@ -38,9 +39,11 @@
 #include <mapnik/util/fs.hpp>
 
 // boost
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic pop
 
 // sqlite
 extern "C" {
@@ -146,7 +149,7 @@ public:
         return false;
     }
 
-    static void get_tables(boost::shared_ptr<sqlite_connection> ds,
+    static void get_tables(std::shared_ptr<sqlite_connection> ds,
                            std::vector<std::string> & tables)
     {
         std::ostringstream sql;
@@ -165,7 +168,7 @@ public:
         const int rc = sqlite3_prepare_v2 (*(*ds), sql.str().c_str(), -1, &stmt, 0);
         if (rc == SQLITE_OK)
         {
-            boost::shared_ptr<sqlite_resultset> rs = boost::make_shared<sqlite_resultset>(stmt);
+            std::shared_ptr<sqlite_resultset> rs = std::make_shared<sqlite_resultset>(stmt);
             while (rs->is_valid() && rs->step_next())
             {
                 const int type_oid = rs->column_type(0);
@@ -181,7 +184,7 @@ public:
         }
     }
 
-    static void query_extent(boost::shared_ptr<sqlite_resultset> rs,
+    static void query_extent(std::shared_ptr<sqlite_resultset> rs,
                              mapnik::box2d<double>& extent)
     {
 
@@ -192,7 +195,7 @@ public:
             const char* data = static_cast<const char*>(rs->column_blob(0, size));
             if (data)
             {
-                boost::ptr_vector<mapnik::geometry_type> paths;
+                mapnik::geometry_container paths;
                 if (mapnik::geometry_utils::from_wkb(paths, data, size, mapnik::wkbAuto))
                 {
                     for (unsigned i=0; i<paths.size(); ++i)
@@ -218,7 +221,7 @@ public:
 
     static bool create_spatial_index(std::string const& index_db,
                                      std::string const& index_table,
-                                     boost::shared_ptr<sqlite_resultset> rs)
+                                     std::shared_ptr<sqlite_resultset> rs)
     {
         /* TODO
            - speedups
@@ -236,7 +239,7 @@ public:
 #endif
 
         bool existed = mapnik::util::exists(index_db);
-        boost::shared_ptr<sqlite_connection> ds = boost::make_shared<sqlite_connection>(index_db,flags);
+        std::shared_ptr<sqlite_connection> ds = std::make_shared<sqlite_connection>(index_db,flags);
 
         bool one_success = false;
         try
@@ -279,7 +282,7 @@ public:
                 const char* data = (const char*) rs->column_blob(0, size);
                 if (data)
                 {
-                    boost::ptr_vector<mapnik::geometry_type> paths;
+                    mapnik::geometry_container paths;
                     mapnik::box2d<double> bbox;
                     if (mapnik::geometry_utils::from_wkb(paths, data, size, mapnik::wkbAuto))
                     {
@@ -356,7 +359,7 @@ public:
         mapnik::box2d<double> bbox;
     } rtree_type;
 
-    static void build_tree(boost::shared_ptr<sqlite_resultset> rs,
+    static void build_tree(std::shared_ptr<sqlite_resultset> rs,
                            std::vector<sqlite_utils::rtree_type> & rtree_list)
     {
 
@@ -366,7 +369,7 @@ public:
             const char* data = static_cast<const char*>(rs->column_blob(0, size));
             if (data)
             {
-                boost::ptr_vector<mapnik::geometry_type> paths;
+                mapnik::geometry_container paths;
                 if (mapnik::geometry_utils::from_wkb(paths, data, size, mapnik::wkbAuto))
                 {
                     for (unsigned i=0; i<paths.size(); ++i)
@@ -414,8 +417,8 @@ public:
 #endif
 
         bool existed = mapnik::util::exists(index_db);;
-        
-        boost::shared_ptr<sqlite_connection> ds = boost::make_shared<sqlite_connection>(index_db,flags);
+
+        std::shared_ptr<sqlite_connection> ds = std::make_shared<sqlite_connection>(index_db,flags);
 
         bool one_success = false;
         try
@@ -484,7 +487,7 @@ public:
         return false;
     }
 
-    static bool detect_extent(boost::shared_ptr<sqlite_connection> ds,
+    static bool detect_extent(std::shared_ptr<sqlite_connection> ds,
                               bool has_spatial_index,
                               mapnik::box2d<double> & extent,
                               std::string const& index_table,
@@ -500,7 +503,8 @@ public:
             std::ostringstream s;
             s << "SELECT xmin, ymin, xmax, ymax FROM " << metadata;
             s << " WHERE LOWER(f_table_name) = LOWER('" << geometry_table << "')";
-            boost::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
+            MAPNIK_LOG_DEBUG(sqlite) << "sqlite_datasource: executing: '" << s.str() << "'";
+            std::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
             if (rs->is_valid() && rs->step_next())
             {
                 double xmin = rs->column_double(0);
@@ -516,8 +520,8 @@ public:
             std::ostringstream s;
             s << "SELECT MIN(xmin), MIN(ymin), MAX(xmax), MAX(ymax) FROM "
               << index_table;
-
-            boost::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
+            MAPNIK_LOG_DEBUG(sqlite) << "sqlite_datasource: executing: '" << s.str() << "'";
+            std::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
             if (rs->is_valid() && rs->step_next())
             {
                 if (! rs->column_isnull(0))
@@ -537,20 +541,21 @@ public:
             std::ostringstream s;
             s << "SELECT " << geometry_field << "," << key_field
               << " FROM (" << table << ")";
-            boost::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
+            MAPNIK_LOG_DEBUG(sqlite) << "sqlite_datasource: executing: '" << s.str() << "'";
+            std::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
             sqlite_utils::query_extent(rs,extent);
             return true;
         }
         return false;
     }
 
-    static bool has_rtree(std::string const& index_table,boost::shared_ptr<sqlite_connection> ds)
+    static bool has_rtree(std::string const& index_table,std::shared_ptr<sqlite_connection> ds)
     {
         try
         {
             std::ostringstream s;
             s << "SELECT pkid,xmin,xmax,ymin,ymax FROM " << index_table << " LIMIT 1";
-            boost::shared_ptr<sqlite_resultset> rs = ds->execute_query(s.str());
+            std::shared_ptr<sqlite_resultset> rs = ds->execute_query(s.str());
             if (rs->is_valid() && rs->step_next())
             {
                 return true;
@@ -567,10 +572,10 @@ public:
     static bool detect_types_from_subquery(std::string const& query,
                                            std::string & geometry_field,
                                            mapnik::layer_descriptor & desc,
-                                           boost::shared_ptr<sqlite_connection> ds)
+                                           std::shared_ptr<sqlite_connection> ds)
     {
         bool found = false;
-        boost::shared_ptr<sqlite_resultset> rs(ds->execute_query(query));
+        std::shared_ptr<sqlite_resultset> rs(ds->execute_query(query));
         if (rs->is_valid() && rs->step_next())
         {
             for (int i = 0; i < rs->column_count(); ++i)
@@ -625,7 +630,7 @@ public:
                            std::string & field,
                            std::string & table,
                            mapnik::layer_descriptor & desc,
-                           boost::shared_ptr<sqlite_connection> ds)
+                           std::shared_ptr<sqlite_connection> ds)
     {
 
         // http://www.sqlite.org/pragma.html#pragma_table_info
@@ -634,7 +639,7 @@ public:
         // if the subquery-based type detection failed
         std::ostringstream s;
         s << "PRAGMA table_info(" << table << ")";
-        boost::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
+        std::shared_ptr<sqlite_resultset> rs(ds->execute_query(s.str()));
         bool found_table = false;
         bool found_pk = false;
         while (rs->is_valid() && rs->step_next())
diff --git a/plugins/input/templates/helloworld/Makefile b/plugins/input/templates/helloworld/Makefile
index 2caf7fc..962f176 100644
--- a/plugins/input/templates/helloworld/Makefile
+++ b/plugins/input/templates/helloworld/Makefile
@@ -1,6 +1,6 @@
-CXX = clang++
+# To use clang, run:  make CXX=clang++
 
-CXXFLAGS = $(shell mapnik-config --cflags)
+CXXFLAGS = $(shell mapnik-config --cflags) -fPIC
 
 LIBS = $(shell mapnik-config --libs --ldflags --dep-libs)
 
@@ -27,4 +27,4 @@ clean:
 deploy : all
 	cp hello.input $(shell mapnik-config --input-plugins)
 
-install: clean all deploy
\ No newline at end of file
+install: all deploy
diff --git a/plugins/input/templates/helloworld/build.py b/plugins/input/templates/helloworld/build.py
index d90efa2..a36aa1d 100644
--- a/plugins/input/templates/helloworld/build.py
+++ b/plugins/input/templates/helloworld/build.py
@@ -51,7 +51,7 @@ if env['PLUGIN_LINKING'] == 'shared':
     install_dest = env['MAPNIK_INPUT_PLUGINS_DEST']
 
     # only link mapnik if we are build an external shared object
-    libraries.append('mapnik')
+    libraries.append(env['MAPNIK_NAME'])
 
     TARGET = plugin_env.SharedLibrary(
                   # the name of the target to build, eg 'sqlite.input'
@@ -63,13 +63,7 @@ if env['PLUGIN_LINKING'] == 'shared':
                   # list of source files to compile
                   source=plugin_sources,
                   # libraries to link to
-                  LIBS=libraries,
-                  # any custom linkflags, eg. LDFLAGS
-                  # in this case CUSTOM_LDFLAGS comes
-                  # from Mapnik's main SConstruct file
-                  # and can be removed here if you do
-                  # not need it
-                  LINKFLAGS=env.get('CUSTOM_LDFLAGS')
+                  LIBS=libraries
                   )
 
     # if the plugin links to libmapnik ensure it is built first
diff --git a/plugins/input/templates/helloworld/hello_datasource.cpp b/plugins/input/templates/helloworld/hello_datasource.cpp
index 38b1d0e..9630740 100644
--- a/plugins/input/templates/helloworld/hello_datasource.cpp
+++ b/plugins/input/templates/helloworld/hello_datasource.cpp
@@ -3,7 +3,6 @@
 #include "hello_featureset.hpp"
 
 // boost
-#include <boost/make_shared.hpp>
 
 
 using mapnik::datasource;
@@ -12,8 +11,8 @@ using mapnik::parameters;
 DATASOURCE_PLUGIN(hello_datasource)
 
 hello_datasource::hello_datasource(parameters const& params)
-: datasource(params),
-    desc_(*params.get<std::string>("type"), *params.get<std::string>("encoding","utf-8")),
+  : datasource(params),
+    desc_(hello_datasource::name(), *params.get<std::string>("encoding","utf-8")),
     extent_()
 {
     this->init(params);
@@ -62,7 +61,7 @@ mapnik::featureset_ptr hello_datasource::features(mapnik::query const& q) const
     // if the query box intersects our world extent then query for features
     if (extent_.intersects(q.get_bbox()))
     {
-        return boost::make_shared<hello_featureset>(q.get_bbox(),desc_.get_encoding());
+        return std::make_shared<hello_featureset>(q.get_bbox(),desc_.get_encoding());
     }
 
     // otherwise return an empty featureset pointer
diff --git a/plugins/input/templates/helloworld/hello_datasource.hpp b/plugins/input/templates/helloworld/hello_datasource.hpp
index 018ff6f..432489d 100644
--- a/plugins/input/templates/helloworld/hello_datasource.hpp
+++ b/plugins/input/templates/helloworld/hello_datasource.hpp
@@ -12,7 +12,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 // stl
 #include <string>
diff --git a/plugins/input/templates/helloworld/hello_featureset.cpp b/plugins/input/templates/helloworld/hello_featureset.cpp
index c98b0e4..1f2cb50 100644
--- a/plugins/input/templates/helloworld/hello_featureset.cpp
+++ b/plugins/input/templates/helloworld/hello_featureset.cpp
@@ -1,9 +1,9 @@
 // mapnik
 #include <mapnik/feature_factory.hpp>
 #include <mapnik/geometry.hpp>
+#include <mapnik/value_types.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 
 #include "hello_featureset.hpp"
 
@@ -11,7 +11,7 @@ hello_featureset::hello_featureset(mapnik::box2d<double> const& box, std::string
     : box_(box),
       feature_id_(1),
       tr_(new mapnik::transcoder(encoding)),
-      ctx_(boost::make_shared<mapnik::context_type>()) { }
+      ctx_(std::make_shared<mapnik::context_type>()) { }
 
 hello_featureset::~hello_featureset() { }
 
@@ -32,7 +32,7 @@ mapnik::feature_ptr hello_featureset::next()
         ++feature_id_;
 
         // create an attribute pair of key:value
-        UnicodeString ustr = tr_->transcode("hello world!");
+        mapnik::value_unicode_string ustr = tr_->transcode("hello world!");
         feature->put(attribute,ustr);
 
         // we need a geometry to display so just for fun here
@@ -41,7 +41,7 @@ mapnik::feature_ptr hello_featureset::next()
         mapnik::coord2d center = box_.center();
 
         // create a new point geometry
-        mapnik::geometry_type * pt = new mapnik::geometry_type(mapnik::Point);
+        mapnik::geometry_type * pt = new mapnik::geometry_type(mapnik::geometry_type::types::Point);
 
         // we use path type geometries in Mapnik to fit nicely with AGG and Cairo
         // here we stick an x,y pair into the geometry using move_to()
@@ -53,7 +53,7 @@ mapnik::feature_ptr hello_featureset::next()
         // A feature usually will have just one geometry of a given type
         // but mapnik does support many geometries per feature of any type
         // so here we draw a line around the point
-        mapnik::geometry_type * line = new mapnik::geometry_type(mapnik::LineString);
+        mapnik::geometry_type * line = new mapnik::geometry_type(mapnik::geometry_type::types::LineString);
         line->move_to(box_.minx(),box_.miny());
         line->line_to(box_.minx(),box_.maxy());
         line->line_to(box_.maxx(),box_.maxy());
@@ -68,4 +68,3 @@ mapnik::feature_ptr hello_featureset::next()
     // otherwise return an empty feature
     return mapnik::feature_ptr();
 }
-
diff --git a/plugins/input/templates/helloworld/hello_featureset.hpp b/plugins/input/templates/helloworld/hello_featureset.hpp
index b73f150..43f338f 100644
--- a/plugins/input/templates/helloworld/hello_featureset.hpp
+++ b/plugins/input/templates/helloworld/hello_featureset.hpp
@@ -7,7 +7,7 @@
 #include <mapnik/unicode.hpp>
 
 // boost
-#include <boost/scoped_ptr.hpp> // needed for wrapping the transcoder
+ // needed for wrapping the transcoder
 
 class hello_featureset : public mapnik::Featureset
 {
@@ -25,7 +25,7 @@ private:
     // members are up to you, but these are recommended
     mapnik::box2d<double> box_;
     mapnik::value_integer feature_id_;
-    boost::scoped_ptr<mapnik::transcoder> tr_;
+    const std::unique_ptr<mapnik::transcoder> tr_;
     mapnik::context_ptr ctx_;
 };
 
diff --git a/plugins/input/topojson/build.py b/plugins/input/topojson/build.py
new file mode 100644
index 0000000..665ef82
--- /dev/null
+++ b/plugins/input/topojson/build.py
@@ -0,0 +1,65 @@
+#
+# This file is part of Mapnik (c++ mapping toolkit)
+#
+# Copyright (C) 2013 Artem Pavlenko
+#
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+#
+
+Import ('env')
+
+Import ('plugin_base')
+
+PLUGIN_NAME = 'topojson'
+
+plugin_env = plugin_base.Clone()
+
+plugin_sources = Split(
+  """
+  %(PLUGIN_NAME)s_datasource.cpp
+  %(PLUGIN_NAME)s_featureset.cpp
+  """ % locals()
+)
+
+# Link Library to Dependencies
+libraries = []
+libraries.append(env['ICU_LIB_NAME'])
+libraries.append('boost_system%s' % env['BOOST_APPEND'])
+libraries.append('mapnik-json')
+
+if env['PLUGIN_LINKING'] == 'shared':
+    libraries.append(env['MAPNIK_NAME'])
+
+    TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
+                                      SHLIBPREFIX='',
+                                      SHLIBSUFFIX='.input',
+                                      source=plugin_sources,
+                                      LIBS=libraries)
+
+    # if the plugin links to libmapnik ensure it is built first
+    Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
+    Depends(TARGET, env.subst('../../../src/json/libmapnik-json${LIBSUFFIX}'))
+
+    if 'uninstall' not in COMMAND_LINE_TARGETS:
+        env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
+        env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
+
+plugin_obj = {
+  'LIBS': libraries,
+  'SOURCES': plugin_sources,
+}
+
+Return('plugin_obj')
diff --git a/plugins/input/topojson/topojson_datasource.cpp b/plugins/input/topojson/topojson_datasource.cpp
new file mode 100644
index 0000000..8e92245
--- /dev/null
+++ b/plugins/input/topojson/topojson_datasource.cpp
@@ -0,0 +1,323 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include "topojson_datasource.hpp"
+#include "topojson_featureset.hpp"
+
+#include <fstream>
+#include <algorithm>
+
+// boost
+#include <boost/algorithm/string.hpp>
+
+// mapnik
+#include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/json/topojson_grammar.hpp>
+#include <mapnik/json/topojson_utils.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/util/file_io.hpp>
+#include <mapnik/make_unique.hpp>
+
+using mapnik::datasource;
+using mapnik::parameters;
+
+DATASOURCE_PLUGIN(topojson_datasource)
+
+struct attr_value_converter : public mapnik::util::static_visitor<mapnik::eAttributeType>
+{
+    mapnik::eAttributeType operator() (mapnik::value_integer /*val*/) const
+    {
+        return mapnik::Integer;
+    }
+
+    mapnik::eAttributeType operator() (double /*val*/) const
+    {
+        return mapnik::Double;
+    }
+
+    mapnik::eAttributeType operator() (float /*val*/) const
+    {
+        return mapnik::Double;
+    }
+
+    mapnik::eAttributeType operator() (bool /*val*/) const
+    {
+        return mapnik::Boolean;
+    }
+
+    mapnik::eAttributeType operator() (std::string const& /*val*/) const
+    {
+        return mapnik::String;
+    }
+
+    mapnik::eAttributeType operator() (mapnik::value_unicode_string const& /*val*/) const
+    {
+        return mapnik::String;
+    }
+
+    mapnik::eAttributeType operator() (mapnik::value_null const& /*val*/) const
+    {
+        return mapnik::String;
+    }
+};
+
+struct geometry_type_visitor : public mapnik::util::static_visitor<int>
+{
+    int operator() (mapnik::topojson::point const&) const
+    {
+        return static_cast<int>(mapnik::datasource::Point);
+    }
+    int operator() (mapnik::topojson::multi_point const&) const
+    {
+        return static_cast<int>(mapnik::datasource::Point);
+    }
+    int operator() (mapnik::topojson::linestring const&) const
+    {
+        return static_cast<int>(mapnik::datasource::LineString);
+    }
+    int operator() (mapnik::topojson::multi_linestring const&) const
+    {
+        return static_cast<int>(mapnik::datasource::LineString);
+    }
+    int operator() (mapnik::topojson::polygon const&) const
+    {
+        return static_cast<int>(mapnik::datasource::Polygon);
+    }
+    int operator() (mapnik::topojson::multi_polygon const&) const
+    {
+        return static_cast<int>(mapnik::datasource::Polygon);
+    }
+    int operator() (mapnik::topojson::invalid const&) const
+    {
+        return -1;
+    }
+};
+
+struct collect_attributes_visitor : public mapnik::util::static_visitor<void>
+{
+    mapnik::layer_descriptor & desc_;
+    collect_attributes_visitor(mapnik::layer_descriptor & desc):
+      desc_(desc) {}
+
+    void operator() (mapnik::topojson::invalid const&) {}
+
+    template <typename GeomType>
+    void operator() (GeomType const& g)
+    {
+        if (g.props)
+        {
+            for (auto const& p : *g.props)
+            {
+                desc_.add_descriptor(mapnik::attribute_descriptor(std::get<0>(p),
+                                                                  mapnik::util::apply_visitor(attr_value_converter(),
+                                                                                              std::get<1>(p))));
+            }
+        }
+    }
+};
+
+topojson_datasource::topojson_datasource(parameters const& params)
+  : datasource(params),
+    type_(datasource::Vector),
+    desc_(topojson_datasource::name(),
+          *params.get<std::string>("encoding","utf-8")),
+    filename_(),
+    inline_string_(),
+    extent_(),
+    tr_(new mapnik::transcoder(*params.get<std::string>("encoding","utf-8"))),
+    tree_(nullptr)
+{
+    boost::optional<std::string> inline_string = params.get<std::string>("inline");
+    if (inline_string)
+    {
+        inline_string_ = *inline_string;
+    }
+    else
+    {
+        boost::optional<std::string> file = params.get<std::string>("file");
+        if (!file) throw mapnik::datasource_exception("TopoJSON Plugin: missing <file> parameter");
+
+        boost::optional<std::string> base = params.get<std::string>("base");
+        if (base)
+            filename_ = *base + "/" + *file;
+        else
+            filename_ = *file;
+    }
+    if (!inline_string_.empty())
+    {
+        parse_topojson(inline_string_);
+    }
+    else
+    {
+        mapnik::util::file file(filename_);
+        if (!file.open())
+        {
+            throw mapnik::datasource_exception("TopoJSON Plugin: could not open: '" + filename_ + "'");
+        }
+        std::string file_buffer;
+        file_buffer.resize(file.size());
+        std::fread(&file_buffer[0], file.size(), 1, file.get());
+        parse_topojson(file_buffer);
+    }
+}
+
+namespace {
+using base_iterator_type = std::string::const_iterator;
+const mapnik::topojson::topojson_grammar<base_iterator_type> g;
+}
+
+template <typename T>
+void topojson_datasource::parse_topojson(T const& buffer)
+{
+    boost::spirit::standard_wide::space_type space;
+    bool result = boost::spirit::qi::phrase_parse(buffer.begin(), buffer.end(), g, space, topo_);
+    if (!result)
+    {
+        throw mapnik::datasource_exception("topojson_datasource: Failed parse TopoJSON file '" + filename_ + "'");
+    }
+
+#if BOOST_VERSION >= 105600
+    using values_container = std::vector< std::pair<box_type, std::size_t> >;
+    values_container values;
+    values.reserve(topo_.geometries.size());
+#else
+    tree_ = std::make_unique<spatial_index_type>(16, 4);
+#endif
+
+    std::size_t geometry_index = 0;
+
+    for (auto const& geom : topo_.geometries)
+    {
+        mapnik::box2d<double> box = mapnik::util::apply_visitor(mapnik::topojson::bounding_box_visitor(topo_), geom);
+        if (box.valid())
+        {
+            if (geometry_index == 0)
+            {
+                extent_ = box;
+                collect_attributes_visitor assessor(desc_);
+                mapnik::util::apply_visitor( std::ref(assessor), geom);
+            }
+            else
+            {
+                extent_.expand_to_include(box);
+            }
+        }
+#if BOOST_VERSION >= 105600
+        values.emplace_back(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())), geometry_index);
+#else
+        tree_->insert(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())),geometry_index);
+#endif
+        ++geometry_index;
+    }
+
+#if BOOST_VERSION >= 105600
+    // packing algorithm
+    tree_ = std::make_unique<spatial_index_type>(values);
+#endif
+}
+
+topojson_datasource::~topojson_datasource() { }
+
+const char * topojson_datasource::name()
+{
+    return "topojson";
+}
+
+boost::optional<mapnik::datasource::geometry_t> topojson_datasource::get_geometry_type() const
+{
+    boost::optional<mapnik::datasource::geometry_t> result;
+    int multi_type = 0;
+    std::size_t num_features = topo_.geometries.size();
+    for (std::size_t i = 0; i < num_features && i < 5; ++i)
+    {
+        mapnik::topojson::geometry const& geom = topo_.geometries[i];
+        int type = mapnik::util::apply_visitor(geometry_type_visitor(),geom);
+        if (type > 0)
+        {
+            if (multi_type > 0 && multi_type != type)
+            {
+                result.reset(mapnik::datasource::Collection);
+                return result;
+            }
+            else
+            {
+                result.reset(static_cast<mapnik::datasource::geometry_t>(type));
+            }
+            multi_type = type;
+        }
+    }
+    return result;
+}
+
+mapnik::datasource::datasource_t topojson_datasource::type() const
+{
+    return type_;
+}
+
+mapnik::box2d<double> topojson_datasource::envelope() const
+{
+    return extent_;
+}
+
+mapnik::layer_descriptor topojson_datasource::get_descriptor() const
+{
+    return desc_;
+}
+
+mapnik::featureset_ptr topojson_datasource::features(mapnik::query const& q) const
+{
+    // if the query box intersects our world extent then query for features
+    mapnik::box2d<double> const& b = q.get_bbox();
+    if (extent_.intersects(b))
+    {
+        box_type box(point_type(b.minx(),b.miny()),point_type(b.maxx(),b.maxy()));
+#if BOOST_VERSION >= 105600
+        topojson_featureset::array_type index_array;
+        if (tree_)
+        {
+            tree_->query(boost::geometry::index::intersects(box),std::back_inserter(index_array));
+            return std::make_shared<topojson_featureset>(topo_, *tr_, std::move(index_array));
+        }
+#else
+        if (tree_)
+        {
+            return std::make_shared<topojson_featureset>(topo_, *tr_, tree_->find(box));
+        }
+#endif
+    }
+    // otherwise return an empty featureset pointer
+    return mapnik::featureset_ptr();
+}
+
+mapnik::featureset_ptr topojson_datasource::features_at_point(mapnik::coord2d const& pt, double tol) const
+{
+    mapnik::box2d<double> query_bbox(pt, pt);
+    query_bbox.pad(tol);
+    mapnik::query q(query_bbox);
+    for (auto const& attr_info : desc_.get_descriptors())
+    {
+        q.add_property_name(attr_info.get_name());
+    }
+    return features(q);
+}
diff --git a/plugins/input/topojson/topojson_datasource.hpp b/plugins/input/topojson/topojson_datasource.hpp
new file mode 100644
index 0000000..cb7e046
--- /dev/null
+++ b/plugins/input/topojson/topojson_datasource.hpp
@@ -0,0 +1,101 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef TOPOJSON_DATASOURCE_HPP
+#define TOPOJSON_DATASOURCE_HPP
+
+// mapnik
+#include <mapnik/datasource.hpp>
+#include <mapnik/params.hpp>
+#include <mapnik/query.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/coord.hpp>
+#include <mapnik/feature_layer_desc.hpp>
+#include <mapnik/unicode.hpp>
+#include <mapnik/json/topology.hpp>
+// boost
+#include <boost/optional.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry.hpp>
+#include <boost/version.hpp>
+#if BOOST_VERSION >= 105600
+#include <boost/geometry/index/rtree.hpp>
+#else
+#include <boost/geometry/extensions/index/rtree/rtree.hpp>
+#endif
+#pragma GCC diagnostic pop
+
+// stl
+#include <vector>
+#include <string>
+#include <map>
+#include <deque>
+#include <memory>
+
+class topojson_datasource : public mapnik::datasource
+{
+public:
+    using point_type = boost::geometry::model::d2::point_xy<double>;
+    using box_type = boost::geometry::model::box<point_type>;
+
+#if BOOST_VERSION >= 105600
+    using item_type = std::pair<box_type,std::size_t>;
+    using linear_type = boost::geometry::index::linear<16,4>;
+    using spatial_index_type = boost::geometry::index::rtree<item_type,linear_type>;
+#else
+    using item_type = std::size_t;
+    using spatial_index_type = boost::geometry::index::rtree<box_type,std::size_t>;
+#endif
+
+    // constructor
+    topojson_datasource(mapnik::parameters const& params);
+    virtual ~topojson_datasource ();
+    mapnik::datasource::datasource_t type() const;
+    static const char * name();
+    mapnik::featureset_ptr features(mapnik::query const& q) const;
+    mapnik::featureset_ptr features_at_point(mapnik::coord2d const& pt, double tol = 0) const;
+    mapnik::box2d<double> envelope() const;
+    mapnik::layer_descriptor get_descriptor() const;
+    boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
+    template <typename T>
+    void parse_topojson(T const& buffer);
+private:
+    mapnik::datasource::datasource_t type_;
+    std::map<std::string, mapnik::parameters> statistics_;
+    mapnik::layer_descriptor desc_;
+    std::string filename_;
+    std::string inline_string_;
+    mapnik::box2d<double> extent_;
+    std::unique_ptr<mapnik::transcoder> tr_;
+    mapnik::topojson::topology topo_;
+    std::unique_ptr<spatial_index_type> tree_;
+};
+
+
+#endif // FILE_DATASOURCE_HPP
diff --git a/plugins/input/topojson/topojson_featureset.cpp b/plugins/input/topojson/topojson_featureset.cpp
new file mode 100644
index 0000000..b1231a0
--- /dev/null
+++ b/plugins/input/topojson/topojson_featureset.cpp
@@ -0,0 +1,392 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/feature_factory.hpp>
+#include <mapnik/json/topology.hpp>
+#include <mapnik/util/variant.hpp>
+// stl
+#include <string>
+#include <vector>
+#include <fstream>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/range/adaptor/reversed.hpp>
+#include <boost/range/adaptor/sliced.hpp>
+#include <boost/geometry.hpp>
+#include <boost/geometry/algorithms/simplify.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+#pragma GCC diagnostic pop
+
+#include "topojson_featureset.hpp"
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(mapnik::topojson::coordinate, double, boost::geometry::cs::cartesian, x, y)
+BOOST_GEOMETRY_REGISTER_LINESTRING(std::vector<mapnik::topojson::coordinate>)
+
+namespace mapnik { namespace topojson {
+
+struct attribute_value_visitor
+    :  mapnik::util::static_visitor<mapnik::value>
+{
+public:
+    attribute_value_visitor(mapnik::transcoder const& tr)
+        : tr_(tr) {}
+
+    mapnik::value operator()(std::string const& val) const
+    {
+        return mapnik::value(tr_.transcode(val.c_str()));
+    }
+
+    template <typename T>
+    mapnik::value operator()(T const& val) const
+    {
+        return mapnik::value(val);
+    }
+
+    mapnik::transcoder const& tr_;
+};
+
+template <typename T>
+void assign_properties(mapnik::feature_impl & feature, T const& geom, mapnik::transcoder const& tr)
+{
+    if ( geom.props)
+    {
+        for (auto const& p : *geom.props)
+        {
+            feature.put_new(std::get<0>(p), mapnik::util::apply_visitor(attribute_value_visitor(tr),std::get<1>(p)));
+        }
+    }
+}
+
+template <typename Context>
+struct feature_generator : public mapnik::util::static_visitor<mapnik::feature_ptr>
+{
+    feature_generator(Context & ctx,  mapnik::transcoder const& tr, topology const& topo, std::size_t feature_id)
+        : ctx_(ctx),
+          tr_(tr),
+          topo_(topo),
+          feature_id_(feature_id) {}
+
+    feature_ptr operator() (point const& pt) const
+    {
+        mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx_,feature_id_));
+        std::unique_ptr<geometry_type> point_ptr(new geometry_type(geometry_type::types::Point));
+
+        double x = pt.coord.x;
+        double y = pt.coord.y;
+        if (topo_.tr)
+        {
+            x =  x * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+            y =  y * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+        }
+
+        point_ptr->move_to(x,y);
+        feature->paths().push_back(point_ptr.release());
+        assign_properties(*feature, pt, tr_);
+        return feature;
+    }
+
+    feature_ptr operator() (multi_point const& multi_pt) const
+    {
+        mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx_,feature_id_));
+
+        for (auto const& pt : multi_pt.points)
+        {
+            std::unique_ptr<geometry_type> point_ptr(new geometry_type(geometry_type::types::Point));
+
+            double x = pt.x;
+            double y = pt.y;
+            if (topo_.tr)
+            {
+                x =  x * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                y =  y * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+            }
+
+            point_ptr->move_to(x,y);
+            feature->paths().push_back(point_ptr.release());
+        }
+        assign_properties(*feature, multi_pt, tr_);
+        return feature;
+    }
+
+    feature_ptr operator() (linestring const& line) const
+    {
+        mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx_,feature_id_));
+        std::unique_ptr<geometry_type> line_ptr(new geometry_type(geometry_type::types::LineString));
+
+        double px = 0, py = 0;
+        index_type arc_index = line.ring;
+        bool first = true;
+        for (auto pt : topo_.arcs[arc_index].coordinates)
+        {
+            double x = pt.x;
+            double y = pt.y;
+            if (topo_.tr)
+            {
+                x =  (px += x) * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                y =  (py += y) * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+            }
+            if (first)
+            {
+                first = false;
+                line_ptr->move_to(x,y);
+            }
+            else
+            {
+                line_ptr->line_to(x,y);
+            }
+        }
+
+        feature->paths().push_back(line_ptr.release());
+        assign_properties(*feature, line, tr_);
+        return feature;
+    }
+
+    feature_ptr operator() (multi_linestring const& multi_line) const
+    {
+        mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx_,feature_id_));
+
+        for (auto const& index : multi_line.rings)
+        {
+            std::unique_ptr<geometry_type> line_ptr(new geometry_type(geometry_type::types::LineString));
+
+            double px = 0, py = 0;
+            bool first = true;
+            bool reverse = index < 0;
+            index_type arc_index = reverse ? std::abs(index) - 1 : index;
+            for (auto pt : topo_.arcs[arc_index].coordinates)
+            {
+                double x = pt.x;
+                double y = pt.y;
+                if (topo_.tr)
+                {
+                    x =  (px += x) * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                    y =  (py += y) * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+                }
+                if (first)
+                {
+                    first = false;
+                    line_ptr->move_to(x,y);
+                }
+                else
+                {
+                    line_ptr->line_to(x,y);
+                }
+            }
+            feature->paths().push_back(line_ptr.release());
+        }
+        assign_properties(*feature, multi_line, tr_);
+        return feature;
+    }
+
+    feature_ptr operator() (polygon const& poly) const
+    {
+        mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx_,feature_id_));
+        std::unique_ptr<geometry_type> poly_ptr(new geometry_type(geometry_type::types::Polygon));
+        std::vector<mapnik::topojson::coordinate> processed_coords;
+
+        for (auto const& ring : poly.rings)
+        {
+            bool first = true;
+            for (auto const& index : ring)
+            {
+                double px = 0, py = 0;
+                bool reverse = index < 0;
+                index_type arc_index = reverse ? std::abs(index) - 1 : index;
+                auto const& coords = topo_.arcs[arc_index].coordinates;
+                processed_coords.clear();
+                processed_coords.reserve(coords.size());
+                for (auto const& pt : coords )
+                {
+                    double x = pt.x;
+                    double y = pt.y;
+
+                    if (topo_.tr)
+                    {
+                        transform const& tr = *topo_.tr;
+                        x =  (px += x) * tr.scale_x + tr.translate_x;
+                        y =  (py += y) * tr.scale_y + tr.translate_y;
+                    }
+                    processed_coords.emplace_back(coordinate{x,y});
+                }
+
+
+                // simplify
+                std::vector<mapnik::topojson::coordinate> simplified(processed_coords.size());
+                boost::geometry::simplify(processed_coords, simplified, 2);
+
+                using namespace boost::adaptors;
+
+                if (reverse)
+                {
+                    for (auto const& c : simplified | reversed | sliced(0, simplified.size()-1))
+                    {
+                        if (first)
+                        {
+                            first = false;
+                            poly_ptr->move_to(c.x,c.y);
+                        }
+                        else poly_ptr->line_to(c.x,c.y);
+                    }
+                }
+                else
+                {
+                    for (auto const& c : simplified | sliced(0, simplified.size()-1))
+                    {
+                        if (first)
+                        {
+                            first = false;
+                            poly_ptr->move_to(c.x,c.y);
+                        }
+                        else poly_ptr->line_to(c.x,c.y);
+                    }
+                }
+            }
+            poly_ptr->close_path();
+        }
+
+        feature->paths().push_back(poly_ptr.release());
+        assign_properties(*feature, poly, tr_);
+        return feature;
+    }
+
+    feature_ptr operator() (multi_polygon const& multi_poly) const
+    {
+        mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx_,feature_id_));
+        std::vector<mapnik::topojson::coordinate> processed_coords;
+        for (auto const& poly : multi_poly.polygons)
+        {
+            std::unique_ptr<geometry_type> poly_ptr(new geometry_type(geometry_type::types::Polygon));
+            for (auto const& ring : poly)
+            {
+                bool first = true;
+                for (auto const& index : ring)
+                {
+                    double px = 0, py = 0;
+                    bool reverse = index < 0;
+                    index_type arc_index = reverse ? std::abs(index) - 1 : index;
+                    auto const& coords = topo_.arcs[arc_index].coordinates;
+                    processed_coords.clear();
+                    processed_coords.reserve(coords.size());
+                    for (auto const& pt : coords )
+                    {
+                        double x = pt.x;
+                        double y = pt.y;
+
+                        if (topo_.tr)
+                        {
+                            x =  (px += x) * (*topo_.tr).scale_x + (*topo_.tr).translate_x;
+                            y =  (py += y) * (*topo_.tr).scale_y + (*topo_.tr).translate_y;
+                        }
+                        processed_coords.emplace_back(coordinate{x,y});
+                    }
+
+                    using namespace boost::adaptors;
+
+                    if (reverse)
+                    {
+                        for (auto const& c : (processed_coords | reversed | sliced(0,processed_coords.size() - 1)))
+                        {
+                            if (first)
+                            {
+                                first = false;
+                                poly_ptr->move_to(c.x,c.y);
+                            }
+                            else poly_ptr->line_to(c.x,c.y);
+                        }
+                    }
+                    else
+                    {
+                        for (auto const& c : processed_coords | sliced(0,processed_coords.size() - 1))
+                        {
+                            if (first)
+                            {
+                                first = false;
+                                poly_ptr->move_to(c.x,c.y);
+                            }
+                            else poly_ptr->line_to(c.x,c.y);
+                        }
+                    }
+                }
+                poly_ptr->close_path();
+            }
+            feature->paths().push_back(poly_ptr.release());
+        }
+        assign_properties(*feature, multi_poly, tr_);
+        return feature;
+    }
+
+    template<typename T>
+    feature_ptr operator() (T const& ) const
+    {
+        return feature_ptr();
+    }
+
+    Context & ctx_;
+    mapnik::transcoder const& tr_;
+    topology const& topo_;
+    std::size_t feature_id_;
+};
+
+}}
+
+topojson_featureset::topojson_featureset(mapnik::topojson::topology const& topo,
+                                         mapnik::transcoder const& tr,
+                                         array_type && index_array)
+    : ctx_(std::make_shared<mapnik::context_type>()),
+      topo_(topo),
+      tr_(tr),
+      index_array_(std::move(index_array)),
+      index_itr_(index_array_.begin()),
+      index_end_(index_array_.end()),
+      feature_id_ (0) {}
+
+topojson_featureset::~topojson_featureset() {}
+
+mapnik::feature_ptr topojson_featureset::next()
+{
+    if (index_itr_ != index_end_)
+    {
+#if BOOST_VERSION >= 105600
+        topojson_datasource::item_type const& item = *index_itr_++;
+        std::size_t index = item.second;
+#else
+        std::size_t index = *index_itr_++;
+#endif
+        if ( index < topo_.geometries.size())
+        {
+            mapnik::topojson::geometry const& geom = topo_.geometries[index];
+            mapnik::feature_ptr feature = mapnik::util::apply_visitor(
+                mapnik::topojson::feature_generator<mapnik::context_ptr>(ctx_, tr_, topo_, feature_id_++),
+                geom);
+            return feature;
+        }
+    }
+
+    return mapnik::feature_ptr();
+}
diff --git a/plugins/input/topojson/topojson_featureset.hpp b/plugins/input/topojson/topojson_featureset.hpp
new file mode 100644
index 0000000..78ab136
--- /dev/null
+++ b/plugins/input/topojson/topojson_featureset.hpp
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#ifndef TOPOJSON_FEATURESET_HPP
+#define TOPOJSON_FEATURESET_HPP
+
+#include <mapnik/feature.hpp>
+#include "topojson_datasource.hpp"
+
+#include <vector>
+#include <deque>
+
+class topojson_featureset : public mapnik::Featureset
+{
+public:
+    typedef std::deque<topojson_datasource::item_type> array_type;
+    topojson_featureset(mapnik::topojson::topology const& topo,
+                        mapnik::transcoder const& tr,
+                        array_type && index_array);
+
+    virtual ~topojson_featureset();
+    mapnik::feature_ptr next();
+
+private:
+    mapnik::context_ptr ctx_;
+    mapnik::box2d<double> box_;
+    mapnik::topojson::topology const& topo_;
+    mapnik::transcoder const& tr_;
+    const array_type index_array_;
+    array_type::const_iterator index_itr_;
+    array_type::const_iterator index_end_;
+    std::size_t feature_id_;
+};
+
+#endif // TOPOJSON_FEATURESET_HPP
diff --git a/run_tests b/run_tests
index ccb0451..5dab76b 100755
--- a/run_tests
+++ b/run_tests
@@ -1,21 +1,21 @@
-#!/bin/sh
+#!/bin/bash
 
 failures=0
 
+source ./localize.sh
+PYTHON=${PYTHON:-python}
+
 echo "*** Running visual tests..."
-python tests/visual_tests/test.py -q
+$PYTHON tests/visual_tests/test.py -q
 failures=$((failures+$?))
 
 echo "*** Running C++ tests..."
-for FILE in tests/cpp_tests/*-bin; do 
-	${FILE} -q -d .;
-  failures=$((failures+$?))
-done
-
+./tests/cpp_tests/run
+failures=$((failures+$?))
 echo
 
 echo "*** Running python tests..."
-python tests/run_tests.py -q
+$PYTHON tests/run_tests.py -q
 failures=$((failures+$?))
 
 exit $failures
diff --git a/src/agg/agg_renderer.cpp b/src/agg/agg_renderer.cpp
index f3e6cea..1297651 100644
--- a/src/agg/agg_renderer.cpp
+++ b/src/agg/agg_renderer.cpp
@@ -25,7 +25,6 @@
 #include <mapnik/agg_rasterizer.hpp>
 #include <mapnik/agg_helpers.hpp>
 #include <mapnik/graphics.hpp>
-
 #include <mapnik/rule.hpp>
 #include <mapnik/debug.hpp>
 #include <mapnik/layer.hpp>
@@ -41,14 +40,13 @@
 #include <mapnik/svg/svg_renderer_agg.hpp>
 #include <mapnik/svg/svg_path_adapter.hpp>
 #include <mapnik/pixel_position.hpp>
-
 #include <mapnik/image_compositing.hpp>
 #include <mapnik/image_filter.hpp>
 #include <mapnik/image_util.hpp>
 // agg
-#define AGG_RENDERING_BUFFER row_ptr_cache<int8u>
 #include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
 #include "agg_scanline_u.h"
 #include "agg_image_filters.h"
 #include "agg_trans_bilinear.h"
@@ -56,7 +54,6 @@
 #include "agg_image_accessors.h"
 #include "agg_span_image_filter_rgba.h"
 // boost
-#include <boost/make_shared.hpp>
 #include <boost/math/special_functions/round.hpp>
 
 // stl
@@ -65,75 +62,54 @@
 namespace mapnik
 {
 
-template <typename T>
-agg_renderer<T>::agg_renderer(Map const& m, T & pixmap, double scale_factor, unsigned offset_x, unsigned offset_y)
+template <typename T0, typename T1>
+agg_renderer<T0,T1>::agg_renderer(Map const& m, T0 & pixmap, double scale_factor, unsigned offset_x, unsigned offset_y)
     : feature_style_processor<agg_renderer>(m, scale_factor),
       pixmap_(pixmap),
       internal_buffer_(),
       current_buffer_(&pixmap),
       style_level_compositing_(false),
-      width_(pixmap_.width()),
-      height_(pixmap_.height()),
-      scale_factor_(scale_factor),
-      t_(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y),
-      font_engine_(),
-      font_manager_(font_engine_),
-      detector_(boost::make_shared<label_collision_detector4>(box2d<double>(-m.buffer_size(), -m.buffer_size(), m.width() + m.buffer_size() ,m.height() + m.buffer_size()))),
       ras_ptr(new rasterizer),
-      query_extent_(),
       gamma_method_(GAMMA_POWER),
-      gamma_(1.0)
+      gamma_(1.0),
+      common_(m, attributes(), offset_x, offset_y, m.width(), m.height(), scale_factor)
 {
     setup(m);
 }
 
-template <typename T>
-agg_renderer<T>::agg_renderer(Map const& m, request const& req, T & pixmap, double scale_factor, unsigned offset_x, unsigned offset_y)
+template <typename T0, typename T1>
+agg_renderer<T0,T1>::agg_renderer(Map const& m, request const& req, attributes const& vars, T0 & pixmap, double scale_factor, unsigned offset_x, unsigned offset_y)
     : feature_style_processor<agg_renderer>(m, scale_factor),
       pixmap_(pixmap),
       internal_buffer_(),
       current_buffer_(&pixmap),
       style_level_compositing_(false),
-      width_(pixmap_.width()),
-      height_(pixmap_.height()),
-      scale_factor_(scale_factor),
-      t_(req.width(),req.height(),req.extent(),offset_x,offset_y),
-      font_engine_(),
-      font_manager_(font_engine_),
-      detector_(boost::make_shared<label_collision_detector4>(box2d<double>(-req.buffer_size(), -req.buffer_size(), req.width() + req.buffer_size() ,req.height() + req.buffer_size()))),
       ras_ptr(new rasterizer),
-      query_extent_(),
       gamma_method_(GAMMA_POWER),
-      gamma_(1.0)
+      gamma_(1.0),
+      common_(m, req, vars, offset_x, offset_y, req.width(), req.height(), scale_factor)
 {
     setup(m);
 }
 
-template <typename T>
-agg_renderer<T>::agg_renderer(Map const& m, T & pixmap, boost::shared_ptr<label_collision_detector4> detector,
+template <typename T0, typename T1>
+agg_renderer<T0,T1>::agg_renderer(Map const& m, T0 & pixmap, std::shared_ptr<T1> detector,
                               double scale_factor, unsigned offset_x, unsigned offset_y)
     : feature_style_processor<agg_renderer>(m, scale_factor),
       pixmap_(pixmap),
       internal_buffer_(),
       current_buffer_(&pixmap),
       style_level_compositing_(false),
-      width_(pixmap_.width()),
-      height_(pixmap_.height()),
-      scale_factor_(scale_factor),
-      t_(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y),
-      font_engine_(),
-      font_manager_(font_engine_),
-      detector_(detector),
       ras_ptr(new rasterizer),
-      query_extent_(),
       gamma_method_(GAMMA_POWER),
-      gamma_(1.0)
+      gamma_(1.0),
+      common_(m, attributes(), offset_x, offset_y, m.width(), m.height(), scale_factor, detector)
 {
     setup(m);
 }
 
-template <typename T>
-void agg_renderer<T>::setup(Map const &m)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::setup(Map const &m)
 {
     boost::optional<color> const& bg = m.background();
     if (bg)
@@ -163,13 +139,13 @@ void agg_renderer<T>::setup(Map const &m)
             if ( w > 0 && h > 0)
             {
                 // repeat background-image both vertically and horizontally
-                unsigned x_steps = unsigned(std::ceil(width_/double(w)));
-                unsigned y_steps = unsigned(std::ceil(height_/double(h)));
+                unsigned x_steps = static_cast<unsigned>(std::ceil(common_.width_/double(w)));
+                unsigned y_steps = static_cast<unsigned>(std::ceil(common_.height_/double(h)));
                 for (unsigned x=0;x<x_steps;++x)
                 {
                     for (unsigned y=0;y<y_steps;++y)
                     {
-                        composite(pixmap_.data(),*bg_image, src_over, 1.0f, x*w, y*h, false);
+                        composite(pixmap_.data(),*bg_image, m.background_image_comp_op(), m.background_image_opacity(), x*w, y*h, false);
                     }
                 }
             }
@@ -178,28 +154,28 @@ void agg_renderer<T>::setup(Map const &m)
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Scale=" << m.scale();
 }
 
-template <typename T>
-agg_renderer<T>::~agg_renderer() {}
+template <typename T0, typename T1>
+agg_renderer<T0,T1>::~agg_renderer() {}
 
-template <typename T>
-void agg_renderer<T>::start_map_processing(Map const& map)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::start_map_processing(Map const& map)
 {
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Start map processing bbox=" << map.get_current_extent();
-    ras_ptr->clip_box(0,0,width_,height_);
+    ras_ptr->clip_box(0,0,common_.width_,common_.height_);
 }
 
-template <typename T>
-void agg_renderer<T>::end_map_processing(Map const& )
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::end_map_processing(Map const& )
 {
 
-    agg::rendering_buffer buf(pixmap_.raw_data(),width_,height_, width_ * 4);
-    agg::pixfmt_rgba32 pixf(buf);
+    agg::rendering_buffer buf(pixmap_.raw_data(),common_.width_,common_.height_, common_.width_ * 4);
+    agg::pixfmt_rgba32_pre pixf(buf);
     pixf.demultiply();
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: End map processing";
 }
 
-template <typename T>
-void agg_renderer<T>::start_layer_processing(layer const& lay, box2d<double> const& query_extent)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::start_layer_processing(layer const& lay, box2d<double> const& query_extent)
 {
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Start processing layer=" << lay.name();
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: -- datasource=" << lay.datasource().get();
@@ -207,25 +183,25 @@ void agg_renderer<T>::start_layer_processing(layer const& lay, box2d<double> con
 
     if (lay.clear_label_cache())
     {
-        detector_->clear();
+        common_.detector_->clear();
     }
 
-    query_extent_ = query_extent;
+    common_.query_extent_ = query_extent;
     boost::optional<box2d<double> > const& maximum_extent = lay.maximum_extent();
     if (maximum_extent)
     {
-        query_extent_.clip(*maximum_extent);
+        common_.query_extent_.clip(*maximum_extent);
     }
 }
 
-template <typename T>
-void agg_renderer<T>::end_layer_processing(layer const&)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::end_layer_processing(layer const&)
 {
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: End layer processing";
 }
 
-template <typename T>
-void agg_renderer<T>::start_style_processing(feature_type_style const& st)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::start_style_processing(feature_type_style const& st)
 {
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Start processing style";
     if (st.comp_op() || st.image_filters().size() > 0 || st.get_opacity() < 1)
@@ -239,24 +215,58 @@ void agg_renderer<T>::start_style_processing(feature_type_style const& st)
 
     if (style_level_compositing_)
     {
-        if (!internal_buffer_)
+        if (st.image_filters_inflate())
         {
-            internal_buffer_ = boost::make_shared<buffer_type>(pixmap_.width(),pixmap_.height());
+            int radius = 0;
+            mapnik::filter::filter_radius_visitor visitor(radius);
+            for (mapnik::filter::filter_type const& filter_tag : st.image_filters())
+            {
+                util::apply_visitor(visitor, filter_tag);
+            }
+            if (radius > common_.t_.offset())
+            {
+                common_.t_.set_offset(radius);
+            }
+            int offset = common_.t_.offset();
+            unsigned target_width = common_.width_ + (offset * 2);
+            unsigned target_height = common_.height_ + (offset * 2);
+            ras_ptr->clip_box(-int(offset*2),-int(offset*2),target_width,target_height);
+            if (!internal_buffer_ ||
+               (internal_buffer_->width() < target_width ||
+                internal_buffer_->height() < target_height))
+            {
+                internal_buffer_ = std::make_shared<buffer_type>(target_width,target_height);
+            }
+            else
+            {
+                internal_buffer_->set_background(color(0,0,0,0)); // fill with transparent colour
+            }
         }
         else
         {
-            internal_buffer_->set_background(color(0,0,0,0)); // fill with transparent colour
+            if (!internal_buffer_)
+            {
+                internal_buffer_ = std::make_shared<buffer_type>(common_.width_,common_.height_);
+            }
+            else
+            {
+                internal_buffer_->set_background(color(0,0,0,0)); // fill with transparent colour
+            }
+            common_.t_.set_offset(0);
+            ras_ptr->clip_box(0,0,common_.width_,common_.height_);
         }
         current_buffer_ = internal_buffer_.get();
     }
     else
     {
+        common_.t_.set_offset(0);
+        ras_ptr->clip_box(0,0,common_.width_,common_.height_);
         current_buffer_ = &pixmap_;
     }
 }
 
-template <typename T>
-void agg_renderer<T>::end_style_processing(feature_type_style const& st)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::end_style_processing(feature_type_style const& st)
 {
     if (style_level_compositing_)
     {
@@ -265,45 +275,49 @@ void agg_renderer<T>::end_style_processing(feature_type_style const& st)
         {
             blend_from = true;
             mapnik::filter::filter_visitor<image_32> visitor(*current_buffer_);
-            BOOST_FOREACH(mapnik::filter::filter_type const& filter_tag, st.image_filters())
+            for (mapnik::filter::filter_type const& filter_tag : st.image_filters())
             {
-                boost::apply_visitor(visitor, filter_tag);
+                util::apply_visitor(visitor, filter_tag);
             }
         }
-
         if (st.comp_op())
         {
-            composite(pixmap_.data(),current_buffer_->data(), *st.comp_op(), st.get_opacity(), 0, 0, false);
+            composite(pixmap_.data(), current_buffer_->data(),
+                      *st.comp_op(), st.get_opacity(),
+                      -common_.t_.offset(),
+                      -common_.t_.offset(), false);
         }
-        else if (blend_from || st.get_opacity() < 1)
+        else if (blend_from || st.get_opacity() < 1.0)
         {
-            composite(pixmap_.data(),current_buffer_->data(), src_over, st.get_opacity(), 0, 0, false);
+            composite(pixmap_.data(), current_buffer_->data(),
+                      src_over, st.get_opacity(),
+                      -common_.t_.offset(),
+                      -common_.t_.offset(), false);
         }
     }
     // apply any 'direct' image filters
     mapnik::filter::filter_visitor<image_32> visitor(pixmap_);
-    BOOST_FOREACH(mapnik::filter::filter_type const& filter_tag, st.direct_image_filters())
+    for (mapnik::filter::filter_type const& filter_tag : st.direct_image_filters())
     {
-        boost::apply_visitor(visitor, filter_tag);
+        util::apply_visitor(visitor, filter_tag);
     }
     MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: End processing style";
 }
 
-template <typename T>
-void agg_renderer<T>::render_marker(pixel_position const& pos,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::render_marker(pixel_position const& pos,
                                     marker const& marker,
                                     agg::trans_affine const& tr,
                                     double opacity,
                                     composite_mode_e comp_op)
 {
-    typedef agg::rgba8 color_type;
-    typedef agg::order_rgba order_type;
-    typedef agg::pixel32_type pixel_type;
-    typedef agg::comp_op_adaptor_rgba<color_type, order_type> blender_type; // comp blender
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer> pixfmt_comp_type;
-    typedef agg::renderer_base<pixfmt_comp_type> renderer_base;
-    typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type;
-    typedef agg::pod_bvector<mapnik::svg::path_attributes> svg_attribute_type;
+    using color_type = agg::rgba8;
+    using order_type = agg::order_rgba;
+    using blender_type = agg::comp_op_adaptor_rgba_pre<color_type, order_type>; // comp blender
+    using pixfmt_comp_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
+    using renderer_base = agg::renderer_base<pixfmt_comp_type>;
+    using renderer_type = agg::renderer_scanline_aa_solid<renderer_base>;
+    using svg_attribute_type = agg::pod_bvector<mapnik::svg::path_attributes>;
 
     ras_ptr->reset();
     if (gamma_method_ != GAMMA_POWER || gamma_ != 1.0)
@@ -313,7 +327,10 @@ void agg_renderer<T>::render_marker(pixel_position const& pos,
         gamma_ = 1.0;
     }
     agg::scanline_u8 sl;
-    agg::rendering_buffer buf(current_buffer_->raw_data(), width_, height_, width_ * 4);
+    agg::rendering_buffer buf(current_buffer_->raw_data(),
+                              current_buffer_->width(),
+                              current_buffer_->height(),
+                              current_buffer_->width() * 4);
     pixfmt_comp_type pixf(buf);
     pixf.comp_op(static_cast<agg::comp_op_e>(comp_op));
     renderer_base renb(pixf);
@@ -326,32 +343,40 @@ void agg_renderer<T>::render_marker(pixel_position const& pos,
         agg::trans_affine mtx = agg::trans_affine_translation(-c.x,-c.y);
         // apply symbol transformation to get to map space
         mtx *= tr;
-        mtx *= agg::trans_affine_scaling(scale_factor_);
+        mtx *= agg::trans_affine_scaling(common_.scale_factor_);
         // render the marker at the center of the marker box
         mtx.translate(pos.x, pos.y);
         using namespace mapnik::svg;
         vertex_stl_adapter<svg_path_storage> stl_storage((*marker.get_vector_data())->source());
         svg_path_adapter svg_path(stl_storage);
         svg_renderer_agg<svg_path_adapter,
-            svg_attribute_type,
-            renderer_type,
-            pixfmt_comp_type> svg_renderer(svg_path,
-                                                   (*marker.get_vector_data())->attributes());
-
+                         svg_attribute_type,
+                         renderer_type,
+                         pixfmt_comp_type> svg_renderer(svg_path,
+                                                        (*marker.get_vector_data())->attributes());
+
+        // https://github.com/mapnik/mapnik/issues/1316
+        // https://github.com/mapnik/mapnik/issues/1866
+        mtx.tx = std::floor(mtx.tx+.5);
+        mtx.ty = std::floor(mtx.ty+.5);
         svg_renderer.render(*ras_ptr, sl, renb, mtx, opacity, bbox);
     }
     else
     {
         double width = (*marker.get_bitmap_data())->width();
         double height = (*marker.get_bitmap_data())->height();
-        if (std::fabs(1.0 - scale_factor_) < 0.001 && tr.is_identity())
+        if (std::fabs(1.0 - common_.scale_factor_) < 0.001
+            && (std::fabs(1.0 - tr.sx) < agg::affine_epsilon)
+            && (std::fabs(0.0 - tr.shy) < agg::affine_epsilon)
+            && (std::fabs(0.0 - tr.shx) < agg::affine_epsilon)
+            && (std::fabs(1.0 - tr.sy) < agg::affine_epsilon))
         {
             double cx = 0.5 * width;
             double cy = 0.5 * height;
             composite(current_buffer_->data(), **marker.get_bitmap_data(),
                       comp_op, opacity,
-                      boost::math::iround(pos.x - cx),
-                      boost::math::iround(pos.y - cy),
+                      std::floor(pos.x - cx + .5),
+                      std::floor(pos.y - cy + .5),
                       false);
         }
         else
@@ -369,7 +394,7 @@ void agg_renderer<T>::render_marker(pixel_position const& pos,
 
             marker_tr *= agg::trans_affine_translation(-pos.x,-pos.y);
             marker_tr *= tr;
-            marker_tr *= agg::trans_affine_scaling(scale_factor_);
+            marker_tr *= agg::trans_affine_scaling(common_.scale_factor_);
             marker_tr *= agg::trans_affine_translation(pos.x,pos.y);
 
             marker_tr.transform(&p[0], &p[1]);
@@ -393,15 +418,18 @@ void agg_renderer<T>::render_marker(pixel_position const& pos,
                                              src.height(),
                                              src.width()*4);
             agg::pixfmt_rgba32_pre marker_pixf(marker_buf);
-            typedef agg::image_accessor_clone<agg::pixfmt_rgba32_pre> img_accessor_type;
-            typedef agg::span_interpolator_linear<agg::trans_affine> interpolator_type;
-            typedef agg::span_image_filter_rgba_2x2<img_accessor_type,
-                                                    interpolator_type> span_gen_type;
-            typedef agg::renderer_scanline_aa_alpha<renderer_base,
-                        agg::span_allocator<agg::rgba8>,
-                        span_gen_type> renderer_type;
+            using img_accessor_type = agg::image_accessor_clone<agg::pixfmt_rgba32_pre>;
+            using interpolator_type = agg::span_interpolator_linear<agg::trans_affine>;
+            using span_gen_type = agg::span_image_filter_rgba_2x2<img_accessor_type,
+                                                                  interpolator_type>;
+            using renderer_type = agg::renderer_scanline_aa_alpha<renderer_base,
+                                                                  agg::span_allocator<agg::rgba8>,
+                                                                  span_gen_type>;
             img_accessor_type ia(marker_pixf);
-            interpolator_type interpolator(agg::trans_affine(p, 0, 0, width, height) );
+            agg::trans_affine final_tr(p, 0, 0, width, height);
+            final_tr.tx = std::floor(final_tr.tx+.5);
+            final_tr.ty = std::floor(final_tr.ty+.5);
+            interpolator_type interpolator(final_tr);
             span_gen_type sg(ia, interpolator, filter);
             renderer_type rp(renb,sa, sg, unsigned(opacity*255));
             agg::render_scanlines(*ras_ptr, sl, rp);
@@ -409,27 +437,36 @@ void agg_renderer<T>::render_marker(pixel_position const& pos,
     }
 }
 
-template <typename T>
-void agg_renderer<T>::painted(bool painted)
+template <typename T0, typename T1>
+bool agg_renderer<T0,T1>::painted()
+{
+    return pixmap_.painted();
+}
+
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::painted(bool painted)
 {
     pixmap_.painted(painted);
 }
 
-template <typename T>
-void agg_renderer<T>::debug_draw_box(box2d<double> const& box,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::debug_draw_box(box2d<double> const& box,
                                      double x, double y, double angle)
 {
-    agg::rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_ * 4);
+    agg::rendering_buffer buf(current_buffer_->raw_data(),
+                              current_buffer_->width(),
+                              current_buffer_->height(),
+                              current_buffer_->width() * 4);
     debug_draw_box(buf, box, x, y, angle);
 }
 
-template <typename T> template <typename R>
-void agg_renderer<T>::debug_draw_box(R& buf, box2d<double> const& box,
+template <typename T0, typename T1> template <typename R>
+void agg_renderer<T0,T1>::debug_draw_box(R& buf, box2d<double> const& box,
                                      double x, double y, double angle)
 {
-    typedef agg::pixfmt_rgba32 pixfmt;
-    typedef agg::renderer_base<pixfmt> renderer_base;
-    typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type;
+    using pixfmt = agg::pixfmt_rgba32_pre;
+    using renderer_base = agg::renderer_base<pixfmt>;
+    using renderer_type = agg::renderer_scanline_aa_solid<renderer_base>;
 
     agg::scanline_p8 sl_line;
     pixfmt pixf(buf);
@@ -448,23 +485,23 @@ void agg_renderer<T>::debug_draw_box(R& buf, box2d<double> const& box,
     pbox.line_to(box.minx(), box.miny());
 
     // prepare stroke with applied transformation
-    typedef agg::conv_transform<agg::path_storage> conv_transform;
-    typedef agg::conv_stroke<conv_transform> conv_stroke;
+    using conv_transform = agg::conv_transform<agg::path_storage>;
+    using conv_stroke = agg::conv_stroke<conv_transform>;
     conv_transform tbox(pbox, tr);
     conv_stroke sbox(tbox);
-    sbox.generator().width(1.0 * scale_factor_);
+    sbox.generator().width(1.0 * common_.scale_factor_);
 
     // render the outline
     ras_ptr->reset();
     ras_ptr->add_path(sbox);
-    ren.color(agg::rgba8(0x33, 0x33, 0xff, 0xcc)); // blue is fine
+    ren.color(agg::rgba8_pre(0x33, 0x33, 0xff, 0xcc)); // blue is fine
     agg::render_scanlines(*ras_ptr, sl_line, ren);
 }
 
-template <typename T>
-void agg_renderer<T>::draw_geo_extent(box2d<double> const& extent, mapnik::color const& color)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::draw_geo_extent(box2d<double> const& extent, mapnik::color const& color)
 {
-    box2d<double> box = t_.forward(extent);
+    box2d<double> box = common_.t_.forward(extent);
     double x0 = box.minx();
     double x1 = box.maxx();
     double y0 = box.miny();
diff --git a/src/agg/process_building_symbolizer.cpp b/src/agg/process_building_symbolizer.cpp
index ecb91b3..9d0baeb 100644
--- a/src/agg/process_building_symbolizer.cpp
+++ b/src/agg/process_building_symbolizer.cpp
@@ -21,24 +21,25 @@
  *****************************************************************************/
 
 // mapnik
+#include <mapnik/make_unique.hpp>
 #include <mapnik/graphics.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/agg_renderer.hpp>
 #include <mapnik/agg_rasterizer.hpp>
+#include <mapnik/agg_helpers.hpp>
 #include <mapnik/segment.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/expression_evaluator.hpp>
-#include <mapnik/building_symbolizer.hpp>
 #include <mapnik/expression.hpp>
-
-// boost
-#include <boost/scoped_ptr.hpp>
-
+#include <mapnik/renderer_common/process_building_symbolizer.hpp>
+#include <mapnik/transform_path_adapter.hpp>
 // stl
 #include <deque>
 
 // agg
 #include "agg_basics.h"
 #include "agg_rendering_buffer.h"
+#include "agg_color_rgba.h"
 #include "agg_pixfmt_rgba.h"
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_scanline_u.h"
@@ -48,134 +49,64 @@
 namespace mapnik
 {
 
-template <typename T>
-void agg_renderer<T>::process(building_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
+template <typename T0,typename T1>
+void agg_renderer<T0,T1>::process(building_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
 {
-    typedef coord_transform<CoordTransform,geometry_type> path_type;
-    typedef agg::renderer_base<agg::pixfmt_rgba32> ren_base;
-    typedef agg::renderer_scanline_aa_solid<ren_base> renderer;
+    using path_type = transform_path_adapter<view_transform,geometry_type>;
+    using ren_base = agg::renderer_base<agg::pixfmt_rgba32_pre>;
+    using renderer = agg::renderer_scanline_aa_solid<ren_base>;
 
-    agg::rendering_buffer buf(current_buffer_->raw_data(),width_,height_, width_ * 4);
-    agg::pixfmt_rgba32 pixf(buf);
+    agg::rendering_buffer buf(current_buffer_->raw_data(),current_buffer_->width(),current_buffer_->height(), current_buffer_->width() * 4);
+    agg::pixfmt_rgba32_pre pixf(buf);
     ren_base renb(pixf);
 
-    color const& fill_  = sym.get_fill();
-    unsigned r=fill_.red();
-    unsigned g=fill_.green();
-    unsigned b=fill_.blue();
-    unsigned a=fill_.alpha();
+    value_double opacity = get<value_double,keys::fill_opacity>(sym,feature, common_.vars_);
+    color const& fill = get<color, keys::fill>(sym, feature, common_.vars_);
+    unsigned r=fill.red();
+    unsigned g=fill.green();
+    unsigned b=fill.blue();
+    unsigned a=fill.alpha();
     renderer ren(renb);
     agg::scanline_u8 sl;
 
     ras_ptr->reset();
-    if (gamma_method_ != GAMMA_POWER || gamma_ != 1.0)
-    {
-        ras_ptr->gamma(agg::gamma_power());
-        gamma_method_ = GAMMA_POWER;
-        gamma_ = 1.0;
-    }
-
-    double height = 0.0;
-    expression_ptr height_expr = sym.height();
-    if (height_expr)
+    double gamma = get<value_double, keys::gamma>(sym, feature, common_.vars_);
+    gamma_method_enum gamma_method = get<gamma_method_enum, keys::gamma_method>(sym, feature, common_.vars_);
+    if (gamma != gamma_ || gamma_method != gamma_method_)
     {
-        value_type result = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *height_expr);
-        height = result.to_double() * scale_factor_;
+        set_gamma_method(ras_ptr, gamma, gamma_method);
+        gamma_method_ = gamma_method;
+        gamma_ = gamma;
     }
 
-    for (unsigned i=0;i<feature.num_geometries();++i)
-    {
-        geometry_type const& geom = feature.get_geometry(i);
-        if (geom.size() > 2)
-        {
-            boost::scoped_ptr<geometry_type> frame(new geometry_type(LineString));
-            boost::scoped_ptr<geometry_type> roof(new geometry_type(Polygon));
-            std::deque<segment_t> face_segments;
-            double x0 = 0;
-            double y0 = 0;
-            double x,y;
-            geom.rewind(0);
-            for (unsigned cm = geom.vertex(&x, &y); cm != SEG_END;
-                 cm = geom.vertex(&x, &y))
-            {
-                if (cm == SEG_MOVETO)
-                {
-                    frame->move_to(x,y);
-                }
-                else if (cm == SEG_LINETO)
-                {
-                    frame->line_to(x,y);
-                    face_segments.push_back(segment_t(x0,y0,x,y));
-                }
-                else if (cm == SEG_CLOSE)
-                {
-                    frame->close_path();
-                }
-                x0 = x;
-                y0 = y;
-            }
-
-            std::sort(face_segments.begin(),face_segments.end(), y_order);
-            std::deque<segment_t>::const_iterator itr=face_segments.begin();
-            std::deque<segment_t>::const_iterator end=face_segments.end();
-
-            for (; itr!=end; ++itr)
-            {
-                boost::scoped_ptr<geometry_type> faces(new geometry_type(Polygon));
-                faces->move_to(itr->get<0>(),itr->get<1>());
-                faces->line_to(itr->get<2>(),itr->get<3>());
-                faces->line_to(itr->get<2>(),itr->get<3>() + height);
-                faces->line_to(itr->get<0>(),itr->get<1>() + height);
+    double height = get<double, keys::height>(sym, feature, common_.vars_) * common_.scale_factor_;
 
-                path_type faces_path (t_,*faces,prj_trans);
-                ras_ptr->add_path(faces_path);
-                ren.color(agg::rgba8(int(r*0.8), int(g*0.8), int(b*0.8), int(a * sym.get_opacity())));
-                agg::render_scanlines(*ras_ptr, sl, ren);
-                ras_ptr->reset();
-                //
-                frame->move_to(itr->get<0>(),itr->get<1>());
-                frame->line_to(itr->get<0>(),itr->get<1>()+height);
-
-            }
-
-            geom.rewind(0);
-            for (unsigned cm = geom.vertex(&x, &y); cm != SEG_END;
-                 cm = geom.vertex(&x, &y))
-            {
-                if (cm == SEG_MOVETO)
-                {
-                    frame->move_to(x,y+height);
-                    roof->move_to(x,y+height);
-                }
-                else if (cm == SEG_LINETO)
-                {
-                    frame->line_to(x,y+height);
-                    roof->line_to(x,y+height);
-                }
-                else if (cm == SEG_CLOSE)
-                {
-                    frame->close_path();
-                    roof->close_path();
-                }
-            }
-
-            path_type path(t_,*frame,prj_trans);
+    render_building_symbolizer(
+        feature, height,
+        [&,r,g,b,a,opacity](geometry_type &faces) {
+            path_type faces_path (this->common_.t_,faces,prj_trans);
+            ras_ptr->add_path(faces_path);
+            ren.color(agg::rgba8_pre(int(r*0.8), int(g*0.8), int(b*0.8), int(a * opacity)));
+            agg::render_scanlines(*ras_ptr, sl, ren);
+            this->ras_ptr->reset();
+        },
+        [&,r,g,b,a,opacity](geometry_type &frame) {
+            path_type path(common_.t_,frame,prj_trans);
             agg::conv_stroke<path_type> stroke(path);
-            stroke.width(scale_factor_);
+            stroke.width(common_.scale_factor_);
             ras_ptr->add_path(stroke);
-            ren.color(agg::rgba8(int(r*0.8), int(g*0.8), int(b*0.8), int(a * sym.get_opacity())));
+            ren.color(agg::rgba8_pre(int(r*0.8), int(g*0.8), int(b*0.8), int(a * opacity)));
             agg::render_scanlines(*ras_ptr, sl, ren);
             ras_ptr->reset();
-
-            path_type roof_path (t_,*roof,prj_trans);
+        },
+        [&,r,g,b,a,opacity](geometry_type &roof) {
+            path_type roof_path (common_.t_,roof,prj_trans);
             ras_ptr->add_path(roof_path);
-            ren.color(agg::rgba8(r, g, b, int(a * sym.get_opacity())));
+            ren.color(agg::rgba8_pre(r, g, b, int(a * opacity)));
             agg::render_scanlines(*ras_ptr, sl, ren);
-
-        }
-    }
+        });
 }
 
 template void agg_renderer<image_32>::process(building_symbolizer const&,
diff --git a/src/agg/process_debug_symbolizer.cpp b/src/agg/process_debug_symbolizer.cpp
index 277f7fe..ecd3790 100644
--- a/src/agg/process_debug_symbolizer.cpp
+++ b/src/agg/process_debug_symbolizer.cpp
@@ -24,6 +24,7 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/agg_renderer.hpp>
 #include <mapnik/graphics.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/label_collision_detector.hpp>
 
 namespace mapnik {
@@ -47,25 +48,27 @@ void draw_rect(image_32 &pixmap, box2d<double> const& box)
     }
 }
 
-template <typename T>
-void agg_renderer<T>::process(debug_symbolizer const& sym,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(debug_symbolizer const& sym,
                               mapnik::feature_impl & feature,
                               proj_transform const& prj_trans)
 {
-    debug_symbolizer_mode_e mode = sym.get_mode();
+
+    debug_symbolizer_mode_enum mode = get<debug_symbolizer_mode_enum>(sym, keys::mode, feature, common_.vars_, DEBUG_SYM_MODE_COLLISION);
+
     if (mode == DEBUG_SYM_MODE_COLLISION)
     {
-        label_collision_detector4::query_iterator itr = detector_->begin(), end = detector_->end();
-        for (;itr!=end; itr++)
+        typename detector_type::query_iterator itr = common_.detector_->begin();
+        typename detector_type::query_iterator end = common_.detector_->end();
+        for ( ;itr!=end; ++itr)
         {
             draw_rect(pixmap_, itr->box);
         }
     }
     else if (mode == DEBUG_SYM_MODE_VERTEX)
     {
-        for (unsigned i=0; i<feature.num_geometries(); ++i)
+        for (auto const& geom : feature.paths())
         {
-            geometry_type const& geom = feature.get_geometry(i);
             double x;
             double y;
             double z = 0;
@@ -75,7 +78,7 @@ void agg_renderer<T>::process(debug_symbolizer const& sym,
             {
                 if (cmd == SEG_CLOSE) continue;
                 prj_trans.backward(x,y,z);
-                t_.forward(&x,&y);
+                common_.t_.forward(&x,&y);
                 pixmap_.setPixel(x,y,0xff0000ff);
                 pixmap_.setPixel(x-1,y-1,0xff0000ff);
                 pixmap_.setPixel(x+1,y+1,0xff0000ff);
@@ -90,4 +93,3 @@ template void agg_renderer<image_32>::process(debug_symbolizer const&,
                                               mapnik::feature_impl &,
                                               proj_transform const&);
 }
-
diff --git a/src/agg/process_group_symbolizer.cpp b/src/agg/process_group_symbolizer.cpp
new file mode 100644
index 0000000..b48cbf1
--- /dev/null
+++ b/src/agg/process_group_symbolizer.cpp
@@ -0,0 +1,121 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/agg_renderer.hpp>
+#include <mapnik/agg_rasterizer.hpp>
+#include <mapnik/image_util.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/text/renderer.hpp>
+#include <mapnik/geom_util.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/renderer_common/process_group_symbolizer.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
+// agg
+#include "agg_trans_affine.h"
+
+namespace mapnik {
+
+/**
+ * Render a thunk which was frozen from a previous call to
+ * extract_bboxes. We should now have a new offset at which
+ * to render it, and the boxes themselves should already be
+ * in the detector from the placement_finder.
+ */
+struct thunk_renderer : public util::static_visitor<>
+{
+    using renderer_type = agg_renderer<image_32>;
+    using buffer_type = renderer_type::buffer_type;
+    using text_renderer_type = agg_text_renderer<buffer_type>;
+
+    thunk_renderer(renderer_type &ren,
+                   buffer_type *buf,
+                   renderer_common &common,
+                   pixel_position const &offset)
+        : ren_(ren), buf_(buf), common_(common), offset_(offset)
+    {}
+
+    void operator()(point_render_thunk const &thunk) const
+    {
+        pixel_position new_pos(thunk.pos_.x + offset_.x, thunk.pos_.y + offset_.y);
+        ren_.render_marker(new_pos, *thunk.marker_, thunk.tr_, thunk.opacity_,
+                           thunk.comp_op_);
+    }
+
+    void operator()(text_render_thunk const &thunk) const
+    {
+        text_renderer_type ren(*buf_, thunk.halo_rasterizer_, thunk.comp_op_, thunk.comp_op_,
+                               common_.scale_factor_, common_.font_manager_.get_stroker());
+
+        render_offset_placements(
+            thunk.placements_,
+            offset_,
+            [&] (glyph_positions_ptr glyphs)
+            {
+                if (glyphs->marker())
+                {
+                    ren_.render_marker(glyphs->marker_pos(),
+                                       *(glyphs->marker()->marker),
+                                       glyphs->marker()->transform,
+                                       thunk.opacity_, thunk.comp_op_);
+                }
+                ren.render(*glyphs);
+            });
+    }
+
+    template <typename T>
+    void operator()(T const &) const
+    {
+        // TODO: warning if unimplemented?
+    }
+
+private:
+    renderer_type &ren_;
+    buffer_type *buf_;
+    renderer_common &common_;
+    pixel_position offset_;
+};
+
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(group_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    render_group_symbolizer(
+        sym, feature, common_.vars_, prj_trans, clipping_extent(common_), common_,
+        [&](render_thunk_list const& thunks, pixel_position const& render_offset)
+        {
+            thunk_renderer ren(*this, current_buffer_, common_, render_offset);
+            for (render_thunk_ptr const& thunk : thunks)
+            {
+                util::apply_visitor(ren, *thunk);
+            }
+        });
+}
+
+template void agg_renderer<image_32>::process(group_symbolizer const&,
+                                              mapnik::feature_impl &,
+                                              proj_transform const&);
+
+}
diff --git a/src/agg/process_line_pattern_symbolizer.cpp b/src/agg/process_line_pattern_symbolizer.cpp
index 1f9f679..412b4d5 100644
--- a/src/agg/process_line_pattern_symbolizer.cpp
+++ b/src/agg/process_line_pattern_symbolizer.cpp
@@ -29,15 +29,17 @@
 #include <mapnik/agg_pattern_source.hpp>
 #include <mapnik/marker.hpp>
 #include <mapnik/marker_cache.hpp>
-#include <mapnik/line_pattern_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/vertex_converters.hpp>
 #include <mapnik/noncopyable.hpp>
 #include <mapnik/parse_path.hpp>
-
+#include <mapnik/renderer_common/clipping_extent.hpp>
+#include <mapnik/renderer_common/render_pattern.hpp>
 // agg
 #include "agg_basics.h"
-#include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
+#include "agg_rendering_buffer.h"
 #include "agg_rasterizer_outline.h"
 #include "agg_rasterizer_outline_aa.h"
 #include "agg_scanline_u.h"
@@ -48,109 +50,92 @@
 #include "agg_renderer_outline_image.h"
 #include "agg_conv_clip_polyline.h"
 
-// boost
-#include <boost/foreach.hpp>
-
-namespace {
-
-class pattern_source : private mapnik::noncopyable
-{
-public:
-    pattern_source(mapnik::image_data_32 const& pattern)
-        : pattern_(pattern) {}
-
-    unsigned int width() const
-    {
-        return pattern_.width();
-    }
-    unsigned int height() const
-    {
-        return pattern_.height();
-    }
-    agg::rgba8 pixel(int x, int y) const
-    {
-        unsigned c = pattern_(x,y);
-        return agg::rgba8(c & 0xff,
-                          (c >> 8) & 0xff,
-                          (c >> 16) & 0xff,
-                          (c >> 24) & 0xff);
-    }
-private:
-    mapnik::image_data_32 const& pattern_;
-};
-
-}
-
 namespace mapnik {
 
-template <typename T>
-void  agg_renderer<T>::process(line_pattern_symbolizer const& sym,
+template <typename T0, typename T1>
+void  agg_renderer<T0,T1>::process(line_pattern_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    typedef agg::rgba8 color;
-    typedef agg::order_rgba order;
-    typedef agg::pixel32_type pixel_type;
-    typedef agg::comp_op_adaptor_rgba_pre<color, order> blender_type;
-    typedef agg::pattern_filter_bilinear_rgba8 pattern_filter_type;
-    typedef agg::line_image_pattern<pattern_filter_type> pattern_type;
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer> pixfmt_type;
-    typedef agg::renderer_base<pixfmt_type> renderer_base;
-    typedef agg::renderer_outline_image<renderer_base, pattern_type> renderer_type;
-    typedef agg::rasterizer_outline_aa<renderer_type> rasterizer_type;
-
-    std::string filename = path_processor_type::evaluate( *sym.get_filename(), feature);
-
-    boost::optional<marker_ptr> mark = marker_cache::instance().find(filename,true);
-    if (!mark) return;
-
-    if (!(*mark)->is_bitmap())
-    {
-        MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Only images (not '" << filename << "') are supported in the line_pattern_symbolizer";
 
-        return;
+    using color = agg::rgba8;
+    using order = agg::order_rgba;
+    using blender_type = agg::comp_op_adaptor_rgba_pre<color, order>;
+    using pattern_filter_type = agg::pattern_filter_bilinear_rgba8;
+    using pattern_type = agg::line_image_pattern<pattern_filter_type>;
+    using pixfmt_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
+    using renderer_base = agg::renderer_base<pixfmt_type>;
+    using renderer_type = agg::renderer_outline_image<renderer_base, pattern_type>;
+    using rasterizer_type = agg::rasterizer_outline_aa<renderer_type>;
+
+    std::string filename = get<std::string, keys::file>(sym, feature, common_.vars_);
+    if (filename.empty()) return;
+    boost::optional<mapnik::marker_ptr> marker_ptr = marker_cache::instance().find(filename, true);
+    if (!marker_ptr || !(*marker_ptr)) return;
+    boost::optional<image_ptr> pat;
+    // TODO - re-implement at renderer level like polygon_pattern symbolizer
+    value_double opacity = get<value_double, keys::opacity>(sym, feature, common_.vars_);
+    if ((*marker_ptr)->is_bitmap())
+    {
+        pat = (*marker_ptr)->get_bitmap_data();
+    }
+    else
+    {
+        agg::trans_affine image_tr = agg::trans_affine_scaling(common_.scale_factor_);
+        auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+        if (image_transform) evaluate_transform(image_tr, feature, common_.vars_, *image_transform);
+        pat = render_pattern(*ras_ptr, **marker_ptr, image_tr, 1.0);
     }
-
-    boost::optional<image_ptr> pat = (*mark)->get_bitmap_data();
 
     if (!pat) return;
 
-    agg::rendering_buffer buf(current_buffer_->raw_data(),width_,height_, width_ * 4);
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double offset = get<value_double, keys::offset>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
+
+    agg::rendering_buffer buf(current_buffer_->raw_data(),current_buffer_->width(),current_buffer_->height(), current_buffer_->width() * 4);
     pixfmt_type pixf(buf);
-    pixf.comp_op(static_cast<agg::comp_op_e>(sym.comp_op()));
+    pixf.comp_op(static_cast<agg::comp_op_e>(get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_)));
     renderer_base ren_base(pixf);
     agg::pattern_filter_bilinear_rgba8 filter;
 
-    pattern_source source(*(*pat));
+    pattern_source source(*(*pat), opacity);
     pattern_type pattern (filter,source);
     renderer_type ren(ren_base, pattern);
     rasterizer_type ras(ren);
 
     agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
 
-    box2d<double> clipping_extent = query_extent_;
-    if (sym.clip())
+    box2d<double> clip_box = clipping_extent(common_);
+    if (clip)
     {
-        double padding = (double)(query_extent_.width()/pixmap_.width());
-        double half_stroke = (*mark)->width()/2.0;
+        double padding = (double)(common_.query_extent_.width()/pixmap_.width());
+        double half_stroke = (*marker_ptr)->width()/2.0;
         if (half_stroke > 1)
             padding *= half_stroke;
-        padding *= scale_factor_;
-        clipping_extent.pad(padding);
+        if (std::fabs(offset) > 0)
+            padding *= std::fabs(offset) * 1.2;
+        padding *= common_.scale_factor_;
+        clip_box.pad(padding);
     }
 
-    typedef boost::mpl::vector<clip_line_tag,transform_tag,simplify_tag,smooth_tag> conv_types;
-    vertex_converter<box2d<double>, rasterizer_type, line_pattern_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(clipping_extent,ras,sym,t_,prj_trans,tr,scale_factor_);
+    vertex_converter<rasterizer_type, clip_line_tag, transform_tag,
+                     affine_transform_tag,
+                     simplify_tag,smooth_tag,
+                     offset_transform_tag>
+        converter(clip_box,ras,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
 
-    if (sym.clip()) converter.set<clip_line_tag>(); //optional clip (default: true)
+    if (clip) converter.set<clip_line_tag>(); //optional clip (default: true)
     converter.set<transform_tag>(); //always transform
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (std::fabs(offset) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
+    converter.set<affine_transform_tag>(); // optional affine transform
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
 
-    BOOST_FOREACH(geometry_type & geom, feature.paths())
+    for (geometry_type & geom : feature.paths())
     {
         if (geom.size() > 1)
         {
diff --git a/src/agg/process_line_symbolizer.cpp b/src/agg/process_line_symbolizer.cpp
index e32b9b2..a2eca24 100644
--- a/src/agg/process_line_symbolizer.cpp
+++ b/src/agg/process_line_symbolizer.cpp
@@ -23,17 +23,17 @@
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/graphics.hpp>
-#include <mapnik/agg_renderer.hpp>
 #include <mapnik/agg_helpers.hpp>
+#include <mapnik/agg_renderer.hpp>
 #include <mapnik/agg_rasterizer.hpp>
-
-#include <mapnik/line_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/vertex_converters.hpp>
-
+#include <mapnik/renderer_common/clipping_extent.hpp>
 // agg
 #include "agg_basics.h"
 #include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_scanline_u.h"
 #include "agg_renderer_scanline.h"
@@ -44,7 +44,7 @@
 #include "agg_rasterizer_outline_aa.h"
 
 // boost
-#include <boost/foreach.hpp>
+
 
 // stl
 #include <string>
@@ -52,84 +52,133 @@
 
 namespace mapnik {
 
-template <typename T>
-void agg_renderer<T>::process(line_symbolizer const& sym,
+template <typename Symbolizer, typename Rasterizer, typename Feature>
+void set_join_caps_aa(Symbolizer const& sym, Rasterizer & ras, Feature & feature, attributes const& vars)
+{
+    line_join_enum join = get<line_join_enum, keys::stroke_linejoin>(sym, feature, vars);
+    switch (join)
+    {
+    case MITER_JOIN:
+        ras.line_join(agg::outline_miter_accurate_join);
+        break;
+    case MITER_REVERT_JOIN:
+        ras.line_join(agg::outline_no_join);
+        break;
+    case ROUND_JOIN:
+        ras.line_join(agg::outline_round_join);
+        break;
+    default:
+        ras.line_join(agg::outline_no_join);
+    }
+
+    line_cap_enum cap = get<line_cap_enum, keys::stroke_linecap>(sym, feature, vars);
+
+    switch (cap)
+    {
+    case BUTT_CAP:
+        ras.round_cap(false);
+        break;
+    case SQUARE_CAP:
+        ras.round_cap(false);
+        break;
+    default:
+        ras.round_cap(true);
+    }
+}
+
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(line_symbolizer const& sym,
                               mapnik::feature_impl & feature,
                               proj_transform const& prj_trans)
 
 {
-    stroke const& stroke_ = sym.get_stroke();
-    color const& col = stroke_.get_color();
+    color const& col = get<color, keys::stroke>(sym, feature, common_.vars_);
     unsigned r=col.red();
     unsigned g=col.green();
     unsigned b=col.blue();
     unsigned a=col.alpha();
 
+    double gamma = get<value_double, keys::stroke_gamma>(sym, feature, common_.vars_);
+    gamma_method_enum gamma_method = get<gamma_method_enum, keys::stroke_gamma_method>(sym, feature, common_.vars_);
     ras_ptr->reset();
-    if (stroke_.get_gamma() != gamma_ || stroke_.get_gamma_method() != gamma_method_)
+
+    if (gamma != gamma_ || gamma_method != gamma_method_)
     {
-        set_gamma_method(stroke_, ras_ptr);
-        gamma_method_ = stroke_.get_gamma_method();
-        gamma_ = stroke_.get_gamma();
+        set_gamma_method(ras_ptr, gamma, gamma_method);
+        gamma_method_ = gamma_method;
+        gamma_ = gamma;
     }
 
-    agg::rendering_buffer buf(current_buffer_->raw_data(),width_,height_, width_ * 4);
+    agg::rendering_buffer buf(current_buffer_->raw_data(),current_buffer_->width(),current_buffer_->height(), current_buffer_->width() * 4);
 
-    typedef agg::rgba8 color_type;
-    typedef agg::order_rgba order_type;
-    typedef agg::pixel32_type pixel_type;
-    typedef agg::comp_op_adaptor_rgba_pre<color_type, order_type> blender_type; // comp blender
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer> pixfmt_comp_type;
-    typedef agg::renderer_base<pixfmt_comp_type> renderer_base;
-    typedef boost::mpl::vector<clip_line_tag, transform_tag,
-                               offset_transform_tag, affine_transform_tag,
-                               simplify_tag, smooth_tag, dash_tag, stroke_tag> conv_types;
+    using color_type = agg::rgba8;
+    using order_type = agg::order_rgba;
+    using blender_type = agg::comp_op_adaptor_rgba_pre<color_type, order_type>; // comp blender
+    using pixfmt_comp_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
+    using renderer_base = agg::renderer_base<pixfmt_comp_type>;
 
     pixfmt_comp_type pixf(buf);
-    pixf.comp_op(static_cast<agg::comp_op_e>(sym.comp_op()));
+    pixf.comp_op(static_cast<agg::comp_op_e>(get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_)));
     renderer_base renb(pixf);
 
     agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
-
-    box2d<double> clipping_extent = query_extent_;
-    if (sym.clip())
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+
+    box2d<double> clip_box = clipping_extent(common_);
+
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double width = get<value_double, keys::stroke_width>(sym, feature, common_.vars_);
+    value_double opacity = get<value_double,keys::stroke_opacity>(sym,feature, common_.vars_);
+    value_double offset = get<value_double, keys::offset>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
+    line_rasterizer_enum rasterizer_e = get<line_rasterizer_enum, keys::line_rasterizer>(sym, feature, common_.vars_);
+    if (clip)
     {
-        double padding = (double)(query_extent_.width()/pixmap_.width());
-        double half_stroke = stroke_.get_width()/2.0;
+        double padding = static_cast<double>(common_.query_extent_.width()/pixmap_.width());
+        double half_stroke = 0.5 * width;
         if (half_stroke > 1)
+        {
             padding *= half_stroke;
-        if (std::fabs(sym.offset()) > 0)
-            padding *= std::fabs(sym.offset()) * 1.2;
-        padding *= scale_factor_;
-        clipping_extent.pad(padding);
+        }
+        if (std::fabs(offset) > 0)
+        {
+            padding *= std::fabs(offset) * 1.2;
+        }
+
+        padding *= common_.scale_factor_;
+        clip_box.pad(padding);
         // debugging
         //box2d<double> inverse = query_extent_;
         //inverse.pad(-padding);
         //draw_geo_extent(inverse,mapnik::color("red"));
     }
 
-    if (sym.get_rasterizer() == RASTERIZER_FAST)
+    if (rasterizer_e == RASTERIZER_FAST)
     {
-        typedef agg::renderer_outline_aa<renderer_base> renderer_type;
-        typedef agg::rasterizer_outline_aa<renderer_type> rasterizer_type;
-        agg::line_profile_aa profile(stroke_.get_width() * scale_factor_, agg::gamma_power(stroke_.get_gamma()));
+        using renderer_type = agg::renderer_outline_aa<renderer_base>;
+        using rasterizer_type = agg::rasterizer_outline_aa<renderer_type>;
+        agg::line_profile_aa profile(width * common_.scale_factor_, agg::gamma_power(gamma));
         renderer_type ren(renb, profile);
-        ren.color(agg::rgba8_pre(r, g, b, int(a*stroke_.get_opacity())));
+        ren.color(agg::rgba8_pre(r, g, b, int(a * opacity)));
         rasterizer_type ras(ren);
-        set_join_caps_aa(stroke_,ras);
-
-        vertex_converter<box2d<double>, rasterizer_type, line_symbolizer,
-                         CoordTransform, proj_transform, agg::trans_affine, conv_types>
-            converter(clipping_extent,ras,sym,t_,prj_trans,tr,scale_factor_);
-        if (sym.clip()) converter.set<clip_line_tag>(); // optional clip (default: true)
+        set_join_caps_aa(sym, ras, feature, common_.vars_);
+
+        vertex_converter<rasterizer_type,clip_line_tag, transform_tag,
+                         affine_transform_tag,
+                         simplify_tag, smooth_tag,
+                         offset_transform_tag,
+                         dash_tag, stroke_tag>
+            converter(clip_box,ras,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
+        if (clip) converter.set<clip_line_tag>(); // optional clip (default: true)
         converter.set<transform_tag>(); // always transform
-        if (std::fabs(sym.offset()) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
+        if (std::fabs(offset) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
         converter.set<affine_transform_tag>(); // optional affine transform
-        if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-        if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+        if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+        if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
 
-        BOOST_FOREACH( geometry_type & geom, feature.paths())
+        for (geometry_type & geom : feature.paths())
         {
             if (geom.size() > 1)
             {
@@ -139,20 +188,24 @@ void agg_renderer<T>::process(line_symbolizer const& sym,
     }
     else
     {
-        vertex_converter<box2d<double>, rasterizer, line_symbolizer,
-                         CoordTransform, proj_transform, agg::trans_affine, conv_types>
-            converter(clipping_extent,*ras_ptr,sym,t_,prj_trans,tr,scale_factor_);
-
-        if (sym.clip()) converter.set<clip_line_tag>(); // optional clip (default: true)
+        vertex_converter<rasterizer,clip_line_tag, transform_tag,
+                         affine_transform_tag,
+                         simplify_tag, smooth_tag,
+                         offset_transform_tag,
+                         dash_tag, stroke_tag>
+            converter(clip_box,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
+
+        if (clip) converter.set<clip_line_tag>(); // optional clip (default: true)
         converter.set<transform_tag>(); // always transform
-        if (std::fabs(sym.offset()) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
+        if (std::fabs(offset) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
         converter.set<affine_transform_tag>(); // optional affine transform
-        if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-        if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-        if (stroke_.has_dash()) converter.set<dash_tag>();
+        if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+        if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+        if (has_key(sym, keys::stroke_dasharray))
+            converter.set<dash_tag>();
         converter.set<stroke_tag>(); //always stroke
 
-        BOOST_FOREACH( geometry_type & geom, feature.paths())
+        for (geometry_type & geom : feature.paths())
         {
             if (geom.size() > 1)
             {
@@ -160,10 +213,11 @@ void agg_renderer<T>::process(line_symbolizer const& sym,
             }
         }
 
-        typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type;
+        using renderer_type = agg::renderer_scanline_aa_solid<renderer_base>;
         renderer_type ren(renb);
-        ren.color(agg::rgba8_pre(r, g, b, int(a * stroke_.get_opacity())));
+        ren.color(agg::rgba8_pre(r, g, b, int(a * opacity)));
         agg::scanline_u8 sl;
+        ras_ptr->filling_rule(agg::fill_non_zero);
         agg::render_scanlines(*ras_ptr, sl, ren);
     }
 }
diff --git a/src/agg/process_markers_symbolizer.cpp b/src/agg/process_markers_symbolizer.cpp
index 66913a1..4c3ac30 100644
--- a/src/agg/process_markers_symbolizer.cpp
+++ b/src/agg/process_markers_symbolizer.cpp
@@ -22,13 +22,13 @@
 
 // mapnik
 #include <mapnik/graphics.hpp>
+#include <mapnik/agg_helpers.hpp>
 #include <mapnik/agg_renderer.hpp>
 #include <mapnik/agg_rasterizer.hpp>
 
 #include <mapnik/debug.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/geom_util.hpp>
-#include <mapnik/vertex_converters.hpp>
 #include <mapnik/marker_helpers.hpp>
 #include <mapnik/marker.hpp>
 #include <mapnik/marker_cache.hpp>
@@ -36,15 +36,17 @@
 #include <mapnik/svg/svg_storage.hpp>
 #include <mapnik/svg/svg_path_adapter.hpp>
 #include <mapnik/svg/svg_path_attributes.hpp>
-#include <mapnik/markers_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/parse_path.hpp>
-
+#include <mapnik/renderer_common/process_markers_symbolizer.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
 // agg
 #include "agg_basics.h"
 #include "agg_renderer_base.h"
 #include "agg_renderer_scanline.h"
 #include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_scanline_u.h"
 #include "agg_path_storage.h"
@@ -57,183 +59,46 @@
 
 namespace mapnik {
 
-template <typename T>
-void agg_renderer<T>::process(markers_symbolizer const& sym,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(markers_symbolizer const& sym,
                               feature_impl & feature,
                               proj_transform const& prj_trans)
 {
-    typedef agg::rgba8 color_type;
-    typedef agg::order_rgba order_type;
-    typedef agg::pixel32_type pixel_type;
-    typedef agg::comp_op_adaptor_rgba_pre<color_type, order_type> blender_type; // comp blender
-    typedef agg::rendering_buffer buf_type;
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, buf_type> pixfmt_comp_type;
-    typedef agg::renderer_base<pixfmt_comp_type> renderer_base;
-    typedef label_collision_detector4 detector_type;
-    typedef boost::mpl::vector<clip_line_tag,clip_poly_tag,transform_tag,smooth_tag> conv_types;
-
-    std::string filename = path_processor_type::evaluate(*sym.get_filename(), feature);
+    using namespace mapnik::svg;
+    using color_type = agg::rgba8;
+    using order_type = agg::order_rgba;
+    using blender_type = agg::comp_op_adaptor_rgba_pre<color_type, order_type>; // comp blender
+    using buf_type = agg::rendering_buffer;
+    using pixfmt_comp_type = agg::pixfmt_custom_blend_rgba<blender_type, buf_type>;
+    using renderer_base = agg::renderer_base<pixfmt_comp_type>;
+    using renderer_type = agg::renderer_scanline_aa_solid<renderer_base>;
+    using svg_attribute_type = agg::pod_bvector<path_attributes>;
+    using svg_renderer_type = svg_renderer_agg<svg_path_adapter,
+                                               svg_attribute_type,
+                                               renderer_type,
+                                               pixfmt_comp_type>;
 
-    // https://github.com/mapnik/mapnik/issues/1316
-    bool snap_pixels = !mapnik::marker_cache::instance().is_uri(filename);
+    ras_ptr->reset();
 
-    if (!filename.empty())
+    double gamma = get<value_double, keys::gamma>(sym, feature, common_.vars_);
+    gamma_method_enum gamma_method = get<gamma_method_enum, keys::gamma_method>(sym, feature, common_.vars_);
+    if (gamma != gamma_ || gamma_method != gamma_method_)
     {
-        boost::optional<marker_ptr> mark = mapnik::marker_cache::instance().find(filename, true);
-        if (mark && *mark)
-        {
-            ras_ptr->reset();
-            if (gamma_method_ != GAMMA_POWER || gamma_ != 1.0)
-            {
-                ras_ptr->gamma(agg::gamma_power());
-                gamma_method_ = GAMMA_POWER;
-                gamma_ = 1.0;
-            }
-            agg::trans_affine geom_tr;
-            evaluate_transform(geom_tr, feature, sym.get_transform());
-            agg::trans_affine tr = agg::trans_affine_scaling(scale_factor_);
+        set_gamma_method(ras_ptr, gamma, gamma_method);
+        gamma_method_ = gamma_method;
+        gamma_ = gamma;
+    }
 
-            if ((*mark)->is_vector())
-            {
-                using namespace mapnik::svg;
-                typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type;
-                typedef agg::pod_bvector<path_attributes> svg_attribute_type;
-                typedef svg_renderer_agg<svg_path_adapter,
-                                     svg_attribute_type,
-                                     renderer_type,
-                                     pixfmt_comp_type > svg_renderer_type;
-                typedef vector_markers_rasterizer_dispatch<buf_type,
-                                     svg_renderer_type,
-                                     rasterizer,
-                                     detector_type > dispatch_type;
-                boost::optional<svg_path_ptr> const& stock_vector_marker = (*mark)->get_vector_data();
-                expression_ptr const& width_expr = sym.get_width();
-                expression_ptr const& height_expr = sym.get_height();
+    buf_type render_buffer(current_buffer_->raw_data(), current_buffer_->width(), current_buffer_->height(), current_buffer_->width() * 4);
+    box2d<double> clip_box = clipping_extent(common_);
 
-                // special case for simple ellipse markers
-                // to allow for full control over rx/ry dimensions
-                if (filename == "shape://ellipse"
-                   && (width_expr || height_expr))
-                {
-                    svg_storage_type marker_ellipse;
-                    vertex_stl_adapter<svg_path_storage> stl_storage(marker_ellipse.source());
-                    svg_path_adapter svg_path(stl_storage);
-                    build_ellipse(sym, feature, marker_ellipse, svg_path);
-                    svg_attribute_type attributes;
-                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym);
-                    svg_renderer_type svg_renderer(svg_path, result ? attributes : (*stock_vector_marker)->attributes());
-                    evaluate_transform(tr, feature, sym.get_image_transform());
-                    box2d<double> bbox = marker_ellipse.bounding_box();
-                    coord2d center = bbox.center();
-                    agg::trans_affine_translation recenter(-center.x, -center.y);
-                    agg::trans_affine marker_trans = recenter * tr;
-                    buf_type render_buffer(current_buffer_->raw_data(), width_, height_, width_ * 4);
-                    dispatch_type rasterizer_dispatch(render_buffer,
-                                                      svg_renderer,
-                                                      *ras_ptr,
-                                                      bbox,
-                                                      marker_trans,
-                                                      sym,
-                                                      *detector_,
-                                                      scale_factor_,
-                                                      snap_pixels);
-                    vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                        converter(query_extent_, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_);
-                    if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                    {
-                        eGeomType type = feature.paths()[0].type();
-                        if (type == Polygon)
-                            converter.template set<clip_poly_tag>();
-                        // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                        //else if (type == LineString)
-                        //    converter.template set<clip_line_tag>();
-                        // don't clip if type==Point
-                    }
-                    converter.template set<transform_tag>(); //always transform
-                    if (sym.smooth() > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
-                    apply_markers_multi(feature, converter, sym);
-                }
-                else
-                {
-                    box2d<double> const& bbox = (*mark)->bounding_box();
-                    setup_transform_scaling(tr, bbox.width(), bbox.height(), feature, sym);
-                    evaluate_transform(tr, feature, sym.get_image_transform());
-                    coord2d center = bbox.center();
-                    agg::trans_affine_translation recenter(-center.x, -center.y);
-                    agg::trans_affine marker_trans = recenter * tr;
-                    vertex_stl_adapter<svg_path_storage> stl_storage((*stock_vector_marker)->source());
-                    svg_path_adapter svg_path(stl_storage);
-                    svg_attribute_type attributes;
-                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym);
-                    svg_renderer_type svg_renderer(svg_path, result ? attributes : (*stock_vector_marker)->attributes());
-                    buf_type render_buffer(current_buffer_->raw_data(), width_, height_, width_ * 4);
-                    dispatch_type rasterizer_dispatch(render_buffer,
-                                                      svg_renderer,
-                                                      *ras_ptr,
-                                                      bbox,
-                                                      marker_trans,
-                                                      sym,
-                                                      *detector_,
-                                                      scale_factor_,
-                                                      snap_pixels);
-                    vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                        converter(query_extent_, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_);
-                    if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                    {
-                        eGeomType type = feature.paths()[0].type();
-                        if (type == Polygon)
-                            converter.template set<clip_poly_tag>();
-                        // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                        //else if (type == LineString)
-                        //    converter.template set<clip_line_tag>();
-                        // don't clip if type==Point
-                    }
-                    converter.template set<transform_tag>(); //always transform
-                    if (sym.smooth() > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
-                    apply_markers_multi(feature, converter, sym);
-                }
-            }
-            else // raster markers
-            {
-                setup_transform_scaling(tr, (*mark)->width(), (*mark)->height(), feature, sym);
-                evaluate_transform(tr, feature, sym.get_image_transform());
-                box2d<double> const& bbox = (*mark)->bounding_box();
-                coord2d center = bbox.center();
-                agg::trans_affine_translation recenter(-center.x, -center.y);
-                agg::trans_affine marker_trans = recenter * tr;
-                boost::optional<mapnik::image_ptr> marker = (*mark)->get_bitmap_data();
-                typedef raster_markers_rasterizer_dispatch<buf_type,rasterizer, detector_type> dispatch_type;
-                buf_type render_buffer(current_buffer_->raw_data(), width_, height_, width_ * 4);
-                dispatch_type rasterizer_dispatch(render_buffer,
-                                                  *ras_ptr,
-                                                  **marker,
-                                                  marker_trans,
-                                                  sym,
-                                                  *detector_,
-                                                  scale_factor_,
-                                                  true /*snap rasters no matter what*/);
-                vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                 CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                    converter(query_extent_, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_);
+    auto renderer_context = std::tie(render_buffer,*ras_ptr,pixmap_);
+    using context_type = decltype(renderer_context);
+    using vector_dispatch_type = vector_markers_rasterizer_dispatch<svg_renderer_type, detector_type, context_type>;
+    using raster_dispatch_type = raster_markers_rasterizer_dispatch<detector_type, context_type>;
 
-                if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                {
-                    eGeomType type = feature.paths()[0].type();
-                    if (type == Polygon)
-                        converter.template set<clip_poly_tag>();
-                    // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                    //else if (type == LineString)
-                    //    converter.template set<clip_line_tag>();
-                    // don't clip if type==Point
-                }
-                converter.template set<transform_tag>(); //always transform
-                if (sym.smooth() > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
-                apply_markers_multi(feature, converter, sym);
-            }
-        }
-    }
+    render_markers_symbolizer<vector_dispatch_type, raster_dispatch_type>(
+        sym, feature, prj_trans, common_, clip_box, renderer_context);
 }
 
 template void agg_renderer<image_32>::process(markers_symbolizer const&,
diff --git a/src/agg/process_point_symbolizer.cpp b/src/agg/process_point_symbolizer.cpp
index 9db818a..96d0410 100644
--- a/src/agg/process_point_symbolizer.cpp
+++ b/src/agg/process_point_symbolizer.cpp
@@ -25,15 +25,14 @@
 #include <mapnik/agg_renderer.hpp>
 #include <mapnik/agg_rasterizer.hpp>
 #include <mapnik/image_util.hpp>
-
 #include <mapnik/geom_util.hpp>
-#include <mapnik/point_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/marker.hpp>
 #include <mapnik/marker_cache.hpp>
 #include <mapnik/label_collision_detector.hpp>
 #include <mapnik/parse_path.hpp>
 #include <mapnik/pixel_position.hpp>
-
+#include <mapnik/renderer_common/process_point_symbolizer.hpp>
 
 // agg
 #include "agg_trans_affine.h"
@@ -42,74 +41,22 @@
 #include <string>
 
 // boost
-#include <boost/make_shared.hpp>
 
 namespace mapnik {
 
-template <typename T>
-void agg_renderer<T>::process(point_symbolizer const& sym,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(point_symbolizer const& sym,
                               mapnik::feature_impl & feature,
                               proj_transform const& prj_trans)
 {
-    std::string filename = path_processor_type::evaluate(*sym.get_filename(), feature);
-
-    boost::optional<mapnik::marker_ptr> marker;
-    if ( !filename.empty() )
-    {
-        marker = marker_cache::instance().find(filename, true);
-    }
-    else
-    {
-        marker.reset(boost::make_shared<mapnik::marker>());
-    }
-
-    if (marker)
-    {
-        box2d<double> const& bbox = (*marker)->bounding_box();
-        coord2d center = bbox.center();
-
-        agg::trans_affine tr;
-        evaluate_transform(tr, feature, sym.get_image_transform());
-        agg::trans_affine_translation recenter(-center.x, -center.y);
-        agg::trans_affine recenter_tr = recenter * tr;
-        box2d<double> label_ext = bbox * recenter_tr * agg::trans_affine_scaling(scale_factor_);
-
-        for (unsigned i=0; i<feature.num_geometries(); ++i)
-        {
-            geometry_type const& geom = feature.get_geometry(i);
-            double x;
-            double y;
-            double z=0;
-            if (sym.get_point_placement() == CENTROID_POINT_PLACEMENT)
-            {
-                if (!label::centroid(geom, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::interior_position(geom ,x, y))
-                    return;
-            }
-
-            prj_trans.backward(x,y,z);
-            t_.forward(&x,&y);
-            label_ext.re_center(x,y);
-            if (sym.get_allow_overlap() ||
-                detector_->has_placement(label_ext))
-            {
-
-                render_marker(pixel_position(x, y),
-                              **marker,
-                              tr,
-                              sym.get_opacity(),
-                              sym.comp_op());
-
-                if (!sym.get_ignore_placement())
-                    detector_->insert(label_ext);
-            }
-        }
-    }
-
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
+
+    render_point_symbolizer(
+        sym, feature, prj_trans, common_,
+        [&](pixel_position const& pos, marker const& marker, 
+            agg::trans_affine const& tr, double opacity) {
+            render_marker(pos, marker, tr, opacity, comp_op);
+        });
 }
 
 template void agg_renderer<image_32>::process(point_symbolizer const&,
diff --git a/src/agg/process_polygon_pattern_symbolizer.cpp b/src/agg/process_polygon_pattern_symbolizer.cpp
index da43f91..ea58d8b 100644
--- a/src/agg/process_polygon_pattern_symbolizer.cpp
+++ b/src/agg/process_polygon_pattern_symbolizer.cpp
@@ -20,9 +20,6 @@
  *
  *****************************************************************************/
 
-// boost
-#include <boost/foreach.hpp>
-
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/debug.hpp>
@@ -34,12 +31,18 @@
 #include <mapnik/marker_cache.hpp>
 #include <mapnik/vertex_converters.hpp>
 #include <mapnik/parse_path.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/svg/svg_converter.hpp>
+#include <mapnik/svg/svg_renderer_agg.hpp>
+#include <mapnik/svg/svg_path_adapter.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
+#include <mapnik/renderer_common/render_pattern.hpp>
 
 // agg
 #include "agg_basics.h"
 #include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_scanline_u.h"
 // for polygon_pattern_symbolizer
@@ -51,113 +54,120 @@
 
 namespace mapnik {
 
-template <typename T>
-void agg_renderer<T>::process(polygon_pattern_symbolizer const& sym,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(polygon_pattern_symbolizer const& sym,
                               mapnik::feature_impl & feature,
                               proj_transform const& prj_trans)
 {
-    typedef agg::conv_clip_polygon<geometry_type> clipped_geometry_type;
-    typedef coord_transform<CoordTransform,clipped_geometry_type> path_type;
+    std::string filename = get<std::string, keys::file>(sym, feature, common_.vars_);
+    if (filename.empty()) return;
+    boost::optional<mapnik::marker_ptr> marker_ptr = marker_cache::instance().find(filename, true);
+    if (!marker_ptr || !(*marker_ptr)) return;
 
-    agg::rendering_buffer buf(current_buffer_->raw_data(), width_, height_, width_ * 4);
-    ras_ptr->reset();
-    if (sym.get_gamma() != gamma_ || sym.get_gamma_method() != gamma_method_)
-    {
-        set_gamma_method(sym, ras_ptr);
-        gamma_method_ = sym.get_gamma_method();
-        gamma_ = sym.get_gamma();
-    }
-    std::string filename = path_processor_type::evaluate( *sym.get_filename(), feature);
-    boost::optional<mapnik::marker_ptr> marker;
-    if ( !filename.empty() )
+    boost::optional<image_ptr> pat;
+
+    if ((*marker_ptr)->is_bitmap())
     {
-        marker = marker_cache::instance().find(filename, true);
+        pat = (*marker_ptr)->get_bitmap_data();
     }
     else
     {
-        MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: File not found=" << filename;
+        agg::trans_affine image_tr = agg::trans_affine_scaling(common_.scale_factor_);
+        auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+        if (image_transform) evaluate_transform(image_tr, feature, common_.vars_, *image_transform);
+        pat = render_pattern(*ras_ptr, **marker_ptr, image_tr, 1.0);
     }
 
-    if (!marker) return;
+    if (!pat) return;
 
-    if (!(*marker)->is_bitmap())
-    {
-        MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Only images (not '" << filename << "') are supported in the polygon_pattern_symbolizer";
+    using clipped_geometry_type = agg::conv_clip_polygon<geometry_type>;
+    using path_type = transform_path_adapter<view_transform,clipped_geometry_type>;
 
-        return;
+    agg::rendering_buffer buf(current_buffer_->raw_data(), current_buffer_->width(),
+                              current_buffer_->height(), current_buffer_->width() * 4);
+    ras_ptr->reset();
+    value_double gamma = get<value_double, keys::gamma>(sym, feature, common_.vars_);
+    gamma_method_enum gamma_method = get<gamma_method_enum, keys::gamma_method>(sym, feature, common_.vars_);
+    if (gamma != gamma_ || gamma_method != gamma_method_)
+    {
+        set_gamma_method(ras_ptr, gamma, gamma_method);
+        gamma_method_ = gamma_method;
+        gamma_ = gamma;
     }
 
-    boost::optional<image_ptr> pat = (*marker)->get_bitmap_data();
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double opacity = get<double, keys::opacity>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
 
-    if (!pat) return;
+    box2d<double> clip_box = clipping_extent(common_);
 
-    typedef agg::rgba8 color;
-    typedef agg::order_rgba order;
-    typedef agg::pixel32_type pixel_type;
-    typedef agg::comp_op_adaptor_rgba_pre<color, order> blender_type;
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer> pixfmt_type;
+    using color = agg::rgba8;
+    using order = agg::order_rgba;
+    using blender_type = agg::comp_op_adaptor_rgba_pre<color, order>;
+    using pixfmt_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
 
-    typedef agg::wrap_mode_repeat wrap_x_type;
-    typedef agg::wrap_mode_repeat wrap_y_type;
-    typedef agg::image_accessor_wrap<agg::pixfmt_rgba32,
-                                     wrap_x_type,
-                                     wrap_y_type> img_source_type;
+    using wrap_x_type = agg::wrap_mode_repeat;
+    using wrap_y_type = agg::wrap_mode_repeat;
+    using img_source_type = agg::image_accessor_wrap<agg::pixfmt_rgba32_pre,
+                                                     wrap_x_type,
+                                                     wrap_y_type>;
 
-    typedef agg::span_pattern_rgba<img_source_type> span_gen_type;
-    typedef agg::renderer_base<pixfmt_type> ren_base;
+    using span_gen_type = agg::span_pattern_rgba<img_source_type>;
+    using ren_base = agg::renderer_base<pixfmt_type>;
 
-    typedef agg::renderer_scanline_aa_alpha<ren_base,
+    using renderer_type = agg::renderer_scanline_aa_alpha<ren_base,
         agg::span_allocator<agg::rgba8>,
-        span_gen_type> renderer_type;
+        span_gen_type>;
 
     pixfmt_type pixf(buf);
-    pixf.comp_op(static_cast<agg::comp_op_e>(sym.comp_op()));
+    pixf.comp_op(static_cast<agg::comp_op_e>(get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_)));
     ren_base renb(pixf);
 
     unsigned w=(*pat)->width();
     unsigned h=(*pat)->height();
     agg::rendering_buffer pattern_rbuf((agg::int8u*)(*pat)->getBytes(),w,h,w*4);
-    agg::pixfmt_rgba32 pixf_pattern(pattern_rbuf);
+    agg::pixfmt_rgba32_pre pixf_pattern(pattern_rbuf);
     img_source_type img_src(pixf_pattern);
 
-    pattern_alignment_e align = sym.get_alignment();
+    pattern_alignment_enum alignment = get<pattern_alignment_enum, keys::alignment>(sym, feature, common_.vars_);
     unsigned offset_x=0;
     unsigned offset_y=0;
 
-    if (align == LOCAL_ALIGNMENT)
+    if (alignment == LOCAL_ALIGNMENT)
     {
         double x0 = 0;
         double y0 = 0;
         if (feature.num_geometries() > 0)
         {
             clipped_geometry_type clipped(feature.get_geometry(0));
-            clipped.clip_box(query_extent_.minx(),query_extent_.miny(),query_extent_.maxx(),query_extent_.maxy());
-            path_type path(t_,clipped,prj_trans);
+            clipped.clip_box(clip_box.minx(),clip_box.miny(),clip_box.maxx(),clip_box.maxy());
+            path_type path(common_.t_,clipped,prj_trans);
             path.vertex(&x0,&y0);
         }
-        offset_x = unsigned(width_ - x0);
-        offset_y = unsigned(height_ - y0);
+        offset_x = unsigned(current_buffer_->width() - x0);
+        offset_y = unsigned(current_buffer_->height() - y0);
     }
 
     span_gen_type sg(img_src, offset_x, offset_y);
 
     agg::span_allocator<agg::rgba8> sa;
-    renderer_type rp(renb,sa, sg, unsigned(sym.get_opacity()*255));
+    renderer_type rp(renb,sa, sg, unsigned(opacity * 255));
 
     agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
 
-    typedef boost::mpl::vector<clip_poly_tag,transform_tag,simplify_tag,smooth_tag> conv_types;
-    vertex_converter<box2d<double>, rasterizer, polygon_pattern_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(query_extent_,*ras_ptr,sym,t_,prj_trans,tr,scale_factor_);
+    vertex_converter<rasterizer, clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag>
+        converter(clip_box,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
 
-    if (prj_trans.equal() && sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
+    if (prj_trans.equal() && clip) converter.set<clip_poly_tag>(); //optional clip (default: true)
     converter.set<transform_tag>(); //always transform
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+    converter.set<affine_transform_tag>(); // optional affine transform
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
 
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
+    for ( geometry_type & geom : feature.paths())
     {
         if (geom.size() > 2)
         {
@@ -165,6 +175,7 @@ void agg_renderer<T>::process(polygon_pattern_symbolizer const& sym,
         }
     }
     agg::scanline_u8 sl;
+    ras_ptr->filling_rule(agg::fill_even_odd);
     agg::render_scanlines(*ras_ptr, sl, rp);
 }
 
diff --git a/src/agg/process_polygon_symbolizer.cpp b/src/agg/process_polygon_symbolizer.cpp
index febd2a5..5a5fb49 100644
--- a/src/agg/process_polygon_symbolizer.cpp
+++ b/src/agg/process_polygon_symbolizer.cpp
@@ -21,7 +21,7 @@
  *****************************************************************************/
 
 // boost
-#include <boost/foreach.hpp>
+
 
 // mapnik
 #include <mapnik/feature.hpp>
@@ -29,76 +29,63 @@
 #include <mapnik/graphics.hpp>
 #include <mapnik/agg_helpers.hpp>
 #include <mapnik/agg_rasterizer.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/vertex_converters.hpp>
-
+#include <mapnik/renderer_common/process_polygon_symbolizer.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
 // agg
 #include "agg_basics.h"
 #include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
+#include "agg_renderer_scanline.h"
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_scanline_u.h"
 
 namespace mapnik {
 
-template <typename T>
-void agg_renderer<T>::process(polygon_symbolizer const& sym,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(polygon_symbolizer const& sym,
                               mapnik::feature_impl & feature,
                               proj_transform const& prj_trans)
 {
+    using vertex_converter_type = vertex_converter<rasterizer,clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag>;
 
     ras_ptr->reset();
-    if (sym.get_gamma() != gamma_ || sym.get_gamma_method() != gamma_method_)
+    double gamma = get<value_double>(sym, keys::gamma, feature, common_.vars_, 1.0);
+    gamma_method_enum gamma_method = get<gamma_method_enum>(sym, keys::gamma_method, feature, common_.vars_, GAMMA_POWER);
+    if (gamma != gamma_ || gamma_method != gamma_method_)
     {
-        set_gamma_method(sym, ras_ptr);
-        gamma_method_ = sym.get_gamma_method();
-        gamma_ = sym.get_gamma();
+        set_gamma_method(ras_ptr, gamma, gamma_method);
+        gamma_method_ = gamma_method;
+        gamma_ = gamma;
     }
-    agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
-
-    typedef boost::mpl::vector<clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag> conv_types;
-    vertex_converter<box2d<double>, rasterizer, polygon_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(query_extent_,*ras_ptr,sym,t_,prj_trans,tr,scale_factor_);
-
-    if (prj_trans.equal() && sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
-    converter.set<transform_tag>(); //always transform
-    converter.set<affine_transform_tag>();
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
-    {
-        if (geom.size() > 2)
-        {
-            converter.apply(geom);
-        }
-    }
-
-    agg::rendering_buffer buf(current_buffer_->raw_data(),width_,height_, width_ * 4);
-
-    color const& fill = sym.get_fill();
-    unsigned r=fill.red();
-    unsigned g=fill.green();
-    unsigned b=fill.blue();
-    unsigned a=fill.alpha();
 
-    typedef agg::rgba8 color_type;
-    typedef agg::order_rgba order_type;
-    typedef agg::pixel32_type pixel_type;
-    typedef agg::comp_op_adaptor_rgba_pre<color_type, order_type> blender_type; // comp blender
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer> pixfmt_comp_type;
-    typedef agg::renderer_base<pixfmt_comp_type> renderer_base;
-    typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type;
-    pixfmt_comp_type pixf(buf);
-    pixf.comp_op(static_cast<agg::comp_op_e>(sym.comp_op()));
-    renderer_base renb(pixf);
-    renderer_type ren(renb);
-    ren.color(agg::rgba8_pre(r, g, b, int(a * sym.get_opacity())));
-    agg::scanline_u8 sl;
-    agg::render_scanlines(*ras_ptr, sl, ren);
+    box2d<double> clip_box = clipping_extent(common_);
+    agg::rendering_buffer buf(current_buffer_->raw_data(),current_buffer_->width(),current_buffer_->height(), current_buffer_->width() * 4);
 
+    render_polygon_symbolizer<vertex_converter_type>(
+        sym, feature, prj_trans, common_, clip_box, *ras_ptr,
+        [&](color const &fill, double opacity) {
+            unsigned r=fill.red();
+            unsigned g=fill.green();
+            unsigned b=fill.blue();
+            unsigned a=fill.alpha();
+            using color_type = agg::rgba8;
+            using order_type = agg::order_rgba;
+            using blender_type = agg::comp_op_adaptor_rgba_pre<color_type, order_type>; // comp blender
+            using pixfmt_comp_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
+            using renderer_base = agg::renderer_base<pixfmt_comp_type>;
+            using renderer_type = agg::renderer_scanline_aa_solid<renderer_base>;
+            pixfmt_comp_type pixf(buf);
+            pixf.comp_op(static_cast<agg::comp_op_e>(get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over)));
+            renderer_base renb(pixf);
+            renderer_type ren(renb);
+            ren.color(agg::rgba8_pre(r, g, b, int(a * opacity)));
+            agg::scanline_u8 sl;
+            ras_ptr->filling_rule(agg::fill_even_odd);
+            agg::render_scanlines(*ras_ptr, sl, ren);
+        });
 }
 
 template void agg_renderer<image_32>::process(polygon_symbolizer const&,
diff --git a/src/agg/process_raster_symbolizer.cpp b/src/agg/process_raster_symbolizer.cpp
index 6dcdda2..e79664f 100644
--- a/src/agg/process_raster_symbolizer.cpp
+++ b/src/agg/process_raster_symbolizer.cpp
@@ -26,15 +26,15 @@
 #include <mapnik/image_scaling.hpp>
 #include <mapnik/image_compositing.hpp>
 #include <mapnik/graphics.hpp>
-#include <mapnik/raster_symbolizer.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/raster_colorizer.hpp>
 #include <mapnik/agg_rasterizer.hpp>
 #include <mapnik/image_data.hpp>
 #include <mapnik/image_util.hpp>
 #include <mapnik/raster.hpp>
 #include <mapnik/box2d.hpp>
-#include <mapnik/warp.hpp>
 #include <mapnik/config.hpp>
+#include <mapnik/renderer_common/process_raster_symbolizer.hpp>
 
 // stl
 #include <cmath>
@@ -43,91 +43,21 @@
 #include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
 
-
 namespace mapnik {
 
-
-template <typename T>
-void agg_renderer<T>::process(raster_symbolizer const& sym,
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(raster_symbolizer const& sym,
                               mapnik::feature_impl & feature,
                               proj_transform const& prj_trans)
 {
-    raster_ptr const& source = feature.get_raster();
-    if (source)
-    {
-        // If there's a colorizer defined, use it to color the raster in-place
-        raster_colorizer_ptr colorizer = sym.get_colorizer();
-        if (colorizer)
-            colorizer->colorize(source,feature);
-
-        box2d<double> target_ext = box2d<double>(source->ext_);
-        prj_trans.backward(target_ext, PROJ_ENVELOPE_POINTS);
-        box2d<double> ext = t_.forward(target_ext);
-        int start_x = static_cast<int>(std::floor(ext.minx()+.5));
-        int start_y = static_cast<int>(std::floor(ext.miny()+.5));
-        int end_x = static_cast<int>(std::floor(ext.maxx()+.5));
-        int end_y = static_cast<int>(std::floor(ext.maxy()+.5));
-        int raster_width = end_x - start_x;
-        int raster_height = end_y - start_y;
-        if (raster_width > 0 && raster_height > 0)
-        {
-            raster target(target_ext, raster_width,raster_height);
-            scaling_method_e scaling_method = sym.get_scaling_method();
-            double filter_radius = sym.calculate_filter_factor();
-            bool premultiply_source = !source->premultiplied_alpha_;
-            boost::optional<bool> is_premultiplied = sym.premultiplied();
-            if (is_premultiplied)
-            {
-                if (*is_premultiplied) premultiply_source = false;
-                else premultiply_source = true;
-            }
-            if (premultiply_source)
-            {
-                agg::rendering_buffer buffer(source->data_.getBytes(),
-                                             source->data_.width(),
-                                             source->data_.height(),
-                                             source->data_.width() * 4);
-                agg::pixfmt_rgba32 pixf(buffer);
-                pixf.premultiply();
-            }
-            if (!prj_trans.equal())
-            {
-                double offset_x = ext.minx() - start_x;
-                double offset_y = ext.miny() - start_y;
-                reproject_and_scale_raster(target, *source, prj_trans,
-                                 offset_x, offset_y,
-                                 sym.get_mesh_size(),
-                                 filter_radius,
-                                 scaling_method);
-            }
-            else
-            {
-                if (scaling_method == SCALING_BILINEAR8)
-                {
-                    scale_image_bilinear8<image_data_32>(target.data_,
-                                                         source->data_,
-                                                         0.0,
-                                                         0.0);
-                }
-                else
-                {
-                    double image_ratio_x = ext.width() / source->data_.width();
-                    double image_ratio_y = ext.height() / source->data_.height();
-                    scale_image_agg<image_data_32>(target.data_,
-                                                   source->data_,
-                                                   scaling_method,
-                                                   image_ratio_x,
-                                                   image_ratio_y,
-                                                   0.0,
-                                                   0.0,
-                                                   filter_radius);
-                }
-            }
-            composite(current_buffer_->data(), target.data_,
-                      sym.comp_op(), sym.get_opacity(),
-                      start_x, start_y, false);
+    render_raster_symbolizer(
+        sym, feature, prj_trans, common_,
+        [&](image_data_32 & target, composite_mode_e comp_op, double opacity,
+            int start_x, int start_y) {
+            composite(current_buffer_->data(), target,
+                      comp_op, opacity, start_x, start_y, false);
         }
-    }
+    );
 }
 
 template void agg_renderer<image_32>::process(raster_symbolizer const&,
diff --git a/src/agg/process_shield_symbolizer.cpp b/src/agg/process_shield_symbolizer.cpp
index 753dccd..ad86e41 100644
--- a/src/agg/process_shield_symbolizer.cpp
+++ b/src/agg/process_shield_symbolizer.cpp
@@ -23,58 +23,52 @@
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/agg_renderer.hpp>
+#include <mapnik/graphics.hpp>
 #include <mapnik/agg_rasterizer.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/symbolizer_helpers.hpp>
+#include <mapnik/text/symbolizer_helpers.hpp>
 #include <mapnik/pixel_position.hpp>
-#include <mapnik/font_util.hpp>
-
-// boost
-#include <boost/make_shared.hpp>
+#include <mapnik/text/renderer.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
 
 namespace mapnik {
 
-template <typename T>
-void  agg_renderer<T>::process(shield_symbolizer const& sym,
-                               mapnik::feature_impl & feature,
-                               proj_transform const& prj_trans)
+template <typename T0, typename T1>
+void  agg_renderer<T0,T1>::process(shield_symbolizer const& sym,
+                                   mapnik::feature_impl & feature,
+                                   proj_transform const& prj_trans)
 {
-    shield_symbolizer_helper<face_manager<freetype_engine>,
-        label_collision_detector4> helper(
-            sym, feature, prj_trans,
-            width_, height_,
-            scale_factor_,
-            t_, font_manager_, *detector_,
-            query_extent_);
+    box2d<double> clip_box = clipping_extent(common_);
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    text_symbolizer_helper helper(
+        sym, feature, common_.vars_, prj_trans,
+        common_.width_, common_.height_,
+        common_.scale_factor_,
+        common_.t_, common_.font_manager_, *common_.detector_,
+        clip_box, tr);
 
-    text_renderer<T> ren(*current_buffer_,
-                         font_manager_,
-                         sym.get_halo_rasterizer(),
-                         sym.comp_op(),
-                         scale_factor_);
+    halo_rasterizer_enum halo_rasterizer = get<halo_rasterizer_enum>(sym, keys::halo_rasterizer, feature, common_.vars_, HALO_RASTERIZER_FULL);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
+    composite_mode_e halo_comp_op = get<composite_mode_e>(sym, keys::halo_comp_op, feature, common_.vars_, src_over);
+    agg_text_renderer<T0> ren(*current_buffer_,
+                              halo_rasterizer,
+                              comp_op,
+                              halo_comp_op,
+                              common_.scale_factor_,
+                              common_.font_manager_.get_stroker());
 
-    while (helper.next())
-    {
-        placements_type const& placements = helper.placements();
-        for (unsigned int ii = 0; ii < placements.size(); ++ii)
-        {
-            // get_marker_position returns (minx,miny) corner position,
-            // while (currently only) agg_renderer::render_marker newly
-            // expects center position;
-            // until all renderers and shield_symbolizer_helper are
-            // modified accordingly, we must adjust the position here
-            pixel_position pos = helper.get_marker_position(placements[ii]);
-            pos.x += 0.5 * helper.get_marker_width();
-            pos.y += 0.5 * helper.get_marker_height();
-            render_marker(pos,
-                          helper.get_marker(),
-                          helper.get_image_transform(),
-                          sym.get_opacity(),
-                          sym.comp_op());
+    double opacity = get<double>(sym,keys::opacity, feature, common_.vars_, 1.0);
 
-            ren.prepare_glyphs(placements[ii]);
-            ren.render(placements[ii].center);
-        }
+    placements_list const& placements = helper.get();
+    for (glyph_positions_ptr glyphs : placements)
+    {
+        if (glyphs->marker())
+            render_marker(glyphs->marker_pos(),
+                          *(glyphs->marker()->marker),
+                          glyphs->marker()->transform,
+                          opacity, comp_op);
+        ren.render(*glyphs);
     }
 }
 
diff --git a/src/agg/process_text_symbolizer.cpp b/src/agg/process_text_symbolizer.cpp
index 0ee0e95..bb45bed 100644
--- a/src/agg/process_text_symbolizer.cpp
+++ b/src/agg/process_text_symbolizer.cpp
@@ -23,41 +23,56 @@
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/agg_renderer.hpp>
-#include <mapnik/agg_rasterizer.hpp>
-#include <mapnik/symbolizer_helpers.hpp>
 #include <mapnik/graphics.hpp>
-#include <mapnik/font_util.hpp>
+#include <mapnik/agg_rasterizer.hpp>
+#include <mapnik/text/symbolizer_helpers.hpp>
+#include <mapnik/text/renderer.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
 
 namespace mapnik {
 
-template <typename T>
-void agg_renderer<T>::process(text_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
+template <typename T0, typename T1>
+void agg_renderer<T0,T1>::process(text_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
 {
-    text_symbolizer_helper<face_manager<freetype_engine>,
-        label_collision_detector4> helper(
-            sym, feature, prj_trans,
-            width_,height_,
-            scale_factor_,
-            t_, font_manager_, *detector_,
-            query_extent_);
 
-    text_renderer<T> ren(*current_buffer_,
-                         font_manager_,
-                         sym.get_halo_rasterizer(),
-                         sym.comp_op(),
-                         scale_factor_);
+    box2d<double> clip_box = clipping_extent(common_);
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    text_symbolizer_helper helper(
+        sym, feature, common_.vars_, prj_trans,
+        common_.width_, common_.height_,
+        common_.scale_factor_,
+        common_.t_, common_.font_manager_, *common_.detector_,
+        clip_box, tr);
 
-    while (helper.next()) 
-    {
-        placements_type const& placements = helper.placements();
-        for (unsigned int ii = 0; ii < placements.size(); ++ii)
+    halo_rasterizer_enum halo_rasterizer = get<halo_rasterizer_enum>(sym, keys::halo_rasterizer,feature, common_.vars_, HALO_RASTERIZER_FULL);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
+    composite_mode_e halo_comp_op = get<composite_mode_e>(sym, keys::halo_comp_op, feature, common_.vars_, src_over);
+    agg_text_renderer<T0> ren(*current_buffer_,
+                              halo_rasterizer,
+                              comp_op,
+                              halo_comp_op,
+                              common_.scale_factor_,
+                              common_.font_manager_.get_stroker());
+
+    { // halo transform
+        agg::trans_affine halo_transform;
+        auto transform = get_optional<transform_type>(sym, keys::halo_transform);
+        if (transform)
         {
-            ren.prepare_glyphs(placements[ii]);
-            ren.render(placements[ii].center);
+            evaluate_transform(halo_transform, feature, common_.vars_, *transform);
+            ren.set_halo_transform(halo_transform);
         }
     }
+
+    placements_list const& placements = helper.get();
+    for (glyph_positions_ptr glyphs : placements)
+    {
+        ren.render(*glyphs);
+    }
 }
 
 template void agg_renderer<image_32>::process(text_symbolizer const&,
diff --git a/src/box2d.cpp b/src/box2d.cpp
index b7fbdb3..209fdec 100644
--- a/src/box2d.cpp
+++ b/src/box2d.cpp
@@ -26,14 +26,29 @@
 
 // stl
 #include <stdexcept>
+#include <sstream>
+#include <iomanip>
 
 // boost
-#include <boost/tokenizer.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/fusion/include/adapt_adt.hpp>
 #include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/support_adapt_adt_attributes.hpp>
+#pragma GCC diagnostic pop
 
 // agg
 #include "agg_trans_affine.h"
 
+BOOST_FUSION_ADAPT_TPL_ADT(
+    (T),
+    (mapnik::box2d)(T),
+    (T, T, obj.minx(), obj.set_minx(val))
+    (T, T, obj.miny(), obj.set_miny(val))
+    (T, T, obj.maxx(), obj.set_maxx(val))
+    (T, T, obj.maxy(), obj.set_maxy(val)))
+
 namespace mapnik
 {
 template <typename T>
@@ -47,25 +62,34 @@ box2d<T>::box2d(T minx,T miny,T maxx,T maxy)
 }
 
 template <typename T>
-box2d<T>::box2d(const coord<T,2> &c0,const coord<T,2> &c1)
+box2d<T>::box2d(coord<T,2> const& c0, coord<T,2> const& c1)
 {
     init(c0.x,c0.y,c1.x,c1.y);
 }
 
 template <typename T>
-box2d<T>::box2d(const box2d &rhs)
+box2d<T>::box2d(box2d_type const& rhs)
     : minx_(rhs.minx_),
       miny_(rhs.miny_),
       maxx_(rhs.maxx_),
       maxy_(rhs.maxy_) {}
-// copy rather than init so dfl ctor (0,0,-1,-1) is not modified
-// https://github.com/mapnik/mapnik/issues/749
-/*{
-  init(rhs.minx_,rhs.miny_,rhs.maxx_,rhs.maxy_);
-  }*/
 
 template <typename T>
-box2d<T>::box2d(const box2d_type &rhs, const agg::trans_affine& tr)
+box2d<T>::box2d(box2d_type && rhs)
+    : minx_(std::move(rhs.minx_)),
+      miny_(std::move(rhs.miny_)),
+      maxx_(std::move(rhs.maxx_)),
+      maxy_(std::move(rhs.maxy_)) {}
+
+template <typename T>
+box2d<T>& box2d<T>::operator=(box2d_type other)
+{
+    swap(*this, other);
+    return *this;
+}
+
+template <typename T>
+box2d<T>::box2d(box2d_type const& rhs, agg::trans_affine const& tr)
 {
     double x0 = rhs.minx_, y0 = rhs.miny_;
     double x1 = rhs.maxx_, y1 = rhs.miny_;
@@ -75,16 +99,14 @@ box2d<T>::box2d(const box2d_type &rhs, const agg::trans_affine& tr)
     tr.transform(&x1, &y1);
     tr.transform(&x2, &y2);
     tr.transform(&x3, &y3);
-    init(x0, y0, x2, y2);
-    expand_to_include(x1, y1);
-    expand_to_include(x3, y3);
+    init(static_cast<T>(x0), static_cast<T>(y0),
+         static_cast<T>(x2), static_cast<T>(y2));
+    expand_to_include(static_cast<T>(x1), static_cast<T>(y1));
+    expand_to_include(static_cast<T>(x3), static_cast<T>(y3));
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-bool box2d<T>::operator==(const box2d<T>& other) const
+bool box2d<T>::operator==(box2d<T> const& other) const
 {
     return minx_==other.minx_ &&
         miny_==other.miny_ &&
@@ -93,36 +115,24 @@ bool box2d<T>::operator==(const box2d<T>& other) const
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 T box2d<T>::minx() const
 {
     return minx_;
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 T box2d<T>::maxx() const
 {
     return maxx_;
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 T box2d<T>::miny() const
 {
     return miny_;
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 T box2d<T>::maxy() const
 {
     return maxy_;
@@ -153,27 +163,18 @@ void box2d<T>::set_maxy(T v)
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 T box2d<T>::width() const
 {
     return maxx_-minx_;
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 T box2d<T>::height() const
 {
     return maxy_-miny_;
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 void box2d<T>::width(T w)
 {
     T cx=center().x;
@@ -182,9 +183,6 @@ void box2d<T>::width(T w)
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 void box2d<T>::height(T h)
 {
     T cy=center().y;
@@ -193,9 +191,6 @@ void box2d<T>::height(T h)
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 coord<T,2> box2d<T>::center() const
 {
     return coord<T,2>(static_cast<T>(0.5*(minx_+maxx_)),
@@ -203,18 +198,12 @@ coord<T,2> box2d<T>::center() const
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-void box2d<T>::expand_to_include(const coord<T,2>& c)
+void box2d<T>::expand_to_include(coord<T,2> const& c)
 {
     expand_to_include(c.x,c.y);
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 void box2d<T>::expand_to_include(T x,T y)
 {
     if (x<minx_) minx_=x;
@@ -224,7 +213,7 @@ void box2d<T>::expand_to_include(T x,T y)
 }
 
 template <typename T>
-void box2d<T>::expand_to_include(const box2d<T> &other)
+void box2d<T>::expand_to_include(box2d<T> const& other)
 {
     if (other.minx_<minx_) minx_=other.minx_;
     if (other.maxx_>maxx_) maxx_=other.maxx_;
@@ -233,28 +222,19 @@ void box2d<T>::expand_to_include(const box2d<T> &other)
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-bool box2d<T>::contains(const coord<T,2> &c) const
+bool box2d<T>::contains(coord<T,2> const& c) const
 {
     return contains(c.x,c.y);
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 bool box2d<T>::contains(T x,T y) const
 {
     return x>=minx_ && x<=maxx_ && y>=miny_ && y<=maxy_;
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-bool box2d<T>::contains(const box2d<T> &other) const
+bool box2d<T>::contains(box2d<T> const& other) const
 {
     return other.minx_>=minx_ &&
         other.maxx_<=maxx_ &&
@@ -263,38 +243,26 @@ bool box2d<T>::contains(const box2d<T> &other) const
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-bool box2d<T>::intersects(const coord<T,2> &c) const
+bool box2d<T>::intersects(coord<T,2> const& c) const
 {
     return intersects(c.x,c.y);
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 bool box2d<T>::intersects(T x,T y) const
 {
     return !(x>maxx_ || x<minx_ || y>maxy_ || y<miny_);
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-bool box2d<T>::intersects(const box2d<T> &other) const
+bool box2d<T>::intersects(box2d<T> const& other) const
 {
     return !(other.minx_>maxx_ || other.maxx_<minx_ ||
              other.miny_>maxy_ || other.maxy_<miny_);
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-box2d<T> box2d<T>::intersect(const box2d_type& other) const
+box2d<T> box2d<T>::intersect(box2d_type const& other) const
 {
     if (intersects(other)) {
         T x0=std::max(minx_,other.minx_);
@@ -310,9 +278,6 @@ box2d<T> box2d<T>::intersect(const box2d_type& other) const
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 void box2d<T>::re_center(T cx,T cy)
 {
     T dx=cx-center().x;
@@ -324,18 +289,12 @@ void box2d<T>::re_center(T cx,T cy)
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-void box2d<T>::re_center(const coord<T,2> &c)
+void box2d<T>::re_center(coord<T,2> const& c)
 {
     re_center(c.x,c.y);
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 void box2d<T>::init(T x0,T y0,T x1,T y1)
 {
     if (x0<x1)
@@ -357,10 +316,7 @@ void box2d<T>::init(T x0,T y0,T x1,T y1)
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-void box2d<T>::clip(const box2d_type& other)
+void box2d<T>::clip(box2d_type const& other)
 {
     minx_ = std::max(minx_,other.minx());
     miny_ = std::max(miny_,other.miny());
@@ -369,9 +325,6 @@ void box2d<T>::clip(const box2d_type& other)
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 void box2d<T>::pad(T padding)
 {
     minx_ -= padding;
@@ -380,67 +333,71 @@ void box2d<T>::pad(T padding)
     maxy_ += padding;
 }
 
+
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
-bool box2d<T>::from_string(std::string const& s)
+bool box2d<T>::from_string(std::string const& str)
 {
-    unsigned i = 0;
-    double d[4];
-    bool success = false;
-    boost::char_separator<char> sep(", ");
-    boost::tokenizer<boost::char_separator<char> > tok(s, sep);
-    for (boost::tokenizer<boost::char_separator<char> >::iterator beg = tok.begin();
-         beg != tok.end(); ++beg)
-    {
-        std::string item = mapnik::util::trim_copy(*beg);
-        // note: we intentionally do not use mapnik::util::conversions::string2double
-        // here to ensure that shapeindex can statically compile mapnik::box2d without
-        // needing to link to libmapnik
-        std::string::const_iterator str_beg = item.begin();
-        std::string::const_iterator str_end = item.end();
-        bool r = boost::spirit::qi::phrase_parse(str_beg,
-                                                 str_end,
-                                                 boost::spirit::qi::double_,
-                                                 boost::spirit::ascii::space,
-                                                 d[i]);
-        if (!(r && (str_beg == str_end)))
-        {
-            break;
-        }
-        if (i == 3)
-        {
-            success = true;
-            break;
-        }
-        ++i;
-    }
-
-    if (success)
-    {
-        init(static_cast<T>(d[0]),static_cast<T>(d[1]),static_cast<T>(d[2]),static_cast<T>(d[3]));
-    }
-
-    return success;
+    boost::spirit::qi::lit_type lit;
+    boost::spirit::qi::double_type double_;
+    boost::spirit::ascii::space_type space;
+    bool r = boost::spirit::qi::phrase_parse(str.begin(),
+                                             str.end(),
+                                             double_ >> -lit(',') >> double_ >> -lit(',')
+                                             >> double_ >> -lit(',') >> double_,
+                                             space,
+                                             *this);
+    return r;
 }
 
 template <typename T>
-#if !defined(__SUNPRO_CC)
-inline
-#endif
 bool box2d<T>::valid() const
 {
     return (minx_ <= maxx_ && miny_ <= maxy_) ;
 }
 
 template <typename T>
+void box2d<T>::move(T x, T y)
+{
+    minx_ += x;
+    maxx_ += x;
+    miny_ += y;
+    maxy_ += y;
+}
+
+template <typename T>
+std::string box2d<T>::to_string() const
+{
+    std::ostringstream s;
+    s << "box2d(" << std::fixed << std::setprecision(16)
+      << minx_ << ',' << miny_ << ','
+      << maxx_ << ',' << maxy_ << ')';
+    return s.str();
+}
+
+
+template <typename T>
 box2d<T>&  box2d<T>::operator+=(box2d<T> const& other)
 {
     expand_to_include(other);
     return *this;
 }
 
+template <typename T>
+box2d<T> box2d<T>::operator+ (T other) const
+{
+    return box2d<T>(minx_ - other, miny_ - other, maxx_ + other, maxy_ + other);
+}
+
+template <typename T>
+box2d<T>& box2d<T>::operator+= (T other)
+{
+    minx_ -= other;
+    miny_ -= other;
+    maxx_ += other;
+    maxy_ += other;
+    return *this;
+}
+
 
 template <typename T>
 box2d<T>& box2d<T>::operator*=(T t)
@@ -511,12 +468,14 @@ box2d<T>& box2d<T>::operator*=(agg::trans_affine const& tr)
     tr.transform(&x1, &y1);
     tr.transform(&x2, &y2);
     tr.transform(&x3, &y3);
-    init(x0, y0, x2, y2);
-    expand_to_include(x1, y1);
-    expand_to_include(x3, y3);
+    init(static_cast<T>(x0), static_cast<T>(y0),
+         static_cast<T>(x2), static_cast<T>(y2));
+    expand_to_include(static_cast<T>(x1), static_cast<T>(y1));
+    expand_to_include(static_cast<T>(x3), static_cast<T>(y3));
     return *this;
 }
 
 template class box2d<int>;
 template class box2d<double>;
+
 }
diff --git a/src/build.py b/src/build.py
index 051729a..4b19328 100644
--- a/src/build.py
+++ b/src/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -52,132 +52,150 @@ libmapnik_defines = copy(lib_env['CPPDEFINES'])
 
 ABI_VERSION = env['ABI_VERSION']
 
+enabled_imaging_libraries = []
 filesystem = 'boost_filesystem%s' % env['BOOST_APPEND']
 regex = 'boost_regex%s' % env['BOOST_APPEND']
 system = 'boost_system%s' % env['BOOST_APPEND']
 
 # clear out and re-set libs for this env
-lib_env['LIBS'] = ['freetype','z',env['ICU_LIB_NAME'],filesystem,system,regex]
+# note: order matters on linux: see lorder | tsort
+lib_env['LIBS'] = [filesystem,
+                   regex]
 
-if env['PROJ']:
-   lib_env['LIBS'].append('proj')
+if env['HAS_CAIRO']:
+    lib_env.Append(LIBS=env['CAIRO_ALL_LIBS'])
 
-if env['PNG']:
+# maybe bz2
+if len(env['EXTRA_FREETYPE_LIBS']):
+    lib_env['LIBS'].extend(copy(env['EXTRA_FREETYPE_LIBS']))
+
+if '-DHAVE_PNG' in env['CPPDEFINES']:
    lib_env['LIBS'].append('png')
+   enabled_imaging_libraries.append('png_reader.cpp')
 
-if env['JPEG']:
-   lib_env['LIBS'].append('jpeg')
+if '-DMAPNIK_USE_PROJ4' in env['CPPDEFINES']:
+   lib_env['LIBS'].append('proj')
 
-if env['TIFF']:
+if '-DHAVE_TIFF' in env['CPPDEFINES']:
    lib_env['LIBS'].append('tiff')
+   enabled_imaging_libraries.append('tiff_reader.cpp')
 
-if len(env['EXTRA_FREETYPE_LIBS']):
-    lib_env['LIBS'].extend(copy(env['EXTRA_FREETYPE_LIBS']))
+if '-DHAVE_WEBP' in env['CPPDEFINES']:
+   lib_env['LIBS'].append('webp')
+   enabled_imaging_libraries.append('webp_reader.cpp')
 
 lib_env['LIBS'].append('xml2')
 
-if env['THREADING'] == 'multi':
-    lib_env['LIBS'].append('boost_thread%s' % env['BOOST_APPEND'])
-
 if '-DBOOST_REGEX_HAS_ICU' in env['CPPDEFINES']:
     lib_env['LIBS'].append('icui18n')
 
+lib_env['LIBS'].append(system)
+
+lib_env['LIBS'].append('harfbuzz')
+
+if '-DHAVE_JPEG' in env['CPPDEFINES']:
+   lib_env['LIBS'].append('jpeg')
+   enabled_imaging_libraries.append('jpeg_reader.cpp')
+
+lib_env['LIBS'].append(env['ICU_LIB_NAME'])
+
+lib_env['LIBS'].append('freetype')
+
 if env['RUNTIME_LINK'] == 'static':
     if 'icuuc' in env['ICU_LIB_NAME']:
         lib_env['LIBS'].append('icudata')
-else:
+
+if env['PLATFORM'] == 'Linux':
+    lib_env['LINKFLAGS'].append('-pthread')
+
+if env['RUNTIME_LINK'] != 'static':
     lib_env['LIBS'].insert(0, 'agg')
 
+lib_env['LIBS'].append('z')
+
 if env['PLATFORM'] == 'Darwin':
     mapnik_libname = env.subst(env['MAPNIK_LIB_NAME'])
     if env['FULL_LIB_PATH']:
         lib_path = '%s/%s' % (env['MAPNIK_LIB_BASE'],mapnik_libname)
     else:
-        lib_path = mapnik_libname
+        lib_path = '@loader_path/'+mapnik_libname
     mapnik_lib_link_flag += ' -Wl,-install_name,%s' % lib_path
     _d = {'version':env['MAPNIK_VERSION_STRING'].replace('-pre','')}
     mapnik_lib_link_flag += ' -current_version %(version)s -compatibility_version %(version)s' % _d
 else: # unix, non-macos
-    mapnik_libname = env.subst(env['MAPNIK_LIB_NAME']) + (".%d.%d" % (int(ABI_VERSION[0]),int(ABI_VERSION[1])))
+    mapnik_libname = env.subst(env['MAPNIK_LIB_NAME'])
+    if env['ENABLE_SONAME']:
+        mapnik_libname = env.subst(env['MAPNIK_LIB_NAME']) + (".%d.%d" % (int(ABI_VERSION[0]),int(ABI_VERSION[1])))
     if env['PLATFORM'] == 'SunOS':
         if env['CXX'].startswith('CC'):
             mapnik_lib_link_flag += ' -R. -h %s' % mapnik_libname
         else:
             mapnik_lib_link_flag += ' -Wl,-h,%s' %  mapnik_libname
     else: # Linux and others
-        mapnik_lib_link_flag += ' -Wl,-rpath-link,. -Wl,-soname,%s' % mapnik_libname
+        lib_env['LIBS'].append('dl')
+        mapnik_lib_link_flag += ' -Wl,-rpath-link,.'
+        if env['ENABLE_SONAME']:
+            mapnik_lib_link_flag += ' -Wl,-soname,%s' % mapnik_libname
+        if env['FULL_LIB_PATH']:
+            mapnik_lib_link_flag += ' -Wl,-rpath=%s' % env['MAPNIK_LIB_BASE']
+        else:
+            mapnik_lib_link_flag += ' -Wl,-z,origin -Wl,-rpath=\$$ORIGIN'
 
 source = Split(
     """
+    expression_grammar.cpp
     fs.cpp
-    debug_symbolizer.cpp
     request.cpp
     well_known_srs.cpp
     params.cpp
     image_filter_types.cpp
     miniz_png.cpp
     color.cpp
-    css_color_grammar.cpp
     conversions.cpp
     image_compositing.cpp
-    image_filter_grammar.cpp
     image_scaling.cpp
     box2d.cpp
-    building_symbolizer.cpp
     datasource_cache.cpp
     datasource_cache_static.cpp
     debug.cpp
-    deepcopy.cpp
     expression_node.cpp
-    expression_grammar.cpp
     expression_string.cpp
     expression.cpp
-    transform_expression_grammar.cpp
     transform_expression.cpp
     feature_kv_iterator.cpp
+    feature_style_processor.cpp
     feature_type_style.cpp
+    dasharray_parser.cpp
     font_engine_freetype.cpp
     font_set.cpp
-    gamma_method.cpp
+    function_call.cpp
     gradient.cpp
     graphics.cpp
+    parse_path.cpp
     image_reader.cpp
     image_util.cpp
     layer.cpp
-    line_symbolizer.cpp
-    line_pattern_symbolizer.cpp
     map.cpp
     load_map.cpp
     memory.cpp
-    parse_path.cpp
-    parse_transform.cpp
     palette.cpp
-    path_expression_grammar.cpp
-    placement_finder.cpp
+    marker_helpers.cpp
+    transform_expression_grammar.cpp
     plugin.cpp
-    point_symbolizer.cpp
-    polygon_pattern_symbolizer.cpp
-    polygon_symbolizer.cpp
     rule.cpp
     save_map.cpp
-    shield_symbolizer.cpp
-    text_symbolizer.cpp
     wkb.cpp
     projection.cpp
     proj_transform.cpp
-    distance.cpp
     scale_denominator.cpp
     simplify.cpp
+    parse_transform.cpp
     memory_datasource.cpp
-    stroke.cpp
     symbolizer.cpp
-    symbolizer_helpers.cpp
+    symbolizer_keys.cpp
+    symbolizer_enumerations.cpp
     unicode.cpp
-    markers_symbolizer.cpp
     raster_colorizer.cpp
-    raster_symbolizer.cpp
-    wkt/wkt_factory.cpp
-    wkt/wkt_generator.cpp
     mapped_memory_cache.cpp
     marker_cache.cpp
     svg/svg_parser.cpp
@@ -185,27 +203,41 @@ source = Split(
     svg/svg_points_parser.cpp
     svg/svg_transform_parser.cpp
     warp.cpp
-    json/geometry_grammar.cpp
-    json/geometry_parser.cpp
-    json/feature_grammar.cpp
-    json/feature_collection_parser.cpp
-    json/geojson_generator.cpp
-    processed_text.cpp
-    formatting/base.cpp
-    formatting/expression.cpp
-    formatting/list.cpp
-    formatting/text.cpp
-    formatting/format.cpp
-    formatting/registry.cpp
-    text_placements/registry.cpp
-    text_placements/base.cpp
-    text_placements/dummy.cpp
-    text_placements/list.cpp
-    text_placements/simple.cpp
-    text_properties.cpp
+    css_color_grammar.cpp
+    text/font_library.cpp
+    text/vertex_cache.cpp
+    text/text_layout.cpp
+    text/text_line.cpp
+    text/itemizer.cpp
+    text/scrptrun.cpp
+    text/face.cpp
+    text/glyph_positions.cpp
+    text/placement_finder.cpp
+    text/properties_util.cpp
+    text/renderer.cpp
+    text/symbolizer_helpers.cpp
+    text/text_properties.cpp
+    text/font_feature_settings.cpp
+    text/formatting/base.cpp
+    text/formatting/list.cpp
+    text/formatting/text.cpp
+    text/formatting/format.cpp
+    text/formatting/layout.cpp
+    text/formatting/registry.cpp
+    text/placements/registry.cpp
+    text/placements/base.cpp
+    text/placements/dummy.cpp
+    text/placements/list.cpp
+    text/placements/simple.cpp
+    group/group_layout_manager.cpp
+    group/group_rule.cpp
+    group/group_symbolizer_helper.cpp
     xml_tree.cpp
     config_error.cpp
     color_factory.cpp
+    renderer_common.cpp
+    renderer_common/render_pattern.cpp
+    renderer_common/process_group_symbolizer.cpp
     """
     )
 
@@ -243,30 +275,26 @@ if env['PLUGIN_LINKING'] == 'static':
 
 if env['HAS_CAIRO']:
     lib_env.AppendUnique(LIBPATH=env['CAIRO_LIBPATHS'])
-    lib_env.Append(LIBS=env['CAIRO_ALL_LIBS'])
     lib_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
     libmapnik_defines.append('-DHAVE_CAIRO')
     lib_env.AppendUnique(CPPPATH=copy(env['CAIRO_CPPPATHS']))
-    source.insert(0,'cairo_renderer.cpp')
-    source.insert(0,'cairo_context.cpp')
-
-if env['JPEG']:
-    source += Split(
-        """
-        jpeg_reader.cpp
-        """)
-
-if env['TIFF']:
-    source += Split(
-        """
-        tiff_reader.cpp
-        """)
-
-if env['PNG']:
-    source += Split(
-        """
-        png_reader.cpp
-        """)
+    source.append('cairo/cairo_context.cpp')
+    source.append('cairo/cairo_renderer.cpp')
+    source.append('cairo/cairo_render_vector.cpp')
+    source.append('cairo/process_markers_symbolizer.cpp')
+    source.append('cairo/process_text_symbolizer.cpp')
+    source.append('cairo/process_group_symbolizer.cpp')
+    source.append('cairo/process_line_symbolizer.cpp')
+    source.append('cairo/process_line_pattern_symbolizer.cpp')
+    source.append('cairo/process_polygon_symbolizer.cpp')
+    source.append('cairo/process_polygon_pattern_symbolizer.cpp')
+    source.append('cairo/process_debug_symbolizer.cpp')
+    source.append('cairo/process_point_symbolizer.cpp')
+    source.append('cairo/process_raster_symbolizer.cpp')
+    source.append('cairo/process_building_symbolizer.cpp')
+
+for cpp in enabled_imaging_libraries:
+    source.append(cpp)
 
 # agg backend
 source += Split(
@@ -282,6 +310,7 @@ source += Split(
     agg/process_raster_symbolizer.cpp
     agg/process_shield_symbolizer.cpp
     agg/process_markers_symbolizer.cpp
+    agg/process_group_symbolizer.cpp
     agg/process_debug_symbolizer.cpp
     """
     )
@@ -296,75 +325,48 @@ if env['RUNTIME_LINK'] == "static":
     source += glob.glob('../deps/agg/src/' + '*.cpp')
 
 # grid backend
-source += Split(
-    """
-    grid/grid.cpp
-    grid/grid_renderer.cpp
-    grid/process_building_symbolizer.cpp
-    grid/process_line_pattern_symbolizer.cpp
-    grid/process_line_symbolizer.cpp
-    grid/process_markers_symbolizer.cpp
-    grid/process_point_symbolizer.cpp
-    grid/process_polygon_pattern_symbolizer.cpp
-    grid/process_polygon_symbolizer.cpp
-    grid/process_raster_symbolizer.cpp
-    grid/process_shield_symbolizer.cpp
-    grid/process_text_symbolizer.cpp
-    """)
+if env['GRID_RENDERER']:
+    source += Split(
+        """
+        grid/grid.cpp
+        grid/grid_renderer.cpp
+        grid/process_building_symbolizer.cpp
+        grid/process_line_pattern_symbolizer.cpp
+        grid/process_line_symbolizer.cpp
+        grid/process_markers_symbolizer.cpp
+        grid/process_point_symbolizer.cpp
+        grid/process_polygon_pattern_symbolizer.cpp
+        grid/process_polygon_symbolizer.cpp
+        grid/process_raster_symbolizer.cpp
+        grid/process_shield_symbolizer.cpp
+        grid/process_text_symbolizer.cpp
+        grid/process_group_symbolizer.cpp
+        """)
+    lib_env.Append(CPPDEFINES = '-DGRID_RENDERER')
+    libmapnik_defines.append('-DGRID_RENDERER')
 
 # https://github.com/mapnik/mapnik/issues/1438
 if env['SVG_RENDERER']: # svg backend
     source += Split(
     """
+    svg/output/svg_output_grammars.cpp
     svg/output/svg_renderer.cpp
     svg/output/svg_generator.cpp
     svg/output/svg_output_attributes.cpp
     svg/output/process_symbolizers.cpp
-    svg/output/process_building_symbolizer.cpp
-    svg/output/process_line_pattern_symbolizer.cpp
     svg/output/process_line_symbolizer.cpp
-    svg/output/process_markers_symbolizer.cpp
-    svg/output/process_point_symbolizer.cpp
-    svg/output/process_polygon_pattern_symbolizer.cpp
     svg/output/process_polygon_symbolizer.cpp
-    svg/output/process_raster_symbolizer.cpp
-    svg/output/process_shield_symbolizer.cpp
-    svg/output/process_text_symbolizer.cpp
     """)
     lib_env.Append(CPPDEFINES = '-DSVG_RENDERER')
     libmapnik_defines.append('-DSVG_RENDERER')
 
-
-if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
-    boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
-    if boost_version_from_header < 46:
-        # avoid ubuntu issue with boost interprocess:
-        # https://github.com/mapnik/mapnik/issues/1001
-        env4 = lib_env.Clone()
-        env4.Append(CXXFLAGS = '-fpermissive')
-        cpp ='mapped_memory_cache.cpp'
-        source.remove(cpp)
-        if env['LINKING'] == 'static':
-            source.insert(0,env4.StaticObject(cpp))
-        else:
-            source.insert(0,env4.SharedObject(cpp))
-
 if env['XMLPARSER'] == 'libxml2' and env['HAS_LIBXML2']:
     source += Split(
         """
         libxml2_loader.cpp
         """)
-    env2 = lib_env.Clone()
-    env2.Append(CPPDEFINES = '-DHAVE_LIBXML2')
+    lib_env.Append(CPPDEFINES = '-DHAVE_LIBXML2')
     libmapnik_defines.append('-DHAVE_LIBXML2')
-    fixup = ['libxml2_loader.cpp']
-    for cpp in fixup:
-        if cpp in source:
-            source.remove(cpp)
-        if env['LINKING'] == 'static':
-            source.insert(0,env2.StaticObject(cpp))
-        else:
-            source.insert(0,env2.SharedObject(cpp))
 else:
     source += Split(
         """
@@ -372,25 +374,9 @@ else:
         """
     )
 
-processor_cpp = 'feature_style_processor.cpp'
-
-if env['RENDERING_STATS']:
-    env3 = lib_env.Clone()
-    env3.Append(CPPDEFINES='-DRENDERING_STATS')
-    if env['LINKING'] == 'static':
-        source.insert(0,env3.StaticObject(processor_cpp))
-    else:
-        source.insert(0,env3.SharedObject(processor_cpp))
-else:
-    source.insert(0,processor_cpp);
-
 # clone the env one more time to isolate mapnik_lib_link_flag
 lib_env_final = lib_env.Clone()
-
-if env['CUSTOM_LDFLAGS']:
-    lib_env_final.Prepend(LINKFLAGS='%s %s' % (env['CUSTOM_LDFLAGS'], mapnik_lib_link_flag))
-else:
-    lib_env_final.Prepend(LINKFLAGS=mapnik_lib_link_flag)
+lib_env_final.Prepend(LINKFLAGS=mapnik_lib_link_flag)
 
 # cache library values for other builds to use
 env['LIBMAPNIK_LIBS'] = copy(lib_env['LIBS'])
@@ -400,13 +386,13 @@ env['LIBMAPNIK_DEFINES'] = libmapnik_defines
 
 mapnik = None
 
-if env['PLATFORM'] == 'Darwin':
+if env['PLATFORM'] == 'Darwin' or not env['ENABLE_SONAME']:
     target_path = env['MAPNIK_LIB_BASE_DEST']
     if 'uninstall' not in COMMAND_LINE_TARGETS:
         if env['LINKING'] == 'static':
-            mapnik = lib_env_final.StaticLibrary('mapnik', source)
+            mapnik = lib_env_final.StaticLibrary(env['MAPNIK_NAME'], source)
         else:
-            mapnik = lib_env_final.SharedLibrary('mapnik', source)
+            mapnik = lib_env_final.SharedLibrary(env['MAPNIK_NAME'], source)
         result = env.Install(target_path, mapnik)
         env.Alias(target='install', source=result)
 
@@ -428,9 +414,9 @@ else:
 
     if 'uninstall' not in COMMAND_LINE_TARGETS:
         if env['LINKING'] == 'static':
-            mapnik = lib_env_final.StaticLibrary('mapnik', source)
+            mapnik = lib_env_final.StaticLibrary(env['MAPNIK_NAME'], source)
         else:
-            mapnik = lib_env_final.SharedLibrary('mapnik', source)
+            mapnik = lib_env_final.SharedLibrary(env['MAPNIK_NAME'], source)
         result = env.InstallAs(target=target, source=mapnik)
         env.Alias(target='install', source=result)
         if result:
diff --git a/src/building_symbolizer.cpp b/src/building_symbolizer.cpp
deleted file mode 100644
index a928081..0000000
--- a/src/building_symbolizer.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/building_symbolizer.hpp>
-#include <mapnik/value.hpp>
-#include <mapnik/attribute.hpp>
-
-namespace mapnik
-{
-
-building_symbolizer::building_symbolizer()
-    : symbolizer_base(),
-      fill_(color(128,128,128)),
-      opacity_(1.0)
-{}
-
-building_symbolizer::building_symbolizer(color const& fill, expression_ptr const& height)
-    : symbolizer_base(),
-      fill_(fill),
-      height_(height),
-      opacity_(1.0) {}
-
-color const& building_symbolizer::get_fill() const
-{
-    return fill_;
-}
-
-void building_symbolizer::set_fill(color const& fill)
-{
-    fill_ = fill;
-}
-expression_ptr const& building_symbolizer::height() const
-{
-    return height_;
-}
-
-void building_symbolizer::set_height(expression_ptr const& height)
-{
-    height_=height;
-}
-
-void building_symbolizer::set_opacity(double opacity)
-{
-    opacity_ = opacity;
-}
-
-double building_symbolizer::get_opacity() const
-{
-    return opacity_;
-}
-
-}
diff --git a/src/cairo/cairo_context.cpp b/src/cairo/cairo_context.cpp
new file mode 100644
index 0000000..41056b0
--- /dev/null
+++ b/src/cairo/cairo_context.cpp
@@ -0,0 +1,521 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+#include <mapnik/cairo/cairo_context.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/font_set.hpp>
+#include <mapnik/text/face.hpp>
+
+#include <cairo-ft.h>
+
+#include <valarray>
+namespace mapnik {
+
+cairo_face::cairo_face(std::shared_ptr<font_library> const& library, face_ptr const& face)
+    : face_(face)
+{
+    static cairo_user_data_key_t key;
+    c_face_ = cairo_ft_font_face_create_for_ft_face(face->get_face(), FT_LOAD_NO_HINTING);
+    cairo_font_face_set_user_data(c_face_, &key, new handle(library, face), destroy);
+}
+
+cairo_face::~cairo_face()
+{
+    if (c_face_) cairo_font_face_destroy(c_face_);
+}
+
+cairo_font_face_t * cairo_face::face() const
+{
+    return c_face_;
+}
+
+cairo_context::cairo_context(cairo_ptr const& cairo)
+    : cairo_(cairo)
+{}
+
+void cairo_context::clip()
+{
+    cairo_clip(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::show_page()
+{
+    cairo_show_page(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_color(color const& color, double opacity)
+{
+    set_color(color.red()/255.0, color.green()/255.0, color.blue()/255.0, color.alpha() * opacity / 255.0);
+}
+
+void cairo_context::set_color(double r, double g, double b, double opacity)
+{
+    // http://lists.cairographics.org/archives/cairo/2008-August/014759.html
+    cairo_set_source_rgba(cairo_.get(), r, g, b, opacity);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_operator(composite_mode_e comp_op)
+{
+    switch (comp_op)
+    {
+    case clear:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_CLEAR);
+        break;
+    case src:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_SOURCE);
+        break;
+    case dst:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST);
+        break;
+    case src_over:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_OVER);
+        break;
+    case dst_over:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_OVER);
+        break;
+    case src_in:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_IN);
+        break;
+    case dst_in:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_IN);
+        break;
+    case src_out:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_OUT);
+        break;
+    case dst_out:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_OUT);
+        break;
+    case src_atop:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_ATOP);
+        break;
+    case dst_atop:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_ATOP);
+        break;
+    case _xor:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_XOR);
+        break;
+    case plus:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_ADD);
+        break;
+#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 10, 0)
+    case multiply:
+        cairo_set_operator(cairo_.get(), CAIRO_OPERATOR_MULTIPLY);
+        break;
+    case screen:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_SCREEN);
+        break;
+    case overlay:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_OVERLAY);
+        break;
+    case darken:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DARKEN);
+        break;
+    case lighten:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_LIGHTEN);
+        break;
+    case color_dodge:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_COLOR_DODGE);
+        break;
+    case color_burn:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_COLOR_BURN);
+        break;
+    case hard_light:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_HARD_LIGHT);
+        break;
+    case soft_light:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_SOFT_LIGHT);
+        break;
+    case difference:
+        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DIFFERENCE);
+        break;
+    case exclusion:
+        cairo_set_operator(cairo_.get(), CAIRO_OPERATOR_EXCLUSION);
+        break;
+#else
+    case multiply:
+    case screen:
+    case overlay:
+    case darken:
+    case lighten:
+    case color_dodge:
+    case color_burn:
+    case hard_light:
+    case soft_light:
+    case difference:
+    case exclusion:
+        break;
+#endif
+    case contrast:
+    case minus:
+    case invert:
+    case invert_rgb:
+    case grain_merge:
+    case grain_extract:
+    case hue:
+    case saturation:
+    case _color:
+    case _value:
+    case linear_dodge:
+    case linear_burn:
+    case divide:
+        //case colorize_alpha:
+        break;
+    }
+    //
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_line_join(line_join_e join)
+{
+    if (join == MITER_JOIN)
+        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_MITER);
+    else if (join == MITER_REVERT_JOIN)
+        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_MITER);
+    else if (join == ROUND_JOIN)
+        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_ROUND);
+    else
+        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_BEVEL);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_line_cap(line_cap_e cap)
+{
+    if (cap == BUTT_CAP)
+        cairo_set_line_cap(cairo_.get(), CAIRO_LINE_CAP_BUTT);
+    else if (cap == SQUARE_CAP)
+        cairo_set_line_cap(cairo_.get(), CAIRO_LINE_CAP_SQUARE);
+    else
+        cairo_set_line_cap(cairo_.get(), CAIRO_LINE_CAP_ROUND);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_miter_limit(double limit)
+{
+    cairo_set_miter_limit(cairo_.get(), limit);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_line_width(double width)
+{
+    cairo_set_line_width(cairo_.get(), width);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_dash(dash_array const& dashes, double scale_factor)
+{
+    std::valarray<double> d(dashes.size() * 2);
+    dash_array::const_iterator itr = dashes.begin();
+    dash_array::const_iterator end = dashes.end();
+    int index = 0;
+
+    for (; itr != end; ++itr)
+    {
+        d[index++] = itr->first * scale_factor;
+        d[index++] = itr->second * scale_factor;
+    }
+
+    cairo_set_dash(cairo_.get() , &d[0], static_cast<int>(d.size()), 0/*offset*/);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_fill_rule(cairo_fill_rule_t fill_rule)
+{
+    cairo_set_fill_rule(cairo_.get(),fill_rule);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::move_to(double x, double y)
+{
+#if CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 6, 0)
+    if (x < -32767.0) x = -32767.0;
+    else if (x > 32767.0) x = 32767.0;
+    if (y < -32767.0) y = -32767.0;
+    else if (y > 32767.0) y = 32767.0;
+#endif
+    cairo_move_to(cairo_.get(), x, y);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::curve_to(double ct1_x, double ct1_y, double ct2_x, double ct2_y, double end_x, double end_y)
+{
+    cairo_curve_to(cairo_.get(), ct1_x,ct1_y,ct2_x,ct2_y,end_x,end_y);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::close_path()
+{
+    cairo_close_path(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::line_to(double x, double y)
+{
+#if CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 6, 0)
+    if (x < -32767.0) x = -32767.0;
+    else if (x > 32767.0) x = 32767.0;
+    if (y < -32767.0) y = -32767.0;
+    else if (y > 32767.0) y = 32767.0;
+#endif
+    cairo_line_to(cairo_.get(), x, y);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::rectangle(double x, double y, double w, double h)
+{
+    cairo_rectangle(cairo_.get(), x, y, w, h);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::stroke()
+{
+    cairo_stroke(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::fill()
+{
+    cairo_fill(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::paint()
+{
+    cairo_paint(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_pattern(cairo_pattern const& pattern)
+{
+    cairo_set_source(cairo_.get(), pattern.pattern());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_gradient(cairo_gradient const& pattern, const box2d<double> &bbox)
+{
+    cairo_pattern_t * gradient = pattern.gradient();
+    double bx1=bbox.minx();
+    double by1=bbox.miny();
+    double bx2=bbox.maxx();
+    double by2=bbox.maxy();
+    if (pattern.units() != USER_SPACE_ON_USE)
+    {
+        if (pattern.units() == OBJECT_BOUNDING_BOX)
+        {
+            cairo_path_extents(cairo_.get(), &bx1, &by1, &bx2, &by2);
+        }
+        cairo_matrix_t cairo_matrix;
+        cairo_pattern_get_matrix(gradient, &cairo_matrix);
+        cairo_matrix_scale(&cairo_matrix,1.0/(bx2-bx1),1.0/(by2-by1));
+        cairo_matrix_translate(&cairo_matrix, -bx1,-by1);
+        cairo_pattern_set_matrix(gradient, &cairo_matrix);
+    }
+    cairo_set_source(cairo_.get(), const_cast<cairo_pattern_t*>(gradient));
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::add_image(double x, double y, image_data_32 & data, double opacity)
+{
+    cairo_pattern pattern(data);
+    pattern.set_origin(x, y);
+    cairo_save(cairo_.get());
+    cairo_set_source(cairo_.get(), const_cast<cairo_pattern_t*>(pattern.pattern()));
+    cairo_paint_with_alpha(cairo_.get(), opacity);
+    cairo_restore(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::add_image(agg::trans_affine const& tr, image_data_32 & data, double opacity)
+{
+    cairo_pattern pattern(data);
+    if (!tr.is_identity())
+    {
+        double m[6];
+        tr.store_to(m);
+        cairo_matrix_t cairo_matrix;
+        cairo_matrix_init(&cairo_matrix,m[0],m[1],m[2],m[3],m[4],m[5]);
+        cairo_matrix_invert(&cairo_matrix);
+        pattern.set_matrix(cairo_matrix);
+    }
+    cairo_save(cairo_.get());
+    cairo_set_source(cairo_.get(), const_cast<cairo_pattern_t*>(pattern.pattern()));
+    cairo_paint_with_alpha(cairo_.get(), opacity);
+    cairo_restore(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_font_face(cairo_face_manager & manager, face_ptr face)
+{
+    cairo_set_font_face(cairo_.get(), manager.get_face(face)->face());
+}
+
+void cairo_context::set_font_matrix(cairo_matrix_t const& matrix)
+{
+    cairo_set_font_matrix(cairo_.get(), &matrix);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::set_matrix(cairo_matrix_t const& matrix)
+{
+    cairo_set_matrix(cairo_.get(), &matrix);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::transform(cairo_matrix_t const& matrix)
+{
+    cairo_transform(cairo_.get(), &matrix);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::translate(double x, double y)
+{
+    cairo_translate(cairo_.get(), x, y);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::save()
+{
+    cairo_save(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::restore()
+{
+    cairo_restore(cairo_.get());
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::show_glyph(unsigned long index, pixel_position const &pos)
+{
+    cairo_glyph_t glyph;
+    glyph.index = index;
+    glyph.x = pos.x;
+    glyph.y = pos.y;
+
+    cairo_show_glyphs(cairo_.get(), &glyph, 1);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::glyph_path(unsigned long index, pixel_position const &pos)
+{
+    cairo_glyph_t glyph;
+    glyph.index = index;
+    glyph.x = pos.x;
+    glyph.y = pos.y;
+
+    cairo_glyph_path(cairo_.get(), &glyph, 1);
+    check_object_status_and_throw_exception(*this);
+}
+
+void cairo_context::add_text(glyph_positions const& pos,
+                             cairo_face_manager & manager,
+                             face_manager_freetype & font_manager,
+                             composite_mode_e comp_op,
+                             composite_mode_e halo_comp_op,
+                             double scale_factor)
+{
+    pixel_position const& base_point = pos.get_base_point();
+    const double sx = base_point.x;
+    const double sy = base_point.y;
+
+    for (auto const& glyph_pos : pos)
+    {
+        glyph_info const& glyph = glyph_pos.glyph;
+        glyph.face->set_character_sizes(glyph.format->text_size * scale_factor);
+    }
+
+    //render halo
+    double halo_radius = 0;
+    set_operator(halo_comp_op);
+    for (auto const& glyph_pos : pos)
+    {
+        glyph_info const& glyph = glyph_pos.glyph;
+        halo_radius = glyph.format->halo_radius * scale_factor;
+        // make sure we've got reasonable values.
+        if (halo_radius <= 0.0 || halo_radius > 1024.0) continue;
+        double text_size = glyph.format->text_size * scale_factor;
+        cairo_matrix_t matrix;
+        matrix.xx = text_size * glyph_pos.rot.cos;
+        matrix.xy = text_size * glyph_pos.rot.sin;
+        matrix.yx = text_size * -glyph_pos.rot.sin;
+        matrix.yy = text_size * glyph_pos.rot.cos;
+        matrix.x0 = 0;
+        matrix.y0 = 0;
+        set_font_matrix(matrix);
+        set_font_face(manager, glyph.face);
+        pixel_position pos = glyph_pos.pos + glyph.offset.rotate(glyph_pos.rot);
+        glyph_path(glyph.glyph_index, pixel_position(sx + pos.x, sy - pos.y));
+        set_line_width(2.0 * halo_radius);
+        set_line_join(ROUND_JOIN);
+        set_color(glyph.format->halo_fill, glyph.format->halo_opacity);
+        stroke();
+    }
+    set_operator(comp_op);
+    for (auto const& glyph_pos : pos)
+    {
+        glyph_info const& glyph = glyph_pos.glyph;
+        double text_size = glyph.format->text_size * scale_factor;
+        cairo_matrix_t matrix;
+        matrix.xx = text_size * glyph_pos.rot.cos;
+        matrix.xy = text_size * glyph_pos.rot.sin;
+        matrix.yx = text_size * -glyph_pos.rot.sin;
+        matrix.yy = text_size * glyph_pos.rot.cos;
+        matrix.x0 = 0;
+        matrix.y0 = 0;
+        set_font_matrix(matrix);
+        set_font_face(manager, glyph.face);
+        pixel_position pos = glyph_pos.pos + glyph.offset.rotate(glyph_pos.rot);
+        set_color(glyph.format->fill, glyph.format->text_opacity);
+        show_glyph(glyph.glyph_index, pixel_position(sx + pos.x, sy - pos.y));
+    }
+
+}
+
+cairo_face_manager::cairo_face_manager(std::shared_ptr<font_library> font_library)
+  : font_library_(font_library)
+{
+}
+
+cairo_face_ptr cairo_face_manager::get_face(face_ptr face)
+{
+    cairo_face_cache::iterator itr = cache_.find(face);
+    cairo_face_ptr entry;
+
+    if (itr != cache_.end())
+    {
+        entry = itr->second;
+    }
+    else
+    {
+        entry = std::make_shared<cairo_face>(font_library_, face);
+        cache_.emplace(face, entry);
+    }
+    return entry;
+}
+
+} //ns mapnik
+
+#endif
diff --git a/src/cairo/cairo_render_vector.cpp b/src/cairo/cairo_render_vector.cpp
new file mode 100644
index 0000000..31a24f3
--- /dev/null
+++ b/src/cairo/cairo_render_vector.cpp
@@ -0,0 +1,131 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/cairo/cairo_render_vector.hpp>
+#include <mapnik/cairo/cairo_context.hpp>
+#include <mapnik/svg/svg_path_adapter.hpp>
+#include <mapnik/svg/svg_path_attributes.hpp>
+
+namespace mapnik
+{
+
+void render_vector_marker(cairo_context & context, pixel_position const& pos,
+                          svg::svg_path_adapter & svg_path, box2d<double> const& bbox,
+                          agg::pod_bvector<svg::path_attributes> const & attributes,
+                          agg::trans_affine const& tr, double opacity, bool recenter)
+{
+    using namespace mapnik::svg;
+    agg::trans_affine mtx = tr;
+    if (recenter)
+    {
+        coord<double,2> c = bbox.center();
+        mtx = agg::trans_affine_translation(-c.x,-c.y);
+        mtx *= tr;
+        mtx.translate(pos.x, pos.y);
+    }
+
+    agg::trans_affine transform;
+
+    for(unsigned i = 0; i < attributes.size(); ++i)
+    {
+        mapnik::svg::path_attributes const& attr = attributes[i];
+        if (!attr.visibility_flag)
+            continue;
+        cairo_save_restore guard(context);
+        transform = attr.transform;
+        transform *= mtx;
+
+        // TODO - this 'is_valid' check is not used in the AGG renderer and also
+        // appears to lead to bogus results with
+        // tests/data/good_maps/markers_symbolizer_lines_file.xml
+        //if (transform.is_valid() && !transform.is_identity())
+        if (!transform.is_identity())
+        {
+            double m[6];
+            transform.store_to(m);
+            cairo_matrix_t matrix;
+            cairo_matrix_init(&matrix,m[0],m[1],m[2],m[3],m[4],m[5]);
+            context.transform(matrix);
+        }
+
+        if (attr.fill_flag || attr.fill_gradient.get_gradient_type() != NO_GRADIENT)
+        {
+            context.add_agg_path(svg_path,attr.index);
+            if (attr.even_odd_flag)
+            {
+                context.set_fill_rule(CAIRO_FILL_RULE_EVEN_ODD);
+            }
+            else
+            {
+                context.set_fill_rule(CAIRO_FILL_RULE_WINDING);
+            }
+            if(attr.fill_gradient.get_gradient_type() != NO_GRADIENT)
+            {
+                cairo_gradient g(attr.fill_gradient,attr.fill_opacity * attr.opacity * opacity);
+
+                context.set_gradient(g,bbox);
+                context.fill();
+            }
+            else if(attr.fill_flag)
+            {
+                double fill_opacity = attr.fill_opacity * attr.opacity * opacity * attr.fill_color.opacity();
+                context.set_color(attr.fill_color.r/255.0,attr.fill_color.g/255.0,
+                                  attr.fill_color.b/255.0, fill_opacity);
+                context.fill();
+            }
+        }
+
+        if (attr.stroke_gradient.get_gradient_type() != NO_GRADIENT || attr.stroke_flag)
+        {
+            context.add_agg_path(svg_path,attr.index);
+            if(attr.stroke_gradient.get_gradient_type() != NO_GRADIENT)
+            {
+                context.set_line_width(attr.stroke_width);
+                context.set_line_cap(line_cap_enum(attr.line_cap));
+                context.set_line_join(line_join_enum(attr.line_join));
+                context.set_miter_limit(attr.miter_limit);
+                cairo_gradient g(attr.stroke_gradient,attr.fill_opacity * attr.opacity * opacity);
+                context.set_gradient(g,bbox);
+                context.stroke();
+            }
+            else if (attr.stroke_flag)
+            {
+                double stroke_opacity = attr.stroke_opacity * attr.opacity * opacity * attr.stroke_color.opacity();
+                context.set_color(attr.stroke_color.r/255.0,attr.stroke_color.g/255.0,
+                                  attr.stroke_color.b/255.0, stroke_opacity);
+                context.set_line_width(attr.stroke_width);
+                context.set_line_cap(line_cap_enum(attr.line_cap));
+                context.set_line_join(line_join_enum(attr.line_join));
+                context.set_miter_limit(attr.miter_limit);
+                context.stroke();
+            }
+        }
+    }
+}
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/cairo_renderer.cpp b/src/cairo/cairo_renderer.cpp
new file mode 100644
index 0000000..088c314
--- /dev/null
+++ b/src/cairo/cairo_renderer.cpp
@@ -0,0 +1,232 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/layer.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/cairo/cairo_render_vector.hpp>
+#include <mapnik/map.hpp>
+#include <mapnik/svg/svg_path_adapter.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/request.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+
+// agg
+#include "agg/include/agg_trans_affine.h"  // for trans_affine, etc
+
+// stl
+#include <cmath>
+
+namespace mapnik
+{
+
+class feature_type_style;
+
+template <typename T>
+cairo_renderer<T>::cairo_renderer(Map const& m,
+                                  T const& cairo,
+                                  double scale_factor,
+                                  unsigned offset_x,
+                                  unsigned offset_y)
+    : feature_style_processor<cairo_renderer>(m, scale_factor),
+      m_(m),
+      context_(cairo),
+      common_(m, attributes(), offset_x, offset_y, m.width(), m.height(), scale_factor),
+      face_manager_(common_.shared_font_library_)
+{
+    setup(m);
+}
+
+template <typename T>
+cairo_renderer<T>::cairo_renderer(Map const& m,
+                                  request const& req,
+                                  attributes const& vars,
+                                  T const& cairo,
+                                  double scale_factor,
+                                  unsigned offset_x,
+                                  unsigned offset_y)
+    : feature_style_processor<cairo_renderer>(m, scale_factor),
+      m_(m),
+      context_(cairo),
+      common_(m, req, vars, offset_x, offset_y, req.width(), req.height(), scale_factor),
+      face_manager_(common_.shared_font_library_)
+{
+    setup(m);
+}
+
+template <typename T>
+cairo_renderer<T>::cairo_renderer(Map const& m,
+                                 T const& cairo,
+                                 std::shared_ptr<label_collision_detector4> detector,
+                                 double scale_factor,
+                                 unsigned offset_x,
+                                 unsigned offset_y)
+    : feature_style_processor<cairo_renderer>(m, scale_factor),
+      m_(m),
+      context_(cairo),
+      common_(m, attributes(), offset_x, offset_y, m.width(), m.height(), scale_factor, detector),
+      face_manager_(common_.shared_font_library_)
+{
+    setup(m);
+}
+
+template <typename T>
+cairo_renderer<T>::~cairo_renderer() {}
+
+template <typename T>
+void cairo_renderer<T>::setup(Map const& map)
+{
+    boost::optional<color> bg = m_.background();
+    if (bg)
+    {
+        cairo_save_restore guard(context_);
+        context_.set_color(*bg);
+        context_.paint();
+    }
+    boost::optional<std::string> const& image_filename = map.background_image();
+    if (image_filename)
+    {
+        // NOTE: marker_cache returns premultiplied image, if needed
+        boost::optional<mapnik::marker_ptr> bg_marker = mapnik::marker_cache::instance().find(*image_filename,true);
+        if (bg_marker && (*bg_marker)->is_bitmap())
+        {
+            mapnik::image_ptr bg_image = *(*bg_marker)->get_bitmap_data();
+            int w = bg_image->width();
+            int h = bg_image->height();
+            if ( w > 0 && h > 0)
+            {
+                // repeat background-image both vertically and horizontally
+                unsigned x_steps = unsigned(std::ceil(common_.width_/double(w)));
+                unsigned y_steps = unsigned(std::ceil(common_.height_/double(h)));
+                for (unsigned x=0;x<x_steps;++x)
+                {
+                    for (unsigned y=0;y<y_steps;++y)
+                    {
+                        agg::trans_affine matrix = agg::trans_affine_translation(
+                                                       x*w,
+                                                       y*h);
+                        context_.add_image(matrix, *bg_image, 1.0f);
+                    }
+                }
+            }
+        }
+    }
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer: Scale=" << map.scale();
+}
+
+template <typename T>
+void cairo_renderer<T>::start_map_processing(Map const& map)
+{
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer: Start map processing bbox=" << map.get_current_extent();
+    box2d<double> bounds = common_.t_.forward(common_.t_.extent());
+    context_.rectangle(bounds.minx(), bounds.miny(), bounds.maxx(), bounds.maxy());
+    context_.clip();
+}
+
+template <typename T>
+void cairo_renderer<T>::end_map_processing(Map const&)
+{
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer: End map processing";
+}
+
+template <typename T>
+void cairo_renderer<T>::start_layer_processing(layer const& lay, box2d<double> const& query_extent)
+{
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer: Start processing layer=" << lay.name() ;
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer: -- datasource=" << lay.datasource().get();
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer: -- query_extent=" << query_extent;
+
+    if (lay.clear_label_cache())
+    {
+        common_.detector_->clear();
+    }
+    common_.query_extent_ = query_extent;
+}
+
+template <typename T>
+void cairo_renderer<T>::end_layer_processing(layer const&)
+{
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer: End layer processing";
+}
+
+template <typename T>
+void cairo_renderer<T>::start_style_processing(feature_type_style const& st)
+{
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer:start style processing";
+}
+
+template <typename T>
+void cairo_renderer<T>::end_style_processing(feature_type_style const& st)
+{
+    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer:end style processing";
+}
+
+template <typename T>
+void cairo_renderer<T>::render_marker(pixel_position const& pos,
+                                        marker const& marker,
+                                        agg::trans_affine const& tr,
+                                        double opacity,
+                                        bool recenter)
+
+{
+    cairo_save_restore guard(context_);
+    if (marker.is_vector())
+    {
+        mapnik::svg_path_ptr vmarker = *marker.get_vector_data();
+        if (vmarker)
+        {
+            agg::trans_affine marker_tr = tr;
+            marker_tr *=agg::trans_affine_scaling(common_.scale_factor_);
+            box2d<double> bbox = vmarker->bounding_box();
+            agg::pod_bvector<svg::path_attributes> const & attributes = vmarker->attributes();
+            svg::vertex_stl_adapter<svg::svg_path_storage> stl_storage(vmarker->source());
+            svg::svg_path_adapter svg_path(stl_storage);
+            render_vector_marker(context_, pos, svg_path, bbox, attributes, marker_tr, opacity, recenter);
+        }
+    }
+    else if (marker.is_bitmap())
+    {
+        double width = (*marker.get_bitmap_data())->width();
+        double height = (*marker.get_bitmap_data())->height();
+        double cx = 0.5 * width;
+        double cy = 0.5 * height;
+        agg::trans_affine marker_tr;
+        marker_tr *= agg::trans_affine_translation(-cx,-cy);
+        marker_tr *= tr;
+        marker_tr *= agg::trans_affine_scaling(common_.scale_factor_);
+        marker_tr *= agg::trans_affine_translation(pos.x,pos.y);
+        context_.add_image(marker_tr, **marker.get_bitmap_data(), opacity);
+    }
+}
+
+template class cairo_renderer<cairo_ptr>;
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_building_symbolizer.cpp b/src/cairo/process_building_symbolizer.cpp
new file mode 100644
index 0000000..060adb0
--- /dev/null
+++ b/src/cairo/process_building_symbolizer.cpp
@@ -0,0 +1,86 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/make_unique.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/transform_path_adapter.hpp>
+// mapnik symbolizer generics
+#include <mapnik/renderer_common/process_building_symbolizer.hpp>
+
+// stl
+#include <cmath>
+
+namespace mapnik
+{
+
+template <typename T>
+void cairo_renderer<T>::process(building_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    using path_type = transform_path_adapter<view_transform,geometry_type>;
+    cairo_save_restore guard(context_);
+    composite_mode_e comp_op = get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_);
+    mapnik::color fill = get<color, keys::fill>(sym, feature, common_.vars_);
+    value_double opacity = get<value_double, keys::fill_opacity>(sym, feature, common_.vars_);
+    value_double height = get<value_double, keys::height>(sym, feature, common_.vars_);
+
+    context_.set_operator(comp_op);
+
+    render_building_symbolizer(
+        feature, height,
+        [&](geometry_type &faces) {
+            path_type faces_path(common_.t_, faces, prj_trans);
+            context_.set_color(fill.red()  * 0.8 / 255.0, fill.green() * 0.8 / 255.0,
+                               fill.blue() * 0.8 / 255.0, fill.alpha() * opacity / 255.0);
+            context_.add_path(faces_path);
+            context_.fill();
+        },
+        [&](geometry_type &frame) {
+            path_type path(common_.t_, frame, prj_trans);
+            context_.set_color(fill.red()  * 0.8 / 255.0, fill.green() * 0.8/255.0,
+                              fill.blue() * 0.8 / 255.0, fill.alpha() * opacity / 255.0);
+            context_.set_line_width(common_.scale_factor_);
+            context_.add_path(path);
+            context_.stroke();
+        },
+        [&](geometry_type &roof) {
+            path_type roof_path(common_.t_, roof, prj_trans);
+            context_.set_color(fill, opacity);
+            context_.add_path(roof_path);
+            context_.fill();
+        });
+}
+
+template void cairo_renderer<cairo_ptr>::process(building_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_debug_symbolizer.cpp b/src/cairo/process_debug_symbolizer.cpp
new file mode 100644
index 0000000..e3a55b9
--- /dev/null
+++ b/src/cairo/process_debug_symbolizer.cpp
@@ -0,0 +1,111 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/label_collision_detector.hpp>
+
+namespace mapnik
+{
+
+namespace {
+
+// special implementation of the box drawing so that it's pixel-aligned
+inline void render_debug_box(cairo_context &context, box2d<double> const& b)
+{
+    cairo_save_restore guard(context);
+    double minx = std::floor(b.minx()) + 0.5;
+    double miny = std::floor(b.miny()) + 0.5;
+    double maxx = std::floor(b.maxx()) + 0.5;
+    double maxy = std::floor(b.maxy()) + 0.5;
+    context.move_to(minx, miny);
+    context.line_to(minx, maxy);
+    context.line_to(maxx, maxy);
+    context.line_to(maxx, miny);
+    context.close_path();
+    context.stroke();
+}
+
+} // anonymous namespace
+
+template <typename T>
+void cairo_renderer<T>::process(debug_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    using detector_type = label_collision_detector4;
+    cairo_save_restore guard(context_);
+
+    debug_symbolizer_mode_enum mode = get<debug_symbolizer_mode_enum>(sym, keys::mode, feature, common_.vars_, DEBUG_SYM_MODE_COLLISION);
+
+    context_.set_operator(src_over);
+    context_.set_color(mapnik::color(255, 0, 0), 1.0);
+    context_.set_line_join(MITER_JOIN);
+    context_.set_line_cap(BUTT_CAP);
+    context_.set_miter_limit(4.0);
+    context_.set_line_width(1.0);
+
+    if (mode == DEBUG_SYM_MODE_COLLISION)
+    {
+        typename detector_type::query_iterator itr = common_.detector_->begin();
+        typename detector_type::query_iterator end = common_.detector_->end();
+        for ( ;itr!=end; ++itr)
+        {
+            render_debug_box(context_, itr->box);
+        }
+    }
+    else if (mode == DEBUG_SYM_MODE_VERTEX)
+    {
+        for (auto const& geom : feature.paths())
+        {
+            double x;
+            double y;
+            double z = 0;
+            geom.rewind(0);
+            unsigned cmd = 1;
+            while ((cmd = geom.vertex(&x, &y)) != mapnik::SEG_END)
+            {
+                if (cmd == SEG_CLOSE) continue;
+                prj_trans.backward(x,y,z);
+                common_.t_.forward(&x,&y);
+                context_.move_to(std::floor(x) - 0.5, std::floor(y) + 0.5);
+                context_.line_to(std::floor(x) + 1.5, std::floor(y) + 0.5);
+                context_.move_to(std::floor(x) + 0.5, std::floor(y) - 0.5);
+                context_.line_to(std::floor(x) + 0.5, std::floor(y) + 1.5);
+                context_.stroke();
+            }
+        }
+    }
+}
+
+template void cairo_renderer<cairo_ptr>::process(debug_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_group_symbolizer.cpp b/src/cairo/process_group_symbolizer.cpp
new file mode 100644
index 0000000..f26f3d9
--- /dev/null
+++ b/src/cairo/process_group_symbolizer.cpp
@@ -0,0 +1,126 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/make_unique.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+
+// mapnik symbolizer generics
+#include <mapnik/renderer_common/process_group_symbolizer.hpp>
+
+namespace mapnik
+{
+
+class feature_impl;
+class proj_transform;
+struct group_symbolizer;
+
+namespace {
+
+// Render a thunk which was frozen from a previous call to
+// extract_bboxes. We should now have a new offset at which
+// to render it, and the boxes themselves should already be
+// in the detector from the placement_finder.
+template <typename T>
+struct thunk_renderer : public util::static_visitor<>
+{
+    using renderer_type = cairo_renderer<T>;
+
+    thunk_renderer(renderer_type & ren,
+                   cairo_context & context,
+                   cairo_face_manager & face_manager,
+                   renderer_common & common,
+                   pixel_position const& offset)
+        : ren_(ren), context_(context), face_manager_(face_manager),
+          common_(common), offset_(offset)
+    {}
+
+    void operator()(point_render_thunk const &thunk) const
+    {
+        pixel_position new_pos(thunk.pos_.x + offset_.x, thunk.pos_.y + offset_.y);
+        ren_.render_marker(new_pos, *thunk.marker_, thunk.tr_, thunk.opacity_,
+                           thunk.comp_op_);
+    }
+
+    void operator()(text_render_thunk const &thunk) const
+    {
+        cairo_save_restore guard(context_);
+        context_.set_operator(thunk.comp_op_);
+
+        render_offset_placements(
+            thunk.placements_,
+            offset_,
+            [&] (glyph_positions_ptr glyphs)
+            {
+                if (glyphs->marker())
+                {
+                    ren_.render_marker(glyphs->marker_pos(),
+                                       *(glyphs->marker()->marker),
+                                       glyphs->marker()->transform,
+                                       thunk.opacity_, thunk.comp_op_);
+                }
+                context_.add_text(*glyphs, face_manager_, common_.font_manager_, src_over, src_over, common_.scale_factor_);
+            });
+    }
+
+    template <typename T0>
+    void operator()(T0 const &) const
+    {
+        // TODO: warning if unimplemented?
+    }
+
+private:
+    renderer_type & ren_;
+    cairo_context & context_;
+    cairo_face_manager & face_manager_;
+    renderer_common & common_;
+    pixel_position offset_;
+};
+
+} // anonymous namespace
+
+template <typename T>
+void cairo_renderer<T>::process(group_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    render_group_symbolizer(
+        sym, feature, common_.vars_, prj_trans, common_.query_extent_, common_,
+        [&](render_thunk_list const& thunks, pixel_position const& render_offset)
+        {
+            thunk_renderer<T> ren(*this, context_, face_manager_, common_, render_offset);
+            for (render_thunk_ptr const& thunk : thunks)
+            {
+                util::apply_visitor(ren, *thunk);
+            }
+        });
+}
+
+template void cairo_renderer<cairo_ptr>::process(group_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_line_pattern_symbolizer.cpp b/src/cairo/process_line_pattern_symbolizer.cpp
new file mode 100644
index 0000000..e14348e
--- /dev/null
+++ b/src/cairo/process_line_pattern_symbolizer.cpp
@@ -0,0 +1,137 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/make_unique.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/renderer_common/render_pattern.hpp>
+#include <mapnik/vertex_converters.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/agg_rasterizer.hpp>
+
+namespace mapnik
+{
+
+template <typename T>
+void cairo_renderer<T>::process(line_pattern_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    std::string filename = get<std::string, keys::file>(sym, feature, common_.vars_);
+    composite_mode_e comp_op = get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_);
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double offset = get<value_double, keys::offset>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
+
+    boost::optional<marker_ptr> marker;
+    if ( !filename.empty() )
+    {
+        marker = marker_cache::instance().find(filename, true);
+    }
+    if (!marker || !(*marker)) return;
+
+    unsigned width = (*marker)->width();
+    unsigned height = (*marker)->height();
+
+    cairo_save_restore guard(context_);
+    context_.set_operator(comp_op);
+    std::shared_ptr<cairo_pattern> pattern;
+    image_ptr image = nullptr;
+    // TODO - re-implement at renderer level like polygon_pattern symbolizer
+    double opacity = get<value_double, keys::opacity>(sym, feature, common_.vars_);
+    if ((*marker)->is_bitmap())
+    {
+        pattern = std::make_unique<cairo_pattern>(**((*marker)->get_bitmap_data()), opacity);
+        context_.set_line_width(height);
+    }
+    else
+    {
+        mapnik::rasterizer ras;
+        agg::trans_affine image_tr = agg::trans_affine_scaling(common_.scale_factor_);
+        auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+        if (image_transform) evaluate_transform(image_tr, feature, common_.vars_, *image_transform);
+        image = render_pattern(ras, **marker, image_tr, 1.0);
+        pattern = std::make_unique<cairo_pattern>(*image, opacity);
+        width = image->width();
+        height = image->height();
+        context_.set_line_width(height);
+    }
+
+    pattern->set_extend(CAIRO_EXTEND_REPEAT);
+    pattern->set_filter(CAIRO_FILTER_BILINEAR);
+
+    agg::trans_affine tr;
+    auto geom_transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (geom_transform) { evaluate_transform(tr, feature, common_.vars_, *geom_transform, common_.scale_factor_); }
+
+    box2d<double> clipping_extent = common_.query_extent_;
+    if (clip)
+    {
+        double padding = (double)(common_.query_extent_.width()/common_.width_);
+        double half_stroke = width/2.0;
+        if (half_stroke > 1)
+            padding *= half_stroke;
+        if (std::fabs(offset) > 0)
+            padding *= std::fabs(offset) * 1.2;
+        padding *= common_.scale_factor_;
+        clipping_extent.pad(padding);
+    }
+
+    using rasterizer_type = line_pattern_rasterizer<cairo_context>;
+    rasterizer_type ras(context_, *pattern, width, height);
+    vertex_converter<rasterizer_type,clip_line_tag, transform_tag,
+                     affine_transform_tag,
+                     simplify_tag, smooth_tag,
+                     offset_transform_tag,
+                     dash_tag, stroke_tag>
+        converter(clipping_extent, ras, sym, common_.t_, prj_trans, tr, feature, common_.vars_, common_.scale_factor_);
+
+    if (clip) converter.set<clip_line_tag>(); // optional clip (default: true)
+    converter.set<transform_tag>(); // always transform
+    if (std::fabs(offset) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
+    converter.set<affine_transform_tag>(); // optional affine transform
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+
+
+    for (auto & geom : feature.paths())
+    {
+        if (geom.size() > 1)
+        {
+            converter.apply(geom);
+        }
+    }
+}
+
+template void cairo_renderer<cairo_ptr>::process(line_pattern_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_line_symbolizer.cpp b/src/cairo/process_line_symbolizer.cpp
new file mode 100644
index 0000000..1a3a87d
--- /dev/null
+++ b/src/cairo/process_line_symbolizer.cpp
@@ -0,0 +1,116 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/vertex_converters.hpp>
+
+namespace mapnik
+{
+
+template <typename T>
+void cairo_renderer<T>::process(line_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    composite_mode_e comp_op = get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_);
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double offset = get<value_double, keys::offset>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
+
+    color stroke = get<color, keys::stroke>(sym, feature, common_.vars_);
+    value_double stroke_opacity = get<value_double, keys::stroke_opacity>(sym, feature, common_.vars_);
+    line_join_enum stroke_join = get<line_join_enum, keys::stroke_linejoin>(sym, feature, common_.vars_);
+    line_cap_enum stroke_cap = get<line_cap_enum, keys::stroke_linecap>(sym, feature, common_.vars_);
+    value_double miterlimit = get<value_double, keys::stroke_miterlimit>(sym, feature, common_.vars_);
+    value_double width = get<value_double, keys::stroke_width>(sym, feature, common_.vars_);
+
+    auto dash = get_optional<dash_array>(sym, keys::stroke_dasharray, feature, common_.vars_);
+
+    cairo_save_restore guard(context_);
+    context_.set_operator(comp_op);
+    context_.set_color(stroke, stroke_opacity);
+    context_.set_line_join(stroke_join);
+    context_.set_line_cap(stroke_cap);
+    context_.set_miter_limit(miterlimit);
+    context_.set_line_width(width * common_.scale_factor_);
+    if (dash)
+    {
+        context_.set_dash(*dash, common_.scale_factor_);
+    }
+
+    agg::trans_affine tr;
+    auto geom_transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (geom_transform) { evaluate_transform(tr, feature, common_.vars_, *geom_transform, common_.scale_factor_); }
+
+    box2d<double> clipping_extent = common_.query_extent_;
+    if (clip)
+    {
+        double padding = (double)(common_.query_extent_.width()/common_.width_);
+        double half_stroke = width/2.0;
+        if (half_stroke > 1)
+            padding *= half_stroke;
+        if (std::fabs(offset) > 0)
+            padding *= std::fabs(offset) * 1.2;
+        padding *= common_.scale_factor_;
+        clipping_extent.pad(padding);
+    }
+    vertex_converter<cairo_context,
+                     clip_line_tag,
+                     transform_tag,
+                     affine_transform_tag,
+                     simplify_tag, smooth_tag,
+                     offset_transform_tag,
+                     dash_tag, stroke_tag>
+        converter(clipping_extent,context_,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
+
+    if (clip) converter.set<clip_line_tag>(); // optional clip (default: true)
+    converter.set<transform_tag>(); // always transform
+    if (std::fabs(offset) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
+    converter.set<affine_transform_tag>(); // optional affine transform
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+
+    for (geometry_type & geom : feature.paths())
+    {
+        if (geom.size() > 1)
+        {
+            converter.apply(geom);
+        }
+    }
+    // stroke
+    context_.set_fill_rule(CAIRO_FILL_RULE_WINDING);
+    context_.stroke();
+}
+
+template void cairo_renderer<cairo_ptr>::process(line_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_markers_symbolizer.cpp b/src/cairo/process_markers_symbolizer.cpp
new file mode 100644
index 0000000..4eb6981
--- /dev/null
+++ b/src/cairo/process_markers_symbolizer.cpp
@@ -0,0 +1,214 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/cairo/cairo_render_vector.hpp>
+#include <mapnik/markers_placement.hpp>
+#include <mapnik/svg/svg_path_adapter.hpp>
+#include <mapnik/noncopyable.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/attribute.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/renderer_common/process_markers_symbolizer.hpp>
+
+// agg
+#include "agg/include/agg_array.h"      // for pod_bvector
+#include "agg/include/agg_trans_affine.h"  // for trans_affine, etc
+
+namespace mapnik
+{
+
+class feature_impl;
+class proj_transform;
+namespace svg { struct path_attributes; }
+
+namespace detail {
+
+template <typename RendererContext, typename SvgPath, typename Attributes, typename Detector>
+struct markers_dispatch : mapnik::noncopyable
+{
+    markers_dispatch(SvgPath & marker,
+                     Attributes const& attributes,
+                     box2d<double> const& bbox,
+                     agg::trans_affine const& marker_trans,
+                     markers_symbolizer const& sym,
+                     Detector & detector,
+                     double scale_factor,
+                     feature_impl const& feature,
+                     mapnik::attributes const& vars,
+                     bool snap_to_pixels,
+                     RendererContext const& renderer_context)
+        :marker_(marker),
+        attributes_(attributes),
+        bbox_(bbox),
+        marker_trans_(marker_trans),
+        sym_(sym),
+        detector_(detector),
+        scale_factor_(scale_factor),
+        feature_(feature),
+        vars_(vars),
+        ctx_(std::get<0>(renderer_context))
+    {}
+
+
+    template <typename T>
+    void add_path(T & path)
+    {
+        marker_placement_enum placement_method = get<marker_placement_enum>(
+            sym_, keys::markers_placement_type, feature_, vars_, MARKER_POINT_PLACEMENT);
+        value_bool ignore_placement = get<value_bool, keys::ignore_placement>(sym_, feature_, vars_);
+        value_bool allow_overlap = get<value_bool, keys::allow_overlap>(sym_, feature_, vars_);
+        value_bool avoid_edges = get<value_bool, keys::avoid_edges>(sym_, feature_, vars_);
+        value_double opacity = get<value_double, keys::opacity>(sym_, feature_, vars_);
+        value_double spacing = get<value_double, keys::spacing>(sym_, feature_, vars_);
+        value_double max_error = get<value_double, keys::max_error>(sym_, feature_, vars_);
+        coord2d center = bbox_.center();
+        agg::trans_affine_translation recenter(-center.x, -center.y);
+        agg::trans_affine tr = recenter * marker_trans_;
+        markers_placement_params params { bbox_, tr, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
+        markers_placement_finder<T, label_collision_detector4> placement_finder(
+            placement_method, path, detector_, params);
+        double x, y, angle = .0;
+        while (placement_finder.get_point(x, y, angle, ignore_placement))
+        {
+            agg::trans_affine matrix = tr;
+            matrix.rotate(angle);
+            matrix.translate(x, y);
+            render_vector_marker(
+                ctx_,
+                pixel_position(x, y),
+                marker_,
+                bbox_,
+                attributes_,
+                matrix,
+                opacity,
+                false);
+        }
+    }
+
+    SvgPath & marker_;
+    Attributes const& attributes_;
+    box2d<double> const& bbox_;
+    agg::trans_affine const& marker_trans_;
+    markers_symbolizer const& sym_;
+    Detector & detector_;
+    double scale_factor_;
+    feature_impl const& feature_;
+    attributes const& vars_;
+    cairo_context & ctx_;
+};
+
+template <typename RendererContext, typename Detector>
+struct raster_markers_dispatch : mapnik::noncopyable
+{
+    raster_markers_dispatch(mapnik::image_data_32 & src,
+                       agg::trans_affine const& marker_trans,
+                       markers_symbolizer const& sym,
+                       Detector & detector,
+                       double scale_factor,
+                       feature_impl const& feature,
+                       mapnik::attributes const& vars,
+                       RendererContext const& renderer_context)
+        : src_(src),
+        detector_(detector),
+        sym_(sym),
+        marker_trans_(marker_trans),
+        scale_factor_(scale_factor),
+        feature_(feature),
+        vars_(vars),
+        ctx_(std::get<0>(renderer_context)) {}
+
+    template <typename T>
+    void add_path(T & path)
+    {
+        marker_placement_enum placement_method = get<marker_placement_enum>(sym_, keys::markers_placement_type, feature_, vars_, MARKER_POINT_PLACEMENT);
+        value_double opacity = get<value_double, keys::opacity>(sym_, feature_, vars_);
+        value_double spacing = get<value_double, keys::spacing>(sym_, feature_, vars_);
+        value_double max_error = get<value_double>(sym_, keys::max_error, feature_, vars_,  0.2); // overwrite default
+        value_bool allow_overlap = get<value_bool, keys::allow_overlap>(sym_, feature_, vars_);
+        value_bool avoid_edges = get<value_bool, keys::avoid_edges>(sym_, feature_, vars_);
+        value_bool ignore_placement = get<value_bool, keys::ignore_placement>(sym_, feature_, vars_);
+        box2d<double> bbox_(0,0, src_.width(),src_.height());
+        markers_placement_params params { bbox_, marker_trans_, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
+        markers_placement_finder<T, label_collision_detector4> placement_finder(
+            placement_method, path, detector_, params);
+        double x, y, angle = .0;
+        while (placement_finder.get_point(x, y, angle, ignore_placement))
+        {
+            agg::trans_affine matrix = marker_trans_;
+            matrix.rotate(angle);
+            matrix.translate(x, y);
+            ctx_.add_image(matrix, src_, opacity);
+        }
+    }
+
+    image_data_32 & src_;
+    Detector & detector_;
+    markers_symbolizer const& sym_;
+    agg::trans_affine const& marker_trans_;
+    double scale_factor_;
+    feature_impl const& feature_;
+    attributes const& vars_;
+    cairo_context & ctx_;
+};
+
+}
+
+template <typename T>
+void cairo_renderer<T>::process(markers_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    using svg_attribute_type = agg::pod_bvector<svg::path_attributes>;
+
+    cairo_save_restore guard(context_);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
+    context_.set_operator(comp_op);
+    box2d<double> clip_box = common_.query_extent_;
+
+    auto renderer_context = std::tie(context_);
+
+    using RendererContextType = decltype(renderer_context);
+    using vector_dispatch_type = detail::markers_dispatch<RendererContextType,
+                                                          svg::path_adapter<svg::vertex_stl_adapter<svg::svg_path_storage> >,
+                                                          svg_attribute_type,label_collision_detector4>;
+
+    using raster_dispatch_type = detail::raster_markers_dispatch<RendererContextType,
+                                                                 label_collision_detector4>;
+
+
+    render_markers_symbolizer<vector_dispatch_type, raster_dispatch_type>(
+        sym, feature, prj_trans, common_, clip_box,
+        renderer_context);
+}
+
+template void cairo_renderer<cairo_ptr>::process(markers_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_point_symbolizer.cpp b/src/cairo/process_point_symbolizer.cpp
new file mode 100644
index 0000000..349a198
--- /dev/null
+++ b/src/cairo/process_point_symbolizer.cpp
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/symbolizer_keys.hpp>
+#include <mapnik/image_compositing.hpp>
+#include <mapnik/cairo/cairo_context.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/renderer_common.hpp>
+#include <mapnik/renderer_common/process_point_symbolizer.hpp>
+
+namespace agg { struct trans_affine; }
+
+namespace mapnik
+{
+
+class feature_impl;
+class proj_transform;
+
+template <typename T>
+void cairo_renderer<T>::process(point_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
+
+    cairo_save_restore guard(context_);
+    context_.set_operator(comp_op);
+
+    render_point_symbolizer(
+        sym, feature, prj_trans, common_,
+        [this](pixel_position const& pos, marker const& marker,
+            agg::trans_affine const& tr, double opacity) {
+            render_marker(pos, marker, tr, opacity);
+        });
+}
+
+template void cairo_renderer<cairo_ptr>::process(point_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_polygon_pattern_symbolizer.cpp b/src/cairo/process_polygon_pattern_symbolizer.cpp
new file mode 100644
index 0000000..1394d65
--- /dev/null
+++ b/src/cairo/process_polygon_pattern_symbolizer.cpp
@@ -0,0 +1,132 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/cairo/cairo_render_vector.hpp>
+#include <mapnik/renderer_common/render_pattern.hpp>
+#include <mapnik/vertex_converters.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/agg_rasterizer.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
+
+namespace mapnik
+{
+
+template <typename T>
+void cairo_renderer<T>::process(polygon_pattern_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    composite_mode_e comp_op = get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_);
+    std::string filename = get<std::string, keys::file>(sym, feature, common_.vars_);
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
+    value_double opacity = get<value_double, keys::opacity>(sym, feature, common_.vars_);
+    agg::trans_affine image_tr = agg::trans_affine_scaling(common_.scale_factor_);
+    auto image_transform = get_optional<transform_type>(sym, keys::image_transform);
+    if (image_transform) evaluate_transform(image_tr, feature, common_.vars_, *image_transform);
+
+    cairo_save_restore guard(context_);
+    context_.set_operator(comp_op);
+
+    boost::optional<mapnik::marker_ptr> marker = mapnik::marker_cache::instance().find(filename,true);
+    if (!marker || !(*marker)) return;
+
+    unsigned offset_x=0;
+    unsigned offset_y=0;
+    box2d<double> const& clip_box = clipping_extent(common_);
+    pattern_alignment_enum alignment = get<pattern_alignment_enum, keys::alignment>(sym, feature, common_.vars_);
+    if (alignment == LOCAL_ALIGNMENT)
+    {
+        double x0 = 0.0;
+        double y0 = 0.0;
+
+        if (feature.num_geometries() > 0)
+        {
+            using clipped_geometry_type = agg::conv_clip_polygon<geometry_type>;
+            using path_type = transform_path_adapter<view_transform,clipped_geometry_type>;
+            clipped_geometry_type clipped(feature.get_geometry(0));
+            clipped.clip_box(clip_box.minx(), clip_box.miny(),
+                             clip_box.maxx(), clip_box.maxy());
+            path_type path(common_.t_, clipped, prj_trans);
+            path.vertex(&x0, &y0);
+        }
+        offset_x = std::abs(clip_box.width() - x0);
+        offset_y = std::abs(clip_box.height() - y0);
+    }
+
+    if ((*marker)->is_bitmap())
+    {
+        cairo_pattern pattern(**((*marker)->get_bitmap_data()), opacity);
+        pattern.set_extend(CAIRO_EXTEND_REPEAT);
+        pattern.set_origin(offset_x, offset_y);
+        context_.set_pattern(pattern);
+    }
+    else
+    {
+        mapnik::rasterizer ras;
+        image_ptr image = render_pattern(ras, **marker, image_tr, 1.0); //
+        cairo_pattern pattern(*image, opacity);
+        pattern.set_extend(CAIRO_EXTEND_REPEAT);
+        pattern.set_origin(offset_x, offset_y);
+        context_.set_pattern(pattern);
+    }
+
+    agg::trans_affine tr;
+    auto geom_transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (geom_transform) { evaluate_transform(tr, feature, common_.vars_, *geom_transform, common_.scale_factor_); }
+
+    vertex_converter<cairo_context,clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag>
+        converter(clip_box, context_,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
+
+    if (prj_trans.equal() && clip) converter.set<clip_poly_tag>(); //optional clip (default: true)
+    converter.set<transform_tag>(); //always transform
+    converter.set<affine_transform_tag>();
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+
+    for ( geometry_type & geom : feature.paths())
+    {
+        if (geom.size() > 2)
+        {
+            converter.apply(geom);
+        }
+    }
+    // fill polygon
+    context_.set_fill_rule(CAIRO_FILL_RULE_EVEN_ODD);
+    context_.fill();
+}
+
+template void cairo_renderer<cairo_ptr>::process(polygon_pattern_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_polygon_symbolizer.cpp b/src/cairo/process_polygon_symbolizer.cpp
new file mode 100644
index 0000000..bbc48e1
--- /dev/null
+++ b/src/cairo/process_polygon_symbolizer.cpp
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/renderer_common/process_polygon_symbolizer.hpp>
+#include <mapnik/vertex_converters.hpp>
+
+namespace mapnik
+{
+
+
+template <typename T>
+void cairo_renderer<T>::process(polygon_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    using vertex_converter_type = vertex_converter<cairo_context,clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag>;
+    cairo_save_restore guard(context_);
+    composite_mode_e comp_op = get<composite_mode_e, keys::comp_op>(sym, feature, common_.vars_);
+    context_.set_operator(comp_op);
+
+    render_polygon_symbolizer<vertex_converter_type>(
+        sym, feature, prj_trans, common_, common_.query_extent_, context_,
+        [&](color const &fill, double opacity) {
+            context_.set_color(fill, opacity);
+            // fill polygon
+            context_.set_fill_rule(CAIRO_FILL_RULE_EVEN_ODD);
+            context_.fill();
+        });
+}
+
+template void cairo_renderer<cairo_ptr>::process(polygon_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_raster_symbolizer.cpp b/src/cairo/process_raster_symbolizer.cpp
new file mode 100644
index 0000000..c9bfcaf
--- /dev/null
+++ b/src/cairo/process_raster_symbolizer.cpp
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/make_unique.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer_enumerations.hpp>
+#include <mapnik/proj_transform.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
+
+// mapnik symbolizer generics
+#include <mapnik/renderer_common/process_raster_symbolizer.hpp>
+
+namespace mapnik
+{
+
+template <typename T>
+void cairo_renderer<T>::process(raster_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    cairo_save_restore guard(context_);
+    render_raster_symbolizer(
+        sym, feature, prj_trans, common_,
+        [&](image_data_32 &target, composite_mode_e comp_op, double opacity,
+            int start_x, int start_y) {
+            context_.set_operator(comp_op);
+            context_.add_image(start_x, start_y, target, opacity);
+        }
+    );
+}
+
+template void cairo_renderer<cairo_ptr>::process(raster_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo/process_text_symbolizer.cpp b/src/cairo/process_text_symbolizer.cpp
new file mode 100644
index 0000000..3493ac1
--- /dev/null
+++ b/src/cairo/process_text_symbolizer.cpp
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#if defined(HAVE_CAIRO)
+
+// mapnik
+#include <mapnik/cairo/cairo_renderer.hpp>
+#include <mapnik/text/symbolizer_helpers.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/symbolizer.hpp>
+
+namespace mapnik
+{
+
+class feature_impl;
+class proj_transform;
+
+template <typename T>
+void cairo_renderer<T>::process(shield_symbolizer const& sym,
+                                mapnik::feature_impl & feature,
+                                proj_transform const& prj_trans)
+{
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    text_symbolizer_helper helper(
+            sym, feature, common_.vars_, prj_trans,
+            common_.width_, common_.height_,
+            common_.scale_factor_,
+            common_.t_, common_.font_manager_, *common_.detector_,
+            common_.query_extent_, tr);
+
+    cairo_save_restore guard(context_);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
+    composite_mode_e halo_comp_op = get<composite_mode_e>(sym, keys::halo_comp_op, feature, common_.vars_, src_over);
+    double opacity = get<double>(sym,keys::opacity,feature, common_.vars_, 1.0);
+
+    placements_list const &placements = helper.get();
+    for (glyph_positions_ptr glyphs : placements)
+    {
+        if (glyphs->marker()) {
+            pixel_position pos = glyphs->marker_pos();
+            render_marker(pos,
+                          *(glyphs->marker()->marker),
+                          glyphs->marker()->transform,
+                          opacity);
+        }
+        context_.add_text(*glyphs, face_manager_, common_.font_manager_, comp_op, halo_comp_op, common_.scale_factor_);
+    }
+}
+
+template void cairo_renderer<cairo_ptr>::process(shield_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+template <typename T>
+void cairo_renderer<T>::process(text_symbolizer const& sym,
+                                  mapnik::feature_impl & feature,
+                                  proj_transform const& prj_trans)
+{
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    text_symbolizer_helper helper(
+            sym, feature, common_.vars_, prj_trans,
+            common_.width_, common_.height_,
+            common_.scale_factor_,
+            common_.t_, common_.font_manager_, *common_.detector_,
+            common_.query_extent_, tr);
+
+    cairo_save_restore guard(context_);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_,  src_over);
+    composite_mode_e halo_comp_op = get<composite_mode_e>(sym, keys::halo_comp_op, feature, common_.vars_,  src_over);
+
+    placements_list const& placements = helper.get();
+    for (glyph_positions_ptr glyphs : placements)
+    {
+        context_.add_text(*glyphs, face_manager_, common_.font_manager_, comp_op, halo_comp_op, common_.scale_factor_);
+    }
+}
+
+template void cairo_renderer<cairo_ptr>::process(text_symbolizer const&,
+                                                 mapnik::feature_impl &,
+                                                 proj_transform const&);
+
+}
+
+#endif // HAVE_CAIRO
diff --git a/src/cairo_context.cpp b/src/cairo_context.cpp
deleted file mode 100644
index cf04116..0000000
--- a/src/cairo_context.cpp
+++ /dev/null
@@ -1,503 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2013 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <mapnik/cairo_context.hpp>
-#include <mapnik/font_util.hpp>
-#include <mapnik/text_properties.hpp>
-#include <mapnik/text_path.hpp>
-#include <mapnik/font_set.hpp>
-
-#include <cairo-ft.h>
-
-#include <valarray>
-namespace mapnik {
-
-cairo_face::cairo_face(boost::shared_ptr<freetype_engine> const& engine, face_ptr const& face)
-    : face_(face)
-{
-    static cairo_user_data_key_t key;
-    c_face_ = cairo_ft_font_face_create_for_ft_face(face->get_face(), FT_LOAD_NO_HINTING);
-    cairo_font_face_set_user_data(c_face_, &key, new handle(engine, face), destroy);
-}
-
-cairo_face::~cairo_face()
-{
-    if (c_face_) cairo_font_face_destroy(c_face_);
-}
-
-cairo_font_face_t * cairo_face::face() const
-{
-    return c_face_;
-}
-
-cairo_context::cairo_context(cairo_ptr const& cairo)
-    : cairo_(cairo)
-{}
-
-void cairo_context::clip()
-{
-    cairo_clip(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::show_page()
-{
-    cairo_show_page(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_color(color const &color, double opacity)
-{
-    set_color(color.red()/255.0, color.green()/255.0, color.blue()/255.0, color.alpha() * opacity / 255.0);
-}
-
-void cairo_context::set_color(double r, double g, double b, double opacity)
-{
-    // http://lists.cairographics.org/archives/cairo/2008-August/014759.html
-    cairo_set_source_rgba(cairo_.get(), r, g, b, opacity);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_operator(composite_mode_e comp_op)
-{
-    switch (comp_op)
-    {
-    case clear:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_CLEAR);
-        break;
-    case src:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_SOURCE);
-        break;
-    case dst:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST);
-        break;
-    case src_over:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_OVER);
-        break;
-    case dst_over:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_OVER);
-        break;
-    case src_in:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_IN);
-        break;
-    case dst_in:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_IN);
-        break;
-    case src_out:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_OUT);
-        break;
-    case dst_out:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_OUT);
-        break;
-    case src_atop:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_ATOP);
-        break;
-    case dst_atop:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DEST_ATOP);
-        break;
-    case _xor:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_XOR);
-        break;
-    case plus:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_ADD);
-        break;
-#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 10, 0)
-    case multiply:
-        cairo_set_operator(cairo_.get(), CAIRO_OPERATOR_MULTIPLY);
-        break;
-    case screen:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_SCREEN);
-        break;
-    case overlay:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_OVERLAY);
-        break;
-    case darken:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DARKEN);
-        break;
-    case lighten:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_LIGHTEN);
-        break;
-    case color_dodge:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_COLOR_DODGE);
-        break;
-    case color_burn:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_COLOR_BURN);
-        break;
-    case hard_light:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_HARD_LIGHT);
-        break;
-    case soft_light:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_SOFT_LIGHT);
-        break;
-    case difference:
-        cairo_set_operator(cairo_.get(),CAIRO_OPERATOR_DIFFERENCE);
-        break;
-    case exclusion:
-        cairo_set_operator(cairo_.get(), CAIRO_OPERATOR_EXCLUSION);
-        break;
-#else
-    case multiply:
-    case screen:
-    case overlay:
-    case darken:
-    case lighten:
-    case color_dodge:
-    case color_burn:
-    case hard_light:
-    case soft_light:
-    case difference:
-    case exclusion:
-        break;
-#endif
-    case contrast:
-    case minus:
-    case invert:
-    case invert_rgb:
-    case grain_merge:
-    case grain_extract:
-    case hue:
-    case saturation:
-    case _color:
-    case _value:
-        //case colorize_alpha:
-        break;
-    }
-    //
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_line_join(line_join_e join)
-{
-    if (join == MITER_JOIN)
-        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_MITER);
-    else if (join == MITER_REVERT_JOIN)
-        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_MITER);
-    else if (join == ROUND_JOIN)
-        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_ROUND);
-    else
-        cairo_set_line_join(cairo_.get(), CAIRO_LINE_JOIN_BEVEL);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_line_cap(line_cap_e cap)
-{
-    if (cap == BUTT_CAP)
-        cairo_set_line_cap(cairo_.get(), CAIRO_LINE_CAP_BUTT);
-    else if (cap == SQUARE_CAP)
-        cairo_set_line_cap(cairo_.get(), CAIRO_LINE_CAP_SQUARE);
-    else
-        cairo_set_line_cap(cairo_.get(), CAIRO_LINE_CAP_ROUND);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_miter_limit(double limit)
-{
-    cairo_set_miter_limit(cairo_.get(), limit);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_line_width(double width)
-{
-    cairo_set_line_width(cairo_.get(), width);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_dash(dash_array const &dashes, double scale_factor)
-{
-    std::valarray<double> d(dashes.size() * 2);
-    dash_array::const_iterator itr = dashes.begin();
-    dash_array::const_iterator end = dashes.end();
-    int index = 0;
-
-    for (; itr != end; ++itr)
-    {
-        d[index++] = itr->first * scale_factor;
-        d[index++] = itr->second * scale_factor;
-    }
-
-    cairo_set_dash(cairo_.get() , &d[0], d.size(), 0/*offset*/);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_fill_rule(cairo_fill_rule_t fill_rule)
-{
-    cairo_set_fill_rule(cairo_.get(),fill_rule);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::move_to(double x, double y)
-{
-#if CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 6, 0)
-    if (x < -32767.0) x = -32767.0;
-    else if (x > 32767.0) x = 32767.0;
-    if (y < -32767.0) y = -32767.0;
-    else if (y > 32767.0) y = 32767.0;
-#endif
-    cairo_move_to(cairo_.get(), x, y);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::curve_to(double ct1_x, double ct1_y, double ct2_x, double ct2_y, double end_x, double end_y)
-{
-    cairo_curve_to(cairo_.get(), ct1_x,ct1_y,ct2_x,ct2_y,end_x,end_y);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::close_path()
-{
-    cairo_close_path(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::line_to(double x, double y)
-{
-#if CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 6, 0)
-    if (x < -32767.0) x = -32767.0;
-    else if (x > 32767.0) x = 32767.0;
-    if (y < -32767.0) y = -32767.0;
-    else if (y > 32767.0) y = 32767.0;
-#endif
-    cairo_line_to(cairo_.get(), x, y);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::rectangle(double x, double y, double w, double h)
-{
-    cairo_rectangle(cairo_.get(), x, y, w, h);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::stroke()
-{
-    cairo_stroke(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::fill()
-{
-    cairo_fill(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::paint()
-{
-    cairo_paint(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_pattern(cairo_pattern const& pattern)
-{
-    cairo_set_source(cairo_.get(), pattern.pattern());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_gradient(cairo_gradient const& pattern, const box2d<double> &bbox)
-{
-    cairo_pattern_t * gradient = pattern.gradient();
-    double bx1=bbox.minx();
-    double by1=bbox.miny();
-    double bx2=bbox.maxx();
-    double by2=bbox.maxy();
-    if (pattern.units() != USER_SPACE_ON_USE)
-    {
-        if (pattern.units() == OBJECT_BOUNDING_BOX)
-        {
-            cairo_path_extents(cairo_.get(), &bx1, &by1, &bx2, &by2);
-        }
-        cairo_matrix_t cairo_matrix;
-        cairo_pattern_get_matrix(gradient, &cairo_matrix);
-        cairo_matrix_scale(&cairo_matrix,1.0/(bx2-bx1),1.0/(by2-by1));
-        cairo_matrix_translate(&cairo_matrix, -bx1,-by1);
-        cairo_pattern_set_matrix(gradient, &cairo_matrix);
-    }
-    cairo_set_source(cairo_.get(), const_cast<cairo_pattern_t*>(gradient));
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::add_image(double x, double y, image_data_32 & data, double opacity)
-{
-    cairo_pattern pattern(data);
-    pattern.set_origin(x, y);
-    cairo_save(cairo_.get());
-    cairo_set_source(cairo_.get(), const_cast<cairo_pattern_t*>(pattern.pattern()));
-    cairo_paint_with_alpha(cairo_.get(), opacity);
-    cairo_restore(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::add_image(agg::trans_affine const& tr, image_data_32 & data, double opacity)
-{
-    cairo_pattern pattern(data);
-    if (!tr.is_identity())
-    {
-        double m[6];
-        tr.store_to(m);
-        cairo_matrix_t cairo_matrix;
-        cairo_matrix_init(&cairo_matrix,m[0],m[1],m[2],m[3],m[4],m[5]);
-        cairo_matrix_invert(&cairo_matrix);
-        pattern.set_matrix(cairo_matrix);
-    }
-    cairo_save(cairo_.get());
-    cairo_set_source(cairo_.get(), const_cast<cairo_pattern_t*>(pattern.pattern()));
-    cairo_paint_with_alpha(cairo_.get(), opacity);
-    cairo_restore(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_font_face(cairo_face_manager & manager, face_ptr face)
-{
-    cairo_set_font_face(cairo_.get(), manager.get_face(face)->face());
-}
-
-void cairo_context::set_font_matrix(cairo_matrix_t const& matrix)
-{
-    cairo_set_font_matrix(cairo_.get(), &matrix);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::set_matrix(cairo_matrix_t const& matrix)
-{
-    cairo_set_matrix(cairo_.get(), &matrix);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::transform(cairo_matrix_t const& matrix)
-{
-    cairo_transform(cairo_.get(), &matrix);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::translate(double x, double y)
-{
-    cairo_translate(cairo_.get(), x, y);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::save()
-{
-    cairo_save(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::restore()
-{
-    cairo_restore(cairo_.get());
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::show_glyph(unsigned long index, double x, double y)
-{
-    cairo_glyph_t glyph;
-    glyph.index = index;
-    glyph.x = x;
-    glyph.y = y;
-
-    cairo_show_glyphs(cairo_.get(), &glyph, 1);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::glyph_path(unsigned long index, double x, double y)
-{
-    cairo_glyph_t glyph;
-    glyph.index = index;
-    glyph.x = x;
-    glyph.y = y;
-
-    cairo_glyph_path(cairo_.get(), &glyph, 1);
-    check_object_status_and_throw_exception(*this);
-}
-
-void cairo_context::add_text(text_path const& path,
-                             cairo_face_manager & manager,
-                             face_manager<freetype_engine> & font_manager,
-                             double scale_factor)
-{
-    double sx = path.center.x;
-    double sy = path.center.y;
-
-    path.rewind();
-
-    for (int iii = 0; iii < path.num_nodes(); iii++)
-    {
-        char_info_ptr c;
-        double x, y, angle;
-
-        path.vertex(c, x, y, angle);
-
-        face_set_ptr faces = font_manager.get_face_set(c->format->face_name, c->format->fontset);
-        double text_size = c->format->text_size * scale_factor;
-        faces->set_character_sizes(text_size);
-
-        glyph_ptr glyph = faces->get_glyph(c->c);
-
-        if (glyph)
-        {
-            cairo_matrix_t matrix;
-            matrix.xx = text_size * std::cos(angle);
-            matrix.xy = text_size * std::sin(angle);
-            matrix.yx = text_size * -std::sin(angle);
-            matrix.yy = text_size * std::cos(angle);
-            matrix.x0 = 0;
-            matrix.y0 = 0;
-            set_font_matrix(matrix);
-            set_font_face(manager, glyph->get_face());
-            glyph_path(glyph->get_index(), sx + x, sy - y);
-            set_line_width(2.0 * c->format->halo_radius * scale_factor);
-            set_line_join(ROUND_JOIN);
-            set_color(c->format->halo_fill);
-            stroke();
-        }
-    }
-
-    path.rewind();
-
-    for (int iii = 0; iii < path.num_nodes(); iii++)
-    {
-        char_info_ptr c;
-        double x, y, angle;
-
-        path.vertex(c, x, y, angle);
-
-        face_set_ptr faces = font_manager.get_face_set(c->format->face_name, c->format->fontset);
-        double text_size = c->format->text_size * scale_factor;
-        faces->set_character_sizes(text_size);
-
-        glyph_ptr glyph = faces->get_glyph(c->c);
-
-        if (glyph)
-        {
-            cairo_matrix_t matrix;
-            matrix.xx = text_size * std::cos(angle);
-            matrix.xy = text_size * std::sin(angle);
-            matrix.yx = text_size * -std::sin(angle);
-            matrix.yy = text_size * std::cos(angle);
-            matrix.x0 = 0;
-            matrix.y0 = 0;
-            set_font_matrix(matrix);
-            set_font_face(manager, glyph->get_face());
-            set_color(c->format->fill);
-            show_glyph(glyph->get_index(), sx + x, sy - y);
-        }
-    }
-
-}
-}
diff --git a/src/cairo_renderer.cpp b/src/cairo_renderer.cpp
deleted file mode 100644
index d0305b5..0000000
--- a/src/cairo_renderer.cpp
+++ /dev/null
@@ -1,1303 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#if defined(HAVE_CAIRO)
-
-// mapnik
-#include <mapnik/rule.hpp>
-#include <mapnik/debug.hpp>
-#include <mapnik/layer.hpp>
-#include <mapnik/raster.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/proj_transform.hpp>
-#include <mapnik/feature_type_style.hpp>
-#include <mapnik/cairo_renderer.hpp>
-#include <mapnik/cairo_context.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/unicode.hpp>
-#include <mapnik/markers_placement.hpp>
-#include <mapnik/parse_path.hpp>
-#include <mapnik/marker.hpp>
-#include <mapnik/marker_cache.hpp>
-#include <mapnik/font_set.hpp>
-#include <mapnik/parse_path.hpp>
-#include <mapnik/map.hpp>
-#include <mapnik/svg/svg_path_adapter.hpp>
-#include <mapnik/svg/svg_path_attributes.hpp>
-#include <mapnik/segment.hpp>
-#include <mapnik/symbolizer_helpers.hpp>
-#include <mapnik/raster_colorizer.hpp>
-#include <mapnik/expression_evaluator.hpp>
-#include <mapnik/warp.hpp>
-#include <mapnik/config.hpp>
-#include <mapnik/text_path.hpp>
-#include <mapnik/vertex_converters.hpp>
-#include <mapnik/marker_helpers.hpp>
-#include <mapnik/noncopyable.hpp>
-#include <mapnik/pixel_position.hpp>
-
-// cairo
-#include <cairo.h>
-#include <cairo-ft.h>
-#include <cairo-version.h>
-
-// boost
-#include <boost/make_shared.hpp>
-#include <boost/math/special_functions/round.hpp>
-
-// agg
-#include "agg_conv_clip_polyline.h"
-#include "agg_conv_clip_polygon.h"
-#include "agg_conv_smooth_poly1.h"
-#include "agg_rendering_buffer.h"
-#include "agg_pixfmt_rgba.h"
-
-// markers
-#include "agg_path_storage.h"
-#include "agg_ellipse.h"
-
-// stl
-#include <deque>
-
-namespace mapnik
-{
-
-struct cairo_save_restore
-{
-    cairo_save_restore(cairo_context & context)
-        : context_(context)
-    {
-        context_.save();
-    }
-    ~cairo_save_restore()
-    {
-        context_.restore();
-    }
-    cairo_context & context_;
-};
-
-
-cairo_face_manager::cairo_face_manager(boost::shared_ptr<freetype_engine> engine)
-    : font_engine_(engine)
-{
-}
-
-cairo_face_ptr cairo_face_manager::get_face(face_ptr face)
-{
-    cairo_face_cache::iterator itr = cache_.find(face);
-    cairo_face_ptr entry;
-
-    if (itr != cache_.end())
-    {
-        entry = itr->second;
-    }
-    else
-    {
-        entry = boost::make_shared<cairo_face>(font_engine_, face);
-        cache_.insert(std::make_pair(face, entry));
-    }
-
-    return entry;
-}
-
-
-cairo_renderer_base::cairo_renderer_base(Map const& m,
-                                         cairo_ptr const& cairo,
-                                         double scale_factor,
-                                         unsigned offset_x,
-                                         unsigned offset_y)
-    : m_(m),
-      context_(cairo),
-      width_(m.width()),
-      height_(m.height()),
-      scale_factor_(scale_factor),
-      t_(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y),
-      font_engine_(boost::make_shared<freetype_engine>()),
-      font_manager_(*font_engine_),
-      face_manager_(font_engine_),
-      detector_(boost::make_shared<label_collision_detector4>(
-          box2d<double>(-m.buffer_size(), -m.buffer_size(),
-          m.width() + m.buffer_size(), m.height() + m.buffer_size())))
-{
-    setup(m);
-}
-
-cairo_renderer_base::cairo_renderer_base(Map const& m,
-                                         request const& req,
-                                         cairo_ptr const& cairo,
-                                         double scale_factor,
-                                         unsigned offset_x,
-                                         unsigned offset_y)
-    : m_(m),
-      context_(cairo),
-      width_(req.width()),
-      height_(req.height()),
-      scale_factor_(scale_factor),
-      t_(req.width(),req.height(),req.extent(),offset_x,offset_y),
-      font_engine_(boost::make_shared<freetype_engine>()),
-      font_manager_(*font_engine_),
-      face_manager_(font_engine_),
-      detector_(boost::make_shared<label_collision_detector4>(
-          box2d<double>(-req.buffer_size(), -req.buffer_size(),
-          req.width() + req.buffer_size(), req.height() + req.buffer_size())))
-{
-    setup(m);
-}
-
-cairo_renderer_base::cairo_renderer_base(Map const& m,
-                                         cairo_ptr const& cairo,
-                                         boost::shared_ptr<label_collision_detector4> detector,
-                                         double scale_factor,
-                                         unsigned offset_x,
-                                         unsigned offset_y)
-    : m_(m),
-      context_(cairo),
-      width_(m.width()),
-      height_(m.height()),
-      scale_factor_(scale_factor),
-      t_(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y),
-      font_engine_(boost::make_shared<freetype_engine>()),
-      font_manager_(*font_engine_),
-      face_manager_(font_engine_),
-      detector_(detector)
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: Scale=" << m.scale();
-}
-
-template <>
-cairo_renderer<cairo_ptr>::cairo_renderer(Map const& m, cairo_ptr const& cairo, double scale_factor, unsigned offset_x, unsigned offset_y)
-    : feature_style_processor<cairo_renderer>(m,scale_factor),
-      cairo_renderer_base(m,cairo,scale_factor,offset_x,offset_y) {}
-
-template <>
-cairo_renderer<cairo_surface_ptr>::cairo_renderer(Map const& m, cairo_surface_ptr const& surface, double scale_factor, unsigned offset_x, unsigned offset_y)
-    : feature_style_processor<cairo_renderer>(m,scale_factor),
-      cairo_renderer_base(m,create_context(surface),scale_factor,offset_x,offset_y) {}
-
-template <>
-cairo_renderer<cairo_ptr>::cairo_renderer(Map const& m, request const& req, cairo_ptr const& cairo, double scale_factor, unsigned offset_x, unsigned offset_y)
-    : feature_style_processor<cairo_renderer>(m,scale_factor),
-      cairo_renderer_base(m,req,cairo,scale_factor,offset_x,offset_y) {}
-
-template <>
-cairo_renderer<cairo_surface_ptr>::cairo_renderer(Map const& m, request const& req, cairo_surface_ptr const& surface, double scale_factor, unsigned offset_x, unsigned offset_y)
-    : feature_style_processor<cairo_renderer>(m,scale_factor),
-      cairo_renderer_base(m,req, create_context(surface),scale_factor,offset_x,offset_y) {}
-
-template <>
-cairo_renderer<cairo_ptr>::cairo_renderer(Map const& m, cairo_ptr const& cairo, boost::shared_ptr<label_collision_detector4> detector, double scale_factor, unsigned offset_x, unsigned offset_y)
-    : feature_style_processor<cairo_renderer>(m,scale_factor),
-      cairo_renderer_base(m,cairo,detector,scale_factor,offset_x,offset_y) {}
-
-template <>
-cairo_renderer<cairo_surface_ptr>::cairo_renderer(Map const& m, cairo_surface_ptr const& surface, boost::shared_ptr<label_collision_detector4> detector, double scale_factor, unsigned offset_x, unsigned offset_y)
-    : feature_style_processor<cairo_renderer>(m,scale_factor),
-      cairo_renderer_base(m,create_context(surface),detector,scale_factor,offset_x,offset_y) {}
-
-cairo_renderer_base::~cairo_renderer_base() {}
-
-void cairo_renderer_base::setup(Map const& map)
-{
-    boost::optional<color> bg = m_.background();
-    if (bg)
-    {
-        cairo_save_restore guard(context_);
-        context_.set_color(*bg);
-        context_.paint();
-    }
-    boost::optional<std::string> const& image_filename = map.background_image();
-    if (image_filename)
-    {
-        // NOTE: marker_cache returns premultiplied image, if needed
-        boost::optional<mapnik::marker_ptr> bg_marker = mapnik::marker_cache::instance().find(*image_filename,true);
-        if (bg_marker && (*bg_marker)->is_bitmap())
-        {
-            mapnik::image_ptr bg_image = *(*bg_marker)->get_bitmap_data();
-            int w = bg_image->width();
-            int h = bg_image->height();
-            if ( w > 0 && h > 0)
-            {
-                // repeat background-image both vertically and horizontally
-                unsigned x_steps = unsigned(std::ceil(width_/double(w)));
-                unsigned y_steps = unsigned(std::ceil(height_/double(h)));
-                for (unsigned x=0;x<x_steps;++x)
-                {
-                    for (unsigned y=0;y<y_steps;++y)
-                    {
-                        agg::trans_affine matrix = agg::trans_affine_translation(
-                                                       x*w,
-                                                       y*h);
-                        context_.add_image(matrix, *bg_image, 1.0f);
-                    }
-                }
-            }
-        }
-    }
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: Scale=" << map.scale();
-}
-
-void cairo_renderer_base::start_map_processing(Map const& map)
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: Start map processing bbox=" << map.get_current_extent();
-    box2d<double> bounds = t_.forward(t_.extent());
-    context_.rectangle(bounds.minx(), bounds.miny(), bounds.maxx(), bounds.maxy());
-    context_.clip();
-}
-
-template <>
-void cairo_renderer<cairo_ptr>::end_map_processing(Map const& )
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: End map processing";
-}
-
-template <>
-void cairo_renderer<cairo_surface_ptr>::end_map_processing(Map const& )
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: End map processing";
-
-    context_.show_page();
-}
-
-void cairo_renderer_base::start_layer_processing(layer const& lay, box2d<double> const& query_extent)
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: Start processing layer=" << lay.name() ;
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: -- datasource=" << lay.datasource().get();
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: -- query_extent=" << query_extent;
-
-    if (lay.clear_label_cache())
-    {
-        detector_->clear();
-    }
-    query_extent_ = query_extent;
-}
-
-void cairo_renderer_base::end_layer_processing(layer const&)
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer_base: End layer processing";
-}
-
-void cairo_renderer_base::start_style_processing(feature_type_style const& st)
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer:start style processing";
-}
-
-void cairo_renderer_base::end_style_processing(feature_type_style const& st)
-{
-    MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer:end style processing";
-}
-
-void cairo_renderer_base::process(polygon_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    cairo_save_restore guard(context_);
-    context_.set_operator(sym.comp_op());
-    context_.set_color(sym.get_fill(), sym.get_opacity());
-
-    agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
-
-    typedef boost::mpl::vector<clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag> conv_types;
-    vertex_converter<box2d<double>, cairo_context, polygon_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(query_extent_,context_,sym,t_,prj_trans,tr,1.0);
-
-    if (prj_trans.equal() && sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
-    converter.set<transform_tag>(); //always transform
-    converter.set<affine_transform_tag>();
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
-    {
-        if (geom.size() > 2)
-        {
-            converter.apply(geom);
-        }
-    }
-    // fill polygon
-    context_.fill();
-}
-
-void cairo_renderer_base::process(building_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    typedef coord_transform<CoordTransform,geometry_type> path_type;
-    cairo_save_restore guard(context_);
-    context_.set_operator(sym.comp_op());
-    color const& fill = sym.get_fill();
-    double height = 0.0;
-    expression_ptr height_expr = sym.height();
-    if (height_expr)
-    {
-        value_type result = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *height_expr);
-        height = result.to_double() * scale_factor_;
-    }
-
-    for (unsigned i = 0; i < feature.num_geometries(); ++i)
-    {
-        geometry_type const& geom = feature.get_geometry(i);
-
-        if (geom.size() > 2)
-        {
-            boost::scoped_ptr<geometry_type> frame(new geometry_type(LineString));
-            boost::scoped_ptr<geometry_type> roof(new geometry_type(Polygon));
-            std::deque<segment_t> face_segments;
-            double x0 = 0;
-            double y0 = 0;
-            double x, y;
-            geom.rewind(0);
-            for (unsigned cm = geom.vertex(&x, &y); cm != SEG_END;
-                 cm = geom.vertex(&x, &y))
-            {
-                if (cm == SEG_MOVETO)
-                {
-                    frame->move_to(x,y);
-                }
-                else if (cm == SEG_LINETO)
-                {
-                    frame->line_to(x,y);
-                    face_segments.push_back(segment_t(x0,y0,x,y));
-                }
-                else if (cm == SEG_CLOSE)
-                {
-                    frame->close_path();
-                }
-                x0 = x;
-                y0 = y;
-            }
-
-            std::sort(face_segments.begin(), face_segments.end(), y_order);
-            std::deque<segment_t>::const_iterator itr = face_segments.begin();
-            std::deque<segment_t>::const_iterator end=face_segments.end();
-            for (; itr != end; ++itr)
-            {
-                boost::scoped_ptr<geometry_type> faces(new geometry_type(Polygon));
-                faces->move_to(itr->get<0>(), itr->get<1>());
-                faces->line_to(itr->get<2>(), itr->get<3>());
-                faces->line_to(itr->get<2>(), itr->get<3>() + height);
-                faces->line_to(itr->get<0>(), itr->get<1>() + height);
-
-                path_type faces_path(t_, *faces, prj_trans);
-                context_.set_color(fill.red()  * 0.8 / 255.0, fill.green() * 0.8 / 255.0,
-                                  fill.blue() * 0.8 / 255.0, fill.alpha() * sym.get_opacity() / 255.0);
-                context_.add_path(faces_path);
-                context_.fill();
-
-                frame->move_to(itr->get<0>(), itr->get<1>());
-                frame->line_to(itr->get<0>(), itr->get<1>() + height);
-            }
-
-            geom.rewind(0);
-            for (unsigned cm = geom.vertex(&x, &y); cm != SEG_END;
-                 cm = geom.vertex(&x, &y))
-            {
-                if (cm == SEG_MOVETO)
-                {
-                    frame->move_to(x,y+height);
-                    roof->move_to(x,y+height);
-                }
-                else if (cm == SEG_LINETO)
-                {
-                    frame->line_to(x,y+height);
-                    roof->line_to(x,y+height);
-                }
-                else if (cm == SEG_CLOSE)
-                {
-                    frame->close_path();
-                    roof->close_path();
-                }
-            }
-
-            path_type path(t_, *frame, prj_trans);
-            context_.set_color(fill.red()  * 0.8 / 255.0, fill.green() * 0.8/255.0,
-                              fill.blue() * 0.8 / 255.0, fill.alpha() * sym.get_opacity() / 255.0);
-            context_.set_line_width(scale_factor_);
-            context_.add_path(path);
-            context_.stroke();
-
-            path_type roof_path(t_, *roof, prj_trans);
-            context_.set_color(fill, sym.get_opacity());
-            context_.add_path(roof_path);
-            context_.fill();
-        }
-    }
-}
-
-void cairo_renderer_base::process(line_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    typedef boost::mpl::vector<clip_line_tag, transform_tag,
-                               offset_transform_tag, affine_transform_tag,
-                               simplify_tag, smooth_tag, dash_tag, stroke_tag> conv_types;
-    cairo_save_restore guard(context_);
-    mapnik::stroke const& stroke_ = sym.get_stroke();
-    context_.set_operator(sym.comp_op());
-    context_.set_color(stroke_.get_color(), stroke_.get_opacity());
-    context_.set_line_join(stroke_.get_line_join());
-    context_.set_line_cap(stroke_.get_line_cap());
-    context_.set_miter_limit(stroke_.get_miterlimit());
-    context_.set_line_width(stroke_.get_width() * scale_factor_);
-    if (stroke_.has_dash())
-    {
-        context_.set_dash(stroke_.get_dash_array(), scale_factor_);
-    }
-
-    agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
-
-    box2d<double> clipping_extent = query_extent_;
-    if (sym.clip())
-    {
-        double padding = (double)(query_extent_.width()/width_);
-        double half_stroke = stroke_.get_width()/2.0;
-        if (half_stroke > 1)
-            padding *= half_stroke;
-        if (std::fabs(sym.offset()) > 0)
-            padding *= std::fabs(sym.offset()) * 1.2;
-        padding *= scale_factor_;
-        clipping_extent.pad(padding);
-    }
-    vertex_converter<box2d<double>, cairo_context, line_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(clipping_extent,context_,sym,t_,prj_trans,tr,scale_factor_);
-
-    if (sym.clip()) converter.set<clip_line_tag>(); // optional clip (default: true)
-    converter.set<transform_tag>(); // always transform
-    if (std::fabs(sym.offset()) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
-    converter.set<affine_transform_tag>(); // optional affine transform
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
-    {
-        if (geom.size() > 1)
-        {
-            converter.apply(geom);
-        }
-    }
-    // stroke
-    context_.stroke();
-}
-
-void cairo_renderer_base::render_box(box2d<double> const& b)
-{
-    cairo_save_restore guard(context_);
-    context_.move_to(b.minx(), b.miny());
-    context_.line_to(b.minx(), b.maxy());
-    context_.line_to(b.maxx(), b.maxy());
-    context_.line_to(b.maxx(), b.miny());
-    context_.close_path();
-    context_.stroke();
-}
-
-void render_vector_marker(cairo_context & context, pixel_position const& pos, mapnik::svg_storage_type & vmarker,
-                          agg::pod_bvector<svg::path_attributes> const & attributes,
-                          agg::trans_affine const& tr, double opacity, bool recenter)
-{
-    using namespace mapnik::svg;
-    box2d<double> bbox = vmarker.bounding_box();
-
-    agg::trans_affine mtx = tr;
-
-    if (recenter)
-    {
-        coord<double,2> c = bbox.center();
-        mtx = agg::trans_affine_translation(-c.x,-c.y);
-        mtx *= tr;
-        mtx.translate(pos.x, pos.y);
-    }
-
-    agg::trans_affine transform;
-
-    for(unsigned i = 0; i < attributes.size(); ++i)
-    {
-        mapnik::svg::path_attributes const& attr = attributes[i];
-        if (!attr.visibility_flag)
-            continue;
-        cairo_save_restore guard(context);
-        transform = attr.transform;
-        transform *= mtx;
-
-        // TODO - this 'is_valid' check is not used in the AGG renderer and also
-        // appears to lead to bogus results with
-        // tests/data/good_maps/markers_symbolizer_lines_file.xml
-        if (/*transform.is_valid() && */ !transform.is_identity())
-        {
-            double m[6];
-            transform.store_to(m);
-            cairo_matrix_t matrix;
-            cairo_matrix_init(&matrix,m[0],m[1],m[2],m[3],m[4],m[5]);
-            context.transform(matrix);
-        }
-
-        vertex_stl_adapter<svg_path_storage> stl_storage(vmarker.source());
-        svg_path_adapter svg_path(stl_storage);
-
-        if (attr.fill_flag || attr.fill_gradient.get_gradient_type() != NO_GRADIENT)
-        {
-            context.add_agg_path(svg_path,attr.index);
-            if (attr.even_odd_flag)
-            {
-                context.set_fill_rule(CAIRO_FILL_RULE_EVEN_ODD);
-            }
-            else
-            {
-                context.set_fill_rule(CAIRO_FILL_RULE_WINDING);
-            }
-            if(attr.fill_gradient.get_gradient_type() != NO_GRADIENT)
-            {
-                cairo_gradient g(attr.fill_gradient,attr.fill_opacity*opacity);
-
-                context.set_gradient(g,bbox);
-                context.fill();
-            }
-            else if(attr.fill_flag)
-            {
-                double fill_opacity = attr.fill_opacity * opacity * attr.fill_color.opacity();
-                context.set_color(attr.fill_color.r/255.0,attr.fill_color.g/255.0,
-                                  attr.fill_color.b/255.0, fill_opacity);
-                context.fill();
-            }
-        }
-
-        if (attr.stroke_gradient.get_gradient_type() != NO_GRADIENT || attr.stroke_flag)
-        {
-            context.add_agg_path(svg_path,attr.index);
-            if(attr.stroke_gradient.get_gradient_type() != NO_GRADIENT)
-            {
-                context.set_line_width(attr.stroke_width);
-                context.set_line_cap(line_cap_enum(attr.line_cap));
-                context.set_line_join(line_join_enum(attr.line_join));
-                context.set_miter_limit(attr.miter_limit);
-                cairo_gradient g(attr.stroke_gradient,attr.fill_opacity*opacity);
-                context.set_gradient(g,bbox);
-                context.stroke();
-            }
-            else if (attr.stroke_flag)
-            {
-                double stroke_opacity = attr.stroke_opacity * opacity * attr.stroke_color.opacity();
-                context.set_color(attr.stroke_color.r/255.0,attr.stroke_color.g/255.0,
-                                  attr.stroke_color.b/255.0, stroke_opacity);
-                context.set_line_width(attr.stroke_width);
-                context.set_line_cap(line_cap_enum(attr.line_cap));
-                context.set_line_join(line_join_enum(attr.line_join));
-                context.set_miter_limit(attr.miter_limit);
-                context.stroke();
-            }
-        }
-    }
-}
-
-
-void cairo_renderer_base::render_marker(pixel_position const& pos,
-                                        marker const& marker,
-                                        agg::trans_affine const& tr,
-                                        double opacity,
-                                        bool recenter)
-
-{
-    cairo_save_restore guard(context_);
-    if (marker.is_vector())
-    {
-        mapnik::svg_path_ptr vmarker = *marker.get_vector_data();
-        if (vmarker)
-        {
-            agg::trans_affine marker_tr = tr;
-            marker_tr *=agg::trans_affine_scaling(scale_factor_);
-            agg::pod_bvector<svg::path_attributes> const & attributes = vmarker->attributes();
-            render_vector_marker(context_, pos, *vmarker, attributes, marker_tr, opacity, recenter);
-        }
-    }
-    else if (marker.is_bitmap())
-    {
-        double width = (*marker.get_bitmap_data())->width();
-        double height = (*marker.get_bitmap_data())->height();
-        double cx = 0.5 * width;
-        double cy = 0.5 * height;
-        agg::trans_affine marker_tr;
-        marker_tr *= agg::trans_affine_translation(-cx,-cy);
-        marker_tr *= tr;
-        marker_tr *= agg::trans_affine_scaling(scale_factor_);
-        marker_tr *= agg::trans_affine_translation(pos.x,pos.y);
-        context_.add_image(marker_tr, **marker.get_bitmap_data(), opacity);
-    }
-}
-
-void cairo_renderer_base::process(point_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    std::string filename = path_processor_type::evaluate( *sym.get_filename(), feature);
-
-    boost::optional<marker_ptr> marker;
-    if ( !filename.empty() )
-    {
-        marker = marker_cache::instance().find(filename, true);
-    }
-    else
-    {
-        marker.reset(boost::make_shared<mapnik::marker>());
-    }
-
-
-    if (marker)
-    {
-        box2d<double> const& bbox = (*marker)->bounding_box();
-        coord2d center = bbox.center();
-
-        agg::trans_affine tr;
-        evaluate_transform(tr, feature, sym.get_image_transform());
-        agg::trans_affine_translation recenter(-center.x, -center.y);
-        agg::trans_affine recenter_tr = recenter * tr;
-        box2d<double> label_ext = bbox * recenter_tr * agg::trans_affine_scaling(scale_factor_);
-
-        for (unsigned i = 0; i < feature.num_geometries(); ++i)
-        {
-            geometry_type const& geom = feature.get_geometry(i);
-            double x;
-            double y;
-            double z = 0;
-
-            if (sym.get_point_placement() == CENTROID_POINT_PLACEMENT)
-            {
-                if (!label::centroid(geom, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::interior_position(geom ,x, y))
-                    return;
-            }
-
-            prj_trans.backward(x, y, z);
-            t_.forward(&x, &y);
-            label_ext.re_center(x,y);
-            if (sym.get_allow_overlap() ||
-                detector_->has_placement(label_ext))
-            {
-                render_marker(pixel_position(x,y),**marker, tr, sym.get_opacity());
-
-                if (!sym.get_ignore_placement())
-                    detector_->insert(label_ext);
-            }
-        }
-    }
-}
-
-void cairo_renderer_base::process(shield_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    shield_symbolizer_helper<face_manager<freetype_engine>,
-        label_collision_detector4> helper(
-            sym, feature, prj_trans,
-            width_, height_,
-            scale_factor_,
-            t_, font_manager_, *detector_, query_extent_);
-
-    cairo_save_restore guard(context_);
-    context_.set_operator(sym.comp_op());
-
-    while (helper.next())
-    {
-        placements_type const& placements = helper.placements();
-        for (unsigned int ii = 0; ii < placements.size(); ++ii)
-        {
-            pixel_position pos = helper.get_marker_position(placements[ii]);
-            pos.x += 0.5 * helper.get_marker_width();
-            pos.y += 0.5 * helper.get_marker_height();
-            render_marker(pos,
-                          helper.get_marker(),
-                          helper.get_image_transform(),
-                          sym.get_opacity());
-
-            context_.add_text(placements[ii], face_manager_, font_manager_, scale_factor_);
-        }
-    }
-}
-
-void cairo_renderer_base::process(line_pattern_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    typedef agg::conv_clip_polyline<geometry_type> clipped_geometry_type;
-    typedef coord_transform<CoordTransform,clipped_geometry_type> path_type;
-
-    std::string filename = path_processor_type::evaluate( *sym.get_filename(), feature);
-    boost::optional<mapnik::marker_ptr> marker = mapnik::marker_cache::instance().find(filename,true);
-    if (!marker && !(*marker)->is_bitmap()) return;
-
-    unsigned width((*marker)->width());
-    unsigned height((*marker)->height());
-
-    cairo_save_restore guard(context_);
-    context_.set_operator(sym.comp_op());
-    cairo_pattern pattern(**((*marker)->get_bitmap_data()));
-
-    pattern.set_extend(CAIRO_EXTEND_REPEAT);
-    pattern.set_filter(CAIRO_FILTER_BILINEAR);
-    context_.set_line_width(height * scale_factor_);
-
-    for (unsigned i = 0; i < feature.num_geometries(); ++i)
-    {
-        geometry_type & geom = feature.get_geometry(i);
-
-        if (geom.size() > 1)
-        {
-            clipped_geometry_type clipped(geom);
-            clipped.clip_box(query_extent_.minx(),query_extent_.miny(),query_extent_.maxx(),query_extent_.maxy());
-            path_type path(t_,clipped,prj_trans);
-
-            double length(0);
-            double x0(0), y0(0);
-            double x, y;
-
-            for (unsigned cm = path.vertex(&x, &y); cm != SEG_END; cm = path.vertex(&x, &y))
-            {
-                if (cm == SEG_MOVETO)
-                {
-                    length = 0.0;
-                }
-                else if (cm == SEG_LINETO)
-                {
-                    double dx = x - x0;
-                    double dy = y - y0;
-                    double angle = atan2(dy, dx);
-                    double offset = fmod(length, width);
-
-                    cairo_matrix_t matrix;
-                    cairo_matrix_init_identity(&matrix);
-                    cairo_matrix_translate(&matrix,x0,y0);
-                    cairo_matrix_rotate(&matrix,angle);
-                    cairo_matrix_translate(&matrix,-offset,0.5*height);
-                    cairo_matrix_invert(&matrix);
-
-                    pattern.set_matrix(matrix);
-
-                    context_.set_pattern(pattern);
-
-                    context_.move_to(x0, y0);
-                    context_.line_to(x, y);
-                    context_.stroke();
-
-                    length = length + hypot(x - x0, y - y0);
-                }
-
-                x0 = x;
-                y0 = y;
-            }
-        }
-    }
-}
-
-void cairo_renderer_base::process(polygon_pattern_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    typedef agg::conv_clip_polygon<geometry_type> clipped_geometry_type;
-    typedef coord_transform<CoordTransform,clipped_geometry_type> path_type;
-
-    cairo_save_restore guard(context_);
-    context_.set_operator(sym.comp_op());
-
-    std::string filename = path_processor_type::evaluate( *sym.get_filename(), feature);
-    boost::optional<mapnik::marker_ptr> marker = mapnik::marker_cache::instance().find(filename,true);
-    if (!marker && !(*marker)->is_bitmap()) return;
-
-    cairo_pattern pattern(**((*marker)->get_bitmap_data()));
-
-    pattern.set_extend(CAIRO_EXTEND_REPEAT);
-
-    context_.set_pattern(pattern);
-
-    //pattern_alignment_e align = sym.get_alignment();
-    //unsigned offset_x=0;
-    //unsigned offset_y=0;
-
-    //if (align == LOCAL_ALIGNMENT)
-    //{
-    //    double x0 = 0;
-    //    double y0 = 0;
-    //    if (feature.num_geometries() > 0)
-    //    {
-    //        clipped_geometry_type clipped(feature.get_geometry(0));
-    //        clipped.clip_box(query_extent_.minx(),query_extent_.miny(),query_extent_.maxx(),query_extent_.maxy());
-    //        path_type path(t_,clipped,prj_trans);
-    //        path.vertex(&x0,&y0);
-    //    }
-    //    offset_x = unsigned(width_ - x0);
-    //    offset_y = unsigned(height_ - y0);
-    //}
-
-    agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
-
-    typedef boost::mpl::vector<clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag> conv_types;
-    vertex_converter<box2d<double>, cairo_context, polygon_pattern_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(query_extent_,context_,sym,t_,prj_trans,tr, scale_factor_);
-
-    if (prj_trans.equal() && sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
-    converter.set<transform_tag>(); //always transform
-    converter.set<affine_transform_tag>();
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
-    {
-        if (geom.size() > 2)
-        {
-            converter.apply(geom);
-        }
-    }
-    // fill polygon
-    context_.fill();
-}
-
-void cairo_renderer_base::process(raster_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    raster_ptr const& source = feature.get_raster();
-    if (source)
-    {
-        // If there's a colorizer defined, use it to color the raster in-place
-        raster_colorizer_ptr colorizer = sym.get_colorizer();
-        if (colorizer)
-            colorizer->colorize(source,feature);
-
-        box2d<double> target_ext = box2d<double>(source->ext_);
-        prj_trans.backward(target_ext, PROJ_ENVELOPE_POINTS);
-        box2d<double> ext = t_.forward(target_ext);
-        int start_x = static_cast<int>(std::floor(ext.minx()+.5));
-        int start_y = static_cast<int>(std::floor(ext.miny()+.5));
-        int end_x = static_cast<int>(std::floor(ext.maxx()+.5));
-        int end_y = static_cast<int>(std::floor(ext.maxy()+.5));
-        int raster_width = end_x - start_x;
-        int raster_height = end_y - start_y;
-        if (raster_width > 0 && raster_height > 0)
-        {
-            raster target(target_ext, raster_width,raster_height);
-            scaling_method_e scaling_method = sym.get_scaling_method();
-            double filter_radius = sym.calculate_filter_factor();
-            bool premultiply_source = !source->premultiplied_alpha_;
-            boost::optional<bool> is_premultiplied = sym.premultiplied();
-            if (is_premultiplied)
-            {
-                if (*is_premultiplied) premultiply_source = false;
-                else premultiply_source = true;
-            }
-            if (premultiply_source)
-            {
-                agg::rendering_buffer buffer(source->data_.getBytes(),
-                                             source->data_.width(),
-                                             source->data_.height(),
-                                             source->data_.width() * 4);
-                agg::pixfmt_rgba32 pixf(buffer);
-                pixf.premultiply();
-            }
-            if (!prj_trans.equal())
-            {
-                double offset_x = ext.minx() - start_x;
-                double offset_y = ext.miny() - start_y;
-                reproject_and_scale_raster(target, *source, prj_trans,
-                                 offset_x, offset_y,
-                                 sym.get_mesh_size(),
-                                 filter_radius,
-                                 scaling_method);
-            }
-            else
-            {
-                if (scaling_method == SCALING_BILINEAR8)
-                {
-                    scale_image_bilinear8<image_data_32>(target.data_,
-                                                         source->data_,
-                                                         0.0,
-                                                         0.0);
-                }
-                else
-                {
-                    double image_ratio_x = ext.width() / source->data_.width();
-                    double image_ratio_y = ext.height() / source->data_.height();
-                    scale_image_agg<image_data_32>(target.data_,
-                                                   source->data_,
-                                                   scaling_method,
-                                                   image_ratio_x,
-                                                   image_ratio_y,
-                                                   0.0,
-                                                   0.0,
-                                                   filter_radius);
-                }
-            }
-            cairo_save_restore guard(context_);
-            context_.set_operator(sym.comp_op());
-            context_.add_image(start_x, start_y, target.data_, sym.get_opacity());
-        }
-    }
-}
-
-namespace detail {
-
-template <typename Context, typename SvgPath, typename Attributes, typename Detector>
-struct markers_dispatch
-{
-    markers_dispatch(Context & ctx,
-                     SvgPath & marker,
-                     Attributes const& attributes,
-                     Detector & detector,
-                     markers_symbolizer const& sym,
-                     box2d<double> const& bbox,
-                     agg::trans_affine const& marker_trans,
-                     double scale_factor)
-        :ctx_(ctx),
-         marker_(marker),
-         attributes_(attributes),
-         detector_(detector),
-         sym_(sym),
-         bbox_(bbox),
-         marker_trans_(marker_trans),
-         scale_factor_(scale_factor) {}
-
-
-    template <typename T>
-    void add_path(T & path)
-    {
-        marker_placement_e placement_method = sym_.get_marker_placement();
-
-        if (placement_method != MARKER_LINE_PLACEMENT ||
-            path.type() == Point)
-        {
-            double x = 0;
-            double y = 0;
-            if (path.type() == LineString)
-            {
-                if (!label::middle_point(path, x, y))
-                    return;
-            }
-            else if (placement_method == MARKER_INTERIOR_PLACEMENT)
-            {
-                if (!label::interior_position(path, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::centroid(path, x, y))
-                    return;
-            }
-            coord2d center = bbox_.center();
-            agg::trans_affine matrix = agg::trans_affine_translation(-center.x, -center.y);
-            matrix *= marker_trans_;
-            matrix *=agg::trans_affine_translation(x, y);
-
-            box2d<double> transformed_bbox = bbox_ * matrix;
-
-            if (sym_.get_allow_overlap() ||
-                detector_.has_placement(transformed_bbox))
-            {
-                render_vector_marker(ctx_, pixel_position(x,y), marker_, attributes_, marker_trans_, sym_.get_opacity(), true);
-
-                if (!sym_.get_ignore_placement())
-                {
-                    detector_.insert(transformed_bbox);
-                }
-            }
-        }
-        else
-        {
-            markers_placement<T, label_collision_detector4> placement(path, bbox_, marker_trans_, detector_,
-                                                                      sym_.get_spacing() * scale_factor_,
-                                                                      sym_.get_max_error(),
-                                                                      sym_.get_allow_overlap());
-            double x, y, angle;
-            while (placement.get_point(x, y, angle))
-            {
-                agg::trans_affine matrix = marker_trans_;
-                matrix.rotate(angle);
-                render_vector_marker(ctx_, pixel_position(x,y),marker_, attributes_, matrix, sym_.get_opacity(), true);
-
-            }
-        }
-    }
-
-    Context & ctx_;
-    SvgPath & marker_;
-    Attributes const& attributes_;
-    Detector & detector_;
-    markers_symbolizer const& sym_;
-    box2d<double> const& bbox_;
-    agg::trans_affine const& marker_trans_;
-    double scale_factor_;
-};
-
-template <typename Context, typename ImageMarker, typename Detector>
-struct markers_dispatch_2
-{
-    markers_dispatch_2(Context & ctx,
-                     ImageMarker & marker,
-                     Detector & detector,
-                     markers_symbolizer const& sym,
-                     box2d<double> const& bbox,
-                     agg::trans_affine const& marker_trans,
-                     double scale_factor)
-        :ctx_(ctx),
-         marker_(marker),
-         detector_(detector),
-         sym_(sym),
-         bbox_(bbox),
-         marker_trans_(marker_trans),
-         scale_factor_(scale_factor) {}
-
-
-    template <typename T>
-    void add_path(T & path)
-    {
-        marker_placement_e placement_method = sym_.get_marker_placement();
-
-        if (placement_method != MARKER_LINE_PLACEMENT ||
-            path.type() == Point)
-        {
-            double x = 0;
-            double y = 0;
-            if (path.type() == LineString)
-            {
-                if (!label::middle_point(path, x, y))
-                    return;
-            }
-            else if (placement_method == MARKER_INTERIOR_PLACEMENT)
-            {
-                if (!label::interior_position(path, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::centroid(path, x, y))
-                    return;
-            }
-            coord2d center = bbox_.center();
-            agg::trans_affine matrix = agg::trans_affine_translation(-center.x, -center.y);
-            matrix *= marker_trans_;
-            matrix *=agg::trans_affine_translation(x, y);
-
-            box2d<double> transformed_bbox = bbox_ * matrix;
-
-            if (sym_.get_allow_overlap() ||
-                detector_.has_placement(transformed_bbox))
-            {
-                ctx_.add_image(matrix, *marker_, sym_.get_opacity());
-                if (!sym_.get_ignore_placement())
-                {
-                    detector_.insert(transformed_bbox);
-                }
-            }
-        }
-        else
-        {
-            markers_placement<T, label_collision_detector4> placement(path, bbox_, marker_trans_, detector_,
-                                                                      sym_.get_spacing() * scale_factor_,
-                                                                      sym_.get_max_error(),
-                                                                      sym_.get_allow_overlap());
-            double x, y, angle;
-            while (placement.get_point(x, y, angle))
-            {
-                coord2d center = bbox_.center();
-                agg::trans_affine matrix = agg::trans_affine_translation(-center.x, -center.y);
-                matrix *= marker_trans_;
-                matrix *= agg::trans_affine_rotation(angle);
-                matrix *= agg::trans_affine_translation(x, y);
-                ctx_.add_image(matrix, *marker_, sym_.get_opacity());
-            }
-        }
-    }
-
-    Context & ctx_;
-    ImageMarker & marker_;
-    Detector & detector_;
-    markers_symbolizer const& sym_;
-    box2d<double> const& bbox_;
-    agg::trans_affine const& marker_trans_;
-    double scale_factor_;
-};
-
-}
-void cairo_renderer_base::process(markers_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    typedef boost::mpl::vector<clip_line_tag,clip_poly_tag,transform_tag,smooth_tag> conv_types;
-
-    cairo_save_restore guard(context_);
-    context_.set_operator(sym.comp_op());
-
-    agg::trans_affine tr = agg::trans_affine_scaling(scale_factor_);
-
-    std::string filename = path_processor_type::evaluate(*sym.get_filename(), feature);
-
-    if (!filename.empty())
-    {
-        boost::optional<marker_ptr> mark = mapnik::marker_cache::instance().find(filename, true);
-        if (mark && *mark)
-        {
-            agg::trans_affine geom_tr;
-            evaluate_transform(geom_tr, feature, sym.get_transform());
-            box2d<double> const& bbox = (*mark)->bounding_box();
-            setup_transform_scaling(tr, bbox.width(), bbox.height(), feature, sym);
-            evaluate_transform(tr, feature, sym.get_image_transform());
-
-            if ((*mark)->is_vector())
-            {
-                using namespace mapnik::svg;
-                typedef agg::pod_bvector<path_attributes> svg_attributes_type;
-                typedef detail::markers_dispatch<cairo_context, mapnik::svg_storage_type,
-                                             svg_attributes_type,label_collision_detector4> dispatch_type;
-
-                boost::optional<svg_path_ptr> const& stock_vector_marker = (*mark)->get_vector_data();
-
-                expression_ptr const& width_expr = sym.get_width();
-                expression_ptr const& height_expr = sym.get_height();
-
-                // special case for simple ellipse markers
-                // to allow for full control over rx/ry dimensions
-                if (filename == "shape://ellipse"
-                    && (width_expr || height_expr))
-                {
-                    svg_storage_type marker_ellipse;
-                    vertex_stl_adapter<svg_path_storage> stl_storage(marker_ellipse.source());
-                    svg_path_adapter svg_path(stl_storage);
-                    build_ellipse(sym, feature, marker_ellipse, svg_path);
-                    svg_attributes_type attributes;
-                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym);
-                    agg::trans_affine marker_tr = agg::trans_affine_scaling(scale_factor_);
-                    evaluate_transform(marker_tr, feature, sym.get_image_transform());
-                    box2d<double> new_bbox = marker_ellipse.bounding_box();
-
-                    dispatch_type dispatch(context_, marker_ellipse, result?attributes:(*stock_vector_marker)->attributes(),
-                                           *detector_, sym, new_bbox, marker_tr, scale_factor_);
-                    vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                        converter(query_extent_, dispatch, sym, t_, prj_trans, marker_tr, scale_factor_);
-
-                    if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                    {
-                        eGeomType type = feature.paths()[0].type();
-                        if (type == Polygon)
-                            converter.set<clip_poly_tag>();
-                        // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                        //else if (type == LineString)
-                        //    converter.template set<clip_line_tag>();
-                        // don't clip if type==Point
-                    }
-                    converter.set<transform_tag>(); //always transform
-                    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-                    apply_markers_multi(feature, converter, sym);
-                }
-                else
-                {
-                    svg_attributes_type attributes;
-                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym);
-
-                    dispatch_type dispatch(context_, **stock_vector_marker, result?attributes:(*stock_vector_marker)->attributes(),
-                                           *detector_, sym, bbox, tr, scale_factor_);
-                    vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                        converter(query_extent_, dispatch, sym, t_, prj_trans, tr, scale_factor_);
-
-                    if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                    {
-                        eGeomType type = feature.paths()[0].type();
-                        if (type == Polygon)
-                            converter.set<clip_poly_tag>();
-                        // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                        //else if (type == LineString)
-                        //    converter.template set<clip_line_tag>();
-                        // don't clip if type==Point
-                    }
-                    converter.set<transform_tag>(); //always transform
-                    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-                    apply_markers_multi(feature, converter, sym);
-                }
-            }
-            else // raster markers
-            {
-                typedef detail::markers_dispatch_2<cairo_context,
-                                                   mapnik::image_ptr,
-                                                   label_collision_detector4> dispatch_type;
-                boost::optional<mapnik::image_ptr> marker = (*mark)->get_bitmap_data();
-                if ( marker )
-                {
-                    dispatch_type dispatch(context_, *marker,
-                                           *detector_, sym, bbox, tr, scale_factor_);
-
-                    vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                        converter(query_extent_, dispatch, sym, t_, prj_trans, tr, scale_factor_);
-
-                    if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                    {
-                        eGeomType type = feature.paths()[0].type();
-                        if (type == Polygon)
-                            converter.set<clip_poly_tag>();
-                        // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                        //else if (type == LineString)
-                        //    converter.template set<clip_line_tag>();
-                        // don't clip if type==Point
-                    }
-                    converter.set<transform_tag>(); //always transform
-                    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-                    apply_markers_multi(feature, converter, sym);
-                }
-            }
-        }
-    }
-}
-
-void cairo_renderer_base::process(text_symbolizer const& sym,
-                                  mapnik::feature_impl & feature,
-                                  proj_transform const& prj_trans)
-{
-    text_symbolizer_helper<face_manager<freetype_engine>,
-        label_collision_detector4> helper(
-            sym, feature, prj_trans,
-            width_, height_,
-            scale_factor_,
-            t_, font_manager_, *detector_, query_extent_);
-
-    cairo_save_restore guard(context_);
-    context_.set_operator(sym.comp_op());
-
-    while (helper.next())
-    {
-        placements_type const& placements = helper.placements();
-        for (unsigned int ii = 0; ii < placements.size(); ++ii)
-        {
-            context_.add_text(placements[ii], face_manager_, font_manager_, scale_factor_);
-        }
-    }
-}
-
-template class cairo_renderer<cairo_surface_ptr>;
-template class cairo_renderer<cairo_ptr>;
-}
-
-#endif // HAVE_CAIRO
diff --git a/src/color.cpp b/src/color.cpp
index ebc7694..5cc33b7 100644
--- a/src/color.cpp
+++ b/src/color.cpp
@@ -29,8 +29,17 @@
 #include "agg_color_rgba.h"
 
 // boost
-#include <boost/format.hpp>
-
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/karma.hpp>
+#include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_fusion.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#pragma GCC diagnostic pop
+ 
 // stl
 #include <sstream>
 
@@ -43,42 +52,47 @@ color::color(std::string const& str)
 
 std::string color::to_string() const
 {
-    std::stringstream ss;
-    if (alpha_ == 255)
-    {
-        ss << "rgb("
-           << static_cast<unsigned>(red())   << ","
-           << static_cast<unsigned>(green()) << ","
-           << static_cast<unsigned>(blue())  << ")";
-    }
-    else
-    {
-        ss << "rgba("
-           << static_cast<unsigned>(red())   << ","
-           << static_cast<unsigned>(green()) << ","
-           << static_cast<unsigned>(blue()) << ","
-           << alpha() / 255.0 << ")";
-    }
-    return ss.str();
+    namespace karma = boost::spirit::karma;
+    boost::spirit::karma::_1_type _1;
+    boost::spirit::karma::eps_type eps;
+    boost::spirit::karma::double_type double_;
+    boost::spirit::karma::string_type kstring;
+    boost::spirit::karma::uint_generator<uint8_t,10> color_generator;
+    std::string str;
+    std::back_insert_iterator<std::string> sink(str);
+    karma::generate(sink,
+                    // begin grammar
+                    kstring[ boost::phoenix::if_(alpha()==255) [_1="rgb("].else_[_1="rgba("]]
+                    << color_generator[_1 = red()] << ','
+                    << color_generator[_1 = green()] << ','
+                    << color_generator[_1 = blue()]
+                    << kstring[ boost::phoenix::if_(alpha()==255) [_1 = ')'].else_[_1 =',']]
+                    << eps(alpha()<255) << double_ [_1 = alpha()/255.0]
+                    << ')'
+                    // end grammar
+        );
+    return str;
 }
 
 std::string color::to_hex_string() const
 {
-    if (alpha_ == 255 )
-    {
-        return (boost::format("#%1$02x%2$02x%3$02x")
-                % static_cast<unsigned>(red())
-                % static_cast<unsigned>(green())
-                % static_cast<unsigned>(blue())).str();
-    }
-    else
-    {
-        return (boost::format("#%1$02x%2$02x%3$02x%4$02x")
-                % static_cast<unsigned>(red())
-                % static_cast<unsigned>(green())
-                % static_cast<unsigned>(blue())
-                % static_cast<unsigned>(alpha())).str();
-    }
+    namespace karma = boost::spirit::karma;
+    boost::spirit::karma::_1_type _1;
+    boost::spirit::karma::hex_type hex;
+    boost::spirit::karma::eps_type eps;
+    boost::spirit::karma::right_align_type right_align;
+    std::string str;
+    std::back_insert_iterator<std::string> sink(str);
+    karma::generate(sink,
+                    // begin grammar
+                    '#'
+                    << right_align(2,'0')[hex[_1 = red()]]
+                    << right_align(2,'0')[hex[_1 = green()]]
+                    << right_align(2,'0')[hex[_1 = blue()]]
+                    << eps(alpha() < 255) <<  right_align(2,'0')[hex [_1 = alpha()]]
+                    // end grammar
+        );
+    return str;
 }
 
 void color::premultiply()
diff --git a/src/color_factory.cpp b/src/color_factory.cpp
index d9a1e69..c509c7f 100644
--- a/src/color_factory.cpp
+++ b/src/color_factory.cpp
@@ -26,51 +26,27 @@
 #include <mapnik/config_error.hpp>
 #include <mapnik/css_color_grammar.hpp>
 
-// boost
-#include <boost/format.hpp>
-#include <boost/version.hpp>
-
-// stl
-#include <sstream>
-
-
 namespace mapnik {
 
 color parse_color(std::string const& str)
 {
-    css_color_grammar<std::string::const_iterator> g;
-    return parse_color(str, g);
-}
-
-color parse_color(std::string const& str,
-                  css_color_grammar<std::string::const_iterator> const& g)
-{
+    // TODO - early return for @color?
+    static const css_color_grammar<std::string::const_iterator> g;
     color c;
-
     std::string::const_iterator first = str.begin();
     std::string::const_iterator last =  str.end();
-    
-    // boost 1.41 -> 1.44 compatibility, to be removed in mapnik 2.1 (dane)
-#if BOOST_VERSION >= 104500
+    boost::spirit::ascii::space_type space;
     bool result = boost::spirit::qi::phrase_parse(first, last, g,
-                                                  boost::spirit::ascii::space,
+                                                  space,
                                                   c);
-#else
-    mapnik::css css_;
-    bool result = boost::spirit::qi::phrase_parse(first, last, g,
-                                                  boost::spirit::ascii::space, 
-                                                  css_);
-    c.set_red(css_.r);
-    c.set_green(css_.g);
-    c.set_blue(css_.b);
-    c.set_alpha(css_.a);
-    
-#endif
-
     if (result && (first == last))
+    {
         return c;
+    }
     else
-        throw config_error( "Failed to parse color: \"" + str + "\"" );
+    {
+        throw config_error("Failed to a parse color: \"" + str + "\"");
+    }
 }
 
 }
diff --git a/src/config_error.cpp b/src/config_error.cpp
index c8889b1..8de7970 100644
--- a/src/config_error.cpp
+++ b/src/config_error.cpp
@@ -1,5 +1,5 @@
 #include <mapnik/config_error.hpp>
-#include <mapnik/xml_tree.hpp>
+#include <mapnik/xml_node.hpp>
 #include <mapnik/util/conversions.hpp>
 
 namespace mapnik
diff --git a/src/conversions.cpp b/src/conversions.cpp
index c4abfff..da79ae0 100644
--- a/src/conversions.cpp
+++ b/src/conversions.cpp
@@ -25,132 +25,100 @@
 #include <mapnik/value_types.hpp>
 
 #include <cstring>
+#include <algorithm>
 
+// karma is used by default
+#define MAPNIK_KARMA_TO_STRING
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
+#ifdef MAPNIK_KARMA_TO_STRING
+  #include <boost/spirit/include/karma.hpp>
+#endif
+#pragma GCC diagnostic pop
 
 #if _MSC_VER
 #define snprintf _snprintf
 #endif
 
-#define BOOST_SPIRIT_AUTO(domain_, name, expr)                  \
-    typedef boost::proto::result_of::                           \
-    deep_copy<BOOST_TYPEOF(expr)>::type name##_expr_type;       \
-    BOOST_SPIRIT_ASSERT_MATCH(                                  \
-        boost::spirit::domain_::domain, name##_expr_type);      \
-    BOOST_AUTO(name, boost::proto::deep_copy(expr));            \
-
-// karma is used by default unless
-// the boost version is too old
-#define MAPNIK_KARMA_TO_STRING
-
-#ifdef MAPNIK_KARMA_TO_STRING
-  #include <boost/version.hpp>
-  #if BOOST_VERSION < 104500
-    #undef MAPNIK_KARMA_TO_STRING
-  #else
-    #include <boost/spirit/include/karma.hpp>
-  #endif
-#endif
-
 namespace mapnik {
 
 namespace util {
 
 using namespace boost::spirit;
 
-BOOST_SPIRIT_AUTO(qi, INTEGER, qi::int_)
+auto INTEGER = qi::int_type();
 #ifdef BIGINT
-BOOST_SPIRIT_AUTO(qi, LONGLONG, qi::long_long)
+auto LONGLONG = qi::long_long_type();
 #endif
-BOOST_SPIRIT_AUTO(qi, FLOAT, qi::float_)
-BOOST_SPIRIT_AUTO(qi, DOUBLE, qi::double_)
-
-struct bool_symbols : qi::symbols<char,bool>
-{
-    bool_symbols()
-    {
-        add("true",true)
-            ("false",false)
-            ("yes",true)
-            ("no",false)
-            ("on",true)
-            ("off",false)
-            ("1",true)
-            ("0",false);
-    }
-};
-
-bool string2bool(const char * iter, const char * end, bool & result)
-{
-    using boost::spirit::qi::no_case;
-    bool r = qi::phrase_parse(iter,end, no_case[bool_symbols()] ,ascii::space,result);
-    return r && (iter == end);
-}
-
-bool string2bool(std::string const& value, bool & result)
-{
-    using boost::spirit::qi::no_case;
-    std::string::const_iterator str_beg = value.begin();
-    std::string::const_iterator str_end = value.end();
-    bool r = qi::phrase_parse(str_beg,str_end,no_case[bool_symbols()],ascii::space,result);
-    return r && (str_beg == str_end);
-}
+auto FLOAT = qi::float_type();
+auto DOUBLE = qi::double_type();
 
 bool string2int(const char * iter, const char * end, int & result)
 {
-    bool r = qi::phrase_parse(iter,end,INTEGER,ascii::space,result);
+    ascii::space_type space;
+    bool r = qi::phrase_parse(iter,end,INTEGER,space,result);
     return r && (iter == end);
 }
 
 bool string2int(std::string const& value, int & result)
 {
+    ascii::space_type space;
     std::string::const_iterator str_beg = value.begin();
     std::string::const_iterator str_end = value.end();
-    bool r = qi::phrase_parse(str_beg,str_end,INTEGER,ascii::space,result);
+    bool r = qi::phrase_parse(str_beg,str_end,INTEGER,space,result);
     return r && (str_beg == str_end);
 }
 
 #ifdef BIGINT
 bool string2int(const char * iter, const char * end, mapnik::value_integer & result)
 {
-    bool r = qi::phrase_parse(iter,end,LONGLONG,ascii::space,result);
+    ascii::space_type space;
+    bool r = qi::phrase_parse(iter,end,LONGLONG,space,result);
     return r && (iter == end);
 }
 
 bool string2int(std::string const& value, mapnik::value_integer & result)
 {
+    ascii::space_type space;
     std::string::const_iterator str_beg = value.begin();
     std::string::const_iterator str_end = value.end();
-    bool r = qi::phrase_parse(str_beg,str_end,LONGLONG,ascii::space,result);
+    bool r = qi::phrase_parse(str_beg,str_end,LONGLONG,space,result);
     return r && (str_beg == str_end);
 }
 #endif
 
 bool string2double(std::string const& value, double & result)
 {
+    ascii::space_type space;
     std::string::const_iterator str_beg = value.begin();
     std::string::const_iterator str_end = value.end();
-    bool r = qi::phrase_parse(str_beg,str_end,DOUBLE,ascii::space,result);
+    bool r = qi::phrase_parse(str_beg,str_end,DOUBLE,space,result);
     return r && (str_beg == str_end);
 }
 
 bool string2double(const char * iter, const char * end, double & result)
 {
-    bool r = qi::phrase_parse(iter,end,DOUBLE,ascii::space,result);
+    ascii::space_type space;
+    bool r = qi::phrase_parse(iter,end,DOUBLE,space,result);
     return r && (iter == end);
 }
 
 bool string2float(std::string const& value, float & result)
 {
+    ascii::space_type space;
     std::string::const_iterator str_beg = value.begin();
     std::string::const_iterator str_end = value.end();
-    bool r = qi::phrase_parse(str_beg,str_end,FLOAT,ascii::space,result);
+    bool r = qi::phrase_parse(str_beg,str_end,FLOAT,space,result);
     return r && (str_beg == str_end);
 }
 
 bool string2float(const char * iter, const char * end, float & result)
 {
-    bool r = qi::phrase_parse(iter,end,FLOAT,ascii::space,result);
+    ascii::space_type space;
+    bool r = qi::phrase_parse(iter,end,FLOAT,space,result);
     return r && (iter == end);
 }
 
diff --git a/src/css_color_grammar.cpp b/src/css_color_grammar.cpp
index df36b5d..a08e129 100644
--- a/src/css_color_grammar.cpp
+++ b/src/css_color_grammar.cpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2011 Artem Pavlenko
+ * Copyright (C) 2014 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,171 +20,12 @@
  *
  *****************************************************************************/
 
-// boost
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 104500
-
+// NOTE: we define this here in a cpp because def is needed twice:
+// once by src/color_factory.cpp and once by include/mapnik/image_filter_grammar.hpp
+// otherwise it would make sense to simply do `#include <mapnik/css_color_grammar_impl.hpp>`
+// in a single file
+#include <mapnik/color.hpp>
 #include <mapnik/css_color_grammar_impl.hpp>
-
-namespace mapnik
-{
-
-named_colors_::named_colors_()
-{
-    add
-        ("aliceblue", color(240, 248, 255))
-        ("antiquewhite", color(250, 235, 215))
-        ("aqua", color(0, 255, 255))
-        ("aquamarine", color(127, 255, 212))
-        ("azure", color(240, 255, 255))
-        ("beige", color(245, 245, 220))
-        ("bisque", color(255, 228, 196))
-        ("black", color(0, 0, 0))
-        ("blanchedalmond", color(255,235,205))
-        ("blue", color(0, 0, 255))
-        ("blueviolet", color(138, 43, 226))
-        ("brown", color(165, 42, 42))
-        ("burlywood", color(222, 184, 135))
-        ("cadetblue", color(95, 158, 160))
-        ("chartreuse", color(127, 255, 0))
-        ("chocolate", color(210, 105, 30))
-        ("coral", color(255, 127, 80))
-        ("cornflowerblue", color(100, 149, 237))
-        ("cornsilk", color(255, 248, 220))
-        ("crimson", color(220, 20, 60))
-        ("cyan", color(0, 255, 255))
-        ("darkblue", color(0, 0, 139))
-        ("darkcyan", color(0, 139, 139))
-        ("darkgoldenrod", color(184, 134, 11))
-        ("darkgray", color(169, 169, 169))
-        ("darkgreen", color(0, 100, 0))
-        ("darkgrey", color(169, 169, 169))
-        ("darkkhaki", color(189, 183, 107))
-        ("darkmagenta", color(139, 0, 139))
-        ("darkolivegreen", color(85, 107, 47))
-        ("darkorange", color(255, 140, 0))
-        ("darkorchid", color(153, 50, 204))
-        ("darkred", color(139, 0, 0))
-        ("darksalmon", color(233, 150, 122))
-        ("darkseagreen", color(143, 188, 143))
-        ("darkslateblue", color(72, 61, 139))
-        ("darkslategrey", color(47, 79, 79))
-        ("darkturquoise", color(0, 206, 209))
-        ("darkviolet", color(148, 0, 211))
-        ("deeppink", color(255, 20, 147))
-        ("deepskyblue", color(0, 191, 255))
-        ("dimgray", color(105, 105, 105))
-        ("dimgrey", color(105, 105, 105))
-        ("dodgerblue", color(30, 144, 255))
-        ("firebrick", color(178, 34, 34))
-        ("floralwhite", color(255, 250, 240))
-        ("forestgreen", color(34, 139, 34))
-        ("fuchsia", color(255, 0, 255))
-        ("gainsboro", color(220, 220, 220))
-        ("ghostwhite", color(248, 248, 255))
-        ("gold", color(255, 215, 0))
-        ("goldenrod", color(218, 165, 32))
-        ("gray", color(128, 128, 128))
-        ("grey", color(128, 128, 128))
-        ("green", color(0, 128, 0))
-        ("greenyellow", color(173, 255, 47))
-        ("honeydew", color(240, 255, 240))
-        ("hotpink", color(255, 105, 180))
-        ("indianred", color(205, 92, 92))
-        ("indigo", color(75, 0, 130))
-        ("ivory", color(255, 255, 240))
-        ("khaki", color(240, 230, 140))
-        ("lavender", color(230, 230, 250))
-        ("lavenderblush", color(255, 240, 245))
-        ("lawngreen", color(124, 252, 0))
-        ("lemonchiffon", color(255, 250, 205))
-        ("lightblue", color(173, 216, 230))
-        ("lightcoral", color(240, 128, 128))
-        ("lightcyan", color(224, 255, 255))
-        ("lightgoldenrodyellow", color(250, 250, 210))
-        ("lightgray", color(211, 211, 211))
-        ("lightgreen", color(144, 238, 144))
-        ("lightgrey", color(211, 211, 211))
-        ("lightpink", color(255, 182, 193))
-        ("lightsalmon", color(255, 160, 122))
-        ("lightseagreen", color(32, 178, 170))
-        ("lightskyblue", color(135, 206, 250))
-        ("lightslategray", color(119, 136, 153))
-        ("lightslategrey", color(119, 136, 153))
-        ("lightsteelblue", color(176, 196, 222))
-        ("lightyellow", color(255, 255, 224))
-        ("lime", color(0, 255, 0))
-        ("limegreen", color(50, 205, 50))
-        ("linen", color(250, 240, 230))
-        ("magenta", color(255, 0, 255))
-        ("maroon", color(128, 0, 0))
-        ("mediumaquamarine", color(102, 205, 170))
-        ("mediumblue", color(0, 0, 205))
-        ("mediumorchid", color(186, 85, 211))
-        ("mediumpurple", color(147, 112, 219))
-        ("mediumseagreen", color(60, 179, 113))
-        ("mediumslateblue", color(123, 104, 238))
-        ("mediumspringgreen", color(0, 250, 154))
-        ("mediumturquoise", color(72, 209, 204))
-        ("mediumvioletred", color(199, 21, 133))
-        ("midnightblue", color(25, 25, 112))
-        ("mintcream", color(245, 255, 250))
-        ("mistyrose", color(255, 228, 225))
-        ("moccasin", color(255, 228, 181))
-        ("navajowhite", color(255, 222, 173))
-        ("navy", color(0, 0, 128))
-        ("oldlace", color(253, 245, 230))
-        ("olive", color(128, 128, 0))
-        ("olivedrab", color(107, 142, 35))
-        ("orange", color(255, 165, 0))
-        ("orangered", color(255, 69, 0))
-        ("orchid", color(218, 112, 214))
-        ("palegoldenrod", color(238, 232, 170))
-        ("palegreen", color(152, 251, 152))
-        ("paleturquoise", color(175, 238, 238))
-        ("palevioletred", color(219, 112, 147))
-        ("papayawhip", color(255, 239, 213))
-        ("peachpuff", color(255, 218, 185))
-        ("peru", color(205, 133, 63))
-        ("pink", color(255, 192, 203))
-        ("plum", color(221, 160, 221))
-        ("powderblue", color(176, 224, 230))
-        ("purple", color(128, 0, 128))
-        ("red", color(255, 0, 0))
-        ("rosybrown", color(188, 143, 143))
-        ("royalblue", color(65, 105, 225))
-        ("saddlebrown", color(139, 69, 19))
-        ("salmon", color(250, 128, 114))
-        ("sandybrown", color(244, 164, 96))
-        ("seagreen", color(46, 139, 87))
-        ("seashell", color(255, 245, 238))
-        ("sienna", color(160, 82, 45))
-        ("silver", color(192, 192, 192))
-        ("skyblue", color(135, 206, 235))
-        ("slateblue", color(106, 90, 205))
-        ("slategray", color(112, 128, 144))
-        ("slategrey", color(112, 128, 144))
-        ("snow", color(255, 250, 250))
-        ("springgreen", color(0, 255, 127))
-        ("steelblue", color(70, 130, 180))
-        ("tan", color(210, 180, 140))
-        ("teal", color(0, 128, 128))
-        ("thistle", color(216, 191, 216))
-        ("tomato", color(255, 99, 71))
-        ("turquoise", color(64, 224, 208))
-        ("violet", color(238, 130, 238))
-        ("wheat", color(245, 222, 179))
-        ("white", color(255, 255, 255))
-        ("whitesmoke", color(245, 245, 245))
-        ("yellow", color(255, 255, 0))
-        ("yellowgreen", color(154, 205, 50))
-        ("transparent", color(0, 0, 0, 0))
-        ;
-}
+#include <string>
 
 template struct mapnik::css_color_grammar<std::string::const_iterator>;
-
-}
-
-#endif
diff --git a/src/dasharray_parser.cpp b/src/dasharray_parser.cpp
new file mode 100644
index 0000000..6d432de
--- /dev/null
+++ b/src/dasharray_parser.cpp
@@ -0,0 +1,69 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/util/dasharray_parser.hpp>
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#pragma GCC diagnostic pop
+
+namespace mapnik {
+
+namespace util {
+
+bool parse_dasharray(std::string const& value, std::vector<double>& dasharray)
+{
+    using namespace boost::spirit;
+    qi::double_type double_;
+    qi::_1_type _1;
+    qi::lit_type lit;
+    qi::char_type char_;
+    qi::ascii::space_type space;
+    qi::no_skip_type no_skip;
+    // SVG
+    // dasharray ::= (length | percentage) (comma-wsp dasharray)?
+    // no support for 'percentage' as viewport is unknown at load_map
+    //
+    auto first = value.begin();
+    auto last = value.end();
+    bool r = qi::phrase_parse(first, last,
+                          (double_[boost::phoenix::push_back(boost::phoenix::ref(dasharray), _1)] %
+                          no_skip[char_(", ")]
+                          | lit("none")),
+                          space);
+    if (first != last)
+    {
+        return false;
+    }
+    return r;
+}
+
+} // end namespace util
+
+} // end namespace mapnik
diff --git a/src/datasource_cache.cpp b/src/datasource_cache.cpp
index 9773bb2..cafb8c9 100644
--- a/src/datasource_cache.cpp
+++ b/src/datasource_cache.cpp
@@ -22,16 +22,22 @@
 
 // mapnik
 #include <mapnik/debug.hpp>
+#include <mapnik/datasource.hpp>
 #include <mapnik/datasource_cache.hpp>
 #include <mapnik/config_error.hpp>
 #include <mapnik/params.hpp>
 #include <mapnik/plugin.hpp>
 #include <mapnik/util/fs.hpp>
+#include <mapnik/utils.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/filesystem/operations.hpp>
-#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/join.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <algorithm>
@@ -40,6 +46,8 @@
 
 namespace mapnik {
 
+template class singleton<datasource_cache, CreateStatic>;
+
 extern datasource_ptr create_static_datasource(parameters const& params);
 extern std::vector<std::string> get_static_datasource_names();
 
@@ -78,24 +86,27 @@ datasource_ptr datasource_cache::create(parameters const& params)
     }
 #endif
 
+    std::map<std::string,std::shared_ptr<PluginInfo> >::iterator itr;
+    // add scope to ensure lock is released asap
+    {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
 #endif
-
-    std::map<std::string,boost::shared_ptr<PluginInfo> >::iterator itr=plugins_.find(*type);
-    if (itr == plugins_.end())
-    {
-        std::string s("Could not create datasource for type: '");
-        s += *type + "'";
-        if (plugin_directories_.empty())
+        itr=plugins_.find(*type);
+        if (itr == plugins_.end())
         {
-            s + " (no datasource plugin directories have been successfully registered)";
-        }
-        else
-        {
-            s + " (searched for datasource plugins in '" + plugin_directories() + "')";
+            std::string s("Could not create datasource for type: '");
+            s += *type + "'";
+            if (plugin_directories_.empty())
+            {
+                s += " (no datasource plugin directories have been successfully registered)";
+            }
+            else
+            {
+                s += " (searched for datasource plugins in '" + plugin_directories() + "')";
+            }
+            throw config_error(s);
         }
-        throw config_error(s);
     }
 
     if (! itr->second->valid())
@@ -108,7 +119,7 @@ datasource_ptr datasource_cache::create(parameters const& params)
 #ifdef __GNUC__
     __extension__
 #endif
-        create_ds* create_datasource = reinterpret_cast<create_ds*>(itr->second->get_symbol("create"));
+        create_ds create_datasource = reinterpret_cast<create_ds>(itr->second->get_symbol("create"));
 
     if (! create_datasource)
     {
@@ -118,24 +129,6 @@ datasource_ptr datasource_cache::create(parameters const& params)
 
     ds = datasource_ptr(create_datasource(params), datasource_deleter());
 
-#ifdef MAPNIK_LOG
-    MAPNIK_LOG_DEBUG(datasource_cache)
-        << "datasource_cache: Datasource="
-        << ds << " type=" << type;
-
-    MAPNIK_LOG_DEBUG(datasource_cache)
-        << "datasource_cache: Size="
-        << params.size();
-
-    parameters::const_iterator i = params.begin();
-    for (; i != params.end(); ++i)
-    {
-        MAPNIK_LOG_DEBUG(datasource_cache)
-            << "datasource_cache: -- "
-            << i->first << "=" << i->second;
-    }
-#endif
-
     return ds;
 }
 
@@ -152,7 +145,7 @@ std::vector<std::string> datasource_cache::plugin_names()
     names = get_static_datasource_names();
 #endif
 
-    std::map<std::string,boost::shared_ptr<PluginInfo> >::const_iterator itr;
+    std::map<std::string,std::shared_ptr<PluginInfo> >::const_iterator itr;
     for (itr = plugins_.begin(); itr != plugins_.end(); ++itr)
     {
         names.push_back(itr->first);
@@ -161,44 +154,75 @@ std::vector<std::string> datasource_cache::plugin_names()
     return names;
 }
 
-void datasource_cache::register_datasources(std::string const& str)
+bool datasource_cache::register_datasources(std::string const& dir, bool recurse)
 {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
-    // TODO - only push unique paths
-    plugin_directories_.push_back(str);
-    if (mapnik::util::exists(str) && mapnik::util::is_directory(str))
+    if (!mapnik::util::exists(dir))
+    {
+        return false;
+    }
+    plugin_directories_.insert(dir);
+    if (!mapnik::util::is_directory(dir))
+    {
+        return register_datasource(dir);
+    }
+    bool success = false;
+    try
     {
         boost::filesystem::directory_iterator end_itr;
-        for (boost::filesystem::directory_iterator itr(str); itr != end_itr; ++itr )
+#ifdef _WINDOWS
+        std::wstring wide_dir(mapnik::utf8_to_utf16(dir));
+        for (boost::filesystem::directory_iterator itr(wide_dir); itr != end_itr; ++itr)
         {
-
-#if (BOOST_FILESYSTEM_VERSION == 3)
-            if (!boost::filesystem::is_directory(*itr) && is_input_plugin(itr->path().filename().string()))
-#else // v2
-            if (!boost::filesystem::is_directory(*itr) && is_input_plugin(itr->path().leaf()))
+            std::string file_name = mapnik::utf16_to_utf8(itr->path().wstring());
+#else
+        for (boost::filesystem::directory_iterator itr(dir); itr != end_itr; ++itr)
+        {
+            std::string file_name = itr->path().string();
 #endif
+            if (boost::filesystem::is_directory(*itr) && recurse)
             {
-#if (BOOST_FILESYSTEM_VERSION == 3)
-                if (register_datasource(itr->path().string()))
-#else // v2
-                if (register_datasource(itr->string()))
-#endif
+                if (register_datasources(file_name, true))
                 {
-                    registered_ = true;
+                    success = true;
+                }
+            }
+            else
+            {
+                std::string base_name = itr->path().filename().string();
+                if (!boost::algorithm::starts_with(base_name,".") &&
+                    mapnik::util::is_regular_file(file_name) &&
+                    is_input_plugin(file_name))
+                {
+                    if (register_datasource(file_name))
+                    {
+                        success = true;
+                    }
                 }
             }
         }
     }
+    catch (std::exception const& ex)
+    {
+        MAPNIK_LOG_ERROR(datasource_cache) << "register_datasources: " << ex.what();
+    }
+    return success;
 }
 
 bool datasource_cache::register_datasource(std::string const& filename)
 {
-    bool success = false;
     try
     {
-        boost::shared_ptr<PluginInfo> plugin = boost::make_shared<PluginInfo>(filename,"datasource_name");
+        if (!mapnik::util::exists(filename))
+        {
+            MAPNIK_LOG_ERROR(datasource_cache)
+                    << "Cannot load '"
+                    << filename << "' (plugin does not exist)";
+            return false;
+        }
+        std::shared_ptr<PluginInfo> plugin = std::make_shared<PluginInfo>(filename,"datasource_name");
         if (plugin->valid())
         {
             if (plugin->name().empty())
@@ -209,11 +233,13 @@ bool datasource_cache::register_datasource(std::string const& filename)
             }
             else
             {
-                plugins_.insert(std::make_pair(plugin->name(),plugin));
-                MAPNIK_LOG_DEBUG(datasource_cache)
-                        << "datasource_cache: Registered="
-                        << plugin->name();
-                success = true;
+                if (plugins_.emplace(plugin->name(),plugin).second)
+                {
+                    MAPNIK_LOG_DEBUG(datasource_cache)
+                            << "datasource_cache: Registered="
+                            << plugin->name();
+                    return true;
+                }
             }
         }
         else
@@ -229,7 +255,7 @@ bool datasource_cache::register_datasource(std::string const& filename)
                 << "Exception caught while loading plugin library: "
                 << filename << " (" << ex.what() << ")";
     }
-    return success;
+    return false;
 }
 
 }
diff --git a/src/datasource_cache_static.cpp b/src/datasource_cache_static.cpp
index 3d7e4b5..459460a 100644
--- a/src/datasource_cache_static.cpp
+++ b/src/datasource_cache_static.cpp
@@ -22,12 +22,12 @@
 
 // mapnik
 #include <mapnik/datasource_cache.hpp>
+#include <mapnik/datasource.hpp>
 
 #ifdef MAPNIK_STATIC_PLUGINS
 #include <mapnik/params.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 #include <boost/unordered_map.hpp>
 #include <boost/assign/list_of.hpp>
 #endif
@@ -87,11 +87,11 @@ namespace mapnik {
 template<typename T>
 datasource_ptr ds_generator(parameters const& params)
 {
-    return boost::make_shared<T>(params);
+    return std::make_shared<T>(params);
 }
 
-typedef datasource_ptr (*ds_generator_ptr)(parameters const& params);
-typedef boost::unordered_map<std::string, ds_generator_ptr> datasource_map;
+using params) = datasource_ptr (*ds_generator_ptr)(parameters const&;
+using datasource_map = boost::unordered_map<std::string, ds_generator_ptr>;
 
 static datasource_map ds_map = boost::assign::map_list_of
     #if defined(MAPNIK_STATIC_PLUGIN_CSV)
@@ -133,23 +133,24 @@ static datasource_map ds_map = boost::assign::map_list_of
 ;
 #endif
 
+#ifdef MAPNIK_STATIC_PLUGINS
 datasource_ptr create_static_datasource(parameters const& params)
 {
     datasource_ptr ds;
-
-#ifdef MAPNIK_STATIC_PLUGINS
     boost::optional<std::string> type = params.get<std::string>("type");
-
     datasource_map::iterator it = ds_map.find(*type);
-
     if (it != ds_map.end())
     {
         ds = it->second(params);
     }
-#endif
-
     return ds;
 }
+#else
+datasource_ptr create_static_datasource(parameters const& /*params*/)
+{
+    return datasource_ptr();
+}
+#endif
 
 std::vector<std::string> get_static_datasource_names()
 {
diff --git a/src/debug.cpp b/src/debug.cpp
index f9a04fb..44a1250 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -26,6 +26,7 @@
 // stl
 #include <ctime>
 #include <stdexcept>
+#include <fstream>
 
 #ifndef MAPNIK_LOG_FORMAT
   #define MAPNIK_LOG_FORMAT  Mapnik LOG> %Y-%m-%d %H:%M:%S:
@@ -44,8 +45,8 @@ namespace mapnik {
 // mutexes
 
 #ifdef MAPNIK_THREADSAFE
-boost::mutex logger::severity_mutex_;
-boost::mutex logger::format_mutex_;
+std::mutex logger::severity_mutex_;
+std::mutex logger::format_mutex_;
 #endif
 
 
@@ -91,7 +92,7 @@ std::string logger::str()
         logger::format_env_check_ = false;
 
         const char* log_format = getenv("MAPNIK_LOG_FORMAT");
-        if (log_format != NULL)
+        if (log_format != nullptr)
         {
             logger::format_ = log_format;
         }
@@ -137,7 +138,7 @@ void logger::use_file(std::string const& filepath)
         else
         {
             std::stringstream s;
-            s << "cannot redirect log to file " << file_output_;
+            s << "cannot redirect log to file " << file_name_;
             throw std::runtime_error(s.str());
         }
     }
diff --git a/src/debug_symbolizer.cpp b/src/debug_symbolizer.cpp
deleted file mode 100644
index 1b064db..0000000
--- a/src/debug_symbolizer.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2013 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/debug_symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-static const char * debug_symbolizer_mode_strings[] = {
-    "collision",
-    "vertex",
-    ""
-};
-
-IMPLEMENT_ENUM( debug_symbolizer_mode_e, debug_symbolizer_mode_strings )
-
-debug_symbolizer::debug_symbolizer()
-: symbolizer_base(),
-  mode_(DEBUG_SYM_MODE_COLLISION) {}
-
-debug_symbolizer::debug_symbolizer(debug_symbolizer const& rhs)
-    : symbolizer_base(rhs),
-      mode_(rhs.mode_) {}
-
-debug_symbolizer_mode_e debug_symbolizer::get_mode() const
-{
-    return mode_;
-}
-
-void debug_symbolizer::set_mode(debug_symbolizer_mode_e mode)
-{
-    mode_ = mode;
-}
-
-}
-
diff --git a/src/deepcopy.cpp b/src/deepcopy.cpp
deleted file mode 100644
index 3460da5..0000000
--- a/src/deepcopy.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/feature_type_style.hpp>
-#include <mapnik/map.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/layer.hpp>
-#include <mapnik/params.hpp>
-#include <mapnik/datasource_cache.hpp>
-#include <mapnik/util/deepcopy.hpp>
-#include <mapnik/rule.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/building_symbolizer.hpp>
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/line_pattern_symbolizer.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
-#include <mapnik/point_symbolizer.hpp>
-#include <mapnik/raster_symbolizer.hpp>
-#include <mapnik/shield_symbolizer.hpp>
-#include <mapnik/text_symbolizer.hpp>
-#include <mapnik/markers_symbolizer.hpp>
-#include <mapnik/debug_symbolizer.hpp>
-
-// boost
-#include <boost/optional.hpp>
-#include <boost/foreach.hpp>
-
-
-namespace mapnik { namespace util {
-
-// poor man's deepcopy implementation
-
-    void deepcopy(Map const& map_in, Map & map_out)
-    {
-//  *   width_(rhs.width_),
-//  *   height_(rhs.height_),
-//  *   srs_(rhs.srs_),
-//  *   buffer_size_(rhs.buffer_size_),
-//  *   background_(rhs.background_),
-//  *   background_image_(rhs.background_image_),
-//  *   styles_(rhs.styles_),
-//      fontsets_(rhs.fontsets_),
-//  *   layers_(rhs.layers_),
-//      aspectFixMode_(rhs.aspectFixMode_),
-//      current_extent_(rhs.current_extent_),
-//  *   maximum_extent_(rhs.maximum_extent_),
-//  *   base_path_(rhs.base_path_),
-//      extra_attr_(rhs.extra_attr_),
-//      extra_params_(rhs.extra_params_)
-
-        // width, height
-        map_out.resize(map_in.width(), map_in.height());
-        // srs
-        map_out.set_srs(map_in.srs());
-        // buffer_size
-        map_out.set_buffer_size(map_in.buffer_size());
-        // background
-        boost::optional<color> background = map_in.background();
-        if  (background)
-        {
-            map_out.set_background(*background);
-        }
-        // background_image
-        boost::optional<std::string> background_image = map_in.background_image();
-        if (background_image)
-        {
-            map_out.set_background_image(*background_image);
-        }
-        // maximum extent
-        boost::optional<box2d<double> > max_extent = map_in.maximum_extent();
-        if (max_extent)
-        {
-            map_out.set_maximum_extent(*max_extent);
-        }
-        // base_path
-        map_out.set_base_path(map_in.base_path());
-
-        // fontsets
-        typedef std::map<std::string,font_set> fontsets;
-        BOOST_FOREACH ( fontsets::value_type const& kv,map_in.fontsets())
-        {
-            map_out.insert_fontset(kv.first,kv.second);
-        }
-
-        BOOST_FOREACH ( layer const& lyr_in, map_in.layers())
-        {
-            layer lyr_out(lyr_in);
-            datasource_ptr ds_in = lyr_in.datasource();
-            if (ds_in)
-            {
-                parameters p(ds_in->params());
-
-                // TODO : re-use datasource extent if already set.
-                datasource_ptr ds_out = datasource_cache::instance().create(p);
-                if (ds_out)
-                {
-                    lyr_out.set_datasource(ds_out);
-                }
-            }
-            map_out.addLayer(lyr_out);
-        }
-        typedef std::map<std::string, feature_type_style> style_cont;
-        typedef style_cont::value_type value_type;
-
-        style_cont const& styles = map_in.styles();
-        BOOST_FOREACH ( value_type const& kv, styles )
-        {
-            feature_type_style const& style_in = kv.second;
-            feature_type_style style_out(style_in,true); // deep copy
-            map_out.insert_style(kv.first, style_out);
-        }
-    }
-
-}}
diff --git a/src/distance.cpp b/src/distance.cpp
deleted file mode 100644
index 8c24fda..0000000
--- a/src/distance.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/distance.hpp>
-#include <mapnik/ellipsoid.hpp>
-
-// stl
-#include <cmath>
-
-namespace mapnik {
-
-static const double deg2rad = 0.0174532925199432958;
-static const double R = 6372795.0; // average great-circle radius of the earth
-
-double great_circle_distance::operator() (coord2d const& pt0,
-                                          coord2d const& pt1) const
-{
-    double lon0 = pt0.x * deg2rad;
-    double lat0 = pt0.y * deg2rad;
-    double lon1 = pt1.x * deg2rad;
-    double lat1 = pt1.y * deg2rad;
-
-    double dlat = lat1 - lat0;
-    double dlon = lon1 - lon0;
-
-    double sin_dlat = std::sin(0.5 * dlat);
-    double sin_dlon = std::sin(0.5 * dlon);
-
-    double a = std::pow(sin_dlat,2.0) + std::cos(lat0)*std::cos(lat1)*std::pow(sin_dlon,2.0);
-    double c = 2 * std::atan2(std::sqrt(a),std::sqrt(1 - a));
-    return R * c;
-}
-}
diff --git a/src/expression.cpp b/src/expression.cpp
index 44629de..3f01fe2 100644
--- a/src/expression.cpp
+++ b/src/expression.cpp
@@ -26,35 +26,28 @@
 #include <mapnik/unicode.hpp>
 #include <mapnik/expression_node_types.hpp>
 #include <mapnik/expression_grammar.hpp>
-#include <boost/spirit/include/qi.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
+#include <boost/spirit/include/qi.hpp>
 
 namespace mapnik
 {
 
-expression_ptr parse_expression(std::string const& str, std::string const& encoding)
-{
-    transcoder tr(encoding);
-    expression_grammar<std::string::const_iterator> g(tr);
-    return parse_expression(str, g);
-}
-
-expression_ptr parse_expression(std::string const& str,
-                                mapnik::expression_grammar<std::string::const_iterator> const& g)
+expression_ptr parse_expression(std::string const& str)
 {
-    expr_node node;
+    static const expression_grammar<std::string::const_iterator> g;
+    boost::spirit::standard_wide::space_type space;
+    auto node = std::make_shared<expr_node>();
     std::string::const_iterator itr = str.begin();
     std::string::const_iterator end = str.end();
-    bool r = boost::spirit::qi::phrase_parse(itr, end, g, boost::spirit::standard_wide::space, node);
+    bool r = boost::spirit::qi::phrase_parse(itr, end, g, space, *node);
     if (r && itr == end)
     {
-        return boost::make_shared<expr_node>(node);
+        return node;
     }
     else
     {
-        throw config_error( "Failed to parse expression: \"" + str + "\"" );
+        throw config_error("Failed to parse expression: \"" + str + "\"");
     }
 }
 
diff --git a/src/expression_grammar.cpp b/src/expression_grammar.cpp
index 2949963..2aa47e6 100644
--- a/src/expression_grammar.cpp
+++ b/src/expression_grammar.cpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2012 Artem Pavlenko
+ * Copyright (C) 2014 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,15 +20,9 @@
  *
  *****************************************************************************/
 
-// mapnik
+// NOTE: we define this here in a cpp because def is needed twice:
+// once by src/expression.cpp and once by mapnik/transform_expression_grammar_impl.hpp
 #include <mapnik/expression_grammar_impl.hpp>
-
-// stl
 #include <string>
 
-namespace mapnik
-{
-
 template struct mapnik::expression_grammar<std::string::const_iterator>;
-
-}
diff --git a/src/expression_node.cpp b/src/expression_node.cpp
index 4d83b14..69cb530 100644
--- a/src/expression_node.cpp
+++ b/src/expression_node.cpp
@@ -21,31 +21,136 @@
  *****************************************************************************/
 
 #include <mapnik/expression_node.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/noncopyable.hpp>
+
+#if defined(BOOST_REGEX_HAS_ICU)
+#include <boost/regex/icu.hpp>
+#else
+#include <boost/regex.hpp>
+#endif
 
 namespace mapnik
 {
 
+struct _regex_match_impl : noncopyable {
 #if defined(BOOST_REGEX_HAS_ICU)
+    _regex_match_impl(value_unicode_string const& ustr) :
+        pattern_(boost::make_u32regex(ustr)) {}
+    boost::u32regex pattern_;
+#else
+    _regex_match_impl(std::string const& ustr) :
+        pattern_(ustr) {}
+    boost::regex pattern_;
+#endif
+};
 
-regex_match_node::regex_match_node (expr_node const& a, UnicodeString const& ustr)
-    : expr(a),
-      pattern(boost::make_u32regex(ustr)) {}
+struct _regex_replace_impl : noncopyable {
+#if defined(BOOST_REGEX_HAS_ICU)
+    _regex_replace_impl(value_unicode_string const& ustr, value_unicode_string const& f) :
+        pattern_(boost::make_u32regex(ustr)),
+        format_(f) {}
+    boost::u32regex pattern_;
+    value_unicode_string format_;
+#else
+    _regex_replace_impl(std::string const& ustr,std::string const& f) :
+        pattern_(ustr),
+        format_(f) {}
+    boost::regex pattern_;
+    std::string format_;
+#endif
+};
 
-regex_replace_node::regex_replace_node (expr_node const& a, UnicodeString const& ustr, UnicodeString const& f)
+
+regex_match_node::regex_match_node(transcoder const& tr,
+                                   expr_node const& a,
+                                   std::string const& ustr)
     : expr(a),
-      pattern(boost::make_u32regex(ustr)),
-      format(f) {}
+      impl_(new _regex_match_impl(
+#if defined(BOOST_REGEX_HAS_ICU)
+        tr.transcode(ustr.c_str())
+#else
+        ustr
+#endif
+        )) {}
 
+value regex_match_node::apply(value const& v) const
+{
+    auto const& pattern = impl_.get()->pattern_;
+#if defined(BOOST_REGEX_HAS_ICU)
+    return boost::u32regex_match(v.to_unicode(),pattern);
 #else
+    return boost::regex_match(v.to_string(),pattern);
+#endif
+}
 
-regex_match_node::regex_match_node (expr_node const& a, std::string const& str)
-    : expr(a),
-      pattern(str) {}
+std::string regex_match_node::to_string() const
+{
+    std::string str_;
+    str_ +=".match('";
+    auto const& pattern = impl_.get()->pattern_;
+#if defined(BOOST_REGEX_HAS_ICU)
+    std::string utf8;
+    value_unicode_string ustr = value_unicode_string::fromUTF32( &pattern.str()[0], pattern.str().length());
+    to_utf8(ustr,utf8);
+    str_ += utf8;
+#else
+    str_ += pattern.str();
+#endif
+    str_ +="')";
+    return str_;
+}
 
-regex_replace_node::regex_replace_node (expr_node const& a, std::string const& str, std::string const& f)
+regex_replace_node::regex_replace_node(transcoder const& tr,
+                                       expr_node const& a,
+                                       std::string const& ustr,
+                                       std::string const& f)
     : expr(a),
-      pattern(str),
-      format(f) {}
+      impl_(new _regex_replace_impl(
+#if defined(BOOST_REGEX_HAS_ICU)
+                     tr.transcode(ustr.c_str()),
+                     tr.transcode(f.c_str())
+#else
+                     ustr,
+                     f
+#endif
+                     )) {}
+
+value regex_replace_node::apply(value const& v) const
+{
+    auto const& pattern = impl_.get()->pattern_;
+    auto const& format = impl_.get()->format_;
+#if defined(BOOST_REGEX_HAS_ICU)
+    return boost::u32regex_replace(v.to_unicode(),pattern,format);
+#else
+    std::string repl = boost::regex_replace(v.to_string(),pattern,format);
+    transcoder tr_("utf8");
+    return tr_.transcode(repl.c_str());
 #endif
+}
 
+std::string regex_replace_node::to_string() const
+{
+    std::string str_;
+    str_ +=".replace(";
+    str_ += "'";
+    auto const& pattern = impl_.get()->pattern_;
+    auto const& format = impl_.get()->format_;
+#if defined(BOOST_REGEX_HAS_ICU)
+    std::string utf8;
+    value_unicode_string ustr = value_unicode_string::fromUTF32( &pattern.str()[0], pattern.str().length());
+    to_utf8(ustr,utf8);
+    str_ += utf8;
+    str_ +="','";
+    to_utf8(format ,utf8);
+    str_ += utf8;
+#else
+    str_ += pattern.str();
+    str_ +="','";
+    str_ += format;
+#endif
+    str_ +="')";
+    return str_;
 }
+
+}
\ No newline at end of file
diff --git a/src/expression_string.cpp b/src/expression_string.cpp
index f42d5f6..a5d1386 100644
--- a/src/expression_string.cpp
+++ b/src/expression_string.cpp
@@ -27,22 +27,13 @@
 #include <mapnik/expression_node_types.hpp>
 #include <mapnik/expression_node.hpp>
 #include <mapnik/attribute.hpp>
+#include <mapnik/value_types.hpp>
 #include <mapnik/value.hpp>
 
-// boost
-#include <boost/variant.hpp>
-#if defined(BOOST_REGEX_HAS_ICU)
-#include <boost/regex/icu.hpp>          // for u32regex
-#endif
-
-// icu
-#include <unicode/unistr.h>             // for UnicodeString
-
-
 namespace mapnik
 {
 
-struct expression_string : boost::static_visitor<void>
+struct expression_string : util::static_visitor<void>
 {
     explicit expression_string(std::string & str)
         : str_(str) {}
@@ -59,7 +50,13 @@ struct expression_string : boost::static_visitor<void>
         str_ += "]";
     }
 
-    void operator() (geometry_type_attribute const& attr) const
+    void operator() (global_attribute const& attr) const
+    {
+        str_ += "@";
+        str_ += attr.name;
+    }
+
+    void operator() (geometry_type_attribute const& /*attr*/) const
     {
         str_ += "[mapnik::geometry_type]";
     }
@@ -72,9 +69,9 @@ struct expression_string : boost::static_visitor<void>
             str_ += "(";
         }
 
-        boost::apply_visitor(expression_string(str_),x.left);
+        util::apply_visitor(*this,x.left);
         str_ += x.type();
-        boost::apply_visitor(expression_string(str_),x.right);
+        util::apply_visitor(*this,x.right);
         if (x.type() != tags::mult::str() && x.type() != tags::div::str())
         {
             str_ += ")";
@@ -86,46 +83,40 @@ struct expression_string : boost::static_visitor<void>
     {
         str_ += Tag::str();
         str_ += "(";
-        boost::apply_visitor(expression_string(str_),x.expr);
+        util::apply_visitor(*this,x.expr);
         str_ += ")";
     }
 
     void operator() (regex_match_node const & x) const
     {
-        boost::apply_visitor(expression_string(str_),x.expr);
-        str_ +=".match('";
-#if defined(BOOST_REGEX_HAS_ICU)
-        std::string utf8;
-        UnicodeString ustr = UnicodeString::fromUTF32( &x.pattern.str()[0] ,x.pattern.str().length());
-        to_utf8(ustr,utf8);
-        str_ += utf8;
-#else
-        str_ += x.pattern.str();
-#endif
-        str_ +="')";
+        util::apply_visitor(*this,x.expr);
+        str_ += x.to_string();
     }
 
     void operator() (regex_replace_node const & x) const
     {
-        boost::apply_visitor(expression_string(str_),x.expr);
-        str_ +=".replace(";
-        str_ += "'";
-#if defined(BOOST_REGEX_HAS_ICU)
-        std::string utf8;
-        UnicodeString ustr = UnicodeString::fromUTF32( &x.pattern.str()[0] ,x.pattern.str().length());
-        to_utf8(ustr,utf8);
-        str_ += utf8;
-        str_ +="','";
-        to_utf8(x.format ,utf8);
-        str_ += utf8;
-#else
-        str_ += x.pattern.str();
-        str_ +="','";
-        str_ += x.format;
-#endif
-        str_ +="')";
+        util::apply_visitor(*this,x.expr);
+        str_ += x.to_string();
+    }
+
+    void operator() (unary_function_call const& call) const
+    {
+        str_ += unary_function_name(call.fun);
+        str_ += "(";
+        util::apply_visitor(*this,call.arg);
+        str_ += ")";
+
     }
+    void operator() (binary_function_call const& call) const
+    {
+        str_ += binary_function_name(call.fun);
+        str_ += "(";
+        util::apply_visitor(*this,call.arg1);
+        str_ += ",";
+        util::apply_visitor(*this,call.arg2);
+        str_ += ")";
 
+    }
 private:
     std::string & str_;
 };
@@ -134,7 +125,7 @@ std::string to_expression_string(expr_node const& node)
 {
     std::string str;
     expression_string functor(str);
-    boost::apply_visitor(functor,node);
+    util::apply_visitor(std::ref(functor),node);
     return str;
 }
 
diff --git a/src/feature_kv_iterator.cpp b/src/feature_kv_iterator.cpp
index 73463c0..ed0c905 100644
--- a/src/feature_kv_iterator.cpp
+++ b/src/feature_kv_iterator.cpp
@@ -54,8 +54,8 @@ bool feature_kv_iterator::equal( feature_kv_iterator const& other) const
 
 feature_kv_iterator::value_type const& feature_kv_iterator::dereference() const
 {
-    boost::get<0>(kv_) = itr_->first;
-    boost::get<1>(kv_) = f_.get(itr_->second);
+    std::get<0>(kv_) = itr_->first;
+    std::get<1>(kv_) = f_.get(itr_->second);
     return kv_;
 }
 
diff --git a/src/feature_style_processor.cpp b/src/feature_style_processor.cpp
index 9deb275..a9af0dc 100644
--- a/src/feature_style_processor.cpp
+++ b/src/feature_style_processor.cpp
@@ -21,15 +21,19 @@
  *****************************************************************************/
 
 // mapnik
+
 #include <mapnik/feature_style_processor_impl.hpp>
 #include <mapnik/agg_renderer.hpp>
 #include <mapnik/graphics.hpp>
+
+#if defined(GRID_RENDERER)
 #include <mapnik/grid/grid_renderer.hpp>
 #include <mapnik/grid/grid.hpp>
+#endif
 
 #if defined(HAVE_CAIRO)
 #include <cairo.h>
-#include <mapnik/cairo_renderer.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
 #endif
 
 #if defined(SVG_RENDERER)
@@ -41,14 +45,16 @@ namespace mapnik
 
 #if defined(HAVE_CAIRO)
 template class feature_style_processor<cairo_renderer<cairo_ptr> >;
-template class feature_style_processor<cairo_renderer<cairo_surface_ptr> >;
 #endif
 
 #if defined(SVG_RENDERER)
 template class feature_style_processor<svg_renderer<std::ostream_iterator<char> > >;
 #endif
 
+#if defined(GRID_RENDERER)
 template class feature_style_processor<grid_renderer<grid> >;
+#endif
+
 template class feature_style_processor<agg_renderer<image_32> >;
 
 }
diff --git a/src/feature_type_style.cpp b/src/feature_type_style.cpp
index f850a86..8775226 100644
--- a/src/feature_type_style.cpp
+++ b/src/feature_type_style.cpp
@@ -25,7 +25,7 @@
 #include <mapnik/enumeration.hpp>
 
 // boost
-#include <boost/foreach.hpp>
+
 
 namespace mapnik
 {
@@ -40,44 +40,60 @@ IMPLEMENT_ENUM( filter_mode_e, filter_mode_strings )
 
 
 feature_type_style::feature_type_style()
-: filter_mode_(FILTER_ALL),
-    filters_(),
-    direct_filters_(),
-    opacity_(1.0f)
+    : rules_(),
+      filter_mode_(FILTER_ALL),
+      filters_(),
+      direct_filters_(),
+      comp_op_(),
+      opacity_(1.0f),
+      image_filters_inflate_(false)
 {}
 
-feature_type_style::feature_type_style(feature_type_style const& rhs, bool deep_copy)
-    : filter_mode_(rhs.filter_mode_),
+feature_type_style::feature_type_style(feature_type_style const& rhs)
+    : rules_(rhs.rules_),
+      filter_mode_(rhs.filter_mode_),
       filters_(rhs.filters_),
       direct_filters_(rhs.direct_filters_),
       comp_op_(rhs.comp_op_),
-      opacity_(rhs.opacity_)
-{
-    if (!deep_copy) {
-        rules_ = rhs.rules_;
-    } else {
-        rules::const_iterator it  = rhs.rules_.begin(),
-            end = rhs.rules_.end();
-        for(; it != end; ++it) {
-            rules_.push_back(rule(*it, deep_copy));
-        }
-    }
+      opacity_(rhs.opacity_),
+      image_filters_inflate_(rhs.image_filters_inflate_) {}
+
+feature_type_style::feature_type_style(feature_type_style && rhs)
+    : rules_(std::move(rhs.rules_)),
+      filter_mode_(std::move(rhs.filter_mode_)),
+      filters_(std::move(rhs.filters_)),
+      direct_filters_(std::move(rhs.direct_filters_)),
+      comp_op_(std::move(rhs.comp_op_)),
+      opacity_(std::move(rhs.opacity_)),
+      image_filters_inflate_(std::move(rhs.image_filters_inflate_)) {}
+
+feature_type_style& feature_type_style::operator=(feature_type_style rhs)
+{
+    using std::swap;
+    std::swap(this->rules_, rhs.rules_);
+    std::swap(this->filter_mode_, rhs.filter_mode_);
+    std::swap(this->filters_, rhs.filters_);
+    std::swap(this->direct_filters_, rhs.direct_filters_);
+    std::swap(this->comp_op_, rhs.comp_op_);
+    std::swap(this->opacity_, rhs.opacity_);
+    std::swap(this->image_filters_inflate_, rhs.image_filters_inflate_);
+    return *this;
 }
 
-feature_type_style& feature_type_style::operator=(feature_type_style const& rhs)
+bool feature_type_style::operator==(feature_type_style const& rhs) const
 {
-    if (this == &rhs) return *this;
-    rules_=rhs.rules_;
-    filters_ = rhs.filters_;
-    direct_filters_ = rhs.direct_filters_;
-    comp_op_ = rhs.comp_op_;
-    opacity_= rhs.opacity_;
-    return *this;
+    return (rules_ == rhs.rules_) &&
+        (filter_mode_ == rhs.filter_mode_) &&
+        (filters_ == rhs.filters_) &&
+        (direct_filters_ == rhs.direct_filters_) &&
+        (comp_op_ == rhs.comp_op_) &&
+        (opacity_ == rhs.opacity_) &&
+        (image_filters_inflate_ == rhs.image_filters_inflate_);
 }
 
-void feature_type_style::add_rule(rule const& rule)
+void feature_type_style::add_rule(rule && rule)
 {
-    rules_.push_back(rule);
+    rules_.push_back(std::move(rule));
 }
 
 rules const& feature_type_style::get_rules() const
@@ -92,7 +108,7 @@ rules& feature_type_style::get_rules_nonconst()
 
 bool feature_type_style::active(double scale_denom) const
 {
-    BOOST_FOREACH(rule const& r, rules_)
+    for (rule const& r : rules_)
     {
         if (r.active(scale_denom))
         {
@@ -152,5 +168,14 @@ float feature_type_style::get_opacity() const
     return opacity_;
 }
 
+void feature_type_style::set_image_filters_inflate(bool inflate)
+{
+    image_filters_inflate_ = inflate;
+}
+
+bool feature_type_style::image_filters_inflate() const
+{
+    return image_filters_inflate_;
+}
 
 }
diff --git a/src/font_engine_freetype.cpp b/src/font_engine_freetype.cpp
index 5f14544..f4c33c9 100644
--- a/src/font_engine_freetype.cpp
+++ b/src/font_engine_freetype.cpp
@@ -23,49 +23,41 @@
 // mapnik
 #include <mapnik/debug.hpp>
 #include <mapnik/font_engine_freetype.hpp>
-#include <mapnik/text_properties.hpp>
-#include <mapnik/graphics.hpp>
-#include <mapnik/grid/grid.hpp>
-#include <mapnik/text_path.hpp>
 #include <mapnik/pixel_position.hpp>
-#include <mapnik/font_util.hpp>
+#include <mapnik/text/face.hpp>
 #include <mapnik/util/fs.hpp>
+#include <mapnik/util/file_io.hpp>
+#include <mapnik/utils.hpp>
+#include <mapnik/make_unique.hpp>
 
 // boost
-#include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/algorithm/string/predicate.hpp>
 #include <boost/filesystem.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/optional.hpp>
+#pragma GCC diagnostic pop
 
 // stl
-#include <sstream>
 #include <algorithm>
 #include <stdexcept>
 
-// icu
-#include <unicode/ubidi.h>
-#include <unicode/ushape.h>
-#include <unicode/schriter.h>
-#include <unicode/uversion.h>
-
-namespace mapnik
+// freetype2
+extern "C"
 {
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_STROKER_H
+#include FT_MODULE_H
+}
 
 
-freetype_engine::freetype_engine() :
-    library_(NULL)
-
+namespace mapnik
 {
-    FT_Error error = FT_Init_FreeType( &library_ );
-    if (error)
-    {
-        throw std::runtime_error("can not load FreeType2 library");
-    }
-}
 
-freetype_engine::~freetype_engine()
-{
-    FT_Done_FreeType(library_);
-}
+freetype_engine::freetype_engine() {}
+freetype_engine::~freetype_engine() {}
 
 bool freetype_engine::is_font_file(std::string const& file_name)
 {
@@ -78,37 +70,61 @@ bool freetype_engine::is_font_file(std::string const& file_name)
         boost::algorithm::ends_with(fn,std::string(".pfa")) ||
         boost::algorithm::ends_with(fn,std::string(".pfb")) ||
         boost::algorithm::ends_with(fn,std::string(".ttc")) ||
+        boost::algorithm::ends_with(fn,std::string(".woff"))||
         // Plus OSX custom ext
         boost::algorithm::ends_with(fn,std::string(".dfont"));
 }
 
+unsigned long ft_read_cb(FT_Stream stream, unsigned long offset, unsigned char *buffer, unsigned long count)
+{
+    if (count <= 0) return 0;
+    FILE * file = static_cast<FILE *>(stream->descriptor.pointer);
+    std::fseek (file , offset , SEEK_SET);
+    return std::fread ((char*)buffer, 1, count, file);
+}
+
 bool freetype_engine::register_font(std::string const& file_name)
 {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
-    FT_Library library = 0;
-    FT_Error error = FT_Init_FreeType(&library);
-    if (error)
-    {
-        throw std::runtime_error("Failed to initialize FreeType2 library");
-    }
+    font_library library;
+    return register_font_impl(file_name, library, global_font_file_mapping_);
+}
+
+bool freetype_engine::register_font_impl(std::string const& file_name,
+                                         font_library & library,
+                                         freetype_engine::font_file_mapping_type & font_file_mapping)
+{
+    MAPNIK_LOG_DEBUG(font_engine_freetype) << "registering: " << file_name;
+    mapnik::util::file file(file_name);
+    if (!file.open()) return false;
 
     FT_Face face = 0;
+    FT_Open_Args args;
+    FT_StreamRec streamRec;
+    memset(&args, 0, sizeof(args));
+    memset(&streamRec, 0, sizeof(streamRec));
+    streamRec.base = 0;
+    streamRec.pos = 0;
+    streamRec.size = file.size();
+    streamRec.descriptor.pointer = file.get();
+    streamRec.read  = ft_read_cb;
+    streamRec.close = NULL;
+    args.flags = FT_OPEN_STREAM;
+    args.stream = &streamRec;
     int num_faces = 0;
     bool success = false;
     // some font files have multiple fonts in a file
     // the count is in the 'root' face library[0]
     // see the FT_FaceRec in freetype.h
-    for ( int i = 0; face == 0 || i < num_faces; i++ ) {
+    for ( int i = 0; face == 0 || i < num_faces; ++i )
+    {
         // if face is null then this is the first face
-        error = FT_New_Face (library,file_name.c_str(),i,&face);
-        if (error)
-        {
-            break;
-        }
+        FT_Error error = FT_Open_Face(library.get(), &args, i, &face);
+        if (error) break;
         // store num_faces locally, after FT_Done_Face it can not be accessed any more
-        if (!num_faces)
+        if (num_faces == 0)
             num_faces = face->num_faces;
         // some fonts can lack names, skip them
         // http://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_FaceRec
@@ -118,7 +134,17 @@ bool freetype_engine::register_font(std::string const& file_name)
             // skip fonts with leading . in the name
             if (!boost::algorithm::starts_with(name,"."))
             {
-                name2file_.insert(std::make_pair(name, std::make_pair(i,file_name)));
+                // http://stackoverflow.com/a/24795559/2333354
+                auto range = font_file_mapping.equal_range(name);
+                if (range.first == range.second) // the key was previously absent; insert a pair
+                {
+                    font_file_mapping.emplace_hint(range.first,name,std::move(std::make_pair(i,file_name)));
+                }
+                else // the key was present, replace the associated value
+                { /* some action with value range.first->second about to be overwritten here */
+                    MAPNIK_LOG_WARN(font_engine_freetype) << "registering new " << name << " at '" << file_name << "'";
+                    range.first->second = std::move(std::make_pair(i,file_name)); // replace value
+                }
                 success = true;
             }
         }
@@ -132,601 +158,307 @@ bool freetype_engine::register_font(std::string const& file_name)
                 s << "which reports a family name of '" << std::string(face->family_name) << "' and lacks a style name";
             else if (face->style_name)
                 s << "which reports a style name of '" << std::string(face->style_name) << "' and lacks a family name";
-
-            MAPNIK_LOG_DEBUG(font_engine_freetype) << "freetype_engine: " << s.str();
+            MAPNIK_LOG_ERROR(font_engine_freetype) << "register_font: " << s.str();
         }
+        if (face) FT_Done_Face(face);
     }
-    if (face)
-        FT_Done_Face(face);
-    if (library)
-        FT_Done_FreeType(library);
     return success;
 }
 
 bool freetype_engine::register_fonts(std::string const& dir, bool recurse)
 {
+#ifdef MAPNIK_THREADSAFE
+    mapnik::scoped_lock lock(mutex_);
+#endif
+    font_library library;
+    return register_fonts_impl(dir, library, global_font_file_mapping_, recurse);
+}
+
+bool freetype_engine::register_fonts_impl(std::string const& dir,
+                                          font_library & library,
+                                          freetype_engine::font_file_mapping_type & font_file_mapping,
+                                          bool recurse)
+{
     if (!mapnik::util::exists(dir))
     {
         return false;
     }
     if (!mapnik::util::is_directory(dir))
     {
-        return mapnik::freetype_engine::register_font(dir);
+        return register_font_impl(dir, library, font_file_mapping);
     }
-    boost::filesystem::directory_iterator end_itr;
     bool success = false;
-    for (boost::filesystem::directory_iterator itr(dir); itr != end_itr; ++itr)
+    try
     {
-#if (BOOST_FILESYSTEM_VERSION == 3)
-        std::string file_name = itr->path().string();
-#else // v2
-        std::string file_name = itr->string();
-#endif
-        if (boost::filesystem::is_directory(*itr) && recurse)
+        boost::filesystem::directory_iterator end_itr;
+#ifdef _WINDOWS
+        std::wstring wide_dir(mapnik::utf8_to_utf16(dir));
+        for (boost::filesystem::directory_iterator itr(wide_dir); itr != end_itr; ++itr)
         {
-            if (register_fonts(file_name, true))
-            {
-                success = true;
-            }
-        }
-        else
+            std::string file_name = mapnik::utf16_to_utf8(itr->path().wstring());
+#else
+        for (boost::filesystem::directory_iterator itr(dir); itr != end_itr; ++itr)
         {
-#if (BOOST_FILESYSTEM_VERSION == 3)
-            std::string base_name = itr->path().filename().string();
-#else // v2
-            std::string base_name = itr->filename();
+            std::string file_name = itr->path().string();
 #endif
-            if (!boost::algorithm::starts_with(base_name,".") &&
-                boost::filesystem::is_regular_file(file_name) &&
-                is_font_file(file_name))
+            if (boost::filesystem::is_directory(*itr) && recurse)
             {
-                if (mapnik::freetype_engine::register_font(file_name))
+                if (register_fonts_impl(file_name, library, font_file_mapping, true))
                 {
                     success = true;
                 }
             }
-        }
-    }
-    return success;
-}
-
-
-std::vector<std::string> freetype_engine::face_names ()
-{
-    std::vector<std::string> names;
-    std::map<std::string,std::pair<int,std::string> >::const_iterator itr;
-    for (itr = name2file_.begin();itr!=name2file_.end();++itr)
-    {
-        names.push_back(itr->first);
-    }
-    return names;
-}
-
-std::map<std::string,std::pair<int,std::string> > const& freetype_engine::get_mapping()
-{
-    return name2file_;
-}
-
-
-face_ptr freetype_engine::create_face(std::string const& family_name)
-{
-    std::map<std::string, std::pair<int,std::string> >::const_iterator itr;
-    itr = name2file_.find(family_name);
-    if (itr != name2file_.end())
-    {
-        FT_Face face;
-
-        std::map<std::string,std::string>::const_iterator mem_font_itr = memory_fonts_.find(itr->second.second);
-
-        if (mem_font_itr != memory_fonts_.end()) // memory font
-        {
-            FT_Error error = FT_New_Memory_Face(library_,
-                                                (FT_Byte const*) mem_font_itr->second.c_str(), //buffer
-                                                mem_font_itr->second.size(), // size
-                                                itr->second.first, // face index
-                                                &face);
-
-            if (!error) return boost::make_shared<font_face>(face);
-        }
-        else
-        {
-            // load font into memory
-#ifdef MAPNIK_THREADSAFE
-            mutex::scoped_lock lock(mutex_);
-#endif
-            std::ifstream is(itr->second.second.c_str() , std::ios::binary);
-            std::string buffer((std::istreambuf_iterator<char>(is)),
-                               std::istreambuf_iterator<char>());
-            std::pair<std::map<std::string,std::string>::iterator,bool> result
-                = memory_fonts_.insert(std::make_pair(itr->second.second, buffer));
-
-            FT_Error error = FT_New_Memory_Face (library_,
-                                                 (FT_Byte const*) result.first->second.c_str(),
-                                                 buffer.size(),
-                                                 itr->second.first,
-                                                 &face);
-            if (!error) return boost::make_shared<font_face>(face);
             else
             {
-                // we can't load font, erase it.
-                memory_fonts_.erase(result.first);
+                std::string base_name = itr->path().filename().string();
+                if (!boost::algorithm::starts_with(base_name,".") &&
+                    mapnik::util::is_regular_file(file_name) &&
+                    is_font_file(file_name))
+                {
+                    if (register_font_impl(file_name, library, font_file_mapping))
+                    {
+                        success = true;
+                    }
+                }
             }
         }
     }
-    return face_ptr();
-}
-
-stroker_ptr freetype_engine::create_stroker()
-{
-    FT_Stroker s;
-    FT_Error error = FT_Stroker_New(library_, &s);
-    if (!error)
+    catch (std::exception const& ex)
     {
-        return boost::make_shared<stroker>(s);
+        MAPNIK_LOG_ERROR(font_engine_freetype) << "register_fonts: " << ex.what();
     }
-    return stroker_ptr();
-}
-
-void font_face_set::add(face_ptr face)
-{
-    faces_.push_back(face);
-    dimension_cache_.clear(); //Make sure we don't use old cached data
+    return success;
 }
 
-font_face_set::size_type font_face_set::size() const
-{
-    return faces_.size();
-}
 
-glyph_ptr font_face_set::get_glyph(unsigned c) const
+std::vector<std::string> freetype_engine::face_names ()
 {
-    BOOST_FOREACH ( face_ptr const& face, faces_)
+    std::vector<std::string> names;
+    for (auto const& kv : global_font_file_mapping_)
     {
-        FT_UInt g = face->get_char(c);
-        if (g) return boost::make_shared<font_glyph>(face, g);
+        names.push_back(kv.first);
     }
-
-    // Final fallback to empty square if nothing better in any font
-    return boost::make_shared<font_glyph>(*faces_.begin(), 0);
+    return names;
 }
 
-char_info font_face_set::character_dimensions(unsigned int c)
+freetype_engine::font_file_mapping_type const& freetype_engine::get_mapping()
 {
-    //Check if char is already in cache
-    typedef std::map<unsigned, char_info>::const_iterator iterator_type;
-    iterator_type itr = dimension_cache_.find(c);
-    if (itr != dimension_cache_.end())
-    {
-        return itr->second;
-    }
-
-    FT_Matrix matrix;
-    FT_Vector pen;
-    FT_Error  error;
-
-    pen.x = 0;
-    pen.y = 0;
-
-    FT_BBox glyph_bbox;
-    FT_Glyph image;
-
-    glyph_ptr glyph = get_glyph(c);
-    FT_Face face = glyph->get_face()->get_face();
-
-    matrix.xx = (FT_Fixed)( 1 * 0x10000L );
-    matrix.xy = (FT_Fixed)( 0 * 0x10000L );
-    matrix.yx = (FT_Fixed)( 0 * 0x10000L );
-    matrix.yy = (FT_Fixed)( 1 * 0x10000L );
-
-    FT_Set_Transform(face, &matrix, &pen);
-
-    error = FT_Load_Glyph (face, glyph->get_index(), FT_LOAD_NO_HINTING);
-    if ( error )
-        return char_info();
-
-    error = FT_Get_Glyph(face->glyph, &image);
-    if ( error )
-        return char_info();
-
-    FT_Glyph_Get_CBox(image, ft_glyph_bbox_pixels, &glyph_bbox);
-    FT_Done_Glyph(image);
-
-    unsigned tempx = face->glyph->advance.x >> 6;
-
-    char_info dim(c, tempx, glyph_bbox.yMax, glyph_bbox.yMin, face->size->metrics.height/64.0);
-    dimension_cache_.insert(std::make_pair(c, dim));
-    return dim;
+    return global_font_file_mapping_;
 }
 
-
-void font_face_set::get_string_info(string_info & info, UnicodeString const& ustr, char_properties *format)
+freetype_engine::font_memory_cache_type & freetype_engine::get_cache()
 {
-    double avg_height = character_dimensions('X').height();
-    UErrorCode err = U_ZERO_ERROR;
-    UnicodeString reordered;
-    UnicodeString shaped;
-
-    int32_t length = ustr.length();
-
-    UBiDi *bidi = ubidi_openSized(length, 0, &err);
-    ubidi_setPara(bidi, ustr.getBuffer(), length, UBIDI_DEFAULT_LTR, 0, &err);
-
-    ubidi_writeReordered(bidi, reordered.getBuffer(length),
-                         length, UBIDI_DO_MIRRORING, &err);
-
-    reordered.releaseBuffer(length);
-
-    u_shapeArabic(reordered.getBuffer(), length,
-                  shaped.getBuffer(length), length,
-                  U_SHAPE_LETTERS_SHAPE | U_SHAPE_LENGTH_FIXED_SPACES_NEAR |
-                  U_SHAPE_TEXT_DIRECTION_VISUAL_LTR, &err);
-
-    shaped.releaseBuffer(length);
-
-    if (U_SUCCESS(err)) {
-        StringCharacterIterator iter(shaped);
-        for (iter.setToStart(); iter.hasNext();) {
-            UChar ch = iter.nextPostInc();
-            char_info char_dim = character_dimensions(ch);
-            char_dim.format = format;
-            char_dim.avg_height = avg_height;
-            info.add_info(char_dim);
-        }
-    }
-
-
-#if (U_ICU_VERSION_MAJOR_NUM*100 + U_ICU_VERSION_MINOR_NUM >= 406)
-    if (ubidi_getBaseDirection(ustr.getBuffer(), length) == UBIDI_RTL)
-    {
-        info.set_rtl(true);
-    }
-#endif
-
-    ubidi_close(bidi);
+    return global_memory_fonts_;
 }
 
-void font_face_set::set_pixel_sizes(unsigned size)
+bool freetype_engine::can_open(std::string const& face_name,
+                               font_library & library,
+                               font_file_mapping_type const& font_file_mapping,
+                               font_file_mapping_type const& global_font_file_mapping)
 {
-    BOOST_FOREACH ( face_ptr const& face, faces_)
+    bool found_font_file = false;
+    font_file_mapping_type::const_iterator itr = font_file_mapping.find(face_name);
+    if (itr != font_file_mapping.end())
     {
-        face->set_pixel_sizes(size);
+        found_font_file = true;
     }
-}
-
-void font_face_set::set_character_sizes(double size)
-{
-    BOOST_FOREACH ( face_ptr const& face, faces_)
+    else
     {
-        face->set_character_sizes(size);
+        itr = global_font_file_mapping.find(face_name);
+        if (itr != global_font_file_mapping.end())
+        {
+            found_font_file = true;
+        }
     }
+    if (!found_font_file) return false;
+    mapnik::util::file file(itr->second.second);
+    if (!file.open()) return false;
+    FT_Face face = 0;
+    FT_Open_Args args;
+    FT_StreamRec streamRec;
+    memset(&args, 0, sizeof(args));
+    memset(&streamRec, 0, sizeof(streamRec));
+    streamRec.base = 0;
+    streamRec.pos = 0;
+    streamRec.size = file.size();
+    streamRec.descriptor.pointer = file.get();
+    streamRec.read  = ft_read_cb;
+    streamRec.close = NULL;
+    args.flags = FT_OPEN_STREAM;
+    args.stream = &streamRec;
+    // -1 is used to quickly check if the font file appears valid without iterating each face
+    FT_Error error = FT_Open_Face(library.get(), &args, -1, &face);
+    if (face) FT_Done_Face(face);
+    if (error) return false;
+    return true;
 }
 
-
-template <typename T>
-void composite_bitmap(T & pixmap,
-                      FT_Bitmap *bitmap,
-                      unsigned rgba,
-                      int x,
-                      int y,
-                      double opacity,
-                      composite_mode_e comp_op)
+face_ptr freetype_engine::create_face(std::string const& family_name,
+                                      font_library & library,
+                                      freetype_engine::font_file_mapping_type const& font_file_mapping,
+                                      freetype_engine::font_memory_cache_type const& font_cache,
+                                      freetype_engine::font_file_mapping_type const& global_font_file_mapping,
+                                      freetype_engine::font_memory_cache_type & global_memory_fonts)
 {
-    int x_max=x+bitmap->width;
-    int y_max=y+bitmap->rows;
-    int i,p,j,q;
-
-    for (i=x,p=0;i<x_max;++i,++p)
+    bool found_font_file = false;
+    font_file_mapping_type::const_iterator itr = font_file_mapping.find(family_name);
+    // look for font registered on specific map
+    if (itr != font_file_mapping.end())
     {
-        for (j=y,q=0;j<y_max;++j,++q)
+        auto mem_font_itr = font_cache.find(itr->second.second);
+        // if map has font already in memory, use it
+        if (mem_font_itr != font_cache.end())
         {
-            unsigned gray=bitmap->buffer[q*bitmap->width+p];
-            if (gray)
-            {
-                pixmap.composite_pixel(comp_op, i, j, rgba, gray, opacity);
-            }
+            FT_Face face;
+            FT_Error error = FT_New_Memory_Face(library.get(),
+                                                reinterpret_cast<FT_Byte const*>(mem_font_itr->second.first.get()), // data
+                                                static_cast<FT_Long>(mem_font_itr->second.second), // size
+                                                itr->second.first, // face index
+                                                &face);
+            if (!error) return std::make_shared<font_face>(face);
         }
+        // we don't add to cache here because the map and its font_cache
+        // must be immutable during rendering for predictable thread safety
+        found_font_file = true;
     }
-}
-
-template <typename T>
-void render_halo(T & pixmap,
-                 FT_Bitmap *bitmap,
-                 unsigned rgba,
-                 int x1,
-                 int y1,
-                 double halo_radius,
-                 double opacity,
-                 composite_mode_e comp_op)
-{
-    int width = bitmap->width;
-    int height = bitmap->rows;
-    int x, y;
-    if (halo_radius < 1.0)
+    else
     {
-        for (x=0; x < width; x++)
+        // otherwise search global registry
+        itr = global_font_file_mapping.find(family_name);
+        if (itr != global_font_file_mapping.end())
         {
-            for (y=0; y < height; y++)
+            auto mem_font_itr = global_memory_fonts_.find(itr->second.second);
+            // if font already in memory, use it
+            if (mem_font_itr != global_memory_fonts_.end())
             {
-                int gray = bitmap->buffer[y*bitmap->width+x];
-                if (gray)
-                {
-                    pixmap.composite_pixel(comp_op, x+x1-1, y+y1-1, rgba, gray*halo_radius*halo_radius, opacity);
-                    pixmap.composite_pixel(comp_op, x+x1,   y+y1-1, rgba, gray*halo_radius, opacity);
-                    pixmap.composite_pixel(comp_op, x+x1+1, y+y1-1, rgba, gray*halo_radius*halo_radius, opacity);
-
-                    pixmap.composite_pixel(comp_op, x+x1-1, y+y1,   rgba, gray*halo_radius, opacity);
-                    pixmap.composite_pixel(comp_op, x+x1,   y+y1,   rgba, gray, opacity);
-                    pixmap.composite_pixel(comp_op, x+x1+1, y+y1,   rgba, gray*halo_radius, opacity);
-
-                    pixmap.composite_pixel(comp_op, x+x1-1, y+y1+1, rgba, gray*halo_radius*halo_radius, opacity);
-                    pixmap.composite_pixel(comp_op, x+x1,   y+y1+1, rgba, gray*halo_radius, opacity);
-                    pixmap.composite_pixel(comp_op, x+x1+1, y+y1+1, rgba, gray*halo_radius*halo_radius, opacity);
-                }
+                FT_Face face;
+                FT_Error error = FT_New_Memory_Face(library.get(),
+                                                    reinterpret_cast<FT_Byte const*>(mem_font_itr->second.first.get()), // data
+                                                    static_cast<FT_Long>(mem_font_itr->second.second), // size
+                                                    itr->second.first, // face index
+                                                    &face);
+                if (!error) return std::make_shared<font_face>(face);
             }
+            found_font_file = true;
         }
-    } else {
-        for (x=0; x < width; x++)
+    }
+    // if we found file file but it is not yet in memory
+    if (found_font_file)
+    {
+        mapnik::util::file file(itr->second.second);
+        if (file.open())
         {
-            for (y=0; y < height; y++)
+#ifdef MAPNIK_THREADSAFE
+            mapnik::scoped_lock lock(mutex_);
+#endif
+            auto result = global_memory_fonts_.emplace(itr->second.second, std::make_pair(std::move(file.data()),file.size()));
+            FT_Face face;
+            FT_Error error = FT_New_Memory_Face(library.get(),
+                                                reinterpret_cast<FT_Byte const*>(result.first->second.first.get()), // data
+                                                static_cast<FT_Long>(result.first->second.second), // size
+                                                itr->second.first, // face index
+                                                &face);
+            if (error)
             {
-                int gray = bitmap->buffer[y*bitmap->width+x];
-                if (gray)
-                {
-                    for (int n=-halo_radius; n <=halo_radius; ++n)
-                        for (int m=-halo_radius; m <= halo_radius; ++m)
-                            pixmap.composite_pixel(comp_op, x+x1+m, y+y1+n, rgba, gray, opacity);
-                }
+                // we can't load font, erase it.
+                global_memory_fonts_.erase(result.first);
+                return face_ptr();
             }
+            return std::make_shared<font_face>(face);
         }
     }
+    return face_ptr();
 }
 
-template <typename T>
-void render_halo_id(T & pixmap,
-                    FT_Bitmap *bitmap,
-                    mapnik::value_integer feature_id,
-                    int x1,
-                    int y1,
-                    int halo_radius)
+
+face_manager::face_manager(font_library & library,
+                           freetype_engine::font_file_mapping_type const& font_file_mapping,
+                           freetype_engine::font_memory_cache_type const& font_cache)
+    : face_ptr_cache_(),
+      library_(library),
+      font_file_mapping_(font_file_mapping),
+      font_memory_cache_(font_cache)
+      {
+            FT_Stroker s;
+            FT_Error error = FT_Stroker_New(library_.get(), &s);
+            if (!error)
+            {
+                stroker_ = std::make_shared<stroker>(s);
+            }
+      }
+
+face_ptr face_manager::get_face(std::string const& name)
 {
-    int width = bitmap->width;
-    int height = bitmap->rows;
-    int x, y;
-    for (x=0; x < width; x++)
+    auto itr = face_ptr_cache_.find(name);
+    if (itr != face_ptr_cache_.end())
     {
-        for (y=0; y < height; y++)
+        return itr->second;
+    }
+    else
+    {
+        face_ptr face = freetype_engine::create_face(name,
+                                                     library_,
+                                                     font_file_mapping_,
+                                                     font_memory_cache_,
+                                                     freetype_engine::get_mapping(),
+                                                     freetype_engine::get_cache());
+        if (face)
         {
-            int gray = bitmap->buffer[y*bitmap->width+x];
-            if (gray)
-            {
-                for (int n=-halo_radius; n <=halo_radius; ++n)
-                    for (int m=-halo_radius; m <= halo_radius; ++m)
-                        pixmap.setPixel(x+x1+m,y+y1+n,feature_id);
-            }
+            face_ptr_cache_.emplace(name,face);
         }
+        return face;
     }
 }
 
-template <typename T>
-text_renderer<T>::text_renderer(pixmap_type & pixmap,
-                                face_manager<freetype_engine> & font_manager,
-                                halo_rasterizer_e rasterizer,
-                                composite_mode_e comp_op,
-                                double scale_factor)
-    : pixmap_(pixmap),
-      font_manager_(font_manager),
-      rasterizer_(rasterizer),
-      comp_op_(comp_op),
-      scale_factor_(scale_factor) {}
-
-template <typename T>
-box2d<double> text_renderer<T>::prepare_glyphs(text_path const& path)
+face_set_ptr face_manager::get_face_set(std::string const& name)
 {
-    //clear glyphs
-    glyphs_.clear();
-
-    FT_Matrix matrix;
-    FT_Vector pen;
-    FT_Error  error;
-
-    FT_BBox bbox;
-    bbox.xMin = bbox.yMin = 32000;  // Initialize these so we can tell if we
-    bbox.xMax = bbox.yMax = -32000; // properly grew the bbox later
-
-    for (int i = 0; i < path.num_nodes(); ++i)
+    face_set_ptr face_set = std::make_unique<font_face_set>();
+    if (face_ptr face = get_face(name))
     {
-        char_info_ptr c;
-        double x, y, angle;
-
-        path.vertex(c, x, y, angle);
-
-        // TODO Enable when we have support for setting verbosity
-        // MAPNIK_LOG_DEBUG(font_engine_freetype) << "text_renderer: prepare_glyphs="
-        //                                        << c << "," << x << "," << y << "," << angle;
-
-        FT_BBox glyph_bbox;
-        FT_Glyph image;
-
-        pen.x = int(x * 64);
-        pen.y = int(y * 64);
-
-        face_set_ptr faces = font_manager_.get_face_set(c->format->face_name, c->format->fontset);
-        faces->set_character_sizes(c->format->text_size*scale_factor_);
-
-        glyph_ptr glyph = faces->get_glyph(unsigned(c->c));
-        FT_Face face = glyph->get_face()->get_face();
-
-        matrix.xx = (FT_Fixed)( std::cos( angle ) * 0x10000L );
-        matrix.xy = (FT_Fixed)(-std::sin( angle ) * 0x10000L );
-        matrix.yx = (FT_Fixed)( std::sin( angle ) * 0x10000L );
-        matrix.yy = (FT_Fixed)( std::cos( angle ) * 0x10000L );
-
-        FT_Set_Transform(face, &matrix, &pen);
-
-        error = FT_Load_Glyph(face, glyph->get_index(), FT_LOAD_NO_HINTING);
-        if ( error )
-            continue;
-
-        error = FT_Get_Glyph(face->glyph, &image);
-        if ( error )
-            continue;
-
-        FT_Glyph_Get_CBox(image,ft_glyph_bbox_pixels, &glyph_bbox);
-        if (glyph_bbox.xMin < bbox.xMin)
-            bbox.xMin = glyph_bbox.xMin;
-        if (glyph_bbox.yMin < bbox.yMin)
-            bbox.yMin = glyph_bbox.yMin;
-        if (glyph_bbox.xMax > bbox.xMax)
-            bbox.xMax = glyph_bbox.xMax;
-        if (glyph_bbox.yMax > bbox.yMax)
-            bbox.yMax = glyph_bbox.yMax;
-
-        // Check if we properly grew the bbox
-        if ( bbox.xMin > bbox.xMax )
-        {
-            bbox.xMin = 0;
-            bbox.yMin = 0;
-            bbox.xMax = 0;
-            bbox.yMax = 0;
-        }
-
-        // take ownership of the glyph
-        glyphs_.push_back(new glyph_t(image, c->format));
+        face_set->add(face);
     }
-
-    return box2d<double>(bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax);
+    return face_set;
 }
 
-template <typename T>
-void text_renderer<T>::render(pixel_position const& pos)
+face_set_ptr face_manager::get_face_set(font_set const& fset)
 {
-    FT_Error  error;
-    FT_Vector start;
-    unsigned height = pixmap_.height();
-
-    start.x =  static_cast<FT_Pos>(pos.x * (1 << 6));
-    start.y =  static_cast<FT_Pos>((height - pos.y) * (1 << 6));
-
-    // now render transformed glyphs
-    typename glyphs_t::iterator itr;
-    for (itr = glyphs_.begin(); itr != glyphs_.end(); ++itr)
+    std::vector<std::string> const& names = fset.get_face_names();
+    face_set_ptr face_set = std::make_unique<font_face_set>();
+    for (auto const& name : names)
     {
-        double halo_radius = itr->properties->halo_radius * scale_factor_;
-        //make sure we've got reasonable values.
-        if (halo_radius <= 0.0 || halo_radius > 1024.0) continue;
-        FT_Glyph g;
-        error = FT_Glyph_Copy(itr->image, &g);
-        if (!error)
+        face_ptr face = get_face(name);
+        if (face)
         {
-            FT_Glyph_Transform(g,0,&start);
-            if (rasterizer_ == HALO_RASTERIZER_FULL)
-            {
-                stroker_ptr stk = font_manager_.get_stroker();
-                stk->init(halo_radius);
-                FT_Glyph_Stroke(&g,stk->get(),1);
-                error = FT_Glyph_To_Bitmap( &g,FT_RENDER_MODE_NORMAL,0,1);
-                if (!error)
-                {
-                    FT_BitmapGlyph bit = (FT_BitmapGlyph)g;
-                    composite_bitmap(pixmap_,
-                                     &bit->bitmap,
-                                     itr->properties->halo_fill.rgba(),
-                                     bit->left,
-                                     height - bit->top,
-                                     itr->properties->text_opacity,
-                                     comp_op_);
-                }
-            }
-            else
-            {
-                error = FT_Glyph_To_Bitmap( &g,FT_RENDER_MODE_NORMAL,0,1);
-                if (!error)
-                {
-                    FT_BitmapGlyph bit = (FT_BitmapGlyph)g;
-                    render_halo(pixmap_,
-                                &bit->bitmap,
-                                itr->properties->halo_fill.rgba(),
-                                bit->left,
-                                height - bit->top,
-                                halo_radius,
-                                itr->properties->text_opacity,
-                                comp_op_);
-                }
-            }
+            face_set->add(face);
         }
-        FT_Done_Glyph(g);
-    }
-    //render actual text
-    for (itr = glyphs_.begin(); itr != glyphs_.end(); ++itr)
-    {
-
-        FT_Glyph_Transform(itr->image,0,&start);
-
-        error = FT_Glyph_To_Bitmap( &(itr->image),FT_RENDER_MODE_NORMAL,0,1);
-        if ( ! error )
+#ifdef MAPNIK_LOG
+        else
         {
-
-            FT_BitmapGlyph bit = (FT_BitmapGlyph)itr->image;
-            composite_bitmap(pixmap_,
-                             &bit->bitmap,
-                             itr->properties->fill.rgba(),
-                             bit->left,
-                             height - bit->top,
-                             itr->properties->text_opacity,
-                             comp_op_
-                );
+            MAPNIK_LOG_DEBUG(font_engine_freetype)
+                << "Failed to find face '" << name
+                << "' in font set '" << fset.get_name() << "'\n";
         }
+#endif
     }
+    return face_set;
 }
 
-template <typename T>
-void text_renderer<T>::render_id(mapnik::value_integer feature_id,
-                                 pixel_position const& pos)
+face_set_ptr face_manager::get_face_set(std::string const& name, boost::optional<font_set> fset)
 {
-    FT_Error  error;
-    FT_Vector start;
-    unsigned height = pixmap_.height();
-
-    start.x =  static_cast<FT_Pos>(pos.x * (1 << 6));
-    start.y =  static_cast<FT_Pos>((height - pos.y) * (1 << 6));
-
-    // now render transformed glyphs
-    typename glyphs_t::iterator itr;
-    for (itr = glyphs_.begin(); itr != glyphs_.end(); ++itr)
+    if (fset && fset->size() > 0)
     {
-        FT_Glyph_Transform(itr->image,0,&start);
-        error = FT_Glyph_To_Bitmap( &(itr->image),FT_RENDER_MODE_NORMAL,0,1);
-        if ( ! error )
-        {
-            FT_BitmapGlyph bit = (FT_BitmapGlyph)itr->image;
-            render_halo_id(pixmap_,
-                           &bit->bitmap,
-                           feature_id,
-                           bit->left,
-                           height - bit->top,
-                           itr->properties->halo_radius);
-        }
+        return get_face_set(*fset);
+    }
+    else
+    {
+        return get_face_set(name);
     }
 }
 
 #ifdef MAPNIK_THREADSAFE
-boost::mutex freetype_engine::mutex_;
+std::mutex freetype_engine::mutex_;
 #endif
-std::map<std::string,std::pair<int,std::string> > freetype_engine::name2file_;
-std::map<std::string,std::string> freetype_engine::memory_fonts_;
+freetype_engine::font_file_mapping_type freetype_engine::global_font_file_mapping_;
+freetype_engine::font_memory_cache_type freetype_engine::global_memory_fonts_;
 
-template text_renderer<image_32>::text_renderer(image_32&,
-                                                face_manager<freetype_engine>&,
-                                                halo_rasterizer_e,
-                                                composite_mode_e,
-                                                double);
-template box2d<double>text_renderer<image_32>::prepare_glyphs(text_path const&);
-template void text_renderer<image_32>::render(pixel_position const&);
-template void text_renderer<grid>::render_id(mapnik::value_integer,
-                                             pixel_position const&);
-template text_renderer<grid>::text_renderer(grid&,
-                                            face_manager<freetype_engine>&,
-                                            halo_rasterizer_e,
-                                            composite_mode_e, double);
-template box2d<double>text_renderer<grid>::prepare_glyphs(text_path const& );
 }
diff --git a/src/font_set.cpp b/src/font_set.cpp
index fdd0422..c99f804 100644
--- a/src/font_set.cpp
+++ b/src/font_set.cpp
@@ -30,32 +30,48 @@ namespace mapnik
 {
 
 font_set::font_set(std::string const& name)
-    : name_(name) {}
+    : name_(name),
+      face_names_() {}
 
+// copy
 font_set::font_set(font_set const& rhs)
     : name_(rhs.name_),
       face_names_(rhs.face_names_) {}
 
-font_set& font_set::operator=(font_set const& other)
-{
-    if (this == &other)
-        return *this;
-    name_ = other.name_;
-    face_names_ = other.face_names_;
+// move
+font_set::font_set(font_set && rhs)
+    : name_(std::move(rhs.name_)),
+      face_names_(std::move(rhs.face_names_)) {}
 
+font_set& font_set::operator=(font_set other)
+{
+    swap(*this, other);
     return *this;
 }
 
+void swap(font_set & lhs, font_set & rhs)
+{
+    using std::swap;
+    swap(lhs.name_, rhs.name_);
+    swap(lhs.face_names_, rhs.face_names_);
+}
+
+bool font_set::operator==(font_set const& rhs) const
+{
+    return name_ == rhs.name_ &&
+        face_names_ == rhs.face_names_;
+}
+
 font_set::~font_set() {}
 
-unsigned font_set::size() const
+std::size_t font_set::size() const
 {
     return face_names_.size();
 }
 
-void font_set::add_face_name(std::string face_name)
+void font_set::add_face_name(std::string const& face_name)
 {
-    face_names_.push_back(face_name);
+    face_names_.emplace_back(face_name);
 }
 
 void font_set::set_name(std::string const& name)
diff --git a/src/formatting/base.cpp b/src/formatting/base.cpp
deleted file mode 100644
index bc3be41..0000000
--- a/src/formatting/base.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/formatting/base.hpp>
-#include <mapnik/formatting/list.hpp>
-#include <mapnik/formatting/registry.hpp>
-#include <mapnik/xml_node.hpp>
-
-// boost
-#include <boost/property_tree/ptree.hpp>
-
-namespace mapnik {
-namespace formatting {
-
-void node::to_xml(boost::property_tree::ptree &xml) const
-{
-    //TODO: Should this throw a config_error?
-    MAPNIK_LOG_ERROR(base) << "Trying to write unsupported node type to XML.";
-}
-
-node_ptr node::from_xml(xml_node const& xml)
-{
-    list_node *list = new list_node();
-    node_ptr list_ptr(list);
-    xml_node::const_iterator itr = xml.begin();
-    xml_node::const_iterator end = xml.end();
-    for (; itr != end; ++itr) {
-        if (itr->name() == "Placement")
-        {
-            continue;
-        }
-        node_ptr n = registry::instance().from_xml(*itr);
-        if (n) list->push_back(n);
-    }
-    if (list->get_children().size() == 1) {
-        return list->get_children()[0];
-    } else if (list->get_children().size() > 1) {
-        return list_ptr;
-    } else {
-        return node_ptr();
-    }
-}
-
-void node::add_expressions(expression_set &output) const
-{
-    //Do nothing by default
-}
-
-} //ns formatting
-} //ns mapnik
diff --git a/src/formatting/expression.cpp b/src/formatting/expression.cpp
deleted file mode 100644
index eff17da..0000000
--- a/src/formatting/expression.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/formatting/expression_format.hpp>
-#include <mapnik/ptree_helpers.hpp>
-#include <mapnik/expression_string.hpp>
-#include <mapnik/expression_evaluator.hpp>
-#include <mapnik/text_properties.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/xml_node.hpp>
-
-// boost
-#include <boost/property_tree/ptree.hpp>
-
-
-namespace mapnik {
-namespace formatting {
-
-using boost::property_tree::ptree;
-void expression_format::to_xml(boost::property_tree::ptree &xml) const
-{
-    ptree &new_node = xml.push_back(ptree::value_type("ExpressionFormat", ptree()))->second;
-    if (face_name) set_attr(new_node, "face-name", to_expression_string(*face_name));
-    if (text_size) set_attr(new_node, "size", to_expression_string(*text_size));
-    if (character_spacing) set_attr(new_node, "character-spacing", to_expression_string(*character_spacing));
-    if (line_spacing) set_attr(new_node, "line-spacing", to_expression_string(*line_spacing));
-    if (text_opacity) set_attr(new_node, "opacity", to_expression_string(*text_opacity));
-    if (wrap_before) set_attr(new_node, "wrap-before", to_expression_string(*wrap_before));
-    if (wrap_char) set_attr(new_node, "wrap-character", to_expression_string(*wrap_char));
-    if (fill) set_attr(new_node, "fill", to_expression_string(*fill));
-    if (halo_fill) set_attr(new_node, "halo-fill", to_expression_string(*halo_fill));
-    if (halo_radius) set_attr(new_node, "halo-radius", to_expression_string(*halo_radius));
-    if (child_) child_->to_xml(new_node);
-}
-
-node_ptr expression_format::from_xml(xml_node const& xml)
-{
-    expression_format *n = new expression_format();
-    node_ptr np(n);
-
-    node_ptr child = node::from_xml(xml);
-    n->set_child(child);
-
-    n->face_name = get_expression(xml, "face-name");
-    n->text_size = get_expression(xml, "size");
-    n->character_spacing = get_expression(xml, "character-spacing");
-    n->line_spacing = get_expression(xml, "line-spacing");
-    n->text_opacity = get_expression(xml, "opacity");
-    n->wrap_before = get_expression(xml, "wrap-before");
-    n->wrap_char = get_expression(xml, "wrap-character");
-    n->fill = get_expression(xml, "fill");
-    n->halo_fill = get_expression(xml, "halo-fill");
-    n->halo_radius = get_expression(xml, "halo-radius");
-    return np;
-}
-
-expression_ptr expression_format::get_expression(xml_node const& xml, std::string name)
-{
-    boost::optional<expression_ptr> tmp = xml.get_opt_attr<expression_ptr>(name);
-    if (tmp) return *tmp;
-    return expression_ptr();
-}
-
-
-void expression_format::apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
-{
-    char_properties new_properties = p;
-    if (face_name) new_properties.face_name =
-                       boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *face_name).to_string();
-    if (text_size) new_properties.text_size =
-                       boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *text_size).to_double();
-    if (character_spacing) new_properties.character_spacing =
-                               boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *character_spacing).to_double();
-    if (line_spacing) new_properties.line_spacing =
-                          boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *line_spacing).to_double();
-    if (text_opacity) new_properties.text_opacity =
-                          boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *text_opacity).to_double();
-    if (wrap_before) new_properties.wrap_before =
-                         boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *wrap_before).to_bool();
-    if (wrap_char) new_properties.wrap_char =
-                       boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *character_spacing).to_unicode()[0];
-//    if (fill) new_properties.fill =
-//            boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *fill).to_color();
-//    if (halo_fill) new_properties.halo_fill =
-//            boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *halo_fill).to_color();
-    if (halo_radius) new_properties.halo_radius =
-                         boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *halo_radius).to_double();
-
-    if (child_) {
-        child_->apply(new_properties, feature, output);
-    } else {
-        MAPNIK_LOG_WARN(expression) << "Useless format: No text to format";
-    }
-}
-
-
-void expression_format::set_child(node_ptr child)
-{
-    child_ = child;
-}
-
-
-node_ptr expression_format::get_child() const
-{
-    return child_;
-}
-
-void expression_format::add_expressions(expression_set &output) const
-{
-    if (child_) child_->add_expressions(output);
-    output.insert(face_name);
-    output.insert(text_size);
-    output.insert(character_spacing);
-    output.insert(line_spacing);
-    output.insert(text_opacity);
-    output.insert(wrap_before);
-    output.insert(wrap_char);
-    output.insert(fill);
-    output.insert(halo_fill);
-    output.insert(halo_radius);
-}
-
-} //ns formatting
-} //ns mapnik
diff --git a/src/formatting/format.cpp b/src/formatting/format.cpp
deleted file mode 100644
index affea73..0000000
--- a/src/formatting/format.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/formatting/format.hpp>
-#include <mapnik/ptree_helpers.hpp>
-#include <mapnik/xml_node.hpp>
-
-// boost
-#include <boost/property_tree/ptree.hpp>
-
-namespace mapnik {
-namespace formatting {
-
-using boost::property_tree::ptree;
-
-void format_node::to_xml(ptree &xml) const
-{
-    ptree &new_node = xml.push_back(ptree::value_type("Format", ptree()))->second;
-    if (face_name) set_attr(new_node, "face-name", *face_name);
-    if (text_size) set_attr(new_node, "size", *text_size);
-    if (character_spacing) set_attr(new_node, "character-spacing", *character_spacing);
-    if (line_spacing) set_attr(new_node, "line-spacing", *line_spacing);
-    if (text_opacity) set_attr(new_node, "opacity", *text_opacity);
-    if (wrap_before) set_attr(new_node, "wrap-before", *wrap_before);
-    if (wrap_char) set_attr(new_node, "wrap-character", *wrap_char);
-    if (text_transform) set_attr(new_node, "text-transform", *text_transform);
-    if (fill) set_attr(new_node, "fill", *fill);
-    if (halo_fill) set_attr(new_node, "halo-fill", *halo_fill);
-    if (halo_radius) set_attr(new_node, "halo-radius", *halo_radius);
-    if (child_) child_->to_xml(new_node);
-}
-
-
-node_ptr format_node::from_xml(xml_node const& xml)
-{
-    format_node *n = new format_node();
-    node_ptr np(n);
-
-    node_ptr child = node::from_xml(xml);
-    n->set_child(child);
-
-    n->face_name = xml.get_opt_attr<std::string>("face-name");
-    /*TODO: Fontset is problematic. We don't have the fontsets pointer here... */
-    n->text_size = xml.get_opt_attr<double>("size");
-    n->character_spacing = xml.get_opt_attr<double>("character-spacing");
-    n->line_spacing = xml.get_opt_attr<double>("line-spacing");
-    n->text_opacity = xml.get_opt_attr<double>("opacity");
-    boost::optional<boolean> wrap = xml.get_opt_attr<boolean>("wrap-before");
-    if (wrap) n->wrap_before = *wrap;
-    n->wrap_char = xml.get_opt_attr<unsigned>("wrap-character");
-    n->text_transform = xml.get_opt_attr<text_transform_e>("text-transform");
-    n->fill = xml.get_opt_attr<color>("fill");
-    n->halo_fill = xml.get_opt_attr<color>("halo-fill");
-    n->halo_radius = xml.get_opt_attr<double>("halo-radius");
-    return np;
-}
-
-
-void format_node::apply(char_properties const& p, const feature_impl &feature, processed_text &output) const
-{
-    char_properties new_properties = p;
-    if (face_name) new_properties.face_name = *face_name;
-    if (text_size) new_properties.text_size = *text_size;
-    if (character_spacing) new_properties.character_spacing = *character_spacing;
-    if (line_spacing) new_properties.line_spacing = *line_spacing;
-    if (text_opacity) new_properties.text_opacity = *text_opacity;
-    if (wrap_before) new_properties.wrap_before = *wrap_before;
-    if (wrap_char) new_properties.wrap_char = *wrap_char;
-    if (text_transform) new_properties.text_transform = *text_transform;
-    if (fill) new_properties.fill = *fill;
-    if (halo_fill) new_properties.halo_fill = *halo_fill;
-    if (halo_radius) new_properties.halo_radius = *halo_radius;
-
-    if (child_) {
-        child_->apply(new_properties, feature, output);
-    } else {
-        MAPNIK_LOG_WARN(format) << "Useless format: No text to format";
-    }
-}
-
-
-void format_node::set_child(node_ptr child)
-{
-    child_ = child;
-}
-
-
-node_ptr format_node::get_child() const
-{
-    return child_;
-}
-
-void format_node::add_expressions(expression_set &output) const
-{
-    if (child_) child_->add_expressions(output);
-}
-
-} //ns formatting
-} //ns mapnik
diff --git a/src/formatting/list.cpp b/src/formatting/list.cpp
deleted file mode 100644
index d9ac173..0000000
--- a/src/formatting/list.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/formatting/list.hpp>
-#include <mapnik/feature.hpp>
-
-// boost
-#include <boost/foreach.hpp>
-#include <boost/property_tree/ptree.hpp>
-
-namespace mapnik {
-using boost::property_tree::ptree;
-
-namespace formatting {
-/************************************************************/
-
-void list_node::to_xml(boost::property_tree::ptree & xml) const
-{
-    BOOST_FOREACH(node_ptr const& node, children_)
-    {
-        node->to_xml(xml);
-    }
-}
-
-
-void list_node::apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
-{    
-    BOOST_FOREACH(node_ptr const& node, children_)
-    {
-        node->apply(p, feature, output);
-    }   
-}
-
-
-void list_node::add_expressions(expression_set &output) const
-{
-    BOOST_FOREACH(node_ptr const& node, children_)
-    {
-        node->add_expressions(output);
-    }
-}
-
-void list_node::push_back(node_ptr n)
-{
-    children_.push_back(n);
-}
-
-void list_node::clear()
-{
-    children_.clear();
-}
-
-void list_node::set_children(std::vector<node_ptr> const& children)
-{
-    children_ = children;
-}
-
-std::vector<node_ptr> const& list_node::get_children() const
-{
-    return children_;
-}
-} // ns mapnik
-} // ns formatting
-
diff --git a/src/formatting/registry.cpp b/src/formatting/registry.cpp
deleted file mode 100644
index b9a9d0b..0000000
--- a/src/formatting/registry.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-// mapnik
-#include <mapnik/formatting/registry.hpp>
-#include <mapnik/formatting/text.hpp>
-#include <mapnik/formatting/format.hpp>
-#include <mapnik/formatting/expression_format.hpp>
-#include <mapnik/xml_node.hpp>
-#include <mapnik/config_error.hpp>
-
-namespace mapnik
-{
-namespace formatting
-{
-
-registry::registry()
-{
-    register_name("<xmltext>", &text_node::from_xml);
-    register_name("Format", &format_node::from_xml);
-    register_name("ExpressionFormat", &expression_format::from_xml);
-}
-
-void registry::register_name(std::string const& name, from_xml_function_ptr ptr, bool overwrite)
-{
-    if (overwrite) {
-        map_[name] = ptr;
-    } else {
-        map_.insert(make_pair(name, ptr));
-    }
-}
-
-node_ptr registry::from_xml(xml_node const& xml)
-{
-    std::map<std::string, from_xml_function_ptr>::const_iterator itr = map_.find(xml.name());
-    if (itr == map_.end())  throw config_error("Unknown element '" + xml.name() + "'", xml);
-    xml.set_processed(true);
-    return itr->second(xml);
-}
-} //ns formatting
-} //ns mapnik
diff --git a/src/formatting/text.cpp b/src/formatting/text.cpp
deleted file mode 100644
index 1137b04..0000000
--- a/src/formatting/text.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-// mapnik
-#include <mapnik/formatting/text.hpp>
-#include <mapnik/expression_string.hpp>
-#include <mapnik/expression_evaluator.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/text_properties.hpp>
-#include <mapnik/processed_text.hpp>
-#include <mapnik/xml_node.hpp>
-
-// boost
-#include <boost/property_tree/ptree.hpp>
-#include <boost/make_shared.hpp>
-
-namespace mapnik
-{
-namespace formatting
-{
-
-using boost::property_tree::ptree;
-
-void text_node::to_xml(ptree &xml) const
-{
-    ptree &new_node = xml.push_back(ptree::value_type(
-                                        "<xmltext>", ptree()))->second;
-    new_node.put_value(to_expression_string(*text_));
-}
-
-node_ptr text_node::from_xml(xml_node const& xml)
-{
-    return boost::make_shared<text_node>(xml.get_value<expression_ptr>());
-}
-
-void text_node::apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
-{
-    UnicodeString text_str = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *text_).to_unicode();
-    if (p.text_transform == UPPERCASE)
-    {
-        text_str = text_str.toUpper();
-    }
-    else if (p.text_transform == LOWERCASE)
-    {
-        text_str = text_str.toLower();
-    }
-    else if (p.text_transform == CAPITALIZE)
-    {
-        text_str = text_str.toTitle(NULL);
-    }
-    if (text_str.length() > 0) {
-        output.push_back(p, text_str);
-    }
-}
-
-
-void text_node::add_expressions(expression_set &output) const
-{
-    if (text_) output.insert(text_);
-}
-
-
-void text_node::set_text(expression_ptr text)
-{
-    text_ = text;
-}
-
-
-expression_ptr text_node::get_text() const
-{
-    return text_;
-}
-
-} //ns formatting
-} //ns mapnik
diff --git a/src/fs.cpp b/src/fs.cpp
index 9eb0121..247c4a4 100644
--- a/src/fs.cpp
+++ b/src/fs.cpp
@@ -20,8 +20,6 @@
  *
  *****************************************************************************/
 
-//#define BOOST_FILESYSTEM_VERSION 2
-
 // mapnik
 #include <mapnik/utils.hpp>
 #include <mapnik/util/fs.hpp>
@@ -32,40 +30,6 @@
 // stl
 #include <stdexcept>
 
-#if (BOOST_FILESYSTEM_VERSION <= 2)
-#include <boost/scoped_array.hpp>
-
-namespace boost {
-namespace filesystem {
-path read_symlink(const path& p)
-{
-    path symlink_path;
-
-#ifdef BOOST_POSIX_API
-    for (std::size_t path_max = 64;; path_max *= 2)// loop 'til buffer is large enough
-    {
-        boost::scoped_array<char> buf(new char[path_max]);
-        ssize_t result;
-        if ((result=::readlink(p.string().c_str(), buf.get(), path_max))== -1)
-        {
-            throw std::runtime_error("could not read symlink");
-        }
-        else
-        {
-            if(result != static_cast<ssize_t>(path_max))
-            {
-                symlink_path.assign(buf.get(), buf.get() + result);
-                break;
-            }
-        }
-    }
-#endif
-    return symlink_path;
-}
-}
-}
-#endif
-
 namespace mapnik {
 
 namespace util {
@@ -88,6 +52,15 @@ namespace util {
 #endif
     }
 
+    bool is_regular_file(std::string const& filepath)
+    {
+#ifdef _WINDOWS
+        return boost::filesystem::is_regular_file(mapnik::utf8_to_utf16(filepath));
+#else
+        return boost::filesystem::is_regular_file(filepath);
+#endif
+    }
+
     bool remove(std::string const& filepath)
     {
 #ifdef _WINDOWS
@@ -121,31 +94,19 @@ namespace util {
         {
             absolute_path = boost::filesystem::read_symlink(absolute_path);
         }
-#if (BOOST_FILESYSTEM_VERSION == 3)
         return boost::filesystem::absolute(absolute_path.parent_path() / filepath).string();
-#else
-        return boost::filesystem::complete(absolute_path.branch_path() / filepath).normalize().string();
-#endif
     }
 
     std::string make_absolute(std::string const& filepath, std::string const& base)
     {
-#if (BOOST_FILESYSTEM_VERSION == 3)
         // TODO - normalize is now deprecated, use make_preferred?
         return boost::filesystem::absolute(boost::filesystem::path(base)/filepath).string();
-#else // v2
-        return boost::filesystem::complete(boost::filesystem::path(base)/filepath).normalize().string();
-#endif
     }
 
     std::string dirname(std::string const& filepath)
     {
         boost::filesystem::path bp(filepath);
-#if (BOOST_FILESYSTEM_VERSION == 3)
         return bp.parent_path().string();
-#else // v2
-        return bp.branch_path().string();
-#endif
     }
 
 } // end namespace util
diff --git a/src/function_call.cpp b/src/function_call.cpp
new file mode 100644
index 0000000..99b1435
--- /dev/null
+++ b/src/function_call.cpp
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/function_call.hpp>
+
+namespace mapnik {
+
+char const* unary_function_name(unary_function_impl const& fun)
+{
+    if (fun.target<sin_impl>()) return "sin";
+    else if (fun.target<cos_impl>()) return "cos";
+    else if (fun.target<tan_impl>()) return "tan";
+    else if (fun.target<atan_impl>()) return "atan";
+    else if (fun.target<exp_impl>()) return "exp";
+    else if (fun.target<abs_impl>()) return "abs";
+    else if (fun.target<length_impl>()) return "length";
+    else return "unknown";
+}
+
+// binary functions
+char const* binary_function_name(binary_function_impl const& fun)
+{
+    value_type(*const* f_ptr)(value_type const&, value_type const&) =
+        fun.target<value_type(*)
+                   (value_type const&, value_type const&)>();
+    if (f_ptr)
+    {
+        if (*f_ptr == min_impl) return "min";
+        else if(*f_ptr == max_impl) return "max";
+        else if(*f_ptr == pow_impl) return "pow";
+    }
+    return "unknown";
+}
+
+}
diff --git a/src/gamma_method.cpp b/src/gamma_method.cpp
deleted file mode 100644
index f1adf99..0000000
--- a/src/gamma_method.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/gamma_method.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-static const char * gamma_method_strings[] = {
-    "power", //agg::gamma_power
-    "linear", //agg::gamma_linear
-    "none", //agg::gamma_none
-    "threshold", //agg::gamma_threshold
-    "multiply", //agg::gamma_multiply",
-    ""
-};
-
-IMPLEMENT_ENUM( gamma_method_e, gamma_method_strings )
-
-}
diff --git a/src/graphics.cpp b/src/graphics.cpp
index 06dfce4..31d4536 100644
--- a/src/graphics.cpp
+++ b/src/graphics.cpp
@@ -30,13 +30,10 @@
 // agg
 #include "agg_rendering_buffer.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
 
-// boost
-#include <boost/scoped_array.hpp>
-
-// cairo
 #ifdef HAVE_CAIRO
-#include <mapnik/cairo_context.hpp>
+#include <mapnik/cairo/cairo_context.hpp>
 #endif
 
 namespace mapnik
@@ -45,19 +42,22 @@ image_32::image_32(int width,int height)
     :width_(width),
      height_(height),
      data_(width,height),
-     painted_(false) {}
+     painted_(false),
+     premultiplied_(false) {}
 
 image_32::image_32(const image_32& rhs)
     :width_(rhs.width_),
      height_(rhs.height_),
      data_(rhs.data_),
-     painted_(rhs.painted_)  {}
+     painted_(rhs.painted_),
+     premultiplied_(rhs.premultiplied_) {}
 
 #ifdef HAVE_CAIRO
 image_32::image_32(cairo_surface_ptr const& surface)
     :width_(cairo_image_surface_get_width(&*surface)),
      height_(cairo_image_surface_get_height(&*surface)),
-     data_(width_, height_)
+     data_(width_, height_),
+     premultiplied_(false)
 {
     painted_ = true;
     if ( cairo_image_surface_get_format(&*surface) != CAIRO_FORMAT_ARGB32)
@@ -68,7 +68,7 @@ image_32::image_32(cairo_surface_ptr const& surface)
 
     int stride = cairo_image_surface_get_stride(&*surface) / 4;
 
-    boost::scoped_array<unsigned int> out_row(new unsigned int[width_]);
+    const std::unique_ptr<unsigned int[]> out_row(new unsigned int[width_]);
     const unsigned int *in_row = (const unsigned int *)cairo_image_surface_get_data(&*surface);
 
     for (unsigned int row = 0; row < height_; row++, in_row += stride)
@@ -108,7 +108,6 @@ void image_32::set_grayscale_to_alpha()
         for (unsigned int x = 0; x < width_; ++x)
         {
             unsigned rgba = row_from[x];
-            // TODO - big endian support
             unsigned r = rgba & 0xff;
             unsigned g = (rgba >> 8 ) & 0xff;
             unsigned b = (rgba >> 16) & 0xff;
@@ -148,20 +147,6 @@ void image_32::set_alpha(float opacity)
         for (unsigned int x = 0; x < width_; ++x)
         {
             unsigned rgba = row_to[x];
-
-#ifdef MAPNIK_BIG_ENDIAN
-            unsigned a0 = (rgba & 0xff);
-            unsigned a1 = int( (rgba & 0xff) * opacity );
-
-            if (a0 == a1) continue;
-
-            unsigned r = (rgba >> 24) & 0xff;
-            unsigned g = (rgba >> 16 ) & 0xff;
-            unsigned b = (rgba >> 8) & 0xff;
-
-            row_to[x] = (a1) | (b << 8) |  (g << 16) | (r << 24) ;
-
-#else
             unsigned a0 = (rgba >> 24) & 0xff;
             unsigned a1 = int( ((rgba >> 24) & 0xff) * opacity );
             //unsigned a1 = opacity;
@@ -172,7 +157,6 @@ void image_32::set_alpha(float opacity)
             unsigned b = (rgba >> 16) & 0xff;
 
             row_to[x] = (a1 << 24)| (b << 16) |  (g << 8) | (r) ;
-#endif
         }
     }
 }
@@ -193,21 +177,23 @@ void image_32::premultiply()
     agg::rendering_buffer buffer(data_.getBytes(),width_,height_,width_ * 4);
     agg::pixfmt_rgba32 pixf(buffer);
     pixf.premultiply();
+    premultiplied_ = true;
 }
 
 void image_32::demultiply()
 {
     agg::rendering_buffer buffer(data_.getBytes(),width_,height_,width_ * 4);
-    agg::pixfmt_rgba32 pixf(buffer);
+    agg::pixfmt_rgba32_pre pixf(buffer);
     pixf.demultiply();
+    premultiplied_ = false;
 }
 
 void image_32::composite_pixel(unsigned op, int x,int y, unsigned c, unsigned cover, double opacity)
 {
-    typedef agg::rgba8 color_type;
-    typedef color_type::value_type value_type;
-    typedef agg::order_rgba order_type;
-    typedef agg::comp_op_adaptor_rgba<color_type,order_type> blender_type;
+    using color_type = agg::rgba8;
+    using value_type = color_type::value_type;
+    using order_type = agg::order_rgba;
+    using blender_type = agg::comp_op_adaptor_rgba<color_type,order_type>;
 
     if (checkBounds(x,y))
     {
diff --git a/src/grid/grid.cpp b/src/grid/grid.cpp
index a85ae30..208fe66 100644
--- a/src/grid/grid.cpp
+++ b/src/grid/grid.cpp
@@ -20,6 +20,8 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
 #include <mapnik/grid/grid.hpp>
 #include <mapnik/debug.hpp>
@@ -27,7 +29,6 @@
 #include <mapnik/value.hpp>
 
 // boost
-#include <boost/make_shared.hpp>
 
 namespace mapnik
 {
@@ -47,7 +48,7 @@ hit_grid<T>::hit_grid(int width, int height, std::string const& key, unsigned in
       names_(),
       f_keys_(),
       features_(),
-      ctx_(boost::make_shared<mapnik::context_type>())
+      ctx_(std::make_shared<mapnik::context_type>())
       {
           f_keys_[base_mask] = "";
           data_.set(base_mask);
@@ -66,10 +67,10 @@ hit_grid<T>::hit_grid(hit_grid<T> const& rhs)
       f_keys_(rhs.f_keys_),
       features_(rhs.features_),
       ctx_(rhs.ctx_)
-      {
-          f_keys_[base_mask] = "";
-          data_.set(base_mask);
-      }
+{
+    f_keys_[base_mask] = "";
+    data_.set(base_mask);
+}
 
 template <typename T>
 void hit_grid<T>::clear()
@@ -80,11 +81,11 @@ void hit_grid<T>::clear()
     names_.clear();
     f_keys_[base_mask] = "";
     data_.set(base_mask);
-    ctx_ = boost::make_shared<mapnik::context_type>();
+    ctx_ = std::make_shared<mapnik::context_type>();
 }
 
 template <typename T>
-void hit_grid<T>::add_feature(mapnik::feature_impl & feature)
+void hit_grid<T>::add_feature(mapnik::feature_impl const& feature)
 {
     value_type feature_id = feature.id();
     // avoid adding duplicate features (e.g. in the case of both a line symbolizer and a polygon symbolizer)
@@ -94,7 +95,8 @@ void hit_grid<T>::add_feature(mapnik::feature_impl & feature)
         return;
     }
 
-    if (ctx_->size() == 0) {
+    if (ctx_->size() == 0)
+    {
         context_type::map_type::const_iterator itr = feature.context()->begin();
         context_type::map_type::const_iterator end = feature.context()->end();
         for ( ;itr!=end; ++itr)
@@ -125,7 +127,7 @@ void hit_grid<T>::add_feature(mapnik::feature_impl & feature)
     {
         // TODO - consider shortcutting f_keys if feature_id == lookup_value
         // create a mapping between the pixel id and the feature key
-        f_keys_.insert(std::make_pair(feature_id,lookup_value));
+        f_keys_.emplace(feature_id,lookup_value);
         // if extra fields have been supplied, push them into grid memory
         if (!names_.empty())
         {
@@ -134,7 +136,7 @@ void hit_grid<T>::add_feature(mapnik::feature_impl & feature)
             // https://github.com/mapnik/mapnik/issues/1198
             mapnik::feature_ptr feature2(mapnik::feature_factory::create(ctx_,feature_id));
             feature2->set_data(feature.get_data());
-            features_.insert(std::make_pair(lookup_value,feature2));
+            features_.emplace(lookup_value,feature2);
         }
     }
     else
@@ -147,3 +149,5 @@ void hit_grid<T>::add_feature(mapnik::feature_impl & feature)
 template class hit_grid<mapnik::value_integer>;
 
 }
+
+#endif
diff --git a/src/grid/grid_renderer.cpp b/src/grid/grid_renderer.cpp
index 285e0c6..a9a4fc6 100644
--- a/src/grid/grid_renderer.cpp
+++ b/src/grid/grid_renderer.cpp
@@ -20,6 +20,8 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
 #include <mapnik/grid/grid_rasterizer.hpp>
 #include <mapnik/grid/grid_renderer.hpp>
@@ -58,34 +60,18 @@ template <typename T>
 grid_renderer<T>::grid_renderer(Map const& m, T & pixmap, double scale_factor, unsigned offset_x, unsigned offset_y)
     : feature_style_processor<grid_renderer>(m, scale_factor),
       pixmap_(pixmap),
-      width_(pixmap_.width()),
-      height_(pixmap_.height()),
-      scale_factor_(scale_factor),
-      // NOTE: can change this to m dims instead of pixmap_ if render-time
-      // resolution support is dropped from grid_renderer python interface
-      t_(pixmap_.width(),pixmap_.height(),m.get_current_extent(),offset_x,offset_y),
-      font_engine_(),
-      font_manager_(font_engine_),
-      detector_(boost::make_shared<label_collision_detector4>(box2d<double>(-m.buffer_size(), -m.buffer_size(), m.width() + m.buffer_size() ,m.height() + m.buffer_size()))),
-      ras_ptr(new grid_rasterizer)
+      ras_ptr(new grid_rasterizer),
+      common_(m, attributes(), offset_x, offset_y, m.width(), m.height(), scale_factor)
 {
     setup(m);
 }
 
 template <typename T>
-grid_renderer<T>::grid_renderer(Map const& m, request const& req, T & pixmap, double scale_factor, unsigned offset_x, unsigned offset_y)
+grid_renderer<T>::grid_renderer(Map const& m, request const& req, attributes const& vars, T & pixmap, double scale_factor, unsigned offset_x, unsigned offset_y)
     : feature_style_processor<grid_renderer>(m, scale_factor),
       pixmap_(pixmap),
-      width_(pixmap_.width()),
-      height_(pixmap_.height()),
-      scale_factor_(scale_factor),
-      // NOTE: can change this to m dims instead of pixmap_ if render-time
-      // resolution support is dropped from grid_renderer python interface
-      t_(pixmap_.width(),pixmap_.height(),req.extent(),offset_x,offset_y),
-      font_engine_(),
-      font_manager_(font_engine_),
-      detector_(boost::make_shared<label_collision_detector4>(box2d<double>(-req.buffer_size(), -req.buffer_size(), req.width() + req.buffer_size() ,req.height() + req.buffer_size()))),
-      ras_ptr(new grid_rasterizer)
+      ras_ptr(new grid_rasterizer),
+      common_(m, req, vars, offset_x, offset_y, req.width(), req.height(), scale_factor)
 {
     setup(m);
 }
@@ -105,11 +91,11 @@ void grid_renderer<T>::start_map_processing(Map const& m)
 {
     MAPNIK_LOG_DEBUG(grid_renderer) << "grid_renderer: Start map processing bbox=" << m.get_current_extent();
 
-    ras_ptr->clip_box(0,0,width_,height_);
+    ras_ptr->clip_box(0,0,common_.width_,common_.height_);
 }
 
 template <typename T>
-void grid_renderer<T>::end_map_processing(Map const& m)
+void grid_renderer<T>::end_map_processing(Map const& /*m*/)
 {
     MAPNIK_LOG_DEBUG(grid_renderer) << "grid_renderer: End map processing";
 }
@@ -123,13 +109,13 @@ void grid_renderer<T>::start_layer_processing(layer const& lay, box2d<double> co
 
     if (lay.clear_label_cache())
     {
-        detector_->clear();
+        common_.detector_->clear();
     }
-    query_extent_ = query_extent;
+    common_.query_extent_ = query_extent;
     boost::optional<box2d<double> > const& maximum_extent = lay.maximum_extent();
     if (maximum_extent)
     {
-        query_extent_.clip(*maximum_extent);
+        common_.query_extent_.clip(*maximum_extent);
     }
 }
 
@@ -140,17 +126,15 @@ void grid_renderer<T>::end_layer_processing(layer const&)
 }
 
 template <typename T>
-void grid_renderer<T>::render_marker(mapnik::feature_impl & feature, unsigned int step, pixel_position const& pos, marker const& marker, agg::trans_affine const& tr, double opacity, composite_mode_e comp_op)
+void grid_renderer<T>::render_marker(mapnik::feature_impl const& feature, pixel_position const& pos, marker const& marker, agg::trans_affine const& tr, double opacity, composite_mode_e /*comp_op*/)
 {
     if (marker.is_vector())
     {
-        typedef coord_transform<CoordTransform,geometry_type> path_type;
-        typedef typename grid_renderer_base_type::pixfmt_type pixfmt_type;
-        typedef typename grid_renderer_base_type::pixfmt_type::color_type color_type;
-        typedef agg::renderer_scanline_bin_solid<grid_renderer_base_type> renderer_type;
+        using pixfmt_type = typename grid_renderer_base_type::pixfmt_type;
+        using renderer_type = agg::renderer_scanline_bin_solid<grid_renderer_base_type>;
         agg::scanline_bin sl;
 
-        grid_rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_);
+        grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_);
         pixfmt_type pixf(buf);
 
         grid_renderer_base_type renb(pixf);
@@ -164,7 +148,7 @@ void grid_renderer<T>::render_marker(mapnik::feature_impl & feature, unsigned in
         agg::trans_affine mtx = agg::trans_affine_translation(-c.x,-c.y);
         // apply symbol transformation to get to map space
         mtx *= tr;
-        mtx *= agg::trans_affine_scaling(scale_factor_*(1.0/step));
+        mtx *= agg::trans_affine_scaling(common_.scale_factor_);
         // render the marker at the center of the marker box
         mtx.translate(pos.x, pos.y);
         using namespace mapnik::svg;
@@ -186,7 +170,7 @@ void grid_renderer<T>::render_marker(mapnik::feature_impl & feature, unsigned in
         double height = data.height();
         double cx = 0.5 * width;
         double cy = 0.5 * height;
-        if (step == 1 && (std::fabs(1.0 - scale_factor_) < 0.001 && tr.is_identity()))
+        if ((std::fabs(1.0 - common_.scale_factor_) < 0.001 && tr.is_identity()))
         {
             // TODO - support opacity
             pixmap_.set_rectangle(feature.id(), data,
@@ -195,14 +179,13 @@ void grid_renderer<T>::render_marker(mapnik::feature_impl & feature, unsigned in
         }
         else
         {
-            // TODO - remove support for step != or add support for agg scaling with opacity
-            double ratio = (1.0/step);
-            image_data_32 target(ratio * data.width(), ratio * data.height());
+            image_data_32 target(data.width(), data.height());
             mapnik::scale_image_agg<image_data_32>(target,
                                                    data,
                                                    SCALING_NEAR,
-                                                   ratio,
-                                                   ratio);
+                                                   1,
+                                                   1,
+                                                   0.0, 0.0, 1.0); // TODO: is 1.0 a valid default here, and do we even care in grid_renderer what the image looks like?
             pixmap_.set_rectangle(feature.id(), target,
                                   boost::math::iround(pos.x - cx),
                                   boost::math::iround(pos.y - cy));
@@ -214,3 +197,5 @@ void grid_renderer<T>::render_marker(mapnik::feature_impl & feature, unsigned in
 template class grid_renderer<grid>;
 
 }
+
+#endif
diff --git a/src/grid/process_building_symbolizer.cpp b/src/grid/process_building_symbolizer.cpp
index dc967f0..319e1a2 100644
--- a/src/grid/process_building_symbolizer.cpp
+++ b/src/grid/process_building_symbolizer.cpp
@@ -20,19 +20,21 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
+#include <mapnik/make_unique.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/grid/grid_rasterizer.hpp>
 #include <mapnik/grid/grid_renderer.hpp>
 #include <mapnik/grid/grid_renderer_base.hpp>
 #include <mapnik/grid/grid.hpp>
+#include <mapnik/transform_path_adapter.hpp>
 #include <mapnik/segment.hpp>
 #include <mapnik/expression_evaluator.hpp>
-#include <mapnik/building_symbolizer.hpp>
 #include <mapnik/expression.hpp>
-
-// boost
-#include <boost/scoped_ptr.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/renderer_common/process_building_symbolizer.hpp>
 
 // stl
 #include <deque>
@@ -51,13 +53,13 @@ void grid_renderer<T>::process(building_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    typedef typename grid_renderer_base_type::pixfmt_type pixfmt_type;
-    typedef typename grid_renderer_base_type::pixfmt_type::color_type color_type;
-    typedef agg::renderer_scanline_bin_solid<grid_renderer_base_type> renderer_type;
-    typedef coord_transform<CoordTransform,geometry_type> path_type;
+    using pixfmt_type = typename grid_renderer_base_type::pixfmt_type;
+    using color_type = typename grid_renderer_base_type::pixfmt_type::color_type;
+    using renderer_type = agg::renderer_scanline_bin_solid<grid_renderer_base_type>;
+    using path_type = transform_path_adapter<view_transform,geometry_type>;
     agg::scanline_bin sl;
 
-    grid_rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_);
+    grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_);
     pixfmt_type pixf(buf);
 
     grid_renderer_base_type renb(pixf);
@@ -65,92 +67,32 @@ void grid_renderer<T>::process(building_symbolizer const& sym,
 
     ras_ptr->reset();
 
-    double height = 0.0;
-    expression_ptr height_expr = sym.height();
-    if (height_expr)
-    {
-        value_type result = boost::apply_visitor(evaluate<feature_impl,value_type>(feature), *height_expr);
-        height = result.to_double() * scale_factor_;
-    }
-
-    for (unsigned i=0;i<feature.num_geometries();++i)
-    {
-        geometry_type & geom = feature.get_geometry(i);
-        if (geom.size() > 2)
-        {
-            boost::scoped_ptr<geometry_type> frame(new geometry_type(LineString));
-            boost::scoped_ptr<geometry_type> roof(new geometry_type(Polygon));
-            std::deque<segment_t> face_segments;
-            double x0(0);
-            double y0(0);
-            unsigned cm = geom.vertex(&x0,&y0);
-            for (unsigned j=1;j<geom.size();++j)
-            {
-                double x(0);
-                double y(0);
-                cm = geom.vertex(&x,&y);
-                if (cm == SEG_MOVETO)
-                {
-                    frame->move_to(x,y);
-                }
-                else if (cm == SEG_LINETO)
-                {
-                    frame->line_to(x,y);
-                    face_segments.push_back(segment_t(x0,y0,x,y));
-                }
-
-                x0 = x;
-                y0 = y;
-            }
-            std::sort(face_segments.begin(),face_segments.end(), y_order);
-            std::deque<segment_t>::const_iterator itr=face_segments.begin();
-            for (;itr!=face_segments.end();++itr)
-            {
-                boost::scoped_ptr<geometry_type> faces(new geometry_type(Polygon));
-                faces->move_to(itr->get<0>(),itr->get<1>());
-                faces->line_to(itr->get<2>(),itr->get<3>());
-                faces->line_to(itr->get<2>(),itr->get<3>() + height);
-                faces->line_to(itr->get<0>(),itr->get<1>() + height);
-
-                path_type faces_path (t_,*faces,prj_trans);
-                ras_ptr->add_path(faces_path);
-                ren.color(color_type(feature.id()));
-                agg::render_scanlines(*ras_ptr, sl, ren);
-                ras_ptr->reset();
-
-                frame->move_to(itr->get<0>(),itr->get<1>());
-                frame->line_to(itr->get<0>(),itr->get<1>()+height);
-            }
+    double height = get<value_double>(sym, keys::height, feature, common_.vars_, 0.0);
 
-            geom.rewind(0);
-            for (unsigned j=0;j<geom.size();++j)
-            {
-                double x,y;
-                cm = geom.vertex(&x,&y);
-                if (cm == SEG_MOVETO)
-                {
-                    frame->move_to(x,y+height);
-                    roof->move_to(x,y+height);
-                }
-                else if (cm == SEG_LINETO)
-                {
-                    frame->line_to(x,y+height);
-                    roof->line_to(x,y+height);
-                }
-            }
-            path_type path(t_,*frame,prj_trans);
+    render_building_symbolizer(
+        feature, height,
+        [&](geometry_type &faces) {
+            path_type faces_path (common_.t_,faces,prj_trans);
+            ras_ptr->add_path(faces_path);
+            ren.color(color_type(feature.id()));
+            agg::render_scanlines(*ras_ptr, sl, ren);
+            ras_ptr->reset();
+        },
+        [&](geometry_type &frame) {
+            path_type path(common_.t_,frame,prj_trans);
             agg::conv_stroke<path_type> stroke(path);
             ras_ptr->add_path(stroke);
             ren.color(color_type(feature.id()));
             agg::render_scanlines(*ras_ptr, sl, ren);
             ras_ptr->reset();
-
-            path_type roof_path (t_,*roof,prj_trans);
+        },
+        [&](geometry_type &roof) {
+            path_type roof_path (common_.t_,roof,prj_trans);
             ras_ptr->add_path(roof_path);
             ren.color(color_type(feature.id()));
             agg::render_scanlines(*ras_ptr, sl, ren);
-        }
-    }
+        });
+
     pixmap_.add_feature(feature);
 }
 
@@ -159,3 +101,5 @@ template void grid_renderer<grid>::process(building_symbolizer const&,
                                            proj_transform const&);
 
 }
+
+#endif
diff --git a/src/grid/process_group_symbolizer.cpp b/src/grid/process_group_symbolizer.cpp
new file mode 100644
index 0000000..aedd0b4
--- /dev/null
+++ b/src/grid/process_group_symbolizer.cpp
@@ -0,0 +1,134 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/feature.hpp>
+#include <mapnik/grid/grid_rasterizer.hpp>
+#include <mapnik/grid/grid_renderer.hpp>
+#include <mapnik/grid/grid_renderer_base.hpp>
+#include <mapnik/grid/grid.hpp>
+#include <mapnik/attribute_collector.hpp>
+#include <mapnik/text/placement_finder.hpp>
+#include <mapnik/text/symbolizer_helpers.hpp>
+#include <mapnik/text/renderer.hpp>
+#include <mapnik/group/group_layout_manager.hpp>
+#include <mapnik/group/group_symbolizer_helper.hpp>
+#include <mapnik/util/variant.hpp>
+#include <mapnik/geom_util.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/label_collision_detector.hpp>
+
+#include <mapnik/geom_util.hpp>
+#include <mapnik/renderer_common/process_point_symbolizer.hpp>
+#include <mapnik/renderer_common/process_group_symbolizer.hpp>
+
+// agg
+#include "agg_trans_affine.h"
+
+namespace mapnik {
+
+/**
+ * Render a thunk which was frozen from a previous call to
+ * extract_bboxes. We should now have a new offset at which
+ * to render it, and the boxes themselves should already be
+ * in the detector from the placement_finder.
+ */
+template <typename T0>
+struct thunk_renderer : public util::static_visitor<>
+{
+    using renderer_type = grid_renderer<T0>;
+    using buffer_type = typename renderer_type::buffer_type;
+    using text_renderer_type = grid_text_renderer<buffer_type>;
+
+    thunk_renderer(renderer_type &ren,
+                   buffer_type &pixmap,
+                   renderer_common &common,
+                   feature_impl &feature,
+                   pixel_position const &offset)
+        : ren_(ren), pixmap_(pixmap), common_(common),
+          feature_(feature), offset_(offset)
+    {}
+
+    void operator()(point_render_thunk const &thunk) const
+    {
+        ren_.render_marker(feature_, offset_ + thunk.pos_,
+                           *thunk.marker_, thunk.tr_, thunk.opacity_, thunk.comp_op_);
+    }
+
+    void operator()(text_render_thunk const &thunk) const
+    {
+        text_renderer_type ren(pixmap_, thunk.comp_op_, common_.scale_factor_);
+        value_integer feature_id = feature_.id();
+
+        render_offset_placements(
+            thunk.placements_,
+            offset_,
+            [&] (glyph_positions_ptr glyphs)
+            {
+                if (glyphs->marker())
+                {
+                    ren_.render_marker(feature_,
+                                       glyphs->marker_pos(),
+                                       *(glyphs->marker()->marker),
+                                       glyphs->marker()->transform,
+                                       thunk.opacity_, thunk.comp_op_);
+                }
+                ren.render(*glyphs, feature_id);
+            });
+    }
+
+    template <typename T1>
+    void operator()(T1 const &) const
+    {
+        // TODO: warning if unimplemented?
+    }
+
+private:
+    renderer_type &ren_;
+    buffer_type &pixmap_;
+    renderer_common &common_;
+    feature_impl &feature_;
+    pixel_position offset_;
+};
+
+template <typename T>
+void  grid_renderer<T>::process(group_symbolizer const& sym,
+                                mapnik::feature_impl & feature,
+                                proj_transform const& prj_trans)
+{
+    render_group_symbolizer(
+        sym, feature, common_.vars_, prj_trans, common_.query_extent_, common_,
+        [&](render_thunk_list const& thunks, pixel_position const& render_offset)
+        {
+            thunk_renderer<T> ren(*this, pixmap_, common_, feature, render_offset);
+            for (render_thunk_ptr const& thunk : thunks)
+            {
+                util::apply_visitor(ren, *thunk);
+            }
+        });
+}
+
+template void grid_renderer<grid>::process(group_symbolizer const&,
+                                           mapnik::feature_impl &,
+                                           proj_transform const&);
+
+}
diff --git a/src/grid/process_line_pattern_symbolizer.cpp b/src/grid/process_line_pattern_symbolizer.cpp
index 542dbca..9505987 100644
--- a/src/grid/process_line_pattern_symbolizer.cpp
+++ b/src/grid/process_line_pattern_symbolizer.cpp
@@ -20,13 +20,19 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
+#include <mapnik/debug.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/grid/grid_rasterizer.hpp>
 #include <mapnik/grid/grid_renderer.hpp>
 #include <mapnik/grid/grid_renderer_base.hpp>
 #include <mapnik/grid/grid.hpp>
-#include <mapnik/line_pattern_symbolizer.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/vertex_converters.hpp>
+#include <mapnik/parse_path.hpp>
 
 // agg
 #include "agg_rasterizer_scanline_aa.h"
@@ -45,13 +51,32 @@ void grid_renderer<T>::process(line_pattern_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    typedef coord_transform<CoordTransform,geometry_type> path_type;
-    typedef typename grid_renderer_base_type::pixfmt_type pixfmt_type;
-    typedef typename grid_renderer_base_type::pixfmt_type::color_type color_type;
-    typedef agg::renderer_scanline_bin_solid<grid_renderer_base_type> renderer_type;
+    std::string filename = get<std::string, keys::file>(sym, feature, common_.vars_);
+    if (filename.empty()) return;
+    boost::optional<mapnik::marker_ptr> mark = marker_cache::instance().find(filename, true);
+    if (!mark) return;
+
+    if (!(*mark)->is_bitmap())
+    {
+        MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Only images (not '" << filename << "') are supported in the line_pattern_symbolizer";
+        return;
+    }
+
+    boost::optional<image_ptr> pat = (*mark)->get_bitmap_data();
+    if (!pat) return;
+
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double offset = get<value_double, keys::offset>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
+
+    using pixfmt_type = typename grid_renderer_base_type::pixfmt_type;
+    using color_type = typename grid_renderer_base_type::pixfmt_type::color_type;
+    using renderer_type = agg::renderer_scanline_bin_solid<grid_renderer_base_type>;
+
     agg::scanline_bin sl;
 
-    grid_rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_);
+    grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_);
     pixfmt_type pixf(buf);
 
     grid_renderer_base_type renb(pixf);
@@ -59,19 +84,57 @@ void grid_renderer<T>::process(line_pattern_symbolizer const& sym,
 
     ras_ptr->reset();
 
-    // TODO - actually handle image dimensions
-    int stroke_width = 2;
+    int stroke_width = (*pat)->width();
 
-    for (unsigned i=0;i<feature.num_geometries();++i)
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform)
+    {
+        evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    }
+
+    box2d<double> clipping_extent = common_.query_extent_;
+    if (clip)
+    {
+        double padding = (double)(common_.query_extent_.width()/pixmap_.width());
+        double half_stroke = stroke_width/2.0;
+        if (half_stroke > 1)
+            padding *= half_stroke;
+        if (std::fabs(offset) > 0)
+            padding *= std::fabs(offset) * 1.2;
+        padding *= common_.scale_factor_;
+        clipping_extent.pad(padding);
+    }
+
+    // to avoid the complexity of using an agg pattern filter instead
+    // we create a line_symbolizer in order to fake the pattern
+    line_symbolizer line;
+    put<value_double>(line, keys::stroke_width, value_double(stroke_width));
+    // TODO: really should pass the offset to the fake line too, but
+    // this wasn't present in the previous version and makes the test
+    // fail - in this case, probably the test should be updated.
+    //put<value_double>(line, keys::offset, value_double(offset));
+    put<value_double>(line, keys::simplify_tolerance, value_double(simplify_tolerance));
+    put<value_double>(line, keys::smooth, value_double(smooth));
+
+    vertex_converter<grid_rasterizer,
+                     clip_line_tag, transform_tag,
+                     offset_transform_tag, affine_transform_tag,
+                     simplify_tag, smooth_tag, stroke_tag>
+        converter(clipping_extent,*ras_ptr,line,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
+    if (clip) converter.set<clip_line_tag>(); // optional clip (default: true)
+    converter.set<transform_tag>(); // always transform
+    if (std::fabs(offset) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
+    converter.set<affine_transform_tag>(); // optional affine transform
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+    converter.set<stroke_tag>(); //always stroke
+
+    for (geometry_type & geom : feature.paths())
     {
-        geometry_type & geom = feature.get_geometry(i);
         if (geom.size() > 1)
         {
-            path_type path(t_,geom,prj_trans);
-            agg::conv_stroke<path_type> stroke(path);
-            stroke.generator().miter_limit(4.0);
-            stroke.generator().width(stroke_width * scale_factor_);
-            ras_ptr->add_path(stroke);
+            converter.apply(geom);
         }
     }
 
@@ -90,3 +153,5 @@ template void grid_renderer<grid>::process(line_pattern_symbolizer const&,
                                            proj_transform const&);
 
 }
+
+#endif
diff --git a/src/grid/process_line_symbolizer.cpp b/src/grid/process_line_symbolizer.cpp
index c188b64..a54738e 100644
--- a/src/grid/process_line_symbolizer.cpp
+++ b/src/grid/process_line_symbolizer.cpp
@@ -20,14 +20,14 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/grid/grid_rasterizer.hpp>
 #include <mapnik/grid/grid_renderer.hpp>
 #include <mapnik/grid/grid_renderer_base.hpp>
 #include <mapnik/grid/grid.hpp>
-
-#include <mapnik/line_symbolizer.hpp>
 #include <mapnik/vertex_converters.hpp>
 
 // agg
@@ -37,9 +37,6 @@
 #include "agg_conv_stroke.h"
 #include "agg_conv_dash.h"
 
-// boost
-#include <boost/foreach.hpp>
-
 // stl
 #include <string>
 
@@ -50,15 +47,13 @@ void grid_renderer<T>::process(line_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    typedef typename grid_renderer_base_type::pixfmt_type pixfmt_type;
-    typedef typename grid_renderer_base_type::pixfmt_type::color_type color_type;
-    typedef agg::renderer_scanline_bin_solid<grid_renderer_base_type> renderer_type;
-    typedef boost::mpl::vector<clip_line_tag, transform_tag,
-                               offset_transform_tag, affine_transform_tag,
-                               simplify_tag, smooth_tag, dash_tag, stroke_tag> conv_types;
+    using pixfmt_type = typename grid_renderer_base_type::pixfmt_type;
+    using color_type = typename grid_renderer_base_type::pixfmt_type::color_type;
+    using renderer_type = agg::renderer_scanline_bin_solid<grid_renderer_base_type>;
+
     agg::scanline_bin sl;
 
-    grid_rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_);
+    grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_);
     pixfmt_type pixf(buf);
 
     grid_renderer_base_type renb(pixf);
@@ -66,37 +61,48 @@ void grid_renderer<T>::process(line_symbolizer const& sym,
 
     ras_ptr->reset();
 
-    stroke const& stroke_ = sym.get_stroke();
-
     agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform)
+    {
+        evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    }
+
+    box2d<double> clipping_extent = common_.query_extent_;
+
+    bool clip = get<value_bool>(sym, keys::clip, feature, common_.vars_, false);
+    double width = get<value_double>(sym, keys::stroke_width, feature, common_.vars_,1.0);
+    double offset = get<value_double>(sym, keys::offset, feature, common_.vars_,0.0);
+    double simplify_tolerance = get<value_double>(sym, keys::simplify_tolerance, feature, common_.vars_,0.0);
+    double smooth = get<value_double>(sym, keys::smooth, feature, common_.vars_,false);
+    bool has_dash = has_key(sym, keys::stroke_dasharray);
 
-    box2d<double> clipping_extent = query_extent_;
-    if (sym.clip())
+    if (clip)
     {
-        double padding = (double)(query_extent_.width()/pixmap_.width());
-        double half_stroke = stroke_.get_width()/2.0;
+        double padding = (double)(common_.query_extent_.width()/pixmap_.width());
+        double half_stroke = width/2.0;
         if (half_stroke > 1)
             padding *= half_stroke;
-        if (std::fabs(sym.offset()) > 0)
-            padding *= std::fabs(sym.offset()) * 1.2;
-        padding *= scale_factor_;
+        if (std::fabs(offset) > 0)
+            padding *= std::fabs(offset) * 1.2;
+        padding *= common_.scale_factor_;
         clipping_extent.pad(padding);
     }
 
-    vertex_converter<box2d<double>, grid_rasterizer, line_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(clipping_extent,*ras_ptr,sym,t_,prj_trans,tr,scale_factor_);
-    if (sym.clip()) converter.set<clip_line_tag>(); // optional clip (default: true)
+    vertex_converter<grid_rasterizer, clip_line_tag, transform_tag,
+                     offset_transform_tag, affine_transform_tag,
+                     simplify_tag, smooth_tag, dash_tag, stroke_tag>
+        converter(clipping_extent,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
+    if (clip) converter.set<clip_line_tag>(); // optional clip (default: true)
     converter.set<transform_tag>(); // always transform
-    if (std::fabs(sym.offset()) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
+    if (std::fabs(offset) > 0.0) converter.set<offset_transform_tag>(); // parallel offset
     converter.set<affine_transform_tag>(); // optional affine transform
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-    if (stroke_.has_dash()) converter.set<dash_tag>();
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
+    if (has_dash) converter.set<dash_tag>();
     converter.set<stroke_tag>(); //always stroke
 
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
+    for ( geometry_type & geom : feature.paths())
     {
         if (geom.size() > 1)
         {
@@ -106,6 +112,7 @@ void grid_renderer<T>::process(line_symbolizer const& sym,
 
     // render id
     ren.color(color_type(feature.id()));
+    ras_ptr->filling_rule(agg::fill_non_zero);
     agg::render_scanlines(*ras_ptr, sl, ren);
 
     // add feature properties to grid cache
@@ -120,3 +127,4 @@ template void grid_renderer<grid>::process(line_symbolizer const&,
 
 }
 
+#endif
diff --git a/src/grid/process_markers_symbolizer.cpp b/src/grid/process_markers_symbolizer.cpp
index 94cd4cc..bf0828c 100644
--- a/src/grid/process_markers_symbolizer.cpp
+++ b/src/grid/process_markers_symbolizer.cpp
@@ -20,6 +20,8 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 /*
 
 porting notes -->
@@ -51,7 +53,6 @@ porting notes -->
 
 #include <mapnik/debug.hpp>
 #include <mapnik/geom_util.hpp>
-#include <mapnik/vertex_converters.hpp>
 #include <mapnik/marker.hpp>
 #include <mapnik/marker_cache.hpp>
 #include <mapnik/marker_helpers.hpp>
@@ -59,13 +60,12 @@ porting notes -->
 #include <mapnik/svg/svg_storage.hpp>
 #include <mapnik/svg/svg_path_adapter.hpp>
 #include <mapnik/svg/svg_path_attributes.hpp>
-#include <mapnik/markers_symbolizer.hpp>
 #include <mapnik/parse_path.hpp>
+#include <mapnik/renderer_common/process_markers_symbolizer.hpp>
 
 // agg
 #include "agg_basics.h"
 #include "agg_rendering_buffer.h"
-#include "agg_pixfmt_rgba.h"
 #include "agg_rasterizer_scanline_aa.h"
 
 // boost
@@ -73,7 +73,7 @@ porting notes -->
 
 // stl
 #include <algorithm>
-
+#include <tuple>
 
 namespace mapnik {
 
@@ -82,180 +82,38 @@ void grid_renderer<T>::process(markers_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    typedef grid_rendering_buffer buf_type;
-    typedef typename grid_renderer_base_type::pixfmt_type pixfmt_type;
-    typedef typename grid_renderer_base_type::pixfmt_type::color_type color_type;
-    typedef agg::renderer_scanline_bin_solid<grid_renderer_base_type> renderer_type;
-    typedef label_collision_detector4 detector_type;
-    typedef boost::mpl::vector<clip_line_tag,clip_poly_tag,transform_tag,smooth_tag> conv_types;
-
-    std::string filename = path_processor_type::evaluate(*sym.get_filename(), feature);
-
-    if (!filename.empty())
-    {
-        boost::optional<marker_ptr> mark = mapnik::marker_cache::instance().find(filename, true);
-        if (mark && *mark)
-        {
-            ras_ptr->reset();
-            agg::trans_affine geom_tr;
-            evaluate_transform(geom_tr, feature, sym.get_transform());
-            agg::trans_affine tr = agg::trans_affine_scaling(scale_factor_*(1.0/pixmap_.get_resolution()));
-
-            if ((*mark)->is_vector())
-            {
-                using namespace mapnik::svg;
-                typedef agg::pod_bvector<path_attributes> svg_attribute_type;
-                typedef svg_renderer_agg<svg_path_adapter,
-                                     svg_attribute_type,
-                                     renderer_type,
-                                     pixfmt_type > svg_renderer_type;
-                typedef vector_markers_rasterizer_dispatch_grid<buf_type,
-                                     svg_renderer_type,
-                                     grid_rasterizer,
-                                     detector_type,
-                                     mapnik::grid > dispatch_type;
-                boost::optional<svg_path_ptr> const& stock_vector_marker = (*mark)->get_vector_data();
-                expression_ptr const& width_expr = sym.get_width();
-                expression_ptr const& height_expr = sym.get_height();
-
-                // special case for simple ellipse markers
-                // to allow for full control over rx/ry dimensions
-                if (filename == "shape://ellipse"
-                   && (width_expr || height_expr))
-                {
-                    svg_storage_type marker_ellipse;
-                    vertex_stl_adapter<svg_path_storage> stl_storage(marker_ellipse.source());
-                    svg_path_adapter svg_path(stl_storage);
-                    // TODO - clamping to >= 4 pixels
-                    build_ellipse(sym, feature, marker_ellipse, svg_path);
-                    svg_attribute_type attributes;
-                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym);
-                    svg_renderer_type svg_renderer(svg_path, result ? attributes : (*stock_vector_marker)->attributes());
-                    evaluate_transform(tr, feature, sym.get_image_transform());
-                    box2d<double> bbox = marker_ellipse.bounding_box();
-                    coord2d center = bbox.center();
-                    agg::trans_affine_translation recenter(-center.x, -center.y);
-                    agg::trans_affine marker_trans = recenter * tr;
-                    buf_type render_buf(pixmap_.raw_data(), width_, height_, width_);
-                    dispatch_type rasterizer_dispatch(render_buf,
-                                                      svg_renderer,
-                                                      *ras_ptr,
-                                                      bbox,
-                                                      marker_trans,
-                                                      sym,
-                                                      *detector_,
-                                                      scale_factor_,
-                                                      feature,
-                                                      pixmap_);
-                    vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                        converter(query_extent_, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_);
-                    if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                    {
-                        eGeomType type = feature.paths()[0].type();
-                        if (type == Polygon)
-                            converter.template set<clip_poly_tag>();
-                        // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                        //else if (type == LineString)
-                        //    converter.template set<clip_line_tag>();
-                        // don't clip if type==Point
-                    }
-                    converter.template set<transform_tag>(); //always transform
-                    if (sym.smooth() > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
-                    apply_markers_multi(feature, converter, sym);
-                }
-                else
-                {
-                    box2d<double> const& bbox = (*mark)->bounding_box();
-                    setup_transform_scaling(tr, bbox.width(), bbox.height(), feature, sym);
-                    evaluate_transform(tr, feature, sym.get_image_transform());
-                    // TODO - clamping to >= 4 pixels
-                    coord2d center = bbox.center();
-                    agg::trans_affine_translation recenter(-center.x, -center.y);
-                    agg::trans_affine marker_trans = recenter * tr;
-                    vertex_stl_adapter<svg_path_storage> stl_storage((*stock_vector_marker)->source());
-                    svg_path_adapter svg_path(stl_storage);
-                    svg_attribute_type attributes;
-                    bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym);
-                    svg_renderer_type svg_renderer(svg_path, result ? attributes : (*stock_vector_marker)->attributes());
-                    buf_type render_buf(pixmap_.raw_data(), width_, height_, width_);
-                    dispatch_type rasterizer_dispatch(render_buf,
-                                                      svg_renderer,
-                                                      *ras_ptr,
-                                                      bbox,
-                                                      marker_trans,
-                                                      sym,
-                                                      *detector_,
-                                                      scale_factor_,
-                                                      feature,
-                                                      pixmap_);
-                    vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                        converter(query_extent_, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_);
-                    if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                    {
-                        eGeomType type = feature.paths()[0].type();
-                        if (type == Polygon)
-                            converter.template set<clip_poly_tag>();
-                        // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                        //else if (type == LineString)
-                        //    converter.template set<clip_line_tag>();
-                        // don't clip if type==Point
-                    }
-                    converter.template set<transform_tag>(); //always transform
-                    if (sym.smooth() > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
-                    apply_markers_multi(feature, converter, sym);
-                }
-            }
-            else // raster markers
-            {
-                setup_transform_scaling(tr, (*mark)->width(), (*mark)->height(), feature, sym);
-                evaluate_transform(tr, feature, sym.get_image_transform());
-                box2d<double> const& bbox = (*mark)->bounding_box();
-                // - clamp sizes to > 4 pixels of interactivity
-                coord2d center = bbox.center();
-                agg::trans_affine_translation recenter(-center.x, -center.y);
-                agg::trans_affine marker_trans = recenter * tr;
-                boost::optional<mapnik::image_ptr> marker = (*mark)->get_bitmap_data();
-                typedef raster_markers_rasterizer_dispatch_grid<buf_type,
-                                                            grid_rasterizer,
-                                                            pixfmt_type,
-                                                            grid_renderer_base_type,
-                                                            renderer_type,
-                                                            detector_type,
-                                                            mapnik::grid > dispatch_type;
-                buf_type render_buf(pixmap_.raw_data(), width_, height_, width_);
-                dispatch_type rasterizer_dispatch(render_buf,
-                                                  *ras_ptr,
-                                                  **marker,
-                                                  marker_trans,
-                                                  sym,
-                                                  *detector_,
-                                                  scale_factor_,
-                                                  feature,
-                                                  pixmap_);
-                vertex_converter<box2d<double>, dispatch_type, markers_symbolizer,
-                                 CoordTransform, proj_transform, agg::trans_affine, conv_types>
-                    converter(query_extent_, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_);
-                if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true)
-                {
-                    eGeomType type = feature.paths()[0].type();
-                    if (type == Polygon)
-                        converter.template set<clip_poly_tag>();
-                    // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426
-                    //else if (type == LineString)
-                    //    converter.template set<clip_line_tag>();
-                    // don't clip if type==Point
-                }
-                converter.template set<transform_tag>(); //always transform
-                if (sym.smooth() > 0.0) converter.template set<smooth_tag>(); // optional smooth converter
-                apply_markers_multi(feature, converter, sym);
-            }
-        }
-    }
+    using buf_type = grid_rendering_buffer;
+    using pixfmt_type = typename grid_renderer_base_type::pixfmt_type;
+    using renderer_type = agg::renderer_scanline_bin_solid<grid_renderer_base_type>;
+    using detector_type = label_collision_detector4;
+
+    using namespace mapnik::svg;
+    using svg_attribute_type = agg::pod_bvector<path_attributes>;
+    using svg_renderer_type = svg_renderer_agg<svg_path_adapter,
+                                               svg_attribute_type,
+                                               renderer_type,
+                                               pixfmt_type>;
+
+    buf_type render_buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_);
+    ras_ptr->reset();
+    box2d<double> clip_box = common_.query_extent_;
+
+    auto renderer_context = std::tie(render_buf,*ras_ptr,pixmap_);
+    using context_type = decltype(renderer_context);
+    using vector_dispatch_type = vector_markers_rasterizer_dispatch_grid<svg_renderer_type,
+                                                                         detector_type,
+                                                                         context_type>;
+    using raster_dispatch_type = raster_markers_rasterizer_dispatch_grid<grid_renderer_base_type,
+                                                                           renderer_type,
+                                                                           detector_type,
+                                                                           context_type>;
+    render_markers_symbolizer<vector_dispatch_type, raster_dispatch_type>(
+        sym, feature, prj_trans, common_, clip_box,renderer_context);
 }
 
 template void grid_renderer<grid>::process(markers_symbolizer const&,
                                            mapnik::feature_impl &,
                                            proj_transform const&);
 }
+
+#endif
diff --git a/src/grid/process_point_symbolizer.cpp b/src/grid/process_point_symbolizer.cpp
index f023082..aa749a5 100644
--- a/src/grid/process_point_symbolizer.cpp
+++ b/src/grid/process_point_symbolizer.cpp
@@ -20,6 +20,8 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/grid/grid_rasterizer.hpp>
@@ -29,11 +31,11 @@
 
 #include <mapnik/geom_util.hpp>
 #include <mapnik/label_collision_detector.hpp>
-#include <mapnik/point_symbolizer.hpp>
 #include <mapnik/marker.hpp>
 #include <mapnik/marker_cache.hpp>
 #include <mapnik/parse_path.hpp>
 #include <mapnik/pixel_position.hpp>
+#include <mapnik/renderer_common/process_point_symbolizer.hpp>
 
 // agg
 #include "agg_trans_affine.h"
@@ -42,7 +44,6 @@
 #include <string>
 
 // boost
-#include <boost/make_shared.hpp>
 
 namespace mapnik {
 
@@ -51,68 +52,19 @@ void grid_renderer<T>::process(point_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    std::string filename = path_processor_type::evaluate(*sym.get_filename(), feature);
-
-    boost::optional<mapnik::marker_ptr> marker;
-    if ( !filename.empty() )
-    {
-        marker = marker_cache::instance().find(filename, true);
-    }
-    else
-    {
-        marker.reset(boost::make_shared<mapnik::marker>());
-    }
-
-    if (marker)
-    {
-        box2d<double> const& bbox = (*marker)->bounding_box();
-        coord2d center = bbox.center();
-
-        agg::trans_affine tr;
-        evaluate_transform(tr, feature, sym.get_image_transform());
-        tr = agg::trans_affine_scaling(scale_factor_) * tr;
-
-        agg::trans_affine_translation recenter(-center.x, -center.y);
-        agg::trans_affine recenter_tr = recenter * tr;
-        box2d<double> label_ext = bbox * recenter_tr * agg::trans_affine_scaling(scale_factor_) ;
-
-        for (unsigned i=0; i<feature.num_geometries(); ++i)
-        {
-            geometry_type const& geom = feature.get_geometry(i);
-            double x;
-            double y;
-            double z=0;
-            if (sym.get_point_placement() == CENTROID_POINT_PLACEMENT)
-            {
-                if (!label::centroid(geom, x, y))
-                    return;
-            }
-            else
-            {
-                if (!label::interior_position(geom ,x, y))
-                    return;
-            }
-
-            prj_trans.backward(x,y,z);
-            t_.forward(&x,&y);
-            label_ext.re_center(x,y);
-            if (sym.get_allow_overlap() ||
-                detector_->has_placement(label_ext))
-            {
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
 
+    render_point_symbolizer(
+        sym, feature, prj_trans, common_,
+        [&](pixel_position const &pos, marker const &marker,
+            agg::trans_affine const &tr, double opacity) {
                 render_marker(feature,
-                              pixmap_.get_resolution(),
-                              pixel_position(x, y),
-                              **marker,
+                              pos,
+                              marker,
                               tr,
-                              sym.get_opacity(),
-                              sym.comp_op());
-
-                if (!sym.get_ignore_placement())
-                    detector_->insert(label_ext);
-            }
-        }
-    }
+                              opacity,
+                              comp_op);
+        });
 }
 
 template void grid_renderer<grid>::process(point_symbolizer const&,
@@ -120,3 +72,5 @@ template void grid_renderer<grid>::process(point_symbolizer const&,
                                            proj_transform const&);
 
 }
+
+#endif
diff --git a/src/grid/process_polygon_pattern_symbolizer.cpp b/src/grid/process_polygon_pattern_symbolizer.cpp
index 3814585..affe399 100644
--- a/src/grid/process_polygon_pattern_symbolizer.cpp
+++ b/src/grid/process_polygon_pattern_symbolizer.cpp
@@ -20,17 +20,19 @@
  *
  *****************************************************************************/
 
-// boost
-#include <boost/foreach.hpp>
+#if defined(GRID_RENDERER)
 
 // mapnik
+#include <mapnik/debug.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/grid/grid_rasterizer.hpp>
 #include <mapnik/grid/grid_renderer.hpp>
 #include <mapnik/grid/grid_renderer_base.hpp>
 #include <mapnik/grid/grid.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
 #include <mapnik/vertex_converters.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/parse_path.hpp>
 
 // agg
 #include "agg_rasterizer_scanline_aa.h"
@@ -48,34 +50,54 @@ void grid_renderer<T>::process(polygon_pattern_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
+    std::string filename = get<std::string, keys::file>(sym, feature, common_.vars_);
+    if (filename.empty()) return;
+    boost::optional<mapnik::marker_ptr> mark = marker_cache::instance().find(filename, true);
+    if (!mark) return;
+
+    if (!(*mark)->is_bitmap())
+    {
+        MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Only images (not '" << filename << "') are supported in the line_pattern_symbolizer";
+        return;
+    }
+
+    boost::optional<image_ptr> pat = (*mark)->get_bitmap_data();
+    if (!pat) return;
+
     ras_ptr->reset();
 
+    value_bool clip = get<value_bool, keys::clip>(sym, feature, common_.vars_);
+    value_double simplify_tolerance = get<value_double, keys::simplify_tolerance>(sym, feature, common_.vars_);
+    value_double smooth = get<value_double, keys::smooth>(sym, feature, common_.vars_);
+
     agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform)
+    {
+        evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    }
 
-    typedef boost::mpl::vector<clip_poly_tag,transform_tag,affine_transform_tag,smooth_tag> conv_types;
-    vertex_converter<box2d<double>, grid_rasterizer, polygon_pattern_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(query_extent_,*ras_ptr,sym,t_,prj_trans,tr,scale_factor_);
+    vertex_converter<grid_rasterizer, clip_poly_tag,transform_tag,affine_transform_tag,smooth_tag>
+        converter(common_.query_extent_,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_);
 
-    if (prj_trans.equal() && sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
+    if (prj_trans.equal() && clip) converter.set<clip_poly_tag>(); //optional clip (default: true)
     converter.set<transform_tag>(); //always transform
     converter.set<affine_transform_tag>();
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-
+    if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
 
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
+    for ( geometry_type & geom : feature.paths())
     {
         if (geom.size() > 2)
         {
             converter.apply(geom);
         }
     }
-    typedef typename grid_renderer_base_type::pixfmt_type pixfmt_type;
-    typedef typename grid_renderer_base_type::pixfmt_type::color_type color_type;
-    typedef agg::renderer_scanline_bin_solid<grid_renderer_base_type> renderer_type;
+    using pixfmt_type = typename grid_renderer_base_type::pixfmt_type;
+    using color_type = typename grid_renderer_base_type::pixfmt_type::color_type;
+    using renderer_type = agg::renderer_scanline_bin_solid<grid_renderer_base_type>;
 
-    grid_rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_);
+    grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_);
     pixfmt_type pixf(buf);
 
     grid_renderer_base_type renb(pixf);
@@ -84,6 +106,7 @@ void grid_renderer<T>::process(polygon_pattern_symbolizer const& sym,
     // render id
     ren.color(color_type(feature.id()));
     agg::scanline_bin sl;
+    ras_ptr->filling_rule(agg::fill_even_odd);
     agg::render_scanlines(*ras_ptr, sl, ren);
 
     // add feature properties to grid cache
@@ -97,3 +120,4 @@ template void grid_renderer<grid>::process(polygon_pattern_symbolizer const&,
 
 }
 
+#endif
diff --git a/src/grid/process_polygon_symbolizer.cpp b/src/grid/process_polygon_symbolizer.cpp
index 5195760..f06893e 100644
--- a/src/grid/process_polygon_symbolizer.cpp
+++ b/src/grid/process_polygon_symbolizer.cpp
@@ -20,8 +20,10 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // boost
-#include <boost/foreach.hpp>
+
 
 // mapnik
 #include <mapnik/feature.hpp>
@@ -29,8 +31,8 @@
 #include <mapnik/grid/grid_renderer.hpp>
 #include <mapnik/grid/grid_renderer_base.hpp>
 #include <mapnik/grid/grid.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
 #include <mapnik/vertex_converters.hpp>
+#include <mapnik/renderer_common/process_polygon_symbolizer.hpp>
 
 // agg
 #include "agg_rasterizer_scanline_aa.h"
@@ -48,48 +50,32 @@ void grid_renderer<T>::process(polygon_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    typedef agg::renderer_scanline_bin_solid<grid_renderer_base_type> renderer_type;
-    typedef typename grid_renderer_base_type::pixfmt_type pixfmt_type;
-    typedef typename grid_renderer_base_type::pixfmt_type::color_type color_type;
+    using renderer_type = agg::renderer_scanline_bin_solid<grid_renderer_base_type>;
+    using pixfmt_type = typename grid_renderer_base_type::pixfmt_type;
+    using color_type = typename grid_renderer_base_type::pixfmt_type::color_type;
+    using vertex_converter_type = vertex_converter<grid_rasterizer,clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag>;
 
     ras_ptr->reset();
 
-    agg::trans_affine tr;
-    evaluate_transform(tr, feature, sym.get_transform());
-
-    typedef boost::mpl::vector<clip_poly_tag,transform_tag,affine_transform_tag,simplify_tag,smooth_tag> conv_types;
-    vertex_converter<box2d<double>, grid_rasterizer, polygon_symbolizer,
-                     CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(query_extent_,*ras_ptr,sym,t_,prj_trans,tr,scale_factor_);
-
-    if (prj_trans.equal() && sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
-    converter.set<transform_tag>(); //always transform
-    converter.set<affine_transform_tag>();
-    if (sym.simplify_tolerance() > 0.0) converter.set<simplify_tag>(); // optional simplify converter
-    if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
-
-
-    BOOST_FOREACH( geometry_type & geom, feature.paths())
-    {
-        if (geom.size() > 2)
-        {
-            converter.apply(geom);
-        }
-    }
+    grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_);
 
-    grid_rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_);
-    pixfmt_type pixf(buf);
+    render_polygon_symbolizer<vertex_converter_type>(
+      sym, feature, prj_trans, common_, common_.query_extent_, *ras_ptr,
+      [&](color const &, double) {
+        pixfmt_type pixf(buf);
 
-    grid_renderer_base_type renb(pixf);
-    renderer_type ren(renb);
+        grid_renderer_base_type renb(pixf);
+        renderer_type ren(renb);
 
-    // render id
-    ren.color(color_type(feature.id()));
-    agg::scanline_bin sl;
-    agg::render_scanlines(*ras_ptr, sl, ren);
+        // render id
+        ren.color(color_type(feature.id()));
+        agg::scanline_bin sl;
+        ras_ptr->filling_rule(agg::fill_even_odd);
+        agg::render_scanlines(*ras_ptr, sl, ren);
 
-    // add feature properties to grid cache
-    pixmap_.add_feature(feature);
+        // add feature properties to grid cache
+        pixmap_.add_feature(feature);
+      });
 }
 
 
@@ -99,3 +85,4 @@ template void grid_renderer<grid>::process(polygon_symbolizer const&,
 
 }
 
+#endif
diff --git a/src/grid/process_raster_symbolizer.cpp b/src/grid/process_raster_symbolizer.cpp
index da923d9..b229472 100644
--- a/src/grid/process_raster_symbolizer.cpp
+++ b/src/grid/process_raster_symbolizer.cpp
@@ -20,6 +20,8 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/debug.hpp>
@@ -29,9 +31,9 @@ namespace mapnik {
 
 
 template <typename T>
-void grid_renderer<T>::process(raster_symbolizer const& sym,
-                               mapnik::feature_impl & feature,
-                               proj_transform const& prj_trans)
+void grid_renderer<T>::process(raster_symbolizer const&,
+                               mapnik::feature_impl &,
+                               proj_transform const&)
 {
     MAPNIK_LOG_WARN(grid_renderer) << "grid_renderer: raster_symbolizer is not yet supported";
 }
@@ -41,3 +43,5 @@ template void grid_renderer<grid>::process(raster_symbolizer const&,
                                            proj_transform const&);
 
 }
+
+#endif
diff --git a/src/grid/process_shield_symbolizer.cpp b/src/grid/process_shield_symbolizer.cpp
index 0fab6d5..ca10dc6 100644
--- a/src/grid/process_shield_symbolizer.cpp
+++ b/src/grid/process_shield_symbolizer.cpp
@@ -1,4 +1,3 @@
-
 /*****************************************************************************
  *
  * This file is part of Mapnik (c++ mapping toolkit)
@@ -21,15 +20,17 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/grid/grid_rasterizer.hpp>
 #include <mapnik/grid/grid_renderer.hpp>
 #include <mapnik/grid/grid_renderer_base.hpp>
 #include <mapnik/grid/grid.hpp>
-#include <mapnik/symbolizer_helpers.hpp>
+#include <mapnik/text/symbolizer_helpers.hpp>
 #include <mapnik/pixel_position.hpp>
-#include <mapnik/font_util.hpp>
+#include <mapnik/text/renderer.hpp>
 
 // agg
 #include "agg_trans_affine.h"
@@ -41,50 +42,45 @@ void  grid_renderer<T>::process(shield_symbolizer const& sym,
                                 mapnik::feature_impl & feature,
                                 proj_transform const& prj_trans)
 {
-    shield_symbolizer_helper<face_manager<freetype_engine>,
-        label_collision_detector4> helper(
-            sym, feature, prj_trans,
-            width_, height_,
-            scale_factor_,
-            t_, font_manager_, *detector_,
-            query_extent_);
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+
+    text_symbolizer_helper helper(
+            sym, feature, common_.vars_, prj_trans,
+            common_.width_, common_.height_,
+            common_.scale_factor_,
+            common_.t_, common_.font_manager_, *common_.detector_,
+            common_.query_extent_, tr);
     bool placement_found = false;
 
-    text_renderer<T> ren(pixmap_,
-                         font_manager_,
-                         sym.get_halo_rasterizer(),
-                         sym.comp_op(),
-                         scale_factor_);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
+    double opacity = get<double>(sym, keys::opacity, feature, common_.vars_, 1.0);
 
-    text_placement_info_ptr placement;
-    while (helper.next())
+    grid_text_renderer<T> ren(pixmap_,
+                              comp_op,
+                              common_.scale_factor_);
+
+    placements_list const& placements = helper.get();
+    value_integer feature_id = feature.id();
+
+    for (glyph_positions_ptr glyphs : placements)
     {
-        placement_found = true;
-        placements_type const& placements = helper.placements();
-        for (unsigned int ii = 0; ii < placements.size(); ++ii)
+        if (glyphs->marker())
         {
-            // get_marker_position returns (minx,miny) corner position,
-            // while (currently only) agg_renderer::render_marker newly
-            // expects center position;
-            // until all renderers and shield_symbolizer_helper are
-            // modified accordingly, we must adjust the position here
-            pixel_position pos = helper.get_marker_position(placements[ii]);
-            pos.x += 0.5 * helper.get_marker_width();
-            pos.y += 0.5 * helper.get_marker_height();
             render_marker(feature,
-                          pixmap_.get_resolution(),
-                          pos,
-                          helper.get_marker(),
-                          helper.get_image_transform(),
-                          sym.get_opacity(),
-                          sym.comp_op());
-
-            ren.prepare_glyphs(placements[ii]);
-            ren.render_id(feature.id(), placements[ii].center);
+                          glyphs->marker_pos(),
+                          *(glyphs->marker()->marker),
+                          glyphs->marker()->transform,
+                          opacity, comp_op);
         }
+        ren.render(*glyphs, feature_id);
+        placement_found = true;
     }
     if (placement_found)
+    {
         pixmap_.add_feature(feature);
+    }
 }
 
 template void grid_renderer<grid>::process(shield_symbolizer const&,
@@ -92,3 +88,5 @@ template void grid_renderer<grid>::process(shield_symbolizer const&,
                                            proj_transform const&);
 
 }
+
+#endif
diff --git a/src/grid/process_text_symbolizer.cpp b/src/grid/process_text_symbolizer.cpp
index 40e6ed5..1c768c3 100644
--- a/src/grid/process_text_symbolizer.cpp
+++ b/src/grid/process_text_symbolizer.cpp
@@ -20,11 +20,15 @@
  *
  *****************************************************************************/
 
+#if defined(GRID_RENDERER)
+
 // mapnik
 #include <mapnik/feature.hpp>
 #include <mapnik/grid/grid_renderer.hpp>
-#include <mapnik/symbolizer_helpers.hpp>
-#include <mapnik/font_util.hpp>
+#include <mapnik/text/symbolizer_helpers.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/text/renderer.hpp>
+#include <mapnik/renderer_common/clipping_extent.hpp>
 
 namespace mapnik {
 
@@ -33,32 +37,45 @@ void grid_renderer<T>::process(text_symbolizer const& sym,
                                mapnik::feature_impl & feature,
                                proj_transform const& prj_trans)
 {
-    text_symbolizer_helper<face_manager<freetype_engine>,
-        label_collision_detector4> helper(
-            sym, feature, prj_trans,
-            width_, height_,
-            scale_factor_ * (1.0/pixmap_.get_resolution()),
-            t_, font_manager_, *detector_,
-            query_extent_);
+    box2d<double> clip_box = clipping_extent(common_);
+    agg::trans_affine tr;
+    auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
+    if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
+    text_symbolizer_helper helper(
+        sym, feature, common_.vars_, prj_trans,
+        common_.width_, common_.height_,
+        common_.scale_factor_,
+        common_.t_, common_.font_manager_, *common_.detector_,
+        clip_box, tr);
     bool placement_found = false;
 
-    text_renderer<T> ren(pixmap_,
-                         font_manager_,
-                         sym.get_halo_rasterizer(),
-                         sym.comp_op(),
-                         scale_factor_);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
 
-    while (helper.next()) {
-        placement_found = true;
-        placements_type const& placements = helper.placements();
-        for (unsigned int ii = 0; ii < placements.size(); ++ii)
+    grid_text_renderer<T> ren(pixmap_,
+                              comp_op,
+                              common_.scale_factor_);
+    { // halo transform
+        agg::trans_affine halo_transform;
+        auto transform = get_optional<transform_type>(sym, keys::halo_transform);
+        if (transform)
         {
-            ren.prepare_glyphs(placements[ii]);
-            ren.render_id(feature.id(), placements[ii].center);
+            evaluate_transform(halo_transform, feature, common_.vars_, *transform);
+            ren.set_halo_transform(halo_transform);
         }
     }
-    if (placement_found) pixmap_.add_feature(feature);
 
+    placements_list const& placements = helper.get();
+    value_integer feature_id = feature.id();
+
+    for (glyph_positions_ptr glyphs : placements)
+    {
+        ren.render(*glyphs, feature_id);
+        placement_found = true;
+    }
+    if (placement_found)
+    {
+        pixmap_.add_feature(feature);
+    }
 }
 
 template void grid_renderer<grid>::process(text_symbolizer const&,
@@ -67,3 +84,4 @@ template void grid_renderer<grid>::process(text_symbolizer const&,
 
 }
 
+#endif
diff --git a/src/group/group_layout_manager.cpp b/src/group/group_layout_manager.cpp
new file mode 100644
index 0000000..7799d5f
--- /dev/null
+++ b/src/group/group_layout_manager.cpp
@@ -0,0 +1,171 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/group/group_layout_manager.hpp>
+#include <mapnik/util/variant.hpp>
+
+// std
+#include <cmath>
+
+namespace mapnik
+{
+
+// This visitor will process offsets for the given layout
+struct process_layout : public util::static_visitor<>
+{
+    // The vector containing the existing, centered item bounding boxes
+    vector<bound_box> const& member_boxes_;
+
+    // The vector to populate with item offsets
+    vector<pixel_position> & member_offsets_;
+
+    // The origin point of the member boxes
+    // i.e. The member boxes are positioned around input_origin,
+    //      and the offset values should position them around (0,0)
+    pixel_position const& input_origin_;
+
+    process_layout(vector<bound_box> const& member_bboxes,
+                   vector<pixel_position> &member_offsets,
+                   pixel_position const& input_origin)
+       : member_boxes_(member_bboxes),
+         member_offsets_(member_offsets),
+         input_origin_(input_origin)
+    {
+    }
+
+    // arrange group memebers in centered, horizontal row
+    void operator()(simple_row_layout const& layout) const
+    {
+        double total_width = (member_boxes_.size() - 1) * layout.get_item_margin();
+        for (auto const& box : member_boxes_)
+        {
+            total_width += box.width();
+        }
+
+        double x_offset = -(total_width / 2.0);
+        for (auto const& box : member_boxes_)
+        {
+            member_offsets_.push_back(pixel_position(x_offset - box.minx(), -input_origin_.y));
+            x_offset += box.width() + layout.get_item_margin();
+        }
+    }
+
+    // arrange group members in x horizontal pairs of 2,
+    // one to the left and one to the right of center in each pair
+    void operator()(pair_layout const& layout) const
+    {
+        member_offsets_.resize(member_boxes_.size());
+        double y_margin = layout.get_item_margin();
+        double x_margin = y_margin / 2.0;
+
+        if (member_boxes_.size() == 1)
+        {
+            member_offsets_[0] = pixel_position(0, 0) - input_origin_;
+            return;
+        }
+
+        bound_box layout_box;
+        size_t middle_ifirst = (member_boxes_.size() - 1) >> 1;
+        int top_i = 0;
+        int bottom_i = 0;
+        if (middle_ifirst % 2 == 0)
+        {
+            layout_box = make_horiz_pair(0, 0.0, 0, x_margin, layout.get_max_difference());
+            top_i = middle_ifirst - 2;
+            bottom_i = middle_ifirst + 2;
+        }
+        else
+        {
+            top_i = middle_ifirst - 1;
+            bottom_i = middle_ifirst + 1;
+        }
+
+        while (bottom_i >= 0 && top_i >= 0 && top_i < static_cast<int>(member_offsets_.size()))
+        {
+            layout_box.expand_to_include(make_horiz_pair(top_i, layout_box.miny() - y_margin, -1, x_margin, layout.get_max_difference()));
+            layout_box.expand_to_include(make_horiz_pair(bottom_i, layout_box.maxy() + y_margin, 1, x_margin, layout.get_max_difference()));
+            top_i -= 2;
+            bottom_i += 2;
+        }
+
+    }
+
+private:
+
+    // Place member bound boxes at [ifirst] and [ifirst + 1] in a horizontal pairi, vertically
+    //   align with pair_y, store corresponding offsets, and return bound box of combined pair
+    // Note: x_margin is the distance between box edge and x center
+    bound_box make_horiz_pair(size_t ifirst, double pair_y, int y_dir, double x_margin, double max_diff) const
+    {
+        // two boxes available for pair
+        if (ifirst + 1 < member_boxes_.size())
+        {
+            double x_center = member_boxes_[ifirst].width() - member_boxes_[ifirst + 1].width();
+            if (max_diff < 0.0 || std::abs(x_center) <= max_diff)
+            {
+                x_center = 0.0;
+            }
+
+            bound_box pair_box = box_offset_align(ifirst, x_center - x_margin, pair_y, -1, y_dir);
+            pair_box.expand_to_include(box_offset_align(ifirst + 1, x_center + x_margin, pair_y, 1, y_dir));
+            return pair_box;
+        }
+
+        // only one box available for this "pair", so keep x-centered and handle y-offset
+        return box_offset_align(ifirst, 0, pair_y, 0, y_dir);
+    }
+
+
+    // Offsets member bound box at [i] and align with (x, y), in direction <x_dir, y_dir>
+    // stores corresponding offset, and returns modified bounding box
+    bound_box box_offset_align(size_t i, double x, double y, int x_dir, int y_dir) const
+    {
+        bound_box const& box = member_boxes_[i];
+        pixel_position offset((x_dir == 0 ? x - input_origin_.x : x - (x_dir < 0 ? box.maxx() : box.minx())),
+                             (y_dir == 0 ? y - input_origin_.y : y - (y_dir < 0 ? box.maxy() : box.miny())));
+
+        member_offsets_[i] = offset;
+        return bound_box(box.minx() + offset.x, box.miny() + offset.y, box.maxx() + offset.x, box.maxy() + offset.y);
+    }
+};
+
+bound_box group_layout_manager::offset_box_at(size_t i)
+{
+    handle_update();
+    pixel_position const& offset = member_offsets_.at(i);
+    bound_box const& box = member_boxes_.at(i);
+    return box2d<double>(box.minx() + offset.x, box.miny() + offset.y,
+                         box.maxx() + offset.x, box.maxy() + offset.y);
+}
+
+void group_layout_manager::handle_update()
+{
+    if (update_layout_)
+    {
+       member_offsets_.clear();
+       util::apply_visitor(process_layout(member_boxes_, member_offsets_, input_origin_), layout_);
+       update_layout_ = false;
+    }
+}
+
+}
diff --git a/src/group/group_rule.cpp b/src/group/group_rule.cpp
new file mode 100644
index 0000000..e3c5a6f
--- /dev/null
+++ b/src/group/group_rule.cpp
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/group/group_rule.hpp>
+
+// stl
+#include <iostream>
+
+namespace mapnik
+{
+
+group_rule::group_rule(const expression_ptr& filter,
+                       const expression_ptr& repeat_key)
+   : filter_(filter),
+     repeat_key_(repeat_key)
+{
+}
+
+group_rule &group_rule::operator=(const group_rule &rhs)
+{
+   group_rule tmp(rhs);
+   filter_.swap(tmp.filter_);
+   symbolizers_.swap(tmp.symbolizers_);
+   return *this;
+}
+
+bool group_rule::operator==(const group_rule &rhs) const
+{
+   return (this == &rhs);
+}
+
+void group_rule::append(const mapnik::symbolizer &sym)
+{
+   symbolizers_.push_back(sym);
+}
+
+}
+
diff --git a/src/group/group_symbolizer_helper.cpp b/src/group/group_symbolizer_helper.cpp
new file mode 100644
index 0000000..faa5e4a
--- /dev/null
+++ b/src/group/group_symbolizer_helper.cpp
@@ -0,0 +1,181 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/group/group_symbolizer_helper.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/geom_util.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/text/placements/base.hpp>
+#include <mapnik/text/placements/dummy.hpp>
+#include <mapnik/text/vertex_cache.hpp>
+#include <mapnik/text/tolerance_iterator.hpp>
+
+//agg
+#include "agg_conv_clip_polyline.h"
+
+namespace mapnik {
+
+group_symbolizer_helper::group_symbolizer_helper(
+        group_symbolizer const& sym, feature_impl const& feature,
+        attributes const& vars,
+        proj_transform const& prj_trans,
+        unsigned width, unsigned height, double scale_factor,
+        view_transform const& t, DetectorType & detector,
+        box2d<double> const& query_extent)
+    : base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent),
+      detector_(detector)
+{}
+
+pixel_position_list const& group_symbolizer_helper::get()
+{
+    results_.clear();
+
+    if (point_placement_)
+    {
+        for (pixel_position const& point : points_)
+        {
+            check_point_placement(point);
+        }
+    }
+    else
+    {
+        for (auto const& geom : geometries_to_process_)
+        {
+            // TODO to support clipped geometries this needs to use
+            // vertex_converters
+            using path_type = transform_path_adapter<view_transform,geometry_type>;
+            path_type path(t_, *geom, prj_trans_);
+            find_line_placements(path);
+        }
+    }
+
+    return results_;
+}
+
+template <typename T>
+bool group_symbolizer_helper::find_line_placements(T & path)
+{
+    if (box_elements_.empty()) return true;
+
+    vertex_cache pp(path);
+
+    bool success = false;
+    while (pp.next_subpath())
+    {
+        if (pp.length() <= 0.001)
+        {
+            success = check_point_placement(pp.current_position()) || success;
+            continue;
+        }
+
+        double spacing = get_spacing(pp.length());
+
+        pp.forward(spacing/2.0);
+        do
+        {
+            tolerance_iterator tolerance_offset(text_props_->label_position_tolerance * scale_factor_, spacing); //TODO: Handle halign
+            while (tolerance_offset.next())
+            {
+                vertex_cache::scoped_state state(pp);
+                if (pp.move(tolerance_offset.get()) && check_point_placement(pp.current_position()))
+                {
+                    success = true;
+                    break;
+                }
+            }
+        } while (pp.forward(spacing));
+    }
+    return success;
+}
+
+bool group_symbolizer_helper::check_point_placement(pixel_position const& pos)
+{
+    if (box_elements_.empty()) return false;
+
+    // offset boxes and check collision
+    std::list< box2d<double> > real_boxes;
+    for (auto const& box_elem : box_elements_)
+    {
+        box2d<double> real_box = box2d<double>(box_elem.box_);
+        real_box.move(pos.x, pos.y);
+        if (collision(real_box, box_elem.repeat_key_))
+        {
+            return false;
+        }
+        real_boxes.push_back(real_box);
+    }
+
+    // add boxes to collision detector
+    std::list<box_element>::iterator elem_itr = box_elements_.begin();
+    std::list< box2d<double> >::iterator real_itr = real_boxes.begin();
+    while (elem_itr != box_elements_.end() && real_itr != real_boxes.end())
+    {
+        detector_.insert(*real_itr, elem_itr->repeat_key_);
+        elem_itr++;
+        real_itr++;
+    }
+
+    results_.push_back(pos);
+
+    return true;
+}
+
+bool group_symbolizer_helper::collision(box2d<double> const& box, value_unicode_string const& repeat_key) const
+{
+    if (!detector_.extent().intersects(box)
+            ||
+        (text_props_->avoid_edges && !query_extent_.contains(box))
+            ||
+        (text_props_->minimum_padding > 0 &&
+         !query_extent_.contains(box + (scale_factor_ * text_props_->minimum_padding)))
+            ||
+        (!text_props_->allow_overlap &&
+            ((repeat_key.length() == 0 && !detector_.has_placement(box, text_props_->margin * scale_factor_))
+                ||
+             (repeat_key.length() > 0  && !detector_.has_placement(box, text_props_->margin * scale_factor_,
+                                                                   repeat_key, text_props_->repeat_distance * scale_factor_))))
+        )
+    {
+        return true;
+    }
+    return false;
+}
+
+double group_symbolizer_helper::get_spacing(double path_length) const
+{
+    int num_labels = 1;
+    if (text_props_->label_spacing > 0)
+    {
+        num_labels = static_cast<int>(std::floor(
+            path_length / (text_props_->label_spacing * scale_factor_)));
+    }
+    if (num_labels <= 0)
+    {
+        num_labels = 1;
+    }
+    return path_length / num_labels;
+}
+
+} //namespace
diff --git a/src/image_compositing.cpp b/src/image_compositing.cpp
index cc089eb..3c71bc8 100644
--- a/src/image_compositing.cpp
+++ b/src/image_compositing.cpp
@@ -25,8 +25,12 @@
 #include <mapnik/image_data.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wredeclared-class-member"
 #include <boost/assign/list_of.hpp>
 #include <boost/bimap.hpp>
+#pragma GCC diagnostic pop
 
 // agg
 #include "agg_rendering_buffer.h"
@@ -34,11 +38,12 @@
 #include "agg_scanline_u.h"
 #include "agg_renderer_scanline.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
 
 namespace mapnik
 {
 
-typedef boost::bimap<composite_mode_e, std::string> comp_op_lookup_type;
+using comp_op_lookup_type = boost::bimap<composite_mode_e, std::string>;
 static const comp_op_lookup_type comp_lookup = boost::assign::list_of<comp_op_lookup_type::relation>
     (clear,"clear")
     (src,"src")
@@ -74,7 +79,9 @@ static const comp_op_lookup_type comp_lookup = boost::assign::list_of<comp_op_lo
     (saturation,"saturation")
     (_color,"color")
     (_value,"value")
-    //(colorize_alpha,"colorize-alpha")
+    (linear_dodge,"linear-dodge")
+    (linear_burn,"linear-burn")
+    (divide,"divide")
     ;
 
 boost::optional<composite_mode_e> comp_op_from_string(std::string const& name)
@@ -106,8 +113,8 @@ From http://www.antigrain.com/news/release_notes/v22.agdoc.html:
 
 Format agg::pixfmt_rgba32 is the main and the fastest pixel format and it's supposed to be used in most cases. But it always uses plain colors as input and produces pre-multiplied result on the canvas. It has even less number of calculations than agg::pixfmt_rgba32_pre. Format agg::pixfmt_rgba32_plain is slow because of division operations. APIs allowing for alpha-blending require premultiplied colors. Besides, if you display RGBA with RGB API (that is, without alpha, like WinAPI BitBlt) [...]
 
-Format agg::pixfmt_rgba32_pre is a bit slower than agg::pixfmt_rgba32 because of additional "cover" values, i.e. secondary alphas, that are to be mixed with the source premultiplied color. That spoils the beauty of the premultiplied colors idea. But the "cover" values are important because there can be other color spaces and color types that don't have any "alpha" at all, or the alpha is incompatible with integral types. So, the "cover" is a secondary, uniform alpha in range of 0…255, us [...]
-One needs to consider this issue when transforming images. Actually, all RGBA images are supposed to be in the premultiplied color space and the result of filtering is also premultiplied. Since the resulting colors of the filtered images are the source for the renderers, one should use the premultiplied renderers, that is, agg::pixfmt_rgba32_pre, or the new one, agg::pixfmt_rgb24_pre. But it's important only if images are translucent, that is, have actual alpha channel. 
+Format agg::pixfmt_rgba32_pre is a bit slower than agg::pixfmt_rgba32 because of additional "cover" values, i.e. secondary alphas, that are to be mixed with the source premultiplied color. That spoils the beauty of the premultiplied colors idea. But the "cover" values are important because there can be other color spaces and color types that don't have any "alpha" at all, or the alpha is incompatible with integral types. So, the "cover" is a secondary, uniform alpha in range of 0…255, us [...]
+One needs to consider this issue when transforming images. Actually, all RGBA images are supposed to be in the premultiplied color space and the result of filtering is also premultiplied. Since the resulting colors of the filtered images are the source for the renderers, one should use the premultiplied renderers, that is, agg::pixfmt_rgba32_pre, or the new one, agg::pixfmt_rgb24_pre. But it's important only if images are translucent, that is, have actual alpha channel.
 
 For example, if you generate some pattern with AGG (premultiplied) and would like to use it for filling, you'll need to use agg::pixfmt_rgba32_pre. If you use agg::span_image_filter_rgb24_gamma_bilinear (that is, RGB for input) and draw it on the RGBA canvas, you still need to use agg::pixfmt_rgba32_pre as the destination canvas. The only thing you need is to premultiply the background color used out of bounds.
 
@@ -121,18 +128,18 @@ void composite(T1 & dst, T2 & src, composite_mode_e mode,
                int dy,
                bool premultiply_src)
 {
-    typedef agg::rgba8 color;
-    typedef agg::order_rgba order;
-    typedef agg::comp_op_adaptor_rgba_pre<color, order> blender_type;
-    typedef agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer> pixfmt_type;
-    typedef agg::renderer_base<pixfmt_type> renderer_type;
+    using color = agg::rgba8;
+    using order = agg::order_rgba;
+    using blender_type = agg::comp_op_adaptor_rgba_pre<color, order>;
+    using pixfmt_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
+    using renderer_type = agg::renderer_base<pixfmt_type>;
 
     agg::rendering_buffer dst_buffer(dst.getBytes(),dst.width(),dst.height(),dst.width() * 4);
     agg::rendering_buffer src_buffer(src.getBytes(),src.width(),src.height(),src.width() * 4);
 
     pixfmt_type pixf(dst_buffer);
     pixf.comp_op(static_cast<agg::comp_op_e>(mode));
-    
+
     agg::pixfmt_rgba32 pixf_mask(src_buffer);
     if (premultiply_src)  pixf_mask.premultiply();
     renderer_type ren(pixf);
diff --git a/src/image_filter_grammar.cpp b/src/image_filter_grammar.cpp
deleted file mode 100644
index b508071..0000000
--- a/src/image_filter_grammar.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/image_filter_grammar.hpp>
-
-// boost
-#include <boost/version.hpp>
-
-// spirit
-#include <boost/spirit/include/phoenix.hpp>
-
-namespace mapnik {
-
-namespace qi = boost::spirit::qi;
-namespace phoenix = boost::phoenix;
-
-template <typename Iterator, typename ContType>
-image_filter_grammar<Iterator,ContType>::image_filter_grammar()
-    : image_filter_grammar::base_type(start)
-{
-    using qi::lit;
-    using qi::_val;
-    using qi::_1;
-    using qi::_a;
-    using qi::_b;
-    using qi::_c;
-    using qi::_d;
-    using qi::_e;
-    using qi::_f;
-    using qi::_g;
-    using qi::_h;
-    using qi::_r1;
-    using qi::eps;
-    using qi::char_;
-    using qi::lexeme;
-    using qi::double_;
-    using boost::spirit::ascii::string;
-    using phoenix::push_back;
-    using phoenix::construct;
-    using phoenix::at_c;
-#if BOOST_VERSION >= 104700
-    using qi::no_skip;
-    start = -(filter % no_skip[*char_(", ")])
-        ;
-#else
-    start = -(filter)
-        ;
-#endif
-
-    filter =
-        lit("emboss") >> no_args [push_back(_val,construct<mapnik::filter::emboss>())]
-        |
-        lit("blur") >> no_args [push_back(_val,construct<mapnik::filter::blur>())]
-        |
-        lit("gray") >> no_args [push_back(_val,construct<mapnik::filter::gray>())]
-        |
-        lit("edge-detect") >> no_args [push_back(_val,construct<mapnik::filter::edge_detect>())]
-        |
-        lit("sobel") >> no_args [push_back(_val,construct<mapnik::filter::sobel>())]
-        |
-        lit("sharpen") >> no_args [push_back(_val,construct<mapnik::filter::sharpen>())]
-        |
-        lit("x-gradient") >> no_args [push_back(_val,construct<mapnik::filter::x_gradient>())]
-        |
-        lit("y-gradient") >> no_args [push_back(_val,construct<mapnik::filter::y_gradient>())]
-        |
-        lit("invert") >> no_args [push_back(_val,construct<mapnik::filter::invert>())]
-        |
-        agg_blur_filter(_val)
-        |
-        //hsla_filter(_val)
-        //|
-        colorize_alpha_filter(_val)
-        ;
-
-    agg_blur_filter = lit("agg-stack-blur")[_a = 1, _b = 1]
-        >> -( lit('(') >> -( radius_[_a = _1][_b = _1]
-                             >> -(lit(',') >> radius_[_b = _1]))
-              >> lit(')'))
-        [push_back(_r1,construct<mapnik::filter::agg_stack_blur>(_a,_b))]
-        ;
-
-    /*
-    hsla_filter = lit("hsla")
-        >> lit('(')
-        >> double_[_a = _1] >> lit('x') >> double_[_b = _1] >> lit(';')
-        >> double_[_c = _1] >> lit('x') >> double_[_d = _1] >> lit(';')
-        >> double_[_e = _1] >> lit('x') >> double_[_f = _1] >> lit(';')
-        >> double_[_g = _1] >> lit('x') >> double_[_h = _1] >> lit(')')
-        [push_back(_r1, construct<mapnik::filter::hsla>(_a,_b,_c,_d,_e,_f,_g,_h))]
-        ;
-    */
-
-    colorize_alpha_filter = lit("colorize-alpha")[_a = construct<mapnik::filter::colorize_alpha>()]
-        >> lit('(')
-        >> (css_color_[at_c<0>(_b) = _1, at_c<1>(_b) = 0]
-            >> -color_stop_offset(_b)) [push_back(_a,_b)]
-        >> +(lit(',') >> css_color_[at_c<0>(_b) =_1,at_c<1>(_b) = 0]
-             >> -color_stop_offset(_b))[push_back(_a,_b)]
-        >> lit(')') [push_back(_r1,_a)]
-        ;
-
-    color_stop_offset = (double_ >> lit('%'))[at_c<1>(_r1) = percent_offset(_1)]
-        |
-        double_[at_c<1>(_r1) = _1]
-        ;
-    no_args = -(lit('(') >> lit(')'));
-}
-
-template struct mapnik::image_filter_grammar<std::string::const_iterator,std::vector<mapnik::filter::filter_type> >;
-
-}
diff --git a/src/image_filter_types.cpp b/src/image_filter_types.cpp
index a9bc4c3..702c566 100644
--- a/src/image_filter_types.cpp
+++ b/src/image_filter_types.cpp
@@ -21,11 +21,16 @@
  *****************************************************************************/
 // mapnik
 #include <mapnik/image_filter_types.hpp>
-#include <mapnik/image_filter_grammar.hpp> // image_filter_grammar
+#include <mapnik/image_filter_grammar.hpp>
+#include <mapnik/image_filter_grammar_impl.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #include <boost/spirit/include/karma.hpp>
-#include <boost/variant.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <vector>
@@ -34,31 +39,9 @@ namespace mapnik {
 
 namespace filter {
 
-template <typename Out>
-struct to_string_visitor : boost::static_visitor<void>
+bool generate_image_filters(std::back_insert_iterator<std::string> & sink, std::vector<filter_type> const& filters)
 {
-    to_string_visitor(Out & out)
-    : out_(out) {}
-
-    template <typename T>
-    void operator () (T const& filter_tag)
-    {
-        out_ << filter_tag;
-    }
-
-    Out & out_;
-};
-
-inline std::ostream& operator<< (std::ostream& os, filter_type const& filter)
-{
-    to_string_visitor<std::ostream> visitor(os);
-    boost::apply_visitor(visitor, filter);
-    return os;
-}
-
-bool generate_image_filters(std::back_insert_iterator<std::string>& sink, std::vector<filter_type> const& filters)
-{
-    using boost::spirit::karma::stream;
+    boost::spirit::karma::stream_type stream;
     using boost::spirit::karma::generate;
     bool r = generate(sink, stream % ' ', filters);
     return r;
@@ -68,11 +51,12 @@ bool parse_image_filters(std::string const& filters, std::vector<filter_type>& i
 {
     std::string::const_iterator itr = filters.begin();
     std::string::const_iterator end = filters.end();
-    mapnik::image_filter_grammar<std::string::const_iterator,
+    static const mapnik::image_filter_grammar<std::string::const_iterator,
                                  std::vector<mapnik::filter::filter_type> > filter_grammar;
+    boost::spirit::qi::ascii::space_type space;
     bool r = boost::spirit::qi::phrase_parse(itr,end,
                                              filter_grammar,
-                                             boost::spirit::qi::ascii::space,
+                                             space,
                                              image_filters);
     return r && itr==end;
 }
diff --git a/src/image_reader.cpp b/src/image_reader.cpp
index af98b6f..036a051 100644
--- a/src/image_reader.cpp
+++ b/src/image_reader.cpp
@@ -28,16 +28,9 @@
 namespace mapnik
 {
 
-typedef factory<image_reader,std::string,
-                image_reader* (*)(std::string const&)>  ImageReaderFactory;
-
-typedef factory<image_reader,std::string,
-                image_reader* (*)(char const*, std::size_t)>  MemImageReaderFactory;
-
-
 inline boost::optional<std::string> type_from_bytes(char const* data, size_t size)
 {
-    typedef boost::optional<std::string> result_type;
+    using result_type = boost::optional<std::string>;
     if (size >= 4)
     {
         unsigned int magic = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
@@ -59,30 +52,29 @@ inline boost::optional<std::string> type_from_bytes(char const* data, size_t siz
         }
     }
 
+    if (size>=12)
+    {
+        if (data[0] == 'R' && data[1] == 'I' && data[2] == 'F' && data[3] == 'F' &&
+            data[8] == 'W' && data[9] == 'E' && data[10] == 'B' && data[11] == 'P')
+        {
+            return result_type("webp");
+        }
+    }
     return result_type();
 }
 
-bool register_image_reader(std::string const& type,image_reader* (* fun)(std::string const&))
-{
-    return ImageReaderFactory::instance().register_product(type,fun);
-}
-
-bool register_image_reader(std::string const& type,image_reader* (* fun)(char const*, std::size_t))
-{
-    return MemImageReaderFactory::instance().register_product(type,fun);
-}
-
 image_reader* get_image_reader(char const* data, size_t size)
 {
     boost::optional<std::string> type = type_from_bytes(data,size);
     if (type)
-        return MemImageReaderFactory::instance().create_object(*type, data,size);
-    return 0;
+        return factory<image_reader,std::string,char const*,size_t>::instance().create_object(*type, data,size);
+    else
+        throw image_reader_exception("image_reader: can't determine type from input data");
 }
 
 image_reader* get_image_reader(std::string const& filename,std::string const& type)
 {
-    return ImageReaderFactory::instance().create_object(type,filename);
+    return factory<image_reader,std::string,std::string const&>::instance().create_object(type,filename);
 }
 
 image_reader* get_image_reader(std::string const& filename)
@@ -90,7 +82,7 @@ image_reader* get_image_reader(std::string const& filename)
     boost::optional<std::string> type = type_from_filename(filename);
     if (type)
     {
-        return ImageReaderFactory::instance().create_object(*type,filename);
+        return factory<image_reader,std::string,std::string const&>::instance().create_object(*type,filename);
     }
     return 0;
 }
diff --git a/src/image_scaling.cpp b/src/image_scaling.cpp
index 0d268a7..c122e89 100644
--- a/src/image_scaling.cpp
+++ b/src/image_scaling.cpp
@@ -27,12 +27,17 @@
 //#include <mapnik/span_image_filter.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wredeclared-class-member"
 #include <boost/assign/list_of.hpp>
 #include <boost/bimap.hpp>
+#pragma GCC diagnostic pop
 
 // agg
 #include "agg_image_accessors.h"
 #include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_renderer_scanline.h"
 #include "agg_rendering_buffer.h"
@@ -46,7 +51,7 @@
 namespace mapnik
 {
 
-typedef boost::bimap<scaling_method_e, std::string> scaling_method_lookup_type;
+using scaling_method_lookup_type = boost::bimap<scaling_method_e, std::string>;
 static const scaling_method_lookup_type scaling_lookup = boost::assign::list_of<scaling_method_lookup_type::relation>
     (SCALING_NEAR,"near")
     (SCALING_BILINEAR,"bilinear")
@@ -65,7 +70,6 @@ static const scaling_method_lookup_type scaling_lookup = boost::assign::list_of<
     (SCALING_SINC,"sinc")
     (SCALING_LANCZOS,"lanczos")
     (SCALING_BLACKMAN,"blackman")
-    (SCALING_BILINEAR8,"bilinear8")
     ;
 
 boost::optional<scaling_method_e> scaling_method_from_string(std::string const& name)
@@ -90,170 +94,6 @@ boost::optional<std::string> scaling_method_to_string(scaling_method_e scaling_m
     return mode;
 }
 
-// this has been replaced by agg impl - see https://github.com/mapnik/mapnik/issues/656
-template <typename Image>
-void scale_image_bilinear_old (Image & target,Image const& source, double x_off_f, double y_off_f)
-{
-
-    int source_width=source.width();
-    int source_height=source.height();
-
-    int target_width=target.width();
-    int target_height=target.height();
-
-    if (source_width<1 || source_height<1 ||
-        target_width<1 || target_height<1) return;
-    int x=0,y=0,xs=0,ys=0;
-    int tw2 = target_width/2;
-    int th2 = target_height/2;
-    int offs_x = rint((source_width-target_width-x_off_f*2*source_width)/2);
-    int offs_y = rint((source_height-target_height-y_off_f*2*source_height)/2);
-    unsigned yprt, yprt1, xprt, xprt1;
-
-    //no scaling or subpixel offset
-    if (target_height == source_height && target_width == source_width && offs_x == 0 && offs_y == 0){
-        for (y=0;y<target_height;++y)
-            target.setRow(y,source.getRow(y),target_width);
-        return;
-    }
-
-    for (y=0;y<target_height;++y)
-    {
-        ys = (y*source_height+offs_y)/target_height;
-        int ys1 = ys+1;
-        if (ys1>=source_height)
-            ys1--;
-        if (ys<0)
-            ys=ys1=0;
-        if (source_height/2<target_height)
-            yprt = (y*source_height+offs_y)%target_height;
-        else
-            yprt = th2;
-        yprt1 = target_height-yprt;
-        for (x=0;x<target_width;++x)
-        {
-            xs = (x*source_width+offs_x)/target_width;
-            if (source_width/2<target_width)
-                xprt = (x*source_width+offs_x)%target_width;
-            else
-                xprt = tw2;
-            xprt1 = target_width-xprt;
-            int xs1 = xs+1;
-            if (xs1>=source_width)
-                xs1--;
-            if (xs<0)
-                xs=xs1=0;
-
-            unsigned a = source(xs,ys);
-            unsigned b = source(xs1,ys);
-            unsigned c = source(xs,ys1);
-            unsigned d = source(xs1,ys1);
-            unsigned out=0;
-            unsigned t = 0;
-
-            for(int i=0; i<4; i++){
-                unsigned p,r,s;
-                // X axis
-                p = a&0xff;
-                r = b&0xff;
-                if (p!=r)
-                    r = (r*xprt+p*xprt1+tw2)/target_width;
-                p = c&0xff;
-                s = d&0xff;
-                if (p!=s)
-                    s = (s*xprt+p*xprt1+tw2)/target_width;
-                // Y axis
-                if (r!=s)
-                    r = (s*yprt+r*yprt1+th2)/target_height;
-                // channel up
-                out |= r << t;
-                t += 8;
-                a >>= 8;
-                b >>= 8;
-                c >>= 8;
-                d >>= 8;
-            }
-            target(x,y)=out;
-        }
-    }
-}
-
-
-template <typename Image>
-void scale_image_bilinear8 (Image & target,Image const& source, double x_off_f, double y_off_f)
-{
-
-    int source_width=source.width();
-    int source_height=source.height();
-
-    int target_width=target.width();
-    int target_height=target.height();
-
-    if (source_width<1 || source_height<1 ||
-        target_width<1 || target_height<1) return;
-    int x=0,y=0,xs=0,ys=0;
-    int tw2 = target_width/2;
-    int th2 = target_height/2;
-    int offs_x = rint((source_width-target_width-x_off_f*2*source_width)/2);
-    int offs_y = rint((source_height-target_height-y_off_f*2*source_height)/2);
-    unsigned yprt, yprt1, xprt, xprt1;
-
-    //no scaling or subpixel offset
-    if (target_height == source_height && target_width == source_width && offs_x == 0 && offs_y == 0){
-        for (y=0;y<target_height;++y)
-            target.setRow(y,source.getRow(y),target_width);
-        return;
-    }
-
-    for (y=0;y<target_height;++y)
-    {
-        ys = (y*source_height+offs_y)/target_height;
-        int ys1 = ys+1;
-        if (ys1>=source_height)
-            ys1--;
-        if (ys<0)
-            ys=ys1=0;
-        if (source_height/2<target_height)
-            yprt = (y*source_height+offs_y)%target_height;
-        else
-            yprt = th2;
-        yprt1 = target_height-yprt;
-        for (x=0;x<target_width;++x)
-        {
-            xs = (x*source_width+offs_x)/target_width;
-            if (source_width/2<target_width)
-                xprt = (x*source_width+offs_x)%target_width;
-            else
-                xprt = tw2;
-            xprt1 = target_width-xprt;
-            int xs1 = xs+1;
-            if (xs1>=source_width)
-                xs1--;
-            if (xs<0)
-                xs=xs1=0;
-
-            unsigned a = source(xs,ys);
-            unsigned b = source(xs1,ys);
-            unsigned c = source(xs,ys1);
-            unsigned d = source(xs1,ys1);
-            unsigned p,r,s;
-            // X axis
-            p = a&0xff;
-            r = b&0xff;
-            if (p!=r)
-                r = (r*xprt+p*xprt1+tw2)/target_width;
-            p = c&0xff;
-            s = d&0xff;
-            if (p!=s)
-                s = (s*xprt+p*xprt1+tw2)/target_width;
-            // Y axis
-            if (r!=s)
-                r = (s*yprt+r*yprt1+th2)/target_height;
-            target(x,y)=(0xff<<24) | (r<<16) | (r<<8) | r;
-        }
-    }
-}
-
 template <typename Image>
 void scale_image_agg(Image & target,
                      Image const& source,
@@ -262,14 +102,14 @@ void scale_image_agg(Image & target,
                      double image_ratio_y,
                      double x_off_f,
                      double y_off_f,
-                     double filter_radius)
+                     double filter_factor)
 {
     // "the image filters should work namely in the premultiplied color space"
     // http://old.nabble.com/Re:--AGG--Basic-image-transformations-p1110665.html
     // "Yes, you need to use premultiplied images only. Only in this case the simple weighted averaging works correctly in the image fitering."
     // http://permalink.gmane.org/gmane.comp.graphics.agg/3443
-    typedef agg::pixfmt_rgba32_pre pixfmt_pre;
-    typedef agg::renderer_base<pixfmt_pre> renderer_base_pre;
+    using pixfmt_pre = agg::pixfmt_rgba32_pre;
+    using renderer_base_pre = agg::renderer_base<pixfmt_pre>;
 
     // define some stuff we'll use soon
     agg::rasterizer_scanline_aa<> ras;
@@ -280,21 +120,20 @@ void scale_image_agg(Image & target,
     // initialize source AGG buffer
     agg::rendering_buffer rbuf_src((unsigned char*)source.getBytes(), source.width(), source.height(), source.width() * 4);
     pixfmt_pre pixf_src(rbuf_src);
-    typedef agg::image_accessor_clone<pixfmt_pre> img_src_type;
+    using img_src_type = agg::image_accessor_clone<pixfmt_pre>;
     img_src_type img_src(pixf_src);
 
     // initialize destination AGG buffer (with transparency)
     agg::rendering_buffer rbuf_dst((unsigned char*)target.getBytes(), target.width(), target.height(), target.width() * 4);
     pixfmt_pre pixf_dst(rbuf_dst);
     renderer_base_pre rb_dst_pre(pixf_dst);
-    rb_dst_pre.clear(agg::rgba(0, 0, 0, 0));
 
     // create a scaling matrix
     agg::trans_affine img_mtx;
     img_mtx /= agg::trans_affine_scaling(image_ratio_x, image_ratio_y);
 
     // create a linear interpolator for our scaling matrix
-    typedef agg::span_interpolator_linear<> interpolator_type;
+    using interpolator_type = agg::span_interpolator_linear<>;
     interpolator_type interpolator(img_mtx);
 
     // draw an anticlockwise polygon to render our image into
@@ -310,13 +149,12 @@ void scale_image_agg(Image & target,
     {
     case SCALING_NEAR:
     {
-        typedef agg::span_image_filter_rgba_nn<img_src_type, interpolator_type> span_gen_type;
+        using span_gen_type = agg::span_image_filter_rgba_nn<img_src_type, interpolator_type>;
         span_gen_type sg(img_src, interpolator);
         agg::render_scanlines_aa(ras, sl, rb_dst_pre, sa, sg);
         return;
     }
     case SCALING_BILINEAR:
-    case SCALING_BILINEAR8:
         filter.calculate(agg::image_filter_bilinear(), true); break;
     case SCALING_BICUBIC:
         filter.calculate(agg::image_filter_bicubic(), true); break;
@@ -343,26 +181,26 @@ void scale_image_agg(Image & target,
     case SCALING_MITCHELL:
         filter.calculate(agg::image_filter_mitchell(), true); break;
     case SCALING_SINC:
-        filter.calculate(agg::image_filter_sinc(filter_radius), true); break;
+        filter.calculate(agg::image_filter_sinc(filter_factor), true); break;
     case SCALING_LANCZOS:
-        filter.calculate(agg::image_filter_lanczos(filter_radius), true); break;
+        filter.calculate(agg::image_filter_lanczos(filter_factor), true); break;
     case SCALING_BLACKMAN:
-        filter.calculate(agg::image_filter_blackman(filter_radius), true); break;
+        filter.calculate(agg::image_filter_blackman(filter_factor), true); break;
     }
     // details on various resampling considerations
     // http://old.nabble.com/Re%3A-Newbie---texture-p5057255.html
 
     // high quality resampler
-    typedef agg::span_image_resample_rgba_affine<img_src_type> span_gen_type;
+    using span_gen_type = agg::span_image_resample_rgba_affine<img_src_type>;
 
     // faster, lower quality
-    //typedef agg::span_image_filter_rgba<img_src_type,interpolator_type> span_gen_type;
+    //using span_gen_type = agg::span_image_filter_rgba<img_src_type,interpolator_type>;
 
     // local, modified agg::span_image_resample_rgba_affine
     // dating back to when we were not handling alpha correctly
     // and this file helped work around symptoms
     // https://github.com/mapnik/mapnik/issues/1489
-    //typedef mapnik::span_image_resample_rgba_affine<img_src_type> span_gen_type;
+    //using span_gen_type = mapnik::span_image_resample_rgba_affine<img_src_type>;
     span_gen_type sg(img_src, interpolator, filter);
     agg::render_scanlines_aa(ras, sl, rb_dst_pre, sa, sg);
 }
@@ -374,11 +212,6 @@ template void scale_image_agg<image_data_32>(image_data_32& target,
                                              double image_ratio_y,
                                              double x_off_f,
                                              double y_off_f,
-                                             double filter_radius);
-
-template void scale_image_bilinear_old<image_data_32> (image_data_32& target,const image_data_32& source, double x_off_f, double y_off_f);
-
-template void scale_image_bilinear8<image_data_32> (image_data_32& target,const image_data_32& source, double x_off_f, double y_off_f);
-
+                                             double filter_factor);
 
 }
diff --git a/src/image_util.cpp b/src/image_util.cpp
index 8738493..3de9b45 100644
--- a/src/image_util.cpp
+++ b/src/image_util.cpp
@@ -40,6 +40,10 @@ extern "C"
 #include <mapnik/jpeg_io.hpp>
 #endif
 
+#if defined(HAVE_WEBP)
+#include <mapnik/webp_io.hpp>
+#endif
+
 #include <mapnik/image_util.hpp>
 #include <mapnik/image_data.hpp>
 #include <mapnik/graphics.hpp>
@@ -50,21 +54,20 @@ extern "C"
 #include <mapnik/util/conversions.hpp>
 
 #ifdef HAVE_CAIRO
-#include <mapnik/cairo_renderer.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
 #include <cairo.h>
 #ifdef CAIRO_HAS_PDF_SURFACE
 #include <cairo-pdf.h>
-#endif // CAIRO_HAS_PDF_SURFACE
+#endif
 #ifdef CAIRO_HAS_PS_SURFACE
 #include <cairo-ps.h>
-#endif // CAIRO_HAS_PS_SURFACE
+#endif
 #ifdef CAIRO_HAS_SVG_SURFACE
 #include <cairo-svg.h>
-#endif // CAIRO_HAS_SVG_SURFACE
+#endif
 #endif
 
 // boost
-#include <boost/foreach.hpp>
 #include <boost/tokenizer.hpp>
 
 // stl
@@ -125,113 +128,417 @@ void save_to_file(T const& image,
 }
 
 #if defined(HAVE_PNG)
+
 void handle_png_options(std::string const& type,
-                        int * colors,
-                        int * compression,
-                        int * strategy,
-                        int * trans_mode,
-                        double * gamma,
-                        bool * use_octree,
-                        bool * use_miniz)
+                        png_options & opts)
 {
     if (type == "png" || type == "png24" || type == "png32")
     {
-        // Shortcut when the user didn't specify any flags after the colon.
-        // Paletted images specify "png8 or png256".
-        *colors = -1;
+        opts.paletted = false;
+        return;
+    }
+    else if (type == "png8" || type == "png256")
+    {
+        opts.paletted = true;
+        return;
+    }
+    boost::char_separator<char> sep(":");
+    boost::tokenizer< boost::char_separator<char> > tokens(type, sep);
+    bool set_colors = false;
+    bool set_gamma = false;
+    for (std::string const& t : tokens)
+    {
+        if (t == "png8" || t == "png256")
+        {
+            opts.paletted = true;
+        }
+        else if (t == "png" || t == "png24" || t == "png32")
+        {
+            opts.paletted = false;
+        }
+        else if (t == "m=o")
+        {
+            opts.use_hextree = false;
+        }
+        else if (t == "m=h")
+        {
+            opts.use_hextree = true;
+        }
+        else if (t == "e=miniz")
+        {
+            opts.use_miniz = true;
+        }
+        else if (boost::algorithm::starts_with(t, "c="))
+        {
+            set_colors = true;
+            if (!mapnik::util::string2int(t.substr(2),opts.colors) || opts.colors < 1 || opts.colors > 256)
+            {
+                throw ImageWriterException("invalid color parameter: " + t.substr(2));
+            }
+        }
+        else if (boost::algorithm::starts_with(t, "t="))
+        {
+            if (!mapnik::util::string2int(t.substr(2),opts.trans_mode) || opts.trans_mode < 0 || opts.trans_mode > 2)
+            {
+                throw ImageWriterException("invalid trans_mode parameter: " + t.substr(2));
+            }
+        }
+        else if (boost::algorithm::starts_with(t, "g="))
+        {
+            set_gamma = true;
+            if (!mapnik::util::string2double(t.substr(2),opts.gamma) || opts.gamma < 0)
+            {
+                throw ImageWriterException("invalid gamma parameter: " + t.substr(2));
+            }
+        }
+        else if (boost::algorithm::starts_with(t, "z="))
+        {
+            /*
+              #define Z_NO_COMPRESSION         0
+              #define Z_BEST_SPEED             1
+              #define Z_BEST_COMPRESSION       9
+              #define Z_DEFAULT_COMPRESSION  (-1)
+            */
+            if (!mapnik::util::string2int(t.substr(2),opts.compression)
+                || opts.compression < Z_DEFAULT_COMPRESSION
+                || opts.compression > 10) // use 10 here rather than Z_BEST_COMPRESSION (9) to allow for MZ_UBER_COMPRESSION
+            {
+                throw ImageWriterException("invalid compression parameter: " + t.substr(2) + " (only -1 through 10 are valid)");
+            }
+        }
+        else if (boost::algorithm::starts_with(t, "s="))
+        {
+            std::string s = t.substr(2);
+            if (s == "default")
+            {
+                opts.strategy = Z_DEFAULT_STRATEGY;
+            }
+            else if (s == "filtered")
+            {
+                opts.strategy = Z_FILTERED;
+            }
+            else if (s == "huff")
+            {
+                opts.strategy = Z_HUFFMAN_ONLY;
+            }
+            else if (s == "rle")
+            {
+                opts.strategy = Z_RLE;
+            }
+            else if (s == "fixed")
+            {
+                opts.strategy = Z_FIXED;
+            }
+            else
+            {
+                throw ImageWriterException("invalid compression strategy parameter: " + s);
+            }
+        }
+        else
+        {
+            throw ImageWriterException("unhandled png option: " + t);
+        }
+    }
+    // validation
+    if (!opts.paletted && set_colors)
+    {
+        throw ImageWriterException("invalid color parameter: unavailable for true color (non-paletted) images");
+    }
+    if (!opts.paletted && set_gamma)
+    {
+        throw ImageWriterException("invalid gamma parameter: unavailable for true color (non-paletted) images");
+    }
+    if ((opts.use_miniz == false) && opts.compression > Z_BEST_COMPRESSION)
+    {
+        throw ImageWriterException("invalid compression value: (only -1 through 9 are valid)");
+    }
+}
+#endif
+
+#if defined(HAVE_WEBP)
+void handle_webp_options(std::string const& type,
+                        WebPConfig & config,
+                        bool & alpha)
+{
+    if (type == "webp")
+    {
         return;
     }
-    // TODO - convert to spirit parser
-    if (type.length() > 6){
+    if (type.length() > 4){
         boost::char_separator<char> sep(":");
         boost::tokenizer< boost::char_separator<char> > tokens(type, sep);
-        BOOST_FOREACH(std::string t, tokens)
+        for (auto const& t : tokens)
         {
-            if (t == "png" || t == "png24" || t == "png32")
+            if (t == "webp")
+            {
+                continue;
+            }
+            else if (boost::algorithm::starts_with(t, "quality="))
+            {
+                std::string val = t.substr(8);
+                if (!val.empty())
+                {
+                    double quality = 90;
+                    if (!mapnik::util::string2double(val,quality) || quality < 0.0 || quality > 100.0)
+                    {
+                        throw ImageWriterException("invalid webp quality: '" + val + "'");
+                    }
+                    config.quality = static_cast<float>(quality);
+                }
+            }
+            else if (boost::algorithm::starts_with(t, "method="))
             {
-                *colors = -1;
+                std::string val = t.substr(7);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2int(val,config.method) || config.method < 0 || config.method > 6)
+                    {
+                        throw ImageWriterException("invalid webp method: '" + val + "'");
+                    }
+                }
             }
-            else if (t == "m=h")
+            else if (boost::algorithm::starts_with(t, "lossless="))
             {
-                *use_octree = false;
+                std::string val = t.substr(9);
+                if (!val.empty())
+                {
+                    #if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1 // >= v0.1.99 / 0x0100
+                    if (!mapnik::util::string2int(val,config.lossless) || config.lossless < 0 || config.lossless > 1)
+                    {
+                        throw ImageWriterException("invalid webp lossless: '" + val + "'");
+                    }
+                    #else
+                        #ifdef _MSC_VER
+                          #pragma NOTE(compiling against webp that does not support the lossless flag)
+                        #else
+                          #warning "compiling against webp that does not support the lossless flag"
+                        #endif
+                    throw ImageWriterException("your webp version does not support the lossless option");
+                    #endif
+                }
+            }
+            else if (boost::algorithm::starts_with(t, "image_hint="))
+            {
+                std::string val = t.substr(11);
+                if (!val.empty())
+                {
+                    #if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1 // >= v0.1.99 / 0x0100
+                    int image_hint = 0;
+                    if (!mapnik::util::string2int(val,image_hint) || image_hint < 0 || image_hint > 3)
+                    {
+                        throw ImageWriterException("invalid webp image_hint: '" + val + "'");
+                    }
+                    config.image_hint = static_cast<WebPImageHint>(image_hint);
+                    #else
+                        #ifdef _MSC_VER
+                          #pragma NOTE(compiling against webp that does not support the image_hint flag)
+                        #else
+                          #warning "compiling against webp that does not support the image_hint flag"
+                        #endif
+                    throw ImageWriterException("your webp version does not support the image_hint option");
+                    #endif
+                }
             }
-            else if (t == "m=o")
+            else if (boost::algorithm::starts_with(t, "alpha="))
             {
-                *use_octree = true;
+                std::string val = t.substr(6);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2bool(val,alpha))
+                    {
+                        throw ImageWriterException("invalid webp alpha: '" + val + "'");
+                    }
+                }
             }
-            else if (t == "e=miniz")
+            else if (boost::algorithm::starts_with(t, "target_size="))
             {
-                *use_miniz = true;
+                std::string val = t.substr(12);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2int(val,config.target_size))
+                    {
+                        throw ImageWriterException("invalid webp target_size: '" + val + "'");
+                    }
+                }
             }
-            else if (boost::algorithm::starts_with(t, "c="))
+            else if (boost::algorithm::starts_with(t, "target_psnr="))
             {
-                if (*colors < 0)
-                    throw ImageWriterException("invalid color parameter: unavailable for true color images");
-
-                if (!mapnik::util::string2int(t.substr(2),*colors) || *colors < 1 || *colors > 256)
-                    throw ImageWriterException("invalid color parameter: " + t.substr(2));
+                std::string val = t.substr(12);
+                if (!val.empty())
+                {
+                    double psnr = 0;
+                    if (!mapnik::util::string2double(val,psnr))
+                    {
+                        throw ImageWriterException("invalid webp target_psnr: '" + val + "'");
+                    }
+                    config.target_PSNR = psnr;
+                }
             }
-            else if (boost::algorithm::starts_with(t, "t="))
+            else if (boost::algorithm::starts_with(t, "segments="))
             {
-                if (!mapnik::util::string2int(t.substr(2),*trans_mode) || *trans_mode < 0 || *trans_mode > 2)
-                    throw ImageWriterException("invalid trans_mode parameter: " + t.substr(2));
+                std::string val = t.substr(9);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2int(val,config.segments))
+                    {
+                        throw ImageWriterException("invalid webp segments: '" + val + "'");
+                    }
+                }
             }
-            else if (boost::algorithm::starts_with(t, "g="))
+            else if (boost::algorithm::starts_with(t, "sns_strength="))
             {
-                if (*colors < 0)
-                    throw ImageWriterException("invalid gamma parameter: unavailable for true color images");
-                if (!mapnik::util::string2double(t.substr(2),*gamma) || *gamma < 0)
+                std::string val = t.substr(13);
+                if (!val.empty())
                 {
-                    throw ImageWriterException("invalid gamma parameter: " + t.substr(2));
+                    if (!mapnik::util::string2int(val,config.sns_strength))
+                    {
+                        throw ImageWriterException("invalid webp sns_strength: '" + val + "'");
+                    }
                 }
             }
-            else if (boost::algorithm::starts_with(t, "z="))
-            {
-                /*
-                  #define Z_NO_COMPRESSION         0
-                  #define Z_BEST_SPEED             1
-                  #define Z_BEST_COMPRESSION       9
-                  #define Z_DEFAULT_COMPRESSION  (-1)
-                */
-                if (!mapnik::util::string2int(t.substr(2),*compression)
-                    || *compression < Z_DEFAULT_COMPRESSION
-                    || *compression > 10) // use 10 here rather than Z_BEST_COMPRESSION (9) to allow for MZ_UBER_COMPRESSION
+            else if (boost::algorithm::starts_with(t, "filter_strength="))
+            {
+                std::string val = t.substr(16);
+                if (!val.empty())
                 {
-                    throw ImageWriterException("invalid compression parameter: " + t.substr(2) + " (only -1 through 10 are valid)");
+                    if (!mapnik::util::string2int(val,config.filter_strength))
+                    {
+                        throw ImageWriterException("invalid webp filter_strength: '" + val + "'");
+                    }
                 }
             }
-            else if (boost::algorithm::starts_with(t, "s="))
+            else if (boost::algorithm::starts_with(t, "filter_sharpness="))
             {
-                std::string const& s = t.substr(2);
-                if (s == "default")
+                std::string val = t.substr(17);
+                if (!val.empty())
                 {
-                    *strategy = Z_DEFAULT_STRATEGY;
+                    if (!mapnik::util::string2int(val,config.filter_sharpness))
+                    {
+                        throw ImageWriterException("invalid webp filter_sharpness: '" + val + "'");
+                    }
                 }
-                else if (s == "filtered")
+            }
+            else if (boost::algorithm::starts_with(t, "filter_type="))
+            {
+                std::string val = t.substr(12);
+                if (!val.empty())
                 {
-                    *strategy = Z_FILTERED;
+                    if (!mapnik::util::string2int(val,config.filter_type))
+                    {
+                        throw ImageWriterException("invalid webp filter_type: '" + val + "'");
+                    }
                 }
-                else if (s == "huff")
+            }
+            else if (boost::algorithm::starts_with(t, "autofilter="))
+            {
+                std::string val = t.substr(11);
+                if (!val.empty())
                 {
-                    *strategy = Z_HUFFMAN_ONLY;
+                    if (!mapnik::util::string2int(val,config.autofilter))
+                    {
+                        throw ImageWriterException("invalid webp autofilter: '" + val + "'");
+                    }
                 }
-                else if (s == "rle")
+            }
+            else if (boost::algorithm::starts_with(t, "alpha_compression="))
+            {
+                std::string val = t.substr(18);
+                if (!val.empty())
                 {
-                    *strategy = Z_RLE;
+                    if (!mapnik::util::string2int(val,config.alpha_compression))
+                    {
+                        throw ImageWriterException("invalid webp alpha_compression: '" + val + "'");
+                    }
                 }
-                else if (s == "fixed")
+            }
+            else if (boost::algorithm::starts_with(t, "alpha_filtering="))
+            {
+                std::string val = t.substr(16);
+                if (!val.empty())
                 {
-                    *strategy = Z_FIXED;
+                    #if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1 // >= v0.1.99 / 0x0100
+                    if (!mapnik::util::string2int(val,config.alpha_filtering))
+                    {
+                        throw ImageWriterException("invalid webp alpha_filtering: '" + val + "'");
+                    }
+                    #else
+                        #ifdef _MSC_VER
+                          #pragma NOTE(compiling against webp that does not support the alpha_filtering flag)
+                        #else
+                          #warning "compiling against webp that does not support the alpha_filtering flag"
+                        #endif
+                    throw ImageWriterException("your webp version does not support the alpha_filtering option");
+                    #endif
                 }
-                else
+            }
+            else if (boost::algorithm::starts_with(t, "alpha_quality="))
+            {
+                std::string val = t.substr(14);
+                if (!val.empty())
                 {
-                    throw ImageWriterException("invalid compression strategy parameter: " + s);
+                    #if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1 // >= v0.1.99 / 0x0100
+                    if (!mapnik::util::string2int(val,config.alpha_quality))
+                    {
+                        throw ImageWriterException("invalid webp alpha_quality: '" + val + "'");
+                    }
+                    #else
+                        #ifdef _MSC_VER
+                          #pragma NOTE(compiling against webp that does not support the alpha_quality flag)
+                        #else
+                          #warning "compiling against webp that does not support the alpha_quality flag"
+                        #endif
+                    throw ImageWriterException("your webp version does not support the alpha_quality option");
+                    #endif
                 }
             }
-        }
-        if ((*use_miniz == false) && *compression > Z_BEST_COMPRESSION)
-        {
-            throw ImageWriterException("invalid compression value: (only -1 through 9 are valid)");
+            else if (boost::algorithm::starts_with(t, "pass="))
+            {
+                std::string val = t.substr(5);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2int(val,config.pass))
+                    {
+                        throw ImageWriterException("invalid webp pass: '" + val + "'");
+                    }
+                }
+            }
+            else if (boost::algorithm::starts_with(t, "preprocessing="))
+            {
+                std::string val = t.substr(14);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2int(val,config.preprocessing))
+                    {
+                        throw ImageWriterException("invalid webp preprocessing: '" + val + "'");
+                    }
+                }
+            }
+            else if (boost::algorithm::starts_with(t, "partitions="))
+            {
+                std::string val = t.substr(11);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2int(val,config.partitions))
+                    {
+                        throw ImageWriterException("invalid webp partitions: '" + val + "'");
+                    }
+                }
+            }
+            else if (boost::algorithm::starts_with(t, "partition_limit="))
+            {
+                std::string val = t.substr(16);
+                if (!val.empty())
+                {
+                    if (!mapnik::util::string2int(val,config.partition_limit))
+                    {
+                        throw ImageWriterException("invalid webp partition_limit: '" + val + "'");
+                    }
+                }
+            }
+            else
+            {
+                throw ImageWriterException("unhandled webp option: " + t);
+            }
         }
     }
 }
@@ -250,38 +557,15 @@ void save_to_stream(T const& image,
         if (t == "png" || boost::algorithm::starts_with(t, "png"))
         {
 #if defined(HAVE_PNG)
-            int colors  = 256;
-            int compression = Z_DEFAULT_COMPRESSION;
-            int strategy = Z_DEFAULT_STRATEGY;
-            int trans_mode = -1;
-            double gamma = -1;
-            bool use_octree = true;
-            bool use_miniz = false;
-
-            handle_png_options(t,
-                               &colors,
-                               &compression,
-                               &strategy,
-                               &trans_mode,
-                               &gamma,
-                               &use_octree,
-                               &use_miniz);
-
             if (palette.valid())
             {
-                save_as_png8_pal(stream, image, palette, compression, strategy, use_miniz);
-            }
-            else if (colors < 0)
-            {
-                save_as_png(stream, image, compression, strategy, trans_mode, use_miniz);
-            }
-            else if (use_octree)
-            {
-                save_as_png8_oct(stream, image, colors, compression, strategy, trans_mode, use_miniz);
+                png_options opts;
+                handle_png_options(t,opts);
+                save_as_png8_pal(stream, image, palette, opts);
             }
             else
             {
-                save_as_png8_hex(stream, image, colors, compression, strategy, trans_mode, gamma, use_miniz);
+                save_to_stream(image,stream,type);
             }
 #else
             throw ImageWriterException("png output is not enabled in your build of Mapnik");
@@ -313,34 +597,22 @@ void save_to_stream(T const& image,
         if (t == "png" || boost::algorithm::starts_with(t, "png"))
         {
 #if defined(HAVE_PNG)
-            int colors  = 256;
-            int compression = Z_DEFAULT_COMPRESSION; // usually mapped to z=6 in zlib
-            int strategy = Z_DEFAULT_STRATEGY;
-            int trans_mode = -1;
-            double gamma = -1;
-            bool use_octree = true;
-            bool use_miniz = false;
-
-            handle_png_options(t,
-                               &colors,
-                               &compression,
-                               &strategy,
-                               &trans_mode,
-                               &gamma,
-                               &use_octree,
-                               &use_miniz);
-
-            if (colors < 0)
+            png_options opts;
+            handle_png_options(t,opts);
+            if (opts.paletted)
             {
-                save_as_png(stream, image, compression, strategy, trans_mode, use_miniz);
-            }
-            else if (use_octree)
-            {
-                save_as_png8_oct(stream, image, colors, compression, strategy, trans_mode, use_miniz);
+                if (opts.use_hextree)
+                {
+                    save_as_png8_hex(stream, image, opts);
+                }
+                else
+                {
+                    save_as_png8_oct(stream, image, opts);
+                }
             }
             else
             {
-                save_as_png8_hex(stream, image, colors, compression, strategy, trans_mode, gamma, use_miniz);
+                save_as_png(stream, image, opts);
             }
 #else
             throw ImageWriterException("png output is not enabled in your build of Mapnik");
@@ -358,7 +630,7 @@ void save_to_stream(T const& image,
         {
 #if defined(HAVE_JPEG)
             int quality = 85;
-            std::string const& val = t.substr(4);
+            std::string val = t.substr(4);
             if (!val.empty())
             {
                 if (!mapnik::util::string2int(val,quality) || quality < 0 || quality > 100)
@@ -371,6 +643,23 @@ void save_to_stream(T const& image,
             throw ImageWriterException("jpeg output is not enabled in your build of Mapnik");
 #endif
         }
+        else if (boost::algorithm::starts_with(t, "webp"))
+        {
+#if defined(HAVE_WEBP)
+            WebPConfig config;
+            // Default values set here will be lossless=0 and quality=75 (as least as of webp v0.3.1)
+            if (!WebPConfigInit(&config))
+            {
+                throw std::runtime_error("version mismatch");
+            }
+            // see for more details: https://github.com/mapnik/mapnik/wiki/Image-IO#webp-output-options
+            bool alpha = true;
+            handle_webp_options(t,config,alpha);
+            save_as_webp(stream,image,config,alpha);
+#else
+            throw ImageWriterException("webp output is not enabled in your build of Mapnik");
+#endif
+        }
         else throw ImageWriterException("unknown file type: " + type);
     }
     else throw ImageWriterException("Could not write to empty stream" );
@@ -400,12 +689,12 @@ void save_to_file(T const& image, std::string const& filename, rgba_palette cons
 
 #if defined(HAVE_CAIRO)
 // TODO - move to separate cairo_io.hpp
-void save_to_cairo_file(mapnik::Map const& map, std::string const& filename, double scale_factor)
+void save_to_cairo_file(mapnik::Map const& map, std::string const& filename, double scale_factor, double scale_denominator)
 {
     boost::optional<std::string> type = type_from_filename(filename);
     if (type)
     {
-        save_to_cairo_file(map,filename,*type,scale_factor);
+        save_to_cairo_file(map,filename,*type,scale_factor,scale_denominator);
     }
     else throw ImageWriterException("Could not write file to " + filename );
 }
@@ -413,7 +702,8 @@ void save_to_cairo_file(mapnik::Map const& map, std::string const& filename, dou
 void save_to_cairo_file(mapnik::Map const& map,
                         std::string const& filename,
                         std::string const& type,
-                        double scale_factor)
+                        double scale_factor,
+                        double scale_denominator)
 {
     std::ofstream file (filename.c_str(), std::ios::out|std::ios::trunc|std::ios::binary);
     if (file)
@@ -467,7 +757,7 @@ void save_to_cairo_file(mapnik::Map const& map,
         */
 
         mapnik::cairo_renderer<cairo_ptr> ren(map, create_context(surface), scale_factor);
-        ren.apply();
+        ren.apply(scale_denominator);
 
         if (type == "ARGB32" || type == "RGB24")
         {
diff --git a/src/jpeg_reader.cpp b/src/jpeg_reader.cpp
index 5af0869..af2d400 100644
--- a/src/jpeg_reader.cpp
+++ b/src/jpeg_reader.cpp
@@ -31,14 +31,16 @@ extern "C"
 }
 
 // boost
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_array.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/iostreams/device/file.hpp>
 #include <boost/iostreams/device/array.hpp>
 #include <boost/iostreams/stream.hpp>
+#pragma GCC diagnostic pop
 
 // std
 #include <cstdio>
+#include <memory>
 
 namespace mapnik
 {
@@ -47,8 +49,8 @@ template <typename T>
 class jpeg_reader : public image_reader
 {
 public:
-    typedef T source_type;
-    typedef boost::iostreams::stream<source_type> input_stream;
+    using source_type = T;
+    using input_stream = boost::iostreams::stream<source_type>;
     const static unsigned BUF_SIZE = 4096;
 private:
     struct jpeg_stream_wrapper
@@ -81,6 +83,7 @@ public:
     ~jpeg_reader();
     unsigned width() const;
     unsigned height() const;
+    inline bool has_alpha() const { return false; }
     inline bool premultiplied_alpha() const { return true; }
     void read(unsigned x,unsigned y,image_data_32& image);
 private:
@@ -162,15 +165,14 @@ void jpeg_reader<T>::skip(j_decompress_ptr cinfo, long count)
     if (count <= 0) return; //A zero or negative skip count should be treated as a no-op.
     jpeg_stream_wrapper* wrap = reinterpret_cast<jpeg_stream_wrapper*>(cinfo->src);
 
-    if (wrap->manager.bytes_in_buffer > 0u
-        && static_cast<unsigned long>(count) < wrap->manager.bytes_in_buffer)
+    if (wrap->manager.bytes_in_buffer > 0 && count < static_cast<long>(wrap->manager.bytes_in_buffer))
     {
         wrap->manager.bytes_in_buffer -= count;
         wrap->manager.next_input_byte = &wrap->buffer[BUF_SIZE - wrap->manager.bytes_in_buffer];
     }
     else
     {
-        wrap->stream->seekg(count, std::ios_base::cur);
+        wrap->stream->seekg(count - wrap->manager.bytes_in_buffer, std::ios_base::cur);
         // trigger buffer fill
         wrap->manager.next_input_byte = 0;
         wrap->manager.bytes_in_buffer = 0; //bytes_in_buffer may be zero on return.
@@ -178,7 +180,7 @@ void jpeg_reader<T>::skip(j_decompress_ptr cinfo, long count)
 }
 
 template <typename T>
-void jpeg_reader<T>::term (j_decompress_ptr cinfo)
+void jpeg_reader<T>::term (j_decompress_ptr /*cinfo*/)
 {
 // no-op
 }
@@ -191,7 +193,7 @@ void jpeg_reader<T>::attach_stream (j_decompress_ptr cinfo, input_stream* in)
         cinfo->src = (struct jpeg_source_mgr *)
             (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(jpeg_stream_wrapper));
     }
-    typename jpeg_reader::jpeg_stream_wrapper * src = reinterpret_cast<typename jpeg_reader::jpeg_stream_wrapper*> (cinfo->src);
+    jpeg_reader::jpeg_stream_wrapper * src = reinterpret_cast<jpeg_reader::jpeg_stream_wrapper*> (cinfo->src);
     src->manager.init_source = init_source;
     src->manager.fill_input_buffer = fill_input_buffer;
     src->manager.skip_input_data = skip;
@@ -203,15 +205,16 @@ void jpeg_reader<T>::attach_stream (j_decompress_ptr cinfo, input_stream* in)
 }
 
 template <typename T>
-void jpeg_reader<T>::on_error(j_common_ptr cinfo)
+void jpeg_reader<T>::on_error(j_common_ptr /*cinfo*/)
 {
-    throw image_reader_exception("JPEG Reader: libjpeg could not read image");
 }
 
 template <typename T>
 void jpeg_reader<T>::on_error_message(j_common_ptr cinfo)
 {
-    // used to supress jpeg from printing to stderr
+    char buffer[JMSG_LENGTH_MAX];
+    (*cinfo->err->format_message)(cinfo, buffer);
+    throw image_reader_exception(std::string("JPEG Reader: libjpeg could not read image: ") + buffer);
 }
 
 template <typename T>
@@ -280,7 +283,7 @@ void jpeg_reader<T>::read(unsigned x0, unsigned y0, image_data_32& image)
     unsigned w = std::min(unsigned(image.width()),width_ - x0);
     unsigned h = std::min(unsigned(image.height()),height_ - y0);
 
-    boost::scoped_array<unsigned int> out_row(new unsigned int[w]);
+    const std::unique_ptr<unsigned int[]> out_row(new unsigned int[w]);
     unsigned row = 0;
     while (cinfo.output_scanline < cinfo.output_height)
     {
diff --git a/src/json/build.py b/src/json/build.py
new file mode 100644
index 0000000..45b4b47
--- /dev/null
+++ b/src/json/build.py
@@ -0,0 +1,35 @@
+#
+# This file is part of Mapnik (c++ mapping toolkit)
+#
+# Copyright (C) 2014 Artem Pavlenko
+#
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# 
+
+import os
+from glob import glob
+
+Import('env')
+lib_env = env.Clone()
+if 'g++' in env['CXX']:
+    lib_env.Append(CXXFLAGS='-fPIC')
+
+name = "mapnik-json"
+lib = lib_env.StaticLibrary(name, glob('./' + '*.cpp'), LIBS=[])
+target = os.path.join(env['MAPNIK_LIB_BASE_DEST'], env.subst('${LIBPREFIX}%s${LIBSUFFIX}' % name))
+result = env.InstallAs(target=target, source=lib)
+env.Alias(target='install', source=result)
+env['create_uninstall_target'](env, target)
diff --git a/src/json/feature_collection_parser.cpp b/src/json/feature_collection_parser.cpp
deleted file mode 100644
index 0e1ce12..0000000
--- a/src/json/feature_collection_parser.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// TODO https://github.com/mapnik/mapnik/issues/1658
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 105200
-#define BOOST_SPIRIT_USE_PHOENIX_V3
-#endif
-
-// mapnik
-#include <mapnik/json/feature_collection_parser.hpp>
-#include <mapnik/json/feature_collection_grammar.hpp>
-
-// boost
-#include <boost/version.hpp>
-#include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/support_multi_pass.hpp>
-
-// stl
-#include <stdexcept>
-
-namespace mapnik { namespace json {
-
-#if BOOST_VERSION >= 104700
-
-    template <typename Iterator>
-    feature_collection_parser<Iterator>::feature_collection_parser(mapnik::context_ptr const& ctx, mapnik::transcoder const& tr)
-        : grammar_(new feature_collection_grammar<iterator_type,feature_type>(ctx,tr)) {}
-
-    template <typename Iterator>
-    feature_collection_parser<Iterator>::~feature_collection_parser() {}
-#endif
-
-    template <typename Iterator>
-    bool feature_collection_parser<Iterator>::parse(iterator_type first, iterator_type last, std::vector<mapnik::feature_ptr> & features)
-    {
-#if BOOST_VERSION >= 104700
-        using namespace boost::spirit;
-        return qi::phrase_parse(first, last, *grammar_, standard_wide::space, features);
-#else
-        std::ostringstream s;
-        s << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000  << "." << BOOST_VERSION % 100;
-        throw std::runtime_error("mapnik::feature_collection_parser::parse() requires at least boost 1.47 while your build was compiled against boost " + s.str());
-        return false;
-#endif
-    }
-
-    template class feature_collection_parser<std::string::const_iterator> ;
-    template class feature_collection_parser<boost::spirit::multi_pass<std::istreambuf_iterator<char> > >;
-
-}}
-
diff --git a/src/json/feature_grammar.cpp b/src/json/feature_grammar.cpp
deleted file mode 100644
index 2930490..0000000
--- a/src/json/feature_grammar.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104700
-
-// mapnik
-#include <mapnik/feature.hpp>
-#include <mapnik/json/feature_grammar.hpp>
-
-// boost
-#include <boost/spirit/include/support_multi_pass.hpp>
-
-namespace mapnik { namespace json {
-
-template <typename Iterator, typename FeatureType>
-feature_grammar<Iterator,FeatureType>::feature_grammar(mapnik::transcoder const& tr)
-    : feature_grammar::base_type(feature,"feature"),
-      put_property_(put_property(tr))
-{
-    using qi::lit;
-    using qi::long_long;
-    using qi::double_;
-#if BOOST_VERSION > 104200
-    using qi::no_skip;
-#else
-    using qi::lexeme;
-#endif
-    using standard_wide::char_;
-    using qi::_val;
-    using qi::_1;
-    using qi::_2;
-    using qi::_3;
-    using qi::_4;
-    using qi::_a;
-    using qi::_b;
-    using qi::_r1;
-    using qi::_r2;
-    using qi::fail;
-    using qi::on_error;
-    using qi::_pass;
-    using qi::eps;
-    using qi::raw;
-
-    using phoenix::new_;
-    using phoenix::push_back;
-    using phoenix::construct;
-
-    // generic json types
-    value =  object | array | string_
-        | number
-        ;
-
-    pairs = key_value % lit(',')
-        ;
-
-    key_value = (string_ >> lit(':') >> value)
-        ;
-
-    object = lit('{')
-        >> *pairs
-        >> lit('}')
-        ;
-    array = lit('[')
-        >> value >> *(lit(',') >> value)
-        >> lit(']')
-        ;
-// https://github.com/mapnik/mapnik/issues/1342
-#if BOOST_VERSION >= 104700
-    number %= strict_double
-#else
-    number = strict_double
-#endif
-        | int__
-        | lit("true") [_val = true]
-        | lit ("false") [_val = false]
-        | lit("null")[_val = construct<value_null>()]
-        ;
-
-    unesc_char.add
-        ("\\\"", '\"') // quotation mark
-        ("\\\\", '\\') // reverse solidus
-        ("\\/", '/')   // solidus
-        ("\\b", '\b')  // backspace
-        ("\\f", '\f')  // formfeed
-        ("\\n", '\n')  // newline
-        ("\\r", '\r')  // carrige return
-        ("\\t", '\t')  // tab
-        ;
-#if BOOST_VERSION > 104200
-    string_ %= lit('"') >> no_skip[*(unesc_char | "\\u" >> hex4 | (char_ - lit('"')))] >> lit('"')
-        ;
-#else
-    string_ %= lit('"') >> lexeme[*(unesc_char | "\\u" >> hex4 | (char_ - lit('"')))] >> lit('"')
-        ;
-#endif
-    // geojson types
-
-    feature_type = lit("\"type\"")
-        >> lit(':')
-        >> lit("\"Feature\"")
-        ;
-
-    feature = lit('{')
-        >> (feature_type | (lit("\"geometry\"") > lit(':') > geometry_grammar_(extract_geometry_(_r1))) | properties(_r1) | key_value) % lit(',')
-        >> lit('}')
-        ;
-
-    properties = lit("\"properties\"")
-        >> lit(':') >> (lit('{') >>  attributes(_r1) >> lit('}')) | lit("null")
-        ;
-
-    attributes = (string_ [_a = _1] >> lit(':') >> attribute_value [put_property_(_r1,_a,_1)]) % lit(',')
-        ;
-
-    attribute_value %= number | string_  ;
-
-    feature.name("Feature");
-    properties.name("Properties");
-    attributes.name("Attributes");
-
-    on_error<fail>
-        (
-            feature
-            , std::clog
-            << phoenix::val("Error! Expecting ")
-            << _4 // what failed?
-            << phoenix::val(" here: \"")
-            << where_message_(_3, _2, 16) // where? 16 is max chars to output
-            << phoenix::val("\"")
-            << std::endl
-            );
-
-}
-
-template struct mapnik::json::feature_grammar<std::string::const_iterator,mapnik::feature_impl>;
-template struct mapnik::json::feature_grammar<boost::spirit::multi_pass<std::istreambuf_iterator<char> >,mapnik::feature_impl>;
-
-}}
-
-#endif
diff --git a/src/json/geojson_generator.cpp b/src/json/geojson_generator.cpp
deleted file mode 100644
index f35ba72..0000000
--- a/src/json/geojson_generator.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// boost
-#include <boost/version.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/json/geojson_generator.hpp>
-
-#if BOOST_VERSION >= 104700
-
-#include <mapnik/json/feature_generator_grammar.hpp>
-#include <mapnik/json/geometry_generator_grammar.hpp>
-#include <boost/spirit/include/karma.hpp>
-
-namespace  mapnik { namespace json {
-
-feature_generator::feature_generator()
-    : grammar_(new feature_generator_grammar<sink_type>()) {}
-
-feature_generator::~feature_generator() {}
-
-bool feature_generator::generate(std::string & geojson, mapnik::feature_impl const& f)
-{
-    sink_type sink(geojson);
-    return karma::generate(sink, *grammar_,f);
-}
-
-
-geometry_generator::geometry_generator()
-    : grammar_(new multi_geometry_generator_grammar<sink_type>()) {}
-
-geometry_generator::~geometry_generator() {}
-
-bool geometry_generator::generate(std::string & geojson, mapnik::geometry_container const& g)
-{
-    sink_type sink(geojson);
-    return karma::generate(sink, *grammar_,g);
-}
-
-}}
-
-#else
-
-#include <string>
-#include <sstream>
-#include <stdexcept>
-
-namespace  mapnik { namespace json {
-
-bool feature_generator::generate(std::string & geojson, mapnik::feature_impl const& f)
-{
-    std::ostringstream s;
-    s << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000  << "." << BOOST_VERSION % 100;
-    throw std::runtime_error("feature_generator::generate() requires at least boost 1.47 while your build was compiled against boost " + s.str());
-    return false;
-}
-
-bool geometry_generator::generate(std::string & geojson, mapnik::geometry_container const& g)
-{
-    std::ostringstream s;
-    s << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000  << "." << BOOST_VERSION % 100;
-    throw std::runtime_error("geometry_generator::generate() requires at least boost 1.47 while your build was compiled against boost " + s.str());
-    return false;
-}
-
-}}
-
-#endif
diff --git a/src/json/geometry_grammar.cpp b/src/json/geometry_grammar.cpp
deleted file mode 100644
index 797ef79..0000000
--- a/src/json/geometry_grammar.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104700
-
-// mapnik
-#include <mapnik/json/geometry_grammar.hpp>
-
-// boost
-#include <boost/spirit/include/support_multi_pass.hpp>
-#include <boost/spirit/include/phoenix_object.hpp>
-#include <boost/spirit/include/phoenix_stl.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <iostream>                     // for clog, endl, etc
-#include <string>                       // for string
-
-namespace mapnik { namespace json {
-
-template <typename Iterator>
-geometry_grammar<Iterator>::geometry_grammar()
-    : geometry_grammar::base_type(geometry,"geometry")
-{
-
-    using qi::lit;
-    using qi::int_;
-    using qi::double_;
-    using qi::_val;
-    using qi::_1;
-    using qi::_2;
-    using qi::_3;
-    using qi::_4;
-    using qi::_a;
-    using qi::_b;
-    using qi::_r1;
-    using qi::_r2;
-    using qi::eps;
-    using qi::_pass;
-    using qi::fail;
-    using qi::on_error;
-    using boost::phoenix::new_;
-    using boost::phoenix::push_back;
-    using boost::phoenix::construct;
-   // Nabialek trick - FIXME: how to bind argument to dispatch rule?
-    // geometry = lit("\"geometry\"")
-    //    >> lit(':') >> lit('{')
-    //    >> lit("\"type\"") >> lit(':') >> geometry_dispatch[_a = _1]
-    //    >> lit(',') >> lit("\"coordinates\"") >> lit(':')
-    //    >> qi::lazy(*_a)
-    //    >> lit('}')
-    //    ;
-    // geometry_dispatch.add
-    //    ("\"Point\"",&point_coordinates)
-    //    ("\"LineString\"",&linestring_coordinates)
-    //    ("\"Polygon\"",&polygon_coordinates)
-    //    ;
-    //////////////////////////////////////////////////////////////////
-
-    geometry = (lit('{')[_a = 0 ]
-                >> lit("\"type\"") >> lit(':') >> geometry_dispatch[_a = _1] // <---- should be Nabialek trick!
-                >> lit(',')
-                >> (lit("\"coordinates\"") > lit(':') > coordinates(_r1,_a)
-                    |
-                    lit("\"geometries\"") > lit(':')
-                    >> lit('[') >> geometry_collection(_r1) >> lit(']'))
-                >> lit('}'))
-        | lit("null")
-        ;
-
-    geometry_dispatch.add
-        ("\"Point\"",1)
-        ("\"LineString\"",2)
-        ("\"Polygon\"",3)
-        ("\"MultiPoint\"",4)
-        ("\"MultiLineString\"",5)
-        ("\"MultiPolygon\"",6)
-        ("\"GeometryCollection\"",7)
-        //
-        ;
-
-    coordinates = (eps(_r2 == 1) > point_coordinates(_r1))
-        | (eps(_r2 == 2) > linestring_coordinates(_r1))
-        | (eps(_r2 == 3) > polygon_coordinates(_r1))
-        | (eps(_r2 == 4) > multipoint_coordinates(_r1))
-        | (eps(_r2 == 5) > multilinestring_coordinates(_r1))
-        | (eps(_r2 == 6) > multipolygon_coordinates(_r1))
-        ;
-
-    point_coordinates =  eps[ _a = new_<geometry_type>(Point) ]
-        > ( point(SEG_MOVETO,_a) [push_back(_r1,_a)] | eps[cleanup_(_a)][_pass = false] )
-        ;
-
-    linestring_coordinates = eps[ _a = new_<geometry_type>(LineString)]
-        > -(points(_a) [push_back(_r1,_a)]
-           | eps[cleanup_(_a)][_pass = false])
-        ;
-
-    polygon_coordinates = eps[ _a = new_<geometry_type>(Polygon) ]
-        > ((lit('[')
-            > -(points(_a)[close_path_(_a)] % lit(','))
-            > lit(']')) [push_back(_r1,_a)]
-           | eps[cleanup_(_a)][_pass = false])
-        ;
-
-    multipoint_coordinates =  lit('[')
-        > -(point_coordinates(_r1) % lit(','))
-        > lit(']')
-        ;
-
-    multilinestring_coordinates =  lit('[')
-        > -(linestring_coordinates(_r1) % lit(','))
-        > lit(']')
-        ;
-
-    multipolygon_coordinates =  lit('[')
-        > -(polygon_coordinates(_r1) % lit(','))
-        > lit(']')
-        ;
-
-    geometry_collection = *geometry(_r1) >> *(lit(',') >> geometry(_r1))
-        ;
-
-    // point
-    point = lit('[') > -((double_ > lit(',') > double_)[push_vertex_(_r1,_r2,_1,_2)]) > lit(']');
-    // points
-    points = lit('[')[_a = SEG_MOVETO] > -(point (_a,_r1) % lit(',')[_a = SEG_LINETO]) > lit(']');
-
-    // give some rules names
-    geometry.name("Geometry");
-    geometry_collection.name("GeometryCollection");
-    geometry_dispatch.name("Geometry dispatch");
-    coordinates.name("Coordinates");
-    // error handler
-    on_error<fail>
-        (
-            geometry
-            , std::clog
-            << boost::phoenix::val("Error! Expecting ")
-            << _4  // what failed?
-            << boost::phoenix::val(" here: \"")
-            << where_message_(_3, _2, 16) // max 16 chars
-            << boost::phoenix::val("\"")
-            << std::endl
-            );
-}
-
-template struct mapnik::json::geometry_grammar<std::string::const_iterator>;
-template struct mapnik::json::geometry_grammar<boost::spirit::multi_pass<std::istreambuf_iterator<char> > >;
-
-}}
-
-#endif
diff --git a/src/json/geometry_parser.cpp b/src/json/geometry_parser.cpp
deleted file mode 100644
index f881777..0000000
--- a/src/json/geometry_parser.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/json/geometry_parser.hpp>
-#include <mapnik/json/geometry_grammar.hpp>
-
-// boost
-#include <boost/version.hpp>
-#include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/support_multi_pass.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-
-// stl
-#include <stdexcept>
-
-namespace mapnik { namespace json {
-
-#if BOOST_VERSION >= 104700
-
-template <typename Iterator>
-geometry_parser<Iterator>::geometry_parser()
-    : grammar_(new geometry_grammar<iterator_type>()) {}
-
-template <typename Iterator>
-geometry_parser<Iterator>::~geometry_parser() {}
-#endif
-
-template <typename Iterator>
-bool geometry_parser<Iterator>::parse(iterator_type first, iterator_type last, boost::ptr_vector<mapnik::geometry_type>& path)
-{
-#if BOOST_VERSION >= 104700
-    using namespace boost::spirit;
-    return qi::phrase_parse(first, last, (*grammar_)(boost::phoenix::ref(path)), standard_wide::space);
-#else
-    std::ostringstream s;
-    s << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000  << "." << BOOST_VERSION % 100;
-    throw std::runtime_error("mapnik::geometry_parser::parse() requires at least boost 1.47 while your build was compiled against boost " + s.str());
-    return false;
-#endif
-}
-
-
-bool from_geojson(std::string const& json, boost::ptr_vector<geometry_type> & paths)
-{
-#if BOOST_VERSION >= 104700
-    geometry_parser<std::string::const_iterator> parser;
-    std::string::const_iterator start = json.begin();
-    std::string::const_iterator end = json.end();
-    return parser.parse(start, end ,paths);
-#else
-    std::ostringstream s;
-    s << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000  << "." << BOOST_VERSION % 100;
-    throw std::runtime_error("mapnik::json::from_geojson() requires at least boost 1.47 while your build was compiled against boost " + s.str());
-    return false;
-#endif
-}
-
-template class geometry_parser<std::string::const_iterator> ;
-template class geometry_parser<boost::spirit::multi_pass<std::istreambuf_iterator<char> > >;
-
-}}
diff --git a/src/json/mapnik_json_feature_collection_grammar.cpp b/src/json/mapnik_json_feature_collection_grammar.cpp
new file mode 100644
index 0000000..779c2e3
--- /dev/null
+++ b/src/json/mapnik_json_feature_collection_grammar.cpp
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/feature.hpp>
+#include <mapnik/json/feature_collection_grammar_impl.hpp>
+#include <string>
+
+using iterator_type = std::string::const_iterator;
+template struct mapnik::json::feature_collection_grammar<iterator_type,mapnik::feature_impl> ;
diff --git a/src/json/mapnik_json_feature_grammar.cpp b/src/json/mapnik_json_feature_grammar.cpp
new file mode 100644
index 0000000..9380932
--- /dev/null
+++ b/src/json/mapnik_json_feature_grammar.cpp
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/feature.hpp>
+#include <mapnik/json/feature_grammar_impl.hpp>
+#include <string>
+
+using iterator_type = std::string::const_iterator;
+template struct mapnik::json::feature_grammar<iterator_type,mapnik::feature_impl>;
diff --git a/src/json/mapnik_json_generator_grammar.cpp b/src/json/mapnik_json_generator_grammar.cpp
new file mode 100644
index 0000000..bc7bc5f
--- /dev/null
+++ b/src/json/mapnik_json_generator_grammar.cpp
@@ -0,0 +1,32 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/json/feature_generator_grammar_impl.hpp>
+#include <mapnik/json/geometry_generator_grammar_impl.hpp>
+#include <string>
+
+using sink_type = std::back_insert_iterator<std::string>;
+template struct mapnik::json::feature_generator_grammar<sink_type>;
+template struct mapnik::json::geometry_generator_grammar<sink_type, mapnik::geometry_type>;
+template struct mapnik::json::multi_geometry_generator_grammar<sink_type, mapnik::geometry_container>;
diff --git a/src/json/mapnik_json_geometry_grammar.cpp b/src/json/mapnik_json_geometry_grammar.cpp
new file mode 100644
index 0000000..dff5bc4
--- /dev/null
+++ b/src/json/mapnik_json_geometry_grammar.cpp
@@ -0,0 +1,27 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/json/geometry_grammar_impl.hpp>
+#include <string>
+
+using iterator_type = std::string::const_iterator;
+template struct mapnik::json::geometry_grammar<iterator_type>;
\ No newline at end of file
diff --git a/src/json/mapnik_topojson_grammar.cpp b/src/json/mapnik_topojson_grammar.cpp
new file mode 100644
index 0000000..6f232ab
--- /dev/null
+++ b/src/json/mapnik_topojson_grammar.cpp
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/feature.hpp>
+#include <mapnik/json/topojson_grammar_impl.hpp>
+#include <string>
+
+using iterator_type = std::string::const_iterator;
+template struct mapnik::topojson::topojson_grammar<iterator_type> ;
diff --git a/src/layer.cpp b/src/layer.cpp
index a2352cc..dd66f26 100644
--- a/src/layer.cpp
+++ b/src/layer.cpp
@@ -21,15 +21,16 @@
  *****************************************************************************/
 
 // mapnik
-#include <mapnik/layer.hpp>
 #include <mapnik/datasource.hpp>
 #include <mapnik/datasource_cache.hpp>
+#include <mapnik/layer.hpp>
 
 // stl
 #include <string>
 
 namespace mapnik
 {
+
 layer::layer(std::string const& name, std::string const& srs)
     : name_(name),
       srs_(srs),
@@ -39,10 +40,13 @@ layer::layer(std::string const& name, std::string const& srs)
       queryable_(false),
       clear_label_cache_(false),
       cache_features_(false),
-      group_by_(""),
-      ds_() {}
+      group_by_(),
+      styles_(),
+      ds_(),
+      buffer_size_(),
+      maximum_extent_() {}
 
-layer::layer(const layer& rhs)
+layer::layer(layer const& rhs)
     : name_(rhs.name_),
       srs_(rhs.srs_),
       min_zoom_(rhs.min_zoom_),
@@ -57,34 +61,55 @@ layer::layer(const layer& rhs)
       buffer_size_(rhs.buffer_size_),
       maximum_extent_(rhs.maximum_extent_) {}
 
-layer& layer::operator=(layer const& rhs)
+layer::layer(layer && rhs)
+    : name_(std::move(rhs.name_)),
+      srs_(std::move(rhs.srs_)),
+      min_zoom_(std::move(rhs.min_zoom_)),
+      max_zoom_(std::move(rhs.max_zoom_)),
+      active_(std::move(rhs.active_)),
+      queryable_(std::move(rhs.queryable_)),
+      clear_label_cache_(std::move(rhs.clear_label_cache_)),
+      cache_features_(std::move(rhs.cache_features_)),
+      group_by_(std::move(rhs.group_by_)),
+      styles_(std::move(rhs.styles_)),
+      ds_(std::move(rhs.ds_)),
+      buffer_size_(std::move(rhs.buffer_size_)),
+      maximum_extent_(std::move(rhs.maximum_extent_)) {}
+
+layer& layer::operator=(layer rhs)
 {
-    layer tmp(rhs);
-    swap(tmp);
+    using std::swap;
+    std::swap(this->name_,rhs.name_);
+    std::swap(this->srs_, rhs.srs_);
+    std::swap(this->min_zoom_, rhs.min_zoom_);
+    std::swap(this->max_zoom_,rhs.max_zoom_);
+    std::swap(this->active_, rhs.active_);
+    std::swap(this->queryable_, rhs.queryable_);
+    std::swap(this->clear_label_cache_, rhs.clear_label_cache_);
+    std::swap(this->cache_features_, rhs.cache_features_);
+    std::swap(this->group_by_, rhs.group_by_);
+    std::swap(this->styles_, rhs.styles_);
+    std::swap(this->ds_, rhs.ds_);
+    std::swap(this->buffer_size_, rhs.buffer_size_);
+    std::swap(this->maximum_extent_, rhs.maximum_extent_);
     return *this;
 }
 
-bool layer::operator==(layer const& other) const
+bool layer::operator==(layer const& rhs) const
 {
-    return (this == &other);
-}
-
-void layer::swap(layer& rhs)
-{
-    using std::swap;
-    swap(name_, rhs.name_);
-    swap(srs_, rhs.srs_);
-    swap(min_zoom_, rhs.min_zoom_);
-    swap(max_zoom_, rhs.max_zoom_);
-    swap(active_, rhs.active_);
-    swap(queryable_, rhs.queryable_);
-    swap(clear_label_cache_, rhs.clear_label_cache_);
-    swap(cache_features_, rhs.cache_features_);
-    swap(group_by_,  rhs.group_by_);
-    swap(styles_, rhs.styles_);
-    swap(ds_, rhs.ds_);
-    swap(buffer_size_, rhs.buffer_size_);
-    swap(maximum_extent_, rhs.maximum_extent_);
+    return (name_ == rhs.name_) &&
+        (srs_ == rhs.srs_) &&
+        (min_zoom_ == rhs.min_zoom_) &&
+        (max_zoom_ == rhs.max_zoom_) &&
+        (active_ == rhs.active_) &&
+        (queryable_ == rhs.queryable_) &&
+        (clear_label_cache_ == rhs.clear_label_cache_) &&
+        (cache_features_ == rhs.cache_features_) &&
+        (group_by_ == rhs.group_by_) &&
+        (styles_ == rhs.styles_) &&
+        ((ds_ && rhs.ds_) ? *ds_ == *rhs.ds_ : ds_ == rhs.ds_) &&
+        (buffer_size_ == rhs.buffer_size_) &&
+        (maximum_extent_ == rhs.maximum_extent_);
 }
 
 layer::~layer() {}
@@ -209,7 +234,6 @@ void layer::reset_buffer_size()
     buffer_size_.reset();
 }
 
-
 box2d<double> layer::envelope() const
 {
     if (ds_) return ds_->envelope();
@@ -236,7 +260,7 @@ bool layer::cache_features() const
     return cache_features_;
 }
 
-void layer::set_group_by(std::string column)
+void layer::set_group_by(std::string const& column)
 {
     group_by_ = column;
 }
diff --git a/src/libxml2_loader.cpp b/src/libxml2_loader.cpp
index 6edc882..5c03f87 100644
--- a/src/libxml2_loader.cpp
+++ b/src/libxml2_loader.cpp
@@ -46,7 +46,7 @@ namespace mapnik
 class libxml2_loader : mapnik::noncopyable
 {
 public:
-    libxml2_loader(const char *encoding = NULL, int options = DEFAULT_OPTIONS, const char *url = NULL) :
+    libxml2_loader(const char *encoding = nullptr, int options = DEFAULT_OPTIONS, const char *url = nullptr) :
         ctx_(0),
         encoding_(encoding),
         options_(options),
@@ -107,7 +107,7 @@ public:
                                    base_path + "': file or directory does not exist");
             }
         }
-
+        // NOTE: base_path here helps libxml2 resolve entities correctly: https://github.com/mapnik/mapnik/issues/440
         xmlDocPtr doc = xmlCtxtReadMemory(ctx_, buffer.data(), buffer.length(), base_path.c_str(), encoding_, options_);
 
         load(doc, node);
@@ -150,15 +150,16 @@ public:
     }
 
 private:
-    void append_attributes(xmlAttr *attributes, xml_node &node)
+    void inline append_attributes(xmlAttr *attributes, xml_node & node)
     {
         for (; attributes; attributes = attributes->next )
         {
-            node.add_attribute((const char *)attributes->name, (const char *)attributes->children->content);
+            node.add_attribute(reinterpret_cast<const char *>(attributes->name),
+                               reinterpret_cast<const char *>(attributes->children->content));
         }
     }
 
-    void populate_tree(xmlNode *cur_node, xml_node &node)
+    void inline populate_tree(xmlNode *cur_node, xml_node &node)
     {
         for (; cur_node; cur_node = cur_node->next )
         {
@@ -166,18 +167,17 @@ private:
             {
             case XML_ELEMENT_NODE:
             {
-
-                xml_node &new_node = node.add_child((const char *)cur_node->name, cur_node->line, false);
+                xml_node &new_node = node.add_child(reinterpret_cast<const char *>(cur_node->name), cur_node->line, false);
                 append_attributes(cur_node->properties, new_node);
                 populate_tree(cur_node->children, new_node);
             }
             break;
             case XML_TEXT_NODE:
             {
-                std::string trimmed((const char*)cur_node->content);
+                std::string trimmed(reinterpret_cast<const char *>(cur_node->content));
                 mapnik::util::trim(trimmed);
                 if (trimmed.empty()) break; //Don't add empty text nodes
-                node.add_child(trimmed, cur_node->line, true);
+                node.add_child(trimmed.c_str(), cur_node->line, true);
             }
             break;
             case XML_COMMENT_NODE:
diff --git a/src/line_pattern_symbolizer.cpp b/src/line_pattern_symbolizer.cpp
deleted file mode 100644
index 15a2e64..0000000
--- a/src/line_pattern_symbolizer.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/line_pattern_symbolizer.hpp>
-
-namespace mapnik
-{
-
-line_pattern_symbolizer::line_pattern_symbolizer(path_expression_ptr file)
-    : symbolizer_with_image(file), symbolizer_base() {}
-
-line_pattern_symbolizer::line_pattern_symbolizer(line_pattern_symbolizer const& rhs)
-    : symbolizer_with_image(rhs), symbolizer_base(rhs) {}
-
-}
diff --git a/src/line_symbolizer.cpp b/src/line_symbolizer.cpp
deleted file mode 100644
index 6f71f8b..0000000
--- a/src/line_symbolizer.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-static const char * line_rasterizer_strings[] = {
-    "full",
-    "fast",
-    ""
-};
-IMPLEMENT_ENUM( line_rasterizer_e, line_rasterizer_strings )
-
-}
-
diff --git a/src/load_map.cpp b/src/load_map.cpp
index 1de047f..74f7b38 100644
--- a/src/load_map.cpp
+++ b/src/load_map.cpp
@@ -30,6 +30,7 @@
 #include <mapnik/color.hpp>
 #include <mapnik/color_factory.hpp>
 #include <mapnik/symbolizer.hpp>
+#include <mapnik/symbolizer_utils.hpp>
 #include <mapnik/feature_type_style.hpp>
 #include <mapnik/layer.hpp>
 #include <mapnik/datasource_cache.hpp>
@@ -41,9 +42,8 @@
 #include <mapnik/parse_transform.hpp>
 #include <mapnik/raster_colorizer.hpp>
 #include <mapnik/svg/svg_path_parser.hpp>
-#include <mapnik/text_placements/registry.hpp>
-#include <mapnik/text_placements/dummy.hpp>
-#include <mapnik/symbolizer.hpp>
+#include <mapnik/text/placements/registry.hpp>
+#include <mapnik/text/placements/dummy.hpp>
 #include <mapnik/rule.hpp>
 #include <mapnik/config_error.hpp>
 #include <mapnik/util/dasharray_parser.hpp>
@@ -52,14 +52,23 @@
 #include <mapnik/marker_cache.hpp>
 #include <mapnik/noncopyable.hpp>
 #include <mapnik/util/fs.hpp>
+#include <mapnik/image_filter_types.hpp>
+#include <mapnik/projection.hpp>
+#include <mapnik/group/group_rule.hpp>
+#include <mapnik/transform_expression.hpp>
+#include <mapnik/evaluate_global_attributes.hpp>
+#include <mapnik/boolean.hpp>
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/algorithm/string.hpp>
 #include <boost/tokenizer.hpp>
 #include <boost/property_tree/ptree.hpp>
 #include <boost/property_tree/xml_parser.hpp>
 #include <boost/static_assert.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic pop
 
 // agg
 #include "agg_trans_affine.h"
@@ -70,48 +79,54 @@ namespace mapnik
 {
 using boost::optional;
 
-class map_parser : mapnik::noncopyable {
+constexpr unsigned name2int(const char *str, int off = 0)
+{
+    return !str[off] ? 5381 : (name2int(str, off+1)*33) ^ str[off];
+}
+
+class map_parser : mapnik::noncopyable
+{
 public:
-    map_parser(bool strict, std::string const& filename = "") :
+    map_parser(Map & map, bool strict, std::string const& filename = "") :
         strict_(strict),
         filename_(filename),
-        relative_to_xml_(true),
-        font_manager_(font_engine_),
-        xml_base_path_()
-    {}
-
-    void parse_map(Map & map, xml_node const& sty, std::string const& base_path);
+        font_library_(),
+        font_file_mapping_(map.get_font_file_mapping()),
+        font_name_cache_(),
+        file_sources_(),
+        fontsets_(),
+        xml_base_path_() {}
+
+    void parse_map(Map & map, xml_node const& node, std::string const& base_path);
 private:
-    void parse_map_include(Map & map, xml_node const& include);
-    void parse_style(Map & map, xml_node const& sty);
-    void parse_layer(Map & map, xml_node const& lay);
-    void parse_symbolizer_base(symbolizer_base &sym, xml_node const& pt);
-
-    void parse_fontset(Map & map, xml_node const & fset);
+    void parse_map_include(Map & map, xml_node const& node);
+    void parse_style(Map & map, xml_node const& node);
+    void parse_layer(Map & map, xml_node const& node);
+    void parse_symbolizer_base(symbolizer_base &sym, xml_node const& node);
+    void parse_fontset(Map & map, xml_node const & node);
     bool parse_font(font_set & fset, xml_node const& f);
-
-    void parse_rule(feature_type_style & style, xml_node const & r);
-
-    void parse_point_symbolizer(rule & rule, xml_node const& sym);
-    void parse_line_pattern_symbolizer(rule & rule, xml_node const& sym);
-    void parse_polygon_pattern_symbolizer(rule & rule, xml_node const& sym);
-    void parse_text_symbolizer(rule & rule, xml_node const& sym);
-    void parse_shield_symbolizer(rule & rule, xml_node const& sym);
-    void parse_line_symbolizer(rule & rule, xml_node const& sym);
-    void parse_polygon_symbolizer(rule & rule, xml_node const& sym);
-    void parse_building_symbolizer(rule & rule, xml_node const& sym);
-    void parse_raster_symbolizer(rule & rule, xml_node const& sym);
-    void parse_markers_symbolizer(rule & rule, xml_node const& sym);
-    void parse_debug_symbolizer(rule & rule, xml_node const& sym);
-
+    void parse_rule(feature_type_style & style, xml_node const & node);
+    void parse_symbolizers(rule & rule, xml_node const & node);
+    void parse_point_symbolizer(rule & rule, xml_node const& node);
+    void parse_line_pattern_symbolizer(rule & rule, xml_node const& node);
+    void parse_polygon_pattern_symbolizer(rule & rule, xml_node const& node);
+    void parse_text_symbolizer(rule & rule, xml_node const& node);
+    void parse_shield_symbolizer(rule & rule, xml_node const& node);
+    void parse_line_symbolizer(rule & rule, xml_node const& node);
+    void parse_polygon_symbolizer(rule & rule, xml_node const& node);
+    void parse_building_symbolizer(rule & rule, xml_node const& node);
+    void parse_raster_symbolizer(rule & rule, xml_node const& node);
+    void parse_markers_symbolizer(rule & rule, xml_node const& node);
+    void parse_group_symbolizer(rule &rule, xml_node const& node);
+    void parse_debug_symbolizer(rule & rule, xml_node const& node);
+    void parse_group_rule(group_symbolizer_properties &prop, xml_node const& node);
+    void parse_simple_layout(group_symbolizer_properties &prop, xml_node const& node);
+    void parse_pair_layout(group_symbolizer_properties &prop, xml_node const& node);
     bool parse_raster_colorizer(raster_colorizer_ptr const& rc, xml_node const& node);
-    bool parse_stroke(stroke & strk, xml_node const & sym);
-
+    void parse_stroke(symbolizer_base & symbol, xml_node const& node);
     void ensure_font_face(std::string const& face_name);
     void find_unused_nodes(xml_node const& root);
     void find_unused_nodes_recursive(xml_node const& node, std::string & error_text);
-
-
     std::string ensure_relative_to_xml(boost::optional<std::string> const& opt_path);
     void ensure_exists(std::string const& file_path);
     boost::optional<color> get_opt_color_attr(boost::property_tree::ptree const& node,
@@ -119,10 +134,10 @@ private:
 
     bool strict_;
     std::string filename_;
-    bool relative_to_xml_;
     std::map<std::string,parameters> datasource_templates_;
-    freetype_engine font_engine_;
-    face_manager<freetype_engine> font_manager_;
+    font_library font_library_;
+    freetype_engine::font_file_mapping_type & font_file_mapping_;
+    std::map<std::string,bool> font_name_cache_;
     std::map<std::string,std::string> file_sources_;
     std::map<std::string,font_set> fontsets_;
     std::string xml_base_path_;
@@ -135,7 +150,7 @@ void load_map(Map & map, std::string const& filename, bool strict, std::string b
     xml_tree tree("utf8");
     tree.set_filename(filename);
     read_xml(filename, tree.root());
-    map_parser parser(strict, filename);
+    map_parser parser(map, strict, filename);
     parser.parse_map(map, tree.root(), base_path);
     //dump_xml(tree.root());
 }
@@ -152,25 +167,17 @@ void load_map_string(Map & map, std::string const& str, bool strict, std::string
     {
         read_xml_string(str, tree.root(), map.base_path()); // FIXME - this value is not fully known yet
     }
-    map_parser parser(strict, base_path);
+    map_parser parser(map, strict, base_path);
     parser.parse_map(map, tree.root(), base_path);
 }
 
-void map_parser::parse_map(Map & map, xml_node const& pt, std::string const& base_path)
+void map_parser::parse_map(Map & map, xml_node const& node, std::string const& base_path)
 {
     try
     {
-        xml_node const& map_node = pt.get_child("Map");
+        xml_node const& map_node = node.get_child("Map");
         try
         {
-            // Check if relative paths should be interpreted as relative to/from XML location
-            // Default is true, and map_parser::ensure_relative_to_xml will be called to modify path
-            optional<boolean> paths_from_xml = map_node.get_opt_attr<boolean>("paths-from-xml");
-            if (paths_from_xml)
-            {
-                relative_to_xml_ = *paths_from_xml;
-            }
-
             optional<std::string> base_path_from_xml = map_node.get_opt_attr<std::string>("base");
             if (!base_path.empty())
             {
@@ -198,13 +205,33 @@ void map_parser::parse_map(Map & map, xml_node const& pt, std::string const& bas
                 map.set_background_image(ensure_relative_to_xml(image_filename));
             }
 
+            optional<std::string> comp_op_name = map_node.get_opt_attr<std::string>("background-image-comp-op");
+            if (comp_op_name)
+            {
+                optional<composite_mode_e> comp_op = comp_op_from_string(*comp_op_name);
+                if (comp_op)
+                {
+                    map.set_background_image_comp_op(*comp_op);
+                }
+                else
+                {
+                    throw config_error("failed to parse background-image-comp-op: '" + *comp_op_name + "'");
+                }
+            }
+
+            optional<double> opacity = map_node.get_opt_attr<double>("background-image-opacity");
+            if (opacity)
+            {
+                map.set_background_image_opacity(*opacity);
+            }
+
             std::string srs = map_node.get_attr("srs", map.srs());
             try
             {
                 // create throwaway projection object here to ensure it is valid
-                projection proj(srs);
+                projection proj(srs,true);
             }
-            catch (proj_init_error const& ex)
+            catch (std::exception const& ex)
             {
                 throw mapnik::config_error(ex.what());
             }
@@ -242,7 +269,8 @@ void map_parser::parse_map(Map & map, xml_node const& pt, std::string const& bas
             optional<std::string> font_directory = map_node.get_opt_attr<std::string>("font-directory");
             if (font_directory)
             {
-                if (!freetype_engine::register_fonts(ensure_relative_to_xml(font_directory), false))
+                map.set_font_directory(*font_directory);
+                if (!map.register_fonts(ensure_relative_to_xml(font_directory), false))
                 {
                     if (strict_)
                     {
@@ -260,16 +288,13 @@ void map_parser::parse_map(Map & map, xml_node const& pt, std::string const& bas
                 unsigned i = 0;
                 bool success = false;
                 int n[3];
-                for (boost::tokenizer<boost::char_separator<char> >::iterator beg = tokens.begin();
-                     beg != tokens.end(); ++beg)
+                for (auto const& beg : tokens)
                 {
-                    std::string item = mapnik::util::trim_copy(*beg);
+                    std::string item = mapnik::util::trim_copy(beg);
                     if (!mapnik::util::string2int(item,n[i]))
                     {
                         throw config_error(std::string("Invalid version string encountered: '")
-                            + *beg + "' in '" + *min_version_string + "'");
-
-                        break;
+                                           + beg + "' in '" + *min_version_string + "'");
                     }
                     if (i==2)
                     {
@@ -302,114 +327,100 @@ void map_parser::parse_map(Map & map, xml_node const& pt, std::string const& bas
     {
         throw config_error("Not a map file. Node 'Map' not found.");
     }
-    find_unused_nodes(pt);
+    find_unused_nodes(node);
 }
 
-void map_parser::parse_map_include(Map & map, xml_node const& include)
+void map_parser::parse_map_include(Map & map, xml_node const& node)
 {
     try
     {
-        xml_node::const_iterator itr = include.begin();
-        xml_node::const_iterator end = include.end();
-
-        for (; itr != end; ++itr)
+        for (auto const& n : node)
         {
-            if (itr->is_text()) continue;
-            if (itr->is("Include"))
+            if (n.is_text()) continue;
+            if (n.is("Include"))
             {
-                parse_map_include(map, *itr);
+                parse_map_include(map, n);
             }
-            else if (itr->is("Style"))
+            else if (n.is("Style"))
             {
-                parse_style(map, *itr);
+                parse_style(map, n);
             }
-            else if (itr->is("Layer"))
+            else if (n.is("Layer"))
             {
-                parse_layer(map, *itr);
+                parse_layer(map, n);
             }
-            else if (itr->is("FontSet"))
+            else if (n.is("FontSet"))
             {
-                parse_fontset(map, *itr);
+                parse_fontset(map, n);
             }
-            else if (itr->is("FileSource"))
+            else if (n.is("FileSource"))
             {
-                std::string name = itr->get_attr<std::string>("name");
-                std::string value = itr->get_text();
-                file_sources_[name] = value;
+                file_sources_[n.get_attr<std::string>("name")] = n.get_text();
             }
-            else if (itr->is("Datasource"))
+            else if (n.is("Datasource"))
             {
-                std::string name = itr->get_attr("name", std::string("Unnamed"));
+                std::string name = n.get_attr("name", std::string("Unnamed"));
                 parameters params;
-                xml_node::const_iterator paramIter = itr->begin();
-                xml_node::const_iterator endParam = itr->end();
-                for (; paramIter != endParam; ++paramIter)
+                for (auto const& p: n)
                 {
-                    if (paramIter->is("Parameter"))
+                    if (p.is("Parameter"))
                     {
-                        std::string param_name = paramIter->get_attr<std::string>("name");
-                        std::string value = paramIter->get_text();
-                        params[param_name] = value;
+                        params[p.get_attr<std::string>("name")] = p.get_text();
                     }
                 }
-                datasource_templates_[name] = params;
+                datasource_templates_[std::move(name)] = std::move(params);
             }
-            else if (itr->is("Parameters"))
+            else if (n.is("Parameters"))
             {
                 parameters & params = map.get_extra_parameters();
-                xml_node::const_iterator paramIter = itr->begin();
-                xml_node::const_iterator endParam = itr->end();
-                for (; paramIter != endParam; ++paramIter)
+                for (auto const& p: n)
                 {
-                    if (paramIter->is("Parameter"))
+                    if (p.is("Parameter"))
                     {
-                        std::string name = paramIter->get_attr<std::string>("name");
                         bool is_string = true;
-                        boost::optional<std::string> type = paramIter->get_opt_attr<std::string>("type");
+                        boost::optional<std::string> type = p.get_opt_attr<std::string>("type");
                         if (type)
                         {
                             if (*type == "int")
                             {
                                 is_string = false;
-                                mapnik::value_integer value = paramIter->get_value<mapnik::value_integer>();
-                                params[name] = value;
+                                params[p.get_attr<std::string>("name")] = p.get_value<mapnik::value_integer>();
                             }
                             else if (*type == "float")
                             {
                                 is_string = false;
-                                double value = paramIter->get_value<mapnik::value_double>();
-                                params[name] = value;
+                                params[p.get_attr<std::string>("name")] = p.get_value<mapnik::value_double>();
                             }
                         }
-
                         if (is_string)
                         {
-                            std::string value = paramIter->get_text();
-                            params[name] = value;
+                            params[p.get_attr<std::string>("name")] = p.get_text();
                         }
                     }
                 }
             }
         }
-    } catch (config_error const& ex) {
-        ex.append_context(include);
+    }
+    catch (config_error const& ex)
+    {
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_style(Map & map, xml_node const& sty)
+void map_parser::parse_style(Map & map, xml_node const& node)
 {
     std::string name("<missing name>");
     try
     {
-        name = sty.get_attr<std::string>("name");
+        name = node.get_attr<std::string>("name");
         feature_type_style style;
 
-        filter_mode_e filter_mode = sty.get_attr<filter_mode_e>("filter-mode", FILTER_ALL);
+        filter_mode_e filter_mode = node.get_attr<filter_mode_e>("filter-mode", FILTER_ALL);
         style.set_filter_mode(filter_mode);
 
         // compositing
-        optional<std::string> comp_op_name = sty.get_opt_attr<std::string>("comp-op");
+        optional<std::string> comp_op_name = node.get_opt_attr<std::string>("comp-op");
         if (comp_op_name)
         {
             optional<composite_mode_e> comp_op = comp_op_from_string(*comp_op_name);
@@ -423,21 +434,21 @@ void map_parser::parse_style(Map & map, xml_node const& sty)
             }
         }
 
-        optional<float> opacity = sty.get_opt_attr<float>("opacity");
-        if (opacity)
+        optional<double> opacity = node.get_opt_attr<double>("opacity");
+        if (opacity) style.set_opacity(*opacity);
+
+        optional<mapnik::boolean_type> image_filters_inflate = node.get_opt_attr<mapnik::boolean_type>("image-filters-inflate");
+        if (image_filters_inflate)
         {
-            style.set_opacity(*opacity);
+            style.set_image_filters_inflate(*image_filters_inflate);
         }
 
         // image filters
-        optional<std::string> filters = sty.get_opt_attr<std::string>("image-filters");
+        optional<std::string> filters = node.get_opt_attr<std::string>("image-filters");
         if (filters)
         {
-            std::string filter_str = *filters;
-            bool result = filter::parse_image_filters(filter_str, style.image_filters());
-            if (!result)
-            {
-                throw config_error("failed to parse image-filters: '" + filter_str + "'");
+            if (!parse_image_filters(*filters, style.image_filters())) {
+                throw config_error("failed to parse image-filters: '" + *filters + "'");
             }
         }
 
@@ -445,60 +456,55 @@ void map_parser::parse_style(Map & map, xml_node const& sty)
         // TODO : consider creating a separate XML node e.g
         // <ImageFilter name="myfilter" op="blur emboss"/>
         //
-        optional<std::string> direct_filters = sty.get_opt_attr<std::string>("direct-image-filters");
+        optional<std::string> direct_filters = node.get_opt_attr<std::string>("direct-image-filters");
         if (direct_filters)
         {
-            std::string filter_str = *direct_filters;
-            std::string::const_iterator itr = filter_str.begin();
-            std::string::const_iterator end = filter_str.end();
-            bool result = boost::spirit::qi::phrase_parse(itr,end,
-                                                          sty.get_tree().image_filters_grammar,
-                                                          boost::spirit::qi::ascii::space,
-                                                          style.direct_image_filters());
-            if (!result || itr!=end)
-            {
-                throw config_error("failed to parse direct-image-filters: '" + std::string(itr,end) + "'");
+            if (!parse_image_filters(*direct_filters, style.direct_image_filters())) {
+                throw config_error("failed to parse direct-image-filters: '" + *direct_filters + "'");
             }
         }
 
+        style.reserve(node.size());
         // rules
-        xml_node::const_iterator ruleIter = sty.begin();
-        xml_node::const_iterator endRule = sty.end();
-
-        for (; ruleIter!=endRule; ++ruleIter)
+        for (auto const& rule_ : node)
         {
-            if (ruleIter->is("Rule"))
+            if (rule_.is("Rule"))
             {
-                parse_rule(style, *ruleIter);
+                parse_rule(style, rule_);
             }
         }
-
-        map.insert_style(name, style);
-    } catch (config_error const& ex) {
-        ex.append_context(std::string("in style '") + name + "'", sty);
+        map.insert_style(name, std::move(style));
+    }
+    catch (config_error const& ex)
+    {
+        ex.append_context(std::string("in style '") + name + "'", node);
         throw;
     }
 }
 
-void map_parser::parse_fontset(Map & map, xml_node const& fset)
+void map_parser::parse_fontset(Map & map, xml_node const& node)
 {
     std::string name("<missing name>");
     try
     {
-        name = fset.get_attr<std::string>("name");
+        name = node.get_attr<std::string>("name");
         font_set fontset(name);
-        xml_node::const_iterator itr = fset.begin();
-        xml_node::const_iterator end = fset.end();
-
         bool success = false;
-        for (; itr != end; ++itr)
+        for (auto const& n: node)
         {
-            if (itr->is("Font"))
+            if (n.is("Font"))
             {
-                if (parse_font(fontset, *itr))
+                if (parse_font(fontset, n))
                 {
                     success = true;
                 }
+                else
+                {
+                    // https://github.com/mapnik/mapnik/issues/1791
+                    MAPNIK_LOG_ERROR(fontset) << "warning: unable to find face-name '"
+                                              << n.get_attr<std::string>("face-name","")
+                                              << "' in FontSet '" << fontset.get_name() << "'";
+                }
             }
         }
 
@@ -508,34 +514,46 @@ void map_parser::parse_fontset(Map & map, xml_node const& fset)
             throw mapnik::config_error("no valid fonts could be loaded");
         }
 
-        map.insert_fontset(name, fontset);
-
         // XXX Hack because map object isn't accessible by text_symbolizer
         // when it's parsed
-        fontsets_.insert(std::pair<std::string, font_set>(name, fontset));
+        fontsets_.emplace(name, fontset);
+        map.insert_fontset(name, std::move(fontset));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(std::string("in FontSet '") + name + "'", fset);
+        ex.append_context(std::string("in FontSet '") + name + "'", node);
         throw;
     }
 }
 
-bool map_parser::parse_font(font_set &fset, xml_node const& f)
+bool map_parser::parse_font(font_set & fset, xml_node const& f)
 {
-    optional<std::string> face_name = f.get_opt_attr<std::string>("face-name");
-    if (face_name)
+    optional<std::string> has_face_name = f.get_opt_attr<std::string>("face-name");
+    if (has_face_name)
     {
-        face_ptr face = font_manager_.get_face(*face_name);
-        if (face)
+        std::string face_name = *has_face_name;
+        bool found = false;
+        auto itr = font_name_cache_.find(face_name);
+        if (itr != font_name_cache_.end())
+        {
+            found = itr->second;
+        }
+        else
         {
-            fset.add_face_name(*face_name);
+            found = freetype_engine::can_open(face_name,
+                                          font_library_,
+                                          font_file_mapping_,
+                                          freetype_engine::get_mapping());
+            font_name_cache_.emplace(face_name,found);
+        }
+        if (found)
+        {
+            fset.add_face_name(face_name);
             return true;
         }
         else if (strict_)
         {
-            throw config_error("Failed to find font face '" +
-                               *face_name + "'");
+            throw config_error("Failed to find font face '" + face_name + "'");
         }
     }
     else
@@ -550,6 +568,14 @@ void map_parser::parse_layer(Map & map, xml_node const& node)
     std::string name;
     try
     {
+        optional<mapnik::boolean_type> status = node.get_opt_attr<mapnik::boolean_type>("status");
+
+        // return early is status is off
+        if (status && !(*status)){
+            node.set_ignore(true);
+            return;
+        }
+
         name = node.get_attr("name", std::string("Unnamed"));
 
         // If no projection is given inherit from map
@@ -557,15 +583,15 @@ void map_parser::parse_layer(Map & map, xml_node const& node)
         try
         {
             // create throwaway projection object here to ensure it is valid
-            projection proj(srs);
+            projection proj(srs,true);
         }
-        catch (proj_init_error const& ex)
+        catch (std::exception const& ex)
         {
             throw mapnik::config_error(ex.what());
         }
         layer lyr(name, srs);
 
-        optional<boolean> status = node.get_opt_attr<boolean>("status");
+
         if (status)
         {
             lyr.set_active(* status);
@@ -584,21 +610,21 @@ void map_parser::parse_layer(Map & map, xml_node const& node)
             lyr.set_max_zoom(* max_zoom);
         }
 
-        optional<boolean> queryable = node.get_opt_attr<boolean>("queryable");
+        optional<mapnik::boolean_type> queryable = node.get_opt_attr<mapnik::boolean_type>("queryable");
         if (queryable)
         {
             lyr.set_queryable(* queryable);
         }
 
-        optional<boolean> clear_cache =
-            node.get_opt_attr<boolean>("clear-label-cache");
+        optional<mapnik::boolean_type> clear_cache =
+            node.get_opt_attr<mapnik::boolean_type>("clear-label-cache");
         if (clear_cache)
         {
             lyr.set_clear_label_cache(* clear_cache);
         }
 
-        optional<boolean> cache_features =
-            node.get_opt_attr<boolean>("cache-features");
+        optional<mapnik::boolean_type> cache_features =
+            node.get_opt_attr<mapnik::boolean_type>("cache-features");
         if (cache_features)
         {
             lyr.set_cache_features(* cache_features);
@@ -627,28 +653,25 @@ void map_parser::parse_layer(Map & map, xml_node const& node)
             }
             else
             {
-                    std::string s_err("failed to parse Layer maximum-extent '");
-                    s_err += *maximum_extent + "' for '" + name + "'";
-                    if (strict_)
-                    {
-                        throw config_error(s_err);
-                    }
-                    else
-                    {
-                        MAPNIK_LOG_ERROR(load_map) << "map_parser: " << s_err;
-                    }
+                std::string s_err("failed to parse Layer maximum-extent '");
+                s_err += *maximum_extent + "' for '" + name + "'";
+                if (strict_)
+                {
+                    throw config_error(s_err);
+                }
+                else
+                {
+                    MAPNIK_LOG_ERROR(load_map) << "map_parser: " << s_err;
+                }
             }
         }
 
-        xml_node::const_iterator child = node.begin();
-        xml_node::const_iterator end = node.end();
-
-        for(; child != end; ++child)
+        for (auto const& child: node)
         {
 
-            if (child->is("StyleName"))
+            if (child.is("StyleName"))
             {
-                std::string style_name = child->get_text();
+                std::string const& style_name = child.get_text();
                 if (style_name.empty())
                 {
                     std::string ss("StyleName is empty in Layer: '");
@@ -667,51 +690,49 @@ void map_parser::parse_layer(Map & map, xml_node const& node)
                     lyr.add_style(style_name);
                 }
             }
-            else if (child->is("Datasource"))
+            else if (child.is("Datasource"))
             {
                 parameters params;
-                optional<std::string> base = child->get_opt_attr<std::string>("base");
+                optional<std::string> base = child.get_opt_attr<std::string>("base");
                 if(base)
                 {
                     std::map<std::string,parameters>::const_iterator base_itr = datasource_templates_.find(*base);
-                    if (base_itr!=datasource_templates_.end())
+                    if (base_itr != datasource_templates_.end())
                     {
                         params = base_itr->second;
                     }
                     else
                     {
                         MAPNIK_LOG_ERROR(datasource) << "Datasource template '" << *base
-                            << "' not found for layer '" << name << "'";
+                                                     << "' not found for layer '" << name << "'";
                     }
                 }
 
-                xml_node::const_iterator paramIter = child->begin();
-                xml_node::const_iterator endParam = child->end();
-                for (; paramIter != endParam; ++paramIter)
+                for (auto const& n : child)
                 {
-                    if (paramIter->is("Parameter"))
+                    if (n.is("Parameter"))
                     {
-                        std::string param_name = paramIter->get_attr<std::string>("name");
-                        std::string value = paramIter->get_text();
-                        params[param_name] = value;
+                        params[n.get_attr<std::string>("name")] = n.get_text();
                     }
                 }
 
                 boost::optional<std::string> base_param = params.get<std::string>("base");
                 boost::optional<std::string> file_param = params.get<std::string>("file");
 
-                if (base_param){
+                if (base_param)
+                {
                     params["base"] = ensure_relative_to_xml(base_param);
                 }
 
-                else if (file_param){
+                else if (file_param)
+                {
                     params["file"] = ensure_relative_to_xml(file_param);
                 }
 
                 //now we are ready to create datasource
                 try
                 {
-                    boost::shared_ptr<datasource> ds =
+                    std::shared_ptr<datasource> ds =
                         datasource_cache::instance().create(params);
                     lyr.set_datasource(ds);
                 }
@@ -725,7 +746,7 @@ void map_parser::parse_layer(Map & map, xml_node const& node)
                 }
             }
         }
-        map.addLayer(lyr);
+        map.add_layer(std::move(lyr));
     }
     catch (config_error const& ex)
     {
@@ -737,189 +758,141 @@ void map_parser::parse_layer(Map & map, xml_node const& node)
     }
 }
 
-void map_parser::parse_rule(feature_type_style & style, xml_node const& r)
+void map_parser::parse_rule(feature_type_style & style, xml_node const& node)
 {
     std::string name;
     try
     {
-        name = r.get_attr("name", std::string());
+        name = node.get_attr("name", std::string());
         rule rule(name);
 
-        xml_node const* child = r.get_opt_child("Filter");
+        xml_node const* child = node.get_opt_child("Filter");
         if (child)
         {
             rule.set_filter(child->get_value<expression_ptr>());
         }
 
-        if (r.has_child("ElseFilter"))
+        if (node.has_child("ElseFilter"))
         {
             rule.set_else(true);
         }
 
-        if (r.has_child("AlsoFilter"))
+        if (node.has_child("AlsoFilter"))
         {
             rule.set_also(true);
         }
 
-        child = r.get_opt_child("MinScaleDenominator");
+        child = node.get_opt_child("MinScaleDenominator");
         if (child)
         {
             rule.set_min_scale(child->get_value<double>());
         }
 
-        child = r.get_opt_child("MaxScaleDenominator");
+        child = node.get_opt_child("MaxScaleDenominator");
         if (child)
         {
             rule.set_max_scale(child->get_value<double>());
         }
 
-        xml_node::const_iterator symIter = r.begin();
-        xml_node::const_iterator endSym = r.end();
-
-        for(;symIter != endSym; ++symIter)
-        {
-
-            if (symIter->is("PointSymbolizer"))
-            {
-                parse_point_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("LinePatternSymbolizer"))
-            {
-                parse_line_pattern_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("PolygonPatternSymbolizer"))
-            {
-                parse_polygon_pattern_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("TextSymbolizer"))
-            {
-                parse_text_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("ShieldSymbolizer"))
-            {
-                parse_shield_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("LineSymbolizer"))
-            {
-                parse_line_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("PolygonSymbolizer"))
-            {
-                parse_polygon_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("BuildingSymbolizer"))
-            {
-                parse_building_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("RasterSymbolizer"))
-            {
-                parse_raster_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("MarkersSymbolizer"))
-            {
-                parse_markers_symbolizer(rule, *symIter);
-            }
-            else if (symIter->is("DebugSymbolizer"))
-            {
-                parse_debug_symbolizer(rule, *symIter);
-            }
-        }
-        style.add_rule(rule);
+        parse_symbolizers(rule, node);
+        style.add_rule(std::move(rule));
 
     }
     catch (config_error const& ex)
     {
         if (!name.empty())
         {
-            ex.append_context(std::string("in rule '") + name + "'", r);
+            ex.append_context(std::string("in rule '") + name + "'", node);
         }
         throw;
     }
 }
 
-void map_parser::parse_symbolizer_base(symbolizer_base &sym, xml_node const &pt)
+void map_parser::parse_symbolizers(rule & rule, xml_node const & node)
 {
-    optional<std::string> comp_op_name = pt.get_opt_attr<std::string>("comp-op");
-    if (comp_op_name)
+    rule.reserve(node.size());
+    for (auto const& sym_node : node)
     {
-        optional<composite_mode_e> comp_op = comp_op_from_string(*comp_op_name);
-        if (comp_op)
-        {
-            sym.set_comp_op(*comp_op);
-        }
-        else
-        {
-            throw config_error("failed to parse comp-op: '" + *comp_op_name + "'");
-        }
-    }
-
-    optional<std::string> geometry_transform_wkt = pt.get_opt_attr<std::string>("geometry-transform");
-    if (geometry_transform_wkt)
-    {
-        mapnik::transform_list_ptr tl = boost::make_shared<mapnik::transform_list>();
-        if (!mapnik::parse_transform(*tl, *geometry_transform_wkt, pt.get_tree().transform_expr_grammar))
-        {
-            std::string ss("Could not parse transform from '");
-            ss += *geometry_transform_wkt + "', expected transform attribute";
-            throw config_error(ss);
-        }
-        sym.set_transform(tl);
-    }
-
-    optional<boolean> clip = pt.get_opt_attr<boolean>("clip");
-    if (clip) sym.set_clip(*clip);
-
-    // simplify algorithm
-    optional<std::string> simplify_algorithm_name = pt.get_opt_attr<std::string>("simplify-algorithm");
-    if (simplify_algorithm_name)
-    {
-        optional<simplify_algorithm_e> simplify_algorithm = simplify_algorithm_from_string(*simplify_algorithm_name);
-        if (simplify_algorithm)
-        {
-            sym.set_simplify_algorithm(*simplify_algorithm);
-        }
-        else
-        {
-            throw config_error("failed to parse simplify-algorithm: '" + *simplify_algorithm_name + "'");
+        switch (name2int(sym_node.name().c_str()))
+        {
+        case name2int("PointSymbolizer"):
+            parse_point_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("LinePatternSymbolizer"):
+            parse_line_pattern_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("PolygonPatternSymbolizer"):
+            parse_polygon_pattern_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("TextSymbolizer"):
+            parse_text_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("ShieldSymbolizer"):
+            parse_shield_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("LineSymbolizer"):
+            parse_line_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("PolygonSymbolizer"):
+            parse_polygon_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("BuildingSymbolizer"):
+            parse_building_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("RasterSymbolizer"):
+            parse_raster_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("MarkersSymbolizer"):
+            parse_markers_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("GroupSymbolizer"):
+            parse_group_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        case name2int("DebugSymbolizer"):
+            parse_debug_symbolizer(rule, sym_node);
+            sym_node.set_processed(true);
+            break;
+        default:
+            break;
         }
     }
+}
 
-    // simplify value
-    optional<double> simplify_tolerance = pt.get_opt_attr<double>("simplify");
-    if (simplify_tolerance) sym.set_simplify_tolerance(*simplify_tolerance);
-
-    // smooth value
-    optional<double> smooth = pt.get_opt_attr<double>("smooth");
-    if (smooth) sym.set_smooth(*smooth);
+void map_parser::parse_symbolizer_base(symbolizer_base &sym, xml_node const& node)
+{
+    set_symbolizer_property<symbolizer_base,double>(sym, keys::simplify_tolerance, node);
+    set_symbolizer_property<symbolizer_base,double>(sym, keys::smooth, node);
+    set_symbolizer_property<symbolizer_base,boolean_type>(sym, keys::clip, node);
+    set_symbolizer_property<symbolizer_base,composite_mode_e>(sym, keys::comp_op, node);
+    set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::geometry_transform, node);
+    set_symbolizer_property<symbolizer_base,simplify_algorithm_e>(sym, keys::simplify_algorithm, node);
 }
 
-void map_parser::parse_point_symbolizer(rule & rule, xml_node const & sym)
+void map_parser::parse_point_symbolizer(rule & rule, xml_node const & node)
 {
     try
     {
-        optional<std::string> file = sym.get_opt_attr<std::string>("file");
-        optional<std::string> base = sym.get_opt_attr<std::string>("base");
-        optional<boolean> allow_overlap = sym.get_opt_attr<boolean>("allow-overlap");
-        optional<boolean> ignore_placement = sym.get_opt_attr<boolean>("ignore-placement");
-        optional<float> opacity = sym.get_opt_attr<float>("opacity");
-
-        point_symbolizer symbol;
-        if (allow_overlap)
-        {
-            symbol.set_allow_overlap(* allow_overlap);
-        }
-        if (opacity)
-        {
-            symbol.set_opacity(* opacity);
-        }
-        if (ignore_placement)
-        {
-            symbol.set_ignore_placement(* ignore_placement);
-        }
-        point_placement_e placement =
-            sym.get_attr<point_placement_e>("placement", symbol.get_point_placement());
-        symbol.set_point_placement(placement);
-
+        optional<std::string> file = node.get_opt_attr<std::string>("file");
+        optional<std::string> base = node.get_opt_attr<std::string>("base");
+
+        point_symbolizer sym;
+        parse_symbolizer_base(sym, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::opacity, node);
+        set_symbolizer_property<symbolizer_base,boolean_type>(sym, keys::allow_overlap, node);
+        set_symbolizer_property<symbolizer_base,boolean_type>(sym, keys::ignore_placement, node);
+        set_symbolizer_property<symbolizer_base,point_placement_enum>(sym, keys::point_placement_type, node);
+        set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::image_transform, node);
         if (file && !file->empty())
         {
             if(base)
@@ -930,40 +903,28 @@ void map_parser::parse_point_symbolizer(rule & rule, xml_node const & sym)
                     *file = itr->second + "/" + *file;
                 }
             }
-
             *file = ensure_relative_to_xml(file);
             std::string filename = *file;
             ensure_exists(filename);
-            symbol.set_filename( parse_path(filename, sym.get_tree().path_expr_grammar) );
-
-            optional<std::string> image_transform_wkt = sym.get_opt_attr<std::string>("transform");
-            if (image_transform_wkt)
-            {
-                mapnik::transform_list_ptr tl = boost::make_shared<mapnik::transform_list>();
-                if (!mapnik::parse_transform(*tl, *image_transform_wkt, sym.get_tree().transform_expr_grammar))
-                {
-                    throw mapnik::config_error("Failed to parse transform: '" + *image_transform_wkt + "'");
-                }
-                symbol.set_image_transform(tl);
-            }
+            put(sym, keys::file, parse_path(filename));
         }
-        parse_symbolizer_base(symbol, sym);
-        rule.append(symbol);
+
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_markers_symbolizer(rule & rule, xml_node const& sym)
+void map_parser::parse_markers_symbolizer(rule & rule, xml_node const& node)
 {
     try
     {
         std::string filename("");
-        optional<std::string> file = sym.get_opt_attr<std::string>("file");
-        optional<std::string> base = sym.get_opt_attr<std::string>("base");
+        optional<std::string> file = node.get_opt_attr<std::string>("file");
+        optional<std::string> base = node.get_opt_attr<std::string>("base");
 
         if (file && !file->empty())
         {
@@ -979,7 +940,7 @@ void map_parser::parse_markers_symbolizer(rule & rule, xml_node const& sym)
             filename = ensure_relative_to_xml(file);
         }
 
-        optional<std::string> marker_type = sym.get_opt_attr<std::string>("marker-type");
+        optional<std::string> marker_type = node.get_opt_attr<std::string>("marker-type");
         if (marker_type)
         {
             // TODO - revisit whether to officially deprecate marker-type
@@ -999,86 +960,48 @@ void map_parser::parse_markers_symbolizer(rule & rule, xml_node const& sym)
             }
         }
 
-        markers_symbolizer symbol;
-
+        markers_symbolizer sym;
+        parse_symbolizer_base(sym, node);
         if (!filename.empty())
         {
             ensure_exists(filename);
-            symbol.set_filename( parse_path(filename, sym.get_tree().path_expr_grammar) );
-        }
-
-        // overall opacity to be applied to all paths
-        optional<float> opacity = sym.get_opt_attr<float>("opacity");
-        if (opacity) symbol.set_opacity(*opacity);
-
-        optional<float> fill_opacity = sym.get_opt_attr<float>("fill-opacity");
-        if (fill_opacity) symbol.set_fill_opacity(*fill_opacity);
-
-        optional<std::string> image_transform_wkt = sym.get_opt_attr<std::string>("transform");
-        if (image_transform_wkt)
-        {
-            mapnik::transform_list_ptr tl = boost::make_shared<mapnik::transform_list>();
-            if (!mapnik::parse_transform(*tl, *image_transform_wkt, sym.get_tree().transform_expr_grammar))
-            {
-                throw mapnik::config_error("Failed to parse transform: '" + *image_transform_wkt + "'");
-            }
-            symbol.set_image_transform(tl);
-        }
-
-        optional<color> c = sym.get_opt_attr<color>("fill");
-        if (c) symbol.set_fill(*c);
-
-        optional<double> spacing = sym.get_opt_attr<double>("spacing");
-        if (spacing) symbol.set_spacing(*spacing);
-
-        optional<double> max_error = sym.get_opt_attr<double>("max-error");
-        if (max_error) symbol.set_max_error(*max_error);
-
-        optional<boolean> allow_overlap = sym.get_opt_attr<boolean>("allow-overlap");
-        if (allow_overlap) symbol.set_allow_overlap(*allow_overlap);
-
-        optional<boolean> ignore_placement = sym.get_opt_attr<boolean>("ignore-placement");
-        if (ignore_placement) symbol.set_ignore_placement(*ignore_placement);
-
-        optional<expression_ptr> width = sym.get_opt_attr<expression_ptr>("width");
-        if (width) symbol.set_width(*width);
-
-        optional<expression_ptr> height = sym.get_opt_attr<expression_ptr>("height");
-        if (height) symbol.set_height(*height);
-
-        stroke strk;
-        if (parse_stroke(strk,sym))
-        {
-            symbol.set_stroke(strk);
-        }
-
-        marker_placement_e placement = sym.get_attr<marker_placement_e>("placement",symbol.get_marker_placement());
-        symbol.set_marker_placement(placement);
-
-        marker_multi_policy_e mpolicy = sym.get_attr<marker_multi_policy_e>("multi-policy",symbol.get_marker_multi_policy());
-        symbol.set_marker_multi_policy(mpolicy);
-
-        parse_symbolizer_base(symbol, sym);
-        rule.append(symbol);
+            put(sym,keys::file, parse_path(filename));
+        }
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::opacity, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::fill_opacity, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::spacing, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::max_error, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::offset, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::width, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::height, node);
+        set_symbolizer_property<symbolizer_base,boolean_type>(sym, keys::allow_overlap, node);
+        set_symbolizer_property<symbolizer_base,boolean_type>(sym, keys::avoid_edges, node);
+        set_symbolizer_property<symbolizer_base,boolean_type>(sym, keys::ignore_placement, node);
+        set_symbolizer_property<symbolizer_base,color>(sym, keys::fill, node);
+        set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::image_transform, node);
+        set_symbolizer_property<symbolizer_base,marker_placement_enum>(sym, keys::markers_placement_type, node);
+        set_symbolizer_property<symbolizer_base,marker_multi_policy_enum>(sym, keys::markers_multipolicy, node);
+        parse_stroke(sym,node);
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_line_pattern_symbolizer(rule & rule, xml_node const & sym)
+void map_parser::parse_line_pattern_symbolizer(rule & rule, xml_node const & node)
 {
     try
     {
-        std::string file = sym.get_attr<std::string>("file");
+        std::string file = node.get_attr<std::string>("file");
         if (file.empty())
         {
             throw config_error("empty file attribute");
         }
 
-        optional<std::string> base = sym.get_opt_attr<std::string>("base");
+        optional<std::string> base = node.get_opt_attr<std::string>("base");
 
         if(base)
         {
@@ -1091,35 +1014,38 @@ void map_parser::parse_line_pattern_symbolizer(rule & rule, xml_node const & sym
 
         file = ensure_relative_to_xml(file);
         ensure_exists(file);
-        line_pattern_symbolizer symbol( parse_path(file, sym.get_tree().path_expr_grammar) );
-
-        parse_symbolizer_base(symbol, sym);
-        rule.append(symbol);
+        line_pattern_symbolizer sym;
+        parse_symbolizer_base(sym, node);
+        put(sym, keys::file, parse_path(file));
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::opacity, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::offset, node);
+        set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::image_transform, node);
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
 void map_parser::parse_polygon_pattern_symbolizer(rule & rule,
-                                                  xml_node const & sym)
+                                                  xml_node const & node)
 {
     try
     {
-        std::string file = sym.get_attr<std::string>("file");
+        std::string file = node.get_attr<std::string>("file");
 
         if (file.empty())
         {
             throw config_error("empty file attribute");
         }
 
-        optional<std::string> base = sym.get_opt_attr<std::string>("base");
+        optional<std::string> base = node.get_opt_attr<std::string>("base");
 
-        if(base)
+        if (base)
         {
-            std::map<std::string,std::string>::iterator itr = file_sources_.find(*base);
+            std::map<std::string,std::string>::const_iterator itr = file_sources_.find(*base);
             if (itr!=file_sources_.end())
             {
                 file = itr->second + "/" + file;
@@ -1128,134 +1054,92 @@ void map_parser::parse_polygon_pattern_symbolizer(rule & rule,
 
         file = ensure_relative_to_xml(file);
         ensure_exists(file);
-        polygon_pattern_symbolizer symbol( parse_path(file, sym.get_tree().path_expr_grammar) );
-
-        // pattern alignment
-        pattern_alignment_e p_alignment = sym.get_attr<pattern_alignment_e>("alignment",LOCAL_ALIGNMENT);
-        symbol.set_alignment(p_alignment);
-
-        // opacity
-        optional<float> opacity = sym.get_opt_attr<float>("opacity");
-        if (opacity) symbol.set_opacity(*opacity);
-
-        // gamma
-        optional<double> gamma = sym.get_opt_attr<double>("gamma");
-        if (gamma)  symbol.set_gamma(*gamma);
-
-        // gamma method
-        optional<gamma_method_e> gamma_method = sym.get_opt_attr<gamma_method_e>("gamma-method");
-        if (gamma_method) symbol.set_gamma_method(*gamma_method);
-
-        parse_symbolizer_base(symbol, sym);
-        rule.append(symbol);
+        polygon_pattern_symbolizer sym;
+        parse_symbolizer_base(sym, node);
+        put(sym, keys::file, parse_path(file));
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::opacity, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::gamma, node);
+        set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::image_transform, node);
+        set_symbolizer_property<symbolizer_base,pattern_alignment_enum>(sym, keys::alignment, node);
+        set_symbolizer_property<symbolizer_base,gamma_method_enum>(sym, keys::gamma_method, node);
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_text_symbolizer(rule & rule, xml_node const& sym)
+void map_parser::parse_text_symbolizer(rule & rule, xml_node const& node)
 {
     try
     {
-        text_placements_ptr placement_finder;
-        optional<std::string> placement_type = sym.get_opt_attr<std::string>("placement-type");
-        if (placement_type) {
-            placement_finder = placements::registry::instance().from_xml(*placement_type, sym, fontsets_);
-        } else {
-            placement_finder = boost::make_shared<text_placements_dummy>();
-            placement_finder->defaults.from_xml(sym, fontsets_);
+        text_placements_ptr placements;
+        optional<std::string> placement_type = node.get_opt_attr<std::string>("placement-type");
+        if (placement_type)
+        {
+            placements = placements::registry::instance().from_xml(*placement_type, node, fontsets_, false);
         }
-        if (strict_ &&
-            !placement_finder->defaults.format.fontset)
+        else
         {
-            ensure_font_face(placement_finder->defaults.format.face_name);
+            placements = std::make_shared<text_placements_dummy>();
+            placements->defaults.from_xml(node, fontsets_, false);
         }
-
-        text_symbolizer text_symbol = text_symbolizer(placement_finder);
-        parse_symbolizer_base(text_symbol, sym);
-        optional<halo_rasterizer_e> halo_rasterizer = sym.get_opt_attr<halo_rasterizer_e>("halo-rasterizer");
-        if (halo_rasterizer) text_symbol.set_halo_rasterizer(*halo_rasterizer);
-
-        rule.append(text_symbol);
+        if (strict_ && !placements->defaults.format_defaults.fontset)
+        {
+            ensure_font_face(placements->defaults.format_defaults.face_name);
+        }
+        text_symbolizer sym;
+        parse_symbolizer_base(sym, node);
+        put<text_placements_ptr>(sym, keys::text_placements_, placements);
+        set_symbolizer_property<symbolizer_base,composite_mode_e>(sym, keys::halo_comp_op, node);
+        set_symbolizer_property<symbolizer_base,halo_rasterizer_enum>(sym, keys::halo_rasterizer, node);
+        set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::halo_transform, node);
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_shield_symbolizer(rule & rule, xml_node const& sym)
+void map_parser::parse_shield_symbolizer(rule & rule, xml_node const& node)
 {
     try
     {
-        text_placements_ptr placement_finder;
-        optional<std::string> placement_type = sym.get_opt_attr<std::string>("placement-type");
-        if (placement_type) {
-            placement_finder = placements::registry::instance().from_xml(*placement_type, sym, fontsets_);
+        text_placements_ptr placements;
+        optional<std::string> placement_type = node.get_opt_attr<std::string>("placement-type");
+        if (placement_type)
+        {
+            placements = placements::registry::instance().from_xml(*placement_type, node, fontsets_, true);
         } else {
-            placement_finder = boost::make_shared<text_placements_dummy>();
+            placements = std::make_shared<text_placements_dummy>();
         }
-        placement_finder->defaults.from_xml(sym, fontsets_);
+        placements->defaults.from_xml(node, fontsets_, true);
         if (strict_ &&
-            !placement_finder->defaults.format.fontset)
+            !placements->defaults.format_defaults.fontset)
         {
-            ensure_font_face(placement_finder->defaults.format.face_name);
+            ensure_font_face(placements->defaults.format_defaults.face_name);
         }
 
-        shield_symbolizer shield_symbol = shield_symbolizer(placement_finder);
+        shield_symbolizer sym;
+        parse_symbolizer_base(sym, node);
+        put<text_placements_ptr>(sym, keys::text_placements_, placements);
+        set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::image_transform, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::shield_dx, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::shield_dy, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::opacity, node);
+        set_symbolizer_property<symbolizer_base,mapnik::boolean_type>(sym, keys::unlock_image, node);
 
-        optional<std::string> image_transform_wkt = sym.get_opt_attr<std::string>("transform");
-        if (image_transform_wkt)
-        {
-            mapnik::transform_list_ptr tl = boost::make_shared<mapnik::transform_list>();
-            if (!mapnik::parse_transform(*tl, *image_transform_wkt, sym.get_tree().transform_expr_grammar))
-            {
-                throw mapnik::config_error("Failed to parse transform: '" + *image_transform_wkt + "'");
-            }
-            shield_symbol.set_image_transform(tl);
-        }
-
-        // shield displacement
-        double shield_dx = sym.get_attr("shield-dx", 0.0);
-        double shield_dy = sym.get_attr("shield-dy", 0.0);
-        shield_symbol.set_shield_displacement(shield_dx,shield_dy);
-
-        // opacity
-        optional<float> opacity = sym.get_opt_attr<float>("opacity");
-        if (opacity)
-        {
-            shield_symbol.set_opacity(*opacity);
-        }
-
-        // text-opacity
-        // TODO: Could be problematic because it is named opacity in TextSymbolizer but opacity has a diffrent meaning here.
-        optional<double> text_opacity =
-            sym.get_opt_attr<double>("text-opacity");
-        if (text_opacity)
-        {
-            shield_symbol.set_text_opacity(* text_opacity);
-        }
-
-        // unlock_image
-        optional<boolean> unlock_image =
-            sym.get_opt_attr<boolean>("unlock-image");
-        if (unlock_image)
-        {
-            shield_symbol.set_unlock_image(* unlock_image);
-        }
-
-        std::string file = sym.get_attr<std::string>("file");
+        std::string file = node.get_attr<std::string>("file");
         if (file.empty())
         {
             throw config_error("empty file attribute");
         }
 
-        optional<std::string> base = sym.get_opt_attr<std::string>("base");
-
+        optional<std::string> base = node.get_opt_attr<std::string>("base");
         if(base)
         {
             std::map<std::string,std::string>::const_iterator itr = file_sources_.find(*base);
@@ -1267,200 +1151,108 @@ void map_parser::parse_shield_symbolizer(rule & rule, xml_node const& sym)
 
         // no_text - removed property in 2.1.x that used to have a purpose
         // before you could provide an expression with an empty string
-        optional<boolean> no_text =
-            sym.get_opt_attr<boolean>("no-text");
+        optional<mapnik::boolean_type> no_text = node.get_opt_attr<mapnik::boolean_type>("no-text");
         if (no_text)
         {
             MAPNIK_LOG_ERROR(shield_symbolizer) << "'no-text' is deprecated and will be removed in Mapnik 3.x, to create a ShieldSymbolizer without text just provide an element like: \"<ShieldSymbolizer ... />' '</>\"";
-            if (*no_text)
-                shield_symbol.set_name(parse_expression("' '"));
+            // FIXME
+//            if (*no_text)
+            //              put(shield_symbol, "no-text", set_name(parse_expression("' '"));
         }
 
         file = ensure_relative_to_xml(file);
         ensure_exists(file);
-        shield_symbol.set_filename( parse_path(file, sym.get_tree().path_expr_grammar) );
-        parse_symbolizer_base(shield_symbol, sym);
-        rule.append(shield_symbol);
+        put(sym, keys::file , parse_path(file));
+        optional<halo_rasterizer_e> halo_rasterizer_ = node.get_opt_attr<halo_rasterizer_e>("halo-rasterizer");
+        if (halo_rasterizer_) put(sym, keys::halo_rasterizer, halo_rasterizer_enum(*halo_rasterizer_));
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-bool map_parser::parse_stroke(stroke & strk, xml_node const & sym)
+void map_parser::parse_stroke(symbolizer_base & sym, xml_node const & node)
 {
-    bool result = false;
-
-    // stroke color
-    optional<color> c = sym.get_opt_attr<color>("stroke");
-    if (c)
-    {
-        result = true;
-        strk.set_color(*c);
-    }
-
-    // stroke-width
-    optional<double> width = sym.get_opt_attr<double>("stroke-width");
-    if (width)
-    {
-        result = true;
-        strk.set_width(*width);
-    }
-
-    // stroke-opacity
-    optional<double> opacity = sym.get_opt_attr<double>("stroke-opacity");
-    if (opacity)
-    {
-        result = true;
-        strk.set_opacity(*opacity);
-    }
-
-    // stroke-linejoin
-    optional<line_join_e> line_join = sym.get_opt_attr<line_join_e>("stroke-linejoin");
-    if (line_join) strk.set_line_join(*line_join);
-
-    // stroke-linecap
-    optional<line_cap_e> line_cap = sym.get_opt_attr<line_cap_e>("stroke-linecap");
-    if (line_cap) strk.set_line_cap(*line_cap);
-
-    // stroke-gamma
-    optional<double> gamma = sym.get_opt_attr<double>("stroke-gamma");
-    if (gamma) strk.set_gamma(*gamma);
-
-    // stroke-gamma-method
-    optional<gamma_method_e> gamma_method = sym.get_opt_attr<gamma_method_e>("stroke-gamma-method");
-    if (gamma_method) strk.set_gamma_method(*gamma_method);
-
-    // stroke-dashoffset
-    optional<double> dash_offset = sym.get_opt_attr<double>("stroke-dashoffset");
-    if (dash_offset) strk.set_dash_offset(*dash_offset);
-
-    // stroke-dasharray
-    optional<std::string> str = sym.get_opt_attr<std::string>("stroke-dasharray");
-    if (str)
-    {
-        std::vector<double> dash_array;
-        if (util::parse_dasharray((*str).begin(),(*str).end(),dash_array))
-        {
-            if (!dash_array.empty())
-            {
-                size_t size = dash_array.size();
-                if (size % 2 == 1)
-                    dash_array.insert(dash_array.end(),dash_array.begin(),dash_array.end());
-
-                std::vector<double>::const_iterator pos = dash_array.begin();
-                while (pos != dash_array.end())
-                {
-                    if (*pos > 0.0 || *(pos+1) > 0.0) // avoid both dash and gap eq 0.0
-                        strk.add_dash(*pos,*(pos + 1));
-                    pos +=2;
-                }
-            }
-        }
-        else
-        {
-            throw config_error(std::string("Failed to parse dasharray ") +
-                               "'. Expected a " +
-                               "list of floats or 'none' but got '" + (*str) + "'");
-        }
-    }
-
-    // stroke-miterlimit
-    optional<double> miterlimit = sym.get_opt_attr<double>("stroke-miterlimit");
-    if (miterlimit) strk.set_miterlimit(*miterlimit);
-    return result;
+    set_symbolizer_property<symbolizer_base,double>(sym, keys::stroke_gamma, node);
+    set_symbolizer_property<symbolizer_base,double>(sym, keys::stroke_dashoffset, node);
+    set_symbolizer_property<symbolizer_base,double>(sym, keys::stroke_miterlimit, node);
+    set_symbolizer_property<symbolizer_base,double>(sym, keys::stroke_width, node);
+    set_symbolizer_property<symbolizer_base,double>(sym, keys::stroke_opacity, node);
+    set_symbolizer_property<symbolizer_base,color>(sym, keys::stroke, node);
+    set_symbolizer_property<symbolizer_base,line_join_enum>(sym, keys::stroke_linejoin, node);
+    set_symbolizer_property<symbolizer_base,line_cap_enum>(sym, keys::stroke_linecap, node);
+    set_symbolizer_property<symbolizer_base,gamma_method_enum>(sym, keys::stroke_gamma_method, node);
+    set_symbolizer_property<symbolizer_base,dash_array>(sym, keys::stroke_dasharray, node);
 }
 
-void map_parser::parse_line_symbolizer(rule & rule, xml_node const & sym)
+void map_parser::parse_line_symbolizer(rule & rule, xml_node const & node)
 {
     try
     {
-        stroke strk;
-        parse_stroke(strk,sym);
-        line_symbolizer symbol = line_symbolizer(strk);
-
-        // offset value
-        optional<double> offset = sym.get_opt_attr<double>("offset");
-        if (offset) symbol.set_offset(*offset);
-
-        line_rasterizer_e rasterizer = sym.get_attr<line_rasterizer_e>("rasterizer", RASTERIZER_FULL);
-        symbol.set_rasterizer(rasterizer);
-
-        parse_symbolizer_base(symbol, sym);
-        rule.append(symbol);
+        line_symbolizer sym;
+        parse_symbolizer_base(sym, node);
+        parse_stroke(sym, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::offset, node);
+        set_symbolizer_property<symbolizer_base,line_rasterizer_enum>(sym, keys::line_rasterizer, node);
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-
-void map_parser::parse_polygon_symbolizer(rule & rule, xml_node const & sym)
+void map_parser::parse_polygon_symbolizer(rule & rule, xml_node const & node)
 {
     try
     {
-        polygon_symbolizer poly_sym;
-        // fill
-        optional<color> fill = sym.get_opt_attr<color>("fill");
-        if (fill) poly_sym.set_fill(*fill);
-        // fill-opacity
-        optional<double> opacity = sym.get_opt_attr<double>("fill-opacity");
-        if (opacity) poly_sym.set_opacity(*opacity);
-        // gamma
-        optional<double> gamma = sym.get_opt_attr<double>("gamma");
-        if (gamma)  poly_sym.set_gamma(*gamma);
-        // gamma method
-        optional<gamma_method_e> gamma_method = sym.get_opt_attr<gamma_method_e>("gamma-method");
-        if (gamma_method) poly_sym.set_gamma_method(*gamma_method);
-
-        parse_symbolizer_base(poly_sym, sym);
-        rule.append(poly_sym);
+        polygon_symbolizer sym;
+        parse_symbolizer_base(sym, node);
+        set_symbolizer_property<symbolizer_base,color>(sym, keys::fill, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::fill_opacity, node);
+        set_symbolizer_property<symbolizer_base,double>(sym, keys::gamma, node);
+        set_symbolizer_property<symbolizer_base,gamma_method_enum>(sym, keys::gamma_method, node);
+        rule.append(std::move(sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_building_symbolizer(rule & rule, xml_node const & sym)
+void map_parser::parse_building_symbolizer(rule & rule, xml_node const & node)
 {
     try
     {
         building_symbolizer building_sym;
-
-        // fill
-        optional<color> fill = sym.get_opt_attr<color>("fill");
-        if (fill) building_sym.set_fill(*fill);
-        // fill-opacity
-        optional<double> opacity = sym.get_opt_attr<double>("fill-opacity");
-        if (opacity) building_sym.set_opacity(*opacity);
-        // height
-        optional<expression_ptr> height = sym.get_opt_attr<expression_ptr>("height");
-        if (height) building_sym.set_height(*height);
-
-        parse_symbolizer_base(building_sym, sym);
-        rule.append(building_sym);
+        parse_symbolizer_base(building_sym, node);
+        set_symbolizer_property<building_symbolizer,color>(building_sym, keys::fill, node);
+        set_symbolizer_property<building_symbolizer,double>(building_sym, keys::fill_opacity, node);
+        // TODO
+        optional<expression_ptr> height = node.get_opt_attr<expression_ptr>("height");
+        if (height) put(building_sym, keys::height, *height);
+        rule.append(std::move(building_sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_raster_symbolizer(rule & rule, xml_node const & sym)
+void map_parser::parse_raster_symbolizer(rule & rule, xml_node const & node)
 {
     try
     {
         raster_symbolizer raster_sym;
-
+        parse_symbolizer_base(raster_sym, node);
         // mode
-        optional<std::string> mode = sym.get_opt_attr<std::string>("mode");
+        optional<std::string> mode = node.get_opt_attr<std::string>("mode");
         if (mode)
         {
             std::string mode_string = *mode;
@@ -1469,25 +1261,25 @@ void map_parser::parse_raster_symbolizer(rule & rule, xml_node const & sym)
                 MAPNIK_LOG_ERROR(raster_symbolizer) << "'mode' values using \"_\" are deprecated and will be removed in Mapnik 3.x, use \"-\"instead";
                 boost::algorithm::replace_all(mode_string,"_","-");
             }
-            raster_sym.set_mode(mode_string);
+            put(raster_sym, keys::mode, mode_string);
         }
 
         // scaling
-        optional<std::string> scaling = sym.get_opt_attr<std::string>("scaling");
+        optional<std::string> scaling = node.get_opt_attr<std::string>("scaling");
         if (scaling)
         {
             std::string scaling_method = *scaling;
             if (scaling_method == "fast")
             {
                 MAPNIK_LOG_ERROR(raster_symbolizer) << "'scaling' value of 'fast' is deprecated and will be removed in Mapnik 3.x, use 'near' with Mapnik >= 2.1.x";
-                raster_sym.set_scaling_method(SCALING_NEAR);
+                put(raster_sym, keys::scaling, SCALING_NEAR);
             }
             else
             {
                 boost::optional<scaling_method_e> method = scaling_method_from_string(scaling_method);
                 if (method)
                 {
-                    raster_sym.set_scaling_method(*method);
+                    put(raster_sym, keys::scaling, *method);
                 }
                 else
                 {
@@ -1497,62 +1289,106 @@ void map_parser::parse_raster_symbolizer(rule & rule, xml_node const & sym)
         }
 
         // opacity
-        optional<float> opacity = sym.get_opt_attr<float>("opacity");
-        if (opacity) raster_sym.set_opacity(*opacity);
+        optional<double> opacity = node.get_opt_attr<double>("opacity");
+        if (opacity) put(raster_sym, keys::opacity, *opacity);
 
         // filter factor
-        optional<double> filter_factor = sym.get_opt_attr<double>("filter-factor");
-        if (filter_factor) raster_sym.set_filter_factor(*filter_factor);
+        optional<double> filter_factor = node.get_opt_attr<double>("filter-factor");
+        if (filter_factor) put(raster_sym, keys::filter_factor, *filter_factor);
 
         // mesh-size
-        optional<unsigned> mesh_size = sym.get_opt_attr<unsigned>("mesh-size");
-        if (mesh_size) raster_sym.set_mesh_size(*mesh_size);
+        optional<unsigned> mesh_size = node.get_opt_attr<unsigned>("mesh-size");
+        if (mesh_size) put<value_integer>(raster_sym, keys::mesh_size, *mesh_size);
 
         // premultiplied status of image
-        optional<boolean> premultiplied = sym.get_opt_attr<boolean>("premultiplied");
-        if (premultiplied) raster_sym.set_premultiplied(*premultiplied);
-
-        xml_node::const_iterator cssIter = sym.begin();
-        xml_node::const_iterator endCss = sym.end();
+        optional<mapnik::boolean_type> premultiplied = node.get_opt_attr<mapnik::boolean_type>("premultiplied");
+        if (premultiplied) put(raster_sym, keys::premultiplied, *premultiplied);
 
         bool found_colorizer = false;
-        for(; cssIter != endCss; ++cssIter)
+        for ( auto const& css : node)
         {
-            if (cssIter->is("RasterColorizer"))
+            if (css.is("RasterColorizer"))
             {
                 found_colorizer = true;
-                raster_colorizer_ptr colorizer = boost::make_shared<raster_colorizer>();
-                raster_sym.set_colorizer(colorizer);
-                if (parse_raster_colorizer(colorizer, *cssIter))
-                    raster_sym.set_colorizer(colorizer);
-
+                raster_colorizer_ptr colorizer = std::make_shared<raster_colorizer>();
+                put(raster_sym, keys::colorizer, colorizer);
+                if (parse_raster_colorizer(colorizer, css))
+                    put(raster_sym, keys::colorizer, colorizer);
             }
         }
-        // look for properties one level up
+        //look for properties one level up
         if (!found_colorizer)
         {
-            raster_colorizer_ptr colorizer = boost::make_shared<raster_colorizer>();
-            if (parse_raster_colorizer(colorizer, sym))
-                raster_sym.set_colorizer(colorizer);
+            raster_colorizer_ptr colorizer = std::make_shared<raster_colorizer>();
+            if (parse_raster_colorizer(colorizer, node))
+                put(raster_sym, keys::colorizer, colorizer);
         }
-        parse_symbolizer_base(raster_sym, sym);
-        rule.append(raster_sym);
+        rule.append(std::move(raster_sym));
     }
     catch (config_error const& ex)
     {
-        ex.append_context(sym);
+        ex.append_context(node);
         throw;
     }
 }
 
-void map_parser::parse_debug_symbolizer(rule & rule, xml_node const & sym)
+void map_parser::parse_group_symbolizer(rule & rule, xml_node const & node)
+{
+    try
+    {
+        group_symbolizer symbol;
+        parse_symbolizer_base(symbol, node);
+        group_symbolizer_properties_ptr prop = std::make_shared<group_symbolizer_properties>();
+        set_symbolizer_property<symbolizer_base, value_integer>(symbol, keys::num_columns, node);
+        set_symbolizer_property<symbolizer_base, value_integer>(symbol, keys::start_column, node);
+        set_symbolizer_property<symbolizer_base, expression_ptr>(symbol, keys::repeat_key, node);
+        text_placements_ptr placements = std::make_shared<text_placements_dummy>();
+        placements->defaults.text_properties_from_xml(node);
+        put<text_placements_ptr>(symbol, keys::text_placements_, placements);
+
+        size_t layout_count = 0;
+        for (auto const& child_node : node)
+        {
+            if (child_node.is("GroupRule"))
+            {
+                parse_group_rule(*prop, child_node);
+                child_node.set_processed(true);
+            }
+            else if (child_node.is("SimpleLayout"))
+            {
+                parse_simple_layout(*prop, child_node);
+                child_node.set_processed(true);
+                ++layout_count;
+            }
+            else if (child_node.is("PairLayout"))
+            {
+                parse_pair_layout(*prop, child_node);
+                child_node.set_processed(true);
+                ++layout_count;
+            }
+            if (layout_count > 1)
+            {
+                throw config_error("Provide only one layout for a GroupSymbolizer.");
+            }
+        }
+        put(symbol, keys::group_properties, prop);
+        rule.append(std::move(symbol));
+    }
+    catch (const config_error & ex)
+    {
+        ex.append_context(node);
+        throw;
+    }
+}
+
+void map_parser::parse_debug_symbolizer(rule & rule, xml_node const & node)
 {
     debug_symbolizer symbol;
-    parse_symbolizer_base(symbol, sym);
-    debug_symbolizer_mode_e mode =
-        sym.get_attr<debug_symbolizer_mode_e>("mode", DEBUG_SYM_MODE_COLLISION);
-    symbol.set_mode(mode);
-    rule.append(symbol);
+    parse_symbolizer_base(symbol, node);
+    // TODO
+    optional<debug_symbolizer_mode_e> mode = node.get_opt_attr<debug_symbolizer_mode_e>("mode");
+    if (mode) put(symbol, keys::mode, debug_symbolizer_mode_enum(*mode));
+    rule.append(std::move(symbol));
 }
 
 bool map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc,
@@ -1565,7 +1401,8 @@ bool map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc,
         colorizer_mode default_mode =
             node.get_attr<colorizer_mode>("default-mode", COLORIZER_LINEAR);
 
-        if(default_mode == COLORIZER_INHERIT) {
+        if(default_mode == COLORIZER_INHERIT)
+        {
             throw config_error("RasterColorizer mode must not be INHERIT. ");
         }
         rc->set_default_mode(default_mode);
@@ -1577,52 +1414,48 @@ bool map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc,
             rc->set_default_color(*default_color);
         }
 
-
         // epsilon
         optional<float> eps = node.get_opt_attr<float>("epsilon");
         if (eps)
         {
-            if(*eps < 0) {
+            if(*eps < 0)
+            {
                 throw config_error("RasterColorizer epsilon must be > 0. ");
             }
             rc->set_epsilon(*eps);
         }
 
-
-        xml_node::const_iterator stopIter = node.begin();
-        xml_node::const_iterator endStop = node.end();
         float maximumValue = -std::numeric_limits<float>::max();
-
-        for(; stopIter != endStop; ++stopIter)
+        for (auto const& n : node)
         {
-            if (stopIter->is("stop"))
+            if (n.is("stop"))
             {
                 found_stops = true;
                 // colour is optional.
-                optional<color> stopcolor = stopIter->get_opt_attr<color>("color");
-                if (!stopcolor) {
+                optional<color> stopcolor = n.get_opt_attr<color>("color");
+                if (!stopcolor)
+                {
                     *stopcolor = *default_color;
                 }
 
                 // mode default to INHERIT
-                colorizer_mode mode =
-                    stopIter->get_attr<colorizer_mode>("mode", COLORIZER_INHERIT);
+                colorizer_mode mode = n.get_attr<colorizer_mode>("mode", COLORIZER_INHERIT);
 
                 // value is required, and it must be bigger than the previous
-                optional<float> value =
-                    stopIter->get_opt_attr<float>("value");
+                optional<float> value = n.get_opt_attr<float>("value");
 
-                if(!value) {
+                if(!value)
+                {
                     throw config_error("stop tag missing value");
                 }
 
-                if(value < maximumValue) {
+                if(value < maximumValue)
+                {
                     throw config_error("stop tag values must be in ascending order");
                 }
                 maximumValue = *value;
 
-                optional<std::string> label =
-                    stopIter->get_opt_attr<std::string>("label");
+                optional<std::string> label = n.get_opt_attr<std::string>("label");
 
                 //append the stop
                 colorizer_stop tmpStop;
@@ -1630,7 +1463,9 @@ bool map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc,
                 tmpStop.set_mode(mode);
                 tmpStop.set_value(*value);
                 if (label)
+                {
                     tmpStop.set_label(*label);
+                }
 
                 rc->add_stop(tmpStop);
             }
@@ -1644,9 +1479,88 @@ bool map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc,
     return found_stops;
 }
 
+void map_parser::parse_group_rule(group_symbolizer_properties & prop, xml_node const & node)
+{
+    try
+    {
+        rule fake_rule;
+        expression_ptr filter, repeat_key;
+
+        xml_node const *filter_child = node.get_opt_child("Filter"),
+                       *rptkey_child = node.get_opt_child("RepeatKey");
+
+        if (filter_child)
+        {
+            filter = filter_child->get_value<expression_ptr>();
+        }
+        else
+        {
+            filter = std::make_shared<mapnik::expr_node>(true);
+        }
+
+        if (rptkey_child)
+        {
+            repeat_key = rptkey_child->get_value<expression_ptr>();
+        }
+
+        group_rule_ptr rule = std::make_shared<group_rule>(filter, repeat_key);
+
+        parse_symbolizers(fake_rule, node);
+
+        for (auto const& sym : fake_rule)
+        {
+           rule->append(std::move(sym));
+        }
+
+        prop.add_rule(std::move(rule));
+     }
+     catch (const config_error & ex)
+     {
+         ex.append_context(node);
+         throw;
+     }
+}
+
+void map_parser::parse_simple_layout(group_symbolizer_properties & prop, xml_node const & node)
+{
+    simple_row_layout layout;
+
+    optional<double> item_margin = node.get_opt_attr<double>("item-margin");
+    if (item_margin) layout.set_item_margin(*item_margin);
+
+    prop.set_layout(std::move(layout));
+}
+
+void map_parser::parse_pair_layout(group_symbolizer_properties & prop, xml_node const & node)
+{
+    pair_layout layout;
+
+    optional<double> item_margin = node.get_opt_attr<double>("item-margin");
+    if (item_margin) layout.set_item_margin(*item_margin);
+
+    optional<double> max_difference = node.get_opt_attr<double>("max-difference");
+    if (max_difference) layout.set_max_difference(*max_difference);
+
+    prop.set_layout(std::move(layout));
+}
+
 void map_parser::ensure_font_face(std::string const& face_name)
 {
-    if (! font_manager_.get_face(face_name))
+    bool found = false;
+    auto itr = font_name_cache_.find(face_name);
+    if (itr != font_name_cache_.end())
+    {
+        found = itr->second;
+    }
+    else
+    {
+        found = freetype_engine::can_open(face_name,
+                                      font_library_,
+                                      font_file_mapping_,
+                                      freetype_engine::get_mapping());
+        font_name_cache_.emplace(face_name,found);
+    }
+    if (!found)
     {
         throw config_error("Failed to find font face '" +
                            face_name + "'");
@@ -1658,7 +1572,7 @@ std::string map_parser::ensure_relative_to_xml(boost::optional<std::string> cons
     if (marker_cache::instance().is_uri(*opt_path))
         return *opt_path;
 
-    if (!xml_base_path_.empty() && relative_to_xml_)
+    if (!xml_base_path_.empty())
     {
         std::string starting_path = *opt_path;
         if (mapnik::util::is_relative(starting_path))
@@ -1676,10 +1590,10 @@ void map_parser::ensure_exists(std::string const& file_path)
     // validate that the filename exists if it is not a dynamic PathExpression
     if (!boost::algorithm::find_first(file_path,"[") && !boost::algorithm::find_first(file_path,"]"))
     {
-       if (!mapnik::util::exists(file_path))
-       {
-           throw mapnik::config_error("file could not be found: '" + file_path + "'");
-       }
+        if (!mapnik::util::exists(file_path))
+        {
+            throw mapnik::config_error("file could not be found: '" + file_path + "'");
+        }
     }
 }
 
@@ -1703,33 +1617,35 @@ void map_parser::find_unused_nodes(xml_node const& root)
 
 void map_parser::find_unused_nodes_recursive(xml_node const& node, std::string & error_message)
 {
-    if (!node.processed())
+    if (!node.ignore())
     {
-        if (node.is_text()) {
-            error_message += "\n* text '" + node.text() + "'";
-        } else {
-            error_message += "\n* node '" + node.name() + "' at line " + node.line_to_string();
+        if (!node.processed())
+        {
+            if (node.is_text())
+            {
+                error_message += "\n* text '" + node.text() + "'";
+            }
+            else
+            {
+                error_message += "\n* node '" + node.name() + "' at line " + node.line_to_string();
+            }
+            return; //All attributes and children are automatically unprocessed, too.
         }
-        return; //All attributes and children are automatically unprocessed, too.
-    }
-    xml_node::attribute_map const& attr = node.get_attributes();
-    xml_node::attribute_map::const_iterator aitr = attr.begin();
-    xml_node::attribute_map::const_iterator aend = attr.end();
-    for (;aitr!=aend; aitr++)
-    {
-        if (!aitr->second.processed)
+        xml_node::attribute_map const& attrs = node.get_attributes();
+        for (auto const& attr : attrs)
+        {
+            if (!attr.second.processed)
+            {
+                error_message += "\n* attribute '" + attr.first +
+                    "' with value '" + attr.second.value +
+                    "' at line " + node.line_to_string();
+            }
+        }
+        for (auto const& child_node : node)
         {
-            error_message += "\n* attribute '" + aitr->first +
-                "' with value '" + aitr->second.value +
-                "' at line " + node.line_to_string();
+            find_unused_nodes_recursive(child_node, error_message);
         }
     }
-    xml_node::const_iterator itr = node.begin();
-    xml_node::const_iterator end = node.end();
-    for (; itr!=end; itr++)
-    {
-        find_unused_nodes_recursive(*itr, error_message);
-    }
 }
 
 } // end of namespace mapnik
diff --git a/src/map.cpp b/src/map.cpp
index 6183001..764f82d 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -32,15 +32,15 @@
 #include <mapnik/datasource.hpp>
 #include <mapnik/projection.hpp>
 #include <mapnik/proj_transform.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 #include <mapnik/filter_featureset.hpp>
 #include <mapnik/hit_test_filter.hpp>
 #include <mapnik/scale_denominator.hpp>
 #include <mapnik/config_error.hpp>
 #include <mapnik/config.hpp> // for PROJ_ENVELOPE_POINTS
-
-// boost
-#include <boost/make_shared.hpp>
+#include <mapnik/text/font_library.hpp>
+#include <mapnik/util/file_io.hpp>
+#include <mapnik/font_engine_freetype.hpp>
 
 // stl
 #include <stdexcept>
@@ -57,6 +57,7 @@ static const char * aspect_fix_mode_strings[] = {
     "ADJUST_BBOX_HEIGHT",
     "ADJUST_CANVAS_WIDTH",
     "ADJUST_CANVAS_HEIGHT",
+    "RESPECT",
     ""
 };
 
@@ -67,16 +68,28 @@ Map::Map()
     height_(400),
     srs_(MAPNIK_LONGLAT_PROJ),
     buffer_size_(0),
+    background_image_comp_op_(src_over),
+    background_image_opacity_(1.0),
     aspectFixMode_(GROW_BBOX),
-    base_path_("") {}
+    base_path_(""),
+    extra_params_(),
+    font_directory_(),
+    font_file_mapping_(),
+    font_memory_cache_() {}
 
 Map::Map(int width,int height, std::string const& srs)
     : width_(width),
       height_(height),
       srs_(srs),
       buffer_size_(0),
+      background_image_comp_op_(src_over),
+      background_image_opacity_(1.0),
       aspectFixMode_(GROW_BBOX),
-      base_path_("") {}
+      base_path_(""),
+      extra_params_(),
+      font_directory_(),
+      font_file_mapping_(),
+      font_memory_cache_() {}
 
 Map::Map(Map const& rhs)
     : width_(rhs.width_),
@@ -85,6 +98,8 @@ Map::Map(Map const& rhs)
       buffer_size_(rhs.buffer_size_),
       background_(rhs.background_),
       background_image_(rhs.background_image_),
+      background_image_comp_op_(rhs.background_image_comp_op_),
+      background_image_opacity_(rhs.background_image_opacity_),
       styles_(rhs.styles_),
       fontsets_(rhs.fontsets_),
       layers_(rhs.layers_),
@@ -92,29 +107,90 @@ Map::Map(Map const& rhs)
       current_extent_(rhs.current_extent_),
       maximum_extent_(rhs.maximum_extent_),
       base_path_(rhs.base_path_),
-      extra_params_(rhs.extra_params_) {}
+      extra_params_(rhs.extra_params_),
+      font_directory_(rhs.font_directory_),
+      font_file_mapping_(rhs.font_file_mapping_),
+      // on copy discard memory cache
+      font_memory_cache_() {}
+
+
+Map::Map(Map && rhs)
+    : width_(std::move(rhs.width_)),
+      height_(std::move(rhs.height_)),
+      srs_(std::move(rhs.srs_)),
+      buffer_size_(std::move(rhs.buffer_size_)),
+      background_(std::move(rhs.background_)),
+      background_image_(std::move(rhs.background_image_)),
+      background_image_comp_op_(std::move(rhs.background_image_comp_op_)),
+      background_image_opacity_(std::move(rhs.background_image_opacity_)),
+      styles_(std::move(rhs.styles_)),
+      fontsets_(std::move(rhs.fontsets_)),
+      layers_(std::move(rhs.layers_)),
+      aspectFixMode_(std::move(rhs.aspectFixMode_)),
+      current_extent_(std::move(rhs.current_extent_)),
+      maximum_extent_(std::move(rhs.maximum_extent_)),
+      base_path_(std::move(rhs.base_path_)),
+      extra_params_(std::move(rhs.extra_params_)),
+      font_directory_(std::move(rhs.font_directory_)),
+      font_file_mapping_(std::move(rhs.font_file_mapping_)),
+      font_memory_cache_(std::move(rhs.font_memory_cache_)) {}
 
 Map::~Map() {}
 
-Map& Map::operator=(Map const& rhs)
-{
-    if (this==&rhs) return *this;
-    width_=rhs.width_;
-    height_=rhs.height_;
-    srs_=rhs.srs_;
-    buffer_size_ = rhs.buffer_size_;
-    background_=rhs.background_;
-    background_image_=rhs.background_image_;
-    styles_=rhs.styles_;
-    fontsets_ = rhs.fontsets_;
-    layers_=rhs.layers_;
-    aspectFixMode_=rhs.aspectFixMode_;
-    maximum_extent_=rhs.maximum_extent_;
-    base_path_=rhs.base_path_;
-    extra_params_=rhs.extra_params_;
+Map& Map::operator=(Map rhs)
+{
+    swap(*this, rhs);
     return *this;
 }
 
+void swap (Map & lhs, Map & rhs)
+{
+    using std::swap;
+    std::swap(lhs.width_,  rhs.width_);
+    std::swap(lhs.height_, rhs.height_);
+    std::swap(lhs.srs_, rhs.srs_);
+    std::swap(lhs.buffer_size_, rhs.buffer_size_);
+    std::swap(lhs.background_, rhs.background_);
+    std::swap(lhs.background_image_, rhs.background_image_);
+    std::swap(lhs.background_image_comp_op_, rhs.background_image_comp_op_);
+    std::swap(lhs.background_image_opacity_, rhs.background_image_opacity_);
+    std::swap(lhs.styles_, rhs.styles_);
+    std::swap(lhs.fontsets_, rhs.fontsets_);
+    std::swap(lhs.layers_, rhs.layers_);
+    std::swap(lhs.aspectFixMode_, rhs.aspectFixMode_);
+    std::swap(lhs.current_extent_, rhs.current_extent_);
+    std::swap(lhs.maximum_extent_, rhs.maximum_extent_);
+    std::swap(lhs.base_path_, rhs.base_path_);
+    std::swap(lhs.extra_params_, rhs.extra_params_);
+    std::swap(lhs.font_directory_,rhs.font_directory_);
+    std::swap(lhs.font_file_mapping_,rhs.font_file_mapping_);
+    // on assignment discard memory cache
+    //std::swap(lhs.font_memory_cache_,rhs.font_memory_cache_);
+}
+
+bool Map::operator==(Map const& rhs) const
+{
+    return (width_ == rhs.width_) &&
+        (height_ == rhs.height_) &&
+        (srs_ == rhs.srs_) &&
+        (buffer_size_ == rhs.buffer_size_) &&
+        (background_ == rhs.background_) &&
+        (background_image_ == rhs.background_image_) &&
+        (background_image_comp_op_ == rhs.background_image_comp_op_) &&
+        (background_image_opacity_ == rhs.background_image_opacity_) &&
+        (styles_ == rhs.styles_) &&
+        (fontsets_ == rhs.fontsets_) &&
+        (layers_ == rhs.layers_) &&
+        (aspectFixMode_ == rhs.aspectFixMode_) &&
+        (current_extent_ == rhs.current_extent_) &&
+        (maximum_extent_ == rhs.maximum_extent_) &&
+        (base_path_ == rhs.base_path_) &&
+        (extra_params_ == rhs.extra_params_) &&
+        (font_directory_ == rhs.font_directory_) &&
+        (font_file_mapping_ == rhs.font_file_mapping_);
+        // Note: we don't care about font_memory_cache in comparison
+}
+
 std::map<std::string,feature_type_style> const& Map::styles() const
 {
     return styles_;
@@ -145,9 +221,14 @@ Map::const_style_iterator Map::end_styles() const
     return styles_.end();
 }
 
-bool Map::insert_style(std::string const& name,feature_type_style const& style)
+bool Map::insert_style(std::string const& name, feature_type_style const& style)
 {
-    return styles_.insert(make_pair(name,style)).second;
+    return styles_.emplace(name, style).second;
+}
+
+bool Map::insert_style(std::string const& name, feature_type_style && style)
+{
+    return styles_.emplace(name, std::move(style)).second;
 }
 
 void Map::remove_style(std::string const& name)
@@ -170,10 +251,19 @@ bool Map::insert_fontset(std::string const& name, font_set const& fontset)
     {
         throw mapnik::config_error("Fontset name must match the name used to reference it on the map");
     }
-    return fontsets_.insert(make_pair(name, fontset)).second;
+    return fontsets_.emplace(name, fontset).second;
+}
+
+bool Map::insert_fontset(std::string const& name, font_set && fontset)
+{
+    if (fontset.get_name() != name)
+    {
+        throw mapnik::config_error("Fontset name must match the name used to reference it on the map");
+    }
+    return fontsets_.emplace(name, std::move(fontset)).second;
 }
 
-boost::optional<font_set const&>  Map::find_fontset(std::string const& name) const
+boost::optional<font_set const&> Map::find_fontset(std::string const& name) const
 {
     std::map<std::string,font_set>::const_iterator itr = fontsets_.find(name);
     if (itr != fontsets_.end())
@@ -192,17 +282,56 @@ std::map<std::string,font_set> & Map::fontsets()
     return fontsets_;
 }
 
+bool Map::register_fonts(std::string const& dir, bool recurse)
+{
+    font_library library;
+    return freetype_engine::register_fonts_impl(dir, library, font_file_mapping_, recurse);
+}
+
+bool Map::load_fonts()
+{
+    bool result = false;
+    auto const& global_mapping = freetype_engine::get_mapping();
+    for (auto const& kv : font_file_mapping_) // for every face-name -> idx/filepath
+    {
+       auto const& file_path = kv.second.second;
+        // do not attemp to re-cache in memory
+        if (font_memory_cache_.find(file_path) != font_memory_cache_.end())
+        {
+            continue;
+        }
+        auto const& meta = global_mapping.find(kv.first);
+        // no need to cache if global mapping already has same font
+        if ((meta != global_mapping.end()) && (meta->second.second == file_path))
+        {
+            continue;
+        }
+        mapnik::util::file file(file_path);
+        if (file.open())
+        {
+            auto item = font_memory_cache_.emplace(file_path, std::make_pair(std::move(file.data()),file.size()));
+            if (item.second) result = true;
+        }
+    }
+    return result;
+}
+
 size_t Map::layer_count() const
 {
     return layers_.size();
 }
 
-void Map::addLayer(layer const& l)
+void Map::add_layer(layer const& l)
 {
-    layers_.push_back(l);
+    layers_.emplace_back(l);
 }
 
-void Map::removeLayer(size_t index)
+void Map::add_layer(layer && l)
+{
+    layers_.push_back(std::move(l));
+}
+
+void Map::remove_layer(size_t index)
 {
     layers_.erase(layers_.begin()+index);
 }
@@ -213,12 +342,12 @@ void Map::remove_all()
     styles_.clear();
 }
 
-layer const& Map::getLayer(size_t index) const
+layer const& Map::get_layer(size_t index) const
 {
     return layers_[index];
 }
 
-layer& Map::getLayer(size_t index)
+layer& Map::get_layer(size_t index)
 {
     return layers_[index];
 }
@@ -268,7 +397,7 @@ void Map::set_height(unsigned height)
 void Map::resize(unsigned width,unsigned height)
 {
     if ((width != width_ ||
-        height != height_) &&
+         height != height_) &&
         width >= MIN_MAPSIZE &&
         width <= MAX_MAPSIZE &&
         height >= MIN_MAPSIZE &&
@@ -320,6 +449,26 @@ void Map::set_background_image(std::string const& image_filename)
     background_image_ = image_filename;
 }
 
+composite_mode_e Map::background_image_comp_op() const
+{
+    return background_image_comp_op_;
+}
+
+void Map::set_background_image_comp_op(composite_mode_e comp_op)
+{
+    background_image_comp_op_ = comp_op;
+}
+
+float Map::background_image_opacity() const
+{
+    return background_image_opacity_;
+}
+
+void Map::set_background_image_opacity(float opacity)
+{
+    background_image_opacity_ = opacity;
+}
+
 void Map::set_maximum_extent(box2d<double> const& box)
 {
     maximum_extent_.reset(box);
@@ -409,7 +558,7 @@ void Map::zoom_all()
             if (maximum_extent_)
             {
                 MAPNIK_LOG_ERROR(map) << "could not zoom to combined layer extents"
-                    << " so falling back to maximum-extent for zoom_all result";
+                                      << " so falling back to maximum-extent for zoom_all result";
                 zoom_to_box(*maximum_extent_);
             }
             else
@@ -437,6 +586,7 @@ void Map::zoom_to_box(box2d<double> const& box)
 
 void Map::fixAspectRatio()
 {
+    if (aspectFixMode_ == RESPECT) return;
     if (current_extent_.width() > 0 && current_extent_.height() > 0)
     {
         double ratio1 = static_cast<double>(width_) / static_cast<double>(height_);
@@ -452,10 +602,10 @@ void Map::fixAspectRatio()
             current_extent_.width(current_extent_.height() * ratio1);
             break;
         case ADJUST_CANVAS_HEIGHT:
-            height_ = int (width_ / ratio2 + 0.5);
+            height_ = static_cast<unsigned>(std::floor(static_cast<double>(width_) / ratio2 + 0.5));
             break;
         case ADJUST_CANVAS_WIDTH:
-            width_ = int (height_ * ratio2 + 0.5);
+            width_ = static_cast<unsigned>(std::floor(static_cast<double>(height_) * ratio2 + 0.5));
             break;
         case GROW_BBOX:
             if (ratio2 > ratio1)
@@ -471,15 +621,15 @@ void Map::fixAspectRatio()
             break;
         case GROW_CANVAS:
             if (ratio2 > ratio1)
-                width_ = static_cast<int>(height_ * ratio2 + 0.5);
+                width_ = static_cast<unsigned>(std::floor(static_cast<double>(height_) * ratio2 + 0.5));
             else
-                height_ = int (width_ / ratio2 + 0.5);
+                height_ = static_cast<unsigned>(std::floor(static_cast<double>(width_) / ratio2 + 0.5));
             break;
         case SHRINK_CANVAS:
             if (ratio2 > ratio1)
-                height_ = int (width_ / ratio2 + 0.5);
+                height_ = static_cast<unsigned>(std::floor(static_cast<double>(width_) / ratio2 + 0.5));
             else
-                width_ = static_cast<int>(height_ * ratio2 + 0.5);
+                width_ = static_cast<unsigned>(std::floor(static_cast<double>(height_) * ratio2 + 0.5));
             break;
         default:
             if (ratio2 > ratio1)
@@ -509,7 +659,7 @@ void Map::pan(int x,int y)
 {
     int dx = x - int(0.5 * width_);
     int dy = int(0.5 * height_) - y;
-    double s = width_/current_extent_.width();
+    double s = static_cast<double>(width_)/current_extent_.width();
     double minx  = current_extent_.minx() + dx/s;
     double maxx  = current_extent_.maxx() + dx/s;
     double miny  = current_extent_.miny() + dy/s;
@@ -526,7 +676,7 @@ void Map::pan_and_zoom(int x,int y,double factor)
 double Map::scale() const
 {
     if (width_>0)
-        return current_extent_.width()/width_;
+        return current_extent_.width()/static_cast<double>(width_);
     return current_extent_.width();
 }
 
@@ -536,9 +686,9 @@ double Map::scale_denominator() const
     return mapnik::scale_denominator( scale(), map_proj.is_geographic());
 }
 
-CoordTransform Map::view_transform() const
+view_transform Map::transform() const
 {
-    return CoordTransform(width_,height_,current_extent_);
+    return view_transform(width_,height_,current_extent_);
 }
 
 featureset_ptr Map::query_point(unsigned index, double x, double y) const
@@ -578,13 +728,13 @@ featureset_ptr Map::query_point(unsigned index, double x, double y) const
                   << "' into layer srs for tolerance calculation";
                 throw std::runtime_error(s.str());
             }
-            double tol = (map_ex.maxx() - map_ex.minx()) / width_ * 3;
+            double tol = (map_ex.maxx() - map_ex.minx()) / static_cast<double>(width_) * 3;
             featureset_ptr fs = ds->features_at_point(mapnik::coord2d(x,y), tol);
             MAPNIK_LOG_DEBUG(map) << "map: Query at point tol=" << tol << "(" << x << "," << y << ")";
             if (fs)
             {
-                return boost::make_shared<filter_featureset<hit_test_filter> >(fs,
-                                                                               hit_test_filter(x,y,tol));
+                return std::make_shared<filter_featureset<hit_test_filter> >(fs,
+                                                                             hit_test_filter(x,y,tol));
             }
         }
     }
@@ -601,7 +751,7 @@ featureset_ptr Map::query_point(unsigned index, double x, double y) const
 
 featureset_ptr Map::query_map_point(unsigned index, double x, double y) const
 {
-    CoordTransform tr = view_transform();
+    view_transform tr = transform();
     tr.backward(&x,&y);
     return query_point(index,x,y);
 }
diff --git a/src/mapped_memory_cache.cpp b/src/mapped_memory_cache.cpp
index eb109a1..36b2aa8 100644
--- a/src/mapped_memory_cache.cpp
+++ b/src/mapped_memory_cache.cpp
@@ -20,6 +20,8 @@
  *
  *****************************************************************************/
 
+#if defined(SHAPE_MEMORY_MAPPED_FILE)
+
 // mapnik
 #include <mapnik/debug.hpp>
 #include <mapnik/util/fs.hpp>
@@ -27,8 +29,8 @@
 
 // boost
 #include <boost/assert.hpp>
+#include <boost/interprocess/mapped_region.hpp>
 #include <boost/interprocess/file_mapping.hpp>
-#include <boost/make_shared.hpp>
 
 namespace mapnik
 {
@@ -36,7 +38,7 @@ namespace mapnik
 void mapped_memory_cache::clear()
 {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
     return cache_.clear();
 }
@@ -44,17 +46,17 @@ void mapped_memory_cache::clear()
 bool mapped_memory_cache::insert(std::string const& uri, mapped_region_ptr mem)
 {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
-    return cache_.insert(std::make_pair(uri,mem)).second;
+    return cache_.emplace(uri,mem).second;
 }
 
 boost::optional<mapped_region_ptr> mapped_memory_cache::find(std::string const& uri, bool update_cache)
 {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
-    typedef boost::unordered_map<std::string, mapped_region_ptr>::const_iterator iterator_type;
+    using iterator_type = std::unordered_map<std::string, mapped_region_ptr>::const_iterator;
     boost::optional<mapped_region_ptr> result;
     iterator_type itr = cache_.find(uri);
     if (itr != cache_.end())
@@ -67,14 +69,12 @@ boost::optional<mapped_region_ptr> mapped_memory_cache::find(std::string const&
     {
         try
         {
-            file_mapping mapping(uri.c_str(),read_only);
-            mapped_region_ptr region(boost::make_shared<mapped_region>(mapping,read_only));
-
+            boost::interprocess::file_mapping mapping(uri.c_str(),boost::interprocess::read_only);
+            mapped_region_ptr region(std::make_shared<boost::interprocess::mapped_region>(mapping,boost::interprocess::read_only));
             result.reset(region);
-
             if (update_cache)
             {
-                cache_.insert(std::make_pair(uri,*result));
+                cache_.emplace(uri,*result);
             }
             return result;
         }
@@ -95,3 +95,5 @@ boost::optional<mapped_region_ptr> mapped_memory_cache::find(std::string const&
 }
 
 }
+
+#endif
diff --git a/src/marker_cache.cpp b/src/marker_cache.cpp
index d550457..024be9c 100644
--- a/src/marker_cache.cpp
+++ b/src/marker_cache.cpp
@@ -34,9 +34,12 @@
 #include <mapnik/util/fs.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/assert.hpp>
 #include <boost/algorithm/string.hpp>
-#include <boost/make_shared.hpp>
+#pragma GCC diagnostic pop
 
 // agg
 #include "agg_rendering_buffer.h"
@@ -46,7 +49,8 @@ namespace mapnik
 {
 
 marker_cache::marker_cache()
-    : known_svg_prefix_("shape://")
+    : known_svg_prefix_("shape://"),
+      known_image_prefix_("image://")
 {
     insert_svg("ellipse",
                "<?xml version='1.0' standalone='no'?>"
@@ -58,6 +62,10 @@ marker_cache::marker_cache()
                "<svg width='100%' height='100%' version='1.1' xmlns='http://www.w3.org/2000/svg'>"
                "<path fill='#0000FF' stroke='black' stroke-width='.5' d='m 31.698405,7.5302648 -8.910967,-6.0263712 0.594993,4.8210971 -18.9822542,0 0,2.4105482 18.9822542,0 -0.594993,4.8210971 z'/>"
                "</svg>");
+    boost::optional<mapnik::image_ptr> bitmap_data = boost::optional<mapnik::image_ptr>(std::make_shared<image_data_32>(4,4));
+    (*bitmap_data)->set(0xff000000);
+    marker_ptr mark = std::make_shared<mapnik::marker>(bitmap_data);
+    marker_cache_.emplace("image://square",mark);
 }
 
 marker_cache::~marker_cache() {}
@@ -65,9 +73,9 @@ marker_cache::~marker_cache() {}
 void marker_cache::clear()
 {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
-    typedef boost::unordered_map<std::string, marker_ptr>::const_iterator iterator_type;
+    using iterator_type = boost::unordered_map<std::string, marker_ptr>::const_iterator;
     iterator_type itr = marker_cache_.begin();
     while(itr != marker_cache_.end())
     {
@@ -82,19 +90,24 @@ void marker_cache::clear()
     }
 }
 
-bool marker_cache::is_uri(std::string const& path)
+bool marker_cache::is_svg_uri(std::string const& path)
 {
     return boost::algorithm::starts_with(path,known_svg_prefix_);
 }
 
+bool marker_cache::is_image_uri(std::string const& path)
+{
+    return boost::algorithm::starts_with(path,known_image_prefix_);
+}
+
 bool marker_cache::insert_svg(std::string const& name, std::string const& svg_string)
 {
     std::string key = known_svg_prefix_ + name;
-    typedef boost::unordered_map<std::string, std::string>::const_iterator iterator_type;
+    using iterator_type = boost::unordered_map<std::string, std::string>::const_iterator;
     iterator_type itr = svg_cache_.find(key);
     if (itr == svg_cache_.end())
     {
-        return svg_cache_.insert(std::make_pair(key,svg_string)).second;
+        return svg_cache_.emplace(key,svg_string).second;
     }
     return false;
 }
@@ -102,9 +115,9 @@ bool marker_cache::insert_svg(std::string const& name, std::string const& svg_st
 bool marker_cache::insert_marker(std::string const& uri, marker_ptr path)
 {
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
-    return marker_cache_.insert(std::make_pair(uri,path)).second;
+    return marker_cache_.emplace(uri,path).second;
 }
 
 boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
@@ -118,9 +131,9 @@ boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
     }
 
 #ifdef MAPNIK_THREADSAFE
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
 #endif
-    typedef boost::unordered_map<std::string, marker_ptr>::const_iterator iterator_type;
+    using iterator_type = boost::unordered_map<std::string, marker_ptr>::const_iterator;
     iterator_type itr = marker_cache_.find(uri);
     if (itr != marker_cache_.end())
     {
@@ -131,7 +144,7 @@ boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
     try
     {
         // if uri references a built-in marker
-        if (is_uri(uri))
+        if (is_svg_uri(uri))
         {
             boost::unordered_map<std::string, std::string>::const_iterator mark_itr = svg_cache_.find(uri);
             if (mark_itr == svg_cache_.end())
@@ -141,7 +154,7 @@ boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
             }
             std::string known_svg_string = mark_itr->second;
             using namespace mapnik::svg;
-            svg_path_ptr marker_path(boost::make_shared<svg_storage_type>());
+            svg_path_ptr marker_path(std::make_shared<svg_storage_type>());
             vertex_stl_adapter<svg_path_storage> stl_storage(marker_path->source());
             svg_path_adapter svg_path(stl_storage);
             svg_converter_type svg(svg_path, marker_path->attributes());
@@ -152,11 +165,11 @@ boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
             svg.bounding_rect(&lox, &loy, &hix, &hiy);
             marker_path->set_bounding_box(lox,loy,hix,hiy);
             marker_path->set_dimensions(svg.width(),svg.height());
-            marker_ptr mark(boost::make_shared<marker>(marker_path));
+            marker_ptr mark(std::make_shared<marker>(marker_path));
             result.reset(mark);
             if (update_cache)
             {
-                marker_cache_.insert(std::make_pair(uri,*result));
+                marker_cache_.emplace(uri,*result);
             }
         }
         // otherwise assume file-based
@@ -170,7 +183,7 @@ boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
             if (is_svg(uri))
             {
                 using namespace mapnik::svg;
-                svg_path_ptr marker_path(boost::make_shared<svg_storage_type>());
+                svg_path_ptr marker_path(std::make_shared<svg_storage_type>());
                 vertex_stl_adapter<svg_path_storage> stl_storage(marker_path->source());
                 svg_path_adapter svg_path(stl_storage);
                 svg_converter_type svg(svg_path, marker_path->attributes());
@@ -181,23 +194,23 @@ boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
                 svg.bounding_rect(&lox, &loy, &hix, &hiy);
                 marker_path->set_bounding_box(lox,loy,hix,hiy);
                 marker_path->set_dimensions(svg.width(),svg.height());
-                marker_ptr mark(boost::make_shared<marker>(marker_path));
+                marker_ptr mark(std::make_shared<marker>(marker_path));
                 result.reset(mark);
                 if (update_cache)
                 {
-                    marker_cache_.insert(std::make_pair(uri,*result));
+                    marker_cache_.emplace(uri,*result);
                 }
             }
             else
             {
                 // TODO - support reading images from string
-                std::auto_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(uri));
+                std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(uri));
                 if (reader.get())
                 {
                     unsigned width = reader->width();
                     unsigned height = reader->height();
                     BOOST_ASSERT(width > 0 && height > 0);
-                    mapnik::image_ptr image(boost::make_shared<mapnik::image_data_32>(width,height));
+                    mapnik::image_ptr image(std::make_shared<mapnik::image_data_32>(width,height));
                     reader->read(0,0,*image);
                     if (!reader->premultiplied_alpha())
                     {
@@ -205,11 +218,11 @@ boost::optional<marker_ptr> marker_cache::find(std::string const& uri,
                         agg::pixfmt_rgba32 pixf(buffer);
                         pixf.premultiply();
                     }
-                    marker_ptr mark(boost::make_shared<marker>(image));
+                    marker_ptr mark(std::make_shared<marker>(image));
                     result.reset(mark);
                     if (update_cache)
                     {
-                        marker_cache_.insert(std::make_pair(uri,*result));
+                        marker_cache_.emplace(uri,*result);
                     }
                 }
                 else
diff --git a/src/marker_helpers.cpp b/src/marker_helpers.cpp
new file mode 100644
index 0000000..e4aeeb4
--- /dev/null
+++ b/src/marker_helpers.cpp
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/marker_helpers.hpp>
+
+namespace mapnik {
+
+void build_ellipse(symbolizer_base const& sym, mapnik::feature_impl & feature, attributes const& vars, svg_storage_type & marker_ellipse, svg::svg_path_adapter & svg_path)
+{
+    double width = 0.0;
+    double height = 0.0;
+    if (has_key(sym,keys::width) && has_key(sym,keys::height))
+    {
+        width = get<double>(sym, keys::width, feature, vars, 0.0);
+        height = get<double>(sym, keys::height, feature, vars, 0.0);
+    }
+    else if (has_key(sym,keys::width))
+    {
+        width = height = get<double>(sym, keys::width, feature, vars, 0.0);
+    }
+    else if (has_key(sym,keys::height))
+    {
+        width = height = get<double>(sym, keys::height, feature, vars, 0.0);
+    }
+    svg::svg_converter_type styled_svg(svg_path, marker_ellipse.attributes());
+    styled_svg.push_attr();
+    styled_svg.begin_path();
+    agg::ellipse c(0, 0, width/2.0, height/2.0);
+    styled_svg.storage().concat_path(c);
+    styled_svg.end_path();
+    styled_svg.pop_attr();
+    double lox,loy,hix,hiy;
+    styled_svg.bounding_rect(&lox, &loy, &hix, &hiy);
+    styled_svg.set_dimensions(width,height);
+    marker_ellipse.set_dimensions(width,height);
+    marker_ellipse.set_bounding_box(lox,loy,hix,hiy);
+}
+
+bool push_explicit_style(svg_attribute_type const& src,
+                         svg_attribute_type & dst,
+                         symbolizer_base const& sym,
+                         feature_impl & feature,
+                         attributes const& vars)
+{
+    auto fill_color = get_optional<color>(sym, keys::fill, feature, vars);
+    auto fill_opacity = get_optional<double>(sym, keys::fill_opacity, feature, vars);
+    auto stroke_color = get_optional<color>(sym, keys::stroke, feature, vars);
+    auto stroke_width = get_optional<double>(sym, keys::stroke_width, feature, vars);
+    auto stroke_opacity = get_optional<double>(sym, keys::stroke_opacity, feature, vars);
+    if (fill_color ||
+        fill_opacity ||
+        stroke_color ||
+        stroke_width ||
+        stroke_opacity)
+    {
+        bool success = false;
+        for(unsigned i = 0; i < src.size(); ++i)
+        {
+            success = true;
+            dst.push_back(src[i]);
+            mapnik::svg::path_attributes & attr = dst.last();
+            if (attr.stroke_flag)
+            {
+                if (stroke_width)
+                {
+                    attr.stroke_width = *stroke_width;
+                }
+                if (stroke_color)
+                {
+                    color const& s_color = *stroke_color;
+                    attr.stroke_color = agg::rgba(s_color.red()/255.0,
+                                                  s_color.green()/255.0,
+                                                  s_color.blue()/255.0,
+                                                  s_color.alpha()/255.0);
+                }
+                if (stroke_opacity)
+                {
+                    attr.stroke_opacity = *stroke_opacity;
+                }
+            }
+            if (attr.fill_flag)
+            {
+                if (fill_color)
+                {
+                    color const& f_color = *fill_color;
+                    attr.fill_color = agg::rgba(f_color.red()/255.0,
+                                                f_color.green()/255.0,
+                                                f_color.blue()/255.0,
+                                                f_color.alpha()/255.0);
+                }
+                if (fill_opacity)
+                {
+                    attr.fill_opacity = *fill_opacity;
+                }
+            }
+        }
+        return success;
+    }
+    return false;
+}
+
+void setup_transform_scaling(agg::trans_affine & tr,
+                             double svg_width,
+                             double svg_height,
+                             mapnik::feature_impl & feature,
+                             attributes const& vars,
+                             symbolizer_base const& sym)
+{
+    double width = get<double>(sym, keys::width, feature, vars, 0.0);
+    double height = get<double>(sym, keys::height, feature, vars, 0.0);
+    if (width > 0 && height > 0)
+    {
+        double sx = width/svg_width;
+        double sy = height/svg_height;
+        tr *= agg::trans_affine_scaling(sx,sy);
+    }
+    else if (width > 0)
+    {
+        double sx = width/svg_width;
+        tr *= agg::trans_affine_scaling(sx);
+    }
+    else if (height > 0)
+    {
+        double sy = height/svg_height;
+        tr *= agg::trans_affine_scaling(sy);
+    }
+}
+
+
+} // end namespace mapnik
diff --git a/src/markers_symbolizer.cpp b/src/markers_symbolizer.cpp
deleted file mode 100644
index 6c48eff..0000000
--- a/src/markers_symbolizer.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/markers_symbolizer.hpp>
-#include <mapnik/value.hpp>
-#include <mapnik/attribute.hpp>
-#include <mapnik/parse_path.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik {
-
-static const char * marker_placement_strings[] = {
-    "point",
-    "interior",
-    "line",
-    ""
-};
-
-IMPLEMENT_ENUM( marker_placement_e, marker_placement_strings )
-
-static const char * marker_multi_policy_strings[] = {
-    "each",
-    "whole",
-    "largest",
-    ""
-};
-
-IMPLEMENT_ENUM( marker_multi_policy_e, marker_multi_policy_strings )
-
-markers_symbolizer::markers_symbolizer()
-    : symbolizer_with_image(parse_path("shape://ellipse")),
-      symbolizer_base(),
-      width_(),
-      height_(),
-      ignore_placement_(false),
-      allow_overlap_(false),
-      spacing_(100.0),
-      max_error_(0.2),
-      marker_p_(MARKER_POINT_PLACEMENT),
-      // TODO: consider defaulting to MARKER_WHOLE_MULTI,
-      //       for backward compatibility with 2.0.0
-      marker_mp_(MARKER_EACH_MULTI) { }
-
-markers_symbolizer::markers_symbolizer(path_expression_ptr const& filename)
-    : symbolizer_with_image(filename),
-      symbolizer_base(),
-      width_(),
-      height_(),
-      ignore_placement_(false),
-      allow_overlap_(false),
-      spacing_(100.0),
-      max_error_(0.2),
-      marker_p_(MARKER_POINT_PLACEMENT),
-      // TODO: consider defaulting to MARKER_WHOLE_MULTI,
-      //       for backward compatibility with 2.0.0
-      marker_mp_(MARKER_EACH_MULTI) { }
-
-markers_symbolizer::markers_symbolizer(markers_symbolizer const& rhs)
-    : symbolizer_with_image(rhs),
-      symbolizer_base(rhs),
-      width_(rhs.width_),
-      height_(rhs.height_),
-      ignore_placement_(rhs.ignore_placement_),
-      allow_overlap_(rhs.allow_overlap_),
-      spacing_(rhs.spacing_),
-      max_error_(rhs.max_error_),
-      fill_(rhs.fill_),
-      fill_opacity_(rhs.fill_opacity_),
-      stroke_(rhs.stroke_),
-      marker_p_(rhs.marker_p_),
-      marker_mp_(rhs.marker_mp_) {}
-
-void markers_symbolizer::set_ignore_placement(bool ignore_placement)
-{
-    ignore_placement_ = ignore_placement;
-}
-
-bool markers_symbolizer::get_ignore_placement() const
-{
-    return ignore_placement_;
-}
-
-void markers_symbolizer::set_allow_overlap(bool overlap)
-{
-    allow_overlap_ = overlap;
-}
-
-bool markers_symbolizer::get_allow_overlap() const
-{
-    return allow_overlap_;
-}
-
-void markers_symbolizer::set_spacing(double spacing)
-{
-    spacing_ = spacing;
-}
-
-double markers_symbolizer::get_spacing() const
-{
-    return spacing_;
-}
-
-void markers_symbolizer::set_max_error(double max_error)
-{
-    max_error_ = max_error;
-}
-
-double markers_symbolizer::get_max_error() const
-{
-    return max_error_;
-}
-
-void markers_symbolizer::set_fill(color const& fill)
-{
-    fill_ = fill;
-}
-
-boost::optional<color> markers_symbolizer::get_fill() const
-{
-    return fill_;
-}
-
-void markers_symbolizer::set_fill_opacity(float opacity)
-{
-    fill_opacity_ = opacity;
-}
-
-boost::optional<float> markers_symbolizer::get_fill_opacity() const
-{
-    return fill_opacity_;
-}
-
-void markers_symbolizer::set_width(expression_ptr const& width)
-{
-    width_ = width;
-}
-
-expression_ptr const& markers_symbolizer::get_width() const
-{
-    return width_;
-}
-
-void markers_symbolizer::set_height(expression_ptr const& height)
-{
-    height_ = height;
-}
-
-expression_ptr const& markers_symbolizer::get_height() const
-{
-    return height_;
-}
-
-boost::optional<stroke> markers_symbolizer::get_stroke() const
-{
-    return stroke_;
-}
-
-void markers_symbolizer::set_stroke(stroke const& stroke)
-{
-    stroke_ = stroke;
-}
-
-void markers_symbolizer::set_marker_placement(marker_placement_e marker_p)
-{
-    marker_p_ = marker_p;
-}
-
-marker_placement_e markers_symbolizer::get_marker_placement() const
-{
-    return marker_p_;
-}
-
-void markers_symbolizer::set_marker_multi_policy(marker_multi_policy_e marker_mp)
-{
-    marker_mp_ = marker_mp;
-}
-
-marker_multi_policy_e markers_symbolizer::get_marker_multi_policy() const
-{
-    return marker_mp_;
-}
-
-}
diff --git a/src/memory.cpp b/src/memory.cpp
index d8671c1..bb45b70 100644
--- a/src/memory.cpp
+++ b/src/memory.cpp
@@ -24,6 +24,8 @@
 #include <mapnik/debug.hpp>
 #include <mapnik/memory.hpp>
 
+#include <cassert>
+
 namespace mapnik
 {
 void* Object::operator new(size_t size)
diff --git a/src/memory_datasource.cpp b/src/memory_datasource.cpp
index 46dbb15..7ffe12b 100644
--- a/src/memory_datasource.cpp
+++ b/src/memory_datasource.cpp
@@ -26,13 +26,17 @@
 #include <mapnik/box2d.hpp>
 #include <mapnik/memory_datasource.hpp>
 #include <mapnik/memory_featureset.hpp>
-
+#include <mapnik/boolean.hpp>
 // boost
-#include <boost/make_shared.hpp>
 
 // stl
 #include <algorithm>
 
+using mapnik::datasource;
+using mapnik::parameters;
+
+DATASOURCE_PLUGIN(mapnik::memory_datasource)
+
 namespace mapnik {
 
 struct accumulate_extent
@@ -42,7 +46,7 @@ struct accumulate_extent
 
     void operator() (feature_ptr feat)
     {
-        for (unsigned i=0;i<feat->num_geometries();++i)
+        for (std::size_t i=0;i<feat->num_geometries();++i)
         {
             geometry_type & geom = feat->get_geometry(i);
             if ( first_ )
@@ -61,11 +65,17 @@ struct accumulate_extent
     bool first_;
 };
 
-memory_datasource::memory_datasource(datasource::datasource_t type, bool bbox_check)
-    : datasource(parameters()),
-      desc_("in-memory datasource","utf-8"),
-      type_(type),
-      bbox_check_(bbox_check) {}
+const char * memory_datasource::name()
+{
+    return "memory";
+}
+
+memory_datasource::memory_datasource(parameters const& params)
+    : datasource(params),
+      desc_(memory_datasource::name(),
+            *params.get<std::string>("encoding","utf-8")),
+      type_(datasource::Vector),
+      bbox_check_(*params.get<boolean_type>("bbox_check", true)) {}
 
 memory_datasource::~memory_datasource() {}
 
@@ -83,7 +93,7 @@ datasource::datasource_t memory_datasource::type() const
 
 featureset_ptr memory_datasource::features(const query& q) const
 {
-    return boost::make_shared<memory_featureset>(q.get_bbox(),*this,bbox_check_);
+    return std::make_shared<memory_featureset>(q.get_bbox(),*this,bbox_check_);
 }
 
 
@@ -92,7 +102,7 @@ featureset_ptr memory_datasource::features_at_point(coord2d const& pt, double to
     box2d<double> box = box2d<double>(pt.x, pt.y, pt.x, pt.y);
     box.pad(tol);
     MAPNIK_LOG_DEBUG(memory_datasource) << "memory_datasource: Box=" << box << ", Point x=" << pt.x << ",y=" << pt.y;
-    return boost::make_shared<memory_featureset>(box,*this);
+    return std::make_shared<memory_featureset>(box,*this);
 }
 
 void memory_datasource::set_envelope(box2d<double> const& box)
diff --git a/src/miniz.c b/src/miniz.c
index 03be47f..c45bb42 100644
--- a/src/miniz.c
+++ b/src/miniz.c
@@ -798,7 +798,7 @@ size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void
 void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out);
 
 // Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time.
-typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser);
+typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, size_t len, void *pUser);
 
 // tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally.
 mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags);
@@ -928,9 +928,9 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64)==8 ? 1 : -1];
 #ifdef _MSC_VER
   #define MZ_FORCEINLINE __forceinline
 #elif defined(__GNUC__)
-  #define MZ_FORCEINLINE __attribute__((__always_inline__))
+  #define MZ_FORCEINLINE inline __attribute__((__always_inline__))
 #else
-  #define MZ_FORCEINLINE
+  #define MZ_FORCEINLINE inline
 #endif
 
 #ifdef __cplusplus
@@ -2704,7 +2704,7 @@ struct tdefl_output_buffer
   mz_bool m_expandable;
 };
 
-static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser)
+static mz_bool tdefl_output_buffer_putter(const void *pBuf, size_t len, void *pUser)
 {
   tdefl_output_buffer *p = (tdefl_output_buffer *)pUser;
   size_t new_size = p->m_size + len;
@@ -2778,7 +2778,7 @@ void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h,
   *pLen_out = out_buf.m_size-41;
   {
     mz_uint8 pnghdr[41]={0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
-      0,0,(mz_uint8)(w>>8),(mz_uint8)w,0,0,(mz_uint8)(h>>8),(mz_uint8)h,8,"\0\0\04\02\06"[num_chans],0,0,0,0,0,0,0,
+      0,0,(mz_uint8)(w>>8),(mz_uint8)w,0,0,(mz_uint8)(h>>8),(mz_uint8)h,8, (mz_uint8)"\0\0\04\02\06"[num_chans],0,0,0,0,0,0,0,
       (mz_uint8)(*pLen_out>>24),(mz_uint8)(*pLen_out>>16),(mz_uint8)(*pLen_out>>8),(mz_uint8)*pLen_out,0x49,0x44,0x41,0x54};
     c=(mz_uint32)mz_crc32(MZ_CRC32_INIT,pnghdr+12,17); for (i=0; i<4; ++i, c<<=8) ((mz_uint8*)(pnghdr+29))[i]=(mz_uint8)(c>>24);
     memcpy(out_buf.m_pBuf, pnghdr, 41);
@@ -4831,4 +4831,4 @@ void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char
   OTHER DEALINGS IN THE SOFTWARE.
 
   For more information, please refer to <http://unlicense.org/>
-*/
\ No newline at end of file
+*/
diff --git a/src/miniz_png.cpp b/src/miniz_png.cpp
index ec445d0..5426fb6 100644
--- a/src/miniz_png.cpp
+++ b/src/miniz_png.cpp
@@ -28,10 +28,11 @@
 
 // miniz
 #define MINIZ_NO_ARCHIVE_APIS
-#define MINIZ_NO_STDIO
 #define MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-#include "miniz.c"
 
+extern "C" {
+#include "miniz.c"
+}
 // zlib
 #include <zlib.h>
 
@@ -44,8 +45,8 @@ namespace mapnik { namespace MiniZ {
 
 PNGWriter::PNGWriter(int level, int strategy)
 {
-    buffer = NULL;
-    compressor = NULL;
+    buffer = nullptr;
+    compressor = nullptr;
 
     if (level == -1)
     {
@@ -55,29 +56,33 @@ PNGWriter::PNGWriter(int level, int strategy)
     {
         throw std::runtime_error("compression level must be between 0 and 10");
     }
-    mz_uint flags = s_tdefl_num_probes[level] | (level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0 | TDEFL_WRITE_ZLIB_HEADER;
+    mz_uint flags = s_tdefl_num_probes[level] | TDEFL_WRITE_ZLIB_HEADER;
+    if (level <= 3)
+    {
+        flags |= TDEFL_GREEDY_PARSING_FLAG;
+    }
     if (strategy == Z_FILTERED) flags |= TDEFL_FILTER_MATCHES;
     else if (strategy == Z_HUFFMAN_ONLY) flags &= ~TDEFL_MAX_PROBES_MASK;
     else if (strategy == Z_RLE) flags |= TDEFL_RLE_MATCHES;
     else if (strategy == Z_FIXED) flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS;
 
     buffer = (tdefl_output_buffer *)MZ_MALLOC(sizeof(tdefl_output_buffer));
-    if (buffer == NULL)
+    if (buffer == nullptr)
     {
         throw std::bad_alloc();
     }
 
-    buffer->m_pBuf = NULL;
+    buffer->m_pBuf = nullptr;
     buffer->m_capacity = 8192;
     buffer->m_expandable = MZ_TRUE;
     buffer->m_pBuf = (mz_uint8 *)MZ_MALLOC(buffer->m_capacity);
-    if (buffer->m_pBuf == NULL)
+    if (buffer->m_pBuf == nullptr)
     {
         throw std::bad_alloc();
     }
 
     compressor = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor));
-    if (compressor == NULL)
+    if (compressor == nullptr)
     {
         throw std::bad_alloc();
     }
@@ -137,12 +142,14 @@ void PNGWriter::finishChunk(size_t start)
 {
     // Write chunk length at the beginning of the chunk.
     size_t payloadLength = buffer->m_size - start - 4 - 4;
-    writeUInt32BE(buffer->m_pBuf + start, payloadLength);
-
+    writeUInt32BE(buffer->m_pBuf + start, static_cast<mz_uint32>(payloadLength));
     // Write CRC32 checksum. Don't include the 4-byte length, but /do/ include
     // the 4-byte chunk name.
     mz_uint32 crc = mz_crc32(MZ_CRC32_INIT, buffer->m_pBuf + start + 4, payloadLength + 4);
-    mz_uint8 checksum[] = { crc >> 24, crc >> 16, crc >> 8, crc };
+    mz_uint8 checksum[] = { static_cast<mz_uint8>(crc >> 24),
+                            static_cast<mz_uint8>(crc >> 16),
+                            static_cast<mz_uint8>(crc >> 8),
+                            static_cast<mz_uint8>(crc) };
     mz_bool status = tdefl_output_buffer_putter(checksum, 4, buffer);
     if (status != MZ_TRUE)
     {
@@ -253,7 +260,7 @@ void PNGWriter::writeIDAT(T const& image)
         }
     }
 
-    status = tdefl_compress_buffer(compressor, NULL, 0, TDEFL_FINISH);
+    status = tdefl_compress_buffer(compressor, nullptr, 0, TDEFL_FINISH);
     if (status != TDEFL_STATUS_DONE)
     {
         throw std::runtime_error("failed to compress image");
@@ -300,7 +307,7 @@ void PNGWriter::writeIDATStripAlpha(T const& image) {
 
     MZ_FREE(scanline);
 
-    status = tdefl_compress_buffer(compressor, NULL, 0, TDEFL_FINISH);
+    status = tdefl_compress_buffer(compressor, nullptr, 0, TDEFL_FINISH);
     if (status != TDEFL_STATUS_DONE) throw std::runtime_error("failed to compress image");
 
     finishChunk(IDAT);
@@ -362,4 +369,3 @@ template void PNGWriter::writeIDATStripAlpha<image_data_32>(image_data_32 const&
 template void PNGWriter::writeIDATStripAlpha<image_view<image_data_32> >(image_view<image_data_32> const& image);
 
 }}
-
diff --git a/src/palette.cpp b/src/palette.cpp
index f857259..2823865 100644
--- a/src/palette.cpp
+++ b/src/palette.cpp
@@ -26,6 +26,7 @@
 // stl
 #include <sstream>
 #include <iomanip>
+#include <iterator>
 
 namespace mapnik
 {
@@ -81,8 +82,8 @@ bool rgba_palette::valid() const
 
 std::string rgba_palette::to_string() const
 {
-    unsigned length = rgb_pal_.size();
-    unsigned alphaLength = alpha_pal_.size();
+    size_t length = rgb_pal_.size();
+    size_t alphaLength = alpha_pal_.size();
     std::ostringstream str("");
     str << "[Palette " << length;
     if (length == 1)
@@ -125,7 +126,7 @@ unsigned char rgba_palette::quantize(unsigned val) const
         // find closest match based on mean of r,g,b,a
         std::vector<rgba>::const_iterator pit =
             std::lower_bound(sorted_pal_.begin(), sorted_pal_.end(), c, rgba::mean_sort_cmp());
-        index = pit - sorted_pal_.begin();
+        index = std::distance(sorted_pal_.begin(),pit);
         if (index == sorted_pal_.size()) index--;
 
         dr = sorted_pal_[index].r - c.r;
diff --git a/src/params.cpp b/src/params.cpp
index a989839..d45f419 100644
--- a/src/params.cpp
+++ b/src/params.cpp
@@ -34,15 +34,13 @@ template boost::optional<std::string> parameters::get(std::string const& key, st
 template boost::optional<value_double> parameters::get(std::string const& key) const;
 template boost::optional<value_double> parameters::get(std::string const& key, value_double const& default_opt_value) const;
 
-template boost::optional<int> parameters::get(std::string const& key) const;
-template boost::optional<int> parameters::get(std::string const& key, int const& default_opt_value) const;
+template boost::optional<boolean_type> parameters::get(std::string const& key) const;
+template boost::optional<boolean_type> parameters::get(std::string const& key, boolean_type const& default_opt_value) const;
 
-template boost::optional<mapnik::boolean> parameters::get(std::string const& key) const;
-template boost::optional<mapnik::boolean> parameters::get(std::string const& key, mapnik::boolean const& default_opt_value) const;
+template boost::optional<value_null> parameters::get(std::string const& key) const;
+template boost::optional<value_null> parameters::get(std::string const& key, value_null const& default_opt_value) const;
 
-#ifdef BIGINT
 template boost::optional<value_integer> parameters::get(std::string const& key) const;
 template boost::optional<value_integer> parameters::get(std::string const& key, value_integer const& default_opt_value) const;
-#endif
 
 }
diff --git a/src/parse_path.cpp b/src/parse_path.cpp
index 90265b9..643d48e 100644
--- a/src/parse_path.cpp
+++ b/src/parse_path.cpp
@@ -22,40 +22,28 @@
 
 #include <mapnik/parse_path.hpp>
 #include <mapnik/path_expression_grammar.hpp>
-
+#include <mapnik/path_expression_grammar_impl.hpp>
 #include <mapnik/config.hpp>
 #include <mapnik/attribute.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/value.hpp>
 
-// boost
-#include <boost/variant.hpp>
-#include <boost/foreach.hpp>
-#include <boost/make_shared.hpp>
-
 // stl
 #include <stdexcept>
 
-
 namespace mapnik {
 
 path_expression_ptr parse_path(std::string const& str)
 {
-    path_expression_grammar<std::string::const_iterator> g;
-    return parse_path(str,g);
-}
-
-path_expression_ptr parse_path(std::string const& str,
-                               path_expression_grammar<std::string::const_iterator> const& g)
-{
-    path_expression path;  
-    
+    static const path_expression_grammar<std::string::const_iterator> g;
+    auto path = std::make_shared<path_expression>();
+    boost::spirit::standard_wide::space_type space;
     std::string::const_iterator itr = str.begin();
     std::string::const_iterator end = str.end();
-    bool r = qi::phrase_parse(itr, end, g, boost::spirit::standard_wide::space, path);
-    if (r  && itr == end)
+    bool r = qi::phrase_parse(itr, end, g, space, *path);
+    if (r && itr == end)
     {
-        return boost::make_shared<path_expression>(path); //path;
+        return path;
     }
     else
     {
@@ -63,8 +51,9 @@ path_expression_ptr parse_path(std::string const& str,
     }
 }
 
-namespace path_processor_detail {
-    struct path_visitor_ : boost::static_visitor<void>
+namespace path_processor_detail
+{
+    struct path_visitor_ : util::static_visitor<void>
     {
         path_visitor_ (std::string & filename, feature_impl const& f)
             : filename_(filename),
@@ -86,7 +75,7 @@ namespace path_processor_detail {
         feature_impl const& feature_;
     };
 
-    struct to_string_ : boost::static_visitor<void>
+    struct to_string_ : util::static_visitor<void>
     {
         to_string_ (std::string & str)
             : str_(str) {}
@@ -106,14 +95,13 @@ namespace path_processor_detail {
         std::string & str_;
     };
 
-    struct collect_ : boost::static_visitor<void>
+    struct collect_ : util::static_visitor<void>
     {
         collect_ (std::set<std::string> & cont)
             : cont_(cont) {}
 
-        void operator() (std::string const& token) const
+        void operator() (std::string const&) const
         {
-            boost::ignore_unused_variable_warning(token);
         }
 
         void operator() (attribute const& attr) const
@@ -129,8 +117,10 @@ std::string path_processor::evaluate(path_expression const& path,feature_impl co
 {
     std::string out;
     path_processor_detail::path_visitor_ eval(out,f);
-    BOOST_FOREACH( mapnik::path_component const& token, path)
-        boost::apply_visitor(eval,token);
+    for ( mapnik::path_component const& token : path)
+    {
+        util::apply_visitor(std::ref(eval),token);
+    }
     return out;
 }
 
@@ -138,16 +128,20 @@ std::string path_processor::to_string(path_expression const& path)
 {
     std::string str;
     path_processor_detail::to_string_ visitor(str);
-    BOOST_FOREACH( mapnik::path_component const& token, path)
-        boost::apply_visitor(visitor,token);
+    for ( mapnik::path_component const& token : path)
+    {
+        util::apply_visitor(std::ref(visitor),token);
+    }
     return str;
 }
 
 void path_processor::collect_attributes(path_expression const& path, std::set<std::string>& names)
 {
     path_processor_detail::collect_ visitor(names);
-    BOOST_FOREACH( mapnik::path_component const& token, path)
-        boost::apply_visitor(visitor,token);
+    for ( mapnik::path_component const& token : path)
+    {
+        util::apply_visitor(std::ref(visitor),token);
+    }
 }
 
 
diff --git a/src/parse_transform.cpp b/src/parse_transform.cpp
index b837f90..9ea1537 100644
--- a/src/parse_transform.cpp
+++ b/src/parse_transform.cpp
@@ -22,46 +22,29 @@
 
 #include <mapnik/parse_transform.hpp>
 #include <mapnik/transform_expression_grammar.hpp>
-#include <mapnik/transform_processor.hpp>
-#include <mapnik/debug.hpp>
 
-#include <boost/make_shared.hpp>
+// stl
+#include <string>
+#include <stdexcept>
 
 namespace mapnik {
 
-transform_list_ptr parse_transform(std::string const& str)
-{
-    return parse_transform(str, "utf-8");
-}
-
 transform_list_ptr parse_transform(std::string const& str, std::string const& encoding)
 {
-    transform_list_ptr tl = boost::make_shared<transform_list>();
-    transcoder tc(encoding);
-    expression_grammar<std::string::const_iterator> ge(tc);
-    transform_expression_grammar_string gte(ge);
-
-    if (!parse_transform(*tl, str, gte))
+    static const transform_expression_grammar<std::string::const_iterator> g;
+    transform_list_ptr tl = std::make_shared<transform_list>();
+    std::string::const_iterator itr = str.begin();
+    std::string::const_iterator end = str.end();
+    bool r = qi::phrase_parse(itr, end, g, space_type(), *tl);
+    if (r && itr == end)
+    {
+        return tl;
+    }
+    else
     {
-        tl.reset();
+        throw std::runtime_error("Failed to parse transform: \"" + str + "\"");
     }
-    return tl;
 }
 
-bool parse_transform(transform_list& transform,
-                     std::string const& str,
-                     transform_expression_grammar_string const& g)
-{
-    std::string::const_iterator itr = str.begin();
-    std::string::const_iterator end = str.end();
-    bool r = qi::phrase_parse(itr, end, g, space_type(), transform);
-
-    #ifdef MAPNIK_LOG
-    MAPNIK_LOG_DEBUG(load_map) << "map_parser: Parsed transform [ "
-        << transform_processor_type::to_string(transform) << " ]";
-    #endif
-
-    return (r && itr==end);
-}
 
 } // namespace mapnik
diff --git a/src/path_expression_grammar.cpp b/src/path_expression_grammar.cpp
deleted file mode 100644
index 048e5bf..0000000
--- a/src/path_expression_grammar.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/path_expression_grammar.hpp>
-#include <mapnik/attribute.hpp>
-
-// boost
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_object.hpp>
-#include <boost/spirit/include/phoenix_stl.hpp>
-
-namespace mapnik
-{
-
-template <typename Iterator>
-path_expression_grammar<Iterator>::path_expression_grammar()
-    : path_expression_grammar::base_type(expr)
-{
-    using boost::phoenix::construct;
-    using standard_wide::char_;
-    using qi::_1;
-    using qi::_val;
-    using qi::lit;
-    using qi::lexeme;
-    using phoenix::push_back;
-    
-    expr =
-        * (
-            str [ push_back(_val, _1)]
-            |
-            ( '[' >> attr [ push_back(_val, construct<mapnik::attribute>( _1 )) ] >> ']')
-            )
-        ;
-    
-    attr %= +(char_ - ']');
-    str  %= lexeme[+(char_ -'[')];
-}
-
-template struct mapnik::path_expression_grammar<std::string::const_iterator>;
-
-}
diff --git a/src/placement_finder.cpp b/src/placement_finder.cpp
deleted file mode 100644
index 0f7a390..0000000
--- a/src/placement_finder.cpp
+++ /dev/null
@@ -1,1059 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-//mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/placement_finder.hpp>
-#include <mapnik/geometry.hpp>
-#include <mapnik/text_path.hpp>
-#include <mapnik/fastmath.hpp>
-#include <mapnik/text_placements/base.hpp>
-
-// agg
-#include "agg_path_length.h"
-
-// boost
-#include <boost/shared_ptr.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/foreach.hpp>
-
-//stl
-#include <string>
-#include <vector>
-#include <cmath>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-namespace mapnik
-{
-
-template<typename T>
-std::pair<double, double> get_position_at_distance(double target_distance, T & shape_path)
-{
-    double x1 = 0.0;
-    double y1 = 0.0;
-    double x2 = 0.0;
-    double y2 = 0.0;
-    double distance = 0.0;
-    bool first = true;
-    unsigned cmd;
-    double x = 0.0;
-    double y = 0.0;
-    shape_path.rewind(0);
-    while (!agg::is_stop(cmd = shape_path.vertex(&x2,&y2)))
-    {
-        if (first || agg::is_move_to(cmd))
-        {
-            first = false;
-        }
-        else
-        {
-            double dx = x2-x1;
-            double dy = y2-y1;
-
-            double segment_length = std::sqrt(dx*dx + dy*dy);
-            distance +=segment_length;
-
-            if (distance > target_distance)
-            {
-                x = x2 - dx * (distance - target_distance)/segment_length;
-                y = y2 - dy * (distance - target_distance)/segment_length;
-                break;
-            }
-        }
-        x1 = x2;
-        y1 = y2;
-    }
-    return std::pair<double, double>(x, y);
-}
-
-template<typename T>
-double get_total_distance(T & shape_path)
-{
-    return agg::path_length(shape_path);
-}
-
-template <typename DetectorT>
-placement_finder<DetectorT>::placement_finder(feature_impl const& feature,
-                                              text_placement_info const& placement_info,
-                                              string_info const& info,
-                                              DetectorT & detector,
-                                              box2d<double> const& extent)
-    : detector_(detector),
-      dimensions_(extent),
-      info_(info),
-      p(placement_info.properties),
-      pi(placement_info),
-      string_width_(0),
-      string_height_(0),
-      first_line_space_(0),
-      valign_(V_AUTO),
-      halign_(H_AUTO),
-      line_breaks_(),
-      line_sizes_(),
-      collect_extents_(false)
-{
-    init_string_size();
-    init_alignment();
-}
-
-template <typename DetectorT>
-template <typename T>
-void placement_finder<DetectorT>::find_point_placements(T & shape_path)
-{
-    unsigned cmd;
-    double new_x = 0.0;
-    double new_y = 0.0;
-    double old_x = 0.0;
-    double old_y = 0.0;
-    bool first = true;
-
-    double total_distance = get_total_distance<T>(shape_path);
-    shape_path.rewind(0);
-
-    if (total_distance == 0) //Point data, not a line
-    {
-        double x, y;
-        shape_path.vertex(&x,&y);
-        find_point_placement(x, y);
-        return;
-    }
-
-    int num_labels = 1;
-    if (p.label_spacing > 0)
-        num_labels = static_cast<int> (floor(total_distance / pi.get_actual_label_spacing()));
-
-    if (p.force_odd_labels && num_labels % 2 == 0)
-        num_labels--;
-    if (num_labels <= 0)
-        num_labels = 1;
-
-    double distance = 0.0; // distance from last label
-    double spacing = total_distance / num_labels;
-    double target_distance = spacing / 2; // first label should be placed at half the spacing
-
-    while (!agg::is_stop(cmd = shape_path.vertex(&new_x,&new_y))) //For each node in the shape
-    {
-
-        if (first || agg::is_move_to(cmd)) //Don't do any processing if it is the first node
-        {
-            first = false;
-        }
-        else
-        {
-            //Add the length of this segment to the total we have saved up
-            double segment_length = std::sqrt(std::pow(old_x-new_x,2) + std::pow(old_y-new_y,2)); //Pythagoras
-            distance += segment_length;
-
-            //While we have enough distance to place text in
-            while (distance > target_distance)
-            {
-                //Try place at the specified place
-                double new_weight = (segment_length - (distance - target_distance))/segment_length;
-                find_point_placement(old_x + (new_x-old_x)*new_weight, old_y + (new_y-old_y)*new_weight);
-
-                distance -= target_distance; //Consume the spacing gap we have used up
-                target_distance = spacing; //Need to reset the target_distance as it is spacing/2 for the first label.
-            }
-        }
-
-        old_x = new_x;
-        old_y = new_y;
-    }
-
-}
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::init_string_size()
-{
-    // Get total string size
-    if (!info_.num_characters()) return; //At least one character is required
-    for (unsigned i = 0; i < info_.num_characters(); i++)
-    {
-        char_info const& ci = info_.at(i);
-        if (!ci.width || !ci.line_height) continue; //Skip empty chars (add no character_spacing for them)
-        string_width_ += ci.width + ci.format->character_spacing;
-        string_height_ = std::max(string_height_, ci.line_height+ci.format->line_spacing);
-        first_line_space_ = std::max(first_line_space_, ci.line_height-ci.avg_height);
-    }
-    string_width_ -= info_.at(info_.num_characters()-1).format->character_spacing; //Remove last space
-    string_height_ -= first_line_space_; //First line is a bit smaller
-}
-
-
-
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::find_line_breaks()
-{
-    if (!line_sizes_.empty()) return;
-    bool first_line = true;
-    // check if we need to wrap the string
-    double wrap_at = string_width_ + 1.0;
-    if (p.wrap_width && string_width_ > p.wrap_width)
-    {
-        if (p.text_ratio)
-        {
-            for (double i = 1.0; ((wrap_at = string_width_/i)/(string_height_*i)) > p.text_ratio && (string_width_/i) > p.wrap_width; i += 1.0) ;
-        }
-        else
-        {
-            wrap_at = p.wrap_width;
-        }
-    }
-
-    // work out where our line breaks need to be and the resultant width to the 'wrapped' string
-    if ((wrap_at < string_width_) || info_.has_line_breaks())
-    {
-        first_line_space_ = 0.0;
-        int last_wrap_char_pos = 0; //Position of last char where wrapping is possible
-        double last_char_spacing = 0.0;
-        double last_wrap_char_width = 0.0; //Include char_spacing before and after
-        string_width_ = 0.0;
-        string_height_ = 0.0;
-        double line_width = 0.0;
-        double line_height = 0.0; //Height of tallest char in line
-        double word_width = 0.0; //Current unfinished word width
-        double word_height = 0.0;
-        //line_width and word_width include char width + spacing, but not the spacing after the last char
-
-        for (unsigned int ii = 0; ii < info_.num_characters(); ii++)
-        {
-            char_info const& ci = info_.at(ii);
-            unsigned c = ci.c;
-
-            if ((c == ci.format->wrap_char) || (c == '\n'))
-            {
-                last_wrap_char_pos = ii;
-                //No wrap at previous position
-                line_width += word_width + last_wrap_char_width;
-                line_height = std::max(line_height, word_height);
-                last_wrap_char_width = last_char_spacing + ci.width + ci.format->character_spacing;
-                last_char_spacing = 0.0; //Current one is included in last_wrap_char_width
-                word_width = 0.0;
-                word_height = 0.0;
-            } else {
-                //No wrap char
-                word_width += last_char_spacing + ci.width;
-                last_char_spacing = ci.format->character_spacing;
-                word_height = std::max(word_height, ci.line_height + ci.format->line_spacing);
-                //TODO: I think this calculation could be wrong if height changes for the first word in the second line
-                if (first_line) first_line_space_ = std::max(first_line_space_, ci.line_height-ci.avg_height);
-            }
-
-            // wrap text at first wrap_char after (default) the wrap width or immediately before the current word
-            if ((c == '\n') ||
-                (line_width > 0 &&
-                 ((line_width > wrap_at && !ci.format->wrap_before) ||
-                  ((line_width + last_wrap_char_width + word_width) > wrap_at && ci.format->wrap_before)) )
-                )
-            {
-                add_line(line_width, line_height, first_line);
-                line_breaks_.push_back(last_wrap_char_pos);
-                line_width = 0.0;
-                line_height = 0.0;
-                last_wrap_char_width = 0; //Wrap char supressed
-                first_line = false;
-            }
-        }
-        line_width += last_wrap_char_width + word_width;
-        line_height = std::max(line_height, word_height);
-        add_line(line_width, line_height, first_line);
-    } else {
-        //No linebreaks
-        line_sizes_.push_back(std::make_pair(string_width_, string_height_));
-    }
-    line_breaks_.push_back(info_.num_characters());
-}
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::add_line(double width, double height, bool first_line)
-{
-    if (first_line) height -= first_line_space_;
-    string_width_ = std::max(string_width_, width); //Total width is the longest line
-    string_height_ += height;
-    line_sizes_.push_back(std::make_pair(width, height));
-}
-
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::init_alignment()
-{
-    valign_ = p.valign;
-    if (valign_ == V_AUTO)
-    {
-        if (p.displacement.second > 0.0)
-        {
-            valign_ = V_BOTTOM;
-        } else if (p.displacement.second < 0.0)
-        {
-            valign_ = V_TOP;
-        } else
-        {
-            valign_ = V_MIDDLE;
-        }
-    }
-
-    halign_ = p.halign;
-    if (halign_ == H_AUTO)
-    {
-        if (p.displacement.first > 0.0)
-        {
-            halign_ = H_RIGHT;
-        } else if (p.displacement.first < 0.0)
-        {
-            halign_ = H_LEFT;
-        } else
-        {
-            halign_ = H_MIDDLE;
-        }
-    }
-
-    jalign_ = p.jalign;
-    if (jalign_ == J_AUTO)
-    {
-        if (p.displacement.first > 0.0)
-        {
-            jalign_ = J_LEFT;
-        } else if (p.displacement.first < 0.0)
-        {
-            jalign_ = J_RIGHT;
-        } else {
-            jalign_ = J_MIDDLE;
-        }
-    }
-}
-
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::adjust_position(text_path *current_placement)
-{
-    // if needed, adjust for desired vertical alignment
-    if (valign_ == V_TOP)
-    {
-        current_placement->center.y -= 0.5 * string_height_;  // move center up by 1/2 the total height
-    } else if (valign_ == V_BOTTOM)
-    {
-        current_placement->center.y += 0.5 * string_height_;  // move center down by the 1/2 the total height
-    }
-
-    // set horizontal position to middle of text
-    if (halign_ == H_LEFT)
-    {
-        current_placement->center.x -= 0.5 * string_width_;  // move center left by 1/2 the string width
-    } else if (halign_ == H_RIGHT)
-    {
-        current_placement->center.x += 0.5 * string_width_;  // move center right by 1/2 the string width
-    }
-
-    // adjust text envelope position by user's x-y displacement (dx, dy)
-    current_placement->center.x += pi.get_scale_factor() * p.displacement.first;
-    current_placement->center.y += pi.get_scale_factor() * p.displacement.second;
-
-}
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::find_point_placement(double label_x,
-                                                       double label_y,
-                                                       double angle)
-{
-    find_line_breaks();
-
-    double rad = M_PI * angle/180.0;
-    double cosa = std::cos(rad);
-    double sina = std::sin(rad);
-
-    double x, y;
-    std::auto_ptr<text_path> current_placement(new text_path(label_x, label_y));
-
-    adjust_position(current_placement.get());
-
-    // presets for first line
-    unsigned int line_number = 0;
-    unsigned int index_to_wrap_at = line_breaks_[0];
-    double line_width = line_sizes_[0].first;
-    double line_height = line_sizes_[0].second;
-
-    /* IMPORTANT NOTE:
-       x and y are relative to the center of the text
-       coordinate system:
-       x: grows from left to right
-       y: grows from bottom to top (opposite of normal computer graphics)
-    */
-
-    // set for upper left corner of text envelope for the first line, bottom left of first character
-    y = string_height_ / 2.0 - line_height;
-    // RTL text is converted to a mirrored representation in get_string_info()
-    // so we have to fix line break order here
-    if (info_.get_rtl()) y = -y;
-
-    // adjust for desired justification
-    if (jalign_ == J_LEFT)
-        x = -(string_width_ / 2.0);
-    else if (jalign_ == J_RIGHT)
-        x = (string_width_ / 2.0) - line_width;
-    else /* J_MIDDLE */
-        x = -(line_width / 2.0);
-
-    // save each character rendering position and build envelope as go thru loop
-    std::queue< box2d<double> > c_envelopes;
-
-    for (unsigned i = 0; i < info_.num_characters(); i++)
-    {
-        char_info const& ci = info_.at(i);
-
-        double cwidth = ci.width + ci.format->character_spacing;
-
-        if (i == index_to_wrap_at)
-        {
-            index_to_wrap_at = line_breaks_[++line_number];
-            line_width = line_sizes_[line_number].first;
-            line_height= line_sizes_[line_number].second;
-
-            if (info_.get_rtl())
-            {
-                y += line_height;
-            } else
-            {
-                y -= line_height;  // move position down to line start
-            }
-
-            // reset to begining of line position
-            if (jalign_ == J_LEFT)
-                x = -(string_width_ / 2.0);
-            else if (jalign_ == J_RIGHT)
-                x = (string_width_ / 2.0) - line_width;
-            else
-                x = -(line_width / 2.0);
-            continue;
-        }
-        else
-        {
-            // place the character relative to the center of the string envelope
-            double dx = x * cosa - y*sina;
-            double dy = x * sina + y*cosa;
-
-            current_placement->add_node(&ci, dx, dy, rad);
-
-            // compute the Bounding Box for each character and test for:
-            // overlap, minimum distance or edge avoidance - exit if condition occurs
-            box2d<double> e;
-            /*x axis: left to right, y axis: top to bottom (negative values higher)*/
-            e.init(current_placement->center.x + dx,                    // Bottom Left
-                   current_placement->center.y - dy - ci.ymin,          // ymin usually <0
-                   current_placement->center.x + dx + ci.width,         // Top Right
-                   current_placement->center.y - dy - ci.ymax);
-
-            // if there is an overlap with existing envelopes, then exit - no placement
-
-            if (!detector_.extent().intersects(e) ||
-                (!p.allow_overlap &&
-                 !detector_.has_point_placement(e, pi.get_actual_minimum_distance())))
-            {
-                return;
-            }
-
-            // if avoid_edges test dimensions contains e
-            if (p.avoid_edges && !dimensions_.contains(e))
-            {
-                return;
-            }
-
-            if (p.minimum_padding > 0)
-            {
-                box2d<double> epad = e;
-                epad.pad(pi.get_actual_minimum_padding());
-                if (!dimensions_.contains(epad))
-                {
-                    return;
-                }
-            }
-
-
-            c_envelopes.push(e);  // add character's envelope to temp storage
-        }
-        x += cwidth;  // move position to next character
-    }
-
-    // check the placement of any additional envelopes
-    if (!p.allow_overlap && !additional_boxes_.empty())
-    {
-        BOOST_FOREACH(box2d<double> const& box, additional_boxes_)
-        {
-            box2d<double> pt(box.minx() + current_placement->center.x,
-                             box.miny() + current_placement->center.y,
-                             box.maxx() + current_placement->center.x,
-                             box.maxy() + current_placement->center.y);
-
-            // abort the whole placement if the additional envelopes can't be placed.
-            if (!detector_.has_point_placement(pt, p.minimum_distance)) return;
-
-            c_envelopes.push(pt);
-        }
-    }
-
-    // since there was no early exit, add the character envelopes to the placements' envelopes
-    while (!c_envelopes.empty())
-    {
-        envelopes_.push(c_envelopes.front());
-        c_envelopes.pop();
-    }
-
-    placements_.push_back(current_placement.release());
-}
-
-
-template <typename DetectorT>
-template <typename PathT>
-void placement_finder<DetectorT>::find_line_placements(PathT & shape_path)
-{
-#ifdef MAPNIK_LOG
-    if (! line_sizes_.empty())
-    {
-        MAPNIK_LOG_WARN(placement_finder) << "Internal error. Text contains line breaks, but line placement is used. Please file a bug report!";
-    }
-#endif
-
-    unsigned cmd;
-    double new_x = 0.0;
-    double new_y = 0.0;
-    double old_x = 0.0;
-    double old_y = 0.0;
-    bool first = true;
-
-    //Pre-Cache all the path_positions and path_distances
-    //This stops the PathT from having to do multiple re-projections if we need to reposition ourself
-    // and lets us know how many points are in the shape.
-    std::vector<vertex2d> path_positions;
-    std::vector<double> path_distances; // distance from node x-1 to node x
-    double total_distance = 0;
-
-    shape_path.rewind(0);
-    while (!agg::is_stop(cmd = shape_path.vertex(&new_x,&new_y))) //For each node in the shape
-    {
-        if (!first && agg::is_line_to(cmd))
-        {
-            double dx = old_x - new_x;
-            double dy = old_y - new_y;
-            double distance = std::sqrt(dx*dx + dy*dy);
-            total_distance += distance;
-            path_distances.push_back(distance);
-        }
-        else
-        {
-            path_distances.push_back(0);
-        }
-        first = false;
-        path_positions.push_back(vertex2d(new_x, new_y, cmd));
-        old_x = new_x;
-        old_y = new_y;
-    }
-    //Now path_positions is full and total_distance is correct
-    //shape_path shouldn't be used from here
-
-    // Ensure lines have a minimum length.
-    if (total_distance < p.minimum_path_length)
-        return;
-
-    double distance = 0.0;
-
-    double displacement = p.displacement.second; // displace by dy
-
-    //Calculate a target_distance that will place the labels centered evenly rather than offset from the start of the linestring
-    if (total_distance < string_width_) //Can't place any strings
-        return;
-
-    //If there is no spacing then just do one label, otherwise calculate how many there should be
-    int num_labels = 1;
-    if (p.label_spacing > 0)
-        num_labels = static_cast<int>(floor(total_distance / (pi.get_actual_label_spacing() + string_width_)));
-
-    if (p.force_odd_labels && (num_labels % 2 == 0))
-        num_labels--;
-    if (num_labels <= 0)
-        num_labels = 1;
-
-    //Now we know how many labels we are going to place, calculate the spacing so that they will get placed evenly
-    double spacing = total_distance / num_labels;
-    double target_distance = (spacing - string_width_) / 2; // first label should be placed at half the spacing
-
-    //Calculate or read out the tolerance
-    double tolerance_delta, tolerance;
-    if (p.label_position_tolerance > 0)
-    {
-        tolerance = p.label_position_tolerance;
-        tolerance_delta = std::max ( 1.0, p.label_position_tolerance/100.0 );
-    }
-    else
-    {
-        tolerance = spacing/2.0;
-        tolerance_delta = std::max ( 1.0, spacing/100.0 );
-    }
-
-
-    first = true;
-    for (unsigned index = 0; index < path_positions.size(); index++) //For each node in the shape
-    {
-        cmd = path_positions[index].cmd;
-        new_x = path_positions[index].x;
-        new_y = path_positions[index].y;
-
-        if (first || agg::is_move_to(cmd)) //Don't do any processing if it is the first node
-        {
-            first = false;
-        }
-        else
-        {
-            //Add the length of this segment to the total we have saved up
-            double segment_length = path_distances[index];
-            distance += segment_length;
-
-            //While we have enough distance to place text in
-            while (distance > target_distance)
-            {
-                for (double diff = 0; diff < tolerance; diff += tolerance_delta)
-                {
-                    for(int dir = -1; dir < 2; dir+=2) //-1, +1
-                    {
-                        //Record details for the start of the string placement
-                        int orientation = 0;
-                        std::auto_ptr<text_path> current_placement = get_placement_offset(path_positions, path_distances, orientation, index, segment_length - (distance - target_distance) + (diff*dir));
-
-                        //We were unable to place here
-                        if (current_placement.get() == NULL)
-                            continue;
-
-                        //Apply displacement
-                        //NOTE: The text is centered on the line in get_placement_offset, so we are offsetting from there
-                        if (displacement != 0)
-                        {
-                            //Average the angle of all characters and then offset them all by that angle
-                            double anglesum = 0;
-                            for (unsigned i = 0; i < current_placement->nodes_.size(); i++)
-                            {
-                                double angle = current_placement->nodes_[i].angle;
-                                //Normalize angle in range -PI ... PI
-                                while (angle > M_PI) {
-                                    angle -= 2*M_PI;
-                                }
-                                anglesum += angle;
-                            }
-                            anglesum /= current_placement->nodes_.size(); //Now it is angle average
-                            double cosa = orientation * std::cos(anglesum);
-                            double sina = orientation * std::sin(anglesum);
-
-                            //Offset all the characters by this angle
-                            for (unsigned i = 0; i < current_placement->nodes_.size(); i++)
-                            {
-                                current_placement->nodes_[i].pos.x -=
-                                    pi.get_scale_factor() * displacement * sina;
-                                current_placement->nodes_[i].pos.y +=
-                                    pi.get_scale_factor() * displacement * cosa;
-                            }
-                        }
-
-                        bool status = test_placement(current_placement, orientation);
-
-                        if (status) //We have successfully placed one
-                        {
-                            placements_.push_back(current_placement.release());
-                            update_detector();
-
-                            //Totally break out of the loops
-                            diff = tolerance;
-                            break;
-                        }
-                        else
-                        {
-                            //If we've failed to place, remove all the envelopes we've added up
-                            while (!envelopes_.empty())
-                                envelopes_.pop();
-                        }
-
-                        //Don't need to loop twice when diff = 0
-                        if (diff == 0)
-                            break;
-                    }
-                }
-
-                distance -= target_distance; //Consume the spacing gap we have used up
-                target_distance = spacing; //Need to reset the target_distance as it is spacing/2 for the first label.
-            }
-        }
-
-        old_x = new_x;
-        old_y = new_y;
-    }
-}
-
-template <typename DetectorT>
-std::auto_ptr<text_path> placement_finder<DetectorT>::get_placement_offset(std::vector<vertex2d> const& path_positions,
-                                                                           std::vector<double> const& path_distances,
-                                                                           int & orientation,
-                                                                           unsigned index,
-                                                                           double distance)
-{
-    //Check that the given distance is on the given index and find the correct index and distance if not
-    while (distance < 0 && index > 1)
-    {
-        index--;
-        distance += path_distances[index];
-    }
-    if (index <= 1 && distance < 0) //We've gone off the start, fail out
-        return std::auto_ptr<text_path>(NULL);
-
-    //Same thing, checking if we go off the end
-    while (index < path_distances.size() && distance > path_distances[index])
-    {
-        distance -= path_distances[index];
-        index++;
-    }
-    if (index >= path_distances.size())
-        return std::auto_ptr<text_path>(NULL);
-
-    //Keep track of the initial index,distance incase we need to re-call get_placement_offset
-    const unsigned initial_index = index;
-    const double initial_distance = distance;
-
-    double old_x = path_positions[index-1].x;
-    double old_y = path_positions[index-1].y;
-
-    double new_x = path_positions[index].x;
-    double new_y = path_positions[index].y;
-
-    double dx = new_x - old_x;
-    double dy = new_y - old_y;
-
-    double segment_length = path_distances[index];
-    if (segment_length == 0) {
-        // Not allowed to place across on 0 length segments or discontinuities
-        return std::auto_ptr<text_path>(NULL);
-    }
-
-    std::auto_ptr<text_path> current_placement(
-        new text_path((old_x + dx*distance/segment_length),
-                      (old_y + dy*distance/segment_length)
-            )
-        );
-
-    double angle = atan2(-dy, dx);
-
-    bool orientation_forced = (orientation != 0); // Whether the orientation was set by the caller
-    if (!orientation_forced)
-        orientation = (angle > 0.55*M_PI || angle < -0.45*M_PI) ? -1 : 1;
-
-    unsigned upside_down_char_count = 0; //Count of characters that are placed upside down.
-
-    for (unsigned i = 0; i < info_.num_characters(); ++i)
-    {
-        // grab the next character according to the orientation
-        char_info const &ci = orientation > 0 ? info_.at(i) : info_.at(info_.num_characters() - i - 1);
-        double cwidth = ci.width + ci.format->character_spacing;
-
-        double last_character_angle = angle;
-
-        //Coordinates this character will start at
-        if (segment_length == 0) {
-            // Not allowed to place across on 0 length segments or discontinuities
-            return std::auto_ptr<text_path>(NULL);
-        }
-        double start_x = old_x + dx*distance/segment_length;
-        double start_y = old_y + dy*distance/segment_length;
-        //Coordinates this character ends at, calculated below
-        double end_x = 0;
-        double end_y = 0;
-
-        if (segment_length - distance  >= cwidth)
-        {
-            //if the distance remaining in this segment is enough, we just go further along the segment
-            distance += cwidth;
-
-            end_x = old_x + dx*distance/segment_length;
-            end_y = old_y + dy*distance/segment_length;
-        }
-        else
-        {
-            //If there isn't enough distance left on this segment
-            // then we need to search until we find the line segment that ends further than ci.width away
-            do
-            {
-                old_x = new_x;
-                old_y = new_y;
-                index++;
-                if (index >= path_positions.size()) //Bail out if we run off the end of the shape
-                {
-                    //MAPNIK_LOG_ERROR(placement_finder) << "FAIL: Out of space";
-                    return std::auto_ptr<text_path>(NULL);
-                }
-                new_x = path_positions[index].x;
-                new_y = path_positions[index].y;
-                dx = new_x - old_x;
-                dy = new_y - old_y;
-
-                segment_length = path_distances[index];
-            }
-            while (std::sqrt(std::pow(start_x - new_x, 2) + std::pow(start_y - new_y, 2)) < cwidth); //Distance from start_ to new_
-
-            //Calculate the position to place the end of the character on
-            find_line_circle_intersection(
-                start_x, start_y, cwidth,
-                old_x, old_y, new_x, new_y,
-                end_x, end_y); //results are stored in end_x, end_y
-
-            //Need to calculate distance on the new segment
-            distance = std::sqrt(std::pow(old_x - end_x, 2) + std::pow(old_y - end_y, 2));
-        }
-
-        //Calculate angle from the start of the character to the end based on start_/end_ position
-        angle = fast_atan2(start_y-end_y, end_x-start_x);
-
-        //Test last_character_angle vs angle
-        // since our rendering angle has changed then check against our
-        // max allowable angle change.
-        double angle_delta = last_character_angle - angle;
-        // normalise between -180 and 180
-        while (angle_delta > M_PI)
-            angle_delta -= 2*M_PI;
-        while (angle_delta < -M_PI)
-            angle_delta += 2*M_PI;
-        if (p.max_char_angle_delta > 0 &&
-            std::fabs(angle_delta) > p.max_char_angle_delta)
-        {
-            //MAPNIK_LOG_ERROR(placement_finder) << "FAIL: Too Bendy!";
-            return std::auto_ptr<text_path>(NULL);
-        }
-
-        double render_angle = angle;
-        double cosa = fast_cos(angle);
-        double sina = fast_sin(angle);
-
-        double render_x = start_x;
-        double render_y = start_y;
-
-        //Center the text on the line
-        double char_height = ci.avg_height;
-        render_x += char_height/2.0*sina;
-        render_y += char_height/2.0*cosa;
-
-        if (orientation < 0)
-        {
-            // rotate in place
-            render_x += cwidth*cosa - char_height*sina;
-            render_y -= cwidth*sina + char_height*cosa;
-            render_angle += M_PI;
-        }
-        current_placement->add_node(&ci,
-                                    render_x - current_placement->center.x,
-                                    -render_y + current_placement->center.y,
-                                    render_angle);
-
-        //Normalise to 0 <= angle < 2PI
-        while (render_angle >= 2*M_PI)
-            render_angle -= 2*M_PI;
-        while (render_angle < 0)
-            render_angle += 2*M_PI;
-
-        if (render_angle > M_PI/2 && render_angle < 1.5*M_PI)
-            upside_down_char_count++;
-    }
-
-    //If we placed too many characters upside down
-    if (upside_down_char_count >= info_.num_characters()/2.0)
-    {
-        //if we auto-detected the orientation then retry with the opposite orientation
-        if (!orientation_forced)
-        {
-            orientation = -orientation;
-            current_placement = get_placement_offset(path_positions,
-                                                     path_distances,
-                                                     orientation,
-                                                     initial_index,
-                                                     initial_distance);
-        }
-        else
-        {
-            //Otherwise we have failed to find a placement
-            //MAPNIK_LOG_ERROR(placement_finder) << "FAIL: Double upside-down!";
-            return std::auto_ptr<text_path>(NULL);
-        }
-    }
-
-    return current_placement;
-}
-
-template <typename DetectorT>
-bool placement_finder<DetectorT>::test_placement(std::auto_ptr<text_path> const& current_placement,
-                                                 int orientation)
-{
-    //Create and test envelopes
-    bool status = true;
-    for (unsigned i = 0; i < info_.num_characters(); ++i)
-    {
-        //TODO: I think this can be simplified by taking the char_info from vertex() but this needs to be carefully tested!
-        // grab the next character according to the orientation
-        char_info const& ci = orientation > 0 ? info_.at(i) : info_.at(info_.num_characters() - i - 1);
-        double cwidth = ci.width + ci.format->character_spacing;
-        char_info_ptr c;
-        double x, y, angle;
-        current_placement->vertex(c, x, y, angle);
-        x = current_placement->center.x + x;
-        y = current_placement->center.y - y;
-
-        double sina = fast_sin(angle);
-        double cosa = fast_cos(angle);
-        if (orientation < 0)
-        {
-            // rotate in place
-            x += cwidth * cosa - string_height_ * sina;
-            y -= cwidth * sina + string_height_ * cosa;
-            angle += M_PI;
-            //sin(x+PI) = -sin(x)
-            sina = -sina;
-            cosa = -cosa;
-        }
-
-        box2d<double> e(x, y, x + cwidth*cosa, y - cwidth*sina);
-        // put four corners of the letter into envelope
-        e.expand_to_include(x - ci.height()*sina,
-                            y - ci.height()*cosa);
-        e.expand_to_include(x + (cwidth*cosa - ci.height()*sina),
-                            y - (cwidth*sina + ci.height()*cosa));
-
-        if (!detector_.extent().intersects(e) ||
-            (!p.allow_overlap &&
-             !detector_.has_placement(e, info_.get_string(), pi.get_actual_minimum_distance())
-                )
-            )
-        {
-            //MAPNIK_LOG_ERROR(placement_finder) << "No Intersects:" << !dimensions_.intersects(e) << ": " << e << " @ " << dimensions_;
-            //MAPNIK_LOG_ERROR(placement_finder) << "No Placements:" << !detector_.has_placement(e, info.get_string(), p.minimum_distance);
-            status = false;
-            break;
-        }
-
-        if (p.avoid_edges && !dimensions_.contains(e))
-        {
-            //MAPNIK_LOG_ERROR(placement_finder) << "Fail avoid edges";
-            status = false;
-            break;
-        }
-        if (p.minimum_padding > 0)
-        {
-
-            box2d<double> epad = e;
-            epad.pad(pi.get_actual_minimum_padding());
-            if (!dimensions_.contains(epad))
-            {
-                status = false;
-                break;
-            }
-        }
-        envelopes_.push(e);
-    }
-
-    current_placement->rewind();
-
-    return status;
-}
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::find_line_circle_intersection(
-    double cx, double cy, double radius,
-    double x1, double y1, double x2, double y2,
-    double & ix, double & iy)
-{
-    double dx = x2 - x1;
-    double dy = y2 - y1;
-
-    double A = dx * dx + dy * dy;
-    double B = 2 * (dx * (x1 - cx) + dy * (y1 - cy));
-    double C = (x1 - cx) * (x1 - cx) + (y1 - cy) * (y1 - cy) - radius * radius;
-
-    double det = B * B - 4 * A * C;
-    if (A <= 0.0000001 || det < 0)
-    {
-        //Should never happen
-        //' No real solutions.
-        return;
-    }
-    else if (det == 0)
-    {
-        //Could potentially happen....
-        //One solution.
-        double t = -B / (2 * A);
-        ix = x1 + t * dx;
-        iy = y1 + t * dy;
-        return;
-    }
-    else
-    {
-        //Two solutions.
-
-        //Always use the 1st one
-        //We only really have one solution here, as we know the line segment will start in the circle and end outside
-        double t = (-B + std::sqrt(det)) / (2 * A);
-        ix = x1 + t * dx;
-        iy = y1 + t * dy;
-
-        //t = (-B - std::sqrt(det)) / (2 * A);
-        //ix = x1 + t * dx;
-        //iy = y1 + t * dy;
-
-        return;
-    }
-}
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::update_detector()
-{
-    if (collect_extents_) extents_.init(0,0,0,0);
-    // add the bboxes to the detector and remove from the placement
-    while (!envelopes_.empty())
-    {
-        box2d<double> e = envelopes_.front();
-        detector_.insert(e, info_.get_string());
-        envelopes_.pop();
-
-        if (collect_extents_)
-        {
-            extents_.expand_to_include(e);
-        }
-    }
-}
-
-template <typename DetectorT>
-void placement_finder<DetectorT>::clear_placements()
-{
-    placements_.clear();
-    while (!envelopes_.empty()) envelopes_.pop();
-}
-
-template class placement_finder<DetectorType>;
-template void placement_finder<DetectorType>::find_point_placements<ClippedPathType>(ClippedPathType &);
-template void placement_finder<DetectorType>::find_line_placements<ClippedPathType>(ClippedPathType &);
-template void placement_finder<DetectorType>::find_point_placements<PathType>(PathType &);
-template void placement_finder<DetectorType>::find_line_placements<PathType>(PathType &);
-}  // namespace
diff --git a/src/plugin.cpp b/src/plugin.cpp
index ca8b095..fe6bb9d 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -24,6 +24,7 @@
 #include <stdexcept>
 
 #ifdef _WINDOWS
+  #define NOMINMAX
   #include <windows.h>
   #define handle HMODULE
   #define dlsym GetProcAddress
@@ -56,7 +57,7 @@ PluginInfo::PluginInfo(std::string const& filename,
 #endif
           if (module_ && module_->dl)
           {
-                name_func* name = reinterpret_cast<name_func*>(dlsym(module_->dl, library_name.c_str()));
+                name_func name = reinterpret_cast<name_func>(dlsym(module_->dl, library_name.c_str()));
                 if (name) name_ = name();
           }
       }
diff --git a/src/png_reader.cpp b/src/png_reader.cpp
index fac31b9..80a8ec9 100644
--- a/src/png_reader.cpp
+++ b/src/png_reader.cpp
@@ -29,9 +29,16 @@ extern "C"
 #include <png.h>
 }
 // boost
-#include <boost/scoped_array.hpp>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/device/array.hpp>
 #include <boost/iostreams/stream.hpp>
+#pragma GCC diagnostic pop
+
+// stl
+#include <cstring>
+#include <memory>
 
 namespace mapnik
 {
@@ -39,8 +46,8 @@ namespace mapnik
 template <typename T>
 class png_reader : public image_reader
 {
-    typedef T source_type;
-    typedef boost::iostreams::stream<source_type> ifstream;
+    using source_type = T;
+    using input_stream = boost::iostreams::stream<source_type>;
 
     struct png_struct_guard
     {
@@ -59,17 +66,19 @@ class png_reader : public image_reader
 private:
 
     source_type source_;
-    ifstream stream_;
+    input_stream stream_;
     unsigned width_;
     unsigned height_;
     int bit_depth_;
     int color_type_;
+    bool has_alpha_;
 public:
     explicit png_reader(std::string const& file_name);
-    explicit png_reader(char const* data, std::size_t size);
+    png_reader(char const* data, std::size_t size);
     ~png_reader();
     unsigned width() const;
     unsigned height() const;
+    inline bool has_alpha() const { return has_alpha_; }
     bool premultiplied_alpha() const { return false; } //http://www.libpng.org/pub/png/spec/1.1/PNG-Rationale.html
     void read(unsigned x,unsigned y,image_data_32& image);
 private:
@@ -95,12 +104,12 @@ const bool registered2 = register_image_reader("png", create_png_reader2);
 }
 
 
-void user_error_fn(png_structp png_ptr, png_const_charp error_msg)
+void user_error_fn(png_structp /*png_ptr*/, png_const_charp error_msg)
 {
-    throw image_reader_exception("failed to read invalid png");
+    throw image_reader_exception(std::string("failed to read invalid png: '") + error_msg + "'");
 }
 
-void user_warning_fn(png_structp png_ptr, png_const_charp warning_msg)
+void user_warning_fn(png_structp /*png_ptr*/, png_const_charp warning_msg)
 {
     MAPNIK_LOG_DEBUG(png_reader) << "libpng warning: '" << warning_msg << "'";
 }
@@ -108,9 +117,10 @@ void user_warning_fn(png_structp png_ptr, png_const_charp warning_msg)
 template <typename T>
 void png_reader<T>::png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
 {
-    ifstream * fin = reinterpret_cast<ifstream*>(png_get_io_ptr(png_ptr));
+    input_stream * fin = reinterpret_cast<input_stream*>(png_get_io_ptr(png_ptr));
     fin->read(reinterpret_cast<char*>(data), length);
-    if (fin->gcount() != static_cast<std::streamsize>(length))
+    std::streamsize read_count = fin->gcount();
+    if (read_count < 0 || static_cast<png_size_t>(read_count) != length)
     {
         png_error(png_ptr, "Read Error");
     }
@@ -123,10 +133,11 @@ png_reader<T>::png_reader(std::string const& file_name)
       width_(0),
       height_(0),
       bit_depth_(0),
-      color_type_(0)
+      color_type_(0),
+      has_alpha_(false)
 {
-
-    if (!stream_) throw image_reader_exception("cannot open image file "+ file_name);
+    if (!source_.is_open()) throw image_reader_exception("PNG reader: cannot open file '"+ file_name + "'");
+    if (!stream_) throw image_reader_exception("PNG reader: cannot open file '"+ file_name + "'");
     init();
 }
 
@@ -137,10 +148,11 @@ png_reader<T>::png_reader(char const* data, std::size_t size)
       width_(0),
       height_(0),
       bit_depth_(0),
-      color_type_(0)
+      color_type_(0),
+      has_alpha_(false)
 {
 
-    if (!stream_) throw image_reader_exception("cannot open image stream");
+    if (!stream_) throw image_reader_exception("PNG reader: cannot open image stream");
     init();
 }
 
@@ -153,11 +165,11 @@ template <typename T>
 void png_reader<T>::init()
 {
     png_byte header[8];
-    memset(header,0,8);
+    std::memset(header,0,8);
     stream_.read(reinterpret_cast<char*>(header),8);
     if ( stream_.gcount() != 8)
     {
-        throw image_reader_exception("Could not read image");
+        throw image_reader_exception("PNG reader: Could not read image");
     }
     int is_png=!png_sig_cmp(header,0,8);
     if (!is_png)
@@ -187,7 +199,7 @@ void png_reader<T>::init()
 
     png_uint_32  width, height;
     png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth_, &color_type_,0,0,0);
-
+    has_alpha_ = (color_type_ & PNG_COLOR_MASK_ALPHA) || png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS);
     width_=width;
     height_=height;
 
@@ -263,7 +275,7 @@ void png_reader<T>::read(unsigned x0, unsigned y0,image_data_32& image)
         png_read_update_info(png_ptr, info_ptr);
         // we can read whole image at once
         // alloc row pointers
-        boost::scoped_array<png_byte*> rows(new png_bytep[height_]);
+        const std::unique_ptr<png_bytep[]> rows(new png_bytep[height_]);
         for (unsigned i=0; i<height_; ++i)
             rows[i] = (png_bytep)image.getRow(i);
         png_read_image(png_ptr, rows.get());
@@ -274,7 +286,7 @@ void png_reader<T>::read(unsigned x0, unsigned y0,image_data_32& image)
         unsigned w=std::min(unsigned(image.width()),width_ - x0);
         unsigned h=std::min(unsigned(image.height()),height_ - y0);
         unsigned rowbytes=png_get_rowbytes(png_ptr, info_ptr);
-        boost::scoped_array<png_byte> row(new png_byte[rowbytes]);
+        const std::unique_ptr<png_byte[]> row(new png_byte[rowbytes]);
         //START read image rows
         for (unsigned i = 0;i < height_; ++i)
         {
diff --git a/src/point_symbolizer.cpp b/src/point_symbolizer.cpp
deleted file mode 100644
index c470cfb..0000000
--- a/src/point_symbolizer.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/point_symbolizer.hpp>
-#include <mapnik/value.hpp>
-#include <mapnik/attribute.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-static const char * point_placement_strings[] = {
-    "centroid",
-    "interior",
-    ""
-};
-
-IMPLEMENT_ENUM( point_placement_e, point_placement_strings )
-
-point_symbolizer::point_symbolizer()
-: symbolizer_with_image(path_expression_ptr(new path_expression)), // FIXME
-    symbolizer_base(),
-    overlap_(false),
-    point_p_(CENTROID_POINT_PLACEMENT),
-    ignore_placement_(false) {}
-
-point_symbolizer::point_symbolizer(path_expression_ptr file)
-    : symbolizer_with_image(file),
-      symbolizer_base(),
-      overlap_(false),
-      point_p_(CENTROID_POINT_PLACEMENT),
-      ignore_placement_(false) {}
-
-point_symbolizer::point_symbolizer(point_symbolizer const& rhs)
-    : symbolizer_with_image(rhs),
-      symbolizer_base(rhs),
-      overlap_(rhs.overlap_),
-      point_p_(rhs.point_p_),
-      ignore_placement_(rhs.ignore_placement_) {}
-
-void point_symbolizer::set_allow_overlap(bool overlap)
-{
-    overlap_ = overlap;
-}
-
-bool point_symbolizer::get_allow_overlap() const
-{
-    return overlap_;
-}
-
-void point_symbolizer::set_point_placement(point_placement_e point_p)
-{
-    point_p_ = point_p;
-}
-
-point_placement_e point_symbolizer::get_point_placement() const
-{
-    return point_p_;
-}
-
-void point_symbolizer::set_ignore_placement(bool ignore_placement)
-{
-    ignore_placement_ = ignore_placement;
-}
-
-bool point_symbolizer::get_ignore_placement() const
-{
-    return ignore_placement_;
-}
-
-}
-
diff --git a/src/polygon_pattern_symbolizer.cpp b/src/polygon_pattern_symbolizer.cpp
deleted file mode 100644
index 6744989..0000000
--- a/src/polygon_pattern_symbolizer.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/polygon_pattern_symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-static const char * pattern_alignment_strings[] = {
-    "local", // feature
-    "global", // map
-    ""
-};
-
-IMPLEMENT_ENUM( pattern_alignment_e, pattern_alignment_strings )
-
-polygon_pattern_symbolizer::polygon_pattern_symbolizer(path_expression_ptr file)
-: symbolizer_with_image(file), symbolizer_base(),
-    alignment_(LOCAL_ALIGNMENT),
-    gamma_(1.0),
-    gamma_method_(GAMMA_POWER) {}
-
-polygon_pattern_symbolizer::polygon_pattern_symbolizer(polygon_pattern_symbolizer const& rhs)
-    : symbolizer_with_image(rhs), symbolizer_base(rhs),
-      alignment_(rhs.alignment_),
-      gamma_(rhs.gamma_),
-      gamma_method_(rhs.gamma_method_) {}
-
-pattern_alignment_e polygon_pattern_symbolizer::get_alignment() const
-{
-    return alignment_;
-}
-
-void polygon_pattern_symbolizer::set_alignment(pattern_alignment_e align)
-{
-    alignment_ = align;
-}
-
-double polygon_pattern_symbolizer::get_gamma() const
-{
-    return gamma_;
-}
-
-void polygon_pattern_symbolizer::set_gamma(double gamma)
-{
-    gamma_ = gamma;
-}
-
-void polygon_pattern_symbolizer::set_gamma_method(gamma_method_e gamma_method)
-{
-    gamma_method_ = gamma_method;
-}
-
-gamma_method_e polygon_pattern_symbolizer::get_gamma_method() const
-{
-    return gamma_method_;
-}
-
-}
-
diff --git a/src/polygon_symbolizer.cpp b/src/polygon_symbolizer.cpp
deleted file mode 100644
index be75b87..0000000
--- a/src/polygon_symbolizer.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/polygon_symbolizer.hpp>
-
-namespace mapnik
-{
-
-polygon_symbolizer::polygon_symbolizer()
-    : symbolizer_base(),
-      fill_(color(128,128,128)),
-      opacity_(1.0),
-      gamma_(1.0),
-      gamma_method_(GAMMA_POWER)
-      {}
-
-polygon_symbolizer::polygon_symbolizer(color const& fill)
-    : symbolizer_base(),
-      fill_(fill),
-      opacity_(1.0),
-      gamma_(1.0),
-      gamma_method_(GAMMA_POWER)
-      {}
-
-color const& polygon_symbolizer::get_fill() const
-{
-    return fill_;
-}
-
-void polygon_symbolizer::set_fill(color const& fill)
-{
-    fill_ = fill;
-}
-
-void polygon_symbolizer::set_opacity(double opacity)
-{
-    opacity_ = opacity;
-}
-
-double polygon_symbolizer::get_opacity() const
-{
-    return opacity_;
-}
-
-void polygon_symbolizer::set_gamma(double gamma)
-{
-    gamma_ = gamma;
-}
-
-double polygon_symbolizer::get_gamma() const
-{
-    return gamma_;
-}
-
-void polygon_symbolizer::set_gamma_method(gamma_method_e gamma_method)
-{
-    gamma_method_ = gamma_method;
-}
-
-gamma_method_e polygon_symbolizer::get_gamma_method() const
-{
-    return gamma_method_;
-}
-
-}
diff --git a/src/processed_text.cpp b/src/processed_text.cpp
deleted file mode 100644
index 83db904..0000000
--- a/src/processed_text.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <mapnik/processed_text.hpp>
-#include <mapnik/config_error.hpp>
-#include <mapnik/font_engine_freetype.hpp>
-
-namespace mapnik
-{
-
-void processed_text::push_back(char_properties const& properties, UnicodeString const& text)
-{
-    expr_list_.push_back(processed_expression(properties, text));
-}
-
-processed_text::expression_list::const_iterator processed_text::begin() const
-{
-    return expr_list_.begin();
-}
-
-processed_text::expression_list::const_iterator processed_text::end() const
-{
-    return expr_list_.end();
-}
-
-processed_text::processed_text(face_manager<freetype_engine> & font_manager, double scale_factor)
-    : font_manager_(font_manager), scale_factor_(scale_factor)
-{
-
-}
-
-void processed_text::clear()
-{
-    info_.clear();
-    expr_list_.clear();
-}
-
-
-string_info &processed_text::get_string_info()
-{
-    info_.clear(); //if this function is called twice invalid results are returned, so clear string_info first
-    expression_list::iterator itr = expr_list_.begin();
-    expression_list::iterator end = expr_list_.end();
-    for (; itr != end; ++itr)
-    {
-        char_properties const &p = itr->p;
-        face_set_ptr faces = font_manager_.get_face_set(p.face_name, p.fontset);
-        if (faces->size() == 0)
-        {
-            if (p.fontset && !p.fontset->get_name().empty())
-            {
-                if (p.fontset->size())
-                {
-                    if (!p.face_name.empty())
-                    {
-                        throw config_error("Unable to find specified font face '" + p.face_name + "' in font set: '" + p.fontset->get_name() + "'");
-                    }
-                    else
-                    {
-                        throw config_error("No valid font face could be loaded for font set: '" + p.fontset->get_name() + "'");
-                    }
-                }
-                else
-                {
-                    throw config_error("Font set '" + p.fontset->get_name() + "' does not contain any Font face-name entries");
-                }
-            }
-            else if (!p.face_name.empty())
-            {
-                throw config_error("Unable to find specified font face '" + p.face_name + "'");
-            }
-            else
-            {
-                throw config_error("Both font set and face name are empty!");
-            }
-        }
-        faces->set_character_sizes(p.text_size * scale_factor_);
-        faces->get_string_info(info_, itr->str, &(itr->p));
-        info_.add_text(itr->str);
-    }
-    return info_;
-}
-
-} //ns mapnik
diff --git a/src/proj_transform.cpp b/src/proj_transform.cpp
index 6882964..f3cd2e8 100644
--- a/src/proj_transform.cpp
+++ b/src/proj_transform.cpp
@@ -22,6 +22,8 @@
 
 // mapnik
 #include <mapnik/global.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/projection.hpp>
 #include <mapnik/proj_transform.hpp>
 #include <mapnik/coord.hpp>
 #include <mapnik/utils.hpp>
@@ -43,6 +45,7 @@ proj_transform::proj_transform(projection const& source,
       dest_(dest),
       is_source_longlat_(false),
       is_dest_longlat_(false),
+      is_source_equal_dest_(false),
       wgs84_to_merc_(false),
       merc_to_wgs84_(false)
 {
@@ -267,6 +270,11 @@ bool proj_transform::backward(box2d<double>& env, int points) const
     if (is_source_equal_dest_)
         return true;
 
+    if (wgs84_to_merc_ || merc_to_wgs84_)
+    {
+        return backward(env);
+    }
+
     std::vector<coord<double,2> > coords;
     envelope_points(coords, env, points);
 
@@ -292,6 +300,11 @@ bool proj_transform::forward(box2d<double>& env, int points) const
     if (is_source_equal_dest_)
         return true;
 
+    if (wgs84_to_merc_ || merc_to_wgs84_)
+    {
+        return forward(env);
+    }
+
     std::vector<coord<double,2> > coords;
     envelope_points(coords, env, points);
 
diff --git a/src/projection.cpp b/src/projection.cpp
index 871e357..06dc5e4 100644
--- a/src/projection.cpp
+++ b/src/projection.cpp
@@ -32,16 +32,15 @@
 #ifdef MAPNIK_USE_PROJ4
 // proj4
 #include <proj_api.h>
-#if defined(MAPNIK_THREADSAFE) && PJ_VERSION < 480
-#include <boost/thread/mutex.hpp>
-#ifdef _MSC_VER
-#pragma NOTE(mapnik is building against < proj 4.8, reprojection will be faster if you use >= 4.8)
-#else
-#warning mapnik is building against < proj 4.8, reprojection will be faster if you use >= 4.8
-#endif
-static boost::mutex mutex_;
-#endif
-
+ #if defined(MAPNIK_THREADSAFE) && PJ_VERSION < 480
+    #include <mutex>
+    static std::mutex mutex_;
+    #ifdef _MSC_VER
+     #pragma NOTE(mapnik is building against < proj 4.8, reprojection will be faster if you use >= 4.8)
+    #else
+     #warning mapnik is building against < proj 4.8, reprojection will be faster if you use >= 4.8
+    #endif
+ #endif
 #endif
 
 namespace mapnik {
@@ -50,8 +49,9 @@ namespace mapnik {
 projection::projection(std::string const& params, bool defer_proj_init)
     : params_(params),
       defer_proj_init_(defer_proj_init),
-      proj_(NULL),
-      proj_ctx_(NULL)
+      is_geographic_(false),
+      proj_(nullptr),
+      proj_ctx_(nullptr)
 {
     boost::optional<bool> is_known = is_known_geographic(params_);
     if (is_known){
@@ -72,8 +72,8 @@ projection::projection(projection const& rhs)
     : params_(rhs.params_),
       defer_proj_init_(rhs.defer_proj_init_),
       is_geographic_(rhs.is_geographic_),
-      proj_(NULL),
-      proj_ctx_(NULL)
+      proj_(nullptr),
+      proj_ctx_(nullptr)
 {
     if (!defer_proj_init_) init_proj4();
 }
@@ -108,12 +108,15 @@ void projection::init_proj4() const
         proj_ = pj_init_plus_ctx(proj_ctx_, params_.c_str());
         if (!proj_)
         {
-            if (proj_ctx_) pj_ctx_free(proj_ctx_);
+            if (proj_ctx_) {
+                pj_ctx_free(proj_ctx_);
+                proj_ctx_ = 0;
+            }
             throw proj_init_error(params_);
         }
 #else
         #if defined(MAPNIK_THREADSAFE)
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
         #endif
         proj_ = pj_init_plus(params_.c_str());
         if (!proj_) throw proj_init_error(params_);
@@ -151,7 +154,7 @@ void projection::forward(double & x, double &y ) const
         throw std::runtime_error("projection::forward not supported unless proj4 is initialized");
     }
     #if defined(MAPNIK_THREADSAFE) && PJ_VERSION < 480
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
     #endif
     projUV p;
     p.u = x * DEG_TO_RAD;
@@ -178,7 +181,7 @@ void projection::inverse(double & x,double & y) const
     }
 
     #if defined(MAPNIK_THREADSAFE) && PJ_VERSION < 480
-    mutex::scoped_lock lock(mutex_);
+    mapnik::scoped_lock lock(mutex_);
     #endif
     if (is_geographic_)
     {
@@ -200,7 +203,7 @@ projection::~projection()
 {
 #ifdef MAPNIK_USE_PROJ4
     #if defined(MAPNIK_THREADSAFE) && PJ_VERSION < 480
-        mutex::scoped_lock lock(mutex_);
+        mapnik::scoped_lock lock(mutex_);
     #endif
         if (proj_) pj_free(proj_);
     #if PJ_VERSION >= 480
diff --git a/src/rapidxml_loader.cpp b/src/rapidxml_loader.cpp
index 557ae09..ea24793 100644
--- a/src/rapidxml_loader.cpp
+++ b/src/rapidxml_loader.cpp
@@ -1,5 +1,3 @@
-
-
 /*****************************************************************************
  *
  * This file is part of Mapnik (c++ mapping toolkit)
@@ -27,10 +25,12 @@
 #endif
 
 // mapnik
+#include <mapnik/config_error.hpp>
+#include <mapnik/utils.hpp>
+#include <mapnik/util/fs.hpp>
 #include <mapnik/xml_loader.hpp>
 #include <boost/property_tree/detail/xml_parser_read_rapidxml.hpp>
 #include <mapnik/xml_node.hpp>
-#include <mapnik/config_error.hpp>
 #include <mapnik/util/trim.hpp>
 #include <mapnik/noncopyable.hpp>
 
@@ -39,35 +39,33 @@
 #include <fstream>
 
 namespace rapidxml = boost::property_tree::detail::rapidxml;
+
 namespace mapnik
 {
 class rapidxml_loader : mapnik::noncopyable
 {
 public:
-    rapidxml_loader(const char *encoding = NULL) :
-        filename_()
-    {
+    rapidxml_loader() :
+        filename_() {}
 
-    }
-
-    ~rapidxml_loader()
-    {
-    }
+    ~rapidxml_loader() {}
 
-    void load(std::string const& filename, xml_node &node)
+    void load(std::string const& filename, xml_node & node)
     {
+        if (!mapnik::util::exists(filename))
+        {
+            throw config_error(std::string("Could not load map file: File does not exist"), 0, filename);
+        }
         filename_ = filename;
+#ifdef _WINDOWS
+        std::basic_ifstream<char> stream(mapnik::utf8_to_utf16(filename));
+#else
         std::basic_ifstream<char> stream(filename.c_str());
+#endif
         if (!stream)
         {
             throw config_error("Could not load map file", 0, filename);
         }
-//        TODO: stream.imbue(loc);
-        load(stream, node);
-    }
-
-    void load(std::basic_istream<char> &stream, xml_node &node)
-    {
         stream.unsetf(std::ios::skipws);
         std::vector<char> v(std::istreambuf_iterator<char>(stream.rdbuf()),
                             std::istreambuf_iterator<char>());
@@ -76,14 +74,20 @@ public:
             throw config_error("Could not load map file", 0, filename_);
         }
         v.push_back(0); // zero-terminate
+        load_array(v, node);
+    }
+
+    template <typename T>
+    void load_array(T && array, xml_node & node)
+    {
         try
         {
             // Parse using appropriate flags
             // https://github.com/mapnik/mapnik/issues/1856
             // const int f_tws = rapidxml::parse_normalize_whitespace;
-            const int f_tws = rapidxml::parse_trim_whitespace;
+            const int f_tws = rapidxml::parse_trim_whitespace | rapidxml::parse_validate_closing_tags;
             rapidxml::xml_document<> doc;
-            doc.parse<f_tws>(&v.front());
+            doc.parse<f_tws>(&array.front());
 
             for (rapidxml::xml_node<char> *child = doc.first_node();
                  child; child = child->next_sibling())
@@ -94,35 +98,24 @@ public:
         catch (rapidxml::parse_error const& e)
         {
             long line = static_cast<long>(
-                std::count(&v.front(), e.where<char>(), '\n') + 1);
+                std::count(&array.front(), e.where<char>(), '\n') + 1);
             throw config_error(e.what(), line, filename_);
         }
     }
 
-    void load_string(std::string const& buffer, xml_node &node, std::string const & base_path )
+    void load_string(std::string const& buffer, xml_node & node, std::string const & )
     {
-
-//        if (!base_path.empty())
-//        {
-//            if (!mapnik::util::exists(base_path)) {
-//                throw config_error(std::string("Could not locate base_path '") +
-//                                   base_path + "': file or directory does not exist");
-//            }
-//        }
-
-        // https://github.com/mapnik/mapnik/issues/1857
-        std::stringstream s;
-        s << buffer;
-        load(s, node);
+        // Note: base_path ignored because its not relevant - only needed for xml2 to load entities (see libxml2_loader.cpp)
+        load_array(std::string(buffer), node);
     }
 private:
-    void populate_tree(rapidxml::xml_node<char> *cur_node, xml_node &node)
+    void populate_tree(rapidxml::xml_node<char> *cur_node, xml_node & node)
     {
         switch (cur_node->type())
         {
         case rapidxml::node_element:
         {
-            xml_node &new_node = node.add_child((char *)cur_node->name(), 0, false);
+            xml_node & new_node = node.add_child(cur_node->name(), 0, false);
             // Copy attributes
             for (rapidxml::xml_attribute<char> *attr = cur_node->first_attribute();
                  attr; attr = attr->next_attribute())
@@ -143,7 +136,10 @@ private:
         case rapidxml::node_data:
         case rapidxml::node_cdata:
         {
-            node.add_child(cur_node->value(), 0, true);
+            if (cur_node->value_size() > 0) // Don't add empty text nodes
+            {
+                node.add_child(cur_node->value(), 0, true);
+            }
         }
         break;
         default:
@@ -154,12 +150,12 @@ private:
     std::string filename_;
 };
 
-void read_xml(std::string const & filename, xml_node &node)
+void read_xml(std::string const& filename, xml_node & node)
 {
     rapidxml_loader loader;
     loader.load(filename, node);
 }
-void read_xml_string(std::string const & str, xml_node &node, std::string const & base_path)
+void read_xml_string(std::string const& str, xml_node & node, std::string const& base_path)
 {
     rapidxml_loader loader;
     loader.load_string(str, node, base_path);
diff --git a/src/raster_colorizer.cpp b/src/raster_colorizer.cpp
index fbacb12..6bc0c05 100644
--- a/src/raster_colorizer.cpp
+++ b/src/raster_colorizer.cpp
@@ -127,25 +127,19 @@ void raster_colorizer::colorize(raster_ptr const& raster, feature_impl const& f)
     unsigned *imageData = raster->data_.getData();
 
     int len = raster->data_.width() * raster->data_.height();
-
-    bool hasNoData = false;
-    float noDataValue = 0;
-
-    //std::map<std::string,value>::const_iterator fi = Props.find("NODATA");
-    if (f.has_key("NODATA"))
-    {
-        hasNoData = true;
-        noDataValue = static_cast<float>(f.get("NODATA").to_double());
-    }
-
+    boost::optional<double> const& nodata = raster->nodata();
     for (int i=0; i<len; ++i)
     {
         // the GDAL plugin reads single bands as floats
         float value = *reinterpret_cast<float *> (&imageData[i]);
-        if (hasNoData && noDataValue == value)
-            imageData[i] = color(0,0,0,0).rgba();
+        if (nodata && (std::fabs(value - *nodata) < epsilon_))
+        {
+            imageData[i] = 0;
+        }
         else
-            imageData[i] = get_color(value).rgba();
+        {
+            imageData[i] = get_color(value);
+        }
     }
 }
 
@@ -154,14 +148,14 @@ inline unsigned interpolate(unsigned start, unsigned end, float fraction)
     return static_cast<unsigned>(fraction * ((float)end - (float)start) + start);
 }
 
-color raster_colorizer::get_color(float value) const
+unsigned raster_colorizer::get_color(float value) const
 {
     int stopCount = stops_.size();
 
     //use default color if no stops
     if(stopCount == 0)
     {
-        return default_color_;
+        return default_color_.rgba();
     }
 
     //1 - Find the stop that the value is in
@@ -284,7 +278,7 @@ color raster_colorizer::get_color(float value) const
       MAPNIK_LOG_DEBUG(raster_colorizer) << "\toutputColor: " << outputColor.to_string();
     */
 
-    return outputColor;
+    return outputColor.rgba();
 }
 
 
diff --git a/src/raster_symbolizer.cpp b/src/raster_symbolizer.cpp
deleted file mode 100644
index a62a42c..0000000
--- a/src/raster_symbolizer.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/raster_symbolizer.hpp>
-
-
-// mapnik
-#include <mapnik/config.hpp>
-#include <mapnik/debug.hpp>
-#include <mapnik/raster_colorizer.hpp>
-#include <mapnik/attribute.hpp>
-#include <mapnik/symbolizer.hpp>
-#include <mapnik/image_util.hpp>
-#include <mapnik/image_compositing.hpp>
-#include <mapnik/image_scaling.hpp>
-
-// boost
-#include <boost/algorithm/string.hpp>
-
-namespace mapnik
-{
-
-raster_symbolizer::raster_symbolizer()
-        : symbolizer_base(),
-        mode_("normal"),
-        scaling_(SCALING_NEAR),
-        opacity_(1.0),
-        colorizer_(),
-        filter_factor_(-1),
-        mesh_size_(16) {}
-
-raster_symbolizer::raster_symbolizer(raster_symbolizer const& rhs)
-        : symbolizer_base(rhs),
-        mode_(rhs.mode_),
-        scaling_(rhs.scaling_),
-        opacity_(rhs.opacity_),
-        colorizer_(rhs.colorizer_),
-        filter_factor_(rhs.filter_factor_),
-        mesh_size_(rhs.mesh_size_),
-        premultiplied_(rhs.premultiplied_) {}
-
-std::string const& raster_symbolizer::get_mode() const
-{
-    MAPNIK_LOG_ERROR(raster_symbolizer) << "getting 'mode' is deprecated and will be removed in Mapnik 3.x, use 'comp-op' with Mapnik >= 2.1.x";
-    return mode_;
-}
-void raster_symbolizer::set_mode(std::string const& mode)
-{
-    MAPNIK_LOG_ERROR(raster_symbolizer) << "setting 'mode' is deprecated and will be removed in Mapnik 3.x, use 'comp-op' with Mapnik >= 2.1.x";
-    mode_ = mode;
-    if (mode == "normal")
-    {
-        MAPNIK_LOG_ERROR(raster_symbolizer) << "converting 'mode=normal' to 'comp-op:src_over'";
-        this->set_comp_op(src_over);
-    }
-    else
-    {
-        std::string mode2 = boost::algorithm::replace_last_copy(mode,"2","");
-        boost::optional<composite_mode_e> comp_op = comp_op_from_string(mode2);
-        if (comp_op)
-        {
-            MAPNIK_LOG_ERROR(raster_symbolizer) << "converting 'mode:" << mode << "' to 'comp-op:" + *comp_op_to_string(*comp_op) + "'";
-            this->set_comp_op(*comp_op);
-        }
-        else
-        {
-            MAPNIK_LOG_ERROR(raster_symbolizer) << "could not convert mode '" << mode << "' into comp-op, defaulting to 'comp-op:src-over'";
-        }
-    }
-}
-
-scaling_method_e raster_symbolizer::get_scaling_method() const
-{
-    return scaling_;
-}
-
-void raster_symbolizer::set_scaling_method(scaling_method_e scaling)
-{
-    scaling_ = scaling;
-}
-
-void raster_symbolizer::set_opacity(float opacity)
-{
-    opacity_ = opacity;
-}
-
-float raster_symbolizer::get_opacity() const
-{
-    return opacity_;
-}
-
-raster_colorizer_ptr raster_symbolizer::get_colorizer() const
-{
-    return colorizer_;
-}
-
-void raster_symbolizer::set_colorizer(raster_colorizer_ptr const& colorizer)
-{
-    colorizer_ = colorizer;
-}
-
-double raster_symbolizer::get_filter_factor() const
-{
-    return filter_factor_;
-}
-
-void raster_symbolizer::set_filter_factor(double filter_factor)
-{
-    filter_factor_=filter_factor;
-}
-
-double raster_symbolizer::calculate_filter_factor() const
-{
-    if (filter_factor_ > 0)
-    {
-        // respect explicitly specified values
-        return filter_factor_;
-    } else {
-        double ff = 1.0;
-
-        switch(scaling_)
-        {
-        case SCALING_NEAR:
-            ff = 1.0;
-            break;
-            // TODO potentially some of these algorithms would use filter_factor >2.0.
-            // Contributions welcome from someone who knows more about them.
-        case SCALING_BILINEAR:
-        case SCALING_BILINEAR8:
-        case SCALING_BICUBIC:
-        case SCALING_SPLINE16:
-        case SCALING_SPLINE36:
-        case SCALING_HANNING:
-        case SCALING_HAMMING:
-        case SCALING_HERMITE:
-        case SCALING_KAISER:
-        case SCALING_QUADRIC:
-        case SCALING_CATROM:
-        case SCALING_GAUSSIAN:
-        case SCALING_BESSEL:
-        case SCALING_MITCHELL:
-        case SCALING_SINC:
-        case SCALING_LANCZOS:
-        case SCALING_BLACKMAN:
-            ff = 2.0;
-            break;
-        }
-        return ff;
-    }
-}
-
-unsigned raster_symbolizer::get_mesh_size() const
-{
-    return mesh_size_;
-}
-
-void raster_symbolizer::set_mesh_size(unsigned mesh_size)
-{
-    mesh_size_=mesh_size;
-}
-
-void raster_symbolizer::set_premultiplied(bool premultiplied)
-{
-    premultiplied_=premultiplied;
-}
-
-boost::optional<bool> raster_symbolizer::premultiplied() const
-{
-    return premultiplied_;
-}
-
-}
-
diff --git a/src/renderer_common.cpp b/src/renderer_common.cpp
new file mode 100644
index 0000000..17111bb
--- /dev/null
+++ b/src/renderer_common.cpp
@@ -0,0 +1,76 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2011 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/renderer_common.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/map.hpp>
+#include <mapnik/request.hpp>
+#include <mapnik/attribute.hpp>
+
+namespace mapnik {
+
+renderer_common::renderer_common(Map const& map, unsigned width, unsigned height, double scale_factor,
+                                 attributes const& vars,
+                                 view_transform && t,
+                                 std::shared_ptr<label_collision_detector4> detector)
+   : width_(width),
+     height_(height),
+     scale_factor_(scale_factor),
+     vars_(vars),
+     shared_font_library_(std::make_shared<font_library>()),
+     font_library_(*shared_font_library_),
+     font_manager_(font_library_,map.get_font_file_mapping(),map.get_font_memory_cache()),
+     query_extent_(),
+     t_(t),
+     detector_(detector)
+{}
+
+renderer_common::renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y,
+                                 unsigned width, unsigned height, double scale_factor)
+   : renderer_common(m, width, height, scale_factor,
+                     vars,
+                     view_transform(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y),
+                     std::make_shared<label_collision_detector4>(
+                        box2d<double>(-m.buffer_size(), -m.buffer_size(),
+                                      m.width() + m.buffer_size() ,m.height() + m.buffer_size())))
+{}
+
+renderer_common::renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y,
+                                 unsigned width, unsigned height, double scale_factor,
+                                 std::shared_ptr<label_collision_detector4> detector)
+   : renderer_common(m, width, height, scale_factor,
+                     vars,
+                     view_transform(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y),
+                     detector)
+{}
+
+renderer_common::renderer_common(Map const &m, request const &req, attributes const& vars, unsigned offset_x, unsigned offset_y,
+                                 unsigned width, unsigned height, double scale_factor)
+   : renderer_common(m, width, height, scale_factor,
+                     vars,
+                     view_transform(req.width(),req.height(),req.extent(),offset_x,offset_y),
+                     std::make_shared<label_collision_detector4>(
+                        box2d<double>(-req.buffer_size(), -req.buffer_size(),
+                                      req.width() + req.buffer_size() ,req.height() + req.buffer_size())))
+{}
+
+}
diff --git a/src/renderer_common/process_group_symbolizer.cpp b/src/renderer_common/process_group_symbolizer.cpp
new file mode 100644
index 0000000..516b9b0
--- /dev/null
+++ b/src/renderer_common/process_group_symbolizer.cpp
@@ -0,0 +1,147 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/renderer_common/process_group_symbolizer.hpp>
+#include <mapnik/renderer_common/process_point_symbolizer.hpp>
+#include <mapnik/text/glyph_info.hpp>
+#include <mapnik/make_unique.hpp>
+
+namespace mapnik {
+
+point_render_thunk::point_render_thunk(pixel_position const& pos, marker const& m,
+                                       agg::trans_affine const& tr, double opacity,
+                                       composite_mode_e comp_op)
+    : pos_(pos), marker_(std::make_shared<marker>(m)),
+      tr_(tr), opacity_(opacity), comp_op_(comp_op)
+{}
+
+
+text_render_thunk::text_render_thunk(helper_ptr && helper,
+                                     double opacity, composite_mode_e comp_op,
+                                     halo_rasterizer_enum halo_rasterizer)
+    : helper_(std::move(helper)),
+      placements_(helper_->get()),
+      opacity_(opacity),
+      comp_op_(comp_op),
+      halo_rasterizer_(halo_rasterizer) {}
+
+render_thunk_extractor::render_thunk_extractor(box2d<double> & box,
+                                               render_thunk_list & thunks,
+                                               feature_impl & feature,
+                                               attributes const& vars,
+                                               proj_transform const& prj_trans,
+                                               virtual_renderer_common & common,
+                                               box2d<double> const& clipping_extent)
+    : box_(box), thunks_(thunks), feature_(feature), vars_(vars), prj_trans_(prj_trans),
+      common_(common), clipping_extent_(clipping_extent)
+{}
+
+void render_thunk_extractor::operator()(point_symbolizer const& sym) const
+{
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature_, common_.vars_, src_over);
+
+    render_point_symbolizer(
+        sym, feature_, prj_trans_, common_,
+        [&](pixel_position const& pos, marker const& marker,
+            agg::trans_affine const& tr, double opacity) {
+            point_render_thunk thunk(pos, marker, tr, opacity, comp_op);
+            thunks_.push_back(std::make_unique<render_thunk>(std::move(thunk)));
+        });
+
+    update_box();
+}
+
+void render_thunk_extractor::operator()(text_symbolizer const& sym) const
+{
+    box2d<double> clip_box = clipping_extent_;
+    helper_ptr helper = std::make_unique<text_symbolizer_helper>(
+        sym, feature_, vars_, prj_trans_,
+        common_.width_, common_.height_,
+        common_.scale_factor_,
+        common_.t_, common_.font_manager_, *common_.detector_,
+        clip_box, agg::trans_affine());
+
+    extract_text_thunk(std::move(helper), sym);
+}
+
+void render_thunk_extractor::operator()(shield_symbolizer const& sym) const
+{
+    box2d<double> clip_box = clipping_extent_;
+    helper_ptr helper = std::make_unique<text_symbolizer_helper>(
+        sym, feature_, vars_, prj_trans_,
+        common_.width_, common_.height_,
+        common_.scale_factor_,
+        common_.t_, common_.font_manager_, *common_.detector_,
+        clip_box, agg::trans_affine());
+
+    extract_text_thunk(std::move(helper), sym);
+}
+
+void render_thunk_extractor::extract_text_thunk(helper_ptr && helper, text_symbolizer const& sym) const
+{
+    double opacity = get<double>(sym, keys::opacity, feature_, common_.vars_, 1.0);
+    composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature_, common_.vars_, src_over);
+    halo_rasterizer_enum halo_rasterizer = get<halo_rasterizer_enum>(sym, keys::halo_rasterizer, feature_, common_.vars_, HALO_RASTERIZER_FULL);
+
+    text_render_thunk thunk(std::move(helper), opacity, comp_op, halo_rasterizer);
+    thunks_.push_back(std::make_unique<render_thunk>(std::move(thunk)));
+
+    update_box();
+}
+
+void render_thunk_extractor::update_box() const
+{
+    label_collision_detector4 & detector = *common_.detector_;
+
+    for (auto const& label : detector)
+    {
+        if (box_.width() > 0 && box_.height() > 0)
+        {
+            box_.expand_to_include(label.box);
+        }
+        else
+        {
+            box_ = label.box;
+        }
+    }
+
+    detector.clear();
+}
+
+
+geometry_type *origin_point(proj_transform const& prj_trans,
+                            renderer_common const& common)
+{
+    // note that we choose a point in the middle of the screen to
+    // try to ensure that we don't get edge artefacts due to any
+    // symbolizers with avoid-edges set: only the avoid-edges of
+    // the group symbolizer itself should matter.
+    double x = common.width_ / 2.0, y = common.height_ / 2.0, z = 0.0;
+    common.t_.backward(&x, &y);
+    prj_trans.forward(x, y, z);
+    geometry_type *geom = new geometry_type(geometry_type::Point);
+    geom->move_to(x, y);
+    return geom;
+}
+
+} // namespace mapnik
diff --git a/src/renderer_common/render_pattern.cpp b/src/renderer_common/render_pattern.cpp
new file mode 100644
index 0000000..f149c13
--- /dev/null
+++ b/src/renderer_common/render_pattern.cpp
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/renderer_common/render_pattern.hpp>
+#include <mapnik/box2d.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/svg/svg_converter.hpp>
+#include <mapnik/svg/svg_renderer_agg.hpp>
+#include <mapnik/svg/svg_path_adapter.hpp>
+#include <mapnik/agg_rasterizer.hpp>
+
+#include "agg_rendering_buffer.h"
+#include "agg_pixfmt_rgba.h"
+#include "agg_color_rgba.h"
+#include "agg_scanline_u.h"
+
+namespace mapnik {
+
+std::shared_ptr<image_data_32> render_pattern(rasterizer & ras,
+                                              marker const& marker,
+                                              agg::trans_affine const& tr,
+                                              double opacity)
+{
+    using pixfmt = agg::pixfmt_rgba32_pre;
+    using renderer_base = agg::renderer_base<pixfmt>;
+    using renderer_solid = agg::renderer_scanline_aa_solid<renderer_base>;
+    agg::scanline_u8 sl;
+
+    mapnik::box2d<double> const& bbox = (*marker.get_vector_data())->bounding_box() * tr;
+    mapnik::coord<double,2> c = bbox.center();
+    agg::trans_affine mtx = agg::trans_affine_translation(-c.x,-c.y);
+    mtx.translate(0.5 * bbox.width(), 0.5 * bbox.height());
+    mtx = tr * mtx;
+
+    std::shared_ptr<mapnik::image_data_32> image = std::make_shared<mapnik::image_data_32>(bbox.width(), bbox.height());
+    agg::rendering_buffer buf(image->getBytes(), image->width(), image->height(), image->width() * 4);
+    pixfmt pixf(buf);
+    renderer_base renb(pixf);
+
+    mapnik::svg::vertex_stl_adapter<mapnik::svg::svg_path_storage> stl_storage((*marker.get_vector_data())->source());
+    mapnik::svg::svg_path_adapter svg_path(stl_storage);
+    mapnik::svg::svg_renderer_agg<mapnik::svg::svg_path_adapter,
+                                  agg::pod_bvector<mapnik::svg::path_attributes>,
+                                  renderer_solid,
+                                  agg::pixfmt_rgba32_pre > svg_renderer(svg_path,
+                                                                        (*marker.get_vector_data())->attributes());
+
+    svg_renderer.render(ras, sl, renb, mtx, opacity, bbox);
+    return image;
+}
+
+} // namespace mapnik
diff --git a/src/rule.cpp b/src/rule.cpp
index 32ba4d6..3dfab55 100644
--- a/src/rule.cpp
+++ b/src/rule.cpp
@@ -23,82 +23,11 @@
 // mapnik
 #include <mapnik/rule.hpp>
 #include <mapnik/expression_node.hpp>
-#include <mapnik/debug.hpp>
-#include <mapnik/raster_colorizer.hpp>
-#include <mapnik/expression_string.hpp>
-
-// all symbolizers
-#include <mapnik/building_symbolizer.hpp>
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/line_pattern_symbolizer.hpp>
-#include <mapnik/polygon_symbolizer.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
-#include <mapnik/point_symbolizer.hpp>
-#include <mapnik/raster_symbolizer.hpp>
-#include <mapnik/shield_symbolizer.hpp>
-#include <mapnik/text_symbolizer.hpp>
-#include <mapnik/markers_symbolizer.hpp>
-#include <mapnik/debug_symbolizer.hpp>
-
-// boost
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/concept_check.hpp>
 
 // stl
 #include <limits>
+#include <memory>
 
-namespace {
-
-    struct deepcopy_symbolizer : public boost::static_visitor<>
-    {
-        void operator () (mapnik::raster_symbolizer & sym) const
-        {
-            mapnik::raster_colorizer_ptr old_colorizer = sym.get_colorizer();
-            mapnik::raster_colorizer_ptr new_colorizer = mapnik::raster_colorizer_ptr();
-            new_colorizer->set_stops(old_colorizer->get_stops());
-            new_colorizer->set_default_mode(old_colorizer->get_default_mode());
-            new_colorizer->set_default_color(old_colorizer->get_default_color());
-            new_colorizer->set_epsilon(old_colorizer->get_epsilon());
-            sym.set_colorizer(new_colorizer);
-        }
-
-        void operator () (mapnik::text_symbolizer & sym) const
-        {
-            copy_text_ptr(sym);
-        }
-
-        void operator () (mapnik::shield_symbolizer & sym) const
-        {
-            copy_text_ptr(sym);
-        }
-
-        void operator () (mapnik::building_symbolizer & sym) const
-        {
-            copy_height_ptr(sym);
-        }
-
-        template <typename T> void operator () (T &sym) const
-        {
-            boost::ignore_unused_variable_warning(sym);
-        }
-
-        template <class T>
-        void copy_text_ptr(T & sym) const
-        {
-            boost::ignore_unused_variable_warning(sym);
-            MAPNIK_LOG_WARN(rule) << "rule: deep copying TextSymbolizers is broken!";
-        }
-
-        template <class T>
-        void copy_height_ptr(T & sym) const
-        {
-            std::string height_expr = mapnik::to_expression_string(*sym.height());
-            sym.set_height(mapnik::parse_expression(height_expr,"utf8"));
-        }
-    };
-
-}
 namespace mapnik
 {
 
@@ -107,7 +36,7 @@ rule::rule()
       min_scale_(0),
       max_scale_(std::numeric_limits<double>::infinity()),
       syms_(),
-      filter_(boost::make_shared<mapnik::expr_node>(true)),
+      filter_(std::make_shared<expr_node>(true)),
       else_filter_(false),
       also_filter_(false) {}
 
@@ -118,55 +47,52 @@ rule::rule(std::string const& name,
       min_scale_(min_scale_denominator),
       max_scale_(max_scale_denominator),
       syms_(),
-      filter_(boost::make_shared<mapnik::expr_node>(true)),
+      filter_(std::make_shared<mapnik::expr_node>(true)),
       else_filter_(false),
       also_filter_(false)  {}
 
-rule::rule(const rule& rhs, bool deep_copy)
+rule::rule(rule const& rhs)
     : name_(rhs.name_),
       min_scale_(rhs.min_scale_),
       max_scale_(rhs.max_scale_),
       syms_(rhs.syms_),
-      filter_(rhs.filter_),
+      filter_(std::make_shared<expr_node>(*rhs.filter_)),
       else_filter_(rhs.else_filter_),
-      also_filter_(rhs.also_filter_)
-{
-    if (deep_copy) {
-
-        std::string expr = to_expression_string(*filter_);
-        filter_ = parse_expression(expr,"utf8");
-        symbolizers::const_iterator it  = syms_.begin();
-        symbolizers::const_iterator end = syms_.end();
-
-        for(; it != end; ++it)
-        {
-            boost::apply_visitor(deepcopy_symbolizer(),*it);
-        }
-    }
-}
-
-rule& rule::operator=(rule const& rhs)
-{
-    rule tmp(rhs);
-    swap(tmp);
+      also_filter_(rhs.also_filter_) {}
+
+rule::rule(rule && rhs)
+    : name_(std::move(rhs.name_)),
+      min_scale_(std::move(rhs.min_scale_)),
+      max_scale_(std::move(rhs.max_scale_)),
+      syms_(std::move(rhs.syms_)),
+      filter_(std::move(rhs.filter_)),
+      else_filter_(std::move(rhs.else_filter_)),
+      also_filter_(std::move(rhs.also_filter_)) {}
+
+rule& rule::operator=(rule rhs)
+{
+    using std::swap;
+    swap(this->name_, rhs.name_);
+    swap(this->min_scale_, rhs.min_scale_);
+    swap(this->max_scale_, rhs.max_scale_);
+    swap(this->syms_, rhs.syms_);
+    swap(this->filter_, rhs.filter_);
+    swap(this->else_filter_, rhs.else_filter_);
+    swap(this->also_filter_, rhs.also_filter_);
     return *this;
 }
 
-bool rule::operator==(rule const& other)
+bool rule::operator==(rule const& rhs) const
 {
-    return  (this == &other);
+    return  (name_ == rhs.name_) &&
+        (min_scale_ == rhs.min_scale_) &&
+        (max_scale_ == rhs.max_scale_) &&
+        (syms_ == rhs.syms_) &&
+        (filter_ == rhs.filter_) &&
+        (else_filter_ == rhs.else_filter_) &&
+        (also_filter_ == rhs.also_filter_);
 }
 
-void rule::swap(rule& rhs) throw()
-{
-    name_=rhs.name_;
-    min_scale_=rhs.min_scale_;
-    max_scale_=rhs.max_scale_;
-    syms_=rhs.syms_;
-    filter_=rhs.filter_;
-    else_filter_=rhs.else_filter_;
-    also_filter_=rhs.also_filter_;
-}
 
 void rule::set_max_scale(double scale)
 {
@@ -198,9 +124,9 @@ std::string const& rule::get_name() const
     return name_;
 }
 
-void rule::append(symbolizer const& sym)
+void rule::append(symbolizer && sym)
 {
-    syms_.push_back(sym);
+    syms_.push_back(std::move(sym));
 }
 
 void rule::remove_at(size_t index)
@@ -266,9 +192,4 @@ bool rule::has_also_filter() const
     return also_filter_;
 }
 
-bool rule::active(double scale) const
-{
-    return ( !syms_.empty() && scale >= min_scale_ - 1e-6 && scale < max_scale_ + 1e-6);
-}
-
 }
diff --git a/src/save_map.cpp b/src/save_map.cpp
index edfa029..27eb755 100644
--- a/src/save_map.cpp
+++ b/src/save_map.cpp
@@ -22,26 +22,38 @@
 
 // mapnik
 #include <mapnik/rule.hpp>
+#include <mapnik/datasource.hpp>
 #include <mapnik/layer.hpp>
 #include <mapnik/feature_type_style.hpp>
 #include <mapnik/debug.hpp>
 #include <mapnik/save_map.hpp>
 #include <mapnik/map.hpp>
+#include <mapnik/symbolizer.hpp>
 #include <mapnik/ptree_helpers.hpp>
 #include <mapnik/expression_string.hpp>
 #include <mapnik/raster_colorizer.hpp>
-#include <mapnik/text_placements/simple.hpp>
-#include <mapnik/text_placements/list.hpp>
-#include <mapnik/text_placements/dummy.hpp>
+#include <mapnik/text/placements/simple.hpp>
+#include <mapnik/text/placements/list.hpp>
+#include <mapnik/text/placements/dummy.hpp>
 #include <mapnik/image_compositing.hpp>
 #include <mapnik/image_scaling.hpp>
 #include <mapnik/image_filter.hpp>
 #include <mapnik/image_filter_types.hpp>
 #include <mapnik/parse_path.hpp>
+#include <mapnik/symbolizer_utils.hpp>
+#include <mapnik/transform_processor.hpp>
+#include <mapnik/group/group_rule.hpp>
+#include <mapnik/group/group_layout.hpp>
+#include <mapnik/group/group_symbolizer_properties.hpp>
+#include <mapnik/util/variant.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
+#pragma GCC diagnostic pop
 #include <boost/optional.hpp>
+#include <boost/version.hpp>
 #include <boost/property_tree/ptree.hpp>
 #include <boost/property_tree/xml_parser.hpp>
 
@@ -53,465 +65,280 @@ namespace mapnik
 using boost::property_tree::ptree;
 using boost::optional;
 
-
-class serialize_symbolizer : public boost::static_visitor<>
+void serialize_text_placements(ptree & node, text_placements_ptr const& p, bool explicit_defaults)
 {
-public:
-    serialize_symbolizer( ptree & r , bool explicit_defaults):
-        rule_(r),
-        explicit_defaults_(explicit_defaults) {}
+    text_symbolizer_properties dfl;
+    p->defaults.to_xml(node, explicit_defaults, dfl);
+    // Known types:
+    //   - text_placements_dummy: no handling required
+    //   - text_placements_simple: positions string
+    //   - text_placements_list: list string
 
-    void operator () ( point_symbolizer const& sym )
+    text_placements_simple *simple = dynamic_cast<text_placements_simple *>(p.get());
+    if (simple)
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("PointSymbolizer", ptree()))->second;
-
-        add_image_attributes( sym_node, sym );
-
-        point_symbolizer dfl;
-        if (sym.get_allow_overlap() != dfl.get_allow_overlap() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "allow-overlap", sym.get_allow_overlap() );
-        }
-        if ( sym.get_opacity() != dfl.get_opacity() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "opacity", sym.get_opacity() );
-        }
-        if ( sym.get_point_placement() != dfl.get_point_placement() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "placement", sym.get_point_placement() );
-        }
-        if (sym.get_image_transform())
-        {
-            std::string tr_str = sym.get_image_transform_string();
-            set_attr( sym_node, "transform", tr_str );
-        }
-        serialize_symbolizer_base(sym_node, sym);
+        set_attr(node, "placement-type", "simple");
+        set_attr(node, "placements", simple->get_positions());
     }
 
-    void operator () ( line_symbolizer const& sym )
+    text_placements_list *list = dynamic_cast<text_placements_list *>(p.get());
+    if (list)
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("LineSymbolizer", ptree()))->second;
-
-        const stroke & strk =  sym.get_stroke();
-        add_stroke_attributes(sym_node, strk);
-
-        line_symbolizer dfl;
-        if ( sym.get_rasterizer() != dfl.get_rasterizer() || explicit_defaults_ )
+        set_attr(node, "placement-type", "list");
+        //dfl = last properties passed as default so only attributes that change are actually written
+        text_symbolizer_properties *dfl = &(list->defaults);
+        for (unsigned i=0; i < list->size(); ++i)
         {
-            set_attr( sym_node, "rasterizer", sym.get_rasterizer() );
+            ptree & placement_node = node.push_back(ptree::value_type("Placement", ptree()))->second;
+            list->get(i).to_xml(placement_node, explicit_defaults, *dfl);
+            dfl = &(list->get(i));
         }
-        if ( sym.offset() != dfl.offset() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "offset", sym.offset() );
-        }
-        serialize_symbolizer_base(sym_node, sym);
     }
+}
 
-    void operator () ( line_pattern_symbolizer const& sym )
+void serialize_raster_colorizer(ptree & sym_node,
+                                raster_colorizer_ptr const& colorizer,
+                                bool explicit_defaults)
+{
+    ptree & col_node = sym_node.push_back(
+        ptree::value_type("RasterColorizer", ptree() ))->second;
+    raster_colorizer dfl;
+    if (colorizer->get_default_mode() != dfl.get_default_mode() || explicit_defaults)
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("LinePatternSymbolizer",
-                              ptree()))->second;
-
-        add_image_attributes( sym_node, sym );
-        serialize_symbolizer_base(sym_node, sym);
+        set_attr(col_node, "default-mode", colorizer->get_default_mode());
     }
-
-    void operator () ( polygon_symbolizer const& sym )
+    if (colorizer->get_default_color() != dfl.get_default_color() || explicit_defaults)
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("PolygonSymbolizer", ptree()))->second;
-        polygon_symbolizer dfl;
-
-        if ( sym.get_fill() != dfl.get_fill() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "fill", sym.get_fill() );
-        }
-        if ( sym.get_opacity() != dfl.get_opacity() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "fill-opacity", sym.get_opacity() );
-        }
-        if ( sym.get_gamma() != dfl.get_gamma() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "gamma", sym.get_gamma() );
-        }
-        if ( sym.get_gamma_method() != dfl.get_gamma_method() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "gamma-method", sym.get_gamma_method() );
-        }
-        serialize_symbolizer_base(sym_node, sym);
+        set_attr(col_node, "default-color", colorizer->get_default_color());
     }
-
-    void operator () ( polygon_pattern_symbolizer const& sym )
+    if (colorizer->get_epsilon() != dfl.get_epsilon() || explicit_defaults)
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("PolygonPatternSymbolizer",
-                              ptree()))->second;
-        polygon_pattern_symbolizer dfl(parse_path(""));
-
-        if ( sym.get_alignment() != dfl.get_alignment() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "alignment", sym.get_alignment() );
-        }
-        if ( sym.get_gamma() != dfl.get_gamma() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "gamma", sym.get_gamma() );
-        }
-        if ( sym.get_gamma_method() != dfl.get_gamma_method() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "gamma-method", sym.get_gamma_method() );
-        }
-        add_image_attributes( sym_node, sym );
-        serialize_symbolizer_base(sym_node, sym);
+        set_attr(col_node, "epsilon", colorizer->get_epsilon());
     }
 
-    void operator () ( raster_symbolizer const& sym )
+    colorizer_stops const& stops = colorizer->get_stops();
+    for (auto const& stop : stops)
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("RasterSymbolizer", ptree()))->second;
-        raster_symbolizer dfl;
-
-        if ( sym.get_scaling_method() != dfl.get_scaling_method() || explicit_defaults_ )
+        ptree & stop_node = col_node.push_back( ptree::value_type("stop", ptree()) )->second;
+        set_attr(stop_node, "value", stop.get_value());
+        set_attr(stop_node, "color", stop.get_color());
+        set_attr(stop_node, "mode", stop.get_mode().as_string());
+        if (!stop.get_label().empty())
         {
-            set_attr( sym_node, "scaling", *scaling_method_to_string(sym.get_scaling_method()) );
+            set_attr(stop_node, "label", stop.get_label());
         }
+    }
+}
 
-        if ( sym.get_opacity() != dfl.get_opacity() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "opacity", sym.get_opacity() );
-        }
+void serialize_group_symbolizer_properties(ptree & sym_node,
+                                           group_symbolizer_properties_ptr const& properties,
+                                           bool explicit_defaults);
 
-        if ( sym.get_mesh_size() != dfl.get_mesh_size() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "mesh-size", sym.get_mesh_size() );
-        }
+template <typename Meta>
+class serialize_symbolizer_property : public util::static_visitor<>
+{
+public:
+    serialize_symbolizer_property(Meta const& meta,
+                                  boost::property_tree::ptree & node,
+                                  bool explicit_defaults)
+        : meta_(meta),
+          node_(node),
+          explicit_defaults_(explicit_defaults) {}
 
-        if (sym.get_colorizer())
+    void operator() ( mapnik::enumeration_wrapper const& e) const
+    {
+        auto const& convert_fun_ptr(std::get<1>(meta_));
+        if ( convert_fun_ptr )
         {
-            serialize_raster_colorizer(sym_node, sym.get_colorizer(),
-                                       explicit_defaults_);
+            node_.put("<xmlattr>." + std::string(std::get<0>(meta_)), convert_fun_ptr(e));
         }
+    }
 
-        boost::optional<bool> premultiplied = sym.premultiplied();
-        if (premultiplied)
+    void operator () ( path_expression_ptr const& expr) const
+    {
+        if (expr)
         {
-            set_attr( sym_node, "premultiplied", *sym.premultiplied());
+            node_.put("<xmlattr>." + std::string(std::get<0>(meta_)), path_processor::to_string(*expr));
         }
-
-        serialize_symbolizer_base(sym_node, sym);
     }
 
-    void operator () ( shield_symbolizer const& sym )
+    void operator () (text_placements_ptr const& expr) const
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("ShieldSymbolizer",
-                              ptree()))->second;
-
-        add_font_attributes(sym_node, sym);
-        add_image_attributes(sym_node, sym);
-
-        // pseudo-default-construct a shield_symbolizer. It is used
-        // to avoid printing of attributes with default values without
-        // repeating the default values here.
-        // maybe add a real, explicit default-ctor?
-
-        shield_symbolizer dfl;
-
-        if (sym.get_unlock_image() != dfl.get_unlock_image() || explicit_defaults_)
+        if (expr)
         {
-            set_attr(sym_node, "unlock-image", sym.get_unlock_image());
+            serialize_text_placements(node_, expr, explicit_defaults_);
         }
+    }
 
-        if (sym.get_placement_options()->defaults.format.text_opacity !=
-                dfl.get_placement_options()->defaults.format.text_opacity || explicit_defaults_)
-        {
-            set_attr(sym_node, "text-opacity", sym.get_placement_options()->defaults.format.text_opacity);
-        }
-        position displacement = sym.get_shield_displacement();
-        if (displacement.first != dfl.get_shield_displacement().first || explicit_defaults_)
-        {
-            set_attr(sym_node, "shield-dx", displacement.first);
-        }
-        if (displacement.second != dfl.get_shield_displacement().second || explicit_defaults_)
-        {
-            set_attr(sym_node, "shield-dy", displacement.second);
-        }
-        if (sym.get_image_transform())
+    void operator () (raster_colorizer_ptr const& expr) const
+    {
+        if (expr)
         {
-            std::string tr_str = sym.get_image_transform_string();
-            set_attr( sym_node, "transform", tr_str );
+            serialize_raster_colorizer(node_, expr, explicit_defaults_);
         }
-        serialize_symbolizer_base(sym_node, sym);
     }
 
-    void operator () ( text_symbolizer const& sym )
+    void operator () (transform_type const& expr) const
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("TextSymbolizer",
-                              ptree()))->second;
-
-        add_font_attributes( sym_node, sym);
-        serialize_symbolizer_base(sym_node, sym);
-        text_symbolizer dfl;
-        if (sym.get_halo_rasterizer() != dfl.get_halo_rasterizer() || explicit_defaults_)
+        if (expr)
         {
-            set_attr(sym_node, "halo-rasterizer", sym.get_halo_rasterizer());
+            node_.put("<xmlattr>." + std::string(std::get<0>(meta_)), transform_processor_type::to_string(*expr));
         }
     }
 
-    void operator () ( building_symbolizer const& sym )
+    void operator () (expression_ptr const& expr) const
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("BuildingSymbolizer", ptree()))->second;
-        building_symbolizer dfl;
-
-        if ( sym.get_fill() != dfl.get_fill() || explicit_defaults_ )
-        {
-            set_attr( sym_node, "fill", sym.get_fill() );
-        }
-        if ( sym.get_opacity() != dfl.get_opacity() || explicit_defaults_ )
+        if (expr)
         {
-            set_attr( sym_node, "fill-opacity", sym.get_opacity() );
+            node_.put("<xmlattr>." + std::string(std::get<0>(meta_)), mapnik::to_expression_string(*expr));
         }
-        if (sym.height())
-        {
-            set_attr( sym_node, "height", mapnik::to_expression_string(*sym.height()) );
-        }
-        serialize_symbolizer_base(sym_node, sym);
     }
 
-    void operator () ( markers_symbolizer const& sym)
+    void operator () (dash_array const& dash) const
     {
-        ptree & sym_node = rule_.push_back(
-            ptree::value_type("MarkersSymbolizer", ptree()))->second;
-        markers_symbolizer dfl(parse_path("")); //TODO: Parameter?
-        if (sym.get_filename())
-        {
-            std::string filename = path_processor_type::to_string(*sym.get_filename());
-            set_attr( sym_node, "file", filename );
-        }
-        if (sym.get_allow_overlap() != dfl.get_allow_overlap() || explicit_defaults_)
-        {
-            set_attr( sym_node, "allow-overlap", sym.get_allow_overlap() );
-        }
-        if (sym.get_ignore_placement() != dfl.get_ignore_placement() || explicit_defaults_)
-        {
-            set_attr( sym_node, "ignore-placement", sym.get_ignore_placement() );
-        }
-        if (sym.get_spacing() != dfl.get_spacing() || explicit_defaults_)
-        {
-            set_attr( sym_node, "spacing", sym.get_spacing() );
-        }
-        if (sym.get_max_error() != dfl.get_max_error() || explicit_defaults_)
-        {
-            set_attr( sym_node, "max-error", sym.get_max_error() );
-        }
-        if (sym.get_fill() != dfl.get_fill() || explicit_defaults_)
-        {
-            set_attr( sym_node, "fill", sym.get_fill() );
-        }
-        if (sym.get_fill_opacity() != dfl.get_fill_opacity() || explicit_defaults_)
-        {
-            set_attr( sym_node, "fill-opacity", sym.get_fill_opacity() );
-        }
-        if (sym.get_opacity() != dfl.get_opacity() || explicit_defaults_)
-        {
-            set_attr( sym_node, "opacity", sym.get_opacity() );
-        }
-        if (sym.get_width() != dfl.get_width() || explicit_defaults_)
-        {
-            set_attr( sym_node, "width", to_expression_string(*sym.get_width()) );
-        }
-        if (sym.get_height() != dfl.get_height() || explicit_defaults_)
-        {
-            set_attr( sym_node, "height", to_expression_string(*sym.get_height()) );
-        }
-        if (sym.get_marker_placement() != dfl.get_marker_placement() || explicit_defaults_)
-        {
-            set_attr( sym_node, "placement", sym.get_marker_placement() );
-        }
-        if ( sym.get_marker_multi_policy() != dfl.get_marker_multi_policy() || explicit_defaults_ )
+        std::ostringstream os;
+        for (std::size_t i = 0; i < dash.size(); ++i)
         {
-            set_attr( sym_node, "multi-policy", sym.get_marker_multi_policy() );
-        }
-        if (sym.get_image_transform())
-        {
-            std::string tr_str = sym.get_image_transform_string();
-            set_attr( sym_node, "transform", tr_str );
+            os << dash[i].first << ", " << dash[i].second;
+            if ( i + 1 < dash.size() ) os << ",";
         }
+        node_.put("<xmlattr>." + std::string(std::get<0>(meta_)), os.str());
+    }
 
-        boost::optional<stroke> const& strk = sym.get_stroke();
-        if (strk)
+    void operator () (group_symbolizer_properties_ptr const& properties) const
+    {
+        if (properties)
         {
-            add_stroke_attributes(sym_node, *strk);
+            serialize_group_symbolizer_properties(node_, properties, explicit_defaults_);
         }
+    }
 
-        serialize_symbolizer_base(sym_node, sym);
+    template <typename T>
+    void operator () ( T const& val ) const
+    {
+        node_.put("<xmlattr>." + std::string(std::get<0>(meta_)), val );
     }
 
+private:
+    Meta const& meta_;
+    boost::property_tree::ptree & node_;
+    bool explicit_defaults_;
+};
+
+class serialize_symbolizer : public util::static_visitor<>
+{
+public:
+    serialize_symbolizer( ptree & r , bool explicit_defaults)
+        : rule_(r),
+          explicit_defaults_(explicit_defaults) {}
+
     template <typename Symbolizer>
     void operator () ( Symbolizer const& sym)
     {
-        // not-supported
-#ifdef MAPNIK_DEBUG
-        MAPNIK_LOG_WARN(save_map) << typeid(sym).name() << " is not supported";
-#endif
+        ptree & sym_node = rule_.push_back(
+            ptree::value_type(symbolizer_traits<Symbolizer>::name(), ptree()))->second;
+        serialize_symbolizer_properties(sym_node,sym);
     }
 
 private:
-    serialize_symbolizer();
 
-    void serialize_symbolizer_base(ptree & node, symbolizer_base const& sym)
+    void serialize_symbolizer_properties( ptree & sym_node, symbolizer_base const& sym)
     {
-        symbolizer_base dfl = symbolizer_base();
-        if (sym.get_transform())
-        {
-            std::string tr_str = sym.get_transform_string();
-            set_attr( node, "geometry-transform", tr_str );
-        }
-        if (sym.clip() != dfl.clip() || explicit_defaults_)
-        {
-            set_attr( node, "clip", sym.clip() );
-        }
-        if (sym.simplify_algorithm() != dfl.simplify_algorithm() || explicit_defaults_)
-        {
-            set_attr( node, "simplify-algorithm", *simplify_algorithm_to_string(sym.simplify_algorithm()) );
-        }
-        if (sym.simplify_tolerance() != dfl.simplify_tolerance() || explicit_defaults_)
-        {
-            set_attr( node, "simplify", sym.simplify_tolerance() );
-        }
-        if (sym.smooth() != dfl.smooth() || explicit_defaults_)
-        {
-            set_attr( node, "smooth", sym.smooth() );
-        }
-        if (sym.comp_op() != dfl.comp_op() || explicit_defaults_)
+        for (auto const& prop : sym.properties)
         {
-            set_attr( node, "comp-op", *comp_op_to_string(sym.comp_op()) );
+            util::apply_visitor(serialize_symbolizer_property<property_meta_type>(
+                                    get_meta(prop.first), sym_node, explicit_defaults_),
+                                prop.second);
         }
     }
+    ptree & rule_;
+    bool explicit_defaults_;
+};
 
-    void serialize_raster_colorizer(ptree & sym_node,
-                                    raster_colorizer_ptr const& colorizer,
-                                    bool explicit_defaults)
-    {
-        ptree & col_node = sym_node.push_back(
-            ptree::value_type("RasterColorizer", ptree() ))->second;
+class serialize_group_layout : public util::static_visitor<>
+{
+public:
+    serialize_group_layout(ptree & parent_node, bool explicit_defaults)
+        : parent_node_(parent_node),
+          explicit_defaults_(explicit_defaults) {}
 
-        set_attr(col_node, "default-mode", colorizer->get_default_mode());
-        set_attr(col_node, "default-color", colorizer->get_default_color());
-        set_attr(col_node, "epsilon", colorizer->get_epsilon());
+    void operator() ( simple_row_layout const& layout) const
+    {
+        ptree & layout_node = parent_node_.push_back(
+                ptree::value_type("SimpleLayout", ptree() ))->second;
 
-        unsigned i;
-        colorizer_stops const &stops = colorizer->get_stops();
-        for (i=0; i<stops.size(); i++) {
-            ptree &stop_node = col_node.push_back( ptree::value_type("stop", ptree()) )->second;
-            set_attr(stop_node, "value", stops[i].get_value());
-            set_attr(stop_node, "color", stops[i].get_color());
-            set_attr(stop_node, "mode", stops[i].get_mode().as_string());
-            if (stops[i].get_label()!=std::string(""))
-                set_attr(stop_node, "label", stops[i].get_label());
+        simple_row_layout dfl;
+        if (explicit_defaults_ || layout.get_item_margin() != dfl.get_item_margin())
+        {
+            set_attr(layout_node, "item-margin", layout.get_item_margin());
         }
-
     }
 
-    void add_image_attributes(ptree & node, symbolizer_with_image const& sym)
+    void operator () ( pair_layout const& layout) const
     {
-        if (sym.get_filename())
+        ptree & layout_node = parent_node_.push_back(
+                ptree::value_type("PairLayout", ptree() ))->second;
+
+        pair_layout dfl;
+        if (explicit_defaults_ || layout.get_item_margin() != dfl.get_item_margin())
         {
-            std::string filename = path_processor_type::to_string( *sym.get_filename());
-            set_attr( node, "file", filename );
+            set_attr(layout_node, "item-margin", layout.get_item_margin());
         }
-        if (sym.get_opacity() != 1.0 || explicit_defaults_ )
+        if (explicit_defaults_ || layout.get_max_difference() != dfl.get_max_difference())
         {
-            set_attr( node, "opacity", sym.get_opacity() );
+            set_attr(layout_node, "max-difference", layout.get_max_difference());
         }
     }
 
-    void add_font_attributes(ptree & node, const text_symbolizer & sym)
-    {
-        text_placements_ptr p = sym.get_placement_options();
-        p->defaults.to_xml(node, explicit_defaults_);
-        /* Known types:
-           - text_placements_dummy: no handling required
-           - text_placements_simple: positions string
-           - text_placements_list: list string
-        */
-        text_placements_simple *simple = dynamic_cast<text_placements_simple *>(p.get());
-        text_placements_list *list = dynamic_cast<text_placements_list *>(p.get());
-        if (simple) {
-            set_attr(node, "placement-type", "simple");
-            set_attr(node, "placements", simple->get_positions());
-        }
-        if (list) {
-            set_attr(node, "placement-type", "list");
-            unsigned i;
-            //dfl = last properties passed as default so only attributes that change are actually written
-            text_symbolizer_properties *dfl = &(list->defaults);
-            for (i=0; i < list->size(); i++) {
-                ptree &placement_node = node.push_back(ptree::value_type("Placement", ptree()))->second;
-                list->get(i).to_xml(placement_node, explicit_defaults_, *dfl);
-                dfl = &(list->get(i));
-            }
-        }
+    template <typename T>
+    void operator () ( T const& ) const {}
+
+private:
+    ptree & parent_node_;
+    bool explicit_defaults_;
+};
+
+void serialize_group_rule( ptree & parent_node, const group_rule & r, bool explicit_defaults)
+{
+    ptree & rule_node = parent_node.push_back(
+        ptree::value_type("GroupRule", ptree() ))->second;
+
+    group_rule dfl;
+    std::string filter = mapnik::to_expression_string(*r.get_filter());
+    std::string default_filter = mapnik::to_expression_string(*dfl.get_filter());
+
+    if (filter != default_filter)
+    {
+        rule_node.push_back( ptree::value_type(
+                                 "Filter", ptree()))->second.put_value( filter );
     }
 
-    void add_stroke_attributes(ptree & node, const stroke & strk)
+    if (r.get_repeat_key())
     {
+        std::string repeat_key = mapnik::to_expression_string(*r.get_repeat_key());
+        rule_node.push_back( ptree::value_type(
+                                 "RepeatKey", ptree()))->second.put_value( repeat_key );
+    }
 
-        stroke dfl = stroke();
+    rule::symbolizers::const_iterator begin = r.get_symbolizers().begin();
+    rule::symbolizers::const_iterator end = r.get_symbolizers().end();
+    serialize_symbolizer serializer( rule_node, explicit_defaults);
+    std::for_each( begin, end , [&serializer](symbolizer const& sym) { util::apply_visitor( std::ref(serializer), sym);} );
+}
 
-        if ( strk.get_color() != dfl.get_color() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke", strk.get_color() );
-        }
-        if ( strk.get_width() != dfl.get_width() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke-width", strk.get_width() );
-        }
-        if ( strk.get_opacity() != dfl.get_opacity() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke-opacity", strk.get_opacity() );
-        }
-        if ( strk.get_line_join() != dfl.get_line_join() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke-linejoin", strk.get_line_join() );
-        }
-        if ( strk.get_line_cap() != dfl.get_line_cap() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke-linecap", strk.get_line_cap() );
-        }
-        if ( strk.get_gamma() != dfl.get_gamma() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke-gamma", strk.get_gamma());
-        }
-        if ( strk.get_gamma_method() != dfl.get_gamma_method() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke-gamma-method", strk.get_gamma_method() );
-        }
-        if ( strk.dash_offset() != dfl.dash_offset() || explicit_defaults_ )
-        {
-            set_attr( node, "stroke-dashoffset", strk.dash_offset());
-        }
-        if ( ! strk.get_dash_array().empty() )
-        {
-            std::ostringstream os;
-            const dash_array & dashes = strk.get_dash_array();
-            for (unsigned i = 0; i < dashes.size(); ++i) {
-                os << dashes[i].first << ", " << dashes[i].second;
-                if ( i + 1 < dashes.size() ) os << ", ";
-            }
-            set_attr( node, "stroke-dasharray", os.str() );
-        }
-    }
+void serialize_group_symbolizer_properties(ptree & sym_node,
+                                           group_symbolizer_properties_ptr const& properties,
+                                           bool explicit_defaults)
+{
+    util::apply_visitor(serialize_group_layout(sym_node, explicit_defaults), properties->get_layout());
 
-    ptree & rule_;
-    bool explicit_defaults_;
-};
+    for (auto const& rule : properties->get_rules())
+    {
+        serialize_group_rule(sym_node, *rule, explicit_defaults);
+    }
+}
 
-void serialize_rule( ptree & style_node, const rule & r, bool explicit_defaults)
+void serialize_rule( ptree & style_node, rule const& r, bool explicit_defaults)
 {
     ptree & rule_node = style_node.push_back(
         ptree::value_type("Rule", ptree() ))->second;
@@ -563,14 +390,11 @@ void serialize_rule( ptree & style_node, const rule & r, bool explicit_defaults)
     rule::symbolizers::const_iterator begin = r.get_symbolizers().begin();
     rule::symbolizers::const_iterator end = r.get_symbolizers().end();
     serialize_symbolizer serializer( rule_node, explicit_defaults);
-    std::for_each( begin, end , boost::apply_visitor( serializer ));
+    std::for_each( begin, end , [&serializer](symbolizer const& sym) { util::apply_visitor( std::ref(serializer), sym);});
 }
 
-void serialize_style( ptree & map_node, Map::const_style_iterator style_it, bool explicit_defaults )
+void serialize_style( ptree & map_node, std::string const& name, feature_type_style const& style, bool explicit_defaults )
 {
-    feature_type_style const& style = style_it->second;
-    std::string const& name = style_it->first;
-
     ptree & style_node = map_node.push_back(
         ptree::value_type("Style", ptree()))->second;
 
@@ -589,6 +413,12 @@ void serialize_style( ptree & map_node, Map::const_style_iterator style_it, bool
         set_attr(style_node, "opacity", opacity);
     }
 
+    bool image_filters_inflate = style.image_filters_inflate();
+    if (image_filters_inflate != dfl.image_filters_inflate() || explicit_defaults)
+    {
+        set_attr(style_node, "image-filters-inflate", image_filters_inflate);
+    }
+
     boost::optional<composite_mode_e> comp_op = style.comp_op();
     if (comp_op)
     {
@@ -619,32 +449,25 @@ void serialize_style( ptree & map_node, Map::const_style_iterator style_it, bool
         }
     }
 
-    rules::const_iterator it = style.get_rules().begin();
-    rules::const_iterator end = style.get_rules().end();
-    for (; it != end; ++it)
+    for (auto const& r : style.get_rules())
     {
-        serialize_rule( style_node, * it , explicit_defaults);
+        serialize_rule( style_node, r , explicit_defaults);
     }
 
 }
 
-void serialize_fontset( ptree & map_node, Map::const_fontset_iterator fontset_it )
+void serialize_fontset( ptree & map_node, std::string const& name, font_set const& fontset)
 {
-    font_set const& fontset = fontset_it->second;
-    std::string const& name = fontset_it->first;
-
     ptree & fontset_node = map_node.push_back(
         ptree::value_type("FontSet", ptree()))->second;
 
     set_attr(fontset_node, "name", name);
 
-    std::vector<std::string>::const_iterator it = fontset.get_face_names().begin();
-    std::vector<std::string>::const_iterator end = fontset.get_face_names().end();
-    for (; it != end; ++it)
+    for (auto const& name : fontset.get_face_names())
     {
         ptree & font_node = fontset_node.push_back(
             ptree::value_type("Font", ptree()))->second;
-        set_attr(font_node, "face-name", *it);
+        set_attr(font_node, "face-name", name);
     }
 
 }
@@ -654,41 +477,39 @@ void serialize_datasource( ptree & layer_node, datasource_ptr datasource)
     ptree & datasource_node = layer_node.push_back(
         ptree::value_type("Datasource", ptree()))->second;
 
-    parameters::const_iterator it = datasource->params().begin();
-    parameters::const_iterator end = datasource->params().end();
-    for (; it != end; ++it)
+    for ( auto const& p : datasource->params())
     {
         boost::property_tree::ptree & param_node = datasource_node.push_back(
             boost::property_tree::ptree::value_type("Parameter",
                                                     boost::property_tree::ptree()))->second;
-        param_node.put("<xmlattr>.name", it->first );
-        param_node.put_value( it->second );
+        param_node.put("<xmlattr>.name", p.first );
+        param_node.put_value( p.second );
 
     }
 }
 
-class serialize_type : public boost::static_visitor<>
+class serialize_type : public util::static_visitor<>
 {
 public:
     serialize_type( boost::property_tree::ptree & node):
         node_(node) {}
 
-    void operator () ( mapnik::value_integer val ) const
+    void operator () ( mapnik::value_integer ) const
     {
         node_.put("<xmlattr>.type", "int" );
     }
 
-    void operator () ( mapnik::value_double val ) const
+    void operator () ( mapnik::value_double ) const
     {
         node_.put("<xmlattr>.type", "float" );
     }
 
-    void operator () ( std::string const& val ) const
+    void operator () ( std::string const& ) const
     {
         node_.put("<xmlattr>.type", "string" );
     }
 
-    void operator () ( mapnik::value_null val ) const
+    void operator () ( mapnik::value_null ) const
     {
         node_.put("<xmlattr>.type", "string" );
     }
@@ -703,16 +524,14 @@ void serialize_parameters( ptree & map_node, mapnik::parameters const& params)
         ptree & params_node = map_node.push_back(
             ptree::value_type("Parameters", ptree()))->second;
 
-        parameters::const_iterator it = params.begin();
-        parameters::const_iterator end = params.end();
-        for (; it != end; ++it)
+        for (auto const& p : params)
         {
             boost::property_tree::ptree & param_node = params_node.push_back(
                 boost::property_tree::ptree::value_type("Parameter",
                                                         boost::property_tree::ptree()))->second;
-            param_node.put("<xmlattr>.name", it->first );
-            param_node.put_value( it->second );
-            boost::apply_visitor(serialize_type(param_node),it->second);
+            param_node.put("<xmlattr>.name", p.first );
+            param_node.put_value( p.second );
+            util::apply_visitor(serialize_type(param_node),p.second);
         }
     }
 }
@@ -783,13 +602,12 @@ void serialize_layer( ptree & map_node, const layer & layer, bool explicit_defau
         set_attr( layer_node, "maximum-extent", s.str() );
     }
 
-    std::vector<std::string> const& style_names = layer.styles();
-    for (unsigned i = 0; i < style_names.size(); ++i)
+    for (auto const& name : layer.styles())
     {
         boost::property_tree::ptree & style_node = layer_node.push_back(
             boost::property_tree::ptree::value_type("StyleName",
                                                     boost::property_tree::ptree()))->second;
-        style_node.put_value( style_names[i] );
+        style_node.put_value(name);
     }
 
     datasource_ptr datasource = layer.datasource();
@@ -799,7 +617,7 @@ void serialize_layer( ptree & map_node, const layer & layer, bool explicit_defau
     }
 }
 
-void serialize_map(ptree & pt, Map const & map, bool explicit_defaults)
+void serialize_map(ptree & pt, Map const& map, bool explicit_defaults)
 {
 
     ptree & map_node = pt.push_back(ptree::value_type("Map", ptree() ))->second;
@@ -812,12 +630,31 @@ void serialize_map(ptree & pt, Map const & map, bool explicit_defaults)
         set_attr( map_node, "background-color", * c );
     }
 
+    optional<std::string> const& font_directory = map.font_directory();
+    if ( font_directory )
+    {
+        set_attr( map_node, "font-directory", *font_directory );
+    }
+
     optional<std::string> const& image_filename = map.background_image();
     if ( image_filename )
     {
         set_attr( map_node, "background-image", *image_filename );
     }
 
+    composite_mode_e comp_op = map.background_image_comp_op();
+    if (comp_op != src_over || explicit_defaults)
+    {
+        set_attr(map_node, "background-image-comp-op", *comp_op_to_string(comp_op));
+    }
+
+    double opacity = map.background_image_opacity();
+    if (opacity != 1.0 || explicit_defaults)
+    {
+        set_attr(map_node, "background-image-opacity", opacity);
+    }
+
+
     int buffer_size = map.buffer_size();
     if ( buffer_size || explicit_defaults)
     {
@@ -840,44 +677,46 @@ void serialize_map(ptree & pt, Map const & map, bool explicit_defaults)
         set_attr( map_node, "maximum-extent", s.str() );
     }
 
+
+    for (auto const& kv : map.fontsets())
     {
-        Map::const_fontset_iterator it = map.fontsets().begin();
-        Map::const_fontset_iterator end = map.fontsets().end();
-        for (; it != end; ++it)
-        {
-            serialize_fontset( map_node, it);
-        }
+        serialize_fontset( map_node, kv.first, kv.second);
     }
 
     serialize_parameters( map_node, map.get_extra_parameters());
 
-    Map::const_style_iterator it = map.styles().begin();
-    Map::const_style_iterator end = map.styles().end();
-    for (; it != end; ++it)
+    for ( auto const& kv : map.styles())
     {
-        serialize_style( map_node, it, explicit_defaults);
+        serialize_style( map_node, kv.first, kv.second, explicit_defaults);
     }
 
-    std::vector<layer> const & layers = map.layers();
-    for (unsigned i = 0; i < layers.size(); ++i )
+    for (auto const& layer : map.layers())
     {
-        serialize_layer( map_node, layers[i], explicit_defaults );
+        serialize_layer( map_node, layer, explicit_defaults );
     }
 }
 
-void save_map(Map const & map, std::string const& filename, bool explicit_defaults)
+void save_map(Map const& map, std::string const& filename, bool explicit_defaults)
 {
     ptree pt;
     serialize_map(pt,map,explicit_defaults);
-    write_xml(filename,pt,std::locale(),boost::property_tree::xml_writer_make_settings(' ',4));
+#if BOOST_VERSION >= 105600
+    write_xml(filename,pt,std::locale(),boost::property_tree::xml_writer_make_settings<ptree::key_type>(' ',2));
+#else
+    write_xml(filename,pt,std::locale(),boost::property_tree::xml_writer_make_settings(' ',2));
+#endif
 }
 
-std::string save_map_to_string(Map const & map, bool explicit_defaults)
+std::string save_map_to_string(Map const& map, bool explicit_defaults)
 {
     ptree pt;
     serialize_map(pt,map,explicit_defaults);
     std::ostringstream ss;
-    write_xml(ss,pt,boost::property_tree::xml_writer_make_settings(' ',4));
+#if BOOST_VERSION >= 105600
+    write_xml(ss,pt,boost::property_tree::xml_writer_make_settings<ptree::key_type>(' ',2));
+#else
+    write_xml(ss,pt,boost::property_tree::xml_writer_make_settings(' ',2));
+#endif
     return ss.str();
 }
 
diff --git a/src/shield_symbolizer.cpp b/src/shield_symbolizer.cpp
deleted file mode 100644
index f7b7d0f..0000000
--- a/src/shield_symbolizer.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/shield_symbolizer.hpp>
-#include <mapnik/image_data.hpp>
-#include <mapnik/image_reader.hpp>
-
-// boost
-#include <boost/scoped_ptr.hpp>
-
-namespace mapnik
-{
-
-shield_symbolizer::shield_symbolizer(text_placements_ptr placements)
-    : text_symbolizer(placements),
-      symbolizer_with_image(),
-      unlock_image_(false),
-      shield_displacement_(0,0)
-{
-}
-
-shield_symbolizer::shield_symbolizer(
-    expression_ptr name,
-    std::string const& face_name,
-    float size,
-    color const& fill,
-    path_expression_ptr file)
-    : text_symbolizer(name, face_name, size, fill),
-      symbolizer_with_image(file),
-      unlock_image_(false),
-      shield_displacement_(0, 0)
-{
-}
-
-shield_symbolizer::shield_symbolizer(
-    expression_ptr name,
-    float size,
-    color const& fill,
-    path_expression_ptr file)
-    : text_symbolizer(name, size, fill),
-      symbolizer_with_image(file),
-      unlock_image_(false),
-      shield_displacement_(0, 0)
-{
-}
-
-void shield_symbolizer::set_unlock_image(bool unlock_image)
-{
-    unlock_image_ = unlock_image;
-}
-
-bool shield_symbolizer::get_unlock_image() const
-{
-    return unlock_image_;
-}
-
-void shield_symbolizer::set_shield_displacement(double shield_dx,double shield_dy)
-{
-    shield_displacement_ = std::make_pair(shield_dx, shield_dy);
-}
-
-position const& shield_symbolizer::get_shield_displacement() const
-{
-    return shield_displacement_;
-}
-
-}
diff --git a/src/simplify.cpp b/src/simplify.cpp
index f8e7e23..e501367 100644
--- a/src/simplify.cpp
+++ b/src/simplify.cpp
@@ -2,13 +2,17 @@
 #include <mapnik/simplify.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wredeclared-class-member"
 #include <boost/assign/list_of.hpp>
 #include <boost/bimap.hpp>
+#pragma GCC diagnostic pop
 
 namespace mapnik
 {
 
-typedef boost::bimap<simplify_algorithm_e, std::string> simplify_algorithm_lookup_type;
+using simplify_algorithm_lookup_type = boost::bimap<simplify_algorithm_e, std::string>;
 static const simplify_algorithm_lookup_type simplify_lookup = boost::assign::list_of<simplify_algorithm_lookup_type::relation>
     (radial_distance,"radial-distance")
     (douglas_peucker,"douglas-peucker")
diff --git a/src/stroke.cpp b/src/stroke.cpp
deleted file mode 100644
index deb4ce6..0000000
--- a/src/stroke.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <mapnik/stroke.hpp>
-#include <mapnik/enumeration.hpp>
-
-namespace mapnik
-{
-
-static const char * line_cap_strings[] = {
-    "butt",
-    "square",
-    "round",
-    ""
-};
-
-
-IMPLEMENT_ENUM( line_cap_e, line_cap_strings )
-
-
-static const char * line_join_strings[] = {
-    "miter",
-    "miter_revert",
-    "round",
-    "bevel",
-    ""
-};
-
-IMPLEMENT_ENUM( line_join_e, line_join_strings )
-
-stroke::stroke()
-: c_(0,0,0),
-    width_(1.0),
-    opacity_(1.0),
-    line_cap_(BUTT_CAP),
-    line_join_(MITER_JOIN),
-    gamma_(1.0),
-    gamma_method_(GAMMA_POWER),
-    dash_(),
-    dash_offset_(0),
-    miterlimit_(4.0) {}
-
-stroke::stroke(color const& c, double width)
-    : c_(c),
-      width_(width),
-      opacity_(1.0),
-      line_cap_(BUTT_CAP),
-      line_join_(MITER_JOIN),
-      gamma_(1.0),
-      gamma_method_(GAMMA_POWER),
-      dash_(),
-      dash_offset_(0.0),
-      miterlimit_(4.0) {}
-
-stroke::stroke(stroke const& other)
-    : c_(other.c_),
-      width_(other.width_),
-      opacity_(other.opacity_),
-      line_cap_(other.line_cap_),
-      line_join_(other.line_join_),
-      gamma_(other.gamma_),
-      gamma_method_(other.gamma_method_),
-      dash_(other.dash_),
-      dash_offset_(other.dash_offset_),
-      miterlimit_(other.miterlimit_) {}
-
-stroke & stroke::operator=(const stroke& rhs)
-{
-    stroke tmp(rhs);
-    swap(tmp);
-    return *this;
-}
-
-void stroke::set_color(const color& c)
-{
-    c_=c;
-}
-
-color const& stroke::get_color() const
-{
-    return c_;
-}
-
-double stroke::get_width() const
-{
-    return width_;
-}
-void stroke::set_width(double w)
-{
-    width_=w;
-}
-
-void stroke::set_opacity(double opacity)
-{
-    if (opacity > 1.0) opacity_=1.0;
-    else if (opacity < 0.0) opacity_=0.0;
-    else opacity_=opacity;
-}
-
-double stroke::get_opacity() const
-{
-    return opacity_;
-}
-
-void stroke::set_line_cap(line_cap_e line_cap)
-{
-    line_cap_=line_cap;
-}
-
-line_cap_e stroke::get_line_cap() const
-{
-    return line_cap_;
-}
-
-void stroke::set_line_join(line_join_e line_join)
-{
-    line_join_=line_join;
-}
-
-line_join_e stroke::get_line_join() const
-{
-    return line_join_;
-}
-
-void stroke::set_gamma(double gamma)
-{
-    gamma_ = gamma;
-}
-
-double stroke::get_gamma() const
-{
-    return gamma_;
-}
-
-void stroke::set_gamma_method(gamma_method_e gamma_method)
-{
-    gamma_method_ = gamma_method;
-}
-
-gamma_method_e stroke::get_gamma_method() const
-{
-    return gamma_method_;
-}
-
-void stroke::add_dash(double dash, double gap)
-{
-    dash_.push_back(std::make_pair(dash,gap));
-}
-
-bool stroke::has_dash() const
-{
-    return ! dash_.empty();
-}
-
-void stroke::set_dash_offset(double offset)
-{
-    dash_offset_ = offset;
-}
-
-double stroke::dash_offset() const
-{
-    return dash_offset_;
-}
-
-dash_array const& stroke::get_dash_array() const
-{
-    return dash_;
-}
-
-void stroke::set_miterlimit(double val)
-{
-    miterlimit_ = val;
-}
-
-double stroke::get_miterlimit() const
-{
-    return miterlimit_;
-}
-
-void stroke::swap(const stroke& other) throw()
-{
-    c_ = other.c_;
-    width_ = other.width_;
-    opacity_ = other.opacity_;
-    line_cap_ = other.line_cap_;
-    line_join_ = other.line_join_;
-    gamma_ = other.gamma_;
-    gamma_method_ = other.gamma_method_;
-    dash_ = other.dash_;
-    dash_offset_ = other.dash_offset_;
-    miterlimit_ = other.miterlimit_;
-}
-}
diff --git a/src/svg/output/process_building_symbolizer.cpp b/src/svg/output/process_building_symbolizer.cpp
deleted file mode 100644
index 23f602b..0000000
--- a/src/svg/output/process_building_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(building_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(building_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/process_line_pattern_symbolizer.cpp b/src/svg/output/process_line_pattern_symbolizer.cpp
deleted file mode 100644
index 42156c1..0000000
--- a/src/svg/output/process_line_pattern_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(line_pattern_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(line_pattern_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/process_line_symbolizer.cpp b/src/svg/output/process_line_symbolizer.cpp
index a933463..e99bfbe 100644
--- a/src/svg/output/process_line_symbolizer.cpp
+++ b/src/svg/output/process_line_symbolizer.cpp
@@ -20,8 +20,12 @@
  *
  *****************************************************************************/
 
+#if defined(SVG_RENDERER)
+
 // mapnik
 #include <mapnik/svg/output/svg_renderer.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
 
 namespace mapnik
 {
@@ -30,19 +34,24 @@ namespace mapnik
  */
 template <typename T>
 void svg_renderer<T>::process(line_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
+                              mapnik::feature_impl & /*feature*/,
+                              proj_transform const& /*prj_trans*/)
 {
-    path_attributes_.set_stroke_color(sym.get_stroke().get_color());
-    path_attributes_.set_stroke_opacity(sym.get_stroke().get_opacity());
-    path_attributes_.set_stroke_width(sym.get_stroke().get_width());
+    path_attributes_.set_stroke_color(get<color>(sym, keys::stroke, mapnik::color(0,0,0)));
+    path_attributes_.set_stroke_opacity(get<value_double>(sym,keys::stroke_opacity, 1.0));
+    path_attributes_.set_stroke_width(get<value_double>(sym, keys::stroke_width, 1.0));
+    /*
     path_attributes_.set_stroke_linecap(sym.get_stroke().get_line_cap());
     path_attributes_.set_stroke_linejoin(sym.get_stroke().get_line_join());
     path_attributes_.set_stroke_dasharray(sym.get_stroke().get_dash_array());
     path_attributes_.set_stroke_dashoffset(sym.get_stroke().dash_offset());
+    */
 }
 
 template void svg_renderer<std::ostream_iterator<char> >::process(line_symbolizer const& sym,
                                                                   mapnik::feature_impl & feature,
                                                                   proj_transform const& prj_trans);
 }
+
+#endif
+
diff --git a/src/svg/output/process_markers_symbolizer.cpp b/src/svg/output/process_markers_symbolizer.cpp
deleted file mode 100644
index 67c1fe5..0000000
--- a/src/svg/output/process_markers_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(markers_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(markers_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/process_point_symbolizer.cpp b/src/svg/output/process_point_symbolizer.cpp
deleted file mode 100644
index b737bf3..0000000
--- a/src/svg/output/process_point_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(point_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(point_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/process_polygon_pattern_symbolizer.cpp b/src/svg/output/process_polygon_pattern_symbolizer.cpp
deleted file mode 100644
index f164044..0000000
--- a/src/svg/output/process_polygon_pattern_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(polygon_pattern_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(polygon_pattern_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/process_polygon_symbolizer.cpp b/src/svg/output/process_polygon_symbolizer.cpp
index 43ca9bd..77d8d5e 100644
--- a/src/svg/output/process_polygon_symbolizer.cpp
+++ b/src/svg/output/process_polygon_symbolizer.cpp
@@ -20,8 +20,12 @@
  *
  *****************************************************************************/
 
+#if defined(SVG_RENDERER)
+
 // mapnik
 #include <mapnik/svg/output/svg_renderer.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
 
 namespace mapnik
 {
@@ -30,14 +34,16 @@ namespace mapnik
  */
 template <typename T>
 void svg_renderer<T>::process(polygon_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
+                              mapnik::feature_impl &,
                               proj_transform const& prj_trans)
 {
-    path_attributes_.set_fill_color(sym.get_fill());
-    path_attributes_.set_fill_opacity(sym.get_opacity());
+    path_attributes_.set_fill_color(get<mapnik::color>(sym, keys::fill, mapnik::color(128,128,128)));
+    path_attributes_.set_fill_opacity(get<value_double>(sym,keys::fill_opacity, 1.0));
 }
 
 template void svg_renderer<std::ostream_iterator<char> >::process(polygon_symbolizer const& sym,
                                                                   mapnik::feature_impl & feature,
                                                                   proj_transform const& prj_trans);
 }
+
+#endif
diff --git a/src/svg/output/process_raster_symbolizer.cpp b/src/svg/output/process_raster_symbolizer.cpp
deleted file mode 100644
index a659fe5..0000000
--- a/src/svg/output/process_raster_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(raster_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(raster_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/process_shield_symbolizer.cpp b/src/svg/output/process_shield_symbolizer.cpp
deleted file mode 100644
index 1fa981d..0000000
--- a/src/svg/output/process_shield_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(shield_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(shield_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/process_symbolizers.cpp b/src/svg/output/process_symbolizers.cpp
index c6db3ea..765ec3f 100644
--- a/src/svg/output/process_symbolizers.cpp
+++ b/src/svg/output/process_symbolizers.cpp
@@ -20,42 +20,95 @@
  *
  *****************************************************************************/
 
+#if defined(SVG_RENDERER)
+
 // mapnik
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/transform_path_adapter.hpp>
 #include <mapnik/svg/output/svg_renderer.hpp>
+#include <mapnik/svg/geometry_svg_generator_impl.hpp>
+#include <mapnik/svg/output/svg_output_grammars.hpp>
+#include <mapnik/svg/output/svg_output_attributes.hpp>
+#include <mapnik/symbolizer_dispatch.hpp>
+
+// boost
+#include <boost/spirit/include/karma.hpp>
 
 namespace mapnik {
 
+struct symbol_type_dispatch : public util::static_visitor<bool>
+{
+    template <typename Symbolizer>
+    bool operator()(Symbolizer const&) const
+    {
+        return false;
+    }
+    bool operator()(line_symbolizer const&) const
+    {
+        return true;
+    }
+    bool operator()(polygon_symbolizer const&) const
+    {
+        return true;
+    }
+};
+
+bool is_path_based(symbolizer const& sym)
+{
+    return util::apply_visitor(symbol_type_dispatch(), sym);
+}
+
+template <typename OutputIterator, typename PathType>
+void generate_path(OutputIterator & output_iterator, PathType const& path, svg::path_output_attributes const& path_attributes)
+{
+    using path_dash_array_grammar = svg::svg_path_dash_array_grammar<OutputIterator>;
+    using path_attributes_grammar = svg::svg_path_attributes_grammar<OutputIterator>;
+    static const path_attributes_grammar attributes_grammar;
+    static const path_dash_array_grammar dash_array_grammar;
+    static const svg::svg_path_generator<OutputIterator,PathType> svg_path_grammer;
+    boost::spirit::karma::lit_type lit;
+    boost::spirit::karma::generate(output_iterator, lit("<path ") << svg_path_grammer, path);
+    boost::spirit::karma::generate(output_iterator, lit(" ") << dash_array_grammar, path_attributes.stroke_dasharray());
+    boost::spirit::karma::generate(output_iterator, lit(" ") << attributes_grammar << lit("/>\n"), path_attributes);
+}
+
 template <typename OutputIterator>
 bool svg_renderer<OutputIterator>::process(rule::symbolizers const& syms,
                                            mapnik::feature_impl & feature,
                                            proj_transform const& prj_trans)
 {
     // svg renderer supports processing of multiple symbolizers.
-    typedef coord_transform<CoordTransform, geometry_type> path_type;
+    using path_type = transform_path_adapter<view_transform, geometry_type>;
 
+    bool process_path = false;
     // process each symbolizer to collect its (path) information.
     // path information (attributes from line_ and polygon_ symbolizers)
     // is collected with the path_attributes_ data member.
-    BOOST_FOREACH(symbolizer const& sym, syms)
+    for (auto const& sym : syms)
     {
-        boost::apply_visitor(symbol_dispatch(*this, feature, prj_trans), sym);
+        if (is_path_based(sym))
+        {
+            process_path = true;
+        }
+        util::apply_visitor(symbolizer_dispatch<svg_renderer<OutputIterator>>(*this, feature, prj_trans), sym);
     }
 
-    // generate path output for each geometry of the current feature.
-    for(unsigned i=0; i<feature.num_geometries(); ++i)
+    if (process_path)
     {
-        geometry_type & geom = feature.get_geometry(i);
-        if(geom.size() > 0)
+        // generate path output for each geometry of the current feature.
+        for (auto & geom : feature.paths())
         {
-            path_type path(t_, geom, prj_trans);
-            generator_.generate_path(path, path_attributes_);
+            if(geom.size() > 0)
+            {
+                path_type path(common_.t_, geom, prj_trans);
+                generate_path(generator_.output_iterator_, path, path_attributes_);
+            }
         }
+        // set the previously collected values back to their defaults
+        // for the feature that will be processed next.
+        path_attributes_.reset();
     }
-
-    // set the previously collected values back to their defaults
-    // for the feature that will be processed next.
-    path_attributes_.reset();
-
     return true;
 }
 
@@ -64,3 +117,5 @@ template bool svg_renderer<std::ostream_iterator<char> >::process(rule::symboliz
                                                                   proj_transform const& prj_trans);
 
 }
+
+#endif
diff --git a/src/svg/output/process_text_symbolizer.cpp b/src/svg/output/process_text_symbolizer.cpp
deleted file mode 100644
index 45bc8bf..0000000
--- a/src/svg/output/process_text_symbolizer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-namespace mapnik
-{
-template <typename T>
-void svg_renderer<T>::process(text_symbolizer const& sym,
-                              mapnik::feature_impl & feature,
-                              proj_transform const& prj_trans)
-{
-    // nothing yet.
-}
-
-template void svg_renderer<std::ostream_iterator<char> >::process(text_symbolizer const& sym,
-                                                                  mapnik::feature_impl & feature,
-                                                                  proj_transform const& prj_trans);
-}
diff --git a/src/svg/output/svg_generator.cpp b/src/svg/output/svg_generator.cpp
index f5d955e..422a936 100644
--- a/src/svg/output/svg_generator.cpp
+++ b/src/svg/output/svg_generator.cpp
@@ -20,9 +20,13 @@
  *
  *****************************************************************************/
 
+#if defined(SVG_RENDERER)
+
 // mapnik
 #include <mapnik/svg/output/svg_generator.hpp>
 #include <mapnik/geometry.hpp>
+#include <mapnik/util/conversions.hpp>
+#include <mapnik/svg/output/svg_output_grammars.hpp>
 
 // boost
 #include <boost/spirit/include/karma.hpp>
@@ -41,6 +45,7 @@ namespace mapnik { namespace svg {
     template <typename OutputIterator>
     void svg_generator<OutputIterator>::generate_header()
     {
+        karma::lit_type lit;
         karma::generate(output_iterator_, lit("<?xml version=\"1.0\" standalone=\"no\"?>\n"));
         karma::generate(output_iterator_, lit("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"));
     }
@@ -48,22 +53,67 @@ namespace mapnik { namespace svg {
     template <typename OutputIterator>
     void svg_generator<OutputIterator>::generate_opening_root(root_output_attributes const& root_attributes)
     {
-        root_attributes_grammar attributes_grammar;
+        using root_attributes_grammar = svg::svg_root_attributes_grammar<OutputIterator>;
+        static const root_attributes_grammar attributes_grammar;
+        karma::lit_type lit;
         karma::generate(output_iterator_, lit("<svg ") << attributes_grammar << lit(">\n"), root_attributes);
     }
 
     template <typename OutputIterator>
     void svg_generator<OutputIterator>::generate_closing_root()
     {
+        karma::lit_type lit;
         karma::generate(output_iterator_, lit("</svg>"));
     }
 
     template <typename OutputIterator>
     void svg_generator<OutputIterator>::generate_rect(rect_output_attributes const& rect_attributes)
     {
-        rect_attributes_grammar attributes_grammar;
+        using rect_attributes_grammar = svg::svg_rect_attributes_grammar<OutputIterator>;
+        static const rect_attributes_grammar attributes_grammar;
+        karma::lit_type lit;
         karma::generate(output_iterator_, lit("<rect ") << attributes_grammar << lit("/>\n"), rect_attributes);
     }
 
+    template <typename OutputIterator>
+    void svg_generator<OutputIterator>::generate_opening_group(mapnik::value_integer val)
+    {
+        std::string string_val;
+        karma::lit_type lit;
+        mapnik::util::to_string(string_val,val);
+        karma::generate(output_iterator_, lit("<g id=\"")
+                                            << lit(string_val)
+                                            << lit("\"")
+                                            << lit(" inkscape:groupmode=\"layer\"")
+                                            << lit(" inkscape:label=\"")
+                                            << lit(string_val)
+                                            << lit("\"")
+                                            << lit("\n"));
+    }
+
+    template <typename OutputIterator>
+    void svg_generator<OutputIterator>::generate_opening_group(std::string const& val)
+    {
+        karma::lit_type lit;
+        karma::generate(output_iterator_, lit("<g id=\"")
+                                            << lit(val)
+                                            << lit("\"")
+                                            << lit(" inkscape:groupmode=\"layer\"")
+                                            << lit(" inkscape:label=\"")
+                                            << lit(val)
+                                            << lit("\"")
+                                            << lit(">\n"));
+    }
+
+    template <typename OutputIterator>
+    void svg_generator<OutputIterator>::generate_closing_group()
+    {
+        karma::lit_type lit;
+        karma::generate(output_iterator_, lit("</g>\n"));
+    }
+
     template class svg_generator<std::ostream_iterator<char> >;
     }}
+
+#endif
+
diff --git a/src/svg/output/svg_output_attributes.cpp b/src/svg/output/svg_output_attributes.cpp
index 544b280..972fbb7 100644
--- a/src/svg/output/svg_output_attributes.cpp
+++ b/src/svg/output/svg_output_attributes.cpp
@@ -21,6 +21,8 @@
  *
  *****************************************************************************/
 
+#if defined(SVG_RENDERER)
+
 // mapnik
 #include <mapnik/svg/output/svg_output_attributes.hpp>
 
@@ -288,3 +290,6 @@ namespace mapnik { namespace svg {
         svg_namespace_url_ = SVG_NAMESPACE_URL;
     }
     }}
+
+#endif
+
diff --git a/src/svg/output/svg_output_grammars.cpp b/src/svg/output/svg_output_grammars.cpp
new file mode 100644
index 0000000..30ed5f9
--- /dev/null
+++ b/src/svg/output/svg_output_grammars.cpp
@@ -0,0 +1,31 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/svg/output/svg_output_attributes.hpp>
+#include <mapnik/svg/output/svg_output_grammars.hpp>
+#include <mapnik/svg/output/svg_output_grammars_impl.hpp>
+#include <string>
+
+template struct mapnik::svg::svg_path_attributes_grammar<std::ostream_iterator<char> >;
+template struct mapnik::svg::svg_path_dash_array_grammar<std::ostream_iterator<char> >;
+template struct mapnik::svg::svg_rect_attributes_grammar<std::ostream_iterator<char> >;
+template struct mapnik::svg::svg_root_attributes_grammar<std::ostream_iterator<char> >;
\ No newline at end of file
diff --git a/src/svg/output/svg_renderer.cpp b/src/svg/output/svg_renderer.cpp
index f940b62..aeeace0 100644
--- a/src/svg/output/svg_renderer.cpp
+++ b/src/svg/output/svg_renderer.cpp
@@ -20,24 +20,39 @@
  *
  *****************************************************************************/
 
+#if defined(SVG_RENDERER)
+
 // mapnik
 #include <mapnik/debug.hpp>
 #include <mapnik/svg/output/svg_renderer.hpp>
 #include <mapnik/map.hpp>
+#include <mapnik/layer.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/feature_type_style.hpp>
+#include <mapnik/font_set.hpp>
 
 // stl
 #include <ostream>
 
 namespace mapnik
 {
+
+template <typename T>
+svg_renderer<T>::svg_renderer(Map const& m, T & output_iterator, double scale_factor, unsigned offset_x, unsigned offset_y) :
+    feature_style_processor<svg_renderer>(m, scale_factor),
+    output_iterator_(output_iterator),
+    generator_(output_iterator),
+    painted_(false),
+    common_(m, attributes(), offset_x, offset_y, m.width(), m.height(), scale_factor)
+{}
+
 template <typename T>
-svg_renderer<T>::svg_renderer(Map const& m, T & output_iterator, unsigned offset_x, unsigned offset_y) :
-    feature_style_processor<svg_renderer>(m),
+svg_renderer<T>::svg_renderer(Map const& m, request const& req,  attributes const& vars, T & output_iterator, double scale_factor, unsigned offset_x, unsigned offset_y) :
+    feature_style_processor<svg_renderer>(m, scale_factor),
     output_iterator_(output_iterator),
-    width_(m.width()),
-    height_(m.height()),
-    t_(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y),
-    generator_(output_iterator)
+    generator_(output_iterator),
+    painted_(false),
+    common_(m, req, vars, offset_x, offset_y, req.width(), req.height(), scale_factor)
 {}
 
 template <typename T>
@@ -54,38 +69,41 @@ void svg_renderer<T>::start_map_processing(Map const& map)
     // generate SVG root element opening tag.
     // the root element defines the size of the image,
     // which is taken from the map's dimensions.
-    svg::root_output_attributes root_attributes(width_, height_);
+    svg::root_output_attributes root_attributes(common_.width_, common_.height_);
     generator_.generate_opening_root(root_attributes);
 
     boost::optional<color> const& bgcolor = map.background();
     if(bgcolor)
     {
         // generate background color as a rectangle that spans the whole image.
-        svg::rect_output_attributes bg_attributes(0, 0, width_, height_, *bgcolor);
+        svg::rect_output_attributes bg_attributes(0, 0, common_.width_, common_.height_, *bgcolor);
         generator_.generate_rect(bg_attributes);
     }
 }
 
 template <typename T>
-void svg_renderer<T>::end_map_processing(Map const& map)
+void svg_renderer<T>::end_map_processing(Map const&)
 {
     // generate SVG root element closing tag.
     generator_.generate_closing_root();
-
     MAPNIK_LOG_DEBUG(svg_renderer) << "svg_renderer: End map processing";
 }
 
 template <typename T>
-void svg_renderer<T>::start_layer_processing(layer const& lay, box2d<double> const& query_extent)
+void svg_renderer<T>::start_layer_processing(layer const& lay, box2d<double> const&)
 {
+    generator_.generate_opening_group(lay.name());
     MAPNIK_LOG_DEBUG(svg_renderer) << "svg_renderer: Start layer processing=" << lay.name();
 }
 
 template <typename T>
 void svg_renderer<T>::end_layer_processing(layer const& lay)
 {
+    generator_.generate_closing_group();
     MAPNIK_LOG_DEBUG(svg_renderer) << "svg_renderer: End layer processing=" << lay.name();
 }
 
 template class svg_renderer<std::ostream_iterator<char> >;
 }
+
+#endif
diff --git a/src/svg/svg_parser.cpp b/src/svg/svg_parser.cpp
index 266c8cd..b1ec83b 100644
--- a/src/svg/svg_parser.cpp
+++ b/src/svg/svg_parser.cpp
@@ -29,13 +29,17 @@
 #include "agg_ellipse.h"
 #include "agg_rounded_rect.h"
 #include "agg_span_gradient.h"
+#include "agg_color_rgba.h"
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/phoenix_core.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
 #include <boost/fusion/include/std_pair.hpp>
-#include <boost/foreach.hpp>
 #include <boost/algorithm/string/predicate.hpp>
+#pragma GCC diagnostic pop
 
 #include <string>
 #include <stdexcept>
@@ -64,15 +68,14 @@ void parse_linear_gradient(svg_parser & parser,xmlTextReaderPtr reader);
 void parse_radial_gradient(svg_parser & parser,xmlTextReaderPtr reader);
 bool parse_common_gradient(svg_parser & parser,xmlTextReaderPtr reader);
 void parse_gradient_stop(svg_parser & parser,xmlTextReaderPtr reader);
-void parse_pattern(svg_parser & parser,xmlTextReaderPtr reader);
 void parse_attr(svg_parser & parser,xmlTextReaderPtr reader);
 void parse_attr(svg_parser & parser,const xmlChar * name, const xmlChar * value );
 
-typedef std::vector<std::pair<double, agg::rgba8> > color_lookup_type;
+using color_lookup_type = std::vector<std::pair<double, agg::rgba8> >;
 
 namespace qi = boost::spirit::qi;
 
-typedef std::vector<std::pair<std::string, std::string> > pairs_type;
+using pairs_type = std::vector<std::pair<std::string, std::string> >;
 
 template <typename Iterator,typename SkipType>
 struct key_value_sequence_ordered
@@ -81,10 +84,12 @@ struct key_value_sequence_ordered
     key_value_sequence_ordered()
         : key_value_sequence_ordered::base_type(query)
     {
-        query =  pair >> *( qi::lit(';') >> pair);
+        qi::lit_type lit;
+        qi::char_type char_;
+        query =  pair >> *( lit(';') >> pair);
         pair  =  key >> -(':' >> value);
-        key   =  qi::char_("a-zA-Z_") >> *qi::char_("a-zA-Z_0-9-");
-        value = +(qi::char_ - qi::lit(';'));
+        key   =  char_("a-zA-Z_") >> *char_("a-zA-Z_0-9-");
+        value = +(char_ - lit(';'));
     }
 
     qi::rule<Iterator, pairs_type(), SkipType> query;
@@ -109,6 +114,7 @@ agg::rgba8 parse_color(const char* str)
 double parse_double(const char* str)
 {
     using namespace boost::spirit::qi;
+    qi::double_type double_;
     double val = 0.0;
     parse(str, str + std::strlen(str),double_,val);
     return val;
@@ -122,7 +128,9 @@ double parse_double_optional_percent(const char* str, bool &percent)
 {
     using namespace boost::spirit::qi;
     using boost::phoenix::ref;
-    using qi::_1;
+    qi::_1_type _1;
+    qi::double_type double_;
+    qi::char_type char_;
 
     double val = 0.0;
     char unit='\0';
@@ -142,7 +150,7 @@ double parse_double_optional_percent(const char* str, bool &percent)
 bool parse_style (const char* str, pairs_type & v)
 {
     using namespace boost::spirit::qi;
-    typedef boost::spirit::ascii::space_type skip_type;
+    using skip_type = boost::spirit::ascii::space_type;
     key_value_sequence_ordered<const char*, skip_type> kv_parser;
     return phrase_parse(str, str + std::strlen(str), kv_parser, skip_type(), v);
 }
@@ -160,7 +168,7 @@ bool parse_reader(svg_parser & parser, xmlTextReaderPtr reader)
     catch (std::exception const& ex)
     {
         xmlFreeTextReader(reader);
-        throw;
+        throw ex;
     }
     xmlFreeTextReader(reader);
     if (ret != 0)
@@ -201,8 +209,11 @@ void start_element(svg_parser & parser, xmlTextReaderPtr reader)
 
         if (xmlStrEqual(name, BAD_CAST "g"))
         {
-            parser.path_.push_attr();
-            parse_attr(parser,reader);
+            if (xmlTextReaderIsEmptyElement(reader) == 0)
+            {
+                parser.path_.push_attr();
+                parse_attr(parser,reader);
+            }
         }
         else
         {
@@ -213,7 +224,7 @@ void start_element(svg_parser & parser, xmlTextReaderPtr reader)
                 if (xmlStrEqual(name, BAD_CAST "path"))
                 {
                     parse_path(parser,reader);
-                }            
+                }
                 else if (xmlStrEqual(name, BAD_CAST "polygon") )
                 {
                     parse_polygon(parser,reader);
@@ -227,7 +238,7 @@ void start_element(svg_parser & parser, xmlTextReaderPtr reader)
                     parse_line(parser,reader);
                 }
                 else if (xmlStrEqual(name, BAD_CAST "rect"))
-                {    
+                {
                     parse_rect(parser,reader);
                 }
                 else if (xmlStrEqual(name, BAD_CAST "circle"))
@@ -296,7 +307,7 @@ void parse_attr(svg_parser & parser, const xmlChar * name, const xmlChar * value
     if (xmlStrEqual(name, BAD_CAST "transform"))
     {
         agg::trans_affine tr;
-        mapnik::svg::parse_transform((const char*) value,tr);
+        mapnik::svg::parse_svg_transform((const char*) value,tr);
         parser.path_.transform().premultiply(tr);
     }
     else if (xmlStrEqual(name, BAD_CAST "fill"))
@@ -416,7 +427,7 @@ void parse_attr(svg_parser & parser, const xmlChar * name, const xmlChar * value
 void parse_attr(svg_parser & parser, xmlTextReaderPtr reader)
 {
     const xmlChar *name, *value;
-    
+
     if (xmlTextReaderMoveToFirstAttribute(reader) == 1)
     {
         do
@@ -426,11 +437,11 @@ void parse_attr(svg_parser & parser, xmlTextReaderPtr reader)
 
             if (xmlStrEqual(name, BAD_CAST "style"))
             {
-                typedef std::vector<std::pair<std::string,std::string> > cont_type;
-                typedef cont_type::value_type value_type;
+                using cont_type = std::vector<std::pair<std::string,std::string> >;
+                using value_type = cont_type::value_type;
                 cont_type vec;
                 parse_style((const char*)value, vec);
-                BOOST_FOREACH(value_type kv , vec )
+                for (value_type kv : vec )
                 {
                     parse_attr(parser,BAD_CAST kv.first.c_str(),BAD_CAST kv.second.c_str());
                 }
@@ -550,33 +561,33 @@ void parse_line(svg_parser & parser, xmlTextReaderPtr reader)
     double y2 = 0.0;
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "x1");
-    if (value) 
+    if (value)
     {
         x1 = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "y1");
-    if (value) 
+    if (value)
     {
         y1 = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "x2");
-    if (value) 
+    if (value)
     {
         x2 = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "y2");
-    if (value) 
+    if (value)
     {
         y2 = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     parser.path_.begin_path();
     parser.path_.move_to(x1, y1);
     parser.path_.line_to(x2, y2);
@@ -591,26 +602,26 @@ void parse_circle(svg_parser & parser, xmlTextReaderPtr reader)
     double cy = 0.0;
     double r = 0.0;
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "cx");
-    if (value) 
+    if (value)
     {
         cx = parse_double((const char*)value);
         xmlFree(value);
     }
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "cy");
-    if (value) 
+    if (value)
     {
         cy = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "r");
-    if (value) 
+    if (value)
     {
         r = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     parser.path_.begin_path();
 
     if(r != 0.0)
@@ -632,33 +643,33 @@ void parse_ellipse(svg_parser & parser, xmlTextReaderPtr reader)
     double ry = 0.0;
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "cx");
-    if (value) 
+    if (value)
     {
         cx = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "cy");
-    if (value) 
+    if (value)
     {
         cy = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "rx");
-    if (value) 
+    if (value)
     {
         rx = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "ry");
-    if (value) 
+    if (value)
     {
         ry = parse_double((const char*)value);
         xmlFree(value);
     }
-    
+
     parser.path_.begin_path();
 
     if(rx != 0.0 && ry != 0.0)
@@ -742,7 +753,7 @@ void parse_rect(svg_parser & parser, xmlTextReaderPtr reader)
         if(rx < 0.0) throw std::runtime_error("parse_rect: Invalid rx");
         if(ry < 0.0) throw std::runtime_error("parse_rect: Invalid ry");
         parser.path_.begin_path();
-        
+
         if(rounded)
         {
             agg::rounded_rect r;
@@ -778,7 +789,7 @@ void parse_gradient_stop(svg_parser & parser, xmlTextReaderPtr reader)
     double opacity = 1.0;
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "offset");
-    if (value) 
+    if (value)
     {
         offset = parse_double((const char*)value);
         xmlFree(value);
@@ -787,12 +798,12 @@ void parse_gradient_stop(svg_parser & parser, xmlTextReaderPtr reader)
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "style");
     if (value)
     {
-        typedef std::vector<std::pair<std::string,std::string> > cont_type;
-        typedef cont_type::value_type value_type;
+        using cont_type = std::vector<std::pair<std::string,std::string> >;
+        using value_type = cont_type::value_type;
         cont_type vec;
         parse_style((const char*)value, vec);
 
-        BOOST_FOREACH(value_type kv , vec )
+        for (value_type kv : vec )
         {
             if (kv.first == "stop-color")
             {
@@ -835,8 +846,7 @@ void parse_gradient_stop(svg_parser & parser, xmlTextReaderPtr reader)
     }
 
 
-    stop_color.set_alpha(opacity*255);
-
+    stop_color.set_alpha(static_cast<uint8_t>(opacity * 255));
     parser.temporary_gradient_.second.add_stop(offset, stop_color);
 
     /*
@@ -870,7 +880,7 @@ bool parse_common_gradient(svg_parser & parser, xmlTextReaderPtr reader)
 
     // check if we should inherit from another tag
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "xlink:href");
-    if (value) 
+    if (value)
     {
         if (value[0] == '#')
         {
@@ -886,7 +896,7 @@ bool parse_common_gradient(svg_parser & parser, xmlTextReaderPtr reader)
         }
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "gradientUnits");
     if (value)
     {
@@ -900,12 +910,12 @@ bool parse_common_gradient(svg_parser & parser, xmlTextReaderPtr reader)
         }
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "gradientTransform");
     if (value)
     {
         agg::trans_affine tr;
-        mapnik::svg::parse_transform((const char*) value,tr);
+        mapnik::svg::parse_svg_transform((const char*) value,tr);
         parser.temporary_gradient_.second.set_transform(tr);
         xmlFree(value);
     }
@@ -939,14 +949,14 @@ void parse_radial_gradient(svg_parser & parser, xmlTextReaderPtr reader)
     bool has_percent=true;
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "cx");
-    if (value) 
+    if (value)
     {
         cx = parse_double_optional_percent((const char*)value, has_percent);
         xmlFree(value);
     }
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "cy");
-    if (value) 
+    if (value)
     {
         cy = parse_double_optional_percent((const char*)value, has_percent);
         xmlFree(value);
@@ -1003,28 +1013,28 @@ void parse_linear_gradient(svg_parser & parser, xmlTextReaderPtr reader)
 
     bool has_percent=true;
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "x1");
-    if (value) 
+    if (value)
     {
         x1 = parse_double_optional_percent((const char*)value, has_percent);
         xmlFree(value);
     }
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "x2");
-    if (value) 
+    if (value)
     {
         x2 = parse_double_optional_percent((const char*)value, has_percent);
         xmlFree(value);
     }
 
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "y1");
-    if (value) 
+    if (value)
     {
         y1 = parse_double_optional_percent((const char*)value, has_percent);
         xmlFree(value);
     }
-    
+
     value = xmlTextReaderGetAttribute(reader, BAD_CAST "y2");
-    if (value) 
+    if (value)
     {
         y2 = parse_double_optional_percent((const char*)value, has_percent);
         xmlFree(value);
@@ -1043,11 +1053,6 @@ void parse_linear_gradient(svg_parser & parser, xmlTextReaderPtr reader)
     //MAPNIK_LOG_DEBUG(svg_parser) << "Found Linear Gradient: " << "(" << x1 << " " << y1 << "),(" << x2 << " " << y2 << ")";
 }
 
-void parse_pattern(svg_parser & parser, xmlTextReaderPtr reader)
-{
-    //const xmlChar *value;
-}
-
 svg_parser::svg_parser(svg_converter<svg_path_adapter,
                        agg::pod_bvector<mapnik::svg::path_attributes> > & path)
     : path_(path),
@@ -1058,7 +1063,7 @@ svg_parser::~svg_parser() {}
 void svg_parser::parse(std::string const& filename)
 {
     xmlTextReaderPtr reader = xmlNewTextReaderFilename(filename.c_str());
-    if (reader == NULL)
+    if (reader == nullptr)
     {
         MAPNIK_LOG_ERROR(svg_parser) << "Unable to open '" << filename << "'";
     }
@@ -1070,9 +1075,9 @@ void svg_parser::parse(std::string const& filename)
 
 void svg_parser::parse_from_string(std::string const& svg)
 {
-    xmlTextReaderPtr reader = xmlReaderForMemory(svg.c_str(),svg.size(),NULL,NULL,
+    xmlTextReaderPtr reader = xmlReaderForMemory(svg.c_str(),svg.size(),nullptr,nullptr,
         (XML_PARSE_NOBLANKS | XML_PARSE_NOCDATA | XML_PARSE_NOERROR | XML_PARSE_NOWARNING));
-    if (reader == NULL)
+    if (reader == nullptr)
     {
         MAPNIK_LOG_ERROR(svg_parser) << "Unable to parse '" << svg << "'";
     }
diff --git a/src/svg/svg_path_parser.cpp b/src/svg/svg_path_parser.cpp
index bee1b64..86684e6 100644
--- a/src/svg/svg_path_parser.cpp
+++ b/src/svg/svg_path_parser.cpp
@@ -39,8 +39,8 @@ namespace mapnik { namespace svg {
     bool parse_path(const char* wkt, PathType & p)
     {
         using namespace boost::spirit;
-        typedef const char* iterator_type;
-        typedef ascii::space_type skip_type;
+        using iterator_type = const char*;
+        using skip_type = ascii::space_type;
         svg_path_grammar<iterator_type,skip_type,PathType> g(p);
         iterator_type first = wkt;
         iterator_type last =  wkt + std::strlen(wkt);
diff --git a/src/svg/svg_points_parser.cpp b/src/svg/svg_points_parser.cpp
index 436932b..af97c41 100644
--- a/src/svg/svg_points_parser.cpp
+++ b/src/svg/svg_points_parser.cpp
@@ -34,8 +34,8 @@ namespace mapnik { namespace svg {
     bool parse_points(const char* wkt, PathType & p)
     {
         using namespace boost::spirit;
-        typedef const char*  iterator_type;
-        typedef ascii::space_type skip_type;
+        using iterator_type = const char* ;
+        using skip_type = ascii::space_type;
         svg_points_grammar<iterator_type,skip_type,PathType> g(p);
         iterator_type first = wkt;
         iterator_type last =  wkt + std::strlen(wkt);
diff --git a/src/svg/svg_transform_parser.cpp b/src/svg/svg_transform_parser.cpp
index 6bb8bff..eee7a64 100644
--- a/src/svg/svg_transform_parser.cpp
+++ b/src/svg/svg_transform_parser.cpp
@@ -23,8 +23,6 @@
 // mapnik
 #include <mapnik/svg/svg_path_parser.hpp>
 #include <mapnik/svg/svg_transform_grammar.hpp>
-// agg
-#include "agg_trans_affine.h"
 // stl
 #include <string>
 #include <cstring>
@@ -32,32 +30,18 @@
 namespace mapnik { namespace svg {
 
     template <typename TransformType>
-    bool parse_transform(const char * wkt, TransformType & p)
+    bool parse_svg_transform(const char * wkt, TransformType & p)
     {
         using namespace boost::spirit;
-        typedef const char * iterator_type;
-        typedef ascii::space_type skip_type;
+        using iterator_type = const char *;
+        using skip_type = ascii::space_type;
+        // TODO - make it possible for this to be static const
+        // by avoiding ctor taking arg - https://github.com/mapnik/mapnik/pull/2231
         svg_transform_grammar<iterator_type,skip_type,TransformType> g(p);
         iterator_type first = wkt;
         iterator_type last =  wkt + std::strlen(wkt);
         return qi::phrase_parse(first, last, g, skip_type());
     }
 
-/*
-  template <typename TransformType>
-  bool parse_transform(std::string const& wkt, TransformType & p)
-  {
-  using namespace boost::spirit;
-  typedef std::string::const_iterator iterator_type;
-  typedef ascii::space_type skip_type;
-  svg_transform_grammar<iterator_type,skip_type,TransformType> g(p);
-  iterator_type first = wkt.begin();
-  iterator_type last =  wkt.end();
-  return qi::phrase_parse(first, last, g, skip_type());
-  }
-*/
-
-    template MAPNIK_DECL bool parse_transform<agg::trans_affine>(const char*, agg::trans_affine&);
-//template bool parse_transform<agg::trans_affine>(std::string const& , agg::trans_affine&);
-
-    }}
+    template MAPNIK_DECL bool parse_svg_transform<agg::trans_affine>(const char*, agg::trans_affine&);
+}}
diff --git a/src/symbolizer.cpp b/src/symbolizer.cpp
index 1a09e0c..7107fe7 100644
--- a/src/symbolizer.cpp
+++ b/src/symbolizer.cpp
@@ -28,179 +28,19 @@
 
 namespace mapnik {
 
-void evaluate_transform(agg::trans_affine& tr, feature_impl const& feature,
-                        transform_list_ptr const& trans_expr)
+// START FIXME - move to its own compilation unit
+void evaluate_transform(agg::trans_affine& tr,
+                        feature_impl const& feature,
+                        attributes const& vars,
+                        transform_list_ptr const& trans_expr, double scale_factor)
 {
     if (trans_expr)
     {
-#ifdef MAPNIK_LOG
-    MAPNIK_LOG_DEBUG(transform) << "transform: evaluate "
-                                << transform_processor_type::to_string(*trans_expr);
-#endif
-        transform_processor_type::evaluate(tr, feature, *trans_expr);
+        transform_processor_type::evaluate(tr, feature, vars, *trans_expr, scale_factor);
     }
 }
+// END FIXME
 
-// default ctor
-symbolizer_base::symbolizer_base()
-    : comp_op_(src_over),
-      clip_(true),
-      simplify_algorithm_value_(radial_distance),
-      simplify_tolerance_value_(0.0),
-      smooth_value_(0.0)
-{
-}
-
-// copy ctor
-symbolizer_base::symbolizer_base(symbolizer_base const& other)
-    : comp_op_(other.comp_op_),
-      affine_transform_(other.affine_transform_),
-      clip_(other.clip_),
-      simplify_algorithm_value_(other.simplify_algorithm_value_),
-      simplify_tolerance_value_(other.simplify_tolerance_value_),
-      smooth_value_(other.smooth_value_) {}
-
-void symbolizer_base::set_comp_op(composite_mode_e comp_op)
-{
-    comp_op_ = comp_op;
-}
-
-composite_mode_e symbolizer_base::comp_op() const
-{
-    return comp_op_;
-}
-
-void symbolizer_base::set_transform(transform_type const& affine_transform)
-{
-    affine_transform_ = affine_transform;
-
-    #ifdef MAPNIK_LOG
-    MAPNIK_LOG_DEBUG(load_map) << "map_parser: set_transform: "
-        << (affine_transform_
-            ? transform_processor_type::to_string(*affine_transform_)
-            : std::string("null"));
-    #endif
-}
-
-transform_type const& symbolizer_base::get_transform() const
-{
-    return affine_transform_;
-}
-
-std::string symbolizer_base::get_transform_string() const
-{
-    if (affine_transform_)
-    {
-        return transform_processor_type::to_string(*affine_transform_);
-    }
-    else
-    {
-        return std::string();
-    }
-}
-
-void symbolizer_base::set_clip(bool clip)
-{
-    clip_ = clip;
-}
-
-bool symbolizer_base::clip() const
-{
-    return clip_;
-}
-
-void symbolizer_base::set_simplify_algorithm(simplify_algorithm_e algo)
-{
-    simplify_algorithm_value_ = algo;
-}
-
-simplify_algorithm_e symbolizer_base::simplify_algorithm() const
-{
-    return simplify_algorithm_value_;
-}
 
-void symbolizer_base::set_simplify_tolerance(double simplify_tolerance)
-{
-    simplify_tolerance_value_ = simplify_tolerance;
-}
-
-double symbolizer_base::simplify_tolerance() const
-{
-    return simplify_tolerance_value_;
-}
-
-void symbolizer_base::set_smooth(double smooth)
-{
-    smooth_value_ = smooth;
-}
-
-double symbolizer_base::smooth() const
-{
-    return smooth_value_;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-symbolizer_with_image::symbolizer_with_image(path_expression_ptr file)
-    : image_filename_( file ),
-      image_opacity_(1.0f)
-{
-}
-
-symbolizer_with_image::symbolizer_with_image( symbolizer_with_image const& rhs)
-    : image_filename_(rhs.image_filename_),
-      image_opacity_(rhs.image_opacity_),
-      image_transform_(rhs.image_transform_)
-{
-}
-
-path_expression_ptr const& symbolizer_with_image::get_filename() const
-{
-    return image_filename_;
-}
-
-void symbolizer_with_image::set_filename(path_expression_ptr const& image_filename)
-{
-    image_filename_ = image_filename;
-}
-
-void symbolizer_with_image::set_opacity(float opacity)
-{
-    image_opacity_ = opacity;
-}
-
-float symbolizer_with_image::get_opacity() const
-{
-    return image_opacity_;
-}
-
-void symbolizer_with_image::set_image_transform(transform_type const& tr)
-{
-    image_transform_ = tr;
-
-    #ifdef MAPNIK_LOG
-    MAPNIK_LOG_DEBUG(load_map) << "map_parser: set_image_transform: "
-        << (image_transform_
-            ? transform_processor_type::to_string(*image_transform_)
-            : std::string("null"));
-    #endif
-}
-
-transform_type const& symbolizer_with_image::get_image_transform() const
-{
-    return image_transform_;
-}
-
-std::string symbolizer_with_image::get_image_transform_string() const
-{
-    if (image_transform_)
-    {
-        return transform_processor_type::to_string(*image_transform_);
-    }
-    else
-    {
-        return std::string();
-    }
-}
 
 } // end of namespace mapnik
diff --git a/src/symbolizer_enumerations.cpp b/src/symbolizer_enumerations.cpp
new file mode 100644
index 0000000..6f290f1
--- /dev/null
+++ b/src/symbolizer_enumerations.cpp
@@ -0,0 +1,189 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/symbolizer_enumerations.hpp>
+
+namespace mapnik {
+// stroke
+static const char * line_cap_strings[] = {
+    "butt",
+    "square",
+    "round",
+    ""
+};
+
+IMPLEMENT_ENUM( line_cap_e, line_cap_strings )
+
+static const char * line_join_strings[] = {
+    "miter",
+    "miter_revert",
+    "round",
+    "bevel",
+    ""
+};
+
+IMPLEMENT_ENUM( line_join_e, line_join_strings )
+
+// point symbolizer
+static const char * point_placement_strings[] = {
+    "centroid",
+    "interior",
+    ""
+};
+
+IMPLEMENT_ENUM( point_placement_e, point_placement_strings )
+
+// line symbolizer
+static const char * line_rasterizer_strings[] = {
+    "full",
+    "fast",
+    ""
+};
+IMPLEMENT_ENUM( line_rasterizer_e, line_rasterizer_strings )
+
+// markers symbolizer
+static const char * marker_placement_strings[] = {
+    "point",
+    "interior",
+    "line",
+    "vertex-first",
+    "vertex-last",
+    ""
+};
+
+IMPLEMENT_ENUM( marker_placement_e, marker_placement_strings )
+
+static const char * marker_multi_policy_strings[] = {
+    "each",
+    "whole",
+    "largest",
+    ""
+};
+
+IMPLEMENT_ENUM( marker_multi_policy_e, marker_multi_policy_strings )
+
+// debug symbolizer
+static const char * debug_symbolizer_mode_strings[] = {
+    "collision",
+    "vertex",
+    ""
+};
+
+IMPLEMENT_ENUM( debug_symbolizer_mode_e, debug_symbolizer_mode_strings )
+
+// polygon pattern symbolizer
+static const char * pattern_alignment_strings[] = {
+    "local", // feature
+    "global", // map
+    ""
+};
+
+IMPLEMENT_ENUM( pattern_alignment_e, pattern_alignment_strings )
+
+
+// text
+static const char * halo_rasterizer_strings[] = {
+    "full",
+    "fast",
+    ""
+};
+
+IMPLEMENT_ENUM( halo_rasterizer_e, halo_rasterizer_strings )
+
+
+static const char * label_placement_strings[] = {
+    "point",
+    "line",
+    "vertex",
+    "interior",
+    ""
+};
+
+
+IMPLEMENT_ENUM( label_placement_e, label_placement_strings )
+
+static const char * vertical_alignment_strings[] = {
+    "top",
+    "middle",
+    "bottom",
+    "auto",
+    ""
+};
+
+
+IMPLEMENT_ENUM( vertical_alignment_e, vertical_alignment_strings )
+
+static const char * horizontal_alignment_strings[] = {
+    "left",
+    "middle",
+    "right",
+    "auto",
+    "adjust",
+    ""
+};
+
+
+IMPLEMENT_ENUM( horizontal_alignment_e, horizontal_alignment_strings )
+
+static const char * justify_alignment_strings[] = {
+    "left",
+    "center", // not 'middle' in order to match CSS
+    "right",
+    "auto",
+    ""
+};
+
+
+IMPLEMENT_ENUM( justify_alignment_e, justify_alignment_strings )
+
+static const char * text_transform_strings[] = {
+    "none",
+    "uppercase",
+    "lowercase",
+    "capitalize",
+    ""
+};
+
+IMPLEMENT_ENUM( text_transform_e, text_transform_strings )
+
+static const char * text_upright_strings[] = {
+    "auto",
+    "left",
+    "right",
+    "left_only",
+    "right_only",
+    ""
+};
+IMPLEMENT_ENUM(text_upright_e, text_upright_strings)
+
+static const char * gamma_method_strings[] = {
+    "power", //agg::gamma_power
+    "linear", //agg::gamma_linear
+    "none", //agg::gamma_none
+    "threshold", //agg::gamma_threshold
+    "multiply", //agg::gamma_multiply",
+    ""
+};
+
+IMPLEMENT_ENUM( gamma_method_e, gamma_method_strings )
+
+} // namespace mapnik
diff --git a/src/symbolizer_helpers.cpp b/src/symbolizer_helpers.cpp
deleted file mode 100644
index 65c020c..0000000
--- a/src/symbolizer_helpers.cpp
+++ /dev/null
@@ -1,473 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/value.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/geom_util.hpp>
-#include <mapnik/parse_path.hpp>
-#include <mapnik/symbolizer_helpers.hpp>
-#include <mapnik/label_collision_detector.hpp>
-#include <mapnik/placement_finder.hpp>
-#include <mapnik/geom_util.hpp>
-#include <mapnik/marker.hpp>
-#include <mapnik/expression_evaluator.hpp>
-#include <mapnik/pixel_position.hpp>
-
-// agg
-#include "agg_conv_clip_polyline.h"
-
-namespace mapnik {
-
-template <typename FaceManagerT, typename DetectorT>
-bool text_symbolizer_helper<FaceManagerT, DetectorT>::next()
-{
-    if (!placement_valid_) return false;
-    if (point_placement_)
-        return next_point_placement();
-    else if (sym_.clip())
-        return next_line_placement_clipped();
-    else
-        return next_line_placement();
-}
-
-template <typename FaceManagerT, typename DetectorT>
-bool text_symbolizer_helper<FaceManagerT, DetectorT>::next_line_placement()
-{
-    while (!geometries_to_process_.empty())
-    {
-        if (geo_itr_ == geometries_to_process_.end())
-        {
-            //Just processed the last geometry. Try next placement.
-            if (!next_placement()) return false; //No more placements
-            //Start again from begin of list
-            geo_itr_ = geometries_to_process_.begin();
-            continue; //Reexecute size check
-        }
-
-        typedef coord_transform<CoordTransform,geometry_type> path_type;
-        path_type path(t_, **geo_itr_, prj_trans_);
-
-        finder_->clear_placements();
-        if (points_on_line_) {
-            finder_->find_point_placements(path);
-        } else {
-            finder_->find_line_placements(path);
-        }
-        if (!finder_->get_results().empty())
-        {
-            //Found a placement
-            if (points_on_line_)
-            {
-                finder_->update_detector();
-            }
-            geo_itr_ = geometries_to_process_.erase(geo_itr_);
-            return true;
-        }
-        //No placement for this geometry. Keep it in geometries_to_process_ for next try.
-        geo_itr_++;
-    }
-    return false;
-}
-
-template <typename FaceManagerT, typename DetectorT>
-bool text_symbolizer_helper<FaceManagerT, DetectorT>::next_line_placement_clipped()
-{
-    while (!geometries_to_process_.empty())
-    {
-        if (geo_itr_ == geometries_to_process_.end())
-        {
-            //Just processed the last geometry. Try next placement.
-            if (!next_placement()) return false; //No more placements
-            //Start again from begin of list
-            geo_itr_ = geometries_to_process_.begin();
-            continue; //Reexecute size check
-        }
-
-        typedef agg::conv_clip_polyline<geometry_type> clipped_geometry_type;
-        typedef coord_transform<CoordTransform,clipped_geometry_type> path_type;
-        clipped_geometry_type clipped(**geo_itr_);
-        clipped.clip_box(query_extent_.minx(),query_extent_.miny(),query_extent_.maxx(),query_extent_.maxy());
-        path_type path(t_, clipped, prj_trans_);
-
-        finder_->clear_placements();
-        if (points_on_line_) {
-            finder_->find_point_placements(path);
-        } else {
-            finder_->find_line_placements(path);
-        }
-        if (!finder_->get_results().empty())
-        {
-            //Found a placement
-            if (points_on_line_)
-            {
-                finder_->update_detector();
-            }
-            geo_itr_ = geometries_to_process_.erase(geo_itr_);
-            return true;
-        }
-        //No placement for this geometry. Keep it in geometries_to_process_ for next try.
-        geo_itr_++;
-    }
-    return false;
-}
-
-template <typename FaceManagerT, typename DetectorT>
-bool text_symbolizer_helper<FaceManagerT, DetectorT>::next_point_placement()
-{
-    while (!points_.empty())
-    {
-        if (point_itr_ == points_.end())
-        {
-            //Just processed the last point. Try next placement.
-            if (!next_placement()) return false; //No more placements
-            //Start again from begin of list
-            point_itr_ = points_.begin();
-            continue; //Reexecute size check
-        }
-        finder_->clear_placements();
-        finder_->find_point_placement(point_itr_->first, point_itr_->second, angle_);
-        if (!finder_->get_results().empty())
-        {
-            //Found a placement
-            point_itr_ = points_.erase(point_itr_);
-            finder_->update_detector();
-            return true;
-        }
-        //No placement for this point. Keep it in points_ for next try.
-        point_itr_++;
-    }
-    return false;
-}
-
-struct largest_bbox_first
-{
-    bool operator() (geometry_type const* g0, geometry_type const* g1) const
-    {
-        box2d<double> b0 = g0->envelope();
-        box2d<double> b1 = g1->envelope();
-        return b0.width()*b0.height() > b1.width()*b1.height();
-    }
-
-};
-
-template <typename FaceManagerT, typename DetectorT>
-void text_symbolizer_helper<FaceManagerT, DetectorT>::initialize_geometries()
-{
-    bool largest_box_only = false;
-    unsigned num_geom = feature_.num_geometries();
-    for (unsigned i=0; i<num_geom; ++i)
-    {
-        geometry_type const& geom = feature_.get_geometry(i);
-
-        // don't bother with empty geometries
-        if (geom.size() == 0) continue;
-        eGeomType type = geom.type();
-        if (type == Polygon)
-        {
-            largest_box_only = sym_.largest_bbox_only();
-            if (sym_.get_minimum_path_length() > 0)
-            {
-                box2d<double> gbox = t_.forward(geom.envelope(), prj_trans_);
-                if (gbox.width() < sym_.get_minimum_path_length())
-                {
-                    continue;
-                }
-            }
-        }
-        // TODO - calculate length here as well
-        geometries_to_process_.push_back(const_cast<geometry_type*>(&geom));
-    }
-
-    if (largest_box_only)
-    {
-        geometries_to_process_.sort(largest_bbox_first());
-        geo_itr_ = geometries_to_process_.begin();
-        geometries_to_process_.erase(++geo_itr_,geometries_to_process_.end());
-    }
-    geo_itr_ = geometries_to_process_.begin();
-}
-
-template <typename FaceManagerT, typename DetectorT>
-void text_symbolizer_helper<FaceManagerT, DetectorT>::initialize_points()
-{
-    label_placement_enum how_placed = placement_->properties.label_placement;
-    if (how_placed == LINE_PLACEMENT)
-    {
-        point_placement_ = false;
-        return;
-    }
-    else
-    {
-        point_placement_ = true;
-    }
-
-    double label_x=0.0;
-    double label_y=0.0;
-    double z=0.0;
-
-    std::list<geometry_type*>::const_iterator itr = geometries_to_process_.begin();
-    std::list<geometry_type*>::const_iterator end = geometries_to_process_.end();
-    for (; itr != end; itr++)
-    {
-        geometry_type const& geom = **itr;
-        if (how_placed == VERTEX_PLACEMENT)
-        {
-            geom.rewind(0);
-            for(unsigned i = 0; i < geom.size(); i++)
-            {
-                geom.vertex(&label_x, &label_y);
-                prj_trans_.backward(label_x, label_y, z);
-                t_.forward(&label_x, &label_y);
-                points_.push_back(std::make_pair(label_x, label_y));
-            }
-        }
-        else
-        {
-            // https://github.com/mapnik/mapnik/issues/1423
-            bool success = false;
-            // https://github.com/mapnik/mapnik/issues/1350
-            if (geom.type() == LineString)
-            {
-                success = label::middle_point(geom, label_x,label_y);
-            }
-            else if (how_placed == POINT_PLACEMENT)
-            {
-                success = label::centroid(geom, label_x, label_y);
-            }
-            else if (how_placed == INTERIOR_PLACEMENT)
-            {
-                success = label::interior_position(geom, label_x, label_y);
-            }
-            else
-            {
-                MAPNIK_LOG_ERROR(symbolizer_helpers) << "ERROR: Unknown placement type in initialize_points()";
-            }
-            if (success)
-            {
-                prj_trans_.backward(label_x, label_y, z);
-                t_.forward(&label_x, &label_y);
-                points_.push_back(std::make_pair(label_x, label_y));
-            }
-        }
-    }
-    point_itr_ = points_.begin();
-}
-
-
-template <typename FaceManagerT, typename DetectorT>
-bool text_symbolizer_helper<FaceManagerT, DetectorT>::next_placement()
-{
-    if (!placement_->next()) {
-        placement_valid_ = false;
-        return false;
-    }
-    placement_->properties.process(text_, feature_);
-    info_ = &(text_.get_string_info());
-    if (placement_->properties.orientation)
-    {
-        // https://github.com/mapnik/mapnik/issues/1352
-        mapnik::evaluate<feature_impl, value_type> evaluator(feature_);
-        angle_ = boost::apply_visitor(
-            evaluator,
-            *(placement_->properties.orientation)).to_double();
-    } else {
-        angle_ = 0.0;
-    }
-
-
-    finder_ = boost::shared_ptr<placement_finder<DetectorT> >(new placement_finder<DetectorT>(feature_, *placement_, *info_, detector_, dims_));
-//    boost::make_shared<placement_finder<DetectorT> >(feature_, *placement_, *info_, detector_, dims_);
-
-    placement_valid_ = true;
-    return true;
-}
-
-template <typename FaceManagerT, typename DetectorT>
-placements_type const& text_symbolizer_helper<FaceManagerT, DetectorT>::placements() const
-{
-    return finder_->get_results();
-}
-
-
-/*****************************************************************************/
-
-
-template <typename FaceManagerT, typename DetectorT>
-bool shield_symbolizer_helper<FaceManagerT, DetectorT>::next()
-{
-    if (!placement_valid_ || !marker_) return false;
-    if (point_placement_)
-        return next_point_placement();
-    else
-        return next_line_placement();
-}
-
-template <typename FaceManagerT, typename DetectorT>
-bool shield_symbolizer_helper<FaceManagerT, DetectorT>::next_point_placement()
-{
-    position const& shield_pos = sym_.get_shield_displacement();
-    while (!points_.empty())
-    {
-        if (point_itr_ == points_.end())
-        {
-            //Just processed the last point. Try next placement.
-            if (!next_placement()) return false; //No more placements
-            //Start again from begin of list
-            point_itr_ = points_.begin();
-            continue; //Reexecute size check
-        }
-        position const& text_disp = placement_->properties.displacement;
-        double label_x = point_itr_->first + shield_pos.first;
-        double label_y = point_itr_->second + shield_pos.second;
-
-        finder_->clear_placements();
-        finder_->find_point_placement(label_x, label_y, angle_);
-        if (finder_->get_results().empty())
-        {
-            //No placement for this point. Keep it in points_ for next try.
-            point_itr_++;
-            continue;
-        }
-        //Found a label placement but not necessarily also a marker placement
-        // check to see if image overlaps anything too, there is only ever 1 placement found for points and verticies
-        if (!sym_.get_unlock_image())
-        {
-            // center image at text center position
-            // remove displacement from image label
-            placements_type const& p = finder_->get_results();
-            double lx = p[0].center.x - text_disp.first;
-            double ly = p[0].center.y - text_disp.second;
-            marker_x_ = lx - 0.5 * marker_w_;
-            marker_y_ = ly - 0.5 * marker_h_;
-            marker_ext_.re_center(lx, ly);
-        }
-        else
-        {  // center image at reference location
-            marker_x_ = label_x - 0.5 * marker_w_;
-            marker_y_ = label_y - 0.5 * marker_h_;
-            marker_ext_.re_center(label_x, label_y);
-        }
-
-        if (placement_->properties.allow_overlap || detector_.has_placement(marker_ext_))
-        {
-            detector_.insert(marker_ext_);
-            finder_->update_detector();
-            point_itr_ = points_.erase(point_itr_);
-            return true;
-        }
-        //No placement found. Try again
-        point_itr_++;
-    }
-    return false;
-}
-
-
-template <typename FaceManagerT, typename DetectorT>
-bool shield_symbolizer_helper<FaceManagerT, DetectorT>::next_line_placement()
-{
-    position const& pos = placement_->properties.displacement;
-    finder_->additional_boxes().clear();
-    //Markers are automatically centered
-    finder_->additional_boxes().push_back(
-        box2d<double>(-0.5 * marker_ext_.width()  - pos.first,
-                      -0.5 * marker_ext_.height() - pos.second,
-                      0.5 * marker_ext_.width()  - pos.first,
-                      0.5 * marker_ext_.height() - pos.second));
-    if ( sym_.clip())
-        return text_symbolizer_helper<FaceManagerT, DetectorT>::next_line_placement_clipped();
-    else
-        return text_symbolizer_helper<FaceManagerT, DetectorT>::next_line_placement();
-}
-
-
-template <typename FaceManagerT, typename DetectorT>
-void shield_symbolizer_helper<FaceManagerT, DetectorT>::init_marker()
-{
-    std::string filename = path_processor_type::evaluate(*sym_.get_filename(), this->feature_);
-    evaluate_transform(image_transform_, feature_, sym_.get_image_transform());
-    marker_.reset();
-    if (!filename.empty())
-    {
-        marker_ = marker_cache::instance().find(filename, true);
-    }
-    if (!marker_) {
-        marker_w_ = 0;
-        marker_h_ = 0;
-        marker_ext_.init(0, 0, 0, 0);
-        return;
-    }
-    marker_w_ = (*marker_)->width();
-    marker_h_ = (*marker_)->height();
-    double px0 = - 0.5 * marker_w_;
-    double py0 = - 0.5 * marker_h_;
-    double px1 = 0.5 * marker_w_;
-    double py1 = 0.5 * marker_h_;
-    double px2 = px1;
-    double py2 = py0;
-    double px3 = px0;
-    double py3 = py1;
-    image_transform_.transform(&px0,&py0);
-    image_transform_.transform(&px1,&py1);
-    image_transform_.transform(&px2,&py2);
-    image_transform_.transform(&px3,&py3);
-    marker_ext_.init(px0, py0, px1, py1);
-    marker_ext_.expand_to_include(px2, py2);
-    marker_ext_.expand_to_include(px3, py3);
-}
-
-template <typename FaceManagerT, typename DetectorT>
-pixel_position shield_symbolizer_helper<FaceManagerT, DetectorT>::get_marker_position(text_path const& p)
-{
-    position const& pos = placement_->properties.displacement;
-    if (placement_->properties.label_placement == LINE_PLACEMENT) {
-        double lx = p.center.x - pos.first;
-        double ly = p.center.y - pos.second;
-        double px = lx - 0.5*marker_w_;
-        double py = ly - 0.5*marker_h_;
-        marker_ext_.re_center(lx, ly);
-        //label is added to detector by get_line_placement(), but marker isn't
-        detector_.insert(marker_ext_);
-        return pixel_position(px, py);
-    } else {
-        //collision_detector is already updated for point placement in get_point_placement()
-        return pixel_position(marker_x_, marker_y_);
-    }
-}
-
-
-template <typename FaceManagerT, typename DetectorT>
-marker& shield_symbolizer_helper<FaceManagerT, DetectorT>::get_marker() const
-{
-    return **marker_;
-}
-
-template <typename FaceManagerT, typename DetectorT>
-agg::trans_affine const& shield_symbolizer_helper<FaceManagerT, DetectorT>::get_image_transform() const
-{
-    return image_transform_;
-}
-
-template class text_symbolizer_helper<face_manager<freetype_engine>, label_collision_detector4>;
-template class shield_symbolizer_helper<face_manager<freetype_engine>, label_collision_detector4>;
-} //namespace
diff --git a/src/symbolizer_keys.cpp b/src/symbolizer_keys.cpp
new file mode 100644
index 0000000..bc81756
--- /dev/null
+++ b/src/symbolizer_keys.cpp
@@ -0,0 +1,186 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/color.hpp>
+#include <mapnik/simplify.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/algorithm/string/replace.hpp>  // for replace
+#pragma GCC diagnostic pop
+
+namespace mapnik {
+
+static constexpr std::uint8_t const_max_key = static_cast<std::uint8_t>(keys::MAX_SYMBOLIZER_KEY);
+
+// tuple -> name, default value, enumeration to string converter lambda, target property type
+static const property_meta_type key_meta[const_max_key] =
+{
+    property_meta_type{ "gamma", nullptr, property_types::target_double},
+    property_meta_type{ "gamma-method", nullptr, property_types::target_gamma_method},
+    property_meta_type{ "opacity", nullptr, property_types::target_double},
+    property_meta_type{ "alignment",
+                        [](enumeration_wrapper e)
+                        {
+                            return enumeration<pattern_alignment_enum,pattern_alignment_enum_MAX>(pattern_alignment_enum(e.value)).as_string();
+                        },
+                        property_types::target_pattern_alignment},
+    property_meta_type{ "offset", nullptr, property_types::target_double},
+    property_meta_type{ "comp-op",
+                        [](enumeration_wrapper e) { return *comp_op_to_string(composite_mode_e(e.value)); }, property_types::target_comp_op},
+    property_meta_type{ "clip", nullptr, property_types::target_bool},
+    property_meta_type{ "fill", nullptr, property_types::target_color},
+    property_meta_type{ "fill-opacity", nullptr, property_types::target_double},
+    property_meta_type{ "stroke", nullptr, property_types::target_color},
+    property_meta_type{ "stroke-width", nullptr, property_types::target_double},
+    property_meta_type{ "stroke-opacity", nullptr, property_types::target_double},
+    property_meta_type{ "stroke-linejoin",
+                        [](enumeration_wrapper e)
+                        {
+                            return enumeration<line_join_enum,line_join_enum_MAX>(line_join_enum(e.value)).as_string();
+                        },
+                        property_types::target_line_join },
+    property_meta_type{ "stroke-linecap",
+                        [](enumeration_wrapper e)
+                        {
+                            return enumeration<line_cap_enum,line_cap_enum_MAX>(line_cap_enum(e.value)).as_string();
+                        },
+                        property_types::target_line_cap },
+    property_meta_type{ "stroke-gamma", nullptr, property_types::target_double },
+    property_meta_type{ "stroke-gamma-method", nullptr, property_types::target_gamma_method },
+    property_meta_type{ "stroke-dashoffset", nullptr, property_types::target_double },
+    property_meta_type{ "stroke-dasharray",  nullptr, property_types::target_dash_array },
+    property_meta_type{ "stroke-miterlimit", nullptr, property_types::target_double },
+    property_meta_type{ "geometry-transform",  nullptr, property_types::target_transform },
+    // TODO - should be called 'line-rasterizer' but for back compat with 2.3.x we keep as 'rasterizer'
+    // https://github.com/mapnik/mapnik/issues/2503
+    property_meta_type{ "rasterizer",
+                        [](enumeration_wrapper e)
+                        {
+                            return enumeration<line_rasterizer_enum,line_rasterizer_enum_MAX>(line_rasterizer_enum(e.value)).as_string();
+                        },
+                        property_types::target_double },
+    property_meta_type{ "transform", nullptr, property_types::target_transform },
+    property_meta_type{ "spacing", nullptr, property_types::target_double },
+    property_meta_type{ "max-error", nullptr, property_types::target_double },
+    property_meta_type{ "allow-overlap", nullptr, property_types::target_bool },
+    property_meta_type{ "ignore-placement",  nullptr, property_types::target_bool },
+    property_meta_type{ "width", nullptr, property_types::target_double },
+    property_meta_type{ "height", nullptr, property_types::target_double },
+    property_meta_type{ "file", nullptr, property_types::target_string },
+    property_meta_type{ "shield-dx", nullptr, property_types::target_double },
+    property_meta_type{ "shield-dy", nullptr, property_types::target_double },
+    property_meta_type{ "unlock-image", nullptr, property_types::target_bool },
+    property_meta_type{ "mode", nullptr, property_types::target_double },
+    property_meta_type{ "scaling", nullptr, property_types::target_double },
+    property_meta_type{ "filter-factor",  nullptr, property_types::target_double },
+    property_meta_type{ "mesh-size", nullptr, property_types::target_double },
+    property_meta_type{ "premultiplied",  nullptr, property_types::target_bool },
+    property_meta_type{ "smooth",  nullptr, property_types::target_double },
+    property_meta_type{ "simplify-algorithm",
+                        [](enumeration_wrapper e)
+                        {
+                            return *simplify_algorithm_to_string(simplify_algorithm_e(e.value));
+                        },
+                        property_types::target_simplify_algorithm },
+    property_meta_type{ "simplify", nullptr, property_types::target_double },
+    property_meta_type{ "halo-rasterizer",
+                        [](enumeration_wrapper e)
+                        {
+                            return enumeration<halo_rasterizer_enum,halo_rasterizer_enum_MAX>(halo_rasterizer_enum(e.value)).as_string();
+                        },
+                        property_types::target_halo_rasterizer },
+    property_meta_type{ "text-placements", nullptr, property_types::target_double },
+    property_meta_type{ "placement",
+                        [](enumeration_wrapper e)
+                        { return enumeration<label_placement_enum,label_placement_enum_MAX>(label_placement_enum(e.value)).as_string();}, property_types::target_placement },
+    property_meta_type{ "placement", // FIXME - change property name
+                        [](enumeration_wrapper e)
+                        {
+                            return enumeration<marker_placement_enum,marker_placement_enum_MAX>(marker_placement_enum(e.value)).as_string();
+                        },
+                        property_types::target_markers_placement },
+    property_meta_type{ "multi-policy",
+                        [](enumeration_wrapper e)
+                        {
+                            return enumeration<marker_multi_policy_enum,marker_multi_policy_enum_MAX>(marker_multi_policy_enum(e.value)).as_string();
+                        },
+                        property_types::target_markers_multipolicy },
+    property_meta_type{ "placement", // FIXME - change property name
+                        [](enumeration_wrapper e) { return enumeration<point_placement_enum,point_placement_enum_MAX>(point_placement_enum(e.value)).as_string();},
+                        property_types::target_double },
+    property_meta_type{ "colorizer", nullptr, property_types::target_colorizer},
+    property_meta_type{ "halo-transform",  nullptr, property_types::target_transform },
+    property_meta_type{ "num-columns",  nullptr, property_types::target_integer},
+    property_meta_type{ "start-column", nullptr, property_types::target_integer},
+    property_meta_type{ "repeat-key", nullptr, property_types::target_repeat_key},
+    property_meta_type{ "symbolizer-properties", nullptr, property_types::target_group_symbolizer_properties},
+    property_meta_type{ "largest-box-only", nullptr, property_types::target_bool },
+    property_meta_type{ "minimum-path-length", nullptr, property_types::target_double },
+    property_meta_type{ "halo-comp-op",
+                        [](enumeration_wrapper e) { return *comp_op_to_string(composite_mode_e(e.value)); },
+                        property_types::target_halo_comp_op},
+    property_meta_type{ "text-transform", [](enumeration_wrapper e)
+                        {return enumeration<text_transform_enum,text_transform_enum_MAX>(text_transform_enum(e.value)).as_string();},
+                        property_types::target_text_transform},
+    property_meta_type{ "horizontal-alignment", [](enumeration_wrapper e)
+                        {return enumeration<horizontal_alignment_enum,horizontal_alignment_enum_MAX>(horizontal_alignment_enum(e.value)).as_string();},
+                        property_types::target_horizontal_alignment},
+    property_meta_type{ "justify-alignment", [](enumeration_wrapper e)
+                        {return enumeration<justify_alignment_enum,justify_alignment_enum_MAX>(justify_alignment_enum(e.value)).as_string();},
+                        property_types::target_justify_alignment},
+    property_meta_type{ "vertical-alignment", [](enumeration_wrapper e)
+                        {return enumeration<vertical_alignment_enum,vertical_alignment_enum_MAX>(vertical_alignment_enum(e.value)).as_string();},
+                        property_types::target_vertical_alignment},
+    property_meta_type{ "upright",  [](enumeration_wrapper e)
+                        {return enumeration<text_upright_enum,text_upright_enum_MAX>(text_upright_enum(e.value)).as_string();},
+                        property_types::target_upright},
+    property_meta_type{ "avoid-edges",nullptr, property_types::target_bool },
+    property_meta_type{ "font-feature-settings", nullptr, property_types::target_font_feature_settings },
+
+};
+
+property_meta_type const& get_meta(mapnik::keys key)
+{
+    return key_meta[static_cast<int>(key)];
+}
+
+mapnik::keys get_key(std::string const& name)
+{
+    std::string name_copy(name);
+    boost::algorithm::replace_all(name_copy,"_","-");
+    for (unsigned i=0; i< const_max_key ; ++i)
+    {
+        property_meta_type const& item = key_meta[i];
+        if (name_copy == std::get<0>(item))
+        {
+            return static_cast<mapnik::keys>(i);
+        }
+    }
+    throw std::runtime_error("no key found for '" + name + "'");
+    return static_cast<mapnik::keys>(0);
+}
+
+}
diff --git a/src/text/face.cpp b/src/text/face.cpp
new file mode 100644
index 0000000..dbe088f
--- /dev/null
+++ b/src/text/face.cpp
@@ -0,0 +1,124 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/text/face.hpp>
+#include <mapnik/debug.hpp>
+
+extern "C"
+{
+#include FT_GLYPH_H
+}
+
+namespace mapnik
+{
+
+font_face::font_face(FT_Face face)
+    : face_(face) {}
+
+bool font_face::set_character_sizes(double size)
+{
+    return !FT_Set_Char_Size(face_,0,(FT_F26Dot6)(size * (1<<6)),0,0);
+}
+
+bool font_face::set_unscaled_character_sizes()
+{
+    return !FT_Set_Char_Size(face_,0,face_->units_per_EM,0,0);
+}
+
+bool font_face::glyph_dimensions(glyph_info & glyph) const
+{
+    FT_Vector pen;
+    pen.x = 0;
+    pen.y = 0;
+    FT_Set_Transform(face_, 0, &pen);
+
+    if (FT_Load_Glyph(face_, glyph.glyph_index, FT_LOAD_NO_HINTING))
+    {
+        MAPNIK_LOG_ERROR(font_face) << "FT_Load_Glyph failed";
+        return false;
+    }
+    FT_Glyph image;
+    if (FT_Get_Glyph(face_->glyph, &image))
+    {
+        MAPNIK_LOG_ERROR(font_face) << "FT_Get_Glyph failed";
+        return false;
+    }
+    FT_BBox glyph_bbox;
+    FT_Glyph_Get_CBox(image, FT_GLYPH_BBOX_TRUNCATE, &glyph_bbox);
+    FT_Done_Glyph(image);
+    glyph.unscaled_ymin = glyph_bbox.yMin;
+    glyph.unscaled_ymax = glyph_bbox.yMax;
+    glyph.unscaled_advance = face_->glyph->advance.x;
+    glyph.unscaled_line_height = face_->size->metrics.height;
+    return true;
+}
+
+font_face::~font_face()
+{
+    MAPNIK_LOG_DEBUG(font_face) <<
+        "font_face: Clean up face \"" << family_name() <<
+        " " << style_name() << "\"";
+
+    FT_Done_Face(face_);
+}
+
+/******************************************************************************/
+
+void font_face_set::add(face_ptr face)
+{
+    faces_.push_back(face);
+}
+
+void font_face_set::set_character_sizes(double size)
+{
+    for (face_ptr const& face : faces_)
+    {
+        face->set_character_sizes(size);
+    }
+}
+
+void font_face_set::set_unscaled_character_sizes()
+{
+    for (face_ptr const& face : faces_)
+    {
+        face->set_unscaled_character_sizes();
+    }
+}
+
+/******************************************************************************/
+
+void stroker::init(double radius)
+{
+    FT_Stroker_Set(s_, (FT_Fixed) (radius * (1<<6)),
+                   FT_STROKER_LINECAP_ROUND,
+                   FT_STROKER_LINEJOIN_ROUND,
+                   0);
+}
+
+stroker::~stroker()
+{
+    MAPNIK_LOG_DEBUG(font_engine_freetype) << "stroker: Destroy stroker=" << s_;
+
+    FT_Stroker_Done(s_);
+}
+
+}//ns mapnik
diff --git a/src/text/font_feature_settings.cpp b/src/text/font_feature_settings.cpp
new file mode 100644
index 0000000..67473b5
--- /dev/null
+++ b/src/text/font_feature_settings.cpp
@@ -0,0 +1,112 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/text/font_feature_settings.hpp>
+#include <mapnik/config_error.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#include <boost/spirit/include/qi.hpp>
+#include <boost/version.hpp>
+#pragma GCC diagnostic pop
+
+// stl
+#include <algorithm>
+#include <cctype>
+#include <sstream>
+#include <functional>
+
+namespace mapnik
+{
+
+font_feature_settings::font_feature_settings(std::string const& features)
+    : features_()
+{
+    from_string(features);
+}
+
+font_feature_settings::font_feature_settings()
+    : features_() {}
+
+void font_feature_settings::from_string(std::string const& features)
+{
+    features_.clear();
+
+    if (std::all_of(features.begin(), features.end(), isspace)) return;
+
+    namespace qi = boost::spirit::qi;
+    qi::char_type char_;
+    qi::as_string_type as_string;
+
+#if BOOST_VERSION <= 104800
+    // Call correct overload.
+    using std::placeholders::_1;
+    void (font_feature_settings::*append)(std::string const&) = &font_feature_settings::append;
+    if (!qi::parse(features.begin(), features.end(), as_string[+(char_ - ',')][std::bind(append, this, _1)] % ','))
+#else
+    auto app = [&](std::string const& s) { append(s); };
+    if (!qi::parse(features.begin(), features.end(), as_string[+(char_ - ',')][app] % ','))
+#endif
+
+    {
+        throw config_error("failed to parse font-feature-settings: '" + features + "'");
+    }
+}
+
+std::string font_feature_settings::to_string() const
+{
+    std::ostringstream output;
+    constexpr size_t buffsize = 128;
+    char buff[buffsize];
+    bool first = true;
+
+    for (auto feature : features_)
+    {
+        if (!first)
+        {
+            output << ", ";
+            first = false;
+        }
+        hb_feature_to_string(&feature, buff, buffsize);
+        output << buff;
+    }
+
+    return output.str();
+}
+
+void font_feature_settings::append(std::string const& feature)
+{
+    features_.emplace_back();
+    feature_iterator current_feature = features_.end() - 1;
+
+    if (!hb_feature_from_string(feature.c_str(), feature.length(), &*current_feature))
+    {
+        features_.erase(current_feature);
+        throw config_error("failed to parse font-feature-settings: '" + feature + "'");
+    }
+}
+
+}
diff --git a/src/text/font_library.cpp b/src/text/font_library.cpp
new file mode 100644
index 0000000..0e19b8c
--- /dev/null
+++ b/src/text/font_library.cpp
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/text/font_library.hpp>
+
+// stl
+#include <cstdlib>
+#include <stdexcept>
+
+// freetype2
+extern "C"
+{
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_MODULE_H
+}
+
+namespace {
+
+void* _Alloc_Func(FT_Memory memory, long size)
+{
+    return std::malloc(size);
+}
+
+void _Free_Func(FT_Memory memory, void *block)
+{
+    std::free(block);
+}
+
+void* _Realloc_Func(FT_Memory memory, long cur_size, long new_size, void* block)
+{
+    return std::realloc(block, new_size);
+}
+
+}
+
+namespace mapnik {
+
+font_library::font_library()
+  : library_(nullptr),
+    memory_(new FT_MemoryRec_)
+{
+    memory_->alloc = _Alloc_Func;
+    memory_->free = _Free_Func;
+    memory_->realloc = _Realloc_Func;
+    FT_Error error = FT_New_Library(&*memory_, &library_);
+    if (error) throw std::runtime_error("can not initalize FreeType2 library");
+    FT_Add_Default_Modules(library_);
+}
+
+FT_Library font_library::get()
+{
+    return library_;
+}
+
+font_library::~font_library()
+{
+    FT_Done_Library(library_);
+}
+
+} // end namespace mapnik
diff --git a/src/text/formatting/base.cpp b/src/text/formatting/base.cpp
new file mode 100644
index 0000000..b1e9c2a
--- /dev/null
+++ b/src/text/formatting/base.cpp
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/text/formatting/base.hpp>
+#include <mapnik/text/formatting/list.hpp>
+#include <mapnik/text/formatting/registry.hpp>
+#include <mapnik/xml_node.hpp>
+
+namespace mapnik { namespace formatting {
+
+node_ptr node::from_xml(xml_node const& xml, fontset_map const& fontsets)
+{
+    auto list = std::make_shared<list_node>();
+    for (auto const& node : xml)
+    {
+        if (node.name() == "Placement")
+            continue;
+        node_ptr n = registry::instance().from_xml(node,fontsets);
+        if (n) list->push_back(n);
+    }
+    if (list->get_children().size() == 1)
+    {
+        return list->get_children()[0];
+    }
+    else if (list->get_children().size() > 1)
+    {
+        return list;
+    }
+    else
+    {
+        return nullptr;
+    }
+}
+
+} //ns formatting
+} //ns mapnik
diff --git a/src/text/formatting/format.cpp b/src/text/formatting/format.cpp
new file mode 100644
index 0000000..524abcf
--- /dev/null
+++ b/src/text/formatting/format.cpp
@@ -0,0 +1,168 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/text/formatting/format.hpp>
+#include <mapnik/text/properties_util.hpp>
+#include <mapnik/ptree_helpers.hpp>
+#include <mapnik/xml_node.hpp>
+
+//boost
+#include <boost/optional.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+namespace mapnik { namespace formatting {
+
+using boost::property_tree::ptree;
+
+void format_node::to_xml(ptree & xml) const
+{
+    ptree & new_node = xml.push_back(ptree::value_type("Format", ptree()))->second;
+
+    if (text_size) serialize_property("size", *text_size, new_node);
+    if (character_spacing) serialize_property("character-spacing", *character_spacing, new_node);
+    if (line_spacing) serialize_property("line-spacing", *line_spacing, new_node);
+    if (text_opacity) serialize_property("opacity", *text_opacity, new_node);
+    if (wrap_before) serialize_property("wrap-before", *wrap_before, new_node);
+    if (repeat_wrap_char) serialize_property("repeat-wrap-character", *repeat_wrap_char, new_node);
+    if (fill) serialize_property("fill", *fill, new_node);
+    if (halo_fill) serialize_property("halo-fill", *halo_fill, new_node);
+    if (halo_radius) serialize_property("halo-radius", *halo_radius, new_node);
+    if (text_transform) serialize_property("text-transform", *text_transform, new_node);
+    if (ff_settings) serialize_property("font-feature-settings", *ff_settings, new_node);
+
+    if (face_name) set_attr(new_node, "face-name", *face_name);
+    if (fontset) set_attr(new_node, "fontset-name", fontset->get_name());
+
+    if (child_) child_->to_xml(new_node);
+}
+
+
+node_ptr format_node::from_xml(xml_node const& xml, fontset_map const& fontsets)
+{
+    auto n = std::make_shared<format_node>();
+    node_ptr child = node::from_xml(xml,fontsets);
+    n->set_child(child);
+
+    set_property_from_xml<double>(n->text_size, "size", xml);
+    set_property_from_xml<double>(n->character_spacing, "character-spacing", xml);
+    set_property_from_xml<double>(n->line_spacing, "line-spacing", xml);
+    set_property_from_xml<double>(n->text_opacity, "opacity", xml);
+    //set_property_from_xml<double>(n->halo_opacity, "halo-opacity", xml); FIXME
+    set_property_from_xml<double>(n->halo_radius, "halo-radius", xml);
+    set_property_from_xml<color>(n->fill, "fill", xml);
+    set_property_from_xml<color>(n->halo_fill, "halo-fill", xml);
+    set_property_from_xml<text_transform_e>(n->text_transform, "text-transform", xml);
+    set_property_from_xml<font_feature_settings>(n->ff_settings, "font-feature-settings", xml);
+
+    boost::optional<std::string> face_name = xml.get_opt_attr<std::string>("face-name");
+    if (face_name)
+    {
+        n->face_name = *face_name;
+    }
+    boost::optional<std::string> fontset_name = xml.get_opt_attr<std::string>("fontset-name");
+    if (fontset_name)
+    {
+        std::map<std::string,font_set>::const_iterator itr = fontsets.find(*fontset_name);
+        if (itr != fontsets.end())
+        {
+            n->fontset = itr->second;
+        }
+        else
+        {
+            throw config_error("Unable to find any fontset named '" + *fontset_name + "' for <Format> node", xml);
+        }
+    }
+    if (face_name && !face_name->empty() && n->fontset)
+    {
+        throw config_error("Can't have both face-name and fontset-name", xml);
+    }
+    return n;
+}
+
+
+void format_node::apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& attrs, text_layout &output) const
+{
+
+    evaluated_format_properties_ptr & new_properties = output.new_child_format_ptr(p);
+    if (text_size) new_properties->text_size = util::apply_visitor(extract_value<value_double>(feature,attrs), *text_size);
+    if (character_spacing) new_properties->character_spacing = util::apply_visitor(extract_value<value_double>(feature,attrs), *character_spacing);
+    if (line_spacing) new_properties->line_spacing = util::apply_visitor(extract_value<value_double>(feature,attrs), *line_spacing);
+    if (text_opacity) new_properties->text_opacity = util::apply_visitor(extract_value<value_double>(feature,attrs), *text_opacity);
+    if (halo_radius) new_properties->halo_radius = util::apply_visitor(extract_value<value_double>(feature,attrs), *halo_radius);
+    if (fill) new_properties->fill = util::apply_visitor(extract_value<color>(feature,attrs), *fill);
+    if (halo_fill) new_properties->halo_fill = util::apply_visitor(extract_value<color>(feature,attrs), *halo_fill);
+    if (text_transform) new_properties->text_transform = util::apply_visitor(extract_value<text_transform_enum>(feature,attrs), *text_transform);
+    if (ff_settings) new_properties->ff_settings = util::apply_visitor(extract_value<font_feature_settings>(feature,attrs), *ff_settings);
+
+    if (fontset)
+    {
+        new_properties->fontset = *fontset;
+    }
+    else
+    {
+        if (face_name)
+        {
+            new_properties->face_name = *face_name;
+            new_properties->fontset.reset();
+        }
+    }
+
+    if (child_) child_->apply(new_properties, feature, attrs, output);
+    else MAPNIK_LOG_WARN(format) << "Useless format: No text to format";
+}
+
+
+void format_node::set_child(node_ptr child)
+{
+    child_ = child;
+}
+
+
+node_ptr format_node::get_child() const
+{
+    return child_;
+}
+
+void format_node::add_expressions(expression_set & output) const
+{
+    if (text_size && is_expression(*text_size)) output.insert(util::get<expression_ptr>(*text_size));
+    if (character_spacing && is_expression(*character_spacing)) output.insert(util::get<expression_ptr>(*character_spacing));
+    if (line_spacing && is_expression(*line_spacing)) output.insert(util::get<expression_ptr>(*line_spacing));
+    if (halo_radius && is_expression(*halo_radius)) output.insert(util::get<expression_ptr>(*halo_radius));
+    if (text_opacity && is_expression(*text_opacity)) output.insert(util::get<expression_ptr>(*text_opacity));
+    //if (halo_opacity && is_expression(*halo_opacity)) output.insert(util::get<expression_ptr>(*halo_opacity));
+    if (wrap_before && is_expression(*wrap_before)) output.insert(util::get<expression_ptr>(*wrap_before));
+    if (repeat_wrap_char && is_expression(*repeat_wrap_char)) output.insert(util::get<expression_ptr>(*repeat_wrap_char));
+    if (fill && is_expression(*fill)) output.insert(util::get<expression_ptr>(*fill));
+    if (halo_fill && is_expression(*halo_fill)) output.insert(util::get<expression_ptr>(*halo_fill));
+    if (text_transform && is_expression(*text_transform)) output.insert(util::get<expression_ptr>(*text_transform));
+    if (ff_settings && is_expression(*ff_settings)) output.insert(util::get<expression_ptr>(*ff_settings));
+    if (child_) child_->add_expressions(output);
+}
+
+} //ns formatting
+} //ns mapnik
diff --git a/src/text/formatting/layout.cpp b/src/text/formatting/layout.cpp
new file mode 100644
index 0000000..d0372ef
--- /dev/null
+++ b/src/text/formatting/layout.cpp
@@ -0,0 +1,152 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/text/glyph_info.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/ptree_helpers.hpp>
+#include <mapnik/expression_string.hpp>
+#include <mapnik/text/formatting/layout.hpp>
+#include <mapnik/xml_node.hpp>
+#include <mapnik/config_error.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/text/properties_util.hpp>
+#include <mapnik/boolean.hpp>
+
+// boost
+#include <boost/property_tree/ptree.hpp>
+
+namespace mapnik { namespace formatting {
+
+using boost::property_tree::ptree;
+
+void layout_node::to_xml(ptree &xml) const
+{
+    ptree & new_node = xml.push_back(ptree::value_type("Layout", ptree()))->second;
+
+    if (dx) serialize_property("dx", *dx, new_node);
+    if (dy) serialize_property("dy", *dy, new_node);
+    if (text_ratio) serialize_property("text-ratio", *text_ratio, new_node);
+    if (wrap_width) serialize_property("wrap-width", *wrap_width, new_node);
+    if (wrap_char) serialize_property("wrap-character", *wrap_char, new_node);
+    if (wrap_before) serialize_property("wrap-before", *wrap_before, new_node);
+    if (repeat_wrap_char) serialize_property("repeat-wrap-character", *repeat_wrap_char, new_node);
+    if (rotate_displacement) serialize_property("rotate-displacement", *rotate_displacement, new_node);
+    if (orientation) serialize_property("orientation", *orientation, new_node);
+    if (halign) serialize_property("horizontal-alignment", *halign, new_node);
+    if (valign) serialize_property("vertical-alignment", *valign, new_node);
+    if (jalign) serialize_property("justify-alignment", *jalign, new_node);
+
+    if (child_) child_->to_xml(new_node);
+}
+
+node_ptr layout_node::from_xml(xml_node const& xml, fontset_map const& fontsets)
+{
+    auto n = std::make_shared<layout_node>();
+    node_ptr child = node::from_xml(xml, fontsets);
+    n->set_child(child);
+
+    if (xml.has_attribute("dx")) set_property_from_xml<double>(n->dx, "dx", xml);
+    if (xml.has_attribute("dy")) set_property_from_xml<double>(n->dy, "dy", xml);
+    if (xml.has_attribute("text-ratio")) set_property_from_xml<double>(n->text_ratio, "text-ratio", xml);
+    if (xml.has_attribute("wrap-width")) set_property_from_xml<double>(n->wrap_width, "wrap-width", xml);
+    if (xml.has_attribute("wrap-character")) set_property_from_xml<std::string>(n->wrap_char, "wrap-character", xml);
+    if (xml.has_attribute("wrap-before")) set_property_from_xml<mapnik::boolean_type>(n->wrap_before, "wrap-before", xml);
+    if (xml.has_attribute("repeat-wrap-character")) set_property_from_xml<mapnik::boolean_type>(n->repeat_wrap_char, "repeat-wrap-character", xml);
+    if (xml.has_attribute("rotate-displacement")) set_property_from_xml<mapnik::boolean_type>(n->rotate_displacement, "rotate-displacement", xml);
+    if (xml.has_attribute("orientation")) set_property_from_xml<double>(n->orientation, "orientation", xml);
+    if (xml.has_attribute("horizontal-alignment")) set_property_from_xml<horizontal_alignment_e>(n->halign, "horizontal-alignment", xml);
+    if (xml.has_attribute("vertical-alignment")) set_property_from_xml<vertical_alignment_e>(n->valign, "vertical-alignment", xml);
+    if (xml.has_attribute("justify-alignment")) set_property_from_xml<justify_alignment_e>(n->jalign, "justify-alignment", xml);
+    return n;
+}
+
+void layout_node::apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout & parent) const
+{
+    text_layout_properties new_properties(parent.get_layout_properties());
+    if (dx) new_properties.dx = *dx;
+    if (dy) new_properties.dy = *dy;
+    if (text_ratio) new_properties.text_ratio = *text_ratio;
+    if (wrap_width) new_properties.wrap_width = *wrap_width;
+    if (wrap_char) new_properties.wrap_char = *wrap_char;
+    if (wrap_before) new_properties.wrap_before = *wrap_before;
+    if (repeat_wrap_char) new_properties.repeat_wrap_char = *repeat_wrap_char;
+    if (rotate_displacement) new_properties.rotate_displacement = *rotate_displacement;
+    if (orientation) new_properties.orientation = *orientation;
+    if (halign) new_properties.halign = *halign;
+    if (valign) new_properties.valign = *valign;
+    if (jalign) new_properties.jalign = *jalign;
+
+    // starting a new offset child with the new displacement value
+    // we pass a null format tree since this is not the parent but a child
+    text_layout_ptr child_layout = std::make_shared<text_layout>(parent.get_font_manager(),
+                                                                 feature,
+                                                                 vars,
+                                                                 parent.get_scale_factor(),
+                                                                 parent.get_default_text_properties(),
+                                                                 new_properties,
+                                                                 formatting::node_ptr());
+    // process contained format tree into the child node
+    if (child_)
+    {
+        child_->apply(p, feature, vars, *child_layout);
+    }
+    else
+    {
+        MAPNIK_LOG_WARN(format) << "Useless layout node: Contains no text";
+    }
+    parent.add_child(child_layout);
+}
+
+void layout_node::set_child(node_ptr child)
+{
+    child_ = child;
+}
+
+node_ptr layout_node::get_child() const
+{
+    return child_;
+}
+
+void layout_node::add_expressions(expression_set & output) const
+{
+    if (dx && is_expression(*dx)) output.insert(util::get<expression_ptr>(*dx));
+    if (dy && is_expression(*dy)) output.insert(util::get<expression_ptr>(*dy));
+    if (orientation && is_expression(*orientation)) output.insert(util::get<expression_ptr>(*orientation));
+    if (wrap_width && is_expression(*wrap_width)) output.insert(util::get<expression_ptr>(*wrap_width));
+    if (wrap_char && is_expression(*wrap_char)) output.insert(util::get<expression_ptr>(*wrap_char));
+    if (wrap_before && is_expression(*wrap_before)) output.insert(util::get<expression_ptr>(*wrap_before));
+    if (repeat_wrap_char && is_expression(*repeat_wrap_char)) output.insert(util::get<expression_ptr>(*repeat_wrap_char));
+    if (rotate_displacement && is_expression(*rotate_displacement)) output.insert(util::get<expression_ptr>(*rotate_displacement));
+    if (text_ratio && is_expression(*text_ratio)) output.insert(util::get<expression_ptr>(*text_ratio));
+    if (halign && is_expression(*halign)) output.insert(util::get<expression_ptr>(*halign));
+    if (valign && is_expression(*valign)) output.insert(util::get<expression_ptr>(*valign));
+    if (jalign && is_expression(*jalign)) output.insert(util::get<expression_ptr>(*jalign));
+
+    if (child_) child_->add_expressions(output);
+}
+
+} //ns formatting
+} //ns mapnik
diff --git a/src/text/formatting/list.cpp b/src/text/formatting/list.cpp
new file mode 100644
index 0000000..1d6f7b9
--- /dev/null
+++ b/src/text/formatting/list.cpp
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/text/formatting/list.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+
+// boost
+#include <boost/property_tree/ptree.hpp>
+
+namespace mapnik {
+using boost::property_tree::ptree;
+
+namespace formatting {
+
+void list_node::to_xml(boost::property_tree::ptree & xml) const
+{
+    for (node_ptr const& node : children_)
+    {
+        node->to_xml(xml);
+    }
+}
+
+
+void list_node::apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout & output) const
+{
+    for (node_ptr const& node : children_)
+    {
+        node->apply(p, feature, vars, output);
+    }
+}
+
+
+void list_node::add_expressions(expression_set &output) const
+{
+    for (node_ptr const& node : children_)
+    {
+        node->add_expressions(output);
+    }
+}
+
+void list_node::push_back(node_ptr n)
+{
+    children_.push_back(n);
+}
+
+void list_node::clear()
+{
+    children_.clear();
+}
+
+void list_node::set_children(std::vector<node_ptr> const& children)
+{
+    children_ = children;
+}
+
+std::vector<node_ptr> const& list_node::get_children() const
+{
+    return children_;
+}
+} // ns mapnik
+} // ns formatting
diff --git a/src/text/formatting/registry.cpp b/src/text/formatting/registry.cpp
new file mode 100644
index 0000000..4d28dd0
--- /dev/null
+++ b/src/text/formatting/registry.cpp
@@ -0,0 +1,61 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/text/formatting/registry.hpp>
+#include <mapnik/text/formatting/text.hpp>
+#include <mapnik/text/formatting/format.hpp>
+#include <mapnik/text/formatting/layout.hpp>
+#include <mapnik/xml_node.hpp>
+#include <mapnik/config_error.hpp>
+
+namespace mapnik
+{
+namespace formatting
+{
+
+registry::registry()
+{
+    register_name("<xmltext>", &text_node::from_xml);
+    register_name("Format", &format_node::from_xml);
+    // back compatibility shim - to be removed at mapnik 4
+    register_name("ExpressionFormat", &format_node::from_xml);
+    register_name("Layout", &layout_node::from_xml);
+}
+
+void registry::register_name(std::string const& name, from_xml_function_ptr ptr, bool overwrite)
+{
+    if (overwrite) {
+        map_[name] = ptr;
+    } else {
+        map_.emplace(name, ptr);
+    }
+}
+
+node_ptr registry::from_xml(xml_node const& xml, fontset_map const& fontsets)
+{
+    std::map<std::string, from_xml_function_ptr>::const_iterator itr = map_.find(xml.name());
+    if (itr == map_.end())  throw config_error("Unknown element '" + xml.name() + "'", xml);
+    xml.set_processed(true);
+    return itr->second(xml, fontsets);
+}
+} //ns formatting
+} //ns mapnik
diff --git a/src/text/formatting/text.cpp b/src/text/formatting/text.cpp
new file mode 100644
index 0000000..51c7086
--- /dev/null
+++ b/src/text/formatting/text.cpp
@@ -0,0 +1,95 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/text/formatting/text.hpp>
+#include <mapnik/expression_string.hpp>
+#include <mapnik/expression_evaluator.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/xml_node.hpp>
+#include <mapnik/text/text_layout.hpp>
+
+// boost
+#include <boost/property_tree/ptree.hpp>
+
+namespace mapnik
+{
+namespace formatting
+{
+
+using boost::property_tree::ptree;
+
+void text_node::to_xml(ptree & xml) const
+{
+    ptree & new_node = xml.push_back(ptree::value_type("<xmltext>", ptree()))->second;
+    new_node.put_value(to_expression_string(*text_));
+}
+
+node_ptr text_node::from_xml(xml_node const& xml, fontset_map const& fontsets)
+{
+    return std::make_shared<text_node>(xml.get_value<expression_ptr>());
+}
+
+void text_node::apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout &output) const
+{
+    mapnik::value_unicode_string text_str = util::apply_visitor(evaluate<feature_impl,value_type,attributes>(feature,vars), *text_).to_unicode();
+    if (p->text_transform == UPPERCASE)
+    {
+        text_str = text_str.toUpper();
+    }
+    else if (p->text_transform == LOWERCASE)
+    {
+        text_str = text_str.toLower();
+    }
+#if !UCONFIG_NO_BREAK_ITERATION
+    else if (p->text_transform == CAPITALIZE)
+    {
+        // note: requires BreakIterator support in ICU which is optional
+        text_str = text_str.toTitle(nullptr);
+    }
+#endif
+    if (text_str.length() > 0) {
+        output.add_text(text_str, p);
+    }
+}
+
+
+void text_node::add_expressions(expression_set &output) const
+{
+    if (text_) output.insert(text_);
+}
+
+
+void text_node::set_text(expression_ptr text)
+{
+    text_ = text;
+}
+
+
+expression_ptr text_node::get_text() const
+{
+    return text_;
+}
+
+} //ns formatting
+} //ns mapnik
diff --git a/src/text/glyph_positions.cpp b/src/text/glyph_positions.cpp
new file mode 100644
index 0000000..1f42ec6
--- /dev/null
+++ b/src/text/glyph_positions.cpp
@@ -0,0 +1,87 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+//mapnik
+#include <mapnik/text/glyph_positions.hpp>
+#include <mapnik/pixel_position.hpp>
+#include <mapnik/text/rotation.hpp>
+#include <mapnik/text/glyph_info.hpp>
+
+// stl
+#include <vector>
+
+namespace mapnik
+{
+
+glyph_positions::glyph_positions()
+    : data_(),
+      base_point_(),
+      marker_(),
+      marker_pos_(),
+      bbox_() {}
+
+glyph_positions::const_iterator glyph_positions::begin() const
+{
+    return data_.begin();
+}
+
+glyph_positions::const_iterator glyph_positions::end() const
+{
+    return data_.end();
+}
+
+void glyph_positions::emplace_back(glyph_info const& glyph, pixel_position offset, rotation const& rot)
+{
+    data_.emplace_back(glyph, offset, rot);
+}
+
+void glyph_positions::reserve(unsigned count)
+{
+    data_.reserve(count);
+}
+
+pixel_position const& glyph_positions::get_base_point() const
+{
+    return base_point_;
+}
+
+void glyph_positions::set_base_point(pixel_position const& base_point)
+{
+    base_point_ = base_point;
+}
+
+void glyph_positions::set_marker(marker_info_ptr marker, pixel_position const& marker_pos)
+{
+    marker_ = marker;
+    marker_pos_ = marker_pos;
+}
+
+marker_info_ptr glyph_positions::marker() const
+{
+    return marker_;
+}
+
+pixel_position const& glyph_positions::marker_pos() const
+{
+    return marker_pos_;
+}
+
+}// ns mapnik
diff --git a/src/text/itemizer.cpp b/src/text/itemizer.cpp
new file mode 100644
index 0000000..876c192
--- /dev/null
+++ b/src/text/itemizer.cpp
@@ -0,0 +1,195 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+//mapnik
+#include <mapnik/text/itemizer.hpp>
+#include <mapnik/text/scrptrun.hpp>
+#include <mapnik/debug.hpp>
+
+// stl
+#include <algorithm>
+#include <cassert>
+
+namespace mapnik
+{
+
+text_itemizer::text_itemizer()
+    : text_(), format_runs_(), direction_runs_(), script_runs_()
+{
+    forced_line_breaks_.push_back(0);
+}
+
+void text_itemizer::add_text(mapnik::value_unicode_string const& str, evaluated_format_properties_ptr const& format)
+{
+    unsigned start = text_.length();
+    text_ += str;
+    format_runs_.emplace_back(format, start, text_.length());
+
+    while ((start = text_.indexOf('\n', start)+1) > 0)
+    {
+        forced_line_breaks_.push_back(start);
+    }
+}
+
+std::list<text_item> const& text_itemizer::itemize(unsigned start, unsigned end)
+{
+    if (end == 0) {
+        end = text_.length();
+    }
+    // format itemiziation is done by add_text()
+    itemize_direction(start, end);
+    itemize_script();
+    create_item_list();
+    return output_;
+}
+
+void text_itemizer::clear()
+{
+    output_.clear();
+    text_.remove();
+    format_runs_.clear();
+    forced_line_breaks_.clear();
+    forced_line_breaks_.push_back(0);
+}
+
+std::pair<unsigned, unsigned> text_itemizer::line(unsigned i) const
+{
+#ifdef MAPNIK_DEBUG
+    if (i >= forced_line_breaks_.size()) return std::make_pair(0, 0);
+#endif
+    if (i == forced_line_breaks_.size()-1)
+    {
+        return std::make_pair(forced_line_breaks_[i], text_.length());
+    }
+    //Note -1 offset to exclude the \n char
+    return std::make_pair(forced_line_breaks_[i], forced_line_breaks_[i+1]-1);
+}
+
+unsigned text_itemizer::num_lines() const
+{
+    return forced_line_breaks_.size();
+}
+
+void text_itemizer::itemize_direction(unsigned start, unsigned end)
+{
+    direction_runs_.clear();
+    UErrorCode error = U_ZERO_ERROR;
+    int32_t length = end - start;
+    UBiDi *bidi = ubidi_openSized(length, 0, &error);
+    if (!bidi || U_FAILURE(error))
+    {
+        MAPNIK_LOG_ERROR(text_itemizer) << "Failed to create bidi object: " << u_errorName(error) << "\n";
+        return;
+    }
+    ubidi_setPara(bidi, text_.getBuffer() + start, length, UBIDI_DEFAULT_LTR, 0, &error);
+    if (U_SUCCESS(error))
+    {
+        UBiDiDirection direction = ubidi_getDirection(bidi);
+        if (direction != UBIDI_MIXED)
+        {
+            direction_runs_.emplace_back(direction, start, end);
+        }
+        else
+        {
+            // mixed-directional
+            int32_t count = ubidi_countRuns(bidi, &error);
+            if(U_SUCCESS(error))
+            {
+                for(int i=0; i<count; ++i)
+                {
+                    int32_t vis_length;
+                    int32_t run_start;
+                    direction = ubidi_getVisualRun(bidi, i, &run_start, &vis_length);
+                    run_start += start; //Add offset to compensate offset in setPara
+                    direction_runs_.emplace_back(direction, run_start, run_start+vis_length);
+                }
+            }
+        }
+    }
+    else
+    {
+        MAPNIK_LOG_ERROR(text_itemizer) << "ICU error: " << u_errorName(error) << "\n"; //TODO: Exception
+    }
+    ubidi_close(bidi);
+}
+
+void text_itemizer::itemize_script()
+{
+    script_runs_.clear();
+
+    ScriptRun runs(text_.getBuffer(), text_.length());
+    while (runs.next())
+    {
+        script_runs_.emplace_back(runs.getScriptCode(), runs.getScriptStart(), runs.getScriptEnd());
+    }
+}
+
+template <typename T>
+typename T::const_iterator text_itemizer::find_run(T const& list, unsigned position)
+{
+    typename T::const_iterator itr = list.begin(), end = list.end();
+    for ( ;itr!=end; ++itr)
+    {
+        // end is the first character not included in text range!
+        if (itr->start <= position && itr->end > position) return itr;
+    }
+    return itr;
+}
+
+void text_itemizer::create_item_list()
+{
+    /* This function iterates over direction runs in visual order and splits them if neccessary.
+     * Split RTL runs are processed in reverse order to keep glyphs in correct order.
+     *
+     * logical      123 | 456789
+     * LTR visual   123 | 456789
+     * RTL visual   987654 | 321
+     * Glyphs within a single run are reversed by the shaper.
+     */
+    output_.clear();
+    for (auto const& dir_run : direction_runs_)
+    {
+        unsigned position = dir_run.start;
+        unsigned end = dir_run.end;
+        std::list<text_item>::iterator rtl_insertion_point = output_.end();
+        // Find first script and format run
+        format_run_list::const_iterator format_itr = find_run(format_runs_, position);
+        script_run_list::const_iterator script_itr = find_run(script_runs_, position);
+        while (position < end)
+        {
+            assert(script_itr != script_runs_.end());
+            assert(format_itr != format_runs_.end());
+            unsigned start = position;
+            position = std::min(script_itr->end, std::min(format_itr->end, end));
+            if (dir_run.data == UBIDI_LTR)
+            {
+                output_.emplace_back(start,position,script_itr->data,dir_run.data,format_itr->data);
+            }
+            else
+            {
+                rtl_insertion_point = output_.emplace(rtl_insertion_point,start,position,script_itr->data,dir_run.data,format_itr->data);
+            }
+            if (script_itr->end == position) ++script_itr;
+            if (format_itr->end == position) ++format_itr;
+        }
+    }
+}
+} //ns mapnik
diff --git a/src/text/placement_finder.cpp b/src/text/placement_finder.cpp
new file mode 100644
index 0000000..f63d6db
--- /dev/null
+++ b/src/text/placement_finder.cpp
@@ -0,0 +1,429 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+//mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/expression_evaluator.hpp>
+#include <mapnik/text/placement_finder_impl.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/text/glyph_info.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/glyph_positions.hpp>
+#include <mapnik/text/vertex_cache.hpp>
+
+// agg
+#include "agg_conv_clip_polyline.h"
+
+// stl
+#include <vector>
+
+namespace mapnik
+{
+
+placement_finder::placement_finder(feature_impl const& feature,
+                                   attributes const& attr,
+                                   DetectorType &detector,
+                                   box2d<double> const& extent,
+                                   text_placement_info const& placement_info,
+                                   face_manager_freetype & font_manager,
+                                   double scale_factor)
+    : feature_(feature),
+      attr_(attr),
+      detector_(detector),
+      extent_(extent),
+      info_(placement_info),
+      text_props_(evaluate_text_properties(info_.properties,feature_,attr_)),
+      scale_factor_(scale_factor),
+      font_manager_(font_manager),
+      placements_(),
+      has_marker_(false),
+      marker_(),
+      marker_box_() {}
+
+bool placement_finder::next_position()
+{
+    if (info_.next())
+    {
+        // parent layout, has top-level ownership of a new evaluated_format_properties_ptr (TODO is this good enough to stay in scope???)
+        // but does not take ownership of the text_symbolizer_properties (info_.properties)
+        text_layout_ptr layout = std::make_shared<text_layout>(font_manager_,
+                                                               feature_,
+                                                               attr_,
+                                                               scale_factor_,
+                                                               info_.properties,
+                                                               info_.properties.layout_defaults,
+                                                               info_.properties.format_tree());
+        // TODO: why is this call needed?
+        // https://github.com/mapnik/mapnik/issues/2525
+        text_props_ = evaluate_text_properties(info_.properties,feature_,attr_);
+        // Note: this clear call is needed when multiple placements are tried
+        // like with placement-type="simple|list"
+        if (!layouts_.empty()) layouts_.clear();
+        // Note: multiple layouts_ may result from this add() call
+        layouts_.add(layout);
+        layouts_.layout();
+        // cache a few values for use elsewhere in placement finder
+        move_dx_ = layout->displacement().x;
+        horizontal_alignment_ = layout->horizontal_alignment();
+        return true;
+    }
+    MAPNIK_LOG_WARN(placement_finder) << "next_position() called while last call already returned false!\n";
+    return false;
+}
+
+text_upright_e placement_finder::simplify_upright(text_upright_e upright, double angle) const
+{
+    if (upright == UPRIGHT_AUTO)
+    {
+        return (std::fabs(normalize_angle(angle)) > 0.5*M_PI) ? UPRIGHT_LEFT : UPRIGHT_RIGHT;
+    }
+    if (upright == UPRIGHT_LEFT_ONLY)
+    {
+        return UPRIGHT_LEFT;
+    }
+    if (upright == UPRIGHT_RIGHT_ONLY)
+    {
+        return  UPRIGHT_RIGHT;
+    }
+    return upright;
+}
+
+bool placement_finder::find_point_placement(pixel_position const& pos)
+{
+    glyph_positions_ptr glyphs = std::make_shared<glyph_positions>();
+    std::vector<box2d<double> > bboxes;
+
+    glyphs->reserve(layouts_.glyphs_count());
+    bboxes.reserve(layouts_.size());
+
+    bool base_point_set = false;
+    for (auto const& layout_ptr : layouts_)
+    {
+        text_layout const& layout = *layout_ptr;
+        rotation const& orientation = layout.orientation();
+
+        // Find text origin.
+        pixel_position layout_center = pos + layout.displacement();
+
+        if (!base_point_set)
+        {
+            glyphs->set_base_point(layout_center);
+            base_point_set = true;
+        }
+
+        box2d<double> bbox = layout.bounds();
+        bbox.re_center(layout_center.x, layout_center.y);
+
+        /* For point placements it is faster to just check the bounding box. */
+        if (collision(bbox, layouts_.text(), false)) return false;
+
+        if (layout.num_lines()) bboxes.push_back(std::move(bbox));
+
+        pixel_position layout_offset = layout_center - glyphs->get_base_point();
+        layout_offset.y = -layout_offset.y;
+
+        // IMPORTANT NOTE:
+        //   x and y are relative to the center of the text
+        //   coordinate system:
+        //   x: grows from left to right
+        //   y: grows from bottom to top (opposite of normal computer graphics)
+
+        double x, y;
+
+        // set for upper left corner of text envelope for the first line, top left of first character
+        y = layout.height() / 2.0;
+
+        for ( auto const& line : layout)
+        {
+            y -= line.height(); //Automatically handles first line differently
+            x = layout.jalign_offset(line.width());
+
+            for (auto const& glyph : line)
+            {
+                // place the character relative to the center of the string envelope
+                glyphs->emplace_back(glyph, (pixel_position(x, y).rotate(orientation)) + layout_offset, orientation);
+                if (glyph.advance())
+                {
+                    //Only advance if glyph is not part of a multiple glyph sequence
+                    x += glyph.advance() + glyph.format->character_spacing * scale_factor_;
+                }
+            }
+        }
+    }
+
+    // add_marker first checks for collision and then updates the detector.
+    if (has_marker_ && !add_marker(glyphs, pos)) return false;
+
+    for (box2d<double> const& bbox : bboxes)
+    {
+        detector_.insert(bbox, layouts_.text());
+    }
+    placements_.push_back(glyphs);
+
+    return true;
+}
+
+bool placement_finder::single_line_placement(vertex_cache &pp, text_upright_e orientation)
+{
+    //
+    // IMPORTANT NOTE: See note about coordinate systems in find_point_placement()!
+    //
+
+    vertex_cache::scoped_state begin(pp);
+    text_upright_e real_orientation = simplify_upright(orientation, pp.angle());
+
+    glyph_positions_ptr glyphs = std::make_shared<glyph_positions>();
+    std::vector<box2d<double> > bboxes;
+    glyphs->reserve(layouts_.glyphs_count());
+    bboxes.reserve(layouts_.glyphs_count());
+
+    unsigned upside_down_glyph_count = 0;
+
+    for (auto const& layout_ptr : layouts_)
+    {
+        text_layout const& layout = *layout_ptr;
+        pixel_position align_offset = layout.alignment_offset();
+        pixel_position const& layout_displacement = layout.displacement();
+        double sign = (real_orientation == UPRIGHT_LEFT) ? -1 : 1;
+        double offset = layout_displacement.y + 0.5 * sign * layout.height();
+        double adjust_character_spacing = .0;
+        double layout_width = layout.width();
+        bool adjust = layout.horizontal_alignment() == H_ADJUST;
+
+        if (adjust)
+        {
+            text_layout::const_iterator longest_line = layout.longest_line();
+            if (longest_line != layout.end())
+            {
+                adjust_character_spacing = (pp.length() - longest_line->glyphs_width()) / longest_line->space_count();
+                layout_width = longest_line->glyphs_width() + longest_line->space_count() * adjust_character_spacing;
+            }
+        }
+
+        for (auto const& line : layout)
+        {
+            // Only subtract half the line height here and half at the end because text is automatically
+            // centered on the line
+            offset -= sign * line.height()/2;
+            vertex_cache & off_pp = pp.get_offseted(offset, sign * layout_width);
+            vertex_cache::scoped_state off_state(off_pp); // TODO: Remove this when a clean implementation in vertex_cache::get_offseted is done
+            double line_width = adjust ? (line.glyphs_width() + line.space_count() * adjust_character_spacing) : line.width();
+
+            if (!off_pp.move(sign * layout.jalign_offset(line_width) - align_offset.x)) return false;
+
+            double last_cluster_angle = 999;
+            int current_cluster = -1;
+            pixel_position cluster_offset;
+            double angle;
+            rotation rot;
+            double last_glyph_spacing = 0.;
+
+            for (auto const& glyph : line)
+            {
+                if (current_cluster != static_cast<int>(glyph.char_index))
+                {
+                    if (adjust)
+                    {
+                        if (!off_pp.move(sign * (layout.cluster_width(current_cluster) + last_glyph_spacing)))
+                            return false;
+                        last_glyph_spacing = adjust_character_spacing;
+                    }
+                    else
+                    {
+                        if (!off_pp.move_to_distance(sign * (layout.cluster_width(current_cluster) + last_glyph_spacing)))
+                            return false;
+                        last_glyph_spacing = glyph.format->character_spacing * scale_factor_;
+                    }
+                    current_cluster = glyph.char_index;
+                    // Only calculate new angle at the start of each cluster!
+                    angle = normalize_angle(off_pp.angle(sign * layout.cluster_width(current_cluster)));
+                    rot.init(angle);
+                    if ((text_props_->max_char_angle_delta > 0) && (last_cluster_angle != 999) &&
+                        std::fabs(normalize_angle(angle-last_cluster_angle)) > text_props_->max_char_angle_delta)
+                    {
+                        return false;
+                    }
+                    cluster_offset.clear();
+                    last_cluster_angle = angle;
+                }
+
+                if (std::abs(angle) > M_PI/2) ++upside_down_glyph_count;
+
+                pixel_position pos = off_pp.current_position() + cluster_offset;
+                // Center the text on the line
+                double char_height = line.max_char_height();
+                pos.y = -pos.y - char_height/2.0*rot.cos;
+                pos.x =  pos.x + char_height/2.0*rot.sin;
+
+                cluster_offset.x += rot.cos * glyph.advance();
+                cluster_offset.y -= rot.sin * glyph.advance();
+
+                box2d<double> bbox = get_bbox(layout, glyph, pos, rot);
+                if (collision(bbox, layouts_.text(), true)) return false;
+                bboxes.push_back(std::move(bbox));
+                glyphs->emplace_back(glyph, pos, rot);
+            }
+            // See comment above
+            offset -= sign * line.height()/2;
+        }
+    }
+
+    if (upside_down_glyph_count > static_cast<unsigned>(layouts_.text().length() / 2))
+    {
+        if (orientation == UPRIGHT_AUTO)
+        {
+            // Try again with opposite orientation
+            begin.restore();
+            return single_line_placement(pp, real_orientation == UPRIGHT_RIGHT ? UPRIGHT_LEFT : UPRIGHT_RIGHT);
+        }
+        // upright==left_only or right_only and more than 50% of characters upside down => no placement
+        else if (orientation == UPRIGHT_LEFT_ONLY || orientation == UPRIGHT_RIGHT_ONLY)
+        {
+            return false;
+        }
+    }
+
+    for (box2d<double> const& box : bboxes)
+    {
+        detector_.insert(box, layouts_.text());
+    }
+    placements_.push_back(glyphs);
+
+    return true;
+}
+
+void placement_finder::path_move_dx(vertex_cache & pp, double dx)
+{
+    vertex_cache::state state = pp.save_state();
+    if (!pp.move(dx)) pp.restore_state(state);
+}
+
+double placement_finder::normalize_angle(double angle)
+{
+    while (angle >= M_PI)
+    {
+        angle -= 2.0 * M_PI;
+    }
+    while (angle < -M_PI)
+    {
+        angle += 2.0 * M_PI;
+    }
+    return angle;
+}
+
+double placement_finder::get_spacing(double path_length, double layout_width) const
+{
+    int num_labels = 1;
+    if (horizontal_alignment_ != H_ADJUST && text_props_->label_spacing > 0)
+    {
+        num_labels = static_cast<int>(std::floor(
+                                          path_length / (text_props_->label_spacing * scale_factor_ + layout_width)));
+    }
+    if (num_labels <= 0)
+    {
+        num_labels = 1;
+    }
+    return path_length / num_labels;
+}
+
+bool placement_finder::collision(const box2d<double> &box, const value_unicode_string &repeat_key, bool line_placement) const
+{
+    double margin, repeat_distance;
+    if (line_placement)
+    {
+        margin = text_props_->margin * scale_factor_;
+        repeat_distance = (text_props_->repeat_distance != 0 ? text_props_->repeat_distance : text_props_->minimum_distance) * scale_factor_;
+    }
+    else
+    {
+        margin = (text_props_->margin != 0 ? text_props_->margin : text_props_->minimum_distance) * scale_factor_;
+        repeat_distance = text_props_->repeat_distance * scale_factor_;
+    }
+    return !detector_.extent().intersects(box)
+        ||
+        (text_props_->avoid_edges && !extent_.contains(box))
+        ||
+        (text_props_->minimum_padding > 0 &&
+         !extent_.contains(box + (scale_factor_ * text_props_->minimum_padding)))
+        ||
+        (!text_props_->allow_overlap &&
+         ((repeat_key.length() == 0 && !detector_.has_placement(box, margin))
+          ||
+          (repeat_key.length() > 0 && !detector_.has_placement(box, margin, repeat_key, repeat_distance))));
+}
+
+void placement_finder::set_marker(marker_info_ptr m, box2d<double> box, bool marker_unlocked, pixel_position const& marker_displacement)
+{
+    marker_ = m;
+    marker_box_ = box * scale_factor_;
+    marker_displacement_ = marker_displacement * scale_factor_;
+    marker_unlocked_ = marker_unlocked;
+    has_marker_ = true;
+}
+
+
+bool placement_finder::add_marker(glyph_positions_ptr glyphs, pixel_position const& pos) const
+{
+    pixel_position real_pos = (marker_unlocked_ ? pos : glyphs->get_base_point()) + marker_displacement_;
+    box2d<double> bbox = marker_box_;
+    bbox.move(real_pos.x, real_pos.y);
+    glyphs->set_marker(marker_, real_pos);
+    if (collision(bbox, layouts_.text(), false)) return false;
+    detector_.insert(bbox);
+    return true;
+}
+
+box2d<double> placement_finder::get_bbox(text_layout const& layout, glyph_info const& glyph, pixel_position const& pos, rotation const& rot)
+{
+    /*
+
+      (0/ymax)           (width/ymax)
+      ***************
+      *             *
+      (0/0)*             *
+      *             *
+      ***************
+      (0/ymin)          (width/ymin)
+      Add glyph offset in y direction, but not in x direction (as we use the full cluster width anyways)!
+    */
+    double width = layout.cluster_width(glyph.char_index);
+    if (glyph.advance() <= 0) width = -width;
+    pixel_position tmp, tmp2;
+    tmp.set(0, glyph.ymax());
+    tmp = tmp.rotate(rot);
+    tmp2.set(width, glyph.ymax());
+    tmp2 = tmp2.rotate(rot);
+    box2d<double> bbox(tmp.x,  -tmp.y,
+                       tmp2.x, -tmp2.y);
+    tmp.set(width, glyph.ymin());
+    tmp = tmp.rotate(rot);
+    bbox.expand_to_include(tmp.x, -tmp.y);
+    tmp.set(0, glyph.ymin());
+    tmp = tmp.rotate(rot);
+    bbox.expand_to_include(tmp.x, -tmp.y);
+    pixel_position pos2 = pos + pixel_position(0, glyph.offset.y).rotate(rot);
+    bbox.move(pos2.x , -pos2.y);
+    return bbox;
+}
+
+}// ns mapnik
diff --git a/src/text/placements/base.cpp b/src/text/placements/base.cpp
new file mode 100644
index 0000000..8b9c36b
--- /dev/null
+++ b/src/text/placements/base.cpp
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/text/placements/base.hpp>
+
+namespace mapnik {
+
+text_placements::text_placements()
+    : defaults() {}
+
+void text_placements::add_expressions(expression_set & output) const
+{
+    defaults.add_expressions(output);
+}
+
+
+
+text_placement_info::text_placement_info(text_placements const* parent,
+                                         double scale_factor_)
+    : properties(parent->defaults),
+      scale_factor(scale_factor_) {}
+
+} //ns mapnik
diff --git a/src/text/placements/dummy.cpp b/src/text/placements/dummy.cpp
new file mode 100644
index 0000000..59f1221
--- /dev/null
+++ b/src/text/placements/dummy.cpp
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/text/placements/dummy.hpp>
+
+namespace mapnik
+{
+
+bool text_placement_info_dummy::next() const
+{
+    if (state) return false;
+    ++state;
+    return true;
+}
+
+text_placement_info_ptr text_placements_dummy::get_placement_info(
+    double scale_factor) const
+{
+    return std::make_shared<text_placement_info_dummy>(this, scale_factor);
+}
+
+} //ns mapnik
diff --git a/src/text/placements/list.cpp b/src/text/placements/list.cpp
new file mode 100644
index 0000000..1fec71a
--- /dev/null
+++ b/src/text/placements/list.cpp
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+//mapnik
+#include <mapnik/text/placements/list.hpp>
+#include <mapnik/xml_node.hpp>
+
+//boost
+#include <boost/property_tree/ptree.hpp>
+
+namespace mapnik
+{
+
+bool text_placement_info_list::next() const
+{
+    if (state == 0)
+    {
+        properties = parent_->defaults;
+    }
+    else
+    {
+        if (state  > parent_->list_.size()) return false;
+        properties = parent_->list_[state-1];
+    }
+    ++state;
+    return true;
+}
+
+text_symbolizer_properties & text_placements_list::add()
+{
+    if (list_.size())
+    {
+        text_symbolizer_properties & last = list_.back();
+        list_.push_back(last); //Preinitialize with old values FIXME
+    }
+    else
+    {
+        list_.push_back(defaults);
+    }
+    return list_.back();
+}
+
+text_symbolizer_properties & text_placements_list::get(unsigned i)
+{
+    return list_[i];
+}
+
+
+text_placement_info_ptr text_placements_list::get_placement_info(double scale_factor) const
+{
+    return std::make_shared<text_placement_info_list>(this, scale_factor);
+}
+
+text_placements_list::text_placements_list()
+    : text_placements(),
+      list_(0) {}
+
+void text_placements_list::add_expressions(expression_set & output) const
+{
+    defaults.add_expressions(output);
+    for (auto & prop : list_)
+    {
+        prop.add_expressions(output);
+    }
+}
+
+unsigned text_placements_list::size() const
+{
+    return list_.size();
+}
+
+
+text_placements_ptr text_placements_list::from_xml(xml_node const& node, fontset_map const& fontsets, bool is_shield)
+{
+    auto list = std::make_shared<text_placements_list>();
+    list->defaults.from_xml(node, fontsets, is_shield);
+    for( auto const& child : node)
+    {
+        if (child.is_text() || !child.is("Placement")) continue;
+        text_symbolizer_properties & p = list->add();
+        p.from_xml(child, fontsets, is_shield);
+        //if (strict_ && !p.format.fontset.size())
+        //    ensure_font_face(p.format.face_name);
+    }
+    return list;
+}
+
+} //ns mapnik
diff --git a/src/text/placements/registry.cpp b/src/text/placements/registry.cpp
new file mode 100644
index 0000000..535f842
--- /dev/null
+++ b/src/text/placements/registry.cpp
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/text/placements/registry.hpp>
+#include <mapnik/text/placements/simple.hpp>
+#include <mapnik/text/placements/list.hpp>
+#include <mapnik/text/placements/dummy.hpp>
+#include <mapnik/config_error.hpp>
+
+namespace mapnik
+{
+namespace placements
+{
+
+registry::registry()
+{
+    register_name("simple", &text_placements_simple::from_xml);
+    register_name("list", &text_placements_list::from_xml);
+    register_name("dummy", &text_placements_list::from_xml);
+}
+
+void registry::register_name(std::string name, from_xml_function_ptr ptr, bool overwrite)
+{
+    if (overwrite) {
+        map_[name] = ptr;
+    } else {
+        map_.emplace(name, ptr);
+    }
+}
+
+text_placements_ptr registry::from_xml(std::string name, xml_node const& xml, fontset_map const& fontsets, bool is_shield)
+{
+    std::map<std::string, from_xml_function_ptr>::const_iterator itr = map_.find(name);
+    if (itr == map_.end())  throw config_error("Unknown placement-type '" + name + "'", xml);
+    return itr->second(xml, fontsets, is_shield);
+}
+} //ns formatting
+} //ns mapnik
diff --git a/src/text/placements/simple.cpp b/src/text/placements/simple.cpp
new file mode 100644
index 0000000..edcdad2
--- /dev/null
+++ b/src/text/placements/simple.cpp
@@ -0,0 +1,157 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2012 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/text/placements/simple.hpp>
+#include <mapnik/ptree_helpers.hpp>
+#include <mapnik/xml_node.hpp>
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+#include <boost/property_tree/ptree.hpp>
+#pragma GCC diagnostic pop
+
+#include <cmath>
+
+namespace mapnik
+{
+
+namespace qi = boost::spirit::qi;
+namespace phoenix = boost::phoenix;
+using phoenix::push_back;
+using phoenix::ref;
+
+bool text_placement_info_simple::next() const
+{
+    while (true)
+    {
+        if (state > 0)
+        {
+            if (state > parent_->text_sizes_.size()) return false;
+            properties.format_defaults.text_size = value_double(parent_->text_sizes_[state-1]);
+        }
+        if (!next_position_only())
+        {
+            ++state;
+            position_state = 0;
+        }
+        else break;
+    }
+    return true;
+}
+
+bool text_placement_info_simple::next_position_only() const
+{
+    if (position_state >= parent_->direction_.size()) return false;
+    //directions_e dir = parent_->direction_[position_state];
+    properties.layout_defaults.dir = parent_->direction_[position_state];
+    ++position_state;
+    return true;
+}
+
+text_placement_info_ptr text_placements_simple::get_placement_info(double scale_factor) const
+{
+    return std::make_shared<text_placement_info_simple>(this, scale_factor);
+}
+
+// Position string: [POS][SIZE]
+// [POS] is any combination of
+// N, E, S, W, NE, SE, NW, SW, X (exact position) (separated by commas)
+// [SIZE] is a list of font sizes, separated by commas. The first font size
+// is always the one given in the TextSymbolizer's parameters.
+// First all directions are tried, then font size is reduced
+// and all directions are tried again. The process ends when a placement is
+// found or the last fontsize is tried without success.
+// Example: N,S,15,10,8 (tries placement above, then below and if
+//    that fails it tries the additional font sizes 15, 10 and 8.
+
+void text_placements_simple::set_positions(std::string const& positions)
+{
+    positions_ = positions;
+    struct direction_name_ : qi::symbols<char, directions_e>
+    {
+        direction_name_()
+        {
+            add
+                ("N" , NORTH)
+                ("E" , EAST)
+                ("S" , SOUTH)
+                ("W" , WEST)
+                ("NE", NORTHEAST)
+                ("SE", SOUTHEAST)
+                ("NW", NORTHWEST)
+                ("SW", SOUTHWEST)
+                ("X" , EXACT_POSITION)
+                ;
+        }
+
+    } direction_name;
+    boost::spirit::ascii::space_type space;
+    qi::_1_type _1;
+    qi::float_type float_;
+
+    std::string::const_iterator first = positions.begin(),  last = positions.end();
+    qi::phrase_parse(first, last,
+                     (direction_name[push_back(phoenix::ref(direction_), _1)] % ',')
+                     >> *(',' >> float_[push_back(phoenix::ref(text_sizes_), _1)]),
+                     space);
+    if (first != last)
+    {
+        MAPNIK_LOG_WARN(text_placements) << "Could not parse text_placement_simple placement string ('" << positions << "')";
+    }
+    if (direction_.size() == 0)
+    {
+        MAPNIK_LOG_WARN(text_placements) << "text_placements_simple with no valid placements! ('"<< positions<<"')";
+    }
+}
+
+text_placements_simple::text_placements_simple()
+{
+    set_positions("X");
+}
+
+text_placements_simple::text_placements_simple(std::string const& positions)
+{
+    set_positions(positions);
+}
+
+std::string text_placements_simple::get_positions()
+{
+    return positions_; //TODO: Build string from data in direction_ and text_sizes_
+}
+
+text_placements_ptr text_placements_simple::from_xml(xml_node const& xml, fontset_map const& fontsets, bool is_shield)
+{
+    text_placements_ptr ptr = std::make_shared<text_placements_simple>(
+        xml.get_attr<std::string>("placements", "X"));
+    ptr->defaults.from_xml(xml, fontsets, is_shield);
+    return ptr;
+}
+
+} //ns mapnik
diff --git a/src/text/properties_util.cpp b/src/text/properties_util.cpp
new file mode 100644
index 0000000..873534f
--- /dev/null
+++ b/src/text/properties_util.cpp
@@ -0,0 +1,95 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/text/properties_util.hpp>
+#include <mapnik/expression_string.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/ptree_helpers.hpp>
+#include <mapnik/text/font_feature_settings.hpp>
+
+namespace mapnik { namespace detail {
+
+struct property_serializer : public util::static_visitor<>
+{
+    property_serializer(std::string const& name, boost::property_tree::ptree & node)
+        : name_(name),
+          node_(node) {}
+
+    void operator() (expression_ptr const& expr) const
+    {
+        if (expr) node_.put("<xmlattr>." + name_, to_expression_string(*expr));
+    }
+
+    void operator() (value_bool val) const
+    {
+        node_.put("<xmlattr>." + name_, val );
+    }
+
+    void operator() (value_integer val) const
+    {
+        node_.put("<xmlattr>." + name_, val );
+    }
+
+    void operator() (value_double val) const
+    {
+        node_.put("<xmlattr>." + name_, val );
+    }
+
+    void operator() (std::string const& val) const
+    {
+        node_.put("<xmlattr>." + name_, val );
+    }
+
+    void operator() (color const& val) const
+    {
+        node_.put("<xmlattr>." + name_, val );
+    }
+
+    void operator() (enumeration_wrapper const& val) const
+    {
+        std::string str = std::get<1>(get_meta(get_key(name_)))(val);
+        node_.put("<xmlattr>." + name_, str);
+    }
+
+    void operator() (font_feature_settings const& val) const
+    {
+        std::string str = val.to_string();
+        node_.put("<xmlattr>." + name_, str);
+    }
+
+    template <typename T>
+    void operator() (T const& val) const
+    {
+        std::cerr << "NOOP" << std::endl;
+    }
+
+    std::string const& name_;
+    boost::property_tree::ptree & node_;
+};
+}
+
+void serialize_property(std::string const& name, symbolizer_base::value_type const& val, boost::property_tree::ptree & node)
+{
+    util::apply_visitor(detail::property_serializer(name,node), val);
+}
+
+}
diff --git a/src/text/renderer.cpp b/src/text/renderer.cpp
new file mode 100644
index 0000000..c582611
--- /dev/null
+++ b/src/text/renderer.cpp
@@ -0,0 +1,363 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/text/renderer.hpp>
+#include <mapnik/graphics.hpp>
+#include <mapnik/grid/grid.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/font_engine_freetype.hpp>
+#include <mapnik/text/face.hpp>
+
+namespace mapnik
+{
+
+text_renderer::text_renderer (halo_rasterizer_e rasterizer, composite_mode_e comp_op,
+                              composite_mode_e halo_comp_op, double scale_factor, stroker_ptr stroker)
+    : rasterizer_(rasterizer),
+      comp_op_(comp_op),
+      halo_comp_op_(halo_comp_op),
+      scale_factor_(scale_factor),
+      glyphs_(),
+      stroker_(stroker),
+      transform_(),
+      halo_transform_()
+{}
+
+void text_renderer::set_transform(agg::trans_affine const& transform)
+{
+    transform_ = transform;
+}
+
+void text_renderer::set_halo_transform(agg::trans_affine const& halo_transform)
+{
+    halo_transform_ = halo_transform;
+}
+
+void text_renderer::prepare_glyphs(glyph_positions const& positions)
+{
+    FT_Matrix matrix;
+    FT_Vector pen;
+    FT_Error  error;
+
+    glyphs_.reserve(positions.size());
+    for (auto const& glyph_pos : positions)
+    {
+        glyph_info const& glyph = glyph_pos.glyph;
+        glyph.face->set_character_sizes(glyph.format->text_size * scale_factor_); //TODO: Optimize this?
+
+        matrix.xx = static_cast<FT_Fixed>( glyph_pos.rot.cos * 0x10000L);
+        matrix.xy = static_cast<FT_Fixed>(-glyph_pos.rot.sin * 0x10000L);
+        matrix.yx = static_cast<FT_Fixed>( glyph_pos.rot.sin * 0x10000L);
+        matrix.yy = static_cast<FT_Fixed>( glyph_pos.rot.cos * 0x10000L);
+
+        pixel_position pos = glyph_pos.pos + glyph.offset.rotate(glyph_pos.rot);
+        pen.x = static_cast<FT_Pos>(pos.x * 64);
+        pen.y = static_cast<FT_Pos>(pos.y * 64);
+
+        FT_Face face = glyph.face->get_face();
+        FT_Set_Transform(face, &matrix, &pen);
+
+        error = FT_Load_Glyph(face, glyph.glyph_index, FT_LOAD_NO_HINTING);
+        if (error) continue;
+
+        FT_Glyph image;
+        error = FT_Get_Glyph(face->glyph, &image);
+        if (error) continue;
+
+        glyphs_.emplace_back(image, *glyph.format);
+    }
+}
+
+template <typename T>
+void composite_bitmap(T & pixmap, FT_Bitmap *bitmap, unsigned rgba, int x, int y, double opacity, composite_mode_e comp_op)
+{
+    int x_max=x+bitmap->width;
+    int y_max=y+bitmap->rows;
+    int i,p,j,q;
+
+    for (i=x,p=0;i<x_max;++i,++p)
+    {
+        for (j=y,q=0;j<y_max;++j,++q)
+        {
+            unsigned gray=bitmap->buffer[q*bitmap->width+p];
+            if (gray)
+            {
+                pixmap.composite_pixel(comp_op, i, j, rgba, gray, opacity);
+            }
+        }
+    }
+}
+
+template <typename T>
+agg_text_renderer<T>::agg_text_renderer (pixmap_type & pixmap,
+                                         halo_rasterizer_e rasterizer,
+                                         composite_mode_e comp_op,
+                                         composite_mode_e halo_comp_op,
+                                         double scale_factor,
+                                         stroker_ptr stroker)
+    : text_renderer(rasterizer, comp_op, halo_comp_op, scale_factor, stroker), pixmap_(pixmap)
+{}
+
+template <typename T>
+void agg_text_renderer<T>::render(glyph_positions const& pos)
+{
+    glyphs_.clear();
+    prepare_glyphs(pos);
+    FT_Error  error;
+    FT_Vector start;
+    FT_Vector start_halo;
+    int height = pixmap_.height();
+    pixel_position const& base_point = pos.get_base_point();
+
+    start.x =  static_cast<FT_Pos>(base_point.x * (1 << 6));
+    start.y =  static_cast<FT_Pos>((height - base_point.y) * (1 << 6));
+    start_halo = start;
+    start.x += transform_.tx * 64;
+    start.y += transform_.ty * 64;
+    start_halo.x += halo_transform_.tx * 64;
+    start_halo.y += halo_transform_.ty * 64;
+
+    FT_Matrix halo_matrix;
+    halo_matrix.xx = halo_transform_.sx  * 0x10000L;
+    halo_matrix.xy = halo_transform_.shx * 0x10000L;
+    halo_matrix.yy = halo_transform_.sy  * 0x10000L;
+    halo_matrix.yx = halo_transform_.shy * 0x10000L;
+
+    FT_Matrix matrix;
+    matrix.xx = transform_.sx  * 0x10000L;
+    matrix.xy = transform_.shx * 0x10000L;
+    matrix.yy = transform_.sy  * 0x10000L;
+    matrix.yx = transform_.shy * 0x10000L;
+
+    // default formatting
+    double halo_radius = 0;
+    color black(0,0,0);
+    unsigned fill = black.rgba();
+    unsigned halo_fill = black.rgba();
+    double text_opacity = 1.0;
+    double halo_opacity = 1.0;
+
+    for (auto const& glyph : glyphs_)
+    {
+        halo_fill = glyph.properties.halo_fill.rgba();
+        halo_opacity = glyph.properties.halo_opacity;
+        halo_radius = glyph.properties.halo_radius * scale_factor_;
+        // make sure we've got reasonable values.
+        if (halo_radius <= 0.0 || halo_radius > 1024.0) continue;
+        FT_Glyph g;
+        error = FT_Glyph_Copy(glyph.image, &g);
+        if (!error)
+        {
+            FT_Glyph_Transform(g, &halo_matrix, &start_halo);
+            if (rasterizer_ == HALO_RASTERIZER_FULL)
+            {
+                stroker_->init(halo_radius);
+                FT_Glyph_Stroke(&g, stroker_->get(), 1);
+                error = FT_Glyph_To_Bitmap(&g, FT_RENDER_MODE_NORMAL, 0, 1);
+                if (!error)
+                {
+                    FT_BitmapGlyph bit = reinterpret_cast<FT_BitmapGlyph>(g);
+                    composite_bitmap(pixmap_,
+                                     &bit->bitmap,
+                                     halo_fill,
+                                     bit->left,
+                                     height - bit->top,
+                                     halo_opacity,
+                                     halo_comp_op_);
+                }
+            }
+            else
+            {
+                error = FT_Glyph_To_Bitmap(&g, FT_RENDER_MODE_NORMAL, 0, 1);
+                if (!error)
+                {
+                    FT_BitmapGlyph bit = reinterpret_cast<FT_BitmapGlyph>(g);
+                    render_halo(&bit->bitmap,
+                                halo_fill,
+                                bit->left,
+                                height - bit->top,
+                                halo_radius,
+                                halo_opacity,
+                                halo_comp_op_);
+                }
+            }
+        }
+        FT_Done_Glyph(g);
+    }
+
+    // render actual text
+    for (auto & glyph : glyphs_)
+    {
+        fill = glyph.properties.fill.rgba();
+        text_opacity = glyph.properties.text_opacity;
+        FT_Glyph_Transform(glyph.image, &matrix, &start);
+        error = FT_Glyph_To_Bitmap(&glyph.image ,FT_RENDER_MODE_NORMAL, 0, 1);
+        if (!error)
+        {
+            FT_BitmapGlyph bit = reinterpret_cast<FT_BitmapGlyph>(glyph.image);
+            composite_bitmap(pixmap_,
+                             &bit->bitmap,
+                             fill,
+                             bit->left,
+                             height - bit->top,
+                             text_opacity,
+                             comp_op_);
+        }
+        FT_Done_Glyph(glyph.image);
+    }
+
+}
+
+
+template <typename T>
+void grid_text_renderer<T>::render(glyph_positions const& pos, value_integer feature_id)
+{
+    glyphs_.clear();
+    prepare_glyphs(pos);
+    FT_Error  error;
+    FT_Vector start;
+    unsigned height = pixmap_.height();
+    pixel_position const& base_point = pos.get_base_point();
+    start.x =  static_cast<FT_Pos>(base_point.x * (1 << 6));
+    start.y =  static_cast<FT_Pos>((height - base_point.y) * (1 << 6));
+    start.x += transform_.tx * 64;
+    start.y += transform_.ty * 64;
+
+    // now render transformed glyphs
+    double halo_radius = 0.0;
+    FT_Matrix halo_matrix;
+    halo_matrix.xx = halo_transform_.sx  * 0x10000L;
+    halo_matrix.xy = halo_transform_.shx * 0x10000L;
+    halo_matrix.yy = halo_transform_.sy  * 0x10000L;
+    halo_matrix.yx = halo_transform_.shy * 0x10000L;
+    for (auto & glyph : glyphs_)
+    {
+        halo_radius = glyph.properties.halo_radius * scale_factor_;
+        FT_Glyph_Transform(glyph.image, &halo_matrix, &start);
+        error = FT_Glyph_To_Bitmap(&glyph.image, FT_RENDER_MODE_NORMAL, 0, 1);
+        if (!error)
+        {
+
+            FT_BitmapGlyph bit = reinterpret_cast<FT_BitmapGlyph>(glyph.image);
+            render_halo_id(&bit->bitmap,
+                           feature_id,
+                           bit->left,
+                           height - bit->top,
+                           static_cast<int>(halo_radius));
+        }
+        FT_Done_Glyph(glyph.image);
+    }
+}
+
+
+template <typename T>
+void agg_text_renderer<T>::render_halo(FT_Bitmap *bitmap,
+                 unsigned rgba,
+                 int x1,
+                 int y1,
+                 double halo_radius,
+                 double opacity,
+                 composite_mode_e comp_op)
+{
+    int width = bitmap->width;
+    int height = bitmap->rows;
+    int x, y;
+    if (halo_radius < 1.0)
+    {
+        for (x=0; x < width; x++)
+        {
+            for (y=0; y < height; y++)
+            {
+                int gray = bitmap->buffer[y*bitmap->width+x];
+                if (gray)
+                {
+                    pixmap_.composite_pixel(comp_op, x+x1-1, y+y1-1, rgba, gray*halo_radius*halo_radius, opacity);
+                    pixmap_.composite_pixel(comp_op, x+x1,   y+y1-1, rgba, gray*halo_radius, opacity);
+                    pixmap_.composite_pixel(comp_op, x+x1+1, y+y1-1, rgba, gray*halo_radius*halo_radius, opacity);
+
+                    pixmap_.composite_pixel(comp_op, x+x1-1, y+y1,   rgba, gray*halo_radius, opacity);
+                    pixmap_.composite_pixel(comp_op, x+x1,   y+y1,   rgba, gray, opacity);
+                    pixmap_.composite_pixel(comp_op, x+x1+1, y+y1,   rgba, gray*halo_radius, opacity);
+
+                    pixmap_.composite_pixel(comp_op, x+x1-1, y+y1+1, rgba, gray*halo_radius*halo_radius, opacity);
+                    pixmap_.composite_pixel(comp_op, x+x1,   y+y1+1, rgba, gray*halo_radius, opacity);
+                    pixmap_.composite_pixel(comp_op, x+x1+1, y+y1+1, rgba, gray*halo_radius*halo_radius, opacity);
+                }
+            }
+        }
+    }
+    else
+    {
+        for (x=0; x < width; x++)
+        {
+            for (y=0; y < height; y++)
+            {
+                int gray = bitmap->buffer[y*bitmap->width+x];
+                if (gray)
+                {
+                    for (int n=-halo_radius; n <=halo_radius; ++n)
+                        for (int m=-halo_radius; m <= halo_radius; ++m)
+                            pixmap_.composite_pixel(comp_op, x+x1+m, y+y1+n, rgba, gray, opacity);
+                }
+            }
+        }
+    }
+}
+
+template <typename T>
+void grid_text_renderer<T>::render_halo_id(
+                    FT_Bitmap *bitmap,
+                    mapnik::value_integer feature_id,
+                    int x1,
+                    int y1,
+                    int halo_radius)
+{
+    int width = bitmap->width;
+    int height = bitmap->rows;
+    int x, y;
+    for (x=0; x < width; x++)
+    {
+        for (y=0; y < height; y++)
+        {
+            int gray = bitmap->buffer[y*bitmap->width+x];
+            if (gray)
+            {
+                for (int n=-halo_radius; n <=halo_radius; ++n)
+                    for (int m=-halo_radius; m <= halo_radius; ++m)
+                        pixmap_.setPixel(x+x1+m,y+y1+n,feature_id);
+            }
+        }
+    }
+}
+
+template <typename T>
+grid_text_renderer<T>::grid_text_renderer(pixmap_type &pixmap,
+                                          composite_mode_e comp_op,
+                                          double scale_factor)
+    : text_renderer(HALO_RASTERIZER_FAST, comp_op, src_over, scale_factor),
+      pixmap_(pixmap) {}
+
+template class agg_text_renderer<image_32>;
+template class grid_text_renderer<grid>;
+
+} // namespace mapnik
diff --git a/src/text/scrptrun.cpp b/src/text/scrptrun.cpp
new file mode 100644
index 0000000..37a02e7
--- /dev/null
+++ b/src/text/scrptrun.cpp
@@ -0,0 +1,205 @@
+/*
+ *******************************************************************************
+ *
+ *   Copyright (C) 1999-2001, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *
+ *******************************************************************************
+ *   file name:  scrptrun.cpp
+ *
+ *   created on: 10/17/2001
+ *   created by: Eric R. Mader
+ *
+ * NOTE: This file is copied from ICU.
+ * http://source.icu-project.org/repos/icu/icu/trunk/license.html
+ */
+
+#include <unicode/utypes.h>
+#include <unicode/uscript.h>
+
+#include <mapnik/text/scrptrun.hpp>
+
+#define ARRAY_SIZE(array) (sizeof array  / sizeof array[0])
+
+const char ScriptRun::fgClassID=0;
+
+UChar32 ScriptRun::pairedChars[] = {
+    0x0028, 0x0029, // ascii paired punctuation
+    0x003c, 0x003e,
+    0x005b, 0x005d,
+    0x007b, 0x007d,
+    0x00ab, 0x00bb, // guillemets
+    0x2018, 0x2019, // general punctuation
+    0x201c, 0x201d,
+    0x2039, 0x203a,
+    0x3008, 0x3009, // chinese paired punctuation
+    0x300a, 0x300b,
+    0x300c, 0x300d,
+    0x300e, 0x300f,
+    0x3010, 0x3011,
+    0x3014, 0x3015,
+    0x3016, 0x3017,
+    0x3018, 0x3019,
+    0x301a, 0x301b
+};
+
+const int32_t ScriptRun::pairedCharCount = ARRAY_SIZE(pairedChars);
+const int32_t ScriptRun::pairedCharPower = 1 << highBit(pairedCharCount);
+const int32_t ScriptRun::pairedCharExtra = pairedCharCount - pairedCharPower;
+
+int8_t ScriptRun::highBit(int32_t value)
+{
+    if (value <= 0) {
+        return -32;
+    }
+
+    int8_t bit = 0;
+
+    if (value >= 1 << 16) {
+        value >>= 16;
+        bit += 16;
+    }
+
+    if (value >= 1 << 8) {
+        value >>= 8;
+        bit += 8;
+    }
+
+    if (value >= 1 << 4) {
+        value >>= 4;
+        bit += 4;
+    }
+
+    if (value >= 1 << 2) {
+        value >>= 2;
+        bit += 2;
+    }
+
+    if (value >= 1 << 1) {
+        value >>= 1;
+        bit += 1;
+    }
+
+    return bit;
+}
+
+int32_t ScriptRun::getPairIndex(UChar32 ch)
+{
+    int32_t probe = pairedCharPower;
+    int32_t index = 0;
+
+    if (ch >= pairedChars[pairedCharExtra]) {
+        index = pairedCharExtra;
+    }
+
+    while (probe > (1 << 0)) {
+        probe >>= 1;
+
+        if (ch >= pairedChars[index + probe]) {
+            index += probe;
+        }
+    }
+
+    if (pairedChars[index] != ch) {
+        index = -1;
+    }
+
+    return index;
+}
+
+UBool ScriptRun::sameScript(int32_t scriptOne, int32_t scriptTwo)
+{
+    return scriptOne <= USCRIPT_INHERITED || scriptTwo <= USCRIPT_INHERITED || scriptOne == scriptTwo;
+}
+
+UBool ScriptRun::next()
+{
+    int32_t startSP  = parenSP;  // used to find the first new open character
+    UErrorCode error = U_ZERO_ERROR;
+
+    // if we've fallen off the end of the text, we're done
+    if (scriptEnd >= charLimit) {
+        return false;
+    }
+    
+    scriptCode = USCRIPT_COMMON;
+
+    for (scriptStart = scriptEnd; scriptEnd < charLimit; scriptEnd += 1) {
+        UChar   high = charArray[scriptEnd];
+        UChar32 ch   = high;
+
+        // if the character is a high surrogate and it's not the last one
+        // in the text, see if it's followed by a low surrogate
+        if (high >= 0xD800 && high <= 0xDBFF && scriptEnd < charLimit - 1)
+        {
+            UChar low = charArray[scriptEnd + 1];
+
+            // if it is followed by a low surrogate,
+            // consume it and form the full character
+            if (low >= 0xDC00 && low <= 0xDFFF) {
+                ch = (high - 0xD800) * 0x0400 + low - 0xDC00 + 0x10000;
+                scriptEnd += 1;
+            }
+        }
+
+        UScriptCode sc = uscript_getScript(ch, &error);
+        int32_t pairIndex = getPairIndex(ch);
+
+        // Paired character handling:
+        //
+        // if it's an open character, push it onto the stack.
+        // if it's a close character, find the matching open on the
+        // stack, and use that script code. Any non-matching open
+        // characters above it on the stack will be poped.
+        if (pairIndex >= 0) {
+            if ((pairIndex & 1) == 0) {
+                parenStack[++parenSP].pairIndex = pairIndex;
+                parenStack[parenSP].scriptCode  = scriptCode;
+            } else if (parenSP >= 0) {
+                int32_t pi = pairIndex & ~1;
+
+                while (parenSP >= 0 && parenStack[parenSP].pairIndex != pi) {
+                    parenSP -= 1;
+                }
+
+                if (parenSP < startSP) {
+                    startSP = parenSP;
+                }
+
+                if (parenSP >= 0) {
+                    sc = parenStack[parenSP].scriptCode;
+                }
+            }
+        }
+
+        if (sameScript(scriptCode, sc)) {
+            if (scriptCode <= USCRIPT_INHERITED && sc > USCRIPT_INHERITED) {
+                scriptCode = sc;
+
+                // now that we have a final script code, fix any open
+                // characters we pushed before we knew the script code.
+                while (startSP < parenSP) {
+                    parenStack[++startSP].scriptCode = scriptCode;
+                }
+            }
+
+            // if this character is a close paired character,
+            // pop it from the stack
+            if (pairIndex >= 0 && (pairIndex & 1) != 0 && parenSP >= 0) {
+                parenSP -= 1;
+                startSP -= 1;
+            }
+        } else {
+            // if the run broke on a surrogate pair,
+            // end it before the high surrogate
+            if (ch >= 0x10000) {
+                scriptEnd -= 1;
+            }
+
+            break;
+        }
+    }
+
+    return true;
+}
+
diff --git a/src/text/symbolizer_helpers.cpp b/src/text/symbolizer_helpers.cpp
new file mode 100644
index 0000000..5d29bf0
--- /dev/null
+++ b/src/text/symbolizer_helpers.cpp
@@ -0,0 +1,362 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/text/symbolizer_helpers.hpp>
+#include <mapnik/label_collision_detector.hpp>
+#include <mapnik/font_engine_freetype.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/marker.hpp>
+#include <mapnik/marker_cache.hpp>
+#include <mapnik/geom_util.hpp>
+#include <mapnik/parse_path.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/text/placement_finder_impl.hpp>
+#include <mapnik/text/placements/base.hpp>
+#include <mapnik/text/placements/dummy.hpp>
+
+//agg
+#include "agg_conv_clip_polyline.h"
+
+namespace mapnik {
+
+base_symbolizer_helper::base_symbolizer_helper(
+        symbolizer_base const& sym,
+        feature_impl const& feature,
+        attributes const& vars,
+        proj_transform const& prj_trans,
+        unsigned width, unsigned height, double scale_factor,
+        view_transform const& t,
+        box2d<double> const& query_extent)
+    : sym_(sym),
+      feature_(feature),
+      vars_(vars),
+      prj_trans_(prj_trans),
+      t_(t),
+      dims_(0, 0, width, height),
+      query_extent_(query_extent),
+      scale_factor_(scale_factor),
+      info_ptr_(mapnik::get<text_placements_ptr>(sym_, keys::text_placements_)->get_placement_info(scale_factor)),
+      text_props_(evaluate_text_properties(info_ptr_->properties,feature_,vars_))
+{
+    initialize_geometries();
+    if (!geometries_to_process_.size()) return; // FIXME - bad practise
+    initialize_points();
+}
+
+struct largest_bbox_first
+{
+    bool operator() (geometry_type const* g0, geometry_type const* g1) const
+    {
+        box2d<double> b0 = g0->envelope();
+        box2d<double> b1 = g1->envelope();
+        return b0.width()*b0.height() > b1.width()*b1.height();
+    }
+};
+
+void base_symbolizer_helper::initialize_geometries() const
+{
+    bool largest_box_only = text_props_->largest_bbox_only;
+    double minimum_path_length = text_props_->minimum_path_length;
+    for ( auto const& geom :  feature_.paths())
+    {
+        // don't bother with empty geometries
+        if (geom.size() == 0) continue;
+        mapnik::geometry_type::types type = geom.type();
+        if (type == geometry_type::types::Polygon)
+        {
+            if (minimum_path_length > 0)
+            {
+                box2d<double> gbox = t_.forward(geom.envelope(), prj_trans_);
+                if (gbox.width() < minimum_path_length)
+                {
+                    continue;
+                }
+            }
+        }
+        // TODO - calculate length here as well
+        geometries_to_process_.push_back(const_cast<geometry_type*>(&geom));
+    }
+
+    if (largest_box_only)
+    {
+        geometries_to_process_.sort(largest_bbox_first());
+        geo_itr_ = geometries_to_process_.begin();
+        geometries_to_process_.erase(++geo_itr_,geometries_to_process_.end());
+    }
+    geo_itr_ = geometries_to_process_.begin();
+}
+
+void base_symbolizer_helper::initialize_points() const
+{
+    label_placement_enum how_placed = text_props_->label_placement;
+    if (how_placed == LINE_PLACEMENT)
+    {
+        point_placement_ = false;
+        return;
+    }
+    else
+    {
+        point_placement_ = true;
+    }
+
+    double label_x=0.0;
+    double label_y=0.0;
+    double z=0.0;
+
+    for (auto * geom_ptr : geometries_to_process_)
+    {
+        geometry_type const& geom = *geom_ptr;
+        if (how_placed == VERTEX_PLACEMENT)
+        {
+            geom.rewind(0);
+            for(unsigned i = 0; i < geom.size(); ++i)
+            {
+                geom.vertex(&label_x, &label_y);
+                prj_trans_.backward(label_x, label_y, z);
+                t_.forward(&label_x, &label_y);
+                points_.emplace_back(label_x, label_y);
+            }
+        }
+        else
+        {
+            // https://github.com/mapnik/mapnik/issues/1423
+            bool success = false;
+            // https://github.com/mapnik/mapnik/issues/1350
+            if (geom.type() == geometry_type::types::LineString)
+            {
+                success = label::middle_point(geom, label_x,label_y);
+            }
+            else if (how_placed == POINT_PLACEMENT)
+            {
+                success = label::centroid(geom, label_x, label_y);
+            }
+            else if (how_placed == INTERIOR_PLACEMENT)
+            {
+                success = label::interior_position(geom, label_x, label_y);
+            }
+            else
+            {
+                MAPNIK_LOG_ERROR(symbolizer_helpers) << "ERROR: Unknown placement type in initialize_points()";
+            }
+            if (success)
+            {
+                prj_trans_.backward(label_x, label_y, z);
+                t_.forward(&label_x, &label_y);
+                points_.emplace_back(label_x, label_y);
+            }
+        }
+    }
+    point_itr_ = points_.begin();
+}
+
+template <typename FaceManagerT, typename DetectorT>
+text_symbolizer_helper::text_symbolizer_helper(
+        text_symbolizer const& sym,
+        feature_impl const& feature,
+        attributes const& vars,
+        proj_transform const& prj_trans,
+        unsigned width, unsigned height, double scale_factor,
+        view_transform const& t, FaceManagerT & font_manager,
+        DetectorT &detector, box2d<double> const& query_extent,
+        agg::trans_affine const& affine_trans)
+    : base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent),
+      finder_(feature, vars, detector, dims_, *info_ptr_, font_manager, scale_factor),
+    adapter_(finder_,false),
+    converter_(query_extent_, adapter_, sym_, t, prj_trans, affine_trans, feature, vars, scale_factor)
+{
+
+    // setup vertex converter
+    value_bool clip = mapnik::get<value_bool, keys::clip>(sym_, feature_, vars_);
+    value_double simplify_tolerance = mapnik::get<value_double, keys::simplify_tolerance>(sym_, feature_, vars_);
+    value_double smooth = mapnik::get<value_double, keys::smooth>(sym_, feature_, vars_);
+
+    if (clip) converter_.template set<clip_line_tag>(); //optional clip (default: true)
+    converter_.template set<transform_tag>(); //always transform
+    converter_.template set<affine_transform_tag>();
+    if (simplify_tolerance > 0.0) converter_.template set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter_.template set<smooth_tag>(); // optional smooth converter
+
+    if (geometries_to_process_.size()) finder_.next_position();
+}
+
+placements_list const& text_symbolizer_helper::get() const
+{
+    if (point_placement_)
+    {
+        while (next_point_placement());
+    }
+    else
+    {
+        while (next_line_placement());
+    }
+    return finder_.placements();
+}
+
+bool text_symbolizer_helper::next_line_placement() const
+{
+    while (!geometries_to_process_.empty())
+    {
+        if (geo_itr_ == geometries_to_process_.end())
+        {
+            //Just processed the last geometry. Try next placement.
+            if (!finder_.next_position()) return false; //No more placements
+            //Start again from begin of list
+            geo_itr_ = geometries_to_process_.begin();
+            continue; //Reexecute size check
+        }
+
+        converter_.apply(**geo_itr_);
+        if (adapter_.status())
+        {
+            //Found a placement
+            geo_itr_ = geometries_to_process_.erase(geo_itr_);
+            return true;
+        }
+        // No placement for this geometry. Keep it in geometries_to_process_ for next try.
+        ++geo_itr_;
+    }
+    return false;
+}
+
+bool text_symbolizer_helper::next_point_placement() const
+{
+    while (!points_.empty())
+    {
+        if (point_itr_ == points_.end())
+        {
+            //Just processed the last point. Try next placement.
+            if (!finder_.next_position()) return false; //No more placements
+            //Start again from begin of list
+            point_itr_ = points_.begin();
+            continue; //Reexecute size check
+        }
+        if (finder_.find_point_placement(*point_itr_))
+        {
+            //Found a placement
+            point_itr_ = points_.erase(point_itr_);
+            return true;
+        }
+        //No placement for this point. Keep it in points_ for next try.
+        point_itr_++;
+    }
+    return false;
+}
+
+template <typename FaceManagerT, typename DetectorT>
+text_symbolizer_helper::text_symbolizer_helper(
+        shield_symbolizer const& sym,
+        feature_impl const& feature,
+        attributes const& vars,
+        proj_transform const& prj_trans,
+        unsigned width, unsigned height, double scale_factor,
+        view_transform const& t, FaceManagerT & font_manager,
+        DetectorT & detector, box2d<double> const& query_extent, agg::trans_affine const& affine_trans)
+    : base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent),
+      finder_(feature, vars, detector, dims_, *info_ptr_, font_manager, scale_factor),
+      adapter_(finder_,true),
+      converter_(query_extent_, adapter_, sym_, t, prj_trans, affine_trans, feature, vars, scale_factor)
+{
+   // setup vertex converter
+    value_bool clip = mapnik::get<value_bool, keys::clip>(sym_, feature_, vars_);
+    value_double simplify_tolerance = mapnik::get<value_double, keys::simplify_tolerance>(sym_, feature_, vars_);
+    value_double smooth = mapnik::get<value_double, keys::smooth>(sym_, feature_, vars_);
+
+    if (clip) converter_.template set<clip_line_tag>(); //optional clip (default: true)
+    converter_.template set<transform_tag>(); //always transform
+    converter_.template set<affine_transform_tag>();
+    if (simplify_tolerance > 0.0) converter_.template set<simplify_tag>(); // optional simplify converter
+    if (smooth > 0.0) converter_.template set<smooth_tag>(); // optional smooth converter
+    if (geometries_to_process_.size())
+    {
+        init_marker();
+        finder_.next_position();
+    }
+}
+
+
+void text_symbolizer_helper::init_marker() const
+{
+    std::string filename = mapnik::get<std::string,keys::file>(sym_, feature_, vars_);
+    if (filename.empty()) return;
+    boost::optional<mapnik::marker_ptr> marker = marker_cache::instance().find(filename, true);
+    if (!marker) return;
+    agg::trans_affine trans;
+    auto image_transform = get_optional<transform_type>(sym_, keys::image_transform);
+    if (image_transform) evaluate_transform(trans, feature_, vars_, *image_transform);
+    double width = (*marker)->width();
+    double height = (*marker)->height();
+    double px0 = - 0.5 * width;
+    double py0 = - 0.5 * height;
+    double px1 = 0.5 * width;
+    double py1 = 0.5 * height;
+    double px2 = px1;
+    double py2 = py0;
+    double px3 = px0;
+    double py3 = py1;
+    trans.transform(&px0, &py0);
+    trans.transform(&px1, &py1);
+    trans.transform(&px2, &py2);
+    trans.transform(&px3, &py3);
+    box2d<double> bbox(px0, py0, px1, py1);
+    bbox.expand_to_include(px2, py2);
+    bbox.expand_to_include(px3, py3);
+    value_bool unlock_image = mapnik::get<value_bool, keys::unlock_image>(sym_, feature_, vars_);
+    value_double shield_dx = mapnik::get<value_double, keys::shield_dx>(sym_, feature_, vars_);
+    value_double shield_dy = mapnik::get<value_double, keys::shield_dy>(sym_, feature_, vars_);
+    pixel_position marker_displacement;
+    marker_displacement.set(shield_dx,shield_dy);
+    finder_.set_marker(std::make_shared<marker_info>(*marker, trans), bbox, unlock_image, marker_displacement);
+}
+
+
+template text_symbolizer_helper::text_symbolizer_helper(
+    text_symbolizer const& sym,
+    feature_impl const& feature,
+    attributes const& vars,
+    proj_transform const& prj_trans,
+    unsigned width,
+    unsigned height,
+    double scale_factor,
+    view_transform const& t,
+    face_manager_freetype & font_manager,
+    label_collision_detector4 &detector,
+    box2d<double> const& query_extent,
+    agg::trans_affine const&);
+
+template text_symbolizer_helper::text_symbolizer_helper(
+    shield_symbolizer const& sym,
+    feature_impl const& feature,
+    attributes const& vars,
+    proj_transform const& prj_trans,
+    unsigned width,
+    unsigned height,
+    double scale_factor,
+    view_transform const& t,
+    face_manager_freetype & font_manager,
+    label_collision_detector4 &detector,
+    box2d<double> const& query_extent,
+    agg::trans_affine const&);
+} //namespace
diff --git a/src/text/text_layout.cpp b/src/text/text_layout.cpp
new file mode 100644
index 0000000..2250d97
--- /dev/null
+++ b/src/text/text_layout.cpp
@@ -0,0 +1,551 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/expression_evaluator.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/text/harfbuzz_shaper.hpp>
+#include <mapnik/make_unique.hpp>
+
+// ICU
+#include <unicode/brkiter.h>
+#include <algorithm>
+
+namespace mapnik
+{
+
+// Output is centered around (0,0)
+static void rotated_box2d(box2d<double> & box, rotation const& rot, pixel_position const& center, double width, double height)
+{
+    double half_width, half_height;
+    if (rot.sin == 0 && rot.cos == 1.)
+    {
+        half_width  = width / 2.;
+        half_height = height / 2.;
+    }
+    else
+    {
+        half_width  = (width * rot.cos + height * rot.sin) /2.;
+        half_height = (width * rot.sin + height * rot.cos) /2.;
+    }
+    box.init(center.x - half_width, center.y - half_height, center.x + half_width, center.y + half_height);
+}
+
+pixel_position evaluate_displacement(double dx, double dy, directions_e dir)
+{
+    switch (dir)
+    {
+    case EXACT_POSITION:
+        return pixel_position(dx,dy);
+        break;
+    case NORTH:
+        return pixel_position(0,-std::abs(dy));
+        break;
+    case EAST:
+        return pixel_position(std::abs(dx),0);
+        break;
+    case SOUTH:
+        return pixel_position(0,std::abs(dy));
+        break;
+    case WEST:
+        return pixel_position(-std::abs(dx),0);
+        break;
+    case NORTHEAST:
+        return pixel_position(std::abs(dx),-std::abs(dy));
+        break;
+    case SOUTHEAST:
+        return pixel_position(std::abs(dx),std::abs(dy));
+        break;
+    case NORTHWEST:
+        return pixel_position(-std::abs(dx),-std::abs(dy));
+        break;
+    case SOUTHWEST:
+        return pixel_position(-std::abs(dx),std::abs(dy));
+        break;
+    default:
+        return pixel_position(dx,dy);
+    }
+}
+
+pixel_position pixel_position::rotate(rotation const& rot) const
+{
+    return pixel_position(x * rot.cos - y * rot.sin, x * rot.sin + y * rot.cos);
+}
+
+text_layout::text_layout(face_manager_freetype & font_manager,
+                         feature_impl const& feature,
+                         attributes const& attrs,
+                         double scale_factor,
+                         text_symbolizer_properties const& properties,
+                         text_layout_properties const& layout_defaults,
+                         formatting::node_ptr tree)
+    : font_manager_(font_manager),
+      scale_factor_(scale_factor),
+      itemizer_(),
+      width_map_(),
+      width_(0.0),
+      height_(0.0),
+      glyphs_count_(0),
+      lines_(),
+      layout_properties_(layout_defaults),
+      properties_(properties),
+      format_(std::make_unique<detail::evaluated_format_properties>())
+    {
+        double dx = util::apply_visitor(extract_value<value_double>(feature,attrs), layout_properties_.dx);
+        double dy = util::apply_visitor(extract_value<value_double>(feature,attrs), layout_properties_.dy);
+        displacement_ = evaluate_displacement(dx,dy, layout_properties_.dir);
+        std::string wrap_str = util::apply_visitor(extract_value<std::string>(feature,attrs), layout_properties_.wrap_char);
+        if (!wrap_str.empty()) wrap_char_ = wrap_str[0];
+        wrap_width_ = util::apply_visitor(extract_value<value_double>(feature,attrs), layout_properties_.wrap_width);
+        double angle = util::apply_visitor(extract_value<value_double>(feature,attrs), layout_properties_.orientation);
+        orientation_.init(angle * M_PI/ 180.0);
+        wrap_before_ = util::apply_visitor(extract_value<value_bool>(feature,attrs), layout_properties_.wrap_before);
+        repeat_wrap_char_ = util::apply_visitor(extract_value<value_bool>(feature,attrs), layout_properties_.repeat_wrap_char);
+        rotate_displacement_ = util::apply_visitor(extract_value<value_bool>(feature,attrs), layout_properties_.rotate_displacement);
+        valign_ = util::apply_visitor(extract_value<vertical_alignment_enum>(feature,attrs),layout_properties_.valign);
+        halign_ = util::apply_visitor(extract_value<horizontal_alignment_enum>(feature,attrs),layout_properties_.halign);
+        jalign_ = util::apply_visitor(extract_value<justify_alignment_enum>(feature,attrs),layout_properties_.jalign);
+
+        // Takes a feature and produces formatted text as output.
+        if (tree)
+        {
+            format_properties const& format_defaults = properties_.format_defaults;
+            format_->text_size = util::apply_visitor(extract_value<value_double>(feature,attrs), format_defaults.text_size);
+            format_->character_spacing = util::apply_visitor(extract_value<value_double>(feature,attrs), format_defaults.character_spacing);
+            format_->line_spacing = util::apply_visitor(extract_value<value_double>(feature,attrs), format_defaults.line_spacing);
+            format_->text_opacity = util::apply_visitor(extract_value<value_double>(feature,attrs), format_defaults.text_opacity);
+            format_->halo_opacity = util::apply_visitor(extract_value<value_double>(feature,attrs), format_defaults.halo_opacity);
+            format_->halo_radius = util::apply_visitor(extract_value<value_double>(feature,attrs), format_defaults.halo_radius);
+            format_->fill = util::apply_visitor(extract_value<color>(feature,attrs), format_defaults.fill);
+            format_->halo_fill = util::apply_visitor(extract_value<color>(feature,attrs), format_defaults.halo_fill);
+            format_->text_transform = util::apply_visitor(extract_value<text_transform_enum>(feature,attrs), format_defaults.text_transform);
+            format_->face_name = format_defaults.face_name;
+            format_->fontset = format_defaults.fontset;
+            format_->ff_settings = util::apply_visitor(extract_value<font_feature_settings>(feature,attrs), format_defaults.ff_settings);
+            // Turn off ligatures if character_spacing > 0.
+            if (format_->character_spacing > .0 && format_->ff_settings.count() == 0)
+            {
+                format_->ff_settings.append(font_feature_liga_off);
+            }
+            tree->apply(format_, feature, attrs, *this);
+        }
+        else
+        {
+            MAPNIK_LOG_WARN(text_properties) << "text_symbolizer_properties can't produce text: No formatting tree!";
+        }
+    }
+
+void text_layout::add_text(mapnik::value_unicode_string const& str, evaluated_format_properties_ptr const& format)
+{
+    itemizer_.add_text(str, format);
+}
+
+void text_layout::add_child(text_layout_ptr const& child_layout)
+{
+    child_layout_list_.push_back(child_layout);
+}
+
+evaluated_format_properties_ptr & text_layout::new_child_format_ptr(evaluated_format_properties_ptr const& p)
+{
+    format_ptrs_.emplace_back(std::make_unique<detail::evaluated_format_properties>(*p));
+    return format_ptrs_.back();
+}
+
+
+mapnik::value_unicode_string const& text_layout::text() const
+{
+    return itemizer_.text();
+}
+
+void text_layout::layout()
+{
+    unsigned num_lines = itemizer_.num_lines();
+    for (unsigned i = 0; i < num_lines; ++i)
+    {
+        // Break line if neccessary
+        if (wrap_char_ != ' ')
+        {
+            break_line(itemizer_.line(i));
+        }
+        else
+        {
+            break_line_icu(itemizer_.line(i));
+        }
+    }
+
+    init_auto_alignment();
+
+    // Find text origin.
+    displacement_ = scale_factor_ * displacement_ + alignment_offset();
+    if (rotate_displacement_) displacement_ = displacement_.rotate(!orientation_);
+    // Find layout bounds, expanded for rotation
+    rotated_box2d(bounds_, orientation_, displacement_, width_, height_);
+}
+
+// In the Unicode string characters are always stored in logical order.
+// This makes line breaking easy. One word is added to the current line at a time. Once the line is too long
+// we either go back one step or insert the line break at the current position (depending on "wrap_before" setting).
+// At the end everything that is left over is added as the final line.
+void text_layout::break_line_icu(std::pair<unsigned, unsigned> && line_limits)
+{
+    text_line line(line_limits.first, line_limits.second);
+    shape_text(line);
+
+    double scaled_wrap_width = wrap_width_ * scale_factor_;
+    if (!scaled_wrap_width || line.width() < scaled_wrap_width)
+    {
+        add_line(std::move(line));
+        return;
+    }
+    if (text_ratio_)
+    {
+        double wrap_at;
+        double string_width = line.width();
+        double string_height = line.line_height();
+        for (double i = 1.0; ((wrap_at = string_width/i)/(string_height*i)) > text_ratio_ && (string_width/i) > scaled_wrap_width; i += 1.0) ;
+        scaled_wrap_width = wrap_at;
+    }
+
+    mapnik::value_unicode_string const& text = itemizer_.text();
+    Locale locale; // TODO: Is the default constructor correct?
+    UErrorCode status = U_ZERO_ERROR;
+    std::unique_ptr<BreakIterator> breakitr(BreakIterator::createLineInstance(locale, status));
+
+    // Not breaking the text if an error occurs is probably the best thing we can do.
+    // https://github.com/mapnik/mapnik/issues/2072
+    if (!U_SUCCESS(status))
+    {
+        add_line(std::move(line));
+        MAPNIK_LOG_ERROR(text_layout) << " could not create BreakIterator: " << u_errorName(status);
+        return;
+    }
+
+    breakitr->setText(text);
+
+    double current_line_length = 0;
+    int last_break_position = static_cast<int>(line.first_char());
+    for (unsigned i=line.first_char(); i < line.last_char(); ++i)
+    {
+        // TODO: character_spacing
+        std::map<unsigned, double>::const_iterator width_itr = width_map_.find(i);
+        if (width_itr != width_map_.end())
+        {
+            current_line_length += width_itr->second;
+        }
+        if (current_line_length <= scaled_wrap_width) continue;
+
+        int break_position = wrap_before_ ? breakitr->preceding(i) : breakitr->following(i);
+        // following() returns a break position after the last word. So DONE should only be returned
+        // when calling preceding.
+        if (break_position <= last_break_position || break_position == static_cast<int>(BreakIterator::DONE))
+        {
+            // A single word is longer than the maximum line width.
+            // Violate line width requirement and choose next break position
+            break_position = breakitr->following(i);
+            if (break_position == static_cast<int>(BreakIterator::DONE))
+            {
+                break_position = line.last_char();
+                MAPNIK_LOG_ERROR(text_layout) << "Unexpected result in break_line. Trying to recover...\n";
+            }
+        }
+        // Break iterator operates on the whole string, while we only look at one line. So we need to
+        // clamp break values.
+        if (break_position < static_cast<int>(line.first_char()))
+        {
+            break_position = line.first_char();
+        }
+        if (break_position > static_cast<int>(line.last_char()))
+        {
+            break_position = line.last_char();
+        }
+
+        text_line new_line(last_break_position, break_position);
+        clear_cluster_widths(last_break_position, break_position);
+        shape_text(new_line);
+        add_line(std::move(new_line));
+        last_break_position = break_position;
+        i = break_position - 1;
+        current_line_length = 0;
+    }
+    if (last_break_position == static_cast<int>(line.first_char()))
+    {
+        // No line breaks => no reshaping required
+        add_line(std::move(line));
+    }
+    else if (last_break_position != static_cast<int>(line.last_char()))
+    {
+        text_line new_line(last_break_position, line.last_char());
+        clear_cluster_widths(last_break_position, line.last_char());
+        shape_text(new_line);
+        add_line(std::move(new_line));
+    }
+}
+
+struct line_breaker : mapnik::noncopyable
+{
+    line_breaker(value_unicode_string const& ustr, char  wrap_char)
+        : ustr_(ustr),
+          wrap_char_(wrap_char) {}
+
+    std::int32_t following(std::int32_t offset)
+    {
+        std::int32_t pos = ustr_.indexOf(wrap_char_, offset);
+        if (pos != -1) ++pos;
+        return pos;
+    }
+
+    std::int32_t preceding(std::int32_t offset)
+    {
+        std::int32_t pos = ustr_.lastIndexOf(wrap_char_, 0, offset);
+        if (pos != -1) ++pos;
+        return pos;
+    }
+
+    value_unicode_string const& ustr_;
+    char wrap_char_;
+};
+
+inline int adjust_last_break_position (int pos, bool repeat_wrap_char)
+{
+    if (repeat_wrap_char)  return (pos==0) ? 0: pos - 1;
+    else return pos;
+}
+
+void text_layout::break_line(std::pair<unsigned, unsigned> && line_limits)
+{
+    text_line line(line_limits.first, line_limits.second);
+    shape_text(line);
+    double scaled_wrap_width = wrap_width_ * scale_factor_;
+    if (!scaled_wrap_width || line.width() < scaled_wrap_width)
+    {
+        add_line(std::move(line));
+        return;
+
+    }
+    if (text_ratio_)
+    {
+        double wrap_at;
+        double string_width = line.width();
+        double string_height = line.line_height();
+        for (double i = 1.0; ((wrap_at = string_width/i)/(string_height*i)) > text_ratio_ && (string_width/i) > scaled_wrap_width; i += 1.0) ;
+        scaled_wrap_width = wrap_at;
+    }
+    mapnik::value_unicode_string const& text = itemizer_.text();
+    line_breaker breaker(text, wrap_char_);
+    double current_line_length = 0;
+    int last_break_position = static_cast<int>(line.first_char());
+    for (unsigned i=line.first_char(); i < line.last_char(); ++i)
+    {
+        std::map<unsigned, double>::const_iterator width_itr = width_map_.find(i);
+        if (width_itr != width_map_.end())
+        {
+            current_line_length += width_itr->second;
+        }
+        if (current_line_length <= scaled_wrap_width) continue;
+
+        int break_position = wrap_before_ ? breaker.preceding(i) : breaker.following(i);
+        if (break_position <= last_break_position || break_position == static_cast<int>(BreakIterator::DONE))
+        {
+            break_position = breaker.following(i);
+            if (break_position == static_cast<int>(BreakIterator::DONE))
+            {
+                break_position = line.last_char();
+            }
+        }
+        if (break_position < static_cast<int>(line.first_char()))
+        {
+            break_position = line.first_char();
+        }
+        if (break_position > static_cast<int>(line.last_char()))
+        {
+            break_position = line.last_char();
+        }
+        text_line new_line(adjust_last_break_position(last_break_position, repeat_wrap_char_), break_position);
+        clear_cluster_widths(adjust_last_break_position(last_break_position, repeat_wrap_char_), break_position);
+        shape_text(new_line);
+        add_line(std::move(new_line));
+        last_break_position = break_position;
+        i = break_position - 1;
+        current_line_length = 0;
+    }
+    if (last_break_position == static_cast<int>(line.first_char()))
+    {
+        add_line(std::move(line));
+    }
+    else if (last_break_position != static_cast<int>(line.last_char()))
+    {
+        text_line new_line(adjust_last_break_position(last_break_position, repeat_wrap_char_), line.last_char());
+        clear_cluster_widths(adjust_last_break_position(last_break_position, repeat_wrap_char_), line.last_char());
+        shape_text(new_line);
+        add_line(std::move(new_line));
+    }
+}
+
+void text_layout::add_line(text_line && line)
+{
+    if (lines_.empty())
+    {
+        line.set_first_line(true);
+    }
+    height_ += line.height();
+    glyphs_count_ += line.size();
+    width_ = std::max(width_, line.width());
+    lines_.emplace_back(std::move(line));
+}
+
+void text_layout::clear_cluster_widths(unsigned first, unsigned last)
+{
+    for (unsigned i=first; i<last; ++i)
+    {
+        width_map_[i] = 0;
+    }
+}
+
+void text_layout::clear()
+{
+    itemizer_.clear();
+    lines_.clear();
+    width_map_.clear();
+    width_ = 0.0;
+    height_ = 0.0;
+    child_layout_list_.clear();
+}
+
+void text_layout::shape_text(text_line & line)
+{
+    harfbuzz_shaper::shape_text(line, itemizer_, width_map_, font_manager_, scale_factor_);
+}
+
+void text_layout::init_auto_alignment()
+{
+    if (valign_ == V_AUTO)
+    {
+        if (displacement_.y > 0.0) valign_ = V_BOTTOM;
+        else if (displacement_.y < 0.0) valign_ = V_TOP;
+        else valign_ = V_MIDDLE;
+    }
+    if (halign_ == H_AUTO)
+    {
+        if (displacement_.x > 0.0) halign_ = H_RIGHT;
+        else if (displacement_.x < 0.0) halign_ = H_LEFT;
+        else halign_ = H_MIDDLE;
+    }
+    if (jalign_ == J_AUTO)
+    {
+        if (displacement_.x > 0.0) jalign_ = J_LEFT;
+        else if (displacement_.x < 0.0) jalign_ = J_RIGHT;
+        else jalign_ = J_MIDDLE;
+    }
+}
+
+pixel_position text_layout::alignment_offset() const
+{
+    pixel_position result(0,0);
+    // if needed, adjust for desired vertical alignment
+    if (valign_ == V_TOP)
+    {
+        result.y = -0.5 * height();  // move center up by 1/2 the total height
+    }
+    else if (valign_ == V_BOTTOM)
+    {
+        result.y = 0.5 * height();  // move center down by the 1/2 the total height
+    }
+    // set horizontal position to middle of text
+    if (halign_ == H_LEFT)
+    {
+        result.x = -0.5 * width();  // move center left by 1/2 the string width
+    }
+    else if (halign_ == H_RIGHT)
+    {
+        result.x = 0.5 * width();  // move center right by 1/2 the string width
+    }
+    return result;
+}
+
+double text_layout::jalign_offset(double line_width) const
+{
+    if (jalign_ == J_MIDDLE) return -(line_width / 2.0);
+    if (jalign_ == J_LEFT)   return -(width() / 2.0);
+    if (jalign_ == J_RIGHT)  return (width() / 2.0) - line_width;
+    return 0;
+}
+
+text_layout::const_iterator text_layout::longest_line() const
+{
+    return std::max_element(lines_.begin(), lines_.end(),
+        [](text_line const& line1, text_line const& line2)
+        {
+            return line1.glyphs_width() < line2.glyphs_width();
+        });
+}
+
+void layout_container::add(text_layout_ptr layout)
+{
+    text_ += layout->text();
+    layouts_.push_back(layout);
+
+    for (text_layout_ptr const& child_layout : layout->get_child_layouts())
+    {
+        add(child_layout);
+    }
+}
+
+void layout_container::layout()
+{
+    bounds_.init(0,0,0,0);
+    glyphs_count_ = 0;
+    line_count_ = 0;
+
+    bool first = true;
+    for (text_layout_ptr const& layout : layouts_)
+    {
+        layout->layout();
+
+        glyphs_count_ += layout->glyphs_count();
+        line_count_ += layout->num_lines();
+
+        if (first)
+        {
+            bounds_ = layout->bounds();
+            first = false;
+        }
+        else
+        {
+            bounds_.expand_to_include(layout->bounds());
+        }
+    }
+}
+
+void layout_container::clear()
+{
+    layouts_.clear();
+    text_.remove();
+    bounds_.init(0,0,0,0);
+    glyphs_count_ = 0;
+    line_count_ = 0;
+}
+
+
+} //ns mapnik
diff --git a/src/text/text_line.cpp b/src/text/text_line.cpp
new file mode 100644
index 0000000..e14fd15
--- /dev/null
+++ b/src/text/text_line.cpp
@@ -0,0 +1,118 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/text/text_line.hpp>
+#include <mapnik/text/glyph_info.hpp>
+#include <mapnik/text/text_properties.hpp>
+
+namespace mapnik {
+
+text_line::text_line(unsigned first_char, unsigned last_char)
+    : glyphs_(),
+      line_height_(0.0),
+      max_char_height_(0.0),
+      width_(0.0),
+      glyphs_width_(0.0),
+      first_char_(first_char),
+      last_char_(last_char),
+      first_line_(false),
+      space_count_(0)
+{}
+
+text_line::text_line(text_line && rhs)
+    : glyphs_(std::move(rhs.glyphs_)),
+      line_height_(std::move(rhs.line_height_)),
+      max_char_height_(std::move(rhs.max_char_height_)),
+      width_(std::move(rhs.width_)),
+      glyphs_width_(std::move(rhs.glyphs_width_)),
+      first_char_(std::move(rhs.first_char_)),
+      last_char_(std::move(rhs.last_char_)),
+      first_line_(std::move(rhs.first_line_)),
+      space_count_(std::move(rhs.space_count_)) {}
+
+void text_line::add_glyph(glyph_info && glyph, double scale_factor_)
+{
+    line_height_ = std::max(line_height_, glyph.line_height() + glyph.format->line_spacing);
+    double advance = glyph.advance();
+    if (glyphs_.empty())
+    {
+        width_ = advance;
+        glyphs_width_ = advance;
+        space_count_ = 0;
+    }
+    else if (advance)
+    {
+        // Only add character spacing if the character is not a zero-width part of a cluster.
+        width_ += advance + glyphs_.back().format->character_spacing  * scale_factor_;
+        glyphs_width_ += advance;
+        space_count_++;
+    }
+    glyphs_.emplace_back(std::move(glyph));
+}
+
+void text_line::reserve(glyph_vector::size_type length)
+{
+    glyphs_.reserve(length);
+}
+
+text_line::const_iterator text_line::begin() const
+{
+    return glyphs_.begin();
+}
+
+text_line::const_iterator text_line::end() const
+{
+    return glyphs_.end();
+}
+
+double text_line::height() const
+{
+    if (first_line_) return max_char_height_;
+    return line_height_;
+}
+
+void text_line::update_max_char_height(double max_char_height)
+{
+    max_char_height_ = std::max(max_char_height_, max_char_height);
+}
+
+void text_line::set_first_line(bool first_line)
+{
+    first_line_ = first_line;
+}
+
+unsigned text_line::first_char() const
+{
+    return first_char_;
+}
+
+unsigned text_line::last_char() const
+{
+    return last_char_;
+}
+
+unsigned text_line::size() const
+{
+    return glyphs_.size();
+}
+
+} // end namespace mapnik
diff --git a/src/text/text_properties.cpp b/src/text/text_properties.cpp
new file mode 100644
index 0000000..2126b8e
--- /dev/null
+++ b/src/text/text_properties.cpp
@@ -0,0 +1,367 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/text/text_properties.hpp>
+#include <mapnik/text/text_layout.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/feature.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/ptree_helpers.hpp>
+#include <mapnik/expression_string.hpp>
+#include <mapnik/text/formatting/text.hpp>
+#include <mapnik/xml_node.hpp>
+#include <mapnik/config_error.hpp>
+#include <mapnik/text/properties_util.hpp>
+#include <mapnik/boolean.hpp>
+#include <mapnik/make_unique.hpp>
+
+// boost
+#include <boost/property_tree/ptree.hpp>
+
+namespace mapnik
+{
+using boost::optional;
+
+
+evaluated_text_properties_ptr evaluate_text_properties(text_symbolizer_properties const& text_prop, feature_impl const& feature, attributes const& attrs)
+{
+    // evaluate text properties
+    evaluated_text_properties_ptr prop = std::make_unique<detail::evaluated_text_properties>();
+    prop->label_placement = util::apply_visitor(extract_value<label_placement_enum>(feature,attrs), text_prop.expressions.label_placement);
+    prop->label_spacing = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.label_spacing);
+    prop->label_position_tolerance = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.label_position_tolerance);
+    prop->avoid_edges = util::apply_visitor(extract_value<value_bool>(feature,attrs), text_prop.expressions.avoid_edges);
+    prop->margin = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.margin);
+    prop->repeat_distance = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.repeat_distance);
+    prop->minimum_distance = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.minimum_distance);
+    prop->minimum_padding = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.minimum_padding);
+    prop->minimum_path_length = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.minimum_path_length);
+    prop->max_char_angle_delta = util::apply_visitor(extract_value<value_double>(feature,attrs), text_prop.expressions.max_char_angle_delta) * M_PI/180;
+    prop->allow_overlap = util::apply_visitor(extract_value<value_bool>(feature,attrs), text_prop.expressions.allow_overlap);
+    prop->largest_bbox_only = util::apply_visitor(extract_value<value_bool>(feature,attrs), text_prop.expressions.largest_bbox_only);
+    prop->upright = util::apply_visitor(extract_value<text_upright_enum>(feature,attrs), text_prop.expressions.upright);
+    return prop;
+}
+
+
+text_symbolizer_properties::text_symbolizer_properties()
+    : layout_defaults(),
+      format_defaults(),
+      tree_() {}
+
+void text_symbolizer_properties::set_format_tree(formatting::node_ptr tree)
+{
+    tree_ = tree;
+}
+
+formatting::node_ptr text_symbolizer_properties::format_tree() const
+{
+    return tree_;
+}
+
+void text_symbolizer_properties::text_properties_from_xml(xml_node const& node)
+{
+    // The options 'margin' and 'repeat-distance' replace 'minimum-distance'.
+    // Only allow one or the other to be defined here.
+    if (node.has_attribute("margin") || node.has_attribute("repeat-distance"))
+    {
+        if (node.has_attribute("minimum-distance"))
+        {
+            throw config_error(std::string("Cannot use deprecated option minimum-distance with "
+                                           "new options margin and repeat-distance."));
+        }
+        set_property_from_xml<value_double>(expressions.margin, "margin", node);
+        set_property_from_xml<value_double>(expressions.repeat_distance, "repeat-distance", node);
+    }
+    else
+    {
+        set_property_from_xml<value_double>(expressions.minimum_distance, "minimum-distance", node);
+    }
+    set_property_from_xml<label_placement_e>(expressions.label_placement, "placement", node);
+    set_property_from_xml<value_double>(expressions.label_spacing, "spacing", node);
+    set_property_from_xml<value_double>(expressions.label_position_tolerance, "label-position-tolerance", node);
+    set_property_from_xml<value_double>(expressions.minimum_padding, "minimum-padding", node);
+    set_property_from_xml<value_double>(expressions.minimum_path_length, "minimum-path-length", node);
+    set_property_from_xml<boolean_type>(expressions.avoid_edges, "avoid-edges", node);
+    set_property_from_xml<boolean_type>(expressions.allow_overlap, "allow-overlap", node);
+    set_property_from_xml<boolean_type>(expressions.largest_bbox_only, "largest-bbox-only", node);
+    set_property_from_xml<value_double>(expressions.max_char_angle_delta, "max-char-angle-delta", node);
+    set_property_from_xml<text_upright_e>(expressions.upright, "upright", node);
+}
+
+void text_symbolizer_properties::from_xml(xml_node const& node, fontset_map const& fontsets, bool is_shield)
+{
+    text_properties_from_xml(node);
+    layout_defaults.from_xml(node,fontsets);
+    format_defaults.from_xml(node, fontsets, is_shield);
+    formatting::node_ptr n(formatting::node::from_xml(node,fontsets));
+    if (n) set_format_tree(n);
+}
+
+void text_symbolizer_properties::to_xml(boost::property_tree::ptree &node,
+                                        bool explicit_defaults,
+                                        text_symbolizer_properties const& dfl) const
+{
+    if (!(expressions.label_placement == dfl.expressions.label_placement) || explicit_defaults)
+    {
+        serialize_property("placement", expressions.label_placement, node);
+    }
+    if (!(expressions.label_position_tolerance == dfl.expressions.label_position_tolerance) || explicit_defaults)
+    {
+        serialize_property("label-position-tolerance", expressions.label_position_tolerance,node);
+    }
+    if (!(expressions.label_spacing == dfl.expressions.label_spacing) || explicit_defaults)
+    {
+        serialize_property("spacing", expressions.label_spacing, node);
+    }
+    if (!(expressions.margin == dfl.expressions.margin) || explicit_defaults)
+    {
+        serialize_property("margin", expressions.margin, node);
+    }
+    if (!(expressions.repeat_distance == dfl.expressions.repeat_distance) || explicit_defaults)
+    {
+        serialize_property("repeat-distance", expressions.repeat_distance, node);
+    }
+    if (!(expressions.minimum_distance == dfl.expressions.minimum_distance) || explicit_defaults)
+    {
+        serialize_property("minimum-distance", expressions.minimum_distance, node);
+    }
+    if (!(expressions.minimum_padding == dfl.expressions.minimum_padding) || explicit_defaults)
+    {
+        serialize_property("minimum-padding", expressions.minimum_padding, node);
+    }
+    if (!(expressions.minimum_path_length == dfl.expressions.minimum_path_length) || explicit_defaults)
+    {
+        serialize_property("minimum-path-length", expressions.minimum_path_length, node);
+    }
+    if (!(expressions.avoid_edges == dfl.expressions.avoid_edges) || explicit_defaults)
+    {
+        serialize_property("avoid-edges", expressions.avoid_edges, node);
+    }
+    if (!(expressions.allow_overlap == dfl.expressions.allow_overlap) || explicit_defaults)
+    {
+        serialize_property("allow-overlap", expressions.allow_overlap, node);
+    }
+    if (!(expressions.largest_bbox_only == dfl.expressions.largest_bbox_only) || explicit_defaults)
+    {
+        serialize_property("largest-bbox-only", expressions.largest_bbox_only, node);
+    }
+    if (!(expressions.max_char_angle_delta == dfl.expressions.max_char_angle_delta) || explicit_defaults)
+    {
+        serialize_property("max-char-angle-delta", expressions.max_char_angle_delta, node);
+    }
+    if (!(expressions.upright == dfl.expressions.upright) || explicit_defaults)
+    {
+        serialize_property("upright", expressions.upright, node);
+    }
+
+    layout_defaults.to_xml(node, explicit_defaults, dfl.layout_defaults);
+    format_defaults.to_xml(node, explicit_defaults, dfl.format_defaults);
+    if (tree_) tree_->to_xml(node);
+}
+
+
+void text_symbolizer_properties::add_expressions(expression_set & output) const
+{
+    if (is_expression(expressions.label_placement)) output.insert(util::get<expression_ptr>(expressions.label_placement));
+    if (is_expression(expressions.label_spacing)) output.insert(util::get<expression_ptr>(expressions.label_spacing));
+    if (is_expression(expressions.label_position_tolerance)) output.insert(util::get<expression_ptr>(expressions.label_position_tolerance));
+    if (is_expression(expressions.avoid_edges)) output.insert(util::get<expression_ptr>(expressions.avoid_edges));
+    if (is_expression(expressions.margin)) output.insert(util::get<expression_ptr>(expressions.margin));
+    if (is_expression(expressions.repeat_distance)) output.insert(util::get<expression_ptr>(expressions.repeat_distance));
+    if (is_expression(expressions.minimum_distance)) output.insert(util::get<expression_ptr>(expressions.minimum_distance));
+    if (is_expression(expressions.minimum_padding)) output.insert(util::get<expression_ptr>(expressions.minimum_padding));
+    if (is_expression(expressions.minimum_path_length)) output.insert(util::get<expression_ptr>(expressions.minimum_path_length));
+    if (is_expression(expressions.max_char_angle_delta)) output.insert(util::get<expression_ptr>(expressions.max_char_angle_delta));
+    if (is_expression(expressions.allow_overlap)) output.insert(util::get<expression_ptr>(expressions.allow_overlap));
+    if (is_expression(expressions.largest_bbox_only)) output.insert(util::get<expression_ptr>(expressions.largest_bbox_only));
+    if (is_expression(expressions.upright)) output.insert(util::get<expression_ptr>(expressions.upright));
+
+    layout_defaults.add_expressions(output);
+    format_defaults.add_expressions(output);
+    if (tree_) tree_->add_expressions(output);
+}
+
+text_layout_properties::text_layout_properties()
+    : halign(enumeration_wrapper(H_AUTO)),
+      jalign(enumeration_wrapper(J_AUTO)),
+      valign(enumeration_wrapper(V_AUTO)) {}
+
+void text_layout_properties::from_xml(xml_node const &node, fontset_map const& fontsets)
+{
+    set_property_from_xml<double>(dx, "dx", node);
+    set_property_from_xml<double>(dy, "dy", node);
+    set_property_from_xml<double>(text_ratio, "text-ratio", node);
+    set_property_from_xml<double>(wrap_width, "wrap-width", node);
+    set_property_from_xml<std::string>(wrap_char, "wrap-character", node);
+    set_property_from_xml<boolean_type>(wrap_before, "wrap-before", node);
+    set_property_from_xml<boolean_type>(repeat_wrap_char, "repeat-wrap-character", node);
+    set_property_from_xml<boolean_type>(rotate_displacement, "rotate-displacement", node);
+    set_property_from_xml<double>(orientation, "orientation", node);
+    set_property_from_xml<vertical_alignment_e>(valign, "vertical-alignment", node);
+    set_property_from_xml<horizontal_alignment_e>(halign, "horizontal-alignment", node);
+    set_property_from_xml<justify_alignment_e>(jalign, "justify-alignment", node);
+}
+
+void text_layout_properties::to_xml(boost::property_tree::ptree & node,
+                                    bool explicit_defaults,
+                                    text_layout_properties const& dfl) const
+{
+    if (!(dx == dfl.dx) || explicit_defaults) serialize_property("dx", dx, node);
+    if (!(dy == dfl.dy) || explicit_defaults) serialize_property("dy", dy, node);
+    if (!(valign == dfl.valign) || explicit_defaults) serialize_property("vertical-alignment", valign, node);
+    if (!(halign == dfl.halign) || explicit_defaults) serialize_property("horizontal-alignment", halign, node);
+    if (!(jalign == dfl.jalign) || explicit_defaults) serialize_property("justify-alignment", jalign, node);
+    if (!(text_ratio == dfl.text_ratio) || explicit_defaults) serialize_property("text-ratio", text_ratio, node);
+    if (!(wrap_width == dfl.wrap_width) || explicit_defaults) serialize_property("wrap-width", wrap_width, node);
+    if (!(wrap_char == dfl.wrap_char) || explicit_defaults) serialize_property("wrap-character", wrap_char, node);
+    if (!(wrap_before == dfl.wrap_before) || explicit_defaults) serialize_property("wrap-before", wrap_before, node);
+    if (!(repeat_wrap_char == dfl.repeat_wrap_char) || explicit_defaults) serialize_property("repeat-wrap-character", repeat_wrap_char, node);
+    if (!(rotate_displacement == dfl.rotate_displacement) || explicit_defaults)
+        serialize_property("rotate-displacement", rotate_displacement, node);
+    if (!(orientation == dfl.orientation) || explicit_defaults) serialize_property("orientation", orientation, node);
+}
+
+void text_layout_properties::add_expressions(expression_set & output) const
+{
+    if (is_expression(dx)) output.insert(util::get<expression_ptr>(dx));
+    if (is_expression(dy)) output.insert(util::get<expression_ptr>(dy));
+    if (is_expression(orientation)) output.insert(util::get<expression_ptr>(orientation));
+    if (is_expression(wrap_width)) output.insert(util::get<expression_ptr>(wrap_width));
+    if (is_expression(wrap_char)) output.insert(util::get<expression_ptr>(wrap_char));
+    if (is_expression(wrap_before)) output.insert(util::get<expression_ptr>(wrap_before));
+    if (is_expression(repeat_wrap_char)) output.insert(util::get<expression_ptr>(repeat_wrap_char));
+    if (is_expression(rotate_displacement)) output.insert(util::get<expression_ptr>(rotate_displacement));
+    if (is_expression(text_ratio)) output.insert(util::get<expression_ptr>(text_ratio));
+    if (is_expression(halign)) output.insert(util::get<expression_ptr>(halign));
+    if (is_expression(valign)) output.insert(util::get<expression_ptr>(valign));
+    if (is_expression(jalign)) output.insert(util::get<expression_ptr>(jalign));
+}
+
+// text format properties
+format_properties::format_properties()
+    : face_name(),
+      fontset(),
+      text_size(10.0),
+      character_spacing(0.0),
+      line_spacing(0.0),
+      text_opacity(1.0),
+      halo_opacity(1.0),
+      fill(color(0,0,0)),
+      halo_fill(color(255,255,255)),
+      halo_radius(0.0),
+      text_transform(enumeration_wrapper(NONE)),
+      ff_settings() {}
+
+void format_properties::from_xml(xml_node const& node, fontset_map const& fontsets, bool is_shield)
+{
+    set_property_from_xml<double>(text_size, "size", node);
+    set_property_from_xml<double>(character_spacing, "character-spacing", node);
+    set_property_from_xml<double>(line_spacing, "line-spacing", node);
+    set_property_from_xml<double>(halo_radius, "halo-radius", node);
+    // https://github.com/mapnik/mapnik/issues/2507
+    if (is_shield)
+    {
+        set_property_from_xml<double>(text_opacity, "text-opacity", node);
+    }
+    else
+    {
+        set_property_from_xml<double>(text_opacity, "opacity", node);
+    }
+    set_property_from_xml<double>(halo_opacity, "halo-opacity", node);
+    set_property_from_xml<color>(fill, "fill", node);
+    set_property_from_xml<color>(halo_fill, "halo-fill", node);
+    set_property_from_xml<text_transform_e>(text_transform,"text-transform", node);
+    set_property_from_xml<font_feature_settings>(ff_settings, "font-feature-settings", node);
+
+    optional<std::string> face_name_ = node.get_opt_attr<std::string>("face-name");
+    if (face_name_) face_name = *face_name_;
+    optional<std::string> fontset_name_ = node.get_opt_attr<std::string>("fontset-name");
+    if (fontset_name_)
+    {
+        std::map<std::string,font_set>::const_iterator itr = fontsets.find(*fontset_name_);
+        if (itr != fontsets.end())
+        {
+            fontset = itr->second;
+        }
+        else
+        {
+            throw config_error("Unable to find any fontset named '" + *fontset_name_ + "'", node);
+        }
+    }
+    if (!face_name.empty() && fontset)
+    {
+        throw config_error("Can't have both face-name and fontset-name", node);
+    }
+    if (face_name.empty() && !fontset)
+    {
+        throw config_error("Must have face-name or fontset-name", node);
+    }
+}
+
+void format_properties::to_xml(boost::property_tree::ptree & node, bool explicit_defaults, format_properties const& dfl) const
+{
+    if (fontset)
+    {
+        set_attr(node, "fontset-name", fontset->get_name());
+    }
+
+    if (face_name != dfl.face_name || explicit_defaults)
+    {
+        set_attr(node, "face-name", face_name);
+    }
+
+    if (!(text_size == dfl.text_size) || explicit_defaults) serialize_property("size", text_size, node);
+    if (!(character_spacing == dfl.character_spacing) || explicit_defaults) serialize_property("character-spacing", character_spacing, node);
+    if (!(line_spacing == dfl.line_spacing) || explicit_defaults) serialize_property("line-spacing", line_spacing, node);
+    if (!(halo_radius == dfl.halo_radius) || explicit_defaults) serialize_property("halo-radius", halo_radius, node);
+    // NOTE: this is dodgy: for text-symbolizer this should do the right thing
+    // but for shield_symbolizer it won't but 'opacity' should be overwritten by save_map later on
+    // since it is a property of the symbolizer_base rather than these properties
+    if (!(text_opacity == dfl.text_opacity) || explicit_defaults)
+    {
+        serialize_property("text-opacity", text_opacity, node);
+        serialize_property("opacity", text_opacity, node);
+    }
+    if (!(halo_opacity == dfl.halo_opacity) || explicit_defaults) serialize_property("halo-opacity", halo_opacity, node);
+    if (!(fill == dfl.fill) || explicit_defaults) serialize_property("fill", fill, node);
+    if (!(halo_fill == dfl.halo_fill) || explicit_defaults) serialize_property("halo-fill", halo_fill, node);
+    if (!(text_transform == dfl.text_transform) || explicit_defaults) serialize_property("text-transform", text_transform, node);
+    if (!(ff_settings == dfl.ff_settings) || explicit_defaults) serialize_property("font-feature-settings", ff_settings, node);
+}
+
+void format_properties::add_expressions(expression_set & output) const
+{
+    if (is_expression(text_size)) output.insert(util::get<expression_ptr>(text_size));
+    if (is_expression(character_spacing)) output.insert(util::get<expression_ptr>(character_spacing));
+    if (is_expression(line_spacing)) output.insert(util::get<expression_ptr>(line_spacing));
+    if (is_expression(halo_radius)) output.insert(util::get<expression_ptr>(halo_radius));
+    if (is_expression(text_opacity)) output.insert(util::get<expression_ptr>(text_opacity));
+    if (is_expression(halo_opacity)) output.insert(util::get<expression_ptr>(halo_opacity));
+    if (is_expression(fill)) output.insert(util::get<expression_ptr>(fill));
+    if (is_expression(halo_fill)) output.insert(util::get<expression_ptr>(halo_fill));
+    if (is_expression(text_transform)) output.insert(util::get<expression_ptr>(text_transform));
+    if (is_expression(ff_settings)) output.insert(util::get<expression_ptr>(ff_settings));
+}
+
+
+} //ns mapnik
diff --git a/src/text/vertex_cache.cpp b/src/text/vertex_cache.cpp
new file mode 100644
index 0000000..8a2fb2b
--- /dev/null
+++ b/src/text/vertex_cache.cpp
@@ -0,0 +1,405 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+// mapnik
+#include <mapnik/global.hpp>
+#include <mapnik/text/vertex_cache.hpp>
+#include <mapnik/offset_converter.hpp>
+#include <mapnik/make_unique.hpp>
+
+namespace mapnik
+{
+
+double vertex_cache::current_segment_angle()
+{
+    return std::atan2(-(current_segment_->pos.y - segment_starting_point_.y),
+                   current_segment_->pos.x - segment_starting_point_.x);
+}
+
+double vertex_cache::angle(double width)
+{
+    // IMPORTANT NOTE: See note about coordinate systems in placement_finder::find_point_placement()
+    // for imformation about why the y axis is inverted!
+    double tmp = width + position_in_segment_;
+    if ((tmp <= current_segment_->length) && (tmp >= 0))
+    {
+        //Only calculate angle on request as it is expensive
+        if (!angle_valid_)
+        {
+            angle_ = current_segment_angle();
+        }
+    }
+    else
+    {
+        scoped_state s(*this);
+        if (move(width))
+        {
+            pixel_position const& old_pos = s.get_state().position();
+            return std::atan2(-(current_position_.y - old_pos.y),
+                           current_position_.x - old_pos.x);
+        }
+        else
+        {
+            s.restore();
+            angle_ = current_segment_angle();
+        }
+    }
+    return width >= 0 ? angle_ : angle_ + M_PI;
+}
+
+bool vertex_cache::next_subpath()
+{
+    if (!initialized_)
+    {
+        current_subpath_ = subpaths_.begin();
+        initialized_ = true;
+    }
+    else
+    {
+        current_subpath_++;
+    }
+    if (current_subpath_ == subpaths_.end()) return false;
+    rewind_subpath(); //Initialize position values
+    return true;
+}
+
+void vertex_cache::rewind_subpath()
+{
+    current_segment_ = current_subpath_->vector.begin();
+    //All subpaths contain at least one segment (i.e. the starting point)
+    segment_starting_point_ = current_position_ = current_segment_->pos;
+    position_in_segment_ = 0;
+    angle_valid_ = false;
+    position_ = 0;
+}
+
+void vertex_cache::reset()
+{
+    initialized_ = false;
+}
+
+bool vertex_cache::next_segment()
+{
+    segment_starting_point_ = current_segment_->pos; //Next segments starts at the end of the current one
+    if (current_segment_ == current_subpath_->vector.end()) return false;
+    current_segment_++;
+    angle_valid_ = false;
+    if (current_segment_ == current_subpath_->vector.end()) return false;
+    return true;
+}
+
+bool vertex_cache::previous_segment()
+{
+    if (current_segment_ == current_subpath_->vector.begin()) return false;
+    current_segment_--;
+    angle_valid_ = false;
+    if (current_segment_ == current_subpath_->vector.begin())
+    {
+        //First segment is special
+        segment_starting_point_ = current_segment_->pos;
+        return true;
+    }
+    segment_starting_point_ = (current_segment_-1)->pos;
+    return true;
+}
+
+vertex_cache & vertex_cache::get_offseted(double offset, double region_width)
+{
+    if (std::fabs(offset) < 0.01)
+    {
+        return *this;
+    }
+
+    offseted_lines_map::iterator pos = offseted_lines_.find(offset);
+    if (pos == offseted_lines_.end())
+    {
+        offset_converter<vertex_cache> converter(*this);
+        converter.set_offset(offset);
+        pos = offseted_lines_.emplace(offset, std::make_unique<vertex_cache>(converter)).first;
+    }
+    vertex_cache_ptr & offseted_line = pos->second;
+
+    offseted_line->reset();
+    offseted_line->next_subpath(); //TODO: Multiple subpath support
+
+    // find the point on the offset line closest to the current position,
+    // which we'll use to make the offset line aligned to this one.
+    double seek = offseted_line->position_closest_to(current_position_);
+    offseted_line->move(seek);
+    return *offseted_line;
+}
+
+inline double dist_sq(pixel_position const &d)
+{
+    return d.x*d.x + d.y*d.y;
+}
+
+double vertex_cache::position_closest_to(pixel_position const &target_pos)
+{
+    bool first = true;
+    pixel_position old_pos, new_pos;
+    double lin_pos = 0.0, min_pos = 0.0, min_dist_sq = std::numeric_limits<double>::max();
+
+    // find closest approach of each individual segment to the
+    // target position. would be good if there were some kind
+    // of prior, or fast test to avoid calculating on each
+    // segment, but i can't think of one.
+    for (segment const &seg : current_subpath_->vector)
+    {
+        if (first)
+        {
+            old_pos = seg.pos;
+            min_pos = lin_pos;
+            min_dist_sq = dist_sq(target_pos - old_pos);
+            first = false;
+
+        }
+        else
+        {
+            new_pos = seg.pos;
+
+            pixel_position d = new_pos - old_pos;
+            if ((d.x != 0.0) || (d.y != 0))
+            {
+                pixel_position c = target_pos - old_pos;
+                double t = (c.x * d.x + c.y * d.y) / dist_sq(d);
+
+                if ((t >= 0.0) && (t <= 1.0))
+                {
+                    pixel_position pt = (d * t) + old_pos;
+                    double pt_dist_sq = dist_sq(target_pos - pt);
+
+                    if (pt_dist_sq < min_dist_sq)
+                    {
+                        min_dist_sq = pt_dist_sq;
+                        min_pos = lin_pos + seg.length * t;
+                    }
+                }
+            }
+
+            old_pos = new_pos;
+            lin_pos += seg.length;
+
+            double end_dist_sq = dist_sq(target_pos - old_pos);
+            if (end_dist_sq < min_dist_sq)
+            {
+                min_dist_sq = end_dist_sq;
+                min_pos = lin_pos;
+            }
+        }
+    }
+
+    return min_pos;
+}
+
+bool vertex_cache::forward(double length)
+{
+    if (length < 0)
+    {
+        MAPNIK_LOG_ERROR(vertex_cache) << "vertex_cache::forward() called with negative argument!\n";
+        return false;
+    }
+    return move(length);
+}
+
+bool vertex_cache::backward(double length)
+{
+    if (length < 0)
+    {
+        MAPNIK_LOG_ERROR(vertex_cache) << "vertex_cache::backward() called with negative argument!\n";
+        return false;
+    }
+    return move(-length);
+}
+
+bool vertex_cache::move(double length)
+{
+    if (current_segment_ == current_subpath_->vector.end()) return false;
+
+    position_ += length;
+    length += position_in_segment_;
+    while (length >= current_segment_->length)
+    {
+        length -= current_segment_->length;
+        if (!next_segment()) return false; //Skip all complete segments
+    }
+    while (length < 0)
+    {
+        if (!previous_segment()) return false;
+        length += current_segment_->length;
+    }
+    double factor = length / current_segment_->length;
+    position_in_segment_ = length;
+    current_position_ = segment_starting_point_ + (current_segment_->pos - segment_starting_point_) * factor;
+    return true;
+}
+
+bool vertex_cache::move_to_distance(double distance)
+{
+    if (current_segment_ == current_subpath_->vector.end()) return false;
+
+    double position_in_segment = position_in_segment_ + distance;
+    if (position_in_segment < .0 || position_in_segment >= current_segment_->length)
+    {
+        // If there isn't enough distance left on this segment
+        // then we need to search until we find the line segment that ends further than distance away
+        double abs_distance = std::abs(distance);
+        double new_abs_distance = .0;
+        pixel_position inner_pos; // Inside circle.
+        pixel_position outer_pos; // Outside circle.
+
+        position_ -= position_in_segment_;
+
+        if (distance > .0)
+        {
+            do
+            {
+                position_ += current_segment_->length;
+                if (!next_segment()) return false;
+                new_abs_distance = (current_position_ - current_segment_->pos).length();
+            }
+            while (new_abs_distance < abs_distance);
+
+            inner_pos = segment_starting_point_;
+            outer_pos = current_segment_->pos;
+        }
+        else
+        {
+            do
+            {
+                if (!previous_segment()) return false;
+                position_ -= current_segment_->length;
+                new_abs_distance = (current_position_ - segment_starting_point_).length();
+            }
+            while (new_abs_distance < abs_distance);
+
+            inner_pos = current_segment_->pos;
+            outer_pos = segment_starting_point_;
+        }
+
+        find_line_circle_intersection(current_position_.x, current_position_.y, abs_distance,
+            inner_pos.x, inner_pos.y, outer_pos.x, outer_pos.y,
+            current_position_.x, current_position_.y);
+
+        position_in_segment_ = (current_position_ - segment_starting_point_).length();
+        position_ += position_in_segment_;
+    }
+    else
+    {
+        position_ += distance;
+        distance += position_in_segment_;
+        double factor = distance / current_segment_->length;
+        position_in_segment_ = distance;
+        current_position_ = segment_starting_point_ + (current_segment_->pos - segment_starting_point_) * factor;
+    }
+    return true;
+}
+
+void vertex_cache::rewind(unsigned)
+{
+    vertex_subpath_ = subpaths_.begin();
+    vertex_segment_ = vertex_subpath_->vector.begin();
+}
+
+unsigned vertex_cache::vertex(double *x, double *y)
+{
+    if (vertex_segment_ == vertex_subpath_->vector.end())
+    {
+        vertex_subpath_++;
+        if (vertex_subpath_ == subpaths_.end()) return agg::path_cmd_stop;
+        vertex_segment_ = vertex_subpath_->vector.begin();
+    }
+    *x = vertex_segment_->pos.x;
+    *y = vertex_segment_->pos.y;
+    unsigned cmd = (vertex_segment_ == vertex_subpath_->vector.begin()) ? agg::path_cmd_move_to : agg::path_cmd_line_to;
+    vertex_segment_++;
+    return cmd;
+}
+
+
+vertex_cache::state vertex_cache::save_state() const
+{
+    state s;
+    s.current_segment = current_segment_;
+    s.position_in_segment = position_in_segment_;
+    s.current_position = current_position_;
+    s.segment_starting_point = segment_starting_point_;
+    s.position_ = position_;
+    return s;
+}
+
+void vertex_cache::restore_state(state const& s)
+{
+    current_segment_ = s.current_segment;
+    position_in_segment_ = s.position_in_segment;
+    current_position_ = s.current_position;
+    segment_starting_point_ = s.segment_starting_point;
+    position_ = s.position_;
+    angle_valid_ = false;
+}
+
+void vertex_cache::find_line_circle_intersection(
+    double cx, double cy, double radius,
+    double x1, double y1, double x2, double y2,
+    double & ix, double & iy) const
+{
+    double dx = x2 - x1;
+    double dy = y2 - y1;
+
+    double A = dx * dx + dy * dy;
+    double B = 2 * (dx * (x1 - cx) + dy * (y1 - cy));
+    double C = (x1 - cx) * (x1 - cx) + (y1 - cy) * (y1 - cy) - radius * radius;
+
+    double det = B * B - 4 * A * C;
+    if (A <= 1.0e-7 || det < 0)
+    {
+        // Should never happen.
+        // No real solutions.
+        return;
+    }
+    else if (det == 0)
+    {
+        // Could potentially happen....
+        // One solution.
+        double t = -B / (2 * A);
+        ix = x1 + t * dx;
+        iy = y1 + t * dy;
+        return;
+    }
+    else
+    {
+        // Two solutions.
+
+        // Always use the 1st one
+        // We only really have one solution here, as we know the line segment will start in the circle and end outside
+        double t = (-B + std::sqrt(det)) / (2 * A);
+        ix = x1 + t * dx;
+        iy = y1 + t * dy;
+
+        //t = (-B - std::sqrt(det)) / (2 * A);
+        //ix = x1 + t * dx;
+        //iy = y1 + t * dy;
+
+        return;
+    }
+}
+
+} //ns mapnik
diff --git a/src/text_placements/base.cpp b/src/text_placements/base.cpp
deleted file mode 100644
index c753d34..0000000
--- a/src/text_placements/base.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-#include <mapnik/text_placements/base.hpp>
-
-namespace mapnik {
-text_placements::text_placements() : defaults()
-{
-}
-
-void text_placements::add_expressions(expression_set &output)
-{
-    defaults.add_expressions(output);
-}
-
-
-/************************************************************************/
-
-text_placement_info::text_placement_info(text_placements const* parent,
-                                         double scale_factor_)
-    : properties(parent->defaults),
-      scale_factor(scale_factor_)
-{
-
-}
-
-} //ns mapnik
diff --git a/src/text_placements/dummy.cpp b/src/text_placements/dummy.cpp
deleted file mode 100644
index 989fb54..0000000
--- a/src/text_placements/dummy.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <mapnik/text_placements/dummy.hpp>
-#include <boost/make_shared.hpp>
-
-namespace mapnik
-{
-bool text_placement_info_dummy::next()
-{
-    if (state) return false;
-    state++;
-    return true;
-}
-
-text_placement_info_ptr text_placements_dummy::get_placement_info(
-    double scale_factor) const
-{
-    return boost::make_shared<text_placement_info_dummy>(this, scale_factor);
-}
-
-} //ns mapnik
diff --git a/src/text_placements/list.cpp b/src/text_placements/list.cpp
deleted file mode 100644
index bd0dccd..0000000
--- a/src/text_placements/list.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-//mapnik
-#include <mapnik/text_placements/list.hpp>
-#include <mapnik/xml_node.hpp>
-
-//boost
-#include <boost/make_shared.hpp>
-#include <boost/property_tree/ptree.hpp>
-
-
-namespace mapnik
-{
-
-bool text_placement_info_list::next()
-{
-    if (state == 0) {
-        properties = parent_->defaults;
-    } else {
-        if (state-1 >= parent_->list_.size()) return false;
-        properties = parent_->list_[state-1];
-    }
-    state++;
-    return true;
-}
-
-text_symbolizer_properties & text_placements_list::add()
-{
-    if (list_.size()) {
-        text_symbolizer_properties &last = list_.back();
-        list_.push_back(last); //Preinitialize with old values
-    } else {
-        list_.push_back(defaults);
-    }
-    return list_.back();
-}
-
-text_symbolizer_properties & text_placements_list::get(unsigned i)
-{
-    return list_[i];
-}
-
-/***************************************************************************/
-
-text_placement_info_ptr text_placements_list::get_placement_info(double scale_factor) const
-{
-    return boost::make_shared<text_placement_info_list>(this, scale_factor);
-}
-
-text_placements_list::text_placements_list() : text_placements(), list_(0)
-{
-
-}
-
-void text_placements_list::add_expressions(expression_set &output)
-{
-    defaults.add_expressions(output);
-
-    std::vector<text_symbolizer_properties>::const_iterator it;
-    for (it=list_.begin(); it != list_.end(); it++)
-    {
-        it->add_expressions(output);
-    }
-}
-
-unsigned text_placements_list::size() const
-{
-    return list_.size();
-}
-
-text_placements_ptr text_placements_list::from_xml(xml_node const &xml, fontset_map const & fontsets)
-{
-    using boost::property_tree::ptree;
-    text_placements_list *list = new text_placements_list;
-    text_placements_ptr ptr = text_placements_ptr(list);
-    list->defaults.from_xml(xml, fontsets);
-    xml_node::const_iterator itr = xml.begin();
-    xml_node::const_iterator end = xml.end();
-    for( ;itr != end; ++itr)
-    {
-        if (itr->is_text() || !itr->is("Placement")) continue;
-        text_symbolizer_properties &p = list->add();
-        p.from_xml(*itr, fontsets);
-//TODO:        if (strict_ &&
-//                !p.format.fontset.size())
-//            ensure_font_face(p.format.face_name);
-    }
-    return ptr;
-}
-
-} //ns mapnik
-
diff --git a/src/text_placements/registry.cpp b/src/text_placements/registry.cpp
deleted file mode 100644
index cf12b62..0000000
--- a/src/text_placements/registry.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-// mapnik
-#include <mapnik/text_placements/registry.hpp>
-#include <mapnik/text_placements/simple.hpp>
-#include <mapnik/text_placements/list.hpp>
-#include <mapnik/text_placements/dummy.hpp>
-#include <mapnik/config_error.hpp>
-
-namespace mapnik
-{
-namespace placements
-{
-
-registry::registry()
-{
-    register_name("simple", &text_placements_simple::from_xml);
-    register_name("list", &text_placements_list::from_xml);
-    register_name("dummy", &text_placements_list::from_xml);
-}
-
-void registry::register_name(std::string name, from_xml_function_ptr ptr, bool overwrite)
-{
-    if (overwrite) {
-        map_[name] = ptr;
-    } else {
-        map_.insert(make_pair(name, ptr));
-    }
-}
-
-text_placements_ptr registry::from_xml(std::string name, xml_node const& xml, fontset_map const& fontsets)
-{
-    std::map<std::string, from_xml_function_ptr>::const_iterator itr = map_.find(name);
-    if (itr == map_.end())  throw config_error("Unknown placement-type '" + name + "'", xml);
-    return itr->second(xml, fontsets);
-}
-} //ns formatting
-} //ns mapnik
diff --git a/src/text_placements/simple.cpp b/src/text_placements/simple.cpp
deleted file mode 100644
index ec5f812..0000000
--- a/src/text_placements/simple.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/text_placements/simple.hpp>
-#include <mapnik/ptree_helpers.hpp>
-#include <mapnik/xml_node.hpp>
-
-// boost
-#include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_stl.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/property_tree/ptree.hpp>
-
-namespace mapnik
-{
-
-namespace qi = boost::spirit::qi;
-namespace phoenix = boost::phoenix;
-using phoenix::push_back;
-using boost::spirit::ascii::space;
-using phoenix::ref;
-using qi::_1;
-
-bool text_placement_info_simple::next()
-{
-    while (1) {
-        if (state > 0)
-        {
-            if (state > parent_->text_sizes_.size()) return false;
-            properties.format.text_size = parent_->text_sizes_[state-1];
-        }
-        if (!next_position_only()) {
-            state++;
-            position_state = 0;
-        } else {
-            break;
-        }
-    }
-    return true;
-}
-
-bool text_placement_info_simple::next_position_only()
-{
-    const position &pdisp = parent_->defaults.displacement;
-    position &displacement = properties.displacement;
-    if (position_state >= parent_->direction_.size()) return false;
-    directions_t dir = parent_->direction_[position_state];
-    switch (dir) {
-    case EXACT_POSITION:
-        displacement = pdisp;
-        break;
-    case NORTH:
-        displacement = std::make_pair(0, -abs(pdisp.second));
-        break;
-    case EAST:
-        displacement = std::make_pair(abs(pdisp.first), 0);
-        break;
-    case SOUTH:
-        displacement = std::make_pair(0, abs(pdisp.second));
-        break;
-    case WEST:
-        displacement = std::make_pair(-abs(pdisp.first), 0);
-        break;
-    case NORTHEAST:
-        displacement = std::make_pair(abs(pdisp.first), -abs(pdisp.second));
-        break;
-    case SOUTHEAST:
-        displacement = std::make_pair(abs(pdisp.first), abs(pdisp.second));
-        break;
-    case NORTHWEST:
-        displacement = std::make_pair(-abs(pdisp.first), -abs(pdisp.second));
-        break;
-    case SOUTHWEST:
-        displacement = std::make_pair(-abs(pdisp.first), abs(pdisp.second));
-        break;
-    default:
-        MAPNIK_LOG_WARN(text_placements) << "Unknown placement";
-    }
-    position_state++;
-    return true;
-}
-
-text_placement_info_ptr text_placements_simple::get_placement_info(
-    double scale_factor) const
-{
-    return boost::make_shared<text_placement_info_simple>(this, scale_factor);
-}
-
-/** Position string: [POS][SIZE]
- * [POS] is any combination of
- * N, E, S, W, NE, SE, NW, SW, X (exact position) (separated by commas)
- * [SIZE] is a list of font sizes, separated by commas. The first font size
- * is always the one given in the TextSymbolizer's parameters.
- * First all directions are tried, then font size is reduced
- * and all directions are tried again. The process ends when a placement is
- * found or the last fontsize is tried without success.
- * Example: N,S,15,10,8 (tries placement above, then below and if
- *    that fails it tries the additional font sizes 15, 10 and 8.
- */
-void text_placements_simple::set_positions(std::string positions)
-{
-    positions_ = positions;
-    struct direction_name_ : qi::symbols<char, directions_t>
-    {
-        direction_name_()
-        {
-            add
-                ("N" , NORTH)
-                ("E" , EAST)
-                ("S" , SOUTH)
-                ("W" , WEST)
-                ("NE", NORTHEAST)
-                ("SE", SOUTHEAST)
-                ("NW", NORTHWEST)
-                ("SW", SOUTHWEST)
-                ("X" , EXACT_POSITION)
-                ;
-        }
-
-    } direction_name;
-
-    std::string::iterator first = positions.begin(),  last = positions.end();
-    qi::phrase_parse(first, last,
-                     (direction_name[push_back(phoenix::ref(direction_), _1)] % ',') >> *(',' >> qi::float_[push_back(phoenix::ref(text_sizes_), _1)]),
-                     space
-        );
-    if (first != last)
-    {
-        MAPNIK_LOG_WARN(text_placements) << "Could not parse text_placement_simple placement string ('" << positions << "')";
-    }
-    if (direction_.size() == 0)
-    {
-        MAPNIK_LOG_WARN(text_placements) << "text_placements_simple with no valid placements! ('"<< positions<<"')";
-    }
-}
-
-text_placements_simple::text_placements_simple()
-{
-    set_positions("X");
-}
-
-text_placements_simple::text_placements_simple(std::string positions)
-{
-    set_positions(positions);
-}
-
-std::string text_placements_simple::get_positions()
-{
-    return positions_; //TODO: Build string from data in direction_ and text_sizes_
-}
-
-text_placements_ptr text_placements_simple::from_xml(xml_node const &xml, fontset_map const & fontsets)
-{
-    text_placements_ptr ptr = boost::make_shared<text_placements_simple>(
-        xml.get_attr<std::string>("placements", "X"));
-    ptr->defaults.from_xml(xml, fontsets);
-    return ptr;
-}
-
-} //ns mapnik
diff --git a/src/text_properties.cpp b/src/text_properties.cpp
deleted file mode 100644
index a695e17..0000000
--- a/src/text_properties.cpp
+++ /dev/null
@@ -1,365 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-// mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/feature.hpp>
-#include <mapnik/text_properties.hpp>
-#include <mapnik/processed_text.hpp>
-#include <mapnik/ptree_helpers.hpp>
-#include <mapnik/expression_string.hpp>
-#include <mapnik/formatting/text.hpp>
-#include <mapnik/xml_node.hpp>
-#include <mapnik/config_error.hpp>
-
-// boost
-#include <boost/make_shared.hpp>
-#include <boost/property_tree/ptree.hpp>
-
-namespace mapnik
-{
-using boost::optional;
-
-text_symbolizer_properties::text_symbolizer_properties() :
-    orientation(),
-    displacement(0,0),
-    label_placement(POINT_PLACEMENT),
-    halign(H_AUTO),
-    jalign(J_AUTO),
-    valign(V_AUTO),
-    label_spacing(0),
-    label_position_tolerance(0),
-    avoid_edges(false),
-    minimum_distance(0.0),
-    minimum_padding(0.0),
-    minimum_path_length(0.0),
-    max_char_angle_delta(22.5 * M_PI/180.0),
-    force_odd_labels(false),
-    allow_overlap(false),
-    largest_bbox_only(true),
-    text_ratio(0),
-    wrap_width(0),
-    format(),
-    tree_()
-{
-
-}
-
-void text_symbolizer_properties::process(processed_text &output, feature_impl const& feature) const
-{
-    output.clear();
-    if (tree_) {
-        tree_->apply(format, feature, output);
-    } else {
-        MAPNIK_LOG_WARN(text_properties) << "text_symbolizer_properties can't produce text: No formatting tree!";
-    }
-}
-
-void text_symbolizer_properties::set_format_tree(formatting::node_ptr tree)
-{
-    tree_ = tree;
-}
-
-formatting::node_ptr text_symbolizer_properties::format_tree() const
-{
-    return tree_;
-}
-
-void text_symbolizer_properties::from_xml(xml_node const &sym, fontset_map const & fontsets)
-{
-    optional<label_placement_e> placement_ = sym.get_opt_attr<label_placement_e>("placement");
-    if (placement_) label_placement = *placement_;
-    optional<vertical_alignment_e> valign_ = sym.get_opt_attr<vertical_alignment_e>("vertical-alignment");
-    if (valign_) valign = *valign_;
-    optional<double> text_ratio_ = sym.get_opt_attr<double>("text-ratio");
-    if (text_ratio_) text_ratio = *text_ratio_;
-    optional<double> wrap_width_ = sym.get_opt_attr<double>("wrap-width");
-    if (wrap_width_) wrap_width = *wrap_width_;
-    optional<unsigned> label_position_tolerance_ = sym.get_opt_attr<unsigned>("label-position-tolerance");
-    if (label_position_tolerance_) label_position_tolerance = *label_position_tolerance_;
-    optional<double> spacing_ = sym.get_opt_attr<double>("spacing");
-    if (spacing_) label_spacing = *spacing_;
-    else {
-        // https://github.com/mapnik/mapnik/issues/1427
-        spacing_ = sym.get_opt_attr<double>("label-spacing");
-        if (spacing_) label_spacing = *spacing_;
-    }
-    optional<double> minimum_distance_ = sym.get_opt_attr<double>("minimum-distance");
-    if (minimum_distance_) minimum_distance = *minimum_distance_;
-    optional<double> min_padding_ = sym.get_opt_attr<double>("minimum-padding");
-    if (min_padding_) minimum_padding = *min_padding_;
-    optional<double> min_path_length_ = sym.get_opt_attr<double>("minimum-path-length");
-    if (min_path_length_) minimum_path_length = *min_path_length_;
-    optional<boolean> avoid_edges_ = sym.get_opt_attr<boolean>("avoid-edges");
-    if (avoid_edges_) avoid_edges = *avoid_edges_;
-    optional<boolean> allow_overlap_ = sym.get_opt_attr<boolean>("allow-overlap");
-    if (allow_overlap_) allow_overlap = *allow_overlap_;
-    optional<boolean> largest_bbox_only_ = sym.get_opt_attr<boolean>("largest-bbox-only");
-    if (largest_bbox_only_) largest_bbox_only = *largest_bbox_only_;
-    optional<horizontal_alignment_e> halign_ = sym.get_opt_attr<horizontal_alignment_e>("horizontal-alignment");
-    if (halign_) halign = *halign_;
-    optional<justify_alignment_e> jalign_ = sym.get_opt_attr<justify_alignment_e>("justify-alignment");
-    if (jalign_) jalign = *jalign_;
-    optional<expression_ptr> orientation_ = sym.get_opt_attr<expression_ptr>("orientation");
-    if (orientation_) orientation = *orientation_;
-    optional<double> dx = sym.get_opt_attr<double>("dx");
-    if (dx) displacement.first = *dx;
-    optional<double> dy = sym.get_opt_attr<double>("dy");
-    if (dy) displacement.second = *dy;
-    optional<double> max_char_angle_delta_ = sym.get_opt_attr<double>("max-char-angle-delta");
-    if (max_char_angle_delta_) max_char_angle_delta=(*max_char_angle_delta_)*(M_PI/180);
-
-    optional<expression_ptr> name_ = sym.get_opt_attr<expression_ptr>("name");
-    if (name_)
-    {
-        MAPNIK_LOG_WARN(text_placements) << "Using 'name' in TextSymbolizer/ShieldSymbolizer is deprecated!";
-
-        set_old_style_expression(*name_);
-    }
-
-    format.from_xml(sym, fontsets);
-    formatting::node_ptr n(formatting::node::from_xml(sym));
-    if (n) set_format_tree(n);
-}
-
-void text_symbolizer_properties::to_xml(boost::property_tree::ptree &node,
-                                        bool explicit_defaults,
-                                        text_symbolizer_properties const& dfl) const
-{
-    if (orientation)
-    {
-        std::string const& orientationstr = to_expression_string(*orientation);
-        if (!dfl.orientation || orientationstr != to_expression_string(*(dfl.orientation)) || explicit_defaults) {
-            set_attr(node, "orientation", orientationstr);
-        }
-    }
-
-    if (displacement.first != dfl.displacement.first || explicit_defaults)
-    {
-        set_attr(node, "dx", displacement.first);
-    }
-    if (displacement.second != dfl.displacement.second || explicit_defaults)
-    {
-        set_attr(node, "dy", displacement.second);
-    }
-    if (label_placement != dfl.label_placement || explicit_defaults)
-    {
-        set_attr(node, "placement", label_placement);
-    }
-    if (valign != dfl.valign || explicit_defaults)
-    {
-        set_attr(node, "vertical-alignment", valign);
-    }
-    if (text_ratio != dfl.text_ratio || explicit_defaults)
-    {
-        set_attr(node, "text-ratio", text_ratio);
-    }
-    if (wrap_width != dfl.wrap_width || explicit_defaults)
-    {
-        set_attr(node, "wrap-width", wrap_width);
-    }
-    if (label_position_tolerance != dfl.label_position_tolerance || explicit_defaults)
-    {
-        set_attr(node, "label-position-tolerance", label_position_tolerance);
-    }
-    if (label_spacing != dfl.label_spacing || explicit_defaults)
-    {
-        set_attr(node, "spacing", label_spacing);
-    }
-    if (minimum_distance != dfl.minimum_distance || explicit_defaults)
-    {
-        set_attr(node, "minimum-distance", minimum_distance);
-    }
-    if (minimum_padding != dfl.minimum_padding || explicit_defaults)
-    {
-        set_attr(node, "minimum-padding", minimum_padding);
-    }
-    if (minimum_path_length != dfl.minimum_path_length || explicit_defaults)
-    {
-        set_attr(node, "minimum-path-length", minimum_path_length);
-    }
-    if (allow_overlap != dfl.allow_overlap || explicit_defaults)
-    {
-        set_attr(node, "allow-overlap", allow_overlap);
-    }
-    if (avoid_edges != dfl.avoid_edges || explicit_defaults)
-    {
-        set_attr(node, "avoid-edges", avoid_edges);
-    }
-    if (largest_bbox_only != dfl.largest_bbox_only|| explicit_defaults)
-    {
-        set_attr(node, "largest-bbox_only", largest_bbox_only);
-    }
-    if (max_char_angle_delta != dfl.max_char_angle_delta || explicit_defaults)
-    {
-        set_attr(node, "max-char-angle-delta", max_char_angle_delta);
-    }
-    if (halign != dfl.halign || explicit_defaults)
-    {
-        set_attr(node, "horizontal-alignment", halign);
-    }
-    if (jalign != dfl.jalign || explicit_defaults)
-    {
-        set_attr(node, "justify-alignment", jalign);
-    }
-    if (valign != dfl.valign || explicit_defaults)
-    {
-        set_attr(node, "vertical-alignment", valign);
-    }
-    format.to_xml(node, explicit_defaults, dfl.format);
-    if (tree_) tree_->to_xml(node);
-}
-
-
-void text_symbolizer_properties::add_expressions(expression_set &output) const
-{
-    output.insert(orientation);
-    if (tree_) tree_->add_expressions(output);
-}
-
-void text_symbolizer_properties::set_old_style_expression(expression_ptr expr)
-{
-    tree_ = boost::make_shared<formatting::text_node>(expr);
-}
-
-char_properties::char_properties() :
-    face_name(),
-    fontset(),
-    text_size(10.0),
-    character_spacing(0),
-    line_spacing(0),
-    text_opacity(1.0),
-    wrap_before(false),
-    wrap_char(' '),
-    text_transform(NONE),
-    fill(color(0,0,0)),
-    halo_fill(color(255,255,255)),
-    halo_radius(0)
-{
-
-}
-
-void char_properties::from_xml(xml_node const& sym, fontset_map const& fontsets)
-{
-    optional<double> text_size_ = sym.get_opt_attr<double>("size");
-    if (text_size_) text_size = *text_size_;
-    optional<double> character_spacing_ = sym.get_opt_attr<double>("character-spacing");
-    if (character_spacing_) character_spacing = *character_spacing_;
-    optional<color> fill_ = sym.get_opt_attr<color>("fill");
-    if (fill_) fill = *fill_;
-    optional<color> halo_fill_ = sym.get_opt_attr<color>("halo-fill");
-    if (halo_fill_) halo_fill = *halo_fill_;
-    optional<double> halo_radius_ = sym.get_opt_attr<double>("halo-radius");
-    if (halo_radius_) halo_radius = *halo_radius_;
-    optional<boolean> wrap_before_ = sym.get_opt_attr<boolean>("wrap-before");
-    if (wrap_before_) wrap_before = *wrap_before_;
-    optional<text_transform_e> tconvert_ = sym.get_opt_attr<text_transform_e>("text-transform");
-    if (tconvert_) text_transform = *tconvert_;
-    optional<double> line_spacing_ = sym.get_opt_attr<double>("line-spacing");
-    if (line_spacing_) line_spacing = *line_spacing_;
-    optional<double> opacity_ = sym.get_opt_attr<double>("opacity");
-    if (opacity_) text_opacity = *opacity_;
-    optional<std::string> wrap_char_ = sym.get_opt_attr<std::string>("wrap-character");
-    if (wrap_char_ && (*wrap_char_).size() > 0) wrap_char = ((*wrap_char_)[0]);
-    optional<std::string> face_name_ = sym.get_opt_attr<std::string>("face-name");
-    if (face_name_)
-    {
-        face_name = *face_name_;
-    }
-    optional<std::string> fontset_name_ = sym.get_opt_attr<std::string>("fontset-name");
-    if (fontset_name_) {
-        std::map<std::string,font_set>::const_iterator itr = fontsets.find(*fontset_name_);
-        if (itr != fontsets.end())
-        {
-            fontset = itr->second;
-        }
-        else
-        {
-            throw config_error("Unable to find any fontset named '" + *fontset_name_ + "'", sym);
-        }
-    }
-    if (!face_name.empty() && fontset)
-    {
-        throw config_error("Can't have both face-name and fontset-name", sym);
-    }
-    if (face_name.empty() && !fontset)
-    {
-        throw config_error("Must have face-name or fontset-name", sym);
-    }
-}
-
-void char_properties::to_xml(boost::property_tree::ptree &node, bool explicit_defaults, char_properties const &dfl) const
-{
-    if (fontset)
-    {
-        set_attr(node, "fontset-name", fontset->get_name());
-    }
-
-    if (face_name != dfl.face_name || explicit_defaults)
-    {
-        set_attr(node, "face-name", face_name);
-    }
-
-    if (text_size != dfl.text_size || explicit_defaults)
-    {
-        set_attr(node, "size", text_size);
-    }
-
-    if (fill != dfl.fill || explicit_defaults)
-    {
-        set_attr(node, "fill", fill);
-    }
-    if (halo_radius != dfl.halo_radius || explicit_defaults)
-    {
-        set_attr(node, "halo-radius", halo_radius);
-    }
-    if (halo_fill != dfl.halo_fill || explicit_defaults)
-    {
-        set_attr(node, "halo-fill", halo_fill);
-    }
-    if (wrap_before != dfl.wrap_before || explicit_defaults)
-    {
-        set_attr(node, "wrap-before", wrap_before);
-    }
-    if (wrap_char != dfl.wrap_char || explicit_defaults)
-    {
-        set_attr(node, "wrap-character", std::string(1, wrap_char));
-    }
-    if (text_transform != dfl.text_transform || explicit_defaults)
-    {
-        set_attr(node, "text-transform", text_transform);
-    }
-    if (line_spacing != dfl.line_spacing || explicit_defaults)
-    {
-        set_attr(node, "line-spacing", line_spacing);
-    }
-    if (character_spacing != dfl.character_spacing || explicit_defaults)
-    {
-        set_attr(node, "character-spacing", character_spacing);
-    }
-    // for shield_symbolizer this is later overridden
-    if (text_opacity != dfl.text_opacity || explicit_defaults)
-    {
-        set_attr(node, "opacity", text_opacity);
-    }
-}
-
-} //ns mapnik
diff --git a/src/text_symbolizer.cpp b/src/text_symbolizer.cpp
deleted file mode 100644
index 61ea9f6..0000000
--- a/src/text_symbolizer.cpp
+++ /dev/null
@@ -1,499 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-//mapnik
-#include <mapnik/debug.hpp>
-#include <mapnik/text_symbolizer.hpp>
-#include <mapnik/enumeration.hpp>
-#include <mapnik/formatting/text.hpp>
-
-
-// boost
-#include <boost/scoped_ptr.hpp>
-
-
-namespace mapnik
-{
-
-static const char * halo_rasterizer_strings[] = {
-    "full",
-    "fast",
-    ""
-};
-
-IMPLEMENT_ENUM( halo_rasterizer_e, halo_rasterizer_strings )
-
-
-static const char * label_placement_strings[] = {
-    "point",
-    "line",
-    "vertex",
-    "interior",
-    ""
-};
-
-
-IMPLEMENT_ENUM( label_placement_e, label_placement_strings )
-
-static const char * vertical_alignment_strings[] = {
-    "top",
-    "middle",
-    "bottom",
-    "auto",
-    ""
-};
-
-
-IMPLEMENT_ENUM( vertical_alignment_e, vertical_alignment_strings )
-
-static const char * horizontal_alignment_strings[] = {
-    "left",
-    "middle",
-    "right",
-    "auto",
-    ""
-};
-
-
-IMPLEMENT_ENUM( horizontal_alignment_e, horizontal_alignment_strings )
-
-static const char * justify_alignment_strings[] = {
-    "left",
-    "center", // not 'middle' in order to match CSS
-    "right",
-    "auto",
-    ""
-};
-
-
-IMPLEMENT_ENUM( justify_alignment_e, justify_alignment_strings )
-
-static const char * text_transform_strings[] = {
-    "none",
-    "uppercase",
-    "lowercase",
-    "capitalize",
-    ""
-};
-
-
-IMPLEMENT_ENUM( text_transform_e, text_transform_strings )
-
-
-text_symbolizer::text_symbolizer(text_placements_ptr placements)
-: symbolizer_base(),
-    placement_options_(placements),
-    halo_rasterizer_(HALO_RASTERIZER_FULL)
-{
-
-}
-
-text_symbolizer::text_symbolizer(expression_ptr name, std::string const& face_name,
-                                 float size, color const& fill,
-                                 text_placements_ptr placements)
-    : symbolizer_base(),
-      placement_options_(placements),
-      halo_rasterizer_(HALO_RASTERIZER_FULL)
-{
-    set_name(name);
-    set_face_name(face_name);
-    set_text_size(size);
-    set_fill(fill);
-}
-
-text_symbolizer::text_symbolizer(expression_ptr name, float size, color const& fill,
-                                 text_placements_ptr placements)
-    : symbolizer_base(),
-      placement_options_(placements),
-      halo_rasterizer_(HALO_RASTERIZER_FULL)
-{
-    set_name(name);
-    set_text_size(size);
-    set_fill(fill);
-}
-
-text_symbolizer::text_symbolizer(text_symbolizer const& rhs)
-    : symbolizer_base(rhs),
-      placement_options_(rhs.placement_options_),
-      halo_rasterizer_(rhs.halo_rasterizer_)
-      /*TODO: Copy options! */
-{
-}
-
-text_symbolizer& text_symbolizer::operator=(text_symbolizer const& other)
-{
-    if (this == &other)
-        return *this;
-    placement_options_ = other.placement_options_; /*TODO: Copy options? */
-    halo_rasterizer_ = other.halo_rasterizer_;
-    return *this;
-}
-
-expression_ptr text_symbolizer::get_name() const
-{
-    formatting::text_node *node = dynamic_cast<formatting::text_node *>(placement_options_->defaults.format_tree().get());
-    if (!node) return expression_ptr();
-    return node->get_text();
-}
-
-void text_symbolizer::set_name(expression_ptr name)
-{
-    placement_options_->defaults.set_old_style_expression(name);
-}
-
-expression_ptr text_symbolizer::get_orientation() const
-{
-    return placement_options_->defaults.orientation;
-}
-
-void text_symbolizer::set_orientation(expression_ptr orientation)
-{
-    placement_options_->defaults.orientation = orientation;
-}
-
-std::string const&  text_symbolizer::get_face_name() const
-{
-    return placement_options_->defaults.format.face_name;
-}
-
-void text_symbolizer::set_face_name(std::string face_name)
-{
-    placement_options_->defaults.format.face_name = face_name;
-}
-
-void text_symbolizer::set_fontset(font_set const& fontset)
-{
-    placement_options_->defaults.format.fontset = fontset;
-}
-
-boost::optional<font_set> const& text_symbolizer::get_fontset() const
-{
-    return placement_options_->defaults.format.fontset;
-}
-
-double text_symbolizer::get_text_ratio() const
-{
-    return placement_options_->defaults.text_ratio;
-}
-
-void  text_symbolizer::set_text_ratio(double ratio)
-{
-    placement_options_->defaults.text_ratio = ratio;
-}
-
-double text_symbolizer::get_wrap_width() const
-{
-    return placement_options_->defaults.wrap_width;
-}
-
-void text_symbolizer::set_wrap_width(double width)
-{
-    placement_options_->defaults.wrap_width = width;
-}
-
-bool  text_symbolizer::get_wrap_before() const
-{
-    return placement_options_->defaults.format.wrap_before;
-}
-
-void  text_symbolizer::set_wrap_before(bool wrap_before)
-{
-    placement_options_->defaults.format.wrap_before = wrap_before;
-}
-
-unsigned char text_symbolizer::get_wrap_char() const
-{
-    return placement_options_->defaults.format.wrap_char;
-}
-
-std::string text_symbolizer::get_wrap_char_string() const
-{
-    return std::string(1, placement_options_->defaults.format.wrap_char);
-}
-
-void  text_symbolizer::set_wrap_char(unsigned char character)
-{
-    placement_options_->defaults.format.wrap_char = character;
-}
-
-void  text_symbolizer::set_wrap_char_from_string(std::string const& character)
-{
-    placement_options_->defaults.format.wrap_char = (character)[0];
-}
-
-text_transform_e  text_symbolizer::get_text_transform() const
-{
-    return placement_options_->defaults.format.text_transform;
-}
-
-void  text_symbolizer::set_text_transform(text_transform_e convert)
-{
-    placement_options_->defaults.format.text_transform = convert;
-}
-
-double text_symbolizer::get_line_spacing() const
-{
-    return placement_options_->defaults.format.line_spacing;
-}
-
-void  text_symbolizer::set_line_spacing(double spacing)
-{
-    placement_options_->defaults.format.line_spacing = spacing;
-}
-
-double text_symbolizer::get_character_spacing() const
-{
-    return placement_options_->defaults.format.character_spacing;
-}
-
-void  text_symbolizer::set_character_spacing(double spacing)
-{
-    placement_options_->defaults.format.character_spacing = spacing;
-}
-
-double text_symbolizer::get_label_spacing() const
-{
-    return placement_options_->defaults.label_spacing;
-}
-
-void  text_symbolizer::set_label_spacing(double spacing)
-{
-    placement_options_->defaults.label_spacing = spacing;
-}
-
-unsigned  text_symbolizer::get_label_position_tolerance() const
-{
-    return placement_options_->defaults.label_position_tolerance;
-}
-
-void  text_symbolizer::set_label_position_tolerance(unsigned tolerance)
-{
-    placement_options_->defaults.label_position_tolerance = tolerance;
-}
-
-bool  text_symbolizer::get_force_odd_labels() const
-{
-    return placement_options_->defaults.force_odd_labels;
-}
-
-void  text_symbolizer::set_force_odd_labels(bool force)
-{
-    placement_options_->defaults.force_odd_labels = force;
-}
-
-double text_symbolizer::get_max_char_angle_delta() const
-{
-    return placement_options_->defaults.max_char_angle_delta;
-}
-
-void text_symbolizer::set_max_char_angle_delta(double angle)
-{
-    placement_options_->defaults.max_char_angle_delta = angle;
-}
-
-void text_symbolizer::set_text_size(double size)
-{
-    placement_options_->defaults.format.text_size = size;
-}
-
-double text_symbolizer::get_text_size() const
-{
-    return placement_options_->defaults.format.text_size;
-}
-
-void text_symbolizer::set_fill(color const& fill)
-{
-    placement_options_->defaults.format.fill = fill;
-}
-
-color const&  text_symbolizer::get_fill() const
-{
-    return placement_options_->defaults.format.fill;
-}
-
-void  text_symbolizer::set_halo_fill(color const& fill)
-{
-    placement_options_->defaults.format.halo_fill = fill;
-}
-
-color const&  text_symbolizer::get_halo_fill() const
-{
-    return placement_options_->defaults.format.halo_fill;
-}
-
-void  text_symbolizer::set_halo_radius(double radius)
-{
-    placement_options_->defaults.format.halo_radius = radius;
-}
-
-double text_symbolizer::get_halo_radius() const
-{
-    return placement_options_->defaults.format.halo_radius;
-}
-
-void text_symbolizer::set_halo_rasterizer(halo_rasterizer_e rasterizer_p)
-{
-    halo_rasterizer_ = rasterizer_p;
-}
-
-halo_rasterizer_e text_symbolizer::get_halo_rasterizer() const
-{
-    return halo_rasterizer_;
-}
-
-void  text_symbolizer::set_label_placement(label_placement_e label_p)
-{
-    placement_options_->defaults.label_placement = label_p;
-}
-
-label_placement_e  text_symbolizer::get_label_placement() const
-{
-    return placement_options_->defaults.label_placement;
-}
-
-void  text_symbolizer::set_displacement(double x, double y)
-{
-    placement_options_->defaults.displacement = std::make_pair(x,y);
-}
-
-void text_symbolizer::set_displacement(position const& p)
-{
-    placement_options_->defaults.displacement = p;
-}
-
-position const& text_symbolizer::get_displacement() const
-{
-    return placement_options_->defaults.displacement;
-}
-
-bool text_symbolizer::get_avoid_edges() const
-{
-    return placement_options_->defaults.avoid_edges;
-}
-
-void text_symbolizer::set_avoid_edges(bool avoid)
-{
-    placement_options_->defaults.avoid_edges = avoid;
-}
-
-bool text_symbolizer::largest_bbox_only() const
-{
-    return placement_options_->defaults.largest_bbox_only;
-}
-
-void text_symbolizer::set_largest_bbox_only(bool v)
-{
-    placement_options_->defaults.largest_bbox_only = v;
-}
-
-double text_symbolizer::get_minimum_distance() const
-{
-    return placement_options_->defaults.minimum_distance;
-}
-
-void text_symbolizer::set_minimum_distance(double distance)
-{
-    placement_options_->defaults.minimum_distance = distance;
-}
-
-double text_symbolizer::get_minimum_padding() const
-{
-    return placement_options_->defaults.minimum_padding;
-}
-
-void text_symbolizer::set_minimum_padding(double distance)
-{
-    placement_options_->defaults.minimum_padding = distance;
-}
-
-double text_symbolizer::get_minimum_path_length() const
-{
-    return placement_options_->defaults.minimum_path_length;
-}
-
-void text_symbolizer::set_minimum_path_length(double size)
-{
-    placement_options_->defaults.minimum_path_length = size;
-}
-
-void text_symbolizer::set_allow_overlap(bool overlap)
-{
-    placement_options_->defaults.allow_overlap = overlap;
-}
-
-bool text_symbolizer::get_allow_overlap() const
-{
-    return placement_options_->defaults.allow_overlap;
-}
-
-void text_symbolizer::set_text_opacity(double text_opacity)
-{
-    placement_options_->defaults.format.text_opacity = text_opacity;
-}
-
-double text_symbolizer::get_text_opacity() const
-{
-    return placement_options_->defaults.format.text_opacity;
-}
-
-void text_symbolizer::set_vertical_alignment(vertical_alignment_e valign)
-{
-    placement_options_->defaults.valign = valign;
-}
-
-vertical_alignment_e text_symbolizer::get_vertical_alignment() const
-{
-    return placement_options_->defaults.valign;
-}
-
-void text_symbolizer::set_horizontal_alignment(horizontal_alignment_e halign)
-{
-    placement_options_->defaults.halign = halign;
-}
-
-horizontal_alignment_e text_symbolizer::get_horizontal_alignment() const
-{
-    return placement_options_->defaults.halign;
-}
-
-void text_symbolizer::set_justify_alignment(justify_alignment_e jalign)
-{
-    placement_options_->defaults.jalign = jalign;
-}
-
-justify_alignment_e text_symbolizer::get_justify_alignment() const
-{
-    return placement_options_->defaults.jalign;
-}
-
-text_placements_ptr text_symbolizer::get_placement_options() const
-{
-    return placement_options_;
-}
-
-void text_symbolizer::set_placement_options(text_placements_ptr placement_options)
-{
-    placement_options_ = placement_options;
-}
-
-
-}
diff --git a/src/tiff_reader.cpp b/src/tiff_reader.cpp
index 4540800..bb73712 100644
--- a/src/tiff_reader.cpp
+++ b/src/tiff_reader.cpp
@@ -24,23 +24,23 @@
 #include <mapnik/debug.hpp>
 #include <mapnik/image_reader.hpp>
 
-// boost
-#include <boost/shared_ptr.hpp>
-
-// iostreams
-#include <boost/iostreams/device/file.hpp>
-#include <boost/iostreams/device/array.hpp>
-#include <boost/iostreams/stream.hpp>
-
 extern "C"
 {
 #include <tiffio.h>
 }
 
-namespace mapnik
-{
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/stream.hpp>
+#pragma GCC diagnostic pop
+
+// stl
+#include <memory>
 
-namespace impl {
+namespace mapnik { namespace impl {
 
 static toff_t tiff_seek_proc(thandle_t fd, toff_t off, int whence)
 {
@@ -61,7 +61,7 @@ static toff_t tiff_seek_proc(thandle_t fd, toff_t off, int whence)
     return static_cast<toff_t>(in->tellg());
 }
 
-static int tiff_close_proc(thandle_t fd)
+static int tiff_close_proc(thandle_t)
 {
     return 0;
 }
@@ -86,16 +86,16 @@ static tsize_t tiff_read_proc(thandle_t fd, tdata_t buf, tsize_t size)
     return static_cast<tsize_t>(in->gcount());
 }
 
-static tsize_t tiff_write_proc(thandle_t fd, tdata_t buf, tsize_t size)
+static tsize_t tiff_write_proc(thandle_t , tdata_t , tsize_t)
 {
     return 0;
 }
 
-static void tiff_unmap_proc(thandle_t fd, tdata_t base, toff_t size)
+static void tiff_unmap_proc(thandle_t, tdata_t, toff_t)
 {
 }
 
-static int tiff_map_proc(thandle_t fd, tdata_t* pbase, toff_t* psize)
+static int tiff_map_proc(thandle_t, tdata_t* , toff_t*)
 {
     return 0;
 }
@@ -105,9 +105,9 @@ static int tiff_map_proc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 template <typename T>
 class tiff_reader : public image_reader
 {
-    typedef boost::shared_ptr<TIFF> tiff_ptr;
-    typedef T source_type;
-    typedef boost::iostreams::stream<source_type> input_stream;
+    using tiff_ptr = std::shared_ptr<TIFF>;
+    using source_type = T;
+    using input_stream = boost::iostreams::stream<source_type>;
 
     struct tiff_closer
     {
@@ -131,6 +131,7 @@ private:
     int tile_height_;
     tiff_ptr tif_;
     bool premultiplied_alpha_;
+    bool has_alpha_;
 public:
     enum TiffType {
         generic=1,
@@ -142,6 +143,7 @@ public:
     virtual ~tiff_reader();
     unsigned width() const;
     unsigned height() const;
+    inline bool has_alpha() const { return has_alpha_; }
     bool premultiplied_alpha() const;
     void read(unsigned x,unsigned y,image_data_32& image);
 private:
@@ -152,7 +154,6 @@ private:
     void read_stripped(unsigned x,unsigned y,image_data_32& image);
     void read_tiled(unsigned x,unsigned y,image_data_32& image);
     TIFF* open(std::istream & input);
-    static void on_error(const char* /*module*/, const char* fmt, va_list argptr);
 };
 
 namespace
@@ -183,7 +184,8 @@ tiff_reader<T>::tiff_reader(std::string const& file_name)
       rows_per_strip_(0),
       tile_width_(0),
       tile_height_(0),
-      premultiplied_alpha_(false)
+      premultiplied_alpha_(false),
+      has_alpha_(false)
 {
     if (!stream_) throw image_reader_exception("TIFF reader: cannot open file "+ file_name);
     init();
@@ -199,7 +201,8 @@ tiff_reader<T>::tiff_reader(char const* data, std::size_t size)
       rows_per_strip_(0),
       tile_width_(0),
       tile_height_(0),
-      premultiplied_alpha_(false)
+      premultiplied_alpha_(false),
+      has_alpha_(false)
 {
     if (!stream_) throw image_reader_exception("TIFF reader: cannot open image stream ");
     stream_.seekg(0, std::ios::beg);
@@ -207,28 +210,16 @@ tiff_reader<T>::tiff_reader(char const* data, std::size_t size)
 }
 
 template <typename T>
-void tiff_reader<T>::on_error(const char* /*module*/, const char* fmt, va_list argptr)
-{
-  char msg[10240];
-  vsprintf(msg, fmt, argptr);
-  throw image_reader_exception(msg);
-}
-
-template <typename T>
 void tiff_reader<T>::init()
 {
+    // avoid calling TIFFs global structures
     TIFFSetWarningHandler(0);
-    // Note - we intentially set the error handling to null
-    // when opening the image for the first time to avoid
-    // leaking in TiffOpen: https://github.com/mapnik/mapnik/issues/1783
     TIFFSetErrorHandler(0);
 
     TIFF* tif = open(stream_);
 
     if (!tif) throw image_reader_exception("Can't open tiff file");
 
-    TIFFSetErrorHandler(on_error);
-
     char msg[1024];
 
     if (TIFFRGBAImageOK(tif,msg))
@@ -246,14 +237,17 @@ void tiff_reader<T>::init()
             read_method_=stripped;
         }
         //TIFFTAG_EXTRASAMPLES
-        uint16 extrasamples;
-        uint16* sampleinfo;
-        TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
-                              &extrasamples, &sampleinfo);
-        if (extrasamples == 1 &&
-            sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA)
+        uint16 extrasamples = 0;
+        uint16* sampleinfo = nullptr;
+        if (TIFFGetField(tif, TIFFTAG_EXTRASAMPLES,
+                              &extrasamples, &sampleinfo))
         {
-            premultiplied_alpha_ = true;
+            has_alpha_ = true;
+            if (extrasamples == 1 &&
+                sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA)
+            {
+                premultiplied_alpha_ = true;
+            }
         }
     }
     else
@@ -303,7 +297,7 @@ void tiff_reader<T>::read(unsigned x,unsigned y,image_data_32& image)
 }
 
 template <typename T>
-void tiff_reader<T>::read_generic(unsigned /*x*/,unsigned /*y*/,image_data_32& /*image*/)
+void tiff_reader<T>::read_generic(unsigned, unsigned, image_data_32&)
 {
     TIFF* tif = open(stream_);
     if (tif)
diff --git a/src/transform_expression.cpp b/src/transform_expression.cpp
index 157dee2..eff6548 100644
--- a/src/transform_expression.cpp
+++ b/src/transform_expression.cpp
@@ -24,26 +24,21 @@
 #include <mapnik/expression_string.hpp>
 #include <mapnik/transform_expression.hpp>
 
-// boost
-#include <boost/foreach.hpp>
-
 // stl
 #include <sstream>
 
 namespace mapnik {
 
-
 struct transform_node_to_expression_string
-    : public boost::static_visitor<void>
+    : public util::static_visitor<void>
 {
     std::ostringstream& os_;
 
     transform_node_to_expression_string(std::ostringstream& os)
         : os_(os) {}
 
-    void operator() (identity_node const& node) const
+    void operator() (identity_node const&) const
     {
-        boost::ignore_unused_variable_warning(node);
     }
 
     void operator() (matrix_node const& node)
@@ -59,7 +54,7 @@ struct transform_node_to_expression_string
 
     void operator() (translate_node const& node)
     {
-        if (is_null(node.ty_))
+        if (detail::is_null_node(node.ty_))
         {
             os_ << "translate("
                 << to_expression_string(node.tx_) << ")";
@@ -74,7 +69,7 @@ struct transform_node_to_expression_string
 
     void operator() (scale_node const& node)
     {
-        if (is_null(node.sy_))
+        if (detail::is_null_node(node.sy_))
         {
             os_ << "scale("
                 << to_expression_string(node.sx_) << ")";
@@ -89,7 +84,7 @@ struct transform_node_to_expression_string
 
     void operator() (rotate_node const& node)
     {
-        if (is_null(node.cy_) || is_null(node.cy_))
+        if (detail::is_null_node(node.cy_) || detail::is_null_node(node.cy_))
         {
             os_ << "rotate("
                 << to_expression_string(node.angle_) << ")";
@@ -121,7 +116,7 @@ std::string to_expression_string(transform_node const& node)
 {
     std::ostringstream os; // FIXME set precision?
     transform_node_to_expression_string to_string(os);
-    boost::apply_visitor(to_string, *node);
+    util::apply_visitor(to_string, *node);
     return os.str();
 }
 
@@ -132,10 +127,10 @@ std::string to_expression_string(transform_list const& list)
     std::streamsize first = 1;
     transform_node_to_expression_string to_string(os);
 
-    BOOST_FOREACH (transform_node const& node, list)
+    for (transform_node const& node : list)
     {
         os.write(" ", first ? (first = 0) : 1);
-        boost::apply_visitor(to_string, *node);
+        util::apply_visitor(to_string, *node);
     }
     return os.str();
 }
diff --git a/src/transform_expression_grammar.cpp b/src/transform_expression_grammar.cpp
index 4c5ab6d..767730d 100644
--- a/src/transform_expression_grammar.cpp
+++ b/src/transform_expression_grammar.cpp
@@ -2,7 +2,7 @@
  *
  * This file is part of Mapnik (c++ mapping toolkit)
  *
- * Copyright (C) 2012 Artem Pavlenko
+ * Copyright (C) 2014 Artem Pavlenko
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,116 +20,7 @@
  *
  *****************************************************************************/
 
-// mapnik
-#include <mapnik/transform_expression_grammar.hpp>
-
-// boost
-#include <boost/version.hpp>
-#include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_object.hpp>
-
-
-namespace mapnik {
-
-namespace qi = boost::spirit::qi;
-
-template <typename Iterator>
-transform_expression_grammar<Iterator>::transform_expression_grammar(expression_grammar<Iterator> const& g)
-        : transform_expression_grammar::base_type(start)
-{
-    using boost::phoenix::construct;
-    using qi::_a; using qi::_1; using qi::_4;
-    using qi::_b; using qi::_2; using qi::_5;
-    using qi::_c; using qi::_3; using qi::_6;
-    using qi::_val;
-    using qi::char_;
-    using qi::double_;
-    using qi::lit;
-    using qi::no_case;
-
-    // [http://www.w3.org/TR/SVG/coords.html#TransformAttribute]
-
-    // The value of the ‘transform’ attribute is a <transform-list>, which
-    // is defined as a list of transform definitions, which are applied in
-    // the order provided.  The individual transform definitions are
-    // separated by whitespace and/or a comma.
-
-#if BOOST_VERSION > 104200
-    using qi::no_skip;
-    start = transform_ % no_skip[char_(", ")] ;
-#else
-    using qi::lexeme;
-    start = transform_ % lexeme[char_(", ")] ;
-#endif
-
-    transform_ = matrix | translate | scale | rotate | skewX | skewY ;
-
-    // matrix(<a> <b> <c> <d> <e> <f>)
-    matrix = no_case[lit("matrix")]
-        >> (lit('(')
-            >> ( atom >> sep_atom >> sep_atom >> sep_atom >> sep_atom
-                      >> sep_atom >> lit(')')
-               | expr >> sep_expr >> sep_expr >> sep_expr >> sep_expr
-                      >> sep_expr >> lit(')')
-               ))
-        [ _val = construct<matrix_node>(_1,_2,_3,_4,_5,_6) ];
-
-    // translate(<tx> [<ty>])
-    translate = no_case[lit("translate")]
-        >> lit('(')
-        >> ( ( atom >> -sep_atom >> lit(')') )
-             [ _val = construct<translate_node>(_1,_2) ]
-           | ( expr >> -sep_expr >> lit(')') )
-             [ _val = construct<translate_node>(_1,_2) ]
-           );
-
-    // scale(<sx> [<sy>])
-    scale = no_case[lit("scale")]
-        >> lit('(')
-        >> ( ( atom >> -sep_atom >> lit(')') )
-             [ _val = construct<scale_node>(_1,_2) ]
-           | ( expr >> -sep_expr >> lit(')') )
-             [ _val = construct<scale_node>(_1,_2) ]
-           );
-
-    // rotate(<rotate-angle> [<cx> <cy>])
-    rotate = no_case[lit("rotate")]
-        >> lit('(')
-        >> ( ( atom >> -( sep_atom >> sep_atom ) >> lit(')') )
-             [ _val = construct<rotate_node>(_1,_2) ]
-           | ( expr >> -( sep_expr >> sep_expr ) >> lit(')') )
-             [ _val = construct<rotate_node>(_1,_2) ]
-           );
-
-    // skewX(<skew-angle>)
-    skewX = no_case[lit("skewX")]
-        >> lit('(')
-        >> expr [ _val = construct<skewX_node>(_1) ]
-        >> lit(')');
-
-    // skewY(<skew-angle>)
-    skewY = no_case[lit("skewY")]
-        >> lit('(')
-        >> expr [ _val = construct<skewY_node>(_1) ]
-        >> lit(')');
-
-    // number or attribute
-    atom = double_ [ _val = _1 ]
-        | attr [ _val = construct<mapnik::attribute>(_1) ];
-
-    // Individual arguments in lists consiting solely of numbers and/or
-    // attributes are separated by whitespace and/or a comma.
-    sep_atom = -lit(',') >> atom [ _val = _1 ];
-
-    // Individual arguments in lists containing one or more compound
-    // expressions are separated by a comma.
-    sep_expr = lit(',') >> expr [ _val = _1 ];
-
-    attr = g.attr.alias();
-    expr = g.expr.alias();
-}
+#include <mapnik/transform_expression_grammar_impl.hpp>
+#include <string>
 
 template struct mapnik::transform_expression_grammar<std::string::const_iterator>;
-
-}
diff --git a/src/unicode.cpp b/src/unicode.cpp
index 726ec82..4c703a2 100644
--- a/src/unicode.cpp
+++ b/src/unicode.cpp
@@ -22,11 +22,15 @@
 
 // mapnik
 #include <mapnik/unicode.hpp>
+#include <mapnik/value_types.hpp>
 
 // stl
 #include <cstdlib>
 #include <string>
 
+// icu
+#include <unicode/ucnv.h>
+
 namespace mapnik {
 
 transcoder::transcoder (std::string const& encoding)
@@ -39,11 +43,11 @@ transcoder::transcoder (std::string const& encoding)
     // TODO ??
 }
 
-UnicodeString transcoder::transcode(const char* data, boost::int32_t length) const
+mapnik::value_unicode_string transcoder::transcode(const char* data, std::int32_t length) const
 {
     UErrorCode err = U_ZERO_ERROR;
 
-    UnicodeString ustr(data,length,conv_,err);
+    mapnik::value_unicode_string ustr(data,length,conv_,err);
     if (ustr.isBogus())
     {
         ustr.remove();
diff --git a/src/utils.cpp b/src/utils.cpp
index a101028..668a0bf 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -25,7 +25,7 @@
 #include <mapnik/utils.hpp>
 #include <string>
 #include <vector>
-
+#define NOMINMAX
 #include <windows.h>
 
 namespace mapnik {
diff --git a/src/warp.cpp b/src/warp.cpp
index c409530..a7bb21a 100644
--- a/src/warp.cpp
+++ b/src/warp.cpp
@@ -26,7 +26,7 @@
 #include <mapnik/image_data.hpp>
 #include <mapnik/image_util.hpp>
 #include <mapnik/box2d.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
 #include <mapnik/raster.hpp>
 #include <mapnik/proj_transform.hpp>
 
@@ -39,7 +39,7 @@
 #include "agg_pixfmt_rgba.h"
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_basics.h"
-#include "agg_scanline_u.h"
+#include "agg_scanline_bin.h"
 #include "agg_renderer_scanline.h"
 #include "agg_span_allocator.h"
 #include "agg_image_accessors.h"
@@ -51,47 +51,44 @@ void reproject_and_scale_raster(raster & target, raster const& source,
                                 proj_transform const& prj_trans,
                                 double offset_x, double offset_y,
                                 unsigned mesh_size,
-                                double filter_radius,
                                 scaling_method_e scaling_method)
 {
-    CoordTransform ts(source.data_.width(), source.data_.height(),
+    view_transform ts(source.data_.width(), source.data_.height(),
                       source.ext_);
-    CoordTransform tt(target.data_.width(), target.data_.height(),
+    view_transform tt(target.data_.width(), target.data_.height(),
                       target.ext_, offset_x, offset_y);
-    unsigned i, j;
+
     unsigned mesh_nx = std::ceil(source.data_.width()/double(mesh_size) + 1);
     unsigned mesh_ny = std::ceil(source.data_.height()/double(mesh_size) + 1);
 
-    ImageData<double> xs(mesh_nx, mesh_ny);
-    ImageData<double> ys(mesh_nx, mesh_ny);
+    image_data<double> xs(mesh_nx, mesh_ny);
+    image_data<double> ys(mesh_nx, mesh_ny);
 
     // Precalculate reprojected mesh
-    for(j=0; j<mesh_ny; ++j)
+    for(unsigned j=0; j<mesh_ny; ++j)
     {
-        for (i=0; i<mesh_nx; ++i)
+        for (unsigned i=0; i<mesh_nx; ++i)
         {
             xs(i,j) = std::min(i*mesh_size,source.data_.width());
             ys(i,j) = std::min(j*mesh_size,source.data_.height());
             ts.backward(&xs(i,j), &ys(i,j));
         }
     }
-    prj_trans.backward(xs.getData(), ys.getData(), NULL, mesh_nx*mesh_ny);
+    prj_trans.backward(xs.getData(), ys.getData(), nullptr, mesh_nx*mesh_ny);
 
     // Initialize AGG objects
-    typedef agg::pixfmt_rgba32 pixfmt;
-    typedef pixfmt::color_type color_type;
-    typedef agg::renderer_base<pixfmt> renderer_base;
-    typedef agg::pixfmt_rgba32_pre pixfmt_pre;
-    typedef agg::renderer_base<pixfmt_pre> renderer_base_pre;
+    using pixfmt = agg::pixfmt_rgba32_pre;
+    using color_type = pixfmt::color_type;
+    using renderer_base = agg::renderer_base<pixfmt>;
 
     agg::rasterizer_scanline_aa<> rasterizer;
-    agg::scanline_u8  scanline;
+    agg::scanline_bin scanline;
     agg::rendering_buffer buf((unsigned char*)target.data_.getData(),
                               target.data_.width(),
                               target.data_.height(),
                               target.data_.width()*4);
-    pixfmt_pre pixf_pre(buf);
-    renderer_base_pre rb_pre(pixf_pre);
+    pixfmt pixf(buf);
+    renderer_base rb(pixf);
     rasterizer.clip_box(0, 0, target.data_.width(), target.data_.height());
     agg::rendering_buffer buf_tile(
         (unsigned char*)source.data_.getData(),
@@ -101,7 +98,7 @@ void reproject_and_scale_raster(raster & target, raster const& source,
 
     pixfmt pixf_tile(buf_tile);
 
-    typedef agg::image_accessor_clone<pixfmt> img_accessor_type;
+    using img_accessor_type = agg::image_accessor_clone<pixfmt>;
     img_accessor_type ia(pixf_tile);
 
     agg::span_allocator<color_type> sa;
@@ -111,7 +108,6 @@ void reproject_and_scale_raster(raster & target, raster const& source,
     switch(scaling_method)
     {
     case SCALING_NEAR: break;
-    case SCALING_BILINEAR8: // TODO - impl this or remove?
     case SCALING_BILINEAR:
         filter.calculate(agg::image_filter_bilinear(), true); break;
     case SCALING_BICUBIC:
@@ -139,17 +135,17 @@ void reproject_and_scale_raster(raster & target, raster const& source,
     case SCALING_MITCHELL:
         filter.calculate(agg::image_filter_mitchell(), true); break;
     case SCALING_SINC:
-        filter.calculate(agg::image_filter_sinc(filter_radius), true); break;
+        filter.calculate(agg::image_filter_sinc(source.get_filter_factor()), true); break;
     case SCALING_LANCZOS:
-        filter.calculate(agg::image_filter_lanczos(filter_radius), true); break;
+        filter.calculate(agg::image_filter_lanczos(source.get_filter_factor()), true); break;
     case SCALING_BLACKMAN:
-        filter.calculate(agg::image_filter_blackman(filter_radius), true); break;
+        filter.calculate(agg::image_filter_blackman(source.get_filter_factor()), true); break;
     }
 
     // Project mesh cells into target interpolating raster inside each one
-    for(j=0; j<mesh_ny-1; j++)
+    for(unsigned j=0; j<mesh_ny-1; ++j)
     {
-        for (i=0; i<mesh_nx-1; i++)
+        for (unsigned i=0; i<mesh_nx-1; ++i)
         {
             double polygon[8] = {xs(i,j), ys(i,j),
                                  xs(i+1,j), ys(i+1,j),
@@ -175,22 +171,23 @@ void reproject_and_scale_raster(raster & target, raster const& source,
             agg::trans_affine tr(polygon, x0, y0, x1, y1);
             if (tr.is_valid())
             {
-                typedef agg::span_interpolator_linear<agg::trans_affine>
-                    interpolator_type;
+                using interpolator_type = agg::span_interpolator_linear<agg::trans_affine>;
                 interpolator_type interpolator(tr);
 
-                if (scaling_method == SCALING_NEAR) {
-                    typedef agg::span_image_filter_rgba_nn
-                        <img_accessor_type, interpolator_type>
-                        span_gen_type;
+                if (scaling_method == SCALING_NEAR)
+                {
+                    using span_gen_type = agg::span_image_filter_rgba_nn
+                        <img_accessor_type, interpolator_type>;
                     span_gen_type sg(ia, interpolator);
-                    agg::render_scanlines_aa(rasterizer, scanline, rb_pre,
+                    agg::render_scanlines_bin(rasterizer, scanline, rb,
                                              sa, sg);
-                } else {
-                    typedef agg::span_image_resample_rgba_affine
-                        <img_accessor_type> span_gen_type;
+                }
+                else
+                {
+                    using span_gen_type = agg::span_image_resample_rgba_affine
+                        <img_accessor_type>;
                     span_gen_type sg(ia, interpolator, filter);
-                    agg::render_scanlines_aa(rasterizer, scanline, rb_pre,
+                    agg::render_scanlines_bin(rasterizer, scanline, rb,
                                              sa, sg);
                 }
             }
diff --git a/src/webp_reader.cpp b/src/webp_reader.cpp
new file mode 100644
index 0000000..bd34d23
--- /dev/null
+++ b/src/webp_reader.cpp
@@ -0,0 +1,263 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2013 Artem Pavlenko
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+// mapnik
+#include <mapnik/make_unique.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/image_reader.hpp>
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
+extern "C"
+{
+#include <webp/types.h>
+#include <webp/decode.h>
+}
+#pragma clang diagnostic pop
+
+// boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/stream.hpp>
+#pragma GCC diagnostic pop
+
+// stl
+#include <fstream>
+
+namespace mapnik
+{
+
+struct external_buffer_policy
+{
+    external_buffer_policy( uint8_t const* data, std::size_t size)
+        : data_(data),
+          size_(size) {}
+
+    uint8_t const* data() const
+    {
+        return data_;
+    }
+
+    std::size_t size() const
+    {
+        return size_;
+    }
+
+    uint8_t const* data_;
+    std::size_t size_;
+};
+
+struct internal_buffer_policy
+{
+    internal_buffer_policy(std::size_t size)
+        : data_((size!=0) ? static_cast<uint8_t*>(::operator new(sizeof(uint8_t) * size)) : 0),
+          size_(size)
+    {}
+
+    uint8_t * data() const
+    {
+        return data_;
+    }
+
+    std::size_t size() const
+    {
+        return size_;
+    }
+
+    ~internal_buffer_policy()
+    {
+        ::operator delete(data_), data_=0;
+    }
+
+    uint8_t * data_;
+    std::size_t size_;
+};
+
+template <typename T>
+class webp_reader : public image_reader
+{
+    using buffer_policy_type = T;
+private:
+    struct config_guard
+    {
+        config_guard(WebPDecoderConfig & config)
+            : config_(config) {}
+
+        ~config_guard()
+        {
+            WebPFreeDecBuffer(&config_.output);
+        }
+        WebPDecoderConfig & config_;
+    };
+
+    std::unique_ptr<buffer_policy_type> buffer_;
+    size_t size_;
+    unsigned width_;
+    unsigned height_;
+    bool has_alpha_;
+public:
+    explicit webp_reader(char const* data, std::size_t size);
+    explicit webp_reader(std::string const& filename);
+    ~webp_reader();
+    unsigned width() const;
+    unsigned height() const;
+    inline bool has_alpha() const { return has_alpha_; }
+    bool premultiplied_alpha() const { return false; }
+    void read(unsigned x,unsigned y,image_data_32& image);
+private:
+    void init();
+};
+
+namespace
+{
+image_reader* create_webp_reader(char const * data, std::size_t size)
+{
+    return new webp_reader<external_buffer_policy>(data, size);
+}
+
+image_reader* create_webp_reader2(std::string const& filename)
+{
+    return new webp_reader<internal_buffer_policy>(filename);
+}
+
+
+const bool registered = register_image_reader("webp", create_webp_reader);
+const bool registered2 = register_image_reader("webp", create_webp_reader2);
+
+}
+
+// ctor
+template <typename T>
+webp_reader<T>::webp_reader(char const* data, std::size_t size)
+    : buffer_(new buffer_policy_type(reinterpret_cast<uint8_t const*>(data), size)),
+      width_(0),
+      height_(0),
+      has_alpha_(false)
+{
+    init();
+}
+
+template <typename T>
+webp_reader<T>::webp_reader(std::string const& filename)
+    : buffer_(nullptr),
+      size_(0),
+      width_(0),
+      height_(0),
+      has_alpha_(false)
+{
+    std::ifstream file(filename.c_str(), std::ios::binary);
+    if (!file)
+    {
+        throw image_reader_exception("WEBP: Can't read file:" + filename);
+    }
+    std::streampos beg = file.tellg();
+    file.seekg (0, std::ios::end);
+    std::streampos end = file.tellg();
+    std::size_t file_size = end - beg;
+    file.seekg (0, std::ios::beg);
+
+    auto buffer = std::make_unique<buffer_policy_type>(file_size);
+    file.read(reinterpret_cast<char*>(buffer->data()), buffer->size());
+    if (!file)
+    {
+        throw image_reader_exception("WEBP: Failed to read:" + filename);
+    }
+
+    buffer_ = std::move(buffer);
+    init();
+}
+
+
+// dtor
+template <typename T>
+webp_reader<T>::~webp_reader()
+{
+    //
+}
+
+template <typename T>
+void webp_reader<T>::init()
+{
+    WebPDecoderConfig config;
+    config_guard guard(config);
+    if (!WebPInitDecoderConfig(&config))
+    {
+        throw image_reader_exception("WEBP reader: WebPInitDecoderConfig failed");
+    }
+    if (WebPGetFeatures(buffer_->data(), buffer_->size(), &config.input) == VP8_STATUS_OK) {
+        width_ = config.input.width;
+        height_ = config.input.height;
+        has_alpha_ = config.input.has_alpha;
+    }
+    else
+    {
+        throw image_reader_exception("WEBP reader: WebPGetFeatures failed");
+    }
+}
+
+template <typename T>
+unsigned webp_reader<T>::width() const
+{
+    return width_;
+}
+
+template <typename T>
+unsigned webp_reader<T>::height() const
+{
+    return height_;
+}
+
+template <typename T>
+void webp_reader<T>::read(unsigned x0, unsigned y0,image_data_32& image)
+{
+    WebPDecoderConfig config;
+    config_guard guard(config);
+    if (!WebPInitDecoderConfig(&config))
+    {
+        throw image_reader_exception("WEBP reader: WebPInitDecoderConfig failed");
+    }
+
+    config.options.use_cropping = 1;
+    config.options.crop_left = x0;
+    config.options.crop_top = y0;
+    config.options.crop_width = std::min(width_ - x0, image.width());
+    config.options.crop_height = std::min(height_ - y0, image.height());
+
+    if (WebPGetFeatures(buffer_->data(), buffer_->size(), &config.input) != VP8_STATUS_OK)
+    {
+        throw image_reader_exception("WEBP reader: WebPGetFeatures failed");
+    }
+
+    config.output.colorspace = MODE_RGBA;
+    config.output.u.RGBA.rgba = (uint8_t *)image.getBytes();
+    config.output.u.RGBA.stride = 4 * image.width();
+    config.output.u.RGBA.size = image.width() * image.height() * 4;
+    config.output.is_external_memory = 1;
+    if (WebPDecode(buffer_->data(), buffer_->size(), &config) != VP8_STATUS_OK)
+    {
+        throw image_reader_exception("WEBP reader: WebPDecode failed");
+    }
+}
+
+}
diff --git a/src/wkb.cpp b/src/wkb.cpp
index ed8c627..1a31d7c 100644
--- a/src/wkb.cpp
+++ b/src/wkb.cpp
@@ -21,6 +21,7 @@
  *****************************************************************************/
 
 // mapnik
+#include <mapnik/make_unique.hpp>
 #include <mapnik/debug.hpp>
 #include <mapnik/global.hpp>
 #include <mapnik/wkb.hpp>
@@ -29,13 +30,10 @@
 #include <mapnik/feature.hpp>
 #include <mapnik/noncopyable.hpp>
 
-// boost
-#include <boost/format.hpp>
-
 namespace mapnik
 {
 
-typedef coord_array<coord2d> CoordinateArray;
+using CoordinateArray = coord_array<coord2d>;
 
 struct wkb_reader : mapnik::noncopyable
 {
@@ -46,8 +44,8 @@ private:
     };
 
     const char* wkb_;
-    unsigned size_;
-    unsigned pos_;
+    std::size_t size_;
+    std::size_t pos_;
     wkbByteOrder byteOrder_;
     bool needSwap_;
     wkbFormat format_;
@@ -62,16 +60,33 @@ public:
         wkbMultiLineString=5,
         wkbMultiPolygon=6,
         wkbGeometryCollection=7,
+        // Z
         wkbPointZ=1001,
         wkbLineStringZ=1002,
         wkbPolygonZ=1003,
         wkbMultiPointZ=1004,
         wkbMultiLineStringZ=1005,
         wkbMultiPolygonZ=1006,
-        wkbGeometryCollectionZ=1007
-    };
-
-    wkb_reader(const char* wkb, unsigned size, wkbFormat format)
+        wkbGeometryCollectionZ=1007,
+        // M
+        wkbPointM=2001,
+        wkbLineStringM=2002,
+        wkbPolygonM=2003,
+        wkbMultiPointM=2004,
+        wkbMultiLineStringM=2005,
+        wkbMultiPolygonM=2006,
+        wkbGeometryCollectionM=2007,
+        // ZM
+        wkbPointZM=3001,
+        wkbLineStringZM=3002,
+        wkbPolygonZM=3003,
+        wkbMultiPointZM=3004,
+        wkbMultiLineStringZM=3005,
+        wkbMultiPolygonZM=3006,
+        wkbGeometryCollectionZM=3007
+     };
+
+    wkb_reader(const char* wkb, std::size_t size, wkbFormat format)
         : wkb_(wkb),
           size_(size),
           pos_(0),
@@ -81,9 +96,9 @@ public:
         if (format_ == wkbAuto)
         {
             if (size_ >= 44
-                && (unsigned char)(wkb_[0]) == (unsigned char)(0x00)
-                && (unsigned char)(wkb_[38]) == (unsigned char)(0x7C)
-                && (unsigned char)(wkb_[size_ - 1]) == (unsigned char)(0xFE))
+                && static_cast<unsigned char>(wkb_[0]) == static_cast<unsigned char>(0x00)
+                && static_cast<unsigned char>(wkb_[38]) == static_cast<unsigned char>(0x7C)
+                && static_cast<unsigned char>(wkb_[size_ - 1]) == static_cast<unsigned char>(0xFE))
             {
                 format_ = wkbSpatiaLite;
             }
@@ -107,14 +122,10 @@ public:
             break;
         }
 
-#ifndef MAPNIK_BIG_ENDIAN
         needSwap_ = byteOrder_ ? wkbXDR : wkbNDR;
-#else
-        needSwap_ = byteOrder_ ? wkbNDR : wkbXDR;
-#endif
     }
 
-    void read(boost::ptr_vector<geometry_type> & paths)
+    void read(geometry_container & paths)
     {
         int type = read_integer();
 
@@ -142,24 +153,50 @@ public:
             read_collection(paths);
             break;
         case wkbPointZ:
+        case wkbPointM:
             read_point_xyz(paths);
             break;
+        case wkbPointZM:
+            read_point_xyzm(paths);
+            break;
         case wkbLineStringZ:
+        case wkbLineStringM:
             read_linestring_xyz(paths);
             break;
+        case wkbLineStringZM:
+            read_linestring_xyzm(paths);
+            break;
         case wkbPolygonZ:
+        case wkbPolygonM:
             read_polygon_xyz(paths);
             break;
+        case wkbPolygonZM:
+            read_polygon_xyzm(paths);
+            break;
         case wkbMultiPointZ:
+        case wkbMultiPointM:
             read_multipoint_xyz(paths);
             break;
+        case wkbMultiPointZM:
+            read_multipoint_xyzm(paths);
+            break;
         case wkbMultiLineStringZ:
+        case wkbMultiLineStringM:
             read_multilinestring_xyz(paths);
             break;
+        case wkbMultiLineStringZM:
+            read_multilinestring_xyzm(paths);
+            break;
         case wkbMultiPolygonZ:
+        case wkbMultiPolygonM:
             read_multipolygon_xyz(paths);
             break;
+        case wkbMultiPolygonZM:
+            read_multipolygon_xyzm(paths);
+            break;
         case wkbGeometryCollectionZ:
+        case wkbGeometryCollectionM:
+        case wkbGeometryCollectionZM:
             read_collection(paths);
             break;
         default:
@@ -171,7 +208,7 @@ private:
 
     int read_integer()
     {
-        boost::int32_t n;
+        std::int32_t n;
         if (needSwap_)
         {
             read_int32_xdr(wkb_ + pos_, n);
@@ -205,19 +242,19 @@ private:
     {
         if (! needSwap_)
         {
-            for (unsigned i = 0; i < ar.size(); ++i)
+            for (auto & coord : ar)
             {
-                read_double_ndr(wkb_ + pos_, ar[i].x);
-                read_double_ndr(wkb_ + pos_ + 8, ar[i].y);
+                read_double_ndr(wkb_ + pos_, coord.x);
+                read_double_ndr(wkb_ + pos_ + 8, coord.y);
                 pos_ += 16; // skip XY
             }
         }
         else
         {
-            for (unsigned i=0;i<ar.size();++i)
+            for (auto & coord : ar)
             {
-                read_double_xdr(wkb_ + pos_, ar[i].x);
-                read_double_xdr(wkb_ + pos_ + 8, ar[i].y);
+                read_double_xdr(wkb_ + pos_, coord.x);
+                read_double_xdr(wkb_ + pos_ + 8, coord.y);
                 pos_ += 16; // skip XY
             }
         }
@@ -227,35 +264,56 @@ private:
     {
         if (! needSwap_)
         {
-            for (unsigned i = 0; i < ar.size(); ++i)
+            for (auto & coord : ar)
             {
-                read_double_ndr(wkb_ + pos_, ar[i].x);
-                read_double_ndr(wkb_ + pos_ + 8, ar[i].y);
+                read_double_ndr(wkb_ + pos_, coord.x);
+                read_double_ndr(wkb_ + pos_ + 8, coord.y);
                 pos_ += 24; // skip XYZ
             }
         }
         else
         {
-            for (unsigned i = 0; i < ar.size(); ++i)
+            for (auto & coord : ar)
             {
-                read_double_xdr(wkb_ + pos_, ar[i].x);
-                read_double_xdr(wkb_ + pos_ + 8, ar[i].y);
+                read_double_xdr(wkb_ + pos_, coord.x);
+                read_double_xdr(wkb_ + pos_ + 8, coord.y);
                 pos_ += 24; // skip XYZ
             }
         }
     }
 
+    void read_coords_xyzm(CoordinateArray& ar)
+    {
+        if (! needSwap_)
+        {
+            for (auto & coord : ar)
+            {
+                read_double_ndr(wkb_ + pos_, coord.x);
+                read_double_ndr(wkb_ + pos_ + 8, coord.y);
+                pos_ += 32; // skip XYZM
+            }
+        }
+        else
+        {
+            for (auto & coord : ar)
+            {
+                read_double_xdr(wkb_ + pos_, coord.x);
+                read_double_xdr(wkb_ + pos_ + 8, coord.y);
+                pos_ += 32; // skip XYZM
+            }
+        }
+    }
 
-    void read_point(boost::ptr_vector<geometry_type> & paths)
+    void read_point(geometry_container & paths)
     {
         double x = read_double();
         double y = read_double();
-        std::auto_ptr<geometry_type> pt(new geometry_type(Point));
+        auto pt = std::make_unique<geometry_type>(geometry_type::types::Point);
         pt->move_to(x, y);
-        paths.push_back(pt);
+        paths.push_back(pt.release());
     }
 
-    void read_multipoint(boost::ptr_vector<geometry_type> & paths)
+    void read_multipoint(geometry_container & paths)
     {
         int num_points = read_integer();
         for (int i = 0; i < num_points; ++i)
@@ -265,17 +323,27 @@ private:
         }
     }
 
-    void read_point_xyz(boost::ptr_vector<geometry_type> & paths)
+    void read_point_xyz(geometry_container & paths)
     {
         double x = read_double();
         double y = read_double();
-        std::auto_ptr<geometry_type> pt(new geometry_type(Point));
+        auto pt = std::make_unique<geometry_type>(geometry_type::types::Point);
         pos_ += 8; // double z = read_double();
         pt->move_to(x, y);
-        paths.push_back(pt);
+        paths.push_back(pt.release());
     }
 
-    void read_multipoint_xyz(boost::ptr_vector<geometry_type> & paths)
+    void read_point_xyzm(geometry_container & paths)
+    {
+        double x = read_double();
+        double y = read_double();
+        auto pt = std::make_unique<geometry_type>(geometry_type::types::Point);
+        pos_ += 16;
+        pt->move_to(x, y);
+        paths.push_back(pt.release());
+    }
+
+    void read_multipoint_xyz(geometry_container & paths)
     {
         int num_points = read_integer();
         for (int i = 0; i < num_points; ++i)
@@ -285,24 +353,34 @@ private:
         }
     }
 
-    void read_linestring(boost::ptr_vector<geometry_type> & paths)
+    void read_multipoint_xyzm(geometry_container & paths)
+    {
+        int num_points = read_integer();
+        for (int i = 0; i < num_points; ++i)
+        {
+            pos_ += 5;
+            read_point_xyzm(paths);
+        }
+    }
+
+    void read_linestring(geometry_container & paths)
     {
         int num_points = read_integer();
         if (num_points > 0)
         {
             CoordinateArray ar(num_points);
             read_coords(ar);
-            std::auto_ptr<geometry_type> line(new geometry_type(LineString));
+            auto line = std::make_unique<geometry_type>(geometry_type::types::LineString);
             line->move_to(ar[0].x, ar[0].y);
             for (int i = 1; i < num_points; ++i)
             {
                 line->line_to(ar[i].x, ar[i].y);
             }
-            paths.push_back(line);
+            paths.push_back(line.release());
         }
     }
 
-    void read_multilinestring(boost::ptr_vector<geometry_type> & paths)
+    void read_multilinestring(geometry_container & paths)
     {
         int num_lines = read_integer();
         for (int i = 0; i < num_lines; ++i)
@@ -312,24 +390,41 @@ private:
         }
     }
 
-    void read_linestring_xyz(boost::ptr_vector<geometry_type> & paths)
+    void read_linestring_xyz(geometry_container & paths)
     {
         int num_points = read_integer();
         if (num_points > 0)
         {
             CoordinateArray ar(num_points);
             read_coords_xyz(ar);
-            std::auto_ptr<geometry_type> line(new geometry_type(LineString));
+            auto line = std::make_unique<geometry_type>(geometry_type::types::LineString);
             line->move_to(ar[0].x, ar[0].y);
             for (int i = 1; i < num_points; ++i)
             {
                 line->line_to(ar[i].x, ar[i].y);
             }
-            paths.push_back(line);
+            paths.push_back(line.release());
         }
     }
 
-    void read_multilinestring_xyz(boost::ptr_vector<geometry_type> & paths)
+    void read_linestring_xyzm(geometry_container & paths)
+    {
+        int num_points = read_integer();
+        if (num_points > 0)
+        {
+            CoordinateArray ar(num_points);
+            read_coords_xyzm(ar);
+            auto line = std::make_unique<geometry_type>(geometry_type::types::LineString);
+            line->move_to(ar[0].x, ar[0].y);
+            for (int i = 1; i < num_points; ++i)
+            {
+                line->line_to(ar[i].x, ar[i].y);
+            }
+            paths.push_back(line.release());
+        }
+    }
+
+    void read_multilinestring_xyz(geometry_container & paths)
     {
         int num_lines = read_integer();
         for (int i = 0; i < num_lines; ++i)
@@ -339,13 +434,22 @@ private:
         }
     }
 
+    void read_multilinestring_xyzm(geometry_container & paths)
+    {
+        int num_lines = read_integer();
+        for (int i = 0; i < num_lines; ++i)
+        {
+            pos_ += 5;
+            read_linestring_xyzm(paths);
+        }
+    }
 
-    void read_polygon(boost::ptr_vector<geometry_type> & paths)
+    void read_polygon(geometry_container & paths)
     {
         int num_rings = read_integer();
         if (num_rings > 0)
         {
-            std::auto_ptr<geometry_type> poly(new geometry_type(Polygon));
+            auto poly = std::make_unique<geometry_type>(geometry_type::types::Polygon);
             for (int i = 0; i < num_rings; ++i)
             {
                 int num_points = read_integer();
@@ -362,11 +466,11 @@ private:
                 }
             }
             if (poly->size() > 3) // ignore if polygon has less than (3 + close_path) vertices
-                paths.push_back(poly);
+                paths.push_back(poly.release());
         }
     }
 
-    void read_multipolygon(boost::ptr_vector<geometry_type> & paths)
+    void read_multipolygon(geometry_container & paths)
     {
         int num_polys = read_integer();
         for (int i = 0; i < num_polys; ++i)
@@ -376,12 +480,12 @@ private:
         }
     }
 
-    void read_polygon_xyz(boost::ptr_vector<geometry_type> & paths)
+    void read_polygon_xyz(geometry_container & paths)
     {
         int num_rings = read_integer();
         if (num_rings > 0)
         {
-            std::auto_ptr<geometry_type> poly(new geometry_type(Polygon));
+            auto poly = std::make_unique<geometry_type>(geometry_type::types::Polygon);
             for (int i = 0; i < num_rings; ++i)
             {
                 int num_points = read_integer();
@@ -398,11 +502,37 @@ private:
                 }
             }
             if (poly->size() > 2) // ignore if polygon has less than 3 vertices
-                paths.push_back(poly);
+                paths.push_back(poly.release());
+        }
+    }
+
+    void read_polygon_xyzm(geometry_container & paths)
+    {
+        int num_rings = read_integer();
+        if (num_rings > 0)
+        {
+            auto poly = std::make_unique<geometry_type>(geometry_type::types::Polygon);
+            for (int i = 0; i < num_rings; ++i)
+            {
+                int num_points = read_integer();
+                if (num_points > 0)
+                {
+                    CoordinateArray ar(num_points);
+                    read_coords_xyzm(ar);
+                    poly->move_to(ar[0].x, ar[0].y);
+                    for (int j = 1; j < num_points; ++j)
+                    {
+                        poly->line_to(ar[j].x, ar[j].y);
+                    }
+                    poly->close_path();
+                }
+            }
+            if (poly->size() > 2) // ignore if polygon has less than 3 vertices
+                paths.push_back(poly.release());
         }
     }
 
-    void read_multipolygon_xyz(boost::ptr_vector<geometry_type> & paths)
+    void read_multipolygon_xyz(geometry_container & paths)
     {
         int num_polys = read_integer();
         for (int i = 0; i < num_polys; ++i)
@@ -412,7 +542,17 @@ private:
         }
     }
 
-    void read_collection(boost::ptr_vector<geometry_type> & paths)
+    void read_multipolygon_xyzm(geometry_container & paths)
+    {
+        int num_polys = read_integer();
+        for (int i = 0; i < num_polys; ++i)
+        {
+            pos_ += 5;
+            read_polygon_xyzm(paths);
+        }
+    }
+
+    void read_collection(geometry_container & paths)
     {
         int num_geometries = read_integer();
         for (int i = 0; i < num_geometries; ++i)
@@ -429,19 +569,33 @@ private:
         switch (type)
         {
         case wkbPoint:               s << "Point"; break;
-        case wkbLineString:          s << "LineString"; break;
-        case wkbPolygon:             s << "Polygon"; break;
-        case wkbMultiPoint:          s << "MultiPoint"; break;
-        case wkbMultiLineString:     s << "MultiLineString"; break;
-        case wkbMultiPolygon:        s << "MultiPolygon"; break;
-        case wkbGeometryCollection:  s << "GeometryCollection"; break;
         case wkbPointZ:              s << "PointZ"; break;
-        case wkbLineStringZ:         s << "LineStringZ"; break;
-        case wkbPolygonZ:            s << "PolygonZ"; break;
+        case wkbPointM:              s << "PointM"; break;
+        case wkbPointZM:             s << "PointZM"; break;
+        case wkbMultiPoint:          s << "MultiPoint"; break;
         case wkbMultiPointZ:         s << "MultiPointZ"; break;
+        case wkbMultiPointM:         s << "MultiPointM"; break;
+        case wkbMultiPointZM:        s << "MultiPointZM"; break;
+        case wkbLineString:          s << "LineString"; break;
+        case wkbLineStringZ:         s << "LineStringZ"; break;
+        case wkbLineStringM:         s << "LineStringM"; break;
+        case wkbLineStringZM:        s << "LineStringZM"; break;
+        case wkbMultiLineString:     s << "MultiLineString"; break;
         case wkbMultiLineStringZ:    s << "MultiLineStringZ"; break;
+        case wkbMultiLineStringM:    s << "MultiLineStringM"; break;
+        case wkbMultiLineStringZM:   s << "MultiLineStringZM"; break;
+        case wkbPolygon:             s << "Polygon"; break;
+        case wkbPolygonZ:            s << "PolygonZ"; break;
+        case wkbPolygonM:            s << "PolygonM"; break;
+        case wkbPolygonZM:           s << "PolygonZM"; break;
+        case wkbMultiPolygon:        s << "MultiPolygon"; break;
         case wkbMultiPolygonZ:       s << "MultiPolygonZ"; break;
+        case wkbMultiPolygonM:       s << "MultiPolygonM"; break;
+        case wkbMultiPolygonZM:      s << "MultiPolygonZM"; break;
+        case wkbGeometryCollection:  s << "GeometryCollection"; break;
         case wkbGeometryCollectionZ: s << "GeometryCollectionZ"; break;
+        case wkbGeometryCollectionM: s << "GeometryCollectionM"; break;
+        case wkbGeometryCollectionZM: s << "GeometryCollectionZM"; break;
         default:                     s << "wkbUnknown(" << type << ")"; break;
         }
 
@@ -450,12 +604,12 @@ private:
 
 };
 
-bool geometry_utils::from_wkb(boost::ptr_vector<geometry_type>& paths,
+bool geometry_utils::from_wkb(geometry_container& paths,
                                const char* wkb,
                                unsigned size,
                                wkbFormat format)
 {
-    unsigned geom_count = paths.size();
+    std::size_t geom_count = paths.size();
     wkb_reader reader(wkb, size, format);
     reader.read(paths);
     if (paths.size() > geom_count)
diff --git a/src/wkt/build.py b/src/wkt/build.py
new file mode 100644
index 0000000..c1c4f70
--- /dev/null
+++ b/src/wkt/build.py
@@ -0,0 +1,35 @@
+#
+# This file is part of Mapnik (c++ mapping toolkit)
+#
+# Copyright (C) 2014 Artem Pavlenko
+#
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# 
+
+import os
+from glob import glob
+
+Import('env')
+lib_env = env.Clone()
+if 'g++' in env['CXX']:
+    lib_env.Append(CXXFLAGS='-fPIC')
+
+name = "mapnik-wkt"
+lib = lib_env.StaticLibrary(name, glob('./' + '*.cpp'), LIBS=[])
+target = os.path.join(env['MAPNIK_LIB_BASE_DEST'], env.subst('${LIBPREFIX}%s${LIBSUFFIX}' % name))
+result = env.InstallAs(target=target, source=lib)
+env.Alias(target='install', source=result)
+env['create_uninstall_target'](env, target)
diff --git a/src/wkt/mapnik_wkt_generator_grammar.cpp b/src/wkt/mapnik_wkt_generator_grammar.cpp
new file mode 100644
index 0000000..52636b8
--- /dev/null
+++ b/src/wkt/mapnik_wkt_generator_grammar.cpp
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/geometry.hpp>
+#include <mapnik/geometry_container.hpp>
+#include <mapnik/wkt/wkt_generator_grammar_impl.hpp>
+#include <string>
+
+namespace mapnik { namespace wkt {
+
+using sink_type = std::back_insert_iterator<std::string>;
+template struct wkt_generator<sink_type, mapnik::geometry_type>;
+template struct wkt_multi_generator<sink_type, mapnik::geometry_container>;
+
+}}
diff --git a/src/wkt/mapnik_wkt_grammar.cpp b/src/wkt/mapnik_wkt_grammar.cpp
new file mode 100644
index 0000000..b5d2996
--- /dev/null
+++ b/src/wkt/mapnik_wkt_grammar.cpp
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ *
+ * This file is part of Mapnik (c++ mapping toolkit)
+ *
+ * Copyright (C) 2014 Artem Pavlenko, Jean-Francois Doyon
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ *****************************************************************************/
+
+#include <mapnik/wkt/wkt_grammar_impl.hpp>
+#include <string>
+
+namespace mapnik { namespace wkt {
+using iterator_type = std::string::const_iterator;
+template struct wkt_collection_grammar<iterator_type>;
+}}
diff --git a/src/wkt/wkt_factory.cpp b/src/wkt/wkt_factory.cpp
deleted file mode 100644
index 823965c..0000000
--- a/src/wkt/wkt_factory.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2011 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-// boost
-#include <boost/version.hpp>
-
-// mapnik
-#include <mapnik/wkt/wkt_factory.hpp>
-#include <mapnik/wkt/wkt_grammar.hpp>
-
-// stl
-#include <string>
-#include <sstream>
-#include <stdexcept>
-
-
-namespace mapnik
-{
-
-#if BOOST_VERSION >= 104700
-wkt_parser::wkt_parser()
-    : grammar_(new mapnik::wkt::wkt_collection_grammar<iterator_type>)
-{}
-
-bool wkt_parser::parse(std::string const& wkt, boost::ptr_vector<geometry_type> & paths)
-{
-    using namespace boost::spirit;
-    iterator_type first = wkt.begin();
-    iterator_type last =  wkt.end();
-    return qi::phrase_parse(first, last, *grammar_, ascii::space, paths);
-}
-#endif
-
-bool from_wkt(std::string const& wkt, boost::ptr_vector<geometry_type> & paths)
-{
-#if BOOST_VERSION >= 104700
-    wkt_parser parser;
-    return parser.parse(wkt,paths);
-#else
-    std::ostringstream s;
-    s << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000  << "." << BOOST_VERSION % 100;
-    throw std::runtime_error("mapnik::from_wkt() requires at least boost 1.47 while your build was compiled against boost " + s.str());
-    return false;
-#endif
-}
-
-}
-
diff --git a/src/wkt/wkt_generator.cpp b/src/wkt/wkt_generator.cpp
deleted file mode 100644
index 16f81bf..0000000
--- a/src/wkt/wkt_generator.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/*****************************************************************************
- *
- * This file is part of Mapnik (c++ mapping toolkit)
- *
- * Copyright (C) 2012 Artem Pavlenko
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- *****************************************************************************/
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 104700
-
-#include <mapnik/geometry.hpp>
-#include <mapnik/util/geometry_wkt_generator.hpp>
-#include <mapnik/util/geometry_to_wkt.hpp>
-#include <mapnik/util/path_iterator.hpp>
-#include <mapnik/util/container_adapter.hpp>
-
-namespace mapnik { namespace util {
-
-template <typename T>
-boost::tuple<unsigned,bool> detail::multi_geometry_type<T>::operator() (T const& geom) const
-{
-    typedef T geometry_container;
-    unsigned type = 0u;
-    bool collection = false;
-
-    typename geometry_container::const_iterator itr = geom.begin();
-    typename geometry_container::const_iterator end = geom.end();
-
-    for ( ; itr != end; ++itr)
-    {
-        if (type != 0 && itr->type() != type)
-        {
-            collection = true;
-            break;
-        }
-        type = itr->type();
-    }
-    return boost::tuple<unsigned,bool>(type, collection);
-}
-
-template <typename OutputIterator, typename Geometry>
-wkt_generator<OutputIterator, Geometry>::wkt_generator(bool single)
-    : wkt_generator::base_type(wkt)
-{
-    using boost::spirit::karma::uint_;
-    using boost::spirit::karma::_val;
-    using boost::spirit::karma::_1;
-    using boost::spirit::karma::lit;
-    using boost::spirit::karma::_a;
-    using boost::spirit::karma::_b;
-    using boost::spirit::karma::_c;
-    using boost::spirit::karma::_r1;
-    using boost::spirit::karma::eps;
-    using boost::spirit::karma::string;
-
-    wkt = point | linestring | polygon
-        ;
-
-    point = &uint_(mapnik::Point)[_1 = _type(_val)]
-        << string[ phoenix::if_ (single) [_1 = "Point("]
-                   .else_[_1 = "("]]
-        << point_coord [_1 = _first(_val)] << lit(')')
-        ;
-
-    linestring = &uint_(mapnik::LineString)[_1 = _type(_val)]
-        << string[ phoenix::if_ (single) [_1 = "LineString("]
-                   .else_[_1 = "("]]
-        << coords
-        << lit(')')
-        ;
-
-    polygon = &uint_(mapnik::Polygon)[_1 = _type(_val)]
-        << string[ phoenix::if_ (single) [_1 = "Polygon("]
-                   .else_[_1 = "("]]
-        << coords2
-        << lit("))")
-        ;
-
-    point_coord = &uint_ << coordinate << lit(' ') << coordinate
-        ;
-
-    polygon_coord %= ( &uint_(mapnik::SEG_MOVETO)
-                       << eps[_r1 += 1][_a  = _x(_val)][ _b = _y(_val)]
-                       << string[ if_ (_r1 > 1) [_1 = "),("]
-                                  .else_[_1 = "("]]
-                       |
-                       &uint_(mapnik::SEG_LINETO)
-                       << lit(',') << eps[_a = _x(_val)][_b = _y(_val)]
-        )
-        << coordinate[_1 = _a]
-        << lit(' ')
-        << coordinate[_1 = _b]
-        ;
-
-    coords2 %= *polygon_coord(_a,_b,_c)
-        ;
-
-    coords = point_coord % lit(',')
-        ;
-}
-
-template <typename OutputIterator, typename GeometryContainer>
-wkt_multi_generator<OutputIterator, GeometryContainer>::wkt_multi_generator()
-    : wkt_multi_generator::base_type(wkt)
-{
-    using boost::spirit::karma::lit;
-    using boost::spirit::karma::eps;
-    using boost::spirit::karma::_val;
-    using boost::spirit::karma::_1;
-    using boost::spirit::karma::_a;
-
-    geometry_types.add
-        (mapnik::Point,"Point")
-        (mapnik::LineString,"LineString")
-        (mapnik::Polygon,"Polygon")
-        ;
-
-    wkt =  eps(phoenix::at_c<1>(_a))[_a = _multi_type(_val)]
-        << lit("GeometryCollection(") << geometry << lit(")")
-        | eps(is_multi(_val)) << lit("Multi") << geometry_types[_1 = phoenix::at_c<0>(_a)]
-        << "(" << multi_geometry << ")"
-        |  geometry
-        ;
-
-    geometry =  -(single_geometry % lit(','))
-        ;
-
-    single_geometry = geometry_types[_1 = _type(_val)] << path
-        ;
-
-    multi_geometry = -(path % lit(','))
-        ;
-
-}
-
-template struct mapnik::util::wkt_generator<std::back_insert_iterator<std::string>, mapnik::geometry_type>;
-template struct mapnik::util::wkt_multi_generator<std::back_insert_iterator<std::string>, mapnik::geometry_container >;
-
-bool to_wkt(std::string & wkt, mapnik::geometry_type const& geom)
-{
-    typedef std::back_insert_iterator<std::string> sink_type;
-    sink_type sink(wkt);
-    wkt_generator<sink_type, mapnik::geometry_type> generator(true);
-    bool result = karma::generate(sink, generator, geom);
-    return result;
-}
-
-bool to_wkt(std::string & wkt, mapnik::geometry_container const& geom)
-{
-    typedef std::back_insert_iterator<std::string> sink_type;
-    sink_type sink(wkt);
-    wkt_multi_generator<sink_type, mapnik::geometry_container> generator;
-    bool result = karma::generate(sink, generator, geom);
-    return result;
-}
-
-}}
-
-#endif
diff --git a/src/xml_tree.cpp b/src/xml_tree.cpp
index 53cea60..b03dd91 100644
--- a/src/xml_tree.cpp
+++ b/src/xml_tree.cpp
@@ -21,27 +21,28 @@
  *****************************************************************************/
 
 //mapnik
+#include <mapnik/debug.hpp>
+#include <mapnik/make_unique.hpp>
 #include <mapnik/xml_tree.hpp>
 #include <mapnik/xml_attribute_cast.hpp>
 #include <mapnik/util/conversions.hpp>
 #include <mapnik/enumeration.hpp>
 #include <mapnik/color_factory.hpp>
-#include <mapnik/gamma_method.hpp>
 #include <mapnik/rule.hpp>
-#include <mapnik/line_symbolizer.hpp>
-#include <mapnik/line_pattern_symbolizer.hpp>
-#include <mapnik/polygon_pattern_symbolizer.hpp>
-#include <mapnik/point_symbolizer.hpp>
-#include <mapnik/markers_symbolizer.hpp>
 #include <mapnik/feature_type_style.hpp>
-#include <mapnik/text_properties.hpp>
+#include <mapnik/text/text_properties.hpp>
 #include <mapnik/config_error.hpp>
 #include <mapnik/raster_colorizer.hpp>
+#include <mapnik/expression.hpp>
+#include <mapnik/text/font_feature_settings.hpp>
+
+// stl
+#include <type_traits>
 
 namespace mapnik
 {
 
-class boolean;
+class boolean_type;
 template <typename T>
 struct name_trait
 {
@@ -53,7 +54,7 @@ struct name_trait
     // if you get here you are probably using a new type
     // in the XML file. Just add a name trait for the new
     // type below.
-    BOOST_STATIC_ASSERT( sizeof(T) == 0 );
+    static_assert( sizeof(T) == 0, "missing name_trait for the type");
 };
 
 #define DEFINE_NAME_TRAIT( type, type_name )                            \
@@ -67,7 +68,7 @@ struct name_trait
 DEFINE_NAME_TRAIT( double, "double")
 DEFINE_NAME_TRAIT( float, "float")
 DEFINE_NAME_TRAIT( unsigned, "unsigned")
-DEFINE_NAME_TRAIT( boolean, "boolean")
+DEFINE_NAME_TRAIT( boolean_type, "boolean_type")
 #ifdef BIGINT
 DEFINE_NAME_TRAIT( mapnik::value_integer, "long long" )
 #else
@@ -75,12 +76,13 @@ DEFINE_NAME_TRAIT( mapnik::value_integer, "int" )
 #endif
 DEFINE_NAME_TRAIT( std::string, "string" )
 DEFINE_NAME_TRAIT( color, "color" )
-DEFINE_NAME_TRAIT(expression_ptr, "expression_ptr" )
+DEFINE_NAME_TRAIT( expression_ptr, "expression_ptr" )
+DEFINE_NAME_TRAIT( font_feature_settings, "font-feature-settings" )
 
 template <typename ENUM, int MAX>
 struct name_trait< mapnik::enumeration<ENUM, MAX> >
 {
-    typedef enumeration<ENUM, MAX> Enum;
+    using Enum = enumeration<ENUM, MAX>;
 
     static std::string name()
     {
@@ -98,18 +100,12 @@ struct name_trait< mapnik::enumeration<ENUM, MAX> >
 
 xml_tree::xml_tree(std::string const& encoding)
     : node_(*this, "<root>"),
-      file_(),
-      tr_(encoding),
-      color_grammar(),
-      expr_grammar(tr_),
-      path_expr_grammar(),
-      transform_expr_grammar(expr_grammar),
-      image_filters_grammar()
+      file_()
 {
     node_.set_processed(true); //root node is always processed
 }
 
-void xml_tree::set_filename(std::string fn)
+void xml_tree::set_filename(std::string const& fn)
 {
     file_ = fn;
 }
@@ -119,63 +115,66 @@ std::string const& xml_tree::filename() const
     return file_;
 }
 
-xml_node &xml_tree::root()
+xml_node & xml_tree::root()
 {
     return node_;
 }
 
-const xml_node &xml_tree::root() const
+const xml_node & xml_tree::root() const
 {
     return node_;
 }
 
-xml_attribute::xml_attribute(std::string const& value_)
-    : value(value_), processed(false)
-{
-
-}
+xml_attribute::xml_attribute(const char * value_)
+    : value(value_),
+      processed(false) {}
 
 node_not_found::node_not_found(std::string const& node_name)
-    : node_name_(node_name) {}
+    : node_name_(node_name),
+      msg_() {}
 
 const char* node_not_found::what() const throw()
 {
-    return ("Node "+node_name_+ "not found").c_str();
+    msg_ = std::string("Node "+node_name_+ "not found");
+    return msg_.c_str();
 }
 
 node_not_found::~node_not_found() throw() {}
 
 
-attribute_not_found::attribute_not_found(
-    std::string const& node_name,
-    std::string const& attribute_name)
-    :
-    node_name_(node_name),
-    attribute_name_(attribute_name) {}
+attribute_not_found::attribute_not_found(std::string const& node_name,
+                                         std::string const& attribute_name)
+    : node_name_(node_name),
+      attribute_name_(attribute_name),
+      msg_() {}
 
 const char* attribute_not_found::what() const throw()
 {
-    return ("Attribute '" + attribute_name_ +"' not found in node '"+node_name_+ "'").c_str();
+    msg_ = std::string("Attribute '" + attribute_name_ +"' not found in node '"+node_name_+ "'");
+    return msg_.c_str();
 }
 
 attribute_not_found::~attribute_not_found() throw() {}
 
 more_than_one_child::more_than_one_child(std::string const& node_name)
-    : node_name_(node_name) {}
+    : node_name_(node_name),
+      msg_() {}
 
 const char* more_than_one_child::what() const throw()
 {
-    return ("More than one child node in node '" + node_name_ +"'").c_str();
+    msg_ = std::string("More than one child node in node '" + node_name_ +"'");
+    return msg_.c_str();
 }
 
 more_than_one_child::~more_than_one_child() throw() {}
 
-xml_node::xml_node(xml_tree &tree, std::string const& name, unsigned line, bool is_text)
+xml_node::xml_node(xml_tree &tree, std::string && name, unsigned line, bool is_text)
     : tree_(tree),
-      name_(name),
+      name_(std::move(name)),
       is_text_(is_text),
       line_(line),
-      processed_(false) {}
+      processed_(false),
+      ignore_(false) {}
 
 std::string xml_node::xml_text = "<xmltext>";
 
@@ -224,15 +223,19 @@ bool xml_node::is(std::string const& name) const
     return false;
 }
 
-xml_node &xml_node::add_child(std::string const& name, unsigned line, bool is_text)
+xml_node & xml_node::add_child(const char * name, unsigned line, bool is_text)
 {
-    children_.push_back(xml_node(tree_, name, line, is_text));
+    children_.emplace_back(tree_, name, line, is_text);
     return children_.back();
 }
 
-void xml_node::add_attribute(std::string const& name, std::string const& value)
+void xml_node::add_attribute(const char * name, const char * value)
 {
-    attributes_.insert(std::make_pair(name,xml_attribute(value)));
+    auto result = attributes_.emplace(name,xml_attribute(value));
+    if (!result.second)
+    {
+        MAPNIK_LOG_ERROR(xml_tree) << "ignoring duplicate attribute '" << name << "'";
+    }
 }
 
 xml_node::attribute_map const& xml_node::get_attributes() const
@@ -250,6 +253,21 @@ bool xml_node::processed() const
     return processed_;
 }
 
+void xml_node::set_ignore(bool ignore) const
+{
+    ignore_ = ignore;
+}
+
+bool xml_node::ignore() const
+{
+    return ignore_;
+}
+
+std::size_t xml_node::size() const
+{
+    return children_.size();
+}
+
 xml_node::const_iterator xml_node::begin() const
 {
     return children_.begin();
@@ -264,7 +282,7 @@ xml_node & xml_node::get_child(std::string const& name)
 {
     std::list<xml_node>::iterator itr = children_.begin();
     std::list<xml_node>::iterator end = children_.end();
-    for (; itr != end; itr++)
+    for (; itr != end; ++itr)
     {
         if (!(itr->is_text_) && itr->name_ == name)
         {
@@ -302,9 +320,15 @@ bool xml_node::has_child(std::string const& name) const
     return get_opt_child(name) != 0;
 }
 
+bool xml_node::has_attribute(std::string const& name) const
+{
+    return attributes_.count(name) == 1 ? true : false;
+}
+
 template <typename T>
 boost::optional<T> xml_node::get_opt_attr(std::string const& name) const
 {
+    if (attributes_.empty()) return boost::optional<T>();
     std::map<std::string, xml_attribute>::const_iterator itr = attributes_.find(name);
     if (itr ==  attributes_.end()) return boost::optional<T>();
     itr->second.processed = true;
@@ -334,9 +358,10 @@ T xml_node::get_attr(std::string const& name) const
     throw attribute_not_found(name_, name);
 }
 
-std::string xml_node::get_text() const
+std::string const& xml_node::get_text() const
 {
-    if (children_.size() == 0)
+    // FIXME : return boost::optional<std::string const&>
+    if (children_.empty())
     {
         if (is_text_)
         {
@@ -344,7 +369,8 @@ std::string xml_node::get_text() const
         }
         else
         {
-            return "";
+            const static std::string empty;
+            return empty;
         }
     }
     if (children_.size() == 1)
@@ -385,7 +411,7 @@ std::string xml_node::line_to_string() const
 #define compile_get_attr(T) template T xml_node::get_attr<T>(std::string const&) const; template T xml_node::get_attr<T>(std::string const&, T const&) const
 #define compile_get_value(T) template T xml_node::get_value<T>() const
 
-compile_get_opt_attr(boolean);
+compile_get_opt_attr(boolean_type);
 compile_get_opt_attr(std::string);
 compile_get_opt_attr(unsigned);
 compile_get_opt_attr(mapnik::value_integer);
@@ -400,8 +426,10 @@ compile_get_opt_attr(label_placement_e);
 compile_get_opt_attr(vertical_alignment_e);
 compile_get_opt_attr(horizontal_alignment_e);
 compile_get_opt_attr(justify_alignment_e);
+compile_get_opt_attr(text_upright_e);
 compile_get_opt_attr(halo_rasterizer_e);
 compile_get_opt_attr(expression_ptr);
+compile_get_opt_attr(font_feature_settings);
 compile_get_attr(std::string);
 compile_get_attr(filter_mode_e);
 compile_get_attr(point_placement_e);
diff --git a/tests/cpp_tests/agg_blend_src_over_test.cpp b/tests/cpp_tests/agg_blend_src_over_test.cpp
index 7fbcb18..0b4648f 100644
--- a/tests/cpp_tests/agg_blend_src_over_test.cpp
+++ b/tests/cpp_tests/agg_blend_src_over_test.cpp
@@ -1,7 +1,7 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <cstdio>
+#include <cstring>
 #include <sstream>
 #include <string>
 #include <vector>
@@ -11,8 +11,8 @@
 #include "agg_rendering_buffer.h"
 #include "agg_renderer_base.h"
 
-typedef agg::rgba8 color;
-typedef agg::order_rgba order;
+using color = agg::rgba8;
+using order = agg::order_rgba;
 
 std::string to_string(color const& c)
 {
@@ -33,7 +33,7 @@ color blend(color const& source, color const& dest, unsigned cover=255)
     dest_pre.premultiply();
 
     unsigned char* buffer = new unsigned char[size*size*stride];
-    memset(buffer, 0, size*size*stride);
+    std::memset(buffer, 0, size*size*stride);
     buffer[0] = dest_pre.r;
     buffer[1] = dest_pre.g;
     buffer[2] = dest_pre.b;
@@ -54,7 +54,7 @@ color blend(color const& source, color const& dest, unsigned cover=255)
 // agg::pixfmt_alpha_blend_rgba
 color normal_blend(color const& source, color const& dest, unsigned cover=255)
 {
-    typedef agg::renderer_base<agg::pixfmt_rgba32_pre> renderer_type;
+    using renderer_type = agg::renderer_base<agg::pixfmt_rgba32_pre>;
     unsigned stride = 4;
     unsigned size = 1;
     color source_pre = source;
@@ -63,7 +63,7 @@ color normal_blend(color const& source, color const& dest, unsigned cover=255)
     dest_pre.premultiply();
     // source buffer
     unsigned char* source_buffer = new unsigned char[size*size*stride];
-    memset(source_buffer, 0, size*size*stride);
+    std::memset(source_buffer, 0, size*size*stride);
     source_buffer[0] = source_pre.r;
     source_buffer[1] = source_pre.g;
     source_buffer[2] = source_pre.b;
@@ -73,7 +73,7 @@ color normal_blend(color const& source, color const& dest, unsigned cover=255)
 
     // destination buffer
     unsigned char* dest_buffer = new unsigned char[size*size*stride];
-    memset(dest_buffer, 0, size*size*stride);
+    std::memset(dest_buffer, 0, size*size*stride);
     dest_buffer[0] = dest_pre.r;
     dest_buffer[1] = dest_pre.g;
     dest_buffer[2] = dest_pre.b;
@@ -99,10 +99,10 @@ namespace agg {
 // before we changed A as per https://github.com/mapnik/mapnik/issues/1452
 template<class ColorT, class Order> struct comp_op_rgba_src_over2
 {
-    typedef ColorT color_type;
-    typedef Order order_type;
-    typedef typename color_type::value_type value_type;
-    typedef typename color_type::calc_type calc_type;
+    using color_type = ColorT;
+    using order_type = Order;
+    using value_type = typename color_type::value_type;
+    using calc_type = typename color_type::calc_type;
     enum base_scale_e
     {
         base_shift = color_type::base_shift,
@@ -141,73 +141,79 @@ int main(int argc, char** argv)
     }
     bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
 
-    typedef agg::comp_op_rgba_src_over2<color, agg::order_rgba> source_over_old_agg;
-    typedef agg::comp_op_rgba_src_over<color, agg::order_rgba> source_over;
+    using source_over_old_agg = agg::comp_op_rgba_src_over2<color, agg::order_rgba>;
+    using source_over = agg::comp_op_rgba_src_over<color, agg::order_rgba>;
 
-    color white(255,255,255,255);
-    color black(0,0,0,255);
+    try
+    {
+        color white(255,255,255,255);
+        color black(0,0,0,255);
 
-    BOOST_TEST_EQ( to_string(blend<source_over>(white,white)), to_string(white) );
-    BOOST_TEST_EQ( to_string(blend<source_over>(white,black)), to_string(white) );
-    BOOST_TEST_EQ( to_string(blend<source_over>(black,white)), to_string(black) );
+        BOOST_TEST_EQ( to_string(blend<source_over>(white,white)), to_string(white) );
+        BOOST_TEST_EQ( to_string(blend<source_over>(white,black)), to_string(white) );
+        BOOST_TEST_EQ( to_string(blend<source_over>(black,white)), to_string(black) );
 
-    // https://github.com/mapnik/mapnik/issues/1452#issuecomment-8154646
-    color near_white(254,254,254,254); // Source
-    color near_trans(1,1,1,1); // Dest
-    color expected_color(252,252,252,255); // expected result
-    BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(near_white,near_trans)), to_string(color(252,252,252,254)) );
-    BOOST_TEST_EQ( to_string(blend<source_over>(near_white,near_trans)), to_string(expected_color) );
-    BOOST_TEST_EQ( to_string(normal_blend(near_white,near_trans)), to_string(expected_color) );
+        // https://github.com/mapnik/mapnik/issues/1452#issuecomment-8154646
+        color near_white(254,254,254,254); // Source
+        color near_trans(1,1,1,1); // Dest
+        color expected_color(252,252,252,255); // expected result
+        BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(near_white,near_trans)), to_string(color(252,252,252,254)) );
+        BOOST_TEST_EQ( to_string(blend<source_over>(near_white,near_trans)), to_string(expected_color) );
+        BOOST_TEST_EQ( to_string(normal_blend(near_white,near_trans)), to_string(expected_color) );
 
-    // using normal_blend as expected, compare a variety of other colors
+        // using normal_blend as expected, compare a variety of other colors
 
-    {
-        color source(128,128,128,255);
-        color dest(128,128,128,255);
-        unsigned cover = 128;
-        std::string expected_str = to_string(normal_blend(source,dest,cover));
-        BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
-        BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
-    }
+        {
+            color source(128,128,128,255);
+            color dest(128,128,128,255);
+            unsigned cover = 128;
+            std::string expected_str = to_string(normal_blend(source,dest,cover));
+            BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
+            BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
+        }
 
+        {
+            color source(128,128,128,255);
+            color dest(128,128,128,255);
+            unsigned cover = 245;
+            std::string expected_str = to_string(normal_blend(source,dest,cover));
+            BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
+            BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
+        }
+
+        // commenting until I study these failures more (dane)
+        /*
+          {
+          // fails, why?
+          color source(127,127,127,127);
+          color   dest(127,127,127,127);
+          unsigned cover = 255;
+          std::string expected_str = to_string(normal_blend(source,dest,cover));
+          BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
+          BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
+          }
+
+          {
+          // fails, why?
+          color source(128,128,128,128);
+          color   dest(128,128,128,128);
+          unsigned cover = 128;
+          std::string expected_str = to_string(normal_blend(source,dest,cover));
+          BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
+          BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
+          }
+        */
+    }
+    catch (std::exception const & ex)
     {
-        color source(128,128,128,255);
-        color dest(128,128,128,255);
-        unsigned cover = 245;
-        std::string expected_str = to_string(normal_blend(source,dest,cover));
-        BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
-        BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
+        std::clog << ex.what() << "\n";
+        BOOST_TEST(false);
     }
 
-    // commenting until I study these failures more (dane)
-    /*
-      {
-      // fails, why?
-      color source(127,127,127,127);
-      color   dest(127,127,127,127);
-      unsigned cover = 255;
-      std::string expected_str = to_string(normal_blend(source,dest,cover));
-      BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
-      BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
-      }
-
-      {
-      // fails, why?
-      color source(128,128,128,128);
-      color   dest(128,128,128,128);
-      unsigned cover = 128;
-      std::string expected_str = to_string(normal_blend(source,dest,cover));
-      BOOST_TEST_EQ( to_string(blend<source_over>(source,dest,cover)), expected_str );
-      BOOST_TEST_EQ( to_string(blend<source_over_old_agg>(source,dest,cover)), expected_str );
-      }
-    */
-
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ AGG blending: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         std::clog << "C++ AGG blending: ";
         return ::boost::report_errors();
diff --git a/tests/cpp_tests/build.py b/tests/cpp_tests/build.py
index fe199e9..7311230 100644
--- a/tests/cpp_tests/build.py
+++ b/tests/cpp_tests/build.py
@@ -10,10 +10,13 @@ if not env['CPP_TESTS']:
     for cpp_test_bin in glob.glob('*-bin'):
         os.unlink(cpp_test_bin)
 else:
-    test_env['LIBS'] = copy(env['LIBMAPNIK_LIBS'])
-    test_env.AppendUnique(LIBS='mapnik')
+    test_env['LIBS'] = [env['MAPNIK_NAME']]
+    test_env.AppendUnique(LIBS=copy(env['LIBMAPNIK_LIBS']))
+    if env['RUNTIME_LINK'] == 'static' and env['PLATFORM'] == 'Linux':
+        test_env.AppendUnique(LIBS='dl')
     test_env.AppendUnique(CXXFLAGS='-g')
     test_env['CXXFLAGS'] = copy(test_env['LIBMAPNIK_CXXFLAGS'])
+    test_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
     if test_env['HAS_CAIRO']:
         test_env.PrependUnique(CPPPATH=test_env['CAIRO_CPPPATHS'])
         test_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
@@ -33,12 +36,12 @@ else:
             agg_env.Append(CPPPATH = '#deps/agg/include')
             agg_env.Append(LIBPATH = '#deps/agg')
             agg_env['CPPPATH'] = ['#deps/agg/include',env['BOOST_INCLUDES']]
-            test_program = agg_env.Program(name, source=source_files, LINKFLAGS=env['CUSTOM_LDFLAGS'])
+            test_program = agg_env.Program(name, source=source_files)
         else:
             test_env_local = test_env.Clone()
             if 'csv_parse' in cpp_test:
                 source_files += glob.glob('../../plugins/input/csv/' + '*.cpp')
-            test_program = test_env_local.Program(name, source=source_files, LINKFLAGS=env['CUSTOM_LDFLAGS'])
+            test_program = test_env_local.Program(name, source=source_files)
             Depends(test_program, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
         # build locally if installing
         if 'install' in COMMAND_LINE_TARGETS:
diff --git a/tests/cpp_tests/clipping_test.cpp b/tests/cpp_tests/clipping_test.cpp
index 6e6c6ca..c811634 100644
--- a/tests/cpp_tests/clipping_test.cpp
+++ b/tests/cpp_tests/clipping_test.cpp
@@ -1,16 +1,20 @@
-
 // mapnik
 #include <mapnik/geometry.hpp>
 #include <mapnik/util/conversions.hpp>
+#include <mapnik/util/trim.hpp>
 
 // boost
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/algorithm/string.hpp>
-#include <boost/foreach.hpp>
+#pragma GCC diagnostic pop
 
 // stl
 #include <stdexcept>
 #include <iostream>
+#include <sstream>
 #include <fstream>
 #include <vector>
 #include <algorithm>
@@ -44,7 +48,7 @@ std::string dump_path(T & path)
 std::string clip_line(mapnik::box2d<double> const& bbox,
                       mapnik::geometry_type & geom)
 {
-    typedef agg::conv_clip_polyline<mapnik::geometry_type> line_clipper;
+    using line_clipper = agg::conv_clip_polyline<mapnik::geometry_type>;
     line_clipper clipped(geom);
     clipped.clip_box(bbox.minx(),bbox.miny(),bbox.maxx(),bbox.maxy());
     return dump_path(clipped);
@@ -54,7 +58,7 @@ void parse_geom(mapnik::geometry_type & geom,
                 std::string const& geom_string) {
     std::vector<std::string> vertices;
     boost::split(vertices, geom_string, boost::is_any_of(","));
-    BOOST_FOREACH(std::string const& vert, vertices)
+    for (std::string const& vert : vertices)
     {
         std::vector<std::string> commands;
         boost::split(commands, vert, boost::is_any_of(" "));
@@ -112,7 +116,7 @@ int main(int argc, char** argv)
             parse_geom(geom,parts[1]);
             //std::clog << dump_path(geom) << "\n";
             // third part is expected, clipped geometry
-            BOOST_TEST_EQ(clip_line(bbox,geom),parts[2]);
+            BOOST_TEST_EQ(clip_line(bbox,geom),mapnik::util::trim_copy(parts[2]));
         }
         stream.close();
     }
@@ -125,9 +129,7 @@ int main(int argc, char** argv)
     {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ clipping: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     }
     else
     {
diff --git a/tests/cpp_tests/conversions_test.cpp b/tests/cpp_tests/conversions_test.cpp
index 687f2ba..bb86f71 100644
--- a/tests/cpp_tests/conversions_test.cpp
+++ b/tests/cpp_tests/conversions_test.cpp
@@ -1,18 +1,19 @@
-#include <boost/version.hpp>
 #include <mapnik/value_types.hpp>
+#include <mapnik/value.hpp>
 #include <mapnik/util/conversions.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <vector>
 #include <algorithm>
+#include <boost/unordered_map.hpp>
 
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && _MSC_VER < 1900
 #include <cstdio>
 #endif
 
 int main(int argc, char** argv)
 {
-    #if defined(_MSC_VER)
+    #if defined(_MSC_VER) && _MSC_VER < 1900
     unsigned int old = _set_output_format(_TWO_DIGIT_EXPONENT);
     #endif
     std::vector<std::string> args;
@@ -23,6 +24,7 @@ int main(int argc, char** argv)
     bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
 
     using mapnik::util::to_string;
+    using mapnik::util::string2bool;
 
     try
     {
@@ -276,19 +278,31 @@ int main(int argc, char** argv)
         to_string(out, false);
         BOOST_TEST_EQ( out, "false" );
         out.clear();
+
+        bool val = false;
+        BOOST_TEST( !string2bool("this is invalid",val) );
+        BOOST_TEST_EQ( val, false );
+        BOOST_TEST( string2bool("true",val) );
+        BOOST_TEST_EQ( val, true );
+
+        // mapnik::value hashability
+        using values_container = boost::unordered_map<mapnik::value, unsigned>;
+        values_container vc;
+        mapnik::value val2(1);
+        vc[val2] = 1;
+        BOOST_TEST_EQ( (int)vc[1], (int)1 );
+
     }
     catch (std::exception const & ex)
     {
-        std::clog << "C++ type conversions problem: " << ex.what() << "\n";
+        std::clog << ex.what() << "\n";
         BOOST_TEST(false);
     }
 
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ type conversions: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/copy_move_test.cpp b/tests/cpp_tests/copy_move_test.cpp
new file mode 100644
index 0000000..665483e
--- /dev/null
+++ b/tests/cpp_tests/copy_move_test.cpp
@@ -0,0 +1,92 @@
+#include <boost/detail/lightweight_test.hpp>
+#include <iostream>
+#include <mapnik/layer.hpp>
+#include <mapnik/map.hpp>
+#include <mapnik/color.hpp>
+#include <mapnik/datasource.hpp>
+#include <mapnik/datasource_cache.hpp>
+
+#include <vector>
+#include <algorithm>
+
+int main(int argc, char** argv)
+{
+    std::vector<std::string> args;
+    for (int i=1;i<argc;++i)
+    {
+        args.push_back(argv[i]);
+    }
+    bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
+
+    try
+    {
+        mapnik::Map m0(100,100);
+        mapnik::Map m2(200,100);
+
+        // mapnik::datasource
+        mapnik::datasource_cache::instance().register_datasources("plugins/input/shape.input");
+        mapnik::parameters p;
+        p["type"]="shape";
+        p["file"]="demo/data/boundaries";
+        p["encoding"]="latin1";
+        auto ds0 = mapnik::datasource_cache::instance().create(p);
+
+        auto ds1 = ds0; // shared ptr copy
+        BOOST_TEST(ds1 == ds0);
+        BOOST_TEST(*ds1 == *ds0);
+        ds1 = mapnik::datasource_cache::instance().create(p); // new with the same parameters
+        BOOST_TEST(ds1 != ds0);
+        BOOST_TEST(*ds1 == *ds0);
+        auto ds2 = std::move(ds1);
+        BOOST_TEST(ds2 != ds0);
+        BOOST_TEST(*ds2 == *ds0);
+
+        // mapnik::layer
+        mapnik::layer l0("test-layer");
+        l0.set_datasource(ds0);
+
+        mapnik::layer l1 = l0; // copy assignment
+        BOOST_TEST(l1 == l0);
+        mapnik::layer l2(l0); // copy ctor
+        BOOST_TEST(l2 == l0);
+        mapnik::layer l3(mapnik::layer("test-layer")); // move ctor
+        l3.set_datasource(ds2);
+
+        BOOST_TEST(l3 == l0);
+        mapnik::layer l4 = std::move(l3);
+        BOOST_TEST(l4 == l0); // move assignment
+
+        m0.add_layer(l4);
+        m0.set_background(mapnik::color("skyblue"));
+        m2.set_background(mapnik::color("skyblue"));
+
+        auto m1 = m0; //copy
+
+        BOOST_TEST(m0 == m1);
+        BOOST_TEST(m0 != m2);
+
+        m2 = m1; // copy
+        BOOST_TEST(m2 == m1);
+        m2 = std::move(m1);
+        BOOST_TEST(m2 == m0);
+        BOOST_TEST(m1 != m0);
+
+        BOOST_TEST(m0 == m2);
+    }
+    catch (std::exception const & ex)
+    {
+        std::clog << ex.what() << "\n";
+        BOOST_TEST(false);
+    }
+
+    if (!::boost::detail::test_errors())
+    {
+        if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
+        else std::clog << "C++ copy/move/assignment tests: \x1b[1;32m✓ \x1b[0m\n";
+        ::boost::detail::report_errors_remind().called_report_errors_function = true;
+    }
+    else
+    {
+        return ::boost::report_errors();
+    }
+}
diff --git a/tests/cpp_tests/data/blank.webp b/tests/cpp_tests/data/blank.webp
new file mode 100644
index 0000000..e69de29
diff --git a/tests/cpp_tests/exceptions_test.cpp b/tests/cpp_tests/exceptions_test.cpp
index 9205a93..cc731fd 100644
--- a/tests/cpp_tests/exceptions_test.cpp
+++ b/tests/cpp_tests/exceptions_test.cpp
@@ -1,9 +1,6 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
-#include <boost/make_shared.hpp>
 #include <iostream>
 #include <mapnik/projection.hpp>
-#include <mapnik/markers_symbolizer.hpp>
 #include <mapnik/map.hpp>
 #include <mapnik/save_map.hpp>
 #include <mapnik/graphics.hpp>
@@ -33,8 +30,8 @@ int main(int argc, char** argv)
     }
     bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
 
+    BOOST_TEST(set_working_dir(args));
     try {
-        BOOST_TEST(set_working_dir(args));
         mapnik::projection srs("foo");
         // to avoid unused variable warning
         srs.params();
@@ -43,13 +40,26 @@ int main(int argc, char** argv)
         BOOST_TEST(true);
     }
 
+    // https://github.com/mapnik/mapnik/issues/2170
+    try {
+        BOOST_TEST(set_working_dir(args));
+        mapnik::projection srs("+proj=longlat foo",true);
+        BOOST_TEST(srs.is_geographic());
+        BOOST_TEST(true);
+        srs.init_proj4();
+        // oddly init_proj4 does not throw with old proj/ubuntu precise
+        //BOOST_TEST(false);
+    } catch (...) {
+        BOOST_TEST(true);
+    }
+
     mapnik::Map map(256,256);
     mapnik::rule r;
     r.set_filter(mapnik::parse_expression("[foo]='bar'"));
-    r.append(mapnik::markers_symbolizer());
+    r.append(std::move(mapnik::markers_symbolizer()));
     mapnik::feature_type_style style;
-    style.add_rule(r);
-    map.insert_style("style",style);
+    style.add_rule(std::move(r));
+    map.insert_style("style", std::move(style));
 
     std::string csv_plugin("./plugins/input/csv.input");
     if (mapnik::util::exists(csv_plugin)) {
@@ -63,7 +73,7 @@ int main(int argc, char** argv)
             l.set_datasource(ds);
             l.add_style("style");
             mapnik::Map m = map;
-            m.addLayer(l);
+            m.add_layer(l);
             m.zoom_all();
             mapnik::image_32 im(m.width(),m.height());
             mapnik::agg_renderer<mapnik::image_32> ren(m,im);
@@ -94,9 +104,7 @@ int main(int argc, char** argv)
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ exceptions: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/font_registration_test.cpp b/tests/cpp_tests/font_registration_test.cpp
index d377ed0..39e568e 100644
--- a/tests/cpp_tests/font_registration_test.cpp
+++ b/tests/cpp_tests/font_registration_test.cpp
@@ -1,9 +1,12 @@
-#include <boost/version.hpp>
+#include <mapnik/font_engine_freetype.hpp>
 #include <mapnik/util/fs.hpp>
+#include <mapnik/map.hpp>
+#include <mapnik/load_map.hpp>
+#include <mapnik/debug.hpp>
 
 #include <boost/detail/lightweight_test.hpp>
+
 #include <iostream>
-#include <mapnik/font_engine_freetype.hpp>
 #include <vector>
 #include <algorithm>
 
@@ -20,18 +23,59 @@ int main(int argc, char** argv)
 
     try
     {
+        mapnik::logger logger;
+        mapnik::logger::severity_type original_severity = logger.get_severity();
 
         BOOST_TEST(set_working_dir(args));
 
+
+        // grab references to global statics of registered/cached fonts
+        auto const& global_mapping = mapnik::freetype_engine::get_mapping();
+        auto const& global_cache = mapnik::freetype_engine::get_cache();
+
+        // mapnik.Map object has parallel structure for localized fonts
+        mapnik::Map m(1,1);
+        auto const& local_mapping = m.get_font_file_mapping();
+        auto const& local_cache = m.get_font_memory_cache();
+
+        // should be empty to start
+        BOOST_TEST( global_mapping.empty() );
+        BOOST_TEST( global_cache.empty() );
+        BOOST_TEST( local_mapping.empty() );
+        BOOST_TEST( local_cache.empty() );
+
         std::string fontdir("fonts/");
 
         BOOST_TEST( mapnik::util::exists( fontdir ) );
         BOOST_TEST( mapnik::util::is_directory( fontdir ) );
 
-        std::vector<std::string> face_names;
+        // test map cached fonts
+        BOOST_TEST( m.register_fonts(fontdir , false ) );
+        BOOST_TEST( m.get_font_memory_cache().size() == 0 );
+        BOOST_TEST( m.get_font_file_mapping().size() == 1 );
+        BOOST_TEST( m.load_fonts() );
+        BOOST_TEST( m.get_font_memory_cache().size() == 1 );
+        BOOST_TEST( m.register_fonts(fontdir , true ) );
+        BOOST_TEST( m.get_font_file_mapping().size() == 22 );
+        BOOST_TEST( m.load_fonts() );
+        BOOST_TEST( m.get_font_memory_cache().size() == 22 );
+
+        // copy discards memory cache but not file mapping
+        mapnik::Map m2(m);
+        BOOST_TEST( m2.get_font_memory_cache().size() == 0 );
+        BOOST_TEST( m2.get_font_file_mapping().size() == 22 );
+        BOOST_TEST( m2.load_fonts() );
+        BOOST_TEST( m2.get_font_memory_cache().size() == 22 );
+
+        // test font-directory from XML
+        mapnik::Map m3(1,1);
+        mapnik::load_map_string(m3,"<Map font-directory=\"fonts/\"></Map>");
+        BOOST_TEST( m3.get_font_memory_cache().size() == 0 );
+        BOOST_TEST( m3.load_fonts() );
+        BOOST_TEST( m3.get_font_memory_cache().size() == 1 );
 
+        std::vector<std::string> face_names;
         std::string foo("foo");
-
         // fake directories
         BOOST_TEST( !mapnik::freetype_engine::register_fonts(foo , true ) );
         face_names = mapnik::freetype_engine::face_names();
@@ -41,6 +85,8 @@ int main(int argc, char** argv)
         BOOST_TEST( face_names.size() == 0 );
 
         // directories without fonts
+        // silence warnings here by altering the logging severity
+        logger.set_severity(mapnik::logger::none);
         std::string src("src");
         // an empty directory will not return true
         // we need to register at least one font and not fail on any
@@ -58,44 +104,103 @@ int main(int argc, char** argv)
         BOOST_TEST( mapnik::freetype_engine::register_fonts("tests/data/fonts/intentionally-broken.ttf") == false );
         BOOST_TEST( mapnik::freetype_engine::face_names().size() == 0 );
 
+        // now restore the original severity
+        logger.set_severity(original_severity);
+
         // register unifont, since we know it sits in the root fonts/ dir
         BOOST_TEST( mapnik::freetype_engine::register_fonts(fontdir) );
         face_names = mapnik::freetype_engine::face_names();
-        //std::clog << "number of registered fonts: " << face_names.size() << std::endl;
         BOOST_TEST( face_names.size() > 0 );
         BOOST_TEST( face_names.size() == 1 );
 
         // re-register unifont, should not have any affect
         BOOST_TEST( mapnik::freetype_engine::register_fonts(fontdir, false) );
         face_names = mapnik::freetype_engine::face_names();
-        //std::clog << "number of registered fonts: " << face_names.size() << std::endl;
         BOOST_TEST( face_names.size() == 1 );
 
-        // register a single dejavu font
+        // single dejavu font in separate location
         std::string dejavu_bold_oblique("tests/data/fonts/DejaVuSansMono-BoldOblique.ttf");
         BOOST_TEST( mapnik::freetype_engine::register_font(dejavu_bold_oblique) );
         face_names = mapnik::freetype_engine::face_names();
-        //std::clog << "number of registered fonts: " << face_names.size() << std::endl;
         BOOST_TEST( face_names.size() == 2 );
 
+        // now, inspect font mapping and confirm the correct 'DejaVu Sans Mono Bold Oblique' is registered
+        using font_file_mapping = std::map<std::string, std::pair<int,std::string> >;
+        font_file_mapping const& name2file = mapnik::freetype_engine::get_mapping();
+        bool found_dejavu = false;
+        for (auto const& item : name2file)
+        {
+            if (item.first == "DejaVu Sans Mono Bold Oblique")
+            {
+                found_dejavu = true;
+                BOOST_TEST( item.second.first == 0 );
+                BOOST_TEST( item.second.second == dejavu_bold_oblique );
+            }
+        }
+        BOOST_TEST( found_dejavu );
+
         // recurse to find all dejavu fonts
         BOOST_TEST( mapnik::freetype_engine::register_fonts(fontdir, true) );
         face_names = mapnik::freetype_engine::face_names();
-        //std::clog << "number of registered fonts: " << face_names.size() << std::endl;
         BOOST_TEST( face_names.size() == 22 );
+
+        // we should have re-registered 'DejaVu Sans Mono Bold Oblique' again,
+        // but now at a new path
+        bool found_dejavu2 = false;
+        for (auto const& item : name2file)
+        {
+            if (item.first == "DejaVu Sans Mono Bold Oblique")
+            {
+                found_dejavu2 = true;
+                BOOST_TEST( item.second.first == 0 );
+                // path should be different
+                BOOST_TEST( item.second.second != dejavu_bold_oblique );
+            }
+        }
+        BOOST_TEST( found_dejavu2 );
+
+        // now that global registry is populated
+        // now test that a map only loads new fonts
+        mapnik::Map m4(1,1);
+        BOOST_TEST( m4.register_fonts(fontdir , true ) );
+        BOOST_TEST( m4.get_font_memory_cache().size() == 0 );
+        BOOST_TEST( m4.get_font_file_mapping().size() == 22 );
+        BOOST_TEST( !m4.load_fonts() );
+        BOOST_TEST( m4.get_font_memory_cache().size() == 0 );
+        BOOST_TEST( m4.register_fonts(dejavu_bold_oblique, false) );
+        BOOST_TEST( m4.load_fonts() );
+        BOOST_TEST( m4.get_font_memory_cache().size() == 1 );
+
+        // check that we can correctly read a .ttc containing
+        // multiple valid faces
+        // https://github.com/mapnik/mapnik/issues/2274
+        BOOST_TEST( mapnik::freetype_engine::register_font("tests/data/fonts/NotoSans-Regular.ttc") );
+        face_names = mapnik::freetype_engine::face_names();
+        BOOST_TEST( face_names.size() == 24 );
+
+        // now blindly register as many system fonts as possible
+        // the goal here to make sure we don't crash
+        // linux
+        mapnik::freetype_engine::register_fonts("/usr/share/fonts/", true);
+        mapnik::freetype_engine::register_fonts("/usr/local/share/fonts/", true);
+        // osx
+        mapnik::freetype_engine::register_fonts("/Library/Fonts/", true);
+        mapnik::freetype_engine::register_fonts("/System/Library/Fonts/", true);
+        // windows
+        mapnik::freetype_engine::register_fonts("C:\\Windows\\Fonts", true);
+        face_names = mapnik::freetype_engine::face_names();
+        BOOST_TEST( face_names.size() > 22 );
     }
     catch (std::exception const & ex)
     {
-        std::clog << "C++ fonts registration problem: " << ex.what() << "\n";
+        std::clog << ex.what() << "\n";
         BOOST_TEST(false);
     }
 
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ fonts registration: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/fontset_runtime_test.cpp b/tests/cpp_tests/fontset_runtime_test.cpp
index 436b152..1b7cc59 100644
--- a/tests/cpp_tests/fontset_runtime_test.cpp
+++ b/tests/cpp_tests/fontset_runtime_test.cpp
@@ -1,7 +1,7 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <mapnik/memory_datasource.hpp>
+#include <mapnik/datasource_cache.hpp>
 #include <mapnik/feature.hpp>
 #include <mapnik/feature_factory.hpp>
 #include <mapnik/unicode.hpp>
@@ -17,8 +17,16 @@
 #include <mapnik/image_util.hpp>
 #include <mapnik/color_factory.hpp>
 #include <mapnik/save_map.hpp>
+#include <mapnik/value_types.hpp>
+#include <mapnik/symbolizer.hpp>
+#include <mapnik/text/placements/dummy.hpp>
+#include <mapnik/text/formatting/text.hpp>
 #include <vector>
 #include <algorithm>
+#include <mapnik/make_unique.hpp>
+
+// icu - for memory cleanup (to make valgrind happy)
+#include "unicode/uclean.h"
 
 #include "utils.hpp"
 
@@ -36,48 +44,55 @@ int main(int argc, char** argv)
 
         // create a renderable map with a fontset and a text symbolizer
         // and do not register any fonts, to ensure the error thrown is reasonable
-        mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+        mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
         ctx->push("name");
         mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx,1));
         mapnik::transcoder tr("utf-8");
-        UnicodeString ustr = tr.transcode("hello world!");
+        mapnik::value_unicode_string ustr = tr.transcode("hello world!");
         feature->put("name",ustr);
-        mapnik::geometry_type * pt = new mapnik::geometry_type(mapnik::Point);
+        auto pt = std::make_unique<mapnik::geometry_type>(mapnik::geometry_type::types::Point);
         pt->move_to(128,128);
-        feature->add_geometry(pt);
-        mapnik::datasource_ptr memory_ds = boost::make_shared<mapnik::memory_datasource>();
-        mapnik::memory_datasource *cache = dynamic_cast<mapnik::memory_datasource *>(memory_ds.get());
-        cache->push(feature);
+        feature->add_geometry(pt.release());
+
+        mapnik::parameters params;
+        params["type"]="memory";
+        auto ds = std::make_shared<mapnik::memory_datasource>(params);
+        ds->push(feature);
         mapnik::Map m(256,256);
         mapnik::font_set fontset("fontset");
         // NOTE: this is a valid font, but will fail because none are registered
         fontset.add_face_name("DejaVu Sans Book");
         m.insert_fontset("fontset", fontset);
         mapnik::layer lyr("layer");
-        lyr.set_datasource(memory_ds);
+        lyr.set_datasource(ds);
         lyr.add_style("style");
-        m.addLayer(lyr);
+        m.add_layer(lyr);
         mapnik::feature_type_style the_style;
-        mapnik::rule the_rule;
-        mapnik::text_symbolizer text_sym(mapnik::parse_expression("[name]"),10,mapnik::color(0,0,0));
-        text_sym.set_fontset(fontset);
-        the_rule.append(text_sym);
-        the_style.add_rule(the_rule);
-        m.insert_style("style",the_style );
+        mapnik::rule r;
+        mapnik::text_symbolizer text_sym;
+        mapnik::text_placements_ptr placement_finder = std::make_shared<mapnik::text_placements_dummy>();
+        placement_finder->defaults.format_defaults.face_name = "DejaVu Sans Book";
+        placement_finder->defaults.format_defaults.text_size = 10.0;
+        placement_finder->defaults.format_defaults.fill = mapnik::color(0,0,0);
+        placement_finder->defaults.format_defaults.fontset = fontset;
+        placement_finder->defaults.set_format_tree(std::make_shared<mapnik::formatting::text_node>(mapnik::parse_expression("[name]")));
+        mapnik::put<mapnik::text_placements_ptr>(text_sym, mapnik::keys::text_placements_, placement_finder);
+        r.append(std::move(text_sym));
+        the_style.add_rule(std::move(r));
+        m.insert_style("style", std::move(the_style) );
         m.zoom_to_box(mapnik::box2d<double>(-256,-256,
                                             256,256));
         mapnik::image_32 buf(m.width(),m.height());
         mapnik::agg_renderer<mapnik::image_32> ren(m,buf);
         ren.apply();
     } catch (std::exception const& ex) {
-        BOOST_TEST_EQ(std::string(ex.what()),std::string("No valid font face could be loaded for font set: 'fontset'"));
+        BOOST_TEST_EQ(std::string(ex.what()),std::string("Unable to find specified font face 'DejaVu Sans Book' in font set: 'fontset'"));
     }
+    u_cleanup();
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ fontset runtime: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/geometry_converters_test.cpp b/tests/cpp_tests/geometry_converters_test.cpp
index 2444371..23ff74d 100644
--- a/tests/cpp_tests/geometry_converters_test.cpp
+++ b/tests/cpp_tests/geometry_converters_test.cpp
@@ -1,29 +1,31 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <vector>
 #include <algorithm>
 #include "utils.hpp"
 
-#if BOOST_VERSION >= 104700
 #include <mapnik/layer.hpp>
 #include <mapnik/feature_type_style.hpp>
+#include <mapnik/rule.hpp>
 #include <mapnik/debug.hpp>
-#include <mapnik/ctrans.hpp>
+#include <mapnik/view_transform.hpp>
+#include <mapnik/feature.hpp>
 #include <mapnik/vertex_converters.hpp>
 #include <mapnik/geometry.hpp>
 #include <mapnik/wkt/wkt_factory.hpp>
+#include <mapnik/wkt/wkt_grammar_impl.hpp>
 #include <mapnik/well_known_srs.hpp>
-#include <mapnik/util/geometry_to_wkb.hpp>
-#include <mapnik/util/geometry_to_wkt.hpp>
-#include <mapnik/util/geometry_to_svg.hpp>
+#include <mapnik/wkt/wkt_generator_grammar.hpp>
+#include <mapnik/wkt/wkt_generator_grammar_impl.hpp>
+#include <mapnik/projection.hpp>
+#include <mapnik/proj_transform.hpp>
 
 // stl
 #include <stdexcept>
 
 struct output_geometry_backend
 {
-    output_geometry_backend(boost::ptr_vector<mapnik::geometry_type> & paths, mapnik::eGeomType type)
+    output_geometry_backend(mapnik::geometry_container & paths, mapnik::geometry_type::types type)
         : paths_(paths),
           type_(type) {}
 
@@ -32,17 +34,17 @@ struct output_geometry_backend
     {
         mapnik::vertex2d vtx(mapnik::vertex2d::no_init);
         path.rewind(0);
-        std::auto_ptr<mapnik::geometry_type> geom_ptr(new mapnik::geometry_type(type_));
+        std::unique_ptr<mapnik::geometry_type> geom_ptr(new mapnik::geometry_type(type_));
 
         while ((vtx.cmd = path.vertex(&vtx.x, &vtx.y)) != mapnik::SEG_END)
         {
             //std::cerr << vtx.x << "," << vtx.y << "   cmd=" << vtx.cmd << std::endl;
             geom_ptr->push_vertex(vtx.x, vtx.y, (mapnik::CommandType)vtx.cmd);
         }
-        paths_.push_back(geom_ptr);
+        paths_.push_back(geom_ptr.release());
     }
-    boost::ptr_vector<mapnik::geometry_type> &  paths_;
-    mapnik::eGeomType type_;
+    mapnik::geometry_container &  paths_;
+    mapnik::geometry_type::types type_;
 };
 
 boost::optional<std::string> linestring_bbox_clipping(mapnik::box2d<double> bbox,
@@ -54,34 +56,36 @@ boost::optional<std::string> linestring_bbox_clipping(mapnik::box2d<double> bbox
     projection dst(MAPNIK_LONGLAT_PROJ);
     proj_transform prj_trans(src,dst);
     line_symbolizer sym;
-    CoordTransform t(bbox.width(),bbox.height(), bbox);
-    boost::ptr_vector<mapnik::geometry_type> output_paths;
-    output_geometry_backend backend(output_paths, mapnik::LineString);
+    view_transform t(bbox.width(),bbox.height(), bbox);
+    mapnik::geometry_container output_paths;
+    output_geometry_backend backend(output_paths, mapnik::geometry_type::types::LineString);
 
-    typedef boost::mpl::vector<clip_line_tag> conv_types;
-    vertex_converter<box2d<double>, output_geometry_backend, line_symbolizer,
-        CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(bbox, backend, sym, t, prj_trans, tr, 1.0);
+    mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
+    mapnik::feature_impl f(ctx,0);
+    vertex_converter<output_geometry_backend,clip_line_tag>
+        converter(bbox, backend, sym, t, prj_trans, tr, f, attributes(), 1.0);
 
     converter.set<clip_line_tag>();
 
-    boost::ptr_vector<geometry_type> p;
+    mapnik::geometry_container p;
     if (!mapnik::from_wkt(wkt_in , p))
     {
         throw std::runtime_error("Failed to parse WKT");
     }
 
-    BOOST_FOREACH( geometry_type & geom, p)
+    for (geometry_type & geom : p)
     {
         converter.apply(geom);
     }
 
-    std::string wkt_out;
-    if (mapnik::util::to_wkt(wkt_out, output_paths))
+    using sink_type = std::back_insert_iterator<std::string>;
+    std::string wkt; // Use Python String directly ?
+    sink_type sink(wkt);
+    static const mapnik::wkt::wkt_multi_generator<sink_type, mapnik::geometry_container> generator;
+    if (boost::spirit::karma::generate(sink, generator, output_paths))
     {
-        return boost::optional<std::string>(wkt_out);
+        return boost::optional<std::string>(wkt);
     }
-
     return boost::optional<std::string>();
 }
 
@@ -94,37 +98,39 @@ boost::optional<std::string> polygon_bbox_clipping(mapnik::box2d<double> bbox,
     projection dst(MAPNIK_LONGLAT_PROJ);
     proj_transform prj_trans(src,dst);
     polygon_symbolizer sym;
-    CoordTransform t(bbox.width(),bbox.height(), bbox);
-    boost::ptr_vector<mapnik::geometry_type> output_paths;
-    output_geometry_backend backend(output_paths, mapnik::Polygon);
+    view_transform t(bbox.width(),bbox.height(), bbox);
+    mapnik::geometry_container output_paths;
+    output_geometry_backend backend(output_paths, mapnik::geometry_type::types::Polygon);
 
-    typedef boost::mpl::vector<clip_poly_tag> conv_types;
-    vertex_converter<box2d<double>, output_geometry_backend, polygon_symbolizer,
-        CoordTransform, proj_transform, agg::trans_affine, conv_types>
-        converter(bbox, backend, sym, t, prj_trans, tr, 1.0);
+    mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
+    mapnik::feature_impl f(ctx,0);
+    vertex_converter<output_geometry_backend, clip_poly_tag>
+        converter(bbox, backend, sym, t, prj_trans, tr, f, attributes(), 1.0);
 
     converter.set<clip_poly_tag>();
 
-    boost::ptr_vector<geometry_type> p;
+    mapnik::geometry_container p;
     if (!mapnik::from_wkt(wkt_in , p))
     {
         throw std::runtime_error("Failed to parse WKT");
     }
 
-    BOOST_FOREACH( geometry_type & geom, p)
+    for (geometry_type & geom : p)
     {
         converter.apply(geom);
     }
 
-    std::string wkt_out;
-    if (mapnik::util::to_wkt(wkt_out, output_paths))
+    using sink_type = std::back_insert_iterator<std::string>;
+    std::string wkt; // Use Python String directly ?
+    sink_type sink(wkt);
+    static const mapnik::wkt::wkt_multi_generator<sink_type, mapnik::geometry_container> generator;
+    if (boost::spirit::karma::generate(sink, generator, output_paths))
     {
-        return boost::optional<std::string>(wkt_out);
+        return boost::optional<std::string>(wkt);
     }
 
     return boost::optional<std::string>();
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -137,55 +143,58 @@ int main(int argc, char** argv)
 
     BOOST_TEST(set_working_dir(args));
 
-#if BOOST_VERSION >= 104700
-
-    // LineString/bbox clipping
+    try
     {
-        std::string wkt_in("LineString(0 0,200 200)");
-        boost::optional<std::string> result = linestring_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
-        BOOST_TEST(result);
-        BOOST_TEST_EQ(*result,std::string("LineString(50 50,150 150)"));
-    }
-    // Polygon/bbox clipping
-#if 0
-    // these tests will fail
-    {
-        std::string wkt_in("Polygon((50 50,150 50,150 150,50 150,50 50))");
-        boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
-        BOOST_TEST(result);
-        BOOST_TEST_EQ(*result,std::string("Polygon((50 50,150 50,150 150,50 150,50 50))"));
-    }
+        // LineString/bbox clipping
+        {
+            std::string wkt_in("LineString(0 0,200 200)");
+            boost::optional<std::string> result = linestring_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
+            BOOST_TEST(result);
+            BOOST_TEST_EQ(*result,std::string("LineString(50 50,150 150)"));
+        }
+        // Polygon/bbox clipping
+    #if 0
+        // these tests will fail
+        {
+            std::string wkt_in("Polygon((50 50,150 50,150 150,50 150,50 50))");
+            boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
+            BOOST_TEST(result);
+            BOOST_TEST_EQ(*result,std::string("Polygon((50 50,150 50,150 150,50 150,50 50))"));
+        }
 
-    {
-        std::string wkt_in("Polygon((60 60,140 60,140 160,60 140,60 60))");
-        boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
-        BOOST_TEST(result);
-        BOOST_TEST_EQ(*result,std::string("Polygon((60 60,140 60,140 160,60 140,60 60))"));
-    }
+        {
+            std::string wkt_in("Polygon((60 60,140 60,140 160,60 140,60 60))");
+            boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
+            BOOST_TEST(result);
+            BOOST_TEST_EQ(*result,std::string("Polygon((60 60,140 60,140 160,60 140,60 60))"));
+        }
 
-    {
-        std::string wkt_in("Polygon((0 0,10 0,10 10,0 10,0 0))");
-        boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
-        BOOST_TEST(result);
-        BOOST_TEST_EQ(*result, std::string("GeometryCollection EMPTY"));
+        {
+            std::string wkt_in("Polygon((0 0,10 0,10 10,0 10,0 0))");
+            boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
+            BOOST_TEST(result);
+            BOOST_TEST_EQ(*result, std::string("GeometryCollection EMPTY"));
+        }
+        {
+            std::string wkt_in("Polygon((0 0,100 200,200 0,0 0 ))");
+            boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
+            BOOST_TEST(result);
+            BOOST_TEST_EQ(*result,std::string("Polygon((50 50,50 100,75 150,125 150,150 100,150 50,50 50))"));
+        }
+    #endif
     }
+    catch (std::exception const & ex)
     {
-        std::string wkt_in("Polygon((0 0,100 200,200 0,0 0 ))");
-        boost::optional<std::string> result = polygon_bbox_clipping(mapnik::box2d<double>(50,50,150,150),wkt_in);
-        BOOST_TEST(result);
-        BOOST_TEST_EQ(*result,std::string("Polygon((50 50,50 100,75 150,125 150,150 100,150 50,50 50))"));
+        std::clog << ex.what() << "\n";
+        BOOST_TEST(false);
     }
-#endif
 
-#endif
 
     if (!::boost::detail::test_errors())
     {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ geometry conversions: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     }
     else
     {
diff --git a/tests/cpp_tests/image_io_test.cpp b/tests/cpp_tests/image_io_test.cpp
index 06c229b..8ed34ea 100644
--- a/tests/cpp_tests/image_io_test.cpp
+++ b/tests/cpp_tests/image_io_test.cpp
@@ -1,5 +1,3 @@
-#include <boost/version.hpp>
-
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <mapnik/image_reader.hpp>
@@ -23,77 +21,103 @@ int main(int argc, char** argv)
     boost::optional<std::string> type;
     try
     {
+        mapnik::image_data_32 im(256,256);
+        mapnik::image_data_32::pixel_type * data = im.getData();
+        mapnik::image_data_32 * im_ptr = new mapnik::image_data_32(im.width(),im.height(),data);
+        mapnik::image_data_32::pixel_type * same_data = im_ptr->getData();
+        BOOST_TEST(data == same_data);
+        delete im_ptr;
+        BOOST_TEST(data == same_data);
         BOOST_TEST(set_working_dir(args));
 
+#if defined(HAVE_JPEG)
         should_throw = "./tests/cpp_tests/data/blank.jpg";
         BOOST_TEST( mapnik::util::exists( should_throw ) );
         type = mapnik::type_from_filename(should_throw);
         BOOST_TEST( type );
         try
         {
-            std::auto_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
-            if (reader.get()) BOOST_TEST( false );
+            std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
+            BOOST_TEST( false );
         }
         catch (std::exception const&)
         {
             BOOST_TEST( true );
         }
+#endif
 
+#if defined(HAVE_PNG)
         should_throw = "./tests/cpp_tests/data/blank.png";
         BOOST_TEST( mapnik::util::exists( should_throw ) );
         type = mapnik::type_from_filename(should_throw);
         BOOST_TEST( type );
         try
         {
-            std::auto_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
-            if (reader.get()) BOOST_TEST( false );
+            std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
+            BOOST_TEST( false );
         }
         catch (std::exception const&)
         {
             BOOST_TEST( true );
         }
 
-        should_throw = "./tests/cpp_tests/data/blank.tiff";
+        should_throw = "./tests/data/images/xcode-CgBI.png";
         BOOST_TEST( mapnik::util::exists( should_throw ) );
         type = mapnik::type_from_filename(should_throw);
         BOOST_TEST( type );
         try
         {
-            std::auto_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
-            if (reader.get()) BOOST_TEST( false );
+            std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
+            BOOST_TEST( false );
         }
         catch (std::exception const&)
         {
             BOOST_TEST( true );
         }
+#endif
 
-        should_throw = "./tests/data/images/xcode-CgBI.png";
+#if defined(HAVE_TIFF)
+        should_throw = "./tests/cpp_tests/data/blank.tiff";
         BOOST_TEST( mapnik::util::exists( should_throw ) );
         type = mapnik::type_from_filename(should_throw);
         BOOST_TEST( type );
         try
         {
-            std::auto_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
-            if (reader.get()) BOOST_TEST( false );
+            std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
+            BOOST_TEST( false );
         }
         catch (std::exception const&)
         {
             BOOST_TEST( true );
         }
+#endif
 
+#if defined(HAVE_WEBP)
+        should_throw = "./tests/cpp_tests/data/blank.webp";
+        BOOST_TEST( mapnik::util::exists( should_throw ) );
+        type = mapnik::type_from_filename(should_throw);
+        BOOST_TEST( type );
+        try
+        {
+            std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(should_throw,*type));
+            BOOST_TEST( false );
+        }
+        catch (std::exception const&)
+        {
+            BOOST_TEST( true );
+        }
+#endif
     }
     catch (std::exception const & ex)
     {
-        std::clog << "C++ image i/o problem: " << ex.what() << "\n";
+        std::clog << ex.what() << "\n";
         BOOST_TEST(false);
     }
 
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ image i/o: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/image_painted_test.cpp b/tests/cpp_tests/image_painted_test.cpp
new file mode 100644
index 0000000..946c211
--- /dev/null
+++ b/tests/cpp_tests/image_painted_test.cpp
@@ -0,0 +1,85 @@
+#include <iostream>
+
+#include <boost/detail/lightweight_test.hpp>
+
+#include <mapnik/map.hpp>
+#include <mapnik/layer.hpp>
+#include <mapnik/rule.hpp>
+#include <mapnik/feature_type_style.hpp>
+#include <mapnik/graphics.hpp>
+#include <mapnik/datasource_cache.hpp>
+#include <mapnik/agg_renderer.hpp>
+#include <mapnik/expression.hpp>
+
+int main(int argc, char** argv)
+{
+    std::vector<std::string> args;
+    for (int i = 1; i < argc; ++i)
+    {
+        args.push_back(argv[i]);
+    }
+    bool quiet = std::find(args.begin(), args.end(), "-q") != args.end();
+
+    using namespace mapnik;
+
+    try
+    {
+        datasource_cache::instance().register_datasources("plugins/input/csv.input");
+
+        Map m(256, 256);
+
+        feature_type_style lines_style;
+        {
+            rule r;
+            line_symbolizer line_sym;
+            r.append(std::move(line_sym));
+            lines_style.add_rule(std::move(r));
+        }
+        m.insert_style("lines", std::move(lines_style));
+
+        feature_type_style markers_style;
+        {
+            rule r;
+            r.set_filter(parse_expression("False"));
+            markers_symbolizer mark_sym;
+            r.append(std::move(mark_sym));
+            markers_style.add_rule(std::move(r));
+        }
+        m.insert_style("markers", std::move(markers_style));
+
+        parameters p;
+        p["type"] = "csv";
+        p["separator"] = "|";
+        p["inline"] = "wkt\nLINESTRING(-10  0, 0 20, 10 0, 15 5)";
+
+        layer lyr("layer");
+        lyr.set_datasource(datasource_cache::instance().create(p));
+        lyr.add_style("lines");
+        lyr.add_style("markers");
+        m.add_layer(lyr);
+
+        m.zoom_all();
+
+        image_32 image(m.width(), m.height());
+        agg_renderer<image_32> ren(m, image);
+        ren.apply();
+
+        BOOST_TEST_EQ(image.painted(), true);
+    }
+    catch (std::exception const & ex)
+    {
+        std::clog << ex.what() << std::endl;
+        BOOST_TEST(false);
+    }
+
+    if (::boost::detail::test_errors())
+    {
+        return ::boost::report_errors();
+    }
+    else
+    {
+        if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
+        else std::clog << "C++ image painted: \x1b[1;32m✓ \x1b[0m\n";
+        ::boost::detail::report_errors_remind().called_report_errors_function = true;
+    }
+}
diff --git a/tests/cpp_tests/label_algo_test.cpp b/tests/cpp_tests/label_algo_test.cpp
index d997d19..819fd52 100644
--- a/tests/cpp_tests/label_algo_test.cpp
+++ b/tests/cpp_tests/label_algo_test.cpp
@@ -1,4 +1,3 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <mapnik/geometry.hpp>
@@ -15,39 +14,58 @@ int main(int argc, char** argv)
     }
     bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
 
-    // reused these for simplicity
-    double x,y;
-
-    // single point
-    mapnik::geometry_type pt(mapnik::Point);
-    pt.move_to(10,10);
-    BOOST_TEST( mapnik::label::centroid(pt, x, y) );
-    BOOST_TEST( x == 10 );
-    BOOST_TEST( y == 10 );
-
-    // two points
-    pt.move_to(20,20);
-    BOOST_TEST( mapnik::label::centroid(pt, x, y) );
-    BOOST_TEST_EQ( x, 15 );
-    BOOST_TEST_EQ( y, 15 );
-
-    // line with two verticies
-    mapnik::geometry_type line(mapnik::LineString);
-    line.move_to(0,0);
-    line.move_to(50,50);
-    BOOST_TEST( mapnik::label::centroid(line, x, y) );
-    BOOST_TEST( x == 25 );
-    BOOST_TEST( y == 25 );
-
-    // TODO - centroid and interior should be equal but they appear not to be (check largest)
-    // MULTIPOLYGON(((-52 40,-60 32,-68 40,-60 48,-52 40)),((-60 50,-80 30,-100 49.9999999999999,-80.0000000000001 70,-60 50)),((-52 60,-60 52,-68 60,-60 68,-52 60)))
+    try
+    {
+        // reused these for simplicity
+        double x,y;
+
+        // single point
+        mapnik::geometry_type pt(mapnik::geometry_type::types::Point);
+        pt.move_to(10,10);
+        BOOST_TEST( mapnik::label::centroid(pt, x, y) );
+        BOOST_TEST( x == 10 );
+        BOOST_TEST( y == 10 );
+
+        // two points
+        pt.move_to(20,20);
+        BOOST_TEST( mapnik::label::centroid(pt, x, y) );
+        BOOST_TEST_EQ( x, 15 );
+        BOOST_TEST_EQ( y, 15 );
+
+        // line with two verticies
+        mapnik::geometry_type line(mapnik::geometry_type::types::LineString);
+        line.move_to(0,0);
+        line.line_to(50,50);
+        BOOST_TEST( mapnik::label::centroid(line, x, y) );
+        BOOST_TEST( x == 25 );
+        BOOST_TEST( y == 25 );
+
+        // TODO - centroid and interior should be equal but they appear not to be (check largest)
+        // MULTIPOLYGON(((-52 40,-60 32,-68 40,-60 48,-52 40)),((-60 50,-80 30,-100 49.9999999999999,-80.0000000000001 70,-60 50)),((-52 60,-60 52,-68 60,-60 68,-52 60)))
+
+        // hit tests
+        mapnik::geometry_type pt_hit(mapnik::geometry_type::types::Point);
+        pt_hit.move_to(10,10);
+        BOOST_TEST( mapnik::label::hit_test(pt_hit, 10, 10, 0.1) );
+        BOOST_TEST( !mapnik::label::hit_test(pt_hit, 9, 9, 0) );
+        BOOST_TEST( mapnik::label::hit_test(pt_hit, 9, 9, 1.5) );
+        mapnik::geometry_type line_hit(mapnik::geometry_type::types::LineString);
+        line_hit.move_to(0,0);
+        line_hit.line_to(50,50);
+        BOOST_TEST( mapnik::label::hit_test(line_hit, 0, 0, 0.001) );
+        BOOST_TEST( !mapnik::label::hit_test(line_hit, 1, 1, 0) );
+        BOOST_TEST( mapnik::label::hit_test(line_hit, 1, 1, 1.001) );
+    }
+    catch (std::exception const & ex)
+    {
+        std::clog << ex.what() << "\n";
+        BOOST_TEST(false);
+    }
 
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ label algorithms: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/line_offset_test.cpp b/tests/cpp_tests/line_offset_test.cpp
new file mode 100644
index 0000000..9e5732b
--- /dev/null
+++ b/tests/cpp_tests/line_offset_test.cpp
@@ -0,0 +1,236 @@
+// mapnik
+#include <mapnik/coord.hpp>
+#include <mapnik/text/vertex_cache.hpp>
+
+// boost
+#include <boost/detail/lightweight_test.hpp>
+
+// stl
+#include <stdexcept>
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <tuple>
+#include <algorithm>
+
+// test
+#include "utils.hpp"
+
+struct fake_path
+{
+    using coord_type = std::tuple<double, double, unsigned>;
+    using cont_type = std::vector<coord_type>;
+    cont_type vertices_;
+    cont_type::iterator itr_;
+
+    fake_path(std::initializer_list<double> l)
+        : fake_path(l.begin(), l.size()) {
+    }
+
+    fake_path(std::vector<double> const &v)
+        : fake_path(v.begin(), v.size()) {
+    }
+
+    template <typename Itr>
+    fake_path(Itr itr, size_t sz) {
+        size_t num_coords = sz >> 1;
+        vertices_.reserve(num_coords);
+
+        for (size_t i = 0; i < num_coords; ++i) {
+            double x = *itr++;
+            double y = *itr++;
+            unsigned cmd = (i == 0) ? agg::path_cmd_move_to : agg::path_cmd_line_to;
+            vertices_.push_back(std::make_tuple(x, y, cmd));
+        }
+        itr_ = vertices_.begin();
+    }
+
+    unsigned vertex(double *x, double *y) {
+        if (itr_ == vertices_.end()) {
+            return agg::path_cmd_stop;
+        }
+        *x = std::get<0>(*itr_);
+        *y = std::get<1>(*itr_);
+        unsigned cmd = std::get<2>(*itr_);
+        ++itr_;
+        return cmd;
+    }
+
+    void rewind(unsigned) {
+        itr_ = vertices_.begin();
+    }
+};
+
+double dist(mapnik::pixel_position const &a,
+            mapnik::pixel_position const &b)
+{
+    mapnik::pixel_position d = a - b;
+    return std::sqrt(d.x*d.x + d.y*d.y);
+}
+
+namespace boost { namespace detail {
+
+template<class T, class U>
+inline void test_leq_impl(char const * expr1, char const * expr2,
+                          char const * file, int line, char const * function,
+                          T const & t, U const & u)
+{
+    if( t > u )
+    {
+        BOOST_LIGHTWEIGHT_TEST_OSTREAM
+            << file << "(" << line << "): test '" << expr1 << " == " << expr2
+            << "' failed in function '" << function << "': "
+            << "'" << t << "' > '" << u << "'" << std::endl;
+        ++test_errors();
+    }
+}
+
+} }
+
+#define BOOST_TEST_LEQ(expr1,expr2) ( ::boost::detail::test_leq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
+
+void test_simple_segment(double const &offset)
+{
+    const double dx = 0.01;
+    fake_path path = {0, 0, 1, 0}, off_path = {0, offset, 1, offset};
+    mapnik::vertex_cache vc(path), off_vc(off_path);
+
+    vc.reset(); vc.next_subpath();
+    off_vc.reset(); off_vc.next_subpath();
+
+    while (vc.move(dx)) {
+        double pos = vc.linear_position();
+        double off_pos = off_vc.position_closest_to(vc.current_position());
+        BOOST_TEST_LEQ(std::abs(pos - off_pos), 1.0e-6);
+    }
+}
+
+void test_straight_line(double const &offset) {
+    const double dx = 0.01;
+    fake_path path = {0, 0, 0.1, 0, 0.9, 0, 1, 0},
+        off_path = {0, offset, 0.4, offset, 0.6, offset, 1, offset};
+    mapnik::vertex_cache vc(path), off_vc(off_path);
+
+    vc.reset(); vc.next_subpath();
+    off_vc.reset(); off_vc.next_subpath();
+
+    while (vc.move(dx)) {
+        double pos = vc.linear_position();
+        double off_pos = off_vc.position_closest_to(vc.current_position());
+        BOOST_TEST_LEQ(std::abs(pos - off_pos), 1.0e-6);
+    }
+}
+
+void test_offset_curve(double const &offset) {
+    const double dx = 0.01;
+    const double r = (1.0 + offset);
+
+    std::vector<double> pos, off_pos;
+    const size_t max_i = 1000;
+    for (size_t i = 0; i <= max_i; ++i) {
+        double x = M_PI * double(i) / max_i;
+        pos.push_back(-std::cos(x)); pos.push_back(std::sin(x));
+        off_pos.push_back(-r * std::cos(x)); off_pos.push_back(r * std::sin(x));
+    }
+
+    fake_path path(pos), off_path(off_pos);
+    mapnik::vertex_cache vc(path), off_vc(off_path);
+
+    vc.reset(); vc.next_subpath();
+    off_vc.reset(); off_vc.next_subpath();
+
+    while (vc.move(dx)) {
+        double pos = vc.linear_position();
+        double off_pos = off_vc.position_closest_to(vc.current_position());
+        {
+            mapnik::vertex_cache::scoped_state s(off_vc);
+            off_vc.move(off_pos);
+            BOOST_TEST_LEQ(dist(vc.current_position(), off_vc.current_position()), (1.001 * offset));
+        }
+        BOOST_TEST_LEQ(std::abs((pos / vc.length()) - (off_pos / off_vc.length())), 1.0e-3);
+    }
+}
+
+void test_s_shaped_curve(double const &offset) {
+    const double dx = 0.01;
+    const double r = (1.0 + offset);
+    const double r2 = (1.0 - offset);
+
+    std::vector<double> pos, off_pos;
+    const size_t max_i = 1000;
+    for (size_t i = 0; i <= max_i; ++i) {
+        double x = M_PI * double(i) / max_i;
+        pos.push_back(-std::cos(x) - 1); pos.push_back(std::sin(x));
+        off_pos.push_back(-r * std::cos(x) - 1); off_pos.push_back(r * std::sin(x));
+    }
+    for (size_t i = 0; i <= max_i; ++i) {
+        double x = M_PI * double(i) / max_i;
+        pos.push_back(-std::cos(x) + 1); pos.push_back(-std::sin(x));
+        off_pos.push_back(-r2 * std::cos(x) + 1); off_pos.push_back(-r2 * std::sin(x));
+    }
+
+    fake_path path(pos), off_path(off_pos);
+    mapnik::vertex_cache vc(path), off_vc(off_path);
+
+    vc.reset(); vc.next_subpath();
+    off_vc.reset(); off_vc.next_subpath();
+
+    while (vc.move(dx)) {
+        double off_pos = off_vc.position_closest_to(vc.current_position());
+        {
+            mapnik::vertex_cache::scoped_state s(off_vc);
+            off_vc.move(off_pos);
+            BOOST_TEST_LEQ(dist(vc.current_position(), off_vc.current_position()), (1.002 * offset));
+        }
+    }
+}
+
+int main(int argc, char** argv)
+{
+    std::vector<std::string> args;
+    for (int i=1;i<argc;++i)
+    {
+        args.push_back(argv[i]);
+    }
+    bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
+
+    try {
+
+        BOOST_TEST(set_working_dir(args));
+
+        std::vector<double> offsets = { 0.01, 0.02, 0.1, 0.2 };
+        for (double offset : offsets) {
+            // test simple straight line segment - should be easy to
+            // find the correspondance here.
+            test_simple_segment(offset);
+
+            // test straight line consisting of more than one segment.
+            test_straight_line(offset);
+
+            // test an offset outer curve
+            test_offset_curve(offset);
+
+            // test an offset along an S-shaped curve, which is harder
+            // because the positions along the offset are no longer
+            // linearly related to the positions along the original
+            // curve.
+            test_s_shaped_curve(offset);
+        }
+    }
+    catch (std::exception const& ex)
+    {
+        std::cerr << ex.what() << "\n";
+        BOOST_TEST(false);
+    }
+
+    if (!::boost::detail::test_errors())
+    {
+        if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
+        else std::clog << "C++ line offset: \x1b[1;32m✓ \x1b[0m\n";
+        ::boost::detail::report_errors_remind().called_report_errors_function = true;
+    }
+    else
+    {
+        return ::boost::report_errors();
+    }
+}
diff --git a/tests/cpp_tests/map_request_test.cpp b/tests/cpp_tests/map_request_test.cpp
index fabfd34..6af08c0 100644
--- a/tests/cpp_tests/map_request_test.cpp
+++ b/tests/cpp_tests/map_request_test.cpp
@@ -1,4 +1,3 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
 
 #include <iostream>
@@ -6,8 +5,7 @@
 #include <mapnik/load_map.hpp>
 #include <mapnik/agg_renderer.hpp>
 #if defined(HAVE_CAIRO)
-#include <mapnik/cairo_renderer.hpp>
-#include <mapnik/cairo_context.hpp>
+#include <mapnik/cairo/cairo_renderer.hpp>
 #endif
 #include <mapnik/graphics.hpp>
 #include <mapnik/image_util.hpp>
@@ -17,29 +15,28 @@
 #include <mapnik/image_reader.hpp>
 #include <mapnik/scale_denominator.hpp>
 #include <mapnik/feature_style_processor.hpp>
-#include <boost/foreach.hpp>
+
 #include <vector>
 #include <algorithm>
-
 #include "utils.hpp"
 
 bool compare_images(std::string const& src_fn,std::string const& dest_fn)
 {
     using namespace mapnik;
-    std::auto_ptr<mapnik::image_reader> reader1(mapnik::get_image_reader(dest_fn,"png"));
+    std::unique_ptr<mapnik::image_reader> reader1(mapnik::get_image_reader(dest_fn,"png"));
     if (!reader1.get())
     {
         throw mapnik::image_reader_exception("Failed to load: " + dest_fn);
     }
-    boost::shared_ptr<image_32> image_ptr1 = boost::make_shared<image_32>(reader1->width(),reader1->height());
+    std::shared_ptr<image_32> image_ptr1 = std::make_shared<image_32>(reader1->width(),reader1->height());
     reader1->read(0,0,image_ptr1->data());
 
-    std::auto_ptr<mapnik::image_reader> reader2(mapnik::get_image_reader(src_fn,"png"));
+    std::unique_ptr<mapnik::image_reader> reader2(mapnik::get_image_reader(src_fn,"png"));
     if (!reader2.get())
     {
         throw mapnik::image_reader_exception("Failed to load: " + src_fn);
     }
-    boost::shared_ptr<image_32> image_ptr2 = boost::make_shared<image_32>(reader2->width(),reader2->height());
+    std::shared_ptr<image_32> image_ptr2 = std::make_shared<image_32>(reader2->width(),reader2->height());
     reader2->read(0,0,image_ptr2->data());
 
     image_data_32 const& dest = image_ptr1->data();
@@ -77,7 +74,7 @@ int main(int argc, char** argv)
 
         BOOST_TEST(set_working_dir(args));
 
-        mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
+        mapnik::datasource_cache::instance().register_datasources("plugins/input/csv.input");
         mapnik::freetype_engine::register_fonts("./fonts", true );
         mapnik::Map m(256,256);
         mapnik::load_map(m,"./tests/data/good_maps/marker-text-line.xml",false);
@@ -116,7 +113,7 @@ int main(int argc, char** argv)
         mapnik::projection map_proj(m.srs(),true);
         double scale_denom = mapnik::scale_denominator(req.scale(),map_proj.is_geographic());
         scale_denom *= scale_factor;
-        BOOST_FOREACH ( mapnik::layer const& lyr, m.layers() )
+        for (mapnik::layer const& lyr : m.layers() )
         {
             if (lyr.visible(scale_denom))
             {
@@ -161,9 +158,7 @@ int main(int argc, char** argv)
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ Map Request rendering hook: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/params_test.cpp b/tests/cpp_tests/params_test.cpp
index a02e546..081cc3b 100644
--- a/tests/cpp_tests/params_test.cpp
+++ b/tests/cpp_tests/params_test.cpp
@@ -1,4 +1,3 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <mapnik/value_types.hpp>
@@ -6,7 +5,6 @@
 #include <mapnik/boolean.hpp>
 #include <vector>
 #include <algorithm>
-#include <boost/variant.hpp>
 
 int main(int argc, char** argv)
 {
@@ -17,74 +15,81 @@ int main(int argc, char** argv)
     }
     bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
 
-    mapnik::parameters params;
+    try
+    {
+        mapnik::parameters params;
 
-    // true
-    //params["bool"] = true;
-    //BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == true));
+        // true
+        params["bool"] = mapnik::value_integer(true);
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == true));
 
-    params["bool"] = "true";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == true));
+        params["bool"] = "true";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == true));
 
-    //params["bool"] = 1;
-    //BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == true));
+        params["bool"] = mapnik::value_integer(1);
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == true));
 
-    //params["bool"] = "1";
-    //BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == true));
+        params["bool"] = "1";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == true));
 
-    params["bool"] = "True";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == true));
+        params["bool"] = "True";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == true));
 
-    params["bool"] = "on";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == true));
+        params["bool"] = "on";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == true));
 
-    params["bool"] = "yes";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == true));
+        params["bool"] = "yes";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == true));
 
-    // false
-    //params["bool"] = false;
-    //BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == false) );
+        // false
+        params["bool"] = mapnik::value_integer(false);
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == false) );
 
-    params["bool"] = "false";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == false) );
+        params["bool"] = "false";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == false) );
 
-    //params["bool"] = 0;
-    //BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == false));
+        params["bool"] = mapnik::value_integer(0);
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == false));
 
-    //params["bool"] = "0";
-    //BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == false));
+        params["bool"] = "0";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == false));
 
-    params["bool"] = "False";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == false));
+        params["bool"] = "False";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == false));
 
-    params["bool"] = "off";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == false));
+        params["bool"] = "off";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == false));
 
-    params["bool"] = "no";
-    BOOST_TEST( (params.get<mapnik::boolean>("bool") && *params.get<mapnik::boolean>("bool") == false));
+        params["bool"] = "no";
+        BOOST_TEST( (params.get<mapnik::boolean_type>("bool") && *params.get<mapnik::boolean_type>("bool") == false));
 
-    // strings
-    params["string"] = "hello";
-    BOOST_TEST( (params.get<std::string>("string") && *params.get<std::string>("string") == "hello") );
+        // strings
+        params["string"] = "hello";
+        BOOST_TEST( (params.get<std::string>("string") && *params.get<std::string>("string") == "hello") );
 
-    // int
-    params["int"] = mapnik::value_integer(1);
-    BOOST_TEST( (params.get<mapnik::value_integer>("int") && *params.get<mapnik::value_integer>("int") == 1) );
+        // int
+        params["int"] = mapnik::value_integer(1);
+        BOOST_TEST( (params.get<mapnik::value_integer>("int") && *params.get<mapnik::value_integer>("int") == 1) );
 
-    // double
-    params["double"] = 1.5;
-    BOOST_TEST( (params.get<double>("double") && *params.get<double>("double") == 1.5) );
+        // double
+        params["double"] = 1.5;
+        BOOST_TEST( (params.get<double>("double") && *params.get<double>("double") == 1.5) );
 
-    // value_null
-    params["null"] = mapnik::value_null();
-    //BOOST_TEST( (params.get<mapnik::value_null>("null")/* && *params.get<mapnik::value_null>("null") == mapnik::value_null()*/) );
+        // value_null
+        params["null"] = mapnik::value_null();
+        // https://github.com/mapnik/mapnik/issues/2471
+        //BOOST_TEST( (params.get<mapnik::value_null>("null") && *params.get<mapnik::value_null>("null") == mapnik::value_null()) );
+    }
+    catch (std::exception const& ex)
+    {
+        std::cerr << ex.what() << "\n";
+        BOOST_TEST(false);
+    }
 
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
         else std::clog << "C++ parameters: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/cpp_tests/run b/tests/cpp_tests/run
new file mode 100755
index 0000000..34a15fc
--- /dev/null
+++ b/tests/cpp_tests/run
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+cd "$( dirname "${BASH_SOURCE[0]}" )"
+cd ../../
+source ./localize.sh
+
+failures=0
+if [ -n "$(find tests/cpp_tests/ -maxdepth 1 -name '*-bin' -print -quit)" ]; then
+    for FILE in tests/cpp_tests/*-bin; do 
+        ${FILE} -q -d .;
+      failures=$((failures+$?))
+    done
+    echo
+else
+    echo 'warning: no c++ tests found'
+fi
+exit $failures
+
diff --git a/tests/cpp_tests/svg_renderer_tests/background_color_test.cpp b/tests/cpp_tests/svg_renderer_tests/background_color_test.cpp
deleted file mode 100644
index 7ff2058..0000000
--- a/tests/cpp_tests/svg_renderer_tests/background_color_test.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-#define BOOST_TEST_MODULE background_color_test
-
-/*
- * This test module contains several generators for
- * the implementation of a background color in SVG
- * using a rectangle.
- */
-
-// boost.test
-#include <boost/test/included/unit_test.hpp>
-
-// boost.spirit
-#include <boost/spirit/include/karma.hpp>
-#include <boost/spirit/repository/include/karma_confix.hpp>
-
-// boost
-#include <boost/fusion/tuple.hpp>
-
-// stl
-#include <string>
-#include <sstream>
-
-namespace karma = boost::spirit::karma;
-namespace repository = boost::spirit::repository;
-namespace fusion = boost::fusion;
-using namespace karma;
-
-struct F
-{
-    F() :
-        x(0),
-        y(0),
-        width(100),
-        height(100),
-        bgcolor("#ffffff"),
-        expected_output("<rect x=\"0\" y=\"0\" width=\"100px\" height=\"100px\" style=\"fill: #ffffff\"/>") {}
-
-    ~F() {}
-
-    const int x;
-    const int y;
-    const int width;
-    const int height;
-    const std::string bgcolor;
-    const std::string expected_output;
-    std::ostringstream actual_output;
-};
-
-/*
- * This test case uses one compound generator to generate the SVG element.
- *
- * It makes only one call to the format function and uses an ostringstream
- * as its output destination.
- *
- * The attribute values are provided as arguments to the format function.
- * The disadvantage of this is that the number of arguments is limited
- * by the preprocessor constant SPIRIT_ARGUMENTS_LIMIT, whose default
- * value is 10. The advantage is that they can be of any type (as long
- * as they are compatible with the corresponding generator type).
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_test_case, F)
-{
-    actual_output
-        << format(
-            "<rect x=\"" << int_ << "\" "
-            << "y=\"" << int_ << "\" "
-            << "width=\"" << int_ << string << "\" "
-            << "height=\"" << int_ << string << "\" "
-            << "style=\"fill: " << string << "\""
-            << "/>",
-            x, y, width, "px", height, "px", bgcolor);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
-
-/*
- * This test case uses confix to wrap each xml attribute's value
- * inside double quotes.
- *
- * Notice that the generators' attribute list contains also tuples.
- * Tuples are needed to specify each confix's attributes that contain
- * more than one generator, like confix()[int_ << string] (this
- * generator needs a tuple: tuple<int, string>).
- *
- * The difference between this generator and the one in test case
- * 'bgcolor_stream_test_case' is the use of less << operators and
- * a more clean handling of double quotes.
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_confix_test_case, F)
-{
-    using repository::confix;
-    using fusion::tuple;
-
-    actual_output
-        << format(
-            "<rect x=" << confix('"', '"')[int_]
-            << " y=" << confix('"', '"')[int_]
-            << " width=" << confix('"', '"')[int_ << string]
-            << " height=" << confix('"', '"')[int_ << string]
-            << " style=" << confix('"', '"')["fill: " << string]
-            << "/>",
-            x, y, tuple<int, std::string>(width, "px"), tuple<int, std::string>(height, "px"), bgcolor);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
-
-/*
- * This test case generates the angle brackets of the svg/xml tag
- * using confix. notice that a confix generator can be part of another
- * confix generator's expression.
- *
- * Notice also that the attribute list is the same as in
- * 'bgcolor_stream_confix_test_case'. From this one can see that each
- * generator is meant to have a list of attributes if it has more than one.
- *
- * If the generator is nested inside another generator, the former's attribute
- * list will be another list (a tuple, for example) inside the latter's.
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_confix_complete_test_case, F)
-{
-    using repository::confix;
-    using fusion::tuple;
-
-    actual_output
-        << format(
-            confix('<', "/>")[
-                "rect x=" << confix('"', '"')[int_]
-                << " y=" << confix('"', '"')[int_]
-                << " width=" << confix('"', '"')[int_ << string]
-                << " height=" << confix('"', '"')[int_ << string]
-                << " style=" << confix('"', '"')["fill: " << string]],
-            x, y, tuple<int, std::string>(width, "px"), tuple<int, std::string>(height, "px"), bgcolor);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
-
-/*
- * This test case uses an iterator to receive the generated
- * output. The iterator comes from the std::ostringstream that's
- * been used in the previous test cases, so the output is
- * actually generated into the stream.
- *
- * Using iterators instead of streams has the advantage that
- * more advanced concepts are implemented in karma for them,
- * like rules and grammars.
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_iterator_test_case, F)
-{
-    using repository::confix;
-    using fusion::tuple;
-
-    std::ostream_iterator<char> actual_output_iterator(actual_output);
-
-    generate(
-        actual_output_iterator,
-        confix("<", "/>")[
-            "rect x=" << confix('"', '"')[int_]
-            << " y=" << confix('"', '"')[int_]
-            << " width=" << confix('"', '"')[int_ << string]
-            << " height=" << confix('"', '"')[int_ << string]
-            << " style=" << confix('"', '"')["fill: " << string]],
-        x, y, tuple<int, std::string>(width, "px"), tuple<int, std::string>(height, "px"), bgcolor);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
diff --git a/tests/cpp_tests/svg_renderer_tests/build.py b/tests/cpp_tests/svg_renderer_tests/build.py
deleted file mode 100644
index ff4278b..0000000
--- a/tests/cpp_tests/svg_renderer_tests/build.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import os
-import glob
-from copy import copy
-
-Import ('env')
-
-headers = env['CPPPATH'] 
-
-filesystem = 'boost_filesystem%s' % env['BOOST_APPEND']
-system = 'boost_system%s' % env['BOOST_APPEND']
-regex = 'boost_regex%s' % env['BOOST_APPEND']
-
-libraries =  copy(env['LIBMAPNIK_LIBS'])
-libraries.append('mapnik')
-
-for cpp_test in glob.glob('*_test.cpp'):
-    test_program = env.Program(cpp_test.replace('.cpp',''), [cpp_test], CPPPATH=headers, LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
-    Depends(test_program, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
diff --git a/tests/cpp_tests/svg_renderer_tests/combined_test.cpp b/tests/cpp_tests/svg_renderer_tests/combined_test.cpp
deleted file mode 100644
index ccc06a3..0000000
--- a/tests/cpp_tests/svg_renderer_tests/combined_test.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#define BOOST_TEST_MODULE combined_tests
-
-// boost.test
-#include <boost/test/included/unit_test.hpp>
-
-// mapnik
-#include <mapnik/map.hpp>
-#include <mapnik/svg/output/svg_renderer.hpp>
-#include <mapnik/color_factory.hpp>
-
-// std
-#include <string>
-#include <sstream>
-#include <iterator>
-
-/**
- * This test case tests all the generators inside svg_renderer,
- * verifying the correctness of the whole SVG document.
- *
- * The test sets the svg_renderer object with a simple Map that
- * has only its dimensions specified and calls the apply()
- * method to produce the output.
- *
- * The output stream is a stringstream (the output is generated
- * into a stringstream).
- */
-BOOST_AUTO_TEST_CASE(combined_test_case)
-{
-    using namespace mapnik;
-    typedef svg_renderer<std::ostream_iterator<char> > svg_ren;
-
-    Map map(800, 600);
-    map.set_background(parse_color("white"));
-
-    std::ostringstream output_stream;
-    std::ostream_iterator<char> output_stream_iterator(output_stream);
-    svg_ren renderer(map, output_stream_iterator);
-    renderer.apply();
-
-    /*std::string expected_output =
-      svg_ren::XML_DECLARATION
-      + "\n"
-      + svg_ren::SVG_DTD
-      + "\n"
-      + "<svg width=\"800px\" height=\"600px\" version=\"1.1\" xmlns=\""
-      + svg_ren::SVG_NAMESPACE_URL
-      + "\">"
-      +"\n"
-      +"<rect x=\"0\" y=\"0\" width=\"800px\" height=\"600px\" style=\"fill: #ffffff\"/>"
-      +"\n"
-      +"</svg>";
-
-      std::string actual_output = output_stream.str();
-      BOOST_CHECK_EQUAL(actual_output, expected_output);
-    */
-}
-
diff --git a/tests/cpp_tests/svg_renderer_tests/compilation_test.cpp b/tests/cpp_tests/svg_renderer_tests/compilation_test.cpp
deleted file mode 100644
index e1356a4..0000000
--- a/tests/cpp_tests/svg_renderer_tests/compilation_test.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#define BOOST_TEST_MODULE compile_test
-
-// boost.test
-#include <boost/test/included/unit_test.hpp>
-
-// mapnik
-#include <mapnik/map.hpp>
-#include <mapnik/svg/output/svg_renderer.hpp>
-
-// std
-#include <sstream>
-#include <iterator>
-
-/**
- * This test is meant to see if the empty
- * implementation of SVG renderer compiles
- * and runs when using the inherited methods.
- */
-BOOST_AUTO_TEST_CASE(compile_test_case)
-{
-    using namespace mapnik;
-
-    Map map(800, 600);
-
-    try
-    {
-        std::ostringstream output_stream;
-        std::ostream_iterator<char> output_stream_iterator(output_stream);
-        svg_renderer<std::ostream_iterator<char> > renderer(map, output_stream_iterator);
-        renderer.apply();
-    }
-    catch(...)
-    {
-        BOOST_FAIL("Empty implementation throws exception.");
-    }
-}
diff --git a/tests/cpp_tests/svg_renderer_tests/file_output_test.cpp b/tests/cpp_tests/svg_renderer_tests/file_output_test.cpp
deleted file mode 100644
index d460be3..0000000
--- a/tests/cpp_tests/svg_renderer_tests/file_output_test.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-#define BOOST_TEST_MODULE file_output_test
-
-/*
- * This test module contains test cases that
- * verify the correct generation of SVG output
- * using file streams as destinations.
- */
-
-// boost.test
-#include <boost/test/included/unit_test.hpp>
-
-// boost.filesystem
-#include <boost/filesystem.hpp>
-
-// mapnik
-#include <mapnik/map.hpp>
-#include <mapnik/svg/output/svg_renderer.hpp>
-#include <mapnik/color_factory.hpp>
-
-// stl
-#include <fstream>
-#include <iterator>
-
-namespace fs = boost::filesystem;
-
-/*
- * This test case tests the generation of an SVG document
- * using a file stream. It uses svg_renderer parameterized
- * with an std::ofstream as a target for output.
- *
- * It's important to notice that svg_renderer doesn't create
- * or close the file stream, but leaves that task to the client.
- *
- * The test fails if the file can't be created and succeeds
- * otherwise.
- *
- * Note: the file is created in the directory in which the
- * test is run.
- */
-BOOST_AUTO_TEST_CASE(file_output_test_case)
-{
-    using namespace mapnik;
-    typedef svg_renderer<std::ostream_iterator<char> > svg_ren;
-
-    Map map(800, 600);
-    map.set_background(parse_color("blue"));
-
-    std::string output_filename = "file_output_test_case.svg";
-    std::ofstream output_stream(output_filename.c_str());
-
-    if(output_stream)
-    {
-        std::ostream_iterator<char> output_stream_iterator(output_stream);
-
-        svg_ren renderer(map, output_stream_iterator);
-        renderer.apply();
-
-        output_stream.close();
-
-        fs::path output_filename_path =
-            fs::system_complete(fs::path(".")) / fs::path(output_filename);
-
-        BOOST_CHECK_MESSAGE(fs::exists(output_filename_path), "File '"+output_filename_path.string()+"' was created.");
-    }
-    else
-    {
-        BOOST_FAIL("Could not create create/open file '"+output_filename+"'.");
-    }
-}
diff --git a/tests/cpp_tests/svg_renderer_tests/path_element_test.cpp b/tests/cpp_tests/svg_renderer_tests/path_element_test.cpp
deleted file mode 100644
index 9a9ab23..0000000
--- a/tests/cpp_tests/svg_renderer_tests/path_element_test.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-#define BOOST_TEST_MODULE path_element_tests
-
-// boost.test
-#include <boost/test/included/unit_test.hpp>
-
-// boost.filesystem
-#include <boost/filesystem.hpp>
-
-// mapnik
-#include <mapnik/map.hpp>
-#include <mapnik/rule.hpp>
-#include <mapnik/feature_type_style.hpp>
-#include <mapnik/svg/output/svg_renderer.hpp>
-#include <mapnik/datasource_cache.hpp>
-#include <mapnik/expression.hpp>
-#include <mapnik/color_factory.hpp>
-
-// stl
-#include <fstream>
-#include <iterator>
-
-namespace fs = boost::filesystem;
-using namespace mapnik;
-
-void prepare_map(Map& m)
-{
-    const std::string mapnik_dir("/usr/local/lib/mapnik/");
-    std::cout << " looking for 'shape.input' plugin in... " << mapnik_dir << "input/" << "\n";
-    datasource_cache::instance().register_datasources(mapnik_dir + "input/");
-
-    // create styles
-
-    // Provinces (polygon)
-    feature_type_style provpoly_style;
-
-    rule provpoly_rule_on;
-    provpoly_rule_on.set_filter(parse_expression("[NAME_EN] = 'Ontario'"));
-    provpoly_rule_on.append(polygon_symbolizer(color(250, 190, 183)));
-    provpoly_style.add_rule(provpoly_rule_on);
-
-    rule provpoly_rule_qc;
-    provpoly_rule_qc.set_filter(parse_expression("[NOM_FR] = 'Québec'"));
-    provpoly_rule_qc.append(polygon_symbolizer(color(217, 235, 203)));
-    provpoly_style.add_rule(provpoly_rule_qc);
-
-    m.insert_style("provinces",provpoly_style);
-
-    // Provinces (polyline)
-    feature_type_style provlines_style;
-
-    stroke provlines_stk (color(0,0,0),1.0);
-    provlines_stk.add_dash(8, 4);
-    provlines_stk.add_dash(2, 2);
-    provlines_stk.add_dash(2, 2);
-
-    rule provlines_rule;
-    provlines_rule.append(line_symbolizer(provlines_stk));
-    provlines_style.add_rule(provlines_rule);
-
-    m.insert_style("provlines",provlines_style);
-
-    // Drainage
-    feature_type_style qcdrain_style;
-
-    rule qcdrain_rule;
-    qcdrain_rule.set_filter(parse_expression("[HYC] = 8"));
-    qcdrain_rule.append(polygon_symbolizer(color(153, 204, 255)));
-    qcdrain_style.add_rule(qcdrain_rule);
-
-    m.insert_style("drainage",qcdrain_style);
-
-    // Roads 3 and 4 (The "grey" roads)
-    feature_type_style roads34_style;
-    rule roads34_rule;
-    roads34_rule.set_filter(parse_expression("[CLASS] = 3 or [CLASS] = 4"));
-    stroke roads34_rule_stk(color(171,158,137),2.0);
-    roads34_rule_stk.set_line_cap(ROUND_CAP);
-    roads34_rule_stk.set_line_join(ROUND_JOIN);
-    roads34_rule.append(line_symbolizer(roads34_rule_stk));
-    roads34_style.add_rule(roads34_rule);
-
-    m.insert_style("smallroads",roads34_style);
-
-    // Roads 2 (The thin yellow ones)
-    feature_type_style roads2_style_1;
-    rule roads2_rule_1;
-    roads2_rule_1.set_filter(parse_expression("[CLASS] = 2"));
-    stroke roads2_rule_stk_1(color(171,158,137),4.0);
-    roads2_rule_stk_1.set_line_cap(ROUND_CAP);
-    roads2_rule_stk_1.set_line_join(ROUND_JOIN);
-    roads2_rule_1.append(line_symbolizer(roads2_rule_stk_1));
-    roads2_style_1.add_rule(roads2_rule_1);
-
-    m.insert_style("road-border", roads2_style_1);
-
-    feature_type_style roads2_style_2;
-    rule roads2_rule_2;
-    roads2_rule_2.set_filter(parse_expression("[CLASS] = 2"));
-    stroke roads2_rule_stk_2(color(255,250,115),2.0);
-    roads2_rule_stk_2.set_line_cap(ROUND_CAP);
-    roads2_rule_stk_2.set_line_join(ROUND_JOIN);
-    roads2_rule_2.append(line_symbolizer(roads2_rule_stk_2));
-    roads2_style_2.add_rule(roads2_rule_2);
-
-    m.insert_style("road-fill", roads2_style_2);
-
-    // Roads 1 (The big orange ones, the highways)
-    feature_type_style roads1_style_1;
-    rule roads1_rule_1;
-    roads1_rule_1.set_filter(parse_expression("[CLASS] = 1"));
-    stroke roads1_rule_stk_1(color(188,149,28),7.0);
-    roads1_rule_stk_1.set_line_cap(ROUND_CAP);
-    roads1_rule_stk_1.set_line_join(ROUND_JOIN);
-    roads1_rule_1.append(line_symbolizer(roads1_rule_stk_1));
-    roads1_style_1.add_rule(roads1_rule_1);
-    m.insert_style("highway-border", roads1_style_1);
-
-    feature_type_style roads1_style_2;
-    rule roads1_rule_2;
-    roads1_rule_2.set_filter(parse_expression("[CLASS] = 1"));
-    stroke roads1_rule_stk_2(color(242,191,36),5.0);
-    roads1_rule_stk_2.set_line_cap(ROUND_CAP);
-    roads1_rule_stk_2.set_line_join(ROUND_JOIN);
-    roads1_rule_2.append(line_symbolizer(roads1_rule_stk_2));
-    roads1_style_2.add_rule(roads1_rule_2);
-    m.insert_style("highway-fill", roads1_style_2);
-
-    // layers
-    // Provincial  polygons
-    {
-        parameters p;
-        p["type"]="shape";
-        p["file"]="../../../demo/data/boundaries";
-
-        layer lyr("Provinces");
-        lyr.set_datasource(datasource_cache::instance().create(p));
-        lyr.add_style("provinces");
-        m.addLayer(lyr);
-    }
-
-    // Drainage
-    {
-        parameters p;
-        p["type"]="shape";
-        p["file"]="../../../demo/data/qcdrainage";
-        layer lyr("Quebec Hydrography");
-        lyr.set_datasource(datasource_cache::instance().create(p));
-        lyr.add_style("drainage");
-        m.addLayer(lyr);
-    }
-
-    {
-        parameters p;
-        p["type"]="shape";
-        p["file"]="../../../demo/data/ontdrainage";
-
-        layer lyr("Ontario Hydrography");
-        lyr.set_datasource(datasource_cache::instance().create(p));
-        lyr.add_style("drainage");
-        m.addLayer(lyr);
-    }
-
-    // Provincial boundaries
-    {
-        parameters p;
-        p["type"]="shape";
-        p["file"]="../../../demo/data/boundaries_l";
-        layer lyr("Provincial borders");
-        lyr.set_datasource(datasource_cache::instance().create(p));
-        lyr.add_style("provlines");
-        m.addLayer(lyr);
-    }
-
-    // Roads
-    {
-        parameters p;
-        p["type"]="shape";
-        p["file"]="../../../demo/data/roads";
-        layer lyr("Roads");
-        lyr.set_datasource(datasource_cache::instance().create(p));
-        lyr.add_style("smallroads");
-        lyr.add_style("road-border");
-        lyr.add_style("road-fill");
-        lyr.add_style("highway-border");
-        lyr.add_style("highway-fill");
-
-        m.addLayer(lyr);
-    }
-}
-
-void render_to_file(Map const& m, const std::string output_filename)
-{
-    std::ofstream output_stream(output_filename.c_str());
-
-    if(output_stream)
-    {
-        typedef svg_renderer<std::ostream_iterator<char> > svg_ren;
-
-        std::ostream_iterator<char> output_stream_iterator(output_stream);
-
-        svg_ren renderer(m, output_stream_iterator);
-        renderer.apply();
-
-        output_stream.close();
-
-        fs::path output_filename_path =
-            fs::system_complete(fs::path(".")) / fs::path(output_filename);
-
-        BOOST_CHECK_MESSAGE(fs::exists(output_filename_path),
-                            "File '"+output_filename_path.string()+"' was created.");
-    }
-    else
-    {
-        BOOST_FAIL("Could not create create/open file '"+output_filename+"'.");
-    }
-}
-
-BOOST_AUTO_TEST_CASE(path_element_test_case_1)
-{
-    Map m(800,600);
-    m.set_background(parse_color("steelblue"));
-
-    prepare_map(m);
-
-    //m.zoom_to_box(box2d<double>(1405120.04127408, -247003.813399447,
-    //1706357.31328276, -25098.593149577));
-    m.zoom_all();
-    render_to_file(m, "path_element_test_case_1.svg");
-}
diff --git a/tests/cpp_tests/svg_renderer_tests/root_element_test.cpp b/tests/cpp_tests/svg_renderer_tests/root_element_test.cpp
deleted file mode 100644
index a3c2c42..0000000
--- a/tests/cpp_tests/svg_renderer_tests/root_element_test.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-#define BOOST_TEST_MODULE root_element_test
-
-/*
- * This test module contains several generators for
- * the SVG root element.
- */
-
-// boost.test
-#include <boost/test/included/unit_test.hpp>
-
-// boost.spirit
-#include <boost/spirit/include/karma.hpp>
-#include <boost/spirit/repository/include/karma_confix.hpp>
-
-// boost
-#include <boost/fusion/tuple.hpp>
-
-// stl
-#include <string>
-#include <sstream>
-
-namespace karma = boost::spirit::karma;
-namespace repository = boost::spirit::repository;
-namespace fusion = boost::fusion;
-using namespace karma;
-
-struct F
-{
-    F() :
-        width(100),
-        height(100),
-        version(1.1),
-        xmlns("http://www.w3.org/2000/svg"),
-        expected_output("<svg width=\"100px\" height=\"100px\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">") {}
-
-    ~F() {}
-
-    const int width;
-    const int height;
-    const float version;
-    const std::string xmlns;
-    const std::string expected_output;
-    std::ostringstream actual_output;
-};
-
-/*
- * This test case uses one compound generator to generate the SVG  element.
- *
- * It makes only one call to the format function and uses an ostringstream
- * as its output destination.
- *
- * The attribute values are provided as arguments to the format function.
- * The disadvantage of this is that the number of arguments is limited
- * by the preprocessor constant SPIRIT_ARGUMENTS_LIMIT, whose default
- * value is 10. The advantage is that they can be of any type (as long
- * as they are compatible with the corresponding generator type).
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_test_case, F)
-{
-    actual_output
-        << format(
-            "<svg width=\"" << int_ << string << "\" "
-            << "height=\"" << int_ << string << "\" "
-            << "version=\"" << float_ << "\" "
-            << "xmlns=\"" << string << "\""
-            << ">",
-            width, "px", height, "px", version, xmlns);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
-
-/*
- * This test case uses confix to wrap each xml attribute's value
- * inside double quotes.
- *
- * Notice that the generators' attribute list contains also tuples.
- * Tuples are needed to specify each confix's attributes that contain
- * more than one generator, like confix()[int_ << string] (this
- * generator needs a tuple: tuple<int, string>).
- *
- * The difference between this generator and the one in test case
- * 'bgcolor_stream_test_case' is the use of less << operators and
- * a more clean handling of double quotes.
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_confix_test_case, F)
-{
-    using repository::confix;
-    using fusion::tuple;
-
-    actual_output
-        << format(
-            "<svg width=" << confix('"', '"')[int_ << string]
-            << " height=" << confix('"', '"')[int_ << string]
-            << " version=" << confix('"', '"')[float_]
-            << " xmlns=" << confix('"', '"')[string]
-            << ">",
-            tuple<int, std::string>(width, "px"), tuple<int, std::string>(height, "px"), version, xmlns);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
-
-/*
- * This test case generates the angle brackets of the svg/xml tag
- * using confix. notice that a confix generator can be part of another
- * confix generator's expression.
- *
- * Notice also that the attribute list is the same as in
- * 'bgcolor_stream_confix_test_case'. From this one can see that each
- * generator is meant to have a list of attributes if it has more than one.
- *
- * If the generator is nested inside another generator, the former's attribute
- * list will be another list (a tuple, for example) inside the latter's.
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_confix_complete_test_case, F)
-{
-    using repository::confix;
-    using fusion::tuple;
-
-    actual_output
-        << format(
-            confix('<', ">")[
-                "svg width=" << confix('"', '"')[int_ << string]
-                << " height=" << confix('"', '"')[int_ << string]
-                << " version=" << confix('"', '"')[float_]
-                << " xmlns=" << confix('"', '"')[string]],
-            tuple<int, std::string>(width, "px"), tuple<int, std::string>(height, "px"), version, xmlns);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
-
-/*
- * This test case uses an iterator to receive the generated
- * output. The iterator comes from the std::ostringstream that's
- * been used in the previous test cases, so the output is
- * actually generated into the stream.
- *
- * Using iterators instead of streams has the advantage that
- * more advanced concepts are implemented in karma for them,
- * like rules and grammars.
- */
-BOOST_FIXTURE_TEST_CASE(bgcolor_stream_iterator_test_case, F)
-{
-    using repository::confix;
-    using fusion::tuple;
-
-    std::ostream_iterator<char> actual_output_iterator(actual_output);
-
-    generate(
-        actual_output_iterator,
-        confix("<", ">")[
-            "svg width=" << confix('"', '"')[int_ << string]
-            << " height=" << confix('"', '"')[int_ << string]
-            << " version=" << confix('"', '"')[float_]
-            << " xmlns=" << confix('"', '"')[string]],
-        tuple<int, std::string>(width, "px"), tuple<int, std::string>(height, "px"), version, xmlns);
-
-    BOOST_CHECK_EQUAL(actual_output.str(), expected_output);
-}
diff --git a/tests/cpp_tests/symbolizer_test.cpp b/tests/cpp_tests/symbolizer_test.cpp
new file mode 100644
index 0000000..c6877ac
--- /dev/null
+++ b/tests/cpp_tests/symbolizer_test.cpp
@@ -0,0 +1,40 @@
+#include <boost/detail/lightweight_test.hpp>
+#include <iostream>
+#include <mapnik/symbolizer.hpp>
+#include <vector>
+#include <algorithm>
+
+using namespace mapnik;
+
+int main(int argc, char** argv)
+{
+    std::vector<std::string> args;
+    for (int i=1;i<argc;++i)
+    {
+        args.push_back(argv[i]);
+    }
+    bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
+
+    try {
+        marker_multi_policy_enum policy_in = MARKER_WHOLE_MULTI;
+        BOOST_TEST_EQ(policy_in,MARKER_WHOLE_MULTI);
+        markers_symbolizer sym;
+        put(sym, keys::markers_multipolicy, policy_in);
+        BOOST_TEST_EQ(sym.properties.count(keys::markers_multipolicy),static_cast<unsigned long>(1));
+        marker_multi_policy_enum policy_out = get<mapnik::marker_multi_policy_enum>(sym, keys::markers_multipolicy);
+        BOOST_TEST_EQ(policy_out,MARKER_WHOLE_MULTI);
+    }
+    catch (std::exception const & ex)
+    {
+        std::clog << ex.what() << std::endl;
+        BOOST_TEST(false);
+    }
+
+    if (!::boost::detail::test_errors()) {
+        if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
+        else std::clog << "C++ symbolizer test: \x1b[1;32m✓ \x1b[0m\n";
+        ::boost::detail::report_errors_remind().called_report_errors_function = true;
+    } else {
+        return ::boost::report_errors();
+    }
+}
diff --git a/tests/cpp_tests/wkb_formats_test.cpp b/tests/cpp_tests/wkb_formats_test.cpp
index 231388c..29f9634 100644
--- a/tests/cpp_tests/wkb_formats_test.cpp
+++ b/tests/cpp_tests/wkb_formats_test.cpp
@@ -1,4 +1,3 @@
-#include <boost/version.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <iostream>
 #include <mapnik/params.hpp>
@@ -117,10 +116,8 @@ int main(int argc, char** argv)
 
     if (!::boost::detail::test_errors()) {
         if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
-        else std::clog << "C++ CSV parse: \x1b[1;32m✓ \x1b[0m\n";
-#if BOOST_VERSION >= 104600
+        else std::clog << "C++ WKB formats test: \x1b[1;32m✓ \x1b[0m\n";
         ::boost::detail::report_errors_remind().called_report_errors_function = true;
-#endif
     } else {
         return ::boost::report_errors();
     }
diff --git a/tests/data/broken_maps/css_value_broken.xml b/tests/data/broken_maps/css_value_broken.xml
index 251d2ee..2926b15 100644
--- a/tests/data/broken_maps/css_value_broken.xml
+++ b/tests/data/broken_maps/css_value_broken.xml
@@ -2,7 +2,7 @@
 <Map minimum-version="0.7.2">
     <Style name="some_style">
       <Rule>
-        <LineSymbolizer stroke-width="foobar"/>
+        <LineSymbolizer stroke-width="foobar  2"/>
       </Rule>
     </Style>
 </Map>
\ No newline at end of file
diff --git a/tests/data/broken_maps/empty_stylename.xml b/tests/data/broken_maps/empty_stylename.xml
new file mode 100755
index 0000000..1620849
--- /dev/null
+++ b/tests/data/broken_maps/empty_stylename.xml
@@ -0,0 +1,7 @@
+<Map>
+    <Style name="style">
+    </Style>
+    <Layer>
+        <StyleName></StyleName>
+    </Layer>
+</Map>
diff --git a/tests/data/broken_maps/expression_broken.xml b/tests/data/broken_maps/expression_broken.xml
index 3bed629..b8f88c6 100644
--- a/tests/data/broken_maps/expression_broken.xml
+++ b/tests/data/broken_maps/expression_broken.xml
@@ -2,7 +2,7 @@
 <Map minimum-version="0.7.2">
     <Style name="some_style">
         <Rule>
-            <Filter>[mapnik:geometry] = foobar </Filter> 
+            <Filter>[mapnik:geometry] = 1' </Filter>
         </Rule>
     </Style>
 </Map>
\ No newline at end of file
diff --git a/tests/data/broken_maps/invalid-scale-hsla-filter.xml b/tests/data/broken_maps/invalid-scale-hsla-filter.xml
new file mode 100644
index 0000000..fec9d9e
--- /dev/null
+++ b/tests/data/broken_maps/invalid-scale-hsla-filter.xml
@@ -0,0 +1,4 @@
+<Map>
+    <Style name="style" image-filters="scale-hsla(-1,1.1,0,1,0,1,0,1)">
+    </Style>
+</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/colorize-alpha.xml b/tests/data/good_maps/colorize-alpha.xml
deleted file mode 100644
index 8fd39e7..0000000
--- a/tests/data/good_maps/colorize-alpha.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE Map[]>
-<Map>
-
-  <Style name="countries">
-    <Rule>
-      <PolygonSymbolizer fill-opacity=".9" gamma=".65"/>
-    </Rule>
-  </Style>
-
-<!--
-  <Style name="style" comp-op="colorize-alpha">
--->
-  <Style name="style">
-    <Rule>
-      <PointSymbolizer  file="../images/marker.png" allow-overlap="true"   />
-    </Rule>
-  </Style>
-
-  <Layer name="world">
-      <StyleName>countries</StyleName>
-      <Datasource>
-          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
-          <Parameter name="type">shape</Parameter>
-      </Datasource>
-  </Layer>
-
-  <Layer name="style">
-      <StyleName>style</StyleName>
-      <Datasource>
-          <Parameter name="inline">
-                  x,y
-                  -170,20
-                  -122,48
-                  -122.2,48.2
-                  -122.2,48.2
-                  -122.3,48.3
-                  -122.1,48.4
-                  -122.1,48.2
-                  -115,36
-                  90,30
-                  0,0
-                  1,1
-                  10,10
-                  -10,-10
-                  -20,-20
-          </Parameter>
-         <Parameter name="type">csv</Parameter>
-      </Datasource>
-  </Layer>
-
-</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/empty_parameter1.xml b/tests/data/good_maps/empty_parameter1.xml
new file mode 100755
index 0000000..eb52e65
--- /dev/null
+++ b/tests/data/good_maps/empty_parameter1.xml
@@ -0,0 +1,12 @@
+<Map>
+    <Layer>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+                x,y
+                0,0
+            </Parameter>
+            <Parameter name="empty"></Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/data/good_maps/empty_parameter2.xml b/tests/data/good_maps/empty_parameter2.xml
new file mode 100755
index 0000000..e9203e7
--- /dev/null
+++ b/tests/data/good_maps/empty_parameter2.xml
@@ -0,0 +1,12 @@
+<Map>
+    <Layer>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+                x,y
+                0,0
+            </Parameter>
+            <Parameter name="empty"><![CDATA[ ]]></Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/data/good_maps/empty_parameter3.xml b/tests/data/good_maps/empty_parameter3.xml
new file mode 100755
index 0000000..eb52e65
--- /dev/null
+++ b/tests/data/good_maps/empty_parameter3.xml
@@ -0,0 +1,12 @@
+<Map>
+    <Layer>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+                x,y
+                0,0
+            </Parameter>
+            <Parameter name="empty"></Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/data/good_maps/empty_parameter4.xml b/tests/data/good_maps/empty_parameter4.xml
new file mode 100755
index 0000000..5f31b85
--- /dev/null
+++ b/tests/data/good_maps/empty_parameter4.xml
@@ -0,0 +1,12 @@
+<Map>
+    <Layer>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+                x,y
+                0,0
+            </Parameter>
+            <Parameter name="empty"> </Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/data/good_maps/empty_parameter5.xml b/tests/data/good_maps/empty_parameter5.xml
new file mode 100755
index 0000000..7dc9078
--- /dev/null
+++ b/tests/data/good_maps/empty_parameter5.xml
@@ -0,0 +1,12 @@
+<Map>
+    <Layer>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+                x,y
+                0,0
+            </Parameter>
+            <Parameter name="empty">''</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/data/good_maps/empty_text_symbolizer.xml b/tests/data/good_maps/empty_text_symbolizer.xml
new file mode 100644
index 0000000..1582583
--- /dev/null
+++ b/tests/data/good_maps/empty_text_symbolizer.xml
@@ -0,0 +1,15 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue" minimum-version="0.7.2">
+
+    <Style name="labels">
+        <Rule>
+            <TextSymbolizer face-name="DejaVu Sans Book"></TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book">''</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book"><![CDATA[]]></TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>labels</StyleName>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/frame.xml b/tests/data/good_maps/frame.xml
new file mode 100644
index 0000000..29e3626
--- /dev/null
+++ b/tests/data/good_maps/frame.xml
@@ -0,0 +1,23 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer transform="scale(1,1)"/>
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/markers_symbolizer_points.xml b/tests/data/good_maps/markers_symbolizer_points.xml
index 81d7cec..2984cc3 100644
--- a/tests/data/good_maps/markers_symbolizer_points.xml
+++ b/tests/data/good_maps/markers_symbolizer_points.xml
@@ -39,20 +39,4 @@
             <Parameter name="table">point</Parameter>
         </Datasource>
     </Layer>
-<!--
-  <Style name="meta_point_bboxs">
-    <Rule>
-          <LineSymbolizer stroke="green" stroke-width=".5"/>
-    </Rule>
-  </Style>
-
-  <Layer name="points" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>meta_point_bboxs</StyleName>
-    <Datasource>
-      <Parameter name="type">ogr</Parameter>
-      <Parameter name="layer">OGRGeoJSON</Parameter>
-      <Parameter name="file">../../../markers.json</Parameter>
-    </Datasource>
-  </Layer>  
--->
 </Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/markers_symbolizer_points_file.xml b/tests/data/good_maps/markers_symbolizer_points_file.xml
index 107467c..d4b63a9 100644
--- a/tests/data/good_maps/markers_symbolizer_points_file.xml
+++ b/tests/data/good_maps/markers_symbolizer_points_file.xml
@@ -14,20 +14,4 @@
             <Parameter name="table">point</Parameter>
         </Datasource>
     </Layer>
-<!--
-  <Style name="meta_point_bboxs">
-    <Rule>
-          <LineSymbolizer stroke="green" stroke-width=".5"/>
-    </Rule>
-  </Style>
-
-  <Layer name="points" status="on" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-    <StyleName>meta_point_bboxs</StyleName>
-    <Datasource>
-      <Parameter name="type">ogr</Parameter>
-      <Parameter name="layer">OGRGeoJSON</Parameter>
-      <Parameter name="file">../../../markers.json</Parameter>
-    </Datasource>
-  </Layer>  
--->
 </Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/paths_relative_to_xml.xml b/tests/data/good_maps/paths_relative_to_xml.xml
deleted file mode 100644
index 2a3d4b7..0000000
--- a/tests/data/good_maps/paths_relative_to_xml.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<Map minimum-version="0.7.2" paths-from-xml="true"><!-- default is true -->
-
-  <Layer name="lay">
-    <Datasource>
-      <Parameter name="file">../shp/poly.shp</Parameter>
-      <Parameter name="type">shape</Parameter>
-    </Datasource>
-  </Layer>
-  
-</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/point_json.xml b/tests/data/good_maps/point_json.xml
index 1e9146d..aa2efd1 100644
--- a/tests/data/good_maps/point_json.xml
+++ b/tests/data/good_maps/point_json.xml
@@ -22,7 +22,7 @@
     <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
         <StyleName>1</StyleName>
         <Datasource>
-            <Parameter name="file">../json/points.json</Parameter>
+            <Parameter name="file">../json/points.geojson</Parameter>
             <Parameter name="layer_by_index">0</Parameter>
             <Parameter name="type">ogr</Parameter>
         </Datasource>
diff --git a/tests/data/good_maps/point_symbolizer.xml b/tests/data/good_maps/point_symbolizer.xml
index 314a461..438c391 100644
--- a/tests/data/good_maps/point_symbolizer.xml
+++ b/tests/data/good_maps/point_symbolizer.xml
@@ -3,7 +3,7 @@
     <Style name="1">
         <Rule>
             <Filter>([name]='CHILE')</Filter>
-            <TextSymbolizer size="10" dy="5" face-name="DejaVu Sans Book" text-transform="lowercase" wrap-width="10" wrap-character=" " halo-radius="1">[name] + ' (default OGC pixel)'</TextSymbolizer>
+            <TextSymbolizer size="10" dy="5" face-name="DejaVu Sans Book" text-transform="lowercase" wrap-width="10" halo-radius="1">[name] + ' (default OGC pixel)'</TextSymbolizer>
             <PointSymbolizer/>
         </Rule>
         <Rule>
diff --git a/tests/data/good_maps/raster_colorizer.xml b/tests/data/good_maps/raster_colorizer.xml
deleted file mode 100644
index 970f252..0000000
--- a/tests/data/good_maps/raster_colorizer.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<Map background-color="white" srs="+init=epsg:32630" minimum-version="0.7.2">
-
-<!-- blue yellow orange indigo green red transparent black white -->
-
-  <Style name="DISCRETE RAINBOW">
-    <Rule>
-      <RasterSymbolizer>
-        <RasterColorizer default-mode="discrete" default-color="white">
-            <stop color="red" value="0"/>
-            <stop color="orange" value="5"/>
-            <stop color="yellow" value="10"/>
-            <stop color="green" value="15"/>
-            <stop color="blue" value="20"/>
-            <stop color="indigo" value="25"/>
-        </RasterColorizer>
-      </RasterSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="LINEAR BLEND">
-    <Rule>
-      <RasterSymbolizer>
-        <RasterColorizer default-mode="discrete" default-color="white">
-            <stop color="#222222" value="0" mode="linear"/>
-            <stop color="#EEEEEE" value="25"/>
-        </RasterColorizer>
-      </RasterSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="BANDED">
-    <Rule>
-      <RasterSymbolizer>
-        <RasterColorizer default-mode="discrete" default-color="white">
-            <stop color="red" value="0" mode="exact"/>
-            <stop color="orange" value="2" mode="exact"/>
-            <stop color="yellow" value="4" mode="exact"/>
-            <stop color="green" value="6" mode="exact"/>
-            <stop color="blue" value="8" mode="exact"/>
-            <stop color="indigo" value="10" mode="exact"/>
-            <stop color="violet" value="12" mode="exact"/>
-        </RasterColorizer>
-      </RasterSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Style name="MIXED">
-    <Rule>
-      <RasterSymbolizer>
-        <RasterColorizer default-mode="discrete" default-color="white">
-            <stop color="red" value="0"/>
-            <stop color="orange" value="5"/>
-            <stop color="yellow" value="10" mode="exact"/>
-            <stop color="green" value="13" mode="exact"/>
-            <stop color="#222222" value="15" mode="linear"/>
-            <stop color="#EEEEEE" value="25"/>
-        </RasterColorizer>
-      </RasterSymbolizer>
-    </Rule>
-  </Style>  
-
-  <Layer name="dataraster" srs="+init=epsg:32630">
-      <StyleName>DISCRETE RAINBOW</StyleName>
-      <Datasource>
-          <Parameter name="file">../raster/dataraster.tif</Parameter>
-          <Parameter name="type">gdal</Parameter>
-          <Parameter name="band">1</Parameter>
-      </Datasource>
-  </Layer>
-
-</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/raster_symbolizer.xml b/tests/data/good_maps/raster_symbolizer.xml
deleted file mode 100644
index 429701c..0000000
--- a/tests/data/good_maps/raster_symbolizer.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<Map background-color="white" srs="+init=epsg:32630" minimum-version="0.7.2">
-
-  <Style name="two-value">
-    <Rule>
-      <RasterSymbolizer opacity="1">
-        <RasterColorizer default-mode="discrete" default-color="#000000">
-          <stop value="0" color="yellow"/>
-          <stop value="26" color="purple"/>
-         </RasterColorizer>
-      </RasterSymbolizer>
-    </Rule>
-  </Style>
-
-  <Style name="ramped">
-    <Rule>
-      <RasterSymbolizer>
-        <RasterColorizer default-mode="linear" default-color="#000000">
-          <stop value="0" color="red"/>
-          <stop value="26" color="green"/>
-         </RasterColorizer>
-      </RasterSymbolizer>
-    </Rule>
-  </Style>
-
-  <Layer name="dataraster" srs="+init=epsg:32630">
-      <StyleName>ramped</StyleName>
-      <Datasource>
-          <!-- get stats on this file with gdalinfo ../raster/dataraster.tif -stats -->
-          <Parameter name="file">../raster/dataraster.tif</Parameter>
-          <Parameter name="type">gdal</Parameter>
-          <Parameter name="band">1</Parameter>
-      </Datasource>
-  </Layer>
-
-</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/shield_symbolizer.xml b/tests/data/good_maps/shield_symbolizer.xml
index 5188265..716875c 100644
--- a/tests/data/good_maps/shield_symbolizer.xml
+++ b/tests/data/good_maps/shield_symbolizer.xml
@@ -20,7 +20,7 @@
     <Layer name="line" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
         <StyleName>2</StyleName>
         <Datasource>
-            <Parameter name="file">../json/lines.json</Parameter>
+            <Parameter name="file">../json/lines.geojson</Parameter>
             <Parameter name="layer_by_index">0</Parameter>
             <Parameter name="type">ogr</Parameter>
         </Datasource>
@@ -29,7 +29,7 @@
     <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
         <StyleName>1</StyleName>
         <Datasource>
-            <Parameter name="file">../json/points.json</Parameter>
+            <Parameter name="file">../json/points.geojson</Parameter>
             <Parameter name="layer_by_index">0</Parameter>
             <Parameter name="type">ogr</Parameter>
         </Datasource>
diff --git a/tests/data/good_maps/text-placement-type-dummy.xml b/tests/data/good_maps/text-placement-type-dummy.xml
new file mode 100644
index 0000000..9b43799
--- /dev/null
+++ b/tests/data/good_maps/text-placement-type-dummy.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Style name="My Style">
+      <Rule>
+        <!-- https://github.com/mapnik/mapnik/issues/2502 -->
+        <TextSymbolizer face-name="DejaVu Sans Book" placement-type="dummy">[name]</TextSymbolizer>
+      </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/data/good_maps/text_breaks.xml b/tests/data/good_maps/text_breaks.xml
index 0f89661..5252358 100644
--- a/tests/data/good_maps/text_breaks.xml
+++ b/tests/data/good_maps/text_breaks.xml
@@ -3,14 +3,14 @@
     <Style name="1">
         <Rule>
             <Filter>([label]='center')</Filter>
-            <TextSymbolizer size="10" dy="-5" face-name="DejaVu Sans Book" wrap-character="," wrap-width="1" halo-radius="1">'one
+            <TextSymbolizer size="10" dy="-5" face-name="DejaVu Sans Book" wrap-width="1" halo-radius="1">'one
 two
 three'</TextSymbolizer>
             <PointSymbolizer/>
         </Rule>
         <Rule>
             <ElseFilter/>
-            <TextSymbolizer size="10" dy="-5" face-name="DejaVu Sans Book" wrap-character="," wrap-width="1" halo-radius="1">[label]</TextSymbolizer>
+            <TextSymbolizer size="10" dy="-5" face-name="DejaVu Sans Book" wrap-width="1" halo-radius="1">[label]</TextSymbolizer>
             <PointSymbolizer/>
         </Rule>        
     </Style>
diff --git a/tests/data/good_maps/tiff_colortable.xml b/tests/data/good_maps/tiff_colortable.xml
deleted file mode 100644
index c102ff3..0000000
--- a/tests/data/good_maps/tiff_colortable.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Map srs="+init=epsg:32630" background-color="rgb(255,255,255)">
-    <Style name="2011_5km_vrt_nodata_style">
-        <Rule>
-            <RasterSymbolizer/>
-        </Rule>
-    </Style>
-    <Layer name="2011_5km_vrt_nodata" srs="+init=epsg:32630">
-        <StyleName>2011_5km_vrt_nodata_style</StyleName>
-        <Datasource>
-            <Parameter name="file">../raster/dataraster.tif</Parameter>
-            <Parameter name="nodata">20</Parameter>
-            <Parameter name="type">gdal</Parameter>
-        </Datasource>
-    </Layer>
-</Map>
\ No newline at end of file
diff --git a/tests/data/good_maps/vrt_colortable.xml b/tests/data/good_maps/vrt_colortable.xml
deleted file mode 100644
index d20367c..0000000
--- a/tests/data/good_maps/vrt_colortable.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Map srs="+init=epsg:32630" background-color="rgb(255,255,255)">
-    <Style name="2011_5km_vrt_nodata_style">
-        <Rule>
-            <RasterSymbolizer/>
-        </Rule>
-    </Style>
-    <Layer name="2011_5km_vrt_nodata" srs="+init=epsg:32630">
-        <StyleName>2011_5km_vrt_nodata_style</StyleName>
-        <Datasource>
-            <Parameter name="file">../raster/dataraster.vrt</Parameter>
-            <Parameter name="type">gdal</Parameter>
-        </Datasource>
-    </Layer>
-</Map>
\ No newline at end of file
diff --git a/tests/data/gpx/empty.gpx b/tests/data/gpx/empty.gpx
new file mode 100644
index 0000000..dd03718
--- /dev/null
+++ b/tests/data/gpx/empty.gpx
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="yes"?>
+<gpx version="1.0">
+<name>Empty GPX</name>
+<desc></desc>
+<wpt lat="48" lon="-122">
+ <ele>0</ele>
+ <time>2001-11-28T21:06:52Z</time>
+</wpt>
+</gpx>
\ No newline at end of file
diff --git a/tests/data/json/escaped.json b/tests/data/json/escaped.geojson
similarity index 100%
rename from tests/data/json/escaped.json
rename to tests/data/json/escaped.geojson
diff --git a/tests/data/json/escaped.topojson b/tests/data/json/escaped.topojson
new file mode 100644
index 0000000..ef9ea07
--- /dev/null
+++ b/tests/data/json/escaped.topojson
@@ -0,0 +1,39 @@
+{
+    "type": "Topology",
+    "objects": {
+        "escaped": {
+            "type": "GeometryCollection",
+            "geometries": [
+                {
+                    "type": "Point",
+                    "properties": {
+                        "name": "Test",
+                        "int": 1,
+                        "description": "Test: \\",
+                        "spaces": "this has spaces",
+                        "double": 1.1,
+                        "boolean": true,
+                        "NOM_FR": "Québec"
+                    },
+                    "coordinates": [
+                        0,
+                        0
+                    ]
+                }
+            ]
+        }
+    },
+    "arcs": [
+
+    ],
+    "transform": {
+        "scale": [
+            1,
+            1
+        ],
+        "translate": [
+            -81.705583,
+            41.480573
+        ]
+    }
+}
diff --git a/tests/data/json/feature_collection_level_properties.json b/tests/data/json/feature_collection_level_properties.json
new file mode 100644
index 0000000..320cfc4
--- /dev/null
+++ b/tests/data/json/feature_collection_level_properties.json
@@ -0,0 +1,18 @@
+{
+  "type": "FeatureCollection",
+   "properties": {
+      "fc_name": "fc_value"
+    },
+    "features": [
+      {
+          "type": "Feature",
+          "properties": {
+            "feat_name": "feat_value"
+          },
+          "geometry": {
+              "type": "Point",
+              "coordinates": [ -122, 48 ]
+          }
+      }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/json/lines.geojson b/tests/data/json/lines.geojson
new file mode 100644
index 0000000..34e9bae
--- /dev/null
+++ b/tests/data/json/lines.geojson
@@ -0,0 +1,19 @@
+{
+
+"type": "FeatureCollection",
+
+"features": [
+
+    { "type": "Feature", 
+    
+        "properties": { "x": 0, "y": 0, "label": "D" },
+        "geometry"  : { "type": "LineString", "coordinates": [ [1, 0], [2, 1], [3, 2], [4, 3], [5, 4], [6, 5] ] }
+    },
+    { "type": "Feature", 
+    
+        "properties": { "x": 2, "y": 0, "label": "V" },
+        "geometry"  : { "type": "LineString", "coordinates": [ [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5] ] }
+    }
+    
+]
+}
diff --git a/tests/data/json/lines.json b/tests/data/json/lines.json
deleted file mode 100644
index f3babc9..0000000
--- a/tests/data/json/lines.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-
-"type": "FeatureCollection",
-
-/* comment */
-
-"features": [
-
-    { "type": "Feature", 
-    
-        "properties": { "x": 0, "y": 0, "label": "D" },
-        "geometry"  : { "type": "LineString", "coordinates": [ [1, 0], [2, 1], [3, 2], [4, 3], [5, 4], [6, 5] ] }
-    },
-    { "type": "Feature", 
-    
-        "properties": { "x": 2, "y": 0, "label": "V" },
-        "geometry"  : { "type": "LineString", "coordinates": [ [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5] ] }
-    },
-    
-]
-}
diff --git a/tests/data/json/null_feature.json b/tests/data/json/null_feature.geojson
similarity index 100%
rename from tests/data/json/null_feature.json
rename to tests/data/json/null_feature.geojson
diff --git a/tests/data/json/points.geojson b/tests/data/json/points.geojson
new file mode 100644
index 0000000..36dc859
--- /dev/null
+++ b/tests/data/json/points.geojson
@@ -0,0 +1,34 @@
+{
+
+"type": "FeatureCollection",
+
+"features": [
+
+    { "type": "Feature", 
+    
+        "properties": { "x": 0, "y": 0, "label": "0,0" },
+        "geometry"  : { "type": "Point", "coordinates": [ 0, 0 ] }
+    },
+    { "type": "Feature", 
+    
+        "properties": { "x": 5, "y": 5, "label": "5,5" },
+        "geometry"  : { "type": "Point", "coordinates": [ 5, 5 ] }
+    },
+    { "type": "Feature", 
+    
+        "properties": { "x": 0, "y": 5, "label": "0,5" },
+        "geometry"  : { "type": "Point", "coordinates": [ 0, 5 ] }
+    },
+    { "type": "Feature", 
+    
+        "properties": { "x": 5, "y": 0, "label": "5,0" },
+        "geometry"  : { "type": "Point", "coordinates": [ 5, 0 ] }
+    },
+    { "type": "Feature", 
+    
+        "properties": { "x": 2.5, "y": 2.5, "label": "2.5,2.5" },
+        "geometry"  : { "type": "Point", "coordinates": [ 2.5, 2.5 ] }
+    }
+    
+]
+}
diff --git a/tests/data/json/points.json b/tests/data/json/points.json
deleted file mode 100644
index 8b11160..0000000
--- a/tests/data/json/points.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-
-"type": "FeatureCollection",
-
-/* comment */
-
-"features": [
-
-    { "type": "Feature", 
-    
-        "properties": { "x": 0, "y": 0, "label": "0,0" },
-        "geometry"  : { "type": "Point", "coordinates": [ 0, 0 ] }
-    },
-    { "type": "Feature", 
-    
-        "properties": { "x": 5, "y": 5, "label": "5,5" },
-        "geometry"  : { "type": "Point", "coordinates": [ 5, 5 ] }
-    },
-    { "type": "Feature", 
-    
-        "properties": { "x": 0, "y": 5, "label": "0,5" },
-        "geometry"  : { "type": "Point", "coordinates": [ 0, 5 ] }
-    },
-    { "type": "Feature", 
-    
-        "properties": { "x": 5, "y": 0, "label": "5,0" },
-        "geometry"  : { "type": "Point", "coordinates": [ 5, 0 ] }
-    },
-    { "type": "Feature", 
-    
-        "properties": { "x": 2.5, "y": 2.5, "label": "2.5,2.5" },
-        "geometry"  : { "type": "Point", "coordinates": [ 2.5, 2.5 ] }
-    },
-    
-]
-}
diff --git a/tests/data/pngsuite/linepattern.png b/tests/data/pngsuite/linepattern.png
new file mode 100644
index 0000000..9a89f21
Binary files /dev/null and b/tests/data/pngsuite/linepattern.png differ
diff --git a/tests/data/pngsuite/linepattern1.png b/tests/data/pngsuite/linepattern1.png
new file mode 100644
index 0000000..73234b7
Binary files /dev/null and b/tests/data/pngsuite/linepattern1.png differ
diff --git a/tests/data/shp/points/poi.xml b/tests/data/shp/points/poi.xml
deleted file mode 100644
index f4f2b0b..0000000
--- a/tests/data/shp/points/poi.xml
+++ /dev/null
@@ -1 +0,0 @@
-<metadata xml:lang="en"><Esri><CreaDate>20120921</CreaDate><CreaTime>16214000</CreaTime><ArcGISFormat>1.0</ArcGISFormat><SyncOnce>FALSE</SyncOnce><DataProperties><itemProps><itemName Sync="TRUE">poi</itemName><imsContentType Sync="TRUE">002</imsContentType><itemSize Sync="TRUE">0.000</itemSize><itemLocation><linkage Sync="TRUE">file://\\ba-projectman\drawings\GIS\gis_data\shapefiles\TileMill\poi.shp</linkage><protocol Sync="TRUE">Local Area Network</protocol></itemLocation></itemProps><c [...]
diff --git a/tests/data/svg/box.svg b/tests/data/svg/box.svg
new file mode 100644
index 0000000..a6ddb17
--- /dev/null
+++ b/tests/data/svg/box.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+ 
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   width="10"
+   height="9.9999971"
+   id="svg6102">
+  <g
+     transform="translate(-240,-532.36218)"
+     id="layer1">
+    <rect
+       width="10"
+       height="9.9999971"
+       x="240"
+       y="532.36218"
+       id="rect6613"
+       style="opacity:0.5;color:#000000;fill:#00ccff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  </g>
+</svg>
\ No newline at end of file
diff --git a/tests/data/svg/linepattern.svg b/tests/data/svg/linepattern.svg
new file mode 100644
index 0000000..147cdf5
--- /dev/null
+++ b/tests/data/svg/linepattern.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="12"
+   height="5"
+   id="svg2"
+   inkscape:label="Pozadí"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Nový dokument 1">
+  <defs
+     id="defs3" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="63.356767"
+     inkscape:cx="5.6969231"
+     inkscape:cy="-1.2203929"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1920"
+     inkscape:window-height="1052"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2984"
+       empspacing="1"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-18px"
+       originy="-2.3841865e-07px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata6">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Vrstva 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-18,-1047.3622)">
+    <rect
+       style="fill:#000000"
+       id="rect2986"
+       width="12"
+       height="1"
+       x="18"
+       y="4"
+       transform="translate(0,1047.3622)" />
+    <path
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       d="m 26,1052.3622 2,-5 2,5 z"
+       id="path3792"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path3806"
+       sodipodi:cx="22"
+       sodipodi:cy="9"
+       sodipodi:rx="2"
+       sodipodi:ry="2"
+       d="m 20.00001,8.9935833 c 0.0035,-1.1045638 0.901843,-1.9971168 2.006407,-1.993573 1.097565,0.00352 1.987227,0.8909156 1.99355,1.9884679 L 22,9 z"
+       transform="translate(-0.97858528,1042.3746)"
+       sodipodi:start="3.144801"
+       sodipodi:end="6.2774244" />
+  </g>
+</svg>
diff --git a/tests/data/svg/place-of-worship-24.svg b/tests/data/svg/place-of-worship-24.svg
new file mode 100644
index 0000000..ac31795
--- /dev/null
+++ b/tests/data/svg/place-of-worship-24.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1">
+  <g transform="translate(0,-1028.3622)">
+    <g transform="translate(-6.0000014,-118)"
+       style="display:inline">
+      <path
+         style="opacity:0.3;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="m 18.5,1150.3622 c 0,0 -2.5,1 -2.5,2 0,0.6667 0,1.3958 0,2 0,1 -2,1 -2,2 0,2.3333 0,9 0,9 l 9,0 c 0,0 0,-6.6667 0,-9 0,-1 -2,-1 -2,-2.1875 0,-0.6042 0,-1.2083 0,-1.8125 0,-1 -2.5,-2 -2.5,-2 z m -8.5,8 c 0,2.3333 0,7 0,7 l 2,0 c 0,0 0,-4.6667 0,-7 0,-1 -1,-1 -1,-1 0,0 -1,0 -1,1 z m 15,0 c 0,2.3333 0,7 0,7 l 2,0 c 0,0 0,-4.6667 0,-7 0,-1 -1,-1 -1,-1 0,0 -1,0 -1,1 z"/>
+      <g transform="translate(0,24)">
+        <g />
+        <rect
+           style="opacity:0.5;color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;overflow:visible;enable-background:accumulate"
+           id="rect8822"
+           width="24"
+           height="24.000017"
+           x="6.0000014"
+           y="1122.3622" />
+      </g>
+      <path
+         d="m 18.5,1150.3622 c 0,0 -2.5,1 -2.5,2 0,0.6667 0,1.3958 0,2 0,1 -2,1 -2,2 0,2.3333 0,9 0,9 l 9,0 c 0,0 0,-6.6667 0,-9 0,-1 -2,-1 -2,-2.1875 0,-0.6042 0,-1.2083 0,-1.8125 0,-1 -2.5,-2 -2.5,-2 z m -8.5,8 c 0,2.3333 0,7 0,7 l 2,0 c 0,0 0,-4.6667 0,-7 0,-1 -1,-1 -1,-1 0,0 -1,0 -1,1 z m 15,0 c 0,2.3333 0,7 0,7 l 2,0 c 0,0 0,-4.6667 0,-7 0,-1 -1,-1 -1,-1 0,0 -1,0 -1,1 z"
+         style="color:#000000;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </g>
+  </g>
+</svg>
diff --git a/tests/data/svg/transparent_circle.svg b/tests/data/svg/transparent_circle.svg
new file mode 100644
index 0000000..ac5ec6c
--- /dev/null
+++ b/tests/data/svg/transparent_circle.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="76"
+   height="76"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="transparent_circle.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.8563637"
+     inkscape:cx="-7.6522455"
+     inkscape:cy="37.99942"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1920"
+     inkscape:window-height="1056"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-82.01339,-82.93304)">
+    <path
+       sodipodi:type="arc"
+       style="fill:#4682b4;fill-opacity:0.2;fill-rule:evenodd;stroke:#ffff00;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.3;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2985"
+       sodipodi:cx="257.14285"
+       sodipodi:cy="295.21933"
+       sodipodi:rx="30"
+       sodipodi:ry="30"
+       d="m 287.14285,295.21933 c 0,16.56854 -13.43145,30 -30,30 -16.56854,0 -30,-13.43146 -30,-30 0,-16.56854 13.43146,-30 30,-30 16.56855,0 30,13.43146 30,30 z"
+       transform="translate(-137.14286,-174.28571)" />
+  </g>
+</svg>
diff --git a/tests/python_tests/agg_rasterizer_integer_overflow_test.py b/tests/python_tests/agg_rasterizer_integer_overflow_test.py
new file mode 100644
index 0000000..9b723fe
--- /dev/null
+++ b/tests/python_tests/agg_rasterizer_integer_overflow_test.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from nose.tools import *
+from utilities import run_all
+import mapnik
+import json
+
+# geojson box of the world
+geojson  = { "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -17963313.143242701888084, -6300857.11560364998877 ], [ -17963313.143242701888084, 13071343.332991421222687 ], [ 7396658.353099936619401, 13071343.332991421222687 ], [ 7396658.353099936619401, -6300857.11560364998877 ], [ -17963313.143242701888084, -6300857.11560364998877 ] ] ] } }
+
+def test_that_coordinates_do_not_overflow_and_polygon_is_rendered():
+  expected_color = mapnik.Color('white')
+  ds = mapnik.MemoryDatasource()
+  context = mapnik.Context()
+  ds.add_feature(mapnik.Feature.from_geojson(json.dumps(geojson),context))
+  s = mapnik.Style()
+  r = mapnik.Rule()
+  sym = mapnik.PolygonSymbolizer()
+  sym.fill = expected_color
+  sym.clip = False
+  r.symbols.append(sym)
+  s.rules.append(r)
+  lyr = mapnik.Layer('Layer')
+  lyr.datasource = ds
+  lyr.styles.append('style')
+  m = mapnik.Map(256,256)
+  m.background_color = mapnik.Color('black')
+  m.append_style('style',s)
+  m.layers.append(lyr)
+  # 17/20864/45265.png
+  m.zoom_to_box(mapnik.Box2d(-13658379.710221574,6197514.253362091,-13657768.213995293,6198125.749588372))
+  # works 15/5216/11316.png
+  #m.zoom_to_box(mapnik.Box2d(-13658379.710221574,6195679.764683247,-13655933.72531645,6198125.749588372))
+  im = mapnik.Image(256,256)
+  mapnik.render(m,im)
+  eq_(im.get_pixel(128,128),expected_color.packed())
+
+if __name__ == "__main__":
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/box2d_test.py b/tests/python_tests/box2d_test.py
index 4c00edd..601b6df 100644
--- a/tests/python_tests/box2d_test.py
+++ b/tests/python_tests/box2d_test.py
@@ -174,4 +174,4 @@ def test_envelope_clipping():
     eq_(e1,e2)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/buffer_clear_test.py b/tests/python_tests/buffer_clear_test.py
index 2119d6d..495acff 100644
--- a/tests/python_tests/buffer_clear_test.py
+++ b/tests/python_tests/buffer_clear_test.py
@@ -45,19 +45,19 @@ def make_map():
     m.zoom_all()
     return m
 
-def test_clearing_grid_data():
-    g = mapnik.Grid(256,256)
-    utf = g.encode()
-    # make sure it equals itself
-    eq_(g.encode(),utf)
-    m = make_map()
-    mapnik.render_layer(m,g,layer=0,fields=['__id__','Name'])
-    eq_(g.encode()!=utf,True)
-    # clear grid, should now match original
-    g.clear()
-    eq_(g.encode(),utf)
-
+if mapnik.has_grid_renderer():
+    def test_clearing_grid_data():
+        g = mapnik.Grid(256,256)
+        utf = g.encode()
+        # make sure it equals itself
+        eq_(g.encode(),utf)
+        m = make_map()
+        mapnik.render_layer(m,g,layer=0,fields=['__id__','Name'])
+        eq_(g.encode()!=utf,True)
+        # clear grid, should now match original
+        g.clear()
+        eq_(g.encode(),utf)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
\ No newline at end of file
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/cairo_test.py b/tests/python_tests/cairo_test.py
index 467f17d..9a4771a 100644
--- a/tests/python_tests/cairo_test.py
+++ b/tests/python_tests/cairo_test.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 import os
+import shutil
 import mapnik
 from nose.tools import *
 from utilities import execution_path, run_all
@@ -10,54 +11,186 @@ def setup():
     # from another directory we need to chdir()
     os.chdir(execution_path('.'))
 
-if mapnik.has_pycairo() and 'sqlite' in mapnik.DatasourceCache.plugin_names():
-
-    def _pycairo_surface(type,sym):
-            import cairo
-            test_cairo_file = '/tmp/test.%s' % type
-            m = mapnik.Map(256,256)
-            mapnik.load_map(m,'../data/good_maps/%s_symbolizer.xml' % sym)
-            if hasattr(cairo,'%sSurface' % type.upper()):
-                surface = getattr(cairo,'%sSurface' % type.upper())(test_cairo_file, m.width,m.height)
-                mapnik.render(m, surface)
-                surface.finish()
-                if os.path.exists(test_cairo_file):
-                    os.remove(test_cairo_file)
-                    return True
-                else:
-                    # Fail, the file wasn't written
-                    return False
-            else:
-                print 'skipping cairo.%s test since surface is not available' % type.upper()
-                return True
+def make_tmp_map():
+    m = mapnik.Map(512,512)
+    m.background_color = mapnik.Color('steelblue')
+    ds = mapnik.MemoryDatasource()
+    context = mapnik.Context()
+    context.push('Name')
+    f = mapnik.Feature(context,1)
+    f['Name'] = 'Hello'
+    f.add_geometries_from_wkt('POINT (0 0)')
+    ds.add_feature(f)
+    s = mapnik.Style()
+    r = mapnik.Rule()
+    sym = mapnik.MarkersSymbolizer()
+    sym.allow_overlap = True
+    r.symbols.append(sym)
+    s.rules.append(r)
+    lyr = mapnik.Layer('Layer')
+    lyr.datasource = ds
+    lyr.styles.append('style')
+    m.append_style('style',s)
+    m.layers.append(lyr)
+    return m
+
+def draw_title(m,ctx,text,size=10,color=mapnik.Color('black')):
+    """ Draw a Map Title near the top of a page."""
+    middle = m.width/2.0
+    ctx.set_source_rgba(*cairo_color(color))
+    ctx.select_font_face("DejaVu Sans Book", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
+    ctx.set_font_size(size)
+    x_bearing, y_bearing, width, height = ctx.text_extents(text)[:4]
+    ctx.move_to(middle - width / 2 - x_bearing, 20.0 - height / 2 - y_bearing)
+    ctx.show_text(text)
+
+def draw_neatline(m,ctx):
+    w,h = m.width, m.height
+    ctx.set_source_rgba(*cairo_color(mapnik.Color('black')))
+    outline = [
+      [0,0],[w,0],[w,h],[0,h]
+    ]
+    ctx.set_line_width(1)
+    for idx,pt in enumerate(outline):
+        if (idx == 0):
+          ctx.move_to(*pt)
+        else:
+          ctx.line_to(*pt)
+    ctx.close_path()
+    inset = 6
+    inline = [
+      [inset,inset],[w-inset,inset],[w-inset,h-inset],[inset,h-inset]
+    ]
+    ctx.set_line_width(inset/2)
+    for idx,pt in enumerate(inline):
+        if (idx == 0):
+          ctx.move_to(*pt)
+        else:
+          ctx.line_to(*pt)
+    ctx.close_path()
+    ctx.stroke()
+
+def cairo_color(c):
+    """ Return a Cairo color tuple from a Mapnik Color."""
+    ctx_c = (c.r/255.0,c.g/255.0,c.b/255.0,c.a/255.0)
+    return ctx_c
 
-    def test_pycairo_svg_surface1():
-        eq_(_pycairo_surface('svg','point'),True)
+if mapnik.has_pycairo():
+    import cairo
 
-    def test_pycairo_svg_surface2():
-        eq_(_pycairo_surface('svg','building'),True)
+    def test_passing_pycairo_context_svg():
+        m = make_tmp_map()
+        m.zoom_to_box(mapnik.Box2d(-180,-90,180,90))
+        test_cairo_file = '/tmp/mapnik-cairo-context-test.svg'
+        surface = cairo.SVGSurface(test_cairo_file, m.width, m.height)
+        expected_cairo_file = './images/pycairo/cairo-cairo-expected.svg'
+        context = cairo.Context(surface)
+        mapnik.render(m,context)
+        draw_title(m,context,"Hello Map",size=20)
+        draw_neatline(m,context)
+        surface.finish()
+        if not os.path.exists(expected_cairo_file):
+            print 'generated expected cairo surface file %s' % expected_cairo_file
+            shutil.copy(test_cairo_file,expected_cairo_file)
+        diff = abs(os.stat(expected_cairo_file).st_size-os.stat(test_cairo_file).st_size)
+        msg = 'diff in size (%s) between actual (%s) and expected(%s)' % (diff,test_cairo_file,'tests/python_tests/'+ expected_cairo_file)
+        eq_( diff < 1500, True, msg)
+        os.remove(test_cairo_file)
 
-    def test_pycairo_svg_surface3():
-        eq_(_pycairo_surface('svg','polygon'),True)
+    def test_passing_pycairo_context_pdf():
+        m = make_tmp_map()
+        m.zoom_to_box(mapnik.Box2d(-180,-90,180,90))
+        test_cairo_file = '/tmp/mapnik-cairo-context-test.pdf'
+        surface = cairo.PDFSurface(test_cairo_file, m.width, m.height)
+        expected_cairo_file = './images/pycairo/cairo-cairo-expected.pdf'
+        context = cairo.Context(surface)
+        mapnik.render(m,context)
+        draw_title(m,context,"Hello Map",size=20)
+        draw_neatline(m,context)
+        surface.finish()
+        if not os.path.exists(expected_cairo_file):
+            print 'generated expected cairo surface file %s' % expected_cairo_file
+            shutil.copy(test_cairo_file,expected_cairo_file)
+        diff = abs(os.stat(expected_cairo_file).st_size-os.stat(test_cairo_file).st_size)
+        msg = 'diff in size (%s) between actual (%s) and expected(%s)' % (diff,test_cairo_file,'tests/python_tests/'+ expected_cairo_file)
+        eq_( diff < 1500, True, msg)
+        os.remove(test_cairo_file)
+
+    def test_passing_pycairo_context_png():
+        m = make_tmp_map()
+        m.zoom_to_box(mapnik.Box2d(-180,-90,180,90))
+        test_cairo_file = '/tmp/mapnik-cairo-context-test.png'
+        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, m.width, m.height)
+        expected_cairo_file = './images/pycairo/cairo-cairo-expected.png'
+        expected_cairo_file2 = './images/pycairo/cairo-cairo-expected-reduced.png'
+        context = cairo.Context(surface)
+        mapnik.render(m,context)
+        draw_title(m,context,"Hello Map",size=20)
+        draw_neatline(m,context)
+        surface.write_to_png(test_cairo_file)
+        reduced_color_image = test_cairo_file.replace('png','-mapnik.png')
+        im = mapnik.Image.from_cairo(surface)
+        im.save(reduced_color_image,'png8')
+        surface.finish()
+        if not os.path.exists(expected_cairo_file):
+            print 'generated expected cairo surface file %s' % expected_cairo_file
+            shutil.copy(test_cairo_file,expected_cairo_file)
+        diff = abs(os.stat(expected_cairo_file).st_size-os.stat(test_cairo_file).st_size)
+        msg = 'diff in size (%s) between actual (%s) and expected(%s)' % (diff,test_cairo_file,'tests/python_tests/'+ expected_cairo_file)
+        eq_( diff < 500, True, msg)
+        os.remove(test_cairo_file)
+        if not os.path.exists(expected_cairo_file2):
+            print 'generated expected cairo surface file %s' % expected_cairo_file2
+            shutil.copy(reduced_color_image,expected_cairo_file2)
+        diff = abs(os.stat(expected_cairo_file2).st_size-os.stat(reduced_color_image).st_size)
+        msg = 'diff in size (%s) between actual (%s) and expected(%s)' % (diff,reduced_color_image,'tests/python_tests/'+ expected_cairo_file2)
+        eq_( diff < 500, True, msg)
+        os.remove(reduced_color_image)
+
+    if 'sqlite' in mapnik.DatasourceCache.plugin_names():
+        def _pycairo_surface(type,sym):
+                test_cairo_file = '/tmp/mapnik-cairo-surface-test.%s.%s' % (sym,type)
+                expected_cairo_file = './images/pycairo/cairo-surface-expected.%s.%s' % (sym,type)
+                m = mapnik.Map(256,256)
+                mapnik.load_map(m,'../data/good_maps/%s_symbolizer.xml' % sym)
+                m.zoom_all()
+                if hasattr(cairo,'%sSurface' % type.upper()):
+                    surface = getattr(cairo,'%sSurface' % type.upper())(test_cairo_file, m.width,m.height)
+                    mapnik.render(m, surface)
+                    surface.finish()
+                    if not os.path.exists(expected_cairo_file):
+                        print 'generated expected cairo surface file %s' % expected_cairo_file
+                        shutil.copy(test_cairo_file,expected_cairo_file)
+                    diff = abs(os.stat(expected_cairo_file).st_size-os.stat(test_cairo_file).st_size)
+                    msg = 'diff in size (%s) between actual (%s) and expected(%s)' % (diff,test_cairo_file,'tests/python_tests/'+ expected_cairo_file)
+                    if os.uname()[0] == 'Darwin':
+                        eq_( diff < 2100, True, msg)
+                    else:
+                        eq_( diff < 23000, True, msg)
+                    os.remove(test_cairo_file)
+                    return True
+                else:
+                    print 'skipping cairo.%s test since surface is not available' % type.upper()
+                    return True
 
-    def test_pycairo_pdf_surface1():
-        eq_(_pycairo_surface('pdf','point'),True)
+        def test_pycairo_svg_surface1():
+            eq_(_pycairo_surface('svg','point'),True)
 
-    def test_pycairo_pdf_surface2():
-        eq_(_pycairo_surface('pdf','building'),True)
+        def test_pycairo_svg_surface2():
+            eq_(_pycairo_surface('svg','building'),True)
 
-    def test_pycairo_pdf_surface3():
-        eq_(_pycairo_surface('pdf','polygon'),True)
+        def test_pycairo_svg_surface3():
+            eq_(_pycairo_surface('svg','polygon'),True)
 
-    def test_pycairo_ps_surface1():
-        eq_(_pycairo_surface('ps','point'),True)
+        def test_pycairo_pdf_surface1():
+            eq_(_pycairo_surface('pdf','point'),True)
 
-    def test_pycairo_ps_surface2():
-        eq_(_pycairo_surface('ps','building'),True)
+        def test_pycairo_pdf_surface2():
+            eq_(_pycairo_surface('pdf','building'),True)
 
-    def test_pycairo_ps_surface3():
-        eq_(_pycairo_surface('ps','polygon'),True)
+        def test_pycairo_pdf_surface3():
+            eq_(_pycairo_surface('pdf','polygon'),True)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/compositing_test.py b/tests/python_tests/compositing_test.py
index 8d91e95..14b697b 100644
--- a/tests/python_tests/compositing_test.py
+++ b/tests/python_tests/compositing_test.py
@@ -92,25 +92,25 @@ def test_compare_images():
         a.demultiply()
         if not validate_pixels_are_not_premultiplied(a):
             fails.append('%s not validly demultiplied' % (name))
-        a.save(actual)
+        a.save(actual,'png32')
         if not os.path.exists(expected):
             print 'generating expected test image: %s' % expected
-            a.save(expected)
+            a.save(expected,'png32')
         expected_im = mapnik.Image.open(expected)
         # compare them
-        if a.tostring() == expected_im.tostring():
+        if a.tostring('png32') == expected_im.tostring('png32'):
             successes.append(name)
         else:
             fails.append('failed comparing actual (%s) and expected(%s)' % (actual,'tests/python_tests/'+ expected))
             fail_im = side_by_side_image(expected_im, a)
-            fail_im.save('/tmp/mapnik-comp-op-test-' + name + '.fail.png')
+            fail_im.save('/tmp/mapnik-comp-op-test-' + name + '.fail.png','png32')
     eq_(len(successes),num_ops,'\n'+'\n'.join(fails))
     b.demultiply()
     # b will be slightly modified by pre and then de multiplication rounding errors
     # TODO - write test to ensure the image is 99% the same.
     #expected_b = mapnik.Image.open('./images/support/b.png')
     #b.save('/tmp/mapnik-comp-op-test-original-mask.png')
-    #eq_(b.tostring(),expected_b.tostring(), '/tmp/mapnik-comp-op-test-original-mask.png is no longer equivalent to original mask: ./images/support/b.png')
+    #eq_(b.tostring('png32'),expected_b.tostring('png32'), '/tmp/mapnik-comp-op-test-original-mask.png is no longer equivalent to original mask: ./images/support/b.png')
 
 def test_pre_multiply_status():
     b = mapnik.Image.open('./images/support/b.png')
@@ -166,18 +166,18 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
             mapnik.render(m, im)
             actual = '/tmp/mapnik-style-comp-op-' + name + '.png'
             expected = 'images/style-comp-op/' + name + '.png'
-            im.save(actual)
+            im.save(actual,'png32')
             if not os.path.exists(expected):
                 print 'generating expected test image: %s' % expected
-                im.save(expected)
+                im.save(expected,'png32')
             expected_im = mapnik.Image.open(expected)
             # compare them
-            if im.tostring() == expected_im.tostring():
+            if im.tostring('png32') == expected_im.tostring('png32'):
                 successes.append(name)
             else:
                 fails.append('failed comparing actual (%s) and expected(%s)' % (actual,'tests/python_tests/'+ expected))
                 fail_im = side_by_side_image(expected_im, im)
-                fail_im.save('/tmp/mapnik-style-comp-op-' + name + '.fail.png')
+                fail_im.save('/tmp/mapnik-style-comp-op-' + name + '.fail.png','png32')
         eq_(len(fails), 0, '\n'+'\n'.join(fails))
 
     def test_style_level_opacity():
@@ -188,9 +188,9 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-style-level-opacity.png'
         expected = 'images/support/mapnik-style-level-opacity.png'
-        im.save(actual)
+        im.save(actual,'png32')
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
 def test_rounding_and_color_expectations():
     m = mapnik.Map(1,1)
@@ -259,4 +259,4 @@ def test_background_image_with_alpha_and_background_color_against_composited_con
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/csv_test.py b/tests/python_tests/csv_test.py
index f360f0f..d871e77 100644
--- a/tests/python_tests/csv_test.py
+++ b/tests/python_tests/csv_test.py
@@ -113,9 +113,9 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
         eq_(len(ds.fields()),10)
         eq_(len(ds.field_types()),10)
         eq_(ds.fields(),['x', 'y', 'text', 'date', 'integer', 'boolean', 'float', 'time', 'datetime', 'empty_column'])
-        eq_(ds.field_types(),['int', 'int', 'str', 'str', 'int', 'str', 'float', 'str', 'str', 'str'])
+        eq_(ds.field_types(),['int', 'int', 'str', 'str', 'int', 'bool', 'float', 'str', 'str', 'str'])
         fs = ds.featureset()
-        attr = {'x': 0, 'empty_column': u'', 'text': u'a b', 'float': 1.0, 'datetime': u'1971-01-01T04:14:00', 'y': 0, 'boolean': u'True', 'time': u'04:14:00', 'date': u'1971-01-01', 'integer': 40}
+        attr = {'x': 0, 'empty_column': u'', 'text': u'a b', 'float': 1.0, 'datetime': u'1971-01-01T04:14:00', 'y': 0, 'boolean': True, 'time': u'04:14:00', 'date': u'1971-01-01', 'integer': 40}
         first = True
         for feat in fs:
             if first:
@@ -331,18 +331,18 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
         ds = get_csv_ds('nulls_and_booleans_as_strings.csv')
         eq_(len(ds.fields()),4)
         eq_(ds.fields(),['x','y','null','boolean'])
-        eq_(ds.field_types(),['int','int','str','str'])
+        eq_(ds.field_types(),['int', 'int', 'str', 'bool'])
         fs = ds.featureset()
         feat = fs.next()
         eq_(feat['x'],0)
         eq_(feat['y'],0)
         eq_(feat['null'],'null')
-        eq_(feat['boolean'],'true')
+        eq_(feat['boolean'],True)
         feat = fs.next()
         eq_(feat['x'],0)
         eq_(feat['y'],0)
         eq_(feat['null'],'')
-        eq_(feat['boolean'],'false')
+        eq_(feat['boolean'],False)
         desc = ds.describe()
         eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
 
@@ -403,6 +403,17 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
         feat = fs.next()
         eq_(feat['Name'],u"Winthrop, WA")
 
+    def test_creation_of_csv_from_in_memory_string_with_uft8(**kwargs):
+        csv_string = '''
+           wkt,Name
+          "POINT (120.15 48.47)","Québec"
+          ''' # csv plugin will test lines <= 10 chars for being fully blank
+        ds = mapnik.Datasource(**{"type":"csv","inline":csv_string})
+        eq_(ds.describe()['geometry_type'],mapnik.DataGeometryType.Point)
+        fs = ds.featureset()
+        feat = fs.next()
+        eq_(feat['Name'],u"Québec")
+
     def validate_geojson_datasource(ds):
         eq_(len(ds.fields()),1)
         eq_(ds.fields(),['type'])
@@ -540,7 +551,6 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
         feat = fs.next()
         eq_(feat['bigint'],2147483648)
         feat = fs.next()
-        eq_(feat['bigint'],sys.maxint)
         eq_(feat['bigint'],9223372036854775807)
         eq_(feat['bigint'],0x7FFFFFFFFFFFFFFF)
         desc = ds.describe()
@@ -571,6 +581,27 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
         eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
         eq_(len(ds.all_features()),8)
 
+    def test_manually_supplied_extent(**kwargs):
+        csv_string = '''
+           wkt,Name
+          '''
+        ds = mapnik.Datasource(**{"type":"csv","extent":"-180,-90,180,90","inline":csv_string})
+        b = ds.envelope()
+        eq_(b.minx,-180)
+        eq_(b.miny,-90)
+        eq_(b.maxx,180)
+        eq_(b.maxy,90)
+
+    def test_inline_geojson(**kwargs):
+        csv_string = "geojson\n'{\"coordinates\":[-92.22568,38.59553],\"type\":\"Point\"}'"
+        ds = mapnik.Datasource(**{"type":"csv","inline":csv_string})
+        eq_(len(ds.fields()),0)
+        eq_(ds.fields(),[])
+        # FIXME - re-enable after https://github.com/mapnik/mapnik/issues/2319 is fixed
+        #fs = ds.featureset()
+        #feat = fs.next()
+        #eq_(feat.num_geometries(),1)
+
 if __name__ == "__main__":
     setup()
     [eval(run)(visual=True) for run in dir() if 'test_' in run]
diff --git a/tests/python_tests/datasource_test.py b/tests/python_tests/datasource_test.py
index 0aba5a9..c86b829 100644
--- a/tests/python_tests/datasource_test.py
+++ b/tests/python_tests/datasource_test.py
@@ -33,7 +33,7 @@ def test_total_feature_count_shp():
 
 def test_total_feature_count_json():
     if 'ogr' in mapnik.DatasourceCache.plugin_names():
-        ds = mapnik.Ogr(file='../data/json/points.json',layer_by_index=0)
+        ds = mapnik.Ogr(file='../data/json/points.geojson',layer_by_index=0)
         desc = ds.describe()
         eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
         eq_(desc['name'],'ogr')
@@ -56,7 +56,7 @@ def test_sqlite_reading():
         eq_(num_feats, 245)
 
 def test_reading_json_from_string():
-    json = open('../data/json/points.json','r').read()
+    json = open('../data/json/points.geojson','r').read()
     if 'ogr' in mapnik.DatasourceCache.plugin_names():
         ds = mapnik.Ogr(file=json,layer_by_index=0)
         features = ds.all_features()
@@ -125,4 +125,4 @@ def test_hit_grid():
 
 if __name__ == '__main__':
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/datasource_xml_template_test.py b/tests/python_tests/datasource_xml_template_test.py
index d27f6e5..2a73bd5 100644
--- a/tests/python_tests/datasource_xml_template_test.py
+++ b/tests/python_tests/datasource_xml_template_test.py
@@ -21,4 +21,4 @@ def test_datasource_template_is_working():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/extra_map_props_test.py b/tests/python_tests/extra_map_props_test.py
index 2a5f80e..06d6596 100644
--- a/tests/python_tests/extra_map_props_test.py
+++ b/tests/python_tests/extra_map_props_test.py
@@ -34,4 +34,4 @@ def test_serializing_arbitrary_parameters():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/feature_id_test.py b/tests/python_tests/feature_id_test.py
index 2f0856c..cd8d85f 100644
--- a/tests/python_tests/feature_id_test.py
+++ b/tests/python_tests/feature_id_test.py
@@ -63,4 +63,4 @@ def test_feature_hit_count():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/feature_test.py b/tests/python_tests/feature_test.py
index c40665c..11f3f8a 100644
--- a/tests/python_tests/feature_test.py
+++ b/tests/python_tests/feature_test.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
-import itertools
+import itertools,sys
 import unittest
 from nose.tools import *
 from utilities import execution_path, run_all
@@ -12,6 +12,12 @@ def test_default_constructor():
     f = mapnik.Feature(mapnik.Context(),1)
     eq_(f is not None,True)
 
+def test_feature_geo_interface():
+    ctx = mapnik.Context()
+    feat = mapnik.Feature(ctx,1)
+    feat.add_geometries_from_wkt('Point (0 0)')
+    eq_(feat.__geo_interface__['geometry'],{u'type': u'Point', u'coordinates': [0, 0]})
+
 def test_python_extended_constructor():
     context = mapnik.Context()
     context.push('foo')
@@ -89,5 +95,24 @@ def test_feature_expression_evaluation_attr_with_spaces():
     eq_(str(expr),"([name with space]='a')")
     eq_(expr.evaluate(f),True)
 
+# https://github.com/mapnik/mapnik/issues/2390
+ at raises(RuntimeError)
+def test_feature_from_geojson():
+    ctx = mapnik.Context()
+    inline_string = """
+    {
+         "geometry" : {
+            "coordinates" : [ 0,0 ]
+            "type" : "Point"
+         },
+         "type" : "Feature",
+         "properties" : {
+            "this":"that"
+            "known":"nope because missing comma"
+         }
+    }
+    """
+    feat = mapnik.Feature.from_geojson(inline_string,ctx)
+
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/filter_test.py b/tests/python_tests/filter_test.py
index be1925b..bf80fd9 100644
--- a/tests/python_tests/filter_test.py
+++ b/tests/python_tests/filter_test.py
@@ -217,14 +217,14 @@ def test_creation_of_bool():
     eq_(f["bool"],True)
     # TODO - will become int of 1 do to built in boost python conversion
     # https://github.com/mapnik/mapnik/issues/1873
-    eq_(isinstance(f["bool"],bool) or isinstance(f["bool"],int),True)
+    eq_(isinstance(f["bool"],bool) or isinstance(f["bool"],long),True)
     f["bool"] = False
     eq_(f["bool"],False)
-    eq_(isinstance(f["bool"],bool) or isinstance(f["bool"],int),True)
+    eq_(isinstance(f["bool"],bool) or isinstance(f["bool"],long),True)
     # test NoneType
     f["bool"] = None
     eq_(f["bool"],None)
-    eq_(isinstance(f["bool"],bool) or isinstance(f["bool"],int),False)
+    eq_(isinstance(f["bool"],bool) or isinstance(f["bool"],long),False)
     # test integer
     f["bool"] = 0
     eq_(f["bool"],0)
@@ -235,16 +235,16 @@ def test_creation_of_bool():
 null_equality = [
   ['hello',False,unicode],
   [u'',False,unicode],
-  [0,False,int],
-  [123,False,int],
+  [0,False,long],
+  [123,False,long],
   [0.0,False,float],
   [123.123,False,float],
   [.1,False,float],
-  [False,False,int], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
-  [True,False,int], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
+  [False,False,long], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
+  [True,False,long], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
   [None,True,None],
-  [2147483648,False,int],
-  [922337203685477580,False,int]
+  [2147483648,False,long],
+  [922337203685477580,False,long]
 ]
 
 def test_expressions_with_null_equality():
@@ -283,16 +283,16 @@ def test_expressions_with_null_equality2():
 truthyness = [
   [u'hello',True,unicode],
   [u'',False,unicode],
-  [0,False,int],
-  [123,True,int],
+  [0,False,long],
+  [123,True,long],
   [0.0,False,float],
   [123.123,True,float],
   [.1,True,float],
-  [False,False,int], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
-  [True,True,int], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
+  [False,False,long], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
+  [True,True,long], # TODO - should become bool: https://github.com/mapnik/mapnik/issues/1873
   [None,False,None],
-  [2147483648,True,int],
-  [922337203685477580,True,int]
+  [2147483648,True,long],
+  [922337203685477580,True,long]
 ]
 
 def test_expressions_for_thruthyness():
@@ -431,6 +431,15 @@ def test_truthyness_comparision():
     eq_(mapnik.Expression("[prop] = true").to_bool(f),True)
     eq_(mapnik.Expression("[prop] != true").to_bool(f),False)
 
+def test_division_by_zero():
+    expr = mapnik.Expression('[a]/[b]')
+    c = mapnik.Context()
+    c.push('a')
+    c.push('b')
+    f = mapnik.Feature(c,0);
+    f['a'] = 1
+    f['b'] = 0
+    eq_(expr.evaluate(f),None)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/font_test.py b/tests/python_tests/font_test.py
index 97845e7..445c104 100644
--- a/tests/python_tests/font_test.py
+++ b/tests/python_tests/font_test.py
@@ -13,4 +13,4 @@ import mapnik
 #    ts = mapnik.TextSymbolizer('Name', 'Invalid Font Name', int(8), mapnik.Color('black'))
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/fontset_test.py b/tests/python_tests/fontset_test.py
index f787995..34c6858 100644
--- a/tests/python_tests/fontset_test.py
+++ b/tests/python_tests/fontset_test.py
@@ -17,26 +17,26 @@ def test_loading_fontset_from_map():
     eq_(len(fs.names),2)
     eq_(list(fs.names),['DejaVu Sans Book','DejaVu Sans Oblique'])
 
-def test_loading_fontset_from_python():
-    m = mapnik.Map(256,256)
-    fset = mapnik.FontSet('foo')
-    fset.add_face_name('Comic Sans')
-    fset.add_face_name('Papyrus')
-    eq_(fset.name,'foo')
-    fset.name = 'my-set'
-    eq_(fset.name,'my-set')
-    m.append_fontset('my-set', fset)
-    sty = mapnik.Style()
-    rule = mapnik.Rule()
-    tsym = mapnik.TextSymbolizer()
-    eq_(tsym.fontset,None)
-    tsym.fontset = fset
-    rule.symbols.append(tsym)
-    sty.rules.append(rule)
-    m.append_style('Style',sty)
-    serialized_map = mapnik.save_map_to_string(m)
-    eq_('fontset-name="my-set"' in serialized_map,True)
+# def test_loading_fontset_from_python():
+#     m = mapnik.Map(256,256)
+#     fset = mapnik.FontSet('foo')
+#     fset.add_face_name('Comic Sans')
+#     fset.add_face_name('Papyrus')
+#     eq_(fset.name,'foo')
+#     fset.name = 'my-set'
+#     eq_(fset.name,'my-set')
+#     m.append_fontset('my-set', fset)
+#     sty = mapnik.Style()
+#     rule = mapnik.Rule()
+#     tsym = mapnik.TextSymbolizer()
+#     eq_(tsym.fontset,None)
+#     tsym.fontset = fset
+#     rule.symbols.append(tsym)
+#     sty.rules.append(rule)
+#     m.append_style('Style',sty)
+#     serialized_map = mapnik.save_map_to_string(m)
+#     eq_('fontset-name="my-set"' in serialized_map,True)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/geojson_plugin_test.py b/tests/python_tests/geojson_plugin_test.py
index 268ce9a..065cd30 100644
--- a/tests/python_tests/geojson_plugin_test.py
+++ b/tests/python_tests/geojson_plugin_test.py
@@ -13,7 +13,7 @@ def setup():
 if 'geojson' in mapnik.DatasourceCache.plugin_names():
 
     def test_geojson_init():
-        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.json')
+        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.geojson')
         e = ds.envelope()
         assert_almost_equal(e.minx, -81.705583, places=7)
         assert_almost_equal(e.miny, 41.480573, places=6)
@@ -21,39 +21,51 @@ if 'geojson' in mapnik.DatasourceCache.plugin_names():
         assert_almost_equal(e.maxy, 41.480573, places=3)
 
     def test_geojson_properties():
-        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.json')
-        f = ds.features_at_point(s.envelope().center()).features[0]
-
+        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.geojson')
+        f = ds.features_at_point(ds.envelope().center()).features[0]
+        eq_(len(ds.fields()),7)
         desc = ds.describe()
         eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
 
-        eq_(f['name'], u'test')
-        eq_(f['description'], u'Test: \u005C')
+        eq_(f['name'], u'Test')
         eq_(f['int'], 1)
-        eq_(f['double'], u'Quebec')
+        eq_(f['description'], u'Test: \u005C')
+        eq_(f['spaces'], u'this has spaces')
+        eq_(f['double'], 1.1)
         eq_(f['boolean'], True)
         eq_(f['NOM_FR'], u'Qu\xe9bec')
         eq_(f['NOM_FR'], u'Québec')
 
-    def test_geojson_properties():
-        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.json')
+        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.geojson')
         f = ds.all_features()[0]
+        eq_(len(ds.fields()),7)
 
         desc = ds.describe()
         eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
 
         eq_(f['name'], u'Test')
         eq_(f['int'], 1)
+        eq_(f['description'], u'Test: \u005C')
+        eq_(f['spaces'], u'this has spaces')
         eq_(f['double'], 1.1)
         eq_(f['boolean'], True)
         eq_(f['NOM_FR'], u'Qu\xe9bec')
         eq_(f['NOM_FR'], u'Québec')
-        eq_(f['spaces'], u'this has spaces')
-        eq_(f['description'], u'Test: \u005C')
+
+    def test_geojson_from_in_memory_string():
+        # will silently fail since it is a geometry and needs to be a featurecollection.
+        #ds = mapnik.Datasource(type='geojson',inline='{"type":"LineString","coordinates":[[0,0],[10,10]]}')
+        # works since it is a featurecollection
+        ds = mapnik.Datasource(type='geojson',inline='{ "type":"FeatureCollection", "features": [ { "type":"Feature", "properties":{"name":"test"}, "geometry": { "type":"LineString","coordinates":[[0,0],[10,10]] } } ]}')
+        eq_(len(ds.fields()),1)
+        f = ds.all_features()[0]
+        desc = ds.describe()
+        eq_(desc['geometry_type'],mapnik.DataGeometryType.LineString)
+        eq_(f['name'], u'test')
 
 #    @raises(RuntimeError)
     def test_that_nonexistant_query_field_throws(**kwargs):
-        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.json')
+        ds = mapnik.Datasource(type='geojson',file='../data/json/escaped.geojson')
         eq_(len(ds.fields()),7)
         # TODO - this sorting is messed up
         #eq_(ds.fields(),['name', 'int', 'double', 'description', 'boolean', 'NOM_FR'])
@@ -66,6 +78,14 @@ if 'geojson' in mapnik.DatasourceCache.plugin_names():
 #        query.add_property_name('bogus')
 #        fs = ds.features(query)
 
+    def test_parsing_feature_collection_with_top_level_properties():
+        ds = mapnik.Datasource(type='geojson',file='../data/json/feature_collection_level_properties.json')
+        f = ds.all_features()[0]
+
+        desc = ds.describe()
+        eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
+        eq_(f['feat_name'], u'feat_value')
+
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/geometry_io_test.py b/tests/python_tests/geometry_io_test.py
index c5440a4..667116f 100644
--- a/tests/python_tests/geometry_io_test.py
+++ b/tests/python_tests/geometry_io_test.py
@@ -6,6 +6,11 @@ from utilities import execution_path, run_all
 import mapnik
 from binascii import unhexlify
 
+try:
+    import json
+except ImportError:
+    import simplejson as json
+
 def setup():
     # All of the paths used are relative, if we run the tests
     # from another directory we need to chdir()
@@ -27,23 +32,61 @@ wkts = [
     [2,"MULTIPOLYGON(((-178.32319 71.518365,-178.321586 71.518439,-178.259635 71.510688,-178.304862 71.513129,-178.32319 71.518365)),((-178.32319 71.518365,-178.341544 71.517524,-178.32244 71.505439,-178.215323 71.478034,-178.193473 71.47663,-178.147757 71.485175,-178.124442 71.481879,-178.005729 71.448615,-178.017203 71.441413,-178.054191 71.428778,-178.047049 71.425727,-178.033439 71.417792,-178.026236 71.415107,-178.030082 71.413459,-178.039908 71.40766,-177.970878 71.39643,-177.77983 [...]
 ]
 
+geojson = [
+    [1,'{"type":"Point","coordinates":[30,10]}'],
+    [1,'{"type":"Point","coordinates":[30.0,10.0]}'],
+    [1,'{"type":"Point","coordinates":[30.1,10.1]}'],
+    [1,'{"type":"LineString","coordinates":[[30.0,10.0],[10.0,30.0],[40.0,40.0]]}'],
+    [1,'{"type":"Polygon","coordinates":[[[30.0,10.0],[10.0,20.0],[20.0,40.0],[40.0,40.0],[30.0,10.0]]]}'],
+    [1,'{"type":"Polygon","coordinates":[[[35.0,10.0],[10.0,20.0],[15.0,40.0],[45.0,45.0],[35.0,10.0]],[[20.0,30.0],[35.0,35.0],[30.0,20.0],[20.0,30.0]]]}'],
+    [4,'{"type":"MultiPoint","coordinates":[[10.0,40.0],[40.0,30.0],[20.0,20.0],[30.0,10.0]]}'],
+    [2,'{"type":"MultiLineString","coordinates":[[[10.0,10.0],[20.0,20.0],[10.0,40.0]],[[40.0,40.0],[30.0,30.0],[40.0,20.0],[30.0,10.0]]]}'],
+    [2,'{"type":"MultiPolygon","coordinates":[[[[30.0,20.0],[10.0,40.0],[45.0,40.0],[30.0,20.0]]],[[[15.0,5.0],[40.0,10.0],[10.0,20.0],[5.0,10.0],[15.0,5.0]]]]}'],
+    [2,'{"type":"MultiPolygon","coordinates":[[[[40.0,40.0],[20.0,45.0],[45.0,30.0],[40.0,40.0]]],[[[20.0,35.0],[45.0,20.0],[30.0,5.0],[10.0,10.0],[10.0,30.0],[20.0,35.0]],[[30.0,20.0],[20.0,25.0],[20.0,15.0],[30.0,20.0]]]]}'],
+    [3,'{"type":"GeometryCollection","geometries":[{"type":"Polygon","coordinates":[[[1.0,1.0],[2.0,1.0],[2.0,2.0],[1.0,2.0],[1.0,1.0]]]},{"type":"Point","coordinates":[2.0,3.0]},{"type":"LineString","coordinates":[[2.0,3.0],[3.0,4.0]]}]}'],
+    [1,'{"type":"Polygon","coordinates":[[[-178.32319,71.518365],[-178.321586,71.518439],[-178.259635,71.510688],[-178.304862,71.513129],[-178.32319,71.518365]],[[-178.32319,71.518365],[-178.341544,71.517524],[-178.32244,71.505439],[-178.215323,71.478034],[-178.193473,71.47663],[-178.147757,71.485175],[-178.124442,71.481879],[-178.005729,71.448615],[-178.017203,71.441413],[-178.054191,71.428778],[-178.047049,71.425727],[-178.033439,71.417792],[-178.026236,71.415107],[-178.030082,71.41345 [...]
+    [2,'{"type":"MultiPolygon","coordinates":[[[[-178.32319,71.518365],[-178.321586,71.518439],[-178.259635,71.510688],[-178.304862,71.513129],[-178.32319,71.518365]]],[[[-178.32319,71.518365],[-178.341544,71.517524],[-178.32244,71.505439],[-178.215323,71.478034],[-178.193473,71.47663],[-178.147757,71.485175],[-178.124442,71.481879],[-178.005729,71.448615],[-178.017203,71.441413],[-178.054191,71.428778],[-178.047049,71.425727],[-178.033439,71.417792],[-178.026236,71.415107],[-178.030082, [...]
+]
+
+geojson_reversed = [
+    [1,'{"coordinates":[30,10],"type":"Point"}'],
+    [1,'{"coordinates":[30.0,10.0],"type":"Point"}'],
+    [1,'{"coordinates":[30.1,10.1],"type":"Point"}'],
+    [1,'{"coordinates":[[30.0,10.0],[10.0,30.0],[40.0,40.0]],"type":"LineString"}'],
+    [1,'{"coordinates":[[[30.0,10.0],[10.0,20.0],[20.0,40.0],[40.0,40.0],[30.0,10.0]]],"type":"Polygon"}'],
+    [1,'{"coordinates":[[[35.0,10.0],[10.0,20.0],[15.0,40.0],[45.0,45.0],[35.0,10.0]],[[20.0,30.0],[35.0,35.0],[30.0,20.0],[20.0,30.0]]],"type":"Polygon"}'],
+    [4,'{"coordinates":[[10.0,40.0],[40.0,30.0],[20.0,20.0],[30.0,10.0]],"type":"MultiPoint"}'],
+    [2,'{"coordinates":[[[10.0,10.0],[20.0,20.0],[10.0,40.0]],[[40.0,40.0],[30.0,30.0],[40.0,20.0],[30.0,10.0]]],"type":"MultiLineString"}'],
+    [2,'{"coordinates":[[[[30.0,20.0],[10.0,40.0],[45.0,40.0],[30.0,20.0]]],[[[15.0,5.0],[40.0,10.0],[10.0,20.0],[5.0,10.0],[15.0,5.0]]]],"type":"MultiPolygon"}'],
+    [2,'{"coordinates":[[[[40.0,40.0],[20.0,45.0],[45.0,30.0],[40.0,40.0]]],[[[20.0,35.0],[45.0,20.0],[30.0,5.0],[10.0,10.0],[10.0,30.0],[20.0,35.0]],[[30.0,20.0],[20.0,25.0],[20.0,15.0],[30.0,20.0]]]],"type":"MultiPolygon"}'],
+    [3,'{"geometries":[{"coordinates":[[[1.0,1.0],[2.0,1.0],[2.0,2.0],[1.0,2.0],[1.0,1.0]]],"type":"Polygon"},{"coordinates":[2.0,3.0],"type":"Point"},{"coordinates":[[2.0,3.0],[3.0,4.0]],"type":"LineString"}],"type":"GeometryCollection"}'],
+    [1,'{"coordinates":[[[-178.32319,71.518365],[-178.321586,71.518439],[-178.259635,71.510688],[-178.304862,71.513129],[-178.32319,71.518365]],[[-178.32319,71.518365],[-178.341544,71.517524],[-178.32244,71.505439],[-178.215323,71.478034],[-178.193473,71.47663],[-178.147757,71.485175],[-178.124442,71.481879],[-178.005729,71.448615],[-178.017203,71.441413],[-178.054191,71.428778],[-178.047049,71.425727],[-178.033439,71.417792],[-178.026236,71.415107],[-178.030082,71.413459],[-178.039908,7 [...]
+    [2,'{"coordinates":[[[[-178.32319,71.518365],[-178.321586,71.518439],[-178.259635,71.510688],[-178.304862,71.513129],[-178.32319,71.518365]]],[[[-178.32319,71.518365],[-178.341544,71.517524],[-178.32244,71.505439],[-178.215323,71.478034],[-178.193473,71.47663],[-178.147757,71.485175],[-178.124442,71.481879],[-178.005729,71.448615],[-178.017203,71.441413],[-178.054191,71.428778],[-178.047049,71.425727],[-178.033439,71.417792],[-178.026236,71.415107],[-178.030082,71.413459],[-178.03990 [...]
+]
+
+geojson_nulls = [
+  '{ "type": "Feature", "properties": { }, "geometry": null }',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [] ] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [] ] ] } }',
+  '{ "type": "Feature", "properties": { }, "geometry": { "coordinates": [], "type": "Point" }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "coordinates": [ [] ], "type": "LineString" }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "coordinates": [ [ [] ] ], "type": "Polygon" } }',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPoint", "coordinates": [ [] ] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPoint", "coordinates": [ [],[] ] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiLineString", "coordinates": [ [] ] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiLineString", "coordinates": [ [ [] ] ] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPolygon", "coordinates": [ [] ] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [] ] ] }}',
+  '{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [] ] ] ] }}',
+]
+
 wkbs = [
     [ 0, "Point EMPTY", '010400000000000000'],
     [ 0, "MULTIPOINT EMPTY", '010400000000000000'],
     [ 0, "LINESTRING EMPTY", '010200000000000000'],
     [ 0, "MULTILINESTRING EMPTY", '010500000000000000'],
     [ 0, "Polygon EMPTY", '010300000000000000'],
-    [ 0, "MULTIPOLYGON EMPTY", '010600000000000000'],
-    [ 0, "TRIANGLE EMPTY", '011100000000000000'],
-
-    [ 0, "CircularString EMPTY", '010800000000000000'],
-    [ 0, "CurvePolygon EMPTY", '010A00000000000000'],
-    [ 0, "CompoundCurve EMPTY", '010900000000000000'],
-    [ 0, "MultiCurve EMPTY", '010B00000000000000'],
-
-    [ 0, "MultiSurface EMPTY", '010C00000000000000'],
-    [ 0, "PolyhedralSurface EMPTY", '010F00000000000000'],
-    [ 0, "TIN EMPTY", '011000000000000000'],
     [ 0, "GEOMETRYCOLLECTION EMPTY", '010700000000000000'],
     [ 2, "GEOMETRYCOLLECTION(MULTILINESTRING((10 10,20 20,10 40),(40 40,30 30,40 20,30 10)),LINESTRING EMPTY)", '010700000002000000010500000002000000010200000003000000000000000000244000000000000024400000000000003440000000000000344000000000000024400000000000004440010200000004000000000000000000444000000000000044400000000000003e400000000000003e40000000000000444000000000000034400000000000003e400000000000002440010200000000000000'
     ],
@@ -53,27 +96,28 @@ wkbs = [
     [ 1, "GEOMETRYCOLLECTION(POINT EMPTY,MULTIPOINT(0 0))", '010700000002000000010400000000000000010400000001000000010100000000000000000000000000000000000000'],
     [ 0, "LINESTRING EMPTY", '010200000000000000' ],
     [ 1, "Point(0 0)", '010100000000000000000000000000000000000000' ],
-    # a few bogus inputs
-    [ 0, "", '' ],
-    [ 0, "00", '01' ],
-    [ 0, "0000", '0104' ],
+    # unsupported types
+    [ 0, "MULTIPOLYGON EMPTY", '010600000000000000'],
+    [ 0, "TRIANGLE EMPTY", '011100000000000000'],
+    [ 0, "CircularString EMPTY", '010800000000000000'],
+    [ 0, "CurvePolygon EMPTY", '010A00000000000000'],
+    [ 0, "CompoundCurve EMPTY", '010900000000000000'],
+    [ 0, "MultiCurve EMPTY", '010B00000000000000'],
+    [ 0, "MultiSurface EMPTY", '010C00000000000000'],
+    [ 0, "PolyhedralSurface EMPTY", '010F00000000000000'],
+    [ 0, "TIN EMPTY", '011000000000000000'],
+    # TODO - a few bogus inputs
+    # enable if we start range checking to avoid crashing on invalid input?
+    # https://github.com/mapnik/mapnik/issues/2236
+    #[ 0, "", '' ],
+    #[ 0, "00", '01' ],
+    #[ 0, "0000", '0104' ],
 ]
 
-geojson = [
-[1,'{"type":"Point","coordinates":[30,10]}'],
-[1,'{"type":"Point","coordinates":[30.0,10.0]}'],
-[1,'{"type":"Point","coordinates":[30.1,10.1]}'],
-[1,'{"type":"LineString","coordinates":[[30.0,10.0],[10.0,30.0],[40.0,40.0]]}'],
-[1,'{"type":"Polygon","coordinates":[[[30.0,10.0],[10.0,20.0],[20.0,40.0],[40.0,40.0],[30.0,10.0]]]}'],
-[1,'{"type":"Polygon","coordinates":[[[35.0,10.0],[10.0,20.0],[15.0,40.0],[45.0,45.0],[35.0,10.0]],[[20.0,30.0],[35.0,35.0],[30.0,20.0],[20.0,30.0]]]}'],
-[4,'{"type":"MultiPoint","coordinates":[[10.0,40.0],[40.0,30.0],[20.0,20.0],[30.0,10.0]]}'],
-[2,'{"type":"MultiLineString","coordinates":[[[10.0,10.0],[20.0,20.0],[10.0,40.0]],[[40.0,40.0],[30.0,30.0],[40.0,20.0],[30.0,10.0]]]}'],
-[2,'{"type":"MultiPolygon","coordinates":[[[[30.0,20.0],[10.0,40.0],[45.0,40.0],[30.0,20.0]]],[[[15.0,5.0],[40.0,10.0],[10.0,20.0],[5.0,10.0],[15.0,5.0]]]]}'],
-[2,'{"type":"MultiPolygon","coordinates":[[[[40.0,40.0],[20.0,45.0],[45.0,30.0],[40.0,40.0]]],[[[20.0,35.0],[45.0,20.0],[30.0,5.0],[10.0,10.0],[10.0,30.0],[20.0,35.0]],[[30.0,20.0],[20.0,25.0],[20.0,15.0],[30.0,20.0]]]]}'],
-[3,'{"type":"GeometryCollection","geometries":[{"type":"Polygon","coordinates":[[[1.0,1.0],[2.0,1.0],[2.0,2.0],[1.0,2.0],[1.0,1.0]]]},{"type":"Point","coordinates":[2.0,3.0]},{"type":"LineString","coordinates":[[2.0,3.0],[3.0,4.0]]}]}'],
-[1,'{"type":"Polygon","coordinates":[[[-178.32319,71.518365],[-178.321586,71.518439],[-178.259635,71.510688],[-178.304862,71.513129],[-178.32319,71.518365]],[[-178.32319,71.518365],[-178.341544,71.517524],[-178.32244,71.505439],[-178.215323,71.478034],[-178.193473,71.47663],[-178.147757,71.485175],[-178.124442,71.481879],[-178.005729,71.448615],[-178.017203,71.441413],[-178.054191,71.428778],[-178.047049,71.425727],[-178.033439,71.417792],[-178.026236,71.415107],[-178.030082,71.413459],[ [...]
-[2,'{"type":"MultiPolygon","coordinates":[[[[-178.32319,71.518365],[-178.321586,71.518439],[-178.259635,71.510688],[-178.304862,71.513129],[-178.32319,71.518365]]],[[[-178.32319,71.518365],[-178.341544,71.517524],[-178.32244,71.505439],[-178.215323,71.478034],[-178.193473,71.47663],[-178.147757,71.485175],[-178.124442,71.481879],[-178.005729,71.448615],[-178.017203,71.441413],[-178.054191,71.428778],[-178.047049,71.425727],[-178.033439,71.417792],[-178.026236,71.415107],[-178.030082,71.4 [...]
-
+def test_path_geo_interface():
+    path = mapnik.Path()
+    path.add_wkt('POINT(0 0)')
+    eq_(path.__geo_interface__,{u'type': u'Point', u'coordinates': [0, 0]})
 
 def test_wkb_parsing():
     path = mapnik.Path()
@@ -82,8 +126,11 @@ def test_wkb_parsing():
         count += wkb[0]
         try :
             path.add_wkb(unhexlify(wkb[2]))
-        except RuntimeError:
-            pass
+        except RuntimeError, e:
+            if 'EMPTY' in wkb[1]:
+                pass
+            else:
+                raise e
     eq_(count,len(path))
 
 def test_geojson_parsing():
@@ -91,15 +138,48 @@ def test_geojson_parsing():
     count = 0
     for json in geojson:
         count += json[0]
-        try :
-            path.add_geojson(json[1])
-        except RuntimeError:
-            pass
+        path.add_geojson(json[1])
+    eq_(count,len(path))
+
+def test_geojson_parsing_reversed():
+    path = mapnik.Path()
+    path2 = mapnik.Path()
+    count = 0
+    for idx,json in enumerate(geojson_reversed):
+        count += json[0]
+        path.add_geojson(json[1])
+        path2.add_geojson(geojson[idx][1])
+        eq_(path.to_geojson(),path2.to_geojson())
     eq_(count,len(path))
 
+
+# http://geojson.org/geojson-spec.html#positions
+def test_geojson_point_positions():
+    input_json = '{"type":"Point","coordinates":[30,10]}'
+
+    path = mapnik.Path()
+    path.add_geojson(input_json)
+    eq_(path.to_geojson(),input_json)
+
+    path = mapnik.Path()
+    # should ignore all but the first two
+    path.add_geojson('{"type":"Point","coordinates":[30,10,50,50,50,50]}')
+    eq_(path.to_geojson(),input_json)
+
+def test_geojson_point_positions():
+    input_json = '{"type":"LineString","coordinates":[[30,10],[10,30],[40,40]]}'
+
+    path = mapnik.Path()
+    path.add_geojson(input_json)
+    eq_(path.to_geojson(),input_json)
+
+    path = mapnik.Path()
+    # should ignore all but the first two
+    path.add_geojson('{"type":"LineString","coordinates":[[30.0,10.0,0,0,0],[10.0,30.0,0,0,0],[40.0,40.0,0,0,0]]}')
+    eq_(path.to_geojson(),input_json)
+
 def compare_wkb_from_wkt(wkt,num=None):
 
-    # create a Path from geometry(s)
     paths = mapnik.Path.from_wkt(wkt)
 
     # add geometry(s) to feature from wkt
@@ -130,7 +210,6 @@ def compare_wkb_from_wkt(wkt,num=None):
         eq_(f.geometries()[idx].to_wkb(mapnik.wkbByteOrder.XDR),path.to_wkb(mapnik.wkbByteOrder.XDR))
 
 def compare_wkt_from_wkt(wkt,num=None):
-    # create a Path from geometry(s)
     paths = mapnik.Path.from_wkt(wkt)
 
     # add geometry(s) to feature from wkt
@@ -163,6 +242,17 @@ def compare_wkt_from_wkt(wkt,num=None):
     for idx,path in enumerate(paths2):
         eq_(f.geometries()[idx].to_wkb(mapnik.wkbByteOrder.XDR),path.to_wkb(mapnik.wkbByteOrder.XDR))
 
+def compare_wkt_to_geojson(idx,wkt,num=None):
+    paths = mapnik.Path.from_wkt(wkt)
+    # ensure both have same result
+    if num:
+        eq_(len(paths),num)
+    gj = paths.to_geojson()
+    eq_(len(gj) > 1,True)
+    a = json.loads(gj)
+    e = json.loads(geojson[idx][1])
+    eq_(a,e)
+
 def test_wkt_simple():
     for wkt in wkts:
         try:
@@ -177,6 +267,15 @@ def test_wkb_simple():
         except RuntimeError, e:
             raise RuntimeError('%s %s' % (e, wkt))
 
+def test_wkt_to_geojson():
+    idx = -1
+    for wkt in wkts:
+        try:
+            idx += 1
+            compare_wkt_to_geojson(idx,wkt[1],wkt[0])
+        except RuntimeError, e:
+            raise RuntimeError('%s %s' % (e, wkt))
+
 @raises(IndexError)
 def test_geometry_index_error():
     wkt = 'Point (0 0)'
@@ -222,6 +321,27 @@ def test_wkt_collection_flattening():
 #        except RuntimeError, e:
 #            raise RuntimeError('%s %s' % (e, wkt))
 
+def test_creating_feature_from_geojson():
+    json_feat = {
+      "type": "Feature",
+      "geometry": {"type": "Point", "coordinates": [-122,48]},
+      "properties": {"name": "value"}
+    }
+    ctx = mapnik.Context()
+    feat = mapnik.Feature.from_geojson(json.dumps(json_feat),ctx)
+    eq_(feat.id(),1)
+    eq_(feat['name'],u'value')
+
+def test_handling_geojson_null_geoms():
+    for json in geojson_nulls:
+        ctx = mapnik.Context()
+        out_json = mapnik.Feature.from_geojson(json,ctx).to_geojson()
+        expected = '{"type":"Feature","id":1,"geometry":null,"properties":{}}'
+        eq_(out_json,expected)
+        # ensure it round trips
+        eq_(mapnik.Feature.from_geojson(out_json,ctx).to_geojson(),expected)
+
+
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/grayscale_test.py b/tests/python_tests/grayscale_test.py
index 5b52f4e..de1fa47 100644
--- a/tests/python_tests/grayscale_test.py
+++ b/tests/python_tests/grayscale_test.py
@@ -10,4 +10,4 @@ def test_grayscale_conversion():
     eq_((pixel >> 24) & 0xff,255);
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/image_encoding_speed_test.py b/tests/python_tests/image_encoding_speed_test.py
index ffe1d31..51dedc4 100644
--- a/tests/python_tests/image_encoding_speed_test.py
+++ b/tests/python_tests/image_encoding_speed_test.py
@@ -42,8 +42,10 @@ combinations = ['png',
                 'png:z=1:s=filtered',
                 'png:z=1:s=huff',
                 'png:z=1:s=rle',
-                'png:m=h;g=2.0',
-                'png:m=h;g=1.0',
+                'png:m=h:g=2.0',
+                'png:m=h:g=1.0',
+                'png:e=miniz',
+                'png8:e=miniz'
                ]
 
 tiles = [
@@ -122,4 +124,4 @@ def do_encoding():
 if __name__ == "__main__":
     setup()
     do_encoding()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/image_filters_test.py b/tests/python_tests/image_filters_test.py
index 2196294..c122294 100644
--- a/tests/python_tests/image_filters_test.py
+++ b/tests/python_tests/image_filters_test.py
@@ -49,20 +49,20 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
             mapnik.render(m, im)
             actual = '/tmp/mapnik-style-image-filter-' + filename + '.png'
             expected = 'images/style-image-filter/' + filename + '.png'
-            im.save(actual)
+            im.save(actual,"png32")
             if not os.path.exists(expected):
                 print 'generating expected test image: %s' % expected
-                im.save(expected)
+                im.save(expected,'png32')
             expected_im = mapnik.Image.open(expected)
             # compare them
-            if im.tostring() == expected_im.tostring():
+            if im.tostring('png32') == expected_im.tostring('png32'):
                 successes.append(name)
             else:
                 fails.append('failed comparing actual (%s) and expected(%s)' % (actual,'tests/python_tests/'+ expected))
                 fail_im = side_by_side_image(expected_im, im)
-                fail_im.save('/tmp/mapnik-style-image-filter-' + filename + '.fail.png')
+                fail_im.save('/tmp/mapnik-style-image-filter-' + filename + '.fail.png','png32')
         eq_(len(fails), 0, '\n'+'\n'.join(fails))
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/image_test.py b/tests/python_tests/image_test.py
index 5c12f18..4947ce9 100644
--- a/tests/python_tests/image_test.py
+++ b/tests/python_tests/image_test.py
@@ -7,11 +7,26 @@ from timeit import Timer, time
 from nose.tools import *
 from utilities import execution_path, run_all
 
+
 def setup():
     # All of the paths used are relative, if we run the tests
     # from another directory we need to chdir()
     os.chdir(execution_path('.'))
 
+def test_image_premultiply():
+    im = mapnik.Image(256,256)
+    eq_(im.premultiplied(),False)
+    im.premultiply()
+    eq_(im.premultiplied(),True)
+    im.demultiply()
+    eq_(im.premultiplied(),False)
+
+# Disabled for now since this breaks hard if run against
+# a mapnik version that does not have the fix
+#@raises(RuntimeError)
+#def test_negative_image_dimensions():
+    #im = mapnik.Image(-40,40)
+
 def test_tiff_round_trip():
     filepath = '/tmp/mapnik-tiff-io.tiff'
     im = mapnik.Image(255,267)
@@ -57,11 +72,11 @@ def test_image_open_from_string():
     eq_(len(mapnik.Image.fromstring(im1.tostring('jpeg')).tostring()),length)
     eq_(len(mapnik.Image.frombuffer(buffer(im1.tostring('png'))).tostring()),length)
     eq_(len(mapnik.Image.frombuffer(buffer(im1.tostring('jpeg'))).tostring()),length)
-    
+
     # TODO - https://github.com/mapnik/mapnik/issues/1831
     eq_(len(mapnik.Image.fromstring(im1.tostring('tiff')).tostring()),length)
     eq_(len(mapnik.Image.frombuffer(buffer(im1.tostring('tiff'))).tostring()),length)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/images/composited/color.png b/tests/python_tests/images/composited/color.png
index c9f7e79..f9a6879 100644
Binary files a/tests/python_tests/images/composited/color.png and b/tests/python_tests/images/composited/color.png differ
diff --git a/tests/python_tests/images/composited/divide.png b/tests/python_tests/images/composited/divide.png
new file mode 100644
index 0000000..0a4b24f
Binary files /dev/null and b/tests/python_tests/images/composited/divide.png differ
diff --git a/tests/python_tests/images/composited/dst_over.png b/tests/python_tests/images/composited/dst_over.png
index 723c8a0..51fe08e 100644
Binary files a/tests/python_tests/images/composited/dst_over.png and b/tests/python_tests/images/composited/dst_over.png differ
diff --git a/tests/python_tests/images/composited/linear_burn.png b/tests/python_tests/images/composited/linear_burn.png
new file mode 100644
index 0000000..37ec4b7
Binary files /dev/null and b/tests/python_tests/images/composited/linear_burn.png differ
diff --git a/tests/python_tests/images/composited/linear_dodge.png b/tests/python_tests/images/composited/linear_dodge.png
new file mode 100644
index 0000000..848ddca
Binary files /dev/null and b/tests/python_tests/images/composited/linear_dodge.png differ
diff --git a/tests/python_tests/images/pycairo/cairo-cairo-expected-reduced.png b/tests/python_tests/images/pycairo/cairo-cairo-expected-reduced.png
new file mode 100644
index 0000000..6c3bfc9
Binary files /dev/null and b/tests/python_tests/images/pycairo/cairo-cairo-expected-reduced.png differ
diff --git a/tests/python_tests/images/pycairo/cairo-cairo-expected.pdf b/tests/python_tests/images/pycairo/cairo-cairo-expected.pdf
new file mode 100644
index 0000000..7c654ae
Binary files /dev/null and b/tests/python_tests/images/pycairo/cairo-cairo-expected.pdf differ
diff --git a/tests/python_tests/images/pycairo/cairo-cairo-expected.png b/tests/python_tests/images/pycairo/cairo-cairo-expected.png
new file mode 100644
index 0000000..1c31f0e
Binary files /dev/null and b/tests/python_tests/images/pycairo/cairo-cairo-expected.png differ
diff --git a/tests/python_tests/images/pycairo/cairo-cairo-expected.svg b/tests/python_tests/images/pycairo/cairo-cairo-expected.svg
new file mode 100644
index 0000000..ae1e90b
--- /dev/null
+++ b/tests/python_tests/images/pycairo/cairo-cairo-expected.svg
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512pt" height="512pt" viewBox="0 0 512 512" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 1 3.53125 L 1 -14.109375 L 11 -14.109375 L 11 3.53125 Z M 2.125 2.421875 L 9.890625 2.421875 L 9.890625 -12.984375 L 2.125 -12.984375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 1.96875 -14.578125 L 3.9375 -14.578125 L 3.9375 -8.609375 L 11.109375 -8.609375 L 11.109375 -14.578125 L 13.078125 -14.578125 L 13.078125 0 L 11.109375 0 L 11.109375 -6.9375 L 3.9375 -6.9375 L 3.9375 0 L 1.96875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 11.234375 -5.921875 L 11.234375 -5.046875 L 2.984375 -5.046875 C 3.054688 -3.804688 3.425781 -2.859375 4.09375 -2.203125 C 4.757812 -1.554688 5.691406 -1.234375 6.890625 -1.234375 C 7.578125 -1.234375 8.242188 -1.316406 8.890625 -1.484375 C 9.535156 -1.660156 10.179688 -1.914062 10.828125 -2.25 L 10.828125 -0.5625 C 10.179688 -0.28125 9.519531 -0.0703125 8.84375 0.0625 C 8.164062 0.207031 7.476562 0.28125 6.78125 0.28125 C 5.03125 0.28125 3.644531 -0.22265 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 1.890625 -15.203125 L 3.6875 -15.203125 L 3.6875 0 L 1.890625 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 6.125 -9.671875 C 5.15625 -9.671875 4.390625 -9.296875 3.828125 -8.546875 C 3.273438 -7.796875 3 -6.765625 3 -5.453125 C 3 -4.148438 3.273438 -3.117188 3.828125 -2.359375 C 4.390625 -1.609375 5.15625 -1.234375 6.125 -1.234375 C 7.082031 -1.234375 7.835938 -1.609375 8.390625 -2.359375 C 8.953125 -3.117188 9.234375 -4.148438 9.234375 -5.453125 C 9.234375 -6.753906 8.953125 -7.78125 8.390625 -8.53125 C 7.835938 -9.289062 7.082031 -9.671875 6.125 -9.671875 Z M [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 1.96875 -14.578125 L 4.90625 -14.578125 L 8.625 -4.65625 L 12.359375 -14.578125 L 15.296875 -14.578125 L 15.296875 0 L 13.375 0 L 13.375 -12.796875 L 9.625 -2.796875 L 7.640625 -2.796875 L 3.875 -12.796875 L 3.875 0 L 1.96875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 6.859375 -5.5 C 5.398438 -5.5 4.390625 -5.332031 3.828125 -5 C 3.273438 -4.664062 3 -4.097656 3 -3.296875 C 3 -2.660156 3.207031 -2.15625 3.625 -1.78125 C 4.050781 -1.40625 4.625 -1.21875 5.34375 -1.21875 C 6.34375 -1.21875 7.140625 -1.570312 7.734375 -2.28125 C 8.335938 -2.988281 8.640625 -3.925781 8.640625 -5.09375 L 8.640625 -5.5 Z M 10.4375 -6.234375 L 10.4375 0 L 8.640625 0 L 8.640625 -1.65625 C 8.234375 -1 7.722656 -0.507812 7.109375 -0.1875 C 6.4921 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 3.625 -1.640625 L 3.625 4.15625 L 1.8125 4.15625 L 1.8125 -10.9375 L 3.625 -10.9375 L 3.625 -9.28125 C 4 -9.925781 4.472656 -10.40625 5.046875 -10.71875 C 5.628906 -11.039062 6.320312 -11.203125 7.125 -11.203125 C 8.445312 -11.203125 9.523438 -10.671875 10.359375 -9.609375 C 11.191406 -8.554688 11.609375 -7.171875 11.609375 -5.453125 C 11.609375 -3.734375 11.191406 -2.347656 10.359375 -1.296875 C 9.523438 -0.242188 8.445312 0.28125 7.125 0.28125 C 6.320312 [...]
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<rect x="0" y="0" width="512" height="512" style="fill:rgb(27.45098%,50.980392%,70.588235%);fill-opacity:1;stroke:none;"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,100%);fill-opacity:1;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 5 0 L 4.503906 2.167969 L 3.117188 3.910156 L 1.113281 4.875 L -1.113281 4.875 L -3.117188 3.910156 L -4.503906 2.167969 L -5 0 L -4.503906 -2.167969 L -3.117188 -3.910156 L -1.113281 -4.875 L 1.113281 -4.875 L 3.117188 -3.910156 L 4.503906 -2.167969 Z " transform="matrix(1,0,0,1,256,256)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="205.929688" y="25.523438"/>
+  <use xlink:href="#glyph0-2" x="220.96875" y="25.523438"/>
+  <use xlink:href="#glyph0-3" x="233.273438" y="25.523438"/>
+  <use xlink:href="#glyph0-3" x="238.830078" y="25.523438"/>
+  <use xlink:href="#glyph0-4" x="244.386719" y="25.523438"/>
+  <use xlink:href="#glyph0-5" x="256.623047" y="25.523438"/>
+  <use xlink:href="#glyph0-6" x="262.980469" y="25.523438"/>
+  <use xlink:href="#glyph0-7" x="280.236328" y="25.523438"/>
+  <use xlink:href="#glyph0-8" x="292.492188" y="25.523438"/>
+</g>
+<path style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0 0 L 512 0 L 512 512 L 0 512 Z M 6 6 L 506 6 L 506 506 L 6 506 Z "/>
+</g>
+</svg>
diff --git a/tests/python_tests/images/pycairo/cairo-surface-expected.building.pdf b/tests/python_tests/images/pycairo/cairo-surface-expected.building.pdf
new file mode 100644
index 0000000..21d0661
Binary files /dev/null and b/tests/python_tests/images/pycairo/cairo-surface-expected.building.pdf differ
diff --git a/tests/python_tests/images/pycairo/cairo-surface-expected.building.svg b/tests/python_tests/images/pycairo/cairo-surface-expected.building.svg
new file mode 100644
index 0000000..48cf241
--- /dev/null
+++ b/tests/python_tests/images/pycairo/cairo-surface-expected.building.svg
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256pt" height="256pt" viewBox="0 0 256 256" version="1.1">
+<g id="surface39">
+<rect x="0" y="0" width="256" height="256" style="fill:rgb(27.45098%,50.980392%,70.588235%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 132.222656 27.054688 L 141.789062 23.054688 L 141.789062 20.75 L 132.222656 24.746094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 132.507812 28.515625 L 132.222656 27.054688 L 132.222656 24.746094 L 132.507812 26.207031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 141.789062 23.054688 L 145.058594 32.933594 L 145.058594 30.628906 L 141.789062 20.75 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 108.777344 39.203125 L 132.507812 28.515625 L 132.507812 26.207031 L 108.777344 36.894531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 127.984375 38.507812 L 122.578125 41.546875 L 122.578125 39.238281 L 127.984375 36.203125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 102.367188 41.585938 L 108.777344 39.203125 L 108.777344 36.894531 L 102.367188 39.277344 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 131.019531 45.429688 L 127.984375 38.507812 L 127.984375 36.203125 L 131.019531 43.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 122.578125 41.546875 L 118.730469 49.234375 L 118.730469 46.929688 L 122.578125 39.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 105.6875 50.042969 L 102.367188 41.585938 L 102.367188 39.277344 L 105.6875 47.734375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 134.109375 51.578125 L 131.019531 45.429688 L 131.019531 43.121094 L 134.109375 49.273438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 115.65625 56.117188 L 105.6875 50.042969 L 105.6875 47.734375 L 115.65625 53.808594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 118.730469 49.234375 L 115.65625 56.117188 L 115.65625 53.808594 L 118.730469 46.929688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 136.332031 59.265625 L 134.109375 51.578125 L 134.109375 49.273438 L 136.332031 56.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 135.882812 66.1875 L 136.332031 59.265625 L 136.332031 56.960938 L 135.882812 63.878906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 145.058594 32.933594 L 157.566406 68.800781 L 157.566406 66.496094 L 145.058594 30.628906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 135.675781 71.570312 L 135.882812 66.1875 L 135.882812 63.878906 L 135.675781 69.261719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 157.566406 68.800781 L 159.464844 73.835938 L 159.464844 71.53125 L 157.566406 66.496094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 159.464844 73.835938 L 139.804688 81.023438 L 139.804688 78.71875 L 159.464844 71.53125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 139.804688 81.023438 L 135.675781 71.570312 L 135.675781 69.261719 L 139.804688 78.71875 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 115.65625 56.117188 L 105.6875 50.042969 L 102.367188 41.585938 L 108.777344 39.203125 L 132.507812 28.515625 L 132.222656 27.054688 L 141.789062 23.054688 L 145.058594 32.933594 L 157.566406 68.800781 L 159.464844 73.835938 L 139.804688 81.023438 L 135.675781 71.570312 L 135.882812 66.1875 L 136.332031 59.265625 L 134.109375 51.578125 L 13 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 115.65625 53.808594 L 105.6875 47.734375 L 102.367188 39.277344 L 108.777344 36.894531 L 132.507812 26.207031 L 132.222656 24.746094 L 141.789062 20.75 L 145.058594 30.628906 L 157.566406 66.496094 L 159.464844 71.53125 L 139.804688 78.71875 L 135.675781 69.261719 L 135.882812 63.878906 L 136.332031 56.960938 L 134.109375 49.273438 L 131.019531 43.121094 L 127.984375 36.203125 L 122.578125 39.23828 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 132.222656 27.054688 L 132.507812 28.515625 L 132.507812 26.207031 L 132.222656 24.746094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 132.507812 28.515625 L 108.777344 39.203125 L 108.777344 36.894531 L 132.507812 26.207031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 101.800781 39.277344 L 132.222656 27.054688 L 132.222656 24.746094 L 101.800781 36.972656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 108.777344 39.203125 L 102.367188 41.585938 L 102.367188 39.277344 L 108.777344 36.894531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 102.367188 41.585938 L 105.6875 50.042969 L 105.6875 47.734375 L 102.367188 39.277344 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 64.152344 54.578125 L 101.800781 39.277344 L 101.800781 36.972656 L 64.152344 52.269531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 105.6875 50.042969 L 115.65625 56.117188 L 115.65625 53.808594 L 105.6875 47.734375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 53.773438 58.652344 L 64.152344 54.578125 L 64.152344 52.269531 L 53.773438 56.347656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 56.199219 60.996094 L 54.90625 61.496094 L 54.90625 59.191406 L 56.199219 58.691406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 54.90625 61.496094 L 53.773438 58.652344 L 53.773438 56.347656 L 54.90625 59.191406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 115.65625 56.117188 L 112.578125 61.574219 L 112.578125 59.265625 L 115.65625 53.808594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 62.101562 68.839844 L 56.199219 60.996094 L 56.199219 58.691406 L 62.101562 66.53125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 88.605469 74.414062 L 84.253906 74.566406 L 84.253906 72.261719 L 88.605469 72.105469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 112.578125 61.574219 L 105.039062 74.605469 L 105.039062 72.300781 L 112.578125 59.265625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 105.039062 74.605469 L 88.605469 74.414062 L 88.605469 72.105469 L 105.039062 72.300781 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 84.253906 74.566406 L 79.761719 74.644531 L 79.761719 72.335938 L 84.253906 72.261719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 79.761719 74.644531 L 68.664062 79.027344 L 68.664062 76.71875 L 79.761719 72.335938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 68.664062 79.027344 L 67.753906 79.296875 L 67.753906 76.988281 L 68.664062 76.71875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 67.753906 79.296875 L 62.101562 68.839844 L 62.101562 66.53125 L 67.753906 76.988281 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 132.222656 27.054688 L 132.507812 28.515625 L 108.777344 39.203125 L 102.367188 41.585938 L 105.6875 50.042969 L 115.65625 56.117188 L 112.578125 61.574219 L 105.039062 74.605469 L 88.605469 74.414062 L 84.253906 74.566406 L 79.761719 74.644531 L 68.664062 79.027344 L 67.753906 79.296875 L 62.101562 68.839844 L 56.199219 60.996094 L 54.9062 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 132.222656 24.746094 L 132.507812 26.207031 L 108.777344 36.894531 L 102.367188 39.277344 L 105.6875 47.734375 L 115.65625 53.808594 L 112.578125 59.265625 L 105.039062 72.300781 L 88.605469 72.105469 L 84.253906 72.261719 L 79.761719 72.335938 L 68.664062 76.71875 L 67.753906 76.988281 L 62.101562 66.53125 L 56.199219 58.691406 L 54.90625 59.191406 L 53.773438 56.347656 L 64.152344 52.269531 L 101 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 122.578125 41.546875 L 127.984375 38.507812 L 127.984375 36.203125 L 122.578125 39.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 127.984375 38.507812 L 131.019531 45.429688 L 131.019531 43.121094 L 127.984375 36.203125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 118.730469 49.234375 L 122.578125 41.546875 L 122.578125 39.238281 L 118.730469 46.929688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 131.019531 45.429688 L 134.109375 51.578125 L 134.109375 49.273438 L 131.019531 43.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 115.65625 56.117188 L 118.730469 49.234375 L 118.730469 46.929688 L 115.65625 53.808594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 134.109375 51.578125 L 136.332031 59.265625 L 136.332031 56.960938 L 134.109375 49.273438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 112.578125 61.574219 L 115.65625 56.117188 L 115.65625 53.808594 L 112.578125 59.265625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 136.332031 59.265625 L 135.882812 66.1875 L 135.882812 63.878906 L 136.332031 56.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 135.882812 66.1875 L 129.527344 66.6875 L 129.527344 64.378906 L 135.882812 63.878906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 129.527344 66.6875 L 124.503906 68.453125 L 124.503906 66.148438 L 129.527344 64.378906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 124.503906 68.453125 L 121.441406 69.992188 L 121.441406 67.6875 L 124.503906 66.148438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 84.253906 74.566406 L 88.605469 74.414062 L 88.605469 72.105469 L 84.253906 72.261719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 105.039062 74.605469 L 112.578125 61.574219 L 112.578125 59.265625 L 105.039062 72.300781 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 88.605469 74.414062 L 105.039062 74.605469 L 105.039062 72.300781 L 88.605469 72.105469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 79.761719 74.644531 L 84.253906 74.566406 L 84.253906 72.261719 L 79.761719 72.335938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 68.664062 79.027344 L 79.761719 74.644531 L 79.761719 72.335938 L 68.664062 76.71875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 67.753906 79.296875 L 68.664062 79.027344 L 68.664062 76.71875 L 67.753906 76.988281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 121.441406 69.992188 L 109.082031 80.371094 L 109.082031 78.066406 L 121.441406 67.6875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 109.082031 80.371094 L 104.925781 81.371094 L 104.925781 79.066406 L 109.082031 78.066406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 61.679688 81.753906 L 67.753906 79.296875 L 67.753906 76.988281 L 61.679688 79.449219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 104.925781 81.371094 L 102.195312 83.253906 L 102.195312 80.949219 L 104.925781 79.066406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 102.195312 83.253906 L 101.664062 85.136719 L 101.664062 82.832031 L 102.195312 80.949219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 101.664062 85.136719 L 100.078125 88.445312 L 100.078125 86.136719 L 101.664062 82.832031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 100.078125 88.445312 L 97.773438 91.671875 L 97.773438 89.367188 L 100.078125 86.136719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 97.773438 91.671875 L 94.757812 93.558594 L 94.757812 91.25 L 97.773438 89.367188 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 94.757812 93.558594 L 91.441406 100.015625 L 91.441406 97.707031 L 94.757812 91.25 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 91.441406 100.015625 L 71.058594 108.050781 L 71.058594 105.742188 L 91.441406 97.707031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 71.058594 108.050781 L 61.679688 81.753906 L 61.679688 79.449219 L 71.058594 105.742188 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 115.65625 56.117188 L 118.730469 49.234375 L 122.578125 41.546875 L 127.984375 38.507812 L 131.019531 45.429688 L 134.109375 51.578125 L 136.332031 59.265625 L 135.882812 66.1875 L 129.527344 66.6875 L 124.503906 68.453125 L 121.441406 69.992188 L 109.082031 80.371094 L 104.925781 81.371094 L 102.195312 83.253906 L 101.664062 85.136719 L 10 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 115.65625 53.808594 L 118.730469 46.929688 L 122.578125 39.238281 L 127.984375 36.203125 L 131.019531 43.121094 L 134.109375 49.273438 L 136.332031 56.960938 L 135.882812 63.878906 L 129.527344 64.378906 L 124.503906 66.148438 L 121.441406 67.6875 L 109.082031 78.066406 L 104.925781 79.066406 L 102.195312 80.949219 L 101.664062 82.832031 L 100.078125 86.136719 L 97.773438 89.367188 L 94.757812 91.2 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 53.773438 58.652344 L 54.90625 61.496094 L 54.90625 59.191406 L 53.773438 56.347656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 44.109375 62.304688 L 53.773438 58.652344 L 53.773438 56.347656 L 44.109375 59.996094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 0 79.527344 L 44.109375 62.304688 L 44.109375 59.996094 L 0 77.21875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 54.90625 61.496094 L 61.679688 81.753906 L 61.679688 79.449219 L 54.90625 59.191406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 23.488281 86.253906 L 21.667969 87.945312 L 21.667969 85.636719 L 23.488281 83.945312 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 28.25 90.710938 L 23.488281 86.253906 L 23.488281 83.945312 L 28.25 88.40625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 21.667969 87.945312 L 16.679688 93.402344 L 16.679688 91.097656 L 21.667969 85.636719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 7.113281 96.59375 L 0 79.527344 L 0 77.21875 L 7.113281 94.289062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 11.117188 99.59375 L 7.113281 96.59375 L 7.113281 94.289062 L 11.117188 97.285156 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 16.679688 93.402344 L 11.117188 99.59375 L 11.117188 97.285156 L 16.679688 91.097656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 14.351562 105.242188 L 28.25 90.710938 L 28.25 88.40625 L 14.351562 102.9375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 10.238281 106.011719 L 14.351562 105.242188 L 14.351562 102.9375 L 10.238281 103.707031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 61.679688 81.753906 L 71.058594 108.050781 L 71.058594 105.742188 L 61.679688 79.449219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 10.171875 111.96875 L 10.238281 106.011719 L 10.238281 103.707031 L 10.171875 109.664062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 9.871094 116.082031 L 10.171875 111.96875 L 10.171875 109.664062 L 9.871094 113.777344 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 54.027344 114.699219 L 44.699219 118.351562 L 44.699219 116.042969 L 54.027344 112.394531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 71.058594 108.050781 L 76.140625 119.121094 L 76.140625 116.8125 L 71.058594 105.742188 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 11.242188 120.925781 L 9.871094 116.082031 L 9.871094 113.777344 L 11.242188 118.621094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 76.140625 119.121094 L 72.308594 122.695312 L 72.308594 120.390625 L 76.140625 116.8125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 44.699219 118.351562 L 33.3125 123.15625 L 33.3125 120.851562 L 44.699219 116.042969 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 14.414062 130.113281 L 11.242188 120.925781 L 11.242188 118.621094 L 14.414062 127.808594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 33.3125 123.15625 L 14.414062 130.113281 L 14.414062 127.808594 L 33.3125 120.851562 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 72.308594 122.695312 L 69.605469 130.535156 L 69.605469 128.230469 L 72.308594 120.390625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 61.425781 133.496094 L 54.027344 114.699219 L 54.027344 112.394531 L 61.425781 131.191406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 69.605469 130.535156 L 61.425781 133.496094 L 61.425781 131.191406 L 69.605469 128.230469 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 53.773438 58.652344 L 54.90625 61.496094 L 61.679688 81.753906 L 71.058594 108.050781 L 76.140625 119.121094 L 72.308594 122.695312 L 69.605469 130.535156 L 61.425781 133.496094 L 54.027344 114.699219 L 44.699219 118.351562 L 33.3125 123.15625 L 14.414062 130.113281 L 11.242188 120.925781 L 9.871094 116.082031 L 10.171875 111.96875 L 10.238 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 53.773438 56.347656 L 54.90625 59.191406 L 61.679688 79.449219 L 71.058594 105.742188 L 76.140625 116.8125 L 72.308594 120.390625 L 69.605469 128.230469 L 61.425781 131.191406 L 54.027344 112.394531 L 44.699219 116.042969 L 33.3125 120.851562 L 14.414062 127.808594 L 11.242188 118.621094 L 9.871094 113.777344 L 10.171875 109.664062 L 10.238281 103.707031 L 14.351562 102.9375 L 28.25 88.40625 L 23.4 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 54.90625 61.496094 L 56.199219 60.996094 L 56.199219 58.691406 L 54.90625 59.191406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 56.199219 60.996094 L 62.101562 68.839844 L 62.101562 66.53125 L 56.199219 58.691406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 62.101562 68.839844 L 67.753906 79.296875 L 67.753906 76.988281 L 62.101562 66.53125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 67.753906 79.296875 L 61.679688 81.753906 L 61.679688 79.449219 L 67.753906 76.988281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 61.679688 81.753906 L 54.90625 61.496094 L 54.90625 59.191406 L 61.679688 79.449219 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 54.90625 61.496094 L 56.199219 60.996094 L 62.101562 68.839844 L 67.753906 79.296875 L 61.679688 81.753906 Z M 54.90625 61.496094 L 54.90625 59.191406 M 56.199219 60.996094 L 56.199219 58.691406 M 62.101562 68.839844 L 62.101562 66.53125 M 67.753906 79.296875 L 67.753906 76.988281 M 61.679688 81.753906 L 61.679688 79.449219 M 54.90625 59.19 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 54.90625 59.191406 L 56.199219 58.691406 L 62.101562 66.53125 L 67.753906 76.988281 L 61.679688 79.449219 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 129.527344 66.6875 L 135.882812 66.1875 L 135.882812 63.878906 L 129.527344 64.378906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 124.503906 68.453125 L 129.527344 66.6875 L 129.527344 64.378906 L 124.503906 66.148438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 121.441406 69.992188 L 124.503906 68.453125 L 124.503906 66.148438 L 121.441406 67.6875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 135.882812 66.1875 L 135.675781 71.570312 L 135.675781 69.261719 L 135.882812 63.878906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 109.082031 80.371094 L 121.441406 69.992188 L 121.441406 67.6875 L 109.082031 78.066406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 135.675781 71.570312 L 139.804688 81.023438 L 139.804688 78.71875 L 135.675781 69.261719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 104.925781 81.371094 L 109.082031 80.371094 L 109.082031 78.066406 L 104.925781 79.066406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 102.195312 83.253906 L 104.925781 81.371094 L 104.925781 79.066406 L 102.195312 80.949219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 101.664062 85.136719 L 102.195312 83.253906 L 102.195312 80.949219 L 101.664062 82.832031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 139.804688 81.023438 L 127.082031 86.292969 L 127.082031 83.984375 L 139.804688 78.71875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 100.078125 88.445312 L 101.664062 85.136719 L 101.664062 82.832031 L 100.078125 86.136719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 109.199219 89.058594 L 101.835938 91.441406 L 101.835938 89.136719 L 109.199219 86.753906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 97.773438 91.671875 L 100.078125 88.445312 L 100.078125 86.136719 L 97.773438 89.367188 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 110.335938 92.902344 L 109.199219 89.058594 L 109.199219 86.753906 L 110.335938 90.597656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 127.082031 86.292969 L 110.335938 92.902344 L 110.335938 90.597656 L 127.082031 83.984375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 94.757812 93.558594 L 97.773438 91.671875 L 97.773438 89.367188 L 94.757812 91.25 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 101.835938 91.441406 L 103.257812 95.363281 L 103.257812 93.058594 L 101.835938 89.136719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 103.257812 95.363281 L 91.441406 100.015625 L 91.441406 97.707031 L 103.257812 93.058594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 91.441406 100.015625 L 94.757812 93.558594 L 94.757812 91.25 L 91.441406 97.707031 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 135.882812 66.1875 L 135.675781 71.570312 L 139.804688 81.023438 L 127.082031 86.292969 L 110.335938 92.902344 L 109.199219 89.058594 L 101.835938 91.441406 L 103.257812 95.363281 L 91.441406 100.015625 L 94.757812 93.558594 L 97.773438 91.671875 L 100.078125 88.445312 L 101.664062 85.136719 L 102.195312 83.253906 L 104.925781 81.371094 L 1 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 135.882812 63.878906 L 135.675781 69.261719 L 139.804688 78.71875 L 127.082031 83.984375 L 110.335938 90.597656 L 109.199219 86.753906 L 101.835938 89.136719 L 103.257812 93.058594 L 91.441406 97.707031 L 94.757812 91.25 L 97.773438 89.367188 L 100.078125 86.136719 L 101.664062 82.832031 L 102.195312 80.949219 L 104.925781 79.066406 L 109.082031 78.066406 L 121.441406 67.6875 L 124.503906 66.148438 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 159.464844 73.835938 L 170.804688 68.917969 L 170.804688 66.609375 L 159.464844 71.53125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 170.804688 68.917969 L 173.171875 76.296875 L 173.171875 73.992188 L 170.804688 66.609375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 139.804688 81.023438 L 159.464844 73.835938 L 159.464844 71.53125 L 139.804688 78.71875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 173.171875 76.296875 L 176.019531 82.679688 L 176.019531 80.371094 L 173.171875 73.992188 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 127.082031 86.292969 L 139.804688 81.023438 L 139.804688 78.71875 L 127.082031 83.984375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 149.34375 87.90625 L 143.125 89.828125 L 143.125 87.523438 L 149.34375 85.601562 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 174.757812 89.945312 L 171.078125 89.90625 L 171.078125 87.597656 L 174.757812 87.636719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 176.019531 82.679688 L 183.402344 90.136719 L 183.402344 87.828125 L 176.019531 80.371094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 128.355469 90.597656 L 127.082031 86.292969 L 127.082031 83.984375 L 128.355469 88.289062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 143.125 89.828125 L 136.710938 92.828125 L 136.710938 90.519531 L 143.125 87.523438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 171.078125 89.90625 L 169.109375 93.441406 L 169.109375 91.136719 L 171.078125 87.597656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 183.402344 90.136719 L 184.109375 93.789062 L 184.109375 91.480469 L 183.402344 87.828125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 184.109375 93.789062 L 174.757812 89.945312 L 174.757812 87.636719 L 184.109375 91.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 130.351562 95.019531 L 128.355469 90.597656 L 128.355469 88.289062 L 130.351562 92.710938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 136.710938 92.828125 L 130.351562 95.019531 L 130.351562 92.710938 L 136.710938 90.519531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 169.109375 93.441406 L 185.757812 103.707031 L 185.757812 101.398438 L 169.109375 91.136719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 155.929688 105.933594 L 149.34375 87.90625 L 149.34375 85.601562 L 155.929688 103.628906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 155.917969 110.203125 L 155.929688 105.933594 L 155.929688 103.628906 L 155.917969 107.894531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 185.757812 103.707031 L 182.722656 112.007812 L 182.722656 109.703125 L 185.757812 101.398438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 182.722656 112.007812 L 181.617188 113.125 L 181.617188 110.816406 L 182.722656 109.703125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 181.617188 113.125 L 179.890625 116.3125 L 179.890625 114.007812 L 181.617188 110.816406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 153.800781 116.507812 L 155.917969 110.203125 L 155.917969 107.894531 L 153.800781 114.199219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 179.890625 116.3125 L 174.433594 119.734375 L 174.433594 117.429688 L 179.890625 114.007812 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 151.734375 120.082031 L 153.800781 116.507812 L 153.800781 114.199219 L 151.734375 117.773438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 174.433594 119.734375 L 167.976562 121.773438 L 167.976562 119.464844 L 174.433594 117.429688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 147.519531 123.503906 L 151.734375 120.082031 L 151.734375 117.773438 L 147.519531 121.195312 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 167.976562 121.773438 L 157.070312 125.578125 L 157.070312 123.273438 L 167.976562 119.464844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 141.585938 126.386719 L 147.519531 123.503906 L 147.519531 121.195312 L 141.585938 124.078125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 144.289062 132.804688 L 141.585938 126.386719 L 141.585938 124.078125 L 144.289062 130.5 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 157.070312 125.578125 L 144.289062 132.804688 L 144.289062 130.5 L 157.070312 123.273438 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 159.464844 73.835938 L 170.804688 68.917969 L 173.171875 76.296875 L 176.019531 82.679688 L 183.402344 90.136719 L 184.109375 93.789062 L 174.757812 89.945312 L 171.078125 89.90625 L 169.109375 93.441406 L 185.757812 103.707031 L 182.722656 112.007812 L 181.617188 113.125 L 179.890625 116.3125 L 174.433594 119.734375 L 167.976562 121.773438 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 159.464844 71.53125 L 170.804688 66.609375 L 173.171875 73.992188 L 176.019531 80.371094 L 183.402344 87.828125 L 184.109375 91.480469 L 174.757812 87.636719 L 171.078125 87.597656 L 169.109375 91.136719 L 185.757812 101.398438 L 182.722656 109.703125 L 181.617188 110.816406 L 179.890625 114.007812 L 174.433594 117.429688 L 167.976562 119.464844 L 157.070312 123.273438 L 144.289062 130.5 L 141.5859 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 247.820312 71.339844 L 250.59375 70.03125 L 250.59375 67.722656 L 247.820312 69.03125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 245.570312 72.53125 L 247.820312 71.339844 L 247.820312 69.03125 L 245.570312 70.222656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 241.550781 74.835938 L 245.570312 72.53125 L 245.570312 70.222656 L 241.550781 72.53125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 213.167969 74.914062 L 216.90625 70.414062 L 216.90625 68.109375 L 213.167969 72.605469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 250.59375 70.03125 L 252.679688 76.488281 L 252.679688 74.183594 L 250.59375 67.722656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 216.90625 70.414062 L 228.015625 79.488281 L 228.015625 77.179688 L 216.90625 68.109375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 205.175781 79.601562 L 213.167969 74.914062 L 213.167969 72.605469 L 205.175781 77.296875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 242.207031 79.796875 L 241.550781 74.835938 L 241.550781 72.53125 L 242.207031 77.488281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 201.0625 81.371094 L 205.175781 79.601562 L 205.175781 77.296875 L 201.0625 79.066406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 200.394531 81.488281 L 201.0625 81.371094 L 201.0625 79.066406 L 200.394531 79.179688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 252.679688 76.488281 L 254.8125 83.101562 L 254.8125 80.792969 L 252.679688 74.183594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 192.929688 83.832031 L 200.394531 81.488281 L 200.394531 79.179688 L 192.929688 81.523438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 228.015625 79.488281 L 228.765625 84.601562 L 228.765625 82.292969 L 228.015625 77.179688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 228.765625 84.601562 L 242.207031 79.796875 L 242.207031 77.488281 L 228.765625 82.292969 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 254.8125 83.101562 L 256 85.5625 L 256 83.253906 L 254.8125 80.792969 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 256 85.5625 L 255.28125 85.714844 L 255.28125 83.410156 L 256 83.253906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 188.046875 87.058594 L 192.929688 83.832031 L 192.929688 81.523438 L 188.046875 84.753906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 171.078125 89.90625 L 174.757812 89.945312 L 174.757812 87.636719 L 171.078125 87.597656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 183.402344 90.136719 L 188.046875 87.058594 L 188.046875 84.753906 L 183.402344 87.828125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 169.109375 93.441406 L 171.078125 89.90625 L 171.078125 87.597656 L 169.109375 91.136719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 174.757812 89.945312 L 184.109375 93.789062 L 184.109375 91.480469 L 174.757812 87.636719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 184.109375 93.789062 L 183.402344 90.136719 L 183.402344 87.828125 L 184.109375 91.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 255.28125 85.714844 L 224.476562 96.902344 L 224.476562 94.59375 L 255.28125 83.410156 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 224.476562 96.902344 L 222.519531 98.167969 L 222.519531 95.863281 L 224.476562 94.59375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 222.519531 98.167969 L 221.703125 98.9375 L 221.703125 96.632812 L 222.519531 95.863281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 221.703125 98.9375 L 220.648438 100.207031 L 220.648438 97.902344 L 221.703125 96.632812 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 220.648438 100.207031 L 218.683594 102.28125 L 218.683594 99.976562 L 220.648438 97.902344 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 185.757812 103.707031 L 169.109375 93.441406 L 169.109375 91.136719 L 185.757812 101.398438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 218.683594 102.28125 L 217.1875 107.625 L 217.1875 105.320312 L 218.683594 99.976562 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 217.1875 107.625 L 217.277344 109.933594 L 217.277344 107.625 L 217.1875 105.320312 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 182.722656 112.007812 L 185.757812 103.707031 L 185.757812 101.398438 L 182.722656 109.703125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 181.617188 113.125 L 182.722656 112.007812 L 182.722656 109.703125 L 181.617188 110.816406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 179.890625 116.3125 L 181.617188 113.125 L 181.617188 110.816406 L 179.890625 114.007812 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 174.433594 119.734375 L 179.890625 116.3125 L 179.890625 114.007812 L 174.433594 117.429688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 167.976562 121.773438 L 174.433594 119.734375 L 174.433594 117.429688 L 167.976562 119.464844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 157.070312 125.578125 L 167.976562 121.773438 L 167.976562 119.464844 L 157.070312 123.273438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 138.746094 132.382812 L 144.289062 132.804688 L 144.289062 130.5 L 138.746094 130.074219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 144.289062 132.804688 L 157.070312 125.578125 L 157.070312 123.273438 L 144.289062 130.5 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 217.277344 109.933594 L 221.75 133.035156 L 221.75 130.730469 L 217.277344 107.625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 221.75 133.035156 L 217.414062 146.066406 L 217.414062 143.761719 L 221.75 130.730469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 217.414062 146.066406 L 216.40625 148.449219 L 216.40625 146.144531 L 217.414062 143.761719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 94.914062 153.0625 L 138.746094 132.382812 L 138.746094 130.074219 L 94.914062 150.757812 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 216.40625 148.449219 L 209.457031 155.371094 L 209.457031 153.0625 L 216.40625 146.144531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 90.503906 158.40625 L 94.914062 153.0625 L 94.914062 150.757812 L 90.503906 156.101562 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 209.457031 155.371094 L 197.367188 172.246094 L 197.367188 169.9375 L 209.457031 153.0625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 197.367188 172.246094 L 193.015625 173.746094 L 193.015625 171.4375 L 197.367188 169.9375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 193.015625 173.746094 L 186.796875 175.4375 L 186.796875 173.128906 L 193.015625 171.4375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 179.820312 175.511719 L 175.621094 173.015625 L 175.621094 170.707031 L 179.820312 173.207031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 186.796875 175.4375 L 179.820312 175.511719 L 179.820312 173.207031 L 186.796875 173.128906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 175.621094 173.015625 L 151.179688 179.433594 L 151.179688 177.128906 L 175.621094 170.707031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 151.179688 179.433594 L 146.535156 182.738281 L 146.535156 180.433594 L 151.179688 177.128906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 146.535156 182.738281 L 144.859375 184.625 L 144.859375 182.316406 L 146.535156 180.433594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 144.859375 184.625 L 144.503906 190.695312 L 144.503906 188.390625 L 144.859375 182.316406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 144.503906 190.695312 L 150.546875 200.269531 L 150.546875 197.960938 L 144.503906 188.390625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 108.660156 207.035156 L 90.503906 158.40625 L 90.503906 156.101562 L 108.660156 204.726562 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 150.546875 200.269531 L 153.316406 218.875 L 153.316406 216.566406 L 150.546875 197.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 153.316406 218.875 L 145.023438 226.640625 L 145.023438 224.332031 L 153.316406 216.566406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 117.859375 231.675781 L 108.660156 207.035156 L 108.660156 204.726562 L 117.859375 229.367188 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 118.382812 232.945312 L 117.859375 231.675781 L 117.859375 229.367188 L 118.382812 230.636719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 145.023438 226.640625 L 118.382812 232.945312 L 118.382812 230.636719 L 145.023438 224.332031 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 183.402344 90.136719 L 188.046875 87.058594 L 192.929688 83.832031 L 200.394531 81.488281 L 201.0625 81.371094 L 205.175781 79.601562 L 213.167969 74.914062 L 216.90625 70.414062 L 228.015625 79.488281 L 228.765625 84.601562 L 242.207031 79.796875 L 241.550781 74.835938 L 245.570312 72.53125 L 247.820312 71.339844 L 250.59375 70.03125 L 252 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 183.402344 87.828125 L 188.046875 84.753906 L 192.929688 81.523438 L 200.394531 79.179688 L 201.0625 79.066406 L 205.175781 77.296875 L 213.167969 72.605469 L 216.90625 68.109375 L 228.015625 77.179688 L 228.765625 82.292969 L 242.207031 77.488281 L 241.550781 72.53125 L 245.570312 70.222656 L 247.820312 69.03125 L 250.59375 67.722656 L 252.679688 74.183594 L 254.8125 80.792969 L 256 83.253906 L 25 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 143.125 89.828125 L 149.34375 87.90625 L 149.34375 85.601562 L 143.125 87.523438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 127.082031 86.292969 L 128.355469 90.597656 L 128.355469 88.289062 L 127.082031 83.984375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 136.710938 92.828125 L 143.125 89.828125 L 143.125 87.523438 L 136.710938 90.519531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 110.335938 92.902344 L 127.082031 86.292969 L 127.082031 83.984375 L 110.335938 90.597656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 128.355469 90.597656 L 130.351562 95.019531 L 130.351562 92.710938 L 128.355469 88.289062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 130.351562 95.019531 L 136.710938 92.828125 L 136.710938 90.519531 L 130.351562 92.710938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 103.257812 95.363281 L 110.335938 92.902344 L 110.335938 90.597656 L 103.257812 93.058594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 91.441406 100.015625 L 103.257812 95.363281 L 103.257812 93.058594 L 91.441406 97.707031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 149.34375 87.90625 L 155.929688 105.933594 L 155.929688 103.628906 L 149.34375 85.601562 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 71.058594 108.050781 L 91.441406 100.015625 L 91.441406 97.707031 L 71.058594 105.742188 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 155.929688 105.933594 L 155.917969 110.203125 L 155.917969 107.894531 L 155.929688 103.628906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 155.917969 110.203125 L 153.800781 116.507812 L 153.800781 114.199219 L 155.917969 107.894531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 76.140625 119.121094 L 71.058594 108.050781 L 71.058594 105.742188 L 76.140625 116.8125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 153.800781 116.507812 L 151.734375 120.082031 L 151.734375 117.773438 L 153.800781 114.199219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 151.734375 120.082031 L 147.519531 123.503906 L 147.519531 121.195312 L 151.734375 117.773438 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 147.519531 123.503906 L 141.585938 126.386719 L 141.585938 124.078125 L 147.519531 121.195312 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 79.503906 129.191406 L 76.140625 119.121094 L 76.140625 116.8125 L 79.503906 126.886719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 144.289062 132.804688 L 138.746094 132.382812 L 138.746094 130.074219 L 144.289062 130.5 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 141.585938 126.386719 L 144.289062 132.804688 L 144.289062 130.5 L 141.585938 124.078125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 83.292969 139.1875 L 79.503906 129.191406 L 79.503906 126.886719 L 83.292969 136.878906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 86.144531 145.105469 L 83.292969 139.1875 L 83.292969 136.878906 L 86.144531 142.800781 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 86.664062 147.644531 L 86.144531 145.105469 L 86.144531 142.800781 L 86.664062 145.335938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 138.746094 132.382812 L 94.914062 153.0625 L 94.914062 150.757812 L 138.746094 130.074219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 90.121094 157.292969 L 86.664062 147.644531 L 86.664062 145.335938 L 90.121094 154.984375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 94.914062 153.0625 L 90.503906 158.40625 L 90.503906 156.101562 L 94.914062 150.757812 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 90.503906 158.40625 L 90.121094 157.292969 L 90.121094 154.984375 L 90.503906 156.101562 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 110.335938 92.902344 L 127.082031 86.292969 L 128.355469 90.597656 L 130.351562 95.019531 L 136.710938 92.828125 L 143.125 89.828125 L 149.34375 87.90625 L 155.929688 105.933594 L 155.917969 110.203125 L 153.800781 116.507812 L 151.734375 120.082031 L 147.519531 123.503906 L 141.585938 126.386719 L 144.289062 132.804688 L 138.746094 132.382 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 110.335938 90.597656 L 127.082031 83.984375 L 128.355469 88.289062 L 130.351562 92.710938 L 136.710938 90.519531 L 143.125 87.523438 L 149.34375 85.601562 L 155.929688 103.628906 L 155.917969 107.894531 L 153.800781 114.199219 L 151.734375 117.773438 L 147.519531 121.195312 L 141.585938 124.078125 L 144.289062 130.5 L 138.746094 130.074219 L 94.914062 150.757812 L 90.503906 156.101562 L 90.121094 1 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 101.835938 91.441406 L 109.199219 89.058594 L 109.199219 86.753906 L 101.835938 89.136719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 109.199219 89.058594 L 110.335938 92.902344 L 110.335938 90.597656 L 109.199219 86.753906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 110.335938 92.902344 L 103.257812 95.363281 L 103.257812 93.058594 L 110.335938 90.597656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,80%,0%);fill-opacity:0.7;" d="M 103.257812 95.363281 L 101.835938 91.441406 L 101.835938 89.136719 L 103.257812 93.058594 "/>
+<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(80%,80%,0%);stroke-opacity:0.7;stroke-miterlimit:10;" d="M 110.335938 92.902344 L 103.257812 95.363281 L 101.835938 91.441406 L 109.199219 89.058594 Z M 101.835938 91.441406 L 101.835938 89.136719 M 109.199219 89.058594 L 109.199219 86.753906 M 110.335938 92.902344 L 110.335938 90.597656 M 103.257812 95.363281 L 103.257812 93.058594 M 110.335938 90.597656 L 103.257812 93.058594 L 101.835938 89.1367 [...]
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,0%);fill-opacity:0.7;" d="M 110.335938 90.597656 L 103.257812 93.058594 L 101.835938 89.136719 L 109.199219 86.753906 Z "/>
+</g>
+</svg>
diff --git a/tests/python_tests/images/pycairo/cairo-surface-expected.point.pdf b/tests/python_tests/images/pycairo/cairo-surface-expected.point.pdf
new file mode 100644
index 0000000..d6ec819
Binary files /dev/null and b/tests/python_tests/images/pycairo/cairo-surface-expected.point.pdf differ
diff --git a/tests/python_tests/images/pycairo/cairo-surface-expected.point.svg b/tests/python_tests/images/pycairo/cairo-surface-expected.point.svg
new file mode 100644
index 0000000..990cc04
--- /dev/null
+++ b/tests/python_tests/images/pycairo/cairo-surface-expected.point.svg
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256pt" height="256pt" viewBox="0 0 256 256" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 0.875 -7.296875 L 1.859375 -7.296875 L 1.859375 -2.859375 C 1.859375 -2.078125 2 -1.515625 2.28125 -1.171875 C 2.5625 -0.828125 3.019531 -0.65625 3.65625 -0.65625 C 4.289062 -0.65625 4.75 -0.828125 5.03125 -1.171875 C 5.3125 -1.515625 5.453125 -2.078125 5.453125 -2.859375 L 5.453125 -7.296875 L 6.453125 -7.296875 L 6.453125 -2.734375 C 6.453125 -1.785156 6.21875 -1.066406 5.75 -0.578125 C 5.28125 -0.0976562 4.582031 0.140625 3.65625 0.140625 C 2.738281 0.1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 5.484375 -3.296875 L 5.484375 0 L 4.59375 0 L 4.59375 -3.265625 C 4.59375 -3.785156 4.488281 -4.171875 4.28125 -4.421875 C 4.082031 -4.679688 3.78125 -4.8125 3.375 -4.8125 C 2.894531 -4.8125 2.515625 -4.65625 2.234375 -4.34375 C 1.953125 -4.039062 1.8125 -3.625 1.8125 -3.09375 L 1.8125 0 L 0.90625 0 L 0.90625 -5.46875 L 1.8125 -5.46875 L 1.8125 -4.625 C 2.03125 -4.945312 2.285156 -5.1875 2.578125 -5.34375 C 2.867188 -5.507812 3.203125 -5.59375 3.578125 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 0.9375 -5.46875 L 1.84375 -5.46875 L 1.84375 0 L 0.9375 0 Z M 0.9375 -7.59375 L 1.84375 -7.59375 L 1.84375 -6.453125 L 0.9375 -6.453125 Z M 0.9375 -7.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 1.828125 -7.015625 L 1.828125 -5.46875 L 3.6875 -5.46875 L 3.6875 -4.765625 L 1.828125 -4.765625 L 1.828125 -1.796875 C 1.828125 -1.359375 1.890625 -1.070312 2.015625 -0.9375 C 2.140625 -0.8125 2.390625 -0.75 2.765625 -0.75 L 3.6875 -0.75 L 3.6875 0 L 2.765625 0 C 2.066406 0 1.582031 -0.128906 1.3125 -0.390625 C 1.050781 -0.648438 0.921875 -1.117188 0.921875 -1.796875 L 0.921875 -4.765625 L 0.265625 -4.765625 L 0.265625 -5.46875 L 0.921875 -5.46875 L 0.921 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 5.625 -2.953125 L 5.625 -2.515625 L 1.484375 -2.515625 C 1.523438 -1.898438 1.710938 -1.429688 2.046875 -1.109375 C 2.378906 -0.785156 2.84375 -0.625 3.4375 -0.625 C 3.78125 -0.625 4.113281 -0.664062 4.4375 -0.75 C 4.769531 -0.832031 5.09375 -0.957031 5.40625 -1.125 L 5.40625 -0.28125 C 5.082031 -0.144531 4.75 -0.0390625 4.40625 0.03125 C 4.070312 0.101562 3.734375 0.140625 3.390625 0.140625 C 2.515625 0.140625 1.820312 -0.109375 1.3125 -0.609375 C 0.80078 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 4.546875 -4.640625 L 4.546875 -7.59375 L 5.4375 -7.59375 L 5.4375 0 L 4.546875 0 L 4.546875 -0.828125 C 4.359375 -0.492188 4.117188 -0.25 3.828125 -0.09375 C 3.535156 0.0625 3.1875 0.140625 2.78125 0.140625 C 2.125 0.140625 1.585938 -0.117188 1.171875 -0.640625 C 0.753906 -1.171875 0.546875 -1.867188 0.546875 -2.734375 C 0.546875 -3.585938 0.753906 -4.273438 1.171875 -4.796875 C 1.585938 -5.328125 2.125 -5.59375 2.78125 -5.59375 C 3.1875 -5.59375 3.535156  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 5.359375 -7.046875 L 5.359375 -6.09375 C 4.984375 -6.269531 4.628906 -6.398438 4.296875 -6.484375 C 3.960938 -6.578125 3.640625 -6.625 3.328125 -6.625 C 2.796875 -6.625 2.382812 -6.519531 2.09375 -6.3125 C 1.800781 -6.101562 1.65625 -5.804688 1.65625 -5.421875 C 1.65625 -5.097656 1.75 -4.851562 1.9375 -4.6875 C 2.132812 -4.519531 2.503906 -4.390625 3.046875 -4.296875 L 3.640625 -4.171875 C 4.367188 -4.023438 4.910156 -3.773438 5.265625 -3.421875 C 5.617188 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 3.421875 -2.75 C 2.703125 -2.75 2.203125 -2.664062 1.921875 -2.5 C 1.640625 -2.332031 1.5 -2.050781 1.5 -1.65625 C 1.5 -1.332031 1.601562 -1.078125 1.8125 -0.890625 C 2.019531 -0.703125 2.304688 -0.609375 2.671875 -0.609375 C 3.171875 -0.609375 3.570312 -0.785156 3.875 -1.140625 C 4.175781 -1.492188 4.328125 -1.960938 4.328125 -2.546875 L 4.328125 -2.75 Z M 5.21875 -3.125 L 5.21875 0 L 4.328125 0 L 4.328125 -0.828125 C 4.117188 -0.492188 3.859375 -0.25 3.5 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 4.421875 -5.3125 L 4.421875 -4.453125 C 4.171875 -4.585938 3.910156 -4.6875 3.640625 -4.75 C 3.367188 -4.8125 3.082031 -4.84375 2.78125 -4.84375 C 2.34375 -4.84375 2.007812 -4.773438 1.78125 -4.640625 C 1.5625 -4.503906 1.453125 -4.300781 1.453125 -4.03125 C 1.453125 -3.820312 1.53125 -3.65625 1.6875 -3.53125 C 1.84375 -3.414062 2.164062 -3.304688 2.65625 -3.203125 L 2.953125 -3.125 C 3.597656 -2.988281 4.050781 -2.796875 4.3125 -2.546875 C 4.582031 -2.296 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 3.09375 -7.59375 C 2.664062 -6.84375 2.34375 -6.097656 2.125 -5.359375 C 1.914062 -4.628906 1.8125 -3.890625 1.8125 -3.140625 C 1.8125 -2.390625 1.914062 -1.644531 2.125 -0.90625 C 2.34375 -0.164062 2.664062 0.570312 3.09375 1.3125 L 2.3125 1.3125 C 1.832031 0.550781 1.46875 -0.195312 1.21875 -0.9375 C 0.976562 -1.675781 0.859375 -2.410156 0.859375 -3.140625 C 0.859375 -3.867188 0.976562 -4.597656 1.21875 -5.328125 C 1.457031 -6.066406 1.820312 -6.820312 2 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 0.9375 -5.46875 L 1.84375 -5.46875 L 1.84375 0.09375 C 1.84375 0.789062 1.707031 1.296875 1.4375 1.609375 C 1.175781 1.921875 0.75 2.078125 0.15625 2.078125 L -0.1875 2.078125 L -0.1875 1.3125 L 0.0625 1.3125 C 0.40625 1.3125 0.632812 1.234375 0.75 1.078125 C 0.875 0.921875 0.9375 0.59375 0.9375 0.09375 Z M 0.9375 -7.59375 L 1.84375 -7.59375 L 1.84375 -6.453125 L 0.9375 -6.453125 Z M 0.9375 -7.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 1.8125 -0.828125 L 1.8125 2.078125 L 0.90625 2.078125 L 0.90625 -5.46875 L 1.8125 -5.46875 L 1.8125 -4.640625 C 2 -4.960938 2.234375 -5.203125 2.515625 -5.359375 C 2.804688 -5.515625 3.15625 -5.59375 3.5625 -5.59375 C 4.226562 -5.59375 4.765625 -5.328125 5.171875 -4.796875 C 5.585938 -4.273438 5.796875 -3.585938 5.796875 -2.734375 C 5.796875 -1.867188 5.585938 -1.171875 5.171875 -0.640625 C 4.765625 -0.117188 4.226562 0.140625 3.5625 0.140625 C 3.15625 0.1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 4.546875 -2.796875 C 4.546875 -3.453125 4.410156 -3.957031 4.140625 -4.3125 C 3.867188 -4.664062 3.492188 -4.84375 3.015625 -4.84375 C 2.523438 -4.84375 2.144531 -4.664062 1.875 -4.3125 C 1.613281 -3.957031 1.484375 -3.453125 1.484375 -2.796875 C 1.484375 -2.148438 1.613281 -1.644531 1.875 -1.28125 C 2.144531 -0.925781 2.523438 -0.75 3.015625 -0.75 C 3.492188 -0.75 3.867188 -0.925781 4.140625 -1.28125 C 4.410156 -1.644531 4.546875 -2.148438 4.546875 -2.796 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 0.796875 -7.59375 L 1.578125 -7.59375 C 2.066406 -6.820312 2.429688 -6.066406 2.671875 -5.328125 C 2.921875 -4.597656 3.046875 -3.867188 3.046875 -3.140625 C 3.046875 -2.410156 2.921875 -1.675781 2.671875 -0.9375 C 2.429688 -0.195312 2.066406 0.550781 1.578125 1.3125 L 0.796875 1.3125 C 1.234375 0.570312 1.554688 -0.164062 1.765625 -0.90625 C 1.984375 -1.644531 2.09375 -2.390625 2.09375 -3.140625 C 2.09375 -3.890625 1.984375 -4.628906 1.765625 -5.359375 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 3.421875 -6.3125 L 2.078125 -2.6875 L 4.765625 -2.6875 Z M 2.859375 -7.296875 L 3.984375 -7.296875 L 6.765625 0 L 5.734375 0 L 5.0625 -1.875 L 1.78125 -1.875 L 1.125 0 L 0.078125 0 Z M 2.859375 -7.296875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 0.84375 -2.15625 L 0.84375 -5.46875 L 1.75 -5.46875 L 1.75 -2.1875 C 1.75 -1.675781 1.847656 -1.289062 2.046875 -1.03125 C 2.253906 -0.769531 2.554688 -0.640625 2.953125 -0.640625 C 3.441406 -0.640625 3.828125 -0.789062 4.109375 -1.09375 C 4.390625 -1.40625 4.53125 -1.832031 4.53125 -2.375 L 4.53125 -5.46875 L 5.4375 -5.46875 L 5.4375 0 L 4.53125 0 L 4.53125 -0.84375 C 4.3125 -0.507812 4.054688 -0.257812 3.765625 -0.09375 C 3.484375 0.0625 3.148438 0.14062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 4.109375 -4.625 C 4.003906 -4.6875 3.894531 -4.726562 3.78125 -4.75 C 3.664062 -4.78125 3.535156 -4.796875 3.390625 -4.796875 C 2.878906 -4.796875 2.488281 -4.628906 2.21875 -4.296875 C 1.945312 -3.972656 1.8125 -3.5 1.8125 -2.875 L 1.8125 0 L 0.90625 0 L 0.90625 -5.46875 L 1.8125 -5.46875 L 1.8125 -4.625 C 2 -4.957031 2.242188 -5.203125 2.546875 -5.359375 C 2.847656 -5.515625 3.21875 -5.59375 3.65625 -5.59375 C 3.71875 -5.59375 3.785156 -5.585938 3.859375 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 0.9375 -7.59375 L 1.84375 -7.59375 L 1.84375 0 L 0.9375 0 Z M 0.9375 -7.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-19">
+<path style="stroke:none;" d="M 1.96875 -3.484375 L 1.96875 -0.8125 L 3.546875 -0.8125 C 4.078125 -0.8125 4.46875 -0.921875 4.71875 -1.140625 C 4.976562 -1.359375 5.109375 -1.695312 5.109375 -2.15625 C 5.109375 -2.601562 4.976562 -2.9375 4.71875 -3.15625 C 4.46875 -3.375 4.078125 -3.484375 3.546875 -3.484375 Z M 1.96875 -6.484375 L 1.96875 -4.28125 L 3.421875 -4.28125 C 3.910156 -4.28125 4.269531 -4.367188 4.5 -4.546875 C 4.738281 -4.734375 4.859375 -5.007812 4.859375 -5.375 C 4.859375 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-20">
+<path style="stroke:none;" d="M 0.546875 -5.46875 L 4.8125 -5.46875 L 4.8125 -4.65625 L 1.4375 -0.71875 L 4.8125 -0.71875 L 4.8125 0 L 0.4375 0 L 0.4375 -0.828125 L 3.8125 -4.75 L 0.546875 -4.75 Z M 0.546875 -5.46875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-21">
+<path style="stroke:none;" d="M 0.296875 -5.46875 L 1.25 -5.46875 L 2.953125 -0.875 L 4.671875 -5.46875 L 5.625 -5.46875 L 3.5625 0 L 2.34375 0 Z M 0.296875 -5.46875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-22">
+<path style="stroke:none;" d="M 2.4375 -3.921875 C 2.132812 -3.660156 1.914062 -3.394531 1.78125 -3.125 C 1.644531 -2.863281 1.578125 -2.59375 1.578125 -2.3125 C 1.578125 -1.832031 1.75 -1.4375 2.09375 -1.125 C 2.4375 -0.8125 2.867188 -0.65625 3.390625 -0.65625 C 3.703125 -0.65625 3.988281 -0.703125 4.25 -0.796875 C 4.519531 -0.898438 4.773438 -1.054688 5.015625 -1.265625 Z M 3.125 -4.46875 L 5.59375 -1.921875 C 5.789062 -2.210938 5.941406 -2.523438 6.046875 -2.859375 C 6.160156 -3.19140 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-23">
+<path style="stroke:none;" d="M 3.71875 -7.59375 L 3.71875 -6.84375 L 2.859375 -6.84375 C 2.535156 -6.84375 2.3125 -6.773438 2.1875 -6.640625 C 2.0625 -6.515625 2 -6.285156 2 -5.953125 L 2 -5.46875 L 3.46875 -5.46875 L 3.46875 -4.765625 L 2 -4.765625 L 2 0 L 1.09375 0 L 1.09375 -4.765625 L 0.234375 -4.765625 L 0.234375 -5.46875 L 1.09375 -5.46875 L 1.09375 -5.84375 C 1.09375 -6.457031 1.234375 -6.898438 1.515625 -7.171875 C 1.796875 -7.453125 2.242188 -7.59375 2.859375 -7.59375 Z M 3.718 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-24">
+<path style="stroke:none;" d="M 0.984375 -7.296875 L 2.453125 -7.296875 L 4.3125 -2.328125 L 6.1875 -7.296875 L 7.65625 -7.296875 L 7.65625 0 L 6.6875 0 L 6.6875 -6.40625 L 4.8125 -1.40625 L 3.8125 -1.40625 L 1.9375 -6.40625 L 1.9375 0 L 0.984375 0 Z M 0.984375 -7.296875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-25">
+<path style="stroke:none;" d="M 3.0625 -4.84375 C 2.582031 -4.84375 2.203125 -4.65625 1.921875 -4.28125 C 1.640625 -3.90625 1.5 -3.390625 1.5 -2.734375 C 1.5 -2.078125 1.632812 -1.5625 1.90625 -1.1875 C 2.1875 -0.8125 2.570312 -0.625 3.0625 -0.625 C 3.539062 -0.625 3.921875 -0.8125 4.203125 -1.1875 C 4.484375 -1.5625 4.625 -2.078125 4.625 -2.734375 C 4.625 -3.378906 4.484375 -3.890625 4.203125 -4.265625 C 3.921875 -4.648438 3.539062 -4.84375 3.0625 -4.84375 Z M 3.0625 -5.59375 C 3.84375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-26">
+<path style="stroke:none;" d="M 7.078125 -7.59375 L 7.078125 -6.84375 L 6.21875 -6.84375 C 5.894531 -6.84375 5.671875 -6.773438 5.546875 -6.640625 C 5.421875 -6.515625 5.359375 -6.285156 5.359375 -5.953125 L 5.359375 -5.46875 L 6.84375 -5.46875 L 6.84375 -4.765625 L 5.359375 -4.765625 L 5.359375 0 L 4.453125 0 L 4.453125 -4.765625 L 2 -4.765625 L 2 0 L 1.09375 0 L 1.09375 -4.765625 L 0.234375 -4.765625 L 0.234375 -5.46875 L 1.09375 -5.46875 L 1.09375 -5.84375 C 1.09375 -6.457031 1.234375 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-27">
+<path style="stroke:none;" d="M 4.875 -5.265625 L 4.875 -4.421875 C 4.625 -4.554688 4.367188 -4.660156 4.109375 -4.734375 C 3.859375 -4.804688 3.601562 -4.84375 3.34375 -4.84375 C 2.757812 -4.84375 2.304688 -4.65625 1.984375 -4.28125 C 1.660156 -3.914062 1.5 -3.398438 1.5 -2.734375 C 1.5 -2.066406 1.660156 -1.546875 1.984375 -1.171875 C 2.304688 -0.804688 2.757812 -0.625 3.34375 -0.625 C 3.601562 -0.625 3.859375 -0.65625 4.109375 -0.71875 C 4.367188 -0.789062 4.625 -0.898438 4.875 -1.046 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-28">
+<path style="stroke:none;" d="M 5.484375 -3.296875 L 5.484375 0 L 4.59375 0 L 4.59375 -3.265625 C 4.59375 -3.785156 4.488281 -4.171875 4.28125 -4.421875 C 4.082031 -4.679688 3.78125 -4.8125 3.375 -4.8125 C 2.894531 -4.8125 2.515625 -4.65625 2.234375 -4.34375 C 1.953125 -4.039062 1.8125 -3.625 1.8125 -3.09375 L 1.8125 0 L 0.90625 0 L 0.90625 -7.59375 L 1.8125 -7.59375 L 1.8125 -4.625 C 2.03125 -4.945312 2.285156 -5.1875 2.578125 -5.34375 C 2.867188 -5.507812 3.203125 -5.59375 3.578125 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-29">
+<path style="stroke:none;" d="M 5.484375 -5.46875 L 3.515625 -2.8125 L 5.59375 0 L 4.53125 0 L 2.9375 -2.15625 L 1.34375 0 L 0.28125 0 L 2.40625 -2.859375 L 0.46875 -5.46875 L 1.53125 -5.46875 L 2.984375 -3.515625 L 4.421875 -5.46875 Z M 5.484375 -5.46875 "/>
+</symbol>
+</g>
+<image id="image22" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAB40lEQVQokT2Su24UQRREz+2+PTM7+2ANESSAbCMIiPgKQAYJRGjJCL6Xv3BowN717Ly6i2At8pLq6FRRQQU1dcQxSAahSpxsGQ5vlE80o4yERBHBzQtBRgGArJSKJ66vPwfrCGCQAQoYhuN1aMAhYFQ16zVd92Gaz6RNHtCEtMiFIgZhTspIlFgXE5Xz58+FhV8eb8wmSsYMi90YYnwKLRgxOYGYeLTl9u7TOJ2W0iiHuT+i2zghnR+6q80aLAaLNAvaln74lsuraVxISFHyUpjmtuj079379YLGAYL7A/ehfzFPrYpLUSUNPVKSXt/uvrctjeNAlVitOBw+DuMzaSG [...]
+<image id="image25" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image28" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-30" x2="0" y2="-10" gradientTransform="matrix(1,0,0,1,53.809602,179.402308)">
+<stop offset="0" style="stop-color:rgb(0%,50.196078%,0%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(0%,50.196078%,0%);stop-opacity:0;"/>
+</linearGradient>
+<radialGradient id="radial0" gradientUnits="userSpaceOnUse" cx="-2.5" cy="-22.5" fx="0.5" fy="-20.5" r="5" >
+<stop offset="0" style="stop-color:rgb(100%,0%,0%);stop-opacity:1;"/>
+<stop offset="0.5" style="stop-color:rgb(100%,25.098039%,25.098039%);stop-opacity:1;"/>
+<stop offset="0.6" style="stop-color:rgb(50.196078%,100%,50.196078%);stop-opacity:1;"/>
+<stop offset="0.75" style="stop-color:rgb(100%,67.45098%,67.45098%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</radialGradient>
+<image id="image31" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image34" width="4" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAABmJLR0QA/wD/AP+gvaeTAAAADElEQVQImWNgIB0AAAA0AAEjQ4N1AAAAAElFTkSuQmCC"/>
+</defs>
+<g id="surface18">
+<rect x="0" y="0" width="256" height="256" style="fill:rgb(70.980392%,81.568627%,81.568627%);fill-opacity:1;stroke:none;"/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -41.625 121.21875 L -40.640625 121.21875 L -40.640625 125.65625 C -40.640625 126.4375 -40.5 127 -40.21875 127.34375 C -39.9375 127.6875 -39.480469 127.859375 -38.84375 127.859375 C -38.210938 127.859375 -37.75 127.6875 -37.46875 127.34375 C -37.1875 127 -37.046875 126.4375 -37.046875 125.65625 L -37.046875 121.21875 L -36.046875 121.21875 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -30.015625 125.21875 L -30.015625 128.515625 L -30.90625 128.515625 L -30.90625 125.25 C -30.90625 124.730469 -31.011719 124.34375 -31.21875 124.09375 C -31.417969 123.835938 -31.71875 123.703125 -32.125 123.703125 C -32.605469 123.703125 -32.984375 123.859375 -33.265625 124.171875 C -33.546875 124.476562 -33.6875 124.890625 -33.6875 125. [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -28.5625 123.046875 L -27.65625 123.046875 L -27.65625 128.515625 L -28.5625 128.515625 Z M -28.5625 120.921875 L -27.65625 120.921875 L -27.65625 122.0625 L -28.5625 122.0625 Z M -28.5625 120.921875 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -25.671875 121.5 L -25.671875 123.046875 L -23.8125 123.046875 L -23.8125 123.75 L -25.671875 123.75 L -25.671875 126.71875 C -25.671875 127.15625 -25.609375 127.445312 -25.484375 127.578125 C -25.359375 127.703125 -25.109375 127.765625 -24.734375 127.765625 L -23.8125 127.765625 L -23.8125 128.515625 L -24.734375 128.515625 C -25.433594  [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -18.875 125.5625 L -18.875 126 L -23.015625 126 C -22.976562 126.617188 -22.789062 127.085938 -22.453125 127.40625 C -22.121094 127.730469 -21.65625 127.890625 -21.0625 127.890625 C -20.71875 127.890625 -20.386719 127.851562 -20.0625 127.765625 C -19.730469 127.683594 -19.40625 127.558594 -19.09375 127.390625 L -19.09375 128.234375 C -19. [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -13.953125 123.875 L -13.953125 120.921875 L -13.0625 120.921875 L -13.0625 128.515625 L -13.953125 128.515625 L -13.953125 127.6875 C -14.140625 128.023438 -14.382812 128.265625 -14.671875 128.421875 C -14.964844 128.578125 -15.3125 128.65625 -15.71875 128.65625 C -16.375 128.65625 -16.914062 128.398438 -17.328125 127.875 C -17.746094 12 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.140625 121.46875 L -4.140625 122.421875 C -4.515625 122.246094 -4.871094 122.117188 -5.203125 122.03125 C -5.539062 121.9375 -5.859375 121.890625 -6.171875 121.890625 C -6.703125 121.890625 -7.117188 121.996094 -7.40625 122.203125 C -7.699219 122.414062 -7.84375 122.710938 -7.84375 123.09375 C -7.84375 123.417969 -7.75 123.664062 -7.56 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M -1.671875 121.5 L -1.671875 123.046875 L 0.1875 123.046875 L 0.1875 123.75 L -1.671875 123.75 L -1.671875 126.71875 C -1.671875 127.15625 -1.609375 127.445312 -1.484375 127.578125 C -1.359375 127.703125 -1.109375 127.765625 -0.734375 127.765625 L 0.1875 127.765625 L 0.1875 128.515625 L -0.734375 128.515625 C -1.433594 128.515625 -1.917969 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2.921875 125.765625 C 2.203125 125.765625 1.703125 125.851562 1.421875 126.015625 C 1.140625 126.183594 1 126.464844 1 126.859375 C 1 127.183594 1.101562 127.4375 1.3125 127.625 C 1.519531 127.8125 1.804688 127.90625 2.171875 127.90625 C 2.671875 127.90625 3.070312 127.730469 3.375 127.375 C 3.675781 127.023438 3.828125 126.554688 3.82812 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 7.328125 121.5 L 7.328125 123.046875 L 9.1875 123.046875 L 9.1875 123.75 L 7.328125 123.75 L 7.328125 126.71875 C 7.328125 127.15625 7.390625 127.445312 7.515625 127.578125 C 7.640625 127.703125 7.890625 127.765625 8.265625 127.765625 L 9.1875 127.765625 L 9.1875 128.515625 L 8.265625 128.515625 C 7.566406 128.515625 7.082031 128.386719 6 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 14.125 125.5625 L 14.125 126 L 9.984375 126 C 10.023438 126.617188 10.210938 127.085938 10.546875 127.40625 C 10.878906 127.730469 11.34375 127.890625 11.9375 127.890625 C 12.28125 127.890625 12.613281 127.851562 12.9375 127.765625 C 13.269531 127.683594 13.59375 127.558594 13.90625 127.390625 L 13.90625 128.234375 C 13.582031 128.371094  [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18.921875 123.203125 L 18.921875 124.0625 C 18.671875 123.929688 18.410156 123.828125 18.140625 123.765625 C 17.867188 123.703125 17.582031 123.671875 17.28125 123.671875 C 16.84375 123.671875 16.507812 123.742188 16.28125 123.875 C 16.0625 124.011719 15.953125 124.214844 15.953125 124.484375 C 15.953125 124.695312 16.03125 124.859375 16. [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 25.59375 120.921875 C 25.164062 121.671875 24.84375 122.417969 24.625 123.15625 C 24.414062 123.886719 24.3125 124.625 24.3125 125.375 C 24.3125 126.125 24.414062 126.871094 24.625 127.609375 C 24.84375 128.351562 25.164062 129.085938 25.59375 129.828125 L 24.8125 129.828125 C 24.332031 129.066406 23.96875 128.320312 23.71875 127.578125 C [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 26.4375 123.046875 L 27.34375 123.046875 L 27.34375 128.609375 C 27.34375 129.304688 27.207031 129.8125 26.9375 130.125 C 26.675781 130.4375 26.25 130.59375 25.65625 130.59375 L 25.3125 130.59375 L 25.3125 129.828125 L 25.5625 129.828125 C 25.90625 129.828125 26.132812 129.75 26.25 129.59375 C 26.375 129.4375 26.4375 129.109375 26.4375 12 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 29.3125 127.6875 L 29.3125 130.59375 L 28.40625 130.59375 L 28.40625 123.046875 L 29.3125 123.046875 L 29.3125 123.875 C 29.5 123.554688 29.734375 123.3125 30.015625 123.15625 C 30.304688 123 30.65625 122.921875 31.0625 122.921875 C 31.726562 122.921875 32.265625 123.1875 32.671875 123.71875 C 33.085938 124.242188 33.296875 124.929688 33. [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 38.046875 125.71875 C 38.046875 125.0625 37.910156 124.558594 37.640625 124.203125 C 37.367188 123.851562 36.992188 123.671875 36.515625 123.671875 C 36.023438 123.671875 35.644531 123.851562 35.375 124.203125 C 35.113281 124.558594 34.984375 125.0625 34.984375 125.71875 C 34.984375 126.367188 35.113281 126.871094 35.375 127.234375 C 35.6 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 40.296875 120.921875 L 41.078125 120.921875 C 41.566406 121.695312 41.929688 122.449219 42.171875 123.1875 C 42.421875 123.917969 42.546875 124.648438 42.546875 125.375 C 42.546875 126.105469 42.421875 126.839844 42.171875 127.578125 C 41.929688 128.320312 41.566406 129.066406 41.078125 129.828125 L 40.296875 129.828125 C 40.734375 129.08 [...]
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-0" x="-42.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="-35.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="-29.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="-27.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-4" x="-24.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-5" x="-18.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="-12.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-7" x="-9.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="-3.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-8" x="-0.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="5.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-4" x="8.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="14.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="19.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-10" x="22.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-11" x="25.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-12" x="27.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-13" x="33.5" y="128.517317"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="39.5" y="128.517317"/>
+</g>
+<use xlink:href="#image22" transform="matrix(1,0,0,1,-8,92.517317)"/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 225.921875 190.570312 L 224.578125 194.195312 L 227.265625 194.195312 Z M 225.359375 189.585938 L 226.484375 189.585938 L 229.265625 196.882812 L 228.234375 196.882812 L 227.5625 195.007812 L 224.28125 195.007812 L 223.625 196.882812 L 222.578125 196.882812 Z M 225.359375 189.585938 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 229.34375 194.726562 L 229.34375 191.414062 L 230.25 191.414062 L 230.25 194.695312 C 230.25 195.207031 230.347656 195.59375 230.546875 195.851562 C 230.753906 196.113281 231.054688 196.242188 231.453125 196.242188 C 231.941406 196.242188 232.328125 196.09375 232.609375 195.789062 C 232.890625 195.476562 233.03125 195.050781 233.03125 194 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 238.921875 191.570312 L 238.921875 192.429688 C 238.671875 192.296875 238.410156 192.195312 238.140625 192.132812 C 237.867188 192.070312 237.582031 192.039062 237.28125 192.039062 C 236.84375 192.039062 236.507812 192.109375 236.28125 192.242188 C 236.0625 192.378906 235.953125 192.582031 235.953125 192.851562 C 235.953125 193.0625 236.0 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 241.328125 189.867188 L 241.328125 191.414062 L 243.1875 191.414062 L 243.1875 192.117188 L 241.328125 192.117188 L 241.328125 195.085938 C 241.328125 195.523438 241.390625 195.8125 241.515625 195.945312 C 241.640625 196.070312 241.890625 196.132812 242.265625 196.132812 L 243.1875 196.132812 L 243.1875 196.882812 L 242.265625 196.882812  [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 246.609375 192.257812 C 246.503906 192.195312 246.394531 192.15625 246.28125 192.132812 C 246.164062 192.101562 246.035156 192.085938 245.890625 192.085938 C 245.378906 192.085938 244.988281 192.253906 244.71875 192.585938 C 244.445312 192.910156 244.3125 193.382812 244.3125 194.007812 L 244.3125 196.882812 L 243.40625 196.882812 L 243.40 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 249.921875 194.132812 C 249.203125 194.132812 248.703125 194.21875 248.421875 194.382812 C 248.140625 194.550781 248 194.832031 248 195.226562 C 248 195.550781 248.101562 195.804688 248.3125 195.992188 C 248.519531 196.179688 248.804688 196.273438 249.171875 196.273438 C 249.671875 196.273438 250.070312 196.097656 250.375 195.742188 C 250 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 253.4375 189.289062 L 254.34375 189.289062 L 254.34375 196.882812 L 253.4375 196.882812 Z M 253.4375 189.289062 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 255.4375 191.414062 L 256.34375 191.414062 L 256.34375 196.882812 L 255.4375 196.882812 Z M 255.4375 189.289062 L 256.34375 189.289062 L 256.34375 190.429688 L 255.4375 190.429688 Z M 255.4375 189.289062 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 259.921875 194.132812 C 259.203125 194.132812 258.703125 194.21875 258.421875 194.382812 C 258.140625 194.550781 258 194.832031 258 195.226562 C 258 195.550781 258.101562 195.804688 258.3125 195.992188 C 258.519531 196.179688 258.804688 196.273438 259.171875 196.273438 C 259.671875 196.273438 260.070312 196.097656 260.375 195.742188 C 260 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.59375 189.289062 C 268.164062 190.039062 267.84375 190.785156 267.625 191.523438 C 267.414062 192.253906 267.3125 192.992188 267.3125 193.742188 C 267.3125 194.492188 267.414062 195.238281 267.625 195.976562 C 267.84375 196.71875 268.164062 197.453125 268.59375 198.195312 L 267.8125 198.195312 C 267.332031 197.433594 266.96875 196.687 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 270.3125 196.054688 L 270.3125 198.960938 L 269.40625 198.960938 L 269.40625 191.414062 L 270.3125 191.414062 L 270.3125 192.242188 C 270.5 191.921875 270.734375 191.679688 271.015625 191.523438 C 271.304688 191.367188 271.65625 191.289062 272.0625 191.289062 C 272.726562 191.289062 273.265625 191.554688 273.671875 192.085938 C 274.085938 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 279.984375 193.585938 L 279.984375 196.882812 L 279.09375 196.882812 L 279.09375 193.617188 C 279.09375 193.097656 278.988281 192.710938 278.78125 192.460938 C 278.582031 192.203125 278.28125 192.070312 277.875 192.070312 C 277.394531 192.070312 277.015625 192.226562 276.734375 192.539062 C 276.453125 192.84375 276.3125 193.257812 276.312 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 285.046875 194.085938 C 285.046875 193.429688 284.910156 192.925781 284.640625 192.570312 C 284.367188 192.21875 283.992188 192.039062 283.515625 192.039062 C 283.023438 192.039062 282.644531 192.21875 282.375 192.570312 C 282.113281 192.925781 281.984375 193.429688 281.984375 194.085938 C 281.984375 194.734375 282.113281 195.238281 282.3 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 287.296875 189.289062 L 288.078125 189.289062 C 288.566406 190.0625 288.929688 190.816406 289.171875 191.554688 C 289.421875 192.285156 289.546875 193.015625 289.546875 193.742188 C 289.546875 194.472656 289.421875 195.207031 289.171875 195.945312 C 288.929688 196.6875 288.566406 197.433594 288.078125 198.195312 L 287.296875 198.195312 C  [...]
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-15" x="222.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-16" x="228.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="234.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="239.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-17" x="242.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-8" x="246.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-18" x="252.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="254.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-8" x="256.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="262.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-10" x="265.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-12" x="268.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="274.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-13" x="280.500002" y="196.88379"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="286.500002" y="196.88379"/>
+</g>
+<use xlink:href="#image25" transform="matrix(1,0,0,1,248.000002,160.88379)"/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.363281 183.917969 L 20.363281 186.589844 L 21.941406 186.589844 C 22.472656 186.589844 22.863281 186.480469 23.113281 186.261719 C 23.371094 186.042969 23.503906 185.707031 23.503906 185.246094 C 23.503906 184.800781 23.371094 184.464844 23.113281 184.246094 C 22.863281 184.027344 22.472656 183.917969 21.941406 183.917969 Z M 20.363281 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 28.503906 182.777344 C 28.398438 182.714844 28.289062 182.675781 28.175781 182.652344 C 28.058594 182.621094 27.929688 182.605469 27.785156 182.605469 C 27.273438 182.605469 26.882812 182.773438 26.613281 183.105469 C 26.339844 183.429688 26.207031 183.902344 26.207031 184.527344 L 26.207031 187.402344 L 25.300781 187.402344 L 25.300781 1 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 31.816406 184.652344 C 31.097656 184.652344 30.597656 184.738281 30.316406 184.902344 C 30.035156 185.070312 29.894531 185.351562 29.894531 185.746094 C 29.894531 186.070312 29.996094 186.324219 30.207031 186.511719 C 30.414062 186.699219 30.699219 186.792969 31.066406 186.792969 C 31.566406 186.792969 31.964844 186.617188 32.269531 186.2 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 34.941406 181.933594 L 39.207031 181.933594 L 39.207031 182.746094 L 35.832031 186.683594 L 39.207031 186.683594 L 39.207031 187.402344 L 34.832031 187.402344 L 34.832031 186.574219 L 38.207031 182.652344 L 34.941406 182.652344 Z M 34.941406 181.933594 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 40.332031 181.933594 L 41.238281 181.933594 L 41.238281 187.402344 L 40.332031 187.402344 Z M 40.332031 179.808594 L 41.238281 179.808594 L 41.238281 180.949219 L 40.332031 180.949219 Z M 40.332031 179.808594 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 42.332031 179.808594 L 43.238281 179.808594 L 43.238281 187.402344 L 42.332031 187.402344 Z M 42.332031 179.808594 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 49.488281 179.808594 C 49.058594 180.558594 48.738281 181.304688 48.519531 182.042969 C 48.308594 182.773438 48.207031 183.511719 48.207031 184.261719 C 48.207031 185.011719 48.308594 185.757812 48.519531 186.496094 C 48.738281 187.238281 49.058594 187.972656 49.488281 188.714844 L 48.707031 188.714844 C 48.226562 187.953125 47.863281 187 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 53.816406 182.089844 L 53.816406 182.949219 C 53.566406 182.816406 53.304688 182.714844 53.035156 182.652344 C 52.761719 182.589844 52.476562 182.558594 52.175781 182.558594 C 51.738281 182.558594 51.402344 182.628906 51.175781 182.761719 C 50.957031 182.898438 50.847656 183.101562 50.847656 183.371094 C 50.847656 183.582031 50.925781 183 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.691406 181.933594 L 55.644531 181.933594 L 57.347656 186.527344 L 59.066406 181.933594 L 60.019531 181.933594 L 57.957031 187.402344 L 56.738281 187.402344 Z M 54.691406 181.933594 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 63.941406 184.605469 C 63.941406 183.949219 63.804688 183.445312 63.535156 183.089844 C 63.261719 182.738281 62.886719 182.558594 62.410156 182.558594 C 61.917969 182.558594 61.539062 182.738281 61.269531 183.089844 C 61.007812 183.445312 60.878906 183.949219 60.878906 184.605469 C 60.878906 185.253906 61.007812 185.757812 61.269531 186.1 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 70.832031 183.480469 C 70.527344 183.742188 70.308594 184.007812 70.175781 184.277344 C 70.039062 184.539062 69.972656 184.808594 69.972656 185.089844 C 69.972656 185.570312 70.144531 185.964844 70.488281 186.277344 C 70.832031 186.589844 71.261719 186.746094 71.785156 186.746094 C 72.097656 186.746094 72.382812 186.699219 72.644531 186.6 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 80.222656 180.386719 L 80.222656 181.933594 L 82.082031 181.933594 L 82.082031 182.636719 L 80.222656 182.636719 L 80.222656 185.605469 C 80.222656 186.042969 80.285156 186.332031 80.410156 186.464844 C 80.535156 186.589844 80.785156 186.652344 81.160156 186.652344 L 82.082031 186.652344 L 82.082031 187.402344 L 81.160156 187.402344 C 80. [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 82.332031 181.933594 L 83.238281 181.933594 L 83.238281 187.402344 L 82.332031 187.402344 Z M 82.332031 179.808594 L 83.238281 179.808594 L 83.238281 180.949219 L 82.332031 180.949219 Z M 82.332031 179.808594 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 87.113281 179.808594 L 87.113281 180.558594 L 86.253906 180.558594 C 85.929688 180.558594 85.707031 180.628906 85.582031 180.761719 C 85.457031 180.886719 85.394531 181.117188 85.394531 181.449219 L 85.394531 181.933594 L 86.863281 181.933594 L 86.863281 182.636719 L 85.394531 182.636719 L 85.394531 187.402344 L 84.488281 187.402344 L 84. [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 87.191406 179.808594 L 87.972656 179.808594 C 88.460938 180.582031 88.824219 181.335938 89.066406 182.074219 C 89.316406 182.804688 89.441406 183.535156 89.441406 184.261719 C 89.441406 184.992188 89.316406 185.726562 89.066406 186.464844 C 88.824219 187.207031 88.460938 187.953125 87.972656 188.714844 L 87.191406 188.714844 C 87.628906 1 [...]
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="18.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-17" x="24.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-8" x="28.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-20" x="34.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="39.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-18" x="41.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="43.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-10" x="46.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="49.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-21" x="54.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-13" x="59.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="65.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="68.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="75.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="78.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="81.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-23" x="83.394737" y="187.402308"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="86.394737" y="187.402308"/>
+</g>
+<use xlink:href="#image28" transform="matrix(1,0,0,1,45.894737,151.402308)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 63.808594 159.402344 L 63.132812 160.847656 L 61.199219 162.097656 L 58.265625 162.984375 L 54.730469 163.386719 L 51.074219 163.25 L 47.785156 162.59375 L 45.308594 161.507812 L 43.980469 160.136719 L 43.980469 158.667969 L 45.308594 157.296875 L 47.785156 156.210938 L 51.074219 155.554688 L 54.730469 155.417969 L 58.265625 155.820312 L 61.199219 156.707031 L 63.132812 157.957031 Z M 63.808594 159.402344 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,100%);fill-opacity:1;" d="M 57.808594 159.402344 L 57.539062 163.015625 L 56.765625 166.140625 L 55.59375 168.355469 L 54.179688 169.359375 L 52.714844 169.019531 L 51.398438 167.382812 L 50.410156 164.667969 L 49.878906 161.238281 L 49.878906 157.566406 L 50.410156 154.136719 L 51.398438 151.421875 L 52.714844 149.785156 L 54.179688 149.445312 L 55.59375 150.449219 L 56.765625 152.664062 L 57.539062 155.789062 Z M 57.808594 159. [...]
+<path style="fill-rule:nonzero;fill:url(#radial0);stroke-width:0.4;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,50.196078%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 4.998991 -19.999964 L 4.502898 -17.831996 L 3.116179 -16.089808 L 1.112273 -15.124964 L -1.11429 -15.124964 L -3.118196 -16.089808 L -4.504915 -17.831996 L -5.001009 -19.999964 L -4.504915 -22.167933 L -3.118196 -23.910121 L -1.11429 -24.874964 L 1.112273 -24.874964 L 3.116179 -23.910121 L 4.502898 -22.167933 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 189.554688 114.734375 L 191.023438 114.734375 L 192.882812 119.703125 L 194.757812 114.734375 L 196.226562 114.734375 L 196.226562 122.03125 L 195.257812 122.03125 L 195.257812 115.625 L 193.382812 120.625 L 192.382812 120.625 L 190.507812 115.625 L 190.507812 122.03125 L 189.554688 122.03125 Z M 189.554688 114.734375 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 199.632812 117.1875 C 199.152344 117.1875 198.773438 117.375 198.492188 117.75 C 198.210938 118.125 198.070312 118.640625 198.070312 119.296875 C 198.070312 119.953125 198.203125 120.46875 198.476562 120.84375 C 198.757812 121.21875 199.140625 121.40625 199.632812 121.40625 C 200.109375 121.40625 200.492188 121.21875 200.773438 120.84375  [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 208.054688 118.734375 L 208.054688 122.03125 L 207.164062 122.03125 L 207.164062 118.765625 C 207.164062 118.246094 207.058594 117.859375 206.851562 117.609375 C 206.652344 117.351562 206.351562 117.21875 205.945312 117.21875 C 205.464844 117.21875 205.085938 117.375 204.804688 117.6875 C 204.523438 117.992188 204.382812 118.40625 204.382 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 213.117188 119.234375 C 213.117188 118.578125 212.980469 118.074219 212.710938 117.71875 C 212.4375 117.367188 212.0625 117.1875 211.585938 117.1875 C 211.09375 117.1875 210.714844 117.367188 210.445312 117.71875 C 210.183594 118.074219 210.054688 118.578125 210.054688 119.234375 C 210.054688 119.882812 210.183594 120.386719 210.445312 12 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.632812 117.1875 C 217.152344 117.1875 216.773438 117.375 216.492188 117.75 C 216.210938 118.125 216.070312 118.640625 216.070312 119.296875 C 216.070312 119.953125 216.203125 120.46875 216.476562 120.84375 C 216.757812 121.21875 217.140625 121.40625 217.632812 121.40625 C 218.109375 121.40625 218.492188 121.21875 218.773438 120.84375  [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 221.507812 114.4375 L 222.414062 114.4375 L 222.414062 122.03125 L 221.507812 122.03125 Z M 221.507812 114.4375 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 223.507812 116.5625 L 224.414062 116.5625 L 224.414062 122.03125 L 223.507812 122.03125 Z M 223.507812 114.4375 L 224.414062 114.4375 L 224.414062 115.578125 L 223.507812 115.578125 Z M 223.507812 114.4375 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 227.992188 119.28125 C 227.273438 119.28125 226.773438 119.367188 226.492188 119.53125 C 226.210938 119.699219 226.070312 119.980469 226.070312 120.375 C 226.070312 120.699219 226.171875 120.953125 226.382812 121.140625 C 226.589844 121.328125 226.875 121.421875 227.242188 121.421875 C 227.742188 121.421875 228.140625 121.246094 228.44531 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 236.664062 114.4375 C 236.234375 115.1875 235.914062 115.933594 235.695312 116.671875 C 235.484375 117.402344 235.382812 118.140625 235.382812 118.890625 C 235.382812 119.640625 235.484375 120.386719 235.695312 121.125 C 235.914062 121.867188 236.234375 122.601562 236.664062 123.34375 L 235.882812 123.34375 C 235.402344 122.582031 235.039 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 238.398438 115.015625 L 238.398438 116.5625 L 240.257812 116.5625 L 240.257812 117.265625 L 238.398438 117.265625 L 238.398438 120.234375 C 238.398438 120.671875 238.460938 120.960938 238.585938 121.09375 C 238.710938 121.21875 238.960938 121.28125 239.335938 121.28125 L 240.257812 121.28125 L 240.257812 122.03125 L 239.335938 122.03125 C [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 240.507812 116.5625 L 241.414062 116.5625 L 241.414062 122.03125 L 240.507812 122.03125 Z M 240.507812 114.4375 L 241.414062 114.4375 L 241.414062 115.578125 L 240.507812 115.578125 Z M 240.507812 114.4375 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 248.648438 114.4375 L 248.648438 115.1875 L 247.789062 115.1875 C 247.464844 115.1875 247.242188 115.257812 247.117188 115.390625 C 246.992188 115.515625 246.929688 115.746094 246.929688 116.078125 L 246.929688 116.5625 L 248.414062 116.5625 L 248.414062 117.265625 L 246.929688 117.265625 L 246.929688 122.03125 L 246.023438 122.03125 L 24 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 248.367188 114.4375 L 249.148438 114.4375 C 249.636719 115.210938 250 115.964844 250.242188 116.703125 C 250.492188 117.433594 250.617188 118.164062 250.617188 118.890625 C 250.617188 119.621094 250.492188 120.355469 250.242188 121.09375 C 250 121.835938 249.636719 122.582031 249.148438 123.34375 L 248.367188 123.34375 C 248.804688 122.60 [...]
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-24" x="188.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-25" x="196.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="202.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-13" x="208.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-25" x="214.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-18" x="220.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="222.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-8" x="224.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="230.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-10" x="233.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="236.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="239.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-26" x="241.571152" y="122.029988"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="247.571152" y="122.029988"/>
+</g>
+<use xlink:href="#image31" transform="matrix(1,0,0,1,211.571152,86.029988)"/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.355469 201.613281 L 22.355469 202.457031 C 22.105469 202.324219 21.847656 202.21875 21.589844 202.144531 C 21.339844 202.074219 21.082031 202.035156 20.824219 202.035156 C 20.238281 202.035156 19.785156 202.222656 19.464844 202.597656 C 19.140625 202.964844 18.980469 203.480469 18.980469 204.144531 C 18.980469 204.8125 19.140625 205.33 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 27.964844 203.582031 L 27.964844 206.878906 L 27.074219 206.878906 L 27.074219 203.613281 C 27.074219 203.09375 26.96875 202.707031 26.761719 202.457031 C 26.5625 202.199219 26.261719 202.066406 25.855469 202.066406 C 25.375 202.066406 24.996094 202.222656 24.714844 202.535156 C 24.433594 202.839844 24.292969 203.253906 24.292969 203.7851 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 29.417969 201.410156 L 30.324219 201.410156 L 30.324219 206.878906 L 29.417969 206.878906 Z M 29.417969 199.285156 L 30.324219 199.285156 L 30.324219 200.425781 L 29.417969 200.425781 Z M 29.417969 199.285156 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 31.417969 199.285156 L 32.324219 199.285156 L 32.324219 206.878906 L 31.417969 206.878906 Z M 31.417969 199.285156 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 38.105469 203.925781 L 38.105469 204.363281 L 33.964844 204.363281 C 34.003906 204.980469 34.191406 205.449219 34.527344 205.769531 C 34.859375 206.09375 35.324219 206.253906 35.917969 206.253906 C 36.261719 206.253906 36.59375 206.214844 36.917969 206.128906 C 37.25 206.046875 37.574219 205.921875 37.886719 205.753906 L 37.886719 206.597 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 13.574219 211.285156 C 13.144531 212.035156 12.824219 212.78125 12.605469 213.519531 C 12.394531 214.25 12.292969 214.988281 12.292969 215.738281 C 12.292969 216.488281 12.394531 217.234375 12.605469 217.972656 C 12.824219 218.714844 13.144531 219.449219 13.574219 220.191406 L 12.792969 220.191406 C 12.3125 219.429688 11.949219 218.683594 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18.027344 214.238281 L 18.027344 211.285156 L 18.917969 211.285156 L 18.917969 218.878906 L 18.027344 218.878906 L 18.027344 218.050781 C 17.839844 218.386719 17.597656 218.628906 17.308594 218.785156 C 17.015625 218.941406 16.667969 219.019531 16.261719 219.019531 C 15.605469 219.019531 15.066406 218.761719 14.652344 218.238281 C 14.2343 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 25.105469 215.925781 L 25.105469 216.363281 L 20.964844 216.363281 C 21.003906 216.980469 21.191406 217.449219 21.527344 217.769531 C 21.859375 218.09375 22.324219 218.253906 22.917969 218.253906 C 23.261719 218.253906 23.59375 218.214844 23.917969 218.128906 C 24.25 218.046875 24.574219 217.921875 24.886719 217.753906 L 24.886719 218.597 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 29.199219 211.285156 L 29.199219 212.035156 L 28.339844 212.035156 C 28.015625 212.035156 27.792969 212.105469 27.667969 212.238281 C 27.542969 212.363281 27.480469 212.59375 27.480469 212.925781 L 27.480469 213.410156 L 28.949219 213.410156 L 28.949219 214.113281 L 27.480469 214.113281 L 27.480469 218.878906 L 26.574219 218.878906 L 26.5 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 31.902344 216.128906 C 31.183594 216.128906 30.683594 216.214844 30.402344 216.378906 C 30.121094 216.546875 29.980469 216.828125 29.980469 217.222656 C 29.980469 217.546875 30.082031 217.800781 30.292969 217.988281 C 30.5 218.175781 30.785156 218.269531 31.152344 218.269531 C 31.652344 218.269531 32.050781 218.09375 32.355469 217.738281  [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 35.324219 216.722656 L 35.324219 213.410156 L 36.230469 213.410156 L 36.230469 216.691406 C 36.230469 217.203125 36.328125 217.589844 36.527344 217.847656 C 36.734375 218.109375 37.035156 218.238281 37.433594 218.238281 C 37.921875 218.238281 38.308594 218.089844 38.589844 217.785156 C 38.871094 217.472656 39.011719 217.046875 39.011719 2 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 41.417969 211.285156 L 42.324219 211.285156 L 42.324219 218.878906 L 41.417969 218.878906 Z M 41.417969 211.285156 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 44.308594 211.863281 L 44.308594 213.410156 L 46.167969 213.410156 L 46.167969 214.113281 L 44.308594 214.113281 L 44.308594 217.082031 C 44.308594 217.519531 44.371094 217.808594 44.496094 217.941406 C 44.621094 218.066406 44.871094 218.128906 45.246094 218.128906 L 46.167969 218.128906 L 46.167969 218.878906 L 45.246094 218.878906 C 44. [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.542969 226.035156 C 22.0625 226.035156 21.683594 226.222656 21.402344 226.597656 C 21.121094 226.972656 20.980469 227.488281 20.980469 228.144531 C 20.980469 228.800781 21.113281 229.316406 21.386719 229.691406 C 21.667969 230.066406 22.050781 230.253906 22.542969 230.253906 C 23.019531 230.253906 23.402344 230.066406 23.683594 229.691 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 30.027344 228.082031 C 30.027344 227.425781 29.890625 226.921875 29.621094 226.566406 C 29.347656 226.214844 28.972656 226.035156 28.496094 226.035156 C 28.003906 226.035156 27.625 226.214844 27.355469 226.566406 C 27.09375 226.921875 26.964844 227.425781 26.964844 228.082031 C 26.964844 228.730469 27.09375 229.234375 27.355469 229.597656 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 36.355469 225.613281 L 36.355469 226.457031 C 36.105469 226.324219 35.847656 226.21875 35.589844 226.144531 C 35.339844 226.074219 35.082031 226.035156 34.824219 226.035156 C 34.238281 226.035156 33.785156 226.222656 33.464844 226.597656 C 33.140625 226.964844 32.980469 227.480469 32.980469 228.144531 C 32.980469 228.8125 33.140625 229.33 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d=""/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 19.292969 242.050781 L 19.292969 244.957031 L 18.386719 244.957031 L 18.386719 237.410156 L 19.292969 237.410156 L 19.292969 238.238281 C 19.480469 237.917969 19.714844 237.675781 19.996094 237.519531 C 20.285156 237.363281 20.636719 237.285156 21.042969 237.285156 C 21.707031 237.285156 22.246094 237.550781 22.652344 238.082031 C 23.0664 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.417969 237.410156 L 25.324219 237.410156 L 25.324219 242.878906 L 24.417969 242.878906 Z M 24.417969 235.285156 L 25.324219 235.285156 L 25.324219 236.425781 L 24.417969 236.425781 Z M 24.417969 235.285156 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 30.964844 237.410156 L 28.996094 240.066406 L 31.074219 242.878906 L 30.011719 242.878906 L 28.417969 240.722656 L 26.824219 242.878906 L 25.761719 242.878906 L 27.886719 240.019531 L 25.949219 237.410156 L 27.011719 237.410156 L 28.464844 239.363281 L 29.902344 237.410156 Z M 30.964844 237.410156 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 36.105469 239.925781 L 36.105469 240.363281 L 31.964844 240.363281 C 32.003906 240.980469 32.191406 241.449219 32.527344 241.769531 C 32.859375 242.09375 33.324219 242.253906 33.917969 242.253906 C 34.261719 242.253906 34.59375 242.214844 34.917969 242.128906 C 35.25 242.046875 35.574219 241.921875 35.886719 241.753906 L 35.886719 242.597 [...]
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 37.417969 235.285156 L 38.324219 235.285156 L 38.324219 242.878906 L 37.417969 242.878906 Z M 37.417969 235.285156 "/>
+<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.277344 235.285156 L 40.058594 235.285156 C 40.546875 236.058594 40.910156 236.8125 41.152344 237.550781 C 41.402344 238.28125 41.527344 239.011719 41.527344 239.738281 C 41.527344 240.46875 41.402344 241.203125 41.152344 241.941406 C 40.910156 242.683594 40.546875 243.429688 40.058594 244.191406 L 39.277344 244.191406 C 39.714844 243.4 [...]
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-27" x="17.478651" y="206.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-28" x="22.478651" y="206.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="28.478651" y="206.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-18" x="30.478651" y="206.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-4" x="32.478651" y="206.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="38.478651" y="206.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-10" x="10.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-5" x="13.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-4" x="19.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-23" x="25.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-8" x="28.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-16" x="34.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-18" x="40.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="42.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="45.478651" y="218.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-25" x="19.478651" y="230.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-13" x="25.478651" y="230.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-27" x="31.478651" y="230.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="36.478651" y="230.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-12" x="17.478651" y="242.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-2" x="23.478651" y="242.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-29" x="25.478651" y="242.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-4" x="30.478651" y="242.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-18" x="36.478651" y="242.877778"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="38.478651" y="242.877778"/>
+</g>
+<use xlink:href="#image34" transform="matrix(1,0,0,1,27.478651,191.877778)"/>
+</g>
+</svg>
diff --git a/tests/python_tests/images/pycairo/cairo-surface-expected.polygon.pdf b/tests/python_tests/images/pycairo/cairo-surface-expected.polygon.pdf
new file mode 100644
index 0000000..2621730
Binary files /dev/null and b/tests/python_tests/images/pycairo/cairo-surface-expected.polygon.pdf differ
diff --git a/tests/python_tests/images/pycairo/cairo-surface-expected.polygon.svg b/tests/python_tests/images/pycairo/cairo-surface-expected.polygon.svg
new file mode 100644
index 0000000..886e24b
--- /dev/null
+++ b/tests/python_tests/images/pycairo/cairo-surface-expected.polygon.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256pt" height="256pt" viewBox="0 0 256 256" version="1.1">
+<defs>
+<image id="image48" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image51" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image54" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image57" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image60" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image63" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image66" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image69" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+<image id="image72" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABmJLR0QA/wD/AP+gvaeTAAAATUlEQVQokZXNSwrAAAgD0bH3v7PdFIqQ+HEZ3mDgL1OMcdI2cFoHjRbBoKMGoy4fNvoPlvoL9hqIkwaek+4CqW3gtA4aLYJeZ9Zg1MALX2IYF9KsZQAAAAAASUVORK5CYII="/>
+</defs>
+<g id="surface44">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 115.65625 56.117188 L 105.6875 50.042969 L 102.367188 41.585938 L 108.777344 39.203125 L 132.507812 28.515625 L 132.222656 27.054688 L 141.789062 23.054688 L 145.058594 32.933594 L 157.566406 68.800781 L 159.464844 73.835938 L 139.804688 81.023438 L 135.675781 71.570312 L 135.882812 66.1875 L 136.332031 59.265625 L 134.109375 51.578125 L 131.019531 45.429688 L 127.984375 38.5078 [...]
+<use xlink:href="#image48" transform="matrix(1,0,0,1,127.94131,42.841104)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 132.222656 27.054688 L 132.507812 28.515625 L 108.777344 39.203125 L 102.367188 41.585938 L 105.6875 50.042969 L 115.65625 56.117188 L 112.578125 61.574219 L 105.039062 74.605469 L 88.605469 74.414062 L 84.253906 74.566406 L 79.761719 74.644531 L 68.664062 79.027344 L 67.753906 79.296875 L 62.101562 68.839844 L 56.199219 60.996094 L 54.90625 61.496094 L 53.773438 58.652344 L 64. [...]
+<use xlink:href="#image51" transform="matrix(1,0,0,1,79.836035,51.528053)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 115.65625 56.117188 L 118.730469 49.234375 L 122.578125 41.546875 L 127.984375 38.507812 L 131.019531 45.429688 L 134.109375 51.578125 L 136.332031 59.265625 L 135.882812 66.1875 L 129.527344 66.6875 L 124.503906 68.453125 L 121.441406 69.992188 L 109.082031 80.371094 L 104.925781 81.371094 L 102.195312 83.253906 L 101.664062 85.136719 L 100.078125 88.445312 L 97.773438 91.67187 [...]
+<use xlink:href="#image54" transform="matrix(1,0,0,1,90.102079,69.169472)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 53.773438 58.652344 L 54.90625 61.496094 L 61.679688 81.753906 L 71.058594 108.050781 L 76.140625 119.121094 L 72.308594 122.695312 L 69.605469 130.535156 L 61.425781 133.496094 L 54.027344 114.699219 L 44.699219 118.351562 L 33.3125 123.15625 L 14.414062 130.113281 L 11.242188 120.925781 L 9.871094 116.082031 L 10.171875 111.96875 L 10.238281 106.011719 L 14.351562 105.242188 L [...]
+<use xlink:href="#image57" transform="matrix(1,0,0,1,31.167216,88.825)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 54.90625 61.496094 L 56.199219 60.996094 L 62.101562 68.839844 L 67.753906 79.296875 L 61.679688 81.753906 Z "/>
+<use xlink:href="#image60" transform="matrix(1,0,0,1,53.212824,64.674519)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 135.882812 66.1875 L 135.675781 71.570312 L 139.804688 81.023438 L 127.082031 86.292969 L 110.335938 92.902344 L 109.199219 89.058594 L 101.835938 91.441406 L 103.257812 95.363281 L 91.441406 100.015625 L 94.757812 93.558594 L 97.773438 91.671875 L 100.078125 88.445312 L 101.664062 85.136719 L 102.195312 83.253906 L 104.925781 81.371094 L 109.082031 80.371094 L 121.441406 69.992 [...]
+<use xlink:href="#image63" transform="matrix(1,0,0,1,111.187238,73.378811)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 159.464844 73.835938 L 170.804688 68.917969 L 173.171875 76.296875 L 176.019531 82.679688 L 183.402344 90.136719 L 184.109375 93.789062 L 174.757812 89.945312 L 171.078125 89.90625 L 169.109375 93.441406 L 185.757812 103.707031 L 182.722656 112.007812 L 181.617188 113.125 L 179.890625 116.3125 L 174.433594 119.734375 L 167.976562 121.773438 L 157.070312 125.578125 L 144.289062 1 [...]
+<use xlink:href="#image66" transform="matrix(1,0,0,1,153.144399,90.01164)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 183.402344 90.136719 L 188.046875 87.058594 L 192.929688 83.832031 L 200.394531 81.488281 L 201.0625 81.371094 L 205.175781 79.601562 L 213.167969 74.914062 L 216.90625 70.414062 L 228.015625 79.488281 L 228.765625 84.601562 L 242.207031 79.796875 L 241.550781 74.835938 L 245.570312 72.53125 L 247.820312 71.339844 L 250.59375 70.03125 L 252.679688 76.488281 L 254.8125 83.101562  [...]
+<use xlink:href="#image69" transform="matrix(1,0,0,1,155.527409,142.794669)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 110.335938 92.902344 L 127.082031 86.292969 L 128.355469 90.597656 L 130.351562 95.019531 L 136.710938 92.828125 L 143.125 89.828125 L 149.34375 87.90625 L 155.929688 105.933594 L 155.917969 110.203125 L 153.800781 116.507812 L 151.734375 120.082031 L 147.519531 123.503906 L 141.585938 126.386719 L 144.289062 132.804688 L 138.746094 132.382812 L 94.914062 153.0625 L 90.503906 15 [...]
+<use xlink:href="#image72" transform="matrix(1,0,0,1,105.830723,109.774724)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,98.039216%);fill-opacity:0.5;" d="M 110.335938 92.902344 L 103.257812 95.363281 L 101.835938 91.441406 L 109.199219 89.058594 Z "/>
+</g>
+</svg>
diff --git a/tests/python_tests/images/style-comp-op/color.png b/tests/python_tests/images/style-comp-op/color.png
index 5aee202..c0947a0 100644
Binary files a/tests/python_tests/images/style-comp-op/color.png and b/tests/python_tests/images/style-comp-op/color.png differ
diff --git a/tests/python_tests/images/style-comp-op/color_burn.png b/tests/python_tests/images/style-comp-op/color_burn.png
index 0836acf..cf1f723 100644
Binary files a/tests/python_tests/images/style-comp-op/color_burn.png and b/tests/python_tests/images/style-comp-op/color_burn.png differ
diff --git a/tests/python_tests/images/style-comp-op/color_dodge.png b/tests/python_tests/images/style-comp-op/color_dodge.png
index 018c2bb..d4638c2 100644
Binary files a/tests/python_tests/images/style-comp-op/color_dodge.png and b/tests/python_tests/images/style-comp-op/color_dodge.png differ
diff --git a/tests/python_tests/images/style-comp-op/contrast.png b/tests/python_tests/images/style-comp-op/contrast.png
index 6dbc72a..9d3c430 100644
Binary files a/tests/python_tests/images/style-comp-op/contrast.png and b/tests/python_tests/images/style-comp-op/contrast.png differ
diff --git a/tests/python_tests/images/style-comp-op/darken.png b/tests/python_tests/images/style-comp-op/darken.png
index 737d078..9792549 100644
Binary files a/tests/python_tests/images/style-comp-op/darken.png and b/tests/python_tests/images/style-comp-op/darken.png differ
diff --git a/tests/python_tests/images/style-comp-op/difference.png b/tests/python_tests/images/style-comp-op/difference.png
index e7313a4..a33f772 100644
Binary files a/tests/python_tests/images/style-comp-op/difference.png and b/tests/python_tests/images/style-comp-op/difference.png differ
diff --git a/tests/python_tests/images/style-comp-op/divide.png b/tests/python_tests/images/style-comp-op/divide.png
new file mode 100644
index 0000000..551ee10
Binary files /dev/null and b/tests/python_tests/images/style-comp-op/divide.png differ
diff --git a/tests/python_tests/images/style-comp-op/dst_atop.png b/tests/python_tests/images/style-comp-op/dst_atop.png
index 2909c4c..dbb6b43 100644
Binary files a/tests/python_tests/images/style-comp-op/dst_atop.png and b/tests/python_tests/images/style-comp-op/dst_atop.png differ
diff --git a/tests/python_tests/images/style-comp-op/dst_in.png b/tests/python_tests/images/style-comp-op/dst_in.png
index 2909c4c..dbb6b43 100644
Binary files a/tests/python_tests/images/style-comp-op/dst_in.png and b/tests/python_tests/images/style-comp-op/dst_in.png differ
diff --git a/tests/python_tests/images/style-comp-op/dst_out.png b/tests/python_tests/images/style-comp-op/dst_out.png
index 5c1be3e..59e0ff0 100644
Binary files a/tests/python_tests/images/style-comp-op/dst_out.png and b/tests/python_tests/images/style-comp-op/dst_out.png differ
diff --git a/tests/python_tests/images/style-comp-op/exclusion.png b/tests/python_tests/images/style-comp-op/exclusion.png
index e4bd804..bfef058 100644
Binary files a/tests/python_tests/images/style-comp-op/exclusion.png and b/tests/python_tests/images/style-comp-op/exclusion.png differ
diff --git a/tests/python_tests/images/style-comp-op/grain_extract.png b/tests/python_tests/images/style-comp-op/grain_extract.png
index 7deb5d0..7c70598 100644
Binary files a/tests/python_tests/images/style-comp-op/grain_extract.png and b/tests/python_tests/images/style-comp-op/grain_extract.png differ
diff --git a/tests/python_tests/images/style-comp-op/grain_merge.png b/tests/python_tests/images/style-comp-op/grain_merge.png
index be1e81a..db5159e 100644
Binary files a/tests/python_tests/images/style-comp-op/grain_merge.png and b/tests/python_tests/images/style-comp-op/grain_merge.png differ
diff --git a/tests/python_tests/images/style-comp-op/hard_light.png b/tests/python_tests/images/style-comp-op/hard_light.png
index 94c34ad..01c0c2a 100644
Binary files a/tests/python_tests/images/style-comp-op/hard_light.png and b/tests/python_tests/images/style-comp-op/hard_light.png differ
diff --git a/tests/python_tests/images/style-comp-op/hue.png b/tests/python_tests/images/style-comp-op/hue.png
index c974de0..2d2a3c1 100644
Binary files a/tests/python_tests/images/style-comp-op/hue.png and b/tests/python_tests/images/style-comp-op/hue.png differ
diff --git a/tests/python_tests/images/style-comp-op/invert.png b/tests/python_tests/images/style-comp-op/invert.png
index b4289a6..a4e5991 100644
Binary files a/tests/python_tests/images/style-comp-op/invert.png and b/tests/python_tests/images/style-comp-op/invert.png differ
diff --git a/tests/python_tests/images/style-comp-op/lighten.png b/tests/python_tests/images/style-comp-op/lighten.png
index 0f7b2eb..3132288 100644
Binary files a/tests/python_tests/images/style-comp-op/lighten.png and b/tests/python_tests/images/style-comp-op/lighten.png differ
diff --git a/tests/python_tests/images/style-comp-op/linear_burn.png b/tests/python_tests/images/style-comp-op/linear_burn.png
new file mode 100644
index 0000000..95a984b
Binary files /dev/null and b/tests/python_tests/images/style-comp-op/linear_burn.png differ
diff --git a/tests/python_tests/images/style-comp-op/linear_dodge.png b/tests/python_tests/images/style-comp-op/linear_dodge.png
new file mode 100644
index 0000000..23effa5
Binary files /dev/null and b/tests/python_tests/images/style-comp-op/linear_dodge.png differ
diff --git a/tests/python_tests/images/style-comp-op/minus.png b/tests/python_tests/images/style-comp-op/minus.png
index b83699d..30575e2 100644
Binary files a/tests/python_tests/images/style-comp-op/minus.png and b/tests/python_tests/images/style-comp-op/minus.png differ
diff --git a/tests/python_tests/images/style-comp-op/multiply.png b/tests/python_tests/images/style-comp-op/multiply.png
index 8192fd2..28a1f54 100644
Binary files a/tests/python_tests/images/style-comp-op/multiply.png and b/tests/python_tests/images/style-comp-op/multiply.png differ
diff --git a/tests/python_tests/images/style-comp-op/overlay.png b/tests/python_tests/images/style-comp-op/overlay.png
index 1049d59..f227d1c 100644
Binary files a/tests/python_tests/images/style-comp-op/overlay.png and b/tests/python_tests/images/style-comp-op/overlay.png differ
diff --git a/tests/python_tests/images/style-comp-op/plus.png b/tests/python_tests/images/style-comp-op/plus.png
index c6b976a..23effa5 100644
Binary files a/tests/python_tests/images/style-comp-op/plus.png and b/tests/python_tests/images/style-comp-op/plus.png differ
diff --git a/tests/python_tests/images/style-comp-op/saturation.png b/tests/python_tests/images/style-comp-op/saturation.png
index ff8e9e8..4fa0aec 100644
Binary files a/tests/python_tests/images/style-comp-op/saturation.png and b/tests/python_tests/images/style-comp-op/saturation.png differ
diff --git a/tests/python_tests/images/style-comp-op/screen.png b/tests/python_tests/images/style-comp-op/screen.png
index 695237c..b58bc8b 100644
Binary files a/tests/python_tests/images/style-comp-op/screen.png and b/tests/python_tests/images/style-comp-op/screen.png differ
diff --git a/tests/python_tests/images/style-comp-op/soft_light.png b/tests/python_tests/images/style-comp-op/soft_light.png
index 591d463..8eeffe2 100644
Binary files a/tests/python_tests/images/style-comp-op/soft_light.png and b/tests/python_tests/images/style-comp-op/soft_light.png differ
diff --git a/tests/python_tests/images/style-comp-op/src.png b/tests/python_tests/images/style-comp-op/src.png
index 3709914..6e22f73 100644
Binary files a/tests/python_tests/images/style-comp-op/src.png and b/tests/python_tests/images/style-comp-op/src.png differ
diff --git a/tests/python_tests/images/style-comp-op/src_atop.png b/tests/python_tests/images/style-comp-op/src_atop.png
index b2ec9b2..7bc1b5b 100644
Binary files a/tests/python_tests/images/style-comp-op/src_atop.png and b/tests/python_tests/images/style-comp-op/src_atop.png differ
diff --git a/tests/python_tests/images/style-comp-op/src_in.png b/tests/python_tests/images/style-comp-op/src_in.png
index 3709914..6e22f73 100644
Binary files a/tests/python_tests/images/style-comp-op/src_in.png and b/tests/python_tests/images/style-comp-op/src_in.png differ
diff --git a/tests/python_tests/images/style-comp-op/src_over.png b/tests/python_tests/images/style-comp-op/src_over.png
index 667447e..81ff2d4 100644
Binary files a/tests/python_tests/images/style-comp-op/src_over.png and b/tests/python_tests/images/style-comp-op/src_over.png differ
diff --git a/tests/python_tests/images/style-comp-op/value.png b/tests/python_tests/images/style-comp-op/value.png
index 447cb9b..a8ca240 100644
Binary files a/tests/python_tests/images/style-comp-op/value.png and b/tests/python_tests/images/style-comp-op/value.png differ
diff --git a/tests/python_tests/images/style-comp-op/xor.png b/tests/python_tests/images/style-comp-op/xor.png
index d825d01..8d276f6 100644
Binary files a/tests/python_tests/images/style-comp-op/xor.png and b/tests/python_tests/images/style-comp-op/xor.png differ
diff --git a/tests/python_tests/images/style-image-filter/agg-stack-blur22.png b/tests/python_tests/images/style-image-filter/agg-stack-blur22.png
index 69fd5dd..b605053 100644
Binary files a/tests/python_tests/images/style-image-filter/agg-stack-blur22.png and b/tests/python_tests/images/style-image-filter/agg-stack-blur22.png differ
diff --git a/tests/python_tests/images/style-image-filter/blur.png b/tests/python_tests/images/style-image-filter/blur.png
index ddae262..64e8296 100644
Binary files a/tests/python_tests/images/style-image-filter/blur.png and b/tests/python_tests/images/style-image-filter/blur.png differ
diff --git a/tests/python_tests/images/style-image-filter/edge-detect.png b/tests/python_tests/images/style-image-filter/edge-detect.png
index 6a0b962..89b0668 100644
Binary files a/tests/python_tests/images/style-image-filter/edge-detect.png and b/tests/python_tests/images/style-image-filter/edge-detect.png differ
diff --git a/tests/python_tests/images/style-image-filter/emboss.png b/tests/python_tests/images/style-image-filter/emboss.png
index 651511f..f634472 100644
Binary files a/tests/python_tests/images/style-image-filter/emboss.png and b/tests/python_tests/images/style-image-filter/emboss.png differ
diff --git a/tests/python_tests/images/style-image-filter/gray.png b/tests/python_tests/images/style-image-filter/gray.png
index 8328824..36e6df7 100644
Binary files a/tests/python_tests/images/style-image-filter/gray.png and b/tests/python_tests/images/style-image-filter/gray.png differ
diff --git a/tests/python_tests/images/style-image-filter/invert.png b/tests/python_tests/images/style-image-filter/invert.png
index c6da22b..ffc1e03 100644
Binary files a/tests/python_tests/images/style-image-filter/invert.png and b/tests/python_tests/images/style-image-filter/invert.png differ
diff --git a/tests/python_tests/images/style-image-filter/none.png b/tests/python_tests/images/style-image-filter/none.png
index b2d37ac..b745b75 100644
Binary files a/tests/python_tests/images/style-image-filter/none.png and b/tests/python_tests/images/style-image-filter/none.png differ
diff --git a/tests/python_tests/images/style-image-filter/sharpen.png b/tests/python_tests/images/style-image-filter/sharpen.png
index fe04d00..3c11306 100644
Binary files a/tests/python_tests/images/style-image-filter/sharpen.png and b/tests/python_tests/images/style-image-filter/sharpen.png differ
diff --git a/tests/python_tests/images/style-image-filter/sobel.png b/tests/python_tests/images/style-image-filter/sobel.png
index 5b0acaa..281d99a 100644
Binary files a/tests/python_tests/images/style-image-filter/sobel.png and b/tests/python_tests/images/style-image-filter/sobel.png differ
diff --git a/tests/python_tests/images/style-image-filter/x-gradient.png b/tests/python_tests/images/style-image-filter/x-gradient.png
index 4803ce1..fc19f8b 100644
Binary files a/tests/python_tests/images/style-image-filter/x-gradient.png and b/tests/python_tests/images/style-image-filter/x-gradient.png differ
diff --git a/tests/python_tests/images/style-image-filter/y-gradient.png b/tests/python_tests/images/style-image-filter/y-gradient.png
index f9d3141..1d0bbf2 100644
Binary files a/tests/python_tests/images/style-image-filter/y-gradient.png and b/tests/python_tests/images/style-image-filter/y-gradient.png differ
diff --git a/tests/python_tests/images/support/char_placement.png b/tests/python_tests/images/support/char_placement.png
deleted file mode 100644
index 7abcb6f..0000000
Binary files a/tests/python_tests/images/support/char_placement.png and /dev/null differ
diff --git a/tests/python_tests/images/support/displacement.png b/tests/python_tests/images/support/displacement.png
deleted file mode 100644
index 644aeb6..0000000
Binary files a/tests/python_tests/images/support/displacement.png and /dev/null differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png+e=miniz.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png+e=miniz.png
new file mode 100644
index 0000000..4cc101b
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png+t=0.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png+t=0.png
new file mode 100644
index 0000000..b2aa991
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png.png
new file mode 100644
index 0000000..b2aa991
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32+e=miniz.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32+e=miniz.png
new file mode 100644
index 0000000..046b4fc
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32+t=0.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32+t=0.png
new file mode 100644
index 0000000..16481a4
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32.png
new file mode 100644
index 0000000..0f15a35
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png32.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+e=miniz.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+e=miniz.png
new file mode 100644
index 0000000..4cc101b
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+c=1+t=0.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+c=1+t=0.png
new file mode 100644
index 0000000..d6e19b7
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+c=1+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+c=1.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+c=1.png
new file mode 100644
index 0000000..d6e19b7
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+c=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=0.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=0.png
new file mode 100644
index 0000000..b2aa991
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=1.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=1.png
new file mode 100644
index 0000000..b2aa991
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=2.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=2.png
new file mode 100644
index 0000000..b2aa991
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h+t=2.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h.png
new file mode 100644
index 0000000..b2aa991
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=h.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+c=1+t=0.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+c=1+t=0.png
new file mode 100644
index 0000000..ad0aca7
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+c=1+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+c=1.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+c=1.png
new file mode 100644
index 0000000..ad0aca7
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+c=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=0.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=0.png
new file mode 100644
index 0000000..4ab31b6
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=1.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=1.png
new file mode 100644
index 0000000..4ab31b6
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=2.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=2.png
new file mode 100644
index 0000000..4ab31b6
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o+t=2.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o.png b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o.png
new file mode 100644
index 0000000..4ab31b6
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-png8+m=o.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha=false.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha=false.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha=false.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_compression=0.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_compression=0.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_compression=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_filtering=2.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_filtering=2.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_filtering=2.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_quality=50.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_quality=50.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+alpha_quality=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+autofilter=0.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+autofilter=0.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+autofilter=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_sharpness=4.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_sharpness=4.webp
new file mode 100644
index 0000000..f29a97e
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_sharpness=4.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_strength=50.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_strength=50.webp
new file mode 100644
index 0000000..87c1fe6
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_strength=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_type=1+autofilter=1.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_type=1+autofilter=1.webp
new file mode 100644
index 0000000..752148d
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+filter_type=1+autofilter=1.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+method=0.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+method=0.webp
new file mode 100644
index 0000000..9235d1f
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+method=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+method=6.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+method=6.webp
new file mode 100644
index 0000000..d0c8206
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+method=6.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+partition_limit=50.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+partition_limit=50.webp
new file mode 100644
index 0000000..837ff3b
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+partition_limit=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+partitions=3.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+partitions=3.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+partitions=3.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+pass=10.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+pass=10.webp
new file mode 100644
index 0000000..7d71893
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+pass=10.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+preprocessing=1.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+preprocessing=1.webp
new file mode 100644
index 0000000..f5e64b7
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+preprocessing=1.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+quality=64.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+quality=64.webp
new file mode 100644
index 0000000..efd13ad
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+quality=64.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+segments=3.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+segments=3.webp
new file mode 100644
index 0000000..967cc57
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+segments=3.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+sns_strength=50.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+sns_strength=50.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+sns_strength=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+target_PSNR=.5.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+target_PSNR=.5.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+target_PSNR=.5.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+target_size=100.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+target_size=100.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp+target_size=100.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp.webp b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp.webp
new file mode 100644
index 0000000..f2a3cfa
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/aerial_rgba-webp.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png+e=miniz.png b/tests/python_tests/images/support/encoding-opts/blank-png+e=miniz.png
new file mode 100644
index 0000000..334ffe5
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-png+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png+t=0.png b/tests/python_tests/images/support/encoding-opts/blank-png+t=0.png
index 21fffbf..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png+t=0.png and b/tests/python_tests/images/support/encoding-opts/blank-png+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png.png b/tests/python_tests/images/support/encoding-opts/blank-png.png
index 4fe9ab3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png.png and b/tests/python_tests/images/support/encoding-opts/blank-png.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png32+e=miniz.png b/tests/python_tests/images/support/encoding-opts/blank-png32+e=miniz.png
new file mode 100644
index 0000000..8708c32
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-png32+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png32+t=0.png b/tests/python_tests/images/support/encoding-opts/blank-png32+t=0.png
new file mode 100644
index 0000000..50e3890
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-png32+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png32.png b/tests/python_tests/images/support/encoding-opts/blank-png32.png
new file mode 100644
index 0000000..04469ac
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-png32.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+e=miniz.png b/tests/python_tests/images/support/encoding-opts/blank-png8+e=miniz.png
new file mode 100644
index 0000000..334ffe5
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-png8+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1+t=0.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1+t=0.png
index 0d7dee0..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1+t=0.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=0.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=0.png
index 0d7dee0..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=0.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=1.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=1.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=1.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=2.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=2.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=2.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+t=2.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=h.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1+t=0.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1+t=0.png
index 0d7dee0..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1+t=0.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+c=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=0.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=0.png
index 0d7dee0..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=0.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=1.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=1.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=1.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=1.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=2.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=2.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=2.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o+t=2.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o.png b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o.png
index a4c4de3..49c789a 100644
Binary files a/tests/python_tests/images/support/encoding-opts/blank-png8+m=o.png and b/tests/python_tests/images/support/encoding-opts/blank-png8+m=o.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+alpha=false.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha=false.webp
new file mode 100644
index 0000000..da95b42
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha=false.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_compression=0.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_compression=0.webp
new file mode 100644
index 0000000..2e264d4
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_compression=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_filtering=2.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_filtering=2.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_filtering=2.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_quality=50.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_quality=50.webp
new file mode 100644
index 0000000..ca054c5
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+alpha_quality=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+autofilter=0.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+autofilter=0.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+autofilter=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+filter_sharpness=4.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+filter_sharpness=4.webp
new file mode 100644
index 0000000..b354377
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+filter_sharpness=4.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+filter_strength=50.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+filter_strength=50.webp
new file mode 100644
index 0000000..02bd501
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+filter_strength=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+filter_type=1+autofilter=1.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+filter_type=1+autofilter=1.webp
new file mode 100644
index 0000000..e090422
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+filter_type=1+autofilter=1.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+method=0.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+method=0.webp
new file mode 100644
index 0000000..61a6b2c
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+method=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+method=6.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+method=6.webp
new file mode 100644
index 0000000..cb9388b
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+method=6.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+partition_limit=50.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+partition_limit=50.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+partition_limit=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+partitions=3.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+partitions=3.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+partitions=3.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+pass=10.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+pass=10.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+pass=10.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+preprocessing=1.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+preprocessing=1.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+preprocessing=1.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+quality=64.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+quality=64.webp
new file mode 100644
index 0000000..f201c07
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+quality=64.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+segments=3.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+segments=3.webp
new file mode 100644
index 0000000..f9c9b4a
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+segments=3.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+sns_strength=50.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+sns_strength=50.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+sns_strength=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+target_PSNR=.5.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+target_PSNR=.5.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+target_PSNR=.5.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp+target_size=100.webp b/tests/python_tests/images/support/encoding-opts/blank-webp+target_size=100.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp+target_size=100.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-webp.webp b/tests/python_tests/images/support/encoding-opts/blank-webp.webp
new file mode 100644
index 0000000..5322827
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/blank-webp.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-png+e=miniz.png b/tests/python_tests/images/support/encoding-opts/solid-png+e=miniz.png
new file mode 100644
index 0000000..c3e5db4
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-png+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-png+t=0.png b/tests/python_tests/images/support/encoding-opts/solid-png+t=0.png
index 21fffbf..0d7dee0 100644
Binary files a/tests/python_tests/images/support/encoding-opts/solid-png+t=0.png and b/tests/python_tests/images/support/encoding-opts/solid-png+t=0.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-png.png b/tests/python_tests/images/support/encoding-opts/solid-png.png
index 4fe9ab3..a4c4de3 100644
Binary files a/tests/python_tests/images/support/encoding-opts/solid-png.png and b/tests/python_tests/images/support/encoding-opts/solid-png.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-png32+e=miniz.png b/tests/python_tests/images/support/encoding-opts/solid-png32+e=miniz.png
new file mode 100644
index 0000000..f155fce
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-png32+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png+t=0.png b/tests/python_tests/images/support/encoding-opts/solid-png32+t=0.png
similarity index 100%
copy from tests/python_tests/images/support/encoding-opts/blank-png+t=0.png
copy to tests/python_tests/images/support/encoding-opts/solid-png32+t=0.png
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png.png b/tests/python_tests/images/support/encoding-opts/solid-png32.png
similarity index 100%
copy from tests/python_tests/images/support/encoding-opts/blank-png.png
copy to tests/python_tests/images/support/encoding-opts/solid-png32.png
diff --git a/tests/python_tests/images/support/encoding-opts/solid-png8+e=miniz.png b/tests/python_tests/images/support/encoding-opts/solid-png8+e=miniz.png
new file mode 100644
index 0000000..c3e5db4
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-png8+e=miniz.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+alpha=false.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha=false.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha=false.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_compression=0.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_compression=0.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_compression=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_filtering=2.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_filtering=2.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_filtering=2.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_quality=50.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_quality=50.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+alpha_quality=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+autofilter=0.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+autofilter=0.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+autofilter=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+filter_sharpness=4.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+filter_sharpness=4.webp
new file mode 100644
index 0000000..1eadaa1
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+filter_sharpness=4.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+filter_strength=50.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+filter_strength=50.webp
new file mode 100644
index 0000000..621e6cc
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+filter_strength=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+filter_type=1+autofilter=1.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+filter_type=1+autofilter=1.webp
new file mode 100644
index 0000000..1372321
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+filter_type=1+autofilter=1.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+method=0.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+method=0.webp
new file mode 100644
index 0000000..15f58ff
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+method=0.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+method=6.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+method=6.webp
new file mode 100644
index 0000000..5a76594
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+method=6.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+partition_limit=50.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+partition_limit=50.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+partition_limit=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+partitions=3.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+partitions=3.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+partitions=3.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+pass=10.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+pass=10.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+pass=10.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+preprocessing=1.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+preprocessing=1.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+preprocessing=1.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+quality=64.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+quality=64.webp
new file mode 100644
index 0000000..fba30ff
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+quality=64.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+segments=3.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+segments=3.webp
new file mode 100644
index 0000000..84ba1a8
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+segments=3.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+sns_strength=50.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+sns_strength=50.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+sns_strength=50.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+target_PSNR=.5.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+target_PSNR=.5.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+target_PSNR=.5.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp+target_size=100.webp b/tests/python_tests/images/support/encoding-opts/solid-webp+target_size=100.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp+target_size=100.webp differ
diff --git a/tests/python_tests/images/support/encoding-opts/solid-webp.webp b/tests/python_tests/images/support/encoding-opts/solid-webp.webp
new file mode 100644
index 0000000..cbd85ab
Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/solid-webp.webp differ
diff --git a/tests/python_tests/images/support/mapnik-layer-buffer-size.png b/tests/python_tests/images/support/mapnik-layer-buffer-size.png
index 6d53eec..f1de74a 100644
Binary files a/tests/python_tests/images/support/mapnik-layer-buffer-size.png and b/tests/python_tests/images/support/mapnik-layer-buffer-size.png differ
diff --git a/tests/python_tests/images/support/mapnik-marker-ellipse-render1.png b/tests/python_tests/images/support/mapnik-marker-ellipse-render1.png
index b6563eb..254f811 100644
Binary files a/tests/python_tests/images/support/mapnik-marker-ellipse-render1.png and b/tests/python_tests/images/support/mapnik-marker-ellipse-render1.png differ
diff --git a/tests/python_tests/images/support/mapnik-marker-ellipse-render2.png b/tests/python_tests/images/support/mapnik-marker-ellipse-render2.png
index 4479d5c..c2cd876 100644
Binary files a/tests/python_tests/images/support/mapnik-marker-ellipse-render2.png and b/tests/python_tests/images/support/mapnik-marker-ellipse-render2.png differ
diff --git a/tests/python_tests/images/support/mapnik-merc2wgs84-reprojection-render.png b/tests/python_tests/images/support/mapnik-merc2wgs84-reprojection-render.png
index b7da9db..55995d5 100644
Binary files a/tests/python_tests/images/support/mapnik-merc2wgs84-reprojection-render.png and b/tests/python_tests/images/support/mapnik-merc2wgs84-reprojection-render.png differ
diff --git a/tests/python_tests/images/support/mapnik-wgs842merc-reprojection-render.png b/tests/python_tests/images/support/mapnik-wgs842merc-reprojection-render.png
index 6a80949..6fc5f12 100644
Binary files a/tests/python_tests/images/support/mapnik-wgs842merc-reprojection-render.png and b/tests/python_tests/images/support/mapnik-wgs842merc-reprojection-render.png differ
diff --git a/tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1.png b/tests/python_tests/images/support/marker-in-center-not-placed.png
similarity index 100%
copy from tests/python_tests/images/support/encoding-opts/blank-png8+m=h+c=1.png
copy to tests/python_tests/images/support/marker-in-center-not-placed.png
diff --git a/tests/python_tests/images/support/marker-in-center.png b/tests/python_tests/images/support/marker-in-center.png
new file mode 100644
index 0000000..7845d4f
Binary files /dev/null and b/tests/python_tests/images/support/marker-in-center.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-0.005.png b/tests/python_tests/images/support/marker-text-line-scale-factor-0.005.png
index 5f548b1..ea97490 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-0.005.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-0.005.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-0.1.png b/tests/python_tests/images/support/marker-text-line-scale-factor-0.1.png
index dceeddc..0af26d7 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-0.1.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-0.1.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-0.899.png b/tests/python_tests/images/support/marker-text-line-scale-factor-0.899.png
index 1b679d7..a31b886 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-0.899.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-0.899.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-1.5.png b/tests/python_tests/images/support/marker-text-line-scale-factor-1.5.png
index faf9b69..33b2751 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-1.5.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-1.5.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-1.png b/tests/python_tests/images/support/marker-text-line-scale-factor-1.png
index 90edb15..07c1065 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-1.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-1.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-10.png b/tests/python_tests/images/support/marker-text-line-scale-factor-10.png
index b40f517..ffdfad1 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-10.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-10.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-100.png b/tests/python_tests/images/support/marker-text-line-scale-factor-100.png
index 0d7dee0..c5828b5 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-100.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-100.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-1e-05.png b/tests/python_tests/images/support/marker-text-line-scale-factor-1e-05.png
index 79fd8af..0f36830 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-1e-05.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-1e-05.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-2.png b/tests/python_tests/images/support/marker-text-line-scale-factor-2.png
index b43ec25..25217e4 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-2.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-2.png differ
diff --git a/tests/python_tests/images/support/marker-text-line-scale-factor-5.png b/tests/python_tests/images/support/marker-text-line-scale-factor-5.png
index 2a88268..a6c4c1e 100644
Binary files a/tests/python_tests/images/support/marker-text-line-scale-factor-5.png and b/tests/python_tests/images/support/marker-text-line-scale-factor-5.png differ
diff --git a/tests/python_tests/images/support/overlap.png b/tests/python_tests/images/support/overlap.png
deleted file mode 100644
index 56abfba..0000000
Binary files a/tests/python_tests/images/support/overlap.png and /dev/null differ
diff --git a/tests/python_tests/images/support/tif_colortable.png b/tests/python_tests/images/support/tif_colortable.png
deleted file mode 100644
index aa055bb..0000000
Binary files a/tests/python_tests/images/support/tif_colortable.png and /dev/null differ
diff --git a/tests/python_tests/images/support/transparency/white0.webp b/tests/python_tests/images/support/transparency/white0.webp
new file mode 100644
index 0000000..a370626
Binary files /dev/null and b/tests/python_tests/images/support/transparency/white0.webp differ
diff --git a/tests/python_tests/images/support/vrt_colortable.png b/tests/python_tests/images/support/vrt_colortable.png
deleted file mode 100644
index f885c68..0000000
Binary files a/tests/python_tests/images/support/vrt_colortable.png and /dev/null differ
diff --git a/tests/python_tests/introspection_test.py b/tests/python_tests/introspection_test.py
index 66665da..6fbbbb7 100644
--- a/tests/python_tests/introspection_test.py
+++ b/tests/python_tests/introspection_test.py
@@ -13,7 +13,8 @@ def setup():
 
 def test_introspect_symbolizers():
     # create a symbolizer
-    p = mapnik.PointSymbolizer(mapnik.PathExpression("../data/images/dummy.png"))
+    p = mapnik.PointSymbolizer()
+    p.file = "../data/images/dummy.png"
     p.allow_overlap = True
     p.opacity = 0.5
 
@@ -48,24 +49,13 @@ def test_introspect_symbolizers():
 
     ## TODO here, we can do...
     sym = syms[0]
-    # this is hackish at best
-    p2 = sym.symbol()
+    p2 = sym.extract()
     assert isinstance(p2,mapnik.PointSymbolizer)
 
     eq_(p2.allow_overlap, True)
     eq_(p2.opacity, 0.5)
     eq_(p2.filename,'../data/images/dummy.png')
 
-    ## but we need to be able to do:
-    p2 = syms[0] # get the actual symbolizer, not the variant object
-    # this will throw for now...
-    assert isinstance(p2,mapnik.PointSymbolizer)
-
-    eq_(p2.allow_overlap, True)
-    eq_(p2.opacity, 0.5)
-    eq_(p2.filename,'../data/images/dummy.png')
-
-
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/json_feature_properties_test.py b/tests/python_tests/json_feature_properties_test.py
index d245297..25c6a8c 100644
--- a/tests/python_tests/json_feature_properties_test.py
+++ b/tests/python_tests/json_feature_properties_test.py
@@ -100,4 +100,4 @@ def test_char_escaping():
         eq_(pyjson['properties']['name'],expected)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/layer_buffer_size_test.py b/tests/python_tests/layer_buffer_size_test.py
index 164f6ba..3916c92 100644
--- a/tests/python_tests/layer_buffer_size_test.py
+++ b/tests/python_tests/layer_buffer_size_test.py
@@ -25,11 +25,11 @@ if 'sqlite' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-layer-buffer-size.png'
         expected = 'images/support/mapnik-layer-buffer-size.png'
-        im.save(actual)
+        im.save(actual,"png32")
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/layer_modification_test.py b/tests/python_tests/layer_modification_test.py
index ec13fc7..2903143 100644
--- a/tests/python_tests/layer_modification_test.py
+++ b/tests/python_tests/layer_modification_test.py
@@ -72,4 +72,4 @@ def test_adding_datasource_to_layer():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/layer_test.py b/tests/python_tests/layer_test.py
index 1a779aa..1a11c0f 100644
--- a/tests/python_tests/layer_test.py
+++ b/tests/python_tests/layer_test.py
@@ -25,4 +25,4 @@ def test_layer_init():
     eq_(len(l.styles),0)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/load_map_test.py b/tests/python_tests/load_map_test.py
index f440528..106981d 100644
--- a/tests/python_tests/load_map_test.py
+++ b/tests/python_tests/load_map_test.py
@@ -5,11 +5,19 @@ from utilities import execution_path, run_all
 
 import os, sys, glob, mapnik
 
+default_logging_severity = mapnik.logger.get_severity()
+
 def setup():
+    # make the tests silent to suppress unsupported params from harfbuzz tests
+    # TODO: remove this after harfbuzz branch merges
+    mapnik.logger.set_severity(mapnik.severity_type.None)
     # All of the paths used are relative, if we run the tests
     # from another directory we need to chdir()
     os.chdir(execution_path('.'))
 
+def teardown():
+    mapnik.logger.set_severity(default_logging_severity)
+
 def test_broken_files():
     default_logging_severity = mapnik.logger.get_severity()
     mapnik.logger.set_severity(mapnik.severity_type.None)
@@ -31,6 +39,7 @@ def test_broken_files():
 
 def test_good_files():
     good_files = glob.glob("../data/good_maps/*.xml")
+    good_files.extend(glob.glob("../visual_tests/styles/*.xml"))
 
     failures = [];
     for filename in good_files:
@@ -42,10 +51,11 @@ def test_good_files():
             mapnik.load_map_from_string(m,open(filename,'rb').read(),strict,base_path)
         except RuntimeError, e:
             # only test datasources that we have installed
-            if not 'Could not create datasource' in str(e):
-                failures.append('Failed to load valid map (%s)!' % filename)
+            if not 'Could not create datasource' in str(e) \
+               and not 'Bad connection' in str(e):
+                failures.append('Failed to load valid map %s (%s)' % (filename,e))
     eq_(len(failures),0,'\n'+'\n'.join(failures))
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/map_deepcopy_test.py b/tests/python_tests/map_deepcopy_test.py
deleted file mode 100644
index d4386b4..0000000
--- a/tests/python_tests/map_deepcopy_test.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-from nose.tools import *
-from utilities import execution_path, run_all
-from copy import deepcopy
-
-import os, mapnik
-
-def setup():
-    # All of the paths used are relative, if we run the tests
-    # from another directory we need to chdir()
-    os.chdir(execution_path('.'))
-
-
-#def test_map_deepcopy1():
-#    m1 = mapnik.Map(256,256)
-#    m1.append_style('style',mapnik.Style())
-#    m1.append_fontset('fontset',mapnik.FontSet())
-#    m2 = deepcopy(m1)
-#    eq_(m2.width, m1.width)
-#    eq_(m2.height, m2.height)
-#    eq_(m2.srs, m1.srs)
-#    eq_(m2.base, m1.base)
-#    eq_(m2.background, m1.background)
-#    eq_(m2.buffer_size, m1.buffer_size)
-#    eq_(m2.aspect_fix_mode, m1.aspect_fix_mode)
-#    eq_(m2.envelope(),m1.envelope())
-#    eq_(m2.buffered_envelope(),m1.buffered_envelope())
-#    eq_(m2.scale(),m1.scale())
-#    eq_(m2.scale_denominator(),m1.scale_denominator())
-#    eq_(m2.maximum_extent,m1.maximum_extent)
-#    eq_(id(m2.view_transform()),id(m1.view_transform()))
-#    eq_(id(m2.parameters),id(m1.parameters))
-#    eq_(id(m2.layers),id(m1.layers))
-#    eq_(id(m2.layers),id(m1.layers))
-#    eq_(id(m2.find_fontset('fontset')),id(m2.find_fontset('fontset')))
-#    # fails for some reason on linux (not osx)
-#    # but non-critical for now
-#    #eq_(id(m2.find_style('style')),id(m2.find_style('style')))
-
-if __name__ == "__main__":
-    setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
diff --git a/tests/python_tests/map_query_test.py b/tests/python_tests/map_query_test.py
index 8181bb8..e01407e 100644
--- a/tests/python_tests/map_query_test.py
+++ b/tests/python_tests/map_query_test.py
@@ -63,7 +63,11 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
         m.zoom_all()
         #mapnik.render_to_file(m,'works2.png')
         # validate that aspect_fix_mode modified the bbox reasonably
-        eq_(str(m.envelope()),str(mapnik.Box2d(-179.999999975,-167.951396161,179.999999975,192.048603789)))
+        e = m.envelope()
+        assert_almost_equal(e.minx, -179.999999975, places=7)
+        assert_almost_equal(e.miny, -167.951396161, places=7)
+        assert_almost_equal(e.maxx, 179.999999975, places=7)
+        assert_almost_equal(e.maxy, 192.048603789, places=7)
         fs = m.query_point(0,-98.9264, 38.1432) # somewhere in kansas
         feat = fs.next()
         eq_(feat.attributes['NAME'],u'United States')
@@ -86,11 +90,15 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
         # caution - will go square due to evil aspect_fix_mode backhandedness
         m.zoom_all()
         # validate that aspect_fix_mode modified the bbox reasonably
-        eq_(str(m.envelope()),str(mapnik.Box2d(-179.999999975,-167.951396161,179.999999975,192.048603789)))
+        e = m.envelope()
+        assert_almost_equal(e.minx, -179.999999975, places=7)
+        assert_almost_equal(e.miny, -167.951396161, places=7)
+        assert_almost_equal(e.maxx, 179.999999975, places=7)
+        assert_almost_equal(e.maxy, 192.048603789, places=7)
         fs = m.query_map_point(0,55,100) # somewhere in Canada
         feat = fs.next()
         eq_(feat.attributes['NAME'],u'Canada')
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/mapnik_config_test.py b/tests/python_tests/mapnik_config_test.py
index 8608299..d49a8ba 100644
--- a/tests/python_tests/mapnik_config_test.py
+++ b/tests/python_tests/mapnik_config_test.py
@@ -10,21 +10,21 @@ import os, sys, glob, mapnik
 def test_mapnik_config_no_args():
     process = Popen('mapnik-config', shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
     result = process.communicate()
-    eq_('Usage: mapnik-config ' in result[0],True)
+    eq_('Usage: mapnik-config' in result[0],True)
     eq_(result[1],'')
     eq_(process.returncode,1)
 
 def test_mapnik_config_help():
     process = Popen('mapnik-config --help', shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
     result = process.communicate()
-    eq_('Usage: mapnik-config ' in result[0],True)
+    eq_('Usage: mapnik-config' in result[0],True)
     eq_(result[1],'')
     eq_(process.returncode,0)
 
 def test_mapnik_config_help_short():
     process = Popen('mapnik-config -h', shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
     result = process.communicate()
-    eq_('Usage: mapnik-config ' in result[0],True)
+    eq_('Usage: mapnik-config' in result[0],True)
     eq_(result[1],'')
     eq_(process.returncode,0)
 
@@ -77,4 +77,4 @@ def test_mapnik_config_valid_and_invalid_option():
     eq_(process.returncode,0)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/mapnik_logger_test.py b/tests/python_tests/mapnik_logger_test.py
index 0bfbf45..da338ee 100644
--- a/tests/python_tests/mapnik_logger_test.py
+++ b/tests/python_tests/mapnik_logger_test.py
@@ -15,4 +15,4 @@ def test_logger_init():
     eq_(mapnik.logger.get_severity(),default)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/mapnik_test_data_test.py b/tests/python_tests/mapnik_test_data_test.py
new file mode 100644
index 0000000..df0b837
--- /dev/null
+++ b/tests/python_tests/mapnik_test_data_test.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from nose.tools import *
+from utilities import execution_path, run_all
+import os, mapnik
+from glob import glob
+
+default_logging_severity = mapnik.logger.get_severity()
+
+def setup():
+    mapnik.logger.set_severity(mapnik.severity_type.None)
+    # All of the paths used are relative, if we run the tests
+    # from another directory we need to chdir()
+    os.chdir(execution_path('.'))
+
+def teardown():
+    mapnik.logger.set_severity(default_logging_severity)
+
+plugin_mapping = {
+    '.csv' : ['csv'],
+    '.json': ['geojson','ogr'],
+    '.tif' : ['gdal'],
+    #'.tif' : ['gdal','raster'],
+    '.kml' : ['ogr'],
+    '.gpx' : ['ogr'],
+    '.vrt' : ['gdal']
+}
+
+def test_opening_data():
+    # https://github.com/mapbox/mapnik-test-data
+    # cd tests/data
+    # git clone --depth 1 https://github.com/mapbox/mapnik-test-data
+    if os.path.exists('../data/mapnik-test-data/'):
+        files = glob('../data/mapnik-test-data/data/*/*.*')
+        for filepath in files:
+            ext = os.path.splitext(filepath)[1]
+            if plugin_mapping.get(ext):
+                #print 'testing opening %s' % filepath
+                if 'topo' in filepath:
+                    kwargs = {'type': 'ogr','file': filepath}
+                    kwargs['layer_by_index'] = 0
+                    try:
+                        ds = mapnik.Datasource(**kwargs)
+                    except Exception, e:
+                        print 'could not open, %s: %s' % (kwargs,e)
+                else:
+                   for plugin in plugin_mapping[ext]:
+                      kwargs = {'type': plugin,'file': filepath}
+                      if plugin is 'ogr':
+                          kwargs['layer_by_index'] = 0
+                      try:
+                          ds = mapnik.Datasource(**kwargs)
+                      except Exception, e:
+                          print 'could not open, %s: %s' % (kwargs,e)
+            #else:
+            #    print 'skipping opening %s' % filepath
+
+if __name__ == "__main__":
+    setup()
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/markers_complex_rendering_test.py b/tests/python_tests/markers_complex_rendering_test.py
index c8e6c82..f66277f 100644
--- a/tests/python_tests/markers_complex_rendering_test.py
+++ b/tests/python_tests/markers_complex_rendering_test.py
@@ -18,9 +18,9 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-marker-ellipse-render1.png'
         expected = 'images/support/mapnik-marker-ellipse-render1.png'
-        im.save(actual)
+        im.save(actual,'png32')
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
     def test_marker_ellipse_render2():
         # currently crashes https://github.com/mapnik/mapnik/issues/1365
@@ -31,10 +31,10 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-marker-ellipse-render2.png'
         expected = 'images/support/mapnik-marker-ellipse-render2.png'
-        im.save(actual)
+        im.save(actual,'png32')
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/memory_datasource_test.py b/tests/python_tests/memory_datasource_test.py
index 9ba3173..c2791bf 100644
--- a/tests/python_tests/memory_datasource_test.py
+++ b/tests/python_tests/memory_datasource_test.py
@@ -31,4 +31,4 @@ def test_add_feature():
     eq_(len(retrieved), 0)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/multi_tile_raster_test.py b/tests/python_tests/multi_tile_raster_test.py
index ad15db7..5ecb46e 100644
--- a/tests/python_tests/multi_tile_raster_test.py
+++ b/tests/python_tests/multi_tile_raster_test.py
@@ -65,4 +65,4 @@ def test_multi_tile_policy():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/object_test.py b/tests/python_tests/object_test.py
index 20ff567..0f23e71 100644
--- a/tests/python_tests/object_test.py
+++ b/tests/python_tests/object_test.py
@@ -1,567 +1,569 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import os
-from nose.tools import *
-from utilities import execution_path, run_all
-import tempfile
-
-import mapnik
-
-def setup():
-    # All of the paths used are relative, if we run the tests
-    # from another directory we need to chdir()
-    os.chdir(execution_path('.'))
-
-def test_debug_symbolizer():
-    s = mapnik.DebugSymbolizer()
-    eq_(s.mode,mapnik.debug_symbolizer_mode.collision)
-
-def test_raster_symbolizer():
-    s = mapnik.RasterSymbolizer()
-    eq_(s.comp_op,mapnik.CompositeOp.src_over) # note: mode is deprecated
-    eq_(s.scaling,mapnik.scaling_method.NEAR)
-    eq_(s.opacity,1.0)
-    eq_(s.colorizer,None)
-    eq_(s.filter_factor,-1)
-    eq_(s.mesh_size,16)
-    eq_(s.premultiplied,None)
-    s.premultiplied = True
-    eq_(s.premultiplied,True)
-
-def test_line_pattern():
-    s = mapnik.LinePatternSymbolizer(mapnik.PathExpression('../data/images/dummy.png'))
-    eq_(s.filename, '../data/images/dummy.png')
-    eq_(s.smooth,0.0)
-    eq_(s.transform,'')
-    eq_(s.comp_op,mapnik.CompositeOp.src_over)
-    eq_(s.clip,True)
-
-def test_line_symbolizer():
-    s = mapnik.LineSymbolizer()
-    eq_(s.rasterizer, mapnik.line_rasterizer.FULL)
-    eq_(s.smooth,0.0)
-    eq_(s.comp_op,mapnik.CompositeOp.src_over)
-    eq_(s.clip,True)
-    eq_(s.stroke.width, 1)
-    eq_(s.stroke.opacity, 1)
-    eq_(s.stroke.color, mapnik.Color('black'))
-    eq_(s.stroke.line_cap, mapnik.line_cap.BUTT_CAP)
-    eq_(s.stroke.line_join, mapnik.line_join.MITER_JOIN)
-
-    l = mapnik.LineSymbolizer(mapnik.Color('blue'), 5.0)
-
-    eq_(l.stroke.width, 5)
-    eq_(l.stroke.opacity, 1)
-    eq_(l.stroke.color, mapnik.Color('blue'))
-    eq_(l.stroke.line_cap, mapnik.line_cap.BUTT_CAP)
-    eq_(l.stroke.line_join, mapnik.line_join.MITER_JOIN)
-
-    s = mapnik.Stroke(mapnik.Color('blue'), 5.0)
-    l = mapnik.LineSymbolizer(s)
-
-    eq_(l.stroke.width, 5)
-    eq_(l.stroke.opacity, 1)
-    eq_(l.stroke.color, mapnik.Color('blue'))
-    eq_(l.stroke.line_cap, mapnik.line_cap.BUTT_CAP)
-    eq_(l.stroke.line_join, mapnik.line_join.MITER_JOIN)
-
-def test_line_symbolizer_stroke_reference():
-    l = mapnik.LineSymbolizer(mapnik.Color('green'),0.1)
-    l.stroke.add_dash(.1,.1)
-    l.stroke.add_dash(.1,.1)
-    eq_(l.stroke.get_dashes(), [(.1,.1),(.1,.1)])
-    eq_(l.stroke.color,mapnik.Color('green'))
-    eq_(l.stroke.opacity,1.0)
-    assert_almost_equal(l.stroke.width,0.1)
-
-# https://github.com/mapnik/mapnik/issues/1427
-def test_stroke_dash_api():
-    stroke = mapnik.Stroke()
-    dashes = [(1.0,1.0)]
-    stroke.dasharray = dashes
-    eq_(stroke.dasharray, dashes)
-    stroke.add_dash(.1,.1)
-    dashes.append((.1,.1))
-    eq_(stroke.dasharray, dashes)
-
-
-def test_text_symbolizer():
-    s = mapnik.TextSymbolizer()
-    eq_(s.comp_op,mapnik.CompositeOp.src_over)
-    eq_(s.clip,True)
-    eq_(s.halo_rasterizer,mapnik.halo_rasterizer.FULL)
-
-    # https://github.com/mapnik/mapnik/issues/1420
-    eq_(s.text_transform, mapnik.text_transform.NONE)
-
-    # https://github.com/mapnik/mapnik/issues/1427
-    eq_(s.wrap_char,ord(' '))
-    eq_(s.wrap_character,ord(' '))
-    s.wrap_char = ord('\n')
-    eq_(s.wrap_char,ord('\n'))
-    eq_(s.wrap_character,ord('\n'))
-    eq_(s.format.wrap_character,ord('\n'))
-    s.wrap_character = ord('\r')
-    eq_(s.wrap_char,ord('\r'))
-    eq_(s.wrap_character,ord('\r'))
-    eq_(s.format.wrap_character,ord('\r'))
-    s.format.wrap_character = ord(' ')
-    eq_(s.wrap_char,ord(' '))
-    eq_(s.wrap_character,ord(' '))
-    eq_(s.format.wrap_character,ord(' '))
-
-    # old args required method
-    ts = mapnik.TextSymbolizer(mapnik.Expression('[Field_Name]'), 'Font Name', 8, mapnik.Color('black'))
-#    eq_(str(ts.name), str(mapnik2.Expression('[Field_Name]'))) name field is no longer supported
-    eq_(ts.format.face_name, 'Font Name')
-    eq_(ts.format.text_size, 8)
-    eq_(ts.format.fill, mapnik.Color('black'))
-    eq_(ts.properties.label_placement, mapnik.label_placement.POINT_PLACEMENT)
-    eq_(ts.properties.horizontal_alignment, mapnik.horizontal_alignment.AUTO)
-
-def test_shield_symbolizer_init():
-    s = mapnik.ShieldSymbolizer(mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6, mapnik.Color('#000000'), mapnik.PathExpression('../data/images/dummy.png'))
-    eq_(s.comp_op,mapnik.CompositeOp.src_over)
-    eq_(s.clip,True)
-    eq_(s.displacement, (0.0,0.0))
-    eq_(s.allow_overlap, False)
-    eq_(s.avoid_edges, False)
-    eq_(s.character_spacing,0)
-    #eq_(str(s.name), str(mapnik2.Expression('[Field Name]'))) name field is no longer supported
-    eq_(s.face_name, 'DejaVu Sans Bold')
-    eq_(s.allow_overlap, False)
-    eq_(s.fill, mapnik.Color('#000000'))
-    eq_(s.force_odd_labels, False)
-    eq_(s.halo_fill, mapnik.Color('rgb(255,255,255)'))
-    eq_(s.halo_radius, 0)
-    eq_(s.label_placement, mapnik.label_placement.POINT_PLACEMENT)
-    eq_(s.minimum_distance, 0.0)
-    eq_(s.text_ratio, 0)
-    eq_(s.text_size, 6)
-    eq_(s.wrap_width, 0)
-    eq_(s.vertical_alignment, mapnik.vertical_alignment.AUTO)
-    eq_(s.label_spacing, 0)
-    eq_(s.label_position_tolerance, 0)
-    # 22.5 * M_PI/180.0 initialized by default
-    assert_almost_equal(s.max_char_angle_delta, 0.39269908169872414)
-
-    eq_(s.wrap_character, ' ')
-    eq_(s.text_transform, mapnik.text_transform.NONE)
-    eq_(s.line_spacing, 0)
-    eq_(s.character_spacing, 0)
-
-    # r1341
-    eq_(s.wrap_before, False)
-    eq_(s.horizontal_alignment, mapnik.horizontal_alignment.AUTO)
-    eq_(s.justify_alignment, mapnik.justify_alignment.AUTO)
-    eq_(s.opacity, 1.0)
-
-    # r2300
-    eq_(s.minimum_padding, 0.0)
-
-    # was mixed with s.opacity
-    eq_(s.text_opacity, 1.0)
-
-    eq_(s.shield_displacement, (0.0,0.0))
-    # TODO - the pattern in bindings seems to be to get/set
-    # strings for PathExpressions... should we pass objects?
-    eq_(s.filename, '../data/images/dummy.png')
-
-    # 11c34b1: default transform list is empty, not identity matrix
-    eq_(s.transform, '')
-
-    eq_(s.fontset, None)
-
-# ShieldSymbolizer missing image file
-# images paths are now PathExpressions are evaluated at runtime
-# so it does not make sense to throw...
-#@raises(RuntimeError)
-#def test_shieldsymbolizer_missing_image():
-#    s = mapnik.ShieldSymbolizer(mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6, mapnik.Color('#000000'), mapnik.PathExpression('../#data/images/broken.png'))
-
-def test_shield_symbolizer_modify():
-    s = mapnik.ShieldSymbolizer(mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6, mapnik.Color('#000000'), mapnik.PathExpression('../data/images/dummy.png'))
-    # transform expression
-    def check_transform(expr, expect_str=None):
-        s.transform = expr
-        eq_(s.transform, expr if expect_str is None else expect_str)
-    check_transform("matrix(1 2 3 4 5 6)", "matrix(1, 2, 3, 4, 5, 6)")
-    check_transform("matrix(1, 2, 3, 4, 5, 6 +7)", "matrix(1, 2, 3, 4, 5, (6+7))")
-    check_transform("rotate([a])")
-    check_transform("rotate([a] -2)", "rotate(([a]-2))")
-    check_transform("rotate([a] -2 -3)", "rotate([a], -2, -3)")
-    check_transform("rotate([a] -2 -3 -4)", "rotate(((([a]-2)-3)-4))")
-    check_transform("rotate([a] -2, 3, 4)", "rotate(([a]-2), 3, 4)")
-    check_transform("translate([tx]) rotate([a])")
-    check_transform("scale([sx], [sy]/2)")
-    # TODO check expected failures
-
-def test_point_symbolizer():
-    p = mapnik.PointSymbolizer()
-    eq_(p.filename,'')
-    eq_(p.transform,'')
-    eq_(p.opacity,1.0)
-    eq_(p.allow_overlap,False)
-    eq_(p.ignore_placement,False)
-    eq_(p.comp_op,mapnik.CompositeOp.src_over)
-    eq_(p.placement, mapnik.point_placement.CENTROID)
-
-    p = mapnik.PointSymbolizer(mapnik.PathExpression("../data/images/dummy.png"))
-    p.allow_overlap = True
-    p.opacity = 0.5
-    p.ignore_placement = True
-    p.placement = mapnik.point_placement.INTERIOR
-    eq_(p.allow_overlap, True)
-    eq_(p.opacity, 0.5)
-    eq_(p.filename,'../data/images/dummy.png')
-    eq_(p.ignore_placement,True)
-    eq_(p.placement, mapnik.point_placement.INTERIOR)
-
-def test_markers_symbolizer():
-    p = mapnik.MarkersSymbolizer()
-    eq_(p.allow_overlap, False)
-    eq_(p.opacity,1.0)
-    eq_(p.fill_opacity,None)
-    eq_(p.filename,'shape://ellipse')
-    eq_(p.placement,mapnik.marker_placement.POINT_PLACEMENT)
-    eq_(p.multi_policy,mapnik.marker_multi_policy.EACH)
-    eq_(p.fill,None)
-    eq_(p.ignore_placement,False)
-    eq_(p.spacing,100)
-    eq_(p.max_error,0.2)
-    eq_(p.width,None)
-    eq_(p.height,None)
-    eq_(p.transform,'')
-    eq_(p.clip,True)
-    eq_(p.comp_op,mapnik.CompositeOp.src_over)
-
-
-    p.width = mapnik.Expression('12')
-    p.height = mapnik.Expression('12')
-    eq_(str(p.width),'12')
-    eq_(str(p.height),'12')
-
-    p.width = mapnik.Expression('[field] + 2')
-    p.height = mapnik.Expression('[field] + 2')
-    eq_(str(p.width),'([field]+2)')
-    eq_(str(p.height),'([field]+2)')
-
-    stroke = mapnik.Stroke()
-    stroke.color = mapnik.Color('black')
-    stroke.width = 1.0
-
-    p.stroke = stroke
-    p.fill = mapnik.Color('white')
-    p.allow_overlap = True
-    p.opacity = 0.5
-    p.fill_opacity = 0.5
-    p.placement = mapnik.marker_placement.LINE_PLACEMENT
-    p.multi_policy = mapnik.marker_multi_policy.WHOLE
-
-    eq_(p.allow_overlap, True)
-    eq_(p.opacity, 0.5)
-    eq_(p.fill_opacity, 0.5)
-    eq_(p.multi_policy,mapnik.marker_multi_policy.WHOLE)
-    eq_(p.placement,mapnik.marker_placement.LINE_PLACEMENT)
-
-    #https://github.com/mapnik/mapnik/issues/1285
-    #https://github.com/mapnik/mapnik/issues/1427
-    p.marker_type = 'arrow'
-    eq_(p.marker_type,'shape://arrow')
-    eq_(p.filename,'shape://arrow')
-
-
-# PointSymbolizer missing image file
-# images paths are now PathExpressions are evaluated at runtime
-# so it does not make sense to throw...
-#@raises(RuntimeError)
-#def test_pointsymbolizer_missing_image():
- #   p = mapnik.PointSymbolizer(mapnik.PathExpression("../data/images/broken.png"))
-
-def test_polygon_symbolizer():
-    p = mapnik.PolygonSymbolizer()
-    eq_(p.smooth,0.0)
-    eq_(p.comp_op,mapnik.CompositeOp.src_over)
-    eq_(p.clip,True)
-    eq_(p.fill, mapnik.Color('gray'))
-    eq_(p.fill_opacity, 1)
-
-    p = mapnik.PolygonSymbolizer(mapnik.Color('blue'))
-
-    eq_(p.fill, mapnik.Color('blue'))
-    eq_(p.fill_opacity, 1)
-
-def test_building_symbolizer_init():
-    p = mapnik.BuildingSymbolizer()
-
-    eq_(p.fill, mapnik.Color('gray'))
-    eq_(p.fill_opacity, 1)
-    eq_(p.height,None)
-
-def test_stroke_init():
-    s = mapnik.Stroke()
-
-    eq_(s.width, 1)
-    eq_(s.opacity, 1)
-    eq_(s.color, mapnik.Color('black'))
-    eq_(s.line_cap, mapnik.line_cap.BUTT_CAP)
-    eq_(s.line_join, mapnik.line_join.MITER_JOIN)
-    eq_(s.gamma,1.0)
-
-    s = mapnik.Stroke(mapnik.Color('blue'), 5.0)
-    s.gamma = .5
-
-    eq_(s.width, 5)
-    eq_(s.opacity, 1)
-    eq_(s.color, mapnik.Color('blue'))
-    eq_(s.gamma, .5)
-    eq_(s.line_cap, mapnik.line_cap.BUTT_CAP)
-    eq_(s.line_join, mapnik.line_join.MITER_JOIN)
-
-def test_stroke_dash_arrays():
-    s = mapnik.Stroke()
-    s.add_dash(1,2)
-    s.add_dash(3,4)
-    s.add_dash(5,6)
-
-    eq_(s.get_dashes(), [(1,2),(3,4),(5,6)])
-
-def test_map_init():
-    m = mapnik.Map(256, 256)
-
-    eq_(m.width, 256)
-    eq_(m.height, 256)
-    eq_(m.srs, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
-    eq_(m.base, '')
-    eq_(m.maximum_extent, None)
-
-    m = mapnik.Map(256, 256, '+proj=latlong')
-    eq_(m.srs, '+proj=latlong')
-
-def test_map_style_access():
-    m = mapnik.Map(256, 256)
-    sty = mapnik.Style()
-    m.append_style("style",sty)
-    styles = list(m.styles)
-    eq_(len(styles),1)
-    eq_(styles[0][0],'style')
-    # returns a copy so let's just check it is the right instance
-    eq_(isinstance(styles[0][1],mapnik.Style),True)
-
-def test_map_maximum_extent_modification():
-    m = mapnik.Map(256, 256)
-    eq_(m.maximum_extent, None)
-    m.maximum_extent = mapnik.Box2d()
-    eq_(m.maximum_extent, mapnik.Box2d())
-    m.maximum_extent = None
-    eq_(m.maximum_extent, None)
-
-# Map initialization from string
-def test_map_init_from_string():
-    map_string = '''<Map background-color="steelblue" base="./" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
-     <Style name="My Style">
-      <Rule>
-       <PolygonSymbolizer fill="#f2eff9"/>
-       <LineSymbolizer stroke="rgb(50%,50%,50%)" stroke-width="0.1"/>
-      </Rule>
-     </Style>
-     <Layer name="boundaries">
-      <StyleName>My Style</StyleName>
-       <Datasource>
-        <Parameter name="type">shape</Parameter>
-        <Parameter name="file">../../demo/data/boundaries</Parameter>
-       </Datasource>
-      </Layer>
-    </Map>'''
-
-    m = mapnik.Map(600, 300)
-    eq_(m.base, '')
-    try:
-        mapnik.load_map_from_string(m, map_string)
-        eq_(m.base, './')
-        mapnik.load_map_from_string(m, map_string, False, "") # this "" will have no effect
-        eq_(m.base, './')
-
-        tmp_dir = tempfile.gettempdir()
-        try:
-            mapnik.load_map_from_string(m, map_string, False, tmp_dir)
-        except RuntimeError:
-            pass # runtime error expected because shapefile path should be wrong and datasource will throw
-        eq_(m.base, tmp_dir) # tmp_dir will be set despite the exception because load_map mostly worked
-        m.base = 'foo'
-        mapnik.load_map_from_string(m, map_string, True, ".")
-        eq_(m.base, '.')
-    except RuntimeError, e:
-        # only test datasources that we have installed
-        if not 'Could not create datasource' in str(e):
-            raise RuntimeError(e)
-
-# Color initialization
- at raises(Exception) # Boost.Python.ArgumentError
-def test_color_init_errors():
-    c = mapnik.Color()
-
- at raises(RuntimeError)
-def test_color_init_errors():
-    c = mapnik.Color('foo') # mapnik config
-
-def test_color_init():
-    c = mapnik.Color('blue')
-
-    eq_(c.a, 255)
-    eq_(c.r, 0)
-    eq_(c.g, 0)
-    eq_(c.b, 255)
-
-    eq_(c.to_hex_string(), '#0000ff')
-
-    c = mapnik.Color('#f2eff9')
-
-    eq_(c.a, 255)
-    eq_(c.r, 242)
-    eq_(c.g, 239)
-    eq_(c.b, 249)
-
-    eq_(c.to_hex_string(), '#f2eff9')
-
-    c = mapnik.Color('rgb(50%,50%,50%)')
-
-    eq_(c.a, 255)
-    eq_(c.r, 128)
-    eq_(c.g, 128)
-    eq_(c.b, 128)
-
-    eq_(c.to_hex_string(), '#808080')
-
-    c = mapnik.Color(0, 64, 128)
-
-    eq_(c.a, 255)
-    eq_(c.r, 0)
-    eq_(c.g, 64)
-    eq_(c.b, 128)
-
-    eq_(c.to_hex_string(), '#004080')
-
-    c = mapnik.Color(0, 64, 128, 192)
-
-    eq_(c.a, 192)
-    eq_(c.r, 0)
-    eq_(c.g, 64)
-    eq_(c.b, 128)
-
-    eq_(c.to_hex_string(), '#004080c0')
-
-def test_color_equality():
-
-    c1 = mapnik.Color('blue')
-    c2 = mapnik.Color(0,0,255)
-    c3 = mapnik.Color('black')
-
-    c3.r = 0
-    c3.g = 0
-    c3.b = 255
-    c3.a = 255
-
-    eq_(c1, c2)
-    eq_(c1, c3)
-
-    c1 = mapnik.Color(0, 64, 128)
-    c2 = mapnik.Color(0, 64, 128)
-    c3 = mapnik.Color(0, 0, 0)
+# #!/usr/bin/env python
+# # -*- coding: utf-8 -*-
+
+# import os
+# from nose.tools import *
+# from utilities import execution_path, run_all
+# import tempfile
+
+# import mapnik
+
+# def setup():
+#     # All of the paths used are relative, if we run the tests
+#     # from another directory we need to chdir()
+#     os.chdir(execution_path('.'))
+
+# def test_debug_symbolizer():
+#     s = mapnik.DebugSymbolizer()
+#     eq_(s.mode,mapnik.debug_symbolizer_mode.collision)
+
+# def test_raster_symbolizer():
+#     s = mapnik.RasterSymbolizer()
+#     eq_(s.comp_op,mapnik.CompositeOp.src_over) # note: mode is deprecated
+#     eq_(s.scaling,mapnik.scaling_method.NEAR)
+#     eq_(s.opacity,1.0)
+#     eq_(s.colorizer,None)
+#     eq_(s.filter_factor,-1)
+#     eq_(s.mesh_size,16)
+#     eq_(s.premultiplied,None)
+#     s.premultiplied = True
+#     eq_(s.premultiplied,True)
+
+# def test_line_pattern():
+#     s = mapnik.LinePatternSymbolizer(mapnik.PathExpression('../data/images/dummy.png'))
+#     eq_(s.filename, '../data/images/dummy.png')
+#     eq_(s.smooth,0.0)
+#     eq_(s.transform,'')
+#     eq_(s.offset,0.0)
+#     eq_(s.comp_op,mapnik.CompositeOp.src_over)
+#     eq_(s.clip,True)
+
+# def test_line_symbolizer():
+#     s = mapnik.LineSymbolizer()
+#     eq_(s.rasterizer, mapnik.line_rasterizer.FULL)
+#     eq_(s.smooth,0.0)
+#     eq_(s.comp_op,mapnik.CompositeOp.src_over)
+#     eq_(s.clip,True)
+#     eq_(s.stroke.width, 1)
+#     eq_(s.stroke.opacity, 1)
+#     eq_(s.stroke.color, mapnik.Color('black'))
+#     eq_(s.stroke.line_cap, mapnik.line_cap.BUTT_CAP)
+#     eq_(s.stroke.line_join, mapnik.line_join.MITER_JOIN)
+
+#     l = mapnik.LineSymbolizer(mapnik.Color('blue'), 5.0)
+
+#     eq_(l.stroke.width, 5)
+#     eq_(l.stroke.opacity, 1)
+#     eq_(l.stroke.color, mapnik.Color('blue'))
+#     eq_(l.stroke.line_cap, mapnik.line_cap.BUTT_CAP)
+#     eq_(l.stroke.line_join, mapnik.line_join.MITER_JOIN)
+
+#     s = mapnik.Stroke(mapnik.Color('blue'), 5.0)
+#     l = mapnik.LineSymbolizer(s)
+
+#     eq_(l.stroke.width, 5)
+#     eq_(l.stroke.opacity, 1)
+#     eq_(l.stroke.color, mapnik.Color('blue'))
+#     eq_(l.stroke.line_cap, mapnik.line_cap.BUTT_CAP)
+#     eq_(l.stroke.line_join, mapnik.line_join.MITER_JOIN)
+
+# def test_line_symbolizer_stroke_reference():
+#     l = mapnik.LineSymbolizer(mapnik.Color('green'),0.1)
+#     l.stroke.add_dash(.1,.1)
+#     l.stroke.add_dash(.1,.1)
+#     eq_(l.stroke.get_dashes(), [(.1,.1),(.1,.1)])
+#     eq_(l.stroke.color,mapnik.Color('green'))
+#     eq_(l.stroke.opacity,1.0)
+#     assert_almost_equal(l.stroke.width,0.1)
+
+# # https://github.com/mapnik/mapnik/issues/1427
+# def test_stroke_dash_api():
+#     stroke = mapnik.Stroke()
+#     dashes = [(1.0,1.0)]
+#     stroke.dasharray = dashes
+#     eq_(stroke.dasharray, dashes)
+#     stroke.add_dash(.1,.1)
+#     dashes.append((.1,.1))
+#     eq_(stroke.dasharray, dashes)
+
+
+# def test_text_symbolizer():
+#     s = mapnik.TextSymbolizer()
+#     eq_(s.comp_op,mapnik.CompositeOp.src_over)
+#     eq_(s.clip,True)
+#     eq_(s.halo_rasterizer,mapnik.halo_rasterizer.FULL)
+
+#     # https://github.com/mapnik/mapnik/issues/1420
+#     eq_(s.text_transform, mapnik.text_transform.NONE)
+
+#     # old args required method
+#     ts = mapnik.TextSymbolizer(mapnik.Expression('[Field_Name]'), 'Font Name', 8, mapnik.Color('black'))
+# #    eq_(str(ts.name), str(mapnik2.Expression('[Field_Name]'))) name field is no longer supported
+#     eq_(ts.format.face_name, 'Font Name')
+#     eq_(ts.format.text_size, 8)
+#     eq_(ts.format.fill, mapnik.Color('black'))
+#     eq_(ts.properties.label_placement, mapnik.label_placement.POINT_PLACEMENT)
+#     eq_(ts.properties.horizontal_alignment, mapnik.horizontal_alignment.AUTO)
+
+# def test_shield_symbolizer_init():
+#     s = mapnik.ShieldSymbolizer(mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6, mapnik.Color('#000000'), mapnik.PathExpression('../data/images/dummy.png'))
+#     eq_(s.comp_op,mapnik.CompositeOp.src_over)
+#     eq_(s.clip,True)
+#     eq_(s.displacement, (0.0,0.0))
+#     eq_(s.allow_overlap, False)
+#     eq_(s.avoid_edges, False)
+#     eq_(s.character_spacing,0)
+#     #eq_(str(s.name), str(mapnik2.Expression('[Field Name]'))) name field is no longer supported
+#     eq_(s.face_name, 'DejaVu Sans Bold')
+#     eq_(s.allow_overlap, False)
+#     eq_(s.fill, mapnik.Color('#000000'))
+#     eq_(s.halo_fill, mapnik.Color('rgb(255,255,255)'))
+#     eq_(s.halo_radius, 0)
+#     eq_(s.label_placement, mapnik.label_placement.POINT_PLACEMENT)
+#     eq_(s.minimum_distance, 0.0)
+#     eq_(s.text_ratio, 0)
+#     eq_(s.text_size, 6)
+#     eq_(s.wrap_width, 0)
+#     eq_(s.vertical_alignment, mapnik.vertical_alignment.AUTO)
+#     eq_(s.label_spacing, 0)
+#     eq_(s.label_position_tolerance, 0)
+#     # 22.5 * M_PI/180.0 initialized by default
+#     assert_almost_equal(s.max_char_angle_delta, 0.39269908169872414)
+
+#     eq_(s.text_transform, mapnik.text_transform.NONE)
+#     eq_(s.line_spacing, 0)
+#     eq_(s.character_spacing, 0)
+
+#     # r1341
+#     eq_(s.wrap_before, False)
+#     eq_(s.horizontal_alignment, mapnik.horizontal_alignment.AUTO)
+#     eq_(s.justify_alignment, mapnik.justify_alignment.AUTO)
+#     eq_(s.opacity, 1.0)
+
+#     # r2300
+#     eq_(s.minimum_padding, 0.0)
+
+#     # was mixed with s.opacity
+#     eq_(s.text_opacity, 1.0)
+
+#     eq_(s.shield_displacement, (0.0,0.0))
+#     # TODO - the pattern in bindings seems to be to get/set
+#     # strings for PathExpressions... should we pass objects?
+#     eq_(s.filename, '../data/images/dummy.png')
+
+#     # 11c34b1: default transform list is empty, not identity matrix
+#     eq_(s.transform, '')
+
+#     eq_(s.fontset, None)
+
+# # ShieldSymbolizer missing image file
+# # images paths are now PathExpressions are evaluated at runtime
+# # so it does not make sense to throw...
+# #@raises(RuntimeError)
+# #def test_shieldsymbolizer_missing_image():
+# #    s = mapnik.ShieldSymbolizer(mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6, mapnik.Color('#000000'), mapnik.PathExpression('../#data/images/broken.png'))
+
+# def test_shield_symbolizer_modify():
+#     s = mapnik.ShieldSymbolizer(mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6, mapnik.Color('#000000'), mapnik.PathExpression('../data/images/dummy.png'))
+#     # transform expression
+#     def check_transform(expr, expect_str=None):
+#         s.transform = expr
+#         eq_(s.transform, expr if expect_str is None else expect_str)
+#     check_transform("matrix(1 2 3 4 5 6)", "matrix(1, 2, 3, 4, 5, 6)")
+#     check_transform("matrix(1, 2, 3, 4, 5, 6 +7)", "matrix(1, 2, 3, 4, 5, (6+7))")
+#     check_transform("rotate([a])")
+#     check_transform("rotate([a] -2)", "rotate(([a]-2))")
+#     check_transform("rotate([a] -2 -3)", "rotate([a], -2, -3)")
+#     check_transform("rotate([a] -2 -3 -4)", "rotate(((([a]-2)-3)-4))")
+#     check_transform("rotate([a] -2, 3, 4)", "rotate(([a]-2), 3, 4)")
+#     check_transform("translate([tx]) rotate([a])")
+#     check_transform("scale([sx], [sy]/2)")
+#     # TODO check expected failures
+
+# def test_point_symbolizer():
+#     p = mapnik.PointSymbolizer()
+#     eq_(p.filename,'')
+#     eq_(p.transform,'')
+#     eq_(p.opacity,1.0)
+#     eq_(p.allow_overlap,False)
+#     eq_(p.ignore_placement,False)
+#     eq_(p.comp_op,mapnik.CompositeOp.src_over)
+#     eq_(p.placement, mapnik.point_placement.CENTROID)
+
+#     p = mapnik.PointSymbolizer(mapnik.PathExpression("../data/images/dummy.png"))
+#     p.allow_overlap = True
+#     p.opacity = 0.5
+#     p.ignore_placement = True
+#     p.placement = mapnik.point_placement.INTERIOR
+#     eq_(p.allow_overlap, True)
+#     eq_(p.opacity, 0.5)
+#     eq_(p.filename,'../data/images/dummy.png')
+#     eq_(p.ignore_placement,True)
+#     eq_(p.placement, mapnik.point_placement.INTERIOR)
+
+# def test_markers_symbolizer():
+#     p = mapnik.MarkersSymbolizer()
+#     eq_(p.allow_overlap, False)
+#     eq_(p.opacity,1.0)
+#     eq_(p.fill_opacity,None)
+#     eq_(p.filename,'shape://ellipse')
+#     eq_(p.placement,mapnik.marker_placement.POINT_PLACEMENT)
+#     eq_(p.multi_policy,mapnik.marker_multi_policy.EACH)
+#     eq_(p.fill,None)
+#     eq_(p.ignore_placement,False)
+#     eq_(p.spacing,100)
+#     eq_(p.max_error,0.2)
+#     eq_(p.width,None)
+#     eq_(p.height,None)
+#     eq_(p.transform,'')
+#     eq_(p.clip,True)
+#     eq_(p.comp_op,mapnik.CompositeOp.src_over)
+
+
+#     p.width = mapnik.Expression('12')
+#     p.height = mapnik.Expression('12')
+#     eq_(str(p.width),'12')
+#     eq_(str(p.height),'12')
+
+#     p.width = mapnik.Expression('[field] + 2')
+#     p.height = mapnik.Expression('[field] + 2')
+#     eq_(str(p.width),'([field]+2)')
+#     eq_(str(p.height),'([field]+2)')
+
+#     stroke = mapnik.Stroke()
+#     stroke.color = mapnik.Color('black')
+#     stroke.width = 1.0
+
+#     p.stroke = stroke
+#     p.fill = mapnik.Color('white')
+#     p.allow_overlap = True
+#     p.opacity = 0.5
+#     p.fill_opacity = 0.5
+#     p.placement = mapnik.marker_placement.LINE_PLACEMENT
+#     p.multi_policy = mapnik.marker_multi_policy.WHOLE
+
+#     eq_(p.allow_overlap, True)
+#     eq_(p.opacity, 0.5)
+#     eq_(p.fill_opacity, 0.5)
+#     eq_(p.multi_policy,mapnik.marker_multi_policy.WHOLE)
+#     eq_(p.placement,mapnik.marker_placement.LINE_PLACEMENT)
+
+#     #https://github.com/mapnik/mapnik/issues/1285
+#     #https://github.com/mapnik/mapnik/issues/1427
+#     p.marker_type = 'arrow'
+#     eq_(p.marker_type,'shape://arrow')
+#     eq_(p.filename,'shape://arrow')
+
+
+# # PointSymbolizer missing image file
+# # images paths are now PathExpressions are evaluated at runtime
+# # so it does not make sense to throw...
+# #@raises(RuntimeError)
+# #def test_pointsymbolizer_missing_image():
+#  #   p = mapnik.PointSymbolizer(mapnik.PathExpression("../data/images/broken.png"))
+
+# def test_polygon_symbolizer():
+#     p = mapnik.PolygonSymbolizer()
+#     eq_(p.smooth,0.0)
+#     eq_(p.comp_op,mapnik.CompositeOp.src_over)
+#     eq_(p.clip,True)
+#     eq_(p.fill, mapnik.Color('gray'))
+#     eq_(p.fill_opacity, 1)
+
+#     p = mapnik.PolygonSymbolizer(mapnik.Color('blue'))
+
+#     eq_(p.fill, mapnik.Color('blue'))
+#     eq_(p.fill_opacity, 1)
+
+# def test_building_symbolizer_init():
+#     p = mapnik.BuildingSymbolizer()
+
+#     eq_(p.fill, mapnik.Color('gray'))
+#     eq_(p.fill_opacity, 1)
+#     eq_(p.height,None)
+
+# def test_group_symbolizer_init():
+#     s = mapnik.GroupSymbolizer()
+
+#     p = mapnik.GroupSymbolizerProperties()
+
+#     l = mapnik.PairLayout()
+#     l.item_margin = 5.0
+#     p.set_layout(l)
+
+#     r = mapnik.GroupRule(mapnik.Expression("[name%1]"))
+#     r.append(mapnik.PointSymbolizer())
+#     p.add_rule(r)
+#     s.symbolizer_properties = p
+
+#     eq_(s.comp_op,mapnik.CompositeOp.src_over)
+
+# def test_stroke_init():
+#     s = mapnik.Stroke()
+
+#     eq_(s.width, 1)
+#     eq_(s.opacity, 1)
+#     eq_(s.color, mapnik.Color('black'))
+#     eq_(s.line_cap, mapnik.line_cap.BUTT_CAP)
+#     eq_(s.line_join, mapnik.line_join.MITER_JOIN)
+#     eq_(s.gamma,1.0)
+
+#     s = mapnik.Stroke(mapnik.Color('blue'), 5.0)
+#     s.gamma = .5
+
+#     eq_(s.width, 5)
+#     eq_(s.opacity, 1)
+#     eq_(s.color, mapnik.Color('blue'))
+#     eq_(s.gamma, .5)
+#     eq_(s.line_cap, mapnik.line_cap.BUTT_CAP)
+#     eq_(s.line_join, mapnik.line_join.MITER_JOIN)
+
+# def test_stroke_dash_arrays():
+#     s = mapnik.Stroke()
+#     s.add_dash(1,2)
+#     s.add_dash(3,4)
+#     s.add_dash(5,6)
+
+#     eq_(s.get_dashes(), [(1,2),(3,4),(5,6)])
+
+# def test_map_init():
+#     m = mapnik.Map(256, 256)
+
+#     eq_(m.width, 256)
+#     eq_(m.height, 256)
+#     eq_(m.srs, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
+#     eq_(m.base, '')
+#     eq_(m.maximum_extent, None)
+#     eq_(m.background_image, None)
+#     eq_(m.background_image_comp_op, mapnik.CompositeOp.src_over)
+#     eq_(m.background_image_opacity, 1.0)
+
+#     m = mapnik.Map(256, 256, '+proj=latlong')
+#     eq_(m.srs, '+proj=latlong')
+
+# def test_map_style_access():
+#     m = mapnik.Map(256, 256)
+#     sty = mapnik.Style()
+#     m.append_style("style",sty)
+#     styles = list(m.styles)
+#     eq_(len(styles),1)
+#     eq_(styles[0][0],'style')
+#     # returns a copy so let's just check it is the right instance
+#     eq_(isinstance(styles[0][1],mapnik.Style),True)
+
+# def test_map_maximum_extent_modification():
+#     m = mapnik.Map(256, 256)
+#     eq_(m.maximum_extent, None)
+#     m.maximum_extent = mapnik.Box2d()
+#     eq_(m.maximum_extent, mapnik.Box2d())
+#     m.maximum_extent = None
+#     eq_(m.maximum_extent, None)
+
+# # Map initialization from string
+# def test_map_init_from_string():
+#     map_string = '''<Map background-color="steelblue" base="./" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+#      <Style name="My Style">
+#       <Rule>
+#        <PolygonSymbolizer fill="#f2eff9"/>
+#        <LineSymbolizer stroke="rgb(50%,50%,50%)" stroke-width="0.1"/>
+#       </Rule>
+#      </Style>
+#      <Layer name="boundaries">
+#       <StyleName>My Style</StyleName>
+#        <Datasource>
+#         <Parameter name="type">shape</Parameter>
+#         <Parameter name="file">../../demo/data/boundaries</Parameter>
+#        </Datasource>
+#       </Layer>
+#     </Map>'''
+
+#     m = mapnik.Map(600, 300)
+#     eq_(m.base, '')
+#     try:
+#         mapnik.load_map_from_string(m, map_string)
+#         eq_(m.base, './')
+#         mapnik.load_map_from_string(m, map_string, False, "") # this "" will have no effect
+#         eq_(m.base, './')
+
+#         tmp_dir = tempfile.gettempdir()
+#         try:
+#             mapnik.load_map_from_string(m, map_string, False, tmp_dir)
+#         except RuntimeError:
+#             pass # runtime error expected because shapefile path should be wrong and datasource will throw
+#         eq_(m.base, tmp_dir) # tmp_dir will be set despite the exception because load_map mostly worked
+#         m.base = 'foo'
+#         mapnik.load_map_from_string(m, map_string, True, ".")
+#         eq_(m.base, '.')
+#     except RuntimeError, e:
+#         # only test datasources that we have installed
+#         if not 'Could not create datasource' in str(e):
+#             raise RuntimeError(e)
+
+# # Color initialization
+# @raises(Exception) # Boost.Python.ArgumentError
+# def test_color_init_errors():
+#     c = mapnik.Color()
+
+# @raises(RuntimeError)
+# def test_color_init_errors():
+#     c = mapnik.Color('foo') # mapnik config
+
+# def test_color_init():
+#     c = mapnik.Color('blue')
+
+#     eq_(c.a, 255)
+#     eq_(c.r, 0)
+#     eq_(c.g, 0)
+#     eq_(c.b, 255)
+
+#     eq_(c.to_hex_string(), '#0000ff')
+
+#     c = mapnik.Color('#f2eff9')
+
+#     eq_(c.a, 255)
+#     eq_(c.r, 242)
+#     eq_(c.g, 239)
+#     eq_(c.b, 249)
+
+#     eq_(c.to_hex_string(), '#f2eff9')
+
+#     c = mapnik.Color('rgb(50%,50%,50%)')
+
+#     eq_(c.a, 255)
+#     eq_(c.r, 128)
+#     eq_(c.g, 128)
+#     eq_(c.b, 128)
+
+#     eq_(c.to_hex_string(), '#808080')
+
+#     c = mapnik.Color(0, 64, 128)
+
+#     eq_(c.a, 255)
+#     eq_(c.r, 0)
+#     eq_(c.g, 64)
+#     eq_(c.b, 128)
+
+#     eq_(c.to_hex_string(), '#004080')
+
+#     c = mapnik.Color(0, 64, 128, 192)
+
+#     eq_(c.a, 192)
+#     eq_(c.r, 0)
+#     eq_(c.g, 64)
+#     eq_(c.b, 128)
+
+#     eq_(c.to_hex_string(), '#004080c0')
+
+# def test_color_equality():
+
+#     c1 = mapnik.Color('blue')
+#     c2 = mapnik.Color(0,0,255)
+#     c3 = mapnik.Color('black')
+
+#     c3.r = 0
+#     c3.g = 0
+#     c3.b = 255
+#     c3.a = 255
+
+#     eq_(c1, c2)
+#     eq_(c1, c3)
+
+#     c1 = mapnik.Color(0, 64, 128)
+#     c2 = mapnik.Color(0, 64, 128)
+#     c3 = mapnik.Color(0, 0, 0)
 
-    c3.r = 0
-    c3.g = 64
-    c3.b = 128
+#     c3.r = 0
+#     c3.g = 64
+#     c3.b = 128
 
-    eq_(c1, c2)
-    eq_(c1, c3)
+#     eq_(c1, c2)
+#     eq_(c1, c3)
 
-    c1 = mapnik.Color(0, 64, 128, 192)
-    c2 = mapnik.Color(0, 64, 128, 192)
-    c3 = mapnik.Color(0, 0, 0, 255)
+#     c1 = mapnik.Color(0, 64, 128, 192)
+#     c2 = mapnik.Color(0, 64, 128, 192)
+#     c3 = mapnik.Color(0, 0, 0, 255)
 
-    c3.r = 0
-    c3.g = 64
-    c3.b = 128
-    c3.a = 192
+#     c3.r = 0
+#     c3.g = 64
+#     c3.b = 128
+#     c3.a = 192
 
-    eq_(c1, c2)
-    eq_(c1, c3)
+#     eq_(c1, c2)
+#     eq_(c1, c3)
 
-    c1 = mapnik.Color('rgb(50%,50%,50%)')
-    c2 = mapnik.Color(128, 128, 128, 255)
-    c3 = mapnik.Color('#808080')
-    c4 = mapnik.Color('gray')
+#     c1 = mapnik.Color('rgb(50%,50%,50%)')
+#     c2 = mapnik.Color(128, 128, 128, 255)
+#     c3 = mapnik.Color('#808080')
+#     c4 = mapnik.Color('gray')
 
-    eq_(c1, c2)
-    eq_(c1, c3)
-    eq_(c1, c4)
+#     eq_(c1, c2)
+#     eq_(c1, c3)
+#     eq_(c1, c4)
 
-    c1 = mapnik.Color('hsl(0, 100%, 50%)')   # red
-    c2 = mapnik.Color('hsl(120, 100%, 50%)') # lime
-    c3 = mapnik.Color('hsla(240, 100%, 50%, 0.5)') # semi-transparent solid blue
+#     c1 = mapnik.Color('hsl(0, 100%, 50%)')   # red
+#     c2 = mapnik.Color('hsl(120, 100%, 50%)') # lime
+#     c3 = mapnik.Color('hsla(240, 100%, 50%, 0.5)') # semi-transparent solid blue
 
-    eq_(c1, mapnik.Color('red'))
-    eq_(c2, mapnik.Color('lime'))
-    eq_(c3, mapnik.Color(0,0,255,128))
+#     eq_(c1, mapnik.Color('red'))
+#     eq_(c2, mapnik.Color('lime'))
+#     eq_(c3, mapnik.Color(0,0,255,128))
 
-def test_rule_init():
-    min_scale = 5
-    max_scale = 10
+# def test_rule_init():
+#     min_scale = 5
+#     max_scale = 10
 
-    r = mapnik.Rule()
+#     r = mapnik.Rule()
 
-    eq_(r.name, '')
-    eq_(r.min_scale, 0)
-    eq_(r.max_scale, float('inf'))
-    eq_(r.has_else(), False)
-    eq_(r.has_also(), False)
+#     eq_(r.name, '')
+#     eq_(r.min_scale, 0)
+#     eq_(r.max_scale, float('inf'))
+#     eq_(r.has_else(), False)
+#     eq_(r.has_also(), False)
 
-    r = mapnik.Rule()
+#     r = mapnik.Rule()
 
-    r.set_else(True)
-    eq_(r.has_else(), True)
-    eq_(r.has_also(), False)
+#     r.set_else(True)
+#     eq_(r.has_else(), True)
+#     eq_(r.has_also(), False)
 
-    r = mapnik.Rule()
+#     r = mapnik.Rule()
 
-    r.set_also(True)
-    eq_(r.has_else(), False)
-    eq_(r.has_also(), True)
+#     r.set_also(True)
+#     eq_(r.has_else(), False)
+#     eq_(r.has_also(), True)
 
-    r = mapnik.Rule("Name")
+#     r = mapnik.Rule("Name")
 
-    eq_(r.name, 'Name')
-    eq_(r.min_scale, 0)
-    eq_(r.max_scale, float('inf'))
-    eq_(r.has_else(), False)
-    eq_(r.has_also(), False)
+#     eq_(r.name, 'Name')
+#     eq_(r.min_scale, 0)
+#     eq_(r.max_scale, float('inf'))
+#     eq_(r.has_else(), False)
+#     eq_(r.has_also(), False)
 
-    r = mapnik.Rule("Name")
+#     r = mapnik.Rule("Name")
 
-    eq_(r.name, 'Name')
-    eq_(r.min_scale, 0)
-    eq_(r.max_scale, float('inf'))
-    eq_(r.has_else(), False)
-    eq_(r.has_also(), False)
+#     eq_(r.name, 'Name')
+#     eq_(r.min_scale, 0)
+#     eq_(r.max_scale, float('inf'))
+#     eq_(r.has_else(), False)
+#     eq_(r.has_also(), False)
 
-    r = mapnik.Rule("Name", min_scale)
+#     r = mapnik.Rule("Name", min_scale)
 
-    eq_(r.name, 'Name')
-    eq_(r.min_scale, min_scale)
-    eq_(r.max_scale, float('inf'))
-    eq_(r.has_else(), False)
-    eq_(r.has_also(), False)
+#     eq_(r.name, 'Name')
+#     eq_(r.min_scale, min_scale)
+#     eq_(r.max_scale, float('inf'))
+#     eq_(r.has_else(), False)
+#     eq_(r.has_also(), False)
 
-    r = mapnik.Rule("Name", min_scale, max_scale)
+#     r = mapnik.Rule("Name", min_scale, max_scale)
 
-    eq_(r.name, 'Name')
-    eq_(r.min_scale, min_scale)
-    eq_(r.max_scale, max_scale)
-    eq_(r.has_else(), False)
-    eq_(r.has_also(), False)
+#     eq_(r.name, 'Name')
+#     eq_(r.min_scale, min_scale)
+#     eq_(r.max_scale, max_scale)
+#     eq_(r.has_else(), False)
+#     eq_(r.has_also(), False)
 
-if __name__ == "__main__":
-    setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+# if __name__ == "__main__":
+#     setup()
+#     run_all(eval(x) for x in dir() if x.startswith("test_"))
diff --git a/tests/python_tests/ogr_and_shape_geometries_test.py b/tests/python_tests/ogr_and_shape_geometries_test.py
index dd05add..be36426 100644
--- a/tests/python_tests/ogr_and_shape_geometries_test.py
+++ b/tests/python_tests/ogr_and_shape_geometries_test.py
@@ -30,8 +30,9 @@ if 'shape' in plugins and 'ogr' in plugins:
         import itertools
         for feat1,feat2 in itertools.izip(fs1, fs2):
             count += 1
-            eq_(str(feat1),str(feat2))
+            eq_(feat1.attributes,feat2.attributes)
             # TODO - revisit this: https://github.com/mapnik/mapnik/issues/1093
+            # eq_(feat1.to_geojson(),feat2.to_geojson())
             #eq_(feat1.geometries().to_wkt(),feat2.geometries().to_wkt())
             #eq_(feat1.geometries().to_wkb(mapnik.wkbByteOrder.NDR),feat2.geometries().to_wkb(mapnik.wkbByteOrder.NDR))
             #eq_(feat1.geometries().to_wkb(mapnik.wkbByteOrder.XDR),feat2.geometries().to_wkb(mapnik.wkbByteOrder.XDR))
@@ -41,4 +42,4 @@ if 'shape' in plugins and 'ogr' in plugins:
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/ogr_test.py b/tests/python_tests/ogr_test.py
index b742899..cccc658 100644
--- a/tests/python_tests/ogr_test.py
+++ b/tests/python_tests/ogr_test.py
@@ -56,10 +56,46 @@ if 'ogr' in mapnik.DatasourceCache.plugin_names():
 
     # disabled because OGR prints an annoying error: ERROR 1: Invalid Point object. Missing 'coordinates' member.
     #def test_handling_of_null_features():
-    #    ds = mapnik.Ogr(file='../data/json/null_feature.json',layer_by_index=0)
+    #    ds = mapnik.Ogr(file='../data/json/null_feature.geojson',layer_by_index=0)
+    #    fs = ds.all_features()
+    #    eq_(len(fs),1)
+
+    # OGR plugin extent parameter
+    def test_ogr_extent_parameter():
+        ds = mapnik.Ogr(file='../data/shp/world_merc.shp',layer_by_index=0,extent='-1,-1,1,1')
+        e = ds.envelope()
+        eq_(e.minx,-1)
+        eq_(e.miny,-1)
+        eq_(e.maxx,1)
+        eq_(e.maxy,1)
+
+    def test_ogr_reading_gpx_waypoint():
+        ds = mapnik.Ogr(file='../data/gpx/empty.gpx',layer='waypoints')
+        e = ds.envelope()
+        eq_(e.minx,-122)
+        eq_(e.miny,48)
+        eq_(e.maxx,-122)
+        eq_(e.maxy,48)
+
+    def test_ogr_empty_data_should_not_throw():
+        default_logging_severity = mapnik.logger.get_severity()
+        mapnik.logger.set_severity(mapnik.severity_type.None)
+        # use logger to silence expected warnings
+        for layer in ['routes', 'tracks', 'route_points', 'track_points']:
+            ds = mapnik.Ogr(file='../data/gpx/empty.gpx',layer=layer)
+            e = ds.envelope()
+            eq_(e.minx,0)
+            eq_(e.miny,0)
+            eq_(e.maxx,0)
+            eq_(e.maxy,0)
+        mapnik.logger.set_severity(default_logging_severity)
+
+    # disabled because OGR prints an annoying error: ERROR 1: Invalid Point object. Missing 'coordinates' member.
+    #def test_handling_of_null_features():
+    #    ds = mapnik.Ogr(file='../data/json/null_feature.geojson',layer_by_index=0)
     #    fs = ds.all_features()
     #    eq_(len(fs),1)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/osm_test.py b/tests/python_tests/osm_test.py
index c92b0f1..c962cc3 100644
--- a/tests/python_tests/osm_test.py
+++ b/tests/python_tests/osm_test.py
@@ -49,4 +49,4 @@ if 'osm' in mapnik.DatasourceCache.plugin_names():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/palette_test.py b/tests/python_tests/palette_test.py
index e7d3eff..9c8576f 100644
--- a/tests/python_tests/palette_test.py
+++ b/tests/python_tests/palette_test.py
@@ -47,4 +47,4 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/parameters_test.py b/tests/python_tests/parameters_test.py
index 846ef31..150fdb8 100644
--- a/tests/python_tests/parameters_test.py
+++ b/tests/python_tests/parameters_test.py
@@ -58,4 +58,4 @@ def test_parameters():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/pgraster_test.py b/tests/python_tests/pgraster_test.py
new file mode 100644
index 0000000..0d81a2a
--- /dev/null
+++ b/tests/python_tests/pgraster_test.py
@@ -0,0 +1,756 @@
+#!/usr/bin/env python
+
+from nose.tools import *
+import atexit
+import cProfile, pstats, io
+import time
+from utilities import execution_path, run_all
+from subprocess import Popen, PIPE
+import os, mapnik
+from Queue import Queue
+import threading
+import sys
+import re
+from binascii import hexlify, unhexlify
+
+
+MAPNIK_TEST_DBNAME = 'mapnik-tmp-pgraster-test-db'
+POSTGIS_TEMPLATE_DBNAME = 'template_postgis'
+DEBUG_OUTPUT=False
+
+def log(msg):
+    if DEBUG_OUTPUT:
+      print msg
+
+def setup():
+    # All of the paths used are relative, if we run the tests
+    # from another directory we need to chdir()
+    os.chdir(execution_path('.'))
+
+def call(cmd,silent=False):
+    stdin, stderr = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate()
+    if not stderr:
+        return stdin.strip()
+    elif not silent and 'error' in stderr.lower() \
+        or 'not found' in stderr.lower() \
+        or 'could not connect' in stderr.lower() \
+        or 'bad connection' in stderr.lower() \
+        or 'not recognized as an internal' in stderr.lower():
+        raise RuntimeError(stderr.strip())
+
+def psql_can_connect():
+    """Test ability to connect to a postgis template db with no options.
+
+    Basically, to run these tests your user must have full read
+    access over unix sockets without supplying a password. This
+    keeps these tests simple and focused on postgis not on postgres
+    auth issues.
+    """
+    try:
+        call('psql %s -c "select postgis_version()"' % POSTGIS_TEMPLATE_DBNAME)
+        return True
+    except RuntimeError, e:
+        print 'Notice: skipping pgraster tests (connection)'
+        return False
+
+def psql_run(cmd):
+  cmd = 'psql --set ON_ERROR_STOP=1 %s -c "%s"' % \
+    (MAPNIK_TEST_DBNAME, cmd.replace('"', '\\"'))
+  log('DEBUG: running ' + cmd)
+  call(cmd)
+
+def raster2pgsql_on_path():
+    """Test for presence of raster2pgsql on the user path.
+
+    We require this program to load test data into a temporarily database.
+    """
+    try:
+        call('raster2pgsql')
+        return True
+    except RuntimeError, e:
+        print 'Notice: skipping pgraster tests (raster2pgsql)'
+        return False
+
+def createdb_and_dropdb_on_path():
+    """Test for presence of dropdb/createdb on user path.
+
+    We require these programs to setup and teardown the testing db.
+    """
+    try:
+        call('createdb --help')
+        call('dropdb --help')
+        return True
+    except RuntimeError, e:
+        print 'Notice: skipping pgraster tests (createdb/dropdb)'
+        return False
+
+def postgis_setup():
+    call('dropdb %s' % MAPNIK_TEST_DBNAME,silent=True)
+    call('createdb -T %s %s' % (POSTGIS_TEMPLATE_DBNAME,MAPNIK_TEST_DBNAME),silent=False)
+
+def postgis_takedown():
+    pass
+    # fails as the db is in use: https://github.com/mapnik/mapnik/issues/960
+    #call('dropdb %s' % MAPNIK_TEST_DBNAME)
+
+def import_raster(filename, tabname, tilesize, constraint, overview):
+  log('tile: ' + tilesize + ' constraints: ' + str(constraint) \
+      + ' overviews: ' + overview)
+  cmd = 'raster2pgsql -Y -I -q'
+  if constraint:
+    cmd += ' -C'
+  if tilesize:
+    cmd += ' -t ' + tilesize
+  if overview:
+    cmd += ' -l ' + overview
+  cmd += ' %s %s | psql --set ON_ERROR_STOP=1 -q %s' % (os.path.abspath(os.path.normpath(filename)),tabname,MAPNIK_TEST_DBNAME)
+  log('Import call: ' + cmd)
+  call(cmd)
+
+def drop_imported(tabname, overview):
+  psql_run('DROP TABLE IF EXISTS "' + tabname + '";')
+  if overview:
+    for of in overview.split(','):
+      psql_run('DROP TABLE IF EXISTS "o_' + of + '_' + tabname + '";')
+
+if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
+        and createdb_and_dropdb_on_path() \
+        and psql_can_connect() \
+        and raster2pgsql_on_path():
+
+    # initialize test database
+    postgis_setup()
+
+    # [old]dataraster.tif, 2283x1913 int16 single-band
+    # dataraster-small.tif, 457x383 int16 single-band
+    def _test_dataraster_16bsi_rendering(lbl, overview, rescale, clip):
+      if rescale:
+        lbl += ' Sc'
+      if clip:
+        lbl += ' Cl'
+      ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME,table='"dataRaster"',
+        band=1,use_overviews=1 if overview else 0,
+        prescale_rasters=rescale,clip_rasters=clip)
+      fs = ds.featureset()
+      feature = fs.next()
+      eq_(feature['rid'],1)
+      lyr = mapnik.Layer('dataraster_16bsi')
+      lyr.datasource = ds
+      expenv = mapnik.Box2d(-14637, 3903178, 1126863, 4859678)
+      env = lyr.envelope()
+      # As the input size is a prime number both horizontally
+      # and vertically, we expect the extent of the overview
+      # tables to be a pixel wider than the original, whereas
+      # the pixel size in geographical units depends on the
+      # overview factor. So we start with the original pixel size
+      # as base scale and multiply by the overview factor.
+      # NOTE: the overview table extent only grows north and east
+      pixsize = 500 # see gdalinfo dataraster.tif
+      pixsize = 2497 # see gdalinfo dataraster-small.tif
+      tol = pixsize * max(overview.split(',')) if overview else 0
+      assert_almost_equal(env.minx, expenv.minx)
+      assert_almost_equal(env.miny, expenv.miny, delta=tol) 
+      assert_almost_equal(env.maxx, expenv.maxx, delta=tol)
+      assert_almost_equal(env.maxy, expenv.maxy)
+      mm = mapnik.Map(256, 256)
+      style = mapnik.Style()
+      col = mapnik.RasterColorizer();
+      col.default_mode = mapnik.COLORIZER_DISCRETE;
+      col.add_stop(0, mapnik.Color(0x40,0x40,0x40,255));
+      col.add_stop(10, mapnik.Color(0x80,0x80,0x80,255));
+      col.add_stop(20, mapnik.Color(0xa0,0xa0,0xa0,255));
+      sym = mapnik.RasterSymbolizer()
+      sym.colorizer = col
+      rule = mapnik.Rule()
+      rule.symbols.append(sym)
+      style.rules.append(rule)
+      mm.append_style('foo', style)
+      lyr.styles.append('foo')
+      mm.layers.append(lyr)
+      mm.zoom_to_box(expenv)
+      im = mapnik.Image(mm.width, mm.height)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
+      # no data
+      eq_(im.view(1,1,1,1).tostring(), '\x00\x00\x00\x00') 
+      eq_(im.view(255,255,1,1).tostring(), '\x00\x00\x00\x00') 
+      eq_(im.view(195,116,1,1).tostring(), '\x00\x00\x00\x00') 
+      # A0A0A0
+      eq_(im.view(100,120,1,1).tostring(), '\xa0\xa0\xa0\xff')
+      eq_(im.view( 75, 80,1,1).tostring(), '\xa0\xa0\xa0\xff')
+      # 808080
+      eq_(im.view( 74,170,1,1).tostring(), '\x80\x80\x80\xff')
+      eq_(im.view( 30, 50,1,1).tostring(), '\x80\x80\x80\xff')
+      # 404040
+      eq_(im.view(190, 70,1,1).tostring(), '\x40\x40\x40\xff')
+      eq_(im.view(140,170,1,1).tostring(), '\x40\x40\x40\xff')
+
+      # Now zoom over a portion of the env (1/10)
+      newenv = mapnik.Box2d(273663,4024478,330738,4072303)
+      mm.zoom_to_box(newenv)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:1/10')
+      # nodata
+      eq_(hexlify(im.view(255,255,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(200,254,1,1).tostring()), '00000000')
+      # A0A0A0
+      eq_(hexlify(im.view(90,232,1,1).tostring()), 'a0a0a0ff')
+      eq_(hexlify(im.view(96,245,1,1).tostring()), 'a0a0a0ff')
+      # 808080
+      eq_(hexlify(im.view(1,1,1,1).tostring()), '808080ff') 
+      eq_(hexlify(im.view(128,128,1,1).tostring()), '808080ff') 
+      # 404040
+      eq_(hexlify(im.view(255, 0,1,1).tostring()), '404040ff')
+
+    def _test_dataraster_16bsi(lbl, tilesize, constraint, overview):
+      import_raster('../data/raster/dataraster-small.tif', 'dataRaster', tilesize, constraint, overview)
+      if constraint:
+        lbl += ' C'
+      if tilesize:
+        lbl += ' T:' + tilesize
+      if overview:
+        lbl += ' O:' + overview
+      for prescale in [0,1]:
+        for clip in [0,1]:
+          _test_dataraster_16bsi_rendering(lbl, overview, prescale, clip)
+      drop_imported('dataRaster', overview)
+
+    def test_dataraster_16bsi():
+      #for tilesize in ['','256x256']:
+      for tilesize in ['256x256']:
+        for constraint in [0,1]:
+          #for overview in ['','4','2,16']:
+          for overview in ['','2']:
+            _test_dataraster_16bsi('data_16bsi', tilesize, constraint, overview)
+
+    # river.tiff, RGBA 8BUI
+    def _test_rgba_8bui_rendering(lbl, overview, rescale, clip):
+      if rescale:
+        lbl += ' Sc'
+      if clip:
+        lbl += ' Cl'
+      ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME,table='(select * from "River") foo',
+        use_overviews=1 if overview else 0,
+        prescale_rasters=rescale,clip_rasters=clip)
+      fs = ds.featureset()
+      feature = fs.next()
+      eq_(feature['rid'],1)
+      lyr = mapnik.Layer('rgba_8bui')
+      lyr.datasource = ds
+      expenv = mapnik.Box2d(0, -210, 256, 0)
+      env = lyr.envelope()
+      # As the input size is a prime number both horizontally
+      # and vertically, we expect the extent of the overview
+      # tables to be a pixel wider than the original, whereas
+      # the pixel size in geographical units depends on the
+      # overview factor. So we start with the original pixel size
+      # as base scale and multiply by the overview factor.
+      # NOTE: the overview table extent only grows north and east
+      pixsize = 1 # see gdalinfo river.tif
+      tol = pixsize * max(overview.split(',')) if overview else 0
+      assert_almost_equal(env.minx, expenv.minx)
+      assert_almost_equal(env.miny, expenv.miny, delta=tol) 
+      assert_almost_equal(env.maxx, expenv.maxx, delta=tol)
+      assert_almost_equal(env.maxy, expenv.maxy)
+      mm = mapnik.Map(256, 256)
+      style = mapnik.Style()
+      sym = mapnik.RasterSymbolizer()
+      rule = mapnik.Rule()
+      rule.symbols.append(sym)
+      style.rules.append(rule)
+      mm.append_style('foo', style)
+      lyr.styles.append('foo')
+      mm.layers.append(lyr)
+      mm.zoom_to_box(expenv)
+      im = mapnik.Image(mm.width, mm.height)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
+      #im.save('/tmp/xfull.png') # for debugging
+      # no data
+      eq_(hexlify(im.view(3,3,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(250,250,1,1).tostring()), '00000000') 
+      # full opaque river color
+      eq_(hexlify(im.view(175,118,1,1).tostring()), 'b9d8f8ff') 
+      # half-transparent pixel
+      pxstr = hexlify(im.view(122,138,1,1).tostring())
+      apat = ".*(..)$"
+      match = re.match(apat, pxstr)
+      assert match, 'pixel ' + pxstr + ' does not match pattern ' + apat
+      alpha = match.group(1)
+      assert alpha != 'ff' and alpha != '00', \
+        'unexpected full transparent/opaque pixel: ' + alpha
+
+      # Now zoom over a portion of the env (1/10)
+      newenv = mapnik.Box2d(166,-105,191,-77)
+      mm.zoom_to_box(newenv)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:1/10')
+      #im.save('/tmp/xtenth.png') # for debugging
+      # no data
+      eq_(hexlify(im.view(255,255,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(200,40,1,1).tostring()), '00000000')
+      # full opaque river color
+      eq_(hexlify(im.view(100,168,1,1).tostring()), 'b9d8f8ff')
+      # half-transparent pixel
+      pxstr = hexlify(im.view(122,138,1,1).tostring())
+      apat = ".*(..)$"
+      match = re.match(apat, pxstr)
+      assert match, 'pixel ' + pxstr + ' does not match pattern ' + apat
+      alpha = match.group(1)
+      assert alpha != 'ff' and alpha != '00', \
+        'unexpected full transparent/opaque pixel: ' + alpha
+
+    def _test_rgba_8bui(lbl, tilesize, constraint, overview):
+      import_raster('../data/raster/river.tiff', 'River', tilesize, constraint, overview)
+      if constraint:
+        lbl += ' C'
+      if tilesize:
+        lbl += ' T:' + tilesize
+      if overview:
+        lbl += ' O:' + overview
+      for prescale in [0,1]:
+        for clip in [0,1]:
+          _test_rgba_8bui_rendering(lbl, overview, prescale, clip)
+      drop_imported('River', overview)
+
+    def test_rgba_8bui():
+      for tilesize in ['','16x16']:
+        for constraint in [0,1]:
+          for overview in ['2']:
+            _test_rgba_8bui('rgba_8bui', tilesize, constraint, overview)
+
+    # nodata-edge.tif, RGB 8BUI
+    def _test_rgb_8bui_rendering(lbl, tnam, overview, rescale, clip):
+      if rescale:
+        lbl += ' Sc'
+      if clip:
+        lbl += ' Cl'
+      ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME,table=tnam,
+        use_overviews=1 if overview else 0,
+        prescale_rasters=rescale,clip_rasters=clip)
+      fs = ds.featureset()
+      feature = fs.next()
+      eq_(feature['rid'],1)
+      lyr = mapnik.Layer('rgba_8bui')
+      lyr.datasource = ds
+      expenv = mapnik.Box2d(-12329035.7652168,4508650.39854396, \
+                            -12328653.0279471,4508957.34625536)
+      env = lyr.envelope()
+      # As the input size is a prime number both horizontally
+      # and vertically, we expect the extent of the overview
+      # tables to be a pixel wider than the original, whereas
+      # the pixel size in geographical units depends on the
+      # overview factor. So we start with the original pixel size
+      # as base scale and multiply by the overview factor.
+      # NOTE: the overview table extent only grows north and east
+      pixsize = 2 # see gdalinfo nodata-edge.tif
+      tol = pixsize * max(overview.split(',')) if overview else 0
+      assert_almost_equal(env.minx, expenv.minx, places=0)
+      assert_almost_equal(env.miny, expenv.miny, delta=tol)
+      assert_almost_equal(env.maxx, expenv.maxx, delta=tol)
+      assert_almost_equal(env.maxy, expenv.maxy, places=0)
+      mm = mapnik.Map(256, 256)
+      style = mapnik.Style()
+      sym = mapnik.RasterSymbolizer()
+      rule = mapnik.Rule()
+      rule.symbols.append(sym)
+      style.rules.append(rule)
+      mm.append_style('foo', style)
+      lyr.styles.append('foo')
+      mm.layers.append(lyr)
+      mm.zoom_to_box(expenv)
+      im = mapnik.Image(mm.width, mm.height)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
+      #im.save('/tmp/xfull.png') # for debugging
+      # no data
+      eq_(hexlify(im.view(3,16,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(128,16,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(250,16,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(3,240,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(128,240,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(250,240,1,1).tostring()), '00000000')
+      # dark brown
+      eq_(hexlify(im.view(174,39,1,1).tostring()), 'c3a698ff') 
+      # dark gray
+      eq_(hexlify(im.view(195,132,1,1).tostring()), '575f62ff') 
+      # Now zoom over a portion of the env (1/10)
+      newenv = mapnik.Box2d(-12329035.7652168, 4508926.651484220, \
+                            -12328997.49148983,4508957.34625536)
+      mm.zoom_to_box(newenv)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:1/10')
+      #im.save('/tmp/xtenth.png') # for debugging
+      # no data
+      eq_(hexlify(im.view(3,16,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(128,16,1,1).tostring()), '00000000')
+      eq_(hexlify(im.view(250,16,1,1).tostring()), '00000000')
+      # black
+      eq_(hexlify(im.view(3,42,1,1).tostring()), '000000ff')
+      eq_(hexlify(im.view(3,134,1,1).tostring()), '000000ff')
+      eq_(hexlify(im.view(3,244,1,1).tostring()), '000000ff')
+      # gray
+      eq_(hexlify(im.view(135,157,1,1).tostring()), '4e555bff')
+      # brown
+      eq_(hexlify(im.view(195,223,1,1).tostring()), 'f2cdbaff')
+
+    def _test_rgb_8bui(lbl, tilesize, constraint, overview):
+      tnam = 'nodataedge'
+      import_raster('../data/raster/nodata-edge.tif', tnam, tilesize, constraint, overview)
+      if constraint:
+        lbl += ' C'
+      if tilesize:
+        lbl += ' T:' + tilesize
+      if overview:
+        lbl += ' O:' + overview
+      for prescale in [0,1]:
+        for clip in [0,1]:
+          _test_rgb_8bui_rendering(lbl, tnam, overview, prescale, clip)
+      #drop_imported(tnam, overview)
+
+    def test_rgb_8bui():
+      for tilesize in ['64x64']:
+        for constraint in [1]:
+          for overview in ['']:
+            _test_rgb_8bui('rgb_8bui', tilesize, constraint, overview)
+
+    def _test_grayscale_subquery(lbl,pixtype,value):
+      #
+      #      3   8   13
+      #    +---+---+---+
+      #  3 | v | v | v |  NOTE: writes different color
+      #    +---+---+---+        in 13,8 and 8,13
+      #  8 | v | v | a |  
+      #    +---+---+---+  
+      # 13 | v | b | v |
+      #    +---+---+---+
+      #
+      val_a = value/3;
+      val_b = val_a*2;
+      sql = "(select 3 as i, " \
+            " ST_SetValues(" \
+            "  ST_SetValues(" \
+            "   ST_AsRaster(" \
+            "    ST_MakeEnvelope(0,0,14,14), " \
+            "    1.0, -1.0, '%s', %s" \
+            "   ), " \
+            "   11, 6, 4, 5, %s::float8" \
+            "  )," \
+            "  6, 11, 5, 4, %s::float8" \
+            " ) as \"R\"" \
+            ") as foo" % (pixtype,value, val_a, val_b)
+      rescale = 0
+      clip = 0
+      if rescale:
+        lbl += ' Sc'
+      if clip:
+        lbl += ' Cl'
+      ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME, table=sql,
+        raster_field='"R"', use_overviews=1,
+        prescale_rasters=rescale,clip_rasters=clip)
+      fs = ds.featureset()
+      feature = fs.next()
+      eq_(feature['i'],3)
+      lyr = mapnik.Layer('grayscale_subquery')
+      lyr.datasource = ds
+      expenv = mapnik.Box2d(0,0,14,14)
+      env = lyr.envelope()
+      assert_almost_equal(env.minx, expenv.minx, places=0)
+      assert_almost_equal(env.miny, expenv.miny, places=0)
+      assert_almost_equal(env.maxx, expenv.maxx, places=0)
+      assert_almost_equal(env.maxy, expenv.maxy, places=0)
+      mm = mapnik.Map(15, 15)
+      style = mapnik.Style()
+      sym = mapnik.RasterSymbolizer()
+      rule = mapnik.Rule()
+      rule.symbols.append(sym)
+      style.rules.append(rule)
+      mm.append_style('foo', style)
+      lyr.styles.append('foo')
+      mm.layers.append(lyr)
+      mm.zoom_to_box(expenv)
+      im = mapnik.Image(mm.width, mm.height)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
+      #im.save('/tmp/xfull.png') # for debugging
+      h = format(value, '02x')
+      hex_v = h+h+h+'ff'
+      h = format(val_a, '02x')
+      hex_a = h+h+h+'ff'
+      h = format(val_b, '02x')
+      hex_b = h+h+h+'ff'
+      eq_(hexlify(im.view( 3, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view(13, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 3, 8,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8, 8,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view(13, 8,1,1).tostring()), hex_a);
+      eq_(hexlify(im.view( 3,13,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8,13,1,1).tostring()), hex_b);
+      eq_(hexlify(im.view(13,13,1,1).tostring()), hex_v);
+
+    def test_grayscale_2bui_subquery():
+      _test_grayscale_subquery('grayscale_2bui_subquery', '2BUI', 3)
+
+    def test_grayscale_4bui_subquery():
+      _test_grayscale_subquery('grayscale_4bui_subquery', '4BUI', 15)
+
+    def test_grayscale_8bui_subquery():
+      _test_grayscale_subquery('grayscale_8bui_subquery', '8BUI', 63)
+
+    def test_grayscale_8bsi_subquery():
+      # NOTE: we're using a positive integer because Mapnik
+      #       does not support negative data values anyway
+      _test_grayscale_subquery('grayscale_8bsi_subquery', '8BSI', 69)
+
+    def test_grayscale_16bui_subquery():
+      _test_grayscale_subquery('grayscale_16bui_subquery', '16BUI', 126)
+
+    def test_grayscale_16bsi_subquery():
+      # NOTE: we're using a positive integer because Mapnik
+      #       does not support negative data values anyway
+      _test_grayscale_subquery('grayscale_16bsi_subquery', '16BSI', 144)
+
+    def test_grayscale_32bui_subquery():
+      _test_grayscale_subquery('grayscale_32bui_subquery', '32BUI', 255)
+
+    def test_grayscale_32bsi_subquery():
+      # NOTE: we're using a positive integer because Mapnik
+      #       does not support negative data values anyway
+      _test_grayscale_subquery('grayscale_32bsi_subquery', '32BSI', 129)
+
+    def _test_data_subquery(lbl, pixtype, value):
+      #
+      #      3   8   13
+      #    +---+---+---+
+      #  3 | v | v | v |  NOTE: writes different values
+      #    +---+---+---+        in 13,8 and 8,13
+      #  8 | v | v | a |  
+      #    +---+---+---+  
+      # 13 | v | b | v |
+      #    +---+---+---+
+      #
+      val_a = value/3;
+      val_b = val_a*2;
+      sql = "(select 3 as i, " \
+            " ST_SetValues(" \
+            "  ST_SetValues(" \
+            "   ST_AsRaster(" \
+            "    ST_MakeEnvelope(0,0,14,14), " \
+            "    1.0, -1.0, '%s', %s" \
+            "   ), " \
+            "   11, 6, 5, 5, %s::float8" \
+            "  )," \
+            "  6, 11, 5, 5, %s::float8" \
+            " ) as \"R\"" \
+            ") as foo" % (pixtype,value, val_a, val_b)
+      overview = ''
+      rescale = 0
+      clip = 0
+      if rescale:
+        lbl += ' Sc'
+      if clip:
+        lbl += ' Cl'
+      ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME, table=sql,
+        raster_field='R', use_overviews=0 if overview else 0,
+        band=1, prescale_rasters=rescale, clip_rasters=clip)
+      fs = ds.featureset()
+      feature = fs.next()
+      eq_(feature['i'],3)
+      lyr = mapnik.Layer('data_subquery')
+      lyr.datasource = ds
+      expenv = mapnik.Box2d(0,0,14,14)
+      env = lyr.envelope()
+      assert_almost_equal(env.minx, expenv.minx, places=0)
+      assert_almost_equal(env.miny, expenv.miny, places=0)
+      assert_almost_equal(env.maxx, expenv.maxx, places=0)
+      assert_almost_equal(env.maxy, expenv.maxy, places=0)
+      mm = mapnik.Map(15, 15)
+      style = mapnik.Style()
+      col = mapnik.RasterColorizer();
+      col.default_mode = mapnik.COLORIZER_DISCRETE;
+      col.add_stop(val_a, mapnik.Color(0xff,0x00,0x00,255));
+      col.add_stop(val_b, mapnik.Color(0x00,0xff,0x00,255));
+      col.add_stop(value, mapnik.Color(0x00,0x00,0xff,255));
+      sym = mapnik.RasterSymbolizer()
+      sym.colorizer = col
+      rule = mapnik.Rule()
+      rule.symbols.append(sym)
+      style.rules.append(rule)
+      mm.append_style('foo', style)
+      lyr.styles.append('foo')
+      mm.layers.append(lyr)
+      mm.zoom_to_box(expenv)
+      im = mapnik.Image(mm.width, mm.height)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
+      #im.save('/tmp/xfull.png') # for debugging
+      h = format(value, '02x')
+      hex_v = '0000ffff'
+      hex_a = 'ff0000ff'
+      hex_b = '00ff00ff'
+      eq_(hexlify(im.view( 3, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view(13, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 3, 8,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8, 8,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view(13, 8,1,1).tostring()), hex_a);
+      eq_(hexlify(im.view( 3,13,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8,13,1,1).tostring()), hex_b);
+      eq_(hexlify(im.view(13,13,1,1).tostring()), hex_v);
+
+    def test_data_2bui_subquery():
+      _test_data_subquery('data_2bui_subquery', '2BUI', 3)
+
+    def test_data_4bui_subquery():
+      _test_data_subquery('data_4bui_subquery', '4BUI', 15)
+
+    def test_data_8bui_subquery():
+      _test_data_subquery('data_8bui_subquery', '8BUI', 63)
+
+    def test_data_8bsi_subquery():
+      # NOTE: we're using a positive integer because Mapnik
+      #       does not support negative data values anyway
+      _test_data_subquery('data_8bsi_subquery', '8BSI', 69)
+
+    def test_data_16bui_subquery():
+      _test_data_subquery('data_16bui_subquery', '16BUI', 126)
+
+    def test_data_16bsi_subquery():
+      # NOTE: we're using a positive integer because Mapnik
+      #       does not support negative data values anyway
+      _test_data_subquery('data_16bsi_subquery', '16BSI', 135)
+
+    def test_data_32bui_subquery():
+      _test_data_subquery('data_32bui_subquery', '32BUI', 255)
+
+    def test_data_32bsi_subquery():
+      # NOTE: we're using a positive integer because Mapnik
+      #       does not support negative data values anyway
+      _test_data_subquery('data_32bsi_subquery', '32BSI', 264)
+
+    def test_data_32bf_subquery():
+      _test_data_subquery('data_32bf_subquery', '32BF', 450)
+
+    def test_data_64bf_subquery():
+      _test_data_subquery('data_64bf_subquery', '64BF', 3072)
+
+    def _test_rgba_subquery(lbl, pixtype, r, g, b, a, g1, b1):
+      #
+      #      3   8   13
+      #    +---+---+---+
+      #  3 | v | v | h |  NOTE: writes different alpha
+      #    +---+---+---+        in 13,8 and 8,13
+      #  8 | v | v | a |  
+      #    +---+---+---+  
+      # 13 | v | b | v |
+      #    +---+---+---+
+      #
+      sql = "(select 3 as i, " \
+            " ST_SetValues(" \
+            "  ST_SetValues(" \
+            "   ST_AddBand(" \
+            "    ST_AddBand(" \
+            "     ST_AddBand(" \
+            "      ST_AsRaster(" \
+            "       ST_MakeEnvelope(0,0,14,14), " \
+            "       1.0, -1.0, '%s', %s" \
+            "      )," \
+            "      '%s', %d::float" \
+            "     ), " \
+            "     '%s', %d::float" \
+            "    ), " \
+            "    '%s', %d::float" \
+            "   ), " \
+            "   2, 11, 6, 4, 5, %s::float8" \
+            "  )," \
+            "  3, 6, 11, 5, 4, %s::float8" \
+            " ) as r" \
+            ") as foo" % (pixtype, r, pixtype, g, pixtype, b, pixtype, a, g1, b1)
+      overview = ''
+      rescale = 0
+      clip = 0
+      if rescale:
+        lbl += ' Sc'
+      if clip:
+        lbl += ' Cl'
+      ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME, table=sql,
+        raster_field='r', use_overviews=0 if overview else 0,
+        prescale_rasters=rescale, clip_rasters=clip)
+      fs = ds.featureset()
+      feature = fs.next()
+      eq_(feature['i'],3)
+      lyr = mapnik.Layer('rgba_subquery')
+      lyr.datasource = ds
+      expenv = mapnik.Box2d(0,0,14,14)
+      env = lyr.envelope()
+      assert_almost_equal(env.minx, expenv.minx, places=0)
+      assert_almost_equal(env.miny, expenv.miny, places=0)
+      assert_almost_equal(env.maxx, expenv.maxx, places=0)
+      assert_almost_equal(env.maxy, expenv.maxy, places=0)
+      mm = mapnik.Map(15, 15)
+      style = mapnik.Style()
+      sym = mapnik.RasterSymbolizer()
+      rule = mapnik.Rule()
+      rule.symbols.append(sym)
+      style.rules.append(rule)
+      mm.append_style('foo', style)
+      lyr.styles.append('foo')
+      mm.layers.append(lyr)
+      mm.zoom_to_box(expenv)
+      im = mapnik.Image(mm.width, mm.height)
+      t0 = time.time() # we want wall time to include IO waits
+      mapnik.render(mm, im)
+      lap = time.time() - t0
+      log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
+      im.save('/tmp/xfull.png') # for debugging
+      hex_v = format(r << 24 | g  << 16 | b  << 8 | a, '08x')
+      hex_a = format(r << 24 | g1 << 16 | b  << 8 | a, '08x')
+      hex_b = format(r << 24 | g  << 16 | b1 << 8 | a, '08x')
+      eq_(hexlify(im.view( 3, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view(13, 3,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 3, 8,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8, 8,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view(13, 8,1,1).tostring()), hex_a);
+      eq_(hexlify(im.view( 3,13,1,1).tostring()), hex_v);
+      eq_(hexlify(im.view( 8,13,1,1).tostring()), hex_b);
+      eq_(hexlify(im.view(13,13,1,1).tostring()), hex_v);
+
+    def test_rgba_8bui_subquery():
+      _test_rgba_subquery('rgba_8bui_subquery', '8BUI', 255, 0, 0, 255, 255, 255)
+
+    #def test_rgba_16bui_subquery():
+    #  _test_rgba_subquery('rgba_16bui_subquery', '16BUI', 65535, 0, 0, 65535, 65535, 65535)
+
+    #def test_rgba_32bui_subquery():
+    #  _test_rgba_subquery('rgba_32bui_subquery', '32BUI')
+
+    atexit.register(postgis_takedown)
+
+def enabled(tname):
+  enabled = len(sys.argv) < 2 or tname in sys.argv
+  if not enabled:
+    print "Skipping " + tname + " as not explicitly enabled"
+  return enabled
+
+if __name__ == "__main__":
+    setup()
+    fail = run_all(eval(x) for x in dir() if x.startswith("test_") and enabled(x))
+    exit(fail)
diff --git a/tests/python_tests/pickling_test.py b/tests/python_tests/pickling_test.py
index 264ade6..772c274 100644
--- a/tests/python_tests/pickling_test.py
+++ b/tests/python_tests/pickling_test.py
@@ -42,4 +42,4 @@ def test_parameters_pickle():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/png_encoding_test.py b/tests/python_tests/png_encoding_test.py
index e2bbc2e..82adf1e 100644
--- a/tests/python_tests/png_encoding_test.py
+++ b/tests/python_tests/png_encoding_test.py
@@ -12,128 +12,153 @@ def setup():
     # from another directory we need to chdir()
     os.chdir(execution_path('.'))
 
-tmp_dir = '/tmp/mapnik-png/'
-if not os.path.exists(tmp_dir):
-   os.makedirs(tmp_dir)
-
-opts = [
-'png',
-'png:t=0',
-'png8:m=o',
-'png8:m=o:c=1',
-'png8:m=o:t=0',
-'png8:m=o:c=1:t=0',
-'png8:m=o:t=1',
-'png8:m=o:t=2',
-'png8:m=h',
-'png8:m=h:c=1',
-'png8:m=h:t=0',
-'png8:m=h:c=1:t=0',
-'png8:m=h:t=1',
-'png8:m=h:t=2',
-]
-
-# Todo - use itertools.product
-#z_opts = range(1,9+1)
-#t_opts = range(0,2+1)
-
-def gen_filepath(name,format):
-    return os.path.join('images/support/encoding-opts',name+'-'+format.replace(":","+")+'.png')
-
-generate = False
-
-def test_expected_encodings():
-    im = mapnik.Image(256,256)
-    for opt in opts:
-        expected = gen_filepath('solid',opt)
-        actual = os.path.join(tmp_dir,os.path.basename(expected))
-        if generate or not os.path.exists(expected):
-          print 'generating expected image %s' % expected
-          im.save(expected,opt)
-        else:
-          im.save(actual,opt)
-        eq_(mapnik.Image.open(actual).tostring(),
-            mapnik.Image.open(expected).tostring(),
-            '%s (actual) not == to %s (expected)' % (actual,expected))
-
-    for opt in opts:
-        expected = gen_filepath('blank',opt)
-        actual = os.path.join(tmp_dir,os.path.basename(expected))
-        if generate or not os.path.exists(expected):
-          print 'generating expected image %s' % expected
-          im.save(expected,opt)
-        else:
-          im.save(actual,opt)
-        eq_(mapnik.Image.open(actual).tostring(),
-            mapnik.Image.open(expected).tostring(),
-            '%s (actual) not == to %s (expected)' % (actual,expected))
-
-def test_transparency_levels():
-    # create partial transparency image
-    im = mapnik.Image(256,256)
-    im.background = mapnik.Color('rgba(255,255,255,.5)')
-    c2 = mapnik.Color('rgba(255,255,0,.2)')
-    c3 = mapnik.Color('rgb(0,255,255)')
-    for y in range(0,im.height()/2):
-        for x in range(0,im.width()/2):
-            im.set_pixel(x,y,c2)
-    for y in range(im.height()/2,im.height()):
-        for x in range(im.width()/2,im.width()):
-            im.set_pixel(x,y,c3)
-
-    t0 = tmp_dir + 'white0.png'
-    t2 = tmp_dir + 'white2.png'
-    t1 = tmp_dir + 'white1.png'
-
-    # octree
-    format = 'png8:m=o:t=0'
-    im.save(t0,format)
-    im_in = mapnik.Image.open(t0)
-    t0_len = len(im_in.tostring(format))
-    eq_(t0_len,len(mapnik.Image.open('images/support/transparency/white0.png').tostring(format)))
-    format = 'png8:m=o:t=1'
-    im.save(t1,format)
-    im_in = mapnik.Image.open(t1)
-    t1_len = len(im_in.tostring(format))
-    eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white1.png').tostring(format)))
-    format = 'png8:m=o:t=2'
-    im.save(t2,format)
-    im_in = mapnik.Image.open(t2)
-    t2_len = len(im_in.tostring(format))
-    eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white2.png').tostring(format)))
-
-    eq_(t0_len < t1_len < t2_len,True)
-
-    # hextree
-    format = 'png8:m=h:t=0'
-    im.save(t0,format)
-    im_in = mapnik.Image.open(t0)
-    t0_len = len(im_in.tostring(format))
-    eq_(t0_len,len(mapnik.Image.open('images/support/transparency/white0.png').tostring(format)))
-    format = 'png8:m=h:t=1'
-    im.save(t1,format)
-    im_in = mapnik.Image.open(t1)
-    t1_len = len(im_in.tostring(format))
-    eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white1.png').tostring(format)))
-    format = 'png8:m=h:t=2'
-    im.save(t2,format)
-    im_in = mapnik.Image.open(t2)
-    t2_len = len(im_in.tostring(format))
-    eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white2.png').tostring(format)))
-
-    eq_(t0_len < t1_len < t2_len,True)
-
-def test_transparency_levels_aerial():
-    im = mapnik.Image.open('../data/images/12_654_1580.png')
-    im_in = mapnik.Image.open('./images/support/transparency/aerial_rgba.png')
-    eq_(len(im.tostring('png')),len(im_in.tostring('png')))
-
-    im_in = mapnik.Image.open('./images/support/transparency/aerial_rgb.png')
-    eq_(len(im.tostring('png')),len(im_in.tostring('png')))
-    eq_(len(im.tostring('png:t=0')),len(im_in.tostring('png:t=0')))
-    eq_(len(im.tostring('png:t=0')) == len(im_in.tostring('png')), False)
-
+if mapnik.has_png():
+    tmp_dir = '/tmp/mapnik-png/'
+    if not os.path.exists(tmp_dir):
+       os.makedirs(tmp_dir)
+
+    opts = [
+    'png32',
+    'png32:t=0',
+    'png8:m=o',
+    'png8:m=o:c=1',
+    'png8:m=o:t=0',
+    'png8:m=o:c=1:t=0',
+    'png8:m=o:t=1',
+    'png8:m=o:t=2',
+    'png8:m=h',
+    'png8:m=h:c=1',
+    'png8:m=h:t=0',
+    'png8:m=h:c=1:t=0',
+    'png8:m=h:t=1',
+    'png8:m=h:t=2',
+    'png32:e=miniz',
+    'png8:e=miniz'
+    ]
+
+    # Todo - use itertools.product
+    #z_opts = range(1,9+1)
+    #t_opts = range(0,2+1)
+
+    def gen_filepath(name,format):
+        return os.path.join('images/support/encoding-opts',name+'-'+format.replace(":","+")+'.png')
+
+    generate = False
+
+    def test_expected_encodings():
+        # blank image
+        im = mapnik.Image(256,256)
+        for opt in opts:
+            expected = gen_filepath('solid',opt)
+            actual = os.path.join(tmp_dir,os.path.basename(expected))
+            if generate or not os.path.exists(expected):
+              print 'generating expected image %s' % expected
+              im.save(expected,opt)
+            else:
+              im.save(actual,opt)
+              eq_(mapnik.Image.open(actual).tostring('png32'),
+                mapnik.Image.open(expected).tostring('png32'),
+                '%s (actual) not == to %s (expected)' % (actual,expected))
+
+        # solid image
+        im.background = mapnik.Color('green');
+        for opt in opts:
+            expected = gen_filepath('blank',opt)
+            actual = os.path.join(tmp_dir,os.path.basename(expected))
+            if generate or not os.path.exists(expected):
+              print 'generating expected image %s' % expected
+              im.save(expected,opt)
+            else:
+              im.save(actual,opt)
+              eq_(mapnik.Image.open(actual).tostring('png32'),
+                mapnik.Image.open(expected).tostring('png32'),
+                '%s (actual) not == to %s (expected)' % (actual,expected))
+
+        # aerial
+        im = mapnik.Image.open('./images/support/transparency/aerial_rgba.png')
+        for opt in opts:
+            expected = gen_filepath('aerial_rgba',opt)
+            actual = os.path.join(tmp_dir,os.path.basename(expected))
+            if generate or not os.path.exists(expected):
+              print 'generating expected image %s' % expected
+              im.save(expected,opt)
+            else:
+              im.save(actual,opt)
+              eq_(mapnik.Image.open(actual).tostring('png32'),
+                mapnik.Image.open(expected).tostring('png32'),
+                '%s (actual) not == to %s (expected)' % (actual,expected))
+
+    def test_transparency_levels():
+        # create partial transparency image
+        im = mapnik.Image(256,256)
+        im.background = mapnik.Color('rgba(255,255,255,.5)')
+        c2 = mapnik.Color('rgba(255,255,0,.2)')
+        c3 = mapnik.Color('rgb(0,255,255)')
+        for y in range(0,im.height()/2):
+            for x in range(0,im.width()/2):
+                im.set_pixel(x,y,c2)
+        for y in range(im.height()/2,im.height()):
+            for x in range(im.width()/2,im.width()):
+                im.set_pixel(x,y,c3)
+
+        t0 = tmp_dir + 'white0.png'
+        t2 = tmp_dir + 'white2.png'
+        t1 = tmp_dir + 'white1.png'
+
+        # octree
+        format = 'png8:m=o:t=0'
+        im.save(t0,format)
+        im_in = mapnik.Image.open(t0)
+        t0_len = len(im_in.tostring(format))
+        eq_(t0_len,len(mapnik.Image.open('images/support/transparency/white0.png').tostring(format)))
+        format = 'png8:m=o:t=1'
+        im.save(t1,format)
+        im_in = mapnik.Image.open(t1)
+        t1_len = len(im_in.tostring(format))
+        eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white1.png').tostring(format)))
+        format = 'png8:m=o:t=2'
+        im.save(t2,format)
+        im_in = mapnik.Image.open(t2)
+        t2_len = len(im_in.tostring(format))
+        eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white2.png').tostring(format)))
+
+        eq_(t0_len < t1_len < t2_len,True)
+
+        # hextree
+        format = 'png8:m=h:t=0'
+        im.save(t0,format)
+        im_in = mapnik.Image.open(t0)
+        t0_len = len(im_in.tostring(format))
+        eq_(t0_len,len(mapnik.Image.open('images/support/transparency/white0.png').tostring(format)))
+        format = 'png8:m=h:t=1'
+        im.save(t1,format)
+        im_in = mapnik.Image.open(t1)
+        t1_len = len(im_in.tostring(format))
+        eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white1.png').tostring(format)))
+        format = 'png8:m=h:t=2'
+        im.save(t2,format)
+        im_in = mapnik.Image.open(t2)
+        t2_len = len(im_in.tostring(format))
+        eq_(len(im.tostring(format)),len(mapnik.Image.open('images/support/transparency/white2.png').tostring(format)))
+
+        eq_(t0_len < t1_len < t2_len,True)
+
+    def test_transparency_levels_aerial():
+        im = mapnik.Image.open('../data/images/12_654_1580.png')
+        im_in = mapnik.Image.open('./images/support/transparency/aerial_rgba.png')
+        eq_(len(im.tostring('png8')),len(im_in.tostring('png8')))
+        eq_(len(im.tostring('png32')),len(im_in.tostring('png32')))
+
+        im_in = mapnik.Image.open('./images/support/transparency/aerial_rgb.png')
+        eq_(len(im.tostring('png32')),len(im_in.tostring('png32')))
+        eq_(len(im.tostring('png32:t=0')),len(im_in.tostring('png32:t=0')))
+        eq_(len(im.tostring('png32:t=0')) == len(im_in.tostring('png32')), False)
+        eq_(len(im.tostring('png8')),len(im_in.tostring('png8')))
+        eq_(len(im.tostring('png8:t=0')),len(im_in.tostring('png8:t=0')))
+        # unlike png32 paletted images without alpha will look the same even if no alpha is forced
+        eq_(len(im.tostring('png8:t=0')) == len(im_in.tostring('png8')), True)
+        eq_(len(im.tostring('png8:t=0:m=o')) == len(im_in.tostring('png8:m=o')), True)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
\ No newline at end of file
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/pngsuite_test.py b/tests/python_tests/pngsuite_test.py
index 86ae7f6..26c2456 100644
--- a/tests/python_tests/pngsuite_test.py
+++ b/tests/python_tests/pngsuite_test.py
@@ -32,4 +32,4 @@ def test_broken_pngs():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/postgis_test.py b/tests/python_tests/postgis_test.py
index 3da601a..13f46a0 100644
--- a/tests/python_tests/postgis_test.py
+++ b/tests/python_tests/postgis_test.py
@@ -23,7 +23,11 @@ def call(cmd,silent=False):
     stdin, stderr = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate()
     if not stderr:
         return stdin.strip()
-    elif not silent and not 'NOTICE' in stderr:
+    elif not silent and 'error' in stderr.lower() \
+        or 'not found' in stderr.lower() \
+        or 'could not connect' in stderr.lower() \
+        or 'bad connection' in stderr.lower() \
+        or 'not recognized as an internal' in stderr.lower():
         raise RuntimeError(stderr.strip())
 
 def psql_can_connect():
@@ -152,6 +156,46 @@ INSERT INTO test10(gid, bool_field, geom) values (2, FALSE, ST_MakePoint(1,1));
 INSERT INTO test10(gid, bool_field, geom) values (3, null, ST_MakePoint(1,1));
 '''
 
+insert_table_11 = """
+CREATE TABLE test11(gid serial PRIMARY KEY, label varchar(40), geom geometry);
+INSERT INTO test11(label,geom) values ('label_1',GeomFromEWKT('SRID=4326;POINT(0 0)'));
+INSERT INTO test11(label,geom) values ('label_2',GeomFromEWKT('SRID=4326;POINT(-2 2)'));
+INSERT INTO test11(label,geom) values ('label_3',GeomFromEWKT('SRID=4326;MULTIPOINT(2 1,1 2)'));
+INSERT INTO test11(label,geom) values ('label_4',GeomFromEWKT('SRID=4326;LINESTRING(0 0,1 1,1 2)'));
+INSERT INTO test11(label,geom) values ('label_5',GeomFromEWKT('SRID=4326;MULTILINESTRING((1 0,0 1,3 2),(3 2,5 4))'));
+INSERT INTO test11(label,geom) values ('label_6',GeomFromEWKT('SRID=4326;POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))'));
+INSERT INTO test11(label,geom) values ('label_7',GeomFromEWKT('SRID=4326;MULTIPOLYGON(((1 1,3 1,3 3,1 3,1 1),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))'));
+INSERT INTO test11(label,geom) values ('label_8',GeomFromEWKT('SRID=4326;GEOMETRYCOLLECTION(POLYGON((1 1, 2 1, 2 2, 1 2,1 1)),POINT(2 3),LINESTRING(2 3,3 4))'));
+"""
+
+insert_table_12 = """
+CREATE TABLE test12(gid serial PRIMARY KEY, name varchar(40), geom geometry);
+INSERT INTO test12(name,geom) values ('Point',GeomFromEWKT('SRID=4326;POINT(0 0)'));
+INSERT INTO test12(name,geom) values ('PointZ',GeomFromEWKT('SRID=4326;POINTZ(0 0 0)'));
+INSERT INTO test12(name,geom) values ('PointM',GeomFromEWKT('SRID=4326;POINTM(0 0 0)'));
+INSERT INTO test12(name,geom) values ('PointZM',GeomFromEWKT('SRID=4326;POINTZM(0 0 0 0)'));
+INSERT INTO test12(name,geom) values ('MultiPoint',GeomFromEWKT('SRID=4326;MULTIPOINT(0 0, 1 1)'));
+INSERT INTO test12(name,geom) values ('MultiPointZ',GeomFromEWKT('SRID=4326;MULTIPOINTZ(0 0 0, 1 1 1)'));
+INSERT INTO test12(name,geom) values ('MultiPointM',GeomFromEWKT('SRID=4326;MULTIPOINTM(0 0 0, 1 1 1)'));
+INSERT INTO test12(name,geom) values ('MultiPointZM',GeomFromEWKT('SRID=4326;MULTIPOINTZM(0 0 0 0, 1 1 1 1)'));
+INSERT INTO test12(name,geom) values ('LineString',GeomFromEWKT('SRID=4326;LINESTRING(0 0, 1 1)'));
+INSERT INTO test12(name,geom) values ('LineStringZ',GeomFromEWKT('SRID=4326;LINESTRINGZ(0 0 0, 1 1 1)'));
+INSERT INTO test12(name,geom) values ('LineStringM',GeomFromEWKT('SRID=4326;LINESTRINGM(0 0 0, 1 1 1)'));
+INSERT INTO test12(name,geom) values ('LineStringZM',GeomFromEWKT('SRID=4326;LINESTRINGZM(0 0 0 0, 1 1 1 1)'));
+INSERT INTO test12(name,geom) values ('Polygon',GeomFromEWKT('SRID=4326;POLYGON((0 0, 1 1, 2 2, 0 0))'));
+INSERT INTO test12(name,geom) values ('PolygonZ',GeomFromEWKT('SRID=4326;POLYGONZ((0 0 0, 1 1 1, 2 2 2, 0 0 0))'));
+INSERT INTO test12(name,geom) values ('PolygonM',GeomFromEWKT('SRID=4326;POLYGONZ((0 0 0, 1 1 1, 2 2 2, 0 0 0))'));
+INSERT INTO test12(name,geom) values ('PolygonZM',GeomFromEWKT('SRID=4326;POLYGONZM((0 0 0 0, 1 1 1 1, 2 2 2 2, 0 0 0 0))'));
+INSERT INTO test12(name,geom) values ('MultiLineString',GeomFromEWKT('SRID=4326;MULTILINESTRING((0 0, 1 1),(2 2, 3 3))'));
+INSERT INTO test12(name,geom) values ('MultiLineStringZ',GeomFromEWKT('SRID=4326;MULTILINESTRINGZ((0 0 0, 1 1 1),(2 2 2, 3 3 3))'));
+INSERT INTO test12(name,geom) values ('MultiLineStringM',GeomFromEWKT('SRID=4326;MULTILINESTRINGM((0 0 0, 1 1 1),(2 2 2, 3 3 3))'));
+INSERT INTO test12(name,geom) values ('MultiLineStringZM',GeomFromEWKT('SRID=4326;MULTILINESTRINGZM((0 0 0 0, 1 1 1 1),(2 2 2 2, 3 3 3 3))'));
+INSERT INTO test12(name,geom) values ('MultiPolygon',GeomFromEWKT('SRID=4326;MULTIPOLYGON(((0 0, 1 1, 2 2, 0 0)),((0 0, 1 1, 2 2, 0 0)))'));
+INSERT INTO test12(name,geom) values ('MultiPolygonZ',GeomFromEWKT('SRID=4326;MULTIPOLYGONZ(((0 0 0, 1 1 1, 2 2 2, 0 0 0)),((0 0 0, 1 1 1, 2 2 2, 0 0 0)))'));
+INSERT INTO test12(name,geom) values ('MultiPolygonM',GeomFromEWKT('SRID=4326;MULTIPOLYGONM(((0 0 0, 1 1 1, 2 2 2, 0 0 0)),((0 0 0, 1 1 1, 2 2 2, 0 0 0)))'));
+INSERT INTO test12(name,geom) values ('MultiPolygonZM',GeomFromEWKT('SRID=4326;MULTIPOLYGONZM(((0 0 0 0, 1 1 1 1, 2 2 2 2, 0 0 0 0)),((0 0 0 0, 1 1 1 1, 2 2 2 2, 0 0 0 0)))'));
+"""
+
 
 def postgis_setup():
     call('dropdb %s' % MAPNIK_TEST_DBNAME,silent=True)
@@ -169,6 +213,8 @@ def postgis_setup():
     call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_8),silent=False)
     call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_9),silent=False)
     call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_10),silent=False)
+    call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_11),silent=False)
+    call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_12),silent=False)
 
 def postgis_takedown():
     pass
@@ -236,7 +282,7 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
         except StopIteration:
             pass
         eq_(feature,None)
-        eq_(ds.describe()['geometry_type'],mapnik.DataGeometryType.Collection)
+        eq_(ds.describe()['geometry_type'],None)
 
     def test_geometry_detection():
         ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table='test',
@@ -475,16 +521,20 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
                             max_size=20,
                             geometry_field='geom')
         fs = ds.all_features()
+        eq_(len(fs),8)
 
     def test_threaded_create(NUM_THREADS=100):
         # run one to start before thread loop
         # to ensure that a throw stops the test
         # from running all threads
         create_ds()
+        runs = 0
         for i in range(NUM_THREADS):
             t = threading.Thread(target=create_ds)
             t.start()
             t.join()
+            runs +=1
+        eq_(runs,NUM_THREADS)
 
     def create_ds_and_error():
         try:
@@ -492,7 +542,8 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
                                 table='asdfasdfasdfasdfasdf',
                                 max_size=20)
             fs = ds.all_features()
-        except: pass
+        except Exception, e:
+            eq_('in executeQuery' in str(e),True)
 
     def test_threaded_create2(NUM_THREADS=10):
         for i in range(NUM_THREADS):
@@ -656,8 +707,326 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
         fs = ds.featureset()
         feat = fs.next() ## should throw since key_field is null: StopIteration: No more features.
 
+    def test_psql_error_should_not_break_connection_pool():
+        # Bad request, will trigger an error when returning result
+        ds_bad = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table="""(SELECT geom as geom,label::int from test11) as failure_table""",
+                            max_async_connection=5,geometry_field='geom',srid=4326)
+
+        # Good request
+        ds_good = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table="test",
+                            max_async_connection=5,geometry_field='geom',srid=4326)
+
+        # This will/should trigger a PSQL error
+        failed = False
+        try:
+            fs = ds_bad.featureset()
+            for feature in fs:
+                pass
+        except RuntimeError:
+            failed = True
+
+        eq_(failed,True)
+
+        # Should be ok
+        fs = ds_good.featureset()
+        count = 0
+        for feature in fs:
+            count += 1
+        eq_(count,8)
+
+
+    def test_psql_error_should_give_back_connections_opened_for_lower_layers_to_the_pool():
+        map1 = mapnik.Map(600,300)
+        s = mapnik.Style()
+        r = mapnik.Rule()
+        r.symbols.append(mapnik.PolygonSymbolizer())
+        s.rules.append(r)
+        map1.append_style('style',s)
+
+        # This layer will fail after a while
+        buggy_s = mapnik.Style()
+        buggy_r = mapnik.Rule()
+        buggy_r.symbols.append(mapnik.PolygonSymbolizer())
+        buggy_r.filter = mapnik.Filter("[fips] = 'FR'")
+        buggy_s.rules.append(buggy_r)
+        map1.append_style('style for buggy layer',buggy_s)
+        buggy_layer = mapnik.Layer('this layer is buggy at runtime')
+        # We ensure the query wille be long enough
+        buggy_layer.datasource = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table='(SELECT geom as geom, pg_sleep(0.1), fips::int from world_merc) as failure_tabl',
+            max_async_connection=2, max_size=2,asynchronous_request = True, geometry_field='geom')
+        buggy_layer.styles.append('style for buggy layer')
+
+        # The query for this layer will be sent, then the previous layer will raise an exception before results are read
+        forced_canceled_layer = mapnik.Layer('this layer will be canceled when an exception stops map rendering')
+        forced_canceled_layer.datasource = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table='world_merc',
+            max_async_connection=2, max_size=2, asynchronous_request = True, geometry_field='geom')
+        forced_canceled_layer.styles.append('style')
+
+        map1.layers.append(buggy_layer)
+        map1.layers.append(forced_canceled_layer)
+        map1.zoom_all()
+        map2 = mapnik.Map(600,300)
+        map2.background = mapnik.Color('steelblue')
+        s = mapnik.Style()
+        r = mapnik.Rule()
+        r.symbols.append(mapnik.LineSymbolizer())
+        r.symbols.append(mapnik.LineSymbolizer())
+        s.rules.append(r)
+        map2.append_style('style',s)
+        layer1 = mapnik.Layer('layer1')
+        layer1.datasource = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table='world_merc',
+            max_async_connection=2, max_size=2, asynchronous_request = True, geometry_field='geom')
+        layer1.styles.append('style')
+        map2.layers.append(layer1)
+        map2.zoom_all()
+
+        # We expect this to trigger a PSQL error
+        try:
+            mapnik.render_to_file(map1,'/tmp/mapnik-postgis-test-map1.png', 'png')
+            # Test must fail if error was not raised just above
+            eq_(False,True)
+        except RuntimeError:
+            pass
+        # This used to raise an exception before correction of issue 2042
+        mapnik.render_to_file(map2,'/tmp/mapnik-postgis-test-map2.png', 'png')
+
+    def test_handling_of_zm_dimensions():
+        ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,
+                            table='(select gid,ST_CoordDim(geom) as dim,name,geom from test12) as tmp',
+                            geometry_field='geom')
+        eq_(len(ds.fields()),3)
+        eq_(ds.fields(),['gid', 'dim', 'name'])
+        eq_(ds.field_types(),['int', 'int', 'str'])
+        fs = ds.featureset()
+        # Point (2d)
+        feat = fs.next()
+        eq_(feat.id(),1)
+        eq_(feat['gid'],1)
+        eq_(feat['dim'],2)
+        eq_(feat['name'],'Point')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        # PointZ
+        feat = fs.next()
+        eq_(feat.id(),2)
+        eq_(feat['gid'],2)
+        eq_(feat['dim'],3)
+        eq_(feat['name'],'PointZ')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        # PointM
+        feat = fs.next()
+        eq_(feat.id(),3)
+        eq_(feat['gid'],3)
+        eq_(feat['dim'],3)
+        eq_(feat['name'],'PointM')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        # PointZM
+        feat = fs.next()
+        eq_(feat.id(),4)
+        eq_(feat['gid'],4)
+        eq_(feat['dim'],4)
+        eq_(feat['name'],'PointZM')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        # MultiPoint
+        feat = fs.next()
+        eq_(feat.id(),5)
+        eq_(feat['gid'],5)
+        eq_(feat['dim'],2)
+        eq_(feat['name'],'MultiPoint')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        eq_(geoms[1].to_wkt(),'Point(1 1)')
+        # MultiPointZ
+        feat = fs.next()
+        eq_(feat.id(),6)
+        eq_(feat['gid'],6)
+        eq_(feat['dim'],3)
+        eq_(feat['name'],'MultiPointZ')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        eq_(geoms[1].to_wkt(),'Point(1 1)')
+        # MultiPointM
+        feat = fs.next()
+        eq_(feat.id(),7)
+        eq_(feat['gid'],7)
+        eq_(feat['dim'],3)
+        eq_(feat['name'],'MultiPointM')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        eq_(geoms[1].to_wkt(),'Point(1 1)')
+        # MultiPointZM
+        feat = fs.next()
+        eq_(feat.id(),8)
+        eq_(feat['gid'],8)
+        eq_(feat['dim'],4)
+        eq_(feat['name'],'MultiPointZM')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Point(0 0)')
+        eq_(geoms[1].to_wkt(),'Point(1 1)')
+        # LineString
+        feat = fs.next()
+        eq_(feat.id(),9)
+        eq_(feat['gid'],9)
+        eq_(feat['dim'],2)
+        eq_(feat['name'],'LineString')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        # LineStringZ
+        feat = fs.next()
+        eq_(feat.id(),10)
+        eq_(feat['gid'],10)
+        eq_(feat['dim'],3)
+        eq_(feat['name'],'LineStringZ')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        # LineStringM
+        feat = fs.next()
+        eq_(feat.id(),11)
+        eq_(feat['gid'],11)
+        eq_(feat['dim'],3)
+        eq_(feat['name'],'LineStringM')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        # LineStringZM
+        feat = fs.next()
+        eq_(feat.id(),12)
+        eq_(feat['gid'],12)
+        eq_(feat['dim'],4)
+        eq_(feat['name'],'LineStringZM')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        # Polygon
+        feat = fs.next()
+        eq_(feat.id(),13)
+        eq_(feat['gid'],13)
+        eq_(feat['name'],'Polygon')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        # PolygonZ
+        feat = fs.next()
+        eq_(feat.id(),14)
+        eq_(feat['gid'],14)
+        eq_(feat['name'],'PolygonZ')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        # PolygonM
+        feat = fs.next()
+        eq_(feat.id(),15)
+        eq_(feat['gid'],15)
+        eq_(feat['name'],'PolygonM')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        # PolygonZM
+        feat = fs.next()
+        eq_(feat.id(),16)
+        eq_(feat['gid'],16)
+        eq_(feat['name'],'PolygonZM')
+        geoms = feat.geometries()
+        eq_(len(geoms),1)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        # MultiLineString
+        feat = fs.next()
+        eq_(feat.id(),17)
+        eq_(feat['gid'],17)
+        eq_(feat['name'],'MultiLineString')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        eq_(geoms[1].to_wkt(),'LineString(2 2,3 3)')
+        # MultiLineStringZ
+        feat = fs.next()
+        eq_(feat.id(),18)
+        eq_(feat['gid'],18)
+        eq_(feat['name'],'MultiLineStringZ')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        eq_(geoms[1].to_wkt(),'LineString(2 2,3 3)')
+        # MultiLineStringM
+        feat = fs.next()
+        eq_(feat.id(),19)
+        eq_(feat['gid'],19)
+        eq_(feat['name'],'MultiLineStringM')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        eq_(geoms[1].to_wkt(),'LineString(2 2,3 3)')
+        # MultiLineStringZM
+        feat = fs.next()
+        eq_(feat.id(),20)
+        eq_(feat['gid'],20)
+        eq_(feat['name'],'MultiLineStringZM')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'LineString(0 0,1 1)')
+        eq_(geoms[1].to_wkt(),'LineString(2 2,3 3)')
+        # MultiPolygon
+        feat = fs.next()
+        eq_(feat.id(),21)
+        eq_(feat['gid'],21)
+        eq_(feat['name'],'MultiPolygon')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        eq_(geoms[1].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        # MultiPolygonZ
+        feat = fs.next()
+        eq_(feat.id(),22)
+        eq_(feat['gid'],22)
+        eq_(feat['name'],'MultiPolygonZ')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        eq_(geoms[1].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        # MultiPolygonM
+        feat = fs.next()
+        eq_(feat.id(),23)
+        eq_(feat['gid'],23)
+        eq_(feat['name'],'MultiPolygonM')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        eq_(geoms[1].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        # MultiPolygonZM
+        feat = fs.next()
+        eq_(feat.id(),24)
+        eq_(feat['gid'],24)
+        eq_(feat['name'],'MultiPolygonZM')
+        geoms = feat.geometries()
+        eq_(len(geoms),2)
+        eq_(geoms[0].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+        eq_(geoms[1].to_wkt(),'Polygon((0 0,1 1,2 2,0 0))')
+
+    def test_variable_in_subquery1():
+        ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table='''
+           (select * from test where @zoom = 30 ) as tmp''',
+                            geometry_field='geom', srid=4326,
+                            autodetect_key_field=True)
+        fs = ds.featureset(variables={'zoom':30})
+        for id in range(1,5):
+            eq_(fs.next().id(),id)
+
+
     atexit.register(postgis_takedown)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/projection_test.py b/tests/python_tests/projection_test.py
index 41df057..e45b37d 100644
--- a/tests/python_tests/projection_test.py
+++ b/tests/python_tests/projection_test.py
@@ -115,4 +115,4 @@ def test_proj_transform_between_init_and_literal():
 
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/python_plugin_test.py b/tests/python_tests/python_plugin_test.py
index 52703f5..a39272f 100644
--- a/tests/python_tests/python_plugin_test.py
+++ b/tests/python_tests/python_plugin_test.py
@@ -1,160 +1,160 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import os
-import math
-import mapnik
-import sys
-from utilities import execution_path, run_all
-from nose.tools import *
-
-def setup():
-    # All of the paths used are relative, if we run the tests
-    # from another directory we need to chdir()
-    os.chdir(execution_path('.'))
-
-class PointDatasource(mapnik.PythonDatasource):
-    def __init__(self):
-        super(PointDatasource, self).__init__(
-                geometry_type = mapnik.DataGeometryType.Point,
-                envelope = mapnik.Box2d(0,-10,100,110),
-                data_type = mapnik.DataType.Vector
-        )
-
-    def features(self, query):
-        return mapnik.PythonDatasource.wkt_features(
-            keys = ('label',),
-            features = (
-                ( 'POINT (5 6)', { 'label': 'foo-bar'} ),
-                ( 'POINT (60 50)', { 'label': 'buzz-quux'} ),
-            )
-        )
-
-class ConcentricCircles(object):
-    def __init__(self, centre, bounds, step=1):
-        self.centre = centre
-        self.bounds = bounds
-        self.step = step
-
-    class Iterator(object):
-        def __init__(self, container):
-            self.container = container
-
-            centre = self.container.centre
-            bounds = self.container.bounds
-            step = self.container.step
-
-            self.radius = step
-
-        def next(self):
-            points = []
-            for alpha in xrange(0, 361, 5):
-                x = math.sin(math.radians(alpha)) * self.radius + self.container.centre[0]
-                y = math.cos(math.radians(alpha)) * self.radius + self.container.centre[1]
-                points.append('%s %s' % (x,y))
-            circle = 'POLYGON ((' + ','.join(points) + '))'
-
-            # has the circle grown so large that the boundary is entirely within it?
-            tl = (self.container.bounds.maxx, self.container.bounds.maxy)
-            tr = (self.container.bounds.maxx, self.container.bounds.maxy)
-            bl = (self.container.bounds.minx, self.container.bounds.miny)
-            br = (self.container.bounds.minx, self.container.bounds.miny)
-            def within_circle(p):
-                delta_x = p[0] - self.container.centre[0]
-                delta_y = p[0] - self.container.centre[0]
-                return delta_x*delta_x + delta_y*delta_y < self.radius*self.radius
-
-            if all(within_circle(p) for p in (tl,tr,bl,br)):
-                raise StopIteration()
-
-            self.radius += self.container.step
-            return ( circle, { } )
-
-    def __iter__(self):
-        return ConcentricCircles.Iterator(self)
-
-class CirclesDatasource(mapnik.PythonDatasource):
-    def __init__(self, centre_x=-20, centre_y=0, step=10):
-        super(CirclesDatasource, self).__init__(
-                geometry_type = mapnik.DataGeometryType.Polygon,
-                envelope = mapnik.Box2d(-180, -90, 180, 90),
-                data_type = mapnik.DataType.Vector
-        )
-
-        # note that the plugin loader will set all arguments to strings and will not try to parse them
-        centre_x = int(centre_x)
-        centre_y = int(centre_y)
-        step = int(step)
-
-        self.centre_x = centre_x
-        self.centre_y = centre_y
-        self.step = step
-
-    def features(self, query):
-        centre = (self.centre_x, self.centre_y)
-
-        return mapnik.PythonDatasource.wkt_features(
-            keys = (),
-            features = ConcentricCircles(centre, query.bbox, self.step)
-        )
-
-if 'python' in mapnik.DatasourceCache.plugin_names():
-    # make sure we can load from ourself as a module
-    sys.path.append(execution_path('.'))
-
-    def test_python_point_init():
-        ds = mapnik.Python(factory='python_plugin_test:PointDatasource')
-        e = ds.envelope()
-
-        assert_almost_equal(e.minx, 0, places=7)
-        assert_almost_equal(e.miny, -10, places=7)
-        assert_almost_equal(e.maxx, 100, places=7)
-        assert_almost_equal(e.maxy, 110, places=7)
-
-    def test_python_circle_init():
-        ds = mapnik.Python(factory='python_plugin_test:CirclesDatasource')
-        e = ds.envelope()
-
-        assert_almost_equal(e.minx, -180, places=7)
-        assert_almost_equal(e.miny, -90, places=7)
-        assert_almost_equal(e.maxx, 180, places=7)
-        assert_almost_equal(e.maxy, 90, places=7)
-
-    def test_python_circle_init_with_args():
-        ds = mapnik.Python(factory='python_plugin_test:CirclesDatasource', centre_x=40, centre_y=7)
-        e = ds.envelope()
-
-        assert_almost_equal(e.minx, -180, places=7)
-        assert_almost_equal(e.miny, -90, places=7)
-        assert_almost_equal(e.maxx, 180, places=7)
-        assert_almost_equal(e.maxy, 90, places=7)
-
-    def test_python_point_rendering():
-        m = mapnik.Map(512,512)
-        mapnik.load_map(m,'../data/python_plugin/python_point_datasource.xml')
-        m.zoom_all()
-        im = mapnik.Image(512,512)
-        mapnik.render(m,im)
-        actual = '/tmp/mapnik-python-point-render1.png'
-        expected = 'images/support/mapnik-python-point-render1.png'
-        im.save(actual)
-        expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(),
-                'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
-
-    def test_python_circle_rendering():
-        m = mapnik.Map(512,512)
-        mapnik.load_map(m,'../data/python_plugin/python_circle_datasource.xml')
-        m.zoom_all()
-        im = mapnik.Image(512,512)
-        mapnik.render(m,im)
-        actual = '/tmp/mapnik-python-circle-render1.png'
-        expected = 'images/support/mapnik-python-circle-render1.png'
-        im.save(actual)
-        expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(),
-                'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
-
-if __name__ == "__main__":
-    setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+# #!/usr/bin/env python
+# # -*- coding: utf-8 -*-
+
+# import os
+# import math
+# import mapnik
+# import sys
+# from utilities import execution_path, run_all
+# from nose.tools import *
+
+# def setup():
+#     # All of the paths used are relative, if we run the tests
+#     # from another directory we need to chdir()
+#     os.chdir(execution_path('.'))
+
+# class PointDatasource(mapnik.PythonDatasource):
+#     def __init__(self):
+#         super(PointDatasource, self).__init__(
+#                 geometry_type = mapnik.DataGeometryType.Point,
+#                 envelope = mapnik.Box2d(0,-10,100,110),
+#                 data_type = mapnik.DataType.Vector
+#         )
+
+#     def features(self, query):
+#         return mapnik.PythonDatasource.wkt_features(
+#             keys = ('label',),
+#             features = (
+#                 ( 'POINT (5 6)', { 'label': 'foo-bar'} ),
+#                 ( 'POINT (60 50)', { 'label': 'buzz-quux'} ),
+#             )
+#         )
+
+# class ConcentricCircles(object):
+#     def __init__(self, centre, bounds, step=1):
+#         self.centre = centre
+#         self.bounds = bounds
+#         self.step = step
+
+#     class Iterator(object):
+#         def __init__(self, container):
+#             self.container = container
+
+#             centre = self.container.centre
+#             bounds = self.container.bounds
+#             step = self.container.step
+
+#             self.radius = step
+
+#         def next(self):
+#             points = []
+#             for alpha in xrange(0, 361, 5):
+#                 x = math.sin(math.radians(alpha)) * self.radius + self.container.centre[0]
+#                 y = math.cos(math.radians(alpha)) * self.radius + self.container.centre[1]
+#                 points.append('%s %s' % (x,y))
+#             circle = 'POLYGON ((' + ','.join(points) + '))'
+
+#             # has the circle grown so large that the boundary is entirely within it?
+#             tl = (self.container.bounds.maxx, self.container.bounds.maxy)
+#             tr = (self.container.bounds.maxx, self.container.bounds.maxy)
+#             bl = (self.container.bounds.minx, self.container.bounds.miny)
+#             br = (self.container.bounds.minx, self.container.bounds.miny)
+#             def within_circle(p):
+#                 delta_x = p[0] - self.container.centre[0]
+#                 delta_y = p[0] - self.container.centre[0]
+#                 return delta_x*delta_x + delta_y*delta_y < self.radius*self.radius
+
+#             if all(within_circle(p) for p in (tl,tr,bl,br)):
+#                 raise StopIteration()
+
+#             self.radius += self.container.step
+#             return ( circle, { } )
+
+#     def __iter__(self):
+#         return ConcentricCircles.Iterator(self)
+
+# class CirclesDatasource(mapnik.PythonDatasource):
+#     def __init__(self, centre_x=-20, centre_y=0, step=10):
+#         super(CirclesDatasource, self).__init__(
+#                 geometry_type = mapnik.DataGeometryType.Polygon,
+#                 envelope = mapnik.Box2d(-180, -90, 180, 90),
+#                 data_type = mapnik.DataType.Vector
+#         )
+
+#         # note that the plugin loader will set all arguments to strings and will not try to parse them
+#         centre_x = int(centre_x)
+#         centre_y = int(centre_y)
+#         step = int(step)
+
+#         self.centre_x = centre_x
+#         self.centre_y = centre_y
+#         self.step = step
+
+#     def features(self, query):
+#         centre = (self.centre_x, self.centre_y)
+
+#         return mapnik.PythonDatasource.wkt_features(
+#             keys = (),
+#             features = ConcentricCircles(centre, query.bbox, self.step)
+#         )
+
+# if 'python' in mapnik.DatasourceCache.plugin_names():
+#     # make sure we can load from ourself as a module
+#     sys.path.append(execution_path('.'))
+
+#     def test_python_point_init():
+#         ds = mapnik.Python(factory='python_plugin_test:PointDatasource')
+#         e = ds.envelope()
+
+#         assert_almost_equal(e.minx, 0, places=7)
+#         assert_almost_equal(e.miny, -10, places=7)
+#         assert_almost_equal(e.maxx, 100, places=7)
+#         assert_almost_equal(e.maxy, 110, places=7)
+
+#     def test_python_circle_init():
+#         ds = mapnik.Python(factory='python_plugin_test:CirclesDatasource')
+#         e = ds.envelope()
+
+#         assert_almost_equal(e.minx, -180, places=7)
+#         assert_almost_equal(e.miny, -90, places=7)
+#         assert_almost_equal(e.maxx, 180, places=7)
+#         assert_almost_equal(e.maxy, 90, places=7)
+
+#     def test_python_circle_init_with_args():
+#         ds = mapnik.Python(factory='python_plugin_test:CirclesDatasource', centre_x=40, centre_y=7)
+#         e = ds.envelope()
+
+#         assert_almost_equal(e.minx, -180, places=7)
+#         assert_almost_equal(e.miny, -90, places=7)
+#         assert_almost_equal(e.maxx, 180, places=7)
+#         assert_almost_equal(e.maxy, 90, places=7)
+
+#     def test_python_point_rendering():
+#         m = mapnik.Map(512,512)
+#         mapnik.load_map(m,'../data/python_plugin/python_point_datasource.xml')
+#         m.zoom_all()
+#         im = mapnik.Image(512,512)
+#         mapnik.render(m,im)
+#         actual = '/tmp/mapnik-python-point-render1.png'
+#         expected = 'images/support/mapnik-python-point-render1.png'
+#         im.save(actual)
+#         expected_im = mapnik.Image.open(expected)
+#         eq_(im.tostring('png32'),expected_im.tostring('png32'),
+#                 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+
+#     def test_python_circle_rendering():
+#         m = mapnik.Map(512,512)
+#         mapnik.load_map(m,'../data/python_plugin/python_circle_datasource.xml')
+#         m.zoom_all()
+#         im = mapnik.Image(512,512)
+#         mapnik.render(m,im)
+#         actual = '/tmp/mapnik-python-circle-render1.png'
+#         expected = 'images/support/mapnik-python-circle-render1.png'
+#         im.save(actual)
+#         expected_im = mapnik.Image.open(expected)
+#         eq_(im.tostring('png32'),expected_im.tostring('png32'),
+#                 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+
+# if __name__ == "__main__":
+#     setup()
+#     run_all(eval(x) for x in dir() if x.startswith("test_"))
diff --git a/tests/python_tests/query_test.py b/tests/python_tests/query_test.py
index 074614a..6138f6e 100644
--- a/tests/python_tests/query_test.py
+++ b/tests/python_tests/query_test.py
@@ -34,4 +34,4 @@ def test_query_resolution():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/query_tolerance_test.py b/tests/python_tests/query_tolerance_test.py
index 092f0f3..420d180 100644
--- a/tests/python_tests/query_tolerance_test.py
+++ b/tests/python_tests/query_tolerance_test.py
@@ -40,4 +40,4 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/raster_colorizer_test.py b/tests/python_tests/raster_colorizer_test.py
index 3bdb509..e0284d2 100644
--- a/tests/python_tests/raster_colorizer_test.py
+++ b/tests/python_tests/raster_colorizer_test.py
@@ -9,22 +9,6 @@ def setup():
     # from another directory we need to chdir()
     os.chdir(execution_path('.'))
 
-def test_gen_map():
-    mapxmlfile = '../data/good_maps/raster_colorizer.xml'
-    mapxmloutputfile = 'raster_colorizer_test_save.xml'
-    outputfile = 'raster_colorizer_test.png'
-
-    m = mapnik.Map(800, 600)
-    try:
-        mapnik.load_map(m, mapxmlfile)
-        mapnik.save_map(m, mapxmloutputfile)
-        m.zoom_all()
-        mapnik.render_to_file(m, outputfile)
-    except RuntimeError,e:
-        # only test datasources that we have installed
-        if not 'Could not create datasource' in str(e):
-            raise RuntimeError(str(e))
-
 #test discrete colorizer mode
 def test_get_color_discrete():
     #setup
@@ -103,4 +87,4 @@ def test_stop_label():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/raster_colormapped_test.py b/tests/python_tests/raster_colormapped_test.py
deleted file mode 100644
index de56346..0000000
--- a/tests/python_tests/raster_colormapped_test.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#coding=utf8
-import os
-import mapnik
-from utilities import execution_path, run_all
-from nose.tools import *
-
-def setup():
-    # All of the paths used are relative, if we run the tests
-    # from another directory we need to chdir()
-    os.chdir(execution_path('.'))
-
-if 'gdal' in mapnik.DatasourceCache.plugin_names():
-
-    def test_vrt_rendering():
-        m = mapnik.Map(512,512)
-        mapnik.load_map(m,'../data/good_maps/vrt_colortable.xml')
-        m.zoom_all()
-        im = mapnik.Image(512,512)
-        mapnik.render(m,im)
-        actual = '/tmp/vrt_colortable.png'
-        expected = 'images/support/vrt_colortable.png'
-        im.save(actual)
-        expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected(%s)' % (actual,'tests/python_tests/'+ expected))
-
-    def test_tif_rendering_nodata():
-        m = mapnik.Map(512,512)
-        mapnik.load_map(m,'../data/good_maps/tiff_colortable.xml')
-        m.zoom_all()
-        im = mapnik.Image(512,512)
-        mapnik.render(m,im)
-        actual = '/tmp/tif_colortable.png'
-        expected = 'images/support/tif_colortable.png'
-        im.save(actual)
-        expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected(%s)' % (actual,'tests/python_tests/'+ expected))
-
-if __name__ == "__main__":
-    setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
diff --git a/tests/python_tests/raster_symbolizer_test.py b/tests/python_tests/raster_symbolizer_test.py
index 826514a..2c7ba1d 100644
--- a/tests/python_tests/raster_symbolizer_test.py
+++ b/tests/python_tests/raster_symbolizer_test.py
@@ -26,7 +26,7 @@ def test_dataraster_coloring():
         sym = mapnik.RasterSymbolizer()
         # Assigning a colorizer to the RasterSymbolizer tells the later
         # that it should use it to colorize the raw data raster
-        sym.colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_DISCRETE, mapnik.Color("transparent"))
+        colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_DISCRETE, mapnik.Color("transparent"))
 
         for value, color in [
             (  0, "#0044cc"),
@@ -41,7 +41,8 @@ def test_dataraster_coloring():
             ( 90, "#660066"),
             ( 200, "transparent"),
         ]:
-            sym.colorizer.add_stop(value, mapnik.Color(color))
+            colorizer.add_stop(value, mapnik.Color(color))
+        sym.colorizer = colorizer;
         rule.symbols.append(sym)
         style.rules.append(rule)
         _map.append_style('foo', style)
@@ -90,7 +91,7 @@ def test_dataraster_query_point():
 
 def test_load_save_map():
     map = mapnik.Map(256,256)
-    in_map = "../data/good_maps/raster_symbolizer.xml"
+    in_map = "../visual_tests/styles/raster_symbolizer.xml"
     try:
         mapnik.load_map(map, in_map)
 
@@ -195,4 +196,4 @@ def test_raster_warping_does_not_overclip_source():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/render_grid_test.py b/tests/python_tests/render_grid_test.py
index f998735..c60b4c2 100644
--- a/tests/python_tests/render_grid_test.py
+++ b/tests/python_tests/render_grid_test.py
@@ -15,371 +15,341 @@ def setup():
     # from another directory we need to chdir()
     os.chdir(execution_path('.'))
 
-def show_grids(name,g1,g2):
-    g1_file = '/tmp/mapnik-%s-actual.json' % name
-    open(g1_file,'w').write(json.dumps(g1,sort_keys=True))
-    g2_file = '/tmp/mapnik-%s-expected.json' % name
-    open(g2_file,'w').write(json.dumps(g2,sort_keys=True))
-    val = 'JSON does not match  ->\n'
-    if g1['grid'] != g2['grid']:
-       val += ' X grid does not match\n'
-    else:
-       val += ' ✓ grid matches\n'
-    if g1['data'].keys() != g2['data'].keys():
-       val += ' X data does not match\n'
-    else:
-       val += ' ✓ data matches\n'
-    if g1['keys'] != g2['keys']:
-       val += ' X keys do not\n'
-    else:
-       val += ' ✓ keys match\n'
-    val += '\n\t%s\n\t%s' % (g1_file,g2_file)
-    return val
-
-def show_grids2(name,g1,g2):
-    g2_expected = '../data/grids/mapnik-%s-actual.json' % name
-    if not os.path.exists(g2_expected):
-        # create test fixture based on actual results
-        open(g2_expected,'a+').write(json.dumps(g1,sort_keys=True))
-        return
-    g1_file = '/tmp/mapnik-%s-actual.json' % name
-    open(g1_file,'w').write(json.dumps(g1,sort_keys=True))
-    val = 'JSON does not match  ->\n'
-    if g1['grid'] != g2['grid']:
-       val += ' X grid does not match\n'
-    else:
-       val += ' ✓ grid matches\n'
-    if g1['data'].keys() != g2['data'].keys():
-       val += ' X data does not match\n'
-    else:
-       val += ' ✓ data matches\n'
-    if g1['keys'] != g2['keys']:
-       val += ' X keys do not\n'
-    else:
-       val += ' ✓ keys match\n'
-    val += '\n\t%s\n\t%s' % (g1_file,g2_expected)
-    return val
-
-# first pass impl where resolution is passed as render
-# time rather than encoding time, likely will be deprecated soon
-grid_correct_old = {"keys": ["", "North West", "North East", "South West", "South East"], "data": {"South East": {"Name": "South East"}, "North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                           [...]
-
-# now using svg rendering
-grid_correct_old2 = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                            [...]
-
-grid_correct_old3 = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                            [...]
-
-# previous rendering using agg ellipse directly
-grid_correct_new = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                             [...]
-
-# newer rendering using svg
-grid_correct_new2 = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                            [...]
-
-grid_correct_new3 = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                            [...]
-
-def resolve(grid,row,col):
-    """ Resolve the attributes for a given pixel in a grid.
-    """
-    row = grid['grid'][row]
-    utf_val = row[col]
-    #http://docs.python.org/library/functions.html#ord
-    codepoint = ord(utf_val)
-    if (codepoint >= 93):
-        codepoint-=1
-    if (codepoint >= 35):
-        codepoint-=1
-    codepoint -= 32
-    key = grid['keys'][codepoint]
-    return grid['data'].get(key)
-
-
-def create_grid_map(width,height,sym):
-    ds = mapnik.MemoryDatasource()
-    context = mapnik.Context()
-    context.push('Name')
-    f = mapnik.Feature(context,1)
-    f['Name'] = 'South East'
-    f.add_geometries_from_wkt('POINT (143.10 -38.60)')
-    ds.add_feature(f)
-
-    f = mapnik.Feature(context,2)
-    f['Name'] = 'South West'
-    f.add_geometries_from_wkt('POINT (142.48 -38.60)')
-    ds.add_feature(f)
-
-    f = mapnik.Feature(context,3)
-    f['Name'] = 'North West'
-    f.add_geometries_from_wkt('POINT (142.48 -38.38)')
-    ds.add_feature(f)
-
-    f = mapnik.Feature(context,4)
-    f['Name'] = 'North East'
-    f.add_geometries_from_wkt('POINT (143.10 -38.38)')
-    ds.add_feature(f)
-    s = mapnik.Style()
-    r = mapnik.Rule()
-    sym.allow_overlap = True
-    r.symbols.append(sym)
-    s.rules.append(r)
-    lyr = mapnik.Layer('Places')
-    lyr.datasource = ds
-    lyr.styles.append('places_labels')
-    m = mapnik.Map(width,height)
-    m.append_style('places_labels',s)
-    m.layers.append(lyr)
-    return m
-
-def test_render_grid_old():
-    """ test old method """
-    width,height = 256,256
-    symb = mapnik.PointSymbolizer(mapnik.PathExpression('../data/images/dummy.png'))
-    sym = mapnik.MarkersSymbolizer()
-    sym.width = mapnik.Expression('10')
-    sym.height = mapnik.Expression('10')
-    m = create_grid_map(width,height,sym)
-    #print mapnik.save_map_to_string(m)
-    ul_lonlat = mapnik.Coord(142.30,-38.20)
-    lr_lonlat = mapnik.Coord(143.40,-38.80)
-    m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
-    grid = mapnik.render_grid(m,0,key='Name',resolution=4,fields=['Name'])
-    eq_(grid,grid_correct_old3,show_grids('old-markers',grid,grid_correct_old3))
-    eq_(resolve(grid,0,0),None)
-
-    # check every pixel of the nw symbol
-    expected = {"Name": "North West"}
-
-    # top row
-    eq_(resolve(grid,23,9),expected)
-    eq_(resolve(grid,23,10),expected)
-    eq_(resolve(grid,23,11),expected)
-
-def test_render_grid_new():
-    """ test old against new"""
-    width,height = 256,256
-    sym = mapnik.MarkersSymbolizer()
-    sym.width = mapnik.Expression('10')
-    sym.height = mapnik.Expression('10')
-    m = create_grid_map(width,height,sym)
-    ul_lonlat = mapnik.Coord(142.30,-38.20)
-    lr_lonlat = mapnik.Coord(143.40,-38.80)
-    m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
-
-    # new method
-    grid = mapnik.Grid(m.width,m.height,key='Name')
-    mapnik.render_layer(m,grid,layer=0,fields=['Name'])
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1,grid_correct_new3,show_grids('new-markers',utf1,grid_correct_new3))
-
-    # check a full view is the same as a full image
-    grid_view = grid.view(0,0,width,height)
-    # for kicks check at full res too
-    utf3 = grid.encode('utf',resolution=1)
-    utf4 = grid_view.encode('utf',resolution=1)
-    eq_(utf3['grid'],utf4['grid'])
-    eq_(utf3['keys'],utf4['keys'])
-    eq_(utf3['data'],utf4['data'])
-
-    eq_(resolve(utf4,0,0),None)
-
-    # resolve some center points in the
-    # resampled view
-    utf5 = grid_view.encode('utf',resolution=4)
-    eq_(resolve(utf5,25,10),{"Name": "North West"})
-    eq_(resolve(utf5,25,46),{"Name": "North East"})
-    eq_(resolve(utf5,38,10),{"Name": "South West"})
-    eq_(resolve(utf5,38,46),{"Name": "South East"})
-
-
-grid_feat_id = {'keys': ['', '3', '4', '2', '1'], 'data': {'1': {'Name': 'South East'}, '3': {'Name': u'North West'}, '2': {'Name': 'South West'}, '4': {'Name': 'North East'}}, 'grid': ['                                                                ', '                                                                ', '                                                                ', '                                                                ', '                                  [...]
-
-grid_feat_id2 = {"data": {"1": {"Name": "South East"}, "2": {"Name": "South West"}, "3": {"Name": "North West"}, "4": {"Name": "North East"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ",  [...]
-
-grid_feat_id3 = {"data": {"1": {"Name": "South East", "__id__": 1}, "2": {"Name": "South West", "__id__": 2}, "3": {"Name": "North West", "__id__": 3}, "4": {"Name": "North East", "__id__": 4}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                [...]
-
-def test_render_grid3():
-    """ test using feature id"""
-    width,height = 256,256
-    sym = mapnik.MarkersSymbolizer()
-    sym.width = mapnik.Expression('10')
-    sym.height = mapnik.Expression('10')
-    m = create_grid_map(width,height,sym)
-    ul_lonlat = mapnik.Coord(142.30,-38.20)
-    lr_lonlat = mapnik.Coord(143.40,-38.80)
-    m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
-
-    grid = mapnik.Grid(m.width,m.height,key='__id__')
-    mapnik.render_layer(m,grid,layer=0,fields=['__id__','Name'])
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1,grid_feat_id3,show_grids('id-markers',utf1,grid_feat_id3))
-    # check a full view is the same as a full image
-    grid_view = grid.view(0,0,width,height)
-    # for kicks check at full res too
-    utf3 = grid.encode('utf',resolution=1)
-    utf4 = grid_view.encode('utf',resolution=1)
-    eq_(utf3['grid'],utf4['grid'])
-    eq_(utf3['keys'],utf4['keys'])
-    eq_(utf3['data'],utf4['data'])
-
-    eq_(resolve(utf4,0,0),None)
-
-    # resolve some center points in the
-    # resampled view
-    utf5 = grid_view.encode('utf',resolution=4)
-    eq_(resolve(utf5,25,10),{"Name": "North West","__id__": 3})
-    eq_(resolve(utf5,25,46),{"Name": "North East","__id__": 4})
-    eq_(resolve(utf5,38,10),{"Name": "South West","__id__": 2})
-    eq_(resolve(utf5,38,46),{"Name": "South East","__id__": 1})
-
-
-def gen_grid_for_id(pixel_key):
-    ds = mapnik.MemoryDatasource()
-    context = mapnik.Context()
-    context.push('Name')
-    f = mapnik.Feature(context,pixel_key)
-    f['Name'] = str(pixel_key)
-    f.add_geometries_from_wkt('POLYGON ((0 0, 0 256, 256 256, 256 0, 0 0))')
-    ds.add_feature(f)
-    s = mapnik.Style()
-    r = mapnik.Rule()
-    symb = mapnik.PolygonSymbolizer()
-    r.symbols.append(symb)
-    s.rules.append(r)
-    lyr = mapnik.Layer('Places')
-    lyr.datasource = ds
-    lyr.styles.append('places_labels')
-    width,height = 256,256
-    m = mapnik.Map(width,height)
-    m.append_style('places_labels',s)
-    m.layers.append(lyr)
-    m.zoom_all()
-    grid = mapnik.Grid(m.width,m.height,key='__id__')
-    mapnik.render_layer(m,grid,layer=0,fields=['__id__','Name'])
-    return grid
-
-def test_negative_id():
-    grid = gen_grid_for_id(-1)
-    eq_(grid.get_pixel(128,128),-1)
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1['keys'],['-1'])
-
-def test_32bit_int_id():
-    int32 = 2147483647
-    grid = gen_grid_for_id(int32)
-    eq_(grid.get_pixel(128,128),int32)
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1['keys'],[str(int32)])
-    max_neg = -(int32)
-    grid = gen_grid_for_id(max_neg)
-    eq_(grid.get_pixel(128,128),max_neg)
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1['keys'],[str(max_neg)])
-
-def test_64bit_int_id():
-    int64 = 0x7FFFFFFFFFFFFFFF
-    grid = gen_grid_for_id(int64)
-    eq_(grid.get_pixel(128,128),int64)
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1['keys'],[str(int64)])
-    max_neg = -(int64)
-    grid = gen_grid_for_id(max_neg)
-    eq_(grid.get_pixel(128,128),max_neg)
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1['keys'],[str(max_neg)])
-
-def test_id_zero():
-    grid = gen_grid_for_id(0)
-    eq_(grid.get_pixel(128,128),0)
-    utf1 = grid.encode('utf',resolution=4)
-    eq_(utf1['keys'],['0'])
-
-line_expected = {"keys": ["", "1"], "data": {"1": {"Name": "1"}}, "grid": ["                                                               !", "                                                            !!  ", "                                                         !!     ", "                                                      !!        ", "                                                   !!           ", "                                                !!              ", "         [...]
-
-def test_line_rendering():
-    ds = mapnik.MemoryDatasource()
-    context = mapnik.Context()
-    context.push('Name')
-    pixel_key = 1
-    f = mapnik.Feature(context,pixel_key)
-    f['Name'] = str(pixel_key)
-    f.add_geometries_from_wkt('LINESTRING (30 10, 10 30, 40 40)')
-    ds.add_feature(f)
-    s = mapnik.Style()
-    r = mapnik.Rule()
-    symb = mapnik.LineSymbolizer()
-    r.symbols.append(symb)
-    s.rules.append(r)
-    lyr = mapnik.Layer('Places')
-    lyr.datasource = ds
-    lyr.styles.append('places_labels')
-    width,height = 256,256
-    m = mapnik.Map(width,height)
-    m.append_style('places_labels',s)
-    m.layers.append(lyr)
-    m.zoom_all()
-    #mapnik.render_to_file(m,'test.png')
-    grid = mapnik.Grid(m.width,m.height,key='__id__')
-    mapnik.render_layer(m,grid,layer=0,fields=['Name'])
-    utf1 = grid.encode()
-    eq_(utf1,line_expected,show_grids('line',utf1,line_expected))
-
-point_expected = {"data": {"1": {"Name": "South East"}, "2": {"Name": "South West"}, "3": {"Name": "North West"}, "4": {"Name": "North East"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                ", [...]
-
-def test_point_symbolizer_grid():
-    width,height = 256,256
-    sym = mapnik.PointSymbolizer(mapnik.PathExpression('../data/images/dummy.png'))
-    m = create_grid_map(width,height,sym)
-    ul_lonlat = mapnik.Coord(142.30,-38.20)
-    lr_lonlat = mapnik.Coord(143.40,-38.80)
-    m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
-    grid = mapnik.Grid(m.width,m.height)
-    mapnik.render_layer(m,grid,layer=0,fields=['Name'])
-    utf1 = grid.encode()
-    eq_(utf1,point_expected,show_grids('point-sym',utf1,point_expected))
-
-
-# should throw because this is a mis-usage
-# https://github.com/mapnik/mapnik/issues/1325
- at raises(RuntimeError)
-def test_render_to_grid_multiple_times():
-    # create map with two layers
-    m = mapnik.Map(256,256)
-    s = mapnik.Style()
-    r = mapnik.Rule()
-    sym = mapnik.MarkersSymbolizer()
-    sym.allow_overlap = True
-    r.symbols.append(sym)
-    s.rules.append(r)
-    m.append_style('points',s)
-
-    # NOTE: we use a csv datasource here
-    # because the memorydatasource fails silently for
-    # queries requesting fields that do not exist in the datasource
-    ds1 = mapnik.Datasource(**{"type":"csv","inline":'''
-      wkt,Name
-      "POINT (143.10 -38.60)",South East'''})
-    lyr1 = mapnik.Layer('One')
-    lyr1.datasource = ds1
-    lyr1.styles.append('points')
-    m.layers.append(lyr1)
-
-    ds2 = mapnik.Datasource(**{"type":"csv","inline":'''
-      wkt,Value
-      "POINT (142.48 -38.60)",South West'''})
-    lyr2 = mapnik.Layer('Two')
-    lyr2.datasource = ds2
-    lyr2.styles.append('points')
-    m.layers.append(lyr2)
-
-    ul_lonlat = mapnik.Coord(142.30,-38.20)
-    lr_lonlat = mapnik.Coord(143.40,-38.80)
-    m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
-    grid = mapnik.Grid(m.width,m.height)
-    mapnik.render_layer(m,grid,layer=0,fields=['Name'])
-    # should throw right here since Name will be a property now on the `grid` object
-    # and it is not found on the second layer
-    mapnik.render_layer(m,grid,layer=1,fields=['Value'])
-    utf1 = grid.encode()
+if mapnik.has_grid_renderer():
+    def show_grids(name,g1,g2):
+        g1_file = '/tmp/mapnik-%s-actual.json' % name
+        open(g1_file,'w').write(json.dumps(g1,sort_keys=True))
+        g2_file = '/tmp/mapnik-%s-expected.json' % name
+        open(g2_file,'w').write(json.dumps(g2,sort_keys=True))
+        val = 'JSON does not match  ->\n'
+        if g1['grid'] != g2['grid']:
+           val += ' X grid does not match\n'
+        else:
+           val += ' ✓ grid matches\n'
+        if g1['data'].keys() != g2['data'].keys():
+           val += ' X data does not match\n'
+        else:
+           val += ' ✓ data matches\n'
+        if g1['keys'] != g2['keys']:
+           val += ' X keys do not\n'
+        else:
+           val += ' ✓ keys match\n'
+        val += '\n\t%s\n\t%s' % (g1_file,g2_file)
+        return val
+    
+    def show_grids2(name,g1,g2):
+        g2_expected = '../data/grids/mapnik-%s-actual.json' % name
+        if not os.path.exists(g2_expected):
+            # create test fixture based on actual results
+            open(g2_expected,'a+').write(json.dumps(g1,sort_keys=True))
+            return
+        g1_file = '/tmp/mapnik-%s-actual.json' % name
+        open(g1_file,'w').write(json.dumps(g1,sort_keys=True))
+        val = 'JSON does not match  ->\n'
+        if g1['grid'] != g2['grid']:
+           val += ' X grid does not match\n'
+        else:
+           val += ' ✓ grid matches\n'
+        if g1['data'].keys() != g2['data'].keys():
+           val += ' X data does not match\n'
+        else:
+           val += ' ✓ data matches\n'
+        if g1['keys'] != g2['keys']:
+           val += ' X keys do not\n'
+        else:
+           val += ' ✓ keys match\n'
+        val += '\n\t%s\n\t%s' % (g1_file,g2_expected)
+        return val
+    
+    # previous rendering using agg ellipse directly
+    grid_correct_new = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                         [...]
+    
+    # newer rendering using svg
+    grid_correct_new2 = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                        [...]
+    
+    grid_correct_new3 = {"data": {"North East": {"Name": "North East"}, "North West": {"Name": "North West"}, "South East": {"Name": "South East"}, "South West": {"Name": "South West"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                        [...]
+    
+    def resolve(grid,row,col):
+        """ Resolve the attributes for a given pixel in a grid.
+        """
+        row = grid['grid'][row]
+        utf_val = row[col]
+        #http://docs.python.org/library/functions.html#ord
+        codepoint = ord(utf_val)
+        if (codepoint >= 93):
+            codepoint-=1
+        if (codepoint >= 35):
+            codepoint-=1
+        codepoint -= 32
+        key = grid['keys'][codepoint]
+        return grid['data'].get(key)
+    
+    
+    def create_grid_map(width,height,sym):
+        ds = mapnik.MemoryDatasource()
+        context = mapnik.Context()
+        context.push('Name')
+        f = mapnik.Feature(context,1)
+        f['Name'] = 'South East'
+        f.add_geometries_from_wkt('POINT (143.10 -38.60)')
+        ds.add_feature(f)
+    
+        f = mapnik.Feature(context,2)
+        f['Name'] = 'South West'
+        f.add_geometries_from_wkt('POINT (142.48 -38.60)')
+        ds.add_feature(f)
+    
+        f = mapnik.Feature(context,3)
+        f['Name'] = 'North West'
+        f.add_geometries_from_wkt('POINT (142.48 -38.38)')
+        ds.add_feature(f)
+    
+        f = mapnik.Feature(context,4)
+        f['Name'] = 'North East'
+        f.add_geometries_from_wkt('POINT (143.10 -38.38)')
+        ds.add_feature(f)
+        s = mapnik.Style()
+        r = mapnik.Rule()
+        sym.allow_overlap = True
+        r.symbols.append(sym)
+        s.rules.append(r)
+        lyr = mapnik.Layer('Places')
+        lyr.datasource = ds
+        lyr.styles.append('places_labels')
+        m = mapnik.Map(width,height)
+        m.append_style('places_labels',s)
+        m.layers.append(lyr)
+        return m
+    
+    
+    def test_render_grid():
+        """ test render_grid method"""
+        width,height = 256,256
+        sym = mapnik.MarkersSymbolizer()
+        sym.width = mapnik.Expression('10')
+        sym.height = mapnik.Expression('10')
+        m = create_grid_map(width,height,sym)
+        ul_lonlat = mapnik.Coord(142.30,-38.20)
+        lr_lonlat = mapnik.Coord(143.40,-38.80)
+        m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
+    
+        # new method
+        grid = mapnik.Grid(m.width,m.height,key='Name')
+        mapnik.render_layer(m,grid,layer=0,fields=['Name'])
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1,grid_correct_new3,show_grids('new-markers',utf1,grid_correct_new3))
+    
+        # check a full view is the same as a full image
+        grid_view = grid.view(0,0,width,height)
+        # for kicks check at full res too
+        utf3 = grid.encode('utf',resolution=1)
+        utf4 = grid_view.encode('utf',resolution=1)
+        eq_(utf3['grid'],utf4['grid'])
+        eq_(utf3['keys'],utf4['keys'])
+        eq_(utf3['data'],utf4['data'])
+    
+        eq_(resolve(utf4,0,0),None)
+    
+        # resolve some center points in the
+        # resampled view
+        utf5 = grid_view.encode('utf',resolution=4)
+        eq_(resolve(utf5,25,10),{"Name": "North West"})
+        eq_(resolve(utf5,25,46),{"Name": "North East"})
+        eq_(resolve(utf5,38,10),{"Name": "South West"})
+        eq_(resolve(utf5,38,46),{"Name": "South East"})
+    
+    
+    grid_feat_id = {'keys': ['', '3', '4', '2', '1'], 'data': {'1': {'Name': 'South East'}, '3': {'Name': u'North West'}, '2': {'Name': 'South West'}, '4': {'Name': 'North East'}}, 'grid': ['                                                                ', '                                                                ', '                                                                ', '                                                                ', '                              [...]
+    
+    grid_feat_id2 = {"data": {"1": {"Name": "South East"}, "2": {"Name": "South West"}, "3": {"Name": "North West"}, "4": {"Name": "North East"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                                [...]
+    
+    grid_feat_id3 = {"data": {"1": {"Name": "South East", "__id__": 1}, "2": {"Name": "South West", "__id__": 2}, "3": {"Name": "North West", "__id__": 3}, "4": {"Name": "North East", "__id__": 4}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "            [...]
+    
+    def test_render_grid3():
+        """ test using feature id"""
+        width,height = 256,256
+        sym = mapnik.MarkersSymbolizer()
+        sym.width = mapnik.Expression('10')
+        sym.height = mapnik.Expression('10')
+        m = create_grid_map(width,height,sym)
+        ul_lonlat = mapnik.Coord(142.30,-38.20)
+        lr_lonlat = mapnik.Coord(143.40,-38.80)
+        m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
+    
+        grid = mapnik.Grid(m.width,m.height,key='__id__')
+        mapnik.render_layer(m,grid,layer=0,fields=['__id__','Name'])
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1,grid_feat_id3,show_grids('id-markers',utf1,grid_feat_id3))
+        # check a full view is the same as a full image
+        grid_view = grid.view(0,0,width,height)
+        # for kicks check at full res too
+        utf3 = grid.encode('utf',resolution=1)
+        utf4 = grid_view.encode('utf',resolution=1)
+        eq_(utf3['grid'],utf4['grid'])
+        eq_(utf3['keys'],utf4['keys'])
+        eq_(utf3['data'],utf4['data'])
+    
+        eq_(resolve(utf4,0,0),None)
+    
+        # resolve some center points in the
+        # resampled view
+        utf5 = grid_view.encode('utf',resolution=4)
+        eq_(resolve(utf5,25,10),{"Name": "North West","__id__": 3})
+        eq_(resolve(utf5,25,46),{"Name": "North East","__id__": 4})
+        eq_(resolve(utf5,38,10),{"Name": "South West","__id__": 2})
+        eq_(resolve(utf5,38,46),{"Name": "South East","__id__": 1})
+    
+    
+    def gen_grid_for_id(pixel_key):
+        ds = mapnik.MemoryDatasource()
+        context = mapnik.Context()
+        context.push('Name')
+        f = mapnik.Feature(context,pixel_key)
+        f['Name'] = str(pixel_key)
+        f.add_geometries_from_wkt('POLYGON ((0 0, 0 256, 256 256, 256 0, 0 0))')
+        ds.add_feature(f)
+        s = mapnik.Style()
+        r = mapnik.Rule()
+        symb = mapnik.PolygonSymbolizer()
+        r.symbols.append(symb)
+        s.rules.append(r)
+        lyr = mapnik.Layer('Places')
+        lyr.datasource = ds
+        lyr.styles.append('places_labels')
+        width,height = 256,256
+        m = mapnik.Map(width,height)
+        m.append_style('places_labels',s)
+        m.layers.append(lyr)
+        m.zoom_all()
+        grid = mapnik.Grid(m.width,m.height,key='__id__')
+        mapnik.render_layer(m,grid,layer=0,fields=['__id__','Name'])
+        return grid
+    
+    def test_negative_id():
+        grid = gen_grid_for_id(-1)
+        eq_(grid.get_pixel(128,128),-1)
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1['keys'],['-1'])
+    
+    def test_32bit_int_id():
+        int32 = 2147483647
+        grid = gen_grid_for_id(int32)
+        eq_(grid.get_pixel(128,128),int32)
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1['keys'],[str(int32)])
+        max_neg = -(int32)
+        grid = gen_grid_for_id(max_neg)
+        eq_(grid.get_pixel(128,128),max_neg)
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1['keys'],[str(max_neg)])
+    
+    def test_64bit_int_id():
+        int64 = 0x7FFFFFFFFFFFFFFF
+        grid = gen_grid_for_id(int64)
+        eq_(grid.get_pixel(128,128),int64)
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1['keys'],[str(int64)])
+        max_neg = -(int64)
+        grid = gen_grid_for_id(max_neg)
+        eq_(grid.get_pixel(128,128),max_neg)
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1['keys'],[str(max_neg)])
+    
+    def test_id_zero():
+        grid = gen_grid_for_id(0)
+        eq_(grid.get_pixel(128,128),0)
+        utf1 = grid.encode('utf',resolution=4)
+        eq_(utf1['keys'],['0'])
+    
+    line_expected = {"keys": ["", "1"], "data": {"1": {"Name": "1"}}, "grid": ["                                                               !", "                                                            !!  ", "                                                         !!     ", "                                                      !!        ", "                                                   !!           ", "                                                !!              ", "     [...]
+    
+    def test_line_rendering():
+        ds = mapnik.MemoryDatasource()
+        context = mapnik.Context()
+        context.push('Name')
+        pixel_key = 1
+        f = mapnik.Feature(context,pixel_key)
+        f['Name'] = str(pixel_key)
+        f.add_geometries_from_wkt('LINESTRING (30 10, 10 30, 40 40)')
+        ds.add_feature(f)
+        s = mapnik.Style()
+        r = mapnik.Rule()
+        symb = mapnik.LineSymbolizer()
+        r.symbols.append(symb)
+        s.rules.append(r)
+        lyr = mapnik.Layer('Places')
+        lyr.datasource = ds
+        lyr.styles.append('places_labels')
+        width,height = 256,256
+        m = mapnik.Map(width,height)
+        m.append_style('places_labels',s)
+        m.layers.append(lyr)
+        m.zoom_all()
+        #mapnik.render_to_file(m,'test.png')
+        grid = mapnik.Grid(m.width,m.height,key='__id__')
+        mapnik.render_layer(m,grid,layer=0,fields=['Name'])
+        utf1 = grid.encode()
+        eq_(utf1,line_expected,show_grids('line',utf1,line_expected))
+    
+    point_expected = {"data": {"1": {"Name": "South East"}, "2": {"Name": "South West"}, "3": {"Name": "North West"}, "4": {"Name": "North East"}}, "grid": ["                                                                ", "                                                                ", "                                                                ", "                                                                ", "                                                               [...]
+    
+    def test_point_symbolizer_grid():
+        width,height = 256,256
+        sym = mapnik.PointSymbolizer()
+        sym.file = '../data/images/dummy.png'
+        m = create_grid_map(width,height,sym)
+        ul_lonlat = mapnik.Coord(142.30,-38.20)
+        lr_lonlat = mapnik.Coord(143.40,-38.80)
+        m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
+        grid = mapnik.Grid(m.width,m.height)
+        mapnik.render_layer(m,grid,layer=0,fields=['Name'])
+        utf1 = grid.encode()
+        eq_(utf1,point_expected,show_grids('point-sym',utf1,point_expected))
+    
+    
+    # should throw because this is a mis-usage
+    # https://github.com/mapnik/mapnik/issues/1325
+    @raises(RuntimeError)
+    def test_render_to_grid_multiple_times():
+        # create map with two layers
+        m = mapnik.Map(256,256)
+        s = mapnik.Style()
+        r = mapnik.Rule()
+        sym = mapnik.MarkersSymbolizer()
+        sym.allow_overlap = True
+        r.symbols.append(sym)
+        s.rules.append(r)
+        m.append_style('points',s)
+    
+        # NOTE: we use a csv datasource here
+        # because the memorydatasource fails silently for
+        # queries requesting fields that do not exist in the datasource
+        ds1 = mapnik.Datasource(**{"type":"csv","inline":'''
+          wkt,Name
+          "POINT (143.10 -38.60)",South East'''})
+        lyr1 = mapnik.Layer('One')
+        lyr1.datasource = ds1
+        lyr1.styles.append('points')
+        m.layers.append(lyr1)
+    
+        ds2 = mapnik.Datasource(**{"type":"csv","inline":'''
+          wkt,Value
+          "POINT (142.48 -38.60)",South West'''})
+        lyr2 = mapnik.Layer('Two')
+        lyr2.datasource = ds2
+        lyr2.styles.append('points')
+        m.layers.append(lyr2)
+    
+        ul_lonlat = mapnik.Coord(142.30,-38.20)
+        lr_lonlat = mapnik.Coord(143.40,-38.80)
+        m.zoom_to_box(mapnik.Box2d(ul_lonlat,lr_lonlat))
+        grid = mapnik.Grid(m.width,m.height)
+        mapnik.render_layer(m,grid,layer=0,fields=['Name'])
+        # should throw right here since Name will be a property now on the `grid` object
+        # and it is not found on the second layer
+        mapnik.render_layer(m,grid,layer=1,fields=['Value'])
+        utf1 = grid.encode()
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/render_test.py b/tests/python_tests/render_test.py
index bc25e23..9010213 100644
--- a/tests/python_tests/render_test.py
+++ b/tests/python_tests/render_test.py
@@ -30,7 +30,6 @@ def test_render_image_to_string():
     eq_(im.is_solid(),True)
     s = im.tostring()
     eq_(s, 256 * 256 * '\x00\x00\x00\xff')
-    s = im.tostring('png')
 
 def test_non_solid_image():
     im = mapnik.Image(256, 256)
@@ -61,16 +60,18 @@ def test_setting_alpha():
     w,h = 256,256
     im1 = mapnik.Image(w,h)
     # white, half transparent
-    im1.background = mapnik.Color('rgba(255,255,255,.5)')
+    c1 = mapnik.Color('rgba(255,255,255,.5)')
+    im1.background = c1
     eq_(im1.painted(),False)
     eq_(im1.is_solid(),True)
     # pure white
     im2 = mapnik.Image(w,h)
-    im2.background = mapnik.Color('rgba(255,255,255,1)')
-    im2.set_alpha(.5)
+    c2 = mapnik.Color('rgba(255,255,255,1)')
+    im2.background = c2
+    im2.set_alpha(c1.a/255.0)
     eq_(im2.painted(),False)
     eq_(im2.is_solid(),True)
-    eq_(len(im1.tostring()), len(im2.tostring()))
+    eq_(len(im1.tostring('png32')), len(im2.tostring('png32')))
 
 def test_render_image_to_file():
     im = mapnik.Image(256, 256)
@@ -106,10 +107,10 @@ def get_paired_images(w,h,mapfile):
 def test_render_from_serialization():
     try:
         im,im2 = get_paired_images(100,100,'../data/good_maps/building_symbolizer.xml')
-        eq_(im.tostring(),im2.tostring())
+        eq_(im.tostring('png32'),im2.tostring('png32'))
 
         im,im2 = get_paired_images(100,100,'../data/good_maps/polygon_symbolizer.xml')
-        eq_(im.tostring(),im2.tostring())
+        eq_(im.tostring('png32'),im2.tostring('png32'))
     except RuntimeError, e:
         # only test datasources that we have installed
         if not 'Could not create datasource' in str(e):
@@ -173,6 +174,49 @@ def test_render_with_scale_factor_zero_throws():
     im = mapnik.Image(256, 256)
     mapnik.render(m,im,0.0)
 
+def test_render_with_detector():
+    ds = mapnik.MemoryDatasource()
+    context = mapnik.Context()
+    geojson  = '{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } }'
+    ds.add_feature(mapnik.Feature.from_geojson(geojson,context))
+    s = mapnik.Style()
+    r = mapnik.Rule()
+    lyr = mapnik.Layer('point')
+    lyr.datasource = ds
+    lyr.styles.append('point')
+    symb = mapnik.MarkersSymbolizer()
+    symb.allow_overlap = False
+    r.symbols.append(symb)
+    s.rules.append(r)
+    m = mapnik.Map(256,256)
+    m.append_style('point',s)
+    m.layers.append(lyr)
+    m.zoom_to_box(mapnik.Box2d(-180,-85,180,85))
+    im = mapnik.Image(256, 256)
+    mapnik.render(m,im)
+    expected_file = './images/support/marker-in-center.png'
+    actual_file = '/tmp/' + os.path.basename(expected_file)
+    #im.save(expected_file,'png8')
+    im.save(actual_file,'png8')
+    actual = mapnik.Image.open(expected_file)
+    expected = mapnik.Image.open(expected_file)
+    eq_(actual.tostring('png32'),expected.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual_file,expected_file))
+    # now render will a collision detector that should
+    # block out the placement of this point
+    detector = mapnik.LabelCollisionDetector(m)
+    eq_(detector.extent(),mapnik.Box2d(-0.0,-0.0,m.width,m.height))
+    eq_(detector.extent(),mapnik.Box2d(-0.0,-0.0,256.0,256.0))
+    eq_(detector.boxes(),[])
+    detector.insert(detector.extent())
+    eq_(detector.boxes(),[detector.extent()])
+    im2 = mapnik.Image(256, 256)
+    mapnik.render_with_detector(m, im2, detector)
+    expected_file_collision = './images/support/marker-in-center-not-placed.png'
+    #im2.save(expected_file_collision,'png8')
+    actual_file = '/tmp/' + os.path.basename(expected_file_collision)
+    im2.save(actual_file,'png8')
+
+
 if 'shape' in mapnik.DatasourceCache.plugin_names():
 
     def test_render_with_scale_factor():
@@ -185,13 +229,13 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
             mapnik.render(m,im,size)
             expected_file = './images/support/marker-text-line-scale-factor-%s.png' % size
             actual_file = '/tmp/' + os.path.basename(expected_file)
-            im.save(actual_file,'png8')
-            #im.save(expected_file,'png8')
+            im.save(actual_file,'png32')
+            #im.save(expected_file,'png32')
             # we save and re-open here so both png8 images are ready as full color png
-            actual = mapnik.Image.open(expected_file)
+            actual = mapnik.Image.open(actual_file)
             expected = mapnik.Image.open(expected_file)
-            eq_(actual.tostring(),expected.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual_file,expected_file))
+            eq_(actual.tostring('png32'),expected.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual_file,expected_file))
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/reprojection_test.py b/tests/python_tests/reprojection_test.py
index 14a48ad..4863298 100644
--- a/tests/python_tests/reprojection_test.py
+++ b/tests/python_tests/reprojection_test.py
@@ -44,9 +44,9 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-wgs842merc-reprojection-render.png'
         expected = 'images/support/mapnik-wgs842merc-reprojection-render.png'
-        im.save(actual)
+        im.save(actual,'png32')
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
     def test_visual_zoom_all_rendering2():
         m = mapnik.Map(512,512)
@@ -56,9 +56,9 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-merc2wgs84-reprojection-render.png'
         expected = 'images/support/mapnik-merc2wgs84-reprojection-render.png'
-        im.save(actual)
+        im.save(actual,'png32')
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
     # maximum-extent read from map.xml
     def test_visual_zoom_all_rendering3():
@@ -69,9 +69,9 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-merc2merc-reprojection-render1.png'
         expected = 'images/support/mapnik-merc2merc-reprojection-render1.png'
-        im.save(actual)
+        im.save(actual,'png32')
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
     # no maximum-extent
     def test_visual_zoom_all_rendering4():
@@ -83,10 +83,10 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
         mapnik.render(m,im)
         actual = '/tmp/mapnik-merc2merc-reprojection-render2.png'
         expected = 'images/support/mapnik-merc2merc-reprojection-render2.png'
-        im.save(actual)
+        im.save(actual,'png32')
         expected_im = mapnik.Image.open(expected)
-        eq_(im.tostring(),expected_im.tostring(), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
+        eq_(im.tostring('png32'),expected_im.tostring('png32'), 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/save_map_test.py b/tests/python_tests/save_map_test.py
index 0e4cb0c..4df244d 100644
--- a/tests/python_tests/save_map_test.py
+++ b/tests/python_tests/save_map_test.py
@@ -6,15 +6,30 @@ import tempfile
 
 import os, sys, glob, mapnik
 
+default_logging_severity = mapnik.logger.get_severity()
+
 def setup():
+    # make the tests silent to suppress unsupported params from harfbuzz tests
+    # TODO: remove this after harfbuzz branch merges
+    mapnik.logger.set_severity(mapnik.severity_type.None)
     # All of the paths used are relative, if we run the tests
     # from another directory we need to chdir()
     os.chdir(execution_path('.'))
 
+def teardown():
+    mapnik.logger.set_severity(default_logging_severity)
+
 def compare_map(xml):
     m = mapnik.Map(256, 256)
     absolute_base = os.path.abspath(os.path.dirname(xml))
-    mapnik.load_map(m, xml, False, absolute_base)
+    try:
+        mapnik.load_map(m, xml, False, absolute_base)
+    except RuntimeError, e:
+        # only test datasources that we have installed
+        if not 'Could not create datasource' in str(e) \
+           and not 'Bad connection' in str(e):
+            raise RuntimeError(str(e))
+        return
     (handle, test_map) = tempfile.mkstemp(suffix='.xml', prefix='mapnik-temp-map1-')
     os.close(handle)
     (handle, test_map2) = tempfile.mkstemp(suffix='.xml', prefix='mapnik-temp-map2-')
@@ -25,7 +40,7 @@ def compare_map(xml):
     new_map = mapnik.Map(256, 256)
     mapnik.load_map(new_map, test_map,False,absolute_base)
     open(test_map2,'w').write(mapnik.save_map_to_string(new_map))
-    diff = ' diff %s %s' % (os.path.abspath(test_map),os.path.abspath(test_map2))
+    diff = ' diff -u %s %s' % (os.path.abspath(test_map),os.path.abspath(test_map2))
     try:
         eq_(open(test_map).read(),open(test_map2).read())
     except AssertionError, e:
@@ -38,9 +53,17 @@ def compare_map(xml):
         return False
 
 def test_compare_map():
-    for m in glob.glob("../data/good_maps/*.xml"):
+    good_maps = glob.glob("../data/good_maps/*.xml")
+    good_maps = [os.path.normpath(p) for p in good_maps]
+    # remove one map that round trips CDATA differently, but this is okay
+    ignorable = os.path.join('..','data','good_maps','empty_parameter2.xml')
+    good_maps.remove(ignorable)
+    for m in good_maps:
+        compare_map(m)
+
+    for m in glob.glob("../visual_tests/styles/*.xml"):
         compare_map(m)
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/shapefile_test.py b/tests/python_tests/shapefile_test.py
index 661092d..b12a143 100644
--- a/tests/python_tests/shapefile_test.py
+++ b/tests/python_tests/shapefile_test.py
@@ -110,4 +110,4 @@ if 'shape' in mapnik.DatasourceCache.plugin_names():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/sqlite_rtree_test.py b/tests/python_tests/sqlite_rtree_test.py
index 3ecba78..792f268 100644
--- a/tests/python_tests/sqlite_rtree_test.py
+++ b/tests/python_tests/sqlite_rtree_test.py
@@ -4,6 +4,7 @@ from nose.tools import *
 from utilities import execution_path, run_all
 from Queue import Queue
 import threading
+import time
 
 import os, mapnik
 import sqlite3
@@ -15,24 +16,25 @@ def setup():
 
 NUM_THREADS = 10
 TOTAL = 245
-DB = '../data/sqlite/world.sqlite'
-TABLE= 'world_merc'
 
-def create_ds():
-    ds = mapnik.SQLite(file=DB,table=TABLE)
+def create_ds(test_db,table):
+    ds = mapnik.SQLite(file=test_db,table=table)
     fs = ds.all_features()
+    del ds
 
 if 'sqlite' in mapnik.DatasourceCache.plugin_names():
 
     def test_rtree_creation():
+        test_db = '../data/sqlite/world.sqlite'
+        index = test_db +'.index'
+        table = 'world_merc'
 
-        index = DB +'.index'
         if os.path.exists(index):
             os.unlink(index)
 
         threads = []
         for i in range(NUM_THREADS):
-            t = threading.Thread(target=create_ds)
+            t = threading.Thread(target=create_ds,args=(test_db,table))
             t.start()
             threads.append(t)
 
@@ -43,7 +45,7 @@ if 'sqlite' in mapnik.DatasourceCache.plugin_names():
         conn = sqlite3.connect(index)
         cur = conn.cursor()
         try:
-            cur.execute("Select count(*) from idx_%s_GEOMETRY" % TABLE.replace("'",""))
+            cur.execute("Select count(*) from idx_%s_GEOMETRY" % table.replace("'",""))
             conn.commit()
             eq_(cur.fetchone()[0],TOTAL)
         except sqlite3.OperationalError:
@@ -51,22 +53,29 @@ if 'sqlite' in mapnik.DatasourceCache.plugin_names():
             # python's sqlite module does not support rtree
             pass
         cur.close()
+        conn.close()
 
-        ds = mapnik.SQLite(file=DB,table=TABLE)
+        ds = mapnik.SQLite(file=test_db,table=table)
         fs = ds.all_features()
+        del ds
         eq_(len(fs),TOTAL)
         os.unlink(index)
-        ds = mapnik.SQLite(file=DB,table=TABLE,use_spatial_index=False)
+        ds = mapnik.SQLite(file=test_db,table=table,use_spatial_index=False)
         fs = ds.all_features()
+        del ds
         eq_(len(fs),TOTAL)
         eq_(os.path.exists(index),False)
 
-        ds = mapnik.SQLite(file=DB,table=TABLE,use_spatial_index=True)
+        ds = mapnik.SQLite(file=test_db,table=table,use_spatial_index=True)
         fs = ds.all_features()
-        for feat in fs:
-            query = mapnik.Query(feat.envelope())
-            selected = ds.features(query)
-            eq_(len(selected.features)>=1,True)
+        #TODO - this loop is not releasing something
+        # because it causes the unlink below to fail on windows
+        # as the file is still open
+        #for feat in fs:
+        #    query = mapnik.Query(feat.envelope())
+        #    selected = ds.features(query)
+        #    eq_(len(selected.features)>=1,True)
+        del ds
 
         eq_(os.path.exists(index),True)
         os.unlink(index)
@@ -109,6 +118,7 @@ if 'sqlite' in mapnik.DatasourceCache.plugin_names():
         cur.execute('''INSERT into "point_table" (id,geometry,name) values (?,?,?)''',values)
         conn.commit()
         cur.close()
+        conn.close()
 
         def make_wkb_point(x,y):
             import struct
@@ -134,8 +144,10 @@ if 'sqlite' in mapnik.DatasourceCache.plugin_names():
         geoms = feat.geometries()
         eq_(len(geoms),1)
         eq_(geoms.to_wkt(),'Point(-122 48)')
+        del ds
 
         # ensure it matches data read with just sqlite
+        conn = sqlite3.connect(test_db)
         cur = conn.cursor()
         cur.execute('''SELECT * from point_table''')
         conn.commit()
@@ -149,11 +161,10 @@ if 'sqlite' in mapnik.DatasourceCache.plugin_names():
         eq_(str(geom_wkb_blob),geoms.to_wkb(mapnik.wkbByteOrder.NDR))
         new_geom = mapnik.Path.from_wkb(str(geom_wkb_blob))
         eq_(new_geom.to_wkt(),geoms.to_wkt())
-
-        # cleanup
+        conn.close()
         os.unlink(test_db)
-        os.unlink(test_db + '.index')
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    returncode = run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(returncode)
diff --git a/tests/python_tests/sqlite_test.py b/tests/python_tests/sqlite_test.py
index 53edfe4..f384fcc 100644
--- a/tests/python_tests/sqlite_test.py
+++ b/tests/python_tests/sqlite_test.py
@@ -418,4 +418,4 @@ if 'sqlite' in mapnik.DatasourceCache.plugin_names():
 
 if __name__ == "__main__":
     setup()
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/style_test.py b/tests/python_tests/style_test.py
index 816921b..9b06273 100644
--- a/tests/python_tests/style_test.py
+++ b/tests/python_tests/style_test.py
@@ -13,6 +13,7 @@ def test_style_init():
    eq_(s.opacity,1)
    eq_(s.comp_op,None)
    eq_(s.image_filters,"")
+   eq_(s.image_filters_inflate,False)
 
 if __name__ == "__main__":
-    run_all(eval(x) for x in dir() if x.startswith("test_"))
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/topojson_plugin_test.py b/tests/python_tests/topojson_plugin_test.py
new file mode 100644
index 0000000..ff1f2ed
--- /dev/null
+++ b/tests/python_tests/topojson_plugin_test.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from nose.tools import *
+from utilities import execution_path, run_all
+import os, mapnik
+
+def setup():
+    # All of the paths used are relative, if we run the tests
+    # from another directory we need to chdir()
+    os.chdir(execution_path('.'))
+
+if 'topojson' in mapnik.DatasourceCache.plugin_names():
+
+    def test_topojson_init():
+        # topojson tests/data/json/escaped.geojson -o tests/data/json/escaped.topojson --properties
+        # topojson version 1.4.2
+        ds = mapnik.Datasource(type='topojson',file='../data/json/escaped.topojson')
+        e = ds.envelope()
+        assert_almost_equal(e.minx, -81.705583, places=7)
+        assert_almost_equal(e.miny, 41.480573, places=6)
+        assert_almost_equal(e.maxx, -81.705583, places=5)
+        assert_almost_equal(e.maxy, 41.480573, places=3)
+
+    def test_topojson_properties():
+        ds = mapnik.Datasource(type='topojson',file='../data/json/escaped.topojson')
+        f = ds.features_at_point(ds.envelope().center()).features[0]
+        eq_(len(ds.fields()),7)
+        desc = ds.describe()
+        eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
+
+        eq_(f['name'], u'Test')
+        eq_(f['int'], 1)
+        eq_(f['description'], u'Test: \u005C')
+        eq_(f['spaces'], u'this has spaces')
+        eq_(f['double'], 1.1)
+        eq_(f['boolean'], True)
+        eq_(f['NOM_FR'], u'Qu\xe9bec')
+        eq_(f['NOM_FR'], u'Québec')
+
+        ds = mapnik.Datasource(type='topojson',file='../data/json/escaped.topojson')
+        f = ds.all_features()[0]
+        eq_(len(ds.fields()),7)
+
+        desc = ds.describe()
+        eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
+
+        eq_(f['name'], u'Test')
+        eq_(f['int'], 1)
+        eq_(f['description'], u'Test: \u005C')
+        eq_(f['spaces'], u'this has spaces')
+        eq_(f['double'], 1.1)
+        eq_(f['boolean'], True)
+        eq_(f['NOM_FR'], u'Qu\xe9bec')
+        eq_(f['NOM_FR'], u'Québec')
+
+    def test_geojson_from_in_memory_string():
+        ds = mapnik.Datasource(type='topojson',inline=open('../data/json/escaped.topojson','r').read())
+        f = ds.all_features()[0]
+        eq_(len(ds.fields()),7)
+
+        desc = ds.describe()
+        eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
+
+        eq_(f['name'], u'Test')
+        eq_(f['int'], 1)
+        eq_(f['description'], u'Test: \u005C')
+        eq_(f['spaces'], u'this has spaces')
+        eq_(f['double'], 1.1)
+        eq_(f['boolean'], True)
+        eq_(f['NOM_FR'], u'Qu\xe9bec')
+        eq_(f['NOM_FR'], u'Québec')
+
+#    @raises(RuntimeError)
+    def test_that_nonexistant_query_field_throws(**kwargs):
+        ds = mapnik.Datasource(type='topojson',file='../data/json/escaped.topojson')
+        eq_(len(ds.fields()),7)
+        # TODO - this sorting is messed up
+        eq_(ds.fields(),['name', 'int', 'description', 'spaces', 'double', 'boolean', 'NOM_FR'])
+        eq_(ds.field_types(),['str', 'int', 'str', 'str', 'float', 'bool', 'str'])
+# TODO - should topojson plugin throw like others?
+#        query = mapnik.Query(ds.envelope())
+#        for fld in ds.fields():
+#            query.add_property_name(fld)
+#        # also add an invalid one, triggering throw
+#        query.add_property_name('bogus')
+#        fs = ds.features(query)
+
+if __name__ == "__main__":
+    setup()
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/python_tests/webp_encoding_test.py b/tests/python_tests/webp_encoding_test.py
new file mode 100644
index 0000000..d014594
--- /dev/null
+++ b/tests/python_tests/webp_encoding_test.py
@@ -0,0 +1,162 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import sys
+import os, mapnik
+from timeit import Timer, time
+from nose.tools import *
+from utilities import execution_path, run_all
+
+def setup():
+    # All of the paths used are relative, if we run the tests
+    # from another directory we need to chdir()
+    os.chdir(execution_path('.'))
+
+if mapnik.has_webp():
+    tmp_dir = '/tmp/mapnik-webp/'
+    if not os.path.exists(tmp_dir):
+       os.makedirs(tmp_dir)
+
+    opts = [
+        'webp',
+        'webp:method=0',
+        'webp:method=6',
+        'webp:quality=64',
+        'webp:alpha=false',
+        'webp:partitions=3',
+        'webp:preprocessing=1',
+        'webp:partition_limit=50',
+        'webp:pass=10',
+        'webp:alpha_quality=50',
+        'webp:alpha_filtering=2',
+        'webp:alpha_compression=0',
+        'webp:autofilter=0',
+        'webp:filter_type=1:autofilter=1',
+        'webp:filter_sharpness=4',
+        'webp:filter_strength=50',
+        'webp:sns_strength=50',
+        'webp:segments=3',
+        'webp:target_PSNR=.5',
+        'webp:target_size=100'
+    ]
+
+
+    def gen_filepath(name,format):
+        return os.path.join('images/support/encoding-opts',name+'-'+format.replace(":","+")+'.webp')
+
+    def test_quality_threshold():
+        im = mapnik.Image(256,256)
+        im.tostring('webp:quality=99.99000')
+        im.tostring('webp:quality=0')
+        im.tostring('webp:quality=0.001')
+
+    @raises(RuntimeError)
+    def test_quality_threshold_invalid():
+        im = mapnik.Image(256,256)
+        im.tostring('webp:quality=101')
+
+    @raises(RuntimeError)
+    def test_quality_threshold_invalid2():
+        im = mapnik.Image(256,256)
+        im.tostring('webp:quality=-1')
+
+    generate = False
+
+    def test_expected_encodings():
+        fails = []
+        try:
+            for opt in opts:
+                im = mapnik.Image(256,256)
+                expected = gen_filepath('blank',opt)
+                actual = os.path.join(tmp_dir,os.path.basename(expected))
+                if generate or not os.path.exists(expected):
+                    print 'generating expected image %s' % expected
+                    im.save(expected,opt)
+                im.save(actual,opt)
+                try:
+                    expected_bytes = mapnik.Image.open(expected).tostring()
+                except RuntimeError:
+                    # this will happen if libweb is old, since it cannot open images created by more recent webp
+                    print 'warning, cannot open webp expected image (your libwebp is likely too old)'
+                    continue
+                if mapnik.Image.open(actual).tostring() != expected_bytes:
+                    fails.append('%s (actual) not == to %s (expected)' % (actual,expected))
+
+            for opt in opts:
+                im = mapnik.Image(256,256)
+                im.background = mapnik.Color('green')
+                expected = gen_filepath('solid',opt)
+                actual = os.path.join(tmp_dir,os.path.basename(expected))
+                if generate or not os.path.exists(expected):
+                    print 'generating expected image %s' % expected
+                    im.save(expected,opt)
+                im.save(actual,opt)
+                try:
+                    expected_bytes = mapnik.Image.open(expected).tostring()
+                except RuntimeError:
+                    # this will happen if libweb is old, since it cannot open images created by more recent webp
+                    print 'warning, cannot open webp expected image (your libwebp is likely too old)'
+                    continue
+                if mapnik.Image.open(actual).tostring() != expected_bytes:
+                    fails.append('%s (actual) not == to %s (expected)' % (actual,expected))
+
+            for opt in opts:
+                im = mapnik.Image.open('images/support/transparency/aerial_rgba.png')
+                expected = gen_filepath('aerial_rgba',opt)
+                actual = os.path.join(tmp_dir,os.path.basename(expected))
+                if generate or not os.path.exists(expected):
+                    print 'generating expected image %s' % expected
+                    im.save(expected,opt)
+                im.save(actual,opt)
+                try:
+                    expected_bytes = mapnik.Image.open(expected).tostring()
+                except RuntimeError:
+                    # this will happen if libweb is old, since it cannot open images created by more recent webp
+                    print 'warning, cannot open webp expected image (your libwebp is likely too old)'
+                    continue
+                if mapnik.Image.open(actual).tostring() != expected_bytes:
+                    fails.append('%s (actual) not == to %s (expected)' % (actual,expected))
+            # disabled to avoid failures on ubuntu when using old webp packages
+            #eq_(fails,[],'\n'+'\n'.join(fails))
+        except RuntimeError, e:
+            print e
+
+    def test_transparency_levels():
+        try:
+            # create partial transparency image
+            im = mapnik.Image(256,256)
+            im.background = mapnik.Color('rgba(255,255,255,.5)')
+            c2 = mapnik.Color('rgba(255,255,0,.2)')
+            c3 = mapnik.Color('rgb(0,255,255)')
+            for y in range(0,im.height()/2):
+                for x in range(0,im.width()/2):
+                    im.set_pixel(x,y,c2)
+            for y in range(im.height()/2,im.height()):
+                for x in range(im.width()/2,im.width()):
+                    im.set_pixel(x,y,c3)
+
+            t0 = tmp_dir + 'white0-actual.webp'
+
+            # octree
+            format = 'webp'
+            expected = 'images/support/transparency/white0.webp'
+            if generate or not os.path.exists(expected):
+                im.save('images/support/transparency/white0.webp')
+            im.save(t0,format)
+            im_in = mapnik.Image.open(t0)
+            t0_len = len(im_in.tostring(format))
+            try:
+                expected_bytes = mapnik.Image.open(expected).tostring(format)
+            except RuntimeError:
+                # this will happen if libweb is old, since it cannot open images created by more recent webp
+                print 'warning, cannot open webp expected image (your libwebp is likely too old)'
+                return
+            # disabled to avoid failures on ubuntu when using old webp packages
+            #eq_(t0_len,len(expected_bytes))
+        except RuntimeError, e:
+            print e
+
+
+if __name__ == "__main__":
+    setup()
+    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
diff --git a/tests/run_tests.py b/tests/run_tests.py
index 5d89dd9..edf7974 100755
--- a/tests/run_tests.py
+++ b/tests/run_tests.py
@@ -7,7 +7,8 @@ try:
 except ImportError, e:
     sys.stderr.write("Unable to run python tests: the third party 'nose' module is required\nTo install 'nose' do:\n\tsudo pip install nose (or on debian systems: apt-get install python-nose): %s\n" % e)
     sys.exit(1)
-    
+
+import mapnik    
 from python_tests.utilities import TodoPlugin
 from nose.plugins.doctests import Doctest
 
@@ -56,8 +57,14 @@ def main():
         print("- mapnik path: %s" % mapnik.__file__)
         if hasattr(mapnik,'_mapnik'):
            print("- _mapnik.so path: %s" % mapnik._mapnik.__file__)
-        print("- Input plugins path: %s" % mapnik.inputpluginspath)
-        print("- Font path: %s" % mapnik.fontscollectionpath)
+        if hasattr(mapnik,'inputpluginspath'):
+            print ("- Input plugins path: %s" % mapnik.inputpluginspath)
+        if os.environ.has_key('MAPNIK_INPUT_PLUGINS_DIRECTORY'):
+            print ("- MAPNIK_INPUT_PLUGINS_DIRECTORY env: %s" % os.environ.get('MAPNIK_INPUT_PLUGINS_DIRECTORY'))
+        if hasattr(mapnik,'fontscollectionpath'):
+            print("- Font path: %s" % mapnik.fontscollectionpath)
+        if os.environ.has_key('MAPNIK_FONT_DIRECTORY'):
+            print ("- MAPNIK_FONT_DIRECTORY env: %s" % os.environ.get('MAPNIK_FONT_DIRECTORY'))
         print('')
         print("- Running nosetests:")
         print('')
diff --git a/tests/visual_tests/compare.py b/tests/visual_tests/compare.py
index 9130059..345067f 100644
--- a/tests/visual_tests/compare.py
+++ b/tests/visual_tests/compare.py
@@ -1,7 +1,9 @@
 # -*- coding: utf-8 -*-
 
+import os
 import sys
 import mapnik
+import platform
 
 try:
     import json
@@ -10,6 +12,11 @@ except ImportError:
 
 COMPUTE_THRESHOLD = 16
 
+# testcase images are generated on OS X
+# so they should exactly match
+if platform.uname()[0] == 'Darwin':
+    COMPUTE_THRESHOLD = 2
+
 # returns true if pixels are not identical
 def compare_pixels(pixel1, pixel2, alpha=True):
     if pixel1 == pixel2:
@@ -34,10 +41,7 @@ def compare_pixels(pixel1, pixel2, alpha=True):
 # compare two images and return number of different pixels
 def compare(actual, expected, alpha=True):
     im1 = mapnik.Image.open(actual)
-    try:
-        im2 = mapnik.Image.open(expected)
-    except RuntimeError:
-        return 99999990
+    im2 = mapnik.Image.open(expected)
     diff = 0
     pixels = im1.width() * im1.height()
     delta_pixels = (im2.width() * im2.height()) - pixels
@@ -53,12 +57,29 @@ def compare_grids(actual, expected, threshold=0, alpha=True):
     global errors
     global passed
     im1 = json.loads(open(actual).read())
-    try:
-        im2 = json.loads(open(expected).read())
-    except RuntimeError:
-        return 9999990
-    equal = (im1 == im2)
+    im2 = json.loads(open(expected).read())
     # TODO - real diffing
-    if not equal:
+    if not im1['data'] == im2['data']:
+        return 99999999
+    if not im1['keys'] == im2['keys']:
+        return 99999999
+    grid1 = im1['grid']
+    grid2 = im2['grid']
+    # dimensions must be exact
+    width1 = len(grid1[0])
+    width2 = len(grid2[0])
+    if not width1 == width2:
         return 99999999
-    return 0
+    height1 = len(grid1)
+    height2 = len(grid2)
+    if not height1 == height2:
+        return 99999999
+    diff = 0;
+    for y in range(0,height1-1):
+        row1 = grid1[y]
+        row2 = grid2[y]
+        width = min(len(row1),len(row2))
+        for w in range(0,width):
+            if row1[w] != row2[w]:
+                diff += 1
+    return diff
diff --git a/tests/visual_tests/data/aerial_rgba.tiff b/tests/visual_tests/data/aerial_rgba.tiff
new file mode 100644
index 0000000..bccfd57
Binary files /dev/null and b/tests/visual_tests/data/aerial_rgba.tiff differ
diff --git a/tests/visual_tests/data/bug1532.csv b/tests/visual_tests/data/bug1532.csv
new file mode 100644
index 0000000..f38b6c9
--- /dev/null
+++ b/tests/visual_tests/data/bug1532.csv
@@ -0,0 +1,5 @@
+wrap|type|wkt
+no|point|POINT(0.28436221472838974 0.2614258628766519)
+yes|point|POINT(0.1306627157552161 0.2589062249349994)
+no|line|LINESTRING(0.48404558019763577 0.22552097681732494, 0.7876650822675934 0.22426115456321344)
+yes|line|LINESTRING(0.48341566421823756 0.32315682259650147, 0.7870351662881953 0.3218970105980799)
diff --git a/tests/visual_tests/data/bug1533.csv b/tests/visual_tests/data/bug1533.csv
new file mode 100644
index 0000000..5c38f17
--- /dev/null
+++ b/tests/visual_tests/data/bug1533.csv
@@ -0,0 +1,5 @@
+wkt
+"LINESTRING(0.8511083807156015 0.03967486460801543, 0.5994991376749135 0.2096131480715248)"
+"LINESTRING(0.27084293293759165 0.26302812355087024, 0.04604697152647152 0.05893796680132844)"
+"LINESTRING(0.07145061369178042 0.3118185090592599, 0.3750701157617382 0.3105586956821123)"
+"LINESTRING(0.8179010492787097 0.3099287889371784, 0.514281547208752 0.3111886023894954)"
diff --git a/tests/visual_tests/data/charplacement.dbf b/tests/visual_tests/data/charplacement.dbf
new file mode 100644
index 0000000..c143baa
Binary files /dev/null and b/tests/visual_tests/data/charplacement.dbf differ
diff --git a/tests/visual_tests/data/charplacement.shp b/tests/visual_tests/data/charplacement.shp
new file mode 100644
index 0000000..ccdfcf4
Binary files /dev/null and b/tests/visual_tests/data/charplacement.shp differ
diff --git a/tests/visual_tests/data/charplacement.shx b/tests/visual_tests/data/charplacement.shx
new file mode 100644
index 0000000..65b8dab
Binary files /dev/null and b/tests/visual_tests/data/charplacement.shx differ
diff --git a/tests/visual_tests/data/crossing-lines.csv b/tests/visual_tests/data/crossing-lines.csv
new file mode 100644
index 0000000..3b51da0
--- /dev/null
+++ b/tests/visual_tests/data/crossing-lines.csv
@@ -0,0 +1,7 @@
+i|wkt
+1|LINESTRING(10  0, 20 0)
+1|LINESTRING(10  10, 20 10)
+1|LINESTRING(15  5, 20 5)
+1|LINESTRING(15  5, 20 5)
+1|LINESTRING(10  5, 15 5)
+1|LINESTRING(10  5, 15 5)
diff --git a/tests/visual_tests/data/displacement.dbf b/tests/visual_tests/data/displacement.dbf
new file mode 100644
index 0000000..06ec320
Binary files /dev/null and b/tests/visual_tests/data/displacement.dbf differ
diff --git a/tests/visual_tests/data/displacement.shp b/tests/visual_tests/data/displacement.shp
new file mode 100644
index 0000000..899b163
Binary files /dev/null and b/tests/visual_tests/data/displacement.shp differ
diff --git a/tests/visual_tests/data/displacement.shx b/tests/visual_tests/data/displacement.shx
new file mode 100644
index 0000000..359820d
Binary files /dev/null and b/tests/visual_tests/data/displacement.shx differ
diff --git a/tests/visual_tests/data/grouped-rendering.sqlite b/tests/visual_tests/data/grouped-rendering.sqlite
new file mode 100644
index 0000000..277c0f5
Binary files /dev/null and b/tests/visual_tests/data/grouped-rendering.sqlite differ
diff --git a/tests/visual_tests/data/heat.tif b/tests/visual_tests/data/heat.tif
new file mode 100644
index 0000000..5ea60e3
Binary files /dev/null and b/tests/visual_tests/data/heat.tif differ
diff --git a/tests/visual_tests/data/heat_nodata.tif b/tests/visual_tests/data/heat_nodata.tif
new file mode 100644
index 0000000..ed6d71e
Binary files /dev/null and b/tests/visual_tests/data/heat_nodata.tif differ
diff --git a/tests/visual_tests/data/heat_rgb.tif b/tests/visual_tests/data/heat_rgb.tif
new file mode 100644
index 0000000..c9ad3b5
Binary files /dev/null and b/tests/visual_tests/data/heat_rgb.tif differ
diff --git a/tests/visual_tests/data/line.dbf b/tests/visual_tests/data/line.dbf
new file mode 100755
index 0000000..c27e6d5
Binary files /dev/null and b/tests/visual_tests/data/line.dbf differ
diff --git a/tests/visual_tests/data/line.shp b/tests/visual_tests/data/line.shp
new file mode 100755
index 0000000..5297698
Binary files /dev/null and b/tests/visual_tests/data/line.shp differ
diff --git a/tests/visual_tests/data/line.shx b/tests/visual_tests/data/line.shx
new file mode 100755
index 0000000..60746df
Binary files /dev/null and b/tests/visual_tests/data/line.shx differ
diff --git a/tests/visual_tests/data/lines2.csv b/tests/visual_tests/data/lines2.csv
new file mode 100644
index 0000000..4d9b595
--- /dev/null
+++ b/tests/visual_tests/data/lines2.csv
@@ -0,0 +1,17 @@
+WKT
+"LINESTRING (0.764185269 -0.313888573,0.751190328 -0.314123131,0.737134133 -0.314376844,0.725222103 -0.314591855,0.702047791 -0.315010149,0.688792951 -0.315249398,0.67553811 -0.315488647,0.661092067 -0.315749397,0.641426389 -0.31610436,0.627370194 -0.316358073,0.597525145 -0.316896774,0.584140356 -0.317138368,0.570885515 -0.317377617,0.549747077 -0.317759164,0.533546717 -0.318051579,0.511866823 -0.318442899)"
+"LINESTRING (0.289403766 -0.004374853,0.278998818 -0.012163343,0.267744132 -0.020587892,0.258206263 -0.027727341,0.239650772 -0.041616812,0.229037724 -0.049561069,0.218424677 -0.057505325,0.206857843 -0.066163524,0.191111688 -0.077950096,0.179857002 -0.086374637,0.155960304 -0.104262178,0.145243208 -0.112284308,0.134630161 -0.120228551,0.117704778 -0.132897797,0.104733276 -0.14260742,0.087374354 -0.155601173)"
+"LINESTRING (0.374895934 -0.188749064,0.362443535 -0.270566448,0.295784263 -0.319614717,0.213966216 -0.307162504,0.164917295 -0.240503998,0.177369693 -0.158686453,0.244028965 -0.109637668,0.325847013 -0.122090041,0.374895934 -0.188749064)"
+"LINESTRING (0.892955147 -0.270397048,0.894000762 0.309916722)"
+"LINESTRING (0.055417591 0.248226176,0.059600051 -0.260986614)"
+"LINESTRING (0.777676102 0.026948692,0.765128722 0.016492544,0.747353269 0.008127625,0.731669045 0.012310084,0.719121666 0.021720618,0.708665516 0.03740484,0.697163752 0.05099783,0.685661988 0.06040836,0.666840919 0.061453974,0.646974236 0.054134673,0.627107552 0.041587299,0.608286483 0.024857463,0.59260226 0.013878507,0.574826806 0.005513587,0.559142582 0.009696047,0.546595203 0.019106581,0.536139054 0.034790803,0.524637289 0.048383794,0.513135525 0.057794324,0.494314456 0.058839938,0.4 [...]
+"LINESTRING (0.093560033 0.138666471,0.112381102 0.155396254,0.132247785 0.167943584,0.152114469 0.175262855,0.170935538 0.174217245,0.182437302 0.164806752,0.193939066 0.15121381,0.204395215 0.135529635,0.216942594 0.126119125,0.232626818 0.121936675,0.250402272 0.130301574,0.266086496 0.1412805,0.284907564 0.158010282,0.304774248 0.170557609,0.324640932 0.17787688,0.343462 0.17683127,0.354963765 0.167420778,0.366465529 0.153827838,0.376921678 0.138143665,0.389469057 0.128733156,0.40515 [...]
+"LINESTRING (0.848982597 0.288736581,0.754751857 0.220905399,0.657509669 0.293052099,0.548765717 0.208358108,0.429565615 0.301416905,0.295726905 0.205221284,0.170253114 0.303508106,0.083467075 0.248091159)"
+"LINESTRING (0.090332128 0.348151688,0.187574317 0.410887204,0.309911263 0.313646971,0.436430669 0.403568084,0.548311466 0.316783769,0.660192263 0.398340138,0.759525681 0.319920565,0.85656627 0.390823271)"
+"LINESTRING (0.613502456 -0.015963875,0.790148448 -0.024699116,0.812471843 -0.037316685,0.828971743 -0.062551817,0.830912908 -0.097492748,0.828001161 -0.133404222,0.821207084 -0.172227378,0.807618931 -0.188727197,0.760060395 -0.191638928,0.603796632 -0.185815465)"
+"LINESTRING (0.680933124 -0.244990843,0.50407624 -0.24631506,0.481071446 -0.234987473,0.463163199 -0.210731652,0.459238186 -0.175957816,0.460103038 -0.139938937,0.464678354 -0.100792195,0.477306218 -0.0835463,0.52462221 -0.077934757,0.680964265 -0.074862572)"
+"LINESTRING (0.345138881 -0.004954418,0.367100653 -0.140842741)"
+"LINESTRING (0.41651464 -0.017307915,0.393180257 -0.171040066)"
+"LINESTRING (0.45220252 -0.037897074,0.59769926 -0.042014905)"
+"LINESTRING (0.72397945 -0.139470135,0.577110099 -0.140842741)"
+"LINESTRING (0.820051288 0.095328839,0.850629325 0.095086193,0.850629325 0.072034887,0.735372668 0.072034887)"
diff --git a/tests/visual_tests/data/lower_columbia.tif b/tests/visual_tests/data/lower_columbia.tif
new file mode 100644
index 0000000..1a0cfa8
Binary files /dev/null and b/tests/visual_tests/data/lower_columbia.tif differ
diff --git a/tests/visual_tests/data/overlap.dbf b/tests/visual_tests/data/overlap.dbf
new file mode 100644
index 0000000..566f81b
Binary files /dev/null and b/tests/visual_tests/data/overlap.dbf differ
diff --git a/tests/visual_tests/data/overlap.shp b/tests/visual_tests/data/overlap.shp
new file mode 100644
index 0000000..7462a5b
Binary files /dev/null and b/tests/visual_tests/data/overlap.shp differ
diff --git a/tests/visual_tests/data/overlap.shx b/tests/visual_tests/data/overlap.shx
new file mode 100644
index 0000000..c6308ec
Binary files /dev/null and b/tests/visual_tests/data/overlap.shx differ
diff --git a/tests/visual_tests/data/pattern.png b/tests/visual_tests/data/pattern.png
new file mode 100644
index 0000000..b1d977a
Binary files /dev/null and b/tests/visual_tests/data/pattern.png differ
diff --git a/tests/visual_tests/data/points.csv b/tests/visual_tests/data/points.csv
index f895b61..16b469d 100644
--- a/tests/visual_tests/data/points.csv
+++ b/tests/visual_tests/data/points.csv
@@ -1,11 +1,11 @@
-lat,long,name,nr
-0,0,Test one,1
-0,0.1,Test two,2
-0,0.2,Test three,3
-0,0.3,Test four,4
-0,0.4,Test five,5
-0,0.5,Test six,6
-0,0.6,Test seven,7
-0,0.7,Test eight,8
-0,0.8,Test nine,9
-0,0.9,Test ten,10
\ No newline at end of file
+lat,long,name,nr,color
+0,0,Test one,1,#ff0000
+0,0.1,Test two,2,red
+0,0.2,Test three,3,#00ff00
+0,0.3,Test four,4,green
+0,0.4,Test five,5,#0000ff
+0,0.5,Test six,6,blue
+0,0.6,Test seven,7,#000000
+0,0.7,Test eight,8,black
+0,0.8,Test nine,9,#ffffff
+0,0.9,Test ten,10,white
\ No newline at end of file
diff --git a/tests/visual_tests/data/repeat-labels.csv b/tests/visual_tests/data/repeat-labels.csv
new file mode 100644
index 0000000..2062940
--- /dev/null
+++ b/tests/visual_tests/data/repeat-labels.csv
@@ -0,0 +1,10 @@
+wkt,type,name,ref
+"POINT(-3 -0.40)",poi,,
+"POINT(3 -0.40)",poi,,
+"POINT(-3 -3.6)",poi,,
+"POINT(3 -3.6)",poi,,
+"LINESTRING(-12 2, 12 2)",motorway,First Hwy,1
+"LINESTRING(-12 1, 12 1)",motorway,First Hwy,1
+"LINESTRING(-12 3, 12 3)",motorway,Second Hwy,2
+"LINESTRING(-12 -1, 8 -1, 8 -2, -8 -2, -8 -3, 12 -3)",secondary,Main Street,
+
diff --git a/tests/visual_tests/data/satellite.png b/tests/visual_tests/data/satellite.png
new file mode 100644
index 0000000..0275f36
Binary files /dev/null and b/tests/visual_tests/data/satellite.png differ
diff --git a/tests/visual_tests/data/text-data-binding.sqlite b/tests/visual_tests/data/text-data-binding.sqlite
new file mode 100644
index 0000000..2348be2
Binary files /dev/null and b/tests/visual_tests/data/text-data-binding.sqlite differ
diff --git a/tests/visual_tests/data/textspacing.dbf b/tests/visual_tests/data/textspacing.dbf
new file mode 100644
index 0000000..bd1b127
Binary files /dev/null and b/tests/visual_tests/data/textspacing.dbf differ
diff --git a/tests/visual_tests/data/textspacing.shp b/tests/visual_tests/data/textspacing.shp
new file mode 100644
index 0000000..60dc7c0
Binary files /dev/null and b/tests/visual_tests/data/textspacing.shp differ
diff --git a/tests/visual_tests/data/textspacing.shx b/tests/visual_tests/data/textspacing.shx
new file mode 100644
index 0000000..9c4767d
Binary files /dev/null and b/tests/visual_tests/data/textspacing.shx differ
diff --git a/tests/visual_tests/grids/building-symbolizer-opacity-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/building-symbolizer-opacity-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..2e111c9
--- /dev/null
+++ b/tests/visual_tests/grids/building-symbolizer-opacity-512-512-1.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                     !                          ", 
+  "                                                                                                    !!!                         ", 
+  "                                                                                                   !!!!!                        ", 
+  "                                                                                                  !!!!!!!                       ", 
+  "                                                                                                 !!!!!!!!!                      ", 
+  "                                                                                                !!!!!!!!!!!                     ", 
+  "                                                                                               !!!!!!!!!!!!!                    ", 
+  "                                                                                              !!!!!!!!!!!!!!!                   ", 
+  "                                                                                             !!!!!!!!!!!!!!!!!                  ", 
+  "                                                                                            !!!!!!!!!!!!!!!!!!!                 ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!                ", 
+  "                                                                                          !!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             ##                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            ####           #                                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           ######         ###                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          ########       #####                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         ##########     #######                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        ############   #########                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "       ############## ###########                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "     ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "############################                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "   ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "     ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "       ############## ###########                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "        ############   #########                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "         ##########     #######                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "          ########       #####                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           ######         ###                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "            ####           #                                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "             ##                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                                                          !!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!                ", 
+  "                                                                                            !!!!!!!!!!!!!!!!!!!                 ", 
+  "                                                                                             !!!!!!!!!!!!!!!!!                  ", 
+  "                                                                                              !!!!!!!!!!!!!!!                   ", 
+  "                                                                                               !!!!!!!!!!!!!                    ", 
+  "                                                                                                !!!!!!!!!!!                     ", 
+  "                                                                                                 !!!!!!!!!                      ", 
+  "                                                                                                  !!!!!!!                       ", 
+  "                                                                                                   !!!!!                        ", 
+  "                                                                                                    !!!                         ", 
+  "                                                                                                     !                          ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                 !!                                                                  !                          ", 
+  "                                !!!!                                                                !!!                         ", 
+  "                               !!!!!!                                                              !!!!!                        ", 
+  "                              !!!!!!!!                                                            !!!!!!!                       ", 
+  "                             !!!!!!!!!!                                                          !!!!!!!!!                      ", 
+  "                            !!!!!!!!!!!!                                                        !!!!!!!!!!!                     ", 
+  "                           !!!!!!!!!!!!!!                                                      !!!!!!!!!!!!!                    ", 
+  "                          !!!!!!!!!!!!!!!!                                                    !!!!!!!!!!!!!!!                   ", 
+  "                         !!!!!!!!!!!!!!!!!!                                                  !!!!!!!!!!!!!!!!!                  ", 
+  "                        !!!!!!!!!!!!!!!!!!!!                                                !!!!!!!!!!!!!!!!!!!                 ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!                                              !!!!!!!!!!!!!!!!!!!!!                ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!                                            !!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!                                         !!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!                                           !!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!                                             !!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                        !!!!!!!!!!!!!!!!!!!!                                               !!!!!!!!!!!!!!!!!!!!                 ", 
+  "                         !!!!!!!!!!!!!!!!!!                                                 !!!!!!!!!!!!!!!!!!                  ", 
+  "                          !!!!!!!!!!!!!!!!                                                   !!!!!!!!!!!!!!!!                   ", 
+  "                           !!!!!!!!!!!!!!                                                     !!!!!!!!!!!!!!                    ", 
+  "                            !!!!!!!!!!!!                                                       !!!!!!!!!!!!                     ", 
+  "                             !!!!!!!!!!                                                         !!!!!!!!!!                      ", 
+  "                              !!!!!!!!                                                           !!!!!!!!                       ", 
+  "                               !!!!!!                                                             !!!!!!                        ", 
+  "                                !!!!                                                               !!!!                         ", 
+  "                                 !!                                                                 !!                          ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/building-symbolizer-opacity-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/building-symbolizer-opacity-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..2e111c9
--- /dev/null
+++ b/tests/visual_tests/grids/building-symbolizer-opacity-512-512-2.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                     !                          ", 
+  "                                                                                                    !!!                         ", 
+  "                                                                                                   !!!!!                        ", 
+  "                                                                                                  !!!!!!!                       ", 
+  "                                                                                                 !!!!!!!!!                      ", 
+  "                                                                                                !!!!!!!!!!!                     ", 
+  "                                                                                               !!!!!!!!!!!!!                    ", 
+  "                                                                                              !!!!!!!!!!!!!!!                   ", 
+  "                                                                                             !!!!!!!!!!!!!!!!!                  ", 
+  "                                                                                            !!!!!!!!!!!!!!!!!!!                 ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!                ", 
+  "                                                                                          !!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             ##                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            ####           #                                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           ######         ###                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          ########       #####                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         ##########     #######                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        ############   #########                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "       ############## ###########                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "     ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " ###########################                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "############################                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "   ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "     ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      ##########################                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "       ############## ###########                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "        ############   #########                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "         ##########     #######                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "          ########       #####                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           ######         ###                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "            ####           #                                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "             ##                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                                                          !!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!                ", 
+  "                                                                                            !!!!!!!!!!!!!!!!!!!                 ", 
+  "                                                                                             !!!!!!!!!!!!!!!!!                  ", 
+  "                                                                                              !!!!!!!!!!!!!!!                   ", 
+  "                                                                                               !!!!!!!!!!!!!                    ", 
+  "                                                                                                !!!!!!!!!!!                     ", 
+  "                                                                                                 !!!!!!!!!                      ", 
+  "                                                                                                  !!!!!!!                       ", 
+  "                                                                                                   !!!!!                        ", 
+  "                                                                                                    !!!                         ", 
+  "                                                                                                     !                          ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                 !!                                                                  !                          ", 
+  "                                !!!!                                                                !!!                         ", 
+  "                               !!!!!!                                                              !!!!!                        ", 
+  "                              !!!!!!!!                                                            !!!!!!!                       ", 
+  "                             !!!!!!!!!!                                                          !!!!!!!!!                      ", 
+  "                            !!!!!!!!!!!!                                                        !!!!!!!!!!!                     ", 
+  "                           !!!!!!!!!!!!!!                                                      !!!!!!!!!!!!!                    ", 
+  "                          !!!!!!!!!!!!!!!!                                                    !!!!!!!!!!!!!!!                   ", 
+  "                         !!!!!!!!!!!!!!!!!!                                                  !!!!!!!!!!!!!!!!!                  ", 
+  "                        !!!!!!!!!!!!!!!!!!!!                                                !!!!!!!!!!!!!!!!!!!                 ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!                                              !!!!!!!!!!!!!!!!!!!!!                ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!                                            !!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!                                         !!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!                                           !!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!                                             !!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                        !!!!!!!!!!!!!!!!!!!!                                               !!!!!!!!!!!!!!!!!!!!                 ", 
+  "                         !!!!!!!!!!!!!!!!!!                                                 !!!!!!!!!!!!!!!!!!                  ", 
+  "                          !!!!!!!!!!!!!!!!                                                   !!!!!!!!!!!!!!!!                   ", 
+  "                           !!!!!!!!!!!!!!                                                     !!!!!!!!!!!!!!                    ", 
+  "                            !!!!!!!!!!!!                                                       !!!!!!!!!!!!                     ", 
+  "                             !!!!!!!!!!                                                         !!!!!!!!!!                      ", 
+  "                              !!!!!!!!                                                           !!!!!!!!                       ", 
+  "                               !!!!!!                                                             !!!!!!                        ", 
+  "                                !!!!                                                               !!!!                         ", 
+  "                                 !!                                                                 !!                          ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/charspacing-200-400-1.0-grid-reference.json b/tests/visual_tests/grids/charspacing-200-400-1.0-grid-reference.json
new file mode 100644
index 0000000..617c072
--- /dev/null
+++ b/tests/visual_tests/grids/charspacing-200-400-1.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "6"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                 ! ! !! !!!! ! !!! !              ", 
+  "                 ! !!!!  !! !   !! !!!            ", 
+  "                  !      !      !  ! !            ", 
+  "                 ! ! !! !!!!!   !!                ", 
+  "                        !! ! !  !! !              ", 
+  "                 !!! !! !!!! ! !!!   !!           ", 
+  "                 !! !!!  !! !   !!   !            ", 
+  "                 !       !         !  !           ", 
+  "                    !!  !!!!!   !!    !           ", 
+  "                 !      !! ! !   ! !              ", 
+  "                   !! ! !! ! !!! ! !! !           ", 
+  "                   !!!   !!   ! !! !  !           ", 
+  "                 !!      !    !       !           ", 
+  "                ! !!!   !!!!  !  ! !! !           ", 
+  "                 !  !   !! ! !   !    !           ", 
+  "                ! ! ! ! !! ! !!! ! !! !           ", 
+  "                !!!!    !!!   !  ! !!!!           ", 
+  "                !!!      !    !  !  ! !!          ", 
+  "                ! ! !!   !!!  !!   !!             ", 
+  "                    !   !! ! !                    ", 
+  "                !!! !!  !! ! !!! !    !!          ", 
+  "                !!  !!  !!!   !!    !!!!          ", 
+  "                !        !    !  !  !  !          ", 
+  "                    !! ! !!!  !!!      !          ", 
+  "                !        ! ! !      !             ", 
+  "                  !!!!  !! ! !!! !  !             ", 
+  "                  !!!! !!!    !!!!  !             ", 
+  "               !              !  !   !  !         ", 
+  "                   !   !   !  ! !!!  !  !         ", 
+  "               !       ! ! ! !    !     !         ", 
+  "                ! ! !  ! ! ! !  ! !  !!           ", 
+  "                    !      !         ! ! !        ", 
+  "             ! !                  !   !   !       ", 
+  "               ! !!!  ! !! !    !!!!      !       ", 
+  "             !          !    !    !!      !       ", 
+  "            !! ! !! !   ! !  ! !   !! !           ", 
+  "            !!   !!     ! !! ! !   !!     !!      ", 
+  "         !  !             !           !       !   ", 
+  "            !! !! !    !     !       !  !    !!   ", 
+  "         !     !       !  !  !  !             !   ", 
+  "         !!  !  !!    !   !  !   !  !  !   !      ", 
+  "         !!     !         !  !!     !     !!      ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/charspacing-200-400-2.0-grid-reference.json b/tests/visual_tests/grids/charspacing-200-400-2.0-grid-reference.json
new file mode 100644
index 0000000..38fe2f0
--- /dev/null
+++ b/tests/visual_tests/grids/charspacing-200-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "6"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                !                 ", 
+  "       !      !   !  !  !  !  !   !  !   ! !  ! ! ", 
+  "       !    !  ! !  !  ! !  !!  !! !! !  ! !  ! ! ", 
+  "       !    !  ! !    !! !! !!  !! !! !  ! !  ! ! ", 
+  "        !     !      ! !!  !  !       !   !    !  ", 
+  "          !            !        !    !            ", 
+  "       ! !!!  !      !  !  !  !      !     !   !  ", 
+  "          ! !  !    !  ! !  !!  !  !  !        !  ", 
+  "       ! !! !! !       ! !! !!  !  !  !    !   !  ", 
+  "        !     !      ! !!  !  !       !   !       ", 
+  "          !            !        !    !            ", 
+  "      !   !!  !  !   !  !  !  !    !      !     ! ", 
+  "      !   !    !!   !  ! !  !!  !  ! !    ! !   ! ", 
+  "      !   !  ! !!      ! !! !!  !    !    !    !  ", 
+  "       !!     !     !! !!  !  !            !      ", 
+  "                       !        !     !           ", 
+  "      !      !!  !   !  !  !  !    !  !   ! !    !", 
+  "      !    !    !   !  !    !!  ! !  ! !  ! !   ! ", 
+  "      !    !    !    ! !  ! !!  ! !  ! !  ! !    !", 
+  "       !     !      !! !!  !  !        !   !    ! ", 
+  "         !             !        !     !           ", 
+  "      ! !!!  !   !  !!  !  !  !    !  !   ! !   !!", 
+  "     !   ! !  ! !   !  !    !!  ! !  ! !  ! !   !!", 
+  "        !! !  ! !    ! !  ! !!  ! !  ! !  ! !  !!!", 
+  "       !     !      !   !  !  !        !   !      ", 
+  "         !                      !     !           ", 
+  "     !   !!  !   !  !   !  !  !    !  !    !!   ! ", 
+  "     !   !    ! !      !     !  ! ! !! !        !!", 
+  "     !   !  ! !      ! !  ! !!  ! ! !! !   !!     ", 
+  "      !!     !      !   !  !  !        !        !!", 
+  "                                      !           ", 
+  "     ! !  !  !      !      !  !    !  !    ! !  ! ", 
+  "          !    !        !    !    ! !  !   ! !  !!", 
+  "     !    ! ! !!     !  ! !  !    ! !  !   ! !  ! ", 
+  "      !     !       !   ! !   !        !    !    !", 
+  "        !                             !           ", 
+  "    !   !!  !   !   !      !  !    !  !    ! !    ", 
+  "    !   ! !  ! !   !    !    !    ! !      ! !    ", 
+  "    !   ! !  ! !     !  ! !  !    ! ! !    ! !    ", 
+  "      !     !       !     !   !             !     ", 
+  "        !                             !           ", 
+  "    !   !!  !   !   !  !   !  !    !         !   !", 
+  "    !   ! !  ! !   !  ! !    !    ! ! ! !  ! !   !", 
+  "    !   ! !! ! !     !! ! !  !    ! ! ! !    !   !", 
+  "     !      !       ! !!  !   !             !     ", 
+  "                      !                !          ", 
+  "    ! !  !  !   !   !  !   !  !        !    !    !", 
+  "         !   ! !   !  ! !    !      ! ! !        !", 
+  "    ! !    ! !        ! ! !  !      ! ! !   !     ", 
+  "     !      !       ! !!  !   !         !    !    ", 
+  "       !              !          !     !          ", 
+  "   !   !!   !       !  !   !  !     !  !     !    ", 
+  "   !   ! !         !  ! !    !   !  ! ! !    !    ", 
+  "   !   ! ! !          ! ! !  !   !    ! !    !    ", 
+  "    !!     !       !! !!  !   !         !         ", 
+  "                      !          !     !          ", 
+  " !     !  !   !    !   !  !    !    !   !     !   ", 
+  " !         ! !    !   ! !        ! ! ! ! !    !   ", 
+  " !       ! ! !      ! ! !  !     ! ! ! ! !    !   ", 
+  "   !      !        !  !!  !   !!         !        ", 
+  "    !                 !                 !         ", 
+  "! ! !!   !   !    !!      !    !     !   !      ! ", 
+  "    ! !   ! !     !    !   !        !   ! !     ! ", 
+  "  ! ! ! ! ! !      !   !   !        !   ! !    !  ", 
+  " !       !        !       !    !          !       ", 
+  "  !                               !      !        ", 
+  "! !    !    !     !   !   !    !                  ", 
+  "  ! !      !     !   ! !   !  !   !   !  !       !", 
+  "! ! !   !  !         ! ! ! !  !   !   !  !       !", 
+  "       !          !  !!   !    !                  ", 
+  "  !                  !                 !  !       ", 
+  "  !!    !    !      !    !    !     !       !     ", 
+  "  !      !  !           ! !    !       !   !    ! ", 
+  "  ! !  ! !  !        !  ! !  ! !       !   !    ! ", 
+  "        !           !   !!    !    !!             ", 
+  "                        !                 !      !", 
+  "   !      !        !     !     !     !         !  ", 
+  "    !    !        !     ! !     !   !     !   ! ! ", 
+  "  ! !                   ! !   ! !   !     !   ! ! ", 
+  "   !               !    !!     !     !            ", 
+  "                        !                   !     ", 
+  "      !          !      !      !       !          ", 
+  "!    !                 ! !      !           !     ", 
+  "!    !            !    ! !    ! !           !     ", 
+  "                 !     !!      !      !!          ", 
+  "                       !                          ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/charspacing-lines-300-300-1.0-grid-reference.json b/tests/visual_tests/grids/charspacing-lines-300-300-1.0-grid-reference.json
new file mode 100644
index 0000000..a792e96
--- /dev/null
+++ b/tests/visual_tests/grids/charspacing-lines-300-300-1.0-grid-reference.json
@@ -0,0 +1,84 @@
+{
+ "keys": [
+  "", 
+  "6"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                    !  !   !    !!  !  !!  !  !  !   !                     ", 
+  "                !   !  !        !!  !  !!  !  !      !     !               ", 
+  "                   !! !                                 !                  ", 
+  "                      !! !! !    !  !  !  !    !! !!                       ", 
+  "                                                  !!                       ", 
+  "                      !  !  ! !   ! !! ! !!  !! !    !                     ", 
+  "                      !!    ! !   ! !! ! !!  !! !    !                     ", 
+  "                       !!!                      !   !                      ", 
+  "                         !!!!    !   !    !!!!                             ", 
+  "                                             !                             ", 
+  "                          ! ! !  ! ! ! !  ! !   !                          ", 
+  "                        ! ! ! !  ! ! ! !    !  !!  !                       ", 
+  "                         !                     !  !                        ", 
+  "                             !   ! ! !         !                           ", 
+  "                                            !                              ", 
+  "                            ! !!  !!!! !!!!!!                              ", 
+  "                          !  !!!  !!!! !!!!!! !  !                         ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "                              !!  !!!!  !!!!!    !                         ", 
+  "                                   !       !                               ", 
+  "                          ! ! ! ! !!!! !!!!!     !                         ", 
+  "                          !!! !   !!!! !!!!!  !  !                         ", 
+  "                          !!!           !     ! !!                         ", 
+  "                          ! !!!   !!!!  !!!                                ", 
+  "                                   !       !                               ", 
+  "                          ! !!! ! !!!! !!! !  ! !                          ", 
+  "                           !!!!   !!!! !!!!!  !!!!                         ", 
+  "                           !            !     ! !                          ", 
+  "                             !!!  !!!!  !!   !!                            ", 
+  "                                   !       !                               ", 
+  "                             !!!! !!!! !!! ! !! !                          ", 
+  "                           !  !!  !!!! !!  ! !!!                           ", 
+  "                           !!           !    !  !                          ", 
+  "                               !! !!!!  !    !! !                          ", 
+  "                                   !       !                               ", 
+  "                           ! ! !! ! !! !!! !    !                          ", 
+  "                           !!  !! ! !! !! !! ! !!                          ", 
+  "                            !!          !    ! !                           ", 
+  "                           ! !!!! !  !  ! !!                               ", 
+  "                                           !                               ", 
+  "                             !!!! ! !! !!!!!   !!                          ", 
+  "                            !!!!! ! !! !! !! !!!                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/charspacing-lines-300-300-2.0-grid-reference.json b/tests/visual_tests/grids/charspacing-lines-300-300-2.0-grid-reference.json
new file mode 100644
index 0000000..ec90226
--- /dev/null
+++ b/tests/visual_tests/grids/charspacing-lines-300-300-2.0-grid-reference.json
@@ -0,0 +1,84 @@
+{
+ "keys": [
+  "", 
+  "6"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "       !!   !                                                       !      ", 
+  "            !!   !!   !!      !!   !!   !!   !!      !!   !!!       !      ", 
+  "      !     ! !   !!  !       !         !!           ! !  ! !      !!      ", 
+  "       ! !  ! !  ! !  !        !   !!    !   !       ! !  ! !       !      ", 
+  "                                                          ! !              ", 
+  "         !!                                 !             !!      !!       ", 
+  "        !    !!  !!  !!     !! !!!  !!  !!  !  !!  !!!      !              ", 
+  "              !  !!  !     !!  ! !  !!  !   !      ! !     !       !       ", 
+  "        ! !   !  !!  !     ! ! ! !   !  !   !      ! !    !    !   !       ", 
+  "                               !                   ! !                     ", 
+  "           !  !                                          !!     !!         ", 
+  "          !   !!! !!  !!    !!  !!  !!  !!    !!   !!           !          ", 
+  "              ! !  !! !     !!      !!  !     ! ! ! !     !                ", 
+  "          ! ! ! ! ! ! !         !!  !!  !     ! ! ! !    !   !  !!         ", 
+  "                                                  ! !                      ", 
+  "            !!  !                          !            !     !!           ", 
+  "                !!  !!  !    !! !!  !!  !! ! !!!  !!          !            ", 
+  "           !    !   !!       !  ! ! !!     ! ! ! ! !                       ", 
+  "            ! ! !    !        ! ! ! !!  !  ! ! ! ! !           !           ", 
+  "                                !                  !                       ", 
+  "              !! !                         !           !     !             ", 
+  "             !   !!! !!  !!  !! !!! !!  !! ! !!  !!    !    ! !            ", 
+  "             !   ! ! !!!     !! ! ! !!!    ! !  ! !    !    ! !            ", 
+  "              ! !! ! ! !     ! !! ! ! ! !  ! !  ! !    !  ! ! !            ", 
+  "                                !                 !                        ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "              !   !! !!! !!   !! !! !!  !! ! !!  !!   ! !    !             ", 
+  "                  !   !! !   !!   ! !!!    !    ! !   ! !   !!             ", 
+  "              ! ! !  ! ! !   ! ! !! ! ! !  !    ! !   !      !             ", 
+  "                                                  !                        ", 
+  "               !! !                        !          !!    !              ", 
+  "              !   !!  !! !!   !! !! !!  !! ! !! !!!        ! !             ", 
+  "              !   ! ! !! !    !     !!!    !  ! ! !        !!!             ", 
+  "              !   ! !  ! !   ! ! !! ! ! !  !  ! ! !   !! ! ! !             ", 
+  "                                                ! !                        ", 
+  "               !! !                                   !    !!              ", 
+  "                  !!! !! !!   !! !! !!  !!  !!! !!!  ! !    !              ", 
+  "              !   ! ! !! !    !     !!!!    ! ! ! !  ! !    !              ", 
+  "               ! !! ! !! !     ! !! ! !     ! ! ! !    ! !                 ", 
+  "                                                                           ", 
+  "                !!                                    !    !!              ", 
+  "               !   !! !!  !   !! !! !!  !!  !!! !!   ! !                   ", 
+  "               !   !  !!!     !  !  !!!!    ! !      ! !  ! !              ", 
+  "               ! !    ! !      ! !  ! !     ! ! !!   ! ! ! !!              ", 
+  "                                                 !                         ", 
+  "                !! !                                 !!   !!               ", 
+  "               !   !!  !! !!  !! !! !!  !!  !!! !!   !    !                ", 
+  "               !   ! ! !! !   !  ! !!!!!    ! !! !   ! !    !              ", 
+  "               !!  ! !! ! !    ! !  ! !     ! !  !   !  !   !              ", 
+  "                                 !               !                         ", 
+  "                 ! !                                 !!    !               ", 
+  "                !  !!! !! !!  !! !! !!  !!  !!  !!    !   !!               ", 
+  "                   ! ! !! !   !! ! ! !!!    ! !! !        !!               ", 
+  "                ! !! !  ! !      ! !! !     ! !! !   !! !  !               ", 
+  "                                 !               !                         ", 
+  "                 !!                       !          !   !!                ", 
+  "                !   !! !! !!  !! !! !!  !!! !!  !!  ! !    !               ", 
+  "                !      !! !   !! ! ! !!!  ! ! !! !  ! !   !!               ", 
+  "                !      !  !      ! !! !!  ! ! !! !  ! ! !! !               ", 
+  "                                 !             ! !                         ", 
+  "                 !! !                     !          !   !!                ", 
+  "                !   !! !!  !  !! !! !!  !!! !! !!!  ! !    !               ", 
+  "                !   ! ! !!    !! ! ! !!!  ! !  ! !  ! !   !                ", 
+  "                 ! !! !! !    ! !! !! !!  ! !  ! !  ! !! !                 ", 
+  "                                 !             ! !                         ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/collision-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/collision-600-400-1.0-grid-reference.json
index 25daa99..e59d9c9 100644
--- a/tests/visual_tests/grids/collision-600-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/collision-600-400-1.0-grid-reference.json
@@ -14,25 +14,25 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                 !                                                                                                                                    ", 
-  "                  !!                                                                                                                                  ", 
+  "                 !!!                                                                                                                                  ", 
+  "                 !!!                                                                                                                                  ", 
   "                 !!!!                                                                                                                                 ", 
   "                 !!!!!                                                                                                                                ", 
-  "                  !!!!!                                                                                                                               ", 
+  "                  !!!!!!                                                                                                                              ", 
   "                   !!!!!                                                                                                                              ", 
   "                    !!!!                                                                                                                              ", 
-  "                     !!!                                                                                                                              ", 
+  "                     !!! !!                                                                                                                           ", 
   "                        !!!                                                                                                                           ", 
   "                        !!!!                                                                                                                          ", 
   "                        !!!!!                                                                                                                         ", 
-  "                        !!!!!!!                                                                                                                       ", 
   "                         !!!!!!                                                                                                                       ", 
-  "                           !!!!                                                                                                                       ", 
-  "                            !  !!!                                                                                                                    ", 
+  "                          !!!!!                                                                                                                       ", 
+  "                           !!!! !!                                                                                                                    ", 
+  "                            !! !!!                                                                                                                    ", 
   "                               !!!!                                                                                                                   ", 
   "                               !!!!!                                                                                                                  ", 
-  "                                !!!!!!                                                                                                                ", 
-  "                                  !!!!                                                                                                                ", 
+  "                                !!!!!!!                                                                                                               ", 
+  "                                   !!!!                                                                                                               ", 
   "                                   !!                                                                                                                 ", 
   "                                       !!                                                                                                             ", 
   "                                      !!!!                                                                                                            ", 
@@ -44,23 +44,23 @@
   "                                                                                                                                                      ", 
   "                                          !!!!                                                                                                        ", 
   "                                          !!!!                                                                                                        ", 
-  "                                          !!!!                                                                                                        ", 
-  "                                          !!!!                                                                                                        ", 
+  "                                           !!!                                                                                                        ", 
+  "                                           !!!                                                                                                        ", 
   "                                           !!!                                                                                                        ", 
   "                                           !!!                                                                                                        ", 
   "                                           !!!!                                                                                                       ", 
-  "                                           ! !                                                                                                        ", 
-  "                                                                                                                                                      ", 
+  "                                           !!!                                                                                                        ", 
   "                                                                                                                                                      ", 
-  "                                           !!!!                                                                                                       ", 
-  "                                           !!!!                                                                                                       ", 
-  "                                           !!!!                                                                                                       ", 
+  "                                             !!                                                                                                       ", 
+  "                                            !!!                                                                                                       ", 
+  "                                            !!!                                                                                                       ", 
+  "                                            !!!                                                                                                       ", 
   "                                            !!!                                                                                                       ", 
   "                                            !!!                                                                                                       ", 
   "                                            !!!!                                                                                                      ", 
   "                                            !!!!                                                                                                      ", 
   "                                             !                                                                                                        ", 
-  "                                               !!                                                                                                     ", 
+  "                                               !!!                                                                                                    ", 
   "                                              !!!!                                                                                                    ", 
   "                                              !!!!                                                                                                    ", 
   "                                               !!!!                                                                                                   ", 
@@ -69,41 +69,41 @@
   "                                                !!!!                                                                                                  ", 
   "                                                 !!!                                                                                                  ", 
   "                                                   !                                                                                                  ", 
-  "                                                   !!!                                                                                                ", 
   "                                                  !!!!                                                                                                ", 
   "                                                  !!!!                                                                                                ", 
-  "                                                   !!!                                                                                                ", 
+  "                                                  !!!!                                                                                                ", 
+  "                                                   !!!!                                                                                               ", 
   "                                                   !!!!                                                                                               ", 
   "                                                    !!!!                                                                                              ", 
   "                                                    !!!!                                                                                              ", 
   "                                                    !!!                                                                                               ", 
   "                                                                                                                                                      ", 
-  "                                                       !!                                                                                             ", 
+  "                                                      !!!                                                                                             ", 
   "                                                      !!!                                                                                             ", 
   "                                                      !!!!                                                                                            ", 
   "                                                      !!!!                                                                                            ", 
-  "                                                       !!!                                                                                            ", 
   "                                                       !!!!                                                                                           ", 
-  "                                                        !!!                                                                                           ", 
-  "                                                        ! !  !                                                                                        ", 
-  "                                                            !!                                                                                        ", 
+  "                                                       !!!!!                                                                                          ", 
+  "                                                        !!!!                                                                                          ", 
+  "                                                        !!! !!                                                                                        ", 
+  "                                                           !!!                                                                                        ", 
   "                                                           !!!!                                                                                       ", 
-  "                                                           !!!!!                                                                                      ", 
-  "                                                            !!!!!!                                                                                    ", 
-  "                                                              !!!!                                                                                    ", 
-  "                                                               !! ! !!                                                                                ", 
+  "                                                           !!!!!!                                                                                     ", 
+  "                                                             !!!!!!                                                                                   ", 
+  "                                                               !!!!                                                                                   ", 
+  "                                                               !! !!!!                                                                                ", 
   "                                                                   !!!!                                                                               ", 
-  "                                                                   !!!!!                                                                              ", 
-  "                                                                   !!!!!!!!                                                                           ", 
-  "                                                                     !!!!!!                                                                           ", 
-  "                                                                        !! !!!                                                                        ", 
+  "                                                                   !!!!!!!                                                                            ", 
+  "                                                                    !!!!!!!                                                                           ", 
+  "                                                                     !!!!!! !!                                                                        ", 
+  "                                                                        !! !!!!                                                                       ", 
   "                                                                           !!!!!!                                                                     ", 
   "                                                                           !!!!!!!!                                                                   ", 
   "                                                                             !!!!!!  !!                                                               ", 
-  "                                                                               !!!  !!!!                                                              ", 
-  "                                                                                    !!!!! !!                                                          ", 
+  "                                                                                !!  !!!!                                                              ", 
+  "                                                                                    !!!!!!!!                                                          ", 
   "                                                                                    !!!!!!!!                                                          ", 
-  "                                                                                      !!!!!!                                                          ", 
-  "                                                                                        !!!                                                           "
+  "                                                                                       !!!!!                                                          ", 
+  "                                                                                         !!                                                           "
  ]
 }
\ No newline at end of file
diff --git a/tests/visual_tests/grids/collision-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/collision-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..60bcfb2
--- /dev/null
+++ b/tests/visual_tests/grids/collision-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                 !                                                                                                                                    ", 
+  "                  ! !!!!                                                                                                                              ", 
+  "                   !!!!!                                                                                                                              ", 
+  "                  !!!!!!                                                                                                                              ", 
+  "                 !!!!!!!!                                                                                                                             ", 
+  "                 !!!!!!!!!                                                                                                                            ", 
+  "                  !!!!!!!!                                                                                                                            ", 
+  "                   !!!!!!!!!                                                                                                                          ", 
+  "                   !!!!!!!!!                                                                                                                          ", 
+  "                    !!!!!!!!!!!                                                                                                                       ", 
+  "                     !!!!!!!!!!                                                                                                                       ", 
+  "                       !!!!!!!!!                                                                                                                      ", 
+  "                       !!!!!!!!!                                                                                                                      ", 
+  "                         !!!! !                                                                                                                       ", 
+  "                         !!!!  !!                                                                                                                     ", 
+  "                          !!!   !! !!!!                                                                                                               ", 
+  "                                  !!!!!                                                                                                               ", 
+  "                                 !!!!!!                                                                                                               ", 
+  "                                 !!!!!!!!                                                                                                             ", 
+  "                                 !!!!!!!!                                                                                                             ", 
+  "                                 !!!!!!!!!!                                                                                                           ", 
+  "                                   !!!!!!!!                                                                                                           ", 
+  "                                   !!!!!!!!!!                                                                                                         ", 
+  "                                     !!!!!!!!!                                                                                                        ", 
+  "                                     !!!!!!!!!!                                                                                                       ", 
+  "                                       !!!!!!!!                                                                                                       ", 
+  "                                       !!!!!!!!                                                                                                       ", 
+  "                                        !!! !!!                                                                                                       ", 
+  "                                         !! !                                                                                                         ", 
+  "                                            !                                                                                                         ", 
+  "                                            !                                                                                                         ", 
+  "                                            !                                                                                                         ", 
+  "                                            !                                                                                                         ", 
+  "                                          !!!!!!!                                                                                                     ", 
+  "                                         !!!!!!!!                                                                                                     ", 
+  "                                         !!!!!!!!                                                                                                     ", 
+  "                                         !!!!!!!                                                                                                      ", 
+  "                                          !!!!!!                                                                                                      ", 
+  "                                          !!!!!!                                                                                                      ", 
+  "                                          !!!!!!                                                                                                      ", 
+  "                                          !!!!!!                                                                                                      ", 
+  "                                          !!!!!!                                                                                                      ", 
+  "                                          !!!!!!!                                                                                                     ", 
+  "                                           !!!!!!!                                                                                                    ", 
+  "                                           !!!!!!!!                                                                                                   ", 
+  "                                           !!!!!!!!                                                                                                   ", 
+  "                                            !!!!!!                                                                                                    ", 
+  "                                            !!!!!!                                                                                                    ", 
+  "                                            !!! !                                                                                                     ", 
+  "                                                 !                                                                                                    ", 
+  "                                                 !                                                                                                    ", 
+  "                                                  !                                                                                                   ", 
+  "                                                  !!!!!                                                                                               ", 
+  "                                                !!!!!!!                                                                                               ", 
+  "                                                !!!!!!!                                                                                               ", 
+  "                                                !!!!!!!                                                                                               ", 
+  "                                                !!!!!!!                                                                                               ", 
+  "                                                 !!!!!!                                                                                               ", 
+  "                                                 !!!!!!                                                                                               ", 
+  "                                                 !!!!!!!                                                                                              ", 
+  "                                                  !!!!!!                                                                                              ", 
+  "                                                  !!!!!!!                                                                                             ", 
+  "                                                   !!!!!!!                                                                                            ", 
+  "                                                   !!!!!!!!                                                                                           ", 
+  "                                                   !!!!!!!!                                                                                           ", 
+  "                                                    !!!!!!!                                                                                           ", 
+  "                                                    !!! !!                                                                                            ", 
+  "                                                    !!! !                                                                                             ", 
+  "                                                        !                                                                                             ", 
+  "                                                         !  !!!                                                                                       ", 
+  "                                                         ! !!!!                                                                                       ", 
+  "                                                          !!!!!                                                                                       ", 
+  "                                                         !!!!!!!!                                                                                     ", 
+  "                                                         !!!!!!!!!                                                                                    ", 
+  "                                                         !!!!!!!!!!!                                                                                  ", 
+  "                                                          !!!!!!!!!!                                                                                  ", 
+  "                                                           !!!!!!!!!!!!!                                                                              ", 
+  "                                                            !!!!!!!!!!!!                                                                              ", 
+  "                                                              !!!!!!!!!!                                                                              ", 
+  "                                                                !!!!!!!!                                                                              ", 
+  "                                                                !!!!!! !!    !!!                                                                      ", 
+  "                                                                   !!!   !! !!!!                                                                      ", 
+  "                                                                   !!!     !!!!!!!!                                                                   ", 
+  "                                                                           !!!!!!!!!                                                                  ", 
+  "                                                                           !!!!!!!!!!!                                                                ", 
+  "                                                                           !!!!!!!!!!!!!!!!                                                           ", 
+  "                                                                           !!!!!!!!!!!!!!!!                                                           ", 
+  "                                                                              !!!!!!!!!!!!!                                                           ", 
+  "                                                                               !!!!!!!!!!!!                                                           ", 
+  "                                                                                   !!!!!! !!!                                                         ", 
+  "                                                                                    !!!!!                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/colorize-alpha1-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha1-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..10e41a5
--- /dev/null
+++ b/tests/visual_tests/grids/colorize-alpha1-512-512-1.0-grid-reference.json
@@ -0,0 +1,283 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "78", 
+  "151", 
+  "53", 
+  "58", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "76", 
+  "157", 
+  "100", 
+  "46", 
+  "161", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "25", 
+  "106", 
+  "18", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "38", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "71", 
+  "45", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "126", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "36", 
+  "170", 
+  "160", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "124", 
+  "68", 
+  "143", 
+  "32", 
+  "27", 
+  "95", 
+  "148", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "176", 
+  "159", 
+  "142", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "102", 
+  "172", 
+  "113", 
+  "177", 
+  "54", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!                                                                         ", 
+  "                              ##########!!!!!!!!!!!!!!!!!!!!           $$       %%%              %%%                            ", 
+  "                        #  ###########!!!!!!!!!!!!!!!!!!!!           $$ $                           %%                          ", 
+  "                      ##### ########       !!!!!!!!!!!!!!!                          %%%        %%%%%%%%%%        %%%%%          ", 
+  "                    ####### ### ######       !!!!!!!!!!!!                          %     %  %%%%%%%%%%%%%%%%%%    %%%%          ", 
+  "      &&&&&&&&# ###### #########  #######    !!!!!!!!!!!               $$$$%%         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%", 
+  "%%%%  &&&&&&&&######################  #####  !!!!!!!!     '          $((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "  %&   &&&&&&&######################  ###     !!!!      '''        $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&&&&#################      ###       !!                 $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%  ", 
+  "       &&&     &&##############     ######                    *   $$((   +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %%      ", 
+  "      &&         &################# #######                   **   ,,(  -./%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       %%      ", 
+  "                 ############################                0 ** 1223333//%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%     %       ", 
+  "                   ######################## #                 * 667228839999999%%%444444444444%%%:%::%%%%%%555%%%% %            ", 
+  "                    &&&&&&&&&&&&&&#####&##  ##                 6666;<=>>???999%%%%44444444444445:::::::::::55555%% %            ", 
+  "                    &&&&&&&&&&&&&&&##&&&&#                      666<< @AA?? 9 %%% 44BB444444455555::::::5555555%%  C            ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     DEEEE <<<<FGHIIII IJ% KBKBBBBLLL55555555:5555555MM   C             ", 
+  "                    &&&&&&&&&&&&&&&&&&                       DEEE  <  < H IIIIIINN KKKKBBOO555555555555555 5 M    C             ", 
+  "                     &&&&&&&&&&&&&&&&&                        P QQQR        SITUUNNNNNKVVVWW555555555555555  XX CCC             ", 
+  "                      &&&&&&&&&&&&&&                         PPPQQQRR   Y    TUUUNNNNNVVVWWZZ555555555555555  CC                ", 
+  "                       [[[[&&&&&&&&&                         PPQQQQQYYYYY]]]]^^^U_NNNNVVWWWZZ`55555555555555                    ", 
+  "                       [[[[[[&     &                       PPaQQQQQQYYYYY]]]]^^^^^ NNNNWWWZZZZ``bZcc5555555                     ", 
+  "                        [ [[[[      d                      PaaeQQQQQYYYYY]]]]^^^^^^fg   WWZZZZZZhZc55555555i                    ", 
+  "       &                   [[[   [jjj                     kkaaeeeQQlllmmYnnnnn^^^^^^gg   ZZZZZZZhcccopp55                       ", 
+  "                           [[[[[[     qr                  aaaaeeeellllmmmnnnnn ^^^sgg     ZZZZZ   ctop 5                        ", 
+  "                             [[[uvv                       wwaaaeeelllmmmmnnnnnxssss       ZZZZ    ctttp    y                    ", 
+  "                                z{{                       wweee|ll}}}mmmnnnnn~~xs          ZZ      tt\u007fp    yy                   ", 
+  "                                  {  \u0080\u0081\u0081\u0081\u0081\u0082                \u0083\u0083ee\u0084\u0085\u0086}}}\u0087mmn\u0088n\u0088\u0088~~\u0089\u0089\u0089\u008a        ZZ      t pp   y y                   ", 
+  "                                   \u008b\u008b\u0080\u0081\u0081\u0081\u0081\u0081\u008c                \u008d\u0083\u008e\u0084\u0085}}}}\u0087m\u008f\u008f\u0088\u0088\u0088\u0088~~~~\u008a           \u0090     t        y                   ", 
+  "                                     \u0080\u0080\u0080\u0081\u0081\u0081\u008c\u00916               \u0092\u008e\u0084  }}\u0087\u0087\u008f\u0093\u0093\u0093\u0088\u0088\u0088~~~\u008a\u008a                \u0094 \u0095    \u0095\u0095                     ", 
+  "                                    \u0080\u0080\u0080\u0080\u0081\u0081\u0096\u008c\u00916\u0096                     \u0097\u0098\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a\u008a                  \u0094\u0095\u0095 \u0095\u0095\u0094                      ", 
+  "                                   \u009b\u009b\u009c\u0080\u0080\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                   \u009d\u009d\u009d\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a                    \u0094\u0094 \u0094\u0094\u0094 \u0094   \u0094                ", 
+  "                                   \u009c\u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u009d\u0098\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e\u009a                     \u0094\u0094  \u0094\u0094 \u0094 \u0094\u0094\u0094\u0094\u0094\u009f\u009f  \u009f         ", 
+  "                                   \u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e                        \u0094          \u0094\u009f\u009f\u009f\u009f \u009f        ", 
+  "                                    \u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u00a0\u00a0\u0093\u0093\u00a1\u00a1\u009e\u009e\u009e                           \u0094\u0094\u0094\u00a2    \u009f \u009f\u009f   \u00a3      ", 
+  "                                     \u009c\u009c\u009c\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a5\u009e\u00a6                                \u00a7\u00a7               ", 
+  "                                     \u009c\u009c\u009c\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a1\u00a5\u00a6\u00a6  \u00a8                           \u00a7\u00a7\u00a7\u00a7  \u00a7       \u00a9    ", 
+  "                                       \u009c\u00a4\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00aa\u00aa\u00aa\u00aa\u00a1\u00ab\u00ab\u00ab\u00a6\u00a6  \u00a8\u00a8                          \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           \u00ac", 
+  "                                       \u00ad\u00a4\u00a4\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00ab\u00ab\u00a6   \u00a8\u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           ", 
+  "                                       \u00ad\u00ad\u00b0\u00ae\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00b1\u00b1\u00a6   \u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00ae\u0096\u0096                       \u00aa\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u0096\u0096\u0096                       \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00b0\u00b0\u00b0\u00b0\u00b0\u00b2\u0096                         \u00b1\u00b1\u00b1\u00b1                              \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00b2                          \u00b1                                 \u00a7\u00a7     \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0\u00b0\u00b0                                                                      \u00a7\u00a7\u00a7\u00a7        \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                                    \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                          \u00a7        \u00b3  ", 
+  "                                      \u00ad\u00b0\u00b0                                                                                  \u00b3\u00b3   ", 
+  "                                     \u00ad\u00ad\u00b0\u00b0                                                                                       ", 
+  "                                     \u00ad\u00ad\u00b0   \u00b4                                                                                    ", 
+  "                                      \u00ad\u00ad\u00b0                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         \u00b5                                                                      \u00b5               ", 
+  "                                        \u00b5                                   \u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5          ", 
+  "                                      \u00b5\u00b5\u00b5\u00b5\u00b5                 \u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   ", 
+  "                   \u00b5 \u00b5\u00b5\u00b5    \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5               \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 [...]
+  "           \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5              \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "      \u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5         \u00b5\u00b5\u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "          \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00 [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/colorize-alpha1-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha1-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..10e41a5
--- /dev/null
+++ b/tests/visual_tests/grids/colorize-alpha1-512-512-2.0-grid-reference.json
@@ -0,0 +1,283 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "78", 
+  "151", 
+  "53", 
+  "58", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "76", 
+  "157", 
+  "100", 
+  "46", 
+  "161", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "25", 
+  "106", 
+  "18", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "38", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "71", 
+  "45", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "126", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "36", 
+  "170", 
+  "160", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "124", 
+  "68", 
+  "143", 
+  "32", 
+  "27", 
+  "95", 
+  "148", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "176", 
+  "159", 
+  "142", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "102", 
+  "172", 
+  "113", 
+  "177", 
+  "54", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!                                                                         ", 
+  "                              ##########!!!!!!!!!!!!!!!!!!!!           $$       %%%              %%%                            ", 
+  "                        #  ###########!!!!!!!!!!!!!!!!!!!!           $$ $                           %%                          ", 
+  "                      ##### ########       !!!!!!!!!!!!!!!                          %%%        %%%%%%%%%%        %%%%%          ", 
+  "                    ####### ### ######       !!!!!!!!!!!!                          %     %  %%%%%%%%%%%%%%%%%%    %%%%          ", 
+  "      &&&&&&&&# ###### #########  #######    !!!!!!!!!!!               $$$$%%         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%", 
+  "%%%%  &&&&&&&&######################  #####  !!!!!!!!     '          $((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "  %&   &&&&&&&######################  ###     !!!!      '''        $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&&&&#################      ###       !!                 $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%  ", 
+  "       &&&     &&##############     ######                    *   $$((   +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %%      ", 
+  "      &&         &################# #######                   **   ,,(  -./%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       %%      ", 
+  "                 ############################                0 ** 1223333//%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%     %       ", 
+  "                   ######################## #                 * 667228839999999%%%444444444444%%%:%::%%%%%%555%%%% %            ", 
+  "                    &&&&&&&&&&&&&&#####&##  ##                 6666;<=>>???999%%%%44444444444445:::::::::::55555%% %            ", 
+  "                    &&&&&&&&&&&&&&&##&&&&#                      666<< @AA?? 9 %%% 44BB444444455555::::::5555555%%  C            ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     DEEEE <<<<FGHIIII IJ% KBKBBBBLLL55555555:5555555MM   C             ", 
+  "                    &&&&&&&&&&&&&&&&&&                       DEEE  <  < H IIIIIINN KKKKBBOO555555555555555 5 M    C             ", 
+  "                     &&&&&&&&&&&&&&&&&                        P QQQR        SITUUNNNNNKVVVWW555555555555555  XX CCC             ", 
+  "                      &&&&&&&&&&&&&&                         PPPQQQRR   Y    TUUUNNNNNVVVWWZZ555555555555555  CC                ", 
+  "                       [[[[&&&&&&&&&                         PPQQQQQYYYYY]]]]^^^U_NNNNVVWWWZZ`55555555555555                    ", 
+  "                       [[[[[[&     &                       PPaQQQQQQYYYYY]]]]^^^^^ NNNNWWWZZZZ``bZcc5555555                     ", 
+  "                        [ [[[[      d                      PaaeQQQQQYYYYY]]]]^^^^^^fg   WWZZZZZZhZc55555555i                    ", 
+  "       &                   [[[   [jjj                     kkaaeeeQQlllmmYnnnnn^^^^^^gg   ZZZZZZZhcccopp55                       ", 
+  "                           [[[[[[     qr                  aaaaeeeellllmmmnnnnn ^^^sgg     ZZZZZ   ctop 5                        ", 
+  "                             [[[uvv                       wwaaaeeelllmmmmnnnnnxssss       ZZZZ    ctttp    y                    ", 
+  "                                z{{                       wweee|ll}}}mmmnnnnn~~xs          ZZ      tt\u007fp    yy                   ", 
+  "                                  {  \u0080\u0081\u0081\u0081\u0081\u0082                \u0083\u0083ee\u0084\u0085\u0086}}}\u0087mmn\u0088n\u0088\u0088~~\u0089\u0089\u0089\u008a        ZZ      t pp   y y                   ", 
+  "                                   \u008b\u008b\u0080\u0081\u0081\u0081\u0081\u0081\u008c                \u008d\u0083\u008e\u0084\u0085}}}}\u0087m\u008f\u008f\u0088\u0088\u0088\u0088~~~~\u008a           \u0090     t        y                   ", 
+  "                                     \u0080\u0080\u0080\u0081\u0081\u0081\u008c\u00916               \u0092\u008e\u0084  }}\u0087\u0087\u008f\u0093\u0093\u0093\u0088\u0088\u0088~~~\u008a\u008a                \u0094 \u0095    \u0095\u0095                     ", 
+  "                                    \u0080\u0080\u0080\u0080\u0081\u0081\u0096\u008c\u00916\u0096                     \u0097\u0098\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a\u008a                  \u0094\u0095\u0095 \u0095\u0095\u0094                      ", 
+  "                                   \u009b\u009b\u009c\u0080\u0080\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                   \u009d\u009d\u009d\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a                    \u0094\u0094 \u0094\u0094\u0094 \u0094   \u0094                ", 
+  "                                   \u009c\u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u009d\u0098\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e\u009a                     \u0094\u0094  \u0094\u0094 \u0094 \u0094\u0094\u0094\u0094\u0094\u009f\u009f  \u009f         ", 
+  "                                   \u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e                        \u0094          \u0094\u009f\u009f\u009f\u009f \u009f        ", 
+  "                                    \u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u00a0\u00a0\u0093\u0093\u00a1\u00a1\u009e\u009e\u009e                           \u0094\u0094\u0094\u00a2    \u009f \u009f\u009f   \u00a3      ", 
+  "                                     \u009c\u009c\u009c\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a5\u009e\u00a6                                \u00a7\u00a7               ", 
+  "                                     \u009c\u009c\u009c\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a1\u00a5\u00a6\u00a6  \u00a8                           \u00a7\u00a7\u00a7\u00a7  \u00a7       \u00a9    ", 
+  "                                       \u009c\u00a4\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00aa\u00aa\u00aa\u00aa\u00a1\u00ab\u00ab\u00ab\u00a6\u00a6  \u00a8\u00a8                          \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           \u00ac", 
+  "                                       \u00ad\u00a4\u00a4\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00ab\u00ab\u00a6   \u00a8\u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           ", 
+  "                                       \u00ad\u00ad\u00b0\u00ae\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00b1\u00b1\u00a6   \u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00ae\u0096\u0096                       \u00aa\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u0096\u0096\u0096                       \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00b0\u00b0\u00b0\u00b0\u00b0\u00b2\u0096                         \u00b1\u00b1\u00b1\u00b1                              \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00b2                          \u00b1                                 \u00a7\u00a7     \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0\u00b0\u00b0                                                                      \u00a7\u00a7\u00a7\u00a7        \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                                    \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                          \u00a7        \u00b3  ", 
+  "                                      \u00ad\u00b0\u00b0                                                                                  \u00b3\u00b3   ", 
+  "                                     \u00ad\u00ad\u00b0\u00b0                                                                                       ", 
+  "                                     \u00ad\u00ad\u00b0   \u00b4                                                                                    ", 
+  "                                      \u00ad\u00ad\u00b0                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         \u00b5                                                                      \u00b5               ", 
+  "                                        \u00b5                                   \u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5          ", 
+  "                                      \u00b5\u00b5\u00b5\u00b5\u00b5                 \u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   ", 
+  "                   \u00b5 \u00b5\u00b5\u00b5    \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5               \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 [...]
+  "           \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5              \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "      \u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5         \u00b5\u00b5\u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "          \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00 [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/colorize-alpha2-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha2-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..10e41a5
--- /dev/null
+++ b/tests/visual_tests/grids/colorize-alpha2-512-512-1.0-grid-reference.json
@@ -0,0 +1,283 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "78", 
+  "151", 
+  "53", 
+  "58", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "76", 
+  "157", 
+  "100", 
+  "46", 
+  "161", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "25", 
+  "106", 
+  "18", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "38", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "71", 
+  "45", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "126", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "36", 
+  "170", 
+  "160", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "124", 
+  "68", 
+  "143", 
+  "32", 
+  "27", 
+  "95", 
+  "148", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "176", 
+  "159", 
+  "142", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "102", 
+  "172", 
+  "113", 
+  "177", 
+  "54", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!                                                                         ", 
+  "                              ##########!!!!!!!!!!!!!!!!!!!!           $$       %%%              %%%                            ", 
+  "                        #  ###########!!!!!!!!!!!!!!!!!!!!           $$ $                           %%                          ", 
+  "                      ##### ########       !!!!!!!!!!!!!!!                          %%%        %%%%%%%%%%        %%%%%          ", 
+  "                    ####### ### ######       !!!!!!!!!!!!                          %     %  %%%%%%%%%%%%%%%%%%    %%%%          ", 
+  "      &&&&&&&&# ###### #########  #######    !!!!!!!!!!!               $$$$%%         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%", 
+  "%%%%  &&&&&&&&######################  #####  !!!!!!!!     '          $((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "  %&   &&&&&&&######################  ###     !!!!      '''        $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&&&&#################      ###       !!                 $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%  ", 
+  "       &&&     &&##############     ######                    *   $$((   +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %%      ", 
+  "      &&         &################# #######                   **   ,,(  -./%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       %%      ", 
+  "                 ############################                0 ** 1223333//%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%     %       ", 
+  "                   ######################## #                 * 667228839999999%%%444444444444%%%:%::%%%%%%555%%%% %            ", 
+  "                    &&&&&&&&&&&&&&#####&##  ##                 6666;<=>>???999%%%%44444444444445:::::::::::55555%% %            ", 
+  "                    &&&&&&&&&&&&&&&##&&&&#                      666<< @AA?? 9 %%% 44BB444444455555::::::5555555%%  C            ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     DEEEE <<<<FGHIIII IJ% KBKBBBBLLL55555555:5555555MM   C             ", 
+  "                    &&&&&&&&&&&&&&&&&&                       DEEE  <  < H IIIIIINN KKKKBBOO555555555555555 5 M    C             ", 
+  "                     &&&&&&&&&&&&&&&&&                        P QQQR        SITUUNNNNNKVVVWW555555555555555  XX CCC             ", 
+  "                      &&&&&&&&&&&&&&                         PPPQQQRR   Y    TUUUNNNNNVVVWWZZ555555555555555  CC                ", 
+  "                       [[[[&&&&&&&&&                         PPQQQQQYYYYY]]]]^^^U_NNNNVVWWWZZ`55555555555555                    ", 
+  "                       [[[[[[&     &                       PPaQQQQQQYYYYY]]]]^^^^^ NNNNWWWZZZZ``bZcc5555555                     ", 
+  "                        [ [[[[      d                      PaaeQQQQQYYYYY]]]]^^^^^^fg   WWZZZZZZhZc55555555i                    ", 
+  "       &                   [[[   [jjj                     kkaaeeeQQlllmmYnnnnn^^^^^^gg   ZZZZZZZhcccopp55                       ", 
+  "                           [[[[[[     qr                  aaaaeeeellllmmmnnnnn ^^^sgg     ZZZZZ   ctop 5                        ", 
+  "                             [[[uvv                       wwaaaeeelllmmmmnnnnnxssss       ZZZZ    ctttp    y                    ", 
+  "                                z{{                       wweee|ll}}}mmmnnnnn~~xs          ZZ      tt\u007fp    yy                   ", 
+  "                                  {  \u0080\u0081\u0081\u0081\u0081\u0082                \u0083\u0083ee\u0084\u0085\u0086}}}\u0087mmn\u0088n\u0088\u0088~~\u0089\u0089\u0089\u008a        ZZ      t pp   y y                   ", 
+  "                                   \u008b\u008b\u0080\u0081\u0081\u0081\u0081\u0081\u008c                \u008d\u0083\u008e\u0084\u0085}}}}\u0087m\u008f\u008f\u0088\u0088\u0088\u0088~~~~\u008a           \u0090     t        y                   ", 
+  "                                     \u0080\u0080\u0080\u0081\u0081\u0081\u008c\u00916               \u0092\u008e\u0084  }}\u0087\u0087\u008f\u0093\u0093\u0093\u0088\u0088\u0088~~~\u008a\u008a                \u0094 \u0095    \u0095\u0095                     ", 
+  "                                    \u0080\u0080\u0080\u0080\u0081\u0081\u0096\u008c\u00916\u0096                     \u0097\u0098\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a\u008a                  \u0094\u0095\u0095 \u0095\u0095\u0094                      ", 
+  "                                   \u009b\u009b\u009c\u0080\u0080\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                   \u009d\u009d\u009d\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a                    \u0094\u0094 \u0094\u0094\u0094 \u0094   \u0094                ", 
+  "                                   \u009c\u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u009d\u0098\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e\u009a                     \u0094\u0094  \u0094\u0094 \u0094 \u0094\u0094\u0094\u0094\u0094\u009f\u009f  \u009f         ", 
+  "                                   \u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e                        \u0094          \u0094\u009f\u009f\u009f\u009f \u009f        ", 
+  "                                    \u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u00a0\u00a0\u0093\u0093\u00a1\u00a1\u009e\u009e\u009e                           \u0094\u0094\u0094\u00a2    \u009f \u009f\u009f   \u00a3      ", 
+  "                                     \u009c\u009c\u009c\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a5\u009e\u00a6                                \u00a7\u00a7               ", 
+  "                                     \u009c\u009c\u009c\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a1\u00a5\u00a6\u00a6  \u00a8                           \u00a7\u00a7\u00a7\u00a7  \u00a7       \u00a9    ", 
+  "                                       \u009c\u00a4\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00aa\u00aa\u00aa\u00aa\u00a1\u00ab\u00ab\u00ab\u00a6\u00a6  \u00a8\u00a8                          \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           \u00ac", 
+  "                                       \u00ad\u00a4\u00a4\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00ab\u00ab\u00a6   \u00a8\u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           ", 
+  "                                       \u00ad\u00ad\u00b0\u00ae\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00b1\u00b1\u00a6   \u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00ae\u0096\u0096                       \u00aa\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u0096\u0096\u0096                       \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00b0\u00b0\u00b0\u00b0\u00b0\u00b2\u0096                         \u00b1\u00b1\u00b1\u00b1                              \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00b2                          \u00b1                                 \u00a7\u00a7     \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0\u00b0\u00b0                                                                      \u00a7\u00a7\u00a7\u00a7        \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                                    \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                          \u00a7        \u00b3  ", 
+  "                                      \u00ad\u00b0\u00b0                                                                                  \u00b3\u00b3   ", 
+  "                                     \u00ad\u00ad\u00b0\u00b0                                                                                       ", 
+  "                                     \u00ad\u00ad\u00b0   \u00b4                                                                                    ", 
+  "                                      \u00ad\u00ad\u00b0                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         \u00b5                                                                      \u00b5               ", 
+  "                                        \u00b5                                   \u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5          ", 
+  "                                      \u00b5\u00b5\u00b5\u00b5\u00b5                 \u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   ", 
+  "                   \u00b5 \u00b5\u00b5\u00b5    \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5               \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 [...]
+  "           \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5              \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "      \u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5         \u00b5\u00b5\u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "          \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00 [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/colorize-alpha2-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha2-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..10e41a5
--- /dev/null
+++ b/tests/visual_tests/grids/colorize-alpha2-512-512-2.0-grid-reference.json
@@ -0,0 +1,283 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "78", 
+  "151", 
+  "53", 
+  "58", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "76", 
+  "157", 
+  "100", 
+  "46", 
+  "161", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "25", 
+  "106", 
+  "18", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "38", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "71", 
+  "45", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "126", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "36", 
+  "170", 
+  "160", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "124", 
+  "68", 
+  "143", 
+  "32", 
+  "27", 
+  "95", 
+  "148", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "176", 
+  "159", 
+  "142", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "102", 
+  "172", 
+  "113", 
+  "177", 
+  "54", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!                                                                         ", 
+  "                              ##########!!!!!!!!!!!!!!!!!!!!           $$       %%%              %%%                            ", 
+  "                        #  ###########!!!!!!!!!!!!!!!!!!!!           $$ $                           %%                          ", 
+  "                      ##### ########       !!!!!!!!!!!!!!!                          %%%        %%%%%%%%%%        %%%%%          ", 
+  "                    ####### ### ######       !!!!!!!!!!!!                          %     %  %%%%%%%%%%%%%%%%%%    %%%%          ", 
+  "      &&&&&&&&# ###### #########  #######    !!!!!!!!!!!               $$$$%%         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%", 
+  "%%%%  &&&&&&&&######################  #####  !!!!!!!!     '          $((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "  %&   &&&&&&&######################  ###     !!!!      '''        $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&&&&#################      ###       !!                 $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%  ", 
+  "       &&&     &&##############     ######                    *   $$((   +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %%      ", 
+  "      &&         &################# #######                   **   ,,(  -./%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       %%      ", 
+  "                 ############################                0 ** 1223333//%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%     %       ", 
+  "                   ######################## #                 * 667228839999999%%%444444444444%%%:%::%%%%%%555%%%% %            ", 
+  "                    &&&&&&&&&&&&&&#####&##  ##                 6666;<=>>???999%%%%44444444444445:::::::::::55555%% %            ", 
+  "                    &&&&&&&&&&&&&&&##&&&&#                      666<< @AA?? 9 %%% 44BB444444455555::::::5555555%%  C            ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     DEEEE <<<<FGHIIII IJ% KBKBBBBLLL55555555:5555555MM   C             ", 
+  "                    &&&&&&&&&&&&&&&&&&                       DEEE  <  < H IIIIIINN KKKKBBOO555555555555555 5 M    C             ", 
+  "                     &&&&&&&&&&&&&&&&&                        P QQQR        SITUUNNNNNKVVVWW555555555555555  XX CCC             ", 
+  "                      &&&&&&&&&&&&&&                         PPPQQQRR   Y    TUUUNNNNNVVVWWZZ555555555555555  CC                ", 
+  "                       [[[[&&&&&&&&&                         PPQQQQQYYYYY]]]]^^^U_NNNNVVWWWZZ`55555555555555                    ", 
+  "                       [[[[[[&     &                       PPaQQQQQQYYYYY]]]]^^^^^ NNNNWWWZZZZ``bZcc5555555                     ", 
+  "                        [ [[[[      d                      PaaeQQQQQYYYYY]]]]^^^^^^fg   WWZZZZZZhZc55555555i                    ", 
+  "       &                   [[[   [jjj                     kkaaeeeQQlllmmYnnnnn^^^^^^gg   ZZZZZZZhcccopp55                       ", 
+  "                           [[[[[[     qr                  aaaaeeeellllmmmnnnnn ^^^sgg     ZZZZZ   ctop 5                        ", 
+  "                             [[[uvv                       wwaaaeeelllmmmmnnnnnxssss       ZZZZ    ctttp    y                    ", 
+  "                                z{{                       wweee|ll}}}mmmnnnnn~~xs          ZZ      tt\u007fp    yy                   ", 
+  "                                  {  \u0080\u0081\u0081\u0081\u0081\u0082                \u0083\u0083ee\u0084\u0085\u0086}}}\u0087mmn\u0088n\u0088\u0088~~\u0089\u0089\u0089\u008a        ZZ      t pp   y y                   ", 
+  "                                   \u008b\u008b\u0080\u0081\u0081\u0081\u0081\u0081\u008c                \u008d\u0083\u008e\u0084\u0085}}}}\u0087m\u008f\u008f\u0088\u0088\u0088\u0088~~~~\u008a           \u0090     t        y                   ", 
+  "                                     \u0080\u0080\u0080\u0081\u0081\u0081\u008c\u00916               \u0092\u008e\u0084  }}\u0087\u0087\u008f\u0093\u0093\u0093\u0088\u0088\u0088~~~\u008a\u008a                \u0094 \u0095    \u0095\u0095                     ", 
+  "                                    \u0080\u0080\u0080\u0080\u0081\u0081\u0096\u008c\u00916\u0096                     \u0097\u0098\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a\u008a                  \u0094\u0095\u0095 \u0095\u0095\u0094                      ", 
+  "                                   \u009b\u009b\u009c\u0080\u0080\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                   \u009d\u009d\u009d\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a                    \u0094\u0094 \u0094\u0094\u0094 \u0094   \u0094                ", 
+  "                                   \u009c\u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u009d\u0098\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e\u009a                     \u0094\u0094  \u0094\u0094 \u0094 \u0094\u0094\u0094\u0094\u0094\u009f\u009f  \u009f         ", 
+  "                                   \u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e                        \u0094          \u0094\u009f\u009f\u009f\u009f \u009f        ", 
+  "                                    \u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u00a0\u00a0\u0093\u0093\u00a1\u00a1\u009e\u009e\u009e                           \u0094\u0094\u0094\u00a2    \u009f \u009f\u009f   \u00a3      ", 
+  "                                     \u009c\u009c\u009c\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a5\u009e\u00a6                                \u00a7\u00a7               ", 
+  "                                     \u009c\u009c\u009c\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a1\u00a5\u00a6\u00a6  \u00a8                           \u00a7\u00a7\u00a7\u00a7  \u00a7       \u00a9    ", 
+  "                                       \u009c\u00a4\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00aa\u00aa\u00aa\u00aa\u00a1\u00ab\u00ab\u00ab\u00a6\u00a6  \u00a8\u00a8                          \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           \u00ac", 
+  "                                       \u00ad\u00a4\u00a4\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00ab\u00ab\u00a6   \u00a8\u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           ", 
+  "                                       \u00ad\u00ad\u00b0\u00ae\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00b1\u00b1\u00a6   \u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00ae\u0096\u0096                       \u00aa\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u0096\u0096\u0096                       \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00b0\u00b0\u00b0\u00b0\u00b0\u00b2\u0096                         \u00b1\u00b1\u00b1\u00b1                              \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00b2                          \u00b1                                 \u00a7\u00a7     \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0\u00b0\u00b0                                                                      \u00a7\u00a7\u00a7\u00a7        \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                                    \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                          \u00a7        \u00b3  ", 
+  "                                      \u00ad\u00b0\u00b0                                                                                  \u00b3\u00b3   ", 
+  "                                     \u00ad\u00ad\u00b0\u00b0                                                                                       ", 
+  "                                     \u00ad\u00ad\u00b0   \u00b4                                                                                    ", 
+  "                                      \u00ad\u00ad\u00b0                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         \u00b5                                                                      \u00b5               ", 
+  "                                        \u00b5                                   \u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5          ", 
+  "                                      \u00b5\u00b5\u00b5\u00b5\u00b5                 \u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   ", 
+  "                   \u00b5 \u00b5\u00b5\u00b5    \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5               \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 [...]
+  "           \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5              \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "      \u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5         \u00b5\u00b5\u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "          \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00 [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/colorize-alpha3-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha3-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..c6848a7
--- /dev/null
+++ b/tests/visual_tests/grids/colorize-alpha3-500-100-1.0-grid-reference.json
@@ -0,0 +1,134 @@
+{
+ "keys": [
+  "", 
+  "28", 
+  "66", 
+  "135", 
+  "168", 
+  "151", 
+  "119", 
+  "53", 
+  "75", 
+  "58", 
+  "44", 
+  "128", 
+  "99", 
+  "56", 
+  "42", 
+  "149", 
+  "166", 
+  "84", 
+  "108", 
+  "31", 
+  "131", 
+  "50", 
+  "80", 
+  "162", 
+  "158", 
+  "169", 
+  "130", 
+  "100", 
+  "46", 
+  "161", 
+  "65", 
+  "40", 
+  "153", 
+  "77", 
+  "76", 
+  "1", 
+  "123", 
+  "88", 
+  "83", 
+  "103", 
+  "18", 
+  "137", 
+  "94", 
+  "48", 
+  "138", 
+  "74", 
+  "120", 
+  "106", 
+  "38", 
+  "71", 
+  "110", 
+  "105", 
+  "115", 
+  "154", 
+  "139", 
+  "156", 
+  "117", 
+  "141", 
+  "116", 
+  "52", 
+  "174", 
+  "171", 
+  "126", 
+  "170", 
+  "68", 
+  "93", 
+  "60", 
+  "27", 
+  "140", 
+  "146", 
+  "95", 
+  "112", 
+  "47", 
+  "36", 
+  "23", 
+  "57", 
+  "35", 
+  "34", 
+  "165", 
+  "85", 
+  "73", 
+  "125", 
+  "164", 
+  "127", 
+  "142", 
+  "22", 
+  "2", 
+  "176", 
+  "109", 
+  "102", 
+  "9", 
+  "132", 
+  "113", 
+  "26", 
+  "177", 
+  "114", 
+  "30", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  !!!!#######                                                                ", 
+  "                                             !!!!!!! #######           $$  $$$$   $$$                                        ", 
+  "                                     $ %%%%!!!!!!!! !  #####     &'$$$$$$$$$$$$$$$$$$$$$$                                    ", 
+  "                                       %%%%!!!!!!! !!! ##      '&&($$$$$$$$$$$$$$$$$$$$$$                                    ", 
+  "                                       %    !!!!!!!!!!!      )* +,-$$$$$$$$$$$$$$$$$ $                                       ", 
+  "                                             %%%%%%!!!!       ../0111$222223333344$$                                         ", 
+  "                                             %%%%%%%%        56 77888$9:::4444444;                                           ", 
+  "                                             %%%%%%%          <=> ?@ABCCDE444444 FG                                          ", 
+  "                                              HH%  I         J==KKKLMMCCENNOP444                                             ", 
+  "                                        %       H  QR       JSTUUVWWMMM  NNNPX4                                              ", 
+  "                                                  Y         ZTT[[VWW]^   NN  X_ `                                            ", 
+  "                                                    aab      cd[[eff]g    h  X i`                                            ", 
+  "                                                   jklll        mnopq        rrrrr                                           ", 
+  "                                                   sllllll       oott         rrr  u v                                       ", 
+  "                                                    swlll       xxyyz{           |||                                         ", 
+  "                                                     w}ll        ~\u007f\u0080 {         |||||| \u0081                                      ", 
+  "                                                    \u0082\u0083\u0083l         \u0084\u0084\u0084           ||||||                                        ", 
+  "                                                    \u0082\u0083\u0085          \u0084             |  |||                                        ", 
+  "                                                    \u0082\u0083                                 \u0086                                     ", 
+  "                                                    \u0082                                                                        ", 
+  "                                                                                                                             ", 
+  "                                                      \u0087                                                                      ", 
+  "                                                    \u0087\u0087         \u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087                                      ", 
+  "                                        \u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087     \u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087                                      ", 
+  "                                     \u0087\u0087  \u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/colorize-alpha3-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha3-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..10e41a5
--- /dev/null
+++ b/tests/visual_tests/grids/colorize-alpha3-512-512-1.0-grid-reference.json
@@ -0,0 +1,283 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "78", 
+  "151", 
+  "53", 
+  "58", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "76", 
+  "157", 
+  "100", 
+  "46", 
+  "161", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "25", 
+  "106", 
+  "18", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "38", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "71", 
+  "45", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "126", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "36", 
+  "170", 
+  "160", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "124", 
+  "68", 
+  "143", 
+  "32", 
+  "27", 
+  "95", 
+  "148", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "176", 
+  "159", 
+  "142", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "102", 
+  "172", 
+  "113", 
+  "177", 
+  "54", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!                                                                         ", 
+  "                              ##########!!!!!!!!!!!!!!!!!!!!           $$       %%%              %%%                            ", 
+  "                        #  ###########!!!!!!!!!!!!!!!!!!!!           $$ $                           %%                          ", 
+  "                      ##### ########       !!!!!!!!!!!!!!!                          %%%        %%%%%%%%%%        %%%%%          ", 
+  "                    ####### ### ######       !!!!!!!!!!!!                          %     %  %%%%%%%%%%%%%%%%%%    %%%%          ", 
+  "      &&&&&&&&# ###### #########  #######    !!!!!!!!!!!               $$$$%%         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%", 
+  "%%%%  &&&&&&&&######################  #####  !!!!!!!!     '          $((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "  %&   &&&&&&&######################  ###     !!!!      '''        $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&&&&#################      ###       !!                 $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%  ", 
+  "       &&&     &&##############     ######                    *   $$((   +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %%      ", 
+  "      &&         &################# #######                   **   ,,(  -./%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       %%      ", 
+  "                 ############################                0 ** 1223333//%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%     %       ", 
+  "                   ######################## #                 * 667228839999999%%%444444444444%%%:%::%%%%%%555%%%% %            ", 
+  "                    &&&&&&&&&&&&&&#####&##  ##                 6666;<=>>???999%%%%44444444444445:::::::::::55555%% %            ", 
+  "                    &&&&&&&&&&&&&&&##&&&&#                      666<< @AA?? 9 %%% 44BB444444455555::::::5555555%%  C            ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     DEEEE <<<<FGHIIII IJ% KBKBBBBLLL55555555:5555555MM   C             ", 
+  "                    &&&&&&&&&&&&&&&&&&                       DEEE  <  < H IIIIIINN KKKKBBOO555555555555555 5 M    C             ", 
+  "                     &&&&&&&&&&&&&&&&&                        P QQQR        SITUUNNNNNKVVVWW555555555555555  XX CCC             ", 
+  "                      &&&&&&&&&&&&&&                         PPPQQQRR   Y    TUUUNNNNNVVVWWZZ555555555555555  CC                ", 
+  "                       [[[[&&&&&&&&&                         PPQQQQQYYYYY]]]]^^^U_NNNNVVWWWZZ`55555555555555                    ", 
+  "                       [[[[[[&     &                       PPaQQQQQQYYYYY]]]]^^^^^ NNNNWWWZZZZ``bZcc5555555                     ", 
+  "                        [ [[[[      d                      PaaeQQQQQYYYYY]]]]^^^^^^fg   WWZZZZZZhZc55555555i                    ", 
+  "       &                   [[[   [jjj                     kkaaeeeQQlllmmYnnnnn^^^^^^gg   ZZZZZZZhcccopp55                       ", 
+  "                           [[[[[[     qr                  aaaaeeeellllmmmnnnnn ^^^sgg     ZZZZZ   ctop 5                        ", 
+  "                             [[[uvv                       wwaaaeeelllmmmmnnnnnxssss       ZZZZ    ctttp    y                    ", 
+  "                                z{{                       wweee|ll}}}mmmnnnnn~~xs          ZZ      tt\u007fp    yy                   ", 
+  "                                  {  \u0080\u0081\u0081\u0081\u0081\u0082                \u0083\u0083ee\u0084\u0085\u0086}}}\u0087mmn\u0088n\u0088\u0088~~\u0089\u0089\u0089\u008a        ZZ      t pp   y y                   ", 
+  "                                   \u008b\u008b\u0080\u0081\u0081\u0081\u0081\u0081\u008c                \u008d\u0083\u008e\u0084\u0085}}}}\u0087m\u008f\u008f\u0088\u0088\u0088\u0088~~~~\u008a           \u0090     t        y                   ", 
+  "                                     \u0080\u0080\u0080\u0081\u0081\u0081\u008c\u00916               \u0092\u008e\u0084  }}\u0087\u0087\u008f\u0093\u0093\u0093\u0088\u0088\u0088~~~\u008a\u008a                \u0094 \u0095    \u0095\u0095                     ", 
+  "                                    \u0080\u0080\u0080\u0080\u0081\u0081\u0096\u008c\u00916\u0096                     \u0097\u0098\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a\u008a                  \u0094\u0095\u0095 \u0095\u0095\u0094                      ", 
+  "                                   \u009b\u009b\u009c\u0080\u0080\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                   \u009d\u009d\u009d\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a                    \u0094\u0094 \u0094\u0094\u0094 \u0094   \u0094                ", 
+  "                                   \u009c\u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u009d\u0098\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e\u009a                     \u0094\u0094  \u0094\u0094 \u0094 \u0094\u0094\u0094\u0094\u0094\u009f\u009f  \u009f         ", 
+  "                                   \u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e                        \u0094          \u0094\u009f\u009f\u009f\u009f \u009f        ", 
+  "                                    \u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u00a0\u00a0\u0093\u0093\u00a1\u00a1\u009e\u009e\u009e                           \u0094\u0094\u0094\u00a2    \u009f \u009f\u009f   \u00a3      ", 
+  "                                     \u009c\u009c\u009c\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a5\u009e\u00a6                                \u00a7\u00a7               ", 
+  "                                     \u009c\u009c\u009c\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a1\u00a5\u00a6\u00a6  \u00a8                           \u00a7\u00a7\u00a7\u00a7  \u00a7       \u00a9    ", 
+  "                                       \u009c\u00a4\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00aa\u00aa\u00aa\u00aa\u00a1\u00ab\u00ab\u00ab\u00a6\u00a6  \u00a8\u00a8                          \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           \u00ac", 
+  "                                       \u00ad\u00a4\u00a4\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00ab\u00ab\u00a6   \u00a8\u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           ", 
+  "                                       \u00ad\u00ad\u00b0\u00ae\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00b1\u00b1\u00a6   \u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00ae\u0096\u0096                       \u00aa\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u0096\u0096\u0096                       \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00b0\u00b0\u00b0\u00b0\u00b0\u00b2\u0096                         \u00b1\u00b1\u00b1\u00b1                              \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00b2                          \u00b1                                 \u00a7\u00a7     \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0\u00b0\u00b0                                                                      \u00a7\u00a7\u00a7\u00a7        \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                                    \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                          \u00a7        \u00b3  ", 
+  "                                      \u00ad\u00b0\u00b0                                                                                  \u00b3\u00b3   ", 
+  "                                     \u00ad\u00ad\u00b0\u00b0                                                                                       ", 
+  "                                     \u00ad\u00ad\u00b0   \u00b4                                                                                    ", 
+  "                                      \u00ad\u00ad\u00b0                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         \u00b5                                                                      \u00b5               ", 
+  "                                        \u00b5                                   \u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5          ", 
+  "                                      \u00b5\u00b5\u00b5\u00b5\u00b5                 \u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   ", 
+  "                   \u00b5 \u00b5\u00b5\u00b5    \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5               \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 [...]
+  "           \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5              \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "      \u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5         \u00b5\u00b5\u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "          \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00 [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/colorize-alpha3-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha3-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..10e41a5
--- /dev/null
+++ b/tests/visual_tests/grids/colorize-alpha3-512-512-2.0-grid-reference.json
@@ -0,0 +1,283 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "78", 
+  "151", 
+  "53", 
+  "58", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "76", 
+  "157", 
+  "100", 
+  "46", 
+  "161", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "25", 
+  "106", 
+  "18", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "38", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "71", 
+  "45", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "126", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "36", 
+  "170", 
+  "160", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "124", 
+  "68", 
+  "143", 
+  "32", 
+  "27", 
+  "95", 
+  "148", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "176", 
+  "159", 
+  "142", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "102", 
+  "172", 
+  "113", 
+  "177", 
+  "54", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!                                                                         ", 
+  "                              ##########!!!!!!!!!!!!!!!!!!!!           $$       %%%              %%%                            ", 
+  "                        #  ###########!!!!!!!!!!!!!!!!!!!!           $$ $                           %%                          ", 
+  "                      ##### ########       !!!!!!!!!!!!!!!                          %%%        %%%%%%%%%%        %%%%%          ", 
+  "                    ####### ### ######       !!!!!!!!!!!!                          %     %  %%%%%%%%%%%%%%%%%%    %%%%          ", 
+  "      &&&&&&&&# ###### #########  #######    !!!!!!!!!!!               $$$$%%         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%", 
+  "%%%%  &&&&&&&&######################  #####  !!!!!!!!     '          $((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "  %&   &&&&&&&######################  ###     !!!!      '''        $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&&&&#################      ###       !!                 $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%  ", 
+  "       &&&     &&##############     ######                    *   $$((   +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %%      ", 
+  "      &&         &################# #######                   **   ,,(  -./%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       %%      ", 
+  "                 ############################                0 ** 1223333//%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%     %       ", 
+  "                   ######################## #                 * 667228839999999%%%444444444444%%%:%::%%%%%%555%%%% %            ", 
+  "                    &&&&&&&&&&&&&&#####&##  ##                 6666;<=>>???999%%%%44444444444445:::::::::::55555%% %            ", 
+  "                    &&&&&&&&&&&&&&&##&&&&#                      666<< @AA?? 9 %%% 44BB444444455555::::::5555555%%  C            ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     DEEEE <<<<FGHIIII IJ% KBKBBBBLLL55555555:5555555MM   C             ", 
+  "                    &&&&&&&&&&&&&&&&&&                       DEEE  <  < H IIIIIINN KKKKBBOO555555555555555 5 M    C             ", 
+  "                     &&&&&&&&&&&&&&&&&                        P QQQR        SITUUNNNNNKVVVWW555555555555555  XX CCC             ", 
+  "                      &&&&&&&&&&&&&&                         PPPQQQRR   Y    TUUUNNNNNVVVWWZZ555555555555555  CC                ", 
+  "                       [[[[&&&&&&&&&                         PPQQQQQYYYYY]]]]^^^U_NNNNVVWWWZZ`55555555555555                    ", 
+  "                       [[[[[[&     &                       PPaQQQQQQYYYYY]]]]^^^^^ NNNNWWWZZZZ``bZcc5555555                     ", 
+  "                        [ [[[[      d                      PaaeQQQQQYYYYY]]]]^^^^^^fg   WWZZZZZZhZc55555555i                    ", 
+  "       &                   [[[   [jjj                     kkaaeeeQQlllmmYnnnnn^^^^^^gg   ZZZZZZZhcccopp55                       ", 
+  "                           [[[[[[     qr                  aaaaeeeellllmmmnnnnn ^^^sgg     ZZZZZ   ctop 5                        ", 
+  "                             [[[uvv                       wwaaaeeelllmmmmnnnnnxssss       ZZZZ    ctttp    y                    ", 
+  "                                z{{                       wweee|ll}}}mmmnnnnn~~xs          ZZ      tt\u007fp    yy                   ", 
+  "                                  {  \u0080\u0081\u0081\u0081\u0081\u0082                \u0083\u0083ee\u0084\u0085\u0086}}}\u0087mmn\u0088n\u0088\u0088~~\u0089\u0089\u0089\u008a        ZZ      t pp   y y                   ", 
+  "                                   \u008b\u008b\u0080\u0081\u0081\u0081\u0081\u0081\u008c                \u008d\u0083\u008e\u0084\u0085}}}}\u0087m\u008f\u008f\u0088\u0088\u0088\u0088~~~~\u008a           \u0090     t        y                   ", 
+  "                                     \u0080\u0080\u0080\u0081\u0081\u0081\u008c\u00916               \u0092\u008e\u0084  }}\u0087\u0087\u008f\u0093\u0093\u0093\u0088\u0088\u0088~~~\u008a\u008a                \u0094 \u0095    \u0095\u0095                     ", 
+  "                                    \u0080\u0080\u0080\u0080\u0081\u0081\u0096\u008c\u00916\u0096                     \u0097\u0098\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a\u008a                  \u0094\u0095\u0095 \u0095\u0095\u0094                      ", 
+  "                                   \u009b\u009b\u009c\u0080\u0080\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                   \u009d\u009d\u009d\u0098\u0093\u0093\u0093\u0093\u0099\u0099\u009a\u009a\u008a                    \u0094\u0094 \u0094\u0094\u0094 \u0094   \u0094                ", 
+  "                                   \u009c\u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u009d\u0098\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e\u009a                     \u0094\u0094  \u0094\u0094 \u0094 \u0094\u0094\u0094\u0094\u0094\u009f\u009f  \u009f         ", 
+  "                                   \u009c\u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u0093\u0093\u0093\u0093\u0093\u009e\u009e\u009e                        \u0094          \u0094\u009f\u009f\u009f\u009f \u009f        ", 
+  "                                    \u009c\u009c\u009c\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00a0\u00a0\u00a0\u0093\u0093\u00a1\u00a1\u009e\u009e\u009e                           \u0094\u0094\u0094\u00a2    \u009f \u009f\u009f   \u00a3      ", 
+  "                                     \u009c\u009c\u009c\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a5\u009e\u00a6                                \u00a7\u00a7               ", 
+  "                                     \u009c\u009c\u009c\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096                  \u00a0\u00a0\u00a0\u00a1\u00a1\u00a1\u00a1\u00a5\u00a6\u00a6  \u00a8                           \u00a7\u00a7\u00a7\u00a7  \u00a7       \u00a9    ", 
+  "                                       \u009c\u00a4\u00a4\u00a4\u00a4\u0096\u0096\u0096\u0096\u0096\u0096\u0096                 \u00aa\u00aa\u00aa\u00aa\u00a1\u00ab\u00ab\u00ab\u00a6\u00a6  \u00a8\u00a8                          \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           \u00ac", 
+  "                                       \u00ad\u00a4\u00a4\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00ab\u00ab\u00a6   \u00a8\u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7           ", 
+  "                                       \u00ad\u00ad\u00b0\u00ae\u00ae\u00ae\u0096\u0096\u0096\u0096\u0096                   \u00aa\u00aa\u00aa\u00af\u00af\u00b1\u00b1\u00a6   \u00a8                        \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00ae\u0096\u0096                       \u00aa\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u0096\u0096\u0096                       \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1                             \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00b0\u00b0\u00b0\u00b0\u00b0\u00b2\u0096                         \u00b1\u00b1\u00b1\u00b1                              \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7         ", 
+  "                                       \u00ad\u00b0\u00b0\u00b0\u00b0\u00b2                          \u00b1                                 \u00a7\u00a7     \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7          ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0\u00b0\u00b0                                                                      \u00a7\u00a7\u00a7\u00a7        \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                                    \u00b3 ", 
+  "                                      \u00ad\u00b0\u00b0\u00b0                                                                          \u00a7        \u00b3  ", 
+  "                                      \u00ad\u00b0\u00b0                                                                                  \u00b3\u00b3   ", 
+  "                                     \u00ad\u00ad\u00b0\u00b0                                                                                       ", 
+  "                                     \u00ad\u00ad\u00b0   \u00b4                                                                                    ", 
+  "                                      \u00ad\u00ad\u00b0                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         \u00b5                                                                      \u00b5               ", 
+  "                                        \u00b5                                   \u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5          ", 
+  "                                      \u00b5\u00b5\u00b5\u00b5\u00b5                 \u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5   ", 
+  "                   \u00b5 \u00b5\u00b5\u00b5    \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5               \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 [...]
+  "           \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5              \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "      \u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5         \u00b5\u00b5\u00b5  \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "          \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00 [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u [...]
+  "\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/dst-over-compositing-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/dst-over-compositing-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..3b86856
--- /dev/null
+++ b/tests/visual_tests/grids/dst-over-compositing-512-512-1.0-grid-reference.json
@@ -0,0 +1,140 @@
+{
+ "keys": [
+  "2", 
+  "", 
+  "6", 
+  "4", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "###################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "###################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/dst-over-compositing-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/dst-over-compositing-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..c3e425b
--- /dev/null
+++ b/tests/visual_tests/grids/dst-over-compositing-512-512-2.0-grid-reference.json
@@ -0,0 +1,140 @@
+{
+ "keys": [
+  "2", 
+  "", 
+  "6", 
+  "4", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "#####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "######################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "#######################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "#######################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "########################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "########################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "########################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "########################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "########################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "#######################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "#######################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "######################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "#####################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "###################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/expressionformat-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/expressionformat-500-100-1.0-grid-reference.json
index c5fce65..6df82cf 100644
--- a/tests/visual_tests/grids/expressionformat-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/expressionformat-500-100-1.0-grid-reference.json
@@ -28,8 +28,8 @@
   "                                                                                                                             ", 
   "      !            #           $            %           &            '           (            )           *            +     ", 
   "                                                                                                                             ", 
-  "                   #          $$$          %%%         &&&&        '''''     (( (          )) ) )))   **    ***   ++    +    ", 
-  "                                                                    '         (((((((      )) )))))    * *  *       + + ++++ ", 
+  "                  ##          $$$$        %%%%        &&&&&        '' ''     (((((( ((    ))) )))))   **** ***      +++ ++ + ", 
+  "                                                                             (((((((((    ))  ))) )   *  *  * **   +  + ++ + ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/expressionformat-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/expressionformat-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..e438df9
--- /dev/null
+++ b/tests/visual_tests/grids/expressionformat-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "     !!!         ####       $ $$        %          &&    &&    '''  '   '           )))    )    )   ) )      +++         +   ", 
+  "                            $$$$  $     % % %%%%     &&  && &&  '''''   ''           ))) )))  ))))) ))))      + ++ ++++  ++++", 
+  "                                                                '''' ' ''''          ))  )))    ))  )))       + ++ ++    + ++", 
+  "                                                                                       ) )    )               + +  ++ +  +++ ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-1-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-1-500-100-1.0-grid-reference.json
index 2725f74..8b01aff 100644
--- a/tests/visual_tests/grids/formatting-1-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/formatting-1-500-100-1.0-grid-reference.json
@@ -28,12 +28,12 @@
   "                                                                                                                             ", 
   "      !            #           $            %           &            '           (            )           *            +     ", 
   "                                                                                                                             ", 
-  "!    !                $$$      $ $              &&&    &  &&           (((    (                   **                         ", 
-  " !!! !  !!!   !        $$ $    $ $$$ $$$           &&& &  &&&   &       ( ((( (    (((((   (        * *    *   ***           ", 
-  " !  !!  !!!            $$   $  $ $$$ $ $           &  &&  && &          ( (  ((   (( (((   (        *      *    **           ", 
+  "!                     $$    $  $                &&&    &  &&           (((                        **    *                    ", 
+  "!        !!   !          $$ $  $  $$  $$         &&    &   &&   &       (( (    ( ( (((( (((         ** *  **  ***           ", 
+  "!   !!   !!   !            $$  $  $$   $         &&   &&   & &          (( (    (   ((((   (           **  *    **           ", 
   "                                                                                                                             ", 
-  "    !!!! !!!              $$$$$$$$$ $                 &&&&&&&&                ((((((((((                ********             ", 
-  "    !!!!!!!                 $$$$$$$$$                 &&&&  &                 (((((( ( (             *****  ****             ", 
+  " !!! !!!!!!              $$$ $$$$ $$$              &&& &&&& &              ((((( (( ((((             ***** *** *             ", 
+  " !!!!  !!!!!             $$$$$$$$ $$$$             &&&&& & &&&               ((( ((  ((                ***  * **             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/formatting-1-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-1-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..1891e73
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-1-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "   !                       %%%%%              %%                           )))))                   )      )                  ", 
+  "   !                         %          %     %                              )          )                 )    )             ", 
+  " ! !     ! !! ! !! ! !!      % %%%% %%% %%%  %%% %%%    %  %%                ) )))  ))))))    )))  ) )))) )))))))            ", 
+  "!  !     !  ! !  ! !!!!      % %  % %   %     % %   %   %  %                 ) )  ) )   )    )   ) ) )  ) )  ) )             ", 
+  " ! !     !  ! !  ! !         % %     %% %     % %   %   %  %                 ) )     )) )    )     ) )  ) )  ) )             ", 
+  " ! !!!   !!!! !  ! !!!!      % %  %   % %     %  % %  % %  %                 ) )  )   ) )     )  ) ) ) )) )  ) )             ", 
+  "                                %%  %%            %   %%                        ))  ))         ))       )                    ", 
+  "                                                                                                     )))                     ", 
+  "     !                            %%%     %   %       %                           ))))     )     )   )  )                    ", 
+  "!!!  !  !  !!  !                 % % %% %%%% %%%%  %%%                            ) ) )))) )  )) ))) )) ) )                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-2-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-2-500-100-1.0-grid-reference.json
index 2725f74..8b01aff 100644
--- a/tests/visual_tests/grids/formatting-2-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/formatting-2-500-100-1.0-grid-reference.json
@@ -28,12 +28,12 @@
   "                                                                                                                             ", 
   "      !            #           $            %           &            '           (            )           *            +     ", 
   "                                                                                                                             ", 
-  "!    !                $$$      $ $              &&&    &  &&           (((    (                   **                         ", 
-  " !!! !  !!!   !        $$ $    $ $$$ $$$           &&& &  &&&   &       ( ((( (    (((((   (        * *    *   ***           ", 
-  " !  !!  !!!            $$   $  $ $$$ $ $           &  &&  && &          ( (  ((   (( (((   (        *      *    **           ", 
+  "!                     $$    $  $                &&&    &  &&           (((                        **    *                    ", 
+  "!        !!   !          $$ $  $  $$  $$         &&    &   &&   &       (( (    ( ( (((( (((         ** *  **  ***           ", 
+  "!   !!   !!   !            $$  $  $$   $         &&   &&   & &          (( (    (   ((((   (           **  *    **           ", 
   "                                                                                                                             ", 
-  "    !!!! !!!              $$$$$$$$$ $                 &&&&&&&&                ((((((((((                ********             ", 
-  "    !!!!!!!                 $$$$$$$$$                 &&&&  &                 (((((( ( (             *****  ****             ", 
+  " !!! !!!!!!              $$$ $$$$ $$$              &&& &&&& &              ((((( (( ((((             ***** *** *             ", 
+  " !!!!  !!!!!             $$$$$$$$ $$$$             &&&&& & &&&               ((( ((  ((                ***  * **             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/formatting-2-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-2-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..1891e73
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-2-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "   !                       %%%%%              %%                           )))))                   )      )                  ", 
+  "   !                         %          %     %                              )          )                 )    )             ", 
+  " ! !     ! !! ! !! ! !!      % %%%% %%% %%%  %%% %%%    %  %%                ) )))  ))))))    )))  ) )))) )))))))            ", 
+  "!  !     !  ! !  ! !!!!      % %  % %   %     % %   %   %  %                 ) )  ) )   )    )   ) ) )  ) )  ) )             ", 
+  " ! !     !  ! !  ! !         % %     %% %     % %   %   %  %                 ) )     )) )    )     ) )  ) )  ) )             ", 
+  " ! !!!   !!!! !  ! !!!!      % %  %   % %     %  % %  % %  %                 ) )  )   ) )     )  ) ) ) )) )  ) )             ", 
+  "                                %%  %%            %   %%                        ))  ))         ))       )                    ", 
+  "                                                                                                     )))                     ", 
+  "     !                            %%%     %   %       %                           ))))     )     )   )  )                    ", 
+  "!!!  !  !  !!  !                 % % %% %%%% %%%%  %%%                            ) ) )))) )  )) ))) )) ) )                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-3-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-3-500-100-1.0-grid-reference.json
index ef9f008..200e5df 100644
--- a/tests/visual_tests/grids/formatting-3-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/formatting-3-500-100-1.0-grid-reference.json
@@ -28,9 +28,9 @@
   "                                                                                                                             ", 
   "      !            #           $            %           &            '           (            )           *            +     ", 
   "                                                                                                                             ", 
-  "!    !                $$$      $ $              &&&    &  &&           (((    (                   **                         ", 
-  " !!! !  !!!   !        $$ $    $ $$$ $$$           &&& &  &&&   &       ( ((( (    (((((   (        * *    *   ***           ", 
-  " !  !!  !!!            $$   $  $ $$$ $ $           &  &&  && &          ( (  ((   (( (((   (        *      *    **           ", 
+  "!                     $$    $  $                &&&    &  &&           (((                        **    *                    ", 
+  "!        !!   !          $$ $  $  $$  $$         &&    &   &&   &       (( (    ( ( (((( (((         ** *  **  ***           ", 
+  "!   !!   !!   !            $$  $  $$   $         &&   &&   & &          (( (    (   ((((   (           **  *    **           ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/formatting-3-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-3-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..02e1991
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-3-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "   !                       %%%%%              %%                           )))))                   )      )                  ", 
+  "   !                         %          %     %                              )          )                 )    )             ", 
+  " ! !     ! !! ! !! ! !!      % %%%% %%% %%%  %%% %%%    %  %%                ) )))  ))))))    )))  ) )))) )))))))            ", 
+  "!  !     !  ! !  ! !!!!      % %  % %   %     % %   %   %  %                 ) )  ) )   )    )   ) ) )  ) )  ) )             ", 
+  " ! !     !  ! !  ! !         % %     %% %     % %   %   %  %                 ) )     )) )    )     ) )  ) )  ) )             ", 
+  " ! !!!   !!!! !  ! !!!!      % %  %   % %     %  % %  % %  %                 ) )  )   ) )     )  ) ) ) )) )  ) )             ", 
+  "                                %%  %%            %   %%                        ))  ))         ))       )                    ", 
+  "                                                                                                     )))                     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-4-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-4-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..8bddd01
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-4-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-5-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-5-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..8b01aff
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-5-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "!                     $$    $  $                &&&    &  &&           (((                        **    *                    ", 
+  "!        !!   !          $$ $  $  $$  $$         &&    &   &&   &       (( (    ( ( (((( (((         ** *  **  ***           ", 
+  "!   !!   !!   !            $$  $  $$   $         &&   &&   & &          (( (    (   ((((   (           **  *    **           ", 
+  "                                                                                                                             ", 
+  " !!! !!!!!!              $$$ $$$$ $$$              &&& &&&& &              ((((( (( ((((             ***** *** *             ", 
+  " !!!!  !!!!!             $$$$$$$$ $$$$             &&&&& & &&&               ((( ((  ((                ***  * **             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-5-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-5-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..1891e73
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-5-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "   !                       %%%%%              %%                           )))))                   )      )                  ", 
+  "   !                         %          %     %                              )          )                 )    )             ", 
+  " ! !     ! !! ! !! ! !!      % %%%% %%% %%%  %%% %%%    %  %%                ) )))  ))))))    )))  ) )))) )))))))            ", 
+  "!  !     !  ! !  ! !!!!      % %  % %   %     % %   %   %  %                 ) )  ) )   )    )   ) ) )  ) )  ) )             ", 
+  " ! !     !  ! !  ! !         % %     %% %     % %   %   %  %                 ) )     )) )    )     ) )  ) )  ) )             ", 
+  " ! !!!   !!!! !  ! !!!!      % %  %   % %     %  % %  % %  %                 ) )  )   ) )     )  ) ) ) )) )  ) )             ", 
+  "                                %%  %%            %   %%                        ))  ))         ))       )                    ", 
+  "                                                                                                     )))                     ", 
+  "     !                            %%%     %   %       %                           ))))     )     )   )  )                    ", 
+  "!!!  !  !  !!  !                 % % %% %%%% %%%%  %%%                            ) ) )))) )  )) ))) )) ) )                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-6-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-6-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..8b01aff
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-6-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "!                     $$    $  $                &&&    &  &&           (((                        **    *                    ", 
+  "!        !!   !          $$ $  $  $$  $$         &&    &   &&   &       (( (    ( ( (((( (((         ** *  **  ***           ", 
+  "!   !!   !!   !            $$  $  $$   $         &&   &&   & &          (( (    (   ((((   (           **  *    **           ", 
+  "                                                                                                                             ", 
+  " !!! !!!!!!              $$$ $$$$ $$$              &&& &&&& &              ((((( (( ((((             ***** *** *             ", 
+  " !!!!  !!!!!             $$$$$$$$ $$$$             &&&&& & &&&               ((( ((  ((                ***  * **             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-6-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-6-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..1891e73
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-6-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "   !                       %%%%%              %%                           )))))                   )      )                  ", 
+  "   !                         %          %     %                              )          )                 )    )             ", 
+  " ! !     ! !! ! !! ! !!      % %%%% %%% %%%  %%% %%%    %  %%                ) )))  ))))))    )))  ) )))) )))))))            ", 
+  "!  !     !  ! !  ! !!!!      % %  % %   %     % %   %   %  %                 ) )  ) )   )    )   ) ) )  ) )  ) )             ", 
+  " ! !     !  ! !  ! !         % %     %% %     % %   %   %  %                 ) )     )) )    )     ) )  ) )  ) )             ", 
+  " ! !!!   !!!! !  ! !!!!      % %  %   % %     %  % %  % %  %                 ) )  )   ) )     )  ) ) ) )) )  ) )             ", 
+  "                                %%  %%            %   %%                        ))  ))         ))       )                    ", 
+  "                                                                                                     )))                     ", 
+  "     !                            %%%     %   %       %                           ))))     )     )   )  )                    ", 
+  "!!!  !  !  !!  !                 % % %% %%%% %%%%  %%%                            ) ) )))) )  )) ))) )) ) )                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-7-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-7-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..8b01aff
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-7-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "!                     $$    $  $                &&&    &  &&           (((                        **    *                    ", 
+  "!        !!   !          $$ $  $  $$  $$         &&    &   &&   &       (( (    ( ( (((( (((         ** *  **  ***           ", 
+  "!   !!   !!   !            $$  $  $$   $         &&   &&   & &          (( (    (   ((((   (           **  *    **           ", 
+  "                                                                                                                             ", 
+  " !!! !!!!!!              $$$ $$$$ $$$              &&& &&&& &              ((((( (( ((((             ***** *** *             ", 
+  " !!!!  !!!!!             $$$$$$$$ $$$$             &&&&& & &&&               ((( ((  ((                ***  * **             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-7-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-7-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..1891e73
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-7-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "   !                       %%%%%              %%                           )))))                   )      )                  ", 
+  "   !                         %          %     %                              )          )                 )    )             ", 
+  " ! !     ! !! ! !! ! !!      % %%%% %%% %%%  %%% %%%    %  %%                ) )))  ))))))    )))  ) )))) )))))))            ", 
+  "!  !     !  ! !  ! !!!!      % %  % %   %     % %   %   %  %                 ) )  ) )   )    )   ) ) )  ) )  ) )             ", 
+  " ! !     !  ! !  ! !         % %     %% %     % %   %   %  %                 ) )     )) )    )     ) )  ) )  ) )             ", 
+  " ! !!!   !!!! !  ! !!!!      % %  %   % %     %  % %  % %  %                 ) )  )   ) )     )  ) ) ) )) )  ) )             ", 
+  "                                %%  %%            %   %%                        ))  ))         ))       )                    ", 
+  "                                                                                                     )))                     ", 
+  "     !                            %%%     %   %       %                           ))))     )     )   )  )                    ", 
+  "!!!  !  !  !!  !                 % % %% %%%% %%%%  %%%                            ) ) )))) )  )) ))) )) ) )                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-8-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-8-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..8b01aff
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-8-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "!                     $$    $  $                &&&    &  &&           (((                        **    *                    ", 
+  "!        !!   !          $$ $  $  $$  $$         &&    &   &&   &       (( (    ( ( (((( (((         ** *  **  ***           ", 
+  "!   !!   !!   !            $$  $  $$   $         &&   &&   & &          (( (    (   ((((   (           **  *    **           ", 
+  "                                                                                                                             ", 
+  " !!! !!!!!!              $$$ $$$$ $$$              &&& &&&& &              ((((( (( ((((             ***** *** *             ", 
+  " !!!!  !!!!!             $$$$$$$$ $$$$             &&&&& & &&&               ((( ((  ((                ***  * **             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-8-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-8-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..1891e73
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-8-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "      !            #           $            %           &            '           (            )           *            +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "   !                       %%%%%              %%                           )))))                   )      )                  ", 
+  "   !                         %          %     %                              )          )                 )    )             ", 
+  " ! !     ! !! ! !! ! !!      % %%%% %%% %%%  %%% %%%    %  %%                ) )))  ))))))    )))  ) )))) )))))))            ", 
+  "!  !     !  ! !  ! !!!!      % %  % %   %     % %   %   %  %                 ) )  ) )   )    )   ) ) )  ) )  ) )             ", 
+  " ! !     !  ! !  ! !         % %     %% %     % %   %   %  %                 ) )     )) )    )     ) )  ) )  ) )             ", 
+  " ! !!!   !!!! !  ! !!!!      % %  %   % %     %  % %  % %  %                 ) )  )   ) )     )  ) ) ) )) )  ) )             ", 
+  "                                %%  %%            %   %%                        ))  ))         ))       )                    ", 
+  "                                                                                                     )))                     ", 
+  "     !                            %%%     %   %       %                           ))))     )     )   )  )                    ", 
+  "!!!  !  !  !!  !                 % % %% %%%% %%%%  %%%                            ) ) )))) )  )) ))) )) ) )                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-expr-alignment-500-500-1.0-grid-reference.json b/tests/visual_tests/grids/formatting-expr-alignment-500-500-1.0-grid-reference.json
new file mode 100644
index 0000000..6feb073
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-expr-alignment-500-500-1.0-grid-reference.json
@@ -0,0 +1,145 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "10", 
+  "4", 
+  "5", 
+  "6", 
+  "11", 
+  "7", 
+  "8", 
+  "9", 
+  "12"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "              !! !!                           # ##                           $$ $$                         %% %%             ", 
+  "              !! !                            #  #                           $$ $                          %% %              ", 
+  "                ! !!                         # ## #                         $  $ $                        %  % %             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "              &   &                          ' '' '                          ((  (                      ) )))                ", 
+  "              && & &                          '' '                          ((( (                        ))))                ", 
+  "              && &&                             ''                           (( ((                      )) ))                ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "              ** ***                         + ++                           ,,, ,,                   - -- -                  ", 
+  "                 *                            +  +                              ,                     -  -                   ", 
+  "              **  *                          + ++                            ,,  ,                   - --                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/formatting-expr-alignment-500-500-2.0-grid-reference.json b/tests/visual_tests/grids/formatting-expr-alignment-500-500-2.0-grid-reference.json
new file mode 100644
index 0000000..d59fb61
--- /dev/null
+++ b/tests/visual_tests/grids/formatting-expr-alignment-500-500-2.0-grid-reference.json
@@ -0,0 +1,145 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "10", 
+  "4", 
+  "5", 
+  "6", 
+  "11", 
+  "7", 
+  "8", 
+  "9", 
+  "12"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "         !  ! !! !                         #  #  # ##                        $$ $  $  $                    %% %  %  %        ", 
+  "          !!   ! !                          ###  ###                          $ $   $$                      % %   %%         ", 
+  "          !!    !                            #    #                            $    $$                       %    %%         ", 
+  "          !!   !!!                          ##   ###                          $$$   $$                      %%%   %%         ", 
+  "         !  ! !! !                         #  #  # ##                        $$ $  $  $                    %% %  %  %        ", 
+  "        !!  !!!   !!                       #   ##   #                       $$   $$   $                   %%   %%   %        ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "         &  & && &&                        '  '  '  '                        (( (( (  (               )  ) )) ))             ", 
+  "          &&   & &                          '''  ' '                          ( (  (((                 ))   ) )              ", 
+  "          &&    &  &                        '' '  '                         (  (    ((                 )) )  )               ", 
+  "          &&   &&&                          ''   '''                          (((   ((                 ))   )))              ", 
+  "         &  &  & &                         '' '  ' '                          ( (  ( ((               )  )  ) )              ", 
+  "        &&  & &   &                        '  '''   '                        (   (((  (              ))  ) )   )             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "         *  * *  ***                       +  ++++  +                       ,,  ,, ,  ,         -- -- -  --                  ", 
+  "         ***   * *                          +++  + +                          , ,  ,,,           - -  ---                    ", 
+  "          **    *                           ++    ++                           ,    ,,            -    --                    ", 
+  "          **   **                           ++    ++                          ,,    ,,           ---   --                    ", 
+  "         * **  * *                         ++ +  + +                          , ,  , ,,          - -  - --                   ", 
+  "        **  * *   *                        +  +++   +                        ,   ,,,  ,         -   ---  -                   ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/functional-expressions-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/functional-expressions-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..6a6f1e7
--- /dev/null
+++ b/tests/visual_tests/grids/functional-expressions-256-256-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                        !!      ", 
+  "                                                       !!       ", 
+  "                                                      !!        ", 
+  "                                                     !!         ", 
+  "                                                    !!          ", 
+  "                                                   !!           ", 
+  "                                                  !!            ", 
+  "                                                 !!             ", 
+  "                                                !!              ", 
+  "                                               !!               ", 
+  "                                              !!                ", 
+  "                                             !!                 ", 
+  "                                            !!                  ", 
+  "                                           !!                   ", 
+  "                                          !!                    ", 
+  "                                         !!                     ", 
+  "                       ##              ##!                      ", 
+  "                       ####    ###   ####                       ", 
+  "                      ####################                      ", 
+  "                       ###################                      ", 
+  "                       ##################                     !!", 
+  "                      ####################                  !!! ", 
+  "                      #####################                !!!  ", 
+  "                     ######################              !!!    ", 
+  "                     ######################             !!!     ", 
+  "                     ######################           !!!       ", 
+  "                     ######################         !!!         ", 
+  "                     ######################        !!!          ", 
+  "                     ######################      !!!            ", 
+  "                ################################!!              ", 
+  "                  #############################!!               ", 
+  "              #        ###################  !!!   #             ", 
+  "                        #################  !!!                  ", 
+  "                     # !!##############  !!!                    ", 
+  "                    ###!     #######   !!!                      ", 
+  "                    #!##    ######### !!!                       ", 
+  "                    !!###  ##########!!                         ", 
+  "                   !!  ##############                           ", 
+  "                  !!    #############                           ", 
+  "                 !!         ####!####                           ", 
+  "                !!          ####!####                           ", 
+  "               !!           #########                           ", 
+  "              !!         ###############                        ", 
+  "             !!        ###################                      ", 
+  "            !!        #####################                     ", 
+  "           !!        !#####################                     ", 
+  "          !!        !!#####################                     ", 
+  "         !!       !!!   #################                       ", 
+  "        !!       !!!       ###########                          ", 
+  "       !!      !!!                                              ", 
+  "      !!     !!!                                                ", 
+  "     !!     !!!                                                 ", 
+  "    !!    !!!                                                   ", 
+  "   !!   !!!                                                     ", 
+  "  !!   !!!                                                      ", 
+  " !!  !!!                                                        ", 
+  "!!  !!!                                                         ", 
+  "! !!!                                                           ", 
+  "!!!                                                             ", 
+  "!!                                                              ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/functional-expressions-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/functional-expressions-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..5f18f99
--- /dev/null
+++ b/tests/visual_tests/grids/functional-expressions-256-256-2.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "              !!!                             !!!!##            ", 
+  "             !!!!!!!                        !!!!!!#             ", 
+  "             !!!!!!!!!                    !!!!!!!!              ", 
+  "             !!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ##", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      #####", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#### ", 
+  "!!          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    #####  !", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ######    ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  #####      ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #####        ", 
+  "               ##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ######         ", 
+  "              #### !!!!!!!!!!!!!!!!!!!!!!!!!!!  #####           ", 
+  "        !!!! ####     !!!!!!!!!!!!!!!!!!!!!   #####             ", 
+  "         !!!!!##          !!!!!!!!!!!!!     ######              ", 
+  "        ! !!!!#          !!!!!!!!!!!!!!!   #####                ", 
+  "        !!#!!!!         !!!!!!!!!!!!!!!!!######                 ", 
+  "        !!##!!!!        !!!!!!!!!!!!!!!!!####                   ", 
+  "        #### !!!!      !!!!!!!!!!!!!!!!!!##                     ", 
+  "       ####  !!!!!!!!!!!!!! !!!! !!!!!!!!#                      ", 
+  "      ####   !!!!!!!!!!!!!! !!!! !!!!!!!!                       ", 
+  "     ####     !!!!!!!!!!!!! !!!! !!!!#!!!                       ", 
+  "    ####        !!!!!!!!!!! !!!!#!!!! !!!                       ", 
+  "   ####           !!!!!!!!! !!!!#!!!! !!!                       ", 
+  "  ####                 !!!! !!!!#!!!! !!!                       ", 
+  " ####                  !!!!#!!!! !!!! !!!                       ", 
+  "####                   !!!!#!!!! !!!! !!!                       ", 
+  "###                    !!!!#!!!! !!!! !!!                       ", 
+  "##                    #!!!! !!!! !!!! !!!                       ", 
+  "#                   ###!!!!!!!!!!!!!!!!!!!                      ", 
+  "                  #!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "          ##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "         ###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "       #####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "     ######  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "    #####     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "  ######        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  " #####            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/functional-expressions-length-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/functional-expressions-length-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..68bc7e3
--- /dev/null
+++ b/tests/visual_tests/grids/functional-expressions-length-512-512-1.0-grid-reference.json
@@ -0,0 +1,142 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "5", 
+  "4", 
+  "2", 
+  "6", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                        !!      ", 
+  "                                                                                                                       !!       ", 
+  "                                                                                                                      !!        ", 
+  "                                                                                                                     !!         ", 
+  "                                                                                                                    !!          ", 
+  "                                                                                                                   !!           ", 
+  "                                                                                                                  !!            ", 
+  "                                                                                                                 !!             ", 
+  "                                                                                                                !!              ", 
+  "                                                                                                               !!               ", 
+  "                                                                                                              !!                ", 
+  "                                                                                                             !!                 ", 
+  "                                                                                                            !!                  ", 
+  "                                                                                                           !!                   ", 
+  "                                                                                                          !!                    ", 
+  "                                                                                                         !!                     ", 
+  "                                                                                                        !!                      ", 
+  "                                                                                                       !!                       ", 
+  "                   #####                                                                              !!                        ", 
+  "                   #####                                                                             !!  $$$$                   ", 
+  "                   ######                                                                           !!   $$$$                   ", 
+  "                 # #####                                                                           !!   $$$$$$                  ", 
+  "                   # ##                                                                           !!     $$$                    ", 
+  "                    ###                                                                          !!      $$$$                   ", 
+  "                   #####                                                                        !!        $$                    ", 
+  "                   #####                                                                       !!                               ", 
+  "                                                                                              !!                                ", 
+  "                                                                                             !!                                 ", 
+  "                                                                                            !!                                  ", 
+  "                                                                                           !!                                   ", 
+  "                                                                                          !!                                    ", 
+  "                                                                                         !!                                     ", 
+  "                                                                                        !!                                      ", 
+  "                                                                                       !!                                       ", 
+  "                                                                                      !!                                        ", 
+  "                                                                                     !!                                         ", 
+  "                                                                                    !!                                          ", 
+  "                                                                                   !!                                           ", 
+  "                                                                                  !!                                            ", 
+  "                                                                                 !!                                             ", 
+  "                                                                                !!                                              ", 
+  "                                                                               !!                                               ", 
+  "                                                                              !!                                                ", 
+  "                                                                             !!                                                 ", 
+  "                                                                            !!                                                  ", 
+  "                                                     %%%%              %%%%!!                                                   ", 
+  "                                                    %%%%%%% %%%%%%%% %%%%%%!                                                    ", 
+  "                                                    %%%%%%%%%%%%%%%%%%%%%%%%                                                    ", 
+  "                                                    %%%%%%%%%%%%%%%%%%%%%%%%                                                    ", 
+  "                                                    %%%%%%%%%%%%%%%%%%%%%%%                                                     ", 
+  "                                                     %%%%%%%%%%%%%%%%%%%%%%%                                                    ", 
+  "                                                    %%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ", 
+  "                                                   %%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                          %        %%%%%%%%%%%%%%%%%%%%%%%%%%        %%                                         ", 
+  "                                            %%%     %%%%%%%%%%%%%%%%%%%%%%%%%     %%                                            ", 
+  "                                                     %%%%%%%%%%%%%%%%%%%%%%%                                                    ", 
+  "                                                      %%%%%%%%%%%%%%%%%%%%%                                                     ", 
+  "                                                       %%%%%%%%%%%%%%%%%%                                                       ", 
+  "                                                  %%% !!   %%%%%%%%%%%                                                          ", 
+  "                                                   %%!!     %%%%%%%%%                                                           ", 
+  "                                                  % %%     %%%%%%%%%%%                                                          ", 
+  "                                                   !%%%%  %%%%%%%%%%%%                                                          ", 
+  "                                                  !! %%%%%%%% %% %%%%%                                                          ", 
+  "                                                 !!   %%%%%%% %% %% %%                                                          ", 
+  "                                                !!      %% %% %% %% %%                                                          ", 
+  "                                               !!          %% %% %% %%                                                          ", 
+  "                                              !!           %% %% %% %%                                                          ", 
+  "                                             !!            %% %% %% %%                                                          ", 
+  "                                            !!          %%%%%%%%%%%%%%%%%                                                       ", 
+  "                                           !!         %%%%%%%%%%%%%%%%%%%%%                                                     ", 
+  "                                          !!        %%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                         !!         %%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                        !!          %%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                       !!           %%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                                      !!              %%%%%%%%%%%%%%%%%%%%%%                                                    ", 
+  "                                     !!                 %%%%%%%%%%%%%%%%%                                                       ", 
+  "                                    !!                       %%%%%%%                                                            ", 
+  "                                   !!                                                                                           ", 
+  "                                  !!                                                                                            ", 
+  "                                 !!                                                                                             ", 
+  "                                !!                                                                                              ", 
+  "                               !!                                                                                               ", 
+  "                              !!                                                                                                ", 
+  "                             !!                                                                                                 ", 
+  "                            !!                                                                                                  ", 
+  "                           !!                                                                                                   ", 
+  "                          !!                                                                                                    ", 
+  "                         !!                                                                                                     ", 
+  "                        !!                                                                                                      ", 
+  "                       !!                                                                                                       ", 
+  "                      !!                                                                                                        ", 
+  "                     !!                                                                                                         ", 
+  "                    !!                                                                                                          ", 
+  "                   !!                                                                                                           ", 
+  "                  !!                                                                                                            ", 
+  "                 !!                                                                                      &&&&                   ", 
+  "                !!  '''                                                                                 &&&&&&                  ", 
+  "               !!   ''''                                                                                &&&&&&                  ", 
+  "              !!   ''''''                                                                             &&&&&&&&&&                ", 
+  "             !!      ''                                                                                 & &&&                   ", 
+  "            !!       ''                                                                                  &&&                    ", 
+  "           !!       '''                                                                                  &&&&                   ", 
+  "          !!                                                                                            &&&&&&                  ", 
+  "         !!                                                                                                                     ", 
+  "        !!                                                                                                                      ", 
+  "       !!                                                                                                                       ", 
+  "      !!                                                                                                                        ", 
+  "     !!                                                                                                                         ", 
+  "    !!                                                                                                                          ", 
+  "   !!                                                                                                                           ", 
+  "  !!                                                                                                                            ", 
+  " !!                                                                                                                             ", 
+  "!!                                                                                                                              ", 
+  "!                                                                                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/functional-expressions-length-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/functional-expressions-length-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..d43a328
--- /dev/null
+++ b/tests/visual_tests/grids/functional-expressions-length-512-512-2.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                !!!!            ", 
+  "                                                                                                               !!!!             ", 
+  "                                                                                                              !!!!              ", 
+  "                                                                                                             !!!!               ", 
+  "                                                                                                            !!!!                ", 
+  "                                                                                                           !!!!                 ", 
+  "                                                                                                          !!!!                  ", 
+  "                                                                                                         !!!!                   ", 
+  "                                                                                                        !!!!                    ", 
+  "                                                                                                       !!!!                     ", 
+  "                                                                                                      !!!!                      ", 
+  "                                                                                                     !!!!                       ", 
+  "                                                                                                    !!!!                        ", 
+  "                                                                                                   !!!!                         ", 
+  "                                                                                                  !!!!                          ", 
+  "                                                                                                 !!!!                           ", 
+  "                                                                                                !!!!                            ", 
+  "                                                                                               !!!!                             ", 
+  "                                                                                              !!!!                              ", 
+  "                                                                                             !!!!                               ", 
+  "                                                                                            !!!!                                ", 
+  "                                                                                           !!!!                                 ", 
+  "                                                                                          !!!!                                  ", 
+  "                                                                                         !!!!                                   ", 
+  "                                                                                        !!!!                                    ", 
+  "                                          ####                                   ##### !!!!                                     ", 
+  "                                         #######                               #######!!!!                                      ", 
+  "                                         #########                           #########!!!                                       ", 
+  "                                         ###########      ############     ###########!!                                        ", 
+  "                                         ##############################################                                         ", 
+  "                                        ###############################################                                         ", 
+  "                                        ###############################################                                         ", 
+  "                                        ###############################################                                         ", 
+  "                                        ###############################################                                         ", 
+  "                                         #############################################                                          ", 
+  "                                         #############################################                                          ", 
+  "                                         ##############################################                                         ", 
+  "                                        ################################################                                        ", 
+  "                                        ################################################                                        ", 
+  "                                       ##################################################                                       ", 
+  "                                      ####################################################                                      ", 
+  "                                      ####################################################                                      ", 
+  "                                      ####################################################                                      ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                     ######################################################                                     ", 
+  "                                      ####################################################                                      ", 
+  "                                      ####################################################                                      ", 
+  "                          #############################################################################                         ", 
+  "                   ###                 ###################################################                ####                  ", 
+  "                                 ###############################################################                                ", 
+  "                          ####          #################################################          ####                         ", 
+  "                     ###                ################################################                 ###                    ", 
+  "                   #                     ###############################################                     #                  ", 
+  "                                          #############################################                                         ", 
+  "                                           ###########################################                                          ", 
+  "                                             #######################################                                            ", 
+  "                                              !####################################                                             ", 
+  "                                   ####      !!!!###############################                                                ", 
+  "                                   #####    !!!!     #######################                                                    ", 
+  "                                    #####  !!!!         #################                                                       ", 
+  "                                   #  ####!!!!         ##################                                                       ", 
+  "                                   #  #####!!          ###################                                                      ", 
+  "                                   ##  #####          #####################                                                     ", 
+  "                                       !#####         #####################                                                     ", 
+  "                                      !!######       ######################                                                     ", 
+  "                                     !!!!################# ##### ##########                                                     ", 
+  "                                    !!!! ################# ##### ##########                                                     ", 
+  "                                   !!!!   ################ ##### ##### ####                                                     ", 
+  "                                  !!!!     ############### ##### ##### ####                                                     ", 
+  "                                 !!!!       ############## ##### ##### ####                                                     ", 
+  "                                !!!!           ##### ##### ##### ##### ####                                                     ", 
+  "                               !!!!                  ##### ##### ##### ####                                                     ", 
+  "                              !!!!                   ##### ##### ##### ####                                                     ", 
+  "                             !!!!                    ##### ##### ##### ####                                                     ", 
+  "                            !!!!                     ##### ##### ##### ####                                                     ", 
+  "                           !!!!                      ##### ##### ##### ####                                                     ", 
+  "                          !!!!                       ##### ##### ##### ####                                                     ", 
+  "                         !!!!                        ######################                                                     ", 
+  "                        !!!!                      ##############################                                                ", 
+  "                       !!!!                   #####################################                                             ", 
+  "                      !!!!                  ##########################################                                          ", 
+  "                     !!!!                 #############################################                                         ", 
+  "                    !!!!                 ################################################                                       ", 
+  "                   !!!!                 ##################################################                                      ", 
+  "                  !!!!                 ###################################################                                      ", 
+  "                 !!!!                  ###################################################                                      ", 
+  "                !!!!                   ###################################################                                      ", 
+  "               !!!!                     ##################################################                                      ", 
+  "              !!!!                      #################################################                                       ", 
+  "             !!!!                        ###############################################                                        ", 
+  "            !!!!                           ############################################                                         ", 
+  "           !!!!                              ########################################                                           ", 
+  "          !!!!                                 ###################################                                              ", 
+  "         !!!!                                      ###########################                                                  ", 
+  "        !!!!                                              ##############                                                        ", 
+  "       !!!!                                                                                                                     ", 
+  "      !!!!                                                                                                                      ", 
+  "     !!!!                                                                                                                       ", 
+  "    !!!!                                                                                                                        ", 
+  "   !!!!                                                                                                                         ", 
+  "  !!!!                                                                                                                          ", 
+  " !!!!                                                                                                                           ", 
+  "!!!!                                                                                                                            ", 
+  "!!!                                                                                                                             ", 
+  "!!                                                                                                                              ", 
+  "!                                                                                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/gdal-filter-factor-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/gdal-filter-factor-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/gdal-filter-factor-600-400-1.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/gdal-filter-factor-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/gdal-filter-factor-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/gdal-filter-factor-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-scale-500-500-1.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-scale-500-500-1.0-grid-reference.json
new file mode 100644
index 0000000..770df50
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-scale-500-500-1.0-grid-reference.json
@@ -0,0 +1,134 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                               !                             !!                                                              ", 
+  "                              !!!!                          !!!!                                                             ", 
+  "                             !!!!!!                         !!!!!                                                            ", 
+  "                            !!!!!!!!                       !!!!!!!                                                           ", 
+  "                          !!!!!!!!!!!                     !!!!!!!!!                                                          ", 
+  "                          !!!!!!!!!!!!                   !!!!!!!!!!!                                                         ", 
+  "                         !!!!!!!!!!!!!                  !!!!!!!!!!!!!                                                        ", 
+  "                        !!!!!!!!!!!!!!!                !!!!!!!!!!!!!!! !                                                     ", 
+  "                      !!!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!                                                     ", 
+  "                      !!!!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!          !!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !                       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !                        ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                                               ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                                                   !!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                                                    !!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                                                      !!!!!!!!!!!!!!!!!!                                                     ", 
+  "                                                       !!!!!!!!!!!!!!!!!                                                     ", 
+  "                                                        !!!!!!!!!!!!!!                                                       ", 
+  "                                                         !!!!!!!!!!!!                                                        ", 
+  "                                                         !!!!!!!!!!!                                                         ", 
+  "                                                         !!!!!!!!!!                                                          ", 
+  "                                                          ! !!!!!!                                                           ", 
+  "                                                             !!!!!                                                           ", 
+  "                                                            ! !!!!                                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-scale-500-500-2.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-scale-500-500-2.0-grid-reference.json
new file mode 100644
index 0000000..a0491d8
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-scale-500-500-2.0-grid-reference.json
@@ -0,0 +1,134 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                               !                              !!                                                             ", 
+  "                              !!!                            !!!!                                                            ", 
+  "                             !!!!!                          !!!!!!!!                                                         ", 
+  "                            !!!!!!!                        !!!!!!!!!                                                         ", 
+  "                           !!!!!!!!!                      !!!!!!!!!!                                                         ", 
+  "                          !!!!!!!!!!!                    !!!!!!!!!!!!!                                                       ", 
+  "                         !!!!!!!!!!!!!                  !!!!!!!!!!!!!!                                                       ", 
+  "                        !!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                      !!!!!!!!!!!!!!!!!!!          !!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!! !      !!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!! !    !!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "           ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "           ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "         ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "           ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "            ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!                      ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !                         ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !                         ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !                          ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!                           ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !                             ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!                                 ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                     ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                       ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                        ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "                                          ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                                            ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                                                  !!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                                                   !!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                                                    !!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!  !                                                  ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                                                     !!!!!!!!!!!!!!!!! !                                                     ", 
+  "                                                     !!!!!!!!!!!!!!!!! !                                                     ", 
+  "                                                      !!!!!!!!!!!!!!! !                                                      ", 
+  "                                                          !!!!!!!!! !!                                                       ", 
+  "                                                           !!!!!!!! !                                                        ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                             !!!                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-scale-patterns-500-500-1.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-scale-patterns-500-500-1.0-grid-reference.json
new file mode 100644
index 0000000..db29f66
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-scale-patterns-500-500-1.0-grid-reference.json
@@ -0,0 +1,134 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                               !!                             !!                                                             ", 
+  "                              !!!!                           !!!!                                                            ", 
+  "                             !!!!!!                         !!!!!!                                                           ", 
+  "                            !!!!!!!!                       !!!!!!!!                                                          ", 
+  "                           !!!!!!!!!!                     !!!!!!!!!!                                                         ", 
+  "                          !!!!!!!!!!!!                   !!!!!!!!!!!!                                                        ", 
+  "                         !!!!!!!!!!!!!!                 !!!!!!!!!!!!!!                                                       ", 
+  "                        !!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!!!                                                     ", 
+  "                      !!!!!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!     !!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                                                   !!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                                                    !!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                                                      !!!!!!!!!!!!!!!!!!                                                     ", 
+  "                                                       !!!!!!!!!!!!!!!!                                                      ", 
+  "                                                        !!!!!!!!!!!!!!                                                       ", 
+  "                                                         !!!!!!!!!!!!                                                        ", 
+  "                                                          !!!!!!!!!!                                                         ", 
+  "                                                           !!!!!!!!                                                          ", 
+  "                                                            !!!!!!                                                           ", 
+  "                                                             !!!!                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-scale-patterns-500-500-2.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-scale-patterns-500-500-2.0-grid-reference.json
new file mode 100644
index 0000000..bb7388c
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-scale-patterns-500-500-2.0-grid-reference.json
@@ -0,0 +1,134 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                              !!!                            !!!!                                                            ", 
+  "                             !!!!!                          !!!!!!                                                           ", 
+  "                            !!!!!!!                        !!!!!!!!                                                          ", 
+  "                           !!!!!!!!!                      !!!!!!!!!!                                                         ", 
+  "                          !!!!!!!!!!!                    !!!!!!!!!!!!                                                        ", 
+  "                         !!!!!!!!!!!!!                  !!!!!!!!!!!!!!                                                       ", 
+  "                        !!!!!!!!!!!!!!!                !!!!!!!!!!!!!!!!                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!                                                     ", 
+  "                      !!!!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!          !!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                                                  !!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                                                   !!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                                                    !!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!                                                     ", 
+  "                                                      !!!!!!!!!!!!!!!!!                                                      ", 
+  "                                                       !!!!!!!!!!!!!!!                                                       ", 
+  "                                                        !!!!!!!!!!!!!                                                        ", 
+  "                                                         !!!!!!!!!!!                                                         ", 
+  "                                                          !!!!!!!!!                                                          ", 
+  "                                                           !!!!!!!                                                           ", 
+  "                                                            !!!!!                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-translate-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-translate-200-200-1.0-grid-reference.json
new file mode 100644
index 0000000..5a7be59
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-translate-200-200-1.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-translate-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-translate-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..5a7be59
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-translate-200-200-2.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-translate-patterns-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-translate-patterns-200-200-1.0-grid-reference.json
new file mode 100644
index 0000000..5a7be59
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-translate-patterns-200-200-1.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-translate-patterns-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-translate-patterns-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..5a7be59
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-translate-patterns-200-200-2.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!         !!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-translate-patterns-svg-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-translate-patterns-svg-200-200-1.0-grid-reference.json
new file mode 100644
index 0000000..6af6173
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-translate-patterns-svg-200-200-1.0-grid-reference.json
@@ -0,0 +1,58 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/geometry-transform-translate-patterns-svg-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/geometry-transform-translate-patterns-svg-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..6af6173
--- /dev/null
+++ b/tests/visual_tests/grids/geometry-transform-translate-patterns-svg-200-200-2.0-grid-reference.json
@@ -0,0 +1,58 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-1-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-1-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..4aef59e
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-1-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                           !!      !!                                                           ", 
+  "                                                            !       !                                                           ", 
+  "                                                           !!      !!                                                           ", 
+  "                                                         !!!!!!   !!!!!                                                         ", 
+  "                                                         !!!!!!   !!!!!                                                         ", 
+  "                                                         !!!!!!   !!!!!                                                         ", 
+  "                                                         !!!!!!   !!!!!                                                         ", 
+  "                                                                                                                                ", 
+  "                                                        ! !      !!  !!                                                         ", 
+  "                                                        ! !! !!! ! !!  !                                                        ", 
+  "                                                        !!!! !!! ! !! !!                                                        ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-1-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-1-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..36c2574
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-1-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                       !!              !!                                                       ", 
+  "                                                      ! !             ! !!                                                      ", 
+  "                                                        !                !                                                      ", 
+  "                                                        !               !                                                       ", 
+  "                                                        !              !                                                        ", 
+  "                                                        !             !                                                         ", 
+  "                                                                                                                                ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                   !!!!!!!!!!      !!!!!!!!!!                                                   ", 
+  "                                                                                                                                ", 
+  "                                                  !!            !!!!!!                                                          ", 
+  "                                                 !  !             !                                                             ", 
+  "                                                !!   ! !!!! !!!!  ! !  ! ! !!!!                                                 ", 
+  "                                                !    ! !  ! !  !  !  !!! ! !  !                                                 ", 
+  "                                                !!   ! !  ! !     !  !! !! !  !                                                 ", 
+  "                                                 !  !  !  ! !  !  !  !! !  !!!!                                                 ", 
+  "                                                  !!         !!                                                                 ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-2-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-2-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..b0d4538
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-2-512-512-1.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                         !                                      ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                         #                                      ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-2-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-2-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..b0d4538
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-2-512-512-2.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                         !                                      ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                         #                                      ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-3-512-256-1.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-3-512-256-1.0-grid-reference.json
new file mode 100644
index 0000000..ef2ac14
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-3-512-256-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         !                                            #                                         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-3-512-256-2.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-3-512-256-2.0-grid-reference.json
new file mode 100644
index 0000000..ef2ac14
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-3-512-256-2.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         !                                            #                                         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-line-1-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-line-1-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..a766bbf
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-line-1-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                             !!!!!   !!!!!   !! ", 
+  "                                                                                                             !!!!!   !!!!!      ", 
+  "                                                                                                             !!!!! !!!!!!!      ", 
+  "                                                                                                             !!!!!   !!!!!      ", 
+  "                                                                                                         !!  !!!!!   !!!!!      ", 
+  "                                                                                                    !!      !!                  ", 
+  "                                                                                   !!!!!!  !!!!!!          !    !!     !!!!     ", 
+  "                                                                                   !!!!!! !!!!!!!            !  !!    !! !!     ", 
+  "                                                                                   !!!!!!  !!!!!!                               ", 
+  "                                                                                !! !!!!!!  !!!!!!                               ", 
+  "                                                                           !!     !!      !!!                                   ", 
+  "                                                         !!!!!!   !!!!!!            !!!  ! !!!!!                                ", 
+  "                                                         !!!!!!  !!!!!!           ! !!     !! !!                                ", 
+  "                                                         !!!!!!   !!!!!                                                         ", 
+  "                                                       !!!!!!!!   !!!!!                                                         ", 
+  "                                                  !!     !!     !!!                                                             ", 
+  "                                !!!!!   !!!!!!!         ! !!!!!! !!!   !                                                        ", 
+  "                                !!!!!   !!!!!           ! !! !!  ! !!  !                                                        ", 
+  "                                !!!!!   !!!!!                                                                                   ", 
+  "                              !!!!!!!   !!!!!                                                                                   ", 
+  "                         !!    !!      !!                                                                                       ", 
+  "      !!!!!!  !!!!!!!!           !!!!!    !!!!                                                                                  ", 
+  "      !!!!!!  !!!!!!              !!!!!  !!!!                                                                                   ", 
+  "      !!!!!!  !!!!!!            !  ! !                                                                                          ", 
+  "     !!!!!!!  !!!!!!                                                                                                            ", 
+  "!!    !      !!!                                                                                                                ", 
+  "     ! !!! !! !!!  !!                                                                                                           ", 
+  "     ! !!  !! !!!!! !                                                                                                           ", 
+  "      ! !  !! !  ! !                                                                                                            ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-line-1-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-line-1-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..fc9aa52
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-line-1-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                             !! ", 
+  "                                                                                                                        !!      ", 
+  "                                                                                   !!!!!!!!!!      !!!!!!!!!!      !!           ", 
+  "                                                                                   !!!!!!!!!!      !!!!!!!!!! !!                ", 
+  "                                                                                   !!!!!!!!!!      !!!!!!!!!!                   ", 
+  "                                                                                   !!!!!!!!!!      !!!!!!!!!!                   ", 
+  "                                                                                   !!!!!!!!!!  !!  !!!!!!!!!!                   ", 
+  "                                                                                   !!!!!!!!!!      !!!!!!!!!!                   ", 
+  "                                                                                   !!!!!!!!!!      !!!!!!!!!!                   ", 
+  "                                                                                !! !!!!!!!!!!      !!!!!!!!!!                   ", 
+  "                                                                           !!                                                   ", 
+  "                                                                      !!          !!            !!!!!!                          ", 
+  "                                                                 !!              !  !             !                             ", 
+  "                                                            !!                  !!   ! !!!! !!!!  ! !  ! ! !!!!                 ", 
+  "                                                       !!                       !    ! !  ! !  !  !  !!! ! !  !                 ", 
+  "                   !!!!!!!!!!      !!!!!!!!!!     !!                            !!   ! !  ! !     !  !! !! !  !                 ", 
+  "                   !!!!!!!!!!      !!!!!!!!!!!!                                  !  !  !  ! !  !  !  !! !  !!!!                 ", 
+  "                   !!!!!!!!!!      !!!!!!!!!!                                     !!         !!                                 ", 
+  "                   !!!!!!!!!!      !!!!!!!!!!                                                                                   ", 
+  "                   !!!!!!!!!! !!   !!!!!!!!!!                                                                                   ", 
+  "                   !!!!!!!!!!      !!!!!!!!!!                                                                                   ", 
+  "                   !!!!!!!!!!      !!!!!!!!!!                                                                                   ", 
+  "               !!  !!!!!!!!!!      !!!!!!!!!!                                                                                   ", 
+  "          !!                                                                                                                    ", 
+  "     !!           !!!           !!!!!!                                                                                          ", 
+  "!!               !  !!            ! !  ! !  !!                                                                                  ", 
+  "                !    ! !!!! !!!!  ! !! ! ! !  !                                                                                 ", 
+  "                !    ! !  ! !!!!  !  !!! ! !  !                                                                                 ", 
+  "                !!   ! !  ! !     !  !! !! !  !                                                                                 ", 
+  "                 !!!!  !  ! !! !  !  !! !  !!!!                                                                                 ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-line-2-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-line-2-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..d0222f1
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-line-2-512-512-1.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                        !!!!!                                      ######                                       ", 
+  "                                        !!!!!                                      ######                                       ", 
+  "                                        !!!!!                                      ######                                       ", 
+  "                                        !!!!!                                      ######                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/group-symbolizer-line-2-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/group-symbolizer-line-2-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..091a77c
--- /dev/null
+++ b/tests/visual_tests/grids/group-symbolizer-line-2-512-512-2.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                     !!!!!!!!!!!                                 ###########                                    ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/halo-comp-op-on-satellite-450-450-1.0-grid-reference.json b/tests/visual_tests/grids/halo-comp-op-on-satellite-450-450-1.0-grid-reference.json
new file mode 100644
index 0000000..3519d6d
--- /dev/null
+++ b/tests/visual_tests/grids/halo-comp-op-on-satellite-450-450-1.0-grid-reference.json
@@ -0,0 +1,121 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/halo-comp-op-on-satellite-450-450-2.0-grid-reference.json b/tests/visual_tests/grids/halo-comp-op-on-satellite-450-450-2.0-grid-reference.json
new file mode 100644
index 0000000..3519d6d
--- /dev/null
+++ b/tests/visual_tests/grids/halo-comp-op-on-satellite-450-450-2.0-grid-reference.json
@@ -0,0 +1,121 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 ", 
+  "                                                                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/harfbuzz-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/harfbuzz-800-200-1.0-grid-reference.json
new file mode 100644
index 0000000..f8888e9
--- /dev/null
+++ b/tests/visual_tests/grids/harfbuzz-800-200-1.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "6", 
+  "1", 
+  "3", 
+  "2", 
+  "4", 
+  "5", 
+  "7", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                   !                    ", 
+  "                                                                                                                                                                               !   !!                   ", 
+  "                                                                                                   #       #  #                                                             ! !!   !                    ", 
+  "                                                                                                #  #       #  #                                                             !   !! !                    ", 
+  "                                                                                                 # #       #  #         #                                                   ! !!   !                    ", 
+  "                                                                                            ##   # #       #  #              #   #                                          ! !!   !                    ", 
+  "   $ $$$        $                         %     %          %%                              ####   ##       #  #     ##  ###                                              !! !  !!  !                    ", 
+  "      $         $$                        %%% %%%% %%%%%%  %%                              ##     ##  ###  #  #    ###  # #  #   #                                 !  !   ! !   !  !                    ", 
+  "      $  $$ $ $$$$                        %%   %%  %%      %%                              #    ####### ####  #    ###########   #                                 !!!!  !! !!!!!  !                    ", 
+  "          $   $                               %   %   %                                    #     #     ##                        #                                !!    !!                              ", 
+  "                                                                                           ##  #                               ##                                !!  !!                                 ", 
+  "                                                                                            ###                               ##                               !!                                       ", 
+  "                                                                                                                                                                                                        ", 
+  "          $                   &                   %                   '                   (                   #                   )                   *                   !                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "        $$ $$$                                         %  %%%                                              ## # #                                                      !! ! !!                          ", 
+  "       $$ $$$$                     %%%   %%%%%         %%  %%%  %%                                        ##  # ###                                                   !!  !!!!!                         ", 
+  "                                    %%  % %%%   %% % % %%  %%% % %                                                                                                                                      ", 
+  "                                    %% % %%% %  %%% %% %%  % %% %%                                                                                                                                      ", 
+  "                                                %                                                                                                                                                       ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/harfbuzz-800-200-2.0-grid-reference.json b/tests/visual_tests/grids/harfbuzz-800-200-2.0-grid-reference.json
new file mode 100644
index 0000000..887ca76
--- /dev/null
+++ b/tests/visual_tests/grids/harfbuzz-800-200-2.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "1", 
+  "3", 
+  "2", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                    !      !            ", 
+  "                                                                                                                                                                                    !      !!           ", 
+  "                                                                                                                                                                                           !!!          ", 
+  "                                                                                                                                                                                  !! !                  ", 
+  "                                                                                                                                                                              !!        !!! !!          ", 
+  "                                                                                                                                                                              !!      !!!!  !!          ", 
+  "                                                                                                                                                                              !!   !!!!!    !!          ", 
+  "                                                                                                                                                                              !!   !!!      !!          ", 
+  "                                                                                                                                                                              !!  !!        !!          ", 
+  "                                                                                                                                                                              !!   !!       !!          ", 
+  "                                                                                                                                                                       !!!    !!   !!!      !!          ", 
+  " ####                 #      $    $                                 $$$                                                                                                 !!!   !!    !!!     !!          ", 
+  "   #                  #      $                $                     $                                                                                      !!    !!      !!   !!     !!!    !!          ", 
+  "   #                  #      $    $ $$$$ $$$$ $$$$  $ $$$ $$$  $   $$$$                                                                                    !!    !!      !!   !!      !!    !!          ", 
+  "  ##        ###       #      $    $ $  $   $$ $  $  $ $  $  $       $ $                                                                                    !!    !!      !!   !!      !!    !!          ", 
+  "  #     ###   ##  ### # #    $    $ $  $ $  $ $  $  $ $  $          $ $                                                                                    !!!  !!!      !!   !!!    !!!    !!          ", 
+  "  #     ###  ###### # # #    $    $ $ $$ $ $$ $  $  $ $  $$    $    $ $                                                                                    !!!!!!!   !!!!!!    !!!!!!!!     !!          ", 
+  "          #       ##                   $  $       $        $                                                                                               !!        !!!!                               ", 
+  "       ###                          $$$$                                                                                                                  !!                                            ", 
+  "                                                                                                                                                        !!!     ! !!                                    ", 
+  "                                                                                                                                                     !!!!!                                              ", 
+  "                                                                                                                                                     !!!                                                ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          #                   %                   $                   &                   '                   (                   )                   *                   !                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "     ## ##  #  #           $             $                  $                                              (  (  ((  (                                                 !  !   !  !                      ", 
+  "    ### #   # # #          $             $                  $     $$$$$         $                     (((( (     (   (                                            !!!! !     !! !                       ", 
+  "          # # ###  $$$ $$  $ $  $ $$$  $$$                  $       $  $$$ $  $$$$                     ((  (      ( ((                                             !!  !     !! ! !                     ", 
+  "    #    #  # # #  $  $  $ $ $$$ $  $ $  $        $$        $       $ $  $  $$  $                      ((  (      (  (                                             !!  !      ! ! !                     ", 
+  "                   $  $  $ $  $  $$$$ $  $    $$    $$  $$  $ $     $ $$$$  $$  $                                                                                                                       ", 
+  "                   $  $  $ $ $ $ $$   $  $    $ $  $$$ $$$  $ $     $ $    $$$  $                                                                                                                       ", 
+  "                   $  $  $ $ $  $ $$$  $$$     $$$$  $$$$$  $$$     $  $$$ $  $ $$                                                                                                                      ", 
+  "                                               $   $                                                                                                                                                    ", 
+  "                                             $$                                                                                                                                                         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/hb-fontsets-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/hb-fontsets-800-200-1.0-grid-reference.json
new file mode 100644
index 0000000..137ed78
--- /dev/null
+++ b/tests/visual_tests/grids/hb-fontsets-800-200-1.0-grid-reference.json
@@ -0,0 +1,62 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "6", 
+  "8", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                     ! !                                                                              # #                                    $ $                                        ", 
+  "                                    ! !!                                                                             # ##                                   $ $$                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                            !   !!    !!                  %%%%%    %%%%% %%%% %%%%%%%%%%            #####    ##   #     #                           $    $    $$                                        ", 
+  "                      !    !    ! !   !!                  %%  %    %   %      %   %%   %            #        ##  # #   ##                      $     $  $ $   $$                                        ", 
+  "                     ! !    !   !!!!  !                   %%%%%  % %   %      %   %%   %           ##     #  #   ####   #                       $   $   $$$$  $$                                        ", 
+  "                     ! !    !   !  !  !                   %%  %    %   %      %   %%   %           #         #   #  #   #                       $   $   $  $  $$                                        ", 
+  "                     !!!    !   !  !  !                   %%  %    %   %      %   %%   %           ##        #   ## #   #                       $   $   $$ $  $$                                        ", 
+  "                    !   !   !   !  !  !                   %% %%  % %   %      %   %%   %            ## ## #  #   ## #   #                      $    $   $$ $  $                                         ", 
+  "                            !                                      %   %      %   %%   %              ##     #                                      $                                                   ", 
+  "                            !      !! !                            %%%%% %%%% %%%%%%%%%%                     #       # #                            $       $ $                                         ", 
+  "                            !      !! !                                                                      #       #                              $       $ $                                         ", 
+  "                            !      !! !                                                                      #       #                              $       $ $                                         ", 
+  "                            !   !                                                                            ##  #                                  $   $                                               ", 
+  "                              !                                                                                #                                      $                                                 ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                    !!      !!! !                                                                                                        $   $$    $$       $$ $$                                       ", 
+  "                    ! !  !! !!  ! ! !!!!                    %%%%%%%  %%%%% % %%%%                  ########   ############               $$$ $ $$  $  $ $$ $  $$$ $                                     ", 
+  "                                   !                        %%%%%  % %%% % % %%%%                   ######   # #### # # ##                                                                              ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/hb-fontsets-800-200-2.0-grid-reference.json b/tests/visual_tests/grids/hb-fontsets-800-200-2.0-grid-reference.json
new file mode 100644
index 0000000..83ff5b3
--- /dev/null
+++ b/tests/visual_tests/grids/hb-fontsets-800-200-2.0-grid-reference.json
@@ -0,0 +1,60 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "6"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                          !!!! !!                                                                           ##### #                                                                     ", 
+  "                                         !!! !!!!                                                                           ## ####                                                                     ", 
+  "                                         !!!!!!!!                                                                           #######                                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                            ######                                                                                                      ", 
+  "                          !!       !!          !                                          #########          #       ###         ##                                                                     ", 
+  "              !!         !!!!     !!!!!       !!!!                                       ###      #         ####    ######      ####                                                                    ", 
+  "             !!!         ! !     !!  !!      !! !                                        ##                ## #     ## ##       # #                                                                     ", 
+  "             !!!!        !!       !!!!!      !!                                          ##           ##   ##        ####       ##                                                                      ", 
+  "             ! !!         !!     !!!!!!!!      !                                        ###           ##     #      ########     ##                                                                     ", 
+  "            !!  !    !    !!     !!     !      !                                        ##                   #     ##     ##     ##                                                                     ", 
+  "            !!  !!   !    !!     !!     !      !                                        ##                   #     ##     ##     ##                                                                     ", 
+  "            !!!!!!        !!     !!     !      !                                        ###                  #     ##     ##     ##                                                                     ", 
+  "           !!!!!!!        !!     !!!    !      !                                         ##                  #     ####   ##     ##                                                                     ", 
+  "           !!    !!       !!     !! !   !      !                                         ##                  #     ## #   ##     ##                                                                     ", 
+  "           !     !!       !!     !!!    !!    !!                                          ###    ##   ##     #     ####   ##     ##                                                                     ", 
+  "          !!     !!  !    !!     !!!    !!!!!!!!                                           ########   ##     #     ###     #######                                                                      ", 
+  "                          !!                                                                 ####            #                                                                                          ", 
+  "                          !!              !!!!!                                                              #              #####                                                                       ", 
+  "                          !!             !!   !!                                                             #             ##   ##                                                                      ", 
+  "                          !!             !    !!                                                             #             ##    #                                                                      ", 
+  "                          !!             !!   !!                                                             #             ###   #                                                                      ", 
+  "                          !!             !!   !!                                                             #             ###   #                                                                      ", 
+  "                          !!             !!   !!                                                             #             ##    #                                                                      ", 
+  "                          !!     !!                                                                          #      #                                                                                   ", 
+  "                          !!     !!                                                                          #      #                                                                                   ", 
+  "                          !!!!!!!!                                                                           ########                                                                                   ", 
+  "                             !!!                                                                               ####                                                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          ! !!             !! !!  !!         !                                                                                                                                                          ", 
+  "          !! !! !!! !! !! !       !  !! !!  !! !!!!                                     ##        ##   #    ##    #     #    #      #                                                                   ", 
+  "          !! !   ! !!!!!  !    !  !! !!  !  !! !!!                                        ## #####  ## # #    ### ### #   #  ## ### #                                                                   ", 
+  "          ! !!   ! !!! !   !! !!  ! !!! !! !!! !!!                                        #   #    #####      ####### ##  #  #    # #                                                                   ", 
+  "                                        !!                                                ##  # ###### # #  ## ## ###  # ##  #   ####                                                                   ", 
+  "                                                                                                                 #                                                                                      ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/image-filters-galore-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/image-filters-galore-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..318d315
--- /dev/null
+++ b/tests/visual_tests/grids/image-filters-galore-512-512-1.0-grid-reference.json
@@ -0,0 +1,290 @@
+{
+ "keys": [
+  "", 
+  "28", 
+  "66", 
+  "119", 
+  "135", 
+  "168", 
+  "78", 
+  "151", 
+  "53", 
+  "58", 
+  "99", 
+  "51", 
+  "75", 
+  "44", 
+  "128", 
+  "97", 
+  "20", 
+  "118", 
+  "42", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "50", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "76", 
+  "157", 
+  "88", 
+  "100", 
+  "46", 
+  "161", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "94", 
+  "92", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "18", 
+  "110", 
+  "25", 
+  "106", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "38", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "81", 
+  "71", 
+  "45", 
+  "129", 
+  "174", 
+  "156", 
+  "126", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "36", 
+  "170", 
+  "160", 
+  "63", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "37", 
+  "124", 
+  "68", 
+  "143", 
+  "32", 
+  "27", 
+  "95", 
+  "148", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "142", 
+  "176", 
+  "159", 
+  "22", 
+  "111", 
+  "109", 
+  "102", 
+  "9", 
+  "172", 
+  "113", 
+  "177", 
+  "54", 
+  "30", 
+  "132", 
+  "26", 
+  "114", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "8", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                  !!!!!!!!!     #########                                                                       ", 
+  "                              !!!!!!!!!!####################        $ $$$$      %%%             %%%%                            ", 
+  "                     !! !! !!!!!!!!!!!####################          $$$$$$                        %%%%%                         ", 
+  "                    !!!!!!! !!!!!!!!    ##################                          %%%%%      %%%%%%%%%%        %%%%%          ", 
+  "%                  !!!!!!!! !!!!!!!!!!!     #############                         %%%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "%    &&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!    ############             $$$$$%%%     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%% &&&&&&&&&!!!!!!!!!!!!!!!!!!!!!! !!!!!!  ########   ''''        $$((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "% %&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!   #####      ''''       $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&&&&!!!!!!!!!!!!!!!!!!  ! !!!!!!    ####                $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ", 
+  "      &&&&&    &&!!!!!!!!!!!!!!!    !!!!!!!                   **  $$((( +,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     &&&         &!!!!!!!!!!!!!!!!! !!!!!!!!                 -**   ..(/%0+1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %%%%     ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!                --**2233////11%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%%   %%%      ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!                **6673388/9999999%%%444444444444%%%:%::%%%%%%555%%%%%%            ", 
+  "                    &&&&&&&&&&&&&&!!!!!&!!!!!!                66666;<=>>???999%%%%44444444444445:::::::::::55555%%%%            ", 
+  "                    &&&&&&&&&&&&&&&!!&&&&!!                  @@6666<<<ABB?? 99%%%%44CC444444455555::::::5555555%% DD            ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     E@@@@ <<<<FGHIIIIIIJ% KCKCCCCLLL55555555:5555555MM   DD            ", 
+  "                    &&&&&&&&&&&&&&&&&&                       E@@@  <<<<HHIIIIIIINN KKKKCCOO55555555555555555MMP  DD             ", 
+  "                     &&&&&&&&&&&&&&&&&                       EQQRRRSS<  HHIITIUVVNNNNNKWWWXX5555555555555555 PPDDDD             ", 
+  "                      &&&&&&&&&&&&&&&                        QQQRRRSSY YY   ZUVVVNNNNNWWWXX[[555555555555555  DDD               ", 
+  "                       ]]]]&&&&&&&&&                        QQQRRRRRYYYYY^^^^___V`NNNNWWXXX[[a55555555555555                    ", 
+  "                       ]]]]]]&     &b                      QQcRRRRRRYYYYY^^^^______NNNNXXX[[[[aad[ee55555555                    ", 
+  "                        ]]]]]]     &b                     QQccfRRRRRYYYYY^^^^______ghNXXXX[[[[[[i[e55555555j                    ", 
+  "       &&                 ]]]]  ]]kkkk                    llccfffRRmmmnnYooooo______hh   [[[[[[[ieeepqq555 j                    ", 
+  "         &                 ]]]]]]]  rrstu                 ccccffffmmmmnnnooooo ___vhh     [[[[[  eewpq 5   x                    ", 
+  "                            ]]]]yzz                       {{cccfffmmmnnnnooooo|vvvvv      [[[[   eewwwq    x                    ", 
+  "                               y}~~                       {{fff\u007fmm\u0080\u0080\u0080nnnooooo\u0081\u0081|vv         [[      ww\u0082qq   xx                   ", 
+  "                                 ~~  \u0083\u0084\u0084\u0084\u0084\u0085               \u0086\u0087\u0087ff\u0088\u0089\u008a\u0080\u0080\u0080\u008bnno\u008co\u008c\u008c\u0081\u0081\u008d\u008d\u008d\u008e        [[      w qq   xxx                   ", 
+  "                                  \u008f\u0090\u0090\u0083\u0084\u0084\u0084\u0084\u0084\u0091               \u0092\u0092\u0087\u0093\u0088\u0089\u0080\u0080\u0080\u0080\u008bn\u0094\u0094\u008c\u008c\u008c\u008c\u0081\u0081\u0081\u0081\u008e\u008e        [\u0095\u0095     ww      xxx                  ", 
+  "                                    \u0083\u0083\u0083\u0083\u0084\u0084\u0084\u0091\u00966              \u0097\u0097\u0093\u0088\u0088 \u0080\u0080\u008b\u008b\u0094\u0098\u0098\u0098\u008c\u008c\u008c\u0081\u0081\u0081\u008e\u008e                \u0099\u0099\u009a\u009a   \u009a\u009a                     ", 
+  "                                    \u0083\u0083\u0083\u0083\u0084\u0084\u009b\u0091\u00966\u009b                    \u009c\u009c\u009d\u009d\u0098\u0098\u0098\u0098\u009e\u009e\u009f\u009f\u008e\u008e                  \u0099\u009a\u009a \u009a\u009a\u0099\u0099\u0099\u0099\u0099                  ", 
+  "                                   \u00a0\u00a0\u00a1\u0083\u0083\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b                  \u00a2\u00a2\u00a2\u009d\u0098\u0098\u0098\u0098\u009e\u009e\u009f\u009f\u008e                   \u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099 \u0099              ", 
+  "                                   \u00a1\u00a1\u00a1\u00a1\u00a1\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b                 \u00a2\u009d\u0098\u0098\u0098\u0098\u0098\u00a3\u00a3\u00a3\u009f                     \u0099\u0099 \u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u00a4\u00a4  \u00a4         ", 
+  "                                   \u00a1\u00a1\u00a1\u00a1\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b                \u0098\u00a5\u0098\u0098\u0098\u0098\u0098\u00a3\u00a3\u00a3\u00a3                      \u0099\u0099\u0099\u0099       \u0099\u0099\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a6       ", 
+  "                                    \u00a1\u00a1\u00a1\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b                 \u00a5\u00a5\u00a5\u0098\u0098\u00a7\u00a7\u00a3\u00a3\u00a3                         \u0099\u0099\u0099\u0099\u0099\u00a8   \u0099\u00a4\u00a4\u00a4\u00a4   \u00a6      ", 
+  "                                    \u00a1\u00a1\u00a1\u00a1\u00a9\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b                  \u00a5\u00a5\u00a5\u00a5\u00a7\u00a7\u00a7\u00aa\u00a3\u00ab  \u00ac                            \u00ad\u00ad\u00ad \u00ad\u00ad            ", 
+  "                                     \u00a1\u00a1\u00a1\u00a9\u00a9\u00a9\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b                 \u00a5\u00a5\u00a5\u00a5\u00a7\u00a7\u00a7\u00a7\u00aa\u00ab\u00ab \u00ac\u00ac\u00ac                         \u00ad\u00ad\u00ad\u00ad\u00ad \u00ad\u00ad       \u00ae    ", 
+  "                                      \u00a1\u00a1\u00a9\u00a9\u00a9\u00a9\u009b\u009b\u009b\u009b\u009b\u009b\u009b                 \u00af\u00af\u00af\u00af\u00a7\u00b0\u00b0\u00b0\u00ab\u00ab\u00ab \u00ac\u00ac                         \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad          \u00b1", 
+  "                                       \u00b2\u00a9\u00a9\u00b3\u00b3\u009b\u009b\u009b\u009b\u009b\u009b\u009b                  \u00af\u00af\u00af\u00b4\u00b4\u00b0\u00b0\u00ab   \u00ac\u00ac                       \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad    \u00b5\u00b5    ", 
+  "                                       \u00b2\u00b2\u00b6\u00b3\u00b3\u00b3\u009b\u009b\u009b\u009b\u009b                   \u00af\u00af\u00af\u00b4\u00b4\u00b7\u00b7\u00ab  \u00ac\u00ac\u00ac                      \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad    \u00b5    ", 
+  "                                       \u00b2\u00b6\u00b6\u00b6\u00b6\u00b3\u009b\u009b\u009b                     \u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00ab   \u00ac                       \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad         ", 
+  "                                       \u00b2\u00b6\u00b6\u00b6\u00b6\u009b\u009b\u009b                       \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7                             \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad         ", 
+  "                                       \u00b6\u00b6\u00b6\u00b6\u00b6\u00b8\u009b\u009b                       \u00b7\u00b7\u00b7\u00b7\u00b7                              \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad         ", 
+  "                                      \u00b2\u00b2\u00b6\u00b6\u00b6\u00b6\u00b8\u00b8                         \u00b7\u00b7\u00b7                               \u00ad\u00ad\u00ad\u00ad   \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad      \u00b9\u00b9 ", 
+  "                                      \u00b2\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                                                                     \u00ad\u00ad\u00ad\u00ad        \u00b9\u00b9", 
+  "                                      \u00b2\u00b6\u00b6\u00b6\u00b6                                                                         \u00ad        \u00b9\u00b9\u00b9", 
+  "                                      \u00b2\u00b6\u00b6\u00b6                                                                          \u00ad       \u00b9\u00b9\u00b9 ", 
+  "                                     \u00b2\u00b2\u00b6\u00b6                                                                                  \u00b9\u00b9\u00b9  ", 
+  "                                     \u00b2\u00b2\u00b6\u00b6                                               \u00ba\u00ba                                      ", 
+  "                                     \u00b2\u00b2\u00b6  \u00bb\u00bb                                                                                    ", 
+  "                                      \u00b2\u00b2\u00b6\u00b6                                                                                      ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                           \u00bc                                                                                    ", 
+  "                                         \u00bc\u00bc                                       \u00bc\u00bc\u00bc          \u00bc    \u00bc\u00bc  \u00bc      \u00bc\u00bc               ", 
+  "                                       \u00bc\u00bc\u00bc                                  \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc   \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc        ", 
+  "                            \u00bc\u00bc       \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc                 \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00b [...]
+  "               \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc               \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u [...]
+  "        \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc            \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\ [...]
+  "      \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc \u00bc\u00bc\u00bc\u00bc \u00bc\u00bc\u00bc\u00bc  \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00b [...]
+  "         \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc [...]
+  "\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u0 [...]
+  "\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u0 [...]
+  "\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/image-filters-galore-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/image-filters-galore-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..1ff0dfc
--- /dev/null
+++ b/tests/visual_tests/grids/image-filters-galore-512-512-2.0-grid-reference.json
@@ -0,0 +1,290 @@
+{
+ "keys": [
+  "", 
+  "28", 
+  "66", 
+  "119", 
+  "135", 
+  "168", 
+  "151", 
+  "78", 
+  "53", 
+  "58", 
+  "99", 
+  "51", 
+  "75", 
+  "44", 
+  "97", 
+  "20", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "166", 
+  "108", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "50", 
+  "150", 
+  "19", 
+  "147", 
+  "169", 
+  "83", 
+  "131", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "46", 
+  "161", 
+  "76", 
+  "157", 
+  "100", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "48", 
+  "173", 
+  "74", 
+  "103", 
+  "138", 
+  "90", 
+  "120", 
+  "18", 
+  "110", 
+  "25", 
+  "106", 
+  "38", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "163", 
+  "137", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "81", 
+  "71", 
+  "45", 
+  "129", 
+  "174", 
+  "156", 
+  "126", 
+  "67", 
+  "69", 
+  "141", 
+  "49", 
+  "144", 
+  "117", 
+  "36", 
+  "170", 
+  "15", 
+  "116", 
+  "52", 
+  "87", 
+  "124", 
+  "160", 
+  "63", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "95", 
+  "68", 
+  "148", 
+  "143", 
+  "32", 
+  "27", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "47", 
+  "23", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "125", 
+  "57", 
+  "164", 
+  "127", 
+  "2", 
+  "142", 
+  "176", 
+  "159", 
+  "22", 
+  "111", 
+  "109", 
+  "102", 
+  "9", 
+  "54", 
+  "172", 
+  "113", 
+  "177", 
+  "30", 
+  "132", 
+  "26", 
+  "114", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "8", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                !!!!!!!!!!################                                                                      ", 
+  "                          !! !!!!!!!!!!!#####################       $$$$$$$     %%%             %%%%%                           ", 
+  "                     !!!!!!!!!!!!!!!!!####################          $$$$$$            %%%        %%%%%%%%                       ", 
+  "                   !!!!!!!!!!!!!!!!!!  ###################            $            %%%%%%    %%%%%%%%%%%%%% %%  %%%%%%%         ", 
+  "%%     &&&&        !!!!!!!!!!!!!!!!!!!!!    ##############               $$       %%%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%      %", 
+  "%%   &&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!   #############            $'$$$$%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ##########(((((        $$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ######    (((((      $$$''')))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "    &&&&&&&&&&!!!!!!!!!!!!!!!!!!  !!!!!!!!    ####                $$$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "     &&&&&&& &&&&!!!!!!!!!!!!!!!!   !!!!!!!     #             **  $$'''++,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    ", 
+  "     &&&&&       &!!!!!!!!!!!!!!!!!!!!!!!!!!!                -***  ..''%/+0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%     ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ---**1122333300%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%%%   %%%      ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!                **667228839999999%%%444444444444%%%:%::%%%%%%555%%%%%%    %       ", 
+  "                   &&&&&&&&&&&&&&&!!!!!&!!!!!!                66666;<=>>???999%%%%44444444444445:::::::::::55555%%%%            ", 
+  "                    &&&&&&&&&&&&&&&!!&&&&!!                  @@6666<<ABCC??999%%%%44DD444444455555::::::5555555%%%EEE           ", 
+  "                    &&&&&&&&&&&&&&&&&&&&                     F@@@@6<<<<GHIJJJJJJK%LLDLDDDDMMM55555555:5555555NN% EEE            ", 
+  "                    &&&&&&&&&&&&&&&&&&&                     FF@@@ O<P<<IIJJJJJJJQQQLLLLDDRR55555555555555555NNN  EE             ", 
+  "                    &&&&&&&&&&&&&&&&&&                       FSSOOOPP<  IIJJTJUVVQQQQQLWWWXX5555555555555555 YYEEEE             ", 
+  "                     &&&&&&&&&&&&&&&&                       SSSSOOOPPZ ZZZ []UVVVQQQQQWWWXX^^555555555555555 YEEEE              ", 
+  "                      _____&&&&&&&&&                        SSSOOOOOZZZZZ[[[[```VaQQQQWWXXX^^b55555555555555  EE                ", 
+  "                       ______&&   &&&c                     SSdOOOOOOZZZZZ[[[[``````QQQQXXX^^^^bbe^ff55555555                    ", 
+  "                        ______    g&c                     SSddhOOOOOZZZZZ[[[[``````ijjXXXX^^^^^^k^f55555555l                    ", 
+  "       &&                _____  __gggg                    mmddhhhOOnnnooZppppp``````jj  ^^^^^^^^kfffqrr555 l                    ", 
+  "        &&                ________  sstuvv                ddddhhhhnnnnooopppppp```wjjj    ^^^^^^ ffxqrr5   y                    ", 
+  "                            ____z{{ s                     ||dddhhhnnnooooppppp}wwwwwj     ^^^^   ffxxxrr  yyy                   ", 
+  "                               _~\u007f\u007f   \u0080\u0081                  ||hhh\u0082nn\u0083\u0083\u0083oooppppp\u0084\u0084}www       ^^^^     xx\u0085rr   yyy                  ", 
+  "                                 \u007f\u007f\u0086\u0086\u0080\u0081\u0081\u0081\u0081\u0087               \u0088\u0089\u0089hh\u008a\u008b\u008c\u0083\u0083\u0083\u008doop\u008ep\u008e\u008e\u0084\u0084\u008f\u008f\u008f\u0090        ^^\u0091     x\u0085rrr  yyyy                  ", 
+  "                                  \u0086\u0086\u0086\u0080\u0081\u0081\u0081\u0081\u0081\u0092\u0093              \u0094\u0094\u0089\u0095\u008a\u008b\u0083\u0083\u0083\u0083\u008do\u0096\u0096\u008e\u008e\u008e\u008e\u0084\u0084\u0084\u0084\u0090\u0090        ^\u0091\u0091     xxr   yyyyy                  ", 
+  "                                    \u0080\u0080\u0080\u0080\u0081\u0081\u0081\u0092\u009366             \u0097\u0097\u0095\u008a\u008b\u008b\u0083\u0083\u008d\u008d\u0096\u0098\u0098\u0098\u008e\u008e\u008e\u0084\u0084\u0084\u0090\u0090          \u0091\u0091    \u0099\u009a\u009a\u009a  \u009a\u009a\u009a yy                  ", 
+  "                                   \u009b\u0080\u0080\u0080\u0080\u0081\u0081\u009c\u0092\u00936\u009c                    \u009d\u009d\u009e\u009e\u0098\u0098\u0098\u0098\u009f\u009f\u00a0\u00a0\u0090\u0090\u0090                \u0099\u0099\u009a\u009a \u009a\u009a\u0099\u0099\u0099\u0099\u0099\u0099                 ", 
+  "                                   \u009b\u009b\u00a1\u0080\u0080\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c                  \u00a2\u00a2\u00a2\u009e\u0098\u0098\u0098\u0098\u009f\u009f\u00a0\u00a0\u0090                   \u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099              ", 
+  "                                   \u00a1\u00a1\u00a1\u00a1\u00a1\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c               \u00a2\u00a2\u009e\u0098\u0098\u0098\u0098\u0098\u00a3\u00a3\u00a3\u00a0                     \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4        ", 
+  "                                   \u00a1\u00a1\u00a1\u00a1\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c               \u009e\u00a5\u0098\u0098\u0098\u0098\u0098\u00a3\u00a3\u00a3\u00a3                      \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099  \u0099\u0099\u0099\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a6       ", 
+  "                                    \u00a1\u00a1\u00a1\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c               \u00a5\u00a5\u00a5\u00a5\u0098\u0098\u00a7\u00a7\u00a3\u00a3\u00a3                       \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u00a8   \u0099\u00a4\u00a4\u00a4\u00a4\u00a4 \u00a6\u00a6      ", 
+  "                                    \u00a1\u00a1\u00a1\u00a1\u00a9\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c                \u00a5\u00a5\u00a5\u00a5\u00a5\u00a7\u00a7\u00a7\u00aa\u00a3\u00ab  \u00ac\u00ac                         \u0099 \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad \u00a4   \u00a6\u00a6     ", 
+  "\u00ae                                    \u00a1\u00a1\u00a1\u00a9\u00a9\u00a9\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c                 \u00a5\u00a5\u00a5\u00a5\u00a7\u00a7\u00a7\u00a7\u00aa\u00ab\u00ab \u00ac\u00ac\u00ac                         \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad      \u00af    ", 
+  "\u00ae                                     \u00a1\u00a1\u00a9\u00a9\u00a9\u00a9\u009c\u009c\u009c\u009c\u009c\u009c\u009c                 \u00b0\u00b0\u00b0\u00b0\u00a7\u00b1\u00b1\u00b1\u00ab\u00ab\u00ab\u00ac\u00ac\u00ac\u00ac                        \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad      \u00af\u00af  \u00ae", 
+  "                                       \u00b2\u00a9\u00a9\u00b3\u00b3\u009c\u009c\u009c\u009c\u009c\u009c\u009c                 \u00b0\u00b0\u00b0\u00b0\u00b4\u00b4\u00b1\u00b1\u00ab\u00ab \u00ac\u00ac\u00ac                       \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad    \u00b5\u00b5    ", 
+  "                                       \u00b2\u00b2\u00b6\u00b3\u00b3\u00b3\u009c\u009c\u009c\u009c\u009c                   \u00b0\u00b0\u00b0\u00b4\u00b4\u00b7\u00b7\u00ab\u00ab \u00ac\u00ac\u00ac                      \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad    \u00b5    ", 
+  "                                       \u00b2\u00b6\u00b6\u00b6\u00b6\u00b3\u009c\u009c\u009c                     \u00b0\u00b0\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7  \u00ac\u00ac\u00ac                      \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad         ", 
+  "                                      \u00b2\u00b2\u00b6\u00b6\u00b6\u00b6\u009c\u009c\u009c\u009c                     \u00b0\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7                           \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad        ", 
+  "                                      \u00b2\u00b6\u00b6\u00b6\u00b6\u00b6\u00b8\u009c\u009c                       \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7                             \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad         ", 
+  "                                      \u00b2\u00b2\u00b6\u00b6\u00b6\u00b6\u00b8\u00b8                        \u00b7\u00b7\u00b7\u00b7\u00b7                              \u00ad\u00ad\u00ad\u00ad   \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad      \u00b9\u00b9 ", 
+  "                                      \u00b2\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                                                                    \u00ad\u00ad\u00ad\u00ad\u00ad        \u00b9\u00b9", 
+  "                                      \u00b2\u00b6\u00b6\u00b6\u00b6\u00b6                                                                       \u00ad\u00ad\u00ad       \u00b9\u00b9\u00b9", 
+  "                                     \u00b2\u00b2\u00b6\u00b6\u00b6                                                                         \u00ad\u00ad\u00ad      \u00b9\u00b9\u00b9 ", 
+  "                                     \u00b2\u00b2\u00b6\u00b6\u00b6                                                                                 \u00b9\u00b9\u00b9  ", 
+  "                                     \u00b2\u00b2\u00b6\u00b6\u00b6                                              \u00ba\u00ba                                      ", 
+  "                                     \u00b2\u00b2\u00b6\u00b2 \u00bb\u00bb                                            \u00ba\u00ba                                      ", 
+  "                                     \u00b2\u00b2\u00b2\u00b6\u00b6                                                                                      ", 
+  "                                       \u00b2\u00b2                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                          \u00bc\u00bc\u00bc                                                                                   ", 
+  "                                        \u00bc\u00bc\u00bc\u00bc                                      \u00bc\u00bc\u00bc         \u00bc\u00bc   \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc           ", 
+  "                                      \u00bc\u00bc\u00bc\u00bc\u00bc                           \u00bc\u00bc   \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc       ", 
+  "                           \u00bc\u00bc\u00bc\u00bc \u00bc    \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc                \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u0 [...]
+  "            \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc              \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\ [...]
+  "      \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc     \u00bc\u00bc  \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u [...]
+  "      \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc \u00bc\u00bc\u00bc\u00bc\u00bc \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\ [...]
+  "   \u00bc    \u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u [...]
+  "\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u0 [...]
+  "\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u0 [...]
+  "\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u00bc\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/image-filters-multi-blur-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/image-filters-multi-blur-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..ba44756
--- /dev/null
+++ b/tests/visual_tests/grids/image-filters-multi-blur-512-512-1.0-grid-reference.json
@@ -0,0 +1,289 @@
+{
+ "keys": [
+  "", 
+  "28", 
+  "66", 
+  "119", 
+  "135", 
+  "168", 
+  "151", 
+  "78", 
+  "53", 
+  "58", 
+  "75", 
+  "166", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "108", 
+  "131", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "50", 
+  "149", 
+  "19", 
+  "147", 
+  "162", 
+  "169", 
+  "83", 
+  "161", 
+  "3", 
+  "104", 
+  "65", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "100", 
+  "76", 
+  "157", 
+  "46", 
+  "173", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "137", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "163", 
+  "18", 
+  "110", 
+  "25", 
+  "106", 
+  "81", 
+  "129", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "126", 
+  "144", 
+  "38", 
+  "71", 
+  "141", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "45", 
+  "170", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "124", 
+  "160", 
+  "49", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "95", 
+  "87", 
+  "36", 
+  "148", 
+  "143", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "68", 
+  "32", 
+  "27", 
+  "73", 
+  "23", 
+  "93", 
+  "34", 
+  "112", 
+  "125", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "127", 
+  "47", 
+  "57", 
+  "164", 
+  "142", 
+  "159", 
+  "2", 
+  "176", 
+  "102", 
+  "54", 
+  "172", 
+  "22", 
+  "113", 
+  "111", 
+  "109", 
+  "9", 
+  "114", 
+  "177", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "8", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                !!!!!!!!!!################                                                                      ", 
+  "                          !! !!!!!!!!!!#######################     $$$$$$$$    %%%%%           %%%%%%%                          ", 
+  "                    !!!!!!!!!!!!!!!!###########################   $$$$$$$$$$  %%%%%%% %%%%    %%%%%%%%%%%                       ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!#######################  $$$$$$$$$$$$ %%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% %%%%%%%%%        ", 
+  "%%     &&&&       !!!!!!!!!!!!!!!!!!!!########################    $$$$$$$$$$$ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %", 
+  "%%%%&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!##########################    $$$$'''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%&&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!###################((((      $'''''''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%&&&&&&&&&&&&!&!!!!!!!!!!!!!!!!!!!!!!!!!###############((((((    $''''$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########(((((((((  $$'''$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&%&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########(((((((((**$$'$$''')))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###########((((((((+*$$$$$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&&&&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!########   ((((((+*+$$$$'''',-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "   &&&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!######       ++*+**$$'..',,/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "   &&&&&&&&& &&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#         ++*++**$233444411%%%%%%%%%%%555555%%%%%%%%%%%%%%%66%%%%%%%%%%%%%%%%%  ", 
+  "    &&&&&&&    !&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ++++*277833994,,,,,,,%%%555555555555%%%:%::%%%%%%666%%%%%%%%%%%%%%    ", 
+  "     &          !&&&&&&&&&&&&&&&&&!!!!!&!!&!!!!!           ;;;;7777<=>??@@@,,,%%%%55555555555556:::::::::::66666%%%%%%%%%%%     ", 
+  "                 !&&&&&&&&&&&&&&&&&!!&&&&!&!!!!!          A;;;;;777==BCDD@@,,,%%%E55FF555555566666::::::6666666%%%%G%%G%%       ", 
+  "                 &&&&&&&&&&&&&&&&&&&&&&&&&&!!!!           ;;A;AAAAH====IJKEEEE,EL%FMFMFFFFNNN66666666:6666666OO%%%G%%GG         ", 
+  "                  &&&&&&&&&&&&&&&&&&&&&&&&!!              ;;P;AAAHH=HH=EK,EEEEEEQQFMMMMFFRR666666666666666O6OO%%%%GGGG          ", 
+  "                  &&&&&&&&&&&&&&&&&&&&&&&                  ;;;P;SSSHHHHEEEETUEVWWQQQQQMXXXYY666666666666666OOZZ%GGGGG           ", 
+  "                   &&&&&&&&&&&&&&&&&&&&&                  P[[PPPSSSHHHH]]ETTEVWWWQQQQQXXXYY^^666666666666666OOGGZGGGG           ", 
+  "                   &&&&____&&&&&&&&&&&&                  P[[[PPSSSSS]]]]]````aaaWbQQQQXXYYY^^c66666666666666ddZZGGGG            ", 
+  "      &&&&           &&______&&&&&&&&&&e                P[[PPfSSSSSS]]]]]````aaaaaaQQQQYYY^^^^ccg^hh6666666dddZGGG              ", 
+  "     &&&&&&          ____&____&&&&&&e&ijjjj             [[[PffkSSSSS]]]]]````aaaaaalmaaYYY^^^^^^n^h66666666dodGG                ", 
+  "     &&& &&&          ________&&p_qqq&jirjj             [s[[ffkkkSStttuu]vvvvvaaaaaammaYY^^^^^^^nhhhwxx66doood                  ", 
+  "     &&  &&&           __________p&&&yryzryj            ssffffkkkkttttuuuvvvvv{aaa{mm{aYYY^^^^^h||h|wxx6xddddd                  ", 
+  "      &&&&&&            ________}~~p\u007fzzzzzzz\u0080           ssssfffkkktttuuuuvvvvv\u0081{{{{{{{m^^^^^^^^h||h|||xxxxdodoo                 ", 
+  "       &&&&              _____p\u0082p\u0082\u0082pzzzzzzzzz           sssskkk\u0083tt\u0084\u0084\u0084uuuvvvvv\u0085\u0085\u0081{{{{{{m ^^^^^\u0086\u0086hh||||\u0087xxxxoooooo                ", 
+  "                           ___p\u0082\u007fp\u0082pz\u0088zzzz\u0080zzz\u00897        s\u008a\u008a\u008b\u008bkk\u008c\u008d\u008e\u0084\u0084\u0084\u008fuuv\u0090v\u0090\u0090\u0085\u0085\u0091\u0091\u0091\u0092{{   ^^\u0086^^^\u0086\u0086h|||xxxxxxoooooo                ", 
+  "                              }pppp\u007f\u007f\u0088zzzzz\u0093zz\u0089\u0089        s\u008a\u008a\u008a\u008a\u008b\u0094\u008c\u008d\u0084\u0084\u0084\u0084\u008fu\u0095\u0095\u0090\u0090\u0090\u0090\u0085\u0085\u0085\u0085\u0092{\u0092\u0092    ^\u0086^^\u0086^\u0086\u0096|||xxxxxooooooo                ", 
+  "                                \u0082\u007f\u007f\u007fz\u0088\u0088\u0088zzz\u0093\u00897\u0089\u00897\u0097       \u008a\u008a\u008a\u008a\u0098\u0094\u008c\u008d\u008d\u0084\u0084\u008f\u008f\u0095\u0099\u0099\u0099\u0090\u0090\u0090\u0085\u0085\u0085\u0092\u0092\u0092\u0092\u0092    ^\u0086\u0086\u0086\u0086\u0086\u0086\u0096|\u0096x\u009axxxo\u009a\u009aooooo\u0096\u0096\u0096             ", 
+  "                                 \u007f\u009b\u009b\u0088\u0088\u0088\u0088zz\u0097\u0093\u00897\u0097\u00897\u0097\u0097\u0097      \u008a\u008a\u008a\u008a\u008d\u008d\u008d\u008d\u008d\u0084\u009c\u009d\u009d\u0099\u0099\u0099\u0099\u009e\u009e\u009f\u009f\u0092\u0092\u0092\u0092\u0092      ^\u0086\u0086\u0086\u0086\u0086\u0096\u0096|\u0096\u009a\u009ax\u009a\u009a\u0096ooooo\u0096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        ", 
+  "                                 \u009b\u009b\u00a1\u00a1\u009b\u0088\u0088\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097     \u0098\u0098\u0098\u0098\u0098\u008d\u008d\u0084\u00a2\u00a2\u00a2\u009d\u0099\u0099\u0099\u0099\u009e\u009e\u009f\u009f\u0092\u00a3\u0092\u0092         \u0086\u0086   \u0096\u009a|\u0096\u0096\u009a\u0096\u0096\u0096\u009a\u0096oo\u0096\u0096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00a4      ", 
+  "                                 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097           \u00a2\u009c\u009c\u00a2\u009d\u0099\u0099\u0099\u0099\u0099\u00a3\u00a3\u00a3\u009f\u00a3\u00a3\u0092               \u0096\u0096\u009a\u0096\u0096\u009a\u009a\u0096\u0096\u009a\u0096\u00a5\u0096\u0096\u0096\u0096\u0096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00a4\u00a4    ", 
+  "                                 \u009b\u009b\u009b\u009b\u009b\u009b\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097           \u00a2\u00a2\u00a2\u00a6\u0099\u0099\u0099\u0099\u0099\u00a3\u00a3\u00a3\u00a7\u00a3\u00a3\u00a8\u00a8\u00a8              \u0096\u0096\u0096\u0096\u0096\u009a\u009a\u0096\u00a5\u00a5\u00a5\u0096\u00a5\u00a5\u00a0\u0096\u00a0\u00a0\u00a0\u00a0\u00a4\u00a0\u00a4\u00a4\u00a4\u00a4    ", 
+  "\u00a9                                \u009b\u009b\u009b\u009b\u009b\u009b\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097           \u00a2\u00a2\u00a2\u00a6\u00a6\u00a6\u0099\u0099\u00a7\u00a7\u00a3\u00a3\u00a3\u00a3\u00a3\u00a8\u00a8\u00a8               \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u00a5\u0096\u00a5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa  \u00a9", 
+  "\u00a9\u00a9\u00a9                               \u009b\u009b\u009b\u009b\u009b\u009b\u00ab\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097            \u00a6\u00ac\u00ac\u00a6\u00a6\u00a6\u00a6\u00a7\u00a7\u00a7\u00ad\u00a3\u00ae\u00a3\u00a3\u00a8\u00a8\u00a8\u00a8               \u0096\u0096\u0096\u0096\u0096\u0096\u00a5\u00a5\u00a5\u0096\u0096\u00af\u00af\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa\u00a4\u00aa\u00a9 ", 
+  " \u00a9\u00a9                               \u009b\u009b\u009b\u009b\u009b\u009b\u00ab\u00ab\u00ab\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097            \u00ac\u00ac\u00ac\u00a6\u00a6\u00a6\u00a7\u00a7\u00a7\u00a7\u00ad\u00ae\u00ae\u00a3\u00a3\u00a8\u00a8\u00a8\u00a8                 \u0096\u0096\u0096\u0096\u0096\u00a5\u00a5\u00af\u00af\u00af\u00af\u00a0\u00a0\u00af\u00a0\u00a0\u00a0\u00a4\u00a4\u00aa\u00aa\u00aa\u00b0\u00a9\u00aa ", 
+  "  \u00a9                                \u009b\u009b\u009b\u009b\u009b\u00ab\u00ab\u00ab\u00ab\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097             \u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00a7\u00b1\u00b1\u00b1\u00ae\u00ae\u00b1\u00a3\u00a8\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u0096\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00a0\u00a0\u00af\u00b0\u00aa\u00aa \u00aa\u00aa\u00aa\u00a9", 
+  " \u00a9\u00a9                                 \u009b\u009b\u009b\u00b2\u00ab\u00ab\u00b3\u00b3\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097             \u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00b4\u00b4\u00b1\u00b1\u00ae\u00b1\u00b1\u00ae\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00aa\u00aa\u00aa\u00aa\u00a9\u00a9", 
+  "\u00a9\u00a9                                   \u009b\u009b\u00b2\u00b2\u00b5\u00b3\u00b3\u00b3\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097              \u00ac\u00b6\u00ac\u00ac\u00ac\u00b4\u00b4\u00b6\u00b6\u00ae\u00b1\u00ae\u00ae\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0 \u00aa\u00aa\u00b0\u00a9\u00a9", 
+  "                                     \u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b3\u0097\u0097\u00b3\u0097\u0097\u0097\u0097               \u00ac\u00b6\u00b6\u00ac\u00b6\u00b6\u00b6\u00b6\u00b6\u00b1\u00b1\u00b6\u00ae\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0 \u00b0\u00b0\u00b0  ", 
+  "                                    \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u0097\u0097\u0097\u00b7\u0097\u0097\u0097                \u00ac\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b1\u00b6\u00b6\u00a8\u00a8\u00a8\u00a8                   \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00b8\u00b8\u00b8\u00b8", 
+  "                                    \u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b7\u0097\u00b7\u00b7\u0097                   \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6 \u00a8\u00a8\u00a8                     \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                    \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b7\u00b7\u00b7\u00b7\u0097                   \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                         \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                    \u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b7\u00b7\u00b7\u00b7                    \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                          \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b7\u00b7\u00b7\u00b7\u00b7                      \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                             \u00af\u00af\u00af\u00af\u00af\u00af \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5                                         \u00b9\u00b9\u00b9\u00b9                     \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00ba\u00ba\u00ba\u00ba                                         \u00b9\u00b9  \u00b9\u00b9                      \u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00ba\u00b5\u00b5\u00ba\u00ba                                        \u00b9    \u00b9                      \u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00ba\u00ba\u00b2\u00ba\u00ba\u00ba                                        \u00b9\u00b9  \u00b9\u00b9                              \u00b8\u00b8\u00b8\u00b8\u00b8 ", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00ba\u00ba\u00b5\u00ba\u00ba                                         \u00b9\u00b9\u00b9\u00b9\u00b9                                    ", 
+  "                                    \u00b2\u00b2\u00b2\u00b2\u00b2\u00ba\u00ba\u00ba\u00ba\u00ba                                          \u00b9\u00b9                                      ", 
+  "                                     \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00bb\u00bb\u00bb                                   \u00bb\u00bb\u00bb\u00bb\u00bb        \u00bb\u00bb\u00bb  \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb           ", 
+  "                                      \u00bb\u00b2\u00b2\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb                    \u00bb  \u00bb\u00bb   \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb      ", 
+  "                           \u00bb\u00bb\u00bb\u00bb \u00bb   \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb            \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u [...]
+  "            \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb           \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00 [...]
+  "      \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb \u00bb\u00bb\u00bb  \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb [...]
+  "    \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00b [...]
+  "   \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/image-filters-multi-blur-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/image-filters-multi-blur-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..c3c52be
--- /dev/null
+++ b/tests/visual_tests/grids/image-filters-multi-blur-512-512-2.0-grid-reference.json
@@ -0,0 +1,288 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "151", 
+  "78", 
+  "53", 
+  "166", 
+  "58", 
+  "51", 
+  "131", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "108", 
+  "100", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "161", 
+  "19", 
+  "147", 
+  "173", 
+  "169", 
+  "83", 
+  "137", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "150", 
+  "76", 
+  "157", 
+  "163", 
+  "46", 
+  "154", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "129", 
+  "141", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "174", 
+  "25", 
+  "106", 
+  "18", 
+  "170", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "38", 
+  "143", 
+  "115", 
+  "139", 
+  "91", 
+  "171", 
+  "126", 
+  "71", 
+  "45", 
+  "156", 
+  "67", 
+  "69", 
+  "160", 
+  "148", 
+  "49", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "146", 
+  "87", 
+  "124", 
+  "36", 
+  "23", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "127", 
+  "125", 
+  "68", 
+  "32", 
+  "27", 
+  "95", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "159", 
+  "142", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "57", 
+  "164", 
+  "172", 
+  "54", 
+  "176", 
+  "2", 
+  "177", 
+  "102", 
+  "113", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "114", 
+  "132", 
+  "30", 
+  "175", 
+  "26", 
+  "5", 
+  "167", 
+  "121", 
+  "8", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!!                                                                        ", 
+  "                             ###########!!!!!!!!!!!!!!!!!!!!!!         $$       %%%%            %%%%                            ", 
+  "                       ##############!!!!!!!!!!!!!!!!!!!!!!!!!!  $$$$$$$$$$$$%%%%%%%%%        %%%%%%%%%%                        ", 
+  "                   ################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$$$$$$$$$$$$%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%    %%%%%%%%         ", 
+  "                 #################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "%%%% &&&&&&&&&&&##################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%&&&&&&&&&&&&&&&&######################!!!!!!!!!!!!!!!!!!!!!!!$$$$$'''$$''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&&&&&&&&&&&&&&&&&####################!!!!!!!!!!!!!!!!!!!!((((!$$$$''$$'$'''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&&&#################!!!!!!!!!!!!!!!!!!!!!!((((($$$'''''''''''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&&&###################!!!!!!!!!!!!!!!!!!!(((((($$'''''''''''''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&#&#########################!!!!!!!!!!!!!!!(((((($$'''''''$$$$%%'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%&&&&&&&&&&######################!!#####!!!!!!!!!!(((((((($$$'''''$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&%&&&&&&&&&&&#######################!###!!!!!!!!!!(((((((((($$''''$$''')))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&#################&&&&#####&&!!!!!!!!!(((((((((($$'''$$$''*))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&##############&&&&&######&&!!!!!!!(((((((((($+'''$$''***,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&&#################&#######&!!!!!!!!(((((((---++'''..'**/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&############################!!!!!!!!(((((---2-++'344555511%%%%%%%%%%%666666%%%%%%%%%%%%%%%77%%%%%%%%%%%%%%%%%%%", 
+  " &&&&&&&&&&&&&&&&&&########################&#!!!!!!!!  ((-----+-88944::5*******%%%666666666666%%%;%;;%%%%%%777%%%%%%%%%%%%%%%%%%", 
+  " &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#####&##&&##!!!!!     ---<<--8888=>?@@AAA***%%%%66666666666667;;;;;;;;;;;77777%%%%%%%%%%%%%%% ", 
+  "  &&&&&&&&&& #&&&&&&&&&&&&&&&&&&&&&##&&&&#&&&&#####     ---<<3-B888>>*CDDAAE*E%%%F66FF666666677777;;;;;;7777777%%%%G%%%%%%%%%%  ", 
+  "   &&&&&&     #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&####      ---<H-IIIIB>>>>JKLMMMMEMN%FOFOFFFFPPP77777777;7777777QQ%%%G%%%%%%%%%    ", 
+  "               &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#####      -HHHH-IIIRR>**>*LEMMMMMMSSFOOOOFFTT777777777777777U7UQ%%%%G%%%%%%%%     ", 
+  "      &&&      &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&####      <HHHHHH<BVVVBWM**EEE*XMYZZSSSSSO[[[]]777777777777777UU^^%GGG%%%%GG       ", 
+  "    &&&&&&&&    &&&&&&&&&&&&&&&&&&&&&&&&&&&&###        HHHHHH<<<VVVBBMMM_EE**YZZZSSSSS[[[]]``777777777777777UUGG%%%%%%GG        ", 
+  "   &&&&&&&&&&   &&&&&&&aaaa&&&&&&&&&&&&&&&&b          HHHcccc<<VVVVV_____ddddeeeZfSSSS[[]]]``g77777777777777UUUUU%^GGGG         ", 
+  "   &&&    &&&&   &&&&&&aaaaaa&&&&&&&&&&&&&bbb         Hcccc<<hVVVVVV_____ddddeeeeeiSSSS]]]````ggj`kk7777777QQQQQU^^GGGG         ", 
+  "   &&     &&&&    &&&&&&a&aaaa&&&&&&lmmmmmmmbb       Hccccc<hhnVVVVV_____ddddeeeeeeopiii]]``````q`k77777777UQQQQU^GGGG          ", 
+  "  &&&& &   &&&     &&&&&&&&aaa&&&arrrmmmmmmmmm       HcccsHHhhnnnVVtttWW_uuuuueeeeeeppiie```````qkkkvww77wwwxxxxUGGG            ", 
+  "   &&&     &&&     aa&&&&&&aaaaaa&mmmmyzmmmmmmm      cccsshhhhnnnnttttWWWuuuuuieeeippiiie]`````{wwk{vww7wwwwxxxUxx              ", 
+  "   &&&     &&&      aaaaa&&&&aaa|}}mmmmmmmmmmmm~\u007f    ccssscchhhnnntttWWWWuuuuu\u0080iiiiiiiiie]````{{wwk{{{wwwwwxxxxUxx              ", 
+  "   &&&&   &&&&       aaaaaa&&&&&\u0081\u0082\u0082mmmmmmmmmmmmm\u007f\u007f   ccsssccnnn\u0083tt\u0084\u0084\u0084WWWuuuuu\u0085\u0085\u0080i\u0086iiiiiie]]``g{{www{{\u0087wwwwwxxUUxxx              ", 
+  "    &&&&  &&&          aaaa\u0081\u0081\u0082\u0088\u0088\u0088m\u0082mm\u0089mmmm~mmmmm\u007f\u007f8\u008a ccssss\u008b\u008bnn\u008c\u008d\u008e\u0084\u0084\u0084\u008fWWu\u0090u\u0090\u0090\u0085\u0085\u0091\u0091\u0091\u0086iiiii]]]``k{{www{wwwwwwxwxUUx\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092        ", 
+  "      &&&&&&            aaaa\u0081\u0081\u0088\u0088\u0093mm\u0088\u0088\u0089mmmmm\u0094mmmm\u007f\u007f8\u008a\u008a\u008acssss\u008ds\u008b\u0095\u008c\u008d\u0084\u0084\u0084\u0084\u008fW\u0096\u0096\u0090\u0090\u0090\u0090\u0085\u0085\u0085\u0085\u0086iiiii\u0086\u0097````\u0097{{www{wwwwwwwwxxx\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092      ", 
+  "        &&                aa\u0081\u0081\u0088\u0093\u0093mmmm\u0089\u0089\u0089mmm\u0094\u007f8mm\u007f\u007f8\u008a\u008a\u008acssss\u008d\u008d\u0098\u0095\u008cWW\u0084\u0084\u008f\u008f\u0096\u0099\u0099\u0099\u0090\u0090\u0090\u0085\u0085\u0085\u0086\u0086iiii\u0086`\u0097`````{{{w\u009aw\u009bwwww\u009b\u009bw\u009c\u009c\u009c\u009c\u0092\u0092\u0092\u0092\u0092\u009d\u009d\u009d\u009d\u009d\u009d\u009d    ", 
+  "                            a\u0081\u0081\u0093\u0093\u0093mm\u0089\u0089\u0089\u0089mm\u008a\u0094\u007f8\u008am\u007f\u007f8\u008a\u008a\u008a\u008asssss\u008d\u008d\u008dssW\u008d\u008d\u009e\u009f\u009f\u0099\u0099\u0099\u0099\u00a0\u00a0\u00a1\u00a1\u0086\u0086iiii\u0086\u0086`\u0097````\u0097\u0097{{ww\u009a\u009b\u009bw\u009b\u009b\u009awx\u009c\u009c\u009c\u009c\u009c\u0092\u0092\u0092\u009d\u009d\u009d\u009d\u009d\u009d\u009d\u009d\u009d   ", 
+  "                              \u00a2\u0081\u0081\u0081m\u00a2\u00a2\u0093\u0089\u0089\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u007f\u007f8\u008a\u008a\u008a\u008a\u008assss\u008d\u008d\u008d\u008ds\u008d\u008d\u00a3\u00a3\u00a3\u009f\u0099\u0099\u0099\u0099\u00a0\u00a0\u00a1\u00a1\u0086ii\u00a4\u0086\u0086\u0086  \u0097\u0097\u0097\u0097\u0097\u0097\u0097{{{ww\u009a\u009aw\u009a\u009a\u009a\u009c\u009ax\u009c\u009c\u009a\u009c\u009c\u0092\u009d\u009d\u009d\u009d\u009d\u009d\u0 [...]
+  "\u00a6\u00a6\u00a6                           \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008assss\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u00a3\u009f\u0099\u0099\u0099\u0099\u0099\u00a4\u00a4\u00a4\u00a1\u00a7\u00a7\u00a0\u00a4\u0086\u0086\u0086   \u0097\u0097\u0097\u0097\u0097\u0097\u0097{{{w\u009a\u009aww\u009a\u009a\u009c\u009ax\u009a\u009a\u009a\u009a\u009a\u0092\u00 [...]
+  "\u00a6\u00a6\u00a6\u00a6                          \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a ssss\u008d\u008d\u008d\u008d\u008d\u008d\u00a7\u00a8\u0099\u0099\u0099\u0099\u0099\u00a4\u00a4\u00a4\u00a9\u00a9\u00a7\u00a4\u00a4\u00a4\u0086\u00aa\u00aa   \u0097\u0097\u0097\u0097\u0097\u0097\u009b{{{{{\u009a\u009b\u009c\u009c\u009cxx\u0092\u0092\u0092\u009c\u009a\u0092\u00 [...]
+  "\u00a6\u00a6\u00a6\u00a6\u00a6                         \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a   \u0098\u0098\u0098\u008c\u00ab\u0084\u0084\u00a7\u00a7\u00a8\u00a8\u00a8\u0099\u0099\u00a7\u00a7\u00a4\u00a4\u00a4\u00a9\u00a7\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa         \u009a\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009c\u009c\u009a\u009a\u009a\u009c\u0092\u0092\u [...]
+  "  \u00a6\u00a6\u00a6                          \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u00ac\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a       \u00ab\u00ab\u00ab\u00a7\u00a7\u00a8\u00a8\u00a8\u00a8\u00a7\u00a7\u00a7\u00ad\u00a4\u00ae\u00a9\u00a9\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa         \u009a\u009a\u009a\u009b\u009b\u009b\u009b\u009b\u009c\u009c\u009c\u009c\u009a\u0092\u0092\u00af\u00af\u009c\u009c\u009d\u009d\u009d\ [...]
+  "    \u00a6\u00a6                         \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u00ac\u00ac\u00ac\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a      \u00ab\u00ab\u00ab\u00ab\u00a7\u00a9\u00a8\u00a8\u00a8\u00a7\u00a7\u00a7\u00a7\u00ad\u00ae\u00ae\u00a9\u00a9\u00aa\u00a4\u00a4\u00aa\u00aa\u00aa          \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009c\u009c\u009c\u009c\u009a\u00af\u00af\u00af\u00af\u009c\u0092\u00af\u009d\u009d\u00a5 [...]
+  "     \u00a6                          \u0093\u0093\u0093\u0093\u0093\u00b1\u00b1\u0093\u00ac\u00ac\u00ac\u00ac\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a       \u00ab\u00ab\u00ab\u00ab\u00a7\u00ab\u00ab\u00ab\u00ab\u00a7\u00a9\u00a9\u00a9\u00ae\u00ae\u00a9\u00a9\u00aa\u00aa\u00a4\u00ae\u00aa\u00aa\u00aa           \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009c\u009c\u009c\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u0092\u009d\u009d\u00a5\u00a5\u009d\u [...]
+  "    \u00a6                            \u0093\u0093\u0093\u0093\u00b1\u00b1\u00b2\u00ac\u00ac\u00b1\u00b1\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a         \u00ab\u00ab\u00b3\u00a7\u00a9\u00ab\u00ab\u00ab\u00b4\u00b4\u00a9\u00a9\u00ae\u00a9\u00a9\u00a9\u00aa\u00aa\u00ae\u00ae\u00aa\u00aa\u00aa             \u009a\u009a\u009a\u009a\u009a\u009c\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u0092\u009d\u00a5\u00a5\u009d\u009d\u009d\u00a5\u00a5\u0 [...]
+  "   \u00a6\u00a6                            \u0093\u0093\u0093\u0093\u00b1\u00b1\u00b2\u00b2\u00b5\u00b1\u00b1\u00b1\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a         \u00ab\u00b3\u00b3\u00b3\u00a7\u00ab\u00ab\u00ab\u00b4\u00b4\u00b3\u00b3\u00ae\u00a9\u00a9\u00a9\u00aa\u00ad\u00ae\u00aa\u00aa\u00aa\u00aa             \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u0092\u00a5\u00a5\u009d\u009d\u00a5\u00a5\u00 [...]
+  "\u00a6 \u00a6\u00a6                              \u0093\u0093\u0093\u00b1\u00b1\u00b2\u00b5\u00b5\u00b5\u00b5\u00b1\u008a\u008a\u00b6\u00b6\u00b6\u008a\u008a\u008a\u008a\u008a         \u00ab\u00b3\u00b3\u00b3\u00a7\u00a9\u00ab\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00a9\u00ae\u00aa\u00aa\u00aa\u00aa              \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u0 [...]
+  "\u00a6 \u00a6                               \u00b2\u00b2\u0093\u00b1\u00b1\u00b2\u00b5\u00b5\u00b5\u00b5\u008a\u008a\u008a\u00b6\u00b6\u00b6\u008a\u008a\u008a\u008a           \u00b3\u00b3\u00b3\u00b3\u00a7\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00b3\u00ae\u00aa\u00aa\u00aa\u00aa              \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u0093\u00b1\u00b5\u00b5\u00b5\u00b5\u00b5\u00b6\u008a\u00b1\u00b1\u00b6\u00b6\u00b6\u008a\u008a\u008a           \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00b3\u00b3\u00aa\u00aa\u00aa\u00aa\u00aa              \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b6\u00b2\u00b5\u00b5\u00b5\u00b5\u00b6\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u008a\u008a            \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00a9\u00a9\u00b3\u00b3\u00b3\u00aa\u00aa\u00aa\u00aa   \u00b8\u00b8          \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u008a               \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00aa\u00aa\u00aa\u00aa  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8        \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7 \u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b1\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u00b6                \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3      \u00b8\u00b8   \u00b8\u00b8\u00b8        \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7 \u00b7 ", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b6\u00b6\u008a\u00b6\u00b6\u00b6\u00b6                  \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3      \u00b8      \u00b8\u00b8\u00b8       \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7 \u00b7", 
+  "                                \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b9                   \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3       \u00b8       \u00b8\u00b8        \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b2\u00b2\u00b6\u00b6\u00b6\u00b6\u00b9\u00b9                     \u00b3\u00b3\u00b3           \u00b8        \u00b8\u00b8         \u00af\u00af\u00af\u00af   \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b9\u00b2\u00b2\u00b9\u00b2\u00b9\u00b9\u00b9\u00b9                                   \u00b8         \u00b8     \u00ba\u00ba         \u00ba\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b9                           \u00ba  \u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba \u00ba\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b9           \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00af\u00af\u00af\u00af\ [...]
+  "                 \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00ba        \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u [...]
+  "        \u00ba \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00ba\u00ba    \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u [...]
+  "    \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00ba\u00b9\u00b9\u00b9\u00b9\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b [...]
+  "   \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00ba\u00b2\u00b2\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/image-filters-multi-blur-inflate-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/image-filters-multi-blur-inflate-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..ba44756
--- /dev/null
+++ b/tests/visual_tests/grids/image-filters-multi-blur-inflate-512-512-1.0-grid-reference.json
@@ -0,0 +1,289 @@
+{
+ "keys": [
+  "", 
+  "28", 
+  "66", 
+  "119", 
+  "135", 
+  "168", 
+  "151", 
+  "78", 
+  "53", 
+  "58", 
+  "75", 
+  "166", 
+  "51", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "108", 
+  "131", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "50", 
+  "149", 
+  "19", 
+  "147", 
+  "162", 
+  "169", 
+  "83", 
+  "161", 
+  "3", 
+  "104", 
+  "65", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "100", 
+  "76", 
+  "157", 
+  "46", 
+  "173", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "137", 
+  "94", 
+  "74", 
+  "103", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "163", 
+  "18", 
+  "110", 
+  "25", 
+  "106", 
+  "81", 
+  "129", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "126", 
+  "144", 
+  "38", 
+  "71", 
+  "141", 
+  "115", 
+  "154", 
+  "139", 
+  "91", 
+  "171", 
+  "45", 
+  "170", 
+  "174", 
+  "156", 
+  "67", 
+  "69", 
+  "124", 
+  "160", 
+  "49", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "95", 
+  "87", 
+  "36", 
+  "148", 
+  "143", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "146", 
+  "68", 
+  "32", 
+  "27", 
+  "73", 
+  "23", 
+  "93", 
+  "34", 
+  "112", 
+  "125", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "127", 
+  "47", 
+  "57", 
+  "164", 
+  "142", 
+  "159", 
+  "2", 
+  "176", 
+  "102", 
+  "54", 
+  "172", 
+  "22", 
+  "113", 
+  "111", 
+  "109", 
+  "9", 
+  "114", 
+  "177", 
+  "30", 
+  "132", 
+  "26", 
+  "5", 
+  "175", 
+  "167", 
+  "121", 
+  "8", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                !!!!!!!!!!################                                                                      ", 
+  "                          !! !!!!!!!!!!#######################     $$$$$$$$    %%%%%           %%%%%%%                          ", 
+  "                    !!!!!!!!!!!!!!!!###########################   $$$$$$$$$$  %%%%%%% %%%%    %%%%%%%%%%%                       ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!#######################  $$$$$$$$$$$$ %%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% %%%%%%%%%        ", 
+  "%%     &&&&       !!!!!!!!!!!!!!!!!!!!########################    $$$$$$$$$$$ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     %", 
+  "%%%%&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!##########################    $$$$'''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%&&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!###################((((      $'''''''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%&&&&&&&&&&&&!&!!!!!!!!!!!!!!!!!!!!!!!!!###############((((((    $''''$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########(((((((((  $$'''$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&%&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########(((((((((**$$'$$''')))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###########((((((((+*$$$$$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&&&&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!########   ((((((+*+$$$$'''',-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "   &&&&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!######       ++*+**$$'..',,/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "   &&&&&&&&& &&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#         ++*++**$233444411%%%%%%%%%%%555555%%%%%%%%%%%%%%%66%%%%%%%%%%%%%%%%%  ", 
+  "    &&&&&&&    !&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ++++*277833994,,,,,,,%%%555555555555%%%:%::%%%%%%666%%%%%%%%%%%%%%    ", 
+  "     &          !&&&&&&&&&&&&&&&&&!!!!!&!!&!!!!!           ;;;;7777<=>??@@@,,,%%%%55555555555556:::::::::::66666%%%%%%%%%%%     ", 
+  "                 !&&&&&&&&&&&&&&&&&!!&&&&!&!!!!!          A;;;;;777==BCDD@@,,,%%%E55FF555555566666::::::6666666%%%%G%%G%%       ", 
+  "                 &&&&&&&&&&&&&&&&&&&&&&&&&&!!!!           ;;A;AAAAH====IJKEEEE,EL%FMFMFFFFNNN66666666:6666666OO%%%G%%GG         ", 
+  "                  &&&&&&&&&&&&&&&&&&&&&&&&!!              ;;P;AAAHH=HH=EK,EEEEEEQQFMMMMFFRR666666666666666O6OO%%%%GGGG          ", 
+  "                  &&&&&&&&&&&&&&&&&&&&&&&                  ;;;P;SSSHHHHEEEETUEVWWQQQQQMXXXYY666666666666666OOZZ%GGGGG           ", 
+  "                   &&&&&&&&&&&&&&&&&&&&&                  P[[PPPSSSHHHH]]ETTEVWWWQQQQQXXXYY^^666666666666666OOGGZGGGG           ", 
+  "                   &&&&____&&&&&&&&&&&&                  P[[[PPSSSSS]]]]]````aaaWbQQQQXXYYY^^c66666666666666ddZZGGGG            ", 
+  "      &&&&           &&______&&&&&&&&&&e                P[[PPfSSSSSS]]]]]````aaaaaaQQQQYYY^^^^ccg^hh6666666dddZGGG              ", 
+  "     &&&&&&          ____&____&&&&&&e&ijjjj             [[[PffkSSSSS]]]]]````aaaaaalmaaYYY^^^^^^n^h66666666dodGG                ", 
+  "     &&& &&&          ________&&p_qqq&jirjj             [s[[ffkkkSStttuu]vvvvvaaaaaammaYY^^^^^^^nhhhwxx66doood                  ", 
+  "     &&  &&&           __________p&&&yryzryj            ssffffkkkkttttuuuvvvvv{aaa{mm{aYYY^^^^^h||h|wxx6xddddd                  ", 
+  "      &&&&&&            ________}~~p\u007fzzzzzzz\u0080           ssssfffkkktttuuuuvvvvv\u0081{{{{{{{m^^^^^^^^h||h|||xxxxdodoo                 ", 
+  "       &&&&              _____p\u0082p\u0082\u0082pzzzzzzzzz           sssskkk\u0083tt\u0084\u0084\u0084uuuvvvvv\u0085\u0085\u0081{{{{{{m ^^^^^\u0086\u0086hh||||\u0087xxxxoooooo                ", 
+  "                           ___p\u0082\u007fp\u0082pz\u0088zzzz\u0080zzz\u00897        s\u008a\u008a\u008b\u008bkk\u008c\u008d\u008e\u0084\u0084\u0084\u008fuuv\u0090v\u0090\u0090\u0085\u0085\u0091\u0091\u0091\u0092{{   ^^\u0086^^^\u0086\u0086h|||xxxxxxoooooo                ", 
+  "                              }pppp\u007f\u007f\u0088zzzzz\u0093zz\u0089\u0089        s\u008a\u008a\u008a\u008a\u008b\u0094\u008c\u008d\u0084\u0084\u0084\u0084\u008fu\u0095\u0095\u0090\u0090\u0090\u0090\u0085\u0085\u0085\u0085\u0092{\u0092\u0092    ^\u0086^^\u0086^\u0086\u0096|||xxxxxooooooo                ", 
+  "                                \u0082\u007f\u007f\u007fz\u0088\u0088\u0088zzz\u0093\u00897\u0089\u00897\u0097       \u008a\u008a\u008a\u008a\u0098\u0094\u008c\u008d\u008d\u0084\u0084\u008f\u008f\u0095\u0099\u0099\u0099\u0090\u0090\u0090\u0085\u0085\u0085\u0092\u0092\u0092\u0092\u0092    ^\u0086\u0086\u0086\u0086\u0086\u0086\u0096|\u0096x\u009axxxo\u009a\u009aooooo\u0096\u0096\u0096             ", 
+  "                                 \u007f\u009b\u009b\u0088\u0088\u0088\u0088zz\u0097\u0093\u00897\u0097\u00897\u0097\u0097\u0097      \u008a\u008a\u008a\u008a\u008d\u008d\u008d\u008d\u008d\u0084\u009c\u009d\u009d\u0099\u0099\u0099\u0099\u009e\u009e\u009f\u009f\u0092\u0092\u0092\u0092\u0092      ^\u0086\u0086\u0086\u0086\u0086\u0096\u0096|\u0096\u009a\u009ax\u009a\u009a\u0096ooooo\u0096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        ", 
+  "                                 \u009b\u009b\u00a1\u00a1\u009b\u0088\u0088\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097     \u0098\u0098\u0098\u0098\u0098\u008d\u008d\u0084\u00a2\u00a2\u00a2\u009d\u0099\u0099\u0099\u0099\u009e\u009e\u009f\u009f\u0092\u00a3\u0092\u0092         \u0086\u0086   \u0096\u009a|\u0096\u0096\u009a\u0096\u0096\u0096\u009a\u0096oo\u0096\u0096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00a4      ", 
+  "                                 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097           \u00a2\u009c\u009c\u00a2\u009d\u0099\u0099\u0099\u0099\u0099\u00a3\u00a3\u00a3\u009f\u00a3\u00a3\u0092               \u0096\u0096\u009a\u0096\u0096\u009a\u009a\u0096\u0096\u009a\u0096\u00a5\u0096\u0096\u0096\u0096\u0096\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00a4\u00a4    ", 
+  "                                 \u009b\u009b\u009b\u009b\u009b\u009b\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097           \u00a2\u00a2\u00a2\u00a6\u0099\u0099\u0099\u0099\u0099\u00a3\u00a3\u00a3\u00a7\u00a3\u00a3\u00a8\u00a8\u00a8              \u0096\u0096\u0096\u0096\u0096\u009a\u009a\u0096\u00a5\u00a5\u00a5\u0096\u00a5\u00a5\u00a0\u0096\u00a0\u00a0\u00a0\u00a0\u00a4\u00a0\u00a4\u00a4\u00a4\u00a4    ", 
+  "\u00a9                                \u009b\u009b\u009b\u009b\u009b\u009b\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097           \u00a2\u00a2\u00a2\u00a6\u00a6\u00a6\u0099\u0099\u00a7\u00a7\u00a3\u00a3\u00a3\u00a3\u00a3\u00a8\u00a8\u00a8               \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u00a5\u0096\u00a5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa  \u00a9", 
+  "\u00a9\u00a9\u00a9                               \u009b\u009b\u009b\u009b\u009b\u009b\u00ab\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097            \u00a6\u00ac\u00ac\u00a6\u00a6\u00a6\u00a6\u00a7\u00a7\u00a7\u00ad\u00a3\u00ae\u00a3\u00a3\u00a8\u00a8\u00a8\u00a8               \u0096\u0096\u0096\u0096\u0096\u0096\u00a5\u00a5\u00a5\u0096\u0096\u00af\u00af\u00a0\u00a0\u00a0\u00a0\u00a0\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa\u00a4\u00aa\u00a9 ", 
+  " \u00a9\u00a9                               \u009b\u009b\u009b\u009b\u009b\u009b\u00ab\u00ab\u00ab\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097            \u00ac\u00ac\u00ac\u00a6\u00a6\u00a6\u00a7\u00a7\u00a7\u00a7\u00ad\u00ae\u00ae\u00a3\u00a3\u00a8\u00a8\u00a8\u00a8                 \u0096\u0096\u0096\u0096\u0096\u00a5\u00a5\u00af\u00af\u00af\u00af\u00a0\u00a0\u00af\u00a0\u00a0\u00a0\u00a4\u00a4\u00aa\u00aa\u00aa\u00b0\u00a9\u00aa ", 
+  "  \u00a9                                \u009b\u009b\u009b\u009b\u009b\u00ab\u00ab\u00ab\u00ab\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097             \u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00a7\u00b1\u00b1\u00b1\u00ae\u00ae\u00b1\u00a3\u00a8\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u0096\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00a0\u00a0\u00af\u00b0\u00aa\u00aa \u00aa\u00aa\u00aa\u00a9", 
+  " \u00a9\u00a9                                 \u009b\u009b\u009b\u00b2\u00ab\u00ab\u00b3\u00b3\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097             \u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00b4\u00b4\u00b1\u00b1\u00ae\u00b1\u00b1\u00ae\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00aa\u00aa\u00aa\u00aa\u00a9\u00a9", 
+  "\u00a9\u00a9                                   \u009b\u009b\u00b2\u00b2\u00b5\u00b3\u00b3\u00b3\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097              \u00ac\u00b6\u00ac\u00ac\u00ac\u00b4\u00b4\u00b6\u00b6\u00ae\u00b1\u00ae\u00ae\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0 \u00aa\u00aa\u00b0\u00a9\u00a9", 
+  "                                     \u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b3\u0097\u0097\u00b3\u0097\u0097\u0097\u0097               \u00ac\u00b6\u00b6\u00ac\u00b6\u00b6\u00b6\u00b6\u00b6\u00b1\u00b1\u00b6\u00ae\u00a8\u00a8\u00a8\u00a8                  \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0 \u00b0\u00b0\u00b0  ", 
+  "                                    \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u0097\u0097\u0097\u00b7\u0097\u0097\u0097                \u00ac\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b1\u00b6\u00b6\u00a8\u00a8\u00a8\u00a8                   \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00b8\u00b8\u00b8\u00b8", 
+  "                                    \u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b7\u0097\u00b7\u00b7\u0097                   \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6 \u00a8\u00a8\u00a8                     \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                    \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b7\u00b7\u00b7\u00b7\u0097                   \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                         \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                    \u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b7\u00b7\u00b7\u00b7                    \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                          \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b7\u00b7\u00b7\u00b7\u00b7                      \u00b6\u00b6\u00b6\u00b6\u00b6\u00b6                             \u00af\u00af\u00af\u00af\u00af\u00af \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5                                         \u00b9\u00b9\u00b9\u00b9                     \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00ba\u00ba\u00ba\u00ba                                         \u00b9\u00b9  \u00b9\u00b9                      \u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00ba\u00b5\u00b5\u00ba\u00ba                                        \u00b9    \u00b9                      \u00af\u00af\u00af\u00af\u00af  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b5\u00ba\u00ba\u00b2\u00ba\u00ba\u00ba                                        \u00b9\u00b9  \u00b9\u00b9                              \u00b8\u00b8\u00b8\u00b8\u00b8 ", 
+  "                                   \u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00ba\u00ba\u00b5\u00ba\u00ba                                         \u00b9\u00b9\u00b9\u00b9\u00b9                                    ", 
+  "                                    \u00b2\u00b2\u00b2\u00b2\u00b2\u00ba\u00ba\u00ba\u00ba\u00ba                                          \u00b9\u00b9                                      ", 
+  "                                     \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00bb\u00bb\u00bb                                   \u00bb\u00bb\u00bb\u00bb\u00bb        \u00bb\u00bb\u00bb  \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb           ", 
+  "                                      \u00bb\u00b2\u00b2\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb                    \u00bb  \u00bb\u00bb   \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb      ", 
+  "                           \u00bb\u00bb\u00bb\u00bb \u00bb   \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb            \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u [...]
+  "            \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb           \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00 [...]
+  "      \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb \u00bb\u00bb\u00bb  \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb [...]
+  "    \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00b [...]
+  "   \u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u00bb\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/image-filters-multi-blur-inflate-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/image-filters-multi-blur-inflate-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..c3c52be
--- /dev/null
+++ b/tests/visual_tests/grids/image-filters-multi-blur-inflate-512-512-2.0-grid-reference.json
@@ -0,0 +1,288 @@
+{
+ "keys": [
+  "", 
+  "66", 
+  "28", 
+  "119", 
+  "135", 
+  "168", 
+  "151", 
+  "78", 
+  "53", 
+  "166", 
+  "58", 
+  "51", 
+  "131", 
+  "44", 
+  "97", 
+  "99", 
+  "20", 
+  "75", 
+  "118", 
+  "42", 
+  "128", 
+  "84", 
+  "31", 
+  "56", 
+  "98", 
+  "41", 
+  "108", 
+  "100", 
+  "29", 
+  "80", 
+  "10", 
+  "72", 
+  "134", 
+  "161", 
+  "19", 
+  "147", 
+  "173", 
+  "169", 
+  "83", 
+  "137", 
+  "50", 
+  "3", 
+  "104", 
+  "65", 
+  "162", 
+  "59", 
+  "158", 
+  "86", 
+  "130", 
+  "150", 
+  "76", 
+  "157", 
+  "163", 
+  "46", 
+  "154", 
+  "39", 
+  "153", 
+  "77", 
+  "1", 
+  "123", 
+  "88", 
+  "94", 
+  "74", 
+  "103", 
+  "129", 
+  "141", 
+  "48", 
+  "138", 
+  "90", 
+  "120", 
+  "110", 
+  "174", 
+  "25", 
+  "106", 
+  "18", 
+  "170", 
+  "105", 
+  "4", 
+  "122", 
+  "16", 
+  "38", 
+  "143", 
+  "115", 
+  "139", 
+  "91", 
+  "171", 
+  "126", 
+  "71", 
+  "45", 
+  "156", 
+  "67", 
+  "69", 
+  "160", 
+  "148", 
+  "49", 
+  "144", 
+  "117", 
+  "15", 
+  "116", 
+  "52", 
+  "146", 
+  "87", 
+  "124", 
+  "36", 
+  "23", 
+  "61", 
+  "60", 
+  "155", 
+  "14", 
+  "33", 
+  "140", 
+  "145", 
+  "127", 
+  "125", 
+  "68", 
+  "32", 
+  "27", 
+  "95", 
+  "93", 
+  "34", 
+  "73", 
+  "112", 
+  "159", 
+  "142", 
+  "64", 
+  "35", 
+  "165", 
+  "85", 
+  "47", 
+  "57", 
+  "164", 
+  "172", 
+  "54", 
+  "176", 
+  "2", 
+  "177", 
+  "102", 
+  "113", 
+  "22", 
+  "111", 
+  "109", 
+  "9", 
+  "114", 
+  "132", 
+  "30", 
+  "175", 
+  "26", 
+  "5", 
+  "167", 
+  "121", 
+  "8", 
+  "55", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                  !!!!!!                                                                        ", 
+  "                             ###########!!!!!!!!!!!!!!!!!!!!!!         $$       %%%%            %%%%                            ", 
+  "                       ##############!!!!!!!!!!!!!!!!!!!!!!!!!!  $$$$$$$$$$$$%%%%%%%%%        %%%%%%%%%%                        ", 
+  "                   ################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$$$$$$$$$$$$%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%    %%%%%%%%         ", 
+  "                 #################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "%%%% &&&&&&&&&&&##################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%&&&&&&&&&&&&&&&&######################!!!!!!!!!!!!!!!!!!!!!!!$$$$$'''$$''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%&&&&&&&&&&&&&&&&&####################!!!!!!!!!!!!!!!!!!!!((((!$$$$''$$'$'''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&&&#################!!!!!!!!!!!!!!!!!!!!!!((((($$$'''''''''''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&&&###################!!!!!!!!!!!!!!!!!!!(((((($$'''''''''''''%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&#&#########################!!!!!!!!!!!!!!!(((((($$'''''''$$$$%%'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "%%%%&&&&&&&&&&######################!!#####!!!!!!!!!!(((((((($$$'''''$'''))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&%&&&&&&&&&&&#######################!###!!!!!!!!!!(((((((((($$''''$$''')))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&#################&&&&#####&&!!!!!!!!!(((((((((($$'''$$$''*))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&##############&&&&&######&&!!!!!!!(((((((((($+'''$$''***,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&&#################&#######&!!!!!!!!(((((((---++'''..'**/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", 
+  "&&&&&&&&&&&&&&&&&############################!!!!!!!!(((((---2-++'344555511%%%%%%%%%%%666666%%%%%%%%%%%%%%%77%%%%%%%%%%%%%%%%%%%", 
+  " &&&&&&&&&&&&&&&&&&########################&#!!!!!!!!  ((-----+-88944::5*******%%%666666666666%%%;%;;%%%%%%777%%%%%%%%%%%%%%%%%%", 
+  " &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#####&##&&##!!!!!     ---<<--8888=>?@@AAA***%%%%66666666666667;;;;;;;;;;;77777%%%%%%%%%%%%%%% ", 
+  "  &&&&&&&&&& #&&&&&&&&&&&&&&&&&&&&&##&&&&#&&&&#####     ---<<3-B888>>*CDDAAE*E%%%F66FF666666677777;;;;;;7777777%%%%G%%%%%%%%%%  ", 
+  "   &&&&&&     #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&####      ---<H-IIIIB>>>>JKLMMMMEMN%FOFOFFFFPPP77777777;7777777QQ%%%G%%%%%%%%%    ", 
+  "               &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#####      -HHHH-IIIRR>**>*LEMMMMMMSSFOOOOFFTT777777777777777U7UQ%%%%G%%%%%%%%     ", 
+  "      &&&      &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&####      <HHHHHH<BVVVBWM**EEE*XMYZZSSSSSO[[[]]777777777777777UU^^%GGG%%%%GG       ", 
+  "    &&&&&&&&    &&&&&&&&&&&&&&&&&&&&&&&&&&&&###        HHHHHH<<<VVVBBMMM_EE**YZZZSSSSS[[[]]``777777777777777UUGG%%%%%%GG        ", 
+  "   &&&&&&&&&&   &&&&&&&aaaa&&&&&&&&&&&&&&&&b          HHHcccc<<VVVVV_____ddddeeeZfSSSS[[]]]``g77777777777777UUUUU%^GGGG         ", 
+  "   &&&    &&&&   &&&&&&aaaaaa&&&&&&&&&&&&&bbb         Hcccc<<hVVVVVV_____ddddeeeeeiSSSS]]]````ggj`kk7777777QQQQQU^^GGGG         ", 
+  "   &&     &&&&    &&&&&&a&aaaa&&&&&&lmmmmmmmbb       Hccccc<hhnVVVVV_____ddddeeeeeeopiii]]``````q`k77777777UQQQQU^GGGG          ", 
+  "  &&&& &   &&&     &&&&&&&&aaa&&&arrrmmmmmmmmm       HcccsHHhhnnnVVtttWW_uuuuueeeeeeppiie```````qkkkvww77wwwxxxxUGGG            ", 
+  "   &&&     &&&     aa&&&&&&aaaaaa&mmmmyzmmmmmmm      cccsshhhhnnnnttttWWWuuuuuieeeippiiie]`````{wwk{vww7wwwwxxxUxx              ", 
+  "   &&&     &&&      aaaaa&&&&aaa|}}mmmmmmmmmmmm~\u007f    ccssscchhhnnntttWWWWuuuuu\u0080iiiiiiiiie]````{{wwk{{{wwwwwxxxxUxx              ", 
+  "   &&&&   &&&&       aaaaaa&&&&&\u0081\u0082\u0082mmmmmmmmmmmmm\u007f\u007f   ccsssccnnn\u0083tt\u0084\u0084\u0084WWWuuuuu\u0085\u0085\u0080i\u0086iiiiiie]]``g{{www{{\u0087wwwwwxxUUxxx              ", 
+  "    &&&&  &&&          aaaa\u0081\u0081\u0082\u0088\u0088\u0088m\u0082mm\u0089mmmm~mmmmm\u007f\u007f8\u008a ccssss\u008b\u008bnn\u008c\u008d\u008e\u0084\u0084\u0084\u008fWWu\u0090u\u0090\u0090\u0085\u0085\u0091\u0091\u0091\u0086iiiii]]]``k{{www{wwwwwwxwxUUx\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092        ", 
+  "      &&&&&&            aaaa\u0081\u0081\u0088\u0088\u0093mm\u0088\u0088\u0089mmmmm\u0094mmmm\u007f\u007f8\u008a\u008a\u008acssss\u008ds\u008b\u0095\u008c\u008d\u0084\u0084\u0084\u0084\u008fW\u0096\u0096\u0090\u0090\u0090\u0090\u0085\u0085\u0085\u0085\u0086iiiii\u0086\u0097````\u0097{{www{wwwwwwwwxxx\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092      ", 
+  "        &&                aa\u0081\u0081\u0088\u0093\u0093mmmm\u0089\u0089\u0089mmm\u0094\u007f8mm\u007f\u007f8\u008a\u008a\u008acssss\u008d\u008d\u0098\u0095\u008cWW\u0084\u0084\u008f\u008f\u0096\u0099\u0099\u0099\u0090\u0090\u0090\u0085\u0085\u0085\u0086\u0086iiii\u0086`\u0097`````{{{w\u009aw\u009bwwww\u009b\u009bw\u009c\u009c\u009c\u009c\u0092\u0092\u0092\u0092\u0092\u009d\u009d\u009d\u009d\u009d\u009d\u009d    ", 
+  "                            a\u0081\u0081\u0093\u0093\u0093mm\u0089\u0089\u0089\u0089mm\u008a\u0094\u007f8\u008am\u007f\u007f8\u008a\u008a\u008a\u008asssss\u008d\u008d\u008dssW\u008d\u008d\u009e\u009f\u009f\u0099\u0099\u0099\u0099\u00a0\u00a0\u00a1\u00a1\u0086\u0086iiii\u0086\u0086`\u0097````\u0097\u0097{{ww\u009a\u009b\u009bw\u009b\u009b\u009awx\u009c\u009c\u009c\u009c\u009c\u0092\u0092\u0092\u009d\u009d\u009d\u009d\u009d\u009d\u009d\u009d\u009d   ", 
+  "                              \u00a2\u0081\u0081\u0081m\u00a2\u00a2\u0093\u0089\u0089\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u007f\u007f8\u008a\u008a\u008a\u008a\u008assss\u008d\u008d\u008d\u008ds\u008d\u008d\u00a3\u00a3\u00a3\u009f\u0099\u0099\u0099\u0099\u00a0\u00a0\u00a1\u00a1\u0086ii\u00a4\u0086\u0086\u0086  \u0097\u0097\u0097\u0097\u0097\u0097\u0097{{{ww\u009a\u009aw\u009a\u009a\u009a\u009c\u009ax\u009c\u009c\u009a\u009c\u009c\u0092\u009d\u009d\u009d\u009d\u009d\u009d\u0 [...]
+  "\u00a6\u00a6\u00a6                           \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008assss\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u00a3\u009f\u0099\u0099\u0099\u0099\u0099\u00a4\u00a4\u00a4\u00a1\u00a7\u00a7\u00a0\u00a4\u0086\u0086\u0086   \u0097\u0097\u0097\u0097\u0097\u0097\u0097{{{w\u009a\u009aww\u009a\u009a\u009c\u009ax\u009a\u009a\u009a\u009a\u009a\u0092\u00 [...]
+  "\u00a6\u00a6\u00a6\u00a6                          \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a ssss\u008d\u008d\u008d\u008d\u008d\u008d\u00a7\u00a8\u0099\u0099\u0099\u0099\u0099\u00a4\u00a4\u00a4\u00a9\u00a9\u00a7\u00a4\u00a4\u00a4\u0086\u00aa\u00aa   \u0097\u0097\u0097\u0097\u0097\u0097\u009b{{{{{\u009a\u009b\u009c\u009c\u009cxx\u0092\u0092\u0092\u009c\u009a\u0092\u00 [...]
+  "\u00a6\u00a6\u00a6\u00a6\u00a6                         \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a   \u0098\u0098\u0098\u008c\u00ab\u0084\u0084\u00a7\u00a7\u00a8\u00a8\u00a8\u0099\u0099\u00a7\u00a7\u00a4\u00a4\u00a4\u00a9\u00a7\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa         \u009a\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009c\u009c\u009a\u009a\u009a\u009c\u0092\u0092\u [...]
+  "  \u00a6\u00a6\u00a6                          \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u00ac\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a       \u00ab\u00ab\u00ab\u00a7\u00a7\u00a8\u00a8\u00a8\u00a8\u00a7\u00a7\u00a7\u00ad\u00a4\u00ae\u00a9\u00a9\u00a4\u00a4\u00a4\u00aa\u00aa\u00aa         \u009a\u009a\u009a\u009b\u009b\u009b\u009b\u009b\u009c\u009c\u009c\u009c\u009a\u0092\u0092\u00af\u00af\u009c\u009c\u009d\u009d\u009d\ [...]
+  "    \u00a6\u00a6                         \u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u0093\u00ac\u00ac\u00ac\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a      \u00ab\u00ab\u00ab\u00ab\u00a7\u00a9\u00a8\u00a8\u00a8\u00a7\u00a7\u00a7\u00a7\u00ad\u00ae\u00ae\u00a9\u00a9\u00aa\u00a4\u00a4\u00aa\u00aa\u00aa          \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009c\u009c\u009c\u009c\u009a\u00af\u00af\u00af\u00af\u009c\u0092\u00af\u009d\u009d\u00a5 [...]
+  "     \u00a6                          \u0093\u0093\u0093\u0093\u0093\u00b1\u00b1\u0093\u00ac\u00ac\u00ac\u00ac\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a       \u00ab\u00ab\u00ab\u00ab\u00a7\u00ab\u00ab\u00ab\u00ab\u00a7\u00a9\u00a9\u00a9\u00ae\u00ae\u00a9\u00a9\u00aa\u00aa\u00a4\u00ae\u00aa\u00aa\u00aa           \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009c\u009c\u009c\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u0092\u009d\u009d\u00a5\u00a5\u009d\u [...]
+  "    \u00a6                            \u0093\u0093\u0093\u0093\u00b1\u00b1\u00b2\u00ac\u00ac\u00b1\u00b1\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a         \u00ab\u00ab\u00b3\u00a7\u00a9\u00ab\u00ab\u00ab\u00b4\u00b4\u00a9\u00a9\u00ae\u00a9\u00a9\u00a9\u00aa\u00aa\u00ae\u00ae\u00aa\u00aa\u00aa             \u009a\u009a\u009a\u009a\u009a\u009c\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u0092\u009d\u00a5\u00a5\u009d\u009d\u009d\u00a5\u00a5\u0 [...]
+  "   \u00a6\u00a6                            \u0093\u0093\u0093\u0093\u00b1\u00b1\u00b2\u00b2\u00b5\u00b1\u00b1\u00b1\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a         \u00ab\u00b3\u00b3\u00b3\u00a7\u00ab\u00ab\u00ab\u00b4\u00b4\u00b3\u00b3\u00ae\u00a9\u00a9\u00a9\u00aa\u00ad\u00ae\u00aa\u00aa\u00aa\u00aa             \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u0092\u00a5\u00a5\u009d\u009d\u00a5\u00a5\u00 [...]
+  "\u00a6 \u00a6\u00a6                              \u0093\u0093\u0093\u00b1\u00b1\u00b2\u00b5\u00b5\u00b5\u00b5\u00b1\u008a\u008a\u00b6\u00b6\u00b6\u008a\u008a\u008a\u008a\u008a         \u00ab\u00b3\u00b3\u00b3\u00a7\u00a9\u00ab\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00a9\u00ae\u00aa\u00aa\u00aa\u00aa              \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u0 [...]
+  "\u00a6 \u00a6                               \u00b2\u00b2\u0093\u00b1\u00b1\u00b2\u00b5\u00b5\u00b5\u00b5\u008a\u008a\u008a\u00b6\u00b6\u00b6\u008a\u008a\u008a\u008a           \u00b3\u00b3\u00b3\u00b3\u00a7\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00b3\u00ae\u00aa\u00aa\u00aa\u00aa              \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u0093\u00b1\u00b5\u00b5\u00b5\u00b5\u00b5\u00b6\u008a\u00b1\u00b1\u00b6\u00b6\u00b6\u008a\u008a\u008a           \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00b3\u00b3\u00aa\u00aa\u00aa\u00aa\u00aa              \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b0\u00b0\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b6\u00b2\u00b5\u00b5\u00b5\u00b5\u00b6\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u008a\u008a            \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00a9\u00a9\u00a9\u00a9\u00a9\u00a9\u00b3\u00b3\u00b3\u00aa\u00aa\u00aa\u00aa   \u00b8\u00b8          \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b5\u00b5\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u008a               \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00aa\u00aa\u00aa\u00aa  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b8        \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7 \u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b1\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u00b6                \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3      \u00b8\u00b8   \u00b8\u00b8\u00b8        \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7 \u00b7 ", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b5\u00b6\u00b6\u008a\u00b6\u00b6\u00b6\u00b6                  \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3      \u00b8      \u00b8\u00b8\u00b8       \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7 \u00b7", 
+  "                                \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b6\u00b9                   \u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3\u00b3       \u00b8       \u00b8\u00b8        \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b5\u00b2\u00b2\u00b6\u00b6\u00b6\u00b6\u00b9\u00b9                     \u00b3\u00b3\u00b3           \u00b8        \u00b8\u00b8         \u00af\u00af\u00af\u00af   \u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b9\u00b2\u00b2\u00b9\u00b2\u00b9\u00b9\u00b9\u00b9                                   \u00b8         \u00b8     \u00ba\u00ba         \u00ba\u00af\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00b5\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b9                           \u00ba  \u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba \u00ba\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00af\u00af\u00af\u00af\u00af\u00af\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7", 
+  "                                 \u00b2\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b9           \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00af\u00af\u00af\u00af\ [...]
+  "                 \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b9\u00ba        \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u [...]
+  "        \u00ba \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00b2\u00b2\u00b2\u00b2\u00b9\u00b9\u00ba\u00ba    \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8\u [...]
+  "    \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00b2\u00b2\u00b2\u00ba\u00b9\u00b9\u00b9\u00b9\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b [...]
+  "   \u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00b2\u00b2\u00b2\u00ba\u00b2\u00b2\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u00ba\u0 [...]
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/jalign-auto-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/jalign-auto-200-200-1.0-grid-reference.json
index 0a2e7e4..a9ea572 100644
--- a/tests/visual_tests/grids/jalign-auto-200-200-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/jalign-auto-200-200-1.0-grid-reference.json
@@ -18,31 +18,31 @@
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
-  "     !!!!!! ! !  ! ! ! !!!      !!!!!! ! !        ", 
-  "     ! ! !!!  !  !! !! ! !!     ! ! !!!  !        ", 
+  "   !!!!! !! ! !  !!!!!!!!   !   ! ! ! !   !       ", 
+  "   ! !   ! !  !  ! !  !! !  !    !  !  !  !       ", 
   "                                                  ", 
-  "         !! !       !! ! !    !!!!  !             ", 
-  "         !!!  !     ! !!      !!!! !              ", 
+  "         !! !       !! !      !!! !               ", 
+  "         ! !  !     ! !  !    !! !  !             ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
-  "     !!!!!! ! !                 !!!!!! ! !        ", 
-  "     ! ! !!!  !                 ! ! !!!  !        ", 
+  "   !!!!! !! ! !                 !!! ! !!! !       ", 
+  "   ! !!  ! !  !                  !  !  !! !       ", 
   "                      !                           ", 
-  "         !! !                 !!!!  !             ", 
-  "         !!!  !               !!!! !              ", 
+  "         !! !                 !!! !               ", 
+  "         !  ! !               !! !! !             ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
-  "     !!!!!! ! !  ! ! ! !!!      !!!!!! ! !        ", 
-  "     ! ! !!!  !  !! !! ! !!     ! ! !!!  !        ", 
+  "   !!!!! !! ! !  !!!!!!!!!! !   !!! ! !!! !       ", 
+  "   !!!!! !  ! !  !!!!!!! !! !   !!  !  !! !       ", 
   "                                                  ", 
-  "         !! !       !! ! !    !!!!  !             ", 
-  "         !!!  !     ! !!      !!!! !              ", 
+  "         !! !       !! !      !!!!!               ", 
+  "         !  ! !     !  ! !    !! !! !             ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
diff --git a/tests/visual_tests/grids/jalign-auto-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/jalign-auto-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..139ef0c
--- /dev/null
+++ b/tests/visual_tests/grids/jalign-auto-200-200-2.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "     !!    !          !          !     !      !   ", 
+  "! !   !    !  ! !!    !  !  ! !        !! ! !!!   ", 
+  "!     !    !!   !!    !  !  !          !!   ! !   ", 
+  " !!  !!!   ! !!! ! !  !  !  !!!  !!    ! !!! ! !  ", 
+  "                                                  ", 
+  "                !                     !           ", 
+  " !              !   !  !              !   !  !    ", 
+  "! !   !         !  ! !! !   !         !  ! !! !   ", 
+  "!    !          !  ! !!    !          !  ! !!    !", 
+  " !                     !                     !    ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  " !    !                                ! !    !   ", 
+  "! !   !                                !! ! ! !   ", 
+  "!     !                                !!   ! !   ", 
+  " !                                       !        ", 
+  "                      !                           ", 
+  "     !!                               !          !", 
+  " !!                                   !  !! !!    ", 
+  "!!!   !                               !  ! !!!!   ", 
+  "!    !                                !  ! !! !  !", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "     !!   !!!         !          !    !!!     !   ", 
+  " !!   !    ! !!! !!!  !  !! !!         ! !!! !!!  ", 
+  "!!!   !    ! !! !     !  !  !!!        !!!! ! !   ", 
+  "! !   !    ! !  !!    !  !  ! !        !!  ! !!   ", 
+  "                                                  ", 
+  "                                                  ", 
+  "     !!         !          !!         !          !", 
+  "!!!             !  !!!!!!             !  !! !!!   ", 
+  "!!!   !         !  ! !!!!   !         !  ! !!!!   ", 
+  "!!!  !!         !  ! !!!!  !!         !  ! !!!!  !"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/khmer-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/khmer-800-200-1.0-grid-reference.json
new file mode 100644
index 0000000..1efb96c
--- /dev/null
+++ b/tests/visual_tests/grids/khmer-800-200-1.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                !!                                                                                      ", 
+  "                                                                                                     !           !                                                                                      ", 
+  "                                                                                                   !!! !!! !  !  ! !!! !!!! !!!  !  ! !!! !!!! ! !!! ! ! !!! !! !!                                      ", 
+  "                                                                                                   ! ! ! !     ! ! ! ! ! !      ! ! ! ! ! ! !    ! ! ! ! ! ! !                                          ", 
+  "                                                                                                   ! ! ! ! !  !! ! ! ! ! !      !!! ! ! ! ! !   !  ! ! ! ! ! !                                          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                       !!!                              !!!                                                             ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          #                   $                   %                   &                   '                   (                   !                   )                   *                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                     '      '                                                                         *    *                            ", 
+  "#                               #                   %%                           ''' '  ' ' ''' ''''                                                              ** **  * *** ****                     ", 
+  "###  #   # # ### # # ##   # # ### #                %%%                           ' ' '  ''' ''' '  '                                                              **    ** *** *  *                     ", 
+  "# #      # # # # # #      ### # # #            % %%  %                           ' '''  ' ' ' ' '  '                                                              *  *   * * * *  *                     ", 
+  "# # #    # # # # # #      # # ### #            % % % %                           ' ' '   '   '  '  '                                                              *     *   *  *  *                     ", 
+  "                 # #       ##                  % % % %                           '''                                                                               **                                   ", 
+  "                 ##        ##                  % % %%                                                                                                                                                   ", 
+  "                                               %   %                             ''                                                                               **                                    ", 
+  "                            #                  % %                                                                                                                                                      ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/khmer-800-200-2.0-grid-reference.json b/tests/visual_tests/grids/khmer-800-200-2.0-grid-reference.json
new file mode 100644
index 0000000..edc66d6
--- /dev/null
+++ b/tests/visual_tests/grids/khmer-800-200-2.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                               !!                                                                                                       ", 
+  "                                                                                                !                        !                                                                              ", 
+  "                                                                                               !!                        !                                                                              ", 
+  "                                                                        !    !  !   !!    !           !       !         ! !     !           !                     !         !    !       !     !        ", 
+  "                                                                    !!!!!   !!!!!   !!   !!!    !!  !!!!!   !!!!! !!   !!!!!   !!!    !!  !!!!!   !!!!! !!  !! !!!!!!!  !!  !!  !!!!!   !!!   !!!       ", 
+  "                                                                     !      !       !!    !!!   !   !   !   !   !  !    !!!     !!!   !   !   !   !  !!  !    !!!    !  !  !!  !!   !   !!!   !!        ", 
+  "                                                                     !  !   !  !!        !   !  !!  !   !   !   !  !   !   !   !  !!  !   !   !   !  !!  !   !   !   !  !   !   !   !  !!  !   !        ", 
+  "                                                                     !  !   !  !!        !   !  !!  !   !   !   !  !   !   !   !  !!  !   !   !   !  !!  !   !   !   !  !   !!!!!   !  !!  !   !        ", 
+  "                                                                     !  !   !   !   !!   !!  !  !!  !!  !   !   !  !   !   !   !! !!  !   !!  !   !  !!  !   !!! !   !  !   !   !   !  !!! !   !        ", 
+  "                                                                     !!!!   !!!!!   !!   !!  !  !!  !!  !!!!!   !  !   !   !   !!  !  !   !!  !!!!!  !!  !   !!  !   !  !   !   !   !  !!  !!  !        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                               !!                                                               !!!                                                     ", 
+  "                                                                             !! !                                                             !!  !                                                     ", 
+  "                                                                             !!!!                                                              !!!!                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          #                   $                   %                   &                   '                   (                   !                   )                   *                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                             ''                                                                             *                           ", 
+  "                                                                           ''                 '                                                              *    *         *                           ", 
+  "                                                      #                 ''' '  ''     ''  '   ' '''   ''''''                                             *** *  ***  *  **  * ****   ******             ", 
+  "#     ##  ##     # #    #   ####    # #    #  ##   #  # ##              '      '      '   '   ' ' '   '  '  '                                            **     **   *   *  * *  *  ** *  *             ", 
+  "##   #  ## ##   # # #  ##  ### ##  # # #  ##  ##  # #### ##             '  ''   '     ''' '   ' ' '   '  '  '                                            **  *   *   *** *  * ** *  ** *  *             ", 
+  " #   #   #  #   #   #   #   ####   #####  ##  ##  #   #   #             '  ''   '         '   '   '   '  '  '                                            ** **   *       *  *    *  ** *  *             ", 
+  " #   #   #  #   #  ##   #   #  #   #   #   #  ##  #   #   #             '   '  ''         '   '   '   '' '  '                                            **  *  **   *   *  *    *  ** *  *             ", 
+  " #   #   #  #   #  ##   #   #  #   #   #   #  ##  #   #   #             '''''  ''     ''  '   '   '   '' '  '                                            *****  **   *  *   **   *  ** *  *             ", 
+  " # # #   #  #   #   #   #   #  #   #   #   #  ##  # # #   #             '   '   '       ''     '''    '  '  '                                            **  *   *    **      ***   ** *  *             ", 
+  " ## ##   #  #   #####   #   #  #   #   #   ####   ## ##   #             ''' '                                                                             **  *                                         ", 
+  "                        #   #                                           ' ' '                                                                            *  * *                                         ", 
+  "                        #   #              # ##                         '' ''                                                                            ** **                                          ", 
+  "                        ####               ## #                                                                                                                                                         ", 
+  "                                           #  #                          ' '                                                                               **                                           ", 
+  "                                                                        '''                                                                               * *                                           ", 
+  "                                              #                         '''                                                                               **                                            ", 
+  "                                              #                                                                                                                                                         "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-offset-900-250-1.0-grid-reference.json b/tests/visual_tests/grids/line-offset-900-250-1.0-grid-reference.json
index db3484b..aca1218 100644
--- a/tests/visual_tests/grids/line-offset-900-250-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/line-offset-900-250-1.0-grid-reference.json
@@ -30,38 +30,38 @@
   "                                                                                                                                                                                                                                 ", 
   "                                                                                                                                                                                                                                 ", 
   "                                                                                                                                                                                                                                 ", 
-  "                                                                                       !!                                                                                                                                        ", 
-  "                                                                                  !    !!!!!!!                                     #    #######                                                                                  ", 
-  "                                                                             !!!!!!!   !!!!!!!!! !!!                          #######   #############                                                                            ", 
-  "                                                                            !!!!!!!!   !!!!!!!!! !!!!                        ## #####   ########## ###                                                                           ", 
-  "                                                                          !! !!!!! !!!!!!!!!!!   !!!!!                      # ######  ########  # #####                                $$$$$$                                    ", 
-  "                                %%          %%%                          !!!! ! !!              !  !!!!!                   ### # ##             ##  #####                         $$           $$$                               ", 
-  "                             %%    %%%%%%%      %%                      !!!!!!!                   !! !!                  ##### #                   ## ###                      $$    $ $$$$$$$  $  $                             ", 
-  "                           %  %%%%%%%%%% %%%%%%%% %%                   !!!! !                       !!!                 #### #                       ###                     $  $$$$$$$$$ $$$$$$$ $$ $                           ", 
-  "                          %  %%%%%%%%%%%%%%%%%% %%  %                 !!! !                           !                #### #                          #                    $  $$$$$$$$$$ $ $$$$$$$$$  $                         ", 
-  "                        %  %%% %%%          %%% %%%  %               !!!!!                             !   !          #####                             #   #                   $$$$$           $$$$$$$ $                        ", 
-  "                       %  %%%%                 %%%%%                !!!!!                               !!!!!         ###                                # ###                  $                  $$$$  $                       ", 
-  "                         %%%%%                   %%%%% %              !!                                 !!!!!        ####                                #####          $                          $$$$  $                      ", 
-  "                      % %%%%                       %%%  %              !                                 ! !!!          #                                   ###         $                             $$$ $                      ", 
-  "                       %%%%                         % % %                                                 !!!!                                             # ##         $$$                           $$$  $                     ", 
-  "                     %%%%%                            %%%             !                                   !!                                               # ##         $$$                            $  $$                     ", 
-  "                     %%%%        &&&&  &    &&         %%%            '''''       '''' ''''''''           !!!!!        #          (((((( (((( (((            ###       $$$$       )))))) ))  ) ))      $$$$$                     ", 
-  "                     %  %   &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&         ! !!           '''''''' ''''           ! !          #          (((((((((( ((((            #         $$ $       )))))))))) )))))))))))))))                     ", 
-  "                     %           &&&&&&&&  &&&        %%%%         !!!!                  '                ! !!!     ####                (  (               # ###        $$$        )))))))))    )       $$ $                     ", 
-  "                     %                              %%%%%          !!!                                      !!!     ####                                   # ###         $$$                           $$$ $                     ", 
-  "                                                    %%% %          !!! !                                 ! !!!       ## #                                   ###         $$$$                           $$$                       ", 
-  "                      %                               % %          !!!                                    !!!!       ###                                  # ###           $$$$                        $$$$$                      ", 
-  "                       %   %%                      %%  %            !!! !                               ! !!!        ### #                               # ###           $ $$$$$                    $$  $$                       ", 
-  "                        %  %%%                   %%%%%%              !!! !                             !!!!!!         ### #                             ######            $$$ $$$                  $$$$ $                        ", 
-  "                         %%%%%%%%            % %%%%% %               !!!!  !                          !!!!!!           ###  #                          ######              $  $$$$$ $          $$$$$$$$$                         ", 
-  "                          % %%%%%%%%%%%%% %%%%%%%%% %                 !!!!! !                       !  !!!             ### # #                       ## ###                  $ $$$$$$$$$$$$$$$$ $$$$$ $                          ", 
-  "                            % %%%%%% %%%%%%%%%%%% %                    !  !!  !                   !     !               ## ##  #                   ##    ##                   $$ $$$ $$$$$$$$$$ $   $                            ", 
-  "                              %%  %% %%%%%%% %%%%                        !!!!!  !!!           !!!  !                      ####   ##             ##  #                            $ $$$$$$$$$$$$  $$                              ", 
-  "                                 %%%      %%%                             !!!!!!     !!!!!!!      !!                      # #####    #########     ###                              $$$$$ $$$$$                                  ", 
-  "                                                                           !!!!!   !!!       !!!!!!!!                       ######  ###       ########                                                                           ", 
-  "                                                                              !!   !!!!!!!!!! !!!!!!                           ##   ########## ######                                                                            ", 
-  "                                                                                   !!!!!! !!! ! !                                   ##### #### # ##                                                                              ", 
-  "                                                                                      !!! !!                                           ## ####                                                                                   ", 
+  "                                                                                      !!!                                               ##                                                                                       ", 
+  "                                                                                  !!  !!!!!!!!                                      #  ########                                                                                  ", 
+  "                                                                             !!!!!!!  !!!!!!!!!! !!!                          #######   #############                                                                            ", 
+  "                                                                            !!!!!!!!   ! ! !!!!!  !!!                         ########  ########## ###                                                                           ", 
+  "                                                                          !!  !!!  !!!!!!!!!!!   !!!!!!!                    ## ####   ########     ####                                $$$$$$                                    ", 
+  "                                %%          %%%                          !!!!   !!              !  !!!!!                  #### # ##             ##  #####                         $$           $$$                               ", 
+  "                             %% %%  %%%%% %     %%                      !!!!!!!                   !! !!                  ##### #                   ## ###                      $$     $$$$$$$$     $                             ", 
+  "                           %   %%%%%%% %%%%%%%%   %%                   !!!  !                       !!!                 #### #                       ####                    $        $$$$$$$$$$ $$$ $                           ", 
+  "                          %  %% %%%%%%%%%%%%%%%%% % %                 !!! !                           !                #### #                          #                    $         $$$$$$$$$$  $$$  $                         ", 
+  "                        %  %%%%  %%         %%%%% %%%%              !!!!!!                             !  !!!        ######                             #    #                                 $ $$$$$  $                        ", 
+  "                       %  %%%%%                %% %%%               !!! !                               ! !!!        ####                                # ####                                   $$$$$$ $                       ", 
+  "                         %%%%%                    %%%% %              !                                  ! !!!         # #                                #####          $                          $$$$  $                      ", 
+  "                      % %%%%                       %%%% %              !                                 ! !!!          #                                    ##         $                             $   $                      ", 
+  "                       %%%%                         %%%%                                                  ! !!                                             # ###                                           $                     ", 
+  "                     % %%%                           %%               !                                   !!!!!                                            # ##                                            $                     ", 
+  "                     %  %%      &&&&&  &     &&      %% %%            '''''      ''''' '''''' ''          !!!!         #          (((((( (((( ( ((           ###       $  $       )))))) )))))  ))         $                     ", 
+  "                     %% %%  &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          !!!          ''''''''' '' ''          ! !        ###          ((((((((((((( ((           #         $ $$$      ))))))))))))) ))))))))))))                     ", 
+  "                     %%%%%      &&&&& &&&  & &        %% %        !!!!!                  '                ! !!!     ###                 (  (               # ###         $$$      ) )) )))))    ))         $                     ", 
+  "                     % %%%                           %%%           !!!                                      !!!     ###                                    # ###         $$$                               $                     ", 
+  "                       %%%                          %%%%%          !!! !                                 ! !!!      ### #                                   ###         $$$$$                         $$                         ", 
+  "                      %%%%%                        %%%% %          !!!                                     !!!      ####                                  # ###            $$$                        $$$$$                      ", 
+  "                       %%%%%                        %% %            !!! !                               ! !!!        ### #                               # ###           $ $$$                     $$$$$$$                       ", 
+  "                        %%%%%% %                 %%   %              !!! !                             ! !!!!         ### #                             #  ###            $ $$$$ $$               $$$$$$$                        ", 
+  "                         %% %% %%%            %%%%%% %               !!!!  !                          !!!!!!           ###  #                          # ####              $  $$ $$$            $$ $$$$$                         ", 
+  "                          % %% %%%%%%%   %%%%%%%%%% %                 !!! ! !                       !  !!!!            ### # #                       ## #####                $   $$$$$$$$$$$$$$$$$  $ $                          ", 
+  "                            %  %%%%%%%    %%%%%%  %                    !  !!! !                   !     !!              ## ### #                   ##    ##                   $$ $$$$$$ $$$$$ $$$$  $                            ", 
+  "                              %%  %%%%    %%%  %%                         !!!   !!!           !!!  !!                      ###   ##             ##  #    ##                      $   $$$$$$$$$   $$                              ", 
+  "                                 %%%      %%%                            !!!!!!!     !!!!!!!   ! !!!                       ######    #########     ###                              $$$$$ $$$$$                                  ", 
+  "                                                                           !!!!!   !!        !!!!!!!!                       ######  ##        #########                                                                          ", 
+  "                                                                             !!!   !!!!!!!!!! !!!!!!                           ##   ########## ######                                                                            ", 
+  "                                                                                   !!!!!! !!!  !!                                   ##### ####  ###                                                                              ", 
+  "                                                                                     !!!! !                                           ### ####                                                                                   ", 
   "                                                                                                                                                                                                                                 ", 
   "                                                                                                                                                                                                                                 ", 
   "                                                                                                                                                                                                                                 ", 
diff --git a/tests/visual_tests/grids/line-offset-900-250-2.0-grid-reference.json b/tests/visual_tests/grids/line-offset-900-250-2.0-grid-reference.json
new file mode 100644
index 0000000..cf192a2
--- /dev/null
+++ b/tests/visual_tests/grids/line-offset-900-250-2.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "2", 
+  "4", 
+  "1", 
+  "7", 
+  "8", 
+  "6", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                              !!!!!                                            ####                                                                              ", 
+  "                                                                                 !!!!!!!!!!!  !!!!!!                              ###########  ######                                                                            ", 
+  "                                                                         !!! !!!!!!!!!!!!!!!    !!!!!                      ##  ###############   ####                                                                            ", 
+  "                                                                        !!!! !!!!!! !!!!!!!!   !!!!!!!                    ########## #########   ######                                                                          ", 
+  "                                                                        !!!!!!! !!! !!!!!!!!   !!!!!!!!!                 ####### ############   #########                                                                        ", 
+  "                                                                        !!!!!!!!!!! !!!! !!!   !!!!!!!!!!!!!             ############## # ###   #############                                                                    ", 
+  "                                                                         !! !!!!!              !!!!!!!!!!!!!              #########             #############                                                                    ", 
+  "                                     $$$$$                                !!!!     !!!!!!!!!!!    !!!!!!!!!!               ####      ##########    ###### ####                        %%%%%%%                                    ", 
+  "                                $$$         $$$                           !!!  !!!             !!!    !!!!!!               ###   ###            ###  #########                   %%%%          %%%                               ", 
+  "                             $$                 $$                           !!                   !!  !!!!                     ##                  ##  ####                    %%                 %%%                            ", 
+  "                           $$                     $$                       !!                       !!  !!                   #                       ##  ##                  %%                      %                           ", 
+  "                         $$                         $                     !                           !                    ##                          #  #                 %                         %%                         ", 
+  "                        $                            $$                  !                             !                  ##                            #                 %%                            %                        ", 
+  "                       $                              $$                !                               !                #                               #               %%                              %                       ", 
+  "                      $$                               $               !                                 !               #                                #              %                                %                      ", 
+  "                      $                                 $              !                                 !              #                                 #             %                                 %                      ", 
+  "                     $                                  $             !    &&&&&& &     &                 !             #                                  #            %                                  %                     ", 
+  "                     $   '''''''''    ''          '''    $            !   &&&&&&&&&   &&&& && &    &&&&   !            #  ((((((((((((     (          (((( #           %  ))))))))))))     )          )))) %                     ", 
+  "                     $   '''''''''   '''' '   ''' ''''   $            &&&&&&&&&&&&&&&&&&&&&&& &&&& &&&&   !            #( ((((( ((((((   ((((((( (((( (((( #           % )))))))))))))   ))))))) )))  )))) %                     ", 
+  "                     '''''''''''''''''''''''''''''''''''''            !   && &&&&&&   &&&&&&  &&&& &&&&   !            #  ((((( ((((((   ((((((  ((( (((((((           % ))  ))  )))))))))))))))))))))))))))                     ", 
+  "                     $   '''''''''' ''''''' ''''' ''''   $            !   &&&&&&&&&&& &&&&&&  &&&  &&&&   !            #  (((((((((((((( ((((((  (((( (((( #           %  )))))))))))))  ))))))  )))) )))) %                     ", 
+  "                     $   ''''''''''  '''''     '' ''''   $                         &     &&         &&    !             #  (( ((((((( (  ((((((        ((  #              ))) )))))))))  ))))))  )    )))) %                     ", 
+  "                                        ''              $              !                                 !              #                   ((                          %                   ))                                   ", 
+  "                      $                                 $              !!                                !               #                                #             %                                 %                      ", 
+  "                       $                               $                !                               !                #                               #               %                               %                       ", 
+  "                       $$                             $                  !                             !                  #                             #                 %                             %                        ", 
+  "                        $$                           $                    !!                         !!                    ##                          #                   %                           %                         ", 
+  "                          $                        $$                  !!!  !                       !                   ###  #                       ##                     %%                       %%                          ", 
+  "                           $$                    $$                   !!!!!   !!                 !!!                   #####  ##                   ##                         %%                   %%                            ", 
+  "                              $$               $$                     !!!!!     !!!           !!!    !                 #####     ###            ###                             %%%             %%%                              ", 
+  "                                 $$$$$  $$$$$$                      !! !!           !!!!!!!!!       !!!!              # ####         ##########       ###                           %%%%%%%%%%%%                                 ", 
+  "                                                                    !!!!!!!!!!                      !!!!              #########                      ####                                                                        ", 
+  "                                                                     !!!!!!!!!!!!         !!!!!  !!!!!!!              ############         #####  #######                                                                        ", 
+  "                                                                       ! !!!!!!!!!!! !!!  !!!!!!!!!!! !!!!             ##### ########      ########### ####                                                                      ", 
+  "                                                                         !!!!!! !!!!!!!!!   !!!!!! !!!!!!                 ################   ##############                                                                      ", 
+  "                                                                          !!!!!!!!!!!!!!!   !!!!!!!!!!!                    ##### #########   ###########                                                                         ", 
+  "                                                                             !!!! !!!!!!!   !!!!!!!!                          ############   #########                                                                           ", 
+  "                                                                                ! !!!!!!    !!!!!!                              ## #######   ######                                                                              ", 
+  "                                                                                     !!!                                              ####   ##                                                                                  ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-opacity-multi-render-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/line-opacity-multi-render-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..e61cb86
--- /dev/null
+++ b/tests/visual_tests/grids/line-opacity-multi-render-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "61"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!                                                   !!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-opacity-multi-render-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/line-opacity-multi-render-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..6f52fae
--- /dev/null
+++ b/tests/visual_tests/grids/line-opacity-multi-render-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "61"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-pattern-smooth-and-offset-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/line-pattern-smooth-and-offset-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..bc60a27
--- /dev/null
+++ b/tests/visual_tests/grids/line-pattern-smooth-and-offset-500-100-1.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                      !! ! !! !!!!!!!!! !!!!!!!!! !! !!!                                     ", 
+  "                                                     !! !! !!!!!!!! !! !!!!! !!!!! !! !!                                     ", 
+  "                                                     !! !!!!!!  !!!    !!!     !!!! !! !!                                    ", 
+  "                                                     !! ! !!!!  !!!   !!!!!!!!  !!!! !! !!                                   ", 
+  "                                                    !! !! !!!   !!!!!!!!!!!!!!!  !!! !!! !!                                  ", 
+  "                                                    !! !!!!!!  !!!!!!! !!!!   !!! !!! !! !!!                                 ", 
+  "                                                    !! !!!!!  !!!!    !!!!     !! !!!! !! !!                                 ", 
+  "                                                   !! !!!!!! !!!!!!  !!!! !!!!  !! !!!! !! !                                 ", 
+  "                                                   !! !!!!!! !! !!! !!!!!!!!!!!  !!!!!!!!!!                                  ", 
+  "                                                   !! !!!!! !!  !!!!!!!! !!   !! !! !!!!                                     ", 
+  "                                            !     !! !!!!!! !!  !! ! !! !!     !! !!!! !                                     ", 
+  "                                        !!!!!!!!  !! !!!!!!!!    !!!!! !!!     !! !! !!                                      ", 
+  "                                       !!!!   !!!!! !!!! ! !! !!! !!! !!!       !! !!                                        ", 
+  "                                      !!! !!!!! !!! !!!!!! !! !!!!   !!!        !! !!                                        ", 
+  "                                     !! !!!!!!!!   !! !!!!!!  !!!!!!!!!          !!                                          ", 
+  "                                    !! !!!     !!  !!!! !!!! !!    !                                                         ", 
+  "                                   !! !!! !!!!! !!!! !!!! !! !!                                                              ", 
+  "                                  !! !!! !!! !!!!!! !! !!!! !!                                                               ", 
+  "                                  ! !!! !!!!!!!!!!! !! !!!! !!                                                               ", 
+  "                                    !! !!!!!!!!!!!!!!!!! !! !!                                                               ", 
+  "                                    ! !!!!!    !!!!!! !!!! !!                                                                ", 
+  "                                     !!!!!  !!! !! !! ! !! !!                                                                ", 
+  "                                       !!  !!!!!!! ! !! !!!!                                                                 ", 
+  "                                       !! !!  !!!! ! !!!! !!                                                                 ", 
+  "                                         !!   !! !!!!! !! !!                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-pattern-smooth-and-offset-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/line-pattern-smooth-and-offset-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..70bccf1
--- /dev/null
+++ b/tests/visual_tests/grids/line-pattern-smooth-and-offset-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                          !                                                     ", 
+  "                                                              !!!!!!!! !! !!  !                     !!!!!                       ", 
+  "                                                            !!!!!!!!!!!!!!!!!!!!   !!              !!!!!!!!                     ", 
+  "                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!          !!  !! !!!                    ", 
+  "                                                    !!!!!!!!! !!!!! !!         !!!!!!!!! !!      !! !!!!! !!!                   ", 
+  "                                                 !!!!!!    ! !!! !!!!!             !!!!!!!!     !! !!!  !! !!                   ", 
+  "                                               !!!!!      !! !!!!!!! !!                !!!!!!  !! !!!!!!!!! !!                  ", 
+  "                                             !!!!         !!!!!!! !! !!                   !!!!!!!!!!!!!!!!!! !!                 ", 
+  "                                           !!!!!         !! !!!!   !! !                      !!!!!!       !!!!!!                ", 
+  "                                         !!!!!!!         !! !!!    !! !!                     !!!!!!!       !!!!!!               ", 
+  "                                       !!!!!! !!         ! !!!     !!!!!                    !!!!!!!!!!!!!!  !!!!!               ", 
+  "                                     !!!!   !! !        !! !!!   !!!!!!!                   !!!!!!!! !!!!!!!! !!!!!              ", 
+  "                                    !!!  !! !!          !!!!!   !!!!!! !!                  !!!!!!  !!!!!!!!!!!!!!!!             ", 
+  "                                  !!!!  !!!            !! !!   !!  !!! !!                 !!!!!    !!!!!!!!!!!!!!!!!            ", 
+  "                                 !!!      !            !! !!  !!    !!!!!                !!!!!  !!!!!!!!!!!!!!!!! !!!           ", 
+  "                                !!!  !                 !!!!  !!!    !!! !               !!!!!! !!!!!!   !!!!!!!!!! !!           ", 
+  "                              !!!    !                !!!!!  !!     !!! !!              !!!!! !!!  !      !!!!!!!!!!!!          ", 
+  "                             !!!                      !!!!  !!   !!  !!!!!             !!!!! !!  !          !!!!!!!!!!!         ", 
+  "                            !!!  !!                  !! !! !!!  !!!! !!!!!            !!!!!!!!               !!!!!!!!!!!        ", 
+  "                           !!!  !!!!                 !!!!! !!!!!!! !!!!! !!          !!!!!!!!!                !!! !!! !!!       ", 
+  "                          !!   !!!                   !!!! !! !!!!  !!!!! !!         !!! !! !! !!               !!!!!!!!!!       ", 
+  "                         !!  !!!!!                  !!!!! !!  !!   !! !!!!!        !!! !!!!!  !!                !!! !!!!!!      ", 
+  "                        !! !!!!!                    !!!!!!!!!!!!    !!!!! !!     !!!! !!!!!!                     !! !!!!!!!     ", 
+  "                       !!  !! !!                   !! !! !!  !! !!  !!!!!  !!!!!!!!  !!! !!                       !! !!!!!!!    ", 
+  "                      !!  !!!!                     !!!!!!!  !!  !!  !!!!!!  !!!!!   !!!!!! !! !                   !!! !!!!!!!   ", 
+  "                     !!   !!                       !!!! !! !!!  !!   ! !!!         !!!! !!   !!                    !! !!!!!!!   ", 
+  "                    !!  !!!!                      !! !!!!  !!   !!!! !!!!!!       !!!! !!  !!!                      !! !!!!!!!! ", 
+  "                   !!   !!!                       !!!!!!! !!      !  !!!! !!!!!!!!!!!!!!!  !!!                      !!!!!!!!!!!!", 
+  "                  !!     !!                      !! !!!!  !!     !!! !! !! !!!!!!  !! !! !!                          !! !!!!!!!!", 
+  "                 !!                              !! !!!! !!!          !!!!        !! !! !!!!                          !!!!!!!!!!", 
+  "                !!!                              !!!! !! !!       !!  !! !!     !!! !!! ! !!                          !! !! !!!!", 
+  "               !!!                              !! !!!!  !!       !!  !! !!!! !!!!!!!!!!!!                             !! !!!!! ", 
+  "               !!                               !! !!!! !!         !!! !!!!!!!!!!! !!  !!                              !! !! !!!", 
+  "              !!                                ! !! !! !!!        !!! !! !!  !!! !! !! !                               !!!! !!!", 
+  "             !!                                !! !!!! !!!         !! ! !!!!!!!! !!  !!!                                !! !! !!", 
+  "            !!!                                !! !!!! !!!!          !! !!! !!! !!!! !!!                                 !!!! !!", 
+  "           !!!                                !! !!!!! !!!!          !   !!!! !!! !!!                                    !! !!!!", 
+  "           !!                                 !! !!!! !!!!               !!!!!!!! !!!                                     !!!! !", 
+  "          !!  !!!                             !! !!!! !!!!                   !! !!                                        !! !!!", 
+  "         !!!  !!!                            !! !!!!! !! !                      !                                         !! !! ", 
+  "         !! !  !!                            !! !!!! !!!!                                                                  !!!! ", 
+  "        !!  !!!!                            !! !!!!! !!                                                                    !!   ", 
+  "       !!     !                             !! !!!!! !!!!                                                                       ", 
+  "       !!  !!                               !! !!!!!!!                                                                          ", 
+  "      !!   !!                              !! !!!!! !!!!                                                                        ", 
+  "     !!    !                               !! !!!!! !!!!                                                                        ", 
+  "     !!                                   !! !!!!!!!!                                                                           ", 
+  "    !!                                    !! !!!!! !!                                                                           ", 
+  "   !!!  !!                                !! !!!!! !!                                                                           ", 
+  "   !!                                    !! !!!!!!!!                                                                            ", 
+  "  !!                                     !! !!!!! !!                                                                            ", 
+  "  !! !!                                 !! !!!!!! !!                                                                            ", 
+  " !!  !!!   !!!!                         !! !!!!!! !                                                                             ", 
+  "!!! !!   !!!!!!!!                       !! ! !!! !!                                                                             ", 
+  "!!  !!! !!!    !!!!                    !! !!!!!! !!                                                                             ", 
+  "!  ! !!!!! !!!!! !!!!                  !! !!!!!! !                                                                              ", 
+  "!  !!!!!! !!! !!!! !!!!               !! !! !!!!!!                                                                              ", 
+  " !!!!!!! !! !!!!!!!! !!!!             !! !!!!!! !!                                                                              ", 
+  " !!!!!! !!!!!!!!!!!!!! !!!!          !! !! !!!! !!!!                                                                            ", 
+  "!! !!! !!!!!       !!!!! !!!!        !! !! ! !!!!!!!                                                                            ", 
+  " !!!! !!!!  !!!!!!! !!!!!! !!!       !! !!!!!! !!                                                                               ", 
+  "!!!! !!!  !!!!!!!!!!  !!!!!! !!     !! !! !!!! !!!!                                                                             ", 
+  "!!! !!!  !!!!     !!!  !! !!! !!    !! !!!! !!!! !                                                                              ", 
+  "!! !!!  !!!  !!!!!  !!  !! !! !!   !! !! !!!! !!!                                                                               ", 
+  "! !!!! !!  !!!!!!!!  !!  !! ! !!   !! !! !!!! ! !                                                                               ", 
+  " !!!! !!  !!!     !!! !!  !!!!!!   !!!! !! ! !!                                                                                 ", 
+  "!!!! !!  !!!       !!! !! !!!!!!  !! !! !!!! !!                                                                                 ", 
+  "!!! !!! !!          !!! !!!!!! !! !!!! !! !!!!!                                                                                 ", 
+  " !! !! !!            !! !!!!!! !!!! !! !!!! !!!                                                                                 ", 
+  "!! !! !!             !! !!!! !!!!!  !!!! !! !!                                                                                  ", 
+  "!!!! !!!             !! !!!! !!    !! !! !!!!                                                                                   ", 
+  "  !! !!              !! !! !!!!!  !!!!! !! !!!!                                                                                 ", 
+  "  ! !!                !!!!!!! !!!!!! !!!!! !!!                                                                                  ", 
+  "   !!                 !! !!!!!      !!!!! !!!                                                                                   ", 
+  "    !                  !! !!!!!    !!!!! !!!!                                                                                   ", 
+  "                        !! !!!!!!!!!!! !!!!                                                                                     ", 
+  "                         !! !!!!!!!!! !!!!!!                                                                                    ", 
+  "                          !! !!! !!! !!!! !!                                                                                    ", 
+  "                           !! !!!!! !!!!!!                                                                                      ", 
+  "                            !!    !!! !! !                                                                                      ", 
+  "                             !!!!!!!!!!!!                                                                                       ", 
+  "                              !!!!  !!!                                                                                         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-pattern-smooth-and-offset-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/line-pattern-smooth-and-offset-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..d7376ae
--- /dev/null
+++ b/tests/visual_tests/grids/line-pattern-smooth-and-offset-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                                                                !!!!!!!!!!!!!!!!                      !!!!!!                    ", 
+  "                                                             !!!!!!!!!!!!                                                       ", 
+  "                                                          !!!!!!!!!!!        !!!                    !!!!!!                      ", 
+  "                                                        !!!!!!!!!!!!!!  !!! !!!! !!!             !!!!!!!!!!!                    ", 
+  "                                                      !!!!!!!!!!!!!!!!!!!!! !!!!!!!!            !!!!!!!!!!!!!!                  ", 
+  "                                                    !!!!!!!!!!!  !!!!!!!!!!  !! !!!!!!!!       !!!!!!!  !!!!!!!                 ", 
+  "                                                  !!!!!!!!!!        !!!!!!!  !!  !! !!!!      !!!!!        !!!!!                ", 
+  "                                                !!!!!!!!!!!   !!!!    !!!!!  !! !!  !!!! !!!!!!!!    !!!!   !!!!!               ", 
+  "                                               !!!!!! !!!!  !!!!!!!!   !!!!  !  !!  !!!! !!!!!!!!! !!!!!!!!  !!!!               ", 
+  "                                             !!!!!!!  !!!  !!!!!!!!!!   !!!         !!!! !!!!!!!!!!!!!!!!!!!  !!!!              ", 
+  "                                           !!!!!!!   !!!!  !!!!! !!!!!  !!!!             !!!!!!!!!!!!! !!!!!!  !!!!             ", 
+  "                                          !!!!!!     !!!  !!!!   ! !!!! !!!!             !!!!!!!!!!!     !!!!   !!!!            ", 
+  "                                        !!!!!!!     !!!!  !!!  !!!!!!!!  !!!             !!!! !!!!!!!!!!! !!!!  !!!!!           ", 
+  "                                       !!!!!!       !!!! !!!! !!!!!!!!!! !!!!           !!!!  !!!!!!!!!!!!!!!!!  !!!!           ", 
+  "                                      !!!!!         !!!  !!!!!!!!!!!!!!! !!!!          !!!!  !!!!!!!!!!!!!!!!!!!  !!!!          ", 
+  "                                    !!!!!!         !!!!  !!! !!!! !!!!!!  !!!          !!!! !!!!!!!!! !!!!!!!!!!!  !!!!         ", 
+  "                                   !!!!!           !!!  !!!!!!!!  !!!!!!! !!!         !!!!  !!!!!!!       !!!!!!!   !!!!        ", 
+  "                                 !!!!!!!          !!!!  !!!!!!!   !!!!!!! !!!!       !!!!  !!!!!!           !!!!!!  !!!!!       ", 
+  "                                !!!!!!!!          !!!! !!!!!!!!    !!!!!!  !!!      !!!!! !!!!!!             !!!!!!  !!!!!      ", 
+  "                               !!!!!!!!!          !!!  !!!!!!!     !!!!!!  !!!     !!!!!  !!!!!              !!!!!!!  !!!!      ", 
+  "                             !!!!!!!!!!!         !!!!  !!!!!!      !!!!!!! !!!!  !!!!!!  !!!!!!  !!!!!!!!!    !!!!!!!  !!!!     ", 
+  "                            !!!!!!  !!!          !!!  !!!!!!       !!!!!!! !!!!!!!!!!!  !!!!!! !!!!!!!!!!!!!  !!!!!!!!! !!!!    ", 
+  "                           !!!!!!!!!            !!!!  !!!!!!        !!!!!!  !!!!!!!!!  !!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!   ", 
+  "                          !!!!! !!!!            !!!! !!!!!!       ! !!!!!!   !!!!!!    !!!!!!!!!!!      !!!!!!!   !!!!!! !!!!!  ", 
+  "                         !!!!!  !!!             !!!  !!!!!!     !!!!!!!!!!!           !!!!!!!!!!          !!!!!!   !!!!!  !!!!  ", 
+  "                       !!!!!!!  !!             !!!!  !!!!!     !!!!!!!!!!!!          !!!!!!!!!!             !!!!! !!!!!!!  !!!! ", 
+  "                      !!!!!!!!                 !!!  !!!!!!    !!!!!!!!!!!!!         !!!!!!!!!!!              !!!!!!!!!!!!!!!!!!!", 
+  "                     !!!!!!!!!                !!!!  !!!!!     !!!!!!!!!!!!!!       !!!!!!!!!!!    !!!!!!      !!!!!!!!!!!!!!!!!!", 
+  "                    !!!!!!!!!!                !!!! !!!!!!    !!!!  !!!!! !!!      !!!!!!!!!!!   !!!!!!!!!!     !!!!   !!!!!!!!!!", 
+  "                   !!!!!                      !!!  !!!!!!   !!!!   !!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!    !!!!   !!!!!  !!", 
+  "                  !!!!!                      !!!!  !!!!!    !!!!   !!!!!! !!!!!!!!!!!!!!!!!!  !!!!!   !!!!!!!    !!!!  !!!!!!  !", 
+  "                 !!!!!                       !!!  !!!!!!   !!!!    !!!!!!  !!!!!!!!  !!!!!!  !!!!        !!!!!    !!!!  !!!!!   ", 
+  "                !!!!!                        !!!  !!!!!!   !!!      !!!!!    !!!    !!!!!!! !!!!          !!!!!   !!!!  !!!!!!  ", 
+  "               !!!!!!!                      !!!! !!!!!!   !!!!      !!!!!!         !!!!!!!  !!!!            !!!!   !!!!  !!!!!! ", 
+  "              !!!!!!!!                      !!!  !!!!!!   !!!       !!!!!!        !!!!!!!  !!!!              !!!!   !!!  !!!!!!!", 
+  "             !!!!! !!                      !!!!  !!!!!!  !!!!        !!!!!!       !!!!!!! !!!!               !!!!!  !!!!  !!!!!!", 
+  "            !!!!!                          !!!! !!!!!!   !!!     !!  !!!!!!     !!!!!!!!  !!!!                !!!!   !!!! !!!!!!", 
+  "           !!!!!                           !!!  !!!!!!  !!!!    !!!! !!!!!!!   !!!!!!!!  !!!!                  !!!!  !!!!  !!!!!", 
+  "          !!!!!                           !!!! !!!!!!!  !!!    !!!!!  !!!!!!!!!!!!!!!!! !!!!                    !!!!  !!!! !!!!!", 
+  "         !!!!!!!                          !!!  !!!!!!! !!!!    !!!!!! !!!!!!!!!!!!!!!!  !!!!                    !!!!  !!!!  !!! ", 
+  "        !!!!!!!!!!                       !!!!  !!!!!!  !!!    !!!!!!! !!!! !!!!! !!!!  !!!!                      !!!!  !!!! !!!!", 
+  "       !!!!! !!!!!                       !!!! !!!!!!!  !!!    !!!!!!!  !!!!     !!!!  !!!!                        !!!  !!!!  !!!", 
+  "      !!!!!!!  !!!                       !!!  !!!!!!! !!!!   !!!! !!!  !!!!!  !!!!!   !!!!                        !!!!  !!!  !!!", 
+  "      !!!!!!!!                          !!!!  !!!!!!  !!!    !!!! !!!!  !!!!!!!!!!!  !!!!                          !!!! !!!!  !!", 
+  "     !!!! !!!!!                         !!!  !!!!!!! !!!!   !!!!   !!!!  !!!!!!!!!  !!!!                           !!!!  !!!  !!", 
+  "    !!!!  !!!!!                        !!!!  !!!!!!! !!!!   !!!!   !!!!   !!!!!!   !!!!                             !!!  !!!! !!", 
+  "   !!!!   !!!!!                        !!!! !!!!!!!! !!!   !!!!     !!!!!         !!!!!                             !!!!  !!!   ", 
+  "  !!!!!!!  !!!                         !!!  !!!!!!!  !!!   !!!!      !!!!!!    !!!!!!!                               !!!  !!!!  ", 
+  " !!!!! !!!!!                          !!!!  !!! !!! !!!!   !!!        !!!!!!!!!!!!!!!                                !!!! !!!!  ", 
+  " !!!!  !!!!!                          !!!  !!!!!!!! !!!   !!!!         !!!!!!!!!!!!                                   !!!  !    ", 
+  "!!!!!! !!!!!                         !!!!  !!! !!!  !!!   !!!             !!!!!!!                                     !!!!      ", 
+  "!!!!!!!  !!                          !!!! !!!! !!! !!!!  !!!!                                                          !!!      ", 
+  "!! !!!!                              !!!  !!!!!!!! !!!   !!!                                                           !        ", 
+  "!!! !!!!!  !!!!                     !!!!  !!! !!!! !!!   !!!                                                                    ", 
+  "!!!!! !!!!!!!!!!!!                  !!!  !!!! !!! !!!!  !!!!                                                                    ", 
+  " !!!! !!!!!!!!!!!!!!               !!!!  !!!  !!! !!!   !!!                                                                     ", 
+  "  !!!!!!!!!!!!!!!!!!!!             !!!! !!!! !!!! !!!  !!!!                                                                     ", 
+  "   !!!!!!!       !!!!!!!           !!!  !!!! !!! !!!!  !!!!                                                                     ", 
+  "!!!!!!!!    !!!    !!!!!!!        !!!!  !!!  !!! !!!!  !!!                                                                      ", 
+  "!!!!!!!  !!!!!!!!    !!!!!!!      !!!  !!!! !!!! !!!  !!!!                                                                      ", 
+  "!!!!!!  !!!!!!!!!!!    !!!!!!!   !!!!  !!!  !!! !!!!  !!!!                                                                      ", 
+  "!!!!!  !!!!!!!!!!!!!!    !!!!!!! !!!  !!!!  !!! !!!!  !!!                                                                       ", 
+  "!!!!  !!!!!     !!!!!!!    !!!!!!!!!  !!!! !!!! !!!  !!!!                                                                       ", 
+  "!!!  !!!!!  !!!!!!!!!!!!!    !!!!!!!  !!!  !!! !!!!  !!!!                                                                       ", 
+  "!!  !!!!! !!!!!!!!!!!!!!!!!    !!!!  !!!! !!!! !!!!  !!!                                                                        ", 
+  "!  !!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!  !!!  !!!! !!!  !!!!                                                                        ", 
+  "  !!!!!!!!!!!!   !!!!!! !!!!!!!  !  !!!!  !!!  !!!  !!!                                                                         ", 
+  " !!!!!!!!!!        !!!!!  !!!!!     !!!  !!!! !!!!  !!!                                                                         ", 
+  "!!!!!!!!!!          !!!!!   !!!!   !!!!  !!!! !!!  !!!!                                                                         ", 
+  "!!!!!!!!      !!!!   !!!!!   !!!   !!!!  !!! !!!!  !!!                                                                          ", 
+  "!!!!!!!     !!!!!!!    !!!!  !!!!  !!!  !!!! !!!!  !!!                                                                          ", 
+  "!!!!!!    !!!!!!!!!!!   !!!! !!!! !!!!  !!!  !!!  !!!!                                                                          ", 
+  "! !!!!   !!!!!! !!!!!!   !!!  !!! !!!  !!!! !!!!  !!!                                                                           ", 
+  " !!!!   !!!!!     !!!!!  !!!! !!!!!!!  !!!  !!!! !!!!                                                                           ", 
+  "!!!!   !!!!!       !!!!  !!!! !!!!!!! !!!!  !!!  !!!!                                                                           ", 
+  "!!!!  !!!!     !!   !!!! !!!  !!!!!!  !!!! !!!!  !!!!!!                                                                         ", 
+  "!!!  !!!!    !!!!!   !!! !!!   !!!!!  !!!  !!!  !!!!!!!                                                                         ", 
+  "!!  !!!!!   !!!!!!!  !!! !!!!  !!!   !!!! !!!!  !!!!!!!                                                                         ", 
+  " !  !!!!   !!!!!!!!  !!!  !!!!       !!!  !!!! !!!!!!!!                                                                         ", 
+  "   !!!!   !!!!!!!!!  !!!  !!!!      !!!!  !!!  !!!!                                                                             ", 
+  "  !!!!   !!!!!! !!!  !!!!  !!!!    !!!!  !!!!  !!!                                                                              ", 
+  "    !!  !!!!!!!!!!!!  !!!! !!!!!!!!!!!! !!!!  !!!!!!!                                                                           ", 
+  "       !!!!! !!!!!!!  !!!!! !!!!!!!!!!!!!!!!  !!!!!!!                                                                           ", 
+  "      !!!!!      !!!!  !!!!! !!!!!!!!!!!!!   !!!! !!!                                                                           ", 
+  "       !!!      !!!!!!  !!!!!  !!!  !!!!!   !!!!  !!                                                                            ", 
+  "        !      !!!!!!!!  !!!!!    !!!!!!   !!!!!!                                                                               ", 
+  "               !!  !!!!!  !!!!!!!!!!!!!  !!!!!!!!                                                                               ", 
+  "                   !!!!!!  !!!!!!!!!!   !!!!!  !!                                                                               ", 
+  "                 !!!!!!!!!   !!!!!!!   !!!!!                                                                                    ", 
+  "                 !!!  !!!!!    !!    !!!!!!                                                                                     ", 
+  "                     !!!!!!!!       !!!!!!                                                                                      ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!                                                                                     ", 
+  "                    !!!!  !!!!!!!!!!!!! !!!                                                                                     ", 
+  "                    !!!! !!!!!!!!!!!!   !!                                                                                      ", 
+  "                      !  !!!!! !!!                                                                                              ", 
+  "                         !!!!!  !!                                                                                              ", 
+  "                          !!!!  !!!                                                                                             ", 
+  "                                !!!                                                                                             ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-pattern-symbolizer-900-250-1.0-grid-reference.json b/tests/visual_tests/grids/line-pattern-symbolizer-900-250-1.0-grid-reference.json
new file mode 100644
index 0000000..8d2d83b
--- /dev/null
+++ b/tests/visual_tests/grids/line-pattern-symbolizer-900-250-1.0-grid-reference.json
@@ -0,0 +1,78 @@
+{
+ "keys": [
+  "", 
+  "4", 
+  "3", 
+  "2", 
+  "1", 
+  "7", 
+  "8", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                   !!!!!!!!!                                      #############                                     $$$$$$$$$$$$                                    %%%%%%%%%%%                                  ", 
+  "                               !!!!!!!!!!!!!!!!!                              #####################                             $$$$$$$$$$$$$$$$$$$$                            %%%%%%%%%%%%%%%%%%%                              ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!                         #########################                         $$$$$$$$$$$$$$$$$$$$$$$$                        %%%%%%%%%%%%%%%%%%%%%%%                            ", 
+  "                          !!!!!!!!!!!    !!!!!!!!!!!!                      ########           #########                     $$$$$$$$$         $$$$$$$$$$                    %%%%%%%%%%       %%%%%%%%%%                          ", 
+  "                         !!!!!!!               !!!!!!!                   #######                 #######                   $$$$$$                 $$$$$$$                  %%%%%%%               %%%%%%%%                        ", 
+  "                       !!!!!!                    !!!!!!                 ######                     ######                 $$$$$                     $$$$$$                %%%%%                     %%%%%%                       ", 
+  "                      !!!!!!                       !!!!!               #####                         #####               $$$$$                        $$$$$              %%%%%                        %%%%%                      ", 
+  "                      !!!!                          !!!!!             #####                           #####             $$$$                           $$$$$            %%%%                           %%%%%                     ", 
+  "                     !!!!                             !!!!            ####                             ####            $$$$                             $$$$           %%%%                             %%%%                     ", 
+  "                    !!!!                              !!!!           ####                               ####           $$$                               $$$$          %%%%                              %%%%                    ", 
+  "                    !!!!                               !!!!          ####                               ####          $$$$                                $$$         %%%%                               %%%%                    ", 
+  "                    !!!                                !!!!          ###                                 ###          $$$$                                $$$         %%%%                                %%%                    ", 
+  "                    !!!                                 !!!          #&&&&&                              ###          $$$                                 $$$         %%%                                 %%%                    ", 
+  "                    !!!     ''''''''''''''''''''''''''''''!          ###                                 ###          $$$                                 $$$         %%%                       ((((((((((((%                    ", 
+  "                    !!!                                 !!!          ###                                 ###          $$$$                                $$$         %%%                                 %%%                    ", 
+  "                    !!!                                !!!!          ####                               ####          $$$$                                $$$         %%%%                                %%%                    ", 
+  "                    !!!!                               !!!            ###                               ####           $$$                               $$$$          %%%                               %%%%                    ", 
+  "                     !!!!                             !!!!            ####                             ####            $$$$                             $$$$           %%%%                             %%%%                     ", 
+  "                     !!!!                            !!!!!             ####                           ####              $$$$                           $$$$$            %%%%                           %%%%%                     ", 
+  "                      !!!!!                         !!!!!              #####                         #####               $$$$                         $$$$$             %%%%%                         %%%%%                      ", 
+  "                       !!!!!                       !!!!!                ######                     ######                $$$$$$                     $$$$$$               %%%%%%                      %%%%%                       ", 
+  "                        !!!!!!                   !!!!!!                   #######                #######                   $$$$$$                 $$$$$$$                 %%%%%%%                  %%%%%%                        ", 
+  "                         !!!!!!!!             !!!!!!!!                     ##########       ##########                      $$$$$$$$$          $$$$$$$$$                    %%%%%%%%           %%%%%%%%%                         ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!                         #######################                          $$$$$$$$$$$$$$$$$$$$$$$$                       %%%%%%%%%%%%%%%%%%%%%%%%%                           ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!                             ###################                              $$$$$$$$$$$$$$$$$$$$                           %%%%%%%%%%%%%%%%%%%%%                             ", 
+  "                                !!!!!!!!!!!!!!!                                    ###########                                     $$$$$$$$$$$$$                                   %%%%%%%%%%%%%%                                ", 
+  "                                      !!!                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-pattern-symbolizer-900-250-2.0-grid-reference.json b/tests/visual_tests/grids/line-pattern-symbolizer-900-250-2.0-grid-reference.json
new file mode 100644
index 0000000..a5ba410
--- /dev/null
+++ b/tests/visual_tests/grids/line-pattern-symbolizer-900-250-2.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "2", 
+  "1", 
+  "4", 
+  "7", 
+  "6", 
+  "8", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                    !!!!!!!!!                                          ######                                            $                                       ", 
+  "                                %%%%%%%%%%%%%%%                                 !!!!!!!!!!!!!!!!!                                #################                                $$$$$$$$$$$$$$$$                               ", 
+  "                             %%%%%%%%%%%%%%%%%%%%%                           !!!!!!!!!!!!!!!!!!!!!!!                           ######################                          $$$$$$$$$$$$$$$$$$$$$$                            ", 
+  "                           %%%%%%%%%%%%%%%%%%%%%%%%%                       !!!!!!!!!!!!!!!!!!!!!!!!!!!                      ###########################                      $$$$$$$$$$$$$$$$$$$$$$$$$$                          ", 
+  "                         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ##############################                  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$                         ", 
+  "                       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                #################################                $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                       ", 
+  "                      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%               !!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!              ###################################             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                      ", 
+  "                     %%%%%%%%%%%%%           %%%%%%%%%%%%             !!!!!!!!!!!!              !!!!!!!!!!!            ############             ############            $$$$$$$$$$$$            $$$$$$$$$$$$                     ", 
+  "                    %%%%%%%%%%%                 %%%%%%%%%%           !!!!!!!!!!                   !!!!!!!!!!           ##########                  ##########          $$$$$$$$$$                  $$$$$$$$$$                    ", 
+  "                    %%%%%%%%%                     %%%%%%%%%          !!!!!!!!                       !!!!!!!!          #########                      ########         $$$$$$$$$                     $$$$$$$$$                    ", 
+  "                   %%%%%%%%                        %%%%%%%%         !!!!!!!!                         !!!!!!!!         #######                         ########        $$$$$$$$                        $$$$$$$$                   ", 
+  "                   %%%%%%%                          %%%%%%%%        !!!!!!!                           !!!!!!!        #######                           #######       $$$$$$$                           $$$$$$$                   ", 
+  "                   %%%%%%                            %%%%%%%        !!!!!!                             !!!!!!        #######                            #######      $$$$$$$                            $$$$$$$                  ", 
+  "                  %%%%%%%                             %%%%%%       !!!!!!!                             !!!!!!!       ######                             #######      $$$$$$                             $$$$$$$                  ", 
+  "                  %%%%%%%                             %%%%%%       !!!&&&&&&&&&&&&&&&&&&&              !!!!!!!       ###'##                              ######      $$$$$$                              $$$$$$                  ", 
+  "                  %%%(((((((((((((((((((((((((((((((((((((%%%      !!!!!!!                             !!!!!!!       ######                          '''''''###      $$$$$$       ))))))))))))))))))))))))))$$$                  ", 
+  "                  %%%%%%%                             %%%%%%       !!!!!!!                             !!!!!!!       ######                             #######      $$$$$$                             $$$$$$$                  ", 
+  "                  %%%%%%%                             %%%%%%        !!!!!!                             !!!!!!        #######                            #######      $$$$$$                             $$$$$$$                  ", 
+  "                   %%%%%%%                           %%%%%%%        !!!!!!!                           !!!!!!!        #######                           #######       $$$$$$$                           $$$$$$$                   ", 
+  "                   %%%%%%%%                         %%%%%%%%        !!!!!!!!                         !!!!!!!!         #######                         ########       $$$$$$$$                         $$$$$$$$                   ", 
+  "                   %%%%%%%%%                       %%%%%%%%          !!!!!!!!!                     !!!!!!!!!          #########                      #########        $$$$$$$$                       $$$$$$$$$                   ", 
+  "                    %%%%%%%%%                    %%%%%%%%%%           !!!!!!!!!!                 !!!!!!!!!!!           #########                   ##########         $$$$$$$$$$                   $$$$$$$$$$                    ", 
+  "                     %%%%%%%%%%%               %%%%%%%%%%%            !!!!!!!!!!!!             !!!!!!!!!!!!            ############             ############           $$$$$$$$$$$$              $$$$$$$$$$$                     ", 
+  "                      %%%%%%%%%%%%%%       %%%%%%%%%%%%%%              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ###################################             $$$$$$$$$$$$$$$     $$$$$$$$$$$$$$$                      ", 
+  "                       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                #################################               $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                       ", 
+  "                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ##############################                 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                        ", 
+  "                         %%%%%%%%%%%%%%%%%%%%%%%%%%%%                      !!!!!!!!!!!!!!!!!!!!!!!!!!!                      ###########################                     $$$$$$$$$$$$$$$$$$$$$$$$$$$                          ", 
+  "                           %%%%%%%%%%%%%%%%%%%%%%%%                           !!!!!!!!!!!!!!!!!!!!!!                          #######################                         $$$$$$$$$$$$$$$$$$$$$$$                            ", 
+  "                              %%%%%%%%%%%%%%%%%%%                               !!!!!!!!!!!!!!!!!                                #################                               $$$$$$$$$$$$$$$$$$                              ", 
+  "                                 %%%%%%%%%%%%                                          !!!                                            #######                                        $$$$$$$$$$                                  ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 ", 
+  "                                                                                                                                                                                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-pattern-symbolizer-opacity-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/line-pattern-symbolizer-opacity-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..686cdf5
--- /dev/null
+++ b/tests/visual_tests/grids/line-pattern-symbolizer-opacity-512-512-1.0-grid-reference.json
@@ -0,0 +1,144 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "4", 
+  "2", 
+  "1", 
+  "7", 
+  "8", 
+  "6", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                               !!                                                                               ", 
+  "        ##########                       !!!!!!!!!!!!!                      $$$$$$$$$$$$                      %%%%%%%%%%%       ", 
+  "     ####        ####                  !!!           !!!                  $$$          $$$                 %%%%         %%%%    ", 
+  "   ###              ###              !!!               !!!              $$$               $$              %%               %%%  ", 
+  "  ##                  ##            !!                   !!            $$                  $$            %%                  %% ", 
+  " ##                    ##          !!                     !!          $$                    $$          %%                    %%", 
+  " #                      ##         !                       !         $$                      $$        %%                      %", 
+  "##                       #        !!                       !!        $                        $        %                       %", 
+  "#                        #        !&&&&                     !        $                        $       %%                        ", 
+  "''''''''''''''''''''''''''        !&&&&&&&&&&&&&&&&&&&&&&&&&!        ((((((((((((((((((((((((((       %)))))))))))))))))))))))))", 
+  "#                        #        !!                       !!        $                        $       %%                        ", 
+  "#                        #         !                       !         $$                       $        %                       %", 
+  "##                      ##         !!                     !!          $                      $         %%                      %", 
+  " ##                    ##           !!                   !!           $$                    $$          %%                    %%", 
+  "  ##                  ##             !!                 !!             $$$                 $$            %%                 %%% ", 
+  "   ###              ###               !!!             !!!                $$              $$$              %%%              %%   ", 
+  "     ####        ####                   !!!!!     !!!!!                   $$$$$      $$$$$                  %%%%       %%%%%    ", 
+  "       ############                        !!!!!!!!!                         $$$$$$$$$$                       %%%%%%%%%%%       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-pattern-symbolizer-opacity-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/line-pattern-symbolizer-opacity-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..10f611c
--- /dev/null
+++ b/tests/visual_tests/grids/line-pattern-symbolizer-opacity-512-512-2.0-grid-reference.json
@@ -0,0 +1,144 @@
+{
+ "keys": [
+  "", 
+  "4", 
+  "3", 
+  "2", 
+  "1", 
+  "8", 
+  "7", 
+  "6", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "          !!!!!!                           #########                          $$$$$$$$                          %%%%%%%         ", 
+  "      !!!!!!!!!!!!!!                    ###############                    $$$$$$$$$$$$$$$                   %%%%%%%%%%%%%%     ", 
+  "    !!!!!!!!!!!!!!!!!!                ######       ######                $$$$$$$    $$$$$$$               %%%%%%%%   %%%%%%%%   ", 
+  "  !!!!!            !!!!!             ####             #####            $$$$$            $$$$$            %%%%%            %%%%  ", 
+  " !!!!                !!!!           ###                 ####          $$$$                $$$$          %%%%                %%% ", 
+  " !!!                  !!!!         ###                   ###         $$$$                   $$$        %%%                   %%%", 
+  "!!!                    !!!        ###                     ###        $$$                     $$        %%                     %%", 
+  "!!                      !!!       ##                       ##        $$                      $$$      %%%                      %", 
+  "&&&&&&&&&&&&&&&&&&&&&&  !!!       #'''''''''''''''''''''''''#       $(((((((((((((((((((((((((($      %)))))))))))))))))))))))))", 
+  "&&&&&&&&&&&&&&&&&&&&&&&&&&!       #'''''''''''''''''''''''''#       $(((((((((((((((((((((((((($      %)))))))))))))))))))))))))", 
+  "&&&&&&&&&&&&&&&&&&&&&&&&&&!       ##                       ##       $$$                  (((((($      %%     )))))))))))))))))))", 
+  "!!                      !!!       ###                     ###        $$                      $$$      %%%                      %", 
+  "!!!                    !!!         ##                     ##         $$$                    $$$        %%                     %%", 
+  " !!!                  !!!!         ####                  ###          $$$                  $$$         %%%                   %%%", 
+  " !!!!                !!!!           ####               ####            $$$                $$$$          %%%%               %%%% ", 
+  "  !!!!!            !!!!!             ######         ######              $$$$$          $$$$$             %%%%%           %%%%%  ", 
+  "    !!!!!!!!  !!!!!!!!                 #################                 $$$$$$$$$$$$$$$$$$                %%%%%%%%%%%%%%%%%%   ", 
+  "      !!!!!!!!!!!!!!                     #############                      $$$$$$$$$$$$$                    %%%%%%%%%%%%%%     ", 
+  "          !!!!!!!                                                                $$$                             %%%%%          ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-smooth-and-offset-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/line-smooth-and-offset-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..2d3c257
--- /dev/null
+++ b/tests/visual_tests/grids/line-smooth-and-offset-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                               !!!                                    !!                        ", 
+  "                                                            !!!!!!!!!                              !!!!!!!!                     ", 
+  "                                                           !!!    !!!!                           !!!!    !!!                    ", 
+  "                                                          !!! !!!!! !!!                         !!! !!!!!  !!                   ", 
+  "                                                         !! !!!!!!!! !!!                       !!! !!!!!!!! !!                  ", 
+  "                                                         !!!!!  !  !! !!                      !!! !!  !! !!! !!                 ", 
+  "                                                        !! !! !!!!! !! !!                     !! !! !!!!! !!!!!!                ", 
+  "                                                        !! ! !!! !!!!! !!                    !! !! !!!  !! !! !!!               ", 
+  "                                                       !! !! !!!!!!! !!!!                   !! !! !!!!!!!!! !! !!               ", 
+  "                                                       !! !!!!!!! !! !! !!                 !! !!!!!!!!!!!!!! !! !!              ", 
+  "                                                       !!!! !!!!   !! ! !!                !!!!!!!!!       !!!!!! !!             ", 
+  "                                                      !! !! !!!    !! !!!!                !! !!!!!         !!!!!!!!!            ", 
+  "                                                      !! ! !!!     !!!!! !               !! !!!!!!!!!!!!!!  !!!!! !!!           ", 
+  "                                                     !! !! !!!   !!!!!!! !!             !!!!!!!!!!!    !!!!! !!!!! !!           ", 
+  "                                                     !! !!!!!   !!!!!! !!!!             !! !!!!!!         !!!!!!!!! !!          ", 
+  "                                                     !!!! !!   !!  !!! !!!!            !! !!!!!    !!!!     !!!!!!!! !!         ", 
+  "                                                    !! !! !!  !!    !!!!! !!          !! !!!!!  !!!!!!!!!!   !!!! !!!!!!        ", 
+  "                                                    !! !!!!  !!!    !!! ! !!         !!!!!!!!! !!!      !!!!  !!!! !! !!!       ", 
+  "                                                   !! !!!!!  !!     !!! !!!!        !!! !!!!! !!!         !!!!  !!!!!! !!       ", 
+  "                                                   !! !!!!  !!   !!  !!!!! !!      !!! !!!!! !!             !!! !!!!!!! !!      ", 
+  "                                                   !!!! !! !!!  !!!! !!!!! !!!   !!!! !!!!!!!!               !!! !!!!!!! !!     ", 
+  "                                                  !! !!!!! !!  !!! !!!!! !! !!!!!!!  !!!!!!!!!                !!! !!! !!!!!!    ", 
+  "                                                  !! !!!! !!   !!  !!!!! !!   !!    !!! !! !!                  !!! !!!!!! !!!   ", 
+  "                                                 !! !!!!! !!  !!   !! !!!!!        !!! !!!!!                    !!  !!!!!! !!   ", 
+  "                                                 !! !!!!!!!  !!!    !!!!! !!     !!!! !!!!!!                     !! !!!!!!! !!  ", 
+  "                                                 !!!! !! !!  !!     !!!!!  !!!!!!!!  !!! !!                       !! !!!!!!! !! ", 
+  "                                                !! !!!!!!!  !!      !!!!!!  !!!!!   !!!!!!                        !!! !!!!!!!!!!", 
+  "                                                !! !!!! !! !!!       ! !!!         !!!! !!                         !! !!!!!!! !!", 
+  "                                               !! !! !!!!  !!        !!!!!!       !!!! !!                           !! !!!!!!! !", 
+  "                                               !! !!!!!!! !!         !!!! !!!!!!!!!!!!!!!                           !!!!!!!! !! ", 
+  "                                               !!!! !!!!  !!         !! !! !!!!!!  !! !!                             !! !!!!!!!!", 
+  "                                              !! !! !!!! !!           !!!!        !! !!                               !!!!!!! !!", 
+  "                                              !! !!!! !! !!           !! !!     !!! !!!                               !! !! !! !", 
+  "                                             !! !! !!!!  !!           !! !!!! !!!!!!!!                                 !! !!!!! ", 
+  "                                             !! !! !!!! !!             !!!!!!!!!!! !!                                  !! !! !!!", 
+  "                                             !! ! !! !! !!             !! !!  !!! !!                                    !!!! !!!", 
+  "                                            !! !! !!!! !!               !!!!!!!! !!                                     !! !! !!", 
+  "                                            !! !! !!!! !!               !!! !!! !!                                       !!!! !!", 
+  "                                            ! !! !!!!! !!                !!!! !!!                                        !! !!!!", 
+  "                                           !! !! !!!! !!                  !!!!!!                                          !!!! !", 
+  "                                           !! !! !!!! !!                                                                  !! !!!", 
+  "                                          !! !! !!!!! !!                                                                  !! !! ", 
+  "                                          !! !! !!!! !!                                                                    !!!! ", 
+  "                                          ! !! !!!!! !!                                                                    !!   ", 
+  "                                         !! !! !!!!! !!                                                                         ", 
+  "                                         !! !! !!!!!!!                                                                          ", 
+  "                                        !! !! !!!!! !!                                                                          ", 
+  "                                        !! !! !!!!! !!                                                                          ", 
+  "                                        ! !! !!!!!!!!                                                                           ", 
+  "                                       !! !! !!!!! !!                                                                           ", 
+  "                                       !! !! !!!!! !!                                                                           ", 
+  "                                      !! !! !!!!!!!!                                                                            ", 
+  "         !!!!!!!!                     !! !! !!!!! !!                                                                            ", 
+  "        !!!!  !!!!!                   ! !! !!!!!! !!                                                                            ", 
+  "       !!! !!!!  !!!!                !! !! !!!!!! !                                                                             ", 
+  "      !! !!!!!!!!  !!!!              !! !! ! !!! !!                                                                             ", 
+  "     !! !!!    !!!!  !!!!           !! !! !!!!!! !!                                                                             ", 
+  "    !! !!! !!!!! !!!!  !!!!         !! !! !!!!!! !                                                                              ", 
+  "   !! !!! !!! !!!! !!!!  !!!!      !! !! !! !!!!!!                                                                              ", 
+  "  !! !!! !! !!!!!!!! !!!!  !!!!    !! !! !!!!!! !!                                                                              ", 
+  " !! !!! !!!!!!!!!!!!!! !!!!  !!!   !!!! !! !!!! !!                                                                              ", 
+  "!! !!! !!!!!       !!!!! !!!! !!! !! !! !! ! !!!!                                                                               ", 
+  "! !!! !!!!  !!!!!!! !!!!!! !!! !! !! !! !!!!!! !!                                                                               ", 
+  " !!! !!!  !!!!!!!!!!  !!!!!! !! !!! !! !! !!!! !!                                                                               ", 
+  "!!! !!!  !!!!     !!!  !! !!! !!!!! !! !!!! !!!!                                                                                ", 
+  "!! !!!  !!!  !!!!!  !!  !! !! !! !!!! !! !!!! !!                                                                                ", 
+  "! !!!! !!  !!!!!!!!  !!  !! ! !! ! !! !! !!!! !                                                                                 ", 
+  " !!!! !!  !!!     !!! !!  !!!!!! ! !!!! !! ! !!                                                                                 ", 
+  "!!!! !!  !!!       !!! !! !!!!!!  !! !! !!!! !!                                                                                 ", 
+  "!!! !!! !!          !!! !!!!!! !! !!!! !! !!!!                                                                                  ", 
+  " !! !! !!            !! !!!!!! !!!! !! !!!! !!                                                                                  ", 
+  "!! !! !!             !! !!!! !!!!!  !!!! !! !!                                                                                  ", 
+  "!!!! !!!             !! !!!! !!    !! !! !!!!                                                                                   ", 
+  "  !! !!              !! !! !!!!!  !!!!! !! !!                                                                                   ", 
+  "  ! !!                !!!!!!! !!!!!! !!!!! !                                                                                    ", 
+  "   !!                 !! !!!!!      !!!!! !!                                                                                    ", 
+  "    !                  !! !!!!!    !!!!! !!                                                                                     ", 
+  "                        !! !!!!!!!!!!! !!!                                                                                      ", 
+  "                         !! !!!!!!!!! !!!                                                                                       ", 
+  "                          !! !!! !!! !!!                                                                                        ", 
+  "                           !! !!!!! !!!                                                                                         ", 
+  "                            !!    !!!                                                                                           ", 
+  "                             !!!!!!!                                                                                            ", 
+  "                              !!!!                                                                                              ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-smooth-and-offset-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/line-smooth-and-offset-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..ccc7a48
--- /dev/null
+++ b/tests/visual_tests/grids/line-smooth-and-offset-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                             !!!!!!!                               !!!!!!!                      ", 
+  "                                                          !!!!!!!!!!!!!                         !!!!!!!!!!!!!                   ", 
+  "                                                        !!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!!                 ", 
+  "                                                      !!!!!!!!!   !!!!!!!!                   !!!!!!!!   !!!!!!!!!               ", 
+  "                                                     !!!!!!           !!!!!!                !!!!!!          !!!!!!              ", 
+  "                                                    !!!!!     !!!!!    !!!!!!              !!!!!    !!!!!!    !!!!!             ", 
+  "                                                   !!!!!   !!!!!!!!!!!   !!!!             !!!!   !!!!!!!!!!!   !!!!!            ", 
+  "                                                   !!!!  !!!!!!!!!!!!!!   !!!!           !!!!   !!!!!!!!!!!!!!  !!!!!           ", 
+  "                                                  !!!!  !!!!!!!  !!!!!!!!  !!!!         !!!!   !!!!!!!  !!!!!!!  !!!!           ", 
+  "                                                 !!!!  !!!!!        !!!!!   !!!        !!!!   !!!!!        !!!!!  !!!!          ", 
+  "                                                 !!!!  !!!!   !!!!    !!!!  !!!!      !!!!!  !!!!    !!!!   !!!!!  !!!!         ", 
+  "                                                 !!!  !!!!  !!!!!!!!   !!!!  !!!      !!!!  !!!!   !!!!!!!!  !!!!   !!!!        ", 
+  "                                                !!!!  !!!  !!!!!!!!!!   !!!  !!!     !!!!  !!!!   !!!!!!!!!!  !!!!  !!!!!       ", 
+  "                                                !!!  !!!!  !!!!! !!!!!  !!!! !!!!   !!!!  !!!!!  !!!!! !!!!!!  !!!!  !!!!!      ", 
+  "                                               !!!!  !!!  !!!!   ! !!!! !!!! !!!!  !!!!! !!!!!  !!!!     !!!!   !!!!  !!!!      ", 
+  "                                               !!!! !!!!  !!!  !!!!!!!!  !!!  !!!!!!!!!  !!!!  !!!!!!!!!! !!!!  !!!!!  !!!!     ", 
+  "                                               !!!  !!!! !!!! !!!!!!!!!! !!!! !!!!!!!!  !!!!  !!!!!!!!!!!!!!!!!  !!!!   !!!!    ", 
+  "                                              !!!!  !!!  !!!!!!!!!!!!!!! !!!! !!!!!!   !!!!  !!!!!!!!!!!!!!!!!!!  !!!!  !!!!!   ", 
+  "                                              !!!  !!!!  !!! !!!! !!!!!!  !!!  !!!     !!!! !!!!!!!!!  !!!!!!!!!!  !!!!  !!!!!  ", 
+  "                                              !!!  !!!  !!!!!!!!  !!!!!!! !!!         !!!!  !!!!!!!       !!!!!!!   !!!!  !!!!  ", 
+  "                                             !!!! !!!!  !!!!!!!   !!!!!!! !!!!       !!!!  !!!!!!           !!!!!!  !!!!!  !!!! ", 
+  "                                             !!!  !!!! !!!!!!!!    !!!!!!  !!!      !!!!! !!!!!!             !!!!!!  !!!!!  !!!!", 
+  "                                             !!!  !!!  !!!!!!!     !!!!!!  !!!     !!!!!  !!!!!                !!!!!  !!!!  !!!!", 
+  "                                            !!!! !!!!  !!!!!!      !!!!!!! !!!!  !!!!!!  !!!!!!  !!!!!!!!!      !!!!!  !!!!  !!!", 
+  "                                            !!!  !!!  !!!!!!       !!!!!!! !!!!!!!!!!!  !!!!!! !!!!!!!!!!!!!     !!!!   !!!!  !!", 
+  "                                            !!! !!!!  !!!!!!        !!!!!!  !!!!!!!!!  !!!!!! !!!!!!!!!!!!!!!     !!!!  !!!!!  !", 
+  "                                           !!!! !!!! !!!!!!       ! !!!!!!   !!!!!!    !!!!!!!!!!!      !!!!!!!   !!!!!  !!!!!  ", 
+  "                                           !!!  !!!  !!!!!!     !!!!!!!!!!!           !!!!!!!!!!          !!!!!!   !!!!!  !!!!  ", 
+  "                                           !!! !!!!  !!!!!     !!!!!!!!!!!!          !!!!!!!!!!             !!!!!   !!!!!  !!!! ", 
+  "                                          !!!! !!!  !!!!!!    !!!!!!!!!!!!!         !!!!!!!!!!!              !!!!!   !!!!   !!!!", 
+  "                                          !!!!!!!!  !!!!!     !!!!!!!!!!!!!!       !!!!!!!!!!!    !!!!!!      !!!!!  !!!!!  !!!!", 
+  "                                          !!! !!!! !!!!!!    !!!!  !!!!! !!!      !!!!!!!!!!!   !!!!!!!!!!     !!!!   !!!!!  !!!", 
+  "                                          !!! !!!  !!!!!!   !!!!   !!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!    !!!!   !!!!!  !!", 
+  "                                         !!!!!!!!  !!!!!    !!!!   !!!!!! !!!!!!!!!!!!!!!!!!  !!!!!   !!!!!!!    !!!!  !!!!!!  !", 
+  "                                         !!! !!!  !!!!!!   !!!!    !!!!!!  !!!!!!!!  !!!!!!  !!!!        !!!!!    !!!!  !!!!!   ", 
+  "                                         !!! !!!  !!!!!!   !!!      !!!!!    !!!    !!!!!!! !!!!          !!!!!   !!!!  !!!!!!  ", 
+  "                                        !!!!!!!! !!!!!!   !!!!      !!!!!!         !!!!!!!  !!!!            !!!!   !!!!  !!!!!! ", 
+  "                                        !!!!!!!  !!!!!!   !!!       !!!!!!        !!!!!!!  !!!!              !!!!   !!!  !!!!!!!", 
+  "                                        !!!!!!!  !!!!!!  !!!!        !!!!!!       !!!!!!! !!!!               !!!!!  !!!!  !!!!!!", 
+  "                                       !!!!!!!! !!!!!!   !!!     !!  !!!!!!     !!!!!!!!  !!!!                !!!!   !!!! !!!!!!", 
+  "                                       !!!!!!!  !!!!!!  !!!!    !!!! !!!!!!!   !!!!!!!!  !!!!                  !!!!  !!!!  !!!!!", 
+  "                                       !!!!!!! !!!!!!!  !!!    !!!!!  !!!!!!!!!!!!!!!!! !!!!                    !!!!  !!!! !!!!!", 
+  "                                      !!!!!!!  !!!!!!! !!!!    !!!!!! !!!!!!!!!!!!!!!!  !!!!                    !!!!  !!!!  !!! ", 
+  "                                      !!!!!!!  !!!!!!  !!!    !!!!!!! !!!! !!!!! !!!!  !!!!                      !!!!  !!!! !!!!", 
+  "                                      !!!!!!! !!!!!!!  !!!    !!!!!!!  !!!!     !!!!  !!!!                        !!!  !!!!  !!!", 
+  "                                     !!!!!!!  !!!!!!! !!!!   !!!! !!!  !!!!!  !!!!!   !!!!                        !!!!  !!!  !!!", 
+  "                                     !!!!!!!  !!!!!!  !!!    !!!! !!!!  !!!!!!!!!!!  !!!!                          !!!! !!!!  !!", 
+  "                                    !!!!!!!  !!!!!!! !!!!   !!!!   !!!!  !!!!!!!!!  !!!!                           !!!!  !!!  !!", 
+  "                                    !!!!!!!  !!!!!!! !!!!   !!!!   !!!!   !!!!!!   !!!!                             !!!  !!!! !!", 
+  "                                   !!!!!!!! !!!!!!!! !!!   !!!!     !!!!!         !!!!!                             !!!!  !!!   ", 
+  "                                   !!!!!!!  !!!!!!!  !!!   !!!!      !!!!!!    !!!!!!!                               !!!  !!!!  ", 
+  "           !!!!                   !!!!!!!!  !!! !!! !!!!   !!!        !!!!!!!!!!!!!!!                                !!!! !!!!  ", 
+  "       !!!!!!!!!!!!               !!!!!!!  !!!!!!!! !!!   !!!!         !!!!!!!!!!!!                                   !!!  !    ", 
+  "     !!!!!!!!!!!!!!!!            !!!!!!!!  !!! !!!  !!!   !!!             !!!!!!!                                     !!!!      ", 
+  "   !!!!!!!!!!!!!!!!!!!!          !!!!!!!! !!!! !!! !!!!  !!!!                                                          !!!      ", 
+  "  !!!!!!!         !!!!!!        !!!! !!!  !!!!!!!! !!!   !!!                                                           !        ", 
+  " !!!!!     !!!!     !!!!!      !!!! !!!!  !!! !!!! !!!   !!!                                                                    ", 
+  "!!!!!   !!!!!!!!!!   !!!!!     !!!! !!!  !!!! !!! !!!!  !!!!                                                                    ", 
+  "!!!!  !!!!!!!!!!!!!!  !!!!!   !!!! !!!!  !!!  !!! !!!   !!!                                                                     ", 
+  "!!!  !!!!!!!!!!!!!!!!!  !!!!!!!!!  !!!! !!!! !!!! !!!  !!!!                                                                     ", 
+  "!!  !!!!!!       !!!!!!! !!!!!!!!  !!!  !!!! !!! !!!!  !!!!                                                                     ", 
+  "!  !!!!!    !!!    !!!!!!!!!!!!!  !!!!  !!!  !!! !!!!  !!!                                                                      ", 
+  "  !!!!!  !!!!!!!!    !!!!!!!!!!   !!!  !!!! !!!! !!!  !!!!                                                                      ", 
+  " !!!!!  !!!!!!!!!!!    !!!!!!!   !!!!  !!!  !!! !!!!  !!!!                                                                      ", 
+  "!!!!!  !!!!!!!!!!!!!!    !!!!!!! !!!  !!!!  !!! !!!!  !!!                                                                       ", 
+  "!!!!  !!!!!     !!!!!!!    !!!!!!!!!  !!!! !!!! !!!  !!!!                                                                       ", 
+  "!!!  !!!!!  !!!!!!!!!!!!!    !!!!!!!  !!!  !!! !!!!  !!!!                                                                       ", 
+  "!!  !!!!! !!!!!!!!!!!!!!!!!    !!!!  !!!! !!!! !!!!  !!!                                                                        ", 
+  "!  !!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!  !!!  !!!! !!!  !!!!                                                                        ", 
+  "  !!!!!!!!!!!!   !!!!!! !!!!!!!  !  !!!!  !!!  !!!  !!!                                                                         ", 
+  " !!!!!!!!!!        !!!!!  !!!!!     !!!  !!!! !!!!  !!!                                                                         ", 
+  "!!!!!!!!!!          !!!!!   !!!!   !!!!  !!!! !!!  !!!!                                                                         ", 
+  "!!!!!!!!      !!!!   !!!!!   !!!   !!!!  !!! !!!!  !!!                                                                          ", 
+  "!!!!!!!     !!!!!!!    !!!!  !!!!  !!!  !!!! !!!!  !!!                                                                          ", 
+  "!!!!!!    !!!!!!!!!!!   !!!! !!!! !!!!  !!!  !!!  !!!!                                                                          ", 
+  "! !!!!   !!!!!! !!!!!!   !!!  !!! !!!  !!!! !!!!  !!!                                                                           ", 
+  " !!!!   !!!!!     !!!!!  !!!! !!!!!!!  !!!  !!!! !!!!                                                                           ", 
+  "!!!!   !!!!!       !!!!  !!!! !!!!!!! !!!!  !!!  !!!!                                                                           ", 
+  "!!!!  !!!!     !!   !!!! !!!  !!!!!!  !!!! !!!!  !!!                                                                            ", 
+  "!!!  !!!!    !!!!!   !!! !!!   !!!!!  !!!  !!!  !!!!                                                                            ", 
+  "!!  !!!!!   !!!!!!!  !!! !!!!  !!!   !!!! !!!!  !!!                                                                             ", 
+  " !  !!!!   !!!!!!!!  !!!  !!!!       !!!  !!!! !!!!                                                                             ", 
+  "   !!!!   !!!!! !!!  !!!  !!!!      !!!!  !!!  !!!!                                                                             ", 
+  "  !!!!   !!!!!  !!!  !!!!  !!!!    !!!!  !!!!  !!!                                                                              ", 
+  "    !!  !!!!!   !!!!  !!!! !!!!!!!!!!!! !!!!  !!!!                                                                              ", 
+  "       !!!!!     !!!  !!!!! !!!!!!!!!!!!!!!!  !!!                                                                               ", 
+  "      !!!!!      !!!!  !!!!! !!!!!!!!!!!!!   !!!!                                                                               ", 
+  "       !!!        !!!!  !!!!!  !!!  !!!!!   !!!!                                                                                ", 
+  "        !         !!!!!  !!!!!    !!!!!!   !!!!!                                                                                ", 
+  "                   !!!!!  !!!!!!!!!!!!!  !!!!!!                                                                                 ", 
+  "                    !!!!!  !!!!!!!!!!   !!!!!                                                                                   ", 
+  "                     !!!!!   !!!!!!!   !!!!!                                                                                    ", 
+  "                      !!!!!    !!    !!!!!!                                                                                     ", 
+  "                       !!!!!!       !!!!!!                                                                                      ", 
+  "                        !!!!!!!!!!!!!!!!                                                                                        ", 
+  "                          !!!!!!!!!!!!!                                                                                         ", 
+  "                           !!!!!!!!!!                                                                                           ", 
+  "                               !!!                                                                                              ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-symbolizer-expressions-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/line-symbolizer-expressions-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/line-symbolizer-expressions-256-256-1.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-symbolizer-expressions-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/line-symbolizer-expressions-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/line-symbolizer-expressions-256-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-symbolizer-expressions-all-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/line-symbolizer-expressions-all-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/line-symbolizer-expressions-all-256-256-1.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line-symbolizer-expressions-all-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/line-symbolizer-expressions-all-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/line-symbolizer-expressions-all-256-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line_break-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/line_break-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..00d5857
--- /dev/null
+++ b/tests/visual_tests/grids/line_break-800-800-1.0-grid-reference.json
@@ -0,0 +1,218 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "3", 
+  "1", 
+  "2", 
+  "4", 
+  "5", 
+  "6", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                           !                                                            ", 
+  "                                                                                                                        !!!   ! ! !!!!    !!                                                            ", 
+  "                                                                                                                          !  ! !            !                                                           ", 
+  "                                                                                                                                    !       !                                                           ", 
+  "                                                                                                                                ! ! !     ! !! !                                                        ", 
+  "                                                                                                                     ! !!!  !!  !!!!! ! ! !!!!!!                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                ! !! !     !                                                            ", 
+  "                                                                                                                            !   !!!!!!!!! !                                                             ", 
+  "                        ###                  ###               #                                                         !   !        !                                                                 ", 
+  "                       #   #                #  #                                                                                                                                                        ", 
+  "                      ##   # #   # ####  #######  #### #  #  # # ####  ####                                            !!!!  ! !!!!!!   !!!!  !                                                         ", 
+  "                      #    ## # ## #  #  #  #  #  #  # # ## #  # #   # #  #                                            !! !!!!  ! !!  ! !!!!!!!                                                         ", 
+  "                      ##   ## # #  ####  #  #  #  #  #  ## ##  # #   # #  #                                                                   !                                                         ", 
+  "                       #   #  ###  #     #  #  #  #  #  ## ##  # #   # #  #                                                             !  !!!                                                          ", 
+  "                       #####   ##  ####  #  #  #  ####  ## ##  # #   # ####                                           ! !!!!!  !! !  !!!!! !!!!                                                         ", 
+  "                                                                          #                                                     ! !  !!   !!                                                            ", 
+  "                                                                       ####                                            !  !                                                                             ", 
+  "                                                                                                                      !!! !!!!         !    !  !!                                                       ", 
+  "                                         # #                                                                         !!!! !!!  !!! !  !! !   ! !                                                        ", 
+  "                                         # #                                                                                                                                                            ", 
+  "                                         # #  ###   ###  ###                                                            !!    !                                                                         ", 
+  "                                         # #  #  # ## ## #                                                             !!!  !!! ! !! !!! !!!! !                                                         ", 
+  "                                         # #  #  # ##### ##                                                               !      !           !                                                          ", 
+  "                                         # #  #  # #       #                                                                                                                                            ", 
+  "                                         # #  #  # ##  #   #                                                                      !                                                                     ", 
+  "                                                     ##  ##                                                                       !                                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          $                   %                   #                   &                   '                   (                   !                   )                   *                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                 #        #                      #  #       ##                                                               )        )                      )  )                       ", 
+  "             ########   # #####  #  ### # #   ###       #####  # ####### #######  ##                                     ))))))))     ))))) ))  ))) ) )   ))))      )))))    ))))) )                    ", 
+  "            ### ## ##  ######## ### ### #### ##  ## #  ###### # ######## ####### ###   #                                )))))))))  ) )))))) )))  )) )))) )) ))) )) )))))))) ))))))))                    ", 
+  "                                                                                                                                                                                                        ", 
+  "          #  ##  ### # # #### #  # # ######  # ## # ##  ## #  # # ## ### # ## ## #### ###                         ) ))))  ))) ) )  ))))  )) ) ) )) ) ) ) ) ) ) ))))) ) )))) ))  ) ))))) )               ", 
+  "          ##     ###### #######   #  ## ####         #  ### # #   # #####  ###### # ## #                          ))))) ) ))   )  ))))   ))  ))) ))    ) ))  ) )  )) ))))))) )) )) ) ))) )              ", 
+  "                                                                  #                                                             )                                                  )                    ", 
+  "                ##    #    #                      #       #           ##       #                                        )   )      )    )   )          )         )                 )                    ", 
+  "              ##### # #    ###       ### # #  #   # ##   ##     ###   ## # # ######                                )))))) ) )))))) ) ))))   )))        ))))  ) ) ))))     ))   ) )))  ) )               ", 
+  "              ##### #### # #### ## # ########## #  ## # ### # # ### # # ##  ######### # #                          )))))))) )))))))) )) ))) ) ) )  )  )))))  ))))))))    )))))))   )))))                ", 
+  "                                                                                                                                                                                                        ", 
+  "          ##  ## #  ## # # # # ####### #  ############ # #### # ## ##    #### # ## # #####                             )   )  )))))  ))) ) ))))))) )   ) ))) )) )   ) ) ))) ) )  ))))                   ", 
+  "          # #       #  # ##     ## #     # #### ########  ## #   ## #   # ##       ######                              ))     )))))  )   )) )))) )    )  )))  ))      ) )))    )) ))                    ", 
+  "                                                                                     #                                                                                                                  ", 
+  "                                    #    #         ### ##   ##         #    #        #                              )                             ))       )            )           )                   ", 
+  "             ###  # #   # ##  ## #  #   ##  ##  ## ### ### ##### #   # #   ##  # #   #                            )))))             )  ) )))  ))  )))) ) )))) )       )))))))) ) )))))) )               ", 
+  "          #  ##   ### #  #### # #  # ## ## #### # ####### ###### # #  ## ##### ### #  ## #                        )))))  ))   ))    )   )) )))))) ) ))  )))) )))) ) )  ))))))) )))))))) )               ", 
+  "                                                                                                                                                                                                        ", 
+  "        ##  # ####  ### ######### ##  # ### ########  # ## ######  # # #######  ######  ###                        )) ) ) )))) )))) ) ))) )))) )))))  )) ))))))))  ))) ) ))) ) ))  ))))))               ", 
+  "        # # ## ###  #   ## ####    # #  ### ####### #   # # #####       ##### # #####     #                       )   ) )  ))) )))  )))))  ))))))))) )   )))) )))   )    )   ) ) ) )) )))               ", 
+  "                                            #                #                                                                                              )    )     )                                ", 
+  "             ##                #            #                     #                #                              ))  )    )            )                              )          )                     ", 
+  "             ##  #### ####  ## ####  #  # ##########    #     #######      #  #    ## #                           ))) )))))))))    )) ))) ))))))))  )   ))))))))   )   )))))  ))))))) ))                ", 
+  "             # # #### ####  ## # ###### #  #########  ###      ######  # # ## # # ## ##                           ) ) ))))))))) ) ) ) ))) ))))))))  )    ))))))) ) ) ) )))))  ))))))) ))))              ", 
+  "                                                                                                                                                                                                        ", 
+  "        # #### # ### ## # #### ## ###  # ################  # #### ###  # ####  #  ######## #                            ) ) )) ))))))) )))) ))))))) )  )))))))))))))) ) )  )))  )) ) )                  ", 
+  "               #### #  # ###  # # ###   ### # # #####  ##          #   ### ## #   # #######                                    ) ) ))       ))))))    ) )))) )))))))) )    )))  )) ) )                  ", 
+  "                                            #                                     #                                            )              )                         )        )                      ", 
+  "                    #             #              #          # #                                                              )        )                      )    )                                     ", 
+  "           ### # #####     # # ## #    #   # #   #  ## # #  # ####    #  #        #  ###                                )  ) )))) ))))))) ))  ))) )  ) ))))  )    )  ))))))    )))))                    ", 
+  "           ### #  #### # # #  ## ###   # # # # #   ### # #    ######  ## # #     ## # ##                                ) ) )) )) ))))) ) ))  )))  ))  ) ))  )    ) )))) ))  ) ))) )                    ", 
+  "                                                                                                                                                                                                        ", 
+  "          # #### ## ######  # ## ##########   ##   #   # # ## # # # ## ########    ## # # #                          )))))))))))  ) ) ) ) ))))))))))))) ) ))) ) ) ))))))) ) ))   )))))                  ", 
+  "             #  # # ######       # ##### #         #    #  ####     ## ####### #   # #   #                           )))))) )))))  )     )))))))) )) ))  ) ))      ))))))      ) )))))                  ", 
+  "                         #                                             #                                             )                       )                      )                                   ", 
+  "                            #          #               #    #                         #                                 )))        )) )      )          )        )                                      ", 
+  "           ## # ###### ### ####        ######### #   # #  ### # ###     ###### ##     ###                          ) )) ))) )) ) ) )) )))    ))  )      ) )) ))) ))))) ))))  )  ) )))))))               ", 
+  "           ### ####### ###  ##  #      # ## #### # #  #  # #  #  #   # # ####  #    # ###                          ) ) ))   )  ) ) )  )))) ) ))  ) )     )) ) )) ))))  ))) ) )   ) ))))))               ", 
+  "                                              #                                                                          ) )                               )                                            ", 
+  "                                            ###### #  ##                                                                 )))))) ) )) )))  ) ) )))) )    )))))) ))  ) ))  )  )))))))                     ", 
+  "                                             ##      ## #                                                                ))))))   ) ))) ) )))))))) )    )))))) ))   )) ) ))  ) ) ))                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                    )  )                            )                                   ", 
+  "                                                                                                                   )) ) )))))) ))  ))))) )      ) )))))) )) )      ))   )))   )  ))))) ))               ", 
+  "                                                                                                                       )     )                                   )       )     )                        ", 
+  "                                                                                                                                               ))     )                                                 ", 
+  "                                                                                                                                            )  )))) )))) ) )   )                                        ", 
+  "                                                                                                                                              ))))) )))))) ) ) ))                                       ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line_break-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/line_break-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..215f035
--- /dev/null
+++ b/tests/visual_tests/grids/line_break-800-800-2.0-grid-reference.json
@@ -0,0 +1,218 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "1", 
+  "2", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "!!!                                    !!!!!!!                             !!                                                                                                                           ", 
+  "!!!!!                                  !!    !                             !!                                                                                                                           ", 
+  "   !!                                  !     !                                                                                                                                                          ", 
+  "    !!                 !!          !!  !     !      !!!                             !!        !!                                                                                                        ", 
+  "    !!  !!      !!   !!!!!!    !!!!!!!!!!!!  !    !!!!!!!   !!   !!!   !!  !!   !!!!!!!!    !!!!!!!!                                                                                                    ", 
+  "    !!!  !!    !!   !!    !!   !!!     !     !    !!   !!!  !!   !!!   !!  !!   !!!   !!    !!   !!!                                                                                                    ", 
+  "     !!  !!    !!  !!     !!   !!      !     !   !!     !!  !!   ! !   !   !!   !!     !!  !!     !!                                                                                                    ", 
+  "     !!  !!   !!   !!      !   !!      !     !   !!     !!   !! !! !! !!   !!   !!     !!  !!     !!                                                                                                    ", 
+  "    !!!   !!  !!   !!!!!!!!!   !!      !     !   !!     !!   !! !! !! !!   !!   !!     !!  !!     !!                                                                                                    ", 
+  "    !!    !!  !!   !!          !!      !     !   !!     !!   !! !! !! !!   !!   !!     !!  !!     !!                                                                                                    ", 
+  "    !!     !!!!    !!          !!      !     !   !!     !!   !! !   !!!    !!   !!     !!  !!     !!                                                                                                    ", 
+  "   !!      !!!!     !!         !!      !     !   !!!   !!!    !!!   !!!    !!   !!     !!   !!   !!!                                                                                                    ", 
+  "!!!!!      !!!!     !!!!!!!!   !!      !     !    !!!!!!!     !!!   !!!    !!   !!     !!   !!!!!!!!                                                                                                    ", 
+  "!!!         !!        !!!!!    !!      !     !     !!!!!      !!    !!!    !!   !!     !!     !!! !!                                                                                                    ", 
+  "                                                                                                  !!                                                                                                    ", 
+  "                                                                                            !    !!                                                                                                     ", 
+  "                                                                                            !!!!!!!                                                                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                               !!   !!                                                                                                                                                                  ", 
+  "                               !!   !!                                                                                                                                                                  ", 
+  "                               !!                                                                                                                                                                       ", 
+  "                               !!   !!   !! !!!!       !!!!      !!!!                                                                                                                                   ", 
+  "                               !!   !!   !!!!!!!!    !!!!!!!   !!!!!!!                                                                                                                                  ", 
+  "                               !!   !!   !!!   !!   !!!   !!!  !!                                                                                                                                       ", 
+  "                               !!   !!   !!    !!   !!     !!  !!                                                                                                                                       ", 
+  "                               !!   !!   !!     !   !!!!!!!!!  !!!!                                                                                                                                     ", 
+  "                               !!   !!   !!     !   !!!!!!!!!   !!!!!!                                                                                                                                  ", 
+  "                               !!   !!   !!     !   !!             !!!                                                                                                                                  ", 
+  "                               !!   !!   !!     !   !!               !!                                                                                                                                 ", 
+  "                               !!   !!   !!     !   !!!     !  !    !!                                                                                                                                  ", 
+  "                               !!   !!   !!     !    !!!!!!!!  !!!!!!!                                                                                                                                  ", 
+  "                                                       !!!!     !!!!                                                                                                                                    ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          #                   $                   !                   %                   &                   '                   (                   )                   *                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                !    !            !                                                                   ! !                           )    )            )                                                 ", 
+  "                !    !                               !                          !     !  )            !                             )    )                               )                          )   ", 
+  "  ! ! ! ! !  ! !!! ! ! ! !!       !       !!!!!  ! ! !     !  ! ! ! ! !  ! ! !  ! ! ! ! !)  ) ) ) ) ) ) ) ) !  ) )!)  )!)!)!)!)   ) )) ) ) ) )))   )  )       ) ) ) )) ) )     )   )) ) ) )  ) ) ) )) ) ", 
+  "! ! ! ! ! !  !  !!   !!  !!    !! !     !!!!    !!!! !     !  !  !! ! !! !!!    ! !!! ! !)  ) ) )!))) ) ) ) !  )!!!)) )!) )!)!)  )  ))  ))   ))    )) )     )))   ) ))))))     )  )  )) ) )) )))    ) ))", 
+  "! ! ! ! ! !   !!!!!! ! !!!!     ! ! !   !!!!    !!!! !!    ! !!!! ! ! !! ! ! !  !!!!  !! )))) ) )!) ) ) ) ) !  )))!)) )!) )!)!)   )))))) ) ))))     ) ) ))  )))   ) )))  )) )  ))) )) ) ) )))) ) ) ))) )", 
+  "                                                       !                                                  !    )             !                                             )                            ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                       !            ) )    )       )!             ) )       !                                                                           ", 
+  "                                                                                    )       !       !             )         )  )                                                                        ", 
+  " !!     ! !      ! !    ! ! ! ! !   !  ! ! ! !     ! ! ! !        ! ! !! ! ! ! !) )!)!))! !)!)  )! )!)!)!)!)! ) ! ) ) ! ! ! ))))   ))  ))  )  )) )   )        ))       ))  ) )  )   ) ) ) ) )   ) ) ) ) ", 
+  "!!!   !!! !!   ! !!     ! !   ! ! ! !  !   ! !   !!! ! !!!   !! ! !   !! !!! !))) ) )!))  ))!))!)! )!) )!!!)! ))))) ) !!!   )))) ) ))))))  ))))) ) ) ) ))   ) ))       ))  ) ) )    ) ) ) ) ) ) )   ))) ", 
+  "!!!   !!! !!   !!! !!   !!!   ! ! !!!  !!! ! !   !!! ! !!!   !! !!! !!!! !!! !))) ))) ))))!) ))!))))!) )!)))! !))!) ) )!)   ) !)!))) )))))) )))) ) ))) ))   ))))))   ))))  ) ))))   ))) ) ) ) )))   ))) ", 
+  "                                                                                       )                   )                                                                                            ", 
+  "                                                                                                                                                                                                        ", 
+  "    !                                            !                !                       !!     !)!            )         )       )          )                     )                                    ", 
+  "!   !      ! !      !    !     !  !  !!  !            !   !    !  !   !       !   ) !)   )) ! )! !)!) !)  !)!   )  ) )!  )    !   )  )       ) )  )   )    )   )   )     )  )      )    ) )   )  )  )  )", 
+  "    ! ! !    ! ! ! !    ! ! !   !!        !  ! ! !     ! ! !    ! !  ! ! ! !   !)) ))!) ) ) ! !)!!)!)!)!) ) ) ! ))! )!)!)!)! ! !  ) ) )  ) ) ) ) )   )    ) )      )   ))   ) ) )      ) ) )   ))  )    ", 
+  "!!  ! ! !!   ! ! !  !   ! ! ! ! ! !! !! ! !   !! !   ! ! !!!  ! ! !  ! ! ! ! ! !)  ))!  ) )  )!)!!)!!!))) ) ))!!)) !)))  !)! !!!  )   )  ) ) ) ) )   )    ))) ))   )   ))   ) ) ) ))   ) ) ) ) ) )) )) )", 
+  "!!  ! !!! !! !!!!! !!!  ! ! ! !!!!!! !! !!!   !! ! !!!!! !!!  !!! !  !!! !!! !!!)))!))) ) !) )))!!)! !))) ) )!))))!!)))! !)!)))!  )   )  ))) ) )))   )))  ))) ))   ) ))) )) ))))) ))   ) ) ) ))))))))) )", 
+  "                                                                       !        )                                                                                                                       ", 
+  "                                                                                                                                                                                                        ", 
+  "                    !!         !                                  !                        !!)    ! !               ))     )                                )                      )                    ", 
+  "!!  !!  !!  !  ! !  !! !!   !! !  ! ! ! !  !  !! !!!! ! !! !     !!!   ! ! !  !!   ! !  )) ! )  ))!)!) ))!)))!) !!  ) )!))!)!  )) )) ))) )  ))  )) ) ) ))   ) ))     ) )  )  ) ) ))) ))   ))   )  ))  ) ", 
+  "! !   !!    ! ! ! ! !! !   ! ! ! ! !! !   ! ! ! ! ! ! ! ! ! !   ! ! ! ! !!   !     !!     )! ) ) )!)!)! !!) )!)!  !!))))!)!)! ) ) ) ) ) ) )    ) ) ) )   )  ) ) )   ) ) )  ) ) ) ) ) )    ) ) ) ))     )", 
+  "! !!   !     !! !   !! !   !   !    !     !   ! ! ! ! ! ! ! !     ! !   !!   !     ! !! ) )! ) ) )!)!))  !) )! !    )!!)  !)! )   ) ) ) )    ) ) ) ) ))     ) ) )     ) )) ) ) ) ) )  ))  ) ) )  )     )", 
+  "! ! !!!!!!   !! !!! !! !!   !! ! !!!!     !!! ! ! !!!!! ! ! !     ! ! !!!!   !!! !!!!!! )))! ) )))!)))!))!) )!! )!!!)! )))!)! !)) ) ) ))))) )) ))) ))) )))  ) ) )     ) )))) ))) ) ) ))   ) ) ))) ))   )", 
+  "                                                                                                 )                                               )                                                      ", 
+  "                                                                                                                                                                                                        ", 
+  "                 !                                  ! ! !    !!        !!         )    !    !        )!              ) ! ! ! !                )))      )        )                        )              ", 
+  "! !!!       ! !! ! ! !!!!!!  !! !!   !!  !!   !! !! ! ! ! !! !!! ! ! !!!! !!   )) ) )) ))) )!!))!))!)))) ) ))!) !!  ))))!))!!!)!!))   ) ))    )   ))   ) ))  )) )) ))  )) )  ) )  )    )))  ))  )) )    ", 
+  " !! !     ! !!   ! ! !   ! !   !       !!    !   ! !! ! !!   !!  ! !!  !! ! ! ) ! )!)!))  )!!) ) ) ) )!) ) )!) )   ) ) ) ) ) ! ))     ))      ))) ) )  ) ) )    )    ))  )   ) ) ) )     )    ) ) ) )  )", 
+  "  !       !! !  !! ! !   ! ! ! !     ! !!      !   !! ! !!   !!  ! !!  !! ! ! ) !!)! ! )   !)) ! )!) )!) ) ) )!)   ! ) ) ) ) ! ))!    ) ))    )        )       )) )    )))   ) ) )    )  )  ) ) ) ) )   ", 
+  "!!!   !    !  !! ! !!! !!!!! !!! !   !!! !!  !!! !! ! ! ! !! ! ! !!! !!!! ! !  ))!)!)))) !!!)!))!) )!))))) )!)!)!! !!) ) )))!! )!)) )))))) )  )   )))  ) )))   ))) )))))) )) ))) )))   )))  ))) ) ) )  )", 
+  "      !                  !                                                                     !                   !!!                                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "        !                         !                                                  )    )    !!   )                 ! ) )!      )         )              )    )         )                )   ) )      ", 
+  " !! !!!!!! !! !! !!! ! ! !!   ! ! !!  !!! ! ! !!! ! !!   !!     !  !!  !! ! !)!!) ))!) !!)))!))!!)) ))! !))  ))  !))!)) )!)!  )) !))   ) )  ) ))   )  ) )  ))   )) )) ))) ))    )))))) ))) ))) ))) ))   ", 
+  "! ! ! ! ! ! ! !  ! ! ! !!  !  ! ! !   ! ! ! ! ! ! ! !      !   ! !!  !! ! ! ! ) )) ) )   ))! ) )!   ) ! !   )!  !)! ) !)) )! ) !! )    )) ) ) ) )    ) ) ) ))   )  ) )  ) )     )    ) ) ) )   ) ) )    ", 
+  "!   ! ! ! !    ! ! ! ! !!     ! ! !   !   ! ! ! ! !  !!  ! !     !!   ! ! ! ! )) ) ! ) ! ))! ) ))  !) ! )!  ) !!! !)) !)) )! )    )    ))   ) ) )   )) ) ) ))   )    )) ) )      ))) ) ) ) )   ) )  )   ", 
+  " !! ! ! !!!!! !! !!! !!! !!!  !!! !!  !!! !!! ! !!! !!   !!!     ! !! !!! !!! !)! ))!) ))) )!)))!)) ))! !))  )) !)))!)) )!)! !))!!))!))) )) ) ) )   )) ))) ) )) )) )) ))) ))    )))))) ))) ) ) ))) ))   ", 
+  "                   !                  !                                 !                  ! )                                                                              )          )))              ", 
+  "                                                                                                                                                                                                        ", 
+  "   !        !                                            !             ! !    ))) !  )          )  !                !     )                                                            ))               ", 
+  "   ! !!  !! !! !!  !! !!!!    !!   !!    !! !! !! !! !!! !!   !!!!!!   ! ! !! ) ) ))!)   )) )))))) ))!)) ))) ) ) ))!!!)!) ))! ))) ) ) )))   )))  )))   ))  ))  )) ) ) ))    )) ))) ))) )))) ) ) ))   )) ", 
+  "!  ! ! !   !!    !!  !  !!   ! !   ! !  ! ! ! ! !   !!   !    !! !     ! !!   ))))!  )! )  !)!)!)!)!) )  ) ) ) ))! )! ) )!)   )   ) ) ) )   )     ))   ) ))  )) ) ) ) ) )  )     ) ) ) ))  )) ) )    )  ", 
+  "   ! !     !!       !!  !!   !     !    !   ! ! !    !   !    !! !     ! !!   ) !)!  )! )  !)!)!)!)!  !) ) ) ) ))!  ! ) )!)   )   ) ) ) )     )  ) )   ) ))   ) ) ) ) )    )   ) ) ) ) ))  )) )  ))   ))", 
+  "!  ! !!!   ! ! !!!!!! !!! !!  !!   !!!   !! ! ! ! !!!!   !! !!!! !     ! ! !! )!! ))!)!  ))!)!)!)) ))!)) ))) ))) ))) !))) ))  ))) ))) )  )) ))   )))   ) ) ))) )) ))) )))   )) ))) ))) )))) ))) ))   )) ", 
+  "                        !                                                  !!          !     !             )                  )                                 )                  )                    ", 
+  "                                                                                                                                                                                                        ", 
+  "                            !!!                     ! !                    !          ))))   !!       !         )!)       !)    !                    )                  )             ))                ", 
+  " !! !!!!!  !! !!    !!!     !   ! ! !! !!  !! !!! !!! ! !! !! !!   !!! !!!!!! !! !!!!!!! )) !))) )))))!  )) !))!)!)!))!)))!))!))!))!))) ) ) ))    )) ) )) )))))  )) ))))))) ) )))))   )) ))) ) )  )))   ", 
+  "!  !!  ! !!  !!     !       !!! ! !!!  ! !!  !! ! ! ! !!  !!    !  !   ! ! ! ! ! ! !  )) )   !))!) )!)!  )!))! ))!)) !)) )!) )!!!)  )!) ) )   )  )   )   ))     )   ) ) ) ) ) ) ) )   )) ) ) ) )   ))   ", 
+  "!  !!  ! !!   !     !         ! ! !  ! ! !!   ! ! ! ! !  !  !      !   ! ! ! !   ! !   ! )   ) )!) )!)!  )!))! !)!)) ! ) )!) ) !!  )) ) ) ) )    )   )    )    ))   ) ) ) ) ) ) ) )   )) ) ) ) )  ) )   ", 
+  " !! !  !!  !!!!     !   !   !!! !!!!!! !!  !! ! ! !!! !!!!!!! !!!  !!! !!! !! !! ! ! !)))!) !))) )!)!)!  ))! ))!)!)!)) )!) ))!)) ))!!)) ))) )))   )) ) ))))    ) )) ) ) ))))) ) ) )   )) ))) )))  ))) ) ", 
+  "       !                                                           !                                               !                  )                                                  )))            ", 
+  "                                                                                                                                                                                                        ", 
+  "                  !                            !!  ! !             ! !!    !           ! !         !)    !     !      )            )                                )        )))                     ) )", 
+  " ! !!!   !! !!!!! !    !!!  !! !!!  !!!!!! !!! !!!!!!! !!     ! !! ! !!!   !!!! !!!!   ! )))!) )!))!)) ))!))!!))) ))))))))) !!) )  ) ))  ))))  )) )) )))))) )) )))  ))))     )   ) ) )) ))) )) ))) ))) )", 
+  " ! ! !     !!     !    !   !   !    !   !! ! ! !!  ! ! !    ! !!   ! !!    ! !! !  !   ! !)) ) ))! !) ) )!)! ! ))!) )!)!) )!! ) )  ) )))   ) ))     ))  ) )   ))    ))        )) ) )))  ) ))  )) ) ) ) )", 
+  " ! !       !!     !    !   !   !      !! ! ! ! !!  ! !  !   !! !   ! !!    !! ! !  ! ! ! ) )!) ) ! !) ) )!)! !)!)!) )!)!)!  ! ) )  ) ) )   ) ))     ))  ) )    )    ))         ) ) )  ) ) ))   ) ) ) ) )", 
+  "!!  !!   !! !  !! ! !  !    !! !!!  !! !!! !!! ! ! !!! !!    !  !! ! ! !   ! !!  !! !  ! )))!)))!)) ))!))!)! ! )) )!)!)) ))!! )))  ) )))   ) ) )) )) )  ))  ))))    ))   )   ))) )))))) ))  )))) ) ))) )", 
+  "                                           !!!                                                                       !!!                                )                               )               ", 
+  "                                                                                                                                                                                                        ", 
+  "                      !                            !                               ! !      )         ) )     )))!!!   )          )                                                                    )", 
+  "!!   !!! !!!!!   !!   !!! !!! !!  !! ! ! !!!!!     !!  ! ! !!! !!   !!!   !   !! !!! ))!!)) ))!)) )))!))) !!  )  !))!))) !!) ))! !) ))) ) )))))) ))))))   )) )) )))   )) ))  )))))) ) ) )))   )) )) )) )", 
+  "!!    !! ! ! !   ! !  ! ! !!!   !!   ! ! ! ! !     !!  ! ! ! !      !!!   !  !   ! ! !!))!  ) ))) ) ) ) ) !   )))))))) )!! ) ))!  ) ) ) ) )   )))   )))  ))     )))  ))) )   )) ) ) ) ) )))  )  )) )   )", 
+  "!!   ! ! ! ! !   ! !  ! ! !     !!   ! ! ! ! !     ! ! ! ! ! ! !    !   ! !  !   ! ! )!))!) ) ) ! ) ) ) )   !   ))  !) )!! ))!)  !) ) ) ) )   ) )   )      )    )    )   )     )) ) ) ) )    )  )) )   )", 
+  "! !  !!! ! ! !    !   !!!  !!   ! !!  !! ! ! ! !   ! !  !! ! ! !!    !! !!!   !!  !! ))!!)) !)!))!) ) ))) )! !)) !))  )) ! !) !))!) ))  ))) ))))) )) ))  ))) ))  ))   )) )   ))  ))  ))  ))   )) )  )) )", 
+  "!                                                                                           !                                       )                                             )                     ", 
+  "                                                                                                                                                                                                        ", 
+  "      !              !       !                         !              !                     )    )             )  )   )  !         )           )     )                                         )       )", 
+  "!   !!! !!!  !!! !!  ! !!!   ! !! !! !! !!!!!     ! !! !   !!! !!! !! !!   !!  !))!))) ))) !))))!)!)) !) !))))!) !)) !)!))) ))!) ) )  )))  ))) ))    ) ))))))))) ))) )) ))    ))) ))) ))))) )) ))   )) )", 
+  "    ! ! ! !  ! ! !   ! ! !   !!   ! !!! ! ! !   !  !   !   !   ! ! !!!!      !!!))!))) ! ) !)! ! )))! !!)) )))!) !)  !)!)))  !!) ) )  ))    )) )     ) ) )   )))   ))))))      )) ) )   ))))))))    )) )", 
+  "    ! ! ! !  ! ! !   ! ! !   !! ! ! !   ! ! !   !! ! ! ! ! !   ! !   !!      !!   !) ) ) ) !)!   )! ) ! )) )!  ) !)  !)!)!) ) !) ) )    )  ) ) )     ) ) )   )   ) ))   )     ) ) ) )   )      )   ) ) )", 
+  "     !!  !    !  !   ! ! !   ! !! !  !! ! ! !    !  !! ! !!! ! !!  !!! !     ! !)) ))) !!)  !) )!)!)) !!)!  )) ) ! )  )!)))  )! )) )  ))    ))  ))   ) ) ) )) ))   ) )) )      ))  )     )) ))  )   )  )", 
+  "                                                               !                       ))                                                                        ))                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                     !    !    ! !                                          )   )              )              )) )                             ))                           ))))        ", 
+  "                                     !! !!! !! !!! !!! ! ! !!                               ))) ) ))) )) ))) )))   ) ))))     )) )   )))) )))   )) ) )   ))) )))) )))   ))))   ))   ))))    )  ) ))) )))", 
+  "                                     !  ! ! !! ! ! ! ! ! !!!!!                              )   )   )))))) ) ) )   )     )    ) ))   ))   )    ))))) )   ) ))  )) ) )     ))   )    )))     )    ) ) ) )", 
+  "                                     !  ! !    ! ! ! ! ! !                                  ) ) ) ) ))   ) ) ) ) ) )     )    ) )) ) ))   )    )   ) )   ) ))  )) ) )   ) )) ) )  ) )  )    )  ) ) ) ) )", 
+  "                                            !!      !! !!   !                                )     )  ))      )  ))                )       ))   ))  )     )  )     )     )  )     )   )           )     ", 
+  "                                                     !                                                                                                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                        )                )                         )     )                              ", 
+  "                                                                                ))) )) )))) ) ))))) )) ))) )))  ))) ))) ) )) ))    )))   ) )) )) )) )))))   ) ) )) ) ) ))))))) ))))))  ))) ))))))   )) )", 
+  "                                                                                ))))   )  ) ) ) ) ) )) )))   )  )   ) ) ))  ))     ) )   ))  )) ))))) )     ) ))  )) ) ) ) ) ) )))     ) ))))))       ))", 
+  "                                                                                ) ) )  )  ) ) ) ) )    ) )   )  ) ) ) ) ))   )     ) )   ) ) ))  )  ) )      )    )) ) ) ) ) ) ) )     ) ) )  )     ) ))", 
+  "                                                                                        )  )                     )   )                            )                        )                )        )  ", 
+  "                                                                                                                                                                           )                            ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                         ))                )                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-1-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-1-200-200-1.0-grid-reference.json
index 05e606e..fa9252c 100644
--- a/tests/visual_tests/grids/lines-1-200-200-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-1-200-200-1.0-grid-reference.json
@@ -27,7 +27,7 @@
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
-  "               !    !        !     !              ", 
+  "                    !        !                    ", 
   "   #############################################  ", 
   "   #############################################  ", 
   "   #############################################  ", 
diff --git a/tests/visual_tests/grids/lines-1-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-1-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..47ab14a
--- /dev/null
+++ b/tests/visual_tests/grids/lines-1-200-200-2.0-grid-reference.json
@@ -0,0 +1,66 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "9", 
+  "1", 
+  "4", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "       &&&&&&&&&&&  ''''''''''     (((((((((((    ", 
+  "       &&&&&&&&&&&  ''''''''''    ((((((((((((    ", 
+  "      &&&&&&&&&&&&& ''''''''''    ((((((((((((    ", 
+  "      &&&&&&&&&&&&& ''''''''''    ((((((((((((    ", 
+  "       &&&&&&&&&&&& ))))))))))    ((((((((((((    ", 
+  "       &&&&&&&&&&&  ))))))))))     ((((((((((     ", 
+  "       &&&&&&&&&&&  ))))))))))     ((((((((((     ", 
+  "        &&&&&&&&&   ))))))))))      (((((((((     ", 
+  "         &&&&&&&    ))))))))))        ((((        ", 
+  "            &       ))))))))))                    ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-1-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-1-400-400-1.0-grid-reference.json
index 3859dd6..d3dbdbd 100644
--- a/tests/visual_tests/grids/lines-1-400-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-1-400-400-1.0-grid-reference.json
@@ -48,7 +48,7 @@
   "      ##########################################################################################    ", 
   "      ##########################################################################################    ", 
   "      ##########################################################################################    ", 
-  "                 #                          #                                   #                   ", 
+  "                #                           #                                 #  #                  ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
@@ -58,7 +58,7 @@
   "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
   "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
   "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
-  "                                  $                          $                                      ", 
+  "                                 $                                                                  ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
diff --git a/tests/visual_tests/grids/lines-1-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-1-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..218340f
--- /dev/null
+++ b/tests/visual_tests/grids/lines-1-400-400-2.0-grid-reference.json
@@ -0,0 +1,117 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "1", 
+  "4", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                             !!        !!                 !            !!                           ", 
+  "                                                                                                    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "                                                                                                    ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "                       '  '             (((((((((((((((((((                ))))) )))                ", 
+  "                    '''' ''''           (((((((((((((((((((              )))))))))))))              ", 
+  "                  '''''''''''''         (((((((((((((((((((              ))))))))))))))             ", 
+  "                 '''''''''''''''        (((((((((((((((((((             ))))))))))))))))            ", 
+  "                 '''''''''''''''        (((((((((((((((((((             ))))))))))))))))            ", 
+  "                 ''''''''''''''''       (((((((((((((((((((            )))))))))))))))))            ", 
+  "                '''''''''''''''''       (((((((((((((((((((            )))))))    )))))))           ", 
+  "                '''''''    ''''''                                     )))))))     )))))))           ", 
+  "               '''''''     '''''''                                     ))))))     )))))))           ", 
+  "               '''''''     '''''''                                     )))))))    )))))))           ", 
+  "                ''''''     '''''''                                     ))))))))  )))))))            ", 
+  "                ''''''''  '''''''                                       ))))))))))))))))            ", 
+  "                '''''''''''''''''       *******************             ))))))))))))))))            ", 
+  "                 '''''''''''''''        *******************             )))))))))))))))             ", 
+  "                 '''''''''''''''        *******************              ))))))))))))))             ", 
+  "                 ''''''''''''''         *******************                )))))))))))              ", 
+  "                   '''''''''''          *******************                  ))))))                 ", 
+  "                     '''''''            *******************                    )                    ", 
+  "                        '               *******************                                         ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-1-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-1-600-600-1.0-grid-reference.json
index ae13670..33930ab 100644
--- a/tests/visual_tests/grids/lines-1-600-600-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-1-600-600-1.0-grid-reference.json
@@ -64,7 +64,7 @@
   "        ########################################################################################################################################      ", 
   "        ########################################################################################################################################      ", 
   "        ########################################################################################################################################      ", 
-  "                                          ##                         ##                               #  #                                            ", 
+  "                                         ##                          ##                                #                                              ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -79,7 +79,7 @@
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
-  "                                                           $                          $                                                               ", 
+  "                                                          $$                          $$                                                              ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -90,7 +90,7 @@
   "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
   "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
   "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
-  "                                       %%         %%                                     %                  %                                         ", 
+  "                                    % %           %                                      %                   %                                        ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -98,7 +98,7 @@
   "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
   "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
   "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
-  "                                                                                                                                                      ", 
+  "                                  &&                   &&      &                           &                                                          ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
diff --git a/tests/visual_tests/grids/lines-1-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-1-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..d456d64
--- /dev/null
+++ b/tests/visual_tests/grids/lines-1-600-600-2.0-grid-reference.json
@@ -0,0 +1,167 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "2", 
+  "1", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "                                        $$$$                                                     $$$                                                  ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                    '''  ''                           ", 
+  "                                   (  (                                                                          ''''''''''''                         ", 
+  "                                ((((( (((                   ))))))))))))))))))))))))))))                       '''''''''''''''''                      ", 
+  "                             ((((((((((((((                 ))))))))))))))))))))))))))))                      '''''''''''''''''''                     ", 
+  "                            ((((((((((((((((((              ))))))))))))))))))))))))))))                      '''''''''''''''''''                     ", 
+  "                           (((((((((((((((((((              ))))))))))))))))))))))))))))                      ''''''''''''''''''''                    ", 
+  "                           ((((((((((((((((((((             ))))))))))))))))))))))))))))                     '''''''''   '''''''''                    ", 
+  "                          (((((((((((((((((((((             ))))))))))))))))))))))))))))                     '''''''       '''''''                    ", 
+  "                          ((((((((     ((((((((                                                             '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                            '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                           '''''''           '''''''                  ", 
+  "                         (((((((          ((((((                                                           '''''''           '''''''                  ", 
+  "                        (((((((           (((((((                                                          '''''''           '''''''                  ", 
+  "                        (((((((           (((((((                                                           '''''''          '''''''                  ", 
+  "                         ((((((           (((((((                                                           '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                             ''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                             ''''''''     ''''''''                    ", 
+  "                          (((((((       (((((((                                                              '''''''''''''''''''''                    ", 
+  "                          (((((((((( ((((((((((                                                               '''''''''''''''''''                     ", 
+  "                           ((((((((((((((((((((             ****************************                      '''''''''''''''''''                     ", 
+  "                           (((((((((((((((((((              ****************************                       '''''''''''''''''                      ", 
+  "                           (((((((((((((((((((              ****************************                         '''''''''''''                        ", 
+  "                             ((((((((((((((((               ****************************                           '''''''''                          ", 
+  "                               (((((((((((                  ****************************                             ''''                             ", 
+  "                                 ((((((                     ****************************                                                              ", 
+  "                                    (                       ****************************                                                              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-1-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-1-800-800-1.0-grid-reference.json
index 75c1e07..b0febb6 100644
--- a/tests/visual_tests/grids/lines-1-800-800-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-1-800-800-1.0-grid-reference.json
@@ -80,7 +80,7 @@
   "           ####################################################################################################################################################################################         ", 
   "           ####################################################################################################################################################################################         ", 
   "           ####################################################################################################################################################################################         ", 
-  "                                                               #            #             #          #     #  #    #      #    #  ## #      #                                                           ", 
+  "                                                           ### #  ##     # #  #  # ##    ###  ##   ###  #  #   #  # #  #  ###  #    #  #   # ##                                                         ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -100,7 +100,7 @@
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
-  "                                                                                     $                          $                                                                                       ", 
+  "                                                                                    $                          $$                                                                                       ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -115,7 +115,7 @@
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
-  "                                                                %%         %%                                     %                  %                                                                  ", 
+  "                                                             % %           %                                      %                   %                                                                 ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -125,7 +125,7 @@
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
-  "                                                             &&&                  &&     &                          &                  &                                                                ", 
+  "                                      & && &  && &   & &&        & &  &    & &&& & &&&  && & & &&& && &  &&&  &&  &   &  &&  && & & &  && &  &  & && &  &  & &  &&&                                     ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
diff --git a/tests/visual_tests/grids/lines-1-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-1-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..0f944e8
--- /dev/null
+++ b/tests/visual_tests/grids/lines-1-800-800-2.0-grid-reference.json
@@ -0,0 +1,217 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "2", 
+  "1", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                                                                            !                                                                                           ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "                                 #                                                        #                                                                 #     #                                     ", 
+  "                               ###                                                     ###                                                                 ##     #                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "                                                                    $                                                       $                                                                           ", 
+  "                                                                                                                           $                                                                            ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                             ''  '                                      ", 
+  "                                                                                                                                                          '''''''''''                                   ", 
+  "                                              ((( ((                                                                                                   ''''''''''''''''                                 ", 
+  "                                            ((((( ((((                          ))))))))))))))))))))))))))))))))))))))                               ''''''''''''''''''''                               ", 
+  "                                         (((((((((((((((                        ))))))))))))))))))))))))))))))))))))))                              '''''''''''''''''''''''                             ", 
+  "                                      ((((((((((((((((((((                      ))))))))))))))))))))))))))))))))))))))                              '''''''''''''''''''''''                             ", 
+  "                                      ((((((((((((((((((((((                    ))))))))))))))))))))))))))))))))))))))                             '''''''''''' ''''''''''''                            ", 
+  "                                     ((((((((((((((((((((((((                   ))))))))))))))))))))))))))))))))))))))                             '''''''''      ''''''''''                            ", 
+  "                                     (((((((((((  (((((((((((                   ))))))))))))))))))))))))))))))))))))))                            '''''''            '''''''                            ", 
+  "                                    ((((((((((      (((((((((                                                                                     '''''''             '''''''                           ", 
+  "                                    (((((((           ((((((((                                                                                   '''''''              '''''''                           ", 
+  "                                   (((((((             (((((((                                                                                   '''''''               ''''''                           ", 
+  "                                   (((((((              ((((((                                                                                  '''''''                '''''''                          ", 
+  "                                  (((((((               (((((((                                                                                 '''''''                '''''''                          ", 
+  "                                  (((((((               (((((((                                                                                 '''''''                 ''''''                          ", 
+  "                                 (((((((                 (((((((                                                                                '''''''                 '''''''                         ", 
+  "                                 (((((((                 (((((((                                                                                '''''''                 '''''''                         ", 
+  "                                 (((((((                  ((((((                                                                                 '''''''               '''''''                          ", 
+  "                                  (((((((                (((((((                                                                                 '''''''               '''''''                          ", 
+  "                                  (((((((                (((((((                                                                                  ''''''              '''''''                           ", 
+  "                                   ((((((               (((((((                                                                                   '''''''             '''''''                           ", 
+  "                                   (((((((              (((((((                                                                                   ''''''''           '''''''                            ", 
+  "                                   (((((((             (((((((                                                                                     '''''''''       '''''''''                            ", 
+  "                                    (((((((            (((((((                                                                                     '''''''''''  '''''''''''                             ", 
+  "                                    (((((((((       (((((((((                                                                                      ''''''''''''''''''''''''                             ", 
+  "                                    (((((((((((  ((((((((((((                                                                                       ''''''''''''''''''''''                              ", 
+  "                                     (((((((((((((((((((((((                    **************************************                                ''''''''''''''''''''                              ", 
+  "                                     (((((((((((((((((((((((                    **************************************                                  '''''''''''''''                                 ", 
+  "                                       ((((((((((((((((((((                     **************************************                                    '''''''''''                                   ", 
+  "                                         ((((((((((((((((                       **************************************                                      ''''''                                      ", 
+  "                                           (((((((((((                          **************************************                                        '                                         ", 
+  "                                             ((((((                             **************************************                                                                                  ", 
+  "                                               ((                               **************************************                                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-2-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-2-200-200-1.0-grid-reference.json
index 4b34f29..31a452b 100644
--- a/tests/visual_tests/grids/lines-2-200-200-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-2-200-200-1.0-grid-reference.json
@@ -27,7 +27,7 @@
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
-  "          !    !              !                   ", 
+  "         !    !        !      !                   ", 
   "   #############################################  ", 
   "   #############################################  ", 
   "   #############################################  ", 
diff --git a/tests/visual_tests/grids/lines-2-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-2-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..47ab14a
--- /dev/null
+++ b/tests/visual_tests/grids/lines-2-200-200-2.0-grid-reference.json
@@ -0,0 +1,66 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "9", 
+  "1", 
+  "4", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "       &&&&&&&&&&&  ''''''''''     (((((((((((    ", 
+  "       &&&&&&&&&&&  ''''''''''    ((((((((((((    ", 
+  "      &&&&&&&&&&&&& ''''''''''    ((((((((((((    ", 
+  "      &&&&&&&&&&&&& ''''''''''    ((((((((((((    ", 
+  "       &&&&&&&&&&&& ))))))))))    ((((((((((((    ", 
+  "       &&&&&&&&&&&  ))))))))))     ((((((((((     ", 
+  "       &&&&&&&&&&&  ))))))))))     ((((((((((     ", 
+  "        &&&&&&&&&   ))))))))))      (((((((((     ", 
+  "         &&&&&&&    ))))))))))        ((((        ", 
+  "            &       ))))))))))                    ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-2-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-2-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..3fc3cc1
--- /dev/null
+++ b/tests/visual_tests/grids/lines-2-400-400-2.0-grid-reference.json
@@ -0,0 +1,117 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "1", 
+  "4", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                 !!         !                 !            !!  !    !               !               ", 
+  "                                                                                                    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "                                                                                                    ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "                       '  '             (((((((((((((((((((                ))))) )))                ", 
+  "                    '''' ''''           (((((((((((((((((((              )))))))))))))              ", 
+  "                  '''''''''''''         (((((((((((((((((((              ))))))))))))))             ", 
+  "                 '''''''''''''''        (((((((((((((((((((             ))))))))))))))))            ", 
+  "                 '''''''''''''''        (((((((((((((((((((             ))))))))))))))))            ", 
+  "                 ''''''''''''''''       (((((((((((((((((((            )))))))))))))))))            ", 
+  "                '''''''''''''''''       (((((((((((((((((((            )))))))    )))))))           ", 
+  "                '''''''    ''''''                                     )))))))     )))))))           ", 
+  "               '''''''     '''''''                                     ))))))     )))))))           ", 
+  "               '''''''     '''''''                                     )))))))    )))))))           ", 
+  "                ''''''     '''''''                                     ))))))))  )))))))            ", 
+  "                ''''''''  '''''''                                       ))))))))))))))))            ", 
+  "                '''''''''''''''''       *******************             ))))))))))))))))            ", 
+  "                 '''''''''''''''        *******************             )))))))))))))))             ", 
+  "                 '''''''''''''''        *******************              ))))))))))))))             ", 
+  "                 ''''''''''''''         *******************                )))))))))))              ", 
+  "                   '''''''''''          *******************                  ))))))                 ", 
+  "                     '''''''            *******************                    )                    ", 
+  "                        '               *******************                                         ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-2-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-2-600-600-1.0-grid-reference.json
index 6269e35..7c5a0f0 100644
--- a/tests/visual_tests/grids/lines-2-600-600-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-2-600-600-1.0-grid-reference.json
@@ -64,7 +64,7 @@
   "        ########################################################################################################################################      ", 
   "        ########################################################################################################################################      ", 
   "        ########################################################################################################################################      ", 
-  "                       ##                         ##                              ##  #                                                               ", 
+  "                   ##                           #                                ##  #               #             #                #                 ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -79,7 +79,7 @@
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
-  "                                               $$                         $$                                                                          ", 
+  "                                             $$                           $                                                                           ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
diff --git a/tests/visual_tests/grids/lines-2-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-2-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..2dac93f
--- /dev/null
+++ b/tests/visual_tests/grids/lines-2-600-600-2.0-grid-reference.json
@@ -0,0 +1,167 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "2", 
+  "1", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                    '''  ''                           ", 
+  "                                   (  (                                                                          ''''''''''''                         ", 
+  "                                ((((( (((                   ))))))))))))))))))))))))))))                       '''''''''''''''''                      ", 
+  "                             ((((((((((((((                 ))))))))))))))))))))))))))))                      '''''''''''''''''''                     ", 
+  "                            ((((((((((((((((((              ))))))))))))))))))))))))))))                      '''''''''''''''''''                     ", 
+  "                           (((((((((((((((((((              ))))))))))))))))))))))))))))                      ''''''''''''''''''''                    ", 
+  "                           ((((((((((((((((((((             ))))))))))))))))))))))))))))                     '''''''''   '''''''''                    ", 
+  "                          (((((((((((((((((((((             ))))))))))))))))))))))))))))                     '''''''       '''''''                    ", 
+  "                          ((((((((     ((((((((                                                             '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                            '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                           '''''''           '''''''                  ", 
+  "                         (((((((          ((((((                                                           '''''''           '''''''                  ", 
+  "                        (((((((           (((((((                                                          '''''''           '''''''                  ", 
+  "                        (((((((           (((((((                                                           '''''''          '''''''                  ", 
+  "                         ((((((           (((((((                                                           '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                             ''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                             ''''''''     ''''''''                    ", 
+  "                          (((((((       (((((((                                                              '''''''''''''''''''''                    ", 
+  "                          (((((((((( ((((((((((                                                               '''''''''''''''''''                     ", 
+  "                           ((((((((((((((((((((             ****************************                      '''''''''''''''''''                     ", 
+  "                           (((((((((((((((((((              ****************************                       '''''''''''''''''                      ", 
+  "                           (((((((((((((((((((              ****************************                         '''''''''''''                        ", 
+  "                             ((((((((((((((((               ****************************                           '''''''''                          ", 
+  "                               (((((((((((                  ****************************                             ''''                             ", 
+  "                                 ((((((                     ****************************                                                              ", 
+  "                                    (                       ****************************                                                              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-2-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-2-800-800-1.0-grid-reference.json
index 98a1c1a..cf372f0 100644
--- a/tests/visual_tests/grids/lines-2-800-800-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-2-800-800-1.0-grid-reference.json
@@ -80,7 +80,7 @@
   "           ####################################################################################################################################################################################         ", 
   "           ####################################################################################################################################################################################         ", 
   "           ####################################################################################################################################################################################         ", 
-  "                                            #    #       #             #    #    #      #  #    #      #    #  ## #      #                                                                              ", 
+  "                                     ## # ## #  ### ###  ## #   #   # #  ## #  ###  # #  ### ###   #  ###  #  ## # ## ## ### ## #   #  #  # #  ### ## ## ### # ### ##                                   ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -100,7 +100,7 @@
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
-  "                                                                        $                          $                                                                                                    ", 
+  "                                                                                                    $                $             $                                                                    ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -115,7 +115,7 @@
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
-  "                                    %%          %%     %                               %                  %                                                                                             ", 
+  "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -125,7 +125,7 @@
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
-  "                                 &&                  &&                                 &                  &                                                                                            ", 
+  "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
diff --git a/tests/visual_tests/grids/lines-2-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-2-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..76b6e32
--- /dev/null
+++ b/tests/visual_tests/grids/lines-2-800-800-2.0-grid-reference.json
@@ -0,0 +1,217 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "2", 
+  "1", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                                    !         !                               !                                                                                         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "                                        $ $$                                                       $                                  $                           $                                     ", 
+  "                                         $                                                        $                                                                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                             ''  '                                      ", 
+  "                                                                                                                                                          '''''''''''                                   ", 
+  "                                              ((( ((                                                                                                   ''''''''''''''''                                 ", 
+  "                                            ((((( ((((                          ))))))))))))))))))))))))))))))))))))))                               ''''''''''''''''''''                               ", 
+  "                                         (((((((((((((((                        ))))))))))))))))))))))))))))))))))))))                              '''''''''''''''''''''''                             ", 
+  "                                      ((((((((((((((((((((                      ))))))))))))))))))))))))))))))))))))))                              '''''''''''''''''''''''                             ", 
+  "                                      ((((((((((((((((((((((                    ))))))))))))))))))))))))))))))))))))))                             '''''''''''' ''''''''''''                            ", 
+  "                                     ((((((((((((((((((((((((                   ))))))))))))))))))))))))))))))))))))))                             '''''''''      ''''''''''                            ", 
+  "                                     (((((((((((  (((((((((((                   ))))))))))))))))))))))))))))))))))))))                            '''''''            '''''''                            ", 
+  "                                    ((((((((((      (((((((((                                                                                     '''''''             '''''''                           ", 
+  "                                    (((((((           ((((((((                                                                                   '''''''              '''''''                           ", 
+  "                                   (((((((             (((((((                                                                                   '''''''               ''''''                           ", 
+  "                                   (((((((              ((((((                                                                                  '''''''                '''''''                          ", 
+  "                                  (((((((               (((((((                                                                                 '''''''                '''''''                          ", 
+  "                                  (((((((               (((((((                                                                                 '''''''                 ''''''                          ", 
+  "                                 (((((((                 (((((((                                                                                '''''''                 '''''''                         ", 
+  "                                 (((((((                 (((((((                                                                                '''''''                 '''''''                         ", 
+  "                                 (((((((                  ((((((                                                                                 '''''''               '''''''                          ", 
+  "                                  (((((((                (((((((                                                                                 '''''''               '''''''                          ", 
+  "                                  (((((((                (((((((                                                                                  ''''''              '''''''                           ", 
+  "                                   ((((((               (((((((                                                                                   '''''''             '''''''                           ", 
+  "                                   (((((((              (((((((                                                                                   ''''''''           '''''''                            ", 
+  "                                   (((((((             (((((((                                                                                     '''''''''       '''''''''                            ", 
+  "                                    (((((((            (((((((                                                                                     '''''''''''  '''''''''''                             ", 
+  "                                    (((((((((       (((((((((                                                                                      ''''''''''''''''''''''''                             ", 
+  "                                    (((((((((((  ((((((((((((                                                                                       ''''''''''''''''''''''                              ", 
+  "                                     (((((((((((((((((((((((                    **************************************                                ''''''''''''''''''''                              ", 
+  "                                     (((((((((((((((((((((((                    **************************************                                  '''''''''''''''                                 ", 
+  "                                       ((((((((((((((((((((                     **************************************                                    '''''''''''                                   ", 
+  "                                         ((((((((((((((((                       **************************************                                      ''''''                                      ", 
+  "                                           (((((((((((                          **************************************                                        '                                         ", 
+  "                                             ((((((                             **************************************                                                                                  ", 
+  "                                               ((                               **************************************                                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-3-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-3-200-200-1.0-grid-reference.json
index 05e606e..fa9252c 100644
--- a/tests/visual_tests/grids/lines-3-200-200-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-3-200-200-1.0-grid-reference.json
@@ -27,7 +27,7 @@
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
-  "               !    !        !     !              ", 
+  "                    !        !                    ", 
   "   #############################################  ", 
   "   #############################################  ", 
   "   #############################################  ", 
diff --git a/tests/visual_tests/grids/lines-3-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-3-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..47ab14a
--- /dev/null
+++ b/tests/visual_tests/grids/lines-3-200-200-2.0-grid-reference.json
@@ -0,0 +1,66 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "9", 
+  "1", 
+  "4", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   #############################################  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "       &&&&&&&&&&&  ''''''''''     (((((((((((    ", 
+  "       &&&&&&&&&&&  ''''''''''    ((((((((((((    ", 
+  "      &&&&&&&&&&&&& ''''''''''    ((((((((((((    ", 
+  "      &&&&&&&&&&&&& ''''''''''    ((((((((((((    ", 
+  "       &&&&&&&&&&&& ))))))))))    ((((((((((((    ", 
+  "       &&&&&&&&&&&  ))))))))))     ((((((((((     ", 
+  "       &&&&&&&&&&&  ))))))))))     ((((((((((     ", 
+  "        &&&&&&&&&   ))))))))))      (((((((((     ", 
+  "         &&&&&&&    ))))))))))        ((((        ", 
+  "            &       ))))))))))                    ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-3-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-3-400-400-1.0-grid-reference.json
index 3859dd6..d3dbdbd 100644
--- a/tests/visual_tests/grids/lines-3-400-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-3-400-400-1.0-grid-reference.json
@@ -48,7 +48,7 @@
   "      ##########################################################################################    ", 
   "      ##########################################################################################    ", 
   "      ##########################################################################################    ", 
-  "                 #                          #                                   #                   ", 
+  "                #                           #                                 #  #                  ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
@@ -58,7 +58,7 @@
   "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
   "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
   "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
-  "                                  $                          $                                      ", 
+  "                                 $                                                                  ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
diff --git a/tests/visual_tests/grids/lines-3-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-3-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..218340f
--- /dev/null
+++ b/tests/visual_tests/grids/lines-3-400-400-2.0-grid-reference.json
@@ -0,0 +1,117 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "1", 
+  "4", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                             !!        !!                 !            !!                           ", 
+  "                                                                                                    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "      ##########################################################################################    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    ", 
+  "                                                                                                    ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
+  "                       '  '             (((((((((((((((((((                ))))) )))                ", 
+  "                    '''' ''''           (((((((((((((((((((              )))))))))))))              ", 
+  "                  '''''''''''''         (((((((((((((((((((              ))))))))))))))             ", 
+  "                 '''''''''''''''        (((((((((((((((((((             ))))))))))))))))            ", 
+  "                 '''''''''''''''        (((((((((((((((((((             ))))))))))))))))            ", 
+  "                 ''''''''''''''''       (((((((((((((((((((            )))))))))))))))))            ", 
+  "                '''''''''''''''''       (((((((((((((((((((            )))))))    )))))))           ", 
+  "                '''''''    ''''''                                     )))))))     )))))))           ", 
+  "               '''''''     '''''''                                     ))))))     )))))))           ", 
+  "               '''''''     '''''''                                     )))))))    )))))))           ", 
+  "                ''''''     '''''''                                     ))))))))  )))))))            ", 
+  "                ''''''''  '''''''                                       ))))))))))))))))            ", 
+  "                '''''''''''''''''       *******************             ))))))))))))))))            ", 
+  "                 '''''''''''''''        *******************             )))))))))))))))             ", 
+  "                 '''''''''''''''        *******************              ))))))))))))))             ", 
+  "                 ''''''''''''''         *******************                )))))))))))              ", 
+  "                   '''''''''''          *******************                  ))))))                 ", 
+  "                     '''''''            *******************                    )                    ", 
+  "                        '               *******************                                         ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-3-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-3-600-600-1.0-grid-reference.json
index 67b4633..75b9c7f 100644
--- a/tests/visual_tests/grids/lines-3-600-600-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-3-600-600-1.0-grid-reference.json
@@ -64,7 +64,7 @@
   "        ########################################################################################################################################      ", 
   "        ########################################################################################################################################      ", 
   "        ########################################################################################################################################      ", 
-  "                                          ##                         ##                               #  #                                            ", 
+  "                                         ##                          ##                                #                                              ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -79,7 +79,7 @@
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
-  "                         $$                         $$                                      $$                         $$                             ", 
+  "                        $$                          $$                                      $                           $$                            ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -90,7 +90,7 @@
   "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
   "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
   "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
-  "                                       %%         %%                                     %                  %                                         ", 
+  "                                    % %           %                                      %                   %                                        ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -98,7 +98,7 @@
   "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
   "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
   "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
-  "                                                                                                                                                      ", 
+  "                                  &&                   &&      &                           &                                                          ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
diff --git a/tests/visual_tests/grids/lines-3-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-3-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..d456d64
--- /dev/null
+++ b/tests/visual_tests/grids/lines-3-600-600-2.0-grid-reference.json
@@ -0,0 +1,167 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "2", 
+  "1", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "        ########################################################################################################################################      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "                                        $$$$                                                     $$$                                                  ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "        &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                    '''  ''                           ", 
+  "                                   (  (                                                                          ''''''''''''                         ", 
+  "                                ((((( (((                   ))))))))))))))))))))))))))))                       '''''''''''''''''                      ", 
+  "                             ((((((((((((((                 ))))))))))))))))))))))))))))                      '''''''''''''''''''                     ", 
+  "                            ((((((((((((((((((              ))))))))))))))))))))))))))))                      '''''''''''''''''''                     ", 
+  "                           (((((((((((((((((((              ))))))))))))))))))))))))))))                      ''''''''''''''''''''                    ", 
+  "                           ((((((((((((((((((((             ))))))))))))))))))))))))))))                     '''''''''   '''''''''                    ", 
+  "                          (((((((((((((((((((((             ))))))))))))))))))))))))))))                     '''''''       '''''''                    ", 
+  "                          ((((((((     ((((((((                                                             '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                            '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                           '''''''           '''''''                  ", 
+  "                         (((((((          ((((((                                                           '''''''           '''''''                  ", 
+  "                        (((((((           (((((((                                                          '''''''           '''''''                  ", 
+  "                        (((((((           (((((((                                                           '''''''          '''''''                  ", 
+  "                         ((((((           (((((((                                                           '''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                             ''''''         '''''''                   ", 
+  "                         (((((((         (((((((                                                             ''''''''     ''''''''                    ", 
+  "                          (((((((       (((((((                                                              '''''''''''''''''''''                    ", 
+  "                          (((((((((( ((((((((((                                                               '''''''''''''''''''                     ", 
+  "                           ((((((((((((((((((((             ****************************                      '''''''''''''''''''                     ", 
+  "                           (((((((((((((((((((              ****************************                       '''''''''''''''''                      ", 
+  "                           (((((((((((((((((((              ****************************                         '''''''''''''                        ", 
+  "                             ((((((((((((((((               ****************************                           '''''''''                          ", 
+  "                               (((((((((((                  ****************************                             ''''                             ", 
+  "                                 ((((((                     ****************************                                                              ", 
+  "                                    (                       ****************************                                                              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-3-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-3-800-800-1.0-grid-reference.json
index e7bd89e..1a3a2a6 100644
--- a/tests/visual_tests/grids/lines-3-800-800-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-3-800-800-1.0-grid-reference.json
@@ -80,7 +80,7 @@
   "           ####################################################################################################################################################################################         ", 
   "           ####################################################################################################################################################################################         ", 
   "           ####################################################################################################################################################################################         ", 
-  "                  #            #             #          #     #  #    #      #    #  ## #      #            #            #             #          #     #  #    #      #    #  ## #      #              ", 
+  "                                                           ### #  ##     # #  #  # ##    ###  ##   ###  #  #   #  # #  #  ###  #    #  #   # ##                                                         ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -100,7 +100,7 @@
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
-  "                         $                          $                                $                          $                                $                          $                           ", 
+  "                        $                          $$                               $                          $$                               $                          $$                           ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -115,7 +115,7 @@
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
-  "                                                                %%         %%                                     %                  %                                                                  ", 
+  "                                                             % %           %                                      %                   %                                                                 ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -125,7 +125,7 @@
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
-  "                                                             &&&                  &&     &                          &                  &                                                                ", 
+  "                                      & && &  && &   & &&        & &  &    & &&& & &&&  && & & &&& && &  &&&  &&  &   &  &&  && & & &  && &  &  & && &  &  & &  &&&                                     ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -142,13 +142,13 @@
   "                                       ((((((((    ((((((((                                                                                         ''''              ''''                              ", 
   "                                      ((((((         ((((((                                                                                         ''''               ''''                             ", 
   "                                      ((((             (((((                                                                                        '''                 '''                             ", 
-  "                                     ((((                (((                                                                                       ''''                 '''                             ", 
+  "                                     ((((               ((((                                                                                       ''''                 '''                             ", 
   "                                     ((((                (((                                                                                       '''                  ''''                            ", 
   "                                     (((                 ((((                                                                                     ''''                   '''                            ", 
   "                                    ((((                  (((                                                                                     '''                    ''''                           ", 
   "                                    (((                   ((((                                                                                   ''''                    ''''                           ", 
   "                                   ((((                   ((((                                                                                    '''                     '''                           ", 
-  "                                   (((                     (((                                                                                    ''''                   ''''                           ", 
+  "                                   ((((                    (((                                                                                    ''''                   ''''                           ", 
   "                                   ((((                    ((((                                                                                   ''''                   '''                            ", 
   "                                   ((((                    (((                                                                                     '''                  ''''                            ", 
   "                                    (((                   ((((                                                                                     ''''                 ''''                            ", 
diff --git a/tests/visual_tests/grids/lines-3-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-3-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..8b51082
--- /dev/null
+++ b/tests/visual_tests/grids/lines-3-800-800-2.0-grid-reference.json
@@ -0,0 +1,217 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "2", 
+  "1", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                !                                                           !                                                           !                               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "                                 #                                                        #                                                                 #     #                                     ", 
+  "                               ###                                                     ###                                                                 ##     #                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "                                                                    $                                                       $                                                                           ", 
+  "                                                                                                                           $                                                                            ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                             ''  '                                      ", 
+  "                                                                                                                                                          '''''''''''                                   ", 
+  "                                              ((( ((                                                                                                   ''''''''''''''''                                 ", 
+  "                                            ((((( ((((                          ))))))))))))))))))))))))))))))))))))))                               ''''''''''''''''''''                               ", 
+  "                                         (((((((((((((((                        ))))))))))))))))))))))))))))))))))))))                              '''''''''''''''''''''''                             ", 
+  "                                      ((((((((((((((((((((                      ))))))))))))))))))))))))))))))))))))))                              '''''''''''''''''''''''                             ", 
+  "                                      ((((((((((((((((((((((                    ))))))))))))))))))))))))))))))))))))))                             '''''''''''' ''''''''''''                            ", 
+  "                                     ((((((((((((((((((((((((                   ))))))))))))))))))))))))))))))))))))))                             '''''''''      ''''''''''                            ", 
+  "                                     (((((((((((  (((((((((((                   ))))))))))))))))))))))))))))))))))))))                            '''''''            '''''''                            ", 
+  "                                    ((((((((((      (((((((((                                                                                     '''''''             '''''''                           ", 
+  "                                    (((((((           ((((((((                                                                                   '''''''              '''''''                           ", 
+  "                                   (((((((             (((((((                                                                                   '''''''               ''''''                           ", 
+  "                                   (((((((              ((((((                                                                                  '''''''                '''''''                          ", 
+  "                                  (((((((               (((((((                                                                                 '''''''                '''''''                          ", 
+  "                                  (((((((               (((((((                                                                                 '''''''                 ''''''                          ", 
+  "                                 (((((((                 (((((((                                                                                '''''''                 '''''''                         ", 
+  "                                 (((((((                 (((((((                                                                                '''''''                 '''''''                         ", 
+  "                                 (((((((                  ((((((                                                                                 '''''''               '''''''                          ", 
+  "                                  (((((((                (((((((                                                                                 '''''''               '''''''                          ", 
+  "                                  (((((((                (((((((                                                                                  ''''''              '''''''                           ", 
+  "                                   ((((((               (((((((                                                                                   '''''''             '''''''                           ", 
+  "                                   (((((((              (((((((                                                                                   ''''''''           '''''''                            ", 
+  "                                   (((((((             (((((((                                                                                     '''''''''       '''''''''                            ", 
+  "                                    (((((((            (((((((                                                                                     '''''''''''  '''''''''''                             ", 
+  "                                    (((((((((       (((((((((                                                                                      ''''''''''''''''''''''''                             ", 
+  "                                    (((((((((((  ((((((((((((                                                                                       ''''''''''''''''''''''                              ", 
+  "                                     (((((((((((((((((((((((                    **************************************                                ''''''''''''''''''''                              ", 
+  "                                     (((((((((((((((((((((((                    **************************************                                  '''''''''''''''                                 ", 
+  "                                       ((((((((((((((((((((                     **************************************                                    '''''''''''                                   ", 
+  "                                         ((((((((((((((((                       **************************************                                      ''''''                                      ", 
+  "                                           (((((((((((                          **************************************                                        '                                         ", 
+  "                                             ((((((                             **************************************                                                                                  ", 
+  "                                               ((                               **************************************                                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-200-200-1.0-grid-reference.json
new file mode 100644
index 0000000..8ed6418
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-200-200-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "12", 
+  "10", 
+  "2", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "           !!           !                         ", 
+  "          !!!!!        !!!!       !!!             ", 
+  "        !!!!!!!!     !!!!!!!     !!!!!!    !!!    ", 
+  "       !!!!!!!!!!   !!!!!!!!!   !!!!!!!!  !!!!    ", 
+  "       !!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "       !!! #  !!!!!!!!! # !!!!!!!!!  !!!!!!!!     ", 
+  "         ####  !!!!!!! ###  !!!!!  ## !!!!!!      ", 
+  "        ######   !!! ######  !!! #####  !! ## $$$ ", 
+  "      ##########  ! #########   ########  ####$$$ ", 
+  "       #### ##### ############ ###############$$$ ", 
+  "    %%%##    ##########   #########  ######## $$$ ", 
+  "    %%%       #######      #######    #####   $$$ ", 
+  "    %%%  &&&&  ##&#&&    &&&&###  &&&&&###    $$$ ", 
+  "    %%%&&&&&&&  &&#&&&  &&&&&&&  &&&&&&&      $$$ ", 
+  "    %%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&    $$$ ", 
+  "    %%%&&& &&&&&&&& &&&&&&& &&&&&&&  &&&&&&   $$$ ", 
+  "    %%% &   &&&&&   &&&&&&   &&&&&    &&&&& ''$$$ ", 
+  "    %%%      &&&      &&       &        '''''''$$ ", 
+  "    %%%  (((     ((((     ((((    ((((( '''''''$$ ", 
+  "    %%%(((((((  ((((((  (((((((  (((((((''''''$$$ ", 
+  "    %%((((((((((((((((((((((((((((((((((((    $$$ ", 
+  "    %%%((( (((((((((((((((( (((((((  (((((    $$$ ", 
+  "    %%% (   (((((   )(((((   ((((***********  $$$ ", 
+  "    %%%      (((++ ))),,,--------************ $$$ ", 
+  "    %%%     ++++++ ))),,,--------***.*********$$$ ", 
+  "    %%%    +++++   ))),,,---.----....     ****$$$ ", 
+  "    %%%  +++++///  ))),,,............      ***$$$ ", 
+  "    %%% +++++//////)),,,,............      ***$$$ ", 
+  "    %%%++++////////)),,,,...    0000000    ***$$$ ", 
+  "    %%%+++//////////),,,....    0000000    ***$$$ ", 
+  "    %%%+++////     //,,,...     0000**0*******$$$ ", 
+  "    %%%   ///      ///  ....     *************$$$ ", 
+  "    %%%   ///       /// ....     ************ $$$ ", 
+  "    %%%   ///       /// .............  ***    $$$ ", 
+  "    %%%  ////       ///  ............         $$$ ", 
+  "    %%%   ////     ////   ...........         $$$ ", 
+  "           ///// //////               111         ", 
+  "           ///////////      1111111111111         ", 
+  "            ////////        1111111111111         ", 
+  "              /////         1111111111111         ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-4-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..627608c
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-200-200-2.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "10", 
+  "14", 
+  "12", 
+  "13", 
+  "11", 
+  "2", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "            !           !                         ", 
+  "          !!!!         !!!         !!             ", 
+  "        !!!!!!!!      !!!!!!     !!!!!!           ", 
+  "       !!!!!!!!!!   !!!!!!!!!   !!!!!!!!  !!!     ", 
+  "      !!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!##!!!!!!!#!#   ", 
+  "       #!!!####!!!!!!!!!#!!!!!!!!##!!!!!!!!!!#    ", 
+  "     #########!!!!!!!!!###!!!!!!#!###!!!!!!#!##$$$", 
+  "      ##########!!!!!#######!!!!!#######!!!####$#$", 
+  "       ###########!###########!!#################$", 
+  "   %%%%########################################$$$", 
+  "   %%%%&################&#####################$$$$", 
+  "   %%%&&#&&&&##########&&&#########&&#######$$$$$$", 
+  "   %%%&&&&&&&&#######&&&&&&######&&&&&##### $$$$$$", 
+  "   %%%&&&&&&&&&&####&&&&&&&&####&&&&&&&&##  ''$$$$", 
+  "   %%%%&&&&&&&&&&#&&&&&&&&&&&&#&&&&&&&&&&&& '''''$", 
+  "   %%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''$", 
+  "   %%%%%(&(&&&&&&&(&&&&&&&&(&&&&&&&((&&&'''''''''$", 
+  "   %%%((((((&&&&&(((&&&&&&(((&&&&&((((&&'''''''''$", 
+  "   %%(((((((((&((((((((((((((((((((((((('''''''''$", 
+  "   %%%(((((((((((((((((((((((((((())))))'''''''''$", 
+  "   %%%%((((((((((((((((((********())))))'''''''''$", 
+  "   %%%%%((((((((((((+++((********)))))))))))))$$$$", 
+  "   %%%%%%((((((((+++,,,,,********----))))))))))$$$", 
+  "   %%%%%% .((((((+++,,,,,********----))))))))))$$$", 
+  "   %%%%%%..../(//+++,,,,,********----))))))))))$$$", 
+  "   %%%%%%...//////++,,,,,*******0000000)))))))))$$", 
+  "   %%%%%%.////////++,,,,,,---***0000000  )))))))$$", 
+  "   %%%%%%/////////++,,,,,,------0000000  ))))))$$$", 
+  "   %%%%%%/////////++,,,,,,---   0000000))))))))$$$", 
+  "   %%%%%%//////////,,,,,,,---   0000000))))))))$$$", 
+  "   %%%%%%//////  ///// --,---   0000000))))))))$$$", 
+  "   %%%%%%//////   /////---------0000-))))))))))$$$", 
+  "   %%%%%%/////    /////--------------)))))))))$$$$", 
+  "   %%%%%%//////   /////--------------))))))))$$$$$", 
+  "   %%%%%%///////////////-------------1111   $$$$$$", 
+  "         /////////////// ------------1111         ", 
+  "         ///////////////   ----------1111         ", 
+  "          /////////////     1111111111111         ", 
+  "           //////////       1111111111111         ", 
+  "            ////////        1111111111111         ", 
+  "                 //                               ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-400-400-1.0-grid-reference.json
new file mode 100644
index 0000000..cf7f982
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-400-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                        !                                                                           ", 
+  "                      !!!!                      !!                                                  ", 
+  "                     !!!!!!                    !!!!                   !!!                           ", 
+  "                   !!!!!!!!!                 !!!!!!!                 !!!!!               !!         ", 
+  "                  !!!!!!!!!!!!              !!!!!!!!!!             !!!!!!!!             !!!         ", 
+  "                !!!!!!   !!!!!!            !!!!! !!!!!!           !!!!!!!!!!!          !!!!!        ", 
+  "               !!!!!!      !!!!!         !!!!!!    !!!!!        !!!!!!  !!!!!!       !!!!!!         ", 
+  "              !!!!!         !!!!!       !!!!!!      !!!!!!     !!!!!!     !!!!!     !!!!!           ", 
+  "              !!!!           !!!!!!   !!!!!!         !!!!!!   !!!!!        !!!!!  !!!!!!            ", 
+  "               !               !!!!! !!!!!!            !!!!!!!!!!!          !!!!!!!!!!!             ", 
+  "                                !!!!!!!!!               !!!!!!!!!             !!!!!!!               ", 
+  "                      #          !!!!!!!        #        !!!!!!                !!!!!                ", 
+  "                    ####          !!!!!       ####         !!!        ##        !!!          $$$    ", 
+  "                   #######          !        ######         !        ####                #   $$$    ", 
+  "                 ##########                 #########               #######            ###   $$$    ", 
+  "               ####### #####              ###### #####             #########          #####  $$$    ", 
+  "              ######    ######           ######   #####          ###### #####        #####   $$$    ", 
+  "             #####       ######         #####      ######       #####    ######    ######    $$$    ", 
+  "         %%%%####          #####      ######        ######     #####      ######  ######     $$$    ", 
+  "         %%%% #             #####    #####            #####  ######         ##########       $$$    ", 
+  "         %%%%                ############              ###########           ########        $$$    ", 
+  "         %%%%                  #########                ########              #####          $$$    ", 
+  "         %%%%                   ######                   ######                 ##           $$$    ", 
+  "         %%%%                    ####                      ###          &&                   $$$    ", 
+  "         %%%%      &&&&           ##&&&&&           &&&&&&           &&&&&&&                 $$$    ", 
+  "         %%%%    &&&&&&&&         &&&&&&&&         &&&&&&&&        &&&&&&&&&&                $$$    ", 
+  "         %%%%   &&&&&&&&&        &&&&&&&&&&      &&&&&&&&&&&      &&&&&&&&&&&&               $$$    ", 
+  "         %%%% &&&&&&&&&&&&     &&&&&&  &&&&&    &&&&&&   &&&&    &&&&&&   &&&&&   &          $$$    ", 
+  "         %%%% &&&&&    &&&&   &&&&&&    &&&&&  &&&&&      &&&&  &&&&&      &&&&&&&&&         $$$    ", 
+  "         %%%% &&&       &&&&&&&&&&       &&&&&&&&&&       &&&&&&&&&&        &&&&&&&&         $$$    ", 
+  "         %%%%  &        &&&&&&&&&         &&&&&&&&         &&&&&&&&          &&&&&&          $$$    ", 
+  "         %%%%            &&&&&&&           &&&&&&           &&&&&             &&&&           $$$    ", 
+  "         %%%%              &&&               &                                         ''''' $$$    ", 
+  "         %%%%                                                                          ''''' $$$    ", 
+  "         %%%%                                                                          ''''' $$$    ", 
+  "         %%%%                                                                  ''''''''''''' $$$    ", 
+  "         %%%%       ((              (((((            (((((           (((((((   ''''''''''''' $$$    ", 
+  "         %%%%    (((((((          ((((((((         ((((((((         (((((((((  ''''''''''''' $$$    ", 
+  "         %%%%   (((((((((        ((((((((((      (((((((((((      (((((((((((                $$$    ", 
+  "         %%%%  (((((((((((      (((((( ((((     ((((((  (((((    ((((((   ((((               $$$    ", 
+  "         %%%%((((((   (((((   ((((((    ((((   (((((     (((((  (((((      ((((  ((          $$$    ", 
+  "         %%%% (((      ((((( (((((       ((((((((((       ((((((((((       (((((((((         $$$    ", 
+  "         %%%%  (        ((((((((()       (((((((((         ((((((((         ((((((((         $$$    ", 
+  "         %%%%            ((((((())        (((((((           (((((  ***        ((((           $$$    ", 
+  "          %%%             (((( ))))   ++++   ((                    ******************        $$$    ", 
+  "          %%%                ))))))   ++++   ,,,,                  ********************      $$$    ", 
+  "          %%%               ))))))     +++   ,,,  ---------------  *********************     $$$    ", 
+  "          %%%              )))))       +++   ,,,  ---------------                   *****    $$$    ", 
+  "          %%%            ))))))        +++   ,,,  ---------------                     ****   $$$    ", 
+  "          %%%           ))))))         +++   ,,,           ...............            ****   $$$    ", 
+  "          %%%          )))))           ++++  ,,,    ......................             ***   $$$    ", 
+  "          %%%        ))))))            ++++ ,,,,   .......................             ***   $$$    ", 
+  "          %%%       ))))))              +++ ,,,,  .......................              ***   $$$    ", 
+  "          %%%      )))))    ///////     +++ ,,,   ....                                 ***   $$$    ", 
+  "          %%%    ))))))    //////////// +++ ,,,   ...                                  ***   $$$    ", 
+  "          %%%   )))))    ///////////////+++ ,,,   ...                                  ***   $$$    ", 
+  "          %%%  )))))    //////   ///////++++,,,   ...          000000000000000         ***   $$$    ", 
+  "          %%%))))))    /////         ///+++,,,,   ...          000000000000000        ****   $$$    ", 
+  "          %%% )))     /////           //// ,,,,   ...          000000000000000        ****   $$$    ", 
+  "          %%% ))     /////             ////,,,,   ...                                 ***    $$$    ", 
+  "          %%%        ////              /////,,    ...             ****               ****    $$$    ", 
+  "          %%%        ///                ////      ...             ***********************    $$$    ", 
+  "          %%%        ///                 ///      ...             **********************     $$$    ", 
+  "          %%%        ///                 ///      ...             *********************      $$$    ", 
+  "          %%%        ///                 ///      ....                                       $$$    ", 
+  "          %%%       ////                 ///      .....                                      $$$    ", 
+  "          %%%       ////                 ///       .......................                   $$$    ", 
+  "          %%%       ////                ////        ......................                   $$$    ", 
+  "          %%%        ////               ////         .....................                   $$$    ", 
+  "          %%%        ////               ///            ..................                    $$$    ", 
+  "                      ////             ////                                                  $$$    ", 
+  "                       ////          //////                                                         ", 
+  "                        ////        //////                                                          ", 
+  "                        ////////// /////                      11111111111111111111                  ", 
+  "                         //////////////                 11111111111111111111111111                  ", 
+  "                          ////////////                  11111111111111111111111111                  ", 
+  "                                ////                    11111111111111111111                        ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-4-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..0335be4
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-400-400-2.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "10", 
+  "12", 
+  "2", 
+  "14", 
+  "13", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                       !!!                      !!                                                  ", 
+  "                     !!!!!!                    !!!!                   !!!                           ", 
+  "                   !!!!!!!!!                  !!!!!!                 !!!!!                          ", 
+  "                  !!!!!!!!!!!!              !!!!!!!!!!             !!!!!!!!             !!          ", 
+  "                !!!!!!!!!!!!!!!            !!!!!!!!!!!!           !!!!!!!!!!           !!!!         ", 
+  "               !!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!         !!!!!!!!!!!!!       !!!!!!         ", 
+  "             !!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!!!!     !!!!!!!!        ", 
+  "             !!!!!!!!!! !!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!   !!!!!!!!!!       ", 
+  "              !!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "              !!!!!!       !!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!         ", 
+  "               !!!!   #     !!!!!!!!!!!!!!!!!   #   !!!!!!!!!!!!!!!!!     !!!!!!!!!!!!!!!           ", 
+  "               !!   ####     !!!!!!!!!!!!!!!   ###   !!!!!!!!!!!!!!    #   !!!!!!!!!!!!!            ", 
+  "                   #######     !!!!!!!!!!!!  ######    !!!!!!!!!!!   ####   !!!!!!!!!!!             ", 
+  "                 ##########     !!!!!!!!!   #########   !!!!!!!!    ######    !!!!!!!   #   $$$$$$  ", 
+  "                ############     !!!!!!!   ###########   !!!!!!    #########   !!!!!  ####  $$$$$$  ", 
+  "              ###############     !!!!   ##############    !!!   ############   !!   #####  $$$$$$  ", 
+  "             ##################     !   ################        ##############     ######## $$$$$$  ", 
+  "            ####################      ####################     #################  ##########$$$$$$  ", 
+  "             ########  ##########    ########### ##########   ##############################$$$$$$  ", 
+  "        %%%%%#######    ########### ##########    ##################### ##################  $$$$$$  ", 
+  "        %%%%%%####        ###################      ##################    ################   $$$$$$  ", 
+  "        %%%%%% ##          #################        ################      #############     $$$$$$  ", 
+  "        %%%%%%              ##############            #############         ##########      $$$$$$  ", 
+  "        %%%%%%               ############            &&##########     &&&&&& ########       $$$$$$  ", 
+  "        %%%%%%    &&&&&&       #######&&&&         &&&&&&#######    &&&&&&&&&  ####         $$$$$$  ", 
+  "        %%%%%%  &&&&&&&&&&      ##&###&&&&&      &&&&&&&&&#####   &&&&&&&&&&&&  ##          $$$$$$  ", 
+  "        %%%%%%&&&&&&&&&&&&&    &&#&##&&&&&&&    &&&&&&&&&&&&&#   &&&&&&&&&&&&&&             $$$$$$  ", 
+  "        %%%%%&&&&&&&&&&&&&&   &&&&&&&&&&&&&&&  &&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& &          $$$$$$  ", 
+  "        %%%%%%&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&         $$$$$$  ", 
+  "        %%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&        $$$$$$  ", 
+  "        %%%%%%&&&&&&  &&&&&&&&&&&&&&&  &&&&&&&&&&&&&&   &&&&&&&&&&&&&&    &&&&&&&&&&        $$$$$$  ", 
+  "        %%%%%% &&&    &&&&&&&&&&&&&     &&&&&&&&&&&&     &&&&&&&&&&&&      &&&&&&&&&&       $$$$$$  ", 
+  "        %%%%%%  &      &&&&&&&&&&&       &&&&&&&&&&       &&&&&&&&&&       &&&&&&&&&&  '''''$$$$$$  ", 
+  "        %%%%%%          &&&&&&&&&         &&&&&&&&         &&&&&&&           &&&&&&    '''''''$$$$  ", 
+  "        %%%%%%           &&&&&&            &&&&&              &&               '''''''''''''''$$$$  ", 
+  "        %%%%%%                                        (((             (((((    '''''''''''''$$$$$$  ", 
+  "        %%%%%%    ((((((           (((((((         ((((((((         (((((((((  '''''''''''''''$$$$  ", 
+  "        %%%%%%  (((((((((        ((((((((((       ((((((((((      (((((((((((( '''''''''''''''$$$$  ", 
+  "        %%%%%% (((((((((((      ((((((((((((    (((((((((((((    (((((((((((((('''''''''''''$$$$$$  ", 
+  "        %%%%%((((((((((((((   (((((((((((((((  (((((((((((((((  ((((((((((((((('''''''''''''''$$$$  ", 
+  "        %%%%(((((((((((((((( (((((((((((((((( ((((((((((((((((((((((((((((((((((((          $$$$$$  ", 
+  "        %%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((         $$$$$$  ", 
+  "        %%%%%%(((((( (((((((((((((((((((((((((((((((((  ((((((((((((((    ((((((((((       $$$$$$$  ", 
+  "        %%%%%% ((((   ((((((((((((((    (((((((((((((    (((((((((()()))))))))))(((((       $$$$$$  ", 
+  "        %%%%%%  (      (((((((((((      (*(((((((((       ((((((((())))))))))))))))))))     $$$$$$  ", 
+  "        %%%%%%          (((((((((++  ******((((((( ,,,,,,,,,,,(,,(()))))))))))))))))))))    $$$$$$  ", 
+  "        %%%%%%           ((((((+++++ ******(------ ,,,,,,,,,,,,,,  ))))))))))))))))))))))   $$$$$$  ", 
+  "        %%%%%%           +++(+++++++ ****** ------,,,,,,,,,,,,,,,  )))))))))))))))))))))))  $$$$$$  ", 
+  "        %%%%%%          +++++++++++  ******-------,,,,,,,,,,,,,,, ))))))))))))))))))))))))) $$$$$$  ", 
+  "        %%%%%%         ++++++++++    ******-------,,,,,,,...,............. )))))))))))))))) $$$$$$  ", 
+  "        %%%%%%       +++++++++++      *****-------,,,,,,.,,.,.,,,.........          ))))))) $$$$$$  ", 
+  "        %%%%%%      +++++++++++       *****------ ........,.,..,,.........           )))))) $$$$$$  ", 
+  "        %%%%%%     +++++++++////      *****------.........................           )))))))$$$$$$  ", 
+  "        %%%%%%   ++++++++++///////////*****------.........................           ))))))$$$$$$$  ", 
+  "        %%%%%%  ++++++++++////////////*****------.........................           )))))))$$$$$$  ", 
+  "        %%%%%% +++++++++//////////////****-------.......       000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%+++++++++////////////////***-------......        000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%+++++++//////////////////***------.......        000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%++++++///////////////////***------.......        000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%++++++/////////       //////------......         000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%+++++ ////////         /////------......         000000000)))000))))))))))))) $$$$$$  ", 
+  "        %%%%%% ++   ///////           //////----......         00000000)))))))))))))))))))) $$$$$$  ", 
+  "        %%%%%%      //////            //////    .......           ))))))))))))))))))))))))) $$$$$$  ", 
+  "        %%%%%%%    ///////             //////   .......           ))))))))))))))))))))))))  $$$$$$  ", 
+  "        %%%%%%     ///////             ///////  .......           )))))))))))))))))))))))   $$$$$$  ", 
+  "        %%%%%%     //////              ///////   .......          ))))))))))))))))))))))    $$$$$$  ", 
+  "        %%%%%%     //////              ///////   .........................   )))))))        $$$$$$  ", 
+  "        %%%%%%     //////              //////    .........................                  $$$$$$  ", 
+  "        %%%%%%     ///////             //////     ........................                  $$$$$$  ", 
+  "        %%%%%%     ////////            //////      .......................                  $$$$$$  ", 
+  "        %%%%%%     ////////           ///////       ......................                  $$$$$$  ", 
+  "                    ////////        /////////         ....................                  $$$$$$  ", 
+  "                     //////////    //////////                                                       ", 
+  "                      //////////////////////            11111111111111111111111111                  ", 
+  "                      /////////////////////             11111111111111111111111111                  ", 
+  "                       //////////////////               11111111111111111111111111                  ", 
+  "                        ////////////////                11111111111111111111111111                  ", 
+  "                         //////////////                 11111111111111111111111111                  ", 
+  "                            /////////                   11111111111111111111111111                  ", 
+  "                                   /                                                                ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-600-600-1.0-grid-reference.json
new file mode 100644
index 0000000..4a9d99d
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-600-600-1.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "12", 
+  "10", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                   !!                                                                                                                 ", 
+  "                                 !!!!!                                  !!                                                                            ", 
+  "                                !!!!!!!!                               !!!!!                              !!                                          ", 
+  "                              !!!!!!!!!!!                             !!!!!!!                           !!!!!                          !              ", 
+  "                             !!!!!!  !!!!!                          !!!!!!!!!!                         !!!!!!!!                       !!              ", 
+  "                           !!!!!!     !!!!!                        !!!!!  !!!!!!                     !!!!!!!!!!!                    !!!!!             ", 
+  "                          !!!!!!       !!!!!!                    !!!!!!    !!!!!!                   !!!!!!  !!!!!                  !!!!!!             ", 
+  "                        !!!!!!           !!!!!                  !!!!!!       !!!!!                 !!!!!     !!!!!!               !!!!!               ", 
+  "                      !!!!!!!             !!!!!               !!!!!!          !!!!!              !!!!!!       !!!!!!            !!!!!!                ", 
+  "                     !!!!!!                !!!!!             !!!!!!            !!!!!!           !!!!!!          !!!!!          !!!!!!                 ", 
+  "                     !!!!!                  !!!!!!          !!!!!               !!!!!!         !!!!!             !!!!!        !!!!!                   ", 
+  "                     !!!                      !!!!!       !!!!!!                  !!!!!      !!!!!!               !!!!!!    !!!!!!                    ", 
+  "                                               !!!!!     !!!!!!                    !!!!!!   !!!!!!                 !!!!!!  !!!!!!                     ", 
+  "                                                !!!!!  !!!!!!                       !!!!!!!!!!!!                     !!!!!!!!!!                       ", 
+  "                                                 !!!!!!!!!!!                          !!!!!!!!!                       !!!!!!!!                        ", 
+  "                                                   !!!!!!!                             !!!!!!                          !!!!!                          ", 
+  "                                ###                 !!!!!               #               !!!!                             !!                           ", 
+  "                               #####                 !!!              ####                !               #                                 $$$$      ", 
+  "                             ########                                ######                              ###                                $$$$      ", 
+  "                            ##########                              #########                           #####                        ##     $$$$      ", 
+  "                          ######  ######                          ############                        #########                     ####    $$$$      ", 
+  "                         ######    ######                        ######   #####                      ###########                  ######    $$$$      ", 
+  "                       ######        #####                     ######      ######                   #####   #####                ######     $$$$      ", 
+  "                     #######          #####                   ######        ######                 #####     ######             #####       $$$$      ", 
+  "                    ######             ######                #####            #####              ######        #####          ######        $$$$      ", 
+  "                    #####               ######             ######              #####            #####           ######       ######         $$$$      ", 
+  "               %%%  ###                   #####           ######                ######         #####             ######    ######           $$$$      ", 
+  "               %%%                         #####        ######                    #####      ######                #####  ######            $$$$      ", 
+  "               %%%                          ######     ######                      #####    ######                  ##########              $$$$      ", 
+  "               %%%                            #####   #####                         ###### #####                     ########               $$$$      ", 
+  "               %%%                             ###########                           ##########                        #####                $$$$      ", 
+  "               %%%                              #########                              #######                          ##                  $$$$      ", 
+  "               %%%                               ######                                 ####                                                $$$$      ", 
+  "               %%%                                 ###                                   ##                                                 $$$$      ", 
+  "               %%%                                                                                         &&&&&                            $$$$      ", 
+  "               %%%            &&                       &&&&&                   &&&&&&&&                 &&&&&&&&&                           $$$$      ", 
+  "               %%%         &&&&&&&&                  &&&&&&&&&               &&&&&&&&&&&               &&&&&&&&&&&                          $$$$      ", 
+  "               %%%        &&&&&&&&&&               &&&&&&&&&&&&             &&&&&&&&&&&&&            &&&&&&&&&&&&&&                         $$$$      ", 
+  "               %%%      &&&&&&&&&&&&&            &&&&&&&   &&&&&           &&&&&&    &&&&&          &&&&&&     &&&&&                        $$$$      ", 
+  "               %%%     &&&&&&     &&&&          &&&&&&      &&&&         &&&&&&       &&&&         &&&&&        &&&&                        $$$$      ", 
+  "               %%%    &&&&&        &&&&        &&&&&         &&&&       &&&&&          &&&&       &&&&&          &&&&      &                $$$$      ", 
+  "               %%%   &&&&&         &&&&&      &&&&&           &&&&     &&&&&            &&&&    &&&&&&            &&&&   &&&&               $$$$      ", 
+  "               %%%    &&&           &&&&&   &&&&&&            &&&&&  &&&&&&             &&&&&&&&&&&&&             &&&&&&&&&&&&              $$$$      ", 
+  "               %%%    &              &&&&&&&&&&&&              &&&&&&&&&&&               &&&&&&&&&&                &&&&&&&&&                $$$$      ", 
+  "               %%%                    &&&&&&&&&                 &&&&&&&&&                 &&&&&&&&                   &&&&&&                 $$$$      ", 
+  "               %%%                     &&&&&&&                   &&&&&&                      &&&                        &                   $$$$      ", 
+  "               %%%                        &&                                                                                                $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                    '''''''''''''''''''   $$$$      ", 
+  "               %%%                                                                                                    '''''''''''''''''''   $$$$      ", 
+  "               %%%                                      (((                     ((((((                   (((((((      '''''''''''''''''''   $$$$      ", 
+  "               %%%          (((((((                  ((((((((                 (((((((((                (((((((((((                          $$$$      ", 
+  "               %%%        ((((((((((               (((((((((((              ((((((((((((             (((((((((((((                          $$$$      ", 
+  "               %%%      (((((((((((((             (((((((((((((            (((((((  (((((           ((((((     ((((                         $$$$      ", 
+  "               %%%     (((((((   (((((          ((((((     (((((          (((((      (((((         (((((        ((((                        $$$$      ", 
+  "               %%%    (((((       ((((         ((((((       (((((       ((((((        (((((       (((((          ((((      (                $$$$      ", 
+  "               %%%   (((((         ((((       (((((          ((((      (((((           ((((     ((((((           (((((    (((               $$$$      ", 
+  "               %%%   ((((           ((((     (((((            ((((    (((((             (((((  ((((((             ((((((((((((              $$$$      ", 
+  "               %%%    ((            (((((( ((((((              (((((((((((               ((((((((((                ((((((((((               $$$$      ", 
+  "               %%%                   (((((((((((                (((((((((                 ((((((((                  (((((((                 $$$$      ", 
+  "               %%%                    ((((((((   ))              ((((((                    (((((                       ((                   $$$$      ", 
+  "               %%%                      ((((    ))))      ***       (                               +++++++                                 $$$$      ", 
+  "               %%%                             )))))      ****                                      +++++++++++++++++++++++++++             $$$$      ", 
+  "               %%%                           ))))))       ****       ,,,                            +++++++++++++++++++++++++++++           $$$$      ", 
+  "               %%%                          )))))          ***      ,,,,    --                        +++++++++++++++++++++++++++++         $$$$      ", 
+  "               %%%                         )))))           ***      ,,,,    ----------------------                        +++++++++         $$$$      ", 
+  "               %%%                       ))))))            ***      ,,,     ----------------------                             +++++        $$$$      ", 
+  "               %%%                      )))))              ***      ,,,     ----------------------                               ++++       $$$$      ", 
+  "               %%%                     )))))               ****     ,,,                                                          ++++       $$$$      ", 
+  "               %%%                   ))))))                ****     ,,,                                                           ++++      $$$       ", 
+  "               %%%                  )))))                  ****     ,,,               ........................                     +++      $$$       ", 
+  "               %%%                 )))))                    ***    ,,,,       ................................                     +++      $$$       ", 
+  "               %%%               ))))))                     ***    ,,,,       ................................                     +++      $$$       ", 
+  "               %%%              )))))                       ***    ,,,       ...................                                   +++      $$$       ", 
+  "               %%%            ))))))                        ***    ,,,      ....                                                   +++      $$$       ", 
+  "               %%%           ))))))        ////             ****   ,,,      ....                                                   +++      $$$       ", 
+  "               %%%          )))))         ///////////       ****   ,,,      ...                                                    +++      $$$       ", 
+  "               %%%        ))))))         /////////////////   ***  ,,,,      ...                                                    +++      $$$       ", 
+  "               %%%       ))))))        ////////////////////  ***  ,,,,      ...                                                    +++      $$$       ", 
+  "               %%%      )))))         //////       ////////  ***  ,,,,     ....                                                    +++      $$$       ", 
+  "               %%%    ))))))         /////              //// ***  ,,,      ....               00000000000000000000000             ++++      $$$       ", 
+  "               %%%   ))))))        //////                ////***  ,,,      ....               00000000000000000000000             ++++      $$$       ", 
+  "               %%%  )))))         //////                 /////    ,,,      ...                00000000000000000000000             +++       $$$       ", 
+  "               %%%   )))         /////                    ////    ,,,      ...                                                    +++       $$$       ", 
+  "               %%%   ))          ////                      ////  ,,,,      ...                                                    +++       $$$       ", 
+  "               %%%               ///                        //// ,,,,      ...                                                   ++++       $$$       ", 
+  "               %%%              ////                        /////          ...                                                   ++++       $$$       ", 
+  "               %%%              ////                         ////          ...                    ++++++++++++++++++++++++++++++++++        $$$       ", 
+  "               %%%              ///                           ///          ....                   +++++++++++++++++++++++++++++++++         $$$       ", 
+  "               %%%              ///                           ////         ....                   +++++++++++++++++++++++++++++++++         $$$       ", 
+  "               %%%              ///                           ///           ...                                    +++++++++++              $$$       ", 
+  "               %%%              ///                           ///           ...                                                             $$$       ", 
+  "               %%%              ///                           ///           ....                                                            $$$       ", 
+  "               %%%             ////                           ///           .....                                                           $$$       ", 
+  "               %%%             ////                           ///            .....                                                          $$$       ", 
+  "               %%%             ///                           ////             ......                                                        $$$       ", 
+  "               %%%             ////                          ////              ...............................                              $$$       ", 
+  "               %%%             ////                          ///                ..............................                              $$$       ", 
+  "               %%%              ////                         ///                  ............................                              $$$       ", 
+  "               %%%               ////                        ///                                                                            $$$       ", 
+  "                                  ////                      ////                                                                            $$$       ", 
+  "                                  ////                     /////                                                                                      ", 
+  "                                   ////                  //////                                                                                       ", 
+  "                                    ////                //////                                                                                        ", 
+  "                                    /////              /////                                                                                          ", 
+  "                                     ////////        //////                                                                                           ", 
+  "                                      ///////////// //////                           11111111111111111111111111111111111111                           ", 
+  "                                       /////////////////                             11111111111111111111111111111111111111                           ", 
+  "                                           ////////////                              11111111111111111111111111111111111111                           ", 
+  "                                                 ////                                11111111111111                                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-4-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..b6fb642
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-600-600-2.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                   !!                                                                                                                 ", 
+  "                                  !!!!                                   !                                                                            ", 
+  "                                !!!!!!!!                               !!!!!                              !!                                          ", 
+  "                               !!!!!!!!!!                             !!!!!!!                           !!!!!                                         ", 
+  "                             !!!!!!!!!!!!!                          !!!!!!!!!!                         !!!!!!!!                       !               ", 
+  "                           !!!!!!!!!!!!!!!!                        !!!!!!!!!!!!                       !!!!!!!!!!                     !!!              ", 
+  "                          !!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!                   !!!!!!!!!!!!!                  !!!!!              ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!                 !!!!!!!!!!!!!!!                !!!!!!!             ", 
+  "                       !!!!!!!!!!!   !!!!!!!!!!                !!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!!!             !!!!!!!!!            ", 
+  "                     !!!!!!!!!!!!     !!!!!!!!!!             !!!!!!!!!!!  !!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!          !!!!!!!!!!!            ", 
+  "                    !!!!!!!!!!!        !!!!!!!!!!!          !!!!!!!!!!!    !!!!!!!!!!!         !!!!!!!!!!!  !!!!!!!!!!        !!!!!!!!!!!             ", 
+  "                    !!!!!!!!!!           !!!!!!!!!!       !!!!!!!!!!!        !!!!!!!!!!      !!!!!!!!!!!     !!!!!!!!!!     !!!!!!!!!!!               ", 
+  "                     !!!!!!!              !!!!!!!!!!     !!!!!!!!!!!          !!!!!!!!!!    !!!!!!!!!!!       !!!!!!!!!!!! !!!!!!!!!!!                ", 
+  "                     !!!!!!                !!!!!!!!!!   !!!!!!!!!!!            !!!!!!!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                      !!!                   !!!!!!!!!!!!!!!!!!!!!                !!!!!!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!!!                   ", 
+  "                       !                      !!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!                    ", 
+  "                                 #             !!!!!!!!!!!!!!!          #          !!!!!!!!!!!!!!                   !!!!!!!!!!!!                      ", 
+  "                               #####            !!!!!!!!!!!!!          ###          !!!!!!!!!!!!                     !!!!!!!!!!                       ", 
+  "                              #######            !!!!!!!!!!!         ######           !!!!!!!!!          ###          !!!!!!!!                        ", 
+  "                            ##########             !!!!!!!          #########          !!!!!!           #####          !!!!!               $$$$$$     ", 
+  "                          #############             !!!!!         ############          !!!!           ########          !!         ##     $$$$$$     ", 
+  "                         ################            !!          ##############           !          ###########                   ####    $$$$$$     ", 
+  "                       ###################                      ################                    #############                #######   $$$$$$     ", 
+  "                      #####################                   ####################                 ################             ########   $$$$$$     ", 
+  "                    ############  ##########                 ######################              ###################          ###########  $$$$$$     ", 
+  "                   ###########     ###########             ###########    ##########            #####################        ###########   $$$$$$     ", 
+  "                   ##########        ##########           ###########      ###########         ##########   ###########     ##########     $$$$$$     ", 
+  "                    #######           ##########         ###########        ###########       ##########     ###########  ###########      $$$$$$     ", 
+  "             %%%%%% ######             ###########     ###########            ##########    ###########        #####################       $$$$$$     ", 
+  "             %%%%%%  ###                 ##########   ###########              ##########  ##########           ##################         $$$$$$     ", 
+  "             %%%%%%   #                   #####################                 ####################             ################          $$$$$$     ", 
+  "             %%%%%%                        ###################                    #################                #############           $$$$$$     ", 
+  "             %%%%%%                         #################                      ##############                   ##########             $$$$$$     ", 
+  "             %%%%%%                           #############                         ############                     ########              $$$$$$     ", 
+  "             %%%%%%                            ###########                            #########                        ####                $$$$$$     ", 
+  "             %%%%%%                             ########                         &&&&& #######           &&&&&&&&       ##                 $$$$$$     ", 
+  "             %%%%%%          &&&&&&               #####&&&&&&&                &&&&&&&&&&####           &&&&&&&&&&&                         $$$$$$     ", 
+  "             %%%%%%       &&&&&&&&&&               ###&&&&&&&&&             &&&&&&&&&&&&&##          &&&&&&&&&&&&&&                        $$$$$$     ", 
+  "             %%%%%%     &&&&&&&&&&&&&&            &&&&&&&&&&&&&&           &&&&&&&&&&&&&&&          &&&&&&&&&&&&&&&&                       $$$$$$     ", 
+  "             %%%%%%    &&&&&&&&&&&&&&&          &&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&&                      $$$$$$     ", 
+  "             %%%%%%   &&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&&       &&&&&&&&&&&&&&&&&&&&      &&&&&&&&&&&&&&&&&&&&                     $$$$$$     ", 
+  "             %%%%%%  &&&&&&&&&&&&&&&&&&&      &&&&&&&&&&&&&&&&&&&&     &&&&&&&&&&&& &&&&&&&&    &&&&&&&&&&&   &&&&&&&&    &&               $$$$$$     ", 
+  "             %%%%%% &&&&&&&&&&& &&&&&&&&&    &&&&&&&&&&    &&&&&&&&   &&&&&&&&&&     &&&&&&&&  &&&&&&&&&&      &&&&&&&&&&&&&               $$$$$$     ", 
+  "             %%%%%%  &&&&&&&     &&&&&&&&& &&&&&&&&&&&      &&&&&&&&&&&&&&&&&&&       &&&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&              $$$$$$     ", 
+  "             %%%%%%   &&&&&       &&&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&         &&&&&&&&&&&&&&&&&          &&&&&&&&&&&&&             $$$$$$     ", 
+  "             %%%%%%   &&&&         &&&&&&&&&&&&&&&&          &&&&&&&&&&&&&&&           &&&&&&&&&&&&&&&           &&&&&&&&&&&&&&            $$$$$$     ", 
+  "             %%%%%%    &&           &&&&&&&&&&&&&&            &&&&&&&&&&&&&             &&&&&&&&&&&&              &&&&&&&&&&&&             $$$$$$     ", 
+  "             %%%%%%                  &&&&&&&&&&&&              &&&&&&&&&&&               &&&&&&&&&&                 &&&&&&&&               $$$$$$     ", 
+  "             %%%%%%                   &&&&&&&&&                 &&&&&&&&                  &&&&&&&                     &&&&         ''''''''$$$$$$     ", 
+  "             %%%%%%                     &&&&&                      &&&                        &                                    ''''''''$$$$$$     ", 
+  "             %%%%%%                                                                                                                ''''''''$$$$$$     ", 
+  "             %%%%%%%                                                                                                  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%                                                                                                  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%                                                             (((                      ((((((      '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%         ((((((                   (((((((                 (((((((((                (((((((((((    '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%      ((((((((((                ((((((((((               (((((((((((              (((((((((((((   '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%     ((((((((((((             (((((((((((((            ((((((((((((((           ((((((((((((((((  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%   (((((((((((((((          ((((((((((((((((          ((((((((((((((((         (((((((((((((((((  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%  (((((((((((((((((        ((((((((((((((((((       (((((((((((((((((((       (((((((((((((((((((                      $$$$$$     ", 
+  "             %%%%%%% (((((((((((((((((((      ((((((((((((((((((((     (((((((((((((((((((((     (((((((((((((((((((((    (                $$$$$$     ", 
+  "             %%%%%%%((((((((((((((((((((     ((((((((((( (((((((((    ((((((((((   (((((((((   (((((((((((     (((((((( ((((               $$$$$$     ", 
+  "             %%%%%%%(((((((((   (((((((((  (((((((((((     ((((((((((((((((((((      (((((((((((((((((((       ((((((((((((((              $$$$$$     ", 
+  "             %%%%%%% ((((((       ((((((((((((((((((        (((((((((((((((((         (((((((((((((((((         ((((((((((((((             $$$$$$     ", 
+  "             %%%%%%%  ((((        (((((((((((((((((          (((((((((((((((           (((((((((((((((           ((((((((((((((            $$$$$$     ", 
+  "             %%%%%%%   ((          (((((((((((((((           ((((((((((((((            ((((((((((((((             ((((((((((((             $$$$$$     ", 
+  "             %%%%%%%                ((((((((((((())           ((((((((((((               (((((((((( *****************(((((((               $$$$$$     ", 
+  "             %%%%%%%                 (((((((((()))))     ++++++ (((((((((                 (((((((   ****************************           $$$$$$     ", 
+  "             %%%%%%%                   (((((())))))))    ++++++   (,(((                      ((     ******************************         $$$$$$     ", 
+  "             %%%%%%%                      ())))))))))    ++++++    ,,,,,,   --------------------    ********************************       $$$$$$     ", 
+  "             %%%%%%%                     )))))))))))     ++++++    ,,,,,,   ----------------------  *********************************      $$$$$$     ", 
+  "             %%%%%%%                    )))))))))))      +++++++   ,,,,,,   ----------------------  *********************************      $$$$$$     ", 
+  "             %%%%%%%                   ))))))))))        +++++++   ,,,,,,   ----------------------              **********************     $$$$$$     ", 
+  "             %%%%%%%                 )))))))))))         +++++++  ,,,,,,,   ----------------------                            *********    $$$$$$     ", 
+  "             %%%%%%%                )))))))))))           ++++++  ,,,,,,,   ----------------------           .                  *******    $$$$$$     ", 
+  "             %%%%%%%               ))))))))))             ++++++  ,,,,,,,         .....-----------............                  *******    $$$$$$     ", 
+  "             %%%%%%%             )))))))))))              ++++++  ,,,,,,     .................................                   ******    $$$$$$     ", 
+  "             %%%%%%%            )))))))))))               +++++++ ,,,,,,     .................................                   ******    $$$$$$     ", 
+  "             %%%%%%%           ))))))))))                 +++++++ ,,,,,,    ..................................                   *******   $$$$$$     ", 
+  "             %%%%%%%         )))))))))))                  +++++++ ,,,,,,   ...................................                   *******   $$$$$$     ", 
+  "             %%%%%%%        )))))))))))   ////////         ++++++,,,,,,,   ...................................                   *******   $$$$$$     ", 
+  "             %%%%%%%       ))))))))))    ////////////////  ++++++,,,,,,,  ..........                                             *******   $$$$$$     ", 
+  "             %%%%%%%     )))))))))))    ///////////////////++++++,,,,,,   .......                                                *******   $$$$$$     ", 
+  "              %%%%%%    )))))))))))   /////////////////////++++++,,,,,,   .......                                                *******   $$$$$$     ", 
+  "              %%%%%%   ))))))))))    ///////////////////////+++++,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%% )))))))))))   ////////////////////////++++++,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%%)))))))))))   ///////////   //////////////+++,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%%)))))))))    //////////           ///////+/+,,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%%))))))))    //////////              /////// ,,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%% ))))))    //////////               ////////,,,,,,    ......              00000000000000000000000           *******    $$$$$$     ", 
+  "              %%%%%% ))))      ////////                  ///////,,,,,,    ......              00000000000000                    *******    $$$$$$     ", 
+  "              %%%%%%  ))       ///////                    //////,,,,,,    ......                  ***********                   ******     $$$$$$     ", 
+  "              %%%%%%           //////                      ///////   ,    ......                  ************************************     $$$$$$     ", 
+  "              %%%%%%           //////                      ///////        ......                  ************************************     $$$$$$     ", 
+  "              %%%%%%           //////                       /////         ......                  ***********************************      $$$$$$     ", 
+  "              %%%%%%          ///////                        //////       ......                  **********************************       $$$$$$     ", 
+  "              %%%%%%          ///////                        //////       ......                  **********************************       $$$$$$     ", 
+  "              %%%%%%          ///////                        //////       .......                     *****************************        $$$$$$     ", 
+  "              %%%%%%          //////                        ///////       ........                                                         $$$$$$     ", 
+  "              %%%%%%          //////                        ///////        ........                                                        $$$$$$     ", 
+  "              %%%%%%          //////                        //////         ...................................                             $$$$$$     ", 
+  "              %%%%%%          //////                        //////          ..................................                             $$$$$$     ", 
+  "              %%%%%%         ////////                       //////           .................................                             $$$$$$     ", 
+  "              %%%%%%         ////////                       //////           .................................                             $$$$$$     ", 
+  "              %%%%%%          ////////                     ///////             ...............................                             $$$$$$     ", 
+  "              %%%%%%           ////////                    ///////               .............................                             $$$$$$     ", 
+  "                                ////////                  ///////                                                                          $$$$$$     ", 
+  "                                ////////                /////////                                                                                     ", 
+  "                                 ////////              //////////                                                                                     ", 
+  "                                  ////////           ///////////                                                                                      ", 
+  "                                   /////////////    ///////////                                                  1111111111                           ", 
+  "                                   //////////////////////////                       111111111111111111111111111111111111111                           ", 
+  "                                    ////////////////////////                        111111111111111111111111111111111111111                           ", 
+  "                                     //////////////////////                          11111111111111111111111111111111111111                           ", 
+  "                                      ///////////////////                            11111111111111111111111111111111111111                           ", 
+  "                                       /////////////////                             11111111111111111111111111111111111111                           ", 
+  "                                              /////////                              11111111111111111111111111111111111111                           ", 
+  "                                                    /                                                                                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..cfd441f
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "12", 
+  "10", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                               !                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                            !!!!!!!                                             !!!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!!                                                        ", 
+  "                                         !!!!!! !!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!   !!!!!!                                     !!!!!!!!!!!                                   !!!!!!!!                                  !                   ", 
+  "                                      !!!!!!       !!!!!                                   !!!!!!  !!!!!                                 !!!!!!!!!!                               !!!!                  ", 
+  "                                     !!!!!!         !!!!!                                !!!!!!     !!!!!                               !!!!!  !!!!!!                            !!!!!!                 ", 
+  "                                   !!!!!!            !!!!!!                             !!!!!!       !!!!!!                           !!!!!!     !!!!!                          !!!!!                   ", 
+  "                                 !!!!!!!              !!!!!!                           !!!!!          !!!!!!                         !!!!!!       !!!!!                       !!!!!!                    ", 
+  "                                !!!!!!                  !!!!!                        !!!!!!             !!!!!                       !!!!!          !!!!!                     !!!!!!                     ", 
+  "                              !!!!!!!                    !!!!!                      !!!!!!               !!!!!                    !!!!!!            !!!!!!                  !!!!!                       ", 
+  "                             !!!!!!                       !!!!!!                  !!!!!!                  !!!!!!                 !!!!!!               !!!!!               !!!!!!                        ", 
+  "                            !!!!!                          !!!!!!                !!!!!!                     !!!!!               !!!!!                  !!!!!             !!!!!!                         ", 
+  "                            !!!!                             !!!!!              !!!!!                        !!!!!            !!!!!!                    !!!!!!          !!!!!                           ", 
+  "                             !                                !!!!!           !!!!!!                          !!!!!!         !!!!!                       !!!!!!       !!!!!!                            ", 
+  "                                                               !!!!!!        !!!!!                             !!!!!!      !!!!!!                          !!!!!     !!!!!                              ", 
+  "                                                                !!!!!!     !!!!!!                                !!!!!    !!!!!!                            !!!!!  !!!!!!                               ", 
+  "                                                                  !!!!!   !!!!!!                                  !!!!!! !!!!!                               !!!!!!!!!!!                                ", 
+  "                                                                   !!!!!!!!!!!                                     !!!!!!!!!!                                 !!!!!!!!                                  ", 
+  "                                                                    !!!!!!!!!                                        !!!!!!!                                    !!!!!                                   ", 
+  "                                                                     !!!!!!                                           !!!!                                       !!!                                    ", 
+  "                                           ###                         !!!                      #                      !!                                                                   $$$         ", 
+  "                                          #####                         !                     ####                                                                                          $$$         ", 
+  "                                        ########                                             #######                                         ##                                             $$$         ", 
+  "                                      ###########                                          ##########                                      #####                                   #        $$$         ", 
+  "                                     ######  ######                                       ###### #####                                    ########                               ###        $$$         ", 
+  "                                   #######     #####                                     #####    #####                                  ##########                             #####      $$$$         ", 
+  "                                  ######        #####                                  ######      ######                               #####  #####                           #####        $$$         ", 
+  "                                ######           ######                               ######        ######                            ######    ######                       ######         $$$         ", 
+  "                               ######             ######                             #####            #####                          ######      ######                     ######          $$$         ", 
+  "                             ######                 #####                          ######              #####                        #####          #####                   #####            $$$         ", 
+  "                           #######                   #####                        #####                 ######                     #####            ######               ######             $$$         ", 
+  "                          ######                      ######                    ######                    #####                  ######              ######             #####               $$$         ", 
+  "                           ####                         #####                  ######                      #####                #####                  #####          ######                $$$         ", 
+  "                    %%%    ##                            #####                #####                         ######             #####                    ######       ######                 $$$         ", 
+  "                    %%%                                   ######            ######                           ######          ######                       #####     #####                   $$$         ", 
+  "                    %%%                                    ######          ######                              #####        ######                         ###### ######                    $$$         ", 
+  "                    %%%                                      #####       ######                                 #####      #####                            ###########                     $$$         ", 
+  "                    %%%                                       #####     ######                                   ######   #####                               #######                      $$$$         ", 
+  "                    %%%                                        ######  #####                                       ###########                                 #####                        $$$         ", 
+  "                    %%%                                         ###########                                         ########                                    ##                          $$$         ", 
+  "                    %%%                                           ########                                           ######                                                                 $$$         ", 
+  "                    %%%                                            #####                                              ####                                                                  $$$         ", 
+  "                    %%%                                             ###                                                 #                                                                   $$$         ", 
+  "                    %%%                                                                                                                                                                     $$$         ", 
+  "                    %%%                                                                                                                       &&&&&&&                                       $$$         ", 
+  "                    %%%                                                   &&&&&&                           &&&&&&&&                         &&&&&&&&&&                                      $$$         ", 
+  "                    %%%               &&&&&&&&                         &&&&&&&&&&                       &&&&&&&&&&&&                      &&&&&&&&&&&&&                                    $$$$         ", 
+  "                    %%%             &&&&&&&&&&&                      &&&&&&&&&&&&&                     &&&&&&&&&&&&&&                   &&&&&&&&   &&&&&                                    $$$         ", 
+  "                    %%%           &&&&&&&&&&&&&&                    &&&&&&&  &&&&&&                  &&&&&&&     &&&&&                 &&&&&&       &&&&&                                  $$$$         ", 
+  "                    %%%          &&&&&&&    &&&&&                 &&&&&&&      &&&&&                &&&&&&        &&&&&               &&&&&          &&&&&                                 $$$$         ", 
+  "                    %%%        &&&&&&         &&&&               &&&&&&          &&&&              &&&&&           &&&&&             &&&&&            &&&&                                 $$$$         ", 
+  "                    %%%       &&&&&&          &&&&&             &&&&&            &&&&&           &&&&&&             &&&&           &&&&&&              &&&&                                $$$$         ", 
+  "                    %%%      &&&&&             &&&&            &&&&&              &&&&          &&&&&                &&&&         &&&&&                 &&&&        &&                     $$$$         ", 
+  "                    %%%     &&&&&               &&&&          &&&&&                &&&&        &&&&&                 &&&&&       &&&&&                  &&&&&     &&&&&                    $$$$         ", 
+  "                    %%%      &&&                 &&&&       &&&&&&                  &&&&      &&&&&                   &&&&&    &&&&&&                    &&&&&&&&&&&&&&                    $$$$         ", 
+  "                    %%%       &                  &&&&&&   &&&&&&&                   &&&&&&& &&&&&&                     &&&&&&&&&&&&&                      &&&&&&&&&&&                      $$$$         ", 
+  "                    %%%                           &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                         &&&&&&&&&                       $$$$         ", 
+  "                    %%%                            &&&&&&&&&&&                         &&&&&&&&                           &&&&&&                              &&&&                         $$$$         ", 
+  "                    %%%                              &&&&&&&                             &&&&                                &                                                             $$$$         ", 
+  "                    %%%                                 &&                                                                                                                                 $$$$         ", 
+  "                    %%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                            '''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                        ((            '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                    (((((((                           ((((((((        '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                ((((((                           ((((((((                         ((((((((((                       ((((((((((((                                     $$$$         ", 
+  "                    %%%             ((((((((((                        ((((((((((((                     (((((((((((((                     ((((((((((((((                                    $$$$         ", 
+  "                    %%%           ((((((((((((((                    (((((((((((((((                  ((((((((   (((((                  (((((((      ((((                                   $$$$         ", 
+  "                    %%%          (((((((   ((((((                  (((((((     ((((                 ((((((        ((((                ((((((         ((((                                  $$$$         ", 
+  "                    %%%        (((((((       ((((                ((((((         ((((               ((((((          ((((              (((((            ((((                                 $$$$         ", 
+  "                    %%%       ((((((          ((((              ((((((           ((((             (((((            (((((            (((((             (((((                                $$$$         ", 
+  "                    %%%      (((((             ((((            (((((              ((((          ((((((              ((((          ((((((               ((((         ((                     $$$$         ", 
+  "                    %%%%    (((((               ((((          (((((               ((((         (((((                 ((((        (((((                  ((((       ((((                    $$$$         ", 
+  "                    %%%     ((((                ((((        ((((((                 ((((       (((((                   ((((     ((((((                    (((((   ((((((                    $$$$         ", 
+  "                    %%%      ((                  (((((     ((((((                   (((((   ((((((                    ((((((((((((((                     (((((((((((((                     $$$$         ", 
+  "                    %%%                           (((((( ((((((                      ((((((((((((                      ((((((((((((                        (((((((((                       $$$$         ", 
+  "                    %%%                            (((((((((((                        ((((((((((                         ((((((((                           ((((((                         $$$$         ", 
+  "                    %%%                             ((((((((      ))                   (((((((                              (((                                                            $$$$         ", 
+  "                    %%%%                              ((((       ))))         ***          (                                                                                               $$$$         ", 
+  "                    %%%%                                        )))))         ***                                                    ++++++++++++                                          $$$$         ", 
+  "                    %%%%                                      ))))))          ***                                                    ++++++++++++++++++++++++++++++++                      $$$$         ", 
+  "                    %%%%                                     ))))))           ****          ,,,                                      +++++++++++++++++++++++++++++++++++++                 $$$$         ", 
+  "                    %%%%                                    )))))             ****          ,,,                                            +++++++++++++++++++++++++++++++++               $$$$         ", 
+  "                    %%%%                                  ))))))               ***          ,,,      ------                                                    +++++++++++++++             $$$$         ", 
+  "                    %%%%                                 ))))))                ***         ,,,,      -----------------------------                                       ++++++            $$$$         ", 
+  "                    %%%%                                )))))                  ***         ,,,,      -----------------------------                                         ++++            $$$$         ", 
+  "                    %%%%                              ))))))                   ***         ,,,       -----------------------------                                          ++++           $$$$         ", 
+  "                    %%%%                             ))))))                    ****        ,,,                                                                               ++++          $$$$         ", 
+  "                    %%%%                            )))))                      ****        ,,,                                                                               ++++          $$$$         ", 
+  "                    %%%%                          ))))))                        ***        ,,,                                                                                ++++         $$$$         ", 
+  "                    %%%%                         ))))))                         ***        ,,,                                                                                 +++         $$$$         ", 
+  "                    %%%%                        )))))                           ***       ,,,,                    .................................                            +++         $$$$         ", 
+  "                    %%%%                      ))))))                            ***       ,,,,           ..........................................                            +++         $$$$         ", 
+  "                    %%%%                     ))))))                             ****      ,,,           ...........................................                            +++         $$$$         ", 
+  "                    %%%%                    )))))                               ****      ,,,          .................                                                       +++         $$$$         ", 
+  "                    %%%%                  ))))))                                 ***      ,,,          .....                                                                   +++         $$$$         ", 
+  "                    %%%%                 ))))))                                  ***      ,,,         ....                                                                     +++         $$$$         ", 
+  "                    %%%%                )))))                                    ***     ,,,,         ...                                                                      +++         $$$$         ", 
+  "                    %%%%              ))))))             ////////                ***     ,,,,         ...                                                                      +++         $$$$         ", 
+  "                    %%%%             ))))))             ///////////////          ***     ,,,,        ....                                                                      +++         $$$$         ", 
+  "                    %%%%            )))))              //////////////////////    ****    ,,,         ....                                                                      +++         $$$$         ", 
+  "                    %%%%          ))))))             //////    //////////////    ****    ,,,         ...                                                                       +++         $$$$         ", 
+  "                    %%%%         ))))))             //////           /////////    ***    ,,,         ...                                                                      ++++         $$$$         ", 
+  "                    %%%%        )))))              /////                   ////   ***    ,,,         ...                                                                      ++++         $$$$         ", 
+  "                    %%%%      ))))))             //////                    /////  ***   ,,,,         ...                      00000000000000000000000000000                   ++++         $$$$         ", 
+  "                    %%%%     ))))))             //////                      ////  ***   ,,,,         ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%    )))))              /////                         ////       ,,,          ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%   )))))             //////                           ////      ,,,          ...                                                                      +++          $$$$         ", 
+  "                    %%%%    )))             //////                            /////     ,,,          ...                                                                      +++          $$$$         ", 
+  "                     %%%    )               ////                               ////     ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    ///                                 ////    ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    ///                                  ////   ,,,          ...                                                                     +++           $$$$         ", 
+  "                     %%%                    ///                                  /////               ...                                                                    ++++           $$$$         ", 
+  "                     %%%                    ///                                   ////               ...                           ++++++++++++++++                        ++++            $$$$         ", 
+  "                     %%%                   ////                                    ///               ...                           ++++++++++++++++++++++++++++++++++++++++++++            $$$$         ", 
+  "                     %%%                   ////                                     ///              ...                           +++++++++++++++++++++++++++++++++++++++++++             $$$$         ", 
+  "                     %%%                   ///                                     ////              ...                                    +++++++++++++++++++++++++++++++++              $$$$         ", 
+  "                     %%%                   ///                                     ////              ...                                                                                   $$$$         ", 
+  "                     %%%                   ///                                     ////              ....                                                                                  $$$$         ", 
+  "                     %%%                   ///                                     ///               ....                                                                                  $$$$         ", 
+  "                     %%%                  ////                                     ///                ....                                                                                 $$$$         ", 
+  "                     %%%                  ////                                     ///                .....                                                                                $$$$         ", 
+  "                     %%%                  ///                                      ///                 ....                                                                                $$$$         ", 
+  "                     %%%                  ///                                     ////                  .....                                                                              $$$$         ", 
+  "                     %%%                  ///                                     ////                   ......                                                                            $$$$         ", 
+  "                     %%%                  ///                                     ///                    ..........................................                                        $$$$         ", 
+  "                     %%%                  ////                                    ///                      ........................................                                        $$$$         ", 
+  "                     %%%                   ////                                   ///                        ......................................                                        $$$$         ", 
+  "                     %%%                    ////                                  ///                                                                                                      $$$$         ", 
+  "                     %%%                    ////                                  ///                                                                                                      $$$$         ", 
+  "                                             ////                                ////                                                                                                      $$$$         ", 
+  "                                              ////                              /////                                                                                                      $$$$         ", 
+  "                                              /////                            /////                                                                                                                    ", 
+  "                                               ////                          //////                                                                                                                     ", 
+  "                                                ////                        //////                                                                                                                      ", 
+  "                                                 ////                      /////                                                                                                                        ", 
+  "                                                 /////                   //////                                                                                                                         ", 
+  "                                                  /////                 //////                                                                                                                          ", 
+  "                                                   ///////////         /////                                                                                                                            ", 
+  "                                                    ///////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                     ////////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                            ////////////                                         11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                                   ////                                          1111111111                                                                             ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-4-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..04888ab
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                             !!!!!!                                              !!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!                                                         ", 
+  "                                          !!!!!!!!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!!!!!!!!!!                                     !!!!!!!!!!!                                    !!!!!!!                                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!                                 !!!!!!!!!!                                !!                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!                               !!!!!!!!!!!!!                            !!!!                   ", 
+  "                                   !!!!!!!!!!!! !!!!!!!!!!                              !!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!                          !!!!!!                  ", 
+  "                                  !!!!!!!!!!!!   !!!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!                        !!!!!!!!                 ", 
+  "                                !!!!!!!!!!!!       !!!!!!!!!!                        !!!!!!!!!!!   !!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!                ", 
+  "                               !!!!!!!!!!!          !!!!!!!!!!                      !!!!!!!!!!!     !!!!!!!!!!                    !!!!!!!!!!!  !!!!!!!!!!!                  !!!!!!!!!!!                 ", 
+  "                             !!!!!!!!!!!!            !!!!!!!!!!                    !!!!!!!!!!!       !!!!!!!!!!!                 !!!!!!!!!!!     !!!!!!!!!!               !!!!!!!!!!!                   ", 
+  "                            !!!!!!!!!!!               !!!!!!!!!!!                !!!!!!!!!!!           !!!!!!!!!!               !!!!!!!!!!        !!!!!!!!!!             !!!!!!!!!!!                    ", 
+  "                           !!!!!!!!!!!                  !!!!!!!!!!              !!!!!!!!!!!             !!!!!!!!!!            !!!!!!!!!!!          !!!!!!!!!!           !!!!!!!!!!                      ", 
+  "                           !!!!!!!!!                     !!!!!!!!!!           !!!!!!!!!!!                !!!!!!!!!!!         !!!!!!!!!!!            !!!!!!!!!!!       !!!!!!!!!!!                       ", 
+  "                            !!!!!!!                       !!!!!!!!!!         !!!!!!!!!!!                  !!!!!!!!!!!       !!!!!!!!!!                !!!!!!!!!!     !!!!!!!!!!!                        ", 
+  "                             !!!!                           !!!!!!!!!!     !!!!!!!!!!!                      !!!!!!!!!!    !!!!!!!!!!!                  !!!!!!!!!!   !!!!!!!!!!                          ", 
+  "                             !!!                             !!!!!!!!!!   !!!!!!!!!!!                        !!!!!!!!!!  !!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                                                              !!!!!!!!!! !!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                               !!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!                              ", 
+  "                                                                 !!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!                            !!!!!!!!!!!!!                               ", 
+  "                                            ##                    !!!!!!!!!!!!!                 #                 !!!!!!!!!!!!                               !!!!!!!!!!!                                ", 
+  "                                          #####                    !!!!!!!!!!!                ####                 !!!!!!!!!!                                  !!!!!!!                                  ", 
+  "                                        ########                    !!!!!!!!!                ######                  !!!!!!                  ##                 !!!!!                     $$$$$$        ", 
+  "                                       ##########                     !!!!!                 #########                 !!!!                  ####                 !!                       $$$$$$        ", 
+  "                                     ##############                    !!!                ############                 !!                 ########                                #       $$$$$$        ", 
+  "                                    ################                                     ##############                                  ##########                             ####      $$$$$$        ", 
+  "                                  ###################                                  ##################                               ############                           #####      $$$$$$        ", 
+  "                                 #####################                                ####################                            ################                        #######     $$$$$$        ", 
+  "                               ############  ###########                             ########### ##########                          ##################                     ##########    $$$$$$        ", 
+  "                             ############      ##########                          ###########    ##########                        ####################                   ###########    $$$$$$        ", 
+  "                            ############        ##########                        ###########      ###########                     ##########  ###########               ###########      $$$$$$        ", 
+  "                          ############           ###########                     ##########          ##########                  ###########    ###########             ###########       $$$$$$        ", 
+  "                         ###########               ##########                  ###########            ##########                ##########        ##########           ##########         $$$$$$        ", 
+  "                          #########                 ##########                ###########              ##########              ##########          ###########       ###########          $$$$$$        ", 
+  "                           #######                   ##########             ###########                 ###########          ###########            ###########     ###########           $$$$$$        ", 
+  "                  %%%%%%%  #####                      ###########          ###########                    ##########        ###########               ##########  ###########             $$$$$$        ", 
+  "                  %%%%%%%   ##                          ##########        ##########                       ##########      ##########                  #####################              $$$$$$        ", 
+  "                  %%%%%%%                                ##########     ###########                         ###########   ##########                    ##################                $$$$$$        ", 
+  "                  %%%%%%%                                 ###########  ###########                            #####################                       ###############                 $$$$$$        ", 
+  "                  %%%%%%%                                  #####################                               ##################                          #############                  $$$$$$        ", 
+  "                  %%%%%%%                                    ##################                                 ################                            ##########                    $$$$$$        ", 
+  "                  %%%%%%%                                     ################                                   ##############                               #######                     $$$$$$        ", 
+  "                  %%%%%%%                                      #############                                       ###########                                 #####                      $$$$$$        ", 
+  "                  %%%%%%%                                        ##########                                         ########                                    ##                        $$$$$$        ", 
+  "                  %%%%%%%                                         #######                                            ######                                                               $$$$$$        ", 
+  "                  %%%%%%%                                          #####                                    &&&&&&&    ###                   &&&&&&&&&                                    $$$$$$        ", 
+  "                  %%%%%%%              &&&&&&&                      ### &&&&&&&&&                        &&&&&&&&&&&                      &&&&&&&&&&&&&                                   $$$$$$        ", 
+  "                  %%%%%%%            &&&&&&&&&&                       &&&&&&&&&&&&                     &&&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                                  $$$$$$        ", 
+  "                  %%%%%%%          &&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&&                                 $$$$$$        ", 
+  "                  %%%%%%%        &&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&                                $$$$$$        ", 
+  "                  %%%%%%%      &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&                               $$$$$$        ", 
+  "                  %%%%%%%     &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&           &&&&&&&&&&&&& &&&&&&&&&&          &&&&&&&&&&&&    &&&&&&&&&                              $$$$$$        ", 
+  "                  %%%%%%%    &&&&&&&&&&&& &&&&&&&&&&           &&&&&&&&&&&    &&&&&&&&&         &&&&&&&&&&&      &&&&&&&&         &&&&&&&&&&&       &&&&&&&&        &                     $$$$$$        ", 
+  "                  %%%%%%%   &&&&&&&&&&&     &&&&&&&&&         &&&&&&&&&&       &&&&&&&&        &&&&&&&&&&         &&&&&&&&       &&&&&&&&&&          &&&&&&&&      &&                     $$$$$$        ", 
+  "                  %%%%%%%  &&&&&&&&&&        &&&&&&&&&      &&&&&&&&&&&         &&&&&&&&      &&&&&&&&&&           &&&&&&&&    &&&&&&&&&&&            &&&&&&&&&  &&&&&                    $$$$$$        ", 
+  "                   %%%%%%   &&&&&&&           &&&&&&&&  &  &&&&&&&&&&            &&&&&&&&&  &&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&                   $$$$$$        ", 
+  "                   %%%%%%    &&&&&             &&&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%     &&&               &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%      &                &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&                   &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&                    $$$$$$        ", 
+  "                   %%%%%%                        &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&&                     &&&&&&&&&&&&                       &&&&&&&&&&&                     $$$$$$        ", 
+  "                   %%%%%%                         &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                          &&&&&&&                       $$$$$$        ", 
+  "                   %%%%%%                           &&&&&&&&&                          &&&&&&&&                            &&&&                                 &                         $$$$$$        ", 
+  "                   %%%%%%                             &&&&&                                &                                                                                  ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                    (                                (((((((        '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                (((((((                          (((((((((                        (((((((((((       '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%            (((((((((                        ((((((((((((                     (((((((((((((                     (((((((((((((((     '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%          (((((((((((((                     ((((((((((((((                   ((((((((((((((((                 ((((((((((((((((((    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%        ((((((((((((((((                  (((((((((((((((((                ((((((((((((((((((                (((((((((((((((((((                                 $$$$$$        ", 
+  "                   %%%%%%       ((((((((((((((((((               ((((((((((((((((((((              ((((((((((((((((((((              (((((((((((((((((((((                                $$$$$$        ", 
+  "                   %%%%%%     (((((((((((((((((((((             (((((((((((((((((((((             ((((((((((((((((((((((            ((((((((((((( (((((((((                               $$$$$$        ", 
+  "                   %%%%%%    ((((((((((((((((((((((            ((((((((((((   ((((((((           (((((((((((    (((((((((          ((((((((((      (((((((((                              $$$$$$        ", 
+  "                   %%%%%%   ((((((((((((    ((((((((          ((((((((((       ((((((((        (((((((((((        (((((((        (((((((((((        ((((((((       ((                     $$$$$$        ", 
+  "                   %%%%%%  ((((((((((        ((((((((        ((((((((((         ((((((((      ((((((((((          ((((((((      ((((((((((           ((((((((    (((((                    $$$$$$        ", 
+  "                   %%%%%%  (((((((((          (((((((      ((((((((((           (((((((((    ((((((((((            (((((((((  (((((((((((             (((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%   ((((((            (((((((((  (((((((((((             (((((((((((((((((((((              ((((((((((((((((((((               ((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%    ((((              ((((((((((((((((((((               ((((((((((((((((((                 (((((((((((((((((                 (((((((((((((((((                  $$$$$$        ", 
+  "                   %%%%%%     ((                ((((((((((((((((((                 ((((((((((((((((                  ((((((((((((((((                   (((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%                       ((((((((((((((((())                (((((((((((((((                    ((((((((((((((                      (((((((((((                     $$$$$$        ", 
+  "                   %%%%%%                         ((((((((((((( ))))                 ((((((((((((                       ((((((((((   *                     (((((((((                      $$$$$$        ", 
+  "                   %%%%%%                          ((((((((((( ))))))         +++++   (((((((((                          (((((((     **********************   (((                         $$$$$$        ", 
+  "                   %%%%%%                           (((((((( ))))))))       +++++++      ((((                                (       *************************************                $$$$$$        ", 
+  "                   %%%%%%                               (   ))))))))))       ++++++        ,                                         ***************************************              $$$$$$        ", 
+  "                   %%%%%%                                  ))))))))))        ++++++       ,,,,,,,                                    ****************************************             $$$$$$        ", 
+  "                   %%%%%%                                )))))))))))         ++++++       ,,,,,,,    ------------------------        ******************************************           $$$$$$        ", 
+  "                   %%%%%%                               )))))))))))          ++++++       ,,,,,,     -----------------------------   *******************************************          $$$$$$        ", 
+  "                   %%%%%%                              ))))))))))            +++++++      ,,,,,,     -----------------------------                   ***************************          $$$$$$        ", 
+  "                   %%%%%%                            )))))))))))             +++++++      ,,,,,,     -----------------------------                                      *********         $$$$$$        ", 
+  "                   %%%%%%                           )))))))))))               ++++++      ,,,,,,     -----------------------------                                       *********        $$$$$$        ", 
+  "                   %%%%%%                          ))))))))))                 ++++++     ,,,,,,,     -----------------------------                                         *******        $$$$$$        ", 
+  "                   %%%%%%                        )))))))))))                  ++++++     ,,,,,,,                    --------------                                         ********       $$$$$$        ", 
+  "                   %%%%%%                       )))))))))))                   ++++++     ,,,,,,,                                   ................                         *******       $$$$$$        ", 
+  "                   %%%%%%                      ))))))))))                     +++++++    ,,,,,,              ......................................                         *******       $$$$$$        ", 
+  "                   %%%%%%                    )))))))))))                      +++++++    ,,,,,,         ...........................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                   )))))))))))                        ++++++    ,,,,,,        ............................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                  ))))))))))                          ++++++    ,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%                )))))))))))                           ++++++   ,,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%               )))))))))))                            ++++++   ,,,,,,,      ............................................                            *******      $$$$$$        ", 
+  "                   %%%%%%              ))))))))))         ////                 +++++++  ,,,,,,      ............                                                             *******      $$$$$$        ", 
+  "                   %%%%%%            )))))))))))        ////////////           +++++++  ,,,,,,      .......                                                                  *******      $$$$$$        ", 
+  "                   %%%%%%           ))))))))))         ////////////////////    +++++++  ,,,,,,      .......                                                                  *******      $$$$$$        ", 
+  "                   %%%%%%          ))))))))))         ////////////////////////  ++++++  ,,,,,,      ......                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%        )))))))))))        /////////////////////////// ++++++  ,,,,,,      ......                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%       ))))))))))         //////////////////////////// ++++++ ,,,,,,,      ......                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%      ))))))))))        ///////////////////////////////++++++ ,,,,,,,      ......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%    )))))))))))        ///////////       //////////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%   ))))))))))         //////////               ////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%  ))))))))))        ///////////                  ///////++++  ,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%% ))))))))))        ///////////                    ////////    ,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$        ", 
+  "                   %%%%%%  )))))))         //////////                       ////////  ,,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$        ", 
+  "                   %%%%%%   )))))          /////////                         ///////  ,,,,,,,      ......                     000000000000000000                            ******        $$$$$$        ", 
+  "                   %%%%%%   ))))           ////////                          //////// ,,,,,,,      ......                                                                   ******        $$$$$$        ", 
+  "                   %%%%%%    )            ///////                             ////////,,,,,,       ......                                                                   ******        $$$$$$        ", 
+  "                   %%%%%%                 ///////                              //////// ,,,,       ......                          ***                                     *******        $$$$$$        ", 
+  "                   %%%%%%                 ///////                              ////////            ......                          *****************************   ***************        $$$$$$        ", 
+  "                   %%%%%%                 //////                                ////////           ......                          **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                 /////             .......                         **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                  //////           .......                         *********************************************          $$$$$$        ", 
+  "                   %%%%%%                 //////                                  //////            ......                         ********************************************           $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////            ......                         *******************************************            $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////            .......                                              ***************                  $$$$$$        ", 
+  "                   %%%%%%                //////                                   //////            .......                                                                               $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////            ........                                                                              $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////             .......                                                                              $$$$$$        ", 
+  "                   %%%%%%                //////                                  //////              .........                                                                            $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////               .......... ..................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ////////                                ///////                 ...........................................                                       $$$$$$        ", 
+  "                   %%%%%%                ////////                               ///////                   .........................................                                       $$$$$$        ", 
+  "                   %%%%%%                 ////////                              //////                      .......................................                                       $$$$$$        ", 
+  "                   %%%%%%                 ////////                              //////                        ....................................                                        $$$$$$        ", 
+  "                                           ////////                            ///////                                                                                                    $$$$$$        ", 
+  "                                            ////////                         /////////                                                                                                    $$$$$$        ", 
+  "                                             ///////                        //////////                                                                                                                  ", 
+  "                                             ////////                      //////////                                                                                                                   ", 
+  "                                              ////////                   ///////////                                                                                                                    ", 
+  "                                               ////////                 ///////////                                                                                                                     ", 
+  "                                                ///////////            //////////                                                                                                                       ", 
+  "                                                /////////////////    ///////////                                                         11111111111111111111111111                                     ", 
+  "                                                 //////////////////////////////                                  11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  ///////////////////////////                                    11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  //////////////////////////                                     11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                   ////////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                        /////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                               /////////                                         11111111111111111111111111111111111111                                                 ", 
+  "                                                                      /                                                                                                                                 ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-200-200-1.0-grid-reference.json
new file mode 100644
index 0000000..c21bc9a
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-200-200-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "7", 
+  "4", 
+  "5", 
+  "16", 
+  "6", 
+  "12", 
+  "10", 
+  "2", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "              !  !  !      !! !!!                 ", 
+  "             !! !!!!        !!!!!                 ", 
+  "            !!!!   !     !   !                    ", 
+  "           !! !!!       ! !    !                  ", 
+  "          !!!!!! !!!   !!!!!!!!!! !!!             ", 
+  "        !!!!!!!!!!! !!!!!!!! !!! !!!!!!    !!!    ", 
+  "       !!!!!!!!!! ! !!!!!!!!!   !!!!!!!!  !!!!    ", 
+  "       !!!!  !!!!! !!!!! !!!!!!!!!!!!!!!!!!!!!    ", 
+  "        !! #  !!!!!!!!! # !!!!!!!!!  !!!!!!!!     ", 
+  "         ####  !!!!!!! ###  !!$!!$ ## !!!!!!      ", 
+  "        ###$$# $$$$! ######  $$$$$$$##  !! ## %%% ", 
+  "      #####$#$$$$$$ ########$  $###$####  ####%%% ", 
+  "       #### ##$##$$##########$ ###$###########%%% ", 
+  "    &&&##  $ ##$#$$#### # ##$$##$##  ######## %%% ", 
+  "    &&&     $ $$############$$#$#$$   #####   %%% ", 
+  "    &&&  $$$$$ #$###$ ## $$#####$ $$$$$###    %%% ", 
+  "    &&&$$$$$$$  $##$$$  $$##$$#  $$$$$$$      %%% ", 
+  "    &&$$$$$$$$$$$$$$$$$##$$$$$$$$$$$$$$$$$    %%% ", 
+  "    &&&$$$ $$$$$$$$ $##$$$##$$$$$$$  $$$$$$   %%% ", 
+  "    &&& $   $$$$$   ###$$##  $$$$$    $$$$$ '''%% ", 
+  "    &&&      $$$     #$$   #   $        '''''''%% ", 
+  "    &&& &(((     ((((     ((((    ((((( ''%''%'%% ", 
+  "    &&&(&&(&&(  ((((((  (((((((  (((((((''''%''%% ", 
+  "    &&(((&(&&(((((((((((((((((((((((((((%%%   %%% ", 
+  "    &&&((& &((((((( ((((((( (((((((( ((((%% %%%%% ", 
+  "    &&& (  &(((((   ))((((   ((((***(****%%* %%%% ", 
+  "    &&&  & &&(((++ ))),,,------(-(((((**%%%%* %%% ", 
+  "    &&&     ++++++ ))),,,------((*(*.***%%%%%*%%**", 
+  "    &&&  & +&+++   ))),,,--------....     **%%*%%*", 
+  "    &&&  ++++++++  ))),,,......((.((.(((   *****%*", 
+  "    &&& +++++///+/+)),,,,.......((((.      *****%*", 
+  "    &&&++++//+++///+),,,,...    (000000    ****%%*", 
+  "    &&&++++/+++/+++/),,,....    0000000    *****%*", 
+  "    &&&+++/+// +   //,,,...     0000000***********", 
+  "    &&&   ///+ ++  /.. .....     **************%**", 
+  "    &&&   //++++    ........     ************ %%%*", 
+  "    &&&   //+      .../..............  ***    %%% ", 
+  "    &&&  ////       ../..............         %%% ", 
+  "    &&&   ////     /.//.. ...........         %%% ", 
+  "           ///// ///./.   .           111         ", 
+  "           //////////... .  1111111111111         ", 
+  "            ////////  ...   1111111111111         ", 
+  "              ///////       1111111111111         ", 
+  "              //// //          1 11111            ", 
+  "               // //           1 1 1111           ", 
+  "               /  / //                            ", 
+  "             ////////         1111 11             ", 
+  "              ////            1 111 11            ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-5-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..9ce1813
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-200-200-2.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "7", 
+  "8", 
+  "4", 
+  "5", 
+  "16", 
+  "6", 
+  "10", 
+  "11", 
+  "14", 
+  "12", 
+  "13", 
+  "3", 
+  "2", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "            !           !                         ", 
+  "          !!!!  #  #   !#!#        !!             ", 
+  "        !!!!!!!!#  # ##!#!#!##   !!!!!!           ", 
+  "       !!!!!!!!!####!#!#!!#!# # !!!!!!!!  !!!     ", 
+  "      !!!!!!!!!!!! #!!!#!##!!!#!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!#!###!##!##!!!!!!!!!!!!!!!!    ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "        !!!!!!!!#!!#!!!!!!#!!!#!#!!!!!!!!!!!!!!   ", 
+  "       $!!!$$!#!##!#!#!!###!###!#!!!!!!!!!!!!!    ", 
+  "     $$$$$$$$$!###!!#!#$#$##!!#!#!$$$!!!!!!!!%%%%%", 
+  "      $$$$$$$$$##!#!!$#$#$##!!!!!$$$$$!!!!!$$$%%%%", 
+  "       $$$$$$$$##!#!###$#$$$#!!!#$$$$$$$!!$$$$$%%%", 
+  "   &&&&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%", 
+  "   &&&&#$$$#$$$$$$$$$$$$#$$$$$$$$$$$$$$$$$$$$$%%%%", 
+  "   &&&##$####$$$$$$$$$$###$$$$$$$$$##$$%%%$%%%%%%%", 
+  "   &&&########$$$$$$$######$$$$$$#####$$$$$ %%%%%%", 
+  "   &&&##########$$$$########$$$$##%%%##%%%%%''%%%%", 
+  "   &&&&##########$############$###%##%##%##%'''''%", 
+  "   &&&&&##########################%%%%##%''%'''''%", 
+  "   &&&&&(#(#######(########(#######((###'%%''''''%", 
+  "   &&&((((((#####(((######(((####%%%%%#%%%%%'''''%", 
+  "   &&(((((((((#(((((((((((((((((((((((((%''''''''%", 
+  "   &&&(((((((((((((((((((((((((((())))))%''''''''%", 
+  "   &&&&((((((((((((((*(((++++++++(%%)%))''%''''''%", 
+  "   &&&&&((((((((((((,,*((++++++++)%))%))%%%)))%%%%", 
+  "   &&&&&&((((****,,**--*-++++++++*%%%%))%))%)))%%%", 
+  "   &&.&&& /((*((*,,*-**--++++++++****)))%)%%)))%%%", 
+  "   &&&..&////.***,,*--*--++++++++%%%%%)%)))))))%%%", 
+  ".  &&&&.&//***....,,**---+++++++000%000)%%%%))))%%", 
+  " . &&..../.....*..****----***+++000%000 %%%)))))%%", 
+  " . &&&&.&..*****..*,------******0%%%%%0%%))))))%%%", 
+  ".  &&.&.&.........***-----***   0000000)))%%)))%%%", 
+  ".. .&&&&&....***...-------***   0000000%%))))))%%%", 
+  "   &&...&.....** ..*** **-***   0000000))))))))%%%", 
+  ".. &&&&&&....***  *..*.*********0000*)))))))))))))", 
+  "   &...&&.....**  .***.**************)))))))))%)%%", 
+  " . &&..&&...**.   ..*****************)))))))))%)%%", 
+  ".  &.&&.&.....*...**.*..*************)111   )%)%))", 
+  " .  .  . ....****...*.** ************)111))) ) )  ", 
+  "     . .....*......**.*.   **********)111))) )    ", 
+  "     ...  ...........*.     111111111)1)1)    )  )", 
+  "... . .  . .........**      11111111111)1        )", 
+  "      ....  ........        1111111111111     ) ) ", 
+  "        .        ..                ) )) )    )))) ", 
+  "       .                           ) ))  ) )   ) )", 
+  "       .                            )))) ) ) )    ", 
+  "                                    ) )) ) ) )    ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-400-400-1.0-grid-reference.json
new file mode 100644
index 0000000..e8c5ab4
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-400-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "3", 
+  "11", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                  !!                        !!!!                          !                         ", 
+  "                  !!! !                     !!!!                        !  !                        ", 
+  "               ! !   !                    !!    ! !                       !!!!                      ", 
+  "              !!!!  !!!!!                ! !  !! !                     !!! !!!!      !!             ", 
+  "               !   !  !!!!        !       !  !! !!                    !!!!!   !    !!!!             ", 
+  "                     !!!!!!      !!! !!    !!! !!!!      !! !!!       !!!! !    ! !!!  !!           ", 
+  "               ! ! !!!!!!!!!      !!!!!!  !!!!!!!!!!      !!!!!      !!!!!!!!    !!!    !!!         ", 
+  "                ! !!!!!!!!!!!!  !! !!      !!!!!!!!!!!     !   !   !!!!!!!!  !       !! !!!         ", 
+  "                !!!!!!   !!!!!! !!!        !!!!! !!!!!! !!    ! ! !!!!!!!!!!!      !   !!!!!        ", 
+  "               !!!!!!      !!!!! !!! !!! !!!!!!    !!!!! ! ! !!!!!!!!!  !!!!!!    ! !!!!!!!         ", 
+  "              !!!!!         !!!!! !!!!  !!!!!!      !!!!!!!!!  !!!!!!     !!!!!  !  !!!!!           ", 
+  "              !!!!           !!!!!!  !!!!!!!         !!!!!!   !!!!!        !!!!!  !!!!!!            ", 
+  "               !               !!!!! !!!!!!            !!!!!!!!!!!          !!!!!!!!!!!             ", 
+  "                                !!!!!!!!!               !!!!!!!!!             !!!!!!!               ", 
+  "                      #          !!!!!!!        #        !!!!!!                !!!!!                ", 
+  "                    ####          !!!!!       ####         !!!        ##        !!!          $$$    ", 
+  "                   #######          !        ######         !        ####                #   $$$    ", 
+  "                 ##########                 #########               #######            ###   $$$    ", 
+  "               ####### #####              ###### #####             #########          #####  $$$    ", 
+  "              ######    ######           ######   #####          ###### #####        #####   $$$    ", 
+  "             #####       ######         #####      ######       #####    ######    ###### $$$$$$    ", 
+  "         %%%%####          #####      ######        ######     #####      ######  ######$$$$ $$$    ", 
+  "         %%%% #         &   #####  & #####            #####  ######         ##########  $$  $$$$    ", 
+  "         %%%%         & &&   ####&&#&####   &          ######&####&         #########  $$$$$$$$$    ", 
+  "         %%%%           & &&  &#&#&###&#   &&&&&&&      ####&&&& &          #######    $$$   $$$    ", 
+  "         %%%%%%      & &  &&&&&&&##&&&&     &&&&&&       ####&&&&&            # ##      $$ $ $$$    ", 
+  "         %%%% % %%  &&&&&& && &  &&&&&&          &&        ###&&        &# # # ####        $$$$$    ", 
+  "         %%%%%%    &&&&  &&       ##&&&&&   &  &   &&&&&&& &&     &  &&&&&###   ###     $ $$$$$$    ", 
+  "         %%%%%%  &&&&&&&&&&     & &&&&&&&& &&& &&& &&&&&&&& &  &&& &&&&&&&&#### #      $$$$$ $$$    ", 
+  "         %%%%%% &%&&&&&&&  &   & &&&&&&&&&& &&&& &&&&&&&&&&&  &&&&&&&&&&&&&&&&####        $$ $$$    ", 
+  "         %%%% %&%%&&&&&&&&     &&&&&&  &&&&& &  &&&&&&   &&&&    &&&&&&   &&&& # #&          $$$    ", 
+  "         %%%%%%&%%&    &&&&   &&&&&&    &&&&   &&&&&      &&&&  &&&&&      &&&&&&&&&         $$$    ", 
+  "         %%%%%%&%%      &&&&&&&&&&       &&&&&&&&&&       &&&&&&&&&&        &&&&&&&&         $$$    ", 
+  "         %%%%%%&%%      &&&&&&&&&         &&&&&&&&         &&&&&&&&          &&&&&&          $$$    ", 
+  "         %%%%%%          &&&&&&&           &&&&&&           &&&&&             &&&&           $$$    ", 
+  "         %%%%              &&&               &                                         ''''' $$$    ", 
+  "         %%%%                                                                          ''''' $$$    ", 
+  "         %%%%                                                                          ''''' $$$    ", 
+  "         %%%%                                                                  ''''''''''''' $$$    ", 
+  "         %%%%       ((              (((((            (((((           (((((((   ''''''''''''' $$$    ", 
+  "         %%%%    (((((((          ((((((((         ((((((((         (((((((((  ''''''''''''' $$$    ", 
+  "         %%%%   (((((((((        ((((((((((      (((((((((((      (((((((((((            $  $$$$    ", 
+  "         %%%% %(((((((((((      (((((( ((((     ((((((  (((((    (((((((  ((((             $ $$$    ", 
+  "         %%%%(%(%%(   (((((   ((((((  ( ((((   (((((     (((((  (((((  ( ( ((((  ((    $$$   $$$    ", 
+  "         %%%%%%((     (((((( ((((((((( ( ((((((((((((     ((((((((((   (  ((((((((((    $$ $$$$$    ", 
+  "         %%%%%%(     ( (((((((((((( (    (((((((((((       ((((((((       ((((((((((    $$  $$$$    ", 
+  "         %%%%%%  %    (((((((((())(       (((((((((( ( (    (((((  *** (( ((( ((((     $$$$  $$$    ", 
+  "          %%% % %%%((  ((((((( ))))(((((++   (( (((   (   (( (( (  *(*((***((********  $$$$$$$$$    ", 
+  "          %%%%%%%%% ((  (((( )))))( (((((+   ,,,(  (     ( ((((( ( *(*(***((***********    $$$$$    ", 
+  "          %%%%% %%   (    (())))))(   (++(   ,,( ((((----(((---(-  **(***(**************     $$$    ", 
+  "          %%%%%%%%    (((  )))))       +(+   ,,(((((------(((-(--         (         *****    $$$    ", 
+  "          %%%%%%        (((()))        +++   ,,,((---------(--(-((                    ****   $$$    ", 
+  "          %%%           )((())         .+.   ,,,            //////////////            ****   $$$    ", 
+  "          %%%          )))))           .+.+  ,,,    //////////////////////             ***   $$$    ", 
+  "          %%%        ))))))))       ...+.+..,,,,   ///////////////////////             ***   $$$    ", 
+  "          %%%       ))))))  ) )     .. .++..,,,,  ///////////////////////              ***   $$$    ", 
+  "          %%%      ))))) ))).......  ....+...,,   ////                                 ***   $$$    ", 
+  "          %%%    ))))))    .))).........+.+..,,   ///                                  ***   $$$    ", 
+  "          %%%   )))))   )..)............+.. ,/,   ///                                  ***   $$$    ", 
+  "          %%%  ))))).  ).).)).   .......+.+.,,/  ////          000000000000000         ***$$$$$$    ", 
+  "          %%%)))).). . .))).         ...+++,///   ///          000000000000000        **$$$$$$$$    ", 
+  "          %%% ))). .  ..)..           .... ,////  ///          000000000000000        **$$ $$$$$    ", 
+  "          %%% )) . .......             ....,,//   ///                                 *** $$$$$$    ", 
+  "          %%%      . ....              .....,/ /  ///             ****               ****  $$$$$    ", 
+  "          %%%    .   ...                ....   // ///             ***********************$ $$$$$    ", 
+  "          %%%  ..   ....                 ...///// ///             *********************$$$ $$$$$    ", 
+  "          %%%   . .. ...                 ...    / ///             ********************* $   $$$$    ", 
+  "          %%%     .  ...                 ...      ////                    * ***            $$$$$    ", 
+  "          %%%     ......                 ...      /////                *    ***           $  $$$    ", 
+  "          %%%       ....                 ...       ///////////////////*///                   $$$    ", 
+  "          %%%       ....                ....        //////////////////**********             $$$    ", 
+  "          %%%        ....               ....         ///////////////////*** * **             $$$    ", 
+  "          %%%        ....               ... ..         //////////////////                    $$$    ", 
+  "                      ....             .... . .             //  ////                         $$$    ", 
+  "                       ....          .......  .             /  /////                                ", 
+  "                       .....        ......... ..           //    / //                               ", 
+  "                    . . .......... ..... ... ..            ///////1//1111111111111                  ", 
+  "                   ... . .............. . .  .          11111///1////1111111111111                  ", 
+  "                    .. .. ............                  11111111111111111111111111                  ", 
+  "                     ..  . .    ....      ...           11111111111111111111                        ", 
+  "                     .                    .                       11   11                           ", 
+  "                      ..  .                                        11  11                           ", 
+  "                       ....                                     1     1 11                          ", 
+  "                          .                                      1 1111111                          ", 
+  "                                                                 111111111                          ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-5-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..2a45c89
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-400-400-2.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "7", 
+  "4", 
+  "5", 
+  "16", 
+  "6", 
+  "10", 
+  "12", 
+  "2", 
+  "14", 
+  "13", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                            !  ! !!    !!             ! !!  ! !!!  !                                ", 
+  "                               !!! !!!   !              !!!!!! ! !!!                                ", 
+  "                         !! !   ! ! !! ! !       ! !    ! ! ! ! !                                   ", 
+  "                         !! !   !!  ! !!!        ! !  !     !  !                                    ", 
+  "                        ! !! !     !  !          !!! !    !!                                        ", 
+  "                        ! !!! !                  ! !! !!                                            ", 
+  "                       !!!    ! !               !! !!!         !                                    ", 
+  "                     !!!!!! !! ! !!   !        !!!!  ! ! !   ! !!     !!!                           ", 
+  "                   !!!!!!!!!  !  !!  !!       !!!!!! !!!!!! !!! !    !!!!!                          ", 
+  "                  !!!!!!!!!!!!   ! !!! !    !!!!!!!!!!  !  !! !  ! !!!!!!!!             !!          ", 
+  "                !!!!!!!!!!!!!!! ! !  !  !  !!!!!!!!!!!!   ! !  !  !!!!!!!!!!           !!!!         ", 
+  "               !!!!!!!!!!!!!!!!!  !!!    !!!!!!!!!!!!!!! !   !!  !!!!!!!!!!!!!       !!!!!!         ", 
+  "             !!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!!!!     !!!!!!!!        ", 
+  "             !!!!!!!!!! !!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!   !!!!!!!!!!       ", 
+  "              !!!!!!!!    !!!!!!!!!! !!!!!!!!!!!  !!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "              !!!!!!       !!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!         ", 
+  "               !!!!   #     !!!!!!!!!!!!!!!!!   #   !!!!!!!!!!!!!!!!!     !!!!!!!!!!!!!!!           ", 
+  "               !!   ####     !!!!!!!!!!!!!!!   ###   !!!!!!!!!!!!!!    #   !!!!!!!!!!!!!            ", 
+  "                   #######     !!!!!!!!!!!!  ######    !!$!!!!!!!!   ####   !!!!!!!!!!!             ", 
+  "                 ######$##$    $!!!!!!!!!   #########   !$!!$!!!$ $ $$$###    !!!!!!!   #   %%%%%%  ", 
+  "                #######$####  $ $!$!$!!!   ###########   $$$$!$ $ $#$#$#####   !!!!!  ####  %%%%%%  ", 
+  "              ###########$#$$$$ $ !!$!   ##############  $ !$$ $ $#$$#$######   !!   #####  %%%%%%  ", 
+  "             #########$##$#$$$#$$ $ $   ################ $ $ $ $#$#$#$$#######     ######## %%%%%%  ", 
+  "            #############$#$###$ $    ####################   $$$##$#############  ##########%%%%%%  ", 
+  "             ########$ #####$#### $ $########### ######$##$   ######$##$####################%%%%%%  ", 
+  "        &&&&&####### $ $##$#######$ $#########    #####$#$$#$########$#$##################  %%%%%%  ", 
+  "        &&&&&&####   $   $####$##$$##########      ####$##$$#####$#$#$ $ ################   %%%%%%  ", 
+  "        &&&&&& ##    $$  $$$###$###$######## # # # ####$$#$$$$$#$$#$ $ $  #############     %%%%%%  ", 
+  "        &&&&&&       $  $$$ $#$$#$#$#$#####  # ### # ###$#$$##$$##$$$$      ##########      %%%%%%  ", 
+  "        &&&&&&          $$  $$##$#$######  ## ## ## #$$######$$#$  $  $$$$$$ ########       %%%%%%  ", 
+  "        &&&&&&    $$$$$$ $$$ $ #$######$$$ #     # #$##$########$   $$$$$$$$$  ####         %%%%%%  ", 
+  "        &&&&&&  $$$$$$$$$$    $ ######$$$$$ #    $#$#$$#$$#####   $$$$$$$$$$$$  ##          %%%%%%  ", 
+  "        &&&&&&$$$$$$$$$$$$$    $$####$$$$$$$    $$$$#$##$$$###   $$$$$$$$$$$$$$             %%%%%%  ", 
+  "        &&&&&$$$$$$$$$$$$$$   $$$$#$$$$$$$$$$  $$$$$$##$$$$$$$  $$$$$$$$$$$$$$$$ $          %%%%%%  ", 
+  "        &&&&&$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$#####$#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         %%%%%%  ", 
+  "        &&&&&&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#$#$#$$#$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$$        %%%%%%  ", 
+  "        &&&&&&$$$$$$  $$$$$$$$$$$$$$$  $$#$$$#$#$#### # $$$$$$$$$$$$$$    $$$$$$$$$$        %%%%%%  ", 
+  "        &&&&&& $$$    $$$$$$$$$$$$$    #$####$##$#$# ## #$$$$$$$$$$$$      $$$$$$$$$$       %%%%%%  ", 
+  "        &&&&&&  $      $$$$$$$$$$$      #$###$$$$$#  # #  $$$$$$$$$$       $$$$$$$$$$  '''''''%%%%  ", 
+  "        &&&&&&          $$$$$$$$$        ##$$$$$$$ ##  #   $$$$$$$           $$$$$$   %%%'%'''%%%%  ", 
+  "        &&&&&&           $$$$$$           #$$$$$      #       $$               '''''''''''''''%%%%  ", 
+  "        &&&&&&    &&                                  #((             (((((    '''%%%'%%%%%'''%%%%  ", 
+  "        &&&&&& &&&((((((           (((((((         ((((((((         (((((((((  ''%''%''%''%'''%%%%  ", 
+  "        &&&&&&  &&&((((((        ((((((((((       ((((((((((      (((((((((((( '''%%%''%''%'''%%%%  ", 
+  "        &&&&&& ((&&&(&&&&&      ((((((((((((    (((((((((((((    (((((((((((((('''''''''%%''''%%%%  ", 
+  "        &&&&&((&&((((((&(((   (((((((((((((((  (((((((((((((((  ((((((((((((((('%%%%%'%%%%%'''%%%%  ", 
+  "        &&&&(((((&&&(((&(((( (((((((((((((((( ((((((((((((((((((((((((((((((((((((     %    %%%%%%  ", 
+  "        &&&&&((&&&(((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((    %    %%%%%%  ", 
+  "        &&&&&&(&((&( &&&(((((((((((((  (((((((((((((((  (((((((((((((((   ((((((((%(%  %%%% %%%%%%  ", 
+  "        &&&&&& &&&(  &&(&((((((((((     ((((((((((((     (((((((((())))())))))))(%((%   %%  %%%%%%  ", 
+  "        &&&&&&  (    &&&((((((((((      (**((((((((       ((((((((())()()())))))))%%%))%  % %%%%%%  ", 
+  "        &&&&&& &&&&     (((((((((++  ******((((((( ,,,,,,,,,,,,,,(()))()()())))))))))))% %% %%%%%%  ", 
+  "        &&&&&&    &  &&&&&(((((+++++ ******(------ ,,,,,,,,,,,,,,( ()()(()()))))%%%%%)%))   %%%%%%  ", 
+  "        &&&&&& &&&&&     +++(+++++++ ****** ------,,,,,,,,,,,,(,,( (()))(())))))))%))))%%%% %%%%%%  ", 
+  "        &&&&&&          +++++++++++  ******-------,,,,,,,,,,,,(((()((())))))))))))%))))%%%) %%%%%)) ", 
+  "        &&&&&& &&&&  &&&+++++++++    ******-------,,,,,,,,,,,,,(,......... )))))%%%%%)%%%)) ))))%%  ", 
+  "        &&&&&& &  &  &++&+++++++      *****-------,,,,,,,,,,,,,(,.........          )))))%% )%%)%)) ", 
+  "        &&&&&& &&&&&+&&&+++++++       *****------ ........,,,,,,,..(....(.(          )%%%)) )))%%%) ", 
+  "        &&&&&&     +++++++++///+++    *****------...............((.((.((..(   ((     )))))))%%%%%% )", 
+  "        &&&&&& & &&&+++++++/+////+////*****------.............(.((.((..(.. ( ( (     ))))))))%%%%%))", 
+  "        &&&&&&  ++++++++++/+/+/+/+//+/*****------..............((.((.((..( ( ( (     )))))))))))%%  ", 
+  "        &&&&&& +++++++++////+/+///+//+****-------.......       ((0((0000000(0(       )))))) %%%%%%) ", 
+  "        &&&&&&+++++++++//+++/+/////+//+***-------......        0(000000000000( (     )))))) ))%)%%))", 
+  "        &&&&&&+++++++//+/+++/+////+/+/+***------.......        000000000000000       )))))) )%%)%% )", 
+  "        &&&&&&++++++///+/+//+///+/+/++/***------.......        000000000000000       )))))) %)))%%) ", 
+  "        &&&&&&++++++/+/++/+//  ++++++/////------......         000000000000000       )))))))%%%%%%) ", 
+  "        &&&&&&+++++ /++//+//  +  +   /////------......         000000000000000))))))))))))) )))%%) )", 
+  "        &&&&&& ++   //+//// ++ +      //////----......         000000000))))))))))))))))))) )%%%%%))", 
+  "        &&&&&&      //////+   + +     ///../...........           )))))))))))))))))))))))))))%%%))))", 
+  "        &&&&&&     /////+/+ + +       ...//// . .......           ))))))))))))))))))))))))  %%)%))  ", 
+  "        &&&&&&     /////++ ++++       .....///. .......           )))))))))))))))))))))))   %%%%%%))", 
+  "        &&&&&&     ///+/+ ++           /..//.... .......          ))))))))))))))))))))))    %%%)))))", 
+  "        &&&&&&     ////+++ +          ..//////.. .........................   )))))))        %%%%%%  ", 
+  "        &&&&&&     /////++             //..//.. ..........................                  %%%%%%  ", 
+  "        &&&&&&     ///////             /..///.  . ........................                  %%%%%%  ", 
+  "        &&&&&&     ////////            .//.//. . . .......................                  %%%%%%  ", 
+  "        &&&&&&     ////////           /./..//  .. . ......................                  %%%%%%  ", 
+  "                    ////////        //////../    .    ....................                  %%%%%%  ", 
+  "                     //////////    //////.//..  . . .                                               ", 
+  "                      //////////////////////.     . .   11111111111111111111111111                  ", 
+  "                      /////////////////////. .    ...   11111111111111111111111111                  ", 
+  "                       ////////////////// . . ..        11111111111111111111111111                  ", 
+  "                        ////////////////    . .. .      11111111111111111111111111                  ", 
+  "                         //////////////     ... .       11111111111111111111111111                  ", 
+  "                            /////////  //    .  .       11111111111111111111111111                  ", 
+  "                            /      // /  /     .              1  1    1 1                           ", 
+  "                            /// //// / / /                    1  1 11 1 1 11                        ", 
+  "                           /  / / / / / /                     111111111 11  1                       ", 
+  "                           /  / /   / /                       1  11   1 1   1                       ", 
+  "                                /// /  / /                    1  1 11 1 1 11                        ", 
+  "                         / /            / /                                                         ", 
+  "                         / /        / ///                   1 1 1                                   ", 
+  "                         // // // //  /  / /                1   1 11 11 11 1                        ", 
+  "                         // ///  //  //  /                  11 111  11  11                          ", 
+  "                            / / / /  / /                     1 111  11  11 1                        ", 
+  "                                  /                          1 1   1                                ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-600-600-1.0-grid-reference.json
new file mode 100644
index 0000000..8d2817d
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-600-600-1.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "10", 
+  "2", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                          !                                                          !                                                ", 
+  "                           !             ! !                                                         !!!  !                                           ", 
+  "                          !        !!  !! !!                     !              !                   !!   !!                                           ", 
+  "                        !!! !!   !!!!! !!! ! !!                         !!     ! !                 !!! !! !                     !!!!                  ", 
+  "                     !  !!  !!! !!!!!!!!!!!  !!!              !!! !    !!!!! !!  !!               !   ! ! !!                     !! !!                ", 
+  "                       !  !!!!!!!!!!!!!!!!!!! !!              !! !!!! !!!!!!!!!!! !!!               !!!!!!!!!                 !!!     !!              ", 
+  "                      !  !!  !!!!!!  !!!!! !!!!             !!  ! !!!!!!!!!!!! !!! !!!            !!! !!!!!!!!!       !      !!!  !!! !!              ", 
+  "                       !!! !!!!!!     !!!!! !!!             ! !!!  !!!!!  !!!!!!  !                ! !!!!!!!!!!!       !      !  !! !!!!!             ", 
+  "                      !!! !!!!!!       !!!!!!        ! ! !   !!!!!!!!!!    !!!!!!!!!   !! !!!!      !!!!!!  !!!!!  !!  ! !!!   !!  !!!!!!             ", 
+  "                       !!!!!!!           !!!!!     !        !!! !!!!!!       !!!!!!!!   !!!        !!!!!     !!!!!!!!!  !!!!  !!! !!!!!               ", 
+  "                      !!!!!!!             !!!!!    !!!!!!     !!!!!!          !!!!!    ! ! ! !   !!!!!!       !!!!!!!!!        !!!!!!!                ", 
+  "                     !!!!!!                !!!!!    !   !    !!!!!!            !!!!!! !!    !   !!!!!!          !!!!!!!!!      !!!!!!                 ", 
+  "                     !!!!!                  !!!!!!! !   !!! !!!!!               !!!!!!!!!  !!! !!!!!             !!!!!   !!   !!!!!                   ", 
+  "                     !!!                      !!!!!!! !!!!!!!!!!                  !!!!! ! !  !!!!!!               !!!!!!!! !!!!!!!                    ", 
+  "                                               !!!!! !   !!!!!!                    !!!!!!   !!!!!!                 !!!!!!  !!!!!!                     ", 
+  "                                                !!!!!  !!!!!!                       !!!!!! !!!!!                     !!!!!!!!!!                       ", 
+  "                                                 !!!!!!!!!!!                          !!!!!!!!!                       !!!!!!!!                        ", 
+  "                                                   !!!!!!!                             !!!!!!                          !!!!!                          ", 
+  "                                ##                  !!!!!               #               !!!!                             !!                           ", 
+  "                               #####                 !!!              ####                !               #                                 $$$$      ", 
+  "                             ########                                ######                              ###                                $$$$      ", 
+  "                            ##########                              #########                           #####                        ##     $$$$      ", 
+  "                          ######  ######                          ###### #####                        #########                     ####    $$$$      ", 
+  "                         ######    ######                        ###### # #####                      ###########                  ######  $$$$$$      ", 
+  "                       ######       ######                     ######    # ######                   #####   #####                ######$  $$$$$$      ", 
+  "                     #######       ########                   ######     ## ######                 #####     ######             #####   $ $$$$$$      ", 
+  "                    ######       ## #########                #####        ### #####              ######      # #####          ######      $ $$$$      ", 
+  "                    #####        ### #  ######             ######       #  ##  #####            #####         # ######       ######    $  $$$$$$      ", 
+  "               %%%  ###           ### ### #####           #######    # ####  #  ######         #####        #  # ######    ###### ##   $$ $$$$$$      ", 
+  "               %%%                 # ## #  #####        ######        #     #     #####      ######       # #  ### #####  ##########   $$ $$$$$$      ", 
+  "               %%%                  ##      ######     #########          ##       #####    ######         ##   ##  ########## ###  ##    $$$$$$      ", 
+  "               %%%%%                   ##     #####   #####  ## ####        #       ###### #####        &    ### ##  ######## ###    #    $$$$$$      ", 
+  "               %%% %%%%%      &                #######&### ##  #  #            &     ##########         &&&    ###     ##### #     #        $$$$      ", 
+  "               %%% %%%%% &&&&                   ###&&&#&#  # ###           &&&&&&      #######       & &        # #     ##      # #         $$$$      ", 
+  "               %%%%  %% &&& &                   &##&#&#&    ####          &&&& & &&     ####        &&&& &&&&    #   &       # ###          $$$$      ", 
+  "               %%%   %% &    & &                  &### &   ###                 &&&&      ##         &   &&&&&       &&&       ##            $$$$      ", 
+  "               %%%   %%%   && &&                 &    & &          &         &&  &          &         & &  &&&&& &&  &                      $$$$      ", 
+  "               %%%   %%% &&   &&        &    &   &&&&& &&&&&      &  &  &  &&&&&&&&&&&&    &&& &&    &&&&&&&&&&&& &&  & &&                  $$$$      ", 
+  "               %%%%  %  &&&&&&&&&&&      & && & &&&  &&&&&&&&&       &&&  &&&&&&&&&&&&&&    &&&&&    & &&&&&&&&&&&  & &&&                   $$$$      ", 
+  "               %%%        &&&&&&&&&&   & &&      & &&&&&&&&&&&&  & && &     &&&&&&&&&&&&& && &&      &&&&&&&&&&&&&&&&&                      $$$$      ", 
+  "               %%%      &&&&&&&&&&&&& &&&&  &    &&&&&&&   &&&&&&&         &&&&&&    &&&&& &&       &&&&&&     &&&&& &                    $$$$$$      ", 
+  "               %%%     &&&&&&     &&&& &&   &&  &&&&&&      &&&& &&   && &&&&&&       &&&&& & &&&& &&&&&        &&&& & &               $$$$$$$$$      ", 
+  "               %%%    &&&&&        &&&& &&    &&&&&&         &&&&  &&  &&&&&&          &&&&&&&&&& &&&&&          &&&& &&   &           $$ $$$$$$      ", 
+  "               %%%   &&&&&         &&&&&&  && &&&&&           &&&&   & &&&&&            &&&& & &&&&&&&            &&&& & &&&&          $$$$$$$$$      ", 
+  "               %%%    &&&           &&&&&   &&&&&&            &&&&&  &&&&&&             &&&&&&&&&&&&&             &&&&&&&&&&&&         $$ $ $$$$      ", 
+  "               %%%    &              &&&&&&&&&&&&              &&&&&&&&&&&               &&&&&&&&&&                &&&&&&&&&           $  $$$$$$      ", 
+  "               %%% %%                 &&&&&&&&&                 &&&&&&&&&                 &&&&&&&&                   &&&&&&               $$$$$$      ", 
+  "               %%% %%%%%               &&&&&&&                   &&&&&&                      &&&                        &                 $$$$$$      ", 
+  "               %%%%%  %                   &&                                                                                           $$ $ $$$$      ", 
+  "               %%%%%                                                                                                               '''''' $ $$$$      ", 
+  "               %%%%% %                                                                                                             ''''''   $$$$      ", 
+  "               %%%   %%%                                                                                                           ''''''   $$$$      ", 
+  "               %%%%%%%%%                                                                                                           ''''''   $$$$      ", 
+  "               %%%%  %%                                                                                               '''''''''''''''''''   $$$$      ", 
+  "               %%%%%%%%                                                                                               '''''''''''''''''''   $$$$      ", 
+  "               %%%%%%                                   (((                     ((((((                   (((((((      '''''''''''''''''''   $$$$      ", 
+  "               %%%          (((((((                  ((((((((                 (((((((((                (((((((((((             '  '         $$$$      ", 
+  "               %%%        ((((((((((               (((((((((((              ((((((((((((             (((((((((((((             ''''         $$$$      ", 
+  "               %%%      (((((((((((((             (((((((((((((            (((((((  (((((           ((((((     ((((                         $$$$      ", 
+  "               %%%     (((((((   (((((          (((((((((( (((((          (((((       ((((         ((((((( (    ((((          ''''' '  $  $$$$$$      ", 
+  "               %%%    ((((( (( (  ((((         (((((((((((  (((((       (((((((((((   (((((       ((((((  (      ((((      ( ''  ' '       $$$$$      ", 
+  "               %%%  %(((((  (      ((((       ((((( (((      ((((      (((((((((  (    ((((     (((((((( (( (    (((((    (((          $$ $ $$$$      ", 
+  "               %%%%% (((( ((  (     ((((     ((((( (          ((((    (((((  (   (((    (((((  ((((((( (  (( (    (((((((()())))       $$ $$$$$$      ", 
+  "               %%%%%  %( (   ( (    (((((( ((((((     (   (    (((((((((((       (((     ((((((((((   ( (( ((    ( ((((((())) ))       $$ $$$$$$      ", 
+  "               %%% % %%%   ( ((( (   (((((((((((    (((( ( (  ( (((((((((     (((   (   ( ((((((((    ((((        ( (((((((     )      $$   $$$$      ", 
+  "               %%%%% %%  (((          ((((((((   **(((         ( ((((((      ((        ( (((((((     ( ((      ((  ((  (( )))))        $$ $$$$$$      ", 
+  "               %%%%%  %   (         (  (((((    ****      +++   ((  (                 (( (((((      )))()))      ( ((((( ))  ) ))          $$$$$      ", 
+  "               %%%%%%               ( (((((    *****      ++((  ( (((                 (((  (( (     ))))))))))))))()))(())))))))))          $$$$      ", 
+  "               %%% %  %           ( (   (    ******       +++(((   ((,,,               ((( (        )))))))))))))(())))))))))))))           $$$$      ", 
+  "               %%%%%%%%            ((       *****          +++(((( ((,,,    --          (  (((        )))))))))))))(())))))))))))))         $$$$      ", 
+  "               %%%%%%                (( (((*****           +++   ( ((,,,    ----..--.-.-----------.... ..            ((   )))))))))         $$$$      ", 
+  "               %%%                     (((******           +++      (,,     ----......------------ ...  .                      )))))        $$$$      ", 
+  "               %%%                      *********          +++      ,,,     ----.--.--------------      ..                       ))))       $$$$      ", 
+  "               %%%                     *****     **        ++++     ,,,         ..  .....        ..... ...                       ))))       $$$$      ", 
+  "               %%%                   ********  **          ++++     ,,,   ,    ..........        ..... ...                        ))))      $$$       ", 
+  "               %%%                  ***** *    ***         ++++     ,,,,,,      ..    ........................                     )))   $$$$$$       ", 
+  "               %%%                 *****    ****            +++    ,,,,,, ,,  ................................                     ))) $$$$$$$$       ", 
+  "               %%% %             ******    * **             +++    ,,,, ,,,   ................................                     ))) $$ $$$$$       ", 
+  "               %%% %% %         *****      * *              +++    ,,, ,     ...................                                   ))) $$$$$$$$       ", 
+  "               %%%  %%%%      ******        *               +++    ,,, ,, , ....                                                   )))    $$$$$       ", 
+  "               %%%    %      ******        ////             ++/+   ,,,,, ,  ....                                                   ))) $  $$$$$       ", 
+  "               %%% % %%     *****         ///////////      /+///   ,,,   ,, ...                                                    )))    $$$$$       ", 
+  "               %%%   %%%  ******         //////////////////  +//  ,,,,   ,  ...                                                    ))) $  $$$$$       ", 
+  "               %%% %     ******  *     ///////////////////// +++ /,,,,  ,,, ...                                                    )))   $$$$$$       ", 
+  "               %%%   %  ***** ***     //////       ////////  /+/ /,,,,     ....                                                    )))   $$ $$$       ", 
+  "               %%%    ******  ** **  /////              //// /// /,,,  .   ....               00000000000000000000000             ))))      $$$       ", 
+  "               %%%   ****** *** ***//////                ////+/+ /,,, .. . ....               00000000000000000000000             ))))      $$$       ", 
+  "               %%%  *****  *     *//////                 ////// / ,,,...   ...                00000000000000000000000             )))       $$$       ", 
+  "               %%%   ***    **** /////                    ////  / ,,,...   ...                         00   0                     )))       $$$       ", 
+  "               %%%   **    * *   ////                      ////  ,,,, .    ...                         000                        )))       $$$       ", 
+  "               %%%          **   ///                        //// ,,,, ..  ....                                                   ))))       $$$       ", 
+  "               %%%              ////                        /////     . ......                        0 000 0                    ))))       $$$       ", 
+  "               %%% %%         //////                         ////     .... ...                    )))000)0)00)))))))))))))))))))))))        $$$       ", 
+  "               %%%  % %%    ///////                           ///        ......                   )))))))))))))))))))))))))))))))))         $$$       ", 
+  "               %%% %%     /   /////                           ////         ....                   )))))))))))))))))))))))))))))))))    $$  $$$$       ", 
+  "               %%%  % %   /////////                           ///           ...                        )   ))      )))))))))))        $$$   $$$       ", 
+  "               %%% %  %    / // ///                           ///           ...                        ) )))) )          )   )))      $$$   $$$       ", 
+  "               %%%  % %%   / // ///                           ///           ....                             )             )  ))       $    $$$       ", 
+  "               %%%    %%   / //////                           ///   //      .....                     )))) )           )     ) ))      $$  $$$$       ", 
+  "               %%%  %  %  //  /////                           ////  //       .....                    )                 ) )))))))      $ $$ $$$       ", 
+  "               %%%    %      /////                           /////  //        ......                                    )))))  )       $$$$ $$$       ", 
+  "               %%%             ////                          ////// //         ...............................                            $$$$$       ", 
+  "               %%%             ////                          /// // //          ..............................                              $$$       ", 
+  "               %%%              ////                         /// /  /            .............................                              $$$       ", 
+  "               %%%               ////                        /// /  /             ...  .           ...  .                                   $$$       ", 
+  "                                  ////                      //////  /              .  .            ...                                      $$$       ", 
+  "                                  ////                     /////   //           ..                                                                    ", 
+  "                              / / /////                  //////                 .. .....          . .....                                             ", 
+  "                              // // ////                //////                   .... ..         .. .. ..                                             ", 
+  "                              //   //////              /////                                                                                          ", 
+  "                               /   //////////        //////                                                                                           ", 
+  "                                 / //////////////// //////                           11111111111111111111111111111111111111                           ", 
+  "                                 /  // /////////////////                             11111111111111111111111111111111111111                           ", 
+  "                                 / /       ////////////                              11111111111111111111111111111111111111                           ", 
+  "                                  / /            //// //                             11111111111111          1    1                                   ", 
+  "                                                // /////                                   1   111           11 1 111                                 ", 
+  "                                                /      /                                     1 111           1  1                                     ", 
+  "                                               //                                        11    1 11         11    1111                                ", 
+  "                                               / ///// //                                 111111111          111111111                                ", 
+  "                                                  // /                                    111111111                                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-5-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..926a9b5
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-600-600-2.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "7", 
+  "5", 
+  "16", 
+  "6", 
+  "10", 
+  "2", 
+  "12", 
+  "13", 
+  "14", 
+  "3", 
+  "11", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                     ! !                                                                                                              ", 
+  "                                    !! !                                                                                                              ", 
+  "                                    !  ! !!                                                                                                           ", 
+  "                                    !  !!! ! !                                                                                                        ", 
+  "                                       !! ! ! !                                                                                                       ", 
+  "                                         !!! !                                                                                                        ", 
+  "                                 !  !      ! !!!!             !!!                                                    !                                ", 
+  "                               ! !! !!!!    ! ! !         ! ! ! !                    !         !                     !        !!!                     ", 
+  "                                !! !!  ! !      !         ! ! ! !  !                !!  !   ! ! !                   !! !    ! ! !                     ", 
+  "                                !! !!  !!!!!  !!     !     ! !    ! !               ! !!  ! ! !  !                 !  !!  ! !!! !                     ", 
+  "                                 ! !! !!  !!        !  !!!! ! !   !  !                !! ! ! ! !!                     ! !!!! ! !                      ", 
+  "                                  !!!!    ! !       !! !!!! !    ! !  !  !            ! ! ! ! !                      ! !!!! ! !                       ", 
+  "                                !!!!!!!! ! ! !!    !  ! !  !   ! !  !  !!!!!             !! !             !!       !   !     !  !                     ", 
+  "                               !!!!!!!!!!    !  !     !       ! !!!!  !!!!!!!      !    !!      !       !!!!!      ! !   !    ! !                     ", 
+  "                             !!!!!!!!!!!!! !!  !             !! !   !!!!!!!!!!     ! !        !! !     !!!!!!!!   ! !!         ! !    !               ", 
+  "                           !!!!!!!!!!!!!!!!                !! !  ! !!!!!!!!!!!!   !!!! !      !!      !!!!!!!!!!  !!  !!   ! ! !  !  !!!              ", 
+  "                          !!!!!!!!!!!!!!!!!!!          !     ! !  !!!!!!!!!!!!!!! !   !    !    ! ! !!!!!!!!!!!!!   !!!    ! !  !  !!!!!              ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!       ! !!  ! !  !!!!!!!!!!!!!!!!!!  !! !!   ! ! !! !!!!!!!!!!!!!!!  ! ! ! !!! !!  !!!!!!!             ", 
+  "                       !!!!!!!!!!!   !!!!!!!!!!      ! !!   !  !!!!!!!!!!!!!!!!!!!!   !  !!  ! !  !!!!!!!!!!!!!!!!!!  ! ! !  !   !!!!!!!!!            ", 
+  "                     !!!!!!!!!!!!     !!!!!!!!!!      !! !   !!!!!!!!!!!  !!!!!!!!!!! ! ! !  !  !!!!!!!!!!!!!!!!!!!!! !!! !  ! !!!!!!!!!!!            ", 
+  "                    !!!!!!!!!!!        !!!!!!!!!!!    !! !  !!!!!!!!!!!    !!!!!!!!!!! !!  !   !!!!!!!!!!!  !!!!!!!!!!        !!!!!!!!!!!             ", 
+  "                    !!!!!!!!!!           !!!!!!!!!!       !!!!!!!!!!!        !!!!!!!!!!      !!!!!!!!!!!     !!!!!!!!!!     !!!!!!!!!!!               ", 
+  "                     !!!!!!!              !!!!!!!!!!     !!!!!!!!!!!          !!!!!!!!!!    !!!!!!!!!!!       !!!!!!!!!!!  !!!!!!!!!!!                ", 
+  "                     !!!!!!                !!!!!!!!!!   !!!!!!!!!!!            !!!!!!!!!!! !!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                      !!!                   !!!!!!!!!!!!!!!!!!!!!                !!!!!!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!!!                   ", 
+  "                       !                      !!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!                    ", 
+  "                                 #             !!!!!!!!!!!!!!!          #          !!!!!!!!!!!!!!                   !!!!!!!!!!!!                      ", 
+  "                               #####            !!!!!!!!!!!!!          ###          !!!!!!!!!!!!                     !!!!!!!!!!                       ", 
+  "                              #######            !!!!!!!!!!!         ######           !!!!!!!!!          ###          !!!!!!!!                        ", 
+  "                            ##########             !!!!!!!          #########          !!!!!!           #####          !!!!!               $$$$$$     ", 
+  "                          #############             !!!!!         ############          !!!!           ########          !!         ##     $$$$$$     ", 
+  "                         ################            !!          ##############           !          ###########                   ####    $$$$$$     ", 
+  "                       ###################                      ################                    #############                #######   $$$$$$     ", 
+  "                      #####################                   ####################                 ################             ########   $$$$$$     ", 
+  "                    ############  ##########                 ########### ##########              ###################          ###########  $$$$$$     ", 
+  "                   ###########     ###########             #####%#####    ##########      %     ########## ##########        ###########   $$$$$$     ", 
+  "                   ##########        #%########           ######%####      ###########   %     #####%%###   ###########     ##########     $$$$$$     ", 
+  "                    #######           %##%######%%       ######%%#%#   %  %%%##########  %% % ###%#%#%##     ###########  ###########      $$$$$$     ", 
+  "             &&&&&& ######           %%%%###%#%#%#%    ########%#%%   % %   % ##########%  %####%#%%##%        #####################       $$$$$$     ", 
+  "             &&&&&&  ###             %  %#%#%#%#%#%   ########%##% %%%% % % %  ##########  %#%#%%#%#%%          ##################         $$$$$$     ", 
+  "             &&&&&&   #                % %#%#%#%%%%######%#####  % %%% % %      ###%#%######%#%%#%#%             ################          $$$$$$     ", 
+  "             &&&&&&               % %  % %%%##%%#########%#%%#%    % %  %         #%#%#%#####%#####             #  #############           $$$$$$     ", 
+  "             &&&&&&             %%% %    %% ##%##########%#%%       %              %%##%######%##              ##  ###########             $$$$$$     ", 
+  "             &&&&&&             %%% %%        ############% %%%%%                  %%#%%%#%#####               # ##  ########    $$$       $$$$$$     ", 
+  "             &&&&&&             % %%% %        ###########% %%% %      %              %%##%####  %          #    # ##  ####        $   $ $ $$$$$$     ", 
+  "             &&&&&&               %%% %      %  ########      % % %   %%%        %%%%% #%%#%%#   %       %%%#%#%%# # # ###       $ $  $  $ $$$$$$     ", 
+  "             &&&&&&          %%%%%% %%%%%%  % %   #####%%%%%%% % % %% % %     %%%%%%%%%%##%#  %%% %    %%%%#%##%%%   #  # ###          $$  $$$$$$     ", 
+  "             &&&&&&     & %%%%%%%%%%  %% %%%%      ###%%%%%%%%% %  %% %  %  %%%%%%%%%%%%%## %%% %  % %%%%%%##%%%#%%## # ##  #  $$$$$ $$$$$ $$$$$$     ", 
+  "             &&&&&&  &&&%%%%%%%%%%%%%%   %   %    %%%%%%%%%%%%%%  % %  %   %%%%%%%%%%%%%%% %% % %   %%%%%%%#%###%%%%  # # ###              $$$$$$     ", 
+  "             &&&&&& &&&%%%%%%%%%%%%%%%  %  % %  %%%%%%%%%%%%%%%%%    %%% %%%%%%%%%%%%%%%%%%   %%%% %%%%%%%%%%#####%%%   #      $$$$$  $    $$$$$$     ", 
+  "             &&&&&&   %&&%&&&&&%%%%%%%%    %%  %%%%%%%%%%%%%%%%%%       %%%%%%%%%%%%%%%%%%%       %%%%%%%%%%%%%#%%%#%%#          $$$  $$$$ $$$$$$     ", 
+  "             &&&&&& &&%%%%%%&%%%%%%%%%%%      %%%%%%%%%%%%%%%%%%%%     %%%%%%%%%%%% %%%%%%%%    %%%%%%%%%%%   %#%#%###   ##%      $$   $$  $$$$$$     ", 
+  "             &&&&&& %%&&&%%%&%% %%%%%%%%%    %%%%%%%%%%    %%%%%%%%   %%%%%%%%%%     %%%%%%%%  %%%%%%%%%%      %%%#%%#%###%#     $$$  $  $ $$$$$$     ", 
+  "             &&&&&&  &&%%%&&&&&  %%%%%%%%% %%%%%%%%%%%      %%%%%%%%%%%%%%%%%%%       %%%%%%%%%%%%%%%%%%        %%#%%##%%#%#%     $   $  $ $$$$$$     ", 
+  "             &&&&&& & %&%%%&&     %%%%%%%%%%%%%%%%%%        %%%%%%%%%%%%%%%%%         %%%%%%%%%%%%%%%%%          %%%#%#%##%#%% $$$$$   $$  $$$$$$     ", 
+  "             &&&&&& & %&%%&  &     %%%%%%%%%%%%%%%%          %%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%           %%%%%%%%%%%%%%  $    $$$  $$$$$$     ", 
+  "             &&&&&&    %% &  &      %%%%%%%%%%%%%%            %%%%%%%%%%%%%             %%%%%%%%%%%%              %%%%%%%%%%%%   $     $$$ $$$$$$     ", 
+  "             &&&&&& &&&&    &        %%%%%%%%%%%%              %%%%%%%%%%%               %%%%%%%%%%                 %%%%%%%%   $$$$$ $$    $$$$$$     ", 
+  "             &&&&&&    &  &&&&&       %%%%%%%%%                 %%%%%%%%                  %%%%%%%                     %%%%         '''''$$'$$$$$$     ", 
+  "             &&&&&&                     %%%%%                      %%%                        %                                    ''$$$$''$$$$$$     ", 
+  "             &&&&&&       &&&&&                                                                                                    ''''''''$$$$$$     ", 
+  "             &&&&&&& &&&   &&                                                                                         '''''''''''''''''''''$$$$$$     ", 
+  "             &&&&&&&&  &  &  &                                                                                        '''''''''''''''''''''$$$$$$     ", 
+  "             &&&&&&&&&&&& &  &                                                   (((                      ((((((      '''''''''''''''''''''$$$$$$     ", 
+  "             &&&&&&&       &&((((((                   (((((((                 (((((((((                (((((((((((   )''''''')'''''''''''''$$$$$$     ", 
+  "             &&&&&&&& &&& ((((((((((                ((((((((((               (((((((((((              (((((((((((((  )')'')'')'''''''''''''$$$$$$     ", 
+  "             &&&&&&&     ((((((((((((             (((((((((((((            ((((((((((((((           (((((((((((((((( )))')')')''))'''''''''$$$$$$     ", 
+  "             &&&&&&&   (((((((((((((((          ((((((((((((((((          ((((((((((((((((         (((((((((((((((((  ')')))'))')')''''''''$$$$$$     ", 
+  "             &&&&&&&  (((((((((((((((((        ((((((((((((((((((       (((((((((((((((((((       (((((((((((((((((((  ) ))) )) ) )        $$$$$$     ", 
+  "             &&&&&&& (((((((((((((((((((      ((((((((((((((((((((     (((((((((((((((((((((     (((((((((((  ((((((((    (     ))         $$$$$$     ", 
+  "             &&&&&&&((((((((((((((((((((     (((((((((((  ((((((((    ((((((((((    ((((((((   (((((((((((     ((()()(()((((  )            $$$$$$     ", 
+  "             &&&&&&&(((((((((    ((((((((  (((((((((((     ((((((((((((((((((((   (  (((((((((((((((((((   ((  ((()()))())()())   )        $$$$$$     ", 
+  "             &&&&&&& ((((((       ((((((((((((((((((        ((((((((((((((((( ( (  ( (((((((((((((((((( ( ( (( ((()(())((())(() )))        $$$$$$     ", 
+  "             &&&&&&&  ((((         ((((((((((((((((          (((((((((((((((   (((  (  (((((((((((((((  (((  (( ((()())((())(()) )  )      $$$$$$     ", 
+  "             &&&&&&&   ((          (((((((((((((((           (((((((((((((( ( (((((( (((((((((((((((( ((  (((  (  ()()(())()(()) ) )       $$$$$$     ", 
+  "             &&&&&&&                (((((((((((((**           ((((((((((((   (  (   (    (((((((((( )))()))))(()(()))(((((((   ))) )       $$$$$$     ", 
+  "             &&&&&&&                 ((((((((((*****     ++++++ (((((((((     (    ( (((  (((((((   ))))())))))())))))))))))))))  )        $$$$$$     ", 
+  "             &&&&&&&                   ((((((********    ++++++   (,(((              (       ((     )))))))))))()())))))))))))))))         $$$$$$     ", 
+  "             &&&&&&&                      (**********    ++++++    ,,,,,,   ---------(((--------    ))))))))))))()))))))))))))))))))       $$$$$$     ", 
+  "             &&&&&&&                     ***********     ++++++    ,,,,,,   ------(---------------  )))))(((()())))))))))))))))))))))      $$$$$$     ", 
+  "             &&&&&&&                    ***********      ++++.++   ,,,,,,   -(((((-((-------------  ))))()(())())))))))))))))))))))))      $$$$$$     ", 
+  "             &&&&&&&                   **********        +++.++.   ,,,,,,   -((-((-(--------------  (( (( (( ( ()())))))))))))))))))))     $$$$$$     ", 
+  "             &&&&&&&                 ***********         +++..+.  ,,,,,,,  (-(-(((((((((-(--------(   (( (( ( ( (( (          )))))))))    $$$$$$     ", 
+  "             &&&&&&&   &&           ***********           +.++.+  ,,,,,,,( (((----(-(-((-(-------- ( (((     /( ( (             )))))))    $$$$$$     ", 
+  "             &&&&&&& &&            **********             ++++....,,,,,,, (( ((   //(/(-(---------//((/(//////((( (             )))))))    $$$$$$     ", 
+  "             &&&&&&&  &&&        ***********          . . +++++.. ,,.,,,   ( ////////(///////////////(////////    (              ))))$$$ $ $$$$$$     ", 
+  "             &&&&&&&  &&&   &   ***********           . . .++++.+.,.,,,,     ///////////(/////////////////////                   ))))))    $$$$$$     ", 
+  "             &&&&&&& &&     &  **********  ***        ..  .+.+++. .,..,,    //////////////////////////////////                   $$$)$$$$$ $$$$$$     ", 
+  "             &&&&&&&    & &&&&&**********    *        .  ...+.+++.,.,,,,   ///////////////////////////////////                  $))$))$) $ $$$$$$     ", 
+  "             &&&&&&& &&&    ************ *.*.*..*.       ..++.+++,.,..,,   ///////////////////////////////////                   $$$))$$ $ $$$$$$     ", 
+  "             &&&&&&&   &   &&&*******   *.*...*..*.......  .....+,,.,,.,  //////////                                             )))))))   $$$$$$     ", 
+  "             &&&&&&& &&& *&*&&****** *****.....*.*.........+..++..,.,..   ///////                                                ))))$$$$$ $$$$$$     ", 
+  "              &&&&&&    **&*&&****** ***.*....***.*........++++.+,,,.,,   ///////                                              $$$$$))$    $$$$$$     ", 
+  "              &&&&&&   &*********  * *..*...*.*.*..........+++.+..,,,,,   //////              00000000000000000000000            )))))$$$  $$$$$$     ", 
+  "              &&&&&& **&**&&&&&* * **.*....**.***..........++++.+,..,,,   //////              00000000000000000000000            $$$)))    $$$$$$     ", 
+  "              &&&&&&*&&&&*&&&&&  **..*....*..*  ............+++.+..,,,,   //////              00000000000000000000000           $)$$)))$$$ $$$$$$     ", 
+  "              &&&&&&*********    .*.....**.*          ......++++.,,..,,   //////              00000000000000000000000            $$$))$  $ $$$$$$     ", 
+  "              &&&&&&*&*&***&&&  ......**..* *           ....... ,,.,,,,   //////              00000000000000000000000            )))))$$$$ $$$$$$     ", 
+  "              &&&&&& **&**&  & .....*.*.* *             ........,.,,,,    //////              00000000000000000000000          $$$$$)$$    $$$$$$     ", 
+  "              &&&&&& &&&&  &&& .....**. ***              .......,,,,,,    //////              00000000000000                    )$)))))$$$ $$$$$$     ", 
+  "              &&&&&&  **       ...*.*.**                  ......,,,,,,    //////                  )))))))))))                  $$$$$)$$$$  $$$$$$     ", 
+  "              &&&&&& &&&&      ....*.* *                   .......   ,    //////                  )))))))))))))))))))))))))))))))))))$$$$  $$$$$$     ", 
+  "              &&&&&&     ..... .....**                     .......        //////                  )))))))))))))))))))))))))))))))))))) $$$ $$$$$$     ", 
+  "              &&&&&& ..        ......                       .....         //////                  )))))))))))))))))))))))))))))))))))$$    $$$$$$     ", 
+  "              &&&&&&.  . ............                        ......       //////                  ))))))))))))))))))))))))))))))))))       $$$$$$     ", 
+  "              &&&&&&.  .  .   .......                        ......       //////                  ))))))))))))))))))))))))))))))))))       $$$$$$     ", 
+  "              &&&&&&  .   ... .......                        ......       ///////                     )))))))))))))))))))))))))))))        $$$$$$     ", 
+  "              &&&&&.... .     ......                        .......       ////////                              )  )      )                $$$$$$     ", 
+  "              &&&&.&      ... ......                        .......        ////////                             )  ) )))  ) )))            $$$$$$     ", 
+  "              &&&&&& ..  .    ......                        ......         ///////////////////////////////////  )  ) )))  ) ) )            $$$$$$     ", 
+  "              &&&&&&. .  ...  ......                        ......          //////////////////////////////////  )  ) )    ) ) )            $$$$$$     ", 
+  "              &&&&&.  .    . ........                       ......           /////////////////////////////////     ) )))  )  )             $$$$$$     ", 
+  "              &&&&&&. .   . .........                       ......           /////////////////////////////////                             $$$$$$     ", 
+  "              &&&&&&  .     . ........                     .......             ///////////////////////////////) ) )          ) )           $$$$$$     ", 
+  "              &&&&&&..    .. . ........                    .......               /////////////////////////////)   ) )) ))  ))) )           $$$$$$     ", 
+  "                     .    ....  ........                  .......                 /       //                  )) )))  ))   )               $$$$$$     ", 
+  "                     ...    .   ........                .........                 / /  /  //  //               ) ) ) ) )  )) )                        ", 
+  "                    ..     ....  ........              .......... .                // / / // / /                          )                           ", 
+  "                           . ..   ........           ........... . .                / /   // / /                                                      ", 
+  "                             .     .............    ............ .  .               / /// /  ///                 1111111111                           ", 
+  "                                   .......................... . . ..  .             111111111111111111111111111111111111111                           ", 
+  "                                    ........................  . ..   . ..         / /111111/111/1/1111111111111111111111111                           ", 
+  "                                     ...................... .. . .   ..  .      /// ////1///1///1/1111111111111111111111111                           ", 
+  "                                      ....................   .  .   . .         //// /1/1/1/111/1/1111111111111111111111111                           ", 
+  "                                       .................  . . .   . .  .        / // /1/1/1/1/1/111111111111111111111111111                           ", 
+  "                                              .......... ... .    .. ...             ///1/1/1///1/1111111111111111111111111                           ", 
+  "                                                    .   .  .     .  .                              1      1                                           ", 
+  "                                                         .     . .  .                              1 111  1 1 1                                       ", 
+  "                                                         .  . . . .                                1 111 11 1 1                                       ", 
+  "                                                             ..  .                                 1 1   11 1 1                                       ", 
+  "                                                           ... ..                                     1                                               ", 
+  "                                                         . ...                                            1   1 1                                     ", 
+  "                                                          ..                                  1 11 1      1   1 1                                     ", 
+  "                                                           ..                                 1 11  1 1 1 1 1 1 1                                     ", 
+  "                                                                                               1111 1 1   1   1 1                                     ", 
+  "                                                                                               1  1 1 1   1 111 1                                     ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..f6522d2
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "12", 
+  "14", 
+  "10", 
+  "13", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                 !                                                                                                                                                      ", 
+  "                                                 !!                                                                                                                                                     ", 
+  "                                                  !!!!                                              !                                                                                                   ", 
+  "                                               !!  !!!                                              !!                                                                                                  ", 
+  "                                              ! !    !                                           !    !                                                                                                 ", 
+  "                                               ! !!! !!                                          !!! ! !!                                                                                               ", 
+  "                                              !!!! !!!                                           !!!!  !!!                            !!!                                                               ", 
+  "                                            !!!!!!! ! !                                         !!!!!!  !!                             !! !                                                             ", 
+  "                                ! !        !!!!!!!!! !                                         !!!!!  !!!                            !!! !   !!!       !                                                ", 
+  "                                  ! !    !!!!!! !!!!!                                !        !!!!!!! !!                          !     ! ! !!!!!     ! !                  !!!                          ", 
+  "                             !  !!      !!!!!!   !!!!!!       !                   !!!       !!!!!!!!!!! !                           !  !  !!!!!!!!  !! !!!                  !! !!   !                   ", 
+  "                            !!!!  ! !!!!!!!!       !!!!!   ! ! !                  !!! !    !!!!!!  !!!!!                           !   ! !!!!!!!!!! !!! ! !!             !!!   ! !!!!!                  ", 
+  "                             !!  !   !!!!!!         !!!!!  !! !!!!                !!  !!!!!!!!!     !!!!!                           !!! !!!!!  !!!!!! !!  !!!           !!!! !!!!!!!!!!                 ", 
+  "                                   !!!!!!            !!!!!! !  !                !!  !!!!!!!!!!       !!!!!!   ! !!                  !!!!!!!!     !!!!!!! ! !             !  !!  !!!!!                   ", 
+  "                              !!!!!!!!!!              !!!!!!  !  !!!            !  !   !!!!!          !!!!!!  !! !!!!       !!       !!!!!!       !!!!! !!!               !! !!!!!!!                    ", 
+  "                              ! !!!!!!                  !!!!! ! ! !              !!!!!!!!!!             !!!!!  !  !       !!!!      !!!!!          !!!!! !!!     ! !!!   !!! !!!!!!                     ", 
+  "                              !!!!!!!                    !!!!! !!!    !    !    !!! !!!!!!               !!!!!   !  !!!!  !!!  !  !!!!!!            !!!!!!!    !!   !!    ! !!!!!                       ", 
+  "                             !!!!!!                       !!!!!!! !  !!! !!      !!!!!!!                  !!!!!!!!!! ! !!!  !!!  !!!!!!               !!!!!      !!!!     !!!!!!                        ", 
+  "                            !!!!!                          !!!!!!!    !!!!!      !!!!!!                     !!!!! !!!  !!   !!! !!!!!                  !!!!!    !   !!   !!!!!!                         ", 
+  "                            !!!!                             !!!!!   ! !!  !    !!!!!                        !!!!! ! !   !!!! !!!!!!                    !!!!!!! !   !!! !!!!!                           ", 
+  "                             !                                !!!!! !! !  !!  !!!!!!                          !!!!!!!   ! !  !!!!!                       !!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                               !!!!!!!!! !!! !!!!!                             !!!!!!   ! !!!!!!!                          !!!!!!!!  !!!!!                              ", 
+  "                                                                !!!!!!!!! !!!!!!!                                !!!!!    !!!!!!                            !!!!!  !!!!!!                               ", 
+  "                                                                  !!!!!   !!!!!!                                  !!!!!! !!!!!                               !!!!!!!!!!!                                ", 
+  "                                                                   !!!!!!!!!!!                                     !!!!!!!!!!                                 !!!!!!!!                                  ", 
+  "                                                                    !!!!!!!!!                                        !!!!!!!                                    !!!!!                                   ", 
+  "                                                                     !!!!!!                                           !!!!                                       !!!                                    ", 
+  "                                           ###                         !!!                      #                      !!                                                                   $$$         ", 
+  "                                          #####                         !                     ####                                                                                          $$$         ", 
+  "                                        ########                                             #######                                         ##                                             $$$         ", 
+  "                                      ###########                                          ##########                                      #####                                   #        $$$         ", 
+  "                                     ####### ######                                       ###### #####                                    ########                               ###     $$ $$$         ", 
+  "                                   #################                                     #####    #####                                  ##########                             ##### $  $$ $$$         ", 
+  "                                  ######    ### #####                                  ######      ######                               #####  #####                           #####   $ $$ $$$         ", 
+  "                                ######           ######                               ######        ######                            ######    ######                       ######      $$ $$$         ", 
+  "                               ######      ##  #  ######                             #####            #####                          ######    # ######                     ######     $ $$ $$$         ", 
+  "                             ######     # #  ###    #####                          ######              #####                        #####       ## #####                   ##### ##   $$ $$ $$$         ", 
+  "                           #######  #   # #  ##      #####                        ##### ##              ######                     #####      ##  ########               ##########   $$  $ $$$         ", 
+  "                          ###### ###     #     #      ######                    ########## #        # #   #####                  ######  #   ###  #########             ##### ###  ##     $ $$$         ", 
+  "                           #### # # ###                 #####                  #########  #         ## #########                ##### ##   # # #     # #####          ###### ### ##      $$ $$$         ", 
+  "                    %%%    ## ###  ###                 # #####                #########    #         #   #  ######             ##### ######    ####     ######       ###### # #   #         $$$         ", 
+  "                    %%%       #  #  #                 # ########            ######   #  ##             #    #######          ###### ### # #        ##     #####     #####     ####          $$$         ", 
+  "                    %%%        ####                 ##  #########          ######     #                #   #   #####        ###### #   ##         ##       ###### ######    ### #           $$$         ", 
+  "                    %%%  %    ###                    # #     #####       ######      ###                ###     #####      #####      #             #       ###########      #              $$$         ", 
+  "                    %%% %%     #                      ### ### #####     ######      ##                   # #     ######   #####    # ##                       #######                       $$$         ", 
+  "                    %%%%%  %                           # #     ######  #####                              #        #############     #                         #####                        $$$         ", 
+  "                    %%% %                               ###     ###########                                &   &&   ############                     &          ## ### #                    $$$         ", 
+  "                    %%% % %%                             ###      #####&#&                                 &&&&&&&&  ###### ### ##                   &&        #### # #                     $$$         ", 
+  "                    %%%%%                                          ####&                                        &&    ######     #                &   &&&&        #    #                    $$$         ", 
+  "                    %%%%%%%%%                                       &&&&& &                                 && &        ## #  ##       &          &&&  &&&        # ##                $  $  $$$         ", 
+  "                    %%%%%  %       &                               & &  & &&                      &       &&& &    &      #          &&&&         & &     &     ###                   $$    $$$         ", 
+  "                    %%%%%%%%   &&&                &                   && & &                      &&&      &&    &&        ###      &     &   &&&&&&&&&& &&     ## #                  $$ $  $$$         ", 
+  "                    %%%%%%  & &&& &&&&             &                && &  &&&&&&                      &&   &&&&&&&&       ###      &&& &&&& &&&&&&&&&& &&&                            $$    $$$         ", 
+  "                    %%%      &   &&&& &&&&&&&& &&  &               &&& &&&&&&&&&&               &&& &&  &&&&&&&&&&&&              &   &  &&&&&&&&&&&&&&&& &                            $ $  $$$         ", 
+  "                    %%%         &   &&&&&&&&&&& &&   &       &      &&&&&&&&&&&&&&   & &&      &     & &&&&&&&&&&&&&&      &        & & &&&&&&&&   &&&&& &   &    &                   $$ $  $$$         ", 
+  "                    %%%       &&&&&&&&&&&&&&&&&&  & &&       &&     &&&&&&&  &&&&&& &&& &        &&&&&&&&&&&     &&&&&    &&&  &&  &&&&&&&&&&       &&&&&     &                       $$ $ $$$$         ", 
+  "                    %%%      &&& &&&&&&&    &&&&& &&&&    &&  &&  &&&&&&&      &&&&& && &&  &   &&  &&&&&&        &&&&&     &&&&& &&  &&&&&          &&&&&    &&&&                       $$$$$$         ", 
+  "                    %%%        &&&&&&         &&&& && &  &&&  &&&&&&&&&          &&&& &&  &     &  &&&&&           &&&&&&&    &      &&&&&            &&&&  &&    &&                       $$$$         ", 
+  "                    %%%       &&&&&&          &&&&&&&    &   &&&&&&&&            &&&&&&    &     &&&&&&             &&&& &     &   &&&&&&              &&&&& && & &                        $$$$         ", 
+  "                    %%%      &&&&&             &&&&  &    &&& &&&&&&              &&&&  &       &&&&&                &&&&  &  &   &&&&&                 &&&&&  & && &&                     $$$$         ", 
+  "                    %%%  %  &&&&&               &&&&     &&&& &&&&&                &&&&   &    &&&&&                 &&&&& &   & &&&&&                  &&&&& & &&&&&&&                    $$$$         ", 
+  "                    %%% %%  %&&&                 &&&&   &&& &&&&&&                  &&&& &    &&&&&                   &&&&&    &&&&&&                    &&&&&&&&&&&&&&                    $$$$         ", 
+  "                    %%% %     &                  &&&&&    &&&&&&&                   &&&&&&  &&&&&&                     &&&&&&&&&&&&&                      &&&&&&&&&&&                      $$$$         ", 
+  "                    %%% %                         &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                         &&&&&&&&&                       $$$$         ", 
+  "                    %%% % %%                       &&&&&&&&&&&                         &&&&&&&&                           &&&&&&                              &&&&                       $ $$$$         ", 
+  "                    %%% %                            &&&&&&&                             &&&&                                &                                                        $$ $$$$$$         ", 
+  "                    %%% %% %%                           &&                                                                                                                            $$ $$$$$$         ", 
+  "                    %%% %% %                                                                                                                                                          $$ $$$$$$         ", 
+  "                    %%% %% %                                                                                                                                                             $$$$$$         ", 
+  "                    %%% %%                                                                                                                                                    ''''''''$  $$$$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''   $$$$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''    $$$$$         ", 
+  "                    %%%                                                                                                                                                            '''   $$$$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''   $ $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                        ((            '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                    (((((((                           ((((((((        ''''''''''''''''''''''''' '   $$$$         ", 
+  "                    %%%  %             ((((((                           ((((((((                         ((((((((((                       ((((((((((((            ''' ''''      ''  '''    $$$$         ", 
+  "                    %%% %% %%       ((((((((((                        ((((((((((((                     (((((((((((((                     ((((((((((((((           '  '''''      '  '   '   $$$$         ", 
+  "                    %%% %         ((((((((((((((                    (((((((((((((((                  ((((((((   (((((                  ((((((( (((( ((((         '''   '       ''    '' '  $$$$         ", 
+  "                    %%% %%       (((((((   ((((((                  (((((((     ((((                 ((((((( ((((( ((((                ((((((   ( ((((((((        ' ' ' '       ''''' '''   $$$$         ", 
+  "                    %%% %% %%  (((((((     ( ((((                (((((( (       ((((               ((((((   (((( ( ((((              (((((        ((( ((((       '  '  ''        ''' '     $$$$         ", 
+  "                    %%% %%    ((((((        ( ((((              ((((((           ((((             (((((            (((((            (((((       ((    (((((                           $  $ $$$$         ", 
+  "                    %%% %% %%(((((        (    ((((            ((((( (((        ( ((((          ((((((    (((( (    ((((          ((((((    ( (   (    ((((         ((                    $$$$$         ", 
+  "                    %%% %% %(((((       (((   ( ((((          (((((   (  ((( ((  (((((         (((((     (((((((((   ((((        (((((((  (  (   ((((   ((((       ((((               $$ $ $$$$         ", 
+  "                    %%% %% %((((        ( (( (( ((((        (((((( (   ((((   (((((((((       (((((((     (    (((    ((((     (((((( (( ( (      (((    (((((   ((((((               $  $$$$$$         ", 
+  "                    %%% %%   ((            (((   (((((     ((((((            ((( ((((((((   (((((( (( ((        (    (((((((((((((((    (((        (     (((((((((((((                $$ $ $$$$         ", 
+  "                    %%%                     (  (  (((((( ((((((     (((       ((  (( (((((((((((( (   (((          (( ((((((((((((( ((  ( (                (((((((((                  $$ $ $$$$         ", 
+  "                    %%%                     ( (    ((((((((((( (   (((         ( ( (  (((((((((( ((  (((            (( ( ((((((((  (   ((                  (((((((                    $  $$$$$$         ", 
+  "                    %%%                       (     (((((((( (((  ))            (( ((  (((((((  (  (  (           ((((( ((  (((     ( (                    (( (( (                        $$$$$         ", 
+  "                    %%%%                     (        ((((  (   (()))         *** ((       (     ((((     ++ +++   (((             ( ((                     (((((((            ,           $$$$         ", 
+  "                    %%%%                                 ((((   )(())         *** (             (((       ++++++    ((((  (          (,,,,,,,,,,,         ( (  ((              ,,          $$$$         ", 
+  "                    %%%%                                  (   ((()))          ***                (                     ((((          ,,,,,,,,,,,,,,,,,,,,(,((((((,,,,       ,   ,,         $$$$         ", 
+  "                    %%%%                                  ( ((())))           ****          ---           +++ + +       (            ,,,,,,,,,,,,,,,,,,,,,,,((,(,((,,,,,,, , ,  ,,,        $$$$         ", 
+  "                    %%%% %                                 ()()))             ****          ---          ++  + +                           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,   ,,        $$$$         ", 
+  "                    %%%%%% %%                             ()))))               ***          ---      ++++++                                                    ,,,,,,,,,,,,,,,, , ,,       $$$$         ", 
+  "                    %%%%%%                               ))))))))) )           ***         ----      +++++++++++++++++++++++++++++                                       ,,,,,,,  ,,       $$$$         ", 
+  "                    %%%%%%                              ))))) ))   ))          ***         ------  - ++++++++++++++++++++++.++++++      .                                  ,,,,  ,       $$$$$$         ", 
+  "                    %%%%%%  %                         )))))) ))) ))            ***         --- --  - +++++++++++++++++..+.+...++++     .... .                               ,,,,,,    $$ $$$$$$         ", 
+  "                    %%%%%%                           )))))) )   ) )            *****  **   ------ -      ....         .    ...          ...  .                               ,,,,     $$ $ $$$$         ", 
+  "                    %%%%%% %%                       )))))     ))))             ******  *   --- - -   ........              . ..      .     . ..                              ,,,,     $$ $$$$$$         ", 
+  "                    %%%%%% %%                     ))))))    ))) )               *** *      -----  -  . ..            ..........       ... . ...                               ,,,,    $$ $ $$$$         ", 
+  "                    %%%%%% %%                    ))))))      )                  ****  **   ---   -    .   .           .........       .. ..  .                                 ,,,    $  $$$$$$         ", 
+  "                    %%%%%%                      )))))                           *** *  ** ----- --     . .  .     .................................                            ,,,       $$$$$$         ", 
+  "                    %%%%                      ))))))                            ***  * ** ---------   .............................................                            ,,,       $$$$$$         ", 
+  "                    %%%%                     ))))))))             /             ****** ** ---   ---   .............................................                            ,,,    $$ $ $$$$         ", 
+  "                    %%%%                    ))))))))) )           /// //        ********* ---          .................                                                       ,,,       $$$$$$         ", 
+  "                    %%%%                  )))))))))) )             / ///         *** **   ---          .....                                                                   ,,,         $$$$         ", 
+  "                    %%%%                 )))))) )     )        ///   /           ***      -----       ....                                                                     ,,,         $$$$         ", 
+  "                    %%%%                )))))   )  ))          / /    /          ***     ------ -     ...                                                                      ,,,         $$$$         ", 
+  "                    %%%%              ))))))   )         ////////                ***     ---- --      ...                                                                      ,,,         $$$$         ", 
+  "                    %%%% %           ))))))     )))     ///////////////          ***     ----        ....                                                                      ,,,         $$$$         ", 
+  "                    %%%% % %%       )))))      )))     //////////////////////    ****    --- --      ....                                                                      ,,,         $$$$         ", 
+  "                    %%%%%%        ))))))             //////    //////////////    ****    ----- -     ...                                                                       ,,,         $$$$         ", 
+  "                    %%%%%%       ))))))             //////           /////////  / //*    ---   --    ...                                                                      ,,,,       $$$$$$         ", 
+  "                    %%%%%%  %   ))))) )            /////                   //// //*/*    ---   -     ...                                                                      ,,,,    $  $$$$$$         ", 
+  "                    %%%% %    )))))))))))        //////                    ////////*//  ----  ---    ...                      00000000000000000000000000000                   ,,,,     $ $$$$$$         ", 
+  "                    %%%%%%%%%)))))))    ))      //////                      //// //*//  ----    .    ...                      00000000000000000000000000000                   ,,,        $ $$$$         ", 
+  "                    %%%%%% %%)))) ))) ))       /////                         /////// // ---      .   ...                      00000000000000000000000000000                   ,,,     $  $$$$$$         ", 
+  "                    %%%%%%%%%))) )   ) )     //////                           ////  /  /---    ..    ...                                  00   0                              ,,,     $$ $$$$$$         ", 
+  "                    %%%%%%  )))    ))))     //////                            ///// //  ---    .. .  ...                                  000                                 ,,,     $$ $$$$$$         ", 
+  "                     %%%    )     ))))      ////                               //// / / ---     .  . ...                                                                     ,,,,        $$$$$$         ", 
+  "                     %%%          ) )       ///                                 /////   ---     . .  ...                                 0 000 0                             ,,,,         $$$$$         ", 
+  "                     %%%                    ///                                  ////   ---       .. ...                                000 0 00                             ,,,           $$$$         ", 
+  "                     %%%                 // ///                                  /////         .. .  ...                                                                    ,,,,           $$$$         ", 
+  "                     %%%              /  // ///                                   ////            .. ...                           ,,,,,,,,,,,,,,,,                        ,,,,            $$$$         ", 
+  "                     %%%                 //////                                    ///               ...                           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,            $$$$         ", 
+  "                     %%%             // ///////                                     ///              ...                           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,             $$$$         ", 
+  "                     %%% %%           // / ///                                     ////              ...                                    ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,              $$$$         ", 
+  "                     %%% %%%%         // / ///                                     ////              ...                                , , ,,,          ,,             ,  ,,,,            $$$$         ", 
+  "                     %%%%%  %        /// / ///                                     ////              ....                              ,  , ,,,          ,,, ,          , ,     ,          $$$$         ", 
+  "                     %%%%%           //  / ///                                     ///   /           ....                             ,,    , ,,                             ,,,       $   $$$$         ", 
+  "                     %%%%% %%           //////                                     /// /              ....                            ,,,,, , ,,       , ,,,,,,,         , ,,  ,      $  $ $$$$         ", 
+  "                     %%% % %%%            ////                                     /// / /            .....                             ,,  ,,,,       ,,,,,,,,,        ,, ,          $$   $$$$         ", 
+  "                     %%%%%%%%%            ///                                      /// / /             ....                                                                           $$ $ $$$$         ", 
+  "                     %%%%% %%             ///                                     /////  /          ... .....                                                                         $    $$$$         ", 
+  "                     %%%%%%%%             ///                                     //// / /         .. .  ......                                                                        $ $ $$$$         ", 
+  "                     %%%%%%               ///                                     /////   /         ..  ...........................................                                      $$$$$$         ", 
+  "                     %%%                  ////                                    ///   //           . ... ........................................                                   $$ $ $$$$         ", 
+  "                     %%%                   ////                                   ///   /           ..   . . ......................................                                      $$$$$$         ", 
+  "                     %%%                    ////                                  ///   //             .  .                             ..   .                                             $$$$         ", 
+  "                     %%%                    ////                                  ///                    ..             ..  ..          ... .                                              $$$$         ", 
+  "                                            /////                                ////                   .                                                                                  $$$$         ", 
+  "                                         / ///////                              /////                                ..   .....        . ... .                                             $$$$         ", 
+  "                                        /// ///////                            /////                                  .........       ... . ..                                                          ", 
+  "                                         //  //////                          //////                                                                                                                     ", 
+  "                                          //  //////                        //////                                                                                                                      ", 
+  "                                          /// // ////                      /////                                                                                                                        ", 
+  "                                            /   //////                   ////////                                                                                                                       ", 
+  "                                            / /   /////                 ////// // /                                                                                                                     ", 
+  "                                            ///    ///////////         ///// /// /                                                                                                                      ", 
+  "                                             /      ///////////////////////     / /                              11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                     ////////////////////   /  /                                 11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                         /  ////////////   /   /                                 11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                         / / ///   ////     ///                                  1111111111           1   11           1  1111                                          ", 
+  "                                                            /// /           /                                         1   111         1  11111         1 1 11 1                                         ", 
+  "                                                         //                                                            11  11         1  1                                                              ", 
+  "                                                        /// // /                                                    11    1 11       111   1111       1111 111                                          ", 
+  "                                                           //////                                                    1 1111111       11111 1 11       1 1 1 1                                           ", 
+  "                                                                                                                     111111111                                                                          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-5-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..1384fda
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "3", 
+  "11", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                        !                                                   !!!                                                                                                         ", 
+  "                                    !  ! !                                              ! ! ! !                                                  !  !                                                   ", 
+  "                                   ! ! ! !                                              ! ! ! !                                                  !!!!                                                   ", 
+  "                                    !!!!!!                                               ! ! !!                                                 !  ! !!                                                 ", 
+  "                                 !! ! !   !  !                                        ! ! !      !                                                 !!! ! !                                              ", 
+  "                              !  ! ! !     ! !                                      ! !! !      !! !                                           !    ! !!! !                                             ", 
+  "                            !  ! !  !  !  !!!                                    !  !!!!!    ! ! ! !                                       ! ! !     !! ! !                                             ", 
+  "                            ! !!! !!    !   ! !                                   !! !      ! !! ! !                                       ! !!! !!    ! ! !             !!!                            ", 
+  "                             !  !     ! ! !!! !!!!                                 !  !    !  !!!!                                         !  !!! !     ! ! !          ! ! !                            ", 
+  "                              !       !  !   !!!!!!                 !              !     !! !    !!                !                        !  !! ! !       !        ! ! !     !                        ", 
+  "                              !  ! !!! !   !!!!!!!!!               !!         !        !!  ! ! !!!!!              !!        ! !             !!! !!!! !!   !!!   !!    ! ! !! !  !                       ", 
+  "                               ! ! !   !  !!!!!!!!!!!              !! !   !  ! !     ! ! ! !  !!!!!!!             ! !!    ! !  !            !!!!! !  !!         !   !! ! !    ! !                       ", 
+  "                               !! !!!!  !!!!!!!!!!!!!!!           !  !!  ! ! ! !     !! ! ! !!!!!!!!!!!          !  !! ! ! ! !!            !!!!!!!   ! !! !    !!!!! ! !! !  !!! !                      ", 
+  "                             !!  !!   !!!!!!!!!!!!!!!!!!             ! !! ! !!!!   !!! !!  !!!!!!!!!!!!!            ! ! !!! !            !!!!!!!!!!   !  ! !  !   !!! !    ! ! !   !!                   ", 
+  "                              !!! !  !!!!!!!!!!!!!!!!!!!!       !   ! !!  ! !       !!!   !!!!!!!!!!!!!!!            ! !! ! !           !!!!!!!!!!!!! ! !  !     !  !!    !! !!! !!!!                   ", 
+  "                               !!  !!!!!!!!!!!! !!!!!!!!!!      ! !   ! !  !          ! !!!!!!!!!!!!!!!!!!!      !    !       !        !!!!!!!!!!!!!!! !  !              !  !   !!!!!!                  ", 
+  "                                  !!!!!!!!!!!!   !!!!!!!!!!!     !!    !!              !!!!!!!!!!!!!!!!!!!!!     ! !        !  !     !!!!!!!!!!!!!!!!!!  !             !! !    !!!!!!!!                 ", 
+  "                                !!!!!!!!!!!!       !!!!!!!!!!  !! ! !        !       !!!!!!!!!!!   !!!!!!!!!!   !!!! !      !! !    !!!!!!!!!!!!!!!!!!!!           ! !!  !!! !!!!!!!!!!!                ", 
+  "                               !!!!!!!!!!!          !!!!!!!!!! ! !!!       !  !     !!!!!!!!!!!     !!!!!!!!!!  !   !!   ! !  ! ! !!!!!!!!!!!  !!!!!!!!!!!       ! ! !!  !  !!!!!!!!!!!                 ", 
+  "                             !!!!!!!!!!!!            !!!!!!!!!!  !!!!!     !! !    !!!!!!!!!!!       !!!!!!!!!!!  !! !!   ! ! !  !!!!!!!!!!!     !!!!!!!!!!      ! !!! !! !!!!!!!!!!!                   ", 
+  "                            !!!!!!!!!!!               !!!!!!!!!!!  !  ! ! !  ! ! !!!!!!!!!!!           !!!!!!!!!! ! !  !! ! !!  !!!!!!!!!!        !!!!!!!!!!      ! !!   !!!!!!!!!!!                    ", 
+  "                           !!!!!!!!!!!                  !!!!!!!!!! ! ! !!!!  !  !!!!!!!!!!!             !!!!!!!!!!  ! ! !  !  !!!!!!!!!!!          !!!!!!!!!!     !  !  !!!!!!!!!!                      ", 
+  "                           !!!!!!!!!                     !!!!!!!!!!   !  ! !! !!!!!!!!!!!                !!!!!!!!!!! !!      !!!!!!!!!!!            !!!!!!!!!!!       !!!!!!!!!!!                       ", 
+  "                            !!!!!!!                       !!!!!!!!!!      !  !!!!!!!!!!!                  !!!!!!!!!!!    !  !!!!!!!!!!                !!!!!!!!!!     !!!!!!!!!!!                        ", 
+  "                             !!!!                           !!!!!!!!!!      !!!!!!!!!!                      !!!!!!!!!!    !!!!!!!!!!!                  !!!!!!!!!!   !!!!!!!!!!                          ", 
+  "                             !!!                             !!!!!!!!!!   !!!!!!!!!!!                        !!!!!!!!!!  !!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                                                              !!!!!!!!!! !!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                               !!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!                              ", 
+  "                                                                 !!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!                            !!!!!!!!!!!!!                               ", 
+  "                                            ##                    !!!!!!!!!!!!!                 #                 !!!!!!!!!!!!                               !!!!!!!!!!!                                ", 
+  "                                          #####                    !!!!!!!!!!!                ####                 !!!!!!!!!!                                  !!!!!!!                                  ", 
+  "                                        ########                    !!!!!!!!!                ######                  !!!!!!                  ##                 !!!!!                     $$$$$$        ", 
+  "                                       ##########                     !!!!!                 #########                 !!!!                  ####                 !!                       $$$$$$        ", 
+  "                                     ##############                    !!!                ############                 !!                 ########                                #       $$$$$$        ", 
+  "                                    ################                                     ##############                                  ##########                             ####      $$$$$$        ", 
+  "                                  ###################                                  ##################                               ############                           #####      $$$$$$        ", 
+  "                                 #####################                                ####################                            ################                        #######     $$$$$$        ", 
+  "                               ############  ###########                             ########### ##########                          ##################                     ##########    $$$$$$        ", 
+  "                             ############      ##########                          ###########    ##########                        ####################                   ###########    $$$$$$        ", 
+  "                            ############        ##########                        ###########      ###########                     ##########  ###########               ###########      $$$$$$        ", 
+  "                          ############           ###########                     ##########          ##########                  ###########    ###########             ###########       $$$$$$        ", 
+  "                         ###########               ##########                  ###########            ##########                ##########        ##########           ##########         $$$$$$        ", 
+  "                          #########                 ##########                ###########              ##########              ##########          ###########       ###########     $$ $ $$$$$$        ", 
+  "                           ######                    ##########             ###########                 ###########          ###########            ###########     ###########  $$       $$$$$$        ", 
+  "                  %%%%%%%  #####             &        ###########          ###########                    ##########        ###########               ##########  ###########   $   $$$$$ $$$$$$        ", 
+  "                  %%%%%%%   ##               &  &       ########## &  &&  ##########                       ##########      ##########                  #####################    $ $     $ $$$$$$        ", 
+  "                  %%%%%%%                    &&&&        ##########& &  ###########                         ###########   ##########                    ##################       $    $$$ $$$$$$        ", 
+  "                  %%%%%%%                    & & &&&      ########&#&& #&#########      &                     ############&########                       ###############      $$$$       $$$$$$        ", 
+  "                  %%%%%%%                   &  &&&&& &     ####&&&&#&#&&########       &         &&            ##########&##&###&  & &                   # #############                  $$$$$$        ", 
+  "                  %%%%%%%                        & && &      &#&&&#&#####&##&##       &&&&&   & &  &            ########&#&#&##& & & &                   #  ##########         $$$$       $$$$$$        ", 
+  "                  %%%%%%%              & &  &     && &&   &  &#&##&#######&#&#       &   &   & &&& &             ##########&###& & &&&                  # ##  #######           $$$   $$$ $$$$$$        ", 
+  "                  %%%%%%%   %%         & &&& &&    & &&&&  &&&&#&#####&#&#&#&           & && & & &&                #######&#&#& & &                  #    ##   #####            $$     $  $$$$$$        ", 
+  "                  %%%%%%% %            &  &&&  &      & &  &   & ####&&#&#&              && & & &  &&               ####&### &&  &                  #     # # # ## ##           $$$   $ $ $$$$$$        ", 
+  "                  %%%%%%%   %% %%%%%    & &&&  &&& &  & &   &     ##&##&& & &            & &   &  & &                ##&### & &                     # #    # ##  ##  #           $      $ $$$$$$        ", 
+  "                  %%%%%%% %%%    %      &  & &&&  &&   &       & & &&##&                  &&      &  &      &&&&&&&    &#&&  &     &         &&&&&&#### ##  #  # # # #         $$$$   $$$ $$$$$$        ", 
+  "                  %%%%%%% %%%    %     &&&&&&& &  &            & & &#&# &&&&&&&&&       &        & & &   &&&&&&&&&&&  &&&&       &  &     &&&&&&&&&#&&##       # # ##           $    $$$  $$$$$$        ", 
+  "                  %%%%%%%    % %%%%% &&&&&&&&&&  &&&& &      && &&&&  &&&&&&&&&&&&     &       & &  &  &&&&&&&&&&&&&& &   &&      & &    &&&&&&&&&&&&##&###      #              $      $$ $$$$$$        ", 
+  "                  %%%%%%% % %      &&&&&&&&&&&&&  &  &     & & &&   &&&&&&&&&&&&&&&    & &    & & && &&&&&&&&&&&&&&&&&  &&    & &  & & &&&&&&&&&&&&&&&&#& #   #                $$$$  $    $$$$$$        ", 
+  "                  %%%%%%%   %   %%%&&&&&&&&&&&&&& &&&  &    & & &  &&&&&&&&&&&&&&&&&  && &   &&  &  &&&&&&&&&&&&&&&&&&& & &&&  &   &  &&&&&&&&&&&&&&&&&#&######  # #                   $$ $$$$$$        ", 
+  "                  %%%%%%% %%%  %&%%&&&&&&&&&&&&&&& &  &      &&  &&&&&&&&&&&&&&&&&&&&   & &&& &    &&&&&&&&&&&&&&&&&&&&& &  &&&& &&& &&&&&&&&&&&&&&&&&&&&&&#   ### #                 $$$$ $$$$$$        ", 
+  "                  %%%%%%%     &%&%%&&&&&&&&&&&&&&&& &           &&&&&&&&&&&&&&&&&&&&&& &&&&  & & &&&&&&&&&&&&&  &&&&&&&&&&&& &  &  &&&&&&&&&&&&    &&&&&&&#& # # #                        $$$$$$        ", 
+  "                  %%%%%%%   %&&&&&&&&&&&& &&&&&&&&&&           &&&&&&&&&&&    &&&&&&&&&      &  &&&&&&&&&&&      &&&&&&&&    &    &&&&&&&&&&&       &&&&&&&& # # #  #                     $$$$$$        ", 
+  "                  %%%%%%%   %&&&&&&&&&&     &&&&&&&&&         &&&&&&&&&&       &&&&&&&&    &&  &&&&&&&&&&         &&&&&&&&    &  &&&&&&&&&&          &&&&&&&&      &&                     $$$$$$        ", 
+  "                  %%%%%%% %%%%&%%%%%&        &&&&&&&&       &&&&&&&&&&&         &&&&&&&&      &&&&&&&&&&           &&&&&&&&    &&&&&&&&&&&            &&&&&&&&   &&&&&                    $$$$$$        ", 
+  "                   %%%%%%  %&&&&&&&           &&&&&&&&     &&&&&&&&&&            &&&&&&&&   &&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&                   $$$$$$        ", 
+  "                   %%%%%% % %&&&%%%            &&&&&&&&& &&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%   % &%& %             &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%% %%%% &%%%             &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&                   &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&                    $$$$$$        ", 
+  "                   %%%%%%                        &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&&                     &&&&&&&&&&&&                       &&&&&&&&&&&                     $$$$$$        ", 
+  "                   %%%%%% %%%%                    &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                          &&&&&&&                       $$$$$$        ", 
+  "                   %%%%%%                           &&&&&&&&&                          &&&&&&&&                            &&&&                                 &                         $$$$$$        ", 
+  "                   %%%%%%                             &&&&&                                &                                                                                  ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                    (                                (((((((        '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                (((((((                          (((((((((                        (((((((((((       '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%            (((((((((                        ((((((((((((                     (((((((((((((                     (((((((((((((((     '''''''''''''''''''''''$$$$$ $$$$$$        ", 
+  "                   %%%%%%          (((((((((((((                     ((((((((((((((                   ((((((((((((((((                 ((((((((((((((((((    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%        ((((((((((((((((                  (((((((((((((((((                ((((((((((((((((((                (((((((((((((((((((                       $$$ $$$$$ $$$$$$        ", 
+  "                   %%%%%%       ((((((((((((((((((               ((((((((((((((((((((              ((((((((((((((((((((              (((((((((((((((((((((                              $ $$$$$$        ", 
+  "                   %%%%%%     (((((((((((((((((((((             (((((((((((((((((((((             ((((((((((((((((((((((            ((((((((((((  (((((((((                     $$$  $  $ $$$$$$        ", 
+  "                   %%%%%%   %%(((((((((((((((((((((            ((((((((((((   ((((((((           (((((((((((    (((((((((          (((((((((( (  (  ((((((((                          $$  $$$$$$        ", 
+  "                   %%%%%% % (((((((((((     ((((((((          (((((((((( ( (   ((((((((        (((((((((((        (((((((        ((((((((((   (  (  ((((((((       ((         $$$$$ $$$$$ $$$$$$        ", 
+  "                   %%%%%%  (%%((%%%%(        ((((((((        ((((((((((  ( ( (  ((((((((      ((((((((((          ((((((((      ((((((((((    (( ( ( ((((((((    (((((               $    $$$$$$        ", 
+  "                   %%%%%% %%%(((((((          (((((((      ((((((((((  ((  (( (  ((((((((    ((((((((((            (((((((((  (((((((((((        (( ( (((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%% %%%(((((          (((((((((((  (((((((((((  ( ( ((  (  ((((((((((((((((((((( ((           ((((((((((((((((((((         ( (( (((((((((((((((((         $$$   $$$ $$$$$$        ", 
+  "                   %%%%%%    (((%%%%       ((  (((((((((((((((((((( ( (( (( ((    ((((((((((((((((((( ( ((           (((((((((((((((((            (  (((((((((((((((((((         $    $$$ $$$$$$        ", 
+  "                   %%%%%% % % ((          (  (((((((((((((((((((((( (( ((          (((((((((((((((( ( (  (           ((((((((((((((((              (( (((((((((((((((((         $$$  $  $ $$$$$$        ", 
+  "                   %%%%%% %     %%%          (( ((((((((((((((((()((  (            ((((((((((((((( ( ( ((             ((((((((((((((                 ((   (((((((((((                 $ $ $$$$$$        ", 
+  "                   %%%%%% %%%    %          ( ((( ((((((((((((( )))(                 ((((((((((((   ( (   ((  (      (  ((((((((((   *       (( (   ( (((  (((((((((           $$$$ $     $$$$$$        ", 
+  "                   %%%%%% %%%   %%%    (      ((( (((((((((((( )))))(    ( (  +++++   (((((((((  ( ( (    (( (      ((  ((((((((     ******(***(*(((**(**(*   (((               $     $$$ $$$$$$        ", 
+  "                   %%%%%%   %          ( ( (   (( (((((((((( )))))))) ( ( ( (+(++++      ((((  ( ((    (    (       ( (( (  ((  ((   ****(*(*(((*(****(*(*****************      $     $$$ $$$$$$        ", 
+  "                   %%%%%%              ((( (  (( ( (    (   ))))))))()( ((   (+++++        ,( (( ( (    ( ( (         ( ( ( (  ( (   ****((*(((*(*((*(**********************   $$$$ $$$   $$$$$$        ", 
+  "                   %%%%%% %%%%% %%%%%  ((((     ( ( ( (    )))))))))(( ( ((((+(++++       ,,,(,,(      ( ( (      (   ( ((( (  (  (  **(*(*((****(**((***********************           $ $$$$$$        ", 
+  "                   %%%%%%  %%          (  ( (     ( ( (  )))))))))()  ((     (+((++       ,,,(,,(    -((--(------(-((---((--( ( ((   ***(((*(****(**(*(************************     $$$   $$$$$$        ", 
+  "                   %%%%%% %     %%%       (( (      ( ( )))))))))))((( (     ++(+((       ,,,,(,  ( ((-(---------((((-(-----(-(---   ****((*******((*(**************************          $$$$$$        ", 
+  "                   %%%%%% %                  ( ( (     ))))))))))    (       ((++(++      ,,,,,,( (( -(-(--------(-(-(---------(-(                   (**************************          $$$$$$        ", 
+  "                   %%%%%% %%%%% %%%        (( ((((   ())))))))))             +++++++      ,,,((,((( (-(------------((-(((---(--(-(                  (                   *********         $$$$$$        ", 
+  "                   %%%%%%                     (  ((()))))))))))               ++++++      ,,,,(,(((  --------------(-(--(((((-((--(                                      *********        $$$$$$        ", 
+  "                   %%%%%% %%%%%                 ( ()()())))))                 ++++++     ,,,,,,(( (( ----------------(-(-(--((--(-                                         *******        $$$$$$        ", 
+  "                   %%%%%%                       ()()()()))))                  +.++++     ,,,,,,,(                   -----(--(-(-(-(                                        ********       $$$$$$        ", 
+  "                   %%%%%%                       ))((())))))                   +.++.+     ,,,,,,,                                    ///////////////                         *******       $$$$$$        ", 
+  "                   %%%%%%                      )))))))())                     ....+++    ,,,,,,              //////////////////////////////////////                          ******       $$$$$$        ", 
+  "                   %%%%%%                    )))))))))))                      .++.+++    ,,,,,,         ///////////////////////////////////////////                          ******       $$$$$$        ", 
+  "                   %%%%%%                   )))))))))))                        +.+.+.    ,,,,,,        ////////////////////////////////////////////                          ******       $$$$$$        ", 
+  "                   %%%%%%                  ))))))))))  ))               . . .  +..+.. .. ,,,,,,       /////////////////////////////////////////////                          *******      $$$$$$        ", 
+  "                   %%%%%%                )))))))))))) )  )              ... .  +++.++.. ,,,,,,,       /////////////////////////////////////////////                          *******      $$$$$$        ", 
+  "                   %%%%%%               )))))))))))) ) ) )  )           ... ...+++++.  .,,,,,,,      ////////////////////////////////////////////                            *******      $$$$$$        ", 
+  "                   %%%%%%              ))))))))))   ) )   )..)          . ...  .+++++.. ,,,,,,      ////////////                                                             *******      $$$$$$        ", 
+  "                   %%%%%%            ))))))))))) )))) ) ...).)......       ..  ...++++...,,,,,      ///////                                                                  *******      $$$$$$        ", 
+  "                   %%%%%%           )))))))))))  ))  ) ...))).)............  ...+++.++. ,,,,,,      ///////                                                                  *******      $$$$$$        ", 
+  "                   %%%%%%          ))))))))))  ) ) )) ..)...).................  ++.+++. .,,,,,      //////                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%        )))))))))))))))) ) ...)).).).................. ..++++  ,,,,,,///// //////                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%       ))))))))))   )   ) ...)..)..................... ++.+.. ,,,,,,,      //////                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%      ))))))))))     )  ...)).)........................+.++.+ ,,////,///// //////                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%    )))))))))).        ..))..)))..       ..............++..++.,,/,,/  /  ////////                    00000000000000000000000000000                  ****** $$$$$ $$$$$$        ", 
+  "                   %%%%%%   ))))))))))  .      .).))..)..               ........++.++.+,,,//,  / /////////                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%  ))))))...)    .   ...))).))..                  .......++..  ,////,      ///////                    00000000000000000000000000000                  ***$$$ $$$$$ $$$$$$        ", 
+  "                   %%%%%% ))))))).))  ... . ..).).))...                    ........    ,,,,,, //// //////                     00000000000000000000000000000                 *******  $  $ $$$$$$        ", 
+  "                   %%%%%%  ))))))...     . ....)...).                       ........  ,,/////      //////                     00000000000000000000000000000                 ****$$$   $$$ $$$$$$        ", 
+  "                   %%%%%%   ))).)      . . .....))..                         .......  ,,,,,,,  /// //////                     000000000000000000                            ******        $$$$$$        ", 
+  "                   %%%%%%   )))) ...    .  ........                          ........ ,,,//,/      //////                                                                   ******  $$$$$ $$$$$$        ", 
+  "                   %%%%%%    ) ...   ............                             ........,,,//,/  /// //////                                                                   **$$$$$  $    $$$$$$        ", 
+  "                   %%%%%%          .  .   .......                              ........ ,///       //////                          ***                                     *******   $$$$ $$$$$$        ", 
+  "                   %%%%%%       ..    .   .......                              ........   //   /// //////                          *****************************   *************$$$       $$$$$$        ", 
+  "                   %%%%%%        .        ......                                ........      //   //////                          **********************************************$$   $$$ $$$$$$        ", 
+  "                   %%%%%%       ...  .... ......                                 .....    /      / ///////                         *********************************************$$$  $  $ $$$$$$        ", 
+  "                   %%%%%%     .      .  . ......                                  ......///// ///  ///////                         *********************************************      $$$ $$$$$$        ", 
+  "                   %%%%%%       ...  .... ......                                  ......      ///// //////                         ******************************************** $   $$    $$$$$$        ", 
+  "                   %%%%%%       .   ..   .......                                  ......        //  //////                         *******************************************  $      $$ $$$$$$        ", 
+  "                   %%%%%%     ..      .. .......                                  ......      //    //////                                     *       * ***************       $$$$ $$$   $$$$$$        ", 
+  "                   %%%%%%        .  ...  ......                                   ......            ///////                                    *    ** *   *                         $$$  $$$$$$        ", 
+  "                   %%%%%%            ..  ......                                  .......            ////////                                   *** * * *  * *                         $$$ $$$$$$        ", 
+  "                   %%%%%%           .... ......                                  .......             ///////                                   * * *   *  * *                       $$    $$$$$$        ", 
+  "                   %%%%%%                ......                                  ......              /////////                                   *  ** *  ***                             $$$$$$        ", 
+  "                   %%%%%%               .......                                  ......               ////////// //////////////////////////////////                                       $$$$$$        ", 
+  "                   %%%%%%               .......                                  ......                /////////////////////////////////////*/**/*/     *   * *                           $$$$$$        ", 
+  "                   %%%%%%               .......                                  ......                /////////////////////////////////////*/***/*** *** *** *                           $$$$$$        ", 
+  "                   %%%%%%               ........                                .......                 ///////////////////////////////////////**// *   **  * *                           $$$$$$        ", 
+  "                   %%%%%%                ........                               .......                   ///////////////////////////////////*/**/* **  **  * *                           $$$$$$        ", 
+  "                   %%%%%%                 ........                              ......                      //////////////////////////////////////** *  * *** *                           $$$$$$        ", 
+  "                   %%%%%%                 ........                              ...... ....                   ////////////////////////////////////                                        $$$$$$        ", 
+  "                                           ........                            ....... .  .                                /      /  /                                                    $$$$$$        ", 
+  "                                            ........                         .........  ..                               /// / /  / / /                                                   $$$$$$        ", 
+  "                                             .......                        ............     ...                           / ///  / / /                                                                 ", 
+  "                                             ........                      ............  . ..                              / / /  / ///                                                                 ", 
+  "                                              ........                   ...........   .    ...                                                                                                         ", 
+  "                                              .........                 ........... ... .                             / /  /      /   / /                                                               ", 
+  "                                             .. ...........            .......... . .. .  . ...                       / // / /   // /// /                                                               ", 
+  "                                        .   ..  .................    ...........  . . .    .                          / /// / /   /   / /11111111111111111111111111                                     ", 
+  "                                        .  .  ................................. ....      . ..                   111111/1//1/1/111/111/1111111111111111111111111111                                     ", 
+  "                                       . ..   .   ...........................   .   .     .                      111111/11/1///111/1///1/11111111111111111111111111                                     ", 
+  "                                      ....   . .............................     .   . ... .                     11111111111111111111111111111111111111111111111111                                     ", 
+  "                                        .  .  . .. ........................          . . .                       11111111111111111111111111111111111111111111111111                                     ", 
+  "                                        ...   . ... .    ................          .  .. .                       11111111111111111111111111111111111111111111111111                                     ", 
+  "                                          ..   .  .  ...       .........         . .... .                        11111111111111111111111111111111111111                                                 ", 
+  "                                         .  .    . . . .              .           . . .                                            1       1 1                                                          ", 
+  "                                         . ...     . . .                           ..                                              1 111 1 1 11 1                                                       ", 
+  "                                            ... .    ..                             .                                              1  1111 1 11                                                         ", 
+  "                                           ..  .   .                                                                               1  111  1 1111                                                       ", 
+  "                                              . ... .                                                                                                                                                   ", 
+  "                                              . . . .                                                                                       1   1 1                                                     ", 
+  "                                                . . .                                                                            1 1 1 1   1   11 1                                                     ", 
+  "                                                    .                                                                            11  11 1 1   1 1 1                                                     ", 
+  "                                                                                                                                 11 111   1   1 1                                                       ", 
+  "                                                                                                                                 11 1 111 1   111 1                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-200-200-1.0-grid-reference.json
new file mode 100644
index 0000000..3962661
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-200-200-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "12", 
+  "10", 
+  "2", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "           !!           !                         ", 
+  "          !!!!!        !!!!       !!!             ", 
+  "        !!!!!!!!     !!!!!!!     !!!!!!    !!!    ", 
+  "       !!!!!!!!!!   !!!!!!!!!   !!!!!!!!  !!!!    ", 
+  "       !!!!  !!!!! !!!!! !!!!!!!!!!!!!!!!!!!!!    ", 
+  "        !! #  !!!!!!!!! # !!!!!!!!!  !!!!!!!!     ", 
+  "         ####  !!!!!!! ###  !!!!!  ## !!!!!!      ", 
+  "        ######   !!! ######  !!! #####  !! ## $$$ ", 
+  "      ##########  !!#########   ########  ####$$$ ", 
+  "       #### ##### ############ ###############$$$ ", 
+  "    %%%##    ############ #########  ######## $$$ ", 
+  "    %%%       #######      #######    #####   $$$ ", 
+  "    %%%  &&&&  ####&&    &&&####  &&&&&###    $$$ ", 
+  "   %%%%&&&&&&&  &&#&&&  &&&&&&#  &&&&&&&      $$$ ", 
+  "  %%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&    $$$ ", 
+  "    %%%&&& &&&&&&&&&&&&&&&& &&&&&&&  &&&&&&   $$$ ", 
+  "    %%% &   &&&&&  &&&&&&&   &&&&&    &&&&& '''$$ ", 
+  "    %%%      &&&      &&       &        '''''''$$ ", 
+  "    %%%  (((     ((((     ((((    ((((( '''''''$$ ", 
+  "    %%%(((((((  ((((((  (((((((  ((((((('''''''$$ ", 
+  "    %%%(((((((((((((((((((((((((((((((((((    $$$ ", 
+  "    %%%((( (((((((( ((((((( (((((((  (((((    $$$ ", 
+  "    %%% (   ((((( (()(((((   ((((***********  $$$ ", 
+  "    %%%      (((++ ))),,,--------************ $$$ ", 
+  "    %%%     ++++++ ))),,,--------***.*********$$$ ", 
+  "    %%%    +++/+   ))),,,--.----.....     ****$$$ ", 
+  "    %%%  +++++///  ))),,,............      ***$$$ ", 
+  "    %%% +++++//////)),,,,............      ***$$$ ", 
+  "    %%%++++////////)),,,,...    0000000    ***$$$ ", 
+  "    %%%+++//////////),,,....    0000000    ***$$$$", 
+  "    %%%+++////     //,,,...     0000000*******$$$$", 
+  "    %%%   ///      ///  ....   . *************$$$ ", 
+  "    %%%   ///       /// ....  .. ************ $$$ ", 
+  "    %%%   ///       /// ............. ****    $$$ ", 
+  "    %%%  ////       ///  ............ *       $$$ ", 
+  "    %%%   ////     ////   ...........         $$$ ", 
+  "           ///// //////               111         ", 
+  "           ///////////      1111111111111         ", 
+  "            ////////        1111111111111         ", 
+  "              /////         1111111111111         ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-6-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..165d141
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-200-200-2.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "10", 
+  "14", 
+  "12", 
+  "13", 
+  "11", 
+  "2", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "            !           !                         ", 
+  "          !!!!         !!!         !!             ", 
+  "        !!!!!!!!      !!!!!!     !!!!!!           ", 
+  "       !!!!!!!!!!   !!!!!!!!!   !!!!!!!!  !!!     ", 
+  "      !!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "       #!!!##!!!!!!!!!!##!!!!!!!!!!!!!!!!!!!!!    ", 
+  "     ##########!!!!!#!####!!!!!!!!###!!!!!#!!$$$$$", 
+  "      ##########!!!!!#######!!!!!#####!!!!!###$$$$", 
+  "       ###########!###########!!########!!#####$$$", 
+  "   %%%%########################################$$$", 
+  "   %%%%&###&############&#####################$$$$", 
+  "   %%%&&#&&#&##########&&&#########&&#######$$$$$$", 
+  "   %%%&&###&&&#######&&&&&&######&&&&&##### $$$$$$", 
+  "   %%%&&&&&&&&&&####&&&&&&&&####&&&&&&&&##  ''$$$$", 
+  "   %%%%&&&&&&&&&&#&&&&&&&&&&&&#&&&&&&&&&&&& '''''$", 
+  "   %%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''$", 
+  "   %%%%%(&(&&&&&&&(&&&&&&&&(&&&&&&&((&&&'''''''''$", 
+  "   %%%((((((&&&&&(((&(&&&&(((&&&&(((((&&'''''''''$", 
+  "   %%(((((((((&((((((((((((((((((((((((('''''''''$", 
+  "   %%%((((((((((((((((((((((((((((())()('''('''''$", 
+  "   %%%%((((((((((((((((((*(*(**(((()(()((((''''''$", 
+  "   %%%%%((((((((((((+(+(((*(**(**))()())()()))$$$$", 
+  "   %%%%%%((((((((+++,(,,,(*****((----)))))())))$$$", 
+  "   %%%%%%((((((((+++,,,,,********----)))((())))$$$", 
+  "   %%%%%%..../(//+++,,,,,********----))))))))))$$$", 
+  "   %%%%%%((.//////++,,,,,*******0000000)))))))))$$", 
+  "   %%%%%%.////////++,,,,,,---***0000000  )))))))$$", 
+  "   %%%%%%/////////++,,,,,,------0000000  ))))))$$$", 
+  "   %%%%%%/////////++,,,,,,---   0000000))))))))$$$", 
+  "   %%%%%%//////////,,,,,,,---   0000000))))))))$$$", 
+  "   %%%%%%//////  ///// --,---   0000000))))))))$$$", 
+  "   %%%%%%//////   /////---------0000-))))))))))$$$", 
+  "   %%%%%%/////    /////--------------)))))))))$$$$", 
+  "   %%%%%%//////   /////--------------))))))))$$$$$", 
+  "   %%%%%%///////////////-------------1111   $$$$$$", 
+  "         /////////////// ------------1111         ", 
+  "         ///////////////   ----------1111         ", 
+  "          /////////////     1111111111111         ", 
+  "           //////////       1111111111111         ", 
+  "            ////////        1111111111111         ", 
+  "                 //                               ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-400-400-1.0-grid-reference.json
new file mode 100644
index 0000000..f8f2350
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-400-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                        !                                                                           ", 
+  "                      !!!!                      !!                                                  ", 
+  "                     !!!!!!                    !!!!                   !!!                           ", 
+  "                   !!!!!!!!!                 !!!!!!!                 !!!!!               !!         ", 
+  "                  !!!!!!!!!!!!              !!!!!!!!!!             !!!!!!!!             !!!         ", 
+  "                !!!!!!   !!!!!!            !!!!! !!!!!!           !!!!!!!!!!!          !!!!!        ", 
+  "               !!!!!!!!    !!!!!         !!!!!!!   !!!!!        !!!!!! !!!!!!!       !!!!!!         ", 
+  "              !!!!!   !     !!!!!       !!!!!! !    !!!!!!     !!!!!! !   !!!!!     !!!!!           ", 
+  "              !!!!           !!!!!!   !!!!!!         !!!!!!   !!!!!        !!!!!  !!!!!!            ", 
+  "               !               !!!!! !!!!!!            !!!!!!!!!!!          !!!!!!!!!!!             ", 
+  "                                !!!!!!!!!               !!!!!!!!!             !!!!!!!               ", 
+  "                      #          !!!!!!!        #        !!!!!!                !!!!!                ", 
+  "                    ####          !!!!!       ####         !!!        ##        !!!          $$$    ", 
+  "                   #######          !        ######         !        ####                #   $$$    ", 
+  "                 ##########                 #########               #######            ###   $$$    ", 
+  "               ####### #####              ###### #####             #########          #####  $$$    ", 
+  "              #######   ######           ######   #####          ############        #####   $$$    ", 
+  "             #####   #   ######         #####  #   ######       #####  # ######    ######    $$$    ", 
+  "         %%%%####          #####      ######        ######     #####      ######  ######     $$$    ", 
+  "         %%%% #             #####    #####            #####  ######         ##########       $$$    ", 
+  "         %%%%                ############              ###########           ########        $$$    ", 
+  "         %%%%                  #########                ########              #####          $$$    ", 
+  "       % %%%%                   ######                   ######                 ##           $$$    ", 
+  "         %%%%                    ####                      ###          &&                   $$$    ", 
+  "         %%%%      &&&&           ##&&&&&           &&&&&&           &&&&&&&                 $$$    ", 
+  "         %%%%    &&&&&&&&         &&&&&&&&         &&&&&&&&        &&&&&&&&&&                $$$    ", 
+  "         %%%%   &&&&&&&&&        &&&&&&&&&&      &&&&&&&&&&&      &&&&&&&&&&&&               $$$    ", 
+  "         %%%% &&&&&&&&&&&&     &&&&&&  &&&&&    &&&&&&   &&&&    &&&&&&   &&&&    &          $$$    ", 
+  "         %%%% &&&&&&   &&&&   &&&&&&    &&&&   &&&&&      &&&&  &&&&&      &&&&&&&&&         $$$    ", 
+  "         %%%% &&&   &   &&&&&&&&&&     &&&&&&&&&&&&       &&&&&&&&&&        &&&&&&&&         $$$    ", 
+  "         %%%%  &        &&&&&&&&&         &&&&&&&&         &&&&&&&&          &&&&&&          $$$    ", 
+  "         %%%%            &&&&&&&           &&&&&&           &&&&&&            &&&&           $$$    ", 
+  "         %%%%              &&&               &                    &                    ''''' $$$    ", 
+  "         %%%%                                                                          ''''' $$$    ", 
+  "         %%%%                                                                          ''''' $$$$   ", 
+  "         %%%%                                                                  ''''''''''''' $$$$$  ", 
+  "         %%%%       ((              (((((            (((((           (((((((   ''''''''''''' $$$    ", 
+  "         %%%%    (((((((          ((((((((         ((((((((         (((((((((  ''''''''''''' $$$    ", 
+  "         %%%%   (((((((((        ((((((((((      (((((((((((      (((((((((((                $$$    ", 
+  "         %%%%  (((((((((((      (((((( ((((     ((((((  (((((    ((((((   ((((               $$$    ", 
+  "         %%%%(((((((( (((((   ((((((    ((((   (((((     (((((  (((((      ((((  ((          $$$    ", 
+  "         %%%% (((   (  ((((( (((((      (((((((((((       ((((((((((       (((((((((         $$$    ", 
+  "         %%%%  (        ((((((((()     ( (((((((((         ((((((((         ((((((((         $$$    ", 
+  "         %%%%            ((((((())        (((((((           (((((((***        ((((           $$$    ", 
+  "          %%%             (((( ))))   ++++   ((                   (******************        $$$    ", 
+  "          %%%                ))))))   ++++   ,,,,                  ********************      $$$    ", 
+  "          %%%               ))))))     +++   ,,,  ---------------  *********************     $$$    ", 
+  "         %%%%              )))))       +++   ,,,  ---------------       *           *****    $$$    ", 
+  "        %%%%%            ))))))        +++   ,,,  ---------------       *             ****   $$$    ", 
+  "          %%%           ))))))         +++   ,,,            ..............            ****   $$$    ", 
+  "          %%%          )))))           ++++  ,,,    ......................             ***   $$$    ", 
+  "          %%%        ))))))            ++++ ,,,,   .......................             ***   $$$    ", 
+  "          %%%       ))))))              +++ ,,,,  .......................              ***   $$$    ", 
+  "          %%%      )))))    ///////     +++ ,,,   ....                                 ***   $$$    ", 
+  "          %%%    ))))))    //////////// +++ ,,,   ....                                 ***   $$$    ", 
+  "          %%%   )))))    ///////////////+++ ,,,   ...                                  ***   $$$    ", 
+  "          %%%  )))))    //////   ///////++++,,,   ...          000000000000000         ***   $$$    ", 
+  "          %%%))))))    /////         ///+++,,,,   ...          000000000000000        ****   $$$    ", 
+  "          %%% ))) ))  /////           //// ,,,,   ...          000000000000000        ****   $$$    ", 
+  "          %%% ))     /////             ////,,,,   ...                                 ***    $$$    ", 
+  "          %%%        /////             /////,,    ...             ****               ****    $$$    ", 
+  "          %%%        ///                ////      ...             ***********************    $$$    ", 
+  "          %%%        ///                 ///      ...             **********************     $$$    ", 
+  "          %%%        ///                 ///      ...             *********************      $$$$   ", 
+  "          %%%        ///                 ///      ....                                       $$$$$  ", 
+  "          %%%       ////                 ///      .....                *                     $$$    ", 
+  "          %%%       ////                 ///     .........................                   $$$    ", 
+  "          %%%       ////                ////        ......................                   $$$    ", 
+  "          %%%        ////               ////         .....................                   $$$    ", 
+  "          %%%        ////               ///            ..................                    $$$    ", 
+  "                      ////             ////                                                  $$$    ", 
+  "                       ////          //////                                                         ", 
+  "                        ////        //////                                                          ", 
+  "                        ////////// /////                      11111111111111111111                  ", 
+  "                         //////////////                 11111111111111111111111111                  ", 
+  "                          ////////////                  11111111111111111111111111                  ", 
+  "                                ////                    11111111111111111111                        ", 
+  "                                                            1                                       ", 
+  "                                                            1                                       ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-6-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..401b0cc
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-400-400-2.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "10", 
+  "12", 
+  "2", 
+  "14", 
+  "13", 
+  "3", 
+  "11", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                       !!!                      !!                                                  ", 
+  "                     !!!!!!                    !!!!                   !!!                           ", 
+  "                   !!!!!!!!!                  !!!!!!                 !!!!!                          ", 
+  "                  !!!!!!!!!!!!              !!!!!!!!!!             !!!!!!!!             !!          ", 
+  "                !!!!!!!!!!!!!!!            !!!!!!!!!!!!           !!!!!!!!!!           !!!!         ", 
+  "               !!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!         !!!!!!!!!!!!!       !!!!!!         ", 
+  "             !!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!!!!     !!!!!!!!        ", 
+  "             !!!!!!!!!! !!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!   !!!!!!!!!!       ", 
+  "              !!!!!!!!    !!!!!!!!!! !!!!!!!!!!!  !!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "              !!!!!!       !!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!         ", 
+  "               !!!!   #     !!!!!!!!!!!!!!!!!   #   !!!!!!!!!!!!!!!!!     !!!!!!!!!!!!!!!           ", 
+  "               !!   ####     !!!!!!!!!!!!!!!   ###   !!!!!!!!!!!!!!    #   !!!!!!!!!!!!!            ", 
+  "                   #######     !!!!!!!!!!!!  ######    !!!!!!!!!!!   ####   !!!!!!!!!!!             ", 
+  "                 ##########     !!!!!!!!!   #########   !!!!!!!!    ######    !!!!!!!   #   $$$$$$  ", 
+  "                ############     !!!!!!!!  ###########   !!!!!!    #########   !!!!!  ####  $$$$$$  ", 
+  "              ###############     !!!!!! ##############    !!!   ############   !!   #####  $$$$$$  ", 
+  "             ##################     !  !!###############        ##############     ######## $$$$$$  ", 
+  "            ####################      #!!#################     #################  ##########$$$$$$  ", 
+  "             ########  ##########    ########### ##########   ##############################$$$$$$  ", 
+  "        %%%%%#######    ########### ########## #  ##################### ##################  $$$$$$  ", 
+  "        %%%%%%####        ###################   ## ##################    ################   $$$$$$  ", 
+  "        %%%%%% ##          #################    ##  ################      #############     $$$$$$  ", 
+  "        %%%%%%              ##############            #############         ##########      $$$$$$  ", 
+  "        %%%%%%               ############            &&##########     &&&&&& ########       $$$$$$  ", 
+  "        %%%%%%    &&&&&&       #######&&&&         &&&&&########    &&&&&&&&&  ####         $$$$$$  ", 
+  "        %%%%%%  &&&&&&&&&&      ######&&&&&      &&&&&&&&&#####   &&&&&&&&&&&&  ##          $$$$$$  ", 
+  "        %%%%%%&&&&&&&&&&&&&    &&##&#&&&&&&&    &&&&&&&&&&&###   &&&&&&&&&&&&&&             $$$$$$  ", 
+  "    %%% %%%%%&&&&&&&&&&&&&&   &&&&&&&&&&&&&&&  &&&&&&&&&&&&&&&  &&&&&&&&&&&&&&&& &          $$$$$$  ", 
+  "    %%%%%%%%%&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&         $$$$$$  ", 
+  "       %%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&        $$$$$$  ", 
+  "        %%%%%%&&&&&&  &&&&&&&&&&&&&&& &&&&&&&&&&&&&&&   &&&&&&&&&&&&&&    &&&&&&&&&&        $$$$$$  ", 
+  "        %%%%%% &&&    &&&&&&&&&&&&&  &  &&&&&&&&&&&&     &&&&&&&&&&&&      &&&&&&&&&&       $$$$$$  ", 
+  "        %%%%%%  &      &&&&&&&&&&&  & &  &&&&&&&&&&       &&&&&&&&&&       &&&&&&&&&&  '''''''$$$$  ", 
+  "        %%%%%%          &&&&&&&&&    &&   &&&&&&&&         &&&&&&&           &&&&&&    '''''$$$$$$  ", 
+  "        %%%%%%           &&&&&&            &&&&&              &&               '''''''''''''''$$$$  ", 
+  "        %%%%%%                                        (((             (((((    '''''''''''''''$$$$  ", 
+  "        %%%%%%    ((((((           (((((((         ((((((((         (((((((((  '''''''''''''''$$$$  ", 
+  "        %%%%%%  (((((((((        ((((((((((       ((((((((((      (((((((((((( '''''''''''''''$$$$  ", 
+  "        %%%%%% (((((((((((      ((((((((((((    (((((((((((((    (((((((((((((('''''''''''''''$$$$  ", 
+  "        %%%%%((((((((((((((   (((((((((((((((  (((((((((((((((  ((((((((((((((('''''''''''''''$$$$  ", 
+  "        %%%%%((((((((((((((( (((((((((((((((( ((((((((((((((((((((((((((((((((((((          $$$$$$  ", 
+  "        %%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((         $$$$$$  ", 
+  "        %%%%%%(((((( ((((((((((((((((  (((((((((((((((  ((((((((((((((    ((((((((((        $$$$$$  ", 
+  "        %%%%%% ((((   (((((((((((((( (  ((((((((((((     (((((((((()))))))))))))(((((       $$$$$$  ", 
+  "        %%%%%%  (      (((((((((((  ( ( (**((((((((       ((((((((())))))))))))))))))))     $$$$$$  ", 
+  "        %%%%%%          (((((((((++  ((****((((((( ,,,,,,,,,,,,(((()))))))))))))))))))))    $$$$$$  ", 
+  "        %%%%%%           ((((((+++++ (*****(------ ,,,,,,,,,,,,,,  ))))))))))))))))))))))   $$$$$$  ", 
+  "        %%%%%%           +++(+++++++ ****** ------,,,,,,,,,,,,,,,  )))))))))))))))))))))))  $$$$$$  ", 
+  "        %%%%%%          +++++++++++  ******-------,,,,,,,,,,,,,,, ))))))))))))))))))))))))) $$$$$$  ", 
+  "        %%%%%%         ++++++.+++    ******-------,,,,,,,,,,,,,,,///////// )))))))))))))))) $$$$$$  ", 
+  "        %%%%%%       +++++++..++      *****-------,,,,/,,,,,,,,,//////////          ))))))) $$$$$$  ", 
+  "        %%%%%%      ++++++++++.       *****------ ////////,//,////////////           )))))) $$$$$$  ", 
+  "        %%%%%%     +++++++++....      *****------/////////////////////////           )))))))$$$$$$  ", 
+  "        %%%%%%   ++++++++++...........*****------/////////////////////////           )))))))$$$$$$  ", 
+  "        %%%%%%  ++++++++++............*****------/////////////////////////           )))))))$$$$$$  ", 
+  "        %%%%%% +++++++++..............****-------///////       000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%+++++++++................***-------//////        000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%+++++++..................***------///////        000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%++++++...................***------///////        000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%++++++.........       ......------//////         000000000000000       )))))) $$$$$$  ", 
+  "        %%%%%%+++++ ........         .....------//////         000000000000000))))))))))))) $$$$$$$ ", 
+  "        %%%%%% ++   .......           ......----//////         000000000))))))))))))))))))) $$$$$$  ", 
+  "        %%%%%%      ......            ......    ///////       /   ))))))))))))))))))))))))) $$$$$$  ", 
+  "        %%%%%%     .......             ......   ///////      //   ))))))))))))))))))))))))  $$$$$$  ", 
+  "        %%%%%%     .......             .......  ///////      //   )))))))))))))))))))))))   $$$$$$  ", 
+  "        %%%%%%     ......              .......   ///////    //    ))))))))))))))))))))))    $$$$$$  ", 
+  "        %%%%%%     ......              .......   /////////////////////////  ))))))))        $$$$$$  ", 
+  "        %%%%%%     ......              ......    /////////////////////////  )))             $$$$$$  ", 
+  "        %%%%%%     .......             ......     ////////////////////////  )               $$$$$$  ", 
+  "        %%%%%%     ........            ......      ///////////////////////  ))              $$$$$$  ", 
+  "        %%%%%%     ........           .......       //////////////////////                  $$$$$$  ", 
+  "                    ........        .........         ////////////////////                  $$$$$$  ", 
+  "                     ..........    ..........                                                       ", 
+  "                      ......................            11111111111111111111111111                  ", 
+  "                      .....................             11111111111111111111111111                  ", 
+  "                       ..................               11111111111111111111111111                  ", 
+  "                        ................                11111111111111111111111111                  ", 
+  "                         ..............                 11111111111111111111111111                  ", 
+  "                            .........                   11111111111111111111111111                  ", 
+  "                                   .                                                                ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-600-600-1.0-grid-reference.json
new file mode 100644
index 0000000..2fed4d6
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-600-600-1.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "12", 
+  "10", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                   !!                                                                                                                 ", 
+  "                                 !!!!!                                  !!                                                                            ", 
+  "                                !!!!!!!!                               !!!!!                              !!                                          ", 
+  "                              !!!!!!!!!!!                             !!!!!!!                           !!!!!                          !              ", 
+  "                             !!!!!!  !!!!!                          !!!!!!!!!!                         !!!!!!!!                       !!              ", 
+  "                           !!!!!!     !!!!!                        !!!!! !!!!!!!                     !!!!!!!!!!!                    !!!!!             ", 
+  "                          !!!!!!       !!!!!!                    !!!!!!    !!!!!!                   !!!!!!  !!!!!                  !!!!!!             ", 
+  "                        !!!!!!           !!!!!                  !!!!!!       !!!!!                 !!!!!     !!!!!!               !!!!!               ", 
+  "                      !!!!!!!             !!!!!               !!!!!!          !!!!!              !!!!!!       !!!!!!            !!!!!!                ", 
+  "                     !!!!!!!               !!!!!             !!!!!!            !!!!!!           !!!!!!          !!!!!          !!!!!!                 ", 
+  "                     !!!!! !                !!!!!!          !!!!!               !!!!!!         !!!!!             !!!!!        !!!!!                   ", 
+  "                     !!!                      !!!!!       !!!!!!                  !!!!!      !!!!!!               !!!!!!    !!!!!!                    ", 
+  "                                               !!!!!     !!!!!!                    !!!!!!   !!!!!!                 !!!!!!  !!!!!!                     ", 
+  "                                               !!!!!!  !!!!!!                       !!!!!! !!!!!!                   !!!!!!!!!!!                       ", 
+  "                                               !!!!!!!!!!!!!                          !!!!!!!!!                      !!!!!!!!!                        ", 
+  "                                                   !!!!!!!                             !!!!!!                          !!!!!                          ", 
+  "                                ##                  !!!!!               #               !!!!                             !!                           ", 
+  "                               #####                 !!!              ####                !               #                                 $$$$      ", 
+  "                             ########                                ######                              ###                                $$$$      ", 
+  "                            ##########                              #########                           #####                        ##     $$$$      ", 
+  "                          ######  ######                          ############                        #########                     ####    $$$$      ", 
+  "                         ######    ######                        ######   #####                      ###########                  ######    $$$$      ", 
+  "                       ######        #####                     ######      ######                   #####   #####                ######     $$$$      ", 
+  "                     #######          #####                   ######        ######                 #####     ######             #####       $$$$      ", 
+  "                    #######            ######                #####            #####              ######        #####          ######        $$$$      ", 
+  "                    ##### #             ######             ######              #####            #####           ######       ######         $$$$      ", 
+  "               %%%  ###                   #####           ######                ######         #####             ######    ######           $$$$      ", 
+  "               %%%                         #####        ######                    #####      ######                #####  ######            $$$$      ", 
+  "               %%%                          ######     ######                      #####    ######                 ###########              $$$$      ", 
+  "               %%%                            #####   #####                         ###### #####                  ## ########               $$$$      ", 
+  "             %%%%%                             ###########                           ###########                       #####                $$$$      ", 
+  "               %%%                            ###########                              ####### #                        ##                  $$$$      ", 
+  "               %%%                               ######                                 ####                                                $$$$      ", 
+  "               %%%                                 ###                                   ##                                                 $$$$      ", 
+  "               %%%                                                                                         &&&&&                            $$$$      ", 
+  "               %%%            &&                       &&&&&                   &&&&&&&&                 &&&&&&&&&                           $$$$      ", 
+  "               %%%         &&&&&&&&                  &&&&&&&&&               &&&&&&&&&&&               &&&&&&&&&&&                          $$$$      ", 
+  "               %%%        &&&&&&&&&&               &&&&&&&&&&&&             &&&&&&&&&&&&&            &&&&&&&&&&&&&&                         $$$$      ", 
+  "               %%%      &&&&&&&&&&&&&            &&&&&&&   &&&&&           &&&&&&    &&&&&          &&&&&&     &&&&&                        $$$$      ", 
+  "               %%%     &&&&&&     &&&&          &&&&&&      &&&&         &&&&&&      &&&&&         &&&&&    &   &&&&                        $$$$$     ", 
+  "               %%%    &&&&&        &&&&        &&&&&         &&&&       &&&&&       &&&&&&&       &&&&&          &&&&      &                $$$$      ", 
+  "               %%%   &&&&&&        &&&&&      &&&&&           &&&&     &&&&&            &&&&    &&&&&&            &&&&   &&&&               $$$$      ", 
+  "               %%%    &&& &         &&&&&   &&&&&&            &&&&&  &&&&&&             &&&&&&&&&&&&&             &&&&&&&&&&&&              $$$$      ", 
+  "               %%%    &              &&&&&&&&&&&&              &&&&&&&&&&&               &&&&&&&&&&                &&&&&&&&&                $$$$      ", 
+  "               %%%                    &&&&&&&&&&                &&&&&&&&&                 &&&&&&&&                   &&&&&&                 $$$$      ", 
+  "               %%%                     &&&&&&&&&                &&&&&&&                      &&&                        &                   $$$$      ", 
+  "               %%%                        &&   &                &                                                                           $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                                 ''''''   $$$$      ", 
+  "               %%%                                                                                                    '''''''''''''''''''   $$$$      ", 
+  "               %%%                                                                                                    '''''''''''''''''''   $$$$      ", 
+  "               %%%                                      (((                     ((((((                   (((((((      '''''''''''''''''''   $$$$      ", 
+  "               %%%          (((((((                  ((((((((                 (((((((((                (((((((((((        '                 $$$$      ", 
+  "             %%%%%        ((((((((((               (((((((((((              ((((((((((((             (((((((((((((        '                 $$$$      ", 
+  "              %%%%      (((((((((((((             (((((((((((((            (((((((  (((((           (((((( ((  ((((                         $$$$      ", 
+  "               %%%     (((((((   (((((          ((((((     (((((          (((((      (((((         (((((    (   ((((                        $$$$      ", 
+  "               %%%    (((((       ((((         ((((((       (((((       ((((((      ( (((((       (((((          ((((      (                $$$$      ", 
+  "               %%%   ((((((        ((((       (((((          ((((      (((((           ((((     ((((((           (((((    (((               $$$$      ", 
+  "               %%%   (((( (         ((((     (((((            ((((    (((((             (((((  ((((((             ((((((((((((              $$$$      ", 
+  "               %%%    ((            (((((( ((((((              (((((((((((               ((((((((((                ((((((((((               $$$$      ", 
+  "               %%%                   (((((((((((                (((((((((                 ((((((((                  (((((((                 $$$$      ", 
+  "               %%%                    (((((((((  ))             (((((((                    (((((                       ((                   $$$$      ", 
+  "               %%%                      ((((   ())))      ***   (   (                               +++++++                                 $$$$      ", 
+  "               %%%                             )))))      ****                                      +++++++++++++++++++++++++++             $$$$      ", 
+  "               %%%                           ))))))     * ****       ,,,                            +++++++++++++++++++++++++++++           $$$$      ", 
+  "               %%%                          )))))          ***      ,,,,    --                        +++++++++++++++++++++++++++++         $$$$      ", 
+  "               %%%                         )))))           ***      ,,,,    ----------------------                        +++++++++         $$$$$     ", 
+  "               %%%                       ))))))            ***      ,,,     ----------------------       +                     +++++        $$$$      ", 
+  "               %%%                      )))))              ***      ,,,     ----------------------                               ++++       $$$$      ", 
+  "               %%%                     )))))               ****     ,,,       -                                                  ++++       $$$$      ", 
+  "               %%%                   ))))))                ****     ,,,      -                                                    ++++      $$$       ", 
+  "               %%%                  )))))                  ****     ,,,               ........................                     +++      $$$       ", 
+  "               %%%                 )))))                    ***    ,,,,       ................................                     +++      $$$       ", 
+  "               %%%               ))))))                     ***    ,,,,       ................................                     +++      $$$       ", 
+  "               %%%              )))))                       ***    ,,,       ...................                                   +++      $$$       ", 
+  "               %%%            ))))))                        ***    ,,,      ....                                                   +++      $$$       ", 
+  "               %%%           ))))))        ////             ****   ,,,      ....       .                                           +++      $$$       ", 
+  "               %%%          )))))         ///////////       ****   ,,,      ...                                                    +++      $$$       ", 
+  "               %%%        ))))))         /////////////////   ***  ,,,,      ...                                                    +++      $$$       ", 
+  "             %%%%%       ))))))        ////////////////////  ***  ,,,,      ...                                                    +++      $$$       ", 
+  "               %%%      ))))) )       //////   //  ////////  ***  ,,,,     ....                                                    +++      $$$       ", 
+  "               %%%    ))))))         /////     /        //// ***  ,,,      ....               00000000000000000000000             ++++      $$$       ", 
+  "               %%%   ))))))        //////                ////***  ,,,      ....               00000000000000000000000             ++++      $$$       ", 
+  "               %%%  )))))         //////                 /////    ,,,,     ...                00000000000000000000000             +++       $$$       ", 
+  "               %%%   )))         /////                    ////    ,,,,,    ...                  00                                +++       $$$       ", 
+  "               %%%   ))          ////                      ////  ,,,,      ...                  0                                 +++       $$$       ", 
+  "               %%%               ///                        //// ,,,,      ...                                                   ++++       $$$       ", 
+  "               %%%              ////                        /////          ...                                                   +++++      $$$       ", 
+  "               %%%              ////                         ////          ...                    ++++++++++++++++++++++++++++++++++        $$$       ", 
+  "               %%%              ///                           ///          ....                   +++++++++++++++++++++++++++++++++         $$$       ", 
+  "               %%%              ///                           ////         ....                   +++++++++++++++++++++++++++++++++         $$$       ", 
+  "               %%%              ///                           ///           ...                        ++          +++++++++++              $$$       ", 
+  "               %%%              ///                           ///           ....                       ++                                   $$$       ", 
+  "               %%%              ////                          ///           ....                                                            $$$       ", 
+  "               %%%             //// /                         ///           .....                                                           $$$       ", 
+  "               %%%             ////                           ///            .....                                                          $$$ $     ", 
+  "               %%%             ///                           ////             ......                                                        $$$$      ", 
+  "               %%%             ////                          ////              ...............................                              $$$       ", 
+  "               %%%             ////                          ///                ..............................                              $$$       ", 
+  "               %%%              ////                         ///                  ............................                              $$$       ", 
+  "               %%%               ////                        ///                       .                                                    $$$       ", 
+  "                                 /////                      ////                       .                                                    $$$       ", 
+  "                                //////                     /////                                                                                      ", 
+  "                                   ////                  //////                                                                                       ", 
+  "                                    ////                //////                                                                                        ", 
+  "                                    /////              /////                                                                                          ", 
+  "                                     ////////        //////                                                                                           ", 
+  "                                      ///////////// //////                           11111111111111111111111111111111111111                           ", 
+  "                                       //////////////////                            11111111111111111111111111111111111111                           ", 
+  "                                           ////////////  /                           11111111111111111111111111111111111111                           ", 
+  "                                                 ////                                11111111111111                                                   ", 
+  "                                                                                               1                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-6-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..221811e
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-600-600-2.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                   !!                                                                                                                 ", 
+  "                                  !!!!                                   !                                                                            ", 
+  "                                !!!!!!!!                               !!!!!                              !!                                          ", 
+  "                               !!!!!!!!!!                             !!!!!!!                           !!!!!                                         ", 
+  "                             !!!!!!!!!!!!!                          !!!!!!!!!!                         !!!!!!!!                       !               ", 
+  "                           !!!!!!!!!!!!!!!!                        !!!!!!!!!!!!                       !!!!!!!!!!                     !!!              ", 
+  "                          !!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!                   !!!!!!!!!!!!!                  !!!!!              ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!                 !!!!!!!!!!!!!!!                !!!!!!!             ", 
+  "                       !!!!!!!!!!!!! !!!!!!!!!!                !!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!!!             !!!!!!!!!            ", 
+  "                     !!!!!!!!!!!! ! ! !!!!!!!!!!             !!!!!!!!!!!  !!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!          !!!!!!!!!!!            ", 
+  "                    !!!!!!!!!!!  !!    !!!!!!!!!!!          !!!!!!!!!!!    !!!!!!!!!!!         !!!!!!!!!!!  !!!!!!!!!!        !!!!!!!!!!!             ", 
+  "                    !!!!!!!!!!           !!!!!!!!!!       !!!!!!!!!!!        !!!!!!!!!!      !!!!!!!!!!!     !!!!!!!!!!     !!!!!!!!!!!               ", 
+  "                     !!!!!!!              !!!!!!!!!!     !!!!!!!!!!!          !!!!!!!!!!    !!!!!!!!!!!       !!!!!!!!!!!  !!!!!!!!!!!                ", 
+  "                     !!!!!!                !!!!!!!!!!   !!!!!!!!!!!            !!!!!!!!!!! !!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                      !!!                   !!!!!!!!!!!!!!!!!!!!!                !!!!!!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!!!                   ", 
+  "                       !                      !!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!                    ", 
+  "                                 #             !!!!!!!!!!!!!!!          #          !!!!!!!!!!!!!!!                  !!!!!!!!!!!!                      ", 
+  "                               #####            !!!!!!!!!!!!!          ###          !!!!!!!!!!!!!!                   !!!!!!!!!!                       ", 
+  "                              #######            !!!!!!!!!!!         ######           !!!!!!!!! ! !      ###          !!!!!!!!                        ", 
+  "                            ##########             !!!!!!!          #########          !!!!!!    !!     #####          !!!!!               $$$$$$     ", 
+  "                          #############             !!!!!         ############          !!!!     !     ########          !!         ##     $$$$$$     ", 
+  "                         ################            !!          ##############           !          ###########                   ####    $$$$$$     ", 
+  "                       ###################                      ################                    #############                #######   $$$$$$     ", 
+  "                      #####################                   ####################                 ################             ########   $$$$$$     ", 
+  "                    ############# ##########                 ########### ##########              ###################          ###########  $$$$$$     ", 
+  "                   ###########    ############             ###########    ##########            ########## ##########        ###########   $$$$$$     ", 
+  "                   ##########  # #   ##########           ###########      ###########         ##########   ###########     ##########     $$$$$$     ", 
+  "                    #######           ##########         ###########         ##########       ##########     ###########  ###########      $$$$$$     ", 
+  "             %%%%%% ######             ###########     ###########            ##########    ###########        #####################       $$$$$$     ", 
+  "             %%%%%%  ###                 ##########   ###########              ##########  ##########           ##################         $$$$$$     ", 
+  "             %%%%%%   #                   #####################                 ####################             ################          $$$$$$     ", 
+  "             %%%%%%                        ###################                    #################                #############           $$$$$$     ", 
+  "             %%%%%%                         #################                      ##############                   ##########             $$$$$$     ", 
+  "             %%%%%%                           #############                         ############                     ########              $$$$$$     ", 
+  "             %%%%%%                            ###########                            ###########                      ####                $$$$$$     ", 
+  "             %%%%%%                             ########                         &&&&& ########          &&&&&&&&       ##                 $$$$$$     ", 
+  "             %%%%%%          &&&&&&               #####&&&&&&&                &&&&&&&&&&####    #      &&&&&&&&&&&                         $$$$$$     ", 
+  "             %%%%%%       &&&&&&&&&&               ###&&&&&&&&&             &&&&&&&&&&&&&##     #    &&&&&&&&&&&&&&                        $$$$$$     ", 
+  "             %%%%%%     &&&&&&&&&&&&&&            &&&&&&&&&&&&&&           &&&&&&&&&&&&&&&          &&&&&&&&&&&&&&&&                       $$$$$$     ", 
+  "             %%%%%%    &&&&&&&&&&&&&&&          &&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&&                      $$$$$$     ", 
+  "             %%%%%%   &&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&&       &&&&&&&&&&&&&&&&&&&       &&&&&&&&&&&&&&&&&&&&                     $$$$$$     ", 
+  "             %%%%%%  &&&&&&&&&&&&&&&&&&&      &&&&&&&&&&&&&&&&&&&&     &&&&&&&&&&&&&&&&&&&&&    &&&&&&&&&&&   &&&&&&&&    &&               $$$$$$     ", 
+  "             %%%%%% &&&&&&&&&&&&&&&&&&&&&    &&&&&&&&&&    &&&&&&&&   &&&&&&&&&&  &  &&&&&&&&  &&&&&&&&&&      &&&&&&&&&&&&&               $$$$$$     ", 
+  "             %%%%%%  &&&&&&&   &&&&&&&&&&& &&&&&&&&&&&      &&&&&&&&&&&&&&&&&&&     & &&&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&              $$$$$$     ", 
+  "             %%%%%%   &&&&&     &&&&&&&&&&&&&&&&&&&&        &&&&&&&&&&&&&&&&&    &&&  &&&&&&&&&&&&&&&&&          &&&&&&&&&&&&&             $$$$$$     ", 
+  "             %%%%%%   &&&&    &&   &&&&&&&&&&&&&&&&          &&&&&&&&&&&&&&&           &&&&&&&&&&&&&&&           &&&&&&&&&&&&&&            $$$$$$     ", 
+  "             %%%%%%    &&           &&&&&&&&&&&&&&            &&&&&&&&&&&&&             &&&&&&&&&&&&              &&&&&&&&&&&&             $$$$$$     ", 
+  "             %%%%%%                  &&&&&&&&&&&&              &&&&&&&&&&&               &&&&&&&&&&                 &&&&&&&&               $$$$$$     ", 
+  "         %% %%%%%%%                   &&&&&&&&&                 &&&&&&&&                  &&&&&&&                     &&&&         ''''''''$$$$$$     ", 
+  "          % %%%%%%%                     &&&&&                      &&&                        &                                    ''''''''$$$$$$     ", 
+  "            %%%%%%%                                                                                                                ''''''''$$$$$$     ", 
+  "             %%%%%%%                                                                                                  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%                                                                                                  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%                                                             (((                      ((((((      '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%         ((((((                   (((((((                 (((((((((                (((((((((((    '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%      ((((((((((                ((((((((((               (((((((((((              (((((((((((((   '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%     ((((((((((((             (((((((((((((            ((((((((((((((           ((((((((((((((((  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%   (((((((((((((((          ((((((((((((((((          ((((((((((((((((         (((((((((((((((((  '''''''''''''''''''''$$$$$$     ", 
+  "             %%%%%%%  (((((((((((((((((        ((((((((((((((((((       (((((((((((((((((((       (((((((((((((((((((                      $$$$$$     ", 
+  "             %%%%%%% (((((((((((((((((((      ((((((((((((((((((((     (((((((((((((((((((((     (((((((((((  ((((((((    (                $$$$$$     ", 
+  "             %%%%%%%((((((((((((((((((((     (((((((((((  ((((((((    ((((((((((  ((((((((((   (((((((((((     (((((((( ((((               $$$$$$     ", 
+  "             %%%%%%%((((((((( (((((((((((  (((((((((((     ((((((((((((((((((((    (((((((((((((((((((((       ((((((((((((((              $$$$$$     ", 
+  "             %%%%%%% ((((((     ((((((((((((((((((((        (((((((((((((((((    ((   (((((((((((((((((         ((((((((((((((             $$$$$$     ", 
+  "             %%%%%%%  ((((   (((   ((((((((((((((((          (((((((((((((((           (((((((((((((((           ((((((((((((((            $$$$$$     ", 
+  "             %%%%%%%   ((          (((((((((((((((           ((((((((((((((            ((((((((((((((             ((((((((((((             $$$$$$     ", 
+  "             %%%%%%%                ((((((((((((())           ((((((((((((               (((((((((( *****************(((((((               $$$$$$     ", 
+  "             %%%%%%%                 (((((((((()))))     ++++++ (((((((((                 (((((((   ****************************           $$$$$$     ", 
+  "             %%%%%%%                   (((((())))))))    ++++++   (,(((                      ((     ******************************         $$$$$$     ", 
+  "             %%%%%%%                      ())))))))))    ++++++    ,,,,,,   --------------------    ********************************       $$$$$$     ", 
+  "             %%%%%%%                     )))))))))))     ++++++    ,,,,,,   ----------------------  *********************************      $$$$$$     ", 
+  "             %%%%%%%                    )))))))))))      +++++++   ,,,,,,   ----------------------  *********************************      $$$$$$     ", 
+  "             %%%%%%%                   ))))))))))        +++++++   ,,,,,,   ----------------------              **********************     $$$$$$     ", 
+  "             %%%%%%%                 )))))))))))         +++++++  ,,,,,,,   ----------------------                            *********    $$$$$$     ", 
+  "             %%%%%%%                )))))))))))           ++++++  ,,,,,,,   ----------------------           .                  *******    $$$$$$     ", 
+  "             %%%%%%%               ))))))))))             ++++++  ,,,,,,,         .....-----------............                  *******    $$$$$$     ", 
+  "             %%%%%%%             )))))))))))              ++++++  ,,,,,,     .................................                   ******    $$$$$$     ", 
+  "             %%%%%%%            )))))))))))               +++++++ ,,,,,,     .................................                   ******    $$$$$$     ", 
+  "             %%%%%%%           ))))))))))                 +++++++ ,,,,,,    ..................................                   *******   $$$$$$     ", 
+  "             %%%%%%%         )))))))))))                  +++++++ ,,,,,,   ...................................                   *******   $$$$$$  $  ", 
+  "             %%%%%%%        )))))))))))   ////////         ++++++,,,,,,,   ...................................                   *******   $$$$$$$ $$ ", 
+  "             %%%%%%%       ))))))))))    ////////////////  ++++++,,,,,,,  ..........                                             *******   $$$$$$$  $ ", 
+  "             %%%%%%%     )))))))))))    ///////////////////++++++,,,,,,   .......                                                *******   $$$$$$     ", 
+  "              %%%%%%    )))))))))))   /////////////////////++++++,,,,,,   .......                                                ******    $$$$$$     ", 
+  "              %%%%%%   ))))))))))    //////////////////////++++++,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%% )))))))))))   ////////////////////////++++++,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%%)))))))))))   ///////////   ////////////+++++,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%%)))))))))    //////////           //////++++,,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%%))))))))    //////////              /////// ,,,,,,,   ......              00000000000000000000000            ******    $$$$$$     ", 
+  "              %%%%%% ))))))    //////////               ////////,,,,,,    ......              00000000000000000000000           *******    $$$$$$     ", 
+  "              %%%%%% ))))      ////////                  ///////,,,,,,    ......              00000000000000                    *******    $$$$$$     ", 
+  "              %%%%%%  ))       ///////                    //////,,,,,,    ......                  ***********                   ******     $$$$$$     ", 
+  "              %%%%%%           //////                      ///////   ,    ......                  ************************************     $$$$$$     ", 
+  "              %%%%%%           ///////                     ///////        ......                  ************************************     $$$$$$     ", 
+  "              %%%%%%           //////                       /////         ......                  ***********************************      $$$$$$     ", 
+  "              %%%%%%          ///////                        //////       ......                  **********************************       $$$$$$     ", 
+  "              %%%%%%          //////// //                    //////       ......     .            **********************************       $$$$$$     ", 
+  "              %%%%%%          ///////                        //////       .......   ..                *****************************        $$$$$$     ", 
+  "              %%%%%%          //////                        ///////       ........  .                                      ***             $$$$$$     ", 
+  "              %%%%%%          //////                        ///////        ..........                                      *               $$$$$$     ", 
+  "              %%%%%%          //////                        //////         ...................................                             $$$$$$     ", 
+  "              %%%%%%          //////                        //////          ..................................             **              $$$$$$     ", 
+  "              %%%%%%         ////////                       //////           .................................                             $$$$$$     ", 
+  "              %%%%%%         ////////                       //////           .................................                             $$$$$$     ", 
+  "              %%%%%%          ////////                     ///////             ...............................                             $$$$$$     ", 
+  "              %%%%%%           ////////                    ///////               .............................                             $$$$$$     ", 
+  "                                ////////                  ///////                                                                          $$$$$$     ", 
+  "                                ////////                /////////                                                                                     ", 
+  "                                 ////////              //////////                                                                                     ", 
+  "                                  ////////           ///////////                                                                                      ", 
+  "                                 ///////////////    ///////////                                                  1111111111                           ", 
+  "                               // ///////////////////////////                       111111111111111111111111111111111111111                           ", 
+  "                               ///  ////////////////////////                        111111111111111111111111111111111111111                           ", 
+  "                                     //////////////////////                          11111111111111111111111111111111111111                           ", 
+  "                                      ///////////////////                            11111111111111111111111111111111111111                           ", 
+  "                                       /////////////////                             11111111111111111111111111111111111111                           ", 
+  "                                              /////////                              11111111111111111111111111111111111111                           ", 
+  "                                                    /                                                                                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..45ddfc0
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "12", 
+  "10", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                               !                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                            !!!!!!!                                             !!!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!!                                                        ", 
+  "                                         !!!!!! !!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!   !!!!!!                                     !!!!!!!!!!!                                   !!!!!!!!                                  !                   ", 
+  "                                      !!!!!!       !!!!!                                   !!!!!! !!!!!!                                 !!!!!!!!!!                               !!!!                  ", 
+  "                                     !!!!!!         !!!!!                                !!!!!!     !!!!!                               !!!!! !!!!!!!                            !!!!!!                 ", 
+  "                                   !!!!!!            !!!!!!                             !!!!!!       !!!!!!                           !!!!!!  !  !!!!!                          !!!!!                   ", 
+  "                                 !!!!!!!             !!!!!!!                           !!!!!          !!!!!!                         !!!!!!       !!!!!                       !!!!!!                    ", 
+  "                                !!!!!!               !  !!!!!                        !!!!!!             !!!!!                       !!!!!          !!!!!                     !!!!!!                     ", 
+  "                              !!!!!!!                    !!!!!                      !!!!!!               !!!!!                    !!!!!!            !!!!!!                  !!!!!                       ", 
+  "                             !!!!!!                       !!!!!!                  !!!!!!                  !!!!!!                 !!!!!!               !!!!!               !!!!!!                        ", 
+  "                            !!!!! !                        !!!!!!                !!!!!!                     !!!!!               !!!!!                  !!!!!             !!!!!!                         ", 
+  "                            !!!!  !                          !!!!!              !!!!!                        !!!!!            !!!!!!                    !!!!!!          !!!!!                           ", 
+  "                             !                                !!!!!           !!!!!!                          !!!!!!         !!!!!                       !!!!!!       !!!!!!                            ", 
+  "                                                               !!!!!!        !!!!!                             !!!!!!      !!!!!!                          !!!!!     !!!!!                              ", 
+  "                                                                !!!!!!     !!!!!!                                !!!!!    !!!!!!                            !!!!!  !!!!!!                               ", 
+  "                                                                  !!!!!   !!!!!!                                  !!!!!! !!!!!                               !!!!!!!!!!!                                ", 
+  "                                                                   !!!!!!!!!!!                                     !!!!!!!!!!                                 !!!!!!!!                                  ", 
+  "                                                                    !!!!!!!!!!!                                      !!!!!!!                                    !!!!!!                                  ", 
+  "                                                                     !!!!!!   !                                       !!!!                                       !!! !                                  ", 
+  "                                           ###                         !!!                      #                      !!                                                                   $$$         ", 
+  "                                          #####                         !                     ####                       !                                                                  $$$         ", 
+  "                                        ########                                             #######                                         ##                                             $$$         ", 
+  "                                      ###########                                          ##########                                      #####                                   #        $$$         ", 
+  "                                     ######  ######                                       ############                                    ########                               ###        $$$         ", 
+  "                                   #######     #####                                     ##### #  #####                                  ##########                             #####       $$$         ", 
+  "                                  ######        #####                                  ######      ######                               ###### #####                           #####        $$$         ", 
+  "                                ######           ######                               ######        ######                            ######  # ######                       ######         $$$         ", 
+  "                               ######             ######                             #####            #####                          ######      ######                     ######          $$$         ", 
+  "                             ######                 #####                          ######              #####                        #####          #####                   #####            $$$         ", 
+  "                           #######                  ######                        #####                 ######                     #####            ######               ######             $$$         ", 
+  "                          #######                  #  ######                    ######                    #####                  ######              ######             #####               $$$         ", 
+  "                           ####                         #####                  ######                      #####                #####                  #####          ######                $$$         ", 
+  "                    %%%    ##                            #####                #####                         ######             #####                    ######       ######                 $$$         ", 
+  "                    %%%                                   ######            ######                           ######          ######                       #####     #####                   $$$         ", 
+  "                    %%%                                    ######          ######                              #####        ######                         ###### ######                    $$$         ", 
+  "                  %%%%%                                      #####       ######                                 #####      #####                            ###########                     $$$         ", 
+  "                   %%%%                                       #####     ######                                   ######   #####                               #######                       $$$         ", 
+  "                    %%%                                        ######  ######                                      ###########                                 #####                        $$$         ", 
+  "                    %%%                                         ###########                                         ########                                    ##                          $$$         ", 
+  "                    %%%                                           ########                                           ######                                        #                        $$$         ", 
+  "                    %%%                                            #####                                              ####                                                                  $$$         ", 
+  "                    %%%                                             ###                                                 #                                                                   $$$         ", 
+  "                    %%%                                                                                                                                                                     $$$ $       ", 
+  "                    %%%                                                                                                                       &&&&&&&                                       $$$         ", 
+  "                    %%%                                                   &&&&&&                           &&&&&&&&                         &&&&&&&&&&                                      $$$         ", 
+  "                    %%%               &&&&&&&&                         &&&&&&&&&&                       &&&&&&&&&&&&                      &&&&&&&&&&&&&                                     $$$         ", 
+  "                    %%%             &&&&&&&&&&&                      &&&&&&&&&&&&&                     &&&&&&&&&&&&&&                   &&&&&&&&   &&&&&                                    $$$         ", 
+  "                    %%%           &&&&&&&&&&&&&&                    &&&&&&&  &&&&&&                  &&&&&&&     &&&&&                 &&&&&&       &&&&&                                  $$$$         ", 
+  "                    %%%          &&&&&&&    &&&&&                 &&&&&&&     &&&&&&                &&&&&&        &&&&&               &&&&&          &&&&&                                 $$$$         ", 
+  "                    %%%        &&&&&&         &&&&               &&&&&&       &  &&&&              &&&&&           &&&&&             &&&&&            &&&&                                 $$$$         ", 
+  "                    %%%       &&&&&&          &&&&&             &&&&&            &&&&&           &&&&&&&            &&&&           &&&&&&              &&&&                                $$$$         ", 
+  "                    %%%      &&&&&&            &&&&            &&&&&              &&&&          &&&&&  &             &&&&         &&&&&                 &&&&        &&                     $$$$         ", 
+  "                    %%%     &&&&& &             &&&&          &&&&&                &&&&        &&&&&                 &&&&&       &&&&&                  &&&&&     &&&&&                    $$$$         ", 
+  "                    %%%      &&&                 &&&&       &&&&&&                  &&&&      &&&&&                   &&&&&    &&&&&&                    &&&&&&&&&&&&&&                    $$$$         ", 
+  "                    %%%       &                  &&&&&    &&&&&&&                   &&&&&&  &&&&&&                     &&&&&&&&&&&&&                      &&&&&&&&&&&                      $$$$         ", 
+  "                    %%%                           &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                         &&&&&&&&&                       $$$$         ", 
+  "                    %%%                            &&&&&&&&&&&                         &&&&&&&&                           &&&&&&                              &&&&                         $$$$         ", 
+  "                    %%%                              &&&&&&&                             &&&&                              &&&                                                             $$$$         ", 
+  "                    %%%                                &&&                                                                 &                                                               $$$$         ", 
+  "                    %%%                                &                                                                                                                                   $$$$         ", 
+  "                    %%%                                                                                                                                                                    $$$$         ", 
+  "                  %%%%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                            '''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                        ((            '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                    (((((((                           ((((((((        '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                ((((((                           ((((((((                         ((((((((((                       ((((((((((((                                     $$$$         ", 
+  "                    %%%             ((((((((((                        ((((((((((((                     (((((((((((((                     ((((((((((((((              '                     $$$$         ", 
+  "                    %%%           ((((((((((((((                    (((((((((((((((                  ((((((((   (((((                  (((((((     (((((                                   $$$$ $       ", 
+  "                    %%%          (((((((   ((((((                  (((((((    (((((                 ((((((        ((((                ((((((      (  ((((                                  $$$$         ", 
+  "                    %%%        (((((((       ((((                ((((((      (  ((((               ((((((          ((((              (((((            ((((                                 $$$$         ", 
+  "                    %%%       ((((((          ((((              ((((((           ((((             (((((            (((((            (((((             (((((                                $$$$         ", 
+  "                    %%%      ((((((            ((((            (((((              ((((          ((((((((            ((((          ((((((               ((((         ((                     $$$$         ", 
+  "                    %%%     ((((((              ((((          (((((               ((((         (((((                 ((((        (((((                  ((((       ((((                    $$$$         ", 
+  "                    %%%     ((((  (             ((((        ((((((                 ((((       (((((                   ((((     ((((((                    (((((   ((((((                    $$$$         ", 
+  "                    %%%      ((                  (((((     ((((((                   (((((   ((((((                    ((((((((((((((                     (((((((((((((                     $$$$         ", 
+  "                    %%%                           (((((( ((((((                      ((((((((((((                      ((((((((((((                        (((((((((                       $$$$         ", 
+  "                    %%%                            (((((((((((                        ((((((((((                         ((((((((                           ((((((                         $$$$         ", 
+  "                    %%%                             ((((((((      ))                   (((((((                             ((((                                                            $$$$         ", 
+  "                    %%%%                              ((((       ))))         ***          (                               (                                                               $$$$         ", 
+  "                    %%%%                                        )))))         ***                                                    ++++++++++++                                          $$$$         ", 
+  "                    %%%%                                      ))))))          ***                                                    ++++++++++++++++++++++++++++++++                      $$$$         ", 
+  "                    %%%%                                     ))))))           ****          ,,,                                      +++++++++++++++++++++++++++++++++++++                 $$$$         ", 
+  "                  % %%%%                                    )))))             ****          ,,,                                           ++++++++++++++++++++++++++++++++++               $$$$         ", 
+  "                    %%%%                                  ))))))              ****          ,,,      ------                               +                    +++++++++++++++             $$$$         ", 
+  "                    %%%%                                 ))))))              *****         ,,,,      -----------------------------                                    ++ ++++++            $$$$         ", 
+  "                    %%%%                                )))))                  ***         ,,,,      -----------------------------                                    +    ++++            $$$$         ", 
+  "                    %%%%                              ))))))                   ***         ,,,       -----------------------------                                          ++++           $$$$         ", 
+  "                    %%%%                             ))))))                    ****        ,,,                                                                               ++++          $$$$         ", 
+  "                    %%%%                            )))))                      ****        ,,,            -                                                                  ++++          $$$$         ", 
+  "                    %%%%                          ))))))                        ***        ,,,                                                                                ++++         $$$$         ", 
+  "                    %%%%                         ))))))                         ***        ,,,                                                                                 +++         $$$$         ", 
+  "                    %%%%                        )))))                           ***       ,,,,                    .................................                            +++         $$$$         ", 
+  "                    %%%%                      )))))))                           ***       ,,,,           ..........................................                            +++         $$$$         ", 
+  "                    %%%%                     ))))))  )                          ****      ,,,           ...........................................                            +++         $$$$         ", 
+  "                    %%%%                    )))))                               ****      ,,,          .................   ..                                                  +++         $$$$         ", 
+  "                    %%%%                  ))))))                                 ***      ,,,          .....                .                                                  +++         $$$$         ", 
+  "                    %%%%                 ))))))                                  ***      ,,,         ....                                                                     +++         $$$$ $       ", 
+  "                    %%%%                )))))                                    ***     ,,,,         ...                                                                      +++         $$$$         ", 
+  "                    %%%%              ))))))             ////////                ***     ,,,,         ...                                                                      +++         $$$$         ", 
+  "                    %%%%             ))))))             ///////////////          ***     ,,,,        ....                                                                      +++         $$$$         ", 
+  "                    %%%%            )))))              //////////////////////    ****    ,,,         ....                                                                      +++         $$$$         ", 
+  "                    %%%%          ))))))             //////    //////////////    ****    ,,,         ...                                                                       +++         $$$$         ", 
+  "                    %%%%         ))))))             //////           /////////    ***    ,,,         ...                                                                      ++++         $$$$         ", 
+  "                    %%%%        )))))              /////                   ////   ***    ,,,         .....                                                                    ++++         $$$$         ", 
+  "                    %%%%      ))))))             //////                    /////  ***   ,,,,         .....                    00000000000000000000000000000                   ++++         $$$$         ", 
+  "                    %%%%     ))))))             //////                      ////  ***   ,,,, ,       ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%    )))))              /////                         ////       ,,,          ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%   ))))))            //////                           ////      ,,,          ...                           00                                         +++          $$$$         ", 
+  "                    %%%%    ))) )           //////                            /////     ,,,          ...                           0                                          +++          $$$$         ", 
+  "                     %%%    )               /////                              ////     ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    /// /                               ////    ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    ///                                  ////   ,,,          ...                                                                     +++           $$$$         ", 
+  "                     %%%                    ///                                  /////               ...                                                                    ++++           $$$$         ", 
+  "                     %%%                    ///                                   ////               ...                           ++++++++++++++++                        ++++            $$$$         ", 
+  "                     %%%                   ////                                    ///              ....                           ++++++++++++++++++++++++++++++++++++++++++++            $$$$         ", 
+  "                     %%%                   ////                                     ///            .....                           +++++++++++++++++++++++++++++++++++++++++++             $$$$         ", 
+  "                     %%%                 /////                                     ////              ...                                 +  +++++++++++++++++++++++++++++++++              $$$$         ", 
+  "                     %%%                  ////                                     ////              ...                                +                            +                     $$$$         ", 
+  "                     %%%                   ///                                     ////              ....                                                            +                     $$$$         ", 
+  "                     %%%                   ///                                     ///               ....                                                                                  $$$$         ", 
+  "                     %%%                  ////                                     ///                ....                                                                                 $$$$         ", 
+  "                     %%%                  ////                                     ///                .....                                                                                $$$$         ", 
+  "                     %%%                  ///                                      ///                 ....                                                                                $$$$         ", 
+  "                     %%%                  ///                                     ////                  .....                                                                              $$$$         ", 
+  "                     %%%                  ///                                     ////                   ......                                                                            $$$$         ", 
+  "                     %%%                  ///                                     ///                    ..........................................                                        $$$$$        ", 
+  "                     %%%                  ////                                    ///                      ........................................                                        $$$$         ", 
+  "                     %%%                   ////                                   ///                        ......................................                                        $$$$         ", 
+  "                     %%%                    ////                                  ///                                      ..                                                              $$$$         ", 
+  "                     %%%                    ////                                  ///                                      .                                                               $$$$         ", 
+  "                                             ////                                ////                                                                                                      $$$$         ", 
+  "                                              ////                              /////                                                                                                      $$$$         ", 
+  "                                              /////                            /////                                                                                                                    ", 
+  "                                               ////                          //////                                                                                                                     ", 
+  "                                                ////                        //////                                                                                                                      ", 
+  "                                                 ////                      //////                                                                                                                       ", 
+  "                                                 /////                   ////////                                                                                                                       ", 
+  "                                                  /////                 //////  /                                                                                                                       ", 
+  "                                                   ///////////         /////                                                                                                                            ", 
+  "                                                    ///////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                     ////////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                            ////////////                                         11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                                   ////                                          1111111111                  11                                                         ", 
+  "                                                                                                                     1                        1                                                         ", 
+  "                                                                                                                    1                                                                                   ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-6-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..efb0798
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                             !!!!!!                                              !!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!                                                         ", 
+  "                                          !!!!!!!!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!!!!!!!!!!                                     !!!!!!!!!!!                                    !!!!!!!                                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!                                 !!!!!!!!!!                                !!                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!                               !!!!!!!!!!!!!                            !!!!                   ", 
+  "                                   !!!!!!!!!!!! !!!!!!!!!!                              !!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!                          !!!!!!                  ", 
+  "                                  !!!!!!!!!!!!   !!!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!                        !!!!!!!!                 ", 
+  "                                !!!!!!!!!!!!       !!!!!!!!!!                        !!!!!!!!!!!   !!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!                ", 
+  "                               !!!!!!!!!!!!!        !!!!!!!!!!                      !!!!!!!!!!!     !!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!                 ", 
+  "                             !!!!!!!!!!!! ! !        !!!!!!!!!!                    !!!!!!!!!!!!!     !!!!!!!!!!!                 !!!!!!!!!!!  !! !!!!!!!!!!               !!!!!!!!!!!                   ", 
+  "                            !!!!!!!!!!!    !!         !!!!!!!!!!!                !!!!!!!!!!! ! !       !!!!!!!!!!               !!!!!!!!!!   !!   !!!!!!!!!!             !!!!!!!!!!!                    ", 
+  "                           !!!!!!!!!!!     !!           !!!!!!!!!!              !!!!!!!!!!!    !        !!!!!!!!!!            !!!!!!!!!!!    !     !!!!!!!!!!           !!!!!!!!!!                      ", 
+  "                           !!!!!!!!!                     !!!!!!!!!!           !!!!!!!!!!!      !         !!!!!!!!!!!         !!!!!!!!!!!            !!!!!!!!!!!       !!!!!!!!!!!                       ", 
+  "                            !!!!!!!                       !!!!!!!!!!         !!!!!!!!!!!                  !!!!!!!!!!!       !!!!!!!!!!                !!!!!!!!!!     !!!!!!!!!!!                        ", 
+  "                             !!!!                           !!!!!!!!!!      !!!!!!!!!!                      !!!!!!!!!!    !!!!!!!!!!!                  !!!!!!!!!!   !!!!!!!!!!                          ", 
+  "                             !!!                             !!!!!!!!!!   !!!!!!!!!!!                        !!!!!!!!!!  !!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                                                              !!!!!!!!!! !!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                               !!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!                              ", 
+  "                                                                 !!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!                            !!!!!!!!!!!!!                               ", 
+  "                                            ##                    !!!!!!!!!!!!!                 #                 !!!!!!!!!!!!                               !!!!!!!!!!!                                ", 
+  "                                          #####                    !!!!!!!!!!!                ####                 !!!!!!!!!!                                  !!!!!!!                                  ", 
+  "                                        ########                    !!!!!!!!!                ######                  !!!!!!                  ##                 !!!!!                     $$$$$$        ", 
+  "                                       ##########                     !!!!!                 #########                 !!!!                  ####                 !!                       $$$$$$        ", 
+  "                                     ##############                    !!!                ############                 !!                 ########                                #       $$$$$$        ", 
+  "                                    ################                                     ##############                                  ##########                             ####      $$$$$$        ", 
+  "                                  ###################                                  ##################                               ############                           #####      $$$$$$        ", 
+  "                                 #####################                                ####################                            ################                        #######     $$$$$$        ", 
+  "                               ############  ###########                             ########### ##########                          ##################                     ##########    $$$$$$        ", 
+  "                             ##############    ##########                          ###########    ##########                        ####################                   ###########    $$$$$$        ", 
+  "                            ##############      ##########                        ###########      ###########                     #######################               ###########      $$$$$$        ", 
+  "                          ############    #      ###########                     ########### #       ##########                  ########### #  ###########             ###########       $$$$$$        ", 
+  "                         ###########      #        ##########                  ###########  ###       ##########                ##########     #  ##########           ##########         $$$$$$        ", 
+  "                          #########                 ##########                ###########    ##        ##########              ##########     ##   ###########       ###########          $$$$$$        ", 
+  "                           ######                    ##########             ###########                 ###########          ###########            ###########     ###########           $$$$$$        ", 
+  "                  %%%%%%%  #####                      ###########          ###########                    ##########        ###########               ##########  ###########             $$$$$$        ", 
+  "                  %%%%%%%   ##                          ##########        ##########                       ##########      ##########                  #####################              $$$$$$        ", 
+  "                  %%%%%%%                                ##########     ###########                         ###########   ##########                    ##################                $$$$$$        ", 
+  "                  %%%%%%%                                 ###########  ###########                            #####################                       ###############                 $$$$$$        ", 
+  "                  %%%%%%%                                  #####################                               ##################                          #############                  $$$$$$        ", 
+  "                  %%%%%%%                                    ##################                                 ################                            ##########                    $$$$$$        ", 
+  "                  %%%%%%%                                     ################                                   ##############                               #######                     $$$$$$        ", 
+  "               % %%%%%%%%                                      #############                                       ###########                                 #####                      $$$$$$        ", 
+  "               % %%%%%%%%                                        ##########                                         ########                                    ##                        $$$$$$        ", 
+  "                 %%%%%%%%                                         #######                                            ######                                                               $$$$$$        ", 
+  "                  %%%%%%%                                          #####                                    &&&&&&&    ###                   &&&&&&&&&                                    $$$$$$        ", 
+  "                  %%%%%%%              &&&&&&&                      ### &&&&&&&&&                        &&&&&&&&&&&                      &&&&&&&&&&&&&                                   $$$$$$        ", 
+  "                  %%%%%%%            &&&&&&&&&&                       &&&&&&&&&&&&                     &&&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                                  $$$$$$        ", 
+  "                  %%%%%%%          &&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&&                                 $$$$$$        ", 
+  "                  %%%%%%%        &&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&                                $$$$$$        ", 
+  "                  %%%%%%%      &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&                               $$$$$$        ", 
+  "                  %%%%%%%     &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&           &&&&&&&&&&&&&  &&&&&&&&&          &&&&&&&&&&&&    &&&&&&&&&                              $$$$$$        ", 
+  "                  %%%%%%%    &&&&&&&&&&&& &&&&&&&&&&           &&&&&&&&&&&    &&&&&&&&&         &&&&&&&&&&&      &&&&&&&&         &&&&&&&&&&&       &&&&&&&&        &                     $$$$$$        ", 
+  "                  %%%%%%%   &&&&&&&&&&&&&   &&&&&&&&&         &&&&&&&&&&       &&&&&&&&        &&&&&&&&&&         &&&&&&&&       &&&&&&&&&&          &&&&&&&&      &&                     $$$$$$        ", 
+  "                  %%%%%%%  &&&&&&&&&& &      &&&&&&&&       &&&&&&&&&&&         &&&&&&&&      &&&&&&&&&&           &&&&&&&&    &&&&&&&&&&&            &&&&&&&&   &&&&&                    $$$$$$        ", 
+  "                   %%%%%%   &&&&&&&     &     &&&&&&&&     &&&&&&&&&&           &&&&&&&&&   &&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&                   $$$$$$        ", 
+  "                   %%%%%%    &&&&&     &&      &&&&&&&&& &&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%     &&&               &&&&&&&&&&&&&&&&&&&           &  &&&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%      &                &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&                   &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&                    $$$$$$        ", 
+  "                   %%%%%%                        &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&&                     &&&&&&&&&&&&&&                     &&&&&&&&&&&                     $$$$$$        ", 
+  "                   %%%%%%                         &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&&                         &&&&&&&                       $$$$$$        ", 
+  "                   %%%%%%                           &&&&&&&&&                          &&&&&&&&                            &&&&                                 &                         $$$$$$        ", 
+  "                   %%%%%%                             &&&&&                                &                                        &                                         ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$ $$     ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$$ $$    ", 
+  "                   %%%%%%                                                                                    (                                (((((((        '''''''''''''''''''''''''''  $$$$$$$$ $    ", 
+  "                   %%%%%%                                                (((((((                          (((((((((                        (((((((((((       '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%            (((((((((                        ((((((((((((                     (((((((((((((                     (((((((((((((((     '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%          (((((((((((((                     ((((((((((((((                   ((((((((((((((((                 ((((((((((((((((((    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%        ((((((((((((((((                  (((((((((((((((((                ((((((((((((((((((                (((((((((((((((((((                                 $$$$$$        ", 
+  "                   %%%%%%       ((((((((((((((((((               ((((((((((((((((((((              ((((((((((((((((((((              (((((((((((((((((((((                                $$$$$$        ", 
+  "                   %%%%%%     (((((((((((((((((((((             (((((((((((((((((((((             ((((((((((((((((((((((            ((((((((((((  (((((((((                               $$$$$$        ", 
+  "                   %%%%%%    ((((((((((((((((((((((            ((((((((((((   ((((((((           (((((((((((    (((((((((          ((((((((((       ((((((((                              $$$$$$        ", 
+  "                   %%%%%%   ((((((((((( (   ((((((((          ((((((((((       ((((((((        (((((((((((        (((((((        ((((((((((         ((((((((       ((                     $$$$$$        ", 
+  "                   %%%%%%  ((((((((((  ((    ((((((((        ((((((((((         ((((((((      ((((((((((          ((((((((      ((((((((((           ((((((((    (((((                    $$$$$$        ", 
+  "                   %%%%%%  (((((((((    (     (((((((      ((((((((((           (((((((((    ((((((((((            (((((((((  (((((((((((             (((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%   ((((((     ((     (((((((((  (((((((((((           ( (((((((((((((((((((((              ((((((((((((((((((((               ((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%    ((((              ((((((((((((((((((((           ( ((((((((((((((((((((                 (((((((((((((((((                 (((((((((((((((((                  $$$$$$        ", 
+  "                   %%%%%%     ((                ((((((((((((((((((            ((   ((((((((((((((((                  ((((((((((((((((                   (((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%                       ((((((((((((((((())                (((((((((((((((                    (((((((((((((((                     (((((((((((                     $$$$$$        ", 
+  "                   %%%%%%                         ((((((((((((( ))))                 ((((((((((((                       (((((((((( ((*                     (((((((((                      $$$$$$        ", 
+  "                   %%%%%%                          ((((((((((( ))))))         +++++   (((((((((                          (((((((  ( (**********************   (((                         $$$$$$        ", 
+  "                   %%%%%%                           (((((((( ))))))))       +++++++      ((((                                (      (*************************************                $$$$$$        ", 
+  "                   %%%%%%                               (   ))))))))))       ++++++        ,                                         ***************************************              $$$$$$        ", 
+  "                   %%%%%%                                  ))))))))))        ++++++       ,,,,,,,                                    ****************************************             $$$$$$        ", 
+  "                   %%%%%%                                )))))))))))         ++++++       ,,,,,,,    ------------------------        ******************************************           $$$$$$        ", 
+  "                   %%%%%%                               )))))))))))          ++++++       ,,,,,,     -----------------------------   *******************************************          $$$$$$        ", 
+  "                   %%%%%%                              ))))))))))            +++++++      ,,,,,,     -----------------------------             ***   ***************************          $$$$$$        ", 
+  "                   %%%%%%                            )))))))))))             +++++++      ,,,,,,     -----------------------------             * *                      *********         $$$$$$        ", 
+  "               % % %%%%%%                           )))))))))))               ++++++      ,,,,,,     -----------------------------                                       *********        $$$$$$        ", 
+  "               %% %%%%%%%                          ))))))))))                 ++++++     ,,,,,,,     -----------------------------             **                          *******        $$$$$$        ", 
+  "                 %%%%%%%%                        )))))))))))                  ++++++     ,,,,,,,                    --------------                                         ********       $$$$$$        ", 
+  "                   %%%%%%                       )))))))))))                   ++++++     ,,,,,,,                                    ...............                         *******       $$$$$$        ", 
+  "                   %%%%%%                      ))))))))))                     +++++++    ,,,,,,              ......................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                    )))))))))))                      +++++++    ,,,,,,         ...........................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                   )))))))))))                        ++++++    ,,,,,,        ............................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                  ))))))))))                          ++++++    ,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%                )))))))))))                           ++++++   ,,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%               )))))))))))                            ++++++   ,,,,,,,      ............................................                            *******      $$$$$$        ", 
+  "                   %%%%%%              ))))))))))         ////                 +++++++  ,,,,,,      ............                                                             *******      $$$$$$        ", 
+  "                   %%%%%%            )))))))))))        ////////////           +++++++  ,,,,,,      ........                                                                 *******      $$$$$$        ", 
+  "                   %%%%%%           ))))))))))         ////////////////////    +++++++  ,,,,,,      .......                                                                  *******      $$$$$$        ", 
+  "                   %%%%%%          ))))))))))         ////////////////////////  ++++++  ,,,,,,      .......  .                                                               ******       $$$$$$        ", 
+  "                   %%%%%%        )))))))))))        /////////////////////////// ++++++  ,,,,,,      ........ .                                                               ******       $$$$$$        ", 
+  "                   %%%%%%       ))))))))))         //////////////////////////// ++++++ ,,,,,,,      ......                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%      ))))))))))        ///////////////////////////////++++++ ,,,,,,,      ......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%    )))))))))))        ///////////       //////////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%   ))))))))))         //////////               ////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%  )))))))))))       ///////////                  ///////++++  ,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%% ))))))))))))      ///////////                    ////////    ,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$        ", 
+  "                   %%%%%%  ))))))) )) )    //////////                       ////////  ,,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$        ", 
+  "                   %%%%%%   )))))    ))    /////////                         ///////  ,,,,,,,      ......                     000000000000000000                            ******        $$$$$$        ", 
+  "                   %%%%%%   ))))     )     ////////                          //////// ,,,,,,,      ......                                                                   ******        $$$$$$        ", 
+  "                   %%%%%%    )            /////// /                           ////////,,,,,,       ......                                                                   ******        $$$$$$        ", 
+  "                   %%%%%%                 //////////                           //////// ,,,,       ......                          ***                                     *******        $$$$$$        ", 
+  "                   %%%%%%                 //////// /                           ////////            ......                          *****************************   ***************        $$$$$$        ", 
+  "                   %%%%%%                 //////   /                            ////////           ......                          **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                 /////             .......                         **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                  //////           .......                         *********************************************          $$$$$$        ", 
+  "                   %%%%%%                 //////                                  //////            ......                         ********************************************           $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////            ......                         *******************************************            $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////            ......                                   **          ***************                  $$$$$$ $$     ", 
+  "                   %%%%%%                //////                                   //////            .......                                  * *                                          $$$$$$$ $$    ", 
+  "                   %%%%%%                //////                                  ///////            ........                                                                              $$$$$$$$ $    ", 
+  "                   %%%%%%                //////                                  ///////           . .......                                 **                                           $$$$$$        ", 
+  "                   %%%%%%                //////                                  //////           . ..........                                                                            $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////           .............. ..................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ////////                                ///////                 ...........................................                                       $$$$$$        ", 
+  "                   %%%%%%                ////////                               ///////                   .........................................                                       $$$$$$        ", 
+  "                   %%%%%%                 ////////                              //////                      .......................................                                       $$$$$$        ", 
+  "                   %%%%%%                 ////////                              //////                        ....................................                                        $$$$$$        ", 
+  "                                           ////////                            ///////                                                                                                    $$$$$$        ", 
+  "                                            ////////                         /////////                                                                                                    $$$$$$        ", 
+  "                                             ///////                        //////////                                                                                                                  ", 
+  "                                             ////////                      //////////                                                                                                                   ", 
+  "                                              ////////                   ///////////                                                                                                                    ", 
+  "                                               ////////                 ///////////                                                                                                                     ", 
+  "                                                ///////////            //////////                                                                                                                       ", 
+  "                                                /////////////////    ///////////                                                         11111111111111111111111111                                     ", 
+  "                                                 //////////////////////////////                                  11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  ///////////////////////////                                    11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  //////////////////////////                                     11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                   ////////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                 /       ////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                 /             /////////                                         11111111111111111111111111111111111111                                                 ", 
+  "                                                                      /                                                  11                                                                             ", 
+  "                                                                                                                        1                                                                               ", 
+  "                                                                                                                        11                                                                              ", 
+  "                                                                                                                        1                                                                               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-7-200-200-1.0-grid-reference.json
new file mode 100644
index 0000000..aea58aa
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-200-200-1.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "              !!!                                 ", 
+  "            !    !!                               ", 
+  "                 !                                ", 
+  "          !   !! !                                ", 
+  "         !   !!!! ! !!                            ", 
+  "            !!   ! ! !                            ", 
+  "        !         !  !                            ", 
+  "        !  !  !!!   ! !                   !  !! ! ", 
+  "              !  ! !  !                   !! !! ! ", 
+  "       !  !!   !!     !!                  !  !! ! ", 
+  "       !  !  !!    !! !!                  !!!!! ! ", 
+  "          !  !!  ! !!                        !  ! ", 
+  "      !  !!  !!!    !!  !                         ", 
+  "      !  ! !!!! !!! !!  !                  !      ", 
+  "         !  !    !!                      !!!!     ", 
+  "       !      !  !!   !  !               ! !! !! !", 
+  "     !  !!    !    !  !                  !  ! !!  ", 
+  "     !  ! !! !        !!  !              !  ! !!  ", 
+  "     !  ! !!        !  ! !!             !! !!  ! !", 
+  "    !   !  ! !      !  !  !!            !!      ! ", 
+  "       !!    !      !  !!! !            !!     !! ", 
+  "       !!   !       !!! !  !               !   !! ", 
+  "    !  !! ! !        !  !               !  !  !   ", 
+  "    !  !! !!       !      !!!           !  !  !   ", 
+  "    !  !  !           !!!!  !           !  !  !   ", 
+  "                     !!  !             !!   ! !   ", 
+  "                    !      ! !         !  !!      ", 
+  "                       !! ! !!        !!   !   !  ", 
+  "   !  !! !             ! !!  !         !  !! !    ", 
+  "   !! !! !           !!!  !! !!        !  ! !!    ", 
+  "   !  !! !            !!! !!  !           !  ! !  ", 
+  "     !!! !             !! !!          ! !      !  ", 
+  "    !                          !        ! !!   !  ", 
+  "    !      !             !  !  !      !  ! !!     ", 
+  "    !  !                 !            !  ! !!     ", 
+  "  !!!!! !                    ! !!    !      ! !   ", 
+  "  !  ! !!                 !  !   !  !!   ! !  !   ", 
+  "  !  ! !!                     ! !!   !! !! ! !    ", 
+  "  !  !  ! !                !  !! !      !! !      ", 
+  "  ! !!  ! !                !    ! ! ! ! !   !     ", 
+  "  !  !                     !!! !   !!  !  !       ", 
+  " !!  !   !                  !    ! !   !  !       ", 
+  "    !    !                !   ! !     !           ", 
+  " !  !  !                     !   !   !!  !        ", 
+  " !  !  !                   ! !!!  !!!!            ", 
+  "       !                        !  ! !  !         ", 
+  "                                 !     !          ", 
+  "                             !  !!    !           ", 
+  "                              !!  !               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-7-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..c1f8d6e
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-200-200-2.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "         !         !!                             ", 
+  "        !            !                            ", 
+  "       !              !                           ", 
+  "       !              !                           ", 
+  "      !       !!       !                !     !   ", 
+  "      !      !  !       !                         ", 
+  "     !      !    !      !                         ", 
+  "     !     !      !      !             !     !    ", 
+  "           !      !      !             !     !    ", 
+  "    !      !       !                   !     !    ", 
+  "   !!     ! !!     !      !            !     !    ", 
+  "    !!    !         !     !!           !     !    ", 
+  "  !! !   !!!!     !!!!   ! !           !     !    ", 
+  "   !     !           !   ! !!                !    ", 
+  " !!!     !!!   !   !!!!   !                       ", 
+  "   !!  !!!     !      !     !!        !     !     ", 
+  "      !    !   !   !! !   ! !         !     !     ", 
+  "  !     !   !  !!     !!              !     !     ", 
+  "  !  !  !   ! !!! ! !        !        !     !     ", 
+  "  !  !  !   ! ! ! !!   !  !  !        !     !     ", 
+  "  !  !  !     !!!!!!   !  !                 !     ", 
+  "     !     !  !!!!      !     !                   ", 
+  "!!     !   !  !  !! !   !  !  !  !   !     !      ", 
+  " !  !!!!   ! ! !!!! !   !  !  !!     !     !     !", 
+  " !  !  ! !!!!!    !  !   !  !  !     !     !     !", 
+  " !  !  !     !!!!!!! !  !!  !  !     !     !     !", 
+  "    !  !     !!    ! !!  !  !   !    !     !     !", 
+  "    !     !   !  ! !  !   !     !                !", 
+  "!     !   !    ! !  ! !   !  !  !   !     !       ", 
+  "!     !   ! !  ! !  ! !   !  !   ! !!!!   !     ! ", 
+  "!     !   ! !  ! !  !! !   !     !!!! !   !     ! ", 
+  "! ! !!!     !    !!! ! !   !    !! !!!    !     ! ", 
+  "!     ! !  !!   !    ! !   ! !    !             ! ", 
+  " !    !     !! !!    !     !!     !!     !        ", 
+  " !   !  !        !    !     !     !!     !     !  ", 
+  "!    !      ! !  !    !   !!!!     !     !     !  ", 
+  "     ! !   !!         !      !           !     !  ", 
+  "     !     !!!!   !    !   !!!!         !         ", 
+  "     !!!   !      !    !!     !         !     !   ", 
+  "     !     !        !       !!!         !     !   ", 
+  "     !     !           !!     !               !   ", 
+  "           !         !! !      !       !          ", 
+  "                     !  !!     !       !     !    ", 
+  "    !                 !! !      !     !      !    ", 
+  "    !     !               !      !    !     !     ", 
+  "    !     !               !       !  !      !     ", 
+  "          !                !       !       !      ", 
+  "                            !              !      ", 
+  "                            !             !       ", 
+  "                             !           !        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-7-400-400-1.0-grid-reference.json
new file mode 100644
index 0000000..e1949e5
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-400-400-1.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                             !                                                                      ", 
+  "                          !     !                                                                   ", 
+  "                        !!!       !                                                                 ", 
+  "                       ! !   !     !                                                                ", 
+  "                       ! ! !   !    !                                                               ", 
+  "                     !! ! !      !  !!                                                     !!       ", 
+  "                     ! ! !      ! ! !!!                                                 !! !! !     ", 
+  "                     !  !   ! !!  !   !                                                 !! !! ! !   ", 
+  "                    ! !  ! ! !!!  !! ! !                                                !!!!! !     ", 
+  "                    !  ! ! ! !!!!   !  !                                                !  !  !     ", 
+  "                   !!     ! !  ! !!   !!!                                                  !  ! !   ", 
+  "                   !! !!!   !      ! !  !                                                       !   ", 
+  "                       ! !        !    ! !                                             !!!!!    !   ", 
+  "                  !  !!   !!    !!! ! !  !!                                              !          ", 
+  "                  !  !! !          !      !                                            ! !! !       ", 
+  "                        !!       !   !!! !!!                                           ! !! !!      ", 
+  "                 !  !               ! !!                                              !!!!! !!      ", 
+  "                 !  !  !           ! ! !!  !                                           !! !  !      ", 
+  "                !   !  !           ! ! !!                                              !  !  !!     ", 
+  "               !!  !!  !!                   !                                                !!     ", 
+  "                !  !  !!!             !  !  !                                                       ", 
+  "                   !  !!              !  !  !!                                                      ", 
+  "                 !      !                 ! !!                                        !  !          ", 
+  "              !! !! !   !              !  !  !                                        !  !! !       ", 
+  "               ! !!!!!                 !  !!! !                                       !! !! !       ", 
+  "                  !  !!!               !!! !  !                                       !  !! !       ", 
+  "                !      !                !    !                                          !!! !       ", 
+  "             !! !! !   !              !     ! !!                                       !            ", 
+  "              ! !!!!!                    !!!!  !                                       !      !     ", 
+  "             !!  !! !!                 !!!    !                                        !            ", 
+  "                 !  !!                 !   ! !! !!                                   !!!!!!!        ", 
+  "                !!  !!                    !! !                                       !  ! !! !      ", 
+  "             !  !  !                    !    !  !!                                   !  ! !!        ", 
+  "             !  !  !                    !!!  !! !!                                   !  !  ! !      ", 
+  "             !  !  !                      !! !!                                     !! !     !      ", 
+  "            !!   !                        !!  !   !                                 !!      !       ", 
+  "            !! !!  !                        !  !  !                                 !! !    !       ", 
+  "           !!  !! ! !                       !  !                                    !  !  !!!       ", 
+  "            !  !! !                            !!  !                                !  !  !         ", 
+  "            !  !  !                          !  ! !!                                !  !  !         ", 
+  "                    !                        !  !  !!                                     !         ", 
+  "           ! !      !                        !  !!! !                                  !            ", 
+  "             ! !!!                           !!! !  !                                 !!            ", 
+  "           ! !! !!                            !  !                                !!  !!   !        ", 
+  "           !  ! !!                          !      !!!                             !  !! ! !        ", 
+  "          !!  !  ! !                           !!!!  !                             !  ! !!          ", 
+  "          !   !!   !                          !!  !                                   !  ! !        ", 
+  "             !!                              !      ! !                             !      !        ", 
+  "          !  !!   !                             !! ! !!                             !!!    !        ", 
+  "          !  !! !                               ! !!  !                           ! !! !! !         ", 
+  "          !  !  !                             !!!  !! !!                          !  ! !!           ", 
+  "          !  !  !                              !!! !!  !                          !  !  !           ", 
+  "                                                !! !!                               !!  ! !         ", 
+  "         !!                                             !                         !  !   !          ", 
+  "         !! !   !!                                !  !  !                        !  !!   !          ", 
+  "        !!  !  !!!                                !  !  !!                       !  !  !!!          ", 
+  "         !  !  !!                                     ! !!                       !  !  !            ", 
+  "         !  ! !!                                   !  !  !!                            !            ", 
+  "         !  !  ! !                                 !  !!                                            ", 
+  "        !        !                                  !   ! !                     !! !!               ", 
+  "          !  !!!!                                   !! !  !                     !! !! !             ", 
+  "          !                                         !    !!!                   !!  !! !             ", 
+  "        ! !! !!                                   !   !!!! !                       !! !             ", 
+  "       !!  ! !!                                      !! !                        !     !            ", 
+  "        !  !! !!                                   ! !    !                    ! !! !!              ", 
+  "        !! !! !!                                   !   ! ! !!                 !!  ! !!              ", 
+  "           !! !!                                      !!!!  !                     !! ! !            ", 
+  "           !                                        ! !  !! !!                  !     !!            ", 
+  "                                                      !! !!  !                ! !! !!               ", 
+  "                                                       ! !!                  !!  ! !!               ", 
+  "       !  !  !                                             !  !              !!  !! ! !             ", 
+  "       !! !  !                                          !  !                 !! !!   !              ", 
+  "       !! !  !!                                             ! !!             !  !! ! !              ", 
+  "      !!  !  !!                                          !  !   !               !! !!               ", 
+  "             !!                                          !  !  !!           !                       ", 
+  "        !      !                                        !!   !  !           !  !  !                 ", 
+  "        !      !                                         !!    ! !         !!  !  !                 ", 
+  "     !! !  !                                             !  ! !   !        !  !!                    ", 
+  "      ! !! !!!!                                            !    ! !        !  !  !                  ", 
+  "      !  ! !!                                            !   !!!          ! ! !  !                  ", 
+  "      !  ! !!                                               !    ! !      !  !  !!!                 ", 
+  "     !!  !  !                                             !! !! ! !!!    !!!    !                   ", 
+  "     !   !! !                                                !   !  !!!    !! !                     ", 
+  "          ! !!                                             !  ! ! ! ! !   ! !  !                    ", 
+  "        !  !!!                                              ! !!  !!       ! !   !                  ", 
+  "         !                                                    !!   !      ! ! !!                    ", 
+  "     !                                                        !!!    !!!!!   !  !                   ", 
+  "           !                                                     !    !!!   !  !                    ", 
+  "                                                                  !        !! !                     ", 
+  "                                                                    !!   !!                         ", 
+  "                                                                           !                        ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-7-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..4c9571c
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-400-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                            !!! !                                                                   ", 
+  "                         !!     !!!  !                                                              ", 
+  "                       !!         !!!                                                               ", 
+  "                      !         !! !!                                                               ", 
+  "                     !            !! !                                                              ", 
+  "                    !          !      !                                                             ", 
+  "                    !       !! !  !    !                                                            ", 
+  "                   !       ! !!!!  !    !                                                           ", 
+  "                  !      !!!  !  !  !   !!!                                          !     !     !  ", 
+  "                  !      !! !    !!  !  !!                                           !     !     !  ", 
+  "                 !      ! !  !    !   !!  !                                          !     !     !  ", 
+  "                 !      !     !    ! !!   !                                          !     !     !  ", 
+  "                !      !       !    !  !   !                                         !     !     !  ", 
+  "                !      !     !  ! !!!      !                                         !     !     !  ", 
+  "                !     !      !!  !   !  !   !                                             !!!!   !  ", 
+  "               !      !     !  ! !   !      !!!                                     !!    !         ", 
+  "               !     !      !  !  !   !  ! !!!                                      ! !   !!!!      ", 
+  "               !     !     !    !!!   !      !!                                    !! !   !     !!!!", 
+  "              !     !!     !   !!  !   !    !                                       !     !!    !   ", 
+  "             !!!    !  !   ! !!!!! !   !!!  ! !!                                  !!!     !    !!!!!", 
+  "              !     !     !!!  ! !  !  !!   !!!                                     ! ! !!!!    !   ", 
+  "             !!!   !! !   !! !    !     !!     !                                    !  !  !    !!!!!", 
+  "           ! !     !!     !!!!    !   !! !     !                                       !  !     !   ", 
+  "            !!     ! !   !!  !           !                                             !     !      ", 
+  "                 !!!     !!!! !    !   !! !     !                                  !         !      ", 
+  "            !   !    !  !!  ! !    !!     !     !                                  !     !   ! !    ", 
+  "            !     !   !   ! !    !! !   !!!      !                                 !     !   ! !    ", 
+  "            !  !  !   ! !           !!     !     !                               ! !  !  !   ! !    ", 
+  "               !  !     !    !   !! !!     !     !                                 !!!!!!!     !    ", 
+  "           !   !        !           !!     !      !                                !  !  ! !! !!!   ", 
+  "           !     !   !      !     !!!!      !     !                                   !  !     !   !", 
+  "          !!!!   !   ! !    !         !     !                                         !     !      !", 
+  "           !   !!!!    !    !         !            !                              !     !   !      !", 
+  "              !  !  ! !!              !      !     !                              !     !   ! !    !", 
+  "          !     !   !    !!!           !     !!    !!                             !  !  !   ! !    !", 
+  "          !     !   ! !    !           !   !! !   ! !                             !  !  !   ! !    !", 
+  "          !  !  !   ! !    !                  !   ! !!                           !!!  !!!     !     ", 
+  "          !  !  !     !    !            !   ! !!   !                                    ! !  !!     ", 
+  "             !  !     !                 !!    !!     !!                          !!!             !  ", 
+  "        !!!!   !   !      !          !! !!   ! !   ! !                           ! !   ! !!    !    ", 
+  "         !    !!!    !    !             !!     !!                               !!!!   !     !! !   ", 
+  "        !!!!   !     !    !           !! !   !        !                          !     !!!  !!! !   ", 
+  "         !     !!!   !  !                !!     !  !  !                          !     !     ! !!   ", 
+  "        !!!   !!     !!                !  ! !   !  !                             !     !!!   !      ", 
+  "              !!!    !  !                 !  !   !     !                                     !      ", 
+  "        !     !     !!  !             !    ! !   !  !  !  !                     !                   ", 
+  "        !     !!    ! !!              !    ! !   !  !  !!                       !     !     !       ", 
+  "        !     !     !                 !    !  !   !  !  !                       !     !     !       ", 
+  "        !     !     !                  !    ! !  !!  !  !                       !     !     !       ", 
+  "              !     !                  !    ! !!  !  !   !                      !     !     !       ", 
+  "       !                               !   !!  !   !     !                     !     ! !!   !       ", 
+  "       !     !     !                    !!   ! !   !  !  !                     ! !   !              ", 
+  "       !     !     !                         ! !   !  !   !                   !! !   !!!   !        ", 
+  "       !     !     !                    !    !  !   !     ! !                  !!    !     !!!!     ", 
+  "       !     !     !                     !    ! !   !    !!                  !!!     !!!   !  !     ", 
+  "       !     !     !                     !    ! !   ! !    !!                   !  ! !    !!!!!     ", 
+  "            !!!!                         !    !     !!    !!                  !      ! !   !        ", 
+  "     !!!    !                             !    !     !   ! !                  !     !     !!!       ", 
+  "      ! !   !!!   !                       !  !!!   !!!!   !!!                 !  !  !   ! !         ", 
+  "     !! !   !     !!!!                         !!     !     !                 !  !  !   ! !    !    ", 
+  "      !     !!    !  !                       !!!!   !!!     !                    !  !     !         ", 
+  "    !!!     !    !!!!!                       !  !     !!     !               !   !     !  !         ", 
+  "          !!!     !                          ! !!    !!!     !             !!!     !   !      !     ", 
+  "         !       !!! !                           !     !     !               !!!!! !   ! !    !     ", 
+  "     !     !   !                                 !     !      !              !     !!!!  !    !     ", 
+  "     !     !   ! !    !                          !      !     !                 !  !    !!!!        ", 
+  "     !     !   ! !    !                           !     !                   !         !  !   !      ", 
+  "     !  !  !   ! !    !                           !            !            !  !  !   ! !    !      ", 
+  "     !  !  !     !                                       !     !           !!  !  !   ! !    !      ", 
+  "  !! !  !  !     !                                 !     !     !!!           ! !  !     !    !      ", 
+  "      !!!!!!     !                                 !      !   ! !        !!! !       !  !           ", 
+  "        !     ! !!!                                 !    !!    !!!         !!!  !!   ! !    !       ", 
+  "    !     !   ! !    !                              !     !!   ! ! !     !!!     !!!   !    !       ", 
+  "    !     !   ! !    !                              !    !!!     !!       !!!    !    !!!   !       ", 
+  "    !  !  !   ! !    !                               !     !!   ! !      !! !   !!!    !  !         ", 
+  "    !  !  !   ! !    !                               !    !!!     !       !!!!  !     !!!           ", 
+  "    !  !  !     !                                     !     !!!!   !     !   ! !!!!   !  !          ", 
+  "    !  !  !     !                                  !!!!     !      !     !     !     !!! !          ", 
+  "   !!!  !!      !   !                              !  !      !  !   !    !  !  !!!   !   !          ", 
+  "            !  !!!                                 !!! !            !  !!   !  !     !              ", 
+  "   !!!   !     !   !                                   !! !   !  !   !! !     !      !              ", 
+  "   ! !   ! !   !!!                                    ! ! !   !     !! !      !     !               ", 
+  "  !!!!   !     !  !                                     !  !   !  !!  !!      !     !               ", 
+  "   !     !!!  !!! !                                      ! !    !!!          !      !               ", 
+  "   !     !     ! !!                                 !    !  !   !            !     !                ", 
+  "   !     !!!   !                                          ! ! !! !          !      !                ", 
+  "         !     !                                     !    !  !    !       !!!     !                 ", 
+  "                                                           !! !   !!     !!! !    !                 ", 
+  "  !     !                                             !   ! !      !!   ! !!     !                  ", 
+  "        !     !                                         !!  !  !     !! !!       !                  ", 
+  "              !                                        !     !        !   !     !                   ", 
+  "                                                        !     !  !    !        !                    ", 
+  "                                                         !     !              !                     ", 
+  "                                                          !     !!           !                      ", 
+  "                                                          !     !!!         !                       ", 
+  "                                                           !      !!!!  !!!                         ", 
+  "                                                            !    !  !                               ", 
+  "                                                                 ! !                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-7-600-600-1.0-grid-reference.json
new file mode 100644
index 0000000..90581f8
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-600-600-1.0-grid-reference.json
@@ -0,0 +1,159 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                        !!    !!!                                                                                                     ", 
+  "                                       !       !!!                                                                                                    ", 
+  "                                      !         ! !                                                                                                   ", 
+  "                                    !    !!   !  ! !                                                                                                  ", 
+  "                                   ! !  !     ! ! !!!                                                                                 !  !  !         ", 
+  "                                   !   !      !  !!! !                                                                                !! !  !         ", 
+  "                                  !  !!   !!!! ! !! ! !!                                                                              !! !  !!        ", 
+  "                                     !   !! !  !!  !  !                                                                              !!  !  !!        ", 
+  "                                !! !!   !!! !  !!!     !!                                                                                   !!        ", 
+  "                                ! ! ! !!     !!   ! !  !!                                                                              !      !       ", 
+  "                                !  !!!        !  !  !!                                                                                 !      !       ", 
+  "                               ! ! !  !  !     !  !  !!  !                                                                          !! !  !           ", 
+  "                               !  ! !   !         !! !!   !                                                                          ! !! !!!!        ", 
+  "                              !! !  !!             !   !  !                                                                          !  ! !!          ", 
+  "                              !! !     !            !      !                                                                         !  ! !!          ", 
+  "                                 !  !!                  !  !                                                                        !!  !  !          ", 
+  "                             !  !   !!               !  !  !!!                                                                      !!  !! !          ", 
+  "                             !  !  !!!                ! !! !!                                                                            ! !!         ", 
+  "                                !  !                ! ! !! ! !                                                                         !  !!!         ", 
+  "                            !                         !!! !  !                                                                          !             ", 
+  "                           !!  !  !                    !    ! !                                                                     !                 ", 
+  "                           !   !  !                  !   ! !! !                                                                     !  !  !           ", 
+  "                          !!  !   !                     ! !! !                                                                      !  !  !           ", 
+  "                           ! !!  !!!                  ! !   !! !                                                                    !  !! !           ", 
+  "                              !  !                       !! !  !                                                                    !  !! !!          ", 
+  "                          ! !                          !     ! !!                                                                      !! !           ", 
+  "                         !!  ! !!                      !  !  !  !                                                                     !! !            ", 
+  "                            !! !!                        !!  !                                                                       !                ", 
+  "                           !    !!!                      !    !  !                                                                   !  !             ", 
+  "                         ! !! !   !                      !!!  !                                                                    ! !! !!            ", 
+  "                        !!  ! !!                                  !                                                                ! !!!!!            ", 
+  "                        !! !!! ! !                          !  !  !                                                                !  ! !!            ", 
+  "                        !! !!  !!!                          !  !  !                                                                !  !  ! !          ", 
+  "                        !  !!  !                               !! !!                                                                       !          ", 
+  "                        !  !! !!                            !! !!  !                                                                 !!    !          ", 
+  "                           !  !                              !  ! ! !                                                              ! !!               ", 
+  "                                                             ! ! !  !                                                             !! !!   !           ", 
+  "                       !  !                                   !! !                                                                !  !! !             ", 
+  "                       !  !! !                              !      !!!                                                            !  !  !             ", 
+  "                          !! !                                 ! !!  !                                                            !  !  !             ", 
+  "                         !!  !!                               !!    !                                                                   !             ", 
+  "                      !  !    !                              !     !! !!                                                             !                ", 
+  "                      !  ! !! !                                 !! !! !!                                                          !  !                ", 
+  "                      !  ! !!                                 ! ! !                                                              !! !    !            ", 
+  "                            ! !                                !    !  !                                                         !! !  !!!            ", 
+  "                        !!    !                                !!! !!                                                            !  ! !!!             ", 
+  "                     ! !! !  !                                  !  !                                                             !  ! !!              ", 
+  "                     !  ! !!                                         !  !                                                           !  ! !            ", 
+  "                    !!  ! !!                                      !  !                                                           !!!     !            ", 
+  "                       !!! ! !                                        !  !                                                        !    !!!            ", 
+  "                       !!   !                                      !  ! !!                                                      ! !  !                ", 
+  "                    !  !!   !                                      !  !   !                                                     ! !! !!               ", 
+  "                    !  !! !!!                                      !   !  !                                                    !!!!! !!               ", 
+  "                    !  !  !                                         !  !  !                                                     !  !  !!              ", 
+  "                          !                                         !! !                                                       !!     !!              ", 
+  "                                                                  !      ! !!                                                        !!!              ", 
+  "                      !!                                             !! !! !                                                                          ", 
+  "                   !! !! !                                           !  !                                                      !  !                   ", 
+  "                   !  !  !                                         !      ! !                                                  !  !  !                ", 
+  "                   ! !!  !!                                           !! !  !!                                                 !  !  !                ", 
+  "                          !                                           !! !! !!                                                 !  !  !                ", 
+  "                    !      !                                        ! !  !! !!                                                !!     !!               ", 
+  "                  ! !  !                                              !! !!  !                                                !!    !!!               ", 
+  "                  !!!! !!                                              !  !                                                   ! !   !!                ", 
+  "                  !  ! !!!!                                                   !                                               !  ! !!                 ", 
+  "                     !  ! !                                             !  !  !                                               !  ! !!                 ", 
+  "                   !      !                                             !  !                                                 !!  !  ! !               ", 
+  "                  ! !     !                                                !! !!                                               !  !!! !               ", 
+  "                 !! !   !!                                               ! !! !!                                               !      !               ", 
+  "                 !! !  !!                                               !! !!  !                                             ! !! !                   ", 
+  "                 !  !  !!                                               !!  ! ! !                                           !!! ! !!                  ", 
+  "                 !  !  !                                                !!!! !  !                                            !  !! !                  ", 
+  "                                                                          !  !                                              !!   ! !!                 ", 
+  "                                                                        !      !!!                                             !  !!!                 ", 
+  "                                                                           !!!!  !                                              !                     ", 
+  "                !! !  !                                                  !!!  !                                             !  !  !                   ", 
+  "                !! !  !!                                                 !      ! !!                                        !  !  !                   ", 
+  "               !!  !  !!                                                    !! !!!!                                         !  !  !                   ", 
+  "                      !!                                                    ! !!                                           !!   !                     ", 
+  "                 !      !                                                  !    ! !!                                       !! !!                      ", 
+  "                 !      !                                                  ! ! !!  !                                      !!  !!   !                  ", 
+  "              !!! ! !                                                       !! !!                                          !  !! !                    ", 
+  "               !  ! !!!!                                                            !                                      !  !  !                    ", 
+  "               !  ! !!                                                        !  !  !                                       !      !                  ", 
+  "               !  !  ! !                                                      !      !                                   !! !      !                  ", 
+  "              !!       !                                                          ! !!                                    ! !!!!                      ", 
+  "              !!    !!!                                                        !  !  !!                                   !  ! !!                     ", 
+  "              !! !   !!                                                       !!   !                                      !  !  !                     ", 
+  "              !  !  !!!                                                       ! !  !! !                                  !        !                   ", 
+  "              !  !  !                                                         ! !! !                                     !   !    !                   ", 
+  "              !  !  !                                                         ! !    ! !                                 !! !! !                      ", 
+  "              !  !  !                                                         !   ! !! !                                 !  !! !                      ", 
+  "                    !                                                            !! !                                       !! !                      ", 
+  "             !    !                                                            !      ! !                                                             ", 
+  "                !!  !!                                                            !! !  !                               !  !                          ", 
+  "                 ! !!!                                                            !  !! !                               !  !  !                       ", 
+  "             !  !! !!                                                           ! !! !! !!                              !  !! !                       ", 
+  "             !  ! !!                                                              !!  !  !                             !! !!                          ", 
+  "             !  ! !!                                                               !  !                                !! !!   !                      ", 
+  "             !  !  ! !                                                                 !  !                            !  !! !!                       ", 
+  "                !! ! !                                                              !  !                                  !  !!                       ", 
+  "              !      !                                                                     !                            !      !                      ", 
+  "              !      !                                                               ! !! !!!                         !! ! !!                         ", 
+  "              !  !                                                                   ! !!!  !!                        !  !! !                         ", 
+  "            !  !! !                                                                  !! !!! !                          !     !!                       ", 
+  "            !! !! !                                                                   ! !! !                         ! !! !   !                       ", 
+  "            !  !! !                                                                   !   !! !                       !! ! !!                          ", 
+  "            !  !! !                                                                    !! !  !!                      !  !! ! !                        ", 
+  "                                                                                     ! !   !! !                     !! !!   !                         ", 
+  "                                                                                     !  !! !                        !  !! ! !                         ", 
+  "                                                                                       !!    ! !                       !! !!                          ", 
+  "              !!                                                                      !   ! !  !                   !                                  ", 
+  "           !! !! !                                                                       !  !! !!                  !  !  !                            ", 
+  "           !! !! ! !                                                                   !  !  !  !                 !!     !                            ", 
+  "           !!!!! !                                                                        !  !!  !                !! !                                ", 
+  "           !  !  !                                                                       !   !!                  !!  !! !                             ", 
+  "                 ! !                                                                       !      !              !  !   !!                            ", 
+  "            !      !                                                                        !  !   !                !! !!!                            ", 
+  "          !!!!!    !                                                                        !   ! !!           !! !    !!                             ", 
+  "            !                                                                                ! !!   !           !! ! !!                               ", 
+  "          ! !! !                                                                             !   !             ! !!!  !                               ", 
+  "          !  ! !!                                                                             ! !!!           ! ! ! !!  !                             ", 
+  "         !!!!! !!                                                                            ! !  ! ! !!     !   !   !!                               ", 
+  "          !! !  !                                                                             !! ! !   !  ! !!  !  !!  !                              ", 
+  "          !  !  !!                                                                            ! !   ! !  !!!!! !!!!                                   ", 
+  "                 !                                                                            !  ! ! !  !     !!!  !                                  ", 
+  "                                                                                               !  !   ! !     !   !!                                  ", 
+  "                                                                                                 ! ! !  !!!!!    !!!                                  ", 
+  "                                                                                                    ! !         !                                     ", 
+  "                                                                                                     !!        !                                      ", 
+  "                                                                                                   !!   !! !!!                                        ", 
+  "                                                                                                      !                                               ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-7-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..cd82d0a
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-600-600-2.0-grid-reference.json
@@ -0,0 +1,159 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                       !        !                                                                                                     ", 
+  "                                                !                                                                                                     ", 
+  "                                       !!!!   !!! !                                                                                                   ", 
+  "                                      ! !        !!!                                                                                                  ", 
+  "                                    !!         !!  !                                                                                                  ", 
+  "                                !  !     !!!!!!  !! !!                                                                                                ", 
+  "                                 !!    !!!           !!                                                                                               ", 
+  "                                 !!   !  !            !                                                                            !                  ", 
+  "                                !! ! !   !!  !!        !                                                                           !     !     !      ", 
+  "                                ! !     ! !    !!!      !                                                                          !     !     !      ", 
+  "                               !!!     !  !     !!       !                                                                         !     !     !      ", 
+  "                                      !    !!  !  !      !!                                                                        !     !     !      ", 
+  "                              !      !    !  !!  ! !      !                                                                        !    !! !   !      ", 
+  "                             !     !!    !      !  !!      !                                                                      !!!    !     !      ", 
+  "                             !      !!  !  !!!    ! !!     !                                                                            ! !!   !!!    ", 
+  "                            !      !  !   ! !!      !!      !                                                                     !!!   !      !  !   ", 
+  "                            !     !!!!    ! ! !    !  !      !                                                                    !     !!!!  !!  !   ", 
+  "                                  !      !  !  !      !      !                                                                  !!! !   !     !  !    ", 
+  "                           !     !! !   ! ! ! ! !      !      !                                                                   !     !!!   !!      ", 
+  "                           !     !!     !  !!!  !      !      !                                                                   !  !  !     !  !    ", 
+  "                          !      ! !   !   ! !   !      !      !                                                                  !  !  !     !       ", 
+  "                          !     !      !!   !    !!     !      !!                                                                 !  !  !     !       ", 
+  "                          !     !         ! !! !! !!    !!    !!!                                                                    !  !     !       ", 
+  "                         !      !     !!!        !!!   ! !!   ! !!                                                                   !     !      !   ", 
+  "                         !     !      !  !      !  !     !!    !!  !                                                             !         !      !   ", 
+  "                         !     !     !!! !      !  !!!    !!     !!                                                            !!!!!!  !   ! !    !   ", 
+  "                        !      !     !  !        !!!!    !!!   !!!                                                               !     !!!!!!!    !   ", 
+  "                       !!     !!     !           !! !!     !!!    !                                                              !  !  !     ! !!!!   ", 
+  "                        !!!   !     !               !!   ! !!  !  !                                                              !  !  !   ! !    !   ", 
+  "                             !!     !             !!  !     !  !   !                                                             !  !  !     !        ", 
+  "                       !!!   !  !   !               !!!      !     !                                                             !  !  !     !        ", 
+  "                     !!!     !!    !!!!            !     !   !  !                                                                   !     !      !    ", 
+  "                       !!    ! !  !!                   ! !   !  !   ! !                                                         !   !     !      !    ", 
+  "                      !    !!!     !!!!           !    !  !   !  ! !!                                                         !!!!    !   ! !    !    ", 
+  "                      !     !  !  !                !    ! !   ! !!!  !                                                          !    !!!!   !    !    ", 
+  "                      !  !  !   ! !!!!             !    !     !!     !                                                         !!!    !     !!!!      ", 
+  "                         !  !     !                      ! !!  !  !  !                                                          !     !!!   !         ", 
+  "                     !         !  !                 !    !!    !  !   !                                                        !! !  !!     !!!!      ", 
+  "                     !     !   ! !    !             ! !! !  !   !  !  !                                                              !!!!   !  !      ", 
+  "                   !!!  !  !   ! !    !              !    ! !   !  !                                                                 !     !!!!!      ", 
+  "                     !!!!  !     !    !              !    !            !!!                                                     !     !!!              ", 
+  "                    !    !!!!    !                           !   !   !!!                                                       !     !     !          ", 
+  "                    !     !   ! !    !                !    ! !   !!!    !!                                                     !     !     !          ", 
+  "                    !  !  !   ! ! !!!                 !    !     !!   !!!                                                      !     !     !          ", 
+  "                       !  !     !                           !     !   ! !!                                                     !     !     !          ", 
+  "                   !   !     !  !                      !   !!   !!!!   !!!                                                     !     !     !          ", 
+  "                   !     !   !      !                    !  !      !     !                                                                 !          ", 
+  "                 !!!  !  !   ! !    !                      !!!   !!!!                                                                                 ", 
+  "                   !!    !   ! !    !                     !  !      !     !                                                   !     !!!   !           ", 
+  "                  !    !!! !   !                          ! !!    !!!     !                                                  !!!    !     !           ", 
+  "                  !!!         !                            !  !     !                                                         ! !   !!    !           ", 
+  "                  ! !   !!!   ! ! !                           !            !                                                 !! !  !!     !!!         ", 
+  "                  !!!   !     !                                      !     !                                                  !    !!     !  !        ", 
+  "                  !     !!!   !!!!                             !     !                                                      !!      ! !  !!! !        ", 
+  "                       !!    !!  !                             !            !                                                ! !  !!!        !        ", 
+  "                 !     !!!    !!!!                                    !     !                                                !     !     !!           ", 
+  "                 !     !     !                                  !     !!    !!                                               !     !   ! !  !         ", 
+  "                 !     !     !                                  !   !! !   ! !                                               !  !  !   ! !    !       ", 
+  "                 !     !     !                                   !     !   ! !!                                              !  !  !     !            ", 
+  "                 !     !     !                                   !   ! !!   !                                                !  !  !     !            ", 
+  "                             !                                  !!!    !!     !!                                                !     !  !   !        ", 
+  "                !     !                                       !! !!   ! !   ! !                                           !!!     !   !      !        ", 
+  "                !     !     !                                    !!     !!                                                  !!!! !!   ! !    !        ", 
+  "                !     !!!   !                                  !! !   !        !                                            !  !  ! !!!!!    !        ", 
+  "               !!    !!     !                                     !!     !  !  !                                            !  !  !   ! ! !!!!        ", 
+  "                 !   !!!    !                                   !  ! !   !  !                                               !  !  !     !             ", 
+  "              !! !   !      !!!                                    !  !   !     !                                              !  !     !             ", 
+  "               !     !!    !!  !                               !    ! !   !  !  !  !                                       !   !     !      !         ", 
+  "             !!!     !    !!! !                                !    ! !   !  !  !!                                         !     !   ! !    !         ", 
+  "               ! ! !!!     !  !                                !    !  !   !  !  !                                       ! !  !  !   ! !    !         ", 
+  "               !  !  ! !  !!!                                   !    ! !  !!  !  !                                         ! ! !!!   ! !    !         ", 
+  "                  !        !  !                                 !    ! !!  !  !   !                                        !     !!!  !!              ", 
+  "              !         !      !                                !   !!  !   !     !                                        !!          !! !           ", 
+  "              !     !   ! !    !                                 !!   ! !   !  !  !                                       ! !   ! !!                  ", 
+  "              !  !  !   ! !    !                                      ! !   !  !   !                                     !!!!   !     !! !            ", 
+  "              !  !  !   ! !    !                                 !    !  !   !     ! !                                    !     !!!  !!!              ", 
+  "            !!!  !  !     !                                       !    ! !   !    !!                                      !     !     !!!!            ", 
+  "               !!!!!!     !                                       !    ! !   ! !    !!                                    !     !!!   !               ", 
+  "                 !    !! !!   !                                   !    !     !!    !!                                                 !               ", 
+  "             !     !   ! !   !!                                    !    !     !   ! !                                    !     !                      ", 
+  "             !     !   ! !    !                                    !  !!!   !!!!   !!!                                   !     !     !                ", 
+  "             !  !  !   ! !    !                                         !!     !     !                                   !     !     !                ", 
+  "             !  !  !     !    !                                       !!!!   !!!     !                                   !     !     !                ", 
+  "             !  !  !     !                                            !  !     !!     !                                        !     !                ", 
+  "           !    !     !  !                                            ! !!   !!!!     !                                 !                             ", 
+  "            ! !  !!          !                                            !     !     !                                !!!    !!!   !                 ", 
+  "           !!     ! !   !    !                                            !     !      !                                !     !     !                 ", 
+  "            !!!   !     !  !                                              !      !     !                               !! !  !!!!   !                 ", 
+  "            ! !  !! !   !                                                  !     !     !                                     !!     !!!               ", 
+  "           !!!    !     !  !                                               !     !      !                            !!!     !!!!   !  !              ", 
+  "                 !!!!  !!  !                                               !      !     !                              ! !   !     !!  !              ", 
+  "                 !       !!!                                                !     !!    !!                             !  !  !!!   !  !               ", 
+  "           !     !!!!                                                       !   !!!!   ! !                             !  !  !    !!!                 ", 
+  "           !     !     !                                                    !      !   !!!!                               !  !     !  !               ", 
+  "           !     !     !                                                     !   ! !!       !                         !         !                     ", 
+  "           !     !     !                                                     !!    !!     !!                          !     !   ! !    !              ", 
+  "           !     !     !                                                   !!!    ! !   ! !                           !  !  !   ! !    !              ", 
+  "           !     !     !                                                      !     !!     !                       !!!   !  !     !    !              ", 
+  "                       !                                                   !!!!   !  !     !                         ! !!      !  !                   ", 
+  "                                                                               !     !  !  !                         !     !!!   !    !               ", 
+  "          !     !!!!  !                                                     !! ! !   !  !   !                        !  !  !   !!!    !               ", 
+  "         !!!!   !     !                                                        !  !   !  !  !                           !  !     ! !!!                ", 
+  "          ! !   !!!   !                                                    !    ! !   !  !    !!                    !   !     !  !                    ", 
+  "         !!!!   !     !  !                                                 !    !          !!!                      !     !   !      !                ", 
+  "          !    !!!!   !  !                                                      !  !   ! !!  !                      !  !  !   ! !    !                ", 
+  "        !!!!    !     !!!!                                                  !    ! !  !!  !   !                  !!!   !  !     !    !                ", 
+  "              !!! !                                                         !    !  !!  !     !                    ! !  !    !  !                     ", 
+  "         !   !        !! !                                                       !! !   !  !                      !!     !!!   !    !                 ", 
+  "         !     !   ! !                                                        !!  !     !      !                   !!    !     !!   !                 ", 
+  "         !     !   ! !    !                                                       !  !   !  !  !  !              !! !   !!!!   ! !!                   ", 
+  "         !  !  !   ! !    !                                                   !    ! !   !  !   !!                !!!   !       !                     ", 
+  "         !  !  !   ! !    !                                                   !    !  !   !   ! !                 !    !!!!   !! !                    ", 
+  "         !  !  !     !                                                              ! !   !!!    !!              !     !!    !!! !                    ", 
+  "      !!!!     !     !                                                         !    !   !  !   !!!              !!     !!!    ! !!                    ", 
+  "            !!!!!!       !                                                     !     !     !!   !!!              !!    !     !                        ", 
+  "            !       !!!!!!                                                      !  !!!   !! !   ! !!           !! !    !     !                        ", 
+  "        !     !   ! !                                                             !  !!     !    ! !            !!!   !      !                        ", 
+  "        !     !   ! !    !                                                          !!!   !! !   ! !!        !!!!     !     !                         ", 
+  "        !  !  !   ! !    !                                                         !  !      !    ! ! !        !!!    !     !                         ", 
+  "        !  !  !   ! !    !                                                         ! ! !   !!!      !!         !     !      !                         ", 
+  "        !  !  !     !                                                                  !      !    ! !        !     !!!    !                          ", 
+  "      !!!     !     !                                                                   !      !     !!       !  !  !  !   !                          ", 
+  "         !  !!!     !                                                                   !      !  !   !      !   ! !!!                                ", 
+  "       !           !!! !                                                                 !      !  !   !  !  !  !  !      !                           ", 
+  "       ! !   !!!                                                                         !      !!  !   ! ! !   !  !!!    !                           ", 
+  "       ! !   !     !!!!                                                                   !     !!! !   !!!!   ! !!      !                            ", 
+  "       !!    !!    !                                                                      !    !  !  !    !       !!!    !                            ", 
+  "       !     !    !!!!!                                                                    !     !!!  !          !      !                             ", 
+  "       !     !     !                                                                        !   !  !            !!      !                             ", 
+  "       !     !     !                                                                        !     ! !!          !   !  !                              ", 
+  "       !     !     !                                                                         !      !!      !  !    ! !!!                             ", 
+  "                                                                                              !    !  !!    !!!    ! !!  !                            ", 
+  "                                                                                               !        !!!!!!    !  !!! !                            ", 
+  "                  !                                                                             !            !   !  !  !!                             ", 
+  "                                                                                                !!  !!        !    !!!!                               ", 
+  "                                                                                                 !!!  !       !   !    !                              ", 
+  "                                                                                                  !!     !!!     !                                    ", 
+  "                                                                                                  ! !!!       !!!                                     ", 
+  "                                                                                                 !  ! !!!!!!!!!       !                               ", 
+  "                                                                                                  !!  !       !      !                                ", 
+  "                                                                                                     !         !   !                                  ", 
+  "                                                                                                               !  !                                   ", 
+  "                                                                                                               !                                      ", 
+  "                                                                                                        !! !!                                         ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-7-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..dc7ae1a
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-800-800-1.0-grid-reference.json
@@ -0,0 +1,209 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                        ! !                                                                                                                                             ", 
+  "                                                       !!!  !!                                                                                                                                          ", 
+  "                                                    !!         !!                                                                                                                                       ", 
+  "                                                    !! !         !                                                                                                                                      ", 
+  "                                                 !   !! !! !!!    !                                                                                                                 !  !  !             ", 
+  "                                                 !  ! !!  !!!! !    !                                                                                                               !  !  !             ", 
+  "                                                !!   !  !!      !    !!                                                                                                             !! !  !             ", 
+  "                                                !! !!   !! !!   !!   !                                                                                                              !  !  !!            ", 
+  "                                               !   !!! !    !!!   !!  !                                                                                                            !!     !!            ", 
+  "                                              !   !   !  !!!! !!  !! ! !                                                                                                             !    !!            ", 
+  "                                                 !!  !  !     !!!   ! ! !                                                                                                            !      !           ", 
+  "                                             !      !!!!       ! !   !!                                                                                                              !  !               ", 
+  "                                                !   !             !! ! ! !                                                                                                        !! !! !!              ", 
+  "                                            !! !!  !               !! ! ! !!                                                                                                       !  !  !!!            ", 
+  "                                          ! !  !! !               !!   !   !                                                                                                       !  ! !!              ", 
+  "                                           !! !!  !!             !  !!  ! !!                                                                                                       !  !  ! !            ", 
+  "                                            ! !! !!!              !     !                                                                                                         !      ! !            ", 
+  "                                          ! !!    !                  !  !!  !                                                                                                     !    ! !!             ", 
+  "                                         ! ! ! !!                    !!  !   !                                                                                                       !   !!             ", 
+  "                                         ! !!     !                  !    !  !                                                                                                       !  !!!             ", 
+  "                                         !  ! !!  !                    !      !                                                                                                   !  !!                 ", 
+  "                                          !    ! !                         !  !                                                                                                   !  !  !               ", 
+  "                                       !!  ! !   !                      !  !  !!!                                                                                                 !  !  !               ", 
+  "                                       !! !! !!                          ! !! !!                                                                                                  !  !  !               ", 
+  "                                       !! !!  ! !                      ! !  ! ! !                                                                                                 !  !  !               ", 
+  "                                       !  !  !!                          !!! !  !                                                                                                !!     !!              ", 
+  "                                          !  !                          ! !!   ! !                                                                                               !      !!              ", 
+  "                                      !                                 !   ! !! !                                                                                                 !    !!              ", 
+  "                                      !  !  !                              ! !! !                                                                                                  !  !                 ", 
+  "                                            !                            ! !   !! !                                                                                              ! !! !!                ", 
+  "                                     !! !                                   !! !  !                                                                                             !!! ! !!                ", 
+  "                                     !! !  !                              !     ! !!                                                                                             !  !  !!!              ", 
+  "                                       !!! !                                 !  !  !                                                                                             !  !  ! !              ", 
+  "                                      !   !                                 !!!     !                                                                                                    !              ", 
+  "                                    ! !! !  !                               !    !  !                                                                                           !        !              ", 
+  "                                    !  ! !!                                  !!                                                                                                 !     !!!               ", 
+  "                                     !!   ! !                                     !  !                                                                                           ! !   !!               ", 
+  "                                   ! !! !!  !                                  !  !   !                                                                                         !  !  !!!               ", 
+  "                                   !  ! !! !                                       ! !!                                                                                         !  !! !                 ", 
+  "                                         ! !                                    ! !!  !!                                                                                        !  !  !                 ", 
+  "                                     !     !                                   !! ! !                                                                                           !  !  !                 ", 
+  "                                  !! !  !                                      ! !  !! !                                                                                                                ", 
+  "                                  !  !  !                                      ! !! !                                                                                          !!                       ", 
+  "                                        !                                      !      ! !                                                                                      !! !   !!                ", 
+  "                                                                               !   ! !! !                                                                                     !!!     !!                ", 
+  "                                 !  !  !                                          !  ! !                                                                                       ! !!  !!!                ", 
+  "                                 !  !  !                                        !      ! !                                                                                     !  ! !!                  ", 
+  "                                !   !! !                                           !! !  !                                                                                     !  ! !!                  ", 
+  "                                !  !!                                              !  !! !!                                                                                   !!! !  ! !                ", 
+  "                               !!  !! ! !                                        ! !! !! !!                                                                                          !!!                ", 
+  "                                !  !! !!                                            !  !                                                                                        !      !                ", 
+  "                                      !                                             !  !   !                                                                                    !                       ", 
+  "                                 !      !                                               !  !                                                                                 !!! ! !!                   ", 
+  "                              !! !! !                                                !  !                                                                                     !! !  !!!                 ", 
+  "                               !  !!!!                                                   !  !                                                                                 !! !  !!                  ", 
+  "                                  !  !!!                                              !  ! !!                                                                                 !  !  !!                  ", 
+  "                                !      !                                              ! !    !                                                                                    ! !                   ", 
+  "                             !! !      !                                             !    !  !                                                                                                          ", 
+  "                              !  !! !                                                  !  !  !                                                                                                          ", 
+  "                              !! !! !!                                                 !    !                                                                                                           ", 
+  "                                 !! !!                                               !   ! !! !!                                                                             !! !  !                    ", 
+  "                                 !  !!                                                  !! !! !                                                                              !! !  !!                   ", 
+  "                                                                                      ! !!   !                                                                              !!!!!  !!                   ", 
+  "                             !  !  !                                                  !   ! !  !                                                                                   !                    ", 
+  "                             !  !  !                                                     !! !  !!                                                                             !      !                  ", 
+  "                            !!  !! !                                                   !    !! !!                                                                             !      !                  ", 
+  "                            !!     !                                                   ! !! !! !!                                                                           !!!  !                      ", 
+  "                           !!!  ! !!!                                                     !  !                                                                              !  ! !!!!                   ", 
+  "                            !  !! !                                                       !  !   !                                                                          !  ! !!                     ", 
+  "                            !  ! !!                                                        !  !  !                                                                          !  !  ! !                   ", 
+  "                               !  ! !                                                      !  !                                                                            !!       !                   ", 
+  "                           !!!      !                                                             !                                                                        !!    !!!                    ", 
+  "                             ! !!!  !                                                       !  ! !!                                                                        !! !   !!                    ", 
+  "                           ! !! !!                                                          ! !!   !                                                                       !  !  !!!                    ", 
+  "                           !  ! !!                                                         !!   !  !                                                                       !  !  !                      ", 
+  "                          !!  !  !                                                         ! !  !  !                                                                       !  !  !                      ", 
+  "                          !!  !! ! !                                                         !! !                                                                             !  !                      ", 
+  "                          !  !!                                                            !      ! !!                                                                        !                         ", 
+  "                          !  !! ! !                                                        !  !! !! !                                                                      !  !                         ", 
+  "                          !  !! !                                                             !! !                                                                        !! !    !                     ", 
+  "                          !  !  !                                                           !      ! !                                                                    !! !  !!!                     ", 
+  "                          !  !  !                                                              !! !  !!                                                                   !  ! !!!                      ", 
+  "                                                                                               !! !!  !                                                                   !  !  ! !                     ", 
+  "                         !! !                                                                ! !!  ! !!                                                                           !                     ", 
+  "                         !! !   !                                                               !  !  !                                                                   !!!     !                     ", 
+  "                        !!! !  !!!                                                              !  !                                                                     ! !  ! !!                      ", 
+  "                         !  !  !!                                                                      !                                                                 !  ! !!                        ", 
+  "                            !  ! !                                                               !  !  !                                                                 !  ! !!                        ", 
+  "                          !      !                                                               !  !                                                                    ! !!  ! !                      ", 
+  "                        !!!      !                                                                  !! !!                                                                !     !!                       ", 
+  "                        ! !! !!!                                                                  ! !! !!                                                               !! !   !!                       ", 
+  "                        !  ! !!                                                                  !! !!                                                                  !  !  !!!                       ", 
+  "                        !  ! !!                                                                  !     ! !                                                              !  !  !                         ", 
+  "                       !!     ! !                                                                !!!! !  !                                                              !  !  !                         ", 
+  "                       !!     !                                                                    !  !                                                                    !  !                         ", 
+  "                       !! !   !                                                                  !      ! !                                                                !                            ", 
+  "                       !  !  !!!                                                                    !! !  !                                                             ! !!                            ", 
+  "                       !  !! !                                                                    ! !  !                                                               !  !! ! !                        ", 
+  "                       !  !  !                                                                    !      ! !!                                                          ! !!! !                          ", 
+  "                       !  !  !                                                                       !! !! !                                                           !  !  !                          ", 
+  "                                                                                                     !  !   !                                                                ! !                        ", 
+  "                       !                                                                            ! !  !  !                                                           !      !                        ", 
+  "                      !! !   !!                                                                     ! !  !  !                                                           !!!    !                        ", 
+  "                      !! !  !!!                                                                       !  !                                                            !  ! !! !                         ", 
+  "                      !  !  !!                                                                               !                                                        !  ! !!                           ", 
+  "                      !  ! !!                                                                          !  !  !                                                           !  ! !                         ", 
+  "                         !  ! !                                                                        ! !!  !                                                          !!    !                         ", 
+  "                     !!!      !                                                                           !! !!                                                       ! !!  !!                          ", 
+  "                       !   !!!!                                                                        !! !! !!                                                      !! !  ! !                          ", 
+  "                     ! !  !                                                                            !! !! !                                                       !  !  !!                           ", 
+  "                     !  ! !!                                                                           !!    ! !                                                        !  !                            ", 
+  "                    !!! ! !!                                                                             !! !  !                                                                                        ", 
+  "                     !  !  !!                                                                            !    !!                                                                                        ", 
+  "                    !!     !!                                                                          !   !!!! !                                                   !! !! !                             ", 
+  "                          !!!                                                                           !!!! !  !                                                   !! !! !                             ", 
+  "                                                                                                        ! !    !                                                   !!  !! !                             ", 
+  "                    !  !                                                                                !   ! ! !!                                                   ! !   !                            ", 
+  "                    !  !  !                                                                                ! !!   !                                                  !     !                            ", 
+  "                    !  !! !                                                                                !!! !                                                   !  ! !!                              ", 
+  "                    !! !  !                                                                               !    !  !                                               !!  ! !!                              ", 
+  "                   !!  !  !                                                                                !! !!                                                      !! ! !                            ", 
+  "                   !! !    !                                                                                       !                                                !     !!                            ", 
+  "                     !     !                                                                                 !  !  !                                              ! !! !                                ", 
+  "                     !  !                                                                                    ! !!  !                                             !!  ! !!                               ", 
+  "                   ! !! !!                                                                                      !! !!                                            !!  !! ! !                             ", 
+  "                  !!!!! !!                                                                                   !! !!  !                                            !! !!   !                              ", 
+  "                   !  ! !!!!                                                                                  ! !! !                                             !  !!   !                              ", 
+  "                   !  !  ! !                                                                                  ! ! !! !                                           !  !! !!!                              ", 
+  "                           !                                                                                   !! !                                                 !  !                                ", 
+  "                  !        !                                                                                 !      !!!                                                                                 ", 
+  "                  !!     !!                                                                                  !  !!!!  !                                         !  !                                    ", 
+  "                  !! !   !!                                                                                    !!    !                                          !! !  !                                 ", 
+  "                  !  !  !!!                                                                                   !     !! !!                                          !  !                                 ", 
+  "                  !  !  !                                                                                        !! !! !!                                         !  !!                                 ", 
+  "                  !  !  !                                                                                      ! ! ! !  !                                      ! !!  !                                  ", 
+  "                  !  !  !                                                                                       !    !  !                                      !  ! !!                                  ", 
+  "                     !!                                                                                          !! !!                                               !                                  ", 
+  "                  !  !                                                                                           !       !                                    ! !!     !                                ", 
+  "                 !! !!   !                                                                                         !  !                                       !  ! !!                                   ", 
+  "                 !! !                                                                                              !      !                                      ! !! !                                 ", 
+  "                 !  ! !! !                                                                                            !! !!!                                   !      !                                 ", 
+  "                 !  ! !!                                                                                            ! !!   !                                 !  ! !   !                                 ", 
+  "                 !  ! !!                                                                                            !! !!  !                                 !  !  !                                    ", 
+  "                !!!!!  ! !                                                                                         ! ! !!                                          !                                    ", 
+  "                        !!                                                                                           !    ! !                               !  !  !!!                                   ", 
+  "                  !      !                                                                                            !! !  !!                              !  !  !                                     ", 
+  "                  !      !                                                                                            !   !  !                                    !                                     ", 
+  "               !!!   !                                                                                              !  !! !                                !                                            ", 
+  "                !! !  !!!                                                                                             !!    ! !!                           !  !! !                                      ", 
+  "                !! !  !                                                                                              !   ! !  !                          ! ! !!! !                                      ", 
+  "                !  !  !!                                                                                                !  !! !!                          !! !!  !!                                     ", 
+  "                !  !  !                                                                                               !  !  !  !                             !! !!!                                     ", 
+  "                                                                                                                         !  !!  !                        ! !    !!                                      ", 
+  "                                                                                                                        !   !!                          !!  ! !                                         ", 
+  "                   !                                                                                                      !      !                        ! ! !!                                        ", 
+  "                ! !!                                                                                                          !   !                     ! !  !   !                                      ", 
+  "               !! !! ! !                                                                                                   !  !! !!                        ! !!!!                                       ", 
+  "               !! !! !                                                                                                      !  !   !                  !! !    !                                         ", 
+  "               !  ! !!                                                                                                      !  !!! !                  !  !! !!  !                                       ", 
+  "               !  !  !                                                                                                      !!  ! ! !                 !! !   !                                          ", 
+  "                  !  ! !                                                                                                    ! !  ! ! !!                  !  ! !                                         ", 
+  "              !!!!     !                                                                                                     !!   ! !                !  !  !!                                           ", 
+  "                !      !                                                                                                       !!  !! !             !   !  ! !                                          ", 
+  "                !      !                                                                                                         ! ! ! !!         !!!  !                                                ", 
+  "              ! !  !                                                                                                            !   ! !!!          !  !!  !                                             ", 
+  "             !!! ! !!                                                                                                         !  !   !  !!!       !  !!  !                                              ", 
+  "              !! !  !!                                                                                                         !  !!! !  !!     !  !!!!                                                 ", 
+  "              !! !  !                                                                                                              ! !!!   !!!!!! ! !!  !                                               ", 
+  "              !  !  !!                                                                                                             !   !!          !   ! !                                              ", 
+  "                                                                                                                                  !      !!!     !  ! ! !                                               ", 
+  "                                                                                                                                      !   !!!!!!  !! !                                                  ", 
+  "                                                                                                                                       !    !!   ! !!                                                   ", 
+  "                                                                                                                                         !     !  ! ! !                                                 ", 
+  "                                                                                                                                            !!!!     !                                                  ", 
+  "                                                                                                                                                !  !                                                    ", 
+  "                                                                                                                                                 !                                                      ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-7-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-7-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..2dfc75e
--- /dev/null
+++ b/tests/visual_tests/grids/lines-7-800-800-2.0-grid-reference.json
@@ -0,0 +1,209 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                       !!! !!!!                                                                                                                                         ", 
+  "                                                    !!          !!                                                                                                                                      ", 
+  "                                               !  !!!!            !                                                                                                                                     ", 
+  "                                                !!!! !             !!                                                                                                                                   ", 
+  "                                                !! !!                !                                                                                                                                  ", 
+  "                                               !  !                   !                                                                                                          !                      ", 
+  "                                              !      ! !!!!!!!         !                                                                                                         !     !                ", 
+  "                                             !!   !  !!!      !!       !!                                                                                                        !     !     !          ", 
+  "                                             !   !   !!     !   !       !!                                                                                                       !     !     !          ", 
+  "                                          !!!   !  !!  !         !!     !!                                                                                                       !     !!!   !          ", 
+  "                                           !!  !   !             !!!    ! !  !                                                                                                   !    !!     !          ", 
+  "                                           ! !!!  !    !        !  !     ! !!                                                                                                     !    !                ", 
+  "                                          !   !! !    !  !!!!     !!!!     !                                                                                                      !   !      !!!        ", 
+  "                                          !  !  !!   !  !   !!!     !!      !                                                                                                   !!!   !     !!  !       ", 
+  "                                         !   !  !!! !  !   ! !!    ! !!!     !                                                                                                ! !     !     !!!!        ", 
+  "                                         !  !  !   !  !!  ! !!!!     !!      !                                                                                                  ! !  !!     !           ", 
+  "                                      !!!   !  !   !  !    !!!!!!   !  !  !   !                                                                                                 !     ! !  !!!!!        ", 
+  "                                        !! !  !      !!    !!!! !!      !  !  !                                                                                                 !  !  !     !           ", 
+  "                                      !!      !   !    !  !    !!!  !   !  !   !!!                                                                                              !  !  !     !           ", 
+  "                                       !!    !      !   !!    !   ! !    !  ! !!!                                                                                                  !  !     !           ", 
+  "                                     !! !  !!!   !       !        !  !   !  !!  !                                                                                                  !     !      !       ", 
+  "                                      !!!   !!     !    !    !     !      !! !   !                                                                                             !     !   !      !       ", 
+  "                                            !           !     !     ! ! !!!      !                                                                                             !     !   ! !    !       ", 
+  "                                     !     ! !!   !    !       !    !  !   !  !   !                                                                                           !!!!!!!!   ! !    !       ", 
+  "                                     !     !     !!    !       !     ! !   !      !                                                                                            !  !  !!!!!!!!           ", 
+  "                                    !     !! !   ! !! !         !  !!!  !   !  !   !!!                                                                                         !  !  !     !   !        ", 
+  "                                    !     !!     !!              !!   ! !   !      !                                                                                           !  !  !     !            ", 
+  "                                    !     ! !    ! !                  !  !   !       !                                                                                         !  !  !     !            ", 
+  "                                   !      !    !!!  !                  ! !   ! !   !!                                                                                             !     !      !        ", 
+  "                                   !     !      ! !!              !    !  !  !!   !  !                                                                                        !   !     !      !        ", 
+  "                                   !     !     !                        !     !!   !!!                                                                                        !     !   ! !    !        ", 
+  "                                  !      !     !                   !    !!   !!!     !                                                                                      !!! !   !   ! !    !        ", 
+  "                                  !     !      !                       !!!     !!     !                                                                                       !     !!!   !             ", 
+  "                                  !     !     !                       !  !!   !!!     !                                                                                      !!!!   !     !  !          ", 
+  "                                 !!!   !! !   !                        !!!!     !      !                                                                                      !    !!!!   !!            ", 
+  "                                 ! !   !!     !                        !  !   !!       !                                                                                     !!!   !!     !  !          ", 
+  "                                !!!!   ! !                             ! !!      !                                                                                                 !!!!   !  !          ", 
+  "                               ! !    !!     !!!!                          !     !      !                                                                                          !       !!!          ", 
+  "                                !!!    !!!   !  !                          !      !     !                                                                                    !     !!!   !              ", 
+  "                                !    !!      !!!!                           !     !      !                                                                                   !     !     !              ", 
+  "                                !  !  ! !   !   !                           !      !     !                                                                                   !     !     !              ", 
+  "                                   !  !     !!!                                    !     !!                                                                                  !     !     !              ", 
+  "                               !     !   !  !                                !   ! !!   ! !                                                                                  !     !     !              ", 
+  "                               !  !  !   ! !    !                            !     !!   !!!!                                                                                 !     !     !              ", 
+  "                               !  !  !   ! !    !                             !   ! !!      !!                                                                                                          ", 
+  "                            !!    !  !     !    !                             !!    !!     !                                                                                !     !!!!                  ", 
+  "                              !!!!  !   !                                  !!!!    ! ! !   !                                                                               !!     !     !               ", 
+  "                              !   !!!!  ! !    !                              !!     !!     !                                                                               ! !   !!    !               ", 
+  "                              !  !  !  !!!!    !                            !!!!   !  !     !                                                                               ! !   !     !!!!            ", 
+  "                                 !  !     !!!!                                 !!     !  !  !                                                                               !!   !!     !  !            ", 
+  "                             !         !  !                                  !! !     !  !   !                                                                            !!!     !    !!!!!            ", 
+  "                             !     !   ! !    !                                 !  !   !  !  !                                                                               !  !!!     !               ", 
+  "                             !  !  !   ! !    !                             !    ! !   !  !    !!                                                                              !    !  !!!              ", 
+  "                          !!    !  !     !    !                             !    !          !!!                                                                            !     !   !                  ", 
+  "                            !!!       !  !                                          !   !!!!  !                                                                            !     !   ! !    !           ", 
+  "                            !    !!!  ! !    !                               !    ! ! !!!  !   !                                                                           !     !   ! !    !           ", 
+  "                            !!!   ! !   !    !                               !    !  !   !     !                                                                           !  !  !   ! !    !           ", 
+  "                            !    !!!    !!!!                                     !!! !   !  !  !                                                                           !  !  !     !                ", 
+  "                           !!!   !      !                                     !!!  ! !   !  !   !                                                                       !  !  !  !     !                ", 
+  "                           !     !!     !!!                                        !  !   !     !                                                                          !!!!!!      !                ", 
+  "                           !     !     !!  !                                   !    ! !   !  !  !!!                                                                           !    !! !!                ", 
+  "                           !     !!    !!!!                                    !    !     !    ! !                                                                        !     !   ! !   !!            ", 
+  "                           !     ! !   !                                            !  !   !!    !!                                                                       !     !   ! !    !            ", 
+  "                                       !                                        !    !   !!!    !                                                                         !  !  !   ! !    !            ", 
+  "                          !     !                                               !    !!     !   ! !!                                                                      !  !  !   ! !    !            ", 
+  "                          !     !     !                                             !!   !! !   !!!                                                                       !  !  !     !                 ", 
+  "                          !     !     !                                               !!    !                                                                                !        !                 ", 
+  "                          !     !     !                                            !!!!   !! !     !                                                                    !!!!  !    !      !             ", 
+  "                                      !                                            !  !      !     !                                                                     !     !!!   !!   !             ", 
+  "                        !!     ! !!                                                !!!!!   !!!                                                                          !!!!   !     !  !               ", 
+  "                         !!!   !     !                                                 !            !                                                                    ! !  !!!!   !!!                ", 
+  "                        !! !  !!!!   !                                                        !     !                                                                   !!!    !     !  !               ", 
+  "                         !!   !!     ! !!                                               !     !                                                                               !!!!  !!  !               ", 
+  "                      !!!       !!  !!  !                                               !            !                                                                        !       !!!               ", 
+  "                        ! !  !!      !!!!                                                      !     !                                                                  !     !!!!                      ", 
+  "                        !     !!!   !                                                    !     !!    !!                                                                 !     !     !                   ", 
+  "                        !  !  !     !!!!                                                 !   !! !   ! !                                                                 !     !     !                   ", 
+  "                        !  !  !     !                                                           !   ! !!                                                                !     !     !                   ", 
+  "                           !  !     !                                                     !   ! !!   !                                                                  !     !     !                   ", 
+  "                       !   !     !      !                                                !!!    !!     !!                                                                           !                   ", 
+  "                       !     !   !      !                                              !! !    ! !   ! !                                                               !                                ", 
+  "                     !!!     !   ! !    !                                                 !!     !!                                                                    !     !!!   !                    ", 
+  "                       !!!!! !   ! !    !                                               !! !   !        !                                                             !!!!   !     !                    ", 
+  "                       !  !  !!!!  !                                                       !!     !  !  !                                                              ! !   !!!   !                    ", 
+  "                          !  !     !!!!!                                                 !  ! !   !  !                                                                !!!!  !!     !!!                  ", 
+  "                      !   !     !                                                           !  !   !     !                                                                  !!!    !  !                 ", 
+  "                      !     !   ! !    !                                                !    ! !   !  !  !  !                                                       !!!!!         !!! !                 ", 
+  "                      !  !  !   ! !    !                                                !    ! !   !  !  !!                                                           !    !!!!       !                 ", 
+  "                      !  !  !   ! !    !                                                !    !  !   !  !  !                                                           !     !     !!                    ", 
+  "                    ! !  !  !     !                                                      !    ! !  !!  !  !                                                           !  !  !   ! !  !                  ", 
+  "                      !!  !       !                                                      !    ! !!  !  !   !                                                          !  !  !     !                     ", 
+  "                     !     !! !       !                                                  !   !!  !   !     !                                                             !  !     !                     ", 
+  "                     !!!   !     !!!!                                                     !!   ! !   !  !  !                                                         !   !     !      !                 ", 
+  "                     ! !   !!!   !                                                             ! !   !  !   !                                                        !     !   ! !    !                 ", 
+  "                    !!!    !     !!!!                                                     !    !  !   !     ! !                                                    !!!!    !   ! !    !                 ", 
+  "                     !    !!!!   !  !                                                      !    ! !   !    !!                                                        !  !!!!!  ! !    !                 ", 
+  "                          !     !!!!!                                                      !    ! !   ! !    !!                                                      !  !  !  ! !!                      ", 
+  "                    !     !!!!                                                             !    !     !!    !!                                                          !        !  !!                  ", 
+  "                    !     !     !                                                           !    !     !   ! !                                                      !     !   !      !                  ", 
+  "                    !     !     !                                                           !  !!!   !!!!   !!!                                                     !     !   ! !    !                  ", 
+  "                    !     !     !                                                                !!     !     !                                                     !  !  !   ! !    !                  ", 
+  "                    !     !     !                                                              !!!!   !!!     !                                                     !  !  !   ! !    !                  ", 
+  "                          !     !                                                              !  !     !!     !                                                  !!!     !     !                       ", 
+  "                                                                                               ! !!   !!!!     !                                                        !!!     !   !                   ", 
+  "                   !     !!!                                                                       !     !     !                                                  !!!    !  !  !!   !                   ", 
+  "                  !!     !     !                                                                   !     !      !                                                  ! !   !!    !  !                     ", 
+  "                   !     !!    !                                                                   !      !     !                                                 !! !  !! !   !                        ", 
+  "                  !! !  !!     !!!!                                                                 !     !     !                                                  !     !     !  !                     ", 
+  "                   !!   !!     !  !                                                                 !     !      !                                                      !  !  !!  !                     ", 
+  "                 !!           !!!!!                                                                 !      !     !!                                               !     !       !!!                     ", 
+  "                  ! !  !!!                                                                           !   !!!    !!                                                !     ! !   !                         ", 
+  "                  !     !     !!!!                                                                   !     !!   ! !!                                              !     !     !                         ", 
+  "                  !     !   ! !                                                                      !   !!!!   !!!                                               !     !     !                         ", 
+  "                  !  !  !   ! !    !                                                                  !     !     !!!                                                         !                         ", 
+  "                  !  !  !     !                                                                     !!!   !!!    ! !                                             !     !                                ", 
+  "                  !  !  !     !                                                                    !  !      !!    !                                             !     !     !                          ", 
+  "                     !     !      !                                                                ! !!!   !!!  !  !                                             !     !     !                          ", 
+  "               ! !     !   !      !                                                                    !!    !  !   !                                           !!!   !!!!   !                          ", 
+  "                 !!!! !!   ! !    !                                                                   !!  !   !  !  !                                             !   !      !                          ", 
+  "                 !     !  !!!!!!                                                                    !   ! !   !  !                                             !!!!   !!!!                              ", 
+  "                 !  !  !   ! !    !                                                                     !            ! !                                        !     !     !!!                         ", 
+  "                 !  !  !     !                                                                             !   !  !  !!                                       !!!     !!!   !  !                        ", 
+  "                 !  !  !     !                                                                      !    ! !   !  !!  !                                             ! !    !!! !                        ", 
+  "                    !        !                                                                      !    !     !!!    !                                        !      ! !   !  !                        ", 
+  "                    !     !      !                                                                        !  !! !  !  !                                        !     !     !!                           ", 
+  "              ! !     !   !      !                                                                   !    !!    !  !   !                                       !  !  !   ! !  !                         ", 
+  "                ! !  !!     !    !                                                                   ! !! !  !   !     !                                          !  !     !                            ", 
+  "                !     ! !   !!                                                                        !    ! !   !  !                                         !   !     !  !                            ", 
+  "                !!!   !     !  !                                                                      !    !        !   !!!                                   !     !   !      !                        ", 
+  "                ! !  !! !   !!!                                                                            !  !   !     !                                   !!!  !  !   ! !    !                        ", 
+  "               !!!   !!     !  !                                                                       !    ! !   ! !    !!                                   ! !!! !     !    !                        ", 
+  "                     !!!!  !!  !                                                                       !    !     !!    !!                                   !   !  !!!   !                             ", 
+  "               !     !        !!                                                                                   !   ! !                                   !     !     !!   !                         ", 
+  "               !     !!!   !                                                                            !   !!    !!!   !!!                                  !  !  !   ! !  !!!                         ", 
+  "               !     !     !                                                                              !  !      !     !                                  !  !  !     !    !                         ", 
+  "               !     !     !                                                                                !!!   !!!                                       !   !        !                              ", 
+  "               !     !     !                                                                               !  !      !     !                                !     !   !      !                          ", 
+  "               !     !     !                                                                               ! !!    !!!     !                              !!!  !  !   ! !    !                          ", 
+  "                     !     !                                                                                !  !     !      !                                !  !!!     !    !                          ", 
+  "                                                                                                               !      !     !                             !!!    !! !   !                               ", 
+  "              !     !!!!                                                                                        !     !      !                             ! !   !     !!   !                           ", 
+  "             !!!    !     !                                                                                     !            !                            !!!   !!!!   !  !                             ", 
+  "              ! !   !!!   !                                                                                     !      !     !!                           !     !      !!!                              ", 
+  "             !! !   !     !!!!                                                                                   !     !!   !!!                           !     !!!    !  !                             ", 
+  "              !     !!!   !  !                                                                                   !   !!!!   ! !!                          !    !!    !!!  !                             ", 
+  "            !!!     !    !!!!!                                                                                    !     !    ! ! !                       !      !!!   !  !                              ", 
+  "              !   !!! !   !                                                                                       !   !! !     !!                        !     !                                        ", 
+  "                 !       !!! !                                                                                           !    ! !                        !     !     !                                  ", 
+  "             !         !                                                                                           !!  !! !     !                       !      !     !                                  ", 
+  "             !     !   ! !    !                                                                                  !!!      !! !   !                     !!     !      !                                  ", 
+  "             !     !   ! !    !                                                                                    !!   !        !                       !    !     !                                   ", 
+  "             !  !  !   ! !    !                                                                                  !!!!      !  !   !                   !! !   !!     !                                   ", 
+  "             !  !  !   ! !    !                                                                                     !! !          !                    !!    ! !!   !                                   ", 
+  "           ! !  !  !     !                                                                                        !! !  !   !  !   !!                !!!    !!     !                                    ", 
+  "             !!!!!!!     !                                                                                            ! !   !     !!                  ! !   !  !   !                                    ", 
+  "                !     ! !!!!!                                                                                    !    !  !   !  !!  !                 !     !!                                          ", 
+  "                !     !                                                                                                ! !    !! !  !                !   !! ! !   !                                     ", 
+  "            !     !   ! !    !                                                                                    !    !  ! !!!  !   !               !  !  !!     !!                                    ", 
+  "            !     !   ! !    !                                                                                          !  !   !  !   !             !   !  ! !   !! !                                   ", 
+  "            !     !   ! !    !                                                                                     !    !! !   !  !   !  !          !  !  !     !!!                                     ", 
+  "            !  !  !   ! !    !                                                                                         ! !      !  !   !!!       !!!   !  !   !  ! !!                                   ", 
+  "            !  !  !     !                                                                                            !!  !  !   !   !  !!!        !!  !  !      !!                                      ", 
+  "           !!!  !!!     !                                                                                                 !      !    ! !!        ! !!   !   !  ! !!                                    ", 
+  "                  ! !  !!!                                                                                           !     ! !    !!   !!!!!     !    ! !      !                                        ", 
+  "           !!!                                                                                                        !    !  !  !!     !!! !   !   !  !!   !  !    !                                   ", 
+  "           ! !   !  !   !!!                                                                                           !     !   !  !!    ! !!  !    !  !!!    !    !                                    ", 
+  "          !!!!   !     !!                                                                                              !     !    ! !!    !  !!    !  !   !        !                                    ", 
+  "           !     ! !  !!! !                                                                                             !  !!!      !!!               !      !    !                                     ", 
+  "           !     !     !  !                                                                                             ! !  !!    !  !         !    !      !     !                                     ", 
+  "           !     !!!   !                                                                                                    !!!!     ! !         !  !    !  !!!  !                                      ", 
+  "           !     !     !                                                                                                   !!  !!   !   !        !!!       !   !                                        ", 
+  "           !     !     !                                                                                                    !!! !        !! !! !!!!    !  !     !                                       ", 
+  "                                                                                                                                 !         !!!!!!  !  !  !     !                                        ", 
+  "                                                                                                                                  !         ! ! !       !!    !                                         ", 
+  "                                                                                                                                   !!       ! ! !      !      !                                         ", 
+  "                                                                                                                                     !                ! !    !                                          ", 
+  "                                                                                                                                      !            ! !!  !  !                                           ", 
+  "                                                                                                                                       !!!        !!!  ! !                                              ", 
+  "                                                                                                                                           !!!!!!    ! !                                                ", 
+  "                                                                                                                                                     !!                                                 ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-multi-layout-1-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-multi-layout-1-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..40aadd6
--- /dev/null
+++ b/tests/visual_tests/grids/lines-multi-layout-1-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "10", 
+  "2", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                   !                                                                                                                                                    ", 
+  "                                                  !!                                                                                                                                                    ", 
+  "                                              !!! !!!                                                                                      !!!!!!                                                       ", 
+  "                                        !!!  !!  ! !!!!                                          !   !!                                   !!!!!!!                                                       ", 
+  "                                      !!!!!!!     !!!!!!                                   !!!  ! !!!!!!                                !!!!  !                                                         ", 
+  "                                    ! !!! !!      !!!!!!!!                               !!!!!!!   !! !!!                               !!!!!! !                                                        ", 
+  "                                  ! !! !!!       !!!!! !!!!                             !!!! !!     !! !!!!                            !!! !!!! !!                              !!  !!                  ", 
+  "                                  !!!! !!         !!!!! ! !!                           !! !!!        !!!!!!!                         !!!! !!!!!!!!!                           !!!! !!                   ", 
+  "                                !!!! !! !!         !!!!!! !!                         !!!!!!!!       !!!!!!!!!                       !!!!!!!!!!!!  !!    !                    !!!! !                     ", 
+  "                              !!!!! !!!!!!        !!!!!!!!!!!!                      !!!!!! !!!      !!!!!! ! !!                     !! !!!!!! !     !  !!!                  ! !!!!                      ", 
+  "                             !!!!!!!!!!!          !!! !!!!! !!                    !!!!!!!!!!!        !!!! ! !!!                       ! !!!!!!!!     !!!!!!               !!!! !!                       ", 
+  "                              !!!!!!!!!!!!         !!! !!  !                     !!!! !!!!!!         !!!!!!!!!!!!                   !!  !! !!!!!      !! !!!             !!!! ! !!                      ", 
+  "                               !! !!!!!!!!          !!  !   !!                   !! !!!!!!!!!!      !!!! !!!!! !!                  !!                  !!!!!!!         !!!! !!!!!!                      ", 
+  "                             !!   !! !!!                     !!                   !!!!!!!!!!!         !!!!!! !!              !!  !!                    !!! !!!!       !!!! !!!!!!                       ", 
+  "                            !!        !                       !!  !!!        !!  !!  !! !!!!           !!  !   !!  !!      !!!!!!!                     !!!!!!!! !    !!!!!!!!!! !!                      ", 
+  "                                                                !!!!!!     !!!! !!       !!                     !! !!!    !!!! !!                      !!!!!! ! !!    !!!!!!!!!!!!                      ", 
+  "                                                                 !! !!!   !!!! !!                                !! !!!! !! !!!                          !!!!! !!!!!   !! !!!!!!!                       ", 
+  "                                                                  !!!!!!!! ! !!                                    ! !!!!!! !!                         !!!!!! !!!!!! !!   !! !!                         ", 
+  "                                                                  !!! !!!!! !!                                      !!!!!! ! !!                        !!!!!!!!!!   !!                                  ", 
+  "                                                                  !!!!! !!!!                                         !!  !!!!!!                         !!!!!!! !! !                                    ", 
+  "                                                                  !!!!!! !!                                           !!!!!!!!                            !!      !                                     ", 
+  "                                                                   !!!!!!!                                             !!!!!!!!                                                                         ", 
+  "                                    #                             !!!!!!!!                                             !!!!!!!!         ##                                                   $          ", 
+  "                                  ####      #       ##            !!!!!! !!                            ##              !! !!!!          ###                                                  $          ", 
+  "                                #####     ## #     ####             !!! !             ##       ###    ####                !!!          ###                                                   $          ", 
+  "                              #######    ##   ##    ####            !!!              ####    ##  ##     ###                          #####   #                                               $          ", 
+  "                             ######### ##      ##    ####                          #####    ##    ##   ######                       ####### ####                           #       #         $          ", 
+  "                             ##########  ###  ####  ######                       #######   #     ## ## ## ####                    ######## ### ##                        ####     ##      $$ $          ", 
+  "                              # ### ######## #### # ########                    #### ###### ### #### ##########                   ### ##### ###  #       ##            #####     ##       $$ $          ", 
+  "                                  ## #####    #### #########                    ####### #######   ### ## ### #                        #### # #### ##     ###          #### ##  ##         $$ $          ", 
+  "                                 ######        #### ## ## #                      # #####  ####     #### # ##                           ###### ###  ##     ####       ######## ## ##       $$ $$$        ", 
+  "                               ## #####          ###  #                              ## ## #        #### ##                           #  ###         ##  ######     ########## ####       $  $$$$$$     ", 
+  "                              #######             #### ##                           ## ####           ######                        ## ####        ## ## # ######    ## ## ## ####        $$ $$$$$$     ", 
+  "                            ## #####               ## ####                        ## ####              # ####       ##             ## ####         ### ## ### ###         ## # ##         $$ $$$$$$     ", 
+  "                           #   ###                    ## ##       ##             #######                ###  ##     ###   ##      #######           #### ##### #        ## ####           $$ $$$$$$     ", 
+  "                     %         ##                     #### #     ####  ###     ## ####                   #### ##    ########    ##   ##              #### ####         ## ####            $$ $$$$$$     ", 
+  "                     %                                 ###  ##     #######    ##  ###                      ##  ##     #####    ##                     #######         # ####              $$ $$$$$      ", 
+  "                     %                                  #    ##    #####     ##    #                             #     ##     ##                        #### ##     #######               $$ $$$        ", 
+  "                     %                                        ##    ####   ##                                     ##  ## ##  #                           # ## ##   ## ####                $$ $$$        ", 
+  "                     %                                          ## ###### ##                                       ## ####### ##                           ### ####    ##                 $$ $          ", 
+  "                     %%%%                                        ####### #  #                                       ##  ########                            ###  #                        $$ $          ", 
+  "                     %%%%                                         ##   #######                                      # #  ######                              ##                              $          ", 
+  "                   %%%%%%                                        ## # ######                                        ##### ####                                                               $          ", 
+  "                   %%%%%%                                       #### # ## ##                                       #### ####                                                                 $          ", 
+  "                   %%%%%%                                        #### ###                                            #######                  &&                                             $          ", 
+  "                %%%%%%%%%                                         ####### &                                &&&&&      ####                  &&&&&&&                                          $          ", 
+  "                %%%%%%%%%              &&&&&                        ###& &&&&&                           && &&&&&                         &&&&&&&&&                                          $          ", 
+  "                %% %%%%%%            &&&&&&&                         &&&& &&&&                         &&&&&&                           &&&&&& &&&&&                                         $          ", 
+  "                %% %%%%%%          &&&& &&&&                        &&&&&  &&&&                       &&&& &&&&&&&                    &&&&&&&&& &   &                                        $          ", 
+  "                %% %%%%          &&&&& &&&&&&                     &&&&& &&&&   &&                  &&&&& &&&&&&   &                  &&&&&&&&&&&&    &&   &                                  $          ", 
+  "                   %%%%%%      &&&&&&&&&&&   &&                  &&&&&&& &&&&   &&                 &&&&&&&&&&&&    &   &             &&& &&&&&&&&     & &&&                               $$ $          ", 
+  "                   %%%%%%     &&&& &&&&&&&    &&  &&            &&&&&& &&&&&&    && &&             && &&&&&&&&      & &&&             &&&&&&&& &       &&&&&                              $$ $          ", 
+  "                     %%%%      &&&&&&&&&&      &&&&&             &&&&&&&&&&&      & &&&             &&&&&& &&&       &&&&             &&&&&&&&&&&       &&&&                              $$ $          ", 
+  "                     %%%%       &&&&&& &&&      & &&&             & &&&&&&&&       & &&            && &&&&&&&&        &&&&           &&  &&&&&&&        &&&&&      &&                     $$ $$$        ", 
+  "                     % %%      &  &&&&&&&&       &&&&&           &  && &&&&&        &&&&      &&  &&   & &&&          & &&&&    &&& &&     &&&           & &&&  &&&&&&                    $  $$$ $      ", 
+  "                     %        &   & &&&&         &&&&&&    &&& &&      &&           &&&&&& &&&&& &&                    & &&&&&&&&& &&                   &&&&&&&&&&&&&&                    $$ $$$$$$     ", 
+  "                     %       &                    & &&&&&&&&&&&&                     & &&&&&&&& &                     &&& &&&&&& &&                     &&&&&&&& & &&                     $$ $$$$$      ", 
+  "                     %                            && &&&&&&& &&                     &&&&&&& & &&                      &&&&& &  &&&                      &&&&&&&  &&                       $$ $$$$$      ", 
+  "                     %                           &&&&& &&  &&                      &&&&&&&  &&&                       &&&&&&&&&&                         &&&&& &&                         $$ $$$$$$     ", 
+  "                     %                           &&&&&&&&&&                          &&& &&&&                          &&&&& &                          &&&&&&&&                          $$ $$$$$      ", 
+  "                     %                            &&&&&&&                            &&&&&&&                           &&&&&&&                          &&&& &&&                          $$ $$$        ", 
+  "                     %                             &&&&&&&                          &&& &&&&                           &&&  &&&                           &&&                             $$ $$$        ", 
+  "                     %                            &&&&&&&&                          &&&&&&                              &&&&                               &&                             $$ $          ", 
+  "                     %                             &&&&&                              &&&&                                &&                                                              $$ $          ", 
+  "                     %                               &&&                                                                                                            ''' ' ' '             $$ $          ", 
+  "                     %                                                                                                                                              '''''''''''''''''        $          ", 
+  "                     % %%                                                                                                                                           ''''''''''      '        $          ", 
+  "                     % %%                                                                                  (                               ((((                        '''''        '        $          ", 
+  "                   %%% %%                                              (((                              ((((                             ((((((                        '''''        '        $          ", 
+  "                   %%% %%           (                                (((((                            (((((((                          (((((((               ''''''''''''''''''''''''        $          ", 
+  "                 %%%%% %%         (((                              ((((((                           ((((( ((                          ((((((((                                               $          ", 
+  "                %%%%%% %%       (((((                            ((((( (((                         (((((((((                          ((((((((                    ''''''''' '''''            $          ", 
+  "                %%%%%% %%     (((( ((                            (((((((((                          ((((((  (((((                      ( ((( ((((((((             ''''''''' '''''            $          ", 
+  "                %%%%%% %%   (((((((((   (((((                     ( (((  (((((((                       (((((     ((                        ((  ((   ((      (                             $$ $          ", 
+  "                %%%%%% %%    (( (((( (((    ((     ((                 ((( ((   ((      (                (( (((((  ((     ((              ((  ((((((( ((    ((                             $$ $          ", 
+  "                %% %%%  %       (( (( (((((( ((    (((               ((  ( ((((  (    (((             (( ((( ((((( ((   ((((            (( (((( ((((  ((   (((   (                        $$ $          ", 
+  "                   %%% %%        ((  ((((((( (((    ((             (( (((((((((  ((   (((   ((       ( ((((((   (   ((   (((  ((      (( (((((         (    (((((((                       $$ $$$        ", 
+  "                     % %%       (( (((( (   (((((   (((           (( (((((        ((   ((((((((    ((((((((          (    (((((((    (( ((((            (   ((((((                        $$ $$$        ", 
+  "                     % %%      ( (((((      ((( ((((((((((       ( (((((           (    ((((((    (((((((             (  (((((((    (((((((           (( ( ((((((                         $$ $$$$$      ", 
+  "                     % %%     ( ((((         ((( ((((((((((     ( ((((              (  (((((     (( (((              ((( ((((      ((  ((             ((((((((((    ((                    $$ $$$$$      ", 
+  "                     %       ( ((((           ((( ((((( (     ((  ((              (((((((((     ((   (              (( (((((((    (    (              ((( (( (((   ((                     $$ $$$$$      ", 
+  "                     %        ((((             ((((((((      ((    (             (((((( ((((   (                    ((( (( (((  ((                     ((( ((  ( (((                      $$ $$$$$      ", 
+  "                     %         ((              (((((((     ((                     ((((((  (( ((                      ((( (((  ((                        (((( (((((                        $$ $$$$$      ", 
+  "                     %                          (((( ((  (((                       (((( (((((                         ((((  ((                           ((((((  (                        $$ $$$        ", 
+  "                     %                           ( ((  (((                          (((((    ((                        ((((((((((        )))               (( (((((                       $$ $$$        ", 
+  "                     %                            (((((            **          +      (((((((((                          ((((((((        )))))))))))))))    ( (()()                       $$ $          ", 
+  "                     %                              (((  **       **           +       (( (((                               ( (          )))))))))))))))        ))))))))) )               $$ $          ", 
+  "                     %                                 *****    **             +                                                     )))))))))       )))        ))))))))) ))              $$ $          ", 
+  "                     %                                *****    **              +             ,                                             )))))))))))))))))))))))      )))))                $          ", 
+  "                     %                               ******   *                 +            ,                      ----- - ----           ))))))))))             ))))))))))))               $          ", 
+  "                     %                             ***********  **              +            ,                      --------- -----        ))))))))))             ))))))))))))               $          ", 
+  "                     % %%                          ******* *******              ++++         ,       --             - ------- -----           )))))               )))))))))))                $          ", 
+  "                     % %%                          ** *** *  ****               ++++        ,         ----------------------------           ))))))                 ))) )))  )               $          ", 
+  "                   %%% %%                               ** ** *                 + ++        ,                         ------- -                 )))                 ))))) )  ))              $          ", 
+  "                   %%% %%                              ** ****                +++ ++        ,                         ---------                                      ))))     )              $          ", 
+  "                   %%% %%                             * *****                 ++++++        ,                           -------                                                )             $          ", 
+  "                 %%%%% %%                           *******                   ++++++        , ,,                    .   - ----  ... . . ......                                 ))         $$ $          ", 
+  "                 %%%%% %%                          ******                   +++++++++       , ,,           . ...........------  ......... .....                                 )         $$ $          ", 
+  "                 %%%%% %%                         *  ****                   +++++++++ ,,,   ,,,,         ......... .....        ......... ....                                  )         $$ $          ", 
+  "                 %%%%% %%                       **    *                     ++ +++ ++ ,,,  , ,,          .......   ................................                             )         $$ $$$        ", 
+  "                 %%%%%                         **                           ++ +++ ++ ,, ,,, ,            ......... .             ..........                                    ) ))      $$ $$$        ", 
+  "                   %%%%%%            **       *                              +++++++++,, ,,, ,,          .. .........             .........                                     ) ))         $$$$$      ", 
+  "                   %% %%%          ****     **                                 +++++++,,,,,, ,,         .   .........             ........                                 ))   ) ))      $$ $$$$$      ", 
+  "                      %%%          ***     **             /// //               ++ +++ ,,,, ,,,,        ..   .... ...                 .....                                 ))   ))))      $$ $$$$$      ", 
+  "                      %%%        ******   *             ///// /////               +++,,,,, , ,,        .      . ....                 .....                                 )) ))))))      $$ $$$$$      ", 
+  "                      %%%      ******** **  **        /////// /////               +++,,,  ,,,,,        .      ....                                                         )))))) ))      $$ $$$$$      ", 
+  "                      %        ******* *******       //// //////            //    +  ,,,  , ,,         .                                     0                             )))) ))))      $$ $$$        ", 
+  "                      %        ** *** * ****         /// ///// ///////     ////   ++      , ,,        .                                0000000000                         ))))) ) ))      $$ $$$        ", 
+  "                      %             ** ** *          ///////////      /////////    +      ,,,,        .                                0000000000                          )))) ))))     $$$ $$$        ", 
+  "                      %            *******            //////////           /////   +      ,,,,      ...                                   000 0                           ))))) ))))      $$ $          ", 
+  "                      %           * *****            / ////////           /// ///  +      ,         ...                                   00000                           )))   ))))      $$ $          ", 
+  "                      %         *******            //   / /////           //// //  +      ,        ....                                   00000                           )))  ) ))          $          ", 
+  "                      %        *******            //      //               // //// +     ,         ......                     00000000000000000000000000000                    ) ))          $          ", 
+  "                      %       *  ***            //                        /////////      ,         .  ...                            000 0 0 0 00                              ))))          $          ", 
+  "                      %     **    *        //  //                        / /////  //     ,         .  ... ..                         000000000000000                           ))))          $          ", 
+  "                      %     *              // //                          //////////     ,         .. ... ..                         000000000000000                           )             $          ", 
+  "                      %%%%                 ///                             // ///////    ,         .. ... ..                              ))) ) ) )                           ))             $          ", 
+  "                      %% %                /////                            // ///////    ,         .. ......                              )))))))))             )))))))))     )              $          ", 
+  "                      %%%%                ///////                                 /      ,         .. ......                              ) ))) )))             )))))))))     )              $          ", 
+  "                   %%%%%%                 // /// /                                 /               .. ...                                   )))))                 ))))))     ))           $$$           ", 
+  "                   %%%%%%%                // //////                                //              .. ...                                   )))))                 ) ))))     )            $$$           ", 
+  "                 %%%%%%%%                 // /////                                  //             ....                            )))))))))))))                   )))))    )             $$$           ", 
+  "                 %%%% %%%%               /////////                                   /             ....                                        )))))))))))))))))))))))))))))              $$$ $$        ", 
+  "                 %%%%%%%%                 /// ////                                   /             .. .                                ))))))))) ))           ) )   ) )))) )              $$$$$$        ", 
+  "                 %%%% %%%%               /////////                                  //                .                                ))))))))) )))))        ))))))))) )))))               $ $$$$      ", 
+  "                 %%%%%%%%                //////                                     /                 .                                        ) )))))        ))))))))) )))))             $$$$$$$$      ", 
+  "                 %%%% %  %               // ///                                     /                 ..    ..                                                                            $$$ $$$$      ", 
+  "                   %%%%%%%               // /                                       /                  .    ...                                                                          $$$$$$$$$      ", 
+  "                      %%%                ///                                        /                   .    ........             ..........                                              $$$ $$$$      ", 
+  "                      %%%                  /                                        /                    .    .......             ..........                                              $$$$$$$$      ", 
+  "                      %%%                  /                                        /                    ..   ..                    ......                                                $$$$$$        ", 
+  "                      %                    /                                       /                      ..  .....                 ......                                               $$$$$$$        ", 
+  "                      %                    /                                       /                      . ..  ...                  .....                                                $$$           ", 
+  "                      %                    //                                      /                     .... .....................................                                       $$$           ", 
+  "                      %                     //                                     /                     ..... .                ... . . ....                                                $           ", 
+  "                      %                      /                                     /                       .............        ......... .....                                             $           ", 
+  "                      %                       /                                    /                         ...........        ......... .....                                             $           ", 
+  "                                              //                                  //                                                                                                        $           ", 
+  "                                               /                                  /                                                                                                         $           ", 
+  "                                                /                                /                                                                                                                      ", 
+  "                                                 /                             //                                                                                                                       ", 
+  "                                                 //                           //                                                                       1                                                ", 
+  "                                                  /                         //                                          1111111111               1111111111                                             ", 
+  "                                                   /                       //                                           111111111                 111111111                                             ", 
+  "                                                    /                     //                                            11111111                    11111                                               ", 
+  "                                                    ///                 //                                                 11111                    11111                                               ", 
+  "                                                      ///////          //                                                  11111                    111                                                 ", 
+  "                                                             ///////  //                                            11111111111111111111111111111111111111111111111                                     ", 
+  "                                                                   ///                                           111                           111 1 1 1 11                                             ", 
+  "                                                                                                                      111111111 11111          111111111111111                                          ", 
+  "                                                                                                                      111111111 11111          111111111111111                                          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-multi-layout-1-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-multi-layout-1-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..74daf77
--- /dev/null
+++ b/tests/visual_tests/grids/lines-multi-layout-1-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "6", 
+  "16", 
+  "10", 
+  "2", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                               !                                                        ", 
+  "                                                                                             !!!!                                         !!!!!!                                                        ", 
+  "                                                                                            !!!!!                                         !!!!!!!!!!                                                    ", 
+  "                                               !                                         !!!!!!!!                                         !!!!!!!!!!                                                    ", 
+  "                                              !!!!                                     !!!!!!!!!!                                          !!!!!!!!!!                                                   ", 
+  "                                            !!!!!!!                                    !!!!!!!  !!!                                        !!! !!!!!!!!!                                                ", 
+  "                                           !!!   !!!                                    !!!!!  !!!!!                                         !!! !!!!!!                                                 ", 
+  "                                         !!!       !!!                              !!!  !!  !!!!  !!!                             !!!      !!!!! !!!!!!!!!                                             ", 
+  "                                        !!!         !!!                            !!!!     !!!     !!!        !!                 !!!!!   !!!! !!!  !!!!!!!                         !!                  ", 
+  "                                      !!!            !!!                         !!!!!!!!  !!!       !!!      !!!!             !!!!!!!!  !!! !! !!!  !!!!!! !                     !!!                   ", 
+  "                                    !!!!              !!!                       !!!!!!!! !!!!!!       !!!     !!!!           !!!!!!!!!! !!!!!!!   !!! !!!! !!!!                  !!!                    ", 
+  "                                   !!!                  !!!                   !!!!!!!!! !!! !!!         !!!  !!!!!!!         !!!!!!!  !!!!!!!!!!!! !!! !!!  !!!                 !!!                     ", 
+  "                                 !!!!                    !!!                  !!!!!!  !!!! !!!!!         !!! !!!!!!!         !!!!!!  !!! !!!!!!!!!! !!!    !!!!!              !!!                       ", 
+  "                                !!!                       !!!             !!!!!!!!!  !!! !!!!!!!!         !!!  !!!!!!!!   !!!  !!   !!!   !!!!!!!!!!  !!! !!!!!!!            !!!                        ", 
+  "                              !!!!          ###            !!!            !!!!!!!!  !!! !!!!!!!             !!! !!!!!!!  !!!!     !!!      !!!!!!!!!!!!!!!  !!!!!!          !!!                         ", 
+  "                             !!!            ######           !!!       !!!!!!!!!  !!! !!!!!!!!               !!! !!!!!!!!!!!!!!  !!!       !!   !!!!!!! !!! !!!!!!!       !!!                           ", 
+  "                            !!!             ######            !!!      !! !!!!!! !!!  !!!!!!                  !!!  !!!!!!!!!!! !!!!!!      !!!!  !!!!!!! !!! !!!!!!      !!!                            ", 
+  "                                            ########           !!!      !!!!!! !!!!!!!!!!!! !!!!               !!!  !!!!!!!!! !!! !!!      !!!!!!! !!!!!!! !!! !!!!    !!!!                             ", 
+  "                                            #########           !!!     !!!!  !!! !!!!!!!! !!!!!!       ##       !!! !  !!   !!!!!!!!!!    !!!!!!!  !!!!!!  !!!       !!!                               ", 
+  "                                               #######            !!!   !!!  !!!!!!!!!!! !!!!!!!!      ####       !!!   !! !!! !!!! !!!    !!!!!!!!! !!!!!   !!!     !!!                                ", 
+  "                                             ############          !!!     !!! !!!!!!!!!!!!!!!!!       ####        !!!    !!!  !!!!!!       !! !!!!!  !!!     !!!  !!!                                  ", 
+  "                                             ############           !!!   !!!  !!!!!!!!!!!!!!!        #######        !!! !!!!!!!!!!!!           !!!!            !!!!!                                   ", 
+  "                                             ## ## #######           !!!!!!!    !!!!  !! !!!!         #######         !!!!  !!!!!!!              !!              !!!                                    ", 
+  "                                             ####### #######           !!!       !!   !!!!!             ########      !!!!!!!!!!!  !!!                    ##                                            ", 
+  "                                             #######  ######            !              !!!               #######      !!!!!!!!!! !!!!!!                  ####                               $$          ", 
+  "                                           ### ####### #####                                    #        ######## #   !!!!!!!!  !!!!!!!                  #### #      ###                    $$          ", 
+  "                                         ######  #####  ###    ##                             ####      ###########   !!!!!!!!!!!!!!!!                  #######     ####                    $$          ", 
+  "                                        ###  ###  ####   #    ####                           ### ###   ##### #######  !!!! !!!!!!!!!         ##         ########  ########                  $$          ", 
+  "                                      ####     ### ##        ######       ###              ####   ###  ###### ########      !!!!!!!        #####          ###############          #        $$          ", 
+  "                                     ###        ###          #######     ####             ###      ### ####### #######       !!!!         ###  ###         #############         ####       $$          ", 
+  "                                   ####  ## ##   ###         #######  ########           ### ##     ###   ###### ######      !!!         ###    ###         ##########          ###         $$          ", 
+  "                                  ###   ########  ###           ##############         ###   ##### #  ### ####### ###                   ###      ###           #####           ###          $$          ", 
+  "                                ###   ##########    ###         ############          ### ##########   ### ######  ##                 ###          ###        ### ##         ###            $$          ", 
+  "                              ####   ########### ### ###         #########          ####  ###########   ###  ###                     ###            ###      ####  ####     ###             $$          ", 
+  "                             ###  ######### ###  #### ###          ## ##           ###    ##############  ### ##                    ###              ####   ###########   ####              $$          ", 
+  "                           #### ##########   ##  ####  ###         ##  # ##       ###      ####  ######    ###                    ###              ##  ###  ###########  ###                $$          ", 
+  "                           ##  #########        #####    ###       ###  ####    ###         ##    ######### ###                  ###              ####  ###  #########  ###                 $$          ", 
+  "                     %     #   ## #####         #######   ###     ##########   ###   ###            #######  ###                ###               ###### ####   ####  ###                   $$          ", 
+  "                     %          ######           #######   ###    ## ####### ####   #####            ########  ###             ###               #######   ###       ###                    $$          ", 
+  "                     %          ####               ######    ###  ########  ###  ########             ###  #### ###          ###                  #######   ###    ####                $$$$ $$          ", 
+  "                     %           #                   ####     ### #######  ### #########               ##  ####  ###        ###                     #######  #### ###   ###            $$$$ $$          ", 
+  "                     %                               ###       ###     # ###  ########                     #####   ###     ###                      ########   #####   #####           $$$$ $$          ", 
+  "                     %                                          ###     ###   ########                    #######   ###  ###                          ######### ##  ########           $$$$ $$          ", 
+  "                     %                                            ### ####  ###  ###                        ######   ######                             #######   ##########           $$$$ $$          ", 
+  "                     %                   &&                     ## #####   ####  ##                          ######   ####                               ################              $$$$ $$          ", 
+  "                     %               &&&&&&  &&                #### ### ########                              #####     #                 &&               ##############             $$$$$ $$ $$$$     ", 
+  "                     %               &&&&&&&&&&&               ####     #### ###                       &&&     ####                     &&&&&               ######  ####              $$$$$ $$$$$$$     ", 
+  "                     %               && &&&&&&&&&&&           ################      &&               &&&&&            &&             &&&&&&&&                #####  ##                $$$$$ $$ $$$$     ", 
+  "                     % %%%%%         &&&&&&&&&&&&&&           ##############       &&&&           &&&&&&&&           &&&&          &&&&&&&&&&                  ###                    $$    $$ $$$$ $$$$", 
+  "                     % %%  %         &&&& &&&&&&&&&            #############      &&&&&         &&&&&&&&&&   &&&    &&&&&          &&&&&&&&&  &&&&&&&                                  $$ $ $$ $$$$ $$$$", 
+  "                     %  %%%%            &&     &&&&&             #########&&&&&&  &&&&&&&       &&&&&&&&  &&&&&&&&& &&&&&&&        &&&&&&& &&&&&&&&&&&                                $$$$$ $$$$$$$ $$$$", 
+  "                     % %%%%%%         &&&&&&&& &&& &&&             ### ##&&&&&&&& &&&&&&&         &&&&  &&&&&    &&& &&&&&&     &&&  &&   &&&&      &&&                               $$$$$ $$ $$   $$$$", 
+  "                %%%%%% %%%%%%       &&&&    &&& &&&&&&               &&&&      &&&  &&&&&     &&&  &&  &&&        &&&  &&&&&    &&&     &&&&         &&&                               $$$$ $$ $$$$ $$$$", 
+  "                %%%%%% %%%%%      &&&&&& &&&& && &&&&&&&   &&       &&&          && &&&&&&&  &&&&&   &&&           &&& &&&&&&&&&&&&&&  &&&            &&&                              $$$$ $$ $$$$ $$$$", 
+  "                %% %%% %%%%%    &&&&&&&&&&&&&& && &&  &&&  &&&    &&&&            && &&&&&&&&&&&&&  &&&             &&&&&&&&&&&&&&&&& &&&&             &&                             $$$$$ $$$$$$$ $$$$", 
+  "                %%%% %  %%%%   &&& &&&&&&&&&&& &&&   &&&&&&&&&&  &&&              &&&&&&&&&&&&&&&  && &&&            && &&&&&&&&&&&  && &&&             &&                            $$$$$ $$ $$$$$$$$$", 
+  "                %%%%%% %%%%%  &&&  && &&&&&&&&&&&&& &&&&&&&&&&  &&&                &&  &&&&&&&&& &&& &&&&             && &&&&&&&&& &&& &&&&&&            &&          &                 $$$  $$ $$$$$$ $$", 
+  "           %%%%%%%%%%%%%%%%  &&&   &&&&&&&&&&&&&&&& && &&&& &  &&&                  && &&&& &&  &&&&&&&&&&&           &&& & && &  &&&&&&&&&&&            &&&        &&&                $$$$ $$ $$$$$$$$$", 
+  "           %%%%%%%%% %% %%%% &&     &&&     &&&&& &&   &&&&  &&&&                   &&&  && && &&& &&&&&&&             &&&       &&& &&&&&&               &&&     &&&                 $$$$$ $$$$$$$$$$$ ", 
+  "           %% %%%%%% %% %%%%%        &&&&&& &&&&&&&&&       &&&                      &&&     &&&& &&&&&&&               &&&&  &&&&&&&&&&&&&                &&&&&&&&&                  $$$$$ $$ $$$$     ", 
+  "           %%%%%%%%%%%% %%%%%       &&&&&&&& && &&&&&&&   &&&&                         &&&&&&&&&&&&&&&&                   &&&&&&& &&&&&&&                    &&&&&                     $$$$ $$$$$$$     ", 
+  "           %%%% %%%%%%% %%%%        &&&&&&&&&&&&&&&  &&&&&&&                            &&&&&& &&&&&&& &&&                  &&&&&&&&&&&  &&&                                           $$$$ $$$$ $$     ", 
+  "           %%%% %%%% %%%% %%         &&&&&&&&& &&      &&&                               &&&&&&&&&&&&  &&&&                 &&&&&&&&&&&  &&&&                                         $$$$$ $$$$$$$     ", 
+  "           %%%% %%%% %% % %%          && &&&&& &&                                         &&&&&&&&&& &&&&&&       '         & &&&&&&&&&&&&&&&    ''''''                               $$$$$ $$          ", 
+  "           %%%% %%%%%%% %%%%              &&&                                  '''        & &&&&&&&&&&&&&&       ''''       & &&&&&&&&&&&&&&     ''''''                                $$$$ $$          ", 
+  "           %%%% %%%%%%% % %%               &                                   '''' '     &&&&&&&&&&&&&&&        '''''''    &&&&&&&&&&&&&&       ''''''''''                           $$$$$ $$          ", 
+  "           %%%% %%%% %%                                                        ''''''     &&&    &&&&&&          ''''''           && &&&&        ''''''''''                   ((((((( $$$$$ $$          ", 
+  "           %%%% %%%% %%    %                                                   '''''''           &&&&            '''''''''        &&&&&          '''''''''''                  ((((((( $$$$$ $$          ", 
+  "                %%%%%%% %%%%                                                   ''''''''''        &&&&             '''''''''        &&&&            '''''''''''                      (       $$          ", 
+  "                %%%%%%% %%%%                                                      '''''''                          ''''''''                       ''''' ''''''                      (       $$          ", 
+  "                % %% %% %%%%                                                    '''''''''                         ''''''''''''                    '' ''' ''''''                     (       $$          ", 
+  "                     %% %%%%                                                   ''''' '''''''                      '''' '''''''''                  ''''''' '''''''((((((((((((((((((((       $$          ", 
+  "                     %% %%%%                                                   '' '' '''''''''                    ''''' ''''''''                   ''''''' ''''''((((((((((((((((((((       $$          ", 
+  "                     %% %%%%                                                   ''''''' '''''''''                  '''''' '''''''''             ''''' '''''' '''''                           $$          ", 
+  "                     %% %%%%                                              ''''' '''''' '''''''''           '''''''  ''''   '''''''          ''''''''' '''''  ''                             $$          ", 
+  "                     %% %%%%          '''''''                           ''''''''  '''''' '''            '''''''''''  ''''' '''            '''''     '' ''''   '                             $$          ", 
+  "                     %% %%%         ''''''''''                        ''''     ''' ''''' '''           ''''       '' '''''               '''   '     '' ''                                  $$          ", 
+  "                     %%           ''''       '''                    '''     '   ''' ''''             ''''     ''   '' ''''             '''    '''     ''                                    $$          ", 
+  "                     %%          '''          ''                  ''''    '''    '' ''''            '''  ''''''     '' ''             '''  ''''''''''  ''                                   $$          ", 
+  "                     %%        ''''            ''                '''   ''''''''   '' ''            '''   '''''''''  '''              '''   ''''''''''' '''                                  $$          ", 
+  "                     %%       '''               ''              '''   '''''''''''  ''             '' '' '''''''''''' ''             ''   '''''''''''''  ''           '                      $$          ", 
+  "                     %%      '''                '''            ''' ''''''''''''''' '''          '''  '''''''''''''''  ''          '''  ''''''''' '''  '' ''         '''                     $$          ", 
+  "                     %%     '''                  ''           ''' '''''''''''''''   ''         ''' ''''''''    ''''''' ''        ''' ''''''''     ''  '' '''      ''''                      $$          ", 
+  "                     %%      '                    ''        '''' ''''''''     ''  '' '''      '''  ''''''''     ''  '' '''     '''' '''''''''        ''''  '''' ''''                        $$          ", 
+  "                     %%                            '''    ''''  ''''''''      ''  ''  ''''  ''''   ''''''          ''''  ''''''''   ''' '''         '''''   '))))))                         $$          ", 
+  "                     %%                             '''''''''    '''''          '''''  '''''''      ''''          '''''    ''''      '''''          ''''''   ))))))))))))))                 $$          ", 
+  "                     %%                               '''''       '''           '''''     ''        '''           '''''''             '''            ''''''' )) )))))))))))                 $$          ", 
+  "                     %%                                           *'*          +' '''''                             '''''''                            ''''''))))))))))))))))))             $$          ", 
+  "                     %%                                          ***           + ''''''''                           '''''''                            ' '''')))))))))))))))))))            $$          ", 
+  "                     %%                       ***               ***            ++  ''''''                            ''''''          )))))))))))))))))   '''            ))))))))))          $$          ", 
+  "                     %%                       ***             ***              ++    ''''    ,                         ''''           ))))))))))))))))))))))))))))))))))) ))))  )))         $$          ", 
+  "                     %%                    ********          ***               ++     ''     ,   ,,,                                                      ))))))))))))))))) ))  ))))        $$          ", 
+  "                     %%                    ********         ***                ++           ,,  ,,,,                                                          ))))))  )) )))   )))))        $$          ", 
+  "                     %%                   *******         ***                  ++           ,,  ,,,, ---------------                                          ))))))))))  )))) )))))        $$          ", 
+  "                     %%                 *******          ***                    +           ,,  ,,,, -----------------------------                            ))))))))))))))))  )))))       $$          ", 
+  "                     %%                ***********      ***                     ++,,,,      ,,  ,,,,               ..  ..  ....---                            )))))))))))))) )) )))))       $$          ", 
+  "                     %%             *********  ****   ***    *                  +,,,,,      ,,  ,,,,       ..  ........... ..........                         ))) ))))))))))) )) )))))      $$          ", 
+  "                     %%            ****************  ***   ****                 +,,,,,      , ,,,,,    ...................  .........                            ))))  )))))) )) ))))) $$$$ $$          ", 
+  "                     %% %%%%%     ***************** ***   *****                 +,, ,,     ,, ,,,,,    .. ................  .........                            ))))))  )) ))))) )))) $$$$ $$          ", 
+  "                     %% %%%%%    ***************  ***  ********                 +,,,,,,,,, ,, ,,,,,     ..................  ..... ...                            ))))))) ))))))))      $$$$ $$          ", 
+  "                     %% %% %%     *****  * ****  *** *********                  ,,,,, ,,,, ,, ,,        ........                                 ..              )))))))  )))) ))      $$$$ $$          ", 
+  "                     %% %%%%%      ***   ****   ***  ********                   ,,,,, ,,,, ,,           ..      ...................................              )))))))))))   ))      $$$$ $$          ", 
+  "                     %% %%%%%      **    **** ***  *   ****                      ,,,  ,,,, ,,  , ,,      ............................                                )))))     ))      $$$$ $$          ", 
+  "                %%%%%%% %%%%%                ***   ***  **                       ,,,, ,,,, ,, ,,,,,     ......  ..  ..  ..  ..                                        )))       )     $$$$$ $$ $$$$     ", 
+  "                %%%%%%% %%%%                ***   *****                         ,,,,,,,,,  ,  ,,,,      ..  ...................                                                 )     $$$$$ $$$$$$$     ", 
+  "                %% %%%% %%%%              ***  ********                         ,,,,,,,,, ,,  ,,,,     ..   ............... ..                                                  )     $$$$$ $$ $$$$     ", 
+  "                %%%%%%% %%%%%            ***   *******                          ,,,,,,,,, ,,  ,,,,    ..    .. ................                                                 )     $$    $$ $$$$ $$$$", 
+  "                %%%%%%% %%%%%           *** *********      /                    ,,,,,, ,, ,, ,,,,,    ..    ...................                                                 )      $$ $ $$ $$$$ $$$$", 
+  "            %%%%%%%%%%% %%%%          ***   *******      /////////             ,,,,,,,,,, ,,  ,,,,    ..     ..  .... .. ..                                                    ))     $$$$$ $$$$$$$ $$$$", 
+  "           %%%%%%%%% %% %%%%         ***   ******       ///  ////////////      ,,,,, ,,,, ,,  ,,,,    ..         ...........                                                   ))     $$$$$ $$$$$$$ $$$$", 
+  "           %%%%%%%%% %% %%%%%       ***  ********      ///          ////////   ,,,,+      ,  ,,,,,    ..         .. ........                                                   ))      $$$$ $$ $$$$ $$$$", 
+  "            %%%%%%%%%%% %%%%%     ***  ********      ///                  ///  ,, ,,     ,,  ,,,,     ..         ...........                                                   ))      $$$$ $$ $$$$ $$$$", 
+  "           %%%% %%%%%%% %%%%     ***  ********      ///                     // ,,,,,     ,,  ,,,,     ..          .........                                                    ))     $$$$$ $$$$$$$ $$$$", 
+  "           %%%% %%%% %% %%%%    ***   *******      ///                      ///,,,,++    ,,  ,,,,     .                                         000000))))))  ))  ) )))))      ))     $$$$$ $$$$$$$$$$$$", 
+  "           %%%% %%%% %% %%%%% ***      ****      ///                         //    ++    ,,  ,,,,     .                       000000000000000000000000)))))))))))))))))))      ))      $$   $$ $$$$$$ $$", 
+  "            %%% %%%%%%% %%%%%***       ***      ///                           //         ,, ,,,,,    ..                                               )))))))))))))))))))      )       $$$$ $$ $$$$$$$$$", 
+  "           %%%%%%%%%%%% %%%%***               ////                             //        ,, ,,,,,    ..                                               ))))))))))) )))))       ))       $$$$ $$$$$$$$$$$ ", 
+  "           %%%%%%%%% %%     *                ///                               ///       , ,,,,,     ..      .....                                    ))) ))))))) )))))       ))      $$$$$ $$$$$$$     ", 
+  "            %%% %%%% %%    %%                //                                 //      ,, ,,, ,     ..      .....                                         ))))               ))       $$$$ $$$$$$$     ", 
+  "                %%%%%%% %%%%%                //                                  //     ,, ,,,,,     ..      .. ..                                        )))))))))))         ))       $$$$ $$$$ $$     ", 
+  "                %%%%%%% %%%%%                /                                    //    ,,    ,,     ..      .....                                        )) ))))))))         ))      $$$$$ $$$$$$$     ", 
+  "                %% % %% %%%%%               //                                    ///                ..      .....                                        )))))))))))        ))       $$$$$ $$          ", 
+  "                     %% %%%%                //                                     //                ..      .....                                         ))))))))))       ))        $$$$$ $$          ", 
+  "                     %% %%%%                //                                      //                .      ....                  )))))))))))))))))))))))              ))))))        $$$$$ $$          ", 
+  "                     %% %%%%                //                                      //                .      ..... ..  ..            ))))))))))))))))))))))))))))))))))))))))         $$$$$ $$          ", 
+  "                     %% %%%%                //                                      //                ..      ............                                      ))))                  $$$$$ $$          ", 
+  "                     %% %%%%                /                                       //                ..       ...........                       )))))   )   )       )))                    $$          ", 
+  "                     %% %%%%                /                                       //                ..       ...........                       ))))))))))))) )))  ))))))))))              $$          ", 
+  "                     %%                    //                                       //                ..    ..............                       ))))))))))))))))))  )))))))))              $$          ", 
+  "                     %%                    //                                       /                  ..   .....                                ))))))))) ) ))) )   )))))))))              $$          ", 
+  "                     %%                    //                                      //                  ...  ...........                          ))))))))))) ))))))  )))))))))              $$          ", 
+  "                     %%                    //                                      //                   ..  ...........                                        ))))                         $$          ", 
+  "                     %%                    //                                      //                 .. ..  .. .......                                                                     $$          ", 
+  "                     %%                    /                                       //               ....  ...   . .....                                                                     $$          ", 
+  "                     %%                   ///                                      //              ......  ....                                   .                                         $$          ", 
+  "                     %%                    //                                      //              .......   ......................................                                         $$          ", 
+  "                     %%                     //                                     /                .......    ..                                                                           $$          ", 
+  "                     %%                     ///                                   //                  ....... ..                                                                            $$          ", 
+  "                     %%                      //                                   //                  .......... .... ......... 111 1   1   1   11                                          $$          ", 
+  "                                              //                                  //                   ..............  .........111111111111111111                                          $$          ", 
+  "                                               //                                ///                      .......  .   .........111111111111111111                                          $$          ", 
+  "                                               ///                              ///                         .........  .........11111111111 1111111                                                     ", 
+  "                                                //                             ///                               ..             11111111111 1111111                                                     ", 
+  "                                                 //                          ///                                                     1111                                                               ", 
+  "                                                  //                        ///                                                     11111111111                                                         ", 
+  "                                                  ///                     ////                                                      11 11111111                                                         ", 
+  "                                                   //                    ///                                                         1111111111                                                         ", 
+  "                                                    /////               ///                                                          111 111111                                                         ", 
+  "                                                     ///////////      ////                                                                             111111111111                                     ", 
+  "                                                          //////////////                                         11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                                 //////                                          111111111111111111111111                                                               ", 
+  "                                                                                                                                       11     11111                                                     ", 
+  "                                                                                                                           111111  11 111111111111111111                                                ", 
+  "                                                                                                                           1111111111111111111  111111111                                               ", 
+  "                                                                                                                           11 111111111111 11   111111111                                               ", 
+  "                                                                                                                           1111111111111111111  111111111                                               ", 
+  "                                                                                                                           11111111 11111 1                                                             ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-multi-layout-2-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-multi-layout-2-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..9f99439
--- /dev/null
+++ b/tests/visual_tests/grids/lines-multi-layout-2-800-800-1.0-grid-reference.json
@@ -0,0 +1,209 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                    !!!                                                                                                                                                 ", 
+  "                                                    !!!!                                                                                                                                                ", 
+  "                                                   !!! !!!!!!!!                                                                                                                        !                ", 
+  "                                                 !  ! !    !  !!                                                                                                                       !                ", 
+  "                                                  !!!!   ! !!   !                                                                                                                      !                ", 
+  "                                                !! !!    !! ! !  !!                                                                                                                    !                ", 
+  "                                                !  !        !! !  !                                                                                                                    !                ", 
+  "                                              !!  !         !!!!   !                                                                                                                   !                ", 
+  "                                             !!! !               !! !                                                                                                                 ! !!!             ", 
+  "                                            !!!!!!              !!!  !                                                                                                                !  !              ", 
+  "                                              ! !                ! ! !!                                                                                                               !                 ", 
+  "                                            !! !                   !! !                                                                                                               !                 ", 
+  "                                             ! !                    !! !                                                                                                              ! !               ", 
+  "                                              !                   ! !! !!                                                                                                             !  !!             ", 
+  "                                              !                      !! !                                                                                                             !                 ", 
+  "                                             !                       !   !                                                                                                            !!!!              ", 
+  "                                             !                       !   !                                                                                                           !!!!!              ", 
+  "                                            !                             !                                                                                                          !                  ", 
+  "                                            !                             !                                                                                                          !  !!              ", 
+  "                                           !!                              !                                                                                                         !                  ", 
+  "                                           !                               !!                                                                                                        ! !                ", 
+  "                                           !                                !                                                                                                        ! !                ", 
+  "                                          !!                                !                                                                                                        !  !               ", 
+  "                                          !                                  ! !!!                                                                                                   !                  ", 
+  "                                          !                                  !  !                                                                                                    !                  ", 
+  "                                         !                                    ! !!!                                                                                                 ! !                 ", 
+  "                                         !                                    ! !!                                                                                               ! !!  !!               ", 
+  "                                         !                                     ! !!                                                                                              !  !                   ", 
+  "                                        !                                      !!!!                                                                                              !! !                   ", 
+  "                                        ! ! !                                   !!!!                                                                                             !  !                   ", 
+  "                                        ! !                                     ! !!                                                                                             !! !                   ", 
+  "                                       !!!                                      !!                                                                                                  !                   ", 
+  "                                       !   !                                     ! !                                                                                             !! !                   ", 
+  "                                       ! ! !                                     ! !                                                                                               !                    ", 
+  "                                       !! !!                                      ! !!                                                                                          !!!!                    ", 
+  "                                      !   !                                       ! ! !                                                                                         !! !                    ", 
+  "                                      !  !                                         !! !                                                                                         !! !                    ", 
+  "                                      ! !!                                         ! !!                                                                                         !  !                    ", 
+  "                                     !                                             !                                                                                           !!  !                    ", 
+  "                                     ! !!!                                          !                                                                                          !!  !                    ", 
+  "                                     ! !!                                       !!! !                                                                                            ! !                    ", 
+  "                                     ! !!                                        !  !!                                                                                         !  !                     ", 
+  "                                    !  !!!                                        !  !                                                                                           !!                     ", 
+  "                                    !  !                                          !  !                                                                                            !                     ", 
+  "                                    ! !!                                          !   !                                                                                           !                     ", 
+  "                                    !  !                                         !!!  !                                                                                           !                     ", 
+  "                                  !!  !                                            !! !                                                                                           !                     ", 
+  "                                !  !   !                                            !  !                                                                                          !                     ", 
+  "                                !! !                                                   !                                                                                         !!                     ", 
+  "                                 ! !                                                !!!!!                                                                                        !                      ", 
+  "                                !!!                                                  !! !                                                                                        !                      ", 
+  "                                 !!                                                 ! !!!                                                                                        !                      ", 
+  "                                ! !                                                   !  !                                                                                       !                      ", 
+  "                                  !                                                 !! ! !                                                                                       !                      ", 
+  "                                ! !                                                  ! !!!                                                                                       !                      ", 
+  "                               !!!                                                        !                                                                                      !                      ", 
+  "                              !!!!                                                    ! ! !                                                                                     !                       ", 
+  "                              !!!!                                                      ! !                                                                                     ! ! !                   ", 
+  "                             !!! !                                                         !                                                                                    !  !                    ", 
+  "                             !!! !                                                         !                                                                                    ! !                     ", 
+  "                             !!!!                                                          !!                                                                                   !                       ", 
+  "                             !! !                                                           !                                                                                   ! ! !                   ", 
+  "                                !                                                           !                                                                                   ! !!!                   ", 
+  "                                !                                                           !!                                                                                 !   !                    ", 
+  "                                !                                                            !                                                                                 ! !!!                    ", 
+  "                               !                                                             !                                                                                 ! !!!                    ", 
+  "                               !                                                             !!                                                                                !                        ", 
+  "                               !                                                              !                                                                                ! !!                     ", 
+  "                               !                                                              !                                                                                ! !                      ", 
+  "                               !                                                              !!!!!                                                                           !!                        ", 
+  "                              !                                                                ! !!                                                                           !   !!                    ", 
+  "                              !                                                                !  !!                                                                          !  !                      ", 
+  "                              !                                                                !! !!                                                                          !                         ", 
+  "                              !                                                                 ! !!                                                                          !                         ", 
+  "                              !                                                                 !!!!                                                                          !!!!                      ", 
+  "                             !!                                                                 !! !!                                                                       ! !  !                      ", 
+  "                             !                                                                   !  !                                                                        !                          ", 
+  "                             ! !!!                                                               !                                                                        ! !!                          ", 
+  "                             ! !!                                                                 !  !                                                                    !!!!                          ", 
+  "                             !!!                                                                  !                                                                        ! !                          ", 
+  "                             !                                                                    !  !                                                                       !                          ", 
+  "                            !   !!                                                                 !!!                                                                     ! !                          ", 
+  "                            !  !                                                                   !  !!                                                                    !!                          ", 
+  "                            !   !                                                                  !  !!                                                                 ! !!                           ", 
+  "                            !  !                                                                    !!                                                                   !! !                           ", 
+  "                            ! !!                                                                    !                                                                    !!!!                           ", 
+  "                            !                                                                       !                                                                    !!!!                           ", 
+  "                           !  !!                                                                  !  !                                                                  !!! !                           ", 
+  "                           !  !                                                                  ! ! !                                                                  !!!!                            ", 
+  "                           ! !!                                                                    !!!                                                                  !!!!                            ", 
+  "                           ! !                                                                     !  !                                                                 !! !                            ", 
+  "                           !!                                                                     !   !                                                                    !                            ", 
+  "                           !!                                                                     ! ! !                                                                    !                            ", 
+  "                          !   !                                                                        !                                                                   !                            ", 
+  "                          ! !                                                                      !   !                                                                  !                             ", 
+  "                       !  !   !                                                                       !!                                                                  !                             ", 
+  "                      !!  !                                                                         !!! !                                                                 !                             ", 
+  "                          !                                                                             !                                                                 !                             ", 
+  "                          !                                                                          !  !                                                                 !                             ", 
+  "                         !!                                                                          !!  !                                                               !!                             ", 
+  "                        !!                                                                          !!!  !                                                               !                              ", 
+  "                         !                                                                            !! !                                                               !                              ", 
+  "                         !                                                                             !  !                                                              !                              ", 
+  "                      !  !                                                                             !! !                                                              !                              ", 
+  "                      !! !                                                                                !                                                              !                              ", 
+  "                      !! !                                                                                 !                                                            !                               ", 
+  "                      !!!                                                                                  !                                                            ! !!!                           ", 
+  "                     !!!!                                                                                  !                                                            ! !!                            ", 
+  "                     !!!!                                                                                   !                                                           !!!                             ", 
+  "                     !! !                                                                                   !                                                           !                               ", 
+  "                     !! !                                                                                   !                                                          !   !!                           ", 
+  "                        !                                                                                    !                                                         !  !                             ", 
+  "                        !                                                                                    !                                                         !   !                            ", 
+  "                       !                                                                                     !                                                         !! !                             ", 
+  "                       !                                                                                      !                                                        ! !!                             ", 
+  "                       !                                                                                      !                                                       !                                 ", 
+  "                       !                                                                                      !!!!!                                                   ! !!!                             ", 
+  "                       !                                                                                       ! !                                                    ! !!                              ", 
+  "                       !                                                                                       ! !!                                                   ! !!                              ", 
+  "                       !                                                                                        !!!                                                  !!   !                             ", 
+  "                      !                                                                                         ! !!                                                 ! !                                ", 
+  "                      !                                                                                         !!!!                                                 ! !                                ", 
+  "                      !                                                                                          !!!!                                                !  !                               ", 
+  "                      !                                                                                          ! !!                                               !!!!                                ", 
+  "                      !                                                                                          !!                                              !!!!   !                               ", 
+  "                      ! !                                                                                         ! !                                            !! !                                   ", 
+  "                      ! !!                                                                                        !                                              !  !                                   ", 
+  "                      ! !!                                                                                        !!!!!                                          !!!!                                   ", 
+  "                     ! !!!                                                                                         !  !                                           !!                                    ", 
+  "                     !  !!                                                                                         ! !                                           ! !                                    ", 
+  "                     !   !                                                                                          ! !!                                           !                                    ", 
+  "                     ! !                                                                                            !                                           !! !                                    ", 
+  "                     !                                                                                              !!                                         !! !                                     ", 
+  "                     !!                                                                                          !!! !                                         !! !                                     ", 
+  "                     !  !                                                                                         !  !                                         !!!!                                     ", 
+  "                     !                                                                                             !  !                                       !! !                                      ", 
+  "                    !  !!                                                                                          !  !                                       !! !                                      ", 
+  "                    !  !!                                                                                          !! !!                                     !!! !                                      ", 
+  "                    ! !!!                                                                                         !!!  !                                      ! !!                                      ", 
+  "                    ! ! !                                                                                           !! !                                       !!                                       ", 
+  "                    !!!!                                                                                             !  !                                       !                                       ", 
+  "                    !!!!                                                                                                !                                       !                                       ", 
+  "                    !  !                                                                                             !!! !                                     !                                        ", 
+  "                    !!!                                                                                               !! !                                     !                                        ", 
+  "                ! !!   !                                                                                               ! !!                                    !                                        ", 
+  "                !  !                                                                                                   !! !                                   !                                         ", 
+  "                   !                                                                                                    ! !!                                  !                                         ", 
+  "                !! !                                                                                                  ! !  !                                  !                                         ", 
+  "                 ! !                                                                                                     ! !!                                !                                          ", 
+  "               !   !                                                                                                     !  !                                !                                          ", 
+  "                   !                                                                                                    !   !!                              !!                                          ", 
+  "                   !                                                                                                         !                              !                                           ", 
+  "                  !                                                                                                          !!                             !                                           ", 
+  "                !!!                                                                                                           !                            !                                            ", 
+  "               !!!!                                                                                                           !!                           !                                            ", 
+  "               !! !                                                                                                            !                          !                                             ", 
+  "              !!! !                                                                                                             !                         ! ! !                                         ", 
+  "              !!! !                                                                                                             !!  !!                   !  !                                           ", 
+  "               !! !                                                                                                              !  !                    ! !                                            ", 
+  "               !  !                                                                                                               !  !!                 !  !                                            ", 
+  "                 !!                                                                                                               !!!!                  !   !                                           ", 
+  "                 !                                                                                                                 !   !               !  ! !                                           ", 
+  "                 !                                                                                                                  !!! !             ! !!                                              ", 
+  "                 !                                                                                                                   ! !             !!  !                                              ", 
+  "                 !                                                                                                                    ! ! !   !!     !                                                  ", 
+  "                 !                                                                                                                    !!  ! !!!!    !  !!                                               ", 
+  "                 !                                                                                                                      !!   !!!! !!  !!                                                ", 
+  "                 !                                                                                                                       !!      !! !! !                                                ", 
+  "                 !                                                                                                                         !!!!!!  !  !!                                                ", 
+  "                                                                                                                                                  !!!!                                                  ", 
+  "                                                                                                                                                  !                                                     ", 
+  "                                                                                                                                                  !                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-multi-layout-2-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-multi-layout-2-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..34efbf1
--- /dev/null
+++ b/tests/visual_tests/grids/lines-multi-layout-2-800-800-2.0-grid-reference.json
@@ -0,0 +1,209 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                         !!!                                                                                                                                            ", 
+  "                                                      !!!!!!!!!                                                                                                                        !!               ", 
+  "                                                     !!!!    !!!!                                                                                                                      !                ", 
+  "                                                    !!!        !!!                                                                                                                     !                ", 
+  "                                                   !!!    !     !!!                                                                                                                   !!                ", 
+  "                                           !      !!   !  !      !!!                                                                                                                  !!                ", 
+  "                                          !!     !!!   !! ! !!    !!!                                                                                                                 !!                ", 
+  "                                        ! !!! !  !!     ! !!  !    !!!                                                                                                                !!                ", 
+  "                                         !   !  !!  !!!  !!!  !     !!                                                                                                                !!                ", 
+  "                                         !!!   !!    ! !!! !!! !!    !!                                                                                                               !!                ", 
+  "                                         !  !  !!    ! !  ! ! !! !    !!                                                                                                              !                 ", 
+  "                                        ! !   !!      !      !   !    !!                                                                                                              !                 ", 
+  "                                        !! !  !!      !!        !      !!                                                                                                            !!                 ", 
+  "                                        !!!! !!                !        !!                                                                                                           !!                 ", 
+  "                                             !!                     !!  !!                                                                                                           !!                 ", 
+  "                                     !    ! !!                    !!  !  !!                                                                                                          !!                 ", 
+  "                                      !!!!  !!                   !  !!!  !!                                                                                                          !!                 ", 
+  "                                        !! !!                       !!    !!                                                                                                         !!                 ", 
+  "                                           !!                      !    ! !!                                                                                                         !!  !   !          ", 
+  "                                           !!                      ! !!    !!                                                                                                        !  !!!!!           ", 
+  "                                    !!!   !!                       !!  !   !!                                                                                                        !                  ", 
+  "                                    !  !  !!                         !! !   !!                                                                                                      !!   !!!!           ", 
+  "                                    !     !!                         !  !   !!                                                                                                      !!   !              ", 
+  "                                     !!! !!                        ! !!!!    !!                                                                                                     !! !!!!             ", 
+  "                                   !!    !!                         !!!  !!  !!                                                                                                     !!      !           ", 
+  "                                   ! !!! !                             !!!!   !!                                                                                                    !!   !!!            ", 
+  "                                      !!!!                                !   !!                                                                                                    !!     !!!          ", 
+  "                                   !!! !!!                               !!    !!                                                                                                   !   !    !          ", 
+  "                                ! !     !!                             !!  !!  !!                                                                                                   !    !!! !          ", 
+  "                                   !!! !!                                !!     !!                                                                                                 !!  !                ", 
+  "                                !!!    !!                               !       !!                                                                                                 !!   !!!!            ", 
+  "                                   !!  !!                                !      !!                                                                                                 !!                   ", 
+  "                                    ! !!                                         !!                                                                                                !!  !!!!!            ", 
+  "                               !!!!   !!                                         !!                                                                                                !! !  !              ", 
+  "                                ! !   !!                                          !!                                                                                               !! !!!               ", 
+  "                                 !!   !                                           !!                                                                                               !     !!!            ", 
+  "                                  !! !!                                            !                                                                                               !                    ", 
+  "                                     !!                                            !!                                                                                             !!                    ", 
+  "                                     !!                                            !!                                                                                             !!                    ", 
+  "                                    !!                                              !!                                                                                            !!   !!!!             ", 
+  "                                    !!                                              !!                                                                                            !!   !                ", 
+  "                                    !!                                              !!                                                                                            !!   !!!              ", 
+  "                                    !!                                               !!                                                                                           !!                    ", 
+  "                                   !!                                                !!                                                                                           !   !!!!!             ", 
+  "                                   !!                                                 !!                                                                                         !!   !  ! !            ", 
+  "                                   !!                                                 !!                                                                                         !!   !  ! !            ", 
+  "                                   !!                                                 !!                                                                                         !!    !!!!             ", 
+  "                                   !                                                   !!                                                                                        !! ! !                 ", 
+  "                                  !!                                                   !!                                                                                        !!     !!              ", 
+  "                                  !!                                                   !!                                                                                        !! !!!                 ", 
+  "                                  !!                                                    !!                                                                                       !!     !!              ", 
+  "                                  !                                                     !!                                                                                       !      !               ", 
+  "                                 !!                                                      !  !!!!!!                                                                              !!  !!!!                ", 
+  "                                 !!                                                      !!   ! !!                                                                              !!  !! !                ", 
+  "                                 !!                                                      !!   !!!                                                                               !!    !!                ", 
+  "                                 !!                                                       !!  !!                                                                         !!   ! !!      !               ", 
+  "                                 !                                                        !! !   !!                                                                      !! !!  !!                      ", 
+  "                                !!                                                        !!  !!                                                                         !!     !!                      ", 
+  "                                !!                                                         !!    !                                                                        !!!!  !                       ", 
+  "                                !!                                                         !! !!!                                                                              !!                       ", 
+  "                                !!                                                         !!   !!!                                                                       !! ! !!                       ", 
+  "                                !                                                           !! !!  !                                                                     ! ! ! !!                       ", 
+  "                               !!                                                           !!!   !!                                                                      !!!  !!                       ", 
+  "                               !!                                                           !!!!!!!                                                                            !!                       ", 
+  "                               !!                                                            !!    !!                                                                       !  !!                       ", 
+  "                               !!                                                            !!  !! !                                                                       !  !                        ", 
+  "                               !                                                             !!     !                                                                    !!!! !!                        ", 
+  "                              !!                                                              !!  !!!                                                                         !!                        ", 
+  "                              !!                                                              !!                                                                              !!                        ", 
+  "                              !!                                                              !!                                                                              !!                        ", 
+  "                              !!                                                               !!     !!                                                                !!!!  !!                        ", 
+  "                              !                                                                !!  !!!                                                                  !     !                         ", 
+  "                             !!                                                                !!  !                                                                    !    !!                         ", 
+  "                             !!                                                                 !! !                                                                      !! !!                         ", 
+  "                             !!                                                                 !!   !!!                                                                !!   !!                         ", 
+  "                             !!                                                                 !!  ! !!                                                               !  !!!!!                         ", 
+  "                             !!                                                                  !! ! !!                                                               !    !!!                         ", 
+  "                             !   !                                                               !! ! !!                                                                !!! !!!                         ", 
+  "                            !!  !!!!!                                                            !!     !!!                                                          !       !                          ", 
+  "                            !!                                                                    !! !!! !!                                                            !!!! !!                          ", 
+  "                            !!   !!!!                                                             !!     !!                                                          !!     !!                          ", 
+  "                            !!                                                                    !!  !!!!                                                             !!!! !!                          ", 
+  "                            !  !!!                                                                 !! !                                                                     !!                          ", 
+  "                            !      !                                                               !!                                                                !!!!!  !!                          ", 
+  "                           !!   !!!                                                                !!                                                                !  !   !                           ", 
+  "                           !!   !  !!                                                               !!                                                                !!!  !!                           ", 
+  "                           !!   !  !                                                                !!                                                                  !! !!                           ", 
+  "                           !!   !!!!!                                                        !!!!!! !!                                                                     !!                           ", 
+  "                           !  !                                                                ! !   !!                                                                    !!                           ", 
+  "                          !!    !!!                                                            !!    !!                                                                    !!                           ", 
+  "                          !!                                                                  !!   ! !!                                                                    !                            ", 
+  "                          !!  !! !!                                                             !!!   !!                                                                  !!                            ", 
+  "                          !! !  !                                                              !    ! !!                                                                  !!                            ", 
+  "                          !! !!!!                                                               !!!   !!                                                                  !!                            ", 
+  "                          !!     !!                                                            !       !!                                                                 !!                            ", 
+  "                          !                                                                     !! !   !!                                                                 !                             ", 
+  "                         !!                                                                    !!      !!                                                                !!                             ", 
+  "                         !!                                                                    ! !!!!   !!                                                               !!                             ", 
+  "                         !!   !!!!                                                              !!      !!                                                               !!                             ", 
+  "                         !!   !                                                                   !!!   !!                                                               !!                             ", 
+  "                         !!   !!!                                                                !   !   !!                                                              !!                             ", 
+  "                         !                                                                          !!   !!                                                              !                              ", 
+  "                        !!   !!!!                                                                 !!     !!                                                             !!                              ", 
+  "                        !!   !  !!                                                                        !!                                                            !!                              ", 
+  "                        !!   !  ! !                                                                       !!                                                            !!                              ", 
+  "                        !!    !! !                                                                   !!!! !!                                                            !!                              ", 
+  "                        !! ! !!                                                                    !! ! !  !!                                                           !                               ", 
+  "                        !!     !!                                                                     !!!  !!                                                          !!                               ", 
+  "                        !  !!!!                                                                      !      !                                                          !!                               ", 
+  "                       !!      !                                                                    !!   !  !!                                                         !!                               ", 
+  "                       !!     !!                                                                      !!    !!                                                         !!                               ", 
+  "                       !!  !!!!                                                                      !  !    !!                                                        !                                ", 
+  "                       !!  !! !                                                                       !! !   !!                                                       !!                                ", 
+  "                 !     !!    !!                                                                       !  !   !!                                                       !!                                ", 
+  "                !!! !  !!      !                                                                     !!!!!!   !!                                                      !!                                ", 
+  "               ! ! !!  !                                                                             !!!   !! !!                                                      !!                                ", 
+  "               !!!    !!                                                                                !!!   !!                                                      !                                 ", 
+  "                 !!!! !!                                                                               !   !   !!                                                    !!                                 ", 
+  "                      !!                                                                                  !!   !!                                                    !!                                 ", 
+  "                !!! ! !!                                                                                !!   ! !!                                                    !!                                 ", 
+  "                ! ! ! !!                                                                                  !!!   !!                                                   !                                  ", 
+  "                 !!!  !!                                                                                 !  !   !!                                                  !!                                  ", 
+  "                      !                                                                                  !       !!                                                 !!                                  ", 
+  "                   !  !                                                                                          !!                                                 !!                                  ", 
+  "                   ! !!                                                                                          !!                                                 !                                   ", 
+  "                !!!! !!                                                                                           !!                                               !!                                   ", 
+  "                     !!                                                                                           !!                                               !!                                   ", 
+  "                     !!                                                                                           !!                                               !!                                   ", 
+  "                     !!                                                                                            !!                                              !                                    ", 
+  "               !!!!  !!                                                                                            !!                                             !!                                    ", 
+  "               !     !                                                                                              !!                                            !!                                    ", 
+  "               !!    !                                                                                              !!                                            !!                                    ", 
+  "                 !! !!                                                                                              !!                                            !  !!!  !                             ", 
+  "               !!   !!                                                                                               !!                                          !!     !!                              ", 
+  "                 !!!!!                                                                                               !!                                          !!   !!                                ", 
+  "              !    !!!                                                                                                !!                                         !!  !  !!                              ", 
+  "               !!! !!!                                                                                                !!                                        !!  !!                                  ", 
+  "                    !!                                                                                                !!                                        !!    !!!                               ", 
+  "              !!!!  !                                                                                                  !!                                       !!   !                                  ", 
+  "            !!     !!                                                                                                  !!                                      !!   !!!!!                               ", 
+  "              !!!! !!                                                                                                   !! !!!!!!                              !!   !  ! !                              ", 
+  "                 ! !!                                                                                                   !!   !  !                              !!   !!!! !                              ", 
+  "             !!!!  !!                                                                                                    !!   !!                               !  !!    !                               ", 
+  "            !! !   !!                                                                                                    !!   !   !                           !!    !!!                                 ", 
+  "              !!   !!                                                                                                     !! ! !!!                            !!  !                                     ", 
+  "                !  !!                                                                                                     !!  !!   !                         !!  ! !!!!                                 ", 
+  "                   !                                                                                                      !!!   !!                           !!  ! !                                    ", 
+  "                   !                                                                                                       !!  !  !                          !!  !!!                                    ", 
+  "                  !!                                                                                                       !!   !! !                        !!      !!                                  ", 
+  "                  !!                                                                                                        !!  !  !                        !!                                          ", 
+  "                  !!                                                                                                        !!! !!!!                        !!                                          ", 
+  "                  !!                                                                                                         !!!!!  !                      !!   !!                                      ", 
+  "                  !!                                                                                                          !!  !! !                     !!   ! !!                                    ", 
+  "                  !!                                                                                                          !!  !  !                    !!   !!                                       ", 
+  "                  !!                                                                                                           !!   !!                    !!    !!!                                     ", 
+  "                  !                                                                                                            !!  !                     !!    !                                        ", 
+  "                 !!                                                                                                             !!      !!               !!   ! !!                                      ", 
+  "                 !!                                                                                                             !!!    !!               !!    !  !!                                     ", 
+  "                 !!                                                                                                              !!   !!                !! !  !!!!!                                     ", 
+  "                 !!                                                                                                               !!  !    !  !!!      !!    !    !                                     ", 
+  "                 !!                                                                                                               !!!  ! !! !  !      !!! !!  !!                                        ", 
+  "                 !!                                                                                                                !!!   !!!!!! !     !!    !!                                          ", 
+  "                 !!                                                                                                                 !!!  !  ! !  !!  !!  !    !!                                        ", 
+  "                 !                                                                                                                   !!!  !!  !     !!   !!!!                                           ", 
+  "                 !                                                                                                                    !!!     !    !!!    ! !                                           ", 
+  "                !!                                                                                                                     !!!        !!!     !!                                            ", 
+  "                !!                                                                                                                      !!!!!  !!!!        !                                            ", 
+  "                !!                                                                                                                        !!!!!!!!                                                      ", 
+  "                                                                                                                                             !!                                                         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-multi-layout-shield-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-multi-layout-shield-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..006209b
--- /dev/null
+++ b/tests/visual_tests/grids/lines-multi-layout-shield-800-800-1.0-grid-reference.json
@@ -0,0 +1,217 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "4", 
+  "2", 
+  "1", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "              !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!      !!!! !!!!            ", 
+  "              !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!      !!!!!!!!!            ", 
+  "                !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!              ", 
+  "                !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!              ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!          !!!!!              ", 
+  "                 !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!              ", 
+  "                !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!               ", 
+  "                !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "              #########      #########      #########      #########      #########      #########      #########      #########      #########      #########      #########      #########            ", 
+  "              #########      #########      #########      #########      #########      #########      #########      #########      #########      #########      #########      #########            ", 
+  "              #########      #########      #########      #########      #########      #########      #########      #########      #########      #########      #########      #########            ", 
+  "                #####          #####          #####          #####          #####          #####          #####          #####          #####          #####          #####          #####              ", 
+  "           ####################################################################################################################################################################################         ", 
+  "                #####          #####          #####          #####          #####          #####          #####          #####          #####          #####          #####          #####              ", 
+  "                #####          #####          #####          #####          #####          #####          #####          #####          #####          #####          #####          #####              ", 
+  "                 ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####              ", 
+  "                ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####               ", 
+  "                ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "              $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$      $$$$$$$$$            ", 
+  "              $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$      $$ $$ $$$            ", 
+  "              $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$      $$$ $ $$$            ", 
+  "                $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$              ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "                $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$              ", 
+  "                $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$              ", 
+  "                $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$          $$$$$              ", 
+  "                $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "             %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%             ", 
+  "             %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%      %%%%%%%%%             ", 
+  "               %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%              ", 
+  "               %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%              ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "               %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%         %%%%%%              ", 
+  "                %%%%           %%%%           %%%%           %%%%           %%%%           %%%%           %%%%           %%%%           %%%%           %%%%           %%%%           %%%%               ", 
+  "                %% %           %% %           %% %           %% %           %% %           %% %           %% %           %% %           %% %           %% %           %% %           %% %               ", 
+  "               %%%%%          %%%%%          %%%%%          %%%%%          %%%%%          %%%%%          %%%%%          %%%%%          %%%%%          %%%%%          %%%%%          %%%%%               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                     '''''''''          ''''''' '                                  ((((((( (                                            ", 
+  "                                                                                     '''''' ''          '''''''''                                 ((((((((((   (    (((((((((                           ", 
+  "                                    )))) ))))                                        '''''' ''          ''''''' '                                 (((((((( (((( ((( (( (( (((                           ", 
+  "                                    )))) ))))    )   )))))))))                        ''''''             ''''''                                     (((((((((     ((((( ( (((                           ", 
+  "                                    ))))))))) )))))) )))))))))                  ''''''''''''''''''''''''''''''''''''''                              ((((((          (((((((                             ", 
+  "                                      ))))))))      ))))))))))                        ''''''             ''''''                                     ((((((            (((((                             ", 
+  "                                      ))))))          )))))))                         ''''''             ''''''                                     ((((((            (((((                             ", 
+  "                                      )))))            ))))))                          '''''              '''''                                      (((((            (((((                             ", 
+  "                                      )))))            ))))))                          ''''               ''''                                       (( (             (((((                             ", 
+  "                                       ))))            ))))))                                                                                       (((((             ((((                              ", 
+  "                                      ))))              ))))                                                                                        (                    ((                             ", 
+  "                                      ))))             ))) )                                                                                       ((                     (                             ", 
+  "                                     )                     )                                                                                       (                      (                             ", 
+  "                                     )                     )                                                                                       (                       (                            ", 
+  "                                    ))                      )                                                                                      (                       (                            ", 
+  "                                    )                       )                                                                                      (                      ((                            ", 
+  "                                    )                       )                                                                                       (                     (                             ", 
+  "                                     )                      )                                                                                       (                     (                             ", 
+  "                                     )                     ))                                                                                     (((((((((        (((((((((                            ", 
+  "                                     )                     )                                                                                      (((((( ((        (((((((((                            ", 
+  "                                   )))))))))         ))))))))                                                                                      ((((((          (((((((((                            ", 
+  "                                   )))))))))        )))))))))                                                                                      ((((((            (((((                              ", 
+  "                                     )))))          )))))))))                                                                                      ((((((            (((((                              ", 
+  "                                     )))))            ))))))                                                                                       (((((((           (((((                              ", 
+  "                                     )))))            ))))))                         *********         **********                                   ( ((( ((      ((((((((                              ", 
+  "                                     ))))))           ))))))                         ******  *         ******** *                                   ((((    (( (((    ((((                              ", 
+  "                                      )))) )))      ))))))))                          ******             ******                                     ((((      ((     ((((                               ", 
+  "                                     ))) )   ))) )))   ))))                           ******             ******                                                      ((((                               ", 
+  "                                     )))))     ))      )) )                     **************************************                                                                                  ", 
+  "                                                      )))))                           ******             ******                                                                                         ", 
+  "                                                                                      ******             ******                                                                                         ", 
+  "                                                                                       ****               ** *                                                                                          ", 
+  "                                                                                       ****               ****                                                                                          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-multi-layout-shield-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-multi-layout-shield-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..b1e7321
--- /dev/null
+++ b/tests/visual_tests/grids/lines-multi-layout-shield-800-800-2.0-grid-reference.json
@@ -0,0 +1,217 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "4", 
+  "2", 
+  "1", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                 ##################            ##################            ##################            ##################            ##################            ##################               ", 
+  "                 ##################            ##################            ##################            ##################            ##################            ##################               ", 
+  "                 ##################            ##################            ##################            ##################            ##################            ##################               ", 
+  "                 ##################            ##################            ##################            ##################            ##################            ##################               ", 
+  "                 ##################            ##################            ##################            ##################            ##################            ##################               ", 
+  "                 ##################            ##################            ##################            ##################            ##################            ##################               ", 
+  "                     ##########                    ##########                    ##########                    ##########                    ##########                    ##########                   ", 
+  "                     ##########                    ##########                    ##########                    ##########                    ##########                    ##########                   ", 
+  "                     ##########                    ##########                    ##########                    ##########                    ##########                    ##########                   ", 
+  "           ####################################################################################################################################################################################         ", 
+  "           ####################################################################################################################################################################################         ", 
+  "                     ##########                    ##########                    ##########                    ##########                    ##########                    ##########                   ", 
+  "                     ##########                    ##########                    ##########                    ##########                    ##########                    ##########                   ", 
+  "                     ##########                    ##########                    ##########                    ##########                    ##########                    ##########                   ", 
+  "                      #########                     #########                     #########                     #########                     #########                     #########                   ", 
+  "                      #########                     #########                     #########                     #########                     #########                     #########                   ", 
+  "                     ###### ##                     ###### ##                     ###### ##                     ###### ##                     ###### ##                     ###### ##                    ", 
+  "                     #########                     #########                     #########                     #########                     #########                     #########                    ", 
+  "                     #########                     #########                     #########                     #########                     #########                     #########                    ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%               ", 
+  "                %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%           %%%%%%%%% %%%%%%%%%               ", 
+  "                %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%               ", 
+  "                %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%               ", 
+  "                %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%           %%%%%%%%%%%%%%%%%%%               ", 
+  "                    %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   ", 
+  "                    %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   ", 
+  "                    %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   ", 
+  "                    %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "                    %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   ", 
+  "                    %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   ", 
+  "                    %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   %%%%%%%%%%%                   ", 
+  "                      %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                   ", 
+  "                     %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                   ", 
+  "                     %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                    %%%%%%%%%%                   ", 
+  "                    %%%%%% %%                     %%%%%% %%                     %%%%%% %%                     %%%%%% %%                     %%%%%% %%                     %%%%%% %%                     ", 
+  "                    %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     ", 
+  "                    %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     %%%%%%%%%                     ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                          ''''''''''''''''''                                                                                            ", 
+  "                                                                                         '''''''''''''''''''                                                                                            ", 
+  "                                                                                         '''''''''''''''''''                                                                                            ", 
+  "                                                                                         '''''''''''''''''''                                                                                            ", 
+  "                                                                                         '''''''''''''''''''                                                                                            ", 
+  "                                                                                         '''''''''''''''''''                                                                                            ", 
+  "                                                                                             '''''''''''                                                      (((                                       ", 
+  "                                                                                             '''''''''''                                                   ((((((((                                     ", 
+  "                                                )))                                          '''''''''''                                                ((((((   (((((                                  ", 
+  "                                             ))))))))                           ''''''''''''''''''''''''''''''''''''''                    ((((((((((((((((((       (((((                                ", 
+  "                                          )))))    ))))                         ''''''''''''''''''''''''''''''''''''''                    ((((((((((((((((((      (((((((((((((((((((                   ", 
+  "                           )))))))))))))))))))       ))))                                    '''''''''''                                  ((((((((((((((((((      (((((((((((((((((((                   ", 
+  "                           )))))))))))))))))))      ))))))))))))))))))                       '''''''''''                                  ((((((((((((((((((      (((((((((((((((((((                   ", 
+  "                           )))))))))))))))))))      ))))))))))))))))))                       '''''''''''                                  ((((((((((((((((((      (((((((((((((((((((                   ", 
+  "                           )))))))))))))))))))      ))))))))))))))))))                         '''''''''                                      ((((((((((          (((((((((((((((((((                   ", 
+  "                           )))))))))))))))))))      ))))))))))))))))))                        ''''''''''                                      ((((((((((           ((((((((((((((                       ", 
+  "                               )))))))))))          ))))))))))))))))))                        '''''''''                                       ((((((((((              (((((((((((                       ", 
+  "                               )))))))))))          ))) ))))))))))))))                        '''''''''                                       ((((((((((              (((((((((((                       ", 
+  "                               )))))))))))              ))))))))))                            '''''''''                                       ((((((((((              (((((((((((                       ", 
+  "                               )))))))))))              ))))))))))                                                                            ((((((((((              (((((((((((                       ", 
+  "                               )))))))))))              ))))))))))                                                                            ((((((((((              (((((((((((                       ", 
+  "                               )))))))))))              ))))))))))                                                                            ((((((((((              (((((((((((                       ", 
+  "                               )))))))))))              ))))))))))                                                                            ((((((((((              (((((((((((                       ", 
+  "                               )))))))))))              ))))))))))                                                                             (((((((((              (((((((((((                       ", 
+  "                               )))))))))))              ))))))))))                       *******************                                   (((((((((               ((((((((((                       ", 
+  "                                ))))))))))              ))))))))))                       *******************                                  (((((( ((                ((((((((((                       ", 
+  "                                ))))))))))               )))))))))                       *******************                                  (((((((((                ((((((((                         ", 
+  "                                ))))) ))                 )))))))))                       *******************                                  (( ((((((((             (((((((((                         ", 
+  "                               )))))))))                )))))) ))                        *******************                                           ((((         (((((((((((                         ", 
+  "                               )))))))))))              )))))))))                            ***********                                                 ((((    (((((                                  ", 
+  "                                        ))))         ))))))))))))                            ***********                                                   (((((((((                                    ", 
+  "                                          ))))    ))))))                                     ***********                                                     ((((                                       ", 
+  "                                            )))))))))                                        ***********                                                                                                ", 
+  "                                              ))))                              **************************************                                                                                  ", 
+  "                                                                                             ***********                                                                                                ", 
+  "                                                                                             ***********                                                                                                ", 
+  "                                                                                             ***********                                                                                                ", 
+  "                                                                                             ***********                                                                                                ", 
+  "                                                                                              **********                                                                                                ", 
+  "                                                                                              **********                                                                                                ", 
+  "                                                                                              ********                                                                                                  ", 
+  "                                                                                             *********                                                                                                  ", 
+  "                                                                                             *********                                                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-shield-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-200-200-1.0-grid-reference.json
index 9fd0cc8..d04aaf7 100644
--- a/tests/visual_tests/grids/lines-shield-200-200-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-shield-200-200-1.0-grid-reference.json
@@ -26,7 +26,7 @@
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
-  "      !!     !!!     !!     !!!     !!     !!!    ", 
+  "       !     !!!      !     !!!      !     !!!    ", 
   "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
   "      !!     !!      !!     !!      !!     !!     ", 
   "              !              !              !     ", 
@@ -37,16 +37,16 @@
   "      $              $              $             ", 
   "      $$     $$      $$     $$      $$     $$     ", 
   "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
-  "      $$     $       $$     $       $$     $      ", 
+  "     $$$     $      $$$     $      $$$     $      ", 
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
   "                        %%                        ", 
   "           &&&      %%%%%%%%%%        '  ''       ", 
-  "         &&    &        %%          ''    ' '     ", 
+  "         &&    &        %%          ''    '       ", 
   "         &     &&                  ''''    '      ", 
   "         &   &&&&&                  ''    ''      ", 
-  "        &&&   &&&                    '    ' '     ", 
+  "        &&&   &&&                    '    '       ", 
   "          &   &&        ((             '''        ", 
   "            &       ((((((((((                    ", 
   "                        ((                        ", 
diff --git a/tests/visual_tests/grids/lines-shield-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..2c93b66
--- /dev/null
+++ b/tests/visual_tests/grids/lines-shield-200-200-2.0-grid-reference.json
@@ -0,0 +1,66 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "2", 
+  "1", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "          #              #              #         ", 
+  "         ####           ####           ####       ", 
+  "         ###            ###            ###        ", 
+  "   #############################################  ", 
+  "         ###            ###            ###        ", 
+  "         ###            ###            ###        ", 
+  "        # # #          # # #          # # #       ", 
+  "          #              #              #         ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "        % % %          % % %          % % %       ", 
+  "         %%%            %%%            %%%        ", 
+  "         %%%            %%%            %%%        ", 
+  "   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  ", 
+  "         %%%            %%%            %%%        ", 
+  "        % %%%          % %%%          % %%%       ", 
+  "          %              %              %         ", 
+  "                                                  ", 
+  "                                        &         ", 
+  "           '''      ((((((((((        &  &&       ", 
+  "          '   '                      &    &       ", 
+  "         '  '  '                     &            ", 
+  "         '' ' ''       )  )          &&  &&       ", 
+  "         ' '''         )  )          & && &       ", 
+  "          '''''         ))          &&&&&&&&      ", 
+  "        ''''''''    ))))))))))         &&         ", 
+  "           '''         )))            &  &        ", 
+  "          ' '''        )  )          &&  &        ", 
+  "            '                                     ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-shield-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-400-400-1.0-grid-reference.json
index cfac493..810ade5 100644
--- a/tests/visual_tests/grids/lines-shield-400-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-shield-400-400-1.0-grid-reference.json
@@ -37,9 +37,9 @@
   "                                                                                                    ", 
   "                                                                                                    ", 
   "         !              !              !              !              !              !               ", 
-  "         !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!       ", 
+  "         !      !!      !      !!      !      !!      !      !!      !      !!      !      !!       ", 
   "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
-  "        !!!     !!     !!!     !!     !!!     !!     !!!     !!     !!!     !!     !!!     !!       ", 
+  "        !!!      !     !!!      !     !!!      !     !!!      !     !!!      !     !!!      !       ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
@@ -47,46 +47,46 @@
   "         #              #              #              #              #              #               ", 
   "         #      ##      #      ##      #      ##      #      ##      #      ##      #      ##       ", 
   "         #      ##      #      ##      #      ##      #      ##      #      ##      #      ##       ", 
-  "        ###     #      ###     #      ###     #      ###     #      ###     #      ###     #        ", 
+  "        ###            ###            ###            ###            ###            ###              ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
-  "         $              $              $              $              $              $               ", 
+  "        $$$      $     $$$      $     $$$      $     $$$      $     $$$      $     $$$      $       ", 
   "         $      $$      $      $$      $      $$      $      $$      $      $$      $      $$       ", 
   "         $      $$      $      $$      $      $$      $      $$      $      $$      $      $$       ", 
-  "        $$$            $$$            $$$            $$$            $$$            $$$              ", 
+  "        $$$    $ $     $$$    $ $     $$$    $ $     $$$    $ $     $$$    $ $     $$$    $ $       ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                %              %              %              %              %              %        ", 
   "        %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%       ", 
   "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
-  "        %       %%     %       %%     %       %%     %       %%     %       %%     %       %%       ", 
+  "        %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%       ", 
   "                                                                                                    ", 
   "                &              &              &              &              &              &        ", 
-  "        &       &&     &       &&     &       &&     &       &&     &       &&     &       &&       ", 
+  "        &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&       ", 
   "     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&     ", 
-  "        &       &&     &       &&     &       &&     &       &&     &       &&     &       &&       ", 
+  "        &&     &&&     &&     &&&     &&     &&&     &&     &&&     &&     &&&     &&     &&&       ", 
   "                &              &              &              &              &              &        ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
-  "                                            ''       ' '                   (( ((((  (               ", 
+  "                                            ''       '                     (( (((( (((              ", 
   "                   ))) )))              '''''''''''''''''''               ((((    (((               ", 
   "                  )))))    )))              ''       '                     ((       (               ", 
-  "                    ))      ))                                             (       (((              ", 
-  "                   ))       )))                                           (          (              ", 
+  "                   ))       ))                                             (       (((              ", 
+  "                   ))        )                                            (          (              ", 
   "                                                                                     (              ", 
   "                  )           )                                                                     ", 
   "                  )           )                                           (          (              ", 
   "                              )                                           ((                        ", 
-  "                   )         )                                             (       ((               ", 
+  "                   )         )                                            ((       ((               ", 
   "                   ))       ))                                           ((((     ((((              ", 
   "                  ))))     ))))             *                             ((((   ((((               ", 
-  "                   )  )   ) ))              **       *                         (                    ", 
+  "                   )) )   ) ))              **       **                        (                    ", 
   "                        )   )           *******************                                         ", 
   "                                            **       *                                              ", 
   "                                            *                                                       ", 
diff --git a/tests/visual_tests/grids/lines-shield-400-400-2.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-400-400-2.0-grid-reference.json
new file mode 100644
index 0000000..b904e17
--- /dev/null
+++ b/tests/visual_tests/grids/lines-shield-400-400-2.0-grid-reference.json
@@ -0,0 +1,116 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "5", 
+  "9", 
+  "4", 
+  "2", 
+  "1", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "             #              #              #              #              #              #           ", 
+  "           # ###          # ###          # ###          # ###          # ###          # ###         ", 
+  "            ###            ###            ###            ###            ###            ###          ", 
+  "            ##             ##             ##             ##             ##             ##           ", 
+  "            ##             ##             ##             ##             ##             ##           ", 
+  "            ###            ###            ###            ###            ###            ###          ", 
+  "           # ###          # ###          # ###          # ###          # ###          # ###         ", 
+  "             #              #              #              #              #              #           ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "           $  $           $  $           $  $           $  $           $  $           $  $          ", 
+  "           $ $$           $ $$           $ $$           $ $$           $ $$           $ $$          ", 
+  "            $$             $$             $$             $$             $$             $$           ", 
+  "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$     ", 
+  "           $$$            $$$            $$$            $$$            $$$            $$$           ", 
+  "           $  $           $  $           $  $           $  $           $  $           $  $          ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                 &                                                  ", 
+  "                                                 &                                                  ", 
+  "                                                &&&                                                 ", 
+  "                                                &&&                           ''''                  ", 
+  "                       ((((             &&&&&&&&&&&&&&&&&&&                ''     ''                ", 
+  "                    ((     ((                   &&&                      ' '        '               ", 
+  "                  ( (        ((                &&&&&                    ''''        '  '            ", 
+  "                (((((       ((( (              & & &                    '''         '' '            ", 
+  "                 (((         ((((                &                       ''          ''             ", 
+  "                  (           ((                                         ''       ''''''''          ", 
+  "                 (((       ((((((((                                     ''''        '''             ", 
+  "                 (((         (((                                       ' '''        '  '            ", 
+  "                ( (((        (( (                )                       '          '               ", 
+  "                  ((        ((( (              ) ) )                       ''      ''               ", 
+  "                    (       ( (                 )))                          ''  ''                 ", 
+  "                     ((  (((                    )))                            '                    ", 
+  "                        (               )))))))))))))))))))                                         ", 
+  "                                                )))                                                 ", 
+  "                                               )))))                                                ", 
+  "                                                 )                                                  ", 
+  "                                                 )                                                  ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-shield-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-600-600-1.0-grid-reference.json
index a43b575..9103620 100644
--- a/tests/visual_tests/grids/lines-shield-600-600-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-shield-600-600-1.0-grid-reference.json
@@ -51,7 +51,7 @@
   "                                                                                                                                                      ", 
   "           !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!         ", 
   "            !      !       !      !       !      !       !      !       !      !       !      !       !      !       !      !       !      !          ", 
-  "           !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!         ", 
+  "           !!      !      !!      !      !!      !      !!      !      !!      !      !!      !      !!      !      !!      !      !!      !          ", 
   "                   !              !              !              !              !              !              !              !              !          ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -61,9 +61,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                   #              #              #              #              #              #              #              #              #          ", 
-  "           #       ##     #       ##     #       ##     #       ##     #       ##     #       ##     #       ##     #       ##     #       ##         ", 
+  "           ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##         ", 
   "        ########################################################################################################################################      ", 
-  "           #       ##     #       ##     #       ##     #       ##     #       ##     #       ##     #       ##     #       ##     #       ##         ", 
+  "           ##     ###     ##     ###     ##     ###     ##     ###     ##     ###     ##     ###     ##     ###     ##     ###     ##     ###         ", 
   "                   #              #              #              #              #              #              #              #              #          ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -76,7 +76,7 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                   $              $              $              $              $              $              $              $              $          ", 
-  "           $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$         ", 
+  "           $$      $      $$      $      $$      $      $$      $      $$      $      $$      $      $$      $      $$      $      $$      $          ", 
   "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
   "           $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$         ", 
   "                   $              $              $              $              $              $              $              $              $          ", 
@@ -89,43 +89,43 @@
   "           %              %              %              %              %              %              %              %              %                  ", 
   "           %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%          ", 
   "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
-  "           %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %           ", 
+  "          %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %           ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "           &&     & &     &&     & &     &&     & &     &&     & &     &&     & &     &&     & &     &&     & &     &&     & &     &&     & &         ", 
-  "           &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &          ", 
-  "           &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&          ", 
-  "          &&&     & &    &&&     & &    &&&     & &    &&&     & &    &&&     & &    &&&     & &    &&&     & &    &&&     & &    &&&     & &         ", 
+  "          &&&     &      &&&     &      &&&     &      &&&     &      &&&     &      &&&     &      &&&     &      &&&     &      &&&     &           ", 
+  "           &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&          ", 
+  "           &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&      &      &&          ", 
+  "          &&&            &&&            &&&            &&&            &&&            &&&            &&&            &&&            &&&                 ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                                                                                   ' ' ''  '                          ", 
-  "                                 (                              ))       )        )))                               ''    '''                         ", 
+  "                                                                                                                   '   ''  '                          ", 
+  "                                 (                              ))       ))       )))                               ''    ''                          ", 
   "                                (( ( (( ((                  ))))))))))))))))))))))))))))                         ''''      ''                         ", 
   "                               ((((    ((((                     ))       ))        ))                                     ''' '                       ", 
   "                              ( (((     (((                     )                  )                            '             '                       ", 
   "                                        (  (                                                                                                          ", 
   "                             (                                                                                ''               '                      ", 
   "                           (((              (                                                                ''''              ''                     ", 
-  "                            (               (                                                                 ' '              ''                     ", 
-  "                            (              ((((                                                               '                ''                     ", 
-  "                           (((              ((                                                                                  '                     ", 
+  "                            (               ((                                                                '                ''                     ", 
+  "                           ((              ((((                                                               '                 '                     ", 
+  "                           ((               ((                                                                                  '                     ", 
   "                           (                 (                                                                 '                                      ", 
   "                                             (                                                                 '               '                      ", 
   "                            (                                                                                  '''                                    ", 
   "                             (              (                                                                   '            ''                       ", 
-  "                             ((           ( (                                                                   '           ''''                      ", 
+  "                             (            ( (                                                                   '           ''''                      ", 
   "                           (((((           (                                                                    ' '          '                        ", 
-  "                            (((            (                                                                        ' ' ' ''                          ", 
+  "                            (((           ((                                                                        ' '   ''                          ", 
   "                             (  (       ((( (                   *                  *                                  '''                             ", 
-  "                                  ((  (                         **       **        **                                 ''                              ", 
+  "                                  ((( (                         **       **        *                                  ''                              ", 
   "                                  ((((                      ****************************                                                              ", 
-  "                                   ( (                          **       **       ***                                                                 ", 
+  "                                   (                           ***       **       ***                                                                 ", 
   "                                                                *                  *                                                                  ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
diff --git a/tests/visual_tests/grids/lines-shield-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..f99f5b7
--- /dev/null
+++ b/tests/visual_tests/grids/lines-shield-600-600-2.0-grid-reference.json
@@ -0,0 +1,166 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "4", 
+  "2", 
+  "1", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "               !              !              !              !              !              !              !              !              !              ", 
+  "              !! !           !! !           !! !           !! !           !! !           !! !           !! !           !! !           !! !            ", 
+  "              !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!             ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "               !!             !!             !!             !!             !!             !!             !!             !!             !!             ", 
+  "              !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!           !!!!            ", 
+  "             ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !            ", 
+  "               !              !              !              !              !              !              !              !              !              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "              #  #           #  #           #  #           #  #           #  #           #  #           #  #           #  #           #  #            ", 
+  "              #  #           #  #           #  #           #  #           #  #           #  #           #  #           #  #           #  #            ", 
+  "               ##             ##             ##             ##             ##             ##             ##             ##             ##             ", 
+  "        ########################################################################################################################################      ", 
+  "              ###            ###            ###            ###            ###            ###            ###            ###            ###             ", 
+  "              #  #           #  #           #  #           #  #           #  #           #  #           #  #           #  #           #  #            ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "               $              $              $              $              $              $              $              $              $              ", 
+  "             $$$ $          $$$ $          $$$ $          $$$ $          $$$ $          $$$ $          $$$ $          $$$ $          $$$ $            ", 
+  "              $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$            ", 
+  "               $$             $$             $$             $$             $$             $$             $$             $$             $$             ", 
+  "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "              $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$             ", 
+  "              $$ $           $$ $           $$ $           $$ $           $$ $           $$ $           $$ $           $$ $           $$ $            ", 
+  "               $              $              $              $              $              $              $              $              $              ", 
+  "               $              $              $              $              $              $              $              $              $              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "               %              %              %              %              %              %              %              %              %              ", 
+  "             % % %          % % %          % % %          % % %          % % %          % % %          % % %          % % %          % % %            ", 
+  "              %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%             ", 
+  "              %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%             ", 
+  "        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       ", 
+  "              %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%             ", 
+  "             % %%%          % %%%          % %%%          % %%%          % %%%          % %%%          % %%%          % %%%          % %%%            ", 
+  "               %              %              %              %              %              %              %              %              %              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                        &  &                                           ''                             ", 
+  "                                                                         &&                                     '   ''   ''                           ", 
+  "                             (    (((((                     &&&&&&&&&&&&&&&&&&&&&&&&&&&&                      ''''''       ''  '                      ", 
+  "                           ( ( (((     ((   (                            &&                                    '''           ''''                     ", 
+  "                            (((          (( (((                         &  &                                    '             ''                      ", 
+  "                            (((            (((                         &&   &                                  '''         ''''''''                   ", 
+  "                         (((((((((         ((                                                                  '''            ''                      ", 
+  "                            (((         ((((((((                                                              ''' '          ' ''                     ", 
+  "                           (((((           (((                                                                ' '            ' '''                    ", 
+  "                             (            ( (((                                                               '                ''                     ", 
+  "                           ( (              ((                                                                '                 '                     ", 
+  "                           (                 (                                                                 '                '                     ", 
+  "                            (                (                                                                 '               '                      ", 
+  "                            (               (                                                                  '               '                      ", 
+  "                            (               (                                                                   '             '                       ", 
+  "                             (                                                                                  '      '      '                       ", 
+  "                             (      (      (                                                                     ''  ' ''   ''                        ", 
+  "                             ((   ( (((                                 )  )                                       '' ''' ''                          ", 
+  "                               ((  (((  ((                              )) )                                       ''''''''                           ", 
+  "                                 (((((((                                 ))                                           ''                              ", 
+  "                                ((((((((                    ))))))))))))))))))))))))))))                             ' ''                             ", 
+  "                                   (((                                   )))                                         ' '''                            ", 
+  "                                  ( ((                                  )  )                                           '                              ", 
+  "                                    (                                                                                                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-shield-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-800-800-1.0-grid-reference.json
index 6ec6c7d..1b59466 100644
--- a/tests/visual_tests/grids/lines-shield-800-800-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/lines-shield-800-800-1.0-grid-reference.json
@@ -64,7 +64,7 @@
   "              !              !              !              !              !              !              !              !              !              !              !              !                    ", 
   "              !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!      !!     !!            ", 
   "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
-  "              !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !     !!     ! !           ", 
+  "             !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !      !!!     !             ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -78,8 +78,8 @@
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "               #     ###      #     ###      #     ###      #     ###      #     ###      #     ###      #     ###      #     ###      #     ###      #     ###      #     ###      #     ###           ", 
-  "              ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #            ", 
-  "              ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #      ##      #            ", 
+  "              #       #      #       #      #       #      #       #      #       #      #       #      #       #      #       #      #       #      #       #      #       #      #       #            ", 
+  "              ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##      ##     ##            ", 
   "                      #              #              #              #              #              #              #              #              #              #              #              #            ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -97,7 +97,7 @@
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
-  "              $$     $       $$     $       $$     $       $$     $       $$     $       $$     $       $$     $       $$     $       $$     $       $$     $       $$     $       $$     $             ", 
+  "             $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$     $$$     $$            ", 
   "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
   "              $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$      $$     $$            ", 
   "              $              $              $              $              $              $              $              $              $              $              $              $                    ", 
@@ -114,7 +114,7 @@
   "                     %              %              %              %              %              %              %              %              %              %              %              %             ", 
   "             %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%     %%      %%            ", 
   "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
-  "             %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%     %       %%            ", 
+  "             %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%     %      %%%            ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
@@ -122,7 +122,7 @@
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                     &              &              &              &              &              &              &              &              &              &              &              &             ", 
-  "             &       &&     &       &&     &       &&     &       &&     &       &&     &       &&     &       &&     &       &&     &       &&     &       &&     &       &&     &       &&            ", 
+  "             &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&            ", 
   "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
   "             &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&     &&      &&            ", 
   "                     &              &              &              &              &              &              &              &              &              &              &              &             ", 
@@ -136,33 +136,33 @@
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                   '                                    ", 
   "                                                                                                                                                           ''''  ' ''                                   ", 
-  "                                             (                                    )))     ) )     ))     ) )      )                                       '''    '''''                                  ", 
-  "                                             ( (  ( (                              )       )      )       )      ))                                     '  '       '''                                  ", 
+  "                                             (                                    )))     )      )))     )        )                                       '''    '''''                                  ", 
+  "                                             ( (  ( ((                             )       )      )       )      )                                      '   '      '''                                  ", 
   "                                           ((((    ((((                            ))     ))      ))     ))      ))                                   '            '   '                                ", 
-  "                                         (( (((     ((((                           )              )                                                  ''                 '                               ", 
+  "                                         (( (((     ((((                           )              )                                                 '''                 '                               ", 
   "                                        (               ((                                                                                           '                  '''                             ", 
-  "                                      (((                                                                                                            ''                '''''                            ", 
-  "                                       (                  ((                                                                                         '                   '                              ", 
-  "                                      ((                  ((                                                                                        '                    '                              ", 
+  "                                      ((                                                                                                             ''                '''''                            ", 
+  "                                       (                  ((                                                                                         '                  ''                              ", 
+  "                                      ((                  (                                                                                         '                    '                              ", 
   "                                      (                   ((                                                                                                              '                             ", 
   "                                                           (                                                                                       '                      '                             ", 
   "                                     (                                                                                                                                                                  ", 
   "                                                                                                                                                   ''                     ''                            ", 
   "                                    (                       (                                                                                     ''''                    ''                            ", 
-  "                                    (                                                                                                              ''                    ''''                           ", 
-  "                                   ((((                    ((                                                                                       '                     ''                            ", 
+  "                                    ((                                                                                                              '                    ''''                           ", 
+  "                                   ((((                    ((                                                                                       '                    '''                            ", 
   "                                    ((                    ((((                                                                                                           ''                             ", 
   "                                                           ((                                                                                        '                   '                              ", 
   "                                      (                                                                                                              '                  '                               ", 
-  "                                      (                   (                                                                                           ' '             ' '                               ", 
+  "                                      (                   (                                                                                           '               ' '                               ", 
   "                                                          (                                                                                          ''''             ''                                ", 
   "                                       (((               (                                                                                            '''           '''''                               ", 
-  "                                       ((              (((                                                                                                ''  '    '  ''                                ", 
+  "                                       ((              (((                                                                                                ''  '    ' '''                                ", 
   "                                        (((           ((((                                                                                                  ''''''    '                                 ", 
   "                                        (   (       (( ((                          *              *              *                                           ''''                                       ", 
-  "                                              ((( (                                **     **      **     **      **                                           ''                                        ", 
+  "                                              ((( (                                *      **      **     **      **                                          '''                                        ", 
   "                                              ((((                              **************************************                                                                                  ", 
-  "                                               (                                  ***     **      **     *       **                                                                                     ", 
+  "                                               (                                  ***     **     ***     *      ***                                                                                     ", 
   "                                                                                   *              *              *                                                                                      ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
diff --git a/tests/visual_tests/grids/lines-shield-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/lines-shield-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..31bca18
--- /dev/null
+++ b/tests/visual_tests/grids/lines-shield-800-800-2.0-grid-reference.json
@@ -0,0 +1,217 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "9", 
+  "4", 
+  "2", 
+  "1", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                  !              !              !              !              !              !              !              !              !              !              !              !                ", 
+  "                ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !          ! ! !              ", 
+  "                 !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!               ", 
+  "                 !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!               ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                 !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!            !!!               ", 
+  "                ! !!!          ! !!!          ! !!!          ! !!!          ! !!!          ! !!!          ! !!!          ! !!!          ! !!!          ! !!!          ! !!!          ! !!!              ", 
+  "                  !              !              !              !              !              !              !              !              !              !              !              !                ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                  #              #              #              #              #              #              #              #              #              #              #              #                ", 
+  "                 ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####           ####              ", 
+  "                 ###            ###            ###            ###            ###            ###            ###            ###            ###            ###            ###            ###               ", 
+  "           ####################################################################################################################################################################################         ", 
+  "                 ###            ###            ###            ###            ###            ###            ###            ###            ###            ###            ###            ###               ", 
+  "                 ###            ###            ###            ###            ###            ###            ###            ###            ###            ###            ###            ###               ", 
+  "                # # #          # # #          # # #          # # #          # # #          # # #          # # #          # # #          # # #          # # #          # # #          # # #              ", 
+  "                  #              #              #              #              #              #              #              #              #              #              #              #                ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                  $              $              $              $              $              $              $              $              $              $              $              $                ", 
+  "                $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$               ", 
+  "                 $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$               ", 
+  "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "                 $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$            $$$               ", 
+  "                $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$           $$$$               ", 
+  "                $ $ $          $ $ $          $ $ $          $ $ $          $ $ $          $ $ $          $ $ $          $ $ $          $ $ $          $ $ $          $ $ $          $ $ $              ", 
+  "                  $              $              $              $              $              $              $              $              $              $              $              $                ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %               ", 
+  "                % %%           % %%           % %%           % %%           % %%           % %%           % %%           % %%           % %%           % %%           % %%           % %%               ", 
+  "                 %%             %%             %%             %%             %%             %%             %%             %%             %%             %%             %%             %%                ", 
+  "          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          ", 
+  "                %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%            %%%                ", 
+  "                %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %           %  %               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &               ", 
+  "                &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &               ", 
+  "                 &&             &&             &&             &&             &&             &&             &&             &&             &&             &&             &&             &&                ", 
+  "          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&          ", 
+  "                &&&            &&&            &&&            &&&            &&&            &&&            &&&            &&&            &&&            &&&            &&&            &&&                ", 
+  "                &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &           &  &               ", 
+  "               &   &          &   &          &   &          &   &          &   &          &   &          &   &          &   &          &   &          &   &          &   &          &   &               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                         '                                                                     (                                        ", 
+  "                                                                                       ' ''               '  '                                       (  (    (( ((      (                               ", 
+  "                                        )        )                                      '''                '''                                        ((( ((      ((  ((((                              ", 
+  "                                      ))) )   ))) ))     )                      ''''''''''''''''''''''''''''''''''''''                                ((((           (((((                              ", 
+  "                                       ))) )))      ))  )) )                            ''                 ''                                         ((            ((((((((                            ", 
+  "                                        )))           )))))                            ''''               '  '                                       (( (              (((                              ", 
+  "                                       )))            ))))))))                         ' ' '              '  ''                                      (  (             ((((                              ", 
+  "                                       )))               ))                              '                                                           (                ( (((                             ", 
+  "                                      ))) )             ))))                                                                                        (                   ((                              ", 
+  "                                      ) )              ) )))                                                                                        (                                                   ", 
+  "                                      )                  ) )                                                                                                              (                             ", 
+  "                                     )                     )                                                                                       (                      (                             ", 
+  "                                     )                     )                                                                                                               (                            ", 
+  "                                    )                       )                                                                                      (                       (                            ", 
+  "                                    )                       )                                                                                      (                       (                            ", 
+  "                                    )                       )                                                                                       (                     (                             ", 
+  "                                     )                      )                                                                                       (                     (                             ", 
+  "                                     )                      )                                                                                       ( (                  (                              ", 
+  "                                     )                     )                                                                                        (((((              ( (                              ", 
+  "                                      ))                   )                                                                                         (((             (((((                              ", 
+  "                                     ))) )                )                                                                                          ((               (((                               ", 
+  "                                      )))              )  )                                                                                       ((((((((             ((                               ", 
+  "                                       ))              ))))                                                                                          (((((           ((((                               ", 
+  "                                    ))))))))            ))                                                                                          ( ((  ((      ((( (((                               ", 
+  "                                      )))))            )))                             *  **              *  *                                        (     ((  ((   ( ( (                              ", 
+  "                                     ))) ) ))       )) ))))                            ** *               *  *                                                (        (                                ", 
+  "                                       )     ))  )))   )  )                             **                 **                                                                                           ", 
+  "                                                )                               **************************************                                                                                  ", 
+  "                                                                                        ***                **                                                                                           ", 
+  "                                                                                       *  *               *  *                                                                                          ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/list-100-100-1.0-grid-reference.json b/tests/visual_tests/grids/list-100-100-1.0-grid-reference.json
index b633480..382f499 100644
--- a/tests/visual_tests/grids/list-100-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/list-100-100-1.0-grid-reference.json
@@ -1,12 +1,12 @@
 {
  "keys": [
   "", 
-  "1", 
-  "3", 
+  "2", 
   "5", 
   "7", 
   "9", 
-  "2", 
+  "1", 
+  "3", 
   "4", 
   "6", 
   "8", 
@@ -23,15 +23,15 @@
   "                         ", 
   "                         ", 
   "                         ", 
-  "! !  #    $    % %  &    ", 
-  "!!!  ##   $$$  %%%  &&&  ", 
-  "                         ", 
-  " !  ' #  ( $  ) %  * &  +", 
+  "! !! !!!! #    $ $  %    ", 
+  "!!!!  !!   ##   $$   %%  ", 
   "                         ", 
+  " &  ! '  ( #  ) $  * %  +", 
   "                         ", 
-  "   ''    (   )    **   ++", 
-  "   '    ((   ))   **   ++", 
   "                         ", 
+  "&  & && &    ))   **   ++", 
+  "    &&  &&   ))   **   ++", 
+  "&  &&&  &&               ", 
   "                         ", 
   "                         ", 
   "                         ", 
diff --git a/tests/visual_tests/grids/list-100-100-2.0-grid-reference.json b/tests/visual_tests/grids/list-100-100-2.0-grid-reference.json
new file mode 100644
index 0000000..7487207
--- /dev/null
+++ b/tests/visual_tests/grids/list-100-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "8", 
+  "1", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                         ", 
+  "                         ", 
+  "                         ", 
+  "                         ", 
+  "                         ", 
+  "  !             ### ##   ", 
+  "! !! !!! !! !!  #  # #   ", 
+  "! !      !!!      ## #   ", 
+  "!!!!  ! ! ! !!  ######   ", 
+  "                         ", 
+  "                         ", 
+  "                         ", 
+  " $  ! %  & '  ( )  # *  +", 
+  "                         ", 
+  "                         ", 
+  "                         ", 
+  "                         ", 
+  "                    * *  ", 
+  "$   $$$  $$$  $$$   * *  ", 
+  "    $  $ $  $ $  $   **  ", 
+  "    $  $ $  $ $$$$  **   ", 
+  "    $  $ $  $ $          ", 
+  "$   $$$  $  $  $$$       ", 
+  "                         ", 
+  "                         "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/list-150-100-1.0-grid-reference.json b/tests/visual_tests/grids/list-150-100-1.0-grid-reference.json
index aacf5a5..b79ab5f 100644
--- a/tests/visual_tests/grids/list-150-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/list-150-100-1.0-grid-reference.json
@@ -1,15 +1,15 @@
 {
  "keys": [
   "", 
+  "2", 
   "4", 
-  "6", 
+  "5", 
   "7", 
   "8", 
   "9", 
-  "2", 
   "1", 
   "3", 
-  "5", 
+  "6", 
   "10"
  ], 
  "data": {}, 
@@ -23,15 +23,15 @@
   "                                      ", 
   "                                      ", 
   "                                      ", 
-  "          !!!!!!!!!  # $   % %  &&    ", 
-  "     ''    !! ! !!  ###$$$  %%   &    ", 
+  " !! !! !!!!   #  $     %     &  ''    ", 
+  " !! !   ! !  ##  $$    %%%   &   '    ", 
   "                                      ", 
-  "  (   '  )   !   *   #  $   %   &   + ", 
+  "  (   !  )   #   $   *  %   &   '   + ", 
   "                                      ", 
   "                                      ", 
-  " )         )                       +++", 
-  " )))))     )   ))))                ++ ", 
-  " ) )))))  ))   ))))                   ", 
+  "((  ( (  (          *               ++", 
+  "   (   (((      *** *  * * *       ++ ", 
+  " ( ((  (((      ****** *****          ", 
   "                                      ", 
   "                                      ", 
   "                                      ", 
diff --git a/tests/visual_tests/grids/list-150-100-2.0-grid-reference.json b/tests/visual_tests/grids/list-150-100-2.0-grid-reference.json
new file mode 100644
index 0000000..2f15b49
--- /dev/null
+++ b/tests/visual_tests/grids/list-150-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "6", 
+  "8", 
+  "1", 
+  "3", 
+  "4", 
+  "5", 
+  "7", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                      ", 
+  "                                      ", 
+  "                                      ", 
+  "                                      ", 
+  "                                      ", 
+  "    !             ### ##  $$ $$       ", 
+  "!!! !! !!! !! !!  #  ##   $  $$       ", 
+  "!!! !     !!!! !    ## #   $ $        ", 
+  "!!! !!  ! ! ! !!  ### ##  $$ $$       ", 
+  "                                      ", 
+  "                                      ", 
+  "                                      ", 
+  "  %   !  &   '   (   #  )   $   *   + ", 
+  "                                      ", 
+  "                                      ", 
+  "                                      ", 
+  "                                      ", 
+  "                         )     **     ", 
+  "%    %%% %%%%  %%%       )     * *    ", 
+  "    %  % %% % %  %      )        *    ", 
+  "    %   %%  % %%%%%     )      **     ", 
+  "    %% % %  % %%                      ", 
+  "%    %%% %  %  %%%                    ", 
+  "                                      ", 
+  "                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/list-250-100-1.0-grid-reference.json b/tests/visual_tests/grids/list-250-100-1.0-grid-reference.json
index 3ead5a1..52abcd3 100644
--- a/tests/visual_tests/grids/list-250-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/list-250-100-1.0-grid-reference.json
@@ -1,14 +1,14 @@
 {
  "keys": [
   "", 
-  "1", 
-  "3", 
-  "5", 
-  "7", 
-  "9", 
   "2", 
   "4", 
   "6", 
+  "7", 
+  "9", 
+  "1", 
+  "3", 
+  "5", 
   "8", 
   "10"
  ], 
@@ -23,16 +23,16 @@
   "                                                               ", 
   "                                                               ", 
   "                                                               ", 
-  "  ! !       ### #### #  $$ $$$$ $  %% %% %%%%%%   &&& &&& &    ", 
-  "   !!         #   ##    $$$$  $$$  %%%% %% %%       &  & &     ", 
-  "                                                               ", 
-  "   !     '      #     (     $     )      %     *     &     +   ", 
+  "     !!! !!!! !  ## ## ### #    $$$ $$ %        && && &&& &    ", 
+  "     ! !! ! !!!  ## #   ##     $$ $  $$%%%      &&&&   &&      ", 
   "                                                               ", 
+  "   '     !      (     #     )     $      %     *     &     +   ", 
   "                                                               ", 
-  "        '  '          (     )     )            *               ", 
-  "    ''' '  ' ''  '   ((     ) ))) )  ) )))     *               ", 
-  "    '''''' ' '' ''          ) )))))) )))))                     ", 
   "                                                               ", 
+  "' '  ' '' '     (    )                *     *        *         ", 
+  "'   ' '' '''   ((    ))) )     )))))) ***** *  **** **    +++  ", 
+  "' '  '''  ''         ))) ) )   ) ) )) * *****  *** ***  *      ", 
+  "                                                   *           ", 
   "                                                               ", 
   "                                                               ", 
   "                                                               ", 
diff --git a/tests/visual_tests/grids/list-250-100-2.0-grid-reference.json b/tests/visual_tests/grids/list-250-100-2.0-grid-reference.json
new file mode 100644
index 0000000..e7f7575
--- /dev/null
+++ b/tests/visual_tests/grids/list-250-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "5", 
+  "7", 
+  "9", 
+  "1", 
+  "3", 
+  "4", 
+  "6", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "!!!        !              ## ##       $$$$$$       %% %%       ", 
+  "  !! !!!!  !!!! !!!!      #  ##       $    $       %           ", 
+  "  !!!!!    ! !!!!! !       #            $ $         % %%       ", 
+  "  !!!!! !  !! !! !!!      ## ##       $$$ $        %% %%       ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "   &     !      '     (     #     )      $     *     %     +   ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "&                     (           ))          **         ++ + +", 
+  "&&&   &&&  &&&  &&&  ((          )))          **          + + +", 
+  "&     &  & &  & &  & (((         ) )          * *         + + +", 
+  "&     &  & &  &&&&&&  (           ))          **         ++ ++ ", 
+  "&     & && &  & &                                              ", 
+  " &&   &&&  &  & &&&&                                           ", 
+  "                                                               ", 
+  "                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/list-300-100-1.0-grid-reference.json b/tests/visual_tests/grids/list-300-100-1.0-grid-reference.json
index 91ac6b3..4ccb771 100644
--- a/tests/visual_tests/grids/list-300-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/list-300-100-1.0-grid-reference.json
@@ -1,16 +1,16 @@
 {
  "keys": [
   "", 
-  "1", 
+  "2", 
   "3", 
   "5", 
-  "7", 
-  "9", 
-  "2", 
-  "4", 
   "6", 
   "8", 
-  "10"
+  "10", 
+  "1", 
+  "4", 
+  "7", 
+  "9"
  ], 
  "data": {}, 
  "grid": [
@@ -23,15 +23,15 @@
   "                                                                           ", 
   "                                                                           ", 
   "                                                                           ", 
-  " !!! !!!!      ### #### #      $$$$$$$$    % %%% %%%%%%    & &&& &&&&      ", 
-  "   !  !!         #   ###        $$ $       %%% % %    %    &&& &  & &      ", 
+  "       !!!! !! !    #        $$ $$ $$$$ %          &&&&& & && &    '''''' '", 
+  "       !    !!!!!  ##        $$$$$       %         & && && &&&     ' ''  ' ", 
   "                                                                           ", 
-  "    !      '       #      (       $      )       %      *       &      +   ", 
+  "    (      !       #      )       $      %       *      &       +      '   ", 
   "                                                                           ", 
   "                                                                           ", 
-  "    '     '  '            (        )     )                                 ", 
-  "    ' ''' '  '''   '      (        ) ))) )  )  )        *                  ", 
-  "    ' '''''' ' '' ''               ) )))))  )) ))                          ", 
+  " (((  ( (  (       )       )           * * **** ** ** *****    ++          ", 
+  "(((  (   (((       )))))   )  ))       ***** *  * **   ***     ++          ", 
+  "(((( ((  (((       ))))) ) ) ))))      * ****** **** * ***                 ", 
   "                                                                           ", 
   "                                                                           ", 
   "                                                                           ", 
diff --git a/tests/visual_tests/grids/list-300-100-2.0-grid-reference.json b/tests/visual_tests/grids/list-300-100-2.0-grid-reference.json
new file mode 100644
index 0000000..c0047b1
--- /dev/null
+++ b/tests/visual_tests/grids/list-300-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "4", 
+  "5", 
+  "7", 
+  "8", 
+  "9", 
+  "1", 
+  "3", 
+  "6", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  " !!!!        !          ##  #  $$$ $$         %%%%%%  && &&  ''' ''        ", 
+  "    !! !!!!  !!!! !!!!  #  ##  $   $          %    %  &  &   '  ' '        ", 
+  "    !! !!    ! !!! ! !   # ###   $  $           % %    & & &   ' ''        ", 
+  "    !! !! !  !!! ! !!!  ##  #  $$$$$$         %%% %   && &&  ''' ''        ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "    (      !       )      #       $      *       %      &       '      +   ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  "                                                                           ", 
+  " (                         *****        *         *                  +  ++ ", 
+  "(((    ((( ((((  (((         *  **  *** ***   *** * *  *                + +", 
+  " (    (  ( (  ( (  (         * *  * *   *     *   *  **                 + +", 
+  " (    (  ( (  ( ((((         * **** *** *     **  *  **              ++ ++ ", 
+  " (    (  ( (  ( (            * *      * *       * *  **                    ", 
+  " ((    ((( (  (  (((         * **** *** ***   *** * *  *                   ", 
+  "                                                                           ", 
+  "                                                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/list-400-100-1.0-grid-reference.json b/tests/visual_tests/grids/list-400-100-1.0-grid-reference.json
index ea336f3..2edaf85 100644
--- a/tests/visual_tests/grids/list-400-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/list-400-100-1.0-grid-reference.json
@@ -1,16 +1,16 @@
 {
  "keys": [
   "", 
+  "2", 
+  "4", 
+  "6", 
+  "8", 
+  "10", 
   "1", 
   "3", 
   "5", 
   "7", 
-  "9", 
-  "10", 
-  "2", 
-  "4", 
-  "6", 
-  "8"
+  "9"
  ], 
  "data": {}, 
  "grid": [
@@ -23,16 +23,16 @@
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
-  "  !!!!! !!           # ########          $$ $$$$ $           %%% %%% %%%          &&& &&& &  ' '''  ", 
-  "   !! !  !           ### # ## #          $$ $ $$$              %  % % %%            &  & &&  '''''  ", 
+  "            !!! !  !           # ## #####          $$ $$ $ $           %%% %  %%%           &&& && &", 
+  "           !  ! !!!!           ####  ###           $$$$  $ $          %  % %%%%                 &&& ", 
+  "                                                                                                    ", 
+  "     '         !         (         #         )         $         *         %         +         &    ", 
   "                                                                                                    ", 
-  "     !         (         #         )         $         *         %         +         &         '    ", 
   "                                                                                                    ", 
+  "' '''  ' '' '   (     (  ((           )                  *  *** ** *  * * *  +     +                ", 
+  "'''   ' ''''''  ((((( (  (( (((((((   )))))     ))))))   *****  **** ****  * +++++ +  +++  +++      ", 
+  "''' '  ' '' '   ( (((((  (( (( ((((   ))))) )   )))))    ****** **** * **  * +++++++   ++  +++      ", 
   "                                                                                                    ", 
-  "        (     (             )                    *                               +                  ", 
-  "        ( ((( (   (((( (    )))))      ))))      *****    *  *      ++ +   ++ + ++                  ", 
-  "        ( (((((  (( (((     ))))) )   )))))      * ***** **   *     ++++ + ++  +++  +               ", 
-  "                                                                               +                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
diff --git a/tests/visual_tests/grids/list-400-100-2.0-grid-reference.json b/tests/visual_tests/grids/list-400-100-2.0-grid-reference.json
new file mode 100644
index 0000000..c61c1df
--- /dev/null
+++ b/tests/visual_tests/grids/list-400-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "4", 
+  "6", 
+  "8", 
+  "10", 
+  "1", 
+  "3", 
+  "5", 
+  "7", 
+  "9"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "     !!!     !   !               ##  #        $$$     $                  %% %%       &&&&        &  ", 
+  "      ! !! !!!!  !  !  !!       #   ##         $ $$ $$$$  $$  $$        %   %%          && &&&&  &&&", 
+  "      !!!! !!!   ! ! !            ####         $ $$ $$$   $$   $          %  %          &&&&&    & &", 
+  "      ! !! !!!!  ! ! ! !!       ###  #         $ $$ $$$$  $$  $$        %%% %%          &&&&& &  &&&", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "     '         !         (         #         )         $         *         %         +         &    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "  '                     (((  )))))        )     )) )              *++++++        +          +       ", 
+  "''''    '''  '''  '''    (     )  ))  ))) )))  ))))))   ) )))    *    +  ++  ++++++   + ++  + +++   ", 
+  "  '     ' '' ' ' ''  '    (    ) )  ) )   )     )  ) ) ) )) )    *    + + +++    +    ++ +  + +  + +", 
+  "' '    '   ' '   '''''  ((     ) )))) ))) )     )  ) ) ) )))))        ++++++ ++  +    +  +  + +  + +", 
+  "' '     ' '' '    '            ) )      ) )     )  ) ) ) )            + +      + +    +  +  + +  + +", 
+  "' ''    '''  '    '''          ) )))) ))) )))   )  )  )   )))         + ++++++++ ++   +  +  + +  + +", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/list-600-100-1.0-grid-reference.json b/tests/visual_tests/grids/list-600-100-1.0-grid-reference.json
index a846513..faf2a84 100644
--- a/tests/visual_tests/grids/list-600-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/list-600-100-1.0-grid-reference.json
@@ -23,15 +23,15 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                  ! !!! !! !                    ## ####  #                     $$ $$$ $                      %%% %%%%%%                     &&& &&&   ", 
-  "                  !!  !  !!!                    ####  ## #                     $$ $ $$$                        % %%%%%                        &   &&  ", 
+  "                  !! !!!!! !                    #### ##  #                      $$$ $$$                    %% %% %%%%%%                   && && &&&&  ", 
+  "                  ! !!     !                    #    ### #                     $  $  $$                    %%%%   % %%%                   &&&&&   &&  ", 
   "                                                                                                                   %                                  ", 
   "       '              !              (              #              )              $              *              %              +              &       ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "      '                      (     (   (                             )                        *                         +                             ", 
-  "  '''''  ' ' '''             ( ((( (   (   (((((              )) )   )    ))              *** *  * *** *****            +++++     +++ +++             ", 
-  "  '''' ' ''' '''             ( (((((  ((   (((((              )))) ) )  ) ))              ****** **** * ** *            + +++++   +++  ++             ", 
+  "' ' '''  '''' ''             (       ( (                          )  )                  * * * *  * * *  * **            +                             ", 
+  "''''' '   ''  ''             (((((   ( ((  (((((              ))) )  ))   ))            *** * *  * **** ***             ++++    +  ++++++             ", 
+  "' '''''  '''  ''             ((((( ( ((((  (( ((              )))))) )) ) ))            *** ***  * ** * ***             +++++ + +  +++ ++             ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
diff --git a/tests/visual_tests/grids/list-600-100-2.0-grid-reference.json b/tests/visual_tests/grids/list-600-100-2.0-grid-reference.json
new file mode 100644
index 0000000..b3fe114
--- /dev/null
+++ b/tests/visual_tests/grids/list-600-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "3", 
+  "5", 
+  "6", 
+  "8", 
+  "10", 
+  "1", 
+  "4", 
+  "7", 
+  "9"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "            !!!!     !  !          ## ###                $$$$        $$$        %%  %%               &&&     &          &  &         '''     '   '    ", 
+  "              !!!!!! !  !!! !!!!!  #    #                   $$$$$$$  $$$$ $ $$  %  %%                 &&&&&& &&  &&  &&&&&&&&         ' '' '''' '' '' ", 
+  "              !!!!!! !  ! !!!!! !    #  #                   $$$$$    $ $  $$$$    %% %                &&&&&& &  &&&  & && &&          '''' '''   ' '' ", 
+  "              !!!!!! !  !! !! !!!  ######                   $$$$$ $  $ $ $  $$  %%%%%%                &&&&&& &&  &&  &&&& &&&         ' '''''''  ' '' ", 
+  "                                                                                                                     &&                               ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "       (              !              #              )              $              %              *              &              +              '       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                    )))))        )     ))                    *****        *                                    ++                     ", 
+  "((( (((    ((  ((((  (((              )  ))  ))))))   ))) ))  )  ) ) )         * ***  *** ***   *** *** *   * *** ****        + +                     ", 
+  "(         (  ( (  ( (  (              ) )  ))    )     ) )) ) )  ) ))          * *  * *   *    *    *  * * * *  * ** *          +                     ", 
+  " ((       (  ( (  ( ((((              ) )))) ))  )     ) )  ) )  ) )           * **** *** *     *** **** * * ******  *         ++                     ", 
+  "   ( (    (  ( (  ( (                 ) )      ) )     ) )  ) )  ) )           * *      * *       * *     ** **   *  *                                ", 
+  "(((  ((    ((  (  (  (((              ) )))))))) ))    )  )))  ))) )           *  *** *** ***  ****  ***  *   *** *  *                                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/list-800-100-1.0-grid-reference.json b/tests/visual_tests/grids/list-800-100-1.0-grid-reference.json
index 692e6ad..e25bf53 100644
--- a/tests/visual_tests/grids/list-800-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/list-800-100-1.0-grid-reference.json
@@ -1,6 +1,7 @@
 {
  "keys": [
   "", 
+  "8", 
   "1", 
   "2", 
   "3", 
@@ -8,7 +9,6 @@
   "5", 
   "6", 
   "7", 
-  "8", 
   "9", 
   "10"
  ], 
@@ -23,16 +23,16 @@
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                  !!! !  !!!                                            ", 
+  "                                                                                                                                                 !  ! !!!!                                              ", 
   "                                                                                                                                                                                                        ", 
+  "          #                   $                   %                   &                   '                   (                   )                   !                   *                   +         ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
-  "          !                   #                   $                   %                   &                   '                   (                   )                   *                   +         ", 
-  "                                                                                                                                                                                                        ", 
+  "   # # ###  # ## #     $ $ $$$ $$$$$ $   %     %  %%                &  &           '                    (                 )  ))) )) )  ) ) )                      *     *              + + +++  + + ++  ", 
+  "   #####   # ######    $$$ $     $$$$    %%%%% %  %% %%%%%%%    &&& &  && &&&      '''''     ''''''     (((((   (   (     )))))  )))) ))))  )                     ***** *  ***  ***    +++++ +  ++++++  ", 
+  "   ##### #  # ## #     $$$$$ $  $$ $$$   % %%%%%  %% %% %%%%    &&&&&& & &&&&      ''''' '   '''''      ((((( ( ((   (    )))))) )))) ) ))  )                     *******   **  ***    + +++++  + ++++  ", 
   "                                                                                                                                                                                                        ", 
-  "   !     !             #     #                 $  $            %                   &     &  &           '                (                                  )           *                    +  +       ", 
-  "   ! !!! !   !!!!!!    # ### #   #### #    $$$$$  $  $$ $$$$   %%%%%      %%%%     & &&& &  &&&&&&      '''''    '  '    (((((    (((((((((    )) )   )) ) ))       *** *  *    ***      +++ +  ++++++  ", 
-  "   ! !!!!!  !!!!!!!    # #####  ## ###     $$$$ $ $$ $$ $$$$   %%%%% %   %%%%%     & &&&&&  && &&&      ' ''''' ''   '   ( ((((( (( ((( (((    )))) ) ))  )))  )    ****** *    ***      ++++++ + ++ +  ", 
-  "                                                                                                                                                          )                                             ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
diff --git a/tests/visual_tests/grids/list-800-100-2.0-grid-reference.json b/tests/visual_tests/grids/list-800-100-2.0-grid-reference.json
new file mode 100644
index 0000000..81dffb1
--- /dev/null
+++ b/tests/visual_tests/grids/list-800-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "4", 
+  "6", 
+  "8", 
+  "10", 
+  "1", 
+  "3", 
+  "5", 
+  "7", 
+  "9"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                    !!!     !   !                          ####     #   #                            $$$     $                            %%%            %       %                  &&&&        &       ", 
+  "                     ! !! !!!!  !  !  !!                     ###### #  ###### ###                     $ $$ $$$$  $$  $$                    % %% %%%%  %% % %% %% %                     && &&&&  &&&&&&&&", 
+  "                     !!!! !!!   ! ! !                        ###### #  # # ## ##                      $ $$ $$$   $$   $                    % %% %%    %%%%% %    %                     &&&&&    & &&&& &", 
+  "                     ! !! !!!!  ! ! ! !!                     ###### #  # #######                      $ $$ $$$$  $$  $$                    % %% %% %  %%%% %%    %                     &&&&& &  &&&&&& &", 
+  "                                                                                                                                                           %%                                           ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          '                   !                   (                   #                   )                   $                   *                   %                   +                   &         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "       '                      ((((((        (     (  (                    )))))        )     )) )            *****         *                            ++++++        +          +                      ", 
+  "'  ''''''    '''  '''  '''       (  ((  ((((((   ((( (((  ((( ((   ((       )  ))  ))) )))  ))))))   ) )))     *  *** *** ***   ***  *** *  *  **  ***     +  ++  ++++++   + ++  + +++   ++             ", 
+  " ' '   '     ' '' ' ' ''  '      ( (  ((    (     (  ( (( (  (  ( (  (      ) )  ) )   )     )  ) ) ) )) )     * *  * *    *    *   *  * *  * *  * *  *    + + +++    +    ++ +  + +  + +  +            ", 
+  "'' ''' '    '   ' '   '''''      ( (((( ((  (     (  (  ( (  (((( ((((      ) )))) ))) )     )  ) ) ) )))))    * ****  **  *    *** ****  *** **** *  *    ++++++ ++  +    +  +  + +  + ++++            ", 
+  "     ' '     ' '' '    '         ( (      ( (     (  (  ( (  (    (         ) )      ) )     )  ) ) ) )        * *       * *       **     **  *    *  *    + +      + +    +  +  + +  + +               ", 
+  "'' ''' ''    '''  '    '''       ( (((((((( ((    (( (  ( (  (((( ((((      ) )))) ))) )))   )  )  )   )))     *  *** ***  **   ***  ***  **   *** *  *    + ++++++++ ++   +  +  + +  + ++++            ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/map-background-image-compositing-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/map-background-image-compositing-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..fb6e635
--- /dev/null
+++ b/tests/visual_tests/grids/map-background-image-compositing-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                            !!!!!!!!                                                            ", 
+  "                                                       !!!!!!!!!!!!!!!!!!                                                       ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                                                        !!!!!!!!!!!!!!!!                                                        ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/map-background-image-compositing-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/map-background-image-compositing-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..2228ead
--- /dev/null
+++ b/tests/visual_tests/grids/map-background-image-compositing-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                           !!!!!!!!!!                                                           ", 
+  "                                                    !!!!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                                                     !!!!!!!!!!!!!!!!!!!!!!                                                     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-collide-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/marker-collide-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..f592264
--- /dev/null
+++ b/tests/visual_tests/grids/marker-collide-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "          !!!                                                                                                                   ", 
+  "          !!!!                                                                                                                  ", 
+  "          !!!!                                                                                                                  ", 
+  "          !!!!!                                                                                                                 ", 
+  "            !!!!!                                                                                                               ", 
+  "             !!!!                                                                                                               ", 
+  "             !!!                                                                                                                ", 
+  "                !!!                                                                                                             ", 
+  "                !!!!                                                                                                            ", 
+  "                !!!!!                                                                                                           ", 
+  "                 !!!!!!                                                                                                         ", 
+  "                  !!!!!!                                                                                                        ", 
+  "                    !!!!                                                                                                        ", 
+  "                     ! ! !!                                                                                                     ", 
+  "                        !!!!                                                                                                    ", 
+  "                        !!!!!                                                                                                   ", 
+  "                         !!!!!                                                                                                  ", 
+  "                          !!!!!                                                                                                 ", 
+  "                           !!!!                                                                                                 ", 
+  "                            !!!                                                                                                 ", 
+  "                               !                                                                                                ", 
+  "                                !!!                                                                                             ", 
+  "                                !!!!                                                                                            ", 
+  "                                !!!!                                                                                            ", 
+  "                                 !!!                                                                                            ", 
+  "                                 !!!                                                                                            ", 
+  "                                 !!!!                                                                                           ", 
+  "                                 !!!!                                                                                           ", 
+  "                                   !!                                                                                           ", 
+  "                                  !!!                                                                                           ", 
+  "                                  !!!                                                                                           ", 
+  "                                  !!!                                                                                           ", 
+  "                                  !!!                                                                                           ", 
+  "                                  !!!                                                                                           ", 
+  "                                  !!!                                                                                           ", 
+  "                                  !!!!                                                                                          ", 
+  "                                  !!!!                                                                                          ", 
+  "                                   !!                                                                                           ", 
+  "                                  !!!!                                                                                          ", 
+  "                                   !!!                                                                                          ", 
+  "                                   !!!!                                                                                         ", 
+  "                                   !!!!                                                                                         ", 
+  "                                   !!!!                                                                                         ", 
+  "                                    !!!!!                                                                                       ", 
+  "                                     !!!!                                                                                       ", 
+  "                                     !!!!                                                                                       ", 
+  "                                                                                                                                ", 
+  "                                        !!!                                                                                     ", 
+  "                                       !!!!                                                                                     ", 
+  "                                       !!!!                                                                                     ", 
+  "                                        !!!                                                                                     ", 
+  "                                        !!!                                                                                     ", 
+  "                                         !!!!                                                                                   ", 
+  "                                         !!!!                                                                                   ", 
+  "                                         !!!                                                                                    ", 
+  "                                           !                                                                                    ", 
+  "                                            !!                                                                                  ", 
+  "                                           !!!                                                                                  ", 
+  "                                           !!!!                                                                                 ", 
+  "                                           !!!!                                                                                 ", 
+  "                                            !!!                                                                                 ", 
+  "                                            !!!!                                                                                ", 
+  "                                            !!!!                                                                                ", 
+  "                                             ! !                                                                                ", 
+  "                                               !                                                                                ", 
+  "                                               !!!                                                                              ", 
+  "                                               !!!!                                                                             ", 
+  "                                               !!!!!                                                                            ", 
+  "                                                !!!!!!                                                                          ", 
+  "                                                 !!!!!                                                                          ", 
+  "                                                  !!!!                                                                          ", 
+  "                                                    !  !!!                                                                      ", 
+  "                                                      !!!!!                                                                     ", 
+  "                                                      !!!!!!!!                                                                  ", 
+  "                                                        !!!!!!                                                                  ", 
+  "                                                         !!!!!  !!                                                              ", 
+  "                                                           !!  !!!!                                                             ", 
+  "                                                               !!!!!!                                                           ", 
+  "                                                               !!!!!!!!                                                         ", 
+  "                                                                 !!!!!!  !!                                                     ", 
+  "                                                                   !!!  !!!!                                                    ", 
+  "                                                                        !!!!!!!!                                                ", 
+  "                                                                        !!!!!!!!                                                ", 
+  "                                                                          !!!!!!                                                ", 
+  "                                                                            !!!                                                 ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-collide-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/marker-collide-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..6e5c5cf
--- /dev/null
+++ b/tests/visual_tests/grids/marker-collide-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "          ! !!!!                                                                                                                ", 
+  "           !!!!!                                                                                                                ", 
+  "          !!!!!!                                                                                                                ", 
+  "         !!!!!!!!                                                                                                               ", 
+  "         !!!!!!!!!                                                                                                              ", 
+  "          !!!!!!!!                                                                                                              ", 
+  "           !!!!!!!!!                                                                                                            ", 
+  "           !!!!!!!!!                                                                                                            ", 
+  "            !!!!!!!!!!!                                                                                                         ", 
+  "             !!!!!!!!!!                                                                                                         ", 
+  "               !!!!!!!!!                                                                                                        ", 
+  "               !!!!!!!!!                                                                                                        ", 
+  "                 !!!! !                                                                                                         ", 
+  "                 !!!!  !! !!!!                                                                                                  ", 
+  "                         !!!!!                                                                                                  ", 
+  "                        !!!!!!                                                                                                  ", 
+  "                        !!!!!!!!                                                                                                ", 
+  "                        !!!!!!!!                                                                                                ", 
+  "                        !!!!!!!!!!                                                                                              ", 
+  "                          !!!!!!!!                                                                                              ", 
+  "                          !!!!!!!!!!                                                                                            ", 
+  "                           !!!!!!!!!!                                                                                           ", 
+  "                            !!!!!!!!!!                                                                                          ", 
+  "                              !!!!!!!!                                                                                          ", 
+  "                              !!!!!!!                                                                                           ", 
+  "                               !!! !!                                                                                           ", 
+  "                               !!!!!!!!                                                                                         ", 
+  "                               !!!!!!!                                                                                          ", 
+  "                                   !                                                                                            ", 
+  "                                   !                                                                                            ", 
+  "                                !!!!!!!                                                                                         ", 
+  "                                !!!!!!!                                                                                         ", 
+  "                                !!!!!!!                                                                                         ", 
+  "                                !!!!!!                                                                                          ", 
+  "                                !!!!!!!                                                                                         ", 
+  "                                !!!!!!!                                                                                         ", 
+  "                                !!!!!!!                                                                                         ", 
+  "                                 !!!!!!                                                                                         ", 
+  "                                 !!!!!!                                                                                         ", 
+  "                                 !!!!!!!                                                                                        ", 
+  "                                  !!!!!!!                                                                                       ", 
+  "                                  !!!!!!!!                                                                                      ", 
+  "                                  !!!!!!!!                                                                                      ", 
+  "                                   !!!!!!                                                                                       ", 
+  "                                   !!!!!!                                                                                       ", 
+  "                                   !!! !                                                                                        ", 
+  "                                       !                                                                                        ", 
+  "                                        !                                                                                       ", 
+  "                                        !!!!!                                                                                   ", 
+  "                                      !!!!!!!                                                                                   ", 
+  "                                      !!!!!!!                                                                                   ", 
+  "                                      !!!!!!!                                                                                   ", 
+  "                                      !!!!!!!!                                                                                  ", 
+  "                                       !!!!!!!                                                                                  ", 
+  "                                       !!!!!!!                                                                                  ", 
+  "                                       !!!!!!!!                                                                                 ", 
+  "                                        !!!!!!!                                                                                 ", 
+  "                                        !!!!!!!!                                                                                ", 
+  "                                         !!!!!!!                                                                                ", 
+  "                                         !!!!!!!!                                                                               ", 
+  "                                          !!!!!!!                                                                               ", 
+  "                                          !!!!!!!                                                                               ", 
+  "                                          !!! !!!                                                                               ", 
+  "                                              !                                                                                 ", 
+  "                                               !  !!                                                                            ", 
+  "                                               ! !!!!                                                                           ", 
+  "                                                !!!!!                                                                           ", 
+  "                                               !!!!!!!!                                                                         ", 
+  "                                               !!!!!!!!!                                                                        ", 
+  "                                               !!!!!!!!!!                                                                       ", 
+  "                                               !!!!!!!!!!                                                                       ", 
+  "                                                 !!!!!!!!!!!!!                                                                  ", 
+  "                                                  !!!!!!!!!!!!                                                                  ", 
+  "                                                    !!!!!!!!!!                                                                  ", 
+  "                                                      !!!!!!!!    !!!                                                           ", 
+  "                                                      !!!!!! !!  !!!!                                                           ", 
+  "                                                        !!!!   ! !!!!                                                           ", 
+  "                                                         !!!    !!!!!!!!                                                        ", 
+  "                                                                !!!!!!!!!!!                                                     ", 
+  "                                                                !!!!!!!!!!!!!!!                                                 ", 
+  "                                                                !!!!!!!!!!!!!!!!                                                ", 
+  "                                                                 !!!!!!!!!!!!!!!                                                ", 
+  "                                                                   !!!!!!!!!!!!!                                                ", 
+  "                                                                     !!!!!!!!!!!                                                ", 
+  "                                                                        !!!!!!                                                  ", 
+  "                                                                          !!!!                                                  ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-interior-position-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/marker-interior-position-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..1c614a3
--- /dev/null
+++ b/tests/visual_tests/grids/marker-interior-position-600-400-1.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                       !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                        ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-interior-position-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-interior-position-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..10926da
--- /dev/null
+++ b/tests/visual_tests/grids/marker-interior-position-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                  !!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-multi-policy-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-multi-policy-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..0131d6c
--- /dev/null
+++ b/tests/visual_tests/grids/marker-multi-policy-600-400-2.0-grid-reference.json
@@ -0,0 +1,110 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                         !!                                           ", 
+  "                                                                                                        ! !!                                          ", 
+  "                                                                                                       !   !!                                         ", 
+  "                                                                                                      !     !!                                        ", 
+  "                                                                                                     !       !!                                       ", 
+  "                                                                                                    !         !!                                      ", 
+  "                                                                                                   !           !!                                     ", 
+  "                                                                                                  !             !!                                    ", 
+  "                                                                                                 !               !!                                   ", 
+  "                                                                                                !                 !!                                  ", 
+  "                                                                                               !                   !!                                 ", 
+  "                                 #                                                            !                     !!                                ", 
+  "                                # #         #                                                !                       !!                               ", 
+  "                               #   #       ###                                              !                         !!                              ", 
+  "                              #     #     ##  #                                            !                           !!                             ", 
+  "                             #       #   ##    #                                          !            !!!!!!           !!                            ", 
+  "                            #         # ##      #                                        !           !!!!!!!!!!          !!                           ", 
+  "                           #           ##       #                                       !           !!!!!!!!!!!!          !!                          ", 
+  "                          #             ##     #                                       !           !!!!!!!!!!!!!!          !!                         ", 
+  "                         #               ##   #                                       !            !!!!!!!!!!!!!!           !!                        ", 
+  "                        #       ####      ## #                                       !            !!!!!!!!!!!!!!!            !!                       ", 
+  "                       #       #####       ##                                       !             !!!!!!!!!!!!!!!!            !!                      ", 
+  "                      #        #####        #                                      !              !!!!!!!!!!!!!!!!             !!                     ", 
+  "                       #       #####       ##                                       !             !!!!!!!!!!!!!!!!             !                      ", 
+  "                        #       ####      ####                                       !            !!!!!!!!!!!!!!!             !                       ", 
+  "                         #               ###  #                                       !            !!!!!!!!!!!!!!            !                        ", 
+  "                          #             ###    #                                       !           !!!!!!!!!!!!!!           !                         ", 
+  "                           #           ###      #                                       !           !!!!!!!!!!!!           !                          ", 
+  "                            #         ###       ##                                       !           !!!!!!!!!!           !                           ", 
+  "                             #       ##  #     ##                                         !           !!!!!!!            !                            ", 
+  "                              #     ##    #   ##                                           !                            !                             ", 
+  "                               #   ##      # ##                                             !                          !                              ", 
+  "                                # ##        ##                                               !                        !                               ", 
+  "                                 ##                                                           !                      !                                ", 
+  "                                                                                               !                    !                                 ", 
+  "                                                                                                !                  !                                  ", 
+  "                                                                                                 !                !                                   ", 
+  "                                                                                                  !              !                                    ", 
+  "                                                                                                   !            !                                     ", 
+  "                                                                                                    !          !                                      ", 
+  "                                                                                                     !        !                                       ", 
+  "                                                                                                      !      !                                        ", 
+  "                                                                                                       !    !                                         ", 
+  "                                                                                                        !  !                                          ", 
+  "                                                                                                         !!                                           ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                       !                                                              ", 
+  "                                                  !                                 !!!!!!!                                                           ", 
+  "                                                 !!!                               !!!!!!!!!             !!                                           ", 
+  "                                                !  !!                              !!!!!!!!!            !  !                                          ", 
+  "                                               !    !!                            !!!!!!!!!!!          !    !                                         ", 
+  "                                              !      !!                           !!!!!!!!!!!         !      !                                        ", 
+  "                                             !        !!                          !!!!!!!!!!!        !        !                                       ", 
+  "                                            !          !!                         !!!!!!!!!!        !          !                                      ", 
+  "                                           !            !!                         !!!!!!!!!       !            !                                     ", 
+  "                                          !              !!                         !!!!!!!       !              !                                    ", 
+  "                                         !                !!                         !!!!        !                !                                   ", 
+  "                                        !                  !!                                   !                  !                                  ", 
+  "                                       !                    !!                                 !                    !                                 ", 
+  "                                      !                      !!                               !                      !                                ", 
+  "                                     !                        !!                             !                        !                               ", 
+  "                                    !                          !!                           !                          !                              ", 
+  "                                   !              !             !!                         !             !!             !                             ", 
+  "                                  !           !!!!!!!!           !!                       !           !!!!!!!!           !                            ", 
+  "                                 !           !!!!!!!!!!!          !!                     !           !!!!!!!!!!           !                           ", 
+  "                                !           !!!!!!!!!!!!!          !!                   !           !!!!!!!!!!!!           !                          ", 
+  "                               !            !!!!!!!!!!!!!           !!                 !           !!!!!!!!!!!!!!           !                         ", 
+  "                              !            !!!!!!!!!!!!!!!           !!               !            !!!!!!!!!!!!!!            !                        ", 
+  "                             !             !!!!!!!!!!!!!!!            !!             !            !!!!!!!!!!!!!!!             !                       ", 
+  "                            !              !!!!!!!!!!!!!!!             !!           !             !!!!!!!!!!!!!!!!             !                      ", 
+  "                            !              !!!!!!!!!!!!!!!              !          !!             !!!!!!!!!!!!!!!!             !                      ", 
+  "                             !             !!!!!!!!!!!!!!!             !            !!            !!!!!!!!!!!!!!!!            !                       ", 
+  "                              !            !!!!!!!!!!!!!!!            !              !!            !!!!!!!!!!!!!!            !                        ", 
+  "                               !           !!!!!!!!!!!!!!            !                !!           !!!!!!!!!!!!!!           !                         ", 
+  "                                !           !!!!!!!!!!!!!           !                  !!           !!!!!!!!!!!!           !                          ", 
+  "                                 !           !!!!!!!!!!!           !                    !!          !!!!!!!!!!!!          !                           ", 
+  "                                  !           !!!!!!!!!           !                      !!          !!!!!!!!!           !                            ", 
+  "                                   !            !!!!!            !                        !!           !!!!!            !                             ", 
+  "                                    !                           !                          !!                          !                              ", 
+  "                                     !                         !                            !!                        !                               ", 
+  "                                      !                       !                              !!                      !                                ", 
+  "                                       !                     !                                !!                    !                                 ", 
+  "                                        !                   !                                  !!                  !                                  ", 
+  "                                         !                 !                                    !!                !                                   ", 
+  "                                          !               !                                      !!              !                                    ", 
+  "                                           !             !                                        !!            !                                     ", 
+  "                                            !           !                                          !!          !                                      ", 
+  "                                             !         !                                            !!        !                                       ", 
+  "                                              !       !                                              !!      !                                        ", 
+  "                                               !     !                                                !!    !                                         ", 
+  "                                                !   !                                                  !!  !                                          ", 
+  "                                                 ! !                                                    !!!                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-hex-grid-257-256-1.0-grid-reference.json b/tests/visual_tests/grids/marker-on-hex-grid-257-256-1.0-grid-reference.json
index 6562f46..3754d9a 100644
--- a/tests/visual_tests/grids/marker-on-hex-grid-257-256-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/marker-on-hex-grid-257-256-1.0-grid-reference.json
@@ -47,7 +47,7 @@
   "  !         !    !    !    !    !    !    !    !         !       ", 
   "                                                                 ", 
   " !                                                        !      ", 
-  "       !    !    !    !    !    !    !    !    !    !         !  ", 
+  "       !    !    !    !    !    !    !    !    !    !    !    !  ", 
   "                                                               ! ", 
   "                                                               ! ", 
   "       !    !    !    !    !    !    !    !    !    !    !    !  ", 
diff --git a/tests/visual_tests/grids/marker-on-hex-grid-257-256-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-hex-grid-257-256-2.0-grid-reference.json
new file mode 100644
index 0000000..a3c42b2
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-hex-grid-257-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "        !!!!      !!!!      !!!!      !!!!      !!!!      !!!!   ", 
+  "       !         !         !    !    !    !         !         !  ", 
+  "            !                                            !       ", 
+  "      !         !         !                !         !         ! ", 
+  "  !         !         !    !    !    !    !    !         !       ", 
+  "       !                                                      !  ", 
+  " !         !                                    !         !      ", 
+  "       !    !    !    !    !    !    !    !    !    !         !  ", 
+  "                                                                 ", 
+  "      !                                              !         ! ", 
+  "  !    !    !    !    !    !    !    !    !    !    !    !       ", 
+  " !                                                               ", 
+  " !                                                        !      ", 
+  "  !    !    !    !    !    !    !    !    !    !    !    !    !  ", 
+  "      !                                              !         ! ", 
+  "                                                                 ", 
+  "       !    !    !    !    !    !    !    !    !    !         !  ", 
+  " !         !                                    !         !      ", 
+  "                                                              !  ", 
+  "  !         !    !    !    !    !    !    !    !         !       ", 
+  "      !         !                          !         !         ! ", 
+  "  !         !                                            !       ", 
+  "       !         !         !    !    !    !         !         !  ", 
+  " !      !!!!      !!!!      !!!!      !!!!      !!!!      !!!!   ", 
+  "       !         !                                  !         !  ", 
+  "  !         !         !         !    !         !         !       ", 
+  "   !!!!      !!!!      !!!!      !!!!      !!!!      !!!!      ! ", 
+  "  !         !         !                        !         !       ", 
+  "       !         !         !              !         !         !  ", 
+  " !      !!!!      !!!!      !!!!      !!!!      !!!!      !!!!   ", 
+  "       !         !         !    !         !         !         !  ", 
+  "  !         !                                  !         !       ", 
+  "   !!!!      !!!!      !!!!      !!!!      !!!!      !!!!      ! ", 
+  "  !         !         !    !    !    !         !         !       ", 
+  "       !                                            !         !  ", 
+  " !         !         !                !         !         !      ", 
+  "       !         !    !    !    !    !    !    !    !         !  ", 
+  "  !                                                      !       ", 
+  "      !         !                                    !         ! ", 
+  "  !         !    !    !    !    !    !    !    !    !    !       ", 
+  "                                                                 ", 
+  " !         !                                              !      ", 
+  "       !    !    !    !    !    !    !    !    !    !    !    !  ", 
+  "                                                               ! ", 
+  "      !                                                        ! ", 
+  "  !    !    !    !    !    !    !    !    !    !    !    !    !  ", 
+  " !         !                                              !      ", 
+  "                                                                 ", 
+  "  !         !    !    !    !    !    !    !    !    !    !       ", 
+  "      !         !                                    !         ! ", 
+  "  !                                                              ", 
+  "       !         !    !    !    !    !    !    !    !         !  ", 
+  " !         !         !                          !         !      ", 
+  "       !                                            !         !  ", 
+  "  !         !         !    !    !    !    !    !         !       ", 
+  "   !!!!      !!!!      !!!!      !!!!      !!!!      !!!!      ! ", 
+  "  !         !                                  !         !       ", 
+  "       !         !         !    !         !         !         !  ", 
+  " !      !!!!      !!!!      !!!!      !!!!      !!!!      !!!!   ", 
+  "       !         !                        !         !         !  ", 
+  "  !         !         !              !         !         !       ", 
+  "   !!!!      !!!!      !!!!      !!!!      !!!!      !!!!      ! ", 
+  "            !         !         !    !         !         !       ", 
+  "       !         !                                  !         !  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-hex-grid-400-600-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-hex-grid-400-600-2.0-grid-reference.json
new file mode 100644
index 0000000..67f9164
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-hex-grid-400-600-2.0-grid-reference.json
@@ -0,0 +1,159 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                           !     !         !     !         !                        ", 
+  "          !      !        !      !        !                                       !        !      ! ", 
+  "         !                        !               !       !       !       !                         ", 
+  "                  !      !               !               !         !               !                ", 
+  "   !!!!!!          !!!!!!          !!!!!!          !!!!!!           !!!!!!          !!!!!!          ", 
+  "  !               !                      !               !         !               !                ", 
+  "         !                        !               !       !               !               !        !", 
+  " !               !        !               !                       !               !        !      ! ", 
+  "                                                 !         !     !         !                        ", 
+  "!               !          !               !               !     !               !                  ", 
+  "          !      !        !      !               !                         !               !      ! ", 
+  " !                                        !       !       !       !       !                         ", 
+  "  !      !        !      !        !      !                                         !      !        !", 
+  "        !                          !               !     !         !     !                          ", 
+  "  !                                      !         !     !         !     !                          ", 
+  "         !        !      !        !                                       !        !      !        !", 
+  " !                                        !               !       !               !                 ", 
+  "          !                      !               !                         !               !      ! ", 
+  "!          !!!!!!          !!!!!!          !!!!!!           !!!!!!          !!!!!!          !!!!!!  ", 
+  "          !                      !               !         !               !               !        ", 
+  " !               !        !               !               !       !               !                 ", 
+  "         !        !      !        !               !                       !               !        !", 
+  "  !                                      !         !     !         !               !                ", 
+  "        !                          !               !     !               !               !          ", 
+  "  !               !      !               !                                         !      !        !", 
+  "                                                  !       !       !       !                         ", 
+  "          !      !        !      !                                                !        !      ! ", 
+  "!                                          !     !         !     !               !                  ", 
+  "!                                          !     !         !     !         !                        ", 
+  " !        !      !        !      !        !                                       !        !      ! ", 
+  "         !                        !               !       !       !       !                         ", 
+  "  !               !      !               !                         !               !               !", 
+  "   !!!!!!          !!!!!!          !!!!!!          !!!!!!           !!!!!!          !!!!!!          ", 
+  "  !                                      !               !         !               !                ", 
+  "         !                        !               !                       !               !        !", 
+  " !               !        !               !                       !               !               ! ", 
+  "          !                      !               !         !     !         !                        ", 
+  "!          !!!!!!          !!!!!!          !!!!!!          !!!!!!!          !!!!!!          !!!!!!  ", 
+  "          !      !        !      !               !                         !               !      ! ", 
+  " !                                        !       !       !       !               !                 ", 
+  "         !        !      !        !                                                !      !        !", 
+  "                                                   !     !         !     !                          ", 
+  "                                                   !     !         !     !                          ", 
+  "         !        !      !        !                                                !      !        !", 
+  " !                                        !       !       !       !               !                 ", 
+  "          !      !        !      !               !                         !               !      ! ", 
+  "!               !          !               !               !     !               !                  ", 
+  "          !                      !               !         !     !         !                        ", 
+  " !               !        !               !                       !               !               ! ", 
+  "         !                        !               !                       !               !        !", 
+  "  !                                      !               !         !               !                ", 
+  "   !!!!!!          !!!!!!          !!!!!!          !!!!!!           !!!!!!          !!!!!!          ", 
+  "  !               !      !               !                         !               !               !", 
+  "         !                        !               !       !       !       !                         ", 
+  " !        !      !        !      !        !                                       !        !      ! ", 
+  "!                                          !     !         !     !         !                        ", 
+  "!                                          !     !         !     !               !                  ", 
+  "          !      !        !      !                                                !        !      ! ", 
+  "                                                  !       !       !       !                         ", 
+  "  !               !      !               !                                         !      !        !", 
+  "        !                          !               !     !               !               !          ", 
+  "  !                                      !         !     !         !               !                ", 
+  "         !        !      !        !               !                       !               !        !", 
+  " !               !        !               !               !       !               !                 ", 
+  "          !                      !               !         !               !               !        ", 
+  "!          !!!!!!          !!!!!!          !!!!!!           !!!!!!          !!!!!!          !!!!!!  ", 
+  "          !                      !               !                         !               !      ! ", 
+  " !                                        !               !       !               !                 ", 
+  "         !        !      !        !                                       !               !        !", 
+  "  !                                      !         !     !         !     !                          ", 
+  "        !                          !               !     !         !     !                          ", 
+  "  !      !        !      !        !      !                                         !      !        !", 
+  " !                                        !       !       !       !       !                         ", 
+  "          !      !        !      !                                         !               !      ! ", 
+  "!               !                          !               !     !               !                  ", 
+  "                                                 !         !     !         !                        ", 
+  " !               !        !               !                                       !        !      ! ", 
+  "         !                        !               !       !               !               !         ", 
+  "  !               !      !               !               !         !               !                ", 
+  "   !!!!!!          !!!!!!          !!!!!!          !!!!!!           !!!!!!          !!!!!!          ", 
+  "  !               !      !               !               !         !               !                ", 
+  "         !                        !               !       !               !               !         ", 
+  " !               !        !               !                                       !        !      ! ", 
+  "!                                          !     !         !     !         !                        ", 
+  "!                                          !               !     !               !                  ", 
+  "          !      !        !      !                                         !               !      ! ", 
+  " !                                        !       !       !       !       !                         ", 
+  "  !      !        !      !        !      !                                         !      !        !", 
+  "        !                          !               !     !         !     !               !          ", 
+  "  !                                      !         !     !         !     !                          ", 
+  "         !        !      !        !                                       !               !        !", 
+  " !               !                        !               !       !               !                 ", 
+  "          !                      !               !         !               !               !      ! ", 
+  "!          !!!!!!          !!!!!!          !!!!!!           !!!!!           !!!!!!          !!!!!!  ", 
+  "          !                      !               !         !               !               !        ", 
+  " !               !        !               !               !       !               !                 ", 
+  "         !        !      !        !               !                       !               !        !", 
+  "  !                                      !         !     !         !     !                          ", 
+  "        !                          !               !     !               !               !          ", 
+  "                  !      !        !      !                                         !      !        !", 
+  "                                          !       !       !       !       !                         ", 
+  "          !      !        !      !                                         !      !        !      ! ", 
+  "                                           !               !     !               !                  ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-hex-grid-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/marker-on-hex-grid-600-400-1.0-grid-reference.json
index 3c1cfc8..70e9164 100644
--- a/tests/visual_tests/grids/marker-on-hex-grid-600-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/marker-on-hex-grid-600-400-1.0-grid-reference.json
@@ -45,7 +45,7 @@
   "                                    !               !              !!  !  !        !   !           !               !                                  ", 
   "                                    !      !        !      !       !!              !!              !      !        !      !                           ", 
   "                            !      !               !               !       !               !      !               !                                   ", 
-  "                                !                           !     !            !  !            !           !               !                          ", 
+  "                                !                           !     !            !  !            !                           !                          ", 
   "                             ! !!!!            !!!!            !!!!         ! !!!!          ! !!!!            !!!!                                    ", 
   "                            !      !        !              !!              !!     !        !      !        !                                          ", 
   "                            !                      !       !       !       !               !              !       !       !                           ", 
diff --git a/tests/visual_tests/grids/marker-on-hex-grid-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-hex-grid-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..0f4089f
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-hex-grid-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                     !!!!!!          !!!!!!         !!!!!!          !!!!!!          !!!!!!          !!!!!!                            ", 
+  "                                    !               !                     !               !        !               !                                  ", 
+  "                                                           !       !       !       !                                      !                           ", 
+  "                                   !        !      !                                       !      !        !      !                                   ", 
+  "                                                  !         !     !         !                                    !         !                          ", 
+  "                                                            !     !         !     !                                        !                          ", 
+  "                            !      !        !      !                                       !      !        !      !                                   ", 
+  "                                           !               !       !               !                      !               !                           ", 
+  "                           !                        !               !     !               !        !               !                                  ", 
+  "                                     !!!!!!          !!!!!!          !!!!!          !!!!!!          !!!!!!          !!!!!!                            ", 
+  "                           !        !               !                     !               !        !               !                                  ", 
+  "                                           !               !       !               !                      !               !                           ", 
+  "                            !      !        !      !                                       !      !        !      !                                   ", 
+  "                                                  !         !     !         !                                    !         !                          ", 
+  "                                                  !         !     !         !                                    !         !                          ", 
+  "                            !      !        !      !                                       !      !        !      !                                   ", 
+  "                                                           !       !       !       !                      !               !                           ", 
+  "                           !        !               !                     !               !        !               !                                  ", 
+  "                                     !!!!!!          !!!!!!          !!!!!          !!!!!!          !!!!!!          !!!!!!                            ", 
+  "                           !                        !               !     !               !                        !                                  ", 
+  "                                           !               !       !               !                      !               !                           ", 
+  "                            !      !        !      !                                       !      !        !      !                                   ", 
+  "                                                            !     !         !     !                                        !                          ", 
+  "                                                  !         !     !         !                                    !         !                          ", 
+  "                            !      !        !      !                              !        !      !        !                                          ", 
+  "                                                           !       !       !       !                                      !                           ", 
+  "                           !        !               !                     !               !        !               !                                  ", 
+  "                                     !!!!!!          !!!!!!         !!!!!!          !!!!!!          !!!!!!          !!!!!!                            ", 
+  "                           !                        !               !     !               !                        !                                  ", 
+  "                                    !      !               !       !               !                      !               !                           ", 
+  "                            !      !               !                       !               !      !               !                                   ", 
+  "                                                            !     !         !     !                                        !                          ", 
+  "                             !                    !               !         !               !                    !         !                          ", 
+  "                            !      !        !                                     !        !      !        !                                          ", 
+  "                                                           !       !       !       !                                      !                           ", 
+  "                           !        !      !        !                                     !        !      !        !                                  ", 
+  "                                          !               !         !               !                    !               !                            ", 
+  "                           !                        !               !     !               !                        !     !                            ", 
+  "                                    !      !               !                       !               !      !               !                           ", 
+  "                            !      !               !                       !               !      !               !                                   ", 
+  "                                            !               !     !               !                        !               !                          ", 
+  "                             !                    !               !         !               !                    !                                    ", 
+  "                            !      !        !                                     !        !      !        !                                          ", 
+  "                                                   !       !       !       !                                      !       !                           ", 
+  "                           !        !      !        !                                     !        !      !        !                                  ", 
+  "                                                          !         !     !         !                    !               !                            ", 
+  "                                                    !     !         !     !                                        !     !                            ", 
+  "                                    !      !               !                       !               !      !               !                           ", 
+  "                            !                      !               !       !               !                      !                                   ", 
+  "                                            !               !     !               !                        !               !                          ", 
+  "                             !!!!!!          !!!!!!          !!!!!!         !!!!!!          !!!!!!          !!!!!!                                    ", 
+  "                                   !        !               !                     !               !        !               !                          ", 
+  "                                                   !       !       !       !                                      !       !                           ", 
+  "                           !        !      !        !                              !      !        !      !                                           ", 
+  "                                                          !         !     !         !                                    !                            ", 
+  "                                                    !     !         !     !                                        !     !                            ", 
+  "                           !        !      !                                       !      !        !      !                                           ", 
+  "                            !                      !               !       !               !                      !                                   ", 
+  "                                   !        !               !     !               !                        !               !                          ", 
+  "                             !!!!!!          !!!!!!          !!!!!          !!!!!!          !!!!!!          !!!!!!                                    ", 
+  "                                   !        !               !                     !               !        !               !                          ", 
+  "                            !                      !               !       !               !                      !       !                           ", 
+  "                           !        !      !                                       !      !        !      !                                           ", 
+  "                                                          !         !     !         !                                    !                            ", 
+  "                                                          !         !     !         !                                    !                            ", 
+  "                           !        !      !                                       !      !        !      !                                           ", 
+  "                            !                      !       !       !       !               !                      !       !                           ", 
+  "                                   !        !               !                     !               !        !               !                          ", 
+  "                             !!!!!!          !!!!!!          !!!!!          !!!!!!          !!!!!!          !!!!!!                                    ", 
+  "                                            !               !     !               !                        !               !                          ", 
+  "                            !                      !               !       !               !                      !                                   ", 
+  "                           !        !      !                                       !      !        !      !                                           ", 
+  "                                                    !     !         !     !                                        !     !                            ", 
+  "                                                          !         !     !         !                                    !                            ", 
+  "                           !        !      !        !                              !      !        !      !                                           ", 
+  "                                                   !       !       !       !                                      !       !                           ", 
+  "                                   !        !               !                     !               !        !               !                          ", 
+  "                             !!!!!!          !!!!!!          !!!!!!         !!!!!!          !!!!!!          !!!!!!                                    ", 
+  "                                            !               !     !               !                        !               !                          ", 
+  "                            !                      !               !       !               !      !               !                                   ", 
+  "                                    !      !               !                       !               !      !               !                           ", 
+  "                                                    !     !         !     !                                        !     !                            ", 
+  "                                          !               !         !               !                    !               !                            ", 
+  "                           !        !      !        !                                     !        !      !        !                                  ", 
+  "                                                   !       !       !       !                                      !       !                           ", 
+  "                            !      !        !                                     !        !      !        !                                          ", 
+  "                             !                    !               !         !               !                    !                                    ", 
+  "                                                            !     !         !     !                        !               !                          ", 
+  "                            !      !               !                       !               !      !               !                                   ", 
+  "                                    !      !               !                       !               !      !               !                           ", 
+  "                           !                        !               !     !               !                        !     !                            ", 
+  "                                          !               !         !               !                    !               !                            ", 
+  "                           !        !      !        !                                     !        !      !        !                                  ", 
+  "                                                           !       !       !       !                                      !                           ", 
+  "                            !      !        !                                     !        !      !        !                                          ", 
+  "                             !                    !         !     !         !                                    !         !                          ", 
+  "                                                            !     !         !     !                                        !                          ", 
+  "                                   !               !                       !               !      !               !                                   ", 
+  "                                           !               !       !               !                      !               !                           ", 
+  "                                                    !               !     !               !                        !                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..3b8ff42
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                              !                                                                                       ", 
+  "                                                              !!                                                                                      ", 
+  "                                                             ! !                                                                                      ", 
+  "                                                             !  !                                                                                     ", 
+  "                                                            !   !                                                                                     ", 
+  "                                                            !    !                                                                                    ", 
+  "                                                           !     !                                                                                    ", 
+  "                                                           !      !                                                                                   ", 
+  "                                                          !       !                                                                                   ", 
+  "                                                          !        !                                                                                  ", 
+  "                                                         !         !                                                                                  ", 
+  "                                                         !          !                                                                                 ", 
+  "                                                        !           !                                                                                 ", 
+  "                                                        !            !!                                                                               ", 
+  "                                                       !             !!!!                                                                             ", 
+  "                                                       !            !!!!!                                                                             ", 
+  "                                                      !             !!!!!                                                                             ", 
+  "                                                      !             !!!!!                                                                             ", 
+  "                                                     !               !!!                                                                              ", 
+  "                                                     !                  !                                                                             ", 
+  "                                                    !                   !                                                                             ", 
+  "                                                    !                    !                                                                            ", 
+  "                                                   !                     !                                                                            ", 
+  "                                                   !                      !                                                                           ", 
+  "                                                  !                       !                                                                           ", 
+  "                                                  !                        !                                                                          ", 
+  "                                                 !                         !                                                                          ", 
+  "                                                 !                          !                                                                         ", 
+  "                                                !                           !                                                                         ", 
+  "                                                !                            !                                                                        ", 
+  "                                               !                             !                                                                        ", 
+  "                                               !                              !                                                                       ", 
+  "                                              !                               !                                                                       ", 
+  "                                              !                                !                                                                      ", 
+  "                                             !                                 !                                                                      ", 
+  "                                             !                                  !                                                                     ", 
+  "                                            !                                   !                                                                     ", 
+  "                                            !                                    !                                                                    ", 
+  "                                           !                                     !                                                                    ", 
+  "                                           !                                      !                                                                   ", 
+  "                                          !                                       !                                                                   ", 
+  "                                          !                                        !                                                                  ", 
+  "                                         !                                         !                                                                  ", 
+  "                                         !                                          !                                                                 ", 
+  "                                        !                                           !                                                                 ", 
+  "                                        !                                            !                                                                ", 
+  "                                       !                                             !                                                                ", 
+  "                                       !                                              !                                                               ", 
+  "                                      !                                               !                                                               ", 
+  "                                      !                                                !                                                              ", 
+  "                                     !                                                 !                                                              ", 
+  "                                     !                                                  !                                                             ", 
+  "                                    !                                                   !                                                             ", 
+  "                                    !                                                    !                                                            ", 
+  "                                   !                                                     !                                                            ", 
+  "                                   !                                                      !                                                           ", 
+  "                                  !                                                       !                                                           ", 
+  "                                  !                                                        !                                                          ", 
+  "                                 !                                                         !                                                          ", 
+  "                                 !                                                          !                                                         ", 
+  "                                !                                                           !                                                         ", 
+  "                                !                                                            !                                                        ", 
+  "                               !                                                             !                                                        ", 
+  "                               !                                                              !                                                       ", 
+  "                              !                                                               !                                                       ", 
+  "                              !                                                                !                                                      ", 
+  "                             !                                                                 !                                                      ", 
+  "                             !                                                                  !                                                     ", 
+  "                            !                                                                   !                                                     ", 
+  "                            !                                                                    !                                                    ", 
+  "                           !                                                                     !                                                    ", 
+  "                           !                                                                      !                                                   ", 
+  "                          !                                                                       !                                                   ", 
+  "                          !                                                                        !                                                  ", 
+  "                         !                                                                         !                                                  ", 
+  "                         !                                                                          !                                    !            ", 
+  "                        !                                                                           !                                   !             ", 
+  "                        !                                                                            !                                 !              ", 
+  "                       !                                                                             !                                !               ", 
+  "                       !                                                                              !                              !                ", 
+  "                      !                                                                               !                             !                 ", 
+  "                      !                                                                                !                           !                  ", 
+  "                     !                                                                                 !                          !                   ", 
+  "                     !                                                                                  !                        !                    ", 
+  "                    !                                                                                   !                       !                     ", 
+  "                    !                                                                                    !                     !                      ", 
+  "                   !                                                                                     !                    !                       ", 
+  "                   !                                                                                      !                  !                        ", 
+  "                  !                                                                                       !                 !                         ", 
+  "                  !                                                                                        !               !                          ", 
+  "                 !                                                                                         !              !                           ", 
+  "                 !                                                                                          !            !                            ", 
+  "                !                                                                                           !           !                             ", 
+  "                !                                                                                            !         !                              ", 
+  "               !                                                                                             !        !                               ", 
+  "               !                                                                                              !      !                                ", 
+  "              !                                                                                               !     !                                 ", 
+  "              !                                                                                                !   !                                  ", 
+  "             !                                                                                                 !  !                                   ", 
+  "             !                                                                                                  !!                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-avoid-edges-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-avoid-edges-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..6edc4b7
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-avoid-edges-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                      !!!!!!!!                                                                                  ", 
+  "                                     !!!!!!!!!!!!                                                                               ", 
+  "                                     !!!!!!!!!!!!!!!                                                                            ", 
+  "                                     !!!!!!!!!!!!!!!!      !!!!!!!!                                                             ", 
+  "                                      !!!!!!!!!!!!!!!!! !!!!!!!!!!!                                                             ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                            ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                            ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                              ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                          ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                         ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                         ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                         ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                          ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                          ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                         ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                       ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!   ! !!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!                 !!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!!!!! !                                     ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!                               !!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!                               !!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!                                  !!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!                                        !!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!                                         !!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!                                            !!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!                                             !!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "       !!!!!!!!!!!!!!!!!!!                                                !!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "         !!!!!!!!!!!!!!!!!                                                !!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "          !!!!!!!!!!!!!!!!!                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "            !!!!!!!!!!!!!!!                                                    !!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "              !!!!!!!!!!!!!                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!                      !", 
+  "            !   !!!!!!!!!!!                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!                      ! ", 
+  "                    !!!!!!                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!                     !  ", 
+  "           !                                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!                     !   ", 
+  "                                                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!                  !    ", 
+  "          !                                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !     ", 
+  "                                                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!           !      ", 
+  "         !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        !       ", 
+  "                                                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !        ", 
+  "        !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !         ", 
+  "                                                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !          ", 
+  "       !                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                                                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "      !                                                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "     !                                                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "                                                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "    !                                                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "   !                                                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "                                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "  !                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "                                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  " !                                                                                     !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!     ", 
+  "                                                                                        !!!!!!!!!!!   !!!!!!!!!!!!!!!!!!!!      ", 
+  "!                                                                                       !!!!!!!!!     !   !!!!!!!!!!!!          ", 
+  "                                                                                                           !!!!!!!!!!!          ", 
+  "                                                                                                            !!!!!!!!!!          ", 
+  "                                                                                                              !!!!!!!!          ", 
+  "                                                                                                                !!!!!           ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-avoid-edges-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-avoid-edges-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..4bf2218
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-avoid-edges-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                   !!!!!!!!!!                                                   ", 
+  "                                                              !!!!!!!!!!!!!!!!!!                                                ", 
+  "                                                   !        !!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                           !!!!                    !     !!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                       !!!!!!!!!!!!!!             ! !  !!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                      !!!!!!!!!!!!!!!!!!          ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!      ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !                                         ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!                           ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                         !  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                        !     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                        !        !!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                       !           !!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                       !                !!!!!!!!!!      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                      !                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                      !                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                     !                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                     !                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                    !                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                    !                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                   !                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                   !                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                  !                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                  !                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                 !                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                 !                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                !                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                !                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "               !                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "              !                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "             !                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "             !                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "            !                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !", 
+  "            !                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ! ", 
+  "           !                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !  ", 
+  "           !                                                        !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   ", 
+  "          !                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !    ", 
+  "          !                                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "         !                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "         !                                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "        !                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "       !                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "       !                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "      !                                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "      !                                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "     !                                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "     !                                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "    !                                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "    !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "   !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "   !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "  !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "  !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  " !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  " !                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "!                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "!                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!!! !                         ", 
+  "                                                                          !!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                                                           !!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                                                           !!!!!!!!!!!!!!!!!!                                   ", 
+  "                                                                              !!!!!!!!!!!                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..6d60c09
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-1.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                            !!!!!!                                                                                    ", 
+  "                                                         ! !! !!!! !!                                                                                 ", 
+  "                                                       !  !  !!!  !  !                                                                                ", 
+  "                                                      !  !   !! !  !!!                                                                                ", 
+  "                                                    !   ! !!!       !  !!                                                                             ", 
+  "                                                   !     !  !    !      !                                                                             ", 
+  "                                                  !    !   !         !   !!                                                                           ", 
+  "                                                 !    !    !      !   !   !                                                                           ", 
+  "                                                !    !    !                !                                                                          ", 
+  "                                               !    !     !       !!!  !   !!                                                                         ", 
+  "                                                   !!    !        !!!       !!                                                                        ", 
+  "                                              !   !!     !          !   !                                                                             ", 
+  "                                             !          !                !   !!                                                                       ", 
+  "                                            !     !     !            !   !   !!!                                                                      ", 
+  "                                            !   !      !                  !  !!!                                                                      ", 
+  "                                           !   ! !     !              !   !  !! !                                                                     ", 
+  "                                          !     !     !                    !   !!!                                                                    ", 
+  "                                         !!   ! !     !                !   !   !!!                                                                    ", 
+  "                                         !!  ! !     !                      !!   !                                                                    ", 
+  "                                            ! !!     !                  !  !!!  !                                                                     ", 
+  "                                        !  !!!!!    !                       !!    !                                                                   ", 
+  "                                           !!      !!                    !   !    !                                                                   ", 
+  "                                       !   ! !     !!                    !!      !                                                                    ", 
+  "                                          !        !                     !!!  !    !                                                                  ", 
+  "                                      !     !     !                       !                                                                           ", 
+  "                                         !        !                        !   !  !                                                                   ", 
+  "                                     !     !     !                             !  ! !                                                                 ", 
+  "                                        !        !                          !                                                                         ", 
+  "                                    !     !     !                               !  !                                                                  ", 
+  "                                       !        !                            !     ! !                                                                ", 
+  "                                   !     !     !                                 !   !                                                                ", 
+  "                                      !        !                              !! !  !                                                                 ", 
+  "                                  !   ! !     !                              !!!  ! ! !                                                               ", 
+  "                                     !  !     !                               !!  !   !                                                               ", 
+  "                                 !   ! !     !                                                                                                        ", 
+  "                                 !     !     !                                  !  ! !                                                                ", 
+  "                                    !       !                                        !!!                                                              ", 
+  "                                !     !     !                                    !  !!!!                                                              ", 
+  "                                   !       !                                        !!! !                                                             ", 
+  "                              !!     !     !                                      !   !!!!                                                            ", 
+  "                              !!! !       !                                          !!!!!                                                            ", 
+  "                              !!  !!!     !                                        ! !!                                                               ", 
+  "                              ! !!!!!!   !                                           !!!                                                              ", 
+  "                                !!!!!   !!                                          !!!! !                                                            ", 
+  "                             !   ! !   !!!                                           !   !                                                            ", 
+  "                             !  ! !     !!                                          !!!!                                                              ", 
+  "                                ! !    !                                            !!!!! !                                                           ", 
+  "                            !          !                                              ! ! !                                                           ", 
+  "                            !  ! !    !                                                 ! !                                                           ", 
+  "                               !      !                                                ! !                                                            ", 
+  "                           !    !    !                                                   ! !                                                          ", 
+  "                              ! !    !                                                  !! !                                                          ", 
+  "                          !    !    !                                                                                                                 ", 
+  "                          !    !    !                                                    !!                                                           ", 
+  "                             !     !                                                     !! !                                                         ", 
+  "                         !    !    !                                                     !!!!                                                         ", 
+  "                         !  !     !                                                        !                                                          ", 
+  "                            !!    !                                                        ! !                                                        ", 
+  "                        !    !   !                                                          !!                                                        ", 
+  "                        !  !     !                                                          !                                                         ", 
+  "                           !!   !                                                           !!                                                        ", 
+  "                       !        !                                                          !!!!                                                       ", 
+  "                       !  !!   !                                                            !!!                                                       ", 
+  "                      !!  !!   !                                                             !!!!                                                     ", 
+  "                      !! !!!  !                                                              !!!!                                                     ", 
+  "                      !! !!! !!                                                               !!!                                                     ", 
+  "                      ! !!! !!!                                                               !!                                                      ", 
+  "                        !!! !!!                                                               !!!!                                                    ", 
+  "                     !   !  !                                                                  !!!                                                    ", 
+  "                     !  !   !                                                                  ! !                                                    ", 
+  "                        !  !                                                                   ! !                                                    ", 
+  "                    !      !                                                                     !!                                                   ", 
+  "                    !  !  !                                                                     !                                                     ", 
+  "                       !  !                                                                       !!                                                  ", 
+  "                         !                                                                       !!                                                   ", 
+  "                   !  !  !                                                                       ! !!                                   !!            ", 
+  "                   !  ! !                                                                          !!!                                  !!!           ", 
+  "                     !  !                                                                         ! !!!                                !!!            ", 
+  "                  !  ! !                                                                            !                                 !!!             ", 
+  "                  !  ! !                                                                           !! !                              !     !          ", 
+  "                    !!!                                                                            ! !                              ! !!              ", 
+  "                      !                                                                             !! !                           ! !!   !           ", 
+  "                 ! !!!                                                                              ! !                           ! !!!               ", 
+  "                 ! !!!                                                                               !! !                        !  !!!  !            ", 
+  "                    !                                                                               !!!!                        !  ! !!               ", 
+  "                ! ! !                                                                                !!! !                    !!  ! !  !!!            ", 
+  "                !  !                                                                                  !!!!                   !!! !  !  !!!            ", 
+  "               !!! !                                                                                   !!!!                  !!!   !   !              ", 
+  "               !!!!!                                                                                    !!                  !   !                     ", 
+  "               !!!!!                                                                                    !! !!             !!   !  !   !               ", 
+  "               !!!!!                                                                                      !!!            !!!  !  !   !                ", 
+  "                !!!!                                                                                     !!!!            !!! !   !   !                ", 
+  "                !                                                                                         !!            !   !   !   !                 ", 
+  "              !!!                                                                                          ! !         !       !                      ", 
+  "              !! !                                                                                          !         !  !!!       !                  ", 
+  "              !! !                                                                                          !!!      !   !!   !   !                   ", 
+  "              !                                                                                              !      !    !!  !                        ", 
+  "             !! !                                                                                             !!   !    !   !    !                    ", 
+  "             !  !                                                                                              !! !    !   !    !                     ", 
+  "             !  !                                                                                              !!!   !    !    !                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..8615c78
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                           !!!!!!!                                                                                    ", 
+  "                                                         !!!! !! ! !!                                                                                 ", 
+  "                                                       !  !  ! !  !  !                                                                                ", 
+  "                                                     !!  !   !  !  !  !!                                                                              ", 
+  "                                                    !   !   !   !   !   !                                                                             ", 
+  "                                                   !   !    !   !!!!!!! !!                                                                            ", 
+  "                                                  !    !   !  !! !   !  !!                                                                            ", 
+  "                                                 !    !    !!     !   !   !                                                                           ", 
+  "                                                !    !    !!      !   !    !!                                                                         ", 
+  "                                               !     !   !!        !   !   ! !                                                                        ", 
+  "                                              !!    !   !!         !!!! !   !!!                                                                       ", 
+  "                                              !    !   ! !        !!!!! !   ! !                                                                       ", 
+  "                                             !     !  ! !         !!!!!  !!! ! !                                                                      ", 
+  "                                            !     !  !  !          !!!! !!!!!   !                                                                     ", 
+  "                                            !    !  !  !            !!  !!!!! ! !                                                                     ", 
+  "                                           !     ! !!  !              ! !!!!! !  !                                                                    ", 
+  "                                          !     !  !  !               ! !!!!   ! !                                                                    ", 
+  "                                          !     ! !   !                !   !   !  !                                                                   ", 
+  "                                         !     ! !   !                 !    !   !                                                                     ", 
+  "                                         !     ! !   !                  !   !   !  !                                                                  ", 
+  "                                        !     ! !   !                   !       !  !                                                                  ", 
+  "                                       !      !!    !                    !   !   !  !                                                                 ", 
+  "                                       !     ! !   !                     !   !   !  !                                                                 ", 
+  "                                      !      !!    !                      !   !  !   !                                                                ", 
+  "                                      !     ! !   !                       !   !   !  !                                                                ", 
+  "                                     !      !!    !                        !   !  !  !                                                                ", 
+  "                                     !     !!    !                         !   !  !   !                                                               ", 
+  "                                    !      !!    !                          !   !  !  !                                                               ", 
+  "                                  !!!    !!!    !                           !   !  !  !                                                               ", 
+  "                                 !!!!! !!!!!    !                        !!!!!  !  !   !                                                              ", 
+  "                                 !!!!! !!!!!   !                         !!!!!   !     !                                                              ", 
+  "                                 !!!!! !!!!!!!!!                         !!!!!!  !  !  !                                                              ", 
+  "                                 !!!!  !!!!!!!!!!!                       !!!!!!   ! !   !                                                             ", 
+  "                                  !!   !!!  !!!!!!!                       !!!  !  ! !   !                                                             ", 
+  "                                 !    !!!!! !!!!!!!                            !     !  !                                                             ", 
+  "                                 !    !!!!!  !!!!!!                             !  ! !                                                                ", 
+  "                                !     !!!!! !  !!!                              !  ! !   !                                                            ", 
+  "                                !     !!!!  !                                    !  !    !                                                            ", 
+  "                                     ! !!  !                                     !  ! !  !                                                            ", 
+  "                               !     !!    !                                      !   !   !                                                           ", 
+  "                               !      !   !                                       !  !!   !                                                           ", 
+  "                              !     !!    !                                        ! !    !                                                           ", 
+  "                              !     !!   !                                         !  !!                                                              ", 
+  "                                   !     !                                          ! !!   !                                                          ", 
+  "                             !     !!   !                                           !  !   !                                                          ", 
+  "                             !    ! !   !                                            ! !!  !                                                          ", 
+  "                                  !!   !                                             ! !!                                                             ", 
+  "                            !    ! !   !                                              ! !   !                                                         ", 
+  "                            !    !    !                                               !!!!! !                                                         ", 
+  "                           !     !!   !                                                !!!!!!                                                         ", 
+  "                           !    ! !  !                                                 !!!!! !                                                        ", 
+  "                           !    !    !                                                 !!!!! !                                                        ", 
+  "                          !    ! !  !                                                   !!!  !                                                        ", 
+  "                          !    ! !  !                                                    !! !!!!                                                      ", 
+  "                          !     !  !                                                     !!!!!!!!                                                     ", 
+  "                         !    ! !  !                                                     !!!!!!!!                                                     ", 
+  "                         !    ! ! !                                                      !!!!!!!!                                                     ", 
+  "                         !   ! !  !                                                      !!!!!!!                                                      ", 
+  "                        !    ! ! !                                                       !!!!  !                                                      ", 
+  "                        !   !  ! !                                                          !  !                                                      ", 
+  "                        !   ! ! !                                                           !!                                                        ", 
+  "                       !    ! ! !                                                           !!  !                                                     ", 
+  "                       !   !  !!                                                             !! !                                                     ", 
+  "                       !   ! ! !                                                             !! !                                                     ", 
+  "                      !   !  !!                                                              !!  !                                                    ", 
+  "                      !   !  !!                                                                ! !                                                    ", 
+  "                      !     !!                                                                !! !                                                    ", 
+  "                         !  !!                                                                ! !                                                     ", 
+  "                     !   !  !                                                                   ! !                                                   ", 
+  "                     !  !  !!                                                                  !!!!                                                   ", 
+  "                        !  !                                                                   ! !                                                    ", 
+  "                    !      !                                                                    !!!!                                                  ", 
+  "                    !  !  !                                                                     ! !!                                                  ", 
+  "                    !  !  !                                                                     !!!!                                                  ", 
+  "                 !!!!!!  !!                                                                     !!!!!                                                 ", 
+  "                 !!!!!!!!!                                                                     !!!!!!                                    !            ", 
+  "                 !!!!!!!!!                                                                     !!!!!!!                                  !!            ", 
+  "                 !!!!!!!!!!!                                                                    !!!!!!                                 !!             ", 
+  "                  !!!!!!!!!!!                                                                     ! !!                                !!!             ", 
+  "                  ! !!!!!!!!!                                                                      ! !!                              !!!              ", 
+  "                  ! ! !!!!!!!                                                                      ! !!                             ! !!      !       ", 
+  "                 !  ! !!!!!                                                                         !  !                           ! !!       !       ", 
+  "                 ! ! !!!!!!                                                                         ! !!                          ! ! !      !        ", 
+  "                 ! ! ! !!!                                                                           !!!!                        !  !!       !        ", 
+  "                    !  !                                                                             ! !!                       !  ! !      !         ", 
+  "                ! ! !  !                                                                              !!!!                     !  ! !       !         ", 
+  "                ! !!  !                                                                               ! !!                    !  !  !      !          ", 
+  "                !! !  !                                                                                !!!!                  !  !! !       !          ", 
+  "                 !!   !                                                                                ! !!                 !   !         !           ", 
+  "               !  !                                                                                     !!!!               !   !  !       !           ", 
+  "               !!!   !                                                                                   !!!              !   !  !       !            ", 
+  "               !!!   !                                                                                   !!!!            !!! !   !       !            ", 
+  "              !!!    !                                                                                    !!!           !!!!!   !       !             ", 
+  "              !!!                                                                                          !!!         !!!!!!! !                      ", 
+  "              !!    !                                                                                      !!!        !  !!!!! !       !              ", 
+  "              !!    !                                                                                       !!!      !   !!!! !       !               ", 
+  "             !!     !                                                                                        !!  !!!!    !   !        !               ", 
+  "             !!    !                                                                                          !!!!!!!   !   !        !                ", 
+  "             !     !                                                                                           !!!!!! !!   !        !                 ", 
+  "             !     !                                                                                           !!!!!!!    !         !                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-vertex-first-placement-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-vertex-first-placement-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..84f2841
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-vertex-first-placement-600-400-1.0-grid-reference.json
@@ -0,0 +1,111 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                     !                                                 !                                                 !            ", 
+  "                                   !!  !                                             !!  !                                             !!             ", 
+  "                                 !!      !                                         !!      !                                         !!               ", 
+  "                               !!          !                                     !!          !                                     !!                 ", 
+  "                             !!              !                                 !!              !                                 !!                   ", 
+  "                           !!                  !                             !!                  !                             !!                     ", 
+  "                         !!                      !                         !!                      !                         !!                       ", 
+  "                       !!                          !                     !!                          !                     !!                         ", 
+  "                     !!                              !                 !!                              !                 !!                           ", 
+  "                   !!                                  !             !!                                  !             !!                             ", 
+  "                 !!                                      !         !!                                      !         !!                               ", 
+  "               !!                                          !     !!                                          !     !!                                 ", 
+  "            !!!                                              ! !!                                              ! !!                                   ", 
+  "           !!!                                                                                                                                        ", 
+  "            !                                                                                                                                         ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "            ##                                                                                                                                        ", 
+  "           ###############################################################################################################################            ", 
+  "            ##                                                                                                                                        ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "            $$                                                                                                                                        ", 
+  "           $$$                                                                                                                                        ", 
+  "            $                                                                                                                                         ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-vertex-first-placement-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-vertex-first-placement-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..8f6bea0
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-vertex-first-placement-600-400-2.0-grid-reference.json
@@ -0,0 +1,111 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                     !!                                                !!                                                !            ", 
+  "                                   !!  !!                                            !!  !!                                            !!             ", 
+  "                                 !!      !!                                        !!      !!                                        !!               ", 
+  "                               !!          !!                                    !!          !!                                    !!                 ", 
+  "                             !!              !!                                !!              !!                                !!                   ", 
+  "                           !!                  !!                            !!                  !!                            !!                     ", 
+  "                         !!                      !!                        !!                      !!                        !!                       ", 
+  "                       !!                          !!                    !!                          !!                    !!                         ", 
+  "                     !!                              !!                !!                              !!                !!                           ", 
+  "                   !!                                  !!            !!                                  !!            !!                             ", 
+  "            !!   !!                                      !!        !!                                      !!        !!                               ", 
+  "           !!!!!!                                          !!    !!                                          !!    !!                                 ", 
+  "          !!!!!!                                             !!!!                                              !!!!                                   ", 
+  "          !!!!!!                                                                                                                                      ", 
+  "          !!!!!                                                                                                                                       ", 
+  "            !!                                                                                                                                        ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "           ####                                                                                                                                       ", 
+  "          #####                                                                                                                                       ", 
+  "          ################################################################################################################################            ", 
+  "          #####                                                                                                                                       ", 
+  "           ####                                                                                                                                       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "            $$                                                                                                                                        ", 
+  "           $$$$                                                                                                                                       ", 
+  "          $$$$$$                                                                                                                                      ", 
+  "          $$$$$$                                                                                                                                      ", 
+  "          $$$$$                                                                                                                                       ", 
+  "            $$                                                                                                                                        ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-vertex-last-placement-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-vertex-last-placement-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..8f0444c
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-vertex-last-placement-600-400-1.0-grid-reference.json
@@ -0,0 +1,111 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                         !!           ", 
+  "                                     !                                                 !                                                !!!           ", 
+  "                                   !!  !                                             !!  !                                             !!!!           ", 
+  "                                 !!      !                                         !!      !                                         !!               ", 
+  "                               !!          !                                     !!          !                                     !!                 ", 
+  "                             !!              !                                 !!              !                                 !!                   ", 
+  "                           !!                  !                             !!                  !                             !!                     ", 
+  "                         !!                      !                         !!                      !                         !!                       ", 
+  "                       !!                          !                     !!                          !                     !!                         ", 
+  "                     !!                              !                 !!                              !                 !!                           ", 
+  "                   !!                                  !             !!                                  !             !!                             ", 
+  "                 !!                                      !         !!                                      !         !!                               ", 
+  "               !!                                          !     !!                                          !     !!                                 ", 
+  "             !!                                              ! !!                                              ! !!                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                         ##           ", 
+  "             ##############################################################################################################################           ", 
+  "                                                                                                                                         ##           ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "            $$                                                                                                                                        ", 
+  "           $$$                                                                                                                                        ", 
+  "            $                                                                                                                                         ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-and-vertex-last-placement-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-vertex-last-placement-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..12a46e0
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-and-vertex-last-placement-600-400-2.0-grid-reference.json
@@ -0,0 +1,111 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                        !!!!          ", 
+  "                                                                                                                                       !!!!!          ", 
+  "                                     !!                                                !!                                              !!!!!!         ", 
+  "                                   !!  !!                                            !!  !!                                            !!!!!          ", 
+  "                                 !!      !!                                        !!      !!                                        !! !!!!          ", 
+  "                               !!          !!                                    !!          !!                                    !!                 ", 
+  "                             !!              !!                                !!              !!                                !!                   ", 
+  "                           !!                  !!                            !!                  !!                            !!                     ", 
+  "                         !!                      !!                        !!                      !!                        !!                       ", 
+  "                       !!                          !!                    !!                          !!                    !!                         ", 
+  "                     !!                              !!                !!                              !!                !!                           ", 
+  "                   !!                                  !!            !!                                  !!            !!                             ", 
+  "                 !!                                      !!        !!                                      !!        !!                               ", 
+  "               !!                                          !!    !!                                          !!    !!                                 ", 
+  "             !!                                              !!!!                                              !!!!                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                        ####          ", 
+  "                                                                                                                                       #####          ", 
+  "             ################################################################################################################################         ", 
+  "                                                                                                                                       #####          ", 
+  "                                                                                                                                        ####          ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "            $$                                                                                                                                        ", 
+  "           $$$$                                                                                                                                       ", 
+  "          $$$$$$                                                                                                                                      ", 
+  "          $$$$$$                                                                                                                                      ", 
+  "          $$$$$                                                                                                                                       ", 
+  "            $$                                                                                                                                        ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-spacing-eq-width-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-spacing-eq-width-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..8ff5cfe
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-spacing-eq-width-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                           !!!!!      ", 
+  "                                                                                                                                          !!!!!!!     ", 
+  "                                                                                                                                !!       !!!!!!!!!    ", 
+  "                                                                                                                              !!!!!!    !!!!!!!!!!   !", 
+  "                                                                                                                             !!!!!!!!   !!!!!!!!!!!   ", 
+  "                                                                                                                  !!!!!     !!!!!!!!!!  !!!!!!!!!!!   ", 
+  "                                                                                                                 !!!!!!!!   !!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                                                                                                       !!!      !!!!!!!!!   !!!!!!!!!!   !!!!!!!!!    ", 
+  "                                                                                                     !!!!!!!    !!!!!!!!!!  !!!!!!!!!!   !!!!!!!!     ", 
+  "                                                                                                    !!!!!!!!!   !!!!!!!!!!  !!!!!!!!!!    !!!!!!      ", 
+  "                                                                                          !!!!!     !!!!!!!!!   !!!!!!!!!!   !!!!!!!!                 ", 
+  "                                                                                        !!!!!!!!   !!!!!!!!!!!! !!!!!!!!!!   !!!!!!!!                 ", 
+  "                                                                              !!!!      !!!!!!!!!  !!!!!!!!!!!  !!!!!!!!!!     !!!!                   ", 
+  "                                                                             !!!!!!!   !!!!!!!!!!  !!!!!!!!!!!   !!!!!!!!                             ", 
+  "                                                                            !!!!!!!!   !!!!!!!!!!   !!!!!!!!!     !!!!!!                              ", 
+  "                                                                 !!!!!!    !!!!!!!!!!  !!!!!!!!!!!  !!!!!!!!!                                         ", 
+  "                                                                !!!!!!!!   !!!!!!!!!!! !!!!!!!!!!    !!!!!!!                                          ", 
+  "                                                      !!!!     !!!!!!!!!   !!!!!!!!!!   !!!!!!!!!      !!!                                            ", 
+  "                                                    !!!!!!!    !!!!!!!!!! !!!!!!!!!!!   !!!!!!!!                                                      ", 
+  "                                                   !!!!!!!!!   !!!!!!!!!!  !!!!!!!!!!     !!!!!                                                       ", 
+  "                                        !!!!!!     !!!!!!!!!   !!!!!!!!!!   !!!!!!!!                                                                  ", 
+  "                                       !!!!!!!!   !!!!!!!!!!!  !!!!!!!!!!    !!!!!!                                                                   ", 
+  "                             !!!!      !!!!!!!!!  !!!!!!!!!!!  !!!!!!!!!       !!                                                                     ", 
+  "                           !!!!!!!!   !!!!!!!!!! !!!!!!!!!!!!   !!!!!!!!                                                                              ", 
+  "                   !       !!!!!!!!!  !!!!!!!!!!   !!!!!!!!!     !!!!!                                                                                ", 
+  "                !!!!!!    !!!!!!!!!!  !!!!!!!!!!   !!!!!!!!!                                                                                          ", 
+  "               !!!!!!!!   !!!!!!!!!!  !!!!!!!!!!    !!!!!!!                                                                                           ", 
+  "    !!!!!     !!!!!!!!!!  !!!!!!!!!!   !!!!!!!!!       !!                                                                                             ", 
+  "   !!!!!!!    !!!!!!!!!!!!!!!!!!!!!!    !!!!!!!                                                                                                       ", 
+  "  !!!!!!!!!   !!!!!!!!!!  !!!!!!!!!!     !!!!!                                                                                                        ", 
+  "  !!!!!!!!!   !!!!!!!!!!   !!!!!!!!                                                                                                                   ", 
+  " !!!!!!!!!!!  !!!!!!!!!!    !!!!!!                                                                                                                    ", 
+  " !!!!!!!!!!!  !!!!!!!!!                                                                                                                               ", 
+  "!!!!!!!!!!!!   !!!!!!!                                                                                                                                ", 
+  "  !!!!!!!!!      !!!!                                                                                                                                 ", 
+  "  !!!!!!!!!                                                                                                                                           ", 
+  "    !!!!!                                                                                                                                             ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-on-line-spacing-eq-width-overlap-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-spacing-eq-width-overlap-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..8ff5cfe
--- /dev/null
+++ b/tests/visual_tests/grids/marker-on-line-spacing-eq-width-overlap-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                           !!!!!      ", 
+  "                                                                                                                                          !!!!!!!     ", 
+  "                                                                                                                                !!       !!!!!!!!!    ", 
+  "                                                                                                                              !!!!!!    !!!!!!!!!!   !", 
+  "                                                                                                                             !!!!!!!!   !!!!!!!!!!!   ", 
+  "                                                                                                                  !!!!!     !!!!!!!!!!  !!!!!!!!!!!   ", 
+  "                                                                                                                 !!!!!!!!   !!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                                                                                                       !!!      !!!!!!!!!   !!!!!!!!!!   !!!!!!!!!    ", 
+  "                                                                                                     !!!!!!!    !!!!!!!!!!  !!!!!!!!!!   !!!!!!!!     ", 
+  "                                                                                                    !!!!!!!!!   !!!!!!!!!!  !!!!!!!!!!    !!!!!!      ", 
+  "                                                                                          !!!!!     !!!!!!!!!   !!!!!!!!!!   !!!!!!!!                 ", 
+  "                                                                                        !!!!!!!!   !!!!!!!!!!!! !!!!!!!!!!   !!!!!!!!                 ", 
+  "                                                                              !!!!      !!!!!!!!!  !!!!!!!!!!!  !!!!!!!!!!     !!!!                   ", 
+  "                                                                             !!!!!!!   !!!!!!!!!!  !!!!!!!!!!!   !!!!!!!!                             ", 
+  "                                                                            !!!!!!!!   !!!!!!!!!!   !!!!!!!!!     !!!!!!                              ", 
+  "                                                                 !!!!!!    !!!!!!!!!!  !!!!!!!!!!!  !!!!!!!!!                                         ", 
+  "                                                                !!!!!!!!   !!!!!!!!!!! !!!!!!!!!!    !!!!!!!                                          ", 
+  "                                                      !!!!     !!!!!!!!!   !!!!!!!!!!   !!!!!!!!!      !!!                                            ", 
+  "                                                    !!!!!!!    !!!!!!!!!! !!!!!!!!!!!   !!!!!!!!                                                      ", 
+  "                                                   !!!!!!!!!   !!!!!!!!!!  !!!!!!!!!!     !!!!!                                                       ", 
+  "                                        !!!!!!     !!!!!!!!!   !!!!!!!!!!   !!!!!!!!                                                                  ", 
+  "                                       !!!!!!!!   !!!!!!!!!!!  !!!!!!!!!!    !!!!!!                                                                   ", 
+  "                             !!!!      !!!!!!!!!  !!!!!!!!!!!  !!!!!!!!!       !!                                                                     ", 
+  "                           !!!!!!!!   !!!!!!!!!! !!!!!!!!!!!!   !!!!!!!!                                                                              ", 
+  "                   !       !!!!!!!!!  !!!!!!!!!!   !!!!!!!!!     !!!!!                                                                                ", 
+  "                !!!!!!    !!!!!!!!!!  !!!!!!!!!!   !!!!!!!!!                                                                                          ", 
+  "               !!!!!!!!   !!!!!!!!!!  !!!!!!!!!!    !!!!!!!                                                                                           ", 
+  "    !!!!!     !!!!!!!!!!  !!!!!!!!!!   !!!!!!!!!       !!                                                                                             ", 
+  "   !!!!!!!    !!!!!!!!!!!!!!!!!!!!!!    !!!!!!!                                                                                                       ", 
+  "  !!!!!!!!!   !!!!!!!!!!  !!!!!!!!!!     !!!!!                                                                                                        ", 
+  "  !!!!!!!!!   !!!!!!!!!!   !!!!!!!!                                                                                                                   ", 
+  " !!!!!!!!!!!  !!!!!!!!!!    !!!!!!                                                                                                                    ", 
+  " !!!!!!!!!!!  !!!!!!!!!                                                                                                                               ", 
+  "!!!!!!!!!!!!   !!!!!!!                                                                                                                                ", 
+  "  !!!!!!!!!      !!!!                                                                                                                                 ", 
+  "  !!!!!!!!!                                                                                                                                           ", 
+  "    !!!!!                                                                                                                                             ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-path-expression-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/marker-path-expression-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..20f9c8f
--- /dev/null
+++ b/tests/visual_tests/grids/marker-path-expression-500-100-1.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                              !!                                                             ", 
+  "                                                              !!                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-path-expression-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/marker-path-expression-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..c637689
--- /dev/null
+++ b/tests/visual_tests/grids/marker-path-expression-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-recenter-collide-256-128-1.0-grid-reference.json b/tests/visual_tests/grids/marker-recenter-collide-256-128-1.0-grid-reference.json
new file mode 100644
index 0000000..31b1530
--- /dev/null
+++ b/tests/visual_tests/grids/marker-recenter-collide-256-128-1.0-grid-reference.json
@@ -0,0 +1,42 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                      !!                   #                    ", 
+  "                  !!!!!!!                  #                    ", 
+  "                      !                    #                    ", 
+  "                                                                ", 
+  "                        !                                       ", 
+  "                        !                                       ", 
+  "                        !                                       ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-recenter-collide-256-128-2.0-grid-reference.json b/tests/visual_tests/grids/marker-recenter-collide-256-128-2.0-grid-reference.json
new file mode 100644
index 0000000..7b1e68c
--- /dev/null
+++ b/tests/visual_tests/grids/marker-recenter-collide-256-128-2.0-grid-reference.json
@@ -0,0 +1,42 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                       !                   #                    ", 
+  "                       !!!                 #                    ", 
+  "                        !!!                #                    ", 
+  "              !!!!!!!!!!!!!!               #                    ", 
+  "                        !!!                #                    ", 
+  "                       !!                  #                    ", 
+  "                       !                                        ", 
+  "                                                                ", 
+  "                           !                                    ", 
+  "                           !                                    ", 
+  "                           !                                    ", 
+  "                           !                                    ", 
+  "                           !                                    ", 
+  "                           !                                    ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-svg-empty-g-element-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/marker-svg-empty-g-element-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..a6ae153
--- /dev/null
+++ b/tests/visual_tests/grids/marker-svg-empty-g-element-500-100-1.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                              !!                                                             ", 
+  "                                                             !!!!                                                            ", 
+  "                                                             !!!!                                                            ", 
+  "                                                             !!!!                                                            ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-svg-empty-g-element-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/marker-svg-empty-g-element-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..7710c5b
--- /dev/null
+++ b/tests/visual_tests/grids/marker-svg-empty-g-element-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                              !!                                                             ", 
+  "                                                             !!!!                                                            ", 
+  "                                                             !!!!                                                            ", 
+  "                                                            !!!!!!                                                           ", 
+  "                                                          !!!!!!!!!!                                                         ", 
+  "                                                          !!!!!!!!!!                                                         ", 
+  "                                                          !!!!!!!!!!                                                         ", 
+  "                                                          !!!!!!!!!!                                                         ", 
+  "                                                          !!!!!!!!!!                                                         ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-svg-opacity-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/marker-svg-opacity-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..9c34bf4
--- /dev/null
+++ b/tests/visual_tests/grids/marker-svg-opacity-500-100-2.0-grid-reference.json
@@ -0,0 +1,37 @@
+{
+ "keys": [
+  "", 
+  "4", 
+  "3", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                    !!!!!                                                    ", 
+  "                                                                    !!!!!                                                    ", 
+  "                                                                    !!!!!                                                    ", 
+  "                                                                    !!!!!                                                    ", 
+  "                                                                    !!!!!                                                    ", 
+  "                                                               #####                                                         ", 
+  "                                                               #####                                                         ", 
+  "                                                               #####                                                         ", 
+  "                                                               #####                                                         ", 
+  "                                                               #####                                                         ", 
+  "                                                          $$$$$                                                              ", 
+  "                                                          $$$$$                                                              ", 
+  "                                                          $$$$$                                                              ", 
+  "                                                          $$$$$                                                              ", 
+  "                                                          $$$$$                                                              ", 
+  "                                                     %%%%%                                                                   ", 
+  "                                                     %%%%%                                                                   ", 
+  "                                                     %%%%%                                                                   ", 
+  "                                                     %%%%%                                                                   ", 
+  "                                                     %%%%%                                                                   ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-svg-opacity2-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/marker-svg-opacity2-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..20f9c8f
--- /dev/null
+++ b/tests/visual_tests/grids/marker-svg-opacity2-500-100-1.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                              !!                                                             ", 
+  "                                                              !!                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-svg-opacity2-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/marker-svg-opacity2-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..c637689
--- /dev/null
+++ b/tests/visual_tests/grids/marker-svg-opacity2-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                            !!!!!                                                            ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-symbolizer-expressions-all-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/marker-symbolizer-expressions-all-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/marker-symbolizer-expressions-all-256-256-1.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-symbolizer-expressions-all-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/marker-symbolizer-expressions-all-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/marker-symbolizer-expressions-all-256-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-vs-point-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/marker-vs-point-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..26209b6
--- /dev/null
+++ b/tests/visual_tests/grids/marker-vs-point-512-512-1.0-grid-reference.json
@@ -0,0 +1,139 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                               !!!                                                                                              ", 
+  "                            !!!!!!!!!                                                                                           ", 
+  "                          !!!!!!!!!!!!!                                                                                         ", 
+  "                         !!!!!!!!!!!!!!!                                                                                        ", 
+  "                        !!!!!!!!!!!!!!!!                                                                                        ", 
+  "                        !!!!!!!!!!!!!!!!!                                                                                       ", 
+  "                       !!!!!!!!!!!!!!!!!!                                                                                       ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                       !!!!!!!!!!!!!!!!!!                                                                                       ", 
+  "                        !!!!!!!!!!!!!!!!!                                                                                       ", 
+  "                        !!!!!!!!!!!!!!!!                                                                                        ", 
+  "                         !!!!!!!!!!!!!!!                                                                                        ", 
+  "                          !!!!!!!!!!!!                                                                                          ", 
+  "                            !!!!!!!!!                                                                                           ", 
+  "                               !!!                                                                                              ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                             #######                                                                                            ", 
+  "                           ###########                                                                                          ", 
+  "                          #############                                                                                         ", 
+  "                         ###############                                                                                        ", 
+  "                        #################                                                                                       ", 
+  "                        #################                                                                                       ", 
+  "                       ###################                                                                                      ", 
+  "                       ###################                                                                                      ", 
+  "                       ###################                                                                                      ", 
+  "                       ###################                                                                                      ", 
+  "                       ###################                                                                                      ", 
+  "                       ###################                                                                                      ", 
+  "                       ###################                                                                                      ", 
+  "                        #################                                                                                       ", 
+  "                        #################                                                                                       ", 
+  "                         ###############                                                                                        ", 
+  "                          #############                                                                                         ", 
+  "                           ###########                                                                                          ", 
+  "                             #######                                                                                            ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                              $$$$$                                                                                             ", 
+  "                           $$$$$$$$$$                                                                                           ", 
+  "                          $$$$$$$$$$$$$                                                                                         ", 
+  "                         $$$$$$$$$$$$$$$                                                                                        ", 
+  "                        $$$$$$$$$$$$$$$$                                                                                        ", 
+  "                        $$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                       $$$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                       $$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                       $$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                       $$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                       $$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                       $$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                       $$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                       $$$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                        $$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                         $$$$$$$$$$$$$$$                                                                                        ", 
+  "                         $$$$$$$$$$$$$$                                                                                         ", 
+  "                           $$$$$$$$$$$                                                                                          ", 
+  "                            $$$$$$$$                                                                                            ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-vs-point-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/marker-vs-point-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..f184698
--- /dev/null
+++ b/tests/visual_tests/grids/marker-vs-point-512-512-2.0-grid-reference.json
@@ -0,0 +1,139 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                           !!!!!!!!!!                                                                                           ", 
+  "                         !!!!!!!!!!!!!!!                                                                                        ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!                                                                                    ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!                                                                                   ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                  ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                 ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                              ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                 ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                  ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!                                                                                   ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!                                                                                    ", 
+  "                       !!!!!!!!!!!!!!!!!!!                                                                                      ", 
+  "                         !!!!!!!!!!!!!!!                                                                                        ", 
+  "                           !!!!!!!!!!                                                                                           ", 
+  "                             #######                                                                                            ", 
+  "                         ##############                                                                                         ", 
+  "                       ##################                                                                                       ", 
+  "                      #####################                                                                                     ", 
+  "                    ########################                                                                                    ", 
+  "                   ###########################                                                                                  ", 
+  "                  #############################                                                                                 ", 
+  "                 ##############################                                                                                 ", 
+  "                 ###############################                                                                                ", 
+  "                #################################                                                                               ", 
+  "               ##################################                                                                               ", 
+  "               ###################################                                                                              ", 
+  "              ####################################                                                                              ", 
+  "              #####################################                                                                             ", 
+  "              #####################################                                                                             ", 
+  "              #####################################                                                                             ", 
+  "             ######################################                                                                             ", 
+  "             ######################################                                                                             ", 
+  "             ######################################                                                                             ", 
+  "             #######################################                                                                            ", 
+  "             ######################################                                                                             ", 
+  "             ######################################                                                                             ", 
+  "             ######################################                                                                             ", 
+  "              #####################################                                                                             ", 
+  "              #####################################                                                                             ", 
+  "              #####################################                                                                             ", 
+  "               ###################################                                                                              ", 
+  "               ###################################                                                                              ", 
+  "                #################################                                                                               ", 
+  "                #################################                                                                               ", 
+  "                 ###############################                                                                                ", 
+  "                  #############################                                                                                 ", 
+  "                  ############################                                                                                  ", 
+  "                   ##########################                                                                                   ", 
+  "                     #######################                                                                                    ", 
+  "                      #####################                                                                                     ", 
+  "                        #################                                                                                       ", 
+  "                          #############                                                                                         ", 
+  "                                #                                                                                               ", 
+  "                           $$$$$$$$$$$                                                                                          ", 
+  "                        $$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                      $$$$$$$$$$$$$$$$$$$$$                                                                                     ", 
+  "                     $$$$$$$$$$$$$$$$$$$$$$$                                                                                    ", 
+  "                    $$$$$$$$$$$$$$$$$$$$$$$$$                                                                                   ", 
+  "                   $$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                  ", 
+  "                  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                 ", 
+  "                 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                ", 
+  "                $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                               ", 
+  "                $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                               ", 
+  "               $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                              ", 
+  "               $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                              ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                              ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                             ", 
+  "              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                              ", 
+  "               $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                              ", 
+  "               $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                               ", 
+  "                $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                               ", 
+  "                $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                ", 
+  "                 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                ", 
+  "                  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                 ", 
+  "                   $$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                  ", 
+  "                    $$$$$$$$$$$$$$$$$$$$$$$$$                                                                                   ", 
+  "                     $$$$$$$$$$$$$$$$$$$$$$                                                                                     ", 
+  "                       $$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                         $$$$$$$$$$$$$$$                                                                                        ", 
+  "                            $$$$$$$$                                                                                            ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-whole-multi-polygon-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/marker-whole-multi-polygon-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..e384685
--- /dev/null
+++ b/tests/visual_tests/grids/marker-whole-multi-polygon-512-512-1.0-grid-reference.json
@@ -0,0 +1,332 @@
+{
+ "keys": [
+  "", 
+  "71", 
+  "24", 
+  "245", 
+  "238", 
+  "154", 
+  "207", 
+  "189", 
+  "60", 
+  "82", 
+  "132", 
+  "205", 
+  "142", 
+  "101", 
+  "103", 
+  "51", 
+  "72", 
+  "102", 
+  "153", 
+  "163", 
+  "98", 
+  "30", 
+  "242", 
+  "136", 
+  "206", 
+  "110", 
+  "231", 
+  "191", 
+  "106", 
+  "58", 
+  "105", 
+  "65", 
+  "182", 
+  "170", 
+  "171", 
+  "89", 
+  "133", 
+  "233", 
+  "236", 
+  "210", 
+  "186", 
+  "138", 
+  "237", 
+  "200", 
+  "94", 
+  "165", 
+  "86", 
+  "140", 
+  "68", 
+  "5", 
+  "202", 
+  "93", 
+  "199", 
+  "117", 
+  "74", 
+  "84", 
+  "194", 
+  "96", 
+  "88", 
+  "31", 
+  "162", 
+  "12", 
+  "2", 
+  "50", 
+  "139", 
+  "190", 
+  "83", 
+  "114", 
+  "107", 
+  "175", 
+  "97", 
+  "150", 
+  "120", 
+  "155", 
+  "32", 
+  "13", 
+  "235", 
+  "116", 
+  "226", 
+  "118", 
+  "244", 
+  "41", 
+  "234", 
+  "113", 
+  "18", 
+  "214", 
+  "137", 
+  "215", 
+  "126", 
+  "36", 
+  "188", 
+  "99", 
+  "131", 
+  "79", 
+  "240", 
+  "224", 
+  "42", 
+  "220", 
+  "193", 
+  "172", 
+  "158", 
+  "90", 
+  "78", 
+  "173", 
+  "181", 
+  "230", 
+  "75", 
+  "38", 
+  "127", 
+  "225", 
+  "11", 
+  "167", 
+  "208", 
+  "152", 
+  "56", 
+  "73", 
+  "164", 
+  "212", 
+  "183", 
+  "197", 
+  "185", 
+  "26", 
+  "229", 
+  "63", 
+  "95", 
+  "39", 
+  "77", 
+  "87", 
+  "35", 
+  "40", 
+  "119", 
+  "223", 
+  "121", 
+  "157", 
+  "59", 
+  "104", 
+  "52", 
+  "49", 
+  "21", 
+  "198", 
+  "67", 
+  "27", 
+  "28", 
+  "204", 
+  "92", 
+  "161", 
+  "174", 
+  "166", 
+  "156", 
+  "203", 
+  "177", 
+  "148", 
+  "201", 
+  "195", 
+  "43", 
+  "64", 
+  "232", 
+  "6", 
+  "29", 
+  "227", 
+  "20", 
+  "221", 
+  "144", 
+  "217", 
+  "218", 
+  "17", 
+  "123", 
+  "141", 
+  "108", 
+  "115", 
+  "149", 
+  "9", 
+  "151", 
+  "61", 
+  "122", 
+  "146", 
+  "125", 
+  "222", 
+  "124", 
+  "196", 
+  "33", 
+  "160", 
+  "216", 
+  "180", 
+  "169", 
+  "228", 
+  "8", 
+  "219", 
+  "159", 
+  "178", 
+  "179", 
+  "143", 
+  "209", 
+  "62", 
+  "147", 
+  "243", 
+  "145"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                 !!                                                                             ", 
+  "                                    #           !!!!!!!                                                                         ", 
+  "                                   ######    !!!!!!!!!!!                                                                        ", 
+  "                                   #######   !!!!!!!!!!!!                                                                       ", 
+  "                                 ########## !!!!!!!!!!!!!!!                                                                     ", 
+  "                               ########### !!!!!!!!!! ! !!!                         $$$$                                        ", 
+  "                              ############ !!!!!!!!!!!!!!!!!                     $$$$$$$        $$                              ", 
+  "                             ###########!!!!!!!!!!!!!!!!!!!            %%       $$$$$$$$$  $$$ $$$$                             ", 
+  "                            #### ######!!!!!!!!!!!!!!!!!!!            %%%%%%%%  $$$$$$$$   $$$  $$$                             ", 
+  "                            ############!!!!!!!!!!!!!!!!!!!        %% %%%%%%%%% $$$$$$$    $    $$$$$                           ", 
+  "                            ##########   !!!!!!!!!!!!!!!!!!        %%%%%%%%%%%   $$$$$$   $$$  $$$$$$                           ", 
+  "                        ## ##  ########  !!!!!!!!!!!!!!!!!!        %%%%%%%%%              $$$   $$$$$$                          ", 
+  "                       ### ############!!!!!!!!!!!!!!!!!!!!        %%%%%%%%%                    $$$$$$$$                        ", 
+  "                      ################!!!!!!!!!!!!!!!!!!!!!        %%%%%%%%                  $$ $$$ $$$$                        ", 
+  "                     ################!!!!!!!!!!!!!!!!!!!!!!          %%%%%                  $$$$$$$$ $$$             $ $$       ", 
+  "                    ################# !!!!!!!!!!!!!!!!!!!!!           %%%%%          $$ $    $$$$$$$$$$$$$        $ $$$$$       ", 
+  "                   ###################!!!!!!!!!!!!!!!!!!!!!             %%%         $$$$    $$$  $$$$$$$$$      $$$$$$$$        ", 
+  "                    #################   !!!!!!!!!!!!!!!!!!!                         $$$     $$$$$$$$$$$$$      $$$$$$$$$        ", 
+  "                   ##   ############       !!!!!!!!!!!!!!!!           %%            $$$    $$$$$$$$$$$$$$$$ $   $$$ $$          ", 
+  "                   ####  ######### ##      !!!!!!!!!!!!!!!!           %%            $$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$            ", 
+  "                   ###################     !!!!!!!!!!!!!!!                         $$   $$$$$$$$$$$$$$$$$$$$$$$$$ $$            ", 
+  " $$                 ####################   !!!!!!!!!!!!!!!                        $$$    $$$$$$$$$$$$$$$$$$$$$$ $$$$$           ", 
+  " $$               ######################   !!!!!!!!!!!!!!   %%%        &&&&       $$$$  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  $$$    $", 
+  " $$    '''''  ###########################   !!!!!!!!!!!!!   %%%       &&&&&&$     $$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $", 
+  "      ''''''''############################  !!!!!!!!!!!!!           &&&&&&&$$$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "     '''''''''############################# !!!!!!!!!!!!!           &&&(&)$$$$  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "     '''''''''############################# !!!!!!!!!!!             &&((())$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "   $$$''''''''###################### #######!!!!!!!!!!   **        &&&((())$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "  $$$$''''''''##############################!!!!!!!!!   ****       &&((()))$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "  $$''''''''''#############################  !!!!!!!    ***       &&&(((())$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "  ''''''''''''#############################  !!!!!!          ++  &&&&(((())$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "  ''''''''''''################### #########  !!!!!!         +++,,&&&&(((-)$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$  ", 
+  "  '''''''''''''#'###############  #########   !!!!           +,,,&&&&(((-$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$    ", 
+  "  '''''''''''' '''#############   ##########   !!!          ,,,,,&&((((((.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$    ", 
+  "  ''' ''''''   ''''#############  ##########                ,,,,  &(((((/.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   $$ $$$$    ", 
+  "   ''''''''    ''''##########################               0,,,  111($$$/2$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$     $$$$$   ", 
+  " '''''''''      '''###########################             00,,,,33314$$$/2$$$$$$$$$$$$$5$$$$$$$$$$$$$$$$$$$$$$$$$$     $$$$$'''", 
+  "'''''''         ##############################              0,,,,333144$422$$$$$$$$$$$555555$$$$$$$$$$$$$$$66$$$$$$$   $$    '''", 
+  "'''''            ###''########################               ,777338114449999$$$$$55$$5555555$$$$$$::$$$$$$66$$$$$$$  $$$    '''", 
+  "'                 #''''''''''''############;;##              ,7778<<=>??999999$$$55555555555555$::::::::::6666$$$$$$ $$$$       ", 
+  "                   '''''''''''''''#####'###;;;#              @@7@@<<<AA?BC9999$$$$$5555555555556:::::::::::66666$$D$$$$$        ", 
+  "                   ''''''''''''''''##''''##;;#                @@EE<<FFGGGB999$$$$$$5HH55555555666::::::::66666$$$DD$$$$         ", 
+  "                    '''''''''''''''#'''''###                 IIIEEJJKKGGGLL    $$$$5HHHH5555566666::::::66666M$$$DD$$$          ", 
+  "                    '''''''''''''''''''''#          NNNN    NNIIIIIOKKPPLLLLLLLLQRSSSSHHHHHT6666666666666666MM$$ DDD$           ", 
+  "                    ''''''''''''''''''''            NNNNN   NIIIIIUUUVOWLLLLLLLLXXSSSSSHHYY6666666666666666ZZZZZDDD             ", 
+  "                    '''''''''''''''''''              NNNN    IIIIIUUUUVWWWLLLLL[[XSSXSSS]YY^666666666666666ZZZZZDDD             ", 
+  "                    ''''''''''''''''''' ___            N NNN IIII`UUUUVWWWWabcc[[XXXXX]]]^^dd666666666666666ZZZDDDD             ", 
+  "                     '''''''''''''''''  ___              NNI eee```UUf ffWabbbg[hhhXXX]]^^^d6666666666666666ZZZDDDDD            ", 
+  "iii                  jjjjjj''''''''''    _               IIIIee`````fffffaaggggggggXXX^^^^^ddkkklld6666666666DDD DDD            ", 
+  "i'''''               jjjjjjj'''''''''mm                  IInno``````fffffaagggggggpppqX^^^dddkkkddd666666rrrDDDD DDD  DD        ", 
+  " ''''''''              jjjjjj''  j'''stt                 Innnou`````fffffaaaggggggpppq ^^^ddddddddv666w6xrrrrDDD DDD  DD        ", 
+  "    ''''''             jjjjjjjjjjj'''ttt y               onnnouuu``zzz{ff||||||gggpppqq^^dddddddddvv}wwwxrrrrDDD  D~~ DD   ii   ", 
+  "   ii ''''            jjjjjjjjjjjjj\u007f''tty\u0080\u0080\u0081          \u0082\u0082\u0082ooooouuuuzzzz{{{||||||gg\u0083ggqqq  ddddddddvv\u0084\u0084wwwxx\u0085rr      ~~~    iii   ", 
+  "   ii   ''            jjjj   jjjjj\u0086\u0086\u0087'\u0088\u0089y\u0080\u0080\u0081  ii      \u0082\u0082\u0082\u0082\u008a\u008aooouuuzzzz{{{|||||\u0083\u0083\u0083\u0083\u0083qqq    ddddd vdd\u0084\u0084www  \u0085\u0085\u0085\u0085     ~~~     \u008b\u008b\u008b  ", 
+  "   ii                          \u008c\u007f\u0086\u0086\u0086\u008d \u008e\u008f\u008f\u0081\u0081\u0081\u0090         \u0082\u0082\u0082\u0091\u008a\u008a\u008au\u0092\u0092\u0092z\u0093zz{{{|||||\u0094\u0083\u0083\u0083\u0083\u0083\u0083\u0083    dddddd ddd\u0084\u0084wwww \u0085\u0085\u0085\u0085    \u0095~~    \u008b\u008b\u008b\u008b\u008b  ", 
+  "                                \u007f\u0086\u0096\u0096\u0096\u008d\u0097\u008f\u008f\u0097\u0097\u0097             \u0091\u0091\u0098\u0098u\u0092\u0092\u0092\u0099\u0093\u0093\u0093\u0093{{|||||\u0094\u0094\u0083\u0083\u009a\u0083\u0083\u0083    dddd\u009b  dd\u0084\u0084wwwww\u0085\u0085\u0085\u0085\u0085  \u009c\u009d\u009d~~\u009d\u009d  \u008b\u008b\u008b\u008b\u008b  ", 
+  "       \u009e                         \u009f\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u00a0             \u0091\u0098\u0098\u0098\u00a1\u0099\u0099\u0099\u0093\u0093\u0093\u00a2\u00a3\u00a3\u00a3||||\u0094\u0094\u0094\u009a\u009a       \u00a4\u00a4\u00a4\u009b\u009b\u009b d\u00a5\u00a5\u0084ww\u00a5w\u00a6\u0085\u0085\u0085\u00a5\u00a5\u009c\u009c\u009c\u009c\u009d\u009d\u009d\u009d\u009d\u009d\u009d\u008b\u008b\u008b\u008b\u008b\u008b ", 
+  "      \u009e\u009e\u009e                         \u0096\u0096\u0096\u008d\u008d\u008d\u0097\u0097\u0097\u0097\u00a7\u00a7\u00a8            \u0098\u0098\u00a9\u00a1\u00a1\u0099\u0099\u0093\u0093\u00aa\u00a3\u00a3\u00a3\u00a3\u00a3|||\u0094\u0094\u009a\u009a\u009a       \u00a4\u00a4\u00a4\u009b\u009b\u009b d\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a6\u00a5\u00a5\u00a5\u00a5\u00a5\u009c\u009c\u009c \u009d\u009d\u009d\u009d\u009d\u009d\u009d\u009d\u009d\u008b\u008b\u008b\u008b ", 
+  "iii   \u009ei\u009e\u009e                     \u00ab\u00ab  \u008d\u008d\u008d\u008d\u008d\u0097\u0097\u00a0\u00a7\u00a7\u00a7\u00a8\u00ac   \u009e          \u00a1\u00a1  \u00ad\u00ad\u00ae\u00a2\u00af\u00b0\u00b0\u00b0\u00b0\u00b1\u00b1\u00b2\u00b2\u009a\u009a        \u00a4\u00a4\u00a4     \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u009c\u009c\u00a5     \u009d\u009d \u009d\u009d\u008b\u008b\u008b\u009e ", 
+  "iii\u009e  iii\u009e                    \u00ab\u00ab\u00ab\u00ab \u00ab\u00ab\u00b3\u008d\u008d\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac \u009e             \u00ad\u00ad\u00ad\u00ae\u00ae\u00af\u00b0\u00b0\u00b0\u00b4\u00b1\u00b1\u00b2\u00b2\u009a         \u00a4\u00a4\u00a4      \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5  \u00b6\u00b6\u00b6\u009e\u009e\u009e", 
+  " ii\u009e\u009e iii\u009e\u009e                    \u00ab\u00ab\u00ab \u00ab\u00ab\u00b3\u00b3\u00b3\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac \u00ac\u00ac           \u00aa\u00ad\u00ad\u00ae\u00ae\u00b0\u00b0\u00b0\u00b0\u00b4\u00b7\u00b7\u00b7\u00b7\u00b7   \u00b8\u00b8    \u00b9\u00b9\u00a4      \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5 \u00b6\u00b6\u009e\u0 [...]
+  "  \u00bb\u00bb\u009e  \u00bc\u009e\u009e\u009e  \u00bd\u00bd\u00bd                   \u00b3\u00b3\u00b3\u00b3\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac    \u00be\u00be       \u00bf\u00bf\u00b0\u00b0\u00b0\u00b0\u00b0\u00c0\u00b7\u00b7\u00b7\u00b7\u00b7\u00b8 \u00b8\u00b8\u00b8\u00b8  \u00b9\u00b9\u00b9        \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00c1\u00c1\u00a5\u00a5\u00a5\u00a5\u00a5\u00b5\u00b5\u00b5\u00b5\u00b5\u00 [...]
+  "  \u00bb\u00bb\u00bb\u00bc\u00bc\u00bc\u009e\u009e\u009e\u009e \u00bd\u00bd\u00bd                    \u00b3\u00b3\u00b3\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac     \u00be\u00be\u00be       \u00bf\u00bf\u00bf\u00bf\u00b0\u00b0\u00c3\u00c3\u00b7\u00b7\u00b7\u00b7\u00b8\u00b8\u00b8\u00b8\u00b8\u00b8  \u00b9\u00b9\u00b9       \u00c4 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00a5\u00c1\u00c1\u00c1\u00c1\u00a5\u00a5\u00a5\u00a5\u00b5\u00b5\u00b5\u00b5 [...]
+  "\u00c5\u00c5\u00c6\u00c6\u00bb\u00bc\u00bc\u00bc\u00bc\u009e\u009e\u009e \u00bd\u00bd\u00bd                     \u00b3\u00b3\u00b3\u00c7\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac      \u00be         \u00bf\u00bf\u00bf\u00b0\u00c3\u00c3\u00c3\u00c8\u00b7\u00b7\u00c9\u00b8\u00b8\u00ca\u00cb\u00cb\u00cb           \u00c4\u00c4\u00c4 \u00cc\u00cc \u00a5\u00a5\u00a5\u00c1\u00c1\u00c1\u00a5\u00a5\u00cd\u00a5\u00a5\u00b5\u00b5\u00b5\u00b5\u00b5\u00b5\u00c2\u00ce\ [...]
+  "\u00c5\u00c5\u00c6\u00c6\u00c6\u00bc\u00bc\u00bc \u009e\u009e\u00bd\u00bd\u00bd \u00bd                     \u00b3\u00b3\u00b3\u00c7\u00c7\u00c7\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac         \u00be\u00be\u00be    \u00bf\u00bf\u00bf\u00bf\u00c3\u00c3\u00c3\u00c3\u00c8\u00c8\u00d0\u00d1\u00c9\u00c9\u00ca \u00cb             \u00c4\u00c4 \u00cc     \u00a5\u00a5\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd \u00b5\u00b5\u00b5\u00c2\u00c2\u00ce\u00ce\u00ce \u00cf\u00cf", 
+  "\u00c5\u00c5\u00c6\u00c6\u00d2\u00bc\u00bc\u00bc\u00bc\u00bd\u00bd\u00bd\u00bd\u00bd                        \u00b3\u00b3\u00c7\u00c7\u00c7\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac          \u00be\u00be\u00be   \u00bf\u00bf\u00bf\u00bf\u00bf\u00c3\u00c3\u00d3\u00d3\u00c8\u00d0\u00d1\u00d1\u00d1\u00ca\u00ca   \u00cb\u00cb                   \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd  \u00d4\u00d4\u00ce\u00ce\u00ce\u00ce\u00cf\u00cf", 
+  "\u00cf\u00d5\u00d5\u00d5\u00d2\u00bc\u00bc\u00bc\u00bc\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd                       \u00d6\u00c7\u00c7\u00d7\u00d7\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac  \u00ac\u00ac\u00ac       \u00be     \u00bf\u00d8\u00d8\u00d8\u00d9\u00d3\u00d3\u00d3\u00d0\u00d0\u00d1\u00d1\u00d1\u00ca\u00ca\u00da\u00da\u00cb\u00cb\u00cb                \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd \u00d4\u00d4\u00d4\u00ce\u00ce\u00ce\u0 [...]
+  "\u00cf\u00d5\u00d5\u00d5\u00d2 \u00bc\u00bc\u00bc\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd\u00db\u00db\u00db\u00db                  \u00d6\u00c7\u00c7\u00d7\u00d7\u00d7\u00ac\u00ac\u00ac\u00ac\u00ac  \u00ac\u00ac\u00ac              \u00d8\u00d8\u00d8\u00d9\u00d9\u00d3\u00d3\u00d0\u00d0  \u00ca\u00ca \u00da\u00da\u00cb\u00cb\u00cb                \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd \u00d4\u00d4\u00d4\u00d4\u00ce\u00ce\u00d4\u00cf", 
+  "  \u00d5    \u00bc\u00bc\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd\u00bd\u00db\u00db\u00db\u00db    \u00d6\u00d6\u00d6       \u00d6\u00d6  \u00d6\u00dc\u00dc\u00d7\u00d7\u00d7\u00ac\u00ac\u00ac\u00ac\u00ac          \u00be        \u00d8\u00d8\u00d8\u00d9\u00d9\u00dd\u00dd\u00dd\u00d0  \u00ca   \u00da                  \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd  \u00d4\u00d4\u00d4\u00d4  ", 
+  "\u00de\u00de         \u00bd\u00bd\u00bd\u00bd  \u00db\u00db\u00db\u00db   \u00d6\u00d6\u00d6\u00d6       \u00d6\u00d6  \u00d6\u00dc\u00dc\u00dc\u00d7\u00d7\u00ac\u00ac\u00ac\u00ac           \u00be         \u00d8\u00d8\u00df\u00e0\u00dd\u00dd\u00dd                          \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd   \u00e1\u00e1   ", 
+  "\u00de\u00de          \u00bd\u00bd\u00bd          \u00d6\u00d6        \u00d6   \u00d6\u00dc\u00dc\u00dc\u00dc\u00e2\u00ac\u00ac\u00ac                      \u00df\u00df\u00df\u00e0\u00e0\u00dd                             \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd \u00e1\u00e1   ", 
+  "\u00de\u00de                                \u00d6\u00d6\u00d6\u00d6 \u00d6\u00dc\u00dc\u00dc\u00e2\u00e2\u00e2                         \u00df\u00df\u00e0\u00e0                             \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd \u00cd\u00cd \u00e1\u00e1\u00de\u00de ", 
+  "                                  \u00d6\u00d6\u00d6\u00d6\u00d6\u00d6\u00d6\u00dc\u00dc\u00e2\u00e2\u00e2             \u00be\u00be          \u00df                                \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd\u00cd  \u00cd\u00cd  \u00de\u00de\u00de\u00de", 
+  "                                   \u00d6\u00d6 \u00d6\u00d6\u00dc\u00dc\u00dc\u00dc               \u00be\u00be                              \u00d1\u00d1            \u00cd\u00cd\u00cd\u00cd   \u00cd\u00cd\u00cd\u00cd\u00cd\u00cd       \u00de\u00de\u00de", 
+  "                                      \u00d6\u00dc\u00dc\u00dc\u00dc\u00dc               \u00be\u00be\u00be                             \u00d1\u00d1                     \u00cd\u00cd\u00cd\u00cd       \u00de\u00de\u00de", 
+  "                                     \u00d6\u00d6\u00d6\u00dc\u00dc\u00dc                 \u00be\u00be                             \u00d1\u00d1                     \u00cd\u00cd\u00cd\u00cd       \u00de\u00de\u00de", 
+  "\u00de\u00de\u00de                                 \u00d6\u00d6\u00d6\u00d6\u00dc\u00dc                  \u00be                                                      \u00cd\u00cd\u00cd     \u00de\u00de\u00de\u00de ", 
+  "\u00de\u00de\u00de                                 \u00d6\u00d6\u00d6\u00d6\u00dc                                    \u00df\u00df  \u00d1\u00d1\u00d1                                \u00cd\u00cd    \u00de\u00de\u00de\u00de  ", 
+  "                                    \u00d6\u00d6\u00d6\u00d6\u00dc                                   \u00df\u00df\u00df  \u00d1\u00d1\u00d1    \u00d1\u00d1                                \u00de\u00de\u00de  \u00de", 
+  "                                    \u00d6\u00d6\u00d6\u00dc\u00dc  \u00e3                                 \u00df\u00df        \u00d1\u00d1\u00d1\u00d1                               \u00de\u00de\u00de  \u00de", 
+  "                                    \u00d6\u00d6\u00d6\u00d6 \u00e3\u00e3\u00e3\u00e3                                           \u00d1\u00d1\u00e4                               \u00de\u00de\u00de\u00de \u00de", 
+  "                                    \u00d6\u00d6\u00d6\u00d6\u00d6\u00e3\u00e3\u00e3\u00e3     \u00e5\u00e5             \u00e6                       \u00e4\u00e4\u00e4                            \u00cd \u00de\u00de\u00de\u00de  ", 
+  "                                     \u00d6\u00d6\u00d6\u00d6\u00d6\u00e3\u00e3      \u00e5\u00e5\u00e5 \u00e5         \u00e6\u00e6\u00e6                      \u00e4\u00e4\u00e4                            \u00cd\u00cd  \u00de   ", 
+  "                                     \u00d6\u00d6\u00d6\u00d6\u00d6\u00dc       \u00e5\u00e5 \u00e5\u00e5\u00e5        \u00e6\u00e6\u00e6                                                     \u00cd\u00cd      ", 
+  "                                       \u00d6\u00d6\u00d6           \u00e5\u00e5\u00e5                                                                        ", 
+  "                                                     \u00e5\u00e5\u00e5                                                                        ", 
+  "                                                     \u00e5\u00e5\u00e5                                                                        ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-whole-multi-polygon-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/marker-whole-multi-polygon-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..a19629a
--- /dev/null
+++ b/tests/visual_tests/grids/marker-whole-multi-polygon-512-512-2.0-grid-reference.json
@@ -0,0 +1,295 @@
+{
+ "keys": [
+  "", 
+  "71", 
+  "24", 
+  "245", 
+  "238", 
+  "154", 
+  "207", 
+  "189", 
+  "82", 
+  "60", 
+  "132", 
+  "205", 
+  "51", 
+  "103", 
+  "153", 
+  "98", 
+  "241", 
+  "242", 
+  "206", 
+  "30", 
+  "231", 
+  "191", 
+  "182", 
+  "110", 
+  "233", 
+  "236", 
+  "237", 
+  "165", 
+  "210", 
+  "94", 
+  "186", 
+  "194", 
+  "96", 
+  "199", 
+  "200", 
+  "93", 
+  "202", 
+  "89", 
+  "12", 
+  "190", 
+  "150", 
+  "117", 
+  "74", 
+  "139", 
+  "97", 
+  "162", 
+  "83", 
+  "155", 
+  "107", 
+  "175", 
+  "118", 
+  "84", 
+  "31", 
+  "32", 
+  "244", 
+  "120", 
+  "235", 
+  "114", 
+  "2", 
+  "226", 
+  "234", 
+  "50", 
+  "188", 
+  "214", 
+  "131", 
+  "240", 
+  "116", 
+  "42", 
+  "113", 
+  "126", 
+  "220", 
+  "193", 
+  "181", 
+  "36", 
+  "230", 
+  "158", 
+  "225", 
+  "208", 
+  "152", 
+  "172", 
+  "73", 
+  "164", 
+  "224", 
+  "11", 
+  "167", 
+  "183", 
+  "197", 
+  "119", 
+  "229", 
+  "63", 
+  "95", 
+  "75", 
+  "79", 
+  "77", 
+  "40", 
+  "223", 
+  "212", 
+  "157", 
+  "59", 
+  "198", 
+  "204", 
+  "56", 
+  "26", 
+  "49", 
+  "21", 
+  "185", 
+  "166", 
+  "104", 
+  "67", 
+  "177", 
+  "156", 
+  "161", 
+  "38", 
+  "87", 
+  "203", 
+  "148", 
+  "201", 
+  "195", 
+  "64", 
+  "232", 
+  "28", 
+  "174", 
+  "227", 
+  "52", 
+  "217", 
+  "218", 
+  "43", 
+  "6", 
+  "221", 
+  "144", 
+  "151", 
+  "17", 
+  "222", 
+  "115", 
+  "149", 
+  "160", 
+  "216", 
+  "146", 
+  "169", 
+  "9", 
+  "61", 
+  "125", 
+  "228", 
+  "33", 
+  "124", 
+  "196", 
+  "122", 
+  "108", 
+  "8", 
+  "219", 
+  "143", 
+  "159", 
+  "209", 
+  "180", 
+  "178", 
+  "179", 
+  "62", 
+  "147", 
+  "243", 
+  "145"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                !!!!                                                                            ", 
+  "                                   ###         !!!!!!                                                                           ", 
+  "                                  #####      !!!!!!!!!!                                                                         ", 
+  "                                  #######   !!!!!!!!!!!!                                                                        ", 
+  "                                  ########  !!!!!!!!!!!!!!!!                        $$                                          ", 
+  "                              #############!!!!!!!!!!!!!!!!!                       $$$$$$                                       ", 
+  "                             ############# !!!!!!!!!! !!!!!!                     $$$$$$$$   $$ $$$$                             ", 
+  "                             ##########!!! !!!!!!!!!!!!!!!!!          %%%%     $$$$$$$$$$  $$$$$$$$$                            ", 
+  "                           ###########!!!!!!!!!!!!!!!!!!!!!!         %%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$                           ", 
+  "                           ###########!!!!!!!!!!!!!!!!!!!!!!      %%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$                          ", 
+  "                          ############!!!!!!!!!!!!!!!!!!!!!!      %%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$                          ", 
+  "                       ################!!!!!!!!!!!!!!!!!!!!!      %%%%%%%%%%%%%$$$$$$$$$ $$$$$$$$$$$$$$                         ", 
+  "                      ################## !!!!!!!!!!!!!!!!!!!!     %%%%%%%%%%%%% $$$$$$$  $$$$$$$$$$$$$$$                        ", 
+  "                     ################!!!!!!!!!!!!!!!!!!!!!!!      %%%%%%%%%%%%      $$    $$$$$$$$$$$$$$$              $$       ", 
+  "                    ################!!!!!!!!!!!!!!!!!!!!!!!!!     %%%%%%%%%%%              $$$$$$$$$$$$$$           $$$$$$      ", 
+  "                   #################!!!!!!!!!!!!!!!!!!!!!!!!!      %%%%%%%%%        $$$    $$$$$$$$$$$$$$$$      $$$$$$$$$$     ", 
+  "                  ##################!!!!!!!!!!!!!!!!!!!!!!!!          %%%%%%       $$$$$$  $$$$$$$$$$$$$$$$    $$$$$$$$$$$$     ", 
+  "                  ###################!!!!!!!!!!!!!!!!!!!!!!!          %%%%%%       $$$$$   $$$$$$$$$$$$$$$$   $$$$$$$$$$$$      ", 
+  "                  ###################!!!!!!!!!!!!!!!!!!!!!!!         %%%%%%        $$$$$  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       ", 
+  "                  ####################!!!!!!!!!!!!!!!!!!!!!!         %%%%%         $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$        ", 
+  "                 ######################  !!!!!!!!!!!!!!!!!!!         %%%%%         $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         ", 
+  "$$$$              ######################  !!!!!!!!!!!!!!!!!!         %%%%&        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$          ", 
+  "$$$$             ######################## !!!!!!!!!!!!!!!!!%%%%       &&&&&&     $$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  $$$$$  $$", 
+  "$$$$$        #############################!!!!!!!!!!!!!!!!!%%%%%     &&&&&&$$$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$", 
+  "$$$$   '''''##############################!!!!!!!!!!!!!!!! %%%%%    &&&&&&$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$  ''''''''############################!!!!!!!!!!!!!!!!!%%%%%   &&&&&&&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "    ''''''''''#############################!!!!!!!!!!!!!!!  %%     &&&&(&&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "  $$$$''''''''#############################!!!!!!!!!!!!!)))       &&&&(((*&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  " $$$$$$'''''''#############################!!!!!!!!!!!!)))))      &&&&(((**$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$'''''''#############################!!!!!!!!!!!!))))) ++  &&&(((((($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$'''''''#############################!!!!!!!!!!! )))))++++&&&&((((((*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  " $$$$''''''''''############################!!!!!!!!!!   )))+++,,,,&&((((($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  " '$$''''''''''''''##########################!!!!!!!!       ++,,,,,,&(((($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "'''''''''''''''''''#########################!!!!!!!!       ,,,,,,,,((((($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   ", 
+  " ''''''''''''''''''##########################!!!!!!        ,,,,,,,(((((($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   ", 
+  " '''''''''''''''''''############ #############!!!!!        ,,,,,,,((($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  ", 
+  "''''''''''''  ''''''###########################           -,,,,,,,((($$$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'", 
+  "''''''''''''  ''''''###########################           -,,,,,,,//($$$$$$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$'", 
+  "'''''''''''    '''''''#########################           --,12222///$$$$$3$$$$$$$$$$$000000$$$$$$$$$$$$$$$44$$$$$$$$$$$$$$$$$''", 
+  "'''''''''      #'''''''####################555##           -,22222,667$$$3333$$$$$00$$0000000$$$$$$88$$$$$$44$$$$$$$$$$$$$$$$'''", 
+  "'''''           ##'''''''''''''########''#55555#            ,2222266997::33333$$$$$$00000000000$88888888884444$$$$$$$$$$$$  ''''", 
+  "''               #''''''''''''''''####''''55555#            ,2222269;;::::3333$$$$$$00000000000488888888888444$$$$$$$$$$$$     '", 
+  "                  '''''''''''''''''#''''''55555              <22269;;;;:::333$$$$$$$=====0000044488888888444>$$$$$$$$$$$$       ", 
+  "                  '''''''''''''''''#'''''''555     <<<<<   <<????6;;;;;:::33333$$$$$=====@@0044444888888444>A$$$$$$$$$$$        ", 
+  "                   '''''''''''''''''''''''###      <<<<<<< <<????B;;;;;:::C33CC$$$$$=======@D4444444444444AAA$$$$$$$$$$         ", 
+  "                  ''''''''''''''''''''''''##       <<<<<<<<<?????BB;;;;::CCCCCCC$$EEE====@@@D4444444444444AAAA$$$FF$$$          ", 
+  "                   ''''''''''''''''''''''GG        <<<<<<<<<?????BBB;;BCCCCCCCCHHEEEEE==@@@@44444444444444AAAAAAAFFF            ", 
+  " I                 '''''''''''''''''''''GGGG        <<<<<????????BBBBBBJKCLCCCCHHMEEEEEN@@@OOPP444444444444AAAAAAFFFF           ", 
+  "I'''               '''''''''''''''''''''GGGG          <<?????????BBBBBBQQKLRHHHHRRRRSTUNNNNNPPPPVV44444444WWAAAAFFFFF           ", 
+  "'''''''             ''''XXX''''''''''''GGGGG           ???YYYY??Z[BBBBQQQKRRRHHRR]]]]]NNNNNNPPPPPVO444444WWWWAAFFFFFFFFFF       ", 
+  "''''''''''          X''XXXX''''''''''^^^^GG            ??YYYYYZZ[[[[QQQQQ_RRR``RR]]]]]]NNNNOPPPPPOO44aaaWWWWWWFFFFFbbFFFFF      ", 
+  "'''''''''''         XXXXXXX'''''''''^^^^^cc             ?YYYYYd[[[[[QQQQQ_R`````]]]]]]]NNNNOPPPPOOV4aaaaWWWWWWFFFFbbbbFFFFIII   ", 
+  "''''''''''''         XXXXXXX''''X'''^^^^cccc          eedYYYYYdff[ggggQQQ``````hh]]]]]NNNNNOOPPOOOOiaaaaWWWWWWFFFbbbbbbFFIIIII  ", 
+  "  I'''''''''         XXXXXXXXXXXX'''^^^cccccc II     eeedjYYYddffgggggkkk````hhhh]]]]]NNNNOOOOOOOOiiaaaaaWWWWWFFFbbbbbbFFIllll  ", 
+  " IIII''''''          XXXXXXXXXXXmmm''^^cccccnIII     eeedjjjjjoooogpggkkk````hhhhhhhhhS OOOOOOOOOOiiaaaaaqWWWqq  rbbbbb lllllll ", 
+  "  IIIII '''           XXXXX   XXmsss'nnncccctuI      eeevjwwwoooooxppgkk`````hhhhhhhhhS OyyOOOOOOiiaaaaaaaqqqqqzzbbbbbb{lllllll ", 
+  "  IIII|||                     }~mssssnnnncctt\u007f       eeevjwwwoooooxppp\u0080\u0080`````hhhhhhhhh OyyyyyOOO\u0081\u0081\u0081\u0081aa\u0081\u0081a\u0081\u0081q\u0081\u0081zzzzzbbb{lllllllll", 
+  "     |||||                     ~ssssssnnnn\u0082\u0082\u0082\u0083\u0083\u0084       evwwwwwoooo\u0085\u0085pp\u0080\u0080\u0080``\u0086\u0086\u0087hhhhhhhh  yyyyy\u0088\u0088O\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081zzzzzzbbb{{llllllll", 
+  "IIII |III||                   \u0089\u0089\u0089sssss\u0082nn\u0082\u0082\u0082\u0082\u0083\u0083\u0084\u008a        wwwwwxoo\u0085\u0085\u0085\u0085p\u0080\u0080\u0080\u0080\u0086\u0086\u0086\u0086\u008bh\u008b\u008bhh    yyyyy\u0088\u0088O\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081zzzzzz\u008c\u008c\u008c{{llllllll", 
+  "IIII|IIIII|                  \u0089\u0089\u0089\u0089sssss\u0089\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0084\u008a\u008a||\u008a\u008a    wwww\u008dx\u0085\u0085\u0085\u0085\u0085\u0085\u008e\u0080\u0080\u0086\u0086\u0086\u0086\u0086\u008b\u008b\u008b\u008b\u008b\u008f\u008f   yyyyy\u0088\u0088 \u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081zzzzz\u0081\u008c\u008c\u008c\u008c\u008c\u008c\u0090llllll", 
+  "IIII|IIIII|                  \u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0091\u0089\u0092\u0082\u0082\u0083\u0083\u0083\u0083\u0083\u0084\u008a\u008a|||\u008a\u008a     \u008d\u008d\u0093\u0093\u0085\u0085\u0085\u0085\u0085\u0085\u008e\u0080\u0080\u0086\u0086\u0086\u0086\u0086\u0094\u0094\u008b\u008b\u008f\u008f\u008f\u008f  \u0095\u0095\u0095\u0095y   \u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081zzz\u0081\u0081\u008c\u008c\u008c\u008c\u008 [...]
+  "I\u0097\u0097\u0097\u0097IIIII||\u0098\u0098\u0098\u0098             \u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0091\u0091\u0091\u008a\u008a\u008a\u008a\u0083\u0084\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a  \u0099\u0099\u0099\u0099   \u0085\u0085\u0085\u0085\u0085\u008e\u008e\u009a\u009b\u009b\u0086\u0086\u0086\u0086\u0094\u0094\u0094\u008f\u008f\u008f\u008f\u008f\u008f\u0095\u0095\u0095\u0095\u0095\u0095    \u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0 [...]
+  "I\u0097\u0097\u0097\u0097\u0097III||||\u0098\u0098\u0098\u0098             \u0089\u0089\u0089\u0089\u0089\u0091\u0091\u0091\u0091\u0091\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a  \u0099\u0099\u0099\u0099\u0099  \u009d\u0085\u0085\u0085\u008e\u008e\u009a\u009a\u009a\u009b\u0094\u0086\u0086\u0094\u0094\u0094\u0094\u008f\u008f\u008f\u008f\u008f\u008f\u0095\u0095\u0095\u0095\u0095\u0095    \u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u00 [...]
+  "\u009e\u009f\u009f\u009f\u009f\u0097\u00a0||||||\u0098\u0098\u0098\u0098\u0098              \u0089 \u0089\u0091\u0091\u0091\u0091\u0091\u0091\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a  \u0099\u0099\u0099\u0099\u0099    \u009d\u00a1\u00a1\u00a1\u00a1\u009a\u00a2\u00a2\u00a2\u00a2\u0094\u0094\u0094\u0094\u0094\u008f\u008f\u008f\u008f\u008f\u008f\u0095\u0095\u0095\u0095\u0095\u0095    \u00a3\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u009c\u [...]
+  "\u009e\u009f\u009f\u009f\u009f\u009f\u00a0|||||||\u0098\u0098\u0098\u0098                 \u0091\u0091\u0091\u0091\u0091\u00a5\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a   \u0099\u0099\u0099\u0099\u0099\u0099\u0099   \u00a1\u00a1\u00a1\u00a1\u00a1\u00a2\u00a2\u00a2\u00a2\u00a2\u0094\u0094\u0094\u0094\u008f\u008f\u008f\u008f\u008f\u008f \u0095\u0095\u0095\u0095    \u00a3\u00a3\u00a3\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u009c\u009c\u009c\u009c\u00 [...]
+  "\u009f\u009f\u009f\u009f\u009f\u009f\u00a0\u00a0|||||\u0098\u0098\u0098\u0098                   \u0091\u0091\u0091\u0091\u00a5\u00a5\u00a5\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a   \u0099\u0099\u0099\u0099\u0099\u0099\u0099 \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a2\u00a6\u00a6\u00a6\u00a6\u0094\u0094\u0094\u008f\u008f\u008f\u00a7\u008f\u00a7\u00a7\u00a7\u00a7\u0095\u0095     \u00a3\u00a3\u00a3\u00a3\u00a8\u00a8\u0081\u0081\u0081\u0081\u0081\u009c\u009c [...]
+  "\u009e\u009f\u009f\u009f\u009f\u009f\u00a0\u00a0\u0098|||\u0098\u0098\u0098\u0098\u0098                     \u0091\u0091\u00a5\u00a5\u00a5\u00a9\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a    \u0099\u0099\u0099\u0099\u0099 \u00a1\u00a1\u00a1\u00aa\u00aa\u00aa\u00a2\u00a6\u00a6\u00a6\u00a6\u00ab\u00ab\u00ab\u008f\u008f\u00ac\u00ac\u00ac\u00ac\u00a7\u00a7\u00a7        \u00a3\u00a3\u00a3\u00a3\u00a8\u00a8\u00ad\u00ad\u00ad\u0081\u0081\u0081\u0081\u00ad\u00ad\u [...]
+  "\u009e\u009e\u009f\u009f\u009f\u00af\u00af\u00a0\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u00b0\u00b0\u00b0\u00b0\u00b0                 \u00b1\u00a5\u00a9\u00a9\u00a9\u00a9\u00a9\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a    \u0099\u0099\u0099\u0099\u0099 \u00a1\u00a1\u00aa\u00aa\u00aa\u00aa\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00ab\u00ab\u00ab\u00ab\u00ac\u00ac\u00ac\u00ac\u00ac\u00a7\u00a7\u00a7             \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00 [...]
+  "\u00b3\u00b3\u00b3\u00b3\u00b3\u00af\u00a0\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u00b0\u00b0\u00b0\u00b0\u00b0\u00b0  \u00b1\u00b1\u00b1\u00b1\u00b1     \u00b1\u00b1\u00b1\u00b1 \u00b1\u00a5\u00a9\u00a9\u00a9\u00a9\u00a9\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a\u008a     \u0099\u0099\u0099   \u00a1\u00aa\u00aa\u00aa\u00aa\u00aa\u00a6\u00a6\u00a6\u00a6\u00b4\u00ab\u00ab\u00ab\u00b5\u00ac\u00ac\u00ac\u00ac\u00ac\u00a7\u00a7             \u00ad\u00ad\u00ad\u00 [...]
+  "\u00b3\u00b3\u00b3\u00b3\u00b3\u00af\u00a0\u00a0\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u00b0\u00b0\u00b0\u00b0\u00b0\u00b0\u00b0\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1    \u00b1\u00b1\u00b1\u00b1\u00b1 \u00b1\u00b6\u00a9\u00a9\u00a9\u00a9\u00a9\u008a\u008a\u008a\u008a\u008a \u008a\u008a\u008a\u008a    \u0099\u0099      \u00aa\u00aa\u00aa\u00aa\u00aa\u00a6\u00a6\u00a6\u00a6\u00b7\u00b4\u00b5\u00b5\u00b5\u00ac\u00ac\u00ac\u00ac\u00a7\u00a7\u00a7             \u00ad\u00ad\u00ad\u00 [...]
+  "\u00b9\u00b3\u00b3\u00b3  \u00a0\u00a0\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u00b0\u00b0\u00b0\u00b0\u00b0\u00b0 \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1    \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b6\u00a9\u00a9\u00ba\u00ba\u00ba\u008a\u008a\u008a\u008a\u008a         \u0099\u0099       \u00aa\u00aa\u00aa\u00bb\u00b7\u00b7\u00b7\u00b7\u00b7\u00b4    \u00ac\u00ac                 \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\ [...]
+  "\u00b9\u00b9\u00b9\u00b9      \u0098\u0098\u0098\u0098\u0098\u0098\u00b0\u00b0\u00b0\u00b0\u00b0\u00b0 \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1     \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b6\u00ba\u00ba\u00ba\u00ba\u00ba\u008a\u008a\u008a                    \u00bc\u00bc\u00bd\u00b7\u00b7\u00b7\u00b7\u00b7                        \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00b8\u00b8\u00b8\u00b9\u00b9\u00b9 ", 
+  "\u00b9\u00b9\u00b9\u00b9       \u0098\u0098\u0098\u0098         \u00b1\u00b1\u00b1\u00b1     \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00ba\u00ba\u00ba\u00ba\u00ba\u008a\u008a          \u0099\u0099          \u00bc\u00bd\u00bd\u00b7\u00b7\u00b7              \u00ab\u00ab          \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00b8\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "\u00b9\u00b9\u00b9                              \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00ba\u00ba\u00ba\u00ba\u00ba           \u0099\u0099\u0099\u0099         \u00bc\u00bc\u00bd\u00bd\u00bd              \u00ab\u00ab\u00ab\u00ab         \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad \u00ad\u00ad\u00ad\u00ad\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "                                 \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00ba\u00ba\u00ba\u00ba           \u0099\u0099\u0099\u0099\u0099\u0099                          \u00ab\u00ab\u00ab\u00ab\u00ab          \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad \u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "\u00b9\u00b9\u00b9                               \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u00b6             \u0099\u0099\u0099\u0099\u0099                          \u00ab\u00ab\u00ab\u00ab\u00ab\u00ab          \u00ad\u00ad\u00ad\u00ad\u00ad \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad    \u00b9\u00b9\u00b9\u00b9", 
+  "\u00b9\u00b9\u00b9\u00b9                               \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6\u00b6             \u0099\u0099\u0099\u0099\u0099                  \u00ab\u00ab       \u00ab\u00ab\u00ab\u00ab                  \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad  \u00b9\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "\u00b9\u00b9\u00b9\u00b9                               \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b6\u00b6\u00b6               \u0099\u0099\u0099\u0099             \u00bc\u00bc\u00bc\u00bc\u00ab\u00ab\u00ab\u00ab\u00ab     \u00ab\u00ab\u00ab\u00ab                   \u00ad\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad \u00b9\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "\u00b9\u00b9\u00b9\u00b9                               \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1                   \u0099\u0099             \u00bc\u00bc\u00bc\u00bc\u00bc\u00ab\u00ab\u00ab\u00ab\u00ab  \u00ab\u00ab\u00ab\u00ab                       \u00ad\u00ad\u00ad\u00ad\u00ad  \u00b9\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "\u00b9\u00b9\u00b9\u00b9                               \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1 \u00be\u00be                               \u00bc\u00bc\u00bc\u00bc\u00bc\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab                       \u00ad\u00ad\u00ad\u00ad  \u00b9\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  " \u00b9\u00b9                                \u00b1\u00b1\u00b1\u00b1\u00b1\u00be\u00be\u00be\u00be\u00be\u00be                             \u00bc\u00bc\u00bc\u00bc\u00bc\u00ab\u00ab\u00ab\u00ab\u00ab \u00ab\u00ab\u00ab\u00bf\u00bf\u00bf                             \u00b9\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "                                   \u00b1\u00b1\u00b1\u00b1\u00b1\u00be\u00be\u00be\u00be\u00be\u00be    \u00c0\u00c0\u00c0           \u00c1\u00c1\u00c1         \u00bc\u00bc\u00bc  \u00ab\u00ab\u00ab  \u00ab\u00ab\u00bf\u00bf\u00bf\u00bf\u00bf                           \u00ad\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "                                   \u00b1\u00b1\u00b1\u00b1\u00b1\u00be\u00be\u00be\u00be\u00be\u00be   \u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0       \u00c1\u00c1\u00c1\u00c1\u00c1                   \u00ab\u00bf\u00bf\u00bf\u00bf\u00bf                          \u00ad\u00ad\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9\u00b9", 
+  "                                   \u00b1\u00b1\u00b1\u00b1\u00b1\u00be\u00be\u00be\u00be\u00be\u00be   \u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0      \u00c1\u00c1\u00c1\u00c1\u00c1                    \u00bf\u00bf\u00bf\u00bf\u00bf                         \u00ad\u00ad\u00ad\u00ad\u00b9\u00b9\u00b9\u00b9\u00b9 ", 
+  "                                    \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00be\u00be\u00be    \u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0      \u00c1\u00c1\u00c1\u00c1\u00c1                    \u00bf\u00bf\u00bf\u00bf\u00bf                         \u00ad\u00ad\u00ad\u00ad\u00ad\u00b9\u00b9\u00b9  ", 
+  "                                     \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b6     \u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0\u00c0      \u00c1\u00c1\u00c1                                                    \u00ad\u00ad\u00ad\u00ad     ", 
+  "                                      \u00b1\u00b1\u00b1\u00b1          \u00c0\u00c0\u00c0\u00c0\u00c0\u00c0                                                                      ", 
+  "                                                    \u00c0\u00c0\u00c0\u00c0\u00c0                                                                       ", 
+  "                                                     \u00c0\u00c0\u00c0\u00c0                                                                       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-257-256-2.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-257-256-2.0-grid-reference.json
new file mode 100644
index 0000000..188ba47
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-257-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-400-600-2.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-400-600-2.0-grid-reference.json
new file mode 100644
index 0000000..4e13fbe
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-400-600-2.0-grid-reference.json
@@ -0,0 +1,159 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                             !!!!!!!!!!                                             ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..06038d0
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-257-256-2.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-257-256-2.0-grid-reference.json
new file mode 100644
index 0000000..188ba47
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-257-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 ", 
+  "                                                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-400-600-2.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-400-600-2.0-grid-reference.json
new file mode 100644
index 0000000..4e13fbe
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-400-600-2.0-grid-reference.json
@@ -0,0 +1,159 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                             !!!!!!!!!!                                             ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..06038d0
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-and-hsla-transform-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-linear-comp-op-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-linear-comp-op-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..c246577
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-linear-comp-op-500-100-1.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker-with-background-image-linear-comp-op-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/marker-with-background-image-linear-comp-op-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..96e3a03
--- /dev/null
+++ b/tests/visual_tests/grids/marker-with-background-image-linear-comp-op-500-100-2.0-grid-reference.json
@@ -0,0 +1,33 @@
+{
+ "keys": [
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/marker_line_placement_on_points-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/marker_line_placement_on_points-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..472e243
--- /dev/null
+++ b/tests/visual_tests/grids/marker_line_placement_on_points-500-100-2.0-grid-reference.json
@@ -0,0 +1,38 @@
+{
+ "keys": [
+  "", 
+  "4", 
+  "3", 
+  "5", 
+  "1", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                             !!!!!!!!!!!              ###########                                            ", 
+  "                                             !!!!!!!!!!!              ###########                                            ", 
+  "                                             !!!!!!!!!!               ##########                                             ", 
+  "                                              !!!!!!!!                 ########                                              ", 
+  "                                                !!!!                     ####                                                ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                          $$$$$$$$$                                                          ", 
+  "                                                         $$$$$$$$$$$$                                                        ", 
+  "                                                        $$$$$$$$$$$$$                                                        ", 
+  "                                                        $$$$$$$$$$$$$$                                                       ", 
+  "                                                        $$$$$$$$$$$$$$                                                       ", 
+  "                                                        $$$$$$$$$$$$$                                                        ", 
+  "                                                         $$$$$$$$$$$                                                         ", 
+  "                                                           $$$$$$$$                                                          ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                %%%%%                    &&&&&                                               ", 
+  "                                              %%%%%%%%%                &&&&&&&&&                                             ", 
+  "                                             %%%%%%%%%%%              &&&&&&&&&&&                                            ", 
+  "                                             %%%%%%%%%%%              &&&&&&&&&&&                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/orientation-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/orientation-800-200-1.0-grid-reference.json
new file mode 100644
index 0000000..a614346
--- /dev/null
+++ b/tests/visual_tests/grids/orientation-800-200-1.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "2", 
+  "1", 
+  "8", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                       !!                               ", 
+  "                                                                                                                                                                       ! !                              ", 
+  "                                                                                                                                                                       !                                ", 
+  "                               #                                                                                                                                        !!                              ", 
+  "           $                 ###                                                                                                                        %% %%%         !                                ", 
+  "          $                    #                                                                                                                       %  %  %          !!                              ", 
+  "          $ $$               #                  & & &&                                                                                                 %% % %          !!!                              ", 
+  "        $$$ $                 ##               &  & &                 '                   (                   ))                  *                   %                   !            ++ +   +         ", 
+  "        $  $                                   &&& &&&                                     (                  ))                                                                        + + ++          ", 
+  "        $$$                  ###                                      ''                  (                    )                                                                       +  + ++          ", 
+  "        $                    ###                                      ' '                 ( (                )                  * * **                                                                  ", 
+  "                                                                    ''   ' '            ( (                   ))               *  * *                                                                   ", 
+  "                                                                   '' '   '''           (                                      *** ***                                                                  ", 
+  "                                                                 '  ''   '''            ((                   ))                                                                                         ", 
+  "                                                                  ' '    ''             (                    ) )                                                                                        ", 
+  "                                                                   '    '                                                                                                                               ", 
+  "                                                                       ''                                                                                                                               ", 
+  "                                                                     ''                                                                                                                                 ", 
+  "                                                                   ''                                                                                                                                   ", 
+  "                                                                    ''                                                                                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/orientation-800-200-2.0-grid-reference.json b/tests/visual_tests/grids/orientation-800-200-2.0-grid-reference.json
new file mode 100644
index 0000000..7479bb6
--- /dev/null
+++ b/tests/visual_tests/grids/orientation-800-200-2.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "             !             ##   #                                                                                                                                                                       ", 
+  "            !!             # #  #                                                                                                                      $  $$$   $$$$$$                                  ", 
+  "           ! !             #  # #                                                                                                                      $$ $ $$ $    $$                                  ", 
+  "          !  !             #   ##                                                                                                                       $$   $$$    $                                   ", 
+  "         !    ! !!         #    #          %%%%%  %  %   %                                                                                              $$    $    $                                    ", 
+  "          !   !!!          ##                 %   %   % %%                                                                                              $$$   $   $                                     ", 
+  "       !  !   !!            ##               %%   %   % %                                                                                              $  $   $  $                                      ", 
+  "        !!!   !              ####           %%    %    %              &                   '                   (                   )                   $                   *    +++++  +  +   ++         ", 
+  "      !    !                ##              %    % %  % %                                    '             ((   (                                                                 +   +   + ++          ", 
+  "      !     !              #               %    %% %  % %                                   ''             ( (  (                                                                ++   +   +++           ", 
+  "   !!!!                    #    #                                                          ' '             (  (((                                                               ++    +    +            ", 
+  "      !!!!!                 ## ##                                                         '  '   '         (   ((                                                               +    + +  + +           ", 
+  "      !                      ##                                                          '    ' '               (          )))))  )  )   )                                     +++++++ ++ + ++          ", 
+  "       !                    ## #                                                          '   ''           ((                 )   )   ) )                                                               ", 
+  "       !                   #    #                                                      '' '   '             ((               ))   )   )))                                                               ", 
+  "                                                                                      '  ''                  ((((           ))    )    )                                                                ", 
+  "                                                                                      '    '                (               )    ) )  ) )                                                               ", 
+  "                                                                                      '                    (               ))))))  )))) ))                                                              ", 
+  "                                                                                   '''''                   (    (                                                                                       ", 
+  "                                                                                      ' ''                  (( (                                                                                        ", 
+  "                                                                                      '                      ((                                                                                         ", 
+  "                                                                                       '                    (  ((                                                                                       ", 
+  "                                                                                                           (    (                                                                                       ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/point-symbolizer-expressions-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/point-symbolizer-expressions-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/point-symbolizer-expressions-256-256-1.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/point-symbolizer-expressions-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/point-symbolizer-expressions-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/point-symbolizer-expressions-256-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/point-symbolizer-expressions-all-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/point-symbolizer-expressions-all-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/point-symbolizer-expressions-all-256-256-1.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/point-symbolizer-expressions-all-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/point-symbolizer-expressions-all-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/point-symbolizer-expressions-all-256-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/point-symbolizer-overlap-placement-expr-500-500-1.0-grid-reference.json b/tests/visual_tests/grids/point-symbolizer-overlap-placement-expr-500-500-1.0-grid-reference.json
new file mode 100644
index 0000000..f0e53b1
--- /dev/null
+++ b/tests/visual_tests/grids/point-symbolizer-overlap-placement-expr-500-500-1.0-grid-reference.json
@@ -0,0 +1,157 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "5", 
+  "7", 
+  "8", 
+  "9", 
+  "10", 
+  "11", 
+  "13", 
+  "15", 
+  "16", 
+  "17", 
+  "18", 
+  "19", 
+  "21", 
+  "22", 
+  "23", 
+  "25", 
+  "26", 
+  "27", 
+  "29", 
+  "30", 
+  "31"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                !!!###                       $$$                          %%%                           &&'''                ", 
+  "               !!!#####                     $$$$$                        %%%%%                         &&'''''               ", 
+  "               !!!#####                     $$$$$                        %%%%%                         &&'''''               ", 
+  "               !!!#####                     $$$$$                        %%%%%                         &&'''''               ", 
+  "                !!!###                       $$$                          %%%                           &&''''               ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                (())))                       ****                        ++++                          ,,,----               ", 
+  "               ((()))))                     *****                        +++++                         ,,-----               ", 
+  "               ((()))))                     *****                        +++++                         ,,-----               ", 
+  "                (()))))                     *****                        +++++                         ,,,----               ", 
+  "                 (()))                       ***                          +++                           ,,,--                ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                ...///                       000                          11222                         333                  ", 
+  "               .../////                     00000                        1122222                       33333                 ", 
+  "               .../////                     00000                        1122222                       33333                 ", 
+  "               .../////                     00000                        1122222                       33333                 ", 
+  "                ...///                       000                          112222                        333                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                445555                       6666                        7778888                       9999                  ", 
+  "               44455555                     66666                        7788888                       99999                 ", 
+  "               44455555                     66666                        7788888                       99999                 ", 
+  "                4455555                     66666                        7778888                       99999                 ", 
+  "                 44555                       666                          77788                         999                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/point-symbolizer-overlap-placement-expr-500-500-2.0-grid-reference.json b/tests/visual_tests/grids/point-symbolizer-overlap-placement-expr-500-500-2.0-grid-reference.json
new file mode 100644
index 0000000..ee39ee6
--- /dev/null
+++ b/tests/visual_tests/grids/point-symbolizer-overlap-placement-expr-500-500-2.0-grid-reference.json
@@ -0,0 +1,157 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "5", 
+  "7", 
+  "8", 
+  "9", 
+  "10", 
+  "11", 
+  "13", 
+  "15", 
+  "16", 
+  "17", 
+  "18", 
+  "19", 
+  "21", 
+  "22", 
+  "23", 
+  "25", 
+  "26", 
+  "27", 
+  "29", 
+  "30", 
+  "31"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "               !!######                     $$$$$$                      %%%%%%                        &&&''''''              ", 
+  "              !!########                   $$$$$$$$                    %%%%%%%%                      &&&''''''''             ", 
+  "             !!!#########                 $$$$$$$$$                    %%%%%%%%%                     &&''''''''''            ", 
+  "             !!##########                 $$$$$$$$$$                  %%%%%%%%%%                    &&&''''''''''            ", 
+  "             !!##########                 $$$$$$$$$$                  %%%%%%%%%%                    &&&''''''''''            ", 
+  "             !!##########                 $$$$$$$$$$                  %%%%%%%%%%                    &&&''''''''''            ", 
+  "             !!!#########                 $$$$$$$$$                    %%%%%%%%%                     &&''''''''''            ", 
+  "              !!#########                 $$$$$$$$$                    %%%%%%%%%                     &&&''''''''             ", 
+  "               !!#######                   $$$$$$$                      %%%%%%%                       &&&''''''              ", 
+  "                !!!###                       $$$                          %%%                           &&''''               ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                (()))))                     *****                        +++++                         ,,,----               ", 
+  "              ((()))))))                   *******                      +++++++                       ,,-------              ", 
+  "             ((()))))))))                 *********                    +++++++++                     ,,---------             ", 
+  "             (())))))))))                 **********                  ++++++++++                    ,,,----------            ", 
+  "             (())))))))))                 **********                  ++++++++++                    ,,,----------            ", 
+  "             (())))))))))                 **********                  ++++++++++                    ,,,----------            ", 
+  "             (())))))))))                 **********                  ++++++++++                    ,,,----------            ", 
+  "             ((()))))))))                 *********                    +++++++++                     ,,---------             ", 
+  "              ((()))))))                   *******                      +++++++                       ,,--------             ", 
+  "               ((()))))                     *****                        +++++                         ,,------              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "               ..//////                     000000                      111222222                     333333                 ", 
+  "              ..////////                   00000000                    11122222222                   33333333                ", 
+  "             .../////////                 000000000                    112222222222                  333333333               ", 
+  "             ..//////////                 0000000000                  1112222222222                 3333333333               ", 
+  "             ..//////////                 0000000000                  1112222222222                 3333333333               ", 
+  "             ..//////////                 0000000000                  1112222222222                 3333333333               ", 
+  "             .../////////                 000000000                    112222222222                  333333333               ", 
+  "              ../////////                 000000000                    11122222222                   333333333               ", 
+  "               ..///////                   0000000                      111222222                     3333333                ", 
+  "                ...///                       000                          112222                        333                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                4455555                     66666                        7778888                       99999                 ", 
+  "              4445555555                   6666666                      778888888                     9999999                ", 
+  "             444555555555                 666666666                    77888888888                   999999999               ", 
+  "             445555555555                 6666666666                  7778888888888                 9999999999               ", 
+  "             445555555555                 6666666666                  7778888888888                 9999999999               ", 
+  "             445555555555                 6666666666                  7778888888888                 9999999999               ", 
+  "             445555555555                 6666666666                  7778888888888                 9999999999               ", 
+  "             444555555555                 666666666                    77888888888                   999999999               ", 
+  "              4445555555                   6666666                      7788888888                    9999999                ", 
+  "               44455555                     66666                        77888888                      99999                 ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/polygon-symbolizer-expressions-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/polygon-symbolizer-expressions-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/polygon-symbolizer-expressions-256-256-1.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/polygon-symbolizer-expressions-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/polygon-symbolizer-expressions-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/polygon-symbolizer-expressions-256-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/polygon-symbolizer-expressions-all-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/polygon-symbolizer-expressions-all-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/polygon-symbolizer-expressions-all-256-256-1.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/polygon-symbolizer-expressions-all-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/polygon-symbolizer-expressions-all-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..2f66b21
--- /dev/null
+++ b/tests/visual_tests/grids/polygon-symbolizer-expressions-all-256-256-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json b/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json
new file mode 100644
index 0000000..2d2a4af
--- /dev/null
+++ b/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json
@@ -0,0 +1,84 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/polygon-winding-order-300-300-2.0-grid-reference.json b/tests/visual_tests/grids/polygon-winding-order-300-300-2.0-grid-reference.json
new file mode 100644
index 0000000..2d2a4af
--- /dev/null
+++ b/tests/visual_tests/grids/polygon-winding-order-300-300-2.0-grid-reference.json
@@ -0,0 +1,84 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/postgis-inline-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/postgis-inline-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..4d3e1df
--- /dev/null
+++ b/tests/visual_tests/grids/postgis-inline-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                           !!!!!!!!             ", 
+  "                                                                                    !!!                 !!         !            ", 
+  "                                                                                 !!    !           !!                !          ", 
+  "                                                                                !       !        !                    !         ", 
+  "                                                                               !         !      !                               ", 
+  "                                                                               !           !!!!!                        !       ", 
+  "                                                                                                                         !      ", 
+  "                                                                              !                                              !! ", 
+  "                                                                            !                                                   ", 
+  "                                                                           !                                                    ", 
+  "                                                                          !                                                     ", 
+  "                                                                  !!                                                            ", 
+  "                                                                 !   !!!!!                                                      ", 
+  "               !                                                !                                                               ", 
+  "            !  !                                               !                                                                ", 
+  "          !                                                   !                                                                 ", 
+  "                                                                                                                                ", 
+  "         !      !                                            !                                                                  ", 
+  "                 !                                          !                                                                   ", 
+  "                  !                                         !                                                                   ", 
+  "        !          !        !!!!!!   !!!!                  !                                                                    ", 
+  "                     !   !                 !!!         !!!                                                                      ", 
+  "                                               !!    !!!!                                                                       ", 
+  "       !                                         !!!!!!                                                                         ", 
+  "       !                                          !!!!                                                                          ", 
+  "                                                                                                                                ", 
+  "      !                                                                                                                         ", 
+  "                                                                                                                                ", 
+  "     !                                                                                                                          ", 
+  "                                                                                                                                ", 
+  "    !                                                                                                                           ", 
+  "                                                                                                                                ", 
+  "   !                                                                                                                            ", 
+  "   !                                                                                                                            ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "                                                                                                                                ", 
+  " !                                                                                                                              ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  "                                                                                                                                ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "!                                                                                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/postgis-inline-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/postgis-inline-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..04ce50f
--- /dev/null
+++ b/tests/visual_tests/grids/postgis-inline-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                          !!!!!!!!!             ", 
+  "                                                                                   !!!!                !!!         !!           ", 
+  "                                                                                 !!    !           !!!               !          ", 
+  "                                                                                !       !        !!                   !!        ", 
+  "                                                                               !         !      !                      !        ", 
+  "                                                                               !           !!!!!                        !       ", 
+  "                                                                               !                                         !!     ", 
+  "                                                                              !                                             !!! ", 
+  "                                                                            !!                                                 !", 
+  "                                                                           !                                                    ", 
+  "                                                                          !                                                     ", 
+  "                                                                  !!     !                                                      ", 
+  "                                                                 !  !!!!!!                                                      ", 
+  "              !!                                                !                                                               ", 
+  "            !! !                                               !                                                                ", 
+  "          !    !                                            !!!                                                                 ", 
+  "         !                                                  !!!!                                                                ", 
+  "         !      !                                          !!!!!                                                                ", 
+  "         !       !                                        !!!!!                                                                 ", 
+  "        !         !                                      !!!!!                                                                  ", 
+  "        !          !       !!!!!!!!!!!!!!              !!!!!!!                                                                  ", 
+  "        !           !!  !!!                !!!!     !!!!!!!!!                                                                   ", 
+  "                                               !!   !!!!!!!                                                                     ", 
+  "       !                                         !! !!!!!!                                                                      ", 
+  "       !                                            !!                                                                          ", 
+  "                                                                                                                                ", 
+  "      !                                                                                                                         ", 
+  "      !                                                                                                                         ", 
+  "     !                                                                                                                          ", 
+  "     !                                                                                                                          ", 
+  "    !                                                                                                                           ", 
+  "    !                                                                                                                           ", 
+  "   !                                                                                                                            ", 
+  "   !                                                                                                                            ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  " !                                                                                                                              ", 
+  "                                                                                                                                ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "  !                                                                                                                             ", 
+  "                                                                                                                                ", 
+  " !                                                                                                                              ", 
+  "!                                                                                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha1-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha1-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha1-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha1-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha1-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha1-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha2-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha2-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha2-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha2-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha2-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha2-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha3-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha3-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha3-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha3-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha3-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha3-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha4-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha4-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha4-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha4-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha4-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha4-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha5-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha5-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha5-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster-color-to-alpha5-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/raster-color-to-alpha5-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster-color-to-alpha5-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster_colorizer-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/raster_colorizer-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster_colorizer-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster_colorizer-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/raster_colorizer-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster_colorizer-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster_symbolizer-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/raster_symbolizer-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster_symbolizer-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/raster_symbolizer-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/raster_symbolizer-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/raster_symbolizer-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-1-750-250-1.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-1-750-250-1.0-grid-reference.json
new file mode 100644
index 0000000..77d5e13
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-1-750-250-1.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "          !   !            !                    ! !  !   !                           !   !            !                    ! !  !   !                           !   !            !          ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "              ####                           ####                           #####                           ####                           ####                           ####              ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "              ####                           ####             #             #####                  #        ####                         # ####                         # ####              ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      %                                              &                                                                      ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      (                                              )                                                                      ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-1-750-250-2.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-1-750-250-2.0-grid-reference.json
new file mode 100644
index 0000000..9204c76
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-1-750-250-2.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                             !!!  !! !! !!    ! !!   !  ! ! !                                                              !!! !!! !! !! !    !!   !  ! ! !  !                              ", 
+  "                                                               !                                                                                            !!                              ", 
+  "                                                                                                                                                                                            ", 
+  "                            ########                                                                                                                     ########                           ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "                            ########                         #                                                                                        #  ########                           ", 
+  "                                                            #                                                                                         #                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                     %%%%                                          &&&&&                                                                    ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                     ((((                                          )))))                                                                    ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-2-750-250-1.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-2-750-250-1.0-grid-reference.json
new file mode 100644
index 0000000..792acf9
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-2-750-250-1.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "              ####                           ####                           #####                           ####                           ####                           ####              ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "              ####                           ####                           #####                           ####                           ####                           ####              ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      %                                              &                                                                      ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      (                                              )                                                                      ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-2-750-250-2.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-2-750-250-2.0-grid-reference.json
new file mode 100644
index 0000000..8731edd
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-2-750-250-2.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                            ########                                                                                                                     ########                           ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "                            ########                                                                                                                     ########                           ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                     %%%%                                          &&&&&                                                                    ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                     (((                                            )))                                             '        '              ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                     ((((                                          )))))                                                                    ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-3-750-250-1.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-3-750-250-1.0-grid-reference.json
new file mode 100644
index 0000000..e3ae328
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-3-750-250-1.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "              !!!!      !          !         !!!!      !          !         !!!!!    !   !            !     !!!!         ! ! !    !        !!!!         ! ! !    !       !!!!!              ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "              ####                           ####                           #####                           ####                           ####                           ####              ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "              ####                           ####             #             #####                  #        ####                         # ####                         # ####              ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      %                                              &                                                                      ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      (                                              )                                                                      ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-3-750-250-2.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-3-750-250-2.0-grid-reference.json
new file mode 100644
index 0000000..761e4f6
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-3-750-250-2.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                            !!!!!!!!                                                      !!!!!!!!                                                       !!!!!!!!                           ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "                            !!!!!!!!!!!  !! !! !!    ! !!   !  ! ! !  !                   !!!!!!!!                  !!! !!! !! !! !    !!   !  ! ! !  !  !!!!!!!!                           ", 
+  "                                                                      !                                                                              !!                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                            ########                                                      ########                                                       ########                           ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "                            ########                         #                            ########                                                    #  ########                           ", 
+  "                                                            #                                                                                         #                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                     %%%%                                          &&&&&                                                                    ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                     (((                                            )))                                        '                   '   '    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                     ((((                                          )))))                                                                    ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-4-750-250-1.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-4-750-250-1.0-grid-reference.json
new file mode 100644
index 0000000..80e62ed
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-4-750-250-1.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "              !!!!  ! !      !               !!!!     ! !          !        !!!!!    !   !            !     !!!!        ! ! !            ! !!!!        ! !  !   !         !!!!              ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "              ####                           ####                           #####                           ####                           ####                           ####              ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "              ####             #             ####             #             #####                  #        ####                         # ####                        #  ####              ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      %                                              &                                                                      ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                                                                                                                                                            ''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                              ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               ''                                                                                                                                                           ", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                               '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                      (                                              )                                                                      ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                     (((                                            )))                                                                     ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/repeat-labels-4-750-250-2.0-grid-reference.json b/tests/visual_tests/grids/repeat-labels-4-750-250-2.0-grid-reference.json
new file mode 100644
index 0000000..761f2aa
--- /dev/null
+++ b/tests/visual_tests/grids/repeat-labels-4-750-250-2.0-grid-reference.json
@@ -0,0 +1,79 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "8", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "               !!!!!!!!                                                       !!!!!!!!                                                      !!!!!!!!                                        ", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "               !!!!!!!!      !!!  !! !! !!    ! !!   !  ! ! !                 !!!!!!!!               !!!  !! !!! !! ! ! !!!     !    !  !   !!!!!!!!                                        ", 
+  "                                                               !                                                                       !                                                    ", 
+  "                                                                                                                                                                                            ", 
+  "                            ########                                                      ########                                                       ########                           ", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "############################################################################################################################################################################################", 
+  "                            ########                          #                           ########                                                   #   ########                           ", 
+  "                                                             #                                                                                      #                                       ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                                                                                                                                            ", 
+  "                                                                     %%%                                            &&&                                                                     ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                    %%%%%                                          &&&&&                                                                    ", 
+  "                                                                     %%%%                                          &&&&&                                                                    ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                                                                                                                                                           ''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''                             ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''                                                                                                                                                          ", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                              ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", 
+  "                                                                     (((                                            )))                    '          '        '   '                        ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                    (((((                                          )))))                                                                    ", 
+  "                                                                     ((((                                          )))))                                                                    ", 
+  "                                                                                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/road-casings-grouped-rendering-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/road-casings-grouped-rendering-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..24cbf90
--- /dev/null
+++ b/tests/visual_tests/grids/road-casings-grouped-rendering-500-100-1.0-grid-reference.json
@@ -0,0 +1,344 @@
+{
+ "keys": [
+  "", 
+  "836", 
+  "840", 
+  "690", 
+  "525", 
+  "523", 
+  "528", 
+  "490", 
+  "472", 
+  "415", 
+  "599", 
+  "598", 
+  "154", 
+  "159", 
+  "153", 
+  "100", 
+  "102", 
+  "108", 
+  "122", 
+  "110", 
+  "113", 
+  "737", 
+  "481", 
+  "473", 
+  "57", 
+  "1", 
+  "72", 
+  "200", 
+  "269", 
+  "228", 
+  "173", 
+  "174", 
+  "687", 
+  "483", 
+  "551", 
+  "583", 
+  "480", 
+  "479", 
+  "401", 
+  "421", 
+  "389", 
+  "749", 
+  "774", 
+  "179", 
+  "851", 
+  "586", 
+  "620", 
+  "548", 
+  "535", 
+  "582", 
+  "325", 
+  "324", 
+  "445", 
+  "393", 
+  "839", 
+  "440", 
+  "268", 
+  "482", 
+  "633", 
+  "634", 
+  "466", 
+  "671", 
+  "462", 
+  "448", 
+  "333", 
+  "326", 
+  "146", 
+  "16", 
+  "25", 
+  "356", 
+  "261", 
+  "238", 
+  "248", 
+  "767", 
+  "849", 
+  "577", 
+  "484", 
+  "471", 
+  "469", 
+  "332", 
+  "378", 
+  "225", 
+  "188", 
+  "175", 
+  "585", 
+  "668", 
+  "665", 
+  "550", 
+  "485", 
+  "570", 
+  "562", 
+  "575", 
+  "131", 
+  "354", 
+  "284", 
+  "285", 
+  "553", 
+  "850", 
+  "739", 
+  "587", 
+  "486", 
+  "632", 
+  "373", 
+  "133", 
+  "41", 
+  "358", 
+  "260", 
+  "177", 
+  "641", 
+  "615", 
+  "95", 
+  "121", 
+  "376", 
+  "56", 
+  "788", 
+  "359", 
+  "236", 
+  "686", 
+  "786", 
+  "692", 
+  "578", 
+  "614", 
+  "579", 
+  "673", 
+  "50", 
+  "92", 
+  "58", 
+  "357", 
+  "212", 
+  "847", 
+  "827", 
+  "664", 
+  "645", 
+  "607", 
+  "505", 
+  "743", 
+  "493", 
+  "841", 
+  "439", 
+  "438", 
+  "214", 
+  "213", 
+  "254", 
+  "835", 
+  "165", 
+  "647", 
+  "626", 
+  "494", 
+  "39", 
+  "5", 
+  "54", 
+  "158", 
+  "317", 
+  "252", 
+  "753", 
+  "838", 
+  "769", 
+  "223", 
+  "784", 
+  "631", 
+  "621", 
+  "674", 
+  "77", 
+  "36", 
+  "304", 
+  "118", 
+  "52", 
+  "773", 
+  "224", 
+  "255", 
+  "727", 
+  "139", 
+  "624", 
+  "628", 
+  "666", 
+  "453", 
+  "295", 
+  "292", 
+  "3", 
+  "123", 
+  "732", 
+  "830", 
+  "771", 
+  "845", 
+  "623", 
+  "613", 
+  "629", 
+  "580", 
+  "144", 
+  "459", 
+  "294", 
+  "23", 
+  "27", 
+  "125", 
+  "844", 
+  "184", 
+  "545", 
+  "507", 
+  "616", 
+  "606", 
+  "681", 
+  "65", 
+  "48", 
+  "35", 
+  "37", 
+  "63", 
+  "831", 
+  "740", 
+  "842", 
+  "221", 
+  "166", 
+  "501", 
+  "142", 
+  "506", 
+  "680", 
+  "26", 
+  "444", 
+  "730", 
+  "742", 
+  "826", 
+  "556", 
+  "117", 
+  "755", 
+  "20", 
+  "699", 
+  "822", 
+  "701", 
+  "808", 
+  "311", 
+  "780", 
+  "170", 
+  "234", 
+  "33", 
+  "569", 
+  "516", 
+  "713", 
+  "705", 
+  "744", 
+  "725", 
+  "350", 
+  "310", 
+  "349", 
+  "192", 
+  "719", 
+  "185", 
+  "552", 
+  "559", 
+  "546", 
+  "643", 
+  "684", 
+  "24", 
+  "706", 
+  "750", 
+  "795", 
+  "818", 
+  "712", 
+  "351", 
+  "683", 
+  "206", 
+  "190", 
+  "689", 
+  "105", 
+  "32", 
+  "34", 
+  "759", 
+  "810", 
+  "819", 
+  "791", 
+  "707", 
+  "852", 
+  "290", 
+  "235", 
+  "160", 
+  "536", 
+  "98", 
+  "44", 
+  "541", 
+  "346", 
+  "811", 
+  "297", 
+  "778", 
+  "169", 
+  "162", 
+  "163", 
+  "752", 
+  "748", 
+  "809", 
+  "805", 
+  "341", 
+  "18", 
+  "167", 
+  "168", 
+  "109", 
+  "112", 
+  "67", 
+  "537", 
+  "829", 
+  "828", 
+  "496", 
+  "540", 
+  "561", 
+  "709", 
+  "340", 
+  "70", 
+  "161", 
+  "176", 
+  "754", 
+  "432", 
+  "306", 
+  "164", 
+  "178", 
+  "824"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                    !#$ %%%& '   ( )  *+,---./01112233344555555555                                           ", 
+  "                                     # 6  %%%'  (( 7) 8 ****./911:; <=>  ?? @                                                ", 
+  "                                     !#A$  BB%%(( C77DEF GH /I9JK:L <>    ? @@                                               ", 
+  "                                      # M$NN OO( PCQQR 8S TU/V9W:XL <Y>   ?? @                                               ", 
+  "                                      !#M$NB  BOZ[]^^_`8abcd/e99fgL  <hh ij? @                                               ", 
+  "                                      k#lM6N   mmnQop^88qaqrre9fffL  <<s>  ? tt  u                                           ", 
+  "                                       # MM6  vm ZwQxyz{|}~//e9ff\u007fgL  <\u0080>   \u0081tuuu                                            ", 
+  "                             \u0082         !  l\u0083\u0084 \u0085\u0085v ))\u0086\u0087  \u0088\u0089~/\u008a9fff\u007f\u008bL  <\u0080>\u008c \u0081\u0081   \u008d\u008d\u008d                                          ", 
+  "                             \u0082\u0082        !#  NA$\u008e \u0085v  \u008fz  \u0089\u0089\u0090\u0091\u0092\u0093ff\u0094\u007f\u0095 LLL\u0096\u0096\u0096\u0081\u0081\u008d\u008d\u0097\u0097\u0098\u0099\u0098                                          ", 
+  "                              \u0082\u0082       !# N\u009am $$ \u0085\u0085\u008f\u009b\u009c \u009d\u0089\u009e\u009f\u00a0\u0093\u0093ffK\u007f\u00a1\u007f\u00a2     \u0097\u0098\u0099\u0098\u0099\u0099 \u00a3\u00a4                                          ", 
+  "                                \u0082      !#\u009a\u00a5\u00a6\u00a7\u00a8 \u00a9\u00a9 \u008f\u008f\u00aa }\u0089\u009e\u009e\u009f\u009f\u0093\u0093f\u00ab\u0094\u00ac\u00ad\u00a2\u00ae\u00af\u00b0\u00b1\u0098\u0097\u0098\u0099   \u00a3\u00a4\u00a4\u00b2\u00b2                                         ", 
+  "                                 \u0082\u0082     ! \u00b3\u00a5\u00b4\u00b4\u00a8 A$\u008f\u00b5\u00aa \u0089\u0089\u00b6\u00b7\u009f\u009f\u00b8\u00b8\u00b9\u00ba\u0094K \u007f\u00bb\u00bc\u00bd\u00be\u00bf\u0099\u0099 \u00c0\u00a3\u00a4\u00a4\u00b2\u00b2                                           ", 
+  "                                  \u0082\u0082    !#\u00a7\u00a5\u00c1  \u00c2\u00a8\u008f\u00c3\u00c4\u00c4\u0089\u0089\u009e\u00c5\u00c6\u00c6\u00c7\u00b8\u00c8\u00b9#\u00c9\u0094\u00b1\u00bc\u00bb\u00bb\u00ca\u00cb\u00cb\u0099\u00a3\u00c0\u00a3\u00a4\u00b2\u00b2                                             ", 
+  "                                    \u0082    \u00cc#\u00cd\u00ce \u00cf\u00c2\u008f\u00d0\u00c4\u00c4\u0089\u0089\u009e\u00c5\u00d1\u00d2\u00d3\u00c7\u00d4\u00d4\u00d5#\u00d6\u00d7\u00d8\u00be \u00cb\u00cb\u00cb\u00c0\u00d9\u00a3\u00a4 \u00b2\u00b2                                              ", 
+  "                                     \u0082\u0082  \u00cc#\u00cd\u00da\u00db\u00dc  \u00c4\u00c4\u00dd\u0089\u009e\u00de\u00df\u00e0\u00d2\u00d2\u00c7\u00e1\u00e2\u00e3\u00d6\u00d6\u00d7\u00d8\u00cb\u00cb \u00e4\u00e4\u00a3\u00a4\u00e5\u00b2\u00b2                                                ", 
+  "                                      \u0082\u0082\u00e6 \u00cc!\u00cd\u00e7\u00e8 \u00e9\u00ea\u00eb\u0089\u0089\u00ec\u00de\u00de\u00df\u00ed\u00ee\u00ef\u00e2\u00e2\u00e3\u00d6\u00d6 \u00f0\u00f1\u00c0\u00a3\u00a4\u00f2\u00f3\u00f3\u00e5\u00f4                                                 ", 
+  "                                        \u0082\u00e6\u00e6k#\u00f5\u00f6\u00f7\u00e9\u00f8\u0089\u0089\u00ec\u00ed\u00de\u00de\u00ee\u00ee##\u00f9\u00e2\u00e2\u00fa\u00fb \u00fc\u00fd\u00fd  \u00f2\u00e5  \u00f4                                                 ", 
+  "                                         \u0082\u0082\u00e6\u00f5\u00f5\u00fe\u00f6\u00f6\u00f6\u0089\u00ec\u00ed\u00ed\u00ed\u00ff##\u0100\u00be\u00be\u0101\u0102\u0103\u0104\u0105\u0105\u0106\u00fd\u0107 \u00f2\u0108\u0108\u0108\u0108\u0109\u0109                                               ", 
+  "                                          \u0082\u0082\u00e6k\u00fe!#\u010a\u010a\u00ed\u010b\u010c##\u010d\u00be\u00be \u010e\u010f\u0110\u0110\u0103\u0111\u0112\u0113\u0114\u00f0\u0115\u00f2\u0116  \u00f4                                                 ", 
+  "                                          \u0117 \u0118\u0119\u011a\u011b\u011c\u010a\u010a###\u011d\u00be\u00be\u010e\u010e\u00cc\u011e\u011f\u0120\u0121\u0121\u0122\u0123\u0123\u0124\u0125\u0126\u00f2\u0116\u0116\u00f4\u00f4     \u0127\u0127\u0127                                         ", 
+  "                                         \u0117\u0117\u0118 \u0082\u0082\u0128\u010a\u010a\u0129\u012a\u012a\u011d\u011d\u011e\u011e\u011b\u011e\u012b\u012c\u012d\u0121\u012e\u012f\u0130\u0131\u0131\u0131\u0123\u0123\u00f0\u00f2\u0116\u0116  \u0127\u0127\u0132\u0132\u0132\u0132\u0132                                         ", 
+  "                                         \u0117\u0118\u0118\u0133\u0133\u0134\u0135\u0135\u012a\u0136\u011e\u011e\u011e\u011d  \u0137\u0138\u011f\u012d\u0139\u013a\u012f\u012f\u0101\u013b\u013b\u013b\u013b\u0131\u00f0\u0107\u00f2\u013c\u013d\u013d\u0132\u0132\u0132\u0132                                            ", 
+  "                                        \u0117\u0118\u0118\u0133\u0133\u0134\u0135\u0135\u0135\u012a\u013e\u013f    \u0140\u0140\u0141\u012d\u0139\u013a\u013a\u0142\u0101\u0101\u0143\u0144 \u0145\u013b\u0131\u0146\u0147\u0147\u013d\u013d\u0148\u0148                                              ", 
+  "                                       \u0117\u0117\u0118\u0149\u0149 \u0135\u0135\u0135\u014a\u014b\u014c\u014c\u014d\u014e \u0140\u012b\u011f\u012d\u0139\u013a\u014f\u0150 \u0151\u0101\u0101\u0144 \u0145 \u0152\u0147\u0147\u0107 \u0153\u0148\u0148\u0148\u0148\u0148                                           ", 
+  "                                      \u0117\u0117\u0118  \u0149\u0128\u0135\u0135\u014a\u0154\u014c\u014c \u014e\u014d\u012b\u011f\u012d\u012d\u013a\u013a\u0155\u0156\u0156\u0156\u0156\u0101\u0101\u0144\u0144\u0145\u0157\u0152\u0158 \u0159\u0107 \u0153  \u0148\u0148\u0148                                          "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/road-casings-grouped-rendering-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/road-casings-grouped-rendering-600-600-1.0-grid-reference.json
new file mode 100644
index 0000000..f731710
--- /dev/null
+++ b/tests/visual_tests/grids/road-casings-grouped-rendering-600-600-1.0-grid-reference.json
@@ -0,0 +1,888 @@
+{
+ "keys": [
+  "", 
+  "330", 
+  "155", 
+  "74", 
+  "57", 
+  "749", 
+  "788", 
+  "201", 
+  "202", 
+  "181", 
+  "691", 
+  "774", 
+  "228", 
+  "46", 
+  "523", 
+  "73", 
+  "530", 
+  "384", 
+  "286", 
+  "385", 
+  "1", 
+  "156", 
+  "644", 
+  "361", 
+  "531", 
+  "43", 
+  "449", 
+  "93", 
+  "328", 
+  "527", 
+  "605", 
+  "589", 
+  "288", 
+  "215", 
+  "635", 
+  "532", 
+  "588", 
+  "154", 
+  "138", 
+  "287", 
+  "637", 
+  "638", 
+  "529", 
+  "576", 
+  "362", 
+  "348", 
+  "45", 
+  "639", 
+  "497", 
+  "300", 
+  "329", 
+  "237", 
+  "600", 
+  "137", 
+  "534", 
+  "636", 
+  "595", 
+  "103", 
+  "14", 
+  "180", 
+  "232", 
+  "593", 
+  "104", 
+  "353", 
+  "526", 
+  "592", 
+  "594", 
+  "136", 
+  "352", 
+  "327", 
+  "323", 
+  "203", 
+  "490", 
+  "415", 
+  "442", 
+  "342", 
+  "258", 
+  "528", 
+  "596", 
+  "599", 
+  "157", 
+  "343", 
+  "331", 
+  "257", 
+  "598", 
+  "412", 
+  "313", 
+  "335", 
+  "277", 
+  "89", 
+  "597", 
+  "344", 
+  "431", 
+  "276", 
+  "126", 
+  "113", 
+  "108", 
+  "107", 
+  "591", 
+  "590", 
+  "407", 
+  "414", 
+  "147", 
+  "99", 
+  "369", 
+  "413", 
+  "337", 
+  "97", 
+  "124", 
+  "122", 
+  "110", 
+  "174", 
+  "406", 
+  "75", 
+  "82", 
+  "83", 
+  "72", 
+  "278", 
+  "173", 
+  "472", 
+  "481", 
+  "336", 
+  "159", 
+  "153", 
+  "100", 
+  "102", 
+  "96", 
+  "200", 
+  "266", 
+  "265", 
+  "263", 
+  "269", 
+  "231", 
+  "446", 
+  "66", 
+  "409", 
+  "410", 
+  "315", 
+  "179", 
+  "182", 
+  "419", 
+  "392", 
+  "391", 
+  "390", 
+  "525", 
+  "417", 
+  "411", 
+  "183", 
+  "479", 
+  "473", 
+  "146", 
+  "475", 
+  "474", 
+  "401", 
+  "421", 
+  "445", 
+  "356", 
+  "483", 
+  "480", 
+  "551", 
+  "583", 
+  "325", 
+  "324", 
+  "476", 
+  "582", 
+  "364", 
+  "389", 
+  "393", 
+  "839", 
+  "724", 
+  "440", 
+  "227", 
+  "620", 
+  "462", 
+  "477", 
+  "268", 
+  "267", 
+  "225", 
+  "464", 
+  "16", 
+  "271", 
+  "535", 
+  "463", 
+  "299", 
+  "693", 
+  "261", 
+  "270", 
+  "247", 
+  "548", 
+  "467", 
+  "465", 
+  "422", 
+  "241", 
+  "466", 
+  "238", 
+  "239", 
+  "246", 
+  "489", 
+  "634", 
+  "671", 
+  "333", 
+  "326", 
+  "488", 
+  "482", 
+  "633", 
+  "448", 
+  "243", 
+  "248", 
+  "461", 
+  "460", 
+  "332", 
+  "378", 
+  "577", 
+  "484", 
+  "471", 
+  "381", 
+  "25", 
+  "188", 
+  "470", 
+  "565", 
+  "469", 
+  "334", 
+  "379", 
+  "355", 
+  "284", 
+  "279", 
+  "175", 
+  "667", 
+  "562", 
+  "380", 
+  "665", 
+  "550", 
+  "373", 
+  "354", 
+  "632", 
+  "485", 
+  "570", 
+  "363", 
+  "575", 
+  "673", 
+  "585", 
+  "131", 
+  "404", 
+  "285", 
+  "587", 
+  "78", 
+  "145", 
+  "85", 
+  "41", 
+  "739", 
+  "478", 
+  "87", 
+  "121", 
+  "40", 
+  "358", 
+  "226", 
+  "260", 
+  "283", 
+  "687", 
+  "690", 
+  "486", 
+  "133", 
+  "672", 
+  "95", 
+  "322", 
+  "321", 
+  "195", 
+  "264", 
+  "194", 
+  "177", 
+  "396", 
+  "359", 
+  "402", 
+  "55", 
+  "686", 
+  "619", 
+  "15", 
+  "382", 
+  "397", 
+  "319", 
+  "735", 
+  "212", 
+  "236", 
+  "282", 
+  "280", 
+  "618", 
+  "615", 
+  "614", 
+  "403", 
+  "376", 
+  "59", 
+  "204", 
+  "786", 
+  "640", 
+  "641", 
+  "375", 
+  "374", 
+  "400", 
+  "320", 
+  "58", 
+  "773", 
+  "199", 
+  "692", 
+  "584", 
+  "377", 
+  "395", 
+  "405", 
+  "398", 
+  "56", 
+  "579", 
+  "670", 
+  "31", 
+  "357", 
+  "505", 
+  "493", 
+  "784", 
+  "741", 
+  "743", 
+  "50", 
+  "92", 
+  "38", 
+  "213", 
+  "847", 
+  "492", 
+  "841", 
+  "254", 
+  "747", 
+  "827", 
+  "568", 
+  "39", 
+  "53", 
+  "439", 
+  "224", 
+  "607", 
+  "5", 
+  "61", 
+  "158", 
+  "840", 
+  "438", 
+  "214", 
+  "835", 
+  "753", 
+  "223", 
+  "626", 
+  "22", 
+  "13", 
+  "838", 
+  "302", 
+  "54", 
+  "52", 
+  "708", 
+  "769", 
+  "697", 
+  "165", 
+  "118", 
+  "62", 
+  "494", 
+  "491", 
+  "301", 
+  "9", 
+  "222", 
+  "622", 
+  "423", 
+  "296", 
+  "317", 
+  "318", 
+  "252", 
+  "631", 
+  "495", 
+  "304", 
+  "710", 
+  "36", 
+  "123", 
+  "308", 
+  "760", 
+  "762", 
+  "630", 
+  "621", 
+  "674", 
+  "2", 
+  "3", 
+  "253", 
+  "255", 
+  "846", 
+  "77", 
+  "316", 
+  "771", 
+  "628", 
+  "453", 
+  "291", 
+  "383", 
+  "830", 
+  "722", 
+  "564", 
+  "295", 
+  "292", 
+  "365", 
+  "845", 
+  "617", 
+  "624", 
+  "666", 
+  "662", 
+  "581", 
+  "42", 
+  "294", 
+  "726", 
+  "694", 
+  "627", 
+  "654", 
+  "661", 
+  "456", 
+  "48", 
+  "47", 
+  "716", 
+  "732", 
+  "836", 
+  "623", 
+  "507", 
+  "629", 
+  "606", 
+  "651", 
+  "571", 
+  "580", 
+  "574", 
+  "572", 
+  "293", 
+  "837", 
+  "613", 
+  "457", 
+  "65", 
+  "459", 
+  "23", 
+  "764", 
+  "144", 
+  "125", 
+  "758", 
+  "834", 
+  "831", 
+  "719", 
+  "780", 
+  "844", 
+  "184", 
+  "616", 
+  "679", 
+  "681", 
+  "458", 
+  "833", 
+  "825", 
+  "166", 
+  "139", 
+  "682", 
+  "17", 
+  "511", 
+  "509", 
+  "29", 
+  "832", 
+  "770", 
+  "772", 
+  "766", 
+  "768", 
+  "689", 
+  "842", 
+  "220", 
+  "610", 
+  "675", 
+  "518", 
+  "63", 
+  "26", 
+  "27", 
+  "713", 
+  "219", 
+  "221", 
+  "506", 
+  "677", 
+  "120", 
+  "498", 
+  "680", 
+  "35", 
+  "30", 
+  "714", 
+  "730", 
+  "738", 
+  "678", 
+  "676", 
+  "573", 
+  "37", 
+  "443", 
+  "740", 
+  "717", 
+  "502", 
+  "642", 
+  "130", 
+  "444", 
+  "703", 
+  "826", 
+  "501", 
+  "503", 
+  "142", 
+  "117", 
+  "18", 
+  "28", 
+  "742", 
+  "731", 
+  "745", 
+  "767", 
+  "90", 
+  "569", 
+  "70", 
+  "20", 
+  "715", 
+  "808", 
+  "170", 
+  "727", 
+  "515", 
+  "514", 
+  "521", 
+  "755", 
+  "191", 
+  "185", 
+  "684", 
+  "557", 
+  "516", 
+  "513", 
+  "522", 
+  "311", 
+  "234", 
+  "556", 
+  "519", 
+  "517", 
+  "701", 
+  "310", 
+  "545", 
+  "450", 
+  "699", 
+  "696", 
+  "733", 
+  "350", 
+  "211", 
+  "520", 
+  "303", 
+  "725", 
+  "729", 
+  "702", 
+  "822", 
+  "210", 
+  "64", 
+  "820", 
+  "349", 
+  "524", 
+  "140", 
+  "744", 
+  "746", 
+  "815", 
+  "813", 
+  "189", 
+  "192", 
+  "190", 
+  "555", 
+  "135", 
+  "24", 
+  "705", 
+  "698", 
+  "712", 
+  "707", 
+  "193", 
+  "553", 
+  "538", 
+  "546", 
+  "643", 
+  "33", 
+  "34", 
+  "510", 
+  "345", 
+  "721", 
+  "818", 
+  "539", 
+  "750", 
+  "795", 
+  "817", 
+  "351", 
+  "559", 
+  "603", 
+  "601", 
+  "604", 
+  "794", 
+  "793", 
+  "783", 
+  "683", 
+  "206", 
+  "544", 
+  "76", 
+  "734", 
+  "819", 
+  "781", 
+  "789", 
+  "32", 
+  "706", 
+  "805", 
+  "785", 
+  "787", 
+  "297", 
+  "12", 
+  "711", 
+  "235", 
+  "105", 
+  "44", 
+  "542", 
+  "759", 
+  "765", 
+  "807", 
+  "791", 
+  "852", 
+  "290", 
+  "347", 
+  "289", 
+  "536", 
+  "51", 
+  "757", 
+  "728", 
+  "811", 
+  "810", 
+  "425", 
+  "160", 
+  "430", 
+  "169", 
+  "778", 
+  "704", 
+  "504", 
+  "541", 
+  "779", 
+  "709", 
+  "134", 
+  "98", 
+  "4", 
+  "346", 
+  "809", 
+  "339", 
+  "305", 
+  "685", 
+  "148", 
+  "752", 
+  "341", 
+  "167", 
+  "162", 
+  "163", 
+  "149", 
+  "754", 
+  "748", 
+  "340", 
+  "10", 
+  "168", 
+  "67", 
+  "828", 
+  "540", 
+  "824", 
+  "782", 
+  "688", 
+  "109", 
+  "554", 
+  "763", 
+  "756", 
+  "428", 
+  "112", 
+  "68", 
+  "496", 
+  "127", 
+  "229", 
+  "128", 
+  "161", 
+  "761", 
+  "829", 
+  "132", 
+  "249", 
+  "176", 
+  "561", 
+  "306", 
+  "537", 
+  "111", 
+  "171", 
+  "307", 
+  "432", 
+  "309", 
+  "19", 
+  "164", 
+  "250", 
+  "178", 
+  "695", 
+  "129", 
+  "116", 
+  "804", 
+  "775", 
+  "197", 
+  "360", 
+  "21", 
+  "802", 
+  "800", 
+  "806", 
+  "803", 
+  "801", 
+  "799", 
+  "797", 
+  "798", 
+  "217", 
+  "216", 
+  "718", 
+  "69", 
+  "150", 
+  "7", 
+  "790", 
+  "338", 
+  "843", 
+  "720", 
+  "152", 
+  "151", 
+  "86", 
+  "8", 
+  "207", 
+  "796", 
+  "233", 
+  "88", 
+  "218", 
+  "560", 
+  "209", 
+  "6", 
+  "777", 
+  "452", 
+  "208", 
+  "172", 
+  "776", 
+  "558", 
+  "451"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                       !                   ##$          %%&''       (               ))      ***                       ", 
+  "                                                       !                   ##$          %%+',      (              )))      **  -                      ", 
+  "                                                       !!                  #.$         %%&+'       (            )))      **    -                      ", 
+  "   /                          0                         !                  #.$         %%&',      (           )))      **     -                       ", 
+  "   /            1             0                         !                  #.$     2  %%&+',      (          ))3     ***     -                        ", 
+  "   /            1             00                        !!                 #.$ 4   2  %%&',      (         )) 33    **      --                        ", 
+  "  /             1             000                        !                 #.$ 4 222 %%&+',55    (        ))  3   **       --                         ", 
+  "  /            1             66700                       !      8888      ##.$4  22  %%&',555   (        ))  3  **       --                           ", 
+  "  /            1            99667000                     !   888          #..$4 222 :%%+',55;   (      ))   33***      --                             ", 
+  "  /            1           99  667700                    !   8           ##.$$4 22 :%%&', 55    (     ))   33**      --                               ", 
+  "  /           1           99    66770<0                  !    8          ##.$=422  :%%+',55;    (    ))  **3       --                                 ", 
+  "  />>>     ?  1           9@@    667<<000                !!   8          #..$=422 :%%&',,55;    (   )) A**3 -------                   BBBB            ", 
+  "  /  C>>>> ?  D          9   @E EE66F  0000               !   8         ##.GG=42 ::%%+',555     (   )  H 3---                        BB  BB           ", 
+  "  /  CI J>>KKK DDDD     9   E EEE ELFFF  000              !   MMMMMMNN  #OGG=   ::%%&+ ,55;     (  )  *  3-                         B                 ", 
+  " //PPPPPJ  Q      DDDDD99  E  EE  L  FFF   000            !   R    R  N## GGS: :::%&+',555      ( )) **TT                         BB                  ", 
+  " / PC IJPPQ           DD  EE EE  UUU   FFF  0000          !   R    R   #VVGS.::::%%&' ,55;       ()  TT -                 BBBBBBBBB                   ", 
+  "W/ PXXIJP Q              EE  E   YYUUU  FFF   000         !   R    R  ZZ VSS[:::%%&+', 55        ) TT] -                BB   ^                        ", 
+  "//PPP  JP Q              E  E   __YYY UU  FFF   000       !   R    R  ZZ``Saa[[ %%&' ,555       ))TT]  -              BB     ^                        ", 
+  "bb C PPPPQ               E E    c __ YY U  dFF    ee0     !    R  RR  Z``fg  [[[%%&',,55       hh T ] -               B      ^^                       ", 
+  "/bbbb J  Q                EE  LLLcc ___YY dd FFF  e000    !     RRR  ZZ``fg   [[%&+',555      hhiT  ] -              B        ^^                      ", 
+  "     bbbbQ                   j kkk ccc__  d    FFFe  000 !!l         ZZ`mmmmm [%%&+ ,555    hh  iT  ] -              B         nnn                    ", 
+  "        o                   jj    kkkccc  d  p  qFFF   00r lll       Z``stttmm[%%+', 55    hh   iT  ]]-              B         uun                    ", 
+  "        o                  jj       kkkk d  vvppq FFFF  rr00llllll  wZ` sx  tm%%&+',55;y hh     iT   ]z--            B         ^ u          {{{{{{{{{{", 
+  "       oo              jjjjj           kkd ||vvvqpp  FFFr 0000llll  ZZ` s}}}m[%%&'~,55 yyh      iT \u007f\u007f\u007f zzzzzz---     B    {{{{{{\u0080{{{{{{{{{{{{{\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081", 
+  "       o               j                  kk|||qvv pp  rrFF 00000l  Z`` ssssm[%%&',555 hh       iT\u007f\u007f    \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083{{{{{{{{{{\u0081\u0081\u0081\u0081\u0081\u0080\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081  ", 
+  "       o              j                    kkk q| vv\u0084\u0085\u0086\u0087 FFF\u0088\u0088\u008800000Z`\u0089\u008a\u008bx \u008cm%%&+',5\u008d\u008e\u008eh\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u0090\u0090\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0091\u0081\u0081                   ", 
+  "      o              j                        kq |||\u0084\u0084\u0092\u0087\u0086\u0086  \u0093\u0088\u0088\u0088\u0088\u0088\u0088\u0094\u0095`\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008e\u008e\u0082\u0082\u0082\u0082\u0082\u0096\u0096\u0096\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u0097 --      \u0098          \u0091                    ", 
+  "      o             jj        \u0099\u009a\u0099               kkk| \u009b\u0087\u0092\u0092 \u0086\u0086  \u0093\u0093\u009c\u009c\u0088\u0088\u009d\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009f\u009f\u009f\u009f\u009f\u009f\u009f\u009f\u009f\u0096\u0096\u00a0\u0096\u0096\u0096\u0096    \u00a1\u00a2\u00a3\u00a4\u00a4\u00a5  \u00a6\u00a6\u00a6\u00a6---       \u0098\u0098         \u0091                    ", 
+  "      o            jj        \u0099\u0099\u009a \u0099\u0099\u0099              k   \u0087\u009b \u0092     k\u00a7\u009c\u009c\u00a8\u009d\u00a9\u00a9\u00aax\u00ab  %%%&',55   \u00ac        \u00a1\u00a2  \u00ad\u00ad\u00a5\u00a6--             \u0098         \u0091                    ", 
+  "     o             j         \u0099 \u009a   \u0099             kkkkkkkkkk\u00aekkk  \u009c\u009c\u009d\u009d\u00af\u00b0 x\u00b1  %%&&',55   \u00ac        \u00a1\u00a2 \u00ad  -                \u0098\u0098         \u0091                   ", 
+  "\u00b2\u00b2\u00b2  o            j         \u0099  \u009a                           \u00b3    \u00b4\u00a7\u009c\u009d\u009d\u00af\u00b0x \u00ab\u00b1 %%&+',55   \u00ac        \u00a1\u00a2\u00b5\u00ad  -                 \u0098         \u0091                   ", 
+  "  \u00b2\u00b2\u00b2o           j         \u0099\u0099 \u009a\u009a         \u00b6\u00b7                \u00b3    \u00b4\u00a7\u00b8\u009d \u00af\u00b0x\u00ab \u00b1%%%&+',55   \u00ac        \u00a1\u00a2\u00b5\u00ad  -                 \u0098          \u0091                  ", 
+  "     \u00b2\u00b2\u00b2        jj        \u0099\u0099  \u009a   \u00b9\u00ba     \u00b6\u00b7\u00b7\u00b7          \u00bb\u00bb\u00bb\u00bb\u00bc    \u00bd\u00b8\u00b8\u009d\u00af \u00b0x\u00ab\u00b1 %%%&+',5\u00be   \u00ac        \u00a1 \u00a2\u00b5\u00ad -                  \u0098         \u0091                  ", 
+  "\u00bf       \u00b2\u00b2\u00b2    jj         \u0099   \u009a  \u00b9  \u00ba\u00ba\u00ba  \u00c0   \u00b7\u00b7     \u00bb\u00bb\u00bb    \u00bc    \u00bd\u00b8\u009d\u009d\u00af\u00b0 x\u00ab\u00b1 %% &+'55\u00be   \u00ac        \u00a1\u00a1\u00a2\u00b5\u00b5\u00ad -                 \u0098         \u0091                  ", 
+  " \u00bf\u00bf       \u00b2\u00b2   j         \u0099\u00c1   \u009a\u009a\u009a\u00b9    \u00c2\u00c2\u00c0\u00b6     \u00b7   \u00c3       \u00c4   \u00bd\u00bd\u00b8\u009d \u00af\u00b0x\u00ab\u00ab\u00b1 %% &+'55\u00be    \u00ac        \u00a1\u00a2\u00a2\u00b5\u00b5\u00ad-                  \u0098         \u0091                 ", 
+  "  \u00bf\u00bf          j         \u0099\u0099\u00c1     \u009a\u00c5\u00c5    \u00c6  \u00b6\u00b6\u00b6\u00b6\u00b6\u00b7   \u00c3       \u00c4   \u00bd\u00c7\u00b8\u009d \u00c8\u00c8\u00b0\u00c9\u00b1\u00b1 %% \u00ca\u00cb,55 \u00cc   \u00ac        \u00a1 \u00a2 \u00b5\u00cd\u00cd-                 \u0098         \u0091                 ", 
+  "   \u00bf\u00ce\u00ce\u00ce   jj j         \u0099\u0099\u00c1\u00c1\u00cf\u00cf\u00cf\u00cf\u00cf\u00b9\u00cf \u00d0\u00c5  \u00c6      \u00b7    \u00c3      \u00c4\u00c4   \u00bd\u00b8\u00b8\u009d   \u00b0\u00c9\u00b1 %%%&\u00ca',55 \u00cc   \u00ac        \u00a1\u00a1\u00d1\u00d1\u00d2\u00d3 --                 \u0098         \u0091                ", 
+  "     \u00bf\u00bf\u00ce\u00cej  jj         \u0099\u00cf\u00cf\u00c1     \u00d4\u00cf\u00cf\u00d0 \u00c5\u00c6       \u00b7    \u00c3      \u00c4    \u00bd\u00b8\u009d\u009d   x\u00c9\u00ab \u00d5%%&\u00ca',55 \u00cc   \u00ac\u00ac        \u00a1\u00d6\u00d1 \u00d3\u00d3 -                 \u0098         \u0091                ", 
+  "      \u00bf\u00bf \u00ce\u00ce           \u0099\u00cf\u00cf \u00c1\u00c1\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d8 \u00cf\u00cf\u00c6       \u00b7    \u00c3      \u00c4   \u00d9\u00bd\u00b8\u009d   x\u00c9\u00ab  %%%&\u00da',55\u00cc\u00be    \u00ac        \u00a1\u00a1\u00db\u00dc \u00d3  -              \u00dd\u00dd\u0098\u0098        \u0091                ", 
+  "       \u00bf\u00bf \u00ce\u00ce         \u0099\u00de\u00cf \u00d7\u00d7    \u00df \u00d7\u00d7\u00d7 \u00e0\u00cf\u00cf      \u00b7    \u00c3     \u00e1\u00c4   \u00bd\u00b8\u00b8\u009d   x\u00c9\u00ab \u00d5%% &\u00da',55  \u00be   \u00ac         \u00a1 \u00dc\u00dc \u00d3  -            \u00e2\u00dd  \u0098         \u0091               ", 
+  "         \u00bf \u00ce\u00ce       \u0099\u0099\u00cf\u00de\u00de\u00de   \u00e3\u00e3\u00df\u00e3   \u00d7\u00e0  \u00cf    \u00b7    \u00c3       \u00c4   \u00bd\u00b8\u00b8\u009d   x\u00c9\u00ab \u00d5%% &\u00ca',55  \u00be   \u00ac         \u00a1\u00a1 \u00db\u00db \u00d3  --         \u00e4\u00e5\u00e6  \u0098\u0098        \u0091               ", 
+  "         \u00bf   \u00e7      \u0099 \u00cf\u00e8\u00e8\u00e8  \u00e3    \u00e3\u00e3 \u00e9\u00d7\u00d7  \u00cf   \u00b7    \u00ea\u00ea     \u00eb    \u00bd\u00b8\u009d\u009d   x\u00c9\u00ab \u00d5%% &\u00da',55  \u00be    \u00ac         \u00a1   \u00db\u00db\u00db  --        \u00e4\u00e4\u00e5\u00e6  \u0098         \u0091              ", 
+  "        \u00bf\u00bf    \u00e7\u00ec   \u00ed\u0099 \u00cf\u00ee\u00ee\u00d7 \u00e3\u00e3      \u00e9\u00e3 \u00d7\u00d7 \u00cf\u00cf  \u00b7    \u00ef\u00ef\u00ea\u00ea\u00ea  \u00eb    \u00bd\u00b8\u009d\u009d  x\u00c9\u00ab  \u00d5%% &\u00ca',55  \u00be    \u00ac          \u00a1     \u00db\u00db\u00db\u00db-        \u00e4\u00f0\u00f1\u00f1\u00f1\u0098         \u0091              ", 
+  "        \u00bf       \u00ec\u00ec\u00ed\u00ed \u0099\u00cf\u00f2\u00ee\u00d7  \u00e3       \u00e3  \u00d7\u00f3\u00f3\u00cf \u00b7    \u00f4\u00f4\u00ef\u00ef\u00ef\u00ea\u00ea \u00eb   \u00f5\u00bd\u00b8\u009d   x\u00c9\u00ab  \u00d5%% &\u00da' 55   \u00be   \u00ac          \u00a1\u00a1    \u00d3\u00d3  -              \u0098        \u0091              ", 
+  "       \u00bf        \u00f6\u00ed\u00f7\u00f7\u00f7\u00f7\u0099\u00cf \u00d7  \u00f8\u00e3       \u00e3 \u00d7\u00f3 \u00cf \u00b7      \u00f4\u00f4\u00ef\u00ef\u00ea \u00eb  \u00f9\u00f5\u00f5\u00f5\u00f5\u00f5  x\u00c9\u00ab \u00d5\u00d5%% &\u00ca' \u00fa\u00fa   \u00be   \u00ac\u00ac          \u00a1\u00a1    \u00d3  -              \u0098         \u00fb             ", 
+  "               \u00f6\u00f6\u00f6   \u00f7\u0099\u00cf  \u00d7\u00f8 \u00e3\u00e3      \u00e3 \u00d7  \u00cf\u00b7\u00b7        \u00f4\u00ef\u00ea\u00eb\u00eb  \u00f9\u00bd\u00b8\u009d\u00f5\u00f5  x\u00c9\u00ab \u00d5\u00d5%% &\u00cb'\u00fa\u00fa\u00fa   \u00be    \u00ac           \u00a1\u00a1    \u00d3  -              \u0098       \u00fb              ", 
+  "              \u00f6   \u00ed\u00ed\u00f7\u00f7\u0099 \u00cf  \u00d7  \u00e3\u00fc\u00e3\u00e3 \u00e3\u00e3  \u00d7  \u00cf\u00b7           \u00f4\u00f4    \u00bd\u00b8\u009d\u00f5  x\u00c9\u00ab\u00ab \u00d5%%  &\u00cb'\u00fa\u00fa\u00fa   \u00be\u00be   \u00ac            \u00a1    \u00d3  -              \u0098      \u00fb               ", 
+  "             \u00f6\u00f6    \u00ed\u00f7\u0099  \u00cf\u00cf \u00fd\u00d7\u00d7\u00fc\u00fc  \u00fe    \u00d7  \u00b7\u00b7           \u00ff     \u00b8\u00b8\u009d\u0100  x\u00c9\u00ab  \u00d5%%  &\u00cb,\u00fa\u00fa\u0101\u0101   \u00be   \u00ac             \u00a1 \u0102\u0102\u0103  -               \u0098    \u00fb             \u0104\u0104\u0104", 
+  "            \u00f6\u00f6      \u00ed\u00ed   \u00cf\u00cf\u0105 \u00d7\u00d7\u00d7  \u00fe  \u00d7\u00d7  \u00cf\u00b7     \u0106      \u00ff     \u00b8\u00b8\u009d\u0107xxx\u00c9\u00ab  \u00d5%%  &\u00cb'\u00fa\u00fa \u0101   \u00be    \u00ac            \u00a1\u0102\u0102\u0102\u0103\u00d3 --              \u0098   \u00fb          \u0104\u0104\u0104\u0104   ", 
+  "            \u00f6         \u0099\u0099  \u00cf     \u00d7\u0108\u00d7\u00d7\u00d7 \u0109 \u00cf\u00b7\u00b7     \u0106\u010a    \u00ff     \u00bd\u00b8\u009d\u009d    \u00c9\u00ab  \u00d5%%  &\u00cb\u00fa\u00fa\u00fa\u010b\u010b   \u00be    \u00ac            \u00a1\u00a1  \u0102\u00d3  -               \u0098 \u00fb\u00fb      \u0104\u0104\u0104\u0104       ", 
+  "           \u00f6           \u0099\u0099        \u0108\u010c\u010c  \u0109 \u00cf\u010d     \u010e\u010a\u010a\u010a\u010a\u010f \u0110    \u0111\u0111\u00b8\u009d\u009d   \u00c9\u00c9\u00ab \u00d5\u00d5%%  &\u00cb\u00fa\u00fa\u010b  \u010b  \u00be\u00be   \u00ac             \u00a1  \u0102\u00d3  -               \u0098\u00fb\u00fb   \u0104\u0104\u0104\u0104           ", 
+  "          \u00f6\u0112            \u0099\u0099         \u010c  \u00cf\u0109\u010d      \u010e   \u010a\u010a\u0110  \u0111\u0113\u0113\u0113\u00b8\u00b8\u009d    \u0114\u00ab  \u00d5%%%  &\u00fa\u00fa\u00fa\u010b  \u010b   \u00be   \u00ac             \u00a1  \u0102\u00d3  -               \u0115\u00fb\u0104\u0104\u0104\u0104               ", 
+  "         \u00f6\u0116\u0116\u0112\u0112            \u0099         \u010c\u00b7\u00b7\u010d\u010d      \u010a\u010a \u010a\u010a \u0110 \u0111\u0113\u0113\u0113\u0117\u0118\u0119\u009d\u011a\u011a  \u0114 \u00ab\u00ab\u00d5%%   &\u00fa\u00fa \u010b   \u010b  \u00be    \u00ac            \u00a1  \u0102\u00d3  --             \u0115\u0115\u0104                   ", 
+  "\u011b        \u00f6 \u0116\u0116\u0112\u0112            \u0099\u0099   \u011c\u00b7\u00b7\u00b7\u00b7 \u010d\u010d        \u010a\u010a\u010a \u0110 \u0111\u0113\u0113\u0117\u0117\u0117\u0118\u011d\u011e\u011a\u011a\u011f\u011f\u0114  \u00d5\u00d5%%   \u00fa\u00fa\u00fa,\u010b   \u010b\u010b \u00be\u0120\u0120\u0120 \u00ac            \u00a1  \u0102\u0102\u0121\u00d3\u00d3--\u0122\u0122\u0123        \u0115\u0115                     ", 
+  "\u0124\u0125\u0125     \u00f6    \u0116\u0112\u0112            \u0099\u0099  \u011c\u0126\u0126   \u010d          \u010a\u010a \u0110\u0111\u0127\u0113\u0117\u0128\u0128\u0128\u0129\u011e\u011e\u012a\u012b\u011f\u011f\u011f\u00d5\u00d5\u00d5\u00d5%%  \u00fa\u00fa\u00fa', \u010b   \u010b\u010b\u00be\u00be   \u00ac\u00ac            \u00a1  \u0102\u0121   \u012c\u012d\u012e\u0123       \u0115\u0115                    \u012f\u012f", 
+  " \u0124\u0125\u0125   \u00f6      \u0116\u0116\u0112\u0112            \u0099\u011c\u0126  \u0126 \u010d             \u0110 \u0127\u0127\u0128   \u0129\u0129\u011e\u011e\u0130\u012b\u012b\u011f\u011f\u00d5\u00d5\u00d5%%   \u00fa\u00fa\u00fa', \u010b    \u010b \u0131    \u00ac\u00ac\u00ac          \u00a1  \u0121    \u012c \u012e\u012e      \u0115\u0115                 \u012f\u012f\u012f\u012f  ", 
+  "   \u0124\u0125 \u00f6\u00f6       \u0116\u0116\u0112\u0112            \u011c\u0126\u0126\u0126\u0126\u010d\u010d             \u0110\u0111\u0127\u0128    \u0129\u0129\u011e\u011e  \u0132\u012b\u012b   %%  \u00fa\u00fa\u0133\u00da',  \u010b    \u0131        \u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac   \u00a1 \u0121      \u012d  \u0123    \u0115\u0115             \u012f\u012f\u012f\u012f\u012f     \u0134", 
+  "  \u0135 \u0124\u0125\u0125          \u0116\u0112\u0112            \u0099\u0126\u0126\u010d\u010d             \u0110\u0111\u0127\u0127\u0136\u0136\u0137\u0137 \u0129\u0129\u011e\u011e \u0138 \u0132\u012b  %%% \u00fa\u00fa\u00fa\u0139\u013a\u00cb,  \u010b    \u013b\u010b             \u00ac\u00ac\u00ac\u00ac\u013c\u013c\u013c      \u013d  \u013e   \u0115\u0115          \u012f\u012f\u012f\u012f\u012f     \u0134\u0134\u0134\u0134 ", 
+  " \u013f \u0135 \u0124\u0125\u0125          \u0116\u0116\u0112            \u0140\u0141\u0126             \u0110\u0111\u0127\u0127\u0136\u0136\u0136\u0136\u0137\u0137\u0129  \u011e \u0142\u0143\u0132\u0132\u012b\u0144%% \u00fa\u00fa\u00fa\u0133\u0139\u00da',   \u010b   \u013b \u010b                   \u013c\u013c\u013c\u013c\u013c\u013c\u013c\u013c\u013c\u013c\u0145\u0145\u0115\u0115       \u012f\u012f\u012f\u012f      \u0134\u0134\u0134\u0134 \u0146\u0146\u0146\u0146", 
+  "\u00bf \u013f \u00f6 \u0147\u0124\u0125\u0148         \u0116\u0116\u0112\u0112         \u0140\u0141\u0141             \u0110\u0110\u0127\u0127\u0128\u0149\u0149\u014a\u0136\u0136\u0137\u0129  \u011e\u0143\u0143\u0143\u014b\u0132\u014c\u014d\u014d% \u00fa\u00fa\u0133\u0139 \u013a\u014e'   \u010b\u010b \u013b\u013b  \u010b\u010b                             \u014f\u014f   \u012f\u012f\u012f\u012f       \u0134\u0134\u0134\u0146\u0146\u0146\u0146\u0150\u0150\u0150  ", 
+  "\u00bf  \u00f6\u00f6  \u0147\u0124\u0125\u0148          \u0116\u0112\u0112       \u0140\u0140\u0141 \u0151\u0151           \u0110\u0111\u0127\u0128\u0149\u0149\u014a\u014a\u0136\u0136 \u0129\u0152\u0143\u0143\u011e\u011e\u0153\u0154\u0155\u014d\u0156\u0156%\u00fa\u00fa\u0133 \u0139 &\u014e',   \u010b  \u013b\u013b  \u010b\u010b                              \u012f\u012f\u012f       \u0134\u0134\u0134\u0134\u0146\u0146\u0150\u0146\u0150\u0150      ", 
+  "  \u00f6\u00f6     \u0124\u0125\u0125          \u0116\u0116\u0112      \u0140\u0141   \u0151\u0157         \u0158\u0111\u0127\u0128\u014a\u0149\u014a\u014a\u0136\u0159\u0159\u0159\u0129\u0152   \u011e\u011e\u0154\u014d\u014d\u0156\u0156\u00fa\u00fa\u00fa\u0133 \u0139 \u00da\u014e',    \u010b  \u015a\u013b   \u010b\u010b                                 \u0134\u0134\u0134\u0134\u0146\u0146\u0146\u0146\u0150\u0150           ", 
+  "\u015b \u00f6       \u0147\u0124\u0125          \u0116\u0116\u0112\u0112   \u0140\u0141\u0141    \u0157\u015c       \u0110\u0111\u0127\u0127\u0128 \u014a\u0159\u0159\u0159\u0159\u0159\u0159\u0129     \u014d\u014d\u014d\u0156\u0156\u0156\u00fa\u00fa\u0133 \u0139  &\u014e\u00cb,     \u010b\u015a\u015a\u013b\u013b   \u013b\u013b\u013b                           \u0134\u0134\u0134\u0146\u0146\u0146\u0146\u0150\u0150\u0150              \u015d", 
+  "\u015b\u00f6         \u0147\u015e\u015f\u0148         \u0116\u0116\u0112\u0112 \u0140\u0141\u0141    \u015c\u015c \u015c     \u0110\u0111\u0127\u0127\u0128\u0160\u0160\u0160\u0159\u0159\u0159\u0159 \u0161\u0161\u0162\u0162\u0162\u014d\u014d\u014d\u014d\u014d\u0156\u0156\u00fa\u00fa\u0133\u014c\u014c   & ',,    \u010b\u015a  \u013b\u013b   \u013b\u013b\u0163\u013b\u013b                    \u0134\u0134\u0134\u0146\u0146\u0146\u0146\u0150\u0150\u0150                \u015d\u0164\u0164", 
+  "  \u015b          \u0124\u0125\u0125          \u0116\u0116\u0140\u0140\u0141    \u015c\u015c   \u015c\u0165   \u0110\u0111\u0127\u0128\u0160\u0160\u0160\u0160\u0162\u0162\u0162\u0162\u0162\u0161\u0161\u0162\u0162\u0162\u014d\u014d\u014d \u0156\u0156\u0156\u00fa\u00fa\u0133 \u014c   \u0166 \u014e',     \u010b\u010b  \u013b\u013b    \u013b\u0163\u0163\u0163\u013b\u013b\u013b        \u0167\u0167\u0167\u0134\u0134\u0134\u0134\u0146\u0146\u0146\u0146  \u0150\u0150\u0150                \u01 [...]
+  "\u016a  \u015b\u015b         \u0124\u015f\u0125          \u0116\u0140\u0141     \u015c     \u0165\u0165 \u0110\u0111\u0127\u0128\u0160\u0160\u0160\u016b\u016b\u016b\u016b\u016b\u016b\u016b\u0161\u0161\u016b\u0162\u0162    \u016c\u0156\u00fa\u00fa\u0133\u0154\u0155\u014c\u014c  \u0166\u00da\u014e',\u016d     \u010b\u010b   \u013b\u013b \u013b    \u0163\u0163\u0167\u0167\u0167\u0167\u0167\u0167\u0167\u0167\u0167\u0134\u0134\u0134\u0146\u0146\u0146\u0146\u016e\u016e  \u0150\u0150         [...]
+  "\u016f\u016a  \u015b\u015b         \u0147\u015f\u0125\u0148        \u0140\u0141     \u015c        \u0110\u0111\u0127\u0127\u0160\u0160\u016b\u016b\u016b\u016b\u016b\u0170\u0170\u0170\u016b\u016b\u0161\u016b\u016b\u016b    \u016c\u0171\u0171\u0133\u0172\u0172\u0154\u0155\u014c  \u0173\u00da\u014e' ,\u016d   \u0174\u0174\u010b\u010b   \u013b\u013b\u0175      \u0167     \u0176\u0177\u0134\u0177\u0146\u0146\u0146  \u0178\u016e  \u0150\u0150                \u015d\u0164\u0164\u0168\u0169\u0 [...]
+  "\u016f\u016a\u016a  \u0179\u015b         \u0147\u0124\u0125\u0125      \u0140\u0141\u0141    \u015c        \u0110\u0111\u0127\u0127\u0160\u0160\u016b\u016b\u016b\u0170\u0170\u0170\u0170\u0170\u0170\u0170\u0170\u0161\u016b\u016b\u016b\u016b\u016b \u016c\u016c\u0171\u0171\u017a\u017b\u0172\u0172\u0155\u014c  \u0166\u00da \u014e',\u016d\u016d\u0174\u0174 \u0174\u0174\u0174\u010b     \u0175\u0175\u0175   \u0167  \u0176\u0176\u0176\u0177\u017c\u0146\u0146  \u0178\u0178\u0178\u016e  \u0150  [...]
+  "\u016f \u016a\u016a\u0179  \u015b          \u0124\u0124\u0125    \u0140\u0140\u0141    \u015c\u015c       \u0110\u0110\u0111\u0127\u0160\u0160\u016b\u016b\u0170\u0170 \u017d\u017d     \u0161\u0161\u0170\u016b\u016b\u016b\u016b\u017e\u017e\u017f\u017a\u017a\u017b\u017b\u0172\u0154\u014c  \u0166\u00da \u014e',,\u016d\u0174      \u010b\u010b      \u0167\u0167\u0167\u0176\u0176\u0176\u0180\u0177\u0181\u017c   \u0178\u0178\u0178 \u016e  \u0150              \u015d\u015d\u0164\u0182\u0168\u0 [...]
+  "\u016f\u016a\u016a\u0179\u0179   \u015b\u015b         \u0147\u0125\u0125\u0148 \u0140\u0140\u0141    \u015c\u015c        \u0110\u0111\u0127\u0160\u0160\u0160\u016b\u0170\u0170 \u017d  \u017d\u017d\u017d\u017d \u0184\u0184\u0170\u0185\u0185\u016b\u016b\u017e\u017e\u017f\u017a\u017a\u017b\u017b\u0172\u0172\u0155\u014c \u0173\u00da  \u014e', \u016d       \u010b\u010b   \u0167\u0167\u0167\u0176\u0176\u0176\u0180\u017c\u017c\u0181   \u0178\u0178\u0178  \u016e\u016e \u0150             \u015 [...]
+  " \u016a\u0179\u0179     \u015b\u015b         \u0147\u0124\u0125\u0148\u0140\u0141     \u0186\u0187       \u0110\u0111\u0127\u0127\u0160\u0160\u016b\u0170\u0170 \u017d\u017d\u0188    \u017d\u017d\u0189\u0184\u0189\u0185\u0185 \u017e\u017e\u017f\u017f\u017a\u017a \u017b\u017b\u0172\u0155\u014c \u0173\u00da  \u014e',, \u016d        \u010b\u010b\u0167\u0176\u0176\u0176\u0180\u0180\u017c\u017c\u0181   \u0178\u0178   \u018a\u018a\u016e \u0150            \u015d\u0164\u0164\u0168\u0168\u0169\ [...]
+  "\u016a \u0179\u018b      \u015b\u015b          \u0124\u0148\u0148\u0141    \u0186 \u0187       \u0111\u0127\u0127\u0160\u0160\u016b\u0170\u0170 \u017d\u017d \u0188\u0188\u0188\u0188\u0188  \u018c\u0184\u0189\u0185\u0185\u0185\u017e\u017e\u017f\u017f\u017a\u017a \u017b\u017b\u0172\u0155\u014c\u018d\u018e\u018e\u018e\u018f\u014e\u00cb', \u016d         \u0190\u0190\u0176\u0180\u0177\u017c\u017c\u0181  \u0178\u0178\u0178   \u018a\u018a\u018a\u016e\u016e\u0150           \u015d\u0164\u0164\ [...]
+  " \u0191          \u015b\u015b        \u0140\u0147\u0141    \u0192 \u0187       \u0111\u0111\u0127\u0160\u0160\u016b\u016b\u0170 \u017d\u017d \u0193\u0193   \u0188\u0188\u0188\u017d\u0184\u0184\u0189\u0185\u0185\u017e\u017e\u017f\u016b\u017a\u017a\u017a\u017b\u017b\u0172\u018d  \u0173\u0194 \u018f\u018f\u014e',, \u016d      \u0176\u0176 \u0190\u0190\u0190\u017c\u0181  \u0178\u0178\u0178   \u018a\u018a   \u016e\u0150\u0150         \u015d\u0164\u0164\u0168\u0169\u0169\u0169       \u0183\ [...]
+  "\u0179            \u015b\u015b      \u0140\u0140\u0141    \u0192\u0192\u0187\u0187       \u0111\u0127\u0160\u0160\u0160\u016b\u0170\u0195\u0195\u0195\u0193\u0193  \u0193\u0193\u0193  \u0188\u017d \u0184\u0189\u0185\u0185\u017e\u017e\u017f\u016b\u016b\u017a\u017a\u017b\u017b\u0196\u0197  \u0173\u0194  \u018f\u014e\u00cb', \u016d\u016d   \u0176\u0176 \u0198\u0177\u0199\u017c\u0190\u0190  \u016e\u016e\u016e\u016e\u018a\u018a\u018a    \u016e \u0150        \u015d\u0164\u0164\u0168\u0169\u0 [...]
+  "\u019a            \u019b\u019b\u015b     \u0140\u0141    \u019c\u019c\u019c\u019c\u019c      \u0111\u0127\u0127\u0160\u0160\u016b\u0170\u0195\u0195\u0195        \u0193\u0193\u0193\u0193 \u0184\u0189\u0189\u0185\u019d\u019e\u019e\u016b\u016b\u017a\u017a\u017b\u017b\u0196\u0197  \u0173\u00da  \u018f \u014e',, \u016d \u0176\u0176 \u0180\u0177\u017c\u017c\u0181\u0181  \u019f\u019f    \u016e\u016e\u016e\u016e\u01a0\u01a0\u016e\u016e\u0150      \u015d\u0164\u0164\u01a1\u0168\u0169\u0169     [...]
+  "             \u019b  \u015b   \u0140\u0141\u0141   \u019c\u019c\u01a2\u01a2\u01a2\u01a2     \u0111\u0127\u0127\u0160\u0160\u016b\u016b\u0195\u0195\u0195            \u0193 \u0184\u0184\u0189\u0185\u019d\u019e\u019e\u016b\u016b\u017a\u017a\u017b\u017b\u0196\u0197 \u0173 \u0194   \u01a3\u014e\u00cb',\u01a4\u0176\u0176 \u0180\u0177\u017c\u017c\u0181\u0181            \u01a0\u01a0   \u0150\u0150    \u015d\u0164\u0164\u01a1\u0168\u0169\u0169          \u0183\u0183          ", 
+  "          \u01a5 \u019b    \u015b\u015b\u0140\u0141\u0141    \u01a2\u01a2\u01a2\u01a2\u01a2\u01a2\u01a2\u01a2  \u0111\u0127\u0127\u0160\u0160\u016b\u016b\u0195\u0195\u0195  \u01a6\u01a6\u01a7\u01a7\u01a7\u01a7      \u01a8\u01a8\u0184\u0189\u0185\u019d\u019e\u019e\u016b\u016b\u017a\u017a\u017b\u0196\u0196  \u0173 \u0194     \u01a9\u01aa\u01a4\u01a4 \u0180\u0177\u017c\u017c \u0181\u0181           \u01a0\u01a0     \u0150   \u015d\u0164\u0164\u01a1\u0169\u0169\u0169          \u0183\u0183  [...]
+  "          \u01a5\u01a5\u01ab\u01ab\u01ab   \u015b\u0140\u0141    \u01a2\u01a2\u01a2     \u01a2\u01a2 \u0111\u0127\u0160\u0160\u0160\u016b\u0195\u0195\u0195   \u01a7\u01ac\u01a7  \u01a7\u01a7\u01a7  \u01ad\u01ad\u01ae\u01ae\u0184\u0184\u0185\u019d\u019e\u019e\u016b\u016b\u017a\u017a\u017b\u0196\u0197  \u0173 \u0194\u00da    \u01a9\u01a9\u01aa\u01a4\u01a4\u017c\u017c \u0181\u0181            \u01a0\u01a0     \u0150  \u015d\u0164\u0164\u01af\u01af\u0169\u0169          \u0183\u0183\u0183   [...]
+  "\u01b0\u01b1        \u019b\u019b\u01ab \u01ab\u01ab\u01ab  \u015b\u015b\u01b2\u01b3 \u019c\u01a2\u01a2\u01b4\u01b4\u01b4\u01b4   \u01a2\u01a2\u0127\u0127\u0160\u0160\u01b5\u0195\u0195    \u01b6\u01a7 \u01ac\u01ac   \u01a7\u01ad\u01ad   \u01ae\u0184\u0184\u0185\u019d\u019e\u019e\u016b\u016b\u017a\u017a\u017b\u0196  \u0173\u0173 \u0194\u00da  \u0176\u0176\u01a9\u01b7\u01aa\u01a4\u01a4 \u0181\u0181          \u01a0\u01a0\u01a0\u01a0\u01a0     \u01b8\u0150\u015d\u015d\u0164\u01af\u0168\u01 [...]
+  "\u01b1\u01b0\u01b0       \u01b9\u01b9     \u01ab  \u01ba\u01bb\u01b2\u019c\u01a2\u01a2\u01b4\u01b4   \u01b4 \u01bc\u0111\u0127\u0127\u01bd\u0160\u01be\u01b5\u01b5    \u01a7\u01b6\u01b6\u01b6  \u01ac\u01ac  \u01a7     \u01ae\u0184\u0185\u019d\u019e\u019e\u016b\u016b\u017a\u017a\u0196\u0196  \u0173  \u01bf\u01c0\u01c1\u0176 \u0180\u0180\u01a9\u01a9\u01aa\u01a4\u01a4\u0181       \u01a0\u01a0\u01a0\u01a0     \u01a0\u01a0\u01a0  \u01b8\u0164\u0164\u01af\u01af\u0169            \u0183\u0183  [...]
+  "\u016a\u016a\u01c2\u01b0 \u01c3   \u01c4\u01ab         \u01c5\u01c6\u01c7\u01a2\u01a2 \u01b4  \u01c8 \u01c9\u01ca\u0111\u0127\u0127\u0128\u01bd\u01bd\u01be\u01b5    \u01cb\u01cb  \u01b6\u01b6  \u01ac\u01ac\u01ac\u01a7     \u01ae\u0184\u0184\u019d\u019d\u019e\u019e\u016b\u017a\u017b\u0196\u0197 \u0173\u0173  \u01bf\u01c0\u01c0\u01cc\u0180\u017c\u017c\u01a9\u01b7\u01aa\u01a4\u01a4       \u01a0\u01a0         \u01a0\u01a0\u0164\u0164\u0164\u0168\u01af\u0169            \u0183\u0183         [...]
+  " \u016a\u016a \u01cd\u01c3  \u019b\u01c4\u01c4          \u01c5\u01ce\u01a2\u01cf\u01b4  \u01c8 \u01c8\u01c9 \u0111\u0127\u0128\u01bd\u01bd\u01be\u01b5\u01b5  \u01d0\u01a7  \u01cb\u01cb  \u01b6\u01b6  \u01ac\u01ac     \u01ae \u0184\u0185\u019d\u019e\u01d1\u01d1\u01d1 \u0196 \u0173\u0173 \u01c1\u01c1\u01bf\u01c0\u01c0\u01d2\u017c \u0181\u0181\u01a9\u01b7\u01aa\u01a4     \u01a0\u01a0         \u01a0\u015d\u015d\u0164\u0164\u0182\u0169\u0169             \u0183\u0183                    ", 
+  "  \u016a  \u01cd\u01cd\u019b\u019b\u01ab\u01ab          \u01c5\u01ce \u01cf\u01cf\u01cf\u01c8    \u0111\u0127\u0128\u01bd\u01bd\u01be\u01b5\u01b5\u01d3\u01d3\u01a7\u01a7\u01d0\u01d0  \u01cb\u01cb   \u01b6\u01b6 \u01a7     \u01ae \u0184\u0184\u019d\u01d1\u01d1\u01d1\u01d1\u0196\u01d4\u0173\u0173\u01c1\u01c1\u01d5\u01d6\u01bf\u01c0\u01c0 \u0181\u0181\u0181  \u01d7\u01d8\u01d9\u01d9\u01a0\u01a0\u01a0\u01a0\u01a0        \u01a0\u015d\u01da\u0164\u0164\u0168\u0169\u0169          \u01db\u01d [...]
+  "  \u016a  \u01c3\u01dc\u019b \u01ab          \u01c5\u01ce\u01dd\u01de\u01dd\u01cf\u01cf\u01cf   \u0111\u0127\u0127\u01bd\u01bd\u01bd\u01b5\u01b5  \u01d3\u01df\u01df \u01d0\u01d0   \u01cb\u01cb  \u01b6\u01b6\u01a7     \u01ae  \u0184\u01d1\u01d1\u01d1\u01d1\u016b\u01d4\u01d4\u0173\u01c1\u01d5\u01e0\u01d6\u01d6\u01bf\u01c0\u01c0\u0181\u0181     \u01d7\u01d8\u01d9\u01a0          \u01a0\u01da\u0164\u0164\u0164\u01e1\u0169\u0169\u01b8         \u01db\u01db  \u01e2                        ", 
+  "\u01e3 \u016a  \u01c3  \u01dc\u01ab          \u01c5\u01ce\u01dd\u01de\u01e4\u01dd\u01dd\u01cf\u01cf \u0111\u0127\u0127\u0128\u01bd\u01bd\u01be\u01e5 \u01e6 \u01e7\u01d3\u01df\u01df  \u01d0\u01d0   \u01cb\u01cb\u01a7\u01a7      \u01ae  \u01d1\u01d1\u01d1\u01d1\u01e8\u01e8\u01d4\u01d4\u01e9\u01e0\u01ea\u01eb\u01ec\u01ed\u01bf\u01bf\u01c0       \u01d7\u01ee\u01d8\u01d9\u01a0       \u01a0\u015d\u0164\u0164\u0168\u01e1\u01e1\u0169 \u01ef    \u01f0\u01f0  \u01db\u01db\u01db   \u01e2         [...]
+  "\u01e3\u01e3\u016a  \u01c3  \u01ab\u01ab\u01ab        \u01f1\u01f1\u01dd\u01de \u01e4\u01f2\u01dd\u01dd\u01cf\u01cf\u0127\u0127\u0128\u01bd\u01bd\u01be\u01e5\u01e5\u01f3\u01e6\u01e6\u01e7\u01d3\u01d3 \u01df\u01df  \u01d0\u01d0\u01a7\u01a7\u01cb\u01a7       \u01ae\u01f4\u01f4\u01d1\u01d1\u01f5\u01f6\u01f6\u01e8\u01d4\u01d4\u01ea\u01eb\u01f7\u01ed\u0181\u0181\u01bf\u01c0\u01c0        \u01ee\u01d8\u01d9\u01d9     \u01a0\u015d\u0164\u0164\u0168\u0169\u0169\u0169   \u01ef \u01f8\u01f0\u01f [...]
+  " \u01e3\u01e3  \u01c3\u01fa   \u01ab        \u01c5\u01f1\u01dd\u01de\u01e4\u01e4\u01f2\u01fb \u01dd\u01cf\u0127\u0128\u01bd\u01bd\u01be\u01e5\u01e5 \u01f3\u01e7\u01e6 \u01e5\u01d3 \u01a7\u01a7\u01df\u01a7\u01a7\u01a7          \u01f4\u01f4\u01f4\u01f4\u01f4\u01fc\u01f5\u01f5\u01f6\u01f6\u01d4\u01d4\u01ed\u01ec\u0181\u0181\u0181  \u01bf         \u01d7\u01d7\u01d8\u01d9\u01a0 \u01a0\u01a0\u015d\u0164\u0164\u0168\u0169\u0169      \u01ef  \u01f8\u01f8\u01f9\u01f9\u01f0       \u01e2         [...]
+  "  \u01e3\u01e3 \u01fd\u01fa\u01fa \u01ab        \u01c5\u01c5\u01ce \u01fe\u01e4\u01f2\u01f2\u01fb\u01dd \u0127\u0128\u01bd\u01bd\u01bd\u0170\u01e5\u01e5\u01e5 \u01f3\u01e5\u01e5\u01e5\u01d3\u01e5             \u01ff\u01ff\u01f4\u01f4\u01f4\u01f4 \u0173\u01fc\u01fc\u01f5\u01f6\u01f6\u0200\u01d4\u01ec\u0181\u0181    \u0201\u0202         \u01d7\u01ee\u01d8\u0203\u0203\u0203\u0164\u0164\u0168\u0169\u0169       \u01ef     \u01f8\u01f8        \u01e2                        ", 
+  "\u0173  \u01e3\u01e3\u01e3  \u01fa\u01ab        \u01c5\u01ce \u01fe \u0204\u0205\u0206\u01dd\u01dd\u0127\u0127\u01bd\u01bd\u01bd\u0170\u0170 \u01e5\u01e5\u01e5\u01e5\u01e5\u01e5\u01e5\u01d3\u01d3       \u01ff\u01ff\u01ff\u01ff\u01ff\u0207\u0207\u0207\u0207\u01f4 \u0173\u0173\u01c1\u01e9\u01fc\u01f5\u01f6\u01f6\u01f6\u01d4\u0181   \u0208\u0208 \u0201\u0202          \u0203\u0203\u0209\u0209\u020a\u0168\u0169\u0169         \u01ef    \u01db\u01db         \u01e2                        ", 
+  "\u0173\u0173  \u020b\u01e3\u01e3\u01e3 \u01fa\u01fa\u01fa      \u01c5\u01ce\u01fe\u01fe\u0204 \u0205\u020c\u01dd\u0127\u0127\u0128\u01bd\u01bd\u01be\u0170  \u01e5\u01e5\u01e5\u01e5\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u0207\u0207\u0207\u0207\u0207\u0207\u0207 \u0173\u0173\u01c1\u01e9\u01d6\u01d6\u01fc\u01fc\u01f5\u01f6\u01f6\u01d4\u020d \u0208\u0208\u020e  \u0201\u0202         \u020f\u0203\u0209\u020a\u0210\u0210\u0210           \u01ef\u01db  \ [...]
+  "\u01c1\u0173\u0173 \u0211\u0212\u01e3\u01e3\u0213\u0213 \u01fa\u01fa\u01fa   \u01c5\u01ce\u01fe\u01fe\u0204 \u0205 \u020c\u0127\u0127\u0128\u01bd\u01bd\u01bd\u0170   \u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u0214\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u0207\u0207\u0207\u0207\u0207\u0207\u0207  \u0173\u0173\u01c1\u01e9\u01d6\u0177\u0177\u01f7 \u01fc\u01f5\u01f5\u0215\u0216\u020d\u0208\u0208 \u020e  \u0201\u0202       \u020f\u020f\u0217\u0218\u0219\u0210\u0210\u0210\u01d9           \u01e [...]
+  "\u021a\u021a\u01c1\u0173\u0211 \u0212\u0212\u021b\u0213\u0213\u0213\u0213 \u01fa\u01fa\u01fa\u01c5\u01ce\u01fe\u0204\u0204\u0205 \u020c \u0127\u0128\u01bd\u01bd\u01bd\u0170 \u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u01ff\u021c\u0214\u0214   \u0207\u0207\u0207\u0207\u0207    \u0173\u0173\u01c1\u01e9\u01d6\u0177\u0177\u01f7 \u0181\u0181\u01fc\u021d\u021e\u021e\u0215\u020d\u020d     \u0201\u0202     \u020f\u0217\u0217\u021f\u0218\u0220\u0220\u0210\u01d7\u01ee\u01d8\u01d9           [...]
+  "\u0222\u021a\u021a\u0211\u0211\u0173 \u0212\u0212 \u021b\u0213\u0213\u0213\u0213 \u01c5\u01fa\u020c\u020c\u0204\u0205\u0205\u020c \u0127\u0127\u01bd\u01bd\u01bd\u0170\u01ff\u01ff\u01ff\u01ff\u01ff\u0223\u0224\u0224\u0225\u021c\u021c\u021c\u0214\u0214 \u0207\u0207\u0207\u0207\u0207    \u0173\u0173\u01c1\u01e9\u0226\u0177\u01d6\u01f7 \u0181\u0181   \u021d\u021e\u021e\u0215\u0215\u020d\u0197    \u0201\u0202   \u020f\u0217\u0217\u021f\u0220\u0220\u0220\u0227\u0227\u0227 \u01ee\u01ee\u01d8 [...]
+  "\u0229\u0222\u021a\u0211\u0211\u0173\u0173  \u0212\u0212\u022a\u021b\u021b\u0213\u0213\u0213\u0213  \u020c\u0205\u020c \u0127\u0127\u0128\u01bd\u01bd\u01be\u01ff\u01ff\u01ff\u01ff\u01ff\u022b\u0223 \u021c\u021c\u021c\u022c\u022d \u0214\u0214\u0207\u0207\u0207    \u0173\u01c1\u01c1\u01e9\u0226\u01d6\u0177\u01f7 \u0181\u0181     \u021d\u021d\u021e\u021e\u0215\u020d\u020d    \u0201\u0202 \u020f\u0217\u0217\u021f\u0220\u0220\u0220 \u022e   \u0227 \u01d7\u01ee\u01d8\u01d9        \u01ef \u0 [...]
+  " \u0229\u0229\u0222\u021a\u0211\u01c1\u0173\u0173  \u0230  \u021b\u021b\u0213\u0213\u0213\u0213  \u020c\u0127\u0127\u0128\u01bd\u01bd\u01bd\u01ff\u01ff\u01ff\u0231\u0232\u0232\u022b\u021c\u021c\u0224\u0224\u0225 \u022c\u022d \u0214\u0214\u0207   \u0173\u01c1\u01c1\u01e9\u01e9\u01d6\u0177\u01f7\u01f7\u0181\u0181        \u021d\u021e\u021e\u0215\u0215\u020d\u0197   \u0233\u0233\u0217\u0217\u021f\u0220\u0220\u0220   \u0234\u022e   \u0227 \u01ee\u01ee\u01d8\u01d9       \u01ef \u0228        [...]
+  "\u0235\u0235 \u0229\u0222\u021a\u021a \u01c1\u0173\u0230\u0230     \u021b\u021b\u0213\u0213\u0213\u0213\u0127\u0128\u01bd\u01bd\u01bd\u01ff\u01ff\u01ff \u0231 \u021c\u021c\u022b\u0223 \u0224\u0225\u0225\u022c\u022d\u0236    \u0173\u01c1\u01c1\u01e9\u01e9\u01d6\u01d6\u0177\u01f7\u0181\u0181          \u021d\u021d\u021e\u021e\u0215\u020d\u020d\u0237\u0238\u0239\u0239\u0239\u021f\u0220\u0220\u0220  \u023a  \u0234 \u022e \u023b\u023b\u0227 \u01d7\u01ee\u01d8\u01d9      \u01ef \u0228        [...]
+  " \u0235\u0235  \u0229\u0222\u021a\u021a\u0230\u0230\u0173\u0173\u0173     \u021b\u021b\u021b\u0213\u0213\u01bd\u01bd\u01bd\u01ff\u01ff\u01ff \u023c\u021c\u021c\u0232 \u022b \u0223\u0224 \u0225\u0236    \u0173\u01c1\u01c1\u01e9\u01e9\u01d6\u01d6\u01f7\u01f7\u0181\u0181            \u023d\u021d\u021e\u021e\u0215\u0237\u0237\u0237\u023e\u023f\u0240\u0241\u0220\u0220  \u023a\u023a   \u0234 \u0242\u022e\u023b \u0227\u0227 \u01ee\u01ee\u01d8\u01d9     \u01ef \u0228            \u01e2          [...]
+  "   \u0235\u0235  \u0229\u0222\u0230\u0230 \u01c1\u01c1\u0173\u0173     \u021b\u0127 \u0243\u0243\u01ff\u01ff\u01ff   \u023c\u0231 \u0232\u022b\u022b\u0223\u0236\u0224    \u0173\u0173\u01c1\u01e9\u01e9 \u01f7\u01f7\u01f7\u0181\u0181           \u023d\u023d\u023d \u021d\u0237\u0237\u0237\u0237\u023e\u023e\u023e\u0241\u0241\u0244  \u023a\u023a     \u0234 \u0245\u0242\u0242  \u0227  \u01d7\u01ee\u01d8\u01d9    \u01ef  \u0228           \u01e2                         ", 
+  "\u0246\u0246\u0246\u0246\u0246\u0235\u0235  \u0230\u0222\u021a\u021a\u021a\u01c1\u01c1\u0173\u0173\u0173  \u0247 \u0243\u0243\u0170\u01ff\u01ff    \u023c \u0231\u0232 \u022b\u0236    \u0173\u0173\u01c1\u01e9\u01e9\u01e9\u01f7\u01f7\u01f7\u0181\u0181           \u023d\u023d\u0248  \u0249\u0237\u0237\u0237\u023e\u023e\u023e\u024a\u024a\u024b\u0244 \u023a\u023a        \u0245  \u024c\u024c \u024d\u024e  \u01d7\u01ee\u01d8\u01d9   \u01ef   \u0228          \u01e2                         ", 
+  "       \u0235\u0235\u024f \u0229\u0229\u0222\u021a\u021a\u021a\u01c1\u0173\u0173\u0250\u0250\u0251\u0243\u0243\u01ff\u01ff      \u023c\u0231\u0236\u0232    \u0173\u0173\u01c1\u01e9\u01e9\u01e9\u01f7\u01f7 \u0181\u0181\u0181         \u0252\u0252\u0252\u0252\u0252\u0248\u0248\u0249  \u023e\u023e\u0253\u024a\u024a\u024b\u024b\u0254\u0255 \u023a         \u0234   \u0256\u024d  \u024e  \u01d7\u01ee\u01d8\u01d9  \u01ef\u01ef   \u0228         \u01e2                         ", 
+  "\u0257   \u0258\u0258\u0258 \u0259\u025a\u025a\u025a  \u0229\u0229\u0222\u0222\u021a\u0250\u0250\u0251\u0251\u025b\u025b\u025c\u01ff \u025d\u025d   \u023c\u0236    \u0173\u0173\u01c1\u01e9\u01e9\u01e9\u01f7\u01f7 \u0181\u0181\u0181     \u0252\u0252\u0252\u0252\u0252\u0252    \u025e\u0248\u0248 \u0222\u0222\u025f\u024a\u0260\u024b\u024b\u024b\u0254\u0254\u0255\u023a          \u0256\u0256\u0256\u0256\u0256\u024c   \u024e  \u01d7\u01ee\u01d8\u01d9  \u01ef   \u0228\u0228        \u01e2     [...]
+  "\u0257\u0257\u0258\u0258\u0258  \u0259\u0261   \u025a\u025a\u025a  \u0229\u0229\u0250\u0251\u0251\u025b\u025b\u025c\u025c   \u025d\u025d\u025d\u025d   \u0173\u0173\u0173\u01c1\u01e9\u01e9\u01e9\u01f7\u01f7 \u0181\u0181\u0181   \u0252\u0252\u0252\u0252          \u025e\u0222\u0222\u0222\u0262\u0263\u0264\u0260\u0260\u024b\u024b\u0215\u0254\u0254\u0255\u0265                \u024c  \u024e\u024e  \u01ee \u01d9\u01d9 \u01ef    \u0228\u0228       \u01e2                         ", 
+  " \u0266\u0257    \u0259\u0267      \u0268\u0269 \u0250\u0250\u0251\u025b\u025b\u025c\u025c\u0181\u01c1\u0173\u0173\u01c1\u0173\u0173\u0173\u0173\u01c1\u0173\u01c1\u01c1\u01e9\u01e9\u01f7\u01f7\u01f7 \u0181\u0181\u0181 \u0252\u0252\u0252\u0252           \u0222\u0222\u0222\u0222\u0262\u0262\u026a\u0263\u026b\u026c\u024b\u024b\u021e\u021e\u0215\u0254\u0255\u0255\u0265\u0265\u0265\u0265      \u026d\u026d\u026d\u026d\u026d  \u026e   \u024e\u024e \u01d7\u01d7 \u01d9\u01d9\u01ef\u01ef    \u0 [...]
+  "\u0266  \u0257\u0257  \u0261\u0261\u0267     \u026f \u0270\u0270\u0251\u025b\u025b\u025b\u025c\u0229\u0229\u0222\u0222\u0181\u0181\u0181     \u01e9\u01e9\u0271\u01f7\u01f7\u0181\u0181\u0181  \u0252\u0252\u0252          \u0222\u0222\u0222\u0222\u0262\u0262\u0262\u0262\u0272\u0272\u0263\u0273\u026c\u0274 \u021d\u021d\u021e\u0254\u0254\u0255\u020d\u020d\u0265   \u026d\u026d\u026d\u026d\u026d     \u026d\u026d\u026e\u026d\u026d\u026d \u024e\u024e \u01d7\u01ee \u01d9 \u01ef     \u0228     \ [...]
+  "\u0266   \u0257\u0257 \u0261 \u0267    \u026f \u0270\u0270\u0275\u0275\u025b\u025b\u025c\u025c    \u0229\u0229\u0222\u0181\u0181\u0181\u0181\u0181\u0181\u0181\u0181\u0181\u0181\u0276\u0276\u0276\u0252\u0252       \u0222\u0222\u0222\u0222\u0222\u0222\u0229\u0262\u0262\u0262  \u0272\u0277\u0263\u026b\u0278\u026c\u0279  \u027a\u021d\u021d\u0254\u0255\u0255\u027b\u020d\u027c \u026d\u026d\u026d \u027d\u027d\u027d\u027d\u027d\u027d\u027d\u027d\u027d \u026e  \u026d\u026d\u026d   \u01d7\u01d7 [...]
+  "     \u0257\u0257\u0261 \u0267   \u026f \u0270\u0270\u0275\u0275\u027f\u027f\u025c\u025c\u0280        \u0281\u0282\u0229\u0229\u0222\u0222\u0222\u0276\u0276\u0276\u0276\u0276\u0222\u0222\u0222\u0222\u0222\u0222\u0222\u0222\u0229\u0262\u0262\u0262\u0262\u0262\u0262   \u0283\u0283\u0272\u0277\u0277\u026b\u0278\u0279\u0284\u0274 \u027a  \u0254\u0254\u0255\u0215\u027c\u027c\u027c\u0285\u0286\u0287\u0288\u0288\u027d        \u027d\u027d\u027d\u027d   \u026d\u026d  \u01d7\u01ee\u01d8\u01d9\u [...]
+  "      \u0289\u0257 \u0267  \u026f  \u0270\u0275\u0275\u027f\u027f\u028a\u028a  \u0280     \u0281\u0281\u028b\u028b\u028b   \u028c\u0276\u0276\u0276\u0276\u0229\u0229\u0262\u0262\u0262\u0262\u0262\u0262\u0262\u0262       \u0283\u028d\u028e\u0272\u0277\u0263\u0273\u0278\u0279\u0284\u0274 \u027a   \u0254\u0255\u0255\u027c\u027c\u0285\u0285\u0286\u028f \u0288             \u027d\u027d\u027d   \u026d\u026d \u01d7\u01ee\u01d8\u01d9\u01ef     \u0228\u0228  \u01e2                 \u027e\u027e\ [...]
+  "     \u0289  \u0257\u0257 \u026f  \u0270\u0270\u0275\u027f\u027f\u027f\u028a   \u0280   \u0281\u0281\u028b\u028b    \u028c\u028c\u028c \u0262\u0262\u0262\u0262\u0262\u0262            \u0283\u028d\u028d\u028d\u028e\u0277\u026b\u026b\u0278\u0279\u0284\u0274\u027a\u027a    \u0254\u0255\u027c\u0285\u0285\u0286\u0286\u020d\u020d\u0291\u0292               \u027d\u027d\u027d   \u026d \u01ee\u01ee\u01d8\u01ef\u01ef     \u0228\u0228\u01e2\u01e2             \u027e\u027e\u027e\u027e\u027e\u027e\ [...]
+  "    \u0289\u0289   \u0257\u0257  \u0270\u0270\u0275\u027f\u027f\u027f\u028a     \u0280\u0281\u0281\u028b\u028b    \u028c\u0262\u0262\u0262\u0262\u0262                \u0283\u028d\u028d\u028d\u028e\u0277\u0277\u0263\u0273\u0278\u0279\u0284\u0274\u027a\u027a    \u0293\u0294\u027c\u0285\u0285\u0286\u021e\u0215\u027b\u020d\u0291\u0292                 \u027d\u027d   \u026d\u026d\u01d7\u01ee\u01d8\u01ef      \u0228\u0228          \u027e\u027e\u027e\u027e\u027e\u027e\u0290\u0290\u0290\u0290\ [...]
+  "   \u0289\u0289    \u0295\u0295\u0257\u0270\u0270\u0275\u0275\u027f\u027f\u028a\u028a     \u0296\u028b\u028b   \u028c\u028c\u0262\u0262\u0262                    \u028d\u028d\u028e\u028e\u0277\u0277\u0297\u026c\u0278\u0284\u0284 \u027a\u027a    \u0293\u0294\u0298\u0298\u0286\u0286\u021e\u021e\u021e\u0215\u020d\u020d\u0291\u0292\u0292\u0292\u0292               \u027d   \u026d\u026d\u01d7 \u01d8\u01ef      \u01e2      \u027e\u027e\u0299\u027e\u027e\u027e\u0290\u0290\u0290\u0290\u0290\u02 [...]
+  "   \u0289    \u0295\u0295 \u029a\u029a\u0275\u0275\u027f\u027f\u029b\u029b    \u0281\u0281\u028b\u0296  \u028c\u0262\u0262\u0262                      \u029c\u029d\u028e\u028e\u0277\u0277\u026b\u026c\u0278\u0284\u0284 \u027a\u027a     \u0293\u0298\u0298\u0286\u029e\u029f\u021d\u021e\u021e\u021e\u0215\u020d     \u0292\u0292\u0292\u0292\u0292\u0292\u0292         \u027d\u027d  \u026d\u01d7\u01d7\u01d8\u02a0\u01ef     \u01e2\u01e2  \u02a1\u02a1\u02a1\u02a1\u027e\u0290\u0290\u0290\u0290\u02 [...]
+  "  \u0289     \u0295\u0295 \u029a\u0275\u0275\u027f\u027f\u029b\u029b    \u0281\u0281\u028b \u02a2\u02a2\u0262\u0262                        \u029c\u029d\u028e \u0277\u0263\u0297\u026c\u0278\u0284\u0284 \u027a      \u0293\u0298\u0298\u02a3 \u029f\u029f\u021d\u021d\u021e\u021e\u0215\u0215\u020d       \u02a4  \u0292\u0292\u0292\u0292\u0292\u0292\u0292    \u027d\u027d   \u026d\u01d7\u01d8\u01ef\u01ef     \u02a5\u02a1\u02a1\u02a1\u02a6\u02a6\u02a6\u02a7\u02a7\u0290                 ", 
+  " \u0289       \u0295\u029a\u029a\u0275\u027f\u027f\u027f\u029b    \u0281\u0281\u028b \u02a8\u02a9\u02a9\u02a9                        \u029c\u029d\u028e \u0277\u0263\u026b\u026c\u0279\u0284\u0274\u027a\u027a      \u0293\u0298\u0298 \u02aa\u029f   \u021d\u02ab\u021e\u021e\u0215\u020d       \u02a4       \u02ac\u0292\u0292\u0292\u0292\u0292\u0292\u027d\u027d   \u01d7\u01ee\u01d8\u02a0  \u02a5\u02a5\u02a5\u02a5\u02a6\u02a6\u02a6\u02a6\u02a6\u02ad\u02ad                   ", 
+  "\u0289\u0289       \u029a\u029a\u0275\u0275\u027f\u027f\u029b    \u0281\u028b  \u02ae\u02ae \u02a9\u02af                       \u029d\u028e\u028e\u02af\u0277\u026b\u0273\u026c\u0279\u0284\u0274\u027a\u027a      \u0293\u0298  \u02aa\u02aa    \u021d\u021d\u021e\u021e\u0215\u0215\u020d      \u02a4       \u02ac       \u027d\u027d  \u026d\u02b0\u02b1\u02b2\u02b3\u02b3\u02b3\u02a5\u02a6\u02a6\u02a6     \u02ad\u02ad                  ", 
+  "\u0289       \u029a\u029a\u0275\u0275\u027f\u027f\u029b\u02b4   \u02b5\u02b6 \u02a8\u02ae\u02ae    \u02af                    \u029c\u029d\u028e\u028e\u0277\u0277\u0263\u026b\u0278\u0279\u0284\u0274\u027a\u027a     \u0293\u0293\u0298  \u02aa\u02aa\u029f     \u021d\u021d\u021e\u021e\u0215\u020d\u02b7     \u02a4       \u02ac        \u027d   \u026d\u02b3\u02b3\u02b8\u02b8\u02b8\u02b9        \u02ad\u02ad\u02ad\u02ad                ", 
+  "        \u029a\u0275\u0275\u027f\u027f\u029b\u02b4\u02b4  \u02b5\u02b6 \u02a8\u02a8      \u02ba\u02af                  \u029c\u029d\u028e\u028e\u0277\u0263\u026b\u0273\u0278\u0284\u0284\u0274\u027a\u027a     \u0293\u0293\u0298  \u02aa\u02aa \u029f     \u02ab\u021d\u021e\u021e\u0215\u0215\u02bb    \u02a4\u02a4      \u02ac          \u027d \u02b3\u02b3\u02b8\u02b8\u02b8\u02b8\u01d9\u02bc\u02bc         \u02ad\u02ad\u02ad\u02ad\u02ad             ", 
+  "       \u029a\u029a\u0275\u027f\u027f\u029b\u02b4\u02b4  \u02b5\u02b5 \u02ae\u02ae      \u02ba\u02ba \u02af                \u029c\u029d\u028e\u02af\u0277\u0277\u0297\u0273\u0278\u0284\u0284 \u027a      \u0293\u0293\u0298  \u02aa\u02aa \u029f       \u021d\u02bd\u021e\u021e\u0215\u02bb\u02b7   \u02a4       \u02ac           \u02be\u02b3\u02b8\u02b8\u02b8\u02b0\u02b2\u01d9\u01d9             \u02ad\u02ad\u02ad\u02ad\u02ad          ", 
+  "      \u029a\u029a\u0275\u027f\u027f\u027f\u029b\u02b4  \u02bf\u02c0 \u02a8\u02ae      \u02ba\u02ba   \u02af              \u029c\u029d\u028e\u02af\u0277\u0263\u026b\u026c\u0278\u0284\u0284\u027a\u027a      \u0293\u0298\u0298 \u02aa\u02aa  \u029f         \u02bd\u021e\u021e\u0215\u0215\u02b7   \u02a4       \u02ac         \u02be\u02be\u02be\u02c1\u02b8  \u026d\u02b0\u02b2\u01d9\u01d9     \u02c2\u02c3        \u02ad\u02ad\u02ad\u02ad\u02ad       ", 
+  "     \u029a\u029a\u0275\u027f\u027f\u027f\u029b\u02b4   \u02c0 \u02a8\u02ae      \u02ba\u02ba    \u02af\u02af            \u029c\u029d\u028e\u02af\u0277\u026b\u026b\u026c\u0279\u0284\u0274\u027a\u027a     \u0293\u0293\u0298  \u02aa\u02aa  \u029f\u029f         \u02bd\u02bd\u021e\u021e\u0215\u02bb   \u02a4       \u02ac        \u02be\u02be\u02c1\u02c1     \u02b0\u02b1\u02b2\u01d9\u01d9     \u02c3\u02c3          \u02ad\u02ad\u02ad\u02ad     ", 
+  "     \u029a\u0275\u0275\u027f\u027f\u029b\u02b4   \u02bf\u02c0\u02a8\u02ae      \u02ba       \u02af\u02af \u02c4\u02c4      \u029c\u029d\u028e\u028e\u0277\u0277\u0263\u0297\u0278\u0279\u0284\u0274\u027a\u027a     \u0293\u0293\u0298  \u02aa\u02aa   \u029f           \u02bd\u021e\u021e\u0215\u02bb   \u02a4       \u02ac      \u02be\u02be\u02be\u02c1\u02c1       \u02b0\u02b0\u02b2\u01d9\u01d9     \u02c3             \u02ad\u02ad\u02ad\u02ad  ", 
+  "    \u029a\u029a\u0275\u027f\u027f\u029b\u02b4\u02b4  \u02bf\u02c0\u02a8\u02ae      \u02ba         \u02af\u02c4\u02c4      \u029c\u029d\u028e\u028e\u0277\u0263\u026b\u0273\u0278\u0279\u0284\u0274\u027a\u027a     \u0293\u0298\u0298  \u02aa\u02aa    \u02c5\u02c5\u02c5\u02c5\u02c5        \u02bd\u021e\u021e\u0215   \u02a4       \u02ac     \u02be\u02be\u02be\u02c1\u02c1         \u026d\u02b1\u02b2\u01d9      \u02c3              \u02ad\u02ad\u02ad\u02ad", 
+  "\u02c6\u02c6 \u029a\u029a\u0275\u027f\u027f\u029b\u029b\u02b4  \u02bf\u02c0\u02a8\u02ae      \u02ba           \u02af      \u029c\u029d\u028e\u028e\u0277\u0277\u0263\u0273\u0278\u0279\u0284\u0274\u027a      \u0293\u0298   \u02aa    \u02c5\u02c5     \u02c5\u02c5      \u02bd\u021e\u021e\u0215\u02b7  \u02a4\u02a4\u02a4\u02a4\u02a4\u02a4\u02a4 \u02ac    \u02be\u02be\u02c7\u02c1\u02c8          \u026d\u02b0\u02b2\u02b2\u01d9      \u02c3                \u02ad", 
+  " \u02c6\u029a\u029a\u0275\u027f\u027f\u027f\u029b\u02b4   \u02c0 \u02ae     \u02ba\u02ba             \u02af\u02af   \u029c\u029d\u028e\u02af\u0277\u0263\u0297\u026c\u0278\u0284\u0284\u0274\u027a     \u0293\u0293\u0298   \u02aa\u02c9  \u02c5\u02c5\u02c5       \u02c5       \u02bd\u021e\u02bb\u02bb        \u02a4\u02a4\u02a4\u02a4\u02a4\u02be\u02be\u02be\u02c7\u02c7 \u02c8\u02c8          \u026d\u02b1\u02b1 \u01d9      \u02c3                ", 
+  " \u029a\u029a\u0275\u0275\u027f\u027f\u029b\u02b4   \u02bf\u02c0\u02ae\u02ae    \u02ba\u02ba               \u02af\u02af\u02af\u029c\u029d\u028e\u02af\u0277\u0263\u026b\u026c\u0279\u0284\u0284\u027a\u027a     \u0293\u0293   \u02ca\u02ca \u02cb\u02cb\u02c5\u02c5          \u02c5       \u02bd\u02bd\u02bb\u02cc           \u02cd\u02cd\u02be\u02c7\u02c7  \u02ce\u02c8\u02cf\u02cf         \u026d\u02b0\u02b2 \u01d9     \u02c3\u02c3               ", 
+  " \u029a\u029a\u0275\u027f\u027f\u029b\u02b4\u02b4  \u02c0\u02c0\u02a8\u02ae    \u02ba\u02ba                  \u029c\u028e\u028e\u02af\u0277\u0263\u0297\u026c\u0278\u0284\u0284\u027a\u027a     \u0293\u02d0   \u02ca  \u02cb               \u02c5      \u02c5\u02d1\u02d1\u02bb          \u02cd\u02cd\u02d2\u02d2 \u02ce\u02ce\u02ce  \u02c8 \u02cf         \u026d\u02b1\u02b2\u01d9\u01d9     \u02c3\u02c3              ", 
+  "\u029a\u029a\u0275\u027f\u027f\u029b\u029b\u02b4  \u02bf\u02c0\u02a8\u02ae    \u02ba\u02ba                  \u029d\u028e\u028e\u0277\u0277\u02d3\u026b\u026c\u0279\u0284\u0274\u027a\u027a    \u0293\u02d4\u02d0   \u02ca                    \u02c5\u02c5  \u02c5\u02c5\u02c5\u02bd\u02bd\u02bb\u02b7        \u02cd\u02cd\u02c7\u02c7\u02d5       \u02c8\u02cf\u02cf         \u02b0\u02b0\u02b2\u01d9\u01d9     \u02c3              ", 
+  "\u029a\u0275\u027f\u027f\u027f\u029b\u02b4   \u02c0\u02a8\u02ae    \u02ba\u02ba                  \u029d\u028e\u028e\u0277\u0277\u02d3\u0273\u0278\u0279\u0284\u0274\u027a\u027a    \u0293\u0293\u02d0 \u02d6\u02d6\u02ca                       \u02c5\u02c5\u02c5  \u02d7\u02bd\u02bd\u02bb       \u02cd\u02cd\u02c7\u02c7 \u02d5       \u02c8\u02c8\u02cf\u02cf         \u026d\u02b1\u02b2\u01d9      \u02c3             ", 
+  "\u0275\u027f\u027f\u027f\u029b\u02b4   \u02bf\u02c0\u02ae    \u02ba\u02ba                 \u02af\u029d\u028e\u028e\u0277\u0277\u02d3\u02d8\u02d9\u0279\u0284\u0274\u027a     \u0293\u02d0  \u02d6\u02d6\u02ca                              \u02d7\u02bd\u02bb\u02bb     \u02cd\u02cd\u02c7\u02c7  \u02d5        \u02c8\u02c8\u02cf          \u02b0\u02b2\u02b2\u01d9      \u02c3            ", 
+  "\u0275\u027f\u027f\u029b\u02b4\u02b4  \u02c0\u02c0\u02a8\u02ae   \u02ba                 \u02af\u02af\u029d\u029d\u028e\u02da\u0277\u02db\u02dc\u02d9\u02dd\u0284\u0274\u027a    \u0293\u0293\u02d0  \u02d6\u02d6 \u02ca                              \u02d7\u02bd\u02bd\u02bb\u02b7   \u02cd\u02cd\u02c7\u02c7   \u02d5         \u02c8 \u02cf          \u02b1\u02b2 \u01d9     \u02c3\u02c3           ", 
+  "\u027f\u027f\u029b\u02b4\u02b4  \u02bf\u02c0\u02ae\u02ae   \u02ba                \u02af\u02af \u029d\u028e\u028e\u02da\u0277\u02d8\u02dc\u02dd\u02de\u02df\u027a\u027a    \u0293\u0293\u02d0  \u02d6  \u02ca\u02ca                               \u02d7\u02bd\u02bd\u02bb\u02b7\u02b7\u02cd\u02cd\u02c7\u02c7    \u02d5          \u02c8 \u02cf         \u02b0\u02b0\u02b2\u01d9\u01d9     \u02c3\u02c3          ", 
+  "\u027f\u029b\u029b\u02b4  \u02bf\u02c0\u02a8\u02ae   \u02ba                \u02af  \u029d\u028e\u028e\u02da\u0277\u02d8\u02dc\u02dd\u02df\u02df\u027a\u027a   \u0293\u0293\u02d0   \u02d6   \u02ca                                \u02d7\u02d7\u02bd\u02bd\u02bb\u02bb\u02cd\u02cd\u02c7\u02c7\u02e0\u02e0\u02e1 \u02d5           \u02c8 \u02cf         \u02b0\u02b1\u02e2\u01d9\u01d9                ", 
+  "\u027f\u029b\u02b4   \u02bf\u02c0\u02ae  \u02ba\u02ba                 \u02af \u029d\u028e\u028e\u02da\u0277\u02dc\u02d9\u02dd\u02df \u027a\u027a  \u0293\u0293\u02d0   \u02d6\u02d6    \u02ca                                 \u02d7\u02d7\u02bd\u02cc\u02e3\u02cd\u02e4\u02c7   \u02e1\u02e1\u02e1\u02d5\u02d5\u02d5\u02d5\u02d5      \u02c8\u02c8\u02e5\u02cf         \u02b0\u02b1\u02b2\u01d9                ", 
+  "\u029b\u02b4   \u02c0\u02c0\u02a8  \u02ba\u02ba                  \u02af\u029d\u028e\u02da\u02da\u0277\u02d9\u02dc\u02df\u02df \u027a\u027a \u0293\u02e6\u0293    \u02d6\u02d6     \u02ca                        \u02e7         \u02d7\u02bd\u02bd\u02e3\u02cc\u02e4\u02c7           \u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02c8\u02c8\u02e5\u02cf         \u02e8\u02b1\u02e9\u01d9               ", 
+  "\u02b4\u02b4  \u02bf\u02c0\u02ae\u02ae \u02ba\u02ba                   \u02af\u02af\u02da\u02da\u0277 \u02d9\u02de\u02de \u027a\u027a \u0293\u02e6\u02d0    \u02d6\u02d6     \u02ca\u02ca                        \u02e7\u02e7         \u02d7\u02ea\u02ea\u02cc\u02eb\u02c7                  \u02d5\u02c8\u02e5\u02e5\u02cf         \u02b0\u02b2\u02e2\u01d9              ", 
+  "\u02b4  \u02bf\u02c0\u02a8\u02ae                        \u02da\u0277\u0277 \u02dd\u02de \u027a\u027a \u02e6\u02e6\u02d0     \u02d6\u02d6     \u02ca\u02ca                          \u02e7          \u02ec\u02ea\u02ea\u02ea\u02cc\u02cc\u02ed                 \u02ee\u02c8\u02e5\u02cf\u02cf        \u02b0\u02e8\u02e9\u02e9\u01d9             ", 
+  "   \u02bf\u02a8\u02ae                        \u02da\u0277\u0277 \u02dd\u02ef \u027a\u027a\u0293\u0293\u02d0      \u02d6      \u02ca\u02ca                            \u02e7        \u02ec\u02ec\u02f0\u02f1\u02f1\u02d7\u02ed\u02ed\u02ed\u02ed              \u02ee  \u02c8\u02e5\u02cf\u02cf  \u02f2\u02f2    \u02b0\u02e8\u02b2\u01d9\u01d9            ", 
+  "  \u02c0\u02c0\u02a8                        \u02da\u0277\u02f3\u02ef\u02dd  \u027a\u0293\u0293\u02d0      \u02d6\u02d6      \u02ca\u02ca                              \u02e7       \u02ec\u02ec\u02f1\u02f1\u02f4\u02f5\u02f5\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed          \u02ee   \u02c8\u02c8\u02e5\u02cf\u02cf\u02f2\u02f2      \u02e8\u02b1\u02e9\u01d9\u01d9           ", 
+  " \u02bf\u02c0\u02ae                       \u02da\u02da\u0277\u02f3\u02f6\u02ef\u027a\u027a\u0293\u0293\u0293       \u02d6\u02d6      \u02ca                                 \u02e7     \u02f7\u02ec\u02ec\u02f1  \u02f4\u02f5\u02f5\u02f5\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02f8\u02ed    \u02f9\u02e5\u02e5\u02f2\u02f2        \u02b0\u02b1\u02e2\u01d9\u01d9          ", 
+  "\u02bf\u02c0\u02a8\u02ae                      \u02da\u02da\u0277\u02f3\u02f6\u02fa\u02fb\u02fb\u0293\u0293\u02d0       \u02d6\u02d6     \u02ca\u02ca                                  \u02e7    \u02fc\u02f7\u02ec\u02f1\u02f1    \u02f4\u02f5\u02f5\u02f5\u02f5\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02f8\u02f8\u02ed\u02ed\u02ed\u02ed\u02ed\u02ed\u02f9\u02e5\u02e5\u02cf        \u02b0\u02b0\u02b2\u02e2\u01d9\u01d9         ", 
+  "\u02bf\u02ae\u02ae                      \u02da\u0277\u0277\u02f6\u02f6\u02fa\u02fb\u0293\u0293\u02d0        \u02d6\u02d6     \u02ca\u02ca                                   \u02e7   \u02f7\u02f7\u02f7\u02ec\u02f1      \u02f4\u02f4\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02f8\u02f5\u02f5\u02ed\u02ed\u02ed\u02ed\u02ed\u02f9\u02ed\u02e5\u02e5\u02cf        \u02b0\u02b0\u02b2\u02e2\u01d9         ", 
+  "\u02a8\u02ae                      \u02da\u0277 \u02f6\u02f6\u02fa\u02fb\u0293\u0293         \u02d6      \u02ca\u02ca                                        \u02fc  \u02f1\u02f1        \u02f4\u02f4\u02f4\u02f4\u02f5\u02f4\u02f4\u02f4\u02f4\u02f4\u02f8\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02f5\u02ed\u02ed\u02f9\u02ed\u02ed\u02e5\u02cf        \u02b0\u02b1\u02b2 \u01d9        ", 
+  "\u02ae                     \u02da\u02da\u0277  \u02fa\u02fa\u02fb\u0293\u02d0                \u02ca\u02ca                                                                       \u02f5\u02f5\u02f5\u02f9\u02ed\u02ed\u02ed\u02cf\u02cf        \u02b0\u02b1\u02b2 \u01d9       ", 
+  "\u02ae                    \u02da\u02da\u0277  \u02fa\u02fa\u02fb\u0293\u02d0                \u02ca                                                                            \u02f9\u02f5\u02ed\u02ed\u02ed\u02ed\u02cf        \u02b0\u02b2\u02b2\u01d9\u01d9      ", 
+  "                    \u02da\u0277\u0277  \u02fa\u02fa\u0293\u0293\u02d0               \u02ca\u02ca                                                                              \u02f5\u02f5\u02f5\u02ed\u02ed\u02ed\u02cf       \u02b0\u02b0\u02b2\u02b2\u01d9\u01d9     ", 
+  "                   \u02da\u02da\u0277  \u02fa\u02fa\u0293\u0293                \u02ca\u02ca                                                                                 \u02f5\u02f5\u02ed\u02ed\u02ed\u02cf       \u02b0\u02b1\u02b2\u02b2\u01d9     ", 
+  "                  \u02da\u02da\u0277  \u02fa\u02fb\u0293\u02d0                \u02ca\u02ca                                                                                   \u02f5\u02f5\u02ed\u02ed\u02ed\u02cf       \u02b0\u02b1\u02b2 \u01d9    ", 
+  "                  \u02da\u0277  \u02fa\u02fb\u0293\u02d0                \u02ca\u02ca                                                                                     \u02f5\u02f5\u02ed\u02ed\u02ed\u02cf       \u02b0\u02b1\u02b2 \u01d9   ", 
+  "                 \u02da  \u02fa\u02fa\u02fb\u0293\u02d0                                                                                                          \u02f5\u02ed\u02ed\u02ed\u02cf       \u02b0 \u02b2\u01d9\u01d9  ", 
+  "                   \u02fa\u02fa\u0293\u0293\u02d0                                                                                                            \u02f5\u02ed\u02ed\u02ed\u02cf      \u02b0\u02b1\u02b2\u02b2\u01d9  ", 
+  "                  \u02fa\u02fa\u0293\u0293\u02d0                                                                                                              \u02f5\u02ed\u02ed\u02ed\u02cf      \u02b0\u02b1\u02b2 \u01d9 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/road-casings-grouped-rendering-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/road-casings-grouped-rendering-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..47f94f0
--- /dev/null
+++ b/tests/visual_tests/grids/road-casings-grouped-rendering-600-600-2.0-grid-reference.json
@@ -0,0 +1,847 @@
+{
+ "keys": [
+  "", 
+  "330", 
+  "155", 
+  "74", 
+  "57", 
+  "788", 
+  "774", 
+  "201", 
+  "202", 
+  "181", 
+  "228", 
+  "691", 
+  "523", 
+  "73", 
+  "749", 
+  "530", 
+  "385", 
+  "384", 
+  "286", 
+  "1", 
+  "156", 
+  "531", 
+  "361", 
+  "45", 
+  "43", 
+  "93", 
+  "46", 
+  "527", 
+  "589", 
+  "288", 
+  "215", 
+  "605", 
+  "138", 
+  "532", 
+  "588", 
+  "154", 
+  "362", 
+  "348", 
+  "328", 
+  "639", 
+  "635", 
+  "637", 
+  "638", 
+  "529", 
+  "497", 
+  "576", 
+  "300", 
+  "329", 
+  "237", 
+  "636", 
+  "600", 
+  "103", 
+  "534", 
+  "595", 
+  "137", 
+  "232", 
+  "593", 
+  "136", 
+  "104", 
+  "14", 
+  "180", 
+  "526", 
+  "592", 
+  "594", 
+  "323", 
+  "490", 
+  "327", 
+  "203", 
+  "256", 
+  "258", 
+  "528", 
+  "415", 
+  "442", 
+  "342", 
+  "596", 
+  "157", 
+  "343", 
+  "331", 
+  "257", 
+  "89", 
+  "598", 
+  "599", 
+  "367", 
+  "344", 
+  "335", 
+  "277", 
+  "597", 
+  "276", 
+  "275", 
+  "107", 
+  "126", 
+  "113", 
+  "369", 
+  "108", 
+  "590", 
+  "407", 
+  "414", 
+  "147", 
+  "99", 
+  "97", 
+  "124", 
+  "122", 
+  "110", 
+  "472", 
+  "591", 
+  "153", 
+  "100", 
+  "102", 
+  "173", 
+  "174", 
+  "481", 
+  "336", 
+  "406", 
+  "75", 
+  "159", 
+  "96", 
+  "72", 
+  "200", 
+  "266", 
+  "265", 
+  "263", 
+  "269", 
+  "231", 
+  "419", 
+  "179", 
+  "182", 
+  "525", 
+  "371", 
+  "370", 
+  "391", 
+  "313", 
+  "390", 
+  "183", 
+  "417", 
+  "411", 
+  "392", 
+  "315", 
+  "473", 
+  "479", 
+  "446", 
+  "146", 
+  "475", 
+  "474", 
+  "401", 
+  "421", 
+  "445", 
+  "483", 
+  "551", 
+  "480", 
+  "356", 
+  "476", 
+  "583", 
+  "324", 
+  "389", 
+  "839", 
+  "462", 
+  "655", 
+  "325", 
+  "393", 
+  "724", 
+  "440", 
+  "267", 
+  "227", 
+  "620", 
+  "477", 
+  "582", 
+  "268", 
+  "535", 
+  "464", 
+  "299", 
+  "16", 
+  "271", 
+  "259", 
+  "225", 
+  "247", 
+  "463", 
+  "693", 
+  "270", 
+  "548", 
+  "467", 
+  "465", 
+  "422", 
+  "418", 
+  "261", 
+  "489", 
+  "633", 
+  "466", 
+  "238", 
+  "244", 
+  "246", 
+  "482", 
+  "634", 
+  "671", 
+  "333", 
+  "326", 
+  "239", 
+  "248", 
+  "488", 
+  "448", 
+  "245", 
+  "484", 
+  "460", 
+  "332", 
+  "378", 
+  "25", 
+  "577", 
+  "461", 
+  "471", 
+  "381", 
+  "188", 
+  "565", 
+  "470", 
+  "469", 
+  "334", 
+  "379", 
+  "355", 
+  "284", 
+  "279", 
+  "175", 
+  "668", 
+  "550", 
+  "562", 
+  "373", 
+  "665", 
+  "354", 
+  "632", 
+  "485", 
+  "570", 
+  "575", 
+  "673", 
+  "131", 
+  "404", 
+  "587", 
+  "585", 
+  "549", 
+  "663", 
+  "41", 
+  "285", 
+  "739", 
+  "478", 
+  "40", 
+  "262", 
+  "690", 
+  "78", 
+  "145", 
+  "358", 
+  "226", 
+  "260", 
+  "283", 
+  "687", 
+  "486", 
+  "133", 
+  "672", 
+  "95", 
+  "121", 
+  "322", 
+  "195", 
+  "264", 
+  "177", 
+  "396", 
+  "321", 
+  "359", 
+  "15", 
+  "402", 
+  "55", 
+  "686", 
+  "619", 
+  "641", 
+  "615", 
+  "397", 
+  "59", 
+  "236", 
+  "282", 
+  "204", 
+  "786", 
+  "618", 
+  "614", 
+  "376", 
+  "58", 
+  "773", 
+  "212", 
+  "692", 
+  "584", 
+  "400", 
+  "56", 
+  "199", 
+  "375", 
+  "374", 
+  "31", 
+  "405", 
+  "640", 
+  "579", 
+  "670", 
+  "319", 
+  "357", 
+  "505", 
+  "743", 
+  "493", 
+  "50", 
+  "92", 
+  "38", 
+  "784", 
+  "847", 
+  "320", 
+  "841", 
+  "213", 
+  "568", 
+  "741", 
+  "492", 
+  "39", 
+  "840", 
+  "254", 
+  "747", 
+  "827", 
+  "607", 
+  "53", 
+  "398", 
+  "439", 
+  "753", 
+  "224", 
+  "158", 
+  "438", 
+  "214", 
+  "835", 
+  "223", 
+  "626", 
+  "5", 
+  "54", 
+  "61", 
+  "119", 
+  "838", 
+  "302", 
+  "62", 
+  "52", 
+  "22", 
+  "165", 
+  "494", 
+  "13", 
+  "769", 
+  "622", 
+  "491", 
+  "301", 
+  "423", 
+  "118", 
+  "252", 
+  "222", 
+  "631", 
+  "317", 
+  "318", 
+  "495", 
+  "36", 
+  "304", 
+  "697", 
+  "630", 
+  "123", 
+  "760", 
+  "621", 
+  "674", 
+  "2", 
+  "253", 
+  "255", 
+  "846", 
+  "77", 
+  "453", 
+  "3", 
+  "710", 
+  "771", 
+  "708", 
+  "628", 
+  "291", 
+  "383", 
+  "308", 
+  "830", 
+  "726", 
+  "617", 
+  "625", 
+  "564", 
+  "581", 
+  "295", 
+  "292", 
+  "365", 
+  "722", 
+  "845", 
+  "624", 
+  "656", 
+  "666", 
+  "42", 
+  "294", 
+  "732", 
+  "694", 
+  "623", 
+  "627", 
+  "606", 
+  "580", 
+  "456", 
+  "47", 
+  "716", 
+  "507", 
+  "629", 
+  "654", 
+  "653", 
+  "293", 
+  "23", 
+  "613", 
+  "65", 
+  "48", 
+  "144", 
+  "459", 
+  "836", 
+  "780", 
+  "184", 
+  "457", 
+  "125", 
+  "844", 
+  "139", 
+  "616", 
+  "679", 
+  "681", 
+  "682", 
+  "458", 
+  "29", 
+  "833", 
+  "834", 
+  "831", 
+  "719", 
+  "825", 
+  "842", 
+  "166", 
+  "511", 
+  "26", 
+  "27", 
+  "30", 
+  "772", 
+  "219", 
+  "220", 
+  "610", 
+  "675", 
+  "17", 
+  "518", 
+  "509", 
+  "63", 
+  "770", 
+  "768", 
+  "689", 
+  "221", 
+  "506", 
+  "677", 
+  "35", 
+  "37", 
+  "120", 
+  "766", 
+  "738", 
+  "680", 
+  "678", 
+  "730", 
+  "740", 
+  "676", 
+  "443", 
+  "714", 
+  "745", 
+  "832", 
+  "755", 
+  "11", 
+  "444", 
+  "703", 
+  "717", 
+  "826", 
+  "501", 
+  "142", 
+  "642", 
+  "117", 
+  "713", 
+  "130", 
+  "742", 
+  "767", 
+  "503", 
+  "20", 
+  "18", 
+  "731", 
+  "808", 
+  "185", 
+  "170", 
+  "727", 
+  "90", 
+  "521", 
+  "569", 
+  "70", 
+  "191", 
+  "234", 
+  "515", 
+  "513", 
+  "522", 
+  "701", 
+  "311", 
+  "545", 
+  "684", 
+  "556", 
+  "517", 
+  "516", 
+  "514", 
+  "733", 
+  "211", 
+  "141", 
+  "519", 
+  "699", 
+  "350", 
+  "310", 
+  "210", 
+  "64", 
+  "520", 
+  "303", 
+  "725", 
+  "729", 
+  "524", 
+  "450", 
+  "744", 
+  "822", 
+  "349", 
+  "192", 
+  "135", 
+  "746", 
+  "815", 
+  "813", 
+  "820", 
+  "189", 
+  "190", 
+  "546", 
+  "643", 
+  "24", 
+  "33", 
+  "34", 
+  "510", 
+  "705", 
+  "721", 
+  "712", 
+  "193", 
+  "553", 
+  "538", 
+  "555", 
+  "817", 
+  "707", 
+  "559", 
+  "539", 
+  "795", 
+  "818", 
+  "351", 
+  "603", 
+  "604", 
+  "76", 
+  "750", 
+  "794", 
+  "683", 
+  "206", 
+  "544", 
+  "706", 
+  "819", 
+  "779", 
+  "783", 
+  "787", 
+  "789", 
+  "711", 
+  "32", 
+  "807", 
+  "805", 
+  "793", 
+  "297", 
+  "852", 
+  "235", 
+  "105", 
+  "44", 
+  "542", 
+  "759", 
+  "791", 
+  "290", 
+  "347", 
+  "289", 
+  "160", 
+  "536", 
+  "51", 
+  "757", 
+  "728", 
+  "811", 
+  "781", 
+  "785", 
+  "169", 
+  "810", 
+  "778", 
+  "541", 
+  "504", 
+  "98", 
+  "709", 
+  "148", 
+  "134", 
+  "748", 
+  "809", 
+  "704", 
+  "426", 
+  "163", 
+  "149", 
+  "4", 
+  "752", 
+  "346", 
+  "341", 
+  "305", 
+  "167", 
+  "162", 
+  "754", 
+  "12", 
+  "109", 
+  "67", 
+  "828", 
+  "540", 
+  "340", 
+  "10", 
+  "168", 
+  "824", 
+  "112", 
+  "554", 
+  "763", 
+  "68", 
+  "756", 
+  "428", 
+  "106", 
+  "229", 
+  "829", 
+  "496", 
+  "128", 
+  "127", 
+  "161", 
+  "249", 
+  "761", 
+  "782", 
+  "176", 
+  "132", 
+  "688", 
+  "561", 
+  "537", 
+  "306", 
+  "19", 
+  "432", 
+  "307", 
+  "309", 
+  "111", 
+  "171", 
+  "129", 
+  "164", 
+  "250", 
+  "178", 
+  "695", 
+  "21", 
+  "116", 
+  "804", 
+  "775", 
+  "197", 
+  "360", 
+  "803", 
+  "802", 
+  "800", 
+  "806", 
+  "801", 
+  "799", 
+  "798", 
+  "797", 
+  "217", 
+  "216", 
+  "718", 
+  "150", 
+  "843", 
+  "720", 
+  "790", 
+  "338", 
+  "152", 
+  "69", 
+  "151", 
+  "7", 
+  "86", 
+  "8", 
+  "207", 
+  "218", 
+  "796", 
+  "451", 
+  "88", 
+  "6", 
+  "172", 
+  "777", 
+  "558", 
+  "452", 
+  "209", 
+  "208", 
+  "776"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                      !!                   ##$$        %%%%&&'     ((              ))))     *** +                     ", 
+  "                                                       !!                  ##$$        %%%,&&      ((            ))))     **** ++                     ", 
+  "   -                          .                        !!                 ###$$       %%%/,''     ((           ))))     ****  ++                      ", 
+  "  --                         ...                       !!                 ###$$       %%//&'      ((          ))))    ****   +++                      ", 
+  "  --            00           ...                        !!                ###$$1   22%%%/&&'     ((         )))33    ***    +++                       ", 
+  "  --           00            ....                       !!                ###$$1  222%%%,&&44    ((        )))33   ****     ++                        ", 
+  "  --           00            5....                      !!                ###$$1 222%%%/,'4444  ((       ))))33  ****     +++                         ", 
+  "  --           00           655....                      !!  7777777     8##$$112229%%//&'4444  ((      ))) 333****     ++++                          ", 
+  "  --          00            65555....                    !!  7777777     ###$$112229%%/&&'4444  (      )))  33***     ++++                            ", 
+  "  --          00           66 5555...:.                  !!  77          ##;$$12229%%%,&&4444   (     ))   33**     ++++                              ", 
+  "  <<          00          66=  5555.:::.                 !!  77         ###$$$12229%%%,&'4444  ((    ))>>*33*   ++++++                 ?              ", 
+  "  <<<<<<   @  0          66===  5555::....               !!  77         ###A$$1229%%//,''444    (   )) >>333++++++++                  ????            ", 
+  " --  <<<<<<@ BBB        666 ==C CC555D......             !!  77 EEEEF  ###AAAG1299%%/&&'4444    (  )))*>*33+++                      ??? ????          ", 
+  " --HHIJJK<<LLLBBBBBB    66 CCCCCCCC55DDD.....            !!   EEEEEEFFF###AAAG229%%%/&&'4444    (( )) **33+                        ???    ??          ", 
+  " --HHHHHHHMM     BBBBBBB6  CC CC NNNDDDDD .....          !!   O    OOFF##AAAP9999%%%,&'4444     (()) *QQQ3                       ????                 ", 
+  " --HRJJHHHMM         BBB  CC CC  SSSS DDDDD......        !!   OO   OO T##AAAP999%%%%,&'4444     ()))QQQQ+                ??????????                   ", 
+  "U-HHRJJKHHMM             CC CCC NVVSSSSDDDDD .....       !!   OO   OO TTWWPP9999%%/%&''444       ))QQQ ++              ?????XX  ?                     ", 
+  "UUHHHHHKHMM             CCCCCC  YYVVVSSSSDDDDD ....Z     !!   OO   OOTTT[[PP]]]]%%/&&'4444      ))QQ^^++              ???   XX                        ", 
+  "___IHHHHHMM             CCCCC  N`YYYVVVSSSaDDDDD..ZZ..   !!   OOOOOO TT[[[P ]]]%%%,&'4444      bbQQ ^^++             ???     XX                       ", 
+  "-_____KHHM               CCC cNN```YYYVVV aaDDDDDZZZ....  !    OOOO  T[[[dd ]]]%%%,&'4444    bbbeQQ ^++             f??       XXggg                   ", 
+  "-  _____hM                   cciii````YYY aa DDDDDDZ.....!!jj       TT[[[kkkk]%%%/,&'4444   bbbeeQQ ^++             f??        gggg                   ", 
+  "       _hh                  cc   iiii``` aa lllDDDDDDD..mm.jjjj     TT[[nnook]%%//&'4444  bbb  eeQ  ^++              ??        ppgg                qqq", 
+  "       hh               c  cc      iiii`iaa rrllssDDDDDmmm...jjjjjjtT[[[uuuok]%%/&&'444v bbb   eeQ  ^+www++++++      ??        XXgpqqqqqqqqqqqqqqqqqqq", 
+  "       hh              cccccc         iiiaixxrrsslllDDDmmm.....jjjjTT[[[uuuuu%%%%&&4444vvb     eeQyyyywwwwwwwz+{+qqqqqqqqqqqqqq||qqqq}}}}}}}}}}}}}}}}}", 
+  "       hh             ccc c              aiixxxssrrlllDmmDDD.......TT[[~nnnnn%%%,,'4444bv    \u007f\u007f\u007fe\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f{{{}}}}}}}}}}}}}}|||}}}}}}}}}}}}}}}}}}}}", 
+  "      hh             ccc                  iiiixsxrrrr\u0080\u0081\u0082DDDDD\u0083\u0083\u0083\u0083..T[[[\u0084\u0084\u0084\u0084\u0084\u0084\u0085\u0085\u0085\u0085\u0085\u0085\u0085\u0085\u0085\u0086\u0086\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0088\u0088\u0088}}}}}}}}}}}}}}||}}}}}}}}}}}}}        ", 
+  "      hh             cc       \u0089              iisxxxrr\u008a\u0082\u0082\u0081\u0081\u0081D\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u008b\u008b\u008c\u0084\u0084\u0084\u0084\u008c\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u0086\u0086\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0088\u0088\u0088}}}}}\u008e}}}}     \u008f\u008f                    ", 
+  "      h             cc        \u0089\u0090\u0089\u0089             iiiixx\u0091\u0082\u0082\u0092\u0081\u0081\u0081 \u0093\u0093\u0083\u0094\u0094\u0083\u0083\u008b\u008b\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u0095\u0095\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0098\u0099\u009a\u009a\u009b\u009b\u009c\u009c\u009c\u009c\u009c\u009c++       \u008e\u008e         \u008f                    ", 
+  "     hh            cc        \u0089\u0089\u0090\u0089\u0089\u0089\u0089             ii  \u0091\u0082\u0091\u0092\u0092i\u009diii\u0093\u0094\u0094\u0094\u008b\u008b\u008b\u008c\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u009e\u009e       \u0097\u0097\u0098\u0099\u009f\u009f\u009b\u009b\u009b\u009c+++++        \u008e\u008e         \u008f\u008f                   ", 
+  "\u00a0    hh           ccc       \u0089\u0089\u0089\u0090  \u0089\u0089\u0089            iiiiiiiiii\u009diiii\u00a1\u0094\u0094\u008b\u008b\u008b\u00a2\u00a3\u00a4\u00a5\u00a5%%%%,,4444 \u009e\u009e       \u0097\u0097\u0098\u00a6\u009f\u009f\u009f+                \u008e\u008e        \u008f\u008f                   ", 
+  "\u00a0\u00a0\u00a0\u00a0hh           ccc       \u0089\u0089\u0089\u0090\u0090                  iii      \u00a7\u00a7   \u00a8\u0094\u0094\u0094\u008b\u00a9\u00a3\u00a4\u00aa\u00a5\u00a5%%%/&&'444 \u009e\u009e       \u0097\u0097\u0098\u0098\u009f  +                \u008e\u008e         \u008f\u008f                  ", 
+  " \u00a0\u00a0\u00a0hh           cc        \u0089\u0089 \u0090\u0090        \u00ab\u00ac\u00ab\u00ab               \u00a7\u00a7   \u00ad\u00ae\u0094\u008b\u008b\u00a9\u00a3\u00a4\u00aa\u00a5%%%%/&&'444  \u009e        \u0097\u0098\u0098\u009f\u009f ++                \u008e\u008e        \u008f\u008f                  ", 
+  "    h\u00a0\u00a0\u00a0\u00a0       cc        \u0089\u0089  \u0090\u0090 \u00af\u00af\u00b0\u00b0   \u00ac\u00ac\u00ab\u00ab\u00ab\u00ab      \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b2\u00b2   \u00b3\u00ae\u008b\u008b\u008b\u00a9\u00a3\u00a4\u00aa\u00a5%%%%/&&'444  \u009e\u009e       \u0097\u0097\u0098\u00a6\u009f ++                \u008e\u008e         \u008f                  ", 
+  "\u00b4\u00b4    \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0   cc        \u0089\u00b5\u0089 \u0090\u0090  \u00af\u00af\u00b0\u00b0\u00b0\u00b0 \u00b6\u00b6  \u00ab\u00ab\u00ab\u00ab   \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b2\u00b2  \u00b3\u00b3\u00ae\u008b\u008b\u00a9\u00a3\u00a3\u00aa\u00aa\u00a5%%%%/,&444\u00b7  \u009e\u009e       \u0097\u0097\u0098\u00a6\u00a6\u009f++                 \u008e\u008e        \u008f\u008f                 ", 
+  "\u00b4\u00b4\u00b4      \u00a0\u00a0\u00a0\u00a0 ccc       \u0089\u0089\u00b5\u00b5 \u0090\u0090\u0090\u0090\u00b8   \u00b0\u00b9\u00b9\u00b6\u00b6\u00ac\u00ac\u00ac \u00ab\u00ab   \u00b1\u00b1     \u00ba\u00b1   \u00b3\u00ae\u00ae\u008b\u008b\u00bb\u00a3\u00a3\u00aa\u00aa\u00a5%%%%\u00bc,&444\u00b7  \u009e\u009e       \u0097\u0097\u0098\u0098\u00a6\u00a6\u009f++                \u008e\u008e        \u008f\u008f                 ", 
+  " \u00b4\u00b4\u00b4\u00b4      \u00a0 ccc        \u0089\u00b5\u00b5  \u00bd\u00bd\u0090\u0090\u0090\u00b8\u00b8   \u00b9\u00be\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ab   \u00bf\u00bf     \u00ba\u00ba   \u00b3\u00ae\u008b\u008b\u008b\u00bb\u00bb\u00a3\u00c0\u00c0\u00a5%%%/\u00bc\u00c1'444\u00c2   \u009e        \u0097\u0097\u0098\u0098\u00c3\u00c4++                 \u008e\u008e        \u008f\u008f                ", 
+  "   \u00b4\u00c5\u00c5\u00c5\u00c5 cccccc        \u0089\u0089\u00b5\u00b5\u00bd\u00bd\u00bd\u00bd\u00bd\u00af\u00bd\u00b8\u00c6\u00c6\u00b8\u00c7\u00c7     \u00ac\u00ac\u00ac   \u00bf\u00bf     \u00ba\u00ba   \u00b3\u00ae\u008b\u008b\u008b \u00a3\u00a3\u00c0\u00a5%%%%\u00bc\u00bc&&444\u00c2   \u009e\u009e       \u0097\u0097\u00c8\u00c8\u00c3\u00c3 ++                \u008e\u008e        \u008f\u008f                ", 
+  "    \u00b4\u00b4\u00c5\u00c5\u00c5\u00c5cccc        \u0089\u0089\u00bd\u00bd\u00b5\u00b5\u00c9\u00c9\u00c9\u00ca\u00ca\u00bd\u00c6\u00c6\u00b8\u00b8\u00c7\u00c7      \u00ab    \u00bf      \u00ba\u00ba  \u00cb\u00b3\u00ae\u008b\u008b  \u00a4\u00c0\u00c0\u00aa\u00cc%%%\u00bc\u00bc&'444\u00c2\u00b7  \u009e\u009e       \u0097\u0097\u00cd\u00c8\u00ce\u00cf\u00cf+++               \u00d0\u008e\u008e        \u008f                ", 
+  "     \u00b4\u00b4\u00b4\u00c5\u00c5\u00c5           \u0089\u0089\u00bd \u00b5\u00b5\u00c9\u00c9\u00c9\u00c9\u00c9\u00c9\u00c9\u00d1\u00bd\u00c7\u00c7      \u00ab\u00ab   \u00bf\u00bf      \u00ba   \u00b3\u00ae\u00ae\u008b\u008b  \u00a4\u00c0\u00c0\u00aa\u00cc%%%\u00bc\u00d2&4444\u00c2\u00b7  \u009e\u009e        \u0097\u0097\u00d3\u00d3 \u00cf\u00cf+++            \u00d0\u00d0\u00d0\u008e\u008e        \u008f\u008f               ", 
+  "       \u00b4\u00b4\u00b4\u00c5\u00c5\u00c5        \u00d4\u00d4\u00d4\u00d4\u00c9\u00c9\u00b5   \u00d5\u00c9\u00c9\u00c9\u00c9\u00c9\u00d6\u00d6\u00bd\u00bd    \u00ab\u00ab   \u00bf\u00bf    \u00d7\u00d7\u00d8   \u00b3\u00ae\u008b\u008b\u008b  \u00a4\u00c0\u00aa\u00cc\u00cc%%%\u00bc\u00d2&4444\u00b7\u00b7   \u009e\u009e       \u0097\u0097\u00d9\u00d3\u00d3\u00cf\u00cf\u00cf+++           \u00d0\u00d0  \u008e\u008e       \u008f\u008f               ", 
+  "        \u00b4\u00b4\u00b4\u00c5\u00c5\u00da      \u0089\u0089\u00d4\u00db\u00d4\u00d4\u00c9 \u00dc\u00dc\u00dc\u00d5\u00dc\u00dc \u00c9\u00c9\u00c9 \u00bd\u00bd\u00bd   \u00ab\u00ab   \u00bf\u00bf     \u00d7\u00d8   \u00b3\u00ae\u008b\u008b\u008b \u00a4\u00a4\u00c0\u00aa\u00cc%%%%\u00bc\u00bc&'444\u00b7\u00b7   \u009e\u009e        \u0097\u0097\u00d9\u00d3\u00d9\u00d9\u00cf\u00cf+++         \u00dd\u00de\u00df\u00df \u008e\u008e        \u008f\u008f              ", 
+  "         \u00b4\u00b4 \u00da\u00da\u00da    \u00e0\u00e0\u0089\u00bd\u00e1\u00e1\u00e1 \u00dc\u00dc\u00dc  \u00dc\u00dc\u00dc\u00e2\u00e2\u00c9\u00c9 \u00bd\u00bd\u00bd  \u00ab\u00ab   \u00e3\u00e3\u00e3\u00e3   \u00e4\u00e4   \u00b3\u00ae\u008b\u008b  \u00a4\u00c0\u00c0\u00aa\u00cc%%%%\u00bc\u00bc&'444 \u00b7\u00b7  \u009e\u009e         \u0097\u0097 \u00d9\u00d9\u00d9\u00d9\u00d9\u00d9+\u00d9        \u00dd\u00e5\u00df\u00df \u00e6\u008e        \u008f\u008f              ", 
+  "        \u00b4\u00b4   \u00da\u00da\u00e7\u00e7 \u00e0\u00e0\u00e0\u0089\u00bd\u00db\u00db\u00c9 \u00dc\u00dc     \u00dc\u00e2\u00e2 \u00c9\u00c9 \u00bd\u00bd \u00ab\u00ab   \u00bf\u00e8\u00e8\u00e3\u00e3\u00e3  \u00e4\u00e4   \u00ae\u00ae\u008b\u008b  \u00a4\u00c0\u00c0\u00aa\u00cc%%%%\u00bc\u00bc&'444 \u00b7\u00b7  \u009e\u009e         \u0097\u0097    \u00d9\u00d9\u00d9\u00d9\u00d9\u00d9        \u00dd\u00e9\u00e6\u00e6\u00e6\u008e\u008e        \u008f              ", 
+  "       \u00b4\u00b4      \u00e7\u00e7\u00e7\u00ea\u00ea\u00ea\u0089\u00bd\u00db\u00db\u00c9 \u00dc\u00dc      \u00dc\u00dc\u00dc\u00c9\u00c9\u00eb\u00eb\u00bd \u00ab\u00ab   \u00ec\u00ec\u00e8\u00e8\u00e8\u00e3\u00e3 \u00e4  \u00ed\u00ed\u00ed\u008b\u008b\u008b  \u00a4\u00c0\u00aa\u00cc\u00cc%%%%\u00bc\u00d2&4\u00ee\u00ee4 \u00b7\u00b7   \u009e\u009e         \u0097\u0097    \u00cf\u00cf ++        \u00dd\u00dd\u00e6\u00e6 \u008e\u008e        \u008f\u008f             ", 
+  "       \u00b4\u00b4      \u00ef\u00ef\u00e0\u00ea\u00ea\u00ea\u00ea\u0089\u00bd\u00f0\u00c9\u00c9\u00f1\u00f1\u00dc      \u00dc\u00dc \u00c9\u00c9\u00eb\u00bd\u00ab\u00ab     \u00ec\u00ec\u00ec\u00e8\u00e8\u00e3\u00e4\u00e4  \u00f2\u00ed\u00ed\u00ed\u00ed\u00ed \u00a4\u00a4\u00c0\u00aa\u00cc\u00cc%%%%\u00bc\u00d2&\u00ee\u00ee\u00ee4 \u00b7\u00b7   \u009e\u009e          \u0097\u0097    \u00cf\u00cf ++             \u008e\u008e       \u00f3\u00f3             ", 
+  "              \u00ef\u00ef\u00ef\u00ef\u00e0 \u00ea\u00ea\u0089\u00bd\u00bd\u00c9\u00c9\u00f1\u00f1\u00dc\u00dc\u00dc    \u00dc\u00dc \u00c9\u00c9 \u00bd\u00ab\u00ab       \u00ec\u00e8\u00e8\u00e3\u00e4\u00e4  \u00f2\u00b3\u00ae\u008b\u00ed\u00ed \u00a4\u00c0\u00c0\u00aa\u00cc\u00cc%%%%/\u00c1\u00ee\u00ee\u00ee\u00ee\u00ee  \u00b7\u00b7  \u009e\u009e           \u0097\u0097   \u00cf\u00cf ++             \u008e\u008e      \u00f3\u00f3\u00f3             ", 
+  "              \u00ef\u00ef \u00e0\u00e0\u00e0\u00ea\u00ea\u0089\u00bd\u00bd \u00c9\u00c9\u00f4 \u00dc\u00f5\u00dc\u00dc\u00f6\u00f6\u00dc\u00dc \u00c9\u00c9 \u00bd\u00ab          \u00ec\u00ec\u00ec\u00e4   \u00ae\u00ae\u008b\u00ed\u00ed \u00a4\u00c0\u00c0\u00aa\u00cc\u00cc%%% /\u00c1\u00ee\u00ee\u00ee\u00ee\u00ee  \u00b7\u00b7   \u009e            \u0097\u0097   \u00cf\u00cf +              \u008e\u008e    \u00f3\u00f3\u00f3              ", 
+  "             \u00ef\u00ef   \u00e0\u00ea\u00ea\u0089\u0089 \u00bd\u00bd \u00f4\u00f4\u00c9\u00f5\u00f5\u00dc\u00dc\u00f6\u00f6\u00dc \u00c9\u00c9 \u00bd\u00ab\u00ab           \u00f7\u00f7    \u00ae\u008b\u008b\u008b\u00f8 \u00a4\u00c0\u00c0\u00aa\u00cc\u00cc%%% /\u00c1\u00ee\u00ee\u00ee\u00ee\u00f9  \u00b7\u00b7   \u009e\u009e           \u0097\u0097\u00fa\u00fa\u00fa\u00fb\u00fb ++             \u008e\u008e   \u00f3\u00f3\u00f3          \u00fc\u00fc\u00fc\u00fc\u00fc", 
+  "            \u00ef\u00ef      \u00e0\u00e0\u0089  \u00bd\u00fd\u00fd \u00c9\u00c9\u00c9\u00c9\u00c9\u00f6\u00f6\u00c9\u00fe\u00fe\u00c9 \u00bd\u00ab    \u00ff\u00ff\u0100    \u00f7\u00f7    \u00b3\u00ae\u008b\u008b\u008b\u00a4\u00a4\u00a4\u00c0\u00aa \u00cc%%%% /\u00ee\u00ee\u00ee\u00ee\u00ee\u00f9   \u00b7   \u009e\u009e            \u0097\u0097\u00fa\u00fa\u00fa\u00cf ++              \u008e\u008e \u00f3\u00f3\u00f3       \u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc ", 
+  "           \u00ef\u00ef\u00ef       \u0089\u0089\u0089  \u00fd\u00bd   \u00c9\u00c9\u0101\u00c9\u00c9\u00c9\u00fe\u00fe \u00bd\u00ab\u00ab    \u00ff\u00ff\u0100\u0100   \u00f7\u00f7    \u00ae\u00ae\u008b\u008b\u008b\u00a4\u00a4\u00c0\u00c0\u00aa \u00cc%%%% /\u00ee\u00ee\u00ee\u00ee\u00ee\u00f9\u0102  \u00b7\u00b7  \u009e\u009e            \u0097\u0097 \u00fa\u00fa\u00cf ++              \u008e\u008e \u00f3\u00f3    \u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc     ", 
+  "          \u00ef\u00ef\u00ef         \u0089\u0089\u0089       \u0101\u0101\u0103\u0103  \u00fe\u00fe\u0104\u0104     \u0105\u00ff\u0100\u0100\u0100\u0100\u0106\u0106   \u0107\u0108\u00ae\u00ae\u008b\u008b   \u0109\u00c0\u00aa\u00cc\u00cc%%%% /\u00ee\u00ee\u00ee\u00ee \u0102\u0102  \u00b7\u00b7   \u009e\u009e           \u0097\u0097 \u00fa\u00fa\u00cf  +               \u008e\u00f3\u00f3 \u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc         ", 
+  "          \u010a\u010b\u010b           \u0089\u0089\u0089     \u010c\u010d \u0103\u0103\u00bd\u00fe\u00fe\u0104\u0104    \u0105\u0105   \u0100\u0100\u0106\u0106\u0107\u0108\u0108\u0108\u0108\u00ae\u008b\u008b\u008b\u010e  \u0109\u0109\u00aa\u00cc\u00cc%%%% \u00ee\u00ee\u00ee\u00ee\u00ee  \u0102\u0102 \u00b7\u00b7   \u009e\u009e            \u0097 \u00fa\u00fa\u00cf  ++              \u010f\u010f\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc             ", 
+  "\u0110        \u00ef\u010a\u010a\u010b\u010b           \u0089\u0089\u0089    \u0111\u00ab\u00ab\u0103\u0103\u00ab\u00ab\u0104\u0104      \u0100\u0100\u0100\u0100\u0100\u0106\u0106\u0107\u0108\u0108\u0108\u0108\u0108\u00ae\u008b\u008b\u008b\u010e\u010e\u0112\u0109\u00aa\u00aa\u00cc%%%% \u00ee\u00ee\u00ee\u00ee\u00ee\u0102  \u0102\u0102  \u00b7   \u009e\u009e            \u0097\u0097\u00fa\u00fa\u00cf\u00cf ++   \u0113         \u010f\u010f\u00fc\u00fc\u00fc                 ", 
+  "\u0114\u0114      \u00ef\u00ef \u010a\u010a\u010a\u010b\u010b          \u0089\u0089\u0089  \u00ab\u0111\u00ab\u00ab\u00ab\u0103\u00ab\u0104\u0104        \u0100\u0100\u0100\u0100\u0106\u0106\u0108\u0108\u0108\u0108\u0115\u0116\u0116\u0116\u008b\u010e\u010e\u010e\u0112\u0112\u0112\u00cc\u00cc%%%% \u00ee\u00ee\u00ee\u00ee\u00ee\u0102\u0102  \u0102\u0102 \u0117\u0117\u0117\u0117 \u009e\u009e           \u0097\u0097 \u00fa\u00fa\u0118\u00cf\u00cf++\u0119\u0119\u011a\u011a       \u010f\u010f [...]
+  "\u011b\u0114\u0114    \u00ef\u00ef\u00ef  \u010a\u010a\u010a\u010b\u010b           \u0089\u0089\u0089\u0111\u011c\u011c\u011c\u011c \u0104\u0104\u0104         \u0100\u0100\u0106\u0106\u0107\u011d\u011d\u0108\u0115\u011e\u011f\u011f\u0120\u0120\u0121\u010e\u0112\u0112\u00cc\u00cc\u00cc\u00cc%%%%\u00ee\u00ee\u00ee\u00ee\u00ee'\u0102\u0102   \u0102\u0102\u0117\u0117\u0117  \u009e\u009e           \u0097\u0097 \u00fa\u00fa\u00fa\u00cf  \u0122\u0123\u0123\u011a\u011a      \u010f\u010f       [...]
+  " \u011b\u0114\u0114\u0114  \u00ef\u00ef    \u010a\u010a\u010a\u010b\u010b           \u0089\u0089\u0111\u011c\u011c\u011c\u011c\u0104\u0104\u0104            \u0106\u0107\u011d\u011d\u011d\u011e  \u011f\u011f\u0120\u0120\u0125\u0126\u0126\u0126\u00cc\u00cc\u00cc%%%%\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee' \u0102\u0102  \u0102\u0102\u00b7\u0127    \u009e\u009e\u009e\u009e\u009e       \u0097\u0097 \u0118\u0118\u0118   \u0123\u0123\u0123\u011a\u011a     \u010f\u010f               \u0124\u0124 [...]
+  "  \u011b\u011b\u0114\u0114\u00ef\u00ef       \u010a\u010a\u010a\u010b           \u0089\u0111\u011c\u011c\u011c\u011c\u0104\u0104            \u0106\u0107\u011d\u011d\u011d\u0128\u0128  \u011f\u011f\u0120\u0120 \u0129\u0126\u0126\u0126\u00cc\u00cc%%%\u00ee\u00ee\u00ee\u00ee\u00ee\u012a&' \u0102\u0102   \u0102\u0127\u0127     \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u0097 \u0118\u0118    \u0123\u0123\u0123\u011a\u011a    \u010f\u010f            \u0124\u0124\u01 [...]
+  "  \u012c\u011b\u011b\u0114\u0114\u012d        \u010a\u010a\u010a\u010b\u010b           \u0089\u012e\u012e\u0104\u0104            \u0106\u0106\u011d\u011d\u011d\u0128\u0128\u0128\u0128\u011f\u011f\u011f\u0120\u0120\u0120\u012f\u0129\u0126\u0126\u0126\u0130%%%\u00ee\u00ee\u00ee\u00ee\u00ee\u012a&'  \u0102\u0102   \u0102\u0102\u0102          \u009e\u009e\u009e\u009e\u009e\u009e\u0131\u0131\u0131\u0131\u0131   \u0132\u0132 \u011a\u011a \u0133\u010f\u010f\u010f        \u0124\u0124\u0124\u0 [...]
+  "\u00b4\u0135\u012c\u012c\u012c\u0114\u0114\u0114\u012d        \u010a\u010a\u010a\u010b\u010b          \u012e\u012e\u012e\u0136\u0104            \u0106\u011d\u011d\u011d\u0128\u0128\u0128\u0128\u0128\u011f\u011f\u011f\u0120\u0120\u0120\u0137\u0137\u0137\u0126\u0138\u0138\u0138%\u00ee\u00ee\u00ee\u00ee\u00ee\u012a\u0139&&' \u0102\u0102  \u013a\u013a\u0102\u0102\u0102               \u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0133\u010f\u010f\u010f      [...]
+  "\u00b4\u0135\u0135\u0135\u00ef\u00ef\u011b\u011b\u0114\u0114         \u010a\u010a\u010b\u010b         \u012e\u012e\u0136\u013c            \u0106\u0107\u011d\u011d\u011d\u0128\u0128\u0128\u0128\u0128\u011f\u011f\u011f\u0120\u0137\u0137\u0137\u0137\u013d\u0138\u0138\u013e\u013e\u0138\u00ee\u00ee\u00ee\u00ee\u012a/\u00d2&&'  \u0102\u0102\u013a\u013a\u013a \u0102\u0102\u0102                     \u0131\u0131\u0131\u0131\u0131\u0131  \u013f\u013f\u013f\u0124\u0124\u0124\u0124\u0124\u0124\u0 [...]
+  "\u00b4  \u00ef\u00ef  \u011b\u011b\u0114\u0114         \u010a\u010a\u010a\u010b\u010b      \u012e\u012e\u0136\u0136\u013c\u013c          \u0106\u0107\u011d\u011d\u011d\u011e\u0140\u0141\u0128\u0128\u0142\u011f\u011f\u0137\u0137\u0137\u0137\u0120\u0143\u0138\u0138\u013e\u013e\u013e\u013e\u00ee\u00ee\u00ee\u012a\u012a//\u00c1&'   \u0102\u0102 \u013a\u013a  \u0102\u0102\u0102                            \u013f\u0124\u0124\u0124\u0124\u0124   \u012b\u012b\u012b\u012b\u012b\u0134\u0134\u013 [...]
+  "\u00b4 \u00ef\u00ef    \u0144\u0114\u0114\u0114\u012d        \u010a\u010a\u010a\u010b\u010b    \u012e\u012e\u0136\u0136 \u013c\u013c\u0145        \u0146\u0146\u011d\u011d\u011d\u011e\u0140\u0128\u0142\u0142\u0142\u0142\u011f\u011f\u0142\u0137 \u0120\u0138\u0138\u0138\u0138\u013e\u013e\u013e\u013e\u00ee\u00ee\u00ee\u012a\u0147//\u00c1&'   \u0102\u0102\u0102\u013a\u0148\u0148  \u0102\u0102\u0102\u013a                               \u012b\u012b\u012b\u012b\u0134\u0134\u0134\u0134\u0134\u [...]
+  "\u0149\u00ef\u00ef\u00ef     \u0144\u011b\u011b\u0114\u014a         \u010a\u010a\u010b\u010b  \u012e\u012e\u0136\u0136   \u014b\u0145\u0145\u014b      \u0106\u011d\u011d\u011d\u011e\u014c\u014c\u0142\u0142\u0142\u0142\u0142\u014d\u014d\u0142\u014e\u014e\u0138\u0138\u0138\u0138\u0138\u013e\u013e\u013e\u00ee\u00ee\u00ee\u012a\u0147\u0147 /\u0139&''   \u0102\u0102\u0148\u0148\u013a\u013a   \u013a\u013a\u013a\u013a                        \u012b\u012b\u012b\u012b\u012b\u0134\u0134\u0134\u0 [...]
+  "\u0149\u00ef\u00ef        \u011b\u0114\u014a\u014a         \u010a\u010a\u010a\u010b\u010b\u012e\u012e\u0136    \u014b\u014b\u014b\u014b\u014b    \u0106\u0107\u011d\u011d\u011d\u014c\u014c\u014c\u014c\u014e\u014e\u014e\u014e\u014d\u014d\u014e\u014e\u0138\u0138\u0138\u0138\u0138\u013e\u013e\u013e\u013e\u00ee\u00ee\u012a\u0151\u0147 \u0152\u00d2\u0139&&'    \u0148\u0148  \u013a\u013a   \u013a\u013a\u0153\u0153\u013a\u013a\u013a                \u012b\u012b\u012b\u012b\u0134\u0134\u012b\u0 [...]
+  "\u0154\u0149\u0149\u0149        \u0144\u0155\u014a\u014a\u012d        \u010a\u010a\u010a\u012e\u012e\u0136\u0136   \u014b\u014b  \u014b\u014b\u0156  \u0106\u0107\u011d\u011d\u011d\u014c\u014c\u014c\u014c\u014c\u0157\u0157\u0157\u0157\u014d\u014d\u014d\u014e\u0138\u0138\u0138\u0138\u0138\u013e\u013e\u013e\u00ee\u00ee\u012a\u012a\u0151\u0151 \u0152\u0158\u0139&&'     \u0102\u0102  \u013a\u013a\u013a  \u013a\u0153\u0153\u0153\u0153\u0153\u0153\u0153\u0159\u0159\u0159\u0159\u0159\u0159\u0 [...]
+  "\u015c \u0149\u0149\u0149        \u0144\u014a\u011b\u0114\u0114        \u010a\u012e\u012e\u0136\u0136   \u014b\u014b     \u0156\u0156\u0106\u0106\u011d\u011d\u011d\u014c\u014c\u014c\u014c\u0157\u0157\u0157\u0157\u0157\u0157\u014d\u014d\u014d\u0157\u014e\u0138\u0138\u0138\u015d\u013e\u013e\u013e\u00ee\u00ee\u012a\u015e\u0151\u0151 \u0152\u0158/\u00c1\u00c1''\u015f    \u0102\u0102  \u013a\u013a\u013a\u013a\u013a\u013a  \u0153\u0153\u0153\u0159\u0159\u0159\u0159\u0159\u0159\u0159\u0159\u [...]
+  "\u015c\u0154  \u0149\u0149\u0149        \u014a\u0114\u0114\u0114       \u012e\u012e\u0136\u0136   \u014b\u014b\u014b      \u0156\u0106\u011d\u011d\u011d\u014c\u014c\u014c\u014c\u0157\u0157\u0157\u0157\u0157\u0157\u0157\u014d\u014d\u014d\u0157\u0157\u0157\u0157 \u015d\u013e\u013e\u00ee\u00ee\u012a\u012a\u0162\u0151\u0151 \u0152\u0152/\u0139&''\u015f  \u0163\u0163\u0163\u0102\u0163  \u013a\u013a\u013a\u0164\u0164     \u0159\u0159   \u0165\u0165\u012b\u012b\u0134\u0160\u0134\u0134\u0134\ [...]
+  "\u015c\u015c\u0154\u0154\u0167\u0167\u0149\u0149        \u011b\u0114\u0114\u0114\u012d    \u012e\u012e\u012e\u0136   \u014b\u014b\u014b       \u0106\u0107\u011d\u011d\u011d\u014c\u014c\u0157\u0157\u0157\u0157\u0168\u0168\u0168\u0168\u0168\u014d\u014d\u014d\u0157\u0157\u0157\u0157\u0157\u0169\u0169\u016a\u016a\u012a\u016b\u0162\u0162\u0143\u0151\u0151 \u0152\u00d2\u0139\u0139&''\u015f\u0163\u0163\u0163\u0163\u0163\u0163\u0102\u0102   \u0164\u0164\u0164\u0164\u0164 \u0159\u0159\u0159\u0 [...]
+  "\u015c\u015c\u0154\u0154\u0167\u0167\u0149\u0149\u0149        \u0144\u0114\u011b\u0114\u012d   \u012e\u012e\u0136    \u014b\u014b       \u0106\u0107\u011d\u011d\u011d\u014c\u014c\u0157\u0157\u0157\u0168\u0168\u016d\u016d\u016d\u0168\u0168\u014d\u014d\u014d\u0157\u016e\u0157\u0157\u0169\u0169\u0169\u0169\u016f\u0170\u0170\u0162\u0162\u0162\u0151\u0151 \u0152\u00d2 \u0139&&'\u015f\u015f     \u0102\u0102\u0102     \u0164\u0159\u0159\u0165\u0165\u0165\u0165\u016c\u0160\u016c\u016c\u016c \ [...]
+  "\u015c\u0154\u0154\u0167\u0167  \u0149\u0149\u0149        \u0144\u011b\u0114\u0114\u0114 \u012e\u012e\u0136\u0136   \u0172\u014b       \u0106\u0107\u011d\u011d\u011d\u014c\u014c\u014c\u0157\u0168\u0168\u016d\u016d\u016d\u016d\u016d\u016d\u016d \u014d\u014d\u016e\u016e\u016e\u0157\u0169\u0169\u0169\u0169\u016f\u0170\u0170\u0173\u0162\u0162\u0151\u0151 \u0158/ \u0139&&'\u015f\u015f\u015f      \u0102\u0102\u0102\u0102\u0159\u0159\u0159\u0165\u0165\u0165\u0165\u0160\u016c\u016c\u0174\u016 [...]
+  "\u015c\u0175\u0167\u0167     \u0149\u0149\u0149        \u011b\u0114\u0114\u0114\u012e\u0136\u0136   \u0172\u0172\u0176\u0176     \u0106\u0106\u011d\u011d\u011d\u014c\u014c\u014c\u0157\u0168\u0168\u016d\u016d\u0177\u0177\u0177 \u016d\u016d\u0178\u0179\u0179\u0179\u016e\u016e\u0169\u0169\u0169\u0169\u016f\u016f\u0170\u0170\u0173\u0162\u0162\u0162\u0151\u0158\u0158/  \u00c1&''\u015f\u015f       \u0102\u017a\u017a\u0102\u0165\u0165\u0165\u0165\u016c\u0160\u016c\u016c\u0174 \u0166\u0166\u0 [...]
+  "\u017c\u017c\u0167\u0175\u0175     \u0149\u0149\u0149        \u0144\u0114\u0114\u012d\u0136   \u0172\u0172\u0172\u0176\u0176     \u0106\u0107\u011d\u011d\u011d\u014c\u014c\u0157\u0168\u0168\u016d\u016d\u0177\u0177\u0177\u0177\u0177\u0177 \u0178\u0179\u0179\u0179\u016e\u016e\u0169\u0169\u0169\u0169\u016f\u016f\u0170\u0170\u0173\u0162\u0162\u0162\u0151\u017d\u017d\u017d\u017d\u017e\u0139&&' \u015f\u015f       \u017a\u017a\u017a\u017a\u0160\u016c\u016c\u016c\u016c\u0174\u0166\u0166\u0166 [...]
+  "\u017c\u017c\u0167\u0175\u0175      \u0149\u0149\u0149        \u0144\u0144\u012d    \u017f\u0172\u0176\u0176      \u0107\u011d\u011d\u011d\u014c\u014c\u0157\u0157\u0180\u0180\u0181\u0181\u0181\u0181\u0181\u0181\u0177\u0177\u0177\u016d\u016d\u0179\u0179\u016e\u016e\u0169\u0169\u0169\u0169\u016f\u0157\u0170\u0170\u0173\u0173\u0162\u0162\u0151\u0158\u017d\u017d\u017e\u017e\u0139\u0139&''\u015f\u015f     \u0165\u0165\u0165\u0165\u017a\u017a\u017a\u016c\u0174\u0174\u0161\u0166\u0166\u0166\ [...]
+  "\u0183\u0167          \u0149\u0149\u0149      \u012e\u012e\u0136\u0136   \u017f\u017f\u0176\u0176      \u0107\u011d\u011d\u011d\u014c\u014c\u014c\u0157\u0180\u0180\u0180\u0181\u0181\u0181\u0181\u0181\u0181\u0181\u0181\u0177\u0177\u016d\u0179\u0179\u0179\u016e\u0169\u0169\u0169\u0169\u016f\u0157\u0170\u0170\u0173\u0173\u0184\u0184 \u0158\u0158\u00d2  \u017e\u0139&&' \u015f\u015f  \u0165\u0165\u0165\u0165\u0185\u016c\u016c\u017a\u017a\u017a\u017a \u0161\u0161\u0161\u0161\u0161\u017b\u01 [...]
+  "\u0183            \u0186\u0186\u0149\u0149   \u012e\u012e\u0136\u0136   \u0187\u0187\u0187\u0187\u0187     \u0107\u011d\u011d\u011d\u014c\u014c\u014c\u0157\u0180\u0180\u0180\u0180      \u0181\u0181\u0181\u0181\u0181\u0179\u0179\u0179\u016e\u0188\u0169\u0169\u016f\u016f\u0157\u0170\u0170\u0170\u0184\u0184\u0184 \u0158\u0158\u00d2\u00d2 \u017e\u0139\u00c1\u00c1''\u015f\u015f\u0165\u0165\u0165\u0165\u0160\u0160\u0160\u016c\u0174\u0174 \u017a\u017a\u0189  \u0161\u0161\u0161\u0161\u018a\u0 [...]
+  "            \u0186\u0186\u0186\u0149\u0149\u0149 \u012e\u012e\u0136\u0136   \u0187\u018c\u018c\u018c\u018c\u018c\u018c\u018c   \u0107\u011d\u011d\u011d\u014c\u014c\u0157\u0180\u0180\u0180\u0180\u018d         \u0181\u0181\u0181\u0179\u0179\u016e\u0188\u018e\u018e\u018e\u018e\u0157\u0157\u0170\u0170\u0184\u0184\u0184 \u0158\u0158\u018f\u00d2  \u017e\u0139&&\u0190\u0190\u0190\u0165\u0165\u0191\u016c\u016c\u016c\u016c\u0174\u0174          \u018a\u018a\u018a\u018a  \u013b\u013b   \u014f\u0 [...]
+  "          \u0192\u0192\u0186\u0186  \u0149\u0149\u0149\u012e\u012e\u0136   \u0187\u018c\u018c\u018c\u018c\u018c\u018c\u018c\u018c\u018c \u0107\u011d\u011d\u011d\u014c\u014c\u0157\u0157\u0180\u0180\u0180\u0180\u018d\u018d\u0193\u0193\u0193\u0193\u0193    \u0181\u0194\u0179\u0179\u0179\u0188\u018e\u018e\u018e\u018e\u0157\u0157\u0170\u0170\u0184\u0184\u0195 \u0158\u0158\u018f\u00d2   \u0139\u0196\u0197\u0190\u0190\u0190\u0191\u0160\u016c\u016c\u016c\u0174\u0174\u0174          \u018a\u018 [...]
+  "\u0198         \u0192\u0192\u0199\u019a\u019a\u019a  \u012e\u012e\u0136\u0136  \u018c\u018c\u018c\u018c\u019b\u019b \u018c\u018c\u018c\u018c\u018c\u011d\u011d\u011d\u014c\u014c\u014c\u0157\u0180\u0180\u0180  \u019c\u019c\u019c\u0193\u0193\u0193\u0193\u0193 \u019d\u019d\u019d\u019e\u019e\u0179\u0179\u0188\u018e\u018e\u018e\u018e\u0157\u0157\u0170\u0184\u0184\u0184 \u0158\u0158 \u018f\u00d2   \u0196\u0196\u0196\u019f\u0190\u0190\u0190\u016c\u016c\u0174\u0174\u0174           \u018a\u018a [...]
+  "\u0198\u01a1        \u0186\u0199\u0199\u019a\u019a\u019a\u019a\u019a \u0136\u01a2\u01a3\u01a3 \u018c\u018c\u018c\u019b\u019b\u019b\u019b\u019b \u018c\u018c\u011d\u011d\u011d\u014c\u014c\u014c\u01a4\u0180\u0180\u0180 \u0193\u01a5\u0193\u019c\u019c\u019c\u019c  \u0193\u019d\u019d\u019d  \u019e\u0179\u0179\u0188\u018e\u018e\u018e\u018e\u0157\u0157\u0170\u0184\u0184\u0184 \u0158\u0158 \u018f\u01a6 \u0165\u0165\u0196\u0196\u0196\u019f\u0190\u0190\u0190\u0174\u0174\u0174      \u018a\u018a\u [...]
+  "\u01a1\u01a1\u01a8      \u0186\u01a9\u01a9    \u019a\u019a \u01aa\u01a2\u01a3\u01a3\u018c\u018c\u018c\u019b\u019b \u01ab\u019b\u019b\u019b\u01ac\u011d\u011d\u011d\u014c\u014c\u014c\u01ad\u01a4\u0180\u0180 \u0193\u0193\u01a5\u01a5\u01a5 \u019c\u019c\u019c\u019c \u019d\u0193   \u019e\u0179\u0179\u0188\u0188\u018e\u018e\u018e\u0157\u0157\u0170\u0184\u0184 \u0158\u0158 \u01ae\u01ae\u01a6\u01a6\u0165\u0165\u0160\u0196\u0196\u0197\u0190\u0190\u0190\u0190      \u018a\u018a\u018a\u018a\u018a\ [...]
+  "\u0154\u0154\u01a8\u0198\u0198\u01af  \u01b0\u01b0\u0186\u019a        \u01b1\u01b2\u018c\u018c\u018c\u019b\u019b \u01ab\u01ab\u01ab\u019b\u019b\u0107\u011d\u011d\u011d\u014c\u014c\u014c\u01a4\u01a4\u01a4 \u0193\u01b3\u01b3\u01b3\u01a5\u01a5\u01a5\u01a5 \u019c\u019c\u019c\u0193\u0193   \u019e\u019e\u0179\u0179\u0188\u018e\u018e\u01b4\u01b4\u01b4\u0184\u0184\u0184 \u0158\u0158 \u01ae\u01ae\u01a6\u01a6\u01a6\u0160\u016c\u0196\u0196\u0197\u0197\u0190\u0190\u0190     \u018a\u018a\u018a\u01 [...]
+  " \u0154\u0154\u0198\u01b5\u01b5  \u0186\u01b0\u01b0          \u01aa\u018c\u018c\u01b6\u01b6\u019b\u01ab\u01ab\u01ab\u01ab\u01ab\u0107\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b8\u01b8\u01b8 \u01b9\u01b9\u0193\u01b3\u01b3\u01b3 \u01a5\u01a5\u01a5\u01a5\u019c\u019c\u019c\u019c    \u019e\u0179\u0179\u0188\u018e\u01b4\u01b4\u01b4\u01b4\u01b4\u0184\u0184\u0158\u0158\u01ba\u01ba\u01ae\u01ae\u01ae\u01a6\u01a6\u016c\u016c\u0174\u0196\u0196\u019f\u019f\u0190\u01bb \u018a\u018a\u018a\u018a\u018a\ [...]
+  "  \u0154 \u01b5\u01b5\u01b5\u0186\u0186\u019a\u019a         \u01aa\u01aa\u01bd\u01b6\u01b6\u01b6\u01b6\u01ab\u01ab  \u0107\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01ad\u01b8\u01b8\u01b8\u0193\u01b9\u01b9\u01b9  \u01b3\u01b3\u01b3 \u01a5\u01a5\u01a5\u01a5\u0193\u0193    \u019e\u019e\u0179\u0188\u01b4\u01b4\u01b4\u01b4\u01b4\u01be\u01be\u0158\u0158\u01ba\u01ba\u01ba\u01a6\u01ae\u01a6\u01a6\u01a6\u0174\u0174\u0174\u0174\u019f\u019f\u019f\u01bb\u01bb\u018a\u018a\u018a\u018a\u018a       \u018 [...]
+  "\u01c0 \u0154  \u01af\u01b5\u0186\u01c1\u019a\u019a         \u01aa\u01aa\u01c2\u01c3\u01c4\u01b6\u01b6\u01b6\u01b6  \u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b7\u01a4\u01a4\u01b8\u01b8\u01b8\u01c5 \u01b9\u01b9\u01b9 \u01b3\u01b3\u01b3\u01b3 \u01a5\u01a5\u01a5     \u019e\u019e\u0179\u01b4\u01b4\u01b4\u01b4\u01c6\u01c6\u01be\u01be\u0158\u01ba\u01c7\u01c8\u01c8\u01ae\u01ae\u01a6\u01a6\u01a6\u0174\u0174   \u01c9\u01c9\u01ca\u01bb\u01bb         \u018a\u014f\u01bf\u0150\u0150\u015a\u01cb\u01c [...]
+  "\u01c0\u01c0\u0154 \u01af\u01af \u01c1\u01c1\u01c1         \u01aa\u01aa\u01c2\u01c3\u01c3\u01c4\u01c4\u01b6\u01b6\u01b6\u01b6\u0107\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01ad\u01a4\u01ce\u01ce\u01b8\u01b8\u01b8\u01c5\u01c5\u01b9\u01b9\u01b9\u01b9 \u01b3\u01b3\u01b3\u0193\u0193\u01a5     \u019e\u019e\u01b4\u01b4\u01b4\u01cf\u01d0\u01d0\u01d1\u01be\u01be\u01ba\u01c7\u01c8\u01c8\u01d2\u01ae\u01ae\u01a6\u01a6\u01a6      \u01c9\u01c9\u01bb\u01bb\u018a      \u018a\u014f\u014f\u014f\u0150\u01 [...]
+  "\u01c0\u01c0\u0154 \u01af\u01af  \u01c1\u01c1\u019a        \u01d5\u01d5\u01c2\u01c3\u01c3\u01c4\u01d6\u01c2\u01b6\u01b6\u01b6\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01ad\u01d7\u01d8\u01ce\u01ce\u01d9\u01b8\u01b8\u01c5\u01c5\u01c5\u01c5\u01b9\u01b9\u01b9\u0193\u0193\u01b3\u0193      \u01da\u01da\u01da\u01b4\u01b4\u01cf\u01d0\u01d0\u01d0\u01d0\u01be\u01be\u01d1\u01db\u01dc\u01dc\u0174\u01ae\u01a6\u01a6\u01a6\u01a6      \u01c9\u01dd\u01dd\u01bb\u01bb\u018a   \u018a\u014f\u0150\u0150\u014f\ [...]
+  "\u01c0\u01c0\u01c0\u01c0\u01af\u01af\u01df  \u019a\u019a       \u01aa\u01aa\u01d5\u01c2\u01c3\u01c4\u01c4\u01d6\u01e0\u01c2\u01b6\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01ad\u01d7\u01d7\u01d8\u01d8\u01ce\u01d7\u01b8\u01b8\u01b8\u0193\u01c5\u01c5\u0193\u0193\u01b9\u0193\u0193     \u01e1\u01e2\u01da\u01da\u01da\u01da\u01b4\u01b4\u01e3\u01cf\u01d0\u01d0\u01d0\u01be\u01be\u01d1\u01e4\u0174\u0174\u0174\u0174 \u01a6\u01a6        \u01c9\u01c9\u01ca\u01bb\u01e5\u01e5\u018a\u014f\u014f\u014f\u01 [...]
+  " \u01c0\u01c0\u01c0\u01c0\u01af\u01df\u01df\u01df\u019a\u019a       \u01aa\u01aa\u01bd\u01e6\u01c3\u01c4\u01e7\u01d6\u01e0\u01c2\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b7\u01d7\u01d7\u01d7\u01d7\u01d7\u01d7\u01d7\u01d7\u01b8\u01b8\u0193\u0193     \u01e1\u01e1\u01e1\u01e2\u01e1\u01e2\u01e2\u01e2\u01da\u01da\u01da\u01da\u0158\u0158\u01e3\u01cf\u01d0\u01d0\u01d0\u01d0\u01be\u01d1\u0174\u0174\u0174   \u01e8\u01e8         \u01c9\u01e5\u01e5\u01e9\u01e5\u01e9\u0150\u015a\u0150\u015b\u015b\u [...]
+  "\u0158 \u01c0\u01c0\u01c0\u01c0\u01c0\u01df\u01df\u019a        \u01aa\u01bd\u01bd\u01e6\u01e6\u01e7\u01ea\u01e0\u01c2\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b7\u0168\u01d7\u01d7\u01d7\u01d7\u01d7\u01d7\u01d7\u01d7\u01b8\u01b8\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01da\u01da\u0158\u0158\u0158\u0158\u01e3\u01cf\u01cf\u01d0\u01d0\u01d0\u01be\u01be\u0174 \u01eb\u01eb\u01eb \u01ec\u01e8          \u01e5\u01e9\u01e9\u01e9\u01e9\u01ed\u015b [...]
+  "\u0158\u0158 \u01c0\u01c0\u01c0\u01c0\u01c0\u01c0\u019a\u01df\u01df\u01df    \u01aa\u01aa\u01bd\u01e6\u01e6\u01e7\u01e7\u01ea\u01e0\u01c2\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01ad\u0168\u01d7\u01d7\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01b8\u01b8\u01e1\u01e1\u01e1\u01e1\u01e1\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u0158\u0158\u01ba\u01ba\u01ee\u01ef\u01c8\u01e3\u01cf\u01d0\u01d0\u01d0\u01d0\u01be\u01f0\u01eb\u01f1\u01f1  \u01e8\u01e8        \u01f2\u01f2\u01e9\u01f3 [...]
+  "\u01ba\u0158\u0158\u0158\u01f5\u01c0\u01c0\u01c0\u01f6\u01f6\u01f6\u01df\u01df\u01df\u01df\u01df \u01aa\u01aa\u01e6\u01e6\u01e7\u01e7\u01ea\u01ea\u01f7\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b7\u0168\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01f8\u01f8\u01e1\u01e1\u01e1\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u0158\u0158\u0158\u0158\u01ba\u01c8\u01ef\u0160\u01f9\u01e3\u01cf\u01cf\u01d0\u01d0\u01d1\u01d1\u01fa\u01eb \u01f1\u01f1 \u01e8\u01e8      \u01f2 [...]
+  "\u01fc\u01fc\u01ba\u01f5\u01f5\u01fd\u01fd\u01c0\u01f6\u01f6\u01f6\u01f6\u01f6\u01f6\u01df\u01df\u01aa\u01aa\u01bd\u01e6\u01e7\u01e7\u01ea\u01ea\u01f7\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b7\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01f8\u01f8\u01e1\u01e1\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u0158\u01ba\u01ba\u01ba\u01ee\u01c8\u01c8\u01c8\u0160\u0174\u0174\u01e3\u01e3\u01cf\u01cf\u01fe\u01fe\u01ff\u01fa\u01f0    \u01ec\u01e8    \u01f2\u01f2\ [...]
+  "\u0204\u01fc\u01ba\u01f5\u01f5\u0158\u0158\u01fd\u01fd\u0205\u01f6\u01f6\u01f6\u01f6\u01f6\u01f6\u01aa\u01aa\u01f7\u01e7\u01e7\u01ea\u01ea\u01f7\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b7\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u0206\u0207\u0207\u0207\u01f8\u01f8\u01f8\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2\u01e2 \u0158\u0158\u0158\u0158\u01ee\u01c8\u01ef\u0160\u01f9\u0174\u0174\u0174\u0174 \u0208\u01fe\u01fe\u01fe\u01fe\u01ff\u01fa\u01fa    \u01ec\u01e8  \u01f2\u01fb\u01fb\u01fb\ [...]
+  "\u0204\u0204\u01fc\u01f5\u01f5\u01f5\u0158\u0158\u01fd\u01fd\u01fd\u0205\u01f6\u01f6\u01f6\u01f6\u01f6\u01f6\u01f6\u01e7\u01ea\u01ea\u01f7\u01f7\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01e1\u01e1\u01e1\u01e1\u01e1\u01e1\u020b\u020b\u0207\u0207\u0207\u020c\u020d\u01f8\u01f8\u01f8\u01f8\u01e2\u01e2\u01e2\u01e2 \u0158\u01ba\u0158\u01ba\u01ef\u01c8\u01c8\u01c8\u0160\u0174\u0174\u0174\u0174   \u0208\u0208\u01fe\u01fe\u01fe\u01fe\u01ff\u01fa\u01fa  \u020e\u020e\u01e8\u01f2\u01f2\u01fb\u01fb\u0 [...]
+  "\u0210\u0211\u0204\u0204\u01f5\u01f5\u01f5\u01ba\u0158\u0158\u0212\u0212 \u0205\u0205\u01f6\u01f6\u01f6\u01f6\u01f6\u01f6\u01f7\u01f7\u011d\u011d\u011d\u01b7\u01b7\u01b7\u01b7\u01e1\u01e1\u01e1\u01e1\u0213\u0214\u0207\u0207\u0207\u0215\u0206\u020c\u020d\u020d\u01f8\u01f8\u01f8\u01e2\u01e2 \u0158\u0158\u0158\u01ba\u01ee\u01ee\u01ef\u01f9\u01f9\u01f9\u0174\u0174\u0174      \u0208\u01fe\u01fe\u01fe\u01fe\u01ff\u01ff\u01fa  \u0216\u020e\u020e\u01fb\u01fb\u0201\u0201\u0201\u0201   \u020f\u [...]
+  "\u0210\u0210\u0211\u0211\u0204\u01fc\u01fc\u01ba\u01ba\u0212\u0212\u0212   \u0205\u0218\u0218\u01f6\u01f6\u01f6\u01f6\u01f6\u01f6\u011d\u01b7\u01b7\u01b7\u01b7\u01e1\u01e1\u01e1\u0219\u0219\u0207\u0207\u0207\u020b\u020b\u0215\u0206\u0206\u020c\u020d\u020d\u01e2\u01f8\u01e2\u0158\u0158\u0158\u0158\u01ba\u01c8\u01c8\u01c8\u0160\u01f9\u0174\u0174\u0174        \u0208\u0208\u01fe\u01fe\u01fe\u01fe\u021a\u021a\u021a\u021a\u0216\u0216\u0216\u01fb\u0201\u0201\u0201 \u021b\u021b  \u021c\u020f\ [...]
+  " \u0210\u0210\u0210\u0211\u0204\u0211\u0204\u01fc\u0212\u0212\u01ba\u0158\u0158\u0158  \u0205\u0205\u0205\u01f6\u01f6\u01f6\u01f6\u021e\u021e\u01b7\u01b7\u01e1\u01e1\u01e1\u021f\u0207\u0207\u0207\u0213\u0214\u020b\u020b\u0215\u0215\u0206\u020c\u020c  \u0158\u0158\u0158\u01ba\u01ee\u01ee\u01c8\u01c8\u01f9\u01f9\u0174\u0174\u0174          \u0220\u0208\u021a\u021a\u021a\u021a\u021a\u021a\u021a\u0221\u0216\u0216\u0222\u020e\u0201 \u021b\u021b\u021b\u021b  \u021c\u021c\u020f\u020f\u0217 \u [...]
+  "\u0223\u0223\u0223\u0210\u0210\u0210\u0211\u0204\u01fc\u0212\u0212\u01ba\u01ba\u0158\u0158\u0158\u0158   \u0205\u011d\u011d\u021e\u021e\u021e\u021e\u01e1\u01e1\u01e1\u01e1\u0207\u0207\u0219\u0219\u0213\u0214\u0214\u020b\u020b\u0215\u0224  \u0158\u0158\u0158\u0158\u01ba\u01ee\u01ee\u01f9\u01f9\u01f9\u0174\u0174\u0174        \u0220\u0220\u0225\u0220\u0220\u0208\u021a\u021a\u021a\u021a\u0221\u0221\u0221\u0221\u0226\u0226\u0226 \u021b\u021b\u021b\u021b    \u021c\u0227\u0227\u0227\u021d  \ [...]
+  "\u0223\u0223\u0223\u0223\u0210\u0210\u0210\u0210\u0211\u0212\u0212\u0204\u0204\u01fc\u01ba\u0158\u01ba\u0158\u0158\u0158\u0229\u0229\u021e\u021e\u021e\u021e\u01e1\u01e1\u01e1\u01e1  \u021f\u021f\u0219\u0213\u0213\u0214\u020b\u020b  \u0158\u0158\u01ba\u01ba\u01ee\u01ee\u01ee\u01f9\u01f9\u0174\u0174\u0174\u0174         \u0220\u0220\u0220\u0225\u022a\u022a\u022a\u021a\u021a\u021a\u0221\u0221\u0221\u022b\u022b\u022c\u022d\u0226\u022d\u021b\u021b      \u0227\u0227\u0227\u021d\u022e\u022e\u [...]
+  "      \u0210\u0210\u0230\u0231\u0211\u0211\u0204\u01fc\u01fc\u01fc\u01ba\u01ba\u0158\u0229\u0229\u0232\u0232\u0233\u0233\u0234\u01e1\u01e1\u0235   \u021f\u021f\u0219\u0219\u0213\u0224  \u0158\u0158\u0158\u0158\u01ba\u01ee\u01ee\u01f9\u01f9\u01f9\u0174\u0174\u0174      \u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0225\u0225\u022a\u022a\u0221\u0221\u0221\u0237\u022b\u022b\u022b\u022c\u0238\u0238\u021b\u021b        \u021c\u021c\u0239 \u022e\u0239\u0239\u0228\u022f\u022f\u022f\u01c9\ [...]
+  "\u023a  \u023b\u023b\u023b\u023b\u0230\u023c\u0231\u0231\u0231\u0231\u0211\u0204\u0211\u0204\u0204\u01fc\u0229\u0232\u0232\u0233\u0233\u0233\u0234\u01e1\u01e1\u0235\u0235  \u0235\u021f\u0219\u0224  \u0158\u0158\u01ba\u0158\u01ee\u01ee\u01ee\u01f9\u01f9\u0174\u0174\u0174\u0174  \u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0225\u0225\u0204\u0204\u0221\u0221\u023d\u023d\u023d\u022c\u022b\u022c\u0238\u0238\u023e\u021b         \u0239\u0239\u0239\u02 [...]
+  "\u023a\u023f\u023b\u023b\u023b\u023b \u0230\u0230\u0240 \u0231\u0231\u0231\u0231\u0231\u0211\u0204\u0229\u0229\u0232\u0233\u0233\u0233\u0233\u0234\u0158\u0158\u0235\u0235\u0235\u0235\u0235\u0235\u0158\u0158\u0158\u0158\u0158\u0158\u01ba\u01ee\u01ee\u01f9\u01f9\u0174\u0174\u0174\u0174 \u0236\u0236\u0236\u0236\u0236\u0236\u0236\u0236       \u0204\u0204\u0204\u0225\u0211\u0211\u0241\u023d\u0242\u0242\u022c\u022c\u022c\u0238\u0238\u023e\u0238  \u0243            \u022e\u022e\u022e \u022f\u [...]
+  "\u023f\u023f\u023a\u023a  \u0230\u0230\u0244\u0244    \u0231\u0231\u0245\u0246\u0229\u0232\u0233\u0233\u0233\u0233\u0234\u0234\u0158\u0158\u0158\u0158\u01ba\u0158\u0158\u0158\u0158\u01ba\u0158\u01ba\u01ee\u01ee\u01f9\u01f9\u01f9\u0174\u0174\u0174\u0174\u0236\u0236\u0236\u0236\u0236\u0236        \u0204\u0204\u0204\u0211\u0204\u0204\u0247\u0247\u0248\u0248\u0241\u0242\u022c\u022c\u022c\u022c\u0238\u0238\u023e\u0238\u023e\u0243\u0243\u0243\u0243   \u0249\u0249\u0249\u0249\u0249\u0249\u02 [...]
+  "\u023f\u023f\u023a\u023a\u023a  \u0240\u0244\u0244    \u024b\u024b\u0246\u0246\u0229\u0232\u0233\u0233\u0233\u0233\u0234\u0234\u0204\u0204\u01ba\u0174\u0174\u0174\u01ba\u01ba\u01ba\u01ee\u01ee\u01ee\u01ee\u01f9\u0174\u024c\u024c\u0174\u0174\u0236\u0236\u0236\u0236\u0236       \u0204\u0204\u0204\u0204\u0204\u0204\u0247\u0247\u0247\u024d\u024d\u024d\u024e\u024f\u0250\u0251\u022c\u022c\u022c\u0238\u0238\u0238\u0238\u023e\u01fa\u0252\u0243 \u0249\u0249\u0249\u0249\u0249\u0249\u0249\u0249\ [...]
+  "\u023f  \u023a\u023a\u023a \u0240\u0240\u0244\u0244  \u024b\u024b\u024b\u0246\u0253\u0253\u0233\u0233\u0233\u0233\u0234\u0234  \u0211\u0204\u0211\u0204\u0174\u0204\u0174\u0174\u0174\u0174\u0174\u0174\u024c\u024c\u024c\u024c\u024c\u0236\u0236\u0236   \u0204\u0204\u0204\u0204\u0204\u0204\u0204\u0204\u0247\u0247\u0211\u0247\u0247\u0247\u024d\u0254\u0254\u0255\u0241\u0256\u0250\u0251\u0251\u0257\u0208\u0208\u0238\u0238\u0238\u023e\u0252\u0252\u0258\u0252\u0249\u0249\u0249\u0249\u0259\u025 [...]
+  "     \u023a\u023a\u023a \u0244\u0244 \u024b\u024b\u024b\u0246\u0253\u0253\u025b\u025b\u0233\u0233\u0234\u0234\u025c     \u0211\u025d\u025d\u025d\u0211\u0204\u0204\u0204\u0204\u024c\u024c\u024c\u024c\u024c\u0211\u0204\u0204\u0204\u0204\u0211\u0204\u0204\u0247\u0247\u0247\u0211\u0247\u0247\u0247\u0247\u0247\u0254\u0254\u024d\u024d\u024d\u0255\u0241\u0256\u025e\u025e\u0251\u0257\u0257\u0257\u0238\u0238\u0238\u023e\u0238\u0258\u0252\u0258\u0258\u025f\u0260\u0261\u0261\u0259\u0259\u0259\u0 [...]
+  "     \u0263\u023a\u023a\u023a\u0244\u0244\u024b\u024b\u024b\u0246\u0246\u0253\u025b\u025b\u025b\u025b\u0264\u0264\u025c\u025c    \u025d\u025d\u025d\u025d\u0265\u0265 \u0211\u0266\u0266\u024c\u024c\u024c\u024c\u024c\u0211\u0211\u0247\u0247\u0247\u0247\u0247\u0247\u0247\u0247\u0247\u0247   \u0254\u0254\u0267\u0267\u024d\u0241\u0255\u0268\u0269\u025e\u025e\u025e\u0257\u0257\u0257 \u0238\u0238\u0238\u023e\u0252\u0258\u0258\u0258\u0258\u025f\u026a\u0261            \u0259\u0259\u0259\u0259\ [...]
+  "    \u0263\u0263\u0263\u023a\u023a\u023a\u0244\u024b\u024b\u0246\u0246\u0253\u025b\u025b\u025b\u025b\u025b\u0264  \u025c\u025c \u025d\u025d\u025d\u0265\u0265\u0265  \u0266\u0266\u0266\u0266\u0247\u024c\u024c\u024c\u0247\u0247\u0247\u0247\u0247         \u0254\u0267\u0267\u0267\u0267\u026b\u0255\u0241\u0241\u0269\u025e\u025e\u025e\u0257\u0257\u0257  \u026c\u023e\u023e\u0252\u0258\u0258\u0258\u025f\u0258\u01fa\u026a\u026a               \u0259\u0259\u0259  \u0249\u0249\u0249\u01c9\u01dd\u [...]
+  "    \u0263\u0263   \u023a\u023a\u024b\u0246\u0246\u0253\u0253\u025b\u025b\u025b\u025b\u0264\u0264  \u025c\u026d\u025d\u025d\u025d\u0265\u0265  \u0266\u0266\u0247\u0247\u0247\u0247\u0247\u0247\u0247             \u0254\u0254\u0267\u0267\u026b\u026b\u026b\u0255\u0241\u0256\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u0252\u0258\u0258\u025f\u025f\u0258\u01ff\u01fa\u01fa\u026a\u026a               \u0259\u0259\u0259\u0259 \u0249\u0249\u01c9\u01c9\u01dd\u01ca\u01cc\u01cc    \u0202\u0 [...]
+  "   \u0263\u0263    \u026e\u023a\u023a\u026f\u0253\u0253\u025b\u025b\u025b\u025b\u0264\u0264   \u025d\u026d\u026d\u0265\u0265 \u0266\u0247\u0247\u0247\u0247\u0247\u0247                  \u0267\u0267\u0267\u026b\u026b\u026b\u0255\u024e\u024f\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u0270\u0258\u0258\u025f\u0258\u01fe\u01fe\u01fe\u01ff\u01fa\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a           \u0259\u0259\u0259  \u0249\u0249\u01c9\u01ca\u01bb\u01cc\u01cc     \u01cd\u01cd [...]
+  "  \u0263\u0263    \u026e\u026e \u026f\u026f\u0253\u025b\u025b\u025b\u025b\u0264\u0264   \u025d\u025d\u026d\u026d\u0273\u0266\u0266\u0266\u0247\u0247\u0247                     \u0274\u026b\u026b\u026b\u0255\u0255\u0241\u024f\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u0275\u0270\u0270\u025f\u025f\u0258\u01fe\u01fe\u01fe\u01fe\u01ff\u01ff\u01fa\u0276\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a      \u0259\u0259\u0259  \u0249\u0249\u01c9\u01ca\u01bb\u01cc   [...]
+  " \u0263\u0263\u0263    \u026e\u026e\u026f\u026f\u0253\u025b\u025b\u025b\u025b\u0279\u0279   \u025d\u025d\u025d\u0265\u027a\u027a\u027a\u0247\u0247                      \u027b\u0274\u0274\u026b\u026b\u0255\u0255\u0256\u0256\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u026c\u0270\u027c\u027c\u027d\u027d\u0208\u01fe\u01fe\u01fe\u01fe\u01ff\u01fa\u01fa      \u027e\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a \u0259\u0259\u0259  \u0249\u01c9\u01c9\u01ca\u01ca\u [...]
+  " \u0263\u0263      \u026f\u026f\u0253\u025b\u025b\u025b\u025b\u025b\u0279\u0279  \u025d\u0265\u0265\u0280\u027a\u027a\u027a\u0273                       \u027b\u0274\u026b\u026b\u026b\u0255\u0255\u0256\u0269\u025e\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u026c\u0270 \u027c\u027c\u027d \u0208\u0208\u01fe\u01fe\u01fe\u01fe\u01ff\u01fa\u0281     \u027e      \u026a\u026a\u026a\u026a\u026a\u026a\u026a\u026a\u0259\u0259  \u0249\u01c9\u01c9\u01ca\u01cc\u01cc\u0282\u0282\u027f\u0277\u0277 [...]
+  "\u0263\u0263      \u026f\u026f\u0253\u0253\u025b\u025b\u025b\u025b\u0279\u0279  \u025d\u0265\u0265\u0280\u0284\u0280\u0273\u027a\u0273\u0285                     \u027b\u0274\u026b\u026b\u0255\u0255\u0241\u0268\u0269\u025e\u025e\u025e\u0257\u0257\u0257    \u026c\u0275\u0270\u0270 \u0286\u0286\u027d  \u0287\u0208\u01fe\u01fe\u01fe\u01fe\u01ff\u01fa\u0281    \u027e\u027e      \u0288\u0288     \u026a\u026a\u0259\u0259  \u0249\u01c9\u0289\u0282\u0282\u028a\u028a\u027f\u0277\u0277\u0277\u02 [...]
+  "\u0263       \u026f\u0253\u0253\u025b\u025b\u025b\u025b\u028b\u0279  \u028c\u028c\u0265\u0284\u0284\u0284\u0284 \u0273\u0285\u0285\u0285                   \u027b\u0274\u026b\u026b\u0255\u0255\u0241\u0256\u0269\u025e\u025e\u0251\u0257\u0257     \u026c\u026c\u0270\u0270 \u0286\u0286\u027d\u027d   \u0208\u0208\u01fe\u01fe\u01fe\u01fe\u01ff\u01fa    \u027e\u027e      \u0288\u0288       \u0259\u0259\u0259  \u0282\u0282\u028a\u028a\u028a\u028a\u028a\u028d\u0277      \u0283\u0283\u0283\u0283 [...]
+  "\u0263      \u026f\u026f\u0253\u025b\u025b\u025b\u025b\u028b\u028b  \u028c\u028c\u028e\u0280\u0280\u0284     \u0285\u0285\u0285                 \u027b\u0274\u026b\u026b\u0255\u0255\u0256\u0256\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u026c\u0270\u0270 \u0286\u0286\u027d\u027d    \u0287\u0208\u0208\u01fe\u01fe\u01fe\u01ff\u01ff\u028f   \u027e\u027e      \u0288\u0288        \u0259\u0259\u0290\u0282\u028a\u028a\u028a\u028a\u028a\u028a\u0291\u0291        \u0283\u0283\u0283\u028 [...]
+  "      \u026f\u026f\u0253\u025b\u025b\u025b\u025b\u028b\u028b  \u0292\u028e\u0280\u0280\u0280\u0284     \u0293\u0293\u0285\u0285\u0285              \u027b\u0274\u026b\u026b\u026b\u0255\u0241\u0268\u024f\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u0275\u026c\u0270\u0270\u0286\u0286\u0286\u027d\u027d\u027d     \u0287\u0294\u01fe\u01fe\u01fe\u01fe\u01ff\u0295   \u027e\u027e      \u0288\u0288         \u0296\u0282\u028a\u028a\u028a\u028a\u028a\u0289\u01bb\u01bb\u0291     \u0297    \u0283 [...]
+  "     \u026f\u026f\u0253\u025b\u025b\u025b\u025b\u025b\u028b\u0279 \u0298\u0292\u0292\u0284\u0284\u0284    \u0293\u0293\u0293  \u0285\u0285             \u027b\u0274\u0274\u026b\u026b\u0255\u0255\u0241\u024f\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u0270\u0270 \u0286\u0286\u0286 \u027d\u027d      \u0287\u0294\u0294\u01fe\u01fe\u01fe\u01ff\u0295   \u027e\u027e      \u0288\u0288       \u0296\u0296\u0296\u0296\u028a\u028a\u028a\u0249\u0249\u0289\u0299\u01bb\u01bb     \u0297\u029 [...]
+  "    \u026f\u026f\u0253\u0253\u025b\u025b\u025b\u025b\u028b\u028b \u0298\u0298\u0292\u0280\u0284\u0284    \u0293\u0293\u0293    \u0285\u0285           \u027b\u0274\u026b\u026b\u026b\u0255\u0256\u0256\u0269\u025e\u025e\u025e\u0251\u0257     \u026c\u026c\u026c\u0270 \u0286\u0286\u0286 \u027d\u027d         \u0294\u01fe\u01fe\u01fe\u01fe\u01ff   \u027e       \u0288       \u0296\u0296\u0296\u0296\u029b\u029b   \u0249\u0289\u0289\u029c\u01bb\u01bb     \u029a\u029a        \u0283\u0283\u0283\u [...]
+  "    \u026f\u026f\u0253\u025b\u025b\u025b\u025b\u028b\u028b \u0298\u0292\u0292\u0280\u0280\u0284    \u0293\u0293\u0293      \u0285\u0285 \u029d\u029d      \u027b\u0274\u026b\u026b\u0255\u0241\u024e\u0268\u0269\u025e\u025e\u025e\u0251\u0257    \u026c\u0275\u026c\u0270\u0270 \u0286\u0286\u0286 \u027d\u027d          \u0294\u01fe\u01fe\u01fe\u01fe\u01ff\u01ff \u027e\u027e      \u0288\u0288     \u0296\u0296\u0296\u0296\u0296\u029b\u029b     \u0249\u0289\u029c\u0299\u01bb\u01bb     \u029a\u0 [...]
+  "\u029e  \u026f\u026f\u0253\u025b\u025b\u025b\u025b\u028b\u028b  \u0292\u0292\u0284\u0280\u0284    \u0293\u0293\u0293        \u0285\u029d\u029d      \u027b\u0274\u026b\u026b\u0255\u0255\u0241\u024f\u0269\u025e\u025e\u025e\u0257\u0257    \u026c\u026c\u0270\u0270\u0270\u0286\u0286\u0286   \u029f\u029f\u029f\u029f\u029f\u029f\u029f      \u0294\u01fe\u01fe\u01fe\u01ff\u01ff \u027e\u027e\u027e\u027e    \u0288\u0288    \u0296\u0296\u0296\u0296\u029b\u029b\u029b       \u0249\u0249\u0289\u01bb [...]
+  "\u029e\u029e\u026f\u026f\u0253\u025b\u025b\u025b\u025b\u028b\u028b\u0279 \u0298\u0292\u0292\u0284\u0284    \u0293\u0293\u0293         \u0285\u029d\u0285     \u0274\u0274\u026b\u026b\u0255\u0255\u0241\u0256\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u026c\u0270 \u0286\u0286\u0286  \u029f\u029f\u029f\u029f\u029f\u029f\u029f\u029f\u029f\u029f     \u0294\u01fe\u01fe\u01fe\u01fe\u01ff\u02a0\u027e\u027e\u027e\u027e\u027e\u027e\u027e\u027e\u0288\u0288   \u0296\u0296\u0296\u0296\u029 [...]
+  " \u029e\u026f\u0253\u025b\u025b\u025b\u025b\u025b\u028b\u028b \u0298\u0298\u0280\u0284\u0284    \u0293\u0293\u0293           \u0285\u0285\u0285  \u027b\u0274\u0274\u026b\u026b\u0255\u0255\u024e\u024f\u0250\u025e\u025e\u0251\u0257\u0257    \u026c\u026c\u0270\u0270 \u02a1\u0286\u02a2\u02a3\u029f\u029f\u029f\u029f      \u029f\u029f\u029f     \u0294\u01fe\u01fe\u01fe\u0295\u02a0     \u027e\u027e\u027e\u0288\u0288\u027e\u027e\u0296\u0296\u0296\u0296\u02a4\u02a4\u02a5\u02a5          \u0249\ [...]
+  " \u026f\u0253\u0253\u025b\u025b\u025b\u025b\u028b\u028b \u0298\u0292\u0292\u0280\u0284    \u0293\u0293\u0293             \u0285\u0285\u0285\u027b\u0274\u026b\u026b\u026b\u0255\u0255\u0241\u024f\u0250\u025e\u025e\u0251\u0257\u0257   \u026c\u026c\u0270\u0270 \u02a1\u02a1\u02a1\u02a1\u02a3\u02a3\u029f\u029f\u029f        \u029f\u029f\u029f     \u0294\u0294\u0294\u02a6\u02a6\u02a0         \u02a7\u02a7\u02a7\u0296\u02a4\u02a4\u02a4\u02a8\u02a8\u02a5\u02a9\u02a9\u02a9        \u0289\u0289\u02 [...]
+  "\u026f\u026f\u0253\u025b\u025b\u025b\u025b\u028b\u028b  \u0292\u0292\u0284\u0284    \u0293\u0293                 \u0285\u0274\u026b\u026b\u026b\u0255\u0241\u0256\u0256\u0250\u025e\u025e\u0251\u0257    \u026c\u026c\u026c\u02aa \u02a1\u02a1\u02a1\u02a3\u02a3\u02a3             \u029f\u029f\u029f    \u02ab\u0294\u02a6\u02a6\u02a6\u02a0        \u02a7\u02a7\u02a7\u02a7\u02ac\u02a4\u02a8\u02a8\u02a8\u02a8\u02a9\u02a9\u02a9\u02a9        \u0249\u0249\u0249\u0299\u01bb\u01bb     \u029a\u029a    [...]
+  "\u026f\u0253\u025b\u025b\u025b\u025b\u028b\u028b  \u0298\u0292\u0284\u0284    \u0293\u0293                 \u0285\u0274\u026b\u026b\u0255\u02ad\u02ad\u0256\u0269\u025e\u025e\u025e\u0251\u0257    \u026c\u026c\u02ae  \u02a1\u02a1\u02a1 \u02a3\u02a3               \u029f\u029f\u029f\u029f\u029f\u029f\u029f\u029f\u02a6\u02a6\u0294\u0295\u02a0      \u02a7\u02a7\u02a7\u02a7\u02ac\u02ac\u02af     \u02a5\u02a5\u02a9\u02a9        \u0249\u0289\u0289\u029c\u01bb\u01bb     \u029a\u029a             ", 
+  "\u0253\u025b\u025b\u025b\u025b\u025b\u028b\u028b \u0298\u0298\u0280\u0284\u0284  \u0293\u0293\u0293                 \u0285\u0274\u026b\u026b\u0255\u0255\u02ad\u0268\u0269\u025e\u025e\u025e\u0257\u0257    \u026c\u02aa\u02aa \u02b0\u02a1\u02a1\u02a1                    \u029f\u029f\u029f\u029f\u029f\u029f\u02ab\u0294\u0294\u0294\u0295\u028f     \u02a7\u02a7\u02a7\u02a7\u02a4\u02a4\u02af\u02af      \u02a5\u02a5\u02a9\u02a9        \u0249\u0289\u0299\u029c\u01bb\u01bb    \u029a\u029a\u029a  [...]
+  "\u0253\u025b\u025b\u025b\u025b\u028b\u028b \u0298\u0292\u0280\u0280\u0284  \u0293\u0293\u0293                \u0285\u0285\u0274\u026b\u026b\u0255\u0255\u02b1\u02b2\u02b3\u025e\u025e\u0251\u0257\u0257   \u026c\u026c\u026c\u02ae\u02b0\u02b0\u02b0\u02a1\u02a1                            \u02ab\u0294\u0294\u0294\u0295\u02a0   \u02a7\u02a7\u02a7\u02a7\u02a4\u02a4 \u02af\u02af       \u02a5\u02a5\u02a9\u02a9        \u0289\u0289\u0289\u01bb\u01bb\u01bb    \u029a\u029a\u029a           ", 
+  "\u025b\u025b\u025b\u025b\u028b\u028b  \u0292\u0292\u0284\u0284  \u0293\u0293\u0293               \u0285\u0285\u0285\u0274\u026b\u026b\u02b4\u02b4\u02b1\u02b5\u02b6\u02b6\u025e\u0251\u0257\u0257   \u026c\u026c\u02aa\u02aa\u02b0\u02b0\u02b0\u02a1\u02a1                             \u02ab\u02ab\u0294\u0294\u0294\u0295\u02a0 \u02a7\u02a7\u02a7\u02a7\u02a4\u02a4  \u02af\u02af        \u02a5\u02a5\u02a9\u02a9        \u0289\u0249\u0299\u01bb\u01bb     \u029a\u029a           ", 
+  "\u025b\u025b\u025b\u028b\u028b  \u0298\u0292\u0284\u0284  \u0293\u0293\u0293              \u0285\u0285\u0285\u0285\u0274\u026b\u026b\u02b4\u02b4\u02b2\u02b3\u02b3\u02b7\u02b7\u02b7\u0257\u0257  \u026c\u026c\u02aa\u02aa \u02b0\u02b0\u02b0 \u02a1\u02a1                              \u02ab\u02ab\u0294\u0294\u0295\u0295\u028f\u02a7\u02a7\u02a7\u02a4\u02a4   \u02af\u02af        \u02a5\u02a5\u02a9\u02a9\u02a9        \u0289\u0289\u029c\u01bb\u01bb     \u029a\u029a          ", 
+  "\u025b\u025b\u028b\u028b  \u0298\u0298\u0280\u0284  \u0293\u0293\u0293              \u0285\u0285\u0285 \u026b\u026b\u02b4\u02b4\u0255\u02b2\u02b2\u02b3\u02b8\u02b7\u02b7\u0257\u0257 \u026c\u026c\u026c\u026c\u02aa \u02b0\u02b0\u02b0  \u02a1\u02a1                              \u02ab\u02ab\u0294\u0294\u0294\u0295\u02a7\u02a7\u02a7\u02a4\u02a4\u02b9\u02b9\u02ba\u02ba\u02ba\u02af         \u02a5\u02a5\u02a9\u02a9\u02a9        \u0289\u0289\u02bb\u01bb\u01bb     \u029a          ", 
+  "\u025b\u025b\u028b\u028b \u0298\u0292\u0280\u0280\u0284 \u0293\u0293\u0293                \u0285 \u0274\u026b\u026b\u02b4\u0255\u02b5\u02b5\u02b6\u02b7\u02b7\u0257\u0257 \u026c\u026c\u02aa\u026c\u02aa  \u02b0\u02b0\u02b0   \u02a1                                \u02ab\u02ab\u0294\u0294\u0294\u02a7\u02a7\u02bc\u02bc\u02a4\u02b9\u02b9\u02ba\u02ba\u02ba\u02af\u02af\u02af\u02af\u02af\u02af\u02af\u02af   \u02a5\u02a5\u02a9\u02a9\u02a9        \u02bd\u02bd\u02be\u01bb\u01bb               ", 
+  "\u025b\u028b\u028b \u0298\u0292\u0292\u0284\u0284 \u0293\u0293\u0293                 \u0285\u0274\u026b\u026b\u02b4\u0255\u02b3\u02b5\u02b6\u02b7\u02b7\u0257\u0257\u0257\u026c\u02bf\u02bf\u02aa   \u02b0\u02b0    \u02a1\u02a1                       \u02c0\u02c0        \u02ab\u02ab\u0294\u02c1\u02c1\u02c2\u02bc\u02bc\u02a4       \u02af\u02af\u02af\u02af\u02af\u02af\u02af\u02af\u02af\u02af\u02af\u02af\u02a9\u02a9\u02a9       \u02bd\u02bd\u02bd\u02be\u01bb\u01bb              ", 
+  "\u028b\u028b  \u0298\u0292\u0284\u0284 \u0293\u0293                   \u0285\u026b\u02b4\u02b4\u0255\u02b3\u02b3\u02b8\u02b7\u0257\u0257\u0257\u02bf\u02bf\u02bf\u02bf   \u02b0\u02b0\u02b0     \u02a1\u02a1                        \u02c0\u02c0       \u02ab\u02ab\u0294\u02c1\u02c1\u02c1\u02c1\u02c3\u02a0\u02a0             \u02af\u02af\u02af\u02af\u02a5\u02a5\u02a9\u02a9\u02c4       \u0289\u02bd\u029c\u01bb\u01bb\u01bb             ", 
+  "\u028b  \u0298\u0298\u0280\u0284  \u0293                    \u02b4\u02b4\u02b4\u0255\u02b6\u02b6\u02b8\u02b8\u0257\u0257\u02bf\u02bf\u02bf\u02aa\u02aa   \u02b0\u02b0\u02b0     \u02a1\u02a1                          \u02c0\u02c0       \u02ab\u02c5\u02c1\u02c1\u02c1\u02c1\u02c1\u02c6\u02c6\u02c6\u02c6              \u02c7\u02c4\u02a5\u02a5\u02a9\u02a9\u02c4   \u02c8\u02c8  \u0289\u0289\u02bb\u02bb\u01bb             ", 
+  "\u028b \u0298\u0292\u0280\u0280                       \u02b4\u02b4\u02b4\u0255\u02b6\u02b6\u02b6\u0257\u0257\u026c\u026c\u026c\u02bf\u02aa    \u02b0\u02b0\u02b0     \u02a1\u02a1                           \u02c0\u02c0\u02c0       \u02c5\u02c5\u02c1\u02c1\u02c1\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6          \u02c7\u02c7\u02c7\u02a5\u02a5\u02c4\u02a9\u02a9\u02c4 \u02c8\u02c8\u02c8   \u02bd\u02bd\u02be\u01bb\u01bb            ", 
+  " \u0298\u0292\u0292\u0284\u0284                      \u02b4\u02b4\u0255\u0255\u02c9\u02c9\u02b6\u0257\u026c\u026c\u02aa\u026c\u02aa     \u02b0\u02b0\u02b0    \u02a1\u02a1\u02a1                             \u02c0\u02c0\u02c0     \u02ca\u02c5\u02c5\u02cb\u02cb\u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c7\u02c7  \u02a5\u02cd\u02c4\u02a9\u02a9\u02c8\u02c8\u02c8    \u0289\u02bd\u0299\u02be\u01bb\u01bb           ", 
+  " \u0298\u0292\u0284\u0284                      \u02b4\u02b4\u0255\u0255\u02ce\u02c9\u02c9\u02cf\u026c\u026c\u026c\u02aa      \u02b0\u02b0\u02b0    \u02a1\u02a1\u02a1                               \u02c0\u02c0    \u02ca\u02d0\u02c5\u02cb\u02cb\u02cb\u02d1\u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02d2\u02c6\u02c6\u02c6\u02c6\u02c6\u02cd\u02cd\u02c4\u02c8\u02c8       \u0289\u0289\u0299\u02bb\u02bb\u01bb          ", 
+  "\u0298\u0298\u0280\u0284                      \u02b4\u02b4\u02b4\u0255\u02d3\u02ce\u02cf\u026c\u02aa\u026c\u026c       \u02b0\u02b0     \u02a1\u02a1\u02a1                                 \u02c0\u02c0  \u02ca\u02ca\u02d0\u02c5\u02cb\u02cb\u02cb \u02cc\u02cc\u02cc\u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02d2\u02d2\u02c6\u02c6\u02c6\u02c6\u02c6\u02cd\u02cd\u02c4\u02a9\u02a9\u02a9       \u0289\u0289\u029c\u02bb\u02bb\u01bb         ", 
+  "\u0292\u0280\u0280                     \u02b4\u02b4\u02b4\u0255\u02ce\u02ce\u02ce\u02cf\u026c\u026c\u02aa\u02aa      \u02b0\u02b0\u02b0     \u02a1\u02a1\u02a1                                  \u02c0\u02c0  \u02d0\u02d0\u02d0\u02cb\u02cb\u02cb    \u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02d2\u02d2\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02cd\u02cd\u02c6\u02a9\u02a9\u02c4       \u0289\u0289\u0299\u01bb\u01bb\u01bb        ", 
+  "\u0292\u0284                     \u02b4\u02b4\u02b4\u0255\u02ce\u02ce\u02d3\u026c\u026c\u026c\u02aa        \u02b0\u02b0    \u02a1\u02a1\u02a1                                    \u02c0\u02c0  \u02ca \u02c5\u02cb\u02cb\u02cb      \u02cc\u02d1\u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02d2\u02d2\u02cc\u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02cd\u02cd\u02c6\u02c6\u02c6\u02a9\u02c4       \u0289\u0289\u029c\u01bb\u01bb\u01bb       ", 
+  "\u0284\u0284                    \u02b4\u02b4\u02b4\u0255\u02ce\u02d3\u02d3\u026c\u02aa\u026c\u02aa              \u02a1\u02a1\u02a1                                            \u02cb\u02cb          \u02d1\u02d1\u02d1\u02d1\u02d1\u02d1\u02d1\u02d1\u02d2\u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02cc\u02c6\u02cd\u02cd\u02c6\u02c6\u02c6\u02a9\u02c4      \u0289\u0289\u0299\u029c\u01bb\u01bb\u01bb      ", 
+  "\u0284                    \u02b4\u02b4\u02b4  \u02d3\u02d3\u026c\u026c\u02aa               \u02a1\u02a1\u02a1                                                                        \u02cc\u02cc\u02cc\u02cd\u02cd\u02c6\u02c6\u02c6\u02c6\u02c6\u02c4      \u0289\u0289\u029c\u029c\u01bb\u01bb      ", 
+  "                    \u02b4\u02b4\u0255 \u02d3\u02d3\u02d3\u026c\u026c\u026c               \u02a1\u02a1\u02a1                                                                           \u02cc\u02cd\u02cd\u02c6\u02c6\u02c6\u02c6\u02c6\u02c6\u02c4      \u0289\u0289\u0299\u029c\u01bb\u01bb     ", 
+  "                   \u02b4\u02b4\u0255 \u02d3\u02d3\u02d3\u026c\u026c\u02aa               \u02a1\u02a1                                                                               \u02cc\u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c4\u02c4     \u0289\u0289\u029c\u029c\u01bb\u01bb    ", 
+  "                  \u02b4\u02b4\u0255 \u02d3\u02d3\u026c\u026c\u02aa\u02aa               \u02a1\u02a1                                                                                  \u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c4\u02c4    \u0289\u0289\u0299\u029c\u01bb\u01bb\u01bb   ", 
+  "                 \u02b4\u02b4\u02b4 \u02d3\u02d3\u026c\u026c\u026c\u02aa               \u02a1\u02a1                                                                                    \u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c4     \u0289\u0289\u0289\u029c\u01bb\u01bb   ", 
+  "                \u02b4\u02b4\u02b4 \u02d3\u02d3\u026c\u026c\u02aa                 \u02a1                                                                                      \u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02c4     \u0289\u0289\u0299\u029c\u01bb\u01bb  ", 
+  "                \u02b4\u02b4 \u02d3\u02d3\u026c\u02aa\u02aa                                                                                                          \u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02a9     \u0289\u0289\u029c\u029c\u01bb\u01bb ", 
+  "                 \u02d3\u02d3\u02d3\u026c\u026c\u026c                                                                                                            \u02cc\u02cc\u02c6\u02c6\u02c6\u02c6\u02c6\u02a9     \u0289\u0289\u029c\u01bb\u01bb "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/road-casings-non-grouped-rendering-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/road-casings-non-grouped-rendering-600-600-1.0-grid-reference.json
new file mode 100644
index 0000000..8daef1b
--- /dev/null
+++ b/tests/visual_tests/grids/road-casings-non-grouped-rendering-600-600-1.0-grid-reference.json
@@ -0,0 +1,892 @@
+{
+ "keys": [
+  "", 
+  "330", 
+  "155", 
+  "74", 
+  "57", 
+  "749", 
+  "788", 
+  "201", 
+  "202", 
+  "181", 
+  "691", 
+  "774", 
+  "228", 
+  "46", 
+  "523", 
+  "73", 
+  "530", 
+  "384", 
+  "286", 
+  "385", 
+  "1", 
+  "156", 
+  "644", 
+  "361", 
+  "531", 
+  "43", 
+  "449", 
+  "93", 
+  "328", 
+  "527", 
+  "605", 
+  "589", 
+  "288", 
+  "215", 
+  "635", 
+  "532", 
+  "588", 
+  "154", 
+  "138", 
+  "287", 
+  "637", 
+  "638", 
+  "529", 
+  "576", 
+  "362", 
+  "348", 
+  "45", 
+  "639", 
+  "497", 
+  "300", 
+  "329", 
+  "237", 
+  "600", 
+  "137", 
+  "534", 
+  "636", 
+  "595", 
+  "103", 
+  "14", 
+  "180", 
+  "232", 
+  "593", 
+  "104", 
+  "353", 
+  "526", 
+  "592", 
+  "594", 
+  "136", 
+  "352", 
+  "327", 
+  "323", 
+  "203", 
+  "490", 
+  "415", 
+  "442", 
+  "342", 
+  "258", 
+  "528", 
+  "596", 
+  "599", 
+  "157", 
+  "343", 
+  "331", 
+  "257", 
+  "598", 
+  "412", 
+  "313", 
+  "335", 
+  "277", 
+  "89", 
+  "597", 
+  "344", 
+  "431", 
+  "276", 
+  "126", 
+  "113", 
+  "108", 
+  "107", 
+  "591", 
+  "590", 
+  "407", 
+  "414", 
+  "147", 
+  "372", 
+  "369", 
+  "413", 
+  "337", 
+  "124", 
+  "122", 
+  "110", 
+  "174", 
+  "406", 
+  "75", 
+  "82", 
+  "83", 
+  "99", 
+  "97", 
+  "72", 
+  "278", 
+  "173", 
+  "472", 
+  "481", 
+  "336", 
+  "159", 
+  "153", 
+  "100", 
+  "102", 
+  "96", 
+  "200", 
+  "266", 
+  "265", 
+  "263", 
+  "269", 
+  "231", 
+  "446", 
+  "371", 
+  "66", 
+  "409", 
+  "410", 
+  "315", 
+  "179", 
+  "182", 
+  "419", 
+  "392", 
+  "391", 
+  "390", 
+  "525", 
+  "417", 
+  "411", 
+  "183", 
+  "479", 
+  "473", 
+  "146", 
+  "475", 
+  "474", 
+  "401", 
+  "421", 
+  "445", 
+  "356", 
+  "483", 
+  "480", 
+  "551", 
+  "583", 
+  "325", 
+  "324", 
+  "476", 
+  "582", 
+  "364", 
+  "389", 
+  "393", 
+  "839", 
+  "724", 
+  "440", 
+  "227", 
+  "620", 
+  "462", 
+  "477", 
+  "268", 
+  "267", 
+  "225", 
+  "464", 
+  "16", 
+  "271", 
+  "535", 
+  "463", 
+  "299", 
+  "693", 
+  "261", 
+  "270", 
+  "247", 
+  "548", 
+  "467", 
+  "465", 
+  "422", 
+  "241", 
+  "466", 
+  "238", 
+  "239", 
+  "246", 
+  "489", 
+  "634", 
+  "671", 
+  "333", 
+  "326", 
+  "488", 
+  "482", 
+  "633", 
+  "448", 
+  "243", 
+  "248", 
+  "461", 
+  "460", 
+  "332", 
+  "378", 
+  "577", 
+  "484", 
+  "471", 
+  "381", 
+  "25", 
+  "188", 
+  "355", 
+  "470", 
+  "565", 
+  "469", 
+  "334", 
+  "379", 
+  "284", 
+  "279", 
+  "175", 
+  "667", 
+  "562", 
+  "380", 
+  "665", 
+  "550", 
+  "373", 
+  "354", 
+  "632", 
+  "485", 
+  "570", 
+  "363", 
+  "575", 
+  "673", 
+  "585", 
+  "131", 
+  "404", 
+  "285", 
+  "587", 
+  "78", 
+  "145", 
+  "85", 
+  "41", 
+  "773", 
+  "739", 
+  "478", 
+  "87", 
+  "121", 
+  "40", 
+  "358", 
+  "226", 
+  "260", 
+  "283", 
+  "687", 
+  "690", 
+  "486", 
+  "133", 
+  "672", 
+  "95", 
+  "322", 
+  "321", 
+  "195", 
+  "264", 
+  "194", 
+  "177", 
+  "396", 
+  "359", 
+  "402", 
+  "55", 
+  "686", 
+  "619", 
+  "15", 
+  "382", 
+  "397", 
+  "319", 
+  "735", 
+  "212", 
+  "236", 
+  "282", 
+  "280", 
+  "618", 
+  "615", 
+  "614", 
+  "403", 
+  "376", 
+  "59", 
+  "204", 
+  "786", 
+  "640", 
+  "641", 
+  "375", 
+  "374", 
+  "400", 
+  "320", 
+  "58", 
+  "199", 
+  "692", 
+  "584", 
+  "377", 
+  "395", 
+  "405", 
+  "398", 
+  "56", 
+  "579", 
+  "670", 
+  "31", 
+  "357", 
+  "505", 
+  "493", 
+  "784", 
+  "741", 
+  "743", 
+  "50", 
+  "92", 
+  "38", 
+  "213", 
+  "847", 
+  "492", 
+  "841", 
+  "254", 
+  "747", 
+  "827", 
+  "568", 
+  "39", 
+  "53", 
+  "439", 
+  "224", 
+  "607", 
+  "5", 
+  "61", 
+  "158", 
+  "840", 
+  "438", 
+  "214", 
+  "835", 
+  "753", 
+  "223", 
+  "626", 
+  "22", 
+  "13", 
+  "838", 
+  "302", 
+  "54", 
+  "52", 
+  "708", 
+  "769", 
+  "697", 
+  "165", 
+  "118", 
+  "62", 
+  "494", 
+  "491", 
+  "301", 
+  "9", 
+  "222", 
+  "622", 
+  "423", 
+  "296", 
+  "317", 
+  "318", 
+  "252", 
+  "631", 
+  "495", 
+  "304", 
+  "710", 
+  "762", 
+  "36", 
+  "123", 
+  "308", 
+  "760", 
+  "630", 
+  "621", 
+  "674", 
+  "2", 
+  "3", 
+  "253", 
+  "255", 
+  "846", 
+  "77", 
+  "316", 
+  "771", 
+  "628", 
+  "453", 
+  "291", 
+  "383", 
+  "722", 
+  "564", 
+  "295", 
+  "292", 
+  "365", 
+  "830", 
+  "845", 
+  "617", 
+  "624", 
+  "666", 
+  "662", 
+  "581", 
+  "42", 
+  "294", 
+  "726", 
+  "694", 
+  "627", 
+  "654", 
+  "661", 
+  "456", 
+  "48", 
+  "47", 
+  "716", 
+  "732", 
+  "836", 
+  "623", 
+  "507", 
+  "629", 
+  "606", 
+  "651", 
+  "571", 
+  "580", 
+  "574", 
+  "572", 
+  "293", 
+  "837", 
+  "613", 
+  "457", 
+  "65", 
+  "459", 
+  "23", 
+  "758", 
+  "834", 
+  "764", 
+  "831", 
+  "780", 
+  "144", 
+  "125", 
+  "719", 
+  "844", 
+  "184", 
+  "616", 
+  "679", 
+  "681", 
+  "458", 
+  "833", 
+  "713", 
+  "825", 
+  "166", 
+  "139", 
+  "682", 
+  "17", 
+  "511", 
+  "509", 
+  "29", 
+  "832", 
+  "770", 
+  "772", 
+  "766", 
+  "768", 
+  "689", 
+  "842", 
+  "220", 
+  "610", 
+  "675", 
+  "518", 
+  "63", 
+  "26", 
+  "27", 
+  "219", 
+  "221", 
+  "506", 
+  "677", 
+  "120", 
+  "714", 
+  "498", 
+  "680", 
+  "35", 
+  "730", 
+  "738", 
+  "678", 
+  "676", 
+  "573", 
+  "37", 
+  "443", 
+  "740", 
+  "717", 
+  "502", 
+  "642", 
+  "130", 
+  "444", 
+  "703", 
+  "742", 
+  "826", 
+  "501", 
+  "503", 
+  "142", 
+  "117", 
+  "18", 
+  "28", 
+  "731", 
+  "745", 
+  "767", 
+  "90", 
+  "569", 
+  "70", 
+  "20", 
+  "715", 
+  "808", 
+  "170", 
+  "727", 
+  "515", 
+  "514", 
+  "521", 
+  "755", 
+  "191", 
+  "185", 
+  "684", 
+  "557", 
+  "516", 
+  "513", 
+  "522", 
+  "311", 
+  "234", 
+  "556", 
+  "519", 
+  "517", 
+  "701", 
+  "310", 
+  "545", 
+  "450", 
+  "699", 
+  "696", 
+  "733", 
+  "350", 
+  "211", 
+  "520", 
+  "303", 
+  "725", 
+  "736", 
+  "702", 
+  "823", 
+  "210", 
+  "64", 
+  "816", 
+  "822", 
+  "820", 
+  "349", 
+  "524", 
+  "140", 
+  "345", 
+  "746", 
+  "815", 
+  "814", 
+  "189", 
+  "192", 
+  "190", 
+  "555", 
+  "135", 
+  "24", 
+  "705", 
+  "744", 
+  "698", 
+  "813", 
+  "193", 
+  "553", 
+  "538", 
+  "546", 
+  "643", 
+  "33", 
+  "34", 
+  "510", 
+  "721", 
+  "818", 
+  "712", 
+  "707", 
+  "539", 
+  "750", 
+  "795", 
+  "817", 
+  "12", 
+  "351", 
+  "559", 
+  "603", 
+  "601", 
+  "604", 
+  "794", 
+  "793", 
+  "783", 
+  "683", 
+  "206", 
+  "544", 
+  "76", 
+  "734", 
+  "819", 
+  "781", 
+  "789", 
+  "32", 
+  "706", 
+  "805", 
+  "785", 
+  "787", 
+  "297", 
+  "235", 
+  "105", 
+  "44", 
+  "542", 
+  "759", 
+  "765", 
+  "807", 
+  "791", 
+  "711", 
+  "290", 
+  "347", 
+  "289", 
+  "536", 
+  "51", 
+  "757", 
+  "728", 
+  "811", 
+  "810", 
+  "852", 
+  "425", 
+  "160", 
+  "430", 
+  "169", 
+  "778", 
+  "704", 
+  "504", 
+  "779", 
+  "709", 
+  "134", 
+  "98", 
+  "4", 
+  "541", 
+  "346", 
+  "809", 
+  "339", 
+  "305", 
+  "685", 
+  "148", 
+  "540", 
+  "752", 
+  "341", 
+  "167", 
+  "162", 
+  "163", 
+  "149", 
+  "754", 
+  "748", 
+  "340", 
+  "10", 
+  "168", 
+  "67", 
+  "828", 
+  "824", 
+  "782", 
+  "688", 
+  "109", 
+  "554", 
+  "763", 
+  "756", 
+  "428", 
+  "112", 
+  "68", 
+  "496", 
+  "127", 
+  "229", 
+  "128", 
+  "161", 
+  "761", 
+  "829", 
+  "132", 
+  "249", 
+  "176", 
+  "561", 
+  "306", 
+  "537", 
+  "111", 
+  "171", 
+  "307", 
+  "432", 
+  "309", 
+  "19", 
+  "164", 
+  "250", 
+  "178", 
+  "695", 
+  "129", 
+  "116", 
+  "804", 
+  "775", 
+  "197", 
+  "360", 
+  "21", 
+  "802", 
+  "800", 
+  "806", 
+  "803", 
+  "801", 
+  "799", 
+  "797", 
+  "798", 
+  "217", 
+  "216", 
+  "718", 
+  "69", 
+  "150", 
+  "7", 
+  "790", 
+  "338", 
+  "843", 
+  "720", 
+  "152", 
+  "151", 
+  "86", 
+  "8", 
+  "207", 
+  "796", 
+  "233", 
+  "88", 
+  "218", 
+  "560", 
+  "209", 
+  "6", 
+  "777", 
+  "452", 
+  "208", 
+  "172", 
+  "776", 
+  "558", 
+  "451"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                       !                   ##$          %%&''       (               ))      ***                       ", 
+  "                                                       !                   ##$          %%+',      (              )))      **  -                      ", 
+  "                                                       !!                  #.$         %%&+'       (            )))      **    -                      ", 
+  "   /                          0                         !                  #.$         %%&',      (           )))      **     -                       ", 
+  "   /            1             0                         !                  #.$     2  %%&+',      (          ))3     ***     -                        ", 
+  "   /            1             00                        !!                 #.$ 4   2  %%&',      (         )) 33    **      --                        ", 
+  "  /             1             000                        !                 #.$ 4 222 %%&+',55    (        ))  3   **       --                         ", 
+  "  /            1             66700                       !      8888      ##.$4  22  %%&',555   (        ))  3  **       --                           ", 
+  "  /            1            99667000                     !   888          #..$4 222 :%%+',55;   (      ))   33***      --                             ", 
+  "  /            1           99  667700                    !   8           ##.$$4 22 :%%&', 55    (     ))   33**      --                               ", 
+  "  /           1           99    66770<0                  !    8          ##.$=422  :%%+',55;    (    ))  **3       --                                 ", 
+  "  />>>     ?  1           9@@    667<<000                !!   8          #..$=422 :%%&',,55;    (   )) A**3 -------                   BBBB            ", 
+  "  /  C>>>> ?  D          9   @E EE66F  0000               !   8         ##.GG=42 ::%%+',555     (   )  H 3---                        BB  BB           ", 
+  "  /  CI J>>KKK DDDD     9   E EEE ELFFF  000              !   MMMMMMNN  #O.G=   ::%%&+ ,55;     (  )  *  3-                         B                 ", 
+  " //PPPPPJ  Q      DDDDD99  E  EE  L  FFF   000            !   R    R  N## GGS: :::%&+',555      ( )) **TT                         BB                  ", 
+  " / PC IJPPQ           DD  EE EE  UUU   FFF  0000          !   R    R   #VVGS.::::%%&' ,55;       ()  TT -                 BBBBBBBBB                   ", 
+  "W/ PXXIJP Q              EE  E   YYUUU  FFF   000         !   R    R  ZZ VSS[:::%%&+', 55        ) TT] -                BB   ^                        ", 
+  "//PPP  JP Q              E  E   __YYY UU  FFF   000       !   R    R  ZZ``Saa[[ %%&' ,555       ))TT]  -              BB     ^                        ", 
+  "bb C PPPPQ               E E    c __ YY U  dFF    ee0     !    R  RR  Z``fg  [[[%%&',,55       hh T ] -               B      ^^                       ", 
+  "/bbbb J  Q                EE  LLLcc ___YY dd FFF  e000    !     RRR  ZZ``fg   [[%&+',555      hhiT  ] -              B        ^^                      ", 
+  "     bbbbQ                   j kkk ccc__  d    FFFe  000 !!l         ZZ`mmmmm [%%&+ ,555    hh  iT  ] -              B         nnn                    ", 
+  "        o                   jj    kkkccc  d  p  qFFF   00r lll       Z``stttmm[%%+', 55    hh   iT  ]]-              B         uun                    ", 
+  "        o                  jj       kkkk d  vvppq FFFF  rr00llllll  wZ` sx  tm%%&+',55;y hh     iT   ]z--            B         ^ u          {{{{{{{{{{", 
+  "       oo              jjjjj           kkd ||vvvqpp  FFFr 0000llll  ZZ` s}}}m[%%&'~,55 yyh      iT \u007f\u007f\u007f zzzzzz---     B    {{{{{{\u0080{{{{{{{{{{{{{\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081", 
+  "       o               j                  kk|||qvv pp  rrFF 00000l  Z`` ssssm[%%&',555 hh       iT\u007f\u007f    \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083{{{{{{{{{{\u0081\u0081\u0081\u0081\u0081\u0080\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081  ", 
+  "       o              j                    kkk q| vv\u0084\u0085\u0086\u0087 FFF\u0088\u0088\u008800000Z`\u0089\u008a\u008bx \u008cm%%&+',55\u008d\u008dh\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008f\u008f\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0081\u0090\u0081\u0081                   ", 
+  "      o              j                        kq |||\u0084\u0084\u0091\u0087\u0086\u0086  \u0092\u0088\u0088\u0088\u0088\u0088\u0088\u0093\u0094`\u0095\u0095\u0095\u0095\u0095\u0095\u0095\u0096\u0096\u0096+\u0096,\u0096\u0096\u0096\u008d\u008d\u0082\u0082\u0082\u0082\u0082\u0097\u0097\u0097\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e\u0098 --      \u0099          \u0090                    ", 
+  "      o             jj        \u009a\u009b\u009a               kkk| \u009c\u0087\u0091\u0091 \u0086\u0086  \u0092\u0092\u009d\u009d\u0088\u0088\u009e\u009f\u009f\u009f\u009f\u009f\u009f\u009f\u00a0\u00a0\u00a0&+\u00a0,\u00a0\u00a0\u0097\u0097\u00a1\u0097\u0097\u0097\u0097    \u00a2\u00a3\u00a4\u00a5\u00a5\u00a6  \u00a7\u00a7\u00a7\u00a7---       \u0099\u0099         \u0090                    ", 
+  "      o            jj        \u009a\u009a\u009b \u009a\u009a\u009a              k   \u0087\u009c \u0091     k\u00a8\u009d\u00a9\u00aa\u009e\u00ab\u00ab\u00acx\u00ad  %%%&',55   \u00ae        \u00a2\u00a3  \u00af\u00af\u00a6\u00a7--             \u0099         \u0090                    ", 
+  "     o             j         \u009a \u009b   \u009a             kkkkkkkkkk\u00b0kkk  \u009d\u009d\u009e\u009e\u00b1\u00b2 x\u00b3  %%&&',55   \u00ae        \u00a2\u00a3 \u00af  -                \u0099\u0099         \u0090                   ", 
+  "\u00b4\u00b4\u00b4  o            j         \u009a  \u009b                           \u00b5    \u00b6\u00a8\u009d\u009e\u009e\u00b1\u00b2x \u00ad\u00b3 %%&+',55   \u00ae        \u00a2\u00a3\u00b7\u00af  -                 \u0099         \u0090                   ", 
+  "  \u00b4\u00b4\u00b4o           j         \u009a\u009a \u009b\u009b         \u00b8\u00b9                \u00b5    \u00b6\u00a8\u00ba\u009e \u00b1\u00b2x\u00ad \u00b3%%%&+',55   \u00ae        \u00a2\u00a3\u00b7\u00af  -                 \u0099          \u0090                  ", 
+  "     \u00b4\u00b4\u00b4        jj        \u009a\u009a  \u009b   \u00bb\u00bc     \u00b8\u00b9\u00b9\u00b9          \u00bd\u00bd\u00bd\u00bd\u00be    \u00bf\u00ba\u00ba\u009e\u00b1 \u00b2x\u00ad\u00b3 %%%&+',5\u00c0   \u00ae        \u00a2 \u00a3\u00b7\u00af -                  \u0099         \u0090                  ", 
+  "\u00c1       \u00b4\u00b4\u00b4    jj         \u009a   \u009b  \u00bb  \u00bc\u00bc\u00bc  \u00c2   \u00b9\u00b9     \u00bd\u00bd\u00bd    \u00be    \u00bf\u00ba\u009e\u009e\u00b1\u00b2 x\u00ad\u00b3 %% &+'55\u00c0   \u00ae        \u00a2\u00a2\u00a3\u00b7\u00b7\u00af -                 \u0099         \u0090                  ", 
+  " \u00c1\u00c1       \u00b4\u00b4   j         \u009a\u00c3   \u009b\u009b\u009b\u00bb    \u00c4\u00c4\u00c2\u00b8     \u00b9   \u00c5       \u00c6   \u00bf\u00bf\u00ba\u009e \u00b1\u00b2x\u00ad\u00ad\u00b3 %% &+'55\u00c0    \u00ae        \u00a2\u00a3\u00a3\u00b7\u00b7\u00af-                  \u0099         \u0090                 ", 
+  "  \u00c1\u00c1          j         \u009a\u009a\u00c3     \u009b\u00c7\u00c7    \u00c8  \u00b8\u00b8\u00b8\u00b8\u00b8\u00b9   \u00c5       \u00c6   \u00bf\u00c9\u00ba\u009e \u00ca\u00ca\u00b2\u00cb\u00b3\u00b3 %% \u00cc\u00cd,55 \u00ce   \u00ae        \u00a2 \u00a3 \u00b7\u00cf\u00cf-                 \u0099         \u0090                 ", 
+  "   \u00c1\u00d0\u00d0\u00d0   jj j         \u009a\u009a\u00c3\u00c3\u00d1\u00d1\u00d1\u00d1\u00d1\u00bb\u00d1 \u00d2\u00c7  \u00c8      \u00b9    \u00c5      \u00c6\u00c6   \u00bf\u00ba\u00ba\u009e   \u00b2\u00cb\u00b3 %%%&\u00cc',55 \u00ce   \u00ae        \u00a2\u00a2\u00d3\u00d3\u00d4\u00d5 --                 \u0099         \u0090                ", 
+  "     \u00c1\u00c1\u00d0\u00d0j  jj         \u009a\u00d1\u00d1\u00c3     \u00d6\u00d1\u00d1\u00d2 \u00c7\u00c8       \u00b9    \u00c5      \u00c6    \u00bf\u00ba\u009e\u009e   x\u00cb\u00ad \u00d7%%&\u00cc',55 \u00ce   \u00ae\u00ae        \u00a2\u00d8\u00d3 \u00d5\u00d5 -                 \u0099         \u0090                ", 
+  "      \u00c1\u00c1 \u00d0\u00d0           \u009a\u00d1\u00d1 \u00c3\u00c3\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00da \u00d1\u00d1\u00c8       \u00b9    \u00c5      \u00c6   \u00db\u00bf\u00ba\u009e   x\u00cb\u00ad  %%%&\u00dc',55\u00ce\u00c0    \u00ae        \u00a2\u00a2\u00dd\u00de \u00d5  -              \u00df\u00df\u0099\u0099        \u0090                ", 
+  "       \u00c1\u00c1 \u00d0\u00d0         \u009a\u00e0\u00d1 \u00d9\u00d9    \u00e1 \u00d9\u00d9\u00d9 \u00e2\u00d1\u00d1      \u00b9    \u00c5     \u00e3\u00c6   \u00bfx\u00ba\u009e   x\u00cb\u00ad \u00d7%% &\u00dc',55  \u00c0   \u00ae         \u00a2 \u00de\u00de \u00d5  -            \u00e4\u00df  \u0099         \u0090               ", 
+  "         \u00c1 \u00d0\u00d0       \u009a\u009a\u00d1\u00e0\u00e0\u00e0   \u00e5\u00e5\u00e1\u00e5   \u00d9\u00e2  \u00d1    \u00b9    \u00c5       \u00c6   \u00bf\u00ba\u00ba\u009e   x\u00cb\u00ad \u00d7%% &\u00cc',55  \u00c0   \u00ae         \u00a2\u00a2 \u00dd\u00dd \u00d5  --         \u00e6\u00e7\u00e8  \u0099\u0099        \u0090               ", 
+  "         \u00c1   \u00e9      \u009a \u00d1\u00ea\u00ea\u00ea  \u00e5    \u00e5\u00e5 \u00eb\u00d9\u00d9  \u00d1   \u00b9    \u00ec\u00ec     \u00ed    \u00bf\u00ba\u009e\u009e   x\u00cb\u00ad \u00d7%% &\u00dc',55  \u00c0    \u00ae         \u00a2   \u00dd\u00dd\u00dd  --        \u00e6\u00e6\u00e7\u00e8  \u0099         \u0090              ", 
+  "        \u00c1\u00c1    \u00e9\u00ee   \u00ef\u009a \u00d1\u00f0\u00f0\u00d9 \u00e5\u00e5      \u00eb\u00e5 \u00d9\u00d9 \u00d1\u00d1  \u00b9    \u00f1\u00f1\u00ec\u00ec\u00ec  \u00ed    \u00bf\u00ba\u009e\u009e  x\u00cb\u00ad  \u00d7%% &\u00cc',55  \u00c0    \u00ae          \u00a2     \u00dd\u00dd\u00dd\u00dd-        \u00e6\u00f2\u00f3\u00f3\u00f3\u0099         \u0090              ", 
+  "        \u00c1       \u00ee\u00ee\u00ef\u00ef \u009a\u00d1\u00f4\u00f0\u00d9  \u00e5       \u00e5  \u00d9\u00f5\u00f5\u00d1 \u00b9    \u00f6\u00f6\u00f1\u00f1\u00f1\u00ec\u00ec \u00ed   \u00f7\u00bf\u00ba\u009e   x\u00cb\u00ad  \u00d7%% &\u00dc' 55   \u00c0   \u00ae          \u00a2\u00a2    \u00d5\u00d5  -              \u0099        \u0090              ", 
+  "       \u00c1        \u00f8\u00ef\u00f9\u00f9\u00f9\u00f9\u009a\u00d1 \u00d9  \u00fa\u00e5       \u00e5 \u00d9\u00f5 \u00d1 \u00b9      \u00f6\u00f6\u00f1\u00f1\u00ec \u00ed  \u00fb\u00f7\u00f7\u00f7\u00f7\u00f7  x\u00cb\u00ad \u00d7\u00d7%% &\u00cc' \u00fc\u00fc   \u00c0   \u00ae\u00ae          \u00a2\u00a2    \u00d5  -              \u0099         \u00fd             ", 
+  "               \u00f8\u00f8\u00f8   \u00f9\u009a\u00d1  \u00d9\u00fa \u00e5\u00e5      \u00e5 \u00d9  \u00d1\u00b9\u00b9        \u00f6\u00f1\u00ec\u00ed\u00ed  \u00fb\u00bf\u00ba\u009e\u009e\u00f7  x\u00cb\u00ad \u00d7\u00d7%% &\u00cd'\u00fc\u00fc\u00fe   \u00c0    \u00ae           \u00a2\u00a2    \u00d5  -              \u0099       \u00fd              ", 
+  "              \u00f8   \u00ef\u00ef\u00f9\u00f9\u009a \u00d1  \u00d9  \u00e5\u00ff\u00e5\u00e5 \u00e5\u00e5  \u00d9  \u00d1\u00b9           \u00f6\u00f6    \u00bf\u00ba\u009e\u00f7  x\u00cb\u00ad\u00ad \u00d7%%  &\u00cd'\u00fc\u00fc\u00fe   \u00c0\u00c0   \u00ae            \u00a2    \u00d5  -              \u0099      \u00fd               ", 
+  "             \u00f8\u00f8    \u00ef\u00f9\u009a  \u00d1\u00d1 \u0100\u00d9\u00d9\u00ff\u00ff  \u0101    \u00d9  \u00b9\u00b9           \u0102     \u00ba\u00ba\u009e\u0103  x\u00cb\u00ad  \u00d7%%  &\u00cd,\u00fc\u00fc\u00fe\u00fe   \u00c0   \u00ae             \u00a2 \u0104\u0104\u0105  -               \u0099    \u00fd             \u0106\u0106\u0106", 
+  "            \u00f8\u00f8      \u00ef\u00ef   \u00d1\u00d1\u0107 \u00d9\u00d9\u00d9  \u0101  \u00d9\u00d9  \u00d1\u00b9     \u0108      \u0102     \u00ba\u00ba\u009e\u0109xxx\u00cb\u00ad  \u00d7%%  &\u00cd'\u00fc\u00fc \u00fe   \u00c0    \u00ae            \u00a2\u0104\u0104\u0104\u0105\u00d5 --              \u0099   \u00fd          \u0106\u0106\u0106\u0106   ", 
+  "            \u00f8         \u009a\u009a  \u00d1     \u00d9\u010a\u00d9\u00d9\u00d9 \u010b \u00d1\u00b9\u00b9     \u0108\u010c    \u0102     \u00bf\u00ba\u009e\u009e    \u00cb\u00ad  \u00d7%%  &\u00cd'\u00fc\u010d\u010d\u010d   \u00c0    \u00ae            \u00a2\u00a2  \u0104\u00d5  -               \u0099 \u00fd\u00fd      \u0106\u0106\u0106\u0106       ", 
+  "           \u00f8           \u009a\u009a        \u010a\u010e\u010e  \u010b \u00d1\u010f     \u0110\u010c\u010c\u010c\u010c\u0111 \u0112    \u0113\u0113\u00ba\u009e\u009e   \u00cb\u00cb\u00ad \u00d7\u00d7%%  &\u00cd\u00fc\u00fc\u010d  \u010d  \u00c0\u00c0   \u00ae             \u00a2  \u0104\u00d5  -               \u0099\u00fd\u00fd   \u0106\u0106\u0106\u0106           ", 
+  "          \u00f8\u0114            \u009a\u009a         \u010e  \u00d1\u010b\u010f      \u0110   \u010c\u010c\u0112  \u0113\u0115\u0115\u0115\u00ba\u00ba\u009e    \u0116\u00ad  \u00d7%%%  &\u00dc'\u00fc\u010d  \u010d   \u00c0   \u00ae             \u00a2  \u0104\u00d5  -               \u0117\u00fd\u0106\u0106\u0106\u0106               ", 
+  "         \u00f8\u0118\u0118\u0114\u0114            \u009a         \u010e\u00b9\u00b9\u010f\u010f      \u010c\u010c \u010c\u010c \u0112 \u0113\u0115\u0115\u0115\u0119\u011a\u011b\u009e\u011c\u011c  \u0116 \u00ad\u00ad\u00d7%%   &\u011d\u00fc \u010d   \u010d  \u00c0    \u00ae            \u00a2  \u0104\u00d5  --             \u0117\u0117\u0106                   ", 
+  "\u011e        \u00f8 \u0118\u0118\u0114\u0114            \u009a\u009a   \u011f\u00b9\u00b9\u00b9\u00b9 \u010f\u010f        \u010c\u010c\u010c \u0112 \u0113\u0115\u0115\u0119\u0119\u0119\u011a\u0120\u0121\u011c\u011c\u0122\u0122\u0116  \u00d7\u00d7%%   &\u00dc',\u010d   \u010d\u010d \u00c0\u0123\u0123\u0123 \u00ae            \u00a2  \u0104\u0104\u0124\u00d5\u00d5--\u0125\u0125\u0126        \u0117\u0117                     ", 
+  "\u0127\u0128\u0128     \u00f8    \u0118\u0114\u0114            \u009a\u009a  \u011f\u0129\u0129   \u010f          \u010c\u010c \u0112\u0113\u012a\u0115\u0119\u012b\u012b\u012b\u012c\u0121\u0121\u012d\u012e\u0122\u0122\u0122\u00d7\u00d7\u00d7\u00d7%%  \u00fc\u00fc\u011d', \u010d   \u010d\u010d\u00c0\u00c0   \u00ae\u00ae            \u00a2  \u0104\u0124   \u012f\u0130\u0131\u0126       \u0117\u0117                    \u0132\u0132", 
+  " \u0127\u0128\u0128   \u00f8      \u0118\u0118\u0114\u0114            \u009a\u011f\u0129  \u0129 \u010f             \u0112 \u012a\u012a\u012b   \u012c\u012c\u0121\u0121\u0133\u012e\u012e\u0122\u0122\u00d7\u00d7\u00d7%%   \u00fc\u00fc\u011d', \u010d    \u010d \u0134    \u00ae\u00ae\u00ae          \u00a2  \u0124    \u012f \u0131\u0131      \u0117\u0117                 \u0132\u0132\u0132\u0132  ", 
+  "   \u0127\u0128 \u00f8\u00f8       \u0118\u0118\u0114\u0114            \u011f\u0129\u0129\u0129\u0129\u010f\u010f             \u0112\u0113\u012a\u012b    \u012c\u012c\u0121\u0121  \u0135\u012e\u012e   %%  \u00fc\u00fc\u0136\u00dc',  \u010d    \u0134        \u00ae\u00ae\u00ae\u00ae\u00ae\u00ae\u00ae   \u00a2 \u0124      \u0130  \u0126    \u0117\u0117             \u0132\u0132\u0132\u0132\u0132     \u0137", 
+  "  \u0138 \u0127\u0128\u0128          \u0118\u0114\u0114            \u009a\u0129\u0129\u010f\u010f             \u0112\u0113\u012a\u012a\u0139\u0139\u013a\u013a \u012c\u012c\u0121\u0121 \u013b \u0135\u012e  %%% \u00fc\u00fc\u00fc\u013c\u013d\u00cd,  \u010d    \u013e\u010d             \u00ae\u00ae\u00ae\u00ae\u013f\u013f\u013f      \u0140  \u0141   \u0117\u0117          \u0132\u0132\u0132\u0132\u0132     \u0137\u0137\u0137\u0137 ", 
+  " \u0142 \u0138 \u0127\u0128\u0128          \u0118\u0118\u0114            \u0143\u0144\u0129             \u0112\u0113\u012a\u012a\u0139\u0139\u0139\u0139\u013a\u013a\u012c  \u0121 \u0145\u0146\u0135\u0135\u012e\u0147%% \u00fc\u00fc\u00fc\u0136\u013c\u00dc',   \u010d   \u013e \u010d                   \u013f\u013f\u013f\u013f\u013f\u013f\u013f\u013f\u013f\u013f\u0148\u0148\u0117\u0117       \u0132\u0132\u0132\u0132      \u0137\u0137\u0137\u0137 \u0149\u0149\u0149\u0149", 
+  "\u00c1 \u0142 \u00f8 \u014a\u0127\u0128\u014b         \u0118\u0118\u0114\u0114         \u0143\u0144\u0144             \u0112\u0112\u012a\u012a\u012b\u014c\u014c\u014d\u0139\u0139\u013a\u012c  \u0121\u0146\u0146\u0145\u014e\u0135\u014f\u0150\u0150% \u00fc\u00fc\u0136\u013c \u013d\u011d'   \u010d\u010d \u013e\u013e  \u010d\u010d                             \u0151\u0151   \u0132\u0132\u0132\u0132       \u0137\u0137\u0137\u0149\u0149\u0149\u0149\u0152\u0152\u0152  ", 
+  "\u00c1  \u00f8\u00f8  \u014a\u0127\u0128\u014b          \u0118\u0114\u0114       \u0143\u0143\u0144 \u0153\u0153           \u0112\u0113\u012a\u012b\u014c\u014c\u014d\u014d\u0139\u0139 \u012c\u0154\u0146\u0146\u0121\u0121\u0155\u0156\u0157\u0150\u0158\u0158%\u00fc\u00fc\u0136 \u013c &\u011d',   \u010d  \u013e\u013e  \u010d\u010d                              \u0132\u0132\u0132       \u0137\u0137\u0137\u0137\u0149\u0149\u0152\u0149\u0152\u0152      ", 
+  "  \u00f8\u00f8     \u0127\u0128\u0128          \u0118\u0118\u0114      \u0143\u0144   \u0153\u0159         \u015a\u0113\u012a\u012b\u014d\u014c\u014d\u014d\u0139\u015b\u015b\u015b\u012c\u0154   \u0121\u0121\u0156\u0150\u0150\u0158\u0158\u00fc\u00fc\u00fc\u0136 \u013c \u00dc\u011d',    \u010d  \u015c\u013e   \u010d\u010d                                 \u0137\u0137\u0137\u0137\u0149\u0149\u0149\u0149\u0152\u0152           ", 
+  "\u015d \u00f8       \u014a\u0127\u0128          \u0118\u0118\u0114\u0114   \u0143\u0144\u0144    \u0159\u015e       \u0112\u0113\u012a\u012a\u012b \u014d\u015b\u015b\u015b\u015b\u015b\u015b\u012c     \u0150\u0150\u0150\u0158\u0158\u014f\u00fc\u00fc\u0136 \u013c  &\u011d\u00cd,     \u010d\u015c\u015c\u013e\u013e   \u013e\u013e\u013e                           \u0137\u0137\u0137\u0149\u0149\u0149\u0149\u0152\u0152\u0152              \u015f", 
+  "\u015d\u00f8         \u014a\u0160\u0161\u014b         \u0118\u0118\u0114\u0114 \u0143\u0144\u0144    \u015e\u015e \u015e     \u0112\u0113\u012a\u012a\u012b\u0162\u0162\u0162\u015b\u015b\u015b\u015b \u0163\u0163\u0164\u0164\u0164\u0150\u0150\u0150\u0150\u0121\u0158\u0158\u00fc\u00fc\u0136\u014f\u014f   & ',,    \u010d\u015c  \u013e\u013e   \u013e\u013e\u0165\u013e\u013e                    \u0137\u0137\u0137\u0149\u0149\u0149\u0149\u0152\u0152\u0152                \u015f\u0166\u0166", 
+  "  \u015d          \u0127\u0128\u0128          \u0118\u0118\u0143\u0143\u0144    \u015e\u015e   \u015e\u0167   \u0112\u0113\u012a\u012b\u0162\u0162\u0162\u0162\u0164\u0164\u0164\u0164\u0164\u0164\u0163\u0164\u0164\u0164\u0150\u0150\u0150 \u0158\u0158\u0158\u00fc\u00fc\u0157 \u014f   \u0168 \u011d',     \u010d\u010d  \u013e\u013e    \u013e\u0165\u0165\u0165\u013e\u013e\u013e        \u0169\u0169\u0169\u0137\u0137\u0137\u0137\u0149\u0149\u0149\u0149  \u0152\u0152\u0152                \u01 [...]
+  "\u016c  \u015d\u015d         \u0127\u0161\u0128          \u0118\u0143\u0144     \u015e     \u0167\u0167 \u0112\u0113\u012a\u012b\u0162\u0162\u0162\u016d\u016d\u016d\u016d\u016d\u016d\u016d\u016d\u0163\u016d\u0164\u0164    \u016e\u0158\u00fc\u00fc\u0136\u0156\u0157\u014f\u014f  \u0168\u00dc\u011d',\u016f     \u010d\u010d   \u013e\u013e \u013e    \u0165\u0165\u0169\u0169\u0169\u0169\u0169\u0169\u0169\u0169\u0169\u0137\u0137\u0137\u0149\u0149\u0149\u0149\u0170\u0170  \u0152\u0152         [...]
+  "\u0171\u016c  \u015d\u015d         \u014a\u0161\u0128\u014b        \u0143\u0144     \u015e        \u0112\u0113\u012a\u012a\u0162\u0162\u016d\u016d\u016d\u016d\u016d\u0172\u0172\u0172\u016d\u016d\u0163\u016d\u016d\u016d    \u016e\u0173\u0173\u0136\u0174\u0174\u0156\u0157\u014f  \u0175\u00dc\u011d' ,\u016f   \u0176\u0176\u010d\u010d   \u013e\u013e\u0177      \u0169     \u0178\u0179\u0137\u0179\u0149\u0149\u0149  \u017a\u0170  \u0152\u0152                \u015f\u0166\u0166\u016a\u016b\u0 [...]
+  "\u0171\u016c\u016c  \u017b\u015d         \u014a\u0127\u0128\u0128      \u0143\u0144\u0144    \u015e        \u0112\u0113\u012a\u012a\u0162\u0162\u016d\u016d\u016d\u0172\u0172\u0172\u0172\u0172\u0172\u0172\u0172\u0163\u016d\u016d\u016d\u016d\u016d \u016e\u016e\u0173\u0173\u017c\u017d\u0174\u0174\u0157\u014f  \u0168\u00dc \u011d',\u016f\u016f\u0176\u0176 \u0176\u0176\u0176\u010d     \u0177\u0177\u0177   \u0169  \u0178\u0178\u0178\u0179\u017e\u0149\u0149  \u017a\u017a\u017a\u0170  \u0152  [...]
+  "\u0171 \u016c\u016c\u017b  \u015d          \u0127\u0127\u0128    \u0143\u0143\u0144    \u015e\u015e       \u0112\u0112\u0113\u012a\u0162\u0162\u016d\u016d\u0172\u0172 \u017f\u017f     \u0163\u0172\u0172\u016d\u016d\u016d\u016d\u0180\u0180\u0181\u017c\u017c\u017d\u017d\u0174\u0156\u014f  \u0168\u00dc \u011d',,\u016f\u0176      \u010d\u010d      \u0169\u0169\u0169\u0178\u0178\u0178\u0182\u0179\u0183\u017e   \u017a\u017a\u017a \u0170  \u0152              \u015f\u015f\u0166\u0184\u016a\u0 [...]
+  "\u0171\u016c\u016c\u017b\u017b   \u015d\u015d         \u014a\u0128\u0128\u014b \u0143\u0143\u0144    \u015e\u015e        \u0112\u0113\u012a\u0162\u0162\u0162\u016d\u0172\u0172 \u017f  \u017f\u017f\u017f\u017f \u0186\u0186\u0172\u0187\u0187\u016d\u016d\u0180\u0180\u0181\u017c\u017c\u017d\u017d\u0174\u0174\u0157\u014f \u0175\u00dc  \u011d', \u016f       \u010d\u010d   \u0169\u0169\u0169\u0178\u0178\u0178\u0182\u017e\u017e\u0183   \u017a\u017a\u017a  \u0170\u0170 \u0152             \u015 [...]
+  " \u016c\u017b\u017b     \u015d\u015d         \u014a\u0127\u0128\u014b\u0143\u0144     \u0188\u0189       \u0112\u0113\u012a\u012a\u0162\u0162\u016d\u0172\u0172 \u017f\u017f\u018a    \u017f\u017f\u018b\u0186\u018b\u0187\u0187 \u016d\u0180\u0181\u0181\u017c\u017c \u017d\u017d\u0174\u0157\u014f \u0175\u00dc  \u011d',, \u016f        \u010d\u010d\u0169\u0178\u0178\u0178\u0182\u0182\u017e\u017e\u0183   \u017a\u017a   \u018c\u018c\u0170 \u0152            \u015f\u0166\u0166\u016a\u016a\u016b\ [...]
+  "\u016c \u017b\u018d      \u015d\u015d          \u0127\u014b\u014b\u0144    \u0188 \u0189       \u0113\u012a\u012a\u0162\u0162\u016d\u0172\u0172 \u017f\u017f \u018a\u018a\u018a\u018a\u018a  \u018e\u0186\u018b\u0187\u0187\u0187\u0180\u0180\u0181\u0181\u017c\u017c \u017d\u017d\u0174\u0157\u014f\u018f\u0175\u00dc\u0190\u0191\u011d\u00cd', \u016f         \u0192\u0178\u0178\u0182\u0179\u017e\u017e\u0183  \u017a\u017a\u017a   \u018c\u018c\u018c\u0170\u0170\u0152           \u015f\u0166\u0166\ [...]
+  " \u0193          \u015d\u015d        \u0143\u014a\u0144    \u0194 \u0189       \u0113\u0113\u012a\u0162\u0162\u016d\u016d\u0172 \u017f\u017f \u0195\u0195   \u018a\u018a\u018a\u017f\u0186\u0186\u018b\u0187\u0187\u0180\u0180\u0181\u016d\u017c\u017c\u017c\u017d\u017d\u0174\u018f  \u0175\u0196 \u0191\u0191\u011d',, \u016f      \u0178\u0178 \u0182\u0179\u0197\u017e\u0183  \u017a\u017a\u017a   \u018c\u018c   \u0170\u0152\u0152         \u015f\u0166\u0166\u016a\u016b\u016b\u016b       \u0185\ [...]
+  "\u017b            \u015d\u015d      \u0143\u0143\u0144    \u0194\u0194\u0189\u0189       \u0113\u012a\u0162\u0162\u0162\u016d\u0172\u0198\u0198\u0198\u0195\u0195  \u0195\u0195\u0195  \u018a\u017f \u0186\u018b\u0187\u0187\u0180\u0180\u0181\u016d\u016d\u017c\u017c\u017d\u017d\u0199\u019a  \u0175\u0196  \u0191\u011d\u00cd', \u016f\u016f   \u0178\u0178 \u019b\u0179\u0197\u017e\u0183\u0192  \u0170\u0170\u0170\u0170\u018c\u018c\u018c    \u0170 \u0152        \u015f\u0166\u0166\u016a\u016b\u0 [...]
+  "\u019c            \u019d\u019d\u015d     \u0143\u0144    \u019e\u019e\u019e\u019e\u019e      \u0113\u012a\u012a\u0162\u0162\u016d\u0172\u0198\u0198\u0198        \u0195\u0195\u0195\u0195 \u0186\u018b\u018b\u0187\u019f\u01a0\u01a0\u016d\u016d\u017c\u017c\u017d\u017d\u0199\u019a  \u0175\u00dc  \u0191 \u011d',, \u016f \u0178\u0178 \u0182\u0179\u017e\u017e\u0183\u0183  \u01a1\u01a1    \u0170\u0170\u0170\u0170\u01a2\u01a2\u0170\u0170\u0152      \u015f\u0166\u0166\u01a3\u016a\u016b\u016b     [...]
+  "             \u019d  \u015d   \u0143\u0144\u0144   \u019e\u019e\u01a4\u01a4\u01a4\u01a4     \u0113\u012a\u012a\u0162\u0162\u016d\u016d\u0198\u0198\u0198            \u0195 \u0186\u0186\u018b\u0187\u019f\u01a0\u01a0\u016d\u016d\u017c\u017c\u017d\u017d\u0199\u019a \u0175 \u0196   \u01a5\u011d\u00cd',\u01a6\u0178\u0178 \u0182\u0179\u017e\u017e\u0183\u0183            \u01a2\u01a2   \u0152\u0152    \u015f\u0166\u0166\u01a3\u016a\u016b\u016b          \u0185\u0185          ", 
+  "          \u01a7 \u019d    \u015d\u015d\u0143\u0144\u0144    \u01a4\u01a4\u01a4\u01a4\u01a4\u01a4\u01a4\u01a4  \u0113\u012a\u012a\u0162\u0162\u016d\u016d\u0198\u0198\u0198  \u01a8\u01a8\u01a9\u01a9\u01a9\u01a9      \u01aa\u01aa\u0186\u018b\u0187\u019f\u01a0\u01a0\u016d\u016d\u017c\u017c\u017d\u0199\u0199  \u0175 \u0196     \u011d\u01ab\u01a6\u01a6 \u0182\u0179\u017e\u017e \u0183\u0183           \u01a2\u01a2     \u0152   \u015f\u0166\u0166\u01a3\u016b\u016b\u016b          \u0185\u0185  [...]
+  "          \u01a7\u01a7\u01ac\u01ac\u01ac   \u015d\u0143\u0144    \u01a4\u01a4\u01a4     \u01a4\u01a4 \u0113\u012a\u0162\u0162\u0162\u016d\u0198\u0198\u0198   \u01a9\u01ad\u01a9  \u01a9\u01a9\u01a9  \u01ae\u01ae\u01af\u01af\u0186\u0186\u0187\u019f\u01a0\u01a0\u016d\u016d\u017c\u017c\u017d\u0199\u019a  \u0175 \u0196\u00dc    \u01b0\u0178\u01ab\u01a6\u0182\u017e\u017e \u0183\u0183            \u01a2\u01a2     \u0152  \u015f\u0166\u0166\u01b1\u01b1\u016b\u016b          \u0185\u0185\u0185   [...]
+  "\u01b2\u01b3        \u019d\u019d\u01ac \u01ac\u01ac\u01ac  \u015d\u015d\u01b4\u01b5 \u019e\u01a4\u01a4\u01b6\u01b6\u01b6\u01b6   \u01a4\u01a4\u012a\u012a\u0162\u0162\u01b7\u0198\u0198    \u01b8\u01a9 \u01ad\u01ad   \u01a9\u01ae\u01ae   \u01af\u0186\u0186\u0187\u019f\u01a0\u01a0\u016d\u016d\u017c\u017c\u017d\u0199  \u0175\u0175 \u0196\u00dc  \u0178\u0178\u01b0\u01b9\u0182\u01a6\u01a6 \u0183\u0183          \u01a2\u01a2\u01a2\u01a2\u01a2     \u01ba\u0152\u015f\u015f\u0166\u01b1\u016a\u01 [...]
+  "\u01b3\u01b2\u01b2       \u01bb\u01bb     \u01ac  \u01bc\u01bd\u01b4\u019e\u01a4\u01a4\u01b6\u01b6   \u01b6 \u01be\u0113\u012a\u012a\u01bf\u0162\u01c0\u01b7\u01b7    \u01a9\u01b8\u01b8\u01b8  \u01ad\u01ad  \u01a9     \u01af\u0186\u0187\u019f\u01a0\u01a0\u016d\u016d\u017c\u017c\u0199\u0199  \u0175  \u01c1\u01c2\u01c3\u0178 \u0182\u0182\u017e\u01b0\u01ab\u01a6\u0183\u0183       \u01a2\u01a2\u01a2\u01a2     \u01a2\u01a2\u01a2  \u01ba\u0166\u0166\u01b1\u01b1\u016b            \u0185\u0185  [...]
+  "\u016c\u016c\u01c4\u01b2 \u01c5   \u01c6\u01ac         \u01c7\u01c8\u01c9\u01a4\u01a4 \u01b6  \u01ca \u01cb\u01cc\u0113\u012a\u012a\u012b\u01bf\u01bf\u01c0\u01b7    \u01cd\u01cd  \u01b8\u01b8  \u01ad\u01ad\u01ad\u01a9     \u01af\u0186\u0186\u019f\u019f\u01a0\u01a0\u016d\u017c\u017d\u0199\u019a \u0175\u0175  \u01c3\u01c2\u01c2\u01ce\u0182\u017e\u017e\u01b0\u01b9\u01ab\u01a6\u01a6       \u01a2\u01a2         \u01a2\u01a2\u0166\u0166\u0166\u016a\u01b1\u016b            \u0185\u0185         [...]
+  " \u016c\u016c \u01cf\u01c5  \u019d\u01c6\u01c6          \u01c7\u01d0\u01a4\u01d1\u01b6  \u01ca \u01ca\u01cb \u0113\u012a\u012b\u01bf\u01bf\u01c0\u01b7\u01b7  \u01d2\u01a9  \u01cd\u01cd  \u01b8\u01b8  \u01ad\u01ad     \u01af \u0186\u0187\u019f\u01a0\u01a0\u01d3\u01d3 \u0199 \u0175\u0175 \u01c3\u01c3\u01d4\u01c2\u01d5\u01d6\u017e \u0183\u0183\u01b0\u01d7\u01ab\u01d8     \u01a2\u01a2         \u01a2\u015f\u015f\u0166\u0166\u0184\u016b\u016b             \u0185\u0185                    ", 
+  "  \u016c  \u01cf\u01cf\u019d\u019d\u01ac\u01ac          \u01c7\u01d0 \u01d1\u01d1\u01d1\u01ca    \u0113\u012a\u012b\u01bf\u01bf\u01c0\u01b7\u01b7\u01d9\u01d9\u01a9\u01a9\u01d2\u01d2  \u01cd\u01cd   \u01b8\u01b8 \u01a9     \u01af \u0186\u0186\u019f\u01a0\u01d3\u01d3\u016d\u0199\u01da\u0175\u0175\u01c3\u01c3\u01d4\u01d5\u01d5\u01c2\u01d6 \u0183\u0183\u0183  \u01d7\u01db\u01d8\u01d8\u01a2\u01a2\u01a2\u01a2\u01a2        \u01a2\u015f\u01dc\u0166\u0166\u016a\u016b\u016b          \u01dd\u01d [...]
+  "  \u016c  \u01c5\u01de\u019d \u01ac          \u01c7\u01d0\u01df\u01e0\u01df\u01d1\u01d1\u01d1   \u0113\u012a\u012a\u01bf\u01bf\u01bf\u01b7\u01b7  \u01d9\u01e1\u01e1 \u01d2\u01d2   \u01cd\u01cd  \u01b8\u01b8\u01a9     \u01af  \u0186\u019f\u01d3\u01d3\u016d\u016d\u01da\u01da\u0175\u01c3\u01d4\u01e2\u01d5\u01d5\u01e3\u01c2\u0183\u0183\u0183     \u01d7\u01db\u01d8\u01a2          \u01a2\u01dc\u0166\u0166\u0166\u01e4\u016b\u016b\u01ba         \u01dd\u01dd  \u01e5                        ", 
+  "\u01e6 \u016c  \u01c5  \u01de\u01ac          \u01c7\u01d0\u01df\u01e0\u01e7\u01df\u01df\u01d1\u01d1 \u0113\u012a\u012a\u012b\u01bf\u01bf\u01c0\u01e8 \u01e9 \u01ea\u01d9\u01e1\u01e1  \u01d2\u01d2   \u01cd\u01cd\u01a9\u01a9      \u01af  \u01d3\u01d3\u01d3\u01a0\u01eb\u01eb\u0175\u01c3\u01ec\u01e2\u01ed\u01ee\u01ef\u01f0\u0183\u01c1\u0183       \u01d7\u01f1\u01db\u01d8\u01a2       \u01a2\u015f\u0166\u0166\u016a\u01e4\u01e4\u016b \u01f2    \u01f3\u01f3  \u01dd\u01dd\u01dd   \u01e5         [...]
+  "\u01e6\u01e6\u016c  \u01c5  \u01ac\u01ac\u01ac        \u01f4\u01f4\u01df\u01e0 \u01e7\u01f5\u01df\u01df\u01d1\u01d1\u012a\u012a\u012b\u01bf\u01bf\u01c0\u01e8\u01e8\u01f6\u01e9\u01e9\u01ea\u01d9\u01d9 \u01e1\u01e1  \u01d2\u01d2\u01a9\u01a9\u01cd\u01a9       \u01af\u01f7\u01f7\u01d3\u01d3\u01f8\u01f9\u0175\u01c3\u01ec\u01da\u01ed\u01ee\u01e3\u01f0\u0183\u0183\u0183\u01c2\u01c2        \u01f1\u01db\u01d8\u01d8     \u01a2\u015f\u0166\u0166\u016a\u016b\u016b\u016b   \u01f2 \u01fa\u01f3\u01f [...]
+  " \u01e6\u01e6  \u01c5\u01fc   \u01ac        \u01c7\u01f4\u01df\u01e0\u01e7\u01e7\u01f5\u01fd \u01df\u01d1\u012a\u012b\u01bf\u01bf\u01c0\u01e8\u01e8 \u01f6\u01ea\u01e9 \u01e8\u01d9 \u01a9\u01a9\u01e1\u01a9\u01a9\u01a9          \u01f7\u01f7\u01f7\u01f7\u01f7\u01fe\u0175\u01c3\u01ec\u01f9\u01da\u01da\u01f0\u01ef\u0183\u0183\u0183  \u01ff         \u01d7\u01d7\u01db\u01d8\u01a2 \u01a2\u01a2\u015f\u0166\u0166\u016a\u016b\u016b      \u01f2  \u01fa\u01fa\u01fb\u01fb\u01f3       \u01e5         [...]
+  "  \u01e6\u01e6 \u0200\u01fc\u01fc \u01ac        \u01c7\u01c7\u01d0 \u0201\u01e7\u01f5\u01f5\u01fd\u01df \u012a\u012b\u01bf\u01bf\u01bf\u0172\u01e8\u01e8\u01e8 \u01f6\u01e8\u01e8\u01e8\u01d9\u01e8             \u0202\u0202\u01f7\u01f7\u01f7\u01f7 \u0175\u01c3\u01fe\u01ec\u01d5\u01d5\u01f0\u01da\u01ef\u0183\u0183    \u01ff\u0203         \u01d7\u01f1\u01db\u01d8\u0204\u015f\u0166\u0166\u016a\u016b\u016b       \u01f2     \u01fa\u01fa        \u01e5                        ", 
+  "\u0175  \u01e6\u01e6\u01e6  \u01fc\u01ac        \u01c7\u01d0 \u0201 \u0205\u0206\u0207\u01df\u01df\u012a\u012a\u01bf\u01bf\u01bf\u0172\u0172 \u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01d9\u01d9       \u0202\u0202\u0202\u0202\u0202\u0208\u0208\u0208\u0208\u01f7 \u0175\u0175\u01c3\u01ec\u01d5\u01d5\u01e3\u01f9\u01ef\u01ef\u0183   \u0209\u0209 \u01ff\u0203          \u01d7\u01f1\u01db\u020a\u020b\u016a\u016b\u016b         \u01f2    \u01dd\u01dd         \u01e5                        ", 
+  "\u0175\u0175  \u020c\u01e6\u01e6\u01e6 \u01fc\u01fc\u01fc      \u01c7\u01d0\u0201\u0201\u0205 \u0206\u020d\u01df\u012a\u012a\u012b\u01bf\u01bf\u01c0\u0172  \u01e8\u01e8\u01e8\u01e8\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0208\u0208\u0208\u0208\u0208\u0208\u0208 \u0175\u0175\u01c3\u01ec\u01d5\u01d5\u01fe\u01e3\u01f8\u01ef\u01f9\u01da\u020e \u0209\u0209\u020f  \u01ff\u0203         \u0210\u0211\u020a\u020b\u0212\u0212\u016b           \u01f2\u01dd  \ [...]
+  "\u01c3\u0175\u0175 \u0213\u0214\u01e6\u01e6\u0215\u0215 \u01fc\u01fc\u01fc   \u01c7\u01d0\u0201\u0201\u0205 \u0206 \u020d\u012a\u012a\u012b\u01bf\u01bf\u01bf\u0172   \u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0216\u0202\u0202\u0202\u0202\u0202\u0202\u0208\u0208\u0208\u0208\u0208\u0208\u0208  \u0175\u0175\u01c3\u01ec\u01d5\u0179\u0179\u01e3 \u01fe\u01f8\u01f8\u0217\u0218\u020e\u0209\u0209 \u020f  \u01ff\u0203       \u0210\u0210\u0211\u0219\u021a\u0212\u0212\u01db\u01d8           \u01f [...]
+  "\u021b\u021b\u01c3\u0175\u0213 \u0214\u0214\u021c\u0215\u0215\u0215\u0215 \u01fc\u01fc\u01fc\u01c7\u01d0\u0201\u0205\u0205\u0206 \u020d \u012a\u012b\u01bf\u01bf\u01bf\u0172 \u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u0202\u021d\u0216\u0216   \u0208\u0208\u0208\u0208\u0208    \u0175\u0175\u01c3\u01ec\u01d5\u0179\u0179\u01e3 \u0183\u0183\u01fe\u021e\u021f\u021f\u0217\u020e\u020e     \u01ff\u0203     \u0210\u0211\u0211\u0220\u0219\u0221\u0221\u0212\u01d7\u01f1\u01db\u01d8           [...]
+  "\u0223\u021b\u021b\u01c3\u0175\u0175 \u0214\u0214 \u021c\u0215\u0215\u0215\u0215 \u01c7\u01fc\u020d\u020d\u0205\u0206\u0206\u020d \u012a\u012a\u01bf\u01bf\u01bf\u0172\u0202\u0202\u0202\u0202\u0202\u0224\u0225\u0225\u0226\u021d\u021d\u021d\u0216\u0216 \u0208\u0208\u0208\u0208\u0208    \u0175\u0175\u01c3\u01ec\u0227\u0179\u01d5\u01e3 \u0183\u0183   \u021e\u021f\u021f\u0217\u0217\u020e\u019a    \u01ff\u0203   \u0210\u0211\u0211\u0220\u0221\u0221\u0221\u0228\u0228\u0228 \u01f1\u01f1\u01db [...]
+  "\u022a\u0223\u021b\u0213\u0213\u0175\u0175  \u0214\u0214\u022b\u021c\u021c\u0215\u0215\u0215\u0215  \u020d\u0206\u020d \u012a\u012a\u012b\u01bf\u01bf\u01c0\u0202\u0202\u0202\u0202\u0202\u022c\u0224 \u021d\u021d\u021d\u022d\u022e \u0216\u0216\u0208\u0208\u0208    \u0175\u01c3\u01c3\u01ec\u0227\u01d5\u0179\u01e3 \u0183\u0183     \u021e\u021e\u021f\u021f\u0217\u020e\u020e    \u01ff\u0203 \u0210\u0211\u0211\u0220\u0221\u0221\u0221 \u022f   \u0228 \u01d7\u01f1\u01db\u01d8        \u01f2 \u0 [...]
+  " \u022a\u022a\u0223\u021b\u0213\u01c3\u0175\u0175  \u0231  \u021c\u021c\u0215\u0215\u0215\u0215  \u020d\u012a\u012a\u012b\u01bf\u01bf\u01bf\u0202\u0202\u0202\u0232\u0233\u0233\u022c\u021d\u021d\u0225\u0225\u0226 \u022d\u022e \u0216\u0216\u0208   \u0175\u01c3\u01c3\u01ec\u01ec\u01d5\u0179\u01e3\u01e3\u0183\u0183        \u021e\u021f\u021f\u0217\u0217\u020e\u019a   \u01ff\u0234\u0211\u0211\u0220\u0221\u0221\u0221   \u0235\u022f   \u0228 \u01f1\u01f1\u01db\u01d8       \u01f2 \u0229        [...]
+  "\u0236\u0236 \u022a\u0223\u021b\u021b \u01c3\u0175\u0231\u0231     \u021c\u021c\u0215\u0215\u0215\u0215\u012a\u012b\u01bf\u01bf\u01bf\u0202\u0202\u0202 \u0232 \u021d\u021d\u022c\u0224 \u0225\u0226\u0226\u022d\u022e\u0237    \u0175\u01c3\u01c3\u01ec\u01ec\u01d5\u01d5\u0179\u01e3\u0183\u0183          \u021e\u021e\u021f\u021f\u0217\u020e\u020e\u0238\u0239\u0239\u023a\u023a\u0220\u0221\u0221\u0221  \u023b  \u0235 \u022f \u023c\u023c\u0228 \u01d7\u01f1\u01db\u01d8      \u01f2 \u0229        [...]
+  " \u0236\u0236  \u022a\u0223\u021b\u021b\u0231\u01c3\u0175\u0175\u0175     \u021c\u021c\u021c\u0215\u0215\u01bf\u01bf\u01bf\u0202\u0202\u0202 \u023d\u021d\u021d\u0233 \u022c \u0224\u0225 \u0226\u0237    \u0175\u01c3\u01c3\u01ec\u01ec\u01d5\u01d5\u01e3\u01e3\u0183\u0183            \u023e\u021e\u021f\u021f\u0217\u0217\u0238\u0238\u023f\u0240\u0241\u0242\u0221\u0221  \u023b\u023b   \u0235 \u0243\u022f\u023c \u0228\u0228 \u01f1\u01f1\u01db\u01d8     \u01f2 \u0229            \u01e5          [...]
+  "   \u0236\u0236  \u022a\u0223\u021b\u021b \u01c3\u01c3\u0175\u0175     \u021c\u012a \u0244\u0244\u0202\u0202\u0202   \u023d\u0232 \u0233\u022c\u022c\u0224\u0237\u0225    \u0175\u0175\u01c3\u01ec\u01ec \u01e3\u01e3\u01e3\u0183\u0183           \u023e\u023e\u023e \u021e\u0238\u021f\u0238\u0238\u023f\u023f\u023f\u0245\u0246\u0247  \u023b\u023b     \u0235 \u0248\u0243\u0243  \u0228  \u01d7\u01f1\u01db\u01d8    \u01f2  \u0229           \u01e5                         ", 
+  "\u0249\u0249\u0249\u0249\u0249\u0236\u0236  \u0231\u0223\u021b\u021b\u021b\u01c3\u01c3\u0175\u0175\u0175  \u024a \u0244\u0244\u0172\u0202\u0202    \u023d \u0232\u0233 \u022c\u0237    \u0175\u0175\u01c3\u01ec\u01ec\u01ec\u01e3\u01e3\u01e3\u0183\u0183           \u023e\u023e\u024b  \u024c\u024c\u0238\u0238\u023f\u023f\u023f\u024d\u024d\u024e\u0203 \u023b\u023b        \u0248  \u024f\u024f \u0250\u0251  \u01d7\u01f1\u01db\u01d8   \u01f2   \u0229          \u01e5                         ", 
+  "       \u0236\u0236\u0252 \u022a\u022a\u0223\u021b\u021b\u021b\u01c3\u0175\u0175\u0175\u0253\u0254\u0244\u0244\u0202\u0202      \u023d\u0232\u0237\u0233    \u0175\u0175\u01c3\u01ec\u01ec\u01ec\u01e3\u01e3 \u0183\u0183\u0183         \u0255\u0255\u0255\u0255\u0255\u0256\u0256\u024c  \u023f\u023f\u0257\u024d\u024d\u0258\u020e\u01ff\u0203 \u023b         \u0235   \u0259\u0250  \u0251  \u01d7\u01f1\u01db\u01d8  \u01f2\u01f2   \u0229         \u01e5                         ", 
+  "\u025a   \u025b\u025b\u025b \u025c\u025d\u025d\u025d  \u022a\u022a\u0223\u0223\u021b\u0253\u01c3\u0175\u0254\u025e\u025e\u025f\u0202 \u0260\u0260   \u023d\u0237    \u0175\u0175\u01c3\u01ec\u01ec\u01ec\u01e3\u01e3 \u0183\u0183\u0183     \u0255\u0255\u0255\u0255\u0255\u0255    \u024b\u024b\u0256 \u0223\u0223\u0261\u024d\u0262\u0258\u0258\u0217\u020e\u0263\u0264\u023b          \u0259\u0259\u0259\u0259\u0259\u024f   \u0251  \u01d7\u01f1\u01db\u01d8  \u01f2   \u0229\u0229        \u01e5     [...]
+  "\u025a\u025a\u025b\u025b\u025b  \u025c\u0265   \u025d\u025d\u025d  \u022a\u022a\u0223\u0223\u0254\u021b\u021b\u01c3\u0175   \u0260\u0260\u0260\u0260   \u0175\u0175\u0175\u01c3\u01ec\u01ec\u01ec\u01e3\u01e3 \u0183\u0183\u0183   \u0255\u0255\u0255\u0255          \u024b\u0223\u0223\u0223\u0266\u0267\u0268\u0262\u0262\u0258\u021f\u0217\u0269\u0263\u020e\u026a                \u024f  \u0251\u0251  \u01f1 \u01d8\u01d8 \u01f2    \u0229\u0229       \u01e5                         ", 
+  " \u026b\u025a    \u025c\u026c      \u026d\u026e \u0253\u0253\u0254\u025e\u022a\u022a\u0223\u0183\u01c3\u0175\u0175\u01c3\u0175\u0175\u0175\u0175\u01c3\u0175\u01c3\u01c3\u01ec\u01ec\u01e3\u01e3\u01e3 \u0183\u0183\u0183 \u0255\u0255\u0255\u0255           \u0223\u0223\u0223\u0223\u0266\u0266\u026f\u0267\u0270\u0271\u0258\u021e\u021f\u021f\u0217\u0263\u0264\u020e\u026a\u026a\u026a\u026a      \u0272\u0272\u0272\u0272\u0272  \u0273   \u0251\u0251 \u01d7\u01d7 \u01d8\u01d8\u01f2\u01f2    \u0 [...]
+  "\u026b  \u025a\u025a  \u0265\u0265\u026c     \u0274 \u0275\u0275\u0254\u025e\u025e\u025e\u025f\u022a\u022a\u0223\u0223\u0183\u0183\u0183     \u01ec\u01ec\u0276\u01e3\u01e3\u0183\u0183\u0183  \u0255\u0255\u0255          \u0223\u0223\u0223\u0223\u0266\u0266\u0266\u0266\u0277\u0277\u0267\u0278\u0271\u0279 \u021e\u021e\u021f\u021f\u0263\u0264\u020e\u020e\u026a   \u0272\u0272\u0272\u0272\u0272     \u0272\u0272\u0272\u0272\u0272\u0272 \u0251\u0251 \u01d7\u01f1 \u01d8 \u01f2     \u0229     \ [...]
+  "\u026b   \u025a\u025a \u0265 \u026c    \u0274 \u0275\u0275\u027a\u027a\u025e\u025e\u025f\u025f    \u022a\u022a\u0223\u0183\u0183\u0183\u0183\u0183\u0183\u0183\u0183\u0183\u0183\u027b\u027b\u027b\u0255\u0255       \u0223\u0223\u0223\u0223\u0223\u0223\u022a\u0266\u0266\u0266  \u0277\u027c\u0267\u0270\u027d\u0271\u027e  \u027f\u021e\u021e\u021f\u0264\u0217\u0269\u020e\u020e \u0272\u0272\u0272 \u0280\u0280\u0280\u0280\u0280\u0280\u0280\u0280\u0280 \u0273  \u0272\u0272\u0272   \u01d7\u01d7 [...]
+  "     \u025a\u025a\u0265 \u026c   \u0274 \u0275\u0275\u027a\u027a\u0282\u0282\u025f\u025f\u0283        \u0284\u0285\u022a\u022a\u0223\u0223\u0223\u0223\u0223\u027b\u027b\u0223\u0223\u0223\u0223\u0223\u0223\u0223\u0223\u0223\u022a\u0266\u0266\u0266\u0266\u0266\u0266   \u0286\u0286\u0277\u027c\u027c\u0270\u027d\u027e\u0287\u0279 \u027f  \u021e\u0263\u0264\u0217\u0217\u0269\u0288\u0272\u0289\u028a\u028b\u028b\u0280        \u0280\u0280\u0280\u0280   \u0272\u0272  \u01d7\u01f1\u01db\u01d8\u [...]
+  "      \u028c\u025a \u026c  \u0274  \u0275\u027a\u027a\u0282\u0282\u028d\u028d  \u0283     \u0284\u0284\u028e\u028e\u028e   \u028f\u028f\u027b\u027b\u027b\u022a\u022a\u0266\u0266\u0266\u0266\u0266\u0266\u0266\u0266       \u0286\u0290\u0291\u0277\u027c\u0267\u0278\u027d\u027e\u0287\u0279 \u027f   \u0263\u0264\u021f\u021f\u0288\u0292\u0292\u0289\u0293 \u028b             \u0280\u0280\u0280   \u0272\u0272 \u01d7\u01f1\u01db\u01d8\u01f2     \u0229\u0229  \u01e5                 \u0281\u0281\ [...]
+  "     \u028c  \u025a\u025a \u0274  \u0275\u0275\u027a\u0282\u0282\u0282\u028d   \u0283   \u0284\u0284\u028e\u028e    \u028f\u028f\u028f \u0266\u0266\u0266\u0266\u0266\u0266            \u0286\u0290\u0290\u0290\u0291\u027c\u0270\u0270\u027d\u027e\u0287\u0279\u027f\u027f    \u0263\u0264\u021e\u0292\u0292\u0289\u0289\u020e\u020e\u0295\u0296               \u0280\u0280\u0280   \u0272 \u01f1\u01f1\u01db\u01f2\u01f2     \u0229\u0229\u01e5\u01e5             \u0281\u0281\u0281\u0281\u0281\u0281\ [...]
+  "    \u028c\u028c   \u025a\u025a  \u0275\u0275\u027a\u0282\u0282\u0282\u028d     \u0283\u0284\u0284\u028e\u028e    \u028f\u0266\u0266\u0266\u0266\u0266                \u0286\u0290\u0290\u0290\u0291\u027c\u027c\u0267\u0278\u027d\u027e\u0287\u0279\u027f\u027f    \u0297\u0298\u0288\u0292\u0292\u0289\u021f\u0217\u0269\u020e\u0295\u0296                 \u0280\u0280   \u0272\u0272\u01d7\u01f1\u01db\u01f2      \u0229\u0229          \u0281\u0281\u0281\u0281\u0281\u0281\u0294\u0294\u0294\u0294\ [...]
+  "   \u028c\u028c    \u0299\u0299\u025a\u0275\u0275\u027a\u027a\u0282\u0282\u028d\u028d     \u0284\u028e\u028e   \u028f\u028f\u0266\u0266\u0266                    \u0290\u0290\u0291\u0291\u027c\u027c\u029a\u0271\u027d\u0287\u0287 \u027f\u027f    \u0297\u0298\u029b\u029b\u0289\u0289\u021f\u021f\u021f\u0217\u020e\u020e\u0295\u0296\u0296\u0296\u0296               \u0280   \u0272\u0272\u01d7 \u01db\u01f2      \u01e5      \u0281\u0281\u029c\u0281\u0281\u0281\u0294\u0294\u0294\u0294\u0294\u02 [...]
+  "   \u028c    \u0299\u0299 \u029d\u029d\u027a\u027a\u0282\u0282\u029e\u029e    \u0284\u0284\u028e\u029f  \u028f\u0266\u0266\u0266                      \u02a0\u02a1\u0291\u0291\u027c\u027c\u0270\u0271\u027d\u0287\u0287 \u027f\u027f     \u0297\u029b\u029b\u0289\u02a2\u02a3\u021e\u021f\u021f\u021f\u0217\u020e     \u0296\u0296\u0296\u0296\u0296\u0296\u0296         \u0280\u0280  \u0272\u01d7\u01d7\u01db\u02a4\u01f2     \u01e5\u01e5  \u02a5\u02a5\u02a5\u02a5\u0281\u0294\u0294\u0294\u0294\u02 [...]
+  "  \u028c     \u0299\u0299 \u029d\u027a\u027a\u0282\u0282\u029e\u029e    \u0284\u0284\u028e \u02a6\u02a7\u0266\u0266                        \u02a0\u02a1\u0291 \u027c\u0267\u029a\u0271\u027d\u0287\u0287 \u027f      \u0297\u029b\u029b\u02a8 \u02a3\u02a3\u021e\u021e\u021f\u021f\u0217\u0217\u020e       \u02a9  \u0296\u0296\u0296\u0296\u0296\u0296\u0296    \u0280\u0280   \u0272\u01d7\u01db\u01f2\u01f2     \u02aa\u02a5\u02a5\u02a5\u02ab\u02ab\u02ab\u02ac\u02ac\u0294                 ", 
+  " \u028c       \u0299\u029d\u029d\u027a\u0282\u0282\u0282\u029e    \u0284\u0284\u028e \u02ad\u02ae\u02ae\u02ae                        \u02a0\u02a1\u0291 \u027c\u0267\u0270\u0271\u027e\u0287\u0279\u027f\u027f      \u0297\u029b\u029b \u02af\u02a3   \u021e\u02b0\u021f\u021f\u0217\u020e       \u02a9       \u02b1\u0296\u0296\u0296\u0296\u0296\u0296\u0280\u0280   \u01d7\u01f1\u01db\u02a4  \u02aa\u02aa\u02aa\u02aa\u02ab\u02ab\u02ab\u02ab\u02ab\u02b2\u02b2                   ", 
+  "\u028c\u028c       \u029d\u029d\u027a\u027a\u0282\u0282\u029e    \u0284\u028e  \u02b3\u02b3 \u02ae\u02a6                       \u02a1\u0291\u0291\u02a6\u027c\u0270\u0278\u0271\u027e\u0287\u0279\u027f\u027f      \u0297\u029b  \u02af\u02af    \u021e\u021e\u021f\u021f\u0217\u0217\u020e      \u02a9       \u02b1       \u0280\u0280  \u0272\u02b4\u02b5\u02b6\u01f2\u02b7\u02b7\u02aa\u02ab\u02ab\u02ab     \u02b2\u02b2                  ", 
+  "\u028c       \u029d\u029d\u027a\u027a\u0282\u0282\u029e\u02b8   \u02b9\u02ba \u02ad\u02b3\u02b3    \u02a6                    \u02a0\u02a1\u0291\u0291\u027c\u027c\u0267\u0270\u027d\u027e\u0287\u0279\u027f\u027f     \u0297\u0297\u029b  \u02af\u02af\u02a3     \u021e\u021e\u021f\u021f\u0217\u020e\u02bb     \u02a9       \u02b1        \u0280   \u0272\u02b4\u02b5\u02bc\u02bc\u02bc\u02bd        \u02b2\u02b2\u02b2\u02b2                ", 
+  "        \u029d\u027a\u027a\u0282\u0282\u029e\u02b8\u02b8  \u02b9\u02ba \u02ad\u02ad      \u02be\u02a6                  \u02a0\u02a1\u0291\u0291\u027c\u0267\u0270\u0278\u027d\u0287\u0287\u0279\u027f\u027f     \u0297\u0297\u029b  \u02af\u02af \u02a3     \u02b0\u021e\u021f\u021f\u0217\u0217\u02bf    \u02a9\u02a9      \u02b1          \u0280 \u02b7\u02b7\u0272\u02b4\u02bc\u01d8\u01d8\u02c0\u02c0         \u02b2\u02b2\u02b2\u02b2\u02b2             ", 
+  "       \u029d\u029d\u027a\u0282\u0282\u029e\u02b8\u02b8  \u02b9\u02b9 \u02b3\u02b3      \u02be\u02be \u02a6                \u02a0\u02a1\u0291\u02a6\u027c\u027c\u029a\u0278\u027d\u0287\u0287 \u027f      \u0297\u0297\u029b  \u02af\u02af \u02a3       \u021e\u02c1\u021f\u021f\u0217\u02bf\u02bb   \u02a9       \u02b1           \u02c2\u02b7\u02bc\u02bc\u0272\u02b4\u02b6\u01d8\u01d8             \u02b2\u02b2\u02b2\u02b2\u02b2          ", 
+  "      \u029d\u029d\u027a\u0282\u0282\u0282\u029e\u02b8  \u02c3\u02c4 \u02ad\u02b3      \u02be\u02be   \u02a6              \u02a0\u02a1\u0291\u02a6\u027c\u0267\u0270\u0271\u027d\u0287\u0287\u027f\u027f      \u0297\u029b\u029b \u02af\u02af  \u02a3         \u02c1\u021f\u021f\u0217\u0217\u02bb   \u02a9       \u02b1         \u02c2\u02c2\u02c2\u02c5\u02bc  \u0272\u02b4\u02b6\u01d8\u01d8     \u02c6\u02c7        \u02b2\u02b2\u02b2\u02b2\u02b2       ", 
+  "     \u029d\u029d\u027a\u0282\u0282\u0282\u029e\u02b8   \u02c4 \u02ad\u02b3      \u02be\u02be    \u02a6\u02a6            \u02a0\u02a1\u0291\u02a6\u027c\u0270\u0270\u0271\u027e\u0287\u0279\u027f\u027f     \u0297\u0297\u029b  \u02af\u02af  \u02a3\u02a3         \u02c1\u02c1\u021f\u021f\u0217\u02bf   \u02a9       \u02b1        \u02c2\u02c2\u02c5\u02c5     \u02b4\u02b5\u02b6\u01d8\u01d8     \u02c7\u02c7          \u02b2\u02b2\u02b2\u02b2     ", 
+  "     \u029d\u027a\u027a\u0282\u0282\u029e\u02b8   \u02c3\u02c4\u02ad\u02b3      \u02be       \u02a6\u02a6 \u02c8\u02c8      \u02a0\u02a1\u0291\u0291\u027c\u027c\u0267\u029a\u027d\u027e\u0287\u0279\u027f\u027f     \u0297\u0297\u029b  \u02af\u02af   \u02a3           \u02c1\u021f\u021f\u0217\u02bf   \u02a9       \u02b1      \u02c2\u02c2\u02c2\u02c5\u02c5       \u02b4\u02b4\u02b6\u01d8\u01d8     \u02c7             \u02b2\u02b2\u02b2\u02b2  ", 
+  "    \u029d\u029d\u027a\u0282\u0282\u029e\u02b8\u02b8  \u02c3\u02c4\u02ad\u02b3      \u02be         \u02a6\u02c8\u02c8      \u02a0\u02a1\u0291\u0291\u027c\u0267\u0270\u0278\u027d\u027e\u0287\u0279\u027f\u027f     \u0297\u029b\u029b  \u02af\u02af    \u02c9\u02c9\u02c9\u02c9\u02c9        \u02c1\u021f\u021f\u0217   \u02a9       \u02b1     \u02c2\u02c2\u02c2\u02c5\u02c5         \u0272\u02b5\u02b6\u01d8      \u02c7              \u02b2\u02b2\u02b2\u02b2", 
+  "\u02ca\u02ca \u029d\u029d\u027a\u0282\u0282\u029e\u029e\u02b8  \u02c3\u02c4\u02ad\u02b3      \u02be           \u02a6      \u02a0\u02a1\u0291\u0291\u027c\u027c\u0267\u0278\u027d\u027e\u0287\u0279\u027f      \u0297\u029b   \u02af    \u02c9\u02c9     \u02c9\u02c9      \u02c1\u021f\u021f\u0217\u02bb  \u02a9\u02a9\u02a9\u02a9\u02a9\u02a9\u02a9 \u02b1    \u02c2\u02c2\u02cb\u02c5\u02cc          \u0272\u02b4\u02b6\u02b6\u01d8      \u02c7                \u02b2", 
+  " \u02ca\u029d\u029d\u027a\u0282\u0282\u0282\u029e\u02b8   \u02c4 \u02b3     \u02be\u02be             \u02a6\u02a6   \u02a0\u02a1\u0291\u02a6\u027c\u0267\u029a\u0271\u027d\u0287\u0287\u0279\u027f     \u0297\u0297\u029b   \u02af\u02cd  \u02c9\u02c9\u02c9       \u02c9       \u02c1\u021f\u02bf\u02bf        \u02a9\u02a9\u02a9\u02a9\u02a9\u02c2\u02c2\u02c2\u02cb\u02cb \u02cc\u02cc          \u0272\u02b5\u02b5 \u01d8      \u02c7                ", 
+  " \u029d\u029d\u027a\u027a\u0282\u0282\u029e\u02b8   \u02c3\u02c4\u02b3\u02b3    \u02be\u02be               \u02a6\u02a6\u02a6\u02a0\u02a1\u0291\u02a6\u027c\u0267\u0270\u0271\u027e\u0287\u0287\u027f\u027f     \u0297\u0297   \u02ce\u02ce \u02cf\u02cf\u02c9\u02c9          \u02c9       \u02c1\u02c1\u02bf\u02d0           \u02d1\u02d1\u02c2\u02cb\u02cb  \u02d2\u02cc\u02d3\u02d3         \u0272\u02b4\u02b6 \u01d8     \u02c7\u02c7               ", 
+  " \u029d\u029d\u027a\u0282\u0282\u029e\u02b8\u02b8  \u02c4\u02c4\u02ad\u02b3    \u02be\u02be                  \u02a0\u0291\u0291\u02a6\u027c\u0267\u029a\u0271\u027d\u0287\u0287\u027f\u027f     \u0297\u02d4   \u02ce  \u02cf               \u02c9      \u02c9\u02d5\u02d5\u02bf          \u02d1\u02d1\u02d6\u02d6 \u02d2\u02d2\u02d2  \u02cc \u02d3         \u0272\u02b5\u02b6\u01d8\u01d8     \u02c7\u02c7              ", 
+  "\u029d\u029d\u027a\u0282\u0282\u029e\u029e\u02b8  \u02c3\u02c4\u02ad\u02b3    \u02be\u02be                  \u02a1\u0291\u0291\u027c\u027c\u02d7\u0270\u0271\u027e\u0287\u0279\u027f\u027f    \u0297\u02d8\u02d4   \u02ce                    \u02c9\u02c9  \u02c9\u02c9\u02c9\u02c1\u02c1\u02bf\u02bb        \u02d1\u02d1\u02cb\u02cb\u02d9       \u02cc\u02d3\u02d3         \u02b4\u02b4\u02b6\u01d8\u01d8     \u02c7              ", 
+  "\u029d\u027a\u0282\u0282\u0282\u029e\u02b8   \u02c4\u02ad\u02b3    \u02be\u02be                  \u02a1\u0291\u0291\u027c\u027c\u02d7\u0278\u027d\u027e\u0287\u0279\u027f\u027f    \u0297\u0297\u02d4 \u02da\u02da\u02ce                       \u02c9\u02c9\u02c9  \u02db\u02c1\u02c1\u02bf       \u02d1\u02d1\u02cb\u02cb \u02d9       \u02cc\u02cc\u02d3\u02d3         \u0272\u02b5\u02b6\u01d8      \u02c7             ", 
+  "\u027a\u0282\u0282\u0282\u029e\u02b8   \u02c3\u02c4\u02b3    \u02be\u02be                 \u02a6\u02a1\u0291\u0291\u027c\u027c\u02d7\u02dc\u02dd\u027e\u0287\u0279\u027f     \u0297\u02d4  \u02da\u02da\u02ce                              \u02db\u02c1\u02bf\u02bf     \u02d1\u02d1\u02cb\u02cb  \u02d9        \u02cc\u02cc\u02d3          \u02b4\u02b6\u02b6\u01d8      \u02c7            ", 
+  "\u027a\u0282\u0282\u029e\u02b8\u02b8  \u02c4\u02c4\u02ad\u02b3   \u02be                 \u02a6\u02a6\u02a1\u02a1\u0291\u02de\u027c\u02df\u02e0\u02dd\u02e1\u0287\u0279\u027f    \u0297\u0297\u02d4  \u02da\u02da \u02ce                              \u02db\u02c1\u02c1\u02bf\u02bb   \u02d1\u02d1\u02cb\u02cb   \u02d9         \u02cc \u02d3          \u02b5\u02b6 \u01d8     \u02c7\u02c7           ", 
+  "\u0282\u0282\u029e\u02b8\u02b8  \u02c3\u02c4\u02b3\u02b3   \u02be                \u02a6\u02a6 \u02a1\u0291\u0291\u02de\u027c\u02dc\u02e0\u02e1\u02e2\u02e3\u027f\u027f    \u0297\u0297\u02d4  \u02da  \u02ce\u02ce                               \u02db\u02c1\u02c1\u02bf\u02bb\u02bb\u02d1\u02d1\u02cb\u02cb    \u02d9          \u02cc \u02d3         \u02b4\u02b4\u02b6\u01d8\u01d8     \u02c7\u02c7          ", 
+  "\u0282\u029e\u029e\u02b8  \u02c3\u02c4\u02ad\u02b3   \u02be                \u02a6  \u02a1\u0291\u0291\u02de\u027c\u02dc\u02e0\u02e1\u02e3\u02e3\u027f\u027f   \u0297\u0297\u02d4   \u02da   \u02ce                                \u02db\u02db\u02c1\u02c1\u02bf\u02bf\u02d1\u02d1\u02cb\u02cb\u02e4\u02e4\u02e5 \u02d9           \u02cc \u02d3         \u02b4\u02b5\u02e6\u01d8\u01d8                ", 
+  "\u0282\u029e\u02b8   \u02c3\u02c4\u02b3  \u02be\u02be                 \u02a6 \u02a1\u0291\u0291\u02de\u027c\u02e0\u02dd\u02e1\u02e3 \u027f\u027f  \u0297\u0297\u02d4   \u02da\u02da    \u02ce                                 \u02db\u02db\u02c1\u02d0\u02e7\u02d1\u02e8\u02cb   \u02e5\u02e5\u02e5\u02d9\u02d9\u02d9\u02d9\u02d9      \u02cc\u02cc\u02e9\u02d3         \u02b4\u02b5\u02b6\u01d8                ", 
+  "\u029e\u02b8   \u02c4\u02c4\u02ad  \u02be\u02be                  \u02a6\u02a1\u0291\u02de\u02de\u027c\u02dd\u02e0\u02e3\u02e3 \u027f\u027f \u0297\u02ea\u0297    \u02da\u02da     \u02ce                        \u02eb         \u02db\u02c1\u02c1\u02e7\u02d0\u02e8\u02cb           \u02d9\u02d9\u02d9\u02d9\u02d9\u02d9\u02d9\u02cc\u02cc\u02e9\u02d3         \u02ec\u02b5\u02ed\u01d8               ", 
+  "\u02b8\u02b8  \u02c3\u02c4\u02b3\u02b3 \u02be\u02be                   \u02a6\u02a6\u02de\u02de\u027c \u02dd\u02e2\u02e2 \u027f\u027f \u0297\u02ea\u02d4    \u02da\u02da     \u02ce\u02ce                        \u02eb\u02eb         \u02db\u02ee\u02ee\u02d0\u02ef\u02cb                  \u02d9\u02cc\u02e9\u02e9\u02d3         \u02b4\u02b6\u02e6\u01d8              ", 
+  "\u02b8  \u02c3\u02c4\u02ad\u02b3                        \u02de\u027c\u027c \u02e1\u02e2 \u027f\u027f \u02ea\u02ea\u02d4     \u02da\u02da     \u02ce\u02ce                          \u02eb          \u02f0\u02ee\u02ee\u02ee\u02d0\u02d0\u02f1                 \u02f2\u02cc\u02e9\u02d3\u02d3        \u02b4\u02ec\u02ed\u02ed\u01d8             ", 
+  "   \u02c3\u02ad\u02b3                        \u02de\u027c\u027c \u02e1\u02f3 \u027f\u027f\u0297\u0297\u02d4      \u02da      \u02ce\u02ce                            \u02eb        \u02f0\u02f0\u02f4\u02f5\u02f5\u02db\u02f1\u02f1\u02f1\u02f1              \u02f2  \u02cc\u02e9\u02d3\u02d3  \u02f6\u02f6    \u02b4\u02ec\u02b6\u01d8\u01d8            ", 
+  "  \u02c4\u02c4\u02ad                        \u02de\u027c\u02f7\u02f3\u02e1  \u027f\u0297\u0297\u02d4      \u02da\u02da      \u02ce\u02ce                              \u02eb       \u02f0\u02f0\u02f5\u02f5\u02f8\u02f9\u02f9\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1          \u02f2   \u02cc\u02cc\u02e9\u02d3\u02d3\u02f6\u02f6      \u02ec\u02b5\u02ed\u01d8\u01d8           ", 
+  " \u02c3\u02c4\u02b3                       \u02de\u02de\u027c\u02f7\u02fa\u02f3\u027f\u027f\u0297\u0297\u0297       \u02da\u02da      \u02ce                                 \u02eb     \u02fb\u02f0\u02f0\u02f5  \u02f8\u02f9\u02f9\u02f9\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02fc\u02f1    \u02fd\u02e9\u02e9\u02f6\u02f6        \u02b4\u02b5\u02e6\u01d8\u01d8          ", 
+  "\u02c3\u02c4\u02ad\u02b3                      \u02de\u02de\u027c\u02f7\u02fa\u02fe\u02ff\u02ff\u0297\u0297\u02d4       \u02da\u02da     \u02ce\u02ce                                  \u02eb    \u0300\u02fb\u02f0\u02f5\u02f5    \u02f8\u02f9\u02f9\u02f9\u02f9\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02fc\u02fc\u02f1\u02f1\u02f1\u02f1\u02f1\u02f1\u02fd\u02e9\u02e9\u02d3        \u02b4\u02b4\u02b6\u02e6\u01d8\u01d8         ", 
+  "\u02c3\u02b3\u02b3                      \u02de\u027c\u027c\u02fa\u02fa\u02fe\u02ff\u0297\u0297\u02d4        \u02da\u02da     \u02ce\u02ce                                   \u02eb   \u02fb\u02fb\u02fb\u02f0\u02f5      \u02f8\u02f8\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02fc\u02f9\u02f9\u02f1\u02f1\u02f1\u02f1\u02f1\u02fd\u02f1\u02e9\u02e9\u02d3        \u02b4\u02b4\u02b6\u02e6\u01d8         ", 
+  "\u02ad\u02b3                      \u02de\u027c \u02fa\u02fa\u02fe\u02ff\u0297\u0297         \u02da      \u02ce\u02ce                                        \u0300  \u02f5\u02f5        \u02f8\u02f8\u02f8\u02f8\u02f9\u02f8\u02f8\u02f8\u02f8\u02f8\u02fc\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02f9\u02f1\u02f1\u02fd\u02f1\u02f1\u02e9\u02d3        \u02b4\u02b5\u02b6 \u01d8        ", 
+  "\u02b3                     \u02de\u02de\u027c  \u02fe\u02fe\u02ff\u0297\u02d4                \u02ce\u02ce                                                                       \u02f9\u02f9\u02f9\u02fd\u02f1\u02f1\u02f1\u02d3\u02d3        \u02b4\u02b5\u02b6 \u01d8       ", 
+  "\u02b3                    \u02de\u02de\u027c  \u02fe\u02fe\u02ff\u0297\u02d4                \u02ce                                                                            \u02fd\u02f9\u02f1\u02f1\u02f1\u02f1\u02d3        \u02b4\u02b6\u02b6\u01d8\u01d8      ", 
+  "                    \u02de\u027c\u027c  \u02fe\u02fe\u0297\u0297\u02d4               \u02ce\u02ce                                                                              \u02f9\u02f9\u02f9\u02f1\u02f1\u02f1\u02d3       \u02b4\u02b4\u02b6\u02b6\u01d8\u01d8     ", 
+  "                   \u02de\u02de\u027c  \u02fe\u02fe\u0297\u0297                \u02ce\u02ce                                                                                 \u02f9\u02f9\u02f1\u02f1\u02f1\u02d3       \u02b4\u02b5\u02b6\u02b6\u01d8     ", 
+  "                  \u02de\u02de\u027c  \u02fe\u02ff\u0297\u02d4                \u02ce\u02ce                                                                                   \u02f9\u02f9\u02f1\u02f1\u02f1\u02d3       \u02b4\u02b5\u02b6 \u01d8    ", 
+  "                  \u02de\u027c  \u02fe\u02ff\u0297\u02d4                \u02ce\u02ce                                                                                     \u02f9\u02f9\u02f1\u02f1\u02f1\u02d3       \u02b4\u02b5\u02b6 \u01d8   ", 
+  "                 \u02de  \u02fe\u02fe\u02ff\u0297\u02d4                                                                                                          \u02f9\u02f1\u02f1\u02f1\u02d3       \u02b4 \u02b6\u01d8\u01d8  ", 
+  "                   \u02fe\u02fe\u0297\u0297\u02d4                                                                                                            \u02f9\u02f1\u02f1\u02f1\u02d3      \u02b4\u02b5\u02b6\u02b6\u01d8  ", 
+  "                  \u02fe\u02fe\u0297\u0297\u02d4                                                                                                              \u02f9\u02f1\u02f1\u02f1\u02d3      \u02b4\u02b5\u02b6 \u01d8 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/road-casings-non-grouped-rendering-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/road-casings-non-grouped-rendering-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..fd52148
--- /dev/null
+++ b/tests/visual_tests/grids/road-casings-non-grouped-rendering-600-600-2.0-grid-reference.json
@@ -0,0 +1,856 @@
+{
+ "keys": [
+  "", 
+  "330", 
+  "155", 
+  "74", 
+  "57", 
+  "788", 
+  "774", 
+  "201", 
+  "202", 
+  "181", 
+  "228", 
+  "691", 
+  "523", 
+  "73", 
+  "749", 
+  "530", 
+  "385", 
+  "384", 
+  "286", 
+  "1", 
+  "156", 
+  "531", 
+  "361", 
+  "45", 
+  "43", 
+  "93", 
+  "46", 
+  "527", 
+  "589", 
+  "288", 
+  "215", 
+  "605", 
+  "138", 
+  "532", 
+  "588", 
+  "154", 
+  "362", 
+  "348", 
+  "328", 
+  "639", 
+  "635", 
+  "637", 
+  "638", 
+  "529", 
+  "497", 
+  "576", 
+  "300", 
+  "329", 
+  "237", 
+  "636", 
+  "600", 
+  "103", 
+  "534", 
+  "595", 
+  "137", 
+  "232", 
+  "593", 
+  "136", 
+  "104", 
+  "353", 
+  "14", 
+  "180", 
+  "526", 
+  "592", 
+  "594", 
+  "323", 
+  "490", 
+  "327", 
+  "203", 
+  "256", 
+  "258", 
+  "528", 
+  "415", 
+  "442", 
+  "342", 
+  "596", 
+  "157", 
+  "343", 
+  "331", 
+  "257", 
+  "89", 
+  "598", 
+  "599", 
+  "367", 
+  "344", 
+  "335", 
+  "277", 
+  "597", 
+  "371", 
+  "276", 
+  "275", 
+  "126", 
+  "113", 
+  "369", 
+  "108", 
+  "107", 
+  "590", 
+  "407", 
+  "414", 
+  "147", 
+  "99", 
+  "97", 
+  "124", 
+  "122", 
+  "110", 
+  "472", 
+  "591", 
+  "153", 
+  "100", 
+  "102", 
+  "173", 
+  "174", 
+  "481", 
+  "336", 
+  "406", 
+  "75", 
+  "159", 
+  "96", 
+  "72", 
+  "200", 
+  "266", 
+  "265", 
+  "263", 
+  "269", 
+  "231", 
+  "419", 
+  "179", 
+  "182", 
+  "525", 
+  "392", 
+  "391", 
+  "313", 
+  "390", 
+  "183", 
+  "417", 
+  "411", 
+  "315", 
+  "473", 
+  "479", 
+  "446", 
+  "146", 
+  "475", 
+  "474", 
+  "401", 
+  "421", 
+  "445", 
+  "483", 
+  "551", 
+  "480", 
+  "356", 
+  "476", 
+  "583", 
+  "324", 
+  "839", 
+  "462", 
+  "655", 
+  "325", 
+  "389", 
+  "393", 
+  "724", 
+  "440", 
+  "267", 
+  "227", 
+  "620", 
+  "477", 
+  "582", 
+  "268", 
+  "535", 
+  "464", 
+  "299", 
+  "16", 
+  "271", 
+  "259", 
+  "225", 
+  "247", 
+  "463", 
+  "693", 
+  "270", 
+  "548", 
+  "467", 
+  "465", 
+  "422", 
+  "418", 
+  "261", 
+  "489", 
+  "633", 
+  "466", 
+  "238", 
+  "244", 
+  "246", 
+  "482", 
+  "634", 
+  "671", 
+  "333", 
+  "326", 
+  "239", 
+  "248", 
+  "488", 
+  "448", 
+  "245", 
+  "484", 
+  "460", 
+  "332", 
+  "378", 
+  "25", 
+  "577", 
+  "461", 
+  "471", 
+  "381", 
+  "188", 
+  "565", 
+  "470", 
+  "469", 
+  "334", 
+  "379", 
+  "355", 
+  "284", 
+  "279", 
+  "175", 
+  "668", 
+  "550", 
+  "562", 
+  "373", 
+  "665", 
+  "354", 
+  "632", 
+  "485", 
+  "570", 
+  "575", 
+  "673", 
+  "131", 
+  "404", 
+  "587", 
+  "585", 
+  "549", 
+  "663", 
+  "41", 
+  "285", 
+  "739", 
+  "478", 
+  "40", 
+  "773", 
+  "262", 
+  "690", 
+  "78", 
+  "145", 
+  "358", 
+  "226", 
+  "260", 
+  "283", 
+  "687", 
+  "486", 
+  "133", 
+  "672", 
+  "95", 
+  "121", 
+  "322", 
+  "195", 
+  "264", 
+  "177", 
+  "396", 
+  "321", 
+  "359", 
+  "15", 
+  "402", 
+  "686", 
+  "619", 
+  "641", 
+  "615", 
+  "397", 
+  "59", 
+  "236", 
+  "282", 
+  "204", 
+  "786", 
+  "618", 
+  "614", 
+  "403", 
+  "376", 
+  "58", 
+  "212", 
+  "692", 
+  "584", 
+  "400", 
+  "56", 
+  "55", 
+  "199", 
+  "375", 
+  "374", 
+  "31", 
+  "405", 
+  "319", 
+  "640", 
+  "579", 
+  "670", 
+  "357", 
+  "505", 
+  "743", 
+  "493", 
+  "50", 
+  "92", 
+  "38", 
+  "784", 
+  "847", 
+  "320", 
+  "841", 
+  "213", 
+  "568", 
+  "741", 
+  "492", 
+  "39", 
+  "840", 
+  "254", 
+  "747", 
+  "827", 
+  "607", 
+  "53", 
+  "158", 
+  "398", 
+  "439", 
+  "753", 
+  "224", 
+  "438", 
+  "214", 
+  "835", 
+  "223", 
+  "626", 
+  "5", 
+  "54", 
+  "61", 
+  "119", 
+  "838", 
+  "302", 
+  "62", 
+  "52", 
+  "22", 
+  "165", 
+  "494", 
+  "13", 
+  "769", 
+  "622", 
+  "491", 
+  "301", 
+  "423", 
+  "118", 
+  "252", 
+  "222", 
+  "631", 
+  "317", 
+  "710", 
+  "318", 
+  "495", 
+  "36", 
+  "304", 
+  "762", 
+  "697", 
+  "630", 
+  "123", 
+  "760", 
+  "621", 
+  "674", 
+  "2", 
+  "253", 
+  "255", 
+  "846", 
+  "77", 
+  "453", 
+  "3", 
+  "708", 
+  "628", 
+  "291", 
+  "383", 
+  "308", 
+  "726", 
+  "771", 
+  "617", 
+  "625", 
+  "564", 
+  "581", 
+  "295", 
+  "292", 
+  "365", 
+  "830", 
+  "722", 
+  "845", 
+  "624", 
+  "656", 
+  "666", 
+  "42", 
+  "294", 
+  "694", 
+  "623", 
+  "627", 
+  "606", 
+  "580", 
+  "456", 
+  "47", 
+  "716", 
+  "732", 
+  "836", 
+  "507", 
+  "629", 
+  "654", 
+  "653", 
+  "293", 
+  "23", 
+  "758", 
+  "837", 
+  "613", 
+  "65", 
+  "48", 
+  "144", 
+  "459", 
+  "834", 
+  "780", 
+  "184", 
+  "457", 
+  "125", 
+  "833", 
+  "764", 
+  "831", 
+  "719", 
+  "844", 
+  "139", 
+  "616", 
+  "679", 
+  "681", 
+  "682", 
+  "458", 
+  "29", 
+  "766", 
+  "768", 
+  "825", 
+  "842", 
+  "166", 
+  "511", 
+  "26", 
+  "27", 
+  "30", 
+  "772", 
+  "219", 
+  "220", 
+  "610", 
+  "675", 
+  "17", 
+  "518", 
+  "509", 
+  "63", 
+  "770", 
+  "689", 
+  "221", 
+  "506", 
+  "677", 
+  "35", 
+  "37", 
+  "120", 
+  "832", 
+  "714", 
+  "738", 
+  "680", 
+  "678", 
+  "755", 
+  "730", 
+  "676", 
+  "443", 
+  "740", 
+  "713", 
+  "11", 
+  "444", 
+  "703", 
+  "742", 
+  "717", 
+  "745", 
+  "826", 
+  "501", 
+  "142", 
+  "642", 
+  "117", 
+  "130", 
+  "767", 
+  "503", 
+  "20", 
+  "18", 
+  "731", 
+  "808", 
+  "185", 
+  "170", 
+  "727", 
+  "90", 
+  "521", 
+  "569", 
+  "70", 
+  "191", 
+  "234", 
+  "515", 
+  "513", 
+  "522", 
+  "701", 
+  "311", 
+  "545", 
+  "684", 
+  "556", 
+  "517", 
+  "516", 
+  "514", 
+  "733", 
+  "211", 
+  "141", 
+  "519", 
+  "696", 
+  "350", 
+  "310", 
+  "210", 
+  "64", 
+  "520", 
+  "303", 
+  "699", 
+  "736", 
+  "729", 
+  "524", 
+  "450", 
+  "345", 
+  "725", 
+  "816", 
+  "822", 
+  "349", 
+  "192", 
+  "135", 
+  "746", 
+  "815", 
+  "813", 
+  "189", 
+  "190", 
+  "546", 
+  "643", 
+  "24", 
+  "33", 
+  "34", 
+  "510", 
+  "705", 
+  "744", 
+  "721", 
+  "712", 
+  "193", 
+  "553", 
+  "538", 
+  "555", 
+  "750", 
+  "817", 
+  "559", 
+  "539", 
+  "795", 
+  "818", 
+  "707", 
+  "351", 
+  "603", 
+  "604", 
+  "76", 
+  "794", 
+  "683", 
+  "206", 
+  "544", 
+  "819", 
+  "779", 
+  "783", 
+  "787", 
+  "789", 
+  "32", 
+  "706", 
+  "807", 
+  "805", 
+  "793", 
+  "297", 
+  "235", 
+  "105", 
+  "44", 
+  "543", 
+  "542", 
+  "759", 
+  "791", 
+  "711", 
+  "852", 
+  "290", 
+  "347", 
+  "289", 
+  "160", 
+  "536", 
+  "51", 
+  "757", 
+  "728", 
+  "811", 
+  "781", 
+  "785", 
+  "169", 
+  "810", 
+  "778", 
+  "541", 
+  "504", 
+  "98", 
+  "709", 
+  "148", 
+  "134", 
+  "748", 
+  "809", 
+  "704", 
+  "426", 
+  "163", 
+  "149", 
+  "4", 
+  "752", 
+  "346", 
+  "341", 
+  "305", 
+  "167", 
+  "162", 
+  "754", 
+  "12", 
+  "109", 
+  "67", 
+  "828", 
+  "540", 
+  "340", 
+  "10", 
+  "168", 
+  "824", 
+  "112", 
+  "554", 
+  "763", 
+  "688", 
+  "68", 
+  "756", 
+  "428", 
+  "106", 
+  "782", 
+  "229", 
+  "829", 
+  "496", 
+  "128", 
+  "127", 
+  "161", 
+  "249", 
+  "761", 
+  "176", 
+  "132", 
+  "561", 
+  "537", 
+  "306", 
+  "19", 
+  "432", 
+  "307", 
+  "309", 
+  "111", 
+  "171", 
+  "129", 
+  "164", 
+  "250", 
+  "178", 
+  "695", 
+  "21", 
+  "116", 
+  "804", 
+  "775", 
+  "197", 
+  "360", 
+  "803", 
+  "802", 
+  "800", 
+  "806", 
+  "801", 
+  "799", 
+  "798", 
+  "797", 
+  "217", 
+  "216", 
+  "718", 
+  "150", 
+  "843", 
+  "720", 
+  "790", 
+  "338", 
+  "152", 
+  "69", 
+  "151", 
+  "7", 
+  "86", 
+  "8", 
+  "207", 
+  "218", 
+  "796", 
+  "451", 
+  "88", 
+  "6", 
+  "172", 
+  "777", 
+  "558", 
+  "452", 
+  "209", 
+  "208", 
+  "776"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                      !!                   ##$$        %%%%&&'     ((              ))))     *** +                     ", 
+  "                                                       !!                  ##$$        %%%,&&      ((            ))))     **** ++                     ", 
+  "   -                          .                        !!                 ###$$       %%%/,''     ((           ))))     ****  ++                      ", 
+  "  --                         ...                       !!                 ###$$       %%//&'      ((          ))))    ****   +++                      ", 
+  "  --            00           ...                        !!                ###$$1   22%%%/&&'     ((         )))33    ***    +++                       ", 
+  "  --           00            ....                       !!                ###$$1  222%%%,&&44    ((        )))33   ****     ++                        ", 
+  "  --           00            5....                      !!                ###$$1 222%%%/,'4444  ((       ))))33  ****     +++                         ", 
+  "  --           00           655....                      !!  7777777     8##$$112229%%//&'4444  ((      ))) 333****     ++++                          ", 
+  "  --          00            65555....                    !!  7777777     ###$$112229%%/&&'4444  (      )))  33***     ++++                            ", 
+  "  --          00           66 5555...:.                  !!  77          ##;$$12229%%%,&&4444   (     ))   33**     ++++                              ", 
+  "  <<          00          66=  5555.:::.                 !!  77         ###$$$12229%%%,&'4444  ((    ))>>*33*   ++++++                 ?              ", 
+  "  <<<<<<   @  0          66===  5555::....               !!  77         ###A$$1229%%//,''444    (   )) >>333++++++++                  ????            ", 
+  " --  <<<<<<@ BBB        666 ==C CC555D......             !!  77 EEEEF  ###;AAG1299%%/&&'4444    (  )))*>*33+++                      ??? ????          ", 
+  " --HHIJJK<<LLLBBBBBB    66 CCCCCCCC55DDD.....            !!   EEEEEEFFF###AAAG229%%%/&&'4444    (( )) **33+                        ???    ??          ", 
+  " --HHHHHHHMM     BBBBBBB6  CC CC NNNDDDDD .....          !!   O    OOFF##AAAP9999%%%,&'4444     (()) *QQQ3                       ????                 ", 
+  " --HRJJHHHMM         BBB  CC CC  SSSS DDDDD......        !!   OO   OO T##AAAP999%%%%,&'4444     ()))QQQQ+                ??????????                   ", 
+  "U-HHRJJKHHMM             CC CCC NVVSSSSDDDDD .....       !!   OO   OO TTWWPP9999%%/%&''444       ))QQQ ++              ?????XX  ?                     ", 
+  "UUHHHHHKHMM             CCCCCC  YYVVVSSSSDDDDD ....Z     !!   OO   OOTTT[[P]^^^^%%/&&'4444      ))QQ__++              ???   XX                        ", 
+  "```IHHHHHMM             CCCCC  NaYYYVVVSSSbDDDDD..ZZ..   !!   OOOOOO TT[[[P ^^^%%%,&'4444      ccQQ __++             ???     XX                       ", 
+  "-`````KHHM               CCC dNNaaaYYYVVV bbDDDDDZZZ....  !    OOOO  T[[[ee ^^^%%%,&'4444    cccfQQ _++             g??       XXhhh                   ", 
+  "-  `````iM                   ddjjjaaaaYYY bb DDDDDDZ.....!!kk       TT[[[llll^%%%/,&'4444   cccffQQ _++             g??        hhhh                   ", 
+  "       `ii                  dd   jjjjaaa bb mmmDDDDDDD..nn.kkkk     TT[[ooppl^%%//&'4444  ccc  ffQ  _++              ??        qqhh                rrr", 
+  "       ii               d  dd      jjjjajbb ssmmttDDDDDnnn...kkkkkkuT[[[vvvpl^%%/&&'444w ccc   ffQ  _+xxx++++++      ??        XXhqrrrrrrrrrrrrrrrrrrr", 
+  "       ii              dddddd         jjjbjyyssttmmmDDDnnn.....kkkkzT[[[vvvvv%%%%&&4444wwc     ffQ{{{{xxxxxxx|+++rrrrrrrrrrrrrr}}rrrr~~~~~~~~~~~~~~~~~", 
+  "       ii             ddd d              bjjyyyttssmmmDnnDDD.......TT[[\u007fooooo%%%,,'4444cw    \u0080\u0080\u0080f\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0081\u0081\u0081~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~", 
+  "      ii             ddd                  jjjjytyssss\u0082\u0083\u0084DDDDD\u0085\u0085\u0085\u0085..T[[[\u0086\u0086\u0086\u0086\u0086\u0086\u0087\u0087/\u0087\u0087'\u0087\u0087\u0087\u0088\u0088\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u008a\u008a\u008a~~~~~~~~~~~~~~}}~~~~~~~~~~~~~        ", 
+  "      ii             dd       \u008b              jjtyyyss\u008c\u0084\u0084\u0083\u0083\u0083D\u0085\u0085\u0085\u0085\u0085\u0085\u0085\u0085\u008d\u008d\u008e\u0086\u0086\u0086\u0086\u008e\u008f\u008f\u008f/&&'\u008f\u008f\u008f\u0088\u0088\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u0089\u008a\u008a\u008a~~~~~\u0090~~~~     \u0091\u0091                    ", 
+  "      i             dd        \u008b\u0092\u008b\u008b             jjjjyy\u0093\u0084\u0084\u0094\u0083\u0083\u0083 \u0095\u0095\u0085\u0096\u0096\u0085\u0085\u008d\u008d\u008e\u008e\u008e\u008e\u008e\u008f\u008f\u008f\u008f/&\u008f'\u008f\u008f\u008f\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0099\u009a\u009b\u009c\u009c\u009d\u009d\u009e\u009e\u009e\u009e\u009e\u009e++       \u0090\u0090         \u0091                    ", 
+  "     ii            dd        \u008b\u008b\u0092\u008b\u008b\u008b\u008b             jj  \u0093\u0084\u0093\u0094\u0094j\u009fjjj\u0095\u0096\u0096\u0096\u008d\u008d\u008d\u008e\u008e\u008e\u008e\u008e\u008e\u008f\u008f\u008f\u008f&4444 \u00a0\u00a0       \u0099\u0099\u009a\u009b\u00a1\u00a1\u009d\u009d\u009d\u009e+++++        \u0090\u0090         \u0091\u0091                   ", 
+  "\u00a2    ii           ddd       \u008b\u008b\u008b\u0092  \u008b\u008b\u008b            jjjjjjjjjj\u009fjjjjz\u0096\u0096\u008d\u008d\u00a3\u00a4\u00a4\u00a5\u00a6\u00a6%%%%,,4444 \u00a0\u00a0       \u0099\u0099\u009a\u00a7\u00a1\u00a1\u00a1+                \u0090\u0090        \u0091\u0091                   ", 
+  "\u00a2\u00a2\u00a2\u00a2ii           ddd       \u008b\u008b\u008b\u0092\u0092                  jjj      \u00a8\u00a8   \u00a9\u0096\u0096\u0096\u008d\u00a3\u00a4\u00a5\u00aa\u00a6\u00a6%%%/&&'444 \u00a0\u00a0       \u0099\u0099\u009a\u009a\u00a1  +                \u0090\u0090         \u0091\u0091                  ", 
+  " \u00a2\u00a2\u00a2ii           dd        \u008b\u008b \u0092\u0092        \u00ab\u00ac\u00ab\u00ab               \u00a8\u00a8   \u00ad\u00ae\u0096\u008d\u008d\u00a3\u00a4\u00a5\u00aa\u00a6\u00a6%%%/&&'444  \u00a0        \u0099\u009a\u009a\u00a1\u00a1 ++                \u0090\u0090        \u0091\u0091                  ", 
+  "    i\u00a2\u00a2\u00a2\u00a2       dd        \u008b\u008b  \u0092\u0092 \u00af\u00af\u00b0\u00b0   \u00ac\u00ac\u00ab\u00ab\u00ab\u00ab      \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b2\u00b2   \u00b3\u00ae\u008d\u008d\u00a3\u00a3\u00a4\u00a5\u00aa\u00a6\u00a6%%%/&&'444  \u00a0\u00a0       \u0099\u0099\u009a\u00a7\u00a1 ++                \u0090\u0090         \u0091                  ", 
+  "\u00b4\u00b4    \u00a2\u00a2\u00a2\u00a2\u00a2\u00a2   dd        \u008b\u00b5\u008b \u0092\u0092  \u00af\u00af\u00b0\u00b0\u00b0\u00b0 \u00b6\u00b6  \u00ab\u00ab\u00ab\u00ab   \u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b1\u00b2\u00b2  \u00b3\u00b3\u00ae\u008d\u008d\u00a3\u00a4\u00a4\u00aa\u00aa\u00a6%%%%/,&444\u00b7  \u00a0\u00a0       \u0099\u0099\u009a\u00a7\u00a7\u00a1++                 \u0090\u0090        \u0091\u0091                 ", 
+  "\u00b4\u00b4\u00b4      \u00a2\u00a2\u00a2\u00a2 ddd       \u008b\u008b\u00b5\u00b5 \u0092\u0092\u0092\u0092\u00b8   \u00b0\u00b9\u00b9\u00b6\u00b6\u00ac\u00ac\u00ac \u00ab\u00ab   \u00b1\u00b1     \u00ba\u00b1   \u00b3\u00ae\u00ae\u008d\u008d\u00a3\u00a4\u00a4\u00aa\u00aa\u00a6%%%%\u00bb,&444\u00b7  \u00a0\u00a0       \u0099\u0099\u009a\u009a\u00a7\u00a7\u00a1++                \u0090\u0090        \u0091\u0091                 ", 
+  " \u00b4\u00b4\u00b4\u00b4      \u00a2 ddd        \u008b\u00b5\u00b5  \u00bc\u00bc\u0092\u0092\u0092\u00b8\u00b8   \u00b9\u00bd\u00ac\u00ac\u00ac\u00ac\u00ac\u00ac\u00ab   \u00be\u00be     \u00ba\u00ba   \u00b3\u00ae\u008d\u008d\u008d\u00bf\u00bf\u00a4\u00c0\u00c0\u00a6%%%/\u00bb\u00c1'444\u00c2   \u00a0        \u0099\u0099\u009a\u009a\u00c3\u00c4++                 \u0090\u0090        \u0091\u0091                ", 
+  "   \u00b4\u00c5\u00c5\u00c5\u00c5 dddddd        \u008b\u008b\u00b5\u00b5\u00bc\u00bc\u00bc\u00bc\u00bc\u00af\u00bc\u00b8\u00c6\u00c6\u00b8\u00c7\u00c7     \u00ac\u00ac\u00ac   \u00be\u00be     \u00ba\u00ba   \u00b3\u00ae\u008d\u008d\u008d \u00a4\u00a4\u00c0\u00a6%%%%\u00bb\u00bb&&444\u00c2   \u00a0\u00a0       \u0099\u0099\u00c8\u00c8\u00c3\u00c3 ++                \u0090\u0090        \u0091\u0091                ", 
+  "    \u00b4\u00b4\u00c5\u00c5\u00c5\u00c5dddd        \u008b\u008b\u00bc\u00bc\u00b5\u00b5\u00c9\u00c9\u00c9\u00ca\u00ca\u00bc\u00c6\u00c6\u00b8\u00b8\u00c7\u00c7      \u00ab    \u00be      \u00ba\u00ba  \u00cb\u00b3\u00ae\u008d\u008d  \u00a5\u00c0\u00c0\u00aa\u00cc%%%\u00bb\u00bb&'444\u00c2\u00b7  \u00a0\u00a0       \u0099\u0099\u00cd\u00c8\u00ce\u00cf\u00cf+++               \u00d0\u0090\u0090        \u0091                ", 
+  "     \u00b4\u00b4\u00b4\u00c5\u00c5\u00c5           \u008b\u008b\u00bc \u00b5\u00b5\u00c9\u00c9\u00c9\u00c9\u00c9\u00c9\u00c9\u00d1\u00bc\u00c7\u00c7      \u00ab\u00ab   \u00be\u00be      \u00ba   \u00b3\u00ae\u00ae\u008d\u008d  \u00a5\u00c0\u00c0\u00aa\u00cc%%%\u00bb\u00d2&4444\u00c2\u00b7  \u00a0\u00a0        \u0099\u0099\u00d3\u00d3 \u00cf\u00cf+++            \u00d0\u00d0\u00d0\u0090\u0090        \u0091\u0091               ", 
+  "       \u00b4\u00b4\u00b4\u00c5\u00c5\u00c5        \u00d4\u00d4\u00d4\u00d4\u00c9\u00c9\u00b5   \u00d5\u00c9\u00c9\u00c9\u00c9\u00c9\u00d6\u00d6\u00bc\u00bc    \u00ab\u00ab   \u00be\u00be    \u00d7\u00d7\u00d8   \u00b3\u00ae\u008d\u008d\u008d  \u00a5\u00c0\u00aa\u00cc\u00cc%%%\u00bb\u00d2&4444\u00b7\u00b7   \u00a0\u00a0       \u0099\u0099\u00d9\u00d3\u00d3\u00cf\u00cf\u00cf+++           \u00d0\u00d0  \u0090\u0090       \u0091\u0091               ", 
+  "        \u00b4\u00b4\u00b4\u00c5\u00c5\u00da      \u008b\u008b\u00d4\u00db\u00d4\u00d4\u00c9 \u00dc\u00dc\u00dc\u00d5\u00dc\u00dc \u00c9\u00c9\u00c9 \u00bc\u00bc\u00bc   \u00ab\u00ab   \u00be\u00be     \u00d7\u00d8   \u00b3\u00ae\u008d\u008d\u008d \u00a5\u00a5\u00c0\u00aa\u00cc%%%%\u00bb\u00bb&'444\u00b7\u00b7   \u00a0\u00a0        \u0099\u0099\u00d9\u00d3\u00d9\u00d9\u00cf\u00cf+++         \u00dd\u00de\u00df\u00df \u0090\u0090        \u0091\u0091              ", 
+  "         \u00b4\u00b4 \u00da\u00da\u00da    \u00e0\u00e0\u008b\u00bc\u00e1\u00e1\u00e1 \u00dc\u00dc\u00dc  \u00dc\u00dc\u00dc\u00e2\u00e2\u00c9\u00c9 \u00bc\u00bc\u00bc  \u00ab\u00ab   \u00e3\u00e3\u00e3\u00e3   \u00e4\u00e4   \u00b3\u00ae\u008d\u008d  \u00a5\u00c0\u00c0\u00aa\u00cc%%%%\u00bb\u00bb&'444 \u00b7\u00b7  \u00a0\u00a0         \u0099\u0099 \u00d9\u00d9\u00d9\u00d9\u00d9\u00d9+\u00d9        \u00dd\u00e5\u00df\u00df \u00e6\u0090        \u0091\u0091              ", 
+  "        \u00b4\u00b4   \u00da\u00da\u00e7\u00e7 \u00e0\u00e0\u00e0\u008b\u00bc\u00db\u00db\u00c9 \u00dc\u00dc     \u00dc\u00e2\u00e2 \u00c9\u00c9 \u00bc\u00bc \u00ab\u00ab   \u00be\u00e8\u00e8\u00e3\u00e3\u00e3  \u00e4\u00e4   \u00ae\u00ae\u008d\u008d  \u00a5\u00c0\u00c0\u00aa\u00cc%%%%\u00bb\u00bb&'444 \u00b7\u00b7  \u00a0\u00a0         \u0099\u0099    \u00d9\u00d9\u00d9\u00d9\u00d9\u00d9        \u00dd\u00e9\u00e6\u00e6\u00e6\u0090\u0090        \u0091              ", 
+  "       \u00b4\u00b4      \u00e7\u00e7\u00e7\u00ea\u00ea\u00ea\u008b\u00bc\u00db\u00db\u00c9 \u00dc\u00dc      \u00dc\u00dc\u00dc\u00c9\u00c9\u00eb\u00eb\u00bc \u00ab\u00ab   \u00ec\u00ec\u00e8\u00e8\u00e8\u00e3\u00e3 \u00e4  \u00ed\u00ed\u00ed\u008d\u008d\u008d  \u00a5\u00c0\u00aa\u00cc\u00cc%%%%\u00bb\u00d2&4\u00ee\u00ee4 \u00b7\u00b7   \u00a0\u00a0         \u0099\u0099    \u00cf\u00cf ++        \u00dd\u00dd\u00e6\u00e6 \u0090\u0090        \u0091\u0091             ", 
+  "       \u00b4\u00b4      \u00ef\u00ef\u00e0\u00ea\u00ea\u00ea\u00ea\u008b\u00bc\u00f0\u00c9\u00c9\u00f1\u00f1\u00dc      \u00dc\u00dc \u00c9\u00c9\u00eb\u00bc\u00ab\u00ab     \u00ec\u00ec\u00ec\u00e8\u00e8\u00e3\u00e4\u00e4  \u00f2\u00ed\u00ed\u00ed\u00ed\u00ed \u00a5\u00a5\u00c0\u00aa\u00cc\u00cc%%%%\u00bb\u00d2&\u00ee\u00ee\u00ee4 \u00b7\u00b7   \u00a0\u00a0          \u0099\u0099    \u00cf\u00cf ++             \u0090\u0090       \u00f3\u00f3             ", 
+  "              \u00ef\u00ef\u00ef\u00ef\u00e0 \u00ea\u00ea\u008b\u00bc\u00bc\u00c9\u00c9\u00f1\u00f1\u00dc\u00dc\u00dc    \u00dc\u00dc \u00c9\u00c9 \u00bc\u00ab\u00ab       \u00ec\u00e8\u00e8\u00e3\u00e4\u00e4  \u00f2\u00b3\u00ae\u008d\u00ed\u00ed \u00a5\u00c0\u00c0\u00aa\u00cc\u00cc%%%%/\u00c1'\u00ee\u00ee\u00ee\u00ee  \u00b7\u00b7  \u00a0\u00a0           \u0099\u0099   \u00cf\u00cf ++             \u0090\u0090      \u00f3\u00f3\u00f3             ", 
+  "              \u00ef\u00ef \u00e0\u00e0\u00e0\u00ea\u00ea\u008b\u00bc\u00bc \u00c9\u00c9\u00f4 \u00dc\u00f5\u00dc\u00dc\u00f6\u00f6\u00dc\u00dc \u00c9\u00c9 \u00bc\u00ab          \u00ec\u00ec\u00ec\u00e4   \u00ae\u00ae\u008d\u00ed\u00ed \u00a5\u00c0\u00c0\u00aa\u00cc\u00cc%%% /\u00c1&\u00ee\u00ee\u00ee\u00ee  \u00b7\u00b7   \u00a0            \u0099\u0099   \u00cf\u00cf +              \u0090\u0090    \u00f3\u00f3\u00f3              ", 
+  "             \u00ef\u00ef   \u00e0\u00ea\u00ea\u008b\u008b \u00bc\u00bc \u00f4\u00f4\u00c9\u00f5\u00f5\u00dc\u00dc\u00f6\u00f6\u00dc \u00c9\u00c9 \u00bc\u00ab\u00ab           \u00f7\u00f7    \u00ae\u008d\u008d\u008d\u00f8 \u00a5\u00c0\u00c0\u00aa\u00cc\u00cc%%% /\u00c1&\u00ee\u00ee\u00ee\u00f9  \u00b7\u00b7   \u00a0\u00a0           \u0099\u0099\u00fa\u00fa\u00fa\u00fb\u00fb ++             \u0090\u0090   \u00f3\u00f3\u00f3          \u00fc\u00fc\u00fc\u00fc\u00fc", 
+  "            \u00ef\u00ef      \u00e0\u00e0\u008b  \u00bc\u00fd\u00fd \u00c9\u00c9\u00c9\u00c9\u00c9\u00f6\u00f6\u00c9\u00fe\u00fe\u00c9 \u00bc\u00ab    \u00ff\u00ff\u0100    \u00f7\u00f7    \u00b3\u00ae\u008d\u008d\u008d\u00a5\u00a5\u00a5\u00c0\u00aa \u00cc%%%% /\u00d2&\u00ee\u00ee\u00ee\u00f9   \u00b7   \u00a0\u00a0            \u0099\u0099\u00fa\u00fa\u00fa\u00cf ++              \u0090\u0090 \u00f3\u00f3\u00f3       \u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc ", 
+  "           \u00ef\u00ef\u00ef       \u008b\u008b\u008b  \u00fd\u00bc   \u00c9\u00c9\u0101\u00c9\u00c9\u00c9\u00fe\u00fe \u00bc\u00ab\u00ab    \u00ff\u00ff\u0100\u0100   \u00f7\u00f7    \u00ae\u00ae\u008d\u008d\u008d\u00a5\u00a5\u00c0\u00c0\u00aa \u00cc%%%% /\u00d2\u00ee\u00ee\u00ee\u0102\u00f9\u0102  \u00b7\u00b7  \u00a0\u00a0            \u0099\u0099 \u00fa\u00fa\u00cf ++              \u0090\u0090 \u00f3\u00f3    \u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc     ", 
+  "          \u00ef\u00ef\u00ef         \u008b\u008b\u008b       \u0101\u0101\u0103\u0103  \u00fe\u00fe\u0104\u0104     \u0105\u00ff\u0100\u0100\u0100\u0100\u0106\u0106   \u0107\u0108\u00ae\u00ae\u008d\u008d   \u0109\u00c0\u00aa\u00cc\u00cc%%%% /\u00c1'\u00ee\u00ee \u0102\u0102  \u00b7\u00b7   \u00a0\u00a0           \u0099\u0099 \u00fa\u00fa\u00cf  +               \u0090\u00f3\u00f3 \u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc         ", 
+  "          \u010a\u010b\u010b           \u008b\u008b\u008b     \u010c\u010d \u0103\u0103\u00bc\u00fe\u00fe\u0104\u0104    \u0105\u0105   \u0100\u0100\u0106\u0106\u0107\u0108\u0108\u0108\u0108\u00ae\u008d\u008d\u008d\u010e  \u0109\u0109\u00aa\u00cc\u00cc%%%% /\u00c1&\u00ee\u0102  \u0102\u0102 \u00b7\u00b7   \u00a0\u00a0            \u0099 \u00fa\u00fa\u00cf  ++              \u010f\u010f\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc             ", 
+  "\u0110        \u00ef\u010a\u010a\u010b\u010b           \u008b\u008b\u008b    \u0111\u00ab\u00ab\u0103\u0103\u00ab\u00ab\u0104\u0104      \u0100\u0100\u0100\u0100\u0100\u0106\u0106\u0107\u0108\u0108\u0108\u0108\u0108\u00ae\u008d\u008d\u008d\u010e\u010e\u0112\u0109\u00aa\u00aa\u00cc%%%% \u00ee/\u0113&\u00ee\u0102  \u0102\u0102  \u00b7   \u00a0\u00a0            \u0099\u0099\u00fa\u00fa\u00cf\u00cf ++   \u0114         \u010f\u010f\u00fc\u00fc\u00fc                 ", 
+  "\u0115\u0115      \u00ef\u00ef \u010a\u010a\u010a\u010b\u010b          \u008b\u008b\u008b  \u00ab\u0111\u00ab\u00ab\u00ab\u0103\u00ab\u0104\u0104        \u0100\u0100\u0100\u0100\u0106\u0106\u0108\u0108\u0108\u0108\u0116\u0117\u0117\u0117\u008d\u010e\u010e\u010e\u0112\u0112\u0112\u00cc\u00cc%%%% \u00ee\u00ee\u0113&'\u0102\u0102  \u0102\u0102 \u0118\u0118\u0118\u0118 \u00a0\u00a0           \u0099\u0099 \u00fa\u00fa\u0119\u00cf\u00cf++\u011a\u011a\u011b\u011b       \u010f\u010f           [...]
+  "\u011c\u0115\u0115    \u00ef\u00ef\u00ef  \u010a\u010a\u010a\u010b\u010b           \u008b\u008b\u008b\u0111\u011d\u011d\u011d\u011d \u0104\u0104\u0104         \u0100\u0100\u0106\u0106\u0107\u011e\u011e\u0108\u0116\u011f\u0120\u0120\u0121\u0121\u0122\u010e\u0112\u0112\u00cc\u00cc\u00cc\u00cc%%%%\u00ee\u00ee\u00ee\u00d2\u00ee'\u0102\u0102   \u0102\u0102\u0118\u0118\u0118  \u00a0\u00a0           \u0099\u0099 \u00fa\u00fa\u00fa\u00cf  \u0123\u0124\u0124\u011b\u011b      \u010f\u010f       [...]
+  " \u011c\u0115\u0115\u0115  \u00ef\u00ef    \u010a\u010a\u010a\u010b\u010b           \u008b\u008b\u0111\u011d\u011d\u011d\u011d\u0104\u0104\u0104            \u0106\u0107\u011e\u011e\u011e\u011f  \u0120\u0120\u0121\u0121\u0126\u0127\u0127\u0127\u00cc\u00cc\u00cc%%%%\u00ee\u00ee\u00ee/\u00c1\u00c1' \u0102\u0102  \u0102\u0102\u00b7\u0128    \u00a0\u00a0\u00a0\u00a0\u00a0       \u0099\u0099 \u0119\u0119\u0119   \u0124\u0124\u0124\u011b\u011b     \u010f\u010f               \u0125\u0125\u012 [...]
+  "  \u011c\u011c\u0115\u0115\u00ef\u00ef       \u010a\u010a\u010a\u010b           \u008b\u0111\u011d\u011d\u011d\u011d\u0104\u0104            \u0106\u0107\u011e\u011e\u011e\u0129\u0129  \u0120\u0120\u0121\u0121 \u012a\u0127\u0127\u0127\u00cc\u00cc%%%%\u00ee\u00ee\u00ee//&' \u0102\u0102   \u0102\u0128\u0128     \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0099 \u0119\u0119    \u0124\u0124\u0124\u011b\u011b    \u010f\u010f            \u0125\u0125\u0125\u0125\u0125\ [...]
+  "  \u012c\u011c\u011c\u0115\u0115\u012d        \u010a\u010a\u010a\u010b\u010b           \u008b\u012e\u012e\u0104\u0104            \u0106\u0106\u011e\u011e\u011e\u0129\u0129\u0129\u0129\u0120\u0120\u0120\u0121\u0121\u0121\u012f\u012a\u012a\u0127\u0127\u0130%%%\u00ee\u00ee\u00ee\u00ee/\u0113&'  \u0102\u0102   \u0102\u0102\u0102          \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u0131\u0131\u0131\u0131\u0131   \u0132\u0132 \u011b\u011b \u0133\u010f\u010f\u010f        \u0125\u0125\u0125\u0125\u [...]
+  "\u00b4\u0135\u012c\u012c\u012c\u0115\u0115\u0115\u012d        \u010a\u010a\u010a\u010b\u010b          \u012e\u012e\u012e\u0136\u0104            \u0106\u011e\u011e\u011e\u0129\u0129\u0129\u0129\u0129\u0120\u0120\u0120\u0121\u0121\u0121\u0137\u0138\u0138\u0127\u0127\u0139\u0139%%\u00ee\u00ee\u00ee\u00ee/\u0113&&' \u0102\u0102  \u013a\u013a\u0102\u0102\u0102               \u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0131\u0133\u010f\u010f\u010f     \u0125\u01 [...]
+  "\u00b4\u0135\u0135\u0135\u00ef\u00ef\u011c\u011c\u0115\u0115         \u010a\u010a\u010b\u010b         \u012e\u012e\u0136\u013c            \u0106\u0107\u011e\u011e\u011e\u0129\u0129\u0129\u0129\u0129\u0120\u0120\u0120\u0121\u0138\u0138\u0138\u0138\u013d\u012a\u0139\u013e\u013e\u0139\u00ee\u00ee\u00ee\u00ee\u013f/\u00d2&&'  \u0102\u0102\u013a\u013a\u013a \u0102\u0102\u0102                     \u0131\u0131\u0131\u0131\u0131\u0131  \u0140\u0140\u0140\u0125\u0125\u0125\u0125\u0125\u0125\u0 [...]
+  "\u00b4  \u00ef\u00ef  \u011c\u011c\u0115\u0115         \u010a\u010a\u010a\u010b\u010b      \u012e\u012e\u0136\u013c\u013c\u013c          \u0106\u0107\u011e\u011e\u011e\u011f\u0141\u0142\u0129\u0129\u0143\u0120\u0120\u0138\u0138\u0138\u0138\u0121\u0144\u0144\u0139\u013e\u013e\u013e\u013e\u00ee\u00ee\u00ee\u013f\u0145//\u00c1&'   \u0102\u0102 \u013a\u013a  \u0102\u0102\u0102                            \u0140\u0125\u0125\u0125\u0125\u0125   \u012b\u012b\u012b\u012b\u012b\u0134\u0134\u013 [...]
+  "\u00b4 \u00ef\u00ef    \u0146\u0115\u0115\u0115\u012d        \u010a\u010a\u010a\u010b\u010b    \u012e\u012e\u0136\u0136 \u013c\u013c\u0147        \u0148\u0148\u011e\u011e\u011e\u011f\u0141\u0129\u0143\u0143\u0143\u0143\u0120\u0120\u0143\u0138 \u0121\u0121\u0121\u0139\u0139\u013e\u013e\u013e\u013e\u00ee\u00ee\u00ee\u0145\u0145//\u00c1&'   \u0102\u0102\u0102\u013a\u0149\u0149  \u0102\u0102\u0102\u013a                               \u012b\u012b\u012b\u012b\u0134\u0134\u0134\u0134\u0134\u [...]
+  "\u014a\u00ef\u00ef\u00ef     \u0146\u011c\u011c\u0115\u014b         \u010a\u010a\u010b\u010b  \u012e\u012e\u0136\u0136   \u014c\u0147\u0147\u014c      \u0106\u011e\u011e\u011e\u011f\u014d\u014d\u0143\u0143\u0143\u0143\u0143\u014e\u014e\u0143\u014f\u014f\u0139\u0139\u0139\u0139\u0139\u013e\u013e\u013e\u00ee\u00ee\u00ee\u013f\u0145\u0145 /\u0113&''   \u0102\u0102\u0149\u0149\u013a\u013a   \u013a\u013a\u013a\u013a                        \u012b\u012b\u012b\u012b\u012b\u0134\u0134\u0134\u0 [...]
+  "\u014a\u00ef\u00ef        \u011c\u0115\u014b\u014b         \u010a\u010a\u010a\u010b\u010b\u012e\u012e\u0136    \u014c\u014c\u014c\u014c\u014c    \u0106\u0107\u011e\u011e\u011e\u014d\u014d\u014d\u014d\u014f\u014f\u014f\u014f\u014e\u014e\u014f\u014f\u0139\u0139\u0139\u0139\u0139\u013e\u013e\u013e\u013e\u00ee\u00ee\u013f\u0152\u0145 \u0153\u00d2\u0113&&'    \u0149\u0149  \u013a\u013a   \u013a\u013a\u0154\u0154\u013a\u013a\u013a                \u012b\u012b\u012b\u012b\u0134\u0134\u012b\u0 [...]
+  "\u0155\u014a\u014a\u014a        \u0146\u0156\u014b\u014b\u012d        \u010a\u010a\u010a\u012e\u012e\u0136\u0136   \u014c\u014c  \u014c\u014c\u0157  \u0106\u0107\u011e\u011e\u011e\u014d\u014d\u014d\u014d\u014d\u0158\u0158\u0158\u0158\u014e\u014e\u014f\u014f\u0139\u0139\u0139\u0139\u0139\u013e\u013e\u013e\u00ee\u00ee\u013f\u013f\u0152\u0152 \u0153\u0159\u0113&&'     \u0102\u0102  \u013a\u013a\u013a  \u013a\u0154\u0154\u0154\u0154\u0154\u0154\u0154\u015a\u015a\u015a\u015a\u015a\u015a\u0 [...]
+  "\u015d \u014a\u014a\u014a        \u0146\u014b\u011c\u0115\u0115        \u010a\u012e\u012e\u0136\u0136   \u014c\u014c     \u0157\u0157\u0106\u0106\u011e\u011e\u011e\u014d\u014d\u014d\u014d\u0158\u0158\u0158\u0158\u0158\u0158\u014e\u014e\u0158\u0158\u014f\u0139\u0139\u0139\u015e\u013e\u013e\u013e\u00ee\u00ee\u015f\u0160\u0152\u0152 \u0153\u0159/\u00c1\u00c1''\u0161    \u0102\u0102  \u013a\u013a\u013a\u013a\u013a\u013a  \u0154\u0154\u0154\u015a\u015a\u015a\u015a\u015a\u015a\u015a\u015a\u [...]
+  "\u015d\u0155  \u014a\u014a\u014a        \u014b\u0115\u0115\u0115       \u012e\u012e\u0136\u0136   \u014c\u014c\u014c      \u0157\u0106\u011e\u011e\u011e\u014d\u014d\u014d\u014d\u0158\u0158\u0158\u0158\u0158\u0158\u0158\u014e\u014e\u014e\u0158\u0158\u0158\u0158 \u015e\u013e\u013e\u00ee\u00ee\u013f\u015f\u015f\u0152\u0152 \u0153\u0153/\u0113&''\u0161  \u0164\u0164\u0164\u0102\u0164  \u013a\u013a\u013a\u0165\u0165     \u015a\u015a   \u0166\u0166\u012b\u012b\u0134\u0162\u0134\u0134\u0134\ [...]
+  "\u015d\u015d\u0155\u0155\u0168\u0168\u014a\u014a        \u011c\u0115\u0115\u0115\u012d    \u012e\u012e\u012e\u0136   \u014c\u014c\u014c       \u0106\u0107\u011e\u011e\u011e\u014d\u014d\u0158\u0158\u0158\u0158\u0169\u0169\u0169\u0169\u0169\u014e\u014e\u014e\u0158\u0158\u0158\u0158\u0158\u016a\u016a\u016b\u016b\u013f\u016c\u015f\u015f\u0144\u0152\u0152 \u0153\u00d2\u0113\u0113&''\u0161\u0164\u0164\u0164\u0164\u0164\u0164\u0102\u0102   \u0165\u0165\u0165\u0165\u0165 \u015a\u015a\u015a\u0 [...]
+  "\u015d\u015d\u0155\u0155\u0168\u0168\u014a\u014a\u014a        \u0146\u0115\u011c\u0115\u012d   \u012e\u012e\u0136    \u014c\u014c       \u0106\u0107\u011e\u011e\u011e\u014d\u014d\u0158\u0158\u0158\u0169\u0169\u016e\u016e\u016e\u0169\u0169\u0169\u014e\u014e\u0158\u016f\u0158\u0158\u016a\u016a\u016a\u016a\u0170\u0171\u0171\u015f\u015f\u015f\u0152\u0152 \u0153\u00d2 \u0113&&'\u0161\u0161     \u0102\u0102\u0102     \u0165\u015a\u015a\u0166\u0166\u0166\u0166\u016d\u0162\u016d\u016d\u016d \ [...]
+  "\u015d\u0155\u0155\u0168\u0168  \u014a\u014a\u014a        \u0146\u011c\u0115\u0115\u0115 \u012e\u012e\u0136\u0136   \u0173\u014c       \u0106\u0107\u011e\u011e\u011e\u014d\u014d\u014d\u0158\u0169\u0169\u016e\u016e\u016e\u016e\u016e\u016e\u016e \u014e\u014e\u016f\u016f\u016f\u0158\u016a\u016a\u016a\u016a\u0170\u0171\u0171\u0174\u015f\u015f\u0152\u0152 \u0159/ \u0113&&'\u0161\u0161\u0161      \u0102\u0102\u0102\u0102\u015a\u015a\u015a\u0166\u0166\u0166\u0166\u0162\u016d\u016d\u0175\u016 [...]
+  "\u015d\u0176\u0168\u0168     \u014a\u014a\u014a        \u011c\u0115\u0115\u0115\u012e\u0136\u0136   \u0173\u0173\u0177\u0177     \u0106\u0106\u011e\u011e\u011e\u014d\u014d\u014d\u0158\u0169\u0169\u016e\u016e\u0178\u0178\u0178 \u016e\u016e\u0179\u017a\u017a\u017a\u016f\u016f\u016f\u016a\u016a\u016a\u0170\u0171\u0171\u0171\u0174\u015f\u015f\u015f\u0152\u0159\u0159/  \u00c1&''\u0161\u0161       \u0102\u017b\u017b\u0102\u0166\u0166\u0166\u0166\u016d\u0162\u016d\u016d\u0175 \u0167\u0167\u0 [...]
+  "\u017d\u017d\u0168\u0176\u0176     \u014a\u014a\u014a        \u0146\u0115\u0115\u012d\u0136   \u0173\u0173\u0173\u0177\u0177     \u0106\u0107\u011e\u011e\u011e\u014d\u014d\u0158\u0169\u0169\u016e\u016e\u0178\u0178\u0178\u0178\u0178\u0178 \u0179\u017a\u017a\u017a\u016f\u016f\u016f\u016a\u016a\u016a\u0170\u0171\u0171\u0171\u0174\u015f\u015f\u015f\u0152\u017e\u0159\u017f\u017e\u0180\u0113&&' \u0161\u0161       \u017b\u017b\u017b\u0166\u0162\u016d\u016d\u016d\u016d\u0175\u0167\u0167\u0167 [...]
+  "\u017d\u017d\u0168\u0176\u0176      \u014a\u014a\u014a        \u0146\u0146\u012d    \u0181\u0173\u0177\u0177      \u0107\u011e\u011e\u011e\u014d\u014d\u0158\u0158\u0182\u0182\u0183\u0183\u0183\u0183\u0183\u0183\u0178\u0178\u0178\u016e\u016e\u017a\u017a\u016f\u016f\u016a\u016a\u016a\u016a\u0170\u0158\u0171\u0171\u0174\u0174\u015f\u015f\u0152\u0159\u0159\u017f\u0180\u0180\u0113\u0113&''\u0161\u0161     \u0166\u0166\u0166\u0166\u017b\u0184\u0162\u016d\u0175\u0175\u0163\u0167\u0167\u0167\ [...]
+  "\u0186\u0168          \u014a\u014a\u014a      \u012e\u012e\u0136\u0136   \u0181\u0181\u0177\u0177      \u0107\u011e\u011e\u011e\u014d\u014d\u014d\u0158\u0182\u0182\u0182\u0183\u0183\u0183\u0183\u0183\u0183\u0183\u0183\u0178\u0178\u016e\u017a\u017a\u017a\u016f\u016a\u016a\u016a\u016a\u0170\u0158\u0171\u0171\u0174\u0174\u0187\u0187 \u0159\u0159\u00d2  \u0180\u0113&&' \u0161\u0161  \u0166\u0166\u0166\u0166\u0188\u016d\u016d\u0175\u017b\u017b\u017b \u0163\u0163\u0163\u0163\u0163\u017c\u01 [...]
+  "\u0186            \u0189\u0189\u014a\u014a   \u012e\u012e\u0136\u0136   \u018a\u018a\u018a\u018a\u018a     \u0107\u011e\u011e\u011e\u014d\u014d\u014d\u0158\u0182\u0182\u0182\u0182      \u0183\u0183\u0183\u0183\u0183\u017a\u017a\u017a\u016f\u018b\u016a\u016a\u0170\u0170\u0158\u0171\u0171\u0171\u0187\u0187\u0187 \u0159\u0159\u00d2\u00d2 \u0180\u0113\u00c1\u00c1''\u0161\u0161\u0166\u0166\u0166\u0166\u0162\u0162\u0162\u016d\u0175\u0175 \u017b\u017b\u018c  \u0163\u0163\u0163\u0163\u018d\u0 [...]
+  "            \u0189\u0189\u0189\u014a\u014a\u014a \u012e\u012e\u0136\u0136   \u018a\u018f\u018f\u018f\u018f\u018f\u018f\u018f   \u0107\u011e\u011e\u011e\u014d\u014d\u0158\u0182\u0182\u0182\u0182\u0190         \u0183\u0183\u0183\u017a\u017a\u016f\u018b\u0191\u0191\u0191\u0191\u0158\u0158\u0171\u0171\u0187\u0187\u0187 \u0159\u0159\u017f\u00d2  \u0180\u0113&&'\u0166\u0166\u0166\u0166\u0192\u016d\u016d\u016d\u016d\u0175\u0175          \u018d\u018d\u018d\u018d  \u013b\u013b   \u0150\u0150\u [...]
+  "          \u0193\u0193\u0189\u0189  \u014a\u014a\u014a\u012e\u012e\u0136   \u018a\u018f\u018f\u018f\u018f\u018f\u018f\u018f\u018f\u018f \u0107\u011e\u011e\u011e\u014d\u014d\u0158\u0158\u0182\u0182\u0182\u0182\u0190\u0190\u0194\u0194\u0194\u0194\u0194    \u0183\u0195\u017a\u017a\u017a\u018b\u0191\u0191\u0191\u0191\u0158\u0158\u0171\u0171\u0187\u0187\u0196 \u0159\u0159\u017f\u00d2   \u0113\u0113\u0197\u0198\u0198\u0166\u0192\u0162\u016d\u016d\u016d\u0175\u0175\u0175          \u018d\u018 [...]
+  "\u0199         \u0193\u0193\u019a\u019b\u019b\u019b  \u012e\u012e\u0136\u0136  \u018f\u018f\u018f\u018f\u019c\u019c \u018f\u018f\u018f\u018f\u018f\u011e\u011e\u011e\u014d\u014d\u014d\u0158\u0182\u0182\u0182  \u019d\u019d\u019d\u0194\u0194\u0194\u0194\u0194 \u019e\u019e\u019e\u019f\u019f\u017a\u017a\u018b\u0191\u0191\u0191\u0191\u0158\u0158\u0171\u0187\u0187\u0187 \u0159\u0159 \u017f\u00d2   \u0166\u01a0\u01a0\u01a1\u0198\u016d\u0162\u016d\u016d\u0175\u0175\u0175           \u018d\u018d [...]
+  "\u0199\u01a3        \u0189\u019a\u019a\u019b\u019b\u019b\u019b\u019b \u0136\u01a4\u01a5\u01a5 \u018f\u018f\u018f\u019c\u019c\u019c\u019c\u019c \u018f\u018f\u011e\u011e\u011e\u014d\u014d\u014d\u01a6\u0182\u0182\u0182 \u0194\u01a7\u0194\u019d\u019d\u019d\u019d  \u0194\u019e\u019e\u019e  \u019f\u017a\u017a\u018b\u0191\u0191\u0191\u0191\u0158\u0158\u0171\u0187\u0187\u0187 \u0159\u0159 \u017f\u00d2 \u0166\u0166\u0166\u01a0\u01a0\u01a1\u016d\u016d\u016d\u0175\u0175\u0175      \u018d\u018d\u [...]
+  "\u01a3\u01a3\u01a9      \u0189\u01aa\u01aa    \u019b\u019b \u01ab\u01a4\u01a5\u01a5\u018f\u018f\u018f\u019c\u019c \u01ac\u019c\u019c\u019c\u01ad\u011e\u011e\u011e\u014d\u014d\u014d\u01ae\u01a6\u0182\u0182 \u0194\u0194\u01a7\u01a7\u01a7 \u019d\u019d\u019d\u019d \u019e\u0194   \u019f\u017a\u017a\u018b\u018b\u0191\u0191\u0191\u0158\u0158\u0171\u0187\u0187 \u0159\u0159 \u01af\u01af\u01b0\u01b1\u0166\u0166\u0162\u016d\u0162\u0197\u0198\u0198\u0175\u0175      \u018d\u018d\u018d\u018d\u018d\ [...]
+  "\u0155\u0155\u01a9\u0199\u0199\u01b2  \u01b3\u01b3\u0189\u019b        \u01b4\u01b5\u018f\u018f\u018f\u019c\u019c \u01ac\u01ac\u01ac\u019c\u019c\u0107\u011e\u011e\u011e\u014d\u014d\u014d\u01a6\u01a6\u01a6 \u0194\u01b6\u01b6\u01b6\u01a7\u01a7\u01a7\u01a7 \u019d\u019d\u019d\u0194\u0194   \u019f\u019f\u017a\u017a\u018b\u0191\u0191\u0191\u01b7\u01b7\u0187\u0187\u0187 \u0159\u0159 \u01b1\u01af\u01b0\u01b8\u01b9\u0162\u016d\u016d\u01a0\u0197\u0197\u0198\u0198\u0198     \u018d\u018d\u018d\u01 [...]
+  " \u0155\u0155\u0199\u01ba\u01ba  \u0189\u01b3\u01b3          \u01ab\u018f\u018f\u01bb\u01bb\u019c\u01ac\u01ac\u01ac\u01ac\u01ac\u0107\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bd\u01bd\u01bd \u01be\u01be\u0194\u01b6\u01b6\u01b6 \u01a7\u01a7\u01a7\u01a7\u019d\u019d\u019d\u019d    \u019f\u017a\u017a\u018b\u0191\u0191\u01b7\u01b7\u01b7\u01b7\u0187\u0187\u0159\u0159\u01b1\u01b1\u01b1\u01af\u01af\u01bf\u01b9\u016d\u016d\u0175\u0175\u01a0\u01a1\u01a1\u0198\u01c0 \u018d\u018d\u018d\u018d\u018d\ [...]
+  "  \u0155 \u01ba\u01ba\u01ba\u0189\u0189\u019b\u019b         \u01ab\u01ab\u01c2\u01bb\u01bb\u01bb\u01bb\u01ac\u01ac  \u0107\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01ae\u01bd\u01bd\u01bd\u0194\u01be\u01be\u01be  \u01b6\u01b6\u01b6 \u01a7\u01a7\u01a7\u01a7\u0194\u0194    \u019f\u019f\u017a\u018b\u0191\u01b7\u01b7\u01b7\u01b7\u01c3\u01c3\u0159\u0159\u01b1\u01b1\u01b1\u01bf\u01c4\u01bf\u01c5\u0175\u0175\u0175\u0175\u0175\u01a1\u01c6\u01c7\u01c0\u01c0\u018d\u018d\u018d\u018d\u018d       \u018 [...]
+  "\u01c9 \u0155  \u01b2\u01ba\u0189\u01ca\u019b\u019b         \u01ab\u01ab\u01cb\u01cc\u01cd\u01bb\u01bb\u01bb\u01bb  \u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bc\u01a6\u01a6\u01bd\u01bd\u01bd\u01ce \u01be\u01be\u01be \u01b6\u01b6\u01b6\u01b6 \u01a7\u01a7\u01a7     \u019f\u019f\u017a\u01b7\u01b7\u01b7\u01b7\u01cf\u01cf\u01c3\u0159\u0159\u01b1\u01c4\u01bf\u01bf\u01d0\u01d0\u01b0\u0175\u01d1\u0175\u0175   \u01c6\u01c6\u01c7\u01c0\u01c0         \u018d\u0150\u01c8\u0151\u0151\u015b\u01d2\u01d [...]
+  "\u01c9\u01c9\u0155 \u01b2\u01b2 \u01ca\u01ca\u01ca         \u01ab\u01ab\u01cb\u01cc\u01cc\u01cd\u01cd\u01bb\u01bb\u01bb\u01bb\u0107\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01ae\u01a6\u01d5\u01d5\u01bd\u01bd\u01bd\u01ce\u01ce\u01be\u01be\u01be\u01be \u01b6\u01b6\u01b6\u0194\u0194\u01a7     \u019f\u019f\u01b7\u01b7\u01b7\u01d6\u01d7\u01d7\u01d8\u01b1\u0159\u01b1\u01c4\u01bf\u01bf\u01d9\u0175\u01af\u01b0\u0175\u0175      \u01c6\u01c6\u01c0\u01c0\u018d      \u018d\u0150\u0150\u0150\u0151\u01 [...]
+  "\u01c9\u01c9\u0155 \u01b2\u01b2  \u01ca\u01ca\u019b        \u01dc\u01dc\u01cb\u01cc\u01cc\u01cd\u01dd\u01cb\u01bb\u01bb\u01bb\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01ae\u01de\u01df\u01d5\u01d5\u01e0\u01bd\u01bd\u01ce\u01ce\u01ce\u01ce\u01be\u01be\u01be\u0194\u0194\u01b6\u0194      \u01e1\u01e1\u01e1\u01b7\u01b7\u01d6\u01d7\u0159\u0159\u01d7\u01b1\u01bf\u01e2\u01e2\u01d1\u01d1\u0175\u0175\u0175\u01b0\u01b0\u01b0      \u01c6\u01e3\u01e3\u01c0\u01c0\u018d   \u018d\u0150\u0151\u0151\u0150\ [...]
+  "\u01c9\u01c9\u01c9\u01c9\u01b2\u01b2\u01e5  \u019b\u019b       \u01ab\u01ab\u01dc\u01cb\u01cc\u01cd\u01cd\u01dd\u01e6\u01cb\u01bb\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01ae\u01de\u01de\u01df\u01df\u01d5\u01de\u01bd\u01bd\u01bd\u0194\u01ce\u01ce\u0194\u0194\u01be\u0194\u0194     \u01e7\u01e8\u01e1\u01e1\u01e1\u01e1\u01b7\u01b7\u01e9\u0159\u0159\u01ea\u01bf\u01bf\u01bf\u01e2\u01d0\u0175\u0175\u0175\u0175 \u01eb\u01b0        \u01c6\u01c6\u01c7\u01c0\u01c0\u01ec\u018d\u0150\u0150\u0150\u01 [...]
+  " \u01c9\u01c9\u01c9\u01c9\u01b2\u01e5\u01e5\u01e5\u019b\u019b       \u01ab\u01ab\u01c2\u01ed\u01cc\u01cd\u01ee\u01dd\u01e6\u01cb\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bc\u01de\u01de\u01de\u01de\u01de\u01de\u01de\u01de\u01bd\u01bd\u0194\u0194     \u01e7\u01e7\u01e7\u01e8\u01e7\u01e8\u01e8\u01e8\u01e1\u01e1\u01e1\u01e1\u0159\u0159\u01b1\u01b1\u01ea\u01ef\u01ef\u01d1\u01d1\u01d8\u0175\u0175\u0175   \u01f0\u01f0         \u01c6\u01c6\u01c7\u01c0\u01ec\u0151\u0151\u015b\u0151\u015c\u015c\u [...]
+  "\u0159 \u01c9\u01c9\u01c9\u01c9\u01c9\u01e5\u01e5\u019b        \u01ab\u01c2\u01c2\u01ed\u01ed\u01ee\u01f1\u01e6\u01cb\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bc\u0169\u01de\u01de\u01de\u01de\u01de\u01de\u01de\u01de\u01bd\u01bd\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e1\u01e1\u0159\u0159\u0159\u0159\u01e9\u01bf\u01bf\u0162\u01d7\u0175\u0175\u0175\u0175 \u01f2\u01f2\u01f2 \u01eb\u01f0          \u01ec\u01f3\u01f3\u01f3\u01f3\u015c\u015c [...]
+  "\u0159\u0159 \u01c9\u01c9\u01c9\u01c9\u01c9\u01c9\u019b\u01e5\u01e5\u01e5    \u01ab\u01ab\u01c2\u01ed\u01ed\u01ee\u01ee\u01f1\u01e6\u01cb\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01ae\u0169\u01de\u01de\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01bd\u01bd\u01e7\u01e7\u01e7\u01e7\u01e7\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u0159\u0159\u01b1\u01b1\u01ea\u01ef\u01bf\u01f4\u01f4\u01d7\u01d0\u0175\u01d7\u01c3\u01f5\u01f2\u01f6\u01f6  \u01f0\u01f0        \u01f7\u01f7\u01f8\u01f9 [...]
+  "\u01b1\u0159\u0159\u0159\u01fc\u01c9\u01c9\u01c9\u01fd\u01fd\u01fd\u01e5\u01e5\u01e5\u01e5\u01e5 \u01ab\u01ab\u01ed\u01ed\u01ee\u01ee\u01f1\u01f1\u01fe\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bc\u0169\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01ff\u01ff\u01e7\u01e7\u01e7\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u0159\u0159\u0159\u0159\u01b1\u01bf\u01ef\u0162\u01f4\u0175\u0175\u01d6\u01d7\u01d7\u01d8\u01d8\u0200\u01f2 \u01f6\u01f6 \u01f0\u01f0      \u01f7 [...]
+  "\u0201\u0201\u01b1\u01fc\u01fc\u0202\u0202\u01c9\u01fd\u01fd\u01fd\u01fd\u01fd\u01fd\u01e5\u01e5\u01ab\u01ab\u01c2\u01ed\u01ee\u01ee\u01f1\u01f1\u01fe\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bc\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01ff\u01ff\u01e7\u01e7\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u0159\u01b1\u01b1\u01b1\u01ea\u01bf\u01bf\u01bf\u0162\u0175\u0175\u0175\u01e9\u01d6\u01d6\u0203\u0203\u0204\u0200\u01f5    \u01eb\u01f0    \u01f7\u01f7\ [...]
+  "\u0209\u0201\u01b1\u01b1\u0159\u0159\u0159\u0202\u0202\u020a\u01fd\u01fd\u01fd\u01fd\u01fd\u01fd\u01ab\u01ab\u01fe\u01ee\u01ee\u01f1\u01f1\u01fe\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bc\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u020b\u020c\u020c\u020c\u01ff\u01ff\u01ff\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8\u01e8 \u0159\u0159\u0159\u0159\u01ea\u01bf\u01ef\u0162\u01f4\u0175\u0175\u0175\u0175 \u020d\u0203\u0203\u0203\u0203\u0204\u0200\u0200    \u01eb\u01f0  \u01f7\u01f8\u01f8\u01f8\ [...]
+  "\u0209\u0209\u0201\u01fc\u01b1\u0159\u0159\u0159\u0202\u0202\u0202\u020a\u01fd\u01fd\u01fd\u01fd\u01fd\u01fd\u01fd\u01ee\u01f1\u01f1\u01fe\u01fe\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01e7\u01e7\u01e7\u01e7\u01e7\u01e7\u0210\u0210\u020c\u020c\u020c\u0211\u0212\u01ff\u01ff\u01ff\u01ff\u01e8\u01e8\u01e8\u01e8 \u0159\u01b1\u0159\u01b1\u01ef\u01bf\u01bf\u01bf\u0162\u0175\u0175\u0175\u0175   \u020d\u020d\u0203\u0203\u0203\u0203\u0204\u0200\u0200  \u0213\u01eb\u01f0\u01f7\u01f7\u01f8\u01f8\u0 [...]
+  "\u0215\u0216\u0209\u0209\u0201\u0201\u01b1\u01b1\u0159\u0159\u0217\u0217 \u020a\u020a\u01fd\u01fd\u01fd\u01fd\u01fd\u01fd\u01fe\u01fe\u011e\u011e\u011e\u01bc\u01bc\u01bc\u01bc\u01e7\u01e7\u01e7\u01e7\u0218\u0219\u020c\u020c\u020c\u021a\u020b\u0211\u0212\u0212\u01ff\u01ff\u01ff\u01e8\u01e8 \u0159\u0159\u0159\u01b1\u01ea\u01ea\u01ef\u01f4\u01f4\u01f4\u0175\u0175\u0175      \u020d\u0203\u0203\u0203\u0203\u0204\u0204\u0200  \u021b\u0213\u0213\u01f8\u01f8\u0206\u0206\u0206\u0206   \u0214\u [...]
+  "\u0215\u0215\u0216\u0216\u0209\u0201\u0201\u01b1\u01b1\u0159\u0217\u0217   \u020a\u021d\u021d\u01fd\u01fd\u01fd\u01fd\u01fd\u01fd\u011e\u01bc\u01bc\u01bc\u01bc\u01e7\u01e7\u01e7\u021e\u021e\u020c\u020c\u020c\u0210\u0210\u021a\u020b\u020b\u0211\u0212\u0212\u01e8\u01ff\u01e8\u0159\u0159\u0159\u0159\u01b1\u01bf\u01bf\u01bf\u0162\u01f4\u0175\u0175\u0175        \u020d\u020d\u0203\u0203\u0203\u0203\u0204\u0200\u0196\u021f\u021f\u021b\u021b\u01f8\u0206\u0206\u0206 \u0220\u0220  \u0221\u0214\ [...]
+  " \u0215\u0215\u0215\u0216\u0209\u0216\u0209\u0201\u0217\u0217\u01b1\u0159\u0159\u0159  \u020a\u020a\u020a\u01fd\u01fd\u01fd\u01fd\u0223\u0223\u01bc\u01bc\u01e7\u01e7\u01e7\u0224\u020c\u020c\u020c\u0218\u0219\u0210\u0210\u021a\u021a\u020b\u0211\u0211  \u0159\u0159\u0159\u01b1\u01ea\u01ea\u01bf\u01bf\u01f4\u01f4\u0175\u0175\u0175          \u0225\u020d\u0203\u0203\u0203\u0203\u0226\u0226\u0226\u0227\u0227\u021b\u0228\u0206\u0206 \u0220\u0220\u0220\u0220  \u0221\u0221\u0214\u0214\u021c \u [...]
+  "\u0229\u0229\u0229\u0215\u0215\u0215\u0216\u0209\u0201\u0201\u0201\u01b1\u01b1\u0159\u0159\u0159\u0159   \u020a\u011e\u011e\u0223\u0223\u0223\u0223\u01e7\u01e7\u01e7\u01e7\u020c\u020c\u021e\u021e\u0218\u0219\u0219\u0210\u0210\u021a\u022a  \u0159\u0159\u0159\u0159\u01b1\u01ea\u01ea\u01f4\u01f4\u01f4\u0175\u0175\u0175        \u0225\u0225\u022b\u0225\u0225\u020d\u020d\u0226\u0226\u0226\u022c\u022c\u022c\u022c\u022d\u022e\u022e \u0220\u0220\u0220\u0220    \u0221\u022f\u022f\u022f\u0222  \ [...]
+  "\u0229\u0229\u0229\u0229\u0215\u0215\u0215\u0215\u0216\u0217\u0216\u0209\u0209\u0201\u01b1\u0159\u01b1\u0159\u0159\u0159\u0231\u0231\u0223\u0223\u0223\u0223\u01e7\u01e7\u01e7\u01e7  \u0224\u0224\u021e\u0218\u0218\u0219\u0210\u0210  \u0159\u0159\u01b1\u01b1\u01ea\u01ea\u01ea\u01f4\u01f4\u0175\u0175\u0175\u0175         \u0225\u0225\u0225\u022b\u0232\u0232\u0232\u0232\u0226\u0226\u022c\u022c\u022c\u0233\u0233\u0234\u01f0\u022e\u0220\u0220\u0220      \u022f\u022f\u022f\u0222\u0235\u0235\u [...]
+  "      \u0215\u0215\u0237\u0238\u0216\u0216\u0209\u0201\u0201\u0201\u01b1\u01b1\u0159\u0159\u0231\u0239\u0239\u023a\u023a\u023b\u01e7\u01e7\u023c   \u0224\u0224\u021e\u021e\u0218\u022a  \u0159\u0159\u0159\u0159\u01b1\u01ea\u01ea\u01f4\u01f4\u01f4\u0175\u0175\u0175      \u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023e\u023e\u0232\u0232\u022c\u022c\u022c\u023f\u0233\u0233\u0233\u0234\u0240\u01f0\u0220\u0220        \u0221\u0221\u0241 \u0235\u0241\u0241\u0230\u0236\u0236\u0236\u01c6\ [...]
+  "\u0242  \u0243\u0243\u0243\u0243\u0237\u0244\u0238\u0238\u0238\u0238\u0216\u0209\u0216\u0209\u0209\u0201\u0201\u01b1\u0159\u0159\u0159\u023a\u023b\u01e7\u01e7\u023c\u023c  \u023c\u0224\u021e\u022a  \u0159\u0159\u01b1\u0159\u01ea\u01ea\u01ea\u01f4\u01f4\u0175\u0175\u0175\u0175  \u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d\u022b\u0209\u0209\u0209\u0245\u022c\u0246\u0246\u0246\u0234\u0204\u0204\u0240\u0240\u0220\u0220         \u0241\u0241\u0241\u02 [...]
+  "\u0242\u0247\u0243\u0243\u0243\u0243 \u0237\u0237\u0248 \u0238\u0238\u0238\u0238\u0238\u0216\u0209\u0231\u0231\u0216\u0209\u01b1\u0159\u023a\u01b1\u0159\u0159\u023c\u023c\u023c\u023c\u023c\u023c\u0159\u0159\u0159\u0159\u0159\u0159\u01b1\u01ea\u01ea\u01f4\u01f4\u0175\u0175\u0175\u0175 \u023d\u023d\u023d\u023d\u023d\u023d\u023d\u023d       \u0209\u0209\u0209\u0245\u0216\u0216\u0249\u0246\u024a\u024a\u0234\u0203\u0203\u0240\u0240\u024b\u024c  \u024c            \u0235\u0235\u0235 \u0236\u [...]
+  "\u0247\u0247\u0242\u0242  \u0237\u0237\u024d\u024d    \u0238\u0238\u024e\u024f\u0231\u0239\u023a\u0216\u0209\u0201\u0201\u01b1\u0159\u0159\u0159\u0159\u01b1\u0159\u0159\u0159\u0159\u01b1\u0159\u01b1\u01ea\u01ea\u01f4\u01f4\u01f4\u0175\u0175\u0175\u0175\u023d\u023d\u023d\u023d\u023d\u023d        \u0209\u0209\u0209\u0216\u0209\u0209\u0245\u0245\u0250\u0250\u0249\u024a\u0234\u0234\u0203\u0203\u0203\u0240\u024b\u0200\u0200\u024c\u024c\u024c\u024c   \u0251\u0251\u0251\u0251\u0251\u0251\u02 [...]
+  "\u0247\u0247\u0242\u0242\u0242  \u0248\u024d\u024d    \u0253\u0253\u024f\u024f\u0231\u0239\u023a\u023a\u023a\u023a\u0216\u0209\u0209\u0209\u01b1\u0175\u0175\u0175\u01b1\u01b1\u01b1\u01ea\u01ea\u01ea\u01ea\u01f4\u0175\u0175\u0175\u0175\u0175\u023d\u023d\u023d\u023d\u023d       \u0209\u0209\u0209\u0209\u0209\u0209\u0245\u0245\u0245\u0254\u0254\u0254\u0255\u0256\u0257\u0258\u0234\u020d\u0203\u0203\u0203\u0240\u0240\u0204\u0200\u024c\u024c \u0251\u0251\u0251\u0251\u0251\u0251\u0251\u0251\ [...]
+  "\u0247  \u0242\u0242\u0242 \u0248\u0248\u024d\u024d  \u0253\u0253\u0253\u024f\u0259\u0259\u023a\u023a\u023a\u023a\u023b\u023b  \u0216\u0209\u0216\u0209\u0175\u0209\u0175\u0175\u0175\u0175\u0175\u0175\u0175\u0175\u0175\u025a\u025a\u023d\u023d\u023d   \u0209\u0209\u0209\u0209\u0209\u0209\u0209\u0209\u0245\u0245\u0216\u0245\u0245\u0245\u0254\u025b\u025b\u025c\u0249\u025d\u0257\u0258\u0258\u025e\u020d\u020d\u0203\u0240\u0240\u024b\u0204\u0200\u0200\u0251\u0251\u0251\u0251\u0251\u025f\u025 [...]
+  "     \u0242\u0242\u0242 \u024d\u024d \u0253\u0253\u0253\u024f\u0259\u0259\u0261\u0261\u023a\u023a\u023b\u0262\u0263     \u0216\u0264\u0264\u0264\u0216\u0209\u0209\u0209\u0209\u0216\u0209\u025a\u025a\u025a\u0216\u0209\u0209\u0209\u0209\u0216\u0209\u0209\u0245\u0245\u0245\u0216\u0245\u0245\u0245\u0245\u0245\u025b\u025b\u0254\u0254\u0254\u025c\u0249\u025d\u0265\u0265\u0258\u025e\u025e\u025e\u020d\u0203\u0240\u024b\u0203\u0204\u0266\u0267\u0267\u0268\u0269\u026a\u026a\u025f\u025f\u025f\u0 [...]
+  "     \u026c\u0242\u0242\u0242\u024d\u024d\u0253\u0253\u0253\u024f\u024f\u0259\u0261\u0261\u0261\u0261\u026d\u026d\u0263\u0263    \u0264\u0264\u0264\u0264\u026e\u026e \u0216\u026f\u026f\u026f\u0216\u0216\u0209\u0245\u0216\u0216\u0245\u0245\u0245\u0245\u0245\u0245\u0245\u0245\u0245\u0245   \u025b\u025b\u0270\u0270\u0254\u0249\u025c\u0271\u0272\u0265\u0265\u0265\u025e\u025e\u025e \u0240\u0240\u0240\u024b\u0266\u0267\u0267\u0267\u0267\u0268\u0273\u026a            \u025f\u025f\u025f\u025f\ [...]
+  "    \u026c\u026c\u026c\u0242\u0242\u0242\u024d\u0253\u0253\u024f\u024f\u0259\u0261\u0261\u0261\u0261\u0261\u026d  \u0263\u0263 \u0264\u0264\u0264\u026e\u026e\u026e  \u026f\u026f\u026f\u026f\u0245\u0245\u0245\u0245\u0245\u0245\u0245\u0245\u0245         \u025b\u0270\u0270\u0270\u0270\u0274\u025c\u0249\u0249\u0272\u0265\u0265\u0265\u025e\u025e\u025e  \u0275\u024b\u024b\u0266\u0267\u0267\u0267\u0268\u0204\u0200\u0273\u0273               \u025f\u025f\u025f  \u0251\u0251\u0251\u01c6\u01e3\u [...]
+  "    \u026c\u026c   \u0242\u0242\u0253\u024f\u024f\u0259\u0259\u0261\u0261\u0261\u0261\u026d\u026d  \u0263\u0276\u0264\u0264\u0264\u026e\u026e  \u026f\u026f\u0245\u0245\u0245\u0245\u0245\u0245\u0245             \u025b\u025b\u0270\u0270\u0274\u0274\u0274\u025c\u0249\u025d\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0266\u0267\u0267\u0268\u0268\u0203\u0204\u0200\u0200\u0273\u0273               \u025f\u025f\u025f\u025f \u0251\u0251\u01c6\u01c6\u01e3\u01c7\u01d3\u01d3    \u0207\u0 [...]
+  "   \u026c\u026c    \u0277\u0242\u0242\u0278\u0259\u0259\u0261\u0261\u0261\u0261\u026d\u026d   \u0264\u0276\u026e\u026e\u026e \u026f\u0245\u0245\u0245\u0245\u0245\u0245                  \u0270\u0270\u0270\u0274\u0274\u0274\u025c\u0255\u0256\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0279\u0267\u0267\u0268\u0203\u0203\u0203\u0203\u0204\u0200\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273           \u025f\u025f\u025f  \u0251\u0251\u01c6\u01c7\u01c0\u01d3\u01d3     \u01d4\u01d4 [...]
+  "  \u026c\u026c    \u0277\u0277 \u0278\u0278\u0259\u0261\u0261\u0261\u0261\u026d\u026d   \u0264\u0264\u026e\u026e\u027c\u026f\u026f\u026f\u0245\u0245\u0245                     \u027d\u0274\u0274\u0274\u025c\u025c\u0249\u0256\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u027e\u0279\u0279\u0268\u0268\u020d\u0203\u0203\u0203\u0203\u0204\u0204\u0200\u027f\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273      \u025f\u025f\u025f  \u0251\u0251\u01c6\u01c7\u01c0\u01d3   [...]
+  " \u026c\u026c\u026c    \u0277\u0277\u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0282\u0282   \u0264\u0264\u0264\u026e\u0283\u0283\u0245\u0245\u0245                      \u0284\u027d\u027d\u0274\u0274\u025c\u025c\u025d\u025d\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0275\u0279\u0285\u0285\u0286\u0286\u020d\u0203\u0203\u0203\u0203\u0204\u0200\u0200      \u0287\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273 \u025f\u025f\u025f  \u0251\u01c6\u01c6\u01c7\u01c7\u [...]
+  " \u026c\u026c      \u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0261\u0282\u0282  \u0264\u026e\u026e\u0289\u0289\u0283\u0283\u027c                       \u0284\u027d\u0274\u0274\u0274\u025c\u025c\u025d\u0272\u0265\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0275\u0279 \u0285\u0285\u0286 \u020d\u020d\u0203\u0203\u0203\u0203\u0204\u0200\u028a     \u0287      \u0273\u0273\u0273\u0273\u0273\u0273\u0273\u0273\u025f\u025f  \u0251\u01c6\u01c6\u01c7\u01d3\u01d3\u028b\u028b\u0288\u0280\u0280 [...]
+  "\u026c\u026c      \u0278\u0278\u0259\u0259\u0261\u0261\u0261\u0261\u0282\u0282  \u0264\u026e\u026e\u0289\u028d\u0289\u027c\u028e\u028e\u028e                     \u0284\u027d\u0274\u0274\u025c\u025c\u0249\u0271\u0272\u0265\u0265\u0265\u025e\u025e\u025e    \u0275\u027e\u0279\u0279 \u028f\u028f\u0286  \u0290\u020d\u0203\u0203\u0203\u0203\u0204\u0200\u028a    \u0287\u0287      \u0291\u0291     \u0273\u0273\u025f\u025f  \u0251\u01c6\u0292\u01c7\u01d3\u0293\u0293\u0288\u0280\u0280\u0280\u02 [...]
+  "\u026c       \u0278\u0259\u0259\u0261\u0261\u0261\u0261\u0294\u0282  \u0295\u0295\u026e\u028d\u028d\u028d\u028d \u027c\u028e\u028e\u028e                   \u0284\u027d\u0274\u0274\u025c\u025c\u0249\u025d\u0272\u0265\u0265\u0258\u025e\u025e     \u0275\u0275\u0279\u0279 \u028f\u028f\u0286\u0286   \u020d\u020d\u0203\u0203\u0203\u0203\u0204\u0200    \u0287\u0287      \u0291\u0291       \u025f\u025f\u025f  \u0251\u0292\u0292\u0296\u0293\u0293\u0293\u0297\u0280      \u028c\u028c\u028c\u028c [...]
+  "\u026c      \u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0294\u0294  \u0295\u0295\u0298\u0289\u0289\u028d     \u028e\u028e\u028e                 \u0284\u027d\u0274\u0274\u025c\u025c\u025d\u025d\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0275\u0279\u0279 \u028f\u028f\u0286\u0286    \u0290\u020d\u020d\u0203\u0203\u0203\u0204\u0204\u0299   \u0287\u0287      \u0291\u0291        \u025f\u025f\u029a\u028b\u0293\u0293\u029b\u0296\u0293\u0293\u029c\u029c        \u028c\u028c\u028c\u028 [...]
+  "      \u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0294\u0294  \u029d\u0298\u0289\u0289\u0289\u028d     \u029e\u029e\u028e\u028e\u028e              \u0284\u027d\u0274\u0274\u0274\u025c\u0249\u0271\u0256\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u027e\u0275\u0279\u0279\u028f\u028f\u028f\u0286\u0286\u0286     \u0290\u029f\u0203\u0203\u0203\u0203\u0204\u02a0   \u0287\u0287      \u0291\u0291         \u02a1\u028b\u0293\u0293\u0293\u0293\u0292\u0292\u01c0\u01c0\u029c     \u02a2    \u028c [...]
+  "     \u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0261\u0294\u0282 \u02a3\u029d\u029d\u028d\u028d\u028d    \u029e\u029e\u029e  \u028e\u028e             \u0284\u027d\u027d\u0274\u0274\u025c\u025c\u0249\u0256\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0279\u0279 \u028f\u028f\u028f \u0286\u0286      \u0290\u029f\u029f\u0203\u0203\u0203\u0204\u02a0   \u0287\u0287      \u0291\u0291       \u02a1\u02a1\u02a1\u02a1\u0293\u0293\u0293\u0251\u0251\u0292\u029b\u01c0\u01c0     \u02a2\u02a [...]
+  "    \u0278\u0278\u0259\u0259\u0261\u0261\u0261\u0261\u0294\u0294 \u02a3\u02a3\u029d\u0289\u028d\u028d    \u029e\u029e\u029e    \u028e\u028e           \u0284\u027d\u0274\u0274\u0274\u025c\u025d\u025d\u0272\u0265\u0265\u0265\u0258\u025e     \u0275\u0275\u0275\u0279 \u028f\u028f\u028f \u0286\u0286         \u029f\u0203\u0203\u0203\u0203\u0204   \u0287       \u0291       \u02a1\u02a1\u02a1\u02a1\u02a5\u02a5   \u0251\u0292\u0292\u0296\u01c0\u01c0     \u02a4\u02a4        \u028c\u028c\u028c\u [...]
+  "    \u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0294\u0294 \u02a3\u029d\u029d\u0289\u0289\u028d    \u029e\u029e\u029e      \u028e\u028e \u02a6\u02a6      \u0284\u027d\u0274\u0274\u025c\u0249\u0255\u0271\u0272\u0265\u0265\u0265\u0258\u025e    \u0275\u027e\u0275\u0279\u0279 \u028f\u028f\u028f \u0286\u0286          \u029f\u0203\u0203\u0203\u0203\u0204\u0204 \u0287\u0287      \u0291\u0291     \u02a1\u02a1\u02a1\u02a1\u02a1\u02a5\u02a5     \u0251\u0292\u0296\u029b\u01c0\u01c0     \u02a4\u0 [...]
+  "\u02a7  \u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0294\u0294  \u029d\u029d\u028d\u0289\u028d    \u029e\u029e\u029e        \u028e\u02a6\u02a6      \u0284\u027d\u0274\u0274\u025c\u025c\u0249\u0256\u0272\u0265\u0265\u0265\u025e\u025e    \u0275\u0275\u0279\u0279\u0279\u028f\u028f\u028f   \u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02a8      \u029f\u0203\u0203\u0203\u0204\u0204 \u0287\u0287\u0287\u0287    \u0291\u0291    \u02a1\u02a1\u02a1\u02a1\u02a5\u02a5\u02a5       \u0251\u0251\u0292\u01c0 [...]
+  "\u02a7\u02a7\u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0294\u0294\u0282 \u02a3\u029d\u029d\u028d\u028d    \u029e\u029e\u029e         \u028e\u02a6\u028e     \u027d\u027d\u0274\u0274\u025c\u025c\u0249\u025d\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0275\u0279 \u028f\u028f\u028f  \u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02a8     \u029f\u0203\u0203\u0203\u0203\u0204\u02a9\u0287\u0287\u0287\u0287\u0287\u0287\u0287\u0287\u0291\u0291   \u02a1\u02a1\u02a1\u02a1\u02a [...]
+  " \u02a7\u0278\u0259\u0261\u0261\u0261\u0261\u0261\u0294\u0294 \u02a3\u02a3\u0289\u028d\u028d    \u029e\u029e\u029e           \u028e\u028e\u028e  \u0284\u027d\u027d\u0274\u0274\u025c\u025c\u0255\u0256\u0257\u0265\u0265\u0258\u025e\u025e    \u0275\u0275\u0279\u0279 \u02aa\u028f\u02ab\u02ac\u02a8\u02a8\u02a8\u02a8      \u02a8\u02a8\u02a8     \u029f\u0203\u0203\u0203\u02a0\u02a9     \u0287\u0287\u0287\u0291\u0291\u0287\u0287\u02a1\u02a1\u02a1\u02a1\u02ad\u02ad\u02ae\u02ae          \u0251\ [...]
+  " \u0278\u0259\u0259\u0261\u0261\u0261\u0261\u0294\u0294 \u02a3\u029d\u029d\u0289\u028d    \u029e\u029e\u029e             \u028e\u028e\u028e\u0284\u027d\u0274\u0274\u0274\u025c\u025c\u0249\u0256\u0257\u0265\u0265\u0258\u025e\u025e   \u0275\u0275\u0279\u0279 \u02aa\u02aa\u02aa\u02aa\u02ac\u02ac\u02a8\u02a8\u02a8        \u02a8\u02a8\u02a8     \u029f\u029f\u029f\u02af\u02af\u02a9         \u02b0\u02b0\u02b0\u02a1\u02ad\u02ad\u02ad\u02b1\u02b1\u02ae\u02b2\u02b2\u02b2        \u0292\u0292\u02 [...]
+  "\u0278\u0278\u0259\u0261\u0261\u0261\u0261\u0294\u0294  \u029d\u029d\u028d\u028d    \u029e\u029e                 \u028e\u027d\u0274\u0274\u0274\u025c\u0249\u025d\u025d\u0257\u0265\u0265\u0258\u025e    \u0275\u0275\u0275\u02b3 \u02aa\u02aa\u02aa\u02ac\u02ac\u02ac             \u02a8\u02a8\u02a8    \u02b4\u029f\u02af\u02af\u02af\u02a9        \u02b0\u02b0\u02b0\u02b0\u02b5\u02ad\u02b1\u02b1\u02b1\u02b1\u02b2\u02b2\u02b2\u02b2        \u0251\u0251\u0251\u029b\u01c0\u01c0     \u02a4\u02a4    [...]
+  "\u0278\u0259\u0261\u0261\u0261\u0261\u0294\u0294  \u02a3\u029d\u028d\u028d    \u029e\u029e                 \u028e\u027d\u0274\u0274\u025c\u02b6\u02b6\u025d\u0272\u0265\u0265\u0265\u0258\u025e    \u0275\u0275\u02b7  \u02aa\u02aa\u02aa \u02ac\u02ac               \u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02af\u02af\u029f\u02a0\u02a9      \u02b0\u02b0\u02b0\u02b0\u02b5\u02b5\u02b8     \u02ae\u02ae\u02b2\u02b2        \u0251\u0292\u0292\u0296\u01c0\u01c0     \u02a4\u02a4             ", 
+  "\u0259\u0261\u0261\u0261\u0261\u0261\u0294\u0294 \u02a3\u02a3\u0289\u028d\u028d  \u029e\u029e\u029e                 \u028e\u027d\u0274\u0274\u025c\u025c\u02b6\u0271\u0272\u0265\u0265\u0265\u025e\u025e    \u0275\u02b3\u02b3 \u02b9\u02aa\u02aa\u02aa                    \u02a8\u02a8\u02a8\u02a8\u02a8\u02a8\u02b4\u029f\u029f\u029f\u02a0\u0299     \u02b0\u02b0\u02b0\u02b0\u02ad\u02ad\u02b8\u02b8      \u02ae\u02ae\u02b2\u02b2        \u0251\u0292\u029b\u0296\u01c0\u01c0    \u02a4\u02a4\u02a4  [...]
+  "\u0259\u0261\u0261\u0261\u0261\u0294\u0294 \u02a3\u029d\u0289\u0289\u028d  \u029e\u029e\u029e                \u028e\u028e\u027d\u0274\u0274\u025c\u025c\u02ba\u02bb\u02bc\u0265\u0265\u0258\u025e\u025e   \u0275\u0275\u0275\u02b7\u02b9\u02b9\u02b9\u02aa\u02aa                            \u02b4\u029f\u029f\u029f\u02a0\u02a9   \u02b0\u02b0\u02b0\u02b0\u02ad\u02ad \u02b8\u02b8       \u02ae\u02ae\u02b2\u02b2        \u0292\u0292\u0292\u01c0\u01c0\u01c0    \u02a4\u02a4\u02a4           ", 
+  "\u0261\u0261\u0261\u0261\u0294\u0294  \u029d\u029d\u028d\u028d  \u029e\u029e\u029e               \u028e\u028e\u028e\u027d\u0274\u0274\u02bd\u02bd\u02ba\u02be\u02bf\u02bf\u0265\u0258\u025e\u025e   \u0275\u0275\u02b3\u02b3\u02b9\u02b9\u02b9\u02aa\u02aa                             \u02b4\u02b4\u029f\u029f\u029f\u02a0\u02a9 \u02b0\u02b0\u02b0\u02b0\u02ad\u02ad  \u02b8\u02b8        \u02ae\u02ae\u02b2\u02b2        \u0292\u0251\u029b\u01c0\u01c0     \u02a4\u02a4           ", 
+  "\u0261\u0261\u0261\u0294\u0294  \u02a3\u029d\u028d\u028d  \u029e\u029e\u029e              \u028e\u028e\u028e\u028e\u027d\u0274\u0274\u02bd\u02bd\u02bb\u02bc\u02bc\u02c0\u02c0\u02c0\u025e\u025e  \u0275\u0275\u02b3\u02b3 \u02b9\u02b9\u02b9 \u02aa\u02aa                              \u02b4\u02b4\u029f\u029f\u02a0\u02a0\u0299\u02b0\u02b0\u02b0\u02ad\u02ad   \u02b8\u02b8        \u02ae\u02ae\u02b2\u02b2\u02b2        \u0292\u0292\u0296\u01c0\u01c0     \u02a4\u02a4          ", 
+  "\u0261\u0261\u0294\u0294  \u02a3\u02a3\u0289\u028d  \u029e\u029e\u029e              \u028e\u028e\u028e \u0274\u0274\u02bd\u02bd\u025c\u02bb\u02bb\u02bc\u02c1\u02c0\u02c0\u025e\u025e \u0275\u0275\u0275\u0275\u02b3 \u02b9\u02b9\u02b9  \u02aa\u02aa                              \u02b4\u02b4\u029f\u029f\u029f\u02a0\u02b0\u02b0\u02b0\u02ad\u02ad\u02c2\u02c2\u02c3\u02c3\u02c3\u02b8         \u02ae\u02ae\u02b2\u02b2\u02b2        \u0292\u0292\u02c4\u01c0\u01c0     \u02a4          ", 
+  "\u0261\u0261\u0294\u0294 \u02a3\u029d\u0289\u0289\u028d \u029e\u029e\u029e                \u028e \u027d\u0274\u0274\u02bd\u025c\u02be\u02be\u02bf\u02c0\u02c0\u025e\u025e \u0275\u0275\u02b3\u0275\u02b3  \u02b9\u02b9\u02b9   \u02aa                                \u02b4\u02b4\u029f\u029f\u029f\u02b0\u02b0\u02c5\u02c5\u02ad\u02c2\u02c2\u02c3\u02c3\u02c3\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8   \u02ae\u02ae\u02b2\u02b2\u02b2        \u02c6\u02c6\u02c7\u01c0\u01c0               ", 
+  "\u0261\u0294\u0294 \u02a3\u029d\u029d\u028d\u028d \u029e\u029e\u029e                 \u028e\u027d\u0274\u0274\u02bd\u025c\u02bc\u02be\u02bf\u02c0\u02c0\u025e\u025e\u025e\u0275\u02c8\u02c8\u02b3   \u02b9\u02b9    \u02aa\u02aa                       \u02c9\u02c9        \u02b4\u02b4\u029f\u02ca\u02ca\u02cb\u02c5\u02c5\u02ad       \u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b8\u02b2\u02b2\u02b2       \u02c6\u02c6\u02c6\u02c7\u01c0\u01c0              ", 
+  "\u0294\u0294  \u02a3\u029d\u028d\u028d \u029e\u029e                   \u028e\u0274\u02bd\u02bd\u025c\u02bc\u02bc\u02c1\u02c0\u025e\u025e\u025e\u02c8\u02c8\u02c8\u02c8   \u02b9\u02b9\u02b9     \u02aa\u02aa                        \u02c9\u02c9       \u02b4\u02b4\u029f\u02ca\u02ca\u02ca\u02ca\u02cc\u02a9\u02a9             \u02b8\u02b8\u02b8\u02b8\u02ae\u02ae\u02b2\u02b2\u02cd       \u0292\u02c6\u0296\u01c0\u01c0\u01c0             ", 
+  "\u0294  \u02a3\u02a3\u0289\u028d  \u029e                    \u02bd\u02bd\u02bd\u025c\u02bf\u02bf\u02c1\u02c1\u025e\u025e\u02c8\u02c8\u02c8\u02b3\u02b3   \u02b9\u02b9\u02b9     \u02aa\u02aa                          \u02c9\u02c9       \u02b4\u02ce\u02ca\u02ca\u02ca\u02ca\u02ca\u02cf\u02cf\u02cf\u02cf              \u02d0\u02cd\u02ae\u02ae\u02b2\u02b2\u02cd   \u02d1\u02d1  \u0292\u0292\u02c4\u02c4\u01c0             ", 
+  "\u0294 \u02a3\u029d\u0289\u0289                       \u02bd\u02bd\u02bd\u025c\u02bf\u02bf\u02bf\u025e\u025e\u0275\u0275\u0275\u02c8\u02b3    \u02b9\u02b9\u02b9     \u02aa\u02aa                           \u02c9\u02c9\u02c9       \u02ce\u02ce\u02ca\u02ca\u02ca\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf          \u02d0\u02d0\u02d0\u02ae\u02ae\u02cd\u02b2\u02b2\u02cd \u02d1\u02d1\u02d1   \u02c6\u02c6\u02c7\u01c0\u01c0            ", 
+  " \u02a3\u029d\u029d\u028d\u028d                      \u02bd\u02bd\u025c\u025c\u02d2\u02d2\u02bf\u025e\u0275\u0275\u02b3\u0275\u02b3     \u02b9\u02b9\u02b9    \u02aa\u02aa\u02aa                             \u02c9\u02c9\u02c9     \u02d3\u02ce\u02ce\u02d4\u02d4\u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02d0\u02d0  \u02ae\u02d6\u02cd\u02b2\u02b2\u02d1\u02d1\u02d1    \u0292\u02c6\u029b\u02c7\u01c0\u01c0           ", 
+  " \u02a3\u029d\u028d\u028d                      \u02bd\u02bd\u025c\u025c\u02d7\u02d2\u02d2\u02d8\u0275\u0275\u0275\u02b3      \u02b9\u02b9\u02b9    \u02aa\u02aa\u02aa                               \u02c9\u02c9    \u02d3\u02d9\u02ce\u02d4\u02d4\u02d4\u02da\u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02db\u02cf\u02cf\u02cf\u02cf\u02cf\u02d6\u02d6\u02cd\u02d1\u02d1       \u0292\u0292\u029b\u02c4\u02c4\u01c0          ", 
+  "\u02a3\u02a3\u0289\u028d                      \u02bd\u02bd\u02bd\u025c\u02dc\u02d7\u02d8\u0275\u02b3\u0275\u0275       \u02b9\u02b9     \u02aa\u02aa\u02aa                                 \u02c9\u02c9  \u02d3\u02d3\u02d9\u02ce\u02d4\u02d4\u02d4 \u02d5\u02d5\u02d5\u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02db\u02db\u02cf\u02cf\u02cf\u02cf\u02cf\u02d6\u02d6\u02cd\u02b2\u02b2\u02b2       \u0292\u0292\u0296\u02c4\u02c4\u01c0         ", 
+  "\u029d\u0289\u0289                     \u02bd\u02bd\u02bd\u025c\u02d7\u02d7\u02d7\u02d8\u0275\u0275\u02b3\u02b3      \u02b9\u02b9\u02b9     \u02aa\u02aa\u02aa                                  \u02c9\u02c9  \u02d9\u02d9\u02d9\u02d4\u02d4\u02d4    \u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02db\u02db\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02d6\u02d6\u02cf\u02b2\u02b2\u02cd       \u0292\u0292\u029b\u01c0\u01c0\u01c0        ", 
+  "\u029d\u028d                     \u02bd\u02bd\u02bd\u025c\u02d7\u02d7\u02dc\u0275\u0275\u0275\u02b3        \u02b9\u02b9    \u02aa\u02aa\u02aa                                    \u02c9\u02c9  \u02d3 \u02ce\u02d4\u02d4\u02d4      \u02d5\u02da\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02db\u02db\u02d5\u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02d6\u02d6\u02cf\u02cf\u02cf\u02b2\u02cd       \u0292\u0292\u0296\u01c0\u01c0\u01c0       ", 
+  "\u028d\u028d                    \u02bd\u02bd\u02bd\u025c\u02d7\u02dc\u02dc\u0275\u02b3\u0275\u02b3              \u02aa\u02aa\u02aa                                            \u02d4\u02d4          \u02da\u02da\u02da\u02da\u02da\u02da\u02da\u02da\u02db\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02d5\u02cf\u02d6\u02d6\u02cf\u02cf\u02cf\u02b2\u02cd      \u0292\u0292\u029b\u0296\u01c0\u01c0\u01c0      ", 
+  "\u028d                    \u02bd\u02bd\u02bd  \u02dc\u02dc\u0275\u0275\u02b3               \u02aa\u02aa\u02aa                                                                        \u02d5\u02d5\u02d5\u02d6\u02d6\u02cf\u02cf\u02cf\u02cf\u02cf\u02cd      \u0292\u0292\u0296\u0296\u01c0\u01c0      ", 
+  "                    \u02bd\u02bd\u025c \u02dc\u02dc\u02dc\u0275\u0275\u0275               \u02aa\u02aa\u02aa                                                                           \u02d5\u02d6\u02d6\u02cf\u02cf\u02cf\u02cf\u02cf\u02cf\u02cd      \u0292\u0292\u029b\u0296\u01c0\u01c0     ", 
+  "                   \u02bd\u02bd\u025c \u02dc\u02dc\u02dc\u0275\u0275\u02b3               \u02aa\u02aa                                                                               \u02d5\u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cd\u02cd     \u0292\u0292\u0296\u0296\u01c0\u01c0    ", 
+  "                  \u02bd\u02bd\u025c \u02dc\u02dc\u0275\u0275\u02b3\u02b3               \u02aa\u02aa                                                                                  \u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cd\u02cd    \u0292\u0292\u029b\u0296\u01c0\u01c0\u01c0   ", 
+  "                 \u02bd\u02bd\u02bd \u02dc\u02dc\u0275\u0275\u0275\u02b3               \u02aa\u02aa                                                                                    \u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cd     \u0292\u0292\u0292\u0296\u01c0\u01c0   ", 
+  "                \u02bd\u02bd\u02bd \u02dc\u02dc\u0275\u0275\u02b3                 \u02aa                                                                                      \u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02cd     \u0292\u0292\u029b\u0296\u01c0\u01c0  ", 
+  "                \u02bd\u02bd \u02dc\u02dc\u0275\u02b3\u02b3                                                                                                          \u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02b2     \u0292\u0292\u0296\u0296\u01c0\u01c0 ", 
+  "                 \u02dc\u02dc\u02dc\u0275\u0275\u0275                                                                                                            \u02d5\u02d5\u02cf\u02cf\u02cf\u02cf\u02cf\u02b2     \u0292\u0292\u0296\u01c0\u01c0 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/rtl-point-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/rtl-point-200-200-1.0-grid-reference.json
index aa24b04..acc98b4 100644
--- a/tests/visual_tests/grids/rtl-point-200-200-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/rtl-point-200-200-1.0-grid-reference.json
@@ -31,19 +31,21 @@
   "                                                  ", 
   "                                                  ", 
   "                      !                           ", 
-  "                     !                            ", 
   "                                                  ", 
-  "                   !! ! ! !                       ", 
-  "                   !  !   !                       ", 
   "                                                  ", 
+  "                      !                           ", 
   "                                                  ", 
-  "                        !                         ", 
+  "                    ! ! ! !!                      ", 
+  "                   !!!!! !!                       ", 
+  "                   !                              ", 
   "                                                  ", 
-  "                     ! !                          ", 
+  "                         !                        ", 
+  "                      !! !                        ", 
+  "                     !!!                          ", 
   "                                                  ", 
   "                      !                           ", 
-  "                    !!!                           ", 
-  "                     !!!!                         ", 
+  "                   !! !!                          ", 
+  "                   ! !!!!                         ", 
   "                    !!                            ", 
   "                                                  ", 
   "                                                  ", 
@@ -52,8 +54,6 @@
   "                                                  ", 
   "                                                  ", 
   "                                                  ", 
-  "                                                  ", 
-  "                                                  ", 
   "                                                  "
  ]
 }
\ No newline at end of file
diff --git a/tests/visual_tests/grids/rtl-point-200-200-2.0-grid-reference.json b/tests/visual_tests/grids/rtl-point-200-200-2.0-grid-reference.json
new file mode 100644
index 0000000..dcafa31
--- /dev/null
+++ b/tests/visual_tests/grids/rtl-point-200-200-2.0-grid-reference.json
@@ -0,0 +1,59 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                      !                           ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                     !   !                        ", 
+  "                        !!                        ", 
+  "                 !!!  !   !!  !!                  ", 
+  "                 ! ! !!  !!! ! !                  ", 
+  "                !!!!!!!!!  !!!!!                  ", 
+  "                !    !!                           ", 
+  "                !                                 ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                                                  ", 
+  "                           !                      ", 
+  "                        !   !                     ", 
+  "                      ! !   !                     ", 
+  "                     !!!! !!!                     ", 
+  "                     !  !!                        ", 
+  "                   !!                             ", 
+  "                                                  "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shield-on-line-and-avoid-edges-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/shield-on-line-and-avoid-edges-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..2aaaf42
--- /dev/null
+++ b/tests/visual_tests/grids/shield-on-line-and-avoid-edges-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                   !!!!                                                                         ", 
+  "                                                !!!!!!!!                                                                        ", 
+  "                                               !!!!!!!!!                                                                        ", 
+  "                                              !!!!!!!!!!!                                                                       ", 
+  "                                              !!!!!!!!!!!                                                                       ", 
+  "                                              !!!!!!!!!!!                                                                       ", 
+  "                                             !!!!!!!!!!!!!                                                                      ", 
+  "                                             !!!!!!!!!!!!!                                                                      ", 
+  "                                             !!!!!!!!!!!!!!                                                                     ", 
+  "                                            !!!!!!!!!!!!!!!!                                                                    ", 
+  "                                           !!!!!!!!!!!!!!!!!                                                                    ", 
+  "                                          !!!!!!!!!!!!!!!!!!                                                                    ", 
+  "                                          !!!!!!!!!!!!!!!!!!!                                                                   ", 
+  "                                          !!!!!!!!!!!!!!!!!!!                                                                   ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!                                                                  ", 
+  "                                         !!!!!!!!!!!!!!!!!!!!!!                                                                 ", 
+  "                                        !!!!!!!!!!!!!!!!!!!!!!!                                                                 ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!                                                                ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!                                                                ", 
+  "                                       !!!!!!!!!!!!!!!!!!!!!!!!!                                                                ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                               ", 
+  "                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!                                                               ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                              ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                   !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!                                                            ", 
+  "                                   !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!                                                            ", 
+  "                                   !!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!                                                           ", 
+  "                                  !!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!                                                          ", 
+  "                                 !!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!                                                          ", 
+  "                                !!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!                                                          ", 
+  "                                !!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!!!!                                                         ", 
+  "                                !!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!                                                         ", 
+  "                               !!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!                                                        ", 
+  "                               !!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!!                                                       ", 
+  "                              !!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!!                                                       ", 
+  "                             !!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!!!!                                                      ", 
+  "                             !!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!!!                                                      ", 
+  "                             !!!!!!!!!!!!!!!!             !!!!!!!!!!!!!!!!                                                      ", 
+  "                            !!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!                                                     ", 
+  "                            !!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!                                                     ", 
+  "                           !!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!!                                                    ", 
+  "                           !!!!!!!!!!!!!!!!                 !!!!!!!!!!!!!!!!!                                                   ", 
+  "                          !!!!!!!!!!!!!!!!!                 !!!!!!!!!!!!!!!!!                                                   ", 
+  "                         !!!!!!!!!!!!!!!!!                   !!!!!!!!!!!!!!!!                                                   ", 
+  "                         !!!!!!!!!!!!!!!!!                    !!!!!!!!!!!!!!!!                                                  ", 
+  "                         !!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!                                                  ", 
+  "                         !!!!!!!!!!!!!!!                      !!!!!!!!!!!!!!!!!                                                 ", 
+  "                        !!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!                                                ", 
+  "                       !!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!                                                ", 
+  "                      !!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!                                               ", 
+  "                      !!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!                                               ", 
+  "                      !!!!!!!!!!!!!!!!                           !!!!!!!!!!!!!!!!                                               ", 
+  "                     !!!!!!!!!!!!!!!!                             !!!!!!!!!!!!!!!!                                              ", 
+  "                     !!!!!!!!!!!!!!!!                             !!!!!!!!!!!!!!!!                                              ", 
+  "                    !!!!!!!!!!!!!!!!!                             !!!!!!!!!!!!!!!!!                                             ", 
+  "                    !!!!!!!!!!!!!!!!                               !!!!!!!!!!!!!!!!!                                            ", 
+  "                   !!!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!!                                            ", 
+  "                   !!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!!                                            ", 
+  "                  !!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!!!                                           ", 
+  "                  !!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!!!                                           ", 
+  "                  !!!!!!!!!!!!!!!                                    !!!!!!!!!!!!!!!!!                                          ", 
+  "                 !!!!!!!!!!!!!!!!                                     !!!!!!!!!!!!!!!!!                                         ", 
+  "                !!!!!!!!!!!!!!!!!                                     !!!!!!!!!!!!!!!!!                                         ", 
+  "               !!!!!!!!!!!!!!!!!                                       !!!!!!!!!!!!!!!!                                         ", 
+  "               !!!!!!!!!!!!!!!!!                                        !!!!!!!!!!!!!!!!                                        ", 
+  "               !!!!!!!!!!!!!!!!                                         !!!!!!!!!!!!!!!!                                        ", 
+  "              !!!!!!!!!!!!!!!!                                           !!!!!!!!!!!!!!!!                                       ", 
+  "              !!!!!!!!!!!!!!!!                                           !!!!!!!!!!!!!!!!!                                      ", 
+  "             !!!!!!!!!!!!!!!!!                                           !!!!!!!!!!!!!!!!!                                      ", 
+  "            !!!!!!!!!!!!!!!!!                                             !!!!!!!!!!!!!!!!!                                     ", 
+  "            !!!!!!!!!!!!!!!!!                                              !!!!!!!!!!!!!!!!                                     ", 
+  "            !!!!!!!!!!!!!!!!                                               !!!!!!!!!!!!!!!!                                     ", 
+  "           !!!!!!!!!!!!!!!!                                                 !!!!!!!!!!!!!!!!                                    ", 
+  "           !!!!!!!!!!!!!!!!                                                 !!!!!!!!!!!!!!!!                                    ", 
+  "          !!!!!!!!!!!!!!!!!                                                 !!!!!!!!!!!!!!!!!                                   ", 
+  "          !!!!!!!!!!!!!!!!                                                   !!!!!!!!!!!!!!!!!                                  ", 
+  "         !!!!!!!!!!!!!!!!!                                                   !!!!!!!!!!!!!!!!!                                  ", 
+  "        !!!!!!!!!!!!!!!!!                                                     !!!!!!!!!!!!!!!!                                  ", 
+  "        !!!!!!!!!!!!!!!!                                                       !!!!!!!!!!!!!!!!                                 ", 
+  "        !!!!!!!!!!!!!!!!                                                       !!!!!!!!!!!!!!!!                                 ", 
+  "        !!!!!!!!!!!!!!!                                                        !!!!!!!!!!!!!!!!!                       !!!      ", 
+  "       !!!!!!!!!!!!!!!!                                                         !!!!!!!!!!!!!!!!!                     !!!!!     ", 
+  "      !!!!!!!!!!!!!!!!!                                                         !!!!!!!!!!!!!!!!!                    !!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!!                                                           !!!!!!!!!!!!!!!!!                   !!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!!                                                            !!!!!!!!!!!!!!!!                  !!!!!!!!    ", 
+  "     !!!!!!!!!!!!!!!!                                                             !!!!!!!!!!!!!!!!                !!!!!!!!!!!  !", 
+  "    !!!!!!!!!!!!!!!!                                                               !!!!!!!!!!!!!!!!              !!!!!!!!!!!! ! ", 
+  "   !!!!!!!!!!!!!!!!!                                                               !!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!  ", 
+  "   !!!!!!!!!!!!!!!!!                                                               !!!!!!!!!!!!!!!!!           !!!!!!!!!!!!!!   ", 
+  "   !!!!!!!!!!!!!!!!                                                                 !!!!!!!!!!!!!!!!!          !!!!!!!!!!!!!!   ", 
+  "  !!!!!!!!!!!!!!!!!                                                                  !!!!!!!!!!!!!!!!          !!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!!                                                                   !!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!                                                                     !!!!!!!!!!!!!!!!     !!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!                                                                     !!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!  ", 
+  "  !!!!!!!!!!!!!!!                                                                     !!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!!!  ", 
+  " !!!!!!!!!!!!!!!                                                                       !!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!  ", 
+  " !!!!!!!!!!!!!!!                                                                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  " !!!!!!!!!!!!!!                                                                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  " !!!!!!!!!!!!!!                                                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  " !!!!!!!!!!!!!                                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  " !!!!!!!!!!!!                                                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ", 
+  "  !!!!!!!!!!!                                                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "  !!!!!!!!!!!                                                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "  !!!!!!!!!!                                                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "  !!!!!!!!!!                                                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     ", 
+  "  !!!!!!!!!                                                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      ", 
+  "  !!!!!!!!!                                                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  "   !!!!!!!                                                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!         ", 
+  " ! !!!!!!!                                                                                   !!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "    !!!!!                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "!    !!!                                                                                       !!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                                                                                               !!!!!!!!!!!!!!!!!!!              ", 
+  "                                                                                                !!!!!!!!!!!!!!!!!!              ", 
+  "                                                                                                !!!!!!!!!!!!!!!!!               ", 
+  "                                                                                                !!!!!!!!!!!!!!!!!               ", 
+  "                                                                                                 !!!!!!!!!!!!!!!                ", 
+  "                                                                                                 !!!!!!!!!!!!!!                 ", 
+  "                                                                                                  !!!!!!!!!!                    ", 
+  "                                                                                                   !!!!!!!!!                    ", 
+  "                                                                                                     !!!!!!!                    ", 
+  "                                                                                                      !!!!!                     ", 
+  "                                                                                                       !!!                      ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shield-on-line-and-avoid-edges-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/shield-on-line-and-avoid-edges-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..eead91d
--- /dev/null
+++ b/tests/visual_tests/grids/shield-on-line-and-avoid-edges-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         !!!!!!!                                                                                ", 
+  "                                        !!!!!!!!                                                                                ", 
+  "                                        !!!!!!!!!       !!!!!!!                                                                 ", 
+  "                                       !!!!!!!!!!!      !!!!!!!!                                                                ", 
+  "                                      !!!!!!!!!!!!!    !!!!!!!!!!                                                               ", 
+  "                                      !!!!!!!!!!!!!   !!!!!!!!!!!                                                               ", 
+  "                                     !!!!!!!!!!!!!!! !!!!!!!!!!!!!                                                              ", 
+  "                                     !!!!!!!!!!!!!!! !!!!!!!!!!!!!!                                                             ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                            ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                            ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                            ", 
+  "                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                           ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                           ", 
+  "                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                           ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                          ", 
+  "                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                         ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                        ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                        ", 
+  "                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                       ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                      ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                    ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                   ", 
+  "                         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                  ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              ", 
+  "                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                             ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                            ", 
+  "                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                         ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     ", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                    ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   ", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                               ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                         ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                        ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       !", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!                                              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ! ", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    !  ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   !   ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !    ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!                                                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !     ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!                !      ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!                                                    !!!!!!!!!!!!!!!!!!!!!!!!!!!               !       ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!              !        ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!             !         ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!            !          ", 
+  "   !!!!!!!!!!!!!!!!!!!!!                                                        !!!!!!!!!!!!!!!!!!!!!!!!!           !           ", 
+  "   !!!!!!!!!!!!!!!!!!!!!                                                        !!!!!!!!!!!!!!!!!!!!!!!!!          !            ", 
+  "    !!!!!!!!!!!!!!!!!!!                                                         !!!!!!!!!!!!!!!!!!!!!!!!!         !             ", 
+  "    !!!!!!!!!!!!!!!!!!                                                          !!!!!!!!!!!!!!!!!!!!!!!!!        !              ", 
+  "    !!!!!!!!!!!!!!!!!                                                            !!!!!!!!!!!!!!!!!!!!!!!!       !               ", 
+  "    !!!!!!!!!!!!!!!!!                                                            !!!!!!!!!!!!!!!!!!!!!!!!      !                ", 
+  "    !!!!!!!!!!!!!!!!!                                                             !!!!!!!!!!!!!!!!!!!!!!      !                 ", 
+  "   ! !!!!!!!!!!!!!!!                                                               !!!!!!!!!!!!!!!!!!!!!     !                  ", 
+  "   !  !!!!!!!!!!!!!!                                                                !!!!!!!!!!!!!!!!!!!!    !                   ", 
+  "  !   !!!!!!!!!!!!!!                                                                 !!!!!!!!!!!!!!!!!!!   !                    ", 
+  "  !   !!!!!!!!!!!!!                                                                  !!!!!!!!!!!!!!!!!!!  !                     ", 
+  " !     !!!!!!!!!!!                                                                    !!!!!!!!!!!!!!!!!! !                      ", 
+  " !      !!!!!!!!!!                                                                    !!!!!!!!!!!!!!!!! !                       ", 
+  "!        !!!!!!!!                                                                     !!!!!!!!!!!!!!!!!!                        ", 
+  "!         !!!!!!                                                                      !!!!!!!!!!!!!!!!!                         ", 
+  "                                                                                       !!!!!!!!!!!!!!!                          ", 
+  "                                                                                       !!!!!!!!!!!!!!!                          ", 
+  "                                                                                       !!!!!!!!!!!!!!!                          ", 
+  "                                                                                        !!!!!!!!!!!!!                           ", 
+  "                                                                                        !!!!!!!!!!!!!                           ", 
+  "                                                                                         !!!!!!!!!!!                            ", 
+  "                                                                                          !!!!!!!!!                             ", 
+  "                                                                                           !!!!!!!                              ", 
+  "                                                                                            !!!!!                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shield-on-line-spacing-eq-width-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/shield-on-line-spacing-eq-width-600-400-1.0-grid-reference.json
index 25c5fc7..5859f74 100644
--- a/tests/visual_tests/grids/shield-on-line-spacing-eq-width-600-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shield-on-line-spacing-eq-width-600-400-1.0-grid-reference.json
@@ -69,39 +69,39 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                                                                                                                      ", 
-  "                                                                                                                                                     !", 
-  "                                                                                                                                                !!    ", 
-  "                                                                                                                                           !!         ", 
-  "                                                                                                                                      !!              ", 
-  "                                                                                                                                 !!                   ", 
-  "                                                                                                                            !!                        ", 
-  "                                                                                                                       !!                             ", 
-  "                                                                                                                  !!                                  ", 
-  "                                                                                                             !!                                       ", 
-  "                                                                                                        !!                                            ", 
-  "                                                                                                   !!                                                 ", 
-  "                                                                                              !!                                                      ", 
-  "                                                                                         !!                                                           ", 
-  "                                                                         !!!!!      !!                                                                ", 
-  "                                                                         !!!!! !!                                                                     ", 
-  "                                                                         !!!!!                                                                        ", 
-  "                                                                     !!  !!!!!                                                                        ", 
-  "                                                                !!                                                                                    ", 
-  "                                                           !!                                                                                         ", 
-  "                                                      !!                                                                                              ", 
-  "                                                 !!                                                                                                   ", 
-  "                                            !!                                                                                                        ", 
-  "                                       !!                                                                                                             ", 
-  "                                  !!                                                                                                                  ", 
-  "                             !!                                                                                                                       ", 
-  "                        !!                                                                                                                            ", 
-  "                   !!                                                                                                                                 ", 
-  "              !!                                                                                                                                      ", 
-  "         !!                                                                                                                                           ", 
-  "    !!                                                                                                                                                ", 
-  "!                                                                                                                                                     ", 
-  "                                                                                                                                                      ", 
+  "                                                                                                                                                  !!  ", 
+  "                                                                                                                                         !!  !!!!!!!!!", 
+  "                                                                                                                                       !!!!!!!!!!!!!! ", 
+  "                                                                                                                                       !!!!!!!!!!!!!! ", 
+  "                                                                                                                               !!!!!  !!!!!!!!!!! !!  ", 
+  "                                                                                                                      !!!!!!!!!!!!!!    !!!!!!!       ", 
+  "                                                                                                                      !!!!!!!!!!!!!!    !!            ", 
+  "                                                                                                               !!!!   !!!!!!!!!!!!!!                  ", 
+  "                                                                                                        !  !!!!!!!!!   !!!!!!!!                       ", 
+  "                                                                                                      !!!!!!!!!!!!!!   !!!!                           ", 
+  "                                                                                                !!    !!!!!!!!!!!!!!                                  ", 
+  "                                                                                       !!  !!!!!!!!!! !!!!!!!!!!                                      ", 
+  "                                                                                     !!!!!!!!!!!!!!   !!!!!!                                          ", 
+  "                                                                                     !!!!!!!!!!!!!!                                                   ", 
+  "                                                                         !!!!!      !!!!!!!!!!! !!                                                    ", 
+  "                                                                         !!!!! !!     !!!!!!!                                                         ", 
+  "                                                                         !!!!!        !!                                                              ", 
+  "                                                             !!!!    !!  !!!!!                                                                        ", 
+  "                                                      !  !!!!!!!!!                                                                                    ", 
+  "                                                    !!!!!!!!!!!!!!                                                                                    ", 
+  "                                              !!    !!!!!!!!!!!!!!                                                                                    ", 
+  "                                     !!  !!!!!!!!!! !!!!!!!!!!                                                                                        ", 
+  "                                   !!!!!!!!!!!!!!   !!!!!!                                                                                            ", 
+  "                                   !!!!!!!!!!!!!!                                                                                                     ", 
+  "                           !!!!!  !!!!!!!!!!! !!                                                                                                      ", 
+  "                  !!!!!!!!!!!!!!    !!!!!!!                                                                                                           ", 
+  "                  !!!!!!!!!!!!!!    !!                                                                                                                ", 
+  "           !!!!   !!!!!!!!!!!!!!                                                                                                                      ", 
+  "    !  !!!!!!!!!   !!!!!!!!                                                                                                                           ", 
+  "  !!!!!!!!!!!!!!   !!!!                                                                                                                               ", 
+  "  !!!!!!!!!!!!!!                                                                                                                                      ", 
+  "! !!!!!!!!!!                                                                                                                                          ", 
+  "  !!!!!!                                                                                                                                              ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      "
diff --git a/tests/visual_tests/grids/shield-on-line-spacing-eq-width-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/shield-on-line-spacing-eq-width-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..aac90a4
--- /dev/null
+++ b/tests/visual_tests/grids/shield-on-line-spacing-eq-width-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                           !!!!!      ", 
+  "                                                                                                                                      !!!!!!!!!!!    !", 
+  "                                                                                                                          !!!    !!!!!!!!!!!!!!!!!    ", 
+  "                                                                                                                      !!! !!!!!! !!!!!!!!!!!!!!!!     ", 
+  "                                                                                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                                                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                                                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ", 
+  "                                                                                                                      !!!!!!!!!!!!!!!!!!!! !!!!!!     ", 
+  "                                                                                                   !!!!!!!!       !!  !!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                                                    !!!          !!!!!!!!!!! !!        !!!!!!!!!!!!!!!!               ", 
+  "                                                                                    !!!    !!!!!!!!!!!!!!!!!           !!!!!!! !!!                    ", 
+  "                                                                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!           !!!!!!!                        ", 
+  "                                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                                                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                          ", 
+  "                                                                !!!!! !!!!!!!!!!!!!! !!! !!!!!!!!!!!!  !!!                                            ", 
+  "                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                 ", 
+  "                                              !!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!                                                      ", 
+  "                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                             ", 
+  "                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!                                                                ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                ", 
+  "                                          !!!!!!!!!!!!!!!!!!!!! !!!!!!                                                                                ", 
+  "                        !!!!!!!!       !!  !!!!!!!!!!!!!!!!!!!!                                                                                       ", 
+  "         !!!          !!!!!!!!!!! !!       !!!!!!!!!!!!!!!!!                                                                                          ", 
+  "         !!!    !!!!!!!!!!!!!!!!!           !!!!!!!!!!                                                                                                ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!           !!!!!!!                                                                                                   ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                                                     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                                                     ", 
+  "     !!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                                                                     ", 
+  "    !!!!! !!! !!!!!!!!!!!!  !!!                                                                                                                       ", 
+  "!     !!!!!!!!!!!!!!!!!!!!                                                                                                                            ", 
+  "      !!!!!!!!!!! !!!                                                                                                                                 ", 
+  "      !!!!!!!!                                                                                                                                        ", 
+  "       !!!!                                                                                                                                           ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shield-on-polygon-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/shield-on-polygon-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..861ddb4
--- /dev/null
+++ b/tests/visual_tests/grids/shield-on-polygon-600-400-2.0-grid-reference.json
@@ -0,0 +1,115 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "3", 
+  "2", 
+  "4", 
+  "7", 
+  "5", 
+  "6"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                            !!!!                                                                      ", 
+  "                                                                             !!!                                                                      ", 
+  "                                                                              !!!                                                                     ", 
+  "                                                                               !! !                                                                   ", 
+  "                                                                                !!!!!!                                                                ", 
+  "                                                                                !!!!!!!!                                                              ", 
+  "                                                                                !!!!!!!!!!                                                            ", 
+  "                                                                                !!!!!!!!!!!                                                           ", 
+  "                                                                                 !!!!!!!!!!!                                                          ", 
+  "                                                                                  !!!!!!!!!!                                                          ", 
+  "                                                                                   !!!!!!!!!                                                          ", 
+  "                                                                                    !!!!!!!!                                                          ", 
+  "                                                                                    !!!!!!!!                                                          ", 
+  "                                                                                     !!!!!!!!    ##                                                   ", 
+  "                                                                                      !!!!!!!!   ###                                                  ", 
+  "                                                                                       !!!!!!!    ##                                                  ", 
+  "                                                                                        !!!!!!   !!                                                   ", 
+  "                                                                                        !!!!!!   !!!                                                  ", 
+  "                                                                                         !!!!!    !!!                                                 ", 
+  "                                                                                          !!!!!!! !!!!                                                ", 
+  "                                                                                          !!!!!!!!!!!!                                                ", 
+  "                                                                                           !!!!!!!!!!!!                                               ", 
+  "                                                                                           !!!!!!!!!!!!                                               ", 
+  "                                                                                            !!!!!!!!!!!                                               ", 
+  "                                                                                            !!!!!!!!!!!!             !!!!                             ", 
+  "                                                                                             !!!!!!!!!!!!!          !!!!!!!                           ", 
+  "                                                                                             !!!!!!!!!!!!!!!       !!!!!!!!                           ", 
+  "                                                                                             !!!!!!!!!!!!!!!!!!! !!!!!!!!!                            ", 
+  "                                                                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                             ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!                              ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                                                                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                ", 
+  "                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!   !!                                ", 
+  "                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                                                                     !!!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                                                                      !!!!!!!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                                                                         !!!!!!!!!!!!!!!!!!!!!!!                                      ", 
+  "                                                                                           !!!!!!!!!!!!!!!!!!!!                                       ", 
+  "                                                                                              !!!!!!!!!!!!!!!!!                                       ", 
+  "                                                                                               !!!!!!!!!!!!!!!                                        ", 
+  "                                                                                                !!!!!!!!!!!!!!                                        ", 
+  "                                                                                                !!!!!!!!!!!!                                          ", 
+  "                                                                            $$$                 !!!!!!!!!!!!                                          ", 
+  "                                                                          $$$$                 !!!!!!!!!!!!                                           ", 
+  "                                                                         $$$$$       %%        !!!!!!!!!!!                                            ", 
+  "                                                                        $$$$$$$$     %%$      !!!!!!!!!!!                                             ", 
+  "                                                                        $$$$$$$$    $$$$$$   !!!!!!!!!!!!                                             ", 
+  "                                                                        $$$$$$$$  $$$$$$$$$ !!!!!!!!!!!!                                              ", 
+  "                                                                       $$$$$$$$$$$$$$$$$$$ !!!!!!!!!!!!                                               ", 
+  "                                                                       $$$$$$$$$$$$$$$$$$   !!!!!!!!!!                                                ", 
+  "                                                                      $$$$$$$$$$$$$$$$$$$     ! !!!!                                                  ", 
+  "                                                                     $$$$$$$$$$$$$$$$$$$$       !!                                                    ", 
+  "                                                                   $$$$$$$$$$$$$$$$$$$$$$$                                                            ", 
+  "                                                                  $$$$$$$$$$$$$$$$$$$$$$$                                                             ", 
+  "                                                                  $$$$$$$$$$$$$$$$$$$$$$                                                              ", 
+  "                                                                  $$$$$$$$$$$$$$$$$$$$$                                                               ", 
+  "                                                                 $$$$$$$$$$$$$$$$$$$$$$                                                               ", 
+  "                                                                 $$$$$$$$$$$$$$$$$$$$$                                                                ", 
+  "                                                                $$$$$$$$$$$$$$$$$$$$                                                                  ", 
+  "                                                               $$$$$$$$$$$$$$$$$$$$$                                                                  ", 
+  "                                                              $$$$$$$$$$$$$$$$$$$$$                                                                   ", 
+  "                                                            $$$$$$$$$$$$$$$$$$$$$$                                                                    ", 
+  "                                                          $$$$$$$$$$$$$$$$$$$$$$$                                                                     ", 
+  "                                                         $$$$$$$$$$$$$$$$$$$$$$                                                                       ", 
+  "                                                       $$$$$$$$$$$$$$$$$$$$$$$                                                                        ", 
+  "                                                      $$$$$$$$$$$$$$$$$$$$$$$$                                                                        ", 
+  "                                                    $$$$$$$$$$$$$$$$$$$$$$$$$$                                                                        ", 
+  "                                                 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                     ", 
+  "                                                $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                     ", 
+  "                                            $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   $$$                                                                      ", 
+  "                                          $$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                               ", 
+  "                                         $$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                  ", 
+  "                                        $$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                   ", 
+  "                                       $$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                    ", 
+  "                                     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                    ", 
+  "                                    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                    ", 
+  "                                  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                    ", 
+  "                                 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                     ", 
+  "                                $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                     ", 
+  "                               &&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                      ", 
+  "                              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                            '''$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                            '''$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                            $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                       ", 
+  "                            $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                          ", 
+  "                              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                                           ", 
+  "                              $$$$$$ $$$$$$$$$$$$$$$$$$$$                                                                                             ", 
+  "                                      $$$$$$$$$$$$$$$$$$                                                                                              ", 
+  "                                          $$$$$$$$$$$$$                                                                                               ", 
+  "                                      ((  $$$$$$$$$$$                                                                                                 ", 
+  "                                      ((((                                                                                                            ", 
+  "                                      ((((                                                                                                            ", 
+  "                                     ((((((                                                                                                           ", 
+  "                                    ((((((                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-490-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-490-100-1.0-grid-reference.json
index a5d255d..217f9c8 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-490-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-490-100-1.0-grid-reference.json
@@ -21,16 +21,16 @@
   "                                                                                                                           ", 
   "                                                                                                                           ", 
   "                                                                                                                           ", 
-  "                                                                                            !                              ", 
+  "                                                                                           !!                              ", 
   "                                                                                            !                              ", 
   "                                                       #                                   ! !                             ", 
   "                                                       ##                                                                  ", 
-  "     $$$           %                                 #####       &&&            ' '        ! !       ( ((((          )     ", 
-  "      $           % %          *           +          ###         &&            ''          !         ( (  (        ))     ", 
-  "      $            %%         **          +                       &              '          !        (( ( ((        ))     ", 
-  "      $                       **         ++++                     &                                     (                  ", 
-  "                              *           + +                                                                              ", 
-  "                                                                                           ! !                             ", 
+  "     $$$           %                                 #####       &&&            '''        ! !        ((((( (        )     ", 
+  "      $           %%%          *           +          ###         &&            ''          !        (  (  (        )      ", 
+  "      $            %%         **          ++           #         &&             ''         !!        (( ( ((        ))     ", 
+  "      $                       **         ++++                     &              '                      (                  ", 
+  "                                          + +                                                                              ", 
+  "                                                                                           !!                              ", 
   "                                                                                            !                              ", 
   "                                                                                           !                               ", 
   "                                                                                                                           ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-490-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-490-100-2.0-grid-reference.json
new file mode 100644
index 0000000..2afb326
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-490-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "7", 
+  "9", 
+  "6", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                           ", 
+  "                                                                                          !! !                             ", 
+  "                                                                                           !!!                             ", 
+  "                                                                                            !                              ", 
+  "                                                                                           !!!                             ", 
+  "                                                                                          !  !                             ", 
+  "                                                       #                                  !   !                            ", 
+  "                                                     ### #                                                                 ", 
+  "                                                      ###                                                                  ", 
+  "      $              %                                 #                          &         !           '                  ", 
+  "    $$$$$          % %%                               ###      (  (              && &     ! !!   '  ' ''''' '  '   )  )    ", 
+  "     $$$            %%%                               ###       (((              &&&       !!!    '''  '''   ''    )))     ", 
+  "      $           %  %       * **          +         # # #      (( (            & &&        !     ''    '    ''     ))     ", 
+  "     $$$            %%       ** *        ++++          #        ((                &&       !!     ''   '''   ''     ))     ", 
+  "     $$$           %%%%       **          +++                  (  (              &&&&     !!!!   '  '  '''  '  '   ) ))    ", 
+  "    $ $ $          % % %   ********    ++++++++               ((  ((            & & &     ! ! ! ''  ''' ' '''  '  )   )    ", 
+  "      $              %       ****         +++                                     &         !           '                  ", 
+  "                             *  *        ++++                                                                              ", 
+  "                                         + + +                                                                             ", 
+  "                                           +                                              !  !!                            ", 
+  "                                                                                           ! !                             ", 
+  "                                                                                           !!                              ", 
+  "                                                                                           !!                              ", 
+  "                                                                                           ! !                             ", 
+  "                                                                                          !  !!                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-495-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-495-100-1.0-grid-reference.json
index b0f7584..af76ebf 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-495-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-495-100-1.0-grid-reference.json
@@ -5,11 +5,11 @@
   "5", 
   "1", 
   "2", 
-  "3", 
   "6", 
   "7", 
   "9", 
   "10", 
+  "3", 
   "4"
  ], 
  "data": {}, 
@@ -21,16 +21,16 @@
   "                                                                                                                            ", 
   "                                                                                                                            ", 
   "                                                                                                                            ", 
-  "                                                                                             !                              ", 
+  "                                                                                            !!                              ", 
   "                                                                                             !                              ", 
   "                                                                                            ! !                             ", 
   "                                                       ##                                                                   ", 
-  "     $$$           % %         &                      ####        ' '            (          ! !       ) ))))         *      ", 
-  "      $           % %          &           +           ##          ''           ( (          !         ) )  )        **     ", 
-  "      $$           %%          &           ++                     ''             ((         !!        )) ))))        **     ", 
-  "      $                        &          ++++                                                           )                  ", 
-  "                              & &          ++                                                                               ", 
-  "                                                                                            !                               ", 
+  "     $$$           %                                  ####        &              '          !          ((((( (       ))     ", 
+  "      $           % %          *           +           ##         &&&           ' '          !        (  (  (        ))     ", 
+  "      $            %%          *           ++                     &&             ''         !!        (( ( ((        ))     ", 
+  "      $                        *          ++++                                                           (                  ", 
+  "                              ***         +++                                                                               ", 
+  "                                                                                            !!                              ", 
   "                                                                                             !                              ", 
   "                                                                                            !                               ", 
   "                                                                                                                            ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-495-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-495-100-2.0-grid-reference.json
new file mode 100644
index 0000000..53aa8c5
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-495-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                            ", 
+  "                                                                                           !! !                             ", 
+  "                                                                                            !!!                             ", 
+  "                                                                                             !                              ", 
+  "                                                                                            !!!                             ", 
+  "                                                                                           !  !                             ", 
+  "                                                                                           !   !                            ", 
+  "                                                      #  #                                                                  ", 
+  "                                                       ###                                                                  ", 
+  "      $              %                                 ##        &                 '         !           (                  ", 
+  "     $$$$          %%%%%                               ##       && &              ''''     ! !!   (  (  (((( (  (   )  )    ", 
+  "     $$$            %%%        *                      ## #      &&&               '''       !!!    (((  (((   (((    ))     ", 
+  "      $           %  %       * * *         +          # ##       && &           '  '        !!     ((    (    ((     ))     ", 
+  "     $$$            %%%       ***         ++ +                   &&               '''       !!     ((   (((   ((     ))     ", 
+  "     $$$            %%%       **          +++                   &&&&              '''      !!!!   (  (  (((  (  (   )  )    ", 
+  "    $ $ $          % % %   ********     ++++++++               & & &             ' ' '     ! !!!  (  ((( ( ( (  (( ))  )    ", 
+  "      $              %        ***         +++                    &                 '         !           (                  ", 
+  "                             * **         ++++                                                                              ", 
+  "                               *         + + +                                                                              ", 
+  "                                           +                                               !  !!                            ", 
+  "                                                                                            ! !                             ", 
+  "                                                                                            !!                              ", 
+  "                                                                                            !!                              ", 
+  "                                                                                           !! !                             ", 
+  "                                                                                           !  !!                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-497-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-497-100-1.0-grid-reference.json
index b190871..4ed4360 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-497-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-497-100-1.0-grid-reference.json
@@ -5,11 +5,11 @@
   "5", 
   "1", 
   "2", 
-  "3", 
   "6", 
   "7", 
   "9", 
   "10", 
+  "3", 
   "4"
  ], 
  "data": {}, 
@@ -21,18 +21,18 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
-  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
   "                                                                                             !                               ", 
   "                                                        #                                   ! !                              ", 
   "                                                       ##                                                                    ", 
-  "     $$$           % %         &                      ####        '''            (((        !!!       ) )) ) )       ***     ", 
-  "      $            %%          &           +           ###         ''            ((          !         ) )) )         *      ", 
-  "      $$            %          &           ++                      '              (          !!        ) )) )         *      ", 
-  "      $                        &          ++++                     '              (          !                        *      ", 
-  "                              & &          ++                                                                                ", 
+  "     $$$           %%%                                ####        &&&            '''        !!!       ( (((( (       )))     ", 
+  "      $            %%          *           +           ##          &&            ''          !         ( (( (         )      ", 
+  "      $            %%          *           ++           #         &&              '          !        (( (( ((        )      ", 
+  "      $             %          *          ++++                     &              '          !                        )      ", 
+  "                              ***           +                                                                                ", 
   "                                                                                              !                              ", 
   "                                                                                             !                               ", 
-  "                                                                                              !                              ", 
+  "                                                                                            ! !                              ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-497-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-497-100-2.0-grid-reference.json
new file mode 100644
index 0000000..f8ac5ca
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-497-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            ! !!                             ", 
+  "                                                                                            !!!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                            ! !!                             ", 
+  "                                                        #                                  !   !                             ", 
+  "                                                      # ###                                                                  ", 
+  "                                                       ###                                                                   ", 
+  "      $              %                                  #                                    !                               ", 
+  "     $$ $          %%%%%                               ##       &  &              '  '      !!!!  (( (( (  ( (( ((  )) ))    ", 
+  "     $$$            %%%        *                       ###       &&                ''       !!!    ( (   ((   ( (    )))     ", 
+  "      $            % %       * * *         +          # ###      && &            ' ''        !      (    ((    (      )      ", 
+  "     $$$            %%%       ***         ++ +          #        &&                ''       !!!    (((   ((   (((    )))     ", 
+  "     $$$            %%%       ***          ++                   &  &              '  '      !!!    ( (  (  (  ( (    )))     ", 
+  "    $ $ $          % % %   *********    ++++++++               &&  &             ''  '     ! ! !  (   (((  (((   (  )   )    ", 
+  "      $              %        ***          ++                                                !                               ", 
+  "                             * ***        ++ +                                                                               ", 
+  "                               *         + + +                                                                               ", 
+  "                                           +                                               !!  !                             ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                           !   !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-498-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-498-100-1.0-grid-reference.json
index ca0db38..d382741 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-498-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-498-100-1.0-grid-reference.json
@@ -5,11 +5,11 @@
   "5", 
   "1", 
   "2", 
-  "3", 
   "6", 
   "7", 
   "9", 
   "10", 
+  "3", 
   "4"
  ], 
  "data": {}, 
@@ -22,17 +22,17 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                             !!                              ", 
-  "                                                                                             !!                              ", 
-  "                                                        #                                     !                              ", 
-  "                                                        ##                                                                   ", 
-  "     $$$           % %         &                      #####       '''            (((          !         )) ) )        **     ", 
-  "      $            %%          &           +           ###         ''            ((          !!        )  ) )         *      ", 
-  "      $$            %          &           ++                      ''             ((         !!        )))) ))        **     ", 
-  "      $                        &          ++++                     '              (                                   *      ", 
-  "                              & &          ++                                                                                ", 
-  "                                                                                             !!                              ", 
   "                                                                                             !                               ", 
+  "                                                        #                                   ! !                              ", 
+  "                                                       ##                                                                    ", 
+  "     $$$           %%%                                #####       &&&            '''          !       ( ((  ((       )))     ", 
+  "      $            %%          *           +           ###         &&            ''          !         (  ( ((        )      ", 
+  "      $$           %%          *           ++           #          &              ''         !!          (( ((        ))     ", 
+  "      $             %          *          ++++                     &              '                                   )      ", 
+  "                              ***           +                                                                                ", 
   "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                              !                              ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-498-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-498-100-2.0-grid-reference.json
new file mode 100644
index 0000000..d30c760
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-498-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "9", 
+  "6", 
+  "7", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            !!!                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                        #                                  !   !                             ", 
+  "                                                      #####                                                                  ", 
+  "                                                       ###                                                                   ", 
+  "      $              %                                  #                                    !            &                  ", 
+  "     $$ $           %%%%                               ###      '  '              (  (      !! !   &  & & &&  &  &   )  )    ", 
+  "     $$$            %%%        *                       ###       '''               (((      !!!    &&&   &&&  &&&    )))     ", 
+  "      $            % %       * * *         +          # # #      '' '            ( ((        !!     &&   &&    &&     )      ", 
+  "     $$$            %%%       ***         +  +          #        ''                ((        !!     &&   &&   &&&    )))     ", 
+  "     $$$            %%%       ***          ++                   '  '              (  (      !!!!   & && &&&&  & &&   ))))    ", 
+  "    $ $ $          % % %   *********    ++++++++                '  ''             (  ((    ! ! !  &   & & &&&&   &  )   )    ", 
+  "      $              %        ***          ++                                                !            &                  ", 
+  "                             *****        +  +                                                                               ", 
+  "                               *         ++  ++                                                                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                           !!  !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-499-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-499-100-1.0-grid-reference.json
index 1b92a28..fed627c 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-499-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-499-100-1.0-grid-reference.json
@@ -5,11 +5,11 @@
   "5", 
   "1", 
   "2", 
-  "3", 
   "6", 
   "7", 
   "9", 
   "10", 
+  "3", 
   "4"
  ], 
  "data": {}, 
@@ -23,15 +23,15 @@
   "                                                                                                                             ", 
   "                                                                                             !!                              ", 
   "                                                                                             !!                              ", 
-  "                                                        #                                    !                               ", 
+  "                                                        #                                     !                              ", 
   "                                                        ##                                                                   ", 
-  "      $$           % %         &                      #####        ''             ((         !         ) ))))         *      ", 
-  "      $            %%          &            +          ###         ''            (((         !!        )) ) ))        **     ", 
-  "      $$                       &&          ++                      ''             ((         !!        )) ) ))        **     ", 
-  "      $                        &          ++++                     '              (                       )                  ", 
-  "                              & &          +                                                                                 ", 
+  "     $$$           %%%                                #####       &&&              '         !!       ( (((((          )     ", 
+  "      $            %%          *            +          ###         &&            ''          !!        (  (  (        ))     ", 
+  "      $$           %%          *           ++           #          &&             ''         !!        (( ( ((        ))     ", 
+  "      $             %          *          ++++                     &                                      (                  ", 
+  "                              ***          +                                                                                 ", 
   "                                                                                             !!                              ", 
-  "                                                                                              !                              ", 
+  "                                                                                             !                               ", 
   "                                                                                             !!                              ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-499-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-499-100-2.0-grid-reference.json
new file mode 100644
index 0000000..1e1324f
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-499-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                        #                                  !   !!                            ", 
+  "                                                      ### #                                                                  ", 
+  "                                                       ###                                                                   ", 
+  "      $              %                                  #         &                 '                     (                  ", 
+  "     $$ $           %% %                               ###      & &&              ' ''      !  !   (  ( ((((( (  (   )  )    ", 
+  "     $$$            %%%        *                       ###       &&&               '''       !!     ((   (((   ((     ))     ", 
+  "      $            % %       * * *          +         # # #       & &            ' ''        !!     ((    (    ((     ))     ", 
+  "     $$$            %%%       ***         +  +          #        &&                ''        !!     ((   (((   ((     ))     ", 
+  "     $$$            %%%        **          ++                   &&&&              ''''      !  !   (  (  (((  (  (   )  )    ", 
+  "    $ $ $          % % %   *********    ++++++++                & & &             ' '''    !!  !  ((  ( ( ( (((  (  ))  )    ", 
+  "      $              %        ***          ++                     &                 '                     (                  ", 
+  "                             *** *        +  +                                                                               ", 
+  "                               *         ++  ++                                                                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                            !!!!                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            ! !!                             ", 
+  "                                                                                            !  !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-500-100-1.0-grid-reference.json
index 26459bd..6987461 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-500-100-1.0-grid-reference.json
@@ -5,11 +5,11 @@
   "5", 
   "1", 
   "2", 
-  "3", 
   "6", 
   "7", 
   "9", 
   "10", 
+  "3", 
   "4"
  ], 
  "data": {}, 
@@ -22,15 +22,15 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                             !!                              ", 
-  "                                                                                              !                              ", 
-  "                                                        #                                    ! !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                        #                                    !                               ", 
   "                                                        ##                                                                   ", 
-  "      $$           % %         &                       ####        '              (          ! !       ) )))) )       * *    ", 
-  "      $            %%          &            +           ##         '''           (((          !         ) )  )         *     ", 
-  "      $$                       &&          ++                      ''             ((         !!        )) ))))        **     ", 
-  "      $                        &          ++++                                                            )                  ", 
-  "                              & &          +                                                                                 ", 
-  "                                                                                             !                               ", 
+  "     $$$           %%%                                 ####         &             ''         !          ((((( (       )      ", 
+  "      $            %%          *            +          ###         & &           '''          !        (( (  (         )     ", 
+  "      $$           %%          *           ++           #          &&             ''         !!        (( ((((        ))     ", 
+  "      $             %          *          ++++                                                            (                  ", 
+  "                              ***          +                                                                                 ", 
+  "                                                                                             !!                              ", 
   "                                                                                              !                              ", 
   "                                                                                             !!                              ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..b3b02a7
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                        #                                   !   !                            ", 
+  "                                                       ## #                                                                  ", 
+  "                                                       ###                                                                   ", 
+  "      $              %                                  ##        &                 '                     (                  ", 
+  "     $$ $           %% %                                ##      &&&&&             '''''     !  !   (  (  (( ( (  (   )  )    ", 
+  "     $$$            %%%        *                       ###       &&&               '''       !!!    (((  (((   (((    )))    ", 
+  "      $            % %       * * *          +         # # #       &  &           '  '        !!     ((    (    ((     ))     ", 
+  "     $$$            %%%       ***         +  +          #        &&&               '''       !!     ((   (((   ((     ))     ", 
+  "     $$$            %%%        **          +++                   &&&               '''      !  !   (( (  (((  (  (   )  )    ", 
+  "    $ $ $          % % %    ********    ++++++++                & & &             ' ' '     !  !!  (  ((( ( ( (  ((  )  ))   ", 
+  "      $              %        ***          ++                     &                 '                     (                  ", 
+  "                             *** *        +  +                                                                               ", 
+  "                               *          +  ++                                                                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             ! !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            !! !                             ", 
+  "                                                                                            !  !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-501-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-501-100-1.0-grid-reference.json
index 88cc494..0804e86 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-501-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-501-100-1.0-grid-reference.json
@@ -5,11 +5,11 @@
   "5", 
   "1", 
   "2", 
-  "3", 
   "6", 
   "7", 
   "9", 
   "10", 
+  "3", 
   "4"
  ], 
  "data": {}, 
@@ -21,16 +21,16 @@
   "                                                                                                                              ", 
   "                                                                                                                              ", 
   "                                                                                                                              ", 
-  "                                                                                              !                               ", 
+  "                                                                                             !!                               ", 
   "                                                                                              !                               ", 
   "                                                        #                                    ! !                              ", 
   "                                                        ##                                                                    ", 
-  "      $$           % %         &                       ####        '              (          !!!       ) ) )) )       ***     ", 
-  "      $            %%          &            +           ##          ''           ( (          !         ) )) )         *      ", 
-  "      $$                       &&          +                       ''             ((          !           ))           *      ", 
-  "      $                        &&         ++++                                                !                        *      ", 
-  "                              & &          + +                                                                                ", 
-  "                                                                                             ! !                              ", 
+  "     $$$           %%%                                 ####         &             '          !!!       (   (( (       )))     ", 
+  "      $            %%          *            +           ##         &&&           ' '          !         ( (  (         )      ", 
+  "      $$            %          *           ++           #          &&             ''         !!        (( ((          ))      ", 
+  "      $             %          *          ++++                                                !                        )      ", 
+  "                              ***          +                                                                                  ", 
+  "                                                                                             !                                ", 
   "                                                                                              !                               ", 
   "                                                                                             !                                ", 
   "                                                                                                                              ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-501-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-501-100-2.0-grid-reference.json
new file mode 100644
index 0000000..f20b79a
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-501-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                            !! !                              ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                            !! !                              ", 
+  "                                                        #                                   !   !                             ", 
+  "                                                       ## #                                                                   ", 
+  "                                                       ###                                                                    ", 
+  "      $              %                                  ##        &                 '         !           (                   ", 
+  "     $$ $           %% %                                ##      &&&&&             '''''     !!!!   (( (( (( ( (( (   )) ))    ", 
+  "     $$$            %%%        *                       ####      &&&               '''       !!!    ( (  (((   ( (    )))     ", 
+  "      $            % %       *** *          +         ### #       &  &           '  '         !      (    ((    (      )      ", 
+  "     $$$            %%%       ****        + ++          #        &&&               '''       !!!    (((   ((   (((    )))     ", 
+  "     $$$            %%%%       **          +++                   &&&               '''      !!!!    ( (  (((( (( (    )))     ", 
+  "    $ $ $          % % %    ********    ++++++++                & & &             ' ' '     ! ! !  (   (((( ( (   (  )   )    ", 
+  "      $              %        ***          ++                     &                 '         !           (                   ", 
+  "                             *** *        ++++                                                                                ", 
+  "                               *          + + +                                                                               ", 
+  "                                            +                                               !  !!                             ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                             !!                               ", 
+  "                                                                                             !!                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                            !  !!                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-502-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-502-100-1.0-grid-reference.json
index 050335c..0b393be 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-502-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-502-100-1.0-grid-reference.json
@@ -21,18 +21,18 @@
   "                                                                                                                              ", 
   "                                                                                                                              ", 
   "                                                                                                                              ", 
-  "                                                                                              !                               ", 
+  "                                                                                                                              ", 
   "                                                                                              !                               ", 
   "                                                                                             ! !                              ", 
   "                                                        ##                                                                    ", 
-  "      $$           % %                                 ####        & &            ' '        !!!       ( (( ( (       )))     ", 
-  "      $            %%          *            +           ##          &&           ' '          !         (  ( (         )      ", 
-  "      $$            %          **          ++                      &&             ''          !         (((( ((        ))     ", 
-  "      $                        **         ++++                                                !                        )      ", 
-  "                                *          +++                                                                                ", 
+  "     $$$           %%%                                 ####        &              '''        !!!       ( ((   (       )))     ", 
+  "      $            %%          *            +           ##         &&&           ' '          !         ( (( (         )      ", 
+  "      $$            %          **          ++                      &&             ''          !        (( (( ((        ))     ", 
+  "      $             %          *          ++++                                     '          !                        )      ", 
+  "                              * *          +++                                                                                ", 
   "                                                                                               !                              ", 
   "                                                                                              !                               ", 
-  "                                                                                               !                              ", 
+  "                                                                                             ! !                              ", 
   "                                                                                                                              ", 
   "                                                                                                                              ", 
   "                                                                                                                              ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-502-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-502-100-2.0-grid-reference.json
new file mode 100644
index 0000000..8e97860
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-502-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                             ! !!                             ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                            !! !!                             ", 
+  "                                                        #                                   !   !                             ", 
+  "                                                       ## #                                                                   ", 
+  "                                                       ###                                                                    ", 
+  "      $              %                                  ##        &                 '         !                               ", 
+  "     $$ $           %% %                                ##       && &              '' '     !!!!!   (  ( (  ( (( ((   )  )    ", 
+  "     $$$            %%%        *                       ####      &&&               '''       !!!    ( (   (((  ( (    )))     ", 
+  "      $            % %%      *** *          +         ### #       &  &           '  ''        !      (    ((    (      )      ", 
+  "     $$$             %%       ****        ++++          #        &&&                ''       !!!    (((   ((   (((    )))     ", 
+  "     $$$$           %%%%       **          +++                   &&&&              ''''      !!!    ( (  (  (  ( (    )))     ", 
+  "    $ $ $          % % %    ********    ++++++++                & & &             ' ' '     ! ! !  (   ( (  (((   (  )   )    ", 
+  "      $              %        ***          +++                    &                 '         !                               ", 
+  "                              ** *        ++++                                                                                ", 
+  "                               *          + + +                                                                               ", 
+  "                                            +                                               !!  !                             ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                            !   !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-505-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-505-100-1.0-grid-reference.json
index aa2e746..9a30934 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-505-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-505-100-1.0-grid-reference.json
@@ -23,14 +23,14 @@
   "                                                                                                                               ", 
   "                                                                                              !!                               ", 
   "                                                                                              !!                               ", 
-  "                                                                                              ! !                              ", 
-  "                                                        #                                                                      ", 
-  "      $$           % %                                 ####        &&&             ''         !         ( (((( (       )))     ", 
-  "      $            %%          *            +           ##          &&            ''           !         ( (  (         )      ", 
-  "      $$           %%%         **           ++                      &&             ''         !!        (( ((((         )      ", 
-  "      $            %           **         +++++                     &              '                       (            )      ", 
-  "                               *           +++                                                                                 ", 
   "                                                                                              !                                ", 
+  "                                                        ##                                                                     ", 
+  "     $$$           %%%                                 ####        &&&              '         !         (((((( (       )))     ", 
+  "      $            %%          *            +           ##          &&            ''          !!        (( (  (         )      ", 
+  "      $$            %          **           +                       &              ''         !!        (( ((          ))      ", 
+  "      $             %          **         +++++                     &                                      (            )      ", 
+  "                                           +++                                                                                 ", 
+  "                                                                                              !!                               ", 
   "                                                                                               !                               ", 
   "                                                                                              !!                               ", 
   "                                                                                                                               ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-505-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-505-100-2.0-grid-reference.json
new file mode 100644
index 0000000..979a1a1
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-505-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "7", 
+  "9", 
+  "6", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                               ", 
+  "                                                                                             !  !                              ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                             !  !                              ", 
+  "                                                         #                                  !!   !                             ", 
+  "                                                       # ##                                                                    ", 
+  "                                                        ###                                                                    ", 
+  "      $              %                                  ##                           &                     '                   ", 
+  "     $$ $           %% %                                ##       (  (              & &&      !  !   '  '  '' ' '  '   )) )     ", 
+  "     $$$            %%%                                ####       (((               &&&       !!!    '''  '''   '''    )))     ", 
+  "      $$           % %%       ** *          +          # ###      (( (            & &&        !!      '    ''   ''      )      ", 
+  "      $$             %%       *  *         ++++          #        ((                &&        !!     ''    ''   ''     )))     ", 
+  "     $$$$           %%%%       **          +++                   (  (              &&&&      !  !   '' '  '''' '' '   ))))     ", 
+  "    $ $ $          %%% %    ********    +++++++++                (  ((             & &&&     !  !!  '  ''' ' ' '  ''  )   )    ", 
+  "      $              %        ***          +++                                       &                     '                   ", 
+  "                              *  *         ++++                                                                                ", 
+  "                                          + + +                                                                                ", 
+  "                                            +                                                !  !                              ", 
+  "                                                                                              !!!                              ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                             !! !                              ", 
+  "                                                                                             !  !                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-510-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-510-100-1.0-grid-reference.json
index f0706c7..41844bc 100644
--- a/tests/visual_tests/grids/shieldsymbolizer-1-510-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-510-100-1.0-grid-reference.json
@@ -23,15 +23,15 @@
   "                                                                                                                                ", 
   "                                                                                               !!                               ", 
   "                                                                                               !!                               ", 
-  "                                                                                               !                                ", 
+  "                                                                                                                                ", 
   "                                                         ##                                                                     ", 
-  "       $           % %                                  ####        & &            '''         !         ( ( (( (       )))     ", 
-  "      $$           %%%          *            +           ##          &&            ''           !         ( (( (         )      ", 
-  "      $$           %%%          *           ++                       &              '          !!         ( (( (         )      ", 
-  "                   %            *          ++++                                     '                                    )      ", 
-  "                               * *          +                                                                                   ", 
+  "       $             %                                  ####        &              '''         !         (   (( (       )))     ", 
+  "      $            %%           *            +           ##          &&            ''          !!        (( (  (         )      ", 
+  "      $$            %%          *           ++                      &&              ''         !!        (( ((           )      ", 
+  "                                *          ++++                                     '                                    )      ", 
+  "                               * *          ++                                                                                  ", 
   "                                                                                               !!                               ", 
-  "                                                                                                !                               ", 
+  "                                                                                                                                ", 
   "                                                                                               !!                               ", 
   "                                                                                                                                ", 
   "                                                                                                                                ", 
diff --git a/tests/visual_tests/grids/shieldsymbolizer-1-510-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-1-510-100-2.0-grid-reference.json
new file mode 100644
index 0000000..9d3d6ca
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-1-510-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "6", 
+  "9", 
+  "2", 
+  "7", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                              !  !                              ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                              !  !                              ", 
+  "                                                         #                                   !!  !!                             ", 
+  "                                                        ## #                                                                    ", 
+  "                                                        ###                                                                     ", 
+  "      $                                                  ##        %                                        &                   ", 
+  "     $$ $           '  '                                 ##       %% %              (  (      !  !   &  &  && & &  &   )) ))    ", 
+  "     $$$             ''         *                       ####      %%%                ((        !!     & &  &&&   &&&    )))     ", 
+  "      $$           ' ''       * * *          +         ### #       %% %            ( ((        !!      &    &&    &      )      ", 
+  "      $$             ''        ***         +  +          #         %%                ((        !!     &&    &&   &&     )))     ", 
+  "     $$$$           '  '       **           ++                    %%%%              (  (      !  !   && &  &&&& && &    )))     ", 
+  "    $ $ $          ''  ''   ********     ++++++++                % % %             ((  ((    !!  !!  &   && & & &   &  )   )    ", 
+  "      $                        ***          ++                     %                                        &                   ", 
+  "                              * **         +  +                                                                                 ", 
+  "                                *         ++  ++                                                                                ", 
+  "                                                                                              !  !                              ", 
+  "                                                                                              !!!!                              ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                              !!!!                              ", 
+  "                                                                                              !  !                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-490-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-490-100-1.0-grid-reference.json
new file mode 100644
index 0000000..c731906
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-490-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                           !!                              ", 
+  "                                                                                            !                              ", 
+  "                                                                                           ! !                             ", 
+  "                                                        #                                                                  ", 
+  "     $$$           %                                   #         & &            ' '        ! !        ((((( (        )     ", 
+  "      $           %%%          *           +          ###         &&            ''          !        (  (  (        )      ", 
+  "      $            %%         **          ++           #         &&             ''         !!        (( ( ((        ))     ", 
+  "      $                       **           +           #                                                (                  ", 
+  "                                          + +                                                                              ", 
+  "                                                                                           !!                              ", 
+  "                                                                                            !                              ", 
+  "                                                                                           !                               ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-490-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-490-100-2.0-grid-reference.json
new file mode 100644
index 0000000..abe5134
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-490-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "9", 
+  "7", 
+  "10", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                           ", 
+  "                                                                                          !! !                             ", 
+  "                                                                                           !!!                             ", 
+  "                                                                                            !                              ", 
+  "                                                                                           !!!                             ", 
+  "                                                                                          !  !                             ", 
+  "                                                                                          !   !                            ", 
+  "                                                     ##  #                                                                 ", 
+  "                                                      # #                                                                  ", 
+  "      $           %                        &           #           '                        !           (                  ", 
+  "    $$$$$         %%  %                    &          ###      '  ''             )  )     ! !!   (  ( ((((( (  (   *  *    ", 
+  "     $$$          % % %                    &          ###       ''''             )))       !!!    (((  (((   ((    ***     ", 
+  "      $           %  %       + ++          &         # # #      '' '            ) ))        !     ((    (    ((     **     ", 
+  "     $$$          % %%       ++ +        &&&&          #        '' '              ))       !!     ((   (((   ((     **     ", 
+  "     $$$          %%% %       ++          &&&          #       '  ''             ) ))     !!!!   (  (  (((  (  (   * **    ", 
+  "    $ $ $         %%   %      ++           &           #      ''  ''            )   )     ! ! ! ((  ((( ( (((  (  *   *    ", 
+  "      $           %          ++++         &&&          #           '                        !           (                  ", 
+  "                             +  +        && &                                                                              ", 
+  "                                         &   &                                                                             ", 
+  "                                                                                          !  !!                            ", 
+  "                                                                                           ! !                             ", 
+  "                                                                                           !!                              ", 
+  "                                                                                           !!                              ", 
+  "                                                                                           ! !                             ", 
+  "                                                                                          !  !!                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-495-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-495-100-1.0-grid-reference.json
new file mode 100644
index 0000000..d911b9a
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-495-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                            !!                              ", 
+  "                                                                                             !                              ", 
+  "                                                                                            ! !                             ", 
+  "                                                       ##                                                                   ", 
+  "     $$$           %           &           '            #         ( (            )          !          ***** *       ++     ", 
+  "      $           % %          &           '           ##         (((           ) )          !        *  *  *        ++     ", 
+  "      $            %%          &           ''                     (((            ))         !!        ** * **        ++     ", 
+  "      $                        &           '                        (                                    *                  ", 
+  "                              & &         ' '                                                                               ", 
+  "                                                                                            !!                              ", 
+  "                                                                                             !                              ", 
+  "                                                                                            !                               ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-495-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-495-100-2.0-grid-reference.json
new file mode 100644
index 0000000..c5106c2
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-495-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "3", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "2", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                            ", 
+  "                                                                                           !! !                             ", 
+  "                                                                                            !!!                             ", 
+  "                                                                                             !                              ", 
+  "                                                                                            !!!                             ", 
+  "                                                                                           !  !                             ", 
+  "                                                                                           !   !                            ", 
+  "                                                      #  #                                                                  ", 
+  "                                                       ###                                                                  ", 
+  "      $                        %           &           ##           '           (            !           )                  ", 
+  "     $$$$          ** **       %           &           ##       '  ''           ( ( ((     ! !!   )  )  )))) )  )   +  +    ", 
+  "     $$$            * *        %           &          ## #      ''' '           ( ( (       !!!    )))  )))   )))    ++     ", 
+  "      $           *  *       % % %         &          # ##       '' '           (  (        !!     ))    )    ))     ++     ", 
+  "     $$$            ***       %%%         && &                   '' '           ( (((       !!     ))   )))   ))     ++     ", 
+  "     $$$            * *       %%          &&&                   ' '''           ( ( (      !!!!   )  )  )))  )  )   +  +    ", 
+  "    $ $ $          *   *      %%           &                   '   ''           ((   (     ! !!!  )  ))) ) ) )  )) ++  +    ", 
+  "      $                       %%%         &&&                       '           (            !           )                  ", 
+  "                             %  %         & &&                                                                              ", 
+  "                                         &   &                                                                              ", 
+  "                                                                                           !  !!                            ", 
+  "                                                                                            ! !                             ", 
+  "                                                                                            !!                              ", 
+  "                                                                                            !!                              ", 
+  "                                                                                           !! !                             ", 
+  "                                                                                           !  !!                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-497-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-497-100-1.0-grid-reference.json
new file mode 100644
index 0000000..7288101
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-497-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !                               ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                       ##                                                                    ", 
+  "     $$$           % %         &                        #         ' '            ( (        !!!       ) )))) )       ***     ", 
+  "      $            %%          &           +           ##          ''            ((          !         ) )) )         *      ", 
+  "      $            %%          &           ++           #         '''                        !        )) )) ))        *      ", 
+  "      $                        &           +            #           '                        !                        *      ", 
+  "                              & &           +                                                                                ", 
+  "                                                                                              !                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-497-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-497-100-2.0-grid-reference.json
new file mode 100644
index 0000000..017eb90
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-497-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "3", 
+  "4", 
+  "6", 
+  "7", 
+  "2", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            ! !!                             ", 
+  "                                                                                            !!!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                            ! !!                             ", 
+  "                                                                                           !   !                             ", 
+  "                                                      #  ##                                                                  ", 
+  "                                                       # #                                                                   ", 
+  "      $                        %           &            #           '            (           !                               ", 
+  "     $$ $          )) ))       %           &           ##       '  ''            ((  (      !!!!  ** ** *  * ** **  ++ ++    ", 
+  "     $$$            ) )        %           &           ###       '' '            ( ((       !!!    * *   **   * *    +++     ", 
+  "      $            ) )       % % %         &          # ###      '' '            ( ((        !      *    **    *      +      ", 
+  "     $$$            )))       %%%         && &          #        '' '            ( ((       !!!    ***   **   ***    +++     ", 
+  "     $$$            ) )       %%%          &&           #       '  ''            ((  (      !!!    * *  *  *  * *    +++     ", 
+  "    $ $ $          )   )       %           &&           #      ''  ''            ((  (     ! ! !  *   ***  ***   *  +   +    ", 
+  "      $                       %%%          &&           #           '            (           !                               ", 
+  "                             %  %%        &  &                                                                               ", 
+  "                                         &   &                                                                               ", 
+  "                                                                                           !!  !                             ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                           !   !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-498-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-498-100-1.0-grid-reference.json
new file mode 100644
index 0000000..0b8130a
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-498-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                       #                                                                     ", 
+  "     $$$           % %         &                        #         ' '            ( (          !       ) ))  ))       ***     ", 
+  "      $            %%          &           +           ###         ''            ((          !         )  ) ))        *      ", 
+  "      $$           %%          &           ++           #                        (((         !!          )) ))        **     ", 
+  "      $                        &           ++           #                        (                                    *      ", 
+  "                              & &           +                                                                                ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                              !                              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-498-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-498-100-2.0-grid-reference.json
new file mode 100644
index 0000000..975a7c8
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-498-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "2", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            !!!                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                           !   !                             ", 
+  "                                                      ## ##                                                                  ", 
+  "                                                       # #                                                                   ", 
+  "      $                        %                        #           &            '           !            (                  ", 
+  "     $$ $           ) ))       %                       ###      &  &&            ''  '      !! !   (  ( ( ((  (  (   *  *    ", 
+  "     $$$            ) )        %                       ###       &&&&            ' '''      !!!    (((   (((  (((    ***     ", 
+  "      $            ) )       % % %         +          # # #      && &            ' ''        !!     ((   ((    ((     *      ", 
+  "     $$$            )))       %%%         +  +          #        && &            ' ''        !!     ((   ((   (((    ***     ", 
+  "     $$$            ) )       %%%          ++           #       &  &&            ''  '      !!!!   ( (( ((((  ( ((   ****    ", 
+  "    $ $ $          )   )       %           ++           #       &  &&            ''  ''    ! ! !  (   ( ( ((((   (  *   *    ", 
+  "      $                       %%%          ++           #           &            '           !            (                  ", 
+  "                             %% %%        +  +                                                                               ", 
+  "                                         ++  ++                                                                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                           !!  !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-499-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-499-100-1.0-grid-reference.json
new file mode 100644
index 0000000..27a1489
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-499-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                              !                              ", 
+  "                                                         #                                                                   ", 
+  "     $$$           % %         &                        #         ' '            ( (         !!       ) )))))          *     ", 
+  "      $            %%          &            +          ###         ''            ((          !!        )  )  )        **     ", 
+  "      $$           %%          &           ++           #          ''            (((         !!        )) ) ))        **     ", 
+  "      $                        &           ++           #                        (                        )                  ", 
+  "                              & &          +                                                                                 ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                             !!                              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-499-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-499-100-2.0-grid-reference.json
new file mode 100644
index 0000000..a184ed4
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-499-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "3", 
+  "7", 
+  "9", 
+  "2", 
+  "6", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                           !   !!                            ", 
+  "                                                      ##  #                                                                  ", 
+  "                                                       # #                                                                   ", 
+  "      $                        %                        #                        &                        '                  ", 
+  "     $$ $           (  (       %                       ###      )  )             &&  &      !  !   '  ' ''''' '  '   *  *    ", 
+  "     $$$            ( (        %                       ###       ) )             & &&&       !!     ''   '''   ''     **     ", 
+  "      $            ( (       % % %          +         # # #       ) )            & &&        !!     ''    '    ''     **     ", 
+  "     $$$            (((       %%%         +  +          #        ))              & &&        !!     ''   '''   ''     **     ", 
+  "     $$$            ( (        %%          ++           #       )) )             &&& &      !  !   '  '  '''  '  '   *  *    ", 
+  "    $ $ $          (   (       %           ++           #       )   )            &&  &&    !!  !  ''  ' ' ' '''  '  **  *    ", 
+  "      $                       %%%          ++           #                        &                        '                  ", 
+  "                             %%  %        +  +                                                                               ", 
+  "                                         ++  ++                                                                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                            !!!!                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            ! !!                             ", 
+  "                                                                                            !  !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..3431d4b
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                         #                                                                   ", 
+  "     $$$           % %         &                        #           '            (((         !          ))))) )       *      ", 
+  "      $            %%          &            +          ###         ' '           (((          !        )) )  )         *     ", 
+  "      $$           %%          &           ++           #          ''            (((         !!        )) ))))        **     ", 
+  "      $                        &            +           #                        (                        )                  ", 
+  "                              & &          +                                                                                 ", 
+  "                                                                                             !!                              ", 
+  "                                                                                              !                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..4016583
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "3", 
+  "7", 
+  "9", 
+  "2", 
+  "6", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                            !   !                            ", 
+  "                                                       #  #                                                                  ", 
+  "                                                       # #                                                                   ", 
+  "      $                        %                        ##                       &                        '                  ", 
+  "     $$ $           (  (       %                        ##      )) ))            &&& &&     !  !   '  '  '' ' '  '   *  *    ", 
+  "     $$$            ( (        %                       ###       ) )             & & &       !!!    '''  '''   '''    ***    ", 
+  "      $            ( (       % % %          +         # # #       )  )           &  &        !!     ''    '    ''     **     ", 
+  "     $$$            (((       %%%         +  +          #        )))             & &&&       !!     ''   '''   ''     **     ", 
+  "     $$$            ( (        %%          +++          #        ) )             & & &      !  !   '' '  '''  '  '   *  *    ", 
+  "    $ $ $          (   (       %            +           #       )   )            &&   &     !  !!  '  ''' ' ' '  ''  *  **   ", 
+  "      $                       %%%          ++           #                        &                        '                  ", 
+  "                             %%  %        +  +                                                                               ", 
+  "                                          +  ++                                                                              ", 
+  "                                                                                            !  !                             ", 
+  "                                                                                             ! !                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                            !! !                             ", 
+  "                                                                                            !  !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-501-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-501-100-1.0-grid-reference.json
new file mode 100644
index 0000000..b6a232d
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-501-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                             !!                               ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                        ##                                                                    ", 
+  "     $$$           % %         &                        #           ''            (          !!!       )   )) )       ***     ", 
+  "      $            %%          &            +           ##         '''           ( (          !         ) )  )         *      ", 
+  "      $$                       &           ++           #          '''            ((         !!        )) ))          **      ", 
+  "      $                        &            +           #            '                        !                        *      ", 
+  "                              & &          +                                                                                  ", 
+  "                                                                                             !                                ", 
+  "                                                                                              !                               ", 
+  "                                                                                             !                                ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-501-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-501-100-2.0-grid-reference.json
new file mode 100644
index 0000000..c60859b
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-501-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                            !! !                              ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                            !! !                              ", 
+  "                                                                                            !   !                             ", 
+  "                                                       #  #                                                                   ", 
+  "                                                       ###                                                                    ", 
+  "      $            %           &            '           ##           (           )            !           *                   ", 
+  "     $$ $          %%  %       &            '           ##      (( (((           ))) ))     !!!!   ** ** ** * ** *   ++ ++    ", 
+  "     $$$           %%%%        &            '          ####      ( ( (           ) ) )       !!!    * *  ***   * *    +++     ", 
+  "      $            % %       &&& &          '         ### #       (  (           )  )         !      *    **    *      +      ", 
+  "     $$$           %%%%       &&&&        ' ''          #        ((( (           ) )))       !!!    ***   **   ***    +++     ", 
+  "     $$$           %% %%       &&          '''          #        ( ( (           ) ) )      !!!!    * *  **** ** *    +++     ", 
+  "    $ $ $          %   %       &&           '           #       (   ((           ))   )     ! ! !  *   **** * *   *  +   +    ", 
+  "      $            %          &&&          ''           #            (           )            !           *                   ", 
+  "                             &&  &        '' '                                                                                ", 
+  "                                          '   '                                                                               ", 
+  "                                                                                            !  !!                             ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                             !!                               ", 
+  "                                                                                             !!                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                            !  !!                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-502-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-502-100-1.0-grid-reference.json
new file mode 100644
index 0000000..220b28f
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-502-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                        ##                                                                    ", 
+  "     $$$           % %                      &           #          ' '            ( (        !!!       ) ))   )       ***     ", 
+  "      $            %%          +            &           ##         '''           ( (          !         ) )) )         *      ", 
+  "      $$                       ++          &&                      '''            ((          !        )) )) ))        **     ", 
+  "      $                        +            &                        '                        !                        *      ", 
+  "                              + +          & &                                                                                ", 
+  "                                                                                               !                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-502-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-502-100-2.0-grid-reference.json
new file mode 100644
index 0000000..b3e3220
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-502-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                             ! !!                             ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                            !! !!                             ", 
+  "                                                                                            !   !                             ", 
+  "                                                       #  #                                                                   ", 
+  "                                                       ###                                                                    ", 
+  "      $            %           &            '           ##           (                        !                               ", 
+  "     $$ $          %%  %       &            '           ##       (  ((             )  )     !!!!!   *  * *  * ** **   +  +    ", 
+  "     $$$           %%%%        &            '          ####      ((( (             )))       !!!    * *   ***  * *    +++     ", 
+  "      $            % %%      &&& &          '         ### #       (  (           )  ))        !      *    **    *      +      ", 
+  "     $$$           % %%       &&&&        ''''          #        ((( (              ))       !!!    ***   **   ***    +++     ", 
+  "     $$$$          %% %%       &&          '''          #        ( (((             ) ))      !!!    * *  *  *  * *    +++     ", 
+  "    $ $ $          %   %       &&           '           #       (   ((            )   )     ! ! !  *   * *  ***   *  +   +    ", 
+  "      $            %          &&&          '''          #            (                        !                               ", 
+  "                              &  &        '' '                                                                                ", 
+  "                                          '   '                                                                               ", 
+  "                                                                                            !!  !                             ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             !!!                              ", 
+  "                                                                                             ! !                              ", 
+  "                                                                                            !   !                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-505-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-505-100-1.0-grid-reference.json
new file mode 100644
index 0000000..0793bfc
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-505-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !                                ", 
+  "                                                        ##                                                                     ", 
+  "     $$$           % %                      &            #         ' '            ( (         !         )))))) )       ***     ", 
+  "      $            %%          +            &           ##          ''            ((          !!        )) )  )         *      ", 
+  "      $$           %           ++           &                                     (((         !!        )) ))          **      ", 
+  "      $            %           ++           &                                     (                        )            *      ", 
+  "                                           & &                                                                                 ", 
+  "                                                                                              !!                               ", 
+  "                                                                                               !                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-505-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-505-100-2.0-grid-reference.json
new file mode 100644
index 0000000..9008916
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-505-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                               ", 
+  "                                                                                             !  !                              ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                             !  !                              ", 
+  "                                                                                            !!   !                             ", 
+  "                                                       #  #                                                                    ", 
+  "                                                        # #                                                                    ", 
+  "      $            %                        &           ##           '            (                        )                   ", 
+  "     $$ $          %%  %                    &           ##       '  ''            ((  (      !  !   )  )  )) ) )  )   ** *     ", 
+  "     $$$           %%%%                     &          ####       ''''            ( (((       !!!    )))  )))   )))    ***     ", 
+  "      $$           % %%       ++ +          &          # ###      '' '            ( ((        !!      )    ))   ))      *      ", 
+  "      $$           % %%       +  +         &&&&          #        '' '            ( ((        !!     ))    ))   ))     ***     ", 
+  "     $$$$          %% %%       ++          &&&           #       '  ''            ((( (      !  !   )) )  )))) )) )   ****     ", 
+  "    $ $ $          %%  %       ++           &            #       '  ''            ((  ((     !  !!  )  ))) ) ) )  ))  *   *    ", 
+  "      $            %          +++          &&&           #           '            (                        )                   ", 
+  "                              +  +         & &&                                                                                ", 
+  "                                          &   &                                                                                ", 
+  "                                                                                             !  !                              ", 
+  "                                                                                              !!!                              ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                             !! !                              ", 
+  "                                                                                             !  !                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-510-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-510-100-1.0-grid-reference.json
new file mode 100644
index 0000000..012886e
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-510-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                                                                ", 
+  "                                                         ##                                                                     ", 
+  "       $           % %                                   #          & &            ' '         !         (   (( (       )))     ", 
+  "      $            %%           *            +           ##          &&            ''          !!        (( (  (         )      ", 
+  "      $$           %%%          *           ++                      &&&             ''         !!        (( ((           )      ", 
+  "                   %            *           ++                        &                                                  )      ", 
+  "                               * *          ++                                                                                  ", 
+  "                                                                                               !!                               ", 
+  "                                                                                                                                ", 
+  "                                                                                               !!                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-510-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-510-100-2.0-grid-reference.json
new file mode 100644
index 0000000..3cfb385
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-510-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                              !  !                              ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                              !  !                              ", 
+  "                                                                                             !!  !!                             ", 
+  "                                                        #  #                                                                    ", 
+  "                                                        ###                                                                     ", 
+  "      $            %            &                        ##           '            (                        )                   ", 
+  "     $$ $          %%  %        &                        ##       '  ''            ((  (      !  !   )  )  )) ) )  )   ** **    ", 
+  "     $$$           % %%         &                       ####      ''' '            ( ((        !!     ) )  )))   )))    ***     ", 
+  "      $$           % %%       & & &          +         ### #       '' '            ( ((        !!      )    ))    )      *      ", 
+  "      $$           % %%        &&&         +  +          #         '' '            ( ((        !!     ))    ))   ))     ***     ", 
+  "     $$$$          %%  %       &&           ++           #        ' '''            ((  (      !  !   )) )  )))) )) )    ***     ", 
+  "    $ $ $          %%  %%      &&           ++           #       '   ''            ((  ((    !!  !!  )   )) ) ) )   )  *   *    ", 
+  "      $            %           &&&          ++           #            '            (                        )                   ", 
+  "                              &  &         +  +                                                                                 ", 
+  "                                          ++  ++                                                                                ", 
+  "                                                                                              !  !                              ", 
+  "                                                                                              !!!!                              ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                              !!!!                              ", 
+  "                                                                                              !  !                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-490-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-490-100-1.0-grid-reference.json
new file mode 100644
index 0000000..0a4b05b
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-490-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                           !!                              ", 
+  "                                                                                            !                              ", 
+  "                                                                                           ! !                             ", 
+  "                                                        #                                                                  ", 
+  "     $ $           %                                   # ####    & &            ' '        ! !        (( (( (              ", 
+  "      $           %%%          )           *          ###         &&            ''          !        (  (  (        +      ", 
+  "                   %%         ))          **                     &&             ''         !!        ((   ((               ", 
+  "                              ))           * ****                                                                          ", 
+  "                                          * *                                                                              ", 
+  "                                                                                           !!                              ", 
+  "                                                                                            !                           +  ", 
+  "                                                                                           !                        ++  +  ", 
+  "                                                                                                                    +  ++++", 
+  "                                                                                                                   + +  +  ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-490-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-490-100-2.0-grid-reference.json
new file mode 100644
index 0000000..579ad0a
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-490-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "2", 
+  "6", 
+  "7", 
+  "1", 
+  "9", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                     !!  !                                                                 ", 
+  "                                                      ! !                                                                  ", 
+  "                            #                          !                $                 %                                ", 
+  "    && &&          #  #     #                         !!!      $  $     $        %  %     %      '  ' '' '' '  '           ", 
+  "     & &            # #     #                         ! !       $$$     $        %%%      %       '''  ' '   ''            ", 
+  "      &           #  #      #  (           )      )  ! ! !      $$ $    $       % %%      % *     ''    '    ''     +      ", 
+  "     &&&            ##      #            )) )     )             $$      $         %%      %       ''   '''   ''            ", 
+  "     & &           ## #     #             )))     )            $  $     $        % %%     %      '  '  ' '  '  '           ", 
+  "    &   &          #   #    #              )   ))))))))       $$  $$    $       %   %     %     ''  '''   '''  '           ", 
+  "                            #             )))     )                     $                 %                                ", 
+  "                                         )) )     )                                                                        ", 
+  "                                         )   )    )                                                                        ", 
+  "                                                  )                                                                        ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                   +  +    ", 
+  "                                                                                                                   +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-495-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-495-100-1.0-grid-reference.json
new file mode 100644
index 0000000..7271752
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-495-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                            !!                              ", 
+  "                                                                                             !                              ", 
+  "                                                                                            ! !                             ", 
+  "                                                       ##                                                                   ", 
+  "     $ $  $        %                                    # ####    &              '          !          (( (( (              ", 
+  "      $   $       % %          )           *   *       ##         &&&           ' '          !        (  (  ((       +      ", 
+  "          $        %%          )           **  *                  &&             ''         !!        ((   (((              ", 
+  "          $                    )           * *****                                                           (              ", 
+  "                              ) )         * *  *                                                                            ", 
+  "                                                                                            !!                              ", 
+  "                                                                                             !                           +  ", 
+  "                                                                                            !                        ++  +  ", 
+  "                                                                                                                     ++ ++++", 
+  "                                                                                                                      +  +  ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-495-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-495-100-2.0-grid-reference.json
new file mode 100644
index 0000000..664ce15
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-495-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "6", 
+  "1", 
+  "2", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                               !                                                            ", 
+  "                                                      !  !     !                                                            ", 
+  "                                                       !!!     !                                                            ", 
+  "                                                       !!      !         #                                                  ", 
+  "     $ $$          %% %%                               !!      !#  #     #        & &&            '  '  ' '' '  '           ", 
+  "     $ $            % %                               !! !     !###      #        & &              '''  ' '   '''           ", 
+  "      $           %  %         (           )       )  ! !!     ! ## #    #      &  &         *     ''    '    ''     +      ", 
+  "     $$$            %%%                   )  )     )           ! ##      #        &&&              ''   '''   ''            ", 
+  "     $ $            % %                   )))      )            # ##     #        & &             '  '  ' '  '  '           ", 
+  "    $   $          %   %                   )   ))))))))        #   #     #       &   &            '  '''   ' '  ''          ", 
+  "                                          )))      )                     #                                                  ", 
+  "                                          ) ))     )                                                                        ", 
+  "                                         )   )     )                                                                        ", 
+  "                                                   )                                                                        ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                    +  +    ", 
+  "                                                                                                                     ++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-497-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-497-100-1.0-grid-reference.json
new file mode 100644
index 0000000..d958e66
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-497-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !                               ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                       ##                                                                    ", 
+  "     $ $  $        % %                                  # ####    & &            ' '  '     ! !  !    ( (((( (               ", 
+  "      $   $        %%          )           *   *       ##          &&            ''   '      !   !     ( (( ((        +      ", 
+  "          $        %%          )           **  *                  &&                  '          !    (( (( ((               ", 
+  "          $                    )           * *****                                    '          !           (               ", 
+  "                              ) )           *  *                                                                             ", 
+  "                                                                                              !                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                                                      + ++++ ", 
+  "                                                                                                                     + +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-497-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-497-100-2.0-grid-reference.json
new file mode 100644
index 0000000..d56b194
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-497-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "6", 
+  "7", 
+  "9", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                               !                                                             ", 
+  "                                                      !  !!    !                                                             ", 
+  "                                                       ! !     !                                                             ", 
+  "                                                        !      !         #                 $                     %           ", 
+  "     &  &          '' ''                               !!      !#  #     #        $  $     $      %% %% %  % %% %%           ", 
+  "     & &            ' '                                ! !     ! ##      #         $$      $       % %   %%   % %%           ", 
+  "      &            ' '         (           )       )  ! !!!    ! ## #    #       $ $$      $ *      %    %%    % %    +      ", 
+  "     &&&            '''                   )  )     )           ! ##      #         $$      $       %%%   %%   %%%%           ", 
+  "     & &            ' '                    ))      )            #  #     #        $  $     $       % %  %  %  % %%           ", 
+  "    &   &          '   '                   ))  ))))))))        ##  #     #       $$  $     $      %   %%%  %%%   %           ", 
+  "                                           ))      )                     #                 $                     %           ", 
+  "                                          )  )     )                                                                         ", 
+  "                                         )   )     )                                                                         ", 
+  "                                                   )                                                                         ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                    ++ +     ", 
+  "                                                                                                                     + +     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-498-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-498-100-1.0-grid-reference.json
new file mode 100644
index 0000000..2f8f820
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-498-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                       #                                                                     ", 
+  "     $ $  $        % %                                  # ####    & &            ' '  '       !  !    ( ((  ((               ", 
+  "      $   $        %%          )           *   *       ###         &&            ''   '      !   !     (  ( ((        +      ", 
+  "      $$  $        %%          )           **  *                                  ''  '      !!  !       (( ((               ", 
+  "          $                    )           ** ****                                    '          !                           ", 
+  "                              ) )           *  *                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                            +  ", 
+  "                                                                                              !                       ++  +  ", 
+  "                                                                                                                      + ++++ ", 
+  "                                                                                                                     + +  +  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-498-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-498-100-2.0-grid-reference.json
new file mode 100644
index 0000000..3a44d25
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-498-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "6", 
+  "7", 
+  "9", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                      !! !!                                                                  ", 
+  "                                                       ! !                                                                   ", 
+  "                                                        !                #                 $                     %           ", 
+  "     &  &           ' ''                               !!!      #  #     #        $  $     $       %  % %  %  %  %           ", 
+  "     & &            ' '                                ! !       ###     #         $$$     $       %%%   %%%  %%%%           ", 
+  "      &            ' '         (           )       )  ! ! !      ## #    #       $ $$      $ *      %%   %%    %%%    +      ", 
+  "     &&&            '''                   )  )     )             ##      #         $$      $        %%   %%   %%%%           ", 
+  "     & &            ' '                    ))      )            #  #     #        $  $     $       % %% %% %  % %%           ", 
+  "    &   &          '   '                   ))  )))))))))        #  ##    #        $  $$    $      %   % %  %%%   %           ", 
+  "                                           ))      )                     #                 $                     %           ", 
+  "                                          )  )     )                                                                         ", 
+  "                                         ))  ))    )                                                                         ", 
+  "                                                   )                                                                         ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                     +  +    ", 
+  "                                                                                                                     +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-499-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-499-100-1.0-grid-reference.json
new file mode 100644
index 0000000..59b79ea
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-499-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                            #                                 !                              ", 
+  "                                                         #  #                                                                ", 
+  "     $ $  $        % %                                  # ####    & &  &           '  '      !!  !    ( (( ((                ", 
+  "      $   $        %%          )   )        *          ###  #      &&  &         ''   '      !!  !     (  (  (        +      ", 
+  "      $$  $        %%          )   )       **               #      &&  &          ''  '      !!  !     ((   ((               ", 
+  "          $                    )   )       ** ****                     &              '          !                           ", 
+  "                              ) )  )       *                                                                                 ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                            +  ", 
+  "                                                                                             !!                       ++  +  ", 
+  "                                                                                                                      ++ ++++", 
+  "                                                                                                                       +  +  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-499-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-499-100-2.0-grid-reference.json
new file mode 100644
index 0000000..4d10f54
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-499-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "6", 
+  "7", 
+  "1", 
+  "2", 
+  "9", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                      !!  !                                                                  ", 
+  "                                                       ! !                                                                   ", 
+  "                                                        !                #                 $                                 ", 
+  "     %  %           &  &                               !!!      #  #     #        $  $     $       '  ' '' '' '  '           ", 
+  "     % %            & &                                ! !       # #     #         $$$     $        ''   ' '   ''            ", 
+  "      %            & &         (            )      )  ! ! !       # #    #       $ $$      $ *      ''    '    ''     +      ", 
+  "     %%%            &&&                   )  )     )             ##      #         $$      $        ''   '''   ''            ", 
+  "     % %            & &                    ))      )            ## #     #        $$ $     $       '  '  ' '  '  '           ", 
+  "    %   %          &   &                   ))  )))))))))        #   #    #        $  $$    $      ''  ' '   '''  '           ", 
+  "                                           ))      )                     #                 $                                 ", 
+  "                                          )  )     )                                                                         ", 
+  "                                         ))  ))    )                                                                         ", 
+  "                                                   )                                                                         ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                     +  +    ", 
+  "                                                                                                                      ++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..272429d
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                            #                                !                               ", 
+  "                                                         #  #                                                                ", 
+  "     $ $  $        % %                                  # ####      &  &          ''  '      !          (( (( (              ", 
+  "      $   $        %%          )   )        *          ###  #      & & &         '''  '       !        (( (  ((        +     ", 
+  "      $$  $        %%          )   )       **               #      &&  &          ''  '      !!        (( (((((              ", 
+  "          $                    )   )        * ****                     &              '                       (              ", 
+  "                              ) )  )       *                                                                                 ", 
+  "                                                                                             !!                              ", 
+  "                                                                                              !                              ", 
+  "                                                                                             !!                       ++     ", 
+  "                                                                                                                       + ++++", 
+  "                                                                                                                      +      ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..7692932
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "7", 
+  "1", 
+  "2", 
+  "6", 
+  "9", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                       !  !                                                                  ", 
+  "                                                       ! !                                                                   ", 
+  "                                                        !!                                 #                                 ", 
+  "     $  $           %  %                                !!      && &&             ## ##    #       '  '  '  ' '  '           ", 
+  "     $ $            % %                                ! !       & &               # #     #        '''  ' '   '''           ", 
+  "      $            % %         (            )      )  ! ! !       &  &           #  #      #  *     ''    '    ''      +     ", 
+  "     $$$            %%%                   )  )     )             &&&               ###     #        ''   '''   ''            ", 
+  "     $ $            % %                    )))     )             & &               # #     #       '' '  ' '  '  '           ", 
+  "    $   $          %   %                    )   ))))))))        &   &             #   #    #       '  '''   ' '  ''          ", 
+  "                                           ))      )                                       #                                 ", 
+  "                                          )  )     )                                                                         ", 
+  "                                          )  ))    )                                                                         ", 
+  "                                                   )                                                                         ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                     +  +    ", 
+  "                                                                                                                      +++    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-501-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-501-100-1.0-grid-reference.json
new file mode 100644
index 0000000..9b77ea9
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-501-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                             !!                               ", 
+  "                                                                                              !                               ", 
+  "                                                            #                                ! !                              ", 
+  "                                                        ##  #                                                                 ", 
+  "     $ $  $        % %                                  # #####     &  &          '          ! !       (   (( (               ", 
+  "      $   $        %%          )   )        *           ##  #      &&& &         ' '          !         ( (  ((        +      ", 
+  "      $$  $                    )   )       **               #      &&  &          ''         !!        (( ((  (               ", 
+  "          $                    )   )        * ****                     &                                      (               ", 
+  "                              ) )  )       *                                                                                  ", 
+  "                                                                                             !                                ", 
+  "                                                                                              !                               ", 
+  "                                                                                             !                         +      ", 
+  "                                                                                                                       + ++++ ", 
+  "                                                                                                                      + +     ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-501-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-501-100-2.0-grid-reference.json
new file mode 100644
index 0000000..6017a39
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-501-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "2", 
+  "9", 
+  "6", 
+  "7", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                !                                                             ", 
+  "                                                       !  !     !                                                             ", 
+  "                                                       !!!      !                                                             ", 
+  "              #              $                          !!      !                                                 %           ", 
+  "     #  #     #     $  $     $                          !!      && &&             '' ''            %% %% %  % %% %%           ", 
+  "     # #      #     $$$      $                         ! !!     !& &               ' '              % %  %%%   % %%           ", 
+  "      #       #    $ $       $ (            )      )  !!! !     ! &  &           '  '         *      %    %%    % %    +      ", 
+  "     ###      #     $$$      $            )  )     )            !&&&               '''              %%%   %%   %%%%           ", 
+  "     # #      #     $ $$     $             )))     )             & &               ' '              % %  % %% %% %%           ", 
+  "    #   #     #    $   $     $              )   ))))))))        &   &             '   '            %   %%%  % %   %           ", 
+  "              #              $             ))      )                                                              %           ", 
+  "                                          )) )     )                                                                          ", 
+  "                                          )   )    )                                                                          ", 
+  "                                                   )                                                                          ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                     ++ +     ", 
+  "                                                                                                                      + +     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-502-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-502-100-1.0-grid-reference.json
new file mode 100644
index 0000000..7c7cbe1
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-502-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                              !                               ", 
+  "                                                            #                                ! !                              ", 
+  "                                                        ##  #                                                                 ", 
+  "     $ $  $        % %                                  # #####    &              ' '        ! !       ( ((   (               ", 
+  "      $   $        %%          )   )        *           ##  #      &&&           ' '          !         ( (( (         +      ", 
+  "      $$  $                    ))  )       **               #      &&             ''                   (( (( ((               ", 
+  "          $                    )   )        * ****                                                                            ", 
+  "                              ) )  )       * *                                                                                ", 
+  "                                                                                               !                              ", 
+  "                                                                                              !                            +  ", 
+  "                                                                                             ! !                       ++  +  ", 
+  "                                                                                                                       + ++++ ", 
+  "                                                                                                                      + +  +  ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-502-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-502-100-2.0-grid-reference.json
new file mode 100644
index 0000000..d7af6c1
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-502-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                !                                                             ", 
+  "                                                       !  !     !                                                             ", 
+  "                                                       !!!      !                                                             ", 
+  "              #              $                          !!      !         %                 &                     '           ", 
+  "     #  #     #     $  $     $                          !!      !%  %     %        &  &     &       '  ' '  ' '' ''           ", 
+  "     ###      #     $$$      $                         ! !!     !%%%      %        &&&      &       ' '   '''  ' ''           ", 
+  "      #       #    $ $$      $ (            )      )  !!! !     ! %  %    %      &  &&      & *      '    ''    ' '    +      ", 
+  "     ###      #      $$      $            )) )     )            !%%%      %         &&      &       '''   ''   ''''           ", 
+  "     # ##     #     $ $$     $             )))     )             % %%     %        & &&     &       ' '  '  '  ' ''           ", 
+  "    #   #     #    $   $     $              )   ))))))))        %   %     %       &   &     &      '   ' '  '''   '           ", 
+  "              #              $             )))     )                      %                 &                     '           ", 
+  "                                          )) )     )                                                                          ", 
+  "                                          )   )    )                                                                          ", 
+  "                                                   )                                                                          ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                      + ++    ", 
+  "                                                                                                                      +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-505-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-505-100-1.0-grid-reference.json
new file mode 100644
index 0000000..0fc786d
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-505-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !                                ", 
+  "                                                        ##                                                                     ", 
+  "     $ $  $        % %  %                                # ####    & &              '  '      !         ((( (( (               ", 
+  "      $   $        %%   %      )   )        *   *       ##          &&            ''   '      !!        (( (  ((        +      ", 
+  "      $$  $             %      ))  )        *   *                                  ''  '      !!        (( ((  (               ", 
+  "          $             %      ))  )        * ****                                     '                       (               ", 
+  "                                   )       * *  *                                                                              ", 
+  "                                                                                              !!                               ", 
+  "                                                                                               !                               ", 
+  "                                                                                              !!                       ++      ", 
+  "                                                                                                                        + ++++ ", 
+  "                                                                                                                       + +     ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-505-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-505-100-2.0-grid-reference.json
new file mode 100644
index 0000000..a942312
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-505-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                !                                                              ", 
+  "                                                       !  !     !                                                              ", 
+  "                                                        ! !     !                                                              ", 
+  "              #              $                          !!      !         %                 &                      '           ", 
+  "     #  #     #     $  $     $                          !!      !%  %     %        &  &     &       '  '  '  ' '  ''           ", 
+  "     ###      #     $$$      $                         !! !     ! %%%     %         &&&     &        '''  '''   ''''           ", 
+  "      ##      #    $ $$      $ (            )          ! !!!    ! %% %    %       & &&      &  *      '    ''   '' '    +      ", 
+  "      ##      #      $$      $             ) ))                 ! %%      %         &&      &        ''    ''   '' '           ", 
+  "     # ##     #     $ $$     $             )))                   %  %     %        && &     &       '' '  ' '' '' ''           ", 
+  "    #   #     #    $$  $     $              )   ))))))))         %  %%    %        &  &&    &       '  '''   ' '  ''           ", 
+  "              #              $             )))                            %                 &                      '           ", 
+  "                                           ) ))                                                                                ", 
+  "                                          )   )                                                                                ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                      ++ +     ", 
+  "                                                                                                                       +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-510-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-510-100-1.0-grid-reference.json
new file mode 100644
index 0000000..7ad189d
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-510-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                             #                                                                  ", 
+  "                                                         ##  #                                                                  ", 
+  "       $  $          %  %                                # #####    &              ' '  '      !         (   (( (               ", 
+  "      $   $        %%   %       )            *           ##  #       &&            ''   '      !!        (( (  ((        +      ", 
+  "      $$  $         %%  %       )           **               #      &&              ''  '      !!        (( ((  (               ", 
+  "          $             %       )           ** ****                                     '                       (               ", 
+  "                               ) )          **                                                                                  ", 
+  "                                                                                               !!                               ", 
+  "                                                                                                                             +  ", 
+  "                                                                                               !!                            +  ", 
+  "                                                                                                                         + ++++ ", 
+  "                                                                                                                        + +  +  ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-510-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-510-100-2.0-grid-reference.json
new file mode 100644
index 0000000..282de03
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-510-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                 !                                                              ", 
+  "                                                        !  !     !                                                              ", 
+  "                                                        !!!      !                                                              ", 
+  "              #              $                           !!      !         %                 &                      '           ", 
+  "     #  #     #     $  $     $                           !!      !%  %     %        &  &     &       '  '  '  ' '  ''           ", 
+  "     ###      #      $$      $                          ! !!     !%%%      %         &&      &        ' '  '''   ''''           ", 
+  "      ##      #    $ $$      $  (            )      )  !!! !     ! %% %    %       & &&      &  *      '    ''    ' '    +      ", 
+  "      ##      #      $$      $             )  )     )            ! %%      %         &&      &        ''    ''   '' '           ", 
+  "     # ##     #     $  $     $              ))      )             % %%     %        &  &     &       '' '  ' '' '' ''           ", 
+  "    #   #     #    $$  $$    $              ))  )))))))))        %   %     %       &&  &&    &       '   ''   ' '   '           ", 
+  "              #              $              ))      )                      %                 &                      '           ", 
+  "                                           )  )     )                                                                           ", 
+  "                                          ))  ))    )                                                                           ", 
+  "                                                    )                                                                           ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                        + ++    ", 
+  "                                                                                                                        + +     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-490-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-490-100-1.0-grid-reference.json
new file mode 100644
index 0000000..3673116
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-490-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                           !!                              ", 
+  "                                                                                            !                              ", 
+  "                                                                                           ! !                             ", 
+  "                                                        #                                                                  ", 
+  "     $ $           %  %                                #         & &   &        ' '        ! !        (( (( (           )  ", 
+  "      $           %%% %        *           +          ###         &&   &        ''          !        (  (  (        )   )  ", 
+  "                   %% %       **          ++                     &&    &        ''         !!        ((   ((            )  ", 
+  "                      %       **           +                           &                                                )  ", 
+  "                                          + +                                                                              ", 
+  "                                                                                           !!                              ", 
+  "                                                                                            !                              ", 
+  "                                                                                           !                        ))     ", 
+  "                                                                                                                    )      ", 
+  "                                                                                                                   ) )     ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-490-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-490-100-2.0-grid-reference.json
new file mode 100644
index 0000000..c7a4fc8
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-490-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "1", 
+  "9", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                     !!  !                                                                 ", 
+  "                                                      ! !                                                                  ", 
+  "                          #                       $    !                   %           &                                   ", 
+  "    '' ''          #  #   #                       $   !!!      %  %        %     &  &  &         (  ( (( (( (  (           ", 
+  "     ' '            # #   #                       $   ! !       %%%        %     &&&   &          (((  ( (   ((            ", 
+  "      '           #  #    #    )           $      $  ! ! !      %% %       %    & &&   &    *     ((    (    ((     +      ", 
+  "     '''            ##    #              $$ $     $             %%         %      &&   &          ((   (((   ((            ", 
+  "     ' '           ## #   #               $$$     $            %  %        %     & &&  &         (  (  ( (  (  (           ", 
+  "    '   '          #   #  #                $      $           %%  %%       %    &   &  &        ((  (((   (((  (           ", 
+  "                          #               $$$     $                        %           &                                   ", 
+  "                                         $$ $                                                                              ", 
+  "                                         $   $                                                                             ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                           ", 
+  "                                                                                                                   +  +    ", 
+  "                                                                                                                   +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-495-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-495-100-1.0-grid-reference.json
new file mode 100644
index 0000000..1d29a92
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-495-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                            !!                              ", 
+  "                                                                                             !                              ", 
+  "                                                                                            ! !                             ", 
+  "                                                       ##                                                                   ", 
+  "     $ $  $        %  %                        &        #         '              (  (       !          )) )) )           *  ", 
+  "      $   $       % % %        +           &   &       ##         '''           ( ( (        !        )  )  ))       *   *  ", 
+  "          $        %% %        +           &&  &                  ''             (( (       !!        ))   )))           *  ", 
+  "          $           %        +           &   &                                    (                        )           *  ", 
+  "                              + +         & &                                                                               ", 
+  "                                                                                            !!                              ", 
+  "                                                                                             !                              ", 
+  "                                                                                            !                        **     ", 
+  "                                                                                                                     **     ", 
+  "                                                                                                                      *     ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-495-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-495-100-2.0-grid-reference.json
new file mode 100644
index 0000000..bd7bbda
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-495-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "2", 
+  "4", 
+  "7", 
+  "1", 
+  "6", 
+  "9", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                      !  !                                                                  ", 
+  "                                                       !!!                                                                  ", 
+  "                          #                        $   !!      !                        %                                   ", 
+  "     & &&          ## ##  #                        $   !!      !'  '              % %%  %         (  (  ( (( (  (           ", 
+  "     & &            # #   #                        $  !! !     !'''               % %   %          (((  ( (   (((           ", 
+  "      &           #  #    #    )           $       $  ! !!     ! '' '           %  %    %    *     ((    (    ((     +      ", 
+  "     &&&            ###   #               $  $     $           ! ''               %%%   %          ((   (((   ((            ", 
+  "     & &            # #   #               $$$      $           !' ''              % %   %         (  (  ( (  (  (           ", 
+  "    &   &          #   #  #                $       $           '   '             %   %  %         (  (((   ( (  ((          ", 
+  "                          #               $$$      $           !                        %                                   ", 
+  "                                          $ $$                                                                              ", 
+  "                                         $   $                                                                              ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                            ", 
+  "                                                                                                                    +  +    ", 
+  "                                                                                                                     ++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-497-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-497-100-1.0-grid-reference.json
new file mode 100644
index 0000000..e6cc450
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-497-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !                               ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                       ##                                                                    ", 
+  "     $ $  $        % %                         &        #         ' '   '        ( (        ! !  !    ) )))) )               ", 
+  "      $   $        %%          *           &   &       ##          ''   '        ((          !   !     ) )) ))        +      ", 
+  "          $        %%          *           &&  &                  ''    '                        !    )) )) ))               ", 
+  "          $                    *           &   &                        '                        !           )               ", 
+  "                              * *           &                                                                                ", 
+  "                                                                                              !                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                                                                                      +      ", 
+  "                                                                                                                     + +     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-497-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-497-100-2.0-grid-reference.json
new file mode 100644
index 0000000..867c8e3
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-497-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "1", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                      !  !!                                                                  ", 
+  "                                                       ! !                                                                   ", 
+  "                          #                        $    !      !            %           &                        '           ", 
+  "     (  (          ## ##  #                        $   !!      !%  %        %     &  &  &         '' '' '  ' '' ''           ", 
+  "     ( (            # #   #                        $   ! !     ! %%         %      &&   &          ' '   ''   ' ''           ", 
+  "      (            # #    #    )           $       $  ! !!!    ! %% %       %    & &&   &    *      '    ''    ' '    +      ", 
+  "     (((            ###   #               $  $     $           ! %%         %      &&   &          '''   ''   ''''           ", 
+  "     ( (            # #   #                $$      $           !%  %        %     &  &  &          ' '  '  '  ' ''           ", 
+  "    (   (          #   #  #                $$      $           %%  %        %    &&  &  &         '   '''  '''   '           ", 
+  "                          #                $$      $           !            %           &                        '           ", 
+  "                                          $  $                                                                               ", 
+  "                                         $   $                                                                               ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                    ++ +     ", 
+  "                                                                                                                     + +     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-498-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-498-100-1.0-grid-reference.json
new file mode 100644
index 0000000..50d2990
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-498-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                            ! !                              ", 
+  "                                                       #                                                                     ", 
+  "     $ $  $        % %                         &        #         ' '   '        ( (          !  !    ) ))  ))            *  ", 
+  "      $   $        %%          +           &   &       ###         ''   '        ((          !   !     )  ) ))        *   *  ", 
+  "      $$  $        %%          +           &&  &                        '         ((         !!  !       )) ))            *  ", 
+  "          $                    +           &&  &                        '                        !                        *  ", 
+  "                              + +           &                                                                                ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                              !                       **     ", 
+  "                                                                                                                      *      ", 
+  "                                                                                                                     * *     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-498-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-498-100-2.0-grid-reference.json
new file mode 100644
index 0000000..42eff4b
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-498-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "1", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                      !! !!                                                                  ", 
+  "                                                       ! !                                                                   ", 
+  "                          #                        $    !                   %           &                        '           ", 
+  "     (  (           # ##  #                        $   !!!      %  %        %     &  &  &          '  ' '  '  '  '           ", 
+  "     ( (            # #   #                        $   ! !       %%%        %      &&&  &          '''   '''  ''''           ", 
+  "      (            # #    #    )           $       $  ! ! !      %% %       %    & &&   &    *      ''   ''    '''    +      ", 
+  "     (((            ###   #               $  $     $             %%         %      &&   &           ''   ''   ''''           ", 
+  "     ( (            # #   #                $$      $            %  %        %     &  &  &          ' '' '' '  ' ''           ", 
+  "    (   (          #   #  #                $$      $            %  %%       %     &  && &         '   ' '  '''   '           ", 
+  "                          #                $$      $                        %           &                        '           ", 
+  "                                          $  $                                                                               ", 
+  "                                         $$  $$                                                                              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                     +  +    ", 
+  "                                                                                                                     +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-499-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-499-100-1.0-grid-reference.json
new file mode 100644
index 0000000..a1d6bca
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-499-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                              !                              ", 
+  "                                                         #                                                                   ", 
+  "     $ $  $        % %             &                    #   #     ' '   '          (         !!  !    ) )) ))             *  ", 
+  "      $   $        %%          &   &        +          ###  #      ''   '        ((          !!  !     )  )  )        *   *  ", 
+  "      $$  $        %%          &   &       ++               #      ''   '         ((         !!  !     ))   ))            *  ", 
+  "          $                    &   &       ++               #           '                        !                        *  ", 
+  "                              & &          +                                                                                 ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                                                             !!                       **     ", 
+  "                                                                                                                      **     ", 
+  "                                                                                                                       *     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-499-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-499-100-2.0-grid-reference.json
new file mode 100644
index 0000000..0247e56
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-499-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "2", 
+  "4", 
+  "6", 
+  "1", 
+  "7", 
+  "9", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                      !!  !                                                                  ", 
+  "                                                       ! !                                                                   ", 
+  "                          #                        $    !                   %                                                ", 
+  "     &  &           #  #  #                        $   !!!      %  %        %     '  '             (  ( (( (( (  (           ", 
+  "     & &            # #   #                        $   ! !       % %        %      '''              ((   ( (   ((            ", 
+  "      &            # #    #    )            $      $  ! ! !       % %       %    ' ''        *      ((    (    ((     +      ", 
+  "     &&&            ###   #               $  $     $             %%         %      ''               ((   (((   ((            ", 
+  "     & &            # #   #                $$      $            %% %        %     '' '             (  (  ( (  (  (           ", 
+  "    &   &          #   #  #                $$      $            %   %       %     '  ''           ((  ( (   (((  (           ", 
+  "                          #                $$      $                        %                                                ", 
+  "                                          $  $                                                                               ", 
+  "                                         $$  $$                                                                              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                     +  +    ", 
+  "                                                                                                                      ++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..9e11775
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !!                              ", 
+  "                                                                                             !                               ", 
+  "                                                         #                                                                   ", 
+  "     $ $  $        % %             &                    #   #       '             (( (       !          )) )) )              ", 
+  "      $   $        %%          &   &        *          ###  #      ' '           ((( (        !        )) )  ))        +     ", 
+  "      $$  $        %%          &   &       **               #      ''             (( (       !!        )) )))))              ", 
+  "          $                    &   &        *               #                        (                        )              ", 
+  "                              & &          *                                                                                 ", 
+  "                                                                                             !!                              ", 
+  "                                                                                              !                              ", 
+  "                                                                                             !!                       ++     ", 
+  "                                                                                                                       +     ", 
+  "                                                                                                                      +      ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..92372b7
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "2", 
+  "4", 
+  "6", 
+  "1", 
+  "7", 
+  "9", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                       !  !                                                                  ", 
+  "                                                       ! !                                                                   ", 
+  "                          #                        $    !!                  %                                                ", 
+  "     &  &           #  #  #                        $    !!      %% %%       %     '' ''            (  (  (  ( (  (           ", 
+  "     & &            # #   #                        $   ! !       % %        %      ' '              (((  ( (   (((           ", 
+  "      &            # #    #    )            $      $  ! ! !       %  %      %    '  '         *     ((    (    ((      +     ", 
+  "     &&&            ###   #               $  $     $             %%%        %      '''              ((   (((   ((            ", 
+  "     & &            # #   #                $$$     $             % %        %      ' '             (( (  ( (  (  (           ", 
+  "    &   &          #   #  #                 $      $            %   %       %     '   '            (  (((   ( (  ((          ", 
+  "                          #                $$      $                        %                                                ", 
+  "                                          $  $                                                                               ", 
+  "                                          $  $$                                                                              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                     +  +    ", 
+  "                                                                                                                      +++    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-501-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-501-100-1.0-grid-reference.json
new file mode 100644
index 0000000..74c8f8e
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-501-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "4", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                             !!                               ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                        ##                                                                    ", 
+  "     $ $  $        % %             &                    #   #       '             (  (       ! !       )   )) )               ", 
+  "      $   $        %%          &   &        *           ##  #      '''           ( ( (        !         ) )  ))        +      ", 
+  "      $$  $                    &   &       **               #      ''             (( (       !!        )) ))  )               ", 
+  "          $                    &   &        *               #                        (                        )               ", 
+  "                              & &          *                                                                                  ", 
+  "                                                                                             !                                ", 
+  "                                                                                              !                               ", 
+  "                                                                                             !                         +      ", 
+  "                                                                                                                       +      ", 
+  "                                                                                                                      + +     ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-501-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-501-100-2.0-grid-reference.json
new file mode 100644
index 0000000..834cc57
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-501-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                       !  !                                                                   ", 
+  "                                                       !!!                                                                    ", 
+  "              #           $                        %    !!      !           &            '                        (           ", 
+  "     #  #     #     $  $  $                        %    !!      && &&       &     '' ''  '         (( (( (  ( (( ((           ", 
+  "     # #      #     $$$   $                        %   ! !!     !& &        &      ' '   '          ( (  (((   ( ((           ", 
+  "      #       #    $ $    $    )            %      %  !!! !     ! &  &      &    '  '    '    *      (    ((    ( (    +      ", 
+  "     ###      #     $$$   $               %  %     %            !&&&        &      '''   '          (((   ((   ((((           ", 
+  "     # #      #     $ $$  $                %%%     %            !& &        &      ' '   '          ( (  ( (( (( ((           ", 
+  "    #   #     #    $   $  $                 %      %            &   &       &     '   '  '         (   (((  ( (   (           ", 
+  "              #           $                %%      %            !           &            '                        (           ", 
+  "                                          %% %                                                                                ", 
+  "                                          %   %                                                                               ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                     ++ +     ", 
+  "                                                                                                                      + +     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-502-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-502-100-1.0-grid-reference.json
new file mode 100644
index 0000000..867ced4
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-502-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                              ", 
+  "                                                        ##                                                                    ", 
+  "     $ $  $        % %             &                    #   #      '              ( ((       ! !       ) ))   )            *  ", 
+  "      $   $        %%          &   &        +           ##  #      '''           ( ( (        !         ) )) )         *   *  ", 
+  "      $$  $                    &&  &       ++               #      ''             (( (                 )) )) ))            *  ", 
+  "          $                    &   &        +               #                        (                                     *  ", 
+  "                              & &          + +                                                                                ", 
+  "                                                                                               !                              ", 
+  "                                                                                              !                               ", 
+  "                                                                                             ! !                       **     ", 
+  "                                                                                                                       *      ", 
+  "                                                                                                                      * *     ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-502-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-502-100-2.0-grid-reference.json
new file mode 100644
index 0000000..351d1df
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-502-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "2", 
+  "4", 
+  "7", 
+  "9", 
+  "6", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                       !  !                                                                   ", 
+  "                                                       !!!                                                                    ", 
+  "              #           $                        %    !!      !                        &                        '           ", 
+  "     #  #     #     $  $  $                        %    !!      !(  (              &  &  &          '  ' '  ' '' ''           ", 
+  "     ###      #     $$$   $                        %   ! !!     !(((               &&&   &          ' '   '''  ' ''           ", 
+  "      #       #    $ $$   $    )            %      %  !!! !     ! (  (           &  &&   &    *      '    ''    ' '    +      ", 
+  "     ###      #      $$   $               %% %     %            !(((                &&   &          '''   ''   ''''           ", 
+  "     # ##     #     $ $$  $                %%%     %            !( ((              & &&  &          ' '  '  '  ' ''           ", 
+  "    #   #     #    $   $  $                 %      %            (   (             &   &  &         '   ' '  '''   '           ", 
+  "              #           $                %%%     %            !                        &                        '           ", 
+  "                                          %% %                                                                                ", 
+  "                                          %   %                                                                               ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                              ", 
+  "                                                                                                                      + ++    ", 
+  "                                                                                                                      +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-505-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-505-100-1.0-grid-reference.json
new file mode 100644
index 0000000..08a271f
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-505-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "6", 
+  "7", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !!                               ", 
+  "                                                                                              !                                ", 
+  "                                                        ##                                                                     ", 
+  "     $ $  $        % %             &            '        #         ( (   (          )         !         *** ** *               ", 
+  "      $   $        %%          &   &        '   '       ##          ((   (        ))          !!        ** *  **        +      ", 
+  "      $$  $                    &&  &        '   '                        (         ))         !!        ** **  *               ", 
+  "          $                    &&  &        '   '                        (                                     *               ", 
+  "                                           ' '                                                                                 ", 
+  "                                                                                              !!                               ", 
+  "                                                                                               !                               ", 
+  "                                                                                              !!                       ++      ", 
+  "                                                                                                                        +      ", 
+  "                                                                                                                       + +     ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-505-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-505-100-2.0-grid-reference.json
new file mode 100644
index 0000000..cf36489
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-505-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "9", 
+  "7", 
+  "3", 
+  "4", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                       !  !                                                                    ", 
+  "                                                        ! !                                                                    ", 
+  "              #           $                             !!      !            %                                     &           ", 
+  "     #  #     #     $  $  $                             !!      !%  %        %     '  '             &  &  &  & &  &&           ", 
+  "     ###      #     $$$   $                            !! !     ! %%%        %      '''              &&&  &&&   &&&&           ", 
+  "      ##      #    $ $$   $    (            )          ! !!!    ! %% %       %    ' ''         *      &    &&   && &    +      ", 
+  "      ##      #      $$   $                ) ))                 ! %%         %      ''               &&    &&   && &           ", 
+  "     # ##     #     $ $$  $                )))                  !%  %        %     '' '             && &  & && && &&           ", 
+  "    #   #     #    $$  $  $                 )                   !%  %%       %     '  ''            &  &&&   & &  &&           ", 
+  "              #           $                )))                  !            %                                     &           ", 
+  "                                           ) ))                                                                                ", 
+  "                                          )   )                                                                                ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                               ", 
+  "                                                                                                                      ++ +     ", 
+  "                                                                                                                       +++     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-510-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-510-100-1.0-grid-reference.json
new file mode 100644
index 0000000..9957b50
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-510-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "8", 
+  "5", 
+  "1", 
+  "2", 
+  "6", 
+  "7", 
+  "9", 
+  "10", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                               !!                               ", 
+  "                                                                                               !!                               ", 
+  "                                                                                                                                ", 
+  "                                                         ##                                                                     ", 
+  "       $  $          %                                   #   #      &              ' '         !         (   (( (            )  ", 
+  "      $   $        %%           *            +           ##  #       &&            ''          !!        (( (  ((        )   )  ", 
+  "      $$  $         %%          *           ++               #      &&              ''         !!        (( ((  (            )  ", 
+  "          $                     *           ++               #                                                  (            )  ", 
+  "                               * *          ++                                                                                  ", 
+  "                                                                                               !!                               ", 
+  "                                                                                                                                ", 
+  "                                                                                               !!                               ", 
+  "                                                                                                                         )      ", 
+  "                                                                                                                        ) )     ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-510-100-2.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-510-100-2.0-grid-reference.json
new file mode 100644
index 0000000..4eff3aa
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-510-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "5", 
+  "1", 
+  "4", 
+  "7", 
+  "9", 
+  "2", 
+  "6", 
+  "3", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                        !  !                                                                    ", 
+  "                                                        !!!                                                                     ", 
+  "              #                                     $    !!      !                        %                         &           ", 
+  "     #  #     #     '  '                            $    !!      !(  (              %  %  %          &  &  &  & &  &&           ", 
+  "     ###      #      ''                             $   ! !!     !(((                %%   %           & &  &&&   &&&&           ", 
+  "      ##      #    ' ''         )            $      $  !!! !     ! (( (            % %%   %     *      &    &&    & &    +      ", 
+  "      ##      #      ''                    $  $     $            ! ((                %%   %           &&    &&   && &           ", 
+  "     # ##     #     '  '                    $$      $            !( ((              %  %  %          && &  & && && &&           ", 
+  "    #   #     #    ''  ''                   $$      $            (   (             %%  %% %          &   &&   & &   &           ", 
+  "              #                             $$      $            !                        %                         &           ", 
+  "                                           $  $                                                                                 ", 
+  "                                          $$  $$                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                        + ++    ", 
+  "                                                                                                                        + +     "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-100-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-100-100-1.0-grid-reference.json
index d250023..c3057f4 100644
--- a/tests/visual_tests/grids/simple-100-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-100-100-1.0-grid-reference.json
@@ -1,14 +1,13 @@
 {
  "keys": [
   "", 
-  "2", 
-  "5", 
-  "8", 
   "1", 
+  "6", 
   "9", 
-  "10", 
   "3", 
-  "7"
+  "2", 
+  "7", 
+  "10"
  ], 
  "data": {}, 
  "grid": [
@@ -19,19 +18,19 @@
   "                         ", 
   "                         ", 
   "                         ", 
-  " !!! !!!!                ", 
-  "   !  !   ####   $$$$$   ", 
-  "                         ", 
+  "    !!  !!               ", 
+  "!  !!!  !!  ## #   $$ $$ ", 
   "                         ", 
-  "   %%                    ", 
-  " %   %% %%% %% %%%%  &  '", 
-  "     %  %   %   %%       ", 
-  "      % %    %    %      ", 
   "                         ", 
+  "        %%    %  %       ", 
+  " !  & %   %%%%%% %%%%%%%%", 
+  "             %%  %  %%   ", 
+  "           % %          %", 
   "                         ", 
-  " (( (((( (((  ))))))     ", 
-  " (((( (((  ((            ", 
   "                         ", 
+  " &&& && && &  '''''   (( ", 
+  "&&&  & &&&&              ", 
+  "&& & &&&  &&             ", 
   "                         ", 
   "                         ", 
   "                         ", 
diff --git a/tests/visual_tests/grids/simple-100-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-100-100-2.0-grid-reference.json
new file mode 100644
index 0000000..4ae1289
--- /dev/null
+++ b/tests/visual_tests/grids/simple-100-100-2.0-grid-reference.json
@@ -0,0 +1,37 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "10", 
+  "3", 
+  "2"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !!!!  !!   !!!  !!!!!!!!", 
+  "!!!! !! ! !! ! !! !!!!!!!", 
+  "!!!! !! ! !! !    !!!!!!!", 
+  "!!!! !! ! !! ! !!!!!!###!", 
+  " !!!   !! !! !    !!#!!#!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!$$$$$!!!!!!!!$!!", 
+  "!!!!!!!!!!!$!!$$!!!$$!$$$", 
+  "! !!%!$!!!!$!$!!$!$!!!$!!", 
+  "!!!!!!!!!!!$!$$$$!$$$!$!!", 
+  "!!!!!!!!!!!$!$!!!!!!$!$!!", 
+  "!!!!!!!!!!!$!!$$$!$$$!!$$", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!%!!!!!%!!!!!!!!!!!!!!!!!", 
+  "%%%!!!%%%%!!%!%!!%%%!!!!!", 
+  "!%!!!!!%!!%%%!%!%!!%!!!!!", 
+  "!%!!!!!%!!%%!%%!%!!%!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-150-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-150-100-1.0-grid-reference.json
index 8b25d98..9400a02 100644
--- a/tests/visual_tests/grids/simple-150-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-150-100-1.0-grid-reference.json
@@ -1,14 +1,15 @@
 {
  "keys": [
   "", 
-  "2", 
-  "7", 
-  "4", 
   "10", 
   "1", 
   "6", 
+  "4", 
   "3", 
-  "8"
+  "9", 
+  "2", 
+  "5", 
+  "7"
  ], 
  "data": {}, 
  "grid": [
@@ -18,20 +19,20 @@
   "                                      ", 
   "                                      ", 
   "                                      ", 
-  "                                      ", 
-  "   !!! !!!!         # ### # # #       ", 
-  "     !    !$$ $$    ###  # ###     %%%", 
+  "                             !        ", 
+  "   #   ###        $$$ $ $$   !!! !    ", 
+  " # ##  ### %%  %    $   $    !!!!! !  ", 
   "                                      ", 
   "                                      ", 
-  "   &&&    &           '''    '        ", 
-  "  & & &&&&&& &&&& && ' ' '''''  '  '' ", 
-  "    & &  &&  &&&       '   '''  '  '  ", 
-  "       &&         &      ' '    '     ", 
+  "           &&&      & &          '''  ", 
+  "  #   (  &  &&&&&&& &&&&&&&& && ' ' ''", 
+  "            &&  &   & &&& & &     ''  ", 
+  "              & &          & &      ' ", 
   "                                      ", 
   "                                      ", 
-  " (         (           ) ))) ))))))   ", 
-  " (((((     (   ((((    ))) )  )))     ", 
-  " ( (((((  ((   ((((                   ", 
+  "( (((( ((  ((( )) ))  ******          ", 
+  "(((((  (  ((((                        ", 
+  "(((((( (((( ((                        ", 
   "                                      ", 
   "                                      ", 
   "                                      ", 
diff --git a/tests/visual_tests/grids/simple-150-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-150-100-2.0-grid-reference.json
new file mode 100644
index 0000000..831b840
--- /dev/null
+++ b/tests/visual_tests/grids/simple-150-100-2.0-grid-reference.json
@@ -0,0 +1,38 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "8", 
+  "3", 
+  "2", 
+  "9"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !!!!  !! !  !!   !!!!!!!!!!!!!!!!!!!!", 
+  "!!!!  ! !  ! !  ! !!!!!!!!!!!!!!!!!!!!", 
+  "!!!! !!!  !! !     !!!!!!!!!!!!!!!!!!!", 
+  "!!!! !! ! !! ! !!!!!!!!!###!#!!##!#!!!", 
+  " !!!!   ! !! !!   !!!!!!!!!!#####!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!$$$$$!!!!!!!!$!!!!!$!!$!!!", 
+  "!!!!!!!!!!!!!!$!!$$!!!$$!$$$!!!$$$$!$$", 
+  "!! !!!%!!$!!!!$!$!!$!$!!!$!!!!!$!!$$!$", 
+  "!!!!!!!!!!!!!!$!$$$$!$$$!$!!!!!$!!$!!$", 
+  "!!!!!!!!!!!!!!$!$!!!!!!!$$!!!!!$!!$!!$", 
+  "!!!!!!!!!!!!!!$!!$$$!$$$!!$$!!!$$$$!!$", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!%!!!!%!!!!!!!!!!!!!!!!!!&&&&&!&&&&&", 
+  "%%%%%!!!%%%%!!%!%!!%%!!!!!!&&&&&!&&!&&", 
+  "!!!%!!!!%!!!%%%!%!%!!%!!!!!!!!!!!!!!!!", 
+  "%%!%!!!!%!!!%%!!%!%!!%!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-250-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-250-100-1.0-grid-reference.json
index f52fcbd..0f38781 100644
--- a/tests/visual_tests/grids/simple-250-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-250-100-1.0-grid-reference.json
@@ -1,15 +1,15 @@
 {
  "keys": [
   "", 
-  "2", 
-  "5", 
+  "4", 
   "8", 
-  "10", 
   "1", 
-  "4", 
-  "7", 
-  "3", 
   "6", 
+  "10", 
+  "3", 
+  "7", 
+  "2", 
+  "5", 
   "9"
  ], 
  "data": {}, 
@@ -20,20 +20,20 @@
   "                                                               ", 
   "                                                               ", 
   "                                                               ", 
-  "        !  !         #     #  #             $        $ $       ", 
-  "    !!! !  ! !!  !   # ### #  #######   $$$$$  $$ $ $$$$       ", 
-  "    !!!!!! ! !! !!   # ###### ## ####   $$$$ $ $$  $$$$ $ %%%% ", 
-  "                                                   $           ", 
+  "                    !  !              #     #        #         ", 
+  "$   $ $$$$$$    !!! !  !! ! !!        ##### #  #### ##         ", 
+  "$ $  $$$  $$    !!!!!! !!! !!!   %%%% # #####  ### ###  #&&&&& ", 
+  "                                                   #           ", 
   "                                                               ", 
-  "     &&                '''    '  '        (((    (             ", 
-  "   &   &&&&&& &&&& && ' ' '''''' '''' '''( ( (((((  ( (((((((( ", 
-  "       &  &&  & & &&    ' '  ''  '' ' ''   (   (((  (   ((( ( (", 
-  "        & &    &    &      ''      ' '       ( (    ( (    (   ", 
+  "                 '''        '             (((                  ", 
+  "   $     )      ' ''' ' ' '''' ''' ''    ( ((( ( (  ( (((  ((((", 
+  "                  ''  '     '   '          ((  (    (   (((  ((", 
+  "                    ' '          ' '                           ", 
   "                                                               ", 
   "                                                               ", 
-  "       )     )   )          *     *                +           ", 
-  "       ) ))) )   )  ))))))  * *** *  * ***     +++++  +    +++ ", 
-  "       ) )))))  ))   )) ))  * ****** *****     ++++ + +    +++ ", 
+  "  ) ) )))  ))   )    *                             +           ", 
+  "  ))))) )  ) )   )   *** *     ******         ++++ +  ++   +++ ", 
+  "  ) )))))  ) )) ))   *** * *   * * **          ++++++ ++   +++ ", 
   "                                                               ", 
   "                                                               ", 
   "                                                               ", 
diff --git a/tests/visual_tests/grids/simple-250-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-250-100-2.0-grid-reference.json
new file mode 100644
index 0000000..f7625c8
--- /dev/null
+++ b/tests/visual_tests/grids/simple-250-100-2.0-grid-reference.json
@@ -0,0 +1,42 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "5", 
+  "7", 
+  "9", 
+  "3", 
+  "10", 
+  "2", 
+  "6", 
+  "8"
+ ], 
+ "data": {}, 
+ "grid": [
+  "   !!!!  !!   !!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!! !  ! !  ! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!! !! ! !!      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!! !! ! !! ! !!!!!!!!###!##!#!!!$$$!$!$!!$$!%%!%%!%%%!%!!!!", 
+  "   !!!   !! !! !    !!!!#!!#!#####!!!!$!!$!$!!$!%%%%!!!%%!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!&&&&&&!!!!!!!!&!!!!&!!!&!!!!!!!!!!!!!!!!!!!!'", 
+  "!!!!!!!!!!!!!!!!!!!!&!!!&&!!&&&&&&!!!&&&!&&&!!&&!!&&!!!&&!!!!!!", 
+  "!!! !!!!!(!!!!!!&!!!&!!&!&!&!!!!&!!!!&!!!&!&!!&!!&!&&!&!&&!'!!!", 
+  "!!!!!!!!!!!!!!!!!!!!&!&&&&&!&&!!&!!!!&!!!&!&!!&!&&&&&&&&&&!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!&!&&!!!!!!&!&!!!!&!!!&!&!!&!!&!!!&&!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!&!!&&&!&&&&!&&!!!!&&!&!&!!&!!&&&&!&&&!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!(!!!!(!!!!!!!!!!!!!!!!!!))))!)))!!!****!*!****!!!!!!!!!!", 
+  "(!(((!(((!!!((((!((!(!(((!!!!!!))))!)))!!!****!*!**!*!!!!!!!!!!", 
+  "(!(!!!!(!!!!(!!(!((!(!(!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "(!!((!!(!!!!(!!!(((((!(!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-300-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-300-100-1.0-grid-reference.json
index 3bf047b..c03601a 100644
--- a/tests/visual_tests/grids/simple-300-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-300-100-1.0-grid-reference.json
@@ -1,16 +1,16 @@
 {
  "keys": [
   "", 
-  "2", 
-  "5", 
-  "8", 
-  "10", 
   "1", 
   "4", 
   "7", 
+  "10", 
   "3", 
   "6", 
-  "9"
+  "9", 
+  "2", 
+  "5", 
+  "8"
  ], 
  "data": {}, 
  "grid": [
@@ -20,21 +20,21 @@
   "                                                                           ", 
   "                                                                           ", 
   "                                                                           ", 
-  "    !     !  !             #                    $             $            ", 
-  "    ! !!! !  !!!   !       #####      ####      $$$$$   $$$  $$    % %%% %%", 
-  "    ! !!!!!! ! !! !!       # #####    # ##      $ $$$$$  $$ $$$  $ %%  % % ", 
-  "                                                            $$             ", 
+  "  !                #       #           $     $                        %  % ", 
+  "! !  !   !!!       #####   #  ##       $$$$$ $  $ $$   $$$        %%% %  % ", 
+  "!!!! !!  !!!       ##### # # ####      $ $$$$$  $$$$ $ $$$        %%%%%% %%", 
   "                                                                           ", 
-  "     &&&    &               ''        '           (((    (                 ", 
-  "    & & &&&&&  &&&& &&    '   '' ''' '''' '''    ( ( (((((  (((((((( ((%   ", 
-  "      &    &&   && &          '  '   '' ' ''       (    ((  ((  (((   (    ", 
-  "        &&&    &    &          ' '     ' '           (((    ( ((   (       ", 
   "                                                                           ", 
+  "                    &&&    &   &           ''    '    '          (((    (  ", 
+  "    !      )       & &&& & &  &&& &&& && '   '''''' ''''        ( ((( ( (  ", 
+  "                     &&  &&&   &   &            ''   '' '         ((  (((  ", 
+  "                       & &          &  &      ' '   ''              ( (    ", 
   "                                                                           ", 
-  "          )     )  ))              *     *              +     +            ", 
-  "          ) ))) )  )) )))))))      * *** *  *  *        + +++ +  ++++  ++  ", 
-  "          ) )))))) )) )))))))      * *****  ** **       + +++++   +++  ++  ", 
   "                                                                           ", 
+  "    ) ) ) )  )))  )             *  *                          +  +         ", 
+  "    ))))) )   )))) )        *** *  *  ****       +++    ++   ++ ++         ", 
+  "    ))) )))  )  ) ))        ****** *  * **       ++++ + ++  +++ ++         ", 
+  "                                                            ++             ", 
   "                                                                           ", 
   "                                                                           ", 
   "                                                                           ", 
diff --git a/tests/visual_tests/grids/simple-300-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-300-100-2.0-grid-reference.json
new file mode 100644
index 0000000..b1a0c28
--- /dev/null
+++ b/tests/visual_tests/grids/simple-300-100-2.0-grid-reference.json
@@ -0,0 +1,42 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "10", 
+  "6", 
+  "4", 
+  "3", 
+  "9", 
+  "2", 
+  "5", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "   !!!!  !! !  !!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!##!!###!###!!#", 
+  "! !!!!  ! !  ! ! !! !!!!!!!!!!!!$$$$!!!!!!!!!!!$!!!!!!!!!!#!#!!#!#!!!#!!!!!", 
+  "! !!!! !! ! !! !    !!!!!!!!!!!!!!!$$!$$$$!!$$!$$!$!!!!!!!#!####!###!#!!!!!", 
+  "! !!!! !! ! !! ! !!!!!!%%%!%%%%%!!!$$$$$!!!!$$!$!$!!!!!!!!#!#!!!!!!#!#!!!!!", 
+  "!  !!!!   ! !! !!   !!%!!%!%!%%%!!!$$!$$!$!!$$!$$!$!!!!!!!#!####!###!###!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!&&&&&&!!!!!!!!&!!!!!&!!&!!!!!!!!!!!!!!!!!!!!!''''''!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!&!!&&!!&&&&&&!!!&&&!&&&!!&&&!&&!!!&&!!!!!!!!!'!!''!", 
+  "!!!! !!!!!!(!!!!!!!&!!!!&!&!!&&!!!!&!!!!!&!!&!&&!&!!&!!&!&!!&!!!'!!!!'!'!!'", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!&&&&&&!&&!!&!!!!!&!!&!!&!&!!&&&&&&&&&!!!!!!!!''''''", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!&!&!!!!!!&!&!!!!!&!!&!!&!&!!&!!!!&!!!!!!!!!!!'!'!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!&!&&&&&&&&!&&!!!!&&!&!!&!&!!&&&&!&&&&!!!!!!!!'!''''", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!(!!!!!(!!!!!!!!!!!!!!))!))!))))!!!!******!******!!!!!!!!!!!!!!!!!!!", 
+  "(((!(((!(((!!!((((!((!(!(((!!)))))!!!!)!!!!***!*****!***!!!!!!!!!!!!!!!!!!!", 
+  "!!(!(!!!(!!!!!(!!(!((!(!(!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "(((!(((!(!!!!!(!!(!(((!(!!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-400-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-400-100-1.0-grid-reference.json
index b88c666..79dbdbf 100644
--- a/tests/visual_tests/grids/simple-400-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-400-100-1.0-grid-reference.json
@@ -1,16 +1,16 @@
 {
  "keys": [
   "", 
+  "3", 
+  "5", 
+  "7", 
+  "9", 
+  "1", 
   "2", 
   "4", 
   "6", 
   "8", 
-  "10", 
-  "1", 
-  "3", 
-  "5", 
-  "7", 
-  "9"
+  "10"
  ], 
  "data": {}, 
  "grid": [
@@ -20,21 +20,21 @@
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
-  "        !     !             #                    $                               %                  ", 
-  "        ! !!! !   !!!! !    #####      ####      $$$$$    $  $      %% %   %% % %%         && &&&& &", 
-  "        ! !!!!!  !! !!!     ##### #   #####      $ $$$$$ $$   $     %%%% % %%  %%%  %      &&&& &&& ", 
-  "                                                                               %                    ", 
+  "                !     !  !!           #                      $               %     %                ", 
+  "&&&   & &&&&&&  !!!!! !  !! !!!!!!!   #####     ######   $$$ $  $ $$  $$$  $ %%%%% %  %%%  %%%      ", 
+  "&&& & && &&&&   ! !!!!!  !! !! !!!!   ##### #   #####    $$$$$$ $$$$ $ $$  $ %%%%%%%   %%  %%%      ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "                                                                                                    ", 
+  "     &         '         !         (         #         )         $         *         %         +    ", 
   "                                                                                                    ", 
-  "      '''    '                                                                                      ", 
-  "     '   '''''' '''' ''  (         #         )         $         *         %         +         &    ", 
-  "         '  ''  ' '                                                                                 ", 
-  "          ' '    '   ''                                                                             ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
-  "                      (  (            )     )  )        *                          +                ", 
-  "                  (((((  (  (( ((((   ) ))) )  ))))))   *****    *********     +++ +  +    +++      ", 
-  "                  (((( ( (( (( ((((   ) )))))  )) )))   * ***** ** *** ***     ++++++ +    +++      ", 
   "                                                                                                    ", 
+  "        ' ' ''' ''''' '          (  (            )                      *        *      + + +++  + +", 
+  "        ''' '     ''''       ((( (  (( (((       )))))   )   )      *** *  **   **      +++++ +  +++", 
+  "        ''''' '  '' '''      (((((( ( ((((       ))))) ) ))   )     ****** **  ***  *   + +++++  + +", 
+  "                                                                               *                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
   "                                                                                                    ", 
diff --git a/tests/visual_tests/grids/simple-400-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-400-100-2.0-grid-reference.json
new file mode 100644
index 0000000..9666e8d
--- /dev/null
+++ b/tests/visual_tests/grids/simple-400-100-2.0-grid-reference.json
@@ -0,0 +1,42 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "9", 
+  "4", 
+  "6", 
+  "3", 
+  "7", 
+  "2", 
+  "5", 
+  "8"
+ ], 
+ "data": {}, 
+ "grid": [
+  "    !!!!   !!   !!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!##!!######!!!#!##!!#!###!!!", 
+  "!! !!!!! ! !! ! !! !  !!$$$$!!!!!$!!!$!!!!!!!!%%%!!!!!%!!!!!!!!!!!!!!!#!#!###!!!!#!!!!##!#!!#!#!!#!#", 
+  "!! !!!! !!! ! !!!     !!!!$$$$$$!$!!$$$$$$!$$$!%!%%!%%%%!!%%!!%%!!!!!!######!##!!#!!!!#!!#!!#!#!!#!#", 
+  " ! !!!!  !  ! !!!  !!!!!!!$$$$$$!$!!$!$!$$!$$!!%!%%!%%%!!!%%!!!%!!!!!!#!#!!!!!!#!#!!!!#!!#!!#!#!!#!#", 
+  " !  !!!!   !! !!!!   !!!!!$$$$$$!$!!$!$$$$$$$!!%!%%!%%%%!!%%!!%%!!!!!!#!########!##!!!#!!#!!#!#!!#!#", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!&&&&&!!!!!!!!&!!!!!&!!&!!!!!!!!!!!!!!!!!'''''!!!!!!!!'!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&!!&&!!&&&!&&&!!&&&!&&&!!&&&!&&!!!&&!!!!'!!''!!'''!'''!!!'''!!''!'!!!'", 
+  "!!!!! !!!!!!!!!(!!!!!!!!!&!!!!&!&!!&!&!!!&!!!!!&!!&!!&!&!!&!!&!&!!&!!!'!'!!'!'!!!'!!!!!!!!!'!!'!'!'!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&!&&&&!&&&!&!!!!!&!!&!!&!&!!&&&&!&&&&!!!'!''''!'''!'!!!!!'''!''''!'!'!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&!&!!!!!!&!&!!!!!&!!&!!&!&!!&!!!!&!!!!!!'!'!!!!!!'!'!!!!!!!'!'!!!!!''!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&!&&&&!&&&!&&&!!!&&!&!!&!&!!&&&&!&&&&!!!'!!'''!'''!'''!!''''!''''!!'!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "((((!!!!!!!!(!!!!!(!!!!!!!!!!!!!!!!)))!!!!!)!!!)!!!!!!!!*****!!!!!!!!*!!!!!!!!!!*!!!!!!*!!!!*!!!!!!!", 
+  "!(!!((!!(((!(((!!(((!(!(!!(!(((!!!!!)!!)!!))!!!)!!)!!)!!!!*!!**!!***!***!!!!**!!*!!***!***!!***!!!!!", 
+  "!(!(!!(!(!!!(!!!!!(!!(!(((!(!!(!!!!!))!!!)))!!!)!!))!)!!!!*!*!!*!*!!!*!!!!!*!!*!*!*!!*!*!!*!*!!!!!!!", 
+  "!(!((((!(((!(!!!!!(!!((!((!(!!(!!!!!)!)))))))!!)!!!)!))!!!*!****!***!*!!!!!****!*!*!!*!*!!*!*!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-600-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-600-100-1.0-grid-reference.json
index a6638f2..d7b0248 100644
--- a/tests/visual_tests/grids/simple-600-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-600-100-1.0-grid-reference.json
@@ -20,9 +20,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "      !                      #     #   #                             $                        %                         &                             ", 
-  "  !!!!!  ! ! !!!             # ### #   #   #####              $$ $   $    $$              %%% %  % %%% %%%%%            &&&&&     &&& &&&             ", 
-  "  !!!! ! !!! !!!             # #####  ##   #####              $$$$ $ $  $ $$              %%%%%% %%%% % %% %            & &&&&&   &&&  &&             ", 
+  "!     !                      #       # #                          $  $                  %     %                         &                             ", 
+  "!!!!! !  !!!  !!             #####   # ##  #####              $$$ $  $$   $$            %%% % %  % %%%% %%%             &&&&    &  &&&&&&             ", 
+  "! !!!!!  !!!  !!             ##### # ####  ## ##              $$$$$$ $$ $ $$            %%% %%%  % %% % %%%             &&&&& & &  &&& &&             ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -31,9 +31,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                     '  '                    (     (  (                           )                     *     *          *              +             ", 
-  "                 '''''  '  ''''              ( ((( (  (( ( ((                 ))) )  ) )))              * *** *  ****   **              +++++     +++ ", 
-  "                 '''' ' '''' ''              ( (((((( ((( (((                 )))))) )))))              * *****  *****  **              + +++++  ++++ ", 
+  "                 ' '''' ''  ''               (                              )     )                     *                *              +++ +++ ++++++", 
+  "                 '''''  ' ''  '              ((( (     (   ((               ))))) )  ) )))              *** *   *****   **              +++++   + +++ ", 
+  "                 '''''' ' '' ''              ((( ( (   (( (((               ) )))))  )))))              *** * *  *****  ***             +++++ + +++++ ", 
   "                                                                                                                    **                                ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
diff --git a/tests/visual_tests/grids/simple-600-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-600-100-2.0-grid-reference.json
new file mode 100644
index 0000000..35e7281
--- /dev/null
+++ b/tests/visual_tests/grids/simple-600-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "4", 
+  "7", 
+  "10", 
+  "3", 
+  "6", 
+  "9", 
+  "2", 
+  "5", 
+  "8"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !! !!!    !!  !!!   !!               #  ##  ######   ### ##  #  # # #         $  $$  $$$ $$$   $$$  $$ $   $ $$$ $ $$           %  %%   %% %%%   %%% ", 
+  "!         !  ! !  ! !  !              # #  ##    #     # ## # #  # ##          $ $  $ $   $    $    $  $ $ $ $$ $ $$ $           % %  % %   %     %  %", 
+  "!!!       !  ! !  ! !!!!              # #### ##  #     # #  # #  # #           $ $$$$ $$  $     $$  $$$$ $ $ $$$$$$  $           % %%%% %%% %     %  %", 
+  "   !      !  ! !  ! !                 # #      # #     # #  # #  # #           $ $      $ $       $ $    $ $ $    $  $           % %      %%%     %  %", 
+  "!!!  !!   !!!! !  ! !!!!              # ######## ##    #  ###  ### #           $ $$$$ $$$ $$$  $$$$ $$$$  $   $$$ $  $           %  %%% %%%  %%   %%% ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                        &&&&&         &    &  &                      '''''         '        '                     (((((         (     ", 
+  "                                          &  &&&  && &&&   &&&& && & & &&&  &&&        '  '''  '' '''    '' ' '  ''                 (  (((  (( (((   (", 
+  "       !              )              &    & && & &    &    &  && & &&  & & && &   '    ' '' ' '    '    '   '  ' '             (    ( (( ( (    (    (", 
+  "                                          & &&&&&&&&  &    &  &  & &  &&&&&&&&&&       ' ''''''''  '    ''' '   '                   ( ((((((((  (    (", 
+  "                                          & &       & &    &  &  & &  &    &           ' '       ' '      '''  '''                  ( (       ( (    (", 
+  "                                          &  &&& &&&  &&   &&&&  & &   &&&  &&&        '  ''' '''  ''   ''' ' '' '                  (  ((( (((  ((   (", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "      )))))         )    )                         *****         *     ***                   ++++++        +         +       +    +                   ", 
+  "        )  )))  ))))))   ))))  ) ) )))               *  ***  ** ***   **** *  *  **            +   ++  ++++++    ++  +  +++  +++ +++                  ", 
+  "        ) )  )))    )    )  ) )) ) )  )              * ** * *    *    *  * *  * *  *           +  + +++    +    ++ + + ++ +  + +  +                   ", 
+  "        ) ))))) ))  )    )   ))) ) )  )              * ********  *    *  *  * * ****           + +++++ ++  +    ++++ + +  +  +  + +                   "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-800-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-800-100-1.0-grid-reference.json
index dbd1b4b..f83d6ed 100644
--- a/tests/visual_tests/grids/simple-800-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-800-100-1.0-grid-reference.json
@@ -8,9 +8,9 @@
   "5", 
   "6", 
   "7", 
-  "8", 
   "9", 
-  "10"
+  "10", 
+  "8"
  ], 
  "data": {}, 
  "grid": [
@@ -20,21 +20,21 @@
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
-  "   !     !             #     #                 $  $            %                   &     &  &           '                (                                  )           *                    +  +       ", 
-  "   ! !!! !   !!!!!!    # ### #   #### #    $$$$$  $  $$ $$$$   %%%%%      %%%%     & &&& &  &&&&&&      '''''    '  '    (((((    (((((((((    )) )   )) ) ))       *** *  *    ***      +++ +  ++++++  ", 
-  "   ! !!!!!  !!!!!!!    # #####  ## ###     $$$$ $ $$ $$ $$$$   %%%%% %   %%%%%     & &&&&&  && &&&      ' ''''' ''   '   ( ((((( (( ((( (((    )))) ) ))  )))  )    ****** *    ***      ++++++ + ++ +  ", 
-  "                                                                                                                                                          )                                             ", 
-  "                                                                                                                                                                                                        ", 
-  "                                                                                                                                                                                                        ", 
-  "          !                   #                   $                   %                   &                   '                   (                   )                   *                   +         ", 
-  "                                                                                                                                                                                                        ", 
+  "   !                   #                 $     $  $$                %  %           &                    '                     (                                   )     )              *     *  *       ", 
+  "   !!!!!   ! !!!!!!    ### #     ####    $$$$$ $  $$ $$$$$$$    %%% %  %% %%%      &&&&&     &&&&&&     '''''   '   '     ((( (  ( ((  (((  (                     ))))) )  )))  )))    ***** *  ******  ", 
+  "   !!!!! ! !! !!!!     ##### #  ## ###   $ $$$$$  $$ $$ $$$$    %%%%%% % %%%%      &&&&& &   &&&&&      ''''' ' ''   '    (((((( (((( ( ((  (                     )))))))   ))  )))    * *****  ******  ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
+  "          !                   #                   $                   %                   &                   '                   (                   +                   )                   *         ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                   +        +                                           ", 
+  "                                                                                                                                               +++ +  ++   ++                                           ", 
+  "                                                                                                                                               ++++++ ++  +++  +                                        ", 
+  "                                                                                                                                                          +                                             ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
   "                                                                                                                                                                                                        ", 
diff --git a/tests/visual_tests/grids/simple-800-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-800-100-2.0-grid-reference.json
new file mode 100644
index 0000000..e975e17
--- /dev/null
+++ b/tests/visual_tests/grids/simple-800-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "3", 
+  "5", 
+  "7", 
+  "9", 
+  "2", 
+  "4", 
+  "6", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !!      !!!!   !!   !!!  !!!!!!!#!!##!!######!!!###!###!!###!##!!!##!!!!!!!$!!$$!!$$$!$$$!!$$$$$$!!!$!$$$!!!!!%!!%%!!!%%!%%%!!!!%%!!%%!!%!!%!!%%!!%%%!!!!!&!!&&!!&&&&&&!!!&!&&!!&!&&&!!!&&!!!!!!!!!!!!!", 
+  "! ! !!! !!!!! ! !! ! !! !  !!!!!!#!#!!##!!!!#!!!!!#!!#!##!#!!#!!#!#!!#!!!!!!$!$!!$!$!!!$!!!!!$!!$!$!$!$$!$!!!!!%!%%!%!%!!!!%!!!!%!!!%!!%!%!!%!%!!%!%!!%!!!!&!&!&&&!!!!&!!!!&&!&!!&!&!!&!&!!&!!!!!!!!!!!!", 
+  "  !  !! !!!! !!! ! !!!     !!!!!!#!####!##!!#!!!!!#!!#!!#!#!!####!####!!!!!!$!$$$$!$$$!$!!!!!$!!$!$!$!$$$$$!!!!%!%%%%!%%%!!%!!!!%%%!%%%%!!%!%!%%%%!%!!%!!!!&&&&&&!&&!!&!!!!&!!&!!&!&!!&!&&&&!!!!!!!!!!!!", 
+  "!!!!! ! !!!!  !  ! !!!  !!!!!!!!!#!#!!!!!!#!#!!!!!#!!#!!#!#!!#!!!!#!!!!!!!!!$!$!!!!!!$!$!!!!!$!!$!$!$!$!!!!!!!!%!%!!!!!!!%!%!!!!!!%%%!!!!!%%!!%!!!!%!!%!!!!&!&!!!!!!&!&!!!!&!!&!!&!&!!&!&!!!!!!!!!!!!!!!", 
+  "  !   !  !!!!   !! !!!!   !!!!!!!#!########!##!!!!##!#!!#!#!!####!####!!!!!!$!$$$$!$$$!$$$!!!$!!$!!$!!!$$$!!!!!%!!%%%!%%%!!%%!!!%%%!!%%%!!%%!!%%%%!%!!%!!!!&!&&&&&&&&!&&!!!&!!&!!&!&!!&!&&&&!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!! !!!!!!!!!!!!!!!!!!!'!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!!!!&!!!!!!!!!!!!!!!!!!!+!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!'''''!!!!!!!!'!!!!!'!!!!!!!!!!!!!!!!!!!(((((!!!!!!!!(!!!!!(((!!!!!!!!!!!!!!!!!!!!!)))))!!!!!!!!)!!!!!!!!!)!!!!!!!!!!!*****!!!!!!!!*!!!!!!!!!!*!!!!!!*!!!!*!!!!!!!+++++!!!!!!!!+!!!!!+!!!!!", 
+  "!!!!!!!!!!!!!!!!'!!''!!'''!'''!!'''!'!'!!'!'''!!!!!!!!!(!!((!!!((!(((!!!((!!((!!(!!(!(((!!!!!!!!!!)!!))!!))))))!!!!)))!)!)!!)!!!!!!!!*!!**!!***!***!!!!**!!*!!***!***!!***!!!!!!!+!+++!!++++++!!!+++!+++", 
+  "!!!!!!!!!!!!!!!!'!'!!'!'!!!'!!!!!'!!'!'''!'!!'!!!!!!!!!(!(!!(!(!!!(!!!!!(!!(!((!(!!(!(!!!!!!!!!!!!)!)!!))!!!!)!!!!)!!!!)!)))!!!!!!!!!*!*!!*!*!!!*!!!!!*!!*!*!*!!*!*!!*!*!!!!!!!!!+!+!!++!!!!+!!!!!+!!+!!", 
+  "!!!!!!!!!!!!!!!!'!''''!'''!'!!!!!'!!''!''!'!!'!!!!!!!!!(!((((!(((!(!!!!!(!!(!!(!(!!(!(!!!!!!!!!!!!)!))))!))!!)!!!!!))!!)!!)!!!!!!!!!!*!****!***!*!!!!!****!*!*!!*!*!!*!*!!!!!!!!!+!++++!+++!+!!!!!+!++++"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-E-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-E-500-100-1.0-grid-reference.json
index 8a1b162..a957e13 100644
--- a/tests/visual_tests/grids/simple-E-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-E-500-100-1.0-grid-reference.json
@@ -16,9 +16,9 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
-  "                                                           !!!       !                                                       ", 
-  "                                                        !   ! !!!!! !!  !!!                                                  ", 
-  "                                                            !!  !!     !!!                                                   ", 
+  "                                                           !!!       !!                                                      ", 
+  "                                                        !   !!!!!!! !!!!!!!                                                  ", 
+  "                                                            !!  !     !!!!                                                   ", 
   "                                                              ! !         !                                                  ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/simple-E-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-E-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..b7ab30f
--- /dev/null
+++ b/tests/visual_tests/grids/simple-E-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                             !!!!!!        !     !!!                                         ", 
+  "                                                                !  !!  !!!!!!   !!!! !   ! !!                                ", 
+  "                                                        !       ! !  !!    !     ! ! !  ! !  !                               ", 
+  "                                                                !!!!!! !!  !     ! !  ! ! !!!!                               ", 
+  "                                                                ! !      ! !     ! !  !!  !                                  ", 
+  "                                                                ! !!!!!!!! !!    ! !   !   !!!                               ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-N-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-N-500-100-1.0-grid-reference.json
index b049b10..a96d365 100644
--- a/tests/visual_tests/grids/simple-N-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-N-500-100-1.0-grid-reference.json
@@ -13,9 +13,9 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                !!!    !  !!                                                                 ", 
-  "                                                   !!!!!! !!!  !!                                                            ", 
-  "                                                   !  !!  !! !!                                                              ", 
-  "                                                    ! !        !                                                             ", 
+  "                                                 !!! ! ! !!!!  !!                                                            ", 
+  "                                                 !!  !!!   !!!                                                               ", 
+  "                                                   ! !         !                                                             ", 
   "                                                                                                                             ", 
   "                                                        !                                                                    ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/simple-N-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-N-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..6804954
--- /dev/null
+++ b/tests/visual_tests/grids/simple-N-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                        !!!!!        !     !!!!                                                              ", 
+  "                                          !  !!   !! !!!  !!!!! !  !  !!                                                     ", 
+  "                                          ! !  ! !   !     !  ! !  ! !  !                                                    ", 
+  "                                          ! !!!! !!! !     !  ! ! !  !!!!                                                    ", 
+  "                                          ! !      ! !     !  !  !!  !                                                       ", 
+  "                                          !  !!! !!!  !!   !  !  !!  !!!!                                                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                        !                                                                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-NE-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-NE-500-100-1.0-grid-reference.json
index aa030d2..21736c8 100644
--- a/tests/visual_tests/grids/simple-NE-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-NE-500-100-1.0-grid-reference.json
@@ -12,9 +12,9 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
-  "                                                           !!!       !                                                       ", 
-  "                                                            ! !!!!! !!  !!!                                                  ", 
-  "                                                            !!  !!     !!!                                                   ", 
+  "                                                           !!!       !!                                                      ", 
+  "                                                            !!!!!!! !!!!!!!                                                  ", 
+  "                                                            !!  !     !!!!                                                   ", 
   "                                                              ! !         !                                                  ", 
   "                                                                                                                             ", 
   "                                                        !                                                                    ", 
diff --git a/tests/visual_tests/grids/simple-NE-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-NE-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..7fcd28d
--- /dev/null
+++ b/tests/visual_tests/grids/simple-NE-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                             !!!!!!        !     !!!                                         ", 
+  "                                                                !  !!  !!!!!!   !!!! !   ! !!                                ", 
+  "                                                                ! !  !!    !     ! ! !  ! !  !                               ", 
+  "                                                                !!!!!! !!  !     ! !  ! ! !!!!                               ", 
+  "                                                                ! !      ! !     ! !  !!  !                                  ", 
+  "                                                                ! !!!!!!!! !!    ! !   !   !!!                               ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                        !                                                                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-NW-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-NW-500-100-1.0-grid-reference.json
index 1d05420..c710ebb 100644
--- a/tests/visual_tests/grids/simple-NW-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-NW-500-100-1.0-grid-reference.json
@@ -12,10 +12,10 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
-  "                                      !!!       !                                                                            ", 
-  "                                       ! !!!!! !!  !!!                                                                       ", 
-  "                                       !!  !!     !!!                                                                        ", 
-  "                                         ! !         !                                                                       ", 
+  "                                     !!!    !  !!                                                                            ", 
+  "                                        !!!!!! !!! !!!                                                                       ", 
+  "                                       !   !!  !!                                                                            ", 
+  "                                        ! !          !                                                                       ", 
   "                                                                                                                             ", 
   "                                                        !                                                                    ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/simple-NW-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-NW-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..69289b0
--- /dev/null
+++ b/tests/visual_tests/grids/simple-NW-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                  !!!!!!        !     !!!                                                                                    ", 
+  "                     !  !!  !!!!!!   !!!! !   ! !!                                                                           ", 
+  "                     ! !  !!    !     ! ! !  ! !  !                                                                          ", 
+  "                     !!!!!! !!  !     ! !  ! ! !!!!                                                                          ", 
+  "                     ! !      ! !     ! !  !!  !                                                                             ", 
+  "                     ! !!!!!!!! !!    ! !   !   !!!                                                                          ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                        !                                                                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-S-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-S-500-100-1.0-grid-reference.json
index 28fb801..ae71814 100644
--- a/tests/visual_tests/grids/simple-S-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-S-500-100-1.0-grid-reference.json
@@ -21,9 +21,9 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                !!!    !  !!                                                                 ", 
-  "                                                   !!!!!! !!!  !!                                                            ", 
-  "                                                   !  !!  !! !!                                                              ", 
-  "                                                    ! !        !                                                             ", 
+  "                                                 !!! ! ! !!!!  !!                                                            ", 
+  "                                                 !!  !!!   !!!                                                               ", 
+  "                                                   ! !         !                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/simple-S-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-S-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..17ec8b0
--- /dev/null
+++ b/tests/visual_tests/grids/simple-S-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                        !                                                                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                        !!!!!        !     !!!!                                                              ", 
+  "                                          !  !!   !! !!!  !!!!! !  !  !!                                                     ", 
+  "                                          ! !  ! !   !     !  ! !  ! !  !                                                    ", 
+  "                                          ! !!!! !!! !     !  ! ! !  !!!!                                                    ", 
+  "                                          ! !      ! !     !  !  !!  !                                                       ", 
+  "                                          !  !!! !!!  !!   !  !  !!  !!!!                                                    ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-SE-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-SE-500-100-1.0-grid-reference.json
index 691c6d8..24b2e42 100644
--- a/tests/visual_tests/grids/simple-SE-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-SE-500-100-1.0-grid-reference.json
@@ -20,9 +20,9 @@
   "                                                        !                                                                    ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
-  "                                                           !!!       !                                                       ", 
-  "                                                            ! !!!!! !!  !!!                                                  ", 
-  "                                                            !!  !!     !!!                                                   ", 
+  "                                                           !!!       !!                                                      ", 
+  "                                                            !!!!!!! !!!!!!!                                                  ", 
+  "                                                            !!  !     !!!!                                                   ", 
   "                                                              ! !         !                                                  ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/simple-SE-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-SE-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..3c41289
--- /dev/null
+++ b/tests/visual_tests/grids/simple-SE-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                        !                                                                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                             !!!!!!        !     !!!                                         ", 
+  "                                                                !  !!  !!!!!!   !!!! !   ! !!                                ", 
+  "                                                                ! !  !!    !     ! ! !  ! !  !                               ", 
+  "                                                                !!!!!! !!  !     ! !  ! ! !!!!                               ", 
+  "                                                                ! !      ! !     ! !  !!  !                                  ", 
+  "                                                                ! !!!!!!!! !!    ! !   !   !!!                               ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-SW-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-SW-500-100-1.0-grid-reference.json
index 6f39d2c..756e82f 100644
--- a/tests/visual_tests/grids/simple-SW-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-SW-500-100-1.0-grid-reference.json
@@ -20,10 +20,10 @@
   "                                                        !                                                                    ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
-  "                                      !!!       !                                                                            ", 
-  "                                       ! !!!!! !!  !!!                                                                       ", 
-  "                                       !!  !!     !!!                                                                        ", 
-  "                                         ! !         !                                                                       ", 
+  "                                     !!!    !  !!                                                                            ", 
+  "                                        !!!!!! !!! !!!                                                                       ", 
+  "                                       !   !!  !!                                                                            ", 
+  "                                        ! !          !                                                                       ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/simple-SW-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-SW-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..15b24d3
--- /dev/null
+++ b/tests/visual_tests/grids/simple-SW-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                        !                                                                    ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                  !!!!!!        !     !!!                                                                                    ", 
+  "                     !  !!  !!!!!!   !!!! !   ! !!                                                                           ", 
+  "                     ! !  !!    !     ! ! !  ! !  !                                                                          ", 
+  "                     !!!!!! !!  !     ! !  ! ! !!!!                                                                          ", 
+  "                     ! !      ! !     ! !  !!  !                                                                             ", 
+  "                     ! !!!!!!!! !!    ! !   !   !!!                                                                          ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-W-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-W-500-100-1.0-grid-reference.json
index e52b12a..1feb160 100644
--- a/tests/visual_tests/grids/simple-W-500-100-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/simple-W-500-100-1.0-grid-reference.json
@@ -16,10 +16,10 @@
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
-  "                                      !!!       !                                                                            ", 
-  "                                       ! !!!!! !!  !!!  !                                                                    ", 
-  "                                       !!  !!     !!!                                                                        ", 
-  "                                         ! !         !                                                                       ", 
+  "                                     !!!    !  !!                                                                            ", 
+  "                                        !!!!!! !!! !!!  !                                                                    ", 
+  "                                       !   !!  !!                                                                            ", 
+  "                                        ! !          !                                                                       ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
   "                                                                                                                             ", 
diff --git a/tests/visual_tests/grids/simple-W-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-W-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..5aca190
--- /dev/null
+++ b/tests/visual_tests/grids/simple-W-500-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                  !!!!!!        !     !!!                                                                                    ", 
+  "                     !  !!  !!!!!!   !!!! !   ! !!                                                                           ", 
+  "                     ! !  !!    !     ! ! !  ! !  !     !                                                                    ", 
+  "                     !!!!!! !!  !     ! !  ! ! !!!!                                                                          ", 
+  "                     ! !      ! !     ! !  !!  !                                                                             ", 
+  "                     ! !!!!!!!! !!    ! !   !   !!!                                                                          ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-shield-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/simple-shield-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..14430a3
--- /dev/null
+++ b/tests/visual_tests/grids/simple-shield-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !!!!!!!###!##########!#!!!!$!!!!!!!!%%%!%%%%%!%%%%!!!!&!!!!!!!!!!''''''''!'!'!!!!!(!!!!!!)))!)!!))))))!!!))!!!*!!!!!!!!!+++!", 
+  "!!!!!!!!###!#!##!#!!#!#!!!!!!!!!!!!!!%%%%%%%%!%!%%%!!!!!!!!!!!!!!!''''''!'''''!!!!!!!!!!!!)))))!)!!)))))!!)))!!!!!!!!!!!!++++", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!))!!!!!!!*!!!!!!!!!!!!!", 
+  " ! !!!! !!!!!!!!!!!$!$!$!!!!!$$!!!$!$!!!!!!!!!!!!!&!!&&!!&!!!!!!!!!!!!!!!!(!(!(!!!!(!(!!!!(!!(!!!!!!!!!*!*!*!*!*!*!!*!!*!!!!!", 
+  "  !      !!!!!!!!!!$$$!$!!$$$$!!!$$!$$!!!!!!!!!!!!&&&!&&&&&!!!&&!!!!!!!!!!(((!(!!!((((((((((((!!!!!!!!!*****!*****!!!***!!!!!", 
+  "   !    !!!!!!!!!!!$$$!$!$!!$$!!!$$!$$!!!!!!!!!!!!&&&&&&!&&!&!&&!!!!!!!!!!(((!(!(!((!((!(!((((!!!!!!!!!*!*****!***!!!***!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-shield-500-100-2.0-grid-reference.json b/tests/visual_tests/grids/simple-shield-500-100-2.0-grid-reference.json
new file mode 100644
index 0000000..e329f6c
--- /dev/null
+++ b/tests/visual_tests/grids/simple-shield-500-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !!!!!!!!################!#!$!!!!!!%%%%%%%%%%%%%%%%!%!!&!!!!'''!!'''''''''''''!!!'!(''!!!))))))!)))))))))!))!)!*!!!!!!!++++!+", 
+  "!!!!!!!!!#!#!!!!#!#!###!#!#!!!!!!!!%%!!!!%%!%!!%!%%!%!!!!!!!''!!!!!!''!''!!!!!''!'!!''!!!))!!)!))!!!)!!))!))!)!!!!!!!!!+!!!!!", 
+  "!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!'!'!!''!!'!''!!!'!''!'!'!'!!!!!!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!&&&&&!!!!!!!!!!!!!!!&&&!!!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!*****!!!!!!!!!!!!*!!!!!!*!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!&!!!!!!!!!!!&!!!!&!!!!!!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!*!!!!!!!!!!*!!!*!!!!!!!!!!!!!", 
+  " !!   !!   !!   !!!!!!$$!!$!$!!!!!!!!!!!!&!!&&&!&&&&&&&!!!&&&&!&!!&!&&&&!!!!!((!!(!(!!!!!!!!!!!!*!****!******!!*!***!!*!****!", 
+  "    !! ! !!! !!! !!!!!!$$$$$$$$$$$!!!!!!!&!&!!!&&&!!&&&&&&&&!&!&&!&!&!!&!!!!!!(((((((((((!!!!!!!*!*!!*!*!!!*********!!*!*!!*!", 
+  " ! !!! ! !!! !!!!!!!!!!!!!!!$!!!!!!!!!!!!&!&!!!!!!&&!&!!!!&!!&!!&&!!&!!!!!!!!!!!!!!(!!!!!!!!!!!!*!*!!!!!**!*!!!*!*!!*!*!*!!*!", 
+  " !! ! !! !!!! !!!!!!!!!!!!!!$!!!!!!!!!!!!&!!&!!!&!&&!&!!!!&!!&!!&&!!&&!&!!!!!!!!!!!(!!!!!!!!!!!!*!*!!**!!*!*!!!*!*!!*!*!*!!*!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-shield-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/simple-shield-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..a882bb2
--- /dev/null
+++ b/tests/visual_tests/grids/simple-shield-600-400-1.0-grid-reference.json
@@ -0,0 +1,118 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !!!!!!!!!!!!!!!!#!!!!!!!!$$$$$!!$$$$!!!$$$$$!!!!!%!!!!!!!!!!&&&&&&&&&!!&&&&!!!!!!!'!!!!!!!!(((((!!!((((((((((!(!!!!!)!!!!!!!!!*****!*******!!**!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!$$$$$!$!!$$!!!$$!$$!!!!!!!!!!!!!!!!&&&&&!&&!!!&!&&!!!!!!!!!!!!!!!!(((((!(!((!(((!((!!(!!!!!!!!!!!!!!!*****!*!*!***!!**!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " ! !!!! !!!#!!##!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!%%!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!)!!!!!)!!!!!!!!!!)!!!!!!!!!!!!!!!!!+!+!+!+", 
+  "  !      !!########!!####!!!!!!!!!!!!!!!!!!!%%%!%%%%%!%%%!!!!!!!!!!!!!!!!!!!!'''!''''''!!'!!!!!!!!!!!!!!!!!!)))!)!)))))))!!!))!!!!!!!!!!!!!!!!!+++++++", 
+  "   !    !!!######!####!##!!!!!!!!!!!!!!!!!!!%%%%%%%%!%%%%!!!!!!!!!!!!!!!!!!!!'''!'''!!'!!''!!!!!!!!!!!!!!!!!)))!)))!!)))))!!)))!!!!!!!!!!!!!!!!+!+++++", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/simple-shield-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/simple-shield-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..a939086
--- /dev/null
+++ b/tests/visual_tests/grids/simple-shield-600-400-2.0-grid-reference.json
@@ -0,0 +1,118 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  " !!!!#!#!!#!#!!#########!#!###!#!$!#!!!!!!!%!!!!%%%%%%%%%%!!!!%!!!!&!!!!!'!'!!!''''''''''''!!!!'!'''(!!!!!!!!!)!))!)))))))))!)!)!!)!!*!!!!!+!+!!+!++!+", 
+  "!!!!!#!#!!!!!!#!#!!#!!#!!#!!##!#!!!#!!!!!!!%!!!!!%%!!!%!!%!!%!%!!!!!!!!!!'!'!!!!!'''!''!!!!'''!'!!'!!!!!!!!!!!)!!!)!!!!)!!)!!)!)!!)!!!!!!!!+!+!!!!!!+!", 
+  "!!!!!#!##!#!#!#!##!#!!#!!!#!##!!#!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!'!!!'!!'!''!!!'!!'!'!'!'!!!!!!!!!!!!!!!!!!!)!!!!!)!!!!!!!!!!!!!+!++!+!+!+!", 
+  "!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!''!!''!!!'!!!!''!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!!!!!&&&&&&!!!!!!!!!!!!!!&&&!!!!!!!!!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!*****!!!!!!!!!!!!*!!!!!!*!!!!!!!!!", 
+  " !!!!!!!!!!!!!!!!!!!!$$$$!!!!!!!!$!$!!!!!!!!!!!!!!!!&&!!!!!!!!!!&!!!!!&!!!!!!!!!!!!!!!!(((!!!!!!!!!!(!!!!!!!!!!!!!!!!!*!!!!!!!!!!*!!!*!!!!!!!!!!!!!!!!", 
+  " !!   !!   !!   !!!!!!!!$$!$$$$!!$$$$!$$!$!!$!!!!!!!&&!&&&!&&&&&&&!!!&&&&!&!!&!&&&&!!!!!(!((!((((!!((!(((!(!((!((!!!!!*!****!***!***!*!***!!*!****!***", 
+  "    !! ! !!! !!! !!!!!!!$!!$!!$$$$$$$$$!$!$$!$!!!!!!&&&!!!&&&!!&&&&&&&&!&!!&!&!&!!&!!!!!(!((!(!(((((((((!(((((!!!!!!!!*!*!!*!*!!!**********!*!*!!*!*!!", 
+  " ! !!! ! !!! !!!!!!!!!!!$!!!$!!!!$!$!$$!$!!$!!!!!!!!&&&!!!!!&&&!&!!!!!&!&!!&!&!&!!!!!!!!(!(!!!((!!!!((!!!((!!!!!!!!!!!*!*!!!!!**!*!!!*!*!!*!*!*!!*!*!!", 
+  " !! ! !! !!!! !!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!!!!!!!&&!&!!&&!!&!&!!!!!&!&!!&&!!&&!!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!*!*!!*!!!*!*!!!*!*!!*!*!*!!*!*!!", 
+  " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!!!!!!!!!!!!!!!!!!!&&!!&&!!!!!!!!!!!!!!!!!!&&!!!!!!!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!!!**!!**!!!!!!*!!!!!!!!!!!!!!**", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-0,0-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-0,0-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..6dd6a4d
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-0,0-512-512-1.0-grid-reference.json
@@ -0,0 +1,190 @@
+{
+ "keys": [
+  "", 
+  "71", 
+  "24", 
+  "245", 
+  "207", 
+  "238", 
+  "82", 
+  "132", 
+  "205", 
+  "51", 
+  "65", 
+  "231", 
+  "186", 
+  "165", 
+  "114", 
+  "2", 
+  "120", 
+  "235", 
+  "116", 
+  "13", 
+  "113", 
+  "41", 
+  "234", 
+  "34", 
+  "78", 
+  "48", 
+  "15", 
+  "90", 
+  "173", 
+  "215", 
+  "1", 
+  "75", 
+  "224", 
+  "181", 
+  "79", 
+  "42", 
+  "158", 
+  "208", 
+  "38", 
+  "127", 
+  "70", 
+  "167", 
+  "212", 
+  "76", 
+  "39", 
+  "164", 
+  "183", 
+  "87", 
+  "69", 
+  "104", 
+  "77", 
+  "157", 
+  "59", 
+  "21", 
+  "49"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                      !!!!!                     ", 
+  "                                                                                                    !!!!!!!!!!                  ", 
+  "                                                                                                !!!!! !!!!!!  !                 ", 
+  "                                                                         ### ####                !!!!!!!!!!!!!!                 ", 
+  "                                                                      ### #########           !  !!!!!!!!!!!!!!!                ", 
+  "                                                                       ############            !!!! !!!!!!!!!!!!!               ", 
+  "                                                                      ##############        !  !!!!!!!!!!!!!!!!!!               ", 
+  "                                                                   ## ###############   !!  !! !!!!!!!!!!!!!!!!!                ", 
+  "                                                                 # #################   !!! ! !! !!!!!!!!!!!                     ", 
+  "                                                                ###################  !!!!!!!!!!! !!!!!!!!! !!! !!   !           ", 
+  "                                                               ##################    !!!!!!!!!!!!!!!!!!!!!!!!! !!!  !!!         ", 
+  "                                                                ################# #  !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!        ", 
+  "                                                             ##  #################   !!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!         ", 
+  "                                                             ## ######## ########  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                                                            ###  ####### ######## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                                                            ####   ##  ######### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                            ######    ########  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                                                             ##### ## ########  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                         #  ##################    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                            ###### ### #####      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                            ## ###########        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                     ##       ##### #######      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                      ###     #### # ######    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                 ##   ######  #############  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                      #### ## ############# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !             ", 
+  "                                                  #      # ##       #######  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                ##      #   ##    # #####     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                            ##  ##   #       # ## ## ####     !  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                           ### #      #          #######       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                          #### #           ###   ########      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                          ### #   #   # ### #############     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                         ### #### ##  # ###   ##      #        !!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                            # ### ###  ####    ##   ###               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                             ########    ##### #########               !!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                             ######## #  ## ## #########               !!!!!!!!!!!!!!!!!!!!!!!!!!! !            ", 
+  "                                               ###           # ########                !!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                        ###                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                        ######            # #####                       !!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                        ######     ###  ### #### ### ####               !!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                        #######    ###   ####### ## ######              !!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                                       ######## # #### ########  ###### ##              !!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                                       ############ ##  #### #  ### #######              !!!!!!!!!!!!!!!!!!!!!! !               ", 
+  "                                       #### ####### ##   ###    ############             !!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "   $                                    ### ##########    # ##  ##############           ! !!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                %%%                         ##########      ##   #############             !!!!!!!!!!!!!!!!!!!!!!         &     ", 
+  "              %%%%%%%                #       #  #######     ###  ###############          !!!!!!!!!!!!!!!!!!!! !!               ", 
+  "             %%%%%%%%%%%% %        # # #     ############   ###   ###### ########        !!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "            %%%%%%%%%%%%%%%%##    ###### ##  ##########   ######    ## ##########         !!!!!!!!!!!!!!!!!!!!!!                ", 
+  "           %%%%%%%%%%%%%%%%%### #############  ##### ### ### ###    ### # ######            !!!!!!!!!!!!!!!!!!!                 ", 
+  "          %%%%%%%%%%%%%%%%%%###################### ###     #  #### #### #  #####          !!!!!!!!!!!!!!!!!!!!                  ", 
+  "          %%%%%%%%%%%%%%%%%%###################   # ###   ############   #########        !!!!!!!!!!!!!!!!!                     ", 
+  "            %%%%%%%%%%%%%%%%###################################### ####  ##  ######       !!!!!!!!!!!!!!!                       ", 
+  "             %%%%%%%%%%%%%%%###########################################     #########     !!!!!!!!!!!!!!                        ", 
+  "           % %%%%%%%%%%%%%%%##########################################      #########     !!!!!!!!!!!!!!            '           ", 
+  "         %%%%%%%%%%%%%%%%%%%####################################### #       ##### ##       !!!!!!!!!! !        '' ''''          ", 
+  "          %%%%%%%%%%%%%%%%%%###################################### ##    ######## ##       !!!!!!!!!            '''''''         ", 
+  "     $    %%%%%%%%%%%%%%%%%%###################################### ###   #########         !!!!!!!!!            ''''''          ", 
+  "              %%%%%%%%%%%%%%###################################### ####     #######        !!!!!!!!!            '''''           ", 
+  "      %%     %%%%%%%%%%%%%%%####################################   #  # #    ######         !!!!!!!!              ''            ", 
+  "           %%%%%%%%%%%%%%%%%###################################      #        ### #         !!!!!!!                             ", 
+  "          %%%%%%%%%%%%%%%%%%###################################      # # ####   ##           !!!!!                         (    ", 
+  "          %%%%%%%%%%%%%%%%%%##################################           #####               !!!!!                         (    ", 
+  "           %%%%%%%%%%%%%%%%%#################################           #######               !!!!                              ", 
+  "         %%%%%%%%%%%%%%% %%%%%###############################            ######   #             !!                             )", 
+  "             %%%%%% %%       %%%%############################            ######   #                                             ", 
+  "             % %%%%           %%%#############################          ######## ###                                         )  ", 
+  "                %%%%           %%%#############################          ###########                                       )))  ", 
+  "       %        % %%            %%##############################          ###########                                       ))) ", 
+  "              %%% %             %%%###############################     ## ###########                                      )))) ", 
+  "             %%                  %%%################################     #############                                      ))) ", 
+  "           %% %                   %%##################################  ###############                                   *) )))", 
+  "          %                       ####################################  ################                                 ***  ))", 
+  "        %                         # #####################################################                                *** )))", 
+  "    % %                              ################################## #################                                *** )))", 
+  "  %                                  ################################## #################                                *   )))", 
+  "                                     ################################################# ##                                    )))", 
+  "                                      ########################################### ##   ###                                     +", 
+  "                                       ##%%%%%%%%%%%%%%%%%%%%%#####################   ####                                   + +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%################   #####                                  +++", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%###########%##   #  , #                                    +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%#########%%######                                         +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####%%%%%% ##                                           +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%% #   #                                         +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%                                            ------", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                           ------", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                             .-----", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                              .-----", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                               .-----", 
+  "                                         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                               .-----", 
+  "                                          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                 -   ", 
+  "                                          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                 ///0", 
+  "                                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ////0", 
+  "                                             %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  //////", 
+  "                                             111%%%%%%%%%%%%%%%%%%%%%%%                                                  /////00", 
+  "                                              1 11111%%%%%%%%%%%%%%%%%%                                                  ////000", 
+  "                                              11111111%1%%%%%  %%    %%                                                  //00000", 
+  "                                              11 11111111%%%         %%                                             ---///000000", 
+  "                                               11 11111111%           %%                                               222300000", 
+  "                                                11111111111           %                                               2233333000", 
+  "                                                 1  1111111               4                                          22233335500", 
+  "                                                  1  111111          666                                             22233335550", 
+  "              %                                     1111111         666666   7                                      222333335555", 
+  "                                                     1111111    111     6666                                         33333335555", 
+  "                 %                               1    111111   111    8     9:::                                     33333335555", 
+  "                                                        111111111;       <   :  = > ?                                33333335555", 
+  "                                                          111111@;                  A                                BB333333555", 
+  "                                                              1@@CCCC                                          D    BBBB35555555", 
+  "                                                                @CCEE                                               BBBB555555FF", 
+  "                                                                  EEEE       GH     I                               BBJB55555FFF", 
+  "                                                                   EE      GGKKK  K                                   LLLL55FFFF", 
+  "                                                                   MMN    GGK KKKKKKK                                  OOLPPPPFQ", 
+  "                                                                     NN NNGGGKKKKKKKKK                                 OORPPPPPQ", 
+  "                                                                         GGGGKKKKKKKKKS                                 RRRPPPQQ", 
+  "                                                                         GGGGGGGKKKKKSSSTTU                              RRPPPPQ", 
+  "                                                                         GGGGGGGKKKKVVSTTTUU                                    ", 
+  "                                                                        GGGGGGGGKKKVVVSSTTUV                                    ", 
+  "                                                                        WGGGGGGVGKKVVVSVVVVVV                                   "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-0,0-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-0,0-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..6dd6a4d
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-0,0-512-512-2.0-grid-reference.json
@@ -0,0 +1,190 @@
+{
+ "keys": [
+  "", 
+  "71", 
+  "24", 
+  "245", 
+  "207", 
+  "238", 
+  "82", 
+  "132", 
+  "205", 
+  "51", 
+  "65", 
+  "231", 
+  "186", 
+  "165", 
+  "114", 
+  "2", 
+  "120", 
+  "235", 
+  "116", 
+  "13", 
+  "113", 
+  "41", 
+  "234", 
+  "34", 
+  "78", 
+  "48", 
+  "15", 
+  "90", 
+  "173", 
+  "215", 
+  "1", 
+  "75", 
+  "224", 
+  "181", 
+  "79", 
+  "42", 
+  "158", 
+  "208", 
+  "38", 
+  "127", 
+  "70", 
+  "167", 
+  "212", 
+  "76", 
+  "39", 
+  "164", 
+  "183", 
+  "87", 
+  "69", 
+  "104", 
+  "77", 
+  "157", 
+  "59", 
+  "21", 
+  "49"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                      !!!!!                     ", 
+  "                                                                                                    !!!!!!!!!!                  ", 
+  "                                                                                                !!!!! !!!!!!  !                 ", 
+  "                                                                         ### ####                !!!!!!!!!!!!!!                 ", 
+  "                                                                      ### #########           !  !!!!!!!!!!!!!!!                ", 
+  "                                                                       ############            !!!! !!!!!!!!!!!!!               ", 
+  "                                                                      ##############        !  !!!!!!!!!!!!!!!!!!               ", 
+  "                                                                   ## ###############   !!  !! !!!!!!!!!!!!!!!!!                ", 
+  "                                                                 # #################   !!! ! !! !!!!!!!!!!!                     ", 
+  "                                                                ###################  !!!!!!!!!!! !!!!!!!!! !!! !!   !           ", 
+  "                                                               ##################    !!!!!!!!!!!!!!!!!!!!!!!!! !!!  !!!         ", 
+  "                                                                ################# #  !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!        ", 
+  "                                                             ##  #################   !!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!         ", 
+  "                                                             ## ######## ########  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                                                            ###  ####### ######## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          ", 
+  "                                                            ####   ##  ######### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                            ######    ########  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           ", 
+  "                                                             ##### ## ########  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                         #  ##################    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                            ###### ### #####      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                                            ## ###########        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                     ##       ##### #######      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                      ###     #### # ######    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                                 ##   ######  #############  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                      #### ## ############# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !             ", 
+  "                                                  #      # ##       #######  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                                ##      #   ##    # #####     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                            ##  ##   #       # ## ## ####     !  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                           ### #      #          #######       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                          #### #           ###   ########      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            ", 
+  "                                          ### #   #   # ### #############     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                         ### #### ##  # ###   ##      #        !!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                            # ### ###  ####    ##   ###               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                             ########    ##### #########               !!!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                             ######## #  ## ## #########               !!!!!!!!!!!!!!!!!!!!!!!!!!! !            ", 
+  "                                               ###           # ########                !!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                        ###                                             !!!!!!!!!!!!!!!!!!!!!!!!!!!             ", 
+  "                                        ######            # #####                       !!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                        ######     ###  ### #### ### ####               !!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "                                        #######    ###   ####### ## ######              !!!!!!!!!!!!!!!!!!!!!!!!                ", 
+  "                                       ######## # #### ########  ###### ##              !!!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                                       ############ ##  #### #  ### #######              !!!!!!!!!!!!!!!!!!!!!! !               ", 
+  "                                       #### ####### ##   ###    ############             !!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "   $                                    ### ##########    # ##  ##############           ! !!!!!!!!!!!!!!!!!!!!!!               ", 
+  "                %%%                         ##########      ##   #############             !!!!!!!!!!!!!!!!!!!!!!         &     ", 
+  "              %%%%%%%                #       #  #######     ###  ###############          !!!!!!!!!!!!!!!!!!!! !!               ", 
+  "             %%%%%%%%%%%% %        # # #     ############   ###   ###### ########        !!!!!!!!!!!!!!!!!!!!!!!!               ", 
+  "            %%%%%%%%%%%%%%%%##    ###### ##  ##########   ######    ## ##########         !!!!!!!!!!!!!!!!!!!!!!                ", 
+  "           %%%%%%%%%%%%%%%%%### #############  ##### ### ### ###    ### # ######            !!!!!!!!!!!!!!!!!!!                 ", 
+  "          %%%%%%%%%%%%%%%%%%###################### ###     #  #### #### #  #####          !!!!!!!!!!!!!!!!!!!!                  ", 
+  "          %%%%%%%%%%%%%%%%%%###################   # ###   ############   #########        !!!!!!!!!!!!!!!!!                     ", 
+  "            %%%%%%%%%%%%%%%%###################################### ####  ##  ######       !!!!!!!!!!!!!!!                       ", 
+  "             %%%%%%%%%%%%%%%###########################################     #########     !!!!!!!!!!!!!!                        ", 
+  "           % %%%%%%%%%%%%%%%##########################################      #########     !!!!!!!!!!!!!!            '           ", 
+  "         %%%%%%%%%%%%%%%%%%%####################################### #       ##### ##       !!!!!!!!!! !        '' ''''          ", 
+  "          %%%%%%%%%%%%%%%%%%###################################### ##    ######## ##       !!!!!!!!!            '''''''         ", 
+  "     $    %%%%%%%%%%%%%%%%%%###################################### ###   #########         !!!!!!!!!            ''''''          ", 
+  "              %%%%%%%%%%%%%%###################################### ####     #######        !!!!!!!!!            '''''           ", 
+  "      %%     %%%%%%%%%%%%%%%####################################   #  # #    ######         !!!!!!!!              ''            ", 
+  "           %%%%%%%%%%%%%%%%%###################################      #        ### #         !!!!!!!                             ", 
+  "          %%%%%%%%%%%%%%%%%%###################################      # # ####   ##           !!!!!                         (    ", 
+  "          %%%%%%%%%%%%%%%%%%##################################           #####               !!!!!                         (    ", 
+  "           %%%%%%%%%%%%%%%%%#################################           #######               !!!!                              ", 
+  "         %%%%%%%%%%%%%%% %%%%%###############################            ######   #             !!                             )", 
+  "             %%%%%% %%       %%%%############################            ######   #                                             ", 
+  "             % %%%%           %%%#############################          ######## ###                                         )  ", 
+  "                %%%%           %%%#############################          ###########                                       )))  ", 
+  "       %        % %%            %%##############################          ###########                                       ))) ", 
+  "              %%% %             %%%###############################     ## ###########                                      )))) ", 
+  "             %%                  %%%################################     #############                                      ))) ", 
+  "           %% %                   %%##################################  ###############                                   *) )))", 
+  "          %                       ####################################  ################                                 ***  ))", 
+  "        %                         # #####################################################                                *** )))", 
+  "    % %                              ################################## #################                                *** )))", 
+  "  %                                  ################################## #################                                *   )))", 
+  "                                     ################################################# ##                                    )))", 
+  "                                      ########################################### ##   ###                                     +", 
+  "                                       ##%%%%%%%%%%%%%%%%%%%%%#####################   ####                                   + +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%################   #####                                  +++", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%###########%##   #  , #                                    +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%#########%%######                                         +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####%%%%%% ##                                           +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%% #   #                                         +", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%                                            ------", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                           ------", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                             .-----", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                              .-----", 
+  "                                        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                               .-----", 
+  "                                         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                               .-----", 
+  "                                          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                 -   ", 
+  "                                          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                 ///0", 
+  "                                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  ////0", 
+  "                                             %%%%%%%%%%%%%%%%%%%%%%%%%%%                                                  //////", 
+  "                                             111%%%%%%%%%%%%%%%%%%%%%%%                                                  /////00", 
+  "                                              1 11111%%%%%%%%%%%%%%%%%%                                                  ////000", 
+  "                                              11111111%1%%%%%  %%    %%                                                  //00000", 
+  "                                              11 11111111%%%         %%                                             ---///000000", 
+  "                                               11 11111111%           %%                                               222300000", 
+  "                                                11111111111           %                                               2233333000", 
+  "                                                 1  1111111               4                                          22233335500", 
+  "                                                  1  111111          666                                             22233335550", 
+  "              %                                     1111111         666666   7                                      222333335555", 
+  "                                                     1111111    111     6666                                         33333335555", 
+  "                 %                               1    111111   111    8     9:::                                     33333335555", 
+  "                                                        111111111;       <   :  = > ?                                33333335555", 
+  "                                                          111111@;                  A                                BB333333555", 
+  "                                                              1@@CCCC                                          D    BBBB35555555", 
+  "                                                                @CCEE                                               BBBB555555FF", 
+  "                                                                  EEEE       GH     I                               BBJB55555FFF", 
+  "                                                                   EE      GGKKK  K                                   LLLL55FFFF", 
+  "                                                                   MMN    GGK KKKKKKK                                  OOLPPPPFQ", 
+  "                                                                     NN NNGGGKKKKKKKKK                                 OORPPPPPQ", 
+  "                                                                         GGGGKKKKKKKKKS                                 RRRPPPQQ", 
+  "                                                                         GGGGGGGKKKKKSSSTTU                              RRPPPPQ", 
+  "                                                                         GGGGGGGKKKKVVSTTTUU                                    ", 
+  "                                                                        GGGGGGGGKKKVVVSSTTUV                                    ", 
+  "                                                                        WGGGGGGVGKKVVVSVVVVVV                                   "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-0,1-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-0,1-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..3f87242
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-0,1-512-512-1.0-grid-reference.json
@@ -0,0 +1,152 @@
+{
+ "keys": [
+  "", 
+  "49", 
+  "161", 
+  "38", 
+  "21", 
+  "95", 
+  "64", 
+  "17", 
+  "218", 
+  "196", 
+  "61", 
+  "33", 
+  "160", 
+  "8", 
+  "209", 
+  "62", 
+  "243"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                               !       !!!#$$$$%%%%%%%%%%%%%%%                                  ", 
+  "                                                                       !!!##$$$%%%%%%%%%%%%%%%%%%                               ", 
+  "                                                                       !!######%%%%%%%%%%%%%%%%%%%%%                            ", 
+  "      &                                                               #########%%%%%%%%%%%%%%%%%%%%%%%                          ", 
+  "                 &                                                     ######%%%%%%%%%%%%%%%%%%%%%%%%%%                         ", 
+  "                                                                       #####%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        ", 
+  "                                                                        ####%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        ", 
+  "                     &       '                                           #####%%%%%%%%%%%%%%%%%%%%%%%%%                         ", 
+  "                    &                                                    ######(((%%%%%%%%%%%%%%%%%%%%                          ", 
+  "                                                                          ######(((%%%%%%%%%%%%%%%%%%                           ", 
+  "      )                                                                   ######(((((%%%%%%%%%%%%%%%%                           ", 
+  "   *                                                                       ####((((((%%%%%%%%%%%%%%%%                           ", 
+  "+                                                                           ###((((((((%%%%%%%%%%%%%%                           ", 
+  "                                                                              #((((((((%%%%%%%%%%%%%                            ", 
+  "    *                                                                         ,,((((---%%%%%%%%%%%%%                            ", 
+  "                                                                              ,,((((---%%%%%%%%%%%%%                            ", 
+  "                                                                              ,,((((-----%%%%%%%%%%                             ", 
+  "                                                                              ,,,...-----%%%%%%%%                               ", 
+  "                                                                              ,,......----%%%%%                                 ", 
+  "                                                                              ,,.......---%%%%                                  ", 
+  "                                                  ,                           ,,.......--.%%%%                                  ", 
+  "                                                                              ,.........%%%%%%                                  ", 
+  "                                                                             ,,.........%%%%%                                   ", 
+  "                                                                             ,,........//%%%%                                   ", 
+  "                                                                             ,,........///%%                                    ", 
+  "                                                                             ,,........///%                                     ", 
+  "                                                                             ,,........///                                      ", 
+  "                                                                             ,..........                                        ", 
+  "                                                                            ,,..........                                        ", 
+  "                                                                            ,,..........                                        ", 
+  "                                                                            ,,........                                          ", 
+  "                                                                            ,.......                                            ", 
+  "                                                                            ,.......                                            ", 
+  "                                                                            ,.....                                              ", 
+  "                                                                           ,,......                                             ", 
+  "                                                                           ,,.....                                              ", 
+  "                                                                           ,,,....                                              ", 
+  "                                                                           ,,,..                                                ", 
+  "                                                                           ,,.....                                              ", 
+  "                                                                           ,,.....                                              ", 
+  "                                                                          ,,,....                                               ", 
+  "                                                                           ,....                                                ", 
+  "                                                                           ,,..                                                 ", 
+  "                                                                           ,,...     00                                         ", 
+  "                                                                            ,,,,                                                ", 
+  "                                                                           ,,,,,                                                ", 
+  "                                                                             ,,,.                     1                         ", 
+  "                                                                              ,,,.                                              ", 
+  "                                                                                ,                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-0,1-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-0,1-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..3f87242
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-0,1-512-512-2.0-grid-reference.json
@@ -0,0 +1,152 @@
+{
+ "keys": [
+  "", 
+  "49", 
+  "161", 
+  "38", 
+  "21", 
+  "95", 
+  "64", 
+  "17", 
+  "218", 
+  "196", 
+  "61", 
+  "33", 
+  "160", 
+  "8", 
+  "209", 
+  "62", 
+  "243"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                               !       !!!#$$$$%%%%%%%%%%%%%%%                                  ", 
+  "                                                                       !!!##$$$%%%%%%%%%%%%%%%%%%                               ", 
+  "                                                                       !!######%%%%%%%%%%%%%%%%%%%%%                            ", 
+  "      &                                                               #########%%%%%%%%%%%%%%%%%%%%%%%                          ", 
+  "                 &                                                     ######%%%%%%%%%%%%%%%%%%%%%%%%%%                         ", 
+  "                                                                       #####%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        ", 
+  "                                                                        ####%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        ", 
+  "                     &       '                                           #####%%%%%%%%%%%%%%%%%%%%%%%%%                         ", 
+  "                    &                                                    ######(((%%%%%%%%%%%%%%%%%%%%                          ", 
+  "                                                                          ######(((%%%%%%%%%%%%%%%%%%                           ", 
+  "      )                                                                   ######(((((%%%%%%%%%%%%%%%%                           ", 
+  "   *                                                                       ####((((((%%%%%%%%%%%%%%%%                           ", 
+  "+                                                                           ###((((((((%%%%%%%%%%%%%%                           ", 
+  "                                                                              #((((((((%%%%%%%%%%%%%                            ", 
+  "    *                                                                         ,,((((---%%%%%%%%%%%%%                            ", 
+  "                                                                              ,,((((---%%%%%%%%%%%%%                            ", 
+  "                                                                              ,,((((-----%%%%%%%%%%                             ", 
+  "                                                                              ,,,...-----%%%%%%%%                               ", 
+  "                                                                              ,,......----%%%%%                                 ", 
+  "                                                                              ,,.......---%%%%                                  ", 
+  "                                                  ,                           ,,.......--.%%%%                                  ", 
+  "                                                                              ,.........%%%%%%                                  ", 
+  "                                                                             ,,.........%%%%%                                   ", 
+  "                                                                             ,,........//%%%%                                   ", 
+  "                                                                             ,,........///%%                                    ", 
+  "                                                                             ,,........///%                                     ", 
+  "                                                                             ,,........///                                      ", 
+  "                                                                             ,..........                                        ", 
+  "                                                                            ,,..........                                        ", 
+  "                                                                            ,,..........                                        ", 
+  "                                                                            ,,........                                          ", 
+  "                                                                            ,.......                                            ", 
+  "                                                                            ,.......                                            ", 
+  "                                                                            ,.....                                              ", 
+  "                                                                           ,,......                                             ", 
+  "                                                                           ,,.....                                              ", 
+  "                                                                           ,,,....                                              ", 
+  "                                                                           ,,,..                                                ", 
+  "                                                                           ,,.....                                              ", 
+  "                                                                           ,,.....                                              ", 
+  "                                                                          ,,,....                                               ", 
+  "                                                                           ,....                                                ", 
+  "                                                                           ,,..                                                 ", 
+  "                                                                           ,,...     00                                         ", 
+  "                                                                            ,,,,                                                ", 
+  "                                                                           ,,,,,                                                ", 
+  "                                                                             ,,,.                     1                         ", 
+  "                                                                              ,,,.                                              ", 
+  "                                                                                ,                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-1,0-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-1,0-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..2ded483
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-1,0-512-512-1.0-grid-reference.json
@@ -0,0 +1,248 @@
+{
+ "keys": [
+  "", 
+  "245", 
+  "238", 
+  "154", 
+  "60", 
+  "189", 
+  "142", 
+  "53", 
+  "101", 
+  "45", 
+  "103", 
+  "102", 
+  "72", 
+  "163", 
+  "98", 
+  "205", 
+  "153", 
+  "30", 
+  "207", 
+  "206", 
+  "110", 
+  "65", 
+  "129", 
+  "58", 
+  "136", 
+  "105", 
+  "191", 
+  "57", 
+  "81", 
+  "171", 
+  "86", 
+  "170", 
+  "182", 
+  "80", 
+  "236", 
+  "16", 
+  "210", 
+  "89", 
+  "140", 
+  "22", 
+  "68", 
+  "186", 
+  "4", 
+  "112", 
+  "200", 
+  "202", 
+  "93", 
+  "94", 
+  "74", 
+  "5", 
+  "3", 
+  "84", 
+  "194", 
+  "96", 
+  "31", 
+  "2", 
+  "199", 
+  "190", 
+  "88", 
+  "162", 
+  "44", 
+  "83", 
+  "107", 
+  "100", 
+  "139", 
+  "91", 
+  "175", 
+  "50", 
+  "97", 
+  "155", 
+  "32", 
+  "18", 
+  "168", 
+  "226", 
+  "118", 
+  "14", 
+  "244", 
+  "126", 
+  "214", 
+  "113", 
+  "36", 
+  "188", 
+  "193", 
+  "99", 
+  "131", 
+  "172", 
+  "220", 
+  "54", 
+  "208", 
+  "152", 
+  "56", 
+  "25", 
+  "73", 
+  "19", 
+  "35", 
+  "185", 
+  "197", 
+  "40", 
+  "26", 
+  "63", 
+  "230", 
+  "69", 
+  "119", 
+  "121", 
+  "223", 
+  "229", 
+  "28", 
+  "204", 
+  "92", 
+  "27", 
+  "52", 
+  "67", 
+  "95"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         !  !!                                                                                  ", 
+  "                                         !                                                                                      ", 
+  "                                        !!!!                                                                                    ", 
+  "                                    !  !!! !  !                    !!                                                           ", 
+  "                                       !!!   !!         !         !!!!                                                          ", 
+  "                                !! !!    !!!                      !!!!                                                          ", 
+  "              # ##                !    !!!!                       !!!!                                                          ", 
+  "              #####    #  #       !!    !!                        !!!!                                                          ", 
+  "           # #######                      !                      !!!!!!                                                         ", 
+  "        ###########                                   !          ! !!!!!                                                        ", 
+  "        ##########                                                !!!!!!                                                        ", 
+  "        ######                                                      !!! !!                                                      ", 
+  "        ########    ##                                               !! !!!                                                     ", 
+  "        ########                                                       !!!!                                                     ", 
+  "         ## ## #                                                       !!!                                                      ", 
+  "          #### ##                                                                                                               ", 
+  "          #### ###                                                                                                              ", 
+  "          ###   #                                                        !!!!                                                   ", 
+  "           ##                                                  !!       !!!                                    !                ", 
+  "           ##                                   !!                      !!!!!                                                   ", 
+  "                                              !!!                      !!!!!!!!!!                                               ", 
+  "                                           !!!!!                     !!!!!!!!!!!!                   !                           ", 
+  "                                          !!!!                    !!!!!!!!!!!!!!!                 !! !!                         ", 
+  "                                         !!!!                   !!!!!!!!!!!!!!!!!                 !!!!!!!                       ", 
+  "                                        !!!!                  !!!!!!!!!!!!!!!!!!!                 !!!!! !!!!                    ", 
+  "                                        !!!                  !!!!!!!!!!!!!!!!!!!                   !                            ", 
+  "                                        !!!                 ! !!!!!!!!!!!!!!!!! !                                               ", 
+  "                                       !!!                  ! !!!!!!!!!!!!!!!!!!!                   !                           ", 
+  "                                       !!             !  !!!!!!!!!!!!!!!!!!!! !!! !!!   !!          !!                          ", 
+  "                                      !!!         !   !  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!                                    ", 
+  "                                     !!!         !!! !  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        !!                          ", 
+  "                                      !!         !!!   !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!                      ", 
+  "                                     !!!         !!! !!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!                     ", 
+  "                                     !!!        !!!!!! !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!                    ", 
+  "                 $$ $                 !!!       !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!              !", 
+  "                $$$$$$                 !        !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              $ $$$$$                     !     !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !      ", 
+  "             $$$$$$%%!!!                   !!!  !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!! ", 
+  "           $$$$%$$$%%!!!!!         !       !!!!! !!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!", 
+  "           $$$$&%%%%!!!!!!!!   !!    !! !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "           $$&&&&%%%%!!!!!!!!   !! !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "           $&&&&&%%%%!!!!!!!!! !! !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "          $$&&&&&%%%%!!!!!!!!!  ! !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "         $$&&&&&&%%%%!!!  !!! ! !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "         $$&&&&&&&%%%%!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "         $&&&&&&  %%%!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "        $$&&&&&&  %%%!!!! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "       $$&&&&&&& %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "      $$$&&&&&  %%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "     $$$$&&&&& %%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "    $$$$$&&&&  %%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    $$$$$&&&&   %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !! !!!!!!!    ", 
+  "    $$$$$&&&&  %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ! !!!!!!!     ", 
+  "    $$$$$&&&&&'%%%%  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!  !      ", 
+  "    $$$$$&&&&&    ((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!   !!!           ", 
+  "    $$$ &&&&&    (((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!           ", 
+  "        &&&&      )(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!            ", 
+  "      ** &&&&& )))))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!            ", 
+  "      ** &&&   )+)))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!!           ", 
+  "      ***&&    ++++,,,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !!!!!            ", 
+  "      --*    .!!!++,,,!!!!!!!!!!!!!!!!!!!!!!!!!!///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!  !!        ", 
+  "      ----.......++,,,,!!!!!!!!!!!!!!!!!!!!!!//////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           !!!              ", 
+  "0   11----.......,,,,,,!!!!!!!!!!!!!!!!!!!!!////////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2!!!!!!!!!!!!!!         !!!              ", 
+  "00 111-----......,,,,,,!!!!!!!!!!!!!!!!!!!!!////////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2222!!!!!!!!!!!!         !!            3  ", 
+  "0  11------......4444,444!!!!!!!!!!!//!!!!!!/////////////!!!!!!!!!!!!!55!!!!!!!!!!!!!!2222!!!!!!!!!!!!          !              3", 
+  " 6677-----8......44444444!!!!!!!!!!///////!/////////////////!!!!!!!!!!555!!!!!!!!!!!!222222!!!!!!!!! !!        !                ", 
+  "66669----8888...444444444444!!!!!!///////////////////////////!!!55555!5555555!!!!55!!222222!!!!!!!!! !!       !                 ", 
+  "666666----88::::4444444444444!!!!!////////////////////////////2555555555555555555552222222222!!!!!!! !                          ", 
+  "666666;---<<=:==444>>4444444!!!!!!///////////////////////////22255555555555555555552522222222!!2!!!! !                          ", 
+  "66666;;;?<<<====@@@@>444444 !!!!!!!////////////////////////2/22225555555555555555555552222222222!!!  !!     !                   ", 
+  "66666;????AAB=C@@@@@>4  4  !!!!!!!!   /////////////////////222222555555555555555555222222222222!!!   !                          ", 
+  "66666???? BBDBCC@@@@@@  44!!!!!!!!  ////EEE///////////////22222222555555555555555522222222222!!!!!   F   !                      ", 
+  "666666 ??? BDDCCC@@@@       !!!!!!  ////EEEE//////////////222222222255555555555522222222222222!!!    FFF                        ", 
+  "666     ??  BGCCCHHH         II!!!   ///EEEEEEEE//////////22222222222555555555522222222222222!!!    FFF                         ", 
+  "JJJ   6  ???  KCLHHM    MM    III!!    NENNEEEEE//EOOOOOO222222222222222225522222222222222PPP       F                           ", 
+  "J     ?  ???? KLQQQM MMMMMMMMMMMRSSS  NNNNNNEEEEEEEEEOO22222222222222222222222222222222222PPP       F                           ", 
+  "  JJ  ?    ? ?QQQ QMMMMMMMMMMMMMRSTS  NNNNNNNEEEEUUOO222222222222222222222222222222222 22PP         F                           ", 
+  "JJ             QQQQMMMMMMMMMMMMMTTT    NNNNNNNEEEUUUU2222222222222222222222222222222  2  PPV        F                           ", 
+  "         ??    QQQQQMMMMMMMMMMMMTTTT   NTTNNNNNNEUWUUU2222222222222222222222222222222 2  PVV V     FF                           ", 
+  " XXXXXYY        Q Q QM MMMMZZZ[[[TTTTTTTTTTTNNWWWWW]]]]2222222222222222222222222222222    VVV    FFFF                           ", 
+  "XXXXXXYY         QQQ    ^ ZZZZ[[[TTTTTTTTTTTNWWWWWW]]]]]222222222222222222222222222222    VVV FFFFFF                            ", 
+  "XXXXXXYY                  ZZZ[[[[TTTTTTTTTTTWWWWWW]]]____22222222222222222222222222222    V  FFFFF F                            ", 
+  "XXXXXXYYY`     `         aZZ[[[[[TTTTTTTTTTTWWWWWW]]]____22222222222222222222222222222      FF                                  ", 
+  "XXXXXXXY````   ```       bcddd[[[[[TTTTTTTTTWWWW]]]]]]__2222222222222222222222222222222     FF                                  ", 
+  "XXXXXXXY``````````eeeeeeeccdddd[[[[TTTTTTTTTWWW]]]]]]_____22222222222222222222222222222      F                                  ", 
+  "XXXXXXX```````````eeeeeeeddddddd[ff TTTTTTTT]]]]]]]]_____ggg2222222__222222222222222222                                         ", 
+  "XXXXXXX```````````eeeeeeedddddddddd  TTTTTTTT]]]]]]]______gggg2_h2____22222222222222222     F                                   ", 
+  "XXXXXXX```````````eeeeeee dddddddddd  TTTTTTT]]]]]___________gg______i2222222222222222     F         F                          ", 
+  "XXXXXXX```````````eeeeeee ddddddddddj   kTTT]]]]]]]_________________ii2222222222222222                                          ", 
+  "XXXXXXXX``````````eeeeeeee dddddddddd kkl       ]]]_____________m___ii22222222222222n n F                                       ", 
+  "XXXXXXXXoo````````eeeeeeee  dddddddddkkklll      _______________m__iiii2222p22222222  n                                         ", 
+  "qXXXXXooooorrr````sssssssss ddddddddddddlll       ______________m iiiii22pppp2222                                               ", 
+  "qqXXXooooooorrrr``sssssssss  dddddddddddll          __________    iiiiituupp  2                        v                        ", 
+  "qqqooooooooorrrrrssssssssss  dddddddddllll          _________      iiittuupp 22       w                                         ", 
+  "qqqooooooooorrrrrsssssssssss  dddddxxxlll           ________       iiitttttp          w                                         ", 
+  "qqqoooooooorrrrrrssssssssssy   xxdxxxx              _______        iiitttttup        ww                                         ", 
+  "zoooooooooorrrrrssssssssssyyy  xxxxxx                ____             ttttttup        w                                         ", 
+  "zooo{ooooorrrrrrssssssssss||||yxxxx                  _____        _   ittt}}}p        www              ~                        ", 
+  "zzo{{{{{{{{rrrrrssssssssss|||||      xx               ___         _   it t}}pp        wwww                                      ", 
+  "z\u007f\u007f{{{{{{{\u0080rrrrrsssssssss||||||\u0081 \u0081\u0081\u0081\u0081                 ___             i   }ppp       wwwww                                      ", 
+  "\u0082\u007f\u007f{{{{{{{rrrrr\u0083\u0083ssssssss||||||\u0081\u0081\u0081\u0081\u0081\u0081                 ___\u0084            tt   p        w  www        \u0085                      \u0086      ", 
+  "\u0087\u0082{{{{{{{\u0080\u0080rr\u0083\u0083\u0083\u0083sssssss|||||||||\u0081\u0081\u0081                   _ \u0084        _   tt           w   www                                      ", 
+  "\u0087\u0082{{{{{{{\u0080\u0080\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083ssssss||||||||\u0081\u0081\u0081                \u0088    \u0084\u0084            tt          \u0089w   ww                \u0085                     ", 
+  "    {{{\u0080\u0080\u0080\u0080\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083ssssss||||||\u0081\u0081\u0081                 \u0088               \u008a  \u0089\u0089\u0089        \u0089\u0089\u0089    w    \u008b                                 ", 
+  "       \u0080\u0080\u0080\u0080\u0083\u0083\u0083\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008css\u008d\u008e\u008e||\u008e\u0081\u0081\u0081\u0081                  \u0088                \u008a\u008a \u0089\u0089   \u008a   \u0089\u008a\u008a      \u008a                                     ", 
+  "       \u0080\u0080\u0080\u0080\u0080\u008f\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008e\u008e\u008e\u008e\u0081\u0081\u0081\u0081                   \u0088               \u008a \u008a\u008a\u0089\u0089\u0089    \u0089\u0089\u0089\u008a\u008a     \u008a                                      ", 
+  "       \u0090\u0091\u0091\u0091\u008f\u008f\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008e\u008e\u008e\u008e\u0081\u0081\u0081                                     \u008a \u008a\u008a \u008a   \u008a\u0089\u008a\u008a\u008a\u008a\u008a \u008a\u008a \u008a \u008a                               \u0092    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-1,0-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-1,0-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..2ded483
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-1,0-512-512-2.0-grid-reference.json
@@ -0,0 +1,248 @@
+{
+ "keys": [
+  "", 
+  "245", 
+  "238", 
+  "154", 
+  "60", 
+  "189", 
+  "142", 
+  "53", 
+  "101", 
+  "45", 
+  "103", 
+  "102", 
+  "72", 
+  "163", 
+  "98", 
+  "205", 
+  "153", 
+  "30", 
+  "207", 
+  "206", 
+  "110", 
+  "65", 
+  "129", 
+  "58", 
+  "136", 
+  "105", 
+  "191", 
+  "57", 
+  "81", 
+  "171", 
+  "86", 
+  "170", 
+  "182", 
+  "80", 
+  "236", 
+  "16", 
+  "210", 
+  "89", 
+  "140", 
+  "22", 
+  "68", 
+  "186", 
+  "4", 
+  "112", 
+  "200", 
+  "202", 
+  "93", 
+  "94", 
+  "74", 
+  "5", 
+  "3", 
+  "84", 
+  "194", 
+  "96", 
+  "31", 
+  "2", 
+  "199", 
+  "190", 
+  "88", 
+  "162", 
+  "44", 
+  "83", 
+  "107", 
+  "100", 
+  "139", 
+  "91", 
+  "175", 
+  "50", 
+  "97", 
+  "155", 
+  "32", 
+  "18", 
+  "168", 
+  "226", 
+  "118", 
+  "14", 
+  "244", 
+  "126", 
+  "214", 
+  "113", 
+  "36", 
+  "188", 
+  "193", 
+  "99", 
+  "131", 
+  "172", 
+  "220", 
+  "54", 
+  "208", 
+  "152", 
+  "56", 
+  "25", 
+  "73", 
+  "19", 
+  "35", 
+  "185", 
+  "197", 
+  "40", 
+  "26", 
+  "63", 
+  "230", 
+  "69", 
+  "119", 
+  "121", 
+  "223", 
+  "229", 
+  "28", 
+  "204", 
+  "92", 
+  "27", 
+  "52", 
+  "67", 
+  "95"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                         !  !!                                                                                  ", 
+  "                                         !                                                                                      ", 
+  "                                        !!!!                                                                                    ", 
+  "                                    !  !!! !  !                    !!                                                           ", 
+  "                                       !!!   !!         !         !!!!                                                          ", 
+  "                                !! !!    !!!                      !!!!                                                          ", 
+  "              # ##                !    !!!!                       !!!!                                                          ", 
+  "              #####    #  #       !!    !!                        !!!!                                                          ", 
+  "           # #######                      !                      !!!!!!                                                         ", 
+  "        ###########                                   !          ! !!!!!                                                        ", 
+  "        ##########                                                !!!!!!                                                        ", 
+  "        ######                                                      !!! !!                                                      ", 
+  "        ########    ##                                               !! !!!                                                     ", 
+  "        ########                                                       !!!!                                                     ", 
+  "         ## ## #                                                       !!!                                                      ", 
+  "          #### ##                                                                                                               ", 
+  "          #### ###                                                                                                              ", 
+  "          ###   #                                                        !!!!                                                   ", 
+  "           ##                                                  !!       !!!                                    !                ", 
+  "           ##                                   !!                      !!!!!                                                   ", 
+  "                                              !!!                      !!!!!!!!!!                                               ", 
+  "                                           !!!!!                     !!!!!!!!!!!!                   !                           ", 
+  "                                          !!!!                    !!!!!!!!!!!!!!!                 !! !!                         ", 
+  "                                         !!!!                   !!!!!!!!!!!!!!!!!                 !!!!!!!                       ", 
+  "                                        !!!!                  !!!!!!!!!!!!!!!!!!!                 !!!!! !!!!                    ", 
+  "                                        !!!                  !!!!!!!!!!!!!!!!!!!                   !                            ", 
+  "                                        !!!                 ! !!!!!!!!!!!!!!!!! !                                               ", 
+  "                                       !!!                  ! !!!!!!!!!!!!!!!!!!!                   !                           ", 
+  "                                       !!             !  !!!!!!!!!!!!!!!!!!!! !!! !!!   !!          !!                          ", 
+  "                                      !!!         !   !  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!                                    ", 
+  "                                     !!!         !!! !  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!        !!                          ", 
+  "                                      !!         !!!   !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!                      ", 
+  "                                     !!!         !!! !!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!                     ", 
+  "                                     !!!        !!!!!! !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!                    ", 
+  "                 $$ $                 !!!       !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!              !", 
+  "                $$$$$$                 !        !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              ", 
+  "              $ $$$$$                     !     !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !      ", 
+  "             $$$$$$%%!!!                   !!!  !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!! ", 
+  "           $$$$%$$$%%!!!!!         !       !!!!! !!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!", 
+  "           $$$$&%%%%!!!!!!!!   !!    !! !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "           $$&&&&%%%%!!!!!!!!   !! !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "           $&&&&&%%%%!!!!!!!!! !! !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "          $$&&&&&%%%%!!!!!!!!!  ! !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "         $$&&&&&&%%%%!!!  !!! ! !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "         $$&&&&&&&%%%%!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "         $&&&&&&  %%%!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "        $$&&&&&&  %%%!!!! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "       $$&&&&&&& %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", 
+  "      $$$&&&&&  %%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "     $$$$&&&&& %%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "    $$$$$&&&&  %%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ", 
+  "    $$$$$&&&&   %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !! !!!!!!!    ", 
+  "    $$$$$&&&&  %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   ! !!!!!!!     ", 
+  "    $$$$$&&&&&'%%%%  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!  !      ", 
+  "    $$$$$&&&&&    ((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!   !!!           ", 
+  "    $$$ &&&&&    (((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!           ", 
+  "        &&&&      )(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!            ", 
+  "      ** &&&&& )))))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!            ", 
+  "      ** &&&   )+)))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!!           ", 
+  "      ***&&    ++++,,,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !!!!!            ", 
+  "      --*    .!!!++,,,!!!!!!!!!!!!!!!!!!!!!!!!!!///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!!  !!        ", 
+  "      ----.......++,,,,!!!!!!!!!!!!!!!!!!!!!!//////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           !!!              ", 
+  "0   11----.......,,,,,,!!!!!!!!!!!!!!!!!!!!!////////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2!!!!!!!!!!!!!!         !!!              ", 
+  "00 111-----......,,,,,,!!!!!!!!!!!!!!!!!!!!!////////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2222!!!!!!!!!!!!         !!            3  ", 
+  "0  11------......4444,444!!!!!!!!!!!//!!!!!!/////////////!!!!!!!!!!!!!55!!!!!!!!!!!!!!2222!!!!!!!!!!!!          !              3", 
+  " 6677-----8......44444444!!!!!!!!!!///////!/////////////////!!!!!!!!!!555!!!!!!!!!!!!222222!!!!!!!!! !!        !                ", 
+  "66669----8888...444444444444!!!!!!///////////////////////////!!!55555!5555555!!!!55!!222222!!!!!!!!! !!       !                 ", 
+  "666666----88::::4444444444444!!!!!////////////////////////////2555555555555555555552222222222!!!!!!! !                          ", 
+  "666666;---<<=:==444>>4444444!!!!!!///////////////////////////22255555555555555555552522222222!!2!!!! !                          ", 
+  "66666;;;?<<<====@@@@>444444 !!!!!!!////////////////////////2/22225555555555555555555552222222222!!!  !!     !                   ", 
+  "66666;????AAB=C@@@@@>4  4  !!!!!!!!   /////////////////////222222555555555555555555222222222222!!!   !                          ", 
+  "66666???? BBDBCC@@@@@@  44!!!!!!!!  ////EEE///////////////22222222555555555555555522222222222!!!!!   F   !                      ", 
+  "666666 ??? BDDCCC@@@@       !!!!!!  ////EEEE//////////////222222222255555555555522222222222222!!!    FFF                        ", 
+  "666     ??  BGCCCHHH         II!!!   ///EEEEEEEE//////////22222222222555555555522222222222222!!!    FFF                         ", 
+  "JJJ   6  ???  KCLHHM    MM    III!!    NENNEEEEE//EOOOOOO222222222222222225522222222222222PPP       F                           ", 
+  "J     ?  ???? KLQQQM MMMMMMMMMMMRSSS  NNNNNNEEEEEEEEEOO22222222222222222222222222222222222PPP       F                           ", 
+  "  JJ  ?    ? ?QQQ QMMMMMMMMMMMMMRSTS  NNNNNNNEEEEUUOO222222222222222222222222222222222 22PP         F                           ", 
+  "JJ             QQQQMMMMMMMMMMMMMTTT    NNNNNNNEEEUUUU2222222222222222222222222222222  2  PPV        F                           ", 
+  "         ??    QQQQQMMMMMMMMMMMMTTTT   NTTNNNNNNEUWUUU2222222222222222222222222222222 2  PVV V     FF                           ", 
+  " XXXXXYY        Q Q QM MMMMZZZ[[[TTTTTTTTTTTNNWWWWW]]]]2222222222222222222222222222222    VVV    FFFF                           ", 
+  "XXXXXXYY         QQQ    ^ ZZZZ[[[TTTTTTTTTTTNWWWWWW]]]]]222222222222222222222222222222    VVV FFFFFF                            ", 
+  "XXXXXXYY                  ZZZ[[[[TTTTTTTTTTTWWWWWW]]]____22222222222222222222222222222    V  FFFFF F                            ", 
+  "XXXXXXYYY`     `         aZZ[[[[[TTTTTTTTTTTWWWWWW]]]____22222222222222222222222222222      FF                                  ", 
+  "XXXXXXXY````   ```       bcddd[[[[[TTTTTTTTTWWWW]]]]]]__2222222222222222222222222222222     FF                                  ", 
+  "XXXXXXXY``````````eeeeeeeccdddd[[[[TTTTTTTTTWWW]]]]]]_____22222222222222222222222222222      F                                  ", 
+  "XXXXXXX```````````eeeeeeeddddddd[ff TTTTTTTT]]]]]]]]_____ggg2222222__222222222222222222                                         ", 
+  "XXXXXXX```````````eeeeeeedddddddddd  TTTTTTTT]]]]]]]______gggg2_h2____22222222222222222     F                                   ", 
+  "XXXXXXX```````````eeeeeee dddddddddd  TTTTTTT]]]]]___________gg______i2222222222222222     F         F                          ", 
+  "XXXXXXX```````````eeeeeee ddddddddddj   kTTT]]]]]]]_________________ii2222222222222222                                          ", 
+  "XXXXXXXX``````````eeeeeeee dddddddddd kkl       ]]]_____________m___ii22222222222222n n F                                       ", 
+  "XXXXXXXXoo````````eeeeeeee  dddddddddkkklll      _______________m__iiii2222p22222222  n                                         ", 
+  "qXXXXXooooorrr````sssssssss ddddddddddddlll       ______________m iiiii22pppp2222                                               ", 
+  "qqXXXooooooorrrr``sssssssss  dddddddddddll          __________    iiiiituupp  2                        v                        ", 
+  "qqqooooooooorrrrrssssssssss  dddddddddllll          _________      iiittuupp 22       w                                         ", 
+  "qqqooooooooorrrrrsssssssssss  dddddxxxlll           ________       iiitttttp          w                                         ", 
+  "qqqoooooooorrrrrrssssssssssy   xxdxxxx              _______        iiitttttup        ww                                         ", 
+  "zoooooooooorrrrrssssssssssyyy  xxxxxx                ____             ttttttup        w                                         ", 
+  "zooo{ooooorrrrrrssssssssss||||yxxxx                  _____        _   ittt}}}p        www              ~                        ", 
+  "zzo{{{{{{{{rrrrrssssssssss|||||      xx               ___         _   it t}}pp        wwww                                      ", 
+  "z\u007f\u007f{{{{{{{\u0080rrrrrsssssssss||||||\u0081 \u0081\u0081\u0081\u0081                 ___             i   }ppp       wwwww                                      ", 
+  "\u0082\u007f\u007f{{{{{{{rrrrr\u0083\u0083ssssssss||||||\u0081\u0081\u0081\u0081\u0081\u0081                 ___\u0084            tt   p        w  www        \u0085                      \u0086      ", 
+  "\u0087\u0082{{{{{{{\u0080\u0080rr\u0083\u0083\u0083\u0083sssssss|||||||||\u0081\u0081\u0081                   _ \u0084        _   tt           w   www                                      ", 
+  "\u0087\u0082{{{{{{{\u0080\u0080\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083ssssss||||||||\u0081\u0081\u0081                \u0088    \u0084\u0084            tt          \u0089w   ww                \u0085                     ", 
+  "    {{{\u0080\u0080\u0080\u0080\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083ssssss||||||\u0081\u0081\u0081                 \u0088               \u008a  \u0089\u0089\u0089        \u0089\u0089\u0089    w    \u008b                                 ", 
+  "       \u0080\u0080\u0080\u0080\u0083\u0083\u0083\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008css\u008d\u008e\u008e||\u008e\u0081\u0081\u0081\u0081                  \u0088                \u008a\u008a \u0089\u0089   \u008a   \u0089\u008a\u008a      \u008a                                     ", 
+  "       \u0080\u0080\u0080\u0080\u0080\u008f\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008e\u008e\u008e\u008e\u0081\u0081\u0081\u0081                   \u0088               \u008a \u008a\u008a\u0089\u0089\u0089    \u0089\u0089\u0089\u008a\u008a     \u008a                                      ", 
+  "       \u0090\u0091\u0091\u0091\u008f\u008f\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008e\u008e\u008e\u008e\u0081\u0081\u0081                                     \u008a \u008a\u008a \u008a   \u008a\u0089\u008a\u008a\u008a\u008a\u008a \u008a\u008a \u008a \u008a                               \u0092    "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-1,1-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-1,1-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..97fda92
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-1,1-512-512-1.0-grid-reference.json
@@ -0,0 +1,170 @@
+{
+ "keys": [
+  "", 
+  "67", 
+  "27", 
+  "28", 
+  "204", 
+  "92", 
+  "185", 
+  "119", 
+  "223", 
+  "52", 
+  "203", 
+  "29", 
+  "166", 
+  "201", 
+  "6", 
+  "177", 
+  "221", 
+  "227", 
+  "20", 
+  "123", 
+  "9", 
+  "122", 
+  "141", 
+  "108", 
+  "151", 
+  "222", 
+  "61", 
+  "216", 
+  "180", 
+  "124", 
+  "178", 
+  "219", 
+  "179", 
+  "159", 
+  "146"
+ ], 
+ "data": {}, 
+ "grid": [
+  "       !!!!##$$$$$$$$%%%%&&&&''                     (                 )))))   )))))) ) )   )))                                  ", 
+  "    *  !!!!#$$$$$$$$$%++++&&&&                                          ))))  )))))  ))    ) ))))))                             ", 
+  "       !!###$$$$$$$$$,+++++&&                                          ))))))  ))))  )))  ))) )) ))))-     --                   ", 
+  "        ##$$$$$$$$$$$+++++++&                                            )))         ) )       ))))))---    -                   ", 
+  "         $$$$$$$$$$$$+++++++                                              ))    )      ))         )))-------  -              .  ", 
+  "         ///$$/$$$$$$$+++++++           0                                   )))))     )            ))----                       ", 
+  "          //////$$$$$11+++++                                                     ))))))))22       ) )-- --      3 3             ", 
+  "          //////$$$$$1114++++                                                        )  )            5   ---      33            ", 
+  "          ///////11$11114+++6                                                                55  5   5       -                  ", 
+  "         ////////111111146666   7  8                                                         55555   55                         ", 
+  "         ///////1111111144666     88                                                      5 555555   55                9        ", 
+  "         ///////1111116664666    888                                                     555555555   555               9        ", 
+  "         ///////1111::::64666   8888                                                   55555555555555555                      ;;", 
+  "         <<<<<<<<<::::::666     8888                                                   555555555555555555                     ;;", 
+  "         <<<<<<====:::::66      888                                                   55555555555555555555               9      ", 
+  "          <<<<<=====::::6      8888                                               5555555555555555555555555          >          ", 
+  "          <<<<<======::666     8888                                              555555555555555555555555555          >         ", 
+  "           <<<<=====???666     888                                               555555555555555555555555555                    ", 
+  "           <<<<====????66      888                                               5555555555555555555555555555                   ", 
+  "           <<<<==?????@6                                                         5555555555555555555555555555                   ", 
+  "           <<<<???????@?                                                         55555555555555555555555555555                  ", 
+  "            <<<?????????                                                          5555555555555555555555555555                  ", 
+  "            ???????AA??                                                           5555555555555555555555555555                  ", 
+  "             ?????????                                                            555555555555555555555555555                   ", 
+  "             ????????                                                             5555555555  555555555555555                   ", 
+  "             ???????                                                              5555555       555555555555                    ", 
+  "              ??                                                                  555           5 5555555555               B    ", 
+  "                                                                                                  5555555555               BB   ", 
+  "                                                                                                    5555555                 BB  ", 
+  "                                                       C                                            555555                   BB ", 
+  "                                                                                                      5 5                   BBB ", 
+  "                                                                                                         5                   B  ", 
+  "                                                                                                       555                 BBB  ", 
+  "                                                                                                        55                BB    ", 
+  "                                                                                                        55               BB     ", 
+  "                                                                                                                        BBB     ", 
+  "                                                                                                                       BBB      ", 
+  "                                                                                                                       BBB      ", 
+  "                                                                                                                       B        ", 
+  "                                                                                                                                ", 
+  "                                                 CC                                                                             ", 
+  "                                                                                                                                ", 
+  "                                                                                                                      B         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                        B       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/style-level-compositing-tiled-1,1-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/style-level-compositing-tiled-1,1-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..97fda92
--- /dev/null
+++ b/tests/visual_tests/grids/style-level-compositing-tiled-1,1-512-512-2.0-grid-reference.json
@@ -0,0 +1,170 @@
+{
+ "keys": [
+  "", 
+  "67", 
+  "27", 
+  "28", 
+  "204", 
+  "92", 
+  "185", 
+  "119", 
+  "223", 
+  "52", 
+  "203", 
+  "29", 
+  "166", 
+  "201", 
+  "6", 
+  "177", 
+  "221", 
+  "227", 
+  "20", 
+  "123", 
+  "9", 
+  "122", 
+  "141", 
+  "108", 
+  "151", 
+  "222", 
+  "61", 
+  "216", 
+  "180", 
+  "124", 
+  "178", 
+  "219", 
+  "179", 
+  "159", 
+  "146"
+ ], 
+ "data": {}, 
+ "grid": [
+  "       !!!!##$$$$$$$$%%%%&&&&''                     (                 )))))   )))))) ) )   )))                                  ", 
+  "    *  !!!!#$$$$$$$$$%++++&&&&                                          ))))  )))))  ))    ) ))))))                             ", 
+  "       !!###$$$$$$$$$,+++++&&                                          ))))))  ))))  )))  ))) )) ))))-     --                   ", 
+  "        ##$$$$$$$$$$$+++++++&                                            )))         ) )       ))))))---    -                   ", 
+  "         $$$$$$$$$$$$+++++++                                              ))    )      ))         )))-------  -              .  ", 
+  "         ///$$/$$$$$$$+++++++           0                                   )))))     )            ))----                       ", 
+  "          //////$$$$$11+++++                                                     ))))))))22       ) )-- --      3 3             ", 
+  "          //////$$$$$1114++++                                                        )  )            5   ---      33            ", 
+  "          ///////11$11114+++6                                                                55  5   5       -                  ", 
+  "         ////////111111146666   7  8                                                         55555   55                         ", 
+  "         ///////1111111144666     88                                                      5 555555   55                9        ", 
+  "         ///////1111116664666    888                                                     555555555   555               9        ", 
+  "         ///////1111::::64666   8888                                                   55555555555555555                      ;;", 
+  "         <<<<<<<<<::::::666     8888                                                   555555555555555555                     ;;", 
+  "         <<<<<<====:::::66      888                                                   55555555555555555555               9      ", 
+  "          <<<<<=====::::6      8888                                               5555555555555555555555555          >          ", 
+  "          <<<<<======::666     8888                                              555555555555555555555555555          >         ", 
+  "           <<<<=====???666     888                                               555555555555555555555555555                    ", 
+  "           <<<<====????66      888                                               5555555555555555555555555555                   ", 
+  "           <<<<==?????@6                                                         5555555555555555555555555555                   ", 
+  "           <<<<???????@?                                                         55555555555555555555555555555                  ", 
+  "            <<<?????????                                                          5555555555555555555555555555                  ", 
+  "            ???????AA??                                                           5555555555555555555555555555                  ", 
+  "             ?????????                                                            555555555555555555555555555                   ", 
+  "             ????????                                                             5555555555  555555555555555                   ", 
+  "             ???????                                                              5555555       555555555555                    ", 
+  "              ??                                                                  555           5 5555555555               B    ", 
+  "                                                                                                  5555555555               BB   ", 
+  "                                                                                                    5555555                 BB  ", 
+  "                                                       C                                            555555                   BB ", 
+  "                                                                                                      5 5                   BBB ", 
+  "                                                                                                         5                   B  ", 
+  "                                                                                                       555                 BBB  ", 
+  "                                                                                                        55                BB    ", 
+  "                                                                                                        55               BB     ", 
+  "                                                                                                                        BBB     ", 
+  "                                                                                                                       BBB      ", 
+  "                                                                                                                       BBB      ", 
+  "                                                                                                                       B        ", 
+  "                                                                                                                                ", 
+  "                                                 CC                                                                             ", 
+  "                                                                                                                                ", 
+  "                                                                                                                      B         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                        B       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-allow-overlap-expr-500-500-1.0-grid-reference.json b/tests/visual_tests/grids/text-allow-overlap-expr-500-500-1.0-grid-reference.json
new file mode 100644
index 0000000..0ffa225
--- /dev/null
+++ b/tests/visual_tests/grids/text-allow-overlap-expr-500-500-1.0-grid-reference.json
@@ -0,0 +1,145 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "1", 
+  "3", 
+  "5", 
+  "8", 
+  "7", 
+  "10", 
+  "9", 
+  "11", 
+  "13", 
+  "16", 
+  "15"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "               !#!!#!!!                      $ $$ $$                     %  %%%%%                      &&&'&&&'              ", 
+  "                ! #! !                      $$ $$$                       %% %%%                        '& &''&               ", 
+  "               ! !#  #                      $   $$ $                      %  %% %                      && &'& '              ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "               ()(()(((                      * ** **                     +  +  ++                      , ,-,,,-              ", 
+  "                ( ((                        **  **                       ++  ++                        ,, ,--,               ", 
+  "               ))))  (                      **  **                       ++  ++                        ,, ,-,                ", 
+  "                      )                           *                            +                             -               ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-allow-overlap-expr-500-500-2.0-grid-reference.json b/tests/visual_tests/grids/text-allow-overlap-expr-500-500-2.0-grid-reference.json
new file mode 100644
index 0000000..7ae9819
--- /dev/null
+++ b/tests/visual_tests/grids/text-allow-overlap-expr-500-500-2.0-grid-reference.json
@@ -0,0 +1,145 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "1", 
+  "3", 
+  "5", 
+  "8", 
+  "7", 
+  "10", 
+  "9", 
+  "11", 
+  "13", 
+  "16", 
+  "15"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "            !##! !##!  ##!!               $   $$$$  $ $$              %%   %%%% %% %%               &'&  &'&& '' &'          ", 
+  "            #!!  #!!! # !!               $ $  $  $ $                  %%   %  % %                   &'&  & &' ' &            ", 
+  "            #!!  #!!# # !                $ $  $$$  $                  % %  %%%  %                   '&'  '&'  '&&            ", 
+  "            #!!# # !# #!                $$$$  $  $ $                 %%%%  %  % %                  '&'&  '& ' &&             ", 
+  "           #!  ! # !# !#  #             $   $ $  $ $$  $             %  %% %  % %   %              && &' '& ' &   '          ", 
+  "           !   !!##!# !!!!!             $   $ $$$   $$$             %%   % %%%   %%%              '&   & '&' &&&&&           ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "            () ( ())( (((((               *   ****  ****              ++   +++  +++++              ,,-,,,,--,,,,,,-          ", 
+  "            )((  )((( )) (               ***  *  * *                  ++   +  + +                   ,-,  , ,- - ,,           ", 
+  "            )((  )(() ) (                * *  **** *                  + +  +++  +                   -,-  -,,  -,,            ", 
+  "            )(() ) () )(                ** *  *  * *                 +  +  +  + +                  -,,,  -, - -,             ", 
+  "           )())( ) () ((                ***** *  * *                 ++++  +  + +   +              -,-,  -, - ,   -          ", 
+  "           ((  ( ))() (((((             *   * ****  ****            ++   + +++   ++++             -,   , -,- ,,,,,-          ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bengali-800-100-1.0-grid-reference.json b/tests/visual_tests/grids/text-bengali-800-100-1.0-grid-reference.json
new file mode 100644
index 0000000..14b9ad6
--- /dev/null
+++ b/tests/visual_tests/grids/text-bengali-800-100-1.0-grid-reference.json
@@ -0,0 +1,36 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "5", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                              !!!!!!!!!                                   ##                                    $$$$$                                                                   ", 
+  "                                              !! ! ! !!                                #######                                  $$ $$                                                                   ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bengali-800-100-2.0-grid-reference.json b/tests/visual_tests/grids/text-bengali-800-100-2.0-grid-reference.json
new file mode 100644
index 0000000..7e74062
--- /dev/null
+++ b/tests/visual_tests/grids/text-bengali-800-100-2.0-grid-reference.json
@@ -0,0 +1,36 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "5", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                       !                            #      #                                    $$$                                                                     ", 
+  "                                           !   !!  !! !!!!!                        ### ###########                           $$$$$$$$$$                                                                 ", 
+  "                                         ! !   !   !  !!!!!                          #  ########                             $    $ $$$                                                                 ", 
+  "                                          !              !                               #### ###                             $    $$$$                                                                 ", 
+  "                                                                                                 #                            $$                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1532-600-165-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1532-600-165-1.0-grid-reference.json
new file mode 100644
index 0000000..9f71858
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1532-600-165-1.0-grid-reference.json
@@ -0,0 +1,54 @@
+{
+ "keys": [
+  "", 
+  "4", 
+  "2", 
+  "1", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                               !! !! ! !! ! ! !!!!                                    ", 
+  "                                                                                               !! !!!   !!!!!! !! !                                   ", 
+  "                                                                                               !! !! ! !! !!! !!! !                                   ", 
+  "                                                                                                              !                                       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "             #     #    #              $     $   $$  $                                                                                                ", 
+  "           #### ########### ##       $$$$$  $$$$$$ $$$ $                                                                                              ", 
+  "          # ## ## ## ### ##  #      $$$$$ $$$$ $$$ $$$ $                                                                                              ", 
+  "                         ##                        $$                                                                                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                  %     %   %%  %                                     ", 
+  "                                                                               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                   ", 
+  "                                                                                               %%%%% % %%%%%% %%% %                                   ", 
+  "                                                                                                              %%                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1532-600-165-2.0-grid-reference.json b/tests/visual_tests/grids/text-bug1532-600-165-2.0-grid-reference.json
new file mode 100644
index 0000000..6d7d801
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1532-600-165-2.0-grid-reference.json
@@ -0,0 +1,54 @@
+{
+ "keys": [
+  "", 
+  "4", 
+  "1", 
+  "2", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                           !           !!       !!      !                             ", 
+  "                                                                                           !           !!      !!       !                             ", 
+  "                                                                                      !!!! !!!! !!!! !!!! !!!! !!!!!!!! !!!!                          ", 
+  "                                                                                      !!!! !  ! !!  !! !! !!!! !! !!!!!!!!!!!!!!!!                    ", 
+  "                                                                                     !! !! !  ! !!  !! !! !    !! !! !! !  !                          ", 
+  "                                                                                      !!!! !!!! !!!! !!!! !!!! !! !!!!! ! !!                          ", 
+  "                                                                                                                     !!                               ", 
+  "                                                                                                                   !!!                                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                ##           #       ##      #                                                                                        ", 
+  "                                ##           #      ###      #                                                                                        ", 
+  "                           #### ####  ### #### #### ### #### ####                                                                                     ", 
+  "                    $        ## ## ####   # ##### # ## ## ## ## #                                                                                     ", 
+  "                           #### ## ####  ##  # #### ## ## ## #  #                                                                                     ", 
+  "                           #### #### #### #### #### ## ##### #  #                                                                                     ", 
+  "                                                          ##                                                                                          ", 
+  "                                                        ###                                %            %      %%%      %                             ", 
+  "                                                                                      %%%  %%%%  %%% %%%%  %%% %%% %%%% %%%%                          ", 
+  "                                                                               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                   ", 
+  "                                                                                      %%%% %  %%%%  %%  % %%%% %% %% %% %  %                          ", 
+  "                                                                                      %%%% %%%% %%%% %%%% %% % %% %%%%% %  %                          ", 
+  "                                                                                       %     %    %   % %  %%  %%  %%%% %  %                          ", 
+  "                                                                                                                   %%%                                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1533-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1533-600-600-1.0-grid-reference.json
new file mode 100644
index 0000000..8931820
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1533-600-600-1.0-grid-reference.json
@@ -0,0 +1,162 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "4", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                              !!! !!!   !                                                                #####  #                                     ", 
+  "                              !!! !!!                                                                    ## ##  #                                     ", 
+  "                                                                                                                                                      ", 
+  "                       !        !    !          !                                                #       #                #                           ", 
+  "                       !     !! ! !! !! !! !  !!!        !!!!                                   ####   ## ##############################              ", 
+  "                             !!       !                                                                        #                                      ", 
+  "                                                                                                                 #                                    ", 
+  "                               !! !   !!                                                                # ##  #   ##                                  ", 
+  "                                     !                                                                        #   #                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                           $                                                                                                          ", 
+  "                                          $                                                                                                           ", 
+  "                                         $                                                                                                            ", 
+  "                                        $                                                                                                             ", 
+  "                                       $                                                                                                              ", 
+  "                                                                                                                                                      ", 
+  "                                    $                                                                                                                 ", 
+  "                                   $                                                                                                                  ", 
+  "                                 $$                                                                                                                   ", 
+  "                                 $$                                                                %                                                  ", 
+  "                                $                                                                   %                                                 ", 
+  "                               $                                                                      %                                               ", 
+  "                         $    $                                                                        %                                              ", 
+  "                        $   $$                                                                           %                                            ", 
+  "                            $$                                                                            %                                           ", 
+  "                    $$    $   $                                                                             %                                         ", 
+  "                    $$   $$    $                                                                             %                                        ", 
+  "                        $$  $                                                                                  %      %                               ", 
+  "                       $$  $$$                                                                                  %     %%                              ", 
+  "                     $$$   $                                                                                      %   % %                             ", 
+  "                     $$                                                                                           %%%   %                             ", 
+  "                   $$$                                                                                             %%%     %                          ", 
+  "                   $   $                                                                                              %    %%                         ", 
+  "                  $    $                                                                                          %     %    %                        ", 
+  "                 $                                                                                                %%    %%%                           ", 
+  "               $                                                                                                      % % %%                          ", 
+  "              $$                                                                                                      %%   %%                         ", 
+  "             $                                                                                                         %%%   %%                       ", 
+  "            $                                                                                                           %%     %                      ", 
+  "           $                                                                                                              %     %                     ", 
+  "          $                                                                                                                      %%                   ", 
+  "         $                                                                                                                         %                  ", 
+  "        $                                                                                                                            %                ", 
+  "       $                                                                                                                              %               ", 
+  "                                                                                                                                        %             ", 
+  "                                                                                                                                         %            ", 
+  "                                                                                                                                           %          ", 
+  "                                                                                                                                            %         ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1533-600-600-2.0-grid-reference.json b/tests/visual_tests/grids/text-bug1533-600-600-2.0-grid-reference.json
new file mode 100644
index 0000000..9a4bf57
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1533-600-600-2.0-grid-reference.json
@@ -0,0 +1,162 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "4", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                           !   !                                                                     #    #                                           ", 
+  "                         !!!!!!!!!!!       !!                                                        # # ####      #                                  ", 
+  "                           !! !! !      !!!  !!                                                      ## ## #    ##                                    ", 
+  "                           !! !! !         !!                                                        ##  # #      ##                                  ", 
+  "                            ! !                                                                                                                       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                          !  !      !  !                                                            ##         #                                      ", 
+  "                   !!  !! !! !!  !! !! !! !      !                                               ## ###   # ####        #                             ", 
+  "                   !      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                       ####################################################              ", 
+  "                   !   !! ! !!   !! !  ! !       !                                               #  #    # ## ## ##    ##                             ", 
+  "                       !!                !                                                                       #                                    ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                   ###                                ", 
+  "                              !     !!!  !!!!                                                               # # #  ## # #                             ", 
+  "                          !!!!  !!    !  !!!!                                                      ##  # #      #  # ## #                             ", 
+  "                              !!    !!!!!!!!!                                                       ##      #   ## # ## #                             ", 
+  "                                      !!   $!                                                                         #                               ", 
+  "                                          $                                                                                                           ", 
+  "                                         $                                                                                                            ", 
+  "                                        $                                                                                                             ", 
+  "                                      $$                                                                                                              ", 
+  "                                     $$                                                                                                               ", 
+  "                           $        $$                                                                                                                ", 
+  "                                   $                                                                                                                  ", 
+  "                       $ $        $$                                                                                                                  ", 
+  "                                 $$                                                                %                                                  ", 
+  "                      $$       $$                                                                   %%                                                ", 
+  "                               $$$                                                                    %              %                                ", 
+  "                   $          $$                                                                       %%           %                                 ", 
+  "                $$          $$                                                                           %           %%                               ", 
+  "                $ $        $$       $                                                                     %        %  %%%                             ", 
+  "                 $       $$$$     $  $                                                                     %%        %  %%                            ", 
+  "              $ $ $    $$$$  $  $$$$ $                                                                     % %%        % %                            ", 
+  "             $$$       $$$ $    $   $                                                                       % %%%       %  %                          ", 
+  "             $ $       $$ $    $ $$                                                                          % %%%       %%                           ", 
+  "              $      $$$$       $                                                                              % %%          %%%                      ", 
+  "                     $ $      $ $$                                                                              %  %%%        %                       ", 
+  "                   $$ $     $$                                                                                     %%%         %                      ", 
+  "                  $$       $  $                                                                                    % %%%         %%                   ", 
+  "                 $$$$       $                                                                              % %%       %%% %                           ", 
+  "               $$$$                                                                                         %         %% %%                           ", 
+  "             $ $$        $                                                                                     %        % %%%                         ", 
+  "              $$ $    $ $                                                                                       %         %%%                         ", 
+  "             $ $      $                                                                                                  %   %%                       ", 
+  "            $        $ $$                                                                                            %        %%%%                    ", 
+  "           $         $                                                                                             %  %        %%%                    ", 
+  "          $                                                                                                         %   %%%%     %%                   ", 
+  "         $                                                                                                            %% %%       %%%                 ", 
+  "        $                                                                                                             % % % %        %                ", 
+  "       $                                                                                                                 %%%          %%              ", 
+  "      $                                                                                                                      %          %             ", 
+  "                                                                                                                          % %            %%           ", 
+  "                                                                                                                                           %          ", 
+  "                                                                                                                                            %         ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820+0-600-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820+0-600-300-1.0-grid-reference.json
new file mode 100644
index 0000000..05d5df7
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820+0-600-300-1.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+  "", 
+  "10", 
+  "9", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "4", 
+  "3", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                          !!!         ", 
+  "                                                                                                                                           !!! ! !    ", 
+  "                                                                                                                            # # # #        !!  !!     ", 
+  "                                                                                                             $              ### #            ! !      ", 
+  "                                                                                             %%%             $$$ $          ### # #                   ", 
+  "                                                                              &&&             %%             $$$ $$$                                  ", 
+  "                                                                               &&& & &        %%   %                                                  ", 
+  "                                                                ' ' ' '        &&  &&                                                                 ", 
+  "                                                 (              ''' '            & &                                                                  ", 
+  "                                 )))             ((( (          ''' ' '                                                                               ", 
+  "                  ***             ))             ((( (((                                                                                              ", 
+  "                   *** * *        ))   )                                                                                                              ", 
+  "    + + + +        **  **                                                                                                                             ", 
+  "    +++ +            * *                                                                                                                              ", 
+  "    +++ + +                                                                                                                                           ", 
+  "                                                                                                                                                      ", 
+  "       +              *              )              (              '              &              %              $              #              !       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "    +  +++         *                                                                                                                                  ", 
+  "    +   ++         * *****        )                                                                                                                   ", 
+  "                   * * **        ))) ) ) ))                                                                                                           ", 
+  "                                  )  ))))))      ( ( ((((                                                                                             ", 
+  "                                 ))  ) ))))      (( ((((                                                                                              ", 
+  "                                                 ( ( (((           '''            &                                                                   ", 
+  "                                                                   ' '          & &                                                                   ", 
+  "                                                                                 && &       %%%%  %%% %                                               ", 
+  "                                                                                            %%%% % %%  %    $$$ $$$$$$                                ", 
+  "                                                                                            %% % % %%  %    $$$$ $$           #                       ", 
+  "                                                                                                            $$$ $$$  $       ### ###                  ", 
+  "                                                                                                                $            ### ##          !  !!    ", 
+  "                                                                                                                                             !   !    ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820+0-600-300-2.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820+0-600-300-2.0-grid-reference.json
new file mode 100644
index 0000000..714f2f0
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820+0-600-300-2.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "7", 
+  "5", 
+  "3", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                       !!!!!        !                 ", 
+  "                                                                                                                         ! !!!  !!!!!!                ", 
+  "                                                                                         #####                           ! !  !     !                 ", 
+  "                                                                                           #          #                  ! !!!! !!! !                 ", 
+  "                                                                                           # #### ######                 ! !      ! !                 ", 
+  "                                                           $$$$$        $                  # #  # #   #                  ! !!!!!!!! !!                ", 
+  "                                                             $ $$$  $$$$$$                 # #     ## #                                               ", 
+  "                             %%%%%                           $ $  $     $                  # #  ##  # #                                               ", 
+  "                               %          %                  $ $$$$ $$$ $                                                                             ", 
+  "                               % %%%% %%%%%%                 $ $      $ $                                                                             ", 
+  "&&&&        &                  % %  % %   %                  $ $$$$$$$$ $$                                                                            ", 
+  " & &&&  &&&&&&                 % %     %% %                                                                                                           ", 
+  " & &  &     &                  % %  %%  % %                                                                                                           ", 
+  " & &&&& &&& &                                                                                                                                         ", 
+  " & &      & &                                                                                                                                         ", 
+  " & &&&&&&&& &&                                                                                                                                        ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "       &              '              %              (              $              )              #              *              !              +       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "  &&  &&&   &&                                                                                                                                        ", 
+  " &  & &  & &  &                %                                                                                                                      ", 
+  " &  & &  & &&&&             %  %                                                                                                                      ", 
+  " &  & &  & &               %%% %%%% %%%%%%% %%%%                                                                                                      ", 
+  " &&&  &  & &&&&             %  %  % %  %  % %  %             $  $                                                                                     ", 
+  "                            %  %  % %  %    %                $$$$ $  $  $$                                                                            ", 
+  "                            %  %  % %  %% % %% %             $  $ $  $ $  $                                                                           ", 
+  "                                                             $  $ $$$  $$$$                                                                           ", 
+  "                                                             $  $  $$  $              #### ### #  #  ### ####                                         ", 
+  "                                                             $  $  $$  $$$$           ##  ##  # # # #  # #  #                !                        ", 
+  "                                                                                        ###     # # #    #  #           !!!  ! !!!!  !!               ", 
+  "                                                                                      #  # #  # ##  ## # #  #           !  ! ! !  ! !  !              ", 
+  "                                                                                                                        !  ! ! !  ! !!!!              ", 
+  "                                                                                                                        !  ! ! !  ! !                 ", 
+  "                                                                                                                        !  ! ! !  !  !!!              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820+1-600-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820+1-600-300-1.0-grid-reference.json
new file mode 100644
index 0000000..7e9cbe5
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820+1-600-300-1.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "       !              #              $              %              &              '              (              )              *              +       ", 
+  "   !!!            ###            $$$            %%%            &&&            '''            (((            )))            ***            +++         ", 
+  "    !!             ##             $$             %%             &&             ''             ((             ))             **             ++         ", 
+  "    !!   !!        ##   ##        $$   $$        %%   %%        &&   &&        ''   ''        ((   ((        ))   ))        **   **        ++   ++    ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "    !! !!!!                                                                                                                                           ", 
+  "    !   !!                                                                                                                                            ", 
+  "     !    !        #                                                                                                                                  ", 
+  "                   # ####                                                                                                                             ", 
+  "                    ## ###        $                                                                                                                   ", 
+  "                                 $$$ $ $ $$                                                                                                           ", 
+  "                                  $  $$                                                                                                               ", 
+  "                                       $  $      %                                                                                                    ", 
+  "                                                 %% %%%%                                                                                              ", 
+  "                                                 %%% %%%         &                                                                                    ", 
+  "                                                                &&  &&&                                                                               ", 
+  "                                                                   &&&                                                                                ", 
+  "                                                                      &                                                                               ", 
+  "                                                                                ' ' '                                                                 ", 
+  "                                                                                ''''                                                                  ", 
+  "                                                                                            ((((  ((( ((                                              ", 
+  "                                                                                             ((  ( (   (                                              ", 
+  "                                                                                            (  (    (             )                                   ", 
+  "                                                                                                            )))) ))                                   ", 
+  "                                                                                                            ))) )))  )        *                       ", 
+  "                                                                                                                )           ***** **                  ", 
+  "                                                                                                                             *** *                    ", 
+  "                                                                                                                                   *                  ", 
+  "                                                                                                                                             +++++    ", 
+  "                                                                                                                                            +++  +    ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820+1-600-300-2.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820+1-600-300-2.0-grid-reference.json
new file mode 100644
index 0000000..f9fc998
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820+1-600-300-2.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "       !              #              $              %              &              '              (              )              *              +       ", 
+  "!!!!        !                $$$$$        $                &&&&&        &                (((((        (                *****        *                 ", 
+  " !          !                  $          $                  &          &                  (          (                  *          *                 ", 
+  " ! ! !! ! ! !                  $ $ $$ $ $ $                  & & && & & &                  ( ( (( ( ( (                  * * ** * * *                 ", 
+  " ! !!!! !!  !                  $ $$$$ $$  $                  & &&&& &&  &                  ( (((( ((  (                  * **** **  *                 ", 
+  " ! !      ! !                  $ $      $ $                  & &      & &                  ( (      ( (                  * *      * *                 ", 
+  " ! !!!!!!!! !!                 $ $$$$$$$$ $$                 & &&&&&&&& &&                 ( (((((((( ((                 * ******** **                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  " ! !! !!!! ! !!                                                                                                                                       ", 
+  " !  ! !  ! !!!!                                                                                                                                       ", 
+  " !  ! !  ! !                                                                                                                                          ", 
+  " !!!! !  ! !!!!             $  $                                                                                                                      ", 
+  "                            $  $                                                                                                                      ", 
+  "                            $  $$ $ $$ $$ $ $$ $                                                                                                      ", 
+  "                            $  $  $ $  $$$$ $$$$                                                                                                      ", 
+  "                            $  $  $ $  $    $                                                                                                         ", 
+  "                            $$ $  $ $  $$$$ $$$$             &&&&                                                                                     ", 
+  "                                                             &                                                                                        ", 
+  "                                                             &  & &  & & &&                                                                           ", 
+  "                                                             &  & & && &&&&                                                                           ", 
+  "                                                             &  &  &&  &                                                                              ", 
+  "                                                             &  &  &&  &&&&                                                                           ", 
+  "                                                                                                                                                      ", 
+  "                                                                                      (( ( ( ( (  ( (( ( (( (                                         ", 
+  "                                                                                      ((  ((((( ( ( (((( (  (                                         ", 
+  "                                                                                        ((((    ( ( (    (  (                                         ", 
+  "                                                                                      (((( ((((  (   ((( (  (                *                        ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                        * ** * ** * ** *              ", 
+  "                                                                                                                        *  * * *  * ****              ", 
+  "                                                                                                                        *  * * *  * *                 "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820-1-600-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820-1-600-300-1.0-grid-reference.json
new file mode 100644
index 0000000..7ca8ae2
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820-1-600-300-1.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+  "", 
+  "10", 
+  "9", 
+  "8", 
+  "7", 
+  "6", 
+  "5", 
+  "4", 
+  "3", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                           ! ! ! !    ", 
+  "                                                                                                                                           !!! !      ", 
+  "                                                                                                                           ###             !!! ! !    ", 
+  "                                                                                                                            ##                        ", 
+  "                                                                                                                            ##   #                    ", 
+  "                                                                                                             $ $ $ $                                  ", 
+  "                                                                                                             $$$ $                                    ", 
+  "                                                                                             %%%             $$$ $ $                                  ", 
+  "                                                                                              %%                                                      ", 
+  "                                                                                              %%   %                                                  ", 
+  "                                                                               & & & &                                                                ", 
+  "                                                                               &&& &                                                                  ", 
+  "                                                               '''             &&& & &                                                                ", 
+  "                                                                ''                                                                                    ", 
+  "                                                                ''   '                                                                                ", 
+  "                                                 ( ( ( (                                                                                              ", 
+  "                                                 ((( (                                                                                                ", 
+  "                                 )))             ((( ( (                                                                                              ", 
+  "                                  ))                                                                                                                  ", 
+  "                                  ))   )                                                                                                              ", 
+  "                   * * * *                                                                                                                            ", 
+  "                   *** *                                                                                                                              ", 
+  "   +++             *** * *                                                                                                                            ", 
+  "    ++                                                                                                                                                ", 
+  "    ++   +                                                                                                                                            ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                  )                              '                &                           $   $           #                       ", 
+  "     + ++ +        ** ** *       ))) ) ) ))      ( ( ((((       ''  ' '         &&&& &      %% %% %%% %     $$$ $$$$$$      ##### ##        ! ! !!    ", 
+  "    + + ++++       * ****         )  ))))))      (( ((((           ''''         &&& &       %%%% % %%  %    $$$$ $$          ### ###         !!! !    ", 
+  "     + ++ +         ******       ))  ) ))))      ( (((((           '  '         &&&& &      %%%% % %%  %    $$$ $$$  $       ### ###        ! !  !    ", 
+  "                                                                                                                $                                     ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820-1-600-300-2.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820-1-600-300-2.0-grid-reference.json
new file mode 100644
index 0000000..a1b4149
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820-1-600-300-2.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "7", 
+  "5", 
+  "3", 
+  "1", 
+  "2", 
+  "4", 
+  "6", 
+  "8", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                         !          !                 ", 
+  "                                                                                                                         ! !!!  !!!!!!                ", 
+  "                                                                                                                         ! !  ! !   !                 ", 
+  "                                                                                                                         ! !     !! !                 ", 
+  "                                                                                         #####                           ! !  !!  ! !                 ", 
+  "                                                                                           #          #                     !!  !!                    ", 
+  "                                                                                           # ###  ######                                              ", 
+  "                                                                                           # #  # #   #                                               ", 
+  "                                                                                           # #     ## #                                               ", 
+  "                                                           $$$$$                           # #  ##  # #                                               ", 
+  "                                                             $          $                     ##  ##                                                  ", 
+  "                                                             $ $$$  $$$$$$                                                                            ", 
+  "                                                             $ $  $ $   $                                                                             ", 
+  "                                                             $ $     $$ $                                                                             ", 
+  "                             %%%%%                           $ $  $$  $ $                                                                             ", 
+  "                               %          %                     $$  $$                                                                                ", 
+  "                               % %%%  %%%%%%                                                                                                          ", 
+  "                               % %  % %   %                                                                                                           ", 
+  "                               % %     %% %                                                                                                           ", 
+  "&&&&                           % %  %%  % %                                                                                                           ", 
+  " &          &                     %%  %%                                                                                                              ", 
+  " & &&&  &&&&&&                                                                                                                                        ", 
+  " & &  & &   &                                                                                                                                         ", 
+  " & &     && &                                                                                                                                         ", 
+  " & &  &&  & &                                                                                                                                         ", 
+  "    &&  &&                                                                                                                                            ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                               %                              $$$                                                            !                        ", 
+  "                            %  %                             $                                                                                        ", 
+  " &&&& &&&& &&&&            %%% %%%% %%%%%%% %%%%             $$$$ $  $ $$$$           #### ### #  ## ### ####           !!!! ! !!!! !!!!              ", 
+  " &  & &  & &  &             %  %  % %  %  % %  %             $  $ $  $ $  $           ##   #  # # # #  # #  #           !  ! ! !  ! !  !              ", 
+  " &  & &  & &                %  %  % %  %    %                $  $  $$  $               ####     # # #    #  #           !  ! ! !  ! !                 ", 
+  " &  & &  & &  &             %  %  % %  %%   %  %             $  $  $$  $  $           #  # #  # ##  ##   #  #           !  ! ! !  ! !!                ", 
+  "  &&   &    &&        '              %  %%   %%     (              $    $$        )    ##   ##   #    ##        *              !     !!       +       ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug2037-800-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug2037-800-300-1.0-grid-reference.json
new file mode 100644
index 0000000..dc69abd
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug2037-800-300-1.0-grid-reference.json
@@ -0,0 +1,87 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "3", 
+  "4", 
+  "8"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                             !                                                                          ", 
+  "                                                                                                                             ! ! !!!!!!                                                                 ", 
+  "                                               #######             $$$$$$$                                                                                                                              ", 
+  "                                               ## ###              $$ $$$                                                       !!!!            %%%%%  %  %%                                            ", 
+  "                                                  #                   $                                                           !!            %%%% %%%%%%                                             ", 
+  "                                               ## #                $$ $                                                                                                                                 ", 
+  "                                                #                   $                                                           !! !!            %%%%% %%%%                                             ", 
+  "                                               # ## ##             $ $$ $$                                                      !! !!              % %  %%                                              ", 
+  "                                               ## # ##             $$ $ $$                                                     !     !             %     %                                              ", 
+  "                                                                                                                                 ! !!!               % %%%                                              ", 
+  "                                                #####               $$$$$                                                                                                                               ", 
+  "                                                #                   $                                                           !!!!            % %% %%%%%%%                                            ", 
+  "                                                                                                                                !!!!            % %% %%%%%%%%                                           ", 
+  "                                                #  ##               $  $$                                                                                                                               ", 
+  "                                                                                                                                !!!!!!                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug2037-800-300-2.0-grid-reference.json b/tests/visual_tests/grids/text-bug2037-800-300-2.0-grid-reference.json
new file mode 100644
index 0000000..d9dbff1
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug2037-800-300-2.0-grid-reference.json
@@ -0,0 +1,86 @@
+{
+ "keys": [
+  "", 
+  "7", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                       !!                                                                               ", 
+  "                                                                                                                      !! !!!!!!! !! !! !!!!!!                                                           ", 
+  "                                                                                                                        !! !!  !!!!   !!! !                                                             ", 
+  "                                                                                                                      !!! ! !  ! !!  ! !!!! !                                                           ", 
+  "                                              ##   #  #           $$   $  $                                                                                                                             ", 
+  "                                           ## ##   #  #        $$ $$   $  $                                                                                                                             ", 
+  "                                                                                                                             !!!! !!!!                                                                  ", 
+  "                                                                                                                               !!!                                                                      ", 
+  "                                               #  #    #           $  $    $                                                  !!!!!! !                                                                  ", 
+  "                                              ## ##   ##          $$ $$   $$                                                                                                                            ", 
+  "                                            # ## ##  # #        $ $$ $$  $ $                                                                                                                            ", 
+  "                                             ### ##   ##         $$$ $$   $$                                                   !   ! !!                                                                 ", 
+  "                                                                                                                              !!!     !                                                                 ", 
+  "                                                                                                                              ! !  !  !                                                                 ", 
+  "                                           ###### ## ## ##     $$$$$$ $$ $$ $$                                                                                                                          ", 
+  "                                            # ## ##    # #      $ $$ $$    $ $                                                                                                                          ", 
+  "                                            # ## ### ## ##      $ $$ $$$ $$ $$                                                                                                                          ", 
+  "                                                         #                   $                                               !  !   !  !!                                                               ", 
+  "                                                                                                                             !  !   !  !!                                                               ", 
+  "                                              #####   #           $$$$$   $                                                                                                                             ", 
+  "                                              ### #  ##           $$$ $  $$                                                                                                                             ", 
+  "                                              ###### #            $$$$$$ $                                                    !!                                                                        ", 
+  "                                                                                                                              !!! !! !                                                                  ", 
+  "                                                                                                                              !!! !!                                                                    ", 
+  "                                              # # ## ###          $ $ $$ $$$                                                        !                                                                   ", 
+  "                                             ### # #   #         $$$ $ $   $                                                                                                                            ", 
+  "                                             # # ## # #          $ $ $$ $ $                                                !         !                                                                  ", 
+  "                                                    #                   $                                                  !! !!!! !!!! !!                                                              ", 
+  "                                                                                                                           ! !! !!! !!! !!                                                              ", 
+  "                                                                                                                           !! ! !! !!! !!!                                                              ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-charplacement-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-charplacement-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..c622e96
--- /dev/null
+++ b/tests/visual_tests/grids/text-charplacement-512-512-1.0-grid-reference.json
@@ -0,0 +1,148 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "5", 
+  "6", 
+  "9", 
+  "1", 
+  "11", 
+  "10", 
+  "7", 
+  "8", 
+  "13", 
+  "12", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                     !                               #          $                                %%%       %                    ", 
+  "          &           !                                                                                %%  %%%                  ", 
+  "                      !                             #            $                                        %%%%                  ", 
+  "         &             !                                                                                  %%%%%%                ", 
+  "                       !                           #              $                                       % %% %%%%             ", 
+  "        &               !                                                                                    %%%%%%             ", 
+  "                        !                         #                $                                           %%%%%%%%         ", 
+  "       &                 !                                          $$                                           %% %%          ", 
+  "                         !                      ####              $$$$$                                           %%%% %%       ", 
+  "      &                   !                     ####              $$$$$                                            %  %%%       ", 
+  "                          !                    ####                $$$                                               %%%%%      ", 
+  "     &                     !                   ####                $$$$                 ''''     ''                  % %%%      ", 
+  "                           !                  ###                   $ $                       '''''                   %%%%%     ", 
+  "    &                       !                 # ##                  $$$$                        '''''                  %%%%     ", 
+  "                            !                 ###                    $$$$                       ' ''''                  %%%%    ", 
+  "   &                         !               ####                    $$$$                         ''''''                 %%%%   ", 
+  "                             !              ####                      $$$$                         ''''''                  %%   ", 
+  "  &                           !            #####                       $ $$                          '''''''              %%%%  ", 
+  "                              !             ###                        $$$                            '''''                %%   ", 
+  " &                             !          #####                        $                                '''' '             %%%% ", 
+  "                               !           ###                            $$$                              '''             %%%% ", 
+  "&                               !            #                          $$$$$                              '''''           %%%% ", 
+  "&                                        ####                            $$$$                               '''               % ", 
+  " &                             !         ####                            $$$$                               '''''             % ", 
+  " &                                        ###                            $$$                                 ''''               ", 
+  "  &                           !            ##                            $$$                                 '''''              ", 
+  "  &                                       ###                            $$$                                  ''''             %", 
+  "   &                         !            ###                            $$$                                    '''            %", 
+  "   &                                       ##                              $                                   '' '            %", 
+  "    &                       !             ###                            $$$                                    '''            %", 
+  "    &                                     ###                              $                                    ''''           %", 
+  "     &                     !              ###                            $$$                                     '''            ", 
+  "     &                                   ####                            $$$                                     '''            ", 
+  "      &                   !              # #                             $$$                                                    ", 
+  "      &                                  ####                            $$$                                                    ", 
+  "       &                 !                                                                                          '           ", 
+  "       &                                                                                                            '           ", 
+  "        &               !                                                                                           '           ", 
+  "        &                                                                                                           '           ", 
+  "         &             !                                                                                                        ", 
+  "         &                                                                                                                      ", 
+  "          &           !                                                                                                         ", 
+  "          &                                                                                                                     ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                    '           ", 
+  "                                                                                                                    '           ", 
+  "                                                                                                                    '           ", 
+  "                                                                                                                    '           ", 
+  "                                                                                                                                ", 
+  "                                                                                                                   '            ", 
+  "                                                                                                                  '''           ", 
+  "                                                                                                                  ''''          ", 
+  "                                                                                                                  '''          (", 
+  "                                                                                                                 '''           (", 
+  "                                                                                                                 '''           (", 
+  "                                                                                                                ''''           (", 
+  "                                                                                                               '''''           (", 
+  "                                                                                                               ''''             ", 
+  "                                                                                                              ''''              ", 
+  "                                                                                                            ''''''            ( ", 
+  "                                         ))))                             ***                              ' ''''             ( ", 
+  "                                          ) )                             ***                              '''''             (( ", 
+  "                                         ))))                             ***                            '  ''              ((((", 
+  "                                         )))                              ***                            ''' ''             ((((", 
+  "                                         ) )                              *                             ''''               (((  ", 
+  "                                         )))                              ***                          '''''               (((( ", 
+  "                                         )))                              ***                         ''''''              ((((  ", 
+  "                                         )))                              ***                   '''''''''                 (( (  ", 
+  "                                         )))                              ***                   '''''''''                ((((   ", 
+  "                                         )))                              ***                   ''''''                  ((((    ", 
+  "                                         ) )                              ***                '' ''''                   (((((    ", 
+  "                                         ))))                            ****         ''''       '                   (( ((((    ", 
+  "                                                                         ****                                        (((((      ", 
+  "                                           )))                          *****                                      (  (((       ", 
+  "                                          ))))                            ***                                      ((( ((       ", 
+  "                                          )))))                        ***                                         (((          ", 
+  "                                           ))))                         ***                                      ((( ((         ", 
+  "                                           ))))                         * **                                    ((((((          ", 
+  "                                           ))))                         ***                               ((( ((((((            ", 
+  "                                           ))))                       ****                                (((((((((             ", 
+  "                                            ))))                      ****                                (((((((               ", 
+  "                                             ))))                     ****                            (((  ( ((                 ", 
+  "                                             ))))                    ***                         (         (                    ", 
+  "                 +                +           )))                    ***                                                        ", 
+  "+       ++       +       ++       +           ))))                 *****                                                        ", 
+  "        ++      +        ++      + +           ))))               ******                                                        ", 
+  " +     +        + +              + +           ))))                ***                                                          ", 
+  "       +  +             +  +                    )))                * **                                                         ", 
+  "  +            +   +            +   +             )                *                                                            ", 
+  "  +   +    +       +   +    +   +                  )              *                                                             ", 
+  "      +    +  +        +    +  +     +             )              *                                                             ", 
+  "   + +        +     +          +     +              )            *                                                              ", 
+  "     +      +         +      +                      )            *                                                              ", 
+  "    +        +       +        +       +              )          *                               ,                               ", 
+  "    +                +        +                      )          *                               ,,,                             ", 
+  "                                                                                              ,,,,,,,                           ", 
+  "                                                                                           ,,  ,,,,,, ,,                        ", 
+  "                                                                                         ,     , ,,,,,,,                        ", 
+  "                                                                                        ,          ,,,,,,,,,                    ", 
+  "                                                                                       ,             ,,,,,,  ,                 ,", 
+  "                                                                                                       ,,,,,,,                , ", 
+  "                                                                                                         ,  ,,,,             ,  ", 
+  "                                                                                                           ,,,,,,,          ,   ", 
+  "                                                                                                             ,,,,,,,,,,,,,,     ", 
+  "                                                                                                             , ,,,, ,,,,,,      ", 
+  "                                                                                                               ,,,, , ,,,,      ", 
+  "                                                                                                                      ,         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                   -                                         -                                          -                       ", 
+  "       ---  -  -   -  - - -    -  -               --- -  -  --  ---- -  - -  -               --- -  -  --  --- -   - -  -       ", 
+  "--------------------------------------------------------------------------------------------------------------------------------", 
+  "       -------------  ------- - ----              ---- -------  -------- ------              ---- ----- -  ------ --------      ", 
+  "       ------ ------  ------- - ----              - ----------  - ------ ------              - ----------  - ---- ---- --       ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-charplacement-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-charplacement-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..62ee024
--- /dev/null
+++ b/tests/visual_tests/grids/text-charplacement-512-512-2.0-grid-reference.json
@@ -0,0 +1,148 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "5", 
+  "6", 
+  "9", 
+  "1", 
+  "11", 
+  "10", 
+  "7", 
+  "8", 
+  "13", 
+  "12", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                     !                               #          $                                %%%%                           ", 
+  "          &           !                              #          $                                      %%%                      ", 
+  "                      !                             #            $                                        %%%                   ", 
+  "         &             !                            #            $                                           %%                 ", 
+  "                       !                           #              $                                            %%               ", 
+  "        &               !                          #              $                                              %%             ", 
+  "                        !                         #                $                                               %            ", 
+  "       &                 !                        #                $                                                %           ", 
+  "                         !                       #                  $                                                %          ", 
+  "      &                   !                      #                  $                                                 %%        ", 
+  "                          !                     #                    $                                                 %        ", 
+  "     &                     !                    #                    $                 ''''''                           %       ", 
+  "                           !                   #                      $                      '''                         %      ", 
+  "    &                       !                  #                      $                          ''                       %     ", 
+  "                            !                 #                        $                           ''      ''             %     ", 
+  "   &                         !                #                        $                             ''    '''             %    ", 
+  "                             !               #                          $                              ''''''''            %    ", 
+  "  &                           !              #                          $                                ''''''             %   ", 
+  "                              !             #                            $                              '''''''             %   ", 
+  " &                             !            #                            $                              ''''''' ''           %  ", 
+  "                               !           #                              $                              '''''''''           %  ", 
+  "&                               !          #                              $                               ''''''''            % ", 
+  "&                                                                                                            '''  ''          % ", 
+  " &                             !                                                                            '''  '''          % ", 
+  " &                                                                                                          ''''''''            ", 
+  "  &                           !                                                                              '''''  ''         %", 
+  "  &                                                                                                           '''  '''         %", 
+  "   &                         !                                                                                ''''''''         %", 
+  "   &                                                                                                           '''''           %", 
+  "    &                       !                                                                                   '''''''        %", 
+  "    &                                                                                                             ''''''       %", 
+  "     &                     !                                                                                     '''''''        ", 
+  "     &                                                                                                           '''''''        ", 
+  "      &                   !                                                                                      '''''''        ", 
+  "      &                                                                                                           ''''''        ", 
+  "       &                 !                                                                                        '''           ", 
+  "       &                                                                                                         ''''''''       ", 
+  "        &               !                                                                                        ''''''''       ", 
+  "        &                                                                                                           ''''        ", 
+  "         &             !                                                                                          '''''         ", 
+  "         &                                                                                                       ''''''''       ", 
+  "          &           !                                                                                          ''''''''       ", 
+  "          &                                                                                                      '''''          ", 
+  "                                                                                                                                ", 
+  "                                                                                                                    '           ", 
+  "                                                                                                                    '           ", 
+  "                                                                                                                ''''''          ", 
+  "                                                                                                                '''''''''       ", 
+  "                                                                                                                  '''''''       ", 
+  "                                                                                                                  ''' '''       ", 
+  "                                                                                                                  '''''''       ", 
+  "                                                                                                                  ''''''        ", 
+  "                                                                                                                   ''''         ", 
+  "                                                                                                                ''''''          ", 
+  "                                                                                                                '''''''        (", 
+  "                                                                                                                '''''''        (", 
+  "                                                                                                                '''''''        (", 
+  "                                                                                                                 ''''''        (", 
+  "                                                                                                              ''''''''         (", 
+  "                                                                                                             ''''''            (", 
+  "                                                                                                             ''' '''            ", 
+  "                                                                                                         ''' '''  ''          ( ", 
+  "                                                                                                        ''''''''''''          ( ", 
+  "                                                                                                       ''''''''''''             ", 
+  "                                                                                                       ''' ''''              (  ", 
+  "                                                                                                       ''''''''''            (  ", 
+  "                                                                                                        ''''' '''           (   ", 
+  "                                                                                                        '''''               (   ", 
+  "                                                                                                       '  ''''             (    ", 
+  "                                                                                                     ''    '''             (    ", 
+  "                                                                                                   ''                     (     ", 
+  "                                                                                                '''                      (      ", 
+  "                                                                                             ''                          (      ", 
+  "                                                                                      '''''                             (       ", 
+  "                                                                                                                       (        ", 
+  "                                           )                              *                                           (         ", 
+  "                                           )                              *                                          (          ", 
+  "                                            )                            *                                          (           ", 
+  "                                            )                            *                                        ((            ", 
+  "                                             )                          *                                        (              ", 
+  "                                             )                          *                                      ((               ", 
+  "                                              )                        *                                     ((                 ", 
+  "                                              )                        *                                 (((                    ", 
+  "                                               )                      *                              ((((                       ", 
+  "                                               )                      *                          ((                             ", 
+  "+                +                +             )                    *                                                          ", 
+  "+       ++       +       ++       +             )                    *                                                          ", 
+  " +      ++      + +      ++      + +             )                  *                                                           ", 
+  " +     +        + +     +  +     + +             )                  *                                                           ", 
+  " +     +  +    +        +  +                      )                *                                                            ", 
+  "  +       +    +   +    +  +    +   +             )                *                                                            ", 
+  "  +   +    +   +   +   +    +   +   +              )              *                                                             ", 
+  "   +  +    +  +     +  +    +  +     +             )              *                                                             ", 
+  "   + +        +     + +      + +     +              )            *                                                              ", 
+  "   + +      ++        +      +                      )            *                                                              ", 
+  "    +       ++       ++      ++       +              )          *                                                               ", 
+  "    +        +       +        +       +              )          *                                                               ", 
+  "                                                                                             ,,,,,                              ", 
+  "                                                                                          ,,,      ,,,                          ", 
+  "                                                                                         ,,           ,,                        ", 
+  "                                                                                        ,               ,                       ", 
+  "                                                                                       ,                 ,,                    ,", 
+  "                                                                                      ,                    ,                  , ", 
+  "                                                                                                            ,,              ,,  ", 
+  "                                                                                                              ,            ,,   ", 
+  "                                                                                                               ,,,,     ,,,     ", 
+  "                                                                                                                    ,,,,        ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                          --                                                                    ", 
+  "                                    -----                 --    ---  --                                                         ", 
+  "                                    ------  --   ---    ----    ---- --  ---    -- ---   ---                                    ", 
+  "                                    -- --------------- -----    ---- -- ----- --------- -----                                   ", 
+  "--------------------------------------------------------------------------------------------------------------------------------", 
+  "                                    ----- --  ----------  --    ------------- -- --  --------                                   ", 
+  "                                    -- -----  ----------- --    -- ---------- -- --  --------                                   ", 
+  "                                    --  --------------------    -- ---------- -- --  --------                                   ", 
+  "                                    --  -------------- -----    --  --------- -- --  -- -----                                   ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-data-binding-500-500-1.0-grid-reference.json b/tests/visual_tests/grids/text-data-binding-500-500-1.0-grid-reference.json
new file mode 100644
index 0000000..16d309f
--- /dev/null
+++ b/tests/visual_tests/grids/text-data-binding-500-500-1.0-grid-reference.json
@@ -0,0 +1,134 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                    !!!!!!!                                                                                  ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!                                                                 ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!                                                                 ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!                                                                 ", 
+  "                      !   !          !!!!!!!!!!!!!!!!!!!!!!!  !!       !    !          !!   !   !            !               ", 
+  "             !  !!!! !  !! !!  !!! !!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!! !!!!! !  !!  !!   !   !!  !!  !!               ", 
+  "            !!  ! !!   !!!!    !  !!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!! !! !!!!!!! !!! ! ! !!   !   !   !!  !   !!               ", 
+  "            !!!!! !   ! !! ! !!! !  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!! !  !!   !   !   !   !    !               ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!!!                                                                 ", 
+  "             ! !!          ! !   ! !!!!!!!!!!!!!!!!!!!!!!!!                                                                  ", 
+  "               !!!   ! ! !!  !  !!  !!!!! ! !!     !!!!!  !                                        !                         ", 
+  "            ! !!!!  ! !! !!!!!! !!!!!!!!!!!!!!  !!!!!  !!!!! !                                 !! !                          ", 
+  "                                                                                             ! !!  !                         ", 
+  "                                                                                      ! !!! !   !                            ", 
+  "                                                                                   !!  !!! !!!                               ", 
+  "                                                                                   !!  !!                                    ", 
+  "                                                                         !!!!  ! ! !                                         ", 
+  "                                                                      !! ! ! !!  !                                           ", 
+  "                                                                ! !!!!!! !   !                                               ", 
+  "                                                           ! !!   !! !!                                                      ", 
+  "                                                            !!!  !!                                                          ", 
+  "                                                     !!   !!!                                                                ", 
+  "                                           !    !!! !!!  !                                                                   ", 
+  "                                         !  !!!!!  !!!!                                                                      ", 
+  "                                         !! !!!!                                                                             ", 
+  "                                          !                                                                                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                           !!!  !  !  !             !!   ! !   !                                             ", 
+  "                                            ! !! !!!!! !!           !!!!!!!! !!!!                                            ", 
+  "                                              ! !  !!  !            !    !!   !!!                                            ", 
+  "                                               !!                                                                            ", 
+  "                                                !                                                                            ", 
+  "                                            ! !! !!!!! !!            ! ! !!!! ! !!                                           ", 
+  "                                             !!  !  !! !            !!!  !!!!!!!!                                            ", 
+  "                                            ! !!!! !!!!!!            ! !!!!!! ! !!                                           ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-data-binding-500-500-2.0-grid-reference.json b/tests/visual_tests/grids/text-data-binding-500-500-2.0-grid-reference.json
new file mode 100644
index 0000000..c78f35f
--- /dev/null
+++ b/tests/visual_tests/grids/text-data-binding-500-500-2.0-grid-reference.json
@@ -0,0 +1,133 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-displacement-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-displacement-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..5470d17
--- /dev/null
+++ b/tests/visual_tests/grids/text-displacement-512-512-1.0-grid-reference.json
@@ -0,0 +1,162 @@
+{
+ "keys": [
+  "", 
+  "3", 
+  "4", 
+  "15", 
+  "14", 
+  "22", 
+  "23", 
+  "25", 
+  "2", 
+  "13", 
+  "16", 
+  "1", 
+  "5", 
+  "12", 
+  "9", 
+  "6", 
+  "11", 
+  "21", 
+  "8", 
+  "10", 
+  "26", 
+  "7", 
+  "24", 
+  "17", 
+  "18", 
+  "19", 
+  "20"
+ ], 
+ "data": {}, 
+ "grid": [
+  "        !!!!!!!!!!!!##                             $%%%%%%%%%%%%                    &&&&&&&&&&&       '             ((((((((((((", 
+  "     )   ) !         ##  ##                       $  %%    %                                  &       ''                        ", 
+  "     )) )               ###                      $   %%%%%%%                                          '                         ", 
+  "    )) )                 ###                    $    %%%%%%%                       &                                            ", 
+  " )))) )                   ###                  $ $             **                  &         &                                  ", 
+  " ))) )                     ####               $  $$           ***                  &         &                                  ", 
+  "  ) )                       ##               $  $$$            ***                           &                                  ", 
+  "   )                                        $  $$$              ***                                                             ", 
+  "  )                                      + $ $$$$                ***              &                                             ", 
+  "))                                       +$   $                   **             &&&        &                                   ", 
+  "))                                       +                                        &         &          ''''''''''               ", 
+  ",                             --        +++                                       &                                             ", 
+  ",                             -----      ++++                        ..                                                         ", 
+  ",                               ---      ++++                        ..                                                         ", 
+  ",                               --       +++                         ..                                                         ", 
+  ",                               --       +++                         ..                                                         ", 
+  ",                               --       +++                         ..                                                         ", 
+  ",                               --       +++                         ..                                                         ", 
+  ",                               ---      ++++                        ..                                                         ", 
+  ",                                      //+                             ..                                                       ", 
+  ",                                       /+                                                                                      ", 
+  ",                             0          //   /                   1    1          2         2                                   ", 
+  ",                            0            /  ///                  11  1           2                                             ", 
+  "                            0                ///                 111 1                                                          ", 
+  "                           0                  ///               111 1                        2                                  ", 
+  " 33                       0 00                 ////           1111 1               2         2                                  ", 
+  " 333                     0 0000                 ///            11 1                2         2                                  ", 
+  "  333                   0 0000                   /               1                 2                                            ", 
+  "   3333                0 000                         4444444    1                                                               ", 
+  "    333               0  000                         4444444   1                   22         2                      55         ", 
+  "     3             6 0    0                         4         1                    22         2        77             5         ", 
+  "                   6                                44                              2                   7             5         ", 
+  "            66    6                                                                 2                                 5         ", 
+  "            6666666                                                                 2                                 5         ", 
+  "            6 66666                                                                                                             ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                    8888 8888888                                                                                                ", 
+  "                 8888888 8888888888                                                                                             ", 
+  "                8 88          8888888                                                                                           ", 
+  "              888 8 888888888888  8888                                                                                          ", 
+  "           888888 8              8 888888                                                                                       ", 
+  "          8888  8                  8 8 8888                                                                                     ", 
+  "        8888  8                      8  8888                                                                                    ", 
+  "       888  8                          8  888                                                                                   ", 
+  "      888 8                              88888                                                                                  ", 
+  "    888888                                8 888                                                                                 ", 
+  "    88888                                  8 888                                                                                ", 
+  "   888 8                                    88888                                                                               ", 
+  "  888 8                                      88888                                                                              ", 
+  " 88888                                        88 88                                                                             ", 
+  " 88 8                                          88888                                                                            ", 
+  "8888                                            8888                                                                            ", 
+  "888                                              88                                                                             ", 
+  "88                                                8                                                                             ", 
+  "88                                                 8                                                                            ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "9                                                                                                                               ", 
+  "99                                                9                                                                             ", 
+  " 9                                               9                                                                              ", 
+  "                                                9                                                                               ", 
+  "                                               9                                                                                ", 
+  "                                              9                                                                                 ", 
+  "                                             9                                                                                  ", 
+  "                                            9                                                                                   ", 
+  "                                           9                                                                                    ", 
+  "                                          9                                                                                     ", 
+  "                                         9                                                                                      ", 
+  "           9                            9                                                                                       ", 
+  "             9                        9                                                                                         ", 
+  "               9                    9                                                                                           ", 
+  "                 9    :      ;    9                                                                                             ", 
+  "                   9 :        ; 9 ;                                                                                             ", 
+  "                   ::          ;;;;                                                                                             ", 
+  "                   ::          ;;;;;;                                                                                           ", 
+  "                  :              ;;;;                                                                                           ", 
+  "                 :                ; ;;;                                                                                         ", 
+  "                :                  ;;; ;                                                                                        ", 
+  "               :                    ; ;;;                                                                                       ", 
+  "              :                      ; ;;                                                                                       ", 
+  "             :                        ;;;;                                                                                      ", 
+  "            :                          ;;;;;                                                                                    ", 
+  "           :                            ;;; ;                                                                                   ", 
+  "          :                              ;;;;                                                                                   ", 
+  "                                           ;;                                                                                   ", 
+  "         :                                ;;;;                                                                                  ", 
+  "                                            ;;                                                                                  ", 
+  "        :                                  ;;;;                                                                                 ", 
+  "                                             ;;                                                                                 ", 
+  "       :                                    ;;;                                                                                 ", 
+  "                                               ;;                                                                               ", 
+  "      :                                      ;;;;                                                                               ", 
+  "                                               ;;                                                                               ", 
+  "     :                                        ;;;;                                                                              ", 
+  "     :                                        ;;;;                                                                              ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                        ; ;;                                                                              ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                        ;;;                                                                               ", 
+  "     :                                         ;;                                                                               ", 
+  "      :                                      ; ;;                                                                               ", 
+  "      :                                        ;;                                                                               ", 
+  "       :                                    ; ;;                                                                                ", 
+  "       :                                     ;;;                                                                                ", 
+  "        :                                  ; ;;;                                                                                ", 
+  "        :                                   ;;                                                                                  ", 
+  "         :                                ;                                                                                     ", 
+  "         :                                 ;;;                                                                                  ", 
+  "          :                              ; ;;;                                                                                  ", 
+  "                                          ;;;                                                                                   ", 
+  "                                         ;;;                                                                                    ", 
+  "                                        ;;;                                                                                     ", 
+  "                                        ;;;                                                                                     ", 
+  "                                      ;;;                                                                                       ", 
+  "                                     ;;;                                                                                        ", 
+  "                                    ;;;;                                                                                        ", 
+  "                                   ;;;                                                                                          ", 
+  "                                  ;;;                                                                                           ", 
+  "                                 ;;;                                                                                            "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-displacement-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-displacement-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..8a89da9
--- /dev/null
+++ b/tests/visual_tests/grids/text-displacement-512-512-2.0-grid-reference.json
@@ -0,0 +1,160 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "3", 
+  "4", 
+  "15", 
+  "14", 
+  "22", 
+  "23", 
+  "25", 
+  "13", 
+  "16", 
+  "1", 
+  "12", 
+  "6", 
+  "9", 
+  "11", 
+  "21", 
+  "26", 
+  "8", 
+  "10", 
+  "24", 
+  "17", 
+  "18", 
+  "19", 
+  "20"
+ ], 
+ "data": {}, 
+ "grid": [
+  "  !!!!!!  ##########$$ $$$$$$$                   %%%&&&&&&&&&&&&&&&                 '''''''''''       (          )))))))))))))))", 
+  "  !!!!!  !           $$$ $$$$$                  %%%       &&  **                    '         '       (                 ))      ", 
+  "!!!!!!  !            $$$  $$$$$$                %%%%           **                             '      ((((                       ", 
+  "!!!!!  !              $$$ $$$$$$                %%%%%%      **  **                 '                 (((                        ", 
+  "!!!!  !                 $$  $$$$$$$            %   %%%%    ****  **                '         '        ((                        ", 
+  "!!!  !                   $$ $$$$$$$           %    %%%%%  *****   **               '         '        (                         ", 
+  "!!  !                     $$  $$$$       +   %   %%%%%%%  ******   **             ''         '        (                         ", 
+  "!!!!                       $$ $$$        +  %    %%%%%%    *****    ***          '''         '        (                         ", 
+  "!!!!                        $$           + %   %%%%%%       ******   ***        '''''                 (                         ", 
+  " !!!                         $$          +%    %%%%%%        *****   ***          ' '       '         (                         ", 
+  "! !                           $          +  %%%%%%%           ****** * **         '         '         (((((((((((               ", 
+  ",                                        +  %%%%%%%            *******  **       ''                                             ", 
+  ",                                      +++++%%%%%%              *****    **      ''                                             ", 
+  ",                                       +++  %%%                 ***      **     '                                              ", 
+  ",                                       ++    %%                  *              '                                              ", 
+  ",                                        +                                       '                                              ", 
+  ",                                        +                             --                                                       ", 
+  ",,                               ..   /  +    //                  00   --                                                       ", 
+  ",,                              ..    // +   ////                 000 ----                                                      ", 
+  ",                              ..      //+  /////                00000 --                                                       ", 
+  ",                           . ..        /+  //////              000000 --         11111111111                         2222222222", 
+  "33                          ...          /// /////             000000  --         1         1                         2         ", 
+  ",33                         ...           //////////          000000  0--         1         1                         2         ", 
+  ", 33                        .....        //// //////         000000  0 --         1                                   2         ", 
+  "3  33                      .   ...          //  /////     0000000   0  --                    1                        2         ", 
+  "3   33                    .    ....          // ////////  0000000  0   --          1         1                        2         ", 
+  "33   33                  .    .....           // //////   000000  0                1         1                        2         ", 
+  "333   33                .    ......            // ////     000   0                 11        1                       22         ", 
+  "3333   3333            .    .....               // //       00000                 1111                              2222        ", 
+  "33333  333            .    ......                //  4        000                 111         1         55          2 222       ", 
+  " 3333   333          .  ........               444444444     0000                   1         1   555555555           2         ", 
+  " 3333333  33           .......                 444444444    00  0                   1             555555555           2         ", 
+  "  333333   33          .......                       44    00                       1                   55            2         ", 
+  "   3333     33          .....                             00                        1                                 2         ", 
+  "    33       3           ..                               0                         11                                2         ", 
+  "                                                                                     1                                2         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                    666666666666                                                                                                ", 
+  "                  6             66                                                                                              ", 
+  "                6                 66                                                                                            ", 
+  "              6                     66                                                                                          ", 
+  "            6                         66                                                                                        ", 
+  "          6                             66                                                                                      ", 
+  "         6                                6                                                                                     ", 
+  "        6                                  6                                                                                    ", 
+  "       6                                    6                                                                                   ", 
+  "      6                                      6                                                                                  ", 
+  "     6                                        6                                                                                 ", 
+  "    6                                          6                                                                                ", 
+  "  66                                            6                                                                               ", 
+  "6666                                             6                                                                              ", 
+  " 666                                              6                                                                             ", 
+  "666                                                6                                                                            ", 
+  "6                                                                                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "7                                                                                                                               ", 
+  "777                                               7                                                                             ", 
+  " 777                                             7                                                                              ", 
+  "7777                                            7                                                                               ", 
+  "   77                                          7                                                                                ", 
+  "    77                                        7                                                                                 ", 
+  "     77                                      7                                                                                  ", 
+  "      77                                    7                                                                                   ", 
+  "       77                                  7                                                                                    ", 
+  "        77                                7                                                                                     ", 
+  "         77                              7                                                                                      ", 
+  "           7                            7                                                                                       ", 
+  "             7                        7                                                                                         ", 
+  "               7       8   99       7                                                                                           ", 
+  "                 7    8     99    7                                                                                             ", 
+  "                   7 8       99 7                                                                                               ", 
+  "                  8 877777777799 9                                                                                              ", 
+  "                  88           999                                                                                              ", 
+  "                 8888          9999                                                                                             ", 
+  "                 88              99                                                                                             ", 
+  "                8                  9                                                                                            ", 
+  "               8                    9                                                                                           ", 
+  "              8                      9                                                                                          ", 
+  "             8                        9                                                                                         ", 
+  "            8                          9                                                                                        ", 
+  "           8                            9                                                                                       ", 
+  "          8                              9                                                                                      ", 
+  "          8                              9                                                                                      ", 
+  "         8                                9                                                                                     ", 
+  "         8                                9                                                                                     ", 
+  "        8                                  9                                                                                    ", 
+  "        8                                  9                                                                                    ", 
+  "       8                                    9                                                                                   ", 
+  "       8                                    9                                                                                   ", 
+  "      8                                      9                                                                                  ", 
+  "      8                                      9                                                                                  ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "     8                                        9                                                                                 ", 
+  "      8                                      9                                                                                  ", 
+  "      8                                      9                                                                                  ", 
+  "       8                                    9                                                                                   ", 
+  "       8                                    9                                                                                   ", 
+  "        8                                  9                                                                                    ", 
+  "        8                                  9                                                                                    ", 
+  "         8                                9                                                                                     ", 
+  "         8                                9                                                                                     ", 
+  "          8                              9                                                                                      ", 
+  "          88                            99                                                                                      ", 
+  "           88                          99                                                                                       ", 
+  "            88                        99                                                                                        ", 
+  "             88                      99                                                                                         ", 
+  "              88                    99                                                                                          ", 
+  "               88                  99                                                                                           ", 
+  "                88                99                                                                                            ", 
+  "                 88              99                                                                                             ", 
+  "                  88            99                                                                                              ", 
+  "                   88          99                                                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-expressionformat-color-800-100-1.0-grid-reference.json b/tests/visual_tests/grids/text-expressionformat-color-800-100-1.0-grid-reference.json
new file mode 100644
index 0000000..8c07d56
--- /dev/null
+++ b/tests/visual_tests/grids/text-expressionformat-color-800-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          !                   #                   $                   %                   &                   '                   (                   )                   *                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "        !        !          #        #          $        $          %        %          &        &          '        '          (        (          )        )          *        *          +        +  ", 
+  "   !!  !!   !!   !     ##  ##   ##   #     $$  $$   $$   $     %%  %%   %%   %     &&  &&   &&   &     ''  ''   ''   '     ((  ((   ((   (     ))  ))   ))   )     **  **   **   *     ++  ++   ++   +  ", 
+  "    !   !   !  ! !      #   #   #  # #      $   $   $  $ $      %   %   %  % %      &   &   &  & &      '   '   '  ' '      (   (   (  ( (      )   )   )  ) )      *   *   *  * *      +   +   +  + +  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "             !                   #                   $                   %                   &                   '                   (                   )                   *                   +      ", 
+  "        !! ! !              ## # #              $$ $ $              %% % %              && & &              '' ' '              (( ( (              )) ) )              ** * *              ++ + +      ", 
+  "       !!! !!!             ### ###             $$$ $$$             %%% %%%             &&& &&&             ''' '''             ((( (((             ))) )))             *** ***             +++ +++      ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-expressionformat-color-800-100-2.0-grid-reference.json b/tests/visual_tests/grids/text-expressionformat-color-800-100-2.0-grid-reference.json
new file mode 100644
index 0000000..208a214
--- /dev/null
+++ b/tests/visual_tests/grids/text-expressionformat-color-800-100-2.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7", 
+  "8", 
+  "9", 
+  "10"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "          !                   #                   $                   %                   &                   '                   (                   )                   *                   +         ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "      !                   #                   $                   %                   &                   '                   (                   )                   *                   +             ", 
+  "      !    !            ! #    #            # $    $            $ %    %            % &    &            & '    '            ' (    (            ( )    )            ) *    *            * +    +        ", 
+  "!!  !!!   !!!  ### ###!!###   ###  $$$ $$$##$$$   $$$  %%% %%%$$%%%   %%%  &&& &&&%%&&&   &&&  ''' '''&&'''   '''  ((( (((''(((   (((  ))) )))(()))   )))  *** ***))***   ***  +++ +++**+++   +++  ++  +", 
+  " ! !  !    !  !# !#!!# #! #    #  #$ #$##$ $# $    $  $% $%$$% %$ %    %  %& %&%%& &% &    &  &' &'&&' '& '    '  '( '(''( (' (    (  () ()(() )( )    )  )* )*))* *) *    *  *+ *+**+ +* +    +  +  + +", 
+  "!! !  !    !  !#!!#### #! #    #  #$##$$$$ $# $    $  $%$$%%%% %$ %    %  %&%%&&&& &% &    &  &'&&'''' '& '    '  '(''(((( (' (    (  ()(()))) )( )    )  )*))**** *) *    *  *+**++++ +* +    +  ++++  ", 
+  "   !  !    !  !#  #! ! #! #    #  #$  $# # $# $    $  $%  %$ $ %$ %    %  %&  &% % &% &    &  &'  '& & '& '    '  '(  (' ' (' (    (  ()  )( ( )( )    )  )*  *) ) *) *    *  *+  +* * +* +    +  +    +", 
+  "!!  !!!    !!  #!!!###! ###    ##  $###$$$# $$$    $$  %$$$%%%$ %%%    %%  &%%%&&&% &&&    &&  '&&&'''& '''    ''  ('''(((' (((    ((  )((()))( )))    ))  *)))***) ***    **  +***+++* +++    ++  +++++", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-font-features-500-500-1.0-grid-reference.json b/tests/visual_tests/grids/text-font-features-500-500-1.0-grid-reference.json
new file mode 100644
index 0000000..46c069c
--- /dev/null
+++ b/tests/visual_tests/grids/text-font-features-500-500-1.0-grid-reference.json
@@ -0,0 +1,140 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                !!!                !               !       !                                                 ", 
+  "                                 !        !        !           !   !       !      !    !!   !                                ", 
+  "                                 !   ! !  !!       !  !!  !        !       !  !!  !!   !!   !                                ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                ###  #             #                       #  #                                              ", 
+  "                                 #    #   ##       #  #   ##   #   #       #      ##   ##   ##                               ", 
+  "                                 #        #        #           #   #       #      #    ##   #                                ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                          $    $$  $                                                         ", 
+  "                                                        $ $  $     $   $$$$                                                  ", 
+  "                                                  $$$$$$$ $$$$$$ $ $$$$$$$$                                                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                  %%%      %        %                                                        ", 
+  "                                                     % %% %% %%%%% %% %%%%%%                                                 ", 
+  "                                                             % %   %   %%%%                                                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                      &   &  & &   &   &                                                     ", 
+  "                                                      & &    &  &    &&&                                                     ", 
+  "                                                      && &&  &&&&  &&  &                                                     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                    ' ' '  '   '' ' '' ' '                                                   ", 
+  "                                                   '  '  ' ' ' ''''  '''  '                                                  ", 
+  "                                                   '  ' ' ' ''' '' '  '   '                                                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                        ( ((  ((  ( (                                                        ", 
+  "                                                        ((( ( (((  (                                                         ", 
+  "                                                        ( ((( (( (( ((                                                       ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-font-features-500-500-2.0-grid-reference.json b/tests/visual_tests/grids/text-font-features-500-500-2.0-grid-reference.json
new file mode 100644
index 0000000..01d87bd
--- /dev/null
+++ b/tests/visual_tests/grids/text-font-features-500-500-2.0-grid-reference.json
@@ -0,0 +1,140 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "7"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "            !                           !                                               !     !!                             ", 
+  "    ! !     !                          ! !     !                        !              ! !     !                             ", 
+  "    !       !!!!      !!!             !!!     !!      !!!      !!      !!!            !!!      !      !!!       !!!      !!! ", 
+  "    !       !  !      !  !             !       !      !       !!        !              !       !      !  !     !  !      !   ", 
+  "    !       !  !      !                !       !      !        !!!      !              !       !      !  !     !  !      !   ", 
+  "    !       !  !      ! !              !       !      !       !  !      !!             !       !      ! !       ! !      !   ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "  #####     #                          # #     #                        #              # #    ##                             ", 
+  "    # #     #                          #                                #              #       #                             ", 
+  "    #       ## #      # #              #       #      ###     #         #              #       #      # #       # #      ### ", 
+  "    #       #  #      ####             #       #      #        ##       #              #       #      #  #     #  #      #   ", 
+  "    #       #  #      #  #             #       #      #       #  #      #              #       #      #  #     #  #      #   ", 
+  "   ##       ####      ###             ###     ##      ##      ###       ##            ###     ##      ###       ###      ##  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                          $            $$                $$$                                                 ", 
+  "                                       $ $            $         $ $     $  $                                                 ", 
+  "                                       $   $$$  $$    $$$$ $$$ $$ $$$   $$ $ $$$  $$  $$$                                    ", 
+  "                                       $   $ $ $  $   $  $ $  $   $     $  $ $  $$  $ $                                      ", 
+  "                                       $     $ $      $  $ $   $$ $     $  $ $  $$  $ $                                      ", 
+  "                                       $     $ $  $   $  $ $  $ $ $ $   $  $ $ $ $$ $ $                                      ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                     %%%%%%%          %%%%         %    %%%%                                                 ", 
+  "                                       % % %          %            %    %  %                                                 ", 
+  "                                       %   % % %  %   %  % %%%%    %    %  % % % %  % % %                                    ", 
+  "                                       %   % % %%%%   %  % %   %%  %    %  % %  %%  % %                                      ", 
+  "                                       %   % % %  %   %  % %  %  % %    %  % % % %  % %                                      ", 
+  "                                      %%% %%%%% %%    %%%% %% %%%  %%  %%%%% %%%  %%  %%                                     ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                              &    &            &            & &                                             ", 
+  "                                             &&   && &    &&    & &&   &&&   & &                                             ", 
+  "                                              &   &  &     &   &  &&     &  & &&                                             ", 
+  "                                              &  &   &     &  &  &&      &   & &                                             ", 
+  "                                              &  &  &      &  &    &     & & &&&&                                            ", 
+  "                                              & &  &&&     & &  & &&     &&    &                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                        '''  ''  '''  '''   ''  '''  ''' '''' '''  '''                                       ", 
+  "                                        ' '   '  '  ' ' '   ''      '    '    ' ' '  '                                       ", 
+  "                                       '  '   '    '   ''  ' '  ''' ''''   '  ''' '  '                                       ", 
+  "                                       '  '   '    '    '''  '    ' '  '   '  ' '  '''                                       ", 
+  "                                        ' '   '   ' '    '   ' '  ' '  '  '   '  '   '                                       ", 
+  "                                        '''  ''' '''' '''   '' ''''  ''   '   '''  ''                                        ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                          (                                                  ", 
+  "                                                  (   ( (  ( (  (  (  (   (                                                  ", 
+  "                                                  (   (    ( (    (   (  ((                                                  ", 
+  "                                                  (((((   (   ((( (   ( ( (                                                  ", 
+  "                                                  (   (  (      ( (   ( ((((                                                 ", 
+  "                                                  (   ( (((( (  (  (  (   (                                                  ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/text-halign-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..756e3d8
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "12", 
+  "10", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                               !                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                            !!!!!!!                                             !!!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!!                                                        ", 
+  "                                         !!!!!!!!!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!   !!!!!!                                     !!!!!!!!!!!                                   !!!!!!!!                                  !                   ", 
+  "                                      !!!!!!     ! !!!!!                                   !!!!!!  !!!!!                                 !!!!!!!!!!                               !!!!                  ", 
+  "                                     !!!!!!         !!!!!                                !!!!!!     !!!!!                               !!!!!  !!!!!!                            !!!!!!                 ", 
+  "                                   !!!!!!            !!!!!!                             !!!!!!       !!!!!!                           !!!!!!     !!!!!                          !!!!!                   ", 
+  "                                 !!!!!!!              !!!!!!                           !!!!!          !!!!!!                         !!!!!!       !!!!!                       !!!!!!                    ", 
+  "                                !!!!!!                  !!!!!                        !!!!!!             !!!!!                       !!!!!          !!!!!                     !!!!!!                     ", 
+  "                              !!!!!!!                    !!!!!                      !!!!!!               !!!!!                    !!!!!!            !!!!!!                  !!!!!                       ", 
+  "                             !!!!!!                       !!!!!!                  !!!!!!                  !!!!!!                 !!!!!!               !!!!!               !!!!!!                        ", 
+  "                            !!!!!                          !!!!!!                !!!!!!                     !!!!!               !!!!!                  !!!!!             !!!!!!                         ", 
+  "                            !!!!                             !!!!!              !!!!!                        !!!!!            !!!!!!                    !!!!!!          !!!!!                           ", 
+  "                             !                                !!!!!           !!!!!!                          !!!!!!         !!!!!                       !!!!!!       !!!!!!                            ", 
+  "                                                               !!!!!!        !!!!!                             !!!!!!      !!!!!!                          !!!!!     !!!!!                              ", 
+  "                                                                !!!!!!     !!!!!!                                !!!!!    !!!!!!                            !!!!!  !!!!!!                               ", 
+  "                                                                  !!!!!   !!!!!!                                  !!!!!! !!!!!                               !!!!!!!!!!!                                ", 
+  "                                                                   !!!!!!!!!!!                                     !!!!!!!!!!                                 !!!!!!!!                                  ", 
+  "                                                                    !!!!!!!!!                                        !!!!!!!                                    !!!!!                                   ", 
+  "                                                                     !!!!!!                                           !!!!                                       !!!                                    ", 
+  "                                           ###                         !!!                      #                      !!                                                                   $$$         ", 
+  "                                          #####                         !                     ####                                                                                          $$$         ", 
+  "                                        ########                                             #######                                         ##                                             $$$         ", 
+  "                                      ###########                                          ##########                                      #####                                   ##       $$$         ", 
+  "                                     ######  ######                                       ###### #####                                    ########                               ####       $$$         ", 
+  "                                   #######     #####                                     #####    #####                                  ##########                             ######      $$$         ", 
+  "                                  ######        #####                                  ######      ######                               #####  #####                           #####        $$$         ", 
+  "                                ######           ######                               ######        ######                            ######    ######                       ######         $$$         ", 
+  "                               ######             ######                             #####            #####                          ######      ######                     ######          $$$         ", 
+  "                             ######                 #####                          ######              #####                        #####          #####                   #####            $$$         ", 
+  "                           #######                   #####                        #####                 ######                     #####            ######               ######             $$$         ", 
+  "                          ######                      ######                    ######                    #####                  ######              ######             #####               $$$         ", 
+  "                           ####                         #####                  ######                      #####                #####                  #####          ######                $$$         ", 
+  "                    %%%    ##                            #####                #####                         ######             #####                    ######       ######                 $$$         ", 
+  "                    %%%                                   ######            ######                           ######          ######                       #####     #####                   $$$         ", 
+  "                    %%%                                    ######          ######                              #####        ######                         ###### ######                    $$$         ", 
+  "                    %%%                                      #####       ######                                 #####      #####                            ###########                     $$$         ", 
+  "                    %%%                                       #####     ######                                   ######   #####                               #######                       $$$         ", 
+  "                    %%%                                        ######  #####                                       ###########                                 #####                        $$$         ", 
+  "                    %%%                                         ###########                                         ########                                    ##                          $$$         ", 
+  "                    %%%                                           ########                                           ######                                                                 $$$         ", 
+  "                    %%%                                            #####                                              ####                                                                  $$$         ", 
+  "                    %%%                                             ###                                                 #                                                                   $$$         ", 
+  "                    %%%                                                                                                                                                                     $$$         ", 
+  "                    %%%                                                                                                                       &&&&&&&                                       $$$         ", 
+  "                    %%%                                                   &&&&&&                           &&&&&&&&                         &&&&&&&&&&                                      $$$         ", 
+  "                    %%%               &&&&&&&&                         &&&&&&&&&&                       &&&&&&&&&&&&                      &&&&&&&&&&&&&                                     $$$         ", 
+  "                    %%%             &&&&&&&&&&&                      &&&&&&&&&&&&&                     &&&&&&&&&&&&&&                   &&&&&&&&   &&&&&                                    $$$         ", 
+  "                    %%%           &&&&&&&&&&&&&&                    &&&&&&&  &&&&&&                  &&&&&&&     &&&&&                 &&&&&&       &&&&&                                  $$$$         ", 
+  "                    %%%          &&&&&&&    &&&&&                 &&&&&&&      &&&&&                &&&&&&        &&&&&               &&&&&          &&&&&                                 $$$$         ", 
+  "                    %%%        &&&&&&         &&&&               &&&&&&          &&&&              &&&&&           &&&&&             &&&&&            &&&&                                 $$$$         ", 
+  "                    %%%       &&&&&&          &&&&&             &&&&&            &&&&&           &&&&&&             &&&&           &&&&&&              &&&&                                $$$$         ", 
+  "                    %%%      &&&&&             &&&&            &&&&&              &&&&          &&&&&                &&&&         &&&&&                 &&&&        &&                     $$$$         ", 
+  "                    %%%     &&&&&               &&&&          &&&&&                &&&&        &&&&&                 &&&&&       &&&&&                  &&&&&     &&&&&                    $$$$         ", 
+  "                    %%%      &&&                 &&&&       &&&&&&                  &&&&      &&&&&                   &&&&&    &&&&&&                    &&&&&&&&&&&&&&                    $$$$         ", 
+  "                    %%%       &                  &&&&&    &&&&&&&                   &&&&&&  &&&&&&                     &&&&&&&&&&&&&                      &&&&&&&&&&&                      $$$$         ", 
+  "                    %%%                          &&&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                         &&&&&&&&&                       $$$$         ", 
+  "                    %%%                            &&&&&&&&&&&                         &&&&&&&&                           &&&&&&                              &&&&                         $$$$         ", 
+  "                    %%%                              &&&&&&&                             &&&&                                &                                                             $$$$         ", 
+  "                   %%%%                                 &&                                                                                                                                 $$$$         ", 
+  "                   %%%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                            '''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                        ((            '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                    (((((((                           ((((((((        '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                ((((((                           ((((((((                         ((((((((((                       ((((((((((((                                     $$$$         ", 
+  "                    %%%             ((((((((((                        ((((((((((((                     (((((((((((((                     ((((((((((((((                                    $$$$         ", 
+  "                    %%%           ((((((((((((((                    (((((((((((((((                  ((((((((   (((((                  (((((((    ((((((                                   $$$$         ", 
+  "                    %%%          (((((((   ((((((                  (((((((     ((((                 ((((((        ((((                ((((((         ((((                                  $$$$         ", 
+  "                    %%%        (((((((       ((((                ((((((         ((((               ((((((          ((((              (((((            ((((                                 $$$$         ", 
+  "                    %%%       ((((((          ((((              ((((((           ((((             (((((            (((((            (((((             (((((                                $$$$         ", 
+  "                    %%%      (((((             ((((            (((((              ((((          ((((((              ((((          ((((((               ((((         ((                     $$$$         ", 
+  "                    %%%     (((((               ((((          (((((               ((((         (((((                 ((((        (((((                  ((((       ((((                    $$$$         ", 
+  "                    %%%     ((((                ((((        ((((((                 ((((       (((((                   ((((     ((((((                    (((((   ((((((                    $$$$         ", 
+  "                    %%%      ((                  (((((     ((((((                   (((((   ((((((                    ((((((((((((((                     (((((((((((((                     $$$$         ", 
+  "                    %%%                           (((((( ((((((                      ((((((((((((                      ((((((((((((                        (((((((((                       $$$$         ", 
+  "                    %%%                            (((((((((((                        ((((((((((                         ((((((((                           ((((((                         $$$$         ", 
+  "                    %%%%                            ((((((((      ))                   (((((((                              (((                                                            $$$$         ", 
+  "                    %%%%                              ((((       ))))         ***          (                                                                                               $$$$         ", 
+  "                    %%%%                                        )))))         ***                                                    ++++++++++++                                          $$$$         ", 
+  "                    %%%%                                      ))))))          ***                                                    ++++++++++++++++++++++++++++++++                      $$$$         ", 
+  "                    %%%%                                     ))))))           ****          ,,,                                      +++++++++++++++++++++++++++++++++++++                 $$$$         ", 
+  "                    %%%%                                    )))))             ****          ,,,                                            +++++++++++++++++++++++++++++++++               $$$$         ", 
+  "                    %%%%                                  ))))))               ***          ,,,      ------                                                    +++++++++++++++             $$$$         ", 
+  "                    %%%%                                 ))))))                ***         ,,,,      -----------------------------                                       ++++++            $$$$         ", 
+  "                    %%%%                                )))))                  ***         ,,,,      -----------------------------                                         ++++            $$$$         ", 
+  "                    %%%%                              ))))))                   ***         ,,,       -----------------------------                                          ++++           $$$$         ", 
+  "                    %%%%                             ))))))                    ****        ,,,                                                                               ++++          $$$$         ", 
+  "                    %%%%                            )))))                      ****        ,,,                                                                               ++++          $$$$         ", 
+  "                    %%%%                          ))))))                        ***        ,,,                                                                                ++++         $$$$         ", 
+  "                    %%%%                         ))))))                         ***        ,,,                                                                                ++++         $$$$         ", 
+  "                    %%%%                        )))))                           ***       ,,,,                    .................................                            +++         $$$$         ", 
+  "                    %%%%                      ))))))                            ***       ,,,,           ..........................................                            +++         $$$$         ", 
+  "                    %%%%                     ))))))                             ****      ,,,           ...........................................                            +++         $$$$         ", 
+  "                    %%%%                    )))))                               ****      ,,,          .................                                                       +++         $$$$         ", 
+  "                    %%%%                  ))))))                                 ***      ,,,          .....                                                                   +++         $$$$         ", 
+  "                    %%%%                 ))))))                                  ***      ,,,         ....                                                                     +++         $$$$         ", 
+  "                    %%%%                )))))                                    ***     ,,,,         ...                                                                      +++         $$$$         ", 
+  "                    %%%%              ))))))             ////////                ***     ,,,,         ...                                                                      +++         $$$$         ", 
+  "                    %%%%             ))))))             ///////////////          ***     ,,,,        ....                                                                      +++         $$$$         ", 
+  "                    %%%%            )))))              //////////////////////    ****    ,,,         ....                                                                      +++         $$$$         ", 
+  "                    %%%%          ))))))             //////    //////////////    ****    ,,,         ...                                                                       +++         $$$$         ", 
+  "                    %%%%         ))))))             //////           /////////    ***    ,,,         ...                                                                      ++++         $$$$         ", 
+  "                    %%%%        )))))              /////                   ////   ***    ,,,         ...                                                                      ++++         $$$$         ", 
+  "                    %%%%      ))))))             //////                    /////  ***   ,,,,         ...                      00000000000000000000000000000                   ++++         $$$$         ", 
+  "                    %%%%     ))))))             //////                      ////  ***   ,,,,         ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%    )))))              /////                         ////       ,,,          ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%   )))))             //////                           ////      ,,,          ...                                                                      +++          $$$$         ", 
+  "                    %%%%    )))             //////                            /////     ,,,          ...                                                                      +++          $$$$         ", 
+  "                     %%%    )               ////                               ////     ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    ///                                 ////    ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    ///                                  ////   ,,,          ...                                                                     +++           $$$$         ", 
+  "                     %%%                    ///                                  /////               ...                                                                    ++++           $$$$         ", 
+  "                     %%%                    ///                                   ////               ...                           ++++++++++++++++                        ++++            $$$$         ", 
+  "                     %%%                   ////                                    ///               ...                           ++++++++++++++++++++++++++++++++++++++++++++            $$$$         ", 
+  "                     %%%                   ////                                     ///              ...                           +++++++++++++++++++++++++++++++++++++++++++             $$$$         ", 
+  "                     %%%                   ///                                     ////              ...                                    +++++++++++++++++++++++++++++++++              $$$$         ", 
+  "                     %%%                   ///                                     ////              ...                                                                                   $$$$         ", 
+  "                     %%%                   ///                                     ////              ....                                                                                  $$$$         ", 
+  "                     %%%                   ///                                     ///               ....                                                                                  $$$$         ", 
+  "                     %%%                  ////                                     ///                ....                                                                                 $$$$         ", 
+  "                     %%%                  ////                                     ///                .....                                                                                $$$$         ", 
+  "                     %%%                  ///                                      ///                 ....                                                                                $$$$         ", 
+  "                     %%%                  ///                                     ////                  .....                                                                              $$$$         ", 
+  "                     %%%                  ///                                     ////                   ......                                                                            $$$$         ", 
+  "                     %%%                  ///                                     ///                    ..........................................                                        $$$$         ", 
+  "                     %%%                  ////                                    ///                      ........................................                                        $$$$         ", 
+  "                     %%%                   ////                                   ///                        ......................................                                        $$$$         ", 
+  "                     %%%                    ////                                  ///                                     ..                                                               $$$$         ", 
+  "                     %%%                    ////                                  ///                                                                                                      $$$$         ", 
+  "                                             ////                                ////                                                                                                      $$$$         ", 
+  "                                              ////                              /////                                                                                                      $$$$         ", 
+  "                                              /////                            /////                                                                                                                    ", 
+  "                                               ////                          //////                                                                                                                     ", 
+  "                                                ////                        //////                                                                                                                      ", 
+  "                                                 ////                      /////                                                                                                                        ", 
+  "                                                 /////                   //////                                                                                                                         ", 
+  "                                                  /////                 ///////                                                                                                                         ", 
+  "                                                   ///////////         /////                                                                                                                            ", 
+  "                                                    ///////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                     ////////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                            ////////////                                         11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                                   ////                                          1111111111                                                                             ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/text-halign-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..1eaef29
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                             !!!!!!                                              !!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!                                                         ", 
+  "                                          !!!!!!!!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!!!!!!!!!!                                     !!!!!!!!!!!                                    !!!!!!!                                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!                                 !!!!!!!!!!                                !!                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!                               !!!!!!!!!!!!!                            !!!!                   ", 
+  "                                   !!!!!!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!                          !!!!!!                  ", 
+  "                                  !!!!!!!!!!!!   !!!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!                        !!!!!!!!                 ", 
+  "                                !!!!!!!!!!!!       !!!!!!!!!!                        !!!!!!!!!!!   !!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!                ", 
+  "                               !!!!!!!!!!!          !!!!!!!!!!                      !!!!!!!!!!!     !!!!!!!!!!                    !!!!!!!!!!!  !!!!!!!!!!!                  !!!!!!!!!!!                 ", 
+  "                             !!!!!!!!!!!!            !!!!!!!!!!                    !!!!!!!!!!!       !!!!!!!!!!!                 !!!!!!!!!!!     !!!!!!!!!!               !!!!!!!!!!!                   ", 
+  "                           !!!!!!!!!!!!               !!!!!!!!!!!                !!!!!!!!!!!           !!!!!!!!!!               !!!!!!!!!!        !!!!!!!!!!             !!!!!!!!!!!                    ", 
+  "                           !!!!!!!!!!!                  !!!!!!!!!!              !!!!!!!!!!!             !!!!!!!!!!            !!!!!!!!!!!          !!!!!!!!!!           !!!!!!!!!!                      ", 
+  "                           !!!!!!!!!                     !!!!!!!!!!           !!!!!!!!!!!                !!!!!!!!!!!         !!!!!!!!!!!            !!!!!!!!!!!       !!!!!!!!!!!                       ", 
+  "                            !!!!!!!                       !!!!!!!!!!         !!!!!!!!!!!                  !!!!!!!!!!!       !!!!!!!!!!                !!!!!!!!!!     !!!!!!!!!!!                        ", 
+  "                             !!!!                           !!!!!!!!!!      !!!!!!!!!!                      !!!!!!!!!!    !!!!!!!!!!!                  !!!!!!!!!!   !!!!!!!!!!                          ", 
+  "                             !!!                             !!!!!!!!!!   !!!!!!!!!!!                        !!!!!!!!!!  !!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                                                              !!!!!!!!!! !!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                               !!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!                              ", 
+  "                                                                 !!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!                            !!!!!!!!!!!!!                               ", 
+  "                                            ##                    !!!!!!!!!!!!!                 #                 !!!!!!!!!!!!                               !!!!!!!!!!!                                ", 
+  "                                          #####                    !!!!!!!!!!!                ####                 !!!!!!!!!!                                  !!!!!!!                                  ", 
+  "                                        ########                    !!!!!!!!!                ######                  !!!!!!                  ##                 !!!!!                     $$$$$$        ", 
+  "                                       ##########                     !!!!!!!               #########                 !!!!                  ####                 !!                       $$$$$$        ", 
+  "                                     ##############                    !!!!!              ############                 !!                 ########                                #       $$$$$$        ", 
+  "                                    ################                                     ##############                                  ##########                             ####      $$$$$$        ", 
+  "                                  ###################                                  ##################                               ############                           #####      $$$$$$        ", 
+  "                                 #####################                                ####################                            ################                        #######     $$$$$$        ", 
+  "                               ############  ###########                             ########### ##########                          ##################                     ##########    $$$$$$        ", 
+  "                             ############      ##########                          ###########    ##########                        ####################                   ###########    $$$$$$        ", 
+  "                            ############        ##########                        ###########      ###########                     ##########  ###########               ###########      $$$$$$        ", 
+  "                          ############           ###########                     ##########          ##########                  ###########    ###########             ###########       $$$$$$        ", 
+  "                         ###########               ##########                  ###########            ##########                ##########        ##########           ##########         $$$$$$        ", 
+  "                          #########                 ##########                ###########              ##########              ##########          ###########       ###########          $$$$$$        ", 
+  "                           ######                    ##########             ###########                 ###########          ###########            ###########     ###########           $$$$$$        ", 
+  "                  %%%%%%%  #####                      ###########          ###########                    ##########        ###########               ##########  ###########             $$$$$$        ", 
+  "                  %%%%%%%   ##                          ##########        ##########                       ##########      ##########                  #####################              $$$$$$        ", 
+  "                  %%%%%%%                                ##########     ###########                         ###########   ##########                    ##################                $$$$$$        ", 
+  "                  %%%%%%%                                 ###########  ###########                            #####################                       ###############                 $$$$$$        ", 
+  "                  %%%%%%%                                  #####################                               ##################                          #############                  $$$$$$        ", 
+  "                  %%%%%%%                                    ##################                                 ################                            ##########                    $$$$$$        ", 
+  "                  %%%%%%%                                     ################                                   ##############                               #######                     $$$$$$        ", 
+  "                  %%%%%%%                                      #############                                       ###########                                 #####                      $$$$$$        ", 
+  "                  %%%%%%%                                        ##########                                         ########                                    ##                        $$$$$$        ", 
+  "                  %%%%%%%                                         #######                                            ######                                                               $$$$$$        ", 
+  "                  %%%%%%%                                          #####                                    &&&&&&&    ###                   &&&&&&&&&                                    $$$$$$        ", 
+  "                  %%%%%%%              &&&&&&&                      ### &&&&&&&&&                        &&&&&&&&&&&                      &&&&&&&&&&&&&                                   $$$$$$        ", 
+  "                  %%%%%%%            &&&&&&&&&&                       &&&&&&&&&&&&                     &&&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                                  $$$$$$        ", 
+  "                  %%%%%%%          &&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&&                                 $$$$$$        ", 
+  "                  %%%%%%%        &&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&                                $$$$$$        ", 
+  "                  %%%%%%%      &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&                               $$$$$$        ", 
+  "                  %%%%%%%     &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&           &&&&&&&&&&&&&  &&&&&&&&&          &&&&&&&&&&&&    &&&&&&&&&                              $$$$$$        ", 
+  "                  %%%%%%%    &&&&&&&&&&&&&&&&&&&&&&&           &&&&&&&&&&&& & &&&&&&&&&         &&&&&&&&&&&      &&&&&&&&         &&&&&&&&&&&       &&&&&&&&        &                     $$$$$$        ", 
+  "                  %%%%%%%   &&&&&&&&&&&     &&&&&&&&&         &&&&&&&&&&  &&&  &&&&&&&&        &&&&&&&&&&         &&&&&&&&       &&&&&&&&&&          &&&&&&&&      &&                     $$$$$$        ", 
+  "                  %%%%%%%  &&&&&&&&&&        &&&&&&&&       &&&&&&&&&&&         &&&&&&&&      &&&&&&&&&&           &&&&&&&&    &&&&&&&&&&&            &&&&&&&&   &&&&&                    $$$$$$        ", 
+  "                   %%%%%%   &&&&&&&           &&&&&&&&     &&&&&&&&&&            &&&&&&&&   &&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&                   $$$$$$        ", 
+  "                   %%%%%%    &&&&&             &&&&&&&&& &&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%     &&&               &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%      &                &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&                   &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&                    $$$$$$        ", 
+  "                   %%%%%%                        &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&&                     &&&&&&&&&&&&                       &&&&&&&&&&&                     $$$$$$        ", 
+  "                   %%%%%%                         &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                          &&&&&&&                       $$$$$$        ", 
+  "                   %%%%%%                           &&&&&&&&&                          &&&&&&&&                            &&&&                                 &                         $$$$$$        ", 
+  "                   %%%%%%                             &&&&&                                &                                                                                  ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                    (                                (((((((        '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                (((((((                          (((((((((                        (((((((((((       '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%            (((((((((                        ((((((((((((                     (((((((((((((                     (((((((((((((((     '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%          (((((((((((((                     ((((((((((((((                   ((((((((((((((((                 ((((((((((((((((((    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%        ((((((((((((((((                  (((((((((((((((((                ((((((((((((((((((                (((((((((((((((((((                                 $$$$$$        ", 
+  "                   %%%%%%       ((((((((((((((((((               ((((((((((((((((((((              ((((((((((((((((((((              (((((((((((((((((((((                                $$$$$$        ", 
+  "                   %%%%%%     (((((((((((((((((((((             (((((((((((((((((((((             ((((((((((((((((((((((            ((((((((((((  (((((((((                               $$$$$$        ", 
+  "                   %%%%%%    ((((((((((((((((((((((            ((((((((((((   ((((((((           (((((((((((    (((((((((          ((((((((((       ((((((((                              $$$$$$        ", 
+  "                   %%%%%%   (((((((((((     ((((((((          ((((((((((       ((((((((        (((((((((((        (((((((        ((((((((((         ((((((((       ((((                   $$$$$$        ", 
+  "                   %%%%%%  ((((((((((        ((((((((        ((((((((((         ((((((((      ((((((((((          ((((((((      ((((((((((           ((((((((    (((((                    $$$$$$        ", 
+  "                   %%%%%%  (((((((((          (((((((      ((((((((((           (((((((((    ((((((((((            (((((((((  (((((((((((             (((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%   ((((((            (((((((((  (((((((((((             (((((((((((((((((((((              ((((((((((((((((((((               (((((((((((((((( (                 $$$$$$        ", 
+  "                   %%%%%%    ((((              ((((((((((((((((((((               ((((((((((((((((((                 (((((((((((((((((                 (((((((((((((((((                  $$$$$$        ", 
+  "                   %%%%%%     ((                ((((((((((((((((((                 ((((((((((((((((                  ((((((((((((((((                   (((((((((((((((                   $$$$$$$       ", 
+  "                   %%%%%%                       ((((((((((((((((())                (((((((((((((((                    ((((((((((((((                      (((((((((((                     $$$$$$ $      ", 
+  "                   %%%%%%                         ((((((((((((( ))))                 ((((((((((((                       ((((((((((   **                    (((((((((                      $$$$$$ $      ", 
+  "                   %%%%%%                          ((((((((((( ))))))         +++++   (((((((((                          ((((((( (   **********************   (((                         $$$$$$        ", 
+  "                   %%%%%%                           (((((((( ))))))))       +++++++      ((((                                ( ((    *************************************                $$$$$$        ", 
+  "                   %%%%%%                               (   ))))))))))       ++++++        ,                                         ***************************************              $$$$$$        ", 
+  "                   %%%%%%                                  ))))))))))        ++++++       ,,,,,,,                                    ****************************************             $$$$$$        ", 
+  "                   %%%%%%                                )))))))))))         ++++++       ,,,,,,,    ------------------------        ******************************************           $$$$$$        ", 
+  "                   %%%%%%                               )))))))))))          ++++++       ,,,,,,     -----------------------------   *******************************************          $$$$$$        ", 
+  "                   %%%%%%                              ))))))))))            +++++++      ,,,,,,     -----------------------------                   ***************************          $$$$$$        ", 
+  "                   %%%%%%                            )))))))))))             +++++++      ,,,,,,     -----------------------------                                    ***********         $$$$$$        ", 
+  "                   %%%%%%                           )))))))))))               ++++++      ,,,,,,     -----------------------------                                       *********        $$$$$$        ", 
+  "                   %%%%%%                          ))))))))))                 ++++++     ,,,,,,,     -----------------------------                                         *******        $$$$$$        ", 
+  "                   %%%%%%                        )))))))))))                  ++++++     ,,,,,,,                    --------------                                         ********       $$$$$$        ", 
+  "                   %%%%%%                       )))))))))))                   ++++++     ,,,,,,,                                .   ...............                         *******       $$$$$$        ", 
+  "                   %%%%%%                      ))))))))))                     +++++++    ,,,,,,              ......................................                         *******       $$$$$$        ", 
+  "                   %%%%%%                    )))))))))))                      +++++++    ,,,,,,         ...........................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                   )))))))))))                        ++++++    ,,,,,,        ............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%                  ))))))))))                          ++++++    ,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%                )))))))))))                           ++++++   ,,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%               )))))))))))                            ++++++   ,,,,,,,      ............................................                            *******      $$$$$$        ", 
+  "                   %%%%%%              ))))))))))         ////                 +++++++  ,,,,,,      ............                                                            ********      $$$$$$        ", 
+  "                   %%%%%%            )))))))))))        ////////////           +++++++  ,,,,,,      .......                                                                  *******      $$$$$$        ", 
+  "                   %%%%%%           ))))))))))         ////////////////////    +++++++  ,,,,,,      .......                                                                 ********      $$$$$$        ", 
+  "                   %%%%%%          ))))))))))        /////////////////////////  ++++++  ,,,,,,      ......                                                                  *******       $$$$$$        ", 
+  "                   %%%%%%        )))))))))))        /////////////////////////// ++++++  ,,,,,,      ......                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%       ))))))))))         //////////////////////////// ++++++ ,,,,,,,      ......                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%      ))))))))))        ///////////////////////////////++++++ ,,,,,,,      ......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%    )))))))))))        ///////////       //////////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%   ))))))))))         //////////               ////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%  ))))))))))        ///////////                  ///////++++  ,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%% ))))))))))        ///////////                    ////////    ,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$        ", 
+  "                   %%%%%%  )))))))         //////////                       ////////  ,,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$        ", 
+  "                   %%%%%%   )))))          /////////                         ///////  ,,,,,,,      ......                     000000000000000000                            ******        $$$$$$        ", 
+  "                   %%%%%%   ))))           ////////                          //////// ,,,,,,,      ......                                                                   ******        $$$$$$        ", 
+  "                   %%%%%%    )            ///////                             ////////,,,,,,       ......                                                                   ******        $$$$$$        ", 
+  "                   %%%%%%                 ///////                              //////// ,,,,       ......                          ***                                    ********        $$$$$$        ", 
+  "                   %%%%%%                 ///////                              ////////            ......                          *****************************   ***************        $$$$$$        ", 
+  "                   %%%%%%                 //////                                ////////           ......                          **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                 /////  /          .......                         **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                  //////           .......                         *********************************************          $$$$$$        ", 
+  "                   %%%%%%                 //////                                  //////            ......                         ********************************************           $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////          . ......                         *******************************************            $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////          . ......                                              ****************                  $$$$$$        ", 
+  "                   %%%%%%                //////                                   //////           ........                                                                               $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////            ........                                                                              $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////             .......                                                                              $$$$$$        ", 
+  "                   %%%%%%                //////                                  //////              .........                                                                            $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////               .......... ..................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ////////                                ///////                 ...........................................                                       $$$$$$        ", 
+  "                   %%%%%%                ////////                               ///////                   .........................................                                       $$$$$$        ", 
+  "                   %%%%%%                 ////////                              //////                      .......................................                                       $$$$$$        ", 
+  "                   %%%%%%                 ////////                              //////                        ....................................                                        $$$$$$        ", 
+  "                                           ////////                            ///////                                                                                                    $$$$$$        ", 
+  "                                            ////////                         /////////                                                                                                    $$$$$$        ", 
+  "                                             ///////                        //////////                                                                                                                  ", 
+  "                                             ////////                      //////////                                                                                                                   ", 
+  "                                              ////////                   ///////////                                                                                                                    ", 
+  "                                               ////////                 ///////////                                                                                                                     ", 
+  "                                                ///////////            //////////                                                                                                                       ", 
+  "                                                /////////////////    ///////////                                                         11111111111111111111111111                                     ", 
+  "                                                 //////////////////////////////                                  11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  ///////////////////////////                                    11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  //////////////////////////                                     11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                   ////////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                     /  /////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                      //       /////////                                         11111111111111111111111111111111111111                                                 ", 
+  "                                                                      /                                                                                                                                 ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-adjust-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..ab36473
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "12", 
+  "10", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                               !                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                            !!!!!!!                                             !!!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!!                                                        ", 
+  "                                         !!!!!! !!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!   !!!!!!                                     !!!!!!!!!!!                                   !!!!!!!!                                  !                   ", 
+  "                                      !!!!!!       !!!!!                                   !!!!!!  !!!!!                                 !!!!!!!!!!                               !!!!                  ", 
+  "                                     !!!!!!         !!!!!                                !!!!!!     !!!!!                               !!!!!  !!!!!!                            !!!!!!                 ", 
+  "                                   !!!!!!            !!!!!!                             !!!!!!       !!!!!!                           !!!!!!     !!!!!                          !!!!!                   ", 
+  "                                 !!!!!!!              !!!!!!                           !!!!!          !!!!!!                         !!!!!!       !!!!!                       !!!!!!                    ", 
+  "                                !!!!!!                  !!!!!                        !!!!!!             !!!!!                       !!!!!          !!!!!                     !!!!!!                     ", 
+  "                              !!!!!!!                    !!!!!                      !!!!!!               !!!!!                    !!!!!!            !!!!!!                  !!!!!                       ", 
+  "                             !!!!!!                       !!!!!!                  !!!!!!                  !!!!!!                 !!!!!!              !!!!!!               !!!!!!                        ", 
+  "                            !!!!!                          !!!!!!                !!!!!!                     !!!!!               !!!!!                  !!!!!             !!!!!!                         ", 
+  "                            !!!!                             !!!!!              !!!!!                        !!!!!            !!!!!!                    !!!!!!          !!!!!                           ", 
+  "                             !                                !!!!!           !!!!!!                          !!!!!!         !!!!!                       !!!!!!       !!!!!!                            ", 
+  "                                                               !!!!!!        !!!!!                             !!!!!!      !!!!!!                          !!!!!     !!!!!                              ", 
+  "                                                                !!!!!!     !!!!!!                                !!!!!    !!!!!!                            !!!!!  !!!!!!                               ", 
+  "                                                                  !!!!!   !!!!!!                                  !!!!!! !!!!!                               !!!!!!!!!!!                                ", 
+  "                                                                   !!!!!!!!!!!                                     !!!!!!!!!!                                 !!!!!!!!                                  ", 
+  "                                                                    !!!!!!!!!                                        !!!!!!!                                    !!!!!                                   ", 
+  "                                                                     !!!!!!                                           !!!!!                                      !!!                                    ", 
+  "                                           ###                         !!!                      #                      !!                                                                   $$$         ", 
+  "                                          #####                         !                     ####                                                                                          $$$         ", 
+  "                                        ########                                             #######                                         ##                                             $$$         ", 
+  "                                      ###########                                          ##########                                      #####                                   #        $$$         ", 
+  "                                     ######  ######                                       ###### #####                                    ########                               ###        $$$         ", 
+  "                                   #######     #####                                     #####    #####                                  ##########                             #####       $$$         ", 
+  "                                  ######        #####                                  ######      ######                               #####  #####                           ######       $$$         ", 
+  "                                ######           ######                               ######        ######                            ######    ######                       ######         $$$         ", 
+  "                               ######             ######                             ######           #####                          ######      ######                     ######          $$$         ", 
+  "                             ######                 #####                          ######              #####                        #####          #####                   #####            $$$         ", 
+  "                           #######                   #####                        #####                 ######                     #####            ######               ######             $$$         ", 
+  "                          ######                      ######                    ######                    #####                  ######              ######             #####               $$$         ", 
+  "                           ####                         #####                  ######                      #####                #####                  #####          ######                $$$         ", 
+  "                    %%%    ##                            #####                #####                         ######             #####                    ######       ######                 $$$         ", 
+  "                    %%%                                   ######            ######                           ######          ######                       #####     #####                   $$$         ", 
+  "                   %%%%                                    ######          ######                              #####        ######                         ###### ######                    $$$         ", 
+  "                    %%%                                      #####       ######                                 #####      #####                            ###########                     $$$         ", 
+  "                    %%%                                       #####     ######                                   ######   #####                               #######                       $$$         ", 
+  "                    %%%                                        ######  #####                                       ###########                                 #####                        $$$         ", 
+  "                    %%%                                         ###########                                         ########                                    ##                          $$$         ", 
+  "                    %%%                                           ########                                           ######                                                                 $$$         ", 
+  "                    %%%                                            #####                                              ####                                                                  $$$         ", 
+  "                    %%%                                             ###                                                 #                                                                   $$$         ", 
+  "                    %%%                                                                                                                                                                     $$$         ", 
+  "                    %%%                                                                                                                       &&&&&&&                                       $$$         ", 
+  "                    %%%                                                   &&&&&&                           &&&&&&&&                         &&&&&&&&&&                                      $$$         ", 
+  "                    %%%               &&&&&&&&                         &&&&&&&&&&                       &&&&&&&&&&&&                      &&&&&&&&&&&&&                                     $$$         ", 
+  "                    %%%             &&&&&&&&&&&                      &&&&&&&&&&&&&                     &&&&&&&&&&&&&&                   &&&&&&&&   &&&&&                                    $$$         ", 
+  "                    %%%           &&&&&&&&&&&&&&                    &&&&&&&  &&&&&&                  &&&&&&&    &&&&&&                 &&&&&&       &&&&&                                  $$$$         ", 
+  "                    %%%          &&&&&&&    &&&&&                 &&&&&&&      &&&&&                &&&&&&        &&&&&               &&&&&&         &&&&&                                 $$$$         ", 
+  "                    %%%        &&&&&&         &&&&               &&&&&&          &&&&              &&&&&           &&&&&             &&&&&            &&&&                                 $$$$         ", 
+  "                    %%%       &&&&&&          &&&&&             &&&&&            &&&&&           &&&&&&             &&&&           &&&&&&              &&&&                                $$$$         ", 
+  "                    %%%      &&&&&             &&&&            &&&&&              &&&&          &&&&&                &&&&         &&&&&                 &&&&        &&                     $$$$         ", 
+  "                    %%%     &&&&&               &&&&          &&&&&                &&&&        &&&&&                 &&&&&       &&&&&                  &&&&&     &&&&&                    $$$$         ", 
+  "                    %%%      &&&                 &&&&       &&&&&&                & &&&&      &&&&&                   &&&&&    &&&&&&                    &&&&&&&&&&&&&&                    $$$$         ", 
+  "                    %%%       &                  &&&&&    &&&&&&&                   &&&&&&  &&&&&&                     &&&&&&&&&&&&&                      &&&&&&&&&&&                      $$$$         ", 
+  "                    %%%                           &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                         &&&&&&&&&                       $$$$         ", 
+  "                    %%%                            &&&&&&&&&&&                         &&&&&&&&                           &&&&&&                              &&&&                         $$$$         ", 
+  "                    %%%                              &&&&&&&                             &&&&                                &                                                             $$$$         ", 
+  "                    %%%                                 &&                                                                                                                                 $$$$         ", 
+  "                    %%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%                                                                                                                                                       '            $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                            '''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                        ((            '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                    (((((((                           ((((((((        '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                ((((((                           ((((((((                         ((((((((((                       ((((((((((((                     '               $$$$         ", 
+  "                    %%%             ((((((((((                        ((((((((((((                     (((((((((((((                     ((((((((((((((                                    $$$$         ", 
+  "                    %%%           ((((((((((((((                    (((((((((((((((                  ((((((((  ((((((                  (((((((      ((((                                   $$$$         ", 
+  "                    %%%          (((((((   ((((((                  (((((((     ((((                 ((((((        ((((                ((((((         ((((                                  $$$$         ", 
+  "                   %%%%        (((((((       ((((                ((((((         ((((               ((((((          ((((              (((((            ((((                                 $$$$         ", 
+  "                    %%%       ((((((          ((((              ((((((           ((((             (((((            (((((            (((((             (((((                                $$$$         ", 
+  "                    %%%      (((((             ((((            (((((              ((((          ((((((              ((((          ((((((               ((((         ((                     $$$$         ", 
+  "                    %%%     (((((               ((((          (((((               ((((         (((((                 ((((        (((((                  ((((       ((((                    $$$$         ", 
+  "                    %%%     ((((                ((((        ((((((                (((((       (((((                   ((((     ((((((                    (((((   ((((((                    $$$$         ", 
+  "                    %%%      ((                  (((((     ((((((                   (((((   ((((((                    ((((((((((((((                     (((((((((((((                     $$$$         ", 
+  "                    %%%                           (((((( ((((((                      ((((((((((((                      ((((((((((((                        (((((((((                       $$$$         ", 
+  "                    %%%                            (((((((((((                        ((((((((((                         ((((((((                           ((((((                         $$$$         ", 
+  "                    %%%                             ((((((((      ))                   (((((((                              (((                                                            $$$$         ", 
+  "                    %%%%                              (((((      ))))         ***          (                                                                                               $$$$         ", 
+  "                    %%%%                                        )))))         ***                                                    ++++++++++++                                          $$$$         ", 
+  "                    %%%%                                      ))))))          ***                                                    ++++++++++++++++++++++++++++++++                      $$$$         ", 
+  "                    %%%%                                     ))))))           ****          ,,,,                                     +++++++++++++++++++++++++++++++++++++                 $$$$         ", 
+  "                    %%%%                                    )))))             ****          ,,,                                            +++++++++++++++++++++++++++++++++               $$$$         ", 
+  "                    %%%%                                  ))))))               ***          ,,,      ------                                                    +++++++++++++++             $$$$         ", 
+  "                    %%%%                                 ))))))                ***         ,,,,      -----------------------------                                       ++++++            $$$$$        ", 
+  "                    %%%%                                ))))))                ****         ,,,,      -----------------------------                                         ++++            $$$$         ", 
+  "                    %%%%                              ))))))                   ***         ,,,,      -----------------------------                                          ++++           $$$$         ", 
+  "                    %%%%                             ))))))                    ****        ,,,,                       -    --    -                                           ++++          $$$$         ", 
+  "                    %%%%                            )))))                      ****        ,,,                                                                               ++++          $$$$         ", 
+  "                    %%%%                          ))))))                        ***        ,,,                                                                                ++++         $$$$         ", 
+  "                    %%%%                         ))))))                        ****        ,,,                                                                                 +++         $$$$         ", 
+  "                    %%%%                        ))))))                          ***       ,,,,                    .................................                            +++         $$$$         ", 
+  "                    %%%%                      ))))))                            ***       ,,,,           ..........................................                            +++         $$$$         ", 
+  "                    %%%%                     ))))))                             ****      ,,,,          ...........................................                            +++         $$$$         ", 
+  "                    %%%%                    )))))                               ****      ,,,          .................   ..                                                  +++         $$$$         ", 
+  "                    %%%%                  ))))))                                ****      ,,,          .....                                                                   +++         $$$$         ", 
+  "                    %%%%                 ))))))                                  ***      ,,,         ....                                                                     +++         $$$$         ", 
+  "                    %%%%                ))))))                                   ***     ,,,,         ....                                                                     +++         $$$$         ", 
+  "                    %%%%              ))))))             ////////                ***     ,,,,,        ....                                                                     +++         $$$$         ", 
+  "                    %%%%             ))))))             ///////////////          ***     ,,,,        ....                                                                      +++         $$$$         ", 
+  "                    %%%%            )))))              //////////////////////    ****    ,,,         ....                                                                      +++         $$$$         ", 
+  "                    %%%%          ))))))             //////    //////////////    ****    ,,,         ...                                                                       +++         $$$$         ", 
+  "                    %%%%         ))))))             //////           /////////    ***    ,,,         ...                                                                      ++++         $$$$         ", 
+  "                    %%%%        ))))))             /////                   ////   ***    ,,,         ...                                                                      ++++         $$$$         ", 
+  "                    %%%%      ))))))             //////                    /////  ***   ,,,,         ...                      00000000000000000000000000000                   ++++         $$$$         ", 
+  "                    %%%%     ))))))             //////                      ////  ***   ,,,,         ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%    )))))              /////                         ////       ,,,          ...                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%   )))))             //////                           ////      ,,,          ...                      0 0    0    0                                   +++          $$$$         ", 
+  "                    %%%%    )))             //////                            /////     ,,,          ...                                                                      +++          $$$$         ", 
+  "                    %%%%    )               ////                               ////     ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    ///                                 ////    ,,,          ...                                                                     ++++          $$$$         ", 
+  "                     %%%                    ///                                  ////   ,,,          ...                                                                     +++ +         $$$$         ", 
+  "                     %%%                  / ///                                  /////               ...                                                                    ++++           $$$$         ", 
+  "                     %%%                    ///                                   /////              ...                           ++++++++++++++++                        ++++            $$$$         ", 
+  "                     %%%                   ////                                    ///               ...                           ++++++++++++++++++++++++++++++++++++++++++++            $$$$         ", 
+  "                     %%%                   ////                                     ///              ...                           +++++++++++++++++++++++++++++++++++++++++++             $$$$         ", 
+  "                     %%%                   ///                                     ////              ...                           + +      +++++++++++++++++++++++++++++++++              $$$$         ", 
+  "                     %%%                   ///                                     ////              ...                                                   +                               $$$$         ", 
+  "                     %%%                   ///                                     ////              .....                                                                                 $$$$         ", 
+  "                     %%%                   ///                                     ///               ....                                                                                  $$$$         ", 
+  "                     %%%                  ////                                     ///                ....                                                                                 $$$$         ", 
+  "                     %%%                  ////                                     ///                .....                                                                                $$$$         ", 
+  "                     %%%                  ///                                      ///                 ....                                                                                $$$$         ", 
+  "                     %%%                  ///                                     ////                  .....                                                                              $$$$         ", 
+  "                     %%%                  ///                                     ////                   ......          ..                       .                                        $$$$         ", 
+  "                     %%%                  ///                                     ///                    ..........................................                                        $$$$         ", 
+  "                     %%%                  ////                                    ///                      ........................................                                        $$$$         ", 
+  "                     %%%                   ////                                   ///                        ......................................                                        $$$$         ", 
+  "                    %%%%                    ////                                  ///                                                                                                      $$$$         ", 
+  "                    %%%%                    ////                                  ///                                                                                                      $$$$         ", 
+  "                                             ////                                ////                                                                                                      $$$$         ", 
+  "                                              ////                              /////                                                                                                      $$$$         ", 
+  "                                              /////                            /////                                                                                                                    ", 
+  "                                               ////                          //////                                                                                                                     ", 
+  "                                                ////                        //////                                                                                                                      ", 
+  "                                                 ////                      /////                                                                                                                        ", 
+  "                                                 /////                   //////                                                                                                                         ", 
+  "                                                  /////                 //////                                                                                                                          ", 
+  "                                                   ///////////         //////                                                                                                                           ", 
+  "                                                    ///////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                     ////////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                            ////////////                                         11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                                   ////                                          1111111111 11                 1                                                        ", 
+  "                                                                                                                                     1                                                                  ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-adjust-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..13fdc27
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                             !!!!!!                                              !!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!                                                         ", 
+  "                                          !!!!!!!!!!!                                         !!!!!!!                                       !!!!!                                                       ", 
+  "                                        !!!!!!!!!!!!!!!                                     !!!!!!!!!!!                                    !!!!!!!                                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!                                 !!!!!!!!!!                                !!                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!                                 !!!!!!!!!!!!!!!                               !!!!!!!!!!!!!                            !!!!                   ", 
+  "                                   !!!!!!!!!!!! !!!!!!!!!!                              !!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!                          !!!!!!                  ", 
+  "                                  !!!!!!!!!!!!   !!!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!                        !!!!!!!!                 ", 
+  "                                !!!!!!!!!!!!       !!!!!!!!!!                        !!!!!!!!!!!   !!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!!                ", 
+  "                               !!!!!!!!!!!          !!!!!!!!!!                      !!!!!!!!!!!     !!!!!!!!!!                    !!!!!!!!!!!  !!!!!!!!!!!                  !!!!!!!!!!!!                ", 
+  "                             !!!!!!!!!!!!            !!!!!!!!!!                    !!!!!!!!!!!       !!!!!!!!!!!                 !!!!!!!!!!!     !!!!!!!!!!               !!!!!!!!!!!                   ", 
+  "                            !!!!!!!!!!!               !!!!!!!!!!!                !!!!!!!!!!! !         !!!!!!!!!!               !!!!!!!!!!        !!!!!!!!!!             !!!!!!!!!!!                    ", 
+  "                           !!!!!!!!!!!                  !!!!!!!!!!              !!!!!!!!!!!  !!         !!!!!!!!!!            !!!!!!!!!!!          !!!!!!!!!!           !!!!!!!!!!                      ", 
+  "                           !!!!!!!!!                     !!!!!!!!!!           !!!!!!!!!!!                !!!!!!!!!!!         !!!!!!!!!!!           !!!!!!!!!!!!       !!!!!!!!!!!                       ", 
+  "                            !!!!!!!                       !!!!!!!!!!         !!!!!!!!!!!                  !!!!!!!!!!!       !!!!!!!!!!              !!!!!!!!!!!!     !!!!!!!!!!!                        ", 
+  "                             !!!! !                       !!!!!!!!!!!!      !!!!!!!!!!                      !!!!!!!!!!    !!!!!!!!!!!                  !!!!!!!!!!   !!!!!!!!!!                          ", 
+  "                             !!!                           !!!!!!!!!!!!   !!!!!!!!!!!                        !!!!!!!!!!  !!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                              !                               !!!!!!!!!! !!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!                            ", 
+  "                                                               !!!!!!!!!!!!!!!!!!!                              !!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!                              ", 
+  "                                                                 !!!!!!!!!!!!!!!!                                !!!!!!!!!!!!!!!                            !!!!!!!!!!!!!                               ", 
+  "                                            ##                    !!!!!!!!!!!!!                 #                 !!!!!!!!!!!!                               !!!!!!!!!!!                                ", 
+  "                                          #####                    !!!!!!!!!!!                ####                 !!!!!!!!!!                                  !!!!!!!                                  ", 
+  "                                        ########                    !!!!!!!!!                ######                  !!!!!!!                 ##                 !!!!!                     $$$$$$$       ", 
+  "                                       ##########                     !!!!!                 #########                 !!!!                  ####                 !!                       $$$$$$$       ", 
+  "                                     ##############                    !!!                ############                 !!                 ########                                #       $$$$$$$       ", 
+  "                                    ################                                     ##############                                  ##########                             ####      $$$$$$        ", 
+  "                                  ###################                                  ##################                               ############                           #####      $$$$$$        ", 
+  "                                 #####################                                ####################                            ################                        #######     $$$$$$        ", 
+  "                               ############  ###########                             ########### ##########                          ##################                     ##########    $$$$$$        ", 
+  "                             ############      ##########                          ###########    ##########                        ####################                   ############   $$$$$$        ", 
+  "                            ############        ##########                        ###########      ###########                     ##########  ###########               #############    $$$$$$        ", 
+  "                          ############           ###########                     ########## #        ##########                  ###########    ###########             ###########       $$$$$$        ", 
+  "                         ###########               ##########                  ###########  #         ##########                ##########        ##########           ##########         $$$$$$        ", 
+  "                          #########                 ##########                ###########   #          ##########              ##########         ############       ###########          $$$$$$        ", 
+  "                           #######                   ##########             ###########                 ###########          ###########           ############     ###########           $$$$$$        ", 
+  "                 %%%%%%%%  #####                      ###########          ###########                    ##########        ###########               ##########  ###########             $$$$$$        ", 
+  "                  %%%%%%%   ##                          ##########        ##########                       ##########      ##########                  #####################              $$$$$$        ", 
+  "                  %%%%%%%    #                           ##########     ###########                         ###########   ##########                    ##################                $$$$$$        ", 
+  "                  %%%%%%%                                ############  ###########                            #####################                       ###############                 $$$$$$        ", 
+  "                 %%%%%%%%                                 ######################                               ##################                          #############                  $$$$$$        ", 
+  "                  %%%%%%%                                  # ##################                                 ################                            ##########                    $$$$$$        ", 
+  "                  %%%%%%%                                     ################                                   ##############                               #######                     $$$$$$        ", 
+  "                  %%%%%%%                                      #############                                       ###########                                 #####                      $$$$$$        ", 
+  "                  %%%%%%%                                        ##########                                         ########                                    ##                        $$$$$$        ", 
+  "                  %%%%%%%                                         #######                                            ######                                                               $$$$$$$       ", 
+  "                  %%%%%%%                                          #####                                    &&&&&&&    ###                   &&&&&&&&&                                    $$$$$$$       ", 
+  "                  %%%%%%%              &&&&&&&                      ### &&&&&&&&&                        &&&&&&&&&&&                      &&&&&&&&&&&&&                                   $$$$$$$       ", 
+  "                  %%%%%%%            &&&&&&&&&&                       &&&&&&&&&&&&                     &&&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                                  $$$$$$        ", 
+  "                  %%%%%%%          &&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&&                                 $$$$$$        ", 
+  "                  %%%%%%%        &&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&                                $$$$$$        ", 
+  "                  %%%%%%%      &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&                               $$$$$$        ", 
+  "                  %%%%%%%     &&&&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&&           &&&&&&&&&&&&&& &&&&&&&&&          &&&&&&&&&&&&    &&&&&&&&&                              $$$$$$        ", 
+  "                  %%%%%%%    &&&&&&&&&&&& &&&&&&&&&&           &&&&&&&&&&&    &&&&&&&&&         &&&&&&&&&&&   &&&&&&&&&&&         &&&&&&&&&&&&      &&&&&&&&        &                     $$$$$$        ", 
+  "                  %%%%%%%   &&&&&&&&&&&     &&&&&&&&&         &&&&&&&&&&       &&&&&&&&        &&&&&&&&&&         &&&&&&&&       &&&&&&&&&&&&        &&&&&&&&      &&                     $$$$$$        ", 
+  "                  %%%%%%%  &&&&&&&&&&        &&&&&&&&       &&&&&&&&&&&         &&&&&&&&      &&&&&&&&&&           &&&&&&&&    &&&&&&&&&&&            &&&&&&&&   &&&&&                    $$$$$$        ", 
+  "                   %%%%%%   &&&&&&&&          &&&&&&&&     &&&&&&&&&&            &&&&&&&&   &&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&                   $$$$$$        ", 
+  "                  %%%%%%%    &&&&&             &&&&&&&&& &&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&                  $$$$$$        ", 
+  "                   %%%%%%     &&&               &&&&&&&&&&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                 $$$$$$        ", 
+  "                  %%%%%%%      &&               &&&&&&&&&&&&&&&&&&              && &&&&&&&&&&&&&&&&                   &&&&&&&&&&&&&&&                    &&&&&&&&&&&&& &                  $$$$$$        ", 
+  "                  %%%%%%%                        &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&&                     &&&&&&&&&&&&                       &&&&&&&&&&&                     $$$$$$        ", 
+  "                   %%%%%%                         &&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&                          &&&&&&&                       $$$$$$        ", 
+  "                   %%%%%%                           &&&&&&&&&&                         &&&&&&&&                            &&&&                                 &             ''          $$$$$$        ", 
+  "                   %%%%%%                             &&&&&&&                              &                                                                                  ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$$       ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$$       ", 
+  "                   %%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$$       ", 
+  "                   %%%%%%                                                                                    (                                (((((((        '''''''''''''''''''''''''''  $$$$$$$       ", 
+  "                   %%%%%%                                                (((((((                          (((((((((                        (((((((((((       '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%            (((((((((                        ((((((((((((                     (((((((((((((                     (((((((((((((((     '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%          (((((((((((((                     ((((((((((((((                   ((((((((((((((((                 ((((((((((((((((((    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%        ((((((((((((((((                  (((((((((((((((((                ((((((((((((((((((                (((((((((((((((((((     '   '   '''   '    '''      $$$$$$        ", 
+  "                   %%%%%%       ((((((((((((((((((               ((((((((((((((((((((              ((((((((((((((((((((              (((((((((((((((((((((                  '             $$$$$$        ", 
+  "                   %%%%%%     (((((((((((((((((((((             (((((((((((((((((((((             ((((((((((((((((((((((            ((((((((((((  (((((((((                ''             $$$$$$        ", 
+  "                %  %%%%%%    ((((((((((((((((((((((            ((((((((((((   ((((((((           (((((((((((  (((((((((((          (((((((((((      ((((((((                              $$$$$$        ", 
+  "                   %%%%%%   (((((((((((     ((((((((          ((((((((((       ((((((((        (((((((((((      ( (((((((        (((((((((( (       ((((((((       ((                     $$$$$$        ", 
+  "                   %%%%%%  ((((((((((        ((((((((        ((((((((((         ((((((((      ((((((((((          ((((((((      ((((((((((           ((((((((    (((((                    $$$$$$        ", 
+  "                   %%%%%%  (((((((((          (((((((      ((((((((((            ((((((((    ((((((((((            (((((((((  (((((((((((             (((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%   ((((((((          (((((((((  (((((((((((             (((((((((((((((((((((              ((((((((((((((((((((               ((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%    ((((              ((((((((((((((((((((               ((((((((((((((((((                 (((((((((((((((((                 (((((((((((((((((                  $$$$$$        ", 
+  "                   %%%%%%     ((                ((((((((((((((((((              (( ((((((((((((((((                  ((((((((((((((((                   ((((((((((((((((                  $$$$$$        ", 
+  "                   %%%%%%      (                ((((((((((((((((())                (((((((((((((((                    ((((((((((((((                      (((((((((((                     $$$$$$        ", 
+  "                   %%%%%%                         ((((((((((((( ))))                 ((((((((((((                       ((((((((((   **                    (((((((((                      $$$$$$        ", 
+  "                   %%%%%%                          ((((((((((( ))))))         +++++   (((((((((                          (((((((     *************************(((                         $$$$$$        ", 
+  "                   %%%%%%                           ((((((((())))))))       +++++++      ((((                                (       *************************************                $$$$$$        ", 
+  "                   %%%%%%                               (   ))))))))))       ++++++        ,                                         ***************************************              $$$$$$        ", 
+  "                   %%%%%%                                  ))))))))))))      ++++++       ,,,,,,,                                    ****************************************             $$$$$$        ", 
+  "                   %%%%%%                                )))))))))))         ++++++       ,,,,,,,    ------------------------        ******************************************           $$$$$$        ", 
+  "                   %%%%%%                               )))))))))))         +++++++       ,,,,,,     -----------------------------   *******************************************          $$$$$$$$$     ", 
+  "                   %%%%%%                              ))))))))))            +++++++      ,,,,,,     -----------------------------                   ***************************          $$$$$$  $     ", 
+  "                   %%%%%%                            )))))))))))             +++++++      ,,,,,,     -----------------------------                                      **********        $$$$$$        ", 
+  "                   %%%%%%                           )))))))))))              +++++++      ,,,,,,     -----------------------------                                       *********        $$$$$$        ", 
+  "                  %%%%%%%                          ))))))))))))              +++++++     ,,,,,,,     -----------------------------                                         ********       $$$$$$        ", 
+  "                  %%%%%%%                        )))))))))))                 +++++++     ,,,,,,,     -   -  ---  -  --------------                                         ********       $$$$$$        ", 
+  "                  %%%%%%%                       )))))))))))                   ++++++     ,,,,,,,                 -    -   ---   --  ...............                         *******       $$$$$$        ", 
+  "                  %%%%%%%                      ))))))))))                   + +++++++    ,,,,,,              ...--.................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                    )))))))))))                    +++++++++    ,,,,,,         ...........................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                   ))))))))))))                       ++++++    ,,,,,,        ............................................                          ******       $$$$$$        ", 
+  "                   %%%%%%                  ))))))))))))                        ++++++    ,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%                )))))))))))                          +++++++   ,,,,,,,       .............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%               )))))))))))                           +++++++   ,,,,,,,      ..............................................                          *******      $$$$$$        ", 
+  "                   %%%%%%              ))))))))))         ///////             ++++++++  ,,,,,,      ............          ...                                                *******      $$$$$$        ", 
+  "                   %%%%%%            )))))))))))        ////////////           +++++++  ,,,,,,      ........                                                                 *******      $$$$$$        ", 
+  "                   %%%%%%           )))))))))) )       ////////////////////    +++++++  ,,,,,,      ........                                                                 *******      $$$$$$        ", 
+  "                   %%%%%%          ))))))))))         //////////////////////// +++++++  ,,,,,,      ........                                                                 ******       $$$$$$        ", 
+  "                   %%%%%%        )))))))))))   )    ///////////////////////////+++++++  ,,,,,,      .......                                                                  ******       $$$$$$        ", 
+  "                   %%%%%%       ))))))))))         ////////////////////////////+++++++ ,,,,,,,      ......                                                                   ******       $$$$$$        ", 
+  "                   %%%%%%      )))))))))))       ///////////////////////////////++++++ ,,,,,,,      ......                    00000000000000000000000000000                  ******       $$$$$$        ", 
+  "                   %%%%%%    ))))))))))))       ///////////       //////////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$$       ", 
+  "                   %%%%%%   )))))))))) )       //////////               ////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$$       ", 
+  "                   %%%%%%  ))))))))))        ///////////                  //////+++++  ,,,,,,      .......                    00000000000000000000000000000                  ******       $$$$$$$       ", 
+  "                   %%%%%% ))))))))))        ///////////                    ////////    ,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$$       ", 
+  "                  %%%%%%%  )))))))         //////////                       ////////  ,,,,,,,      ......                     00000000000000000000000000000                 *******       $$$$$$        ", 
+  "                  %%%%%%%   )))))))        /////////                         ///////  ,,,,,,,      ......                     00000000000000000000  0 0  00                 ******        $$$$$$        ", 
+  "                  %%%%%%%   ))))           ////////                          //////// ,,,,,,,      ......                     0       0    0                                ******        $$$$$$        ", 
+  "                   %%%%%%    ))           ///////                             ////////,,,,,,       ......                                 00                                ********      $$$$$$        ", 
+  "                   %%%%%%     )           ///////                              //////// ,,,,       ......                          ***                                     *******        $$$$$$        ", 
+  "                   %%%%%%                 ///////                              /////////           ......                          *****************************   ***************        $$$$$$        ", 
+  "                   %%%%%%               ////////                                ////////           ......                          **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                 /////             .......                         **********************************************         $$$$$$        ", 
+  "                   %%%%%%                 //////                                  ///////          .......                         *********************************************          $$$$$$        ", 
+  "                   %%%%%%                 //////                                  ///////           ......                         ********************************************           $$$$$$        ", 
+  "                   %%%%%%                ///////                                  ///////           ...... .                       *******************************************            $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////            ....... .                      *    *                ***************                  $$$$$$        ", 
+  "                   %%%%%%                //////                                   //////            .......                                                 * *                           $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////            ........                                                                              $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////             .......                                                                              $$$$$$        ", 
+  "                   %%%%%%                //////                                  //////              .........          .                    .   .                                        $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////               .......... ..................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "                   %%%%%%               ////////                                ///////                 ...........................................                                       $$$$$$$       ", 
+  "                   %%%%%%                ////////                               ///////                   .........................................                                       $$$$$$        ", 
+  "                  %%%%%%%                 ////////                              //////                      .......................................                                       $$$$$$        ", 
+  "                  %%%%%%%                 ////////                              //////                        ....................................                                        $$$$$$        ", 
+  "                                           ////////                            ///////                                                                                                    $$$$$$$       ", 
+  "                                            ////////                         /////////                                                                                                    $$$$$$        ", 
+  "                                             ///////                        //////////                                                                                                                  ", 
+  "                                             ////////                      //////////                                                                                                                   ", 
+  "                                              ////////                   ///////////                                                                                                                    ", 
+  "                                               ////////                 ///////////                                                                                                                     ", 
+  "                                                ///////////            //////////                                                                                                                       ", 
+  "                                                /////////////////    ///////////                                                         11111111111111111111111111                                     ", 
+  "                                                ///////////////////////////////                                  11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                 /////////////////////////////                                   11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  ////////////////////////////                                   11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                   ////////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                         ////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                               /////////                                         111111111111111111111111111111111111111  1      11                                     ", 
+  "                                                                      /                                          1   1      1111      1       11                                                        ", 
+  "                                                                                                                                     11                                                                 ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..d696844
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                               !                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                            !!!!!!!                                             !!!                                                                                                     ", 
+  "                                           !!!!!!!!!                                           !!!!!!                                        !!!                                                        ", 
+  "                                         !!!!!! !!!!!                                         !!!!!!!                                     ! !!!!!                                                       ", 
+  "                                        !!!!!!   !!!!!!                                     !!!!!!!!!!!                                   !!!!!!!!                                  !                   ", 
+  "                                      !!!!!!       !!!!!                                   !!!!!!  !!!!!                                 !!!!!!!!!!                               !!!!                  ", 
+  "                                     !!!!!!        !!!!!!                                !!!!!!     !!!!!                               !!!!!  !!!!!!                            !!!!!!!                ", 
+  "                                   !!!!!!         ! !!!!!!!                             !!!!!!       !!!!!!                           !!!!!!    !!!!!!                          !!!!! !                 ", 
+  "                                 !!!!!!!           !  !!!!!!  !                        !!!!!          !!!!!!                         !!!!!!       !!!!!                       !!!!!!                    ", 
+  "                                !!!!!!                  !!!!! !                      !!!!!!             !!!!!                       !!!!!          !!!!!                     !!!!!!                     ", 
+  "                              !!!!!!!                    !!!!!                   !  !!!!!!               !!!!!                    !!!!!!            !!!!!!                  !!!!!                       ", 
+  "                             !!!!!!                       !!!!!!                 !!!!!!! !!               !!!!!!                 !!!!!!               !!!!!               !!!!!!                        ", 
+  "                            !!!!!                          !!!!!!               !!!!!!!                     !!!!!               !!!!!                  !!!!! !           !!!!!!                         ", 
+  "                            !!!!!                            !!!!!              !!!!!                      ! !!!!!            !!!!!!                    !!!!!!          !!!!!                           ", 
+  "                             ! ! !                            !!!!!           !!!!!!                          !!!!!!         !!!!!                       !!!!!!       !!!!!!                            ", 
+  "                              !                                !!!!!!        !!!!!                             !!!!!!      !!!!!!                          !!!!!     !!!!!                              ", 
+  "                                                                !!!!!!     !!!!!!                                !!!!!!   !!!!!!                            !!!!!  !!!!!!                               ", 
+  "                                                                  !!!!!   !!!!!!                                  !!!!!! !!!!!                               !!!!!!!!!!!                                ", 
+  "                                                                   !!!!!!!!!!!                                     !!!!!!!!!! !                               !!!!!!!!                                  ", 
+  "                                                                    !!!!!!!!!                                        !!!!!!!                                    !!!!!                                   ", 
+  "                                                                     !!!!!!                                           !!!!                                       !!!                                    ", 
+  "                                           ###                        !!!!                      #                      !!                                         ! !                       $$$$        ", 
+  "                                          #####                      !  !                     ####                                                                                          $$$$$       ", 
+  "                                        ########                                             #######                                         ##                                             $$$$        ", 
+  "                                      ###########                                          ##########                                      #####                                   #        $$$         ", 
+  "                                     ######  ######                                       ###### #####                                    ########                               ###        $$$         ", 
+  "                                   #######     #####                                     #####    #####                                  ##########                             #####       $$$         ", 
+  "                                  ######        #####                                  ######      ######                               #####  #####                           #####        $$$         ", 
+  "                                ######           ######                               ######        ######                            ######    ######                       ######         $$$         ", 
+  "                               ######             ######                             #####            #####                          ######      ######                     ######          $$$         ", 
+  "                             ######                 #####                          ######              #####                        #####          #####                   #####            $$$         ", 
+  "                           #######                   #####                        #####                 ######                     #####            ######               ######             $$$         ", 
+  "                          ######                      ######                    ######                    #####                  ######              ######             #####               $$$         ", 
+  "                           ####                         #####                  ######                      #####                #####                  #####          ######                $$$         ", 
+  "                  %%%%%    ##                            #####                #####                         ######             #####                    ######       ######                 $$$         ", 
+  "                  %%%%%                                   ######            ######                           ######          ######                       #####     #####                   $$$         ", 
+  "                    %%%                                    ######          ######                              #####        ######                         ###### ######                    $$$$$       ", 
+  "                    %%%                                      #####       ######                                 #####      #####                            ###########                     $$$         ", 
+  "                    %%%                                       #####     ######                                   ######   #####                               #######                       $$$         ", 
+  "                    %%%                                        ######  #####                                       ###########                                 #####                        $$$         ", 
+  "                    %%%                                         ###########                                         ########                                    ##                          $$$         ", 
+  "                    %%%                                           ########                                           ######                                                                 $$$         ", 
+  "                    %%%                                            #####                                              ####                                                                $ $$$         ", 
+  "                    %%%                                             ###                                                 #                                                                 $$$$$         ", 
+  "                    %%%                                                                                                                                                                     $$$         ", 
+  "                    %%%                                                &                                                                  &&  &&&&&&&                                       $$$         ", 
+  "                    %%%                                                &  &&&&&&                        && &&&&&&&&                        &&&&&&&&&&&                                      $$$         ", 
+  "                    %%%               &&&&&&&&                        &&&&&&&&&&&                       &&&&&&&&&&&&                      &&&&&&&&&&&&&                                     $$$         ", 
+  "                  %%%%%             &&&&&&&&&&&                      &&&&&&&&&&&&&                     &&&&&&&&&&&&&&                   &&&&&&&&   &&&&&                                    $$$         ", 
+  "                  % %%%           &&&&&&&&&&&&&&                    &&&&&&&  &&&&&&                  &&&&&&&     &&&&&                 &&&&&&       &&&&&                                  $$$$         ", 
+  "                    %%%          &&&&&&&    &&&&&                 &&&&&&&      &&&&&                &&&&&&        &&&&&               &&&&&          &&&&&                                 $$$$         ", 
+  "                    %%%        &&&&&&         &&&&               &&&&&&          &&&&              &&&&&           &&&&&             &&&&&          & &&&&                                 $$$$$$       ", 
+  "                    %%%%      &&&&&&          &&&&&             &&&&&            &&&&&           &&&&&&             &&&&           &&&&&&            & &&&&                                $$$$         ", 
+  "                    %%% %    &&&&&             &&&&            &&&&&              &&&&  &       &&&&&              & &&&&&        &&&&&                 &&&&        &&                     $$$$         ", 
+  "                    %%%     &&&&&               &&&& &        &&&&&                &&&&&       &&&&&                 &&&&&       &&&&&                  &&&&&     &&&&&                    $$$$         ", 
+  "                    %%%      &&& &               &&&&&      &&&&&& &              & &&&&      &&&&&                   &&&&&    &&&&&&                    &&&&&&&&&&&&&&&                   $$$$         ", 
+  "                    %%%       & &               &&&&&&    &&&&&&&                 & &&&&&&  &&&&&&  &                  &&&&&&&&&&&&&&                     &&&&&&&&&&& &&                  $$$$$         ", 
+  "                    %%%        &                &&&&&&&&&&&&&&&                      &&&&&&&&&&&&                       &&&&&&&&&&   &                     &&&&&&&&&                      $$$$$         ", 
+  "                    %%%                            &&&&&&&&&&&                         &&&&&&&&                           &&&&&&                              &&&&                         $$$$         ", 
+  "                    %%%                              &&&&&&&                             &&&&                                &                                                             $$$$         ", 
+  "                    %%%                                 &&                                                                                                                                 $$$$         ", 
+  "                    %%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$         ", 
+  "                    %%%%                                                                                                                                                      ''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                                            '''     $$$$         ", 
+  "                    %%%%%                                                                                                                                    '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                                      '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                                                                                        ((            '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                                                (                                 ( (((((((                        (  ((((((((        '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%                ((((((                         ( ((((((((                        (((((((((((                       ((((((((((((                                     $$$$         ", 
+  "                    %%%             ((((((((((                        ((((((((((((                     (((((((((((((                     ((((((((((((((                                   $$$$$         ", 
+  "                  %%%%%           ((((((((((((((                    (((((((((((((((                  ((((((((   (((((                  (((((((      ((((                                   $$$$         ", 
+  "                  % %%%          (((((((   ((((((                  (((((((     ((((                 ((((((        ((((                ((((((         ((((                                  $$$$         ", 
+  "                    %%%        (((((((       ((((                ((((((         ((((               ((((((          ((((              (((((          ((((((                                 $$$$         ", 
+  "                    %%%       ((((((          ((((              ((((((           ((((             (((((            (((((            (((((            ((((((                                $$$$         ", 
+  "                    %%%      (((((             ((((            (((((              ((((          ((((((             ((((( (        ((((((               ((((         ((                     $$$$         ", 
+  "                    %%%     (((((               (((( (        (((((               (((( (       (((((                 (((( (      (((((                  ((((       ((((                    $$$$$$       ", 
+  "                    %%%     ((((                ((((((      (((((((               (((((       ((((((                  ((((     ((((((                    (((((   (((((((                   $$$$         ", 
+  "                    %%%      ((  (              ((((((     ((((((  (             (  (((((   ((((((  (                 (((((((((((((((                    ((((((((((((((                    $$$$         ", 
+  "                    %%%                        ( ((((((( ((((((                      ((((((((((((                      ((((((((((((                        (((((((((  (                    $$$$         ", 
+  "                    %%%                         (  (((((((((((                        ((((((((((                         ((((((((                           ((((((                         $$$$         ", 
+  "                    %%%                             ((((((((      ))                   (((((((                              (((          *                                                 $$$$         ", 
+  "                    %%%%                              ((((       ))))         +++          (                                            ***            **                                  $$$$         ", 
+  "                  %%%%%%                                        )))))         +++                                                    ************      **                                  $$$$         ", 
+  "                    %%%%                                      )))))) )        +++                                                    ********************************                      $$$$         ", 
+  "                    %%%%                                  )) )))))) ))        ++++          ,,,,,                                    *************************************                 $$$$         ", 
+  "                    %%%%                                   ))))))             ++++          ,,,,,          -      -         -              *********************************               $$$$         ", 
+  "                    %%%%                                  ))))))               +++          ,,,,     -------  -   -   -     -                         *        ***************             $$$$         ", 
+  "                    %%%%%                                ))))))                +++         ,,,,      -----------------------------                    *            **    ******            $$$$         ", 
+  "                    %%%%                              ) )))))                  +++        ,,,,,      -----------------------------                                         ****            $$$$ $       ", 
+  "                    %%%%                              ))))))                   +++       ,,,,,       -----------------------------                                          *****          $$$$$        ", 
+  "                    %%%%                             ))))))                    ++++        ,,,,,     -  -   -    -  -    -  --  --                                           ****          $$$$         ", 
+  "                    %%%%                            ))))) )                    ++++        ,,,       -  -  --    -  -    -   -                                               ****          $$$$         ", 
+  "                    %%%%                          ))))))                        +++        ,,,                            ..            .  .                                  ****         $$$$         ", 
+  "                    %%%%                         ))))))                         +++       ,,,,                             .            .  .                                   ***         $$$$         ", 
+  "                  %%%%%%                        ))))) )                         +++       ,,,,                    .................................                            ***         $$$$         ", 
+  "                    %%%%                      ))))))                            +++       ,,,,           ..........................................                            ***         $$$$         ", 
+  "                    %%%%                     ))))))                             ++++      ,,,           ...........................................                           ****       $$$$$$         ", 
+  "                    %%%%                    ))))) )                             ++++     ,,,,          .................    .                                                  ***        $$$$$         ", 
+  "                    %%%%                  ))))))  )                              +++      ,,,,,        .....   .             .                                                 ***         $$$$         ", 
+  "                    %%%%               ))))))))                                  +++      ,,,         ....                                                                     ***         $$$$         ", 
+  "                    %%%%%              )))))))                     //            +++     ,,,,         ...                                                                      ***         $$$$         ", 
+  "                    %%%%%             ))))))  )          ////////  /             +++     ,,,, ,       ...                                                                      ***         $$$$         ", 
+  "                    %%%%             ))))))             ///////////////          +++     ,,,,        ....                                                                      *****       $$$$         ", 
+  "                    %%%%          )))))))           /  //////////////////////    ++++   ,,,,       . ....                                                                      ***         $$$$         ", 
+  "                    %%%%          )))))) )           //////    //////////////    ++++   ,,,,,,       ...                                                                       ***         $$$$         ", 
+  "                    %%%%         ))))))             //////           /////////    +++    ,,,         ...                           0    0  0         0                        ****         $$$$         ", 
+  "                    %%%%        )))))              /////              //   ////   +++    ,,,         ...                           00   0  0 0 0 0   0                        ****         $$$$         ", 
+  "                    %%%%      )))))) )           //////                    /////  +++  ,,,,,,,       ...                      00000000000000000000000000000                   ****         $$$$         ", 
+  "                    %%%%     )))))) ))          //////                      //// /+++  ,,,,, ,       ...                      00000000000000000000000000000                   ***          $$$$         ", 
+  "                    %%%%    )))))              /////                         ////       ,,,          ...                      00000000000000000000000000000                 *****          $$$$         ", 
+  "                    %%%%   )))))             //////                           ////      ,,,          ...                      00   0   0  0  0    0  00  00                   ***          $$$$         ", 
+  "                    %%%%    )))             //////                            /////     ,,,,,        ...                      00 0 0 0 0  0  0    0  00  00                   ***         $$$$$         ", 
+  "                     %%%    ))              ////                               ////     ,,,          ...                                                                     ****         $$$$$         ", 
+  "                     %%%%                   ///                                 ////    ,,,          ...                                                                     ****          $$$$         ", 
+  "                     %%%                    ///                                  ////   ,,,,,        ...                                                                     ***           $$$$         ", 
+  "                     %%%                    ///                                  /////               ...                                             *              *       **** *         $$$$         ", 
+  "                     %%%                    ///                                   ////             .....                           **************** *              **      ****            $$$$$$       ", 
+  "                   %%%%%                   ////                                    ///               ...                           ********************************************            $$$$$$       ", 
+  "                     %%%                   ////                                     ///              ...                           *******************************************             $$$$         ", 
+  "                     %%%                   ///                                     ////              ...                              *  *  *********************************              $$$$         ", 
+  "                     %%%                   /////                                   ////              ...                              *  *            *                                    $$$$         ", 
+  "                     %%%                   ///                                     ////              ....                                             **                                   $$$$         ", 
+  "                     %%%                   ///                                     ///               ....                                                                                  $$$$         ", 
+  "                     %%%                  ////                                     ///                ....                                                                                 $$$$         ", 
+  "                     %%%                  ////                                     /////              .....                                                                                $$$$         ", 
+  "                     %%%                  ///                                      ///                 ....                                                                                $$$$         ", 
+  "                     %%%                  ///                                     ////                  .....                                                                              $$$$         ", 
+  "                     %%%                  ///                                     ////                   ......      .                                                                     $$$$         ", 
+  "                     %%%                  ///                                     ///                   ...........................................                                        $$$$         ", 
+  "                     %%%                  ////                                    ///                      ........................................                                        $$$$         ", 
+  "                   %%%%%                  /////                                   ///                        ......................................                                        $$$$         ", 
+  "                     %%%                 /  ////                                  ///                                .            .              ..                                        $$$$         ", 
+  "                     %%%                    ////                                  ///                                .            .              ..                                        $$$$$$       ", 
+  "                                             ////                                ////                                                                                                      $$$$         ", 
+  "                                              ////                            / /////                                                                                                      $$$$         ", 
+  "                                              //////                           /////                                                                                                                    ", 
+  "                                               ////                          //////                                                                                                                     ", 
+  "                                                ////                        //////                                                                                                                      ", 
+  "                                                 ////                      ///// /                                                                                                                      ", 
+  "                                                 /////                   ////// /                                                                                                                       ", 
+  "                                                  /////                 //////                                            1            1                 1                                              ", 
+  "                                                   ///////////  //     /////                                              1     11     1    1      1     1                                              ", 
+  "                                                    ///////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                   / ////////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                            ////////////                                         11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                                   ////                                          1111111111          1          1    1    1      11                                     ", 
+  "                                                                  /                                              11      11          1          1    1    1      11                                     ", 
+  "                                                                                                                 11                                                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..ad3ac5c
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "10", 
+  "2", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                             !!!!!!                                              !!                                           !!!                                                       ", 
+  "                                           !!!!!!!!!                                           !!!!!                                         !!                                                         ", 
+  "                                          !!!!!!!!!!!                                         !!!!!!!     !                                 !!!!!                                                       ", 
+  "                                        !!!!!!!!!!!!!!!                                     !!!!!!!!!!!  !                                 !!!!!!!                                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!                             !!    !!!!!!!!!!!!!!                                !!!!!!!!!!                                !!                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!                             !   !!!!!!!!!!!!!!!                               !!!!!!!!!!!!!                            !!!!                   ", 
+  "                                   !!!!!!!!!!!! !!!!!!!!!!                           !!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!                          !!!!!!                  ", 
+  "                                  !!!!!!!!!!!!   !!!!!!!!!!!                        !  !!!!!!!!!!!!!!!!!!!!!                         !!!!!!!!!!!!!!!!!!                        !!!!!!!!                 ", 
+  "                                !!!!!!!!!!!!       !!!!!!!!!!                        !!!!!!!!!!!   !!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!!                     !!!!!!!!!!! !              ", 
+  "                               !!!!!!!!!!!          !!!!!!!!!!   !!!                !!!!!!!!!!!     !!!!!!!!!!                    !!!!!!!!!!!  !!!!!!!!!!!                  !!!!!!!!!!! !!              ", 
+  "                             !!!!!!!!!!!!            !!!!!!!!!! !!!                !!!!!!!!!!!       !!!!!!!!!!!                 !!!!!!!!!!!     !!!!!!!!!!               !!!!!!!!!!! !!  !             ", 
+  "                            !!!!!!!!!!!               !!!!!!!!!!! !              !!!!!!!!!!!           !!!!!!!!!!           !   !!!!!!!!!!       !!!!!!!!!!!             !!!!!!!!!!!   !!!!             ", 
+  "                           !!!!!!!!!!!               !  !!!!!!!!!!!             !!!!!!!!!!!!            !!!!!!!!!!          !!!!!!!!!!!!!       !! !!!!!!!!!!     !     !!!!!!!!!!                      ", 
+  "                           !!!!!!!!!!                !  !!!!!!!!!!!           !!!!!!!!!!!   ! !          !!!!!!!!!!!      !  !!!!!!!!!!!       !!   !!!!!!!!!!!  !!!  !!!!!!!!!!!                       ", 
+  "                            !!!!!!! !               !  !! !!!!!!!!!!         !!!!!!!!!!!     !!           !!!!!!!!!!!     !!!!!!!!!!!!         !      !!!!!!!!!! !   !!!!!!!!!!!                        ", 
+  "                             !!!!!!  !               !!!    !!!!!!!!!!      !!!!!!!!!!                      !!!!!!!!!!    !!!!!!!!!!!                  !!!!!!!!!!!  !!!!!!!!!!                          ", 
+  "                             !!!  !  !!                      !!!!!!!!!!   !!!!!!!!!!!                        !!!!!!!!!!  !!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                               !!  !                          !!!!!!!!!! !!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!                       !!!!!!!!!!!!!!!!!!!                            ", 
+  "                                !  !                           !!!!!!!!!!!!!!!!!!!                           !  !!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!                              ", 
+  "                                 !                               !!!!!!!!!!!!!!!!                           !    !!!!!!!!!!!!!!!                            !!!!!!!!!!!!!                               ", 
+  "                                            ##                    !!!!!!!!!!!!!                 #           !     !!!!!!!!!!!!  !                            !!!!!!!!!!!                                ", 
+  "                                          #####                    !!!!!!!!!!!                ####                 !!!!!!!!!!   !!                             !!!!!!!                                  ", 
+  "                                        ########                    !!!!!!!!!                ######                  !!!!!!      !           ##                 !!!!!!                    $$$$$$ $      ", 
+  "                                       ##########                     !!!!!                 #########                 !!!!                  ####                 !!  !                    $$$$$$$$ $    ", 
+  "                                     ##############                    !!!                ############                 !!                 ########                 !  !           #       $$$$$$ $ $    ", 
+  "                                    ################                      !              ##############                                  ##########                !  !         ####      $$$$$$$$ $    ", 
+  "                                  ###################                     !            ##################                               ############               !           #####      $$$$$$ $$     ", 
+  "                                 #####################                     !          ####################                            ################                        #######     $$$$$$        ", 
+  "                               ############  ###########                             ########### ##########                          ##################                     ##########    $$$$$$        ", 
+  "                             ############      ##########                          ###########    ##########                        ####################                   ###########    $$$$$$        ", 
+  "                            ############        ##########                        ###########      ###########                     ##########  ###########               ###########      $$$$$$        ", 
+  "                          ############           ###########                     ##########          ##########                  ###########    ###########             ###########       $$$$$$        ", 
+  "                         ###########               ##########                  ###########            ##########                ##########        ##########           ##########         $$$$$$        ", 
+  "                          #########                 ##########                ###########              ##########              ##########          ###########       ###########          $$$$$$        ", 
+  "                           ######                    ##########             ###########                 ###########          ###########            ###########     ###########           $$$$$$        ", 
+  "                  %%%%%%%  #####                      ###########          ###########                    ##########        ###########               ##########  ###########             $$$$$$        ", 
+  "              %%%%%%%%%%%   ##                          ##########        ##########                       ##########      ##########                  #####################              $$$$$$        ", 
+  "                  %%%%%%%                                ##########     ###########                         ###########   ##########                    ##################                $$$$$$        ", 
+  "              %%%%%%%%%%%                                 ###########  ###########                            #####################                       ###############                 $$$$$$$$$$    ", 
+  "                  %%%%%%%                                  #####################                               ##################                          #############                  $$$$$$        ", 
+  "                  %%%%%%%                                    ##################                                 ################                            ##########                    $$$$$$$       ", 
+  "               %%%%%%%%%%                                     ################                                   ##############                               #######                     $$$$$$$$$$    ", 
+  "                  %%%%%%%                                      #############                                       ###########                                 #####                    $ $$$$$$        ", 
+  "                  %%%%%%%                                        ##########                                         ########                                    ##                      $ $$$$$$        ", 
+  "                  %%%%%%%                                         #######                                &           ######              &&                                            $$$$$$$$$        ", 
+  "                  %%%%%%%                                          #####&                                &  &&&&&&&    ###              &&   &&&&&&&&&                                    $$$$$$        ", 
+  "                  %%%%%%%              &&&&&&&                      ### &&&&&&&&&                     &  &&&&&&&&&&&                      &&&&&&&&&&&&&                                   $$$$$$        ", 
+  "                  %%%%%%%            &&&&&&&&&&                      &&&&&&&&&&&&&                     &&&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                                  $$$$$$        ", 
+  "                  %%%%%%%          &&&&&&&&&&&&&                    &&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&&                                 $$$$$$        ", 
+  "                  %%%%%%%        &&&&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&                                $$$$$$        ", 
+  "                  %%%%%%%      &&&&&&&&&&&&&&&&&&&               &&&&&&&&&&&&&&&&&&&&    &         &&&&&&&&&&&&&&&&&&&&&&&&          &&&&&&&&&&&&&&&&&&&&&&                               $$$$$$        ", 
+  "                  %%%%%%%     &&&&&&&&&&&&&&&&&&&&&&&&&         &&&&&&&&&&&&&&&&&&&&&& &&        &&&&&&&&&&&&&  &&&&&&&&& &        &&&&&&&&&&&&    &&&&&&&&&                              $$$$$$        ", 
+  "               %%%%%%%%%%    &&&&&&&&&&&& &&&&&&&&&& &&        &&&&&&&&&&&    &&&&&&&&&&        &&&&&&&&&&&      &&&&&&&&         &&&&&&&&&&&       &&&&&&&&        &                     $$$$$$        ", 
+  "                  %%%%%%%   &&&&&&&&&&&     &&&&&&&&&&        &&&&&&&&&&       &&&&&&&&        &&&&&&&&&&         &&&&&&&&       &&&&&&&&&&         &&&&&&&&&      &&                     $$$$$$$$$$    ", 
+  "               %  %%%%%%%%%&&&&&&&&&&        &&&&&&&&       &&&&&&&&&&&         &&&&&&&&      &&&&&&&&&&           &&&&&&&&    &&&&&&&&&&&         &&&&&&&&&&&   &&&&&                    $$$$$$        ", 
+  "               %%%%%%%%%% %%&&&&&&&& &        &&&&&&&&     &&&&&&&&&& &          &&&&&&&&   &&&&&&&&&&&             &&&&&&&&&&&&&&&&&&&&&         &   &&&&&&&&&&&&&&&&&                   $$$$$$        ", 
+  "                   %%%%%%%   &&&&&&  &&        &&&&&&&&& &&&&&&&&&&&  &&          &&&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&              &&&&&&&&&&&&&&&&&&&                $ $$$$$$        ", 
+  "                   %%%%%%     &&&  &  &         &&&&&&&&&&&&&&&&&&&    &          &&&&&&&&&&&&&&&&&&  &             &&&&&&&&&&&&&&&&&&              &&  &&&&&&&&&&&&&&&&&               $ $$$$$$        ", 
+  "                   %%%%%%      &&  &&           &&&&&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&    &           && &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&&  &              $$$$$$$$        ", 
+  "                   %%%%%%        &  &            &&&&&&&&&&&&&&&                    &&&&&&&&&&&&&&     &          &    &&&&&&&&&&&&  &                    &&&&&&&&&&& &&&                 $$$$$$        ", 
+  "                   %%%%%%        &&               &&&&&&&&&&&&&                     &&&&&&&&&&&&&                       &&&&&&&&&&   &&                     &&&&&&&   &  &&               $$$$$$        ", 
+  "                   %%%%%%                          &&&&&&&&&&                       &  &&&&&&&&                            &&&&       &                         &      &&&                $$$$$$        ", 
+  "                   %%%%%%                          &  &&&&&                        &       &                                                                                  ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                         &  &&                            &&                                                                                         ''''''''''  $$$$$$        ", 
+  "                   %%%%%%                         && &                                                                                                                        ''''''''''  $$$$$$        ", 
+  "               %%%%%%%%%%                            &                                                                                                                        ''''''''''  $$$$$$$$$$    ", 
+  "                   %%%%%%                                                                                                                                                     ''''''''''  $$$$$$        ", 
+  "                   %%%%%%%%                                                                                                                                  '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%% %                                                                                                                                  '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%%%                                                                                  (                                (((((((        '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%%%%%                                            (((((((                          (((((((((                        (((((((((((       '''''''''''''''''''''''''''$$$$$$$$        ", 
+  "                   %%%%%%            (((((((((                        ((((((((((((                     (((((((((((((                     (((((((((((((((     '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%          (((((((((((((                     ((((((((((((((                   ((((((((((((((((                 ((((((((((((((((((    '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                   %%%%%%        ((((((((((((((((                  (((((((((((((((((                ((((((((((((((((((                (((((((((((((((((((                               $$$$$$$$        ", 
+  "                   %%%%%%       ((((((((((((((((((               ((((((((((((((((((((              ((((((((((((((((((((              (((((((((((((((((((((                                $$$$$$        ", 
+  "                   %%%%%%     (((((((((((((((((((((             (((((((((((((((((((((             ((((((((((((((((((((((            ((((((((((((  (((((((((                               $$$$$$        ", 
+  "               %%%%%%%%%%    ((((((((((((((((((((((            ((((((((((((   ((((((((           (((((((((((    (((((((((          ((((((((((       ((((((((                              $$$$$$        ", 
+  "               %   %%%%%%   (((((((((((     ((((((((          ((((((((((       ((((((((        (((((((((((        (((((((        ((((((((((         ((((((((       ((                     $$$$$$        ", 
+  "                   %%%%%%  ((((((((((        ((((((((        ((((((((((         ((((((((      ((((((((((          ((((((((      ((((((((((           ((((((((    (((((                    $$$$$$$$$$    ", 
+  "                   %%%%%%  (((((((((          (((((((      ((((((((((            ((((((((    ((((((((((            (((((((((  (((((((((((             (((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%%% ((((((            (((((((((  (((((((((((             (((((((((((((((((((((              ((((((((((((((((((((               ((((((((((((((((                   $$$$$$        ", 
+  "                   %%%%%%    ((((              ((((((((((((((((((((               ((((((((((((((((((                 (((((((((((((((((      )))        (((((((((((((((((                  $$$$$$        ", 
+  "                   %%%%%%     ((                ((((((((((((((((((                 ((((((((((((((((                  ((((((((((((((((          )        ((()(()((((((((                   $$$$$$        ", 
+  "                   %%%%%%                       (((((((((((((((((**                (((((((((((((((                    ((((((((((((((        ))))          ()(()((((((      )              $$$$$$        ", 
+  "                   %%%%%%                         ((((((((((((( ****                 ((((((((((((                       ((((((((((   )      )  )           )(()(((((      )               $$$$$$        ", 
+  "                   %%%%%%                          ((((((((((( ******         +++++   (((((((((                          (((((((     ))))))))))))))))))))))) ))((         )               $$$$$$        ", 
+  "                   %%%%%%                           (((((((( ********       +++++++      ((((                                (       )))))))))))))))))))))))))))))))))))))            $ $$$$$$$$        ", 
+  "               %%%%%%%%%%                               (*  **********       ++++++        ,                                         )))))))))))))))))))))))))))))))))))))))              $$$$$$        ", 
+  "                   %%%%%%                                 ************       ++++++       ,,,,,,,                                    ))))))))))))))))))))))))))))))))))))))))             $$$$$$        ", 
+  "                   %%%%%%                             *  *********** **      ++++++       ,,,,,,,    ------------------------        ))))))))))))))))))))))))))))))))))))))))))           $$$$$$        ", 
+  "                   %%%%%%                           **  ************** *     ++++++       ,,,,,,     -----------------------------   )))))))))))))))))))))))))))))))))))))))))))          $$$$$$   $    ", 
+  "                   %%%%%%%%                         * ***********  ** **     +++++++      ,,,,,,     -----------------------------                 ) )))))))))))))))))))))))))))          $$$$$$$$$$    ", 
+  "                   %%%%%%                            ***********    **       +++++++      ,,,,,,     -----------------------------                 )            ))      )))))))))   ))    $$$$$$        ", 
+  "                   %%%%%%                        *  *********** *             ++++++      ,,,,,,     -----------------------------                 )          ))))       )))))))))))      $$$$$$        ", 
+  "                   %%%%%%%%                      *************   *            ++++++     ,,,,,,,     -----------------------------                )                        ))))))))       $$$$$$        ", 
+  "                   %%%%%%                     ** ***********  *  *            ++++++     ,,,,,,,                    --------------                                         ))))))))       $$$$$$        ", 
+  "                   %%%%%%                 *    ************   **              ++++++     ,,,,,,,                                    ...............                         )))))))       $$$$$$        ", 
+  "                   %%%%%%                  *   ********** *    *              +++++++    ,,,,,,              ......................................                       )))))))))       $$$$$$        ", 
+  "               %%%%%%%%%%              *    ************   *                  +++++++    ,,,,,,         ...........................................                          ))))))   $$$$$$$$$$        ", 
+  "                   %%%%%%              *    ************    *                  ++++++    ,,,,,,        ............................................                          ))))))     $ $$$$$$        ", 
+  "                   %%%%%%              **  **********  *                       ++++++    ,,,,,,       .............................................                        )))))))))    $ $$$$$$        ", 
+  "                   %%%%%%             *  ***********    *                      ++++++   ,,,,,,,       .............................................                          )))))))    $$$$$$$$        ", 
+  "                   %%%%%%             * *************                          ++++++   ,,,,,,,      ............................................                            )))))))      $$$$$$        ", 
+  "                   %%%%%%             ***********   *     ////                 +++++++  ,,,,,,      ............                                                             )))))))      $$$$$$$$$$    ", 
+  "                   %%%%%%%%     **   ***********     *  ////////////           +++++++  ,,,,,,      .......                                                                  )))))))      $$$$$$        ", 
+  "                   %%%%%%%      * ************ **      ////////////////////    +++++++  ,,,,,,      .......                                                                  ))))))))))   $$$$$$        ", 
+  "                   %%%%%% %      * **********   * *   ////////////////////////  ++++++  ,,,,,,      ......                                                                   ))))))       $$$$$$        ", 
+  "                   %%%%%%        ************    *  /////////////////////////// ++++++  ,,,,,,      ......                                                                   ))))))       $$$$$$        ", 
+  "                   %%%%%%       **********  **     //////////////////////////// ++++++ ,,,,,,,      ......                                                                   ))))))       $$$$$$        ", 
+  "               %%% %%%%%%      **********    *   ///////////////////////////////++++++ ,,,,,,,      ......                    00000000000000000000000000000                  ))))))       $$$$$$        ", 
+  "                   %%%%%%    *********** *      ///////////       //////////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ))))))       $$$$$$        ", 
+  "                   %%%%%%   ***********  **    //////////               ////////+++++++,,,,,,      .......                    00000000000000000000000000000                  ))))))       $$$$$$        ", 
+  "                   %%%%%%  ********** **  *  ///////////                  ///////++++  ,,,,,,      .......                    00000000000000000000000000000              ))))))))))       $$$$$$        ", 
+  "                   %%%%%% **********   ***  ///////////                    ////////    ,,,,,,      ......                     00000000000000000000000000000                 )))))))       $$$$$$        ", 
+  "                   %%%%%%  *********       //////////                       ////////  ,,,,,,,      ......                     00000000000000000000000000000                 )))))))    $$$$$$$$$        ", 
+  "                   %%%%%%   ******  *      /////////                         ///////  ,,,,,,,      ......                     000000000000000000  )                         ))))))    $$  $$$$$$        ", 
+  "                   %%%%%%   **** *  **     ////////                          //////// ,,,,,,,      ......                                        ))               )         ))))))      $$$$$$$$$$$$    ", 
+  "                   %%%%%%%%%%**   *       ///////                             ////////,,,,,,       ......                                        ) )            )))         ))))))   )    $$$$$$   $    ", 
+  "                   %%%%%%      *  **      ///////                              //////// ,,,,       ......                          )))           ) )           )  )        )))))))))))    $$$$$$   $    ", 
+  "               %%%%%%%%%%       *         ///////                              ////////            ......                          )))))))))))))))))))))))))))))  ))))))))))))))))        $$$$$$$$$     ", 
+  "                   %%%%%%       *         //////                                ////////           ......                          ))))))))))))))))))))))))))))))))))))))))))))))         $$$$$$        ", 
+  "                   %%%%%%                 //////                                 /////             .......                         ))))))))))))))))))))))))))))))))))))))))))))))         $$$$$$        ", 
+  "               %%%%%%%%%%                 //////                                  //////           .......                         )))))))))))))))))))))))))))))))))))))))))))))          $$$$$$        ", 
+  "                   %%%%%%                 //////                                  //////            ......                         ))))))))))))))))))))))))))))))))))))))))))))           $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////            ......                         )))))))))))))))))))))))))))))))))))))))))))            $$$$$$        ", 
+  "                   %%%%%%                ///////                                  //////            ......                                ) )) )         )))))))))))))))  )               $$$$$$        ", 
+  "                   %%%%%%                //////                                   //////            .......                              )  )  )           )  )           )               $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////            ........                             )  )  )           )  )           )               $$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////             .......                             )  )  )           )  )           )               $$$$$$        ", 
+  "                   %%%%%%                //////                                  //////              .........                                              ) )                           $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////               .......... ..................................                                       $$$$$$        ", 
+  "                   %%%%%%               ///////                                  //////                ............................................                                       $$$$$$$$$$    ", 
+  "                %%%%%%%%%               ///////                                  //////                ............................................                                       $$$$$$        ", 
+  "               %%% %%%%%%               ////////                                ///////                 ...........................................                                       $$$$$$        ", 
+  "               % % %%%%%%                ////////                               ///////                   .........................................                                       $$$$$$$$$$    ", 
+  "               % %%%%%%%%                 ////////                              //////                      .......................................                                       $$$$$$        ", 
+  "                 % %%%%%%                 ////////                              //////                        ....................................                                        $$$$$$$       ", 
+  "                                           ////////                            ///////                                                                                                    $$$$$$$$$$    ", 
+  "                                            ////////                         /////////                                                                                                    $$$$$$        ", 
+  "                                             ///////                        //////////                                                                                                                  ", 
+  "                                             ////////                      //////////                                                                                                                   ", 
+  "                                              ////////                   ///////////                                       1       1   1                 1                                              ", 
+  "                                               ////////                 ///////////                                       11     111   1    1 1    111  111                                             ", 
+  "                                                ///////////            //////////                                         1 1   11 1   1    1     1      1                                              ", 
+  "                                                /////////////////    ///////////                                         11 1   1  1   1 11111111111111111111111111                                     ", 
+  "                                                 //////////////////////////////                                  11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  ///////////////////////////                                    11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                  //////////////////////////                                     11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                   ////////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                         ////////////////                                        11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                               /////////                                         11111111111111111111111111111111111111 1111   1  1                                     ", 
+  "                                                                      /                                          11 11 1   1  1   1   1    1    1   1   1  1   1111                                     ", 
+  "                                                                                                                 1  1  1   1  1   1   1    1    1   1   1  1   1                                        ", 
+  "                                                                                                                 1  1  1   1  1   1   1    1    1   1   1  1   1111                                     ", 
+  "                                                                                                                 1  1  1    111   1    11                                                               ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halo-opacity-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-halo-opacity-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..046aa0c
--- /dev/null
+++ b/tests/visual_tests/grids/text-halo-opacity-512-512-1.0-grid-reference.json
@@ -0,0 +1,140 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                     !!!!!!!!! !!!!!!!!!!!!!!!    !!!!!!!                                                                       ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                       ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                       ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                                       ", 
+  "                     !!!!!!!!!!!!!!!!!!!!!!!!     !!!!!!!                                                                       ", 
+  "                                !!!       !!                                                                                    ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                   ###  ###           ####       #########                                                                      ", 
+  "                   #######################################                                                                      ", 
+  "                   #######################################                                                                      ", 
+  "                   #######################################                                                                      ", 
+  "                   #######################################                                                                      ", 
+  "                               ###      ####                                                                                    ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                     $$  $$$           $$$$      $$$$$$$$                                                                       ", 
+  "                     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                       ", 
+  "                     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                       ", 
+  "                     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                                       ", 
+  "                     $$$$$$$$$$$$$$$$$$$$$$$$     $$$$$$$                                                                       ", 
+  "                                $$$       $$$                                                                                   ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                   %%%  %%%           %%%                                                                                       ", 
+  "                   %%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%%%%%%%                                                                      ", 
+  "                   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                                      ", 
+  "                   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                                      ", 
+  "                   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                                      ", 
+  "                   %%%%%%%%%%%%%%%%%%%%%%%%%     %%%%%%%%%                                                                      ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halo-opacity-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-halo-opacity-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..5ceda9e
--- /dev/null
+++ b/tests/visual_tests/grids/text-halo-opacity-512-512-2.0-grid-reference.json
@@ -0,0 +1,140 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "3", 
+  "4"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "   !!!!!    !!!!!                       !!!!!                !!!!!! !!!!!!                                                      ", 
+  "   !!!!!    !!!!!                       !!!!!!!             !!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!                                                     ", 
+  "   !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!                                                     ", 
+  "                          !!!!!              !!!!!!                                                                             ", 
+  "                          !!!!!              !!!!!                                                                              ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "#####     #####                      #######              ###################                                                   ", 
+  "##################  ##############################        ###################                                                   ", 
+  "#############################################################################                                                   ", 
+  "#############################################################################                                                   ", 
+  "#############################################################################                                                   ", 
+  "#############################################################################                                                   ", 
+  "#############################################################################                                                   ", 
+  "#############################################################################                                                   ", 
+  "#################################################         ###################                                                   ", 
+  "################### #############################         ###################                                                   ", 
+  "                        #####             ######                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "   $$$$$    $$$$$                       $$$$$                                                                                   ", 
+  "   $$$$$    $$$$$                       $$$$$$$             $$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$        $$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     ", 
+  "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$         $$$$$$$$$$$$$$$                                                     ", 
+  "                          $$$$$              $$$$$$                                                                             ", 
+  "                          $$$$$              $$$$$                                                                              ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "%%%%%     %%%%%                      %%%%%%%              %%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%     %%%%%                      %%%%%%%              %%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                   ", 
+  "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%         %%%%%%%%%%%%%%%%%%%                                                   ", 
+  "                        %%%%%             %%%%%%                                                                                ", 
+  "                        %%%%%             %%%%%                                                                                 ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halo-rasterizer-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/text-halo-rasterizer-600-400-1.0-grid-reference.json
index 56a29ed..a574873 100644
--- a/tests/visual_tests/grids/text-halo-rasterizer-600-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/text-halo-rasterizer-600-400-1.0-grid-reference.json
@@ -29,9 +29,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                  !    !   !                                  ##  ##                                                  ", 
-  "                                                  ! ! !!   !                                ####   #                                                  ", 
-  "                                                  !!! ! !  !!                               #### ###                                                  ", 
+  "                                                       !   !                              #   ##   #                                                  ", 
+  "                                                   !!! !                                  #  ###   #                                                  ", 
+  "                                                   !!!!!! !!!                             # #### # #                                                  ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -39,9 +39,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                  $    $    $                                 %%  %%                                                  ", 
-  "                                                  $ $ $$   $$                               %%%%   %                                                  ", 
-  "                                                  $$$ $ $  $$                               %%%% %%%                                                  ", 
+  "                                                       $   $$                             %   %%  %%                                                  ", 
+  "                                                   $$$ $    $                             %  %%%   %                                                  ", 
+  "                                                   $$$$$$ $$$                             % %%%% %%%                                                  ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -49,9 +49,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                  &    &                                      ''  '                                                   ", 
-  "                                                  & & &&    &                               ''''  ''                                                  ", 
-  "                                                  &&& & &  &&                               '''' '''                                                  ", 
+  "                                                       &   &&                             '   ''   '                                                  ", 
+  "                                                   &&& &   &&                             '  '''   '                                                  ", 
+  "                                                   &&&&&& &&&                             ' '''' '''                                                  ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -59,9 +59,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                  (    (   ((                                 ))  ))                                                  ", 
-  "                                                  ( ( ((                                    ))))   )                                                  ", 
-  "                                                  ((( ( (  (                                )))) )                                                    ", 
+  "                                                       (   ((                             )   ))  ))                                                  ", 
+  "                                                   ((( (    (                             )  )))   )                                                  ", 
+  "                                                   (((((( (                               ) )))) ) )                                                  ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -69,9 +69,9 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                  **********                               ++ +++ +                                                   ", 
-  "                                                   ******  *                               ++ +++ +                                                   ", 
-  "                                                   *********                               ++++++ ++                                                  ", 
+  "                                                  *** *** **                              ++++++  +                                                   ", 
+  "                                                  *******  *                               +++++  +                                                   ", 
+  "                                                  ******* ***                              +++++  ++                                                  ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
@@ -79,30 +79,30 @@
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                 ,,,,,,,,,  ,,                           ------ -- --                                                 ", 
-  "                                                 ,,,,,,  ,  ,,                           - ----  - ---                                                ", 
-  "                                                 ,,,,,,,,,,,,,                           - ---- ------                                                ", 
+  "                                                ,,,,,,,, ,  ,,                           -- --- -- ---                                                ", 
+  "                                                , ,,,,,  ,  ,,,                          -- ---  - ---                                                ", 
+  "                                                ,,,,,,,, ,,,,,,                          ------ ------                                                ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                 ..     ......                           //  // // ///                                                ", 
-  "                                                ..............                           ////// // ///                                                ", 
-  "                                                ..............                           ////// // ///                                                ", 
-  "                                                 .............                           /////////////                                                ", 
+  "                                                ..       .. ...                          // /// // ///                                                ", 
+  "                                                ........... ...                         /////// // ///                                                ", 
+  "                                                ........ .. ...                         /////// // ///                                                ", 
+  "                                                ...............                          ////// //////                                                ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
-  "                                                  000  000000                             111 111111                                                  ", 
-  "                                                 000000000000                             1111111111                                                  ", 
+  "                                                 0000  00 000                             111 1111111                                                 ", 
   "                                                 000000000000                             11111111111                                                 ", 
-  "                                                  00000000000                             11111111111                                                 ", 
-  "                                                  00000000000                             1111111 11                                                  ", 
+  "                                                 0000000000000                            11111111111                                                 ", 
+  "                                                 0000000000000                            11111111111                                                 ", 
+  "                                                 000000000 00                             1111111 111                                                 ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
   "                                                                                                                                                      ", 
diff --git a/tests/visual_tests/grids/text-halo-rasterizer-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/text-halo-rasterizer-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..5c6db82
--- /dev/null
+++ b/tests/visual_tests/grids/text-halo-rasterizer-600-400-2.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "9", 
+  "2", 
+  "10", 
+  "3", 
+  "11", 
+  "4", 
+  "12", 
+  "5", 
+  "13", 
+  "6", 
+  "14", 
+  "7", 
+  "15", 
+  "8", 
+  "16"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                             !                                        ##     # #                                                      ", 
+  "                                            !          !       !!                            # #      ##                                              ", 
+  "                                            !! !!! !!! !!!      !                    ####  # # #       #                                              ", 
+  "                                            !   !! !   !        !                    #  #  # # #       #                                              ", 
+  "                                            !  ! !  !! !        !                    #  #  # # #       #                                              ", 
+  "                                            !  ! ! ! ! !!    ! !!!!                  #  # ## # #   #  ###                                             ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                             $                                        %%     % %                                                      ", 
+  "                                            $          $       $ $$                          % %      % %                                             ", 
+  "                                            $$ $$$ $$$ $$$       $$                  %%%%  % % %        %                                             ", 
+  "                                            $    $ $   $        $$                   %  %  % % %       %%                                             ", 
+  "                                            $  $ $  $$ $          $                  %  %  % % %        %                                             ", 
+  "                                            $  $ $ $ $ $$    $ $ $$                  %  % %% % %   %    %                                             ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                            &&&                &&&&                   ''     ' '      '''                                             ", 
+  "                                            &&         &       &&&&                  ''      ' '      '''                                             ", 
+  "                                           &&&&&&& &&&&&&&     &&&                   '''' '' ' '      '''                                             ", 
+  "                                            &  &&&&&&  &       &&&&                  '' ' '' ' '      ''''                                            ", 
+  "                                            & &&&&&&&&&&         &&                  '' ' '' ' '        ''                                            ", 
+  "                                            & &&&&&&&&&&&&  && &&&&                  '' '''' ' '   '''''''                                            ", 
+  "                                            &  &&&&&&&  &&  && &&&                   '' '''' ' '   ''''''                                             ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                            (((                ((((                   ))     ) )     )))))                                            ", 
+  "                                            ((         (       ((((                  ))      ) )     )))))                                            ", 
+  "                                           ((((((( (((((((       ((                  )))) )) ) )       ))                                             ", 
+  "                                            (  ((((((  (        ((                   )) ) )) ) )       ))                                             ", 
+  "                                            ( ((((((((((        ((                   )) ) )) ) )       )                                              ", 
+  "                                            ( ((((((((((((  ((  (                    )) )))) ) )   )) ))                                              ", 
+  "                                            (  (((((((  ((  (( ((                    )) )))) ) )   )) ))                                              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                             ***        **   ****                     +++    ++ +   +++                                               ", 
+  "                                             ******  ** **   ****                     +++    ++ +   +++                                               ", 
+  "                                            ***************    **                     +++++++++ +    ++                                               ", 
+  "                                             ** **********     **                     ++ ++++++ +    ++                                               ", 
+  "                                             *************     **                     ++ ++++++ +    ++                                               ", 
+  "                                             **************   ****                    ++ ++++++ +   +++++                                             ", 
+  "                                             ** ***********   ****                    ++ ++++++ +   +++++                                             ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                         ,,,,       ,,,   ,,,    ,,,,             ----    ----  ----   -----                                          ", 
+  "                                         ,,,,,,,,,,,,,,,  ,,,    ,,,,             ----- ------  ----   -----                                          ", 
+  "                                         ,,,,,,,,,,,,,,,  ,,,    ,,,,             ----- ------  ----   -----                                          ", 
+  "                                         ,,,,,,,,,,,,,,,   ,,    ,,,,,            ----- ------    --   -----                                          ", 
+  "                                         ,,,,,,,,,,,,,,    ,, ,,,, ,,,            ------------    -- ---- --                                          ", 
+  "                                         ,,,,,,,,,,,,,,,  ,,,,,,,,,,,,            ------------  ------------                                          ", 
+  "                                         ,,,,,,,,,,,,,,,  ,,,,,,,,,,,             ------------  ------------                                          ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                         ....            .....  ......            /////  ////// /////  //////                                         ", 
+  "                                         ....       ...  ...... ......            /////  ////// ////// //////                                         ", 
+  "                                        ................ ...... ......           ////////////// ////// //////                                         ", 
+  "                                        ................ ...... ......           ////////////// ////// //////                                         ", 
+  "                                        ................  ..... ......           ////////////// ////// //////                                         ", 
+  "                                         ............... .............            ///////////// /////////////                                         ", 
+  "                                         ............... .............            ///////////// /////////////                                         ", 
+  "                                         ............... .............            ///////////// /////////////                                         ", 
+  "                                         ............... ............             ///////////// ////////////                                          ", 
+  "                                            000000                                   111111 1111111                                                   ", 
+  "                                           0000000    00000  000000                  111111 1111111 111111                                            ", 
+  "                                           000000000000000000000000                 1111111111111111111111                                            ", 
+  "                                           000000000000000000000000                 1111111111111111111111                                            ", 
+  "                                           0000000000000000000000000                1111111111111111111111                                            ", 
+  "                                           0000000000000000000000000                1111111111111111111111                                            ", 
+  "                                           0000000000000000000000000                1111111111111111111111                                            ", 
+  "                                           0000000000000000000000000                 111111111111111111111                                            ", 
+  "                                           0000000000000000000000000                 111111111111111111111                                            ", 
+  "                                           000000000000000000 00000                  11111111111111  11111                                            ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halo-transform-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/text-halo-transform-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..401b436
--- /dev/null
+++ b/tests/visual_tests/grids/text-halo-transform-600-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "1", 
+  "10", 
+  "2", 
+  "11", 
+  "3", 
+  "12", 
+  "4", 
+  "13", 
+  "5", 
+  "14", 
+  "6", 
+  "15", 
+  "7", 
+  "8", 
+  "16"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                            !!                                                        ", 
+  "                                                  ##                                       ! !                                                        ", 
+  "                                                  ###                                       ! !!                                                      ", 
+  "                                                   ####                                      !! !                                                     ", 
+  "                                                   ## ###                                    ! !                                                      ", 
+  "                                                       #                                      !                                                       ", 
+  "                                                         # #                                      !                                                   ", 
+  "                                                           #                                      !                                                   ", 
+  "                                                                                                 !                                                    ", 
+  "                                                                                                                                                      ", 
+  "                                                                                            $$                                                        ", 
+  "                                                  %%                                       $                                                          ", 
+  "                                                  %%                                        $ $$                                                      ", 
+  "                                                   %%%%                                     $$$ $                                                     ", 
+  "                                                   %% %%%  %                                 $ $                                                      ", 
+  "                                                       %   %%                                 $                                                       ", 
+  "                                                         %  %                                      $                                                  ", 
+  "                                                                                                  $                                                   ", 
+  "                                                                                                 $$                                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                            &                                                         ", 
+  "                                                                                           &&                                                         ", 
+  "                                                  '                                         &  &                                                      ", 
+  "                                                   ''''                                     &&&                                                       ", 
+  "                                                   '' ''   ''                                  &                                                      ", 
+  "                                                     '''   ''                                 &   &                                                   ", 
+  "                                                            '                                   & &&                                                  ", 
+  "                                                                                                 &                                                    ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                           (                                                          ", 
+  "                                                  )                                         (                                                         ", 
+  "                                                    )))                                      ((                                                       ", 
+  "                                                   )))))   ))                                  (                                                      ", 
+  "                                                     )))    )                                 (    (                                                  ", 
+  "                                                           )                                    (  (                                                  ", 
+  "                                                                                                 ((                                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                           **                                                         ", 
+  "                                                  ++                                       *** *                                                      ", 
+  "                                                  +++++++                                  ******                                                     ", 
+  "                                                  ++++++++++                                ***** *                                                   ", 
+  "                                                   ++++++  +                                  **  **                                                  ", 
+  "                                                        + ++                                     **                                                   ", 
+  "                                                                                                 **                                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                         ,,,                                                          ", 
+  "                                                --                                       ,,,,,,                                                       ", 
+  "                                                -------- --                              ,,,,,, ,,                                                    ", 
+  "                                                -------  -  --                            ,,,,,  ,                                                    ", 
+  "                                                   ---- --  --                               , ,,, ,,,                                                ", 
+  "                                                         -----                                 ,,,,,,                                                 ", 
+  "                                                                                                   ,,                                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                         ...                                                          ", 
+  "                                                ///   /                                  ......                                                       ", 
+  "                                                /////////// ///                          ...... ...                                                   ", 
+  "                                                //////// // ///                          ...... ......                                                ", 
+  "                                                ///////////////                             ...... ...                                                ", 
+  "                                                        ///////                                .......                                                ", 
+  "                                                                                                   ...                                                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                  00                                      1111                                                        ", 
+  "                                                 00000 000000                             1111111                                                     ", 
+  "                                                 000000000000                             11111111111                                                 ", 
+  "                                                 0000000000000                            11111111111                                                 ", 
+  "                                                 0000000000000                            11111111111                                                 ", 
+  "                                                 0000000000000                              111111111                                                 ", 
+  "                                                                                                  11                                                  ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halo-transform-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/text-halo-transform-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..e291c0a
--- /dev/null
+++ b/tests/visual_tests/grids/text-halo-transform-600-400-2.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "1", 
+  "10", 
+  "2", 
+  "11", 
+  "3", 
+  "12", 
+  "4", 
+  "13", 
+  "5", 
+  "14", 
+  "6", 
+  "15", 
+  "7", 
+  "16", 
+  "8"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                           !                                                          ", 
+  "                                                                                         !!!!                                                         ", 
+  "                                                                                        !!!                                                           ", 
+  "                                              ##                                       !!  !                                                          ", 
+  "                                             ##                                           !                                                           ", 
+  "                                             #  ##                                       !   !                                                        ", 
+  "                                             #   ##                                      !  !  !                                                      ", 
+  "                                            #  #### ##  #                                 !!  !  !                                                    ", 
+  "                                              #  # ## ###                                   !!  !                                                     ", 
+  "                                               ###  ## # #                                  ! !!                                                      ", 
+  "                                                  ## # #       ###                           !!                                                       ", 
+  "                                                       #        #                       $$$$ !                                                        ", 
+  "                                                       ##       #                       $$                                                            ", 
+  "                                              %            ##  ##                      $$            !!                                               ", 
+  "                                             %                ##                      $$  $     !    !!                                               ", 
+  "                                             %%                ##                        $          !!                                                ", 
+  "                                             %   %                                          $  $  !!!                                                 ", 
+  "                                            %  %%%% %%  %                                $$$  $ $$!!                                                  ", 
+  "                                            % %  % %  %%%                                 $  $ $$  !                                                  ", 
+  "                                               %%%  %% %       %                            $  $                                                      ", 
+  "                                                  %% % %         %                            $                                                       ", 
+  "                                                    %  %         %%                      &&  $                                                        ", 
+  "                                                       %%      %%%                     &&&&          $$                                               ", 
+  "                                              '             %    %                     &&&            $$                                              ", 
+  "                                             '''              %%%%                    && &&     $$  $  $                                              ", 
+  "                                            '''                                       && && &  &  $  $$                                               ", 
+  "                                            '' ''''                                     && && &&  $$ $                                                ", 
+  "                                            '' '''''''' '                               &&&&&&& && $$$                                                ", 
+  "                                            ' ''''''''''''                               &&&&& &&                                                     ", 
+  "                                            ' '''' ''' '''     ''''                       & &&&&                                                      ", 
+  "                                               ''''' ' '       ' ''                        &&&&&                                                      ", 
+  "                                                   ''' '       '''                           &&      &&                                               ", 
+  "                                                       ''   '   ''                     ((((          &&&                                              ", 
+  "                                                           '' ' ''                     ((((      &  &&&&&                                             ", 
+  "                                             )))              ''''                    (((((      &   &&                                               ", 
+  "                                            )))                                       (( ((   ((  &&  &                                               ", 
+  "                                            ))))))                                   (( (( (( (((  &&&&                                               ", 
+  "                                            )) ))))))))))                               (  (((( ((   &                                                ", 
+  "                                            ) ))))))))))))     )                        (((((( ((                                                     ", 
+  "                                            ) )))) ))) )))     ))))                       ( ((((                                                      ", 
+  "                                               ))))) ) )         ))                        (( ((      (                                               ", 
+  "                                                   ))) )        ))                           ((      (((                                              ", 
+  "                                                       ))   )  )))                                     ((                                             ", 
+  "                                                            )  ))                      ****      ((   (((                                             ", 
+  "                                              +++              )                       ****      ((  (((                                              ", 
+  "                                             ++++                                      *****       (((                                                ", 
+  "                                             ++++++                                   ******** **                                                     ", 
+  "                                             +++++++++++++                            ** ** *******                                                   ", 
+  "                                             ++++++++++++++   +++                     ************                                                    ", 
+  "                                             ++++++++++++++   +++                        *********  ***                                               ", 
+  "                                             +++++++++++++     ++                        ********   ****                                              ", 
+  "                                                ++++++++++    +++                           *****    ***                                              ", 
+  "                                                    +++ +++  +++                    ,,,,      **    ***                                               ", 
+  "                                                             ++++                  ,,,,,           ****                                               ", 
+  "                                          ---                 +++                  ,,,,,   ,,     ****                                                ", 
+  "                                         ----                                      ,,,,,,,,,,,,    ****                                               ", 
+  "                                         --------------                           ,,,,,,,,,,,,,      *                                                ", 
+  "                                         ---------------  ----                    ,,,,,,,,,,,,,  ,,,,                                                 ", 
+  "                                         ---------------  ----   -----             ,,,,,,,,,,,,  ,,,,                                                 ", 
+  "                                         --------------    ---   -----               ,,,,,,,,,   ,,,,   ,,                                            ", 
+  "                                         --------------    --    ----                   ,,,,,,   ,,,   ,,,,,                                          ", 
+  "                                            ------------ ----    ----                      ,,  ,,,,,   ,,,,,                                          ", 
+  "                                                    ---- --------- --              .....       ,,,,,   ,,,,,                                          ", 
+  "                                                         ------------             ......       ,,,,,,, ,,,,                                           ", 
+  "                                         /////                  -----             ......  .....  ,,,,,,,,,,                                           ", 
+  "                                        ///////     ///                           ..............    ,,,,,,,                                           ", 
+  "                                        ///////////////  //////                   ................... ,,,,,                                           ", 
+  "                                        /////////////////////// //////            ....................                                                ", 
+  "                                        /////////////////////// //////            ............. ...... .....                                          ", 
+  "                                        ///////////////// ///// //////            ............. ...... ......                                         ", 
+  "                                        //////////////// ////// //////              .................. ......                                         ", 
+  "                                        //////////////////////////////                 ....... ....... ......                                         ", 
+  "                                             /////////////////////////                     ... .............                                          ", 
+  "                                                     /////////////////               0000000   .............                                          ", 
+  "                                            111111           /////////              0000000000000...........                                          ", 
+  "                                           111111111   11111  11111                 000000000000000 ........                                          ", 
+  "                                           111111111111111111111111                 000000000000000 000000.                                           ", 
+  "                                           111111111111111111111111                 0000000000000000000000                                            ", 
+  "                                           111111111111111111111111                 0000000000000000000000                                            ", 
+  "                                           1111111111111111111111111                0000000000000000000000                                            ", 
+  "                                           1111111111111111111111111                0000000000000000000000                                            ", 
+  "                                           1111111111111111111111111                0000000000000000000000                                            ", 
+  "                                           1111111111111111111111111                0000000000000000000000                                            ", 
+  "                                           1111111111111111111111111                    000000000000000000                                            ", 
+  "                                                       111111 11111                           0000  000000                                            ", 
+  "                                                                                                    00000                                             ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-line-wrap-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-line-wrap-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..6c277bb
--- /dev/null
+++ b/tests/visual_tests/grids/text-line-wrap-512-512-1.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "               !! !                                                                                                             ", 
+  "              !!!!!!!                                                                                                           ", 
+  "               !!!!!!!!                                                                                                         ", 
+  "                    !                                                                                                           ", 
+  "                !!    !                                                                                                         ", 
+  "               !!!!!!!!                                                                                                         ", 
+  "              !!!!!!!!!                                                                                                         ", 
+  "                !!!!!!!                                                                                                         ", 
+  "                  !                                                                                                             ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                            #######                                                             ", 
+  "                                                            # #####                                                             ", 
+  "                                                            ########                                                            ", 
+  "                                                                   #                                                            ", 
+  "                                                             # #   #                                                            ", 
+  "                                                             ########                                                           ", 
+  "                                                            #########                                                           ", 
+  "                                                            #    ##                                                             ", 
+  "                                                                #                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-line-wrap-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-line-wrap-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..1a4b972
--- /dev/null
+++ b/tests/visual_tests/grids/text-line-wrap-512-512-2.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "", 
+  "4", 
+  "3"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "             !!   !!                                                                                                            ", 
+  "           ! !!   !!                                                                                                            ", 
+  "          !!!!!!!!!!!!!!                                                                                                        ", 
+  "          !!!!!!!!!!!!!!                                                                                                        ", 
+  "           ! !! !!!!!!!!!!!                                                                                                     ", 
+  "           !!!! !!!!!!!!                                                                                                        ", 
+  "           !!!! !!!!!!!!                                                                                                        ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "            !! !!        !!                                                                                                     ", 
+  "            !!!!!!!  !!!!!!!                                                                                                    ", 
+  "            !!!!!!!!!!!!!!!!                                                                                                    ", 
+  "         !!!!! !!!!!!!!!!!!                                                                                                     ", 
+  "         !!!!! !! !!!!!!!!!                                                                                                     ", 
+  "            !!!!! !!!!!!!!!!                                                                                                    ", 
+  "             !!!! !!!!!!!!!!                                                                                                    ", 
+  "                                                                                                                                ", 
+  "                  !                                                                                                             ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                        ## ##   ##                                                              ", 
+  "                                                        ####### ## ###                                                          ", 
+  "                                                        ##############                                                          ", 
+  "                                                        ## ###########                                                          ", 
+  "                                                        ## ## ########                                                          ", 
+  "                                                        ##### ##########                                                        ", 
+  "                                                         #### ##########                                                        ", 
+  "                                                                      ##                                                        ", 
+  "                                                                                                                                ", 
+  "                                                          ## ##       ##                                                        ", 
+  "                                                          ####### ########                                                      ", 
+  "                                                          ################                                                      ", 
+  "                                                          ## ## ########                                                        ", 
+  "                                                        #### ## ########                                                        ", 
+  "                                                        ####### ##########                                                      ", 
+  "                                                        ##        ###                                                           ", 
+  "                                                                                                                                ", 
+  "                                                                #                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-malayalam-800-100-1.0-grid-reference.json b/tests/visual_tests/grids/text-malayalam-800-100-1.0-grid-reference.json
new file mode 100644
index 0000000..c736769
--- /dev/null
+++ b/tests/visual_tests/grids/text-malayalam-800-100-1.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                   !!!!! !!!!!!  !                                                                                                      ", 
+  "                                                                                   !!! !     ! ! !                                                                                                      ", 
+  "                                                                                   !!! !     ! ! !                                                                                                      ", 
+  "                                                                                   !!!!  !  !!!   !                                                                                                     ", 
+  "                                                                                   !!!!!        ! !                                                                                                     ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-malayalam-800-100-2.0-grid-reference.json b/tests/visual_tests/grids/text-malayalam-800-100-2.0-grid-reference.json
new file mode 100644
index 0000000..2750421
--- /dev/null
+++ b/tests/visual_tests/grids/text-malayalam-800-100-2.0-grid-reference.json
@@ -0,0 +1,34 @@
+{
+ "keys": [
+  "", 
+  "5"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                             !!! !!!    !!!  !!!!!!     !                                                                                               ", 
+  "                                                                            !  !!! !!  !! !!!  !!  !    !                                                                                               ", 
+  "                                                                           !!!  !   !! !   !  ! !! !!   !                                                                                               ", 
+  "                                                                           !  ! !   !! !   ! !  !!  !   !                                                                                               ", 
+  "                                                                           !  ! !   !! !   ! !   !  !   !                                                                                               ", 
+  "                                                                           !!!  !   !! !   ! !  !!  !   !!                                                                                              ", 
+  "                                                                            !!!!!!!!!   !  !  !!!  !     !                                                                                              ", 
+  "                                                                           !                           ! !!                                                                                             ", 
+  "                                                                           !!!!!!!!!!!               !!!  !                                                                                             ", 
+  "                                                                            !!!!!!!!!!               !   !!                                                                                             ", 
+  "                                                                                                      !!!!                                                                                              ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-multi-layout-1-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-multi-layout-1-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..5bdb416
--- /dev/null
+++ b/tests/visual_tests/grids/text-multi-layout-1-512-512-1.0-grid-reference.json
@@ -0,0 +1,142 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "3", 
+  "5", 
+  "6", 
+  "4", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                !                                                               #                               ", 
+  "                               !!                                                              ##                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                $                                                               ", 
+  "                                                                $                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                %                                                               ", 
+  "                                                               %%                                                               ", 
+  "                                                                %                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                &                                                               '                               ", 
+  "                               &&                                                              ''                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-multi-layout-1-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-multi-layout-1-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..354d801
--- /dev/null
+++ b/tests/visual_tests/grids/text-multi-layout-1-512-512-2.0-grid-reference.json
@@ -0,0 +1,142 @@
+{
+ "keys": [
+  "", 
+  "2", 
+  "3", 
+  "5", 
+  "6", 
+  "4", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                !                                                               #                               ", 
+  "                                !                                                               #                               ", 
+  "                              !!!!                                                            ####                              ", 
+  "                                !                                                               #                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                $                                                               ", 
+  "                                                                $                                                               ", 
+  "                                                              $$$$                                                              ", 
+  "                                                                $                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                %                                                               ", 
+  "                                                                %                                                               ", 
+  "                                                              %%%%                                                              ", 
+  "                                                                %                                                               ", 
+  "                                                                %                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                &                                                               '                               ", 
+  "                                &                                                               '                               ", 
+  "                              &&&&                                                            ''''                              ", 
+  "                                &                                                               '                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-multi-layout-2-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-multi-layout-2-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..7386a8b
--- /dev/null
+++ b/tests/visual_tests/grids/text-multi-layout-2-512-512-1.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                       !                                        ", 
+  "                                                                                        !                                       ", 
+  "                                                                                      !                                         ", 
+  "                                                                           !         !!!                                        ", 
+  "                                                                           !!       !!!                                         ", 
+  "                                                                         !         !!!                                          ", 
+  "                                                                        !!!       !!                                            ", 
+  "                                                                       ! !        !!                                            ", 
+  "                                                                     ! !! !!!   !                                               ", 
+  "                                                                     !!   !!   !!                                               ", 
+  "                                                                    !!!    !    !                                               ", 
+  "                                                                  !!!!  !!   !                                                  ", 
+  "                                                                  !!!   !   !!!        !   !                                    ", 
+  "                                                                  !!  !   !  !         !   !!                                   ", 
+  "                                                                 !    !!  !!         ! !                                        ", 
+  "                                                               !    !!!   !!        !!!  !!                                     ", 
+  "                                                               !!  ! !  !!         !!   !                                       ", 
+  "                                                                  !!   ! !        !!                                            ", 
+  "                                   !!       !     !!             !!   !!!          ! !!!                                        ", 
+  "                                  !! ! !!!!!!!!!! !!!! !!!!       !  !!!       !  !  !                                          ", 
+  "                                  ! ! ! !! !! !!! !!!! ! !          !!!        !!                                               ", 
+  "                                      !                            !!!        !!!  !                                            ", 
+  "                                                                   !        !!!!      !!                                        ", 
+  "                                       !!!         !!!     !                !!!  !!    !                                        ", 
+  "                                       !!!!!!!!!!!  !!!! ! !              !  ! !!!   !!                                         ", 
+  "                                       !!!!!!!!!!!  ! !!!!!!!             !!    !    !                                          ", 
+  "                                                                        !!   !!    !!                                           ", 
+  "                                                                        !!  ! !  !                                              ", 
+  "                                                                !           !!    !                                             ", 
+  "                                                                           !!  !!                                               ", 
+  "                                                                           !   !!                                               ", 
+  "                                                                             !                                                  ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                !    !!!             !    !!                !                                   ", 
+  "                                         !!!!!!!!!!!!!!!!!!!  !!!!!!!!! !!!!!!!!!    !!!! !!!!                                  ", 
+  "                                         !!!!!!!!!!!!!!!!!!!  !!!!!!!!! !!!!!!!!    !!!!!!!!!!                                  ", 
+  "                                         !!! !     !   ! !     ! !!     !   ! !      ! ! !                                      ", 
+  "                                                  !        !    ! !!! !       !        !!   !                                   ", 
+  "                                                  ! !!!!!! !! !!!!!!! !!!!!!! !!     !!!!!!!!!                                  ", 
+  "                                                  !!!!!!!!!!! !!!!!!! !!!!!!!!!!!    !!!!!!!!!                                  ", 
+  "                                                      !                  !    !         ! !! !                                  ", 
+  "                                                                 !!!!!!!!!!!!!!       !!!!!!!!                                  ", 
+  "                                                                 !!!!!!!!!!!!!!       !!!!!!!!                                  ", 
+  "                                                                                                                                ", 
+  "                                                                                   !!!  !  !                                    ", 
+  "                                                                                   !!!!!!!!!                                    ", 
+  "                                                                                   !!!!!!!!!!                                   ", 
+  "                                                                                     !   ! !                                    ", 
+  "                                                                                       !!!!!!!!                                 ", 
+  "                                                                                       !!!!!!!!                                 ", 
+  "                                                                                         !!                                     ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-multi-layout-2-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-multi-layout-2-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..de57d8b
--- /dev/null
+++ b/tests/visual_tests/grids/text-multi-layout-2-512-512-2.0-grid-reference.json
@@ -0,0 +1,137 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                              !!                ", 
+  "                                                                                                               !                ", 
+  "                                                                                                             !! !!              ", 
+  "                                                                                                            !  !                ", 
+  "                                                                                      !                      !                  ", 
+  "                                                                                      !!                  ! ! !                 ", 
+  "                                                                                     ! !!                 !! !                  ", 
+  "                                                                                   ! !  !               !!!!!                   ", 
+  "                                                                                  ! ! !!               ! !!                     ", 
+  "                                                                                   ! !                !!! !                     ", 
+  "                                                                                 !  !                !! !!                      ", 
+  "                                                                               !  !!                ! !!                        ", 
+  "                                                                                !  !               ! ! !                        ", 
+  "                                                                              !  !                 !! !                         ", 
+  "                                                                              !                  !  !!                          ", 
+  "                                                                          !   !!!    !! !        !                              ", 
+  "                                                                           !          !  !     ! !!!                            ", 
+  "                                                                          !!!      !!  !      ! !                               ", 
+  "                                                                          ! !!    ! !       !  ! !                              ", 
+  "                                                                        !!!!!      ! !!      ! !!                               ", 
+  "                                                                       ! !        ! !      !! !                                 ", 
+  "                                                                      !!! !     !!!       !  !                                  ", 
+  "                                                                     !  !!     ! !!!     ! ! !               ! !                ", 
+  "                                                                      ! !       !!      !   !                 !       !!        ", 
+  "                                                                   !!! !     !          !!   !               ! !!!    !!        ", 
+  "                                                                    ! !     !       !! !  !                   !         !!      ", 
+  "                                                                !!  !!     ! ! !     !! !                   ! !!    ! !!        ", 
+  "                                                                 !!         ! !     ! !!                 !!! !!      ! !        ", 
+  "                                                               !!!!!     !! !!      !  !                 !  !     !! !!!        ", 
+  "                                                               ! !      !!!!!       !!!                 !!! !    !! !           ", 
+  "                                                            !! ! !     ! !!      ! !                    !         !             ", 
+  "                                                           ! !! !     !!  !     ! !                   !!!!     !!  !            ", 
+  "                                                            !! !      ! !!     !!! !                !!!  !    !! !              ", 
+  "                                                             !      !!        !  !!                 !!!! !     !                ", 
+  "                                                                   !  !!       ! !                   ! !    !!! !               ", 
+  "     !!!!               !!         !! !!                          ! !  !    !!! !                !   !!   ! !  !                ", 
+  "     !  !               !!         !!                           !  ! ! !     !!!                  ! !!   ! !!!!                 ", 
+  "     !!!  !! !! !!!!!!! !!!!! !!!! !! !!!!!! !!!!! !!!           ! !!    !!  !!               !    !!    !!                     ", 
+  "     !!!! !! !  ! !! !! !! !!!!  ! !! !!  !! !!!!! !              !       !                    !          !                     ", 
+  "        !  !!!  ! !! !! !! !!!!  ! !! !! !!  !!    !                    !! !!                 ! !          !                    ", 
+  "     !!!!  !!!  ! !! !! !!!!  !!!! !! !!!!!! !!!!! !                   !  !                   ! !!    !!!                       ", 
+  "            !                                                         ! ! !                !!!!!!     !!                        ", 
+  "          !!!                                                         !                    !! !     ! ! !     ! !               ", 
+  "                                                                       !                ! !!  !      ! !    ! !! !              ", 
+  "              !!!!                    !!!!!!                                             !  !    ! !  !     !! !!               ", 
+  "              !!!!!                   !!!!!!          !                                 ! !!!    !! !!     !  !                 ", 
+  "              !! !! !!!!  !!!  !!!      !! !!!! !! !!!!!!                              !!!     !! !!       !  !                 ", 
+  "              !!!!!  !!!!!!!  !! !!     !! !  !! !!!  !                             !    !!   ! !! !     !!!!!                  ", 
+  "              !! !! !!!!! !!!!!!!!!     !! !!!!! !!!  !                              !  !!     !  !      ! !                    ", 
+  "              !!!!! !!!!!!!!!!!!!!!     !! !!!! !! !  !!!                             !         !!     ! ! !                    ", 
+  "                     !    !!    !!          !!                                     !!!               !! !                       ", 
+  "                                                                                !    !    !!!!       ! !!!                      ", 
+  "                                                                               ! ! !!!    !!  !       !                         ", 
+  "                                                                               ! !!!    !! !!     !    !                        ", 
+  "                                                                                !      ! !  !     !!                            ", 
+  "                                                                !                !      ! !!   !    !                           ", 
+  "                                                                                       ! !      ! ! !                           ", 
+  "                                                                                     !!!      !  ! !                            ", 
+  "                                                                                    ! !!!      !  !                             ", 
+  "                                                                                     !!    ! !! !                               ", 
+  "                                                                                      !     !  !                                ", 
+  "                                                                                          !  !                                  ", 
+  "                                                                                         !    !                                 ", 
+  "                                                                                         !   !                                  ", 
+  "                                                                                          ! !                                   ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                               !!         !!!!!                           !!        !!!!                               !!       ", 
+  "                 !!!!!       !!!!    !!!!!!!!!!     !!!     !!!!       !!!!!       !!!!!      !!         !!!!!      !!!!!       ", 
+  "                 !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!     ", 
+  "                 !!!!!!!!!!!!!!!!!! !!! !!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!     ", 
+  "                 !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!     !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!!     ", 
+  "                 !!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!     ", 
+  "                 !!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!     ", 
+  "                                                               !!  !!!! !!! !!                                !!!!!             ", 
+  "                                    !!!               !!       !!  !!!! !!! !!              !!!              !!!!!!     !!!     ", 
+  "                                    !!! !!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!!!!    ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!         !!!!!!!!!!!!!!!!!!!    ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!     ", 
+  "                                    !!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!     ", 
+  "                                    !!!!!!!!!! !!!!!!!!!!!  !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!        !!!!!!!!!!!!!!!!!!     ", 
+  "                                           !!!                                   !!!       !!                   !!  !!!! !!     ", 
+  "                                                                             !!            !!                   !! !!!!! !!     ", 
+  "                                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!     ", 
+  "                                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!     ", 
+  "                                                                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!     ", 
+  "                                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!     ", 
+  "                                                                  !!!!!!!!!!!!!!!!!!!!!!!!!!!               !!!!!!!!!!!!!!!     ", 
+  "                                                                                                      !!                        ", 
+  "                                                                                                      !!!!!     !!    !!!       ", 
+  "                                                                                                      !!!!!!!!!!!!!!!!!!!!      ", 
+  "                                                                                                     !!!!!!!!!!!!!!!!!!!!!      ", 
+  "                                                                                                     !!!!!!!!!!!!!!!!!!!!!!     ", 
+  "                                                                                                     !!!!!!!!!!!!!!!!!!!!!!     ", 
+  "                                                                                                     !!!!!!!!! !!!!!!!!!!!      ", 
+  "                                                                                                          !!!    !!   !!!       ", 
+  "                                                                                                              !!!!!!!!!!!!!!!   ", 
+  "                                                                                                              !!!!!!!!!!!!!!!   ", 
+  "                                                                                                              !!!!!!!!!!!!!!!   ", 
+  "                                                                                                              !!!!!!!!!!!!!!!   ", 
+  "                                                                                                              !!!!!!!!!!!!!!!   ", 
+  "                                                                                                                  !!!!          ", 
+  "                                                                                                                  !!!           ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-overlap-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-overlap-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..baa36a1
--- /dev/null
+++ b/tests/visual_tests/grids/text-overlap-512-512-1.0-grid-reference.json
@@ -0,0 +1,156 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "8", 
+  "4", 
+  "6", 
+  "2", 
+  "7", 
+  "3", 
+  "19", 
+  "20", 
+  "16", 
+  "15", 
+  "18", 
+  "17", 
+  "5", 
+  "9", 
+  "13", 
+  "10", 
+  "14", 
+  "11", 
+  "12"
+ ], 
+ "data": {}, 
+ "grid": [
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&&$$$&&&&&&&&&&&&&&&&&&%%%%&&&&&&&&&&&&&&&&&&&!!!!!!!!!!!''''''''''''''''''''###''''''''''''''''''''!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&&$$$&&&&&&&&&&&&&&&&&&%%%%&&&&&&&&&&&&&&&&&&&!!!!!!!!!!!''''''''''''''''''''###''''''''''''''''''''!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&&$$$&&&&&&&&&&&&&&&&&&%%%%&&&&&&&&&&&&&&&&&&(((!!!!!!!!!''''''''''''''''''''###''''''''''''''''''''!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!*********************", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!*********************", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!*********************", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)))!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!(((!!!!!!!++++!!!!!,,,!!!!!!!!!!!!!!!!!!!!----!!!!!!!!!...!!!!!!!", 
+  "/////////////////////////////////////////%%%%///////////////////((!!!!!!!+++++++++++++++++++++++++!!!!!!!-----------------------", 
+  "/////////////////////////////////////////%%%%///////////////////!!!!!!!!!+++++++++++++++++++++++++!!!!!!!-----------------------", 
+  "/////////////////////////////////////////%%%%///////////////////!!!!!!!!!+++++++++++++++++++++++++!!!!!!!-----------------------", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!$$$!!!!!!!!!!!!!!!!!!%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,!!!!!!!!!!+++!!!!!!!!!!!!!!!!!!!!...!!!!!!-", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "  !!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!0000!!!!!!!!!!!!!!!!!!0", 
+  "55555555511115555555555555555555555555555555555555553335555555555555555555555555555555!!!!!!!!!!!!!!!!!!!00000000000000000000000", 
+  "55555555511115555555555555555555555555555555555555553335555555555555555555555555555555!!!!!!!!!!!!!!!!!!!00000000000000000000000", 
+  "55555555511115555555555555555555555555555555555555553335555555555555555555555555555555!!!!!!!!!!!!!!!!!!!00000000000000000000000", 
+  "55555555511115555555555555555555555555555555555555553335555555555555555555555555555555!!!!!!!!!!!!!!!!!!!00000000000000000000000", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!1111!!!!!!!!!!!!!!!!!!222!!!!!!!!!!!!!!!!!!333!!!!!!!!!!!!!!!!!!4444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-overlap-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-overlap-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..952c0a1
--- /dev/null
+++ b/tests/visual_tests/grids/text-overlap-512-512-2.0-grid-reference.json
@@ -0,0 +1,156 @@
+{
+ "keys": [
+  "1", 
+  "", 
+  "8", 
+  "4", 
+  "6", 
+  "2", 
+  "7", 
+  "3", 
+  "19", 
+  "20", 
+  "16", 
+  "15", 
+  "18", 
+  "17", 
+  "5", 
+  "9", 
+  "13", 
+  "10", 
+  "14", 
+  "11", 
+  "12"
+ ], 
+ "data": {}, 
+ "grid": [
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&$$$$$$&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&!!!!!!!!!!!''''''''''''''''''######'''''''''''''''''''!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&$$$$$$&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&!!!!!!!!!!!''''''''''''''''''######'''''''''''''''''''!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&$$$$$$&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&!!!!!!!!!!!''''''''''''''''''######'''''''''''''''''''!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&$$$$$$&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&((((((!!!!!!!!''''''''''''''''''######'''''''''''''''''''!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&$$$$$$&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&((((((!!!!!!!!''''''''''''''''''######'''''''''''''''''''!!!!!!!!!!", 
+  "&&&&&&&&&&&&&&&&&&&$$$$$$&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&((((((!!!!!!!!''''''''''''''''''######'''''''''''''''''''!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!*********************", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!*********************", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!*********************", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!*********************", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!*********************", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!*********************", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!++++++!!,,,,,,,!!!!!!!!!!!!!!!!!------!!!!!!!......!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!++++++!!,,,,,,,!!!!!!!!!!!!!!!!!------!!!!!!!......!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!++++++!!,,,,,,,!!!!!!!!!!!!!!!!!------!!!!!!!......!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!++++++!!,,,,,,,!!!!!!!!!!!!!!!!!------!!!!!!!......!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!++++++!!,,,,,,,!!!!!!!!!!!!!!!!!------!!!!!!!......!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!++++++!!,,,,,,,!!!!!!!!!!!!!!!!!------!!!!!!!......!!!!!", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!((((((!!!!!++++++!!,,,,,,,!!!!!!!!!!!!!!!!!------!!!!!!!......!!!!!", 
+  "////////////////////////////////////////%%%%%%//////////////////(((!!!!!+++++++++++++++++++++++++++!!!!!------------------------", 
+  "////////////////////////////////////////%%%%%%//////////////////(((!!!!!+++++++++++++++++++++++++++!!!!!------------------------", 
+  "////////////////////////////////////////%%%%%%//////////////////(((!!!!!+++++++++++++++++++++++++++!!!!!------------------------", 
+  "////////////////////////////////////////%%%%%%//////////////////!!!!!!!!+++++++++++++++++++++++++++!!!!!------------------------", 
+  "////////////////////////////////////////%%%%%%//////////////////!!!!!!!!+++++++++++++++++++++++++++!!!!!------------------------", 
+  "////////////////////////////////////////%%%%%%//////////////////!!!!!!!!+++++++++++++++++++++++++++!!!!!------------------------", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!$$$$$$!!!!!!!!!!!!!!!%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,,,,,,!!!!!!++++++!!!!!!!!!!!!!!!!!!......!!---", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!00000000000000000000000000000000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "   !!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!000000!!!!!!!!!!!!!!!000", 
+  "55555555111111555555555555555555555555555555555555533333355555555555555555555555555555!!!!!!!!!!!!!!!!!!000000000000000000000000", 
+  "55555555111111555555555555555555555555555555555555533333355555555555555555555555555555!!!!!!!!!!!!!!!!!!000000000000000000000000", 
+  "55555555111111555555555555555555555555555555555555533333355555555555555555555555555555!!!!!!!!!!!!!!!!!!000000000000000000000000", 
+  "55555555111111555555555555555555555555555555555555533333355555555555555555555555555555!!!!!!!!!!!!!!!!!!000000000000000000000000", 
+  "55555555111111555555555555555555555555555555555555533333355555555555555555555555555555!!!!!!!!!!!!!!!!!!000000000000000000000000", 
+  "55555555111111555555555555555555555555555555555555533333355555555555555555555555555555!!!!!!!!!!!!!!!!!!000000000000000000000000", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!111111!!!!!!!!!!!!!!!222222!!!!!!!!!!!!!!!!333333!!!!!!!!!!!!!!!444444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-spacing-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-spacing-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..6c7be17
--- /dev/null
+++ b/tests/visual_tests/grids/text-spacing-512-512-1.0-grid-reference.json
@@ -0,0 +1,153 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "10", 
+  "11", 
+  "14", 
+  "16", 
+  "12", 
+  "13", 
+  "15", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "17", 
+  "7", 
+  "8", 
+  "9"
+ ], 
+ "data": {}, 
+ "grid": [
+  "         !!!!       ####                            $$$        %%%                             &&&&&&&&&&&&                     ", 
+  "         !!!        ####                           $$$$        %%%%                             &&&&&&&&&&&&&&                  ", 
+  "        !!!!         ####                          $$$$         %%%                                  &&&&&&&&&&&                ", 
+  "        !!!          ####                         $$$$          %%%%                                     &&&&&&&&&              ", 
+  "       !!!!           ####                        $$$$           %%%                                        &&&&&&&&            ", 
+  "       !!!            ####                       $$$$            %%%%                                          &&&&&&           ", 
+  "      !!!!             ####                      $$$$             %%%                                           &&&&&&          ", 
+  "      !!!              ####                     $$$$              %%%%                                            &&&&&         ", 
+  "     !!!!               ####                    $$$$               %%%                                             &&&&&        ", 
+  "     !!!                ####                   $$$$                %%%%               '                             &&&&&       ", 
+  "    !!!!                 ####                  $$$$                 %%%              '''''''''                        &&&&      ", 
+  "    !!!                  ####                 $$$$                  %%%%             ''''''''''''                      &&&&     ", 
+  "   !!!!                   ####                $$$$                   %%%              ''''''''''''''                   &&&&     ", 
+  "   !!!                    ####               $$$$                    %%%%                   ''''''''''                  &&&&    ", 
+  "  !!!!                     ####              $$$$                     %%%                       ''''''''                 &&&&   ", 
+  "  !!!                      ####             $$$$                      %%%%                         '''''''                &&&   ", 
+  " !!!!                       ####            $$$$                       %%%                          '''''''               &&&&  ", 
+  " !!!                        ####           $$$$                        %%%%                           ''''''               &&&  ", 
+  "!!!!                         ####          $$$$                         %%%                             '''''              &&&& ", 
+  "!!!                          ####         $$$$                          %%%%                             '''''              &&& ", 
+  "!!!                           ####        $$$$                           %%%                              '''''             &&&&", 
+  "!!                            ####       $$$$                            %%%%                              '''''            &&&&", 
+  "!!!                           ####       $$$$                            %%%%                               ''''             &&&", 
+  "!!!                           ###        $$$$                            %%%%                                ''''            &&&", 
+  "!!!!                         ####        $$$$                            %%%%                                 ''''           &&&", 
+  "!!!!                         ###         $$$$                            %%%%                                 ''''            &&", 
+  " !!!!                       ####         $$$$                            %%%%                                  ''''           &&", 
+  " !!!!                       ###          $$$$                            %%%%                                   '''           &&", 
+  "  !!!!                     ####          $$$$                            %%%%                                   ''''          &&", 
+  "  !!!!                     ###           $$$$                            %%%%                                    '''          &&", 
+  "   !!!!                   ####           $$$$                            %%%%                                    ''''         &&", 
+  "   !!!!                   ###            $$$$                            %%%%                                     '''         &&", 
+  "    !!!!                 ####            $$$$                            %%%%                                     '''          &", 
+  "    !!!!                 ###             $$$$                            %%%%                                     ''''          ", 
+  "     !!!!               ####             $$$$                            %%%%                                     ''''          ", 
+  "     !!!!               ###              $$$$                            %%%%                                      '''          ", 
+  "      !!!!             ####              $$$$                            %%%%                                      '''          ", 
+  "      !!!!             ###               $$$$                            %%%%                                      '''          ", 
+  "       !!!!           ####               $$$$                            %%%%                                      '''          ", 
+  "       !!!!           ###                $$$$                            %%%%                                      '''          ", 
+  "        !!!!         ####                $$$$                            %%%%                                      ''''         ", 
+  "        !!!!         ###                 $$$$                            %%%%                                      ''''         ", 
+  "         !!!!       ####                 $$$$                            %%%%                                      ''''         ", 
+  "         !!!!       ###                  $$$$                            %%%%                                      ''''         ", 
+  "          !!         #                    $$                              %%                                       '''          ", 
+  "                                                                                                                   '''          ", 
+  "                                                                                                                   '''          ", 
+  "                                                                                                                   '''          ", 
+  "                                                                                                                   '''          ", 
+  "                                                                                                                   '''          ", 
+  "                                                                                                                  ''''          ", 
+  "                                                                                                                  ''''          ", 
+  "                                          ((                              ))                                      '''         **", 
+  "                                         ((((                            ))))                                    ''''         **", 
+  "                                         ((((                            ))))                                    ''''         **", 
+  "                                         ((((                            ))))                                   ''''          **", 
+  "                                         ((((                            ))))                                   ''''          **", 
+  "                                         ((((                            ))))                                  ''''           **", 
+  "                                         ((((                            ))))                                  ''''           **", 
+  "                                         ((((                            ))))                                 ''''            **", 
+  "                                         ((((                            ))))                                '''''           ***", 
+  "                                         ((((                            ))))                                ''''            ***", 
+  "                                         ((((                            ))))                               ''''             ***", 
+  "++++++++++++                             ((((                            ))))                              ''''             ****", 
+  "+++++++++++++                            ((((                            ))))                             '''''             *** ", 
+  "++++++++++++                             ((((                            ))))                            '''''             **** ", 
+  "                                         ((((                            ))))                           '''''              **** ", 
+  "                                         ((((                            ))))                         ''''''              ****  ", 
+  "                                         ((((                            ))))                       ''''''                ****  ", 
+  "                                         ((((                            ))))                     '''''''                ****   ", 
+  "                                         ((((                            ))))                  ''''''''                  ****   ", 
+  "                                         ((((                            ))))              '''''''''''                  ****    ", 
+  "                                         ((((                            ))))        '''''''''''''''                   ****     ", 
+  ",,,,,,,,,,,,,,,,,,,,,,                   ((((                            ))))        '''''''''''                      *****     ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,                  ((((                            ))))        ''''''''                        *****      ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,                  ((((                            ))))                                       *****       ", 
+  ",,,,,,,,,,,,,,,,,,,,,,                    ((((                          ))))                                       *****        ", 
+  "                                          ((((                          ))))                                      *****         ", 
+  "                                           ((((                        ))))                                     ******          ", 
+  "                                           ((((                        ))))                                   *******           ", 
+  "                                            ((((                      ))))                                  *******             ", 
+  "                                            ((((                      ))))                              *********               ", 
+  "                                             ((((                    ))))                          *************                ", 
+  "                                             ((((                    ))))                       *************                   ", 
+  "----------------------------------            ((((                  ))))                       ***********                      ", 
+  "----------------------------------            ((((                  ))))                        *****                           ", 
+  "----------------------------------             ((((                ))))                                                         ", 
+  "                                               ((((                ))))                                                         ", 
+  "                                                ((((              ))))                                                          ", 
+  "                                                ((((              ))))                                                          ", 
+  "                                                 ((((            ))))                                                           ", 
+  "                                                 ((((            ))))                                                           ", 
+  "                                                  ((((          ))))                                                            ", 
+  "                                                  ((((          ))))                                                            ", 
+  "                                                   ((((        ))))                                                             ", 
+  "............................................       ((((        ))))                                                             ", 
+  ".............................................       (((        )))                          ////////                            ", 
+  "............................................        (((        )))                        /////////////                         ", 
+  "                                                                                        ////////////////                        ", 
+  "                                                                                       ///////    ////////                     /", 
+  "                                                                                      /////          //////                   //", 
+  "                                                                                     /////             //////                ///", 
+  "                                                                                     ////               //////              ////", 
+  "                                                                                     //                   //////           //// ", 
+  "                                                                                                           /////////   ///////  ", 
+  "00000000000000000000000000000000000000000000000000000000000000000                                            ////////////////   ", 
+  "000000000000000000000000000000000000000000000000000000000000000000                                            //////////////    ", 
+  "000000000000000000000000000000000000000000000000000000000000000000                                                ///////       ", 
+  "00000000000000000000000000000000000000000000000000000000000000000                                                               ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-spacing-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-spacing-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..d6ad244
--- /dev/null
+++ b/tests/visual_tests/grids/text-spacing-512-512-2.0-grid-reference.json
@@ -0,0 +1,153 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "2", 
+  "10", 
+  "11", 
+  "14", 
+  "16", 
+  "12", 
+  "13", 
+  "15", 
+  "3", 
+  "4", 
+  "5", 
+  "6", 
+  "17", 
+  "7", 
+  "8", 
+  "9"
+ ], 
+ "data": {}, 
+ "grid": [
+  "       !!!!!!!     ######                         $$$$$$$    %%%%%%%                          &&&&&&&&&&&&&&&&&&                ", 
+  "       !!!!!!!     #######                        $$$$$$$    %%%%%%%                          &&&&&&&&&&&&&&&&&&&               ", 
+  "      !!!!!!!!     #######                       $$$$$$$      %%%%%%%                          &&&&&&&&&&&&&&&&&&&&             ", 
+  "      !!!!!!!       #######                      $$$$$$$      %%%%%%%                            &&&&&&&&&&&&&&&&&&&&           ", 
+  "     !!!!!!!!       #######                     $$$$$$$        %%%%%%%                                 &&&&&&&&&&&&&&&          ", 
+  "     !!!!!!!         #######                    $$$$$$$        %%%%%%%                                     &&&&&&&&&&&&         ", 
+  "    !!!!!!!!         #######                   $$$$$$$          %%%%%%%                                      &&&&&&&&&&&        ", 
+  "    !!!!!!!           #######                  $$$$$$$          %%%%%%%                                        &&&&&&&&&&       ", 
+  "   !!!!!!!!           #######                 $$$$$$$            %%%%%%%            '''''''                      &&&&&&&&&      ", 
+  "   !!!!!!!             #######                $$$$$$$            %%%%%%%            ''''''''''''                  &&&&&&&&&     ", 
+  "  !!!!!!!!             #######               $$$$$$$              %%%%%%%          ''''''''''''''''                &&&&&&&&&    ", 
+  "  !!!!!!!               #######              $$$$$$$              %%%%%%%          ''''''''''''''''''               &&&&&&&&&   ", 
+  " !!!!!!!!               #######             $$$$$$$                %%%%%%%          '''''''''''''''''''              &&&&&&&&   ", 
+  " !!!!!!!                 #######            $$$$$$$                %%%%%%%          '''''''''''''''''''''             &&&&&&&&  ", 
+  "!!!!!!!!                 #######           $$$$$$$                  %%%%%%%              ''''''''''''''''''            &&&&&&&& ", 
+  "!!!!!!!                   #######          $$$$$$$                  %%%%%%%                   ''''''''''''''            &&&&&&& ", 
+  "!!!!!!!                   #######         $$$$$$$                    %%%%%%%                     ''''''''''''           &&&&&&& ", 
+  "!!!!!!                     #######        $$$$$$$                    %%%%%%%                       '''''''''''           &&&&&&&", 
+  "!!!!!!                     #######       $$$$$$$                      %%%%%%%                        ''''''''''          &&&&&&&", 
+  "!!!!!                       #######      $$$$$$$                      %%%%%%%                          '''''''''          &&&&&&", 
+  "!!!!!                       #######     $$$$$$$                        %%%%%%%                          '''''''''         &&&&&&", 
+  "!!!!                         ######     $$$$$$$                        %%%%%%%                           ''''''''          &&&&&", 
+  "!!!!                        #######     $$$$$$                          %%%%%%                            ''''''''         &&&&&", 
+  "!!!!!                       #######     $$$$$$                          %%%%%%                             ''''''''        &&&&&", 
+  "!!!!!                      ########     $$$$$$                          %%%%%%                              ''''''''        &&&&", 
+  "!!!!!!                     #######      $$$$$$                          %%%%%%                              ''''''''        &&&&", 
+  "!!!!!!                    ########      $$$$$$                          %%%%%%                               ''''''''       &&&&", 
+  "!!!!!!!                   #######       $$$$$$                          %%%%%%                                '''''''       &&&&", 
+  "!!!!!!!                  ########       $$$$$$                          %%%%%%                                '''''''       &&&&", 
+  " !!!!!!!                 #######        $$$$$$                          %%%%%%                                 '''''''      &&&&", 
+  " !!!!!!!                ########        $$$$$$                          %%%%%%                                 '''''''      &&&&", 
+  "  !!!!!!!               #######         $$$$$$                          %%%%%%                                  '''''''      &&&", 
+  "  !!!!!!!              ########         $$$$$$                          %%%%%%                                  '''''''      &&&", 
+  "   !!!!!!!             #######          $$$$$$                          %%%%%%                                   ''''''       &&", 
+  "   !!!!!!!            ########          $$$$$$                          %%%%%%                                   ''''''         ", 
+  "    !!!!!!!           #######           $$$$$$                          %%%%%%                                   '''''''        ", 
+  "    !!!!!!!          ########           $$$$$$                          %%%%%%                                   '''''''        ", 
+  "     !!!!!!!         #######            $$$$$$                          %%%%%%                                   '''''''        ", 
+  "     !!!!!!!        ########            $$$$$$                          %%%%%%                                    ''''''        ", 
+  "      !!!!!!!       #######             $$$$$$                          %%%%%%                                    ''''''        ", 
+  "      !!!!!!!      ########             $$$$$$                          %%%%%%                                    ''''''        ", 
+  "       !!!!!!!     #######              $$$$$$                          %%%%%%                                    ''''''        ", 
+  "       !!!!!!!     #######              $$$$$$                          %%%%%%                                    ''''''        ", 
+  "        !!!!!!     ######               $$$$$$                          %%%%%%                                    ''''''        ", 
+  "        !!!!!!     ######               $$$$$$                          %%%%%%                                    ''''''        ", 
+  "         !!!!       ####                 $$$$                            %%%%                                     ''''''        ", 
+  "                                                                                                                  ''''''        ", 
+  "                                                                                                                 '''''''        ", 
+  "                                                                                                                 '''''''        ", 
+  "                                                                                                                 '''''''        ", 
+  "                                                                                                                 ''''''         ", 
+  "                                         ((((                            ))))                                   '''''''      ***", 
+  "                                        ((((((                          ))))))                                  '''''''      ***", 
+  "                                        ((((((                          ))))))                                  ''''''       ***", 
+  "                                        ((((((                          ))))))                                 '''''''      ****", 
+  "                                        ((((((                          ))))))                                 '''''''      ****", 
+  "                                        ((((((                          ))))))                                '''''''       ****", 
+  "                                        ((((((                          ))))))                                '''''''       ****", 
+  "                                        ((((((                          ))))))                               '''''''        ****", 
+  "                                        ((((((                          ))))))                              ''''''''        ****", 
+  "                                        ((((((                          ))))))                              '''''''         ****", 
+  "++++++++++++                            ((((((                          ))))))                             ''''''''        *****", 
+  "++++++++++++++                          ((((((                          ))))))                            ''''''''         *****", 
+  "++++++++++++++                          ((((((                          ))))))                           ''''''''          *****", 
+  "++++++++++++++                          ((((((                          ))))))                          '''''''''         ******", 
+  "++++++++++++++                          ((((((                          ))))))                        ''''''''''          ******", 
+  "+++++++++++++                           ((((((                          ))))))                       ''''''''''          *******", 
+  "                                        ((((((                          ))))))                     '''''''''''           *******", 
+  "                                        ((((((                          ))))))                  '''''''''''''           ******* ", 
+  "                                        ((((((                          ))))))               '''''''''''''''           ******** ", 
+  "                                        ((((((                          ))))))         '''''''''''''''''''             *******  ", 
+  "                                        ((((((                          ))))))      '''''''''''''''''''''             ********  ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,,                ((((((                          ))))))     ''''''''''''''''''''              ********   ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,,                ((((((                          ))))))     ''''''''''''''''''               ********    ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,,,               ((((((                          ))))))     '''''''''''''''                 *********    ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,,,               (((((((                        )))))))      '''''''''''                   *********     ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,,,               (((((((                        )))))))       ''''                       **********      ", 
+  ",,,,,,,,,,,,,,,,,,,,,,,,                 (((((((                      )))))))                                  **********       ", 
+  "                                         (((((((                      )))))))                                ***********        ", 
+  "                                          (((((((                    )))))))                              *************         ", 
+  "                                          (((((((                    )))))))                           ***************          ", 
+  "                                           (((((((                  )))))))                     ********************            ", 
+  "                                           (((((((                  )))))))                   *********************             ", 
+  "-----------------------------------         (((((((                )))))))                    *******************               ", 
+  "-----------------------------------         (((((((                )))))))                    *****************                 ", 
+  "-----------------------------------          (((((((              )))))))                     **************                    ", 
+  "-----------------------------------          (((((((              )))))))                      **********                       ", 
+  "-----------------------------------           (((((((            )))))))                                                        ", 
+  "----------------------------------            (((((((            )))))))                                                        ", 
+  "                                               (((((((          )))))))                                                         ", 
+  "                                               (((((((          )))))))                                                         ", 
+  "                                                (((((((        )))))))                                                          ", 
+  "                                                (((((((        )))))))                                                          ", 
+  "............................................     (((((((      )))))))                                                           ", 
+  "..............................................   (((((((      )))))))                         ////                              ", 
+  "..............................................    (((((((    )))))))                       //////////                           ", 
+  "..............................................    (((((((    )))))))                     ///////////////                        ", 
+  "..............................................     ((((((    ))))))                    ///////////////////                      ", 
+  ".............................................      (((((      )))))                   /////////////////////                   //", 
+  "                                                                                     ////////////////////////                ///", 
+  "                                                                                    //////////////////////////              ////", 
+  "                                                                                   //////////      /////////////           /////", 
+  "                                                                                   ////////           ////////////       ///////", 
+  "                                                                                   ///////             /////////////////////////", 
+  "000000000000000000000000000000000000000000000000000000000000000000                  /////                ///////////////////////", 
+  "0000000000000000000000000000000000000000000000000000000000000000000                                       //////////////////////", 
+  "0000000000000000000000000000000000000000000000000000000000000000000                                         /////////////////// ", 
+  "0000000000000000000000000000000000000000000000000000000000000000000                                          ////////////////   ", 
+  "0000000000000000000000000000000000000000000000000000000000000000000                                             ///////////     ", 
+  "000000000000000000000000000000000000000000000000000000000000000000                                                  ///         ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222", 
+  "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222", 
+  "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-ttc-font-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/text-ttc-font-600-400-1.0-grid-reference.json
new file mode 100644
index 0000000..85e04d5
--- /dev/null
+++ b/tests/visual_tests/grids/text-ttc-font-600-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "9", 
+  "2", 
+  "10", 
+  "3", 
+  "11", 
+  "4", 
+  "12", 
+  "5", 
+  "13", 
+  "6", 
+  "14", 
+  "7", 
+  "15", 
+  "8", 
+  "16"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                    !!! !!!                                 # # ###                                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                 $$     $                                %%     %                                                     ", 
+  "                                                  $ $   $ $$$$                           %%     % %%%%                                                ", 
+  "                                                  $$ $$ $ $$$$                            %% %% % %%%%                                                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                              &    &    &                             '    '    '                                                     ", 
+  "                                               &  &&  &  & &&& &                       '  ''  '  ' '''''                                              ", 
+  "                                               & &&& && &   && &                       ' ''' '' ''' '' '                                              ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                             (           ((                          )           ))                                                   ", 
+  "                                           ( ( (( (( (      (( ((  (               ) ) )) )) )      ))  )  )                                          ", 
+  "                                            ((    ( ( (  ((  ( ( ((                 ))    ) ) )  ))  ) ) ))                                           ", 
+  "                                            ((   (( ( (      ( ( (                  ))    ) ) )      ) ) ) )                                          ", 
+  "                                             ( (( (( (   (( (  ( (((                 ) )) )) )   )) )  ) )))                                          ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                       **  *     *       ***                   ++  +     +       +++                                                  ", 
+  "                                       **  * ****** **   *   *** *** ***       ++  + ++ +++ ++   +   +++ +++ +++                                      ", 
+  "                                       * * **  * * *  *   **   * * * *         + + ++  + + +  +   ++   + + + +                                        ", 
+  "                                       *  ***  * * *  *    * * * * *  **       +  +++  + + +  +    + + + + +  ++                                      ", 
+  "                                       *  ** *** *****   *** *** * * ***       +  ++ +++ +++++   +++ +++ + + +++                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                    ,,  ,                 ,,,             --   -       -          ----                                                ", 
+  "                                    ,,  ,      ,,        ,,,,             ---  -   -   -    -    -- --  -     -   -                                   ", 
+  "                                    ,,, , ,,,, ,,,,,,,   ,,   ,,,,,,,,,,,,---- - -------- ----   --    --------- ----                                 ", 
+  "                                    , ,,, ,, ,,,, ,, ,,   ,,,   ,,,, ,,,,,---- - -- -- - --  --   ---    ----  - --                                   ", 
+  "                                    , ,,, ,, ,,,, ,  ,,    ,, ,,,,,, ,, ,,-- --- -  -- - --  --     ---------  - ----                                 ", 
+  "                                    ,  ,, ,, ,,,, ,, ,,  ,,,, , ,,,, ,,,,,--  -- -- -- -  -  --  -  ---- ----  -   --                                 ", 
+  "                                    ,   ,  ,,,  ,, ,,,   ,,,, ,,,,,, ,,,,,--  -- ----  -------   ------------  - ----                                 ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                 ..   .       ..          ....           //   /       //          ////                                                ", 
+  "                                 ...  .  ...  ...  ..    ..     ... .....///../  ///  /// ///    //     /// /////  ///                                ", 
+  "                                 ...  . ..............   ...   ..........///../ //////////////   ///   //// ///// ////                                ", 
+  "                                 . .. . .. .. .. ..  ..   ....    ....  ./.// / // // // //  //   ////    ////  / //                                  ", 
+  "                                 .  ... .   . .. ..  ..     .. .......  ./ //// /   / // //  //     // ///////  /  ///                                ", 
+  "                                 .  ... .. .. .. ..  ..      ...  ....  ./  /// // // // //  //      / /  ////  /    /                                ", 
+  "                                 .   .. ..... ... ....   ..... .......  ./...// ///// /// ////   ///// ///////  / ////                                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                              00   00                      0000       11   11                      1111                                               ", 
+  "                              00   00        0            00000       11   11        1            11111                                               ", 
+  "                              000  00  000  0000  000     00     000  111001100111  1111  111     11     111  11111  1111                             ", 
+  "                              0000 00 00000 0000 00000    000   00000 1111011011111 1111 11111    11    11111 111111 1111                             ", 
+  "                              0 00 00 00  00 0  00  00    00000    00 1011011011  11 1  11  11    11111    11 11  11 11                               ", 
+  "                              0  0000 0   00 0  00   0      000 00000 10 11110100 11 1  11   1      111 11111 11  11 1111                             ", 
+  "                              0  0000 00  00 0  00  00        0 00 00 10 1111 110011 1  11  11        1 11 11 11  11   111                            ", 
+  "                              0   000 00000  000 00000    00000 00000 10  111011111  111111111    11111 11111 11  11 11111                            ", 
+  "                              0    00  0000  000 0000     00000 00000 10  111001111  111 1111     1111  11111 11  11 1111                             ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-ttc-font-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/text-ttc-font-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..84058b5
--- /dev/null
+++ b/tests/visual_tests/grids/text-ttc-font-600-400-2.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+  "", 
+  "1", 
+  "9", 
+  "2", 
+  "10", 
+  "3", 
+  "11", 
+  "4", 
+  "12", 
+  "5", 
+  "13", 
+  "14", 
+  "6", 
+  "7", 
+  "15", 
+  "8", 
+  "16"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                 !!     !                                ##     #                                                     ", 
+  "                                                  ! !   ! !!!!                            #     # ####                                                ", 
+  "                                                  !! !! ! !!!!                            ## ## # ####                                                ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                             $           $$                          %           %%                                                   ", 
+  "                                           $ $ $$ $$ $      $$ $$  $               % % %% %% %      %%  %  %                                          ", 
+  "                                            $$   $$ $ $  $$    $ $$                 %%    % % %  %%  % % %%                                           ", 
+  "                                            $$   $$ $ $      $ $ $                  %%    % % %      % % %                                            ", 
+  "                                             $ $$ $$ $   $$ $  $ $$$                 % %% %% %   %% %  % %%%                                          ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                    &&  &                 &&&               ''  '                 '''                                                 ", 
+  "                                    &&  &      &&        &&&&               ''  '      ''        ''''                                                 ", 
+  "                                    &&& & &&&& &&&&&&&   &&   &&&&&&&&&&&&& ''' ' '''' '''''''   ''   '''''''''''''                                   ", 
+  "                                    & &&& && &&&& && &&   &&&   &&&& &&&&&  ' ''' '' '''' '' ''  ''''   '''' '''''                                    ", 
+  "                                    & &&& && &&&& &  &&    && &&&&&& && &&& ' ''' '  '''' '  ''    '' '''''' '' '''                                   ", 
+  "                                    &  && && &&&& && &&  &&&& & &&&& &&&&&& '  '' '' '''' '' ''  '''''' '''' ''''''                                   ", 
+  "                                    &   &  &&& &&& &&&   &&&& &&&&&& &&&&&& '   '  ''' ''' '''   '''' '''''' ''''''                                   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                              ((   ((                      ((((       ))   ))                      ))))                                               ", 
+  "                              ((   ((        (            (((((       ))   ))        )            )))))                                               ", 
+  "                              (((  ((  (((  ((((  (((     ((     (((  )))(())(()))  ))))  )))     ))     )))  )))))  ))))                             ", 
+  "                              (((( (( ((((( (((( (((((    ((    ((((( ))))())())))) )))) )))))    ))    ))))) )))))) ))))                             ", 
+  "                              ( (( (( ((  (( (  ((  ((    (((((    (( )())())())  )) )  ))  ))    )))))    )) ))  )) ))                               ", 
+  "                              (  (((( (   (( (  ((   (      ((( ((((( )( ))))()(( )) )  ))   )      ))) ))))) ))  )) ))))                             ", 
+  "                              (  (((( ((  (( (  ((  ((        ( (( (( )( )))) ))(()) )  ))  ))        ) )) )) ))  ))   )))                            ", 
+  "                              (   ((( (((((  ((( (((((    ((((( ((((( )(  )))()))))  )))))))))    ))))) ))))) ))  )) )))))                            ", 
+  "                              (    ((  ((((  ((( ((((     ((((( ((((( )(  )))(())))  ))) ))))     ))))  ))))) ))  )) ))))                             ", 
+  "                       ***    **                            ***+++    ++                            ++++                                              ", 
+  "                       ***    **          **               ****+++    ++          ++               ++++++                                             ", 
+  "                       ****   **          **               **  ++++   ++          ++              +++   +                                             ", 
+  "                       *****  **  ****** *****  *****     ***  ++++***++  ++++++ +++++**+++++     +++      +++++  ++++++   +++++                      ", 
+  "                       ** **  **  ****** ***** *******     *** ++ ++* ++  ++++++*+++++*+++++++     +++     ++ ++  +++++++ ++++++                      ", 
+  "                       ** *** ** ***  *** **   **   **     ****++ +++ ++*+++  +++ ++*  ++   ++     +++++       ++ ++   ++ +++                         ", 
+  "                       **  ** ** **    ** **   **   **       **++  ++*++*++*   ++ ++**+++   ++       ++++  ++++++ ++   ++ +++++                       ", 
+  "                       **   **** **    ** **   **   **         ++ *+++++*++*   ++ ++**+++   ++         ++ +++  ++ ++   ++   ++++                      ", 
+  "                       **   **** ***  *** **   **   **         ++ **++++*+++  +++ ++  *++   ++         ,, ++  +++ ++   ++     ++                      ", 
+  "                 ---   **--  ***  ******  **** *******,,, ***-,,,--**+++* ++++++* ++++*+++++++    ++,,,,,,,,+++++ ++   ++ ++++++                      ", 
+  "                 ----  **--  ***   **** -- ***  ***** ,,,,*---,,,--**+++* *+++,,, *+++* +++++     +,,,,,,,,,+++++ ++   ++ +++++                       ", 
+  "                 ----    --            ---            ,,,,,---,,,--           ,,,                  ,,,,   ,,                                          ", 
+  "                 -----   --    -----  ------   -----  ,,,,,---,,,   ,,,,,,,  ,,,,,,,-,,,,,,,--     ,,,        ,,,,,,,   ,,,,,,,,   ,,,,,,,            ", 
+  "                 ------  --  -------- ------ -------- ,,,,,,--,,,  ,,,,,,,,, ,,,,,,,,,,,,,,,,--    ,,,,       ,,,,,,,,  ,,,,,,,,, ,,,,,,,,            ", 
+  "                 ------  --  --------------- ---------,, ,,,--,,,  ,,,,-,,,,  ,,,---,,,,-,,,,,      ,,,,,     ,,, ,,,,  ,,,, ,,,, ,,,  ,,             ", 
+  "                 -- ---- --  ---   --- ---   ---   ---,, ,,,,-,,,- ,,,   ,,,  ,,,   ,,,---,,,,      ,,,,,,,        ,,,  ,,,   ,,, ,,,,                ", 
+  "                 --  --- --  ---   --- ---   --    ---,,  ,,,,,,,-,,,-----,,, ,,,   ,,,----,,,        ,,,,,,  ,,,,,,,,  ,,    ,,, ,,,,,,              ", 
+  "                 --  ------  --    --- ---   --    ---,,   ,,,,,,-,,,-----,,, ,,,   ,,, ---,,,-         ,,,, ,,,,,,,,,  ,,    ,,,  ,,,,,,,            ", 
+  "          ....   -- ...----  ---   --- ---   ---  ////,,   ,///,,.,,,,-  ,,,, ,,,   ,,,    ,,,-       ////// ,,,,  ,,,  ,,    ,,,    ,,,,,            ", 
+  "          ....   -- ...----  ---  ---...--   ---  ////,,   -///,,..,,,-  ,,, ///,   ,,,-- ,,,,-     /////////,,,  ,,,,  ,,    ,,,      ,,,            ", 
+  "          .....  -- ...----  --------...----------/////,   -///,,..,,,,,,,,, ///,,,,,,,,,,,,,--    ,/////////,,,,,,,,,  ,,    ,,, ,,,,,,,,            ", 
+  "          ...... -- ... ---  .-------...----- --.-//////   -///,,- .,/,,,,,- ///,,,,-,,,/,,,,-   . ,///,,,,/ ,,,,,,,,,  ,,    //, ,,,,,,,,            ", 
+  "          ......    ...   .......  ........  .....//////    ///,, ///////,.////////,./////// .......///,,,    ,//////// ,/////////,,,////////         ", 
+  "          .......   ...  ......... ........ ......///////   ///. /////////.////////./////////.......////       ////////  //////////  ////////         ", 
+  "          ... ....  ...  ....  ....  ...   ....  ./// ////  ///..//// ///// ./// ..//// .////...   .//////     ///  ///  /////  ///  ///   //         ", 
+  "          ... ....  ... ....    ...  ...   ...    ///.////  ///.////   ////  /// ..///  ..///....    ///////        ///  ////   ///  ////             ", 
+  "          ...  .... ... ...     ...  ...   ...    ///. //// ///.///..   ///../// ..///  ..////.....   ///////   ///////  ///    ///  //////           ", 
+  "    0000  ...  000..... ...     ...  ...   .1111  ///. 111/////0///00 ..///../// ..///  ...///.......  111111 /////////  ///    ///   ///////         ", 
+  "    0000  ...  000..... ...     ...  ...   .1111  ///. 111/////0///0000.///  /// ..///  ..////  .....1111111111////  //  ///    ///     /////         ", 
+  "    00000 ...  000..... ....   ....00...   .11111 ///. 111/////0////000////11/// ..///  ..///     ...1111111111//   ///  ///    ///       ///         ", 
+  "    000000...  000.....  .... ....000...   .111111///  111/////00////0////111/// ..//// .////..   ./11111///11///  ////  ///    ///  //   ///         ", 
+  "    000000...  000.....000000....00000000.. 111111///  111/////111111////11111111//.111111///00..../1111///// /////111111/// 111/111111/////1111111   ", 
+  "    0000000..  000 ...00000000..000000000..01111111//  111 //111111111//111111111//1111111110000.../1111////   //111111111// 11111111111///11111111   ", 
+  "    00000000   000   0000000000 000000000 0011111111   111  01111111111 111111111011111111110000  001111100      1111111111  11111111111  111111111   ", 
+  "    000 0000   000  00000  00000  000     00111 11110  111  111100011111  111  00011110001111000  000111111       11   1111  11111   111  111    11   ", 
+  "    000  0000  000  0000    0000  000    000111  1111  111  111100001111  111   0111100001111000  00001111111           111  1111    111  1111        ", 
+  "    000  00000 000  000      000  000    000111  11111 111  111000000111  111000011110000 111000  0000011111111    11111111  1111    111  1111111     ", 
+  "    000   0000 000  000      000  000    000111   1111 111  111   000111 01110000111 000  111000   000000011111  1111111111  111     111   11111111   ", 
+  "    000    0000000  000      000  000    000111   01111111  111    00111001110000111 000  111000     0000001111 11111111111  111     111     111111   ", 
+  "    000    0000000  0000    0000  000    000111   01111111  111     111100111   01111000  111000       00000111 1111    111  111     111       11111  ", 
+  "    000     000000  0000    0000  000    000111  000111111  1111    111100111  001111000 1111000         000111 111    1111  111     111        1111  ", 
+  "    000      00000   00000 0000   0000 00 00111 0000111111  01111011111 001111011011111011111000  0011111111111 1111  11111  111     111  111  11111  ", 
+  "    000      00000   0000000000   0000000 0011100000 11111  01111111111 00111111101111111111 000  001111111111  11111111111  111     111  111111111   ", 
+  "    000       0000    00000000     000000  01110000   1111  0011111111   001111110011111111  000  00111111111    1111111111  111     111  111111111   ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-typographic-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/text-typographic-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..cd1fdc8
--- /dev/null
+++ b/tests/visual_tests/grids/text-typographic-512-512-1.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "2", 
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!!!!!!", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###########!!", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!############!!", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########!!!!", 
+  " !  !  !!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!!!!!!!!!", 
+  "          !    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!#########", 
+  "          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!#!!!!!!!!", 
+  "          !!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!", 
+  "!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!", 
+  "!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!#!!!!!!!!", 
+  "!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!", 
+  "!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!", 
+  "!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!", 
+  "!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!#######!!!!!!!", 
+  "!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!############!!!!!!!", 
+  "!!!!!!!!   !!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!########!###!!!!!!!", 
+  "!!!!!!!!   !!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###############!!####!!!!!!", 
+  "!!!!!!!!   !!!! !!!  !!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!####!##!!######!!!!!!", 
+  "!!!!!!!!               !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!###############!!!!!!!", 
+  "!!!!!!!!!              !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!###############!!!!!!!", 
+  "!!!!!!!!!!             !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#############!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!##!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!! !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!###!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!! !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!    !              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##################!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!    !               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###############!###!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!   !!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###############!###!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!    !!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#############!!!####!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!               !!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!###############!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!###############!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!###############!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !      !!       !!!!!!!!!!!!!!!!!!!!!!!!!!#############!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !               !!!!!!!!!!!!!!!!!!!!!!!!!#############!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    !!!!!!!!!!!!!!!!!!!!!!!##############!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !!!   !!        !!!!!!!!!!!!!!!!!!!!!!!##############!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               !!   !!!!!!!!!!!!!!!!!!!!!!!###!!##############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               !   !!!!!!!!!!!!!!!!!!!!!!!###!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !   !!!!!!!!!!!!!!!!!!!!!!!###!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!###!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!####!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!###!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!###!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!##!!!!!!!####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !            !!##########!!!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!               ###########!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!               ###########!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !  !  !!!!!!    !!!!###!##!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !!    !!!#############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   !!##############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !##############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       ####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!       ####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#########   !#              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########## !!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!####  #   #  #  !!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!########           !    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!########           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#############            !  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!#!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!!!!!!########!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####!##!#########!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!##!#####!###!!!!!!!!!!!!!!!   !!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########!!!###!!!####!!!!!!!!!!!!!!   !!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!####!##!!######!!!!!!!!!!!!!!   !!!!      !!!   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!###############!!!!!!!!!!!!!!!                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!###############!!!!!!!!!!!!!!!!!  !!!            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!#############!!!!!!!!!!!!!!!!!!!!!!!!        !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !              !!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!##!##!!#######!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !!               !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!#######!!#######!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !!!              !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!#####!!!!######!!####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !!              !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!####!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!!!!!    !!   !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!###!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                   !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!###!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!!     !   !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!###!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!####!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!####!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!###!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !    !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !    !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!##!####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !   !!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!##########!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !              !!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!###############!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !                !!!!!!!!!!!", 
+  "!!!!!!!!!!!!####!##########!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    !!!!!!!!!!!", 
+  "!!!!!!!!!!!!###!!###!####!!!!###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !!              !!!!!!!!!!!", 
+  "!!!!!!!!!!!####!!##############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          !!!!!!!   !!!!!!!!!!!", 
+  "!!!!!!!!!!!####!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !!   !!!!!!!!!!!", 
+  "!!!!!!!!!!!!###!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!!!!! !!   !!!!!!!!!!!", 
+  "!!!!!!!!!!!!###!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!   !!!!!!!!!!!", 
+  "!!!!!!!!!!!!###!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!   !!!!!!!!!!!", 
+  "!!!!!!!!!!!!###!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!  !!!!!!!!!!!!", 
+  "!!!!!!!!!!!!###!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!  !!!!!!!!!!!!", 
+  "!!!!!!!!!!!!###!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!  !!!!!!!!!!!!", 
+  "!!!!!!##!!!!###!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! !!!!!!!!!!!!", 
+  "!!!############!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! !!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-typographic-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/text-typographic-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..83c913e
--- /dev/null
+++ b/tests/visual_tests/grids/text-typographic-512-512-2.0-grid-reference.json
@@ -0,0 +1,138 @@
+{
+ "keys": [
+  "2", 
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####!####!!!", 
+  "              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!################", 
+  "!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#############!!!", 
+  "!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#########!###!!!", 
+  "!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#########!!!!!!!", 
+  "!!!!!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!", 
+  "  !!!  !!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!!!!!", 
+  "        !       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!!####", 
+  "        !       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!######", 
+  "        !       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!######", 
+  "        !       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!#######", 
+  "        !              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!###########!!######!", 
+  "!!      !!                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!###########!!######!", 
+  "!!      !!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####!!###########!!######!", 
+  "!!      !!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!################!!!#######!", 
+  "!!       !!!!!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!################!!!#######!", 
+  "!!       !!!!!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#################!!!#######!", 
+  "!!      !!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!########!!!!#######!", 
+  "!!      !!!!!!   !!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!#####!!!!!######!", 
+  "!!                !!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!################!", 
+  "!!!                 !!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!###############!!", 
+  "!!!                  !       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!#################!!", 
+  "!!!                  !       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!##################!!", 
+  "!!!!!!!              !       !!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########!###############!!!!!", 
+  "!!!!!!!              !                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!#########!###############!!!!!", 
+  "!!!!!!!!!!!!!!!      !!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!##################!!!!###!!!!!!!", 
+  "!!!!!!!!!!!!!!!      !!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########################!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!       !!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########!##################!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!       !!!!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##################!!!#######!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!       !!!!                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########!!######!!!#######!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!       !!!!                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########!!!!!####!!!!#######!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!      !!!     !!!!!!       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!########!!!!!!!!!!##########!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!      !           !!      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!################!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!                  !!      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!################!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!                  !!      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########################!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!   !!!                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##########################!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#########################!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!                            !!!!!!!!!!!!!!!!!!!!!!!!##!!!###########!!###############!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!####!!############!#########!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!                   !!!!!!!!!!!!!!!!!!!!!##################!!!#####!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!                   !!!!!!!!!!!!!!!!!!!!!##################!!!#####!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!!!!!!              !!!!!!!!!!!!!!!!!!!!!###############!!!!!!#####!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!              !!!!!!!!!!!!!!!!!!!!################!!!!!!#####!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!              !!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!!!!   !!!!      !!!!!!!!!!!!!!!!!!!!#######!!!!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!!      !!!!!!!!!!!!!!!!!!!!#######!!!!!#############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !!      !!!!!!!!!!!!!!!!!!!!#######!!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!      !!!!!!!!!!!!!!!!!!!!#######!!################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!      !!!!!!!!!!!!!!!!!!!!#######!!################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!       !!!!!!!!!!!!!!!!!!!#######!!################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!               !!!!!!!##########!!!############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!               !!!!!!!###########!!!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!                   ##############!!!##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!                  !!!###########!!#####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!                  !!!########!!!!!#####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!!!!!!             !!!########!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!       !!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!!!!!!!!!!!!       !!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !    !!!!!!!!       !!!!################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!       !!###################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!       !!###################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !!    !!!!  !#        !#################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####               ###########!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#########                  !###!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#########                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!############                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####       #####               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####       ####!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####       ####!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####         !!!  ######       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####        ###  ######       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####                ###       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####                 ##       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!                #       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!####!!!!#              #       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##!!!###########!!!!#              #                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###!!###########!!!!####!!!!!      !!                 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!################!!!!!##!!!!!!      !!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#################!!!######!!!      !!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!################!!!######!!!      !!!!!!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##################!!!######!!!      !!!!!!!             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!###############!!!!!!######!!!      !!!!!!!              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!!!!!!!#######!!!      !!!!    !!!!!!        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!!!###########!!!!!              !!!!!!        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!######!!!!################!!!!                  !!        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!###################!!!!                  !!        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!###################!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!#################!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!#!!!!##############!!!!!!!!!!!!                                  !!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!####!!###!!!#!!!!#########!!!!!!!!!!!!!!!!!!!!!!!!!!!                        !!!!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!!!!#############!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!########!####!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!!!                !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!##############!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!!!                !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!##########!!!!!!!!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!                !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!########!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!       !!!                !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!########!!!!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         !!!!!!!!!!!      !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!#######!!!!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!!!      !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!#######!!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                  !!      !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!#######!!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!      !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!#######!#################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!      !!!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!!!!!!!!!!!!#######!#################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!       !!!!!!!!!!!!!!!!!!!!!!", 
+  "!!!!!!!!!!!!##!!!###########!!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!               !!                !!!!!!!!!!!!!", 
+  "!!!!!!!!!!!####!!############!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!                  !!!!!!!!!!!", 
+  "!!!!!!!!!!!##################!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!                  !!!!!!!!!!", 
+  "!!!!!!!!!!!##################!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!                  !!!!!!!!!!", 
+  "!!!!!!!!!!!###############!!!!!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      !!                  !!!!!!!!!!", 
+  "!!!!!!!!!!################!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!!!!!               !!!!!!!!!!", 
+  "!!!!!!!!!!#######!!!!!!!!!!!!!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     !!!!!!!  !          !!!!!!!!!!!", 
+  "!!!!!!!!!!#######!!!!!!!!####!#######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          !!!!!!!!!!    !!!!!!!!!!!!", 
+  "!!!!!!!!!!#######!###!!##############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             !!!!!!!    !!!!!!!!!!!", 
+  "!!!!!!!!!!#######!###################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                !!!!    !!!!!!!!!!!", 
+  "!!!!!!!!!!#######!################!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!!    !!!!!!!!!!!", 
+  "!!!!!!!!!!#######!!##############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!!    !!!!!!!!!!!", 
+  "!!!!!!!!!!#######!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   !            !!!!! !!!!!!!!!!!!", 
+  "!!!!!!##########!!###############!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            !!!!! !!!!!!!!!!!!", 
+  "!!!!!!###########!######!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!! !!!!!!!!!!!!"
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-vertical-alignment-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/text-vertical-alignment-800-800-1.0-grid-reference.json
new file mode 100644
index 0000000..dd3bd2a
--- /dev/null
+++ b/tests/visual_tests/grids/text-vertical-alignment-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "12", 
+  "2", 
+  "10", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                               !                                                                                                                                                        ", 
+  "                                              !!!!                                                                                                                                                      ", 
+  "                                            !!!!!!!                                            !!!!!                                                                                                    ", 
+  "                                           !!!!!!!!!                                          !!!!!!!                                        !!!                                                        ", 
+  "                                         !!!!!! !!!!!                                       ! !!!!!!!!                                      !!!!!                                                       ", 
+  "                                        !!!!!!   !!!!!!                                   ! !!!!!!!!!!!!                                  !!!!!!!!                                  !                   ", 
+  "                                      !!!!!!       !!!!!                                 !!!!!!!!!!!!!!!!                                !!!!!!!!!!                               !!!!                  ", 
+  "                                     !!!!!!         !!!!!                               !!!!!!!  ! !!!!!!!                              !!!!!  !!!!!!                            !!!!!!                 ", 
+  "                                   !!!!!!            !!!!!!                            !!!!!!! !   !!!!!!!!!                          !!!!!!     !!!!!                          !!!!!                   ", 
+  "                                 !!!!!!!              !!!!!!                         !!!!!!! !       !!!!!!!!                        !!!!!!       !!!!!                       !!!!!!                    ", 
+  "                                !!!!!!                  !!!!!                       !!!!!!! !        !  !!!!!!                      !!!!!          !!!!!                     !!!!!!                     ", 
+  "                              !!!!!!!                    !!!!!                      !!!!!!!            !!!!!!!!!                  !!!!!!            !!!!!!                  !!!!!                       ", 
+  "                             !!!!!!                       !!!!!!                  !!!!!!!              !! !!!!!!!                !!!!!!               !!!!!               !!!!!!                        ", 
+  "                            !!!!!                          !!!!!!                !!!!!!!                   !!!!!!!            ! !!!!!                  !!!!!             !!!!!!                         ", 
+  "                            !!!!                             !!!!!              !!!!!  !                  ! !!!!!!!          !!!!!!!                    !!!!!!          !!!!!                           ", 
+  "                          !! !                                !!!!!           !!!!!!                         !!!!!!!        !!!!!!                       !!!!!!       !!!!!!                            ", 
+  "                         !!                                    !!!!!!        !!!!!                             !!!!!!!    !!!!!!!                          !!!!!     !!!!!                              ", 
+  "                                                                !!!!!!     !!!!!!                             ! !!!!!!!  !!!!!!!                            !!!!!  !!!!!!                               ", 
+  "                                                                  !!!!!   !!!!!!                                 !!!!!!!!!!!!!                               !!!!!!!!!!!                                ", 
+  "                                                                   !!!!!!!!!!!                                     !!!!!!!!!!                                 !!!!!!!!                                  ", 
+  "                                                                    !!!!!!!!!                                      ! !!!!!!!                                    !!!!!                                   ", 
+  "                                                                     !!!!!!                                           !!!!!                                      !!!                                    ", 
+  "                                           ###                         !!!                      #                    ! !!!!                                                                 $$$         ", 
+  "                                          #####                         !                   # #####                     !                                                                   $$$         ", 
+  "                                        ########                                           # #######                                         ##                                       #     $$$         ", 
+  "                                      ###########                                         ############                                     #####                                   # ##     $$$         ", 
+  "                                     ######  ######                                      ###############                                  ########                               ####       $$$         ", 
+  "                                   #######     #####                                    ###### ## #####                                  ##########                             #####       $$$         ", 
+  "                                  ######        #####                                  ######    #########                              #####  #####                           #####        $$$         ", 
+  "                                ######           ######                               ########    #########                           ######    ######                       ######         $$$         ", 
+  "                               ######             ######                             ##### ##     ### #####                          ######      ######                     ######          $$$         ", 
+  "                     %       ######                 #####                          #######           # #####                        #####          #####                   #####            $$$         ", 
+  "                     %     #######                   #####                        ##### #             # #######                    #####            ######               ######             $$$         ", 
+  "                     %    ######                      ######                    ###### ##              #  ######                 ######              ######             #####               $$$         ", 
+  "                     %     ####                         #####                  ###### #                 #########               #####                  #####          ######                $$$         ", 
+  "                    %%%    ##                            #####                ###### #                   ######### #           #####                    ######       ######                 $$$         ", 
+  "                    %%%                                   ######            ######                         # #######         ######                       #####     #####                   $$$         ", 
+  "                    %%%                                    ######          ######                           ## ######       ######                         ###### ######                    $$$         ", 
+  "                    %%%                                      #####       ######                              # #######    ######                            ###########                     $$$         ", 
+  "                    %%%                                       #####     ######                                  ###############                               #######                       $$$         ", 
+  "                    %%%                                        ######  #####                                     # ###########                                 #####                        $$$         ", 
+  "                    %%%                                         ###########                                      ########### #                                  ##                          $$$         ", 
+  "                    %%%                                           ########                                         # ###### #                                                               $$$         ", 
+  "                    %%%                                            #####                                             ##### #                                                                $$$         ", 
+  "                    %%%                                             ###                                              ## # #                                                                 $$$         ", 
+  "                    %%%                                                                                         &      #                                                                    $$$         ", 
+  "                    %%%                                                                                    && &&&&&                           &&&&&&&                                       $$$         ", 
+  "                    %%%                                                   &&&&&&&                         &&&&&&&&&                         &&&&&&&&&&                                      $$$         ", 
+  "                    %%%               &&&&&&&&                         &&&&&&&&&&&                    &&&&&&&&&&&&&&&                     &&&&&&&&&&&&&                                     $$$         ", 
+  "                    %%%             &&&&&&&&&&&                      &&&&&&&&&&&&&&                  &&&&&&&&&&&&&&&&&                  &&&&&&&&   &&&&&                                    $$$         ", 
+  "                    %%%           &&&&&&&&&&&&&&                    &&&&&&&  &&&&&&&                 &&&&&&&  &&&&&&&&&                &&&&&&       &&&&&                                  $$$$         ", 
+  "                    %%%          &&&&&&&    &&&&&                 &&&&&&&      &&&&&&              &&&&&&&& &&    &&&&&               &&&&&          &&&&&                                 $$$$         ", 
+  "                    %%%        &&&&&&         &&&&               &&&&&&         &&&&&&            &&&&&&& &        &&&&&             &&&&&            &&&&                                 $$$$         ", 
+  "                    %%%       &&&&&&          &&&&&             &&&&&           &&&&&&          &&&&&&&           & &&&&           &&&&&&              &&&&                                $$$$         ", 
+  "                    %%%      &&&&&             &&&&            &&&&&             &&&&&&         &&&&&&            && &&&&         &&&&&                 &&&&        &&                     $$$$         ", 
+  "                    %%%     &&&&&               &&&&          &&&&&              &&&&&&       &&&&&&&               &&&&&&       &&&&&                  &&&&&     &&&&&                    $$$$         ", 
+  "                    %%%     &&&&                 &&&&       &&&&&&                 &&&&&& & &&&&&&&&                  &&&&&    &&&&&&                    &&&&&&&&&&&&&&                    $$$$         ", 
+  "                    %%%    && &                  &&&&&    &&&&&&&                   &&&&&&  &&&&&&                     &&&&&&&&&&&&&                      &&&&&&&&&&&                      $$$$$        ", 
+  "                    %%%   &&                      &&&&&&&&&&&&&                      &&&&&&&&&&&&&&&                    &&&&&&&&&&                         &&&&&&&&&                       $$$$         ", 
+  "                    %%%                            &&&&&&&&&&&                       &&&&&&&&&&& &                        &&&&&&                              &&&&                         $$$$         ", 
+  "                    %%%%                             &&&&&&&                          & &&&&&&                               &                                                            $$$$$$        ", 
+  "                    %%%%                                &&                              &&    &                                                                                            $$$$$        ", 
+  "                    %%%%                                                                                                                                                                   $$$$         ", 
+  "                   %%%%                                                                                                                                                                    $$$$         ", 
+  "                    %%%%                                                                                                                                                      ''''''''     $$$$$        ", 
+  "                   %%%%%%                                                                                                                                                  '''''''''''     $$$$$        ", 
+  "                    %%%                                                                                                                                                       ''''''''     $$$$$        ", 
+  "                   %%%%                                                                                                                                                            '''     $$$$         ", 
+  "                    %%%%                                                                                                                                     '''''''''''''''''''''''''     $$$$         ", 
+  "                   %%%%%                                                                                                                                     '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%%%                                                                                       ((                              ((            '''''''''''''''''''''''''     $$$$$        ", 
+  "                    %%%%                                                                                  (((((((((                          ((((((((        '''''''''''''''''''''''''     $$$$         ", 
+  "                    %%% %              ((((((                           (((((((((                       ((((((((((((                      ((((((((((((                                     $$$$         ", 
+  "                    %%%             ((((((((((                        ((((((((((((                    (((((((((((((((                    ((((((((((((((                                    $$$$$        ", 
+  "                   %%%%           ((((((((((((((                    ((((((((((((((((                (((((((((( ((((((                  (((((((      ((((                                   $$$$         ", 
+  "                   %%%%          (((((((   ((((((                  (((((((   (((((( (              ((((((( ((((( (((((                ((((((         ((((                                  $$$$$        ", 
+  "                   %%%%%       (((((((       ((((                ((((((      ((((((((              ((((((((     (( ((((              (((((            ((((              (                  $$$$         ", 
+  "                    %%% %     ((((((          ((((              ((((((           ((((            (((((( (        (((((((            (((((             (((((            ((                  $$$$         ", 
+  "                    %%%      (((((             ((((            (((((            ( (((((         ((((((((          ((((((          ((((((               ((((         (((                    $$$$         ", 
+  "                   %%%%     (((((               ((((          (((((              ((((((      ( ((((((((            ((((((        (((((                  ((((       ((((                    $$$$$        ", 
+  "                   %%%%     ((((                ((((        ((((((               ((((((  (   (((((((                 (((((     ((((((                    (((((   ((((((                    $$$$$$       ", 
+  "                   %%%%%     ((                  (((((     ((((((                  ((((((  ((((((((                   ((((((((((((((                     (((((((((((((                     $$$$ $       ", 
+  "                    %%%%                          (((((( ((((((               )      (((((((((((((                   ( ((((((((((((                        (((((((((                       $$$$         ", 
+  "                    %%%                            (((((((((((        *        )    (((((((((((((                     (  ((((((((                           ((((((                         $$$$         ", 
+  "                    %%%                             ((((((((      ****         )    (( ((((((( (                            (((                                                            $$$$$        ", 
+  "                  %%%%%%                              ((((      *****         )))     ( (((( ((                                                                                            $$$$$        ", 
+  "                   %%%%%                                        *****         )))        (( (                                        ++++++++++++                    +  +                  $$$$         ", 
+  "                    %%%%                                      ******          )))                                                +++++++++++++++++++++++++++++++++++++  ++                 $$$$         ", 
+  "                    %%%%                                    *******           ))))          ,,,                                      +++++++++++++++++++++++++++++++++++++  ++            $$$$$         ", 
+  "                    %%%%                                   ******             ))))          ,,,                                            +++++++++++++++++++++++++++++++++ +             $$$$$        ", 
+  "                   %%%%%                                  ******               )))          ,,,      ------                                                    +++++++++++++++++           $$$$$        ", 
+  "                    %%%%                                *******                )))         ,,,,  ---------------------------------                                     + +++++++           $$$$         ", 
+  "                    %%%%                               ******                  )))         ,,,,      -----------------------------                                       ++++++ +          $$$$         ", 
+  "                    %%%%                             *******                   )))         ,,,       -----------------------------                                         +++++ +        $$$$$         ", 
+  "                   %%%%%                             ******                    ))))        ,,,                                                                              +++++          $$$$         ", 
+  "                   %%%%%                           ******                      ))))        ,,,                                                                              ++++++         $$$$         ", 
+  "                    %%%%                         *******                        )))        ,,,                                                                               +++++         $$$$$        ", 
+  "                    %%%%                        *******                         )))        ,,,                .. .                                                            ++++         $$$$         ", 
+  "                    %%%%                       ******                           )))       ,,,,             .  ... .................................                           ++++         $$$$$        ", 
+  "                    %%%%                     *******                            )))       ,,,,         ............................................                           ++++         $$$$         ", 
+  "                    %%%%                   ********                             ))))      ,,,           ...........................................                           ++++        $$$$$$        ", 
+  "                    %%%%                    *****                               ))))      ,,,        . .................                                                      ++++++       $$$$         ", 
+  "                    %%%%                 *******                                 )))      ,,,         .......  .   .                                                          ++++++       $$$$$        ", 
+  "                    %%%%               * ******                                  )))      ,,,        ..... .  .                                                               ++++++       $$$$         ", 
+  "                   %%%%%                *****                                    )))     ,,,,        .... .                                                                   ++++         $$$$         ", 
+  "                   %%%%%%            *******             ////////                )))     ,,,,       . ... .                                                                   ++++         $$$$         ", 
+  "                    %%%%            *******             ///////////////          )))     ,,,,        .....                                                                     +++++       $$$$         ", 
+  "                   %%%%%           ******              //////////////////////    ))))    ,,,        ......                                                                    ++++         $$$$         ", 
+  "                   %%%%%         *******             //////    //////////////    ))))    ,,,        ......                                                                    ++++         $$$$         ", 
+  "                    %%%%        *******           ////////           /////////    )))    ,,,       .....                                                                     +++++         $$$$         ", 
+  "                    %%%%       ******           // /////                   ////   )))    ,,,       .....                                                                     ++++++        $$$$         ", 
+  "                    %%%%      ******           ////////                    /////  )))   ,,,,      .. .....                    00000000000000000000000000000                   +++++        $$$$         ", 
+  "                    %%%%    *******          /  //////                      ////  )))   ,,,,         ....                     000000000000000000000000000000000              ++++ ++       $$$$         ", 
+  "                    %%%%    *****           / ///////                        ////       ,,,         ....                      00000000000000000000000000000                   +++          $$$$         ", 
+  "                    %%%%   *****             ///////                          ////      ,,,        .....                                                                      +++          $$$$         ", 
+  "                    %%%%    ***             //////                            /////     ,,,        ......                                                                   +++++ +        $$$$         ", 
+  "                     %%%    *               /////                              ////     ,,,          .....                                                                   +++++         $$$$         ", 
+  "                     %%%                  ///////                               ////    ,,,          ...                                                                    ++++++         $$$$         ", 
+  "                     %%%                  /////                                  ////   ,,,        .....                                                                    +++++          $$$$         ", 
+  "                     %%%                  //////                                 /////             .....                                                                 +++++++           $$$$         ", 
+  "                     %%%                    ///                                   ////             .....                           ++++++++++++++++               + ++++++ ++++ +          $$$$         ", 
+  "                     %%%                   ////                                    ///               ... .                         ++++++++++++++++++++++++++++++++++++++++++++++          $$$$         ", 
+  "                     %%%                   ////                                     ///            . .....                         +++++++++++++++++++++++++++++++++++++++++++++           $$$$         ", 
+  "                     %%%                 ///////                                   ////            ......                                   +++++++++++++++++++++++++++++++++ +            $$$$         ", 
+  "                     %%%                 /////                                     ////             ....                                                           ++ +++  +               $$$$         ", 
+  "                     %%%                 /////                                     ////              .....                                                          + +++                  $$$$         ", 
+  "                     %%%                ///////                                    ///               ......                                                                                $$$$         ", 
+  "                     %%%                / ////                                     ///               ..... .                                                                               $$$$         ", 
+  "                     %%%                 //////                                    ///               .......                                                                               $$$$         ", 
+  "                     %%%                 //////                                    ///                ......                                                                               $$$$         ", 
+  "                     %%%                //////                                    ////                ....... ... .                                                                        $$$$         ", 
+  "                     %%%                  ////                                    ////                 . ..........                                                                        $$$$         ", 
+  "                     %%%                  ///                                     ///                  . ..........................................                                        $$$$         ", 
+  "                     %%%                 //////                                   ///                      ...........................................                                     $$$$         ", 
+  "                     %%%                  //////                                  ///                     .........................................                                        $$$$         ", 
+  "                     %%%                   /////                                  ///                       .  ..                                                                          $$$$         ", 
+  "                     %%%                  ///////                                 ///                          ..                                                                          $$$$         ", 
+  "                                           //////                                ////                                                                                                      $$$$         ", 
+  "                                              /////                             /////                                                                                                      $$$$         ", 
+  "                                            / /////                            /////                                                                                                        $           ", 
+  "                                             / /////                         //////                                                                                                         $           ", 
+  "                                               ///////                      //////                                                                                                          $           ", 
+  "                                                 /////                     /////                                                                                                                        ", 
+  "                                                 ////// /                //////                                                                                                                         ", 
+  "                                                / /////// /             //////                                                                        1                                                 ", 
+  "                                                 /////////////         /////                                             1   1 1   11   11 1 111 1111 1 11 11  11                                       ", 
+  "                                                    ///////////////////////                                      11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                    /////////////////////                                        111111111111111111111111111111111111111111111111111111                                 ", 
+  "                                                    /  /   /////////////                                         11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                        /  /       ////                                          1111111111                                                                             ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-vertical-alignment-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/text-vertical-alignment-800-800-2.0-grid-reference.json
new file mode 100644
index 0000000..eb84e71
--- /dev/null
+++ b/tests/visual_tests/grids/text-vertical-alignment-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+  "", 
+  "9", 
+  "8", 
+  "4", 
+  "5", 
+  "7", 
+  "16", 
+  "6", 
+  "2", 
+  "10", 
+  "12", 
+  "13", 
+  "14", 
+  "11", 
+  "3", 
+  "15", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                !                                                                                                       ", 
+  "                                              !!!!                                           !  !                                                                                                       ", 
+  "                                             !!!!!!                                           !  !!!!                                      !                                                            ", 
+  "                                           !!!!!!!!!                                          !!!!!! !                                     !!!!!!                                                       ", 
+  "                                          !!!!!!!!!!!                                      !!!!!!!!!!!                                  !!! !!!!!!                                                      ", 
+  "                                        !!!!!!!!!!!!!!!                                   !!!!!!!!!!!!!!                                !! !!!!!!!                                                      ", 
+  "                                      !!!!!!!!!!!!!!!!!!                                   !!!!!!!!!!!!! !                             ! !!!!!!!!!!!!!                             !!                   ", 
+  "                                     !!!!!!!!!!!!!!!!!!!!                            !    !!!!!!!!!!!!!!!!                            ! !!!!!!!!!!!!!!                           !!!!                   ", 
+  "                                   !!!!!!!!!!!! !!!!!!!!!!                            ! !!!!!!!!!!!!!!!!!!!!                         ! !!!!!!!!!!!!!!!!!                        !!!!!!                  ", 
+  "                                  !!!!!!!!!!!!   !!!!!!!!!!!                          !!!!!!!!!!!!!!!!!!!!!! !                  !  ! !!!!!!!!!!!!!!!!!! !                      !!!!!!!!                 ", 
+  "                                !!!!!!!!!!!!       !!!!!!!!!!                      !!!!!!!!!!!!!!!!!!!!!!!!!!!!                 !!! !!!!!!!!!!!!!!!!!!!!!                    !!!!!!!!!!!                ", 
+  "                               !!!!!!!!!!!          !!!!!!!!!!                    ! !!!!!!!!!!!!!! !!!!!!!!!!! !                 !!!!!!!!!!!!!!!!!!!!!!!!!                  !!!!!!!!!!!                 ", 
+  "                             !!!!!!!!!!!!            !!!!!!!!!! !               !  !!!!!!!!!!!!  !!! !!!!!!!!!!!                 !!!!!!!!!!!  !  !!!!!!!!!!               !!!!!!!!!!!                   ", 
+  "                            !!!!!!!!!!!               !!!!!!!!!!!              ! !!!!!!!!!!!! !!! ! !  !!!!!!!!!!!!            !!!!!!!!!!! !  !   !!!!!!!!!!             !!!!!!!!!!!                    ", 
+  "                           !!!!!!!!!!!                  !!!!!!!!!!!         !  !!!!!!!!!!!!!!       !  !!!!!!!!!!! !         !!!!!!!!!!!!!! !!     !!!!!!!!!!           !!!!!!!!!!                      ", 
+  "                           !!!!!!!!!                     !!!!!!!!!! !        !!!!!!!!!!!! !        !!!!! !!!!!!!!!!!        !!!!!!!!!!!!  ! !!      !!!!!!!!!!!       !!!!!!!!!!!                       ", 
+  "                           !!!!!!!!                       !!!!!!!!!! !!  !!! !!!!!!!!!!!! !!       !  !  !!!!!!!!!!!!!!! !! !!!!!!!!!! !  !  !        !!!!!!!!!!     !!!!!!!!!!!                        ", 
+  "                          !!!!!!!                           !!!!!!!!!!! !!! !!!!!!!!!!!!!! !        !!  !  !!!!!!!!!!! ! !!!!!!!!!!!!   !!             !!!!!!!!!!   !!!!!!!!!!                          ", 
+  "                        !!!  !!!                             !!!!!!!!!!!! !!!!!!!!!!! ! !!                 ! !!!!!!!!!!! !!!!!!!!!!! ! !                !!!!!!!!!!!!!!!!!!!!!                           ", 
+  "                       !!!                                    !!!!!!!!!! !!!!!!!!!!!  !!!                 !  !!!!!!!!!!!!!!!!!!!!! ! !!                  !!!!!!!!!!!!!!!!!!!                            ", 
+  "                      !!                                       !!!!!!!!!!!!!!!!!!!!                         !  !!!!!!!!!!!!!!!!!! !!                       !!!!!!!!!!!!!!!                              ", 
+  "                                                                 !!!!!!!!!!!!!!!! !!!!                         ! !!!!!!!!!!!!!!! !                          !!!!!!!!!!!!!                               ", 
+  "                                            ##                    !!!!!!!!!!!!! !!              ##            !  !!!!!!!!!!!!! !!                            !!!!!!!!!!!                                ", 
+  "                                          #####                   !!!!!!!!!!!!!  !        #   #####   #          ! !!!!!!!!!!                                  !!!!!!!                                  ", 
+  "                                        ########                  !!!!!!!!!!! ! !          # ######  ##         ! !!!!!!!!!  ! !             ###                !!!!!                     $$$$$$        ", 
+  "                                       ##########                !!!  !!!!!!   !            ##########  #         !  !!!!! !  !          ########                !!                       $$$$$$        ", 
+  "                                     ##############                  !!!!! !!           ############## #           !   !!  !             #########                                #       $$$$$$        ", 
+  "                                    ################                  !     !          # ##############             !   !            ### ##########                             ####      $$$$$$        ", 
+  "                                  ###################                 !!!            ######################                           # ############                           #####      $$$$$$        ", 
+  "                                 #####################                           #  # ######################                          ################                        #######    $$$$$$$        ", 
+  "                     %         ############  ###########                         #  ############ ##########                         ###################                     ##########    $$$$$$        ", 
+  "                     %       ############      ##########                         ############  ###############                    #####################                   ###########   $$$$$$$        ", 
+  "                     %      ############        ##########                     ## ############  ## ############                   ########### ############               ###########     $$$$$$$        ", 
+  "                     %    ############           ###########                  ############## ## ## ############              ### #############  ###########             ###########       $$$$$$        ", 
+  "                     %   ###########               ##########                # ###########  # ## # # ##############           ############   #  # ##########           ##########        $$$$$$$        ", 
+  "                     %    #########                 ##########               ############ #  # ## #  # ########## #            ########## # ## #  ############       ###########          $$$$$$        ", 
+  "                     %     ######                    ##########           ############# # ##        #  ##############      #############  ###  #  # ###########     ###########          $$$$$$$$$      ", 
+  "                  %%%%%%%  #####                      ###########        # ###############             #  ########## #    ############### #      ##   ##########  ###########            $$$$$$$  $     ", 
+  "                  %%%%%%%   ##                          ##########       ###########  # ##            #  ############ #### ###########  ###            #####################              $$$$$$        ", 
+  "                  %%%%%%%                                ########## #  ############ # ###                # ############  ########### #                  ##################               $$$$$$$$$$$$   ", 
+  "                  %%%%%%%                                 ############ ########### #                    # ### ####################### ##                  ###############                 $$$$$$        ", 
+  "                  %%%%%%%                                 ######################  #                       #  ####################   #                      #############                  $$$$$$$$      ", 
+  "                 %%%%%%%%                                 # ##################### ##                       #   ################# #  #                       ##########                 $$$$$$$$$  $     ", 
+  "               %% %%%%%%%                                 ##  ################# ##                          # ## ################ ##                          #######                     $$$$$$        ", 
+  "                %%%%%%%%%                                 #  ###############  # ##                            #  #############  #                              #####                      $$$$$$  $     ", 
+  "                  %%%%%%%                                    # ############&  ##                               & # ######### #  #                               ##                     $$$$$$$$$$$      ", 
+  "                %%%%%%%%%                                    #  # ####### #& #                             && &&#  # ######   ##                                                          $$$$$$  $     ", 
+  "                %%%%%%%%%                                     ## ########&####                           && &&&&&&#    #####               &&&&&&&&&&&                                    $$$$$$$$$     ", 
+  "               % %%%%%%%%              &&&&&&&                   #  ### &#&&&&&&&&&                   && &&&&&&&&&&#                    &&&&&&&&&&&&&&&                                  $$$$$$$        ", 
+  "               % %%%%%%%%            &&&&&&&&&&                    &&#&&&##&&&&&&&&   &              & &&&&&&&&&&&&&&&                 &&&&&&&&&&&&&&&&&                                  $$$$$$        ", 
+  "                 %%%%%%%%          &&&&&&&&&&&&&               &&  &&###&&&&&&&&&&&  &&              &&&&&&&&&&&&&&&&&  &&             &&&&&&&&&&&&&&&&&&                                $$$$$$$ $      ", 
+  "               %%%%%%%%%%        &&&&&&&&&&&&&&&&               &  &&&&&&&&&&&&&&&&&&  &          &&&&&&&&&&&&&&&&&&&&&&&           & &&&&&&&&&&&&&&&&&&&&                                $$$$$$ $      ", 
+  "                  %%%%%%%      &&&&&&&&&&&&&&&&&&&           & & &&&&&&&&&&&&&&&&&&&& &            &&&&&&&&&&&&&&&&&&&&&&&         & &&&&&&&&&&&&&&&&&&&&&&                              $$$$$$$ $      ", 
+  "                  %%%%%%%     &&&&&&&&&&&&&&&&&&&&&          && &&&&&&&&&&&&&&&&&&&&&&          &&&&&&&&&&&&&&& &&&&&&&&&&      &&&&&&&&&&&&&&&    &&&&&&&&&                             $$$$$$$ $      ", 
+  "                  %%%%%%%    &&&&&&&&&&&& &&&&&&&&&&&        &&&&&&&&&&&&&  &&&&&&&&&&&&&     &&&&&&&&&&&&&&& &&&&&&&&&&&&   &  &&&&&&&&&&&&&       &&&&&&&&        &                     $$$$$$ $      ", 
+  "                %%%%%%%%%   &&&&&&&&&&&     &&&&&&&&&      && &&&&&&&&&& &  && &&&&&&&&  &  && &&&&&&&&&&&  &  &&&&&&&&&&&&&& && &&&&&&&&&&          &&&&&&&&      &&                  $$$$$$$$$        ", 
+  "               %  %%%%%%%  &&&&&&&&&&        &&&&&&&& & &&  &&&&&&&&&&&  & &&   &&&&&&&& &&& &&&&&&&&&&& &  &  & &&&&&&&&&&  &&&&&&&&&&&&&            &&&&&&&&   &&&&&                    $$$$$$  $     ", 
+  "                   %%%%%%   &&&&&&&           &&&&&&&& &  &&&&&&&&&&& &   &  &   &&&&&&&&& &&&&&&&&&&&& &&& &  &&  &&&&&&&&&&&&&&&&&&&&&& &            &&&&&&&&&&&&&&&&                   $$$$$$$$$     ", 
+  "                %%%%%%%%%   &&&&&&             &&&&&&&&&&&&&&&&&&&&&&  &      &&&&&&&&&&&&&&&&&&&&&&&&  &&&       & &&&&&&&&&&&&&&&&&&&&  &            &&&&&&&&&&&&&&&&&                 $$$$$$$        ", 
+  "                   %%%%%%  && &&&               &&&&&&&&&&&&&&&&&&&&  &        & &&&&&&&&&&&&&&&&&&& &&          &   &&&&&&&&&&&&&&&&& &&&&             &&&&&&&&&&&&&&&&                 $$$$$$$$$$     ", 
+  "                %%%%%%%%% &&   &                &&&&&&&&&&&&&&&&&&&  &         &&&&&&&&&&&&&&&&&&&&&& &             &&&&&&&&&&&&&&&&& & &&               &&&&&&&&&&&&&                   $$$$$$$        ", 
+  "               %   %%%%%%&&                      &&&&&&&&&&&&&&&&  &&           &  &&&&&&&&&&&&&&&  &&             &  &&&&&&&&&&&&&&  &  &                &&&&&&&&&&&                    $$$$$$$        ", 
+  "               %   %%%%&&&                        &&&&&&&&&&&&&&&                  & &&&&&&&&&&&&&  &&                & &&&&&&&&&& && &                     &&&&&&&                      $$$$$$$$$$     ", 
+  "                %  %%%%%&                           &&&&&&&&&  &&&                &  &&&&&&&&&&&  && &               &     &&&& &   &&                          &                         $$$$$$        ", 
+  "                %% %%%%%%                             &&&&&                             &&&& &  &   &                 &   &&&&&  &&                                           ''''''''''  $$$$$$$ $     ", 
+  "               %%  %%%%%%                                                               &  &  & &                                                                             ''''''''''$$$$$$$$$ $     ", 
+  "                  %%%%%%%                                                               &&&   &                                                                        '''''''''''''''''  $$$$$$$ $     ", 
+  "                %%%%%%%%%                                                                                                                                              ''''''''''''''''' $$$$$$$$$$     ", 
+  "                   %%%%%%                                                                                                                                                     '''''''''' $$$$$$$$$      ", 
+  "                %%%%%%%%%                                                                                                                                    '''''''''''''''''''''''''''  $$$$$$$$$     ", 
+  "                   %%%%%%                                             (                                      ((                                              ''''''''''''''''''''''''''' $$$$$$$        ", 
+  "                 % %%%%%%                                                 ((  ((                            (((( ((                           (((((((        '''''''''''''''''''''''''''  $$$$$$        ", 
+  "                 % %%%%%%                                          ( ( ( ((((((((  ((                   ((((((((((((                       (((((((((((       ''''''''''''''''''''''''''' $$$$$$$$$$     ", 
+  "                   %%%%%%            (((((((((                      ( (((((((((((( (                 ((((((((((((((( ((                  (((((((((((((((     ''''''''''''''''''''''''''' $$$$$$$        ", 
+  "                %% %%%%%%          (((((((((((((                  ( (((((((((((((((                 (((((((((((((((((((                ((((((((((((((((((    '''''''''''''''''''''''''''$ $$$$$$        ", 
+  "                % %%%%%%%        ((((((((((((((((                ( (((((((((((((((((              ( ((((((((((((((((((              ( (((((((((((((((((((                                $$$$$$$$$$     ", 
+  "                  %%%%%%%       ((((((((((((((((((               ((((((((((((((((((((            ( (((((((((((((((((((((           ( (((((((((((((((((((((                (               $$$$$$        ", 
+  "                %%%%%%%%%     (((((((((((((((((((((           ((((((((((((((((((((((( (         ( (((((((((((((((((((((((         (((((((((((((((((((((((((              (((             $$$$$$$$$$     ", 
+  "                   %%%%%%    ((((((((((((((((((((((          ( (((((((((((( (((((((((( (      (  (((((((((((((( ((((((((((         (((((((((( (  (  ((((((((           (((               $$$$$$$        ", 
+  "                %%%%%%%%%   (((((((((((     ((((((((        ((((((((((((   ((( (((((((((  (  ((((((((((((( (((  ( ((((((((( (  ( (((((((((((  (  (  ((((((((       (( (((                 $$$$$$        ", 
+  "                   %%%%%%  ((((((((((        ((((((((       (((((((((((   (  ((((((((((( (( ( (((((((((( ((  (  ( ((((((((((((( ((((((((((( (  (  (  ((((((((    (((((((                 $$$$$$$$$$     ", 
+  "                   %%%%%%  (((((((((          (((((((    ( (((((((((( ((  (((((  ((((((((( (((((((((((( ( ((((  (( (((((((((( ((((((((((( (((  (      (((((((((((((((((                 $ $$$$$$        ", 
+  "                %%%%%%%%%   ((((((            (((((((((  ((((((((((( ( (((      ((((((((((((((((((((((  ((      (   ((((((((((((((((((((   ((          ((((((((((((((((                  $$$$$$$$$$$    ", 
+  "                   %%%%%%    ((((              ((((((((((((((((((((   ( ))      ( ((((((((((((((((((  (  (       ( ( (((((((((((((((((  ( (            (((((((((((((((((                 $$$$$$$  $$$   ", 
+  "              % %%%%%%%%%     ((                (((((((((((((((((((( (())        (((((((((((((((((((  ((           (((((((((((((((((((   (   *  *  * ***(**(**(((((((((                   $$$$$$  $ $   ", 
+  "              % %  %%%%%%                       ((((((((((((((((())((())        ( ((((((((((((((((  (               ((((((((((((((((  ( (    *  *  * *  * (*((*(*(**(****                $$$$$$$ $$ $   ", 
+  "              % %  %%%%%%                         ((((((((((((( ())))))         (  (((((((((((((( ( ((               ((((((((((((((( * (     *  * * *   *  *((*(*((* *  *               $ $$$$$$$       ", 
+  "               %%%%%%%%%%                          (((((((((((()(()))         +++++( (((((((((((  (                   (  ((((((( ( ( **********************   *(*  **   * **              $$$$$$$$$     ", 
+  "                   %%%%%%                           (((((((((()))()))       +++++++  (  (((((( ((                        (  (((  (  (************************************* **            $$$$$$$        ", 
+  "                %%%%%%%%%                              ((( (())())))))       ++++++ (  (  (, (  (                       (( (( (  (   *************************************** **           $$$$$$        ", 
+  "                   %%%%%%                              ( ( )((())))))        ++++++    (  ,,,,,,,                        (((   ((    *****************************************   *       $$$$$$$$$$     ", 
+  "                   %%%%%%                               ()))))))))))         ++++++       ,,,,,,,    ------------------------        ******************************************   *      $$$$$$$        ", 
+  "                %%%%%%%%%                               )))))))))))          ++++++       ,,,,,,     -----------------------------   *********************************************      $ $$$$$$$$$     ", 
+  "                   %%%%%%                              ))))))))))            +++++++      ,,,,,,     -----------------------------        * ** *  *  ****************************  *     $$$$$$$$ $     ", 
+  "                %%%%%%%%%                            )))))))))))             +++++++      ,,,,,,     -----------------------------              ** ***       * * * ** *************       $$$$$$$ $     ", 
+  "                   %%%%%%                           )))))))))))               ++++++      ,,,,,,     -----------------------------...   ..           *            * * * **********     $ $$$$$$$ $$     ", 
+  "                   %%%%%%                          ))))))))))                 ++++++     ,,,,,,,     -----------------------------   .  ..                    *           ********  **    $$$$$$$       ", 
+  "                %%%%%%%%%                        )))))))))))                  ++++++     ,,,,,,,              . .  .--------------.... . .                               * *********      $$$$$$$       ", 
+  "                   %%%%%%                       )))))))))))                   ++++++     ,,,,,,,       ..  .. . ...     . .  .  . . ...............                       * *******    $$$$$$$$$$       ", 
+  "                   %%%%%%                      ))))))))))                     +++++++    ,,,,,,      ..  .   ......................................                        * ******** *   $$$$$$        ", 
+  "                %%%%%%%%%                    )))))))))))                      +++++++    ,,,,,,       .............................................                        * ****** * *  $$$$$$$$$$     ", 
+  "                   %%%%%%                   )))))))))))                        ++++++    ,,,,,,    .   ............................................                        ******** * * $ $$$$$$        ", 
+  "                %%%%%%%%%                  ))))))))))     / //                 ++++++    ,,,,,,     ...............................................                          *********  $ $$$$$$$$$     ", 
+  "                % %%%%%%%                )))))))))))      /      / ///         ++++++   ,,,,,,,      ..............................................                         ********      $$$$$$$ $     ", 
+  "                % %%%%%%%               )))))))))))  ///  /  /   /   //  /     ++++++   ,,,,,,,   .. ............................................                           ***********   $$$$$$$ $     ", 
+  "                % %%%%%%%              ))))))))))    /  / ////   ////// / /    +++++++  ,,,,,,      ............. .  .   . . ...... ...  .  .                               ********      $$$$$$ $$     ", 
+  "                   %%%%%%            )))))))))))   /    ////////////  / / /    +++++++  ,,,,,,    .........     .  ..                                                       ********      $$$$$$        ", 
+  "                %%%%%%%%%           ))))))))))    / /  ////////////////////    +++++++  ,,,,,, . . ........ .   .          .                                                 **********   $$$$$$  $     ", 
+  "                   %%%%%%          ))))))))))    /  / ////////////////////////  ++++++  ,,,,,, . .  .........   .                                                           *******    $$$$$$$$$  $     ", 
+  "                   %%%%%%        )))))))))))   / ////////////////////////////// ++++++  ,,,,,, ...  ........                                                                *******       $$$$$$$$$     ", 
+  "                %%%%%%%%%       ))))))))))      / ///////////////////////////// ++++++ ,,,,,,,    ........                                                                   **********  $$$$$$$        ", 
+  "                   %%%%%%      ))))))))))       ////////////////////////////////++++++ ,,,,,,,      .........                 00000000000000000000000000000                 *******     $ $$$$$$$$$     ", 
+  "                %%%%%%%%%    )))))))))))      / /////////////  /  //////////////+++++++,,,,,,   ..........                    00000000000000000000000000000                  *********  $ $$$$$$        ", 
+  "                %  %%%%%%   ))))))))))    ///  ////////// /    ///// /  ////////+++++++,,,,,,      ........ .                 000000000000000000000000000000000000        *********       $$$$$$  $     ", 
+  "                   %%%%%%  ))))))))))       //////////// // /  /      ///////////++++  ,,,,,,      .......                    000000000000000000000000000000000000           ******      $$$$$$$$$$     ", 
+  "                 % %%%%%% ))))))))))     ///////////////                   ////////    ,,,,,,   ...........                   00000000000000000000000000000              *************  $ $$$$$$        ", 
+  "                 % %%%%%%  )))))))        //////////////                   /////////  ,,,,,,,      ...... .                   00000000000000000000000000000                 *******     $ $$$$$$        ", 
+  "                 % %%%%%%   )))))          /////////                         /////// /,,,,,,,   ......... .                   000000000000000000                            **********   $$$$$$$        ", 
+  "                 % %%%%%%   ))))       /// //////////                        /////////,,,,,,,      ........                                               *          *    ********  ***   $$$$$$$$$     ", 
+  "                 % %%%%%%    )            ///////   /                         ////////,,,,,,       ......                                *  ** **     *              *   * *******  * *$ $$$$$$$        ", 
+  "                   %%%%%%              // ///////                              //////// ,,,,    ...........                        ***   *  * *  * ****** * *** ***  *     ********** *   $$$$$$$ $     ", 
+  "                   %%%%%%                /////////                             ////////            ...... .                        *****************************   ***************      $ $$$$$$$ $     ", 
+  "                %%%%%%%%%            /  / ////// /                              ////////           ...... .                        ************************************************    $$$$$$$$$$ $     ", 
+  "                %  %%%%%%            / / /////// /                               /////          ...........                        ********************************************** **    $ $$$$$$$$      ", 
+  "                  %%%%%%%            //   ///////                                 //////           .......                         **********************************************       $ $$$$$$        ", 
+  "                %%%%%%%%%            ///  //////                                  //////         ..........                        ********************************************  *       $$$$$$$$$      ", 
+  "                %  %%%%%%               ///////////                               //////        . . ...... .                       ********************************************         $$$$$$$$  $     ", 
+  "                %  %%%%%%                ///////                                  //////        .   ...... .                               * * *   ***  ****************    *  *          $$$$$$$$      ", 
+  "                 %%%%%%%%             ////////////                                //////         . ..........                              * * *    *   *  * *    ***   *** * **         $$$$$$$        ", 
+  "                   %%%%%%                //////                                  ///////            ........ .                              *   *   *   *  * *   *  *  *     *          $ $$$$$$        ", 
+  "              %%%%%%%%%%%             /  ///////                                 ///////           ........... .        .         .              ** *   ** * ***  ***  *                 $$$$$$$        ", 
+  "                %  %%%%%%              //////// /                                //////           .  .......... .. ... ...       ... ...  ...                                             $$$$$$        ", 
+  "                %  %%%%%%               /////// /                                //////              ........... ..................................                                     $$$$$$$$        ", 
+  "                 %%%%%%%%              //////////                                //////            ..  ............................................                                      $$$$$$$        ", 
+  "                   %%%%%%             / ///////                                 ///////               .............................................  .....                                $$$$$$        ", 
+  "                   %%%%%%               /////////                              ////////              .  ..................................................                               $$$$$$$        ", 
+  "                   %%%%%%              ////////////                            ////////              .   ..........................................                                     $ $$$$$$        ", 
+  "                   %%%%%%                 /////////                            ///////                   . ........................................                                       $$$$$$        ", 
+  "                   %%%%%%                 ////////                            / //////                    .. .....................................                                        $$$$$$        ", 
+  "                                        // /////////                         / ///////                      .  .  . .  . .  .  .  . .  .  .                                               $$$$$$        ", 
+  "                                           ///////////                   /  //////////                         .  . .  . .  .  .  . .  .  .                                               $$$$$$        ", 
+  "                                          // /////////                   // //////////                         ....  ... ... .. ... .  .  .                                                 $$          ", 
+  "                                          / ///////// /                  ////////////                                                                                                       $$          ", 
+  "                                          /  //////////                 ////////////                                                                                                        $$          ", 
+  "                                           /  ///////// ///       /    ////////////                                                                                                         $$          ", 
+  "                                             /  //////////// / / /// ////////////  /                                                                                                        $$          ", 
+  "                                            /   ///////////////// / /////////////  //                                                    11111111111111111111111111                         $$          ", 
+  "                                               ////////////////////////////////  /                               11111111111111111111111111111111111111111111111111                         $$          ", 
+  "                                              /  //////////////////////////// /  //                              111111111111111111111111111111111111111111111111111111111                              ", 
+  "                                                ////////////////////////////// /                                 111111111111111111111111111111111111111111111111111111111                              ", 
+  "                                                   ////////////////////////  / /                                 11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                /   /   ///////////////// /  /                                   11111111111111111111111111111111111111111111111111                                     ", 
+  "                                                     //// /  / /////////  ///                                    11111111111111111111111111111111111111                                                 ", 
+  "                                                          /  / /  / / / /                                                                                                                               ", 
+  "                                                          //// /  / /   ///                                                                                                                             ", 
+  "                                                               ///  /                                                                                                                                   ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        ", 
+  "                                                                                                                                                                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-alpha-broken-assoc-alpha-gdal-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-alpha-broken-assoc-alpha-gdal-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-alpha-broken-assoc-alpha-gdal-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-alpha-gdal-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-alpha-gdal-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-alpha-gdal-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-alpha-gradient-gdal-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-alpha-gradient-gdal-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-alpha-gradient-gdal-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-edge-alignment-gdal1-255-257-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-edge-alignment-gdal1-255-257-2.0-grid-reference.json
new file mode 100644
index 0000000..a9b8956
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-edge-alignment-gdal1-255-257-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-edge-alignment-gdal1-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-edge-alignment-gdal1-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-edge-alignment-gdal1-256-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-edge-alignment-gdal2-255-257-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-edge-alignment-gdal2-255-257-2.0-grid-reference.json
new file mode 100644
index 0000000..a9b8956
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-edge-alignment-gdal2-255-257-2.0-grid-reference.json
@@ -0,0 +1,73 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-edge-alignment-gdal2-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-edge-alignment-gdal2-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-edge-alignment-gdal2-256-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-edge-gdal-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-edge-gdal-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-edge-gdal-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-edge-gdal-969-793-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-edge-gdal-969-793-2.0-grid-reference.json
new file mode 100644
index 0000000..924d741
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-edge-gdal-969-793-2.0-grid-reference.json
@@ -0,0 +1,207 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-edge-rgba-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-edge-rgba-500-100-1.0-grid-reference.json
new file mode 100644
index 0000000..dcf3d34
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-edge-rgba-500-100-1.0-grid-reference.json
@@ -0,0 +1,33 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             ", 
+  "                                                                                                                             "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-edge-rgba-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-edge-rgba-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-edge-rgba-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-edge-rgba-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-edge-rgba-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-edge-rgba-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-rgb-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-rgb-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-rgb-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-rgb-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-rgb-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-rgb-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-rgba-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-rgba-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-rgba-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-rgba-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-rgba-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-rgba-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-tolerance-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-tolerance-512-512-1.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-tolerance-512-512-1.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-nodata-tolerance-512-512-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-nodata-tolerance-512-512-2.0-grid-reference.json
new file mode 100644
index 0000000..53162f3
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-nodata-tolerance-512-512-2.0-grid-reference.json
@@ -0,0 +1,136 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                ", 
+  "                                                                                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-opaque-edge-gdal-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-opaque-edge-gdal-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-opaque-edge-gdal-256-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-opaque-edge-gdal-969-793-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-opaque-edge-gdal-969-793-2.0-grid-reference.json
new file mode 100644
index 0000000..924d741
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-opaque-edge-gdal-969-793-2.0-grid-reference.json
@@ -0,0 +1,207 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-opaque-edge-gdal2-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-opaque-edge-gdal2-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-opaque-edge-gdal2-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-opaque-edge-gdal2-969-793-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-opaque-edge-gdal2-969-793-2.0-grid-reference.json
new file mode 100644
index 0000000..924d741
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-opaque-edge-gdal2-969-793-2.0-grid-reference.json
@@ -0,0 +1,207 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-opaque-edge-raster2-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-opaque-edge-raster2-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-opaque-edge-raster2-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-opaque-edge-raster2-969-793-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-opaque-edge-raster2-969-793-2.0-grid-reference.json
new file mode 100644
index 0000000..924d741
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-opaque-edge-raster2-969-793-2.0-grid-reference.json
@@ -0,0 +1,207 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   ", 
+  "                                                                                                                                                                                                                                                   "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-reprojection-1-250-250-1.0-grid-reference.json b/tests/visual_tests/grids/tiff-reprojection-1-250-250-1.0-grid-reference.json
new file mode 100644
index 0000000..4f1f36a
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-reprojection-1-250-250-1.0-grid-reference.json
@@ -0,0 +1,71 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-reprojection-1-250-250-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-reprojection-1-250-250-2.0-grid-reference.json
new file mode 100644
index 0000000..4f1f36a
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-reprojection-1-250-250-2.0-grid-reference.json
@@ -0,0 +1,71 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-reprojection-2-250-250-1.0-grid-reference.json b/tests/visual_tests/grids/tiff-reprojection-2-250-250-1.0-grid-reference.json
new file mode 100644
index 0000000..4f1f36a
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-reprojection-2-250-250-1.0-grid-reference.json
@@ -0,0 +1,71 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-reprojection-2-250-250-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-reprojection-2-250-250-2.0-grid-reference.json
new file mode 100644
index 0000000..4f1f36a
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-reprojection-2-250-250-2.0-grid-reference.json
@@ -0,0 +1,71 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               ", 
+  "                                                               "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff-resampling-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/tiff-resampling-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..1a15981
--- /dev/null
+++ b/tests/visual_tests/grids/tiff-resampling-600-400-2.0-grid-reference.json
@@ -0,0 +1,108 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      ", 
+  "                                                                                                                                                      "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff_colortable-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/tiff_colortable-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/tiff_colortable-256-256-1.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff_colortable-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/tiff_colortable-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/tiff_colortable-256-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff_colortable_custom_nodata-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/tiff_colortable_custom_nodata-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/tiff_colortable_custom_nodata-256-256-1.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/tiff_colortable_custom_nodata-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/tiff_colortable_custom_nodata-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/tiff_colortable_custom_nodata-256-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/vrt_colortable-256-256-1.0-grid-reference.json b/tests/visual_tests/grids/vrt_colortable-256-256-1.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/vrt_colortable-256-256-1.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/vrt_colortable-256-256-2.0-grid-reference.json b/tests/visual_tests/grids/vrt_colortable-256-256-2.0-grid-reference.json
new file mode 100644
index 0000000..e023c5e
--- /dev/null
+++ b/tests/visual_tests/grids/vrt_colortable-256-256-2.0-grid-reference.json
@@ -0,0 +1,72 @@
+{
+ "keys": [
+  ""
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                ", 
+  "                                                                "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/whole-centroid-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/whole-centroid-600-400-1.0-grid-reference.json
index 11c916a..0d3a340 100644
--- a/tests/visual_tests/grids/whole-centroid-600-400-1.0-grid-reference.json
+++ b/tests/visual_tests/grids/whole-centroid-600-400-1.0-grid-reference.json
@@ -37,7 +37,7 @@
   "                                       !    !        !!                    !                                                                          ", 
   "                                          !             !                   !                                                                         ", 
   "                                       ! !                                !  !                                                                        ", 
-  "                                       !!                 !                   !                                                                       ", 
+  "                                       !!                 !               !   !                                                                       ", 
   "                                                                                !                                                                     ", 
   "                                                           !                     !                                                                    ", 
   "                                                           !                      !                                                                   ", 
@@ -50,7 +50,7 @@
   "                                                           !         !!!!!           !                                                                ", 
   "                                                          !!   !                     !                                                                ", 
   "                                                         !     !                                                                                      ", 
-  "                                                                !                                                                                     ", 
+  "                                                         !      !                                                                                     ", 
   "                                                                !                      !                                                              ", 
   "                                                           !   ! !                      !                                                             ", 
   "                                                                   !                     !                                                            ", 
diff --git a/tests/visual_tests/grids/whole-centroid-600-400-2.0-grid-reference.json b/tests/visual_tests/grids/whole-centroid-600-400-2.0-grid-reference.json
new file mode 100644
index 0000000..69a4447
--- /dev/null
+++ b/tests/visual_tests/grids/whole-centroid-600-400-2.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+  "", 
+  "1"
+ ], 
+ "data": {}, 
+ "grid": [
+  "                                                                    !!!!!                                                                             ", 
+  "                                                            !!!!!!      !!                                                                            ", 
+  "                                                            !            !                                                                            ", 
+  "                                                            !             !!                                                                          ", 
+  "                                                            !                !!!!                                                                     ", 
+  "                                                   !     !!!!                     !!                                                                  ", 
+  "                                             !!    ! !!  !                        !                                                                   ", 
+  "                                            ! !    !   !!!                       !                                                                    ", 
+  "                                           !   !   !     !                        !                                                                   ", 
+  "                                           !    ! !                               !                                                                   ", 
+  "                                          !     ! !                               !                                                                   ", 
+  "                                   !!!!!!!       !!                               !                                                                   ", 
+  "                                  !                                                !                                                                  ", 
+  "                                  !                                           !!!!  !                                                                 ", 
+  "                                  !                                         !!    !!!!                                                                ", 
+  "                                   !                                      !!                                                                          ", 
+  "                                   !                                     !!                                                                           ", 
+  "                                                                        !!                                                                            ", 
+  "                                   !!                                   !                                                                             ", 
+  "                                 !!                                      !                                                                            ", 
+  "                                 !                                        !                                                                           ", 
+  "                                  !                                        !                                                                          ", 
+  "                                   !                                      !                                                                           ", 
+  "                                   !                                     !                                                                            ", 
+  "                                   !                                     !                                                                            ", 
+  "                                   !                                     !                                                                            ", 
+  "                                   !                                     !                                                                            ", 
+  "                                   !          !! !!                      !                                                                            ", 
+  "                                   !!!       !     !!                                                                                                 ", 
+  "                                       !!   !        !!                   !!                                                                          ", 
+  "                                          !!           !!!                  !                                                                         ", 
+  "                                       ! !               !                !  !                                                                        ", 
+  "                                       !!                 !               !   !!                                                                      ", 
+  "                                       !                  !                     !                                                                     ", 
+  "                                                           !                     !                                                                    ", 
+  "                                                           !                      !                                                                   ", 
+  "                                                            !       !!!!!!!        !                                                                  ", 
+  "                                                            !      !!!!!!!!!       !                                                                  ", 
+  "                                                             !     !!!!!!!!!       !                                                                  ", 
+  "                                                             !    !!!!!!!!!!!       !                                                                 ", 
+  "                                                       !          !!!!!!!!!!!       !                                                                 ", 
+  "                                                       !      !   !!!!!!!!!!!       !                                                                 ", 
+  "                                                           !! !   !!!!!!!!!!         !                                                                ", 
+  "                                                         !!!   !   !!!!!!!!!         !                                                                ", 
+  "                                                         !     !    !!!!!!!          !!                                                               ", 
+  "                                                         !      !    !!!!!            !!                                                              ", 
+  "                                                               !!                      !                                                              ", 
+  "                                                           !   ! !                      !                                                             ", 
+  "                                                                  !!                     !                                                            ", 
+  "                                                                    !                     !                                                           ", 
+  "                                                                     !!                     !!!!!                                                     ", 
+  "                                                                       !  !                       !!!                                                 ", 
+  "                                                                        !!                          !                                                 ", 
+  "                                                                          !                         !                                                 ", 
+  "                                                                           !!                                                                         ", 
+  "                                                                             !                     !                                                  ", 
+  "                                                                              !!                    !!                                                ", 
+  "                                                                                !                     !!                                              ", 
+  "                                                     !                           !                      !!                                            ", 
+  "                                            !    !!!!!                            !!                      !                                           ", 
+  "                                            !!!!      !                       !     !                       !                                         ", 
+  "                                            !         !                       !      !!                      !!                                       ", 
+  "                                            !         !                             !! !                       !!                                     ", 
+  "                                            !          !                             !  !!                       !!                                   ", 
+  "                                            !          !                               !! !                        !                                  ", 
+  "                                             !         !                                   !!             !!       !                                  ", 
+  "                                             !         !                                     !            !  !!!!   !                                 ", 
+  "                                             !         !                                      !!         !       !   !                                ", 
+  "                                                       !                                       !!        !        !                                   ", 
+  "                                              !                                                  !      !          ! !                                ", 
+  "                                              !                                                         !          ! !                                ", 
+  "                                              !       !                                           !    !            !                                 ", 
+  "                                              !       !                                           !     !                                             ", 
+  "                                              !       !                                            !     !                                            ", 
+  "                                              !       !                                            !      !!                                          ", 
+  "                                                      !                                            !        !                                         ", 
+  "                                                  !                                                 !       !                                         ", 
+  "                                            !!   !  !!                                              !       !                                         ", 
+  "                                            !!   !                                                   !      !                                         ", 
+  "                                             !!!                                                     !     !!                                         ", 
+  "                                                                                              !      !  !!                                            ", 
+  "                                                                               !!             !     !                                                 ", 
+  "                                                                                                    !  !                                              ", 
+  "                                                                                           !!      !                                                  ", 
+  "                                                                                            !      !  !                                               ", 
+  "                                                                                                  !   !                                               ", 
+  "                                                                               !!!                !  !                                                ", 
+  "                                                                              !   !      !!!!!! !!   !                                                ", 
+  "                                                                       !!!  !!     !!!!        ! !!!!                                                 ", 
+  "                                                                        ! !!                   !                                                      ", 
+  "                                                                          !!                  !                                                       ", 
+  "                                                                            !!                !                                                       ", 
+  "                                                                              !!             !                                                        ", 
+  "                                                                                !!           !                                                        ", 
+  "                                                                                  !           !                                                       ", 
+  "                                                                                    !         !                                                       ", 
+  "                                                                                     !!       !                                                       ", 
+  "                                                                                       !!     !                                                       ", 
+  "                                                                      !                  !!   !                                                       ", 
+  "                                                                       !                   !!!                                                        "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-agg-reference.png b/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..99d578c
Binary files /dev/null and b/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..8042955
Binary files /dev/null and b/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-agg-reference.png b/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..c4cc3e5
Binary files /dev/null and b/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..6b35045
Binary files /dev/null and b/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-1.0-agg-reference.png b/tests/visual_tests/images/charspacing-200-400-1.0-agg-reference.png
new file mode 100644
index 0000000..c6976c3
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-1.0-cairo-reference.png b/tests/visual_tests/images/charspacing-200-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..38c6d76
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-2.0-agg-reference.png b/tests/visual_tests/images/charspacing-200-400-2.0-agg-reference.png
new file mode 100644
index 0000000..918f241
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-2.0-cairo-reference.png b/tests/visual_tests/images/charspacing-200-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..09ae113
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-1.0-agg-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-1.0-agg-reference.png
new file mode 100644
index 0000000..c9d76d5
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-1.0-cairo-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-1.0-cairo-reference.png
new file mode 100644
index 0000000..3d3d8c5
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-2.0-agg-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-2.0-agg-reference.png
new file mode 100644
index 0000000..e599ab1
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-2.0-cairo-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-2.0-cairo-reference.png
new file mode 100644
index 0000000..b166a1c
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/collision-600-400-1.0-agg-reference.png b/tests/visual_tests/images/collision-600-400-1.0-agg-reference.png
index fe3ae81..696c521 100644
Binary files a/tests/visual_tests/images/collision-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/collision-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/collision-600-400-1.0-agg.png b/tests/visual_tests/images/collision-600-400-1.0-agg.png
new file mode 100644
index 0000000..808c0bd
Binary files /dev/null and b/tests/visual_tests/images/collision-600-400-1.0-agg.png differ
diff --git a/tests/visual_tests/images/collision-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/collision-600-400-1.0-cairo-reference.png
index c8a3eba..dca685b 100644
Binary files a/tests/visual_tests/images/collision-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/collision-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/collision-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/collision-600-400-1.0-cairo.png
similarity index 100%
copy from tests/visual_tests/images/collision-600-400-1.0-cairo-reference.png
copy to tests/visual_tests/images/collision-600-400-1.0-cairo.png
diff --git a/tests/visual_tests/grids/collision-600-400-1.0-grid-reference.json b/tests/visual_tests/images/collision-600-400-1.0-grid.json
similarity index 100%
copy from tests/visual_tests/grids/collision-600-400-1.0-grid-reference.json
copy to tests/visual_tests/images/collision-600-400-1.0-grid.json
diff --git a/tests/visual_tests/images/collision-600-400-2.0-agg-reference.png b/tests/visual_tests/images/collision-600-400-2.0-agg-reference.png
index 9c7cd61..a1f0128 100644
Binary files a/tests/visual_tests/images/collision-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/collision-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/collision-600-400-2.0-agg.png b/tests/visual_tests/images/collision-600-400-2.0-agg.png
new file mode 100644
index 0000000..d0e7a44
Binary files /dev/null and b/tests/visual_tests/images/collision-600-400-2.0-agg.png differ
diff --git a/tests/visual_tests/images/collision-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/collision-600-400-2.0-cairo-reference.png
index d72f194..5d8d45c 100644
Binary files a/tests/visual_tests/images/collision-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/collision-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/collision-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/collision-600-400-2.0-cairo.png
similarity index 100%
copy from tests/visual_tests/images/collision-600-400-2.0-cairo-reference.png
copy to tests/visual_tests/images/collision-600-400-2.0-cairo.png
diff --git a/tests/visual_tests/images/colorize-alpha1-512-512-1.0-agg-reference.png b/tests/visual_tests/images/colorize-alpha1-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..da04eee
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha1-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha1-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..34aeeea
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha1-512-512-2.0-agg-reference.png b/tests/visual_tests/images/colorize-alpha1-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..ab7ed1f
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha1-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha1-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..283c5f2
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha2-512-512-1.0-agg-reference.png b/tests/visual_tests/images/colorize-alpha2-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..a6ff00a
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha2-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha2-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha2-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..34aeeea
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha2-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha2-512-512-2.0-agg-reference.png b/tests/visual_tests/images/colorize-alpha2-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..3d9c7b8
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha2-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha2-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha2-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..283c5f2
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha2-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha3-512-512-1.0-agg-reference.png b/tests/visual_tests/images/colorize-alpha3-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..1327518
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha3-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha3-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha3-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..34aeeea
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha3-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha3-512-512-2.0-agg-reference.png b/tests/visual_tests/images/colorize-alpha3-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..9036403
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha3-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha3-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha3-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..283c5f2
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha3-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/dst-over-compositing-512-512-1.0-agg-reference.png b/tests/visual_tests/images/dst-over-compositing-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..cde2316
Binary files /dev/null and b/tests/visual_tests/images/dst-over-compositing-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/dst-over-compositing-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/dst-over-compositing-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..aa51da4
Binary files /dev/null and b/tests/visual_tests/images/dst-over-compositing-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/dst-over-compositing-512-512-2.0-agg-reference.png b/tests/visual_tests/images/dst-over-compositing-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..685debb
Binary files /dev/null and b/tests/visual_tests/images/dst-over-compositing-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/dst-over-compositing-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/dst-over-compositing-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..aa51da4
Binary files /dev/null and b/tests/visual_tests/images/dst-over-compositing-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/expressionformat-500-100-1.0-agg-reference.png b/tests/visual_tests/images/expressionformat-500-100-1.0-agg-reference.png
index 8cb572d..5c2d0a6 100644
Binary files a/tests/visual_tests/images/expressionformat-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/expressionformat-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/expressionformat-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/expressionformat-500-100-1.0-cairo-reference.png
index cb49e42..fc7b944 100644
Binary files a/tests/visual_tests/images/expressionformat-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/expressionformat-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/expressionformat-500-100-2.0-agg-reference.png b/tests/visual_tests/images/expressionformat-500-100-2.0-agg-reference.png
index 8d468f4..3b7263d 100644
Binary files a/tests/visual_tests/images/expressionformat-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/expressionformat-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/expressionformat-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/expressionformat-500-100-2.0-cairo-reference.png
index d8237b3..de1f803 100644
Binary files a/tests/visual_tests/images/expressionformat-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/expressionformat-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-1-500-100-1.0-agg-reference.png b/tests/visual_tests/images/formatting-1-500-100-1.0-agg-reference.png
index c3148b1..64be9c9 100644
Binary files a/tests/visual_tests/images/formatting-1-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/formatting-1-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-1-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-1-500-100-1.0-cairo-reference.png
index 8130f19..52d5d5c 100644
Binary files a/tests/visual_tests/images/formatting-1-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/formatting-1-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-1-500-100-2.0-agg-reference.png b/tests/visual_tests/images/formatting-1-500-100-2.0-agg-reference.png
index 4c2ce1b..a43a8d7 100644
Binary files a/tests/visual_tests/images/formatting-1-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/formatting-1-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-1-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-1-500-100-2.0-cairo-reference.png
index 43f9fcf..17d6caf 100644
Binary files a/tests/visual_tests/images/formatting-1-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/formatting-1-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-2-500-100-1.0-agg-reference.png b/tests/visual_tests/images/formatting-2-500-100-1.0-agg-reference.png
index c3148b1..64be9c9 100644
Binary files a/tests/visual_tests/images/formatting-2-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/formatting-2-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-2-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-2-500-100-1.0-cairo-reference.png
index 8130f19..52d5d5c 100644
Binary files a/tests/visual_tests/images/formatting-2-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/formatting-2-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-2-500-100-2.0-agg-reference.png b/tests/visual_tests/images/formatting-2-500-100-2.0-agg-reference.png
index 4c2ce1b..a43a8d7 100644
Binary files a/tests/visual_tests/images/formatting-2-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/formatting-2-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-2-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-2-500-100-2.0-cairo-reference.png
index 43f9fcf..17d6caf 100644
Binary files a/tests/visual_tests/images/formatting-2-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/formatting-2-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-3-500-100-1.0-agg-reference.png b/tests/visual_tests/images/formatting-3-500-100-1.0-agg-reference.png
index 3a5c837..cc91310 100644
Binary files a/tests/visual_tests/images/formatting-3-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/formatting-3-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-3-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-3-500-100-1.0-cairo-reference.png
index 6b8f26d..51acc69 100644
Binary files a/tests/visual_tests/images/formatting-3-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/formatting-3-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-3-500-100-2.0-agg-reference.png b/tests/visual_tests/images/formatting-3-500-100-2.0-agg-reference.png
index cd4f34e..d0ff1b4 100644
Binary files a/tests/visual_tests/images/formatting-3-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/formatting-3-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-3-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-3-500-100-2.0-cairo-reference.png
index e5e965c..c739028 100644
Binary files a/tests/visual_tests/images/formatting-3-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/formatting-3-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-5-500-100-1.0-agg-reference.png b/tests/visual_tests/images/formatting-5-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..64be9c9
Binary files /dev/null and b/tests/visual_tests/images/formatting-5-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-5-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-5-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..52d5d5c
Binary files /dev/null and b/tests/visual_tests/images/formatting-5-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-5-500-100-2.0-agg-reference.png b/tests/visual_tests/images/formatting-5-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..a43a8d7
Binary files /dev/null and b/tests/visual_tests/images/formatting-5-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-5-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-5-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..17d6caf
Binary files /dev/null and b/tests/visual_tests/images/formatting-5-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-6-500-100-1.0-agg-reference.png b/tests/visual_tests/images/formatting-6-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..64be9c9
Binary files /dev/null and b/tests/visual_tests/images/formatting-6-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-6-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-6-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..52d5d5c
Binary files /dev/null and b/tests/visual_tests/images/formatting-6-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-6-500-100-2.0-agg-reference.png b/tests/visual_tests/images/formatting-6-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..a43a8d7
Binary files /dev/null and b/tests/visual_tests/images/formatting-6-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-6-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-6-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..17d6caf
Binary files /dev/null and b/tests/visual_tests/images/formatting-6-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-7-500-100-1.0-agg-reference.png b/tests/visual_tests/images/formatting-7-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..64be9c9
Binary files /dev/null and b/tests/visual_tests/images/formatting-7-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-7-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-7-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..52d5d5c
Binary files /dev/null and b/tests/visual_tests/images/formatting-7-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-7-500-100-2.0-agg-reference.png b/tests/visual_tests/images/formatting-7-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..a43a8d7
Binary files /dev/null and b/tests/visual_tests/images/formatting-7-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-7-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-7-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..17d6caf
Binary files /dev/null and b/tests/visual_tests/images/formatting-7-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-8-500-100-1.0-agg-reference.png b/tests/visual_tests/images/formatting-8-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..64be9c9
Binary files /dev/null and b/tests/visual_tests/images/formatting-8-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-8-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-8-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..52d5d5c
Binary files /dev/null and b/tests/visual_tests/images/formatting-8-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-8-500-100-2.0-agg-reference.png b/tests/visual_tests/images/formatting-8-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..a43a8d7
Binary files /dev/null and b/tests/visual_tests/images/formatting-8-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-8-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-8-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..17d6caf
Binary files /dev/null and b/tests/visual_tests/images/formatting-8-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-expr-alignment-500-500-1.0-agg-reference.png b/tests/visual_tests/images/formatting-expr-alignment-500-500-1.0-agg-reference.png
new file mode 100644
index 0000000..65d3d08
Binary files /dev/null and b/tests/visual_tests/images/formatting-expr-alignment-500-500-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-expr-alignment-500-500-1.0-cairo-reference.png b/tests/visual_tests/images/formatting-expr-alignment-500-500-1.0-cairo-reference.png
new file mode 100644
index 0000000..883a7d5
Binary files /dev/null and b/tests/visual_tests/images/formatting-expr-alignment-500-500-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/formatting-expr-alignment-500-500-2.0-agg-reference.png b/tests/visual_tests/images/formatting-expr-alignment-500-500-2.0-agg-reference.png
new file mode 100644
index 0000000..d2a79b2
Binary files /dev/null and b/tests/visual_tests/images/formatting-expr-alignment-500-500-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/formatting-expr-alignment-500-500-2.0-cairo-reference.png b/tests/visual_tests/images/formatting-expr-alignment-500-500-2.0-cairo-reference.png
new file mode 100644
index 0000000..2cf0264
Binary files /dev/null and b/tests/visual_tests/images/formatting-expr-alignment-500-500-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-256-256-1.0-agg-reference.png b/tests/visual_tests/images/functional-expressions-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..790765b
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/functional-expressions-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..6ca5865
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-256-256-2.0-agg-reference.png b/tests/visual_tests/images/functional-expressions-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..21759f0
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/functional-expressions-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..fd479ef
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-length-512-512-1.0-agg-reference.png b/tests/visual_tests/images/functional-expressions-length-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..7b9502e
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-length-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-length-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/functional-expressions-length-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..d842e00
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-length-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-length-512-512-2.0-agg-reference.png b/tests/visual_tests/images/functional-expressions-length-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..e258219
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-length-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/functional-expressions-length-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/functional-expressions-length-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..fe4da8d
Binary files /dev/null and b/tests/visual_tests/images/functional-expressions-length-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/gdal-filter-factor-600-400-1.0-agg-reference.png b/tests/visual_tests/images/gdal-filter-factor-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..3fcb40d
Binary files /dev/null and b/tests/visual_tests/images/gdal-filter-factor-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/gdal-filter-factor-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/gdal-filter-factor-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..3fcb40d
Binary files /dev/null and b/tests/visual_tests/images/gdal-filter-factor-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/gdal-filter-factor-600-400-2.0-agg-reference.png b/tests/visual_tests/images/gdal-filter-factor-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..3fcb40d
Binary files /dev/null and b/tests/visual_tests/images/gdal-filter-factor-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/gdal-filter-factor-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/gdal-filter-factor-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..3fcb40d
Binary files /dev/null and b/tests/visual_tests/images/gdal-filter-factor-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-500-500-1.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-scale-500-500-1.0-agg-reference.png
new file mode 100644
index 0000000..14c046a
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-500-500-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-500-500-1.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-scale-500-500-1.0-cairo-reference.png
new file mode 100644
index 0000000..a76c90b
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-500-500-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-500-500-2.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-scale-500-500-2.0-agg-reference.png
new file mode 100644
index 0000000..9144481
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-500-500-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-500-500-2.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-scale-500-500-2.0-cairo-reference.png
new file mode 100644
index 0000000..a88adae
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-500-500-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-1.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-1.0-agg-reference.png
new file mode 100644
index 0000000..8e5d422
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-1.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-1.0-cairo-reference.png
new file mode 100644
index 0000000..e00e283
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-2.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-2.0-agg-reference.png
new file mode 100644
index 0000000..0b6ec2b
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-2.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-2.0-cairo-reference.png
new file mode 100644
index 0000000..f24e943
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-scale-patterns-500-500-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-200-200-1.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-translate-200-200-1.0-agg-reference.png
new file mode 100644
index 0000000..81c7c7c
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-translate-200-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..5757230
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-200-200-2.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-translate-200-200-2.0-agg-reference.png
new file mode 100644
index 0000000..1f0468f
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-translate-200-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..9b29876
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-1.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-1.0-agg-reference.png
new file mode 100644
index 0000000..fa06b37
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..a42e101
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-2.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-2.0-agg-reference.png
new file mode 100644
index 0000000..c584eb6
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..a024250
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-1.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-1.0-agg-reference.png
new file mode 100644
index 0000000..7400aa8
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..35ccb86
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-2.0-agg-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-2.0-agg-reference.png
new file mode 100644
index 0000000..21b651b
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..6c3b753
Binary files /dev/null and b/tests/visual_tests/images/geometry-transform-translate-patterns-svg-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-1-512-512-1.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-1-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..2de70a1
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-1-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-1-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..5e4d7f1
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-1-512-512-2.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-1-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..038cdf7
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-1-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-1-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..39c9635
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-2-512-512-1.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-2-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..bef874b
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-2-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-2-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-2-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..76cd9e9
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-2-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-2-512-512-2.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-2-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..aebd66e
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-2-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-2-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-2-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..5e6fa91
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-2-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-3-512-256-1.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-3-512-256-1.0-agg-reference.png
new file mode 100644
index 0000000..33be04d
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-3-512-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-3-512-256-1.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-3-512-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..ce75908
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-3-512-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-3-512-256-2.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-3-512-256-2.0-agg-reference.png
new file mode 100644
index 0000000..2ff8456
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-3-512-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-3-512-256-2.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-3-512-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..5a023e4
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-3-512-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-1-512-512-1.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-line-1-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..4d3083d
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-1-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-line-1-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..1345f87
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-1-512-512-2.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-line-1-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..fa0c2c9
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-1-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-line-1-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..b8dcf94
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-2-512-512-1.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-line-2-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..a0d22b8
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-2-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-2-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-line-2-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..4a94049
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-2-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-2-512-512-2.0-agg-reference.png b/tests/visual_tests/images/group-symbolizer-line-2-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..85d1f09
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-2-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/group-symbolizer-line-2-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/group-symbolizer-line-2-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..e4aaf33
Binary files /dev/null and b/tests/visual_tests/images/group-symbolizer-line-2-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-1.0-agg-reference.png b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-1.0-agg-reference.png
new file mode 100644
index 0000000..c81967c
Binary files /dev/null and b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-1.0-cairo-reference.png b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-1.0-cairo-reference.png
new file mode 100644
index 0000000..7997b2f
Binary files /dev/null and b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-2.0-agg-reference.png b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-2.0-agg-reference.png
new file mode 100644
index 0000000..c581d64
Binary files /dev/null and b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-2.0-cairo-reference.png b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-2.0-cairo-reference.png
new file mode 100644
index 0000000..29a6cf4
Binary files /dev/null and b/tests/visual_tests/images/halo-comp-op-on-satellite-450-450-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-1.0-agg-reference.png b/tests/visual_tests/images/harfbuzz-800-200-1.0-agg-reference.png
new file mode 100644
index 0000000..f11d264
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/harfbuzz-800-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..f83b277
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-2.0-agg-reference.png b/tests/visual_tests/images/harfbuzz-800-200-2.0-agg-reference.png
new file mode 100644
index 0000000..adecccb
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/harfbuzz-800-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..b1fd3d8
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-1.0-agg-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-1.0-agg-reference.png
new file mode 100644
index 0000000..ef8510f
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..a521962
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-2.0-agg-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-2.0-agg-reference.png
new file mode 100644
index 0000000..18990f2
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..b9e7aec
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-galore-512-512-1.0-agg-reference.png b/tests/visual_tests/images/image-filters-galore-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..54b234c
Binary files /dev/null and b/tests/visual_tests/images/image-filters-galore-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-galore-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/image-filters-galore-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..f6c9d11
Binary files /dev/null and b/tests/visual_tests/images/image-filters-galore-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-galore-512-512-2.0-agg-reference.png b/tests/visual_tests/images/image-filters-galore-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..54b234c
Binary files /dev/null and b/tests/visual_tests/images/image-filters-galore-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-galore-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/image-filters-galore-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..f6c9d11
Binary files /dev/null and b/tests/visual_tests/images/image-filters-galore-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-agg-reference.png b/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..55ebc57
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..caf6fc8
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-agg-reference.png b/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..b945e82
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..e6ce030
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-1.0-agg-reference.png b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..a94e93a
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..caf6fc8
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-2.0-agg-reference.png b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..79b2afb
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..e6ce030
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/jalign-auto-200-200-1.0-agg-reference.png b/tests/visual_tests/images/jalign-auto-200-200-1.0-agg-reference.png
index 74b8cc1..0fd4d81 100644
Binary files a/tests/visual_tests/images/jalign-auto-200-200-1.0-agg-reference.png and b/tests/visual_tests/images/jalign-auto-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/jalign-auto-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/jalign-auto-200-200-1.0-cairo-reference.png
index 24f4cc3..a92df87 100644
Binary files a/tests/visual_tests/images/jalign-auto-200-200-1.0-cairo-reference.png and b/tests/visual_tests/images/jalign-auto-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/jalign-auto-200-200-2.0-agg-reference.png b/tests/visual_tests/images/jalign-auto-200-200-2.0-agg-reference.png
index a53bce8..fecedca 100644
Binary files a/tests/visual_tests/images/jalign-auto-200-200-2.0-agg-reference.png and b/tests/visual_tests/images/jalign-auto-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/jalign-auto-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/jalign-auto-200-200-2.0-cairo-reference.png
index c7f264d..8d99da3 100644
Binary files a/tests/visual_tests/images/jalign-auto-200-200-2.0-cairo-reference.png and b/tests/visual_tests/images/jalign-auto-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-1.0-agg-reference.png b/tests/visual_tests/images/khmer-800-200-1.0-agg-reference.png
new file mode 100644
index 0000000..e462c19
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/khmer-800-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..9881bc0
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-2.0-agg-reference.png b/tests/visual_tests/images/khmer-800-200-2.0-agg-reference.png
new file mode 100644
index 0000000..f54f693
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/khmer-800-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..38c79e9
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-offset-900-250-1.0-agg-reference.png b/tests/visual_tests/images/line-offset-900-250-1.0-agg-reference.png
index 19f85db..644529e 100644
Binary files a/tests/visual_tests/images/line-offset-900-250-1.0-agg-reference.png and b/tests/visual_tests/images/line-offset-900-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-offset-900-250-1.0-cairo-reference.png b/tests/visual_tests/images/line-offset-900-250-1.0-cairo-reference.png
index 51a7333..eb0db95 100644
Binary files a/tests/visual_tests/images/line-offset-900-250-1.0-cairo-reference.png and b/tests/visual_tests/images/line-offset-900-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-offset-900-250-2.0-agg-reference.png b/tests/visual_tests/images/line-offset-900-250-2.0-agg-reference.png
index 53ffcc2..095d02b 100644
Binary files a/tests/visual_tests/images/line-offset-900-250-2.0-agg-reference.png and b/tests/visual_tests/images/line-offset-900-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-offset-900-250-2.0-cairo-reference.png b/tests/visual_tests/images/line-offset-900-250-2.0-cairo-reference.png
index b83bd73..8b65591 100644
Binary files a/tests/visual_tests/images/line-offset-900-250-2.0-cairo-reference.png and b/tests/visual_tests/images/line-offset-900-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-opacity-multi-render-512-512-1.0-agg-reference.png b/tests/visual_tests/images/line-opacity-multi-render-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..73a23b9
Binary files /dev/null and b/tests/visual_tests/images/line-opacity-multi-render-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-opacity-multi-render-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/line-opacity-multi-render-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..cadd94f
Binary files /dev/null and b/tests/visual_tests/images/line-opacity-multi-render-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-opacity-multi-render-512-512-2.0-agg-reference.png b/tests/visual_tests/images/line-opacity-multi-render-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..3008425
Binary files /dev/null and b/tests/visual_tests/images/line-opacity-multi-render-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-opacity-multi-render-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/line-opacity-multi-render-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..94fe30c
Binary files /dev/null and b/tests/visual_tests/images/line-opacity-multi-render-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-1.0-agg-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..6da936d
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..9818100
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-2.0-agg-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..a8b724e
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..41c6076
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-1.0-agg-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..0d6a3d3
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..ae5d716
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-2.0-agg-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..ef457d5
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..19c6e08
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-smooth-and-offset-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-900-250-1.0-agg-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-900-250-1.0-agg-reference.png
new file mode 100644
index 0000000..6ea65c9
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-900-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-900-250-1.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-900-250-1.0-cairo-reference.png
new file mode 100644
index 0000000..9509825
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-900-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-900-250-2.0-agg-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-900-250-2.0-agg-reference.png
new file mode 100644
index 0000000..40f1b7f
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-900-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-900-250-2.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-900-250-2.0-cairo-reference.png
new file mode 100644
index 0000000..1e3888f
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-900-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-agg-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..8a8f5d5
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..ea54754
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-agg-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..8a8f5d5
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..ea54754
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-smooth-and-offset-512-512-1.0-agg-reference.png b/tests/visual_tests/images/line-smooth-and-offset-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..786645c
Binary files /dev/null and b/tests/visual_tests/images/line-smooth-and-offset-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-smooth-and-offset-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/line-smooth-and-offset-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..7ab02a0
Binary files /dev/null and b/tests/visual_tests/images/line-smooth-and-offset-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-smooth-and-offset-512-512-2.0-agg-reference.png b/tests/visual_tests/images/line-smooth-and-offset-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..35a0d4a
Binary files /dev/null and b/tests/visual_tests/images/line-smooth-and-offset-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-smooth-and-offset-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/line-smooth-and-offset-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..0afbde7
Binary files /dev/null and b/tests/visual_tests/images/line-smooth-and-offset-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-256-256-1.0-agg-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..bbd772b
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..cd59af5
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-256-256-2.0-agg-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..aea44bb
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..682c966
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-1.0-agg-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..41dc4e7
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..b9be12a
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-2.0-agg-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..9ada2e9
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..13149ce
Binary files /dev/null and b/tests/visual_tests/images/line-symbolizer-expressions-all-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-1.0-agg-reference.png b/tests/visual_tests/images/line_break-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..af83882
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/line_break-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..dcfab57
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-2.0-agg-reference.png b/tests/visual_tests/images/line_break-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..acf3b55
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/line_break-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..c60f3b2
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-1-200-200-1.0-agg-reference.png
index ddf38bc..7a7c3c8 100644
Binary files a/tests/visual_tests/images/lines-1-200-200-1.0-agg-reference.png and b/tests/visual_tests/images/lines-1-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-1-200-200-1.0-cairo-reference.png
index b2d300f..93c255c 100644
Binary files a/tests/visual_tests/images/lines-1-200-200-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-1-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-1-200-200-2.0-agg-reference.png
index 4849cc4..e530c6c 100644
Binary files a/tests/visual_tests/images/lines-1-200-200-2.0-agg-reference.png and b/tests/visual_tests/images/lines-1-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-1-400-400-1.0-agg-reference.png
index 551ae51..e68990c 100644
Binary files a/tests/visual_tests/images/lines-1-400-400-1.0-agg-reference.png and b/tests/visual_tests/images/lines-1-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-1-400-400-1.0-cairo-reference.png
index 42ab61c..07b7fc9 100644
Binary files a/tests/visual_tests/images/lines-1-400-400-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-1-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-1-400-400-2.0-agg-reference.png
index 9b72fa6..0605028 100644
Binary files a/tests/visual_tests/images/lines-1-400-400-2.0-agg-reference.png and b/tests/visual_tests/images/lines-1-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-1-400-400-2.0-cairo-reference.png
index 249edc7..ed284c2 100644
Binary files a/tests/visual_tests/images/lines-1-400-400-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-1-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-1-600-600-1.0-agg-reference.png
index b91b87d..912e65c 100644
Binary files a/tests/visual_tests/images/lines-1-600-600-1.0-agg-reference.png and b/tests/visual_tests/images/lines-1-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-1-600-600-1.0-cairo-reference.png
index 515daed..35afcf1 100644
Binary files a/tests/visual_tests/images/lines-1-600-600-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-1-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-1-600-600-2.0-agg-reference.png
index fe0e52c..260706b 100644
Binary files a/tests/visual_tests/images/lines-1-600-600-2.0-agg-reference.png and b/tests/visual_tests/images/lines-1-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-1-600-600-2.0-cairo-reference.png
index 64faecd..2cee875 100644
Binary files a/tests/visual_tests/images/lines-1-600-600-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-1-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-1-800-800-1.0-agg-reference.png
index 02209ef..5c2cc64 100644
Binary files a/tests/visual_tests/images/lines-1-800-800-1.0-agg-reference.png and b/tests/visual_tests/images/lines-1-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-1-800-800-1.0-cairo-reference.png
index 425b01e..7388c13 100644
Binary files a/tests/visual_tests/images/lines-1-800-800-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-1-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-1-800-800-2.0-agg-reference.png
index c4da4f3..c0030e5 100644
Binary files a/tests/visual_tests/images/lines-1-800-800-2.0-agg-reference.png and b/tests/visual_tests/images/lines-1-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-1-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-1-800-800-2.0-cairo-reference.png
index a263558..e9da30f 100644
Binary files a/tests/visual_tests/images/lines-1-800-800-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-1-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-2-200-200-1.0-agg-reference.png
index 1656c87..33a15c6 100644
Binary files a/tests/visual_tests/images/lines-2-200-200-1.0-agg-reference.png and b/tests/visual_tests/images/lines-2-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-2-200-200-1.0-cairo-reference.png
index 05dbf90..c945b65 100644
Binary files a/tests/visual_tests/images/lines-2-200-200-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-2-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-2-200-200-2.0-agg-reference.png
index 4849cc4..e530c6c 100644
Binary files a/tests/visual_tests/images/lines-2-200-200-2.0-agg-reference.png and b/tests/visual_tests/images/lines-2-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-2-400-400-1.0-agg-reference.png
index 965ad6a..6e53a49 100644
Binary files a/tests/visual_tests/images/lines-2-400-400-1.0-agg-reference.png and b/tests/visual_tests/images/lines-2-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-2-400-400-1.0-cairo-reference.png
index d646d5b..64034f8 100644
Binary files a/tests/visual_tests/images/lines-2-400-400-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-2-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-2-400-400-2.0-agg-reference.png
index 58e8406..78d6c96 100644
Binary files a/tests/visual_tests/images/lines-2-400-400-2.0-agg-reference.png and b/tests/visual_tests/images/lines-2-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-2-400-400-2.0-cairo-reference.png
index ca17344..36d395b 100644
Binary files a/tests/visual_tests/images/lines-2-400-400-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-2-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-2-600-600-1.0-agg-reference.png
index 4c81dc2..492c933 100644
Binary files a/tests/visual_tests/images/lines-2-600-600-1.0-agg-reference.png and b/tests/visual_tests/images/lines-2-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-2-600-600-1.0-cairo-reference.png
index d7f2277..18d7276 100644
Binary files a/tests/visual_tests/images/lines-2-600-600-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-2-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-2-600-600-2.0-agg-reference.png
index 9b2ab1c..1467f96 100644
Binary files a/tests/visual_tests/images/lines-2-600-600-2.0-agg-reference.png and b/tests/visual_tests/images/lines-2-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-2-600-600-2.0-cairo-reference.png
index 62a026b..b9d8164 100644
Binary files a/tests/visual_tests/images/lines-2-600-600-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-2-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-2-800-800-1.0-agg-reference.png
index 132acbc..9ceff11 100644
Binary files a/tests/visual_tests/images/lines-2-800-800-1.0-agg-reference.png and b/tests/visual_tests/images/lines-2-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-2-800-800-1.0-cairo-reference.png
index 8a11d02..f09adfb 100644
Binary files a/tests/visual_tests/images/lines-2-800-800-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-2-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-2-800-800-2.0-agg-reference.png
index 7817221..1d78e4b 100644
Binary files a/tests/visual_tests/images/lines-2-800-800-2.0-agg-reference.png and b/tests/visual_tests/images/lines-2-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-2-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-2-800-800-2.0-cairo-reference.png
index e4cd185..4e57885 100644
Binary files a/tests/visual_tests/images/lines-2-800-800-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-2-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-3-200-200-1.0-agg-reference.png
index ddf38bc..7a7c3c8 100644
Binary files a/tests/visual_tests/images/lines-3-200-200-1.0-agg-reference.png and b/tests/visual_tests/images/lines-3-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-3-200-200-1.0-cairo-reference.png
index b2d300f..93c255c 100644
Binary files a/tests/visual_tests/images/lines-3-200-200-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-3-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-3-200-200-2.0-agg-reference.png
index 4849cc4..e530c6c 100644
Binary files a/tests/visual_tests/images/lines-3-200-200-2.0-agg-reference.png and b/tests/visual_tests/images/lines-3-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-3-400-400-1.0-agg-reference.png
index a552848..b3ba36e 100644
Binary files a/tests/visual_tests/images/lines-3-400-400-1.0-agg-reference.png and b/tests/visual_tests/images/lines-3-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-3-400-400-1.0-cairo-reference.png
index 2b1968b..ca4fbf6 100644
Binary files a/tests/visual_tests/images/lines-3-400-400-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-3-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-3-400-400-2.0-agg-reference.png
index 9b72fa6..0605028 100644
Binary files a/tests/visual_tests/images/lines-3-400-400-2.0-agg-reference.png and b/tests/visual_tests/images/lines-3-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-3-400-400-2.0-cairo-reference.png
index 249edc7..ed284c2 100644
Binary files a/tests/visual_tests/images/lines-3-400-400-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-3-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-3-600-600-1.0-agg-reference.png
index 69d0297..02a48ad 100644
Binary files a/tests/visual_tests/images/lines-3-600-600-1.0-agg-reference.png and b/tests/visual_tests/images/lines-3-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-3-600-600-1.0-cairo-reference.png
index c6ecf9c..b7b73c7 100644
Binary files a/tests/visual_tests/images/lines-3-600-600-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-3-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-3-600-600-2.0-agg-reference.png
index ee53eca..54ed9f8 100644
Binary files a/tests/visual_tests/images/lines-3-600-600-2.0-agg-reference.png and b/tests/visual_tests/images/lines-3-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-3-600-600-2.0-cairo-reference.png
index 654a636..d2bf0b2 100644
Binary files a/tests/visual_tests/images/lines-3-600-600-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-3-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-3-800-800-1.0-agg-reference.png
index 3a92956..628ca4d 100644
Binary files a/tests/visual_tests/images/lines-3-800-800-1.0-agg-reference.png and b/tests/visual_tests/images/lines-3-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-3-800-800-1.0-cairo-reference.png
index 1d94e75..47a1783 100644
Binary files a/tests/visual_tests/images/lines-3-800-800-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-3-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-3-800-800-2.0-agg-reference.png
index a8bdfea..6e81e90 100644
Binary files a/tests/visual_tests/images/lines-3-800-800-2.0-agg-reference.png and b/tests/visual_tests/images/lines-3-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-3-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-3-800-800-2.0-cairo-reference.png
index d1eb386..78b0147 100644
Binary files a/tests/visual_tests/images/lines-3-800-800-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-3-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-200-200-1.0-agg-reference.png
new file mode 100644
index 0000000..6a6d675
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-200-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..bc2fa8b
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-200-200-2.0-agg-reference.png
new file mode 100644
index 0000000..ea83730
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-200-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..592ab35
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-400-400-1.0-agg-reference.png
new file mode 100644
index 0000000..8199781
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-400-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..e636931
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-400-400-2.0-agg-reference.png
new file mode 100644
index 0000000..ce8f7de
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-400-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..e09dc9c
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-600-600-1.0-agg-reference.png
new file mode 100644
index 0000000..c81d0b1
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-600-600-1.0-cairo-reference.png
new file mode 100644
index 0000000..3fd65cb
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-600-600-2.0-agg-reference.png
new file mode 100644
index 0000000..928d519
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-600-600-2.0-cairo-reference.png
new file mode 100644
index 0000000..8d9d757
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..2b5a36e
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..2fb03d1
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..dc98a92
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..0847a7b
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png
new file mode 100644
index 0000000..7cca842
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-200-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..d84fe45
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png
new file mode 100644
index 0000000..39150ae
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-200-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..2bb4af7
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png
new file mode 100644
index 0000000..cacff31
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-400-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..307a02a
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png
new file mode 100644
index 0000000..f1e55a5
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-400-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..48e7789
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png
new file mode 100644
index 0000000..694b434
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-600-600-1.0-cairo-reference.png
new file mode 100644
index 0000000..d02431a
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png
new file mode 100644
index 0000000..3b7d116
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-600-600-2.0-cairo-reference.png
new file mode 100644
index 0000000..2ad89f2
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..d9222d5
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..72192a5
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..03aff50
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..ef2b935
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-200-200-1.0-agg-reference.png
new file mode 100644
index 0000000..6d0cdba
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-200-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..6a6d2d8
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png
new file mode 100644
index 0000000..3a13092
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-200-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..dba440d
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-400-400-1.0-agg-reference.png
new file mode 100644
index 0000000..c063219
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-400-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..887ccb7
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-400-400-2.0-agg-reference.png
new file mode 100644
index 0000000..3f0b8c7
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-400-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..b6bd44f
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-600-600-1.0-agg-reference.png
new file mode 100644
index 0000000..e422caa
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-600-600-1.0-cairo-reference.png
new file mode 100644
index 0000000..385b8ed
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png
new file mode 100644
index 0000000..de5b4d9
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-600-600-2.0-cairo-reference.png
new file mode 100644
index 0000000..6bf6182
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..e54dfa3
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..995c36c
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..f074a02
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..6d9a037
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-7-200-200-1.0-agg-reference.png
new file mode 100644
index 0000000..f87ecce
Binary files /dev/null and b/tests/visual_tests/images/lines-7-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-7-200-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..cbf367e
Binary files /dev/null and b/tests/visual_tests/images/lines-7-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-7-200-200-2.0-agg-reference.png
new file mode 100644
index 0000000..d07c856
Binary files /dev/null and b/tests/visual_tests/images/lines-7-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-7-200-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..24fd98a
Binary files /dev/null and b/tests/visual_tests/images/lines-7-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-7-400-400-1.0-agg-reference.png
new file mode 100644
index 0000000..b9b9004
Binary files /dev/null and b/tests/visual_tests/images/lines-7-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-7-400-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..91fa0bf
Binary files /dev/null and b/tests/visual_tests/images/lines-7-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-7-400-400-2.0-agg-reference.png
new file mode 100644
index 0000000..705eca6
Binary files /dev/null and b/tests/visual_tests/images/lines-7-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-7-400-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..63e5344
Binary files /dev/null and b/tests/visual_tests/images/lines-7-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-7-600-600-1.0-agg-reference.png
new file mode 100644
index 0000000..8b5a497
Binary files /dev/null and b/tests/visual_tests/images/lines-7-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-7-600-600-1.0-cairo-reference.png
new file mode 100644
index 0000000..ad2661c
Binary files /dev/null and b/tests/visual_tests/images/lines-7-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-7-600-600-2.0-agg-reference.png
new file mode 100644
index 0000000..fe7f809
Binary files /dev/null and b/tests/visual_tests/images/lines-7-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-7-600-600-2.0-cairo-reference.png
new file mode 100644
index 0000000..315fc58
Binary files /dev/null and b/tests/visual_tests/images/lines-7-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-7-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..f45c3f8
Binary files /dev/null and b/tests/visual_tests/images/lines-7-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-7-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..262be88
Binary files /dev/null and b/tests/visual_tests/images/lines-7-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-7-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..277e373
Binary files /dev/null and b/tests/visual_tests/images/lines-7-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-7-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-7-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..eb55404
Binary files /dev/null and b/tests/visual_tests/images/lines-7-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-1-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-multi-layout-1-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..9642239
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-1-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-1-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-multi-layout-1-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..a6c2bf3
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-1-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-1-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-multi-layout-1-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..0858043
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-1-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-1-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-multi-layout-1-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..a141bec
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-1-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-2-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-multi-layout-2-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..0aeee39
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-2-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-2-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-multi-layout-2-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..e43d5b6
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-2-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-2-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-multi-layout-2-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..618ea59
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-2-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-2-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-multi-layout-2-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..dad80dc
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-2-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-shield-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-multi-layout-shield-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..dc9ab90
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-shield-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-shield-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-multi-layout-shield-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..4a6771d
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-shield-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-shield-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-multi-layout-shield-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..540104c
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-shield-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-multi-layout-shield-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-multi-layout-shield-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..5cb7878
Binary files /dev/null and b/tests/visual_tests/images/lines-multi-layout-shield-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-shield-200-200-1.0-agg-reference.png
index 0ab97cb..fe95cbc 100644
Binary files a/tests/visual_tests/images/lines-shield-200-200-1.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-200-200-1.0-cairo-reference.png
index 2db6719..d71fc17 100644
Binary files a/tests/visual_tests/images/lines-shield-200-200-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-shield-200-200-2.0-agg-reference.png
index d7ae223..6eca66b 100644
Binary files a/tests/visual_tests/images/lines-shield-200-200-2.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-200-200-2.0-cairo-reference.png
index e4d817d..886e4ae 100644
Binary files a/tests/visual_tests/images/lines-shield-200-200-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-shield-400-400-1.0-agg-reference.png
index 4269b4c..b26003d 100644
Binary files a/tests/visual_tests/images/lines-shield-400-400-1.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-400-400-1.0-cairo-reference.png
index d30efac..1eb2cc5 100644
Binary files a/tests/visual_tests/images/lines-shield-400-400-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-shield-400-400-2.0-agg-reference.png
index 75a0ec6..4142c84 100644
Binary files a/tests/visual_tests/images/lines-shield-400-400-2.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-400-400-2.0-cairo-reference.png
index 5f32dda..2f42825 100644
Binary files a/tests/visual_tests/images/lines-shield-400-400-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-shield-600-600-1.0-agg-reference.png
index f8fdcad..53506ad 100644
Binary files a/tests/visual_tests/images/lines-shield-600-600-1.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-600-600-1.0-cairo-reference.png
index 20ba67d..c622bc6 100644
Binary files a/tests/visual_tests/images/lines-shield-600-600-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-shield-600-600-2.0-agg-reference.png
index ae0f4d9..69537f8 100644
Binary files a/tests/visual_tests/images/lines-shield-600-600-2.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-600-600-2.0-cairo-reference.png
index a94c464..27c9757 100644
Binary files a/tests/visual_tests/images/lines-shield-600-600-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-shield-800-800-1.0-agg-reference.png
index 6e05b92..15d4d95 100644
Binary files a/tests/visual_tests/images/lines-shield-800-800-1.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-800-800-1.0-cairo-reference.png
index 54fbbab..36650f9 100644
Binary files a/tests/visual_tests/images/lines-shield-800-800-1.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-shield-800-800-2.0-agg-reference.png
index a3797ce..419c089 100644
Binary files a/tests/visual_tests/images/lines-shield-800-800-2.0-agg-reference.png and b/tests/visual_tests/images/lines-shield-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-shield-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-shield-800-800-2.0-cairo-reference.png
index 4641d23..6993f63 100644
Binary files a/tests/visual_tests/images/lines-shield-800-800-2.0-cairo-reference.png and b/tests/visual_tests/images/lines-shield-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-100-100-1.0-agg-reference.png b/tests/visual_tests/images/list-100-100-1.0-agg-reference.png
index a4be387..c2f25a4 100644
Binary files a/tests/visual_tests/images/list-100-100-1.0-agg-reference.png and b/tests/visual_tests/images/list-100-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-100-100-1.0-cairo-reference.png b/tests/visual_tests/images/list-100-100-1.0-cairo-reference.png
index 9a5f9a0..5c6191b 100644
Binary files a/tests/visual_tests/images/list-100-100-1.0-cairo-reference.png and b/tests/visual_tests/images/list-100-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-100-100-2.0-agg-reference.png b/tests/visual_tests/images/list-100-100-2.0-agg-reference.png
index 8e890f1..60a0c38 100644
Binary files a/tests/visual_tests/images/list-100-100-2.0-agg-reference.png and b/tests/visual_tests/images/list-100-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-100-100-2.0-cairo-reference.png b/tests/visual_tests/images/list-100-100-2.0-cairo-reference.png
index 2b90990..b489e71 100644
Binary files a/tests/visual_tests/images/list-100-100-2.0-cairo-reference.png and b/tests/visual_tests/images/list-100-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-150-100-1.0-agg-reference.png b/tests/visual_tests/images/list-150-100-1.0-agg-reference.png
index 35ac172..7f7b989 100644
Binary files a/tests/visual_tests/images/list-150-100-1.0-agg-reference.png and b/tests/visual_tests/images/list-150-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-150-100-1.0-cairo-reference.png b/tests/visual_tests/images/list-150-100-1.0-cairo-reference.png
index 44929ff..534efc4 100644
Binary files a/tests/visual_tests/images/list-150-100-1.0-cairo-reference.png and b/tests/visual_tests/images/list-150-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-150-100-2.0-agg-reference.png b/tests/visual_tests/images/list-150-100-2.0-agg-reference.png
index 4aaf1e8..4099ad4 100644
Binary files a/tests/visual_tests/images/list-150-100-2.0-agg-reference.png and b/tests/visual_tests/images/list-150-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-150-100-2.0-cairo-reference.png b/tests/visual_tests/images/list-150-100-2.0-cairo-reference.png
index 99cc5c4..8541266 100644
Binary files a/tests/visual_tests/images/list-150-100-2.0-cairo-reference.png and b/tests/visual_tests/images/list-150-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-250-100-1.0-agg-reference.png b/tests/visual_tests/images/list-250-100-1.0-agg-reference.png
index b64483f..507706a 100644
Binary files a/tests/visual_tests/images/list-250-100-1.0-agg-reference.png and b/tests/visual_tests/images/list-250-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-250-100-1.0-cairo-reference.png b/tests/visual_tests/images/list-250-100-1.0-cairo-reference.png
index 49eb592..6fc518e 100644
Binary files a/tests/visual_tests/images/list-250-100-1.0-cairo-reference.png and b/tests/visual_tests/images/list-250-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-250-100-2.0-agg-reference.png b/tests/visual_tests/images/list-250-100-2.0-agg-reference.png
index 569fd68..9a02784 100644
Binary files a/tests/visual_tests/images/list-250-100-2.0-agg-reference.png and b/tests/visual_tests/images/list-250-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-250-100-2.0-cairo-reference.png b/tests/visual_tests/images/list-250-100-2.0-cairo-reference.png
index d0845ea..9705f81 100644
Binary files a/tests/visual_tests/images/list-250-100-2.0-cairo-reference.png and b/tests/visual_tests/images/list-250-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-300-100-1.0-agg-reference.png b/tests/visual_tests/images/list-300-100-1.0-agg-reference.png
index acda520..c4c6688 100644
Binary files a/tests/visual_tests/images/list-300-100-1.0-agg-reference.png and b/tests/visual_tests/images/list-300-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-300-100-1.0-cairo-reference.png b/tests/visual_tests/images/list-300-100-1.0-cairo-reference.png
index 81239ee..0ff833d 100644
Binary files a/tests/visual_tests/images/list-300-100-1.0-cairo-reference.png and b/tests/visual_tests/images/list-300-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-300-100-2.0-agg-reference.png b/tests/visual_tests/images/list-300-100-2.0-agg-reference.png
index 369a6eb..90f4630 100644
Binary files a/tests/visual_tests/images/list-300-100-2.0-agg-reference.png and b/tests/visual_tests/images/list-300-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-300-100-2.0-cairo-reference.png b/tests/visual_tests/images/list-300-100-2.0-cairo-reference.png
index b0c77c6..f2383ef 100644
Binary files a/tests/visual_tests/images/list-300-100-2.0-cairo-reference.png and b/tests/visual_tests/images/list-300-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-400-100-1.0-agg-reference.png b/tests/visual_tests/images/list-400-100-1.0-agg-reference.png
index 52af552..9cfad2f 100644
Binary files a/tests/visual_tests/images/list-400-100-1.0-agg-reference.png and b/tests/visual_tests/images/list-400-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-400-100-1.0-cairo-reference.png b/tests/visual_tests/images/list-400-100-1.0-cairo-reference.png
index ed891a4..b842717 100644
Binary files a/tests/visual_tests/images/list-400-100-1.0-cairo-reference.png and b/tests/visual_tests/images/list-400-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-400-100-2.0-agg-reference.png b/tests/visual_tests/images/list-400-100-2.0-agg-reference.png
index e4a9706..0c4336c 100644
Binary files a/tests/visual_tests/images/list-400-100-2.0-agg-reference.png and b/tests/visual_tests/images/list-400-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-400-100-2.0-cairo-reference.png b/tests/visual_tests/images/list-400-100-2.0-cairo-reference.png
index a48084f..74f63ab 100644
Binary files a/tests/visual_tests/images/list-400-100-2.0-cairo-reference.png and b/tests/visual_tests/images/list-400-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-600-100-1.0-agg-reference.png b/tests/visual_tests/images/list-600-100-1.0-agg-reference.png
index 5072a3e..1dd6357 100644
Binary files a/tests/visual_tests/images/list-600-100-1.0-agg-reference.png and b/tests/visual_tests/images/list-600-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-600-100-1.0-cairo-reference.png b/tests/visual_tests/images/list-600-100-1.0-cairo-reference.png
index 5dd7360..9b782e9 100644
Binary files a/tests/visual_tests/images/list-600-100-1.0-cairo-reference.png and b/tests/visual_tests/images/list-600-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-600-100-2.0-agg-reference.png b/tests/visual_tests/images/list-600-100-2.0-agg-reference.png
index 1c5a781..da0b301 100644
Binary files a/tests/visual_tests/images/list-600-100-2.0-agg-reference.png and b/tests/visual_tests/images/list-600-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-600-100-2.0-cairo-reference.png b/tests/visual_tests/images/list-600-100-2.0-cairo-reference.png
index 5b48885..68dc8e4 100644
Binary files a/tests/visual_tests/images/list-600-100-2.0-cairo-reference.png and b/tests/visual_tests/images/list-600-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-800-100-1.0-agg-reference.png b/tests/visual_tests/images/list-800-100-1.0-agg-reference.png
index 9ef86a2..f75cc05 100644
Binary files a/tests/visual_tests/images/list-800-100-1.0-agg-reference.png and b/tests/visual_tests/images/list-800-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-800-100-1.0-cairo-reference.png b/tests/visual_tests/images/list-800-100-1.0-cairo-reference.png
index a946fcb..a429203 100644
Binary files a/tests/visual_tests/images/list-800-100-1.0-cairo-reference.png and b/tests/visual_tests/images/list-800-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/list-800-100-2.0-agg-reference.png b/tests/visual_tests/images/list-800-100-2.0-agg-reference.png
index db55e2e..764fb65 100644
Binary files a/tests/visual_tests/images/list-800-100-2.0-agg-reference.png and b/tests/visual_tests/images/list-800-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/list-800-100-2.0-cairo-reference.png b/tests/visual_tests/images/list-800-100-2.0-cairo-reference.png
index 1fa3a7b..0b5d5b7 100644
Binary files a/tests/visual_tests/images/list-800-100-2.0-cairo-reference.png and b/tests/visual_tests/images/list-800-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/map-background-image-compositing-512-512-1.0-agg-reference.png b/tests/visual_tests/images/map-background-image-compositing-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..1778b2e
Binary files /dev/null and b/tests/visual_tests/images/map-background-image-compositing-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/map-background-image-compositing-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/map-background-image-compositing-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..0553c74
Binary files /dev/null and b/tests/visual_tests/images/map-background-image-compositing-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/map-background-image-compositing-512-512-2.0-agg-reference.png b/tests/visual_tests/images/map-background-image-compositing-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..02b41e6
Binary files /dev/null and b/tests/visual_tests/images/map-background-image-compositing-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/map-background-image-compositing-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/map-background-image-compositing-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..6be8ee3
Binary files /dev/null and b/tests/visual_tests/images/map-background-image-compositing-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-collide-512-512-1.0-agg-reference.png b/tests/visual_tests/images/marker-collide-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..104e87d
Binary files /dev/null and b/tests/visual_tests/images/marker-collide-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-collide-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/marker-collide-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..5767f7f
Binary files /dev/null and b/tests/visual_tests/images/marker-collide-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-collide-512-512-2.0-agg-reference.png b/tests/visual_tests/images/marker-collide-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..95b84c6
Binary files /dev/null and b/tests/visual_tests/images/marker-collide-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-collide-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/marker-collide-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..c5d981e
Binary files /dev/null and b/tests/visual_tests/images/marker-collide-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-interior-position-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-interior-position-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..47aaa38
Binary files /dev/null and b/tests/visual_tests/images/marker-interior-position-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-interior-position-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-interior-position-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..71b3beb
Binary files /dev/null and b/tests/visual_tests/images/marker-interior-position-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-interior-position-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-interior-position-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..e280621
Binary files /dev/null and b/tests/visual_tests/images/marker-interior-position-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-interior-position-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-interior-position-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..22f8de2
Binary files /dev/null and b/tests/visual_tests/images/marker-interior-position-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-multi-policy-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-multi-policy-600-400-1.0-agg-reference.png
index 95af7f4..e6dc272 100644
Binary files a/tests/visual_tests/images/marker-multi-policy-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/marker-multi-policy-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-multi-policy-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-multi-policy-600-400-1.0-cairo-reference.png
index 73860a6..9f83b0e 100644
Binary files a/tests/visual_tests/images/marker-multi-policy-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-multi-policy-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-multi-policy-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-multi-policy-600-400-2.0-agg-reference.png
index dd89464..e45044e 100644
Binary files a/tests/visual_tests/images/marker-multi-policy-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/marker-multi-policy-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-multi-policy-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-multi-policy-600-400-2.0-cairo-reference.png
index 1b2a9ce..007f317 100644
Binary files a/tests/visual_tests/images/marker-multi-policy-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-multi-policy-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-agg-reference.png
index 1532ae9..36268a4 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-agg-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-cairo-reference.png
index 3745316..37ffc25 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-257-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-agg-reference.png
index 361576c..2f5c6b6 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-agg-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-cairo-reference.png
index ad535cf..2c9aa89 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-257-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-agg-reference.png
index 33219e9..987302d 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-agg-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-cairo-reference.png
index 75362bc..3c86658 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-400-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-agg-reference.png
index b1427ea..7047e23 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-agg-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-cairo-reference.png
index 22de19a..4f9a011 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-400-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-agg-reference.png
index 58fe94f..48ed8e6 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-cairo-reference.png
index de0885e..c0d01e3 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-agg-reference.png
index 20d527a..d064ce2 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-cairo-reference.png
index bf26841..1970f5d 100644
Binary files a/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-hex-grid-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-600-400-1.0-agg-reference.png
index fe33b15..6fbe8f5 100644
Binary files a/tests/visual_tests/images/marker-on-line-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/marker-on-line-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-600-400-1.0-cairo-reference.png
index 788a1aa..ac653fd 100644
Binary files a/tests/visual_tests/images/marker-on-line-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-line-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-600-400-2.0-agg-reference.png
index 587ad9f..4c7ceb8 100644
Binary files a/tests/visual_tests/images/marker-on-line-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/marker-on-line-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-600-400-2.0-cairo-reference.png
index efafa27..7d29f70 100644
Binary files a/tests/visual_tests/images/marker-on-line-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-line-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..dbb58e1
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..8ad8633
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..a928205
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..86e7371
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-avoid-edges-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..63fa8a6
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..baf6176
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..754d220
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..8132215
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..cf1c4e9
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..1d862a9
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..f558b77
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..4af718a
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-first-placement-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..f892d13
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..5f8bd35
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..69045d7
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..3e1c3cf
Binary files /dev/null and b/tests/visual_tests/images/marker-on-line-and-vertex-last-placement-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-agg-reference.png
index 6b0dbe6..4d7850f 100644
Binary files a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-cairo-reference.png
index d02bd8e..0318ea9 100644
Binary files a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-agg-reference.png
index 8861068..11fdf0e 100644
Binary files a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-cairo-reference.png
index a7523da..bcea41a 100644
Binary files a/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-on-line-spacing-eq-width-overlap-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-path-expression-500-100-1.0-agg-reference.png b/tests/visual_tests/images/marker-path-expression-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..bb59b5a
Binary files /dev/null and b/tests/visual_tests/images/marker-path-expression-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-path-expression-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/marker-path-expression-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..ba70ac9
Binary files /dev/null and b/tests/visual_tests/images/marker-path-expression-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-path-expression-500-100-2.0-agg-reference.png b/tests/visual_tests/images/marker-path-expression-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..146fafd
Binary files /dev/null and b/tests/visual_tests/images/marker-path-expression-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-path-expression-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/marker-path-expression-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..9180f89
Binary files /dev/null and b/tests/visual_tests/images/marker-path-expression-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-recenter-collide-256-128-1.0-agg-reference.png b/tests/visual_tests/images/marker-recenter-collide-256-128-1.0-agg-reference.png
new file mode 100644
index 0000000..ca602d3
Binary files /dev/null and b/tests/visual_tests/images/marker-recenter-collide-256-128-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-recenter-collide-256-128-1.0-cairo-reference.png b/tests/visual_tests/images/marker-recenter-collide-256-128-1.0-cairo-reference.png
new file mode 100644
index 0000000..9f36676
Binary files /dev/null and b/tests/visual_tests/images/marker-recenter-collide-256-128-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-recenter-collide-256-128-2.0-agg-reference.png b/tests/visual_tests/images/marker-recenter-collide-256-128-2.0-agg-reference.png
new file mode 100644
index 0000000..4c46d08
Binary files /dev/null and b/tests/visual_tests/images/marker-recenter-collide-256-128-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-recenter-collide-256-128-2.0-cairo-reference.png b/tests/visual_tests/images/marker-recenter-collide-256-128-2.0-cairo-reference.png
new file mode 100644
index 0000000..72d90e7
Binary files /dev/null and b/tests/visual_tests/images/marker-recenter-collide-256-128-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-empty-g-element-500-100-1.0-agg-reference.png b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..4d75272
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-empty-g-element-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..4346d90
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-empty-g-element-500-100-2.0-agg-reference.png b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..cec958b
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-empty-g-element-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..dff14d1
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-empty-g-element-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-opacity-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/marker-svg-opacity-500-100-1.0-cairo-reference.png
index b480bab..fe95711 100644
Binary files a/tests/visual_tests/images/marker-svg-opacity-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-svg-opacity-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-opacity-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/marker-svg-opacity-500-100-2.0-cairo-reference.png
index f1ba0d7..c428279 100644
Binary files a/tests/visual_tests/images/marker-svg-opacity-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-svg-opacity-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-opacity2-500-100-1.0-agg-reference.png b/tests/visual_tests/images/marker-svg-opacity2-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..334f9de
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-opacity2-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-opacity2-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/marker-svg-opacity2-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..995ef96
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-opacity2-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-opacity2-500-100-2.0-agg-reference.png b/tests/visual_tests/images/marker-svg-opacity2-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..47d03b4
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-opacity2-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-svg-opacity2-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/marker-svg-opacity2-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..12ae430
Binary files /dev/null and b/tests/visual_tests/images/marker-svg-opacity2-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-agg-reference.png b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..d3172ff
Binary files /dev/null and b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..cfea6cd
Binary files /dev/null and b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-2.0-agg-reference.png b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..787d863
Binary files /dev/null and b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..a8d00bf
Binary files /dev/null and b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-vs-point-512-512-1.0-agg-reference.png b/tests/visual_tests/images/marker-vs-point-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..fc0e96c
Binary files /dev/null and b/tests/visual_tests/images/marker-vs-point-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-vs-point-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/marker-vs-point-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..be9a21e
Binary files /dev/null and b/tests/visual_tests/images/marker-vs-point-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-vs-point-512-512-2.0-agg-reference.png b/tests/visual_tests/images/marker-vs-point-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..73fb609
Binary files /dev/null and b/tests/visual_tests/images/marker-vs-point-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-vs-point-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/marker-vs-point-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..9745f0c
Binary files /dev/null and b/tests/visual_tests/images/marker-vs-point-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-whole-multi-polygon-512-512-1.0-agg-reference.png b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..302fa44
Binary files /dev/null and b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-whole-multi-polygon-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..8193aad
Binary files /dev/null and b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-whole-multi-polygon-512-512-2.0-agg-reference.png b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..f40d9fa
Binary files /dev/null and b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-whole-multi-polygon-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..b71e924
Binary files /dev/null and b/tests/visual_tests/images/marker-whole-multi-polygon-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-257-256-1.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-257-256-1.0-agg-reference.png
index 1b6ed09..ac11112 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-257-256-1.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-257-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-257-256-1.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-257-256-1.0-cairo-reference.png
index 761743e..a02752e 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-257-256-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-257-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-257-256-2.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-257-256-2.0-agg-reference.png
index 8f44e02..e1698d8 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-257-256-2.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-257-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-257-256-2.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-257-256-2.0-cairo-reference.png
index 018a553..2b4a902 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-257-256-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-257-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-400-600-1.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-400-600-1.0-agg-reference.png
index 70f35fc..cb0f2a1 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-400-600-1.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-400-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-400-600-1.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-400-600-1.0-cairo-reference.png
index e991deb..10431d2 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-400-600-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-400-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-400-600-2.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-400-600-2.0-agg-reference.png
index b6e0c11..fb29c30 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-400-600-2.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-400-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-400-600-2.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-400-600-2.0-cairo-reference.png
index a4aec07..db9e2a3 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-400-600-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-400-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-600-400-1.0-agg-reference.png
index 77ab979..75256d5 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-600-400-1.0-cairo-reference.png
index a7bc35a..3eb12e9 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-600-400-2.0-agg-reference.png
index 77b2dcf..602da33 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-600-400-2.0-cairo-reference.png
index 784c23c..d541d33 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-agg-reference.png
index 24c5871..6748209 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-cairo-reference.png
index ffa40ac..a02752e 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-agg-reference.png
index 1594a24..7c0bc70 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-cairo-reference.png
index 018a553..2b4a902 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-257-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-agg-reference.png
index 5b28189..ac6008a 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-cairo-reference.png
index cbfda12..10431d2 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-agg-reference.png
index c1b3387..1281cd3 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-cairo-reference.png
index fb4489a..db9e2a3 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-400-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-agg-reference.png
index d66a6a8..d4a31bb 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-cairo-reference.png
index cf585a9..3eb12e9 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-agg-reference.png
index c968382..9a06fdb 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-cairo-reference.png
index b242281..d541d33 100644
Binary files a/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/marker-with-background-image-and-hsla-transform-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-1.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..281f78d
Binary files /dev/null and b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..fe9f864
Binary files /dev/null and b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-2.0-agg-reference.png b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..76bd8c2
Binary files /dev/null and b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..2a12a50
Binary files /dev/null and b/tests/visual_tests/images/marker-with-background-image-linear-comp-op-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/marker_line_placement_on_points-500-100-1.0-agg-reference.png b/tests/visual_tests/images/marker_line_placement_on_points-500-100-1.0-agg-reference.png
index bfda813..084beba 100644
Binary files a/tests/visual_tests/images/marker_line_placement_on_points-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/marker_line_placement_on_points-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/marker_line_placement_on_points-500-100-2.0-agg-reference.png b/tests/visual_tests/images/marker_line_placement_on_points-500-100-2.0-agg-reference.png
index 7018124..9ab7627 100644
Binary files a/tests/visual_tests/images/marker_line_placement_on_points-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/marker_line_placement_on_points-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-1.0-agg-reference.png b/tests/visual_tests/images/orientation-800-200-1.0-agg-reference.png
new file mode 100644
index 0000000..0bd22d3
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/orientation-800-200-1.0-cairo-reference.png
new file mode 100644
index 0000000..a522756
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-2.0-agg-reference.png b/tests/visual_tests/images/orientation-800-200-2.0-agg-reference.png
new file mode 100644
index 0000000..285d8c7
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/orientation-800-200-2.0-cairo-reference.png
new file mode 100644
index 0000000..96b88ca
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-256-256-1.0-agg-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..1b86d1f
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..9cbecbe
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-256-256-2.0-agg-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..f26141a
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..c0cce9d
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-1.0-agg-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..92ce3f0
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..89defea
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-2.0-agg-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..c7e0cda
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..1a29308
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-expressions-all-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-1.0-agg-reference.png b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-1.0-agg-reference.png
new file mode 100644
index 0000000..ff046ca
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-1.0-cairo-reference.png b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-1.0-cairo-reference.png
new file mode 100644
index 0000000..124833e
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-2.0-agg-reference.png b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-2.0-agg-reference.png
new file mode 100644
index 0000000..ad8ebe8
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-2.0-cairo-reference.png b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-2.0-cairo-reference.png
new file mode 100644
index 0000000..6828333
Binary files /dev/null and b/tests/visual_tests/images/point-symbolizer-overlap-placement-expr-500-500-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-1.0-agg-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..02598d6
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..ea09d5d
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-2.0-agg-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..99c858e
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..2341913
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-1.0-agg-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..931d6fd
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..d92d512
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-2.0-agg-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..f328174
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..10464ad
Binary files /dev/null and b/tests/visual_tests/images/polygon-symbolizer-expressions-all-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png
new file mode 100644
index 0000000..6e5bb8e
Binary files /dev/null and b/tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-1.0-cairo-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-1.0-cairo-reference.png
new file mode 100644
index 0000000..1d2f189
Binary files /dev/null and b/tests/visual_tests/images/polygon-winding-order-300-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-2.0-agg-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-2.0-agg-reference.png
new file mode 100644
index 0000000..bf60cb3
Binary files /dev/null and b/tests/visual_tests/images/polygon-winding-order-300-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png
new file mode 100644
index 0000000..94dffb0
Binary files /dev/null and b/tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/postgis-inline-512-512-1.0-agg-reference.png b/tests/visual_tests/images/postgis-inline-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..9f7157f
Binary files /dev/null and b/tests/visual_tests/images/postgis-inline-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/postgis-inline-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/postgis-inline-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..0671bcd
Binary files /dev/null and b/tests/visual_tests/images/postgis-inline-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/postgis-inline-512-512-2.0-agg-reference.png b/tests/visual_tests/images/postgis-inline-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..5265777
Binary files /dev/null and b/tests/visual_tests/images/postgis-inline-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/postgis-inline-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/postgis-inline-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..87f6511
Binary files /dev/null and b/tests/visual_tests/images/postgis-inline-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/python-Format-reference.png b/tests/visual_tests/images/python-Format-reference.png
new file mode 100644
index 0000000..95a0eea
Binary files /dev/null and b/tests/visual_tests/images/python-Format-reference.png differ
diff --git a/tests/visual_tests/images/python-IfElse-reference.png b/tests/visual_tests/images/python-IfElse-reference.png
new file mode 100644
index 0000000..d71da4f
Binary files /dev/null and b/tests/visual_tests/images/python-IfElse-reference.png differ
diff --git a/tests/visual_tests/images/python-List-reference.png b/tests/visual_tests/images/python-List-reference.png
new file mode 100644
index 0000000..2be43fc
Binary files /dev/null and b/tests/visual_tests/images/python-List-reference.png differ
diff --git a/tests/visual_tests/images/python-MyText-reference.png b/tests/visual_tests/images/python-MyText-reference.png
new file mode 100644
index 0000000..775f4bc
Binary files /dev/null and b/tests/visual_tests/images/python-MyText-reference.png differ
diff --git a/tests/visual_tests/images/python-TextNode-reference.png b/tests/visual_tests/images/python-TextNode-reference.png
new file mode 100644
index 0000000..db6bfa2
Binary files /dev/null and b/tests/visual_tests/images/python-TextNode-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..1a0e0ac
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..e727a0f
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..1a0e0ac
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..e727a0f
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..316d8bd
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..2850cd0
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..316d8bd
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..2850cd0
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..dd575b5
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..eccd824
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..dd575b5
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..eccd824
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..1ec158d
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..1ec158d
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..b759889
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-agg-reference.png b/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..b759889
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_colorizer-512-512-1.0-agg-reference.png b/tests/visual_tests/images/raster_colorizer-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster_colorizer-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster_colorizer-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster_colorizer-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster_colorizer-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_colorizer-512-512-2.0-agg-reference.png b/tests/visual_tests/images/raster_colorizer-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster_colorizer-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster_colorizer-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster_colorizer-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..dec77cf
Binary files /dev/null and b/tests/visual_tests/images/raster_colorizer-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_symbolizer-512-512-1.0-agg-reference.png b/tests/visual_tests/images/raster_symbolizer-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..a7c34dc
Binary files /dev/null and b/tests/visual_tests/images/raster_symbolizer-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster_symbolizer-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster_symbolizer-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..a7c34dc
Binary files /dev/null and b/tests/visual_tests/images/raster_symbolizer-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_symbolizer-512-512-2.0-agg-reference.png b/tests/visual_tests/images/raster_symbolizer-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..a7c34dc
Binary files /dev/null and b/tests/visual_tests/images/raster_symbolizer-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/raster_symbolizer-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster_symbolizer-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..a7c34dc
Binary files /dev/null and b/tests/visual_tests/images/raster_symbolizer-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-1-750-250-1.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-1-750-250-1.0-agg-reference.png
new file mode 100644
index 0000000..9e5fbda
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-1-750-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-1-750-250-1.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-1-750-250-1.0-cairo-reference.png
new file mode 100644
index 0000000..1cdc0b8
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-1-750-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-1-750-250-2.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-1-750-250-2.0-agg-reference.png
new file mode 100644
index 0000000..08b873a
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-1-750-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-1-750-250-2.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-1-750-250-2.0-cairo-reference.png
new file mode 100644
index 0000000..8018224
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-1-750-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-2-750-250-1.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-2-750-250-1.0-agg-reference.png
new file mode 100644
index 0000000..a9371c2
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-2-750-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-2-750-250-1.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-2-750-250-1.0-cairo-reference.png
new file mode 100644
index 0000000..e5adf19
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-2-750-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-2-750-250-2.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-2-750-250-2.0-agg-reference.png
new file mode 100644
index 0000000..eef52f5
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-2-750-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-2-750-250-2.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-2-750-250-2.0-cairo-reference.png
new file mode 100644
index 0000000..0fe149c
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-2-750-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-3-750-250-1.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-3-750-250-1.0-agg-reference.png
new file mode 100644
index 0000000..526b793
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-3-750-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-3-750-250-1.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-3-750-250-1.0-cairo-reference.png
new file mode 100644
index 0000000..a454c13
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-3-750-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-3-750-250-2.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-3-750-250-2.0-agg-reference.png
new file mode 100644
index 0000000..b40a7f2
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-3-750-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-3-750-250-2.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-3-750-250-2.0-cairo-reference.png
new file mode 100644
index 0000000..5a98da9
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-3-750-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-4-750-250-1.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-4-750-250-1.0-agg-reference.png
new file mode 100644
index 0000000..185b735
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-4-750-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-4-750-250-1.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-4-750-250-1.0-cairo-reference.png
new file mode 100644
index 0000000..850c8a5
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-4-750-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-4-750-250-2.0-agg-reference.png b/tests/visual_tests/images/repeat-labels-4-750-250-2.0-agg-reference.png
new file mode 100644
index 0000000..31b540a
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-4-750-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/repeat-labels-4-750-250-2.0-cairo-reference.png b/tests/visual_tests/images/repeat-labels-4-750-250-2.0-cairo-reference.png
new file mode 100644
index 0000000..9be179a
Binary files /dev/null and b/tests/visual_tests/images/repeat-labels-4-750-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-grouped-rendering-600-600-1.0-agg-reference.png b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-1.0-agg-reference.png
new file mode 100644
index 0000000..7256f46
Binary files /dev/null and b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-grouped-rendering-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-1.0-cairo-reference.png
new file mode 100644
index 0000000..79f49c7
Binary files /dev/null and b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-grouped-rendering-600-600-2.0-agg-reference.png b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-2.0-agg-reference.png
new file mode 100644
index 0000000..b832c0b
Binary files /dev/null and b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-grouped-rendering-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-2.0-cairo-reference.png
new file mode 100644
index 0000000..e913633
Binary files /dev/null and b/tests/visual_tests/images/road-casings-grouped-rendering-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-1.0-agg-reference.png b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-1.0-agg-reference.png
new file mode 100644
index 0000000..3dc0a23
Binary files /dev/null and b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-1.0-cairo-reference.png
new file mode 100644
index 0000000..3bc431d
Binary files /dev/null and b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-2.0-agg-reference.png b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-2.0-agg-reference.png
new file mode 100644
index 0000000..3134581
Binary files /dev/null and b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-2.0-cairo-reference.png
new file mode 100644
index 0000000..908e738
Binary files /dev/null and b/tests/visual_tests/images/road-casings-non-grouped-rendering-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/rtl-point-200-200-1.0-agg-reference.png b/tests/visual_tests/images/rtl-point-200-200-1.0-agg-reference.png
index 398227b..e70b694 100644
Binary files a/tests/visual_tests/images/rtl-point-200-200-1.0-agg-reference.png and b/tests/visual_tests/images/rtl-point-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/rtl-point-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/rtl-point-200-200-1.0-cairo-reference.png
index eb53cdf..15483d0 100644
Binary files a/tests/visual_tests/images/rtl-point-200-200-1.0-cairo-reference.png and b/tests/visual_tests/images/rtl-point-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/rtl-point-200-200-2.0-agg-reference.png b/tests/visual_tests/images/rtl-point-200-200-2.0-agg-reference.png
index f54e061..ab06fb3 100644
Binary files a/tests/visual_tests/images/rtl-point-200-200-2.0-agg-reference.png and b/tests/visual_tests/images/rtl-point-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/rtl-point-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/rtl-point-200-200-2.0-cairo-reference.png
index b028a22..bf030b8 100644
Binary files a/tests/visual_tests/images/rtl-point-200-200-2.0-cairo-reference.png and b/tests/visual_tests/images/rtl-point-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-1.0-agg-reference.png b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..28824f4
Binary files /dev/null and b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..435a92c
Binary files /dev/null and b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-2.0-agg-reference.png b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..c694227
Binary files /dev/null and b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..3a74eb1
Binary files /dev/null and b/tests/visual_tests/images/shield-on-line-and-avoid-edges-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-agg-reference.png b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-agg-reference.png
index 7eea948..90783f5 100644
Binary files a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-cairo-reference.png
index 49bfde8..d3ea323 100644
Binary files a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-agg-reference.png b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-agg-reference.png
index 627acd9..64427ea 100644
Binary files a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-cairo-reference.png
index 61e332d..bab66c3 100644
Binary files a/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/shield-on-line-spacing-eq-width-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-polygon-600-400-1.0-agg-reference.png b/tests/visual_tests/images/shield-on-polygon-600-400-1.0-agg-reference.png
index b5dd8e4..e938102 100644
Binary files a/tests/visual_tests/images/shield-on-polygon-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/shield-on-polygon-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-polygon-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/shield-on-polygon-600-400-1.0-cairo-reference.png
index f486e6c..cc77764 100644
Binary files a/tests/visual_tests/images/shield-on-polygon-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/shield-on-polygon-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-polygon-600-400-2.0-agg-reference.png b/tests/visual_tests/images/shield-on-polygon-600-400-2.0-agg-reference.png
index 87fa8b7..3afdfbd 100644
Binary files a/tests/visual_tests/images/shield-on-polygon-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/shield-on-polygon-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shield-on-polygon-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/shield-on-polygon-600-400-2.0-cairo-reference.png
index 0d4c6a7..96075a3 100644
Binary files a/tests/visual_tests/images/shield-on-polygon-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/shield-on-polygon-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-agg-reference.png
index 2b9ba58..396d137 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-cairo-reference.png
index 516b5f0..b047ed2 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-490-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-agg-reference.png
index 94211f5..6ca876a 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-cairo-reference.png
index 2ee0bce..945d240 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-agg-reference.png
index 41f4b13..3a95ae3 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-cairo-reference.png
index 35268e7..ae527fd 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-495-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-agg-reference.png
index c94b146..9e9e1ea 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-cairo-reference.png
index 127e454..dd05db8 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-agg-reference.png
index 2ea1705..36cb347 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-cairo-reference.png
index 68edb26..ed8a9f2 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-agg-reference.png
index fd216a1..5fae0ce 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-cairo-reference.png
index 9baf48b..e3627ec 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-agg-reference.png
index e287e8b..93350ee 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-cairo-reference.png
index d324407..08819ff 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-498-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-agg-reference.png
index e2d1ca2..e8eb1fb 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-cairo-reference.png
index 3bd5dd3..2433d55 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-agg-reference.png
index 9ebb529..4ab458d 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-cairo-reference.png
index 64d0fb1..1bf3e32 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-agg-reference.png
index 76fe4cd..94b7023 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-cairo-reference.png
index 2aea04e..5407006 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-agg-reference.png
index 0f8d25f..ce717a6 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-cairo-reference.png
index 544b04b..0fd05f9 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-agg-reference.png
index 86b4524..c14823e 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-cairo-reference.png
index 5cd94ab..96057d2 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-agg-reference.png
index 45d02d5..a5a4060 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-cairo-reference.png
index ae8e70f..f8e1233 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-501-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-agg-reference.png
index 29a472e..65ecbe7 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-cairo-reference.png
index f6bd195..b17d91e 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-agg-reference.png
index cd21b76..929a3fe 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-cairo-reference.png
index a90aadf..a34b73a 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-agg-reference.png
index b8ba391..d68ca3e 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-cairo-reference.png
index 36cdec4..79e392a 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-agg-reference.png
index e8d5231..7841a97 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-cairo-reference.png
index a1f5fb3..6f6eef1 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-505-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-agg-reference.png
index a889a93..b25d596 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-cairo-reference.png
index ef1b048..f088573 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-agg-reference.png
index ea85f73..c267bce 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-cairo-reference.png
index 5e778db..af491e5 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-510-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-agg-reference.png
index aac1ebf..2240e8a 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-agg-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-cairo-reference.png
index c1c0303..1aa7fbd 100644
Binary files a/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-cairo-reference.png and b/tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-agg-reference.png
new file mode 100644
index 0000000..9c322cd
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..31cab03
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-agg-reference.png
new file mode 100644
index 0000000..ae4aea7
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..3ed9e82
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-agg-reference.png
new file mode 100644
index 0000000..db91816
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..2e18e9a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-agg-reference.png
new file mode 100644
index 0000000..302465b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..3f1f27e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-agg-reference.png
new file mode 100644
index 0000000..37e55a1
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..ff57e06
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-agg-reference.png
new file mode 100644
index 0000000..af3ff8a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..bfd9a91
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-agg-reference.png
new file mode 100644
index 0000000..31dd2fb
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..b335a04
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-agg-reference.png
new file mode 100644
index 0000000..04be827
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..6b57c53
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-agg-reference.png
new file mode 100644
index 0000000..db5946f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..89875cc
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-agg-reference.png
new file mode 100644
index 0000000..4e9f93a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..df0cff0
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..9607221
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..d36e078
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..a372ead
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..d6d1d75
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-agg-reference.png
new file mode 100644
index 0000000..a992508
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..16d4352
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-agg-reference.png
new file mode 100644
index 0000000..dbcc187
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..7bfe234
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-agg-reference.png
new file mode 100644
index 0000000..4c8e27d
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..150aa87
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-agg-reference.png
new file mode 100644
index 0000000..5745518
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..76209cf
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-agg-reference.png
new file mode 100644
index 0000000..63a4cd2
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..ed5dcf9
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-agg-reference.png
new file mode 100644
index 0000000..b4f97aa
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..c3ec0b9
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-agg-reference.png
new file mode 100644
index 0000000..78a30e3
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..6a0967c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-agg-reference.png
new file mode 100644
index 0000000..dc4da3e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..aaf5534
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-agg-reference.png
new file mode 100644
index 0000000..9566143
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..ca496b1
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-agg-reference.png
new file mode 100644
index 0000000..2897893
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..bdf60ff
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-agg-reference.png
new file mode 100644
index 0000000..a15dfe4
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..6ec66fb
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-agg-reference.png
new file mode 100644
index 0000000..7977c54
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..4bcee59
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-agg-reference.png
new file mode 100644
index 0000000..5c41e60
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..9f0c794
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-agg-reference.png
new file mode 100644
index 0000000..4f7df8b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..b267d52
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-agg-reference.png
new file mode 100644
index 0000000..cfca099
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..60f298e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-agg-reference.png
new file mode 100644
index 0000000..7fb6d68
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..bf92b48
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-agg-reference.png
new file mode 100644
index 0000000..63746e8
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..27a9277
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-agg-reference.png
new file mode 100644
index 0000000..5dd3ae1
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..46c310e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..790f226
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..20a8744
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..c48e21b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..5e305ef
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-agg-reference.png
new file mode 100644
index 0000000..d1997da
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..9eb3212
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-agg-reference.png
new file mode 100644
index 0000000..6505613
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..32c3fcc
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-agg-reference.png
new file mode 100644
index 0000000..426adea
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..d34e115
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-agg-reference.png
new file mode 100644
index 0000000..15f0bd4
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..40b60ef
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-agg-reference.png
new file mode 100644
index 0000000..fe6e028
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..5d9dcbf
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-agg-reference.png
new file mode 100644
index 0000000..ae4e0d1
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..d43388e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-agg-reference.png
new file mode 100644
index 0000000..6e10461
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..df801fa
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-agg-reference.png
new file mode 100644
index 0000000..4e38b7c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..4183d00
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-agg-reference.png
new file mode 100644
index 0000000..6cc0b01
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..c94477a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-agg-reference.png
new file mode 100644
index 0000000..0ef56f7
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..b08fce6
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-agg-reference.png
new file mode 100644
index 0000000..6cd8aa3
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..88fc8dc
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-agg-reference.png
new file mode 100644
index 0000000..8b93c3a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..4528700
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-agg-reference.png
new file mode 100644
index 0000000..e7baf91
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..ebcc25d
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-agg-reference.png
new file mode 100644
index 0000000..428561a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..a68576c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-agg-reference.png
new file mode 100644
index 0000000..d2b58e1
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..a221b90
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-agg-reference.png
new file mode 100644
index 0000000..21d8d03
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..91a89f5
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-agg-reference.png
new file mode 100644
index 0000000..354977f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..b9aad12
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-agg-reference.png
new file mode 100644
index 0000000..ad0900b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..a9d49e5
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..3bb6c2e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..a3c4c01
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..0cd9c0c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..14b34e8
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-agg-reference.png
new file mode 100644
index 0000000..a1136e3
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..fe18499
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-agg-reference.png
new file mode 100644
index 0000000..706b3e0
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..6f2d7b6
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-agg-reference.png
new file mode 100644
index 0000000..e263276
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..049f077
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-agg-reference.png
new file mode 100644
index 0000000..b42566f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..b9299b5
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-agg-reference.png
new file mode 100644
index 0000000..9085ecb
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..47e5d6b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-agg-reference.png
new file mode 100644
index 0000000..ae2c349
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..3359ff7
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-agg-reference.png
new file mode 100644
index 0000000..8374ecd
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..7159e2e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-agg-reference.png
new file mode 100644
index 0000000..de87e55
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..0dcb533
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-100-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-100-100-1.0-agg-reference.png
index 3e1a7ef..1c8424b 100644
Binary files a/tests/visual_tests/images/simple-100-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-100-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-100-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-100-100-1.0-cairo-reference.png
index aa9c9ac..2490ad3 100644
Binary files a/tests/visual_tests/images/simple-100-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-100-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-100-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-100-100-2.0-agg-reference.png
index b725698..b3d13d9 100644
Binary files a/tests/visual_tests/images/simple-100-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-100-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-100-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-100-100-2.0-cairo-reference.png
index e3cfc2b..58089e4 100644
Binary files a/tests/visual_tests/images/simple-100-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-100-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-150-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-150-100-1.0-agg-reference.png
index 8fa7ed8..7cbce97 100644
Binary files a/tests/visual_tests/images/simple-150-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-150-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-150-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-150-100-1.0-cairo-reference.png
index 22ebced..cd4ab50 100644
Binary files a/tests/visual_tests/images/simple-150-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-150-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-150-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-150-100-2.0-agg-reference.png
index 1348abc..31e4d13 100644
Binary files a/tests/visual_tests/images/simple-150-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-150-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-150-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-150-100-2.0-cairo-reference.png
index 4ba583e..48caeb4 100644
Binary files a/tests/visual_tests/images/simple-150-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-150-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-250-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-250-100-1.0-agg-reference.png
index a43a483..fdb63c8 100644
Binary files a/tests/visual_tests/images/simple-250-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-250-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-250-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-250-100-1.0-cairo-reference.png
index e247fb3..e7c7a5d 100644
Binary files a/tests/visual_tests/images/simple-250-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-250-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-250-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-250-100-2.0-agg-reference.png
index 1c40458..f29a48d 100644
Binary files a/tests/visual_tests/images/simple-250-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-250-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-250-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-250-100-2.0-cairo-reference.png
index aa91d6a..14ecb67 100644
Binary files a/tests/visual_tests/images/simple-250-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-250-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-300-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-300-100-1.0-agg-reference.png
index 79d3885..6d15aab 100644
Binary files a/tests/visual_tests/images/simple-300-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-300-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-300-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-300-100-1.0-cairo-reference.png
index 37650c7..9debca1 100644
Binary files a/tests/visual_tests/images/simple-300-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-300-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-300-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-300-100-2.0-agg-reference.png
index e86daa7..d54df74 100644
Binary files a/tests/visual_tests/images/simple-300-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-300-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-300-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-300-100-2.0-cairo-reference.png
index 901d45f..2d811af 100644
Binary files a/tests/visual_tests/images/simple-300-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-300-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-400-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-400-100-1.0-agg-reference.png
index 11b03ca..3a2fda1 100644
Binary files a/tests/visual_tests/images/simple-400-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-400-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-400-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-400-100-1.0-cairo-reference.png
index f34cb9a..a8047e0 100644
Binary files a/tests/visual_tests/images/simple-400-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-400-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-400-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-400-100-2.0-agg-reference.png
index b9efaa3..060d334 100644
Binary files a/tests/visual_tests/images/simple-400-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-400-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-400-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-400-100-2.0-cairo-reference.png
index aab6f1a..a777040 100644
Binary files a/tests/visual_tests/images/simple-400-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-400-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-600-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-600-100-1.0-agg-reference.png
index ba094f5..3623404 100644
Binary files a/tests/visual_tests/images/simple-600-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-600-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-600-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-600-100-1.0-cairo-reference.png
index 1a41fd7..f58181b 100644
Binary files a/tests/visual_tests/images/simple-600-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-600-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-600-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-600-100-2.0-agg-reference.png
index 5f32ee6..5bfde25 100644
Binary files a/tests/visual_tests/images/simple-600-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-600-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-600-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-600-100-2.0-cairo-reference.png
index 653b3e6..0de2346 100644
Binary files a/tests/visual_tests/images/simple-600-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-600-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-800-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-800-100-1.0-agg-reference.png
index 224f42e..748d997 100644
Binary files a/tests/visual_tests/images/simple-800-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-800-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-800-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-800-100-1.0-cairo-reference.png
index 2bf3a1b..273b914 100644
Binary files a/tests/visual_tests/images/simple-800-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-800-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-800-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-800-100-2.0-agg-reference.png
index d1f9fcd..aea49db 100644
Binary files a/tests/visual_tests/images/simple-800-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-800-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-800-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-800-100-2.0-cairo-reference.png
index 644d354..908a992 100644
Binary files a/tests/visual_tests/images/simple-800-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-800-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-E-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-E-500-100-1.0-agg-reference.png
index daba51b..38e97ca 100644
Binary files a/tests/visual_tests/images/simple-E-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-E-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-E-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-E-500-100-1.0-cairo-reference.png
index daba51b..4f987d5 100644
Binary files a/tests/visual_tests/images/simple-E-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-E-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-E-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-E-500-100-2.0-agg-reference.png
index c1d8dd1..8de9e05 100644
Binary files a/tests/visual_tests/images/simple-E-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-E-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-E-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-E-500-100-2.0-cairo-reference.png
index 08beb29..c8dc04b 100644
Binary files a/tests/visual_tests/images/simple-E-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-E-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-N-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-N-500-100-1.0-agg-reference.png
index 49c6748..b9a246d 100644
Binary files a/tests/visual_tests/images/simple-N-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-N-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-N-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-N-500-100-1.0-cairo-reference.png
index 49c6748..c491c26 100644
Binary files a/tests/visual_tests/images/simple-N-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-N-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-N-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-N-500-100-2.0-agg-reference.png
index 71cb4ab..bbacdc0 100644
Binary files a/tests/visual_tests/images/simple-N-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-N-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-N-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-N-500-100-2.0-cairo-reference.png
index e3b64c3..ee99dc4 100644
Binary files a/tests/visual_tests/images/simple-N-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-N-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-NE-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-NE-500-100-1.0-agg-reference.png
index bb99312..18f8b94 100644
Binary files a/tests/visual_tests/images/simple-NE-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-NE-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-NE-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-NE-500-100-1.0-cairo-reference.png
index bb99312..f2a5ce7 100644
Binary files a/tests/visual_tests/images/simple-NE-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-NE-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-NE-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-NE-500-100-2.0-agg-reference.png
index e2b538a..5c5669d 100644
Binary files a/tests/visual_tests/images/simple-NE-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-NE-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-NE-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-NE-500-100-2.0-cairo-reference.png
index ff74eab..6a44e27 100644
Binary files a/tests/visual_tests/images/simple-NE-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-NE-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-NW-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-NW-500-100-1.0-agg-reference.png
index defbef8..b0c3049 100644
Binary files a/tests/visual_tests/images/simple-NW-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-NW-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-NW-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-NW-500-100-1.0-cairo-reference.png
index defbef8..ee3dff1 100644
Binary files a/tests/visual_tests/images/simple-NW-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-NW-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-NW-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-NW-500-100-2.0-agg-reference.png
index 20ea028..faf42d8 100644
Binary files a/tests/visual_tests/images/simple-NW-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-NW-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-NW-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-NW-500-100-2.0-cairo-reference.png
index 0b82417..aa298d3 100644
Binary files a/tests/visual_tests/images/simple-NW-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-NW-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-S-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-S-500-100-1.0-agg-reference.png
index e3cbe05..8e5c8ab 100644
Binary files a/tests/visual_tests/images/simple-S-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-S-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-S-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-S-500-100-1.0-cairo-reference.png
index e3cbe05..a383860 100644
Binary files a/tests/visual_tests/images/simple-S-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-S-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-S-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-S-500-100-2.0-agg-reference.png
index 1cd7afd..882a9a5 100644
Binary files a/tests/visual_tests/images/simple-S-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-S-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-S-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-S-500-100-2.0-cairo-reference.png
index a164caf..136809b 100644
Binary files a/tests/visual_tests/images/simple-S-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-S-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-SE-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-SE-500-100-1.0-agg-reference.png
index 9c7cb25..6b01c14 100644
Binary files a/tests/visual_tests/images/simple-SE-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-SE-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-SE-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-SE-500-100-1.0-cairo-reference.png
index 9c7cb25..b4d0941 100644
Binary files a/tests/visual_tests/images/simple-SE-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-SE-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-SE-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-SE-500-100-2.0-agg-reference.png
index 9f151a4..9c8e276 100644
Binary files a/tests/visual_tests/images/simple-SE-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-SE-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-SE-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-SE-500-100-2.0-cairo-reference.png
index 02c19d9..ff1ae27 100644
Binary files a/tests/visual_tests/images/simple-SE-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-SE-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-SW-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-SW-500-100-1.0-agg-reference.png
index 558a45a..ff59e60 100644
Binary files a/tests/visual_tests/images/simple-SW-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-SW-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-SW-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-SW-500-100-1.0-cairo-reference.png
index 558a45a..e4d4808 100644
Binary files a/tests/visual_tests/images/simple-SW-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-SW-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-SW-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-SW-500-100-2.0-agg-reference.png
index fa17e30..39a5494 100644
Binary files a/tests/visual_tests/images/simple-SW-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-SW-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-SW-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-SW-500-100-2.0-cairo-reference.png
index b71f444..13979d2 100644
Binary files a/tests/visual_tests/images/simple-SW-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-SW-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-W-500-100-1.0-agg-reference.png b/tests/visual_tests/images/simple-W-500-100-1.0-agg-reference.png
index 0a6b576..69dd08d 100644
Binary files a/tests/visual_tests/images/simple-W-500-100-1.0-agg-reference.png and b/tests/visual_tests/images/simple-W-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-W-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/simple-W-500-100-1.0-cairo-reference.png
index 0a6b576..24d09a0 100644
Binary files a/tests/visual_tests/images/simple-W-500-100-1.0-cairo-reference.png and b/tests/visual_tests/images/simple-W-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-W-500-100-2.0-agg-reference.png b/tests/visual_tests/images/simple-W-500-100-2.0-agg-reference.png
index 5a19d58..2fbaf5b 100644
Binary files a/tests/visual_tests/images/simple-W-500-100-2.0-agg-reference.png and b/tests/visual_tests/images/simple-W-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-W-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/simple-W-500-100-2.0-cairo-reference.png
index e49aeef..f8e3010 100644
Binary files a/tests/visual_tests/images/simple-W-500-100-2.0-cairo-reference.png and b/tests/visual_tests/images/simple-W-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-shield-600-400-1.0-agg-reference.png b/tests/visual_tests/images/simple-shield-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..aedabdf
Binary files /dev/null and b/tests/visual_tests/images/simple-shield-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-shield-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/simple-shield-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..baa7e2f
Binary files /dev/null and b/tests/visual_tests/images/simple-shield-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/simple-shield-600-400-2.0-agg-reference.png b/tests/visual_tests/images/simple-shield-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..b82e914
Binary files /dev/null and b/tests/visual_tests/images/simple-shield-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/simple-shield-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/simple-shield-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..baa7e2f
Binary files /dev/null and b/tests/visual_tests/images/simple-shield-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-1.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..8ba187d
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..998b329
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-2.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..8ba187d
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..998b329
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,0-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-1.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..2ecb9ee
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..cc2ac31
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-2.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..2ecb9ee
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..cc2ac31
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-0,1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-1.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..56a8ef5
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..a0d5ed1
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-2.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..56a8ef5
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..a0d5ed1
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,0-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-1.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..0e1cd5b
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..cdf19e8
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-2.0-agg-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..0e1cd5b
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..cdf19e8
Binary files /dev/null and b/tests/visual_tests/images/style-level-compositing-tiled-1,1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-allow-overlap-expr-500-500-1.0-agg-reference.png b/tests/visual_tests/images/text-allow-overlap-expr-500-500-1.0-agg-reference.png
new file mode 100644
index 0000000..f8ce913
Binary files /dev/null and b/tests/visual_tests/images/text-allow-overlap-expr-500-500-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-allow-overlap-expr-500-500-1.0-cairo-reference.png b/tests/visual_tests/images/text-allow-overlap-expr-500-500-1.0-cairo-reference.png
new file mode 100644
index 0000000..e04ebca
Binary files /dev/null and b/tests/visual_tests/images/text-allow-overlap-expr-500-500-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-allow-overlap-expr-500-500-2.0-agg-reference.png b/tests/visual_tests/images/text-allow-overlap-expr-500-500-2.0-agg-reference.png
new file mode 100644
index 0000000..d37986a
Binary files /dev/null and b/tests/visual_tests/images/text-allow-overlap-expr-500-500-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-allow-overlap-expr-500-500-2.0-cairo-reference.png b/tests/visual_tests/images/text-allow-overlap-expr-500-500-2.0-cairo-reference.png
new file mode 100644
index 0000000..5b69fdf
Binary files /dev/null and b/tests/visual_tests/images/text-allow-overlap-expr-500-500-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bengali-800-100-1.0-agg-reference.png b/tests/visual_tests/images/text-bengali-800-100-1.0-agg-reference.png
new file mode 100644
index 0000000..c8f36ea
Binary files /dev/null and b/tests/visual_tests/images/text-bengali-800-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bengali-800-100-1.0-cairo-reference.png b/tests/visual_tests/images/text-bengali-800-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..5dff0d2
Binary files /dev/null and b/tests/visual_tests/images/text-bengali-800-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bengali-800-100-2.0-agg-reference.png b/tests/visual_tests/images/text-bengali-800-100-2.0-agg-reference.png
new file mode 100644
index 0000000..605330f
Binary files /dev/null and b/tests/visual_tests/images/text-bengali-800-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bengali-800-100-2.0-cairo-reference.png b/tests/visual_tests/images/text-bengali-800-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..569ff91
Binary files /dev/null and b/tests/visual_tests/images/text-bengali-800-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1532-600-165-1.0-agg-reference.png
new file mode 100644
index 0000000..c5f3920
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1532-600-165-1.0-cairo-reference.png
new file mode 100644
index 0000000..e856308
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1532-600-165-2.0-agg-reference.png
new file mode 100644
index 0000000..724394c
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1532-600-165-2.0-cairo-reference.png
new file mode 100644
index 0000000..270038a
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1533-600-600-1.0-agg-reference.png
new file mode 100644
index 0000000..c3bee1a
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1533-600-600-1.0-cairo-reference.png
new file mode 100644
index 0000000..d928b96
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1533-600-600-2.0-agg-reference.png
new file mode 100644
index 0000000..96b6908
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1533-600-600-2.0-cairo-reference.png
new file mode 100644
index 0000000..26d9d18
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-agg-reference.png
new file mode 100644
index 0000000..13532ac
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-cairo-reference.png
new file mode 100644
index 0000000..21e99cc
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-agg-reference.png
new file mode 100644
index 0000000..565f39f
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-cairo-reference.png
new file mode 100644
index 0000000..8b97828
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-agg-reference.png
new file mode 100644
index 0000000..9f61850
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-cairo-reference.png
new file mode 100644
index 0000000..67fb09d
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-agg-reference.png
new file mode 100644
index 0000000..a8ef1e9
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-cairo-reference.png
new file mode 100644
index 0000000..64ba71c
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-agg-reference.png
new file mode 100644
index 0000000..4dbae33
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-cairo-reference.png
new file mode 100644
index 0000000..11793b6
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-agg-reference.png
new file mode 100644
index 0000000..5ad7b51
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-cairo-reference.png
new file mode 100644
index 0000000..833d446
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug2037-800-300-1.0-agg-reference.png
new file mode 100644
index 0000000..92d8927
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug2037-800-300-1.0-cairo-reference.png
new file mode 100644
index 0000000..702a4bd
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug2037-800-300-2.0-agg-reference.png
new file mode 100644
index 0000000..c6cb44b
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug2037-800-300-2.0-cairo-reference.png
new file mode 100644
index 0000000..76a1a15
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-charplacement-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-charplacement-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..f99d8cb
Binary files /dev/null and b/tests/visual_tests/images/text-charplacement-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-charplacement-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-charplacement-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..d3d8bbd
Binary files /dev/null and b/tests/visual_tests/images/text-charplacement-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-charplacement-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-charplacement-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..2c8c011
Binary files /dev/null and b/tests/visual_tests/images/text-charplacement-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-charplacement-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-charplacement-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..30eefc2
Binary files /dev/null and b/tests/visual_tests/images/text-charplacement-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-data-binding-500-500-1.0-agg-reference.png b/tests/visual_tests/images/text-data-binding-500-500-1.0-agg-reference.png
new file mode 100644
index 0000000..7cd1b6f
Binary files /dev/null and b/tests/visual_tests/images/text-data-binding-500-500-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-data-binding-500-500-1.0-cairo-reference.png b/tests/visual_tests/images/text-data-binding-500-500-1.0-cairo-reference.png
new file mode 100644
index 0000000..6bbda39
Binary files /dev/null and b/tests/visual_tests/images/text-data-binding-500-500-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-data-binding-500-500-2.0-agg-reference.png b/tests/visual_tests/images/text-data-binding-500-500-2.0-agg-reference.png
new file mode 100644
index 0000000..a3085cd
Binary files /dev/null and b/tests/visual_tests/images/text-data-binding-500-500-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-data-binding-500-500-2.0-cairo-reference.png b/tests/visual_tests/images/text-data-binding-500-500-2.0-cairo-reference.png
new file mode 100644
index 0000000..6317826
Binary files /dev/null and b/tests/visual_tests/images/text-data-binding-500-500-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-displacement-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-displacement-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..0167438
Binary files /dev/null and b/tests/visual_tests/images/text-displacement-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-displacement-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-displacement-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..4eb1c41
Binary files /dev/null and b/tests/visual_tests/images/text-displacement-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-displacement-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-displacement-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..5a9fdb1
Binary files /dev/null and b/tests/visual_tests/images/text-displacement-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-displacement-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-displacement-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..d3b238e
Binary files /dev/null and b/tests/visual_tests/images/text-displacement-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-agg-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-agg-reference.png
new file mode 100644
index 0000000..633a0e6
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-cairo-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..227fcfb
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-agg-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-agg-reference.png
new file mode 100644
index 0000000..9b5871f
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-cairo-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..074b306
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-font-features-500-500-1.0-agg-reference.png b/tests/visual_tests/images/text-font-features-500-500-1.0-agg-reference.png
new file mode 100644
index 0000000..5783e07
Binary files /dev/null and b/tests/visual_tests/images/text-font-features-500-500-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-font-features-500-500-1.0-cairo-reference.png b/tests/visual_tests/images/text-font-features-500-500-1.0-cairo-reference.png
new file mode 100644
index 0000000..9412911
Binary files /dev/null and b/tests/visual_tests/images/text-font-features-500-500-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-font-features-500-500-2.0-agg-reference.png b/tests/visual_tests/images/text-font-features-500-500-2.0-agg-reference.png
new file mode 100644
index 0000000..d89e950
Binary files /dev/null and b/tests/visual_tests/images/text-font-features-500-500-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-font-features-500-500-2.0-cairo-reference.png b/tests/visual_tests/images/text-font-features-500-500-2.0-cairo-reference.png
new file mode 100644
index 0000000..fda86f3
Binary files /dev/null and b/tests/visual_tests/images/text-font-features-500-500-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-1.0-agg-reference.png b/tests/visual_tests/images/text-halign-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..2a454e6
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/text-halign-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..942dfa1
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-2.0-agg-reference.png b/tests/visual_tests/images/text-halign-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..269e107
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/text-halign-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..8e106db
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-1.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..1f1023b
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..957c5a4
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-2.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..7b1da0c
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..b3742e5
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..f578bc0
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..f29c561
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..99b5270
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..706ba2c
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-opacity-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-halo-opacity-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..072952d
Binary files /dev/null and b/tests/visual_tests/images/text-halo-opacity-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-opacity-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-halo-opacity-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..d1dbac9
Binary files /dev/null and b/tests/visual_tests/images/text-halo-opacity-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-opacity-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-halo-opacity-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..0b08856
Binary files /dev/null and b/tests/visual_tests/images/text-halo-opacity-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-opacity-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-halo-opacity-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..9f80d32
Binary files /dev/null and b/tests/visual_tests/images/text-halo-opacity-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-agg-reference.png b/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-agg-reference.png
index 5940a1f..83d49e2 100644
Binary files a/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-cairo-reference.png
index 05bb4b8..a92e9a9 100644
Binary files a/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/text-halo-rasterizer-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-agg-reference.png b/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-agg-reference.png
index bf70589..139ab42 100644
Binary files a/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-cairo-reference.png
index b4fd03c..953b7e4 100644
Binary files a/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/text-halo-rasterizer-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-transform-600-400-1.0-agg-reference.png b/tests/visual_tests/images/text-halo-transform-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..80177ff
Binary files /dev/null and b/tests/visual_tests/images/text-halo-transform-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-transform-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/text-halo-transform-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..a92e9a9
Binary files /dev/null and b/tests/visual_tests/images/text-halo-transform-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-transform-600-400-2.0-agg-reference.png b/tests/visual_tests/images/text-halo-transform-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..7179403
Binary files /dev/null and b/tests/visual_tests/images/text-halo-transform-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halo-transform-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/text-halo-transform-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..953b7e4
Binary files /dev/null and b/tests/visual_tests/images/text-halo-transform-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-line-wrap-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-line-wrap-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..a52e099
Binary files /dev/null and b/tests/visual_tests/images/text-line-wrap-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-line-wrap-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-line-wrap-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..532f828
Binary files /dev/null and b/tests/visual_tests/images/text-line-wrap-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-line-wrap-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-line-wrap-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..e8e63bc
Binary files /dev/null and b/tests/visual_tests/images/text-line-wrap-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-line-wrap-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-line-wrap-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..8d8608d
Binary files /dev/null and b/tests/visual_tests/images/text-line-wrap-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-malayalam-800-100-1.0-agg-reference.png b/tests/visual_tests/images/text-malayalam-800-100-1.0-agg-reference.png
new file mode 100644
index 0000000..943a9d5
Binary files /dev/null and b/tests/visual_tests/images/text-malayalam-800-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-malayalam-800-100-1.0-cairo-reference.png b/tests/visual_tests/images/text-malayalam-800-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..e6e2463
Binary files /dev/null and b/tests/visual_tests/images/text-malayalam-800-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-malayalam-800-100-2.0-agg-reference.png b/tests/visual_tests/images/text-malayalam-800-100-2.0-agg-reference.png
new file mode 100644
index 0000000..32101e2
Binary files /dev/null and b/tests/visual_tests/images/text-malayalam-800-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-malayalam-800-100-2.0-cairo-reference.png b/tests/visual_tests/images/text-malayalam-800-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..4f0699f
Binary files /dev/null and b/tests/visual_tests/images/text-malayalam-800-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-1-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-multi-layout-1-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..fdc336a
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-1-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-multi-layout-1-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..84f293a
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-1-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-multi-layout-1-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..e6fb4f4
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-1-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-multi-layout-1-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..b2b2b9e
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-2-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-multi-layout-2-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..90efb53
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-2-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-2-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-multi-layout-2-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..ea4b5fb
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-2-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-2-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-multi-layout-2-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..cf94c15
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-2-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-multi-layout-2-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-multi-layout-2-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..4a418a9
Binary files /dev/null and b/tests/visual_tests/images/text-multi-layout-2-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-overlap-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-overlap-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..3fccea8
Binary files /dev/null and b/tests/visual_tests/images/text-overlap-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-overlap-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-overlap-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..dc61ec1
Binary files /dev/null and b/tests/visual_tests/images/text-overlap-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-overlap-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-overlap-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..cdb9d97
Binary files /dev/null and b/tests/visual_tests/images/text-overlap-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-overlap-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-overlap-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..4413c2d
Binary files /dev/null and b/tests/visual_tests/images/text-overlap-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-spacing-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-spacing-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..16ea180
Binary files /dev/null and b/tests/visual_tests/images/text-spacing-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-spacing-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-spacing-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..f128881
Binary files /dev/null and b/tests/visual_tests/images/text-spacing-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-spacing-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-spacing-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..1415056
Binary files /dev/null and b/tests/visual_tests/images/text-spacing-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-spacing-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-spacing-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..25ff4bb
Binary files /dev/null and b/tests/visual_tests/images/text-spacing-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-ttc-font-600-400-1.0-agg-reference.png b/tests/visual_tests/images/text-ttc-font-600-400-1.0-agg-reference.png
new file mode 100644
index 0000000..dad75d2
Binary files /dev/null and b/tests/visual_tests/images/text-ttc-font-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-ttc-font-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/text-ttc-font-600-400-1.0-cairo-reference.png
new file mode 100644
index 0000000..9446f53
Binary files /dev/null and b/tests/visual_tests/images/text-ttc-font-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-ttc-font-600-400-2.0-agg-reference.png b/tests/visual_tests/images/text-ttc-font-600-400-2.0-agg-reference.png
new file mode 100644
index 0000000..96ea0de
Binary files /dev/null and b/tests/visual_tests/images/text-ttc-font-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-ttc-font-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/text-ttc-font-600-400-2.0-cairo-reference.png
new file mode 100644
index 0000000..ab0b69d
Binary files /dev/null and b/tests/visual_tests/images/text-ttc-font-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-typographic-512-512-1.0-agg-reference.png b/tests/visual_tests/images/text-typographic-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..54415f3
Binary files /dev/null and b/tests/visual_tests/images/text-typographic-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-typographic-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/text-typographic-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..6c25505
Binary files /dev/null and b/tests/visual_tests/images/text-typographic-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-typographic-512-512-2.0-agg-reference.png b/tests/visual_tests/images/text-typographic-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..1a4c1b1
Binary files /dev/null and b/tests/visual_tests/images/text-typographic-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-typographic-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/text-typographic-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..a1d74f6
Binary files /dev/null and b/tests/visual_tests/images/text-typographic-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-vertical-alignment-800-800-1.0-agg-reference.png b/tests/visual_tests/images/text-vertical-alignment-800-800-1.0-agg-reference.png
new file mode 100644
index 0000000..b9303a1
Binary files /dev/null and b/tests/visual_tests/images/text-vertical-alignment-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-vertical-alignment-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/text-vertical-alignment-800-800-1.0-cairo-reference.png
new file mode 100644
index 0000000..5a99bf5
Binary files /dev/null and b/tests/visual_tests/images/text-vertical-alignment-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-vertical-alignment-800-800-2.0-agg-reference.png b/tests/visual_tests/images/text-vertical-alignment-800-800-2.0-agg-reference.png
new file mode 100644
index 0000000..c8bd47a
Binary files /dev/null and b/tests/visual_tests/images/text-vertical-alignment-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-vertical-alignment-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/text-vertical-alignment-800-800-2.0-cairo-reference.png
new file mode 100644
index 0000000..070c901
Binary files /dev/null and b/tests/visual_tests/images/text-vertical-alignment-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-1.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-1.0-agg-reference.png
new file mode 100644
index 0000000..c9c2fbe
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-1.0-cairo-reference.png
new file mode 100644
index 0000000..eec8d04
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-2.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-2.0-agg-reference.png
new file mode 100644
index 0000000..c9c2fbe
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-2.0-cairo-reference.png
new file mode 100644
index 0000000..eec8d04
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-1.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..a717799
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..69af86e
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-2.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..a717799
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..69af86e
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-edge-rgba-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgb-512-512-1.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-rgb-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..e17dd9c
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgb-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgb-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-rgb-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..e01309a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgb-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgb-512-512-2.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-rgb-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..e17dd9c
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgb-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgb-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-rgb-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..e01309a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgb-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgba-512-512-1.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-rgba-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..ef1625a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgba-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgba-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-rgba-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..96be15b
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgba-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgba-512-512-2.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-rgba-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..ef1625a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgba-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-rgba-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-rgba-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..96be15b
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-rgba-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-tolerance-512-512-1.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-1.0-agg-reference.png
new file mode 100644
index 0000000..f33b25a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-tolerance-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-1.0-cairo-reference.png
new file mode 100644
index 0000000..f33b25a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-tolerance-512-512-2.0-agg-reference.png b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-2.0-agg-reference.png
new file mode 100644
index 0000000..f33b25a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-nodata-tolerance-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-2.0-cairo-reference.png
new file mode 100644
index 0000000..f33b25a
Binary files /dev/null and b/tests/visual_tests/images/tiff-nodata-tolerance-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-1-250-250-1.0-agg-reference.png b/tests/visual_tests/images/tiff-reprojection-1-250-250-1.0-agg-reference.png
new file mode 100644
index 0000000..f0945b1
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-1-250-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-1-250-250-1.0-cairo-reference.png b/tests/visual_tests/images/tiff-reprojection-1-250-250-1.0-cairo-reference.png
new file mode 100644
index 0000000..71df304
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-1-250-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-1-250-250-2.0-agg-reference.png b/tests/visual_tests/images/tiff-reprojection-1-250-250-2.0-agg-reference.png
new file mode 100644
index 0000000..f0945b1
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-1-250-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-1-250-250-2.0-cairo-reference.png b/tests/visual_tests/images/tiff-reprojection-1-250-250-2.0-cairo-reference.png
new file mode 100644
index 0000000..71df304
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-1-250-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-2-250-250-1.0-agg-reference.png b/tests/visual_tests/images/tiff-reprojection-2-250-250-1.0-agg-reference.png
new file mode 100644
index 0000000..26438dc
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-2-250-250-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-2-250-250-1.0-cairo-reference.png b/tests/visual_tests/images/tiff-reprojection-2-250-250-1.0-cairo-reference.png
new file mode 100644
index 0000000..26438dc
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-2-250-250-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-2-250-250-2.0-agg-reference.png b/tests/visual_tests/images/tiff-reprojection-2-250-250-2.0-agg-reference.png
new file mode 100644
index 0000000..26438dc
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-2-250-250-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff-reprojection-2-250-250-2.0-cairo-reference.png b/tests/visual_tests/images/tiff-reprojection-2-250-250-2.0-cairo-reference.png
new file mode 100644
index 0000000..26438dc
Binary files /dev/null and b/tests/visual_tests/images/tiff-reprojection-2-250-250-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable-256-256-1.0-agg-reference.png b/tests/visual_tests/images/tiff_colortable-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..b9ed340
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..b9ed340
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable-256-256-2.0-agg-reference.png b/tests/visual_tests/images/tiff_colortable-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..b9ed340
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..b9ed340
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-agg-reference.png b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..4d03701
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..4d03701
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-agg-reference.png b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..4d03701
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..4d03701
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/vrt_colortable-256-256-1.0-agg-reference.png b/tests/visual_tests/images/vrt_colortable-256-256-1.0-agg-reference.png
new file mode 100644
index 0000000..3fa463b
Binary files /dev/null and b/tests/visual_tests/images/vrt_colortable-256-256-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/vrt_colortable-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/vrt_colortable-256-256-1.0-cairo-reference.png
new file mode 100644
index 0000000..3fa463b
Binary files /dev/null and b/tests/visual_tests/images/vrt_colortable-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/vrt_colortable-256-256-2.0-agg-reference.png b/tests/visual_tests/images/vrt_colortable-256-256-2.0-agg-reference.png
new file mode 100644
index 0000000..3fa463b
Binary files /dev/null and b/tests/visual_tests/images/vrt_colortable-256-256-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/vrt_colortable-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/vrt_colortable-256-256-2.0-cairo-reference.png
new file mode 100644
index 0000000..3fa463b
Binary files /dev/null and b/tests/visual_tests/images/vrt_colortable-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/whole-centroid-600-400-1.0-agg-reference.png b/tests/visual_tests/images/whole-centroid-600-400-1.0-agg-reference.png
index e652f39..b0745ca 100644
Binary files a/tests/visual_tests/images/whole-centroid-600-400-1.0-agg-reference.png and b/tests/visual_tests/images/whole-centroid-600-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/whole-centroid-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/whole-centroid-600-400-1.0-cairo-reference.png
index 35f2d67..0120f2e 100644
Binary files a/tests/visual_tests/images/whole-centroid-600-400-1.0-cairo-reference.png and b/tests/visual_tests/images/whole-centroid-600-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/whole-centroid-600-400-2.0-agg-reference.png b/tests/visual_tests/images/whole-centroid-600-400-2.0-agg-reference.png
index a0b50f7..31c36c4 100644
Binary files a/tests/visual_tests/images/whole-centroid-600-400-2.0-agg-reference.png and b/tests/visual_tests/images/whole-centroid-600-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/whole-centroid-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/whole-centroid-600-400-2.0-cairo-reference.png
index a57d61e..3d363a0 100644
Binary files a/tests/visual_tests/images/whole-centroid-600-400-2.0-cairo-reference.png and b/tests/visual_tests/images/whole-centroid-600-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/styles/building-symbolizer-opacity.xml b/tests/visual_tests/styles/building-symbolizer-opacity.xml
new file mode 100644
index 0000000..b6db1c6
--- /dev/null
+++ b/tests/visual_tests/styles/building-symbolizer-opacity.xml
@@ -0,0 +1,21 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" 
+  background-color="green"
+  background-image="../../data/images/checker.jpg"
+  background-image-opacity=".5"
+  background-image-comp-op="soft-light"
+  >
+    <Style name="ellipse">
+        <Rule>
+            <BuildingSymbolizer fill="white" fill-opacity=".5" />
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>ellipse</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/marker-multi-policy.csv</Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/charspacing-lines.xml b/tests/visual_tests/styles/charspacing-lines.xml
new file mode 100644
index 0000000..36ffe73
--- /dev/null
+++ b/tests/visual_tests/styles/charspacing-lines.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 2</Filter>
+            <LineSymbolizer stroke-width="2" stroke="red"/>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-90" character-spacing="0.0">"Char spacing 0.0"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-80" character-spacing="0.1">"Char spacing 0.1"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-70" character-spacing="0.2">"Char spacing 0.2"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-60" character-spacing="0.3">"Char spacing 0.3"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-50" character-spacing="0.4">"Char spacing 0.4"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-40" character-spacing="0.5">"Char spacing 0.5"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-30" character-spacing="0.6">"Char spacing 0.6"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-20" character-spacing="0.7">"Char spacing 0.7"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="-10" character-spacing="0.8">"Char spacing 0.8"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="0" character-spacing="0.9">"Char spacing 0.9"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="10" character-spacing="1.0">"Char spacing 1.0"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="20" character-spacing="1.5">"Char spacing 1.5"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="30" character-spacing="2">"Char spacing 2.0"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="40" character-spacing="2.5">"Char spacing 2.5"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="50" character-spacing="4">"Char spacing 4"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="60" character-spacing="6">"Char spacing 6"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" allow-overlap="true" placement="line" vertical-alignment="top" dy="70" character-spacing="8">"Char spacing 8"</TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/charspacing.xml b/tests/visual_tests/styles/charspacing.xml
new file mode 100644
index 0000000..3afbdfd
--- /dev/null
+++ b/tests/visual_tests/styles/charspacing.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+            <StyleName>My Style</StyleName>
+            <Datasource>
+                <Parameter name="type">csv</Parameter>
+                <Parameter name="file">../data/points.csv</Parameter>
+            </Datasource>
+    </Layer>
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 6</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-90" character-spacing="0.0">"Char spacing 0.0"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-80" character-spacing="0.1">"Char spacing 0.1"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-70" character-spacing="0.2">"Char spacing 0.2"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-60" character-spacing="0.3">"Char spacing 0.3"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-50" character-spacing="0.4">"Char spacing 0.4"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-40" character-spacing="0.5">"Char spacing 0.5"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-30" character-spacing="0.6">"Char spacing 0.6"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-20" character-spacing="0.7">"Char spacing 0.7"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="-10" character-spacing="0.8">"Char spacing 0.8"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="0" character-spacing="0.9">"Char spacing 0.9"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="10" character-spacing="1.0">"Char spacing 1.0"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="20" character-spacing="1.5">"Char spacing 1.5"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="30" character-spacing="2">"Char spacing 2.0"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="40" character-spacing="2.5">"Char spacing 2.5"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="50" character-spacing="4">"Char spacing 4"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="60" character-spacing="6">"Char spacing 6"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" vertical-alignment="top" dy="70" character-spacing="8">"Char spacing 8"</TextSymbolizer>
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/collision.xml b/tests/visual_tests/styles/collision.xml
index 3bd807d..7b717fc 100644
--- a/tests/visual_tests/styles/collision.xml
+++ b/tests/visual_tests/styles/collision.xml
@@ -9,6 +9,7 @@
   <Style name="text">
     <Rule>
       <TextSymbolizer spacing="10" size="14" halo-radius="2" face-name="DejaVu Sans Oblique" placement="line">'text'</TextSymbolizer>
+      <DebugSymbolizer />
     </Rule>
   </Style>
 
diff --git a/tests/visual_tests/styles/colorize-alpha1.xml b/tests/visual_tests/styles/colorize-alpha1.xml
new file mode 100644
index 0000000..e4f7007
--- /dev/null
+++ b/tests/visual_tests/styles/colorize-alpha1.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map>
+
+  <Style name="countries">
+    <Rule>
+      <PolygonSymbolizer fill-opacity=".9" gamma=".65"/>
+    </Rule>
+  </Style>
+
+  <Style name="style" image-filters="colorize-alpha(blue,purple,red,orange,yellow,green)">
+    <Rule>
+      <PointSymbolizer  file="../../data/images/marker.png" allow-overlap="true"   />
+    </Rule>
+  </Style>
+
+  <Layer name="world">
+      <StyleName>countries</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
+          <Parameter name="type">shape</Parameter>
+      </Datasource>
+  </Layer>
+
+  <Layer name="style">
+      <StyleName>style</StyleName>
+      <Datasource>
+          <Parameter name="inline">
+                  x,y
+                  -170,20
+                  -122,48
+                  -122.2,48.2
+                  -122.2,48.2
+                  -122.3,48.3
+                  -122.1,48.4
+                  -122.1,48.2
+                  -115,36
+                  90,30
+                  0,0
+                  1,1
+                  10,10
+                  -10,-10
+                  -20,-20
+          </Parameter>
+         <Parameter name="type">csv</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/colorize-alpha2.xml b/tests/visual_tests/styles/colorize-alpha2.xml
new file mode 100644
index 0000000..852825c
--- /dev/null
+++ b/tests/visual_tests/styles/colorize-alpha2.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map>
+
+  <Style name="countries">
+    <Rule>
+      <PolygonSymbolizer fill-opacity=".9" gamma=".65"/>
+    </Rule>
+  </Style>
+
+  <Style name="style" image-filters="colorize-alpha(blue 100%, cyan, yellow 0.7, rgb(0%,80%,0%) 90%)">
+    <Rule>
+      <PointSymbolizer  file="../../data/images/marker.png" allow-overlap="true"   />
+    </Rule>
+  </Style>
+
+  <Layer name="world">
+      <StyleName>countries</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
+          <Parameter name="type">shape</Parameter>
+      </Datasource>
+  </Layer>
+
+  <Layer name="style">
+      <StyleName>style</StyleName>
+      <Datasource>
+          <Parameter name="inline">
+                  x,y
+                  -170,20
+                  -122,48
+                  -122.2,48.2
+                  -122.2,48.2
+                  -122.3,48.3
+                  -122.1,48.4
+                  -122.1,48.2
+                  -115,36
+                  90,30
+                  0,0
+                  1,1
+                  10,10
+                  -10,-10
+                  -20,-20
+          </Parameter>
+         <Parameter name="type">csv</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/colorize-alpha3.xml b/tests/visual_tests/styles/colorize-alpha3.xml
new file mode 100644
index 0000000..ac4a41f
--- /dev/null
+++ b/tests/visual_tests/styles/colorize-alpha3.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map>
+
+  <Style name="countries">
+    <Rule>
+      <PolygonSymbolizer fill-opacity=".9" gamma=".65"/>
+    </Rule>
+  </Style>
+
+  <Style name="style" image-filters="colorize-alpha(blue 100%,blue)">
+    <Rule>
+      <PointSymbolizer  file="../../data/images/marker.png" allow-overlap="true"   />
+    </Rule>
+  </Style>
+
+  <Layer name="world">
+      <StyleName>countries</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
+          <Parameter name="type">shape</Parameter>
+      </Datasource>
+  </Layer>
+
+  <Layer name="style">
+      <StyleName>style</StyleName>
+      <Datasource>
+          <Parameter name="inline">
+                  x,y
+                  -170,20
+                  -122,48
+                  -122.2,48.2
+                  -122.2,48.2
+                  -122.3,48.3
+                  -122.1,48.4
+                  -122.1,48.2
+                  -115,36
+                  90,30
+                  0,0
+                  1,1
+                  10,10
+                  -10,-10
+                  -20,-20
+          </Parameter>
+         <Parameter name="type">csv</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/colorize-alpha4.xml b/tests/visual_tests/styles/colorize-alpha4.xml
new file mode 100644
index 0000000..8ae5750
--- /dev/null
+++ b/tests/visual_tests/styles/colorize-alpha4.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map>
+
+  <Style name="countries">
+    <Rule>
+      <PolygonSymbolizer fill-opacity=".9" gamma=".65"/>
+    </Rule>
+  </Style>
+
+  <Style name="style" image-filters="colorize-alpha(blue)">
+    <Rule>
+      <PointSymbolizer  file="../../data/images/marker.png" allow-overlap="true"   />
+    </Rule>
+  </Style>
+
+  <Layer name="world">
+      <StyleName>countries</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
+          <Parameter name="type">shape</Parameter>
+      </Datasource>
+  </Layer>
+
+  <Layer name="style">
+      <StyleName>style</StyleName>
+      <Datasource>
+          <Parameter name="inline">
+                  x,y
+                  -170,20
+                  -122,48
+                  -122.2,48.2
+                  -122.2,48.2
+                  -122.3,48.3
+                  -122.1,48.4
+                  -122.1,48.2
+                  -115,36
+                  90,30
+                  0,0
+                  1,1
+                  10,10
+                  -10,-10
+                  -20,-20
+          </Parameter>
+         <Parameter name="type">csv</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/dst-over-compositing.xml b/tests/visual_tests/styles/dst-over-compositing.xml
new file mode 100644
index 0000000..c8623fe
--- /dev/null
+++ b/tests/visual_tests/styles/dst-over-compositing.xml
@@ -0,0 +1,19 @@
+<Map 
+  background-color="#808080"
+  srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="My Style" comp-op="src-over">
+        <Rule>
+            <LineSymbolizer stroke-width="30" stroke="rgba(255,255,255,1)" stroke-linecap="round" stroke-linejoin="round" comp-op="dst-over" />
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/crossing-lines.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/expressionformat.xml b/tests/visual_tests/styles/expressionformat.xml
index 81c7b65..4a6315b 100644
--- a/tests/visual_tests/styles/expressionformat.xml
+++ b/tests/visual_tests/styles/expressionformat.xml
@@ -14,7 +14,7 @@
     <Rule>
       <PointSymbolizer/>
       <TextSymbolizer face-name="DejaVu Sans Book" placement="point" dx="0" dy="5">
-          <ExpressionFormat size="[nr]" opacity="1">[name]</ExpressionFormat>
+          <Format size="[nr]" opacity="1">[name]</Format>
       </TextSymbolizer>
     </Rule>
   </Style>
diff --git a/tests/visual_tests/styles/formatting-1.xml b/tests/visual_tests/styles/formatting-1.xml
index 7bb62f1..ee3f40d 100644
--- a/tests/visual_tests/styles/formatting-1.xml
+++ b/tests/visual_tests/styles/formatting-1.xml
@@ -15,7 +15,7 @@
       <PointSymbolizer/>
       <!-- Basic test -->
       <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="0" dy="5">
-      [name]+'
'<Format face-name="DejaVu Sans Oblique" size="9" opacity="1">'('+[name]+')'</Format></TextSymbolizer>
+      [name]+'
'<Format face-name="DejaVu Sans Oblique" size="9">'('+[name]+')'</Format></TextSymbolizer>
     </Rule>
   </Style>
 
diff --git a/tests/visual_tests/styles/formatting-5.xml b/tests/visual_tests/styles/formatting-5.xml
new file mode 100644
index 0000000..5e3d8bd
--- /dev/null
+++ b/tests/visual_tests/styles/formatting-5.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="book">
+    <Font face-name="DejaVu Sans Book"/>
+  </FontSet>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="file">../data/points.csv</Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style">
+    <Rule>
+      <PointSymbolizer/>
+      <!-- Basic test -->
+      <TextSymbolizer fontset-name="book" size="16" placement="point" dx="0" dy="5">
+      [name]+'
'<Format face-name="DejaVu Sans Oblique" size="9" opacity="1">'('+[name]+')'</Format></TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/formatting-6.xml b/tests/visual_tests/styles/formatting-6.xml
new file mode 100644
index 0000000..8432fdd
--- /dev/null
+++ b/tests/visual_tests/styles/formatting-6.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="book">
+    <Font face-name="DejaVu Sans Book"/>
+  </FontSet>
+  <FontSet name="oblique">
+    <Font face-name="DejaVu Sans Oblique"/>
+  </FontSet>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="file">../data/points.csv</Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style">
+    <Rule>
+      <PointSymbolizer/>
+      <!-- Basic test -->
+      <TextSymbolizer fontset-name="book" size="16" placement="point" dx="0" dy="5">
+      [name]+'
'<Format fontset-name="oblique" size="9" opacity="1">'('+[name]+')'</Format></TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/formatting-7.xml b/tests/visual_tests/styles/formatting-7.xml
new file mode 100644
index 0000000..815d44f
--- /dev/null
+++ b/tests/visual_tests/styles/formatting-7.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="oblique">
+    <Font face-name="DejaVu Sans Oblique"/>
+  </FontSet>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="file">../data/points.csv</Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style">
+    <Rule>
+      <PointSymbolizer/>
+      <!-- Basic test -->
+      <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="0" dy="5">
+      [name]+'
'<Format fontset-name="oblique" size="9" opacity="1">'('+[name]+')'</Format></TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/formatting-8.xml b/tests/visual_tests/styles/formatting-8.xml
new file mode 100644
index 0000000..ae3ee7b
--- /dev/null
+++ b/tests/visual_tests/styles/formatting-8.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="oblique">
+    <Font face-name="DejaVu Sans Oblique"/>
+  </FontSet>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="file">../data/points.csv</Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style">
+    <Rule>
+      <PointSymbolizer/>
+      <!-- Basic test -->
+      <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="0" dy="5">
+      [name]+'
'<Format face-name="DejaVu Sans Oblique" size="9" opacity="1">'('+[name]+')'</Format></TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/formatting-expr-alignment.xml b/tests/visual_tests/styles/formatting-expr-alignment.xml
new file mode 100644
index 0000000..46ec4bf
--- /dev/null
+++ b/tests/visual_tests/styles/formatting-expr-alignment.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="book">
+    <Font face-name="DejaVu Sans Book"/>
+  </FontSet>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+<Parameter name="inline">
+lat,long,horizontal_alignment,vertical_alignment,dy,text
+ 0.25,-0.35,left,top,0
+ 0.25,-0.12,middle,top,0
+ 0.25, 0.11,right,top,0
+ 0   ,-0.35,left,middle,0
+ 0   ,-0.12,middle,middle,0
+ 0   , 0.11,right,middle,0
+-0.25,-0.35,left,bottom,0
+-0.25,-0.12,middle,bottom,0
+-0.25, 0.11,right,bottom,0
+ 0.25, 0.35,right,auto,-0.0001
+ 0   , 0.35,middle,auto,0
+-0.25, 0.35,left,auto,0.0001
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style">
+    <Rule>
+      <PointSymbolizer ignore-placement="true"/>
+      <TextSymbolizer fontset-name="book" size="16" placement="point" dx="0" dy="[dy]" vertical-alignment="[vertical_alignment]" horizontal-alignment="[horizontal_alignment]">XX</TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/formatting.xml b/tests/visual_tests/styles/formatting.xml
new file mode 100644
index 0000000..541d7c1
--- /dev/null
+++ b/tests/visual_tests/styles/formatting.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+  <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="file">../data/points.csv</Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style">
+    <Rule>
+      <PointSymbolizer/>
+      <TextSymbolizer placement-type="simple" placements="N,S" face-name="DejaVu Sans Book" size="16" placement="point" dx="0" dy="5">
+      [name]+'
'<Format face-name="DejaVu Sans Oblique" size="9">'('+[name]+')'</Format></TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/functional-expressions-length.xml b/tests/visual_tests/styles/functional-expressions-length.xml
new file mode 100644
index 0000000..f2243c4
--- /dev/null
+++ b/tests/visual_tests/styles/functional-expressions-length.xml
@@ -0,0 +1,116 @@
+<Map background-color="#eee" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="book-fonts">
+    <Font face-name="DejaVu Sans Book"/>
+  </FontSet>
+  <Style name="frame" filter-mode="first">
+    <Rule>
+      <Filter>[mapnik::geometry_type]=linestring</Filter>
+      <LineSymbolizer
+	  stroke="[color]"
+	  stroke-width="[width]"
+	  offset="abs([offset]*2.0)"/>
+    </Rule>
+    <Rule>
+      <Filter>[mapnik::geometry_type]=point</Filter>
+      <MarkersSymbolizer
+	  file="../../../[base-path]/[filetype]/[filename].[filetype]"
+	  width="exp(0.4*length([name]))"
+	  />
+    </Rule>
+  </Style>
+
+  <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>frame</StyleName>
+    <Datasource>
+      <Parameter name="type">ogr</Parameter>
+      <Parameter name="layer_by_index">0</Parameter>
+      <Parameter name="inline"><![CDATA[
+      {
+      "type" : "FeatureCollection",
+      "features" : [
+      {
+      "properties" : {
+      "width":"5",
+      "color" : "red",
+      "offset": 10
+      },
+      "geometry" : {
+      "coordinates" : [[-15,-15],[15,15]],
+      "type" : "LineString"
+      },
+      "type" : "Feature",
+      },
+      {
+      "geometry" : {
+      "coordinates" : [ 0,0 ],
+      "type" : "Point"
+      },
+      "properties" : {
+      "base-path":"./tests/data",
+      "filetype":"svg",
+      "filename":"octocat",
+      "width":"5",
+      "name": "Large octocat",
+      "color" : "#ace"
+      },
+      "type" : "Feature",
+      },
+      {
+      "geometry" : {
+      "coordinates" : [ -10,-10 ],
+      "type" : "Point"
+      },
+      "properties" : {
+      "base-path":"./tests/data",
+      "filetype":"svg",
+      "filename":"octocat",
+      "width":"5",
+      "name": "tiny cat",
+      "color" : "#ace"
+      },
+      "type" : "Feature",
+      },
+      {
+      "geometry" : {
+      "coordinates" : [ 10,10 ],
+      "type" : "Point"
+      },
+      "properties" : {
+      "base-path":"./tests/data",
+      "filetype":"svg",
+      "filename":"octocat",
+      "name": "tiny cat"
+      },
+      "type" : "Feature",
+      },
+      {
+      "geometry" : {
+      "coordinates" : [ -10,10 ],
+      "type" : "Point"
+      },
+      "properties" : {
+      "base-path":"./tests/data",
+      "filetype":"svg",
+      "filename":"octocat",
+      "name": "small cat"
+      },
+      "type" : "Feature",
+      },
+      {
+      "geometry" : {
+      "coordinates" : [ 10,-10 ],
+      "type" : "Point"
+      },
+      "properties" : {
+      "base-path":"./tests/data",
+      "filetype":"svg",
+      "filename":"octocat",
+      "name": "small cat"
+      },
+      "type" : "Feature",
+      }
+      ]
+      }]]></Parameter>
+    </Datasource>
+  </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/functional-expressions.xml b/tests/visual_tests/styles/functional-expressions.xml
new file mode 100644
index 0000000..dd45a00
--- /dev/null
+++ b/tests/visual_tests/styles/functional-expressions.xml
@@ -0,0 +1,64 @@
+<Map background-color="#eee" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="frame" filter-mode="first">
+        <Rule>
+            <Filter>[mapnik::geometry_type]=linestring</Filter>
+            <LineSymbolizer
+                stroke="[color]"
+                stroke-width="[width]"
+                offset="abs([offset]*2.0)"/>
+            <LineSymbolizer
+                stroke="[color]"
+                stroke-width="[width]"
+                offset="-[offset]*2.0"
+                geometry-transform="rotate(360-(tan(-180)*10))"/>
+        </Rule>
+        <Rule>
+            <Filter>[mapnik::geometry_type]=point</Filter>
+            <MarkersSymbolizer
+                file="../../../[base-path]/[filetype]/[filename].[filetype]"
+                width="exp([width])"
+            />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">ogr</Parameter>
+            <Parameter name="layer_by_index">0</Parameter>
+            <Parameter name="inline"><![CDATA[
+                {
+                   "type" : "FeatureCollection",
+                   "features" : [
+                      {
+                         "properties" : {
+                            "width":"5",
+                            "color" : "red",
+                            "offset": 10
+                         },
+                         "geometry" : {
+                            "coordinates" : [[-10,-10],[10,10]],
+                            "type" : "LineString"
+                         },
+                         "type" : "Feature",
+                      },
+                      {
+                         "geometry" : {
+                            "coordinates" : [ 0,0 ],
+                            "type" : "Point"
+                         },
+                         "properties" : {
+                            "base-path":"./tests/data",
+                            "filetype":"svg",
+                            "filename":"octocat",
+                            "width":"5",
+                            "color" : "#ace"
+                         },
+                         "type" : "Feature",
+                      }
+                   ]
+                }]]></Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/gdal-filter-factor.xml b/tests/visual_tests/styles/gdal-filter-factor.xml
new file mode 100644
index 0000000..22554e3
--- /dev/null
+++ b/tests/visual_tests/styles/gdal-filter-factor.xml
@@ -0,0 +1,17 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="white">
+
+<Style name="test">
+  <Rule>
+    <RasterSymbolizer filter-factor="1"/>
+  </Rule>
+</Style>
+
+<Layer name="test" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+    <StyleName>test</StyleName>
+    <Datasource>
+        <Parameter name="file">../data/Yosemite_L9.tif</Parameter>
+        <Parameter name="type">gdal</Parameter>
+    </Datasource>
+</Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/geometry-transform-scale-patterns.xml b/tests/visual_tests/styles/geometry-transform-scale-patterns.xml
new file mode 100644
index 0000000..563913b
--- /dev/null
+++ b/tests/visual_tests/styles/geometry-transform-scale-patterns.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>polygon</StyleName>
+        <StyleName>polygon-svg</StyleName>
+        <StyleName>line</StyleName>
+        <StyleName>line-svg</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="extent">-1,-1,1,1</Parameter>
+            <Parameter name="inline">
+                wkt
+                "LINESTRING (-1 0, 0 1, 1 0, 0 -1, -1 0)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+    <Style name="polygon">
+        <Rule>
+            <PolygonPatternSymbolizer
+                file="../../data/images/stripes_pattern.png"
+            />
+            <PolygonPatternSymbolizer
+                file="../../data/images/stripes_pattern.png"
+                geometry-transform="scale(0.5)"
+            />
+        </Rule>
+    </Style>
+    <Style name="line">
+        <Rule>
+            <LinePatternSymbolizer
+                file="../../data/images/stripes_pattern.png"
+            />
+            <LinePatternSymbolizer
+                file="../../data/images/stripes_pattern.png"
+                geometry-transform="scale(0.5)"
+            />
+        </Rule>
+    </Style>
+    <Style name="polygon-svg">
+        <Rule>
+            <PolygonPatternSymbolizer
+                file="../../data/svg/octocat.svg"
+                transform="scale(.05)"
+            />
+            <PolygonPatternSymbolizer
+                file="../../data/svg/octocat.svg"
+                transform="scale(.05)"
+                geometry-transform="scale(0.5)"
+            />
+        </Rule>
+    </Style>
+    <Style name="line-svg">
+        <Rule>
+            <LinePatternSymbolizer
+                file="../../data/svg/octocat.svg"
+                transform="scale(.1)"
+            />
+            <LinePatternSymbolizer
+                file="../../data/svg/octocat.svg"
+                transform="scale(.1)"
+                geometry-transform="scale(0.5)"
+            />
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/geometry-transform-scale.xml b/tests/visual_tests/styles/geometry-transform-scale.xml
new file mode 100644
index 0000000..628720b
--- /dev/null
+++ b/tests/visual_tests/styles/geometry-transform-scale.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>polygon</StyleName>
+        <StyleName>line</StyleName>
+        <StyleName>marker</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="extent">-1,-1,1,1</Parameter>
+            <Parameter name="inline">
+                wkt
+                "LINESTRING (-1 0, 0 1, 1 0, 0 -1, -1 0)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+    <Style name="polygon">
+        <Rule>
+            <PolygonSymbolizer fill="#ec3" />
+            <PolygonSymbolizer fill="#ec3" geometry-transform="scale(0.5)" />
+        </Rule>
+    </Style>
+    <Style name="line">
+        <Rule>
+            <LineSymbolizer />
+            <LineSymbolizer geometry-transform="scale(0.5)" />
+        </Rule>
+    </Style>
+    <Style name="marker">
+        <Rule>
+            <MarkersSymbolizer placement="line" />
+            <MarkersSymbolizer placement="line" geometry-transform="scale(0.5)" />
+        </Rule>
+    </Style>
+    <Style name="text">
+        <Rule>
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="12"
+                placement="line"
+                allow-overlap="true"
+                spacing="50"
+                >
+                "text"
+            </TextSymbolizer>
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="12"
+                placement="line"
+                allow-overlap="true"
+                spacing="50"
+                geometry-transform="scale(0.5)"
+                >
+                "text"
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/geometry-transform-translate-patterns-svg.xml b/tests/visual_tests/styles/geometry-transform-translate-patterns-svg.xml
new file mode 100644
index 0000000..633eb08
--- /dev/null
+++ b/tests/visual_tests/styles/geometry-transform-translate-patterns-svg.xml
@@ -0,0 +1,106 @@
+<Map background-color="#eee" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="polygon">
+        <Rule>
+            <PolygonPatternSymbolizer
+              file="../../data/svg/octocat.svg"
+              geometry-transform="translate(10,10)"
+              transform="scale(.01)"
+            />
+            <PolygonPatternSymbolizer
+              file="../../data/svg/octocat.svg"
+              transform="scale(.02) rotate(45)"
+              opacity=".2"
+            />
+        </Rule>
+    </Style>
+    <Style name="line">
+        <Rule>
+            <LinePatternSymbolizer
+              file="../../data/svg/octocat.svg"
+              geometry-transform="translate(-3,-3)"
+              transform="scale(.05)"
+              offset="10"
+            />
+            <LinePatternSymbolizer
+              file="../../data/svg/octocat.svg"
+              geometry-transform="translate(3,3)"
+              transform="scale(.05) rotate(180)"
+              offset="-10"
+            />
+        </Rule>
+    </Style>
+    <Style name="point">
+        <Rule>
+            <MarkersSymbolizer
+              fill="#437"
+              width="10"
+              stroke-width="0"
+              transform="translate(2,2)"
+              allow-overlap="true"
+            />
+            <MarkersSymbolizer
+              fill="#ec3"
+              width="10"
+              stroke-width="0"
+              allow-overlap="true"
+            />
+        </Rule>
+    </Style>
+
+    <Layer name="polygon" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>polygon</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"POLYGON ((1 1, 4 1, 4 4, 1 4, 1 1), (2 2, 2 3, 3 3, 3 2, 2 2))"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <Layer name="line" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>line</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"LINESTRING (0.5 0.5, 4.5 4.5)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>point</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"POINT (1 4)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
diff --git a/tests/visual_tests/styles/geometry-transform-translate-patterns.xml b/tests/visual_tests/styles/geometry-transform-translate-patterns.xml
new file mode 100644
index 0000000..16702b9
--- /dev/null
+++ b/tests/visual_tests/styles/geometry-transform-translate-patterns.xml
@@ -0,0 +1,99 @@
+<Map background-color="#eee" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="polygon">
+        <Rule>
+            <PolygonPatternSymbolizer
+              file="../../data/images/stripes_pattern.png"
+              geometry-transform="translate(2,2)"
+            />
+            <PolygonPatternSymbolizer
+              file="../data/pattern.png"
+            />
+        </Rule>
+    </Style>
+    <Style name="line">
+        <Rule>
+            <LinePatternSymbolizer
+              file="../../data/images/stripes_pattern.png"
+              geometry-transform="translate(-3,-3)"
+            />
+            <LinePatternSymbolizer
+              file="../../data/images/stripes_pattern.png"
+              geometry-transform="translate(3,3)"
+            />
+        </Rule>
+    </Style>
+    <Style name="point">
+        <Rule>
+            <MarkersSymbolizer
+              fill="#437"
+              width="10"
+              stroke-width="0"
+              transform="translate(2,2)"
+              allow-overlap="true"
+            />
+            <MarkersSymbolizer
+              fill="#ec3"
+              width="10"
+              stroke-width="0"
+              allow-overlap="true"
+            />
+        </Rule>
+    </Style>
+
+    <Layer name="polygon" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>polygon</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"POLYGON ((1 1, 4 1, 4 4, 1 4, 1 1), (2 2, 2 3, 3 3, 3 2, 2 2))"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <Layer name="line" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>line</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"LINESTRING (0.5 0.5, 4.5 4.5)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>point</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"POINT (1 4)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
diff --git a/tests/visual_tests/styles/geometry-transform-translate.xml b/tests/visual_tests/styles/geometry-transform-translate.xml
new file mode 100644
index 0000000..e61bf5a
--- /dev/null
+++ b/tests/visual_tests/styles/geometry-transform-translate.xml
@@ -0,0 +1,100 @@
+<Map background-color="#eee" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="polygon">
+        <Rule>
+            <PolygonSymbolizer
+              fill="#437"
+              geometry-transform="translate(2,2)"
+            />
+            <PolygonSymbolizer
+              fill="#ec3"
+            />
+        </Rule>
+    </Style>
+    <Style name="line">
+        <Rule>
+            <LineSymbolizer
+              stroke="#437"
+              stroke-width="3"
+              geometry-transform="translate(2,2)"
+            />
+            <LineSymbolizer
+              stroke="#ec3"
+              stroke-width="3"
+            />
+        </Rule>
+    </Style>
+    <Style name="point">
+        <Rule>
+            <MarkersSymbolizer
+              fill="#437"
+              width="10"
+              stroke-width="0"
+              transform="translate(2,2)"
+              allow-overlap="true"
+            />
+            <MarkersSymbolizer
+              fill="#ec3"
+              width="10"
+              stroke-width="0"
+              allow-overlap="true"
+            />
+        </Rule>
+    </Style>
+
+    <Layer name="polygon" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>polygon</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"POLYGON ((1 1, 1 4, 4 4, 4 1, 1 1), (2 2, 3 2, 3 3, 2 3, 2 2))"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <Layer name="line" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>line</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"LINESTRING (0.5 0.5, 4.5 4.5)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>point</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt
+"POINT (1 4)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
diff --git a/tests/visual_tests/styles/group-symbolizer-1.xml b/tests/visual_tests/styles/group-symbolizer-1.xml
new file mode 100644
index 0000000..5245dbd
--- /dev/null
+++ b/tests/visual_tests/styles/group-symbolizer-1.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Without unlock-image -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>points</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,name1,ref1,name2,ref2
+0,0,One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="points">
+    <Rule>
+      <GroupSymbolizer start-column="1" num-columns="2" placement="point" avoid-edges="false" minimum-distance="10" spacing="20" repeat-key="[name%]+'-'+[ref%]">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <PointSymbolizer file="../../data/svg/rect.svg"/>
+          <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="10">[name%]</TextSymbolizer>
+          <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="-10">[ref%]</TextSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="layer2" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>frame</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr
+-1,-1,0
+-1,1,1
+1,-1,2
+1,1,3
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="frame">
+    <Rule>
+      <PointSymbolizer/>
+    </Rule>
+  </Style>
+
+  <Layer name="layer3" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>center</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr
+0,0,0
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="center">
+    <Rule>
+      <PointSymbolizer allow-overlap="true" ignore-placement="true" file="../../data/raster/white-alpha.png"/>
+      <DebugSymbolizer/>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/group-symbolizer-2.xml b/tests/visual_tests/styles/group-symbolizer-2.xml
new file mode 100644
index 0000000..45a3336
--- /dev/null
+++ b/tests/visual_tests/styles/group-symbolizer-2.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Without unlock-image -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
+
+  <Layer name="obstacle" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>obstacle</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr
+0.33,0.4,0
+-0.33,0.4,1
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="obstacle">
+    <Rule>
+      <PointSymbolizer/>
+    </Rule>
+  </Style>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>grouped</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,name1,ref1,name2,ref2
+-0.33,-0.33,One,1,Two,2
+-0.33,0.33,One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="grouped">
+    <Rule>
+      <GroupSymbolizer start-column="1" num-columns="2" placement="point" avoid-edges="false">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <PointSymbolizer file="../../data/svg/rect.svg"/>
+          <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="10">[name%]</TextSymbolizer>
+          <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="-10">[ref%]</TextSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>non-grouped</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,name1,ref1,name2,ref2
+0.33,-0.33,One,1,Two,2
+0.33,0.33,One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="non-grouped">
+    <Rule>
+      <ShieldSymbolizer face-name="DejaVu Sans Book" dx="-16.25" file="../../data/svg/rect.svg"/>
+      <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="-0.25" dy="10">[name1]</TextSymbolizer>
+      <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="-11.25" dy="-10">[ref1]</TextSymbolizer>
+
+      <ShieldSymbolizer face-name="DejaVu Sans Book" dx="15" file="../../data/svg/rect.svg"/>
+      <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="0.25" dy="10">[name2]</TextSymbolizer>
+      <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="10" dy="-10">[ref2]</TextSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="layer2" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>frame</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr
+-1,-1,0
+-1,1,1
+1,-1,2
+1,1,3
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="frame">
+    <Rule>
+      <PointSymbolizer/>
+    </Rule>
+  </Style>
+
+  <Layer name="layer3" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>center</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr
+-0.33,-0.33,0
+0.33,-0.33,1
+-0.33,0.33,2
+0.33,0.33,3
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="center">
+    <Rule>
+      <PointSymbolizer allow-overlap="true" ignore-placement="true" file="../../data/raster/white-alpha.png"/>
+      <DebugSymbolizer />
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/group-symbolizer-3.xml b/tests/visual_tests/styles/group-symbolizer-3.xml
new file mode 100644
index 0000000..b6d38e9
--- /dev/null
+++ b/tests/visual_tests/styles/group-symbolizer-3.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Without unlock-image -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
+
+  <Layer name="obstacle" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>obstacle</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long
+0.2,-0.35
+0.2,0.35
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="obstacle">
+    <Rule>
+      <PointSymbolizer/>
+    </Rule>
+  </Style>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>grouped</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,name1,ref1,name2,ref2,margin
+0,-0.35,One,1,Two,2,0
+0,0.35,One,1,Two,2,30
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="grouped">
+    <Rule>
+      <GroupSymbolizer start-column="1" num-columns="2" placement="point" avoid-edges="false" margin="[margin]">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <PointSymbolizer file="../../data/svg/rect.svg"/>
+          <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="10">[name%]</TextSymbolizer>
+          <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="-10">[ref%]</TextSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>frame</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr
+-0.5,-1,0
+-0.5,1,1
+0.5,-1,2
+0.5,1,3
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="frame">
+    <Rule>
+      <PointSymbolizer/>
+    </Rule>
+  </Style>
+  <Layer name="layer3" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>center</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long
+0,-0.35
+0,0.35
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="center">
+    <Rule>
+      <PointSymbolizer allow-overlap="true" ignore-placement="true" file="../../data/raster/white-alpha.png"/>
+      <DebugSymbolizer />
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/group-symbolizer-line-1.xml b/tests/visual_tests/styles/group-symbolizer-line-1.xml
new file mode 100644
index 0000000..4025c75
--- /dev/null
+++ b/tests/visual_tests/styles/group-symbolizer-line-1.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Without unlock-image -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
+
+  <Layer name="alpha" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>alpha</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+wkt,name1,ref1,name2,ref2
+"LINESTRING(0 0, 10 2)",One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="alpha">
+    <Rule>
+      <LineSymbolizer stroke-width="0.2" stroke="#ff0000"/>
+      <GroupSymbolizer start-column="1" num-columns="2" placement="line" avoid-edges="false" repeat-distance="50" spacing="100" repeat-key="[name%]+'-'+[ref%]">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="16" placement="point">
+            <Format fill="#ffffff">[ref%]</Format>
+            <Layout dy="10">[name%]</Layout>
+          </ShieldSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="beta" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>beta</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+wkt,name1,ref1,name2,ref2
+"LINESTRING(0 3, 10 5)",One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="beta">
+    <Rule>
+      <LineSymbolizer stroke-width="0.2" stroke="#ff0000"/>
+      <GroupSymbolizer start-column="1" num-columns="2" placement="line" avoid-edges="false" repeat-distance="40" spacing="80" repeat-key="[name%]+'-'+[ref%]">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="16" placement="point">
+            <Format fill="#ffffff">[ref%]</Format>
+            <Layout dy="10">[name%]</Layout>
+          </ShieldSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="gamma" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>gamma</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+wkt,name1,ref1,name2,ref2
+"LINESTRING(0 6, 10 8)",One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="gamma">
+    <Rule>
+      <LineSymbolizer stroke-width="0.2" stroke="#ff0000"/>
+      <GroupSymbolizer start-column="1" num-columns="2" placement="line" avoid-edges="false" repeat-distance="30" spacing="60" repeat-key="[name%]+'-'+[ref%]">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="16" placement="point">
+            <Format fill="#ffffff">[ref%]</Format>
+            <Layout dy="10">[name%]</Layout>
+          </ShieldSymbolizer>
+        </GroupRule>
+       </GroupSymbolizer>
+       <DebugSymbolizer/>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/group-symbolizer-line-2.xml b/tests/visual_tests/styles/group-symbolizer-line-2.xml
new file mode 100644
index 0000000..d5de91a
--- /dev/null
+++ b/tests/visual_tests/styles/group-symbolizer-line-2.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Without unlock-image -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
+
+<!-- the aim here is to test the "repeat-key" parameter. it is
+     supposed to stop collidable / placeable items from being
+     too close, even if they're on different features. -->
+
+  <Layer name="alpha" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>alpha</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+wkt,key1,key2
+"POINT(3.3 0)",foo,1
+"POINT(6.7 0)",bar,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="alpha">
+    <Rule>
+      <PointSymbolizer ignore-placement="true"/>
+      <GroupSymbolizer start-column="1" num-columns="1" placement="point" avoid-edges="false" repeat-key="[key%]">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="10" minimum-distance="1" placement="point" dy="0" fill="#ff0000">[key%]</ShieldSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="beta" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>beta</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+wkt,name1,ref1,name2,ref2
+"LINESTRING(0 -0.6, 10 -0.6)",One,1,Two,2
+"LINESTRING(0 -1.2, 10 -1.2)",One,1,Two,2
+"LINESTRING(0 -1.8, 10 -1.8)",One,1,Two,2
+"LINESTRING(0 -2.4, 10 -2.4)",One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="beta">
+    <Rule>
+      <GroupSymbolizer start-column="1" num-columns="1" placement="line" avoid-edges="false" repeat-distance="20" spacing="1" repeat-key="bar">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#ffffff">bar</ShieldSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="gamma" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>gamma</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+wkt,name1,ref1,name2,ref2
+"LINESTRING(0 0.6, 10 0.6)",One,1,Two,2
+"LINESTRING(0 1.2, 10 1.2)",One,1,Two,2
+"LINESTRING(0 1.8, 10 1.8)",One,1,Two,2
+"LINESTRING(0 2.4, 10 2.4)",One,1,Two,2
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="gamma">
+    <Rule>
+      <GroupSymbolizer start-column="1" num-columns="1" placement="line" avoid-edges="false" repeat-distance="20" spacing="1" repeat-key="foo">
+        <PairLayout item-margin="1"/>
+        <GroupRule>
+          <ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#000000">foo</ShieldSymbolizer>
+        </GroupRule>
+      </GroupSymbolizer>
+    </Rule>
+  </Style>
+
+<!-- for framing -->
+  <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>frame</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+wkt,nr
+"POINT(0 5)",1
+"POINT(0 -5)",2
+"POINT(10 5)",3
+"POINT(10 -5)",4
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="frame">
+    <Rule>
+      <PointSymbolizer/>
+      <DebugSymbolizer/>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/halo-comp-op-on-satellite.xml b/tests/visual_tests/styles/halo-comp-op-on-satellite.xml
new file mode 100644
index 0000000..8694a3f
--- /dev/null
+++ b/tests/visual_tests/styles/halo-comp-op-on-satellite.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+<Style name="raster">
+  <Rule>
+    <RasterSymbolizer opacity="1" scaling="bilinear" comp-op="src-over"/>
+  </Rule>
+</Style>
+<Layer name="raster"
+  srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>raster</StyleName>
+    <Datasource>
+       <Parameter name="file">../data/satellite.png</Parameter>
+       <Parameter name="extent">0,0,10,10</Parameter>
+       <Parameter name="type">gdal</Parameter>
+    </Datasource>
+</Layer>
+
+<Style name="labels">
+  <Rule>
+    <Filter>[x]=2</Filter>
+    <TextSymbolizer
+      face-name="DejaVu Sans Book"
+      size="15"
+      halo-opacity=".1"
+      halo-radius="2"
+      halo-rasterizer="fast"
+      fill="#03080D"
+      halo-comp-op="difference"
+      >
+      'M a p n i k'
+    </TextSymbolizer>
+  </Rule>
+  <Rule>
+    <Filter>[x]=5</Filter>
+    <TextSymbolizer
+      face-name="DejaVu Sans Book"
+      size="15"
+      halo-fill="gray"
+      halo-opacity=".2"
+      halo-radius="2"
+      fill="#29471B"
+      halo-comp-op="invert-rgb"
+      >
+      'M a p n i k'
+    </TextSymbolizer>
+  </Rule>
+  <Rule>
+    <Filter>[x]=8</Filter>
+    <TextSymbolizer
+      face-name="DejaVu Sans Book"
+      size="15"
+      halo-fill="gray"
+      halo-opacity=".3"
+      halo-radius="1"
+      fill="#F6EDB7"
+      halo-comp-op="invert"
+      >
+      'M a p n i k'
+    </TextSymbolizer>
+  </Rule>
+</Style>
+
+<Layer name="labels" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>labels</StyleName>
+    <Datasource>
+        <Parameter name="inline">x,y
+2,1
+2,2
+2,3
+2,4
+2,5
+2,6
+2,7
+2,8
+2,9
+5,1
+5,2
+5,3
+5,4
+5,5
+5,6
+5,7
+5,8
+5,9
+8,1
+8,2
+8,3
+8,4
+8,5
+8,8
+8,6
+8,7
+8,8
+8,9
+</Parameter>
+        <Parameter name="type">csv</Parameter>
+    </Datasource>
+</Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/harfbuzz.xml b/tests/visual_tests/styles/harfbuzz.xml
new file mode 100644
index 0000000..b1b9473
--- /dev/null
+++ b/tests/visual_tests/styles/harfbuzz.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+            <StyleName>My Style</StyleName>
+            <Datasource>
+                <Parameter name="type">csv</Parameter>
+                <Parameter name="file">../data/points.csv</Parameter>
+                <Parameter name="extent">-1,-1,1,1</Parameter>
+            </Datasource>
+    </Layer>
+
+
+    <Style name="My Style">
+        <Rule>
+            <PointSymbolizer/>
+        </Rule>
+        <Rule>
+            <!-- This is an easy test to ensure text shaping actually works. Ligatures are rendered when harfbuzz is used, but not with the old text rendering system. -->
+            <Filter>[nr] = 3</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="-16">"Ligature: fi"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="16">"mixed نامجو Text"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <!-- In addition to the problem mentioned in the bug report (which seems to be gone) this the position is calculated incorrectly -->
+            <Filter>[nr] = 1</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="-16">"نامجو 17"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" dy="16">"#519"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 6</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="36" placement="point" dy="-16">"زنقة الملاح"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" dy="16">"#1154"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 9</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="36" placement="point" dy="-16">"أڭادير"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" dy="16">"#1146"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <DebugSymbolizer />
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/hb-fontsets.xml b/tests/visual_tests/styles/hb-fontsets.xml
new file mode 100644
index 0000000..6310edb
--- /dev/null
+++ b/tests/visual_tests/styles/hb-fontsets.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84"
+     font-directory="../fonts/KhmerOS/">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+            <StyleName>My Style</StyleName>
+            <Datasource>
+                <Parameter name="type">csv</Parameter>
+                <Parameter name="file">../data/points.csv</Parameter>
+                <Parameter name="extent">-0.05, -0.01, 0.95, 0.01</Parameter>
+            </Datasource>
+    </Layer>
+
+    <FontSet name="dejavu-first">
+        <Font face-name="DejaVu Sans Book" />
+        <Font face-name="Khmer OS Regular" />
+    </FontSet>
+
+    <FontSet name="khmeros-first">
+        <Font face-name="Khmer OS Regular" />
+        <Font face-name="DejaVu Sans Book" />
+    </FontSet>
+
+
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 2</Filter>
+            <TextSymbolizer face-name="Khmer OS Regular" size="36" placement="point" dy="-16">"A:ស្ត្រី"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="9" placement="point" dy="16">"Khmer OS Regular"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 4</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="36" placement="point" dy="-16">"B:ស្ត្រី"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="9" placement="point" dy="16">"DejaVu Sans Book"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 6</Filter>
+            <TextSymbolizer fontset-name="dejavu-first" size="36" placement="point" dy="-16">"C:ស្ត្រី"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="9" placement="point" dy="16">"FontSet: DejaVu first"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 8</Filter>
+            <TextSymbolizer fontset-name="khmeros-first" size="36" placement="point" dy="-16">"D:ស្ត្រី"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="9" placement="point" dy="16">"FontSet: Khmer OS first"</TextSymbolizer>
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/image-filters-galore.xml b/tests/visual_tests/styles/image-filters-galore.xml
new file mode 100644
index 0000000..48e4028
--- /dev/null
+++ b/tests/visual_tests/styles/image-filters-galore.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map background-color="#b8dee6" buffer-size="256" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
+
+  <Style name="countries-mask" filter-mode="first" comp-op="difference">
+    <Rule>
+      <PolygonSymbolizer fill="#ffffff" fill-opacity="0.7" gamma="0" />
+    </Rule>
+  </Style>
+  <Style name="countries" filter-mode="first" image-filters="agg-stack-blur(50,50),colorize-alpha(#ffff00,#008000,#4682b4),color-to-alpha(#008000)">
+    <Rule>
+      <PolygonSymbolizer fill="#ffffff" clip="false" />
+    </Rule>
+  </Style>
+  <Style name="countries-outline" filter-mode="first">
+    <Rule>
+      <LineSymbolizer stroke="#ffffff" stroke-width="2" stroke-linejoin="round" comp-op="multiply" />
+    </Rule>
+  </Style>
+  <Layer name="world"
+    >
+      <StyleName>countries-outline</StyleName>
+      <StyleName>countries</StyleName>
+      <StyleName>countries-mask</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
+          <Parameter name="type">shape</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/image-filters-multi-blur-inflate.xml b/tests/visual_tests/styles/image-filters-multi-blur-inflate.xml
new file mode 100644
index 0000000..ac68bba
--- /dev/null
+++ b/tests/visual_tests/styles/image-filters-multi-blur-inflate.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map background-color="#b8dee6" buffer-size="256" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
+
+  <Style name="countries-over" filter-mode="first">
+    <Rule>
+      <PolygonSymbolizer fill="rgba(255, 255, 255, 0.65)" />
+    </Rule>
+  </Style>
+  <Style name="countries" filter-mode="first" image-filters="agg-stack-blur(15,15)" image-filters-inflate="true">
+    <Rule>
+      <PolygonSymbolizer fill="#ffffff" gamma="0" />
+    </Rule>
+  </Style>
+  <Style name="countries-outline" filter-mode="first" image-filters="agg-stack-blur(200,200)" image-filters-inflate="true">
+    <Rule>
+      <LineSymbolizer stroke="#000000" stroke-width="20" stroke-linejoin="round" />
+    </Rule>
+  </Style>
+  <Layer name="world"
+    >
+      <StyleName>countries-outline</StyleName>
+      <StyleName>countries</StyleName>
+      <StyleName>countries-over</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
+          <Parameter name="type">shape</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/image-filters-multi-blur.xml b/tests/visual_tests/styles/image-filters-multi-blur.xml
new file mode 100644
index 0000000..fd9b9bc
--- /dev/null
+++ b/tests/visual_tests/styles/image-filters-multi-blur.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map background-color="#b8dee6" buffer-size="256" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
+
+  <Style name="countries-over" filter-mode="first">
+    <Rule>
+      <PolygonSymbolizer fill="rgba(255, 255, 255, 0.65)" />
+    </Rule>
+  </Style>
+  <Style name="countries" filter-mode="first" image-filters="agg-stack-blur(15,15)">
+    <Rule>
+      <PolygonSymbolizer fill="#ffffff" gamma="0" />
+    </Rule>
+  </Style>
+  <Style name="countries-outline" filter-mode="first" image-filters="agg-stack-blur(200,200)">
+    <Rule>
+      <LineSymbolizer stroke="#000000" stroke-width="20" stroke-linejoin="round" />
+    </Rule>
+  </Style>
+  <Layer name="world"
+    >
+      <StyleName>countries-outline</StyleName>
+      <StyleName>countries</StyleName>
+      <StyleName>countries-over</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/shp/ne_110m_admin_0_countries.shp</Parameter>
+          <Parameter name="type">shape</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/khmer.xml b/tests/visual_tests/styles/khmer.xml
new file mode 100644
index 0000000..4d2eddc
--- /dev/null
+++ b/tests/visual_tests/styles/khmer.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84"
+     font-directory="../fonts/KhmerOS/">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+            <StyleName>My Style</StyleName>
+            <Datasource>
+                <Parameter name="type">csv</Parameter>
+                <Parameter name="file">../data/points.csv</Parameter>
+            </Datasource>
+    </Layer>
+    <Style name="My Style">
+        <Rule>
+            <PointSymbolizer/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 1</Filter>
+            <TextSymbolizer face-name="Khmer OS Regular" size="20" placement="point" dy="16">"ព្រះរាជាណាចក្រកម្ពុជា"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 3</Filter>
+            <TextSymbolizer face-name="Khmer OS Regular" size="20" placement="point" dy="16">"ស្ត្រី"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 5</Filter>
+            <TextSymbolizer face-name="Khmer OS Regular" size="20" placement="point" dy="16">"ផ្លូវ ១២៣"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 7</Filter>
+            <TextSymbolizer face-name="Khmer OS Regular" size="20" placement="point" dy="-16">"ផផ្ទះសំណាក់​សណ្ឋាគារ​មាស"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 9</Filter>
+            <TextSymbolizer face-name="Khmer OS Regular" size="20" placement="point" dy="16">"ផ្លូវ១២៣"</TextSymbolizer>
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/line-offset.xml b/tests/visual_tests/styles/line-offset.xml
index 5746cf9..8f4dee7 100644
--- a/tests/visual_tests/styles/line-offset.xml
+++ b/tests/visual_tests/styles/line-offset.xml
@@ -15,11 +15,11 @@
         </Rule>
         <Rule>
             <Filter>[ref]=1 or [ref]=3</Filter>
-            <TextSymbolizer size="14" fill="#000" spacing="1" placement="line" face-name="DejaVu Sans Book" halo-radius="1" dy="-10">'Some Text'</TextSymbolizer>
+            <TextSymbolizer size="14" fill="#000" spacing="1" placement="line" face-name="DejaVu Sans Book" halo-radius="1" dy="-10" vertical-alignment="middle">'Some Text'</TextSymbolizer>
         </Rule>
         <Rule>
             <Filter>[ref]=2 or [ref]=4</Filter>
-            <TextSymbolizer size="14" fill="#000" spacing="1" placement="line" face-name="DejaVu Sans Book" halo-radius="1" dy="10">'Some Text'</TextSymbolizer>
+            <TextSymbolizer size="14" fill="#000" spacing="1" placement="line" face-name="DejaVu Sans Book" halo-radius="1" dy="10" vertical-alignment="middle">'Some Text'</TextSymbolizer>
         </Rule>
         <Rule>
             <Filter>[name]</Filter>
diff --git a/tests/visual_tests/styles/line-opacity-multi-render.xml b/tests/visual_tests/styles/line-opacity-multi-render.xml
new file mode 100644
index 0000000..f4ad94d
--- /dev/null
+++ b/tests/visual_tests/styles/line-opacity-multi-render.xml
@@ -0,0 +1,80 @@
+<Map srs="+init=epsg:3857" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
+    <Style name="polygon" filter-mode="first" >
+      <Rule>
+        <LineSymbolizer stroke-width="50" stroke-opacity="0.01" />
+      </Rule>
+    </Style>
+
+    <Layer name="polygon" srs="+init=epsg:3857">
+        <StyleName>polygon</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="extent"><![CDATA[-20037508.3,-20037508.3,20037508.3,20037508.3]]></Parameter>
+            <Parameter name="inline">
+wkt
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
+"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/line-pattern-smooth-and-offset.xml b/tests/visual_tests/styles/line-pattern-smooth-and-offset.xml
new file mode 100755
index 0000000..66f037d
--- /dev/null
+++ b/tests/visual_tests/styles/line-pattern-smooth-and-offset.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Map background-color="white">
+
+    <Style name="style">
+        <Rule>
+            <LineSymbolizer stroke="yellow" stroke-width="6" offset="30" smooth="1" simplify="50000" simplify-algorithm="radial-distance"/>
+            <LineSymbolizer stroke="orange" stroke-width="6" offset="20" smooth="1"/>
+            <LineSymbolizer stroke="red" stroke-width="6" offset="10" smooth="1"/>
+            <LineSymbolizer stroke="green" stroke-width="6" offset="0" smooth="1"/>
+            <LineSymbolizer stroke="blue" stroke-width="6" offset="-10" smooth="1"/>
+            <LineSymbolizer stroke="purple" stroke-width="6" offset="-20" smooth="1"/>
+            <LinePatternSymbolizer file="../../data/svg/octocat.svg" opacity=".1" comp-op="multiply" transform="scale(.05)" offset="30" smooth="1"/>
+            <LinePatternSymbolizer file="../../data/svg/octocat.svg" opacity=".1" comp-op="multiply" transform="scale(.05) rotate(90)" offset="-20" smooth="1"/>
+            <TextSymbolizer placement="line" size="14" simplify="50000" simplify-algorithm="radial-distance" halo-radius="1" character-spacing="3" spacing="25" face-name="DejaVu Sans Book" dy="10" smooth="1">'offset • +10'</TextSymbolizer>
+            <TextSymbolizer placement="line" size="14" halo-radius="1" character-spacing="3" spacing="25" face-name="DejaVu Sans Book" dy="-18" smooth="1">'offset • -18'</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="layer">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="type">shape</Parameter>
+            <Parameter name="file">../data/line.shp</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/line-pattern-symbolizer-opacity.xml b/tests/visual_tests/styles/line-pattern-symbolizer-opacity.xml
new file mode 100644
index 0000000..82a92fb
--- /dev/null
+++ b/tests/visual_tests/styles/line-pattern-symbolizer-opacity.xml
@@ -0,0 +1,21 @@
+<Map
+    background-color="green"
+    background-image="../../data/images/checker.jpg"
+    background-image-opacity=".5"
+    background-image-comp-op="soft-light"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/line-offset.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <LinePatternSymbolizer file="../../data/raster/white-alpha.png" comp-op="difference"/>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/line-pattern-symbolizer.xml b/tests/visual_tests/styles/line-pattern-symbolizer.xml
new file mode 100644
index 0000000..c1cd9b3
--- /dev/null
+++ b/tests/visual_tests/styles/line-pattern-symbolizer.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/line-offset.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <LineSymbolizer stroke="#00FF00"/>
+        </Rule>
+        <Rule>
+            <Filter>[ref]=1 or [ref]=3</Filter>
+            <LinePatternSymbolizer file="../../data/pngsuite/linepattern.png"/>
+            <LinePatternSymbolizer offset="-5" file="../../data/pngsuite/linepattern1.png"/>
+        </Rule>
+        <Rule>
+            <Filter>[ref]=2 or [ref]=4</Filter>
+            <LinePatternSymbolizer file="../../data/pngsuite/linepattern.png"/>
+            <LinePatternSymbolizer offset="5" file="../../data/pngsuite/linepattern1.png"/>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/line-smooth-and-offset.xml b/tests/visual_tests/styles/line-smooth-and-offset.xml
new file mode 100755
index 0000000..172a3f7
--- /dev/null
+++ b/tests/visual_tests/styles/line-smooth-and-offset.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Map background-color="white">
+
+    <Style name="style">
+        <Rule>
+            <LineSymbolizer stroke="yellow" stroke-width="6" offset="30" smooth="1"/>
+            <LineSymbolizer stroke="orange" stroke-width="6" offset="20" smooth="1"/>
+            <LineSymbolizer stroke="red" stroke-width="6" offset="10" smooth="1"/>
+            <LineSymbolizer stroke="green" stroke-width="6" offset="0" smooth="1"/>
+            <LineSymbolizer stroke="blue" stroke-width="6" offset="-10" smooth="1"/>
+            <LineSymbolizer stroke="purple" stroke-width="6" offset="-20" smooth="1" rasterizer="fast"/>
+        </Rule>
+    </Style>
+
+    <Layer name="layer">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="type">shape</Parameter>
+            <Parameter name="file">../data/line.shp</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/line-symbolizer-expressions-all.xml b/tests/visual_tests/styles/line-symbolizer-expressions-all.xml
new file mode 100644
index 0000000..880cfe1
--- /dev/null
+++ b/tests/visual_tests/styles/line-symbolizer-expressions-all.xml
@@ -0,0 +1,91 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="bug">
+        <Rule>
+            <Filter>[id] = 'stroke'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='[value]' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'stroke-width'</Filter>
+            <LineSymbolizer stroke-width='[value]' stroke='#ff0000' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'stroke-opacity'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' stroke-opacity="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'offset'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' offset="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'stroke-dasharray'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' stroke-dasharray="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'stroke-linejoin'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' stroke-linejoin="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'stroke-linecap'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' stroke-linecap="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'comp-op'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' comp-op="[value]" />
+        </Rule>
+
+        <Rule>
+            <TextSymbolizer face-name='DejaVu Sans Book' dy='-5'>[id]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+
+    <!-- 
+      frame is a layer with a single polygon that is used to ensure that m.zoom_all() will zoom the
+      map to a reasonable bounding extent to make the test easy to view with tools like nik2img.py
+      (which calls m.zoom_all() by default). Another approach in >= Mapnik 2.3.x is to just sent a
+      manual `extent` for the CSV datasource.
+    -->
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-180.0 -125.0, -180.0 125.0, 180.0 125.0, 180.0 -125.0, -180.0 -125.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- 
+      "bug" is a layer that should provide sample data that triggers the bug in question. It is
+      listed after the "frame" layer so that it renders on top and is visible.
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>bug</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id|value|wkt
+stroke|#ff0000|LineString(-160 -120,160 -120,160 -100)
+stroke-width|5|LineString(-160 -90,160 -90,160 -70)
+stroke-opacity|0.5|LineString(-160 -60,160 -60,160 -40)
+offset|3|LineString(-160 -30,160 -30,160 -10)
+stroke-dasharray|3,3|LineString(-160 0,160 0,160 20)
+stroke-linejoin|bevel|LineString(-160 30,160 30,160 50)
+stroke-linecap|round|LineString(-160 60,160 60,160 80)
+comp-op|minus|LineString(-160 90,160 90,160 110)
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/line-symbolizer-expressions.xml b/tests/visual_tests/styles/line-symbolizer-expressions.xml
new file mode 100644
index 0000000..ff3cf79
--- /dev/null
+++ b/tests/visual_tests/styles/line-symbolizer-expressions.xml
@@ -0,0 +1,71 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="bug">
+        <Rule>
+            <Filter>[id] = 'stroke'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='[value]' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'stroke-width'</Filter>
+            <LineSymbolizer stroke-width='[value]' stroke='#ff0000' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'stroke-opacity'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' stroke-opacity="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'offset'</Filter>
+            <LineSymbolizer stroke-width='5' stroke='#ff0000' offset="[value]" />
+        </Rule>
+
+        <Rule>
+            <TextSymbolizer face-name='DejaVu Sans Book' dy='-5'>[id]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+
+    <!-- 
+      frame is a layer with a single polygon that is used to ensure that m.zoom_all() will zoom the
+      map to a reasonable bounding extent to make the test easy to view with tools like nik2img.py
+      (which calls m.zoom_all() by default). Another approach in >= Mapnik 2.3.x is to just sent a
+      manual `extent` for the CSV datasource.
+    -->
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-180.0 -125.0, -180.0 125.0, 180.0 125.0, 180.0 -125.0, -180.0 -125.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- 
+      "bug" is a layer that should provide sample data that triggers the bug in question. It is
+      listed after the "frame" layer so that it renders on top and is visible.
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>bug</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id|value|wkt
+stroke|#ff0000|LineString(-160 -120,160 -120,160 -100)
+stroke-width|5|LineString(-160 -90,160 -90,160 -70)
+stroke-opacity|0.5|LineString(-160 -60,160 -60,160 -40)
+offset|3|LineString(-160 -30,160 -30,160 -10)
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/line_break.xml b/tests/visual_tests/styles/line_break.xml
new file mode 100644
index 0000000..c39fd6c
--- /dev/null
+++ b/tests/visual_tests/styles/line_break.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+            <StyleName>My Style</StyleName>
+            <Datasource>
+                <Parameter name="type">csv</Parameter>
+                <Parameter name="file">../data/points.csv</Parameter>
+            </Datasource>
+    </Layer>
+
+
+    <Style name="My Style">
+        <Rule>
+            <PointSymbolizer/>
+        </Rule>
+            <Rule>
+            <Filter>[nr] = 3</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="36" placement="point" dy="-16" allow-overlap="true" wrap-width="80">"Overflowing lines"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 3</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="12" placement="point" dy="16" allow-overlap="true" wrap-width="300">"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas ac urna ornare sapien porta hendrerit. In ultricies luctus massa vitae aliquam. Pellentesque in mauris nec velit elementum rhoncus. Pellentesque diam sapien, volutpat ac sollicitudin volutpat, sagittis in sem. Pellentesque ut purus a neque dapibus sodales. Etiam pellentesque elementum ligula,  [...]
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 8</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="12" placement="point" dy="16" allow-overlap="true" wrap-width="300" wrap-before="true">"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas ac urna ornare sapien porta hendrerit. In ultricies luctus massa vitae aliquam. Pellentesque in mauris nec velit elementum rhoncus. Pellentesque diam sapien, volutpat ac sollicitudin volutpat, sagittis in sem. Pellentesque ut purus a neque dapibus sodales. Etiam pellentesque [...]
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 7</Filter>
+            <!-- Text from http://fa.wikipedia.org/wiki/راست‌به‌چپ -->
+            <TextSymbolizer face-name="DejaVu Sans Book" size="12" placement="point" dy="-16" wrap-width="80">
+                "راست‌به‌چپ یا به خط‌هایی گفته می‌شود که نوشتنشان از سمت راست صفحه آغاز شود و به سمت چپ ادامه یابد. خط‌های راست‌به‌چپ عبارتند از"</TextSymbolizer>
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/lines-4.xml b/tests/visual_tests/styles/lines-4.xml
new file mode 100644
index 0000000..f65a4dc
--- /dev/null
+++ b/tests/visual_tests/styles/lines-4.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>lines</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke-width="12" stroke="red"/>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="line" spacing="10" upright="left" max-char-angle-delta="0">"Some Text"</TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/lines-5.xml b/tests/visual_tests/styles/lines-5.xml
new file mode 100644
index 0000000..a8b91bf
--- /dev/null
+++ b/tests/visual_tests/styles/lines-5.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- dy and multi lines test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>lines</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+    
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke-width="12" stroke="green"/>
+            <LineSymbolizer stroke-width="1" stroke="blue" offset="5"/>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <!-- note: 
 is an encoded \n -->
+            <TextSymbolizer face-name="DejaVu Sans Book" size="12" placement="line" spacing="20" max-char-angle-delta="0" dy="6">
+                "Hello
World!"
+            </TextSymbolizer>
+       </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/lines-6.xml b/tests/visual_tests/styles/lines-6.xml
new file mode 100644
index 0000000..101cda1
--- /dev/null
+++ b/tests/visual_tests/styles/lines-6.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- complex script on line test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84"
+     font-directory="../fonts/KhmerOS/">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>lines</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <FontSet name="dejavu-first">
+        <Font face-name="DejaVu Sans Book" />
+        <Font face-name="Khmer OS Regular" />
+    </FontSet>
+
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke-width="12" stroke="green"/>
+            <LineSymbolizer stroke-width="1" stroke="blue" offset="5"/>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <TextSymbolizer fontset-name="dejavu-first" size="12" placement="line" spacing="20" max-char-angle-delta="0">
+                "ផ្លូវ​១២៣ abcd"
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/lines-7.xml b/tests/visual_tests/styles/lines-7.xml
new file mode 100644
index 0000000..ae4faa5
--- /dev/null
+++ b/tests/visual_tests/styles/lines-7.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- dy and multi lines test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>lines</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt,nr
+"LINESTRING(-1.000 -1.000, -0.958 -0.646, -0.917 -0.331, -0.875 -0.055, -0.833 0.185, -0.792 0.390, -0.750 0.562, -0.708 0.703, -0.667 0.815, -0.625 0.898, -0.583 0.956, -0.542 0.989, -0.500 1.000, -0.458 0.990, -0.417 0.961, -0.375 0.914, -0.333 0.852, -0.292 0.776, -0.250 0.688, -0.208 0.589, -0.167 0.481, -0.125 0.367, -0.083 0.248, -0.042 0.125, 0.000 0.000, 0.042 -0.125, 0.083 -0.248, 0.125 -0.367, 0.167 -0.481, 0.208 -0.589, 0.250 -0.688, 0.292 -0.776, 0.333 -0.852, 0.375 -0.914, 0 [...]
+</Parameter>
+        </Datasource>
+    </Layer>
+    
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke-width="1" stroke="green"/>
+            <LineSymbolizer stroke-width="1" stroke="lightblue" offset="12"/>
+            <LineSymbolizer stroke-width="1" stroke="lightblue" offset="-12"/>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <!-- note: 
 is an encoded \n -->
+            <TextSymbolizer face-name="DejaVu Sans Book" size="12" placement="line" spacing="10" max-char-angle-delta="180" dy="0" justify-alignment="center" allow-overlap="true">
+                "u!__|__!u
m!__|__!m
b!__|__!b"
+            </TextSymbolizer>
+       </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/lines-multi-layout-1.xml b/tests/visual_tests/styles/lines-multi-layout-1.xml
new file mode 100644
index 0000000..7a8f8d8
--- /dev/null
+++ b/tests/visual_tests/styles/lines-multi-layout-1.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>lines</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke-width="3" stroke="green"/>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="line" spacing="25" fill="#00ff00" halo-radius="1" halo-fill="rgba(255,255,255,0.6)" max-char-angle-delta="90">
+                <Layout dy="-3" vertical-alignment="top" wrap-width="33" wrap-before="true">
+                    <Format fill="#ff0000">"District One"</Format>
+                </Layout>
+                <Layout dy="5" vertical-alignment="bottom">
+                    <Format fill="#0000ff">"District Two"</Format>
+                </Layout>
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/lines-multi-layout-2.xml b/tests/visual_tests/styles/lines-multi-layout-2.xml
new file mode 100644
index 0000000..c094457
--- /dev/null
+++ b/tests/visual_tests/styles/lines-multi-layout-2.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>lines</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt,nr
+"LINESTRING(1.000 1.000, 0.958 0.646, 0.917 0.331, 0.875 0.055, 0.833 -0.185, 0.792 -0.390, 0.750 -0.562, 0.708 -0.703, 0.667 -0.815, 0.625 -0.898, 0.583 -0.956, 0.542 -0.989, 0.500 -1.000, 0.458 -0.990, 0.417 -0.961, 0.375 -0.914, 0.333 -0.852, 0.292 -0.776, 0.250 -0.688, 0.208 -0.589, 0.167 -0.481, 0.125 -0.367, 0.083 -0.248, 0.042 -0.125, 0.000 0.000, -0.042 0.125, -0.083 0.248, -0.125 0.367, -0.167 0.481, -0.208 0.589, -0.250 0.688, -0.292 0.776, -0.333 0.852, -0.375 0.914, -0.417 0. [...]
+</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke-width="3" stroke="green"/>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="14" placement="line" spacing="40" upright="left" max-char-angle-delta="45">
+                <Layout dy="-5" horizontal-alignment="left">"Align Left"</Layout>
+                <Layout dy="5" horizontal-alignment="right">"Align Right"</Layout>
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/lines-multi-layout-shield.xml b/tests/visual_tests/styles/lines-multi-layout-shield.xml
new file mode 100644
index 0000000..708cac2
--- /dev/null
+++ b/tests/visual_tests/styles/lines-multi-layout-shield.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>lines</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke-width="3" stroke="red"/>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <ShieldSymbolizer placement="line" spacing="60" minimum-distance="10" label-position-tolerance="0.5" face-name="DejaVu Sans Bold" size="14" fill="#ffffff" file="../../data/svg/rect.svg">
+                [nr]
+                <Format size="10" face-name="DejaVu Sans Book" fill="#000000" halo-fill="rgba(255,255,255,0.6)" halo-radius="1.5">
+                    <Layout dy="-10">"SOUTH"</Layout>
+                    <Layout dy="10">"ALT"</Layout>
+                </Format>
+            </ShieldSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/list.xml b/tests/visual_tests/styles/list.xml
index 50a189b..d1332be 100644
--- a/tests/visual_tests/styles/list.xml
+++ b/tests/visual_tests/styles/list.xml
@@ -15,8 +15,8 @@
       <PointSymbolizer/>
       <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="8" fill="blue" placement-type="list">[name]
           <Placement size="10" dy="-8" fill="red"/>
-	  <Placement fill="green">'S'+[nr]</Placement>
-	  <Placement fill="orange" dy="8">[nr]</Placement>
+          <Placement fill="green">'S'+[nr]</Placement>
+          <Placement fill="orange" dy="8">[nr]</Placement>
       </TextSymbolizer>
     </Rule>
   </Style>
diff --git a/tests/visual_tests/styles/map-background-image-compositing.xml b/tests/visual_tests/styles/map-background-image-compositing.xml
new file mode 100644
index 0000000..9bedf74
--- /dev/null
+++ b/tests/visual_tests/styles/map-background-image-compositing.xml
@@ -0,0 +1,54 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
+  background-color="green"
+  background-image-opacity=".8"
+  background-image-comp-op="screen"
+  background-image="../data/pattern.png">
+
+    <Style name="ellipse">
+        <Rule>
+            <MarkersSymbolizer
+              width="240"
+              height="240"
+              fill="steelblue"
+              fill-opacity=".2"
+              stroke="yellow"
+              stroke-width="16"
+              stroke-opacity=".3"
+            />
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>ellipse</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+2.5,2.5
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-collide.xml b/tests/visual_tests/styles/marker-collide.xml
new file mode 100644
index 0000000..de45a80
--- /dev/null
+++ b/tests/visual_tests/styles/marker-collide.xml
@@ -0,0 +1,52 @@
+<Map>
+
+  <Style name="line">
+    <Rule>
+      <LineSymbolizer stroke="#000000" />
+    </Rule>
+  </Style>
+
+  <Style name="text">
+    <Rule>
+      <TextSymbolizer spacing="10" size="14" halo-radius="2" face-name="DejaVu Sans Oblique" placement="line">'text'</TextSymbolizer>
+    </Rule>
+  </Style>
+
+  <Style name="point-placement">
+    <Rule>
+      <MarkersSymbolizer placement="line" marker-type="ellipse" fill="blue" transform="scale(1.5,.3)" spacing="1" allow-overlap="false"/>
+      <MarkersSymbolizer placement="line" marker-type="ellipse" fill="blue" transform="scale(.3,1.5)" spacing="1" allow-overlap="false"/>
+    </Rule>
+  </Style>
+
+  <Layer name="one">
+    <StyleName>line</StyleName>
+    <StyleName>text</StyleName>
+    <StyleName>point-placement</StyleName>
+    <Datasource>
+       <Parameter name="type">csv</Parameter>
+       <Parameter name="inline">
+i|wkt
+1|LINESTRING(-98.465624973178 64.664065539837, -84.403124973178 49.195315539837, -72.449999973178 40.757815539837, -61.199999973178 29.507815539837, -60.496874973178 22.476565539837, -58.387499973178 4.1953155398369, -52.059374973178 -7.7578094601631, -41.512499973178 -34.476559460163, -27.449999973178 -45.023434460163, -14.090624973178 -52.054684460163, 7.0031250268221 -61.195309460163)
+       </Parameter>
+       <Parameter name="separator">|</Parameter>
+    </Datasource>
+  </Layer>
+
+  <Layer name="two">
+    <StyleName>line</StyleName>
+    <StyleName>text</StyleName>
+    <StyleName>point-placement</StyleName>
+    <Datasource>
+       <Parameter name="type">csv</Parameter>
+       <Parameter name="inline">
+i|wkt
+1|LINESTRING(-55.574999973178 68.882815539837, -51.356249973178 42.164065539837, -57.684374973178 33.023440539837, -64.012499973178 21.773440539837, -63.309374973178 3.4921905398369, -45.731249973178 -46.429684460163, -16.903124973178 -50.648434460163, -2.8406249731779 -50.648434460163, 14.737500026822 -50.648434460163, 46.378125026822 -41.507809460163, 78.721875026822 -17.601559460163)
+2|LINESTRING(-21.824999973178 69.585940539837, -108.30937497318 41.460940539837, -13.387499973178 24.585940539837, -108.30937497318 6.3046905398369, -19.012499973178 -2.1328094601631, -83.699999973178 -26.039059460163, 5.5968750268221 -26.039059460163, -30.262499973178 -63.304684460163, 40.050000026822 -19.710934460163, 62.550000026822 -61.195309460163)
+3|LINESTRING(-73.856249973178 77.320315539837, -11.278124973178 -61.898434460163, -112.52812497318 61.148440539837, 31.612500026822 -61.898434460163, 56.925000026822 -13.382809460163)
+       </Parameter>
+       <Parameter name="separator">|</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-interior-position.xml b/tests/visual_tests/styles/marker-interior-position.xml
new file mode 100644
index 0000000..08945ef
--- /dev/null
+++ b/tests/visual_tests/styles/marker-interior-position.xml
@@ -0,0 +1,25 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    
+    <Style name="poly">
+        <Rule>
+            <PolygonSymbolizer />
+            <MarkersSymbolizer stroke-width="0" width="7" placement="interior" fill="blue" allow-overlap="true"/>
+            <MarkersSymbolizer stroke-width="0" width="7" placement="point" fill="red" allow-overlap="true"/>
+            <DebugSymbolizer />
+        </Rule>
+    </Style>
+    
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>poly</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="extent">-1 -1 11 11</Parameter>
+            <Parameter name="inline">
+                id|name|wkt
+                1|Example|Polygon((0 10, 0 0, 1 0, 1 7, 6 7, 6 0, 10 0, 10 10, 0 10))
+            </Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-on-hex-grid.xml b/tests/visual_tests/styles/marker-on-hex-grid.xml
index 76113bc..4da597e 100644
--- a/tests/visual_tests/styles/marker-on-hex-grid.xml
+++ b/tests/visual_tests/styles/marker-on-hex-grid.xml
@@ -11,6 +11,7 @@
                 placement="line"
                 spacing="50"
             />
+            <DebugSymbolizer />
         </Rule>
     </Style>
     <Layer name="point" srs="+init=epsg:4326">
diff --git a/tests/visual_tests/styles/marker-on-line-and-avoid-edges.xml b/tests/visual_tests/styles/marker-on-line-and-avoid-edges.xml
new file mode 100644
index 0000000..e347b29
--- /dev/null
+++ b/tests/visual_tests/styles/marker-on-line-and-avoid-edges.xml
@@ -0,0 +1,49 @@
+<Map>
+<Style name="line" filter-mode="first" >
+  <Rule>
+    <LineSymbolizer stroke="#000000" />
+  </Rule>
+</Style>
+<Style name="point-placement" filter-mode="first" >
+  <Rule>
+    <MarkersSymbolizer
+      allow-overlap="true"
+      file="shape://ellipse"
+      placement="line"
+      spacing="30"
+      transform="scale(4,10)"
+      fill="blue"
+      avoid-edges="true"
+      clip="false">
+    </MarkersSymbolizer>
+    <MarkersSymbolizer
+      allow-overlap="true"
+      file="shape://ellipse"
+      placement="vertex-last"
+      transform="scale(10,4)"
+      fill="red"
+      avoid-edges="true"
+      clip="false">
+    </MarkersSymbolizer>
+    <MarkersSymbolizer
+      allow-overlap="true"
+      file="shape://ellipse"
+      placement="vertex-first"
+      transform="scale(10,4)"
+      fill="red"
+      avoid-edges="true"
+      clip="false">
+    </MarkersSymbolizer>
+    <DebugSymbolizer />
+  </Rule>
+</Style>
+<Layer name="carto_tests">
+    <StyleName>line</StyleName>
+    <StyleName>point-placement</StyleName>
+    <Datasource>
+       <Parameter name="type">csv</Parameter>
+       <Parameter name="file">../data/marker-on-line.csv</Parameter>
+       <Parameter name="separator">|</Parameter>
+    </Datasource>
+  </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/marker-on-line-and-line-placement.xml b/tests/visual_tests/styles/marker-on-line-and-line-placement.xml
new file mode 100644
index 0000000..6cbdceb
--- /dev/null
+++ b/tests/visual_tests/styles/marker-on-line-and-line-placement.xml
@@ -0,0 +1,28 @@
+<Map>
+<Style name="line" filter-mode="first" >
+  <Rule>
+    <LineSymbolizer stroke="red"/>
+    <LineSymbolizer stroke="blue" smooth=".5"/>
+    <LineSymbolizer stroke="orange" smooth="1"/>
+    <LineSymbolizer stroke="green" smooth="1" geometry-transform="translate(10,10)" />
+  </Rule>
+</Style>
+<Style name="point-placement" filter-mode="first" >
+  <Rule>
+    <MarkersSymbolizer stroke-width="0" allow-overlap="true" placement="line" marker-type="ellipse" fill="red" />
+    <MarkersSymbolizer stroke-width="0" offset="-10" transform="translate(0,-10)" allow-overlap="true" placement="line" marker-type="ellipse" fill="darkred" />
+    <MarkersSymbolizer stroke-width="0" allow-overlap="true" smooth=".5" transform="translate(10,10) translate(-10,-10)" placement="line" marker-type="ellipse" fill="blue" />
+    <MarkersSymbolizer stroke-width="0" allow-overlap="true" smooth="1" placement="line" marker-type="ellipse" fill="orange" />
+    <MarkersSymbolizer stroke-width="0" allow-overlap="true" smooth="1" geometry-transform="translate(10,10)" placement="line" marker-type="ellipse" fill="darkgreen" />
+  </Rule>
+</Style>
+<Layer name="carto_tests">
+    <StyleName>line</StyleName>
+    <StyleName>point-placement</StyleName>
+    <Datasource>
+       <Parameter name="type">csv</Parameter>
+       <Parameter name="file">../data/marker-on-line.csv</Parameter>
+       <Parameter name="separator">|</Parameter>
+    </Datasource>
+  </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/marker-on-line-and-vertex-first-placement.xml b/tests/visual_tests/styles/marker-on-line-and-vertex-first-placement.xml
new file mode 100644
index 0000000..e001cd4
--- /dev/null
+++ b/tests/visual_tests/styles/marker-on-line-and-vertex-first-placement.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map>
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke="#000000" />
+        </Rule>
+    </Style>
+    <Style name="markers">
+        <Rule>
+            <MarkersSymbolizer marker-type="ellipse" placement="[placement]" />
+            <DebugSymbolizer />
+        </Rule>
+    </Style>
+    <Layer name="layer">
+        <StyleName>lines</StyleName>
+        <StyleName>markers</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+            wkt, placement
+            "LINESTRING(0 0)", "vertex-first"
+            "LINESTRING(0 1, 10 1)", "vertex-first"
+            "LINESTRING(0 2, 2 3, 4 2, 6 3, 8 2, 10 3)", "vertex-first"
+            </Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/marker-on-line-and-vertex-last-placement.xml b/tests/visual_tests/styles/marker-on-line-and-vertex-last-placement.xml
new file mode 100644
index 0000000..b35a65d
--- /dev/null
+++ b/tests/visual_tests/styles/marker-on-line-and-vertex-last-placement.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map>
+    <Style name="lines">
+        <Rule>
+            <LineSymbolizer stroke="#000000" />
+        </Rule>
+    </Style>
+    <Style name="markers">
+        <Rule>
+            <MarkersSymbolizer marker-type="ellipse" placement="[placement]" />
+            <DebugSymbolizer />
+        </Rule>
+    </Style>
+    <Layer name="layer">
+        <StyleName>lines</StyleName>
+        <StyleName>markers</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+            wkt, placement
+            "LINESTRING(0 0)", "vertex-last"
+            "LINESTRING(0 1, 10 1)", "vertex-last"
+            "LINESTRING(0 2, 2 3, 4 2, 6 3, 8 2, 10 3)", "vertex-last"
+            </Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/marker-on-line-spacing-eq-width-overlap.xml b/tests/visual_tests/styles/marker-on-line-spacing-eq-width-overlap.xml
index af4e087..3b58e54 100644
--- a/tests/visual_tests/styles/marker-on-line-spacing-eq-width-overlap.xml
+++ b/tests/visual_tests/styles/marker-on-line-spacing-eq-width-overlap.xml
@@ -48,6 +48,7 @@
         <Rule>
             <MarkersSymbolizer file="shape://ellipse" allow-overlap="true" width="20" height="20" placement="line" spacing="15"/>
             <LineSymbolizer stroke-width="0.2" stroke="#ff0000" />
+            <DebugSymbolizer />
         </Rule>
     </Style>
 </Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-on-line.xml b/tests/visual_tests/styles/marker-on-line.xml
index 1ca8ada..42f67a4 100644
--- a/tests/visual_tests/styles/marker-on-line.xml
+++ b/tests/visual_tests/styles/marker-on-line.xml
@@ -7,6 +7,7 @@
 <Style name="point-placement" filter-mode="first" >
   <Rule>
     <MarkersSymbolizer placement="point" marker-type="ellipse" fill="blue" />
+    <DebugSymbolizer />
   </Rule>
 </Style>
 <Layer name="carto_tests">
diff --git a/tests/visual_tests/styles/marker-path-expression.xml b/tests/visual_tests/styles/marker-path-expression.xml
new file mode 100644
index 0000000..561edc2
--- /dev/null
+++ b/tests/visual_tests/styles/marker-path-expression.xml
@@ -0,0 +1,43 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="ellipse">
+        <Rule>
+            <MarkersSymbolizer file="../../data/svg/[FILENAME].[FILETYPE]" />
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>ellipse</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y,FILENAME,FILETYPE
+2.5,2.5,rect2,svg
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+            <DebugSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-recenter-collide.xml b/tests/visual_tests/styles/marker-recenter-collide.xml
new file mode 100644
index 0000000..3f22b24
--- /dev/null
+++ b/tests/visual_tests/styles/marker-recenter-collide.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    
+    <Style name="point">
+        <Rule>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" dx="[offset]" dy="[offset]">"I"</TextSymbolizer>
+            <MarkersSymbolizer file="shape://arrow"/>
+            <DebugSymbolizer/>
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>point</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+                lat,lon,offset
+                0,-0.35,10
+                0,0.35,0
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/marker-svg-empty-g-element.xml b/tests/visual_tests/styles/marker-svg-empty-g-element.xml
new file mode 100644
index 0000000..8fe2464
--- /dev/null
+++ b/tests/visual_tests/styles/marker-svg-empty-g-element.xml
@@ -0,0 +1,43 @@
+<Map srs="+init=epsg:4326">
+
+    <Style name="svg">
+        <Rule>
+            <MarkersSymbolizer file="../../data/svg/place-of-worship-24.svg"/>
+        </Rule>
+    </Style>
+
+    <Layer name="svg" srs="+init=epsg:4326">
+        <StyleName>svg</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+2.5,2.5
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+            <DebugSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+init=epsg:4326">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-svg-opacity2.xml b/tests/visual_tests/styles/marker-svg-opacity2.xml
new file mode 100644
index 0000000..620b491
--- /dev/null
+++ b/tests/visual_tests/styles/marker-svg-opacity2.xml
@@ -0,0 +1,42 @@
+<Map srs="+init=epsg:4326" background-color="black">
+
+    <Style name="svg">
+        <Rule>
+            <MarkersSymbolizer file="../../data/svg/box.svg"/>
+        </Rule>
+    </Style>
+
+    <Layer name="svg" srs="+init=epsg:4326">
+        <StyleName>svg</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+2.5,2.5
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+init=epsg:4326">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-symbolizer-expressions-all.xml b/tests/visual_tests/styles/marker-symbolizer-expressions-all.xml
new file mode 100644
index 0000000..f488668
--- /dev/null
+++ b/tests/visual_tests/styles/marker-symbolizer-expressions-all.xml
@@ -0,0 +1,81 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="bug">
+        <Rule>
+            <Filter>[id] = 'file'</Filter>
+            <MarkersSymbolizer file="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'allow-overlap'</Filter>
+            <MarkersSymbolizer allow-overlap="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'opacity'</Filter>
+            <MarkersSymbolizer opacity="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'transform'</Filter>
+            <MarkersSymbolizer transform="scale([value],[value])" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'ignore-placement'</Filter>
+            <MarkersSymbolizer ignore-placement="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'comp-op'</Filter>
+            <MarkersSymbolizer comp-op="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <TextSymbolizer dy='-20' face-name='DejaVu Sans Book' halo-fill='#ffffff' halo-radius='1'>[id]</TextSymbolizer>
+            <DebugSymbolizer />
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+
+    <!-- 
+      frame is a layer with a single polygon that is used to ensure that m.zoom_all() will zoom the
+      map to a reasonable bounding extent to make the test easy to view with tools like nik2img.py
+      (which calls m.zoom_all() by default). Another approach in >= Mapnik 2.3.x is to just sent a
+      manual `extent` for the CSV datasource.
+    -->
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-180.0 -125.0, -180.0 125.0, 180.0 125.0, 180.0 -125.0, -180.0 -125.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- 
+      "bug" is a layer that should provide sample data that triggers the bug in question. It is
+      listed after the "frame" layer so that it renders on top and is visible.
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>bug</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id|value|wkt
+file|../../data/images/crosshair16x16.png|Point(-130 -70)
+allow-overlap|true|Point(0 -70)
+opacity|.5|Point(130 -70)
+transform|1.2|Point(-130 30)
+ignore-placement|true|Point(0 30)
+comp-op|src-over|Point(130 30)
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/marker-vs-point.xml b/tests/visual_tests/styles/marker-vs-point.xml
new file mode 100644
index 0000000..361f43e
--- /dev/null
+++ b/tests/visual_tests/styles/marker-vs-point.xml
@@ -0,0 +1,74 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
+     background-color="green"
+     background-image-opacity="0.8"
+     background-image-comp-op="screen"
+     background-image="../data/pattern.png">
+  
+  <Style name="markers">
+    <Rule>
+      <MarkersSymbolizer
+	  width="60"
+	  height="60"
+	  file="../../data/svg/transparent_circle.svg"
+	  />
+    </Rule>
+  </Style>
+
+  <Style name="points">
+    <Rule>
+      <PointSymbolizer
+	  file="../../data/svg/transparent_circle.svg"
+	  />
+    </Rule>
+  </Style>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>markers</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+x,y
+-2.5,3
+-2.5,0
+-2.5,-3
+      </Parameter>
+    </Datasource>
+  </Layer>
+  
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>points</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+x,y
+2.5,3
+2.5,0
+2.5,-3
+      </Parameter>
+    </Datasource>
+  </Layer>
+  
+  <!-- points to frame data view -->
+  
+  <Style name="frame">
+    <Rule>
+      <PointSymbolizer />
+      <DebugSymbolizer />
+    </Rule>
+  </Style>
+  
+  <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>frame</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+x,y
+-5,-5
+5,-5
+-5,5
+5,5
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-whole-multi-polygon.xml b/tests/visual_tests/styles/marker-whole-multi-polygon.xml
new file mode 100644
index 0000000..110ef7f
--- /dev/null
+++ b/tests/visual_tests/styles/marker-whole-multi-polygon.xml
@@ -0,0 +1,17 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+    <Style name="style">
+        <Rule>
+            <PolygonSymbolizer fill="white"/>
+            <MarkersSymbolizer width="10" stroke-width="0" fill="yellow" allow-overlap="true" ignore-placement="true" multi-policy="each"/>
+            <MarkersSymbolizer width="5" stroke-width="0" fill="green" allow-overlap="true" ignore-placement="true" multi-policy="whole"/>
+            <MarkersSymbolizer width="3" stroke-width="0" fill="red" allow-overlap="true" ignore-placement="true" multi-policy="largest"/>
+        </Rule>
+    </Style>
+    <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/shp/world_merc</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/marker-with-background-image-and-hsla-transform.xml b/tests/visual_tests/styles/marker-with-background-image-and-hsla-transform.xml
index 31110e3..96a0756 100644
--- a/tests/visual_tests/styles/marker-with-background-image-and-hsla-transform.xml
+++ b/tests/visual_tests/styles/marker-with-background-image-and-hsla-transform.xml
@@ -1,6 +1,9 @@
 <Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-image="../../data/images/checker.jpg">
 
-    <Style name="ellipse" image-filters="hsla(0x.5;.5x1;0x.5;0x1)">
+    <Style name="ellipse"
+      direct-image-filters="scale-hsla(0,1,0,1,0,1,0,.5)"
+      image-filters="scale-hsla(.1,.9,.5,1,.5,1,.2,1)"
+      >
         <Rule>
             <MarkersSymbolizer
               width="240"
diff --git a/tests/visual_tests/styles/marker-with-background-image-linear-comp-op.xml b/tests/visual_tests/styles/marker-with-background-image-linear-comp-op.xml
new file mode 100644
index 0000000..58df8a1
--- /dev/null
+++ b/tests/visual_tests/styles/marker-with-background-image-linear-comp-op.xml
@@ -0,0 +1,67 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-image="../../data/images/checker.jpg">
+
+    <Style name="ellipse">
+        <Rule>
+            <MarkersSymbolizer
+              width="240"
+              height="240"
+              fill="white"
+              fill-opacity=".7"
+              comp-op="linear-dodge"
+              stroke="yellow"
+              stroke-width="16"
+              stroke-opacity=".3"
+            />
+            <MarkersSymbolizer
+              width="100"
+              opacity=".5"
+              fill="white"
+              comp-op="divide"
+              transform="skewX(50)"
+              allow-overlap="true"
+            />
+            <MarkersSymbolizer
+              width="100"
+              opacity=".5"
+              fill="white"
+              comp-op="linear-burn"
+              transform="skewX(-50)"
+              allow-overlap="true"
+            />
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>ellipse</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+2.5,2.5
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/orientation.xml b/tests/visual_tests/styles/orientation.xml
new file mode 100644
index 0000000..e0e283b
--- /dev/null
+++ b/tests/visual_tests/styles/orientation.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/points.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 1</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="45">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/> 
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 2</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="90">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 3</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="180">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 4</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="45" dy="10">"Line
break"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 5</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="45" dy="10">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 6</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="90" dy="10">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 7</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="180" dy="10">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 8</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="0" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 9</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="90" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 10</Filter>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="180" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true"/>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/point-symbolizer-expressions-all.xml b/tests/visual_tests/styles/point-symbolizer-expressions-all.xml
new file mode 100644
index 0000000..e9cf2a1
--- /dev/null
+++ b/tests/visual_tests/styles/point-symbolizer-expressions-all.xml
@@ -0,0 +1,80 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="bug">
+        <Rule>
+            <Filter>[id] = 'file'</Filter>
+            <PointSymbolizer file="[value]" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'allow-overlap'</Filter>
+            <PointSymbolizer allow-overlap="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'opacity'</Filter>
+            <PointSymbolizer opacity="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'transform'</Filter>
+            <PointSymbolizer transform="scale([value],[value])" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'ignore-placement'</Filter>
+            <PointSymbolizer ignore-placement="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'comp-op'</Filter>
+            <PointSymbolizer comp-op="[value]" file="../../data/images/crosshair16x16.png" />
+        </Rule>
+        <Rule>
+            <TextSymbolizer dy='-16' face-name='DejaVu Sans Book' halo-fill='#ffffff' halo-radius='1'>[id]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+
+    <!-- 
+      frame is a layer with a single polygon that is used to ensure that m.zoom_all() will zoom the
+      map to a reasonable bounding extent to make the test easy to view with tools like nik2img.py
+      (which calls m.zoom_all() by default). Another approach in >= Mapnik 2.3.x is to just sent a
+      manual `extent` for the CSV datasource.
+    -->
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-180.0 -125.0, -180.0 125.0, 180.0 125.0, 180.0 -125.0, -180.0 -125.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- 
+      "bug" is a layer that should provide sample data that triggers the bug in question. It is
+      listed after the "frame" layer so that it renders on top and is visible.
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>bug</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id|value|wkt
+file|../../data/images/crosshair16x16.png|Point(-130 -70)
+allow-overlap|true|Point(0 -70)
+opacity|.5|Point(130 -70)
+transform|1.2|Point(-130 30)
+ignore-placement|true|Point(0 30)
+comp-op|src-over|Point(130 30)
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/point-symbolizer-expressions.xml b/tests/visual_tests/styles/point-symbolizer-expressions.xml
new file mode 100644
index 0000000..bab6fb9
--- /dev/null
+++ b/tests/visual_tests/styles/point-symbolizer-expressions.xml
@@ -0,0 +1,56 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="bug">
+        <Rule>
+            <Filter>[id] = 'file'</Filter>
+            <PointSymbolizer file="[value]" />
+        </Rule>
+
+        <Rule>
+            <TextSymbolizer dy='-16' face-name='DejaVu Sans Book' halo-fill='#ffffff' halo-radius='1'>[id]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+
+    <!-- 
+      frame is a layer with a single polygon that is used to ensure that m.zoom_all() will zoom the
+      map to a reasonable bounding extent to make the test easy to view with tools like nik2img.py
+      (which calls m.zoom_all() by default). Another approach in >= Mapnik 2.3.x is to just sent a
+      manual `extent` for the CSV datasource.
+    -->
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-180.0 -125.0, -180.0 125.0, 180.0 125.0, 180.0 -125.0, -180.0 -125.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- 
+      "bug" is a layer that should provide sample data that triggers the bug in question. It is
+      listed after the "frame" layer so that it renders on top and is visible.
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>bug</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id|value|wkt
+file|../../data/images/crosshair16x16.png|Point(-130 -70)
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/point-symbolizer-overlap-placement-expr.xml b/tests/visual_tests/styles/point-symbolizer-overlap-placement-expr.xml
new file mode 100644
index 0000000..e39d56e
--- /dev/null
+++ b/tests/visual_tests/styles/point-symbolizer-overlap-placement-expr.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="book">
+    <Font face-name="DejaVu Sans Book"/>
+  </FontSet>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+<Parameter name="inline">
+lat,long,overlap,placement
+ 0.33,-0.36,noexpr-true,noexpr-false
+ 0.33,-0.34,noexpr-true,noexpr-false
+ 0.33,-0.13,noexpr-false,noexpr-false
+ 0.33,-0.11,noexpr-false,noexpr-false
+ 0.33, 0.10,noexpr-true,noexpr-false
+ 0.33, 0.12,noexpr-false,noexpr-false
+ 0.33, 0.34,noexpr-false,noexpr-false
+ 0.33, 0.36,noexpr-true,noexpr-false
+
+ 0.11,-0.36,true,false
+ 0.11,-0.34,true,false
+ 0.11,-0.13,false,false
+ 0.11,-0.11,false,false
+ 0.11, 0.10,true,false
+ 0.11, 0.12,false,false
+ 0.11, 0.34,false,false
+ 0.11, 0.36,true,false
+
+-0.11,-0.36,noexpr-false,noexpr-true
+-0.11,-0.34,noexpr-false,noexpr-true
+-0.11,-0.13,noexpr-false,noexpr-false
+-0.11,-0.11,noexpr-false,noexpr-false
+-0.11, 0.10,noexpr-false,noexpr-true
+-0.11, 0.12,noexpr-false,noexpr-false
+-0.11, 0.34,noexpr-false,noexpr-false
+-0.11, 0.36,noexpr-false,noexpr-true
+
+-0.33,-0.36,false,true
+-0.33,-0.34,false,true
+-0.33,-0.13,false,false
+-0.33,-0.11,false,false
+-0.33, 0.10,false,true
+-0.33, 0.12,false,false
+-0.33, 0.34,false,false
+-0.33, 0.36,false,true
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style" filter-mode="first">
+    <Rule>
+      <Filter>[overlap] = "noexpr-true" and [placement] = "noexpr-true"</Filter>
+      <PointSymbolizer allow-overlap="true" ignore-placement="true" file="../../data/svg/point_sm.svg" />
+    </Rule>
+    <Rule>
+      <Filter>[overlap] = "noexpr-true" and [placement] = "noexpr-false"</Filter>
+      <PointSymbolizer allow-overlap="true" ignore-placement="false" file="../../data/svg/point_sm.svg" />
+    </Rule>
+    <Rule>
+      <Filter>[overlap] = "noexpr-false" and [placement] = "noexpr-false"</Filter>
+      <PointSymbolizer allow-overlap="false" ignore-placement="false" file="../../data/svg/point_sm.svg" />
+    </Rule>
+    <Rule>
+      <Filter>[overlap] = "noexpr-false" and [placement] = "noexpr-true"</Filter>
+      <PointSymbolizer allow-overlap="false" ignore-placement="true" file="../../data/svg/point_sm.svg" />
+    </Rule>
+    <Rule>
+      <PointSymbolizer allow-overlap="[overlap]" ignore-placement="[placement]" file="../../data/svg/point_sm.svg" />
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/polygon-symbolizer-expressions-all.xml b/tests/visual_tests/styles/polygon-symbolizer-expressions-all.xml
new file mode 100644
index 0000000..e80d67b
--- /dev/null
+++ b/tests/visual_tests/styles/polygon-symbolizer-expressions-all.xml
@@ -0,0 +1,71 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="bug">
+        <Rule>
+            <Filter>[id] = 'fill'</Filter>
+            <PolygonSymbolizer fill='[value]' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'fill-opacity'</Filter>
+            <PolygonSymbolizer fill='#0000ff' fill-opacity='[value]' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'gamma'</Filter>
+            <PolygonSymbolizer fill='#0000ff' gamma='[value]' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'comp-op'</Filter>
+            <PolygonSymbolizer fill='#0000ff' comp-op='[value]' />
+        </Rule>
+
+        <Rule>
+            <TextSymbolizer face-name='DejaVu Sans Book' halo-fill='#ffffff' halo-radius='1'>[id]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+
+    <!-- 
+      frame is a layer with a single polygon that is used to ensure that m.zoom_all() will zoom the
+      map to a reasonable bounding extent to make the test easy to view with tools like nik2img.py
+      (which calls m.zoom_all() by default). Another approach in >= Mapnik 2.3.x is to just sent a
+      manual `extent` for the CSV datasource.
+    -->
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-180.0 -125.0, -180.0 125.0, 180.0 125.0, 180.0 -125.0, -180.0 -125.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- 
+      "bug" is a layer that should provide sample data that triggers the bug in question. It is
+      listed after the "frame" layer so that it renders on top and is visible.
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>bug</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id|value|wkt
+fill|#0000ff|Polygon((-160 -120,-20 -120,-40 -80,-100 -90,-160 -120))
+fill-opacity|0.5|Polygon((-160 -70,-20 -70,-40 -30,-100 -40,-160 -70))
+gamma|1.0|Polygon((-160 -20,-20 -20,-40 20,-100 10,-160 -20))
+comp-op|minus|Polygon((-160 30,-20 30,-40 70,-100 60,-160 30))
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/polygon-symbolizer-expressions.xml b/tests/visual_tests/styles/polygon-symbolizer-expressions.xml
new file mode 100644
index 0000000..916f30a
--- /dev/null
+++ b/tests/visual_tests/styles/polygon-symbolizer-expressions.xml
@@ -0,0 +1,66 @@
+<Map
+    background-color="#eee"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="bug">
+        <Rule>
+            <Filter>[id] = 'fill'</Filter>
+            <PolygonSymbolizer fill='[value]' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'fill-opacity'</Filter>
+            <PolygonSymbolizer fill='#0000ff' fill-opacity='[value]' />
+        </Rule>
+        <Rule>
+            <Filter>[id] = 'gamma'</Filter>
+            <PolygonSymbolizer fill='#0000ff' gamma='[value]' />
+        </Rule>
+
+        <Rule>
+            <TextSymbolizer face-name='DejaVu Sans Book' halo-fill='#ffffff' halo-radius='1'>[id]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+
+    <!-- 
+      frame is a layer with a single polygon that is used to ensure that m.zoom_all() will zoom the
+      map to a reasonable bounding extent to make the test easy to view with tools like nik2img.py
+      (which calls m.zoom_all() by default). Another approach in >= Mapnik 2.3.x is to just sent a
+      manual `extent` for the CSV datasource.
+    -->
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-180.0 -125.0, -180.0 125.0, 180.0 125.0, 180.0 -125.0, -180.0 -125.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- 
+      "bug" is a layer that should provide sample data that triggers the bug in question. It is
+      listed after the "frame" layer so that it renders on top and is visible.
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>bug</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id|value|wkt
+fill|#0000ff|Polygon((-160 -120,-20 -120,-40 -80,-100 -90,-160 -120))
+fill-opacity|0.5|Polygon((-160 -70,-20 -70,-40 -30,-100 -40,-160 -70))
+gamma|1.0|Polygon((-160 -20,-20 -20,-40 20,-100 10,-160 -20))
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/polygon-winding-order.xml b/tests/visual_tests/styles/polygon-winding-order.xml
new file mode 100644
index 0000000..e949e7d
--- /dev/null
+++ b/tests/visual_tests/styles/polygon-winding-order.xml
@@ -0,0 +1,61 @@
+<Map
+    background-color="#000"
+    srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+    <Style name="polygon">
+        <Rule>
+            <PolygonSymbolizer fill="#800000" />
+            <LineSymbolizer stroke="#ff0000" stroke-width="2" offset="4" />
+        </Rule>
+    </Style>
+
+    <Style name="frame">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+    <!--
+      frame is a layer with a single polygon that is used to ensure that
+       m.zoom_all() will zoom the map to a reasonable bounding extent
+    -->
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+wkt|name
+Polygon((-75.0 -75.0, -75.0 75.0, 35.0 75.0, 35.0 -75.0, -75.0 -75.0))|bounds
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!--
+      The inline GeoJSON has two polygons with different winding order
+      (clockwise and counterclockwise), and each of those has two inner rings
+      (again, one clockwise and one counterclockwise)
+    -->
+
+    <Layer name="bug" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>polygon</StyleName>
+        <Datasource>
+            <Parameter name="type">geojson</Parameter>
+            <Parameter name="inline">{
+"type": "FeatureCollection",
+"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
+
+"features": [
+{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates":
+    [ [ [ 30, -20 ], [ -70, -20 ], [ -70, -70 ], [ 30, -70 ], [ 30, -20 ] ],
+      [ [ -60, -30 ], [ -30, -30 ], [ -30, -60 ], [ -60, -60 ], [ -60, -30 ] ],
+      [ [ -10, -30 ], [ -10, -60 ], [ 20, -60 ], [ 20, -30 ], [ -10, -30 ] ]
+      ] } },
+{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates":
+    [ [ [ -70, 70 ], [ 30, 70 ], [ 30, 20 ], [ -70, 20 ], [ -70, 70 ] ],
+      [ [ -60, 60 ], [ -30, 60 ], [ -30, 30 ], [ -60, 30 ], [ -60, 60 ] ],
+      [ [ 20, 30 ], [ 20, 60 ], [ -10, 60 ], [ -10, 30 ], [ 20, 30 ] ]
+      ] } }
+]
+}</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/postgis-inline.xml b/tests/visual_tests/styles/postgis-inline.xml
new file mode 100644
index 0000000..7b24b72
--- /dev/null
+++ b/tests/visual_tests/styles/postgis-inline.xml
@@ -0,0 +1,44 @@
+<Map srs="+init=epsg:3857" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
+<Style name="carto_tests" filter-mode="first" >
+    <Rule>
+        <LineSymbolizer stroke="[stroke]" />
+        <TextSymbolizer
+            size="[size]"
+            fill="[fill]"
+            placement="[placement]"
+            face-name="DejaVu Sans Book"
+            halo-radius="[halo_radius]"
+            placement-type="list">
+            [name]
+            <Placement>[abbr1]</Placement>
+            <Placement>[abbr2]</Placement>
+            <Placement>[abbr3]</Placement>
+        </TextSymbolizer>
+    </Rule>
+</Style>
+<Layer name="carto_tests"
+  srs="+init=epsg:3857" status="on">
+    <StyleName>carto_tests</StyleName>
+    <Datasource>
+       <Parameter name="type"><![CDATA[postgis]]></Parameter>
+       <Parameter name="dbname">template_postgis</Parameter>
+       <Parameter name="extent_from_subquery">true</Parameter>
+       <Parameter name="simplify"><![CDATA[true]]></Parameter>
+       <Parameter name="geometry_field"><![CDATA[geom]]></Parameter>
+       <Parameter name="srid"><![CDATA[3857]]></Parameter>
+       <Parameter name="table"><![CDATA[
+           (SELECT
+               'name' as name,
+               'abbr1' as abbr1,
+               'abbr2' as abbr2,
+               'abbr3' as abbr3,
+               '#000000' as stroke,
+               9 as size,
+               '#000000' as fill,
+               'line' as placement,
+               1 as halo_radius,
+               (ST_Dump('0102000020E61000009D0000005C8FC2753A6345418FC2F5907E246041A4703D4A0963454152B81E858424604114AE47C100634541CDCCCCEC84246041A4703DAAC46245413333339386246041B81E856BB862454114AE47A98724604185EB5178AD624541AE47E15A8924604152B81EC5A4624541666666EE8B2460416666664696624541000000D8902460413333333385624541D7A370F5952460415C8FC2157A62454185EB51609824604152B81E256062454148E17AA49C24604114AE47A12B62454166666656A424604152B81EA51C6245417B14AE4FA6246041B81E85CB0E6245418FC2F550A [...]
+    </Datasource>
+  </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/raster-color-to-alpha1.xml b/tests/visual_tests/styles/raster-color-to-alpha1.xml
new file mode 100644
index 0000000..5a66751
--- /dev/null
+++ b/tests/visual_tests/styles/raster-color-to-alpha1.xml
@@ -0,0 +1,19 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"
+>
+
+<Style name="style" image-filters="color-to-alpha(#00BDFF)">
+  <Rule>
+    <RasterSymbolizer opacity="1"/>
+  </Rule>
+</Style>
+<Layer name="raster"
+  srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+    <StyleName>style</StyleName>
+    <Datasource>
+       <!-- https://github.com/mapnik/mapnik/issues/1471 -->
+       <Parameter name="file">../../data/raster/nodata-edge.tif</Parameter>
+       <Parameter name="type">gdal</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/raster-color-to-alpha2.xml b/tests/visual_tests/styles/raster-color-to-alpha2.xml
new file mode 100644
index 0000000..cd0206e
--- /dev/null
+++ b/tests/visual_tests/styles/raster-color-to-alpha2.xml
@@ -0,0 +1,20 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"
+ background-color="steelblue"
+>
+
+<Style name="style" image-filters="color-to-alpha(#BCDAF5)">
+  <Rule>
+    <RasterSymbolizer opacity="1" scaling="quadric"/>
+  </Rule>
+</Style>
+<Layer name="raster"
+  srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+    <StyleName>style</StyleName>
+    <Datasource>
+       <!-- https://github.com/mapnik/mapnik/issues/1471 -->
+       <Parameter name="file">../../data/raster/river_merc.tiff</Parameter>
+       <Parameter name="type">gdal</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/raster-color-to-alpha3.xml b/tests/visual_tests/styles/raster-color-to-alpha3.xml
new file mode 100644
index 0000000..393e506
--- /dev/null
+++ b/tests/visual_tests/styles/raster-color-to-alpha3.xml
@@ -0,0 +1,20 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"
+ background-color="steelblue"
+>
+
+<Style name="style" image-filters="color-to-alpha(black)">
+  <Rule>
+    <RasterSymbolizer opacity="1" scaling="quadric"/>
+  </Rule>
+</Style>
+<Layer name="raster"
+  srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+    <StyleName>style</StyleName>
+    <Datasource>
+       <!-- https://github.com/mapnik/mapnik/issues/1471 -->
+       <Parameter name="file">../../data/raster/transp.tiff</Parameter>
+       <Parameter name="type">gdal</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/raster-color-to-alpha4.xml b/tests/visual_tests/styles/raster-color-to-alpha4.xml
new file mode 100644
index 0000000..40fbdc0
--- /dev/null
+++ b/tests/visual_tests/styles/raster-color-to-alpha4.xml
@@ -0,0 +1,27 @@
+<Map background-color="white" srs="+init=epsg:32630" minimum-version="0.7.2">
+
+  <Style name="DISCRETE RAINBOW" direct-image-filters="color-to-alpha(white)" image-filters="color-to-alpha(yellow),color-to-alpha(blue)">
+    <Rule>
+      <RasterSymbolizer>
+        <RasterColorizer default-mode="discrete" default-color="white">
+            <stop color="red" value="0"/>
+            <stop color="orange" value="5"/>
+            <stop color="yellow" value="10"/>
+            <stop color="green" value="15"/>
+            <stop color="blue" value="20"/>
+            <stop color="indigo" value="25"/>
+        </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="dataraster" srs="+init=epsg:32630">
+      <StyleName>DISCRETE RAINBOW</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/raster/dataraster.tif</Parameter>
+          <Parameter name="type">gdal</Parameter>
+          <Parameter name="band">1</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/raster-color-to-alpha5.xml b/tests/visual_tests/styles/raster-color-to-alpha5.xml
new file mode 100644
index 0000000..6a2f4ad
--- /dev/null
+++ b/tests/visual_tests/styles/raster-color-to-alpha5.xml
@@ -0,0 +1,27 @@
+<Map background-color="white" srs="+init=epsg:32630" minimum-version="0.7.2">
+
+  <Style name="DISCRETE RAINBOW" image-filters="color-to-alpha(black)">
+    <Rule>
+      <RasterSymbolizer>
+        <RasterColorizer default-mode="discrete" default-color="white">
+            <stop color="red" value="0"/>
+            <stop color="orange" value="5"/>
+            <stop color="yellow" value="10"/>
+            <stop color="green" value="15"/>
+            <stop color="blue" value="20"/>
+            <stop color="indigo" value="25"/>
+        </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="dataraster" srs="+init=epsg:32630">
+      <StyleName>DISCRETE RAINBOW</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/raster/dataraster.tif</Parameter>
+          <Parameter name="type">gdal</Parameter>
+          <Parameter name="band">1</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/raster_colorizer.xml b/tests/visual_tests/styles/raster_colorizer.xml
new file mode 100644
index 0000000..8c1c918
--- /dev/null
+++ b/tests/visual_tests/styles/raster_colorizer.xml
@@ -0,0 +1,71 @@
+<Map background-color="white" srs="+init=epsg:32630" minimum-version="0.7.2">
+
+<!-- blue yellow orange indigo green red transparent black white -->
+
+  <Style name="DISCRETE RAINBOW">
+    <Rule>
+      <RasterSymbolizer>
+        <RasterColorizer default-mode="discrete" default-color="white">
+            <stop color="red" value="0"/>
+            <stop color="orange" value="5"/>
+            <stop color="yellow" value="10"/>
+            <stop color="green" value="15"/>
+            <stop color="blue" value="20"/>
+            <stop color="indigo" value="25"/>
+        </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>
+
+  <Style name="LINEAR BLEND">
+    <Rule>
+      <RasterSymbolizer>
+        <RasterColorizer default-mode="discrete" default-color="white">
+            <stop color="#222222" value="0" mode="linear"/>
+            <stop color="#EEEEEE" value="25"/>
+        </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>
+
+  <Style name="BANDED">
+    <Rule>
+      <RasterSymbolizer>
+        <RasterColorizer default-mode="discrete" default-color="white">
+            <stop color="red" value="0" mode="exact"/>
+            <stop color="orange" value="2" mode="exact"/>
+            <stop color="yellow" value="4" mode="exact"/>
+            <stop color="green" value="6" mode="exact"/>
+            <stop color="blue" value="8" mode="exact"/>
+            <stop color="indigo" value="10" mode="exact"/>
+            <stop color="violet" value="12" mode="exact"/>
+        </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>  
+
+  <Style name="MIXED">
+    <Rule>
+      <RasterSymbolizer>
+        <RasterColorizer default-mode="discrete" default-color="white">
+            <stop color="red" value="0"/>
+            <stop color="orange" value="5"/>
+            <stop color="yellow" value="10" mode="exact"/>
+            <stop color="green" value="13" mode="exact"/>
+            <stop color="#222222" value="15" mode="linear"/>
+            <stop color="#EEEEEE" value="25"/>
+        </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>  
+
+  <Layer name="dataraster" srs="+init=epsg:32630">
+      <StyleName>DISCRETE RAINBOW</StyleName>
+      <Datasource>
+          <Parameter name="file">../../data/raster/dataraster.tif</Parameter>
+          <Parameter name="type">gdal</Parameter>
+          <Parameter name="band">1</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/raster_symbolizer.xml b/tests/visual_tests/styles/raster_symbolizer.xml
new file mode 100644
index 0000000..14632b1
--- /dev/null
+++ b/tests/visual_tests/styles/raster_symbolizer.xml
@@ -0,0 +1,35 @@
+<Map background-color="white" srs="+init=epsg:32630" minimum-version="0.7.2">
+
+  <Style name="two-value">
+    <Rule>
+      <RasterSymbolizer opacity="1">
+        <RasterColorizer default-mode="discrete" default-color="#000000">
+          <stop value="0" color="yellow"/>
+          <stop value="26" color="purple"/>
+         </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>
+
+  <Style name="ramped">
+    <Rule>
+      <RasterSymbolizer>
+        <RasterColorizer default-mode="linear" default-color="#000000">
+          <stop value="0" color="red"/>
+          <stop value="26" color="green"/>
+         </RasterColorizer>
+      </RasterSymbolizer>
+    </Rule>
+  </Style>
+
+  <Layer name="dataraster" srs="+init=epsg:32630">
+      <StyleName>ramped</StyleName>
+      <Datasource>
+          <!-- get stats on this file with gdalinfo ../raster/dataraster.tif -stats -->
+          <Parameter name="file">../../data/raster/dataraster.tif</Parameter>
+          <Parameter name="type">gdal</Parameter>
+          <Parameter name="band">1</Parameter>
+      </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/repeat-labels-1.xml b/tests/visual_tests/styles/repeat-labels-1.xml
new file mode 100644
index 0000000..1938a6a
--- /dev/null
+++ b/tests/visual_tests/styles/repeat-labels-1.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    
+    <Style name="line">
+        <Rule>
+            <LineSymbolizer stroke-width="8" stroke="orange"/>
+        </Rule>
+    </Style>
+    
+    <Style name="marker">
+        <Rule>
+            <Filter>[type] = 'poi'</Filter>
+            <MarkersSymbolizer />
+        </Rule>
+    </Style>
+    
+    <Style name="shield">
+        <Rule>
+            <Filter>[type] = 'motorway'</Filter>
+            <ShieldSymbolizer minimum-distance="50" spacing="120" placement="line" face-name="DejaVu Sans Book" size="10" fill="white" file="../../data/svg/rect.svg" transform="scale(0.75)">[ref]</ShieldSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <Filter>[type] != 'poi'</Filter>
+            <TextSymbolizer minimum-distance="50" spacing="70" placement="line" face-name="DejaVu Sans Book" size="12">[name]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>line</StyleName>
+        <StyleName>marker</StyleName>
+        <StyleName>shield</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/repeat-labels.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/repeat-labels-2.xml b/tests/visual_tests/styles/repeat-labels-2.xml
new file mode 100644
index 0000000..64b359c
--- /dev/null
+++ b/tests/visual_tests/styles/repeat-labels-2.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    
+    <Style name="line">
+        <Rule>
+            <LineSymbolizer stroke-width="8" stroke="orange"/>
+        </Rule>
+    </Style>
+    
+    <Style name="marker">
+        <Rule>
+            <Filter>[type] = 'poi'</Filter>
+            <MarkersSymbolizer />
+        </Rule>
+    </Style>
+    
+    <Style name="shield">
+        <Rule>
+            <Filter>[type] = 'motorway'</Filter>
+            <ShieldSymbolizer margin="60" spacing="120" placement="line" face-name="DejaVu Sans Book" size="10" fill="white" file="../../data/svg/rect.svg" transform="scale(0.75)">[ref]</ShieldSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <Filter>[type] != 'poi'</Filter>
+            <TextSymbolizer margin="50" spacing="70" placement="line" face-name="DejaVu Sans Book" size="12">[name]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>line</StyleName>
+        <StyleName>marker</StyleName>
+        <StyleName>shield</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/repeat-labels.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/repeat-labels-3.xml b/tests/visual_tests/styles/repeat-labels-3.xml
new file mode 100644
index 0000000..e767c00
--- /dev/null
+++ b/tests/visual_tests/styles/repeat-labels-3.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    
+    <Style name="line">
+        <Rule>
+            <LineSymbolizer stroke-width="8" stroke="orange"/>
+        </Rule>
+    </Style>
+    
+    <Style name="marker">
+        <Rule>
+            <Filter>[type] = 'poi'</Filter>
+            <MarkersSymbolizer />
+        </Rule>
+    </Style>
+    
+    <Style name="shield">
+        <Rule>
+            <Filter>[type] = 'motorway'</Filter>
+            <ShieldSymbolizer margin="0" repeat-distance="60" spacing="120" placement="line" face-name="DejaVu Sans Book" size="10" fill="white" file="../../data/svg/rect.svg" transform="scale(0.75)">[ref]</ShieldSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <Filter>[type] != 'poi'</Filter>
+            <TextSymbolizer margin="0" repeat-distance="40" spacing="70" placement="line" face-name="DejaVu Sans Book" size="12">[name]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>line</StyleName>
+        <StyleName>marker</StyleName>
+        <StyleName>shield</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/repeat-labels.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/repeat-labels-4.xml b/tests/visual_tests/styles/repeat-labels-4.xml
new file mode 100644
index 0000000..88476f3
--- /dev/null
+++ b/tests/visual_tests/styles/repeat-labels-4.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    
+    <Style name="line">
+        <Rule>
+            <LineSymbolizer stroke-width="8" stroke="orange"/>
+        </Rule>
+    </Style>
+    
+    <Style name="marker">
+        <Rule>
+            <Filter>[type] = 'poi'</Filter>
+            <MarkersSymbolizer />
+        </Rule>
+    </Style>
+    
+    <Style name="shield">
+        <Rule>
+            <Filter>[type] = 'motorway'</Filter>
+            <ShieldSymbolizer margin="10" repeat-distance="60" spacing="120" placement="line" face-name="DejaVu Sans Book" size="10" fill="white" file="../../data/svg/rect.svg" transform="scale(0.75)">[ref]</ShieldSymbolizer>
+        </Rule>
+    </Style>
+
+    <Style name="text">
+        <Rule>
+            <Filter>[type] != 'poi'</Filter>
+            <TextSymbolizer margin="3" repeat-distance="40" spacing="70" placement="line" face-name="DejaVu Sans Book" size="12">[name]</TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>line</StyleName>
+        <StyleName>marker</StyleName>
+        <StyleName>shield</StyleName>
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/repeat-labels.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
diff --git a/tests/visual_tests/styles/road-casings-grouped-rendering.xml b/tests/visual_tests/styles/road-casings-grouped-rendering.xml
new file mode 100644
index 0000000..49b490e
--- /dev/null
+++ b/tests/visual_tests/styles/road-casings-grouped-rendering.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="#dfd8c9">
+
+<Style name="marking" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways')</Filter>
+    <LineSymbolizer stroke="#ffffff" stroke-width="1.8" stroke-dasharray="5, 5" />
+  </Rule>
+</Style>
+<Style name="fill" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'minorroads')</Filter>
+    <LineSymbolizer stroke-width="2.5" stroke="#ffffff" stroke-linecap="round" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'mainroads')</Filter>
+    <LineSymbolizer stroke-width="4" stroke="#ff9999" stroke-linecap="round" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'motorways')</Filter>
+    <LineSymbolizer stroke-width="6" stroke="#ff6666" stroke-linecap="round" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'railways')</Filter>
+    <LineSymbolizer stroke-width="3" stroke="#333333" stroke-linecap="round" />
+  </Rule>
+</Style>
+<Style name="bridge" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
+    <LineSymbolizer stroke-width="6" stroke="#ffffff" />
+  </Rule>
+</Style>
+<Style name="casing" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
+    <LineSymbolizer stroke-width="8" stroke="#333333" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'minorroads')</Filter>
+    <LineSymbolizer stroke-width="3" stroke="#a69269" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'mainroads')</Filter>
+    <LineSymbolizer stroke-width="5" stroke="#ff0000" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'motorways')</Filter>
+    <LineSymbolizer stroke-width="8" stroke="#990000" />
+  </Rule>
+</Style>
+<Layer name="layer"
+  srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"
+  group-by="z"
+  >
+    <StyleName>casing</StyleName>
+    <StyleName>bridge</StyleName>
+    <StyleName>fill</StyleName>
+    <StyleName>marking</StyleName>
+    <Datasource>
+       <Parameter name="file">../data/grouped-rendering.sqlite</Parameter>
+       <Parameter name="table">(SELECT fid, geometry, type, tunnel, bridge, oneway, class, z_order, CAST((z_order / 10.0) AS INTEGER) AS z
+FROM roads ORDER BY z_order) AS road</Parameter>
+       <Parameter name="type">sqlite</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/road-casings-non-grouped-rendering.xml b/tests/visual_tests/styles/road-casings-non-grouped-rendering.xml
new file mode 100644
index 0000000..3d29d93
--- /dev/null
+++ b/tests/visual_tests/styles/road-casings-non-grouped-rendering.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="#dfd8c9">
+
+<Style name="marking" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways')</Filter>
+    <LineSymbolizer stroke="#ffffff" stroke-width="1.8" stroke-dasharray="5, 5" />
+  </Rule>
+</Style>
+<Style name="fill" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'minorroads')</Filter>
+    <LineSymbolizer stroke-width="2.5" stroke="#ffffff" stroke-linecap="round" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'mainroads')</Filter>
+    <LineSymbolizer stroke-width="4" stroke="#ff9999" stroke-linecap="round" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'motorways')</Filter>
+    <LineSymbolizer stroke-width="6" stroke="#ff6666" stroke-linecap="round" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'railways')</Filter>
+    <LineSymbolizer stroke-width="3" stroke="#333333" stroke-linecap="round" />
+  </Rule>
+</Style>
+<Style name="bridge" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
+    <LineSymbolizer stroke-width="6" stroke="#ffffff" />
+  </Rule>
+</Style>
+<Style name="casing" filter-mode="first">
+  <Rule>
+    <Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
+    <LineSymbolizer stroke-width="8" stroke="#333333" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'minorroads')</Filter>
+    <LineSymbolizer stroke-width="3" stroke="#a69269" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'mainroads')</Filter>
+    <LineSymbolizer stroke-width="5" stroke="#ff0000" />
+  </Rule>
+  <Rule>
+    <Filter>([class] = 'motorways')</Filter>
+    <LineSymbolizer stroke-width="8" stroke="#990000" />
+  </Rule>
+</Style>
+<Layer name="layer"
+  srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+    <StyleName>casing</StyleName>
+    <StyleName>bridge</StyleName>
+    <StyleName>fill</StyleName>
+    <StyleName>marking</StyleName>
+    <Datasource>
+       <Parameter name="file">../data/grouped-rendering.sqlite</Parameter>
+       <Parameter name="table">(SELECT fid, geometry, type, tunnel, bridge, oneway, class, z_order, CAST((z_order / 10.0) AS INTEGER) AS z
+FROM roads ORDER BY z_order) AS road</Parameter>
+       <Parameter name="type">sqlite</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/shield-on-line-and-avoid-edges.xml b/tests/visual_tests/styles/shield-on-line-and-avoid-edges.xml
new file mode 100644
index 0000000..22dd1f4
--- /dev/null
+++ b/tests/visual_tests/styles/shield-on-line-and-avoid-edges.xml
@@ -0,0 +1,33 @@
+<Map>
+<Style name="line" filter-mode="first" >
+  <Rule>
+    <LineSymbolizer stroke="#000000" />
+  </Rule>
+</Style>
+<Style name="point-placement" filter-mode="first" >
+  <Rule>
+    <ShieldSymbolizer
+      allow-overlap="true"
+      face-name="DejaVu Sans Book"
+      file="shape://ellipse"
+      placement="line"
+      spacing="30"
+      transform="scale(4,10)"
+      fill="blue"
+      avoid-edges="true"
+      minimum-padding="5"
+      clip="false">
+    </ShieldSymbolizer>
+    <DebugSymbolizer />
+  </Rule>
+</Style>
+<Layer name="carto_tests">
+    <StyleName>line</StyleName>
+    <StyleName>point-placement</StyleName>
+    <Datasource>
+       <Parameter name="type">csv</Parameter>
+       <Parameter name="file">../data/marker-on-line.csv</Parameter>
+       <Parameter name="separator">|</Parameter>
+    </Datasource>
+  </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/shield-on-line-spacing-eq-width.xml b/tests/visual_tests/styles/shield-on-line-spacing-eq-width.xml
index 7faf9cf..0ae09da 100644
--- a/tests/visual_tests/styles/shield-on-line-spacing-eq-width.xml
+++ b/tests/visual_tests/styles/shield-on-line-spacing-eq-width.xml
@@ -1,13 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE Map>
-<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+<Map background-color="steelblue" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
     <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
         <StyleName>alpha</StyleName>
         <Datasource>
             <Parameter name="type">csv</Parameter>
             <Parameter name="inline">
-            wkt
-            "LINESTRING(0 0, 10 2)"
+            wkt,halo-opacity,text-opacity,opacity
+            "LINESTRING(0 0, 10 2)",.1,.1,.1
             </Parameter>
         </Datasource>
     </Layer>
@@ -16,8 +14,8 @@
         <Datasource>
             <Parameter name="type">csv</Parameter>
             <Parameter name="inline">
-            wkt
-            "LINESTRING(0 2, 10 4)"
+            wkt,halo-opacity,text-opacity,opacity
+            "LINESTRING(0 2, 10 4)",1,1,1
             </Parameter>
         </Datasource>
     </Layer>
@@ -26,8 +24,8 @@
         <Datasource>
             <Parameter name="type">csv</Parameter>
             <Parameter name="inline">
-            wkt
-            "LINESTRING(0 4, 10 6)"
+            wkt,halo-opacity,text-opacity,opacity
+            "LINESTRING(0 4, 10 6)",1,1,1
             </Parameter>
         </Datasource>
     </Layer>
@@ -41,9 +39,25 @@
               halo-fill="white"
               halo-radius="2"
               spacing="1"
+              halo-opacity="[halo-opacity]"
+              text-opacity="[text-opacity]"
+              opacity="[opacity]"
               minimum-distance="20">
             'hi'
             </ShieldSymbolizer>
+            <TextSymbolizer
+              placement="line"
+              face-name="DejaVu Sans Book"
+              halo-fill="black"
+              fill="white"
+              size="20"
+              halo-radius="2"
+              halo-rasterizer="fast"
+              halo-opacity="[halo-opacity]"
+              opacity="[opacity]"
+              spacing="15">
+            'there'
+            </TextSymbolizer>
             <LineSymbolizer stroke-width="0.2" stroke="#ff0000" />
         </Rule>
     </Style>
@@ -55,6 +69,9 @@
               face-name="DejaVu Sans Book"
               halo-fill="white"
               halo-radius="2"
+              halo-opacity="[halo-opacity]"
+              text-opacity="[text-opacity]"
+              opacity="[opacity]"
               spacing="20">
             'hi'
             </ShieldSymbolizer>
@@ -69,6 +86,10 @@
               face-name="DejaVu Sans Book"
               halo-fill="white"
               halo-radius="2"
+              halo-rasterizer="fast"
+              halo-opacity="[halo-opacity]"
+              text-opacity="[text-opacity]"
+              opacity="[opacity]"
               spacing="15">
             'hi'
             </ShieldSymbolizer>
diff --git a/tests/visual_tests/styles/shieldsymbolizer-1.xml b/tests/visual_tests/styles/shieldsymbolizer-1.xml
index cc37000..0af9659 100644
--- a/tests/visual_tests/styles/shieldsymbolizer-1.xml
+++ b/tests/visual_tests/styles/shieldsymbolizer-1.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- Without unlock-image -->
 <!DOCTYPE Map>
 <Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
 
diff --git a/tests/visual_tests/styles/shieldsymbolizer-2.xml b/tests/visual_tests/styles/shieldsymbolizer-2.xml
new file mode 100644
index 0000000..7acf427
--- /dev/null
+++ b/tests/visual_tests/styles/shieldsymbolizer-2.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- With unlock-image -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=latlong +datum=WGS84" minimum-version="2.0.0">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/points.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 1</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 2</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="middle" dx="5" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 3</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" vertical-alignment="middle" dy="5" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 4</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg"  dy="0" vertical-alignment="bottom" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 5</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" vertical-alignment="top" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 6</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="left" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 7</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="right" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 8</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="true">'X
X
X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 9</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="true">'XXX'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 10</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/images/crosshair16x16.png" unlock-image="true">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <PointSymbolizer allow-overlap="true" file="../../data/raster/white-alpha.png"/>
+        </Rule>
+</Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/shieldsymbolizer-3.xml b/tests/visual_tests/styles/shieldsymbolizer-3.xml
new file mode 100644
index 0000000..01e3dc1
--- /dev/null
+++ b/tests/visual_tests/styles/shieldsymbolizer-3.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Without unlock-image, with shield-dx -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=latlong +datum=WGS84" minimum-version="2.0.0">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/points.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 1</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="false" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 2</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="middle" dx="5" unlock-image="false" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 3</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" vertical-alignment="middle" dy="5" unlock-image="false" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 4</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg"  dy="0" vertical-alignment="bottom" unlock-image="false" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 5</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" vertical-alignment="top" unlock-image="false" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 6</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="left" unlock-image="false" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 7</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="right" unlock-image="false" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 8</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="false" shield-dx="15">'X
X
X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 9</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="false" shield-dx="15">'XXX'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 10</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/images/crosshair16x16.png" unlock-image="false" shield-dx="15" dy="20">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <PointSymbolizer allow-overlap="true" file="../../data/raster/white-alpha.png"/>
+        </Rule>
+</Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/shieldsymbolizer-4.xml b/tests/visual_tests/styles/shieldsymbolizer-4.xml
new file mode 100644
index 0000000..14fe55e
--- /dev/null
+++ b/tests/visual_tests/styles/shieldsymbolizer-4.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- With unlock-image and shield-dx -->
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=latlong +datum=WGS84" minimum-version="2.0.0">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/points.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 1</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="true" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 2</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="middle" dx="5" unlock-image="true" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 3</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" vertical-alignment="middle" dy="5" unlock-image="true" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 4</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg"  dy="0" vertical-alignment="bottom" unlock-image="true" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 5</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" vertical-alignment="top" unlock-image="true" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 6</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="left" unlock-image="true" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 7</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" allow-overlap="true" horizontal-alignment="right" unlock-image="true" shield-dx="15">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 8</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="true" shield-dx="15">'X
X
X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 9</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/svg/crosshair16x16.svg" unlock-image="true" shield-dx="15">'XXX'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 10</Filter>
+            <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" file="../../data/images/crosshair16x16.png" unlock-image="true" shield-dx="15" dy="20">'X'</ShieldSymbolizer>
+        </Rule>
+        <Rule>
+            <PointSymbolizer allow-overlap="true" file="../../data/raster/white-alpha.png"/>
+        </Rule>
+        <Rule>
+            <DebugSymbolizer />
+        </Rule>
+</Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/simple-shield.xml b/tests/visual_tests/styles/simple-shield.xml
index 2debb37..80efe2c 100644
--- a/tests/visual_tests/styles/simple-shield.xml
+++ b/tests/visual_tests/styles/simple-shield.xml
@@ -6,13 +6,25 @@
     <StyleName>My Style</StyleName>
     <Datasource>
       <Parameter name="type">csv</Parameter>
-      <Parameter name="file">../data/points.csv</Parameter>
+      <Parameter name="inline">
+lat,long,name,nr,color,type,empty-string
+0,0,Test one,1,#ff0000,svg,
+0,0.1,Test two,2,red,svg,
+0,0.2,Test three,3,#00ff00,svg,
+0,0.3,Test four,4,green,svg,
+0,0.4,Test five,5,#0000ff,svg,
+0,0.5,Test six,6,blue,svg,
+0,0.6,Test seven,7,#000000,svg,
+0,0.7,Test eight,8,black,svg,
+0,0.8,Test nine,9,#ffffff,svg,
+0,0.9,Test ten,10,white,svg,
+      </Parameter>
     </Datasource>
   </Layer>
 
     <Style name="My Style">
     <Rule>
-      <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="5" dy="16" file="../../data/svg/crosshair16x16.svg" horizontal-alignment="middle" vertical-alignment="middle" placement-type="simple" placements="N,S,E,W,SW,10,5">[name]</ShieldSymbolizer>
+      <ShieldSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dx="5" dy="16" file="../../data/[type]/[empty-string]crosshair16x16.svg" horizontal-alignment="middle" vertical-alignment="middle" placement-type="simple" placements="N,S,E,W,SW,10,5">[name]</ShieldSymbolizer>
       <PointSymbolizer allow-overlap="true"/>
     </Rule>
   </Style>
diff --git a/tests/visual_tests/styles/style-level-compositing-tiled-0,0.xml b/tests/visual_tests/styles/style-level-compositing-tiled-0,0.xml
new file mode 100644
index 0000000..a3d8f32
--- /dev/null
+++ b/tests/visual_tests/styles/style-level-compositing-tiled-0,0.xml
@@ -0,0 +1,30 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
+    <Style name="style" direct-image-filters="agg-stack-blur(5,5)" image-filters-inflate="true">
+        <Rule>
+            <PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
+        </Rule>
+    </Style>
+    <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/shp/world_merc</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in" image-filters-inflate="true">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+    <Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>mask</StyleName>
+        <Datasource>
+            <Parameter name="inline">
+            wkt,name
+            "Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
+            </Parameter>
+            <Parameter name="type">csv</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/style-level-compositing-tiled-0,1.xml b/tests/visual_tests/styles/style-level-compositing-tiled-0,1.xml
new file mode 100644
index 0000000..a3d8f32
--- /dev/null
+++ b/tests/visual_tests/styles/style-level-compositing-tiled-0,1.xml
@@ -0,0 +1,30 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
+    <Style name="style" direct-image-filters="agg-stack-blur(5,5)" image-filters-inflate="true">
+        <Rule>
+            <PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
+        </Rule>
+    </Style>
+    <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/shp/world_merc</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in" image-filters-inflate="true">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+    <Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>mask</StyleName>
+        <Datasource>
+            <Parameter name="inline">
+            wkt,name
+            "Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
+            </Parameter>
+            <Parameter name="type">csv</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/style-level-compositing-tiled-1,0.xml b/tests/visual_tests/styles/style-level-compositing-tiled-1,0.xml
new file mode 100644
index 0000000..a3d8f32
--- /dev/null
+++ b/tests/visual_tests/styles/style-level-compositing-tiled-1,0.xml
@@ -0,0 +1,30 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
+    <Style name="style" direct-image-filters="agg-stack-blur(5,5)" image-filters-inflate="true">
+        <Rule>
+            <PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
+        </Rule>
+    </Style>
+    <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/shp/world_merc</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in" image-filters-inflate="true">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+    <Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>mask</StyleName>
+        <Datasource>
+            <Parameter name="inline">
+            wkt,name
+            "Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
+            </Parameter>
+            <Parameter name="type">csv</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/style-level-compositing-tiled-1,1.xml b/tests/visual_tests/styles/style-level-compositing-tiled-1,1.xml
new file mode 100644
index 0000000..55177a9
--- /dev/null
+++ b/tests/visual_tests/styles/style-level-compositing-tiled-1,1.xml
@@ -0,0 +1,30 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
+    <Style name="style" direct-image-filters="agg-stack-blur(5,5)" image-filters-inflate="true">
+        <Rule>
+            <PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
+        </Rule>
+    </Style>
+    <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/shp/world_merc</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in">
+        <Rule>
+            <PolygonSymbolizer />
+        </Rule>
+    </Style>
+    <Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+        <StyleName>mask</StyleName>
+        <Datasource>
+            <Parameter name="inline">
+            wkt,name
+            "Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
+            </Parameter>
+            <Parameter name="type">csv</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/text-allow-overlap-expr.xml b/tests/visual_tests/styles/text-allow-overlap-expr.xml
new file mode 100644
index 0000000..ee85083
--- /dev/null
+++ b/tests/visual_tests/styles/text-allow-overlap-expr.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+  <FontSet name="book">
+    <Font face-name="DejaVu Sans Book"/>
+  </FontSet>
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+<Parameter name="inline">
+lat,long,test,text
+ 0.25,-0.35,noexpr-true,ABC
+ 0.25,-0.35,noexpr-true,XYZ
+ 0.25,-0.12,noexpr-false,ABC
+ 0.25,-0.12,noexpr-false,XYZ
+ 0.25, 0.11,noexpr-true,ABC
+ 0.25, 0.11,noexpr-false,XYZ
+ 0.25, 0.35,noexpr-false,ABC
+ 0.25, 0.35,noexpr-true,XYZ
+ 0   ,-0.35,true,ABC
+ 0   ,-0.35,true,XYZ
+ 0   ,-0.12,false,ABC
+ 0   ,-0.12,false,XYZ
+ 0   , 0.11,true,ABC
+ 0   , 0.11,false,XYZ
+ 0   , 0.35,false,ABC
+ 0   , 0.35,true,XYZ
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style" filter-mode="first">
+    <Rule>
+      <Filter>[test] = "noexpr-true"</Filter>
+      <TextSymbolizer fontset-name="book" size="16" placement="point" dx="0" dy="0" allow-overlap="true">[text]</TextSymbolizer>
+    </Rule>
+    <Rule>
+      <Filter>[test] = "noexpr-false"</Filter>
+      <TextSymbolizer fontset-name="book" size="16" placement="point" dx="0" dy="0" allow-overlap="false">[text]</TextSymbolizer>
+    </Rule>
+    <Rule>
+      <TextSymbolizer fontset-name="book" size="16" placement="point" dx="0" dy="0" allow-overlap="[test]">[text]</TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-bengali.xml b/tests/visual_tests/styles/text-bengali.xml
new file mode 100644
index 0000000..e21f6df
--- /dev/null
+++ b/tests/visual_tests/styles/text-bengali.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!--
+  Lohit bengali from https://fedorahosted.org/releases/l/o/lohit/lohit-bengali-ttf-2.5.3.tar.gz
+  via https://fedorahosted.org/lohit/
+-->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84"
+     font-directory="../fonts/lohit-bengali-ttf-2.5.3/">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+	    <StyleName>My Style</StyleName>
+	    <Datasource>
+    		<Parameter name="type">csv</Parameter>
+    		<Parameter name="file">../data/points.csv</Parameter>
+            <Parameter name="extent">-1,-1,1,1</Parameter>
+	    </Datasource>
+    </Layer>
+    <Style name="My Style">
+      <Rule>
+	    <Filter>[nr] = 3</Filter>
+	    <TextSymbolizer face-name="Lohit Bengali Regular" size="8" placement="point">"গোপালগঞ্জ"</TextSymbolizer>
+	</Rule>
+	<Rule>
+	    <Filter>[nr] = 5</Filter>
+	    <TextSymbolizer face-name="Lohit Bengali Regular" size="8" placement="point">"ঝিনাইদহ"</TextSymbolizer>
+	</Rule>
+	<Rule>
+	    <Filter>[nr] = 7</Filter>
+	    <TextSymbolizer face-name="Lohit Bengali Regular" size="8" placement="point">"কুষ্টিয়া"</TextSymbolizer>
+	</Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/text-bug1532.xml b/tests/visual_tests/styles/text-bug1532.xml
new file mode 100644
index 0000000..0c0130e
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1532.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Minimal testcase for bug #1523. -->
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="extent">0.0121962878686,0.14886974508,0.906367305121,0.389927385014</Parameter>
+            <Parameter name="file">../data/bug1532.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <Filter>[wrap] = "yes" and [type] = "line"</Filter>
+            <LineSymbolizer stroke-width="1" stroke="red"/>
+            <!-- Font and size don't matter as long as text length is > wrap_width -->
+            <TextSymbolizer face-name="DejaVu Sans Bold" size="15" placement="line" wrap-width="35">"abcdefgh"</TextSymbolizer>
+        </Rule>
+
+        <Rule>
+            <Filter>[wrap] = "no" and [type] = "line"</Filter>
+            <LineSymbolizer stroke-width="1" stroke="blue"/>
+            <TextSymbolizer face-name="DejaVu Sans Bold" size="15" placement="line">"abcdefgh"</TextSymbolizer>
+        </Rule>
+
+        <Rule>
+            <Filter>[wrap] = "yes" and [type] = "point"</Filter>
+            <PointSymbolizer ignore-placement="true"/>
+            <TextSymbolizer face-name="DejaVu Sans Bold" size="15" placement="point" wrap-width="35">"abcdefgh"</TextSymbolizer>
+        </Rule>
+
+        <Rule>
+            <Filter>[wrap] = "no" and [type] = "point"</Filter>
+            <PointSymbolizer ignore-placement="true"/>
+            <TextSymbolizer face-name="DejaVu Sans Bold" size="15" placement="point">"abcdefgh"</TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-bug1533.xml b/tests/visual_tests/styles/text-bug1533.xml
new file mode 100644
index 0000000..986b15a
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1533.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Minimal testcase for bug #1533. -->
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="extent">0.011974068267,-0.211219329615,0.906589524723,0.389705170555</Parameter>
+            <Parameter name="file">../data/bug1533.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <LineSymbolizer stroke-width="1" stroke="red"/>
+            <MarkersSymbolizer file="shape://arrow" placement="line" transform="scale(.5,.5)"/>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="line" upright="right" dy="10" allow-overlap="true">"right: -->"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="line" upright="left" dy="-10" allow-overlap="true">"left: <--"</TextSymbolizer>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="line" upright="left_only" allow-overlap="true"
+            placement-type="list">"left only <--"
+                <Placement upright="right_only">"right only -->"</Placement>
+                <Placement upright="right_only">"-->"</Placement>
+                <Placement upright="left_only">"<--"</Placement>
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-bug1820+0.xml b/tests/visual_tests/styles/text-bug1820+0.xml
new file mode 100644
index 0000000..eed6d35
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1820+0.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Minimal testcase for bug #1523. -->
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/points.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <PointSymbolizer opacity="0.5" ignore-placement="true"/>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" wrap-width="4" placement="point" dx="0" dy="0"><Format line-spacing="[nr]*10+1">[name]</Format></TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-bug1820+1.xml b/tests/visual_tests/styles/text-bug1820+1.xml
new file mode 100644
index 0000000..563516a
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1820+1.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Minimal testcase for bug #1523. -->
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/points.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <PointSymbolizer opacity="0.5" ignore-placement="true"/>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" wrap-width="4" placement="point" dx="0" dy="1"><Format line-spacing="[nr]*10+1">[name]</Format></TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-bug1820-1.xml b/tests/visual_tests/styles/text-bug1820-1.xml
new file mode 100644
index 0000000..ec4984f
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1820-1.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Minimal testcase for bug #1523. -->
+<Map background-color="white" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/points.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <PointSymbolizer opacity="0.5" ignore-placement="true"/>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" wrap-width="4" placement="point" dx="0" dy="-1"><Format line-spacing="[nr]*10+1">[name]</Format></TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-bug2037.xml b/tests/visual_tests/styles/text-bug2037.xml
new file mode 100644
index 0000000..c960137
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug2037.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+            <StyleName>My Style</StyleName>
+            <Datasource>
+                <Parameter name="type">csv</Parameter>
+                <Parameter name="file">../data/points.csv</Parameter>
+            </Datasource>
+    </Layer>
+    <Style name="My Style">
+        <Rule>
+            <Filter>[nr] = 3</Filter>
+            <TextSymbolizer wrap-width="20" face-name="DejaVu Sans Book" size="9"  wrap-before="true">"abcdef
ghijkl
mnopq
stuv
wxyz"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 4</Filter>
+            <TextSymbolizer wrap-width="20" face-name="DejaVu Sans Book" size="9" wrap-before="false">"abcdef
ghijkl
mnopq
stuv
wxyz"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 7</Filter>
+            <TextSymbolizer wrap-width="30" face-name="DejaVu Sans Book" size="9" wrap-before="true">"Some test text with
forced
line breaks"</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[nr] = 8</Filter>
+            <TextSymbolizer wrap-width="30" face-name="DejaVu Sans Book" size="9" wrap-before="false">"Some test text with
forced
line breaks"</TextSymbolizer>
+        </Rule>
+
+    </Style>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/text-charplacement.xml b/tests/visual_tests/styles/text-charplacement.xml
new file mode 100644
index 0000000..5a8a705
--- /dev/null
+++ b/tests/visual_tests/styles/text-charplacement.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="rgb(255,100,100)">
+    <Style name="road">
+        <Rule>
+            <LineSymbolizer stroke="rgb(255,255,255)" stroke-opacity="0.7"/>
+        </Rule>
+        <Rule>
+            <TextSymbolizer placement="line" label-position-tolerance="50" spacing="20" minimum-distance="5" face-name="DejaVu Sans Book" size="20" halo-radius="1" halo-fill="rgb(255,255,0)">[NAME]</TextSymbolizer>
+        </Rule>
+    </Style>
+    <Layer name="road" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>road</StyleName>
+        <Datasource>
+            <Parameter name="file">../data/charplacement</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/text-data-binding.xml b/tests/visual_tests/styles/text-data-binding.xml
new file mode 100644
index 0000000..fa3b26a
--- /dev/null
+++ b/tests/visual_tests/styles/text-data-binding.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="l1" srs="+proj=latlong +datum=WGS84">
+        <StyleName>text</StyleName>
+        <Datasource>
+            <Parameter name="type">sqlite</Parameter>
+            <Parameter name="file">../data/text-data-binding.sqlite</Parameter>
+            <Parameter name="table">text_layer</Parameter>
+            <Parameter name="extent">-1,-1,1,1</Parameter>
+        </Datasource>
+    </Layer>
+    <Layer name="l2" srs="+proj=latlong +datum=WGS84">
+        <StyleName>circular</StyleName>
+        <Datasource>
+            <Parameter name="type">sqlite</Parameter>
+            <Parameter name="file">../data/text-data-binding.sqlite</Parameter>
+            <Parameter name="table">circular_layer</Parameter>
+            <Parameter name="extent">-1,-1,1,1</Parameter>
+        </Datasource>
+    </Layer>
+    <Style name="circular">
+        <Rule>
+            <LineSymbolizer
+                stroke-width="[double] * 2"
+                stroke="[color2]" />
+            <TextSymbolizer
+                placement="[placement]"
+                face-name="DejaVu Serif Book"
+                spacing="[double] * 2"
+                repeat-distance="[double] * 2"
+                fill="[color1]"
+                >
+                [text1]
+            </TextSymbolizer>
+            <TextSymbolizer
+                geometry-transform="scale(0.7)"
+                placement="[placement]"
+                face-name="DejaVu Sans Book"
+                spacing="[double]"
+                >
+                [text1]
+            </TextSymbolizer>
+            <LineSymbolizer
+                stroke-width="[double] * 2"
+                geometry-transform="scale(0.25) translate(300, 300)"
+                stroke="[color2]" />
+            <TextSymbolizer
+                geometry-transform="scale(0.25) translate(300, 300)"
+                size="[double] * 2"
+                placement="[placement]"
+                face-name="DejaVu Sans Book"
+                horizontal-alignment="[alignment]"
+                allow-overlap="[bool]"
+                max-char-angle-delta="[double] * 0"
+                fill="[color3]"
+                >
+                [text2]
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+    <Style name="text">
+        <Rule>
+            <TextSymbolizer
+                face-name="DejaVu Serif Book"
+                size="[double] * 1.5"
+                placement="[placement1]"
+                vertical-alignment="[alignment1]"
+                horizontal-alignment="[alignment1]"
+                margin="[double] * 5"
+                upright="[upright]"
+                >
+                <Layout wrap-before="[bool]" wrap-width="[double] * 40" justify-alignment="[alignment2]">
+                    <Format line-spacing="[double] * 3">[text1]</Format>" "
+                    <Format fill="[color1]" font-feature-settings="[features]">[text2]</Format>" "
+                    <Format halo-fill="[color2]" halo-radius="[double] * 0.8" size="[double] * 3">[text3]</Format>" "
+                    <Format face-name="DejaVu Serif Bold">[text4]</Format>" "
+                    <Format face-name="DejaVu Sans Mono Bold" character-spacing="[double] * 0.8">[text5]</Format>" "
+                    <Format>[text6]</Format>" "
+                    <Format>[text7]</Format>" "
+                    <Format>[text8]</Format>" "
+                    <Format>[text9]</Format>
+                </Layout>
+                <Layout dy="[double] * 5" dx="[double] * 2" rotate-displacement="[bool]" orientation="[double] * 1.25">
+                    <Format>[text10]</Format>" "
+                    <Format face-name="DejaVu Sans Book">[text11]</Format>" "
+                    <Format text-transform="[text_transform]">[text12]</Format>
+                </Layout>
+                <Layout dy="[double] * 15" dx="[double] * -5" wrap-width="[double]" wrap-character="[wrap_char]">
+                    <Format>[text13]</Format>" "
+                </Layout>
+                <Layout dy="[double] * 15" dx="[double] * 5" wrap-width="[double]" wrap-character="[wrap_char]" repeat-wrap-character="[bool]">
+                    <Format>[text13]</Format>" "
+                </Layout>
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/text-displacement.xml b/tests/visual_tests/styles/text-displacement.xml
new file mode 100644
index 0000000..0a63dd8
--- /dev/null
+++ b/tests/visual_tests/styles/text-displacement.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="rgb(255,100,100)">
+    <Style name="road">
+        <Rule>
+            <LineSymbolizer stroke="rgb(255,255,255)" />
+            <MarkersSymbolizer placement="vertex-first" file="shape://arrow" ignore-placement="true" transform="scale(0.7)" />
+            <TextSymbolizer dy="5" placement="line" label-position-tolerance="5" spacing="60" face-name="DejaVu Sans Book" halo-radius="1" halo-fill="rgb(255,255,0)">[NAME]</TextSymbolizer>
+        </Rule>
+    </Style>
+    <Layer name="road" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>road</StyleName>
+        <Datasource>
+            <Parameter name="file">../data/displacement</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/text-expressionformat-color.xml b/tests/visual_tests/styles/text-expressionformat-color.xml
new file mode 100644
index 0000000..2eec041
--- /dev/null
+++ b/tests/visual_tests/styles/text-expressionformat-color.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="orange" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+
+  <Layer name="layer" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>My Style</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="file">../data/points.csv</Parameter>
+    </Datasource>
+  </Layer>
+
+    <Style name="My Style">
+    <Rule>
+      <PointSymbolizer/>
+      <TextSymbolizer allow-overlap="true" face-name="DejaVu Sans Book" size="16" placement="point" dy="5">
+        <Format fill="'#ff0000'">"red text"+'
'</Format>
+        <Format fill="[color]">"test"</Format>
+      </TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-font-features.xml b/tests/visual_tests/styles/text-font-features.xml
new file mode 100644
index 0000000..59c0147
--- /dev/null
+++ b/tests/visual_tests/styles/text-font-features.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="extent">-1,-1,1,1</Parameter>
+            <Parameter name="inline">
+                id, lat, long, features, text, spacing
+                1,  0.6, 0, "", "The first floor", 10
+                2,  0.4, 0, "kern 0, liga 0", "The first floor", 10
+                3,  0.2, 0, "liga 1, dlig 1", "The first floor", 0
+                4,  0.0, 0, "smcp 1", "The first floor", 0
+                5, -0.2, 0, "frac 1, numr 1, dnom 1", "1⁄2 1⁄3 1⁄4", 0
+                6, -0.4, 0, "zero 1, onum 1", "0123456789", 0
+                7, -0.6, 0, "subs[1] 1, subs[4] 1", "H2SO4", 0
+            </Parameter>
+        </Datasource>
+    </Layer>
+    <Style name="My Style">
+        <Rule>
+            <TextSymbolizer
+                face-name="DejaVu Serif Book"
+                size="15"
+                placement="point"
+                character-spacing="[spacing]"
+                font-feature-settings="[features]"
+                >[text]</TextSymbolizer>
+        </Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/text-halign-adjust-multiline.xml b/tests/visual_tests/styles/text-halign-adjust-multiline.xml
new file mode 100644
index 0000000..0654bb1
--- /dev/null
+++ b/tests/visual_tests/styles/text-halign-adjust-multiline.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <LineSymbolizer
+                stroke-width="12"
+                stroke="red"
+                />
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="16"
+                placement="line"
+                max-char-angle-delta="0"
+                horizontal-alignment="adjust"
+                >"Adjust\nmultiline"</TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-halign-adjust.xml b/tests/visual_tests/styles/text-halign-adjust.xml
new file mode 100644
index 0000000..039f760
--- /dev/null
+++ b/tests/visual_tests/styles/text-halign-adjust.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <LineSymbolizer
+                stroke-width="12"
+                stroke="red"
+                />
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="16"
+                placement="line"
+                max-char-angle-delta="0"
+                horizontal-alignment="adjust"
+                >"Adjust"</TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-halign.xml b/tests/visual_tests/styles/text-halign.xml
new file mode 100644
index 0000000..d0e67dd
--- /dev/null
+++ b/tests/visual_tests/styles/text-halign.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <LineSymbolizer stroke-width="12" stroke="red"/>
+            <TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="line" upright="auto" max-char-angle-delta="0" horizontal-alignment="left" label-position-tolerance="0.0001">"horizontal-alignment=left"</TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/text-halo-opacity.xml b/tests/visual_tests/styles/text-halo-opacity.xml
new file mode 100644
index 0000000..d8cca19
--- /dev/null
+++ b/tests/visual_tests/styles/text-halo-opacity.xml
@@ -0,0 +1,85 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue" minimum-version="3.0.0">
+
+    <Style name="labels">
+        <Rule>
+            <Filter>([id]=1)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="4"
+              halo-opacity="1.0"
+              >
+              'halo-opacity = 1.0'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=2)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="4"
+              halo-opacity="0.75"
+              >
+              'halo-opacity = 0.75'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=3)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="4"
+              halo-opacity="0.5"
+            >
+              'halo-opacity = 0.5'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=4)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="4"
+              halo-opacity="0.25"
+            >
+                'halo-opacity = 0.25'
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>labels</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id,x,y
+1,1.5,4.5
+2,1.5,3.5
+3,1.5,2.5
+4,1.5,1.5
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/text-halo-transform.xml b/tests/visual_tests/styles/text-halo-transform.xml
new file mode 100644
index 0000000..bcbbdd4
--- /dev/null
+++ b/tests/visual_tests/styles/text-halo-transform.xml
@@ -0,0 +1,240 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue" minimum-version="0.7.2">
+
+    <Style name="labels">
+        <Rule>
+            <Filter>([id]=0.1)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius=".1"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast .1'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=0.3)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius=".3"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast .3'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=0.5)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius=".5"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast .5'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=0.7)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius=".7"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast .7'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=1.0)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius="1"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast 1'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=1.5)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius="1.5"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast 1.5'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=2.5)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius="2.5"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast 2.5'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=4)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-rasterizer="fast"
+              halo-radius="4"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'fast 4'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=100.1)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius=".1"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full .1'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=100.3)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius=".3"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full .3'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=100.5)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius=".5"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full .5'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=100.7)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius=".7"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full .7'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=101)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="1"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full 1'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=101.5)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="1.5"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full 1.5'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=102.5)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="2.5"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full 2.5'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>([id]=104)</Filter>
+            <TextSymbolizer
+              face-name="DejaVu Sans Book"
+              size="15"
+              halo-radius="4"
+              halo-transform="rotate(-3.14159*[x]*[y]) translate([x],[y])"
+            >
+                'full 4'
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>labels</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id,x,y
+0.1,1.5,4.5
+0.3,1.5,4
+0.5,1.5,3.5
+0.7,1.5,3
+1,1.5,2.5
+1.5,1.5,2
+2.5,1.5,1.5
+4,1.5,1
+
+100.1,3.5,4.5
+100.3,3.5,4
+100.5,3.5,3.5
+100.7,3.5,3
+101,3.5,2.5
+101.5,3.5,2
+102.5,3.5,1.5
+104,3.5,1
+
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/text-line-wrap.xml b/tests/visual_tests/styles/text-line-wrap.xml
new file mode 100644
index 0000000..bb0f874
--- /dev/null
+++ b/tests/visual_tests/styles/text-line-wrap.xml
@@ -0,0 +1,74 @@
+<!DOCTYPE Map>
+<Map background-color="#b5d0d0" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="0.7.2">
+    <Style name="1">
+        <Rule>
+            <TextSymbolizer
+                size="15"
+                dy="-5"
+                allow-overlap="true"
+                face-name="DejaVu Sans Book"
+                wrap-width=".1"
+                repeat-wrap-character="[repeat-wrap-character]"
+                wrap-character="[wrap-character]"
+                halo-radius="1">[label]</TextSymbolizer>
+            <PointSymbolizer allow-overlap="true" />
+        </Rule>        
+    </Style>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>1</StyleName>
+        <Datasource>
+            <Parameter name="inline">
+
+            {
+                "type": "FeatureCollection",
+                            
+                "features": [
+                
+                    { "type": "Feature", 
+                        "properties": {
+                            "label": "this,that",
+                            "wrap-character":",",
+                            "repeat-wrap-character":true
+                        },
+                        "geometry"  : { "type": "Point", "coordinates": [ 2.5, 2.5 ] }
+                    },
+                    { "type": "Feature", 
+                        "properties": {
+                            "label": "this-that",
+                            "wrap-character":"-",
+                            "repeat-wrap-character":true
+                        },
+                        "geometry"  : { "type": "Point", "coordinates": [ 0, 5 ] }
+                    }
+                ]
+            }
+            
+            </Parameter>
+            <Parameter name="type">geojson</Parameter>
+        </Datasource>
+    </Layer>
+
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+-1,-1
+6,-1
+-1,6
+6,6
+            </Parameter>
+        </Datasource>
+    </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/text-malayalam.xml b/tests/visual_tests/styles/text-malayalam.xml
new file mode 100644
index 0000000..48b24c9
--- /dev/null
+++ b/tests/visual_tests/styles/text-malayalam.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="white" srs="+proj=latlong +datum=WGS84"
+     font-directory="../fonts/Rachana/">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+	    <StyleName>My Style</StyleName>
+	    <Datasource>
+    		<Parameter name="type">csv</Parameter>
+    		<Parameter name="file">../data/points.csv</Parameter>
+            <Parameter name="extent">-1,-1,1,1</Parameter>
+	    </Datasource>
+    </Layer>
+    <Style name="My Style">
+	<Rule>
+	    <Filter>[nr] = 5</Filter>
+	    <TextSymbolizer face-name="Rachana Book" size="30" placement="point" dy="0">"ഇന്ത്യ"</TextSymbolizer>
+	</Rule>
+    </Style>
+</Map>
diff --git a/tests/visual_tests/styles/text-multi-layout-1.xml b/tests/visual_tests/styles/text-multi-layout-1.xml
new file mode 100644
index 0000000..46cb7db
--- /dev/null
+++ b/tests/visual_tests/styles/text-multi-layout-1.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
+
+  <Layer name="obstacle" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>obstacle</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr
+-0.5,0.5,0
+0.5,-0.5,1
+0.5,0.5,2
+-0.5,-0.5,3
+0.08,0,4
+-0.08,0,5
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="obstacle">
+    <Rule>
+      <PointSymbolizer file="../../data/svg/crosshair16x16.svg" transform="scale(0.5)"/>
+    </Rule>
+  </Style>
+
+  <Layer name="layer1" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>points</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long,nr,ref
+-0.45,-0.45,0,first
+0.45,-0.45,1,second
+0.45,0.45,2,third
+-0.45,0.45,3,fourth
+0,0,4,fifth
+      </Parameter>
+    </Datasource>
+  </Layer>
+
+  <Style name="points">
+    <Rule>
+      <PointSymbolizer allow-overlap="true" ignore-placement="true" file="../../data/raster/white-alpha.png"/>
+      <TextSymbolizer face-name="DejaVu Sans Book" placement="point" placement-type="list" size="16" dx="-4" dy="-8">
+        "test "+[nr]
+        <Layout dx="0" dy="8" horizontal-alignment="right">
+          <Format fill="red">[ref]</Format>
+        </Layout>
+        <Placement size="14" dy="8">
+          "test "+[nr]
+          <Format fill="blue">
+            <Layout dx="0" dy="-8" horizontal-alignment="right">[ref]</Layout>
+          </Format>
+        </Placement>
+        <Placement dx="0" dy="0">
+          "test "+[nr]
+          <Format  fill="yellow">" ("+[ref]+")"</Format>
+        </Placement>
+      </TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
+
diff --git a/tests/visual_tests/styles/text-multi-layout-2.xml b/tests/visual_tests/styles/text-multi-layout-2.xml
new file mode 100644
index 0000000..513dd72
--- /dev/null
+++ b/tests/visual_tests/styles/text-multi-layout-2.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<Map background-color="green" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" minimum-version="2.0.0">
+    
+  <Layer name="layer1" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>points</StyleName>
+    <Datasource>
+      <Parameter name="type">csv</Parameter>
+      <Parameter name="inline">
+lat,long
+0,0
+      </Parameter>
+    </Datasource>
+  </Layer>
+  
+  <Style name="points">
+    <Rule>
+      <PointSymbolizer allow-overlap="true" ignore-placement="true" file="../../data/raster/white-alpha.png"/>
+      <TextSymbolizer face-name="DejaVu Sans Bold" size="16" wrap-width="60" placement="point" dx="-15" dy="-10">
+        "Symbolizer Base Text"
+        <Format face-name="DejaVu Sans Book" size="12">
+          <Layout orientation="45" dx="25">
+            "Rotated Layout with "
+            <Format fill="blue">
+              "Blue Format Child Node"
+              <Layout vertical-alignment="top" rotate-displacement="true" dy="-5">
+                "Rotated child layout with rotate-displacement"
+              </Layout>
+            </Format>
+          </Layout>
+          <Layout wrap-width="100" wrap-before="true" dy="30">
+            <Format halo-radius="1.5">
+              "South Offset Layout"
+              <Layout dx="30" horizontal-alignment="middle" justify-alignment="center">
+                <Format halo-fill="turquoise">"South offset child layout, centered"</Format>
+              </Layout>
+              <Layout dx="75" wrap-width="20" horizontal-alignment="right" justify-alignment="right">
+                <Format face-name="DejaVu Sans Oblique">"South offset child layout, right"</Format>
+              </Layout>
+            </Format>
+          </Layout>
+        </Format>
+      </TextSymbolizer>
+    </Rule>
+  </Style>
+
+</Map>
+
diff --git a/tests/visual_tests/styles/text-overlap.xml b/tests/visual_tests/styles/text-overlap.xml
new file mode 100644
index 0000000..08ad675
--- /dev/null
+++ b/tests/visual_tests/styles/text-overlap.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="rgb(255,100,100)">
+    <Style name="road">
+        <Rule>
+            <LineSymbolizer stroke="rgb(255,255,255)" stroke-width="12" stroke-opacity="0.7"/>
+        </Rule>
+        <Rule>
+            <TextSymbolizer placement="line" label-position-tolerance="50" spacing="60" minimum-distance="5" face-name="DejaVu Sans Book" halo-radius="1" halo-fill="rgb(255,255,0)">[NAME]</TextSymbolizer>
+        </Rule>
+    </Style>
+    <Layer name="road" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>road</StyleName>
+        <Datasource>
+            <Parameter name="file">../data/overlap</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/text-spacing.xml b/tests/visual_tests/styles/text-spacing.xml
new file mode 100644
index 0000000..265f80f
--- /dev/null
+++ b/tests/visual_tests/styles/text-spacing.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="rgb(255,100,100)">
+    <Style name="road">
+        <Rule>
+            <LineSymbolizer stroke="rgb(255,255,255)" stroke-width="12" stroke-linejoin="round" stroke-linecap="round"/>
+        </Rule>
+        <Rule>
+            <TextSymbolizer placement="line" label-position-tolerance="5" spacing="80" face-name="DejaVu Sans Book" halo-radius="1" halo-fill="rgb(255,255,0)">[NAME]</TextSymbolizer>
+        </Rule>
+    </Style>
+    <Layer name="road" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>road</StyleName>
+        <Datasource>
+            <Parameter name="file">../data/textspacing</Parameter>
+            <Parameter name="type">shape</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
diff --git a/tests/visual_tests/styles/text-ttc-font.xml b/tests/visual_tests/styles/text-ttc-font.xml
new file mode 100644
index 0000000..98f36b8
--- /dev/null
+++ b/tests/visual_tests/styles/text-ttc-font.xml
@@ -0,0 +1,80 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue" font-directory="../../data/fonts/NotoSans-Regular.ttc">
+
+    <Style name="labels">
+        <Rule>
+            <Filter>[x]=1.5</Filter>
+            <TextSymbolizer
+              face-name="Noto Sans UI Regular"
+              size="[id]*5.5"
+              allow-overlap="true"
+              halo-rasterizer="full"
+              halo-radius="[id]/6.0"
+              opacity="[id]/8.0"
+            >'Noto Sans'
+            </TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[x]=3.5</Filter>
+            <TextSymbolizer
+              face-name="Noto Sans Regular"
+              size="[id]*5.5"
+              allow-overlap="true"
+              halo-rasterizer="fast"
+              halo-radius="[id]/6.0"
+              opacity="[id]/8.0"
+            >'Noto Sans'
+            </TextSymbolizer>
+        </Rule>
+    </Style>
+
+    <Layer name="point" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>labels</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id,x,y
+1,1.5,4.5
+2,1.5,4
+3,1.5,3.5
+4,1.5,3
+5,1.5,2.5
+6,1.5,2
+7,1.5,1.5
+8,1.5,1
+
+1,3.5,4.5
+2,3.5,4
+3,3.5,3.5
+4,3.5,3
+5,3.5,2.5
+6.5,3.5,2
+7,3.5,1.5
+8,3.5,1
+
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+    <!-- points to frame data view -->
+
+    <Style name="frame">
+        <Rule>
+            <PointSymbolizer />
+        </Rule>
+    </Style>
+
+    <Layer name="frame" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+        <StyleName>frame</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+x,y
+0,0
+5,0
+0,5
+5,5
+            </Parameter>
+        </Datasource>
+    </Layer>
+    
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/text-typographic.xml b/tests/visual_tests/styles/text-typographic.xml
new file mode 100644
index 0000000..7ef23d7
--- /dev/null
+++ b/tests/visual_tests/styles/text-typographic.xml
@@ -0,0 +1,79 @@
+<Map>
+    <Style name="lines" filter-mode="first">
+        <Rule>
+            <Filter>[id]=1</Filter>
+            <LineSymbolizer stroke="blue" />
+            <LineSymbolizer stroke="darkblue" stroke-width="3" geometry-transform="translate(15,15)"/>
+        </Rule>
+        <Rule>
+            <Filter>[id]=2</Filter>
+            <LineSymbolizer stroke="red" geometry-transform="rotate(90,256,256)"/>
+            <LineSymbolizer stroke="darkred" stroke-width="3" geometry-transform="rotate(90,256,256) translate(15,15)"/>
+        </Rule>
+    </Style>
+    <Style name="texts">
+        <Rule>
+            <Filter>[id]=1</Filter>
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="12"
+                halo-radius="2"
+                placement="line"
+                allow-overlap="true"
+                spacing="1"
+                max-char-angle-delta="0"
+                upright="right"
+                text-transform="uppercase"
+              >'Cádiz España • '</TextSymbolizer>
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="12"
+                halo-radius="2"
+                placement="line"
+                allow-overlap="true"
+                spacing="1"
+                max-char-angle-delta="0"
+                upright="right"
+                geometry-transform="translate(15,15)"
+              >'Cádiz España • '</TextSymbolizer>
+        </Rule>
+        <Rule>
+            <Filter>[id]=2</Filter>
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="12"
+                halo-radius="2"
+                placement="line"
+                allow-overlap="true"
+                spacing="1"
+                max-char-angle-delta="0"
+                geometry-transform="rotate(90,256,256)"
+                upright="left"
+                text-transform="uppercase"
+              >'Brückenstraße • '</TextSymbolizer>
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="12"
+                halo-radius="2"
+                placement="line"
+                allow-overlap="true"
+                spacing="1"
+                max-char-angle-delta="0"
+                geometry-transform="rotate(90,256,256) translate(15,15)"
+                upright="left"
+              >'Brückenstraße • '</TextSymbolizer>
+        </Rule>
+    </Style>
+    <Layer name="layer">
+        <StyleName>lines</StyleName>
+        <StyleName>texts</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="inline">
+id,wkt
+1,"LINESTRING(0 0, 1 0, 1 1, 2 1, 2 2, 3 2, 3 3, 4 3, 4 4, 5 4, 5 5, 6 5, 6 6, 7 6, 7 7, 8 7, 8 8, 9 8, 9 9, 10 9, 10 10)"
+2,"LINESTRING(10 10, 10 9, 9 9, 9 8, 8 8, 8 7, 7 7, 7 6, 6 6, 6 5, 5 5, 5 4, 4 4, 4 3, 3 3, 3 2, 2 2, 2 1, 1 1, 1 0, 0 0)"
+            </Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/text-vertical-alignment.xml b/tests/visual_tests/styles/text-vertical-alignment.xml
new file mode 100644
index 0000000..b980105
--- /dev/null
+++ b/tests/visual_tests/styles/text-vertical-alignment.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map>
+<!-- Upright test -->
+<Map background-color="white" srs="+proj=latlong +datum=WGS84">
+
+    <Layer name="layer" srs="+proj=latlong +datum=WGS84">
+        <StyleName>My Style</StyleName>
+        <Datasource>
+            <Parameter name="type">csv</Parameter>
+            <Parameter name="file">../data/lines2.csv</Parameter>
+        </Datasource>
+    </Layer>
+
+    <Style name="My Style">
+        <Rule>
+            <LineSymbolizer stroke-width="12" stroke="red" />
+            <MarkersSymbolizer placement="vertex-first" file="shape://arrow" ignore-placement="true" />
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="16"
+                placement="line"
+                max-char-angle-delta="0"
+                allow-overlap="true"
+                vertical-alignment="top"
+                >"vertical-alignment=top"</TextSymbolizer>
+            <TextSymbolizer
+                face-name="DejaVu Sans Book"
+                size="16"
+                placement="line"
+                max-char-angle-delta="0"
+                allow-overlap="true"
+                vertical-alignment="bottom"
+                >"vertical-alignment=bottom"</TextSymbolizer>
+        </Rule>
+    </Style>
+
+</Map>
diff --git a/tests/visual_tests/styles/tiff-nodata-edge-rgba.xml b/tests/visual_tests/styles/tiff-nodata-edge-rgba.xml
new file mode 100644
index 0000000..4d56afb
--- /dev/null
+++ b/tests/visual_tests/styles/tiff-nodata-edge-rgba.xml
@@ -0,0 +1,17 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="steelblue">
+<Style name="heat">
+  <Rule>
+    <RasterSymbolizer opacity="1" scaling="bilinear"/>
+  </Rule>
+</Style>
+<Layer name="heat"
+  srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>heat</StyleName>
+    <Datasource>
+       <Parameter name="file">../data/aerial_rgba.tiff</Parameter>
+       <Parameter name="type">gdal</Parameter>
+       <Parameter name="nodata">255</Parameter>
+       <Parameter name="nodata_tolerance">5</Parameter>
+    </Datasource>
+  </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/tiff-nodata-rgb.xml b/tests/visual_tests/styles/tiff-nodata-rgb.xml
new file mode 100644
index 0000000..decad10
--- /dev/null
+++ b/tests/visual_tests/styles/tiff-nodata-rgb.xml
@@ -0,0 +1,17 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="steelblue">
+<Style name="heat">
+  <Rule>
+    <RasterSymbolizer opacity="1" scaling="bilinear"/>
+  </Rule>
+</Style>
+<Layer name="heat"
+  srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>heat</StyleName>
+    <Datasource>
+       <!-- created with nearblack -o r.tif -of GTiff -white tests/visual_tests/data/heat.tif -setmask  tests/visual_tests/data/heat_rgb.tif -->
+       <Parameter name="file">../data/heat_rgb.tif</Parameter>
+       <Parameter name="type">gdal</Parameter>
+       <Parameter name="nodata">255</Parameter>
+    </Datasource>
+  </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/tiff-nodata-rgba.xml b/tests/visual_tests/styles/tiff-nodata-rgba.xml
new file mode 100644
index 0000000..80e674e
--- /dev/null
+++ b/tests/visual_tests/styles/tiff-nodata-rgba.xml
@@ -0,0 +1,16 @@
+<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="steelblue">
+<Style name="heat">
+  <Rule>
+    <RasterSymbolizer opacity="1" scaling="bilinear"/>
+  </Rule>
+</Style>
+<Layer name="heat"
+  srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>heat</StyleName>
+    <Datasource>
+       <!-- created with gdal_translate tests/visual_tests/data/heat.tif -a_nodata 255 tests/visual_tests/data/heat_nodata.tif -->
+       <Parameter name="file">../data/heat_nodata.tif</Parameter>
+       <Parameter name="type">gdal</Parameter>
+    </Datasource>
+  </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/tiff-nodata-tolerance.xml b/tests/visual_tests/styles/tiff-nodata-tolerance.xml
new file mode 100644
index 0000000..05956a1
--- /dev/null
+++ b/tests/visual_tests/styles/tiff-nodata-tolerance.xml
@@ -0,0 +1,19 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="white">
+
+<Style name="test">
+  <Rule>
+    <RasterSymbolizer scaling="bilinear" />
+  </Rule>
+</Style>
+
+<Layer name="test" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
+    <StyleName>test</StyleName>
+    <Datasource>
+        <Parameter name="file">../data/Yosemite_L9.tif</Parameter>
+        <Parameter name="type">gdal</Parameter>
+        <Parameter name="nodata">255</Parameter>
+        <Parameter name="nodata_tolerance">100</Parameter>
+    </Datasource>
+</Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/tiff-reprojection-1.xml b/tests/visual_tests/styles/tiff-reprojection-1.xml
new file mode 100644
index 0000000..66519f9
--- /dev/null
+++ b/tests/visual_tests/styles/tiff-reprojection-1.xml
@@ -0,0 +1,15 @@
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="#b8dee6" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
+<Style name="heat" filter-mode="first" >
+  <Rule>
+    <RasterSymbolizer opacity="1" scaling="bilinear"/>
+  </Rule>
+</Style>
+<Layer name="heat"
+  srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
+    <StyleName>heat</StyleName>
+    <Datasource>
+       <Parameter name="file">../data/heat.tif</Parameter>
+       <Parameter name="type">gdal</Parameter>
+    </Datasource>
+  </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/tiff-reprojection-2.xml b/tests/visual_tests/styles/tiff-reprojection-2.xml
new file mode 100644
index 0000000..0c3520c
--- /dev/null
+++ b/tests/visual_tests/styles/tiff-reprojection-2.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE Map[]>
+<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="#b8dee6" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
+
+<Style name="samp1" filter-mode="first">
+  <Rule>
+    <RasterSymbolizer opacity="1" />
+  </Rule>
+</Style>
+<Layer name="samp1"
+  srs="+init=epsg:26910">
+    <StyleName>samp1</StyleName>
+    <Datasource>
+       <Parameter name="file">../data/lower_columbia.tif</Parameter>
+       <Parameter name="type">gdal</Parameter>
+    </Datasource>
+  </Layer>
+
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/tiff_colortable.xml b/tests/visual_tests/styles/tiff_colortable.xml
new file mode 100644
index 0000000..daf2aa4
--- /dev/null
+++ b/tests/visual_tests/styles/tiff_colortable.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Map srs="+init=epsg:32630" background-color="steelblue">
+    <Style name="2011_5km_vrt_nodata_style">
+        <Rule>
+            <RasterSymbolizer/>
+        </Rule>
+    </Style>
+    <Layer name="2011_5km_vrt_nodata" srs="+init=epsg:32630">
+        <StyleName>2011_5km_vrt_nodata_style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/raster/dataraster.tif</Parameter>
+            <Parameter name="type">gdal</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/tiff_colortable_custom_nodata.xml b/tests/visual_tests/styles/tiff_colortable_custom_nodata.xml
new file mode 100644
index 0000000..f663d75
--- /dev/null
+++ b/tests/visual_tests/styles/tiff_colortable_custom_nodata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Map srs="+init=epsg:32630" background-color="steelblue">
+    <Style name="2011_5km_vrt_nodata_style">
+        <Rule>
+            <RasterSymbolizer/>
+        </Rule>
+    </Style>
+    <Layer name="2011_5km_vrt_nodata" srs="+init=epsg:32630">
+        <StyleName>2011_5km_vrt_nodata_style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/raster/dataraster.tif</Parameter>
+            <Parameter name="nodata">20</Parameter>
+            <Parameter name="type">gdal</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/styles/vrt_colortable.xml b/tests/visual_tests/styles/vrt_colortable.xml
new file mode 100644
index 0000000..f510883
--- /dev/null
+++ b/tests/visual_tests/styles/vrt_colortable.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Map srs="+init=epsg:32630" background-color="rgb(255,255,255)">
+    <Style name="2011_5km_vrt_nodata_style">
+        <Rule>
+            <RasterSymbolizer/>
+        </Rule>
+    </Style>
+    <Layer name="2011_5km_vrt_nodata" srs="+init=epsg:32630">
+        <StyleName>2011_5km_vrt_nodata_style</StyleName>
+        <Datasource>
+            <Parameter name="file">../../data/raster/dataraster.vrt</Parameter>
+            <Parameter name="type">gdal</Parameter>
+        </Datasource>
+    </Layer>
+</Map>
\ No newline at end of file
diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py
index 6f6ad24..40e1472 100755
--- a/tests/visual_tests/test.py
+++ b/tests/visual_tests/test.py
@@ -1,13 +1,14 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
+import sys
 import mapnik
-mapnik.logger.set_severity(mapnik.severity_type.None)
-
+#mapnik.logger.set_severity(mapnik.severity_type.None)
+#mapnik.logger.set_severity(mapnik.severity_type.Debug)
 import shutil
-import sys
 import os.path
 from compare import compare, compare_grids
+import platform
 
 try:
     import json
@@ -21,16 +22,20 @@ defaults = {
     'scales':[1.0,2.0],
     'agg': True,
     'cairo': mapnik.has_cairo(),
-    'grid': True
+    'grid': mapnik.has_grid_renderer()
 }
 
 cairo_threshold = 10
-if 'Linux' == os.uname()[0]:
+agg_threshold = 0
+grid_threshold = 5
+if 'Linux' == platform.uname()[0]:
     # we assume if linux then you are running packaged cairo
     # which is older than the 1.12.14 version we used on OS X
     # to generate the expected images, so we'll rachet back the threshold
     # https://github.com/mapnik/mapnik/issues/1868
-    cairo_threshold = 120
+    cairo_threshold = 230
+    agg_threshold = 12
+    grid_threshold = 6
 
 def render_cairo(m, output, scale_factor):
     mapnik.render_to_file(m, output, 'ARGB32', scale_factor)
@@ -40,15 +45,18 @@ def render_cairo(m, output, scale_factor):
 
 def render_grid(m, output, scale_factor):
     grid = mapnik.Grid(m.width, m.height)
-    mapnik.render_layer(m, grid, layer=0)
+    mapnik.render_layer(m, grid, layer=0, scale_factor=scale_factor)
     utf1 = grid.encode('utf', resolution=4)
     open(output,'wb').write(json.dumps(utf1, indent=1))
 
+def render_agg(m, output, scale_factor):
+    mapnik.render_to_file(m, output, 'png8:m=h', scale_factor),
+
 renderers = [
     { 'name': 'agg',
-      'render': lambda m, output, scale_factor: mapnik.render_to_file(m, output, 'png8:m=h', scale_factor),
+      'render': render_agg,
       'compare': lambda actual, reference: compare(actual, reference, alpha=True),
-      'threshold': 0,
+      'threshold': agg_threshold,
       'filetype': 'png',
       'dir': 'images'
     },
@@ -62,7 +70,7 @@ renderers = [
     { 'name': 'grid',
       'render': render_grid,
       'compare': lambda actual, reference: compare_grids(actual, reference, alpha=False),
-      'threshold': 0,
+      'threshold': grid_threshold,
       'filetype': 'json',
       'dir': 'grids'
     }
@@ -76,6 +84,14 @@ sizes_many_in_small_range = [(490, 100), (495, 100), (497, 100), (498, 100),
     (499, 100), (500, 100), (501, 100), (502, 100), (505, 100), (510, 100)]
 
 default_text_box = mapnik.Box2d(-0.05, -0.01, 0.95, 0.01)
+large_text_box = mapnik.Box2d(-0.5, -0.5, 0.5, 0.5)
+
+merc_z1_bboxes = {
+  '0,0':mapnik.Box2d(-20037508.342,0,0,20037508.342), # upper left
+  '1,0':mapnik.Box2d(0,0,20037508.342,20037508.342), # upper right
+  '0,1':mapnik.Box2d(-20037508.342,-20037508.342,0,0), # lower left
+  '1,1':mapnik.Box2d(0,-20037508.342,20037508.342,0) # lower right
+}
 
 dirname = os.path.dirname(__file__)
 
@@ -85,26 +101,48 @@ files = {
     'lines-1': {'sizes': sizes_few_square,'bbox':default_text_box},
     'lines-2': {'sizes': sizes_few_square,'bbox':default_text_box},
     'lines-3': {'sizes': sizes_few_square,'bbox':default_text_box},
-    # https://github.com/mapnik/mapnik/issues/1696
-    # https://github.com/mapnik/mapnik/issues/1521
-    # fails with clang++ on os x
+    'lines-4': {'sizes': sizes_few_square,'bbox':default_text_box},
+    'lines-5': {'sizes': sizes_few_square,'bbox':default_text_box},
+    'lines-6': {'sizes': sizes_few_square,'bbox':default_text_box},
+    'lines-7': {'sizes': sizes_few_square,'bbox':mapnik.Box2d(-1.2, -1.2, 1.2, 1.2)},
+    'lines-multi-layout-1': {'sizes': [(800,800)],'bbox':default_text_box},
+    'lines-multi-layout-2': {'sizes': [(800,800)],'bbox':mapnik.Box2d(-1.2, -1.2, 1.2, 1.2)},
+    'lines-multi-layout-shield': {'sizes': [(800,800)],'bbox':default_text_box},
     'lines-shield': {'sizes': sizes_few_square,'bbox':default_text_box},
     'collision': {'sizes':[(600,400)]},
+    'simple-shield': {'sizes':[(600,400)]},
     'shield-on-polygon': {'sizes':[(600,400)]},
     'shield-on-line-spacing-eq-width': {'sizes':[(600,400)]},
+    'geometry-transform-translate': {'sizes':[(200,200)]},
+    'geometry-transform-translate-patterns': {'sizes':[(200,200)]},
+    'geometry-transform-translate-patterns-svg': {'sizes':[(200,200)]},
+    'geometry-transform-scale': {'sizes': [(500, 500)]},
+    'geometry-transform-scale-patterns': {'sizes': [(500, 500)]},
+    'marker-interior-position': {'sizes':[(600,400)]},
     'marker-svg-opacity':{},
+    'marker-svg-opacity2':{},
+    'marker-svg-empty-g-element':{},
     'marker-multi-policy': {'sizes':[(600,400)]},
     'marker-on-line': {'sizes':[(600,400)],
         'bbox': mapnik.Box2d(-10, 0, 15, 20)},
+    'marker-on-line-and-line-placement': {'sizes':[(600,400)],
+        'bbox': mapnik.Box2d(-10, 0, 15, 20)},
     'marker-on-line-spacing-eq-width': {'sizes':[(600,400)]},
     'marker-on-line-spacing-eq-width-overlap': {'sizes':[(600,400)]},
     'marker_line_placement_on_points':{},
+    'marker-on-line-and-vertex-first-placement':{'sizes':[(600,400)],
+        'bbox': mapnik.Box2d(-1, -1, 11, 4)},
+    'marker-on-line-and-vertex-last-placement':{'sizes':[(600,400)],
+        'bbox': mapnik.Box2d(-1, -1, 11, 4)},
+    'marker-with-background-image-linear-comp-op': {},
     'marker-with-background-image': {'sizes':[(600,400),(400,600),(257,256)]},
-    #'marker-with-background-image-and-hsla-transform': {'sizes':[(600,400),(400,600),(257,256)]},
+    'marker-with-background-image-and-hsla-transform': {'sizes':[(600,400),(400,600),(257,256)]},
     'marker-on-hex-grid': {'sizes':[(600,400),(400,600),(257,256)]},
     'whole-centroid': {'sizes':[(600,400)],
         'bbox': mapnik.Box2d(736908, 4390316, 2060771, 5942346)},
     'text-halo-rasterizer': {'sizes':[(600,400)]},
+    'text-halo-transform': {'sizes':[(600,400)]},
+    'text-ttc-font': {'sizes':[(600,400)]},
     'simple-E': {'bbox':mapnik.Box2d(-0.05, -0.01, 0.95, 0.01)},
     'simple-NE': {'bbox':default_text_box},
     'simple-NW': {'bbox':default_text_box},
@@ -117,11 +155,47 @@ files = {
     'formatting-2': {'bbox':default_text_box},
     'formatting-3': {'bbox':default_text_box},
     'formatting-4': {'bbox':default_text_box},
+    'formatting-5': {'bbox':default_text_box},
+    'formatting-6': {'bbox':default_text_box},
+    'formatting-7': {'bbox':default_text_box},
+    'formatting-8': {'bbox':default_text_box},
+    'formatting-expr-alignment': {'bbox':large_text_box, 'sizes': [(500, 500)]},
     'expressionformat': {'bbox':default_text_box},
     'shieldsymbolizer-1': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+    'shieldsymbolizer-2': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+    'shieldsymbolizer-3': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+    'shieldsymbolizer-4': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+    'orientation': {'sizes': [(800, 200)], 'bbox': default_text_box},
+    'harfbuzz': {'sizes': [(800, 200)], 'bbox': default_text_box},
+    'hb-fontsets': {'sizes': [(800, 200)], 'bbox': default_text_box},
+    'khmer': {'sizes': [(800, 200)], 'bbox': default_text_box},
+    'charspacing': {'sizes': [(200, 400)], 'bbox': default_text_box},
+    'charspacing-lines': {'sizes': [(300, 300)], 'bbox': default_text_box},
+    'line_break': {'sizes': [(800, 800)], 'bbox': default_text_box},
     'rtl-point': {'sizes': [(200, 200)],'bbox':default_text_box},
     'jalign-auto': {'sizes': [(200, 200)],'bbox':default_text_box},
     'line-offset': {'sizes':[(900, 250)],'bbox': mapnik.Box2d(-5.192, 50.189, -5.174, 50.195)},
+    'repeat-labels-1': {'sizes': [(750,250)],'bbox':mapnik.Box2d(-12, -4, 12, 4)},
+    'repeat-labels-2': {'sizes': [(750,250)],'bbox':mapnik.Box2d(-12, -4, 12, 4)},
+    'repeat-labels-3': {'sizes': [(750,250)],'bbox':mapnik.Box2d(-12, -4, 12, 4)},
+    'repeat-labels-4': {'sizes': [(750,250)],'bbox':mapnik.Box2d(-12, -4, 12, 4)},
+    'text-bug1532': {'sizes': [(600, 165)]},
+    'text-bug1533': {'sizes': [(600, 600)]},
+    'text-bug1820-1': {'sizes': [(600, 300)], 'bbox': default_text_box},
+    'text-bug1820+0': {'sizes': [(600, 300)], 'bbox': default_text_box},
+    'text-bug1820+1': {'sizes': [(600, 300)], 'bbox': default_text_box},
+    'text-bug2037': {'sizes': [(800, 300)], 'bbox': default_text_box},
+    'text-expressionformat-color': {'sizes': [(800, 100)], 'bbox': default_text_box},
+    'text-halign': {'sizes': [(800,800)], 'bbox': default_text_box},
+    'text-halign-adjust': {'sizes': [(800,800)], 'bbox': default_text_box},
+    'text-halign-adjust-multiline': {'sizes': [(800,800)], 'bbox': default_text_box},
+    'text-vertical-alignment': {'sizes': [(800,800)], 'bbox': default_text_box},
+    'text-malayalam': {'sizes': [(800, 100)], 'bbox': default_text_box},
+    'text-bengali': {'sizes': [(800, 100)], 'bbox': default_text_box},
+    'text-font-features': {'sizes': [(500, 500)]},
+    'text-multi-layout-1': {'sizes': [(512,512)], 'bbox':mapnik.Box2d(-1, -1, 1, 1)},
+    'text-multi-layout-2': {'sizes': [(512,512)], 'bbox':mapnik.Box2d(-1, -1, 1, 1)},
+    'line-pattern-symbolizer': {'sizes':[(900, 250)],'bbox': mapnik.Box2d(-5.192, 50.189, -5.174, 50.195)},
     'tiff-alpha-gdal': {'sizes':[(600,400)]},
     'tiff-alpha-broken-assoc-alpha-gdal': {'sizes':[(600,400)]},
     'tiff-alpha-gradient-gdal': {'sizes':[(600,400)]},
@@ -130,6 +204,7 @@ files = {
     'tiff-opaque-edge-gdal2': {'sizes':[(600,400),(969,793)]},
     'tiff-opaque-edge-raster2': {'sizes':[(600,400),(969,793)]},
     'tiff-resampling': {'sizes':[(600,400)]},
+    'gdal-filter-factor': {'sizes':[(600,400)]},
     # https://github.com/mapnik/mapnik/issues/1622
     'tiff-edge-alignment-gdal1': {'sizes':[(256,256),(255,257)],
         'bbox':mapnik.Box2d(-13267022.12540147,4618019.500877209,-13247454.246160466,4637587.380118214)
@@ -137,12 +212,87 @@ files = {
     'tiff-edge-alignment-gdal2': {'sizes':[(256,256),(255,257)],
         'bbox':mapnik.Box2d(-13267022.12540147,4598451.621636203,-13247454.246160466,4618019.500877209)
     },
+    'tiff-reprojection-1': {'sizes':[(250,250)]},
     # https://github.com/mapnik/mapnik/issues/1520
     # commented because these are not critical failures
     #'tiff-alpha-raster': {'sizes':[(600,400)]},
     #'tiff-alpha-broken-assoc-alpha-raster': {'sizes':[(600,400)]},
     #'tiff-nodata-edge-raster': {'sizes':[(600,400)]},
     #'tiff-opaque-edge-raster': {'sizes':[(256,256)]},
+    # https://github.com/mapnik/mapnik/issues/2438
+    #'tiff-reprojection-2': {'sizes':[(250,250)]},
+    'road-casings-grouped-rendering': {'sizes':[(600,600)],
+        'bbox':mapnik.Box2d(1477001.12245,6890242.37746,1480004.49012,6892244.62256)
+    },
+    'road-casings-non-grouped-rendering': {'sizes':[(600,600)],
+        'bbox':mapnik.Box2d(1477001.12245,6890242.37746,1480004.49012,6892244.62256)
+    },
+    'style-level-compositing-tiled-0,0':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['0,0']},
+    'style-level-compositing-tiled-1,0':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['1,0']},
+    'style-level-compositing-tiled-0,1':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['0,1']},
+    'style-level-compositing-tiled-1,1':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['1,1']},
+    'marker-path-expression':{},
+    'map-background-image-compositing':{'sizes':[(512,512)]},
+    'building-symbolizer-opacity':{'sizes':[(512,512)]},
+    'line-pattern-symbolizer-opacity':{'sizes':[(512,512)]},
+    'dst-over-compositing':{'sizes':[(512,512)]},
+    'tiff_colortable':{'sizes':[(256,256)]},
+    'tiff_colortable_custom_nodata':{'sizes':[(256,256)]},
+    'vrt_colortable':{'sizes':[(256,256)]},
+    'raster_colorizer':{'sizes':[(512,512)]},
+    'raster_symbolizer':{'sizes':[(512,512)]},
+    'raster-color-to-alpha1':{'sizes':[(512,512)]},
+    'raster-color-to-alpha2':{'sizes':[(512,512)]},
+    'raster-color-to-alpha3':{'sizes':[(512,512)]},
+    'raster-color-to-alpha4':{'sizes':[(512,512)]},
+    'raster-color-to-alpha5':{'sizes':[(512,512)]},
+    'colorize-alpha1':{'sizes':[(512,512)]},
+    'colorize-alpha2':{'sizes':[(512,512)]},
+    'colorize-alpha3':{'sizes':[(512,512)]},
+    'image-filters-galore':{'sizes':[(512,512)]},
+    'image-filters-multi-blur':{'sizes':[(512,512)]},
+    'image-filters-multi-blur-inflate':{'sizes':[(512,512)]},
+    'line-opacity-multi-render':{'sizes':[(512,512)]},
+    'tiff-nodata-rgb':{'sizes':[(512,512)]},
+    'tiff-nodata-rgba':{'sizes':[(512,512)]},
+    'tiff-nodata-tolerance':{'sizes':[(512,512)]},
+    'tiff-nodata-edge-rgba':{'sizes':[(512,512)]},
+    'marker-vs-point':{'sizes':[(512,512)]},
+    'line-symbolizer-expressions':{'sizes':[(256,256)]},
+    'line-symbolizer-expressions-all':{'sizes':[(256,256)]},
+    'point-symbolizer-expressions':{'sizes':[(256,256)]},
+    'point-symbolizer-expressions-all':{'sizes':[(256,256)]},
+    'point-symbolizer-overlap-placement-expr': {'bbox':large_text_box, 'sizes': [(500, 500)]},
+    'text-allow-overlap-expr': {'bbox':large_text_box, 'sizes': [(500, 500)]},
+    'marker-symbolizer-expressions-all':{'sizes':[(256,256)]},
+    'polygon-symbolizer-expressions':{'sizes':[(256,256)]},
+    'polygon-symbolizer-expressions-all':{'sizes':[(256,256)]},
+    'polygon-winding-order': {'sizes':[(300,300)]},
+    'group-symbolizer-1':{'sizes':[(512,512)]},
+    'group-symbolizer-2':{'sizes':[(512,512)]},
+    'group-symbolizer-3':{'sizes':[(512,256)]},
+    'group-symbolizer-line-1':{'sizes':[(512,512)]},
+    'group-symbolizer-line-2':{'sizes':[(512,512)]},
+    'text-charplacement':{'sizes':[(512,512)]},
+    'text-displacement':{'sizes':[(512,512)]},
+    'text-overlap':{'sizes':[(512,512)]},
+    'text-spacing':{'sizes':[(512,512)]},
+    'text-halo-opacity':{'sizes':[(512,512)]},
+    # https://github.com/mapnik/mapnik/issues/2202
+    'line-smooth-and-offset':{'sizes':[(512,512)]},
+    'line-pattern-smooth-and-offset':{'sizes':[(512,512)]},
+    'halo-comp-op-on-satellite':{'sizes':[(450,450)]},
+    'marker-whole-multi-polygon':{'sizes':[(512,512)]},
+    'shield-on-line-and-avoid-edges':{'sizes':[(512,512)]},
+    'marker-on-line-and-avoid-edges':{'sizes':[(512,512)]},
+    'text-typographic':{'sizes':[(512,512)]},
+    'functional-expressions':{'sizes':[(256,256)], 'bbox':mapnik.Box2d(-10,-10,10,10)},
+    'functional-expressions-length':{'sizes':[(512,512)], 'bbox':mapnik.Box2d(-15,-15,15,15)},
+    'marker-collide':{'sizes':[(512,512)]},
+    'marker-recenter-collide':{'sizes':[(256,128)], 'bbox':mapnik.Box2d(-1,-0.5,1,0.5)},
+    'postgis-inline':{'sizes':[(512,512)]},
+    'text-line-wrap':{'sizes':[(512,512)]},
+    'text-data-binding': {'sizes': [(500, 500)]},
     }
 
 class Reporting:
@@ -157,11 +307,14 @@ class Reporting:
         self.overwrite_failures = overwrite_failures
         self.errors = [ #(type, actual, expected, diff, message)
          ]
-        
+
     def result_fail(self, actual, expected, diff):
         self.failed += 1
         if self.quiet:
-            sys.stderr.write('\x1b[31m.\x1b[0m')
+            if platform.uname()[0] == 'Windows':
+                sys.stderr.write('.')
+            else:
+                sys.stderr.write('\x1b[31m.\x1b[0m')
         else:
             print '\x1b[31m✘\x1b[0m (\x1b[34m%u different pixels\x1b[0m)' % diff
 
@@ -171,13 +324,19 @@ class Reporting:
             open(expected, 'wb').write(contents)
         else:
             self.errors.append((self.DIFF, actual, expected, diff, None))
-            
+
     def result_pass(self, actual, expected, diff):
         self.passed += 1
         if self.quiet:
-            sys.stderr.write('\x1b[32m.\x1b[0m')
+            if platform.uname()[0] == 'Windows':
+                sys.stderr.write('.')
+            else:
+                sys.stderr.write('\x1b[32m.\x1b[0m')
         else:
-            print '\x1b[32m✓\x1b[0m'
+            if platform.uname()[0] == 'Windows':
+                print '\x1b[32m✓\x1b[0m'
+            else:
+                print '✓'
 
     def not_found(self, actual, expected):
         self.failed += 1
@@ -216,9 +375,6 @@ class Reporting:
         return item
 
     def summary(self):
-        if self.passed == 0:
-            print '\nNOTICE: No valid visual tests were run'
-            return 0
         if len(self.errors) == 0:
             print '\nAll %s visual tests passed: \x1b[1;32m✓ \x1b[0m' % self.passed
             return 0
@@ -266,21 +422,19 @@ def render(filename,config, width, height, bbox, scale_factor, reporting):
     postfix = "%s-%d-%d-%s" % (filename, width, height, scale_factor)
 
     try:
-        mapnik.load_map(m, os.path.join(dirname, "styles", "%s.xml" % filename), False)
+        mapnik.load_map(m, os.path.join(dirname, "styles", "%s.xml" % filename), True)
         if bbox is not None:
             m.zoom_to_box(bbox)
         else:
             m.zoom_all()
     except Exception, e:
-        if 'Could not create datasource' in str(e):
+        if 'Could not create datasource' in str(e) \
+           or 'Bad connection' in str(e):
             return m
         reporting.other_error(filename, repr(e))
         return m
-    
+
     for renderer in renderers:
-        # TODO - grid renderer does not support scale_factor yet via python
-        if renderer['name'] == 'grid' and scale_factor != 1.0:
-            continue
         if config.get(renderer['name'], True):
             expected = os.path.join(dirname, renderer['dir'], '%s-%s-reference.%s' %
                 (postfix, renderer['name'], renderer['filetype']))
@@ -329,18 +483,20 @@ if __name__ == "__main__":
         os.makedirs(visual_output_dir)
 
     reporting = Reporting(quiet, overwrite_failures)
-    for filename in files:
-        config = dict(defaults)
-        config.update(files[filename])
-        for size in config['sizes']:
-            for scale_factor in config['scales']:
-                m = render(filename,
-                           config,
-                           size[0],
-                           size[1],
-                           config.get('bbox'),
-                           scale_factor,
-                           reporting)
-        mapnik.save_map(m, os.path.join(dirname, 'xml_output', "%s-out.xml" % filename))
-
+    try:
+        for filename in files:
+            config = dict(defaults)
+            config.update(files[filename])
+            for size in config['sizes']:
+                for scale_factor in config['scales']:
+                    m = render(filename,
+                               config,
+                               size[0],
+                               size[1],
+                               config.get('bbox'),
+                               scale_factor,
+                               reporting)
+            #mapnik.save_map(m, os.path.join(dirname, 'xml_output', "%s-out.xml" % filename))
+    except KeyboardInterrupt:
+        pass
     sys.exit(reporting.summary())
diff --git a/tests/visual_tests/test_python.py b/tests/visual_tests/test_python.py
index ac5165c..301017b 100755
--- a/tests/visual_tests/test_python.py
+++ b/tests/visual_tests/test_python.py
@@ -2,9 +2,10 @@
 import mapnik
 import sys
 import os.path
-from compare import compare, summary
+from compare import compare
 
 dirname = os.path.dirname(__file__)
+visual_output_dir = "/tmp/mapnik-visual-images"
 
 class MyText(mapnik.FormattingNode):
     def __init__(self):
@@ -71,7 +72,7 @@ m.append_style('Style', style)
 
 
 layer = mapnik.Layer('Layer')
-layer.datasource = mapnik.Datasource(**{file=os.path.join(dirname,"data/points.csv"))
+layer.datasource = mapnik.Datasource(**{'type':'csv','file':os.path.join(dirname,"data/points.csv")})
 layer.styles.append('Style')
 m.layers.append(layer)
 
@@ -99,9 +100,10 @@ format_trees = [
 
 for format_tree in format_trees:
     text.placements.defaults.format_tree = format_tree[1]
-    mapnik.render_to_file(m, os.path.join(dirname,"images", 'python-%s.png' % format_tree[0]), 'png')
-    compare(os.path.join(dirname,"images", 'python-%s.png' % format_tree[0]),
-            os.path.join(dirname,"images", 'python-%s-reference.png' % format_tree[0])
-            )
+    actual = os.path.join(visual_output_dir, 'python-%s.png' % format_tree[0])
+    expected = os.path.join(dirname,"images", 'python-%s-reference.png' % format_tree[0])
+    mapnik.render_to_file(m, actual, 'png8:m=h')
+    diff = compare(actual,expected)
+    if diff > 0:
+       print 'comparision failed between:\n  %s (actual)\n  %s (expected)' % (actual,expected)
 
-summary()
diff --git a/utils/geometry_to_wkb/main.cpp b/utils/geometry_to_wkb/main.cpp
index 5dd23aa..76396ff 100644
--- a/utils/geometry_to_wkb/main.cpp
+++ b/utils/geometry_to_wkb/main.cpp
@@ -29,7 +29,7 @@
 #include <mapnik/datasource_cache.hpp>
 #include <mapnik/util/geometry_to_wkb.hpp>
 
-#include <boost/foreach.hpp>
+
 
 
 int main (int argc, char ** argv )
@@ -70,7 +70,7 @@ int main (int argc, char ** argv )
 
         mapnik::query q(ds->envelope());
         mapnik::layer_descriptor layer_desc = ds->get_descriptor();
-        BOOST_FOREACH ( mapnik::attribute_descriptor const& attr_desc, layer_desc.get_descriptors())
+        for (mapnik::attribute_descriptor const& attr_desc : layer_desc.get_descriptors())
         {
             q.add_property_name(attr_desc.get_name());
         }
@@ -81,8 +81,8 @@ int main (int argc, char ** argv )
         while(f)
         {
             std::cerr << *f << std::endl;
-            boost::ptr_vector<mapnik::geometry_type> & paths = f->paths();
-            BOOST_FOREACH ( mapnik::geometry_type const& geom, paths)
+            mapnik::geometry_container const& paths = f->paths();
+            for (mapnik::geometry_type const& geom : paths)
             {
                 // NDR
                 {
diff --git a/utils/mapnik-config/build.py b/utils/mapnik-config/build.py
index 6b94f3c..31fd9ed 100644
--- a/utils/mapnik-config/build.py
+++ b/utils/mapnik-config/build.py
@@ -1,3 +1,23 @@
+#
+# This file is part of Mapnik (c++ mapping toolkit)
+#
+# Copyright (C) 2013 Artem Pavlenko
+#
+# Mapnik is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+#
 
 import re
 import os
@@ -9,7 +29,7 @@ Import('env')
 
 config_env = env.Clone()
 
-config_variables = '''#!/bin/sh
+config_variables = '''#!/bin/bash
 
 ## variables
 
@@ -25,10 +45,10 @@ CONFIG_MAPNIK_DEFINES='%(defines)s'
 CONFIG_MAPNIK_LIBNAME='%(mapnik_libname)s'
 CONFIG_MAPNIK_LIBPATH="%(mapnik_libpath)s"
 CONFIG_DEP_LIBS='%(dep_libs)s'
-CONFIG_MAPNIK_LDFLAGS='%(ldflags)s'
+CONFIG_MAPNIK_LDFLAGS="%(ldflags)s"
 CONFIG_MAPNIK_INCLUDE="${CONFIG_PREFIX}/include -I${CONFIG_PREFIX}/include/mapnik/agg"
-CONFIG_DEP_INCLUDES='%(dep_includes)s'
-CONFIG_CXXFLAGS='%(cxxflags)s'
+CONFIG_DEP_INCLUDES="%(dep_includes)s"
+CONFIG_CXXFLAGS="%(cxxflags)s"
 CONFIG_CXX='%(cxx)s'
 
 '''
@@ -51,7 +71,7 @@ dep_includes += ' '
 if config_env['HAS_CAIRO']:
     dep_includes += ''.join([' -I%s' % i for i in env['CAIRO_CPPPATHS'] if not i.startswith('#')])
 
-ldflags = config_env['CUSTOM_LDFLAGS'] + ''.join([' -L%s' % i for i in config_env['LIBPATH'] if not i.startswith('#')])
+ldflags = ''.join([' -L%s' % i for i in config_env['LIBPATH'] if not i.startswith('#')])
 ldflags += config_env['LIBMAPNIK_LINKFLAGS']
 
 dep_libs = ''.join([' -l%s' % i for i in env['LIBMAPNIK_LIBS']])
@@ -59,38 +79,31 @@ dep_libs = ''.join([' -l%s' % i for i in env['LIBMAPNIK_LIBS']])
 # remove local agg from public linking
 dep_libs = dep_libs.replace('-lagg','')
 
-git_revision = 'unknown'
-git_describe = 'unknown'
-# special GIT_REVISION/GIT_DESCRIBE files present only for official releases
-# where the git directory metadata is stripped
-# more info: https://github.com/mapnik/mapnik/wiki/MapnikReleaseSteps
-revision_release_file = '../../GIT_REVISION'
-if os.path.exists(revision_release_file):
-    git_revision = open(revision_release_file,'r').read()
-else:
+git_revision = 'N/A'
+git_describe = config_env['MAPNIK_VERSION_STRING']
+
+try:
     git_cmd = "git rev-list --max-count=1 HEAD"
     stdin, stderr = Popen(git_cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate()
     if not stderr:
         git_revision = stdin.strip()
 
-describe_release_file = '../../GIT_DESCRIBE'
-if os.path.exists(describe_release_file):
-    git_describe = open(describe_release_file,'r').read()
-else:
     git_cmd = "git describe"
     stdin, stderr = Popen(git_cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate()
     if not stderr:
         git_describe = stdin.strip()
+except:
+    pass
 
 # for fonts and input plugins we should try
 # to store the relative path, if feasible
 fontspath = config_env['MAPNIK_FONTS']
-lib_root = os.path.join(config_env['INSTALL_PREFIX'], config_env['LIBDIR_SCHEMA'])
+lib_root = os.path.join(config_env['PREFIX'], config_env['LIBDIR_SCHEMA'])
 if lib_root in fontspath:
-    fontspath = "${CONFIG_PREFIX}/" + os.path.relpath(fontspath,config_env['INSTALL_PREFIX'])
+    fontspath = "${CONFIG_PREFIX}/" + os.path.relpath(fontspath,config_env['PREFIX'])
 inputpluginspath = config_env['MAPNIK_INPUT_PLUGINS']
 if lib_root in inputpluginspath:
-    inputpluginspath = "${CONFIG_PREFIX}/" + os.path.relpath(inputpluginspath,config_env['INSTALL_PREFIX'])
+    inputpluginspath = "${CONFIG_PREFIX}/" + os.path.relpath(inputpluginspath,config_env['PREFIX'])
 
 lib_path = "${CONFIG_PREFIX}/" + config_env['LIBDIR_SCHEMA']
 
@@ -99,7 +112,7 @@ configuration = {
     "git_describe": git_describe,
     "version_string": config_env['MAPNIK_VERSION_STRING'],
     "version": config_env['MAPNIK_VERSION'],
-    "mapnik_libname": 'mapnik',
+    "mapnik_libname": env['MAPNIK_NAME'],
     "mapnik_libpath": lib_path,
     "ldflags": ldflags,
     "dep_libs": dep_libs,
diff --git a/utils/nik2img/build.py b/utils/nik2img/build.py
new file mode 100644
index 0000000..244edbe
--- /dev/null
+++ b/utils/nik2img/build.py
@@ -0,0 +1,34 @@
+import os
+import glob
+from copy import copy
+
+Import ('env')
+program_env = env.Clone()
+
+source = Split(
+    """
+    nik2img.cpp
+    """
+    )
+
+program_env['CXXFLAGS'] = copy(env['LIBMAPNIK_CXXFLAGS'])
+program_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
+
+if env['HAS_CAIRO']:
+    program_env.PrependUnique(CPPPATH=env['CAIRO_CPPPATHS'])
+    program_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
+
+boost_program_options = 'boost_program_options%s' % env['BOOST_APPEND']
+libraries = [env['MAPNIK_NAME'],boost_program_options]
+libraries.extend(copy(env['LIBMAPNIK_LIBS']))
+if env['RUNTIME_LINK'] == 'static' and env['PLATFORM'] == 'Linux':
+    libraries.append('dl')
+
+nik2img = program_env.Program('nik2img', source, LIBS=libraries)
+Depends(nik2img, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
+
+if 'uninstall' not in COMMAND_LINE_TARGETS:
+    env.Install(os.path.join(env['INSTALL_PREFIX'],'bin'), nik2img)
+    env.Alias('install', os.path.join(env['INSTALL_PREFIX'],'bin'))
+
+env['create_uninstall_target'](env, os.path.join(env['INSTALL_PREFIX'],'bin','nik2img'))
diff --git a/utils/nik2img/nik2img.cpp b/utils/nik2img/nik2img.cpp
new file mode 100644
index 0000000..2d4aceb
--- /dev/null
+++ b/utils/nik2img/nik2img.cpp
@@ -0,0 +1,129 @@
+#include <mapnik/map.hpp>
+#include <mapnik/load_map.hpp>
+#include <mapnik/agg_renderer.hpp>
+#include <mapnik/version.hpp>
+#include <mapnik/debug.hpp>
+#include <mapnik/image_util.hpp>
+#include <mapnik/graphics.hpp>
+#include <mapnik/datasource_cache.hpp>
+#include <mapnik/font_engine_freetype.hpp>
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string.hpp>
+#include <boost/program_options.hpp>
+#pragma GCC diagnostic pop
+
+#include <string>
+
+int main (int argc,char** argv)
+{
+    namespace po = boost::program_options;
+
+    bool verbose = false;
+    bool auto_open = true;
+    int return_value = 0;
+    std::string xml_file;
+    std::string img_file;
+    mapnik::logger logger;
+    logger.set_severity(mapnik::logger::error);
+
+    try
+    {
+        po::options_description desc("nik2img utility");
+        desc.add_options()
+            ("help,h", "produce usage message")
+            ("version,V","print version string")
+            ("verbose,v","verbose output")
+            ("open","automatically open the file after rendering (os x only)")
+            ("xml",po::value<std::string>(),"xml map to read")
+            ("img",po::value<std::string>(),"image to render")
+            ;
+
+        po::positional_options_description p;
+        p.add("xml",1);
+        p.add("img",1);
+        po::variables_map vm;
+        po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
+        po::notify(vm);
+
+        if (vm.count("version"))
+        {
+            std::clog <<"version " << MAPNIK_VERSION_STRING << std::endl;
+            return 1;
+        }
+
+        if (vm.count("help"))
+        {
+            std::clog << desc << std::endl;
+            return 1;
+        }
+
+        if (vm.count("verbose"))
+        {
+            verbose = true;
+        }
+
+        if (vm.count("open"))
+        {
+            auto_open = true;
+        }
+
+        if (vm.count("xml"))
+        {
+            xml_file=vm["xml"].as<std::string>();
+        }
+        else
+        {
+            std::clog << "please provide an xml map as first argument!" << std::endl;
+            return -1;
+        }
+
+        if (vm.count("img"))
+        {
+            img_file=vm["img"].as<std::string>();
+        }
+        else
+        {
+            std::clog << "please provide an img as second argument!" << std::endl;
+            return -1;
+        }
+
+        mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
+        mapnik::freetype_engine::register_fonts("./fonts",true);
+        mapnik::Map map(600,400);
+        mapnik::load_map(map,xml_file,true);
+        map.zoom_all();
+        mapnik::image_32 im(map.width(),map.height());
+        mapnik::agg_renderer<mapnik::image_32> ren(map,im);
+        ren.apply();
+        mapnik::save_to_file(im,img_file);
+        if (auto_open)
+        {
+            std::ostringstream s;
+#ifdef __APPLE__
+            s << "open ";
+#elif _WIN32
+            s << "start ";
+#else
+            s << "xdg-open ";
+#endif
+            s << img_file;
+            int ret = system(s.str().c_str());
+            if (ret != 0)
+                return_value = ret;
+        }
+        else
+        {
+            std::clog << "rendered to: " << img_file << "\n";
+        }
+    }
+    catch (std::exception const& ex)
+    {
+        std::clog << "Error " << ex.what() << std::endl;
+        return -1;
+    }
+    return return_value;
+}
diff --git a/utils/ogrindex/build.py b/utils/ogrindex/build.py
index 37b1118..4e115f9 100644
--- a/utils/ogrindex/build.py
+++ b/utils/ogrindex/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -37,7 +37,7 @@ headers = ['#plugins/input/ogr'] + env['CPPPATH']
 program_env['LIBS'] = [env['PLUGINS']['ogr']['lib']]
 
 # Link Library to Dependencies
-program_env['LIBS'].append('mapnik')
+program_env['LIBS'].append(env['MAPNIK_NAME'])
 program_env['LIBS'].append(env['ICU_LIB_NAME'])
 program_env['LIBS'].append('boost_system%s' % env['BOOST_APPEND'])
 program_env['LIBS'].append('boost_program_options%s' % env['BOOST_APPEND'])
@@ -46,7 +46,7 @@ if env['RUNTIME_LINK'] == 'static':
     cmd = 'gdal-config --dep-libs'
     program_env.ParseConfig(cmd)
 
-ogrindex = program_env.Program('ogrindex', source, CPPPATH=headers, LINKFLAGS=env['CUSTOM_LDFLAGS'])
+ogrindex = program_env.Program('ogrindex', source, CPPPATH=headers)
 
 Depends(ogrindex, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
 
diff --git a/utils/performance/build.py b/utils/performance/build.py
index 11bd089..8fb7d6b 100644
--- a/utils/performance/build.py
+++ b/utils/performance/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2010 Artem Pavlenko
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -19,6 +19,7 @@
 #
 # 
 
+
 import os
 Import ('env')
 
diff --git a/utils/pgsql2sqlite/build.py b/utils/pgsql2sqlite/build.py
index 6246ee4..a150e02 100644
--- a/utils/pgsql2sqlite/build.py
+++ b/utils/pgsql2sqlite/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2009 Artem Pavlenko, Dane Springmeyer
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -19,6 +19,7 @@
 #
 # 
 
+
 import os
 from copy import copy
 
@@ -36,6 +37,8 @@ source = Split(
     )
 
 program_env['CXXFLAGS'] = copy(env['LIBMAPNIK_CXXFLAGS'])
+program_env['LINKFLAGS'] = copy(env['LIBMAPNIK_LINKFLAGS'])
+program_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
 
 if env['HAS_CAIRO']:
     program_env.PrependUnique(CPPPATH=env['CAIRO_CPPPATHS'])
@@ -45,7 +48,7 @@ program_env.PrependUnique(CPPPATH=['#plugins/input/postgis'])
 
 libraries = []
 boost_program_options = 'boost_program_options%s' % env['BOOST_APPEND']
-libraries.extend([boost_program_options,'sqlite3','pq','mapnik','icuuc'])
+libraries.extend([boost_program_options,'sqlite3','pq',env['MAPNIK_NAME'],'icuuc'])
 
 if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
     boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
@@ -53,14 +56,18 @@ if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
         boost_system = 'boost_system%s' % env['BOOST_APPEND']
         libraries.extend([boost_system])
 
-linkflags = env['CUSTOM_LDFLAGS']
 if env['SQLITE_LINKFLAGS']:
-    linkflags.append(env['SQLITE_LINKFLAGS'])
+    program_env.Append(LINKFLAGS=env['SQLITE_LINKFLAGS'])
 
 if env['RUNTIME_LINK'] == 'static':
-    libraries.extend(['ldap','pam','ssl','crypto','krb5'])
+    if env['PLATFORM'] == 'Darwin':
+        libraries.extend(['ldap', 'pam', 'ssl', 'crypto', 'krb5'])
+    else:
+        # TODO - parse back into libraries variable
+        program_env.ParseConfig('pg_config --libs')
+        libraries.append('dl')
 
-pgsql2sqlite = program_env.Program('pgsql2sqlite', source, LIBS=libraries, LINKFLAGS=linkflags)
+pgsql2sqlite = program_env.Program('pgsql2sqlite', source, LIBS=libraries)
 Depends(pgsql2sqlite, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
 
 if 'uninstall' not in COMMAND_LINE_TARGETS:
diff --git a/utils/pgsql2sqlite/main.cpp b/utils/pgsql2sqlite/main.cpp
index a5b13f9..6325001 100644
--- a/utils/pgsql2sqlite/main.cpp
+++ b/utils/pgsql2sqlite/main.cpp
@@ -28,7 +28,7 @@
 
 // boost
 #include <boost/optional.hpp>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 #include <boost/program_options.hpp>
 
 //stl
@@ -96,7 +96,7 @@ int main ( int argc, char** argv)
         ConnectionCreator<Connection> creator(host,port,dbname,user,password,connect_timeout);
         try
         {
-            boost::shared_ptr<Connection> conn(creator());
+            std::shared_ptr<Connection> conn(creator());
 
             std::string query = vm["query"].as<std::string>();
             std::string output_table_name = vm.count("table") ? vm["table"].as<std::string>() : mapnik::sql_utils::table_from_sql(query);
diff --git a/utils/pgsql2sqlite/pgsql2sqlite.hpp b/utils/pgsql2sqlite/pgsql2sqlite.hpp
index b799bb2..bdba8fa 100644
--- a/utils/pgsql2sqlite/pgsql2sqlite.hpp
+++ b/utils/pgsql2sqlite/pgsql2sqlite.hpp
@@ -34,23 +34,22 @@
 #include "cursorresultset.hpp"
 
 // boost
-#include <boost/cstdint.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/shared_ptr.hpp>
 #include <boost/algorithm/string.hpp>
 
-//stl
+//st
+#include <cstdint>
 #include <iostream>
 #include <fstream>
+#include <memory>
 
 static std::string numeric2string(const char* buf)
 {
-    boost::int16_t ndigits = int2net(buf);
-    boost::int16_t weight  = int2net(buf+2);
-    boost::int16_t sign    = int2net(buf+4);
-    boost::int16_t dscale  = int2net(buf+6);
+    std::int16_t ndigits = int2net(buf);
+    std::int16_t weight  = int2net(buf+2);
+    std::int16_t sign    = int2net(buf+4);
+    std::int16_t dscale  = int2net(buf+6);
 
-    boost::scoped_array<boost::int16_t> digits(new boost::int16_t[ndigits]);
+    const std::unique_ptr<std::int16_t[]> digits(new std::int16_t[ndigits]);
     for (int n=0; n < ndigits ;++n)
     {
         digits[n] = int2net(buf+8+n*2);
@@ -60,7 +59,7 @@ static std::string numeric2string(const char* buf)
 
     if (sign == 0x4000) ss << "-";
 
-    int i = std::max(weight,boost::int16_t(0));
+    int i = std::max(weight,std::int16_t(0));
     int d = 0;
 
     // Each numeric "digit" is actually a value between 0000 and 9999 stored in a 16 bit field.
@@ -167,7 +166,7 @@ void pgsql2sqlite(Connection conn,
     namespace sqlite = mapnik::sqlite;
     sqlite::database db(output_filename);
 
-    boost::shared_ptr<ResultSet> rs = conn->executeQuery("select * from (" + query + ") as query limit 0;");
+    std::shared_ptr<ResultSet> rs = conn->executeQuery("select * from (" + query + ") as query limit 0;");
     int count = rs->getNumFields();
 
     std::ostringstream select_sql;
@@ -212,7 +211,10 @@ void pgsql2sqlite(Connection conn,
 
     if ( rs->next())
     {
-        mapnik::util::string2int(rs->getValue("srid"),srid);
+        if (!mapnik::util::string2int(rs->getValue("srid"),srid))
+        {
+            std::clog << "could not convert srid to integer\n";
+        }
         geom_col = rs->getValue("f_geometry_column");
         geom_type = rs->getValue("type");
     }
@@ -231,7 +233,7 @@ void pgsql2sqlite(Connection conn,
     cursor_sql << "DECLARE " << cursor_name << " BINARY INSENSITIVE NO SCROLL CURSOR WITH HOLD FOR " << select_sql_str << " FOR READ ONLY";
     conn->execute(cursor_sql.str());
 
-    boost::shared_ptr<CursorResultSet> cursor(new CursorResultSet(conn,cursor_name,10000));
+    std::shared_ptr<CursorResultSet> cursor(new CursorResultSet(conn,cursor_name,10000));
 
     unsigned num_fields = cursor->getNumFields();
 
@@ -246,7 +248,7 @@ void pgsql2sqlite(Connection conn,
 
     std::string output_table_insert_sql = "insert into " + output_table_name + " values (?";
 
-    context_ptr ctx = boost::make_shared<context_type>();
+    context_ptr ctx = std::make_shared<context_type>();
 
     for ( unsigned pos = 0; pos < num_fields ; ++pos)
     {
diff --git a/utils/pgsql2sqlite/sqlite.hpp b/utils/pgsql2sqlite/sqlite.hpp
index 1266a76..3301b8e 100644
--- a/utils/pgsql2sqlite/sqlite.hpp
+++ b/utils/pgsql2sqlite/sqlite.hpp
@@ -21,17 +21,18 @@
  *****************************************************************************/
 
 #include <mapnik/noncopyable.hpp>
+#include <mapnik/util/variant.hpp>
 // boost
-#include <boost/shared_ptr.hpp>
-#include <boost/variant.hpp>
-
+#include <memory>
 //sqlite3
 #include <sqlite3.h>
 
 //stl
-//#ifdef MAPNIK_DEBUG
+#ifdef MAPNIK_DEBUG
+#include <cassert>
+#endif
+
 #include <iostream>
-//#endif
 #include <string>
 #include <vector>
 
@@ -52,7 +53,7 @@ namespace mapnik {  namespace sqlite {
             }
         };
 
-        typedef boost::shared_ptr<sqlite3> sqlite_db;
+        using sqlite_db = std::shared_ptr<sqlite3>;
         sqlite_db db_;
 
     public:
@@ -71,12 +72,12 @@ namespace mapnik {  namespace sqlite {
         unsigned size_;
     };
 
-    typedef boost::variant<int,double,std::string, blob,null_type> value_type;
-    typedef std::vector<value_type> record_type;
+    using value_type = mapnik::util::variant<int,double,std::string, blob,null_type>;
+    using record_type = std::vector<value_type>;
 
     class prepared_statement : mapnik::noncopyable
     {
-        struct binder : public boost::static_visitor<bool>
+        struct binder : public mapnik::util::static_visitor<bool>
         {
             binder(sqlite3_stmt * stmt, unsigned index)
                 : stmt_(stmt), index_(index) {}
@@ -85,7 +86,7 @@ namespace mapnik {  namespace sqlite {
             {
                 if (sqlite3_bind_null(stmt_, index_) != SQLITE_OK)
                 {
-                    std::cerr << "cannot bind NULL\n";
+                    std::cerr << "cannot bind nullptr\n";
                     return false;
                 }
                 return true;
@@ -168,7 +169,7 @@ namespace mapnik {  namespace sqlite {
             for (; itr!=end;++itr)
             {
                 binder op(stmt_,count++);
-                if (!boost::apply_visitor(op,*itr))
+                if (!util::apply_visitor(op,*itr))
                 {
                     return false;
                 }
@@ -186,4 +187,3 @@ namespace mapnik {  namespace sqlite {
     };
     }
 }
-
diff --git a/utils/shapeindex/build.py b/utils/shapeindex/build.py
index b7f1aa0..b769cda 100644
--- a/utils/shapeindex/build.py
+++ b/utils/shapeindex/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -21,6 +21,7 @@
 
 import os
 import glob
+from copy import copy
 
 Import ('env')
 
@@ -32,22 +33,18 @@ source = Split(
     """
     )
 
-source += program_env.Object('box2d-static', '#src/box2d.cpp')
-
 headers = ['#plugins/input/shape'] + env['CPPPATH'] 
 
 boost_program_options = 'boost_program_options%s' % env['BOOST_APPEND']
 boost_system = 'boost_system%s' % env['BOOST_APPEND']
-libraries =  ['mapnik', boost_program_options, boost_system]
-
-if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
-    boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
-    if boost_version_from_header < 46:
-        # avoid ubuntu issue with boost interprocess:
-        # https://github.com/mapnik/mapnik/issues/1082
-        program_env.Append(CXXFLAGS = '-fpermissive')
-
-shapeindex = program_env.Program('shapeindex', source, CPPPATH=headers, LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
+libraries =  [env['MAPNIK_NAME'], boost_program_options, boost_system]
+libraries.append(env['ICU_LIB_NAME'])
+if env['RUNTIME_LINK'] == 'static':
+    libraries.extend(copy(env['LIBMAPNIK_LIBS']))
+    if env['PLATFORM'] == 'Linux':
+        libraries.append('dl')
+
+shapeindex = program_env.Program('shapeindex', source, CPPPATH=headers, LIBS=libraries)
 
 Depends(shapeindex, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
 
diff --git a/utils/shapeindex/quadtree.hpp b/utils/shapeindex/quadtree.hpp
index 57aee0f..db64787 100644
--- a/utils/shapeindex/quadtree.hpp
+++ b/utils/shapeindex/quadtree.hpp
@@ -42,7 +42,7 @@ struct quadtree_node
     quadtree_node(const box2d<double>& ext)
         : ext_(ext),data_()
     {
-        memset(children_,0,sizeof(quadtree_node<T>*)*4);
+        std::memset(children_,0,sizeof(quadtree_node<T>*)*4);
     }
 
     ~quadtree_node()
@@ -118,7 +118,7 @@ public:
     void write(std::ostream& out)
     {
         char header[16];
-        memset(header,0,16);
+        std::memset(header,0,16);
         header[0]='m';
         header[1]='a';
         header[2]='p';
@@ -205,10 +205,10 @@ private:
             int shape_count=node->data_.size();
             int recsize=sizeof(box2d<double>) + 3 * sizeof(int) + shape_count * sizeof(T);
             char* node_record=new char[recsize];
-            memset(node_record,0,recsize);
-            memcpy(node_record,&offset,4);
-            memcpy(node_record+4,&node->ext_,sizeof(box2d<double>));
-            memcpy(node_record+36,&shape_count,4);
+            std::memset(node_record,0,recsize);
+            std::memcpy(node_record,&offset,4);
+            std::memcpy(node_record+4,&node->ext_,sizeof(box2d<double>));
+            std::memcpy(node_record+36,&shape_count,4);
             for (int i=0;i<shape_count;++i)
             {
                 memcpy(node_record + 40 + i * sizeof(T),&(node->data_[i]),sizeof(T));
@@ -221,7 +221,7 @@ private:
                     ++num_subnodes;
                 }
             }
-            memcpy(node_record + 40 + shape_count * sizeof(T),&num_subnodes,4);
+            std::memcpy(node_record + 40 + shape_count * sizeof(T),&num_subnodes,4);
             out.write(node_record,recsize);
             delete [] node_record;
 
diff --git a/utils/shapeindex/shapeindex.cpp b/utils/shapeindex/shapeindex.cpp
index 391a707..0161ea8 100644
--- a/utils/shapeindex/shapeindex.cpp
+++ b/utils/shapeindex/shapeindex.cpp
@@ -25,17 +25,19 @@
 #include <vector>
 #include <string>
 #include <mapnik/util/fs.hpp>
-#include <boost/tokenizer.hpp>
-#include <boost/algorithm/string.hpp>
-#include <boost/program_options.hpp>
 #include "quadtree.hpp"
 #include "shapefile.hpp"
 #include "shape_io.hpp"
 
-const int MAXDEPTH = 64;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string.hpp>
+#include <boost/program_options.hpp>
+#pragma GCC diagnostic pop
+
 const int DEFAULT_DEPTH = 8;
-const double MINRATIO=0.5;
-const double MAXRATIO=0.8;
 const double DEFAULT_RATIO=0.55;
 
 int main (int argc,char** argv)
@@ -99,9 +101,9 @@ int main (int argc,char** argv)
             shape_files=vm["shape_files"].as< vector<string> >();
         }
     }
-    catch (...)
+    catch (std::exception const& ex)
     {
-        clog << "Exception of unknown type!" << endl;
+        clog << "Error: " << ex.what() << endl;
         return -1;
     }
 
@@ -123,14 +125,14 @@ int main (int argc,char** argv)
 
         if (! mapnik::util::exists (shapename_full))
         {
-            clog << "error : file " << shapename_full << " does not exist" << endl;
+            clog << "Error : file " << shapename_full << " does not exist" << endl;
             continue;
         }
 
         shape_file shp (shapename_full);
 
         if (! shp.is_open()) {
-            clog << "error : cannot open " << shapename_full << endl;
+            clog << "Error : cannot open " << shapename_full << endl;
             continue;
         }
 
diff --git a/utils/svg2png/build.py b/utils/svg2png/build.py
index 210e63c..71725ff 100644
--- a/utils/svg2png/build.py
+++ b/utils/svg2png/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -34,16 +34,19 @@ source = Split(
     )
 
 program_env['CXXFLAGS'] = copy(env['LIBMAPNIK_CXXFLAGS'])
+program_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
 
 if env['HAS_CAIRO']:
     program_env.PrependUnique(CPPPATH=env['CAIRO_CPPPATHS'])
     program_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
 
-libraries =  copy(env['LIBMAPNIK_LIBS'])
 boost_program_options = 'boost_program_options%s' % env['BOOST_APPEND']
-libraries.extend([boost_program_options,'mapnik'])
+libraries = [env['MAPNIK_NAME'],boost_program_options]
+libraries.extend(copy(env['LIBMAPNIK_LIBS']))
+if env['RUNTIME_LINK'] == 'static' and env['PLATFORM'] == 'Linux':
+    libraries.append('dl')
 
-svg2png = program_env.Program('svg2png', source, LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
+svg2png = program_env.Program('svg2png', source, LIBS=libraries)
 
 Depends(svg2png, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
 
diff --git a/utils/svg2png/svg2png.cpp b/utils/svg2png/svg2png.cpp
index 947ef95..796cd27 100644
--- a/utils/svg2png/svg2png.cpp
+++ b/utils/svg2png/svg2png.cpp
@@ -35,8 +35,12 @@
 #include <mapnik/svg/svg_renderer_agg.hpp>
 #include <mapnik/svg/svg_path_attributes.hpp>
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-local-typedef"
 #include <boost/algorithm/string.hpp>
 #include <boost/program_options.hpp>
+#pragma GCC diagnostic pop
 
 #include "agg_rasterizer_scanline_aa.h"
 #include "agg_basics.h"
@@ -56,8 +60,7 @@ int main (int argc,char** argv)
     bool auto_open = false;
     int return_value = 0;
     std::vector<std::string> svg_files;
-    mapnik::logger logger;
-    logger.set_severity(mapnik::logger::error);
+    mapnik::logger::instance().set_severity(mapnik::logger::error);
 
     try
     {
@@ -141,9 +144,9 @@ int main (int argc,char** argv)
                 continue;
             }
 
-            typedef agg::pixfmt_rgba32_pre pixfmt;
-            typedef agg::renderer_base<pixfmt> renderer_base;
-            typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_solid;
+            using pixfmt = agg::pixfmt_rgba32_pre;
+            using renderer_base = agg::renderer_base<pixfmt>;
+            using renderer_solid = agg::renderer_scanline_aa_solid<renderer_base>;
             agg::rasterizer_scanline_aa<> ras_ptr;
             agg::scanline_u8 sl;
 
@@ -155,7 +158,7 @@ int main (int argc,char** argv)
                 std::clog << "found width of '" << w << "' and height of '" << h << "'\n";
             }
             // 10 pixel buffer to avoid edge clipping of 100% svg's
-            mapnik::image_32 im(w+10,h+10);
+            mapnik::image_32 im(w+0,h+0);
             agg::rendering_buffer buf(im.raw_data(), im.width(), im.height(), im.width() * 4);
             pixfmt pixf(buf);
             renderer_base renb(pixf);
diff --git a/utils/upgrade_map_xml/build.py b/utils/upgrade_map_xml/build.py
index 4b007db..648130f 100644
--- a/utils/upgrade_map_xml/build.py
+++ b/utils/upgrade_map_xml/build.py
@@ -1,7 +1,7 @@
 #
 # This file is part of Mapnik (c++ mapping toolkit)
 #
-# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
+# Copyright (C) 2013 Artem Pavlenko
 #
 # Mapnik is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/workspace/.gitignore b/workspace/.gitignore
deleted file mode 100644
index a222802..0000000
--- a/workspace/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.user*
diff --git a/workspace/mapnik.pro b/workspace/mapnik.pro
deleted file mode 100644
index 054961d..0000000
--- a/workspace/mapnik.pro
+++ /dev/null
@@ -1,23 +0,0 @@
-# -------------------------------------------------
-# QtCreator Project For Mapnik
-# -------------------------------------------------
-QT =
-
-TARGET = mapnik
-TEMPLATE = lib
-
-INCLUDEPATH = \
-    ../deps/agg/include \
-    ../include \
-    /usr/lib/oracle/11.2.0.3/client/include
-
-include(All.files)
-
-OTHER_FILES += \
-    ../SConstruct \
-    ../config.py \
-    ../CHANGELOG.md
-
-unix {
-    DEFINES += LINUX=1 MAPNIK_LOG=1
-}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mapnik.git



More information about the Pkg-grass-devel mailing list